@ -0,0 +1,66 @@ |
|||||
|
# 盒子IM后台管理 |
||||
|
|
||||
|
#### 介绍 |
||||
|
本项目为盒子IM后台管理,主要为盒子IM提供用户管理、群组管理、消息管理、敏感词管理等后台功能。 |
||||
|
|
||||
|
缺少后台管理基本不影响盒子IM的业务功能,建议先把业务服务跑起来,再来搭建后台服务: |
||||
|
业务代码地址:https://gitee.com/bluexsx/box-im |
||||
|
详细文档: https://www.yuque.com/u1475064/mufu2a |
||||
|
|
||||
|
#### 基于RuoYi-Vue-Plus框架 |
||||
|
为了减少重复工作,达到快速开发目的,本项目选择了一款优秀的开源脚手架RuoYi-Vue-Plus进行二次开发。 |
||||
|
|
||||
|
RuoYi-Vue-Plus的仓库: |
||||
|
后端:https://gitee.com/dromara/RuoYi-Vue-Plus |
||||
|
前端: https://gitee.com/JavaLionLi/plus-ui |
||||
|
|
||||
|
|
||||
|
#### 框架改造说明 |
||||
|
为了更好地与盒子IM的业务相结合,同时保持代码的简洁性,对ruoyi-vue-plus框架进行了以下改造: |
||||
|
1. 移除了定时任务、监控、工作流模块 |
||||
|
2. 添加minio模块替代原先的oss模块 |
||||
|
3. 加入了ruoyi-im模块,此模块即为盒子IM的核心后台模块 |
||||
|
4. 为了兼容历史数据,逻辑删除值由'2'修改为'1' |
||||
|
|
||||
|
#### 本地快速启动 |
||||
|
|
||||
|
1.安装运行环境 |
||||
|
- 安装node:v18.19.0 |
||||
|
- 安装jdk:17 |
||||
|
- 安装maven:3.9.6 |
||||
|
- 安装mysql:8.0,密码分别为root/root,创建名为im_admin的数据库,并执行db/im-admin.sql |
||||
|
- 安装redis:6.2 |
||||
|
- 安装minio:RELEASE.2024-xx,使用默认账号、密码、端口 |
||||
|
|
||||
|
注: 盒子IM的后台服务同时还依赖im-platform的数据库,请在启动前先初始化该数据库 |
||||
|
|
||||
|
2.启动后端服务 |
||||
|
进入 im-admin目录,打开控制台 |
||||
|
``` |
||||
|
mvn clean package |
||||
|
java -jar ./ruoyi-admin/target/im-admin.jar |
||||
|
``` |
||||
|
|
||||
|
3.启动前端 |
||||
|
进入 im-admin-ui目录,打开控制台 |
||||
|
``` |
||||
|
npm install |
||||
|
npm run dev |
||||
|
``` |
||||
|
访问 http://localhost:3000 |
||||
|
|
||||
|
#### 界面截图: |
||||
|
 |
||||
|
|
||||
|
 |
||||
|
|
||||
|
 |
||||
|
|
||||
|
 |
||||
|
|
||||
|
 |
||||
|
|
||||
|
|
||||
|
|
||||
|
#### 点下star吧 |
||||
|
如果项目对您有帮助,请点亮右上方的star,支持一下作者吧! |
||||
@ -0,0 +1,705 @@ |
|||||
|
-- ---------------------------- |
||||
|
-- 第三方平台授权表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_social |
||||
|
( |
||||
|
id bigint not null auto_increment comment '主键', |
||||
|
user_id bigint not null comment '用户ID', |
||||
|
tenant_id varchar(20) default null comment '租户id', |
||||
|
auth_id varchar(255) not null comment '平台+平台唯一id', |
||||
|
source varchar(255) not null comment '用户来源', |
||||
|
open_id varchar(255) default null comment '平台编号唯一id', |
||||
|
user_name varchar(30) not null comment '登录账号', |
||||
|
nick_name varchar(30) default '' comment '用户昵称', |
||||
|
email varchar(255) default '' comment '用户邮箱', |
||||
|
avatar varchar(500) default '' comment '头像地址', |
||||
|
access_token varchar(255) not null comment '用户的授权令牌', |
||||
|
expire_in int default null comment '用户的授权令牌的有效期,部分平台可能没有', |
||||
|
refresh_token varchar(255) default null comment '刷新令牌,部分平台可能没有', |
||||
|
access_code varchar(255) default null comment '平台的授权信息,部分平台可能没有', |
||||
|
union_id varchar(255) default null comment '用户的 unionid', |
||||
|
scope varchar(255) default null comment '授予的权限,部分平台可能没有', |
||||
|
token_type varchar(255) default null comment '个别平台的授权信息,部分平台可能没有', |
||||
|
id_token varchar(2000) default null comment 'id token,部分平台可能没有', |
||||
|
mac_algorithm varchar(255) default null comment '小米平台用户的附带属性,部分平台可能没有', |
||||
|
mac_key varchar(255) default null comment '小米平台用户的附带属性,部分平台可能没有', |
||||
|
code varchar(255) default null comment '用户的授权code,部分平台可能没有', |
||||
|
oauth_token varchar(255) default null comment 'Twitter平台用户的附带属性,部分平台可能没有', |
||||
|
oauth_token_secret varchar(255) default null comment 'Twitter平台用户的附带属性,部分平台可能没有', |
||||
|
create_dept bigint(20) comment '创建部门', |
||||
|
create_by bigint(20) comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
PRIMARY KEY (id) |
||||
|
) engine=innodb comment = '社会化关系表'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 租户表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_tenant |
||||
|
( |
||||
|
id bigint(20) not null auto_increment comment 'id', |
||||
|
tenant_id varchar(20) not null comment '租户编号', |
||||
|
contact_user_name varchar(20) comment '联系人', |
||||
|
contact_phone varchar(20) comment '联系电话', |
||||
|
company_name varchar(50) comment '企业名称', |
||||
|
license_number varchar(30) comment '统一社会信用代码', |
||||
|
address varchar(200) comment '地址', |
||||
|
intro varchar(200) comment '企业简介', |
||||
|
domain varchar(200) comment '域名', |
||||
|
remark varchar(200) comment '备注', |
||||
|
package_id bigint(20) comment '租户套餐编号', |
||||
|
expire_time datetime comment '过期时间', |
||||
|
account_count int default -1 comment '用户数量(-1不限制)', |
||||
|
status char(1) default '0' comment '租户状态(0正常 1停用)', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
create_dept bigint(20) comment '创建部门', |
||||
|
create_by bigint(20) comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
primary key (id) |
||||
|
) engine=innodb comment = '租户表'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 租户套餐表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_tenant_package ( |
||||
|
package_id bigint(20) not null auto_increment comment '租户套餐id', |
||||
|
package_name varchar(20) comment '套餐名称', |
||||
|
menu_ids varchar(3000) comment '关联菜单id', |
||||
|
remark varchar(200) comment '备注', |
||||
|
menu_check_strictly tinyint(1) default 1 comment '菜单树选择项是否关联显示', |
||||
|
status char(1) default '0' comment '状态(0正常 1停用)', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
create_dept bigint(20) comment '创建部门', |
||||
|
create_by bigint(20) comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
primary key (package_id) |
||||
|
) engine=innodb comment = '租户套餐表'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 1、部门表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_dept ( |
||||
|
dept_id bigint(20) not null auto_increment comment '部门id', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
parent_id bigint(20) default 0 comment '父部门id', |
||||
|
ancestors varchar(500) default '' comment '祖级列表', |
||||
|
dept_name varchar(30) default '' comment '部门名称', |
||||
|
dept_category varchar(100) default null comment '部门类别编码', |
||||
|
order_num int(4) default 0 comment '显示顺序', |
||||
|
leader bigint(20) default null comment '负责人', |
||||
|
phone varchar(11) default null comment '联系电话', |
||||
|
email varchar(50) default null comment '邮箱', |
||||
|
status char(1) default '0' comment '部门状态(0正常 1停用)', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
primary key (dept_id) |
||||
|
) engine=innodb comment = '部门表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 初始化-部门表数据 |
||||
|
-- ---------------------------- |
||||
|
|
||||
|
|
||||
|
insert into sys_dept values(100, '000000', 0, '0', '盒子科技', null,0, null, '15888888888', 'xxx@qq.com', '0', '0', 103, 1, sysdate(), null, null); |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 2、用户信息表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_user ( |
||||
|
user_id bigint(20) not null auto_increment comment '用户ID', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
dept_id bigint(20) default null comment '部门ID', |
||||
|
user_name varchar(30) not null comment '用户账号', |
||||
|
nick_name varchar(30) not null comment '用户昵称', |
||||
|
user_type varchar(10) default 'sys_user' comment '用户类型(sys_user系统用户)', |
||||
|
email varchar(50) default '' comment '用户邮箱', |
||||
|
phonenumber varchar(11) default '' comment '手机号码', |
||||
|
sex char(1) default '0' comment '用户性别(0男 1女 2未知)', |
||||
|
avatar varchar(256) comment '头像地址', |
||||
|
password varchar(100) default '' comment '密码', |
||||
|
status char(1) default '0' comment '帐号状态(0正常 1停用)', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
login_ip varchar(128) default '' comment '最后登录IP', |
||||
|
login_date datetime comment '最后登录时间', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (user_id) |
||||
|
) engine=innodb comment = '用户信息表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 初始化-用户信息表数据 |
||||
|
-- ---------------------------- |
||||
|
insert into sys_user values(1, '000000', 100, 'admin', 'admin', 'sys_user', 'xxx@163.com', '15888888888', '1', null, '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', sysdate(), 103, 1, sysdate(), null, null, '管理员'); |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 3、岗位信息表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_post |
||||
|
( |
||||
|
post_id bigint(20) not null auto_increment comment '岗位ID', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
dept_id bigint(20) not null comment '部门id', |
||||
|
post_code varchar(64) not null comment '岗位编码', |
||||
|
post_category varchar(100) default null comment '岗位类别编码', |
||||
|
post_name varchar(50) not null comment '岗位名称', |
||||
|
post_sort int(4) not null comment '显示顺序', |
||||
|
status char(1) not null comment '状态(0正常 1停用)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (post_id) |
||||
|
) engine=innodb comment = '岗位信息表'; |
||||
|
|
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 4、角色信息表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_role ( |
||||
|
role_id bigint(20) not null auto_increment comment '角色ID', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
role_name varchar(30) not null comment '角色名称', |
||||
|
role_key varchar(100) not null comment '角色权限字符串', |
||||
|
role_sort int(4) not null comment '显示顺序', |
||||
|
data_scope char(1) default '1' comment '数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)', |
||||
|
menu_check_strictly tinyint(1) default 1 comment '菜单树选择项是否关联显示', |
||||
|
dept_check_strictly tinyint(1) default 1 comment '部门树选择项是否关联显示', |
||||
|
status char(1) not null comment '角色状态(0正常 1停用)', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (role_id) |
||||
|
) engine=innodb comment = '角色信息表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 初始化-角色信息表数据 |
||||
|
-- ---------------------------- |
||||
|
insert into sys_role values(1, '000000', '超级管理员', 'superadmin', 1, 1, 1, 1, '0', '0', 103, 1, sysdate(), null, null, '超级管理员'); |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 5、菜单权限表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_menu ( |
||||
|
menu_id bigint(20) not null auto_increment comment '菜单ID', |
||||
|
menu_name varchar(50) not null comment '菜单名称', |
||||
|
parent_id bigint(20) default 0 comment '父菜单ID', |
||||
|
order_num int(4) default 0 comment '显示顺序', |
||||
|
path varchar(200) default '' comment '路由地址', |
||||
|
component varchar(255) default null comment '组件路径', |
||||
|
query_param varchar(255) default null comment '路由参数', |
||||
|
is_frame int(1) default 1 comment '是否为外链(0是 1否)', |
||||
|
is_cache int(1) default 0 comment '是否缓存(0缓存 1不缓存)', |
||||
|
menu_type char(1) default '' comment '菜单类型(M目录 C菜单 F按钮)', |
||||
|
visible char(1) default 0 comment '显示状态(0显示 1隐藏)', |
||||
|
status char(1) default 0 comment '菜单状态(0正常 1停用)', |
||||
|
perms varchar(100) default null comment '权限标识', |
||||
|
icon varchar(100) default '#' comment '菜单图标', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default '' comment '备注', |
||||
|
primary key (menu_id) |
||||
|
) engine=innodb comment = '菜单权限表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 初始化-菜单信息表数据 |
||||
|
-- ---------------------------- |
||||
|
-- 一级菜单 |
||||
|
insert into sys_menu values('1', '系统管理', '0', '11', 'system', null, '', 1, 0, 'M', '0', '0', '', 'system', 103, 1, sysdate(), null, null, '系统管理目录'); |
||||
|
insert into sys_menu values('2', '系统监控', '0', '13', 'monitor', null, '', 1, 0, 'M', '0', '0', '', 'monitor', 103, 1, sysdate(), null, null, '系统监控目录'); |
||||
|
insert into sys_menu values('3', '系统工具', '0', '14', 'tool', null, '', 1, 0, 'M', '0', '0', '', 'tool', 103, 1, sysdate(), null, null, '系统工具目录'); |
||||
|
|
||||
|
-- 二级菜单 |
||||
|
insert into sys_menu values('100', '系统用户', '1', '1', 'user', 'system/user/index', '', 1, 0, 'C', '0', '0', 'system:user:list', 'user', 103, 1, sysdate(), null, null, '用户管理菜单'); |
||||
|
insert into sys_menu values('101', '角色管理', '1', '2', 'role', 'system/role/index', '', 1, 0, 'C', '0', '0', 'system:role:list', 'peoples', 103, 1, sysdate(), null, null, '角色管理菜单'); |
||||
|
insert into sys_menu values('102', '菜单管理', '1', '3', 'menu', 'system/menu/index', '', 1, 0, 'C', '0', '0', 'system:menu:list', 'tree-table', 103, 1, sysdate(), null, null, '菜单管理菜单'); |
||||
|
insert into sys_menu values('103', '部门管理', '1', '4', 'dept', 'system/dept/index', '', 1, 0, 'C', '0', '0', 'system:dept:list', 'tree', 103, 1, sysdate(), null, null, '部门管理菜单'); |
||||
|
insert into sys_menu values('104', '岗位管理', '1', '5', 'post', 'system/post/index', '', 1, 0, 'C', '0', '0', 'system:post:list', 'post', 103, 1, sysdate(), null, null, '岗位管理菜单'); |
||||
|
insert into sys_menu values('105', '字典管理', '1', '6', 'dict', 'system/dict/index', '', 1, 0, 'C', '0', '0', 'system:dict:list', 'dict', 103, 1, sysdate(), null, null, '字典管理菜单'); |
||||
|
insert into sys_menu values('106', '参数设置', '1', '7', 'config', 'system/config/index', '', 1, 0, 'C', '0', '0', 'system:config:list', 'edit', 103, 1, sysdate(), null, null, '参数设置菜单'); |
||||
|
insert into sys_menu values('107', '通知公告', '1', '8', 'notice', 'system/notice/index', '', 1, 0, 'C', '0', '0', 'system:notice:list', 'message', 103, 1, sysdate(), null, null, '通知公告菜单'); |
||||
|
insert into sys_menu values('108', '日志管理', '1', '9', 'log', '', '', 1, 0, 'M', '0', '0', '', 'log', 103, 1, sysdate(), null, null, '日志管理菜单'); |
||||
|
insert into sys_menu values('109', '在线用户', '2', '1', 'online', 'monitor/online/index', '', 1, 0, 'C', '0', '0', 'monitor:online:list', 'online', 103, 1, sysdate(), null, null, '在线用户菜单'); |
||||
|
insert into sys_menu values('113', '缓存监控', '2', '5', 'cache', 'monitor/cache/index', '', 1, 0, 'C', '0', '0', 'monitor:cache:list', 'redis', 103, 1, sysdate(), null, null, '缓存监控菜单'); |
||||
|
insert into sys_menu values('115', '代码生成', '3', '2', 'gen', 'tool/gen/index', '', 1, 0, 'C', '0', '0', 'tool:gen:list', 'code', 103, 1, sysdate(), null, null, '代码生成菜单'); |
||||
|
insert into sys_menu values('123', '客户端管理', '1', '11', 'client', 'system/client/index', '', 1, 0, 'C', '0', '0', 'system:client:list', 'international', 103, 1, sysdate(), null, null, '客户端管理菜单'); |
||||
|
|
||||
|
|
||||
|
-- 三级菜单 |
||||
|
insert into sys_menu values('500', '操作日志', '108', '1', 'operlog', 'monitor/operlog/index', '', 1, 0, 'C', '0', '0', 'monitor:operlog:list', 'form', 103, 1, sysdate(), null, null, '操作日志菜单'); |
||||
|
insert into sys_menu values('501', '登录日志', '108', '2', 'logininfor', 'monitor/logininfor/index', '', 1, 0, 'C', '0', '0', 'monitor:logininfor:list', 'logininfor', 103, 1, sysdate(), null, null, '登录日志菜单'); |
||||
|
-- 用户管理按钮 |
||||
|
insert into sys_menu values('1001', '用户查询', '100', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:user:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1002', '用户新增', '100', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:user:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1003', '用户修改', '100', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:user:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1004', '用户删除', '100', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:user:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1005', '用户导出', '100', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:user:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1006', '用户导入', '100', '6', '', '', '', 1, 0, 'F', '0', '0', 'system:user:import', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1007', '重置密码', '100', '7', '', '', '', 1, 0, 'F', '0', '0', 'system:user:resetPwd', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 角色管理按钮 |
||||
|
insert into sys_menu values('1008', '角色查询', '101', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:role:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1009', '角色新增', '101', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:role:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1010', '角色修改', '101', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:role:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1011', '角色删除', '101', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:role:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1012', '角色导出', '101', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:role:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 菜单管理按钮 |
||||
|
insert into sys_menu values('1013', '菜单查询', '102', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1014', '菜单新增', '102', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1015', '菜单修改', '102', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1016', '菜单删除', '102', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:menu:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 部门管理按钮 |
||||
|
insert into sys_menu values('1017', '部门查询', '103', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1018', '部门新增', '103', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1019', '部门修改', '103', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1020', '部门删除', '103', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:dept:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 岗位管理按钮 |
||||
|
insert into sys_menu values('1021', '岗位查询', '104', '1', '', '', '', 1, 0, 'F', '0', '0', 'system:post:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1022', '岗位新增', '104', '2', '', '', '', 1, 0, 'F', '0', '0', 'system:post:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1023', '岗位修改', '104', '3', '', '', '', 1, 0, 'F', '0', '0', 'system:post:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1024', '岗位删除', '104', '4', '', '', '', 1, 0, 'F', '0', '0', 'system:post:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1025', '岗位导出', '104', '5', '', '', '', 1, 0, 'F', '0', '0', 'system:post:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 字典管理按钮 |
||||
|
insert into sys_menu values('1026', '字典查询', '105', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1027', '字典新增', '105', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1028', '字典修改', '105', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1029', '字典删除', '105', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1030', '字典导出', '105', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:dict:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 参数设置按钮 |
||||
|
insert into sys_menu values('1031', '参数查询', '106', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1032', '参数新增', '106', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1033', '参数修改', '106', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1034', '参数删除', '106', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1035', '参数导出', '106', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:config:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 通知公告按钮 |
||||
|
insert into sys_menu values('1036', '公告查询', '107', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1037', '公告新增', '107', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1038', '公告修改', '107', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1039', '公告删除', '107', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:notice:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 操作日志按钮 |
||||
|
insert into sys_menu values('1040', '操作查询', '500', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1041', '操作删除', '500', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1042', '日志导出', '500', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:operlog:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 登录日志按钮 |
||||
|
insert into sys_menu values('1043', '登录查询', '501', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1044', '登录删除', '501', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1045', '日志导出', '501', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1050', '账户解锁', '501', '4', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:logininfor:unlock', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 在线用户按钮 |
||||
|
insert into sys_menu values('1046', '在线查询', '109', '1', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1047', '批量强退', '109', '2', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:batchLogout', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1048', '单条强退', '109', '3', '#', '', '', 1, 0, 'F', '0', '0', 'monitor:online:forceLogout', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
-- 代码生成按钮 |
||||
|
insert into sys_menu values('1055', '生成查询', '115', '1', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1056', '生成修改', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1057', '生成删除', '115', '3', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1058', '导入代码', '115', '2', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:import', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1059', '预览代码', '115', '4', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:preview', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1060', '生成代码', '115', '5', '#', '', '', 1, 0, 'F', '0', '0', 'tool:gen:code', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- 客户端管理按钮 |
||||
|
insert into sys_menu values('1061', '客户端管理查询', '123', '1', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1062', '客户端管理新增', '123', '2', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1063', '客户端管理修改', '123', '3', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1064', '客户端管理删除', '123', '4', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('1065', '客户端管理导出', '123', '5', '#', '', '', 1, 0, 'F', '0', '0', 'system:client:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- IM-用户管理 |
||||
|
insert into sys_menu values('4', '用户管理', '0', '1', 'im/user', 'im/user/index', '', 1, 0, 'C', '0', '0', 'im:user:list', 'user', 103, 1, sysdate(), null, null, 'IM用户管理'); |
||||
|
insert into sys_menu values('4001', '用户查询', '4', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:user:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('4002', '用户封禁', '4', '2', '#', '', '', 1, 0, 'F', '0', '0', 'im:user:ban', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('4003', '用户导出', '4', '3', '#', '', '', 1, 0, 'F', '0', '0', 'im:user:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- IM-群聊管理 |
||||
|
insert into sys_menu values('5', '群聊管理', '0', '2', 'im/group', 'im/group/index', '', 1, 0, 'C', '0', '0', 'im:group:list', 'peoples', 103, 1, sysdate(), null, null, 'IM群聊管理'); |
||||
|
insert into sys_menu values('5001', '群聊查询', '5', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('5002', '群聊封禁', '5', '2', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:ban', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('5003', '群聊导出', '5', '3', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('5004', '群聊成员', '5', '4', '#', '', '', 1, 0, 'F', '0', '0', 'im:group:member', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- IM-私聊消息 |
||||
|
insert into sys_menu values('6', '消息管理', '0', '3', 'message', null, '', 1, 0, 'M', '0', '0', '', 'message', 103, 1, sysdate(), null, null, 'IM消息管理'); |
||||
|
insert into sys_menu values('60', '私聊消息', '6', '1', 'private','im/message/private/index', '', 1, 0, 'C', '0', '0', 'im:privateMessage:list', 'education', 103, 1, sysdate(), null, null, 'IM私聊消息'); |
||||
|
insert into sys_menu values('6001', '私聊消息查询', '60', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:privateMessage:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- IM-群聊消息 |
||||
|
insert into sys_menu values('61', '群聊消息', '6', '2', 'group', 'im/message/group/index', '', 1, 0, 'C', '0', '0', 'im:groupMessage:list', 'category', 103, 1, sysdate(), null, null, 'IM群聊消息'); |
||||
|
insert into sys_menu values('6101', '群聊消息查询', '61', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:groupMessage:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- IM-敏感词管理 |
||||
|
insert into sys_menu values('7', '敏感词管理', '0', '2', 'im/sensitiveWord', 'im/sensitiveWord/index', '', 1, 0, 'C', '0', '0', 'im:sensitiveWord:list', 'documentation', 103, 1, sysdate(), null, null, 'IM敏感词管理'); |
||||
|
insert into sys_menu values('7001', '敏感词查询', '7', '1', '#', '', '', 1, 0, 'F', '0', '0', 'im:sensitiveWord:query', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('7002', '敏感词添加', '7', '2', '#', '', '', 1, 0, 'F', '0', '0', 'im:sensitiveWord:add', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('7003', '敏感词删除', '7', '3', '#', '', '', 1, 0, 'F', '0', '0', 'im:sensitiveWord:remove', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('7004', '敏感词修改', '7', '4', '#', '', '', 1, 0, 'F', '0', '0', 'im:sensitiveWord:edit', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_menu values('7005', '敏感词导出', '7', '5', '#', '', '', 1, 0, 'F', '0', '0', 'im:sensitiveWord:export', '#', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 6、用户和角色关联表 用户N-1角色 |
||||
|
-- ---------------------------- |
||||
|
create table sys_user_role ( |
||||
|
user_id bigint(20) not null auto_increment comment '用户ID', |
||||
|
role_id bigint(20) not null comment '角色ID', |
||||
|
primary key(user_id, role_id) |
||||
|
) engine=innodb comment = '用户和角色关联表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 初始化-用户和角色关联表数据 |
||||
|
-- ---------------------------- |
||||
|
insert into sys_user_role values ('1', '1'); |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 7、角色和菜单关联表 角色1-N菜单 |
||||
|
-- ---------------------------- |
||||
|
create table sys_role_menu ( |
||||
|
role_id bigint(20) not null auto_increment comment '角色ID', |
||||
|
menu_id bigint(20) not null comment '菜单ID', |
||||
|
primary key(role_id, menu_id) |
||||
|
) engine=innodb comment = '角色和菜单关联表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 8、角色和部门关联表 角色1-N部门 |
||||
|
-- ---------------------------- |
||||
|
create table sys_role_dept ( |
||||
|
role_id bigint(20) not null auto_increment comment '角色ID', |
||||
|
dept_id bigint(20) not null comment '部门ID', |
||||
|
primary key(role_id, dept_id) |
||||
|
) engine=innodb comment = '角色和部门关联表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 9、用户与岗位关联表 用户1-N岗位 |
||||
|
-- ---------------------------- |
||||
|
create table sys_user_post |
||||
|
( |
||||
|
user_id bigint(20) not null auto_increment comment '用户ID', |
||||
|
post_id bigint(20) not null comment '岗位ID', |
||||
|
primary key (user_id, post_id) |
||||
|
) engine=innodb comment = '用户与岗位关联表'; |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 初始化-用户与岗位关联表数据 |
||||
|
-- ---------------------------- |
||||
|
insert into sys_user_post values ('1', '1'); |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 10、操作日志记录 |
||||
|
-- ---------------------------- |
||||
|
create table sys_oper_log ( |
||||
|
oper_id bigint(20) not null auto_increment comment '日志主键', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
title varchar(50) default '' comment '模块标题', |
||||
|
business_type int(2) default 0 comment '业务类型(0其它 1新增 2修改 3删除)', |
||||
|
method varchar(100) default '' comment '方法名称', |
||||
|
request_method varchar(10) default '' comment '请求方式', |
||||
|
operator_type int(1) default 0 comment '操作类别(0其它 1后台用户 2手机端用户)', |
||||
|
oper_name varchar(50) default '' comment '操作人员', |
||||
|
dept_name varchar(50) default '' comment '部门名称', |
||||
|
oper_url varchar(255) default '' comment '请求URL', |
||||
|
oper_ip varchar(128) default '' comment '主机地址', |
||||
|
oper_location varchar(255) default '' comment '操作地点', |
||||
|
oper_param varchar(2000) default '' comment '请求参数', |
||||
|
json_result varchar(2000) default '' comment '返回参数', |
||||
|
status int(1) default 0 comment '操作状态(0正常 1异常)', |
||||
|
error_msg varchar(2000) default '' comment '错误消息', |
||||
|
oper_time datetime comment '操作时间', |
||||
|
cost_time bigint(20) default 0 comment '消耗时间', |
||||
|
primary key (oper_id), |
||||
|
key idx_sys_oper_log_bt (business_type), |
||||
|
key idx_sys_oper_log_s (status), |
||||
|
key idx_sys_oper_log_ot (oper_time) |
||||
|
) engine=innodb comment = '操作日志记录'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 11、字典类型表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_dict_type |
||||
|
( |
||||
|
dict_id bigint(20) not null auto_increment comment '字典主键', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
dict_name varchar(100) default '' comment '字典名称', |
||||
|
dict_type varchar(100) default '' comment '字典类型', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (dict_id), |
||||
|
unique (tenant_id, dict_type) |
||||
|
) engine=innodb comment = '字典类型表'; |
||||
|
|
||||
|
insert into sys_dict_type values(1, '000000', '用户性别', 'sys_user_sex', 103, 1, sysdate(), null, null, '用户性别列表'); |
||||
|
insert into sys_dict_type values(2, '000000', '菜单状态', 'sys_show_hide', 103, 1, sysdate(), null, null, '菜单状态列表'); |
||||
|
insert into sys_dict_type values(3, '000000', '系统开关', 'sys_normal_disable', 103, 1, sysdate(), null, null, '系统开关列表'); |
||||
|
insert into sys_dict_type values(6, '000000', '系统是否', 'sys_yes_no', 103, 1, sysdate(), null, null, '系统是否列表'); |
||||
|
insert into sys_dict_type values(7, '000000', '通知类型', 'sys_notice_type', 103, 1, sysdate(), null, null, '通知类型列表'); |
||||
|
insert into sys_dict_type values(8, '000000', '通知状态', 'sys_notice_status', 103, 1, sysdate(), null, null, '通知状态列表'); |
||||
|
insert into sys_dict_type values(9, '000000', '操作类型', 'sys_oper_type', 103, 1, sysdate(), null, null, '操作类型列表'); |
||||
|
insert into sys_dict_type values(10, '000000', '系统状态', 'sys_common_status', 103, 1, sysdate(), null, null, '登录状态列表'); |
||||
|
insert into sys_dict_type values(11, '000000', '授权类型', 'sys_grant_type', 103, 1, sysdate(), null, null, '认证授权类型'); |
||||
|
insert into sys_dict_type values(12, '000000', '设备类型', 'sys_device_type', 103, 1, sysdate(), null, null, '客户端设备类型'); |
||||
|
insert into sys_dict_type values(13, '000000', '布尔值', 'im_bool', 103, 1, sysdate(), null, null, '布尔值, true 或 false'); |
||||
|
insert into sys_dict_type values(14, '000000', '用户状态', 'im_user_status', 103, 1, sysdate(), null, null, 'IM用户状态'); |
||||
|
insert into sys_dict_type values(15, '000000', '消息状态', 'im_message_status', 103, 1, sysdate(), null, null, 'IM消息状态'); |
||||
|
insert into sys_dict_type values(16, '000000', '消息类型', 'im_message_type', 103, 1, sysdate(), null, null, 'IM消息类型'); |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 12、字典数据表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_dict_data |
||||
|
( |
||||
|
dict_code bigint(20) not null auto_increment comment '字典编码', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
dict_sort int(4) default 0 comment '字典排序', |
||||
|
dict_label varchar(100) default '' comment '字典标签', |
||||
|
dict_value varchar(100) default '' comment '字典键值', |
||||
|
dict_type varchar(100) default '' comment '字典类型', |
||||
|
css_class varchar(100) default null comment '样式属性(其他样式扩展)', |
||||
|
list_class varchar(100) default null comment '表格回显样式', |
||||
|
is_default char(1) default 'N' comment '是否默认(Y是 N否)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (dict_code) |
||||
|
) engine=innodb comment = '字典数据表'; |
||||
|
|
||||
|
insert into sys_dict_data values(1, '000000', 1, '男', '0', 'sys_user_sex', '', '', 'Y', 103, 1, sysdate(), null, null, '性别男'); |
||||
|
insert into sys_dict_data values(2, '000000', 2, '女', '1', 'sys_user_sex', '', '', 'N', 103, 1, sysdate(), null, null, '性别女'); |
||||
|
insert into sys_dict_data values(3, '000000', 3, '未知', '2', 'sys_user_sex', '', '', 'N', 103, 1, sysdate(), null, null, '性别未知'); |
||||
|
insert into sys_dict_data values(4, '000000', 1, '显示', '0', 'sys_show_hide', '', 'primary', 'Y', 103, 1, sysdate(), null, null, '显示菜单'); |
||||
|
insert into sys_dict_data values(5, '000000', 2, '隐藏', '1', 'sys_show_hide', '', 'danger', 'N', 103, 1, sysdate(), null, null, '隐藏菜单'); |
||||
|
insert into sys_dict_data values(6, '000000', 1, '正常', '0', 'sys_normal_disable', '', 'primary', 'Y', 103, 1, sysdate(), null, null, '正常状态'); |
||||
|
insert into sys_dict_data values(7, '000000', 2, '停用', '1', 'sys_normal_disable', '', 'danger', 'N', 103, 1, sysdate(), null, null, '停用状态'); |
||||
|
insert into sys_dict_data values(12, '000000', 1, '是', 'Y', 'sys_yes_no', '', 'primary', 'Y', 103, 1, sysdate(), null, null, '系统默认是'); |
||||
|
insert into sys_dict_data values(13, '000000', 2, '否', 'N', 'sys_yes_no', '', 'danger', 'N', 103, 1, sysdate(), null, null, '系统默认否'); |
||||
|
insert into sys_dict_data values(14, '000000', 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', 103, 1, sysdate(), null, null, '通知'); |
||||
|
insert into sys_dict_data values(15, '000000', 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', 103, 1, sysdate(), null, null, '公告'); |
||||
|
insert into sys_dict_data values(16, '000000', 1, '正常', '0', 'sys_notice_status', '', 'primary', 'Y', 103, 1, sysdate(), null, null, '正常状态'); |
||||
|
insert into sys_dict_data values(17, '000000', 2, '关闭', '1', 'sys_notice_status', '', 'danger', 'N', 103, 1, sysdate(), null, null, '关闭状态'); |
||||
|
insert into sys_dict_data values(29, '000000', 99, '其他', '0', 'sys_oper_type', '', 'info', 'N', 103, 1, sysdate(), null, null, '其他操作'); |
||||
|
insert into sys_dict_data values(18, '000000', 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', 103, 1, sysdate(), null, null, '新增操作'); |
||||
|
insert into sys_dict_data values(19, '000000', 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', 103, 1, sysdate(), null, null, '修改操作'); |
||||
|
insert into sys_dict_data values(20, '000000', 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', 103, 1, sysdate(), null, null, '删除操作'); |
||||
|
insert into sys_dict_data values(21, '000000', 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, '授权操作'); |
||||
|
insert into sys_dict_data values(22, '000000', 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', 103, 1, sysdate(), null, null, '导出操作'); |
||||
|
insert into sys_dict_data values(23, '000000', 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', 103, 1, sysdate(), null, null, '导入操作'); |
||||
|
insert into sys_dict_data values(24, '000000', 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', 103, 1, sysdate(), null, null, '强退操作'); |
||||
|
insert into sys_dict_data values(25, '000000', 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', 103, 1, sysdate(), null, null, '生成操作'); |
||||
|
insert into sys_dict_data values(26, '000000', 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', 103, 1, sysdate(), null, null, '清空操作'); |
||||
|
insert into sys_dict_data values(27, '000000', 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', 103, 1, sysdate(), null, null, '正常状态'); |
||||
|
insert into sys_dict_data values(28, '000000', 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', 103, 1, sysdate(), null, null, '停用状态'); |
||||
|
insert into sys_dict_data values(30, '000000', 0, '密码认证', 'password', 'sys_grant_type', 'el-check-tag', 'default', 'N', 103, 1, sysdate(), null, null, '密码认证'); |
||||
|
insert into sys_dict_data values(31, '000000', 0, '短信认证', 'sms', 'sys_grant_type', 'el-check-tag', 'default', 'N', 103, 1, sysdate(), null, null, '短信认证'); |
||||
|
insert into sys_dict_data values(32, '000000', 0, '邮件认证', 'email', 'sys_grant_type', 'el-check-tag', 'default', 'N', 103, 1, sysdate(), null, null, '邮件认证'); |
||||
|
insert into sys_dict_data values(33, '000000', 0, '小程序认证', 'xcx', 'sys_grant_type', 'el-check-tag', 'default', 'N', 103, 1, sysdate(), null, null, '小程序认证'); |
||||
|
insert into sys_dict_data values(34, '000000', 0, '三方登录认证', 'social', 'sys_grant_type', 'el-check-tag', 'default', 'N', 103, 1, sysdate(), null, null, '三方登录认证'); |
||||
|
insert into sys_dict_data values(35, '000000', 0, 'PC', 'pc', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, 'PC'); |
||||
|
insert into sys_dict_data values(36, '000000', 0, '安卓', 'android', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, '安卓'); |
||||
|
insert into sys_dict_data values(37, '000000', 0, 'iOS', 'ios', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, 'iOS'); |
||||
|
insert into sys_dict_data values(38, '000000', 0, '小程序', 'xcx', 'sys_device_type', '', 'default', 'N', 103, 1, sysdate(), null, null, '小程序'); |
||||
|
insert into sys_dict_data values(39, '000000', 0, '否', 'false', 'im_bool', '', 'danger', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(40, '000000', 0, '是', 'true', 'im_bool', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(41, '000000', 0, '正常', '0', 'im_user_status', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(42, '000000', 0, '已注销', '1', 'im_user_status', '', 'danger', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(43, '000000', 1, '未发送', '0', 'im_message_status', '', 'danger', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(44, '000000', 2, '送达', '1', 'im_message_status', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(45, '000000', 3, '撤回', '2', 'im_message_status', '', 'warning', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(46, '000000', 4, '已读', '3', 'im_message_status', '', 'success', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(47, '000000', 1, '文字', '0', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(48, '000000', 2, '图片', '1', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(49, '000000', 3, '文件', '2', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(50, '000000', 4, '语音', '3', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(51, '000000', 5, '视频', '4', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(52, '000000', 6, '文字提示', '21', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(53, '000000', 7, '语音通话', '40', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
insert into sys_dict_data values(54, '000000', 8, '视频通话', '41', 'im_message_type', '', 'primary', 'N', 103, 1, sysdate(), null, null, ''); |
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 13、参数配置表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_config ( |
||||
|
config_id bigint(20) not null auto_increment comment '参数主键', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
config_name varchar(100) default '' comment '参数名称', |
||||
|
config_key varchar(100) default '' comment '参数键名', |
||||
|
config_value varchar(500) default '' comment '参数键值', |
||||
|
config_type char(1) default 'N' comment '系统内置(Y是 N否)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (config_id) |
||||
|
) engine=innodb comment = '参数配置表'; |
||||
|
|
||||
|
insert into sys_config values(1, '000000', '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 103, 1, sysdate(), null, null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' ); |
||||
|
insert into sys_config values(2, '000000', '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 103, 1, sysdate(), null, null, '初始化密码 123456' ); |
||||
|
insert into sys_config values(3, '000000', '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 103, 1, sysdate(), null, null, '深色主题theme-dark,浅色主题theme-light' ); |
||||
|
insert into sys_config values(5, '000000', '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 103, 1, sysdate(), null, null, '是否开启注册用户功能(true开启,false关闭)'); |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 14、系统访问记录 |
||||
|
-- ---------------------------- |
||||
|
create table sys_logininfor ( |
||||
|
info_id bigint(20) not null auto_increment comment '访问ID', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
user_name varchar(50) default '' comment '用户账号', |
||||
|
client_key varchar(32) default '' comment '客户端', |
||||
|
device_type varchar(32) default '' comment '设备类型', |
||||
|
ipaddr varchar(128) default '' comment '登录IP地址', |
||||
|
login_location varchar(255) default '' comment '登录地点', |
||||
|
browser varchar(50) default '' comment '浏览器类型', |
||||
|
os varchar(50) default '' comment '操作系统', |
||||
|
status char(1) default '0' comment '登录状态(0成功 1失败)', |
||||
|
msg varchar(255) default '' comment '提示消息', |
||||
|
login_time datetime comment '访问时间', |
||||
|
primary key (info_id), |
||||
|
key idx_sys_logininfor_s (status), |
||||
|
key idx_sys_logininfor_lt (login_time) |
||||
|
) engine=innodb comment = '系统访问记录'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 17、通知公告表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_notice ( |
||||
|
notice_id bigint(20) not null auto_increment comment '公告ID', |
||||
|
tenant_id varchar(20) default '000000' comment '租户编号', |
||||
|
notice_title varchar(50) not null comment '公告标题', |
||||
|
notice_type char(1) not null comment '公告类型(1通知 2公告)', |
||||
|
notice_content longblob default null comment '公告内容', |
||||
|
status char(1) default '0' comment '公告状态(0正常 1关闭)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(255) default null comment '备注', |
||||
|
primary key (notice_id) |
||||
|
) engine=innodb comment = '通知公告表'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 18、代码生成业务表 |
||||
|
-- ---------------------------- |
||||
|
create table gen_table ( |
||||
|
table_id bigint(20) not null auto_increment comment '编号', |
||||
|
data_name varchar(200) default '' comment '数据源名称', |
||||
|
table_name varchar(200) default '' comment '表名称', |
||||
|
table_comment varchar(500) default '' comment '表描述', |
||||
|
sub_table_name varchar(64) default null comment '关联子表的表名', |
||||
|
sub_table_fk_name varchar(64) default null comment '子表关联的外键名', |
||||
|
class_name varchar(100) default '' comment '实体类名称', |
||||
|
tpl_category varchar(200) default 'crud' comment '使用的模板(crud单表操作 tree树表操作)', |
||||
|
package_name varchar(100) comment '生成包路径', |
||||
|
module_name varchar(30) comment '生成模块名', |
||||
|
business_name varchar(30) comment '生成业务名', |
||||
|
function_name varchar(50) comment '生成功能名', |
||||
|
function_author varchar(50) comment '生成功能作者', |
||||
|
gen_type char(1) default '0' comment '生成代码方式(0zip压缩包 1自定义路径)', |
||||
|
gen_path varchar(200) default '/' comment '生成路径(不填默认项目路径)', |
||||
|
options varchar(1000) comment '其它生成选项', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
remark varchar(500) default null comment '备注', |
||||
|
primary key (table_id) |
||||
|
) engine=innodb comment = '代码生成业务表'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 19、代码生成业务表字段 |
||||
|
-- ---------------------------- |
||||
|
create table gen_table_column ( |
||||
|
column_id bigint(20) not null auto_increment comment '编号', |
||||
|
table_id bigint(20) comment '归属表编号', |
||||
|
column_name varchar(200) comment '列名称', |
||||
|
column_comment varchar(500) comment '列描述', |
||||
|
column_type varchar(100) comment '列类型', |
||||
|
java_type varchar(500) comment 'JAVA类型', |
||||
|
java_field varchar(200) comment 'JAVA字段名', |
||||
|
is_pk char(1) comment '是否主键(1是)', |
||||
|
is_increment char(1) comment '是否自增(1是)', |
||||
|
is_required char(1) comment '是否必填(1是)', |
||||
|
is_insert char(1) comment '是否为插入字段(1是)', |
||||
|
is_edit char(1) comment '是否编辑字段(1是)', |
||||
|
is_list char(1) comment '是否列表字段(1是)', |
||||
|
is_query char(1) comment '是否查询字段(1是)', |
||||
|
query_type varchar(200) default 'EQ' comment '查询方式(等于、不等于、大于、小于、范围)', |
||||
|
html_type varchar(200) comment '显示类型(文本框、文本域、下拉框、复选框、单选框、日期控件)', |
||||
|
dict_type varchar(200) default '' comment '字典类型', |
||||
|
sort int comment '排序', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime comment '更新时间', |
||||
|
primary key (column_id) |
||||
|
) engine=innodb comment = '代码生成业务表字段'; |
||||
|
|
||||
|
|
||||
|
-- ---------------------------- |
||||
|
-- 系统授权表 |
||||
|
-- ---------------------------- |
||||
|
create table sys_client ( |
||||
|
id bigint(20) not null auto_increment comment 'id', |
||||
|
client_id varchar(64) default null comment '客户端id', |
||||
|
client_key varchar(32) default null comment '客户端key', |
||||
|
client_secret varchar(255) default null comment '客户端秘钥', |
||||
|
grant_type varchar(255) default null comment '授权类型', |
||||
|
device_type varchar(32) default null comment '设备类型', |
||||
|
active_timeout int(11) default 1800 comment 'token活跃超时时间', |
||||
|
timeout int(11) default 604800 comment 'token固定超时', |
||||
|
status char(1) default '0' comment '状态(0正常 1停用)', |
||||
|
del_flag char(1) default '0' comment '删除标志(0代表存在 1代表删除)', |
||||
|
create_dept bigint(20) default null comment '创建部门', |
||||
|
create_by bigint(20) default null comment '创建者', |
||||
|
create_time datetime default null comment '创建时间', |
||||
|
update_by bigint(20) default null comment '更新者', |
||||
|
update_time datetime default null comment '更新时间', |
||||
|
primary key (id) |
||||
|
) engine=innodb comment='系统授权表'; |
||||
|
|
||||
|
insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 'pc', 1800, 604800, 0, 0, 103, 1, sysdate(), 1, sysdate()); |
||||
|
insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 'android', 1800, 604800, 0, 0, 103, 1, sysdate(), 1, sysdate()); |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,21 @@ |
|||||
|
# 告诉EditorConfig插件,这是根文件,不用继续往上查找 |
||||
|
root = true |
||||
|
|
||||
|
# 匹配全部文件 |
||||
|
[*] |
||||
|
# 缩进风格,可选space、tab |
||||
|
indent_style = space |
||||
|
# 缩进的空格数 |
||||
|
indent_size = 2 |
||||
|
# 设置字符集 |
||||
|
charset = utf-8 |
||||
|
# 结尾换行符,可选lf、cr、crlf |
||||
|
end_of_line = lf |
||||
|
# 在文件结尾插入新行 |
||||
|
trim_trailing_whitespace = true |
||||
|
# 删除一行中的前后空格 |
||||
|
insert_final_newline = true |
||||
|
|
||||
|
[*.md] |
||||
|
insert_final_newline = false |
||||
|
trim_trailing_whitespace = false |
||||
@ -0,0 +1,22 @@ |
|||||
|
# 页面标题 |
||||
|
VITE_APP_TITLE = 盒子IM后台管理 |
||||
|
|
||||
|
# 开发环境配置 |
||||
|
VITE_APP_ENV = 'development' |
||||
|
|
||||
|
# 开发环境 |
||||
|
VITE_APP_BASE_API = '/api' |
||||
|
|
||||
|
# 应用访问路径 例如使用前缀 /admin/ |
||||
|
VITE_APP_CONTEXT_PATH = '/' |
||||
|
|
||||
|
VITE_APP_PORT = 3000 |
||||
|
|
||||
|
# 客户端id |
||||
|
VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e' |
||||
|
|
||||
|
# websocket 开关 默认使用sse推送 |
||||
|
VITE_APP_WEBSOCKET = false |
||||
|
|
||||
|
# sse 开关 |
||||
|
VITE_APP_SSE = true |
||||
@ -0,0 +1,20 @@ |
|||||
|
# 页面标题 |
||||
|
VITE_APP_TITLE = 盒子IM后台管理 |
||||
|
|
||||
|
# 生产环境配置 |
||||
|
VITE_APP_ENV = 'production' |
||||
|
|
||||
|
# 应用访问路径 例如使用前缀 /admin/ |
||||
|
VITE_APP_CONTEXT_PATH = '/admin/' |
||||
|
|
||||
|
# 生产环境 |
||||
|
VITE_APP_BASE_API = 'https://www.boxim.online/adm/api' |
||||
|
|
||||
|
# 客户端id |
||||
|
VITE_APP_CLIENT_ID = 'e5cd7e4891bf95d1d19206ce24a7b32e' |
||||
|
|
||||
|
# websocket 开关 默认使用sse推送 |
||||
|
VITE_APP_WEBSOCKET = false |
||||
|
|
||||
|
# sse 开关 |
||||
|
VITE_APP_SSE = true |
||||
@ -0,0 +1,17 @@ |
|||||
|
*.sh |
||||
|
node_modules |
||||
|
*.md |
||||
|
*.woff |
||||
|
*.ttf |
||||
|
.vscode |
||||
|
.idea |
||||
|
dist |
||||
|
/public |
||||
|
/docs |
||||
|
.husky |
||||
|
.local |
||||
|
/bin |
||||
|
.eslintrc.cjs |
||||
|
prettier.config.js |
||||
|
src/assets |
||||
|
tailwind.config.js |
||||
@ -0,0 +1,312 @@ |
|||||
|
{ |
||||
|
"globals": { |
||||
|
"ComponentInternalInstance": true, |
||||
|
"TransferKey": true, |
||||
|
"ElFormRules": true, |
||||
|
"CheckboxValueType": true, |
||||
|
"PropType": true, |
||||
|
"DateModelType": true, |
||||
|
"UploadFile": true, |
||||
|
"ElFormInstance": true, |
||||
|
"ElTableInstance": true, |
||||
|
"ElTreeInstance": true, |
||||
|
"ElTreeSelectInstance": true, |
||||
|
"ElSelectInstance": true, |
||||
|
"ElUploadInstance": true, |
||||
|
"ElCardInstance": true, |
||||
|
"ElDialogInstance": true, |
||||
|
"ElInputInstance": true, |
||||
|
"ElInputNumberInstance": true, |
||||
|
"ElRadioInstance": true, |
||||
|
"ElRadioGroupInstance": true, |
||||
|
"ElRadioButtonInstance": true, |
||||
|
"ElCheckboxInstance": true, |
||||
|
"ElCheckboxGroupInstance": true, |
||||
|
"ElSwitchInstance": true, |
||||
|
"ElDatePickerInstance": true, |
||||
|
"ElTimePickerInstance": true, |
||||
|
"ElTimeSelectInstance": true, |
||||
|
"ElScrollbarInstance": true, |
||||
|
"ElCascaderInstance": true, |
||||
|
"ElColorPickerInstance": true, |
||||
|
"ElRateInstance": true, |
||||
|
"ElSliderInstance": true, |
||||
|
"useRouter": true, |
||||
|
"useRoute": true, |
||||
|
"EffectScope": true, |
||||
|
"ElTable": true, |
||||
|
"ElSelect": true, |
||||
|
"ElUpload": true, |
||||
|
"ElForm": true, |
||||
|
"ElTree": true, |
||||
|
"ElMessage": true, |
||||
|
"ElMessageBox": true, |
||||
|
"asyncComputed": true, |
||||
|
"autoResetRef": true, |
||||
|
"computed": true, |
||||
|
"computedAsync": true, |
||||
|
"computedEager": true, |
||||
|
"computedInject": true, |
||||
|
"computedWithControl": true, |
||||
|
"controlledComputed": true, |
||||
|
"controlledRef": true, |
||||
|
"createApp": true, |
||||
|
"createEventHook": true, |
||||
|
"createGlobalState": true, |
||||
|
"createInjectionState": true, |
||||
|
"createReactiveFn": true, |
||||
|
"createSharedComposable": true, |
||||
|
"createUnrefFn": true, |
||||
|
"customRef": true, |
||||
|
"debouncedRef": true, |
||||
|
"debouncedWatch": true, |
||||
|
"defineAsyncComponent": true, |
||||
|
"defineComponent": true, |
||||
|
"eagerComputed": true, |
||||
|
"effectScope": true, |
||||
|
"extendRef": true, |
||||
|
"getCurrentInstance": true, |
||||
|
"getCurrentScope": true, |
||||
|
"h": true, |
||||
|
"ignorableWatch": true, |
||||
|
"inject": true, |
||||
|
"isDefined": true, |
||||
|
"isProxy": true, |
||||
|
"isReactive": true, |
||||
|
"isReadonly": true, |
||||
|
"isRef": true, |
||||
|
"makeDestructurable": true, |
||||
|
"markRaw": true, |
||||
|
"nextTick": true, |
||||
|
"onActivated": true, |
||||
|
"onBeforeMount": true, |
||||
|
"onBeforeUnmount": true, |
||||
|
"onBeforeUpdate": true, |
||||
|
"onClickOutside": true, |
||||
|
"onDeactivated": true, |
||||
|
"onErrorCaptured": true, |
||||
|
"onKeyStroke": true, |
||||
|
"onLongPress": true, |
||||
|
"onMounted": true, |
||||
|
"onRenderTracked": true, |
||||
|
"onRenderTriggered": true, |
||||
|
"onScopeDispose": true, |
||||
|
"onServerPrefetch": true, |
||||
|
"onStartTyping": true, |
||||
|
"onUnmounted": true, |
||||
|
"onUpdated": true, |
||||
|
"pausableWatch": true, |
||||
|
"provide": true, |
||||
|
"reactify": true, |
||||
|
"reactifyObject": true, |
||||
|
"reactive": true, |
||||
|
"reactiveComputed": true, |
||||
|
"reactiveOmit": true, |
||||
|
"reactivePick": true, |
||||
|
"readonly": true, |
||||
|
"ref": true, |
||||
|
"refAutoReset": true, |
||||
|
"refDebounced": true, |
||||
|
"refDefault": true, |
||||
|
"refThrottled": true, |
||||
|
"refWithControl": true, |
||||
|
"resolveComponent": true, |
||||
|
"resolveDirective": true, |
||||
|
"resolveRef": true, |
||||
|
"resolveUnref": true, |
||||
|
"shallowReactive": true, |
||||
|
"shallowReadonly": true, |
||||
|
"shallowRef": true, |
||||
|
"syncRef": true, |
||||
|
"syncRefs": true, |
||||
|
"templateRef": true, |
||||
|
"throttledRef": true, |
||||
|
"throttledWatch": true, |
||||
|
"toRaw": true, |
||||
|
"toReactive": true, |
||||
|
"toRef": true, |
||||
|
"toRefs": true, |
||||
|
"triggerRef": true, |
||||
|
"tryOnBeforeMount": true, |
||||
|
"tryOnBeforeUnmount": true, |
||||
|
"tryOnMounted": true, |
||||
|
"tryOnScopeDispose": true, |
||||
|
"tryOnUnmounted": true, |
||||
|
"unref": true, |
||||
|
"unrefElement": true, |
||||
|
"until": true, |
||||
|
"useActiveElement": true, |
||||
|
"useArrayEvery": true, |
||||
|
"useArrayFilter": true, |
||||
|
"useArrayFind": true, |
||||
|
"useArrayFindIndex": true, |
||||
|
"useArrayFindLast": true, |
||||
|
"useArrayJoin": true, |
||||
|
"useArrayMap": true, |
||||
|
"useArrayReduce": true, |
||||
|
"useArraySome": true, |
||||
|
"useArrayUnique": true, |
||||
|
"useAsyncQueue": true, |
||||
|
"useAsyncState": true, |
||||
|
"useAttrs": true, |
||||
|
"useBase64": true, |
||||
|
"useBattery": true, |
||||
|
"useBluetooth": true, |
||||
|
"useBreakpoints": true, |
||||
|
"useBroadcastChannel": true, |
||||
|
"useBrowserLocation": true, |
||||
|
"useCached": true, |
||||
|
"useClipboard": true, |
||||
|
"useCloned": true, |
||||
|
"useColorMode": true, |
||||
|
"useConfirmDialog": true, |
||||
|
"useCounter": true, |
||||
|
"useCssModule": true, |
||||
|
"useCssVar": true, |
||||
|
"useCssVars": true, |
||||
|
"useCurrentElement": true, |
||||
|
"useCycleList": true, |
||||
|
"useDark": true, |
||||
|
"useDateFormat": true, |
||||
|
"useDebounce": true, |
||||
|
"useDebounceFn": true, |
||||
|
"useDebouncedRefHistory": true, |
||||
|
"useDeviceMotion": true, |
||||
|
"useDeviceOrientation": true, |
||||
|
"useDevicePixelRatio": true, |
||||
|
"useDevicesList": true, |
||||
|
"useDisplayMedia": true, |
||||
|
"useDocumentVisibility": true, |
||||
|
"useDraggable": true, |
||||
|
"useDropZone": true, |
||||
|
"useElementBounding": true, |
||||
|
"useElementByPoint": true, |
||||
|
"useElementHover": true, |
||||
|
"useElementSize": true, |
||||
|
"useElementVisibility": true, |
||||
|
"useEventBus": true, |
||||
|
"useEventListener": true, |
||||
|
"useEventSource": true, |
||||
|
"useEyeDropper": true, |
||||
|
"useFavicon": true, |
||||
|
"useFetch": true, |
||||
|
"useFileDialog": true, |
||||
|
"useFileSystemAccess": true, |
||||
|
"useFocus": true, |
||||
|
"useFocusWithin": true, |
||||
|
"useFps": true, |
||||
|
"useFullscreen": true, |
||||
|
"useGamepad": true, |
||||
|
"useGeolocation": true, |
||||
|
"useIdle": true, |
||||
|
"useImage": true, |
||||
|
"useInfiniteScroll": true, |
||||
|
"useIntersectionObserver": true, |
||||
|
"useInterval": true, |
||||
|
"useIntervalFn": true, |
||||
|
"useKeyModifier": true, |
||||
|
"useLastChanged": true, |
||||
|
"useLocalStorage": true, |
||||
|
"useMagicKeys": true, |
||||
|
"useManualRefHistory": true, |
||||
|
"useMediaControls": true, |
||||
|
"useMediaQuery": true, |
||||
|
"useMemoize": true, |
||||
|
"useMemory": true, |
||||
|
"useMounted": true, |
||||
|
"useMouse": true, |
||||
|
"useMouseInElement": true, |
||||
|
"useMousePressed": true, |
||||
|
"useMutationObserver": true, |
||||
|
"useNavigatorLanguage": true, |
||||
|
"useNetwork": true, |
||||
|
"useNow": true, |
||||
|
"useObjectUrl": true, |
||||
|
"useOffsetPagination": true, |
||||
|
"useOnline": true, |
||||
|
"usePageLeave": true, |
||||
|
"useParallax": true, |
||||
|
"usePermission": true, |
||||
|
"usePointer": true, |
||||
|
"usePointerLock": true, |
||||
|
"usePointerSwipe": true, |
||||
|
"usePreferredColorScheme": true, |
||||
|
"usePreferredContrast": true, |
||||
|
"usePreferredDark": true, |
||||
|
"usePreferredLanguages": true, |
||||
|
"usePreferredReducedMotion": true, |
||||
|
"usePrevious": true, |
||||
|
"useRafFn": true, |
||||
|
"useRefHistory": true, |
||||
|
"useResizeObserver": true, |
||||
|
"useScreenOrientation": true, |
||||
|
"useScreenSafeArea": true, |
||||
|
"useScriptTag": true, |
||||
|
"useScroll": true, |
||||
|
"useScrollLock": true, |
||||
|
"useSessionStorage": true, |
||||
|
"useShare": true, |
||||
|
"useSlots": true, |
||||
|
"useSorted": true, |
||||
|
"useSpeechRecognition": true, |
||||
|
"useSpeechSynthesis": true, |
||||
|
"useStepper": true, |
||||
|
"useStorage": true, |
||||
|
"useStorageAsync": true, |
||||
|
"useStyleTag": true, |
||||
|
"useSupported": true, |
||||
|
"useSwipe": true, |
||||
|
"useTemplateRefsList": true, |
||||
|
"useTextDirection": true, |
||||
|
"useTextSelection": true, |
||||
|
"useTextareaAutosize": true, |
||||
|
"useThrottle": true, |
||||
|
"useThrottleFn": true, |
||||
|
"useThrottledRefHistory": true, |
||||
|
"useTimeAgo": true, |
||||
|
"useTimeout": true, |
||||
|
"useTimeoutFn": true, |
||||
|
"useTimeoutPoll": true, |
||||
|
"useTimestamp": true, |
||||
|
"useTitle": true, |
||||
|
"useToNumber": true, |
||||
|
"useToString": true, |
||||
|
"useToggle": true, |
||||
|
"useTransition": true, |
||||
|
"useUrlSearchParams": true, |
||||
|
"useUserMedia": true, |
||||
|
"useVModel": true, |
||||
|
"useVModels": true, |
||||
|
"useVibrate": true, |
||||
|
"useVirtualList": true, |
||||
|
"useWakeLock": true, |
||||
|
"useWebNotification": true, |
||||
|
"useWebSocket": true, |
||||
|
"useWebWorker": true, |
||||
|
"useWebWorkerFn": true, |
||||
|
"useWindowFocus": true, |
||||
|
"useWindowScroll": true, |
||||
|
"useWindowSize": true, |
||||
|
"watch": true, |
||||
|
"watchArray": true, |
||||
|
"watchAtMost": true, |
||||
|
"watchDebounced": true, |
||||
|
"watchEffect": true, |
||||
|
"watchIgnorable": true, |
||||
|
"watchOnce": true, |
||||
|
"watchPausable": true, |
||||
|
"watchPostEffect": true, |
||||
|
"watchSyncEffect": true, |
||||
|
"watchThrottled": true, |
||||
|
"watchTriggerable": true, |
||||
|
"watchWithFilter": true, |
||||
|
"whenever": true, |
||||
|
"ImportOption": true, |
||||
|
"TreeType": true, |
||||
|
"FieldOption": true, |
||||
|
"PageData": true, |
||||
|
"storeToRefs": true, |
||||
|
"DictDataOption": true, |
||||
|
"UploadOption": true |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,51 @@ |
|||||
|
module.exports = { |
||||
|
env: { |
||||
|
browser: true, |
||||
|
node: true, |
||||
|
es6: true |
||||
|
}, |
||||
|
parser: 'vue-eslint-parser', |
||||
|
extends: [ |
||||
|
'plugin:vue/vue3-recommended', |
||||
|
'./.eslintrc-auto-import.json', |
||||
|
'plugin:@typescript-eslint/recommended', |
||||
|
'prettier', |
||||
|
'plugin:prettier/recommended' |
||||
|
], |
||||
|
parserOptions: { |
||||
|
ecmaVersion: '2020', |
||||
|
sourceType: 'module', |
||||
|
project: './tsconfig.*?.json', |
||||
|
parser: '@typescript-eslint/parser' |
||||
|
}, |
||||
|
plugins: ['vue', '@typescript-eslint', 'import', 'promise', 'node', 'prettier'], |
||||
|
rules: { |
||||
|
'@typescript-eslint/no-empty-function': 'off', |
||||
|
'@typescript-eslint/no-explicit-any': 'off', |
||||
|
'@typescript-eslint/no-unused-vars': 'off', |
||||
|
'@typescript-eslint/no-this-alias': 'off', |
||||
|
|
||||
|
// vue |
||||
|
'vue/multi-word-component-names': 'off', |
||||
|
'vue/valid-define-props': 'off', |
||||
|
'vue/no-v-model-argument': 'off', |
||||
|
'prefer-rest-params': 'off', |
||||
|
// prettier |
||||
|
'prettier/prettier': 'error', |
||||
|
'@typescript-eslint/ban-types': [ |
||||
|
'error', |
||||
|
{ |
||||
|
// 关闭空类型检查 {} |
||||
|
extendDefaults: true, |
||||
|
types: { |
||||
|
'{}': false, |
||||
|
Function: false |
||||
|
} |
||||
|
} |
||||
|
] |
||||
|
}, |
||||
|
globals: { |
||||
|
DialogOption: 'readonly', |
||||
|
OptionType: 'readonly' |
||||
|
} |
||||
|
}; |
||||
@ -0,0 +1,29 @@ |
|||||
|
.DS_Store |
||||
|
.history |
||||
|
node_modules/ |
||||
|
dist/ |
||||
|
npm-debug.log* |
||||
|
yarn-debug.log* |
||||
|
yarn-error.log* |
||||
|
**/*.log |
||||
|
|
||||
|
tests/**/coverage/ |
||||
|
tests/e2e/reports |
||||
|
selenium-debug.log |
||||
|
|
||||
|
# Editor directories and files |
||||
|
.idea |
||||
|
.vscode |
||||
|
*.suo |
||||
|
*.ntvs* |
||||
|
*.njsproj |
||||
|
*.sln |
||||
|
*.local |
||||
|
|
||||
|
package-lock.json |
||||
|
yarn.lock |
||||
|
pnpm-lock.yaml |
||||
|
|
||||
|
# 编译生成的文件 |
||||
|
auto-imports.d.ts |
||||
|
components.d.ts |
||||
@ -0,0 +1,9 @@ |
|||||
|
/dist/* |
||||
|
.local |
||||
|
.output.js |
||||
|
/node_modules/** |
||||
|
|
||||
|
**/*.svg |
||||
|
**/*.sh |
||||
|
|
||||
|
/public/* |
||||
@ -0,0 +1,20 @@ |
|||||
|
{ |
||||
|
"printWidth": 150, |
||||
|
"tabWidth": 2, |
||||
|
"useTabs": false, |
||||
|
"semi": true, |
||||
|
"singleQuote": true, |
||||
|
"quoteProps": "preserve", |
||||
|
"jsxSingleQuote": false, |
||||
|
"bracketSameLine": false, |
||||
|
"trailingComma": "none", |
||||
|
"bracketSpacing": true, |
||||
|
"embeddedLanguageFormatting": "auto", |
||||
|
"arrowParens": "always", |
||||
|
"requirePragma": false, |
||||
|
"insertPragma": false, |
||||
|
"proseWrap": "preserve", |
||||
|
"htmlWhitespaceSensitivity": "css", |
||||
|
"vueIndentScriptAndStyle": false, |
||||
|
"endOfLine": "auto" |
||||
|
} |
||||
@ -0,0 +1,214 @@ |
|||||
|
<!doctype html> |
||||
|
<html> |
||||
|
<head> |
||||
|
<meta charset="utf-8" /> |
||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> |
||||
|
<meta name="renderer" content="webkit" /> |
||||
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" /> |
||||
|
<link rel="icon" href="/favicon.ico" /> |
||||
|
<title>盒子IM后台管理</title> |
||||
|
<!--[if lt IE 11 |
||||
|
]><script> |
||||
|
window.location.href = '/html/ie.html'; |
||||
|
</script><! |
||||
|
[endif]--> |
||||
|
<style> |
||||
|
html, |
||||
|
body, |
||||
|
#app { |
||||
|
height: 100%; |
||||
|
margin: 0px; |
||||
|
padding: 0px; |
||||
|
} |
||||
|
|
||||
|
.chromeframe { |
||||
|
margin: 0.2em 0; |
||||
|
background: #ccc; |
||||
|
color: #000; |
||||
|
padding: 0.2em 0; |
||||
|
} |
||||
|
|
||||
|
#loader-wrapper { |
||||
|
position: fixed; |
||||
|
top: 0; |
||||
|
left: 0; |
||||
|
width: 100%; |
||||
|
height: 100%; |
||||
|
z-index: 999999; |
||||
|
} |
||||
|
|
||||
|
#loader { |
||||
|
display: block; |
||||
|
position: relative; |
||||
|
left: 50%; |
||||
|
top: 50%; |
||||
|
width: 150px; |
||||
|
height: 150px; |
||||
|
margin: -75px 0 0 -75px; |
||||
|
border-radius: 50%; |
||||
|
border: 3px solid transparent; |
||||
|
border-top-color: #fff; |
||||
|
-webkit-animation: spin 2s linear infinite; |
||||
|
-ms-animation: spin 2s linear infinite; |
||||
|
-moz-animation: spin 2s linear infinite; |
||||
|
-o-animation: spin 2s linear infinite; |
||||
|
animation: spin 2s linear infinite; |
||||
|
z-index: 1001; |
||||
|
} |
||||
|
|
||||
|
#loader:before { |
||||
|
content: ''; |
||||
|
position: absolute; |
||||
|
top: 5px; |
||||
|
left: 5px; |
||||
|
right: 5px; |
||||
|
bottom: 5px; |
||||
|
border-radius: 50%; |
||||
|
border: 3px solid transparent; |
||||
|
border-top-color: #fff; |
||||
|
-webkit-animation: spin 3s linear infinite; |
||||
|
-moz-animation: spin 3s linear infinite; |
||||
|
-o-animation: spin 3s linear infinite; |
||||
|
-ms-animation: spin 3s linear infinite; |
||||
|
animation: spin 3s linear infinite; |
||||
|
} |
||||
|
|
||||
|
#loader:after { |
||||
|
content: ''; |
||||
|
position: absolute; |
||||
|
top: 15px; |
||||
|
left: 15px; |
||||
|
right: 15px; |
||||
|
bottom: 15px; |
||||
|
border-radius: 50%; |
||||
|
border: 3px solid transparent; |
||||
|
border-top-color: #fff; |
||||
|
-moz-animation: spin 1.5s linear infinite; |
||||
|
-o-animation: spin 1.5s linear infinite; |
||||
|
-ms-animation: spin 1.5s linear infinite; |
||||
|
-webkit-animation: spin 1.5s linear infinite; |
||||
|
animation: spin 1.5s linear infinite; |
||||
|
} |
||||
|
|
||||
|
@-webkit-keyframes spin { |
||||
|
0% { |
||||
|
-webkit-transform: rotate(0deg); |
||||
|
-ms-transform: rotate(0deg); |
||||
|
transform: rotate(0deg); |
||||
|
} |
||||
|
|
||||
|
100% { |
||||
|
-webkit-transform: rotate(360deg); |
||||
|
-ms-transform: rotate(360deg); |
||||
|
transform: rotate(360deg); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@keyframes spin { |
||||
|
0% { |
||||
|
-webkit-transform: rotate(0deg); |
||||
|
-ms-transform: rotate(0deg); |
||||
|
transform: rotate(0deg); |
||||
|
} |
||||
|
|
||||
|
100% { |
||||
|
-webkit-transform: rotate(360deg); |
||||
|
-ms-transform: rotate(360deg); |
||||
|
transform: rotate(360deg); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
#loader-wrapper .loader-section { |
||||
|
position: fixed; |
||||
|
top: 0; |
||||
|
width: 51%; |
||||
|
height: 100%; |
||||
|
background: #7171c6; |
||||
|
z-index: 1000; |
||||
|
-webkit-transform: translateX(0); |
||||
|
-ms-transform: translateX(0); |
||||
|
transform: translateX(0); |
||||
|
} |
||||
|
|
||||
|
#loader-wrapper .loader-section.section-left { |
||||
|
left: 0; |
||||
|
} |
||||
|
|
||||
|
#loader-wrapper .loader-section.section-right { |
||||
|
right: 0; |
||||
|
} |
||||
|
|
||||
|
.loaded #loader-wrapper .loader-section.section-left { |
||||
|
-webkit-transform: translateX(-100%); |
||||
|
-ms-transform: translateX(-100%); |
||||
|
transform: translateX(-100%); |
||||
|
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); |
||||
|
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); |
||||
|
} |
||||
|
|
||||
|
.loaded #loader-wrapper .loader-section.section-right { |
||||
|
-webkit-transform: translateX(100%); |
||||
|
-ms-transform: translateX(100%); |
||||
|
transform: translateX(100%); |
||||
|
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); |
||||
|
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); |
||||
|
} |
||||
|
|
||||
|
.loaded #loader { |
||||
|
opacity: 0; |
||||
|
-webkit-transition: all 0.3s ease-out; |
||||
|
transition: all 0.3s ease-out; |
||||
|
} |
||||
|
|
||||
|
.loaded #loader-wrapper { |
||||
|
visibility: hidden; |
||||
|
-webkit-transform: translateY(-100%); |
||||
|
-ms-transform: translateY(-100%); |
||||
|
transform: translateY(-100%); |
||||
|
-webkit-transition: all 0.3s 1s ease-out; |
||||
|
transition: all 0.3s 1s ease-out; |
||||
|
} |
||||
|
|
||||
|
.no-js #loader-wrapper { |
||||
|
display: none; |
||||
|
} |
||||
|
|
||||
|
.no-js h1 { |
||||
|
color: #222222; |
||||
|
} |
||||
|
|
||||
|
#loader-wrapper .load_title { |
||||
|
font-family: 'Open Sans'; |
||||
|
color: #fff; |
||||
|
font-size: 19px; |
||||
|
width: 100%; |
||||
|
text-align: center; |
||||
|
z-index: 9999999999999; |
||||
|
position: absolute; |
||||
|
top: 60%; |
||||
|
opacity: 1; |
||||
|
line-height: 30px; |
||||
|
} |
||||
|
|
||||
|
#loader-wrapper .load_title span { |
||||
|
font-weight: normal; |
||||
|
font-style: italic; |
||||
|
font-size: 13px; |
||||
|
color: #fff; |
||||
|
opacity: 0.5; |
||||
|
} |
||||
|
</style> |
||||
|
</head> |
||||
|
|
||||
|
<body> |
||||
|
<div id="app"> |
||||
|
<!-- <div id="loader-wrapper"> |
||||
|
<div id="loader"></div> |
||||
|
<div class="loader-section section-left"></div> |
||||
|
<div class="loader-section section-right"></div> |
||||
|
<div class="load_title">正在加载系统资源,请耐心等待</div> |
||||
|
</div> --> |
||||
|
</div> |
||||
|
<script type="module" src="/src/main.ts"></script> |
||||
|
</body> |
||||
|
</html> |
||||
@ -0,0 +1,88 @@ |
|||||
|
{ |
||||
|
"name": "盒子IM", |
||||
|
"version": "3.0", |
||||
|
"description": "盒子IM后台管理", |
||||
|
"author": "Blue", |
||||
|
"license": "MIT", |
||||
|
"type": "module", |
||||
|
"scripts": { |
||||
|
"dev": "vite serve --mode development", |
||||
|
"build": "vite build --mode production", |
||||
|
"preview": "vite preview", |
||||
|
"lint:eslint": "eslint --fix --ext .ts,.js,.vue ./src ", |
||||
|
"prettier": "prettier --write ." |
||||
|
}, |
||||
|
"dependencies": { |
||||
|
"@element-plus/icons-vue": "2.3.1", |
||||
|
"@highlightjs/vue-plugin": "2.1.0", |
||||
|
"@vueuse/core": "10.9.0", |
||||
|
"@wangeditor/editor": "^5.1.23", |
||||
|
"@wangeditor/editor-for-vue": "^5.1.12", |
||||
|
"animate.css": "4.1.1", |
||||
|
"await-to-js": "3.0.0", |
||||
|
"axios": "1.6.8", |
||||
|
"bpmn-js": "16.4.0", |
||||
|
"crypto-js": "4.2.0", |
||||
|
"diagram-js": "12.3.0", |
||||
|
"didi": "9.0.2", |
||||
|
"echarts": "5.5.0", |
||||
|
"element-plus": "2.7.8", |
||||
|
"file-saver": "2.0.5", |
||||
|
"fuse.js": "7.0.0", |
||||
|
"highlight.js": "11.9.0", |
||||
|
"image-conversion": "^2.1.1", |
||||
|
"js-base64": "^3.7.7", |
||||
|
"js-cookie": "3.0.5", |
||||
|
"jsencrypt": "3.3.2", |
||||
|
"nprogress": "0.2.0", |
||||
|
"pinia": "2.1.7", |
||||
|
"screenfull": "6.0.2", |
||||
|
"vue": "3.4.34", |
||||
|
"vue-cropper": "1.1.1", |
||||
|
"vue-i18n": "9.10.2", |
||||
|
"vue-router": "4.3.2", |
||||
|
"vue-types": "5.1.1", |
||||
|
"vxe-table": "4.5.22" |
||||
|
}, |
||||
|
"devDependencies": { |
||||
|
"@iconify/json": "2.2.201", |
||||
|
"@intlify/unplugin-vue-i18n": "3.0.1", |
||||
|
"@types/crypto-js": "4.2.2", |
||||
|
"@types/file-saver": "2.0.7", |
||||
|
"@types/js-cookie": "3.0.6", |
||||
|
"@types/node": "18.18.2", |
||||
|
"@types/nprogress": "0.2.3", |
||||
|
"@typescript-eslint/eslint-plugin": "7.3.1", |
||||
|
"@typescript-eslint/parser": "7.3.1", |
||||
|
"@unocss/preset-attributify": "0.58.6", |
||||
|
"@unocss/preset-icons": "0.58.6", |
||||
|
"@unocss/preset-uno": "0.58.6", |
||||
|
"@vitejs/plugin-vue": "5.0.4", |
||||
|
"@vue/compiler-sfc": "3.4.23", |
||||
|
"autoprefixer": "10.4.18", |
||||
|
"eslint": "8.57.0", |
||||
|
"eslint-config-prettier": "9.1.0", |
||||
|
"eslint-define-config": "2.1.0", |
||||
|
"eslint-plugin-import": "2.29.1", |
||||
|
"eslint-plugin-node": "11.1.0", |
||||
|
"eslint-plugin-prettier": "5.1.3", |
||||
|
"eslint-plugin-promise": "6.1.1", |
||||
|
"eslint-plugin-vue": "9.23.0", |
||||
|
"fast-glob": "3.3.2", |
||||
|
"postcss": "8.4.36", |
||||
|
"prettier": "3.2.5", |
||||
|
"sass": "1.72.0", |
||||
|
"typescript": "5.4.5", |
||||
|
"unocss": "0.58.6", |
||||
|
"unplugin-auto-import": "0.17.5", |
||||
|
"unplugin-icons": "0.18.5", |
||||
|
"unplugin-vue-components": "0.26.0", |
||||
|
"unplugin-vue-setup-extend-plus": "1.0.1", |
||||
|
"vite": "5.2.12", |
||||
|
"vite-plugin-compression": "0.5.1", |
||||
|
"vite-plugin-svg-icons": "2.0.1", |
||||
|
"vitest": "1.5.0", |
||||
|
"vue-eslint-parser": "9.4.2", |
||||
|
"vue-tsc": "2.0.13" |
||||
|
} |
||||
|
} |
||||
|
After Width: | Height: | Size: 34 KiB |
@ -0,0 +1,20 @@ |
|||||
|
<template> |
||||
|
<el-config-provider :locale="appStore.locale" :size="appStore.size"> |
||||
|
<router-view /> |
||||
|
</el-config-provider> |
||||
|
</template> |
||||
|
|
||||
|
<script setup lang="ts"> |
||||
|
import useSettingsStore from '@/store/modules/settings'; |
||||
|
import { handleThemeStyle } from '@/utils/theme'; |
||||
|
import useAppStore from '@/store/modules/app'; |
||||
|
|
||||
|
const appStore = useAppStore(); |
||||
|
|
||||
|
onMounted(() => { |
||||
|
nextTick(() => { |
||||
|
// 初始化主题样式 |
||||
|
handleThemeStyle(useSettingsStore().theme); |
||||
|
}); |
||||
|
}); |
||||
|
</script> |
||||
@ -0,0 +1,48 @@ |
|||||
|
// 前缀
|
||||
|
const animatePrefix = 'animate__animated '; |
||||
|
// 开启随机动画 随机动画值
|
||||
|
const animateList: string[] = [ |
||||
|
animatePrefix + 'animate__pulse', |
||||
|
animatePrefix + 'animate__rubberBand', |
||||
|
animatePrefix + 'animate__bounceIn', |
||||
|
animatePrefix + 'animate__bounceInLeft', |
||||
|
animatePrefix + 'animate__fadeIn', |
||||
|
animatePrefix + 'animate__fadeInLeft', |
||||
|
animatePrefix + 'animate__fadeInDown', |
||||
|
animatePrefix + 'animate__fadeInUp', |
||||
|
animatePrefix + 'animate__flipInX', |
||||
|
animatePrefix + 'animate__lightSpeedInLeft', |
||||
|
animatePrefix + 'animate__rotateInDownLeft', |
||||
|
animatePrefix + 'animate__rollIn', |
||||
|
animatePrefix + 'animate__rotateInDownLeft', |
||||
|
animatePrefix + 'animate__zoomIn', |
||||
|
animatePrefix + 'animate__zoomInDown', |
||||
|
animatePrefix + 'animate__slideInLeft', |
||||
|
animatePrefix + 'animate__lightSpeedIn' |
||||
|
]; |
||||
|
// 关闭随机动画后的默认效果
|
||||
|
const defaultAnimate = animatePrefix + 'animate__fadeIn'; |
||||
|
// 搜索隐藏显示动画
|
||||
|
const searchAnimate = { |
||||
|
enter: '', |
||||
|
leave: '' |
||||
|
}; |
||||
|
|
||||
|
// 菜单搜索动画
|
||||
|
const menuSearchAnimate = { |
||||
|
enter: animatePrefix + 'animate__fadeIn', |
||||
|
leave: animatePrefix + 'animate__fadeOut' |
||||
|
}; |
||||
|
// logo动画
|
||||
|
const logoAnimate = { |
||||
|
enter: animatePrefix + 'animate__fadeIn', |
||||
|
leave: animatePrefix + 'animate__fadeOut' |
||||
|
}; |
||||
|
|
||||
|
export default { |
||||
|
animateList, |
||||
|
defaultAnimate, |
||||
|
searchAnimate, |
||||
|
menuSearchAnimate, |
||||
|
logoAnimate |
||||
|
}; |
||||
@ -0,0 +1,63 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { GroupVO, GroupBanDTO, GroupUnbanDTO, GroupQuery } from '@/api/im/group/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询群列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listGroup = (query?: GroupQuery): AxiosPromise<GroupVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/group/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询群详细 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const getGroup = (id: string | number): AxiosPromise<GroupVO> => { |
||||
|
return request({ |
||||
|
url: '/im/group/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 封禁用户 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const ban = (data: GroupBanDTO) => { |
||||
|
return request({ |
||||
|
url: '/im/group/ban', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 解封用户 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const unban = (data: GroupUnbanDTO) => { |
||||
|
return request({ |
||||
|
url: '/im/group/unban', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
|
||||
|
export const findGroupByName = (name?: String): AxiosPromise<GroupVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/group/findByName?name='+name, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
@ -0,0 +1,193 @@ |
|||||
|
export interface GroupVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群名字 |
||||
|
*/ |
||||
|
name: string; |
||||
|
|
||||
|
/** |
||||
|
* 群主id |
||||
|
*/ |
||||
|
ownerId: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群头像 |
||||
|
*/ |
||||
|
headImage: string; |
||||
|
|
||||
|
/** |
||||
|
* 群头像Url |
||||
|
*/ |
||||
|
headImageUrl: string; |
||||
|
/** |
||||
|
* 群头像缩略图 |
||||
|
*/ |
||||
|
headImageThumb: string; |
||||
|
|
||||
|
/** |
||||
|
* 群公告 |
||||
|
*/ |
||||
|
notice: string; |
||||
|
/** |
||||
|
* 是否已解散 |
||||
|
*/ |
||||
|
dissolve: number; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否被封禁 0:否 1:是 |
||||
|
*/ |
||||
|
isBanned: number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason: string; |
||||
|
|
||||
|
/** |
||||
|
* 成员数量 |
||||
|
*/ |
||||
|
memberCount: number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface GroupForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群名字 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群主id |
||||
|
*/ |
||||
|
ownerId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群主 |
||||
|
*/ |
||||
|
ownerUserName: string, |
||||
|
/** |
||||
|
* 群头像 |
||||
|
*/ |
||||
|
headImage?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群头像缩略图 |
||||
|
*/ |
||||
|
headImageThumb?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群公告 |
||||
|
*/ |
||||
|
notice?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否已解散 |
||||
|
*/ |
||||
|
dissolve?: number; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否被封禁 0:否 1:是 |
||||
|
*/ |
||||
|
isBanned?: number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason?: string; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface GroupQuery extends PageQuery { |
||||
|
|
||||
|
/** |
||||
|
* 群名字 |
||||
|
*/ |
||||
|
name?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群主id |
||||
|
*/ |
||||
|
ownerId?: number; |
||||
|
|
||||
|
/** |
||||
|
* 群头像 |
||||
|
*/ |
||||
|
headImage?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群头像缩略图 |
||||
|
*/ |
||||
|
headImageThumb?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群公告 |
||||
|
*/ |
||||
|
notice?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否已解散 |
||||
|
*/ |
||||
|
dissolve?: number; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否被封禁 0:否 1:是 |
||||
|
*/ |
||||
|
isBanned?: number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason?: string; |
||||
|
|
||||
|
/** |
||||
|
* 日期范围参数 |
||||
|
*/ |
||||
|
params?: any; |
||||
|
} |
||||
|
|
||||
|
export interface GroupBanDTO { |
||||
|
|
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason?: string; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
export interface GroupUnbanDTO { |
||||
|
|
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,18 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { GroupMemberVO, GroupMemberQuery } from '@/api/im/groupMember/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询群成员列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listGroupMember = (query?: GroupMemberQuery): AxiosPromise<GroupMemberVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/group/member/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
@ -0,0 +1,173 @@ |
|||||
|
export interface GroupMemberVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群id |
||||
|
*/ |
||||
|
groupId: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 用户id |
||||
|
*/ |
||||
|
userId: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 组内显示名称 |
||||
|
*/ |
||||
|
remarkNickName: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像 |
||||
|
*/ |
||||
|
headImage: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像Url |
||||
|
*/ |
||||
|
headImageUrl: string; |
||||
|
/** |
||||
|
* 群名备注 |
||||
|
*/ |
||||
|
remarkGroupName: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否已退出 |
||||
|
*/ |
||||
|
quit: number; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime: string; |
||||
|
|
||||
|
/** |
||||
|
* 退出时间 |
||||
|
*/ |
||||
|
quitTime: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
userNickName: string; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface GroupMemberForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群id |
||||
|
*/ |
||||
|
groupId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 用户id |
||||
|
*/ |
||||
|
userId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 组内显示名称 |
||||
|
*/ |
||||
|
remarkNickName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像 |
||||
|
*/ |
||||
|
headImage?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群名备注 |
||||
|
*/ |
||||
|
remarkGroupName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否已退出 |
||||
|
*/ |
||||
|
quit?: number; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 退出时间 |
||||
|
*/ |
||||
|
quitTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
userNickName?: string; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface GroupMemberQuery extends PageQuery { |
||||
|
|
||||
|
/** |
||||
|
* 群id |
||||
|
*/ |
||||
|
groupId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 用户id |
||||
|
*/ |
||||
|
userId?: number; |
||||
|
|
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
userName: String, |
||||
|
|
||||
|
/** |
||||
|
* 组内显示名称 |
||||
|
*/ |
||||
|
remarkNickName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像 |
||||
|
*/ |
||||
|
headImage?: string; |
||||
|
|
||||
|
/** |
||||
|
* 群名备注 |
||||
|
*/ |
||||
|
remarkGroupName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否已退出 |
||||
|
*/ |
||||
|
quit?: number; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 退出时间 |
||||
|
*/ |
||||
|
quitTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
userNickName?: string; |
||||
|
/** |
||||
|
* 群内显示名 |
||||
|
*/ |
||||
|
showNickName?: string; |
||||
|
/** |
||||
|
* 日期范围参数 |
||||
|
*/ |
||||
|
params?: any; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,29 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { GroupMessageVO, GroupMessageQuery } from '@/api/im/groupMessage/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询群消息列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listGroupMessage = (query?: GroupMessageQuery): AxiosPromise<GroupMessageVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/groupMessage/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询群消息详细 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const getGroupMessage = (id: string | number): AxiosPromise<GroupMessageVO> => { |
||||
|
return request({ |
||||
|
url: '/im/groupMessage/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
@ -0,0 +1,211 @@ |
|||||
|
export interface GroupMessageVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群id |
||||
|
*/ |
||||
|
groupId: number; |
||||
|
|
||||
|
/** |
||||
|
* 群名 |
||||
|
*/ |
||||
|
groupName: string, |
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendId: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送用户 |
||||
|
*/ |
||||
|
sendUserName: string; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 发送用户昵称 |
||||
|
*/ |
||||
|
sendNickName: string; |
||||
|
|
||||
|
/** |
||||
|
* 被@用户id列表,逗号分隔 |
||||
|
*/ |
||||
|
atUserIds: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送内容 |
||||
|
*/ |
||||
|
content: string; |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
status: number; |
||||
|
|
||||
|
/** |
||||
|
* 消息类型 0:文字 1:图片 2:文件 |
||||
|
*/ |
||||
|
type: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送时间 |
||||
|
*/ |
||||
|
sendTime: string; |
||||
|
|
||||
|
/** |
||||
|
* 回执消息是否完成 |
||||
|
*/ |
||||
|
receiptOk: number; |
||||
|
|
||||
|
/** |
||||
|
* 是否回执消息 |
||||
|
*/ |
||||
|
receipt: number; |
||||
|
|
||||
|
/** |
||||
|
* 接收用户id,逗号分隔,为空表示发给所有成员 |
||||
|
*/ |
||||
|
recvIds: string | number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface GroupMessageForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群id |
||||
|
*/ |
||||
|
groupId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 群名 |
||||
|
*/ |
||||
|
groupName: string, |
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送用户 |
||||
|
*/ |
||||
|
sendUserName: string; |
||||
|
/** |
||||
|
* 发送用户昵称 |
||||
|
*/ |
||||
|
sendNickName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 被@用户id列表,逗号分隔 |
||||
|
*/ |
||||
|
atUserIds?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送内容 |
||||
|
*/ |
||||
|
content?: string; |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
status?: number; |
||||
|
|
||||
|
/** |
||||
|
* 消息类型 0:文字 1:图片 2:文件 |
||||
|
*/ |
||||
|
type?: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送时间 |
||||
|
*/ |
||||
|
sendTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 回执消息是否完成 |
||||
|
*/ |
||||
|
receiptOk?: number; |
||||
|
|
||||
|
/** |
||||
|
* 是否回执消息 |
||||
|
*/ |
||||
|
receipt?: number; |
||||
|
|
||||
|
/** |
||||
|
* 接收用户id,逗号分隔,为空表示发给所有成员 |
||||
|
*/ |
||||
|
recvIds?: string | number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface GroupMessageQuery extends PageQuery { |
||||
|
|
||||
|
/** |
||||
|
* 群id |
||||
|
*/ |
||||
|
groupId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送用户昵称 |
||||
|
*/ |
||||
|
sendNickName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 被@用户id列表,逗号分隔 |
||||
|
*/ |
||||
|
atUserIds?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送内容 |
||||
|
*/ |
||||
|
content?: string; |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
status?: number; |
||||
|
|
||||
|
/** |
||||
|
* 消息类型 0:文字 1:图片 2:文件 |
||||
|
*/ |
||||
|
type?: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送时间 |
||||
|
*/ |
||||
|
sendTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 回执消息是否完成 |
||||
|
*/ |
||||
|
receiptOk?: number; |
||||
|
|
||||
|
/** |
||||
|
* 是否回执消息 |
||||
|
*/ |
||||
|
receipt?: number; |
||||
|
|
||||
|
/** |
||||
|
* 接收用户id,逗号分隔,为空表示发给所有成员 |
||||
|
*/ |
||||
|
recvIds?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 日期范围参数 |
||||
|
*/ |
||||
|
params?: any; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,29 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { PrivateMessageVO, PrivateMessageQuery } from '@/api/im/privateMessage/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询私聊消息列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listPrivateMessage = (query?: PrivateMessageQuery): AxiosPromise<PrivateMessageVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/privateMessage/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询私聊消息详细 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const getPrivateMessage = (id: string | number): AxiosPromise<PrivateMessageVO> => { |
||||
|
return request({ |
||||
|
url: '/im/privateMessage/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
@ -0,0 +1,129 @@ |
|||||
|
export interface PrivateMessageVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendId: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 接收用户id |
||||
|
*/ |
||||
|
recvId: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送内容 |
||||
|
*/ |
||||
|
content: string; |
||||
|
|
||||
|
/** |
||||
|
* 消息类型 0:文字 1:图片 2:文件 |
||||
|
*/ |
||||
|
type: number; |
||||
|
|
||||
|
/** |
||||
|
* 状态 0:未读 1:已读 |
||||
|
*/ |
||||
|
status: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送时间 |
||||
|
*/ |
||||
|
sendTime: string; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface PrivateMessageForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendId?: string | number; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendUserName: string; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 接收用户id |
||||
|
*/ |
||||
|
recvId?: string | number; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 接收用户 |
||||
|
*/ |
||||
|
recvUserName: string; |
||||
|
|
||||
|
/** |
||||
|
* 发送内容 |
||||
|
*/ |
||||
|
content?: string; |
||||
|
|
||||
|
/** |
||||
|
* 消息类型 0:文字 1:图片 2:文件 |
||||
|
*/ |
||||
|
type?: number; |
||||
|
|
||||
|
/** |
||||
|
* 状态 0:未读 1:已读 |
||||
|
*/ |
||||
|
status?: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送时间 |
||||
|
*/ |
||||
|
sendTime?: string; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface PrivateMessageQuery extends PageQuery { |
||||
|
|
||||
|
/** |
||||
|
* 发送用户id |
||||
|
*/ |
||||
|
sendId?: number; |
||||
|
|
||||
|
/** |
||||
|
* 接收用户id |
||||
|
*/ |
||||
|
recvId?: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送内容 |
||||
|
*/ |
||||
|
content?: string; |
||||
|
|
||||
|
/** |
||||
|
* 消息类型 0:文字 1:图片 2:文件 |
||||
|
*/ |
||||
|
type?: number; |
||||
|
|
||||
|
/** |
||||
|
* 状态 0:未读 1:已读 |
||||
|
*/ |
||||
|
status?: number; |
||||
|
|
||||
|
/** |
||||
|
* 发送时间 |
||||
|
*/ |
||||
|
sendTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 日期范围参数 |
||||
|
*/ |
||||
|
params?: any; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,76 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { SensitiveWordVO, SensitiveWordForm, SensitiveWordQuery } from '@/api/im/sensitiveWord/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询敏感词列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listSensitiveWord = (query?: SensitiveWordQuery): AxiosPromise<SensitiveWordVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/sensitiveWord/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询敏感词详细 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const getSensitiveWord = (id: string | number): AxiosPromise<SensitiveWordVO> => { |
||||
|
return request({ |
||||
|
url: '/im/sensitiveWord/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 新增敏感词 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const addSensitiveWord = (data: SensitiveWordForm) => { |
||||
|
return request({ |
||||
|
url: '/im/sensitiveWord', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 修改敏感词 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const updateSensitiveWord = (data: SensitiveWordForm) => { |
||||
|
return request({ |
||||
|
url: '/im/sensitiveWord', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 删除敏感词 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const delSensitiveWord = (id: string | number | Array<string | number>) => { |
||||
|
return request({ |
||||
|
url: '/im/sensitiveWord/' + id, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 开启/关闭敏感词 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const enableSensitiveWord = (data: SensitiveWordForm) => { |
||||
|
return request({ |
||||
|
url: '/im/sensitiveWord/enable', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
@ -0,0 +1,71 @@ |
|||||
|
export interface SensitiveWordVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 敏感词内容 |
||||
|
*/ |
||||
|
content: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用 0:未启用 1:启用 |
||||
|
*/ |
||||
|
enabled: boolean; |
||||
|
|
||||
|
/** |
||||
|
* 创建者 |
||||
|
*/ |
||||
|
creator: number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface SensitiveWordForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 敏感词内容 |
||||
|
*/ |
||||
|
content?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用 |
||||
|
*/ |
||||
|
enabled?: boolean; |
||||
|
|
||||
|
/** |
||||
|
* 创建者 |
||||
|
*/ |
||||
|
creator?: number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface SensitiveWordQuery extends PageQuery { |
||||
|
|
||||
|
/** |
||||
|
* 敏感词内容 |
||||
|
*/ |
||||
|
content?: string; |
||||
|
|
||||
|
/** |
||||
|
* 是否启用 0:未启用 1:启用 |
||||
|
*/ |
||||
|
enabled?: boolean; |
||||
|
|
||||
|
/** |
||||
|
* 创建者 |
||||
|
*/ |
||||
|
creator?: number; |
||||
|
|
||||
|
/** |
||||
|
* 日期范围参数 |
||||
|
*/ |
||||
|
params?: any; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
@ -0,0 +1,63 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { UserVO, UserBanDTO, UserUnbanDTO, UserQuery } from '@/api/im/user/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询用户列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listUser = (query?: UserQuery): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/user/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询用户详细 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const getUser = (id: string | number): AxiosPromise<UserVO> => { |
||||
|
return request({ |
||||
|
url: '/im/user/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 封禁用户 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const ban = (data: UserBanDTO) => { |
||||
|
return request({ |
||||
|
url: '/im/user/ban', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
/** |
||||
|
* 解封用户 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const unban = (data: UserUnbanDTO) => { |
||||
|
return request({ |
||||
|
url: '/im/user/unban', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
|
||||
|
export const findUserByName = (name?: String): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/im/user/findByName?name=' + name, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
@ -0,0 +1,204 @@ |
|||||
|
export interface UserVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
userName: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
nickName: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像 |
||||
|
*/ |
||||
|
headImage: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像Url |
||||
|
*/ |
||||
|
headImageUrl: string; |
||||
|
/** |
||||
|
* 用户头像缩略图 |
||||
|
*/ |
||||
|
headImageThumb: string; |
||||
|
|
||||
|
/** |
||||
|
* 密码(明文) |
||||
|
*/ |
||||
|
password: string; |
||||
|
|
||||
|
/** |
||||
|
* 性别 0:男 1::女 |
||||
|
*/ |
||||
|
sex: number; |
||||
|
|
||||
|
/** |
||||
|
* 个性签名 |
||||
|
*/ |
||||
|
signature: string; |
||||
|
|
||||
|
/** |
||||
|
* 最后登录时间 |
||||
|
*/ |
||||
|
lastLoginTime: string; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime: string; |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
type: number; |
||||
|
|
||||
|
/** |
||||
|
* 是否被封禁 0:否 1:是 |
||||
|
*/ |
||||
|
isBanned: number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason: string; |
||||
|
|
||||
|
/** |
||||
|
* 客户端id,用于uni-push推送 |
||||
|
*/ |
||||
|
cid: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 状态 0:正常 1:已注销 |
||||
|
*/ |
||||
|
status: number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface UserForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
userName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
nickName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像 |
||||
|
*/ |
||||
|
headImage?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像缩略图 |
||||
|
*/ |
||||
|
headImageThumb?: string; |
||||
|
|
||||
|
/** |
||||
|
* 密码(明文) |
||||
|
*/ |
||||
|
password?: string; |
||||
|
|
||||
|
/** |
||||
|
* 性别 0:男 1::女 |
||||
|
*/ |
||||
|
sex?: number; |
||||
|
|
||||
|
/** |
||||
|
* 个性签名 |
||||
|
*/ |
||||
|
signature?: string; |
||||
|
|
||||
|
/** |
||||
|
* 最后登录时间 |
||||
|
*/ |
||||
|
lastLoginTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime?: string; |
||||
|
|
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
type?: number; |
||||
|
|
||||
|
/** |
||||
|
* 是否被封禁 0:否 1:是 |
||||
|
*/ |
||||
|
isBanned?: number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason?: string; |
||||
|
|
||||
|
/** |
||||
|
* 客户端id,用于uni-push推送 |
||||
|
*/ |
||||
|
cid?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 状态 0:正常 1:已注销 |
||||
|
*/ |
||||
|
status?: number; |
||||
|
|
||||
|
} |
||||
|
|
||||
|
export interface UserQuery extends PageQuery { |
||||
|
|
||||
|
/** |
||||
|
* 用户名 |
||||
|
*/ |
||||
|
userName?: string; |
||||
|
|
||||
|
/** |
||||
|
* 用户昵称 |
||||
|
*/ |
||||
|
nickName?: string; |
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
createdTime?: string; |
||||
|
/** |
||||
|
* 日期范围参数 |
||||
|
*/ |
||||
|
params?: any; |
||||
|
} |
||||
|
|
||||
|
export interface UserBanDTO { |
||||
|
|
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 被封禁原因 |
||||
|
*/ |
||||
|
reason?: string; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
export interface UserUnbanDTO { |
||||
|
|
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
} |
||||
|
|
||||
|
|
||||
@ -0,0 +1,111 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { LoginData, LoginResult, VerifyCodeResult, TenantInfo } from './types'; |
||||
|
import { UserInfo } from '@/api/system/user/types'; |
||||
|
|
||||
|
// pc端固定客户端授权id
|
||||
|
const clientId = import.meta.env.VITE_APP_CLIENT_ID; |
||||
|
|
||||
|
/** |
||||
|
* @param data {LoginData} |
||||
|
* @returns |
||||
|
*/ |
||||
|
export function login(data: LoginData): AxiosPromise<LoginResult> { |
||||
|
const params = { |
||||
|
...data, |
||||
|
clientId: data.clientId || clientId, |
||||
|
grantType: data.grantType || 'password' |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/auth/login', |
||||
|
headers: { |
||||
|
isToken: false, |
||||
|
isEncrypt: true, |
||||
|
repeatSubmit: false |
||||
|
}, |
||||
|
method: 'post', |
||||
|
data: params |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 注册方法
|
||||
|
export function register(data: any) { |
||||
|
const params = { |
||||
|
...data, |
||||
|
clientId: clientId, |
||||
|
grantType: 'password' |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/auth/register', |
||||
|
headers: { |
||||
|
isToken: false, |
||||
|
isEncrypt: true, |
||||
|
repeatSubmit: false |
||||
|
}, |
||||
|
method: 'post', |
||||
|
data: params |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 注销 |
||||
|
*/ |
||||
|
export function logout() { |
||||
|
request({ |
||||
|
url: '/resource/sse/close', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
return request({ |
||||
|
url: '/auth/logout', |
||||
|
method: 'post' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 获取验证码 |
||||
|
*/ |
||||
|
export function getCodeImg(): AxiosPromise<VerifyCodeResult> { |
||||
|
return request({ |
||||
|
url: '/auth/code', |
||||
|
headers: { |
||||
|
isToken: false |
||||
|
}, |
||||
|
method: 'get', |
||||
|
timeout: 20000 |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 第三方登录 |
||||
|
*/ |
||||
|
export function callback(data: LoginData): AxiosPromise<any> { |
||||
|
const LoginData = { |
||||
|
...data, |
||||
|
clientId: clientId, |
||||
|
grantType: 'social' |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/auth/social/callback', |
||||
|
method: 'post', |
||||
|
data: LoginData |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 获取用户详细信息
|
||||
|
export function getInfo(): AxiosPromise<UserInfo> { |
||||
|
return request({ |
||||
|
url: '/system/user/getInfo', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 获取租户列表
|
||||
|
export function getTenantList(): AxiosPromise<TenantInfo> { |
||||
|
return request({ |
||||
|
url: '/auth/tenant/list', |
||||
|
headers: { |
||||
|
isToken: false |
||||
|
}, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,11 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { RouteRecordRaw } from 'vue-router'; |
||||
|
|
||||
|
// 获取路由
|
||||
|
export function getRouters(): AxiosPromise<RouteRecordRaw[]> { |
||||
|
return request({ |
||||
|
url: '/system/menu/getRouters', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { CacheVO } from './types'; |
||||
|
|
||||
|
// 查询缓存详细
|
||||
|
export function getCache(): AxiosPromise<CacheVO> { |
||||
|
return request({ |
||||
|
url: '/monitor/cache', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询缓存名称列表
|
||||
|
export function listCacheName() { |
||||
|
return request({ |
||||
|
url: '/monitor/cache/getNames', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询缓存键名列表
|
||||
|
export function listCacheKey(cacheName: string) { |
||||
|
return request({ |
||||
|
url: '/monitor/cache/getKeys/' + cacheName, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询缓存内容
|
||||
|
export function getCacheValue(cacheName: string, cacheKey: string) { |
||||
|
return request({ |
||||
|
url: '/monitor/cache/getValue/' + cacheName + '/' + cacheKey, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 清理指定名称缓存
|
||||
|
export function clearCacheName(cacheName: string) { |
||||
|
return request({ |
||||
|
url: '/monitor/cache/clearCacheName/' + cacheName, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 清理指定键名缓存
|
||||
|
export function clearCacheKey(cacheName: string, cacheKey: string) { |
||||
|
return request({ |
||||
|
url: '/monitor/cache/clearCacheKey/' + cacheName + '/' + cacheKey, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 清理全部缓存
|
||||
|
export function clearCacheAll() { |
||||
|
return request({ |
||||
|
url: '/monitor/cache/clearCacheAll', |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,7 @@ |
|||||
|
export interface CacheVO { |
||||
|
commandStats: Array<{ name: string; value: string }>; |
||||
|
|
||||
|
dbSize: number; |
||||
|
|
||||
|
info: { [key: string]: string }; |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { LoginInfoQuery, LoginInfoVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询登录日志列表
|
||||
|
export function list(query: LoginInfoQuery): AxiosPromise<LoginInfoVO[]> { |
||||
|
return request({ |
||||
|
url: '/monitor/logininfor/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除登录日志
|
||||
|
export function delLoginInfo(infoId: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/monitor/logininfor/' + infoId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 解锁用户登录状态
|
||||
|
export function unlockLoginInfo(userName: string | Array<string>) { |
||||
|
return request({ |
||||
|
url: '/monitor/logininfor/unlock/' + userName, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 清空登录日志
|
||||
|
export function cleanLoginInfo() { |
||||
|
return request({ |
||||
|
url: '/monitor/logininfor/clean', |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
export interface LoginInfoVO { |
||||
|
infoId: string | number; |
||||
|
tenantId: string | number; |
||||
|
userName: string; |
||||
|
status: string; |
||||
|
ipaddr: string; |
||||
|
loginLocation: string; |
||||
|
browser: string; |
||||
|
os: string; |
||||
|
msg: string; |
||||
|
loginTime: string; |
||||
|
} |
||||
|
|
||||
|
export interface LoginInfoQuery extends PageQuery { |
||||
|
ipaddr: string; |
||||
|
userName: string; |
||||
|
status: string; |
||||
|
orderByColumn: string; |
||||
|
isAsc: string; |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { OnlineQuery, OnlineVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询在线用户列表
|
||||
|
export function list(query: OnlineQuery): AxiosPromise<OnlineVO[]> { |
||||
|
return request({ |
||||
|
url: '/monitor/online/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 强退用户
|
||||
|
export function forceLogout(tokenId: string) { |
||||
|
return request({ |
||||
|
url: '/monitor/online/' + tokenId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 获取当前用户登录在线设备
|
||||
|
export function getOnline() { |
||||
|
return request({ |
||||
|
url: '/monitor/online', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除当前在线设备
|
||||
|
export function delOnline(tokenId: string) { |
||||
|
return request({ |
||||
|
url: '/monitor/online/' + tokenId, |
||||
|
method: 'post' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,15 @@ |
|||||
|
export interface OnlineQuery extends PageQuery { |
||||
|
ipaddr: string; |
||||
|
userName: string; |
||||
|
} |
||||
|
|
||||
|
export interface OnlineVO extends BaseEntity { |
||||
|
tokenId: string; |
||||
|
deptName: string; |
||||
|
userName: string; |
||||
|
ipaddr: string; |
||||
|
loginLocation: string; |
||||
|
browser: string; |
||||
|
os: string; |
||||
|
loginTime: number; |
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { OperLogQuery, OperLogVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询操作日志列表
|
||||
|
export function list(query: OperLogQuery): AxiosPromise<OperLogVO[]> { |
||||
|
return request({ |
||||
|
url: '/monitor/operlog/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除操作日志
|
||||
|
export function delOperlog(operId: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/monitor/operlog/' + operId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 清空操作日志
|
||||
|
export function cleanOperlog() { |
||||
|
return request({ |
||||
|
url: '/monitor/operlog/clean', |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,53 @@ |
|||||
|
export interface OperLogQuery extends PageQuery { |
||||
|
operIp: string; |
||||
|
title: string; |
||||
|
operName: string; |
||||
|
businessType: string; |
||||
|
status: string; |
||||
|
orderByColumn: string; |
||||
|
isAsc: string; |
||||
|
} |
||||
|
|
||||
|
export interface OperLogVO extends BaseEntity { |
||||
|
operId: string | number; |
||||
|
tenantId: string; |
||||
|
title: string; |
||||
|
businessType: number; |
||||
|
businessTypes: number[] | undefined; |
||||
|
method: string; |
||||
|
requestMethod: string; |
||||
|
operatorType: number; |
||||
|
operName: string; |
||||
|
deptName: string; |
||||
|
operUrl: string; |
||||
|
operIp: string; |
||||
|
operLocation: string; |
||||
|
operParam: string; |
||||
|
jsonResult: string; |
||||
|
status: number; |
||||
|
errorMsg: string; |
||||
|
operTime: string; |
||||
|
costTime: number; |
||||
|
} |
||||
|
|
||||
|
export interface OperLogForm { |
||||
|
operId: number | string | undefined; |
||||
|
tenantId: string | number | undefined; |
||||
|
title: string; |
||||
|
businessType: number; |
||||
|
businessTypes: number[] | undefined; |
||||
|
method: string; |
||||
|
requestMethod: string; |
||||
|
operatorType: number; |
||||
|
operName: string; |
||||
|
deptName: string; |
||||
|
operUrl: string; |
||||
|
operIp: string; |
||||
|
operLocation: string; |
||||
|
operParam: string; |
||||
|
jsonResult: string; |
||||
|
status: number; |
||||
|
errorMsg: string; |
||||
|
operTime: string; |
||||
|
costTime: number; |
||||
|
} |
||||
@ -0,0 +1,80 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { ClientVO, ClientForm, ClientQuery } from '@/api/system/client/types'; |
||||
|
|
||||
|
/** |
||||
|
* 查询客户端管理列表 |
||||
|
* @param query |
||||
|
* @returns {*} |
||||
|
*/ |
||||
|
|
||||
|
export const listClient = (query?: ClientQuery): AxiosPromise<ClientVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/client/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询客户端管理详细 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const getClient = (id: string | number): AxiosPromise<ClientVO> => { |
||||
|
return request({ |
||||
|
url: '/system/client/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 新增客户端管理 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const addClient = (data: ClientForm) => { |
||||
|
return request({ |
||||
|
url: '/system/client', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 修改客户端管理 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const updateClient = (data: ClientForm) => { |
||||
|
return request({ |
||||
|
url: '/system/client', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 删除客户端管理 |
||||
|
* @param id |
||||
|
*/ |
||||
|
export const delClient = (id: string | number | Array<string | number>) => { |
||||
|
return request({ |
||||
|
url: '/system/client/' + id, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 状态修改 |
||||
|
* @param clientId 客户端id |
||||
|
* @param status 状态 |
||||
|
*/ |
||||
|
export function changeStatus(clientId: string, status: string) { |
||||
|
const data = { |
||||
|
clientId, |
||||
|
status |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/client/changeStatus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,135 @@ |
|||||
|
export interface ClientVO { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 客户端id |
||||
|
*/ |
||||
|
clientId: string; |
||||
|
|
||||
|
/** |
||||
|
* 客户端key |
||||
|
*/ |
||||
|
clientKey: string; |
||||
|
|
||||
|
/** |
||||
|
* 客户端秘钥 |
||||
|
*/ |
||||
|
clientSecret: string; |
||||
|
|
||||
|
/** |
||||
|
* 授权类型 |
||||
|
*/ |
||||
|
grantTypeList: string[]; |
||||
|
|
||||
|
/** |
||||
|
* 设备类型 |
||||
|
*/ |
||||
|
deviceType: string; |
||||
|
|
||||
|
/** |
||||
|
* token活跃超时时间 |
||||
|
*/ |
||||
|
activeTimeout: number; |
||||
|
|
||||
|
/** |
||||
|
* token固定超时 |
||||
|
*/ |
||||
|
timeout: number; |
||||
|
|
||||
|
/** |
||||
|
* 状态(0正常 1停用) |
||||
|
*/ |
||||
|
status: string; |
||||
|
} |
||||
|
|
||||
|
export interface ClientForm extends BaseEntity { |
||||
|
/** |
||||
|
* id |
||||
|
*/ |
||||
|
id?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 客户端id |
||||
|
*/ |
||||
|
clientId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 客户端key |
||||
|
*/ |
||||
|
clientKey?: string; |
||||
|
|
||||
|
/** |
||||
|
* 客户端秘钥 |
||||
|
*/ |
||||
|
clientSecret?: string; |
||||
|
|
||||
|
/** |
||||
|
* 授权类型 |
||||
|
*/ |
||||
|
grantTypeList?: string[]; |
||||
|
|
||||
|
/** |
||||
|
* 设备类型 |
||||
|
*/ |
||||
|
deviceType?: string; |
||||
|
|
||||
|
/** |
||||
|
* token活跃超时时间 |
||||
|
*/ |
||||
|
activeTimeout?: number; |
||||
|
|
||||
|
/** |
||||
|
* token固定超时 |
||||
|
*/ |
||||
|
timeout?: number; |
||||
|
|
||||
|
/** |
||||
|
* 状态(0正常 1停用) |
||||
|
*/ |
||||
|
status?: string; |
||||
|
} |
||||
|
|
||||
|
export interface ClientQuery extends PageQuery { |
||||
|
/** |
||||
|
* 客户端id |
||||
|
*/ |
||||
|
clientId?: string | number; |
||||
|
|
||||
|
/** |
||||
|
* 客户端key |
||||
|
*/ |
||||
|
clientKey?: string; |
||||
|
|
||||
|
/** |
||||
|
* 客户端秘钥 |
||||
|
*/ |
||||
|
clientSecret?: string; |
||||
|
|
||||
|
/** |
||||
|
* 授权类型 |
||||
|
*/ |
||||
|
grantType?: string; |
||||
|
|
||||
|
/** |
||||
|
* 设备类型 |
||||
|
*/ |
||||
|
deviceType?: string; |
||||
|
|
||||
|
/** |
||||
|
* token活跃超时时间 |
||||
|
*/ |
||||
|
activeTimeout?: number; |
||||
|
|
||||
|
/** |
||||
|
* token固定超时 |
||||
|
*/ |
||||
|
timeout?: number; |
||||
|
|
||||
|
/** |
||||
|
* 状态(0正常 1停用) |
||||
|
*/ |
||||
|
status?: string; |
||||
|
} |
||||
@ -0,0 +1,74 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { ConfigForm, ConfigQuery, ConfigVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询参数列表
|
||||
|
export function listConfig(query: ConfigQuery): AxiosPromise<ConfigVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/config/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询参数详细
|
||||
|
export function getConfig(configId: string | number): AxiosPromise<ConfigVO> { |
||||
|
return request({ |
||||
|
url: '/system/config/' + configId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 根据参数键名查询参数值
|
||||
|
export function getConfigKey(configKey: string): AxiosPromise<string> { |
||||
|
return request({ |
||||
|
url: '/system/config/configKey/' + configKey, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增参数配置
|
||||
|
export function addConfig(data: ConfigForm) { |
||||
|
return request({ |
||||
|
url: '/system/config', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改参数配置
|
||||
|
export function updateConfig(data: ConfigForm) { |
||||
|
return request({ |
||||
|
url: '/system/config', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改参数配置
|
||||
|
export function updateConfigByKey(key: string, value: any) { |
||||
|
return request({ |
||||
|
url: '/system/config/updateByKey', |
||||
|
method: 'put', |
||||
|
data: { |
||||
|
configKey: key, |
||||
|
configValue: value |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除参数配置
|
||||
|
export function delConfig(configId: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/system/config/' + configId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 刷新参数缓存
|
||||
|
export function refreshCache() { |
||||
|
return request({ |
||||
|
url: '/system/config/refreshCache', |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
export interface ConfigVO extends BaseEntity { |
||||
|
configId: number | string; |
||||
|
configName: string; |
||||
|
configKey: string; |
||||
|
configValue: string; |
||||
|
configType: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface ConfigForm { |
||||
|
configId: number | string | undefined; |
||||
|
configName: string; |
||||
|
configKey: string; |
||||
|
configValue: string; |
||||
|
configType: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface ConfigQuery extends PageQuery { |
||||
|
configName: string; |
||||
|
configKey: string; |
||||
|
configType: string; |
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { DeptForm, DeptQuery, DeptVO } from './types'; |
||||
|
|
||||
|
// 查询部门列表
|
||||
|
export const listDept = (query?: DeptQuery) => { |
||||
|
return request({ |
||||
|
url: '/system/dept/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 查询部门列表(排除节点)
|
||||
|
export const listDeptExcludeChild = (deptId: string | number): AxiosPromise<DeptVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/dept/list/exclude/' + deptId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 查询部门详细
|
||||
|
export const getDept = (deptId: string | number): AxiosPromise<DeptVO> => { |
||||
|
return request({ |
||||
|
url: '/system/dept/' + deptId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 查询部门下拉树结构
|
||||
|
export const treeselect = (): AxiosPromise<DeptVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/dept/treeselect', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 新增部门
|
||||
|
export const addDept = (data: DeptForm) => { |
||||
|
return request({ |
||||
|
url: '/system/dept', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 修改部门
|
||||
|
export const updateDept = (data: DeptForm) => { |
||||
|
return request({ |
||||
|
url: '/system/dept', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 删除部门
|
||||
|
export const delDept = (deptId: number | string) => { |
||||
|
return request({ |
||||
|
url: '/system/dept/' + deptId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
@ -0,0 +1,48 @@ |
|||||
|
/** |
||||
|
* 部门查询参数 |
||||
|
*/ |
||||
|
export interface DeptQuery extends PageQuery { |
||||
|
deptName?: string; |
||||
|
deptCategory?: string; |
||||
|
status?: number; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 部门类型 |
||||
|
*/ |
||||
|
export interface DeptVO extends BaseEntity { |
||||
|
id: number | string; |
||||
|
parentName: string; |
||||
|
parentId: number | string; |
||||
|
children: DeptVO[]; |
||||
|
deptId: number | string; |
||||
|
deptName: string; |
||||
|
deptCategory: string; |
||||
|
orderNum: number; |
||||
|
leader: string; |
||||
|
phone: string; |
||||
|
email: string; |
||||
|
status: string; |
||||
|
delFlag: string; |
||||
|
ancestors: string; |
||||
|
menuId: string | number; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 部门表单类型 |
||||
|
*/ |
||||
|
export interface DeptForm { |
||||
|
parentName?: string; |
||||
|
parentId?: number | string; |
||||
|
children?: DeptForm[]; |
||||
|
deptId?: number | string; |
||||
|
deptName?: string; |
||||
|
deptCategory?: string; |
||||
|
orderNum?: number; |
||||
|
leader?: string; |
||||
|
phone?: string; |
||||
|
email?: string; |
||||
|
status?: string; |
||||
|
delFlag?: string; |
||||
|
ancestors?: string; |
||||
|
} |
||||
@ -0,0 +1,53 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { DictDataForm, DictDataQuery, DictDataVO } from './types'; |
||||
|
// 根据字典类型查询字典数据信息
|
||||
|
export function getDicts(dictType: string): AxiosPromise<DictDataVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/dict/data/type/' + dictType, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询字典数据列表
|
||||
|
export function listData(query: DictDataQuery): AxiosPromise<DictDataVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/dict/data/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询字典数据详细
|
||||
|
export function getData(dictCode: string | number): AxiosPromise<DictDataVO> { |
||||
|
return request({ |
||||
|
url: '/system/dict/data/' + dictCode, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增字典数据
|
||||
|
export function addData(data: DictDataForm) { |
||||
|
return request({ |
||||
|
url: '/system/dict/data', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改字典数据
|
||||
|
export function updateData(data: DictDataForm) { |
||||
|
return request({ |
||||
|
url: '/system/dict/data', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除字典数据
|
||||
|
export function delData(dictCode: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/system/dict/data/' + dictCode, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
export interface DictDataQuery extends PageQuery { |
||||
|
dictName: string; |
||||
|
dictType: string; |
||||
|
dictLabel: string; |
||||
|
} |
||||
|
|
||||
|
export interface DictDataVO extends BaseEntity { |
||||
|
dictCode: string; |
||||
|
dictLabel: string; |
||||
|
dictValue: string; |
||||
|
cssClass: string; |
||||
|
listClass: ElTagType; |
||||
|
dictSort: number; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface DictDataForm { |
||||
|
dictType?: string; |
||||
|
dictCode: string | undefined; |
||||
|
dictLabel: string; |
||||
|
dictValue: string; |
||||
|
cssClass: string; |
||||
|
listClass: ElTagType; |
||||
|
dictSort: number; |
||||
|
remark: string; |
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { DictTypeForm, DictTypeVO, DictTypeQuery } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询字典类型列表
|
||||
|
export function listType(query: DictTypeQuery): AxiosPromise<DictTypeVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/dict/type/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询字典类型详细
|
||||
|
export function getType(dictId: number | string): AxiosPromise<DictTypeVO> { |
||||
|
return request({ |
||||
|
url: '/system/dict/type/' + dictId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增字典类型
|
||||
|
export function addType(data: DictTypeForm) { |
||||
|
return request({ |
||||
|
url: '/system/dict/type', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改字典类型
|
||||
|
export function updateType(data: DictTypeForm) { |
||||
|
return request({ |
||||
|
url: '/system/dict/type', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除字典类型
|
||||
|
export function delType(dictId: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/system/dict/type/' + dictId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 刷新字典缓存
|
||||
|
export function refreshCache() { |
||||
|
return request({ |
||||
|
url: '/system/dict/type/refreshCache', |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 获取字典选择框列表
|
||||
|
export function optionselect(): AxiosPromise<DictTypeVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/dict/type/optionselect', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,18 @@ |
|||||
|
export interface DictTypeVO extends BaseEntity { |
||||
|
dictId: number | string; |
||||
|
dictName: string; |
||||
|
dictType: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface DictTypeForm { |
||||
|
dictId: number | string | undefined; |
||||
|
dictName: string; |
||||
|
dictType: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface DictTypeQuery extends PageQuery { |
||||
|
dictName: string; |
||||
|
dictType: string; |
||||
|
} |
||||
@ -0,0 +1,70 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { MenuQuery, MenuVO, MenuForm, MenuTreeOption, RoleMenuTree } from './types'; |
||||
|
|
||||
|
// 查询菜单列表
|
||||
|
export const listMenu = (query?: MenuQuery): AxiosPromise<MenuVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/menu/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 查询菜单详细
|
||||
|
export const getMenu = (menuId: string | number): AxiosPromise<MenuVO> => { |
||||
|
return request({ |
||||
|
url: '/system/menu/' + menuId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 查询菜单下拉树结构
|
||||
|
export const treeselect = (): AxiosPromise<MenuTreeOption[]> => { |
||||
|
return request({ |
||||
|
url: '/system/menu/treeselect', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 根据角色ID查询菜单下拉树结构
|
||||
|
export const roleMenuTreeselect = (roleId: string | number): AxiosPromise<RoleMenuTree> => { |
||||
|
return request({ |
||||
|
url: '/system/menu/roleMenuTreeselect/' + roleId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 根据角色ID查询菜单下拉树结构
|
||||
|
export const tenantPackageMenuTreeselect = (packageId: string | number): AxiosPromise<RoleMenuTree> => { |
||||
|
return request({ |
||||
|
url: '/system/menu/tenantPackageMenuTreeselect/' + packageId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 新增菜单
|
||||
|
export const addMenu = (data: MenuForm) => { |
||||
|
return request({ |
||||
|
url: '/system/menu', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 修改菜单
|
||||
|
export const updateMenu = (data: MenuForm) => { |
||||
|
return request({ |
||||
|
url: '/system/menu', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 删除菜单
|
||||
|
export const delMenu = (menuId: string | number) => { |
||||
|
return request({ |
||||
|
url: '/system/menu/' + menuId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
@ -0,0 +1,69 @@ |
|||||
|
import { MenuTypeEnum } from '@/enums/MenuTypeEnum'; |
||||
|
|
||||
|
/** |
||||
|
* 菜单树形结构类型 |
||||
|
*/ |
||||
|
export interface MenuTreeOption { |
||||
|
id: string | number; |
||||
|
label: string; |
||||
|
parentId: string | number; |
||||
|
weight: number; |
||||
|
children?: MenuTreeOption[]; |
||||
|
} |
||||
|
|
||||
|
export interface RoleMenuTree { |
||||
|
menus: MenuTreeOption[]; |
||||
|
checkedKeys: string[]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 菜单查询参数类型 |
||||
|
*/ |
||||
|
export interface MenuQuery { |
||||
|
keywords?: string; |
||||
|
menuName?: string; |
||||
|
status?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 菜单视图对象类型 |
||||
|
*/ |
||||
|
export interface MenuVO extends BaseEntity { |
||||
|
parentName: string; |
||||
|
parentId: string | number; |
||||
|
children: MenuVO[]; |
||||
|
menuId: string | number; |
||||
|
menuName: string; |
||||
|
orderNum: number; |
||||
|
path: string; |
||||
|
component: string; |
||||
|
queryParam: string; |
||||
|
isFrame: string; |
||||
|
isCache: string; |
||||
|
menuType: MenuTypeEnum; |
||||
|
visible: string; |
||||
|
status: string; |
||||
|
icon: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface MenuForm { |
||||
|
parentName?: string; |
||||
|
parentId?: string | number; |
||||
|
children?: MenuForm[]; |
||||
|
menuId?: string | number; |
||||
|
menuName: string; |
||||
|
orderNum: number; |
||||
|
path: string; |
||||
|
component?: string; |
||||
|
queryParam?: string; |
||||
|
isFrame?: string; |
||||
|
isCache?: string; |
||||
|
menuType?: MenuTypeEnum; |
||||
|
visible?: string; |
||||
|
status?: string; |
||||
|
icon?: string; |
||||
|
remark?: string; |
||||
|
query?: string; |
||||
|
perms?: string; |
||||
|
} |
||||
@ -0,0 +1,45 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { NoticeForm, NoticeQuery, NoticeVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
// 查询公告列表
|
||||
|
export function listNotice(query: NoticeQuery): AxiosPromise<NoticeVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/notice/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询公告详细
|
||||
|
export function getNotice(noticeId: string | number): AxiosPromise<NoticeVO> { |
||||
|
return request({ |
||||
|
url: '/system/notice/' + noticeId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增公告
|
||||
|
export function addNotice(data: NoticeForm) { |
||||
|
return request({ |
||||
|
url: '/system/notice', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改公告
|
||||
|
export function updateNotice(data: NoticeForm) { |
||||
|
return request({ |
||||
|
url: '/system/notice', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除公告
|
||||
|
export function delNotice(noticeId: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/system/notice/' + noticeId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,26 @@ |
|||||
|
export interface NoticeVO extends BaseEntity { |
||||
|
noticeId: number; |
||||
|
noticeTitle: string; |
||||
|
noticeType: string; |
||||
|
noticeContent: string; |
||||
|
status: string; |
||||
|
remark: string; |
||||
|
createByName: string; |
||||
|
} |
||||
|
|
||||
|
export interface NoticeQuery extends PageQuery { |
||||
|
noticeTitle: string; |
||||
|
createByName: string; |
||||
|
status: string; |
||||
|
noticeType: string; |
||||
|
} |
||||
|
|
||||
|
export interface NoticeForm { |
||||
|
noticeId: number | string | undefined; |
||||
|
noticeTitle: string; |
||||
|
noticeType: string; |
||||
|
noticeContent: string; |
||||
|
status: string; |
||||
|
remark: string; |
||||
|
createByName: string; |
||||
|
} |
||||
@ -0,0 +1,58 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { PostForm, PostQuery, PostVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询岗位列表
|
||||
|
export function listPost(query: PostQuery): AxiosPromise<PostVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/post/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询岗位详细
|
||||
|
export function getPost(postId: string | number): AxiosPromise<PostVO> { |
||||
|
return request({ |
||||
|
url: '/system/post/' + postId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 获取岗位选择框列表
|
||||
|
export function optionselect(deptId?: number | string, postIds?: (number | string)[]): AxiosPromise<PostVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/post/optionselect', |
||||
|
method: 'get', |
||||
|
params: { |
||||
|
postIds: postIds, |
||||
|
deptId: deptId |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增岗位
|
||||
|
export function addPost(data: PostForm) { |
||||
|
return request({ |
||||
|
url: '/system/post', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改岗位
|
||||
|
export function updatePost(data: PostForm) { |
||||
|
return request({ |
||||
|
url: '/system/post', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除岗位
|
||||
|
export function delPost(postId: string | number | (string | number)[]) { |
||||
|
return request({ |
||||
|
url: '/system/post/' + postId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,31 @@ |
|||||
|
export interface PostVO extends BaseEntity { |
||||
|
postId: number | string; |
||||
|
deptId: number | string; |
||||
|
postCode: string; |
||||
|
postName: string; |
||||
|
postCategory: string; |
||||
|
deptName: string; |
||||
|
postSort: number; |
||||
|
status: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface PostForm { |
||||
|
postId: number | string | undefined; |
||||
|
deptId: number | string | undefined; |
||||
|
postCode: string; |
||||
|
postName: string; |
||||
|
postCategory: string; |
||||
|
postSort: number; |
||||
|
status: string; |
||||
|
remark: string; |
||||
|
} |
||||
|
|
||||
|
export interface PostQuery extends PageQuery { |
||||
|
deptId: number | string; |
||||
|
belongDeptId: number | string; |
||||
|
postCode: string; |
||||
|
postName: string; |
||||
|
postCategory: string; |
||||
|
status: string; |
||||
|
} |
||||
@ -0,0 +1,160 @@ |
|||||
|
import { UserVO } from '@/api/system/user/types'; |
||||
|
import { UserQuery } from '@/api/system/user/types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { RoleQuery, RoleVO, RoleDeptTree } from './types'; |
||||
|
import request from '@/utils/request'; |
||||
|
|
||||
|
export const listRole = (query: RoleQuery): AxiosPromise<RoleVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/role/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 通过roleIds查询角色 |
||||
|
* @param roleIds |
||||
|
*/ |
||||
|
export const optionSelect = (roleIds: (number | string)[]): AxiosPromise<RoleVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/role/optionselect?roleIds=' + roleIds, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询角色详细 |
||||
|
*/ |
||||
|
export const getRole = (roleId: string | number): AxiosPromise<RoleVO> => { |
||||
|
return request({ |
||||
|
url: '/system/role/' + roleId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 新增角色 |
||||
|
*/ |
||||
|
export const addRole = (data: any) => { |
||||
|
return request({ |
||||
|
url: '/system/role', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 修改角色 |
||||
|
* @param data |
||||
|
*/ |
||||
|
export const updateRole = (data: any) => { |
||||
|
return request({ |
||||
|
url: '/system/role', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 角色数据权限 |
||||
|
*/ |
||||
|
export const dataScope = (data: any) => { |
||||
|
return request({ |
||||
|
url: '/system/role/dataScope', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 角色状态修改 |
||||
|
*/ |
||||
|
export const changeRoleStatus = (roleId: string | number, status: string) => { |
||||
|
const data = { |
||||
|
roleId, |
||||
|
status |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/role/changeStatus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 删除角色 |
||||
|
*/ |
||||
|
export const delRole = (roleId: Array<string | number> | string | number) => { |
||||
|
return request({ |
||||
|
url: '/system/role/' + roleId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询角色已授权用户列表 |
||||
|
*/ |
||||
|
export const allocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/role/authUser/allocatedList', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询角色未授权用户列表 |
||||
|
*/ |
||||
|
export const unallocatedUserList = (query: UserQuery): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/role/authUser/unallocatedList', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 取消用户授权角色 |
||||
|
*/ |
||||
|
export const authUserCancel = (data: any) => { |
||||
|
return request({ |
||||
|
url: '/system/role/authUser/cancel', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 批量取消用户授权角色 |
||||
|
*/ |
||||
|
export const authUserCancelAll = (data: any) => { |
||||
|
return request({ |
||||
|
url: '/system/role/authUser/cancelAll', |
||||
|
method: 'put', |
||||
|
params: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 授权用户选择 |
||||
|
*/ |
||||
|
export const authUserSelectAll = (data: any) => { |
||||
|
return request({ |
||||
|
url: '/system/role/authUser/selectAll', |
||||
|
method: 'put', |
||||
|
params: data |
||||
|
}); |
||||
|
}; |
||||
|
// 根据角色ID查询部门树结构
|
||||
|
export const deptTreeSelect = (roleId: string | number): AxiosPromise<RoleDeptTree> => { |
||||
|
return request({ |
||||
|
url: '/system/role/deptTree/' + roleId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
export default { |
||||
|
optionSelect, |
||||
|
listRole |
||||
|
}; |
||||
@ -0,0 +1,52 @@ |
|||||
|
/** |
||||
|
* 菜单树形结构类型 |
||||
|
*/ |
||||
|
export interface DeptTreeOption { |
||||
|
id: string; |
||||
|
label: string; |
||||
|
parentId: string; |
||||
|
weight: number; |
||||
|
children?: DeptTreeOption[]; |
||||
|
} |
||||
|
|
||||
|
export interface RoleDeptTree { |
||||
|
checkedKeys: string[]; |
||||
|
depts: DeptTreeOption[]; |
||||
|
} |
||||
|
|
||||
|
export interface RoleVO extends BaseEntity { |
||||
|
roleId: string | number; |
||||
|
roleName: string; |
||||
|
roleKey: string; |
||||
|
roleSort: number; |
||||
|
dataScope: string; |
||||
|
menuCheckStrictly: boolean; |
||||
|
deptCheckStrictly: boolean; |
||||
|
status: string; |
||||
|
delFlag: string; |
||||
|
remark?: any; |
||||
|
flag: boolean; |
||||
|
menuIds?: Array<string | number>; |
||||
|
deptIds?: Array<string | number>; |
||||
|
admin: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface RoleQuery extends PageQuery { |
||||
|
roleName: string; |
||||
|
roleKey: string; |
||||
|
status: string; |
||||
|
} |
||||
|
|
||||
|
export interface RoleForm { |
||||
|
roleName: string; |
||||
|
roleKey: string; |
||||
|
roleSort: number; |
||||
|
status: string; |
||||
|
menuCheckStrictly: boolean; |
||||
|
deptCheckStrictly: boolean; |
||||
|
remark: string; |
||||
|
dataScope?: string; |
||||
|
roleId: string | undefined; |
||||
|
menuIds: Array<string | number>; |
||||
|
deptIds: Array<string | number>; |
||||
|
} |
||||
@ -0,0 +1,28 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
|
||||
|
// 绑定账号
|
||||
|
export function authBinding(source: string, tenantId: string) { |
||||
|
return request({ |
||||
|
url: '/auth/binding/' + source, |
||||
|
method: 'get', |
||||
|
params: { |
||||
|
tenantId: tenantId, |
||||
|
domain: window.location.host |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 解绑账号
|
||||
|
export function authUnlock(authId: string) { |
||||
|
return request({ |
||||
|
url: '/auth/unlock/' + authId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
//获取授权列表
|
||||
|
export function getAuthList() { |
||||
|
return request({ |
||||
|
url: '/system/social/list', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,101 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { TenantForm, TenantQuery, TenantVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询租户列表
|
||||
|
export function listTenant(query: TenantQuery): AxiosPromise<TenantVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/tenant/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询租户详细
|
||||
|
export function getTenant(id: string | number): AxiosPromise<TenantVO> { |
||||
|
return request({ |
||||
|
url: '/system/tenant/' + id, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增租户
|
||||
|
export function addTenant(data: TenantForm) { |
||||
|
return request({ |
||||
|
url: '/system/tenant', |
||||
|
method: 'post', |
||||
|
headers: { |
||||
|
isEncrypt: true, |
||||
|
repeatSubmit: false |
||||
|
}, |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改租户
|
||||
|
export function updateTenant(data: TenantForm) { |
||||
|
return request({ |
||||
|
url: '/system/tenant', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 租户状态修改
|
||||
|
export function changeTenantStatus(id: string | number, tenantId: string | number, status: string) { |
||||
|
const data = { |
||||
|
id, |
||||
|
tenantId, |
||||
|
status |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/tenant/changeStatus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除租户
|
||||
|
export function delTenant(id: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/system/tenant/' + id, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 动态切换租户
|
||||
|
export function dynamicTenant(tenantId: string | number) { |
||||
|
return request({ |
||||
|
url: '/system/tenant/dynamic/' + tenantId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 清除动态租户
|
||||
|
export function dynamicClear() { |
||||
|
return request({ |
||||
|
url: '/system/tenant/dynamic/clear', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 同步租户套餐
|
||||
|
export function syncTenantPackage(tenantId: string | number, packageId: string | number) { |
||||
|
const data = { |
||||
|
tenantId, |
||||
|
packageId |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/tenant/syncTenantPackage', |
||||
|
method: 'get', |
||||
|
params: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 同步租户字典
|
||||
|
export function syncTenantDict() { |
||||
|
return request({ |
||||
|
url: '/system/tenant/syncTenantDict', |
||||
|
method: 'get', |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
export interface TenantVO extends BaseEntity { |
||||
|
id: number | string; |
||||
|
tenantId: number | string; |
||||
|
username: string; |
||||
|
contactUserName: string; |
||||
|
contactPhone: string; |
||||
|
companyName: string; |
||||
|
licenseNumber: string; |
||||
|
address: string; |
||||
|
domain: string; |
||||
|
intro: string; |
||||
|
remark: string; |
||||
|
packageId: string | number; |
||||
|
expireTime: string; |
||||
|
accountCount: number; |
||||
|
status: string; |
||||
|
} |
||||
|
|
||||
|
export interface TenantQuery extends PageQuery { |
||||
|
tenantId: string | number; |
||||
|
|
||||
|
contactUserName: string; |
||||
|
|
||||
|
contactPhone: string; |
||||
|
|
||||
|
companyName: string; |
||||
|
} |
||||
|
|
||||
|
export interface TenantForm { |
||||
|
id: number | string | undefined; |
||||
|
tenantId: number | string | undefined; |
||||
|
username: string; |
||||
|
password: string; |
||||
|
contactUserName: string; |
||||
|
contactPhone: string; |
||||
|
companyName: string; |
||||
|
licenseNumber: string; |
||||
|
domain: string; |
||||
|
address: string; |
||||
|
intro: string; |
||||
|
remark: string; |
||||
|
packageId: string | number; |
||||
|
expireTime: string; |
||||
|
accountCount: number; |
||||
|
status: string; |
||||
|
} |
||||
@ -0,0 +1,67 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { TenantPkgForm, TenantPkgQuery, TenantPkgVO } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询租户套餐列表
|
||||
|
export function listTenantPackage(query?: TenantPkgQuery): AxiosPromise<TenantPkgVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/tenant/package/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询租户套餐下拉选列表
|
||||
|
export function selectTenantPackage(): AxiosPromise<TenantPkgVO[]> { |
||||
|
return request({ |
||||
|
url: '/system/tenant/package/selectList', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 查询租户套餐详细
|
||||
|
export function getTenantPackage(packageId: string | number): AxiosPromise<TenantPkgVO> { |
||||
|
return request({ |
||||
|
url: '/system/tenant/package/' + packageId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 新增租户套餐
|
||||
|
export function addTenantPackage(data: TenantPkgForm) { |
||||
|
return request({ |
||||
|
url: '/system/tenant/package', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 修改租户套餐
|
||||
|
export function updateTenantPackage(data: TenantPkgForm) { |
||||
|
return request({ |
||||
|
url: '/system/tenant/package', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 租户套餐状态修改
|
||||
|
export function changePackageStatus(packageId: number | string, status: string) { |
||||
|
const data = { |
||||
|
packageId, |
||||
|
status |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/tenant/package/changeStatus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// 删除租户套餐
|
||||
|
export function delTenantPackage(packageId: string | number | Array<string | number>) { |
||||
|
return request({ |
||||
|
url: '/system/tenant/package/' + packageId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
} |
||||
@ -0,0 +1,20 @@ |
|||||
|
export interface TenantPkgVO extends BaseEntity { |
||||
|
packageId: string | number; |
||||
|
packageName: string; |
||||
|
menuIds: string; |
||||
|
remark: string; |
||||
|
menuCheckStrictly: boolean; |
||||
|
status: string; |
||||
|
} |
||||
|
|
||||
|
export interface TenantPkgQuery extends PageQuery { |
||||
|
packageName: string; |
||||
|
} |
||||
|
|
||||
|
export interface TenantPkgForm { |
||||
|
packageId: string | number | undefined; |
||||
|
packageName: string; |
||||
|
menuIds: string; |
||||
|
remark: string; |
||||
|
menuCheckStrictly: boolean; |
||||
|
} |
||||
@ -0,0 +1,229 @@ |
|||||
|
import { DeptVO } from './../dept/types'; |
||||
|
import { RoleVO } from '@/api/system/role/types'; |
||||
|
import request from '@/utils/request'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
import { UserForm, UserQuery, UserVO, UserInfoVO } from './types'; |
||||
|
import { parseStrEmpty } from '@/utils/ruoyi'; |
||||
|
|
||||
|
/** |
||||
|
* 查询用户列表 |
||||
|
* @param query |
||||
|
*/ |
||||
|
export const listUser = (query: UserQuery): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/user/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 通过用户ids查询用户 |
||||
|
* @param userIds |
||||
|
*/ |
||||
|
export const optionSelect = (userIds: (number | string)[]): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/user/optionselect?userIds=' + userIds, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 获取用户详情 |
||||
|
* @param userId |
||||
|
*/ |
||||
|
export const getUser = (userId?: string | number): AxiosPromise<UserInfoVO> => { |
||||
|
return request({ |
||||
|
url: '/system/user/' + parseStrEmpty(userId), |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 新增用户 |
||||
|
*/ |
||||
|
export const addUser = (data: UserForm) => { |
||||
|
return request({ |
||||
|
url: '/system/user', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 修改用户 |
||||
|
*/ |
||||
|
export const updateUser = (data: UserForm) => { |
||||
|
return request({ |
||||
|
url: '/system/user', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 删除用户 |
||||
|
* @param userId 用户ID |
||||
|
*/ |
||||
|
export const delUser = (userId: Array<string | number> | string | number) => { |
||||
|
return request({ |
||||
|
url: '/system/user/' + userId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 用户密码重置 |
||||
|
* @param userId 用户ID |
||||
|
* @param password 密码 |
||||
|
*/ |
||||
|
export const resetUserPwd = (userId: string | number, password: string) => { |
||||
|
const data = { |
||||
|
userId, |
||||
|
password |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/user/resetPwd', |
||||
|
method: 'put', |
||||
|
headers: { |
||||
|
isEncrypt: true, |
||||
|
repeatSubmit: false |
||||
|
}, |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 用户状态修改 |
||||
|
* @param userId 用户ID |
||||
|
* @param status 用户状态 |
||||
|
*/ |
||||
|
export const changeUserStatus = (userId: number | string, status: string) => { |
||||
|
const data = { |
||||
|
userId, |
||||
|
status |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/user/changeStatus', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询用户个人信息 |
||||
|
*/ |
||||
|
export const getUserProfile = (): AxiosPromise<UserInfoVO> => { |
||||
|
return request({ |
||||
|
url: '/system/user/profile', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 修改用户个人信息 |
||||
|
* @param data 用户信息 |
||||
|
*/ |
||||
|
export const updateUserProfile = (data: UserForm) => { |
||||
|
return request({ |
||||
|
url: '/system/user/profile', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 用户密码重置 |
||||
|
* @param oldPassword 旧密码 |
||||
|
* @param newPassword 新密码 |
||||
|
*/ |
||||
|
export const updateUserPwd = (oldPassword: string, newPassword: string) => { |
||||
|
const data = { |
||||
|
oldPassword, |
||||
|
newPassword |
||||
|
}; |
||||
|
return request({ |
||||
|
url: '/system/user/profile/updatePwd', |
||||
|
method: 'put', |
||||
|
headers: { |
||||
|
isEncrypt: true, |
||||
|
repeatSubmit: false |
||||
|
}, |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 用户头像上传 |
||||
|
* @param data 头像文件 |
||||
|
*/ |
||||
|
export const uploadAvatar = (data: FormData) => { |
||||
|
return request({ |
||||
|
url: '/system/user/profile/avatar', |
||||
|
method: 'post', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询授权角色 |
||||
|
* @param userId 用户ID |
||||
|
*/ |
||||
|
export const getAuthRole = (userId: string | number): AxiosPromise<{ user: UserVO; roles: RoleVO[] }> => { |
||||
|
return request({ |
||||
|
url: '/system/user/authRole/' + userId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 保存授权角色 |
||||
|
* @param data 用户ID |
||||
|
*/ |
||||
|
export const updateAuthRole = (data: { userId: string; roleIds: string }) => { |
||||
|
return request({ |
||||
|
url: '/system/user/authRole', |
||||
|
method: 'put', |
||||
|
params: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询当前部门的所有用户信息 |
||||
|
* @param deptId |
||||
|
*/ |
||||
|
export const listUserByDeptId = (deptId: string | number): AxiosPromise<UserVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/user/list/dept/' + deptId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 查询部门下拉树结构 |
||||
|
*/ |
||||
|
export const deptTreeSelect = (): AxiosPromise<DeptVO[]> => { |
||||
|
return request({ |
||||
|
url: '/system/user/deptTree', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
export default { |
||||
|
listUser, |
||||
|
getUser, |
||||
|
optionSelect, |
||||
|
addUser, |
||||
|
updateUser, |
||||
|
delUser, |
||||
|
resetUserPwd, |
||||
|
changeUserStatus, |
||||
|
getUserProfile, |
||||
|
updateUserProfile, |
||||
|
updateUserPwd, |
||||
|
uploadAvatar, |
||||
|
getAuthRole, |
||||
|
updateAuthRole, |
||||
|
deptTreeSelect, |
||||
|
listUserByDeptId |
||||
|
}; |
||||
@ -0,0 +1,84 @@ |
|||||
|
import { RoleVO } from '@/api/system/role/types'; |
||||
|
import { PostVO } from '@/api/system/post/types'; |
||||
|
|
||||
|
/** |
||||
|
* 用户信息 |
||||
|
*/ |
||||
|
export interface UserInfo { |
||||
|
user: UserVO; |
||||
|
roles: string[]; |
||||
|
permissions: string[]; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户查询对象类型 |
||||
|
*/ |
||||
|
export interface UserQuery extends PageQuery { |
||||
|
userName?: string; |
||||
|
phonenumber?: string; |
||||
|
status?: string; |
||||
|
deptId?: string | number; |
||||
|
roleId?: string | number; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户返回对象 |
||||
|
*/ |
||||
|
export interface UserVO extends BaseEntity { |
||||
|
userId: string | number; |
||||
|
tenantId: string; |
||||
|
deptId: number; |
||||
|
userName: string; |
||||
|
nickName: string; |
||||
|
userType: string; |
||||
|
email: string; |
||||
|
phonenumber: string; |
||||
|
sex: string; |
||||
|
avatar: string; |
||||
|
status: string; |
||||
|
delFlag: string; |
||||
|
loginIp: string; |
||||
|
loginDate: string; |
||||
|
remark: string; |
||||
|
deptName: string; |
||||
|
roles: RoleVO[]; |
||||
|
roleIds: any; |
||||
|
postIds: any; |
||||
|
roleId: any; |
||||
|
admin: boolean; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 用户表单类型 |
||||
|
*/ |
||||
|
export interface UserForm { |
||||
|
id?: string; |
||||
|
userId?: string; |
||||
|
deptId?: number; |
||||
|
userName: string; |
||||
|
nickName?: string; |
||||
|
password: string; |
||||
|
phonenumber?: string; |
||||
|
email?: string; |
||||
|
sex?: string; |
||||
|
status: string; |
||||
|
remark?: string; |
||||
|
postIds: string[]; |
||||
|
roleIds: string[]; |
||||
|
} |
||||
|
|
||||
|
export interface UserInfoVO { |
||||
|
user: UserVO; |
||||
|
roles: RoleVO[]; |
||||
|
roleIds: string[]; |
||||
|
posts: PostVO[]; |
||||
|
postIds: string[]; |
||||
|
roleGroup: string; |
||||
|
postGroup: string; |
||||
|
} |
||||
|
|
||||
|
export interface ResetPwdForm { |
||||
|
oldPassword: string; |
||||
|
newPassword: string; |
||||
|
confirmPassword: string; |
||||
|
} |
||||
@ -0,0 +1,86 @@ |
|||||
|
import request from '@/utils/request'; |
||||
|
import { DbTableQuery, DbTableVO, TableQuery, TableVO, GenTableVO, DbTableForm } from './types'; |
||||
|
import { AxiosPromise } from 'axios'; |
||||
|
|
||||
|
// 查询生成表数据
|
||||
|
export const listTable = (query: TableQuery): AxiosPromise<TableVO[]> => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
// 查询db数据库列表
|
||||
|
export const listDbTable = (query: DbTableQuery): AxiosPromise<DbTableVO[]> => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/db/list', |
||||
|
method: 'get', |
||||
|
params: query |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 查询表详细信息
|
||||
|
export const getGenTable = (tableId: string | number): AxiosPromise<GenTableVO> => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/' + tableId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 修改代码生成信息
|
||||
|
export const updateGenTable = (data: DbTableForm): AxiosPromise<GenTableVO> => { |
||||
|
return request({ |
||||
|
url: '/tool/gen', |
||||
|
method: 'put', |
||||
|
data: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 导入表
|
||||
|
export const importTable = (data: { tables: string; dataName: string }): AxiosPromise<GenTableVO> => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/importTable', |
||||
|
method: 'post', |
||||
|
params: data |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 预览生成代码
|
||||
|
export const previewTable = (tableId: string | number) => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/preview/' + tableId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 删除表数据
|
||||
|
export const delTable = (tableId: string | number | Array<string | number>) => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/' + tableId, |
||||
|
method: 'delete' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 生成代码(自定义路径)
|
||||
|
export const genCode = (tableId: string | number) => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/genCode/' + tableId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 同步数据库
|
||||
|
export const synchDb = (tableId: string | number) => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/synchDb/' + tableId, |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
// 获取数据源名称
|
||||
|
export const getDataNames = () => { |
||||
|
return request({ |
||||
|
url: '/tool/gen/getDataNames', |
||||
|
method: 'get' |
||||
|
}); |
||||
|
}; |
||||
@ -0,0 +1,180 @@ |
|||||
|
export interface TableVO extends BaseEntity { |
||||
|
createDept: number | string; |
||||
|
tableId: string | number; |
||||
|
dataName: string; |
||||
|
tableName: string; |
||||
|
tableComment: string; |
||||
|
subTableName?: any; |
||||
|
subTableFkName?: any; |
||||
|
className: string; |
||||
|
tplCategory: string; |
||||
|
packageName: string; |
||||
|
moduleName: string; |
||||
|
businessName: string; |
||||
|
functionName: string; |
||||
|
functionAuthor: string; |
||||
|
genType: string; |
||||
|
genPath: string; |
||||
|
pkColumn?: any; |
||||
|
columns?: any; |
||||
|
options?: any; |
||||
|
remark?: any; |
||||
|
treeCode?: any; |
||||
|
treeParentCode?: any; |
||||
|
treeName?: any; |
||||
|
menuIds?: any; |
||||
|
parentMenuId?: any; |
||||
|
parentMenuName?: any; |
||||
|
tree: boolean; |
||||
|
crud: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface TableQuery extends PageQuery { |
||||
|
tableName: string; |
||||
|
tableComment: string; |
||||
|
dataName: string; |
||||
|
} |
||||
|
|
||||
|
export interface DbColumnVO extends BaseEntity { |
||||
|
createDept?: any; |
||||
|
columnId?: any; |
||||
|
tableId?: any; |
||||
|
columnName?: any; |
||||
|
columnComment?: any; |
||||
|
columnType?: any; |
||||
|
javaType?: any; |
||||
|
javaField?: any; |
||||
|
isPk?: any; |
||||
|
isIncrement?: any; |
||||
|
isRequired?: any; |
||||
|
isInsert?: any; |
||||
|
isEdit?: any; |
||||
|
isList?: any; |
||||
|
isQuery?: any; |
||||
|
queryType?: any; |
||||
|
htmlType?: any; |
||||
|
dictType?: any; |
||||
|
sort?: any; |
||||
|
increment: boolean; |
||||
|
capJavaField?: any; |
||||
|
usableColumn: boolean; |
||||
|
superColumn: boolean; |
||||
|
list: boolean; |
||||
|
pk: boolean; |
||||
|
insert: boolean; |
||||
|
edit: boolean; |
||||
|
query: boolean; |
||||
|
required: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface DbTableVO { |
||||
|
createDept?: any; |
||||
|
tableId?: any; |
||||
|
tableName: string; |
||||
|
tableComment: string; |
||||
|
subTableName?: any; |
||||
|
subTableFkName?: any; |
||||
|
className?: any; |
||||
|
tplCategory?: any; |
||||
|
packageName?: any; |
||||
|
moduleName?: any; |
||||
|
businessName?: any; |
||||
|
functionName?: any; |
||||
|
functionAuthor?: any; |
||||
|
genType?: any; |
||||
|
genPath?: any; |
||||
|
pkColumn?: any; |
||||
|
columns: DbColumnVO[]; |
||||
|
options?: any; |
||||
|
remark?: any; |
||||
|
treeCode?: any; |
||||
|
treeParentCode?: any; |
||||
|
treeName?: any; |
||||
|
menuIds?: any; |
||||
|
parentMenuId?: any; |
||||
|
parentMenuName?: any; |
||||
|
tree: boolean; |
||||
|
crud: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface DbTableQuery extends PageQuery { |
||||
|
dataName: string; |
||||
|
tableName: string; |
||||
|
tableComment: string; |
||||
|
} |
||||
|
|
||||
|
export interface GenTableVO { |
||||
|
info: DbTableVO; |
||||
|
rows: DbColumnVO[]; |
||||
|
tables: DbTableVO[]; |
||||
|
} |
||||
|
|
||||
|
export interface DbColumnForm extends BaseEntity { |
||||
|
createDept: number; |
||||
|
columnId: string; |
||||
|
tableId: string; |
||||
|
columnName: string; |
||||
|
columnComment: string; |
||||
|
columnType: string; |
||||
|
javaType: string; |
||||
|
javaField: string; |
||||
|
isPk: string; |
||||
|
isIncrement: string; |
||||
|
isRequired: string; |
||||
|
isInsert?: any; |
||||
|
isEdit: string; |
||||
|
isList: string; |
||||
|
isQuery?: any; |
||||
|
queryType: string; |
||||
|
htmlType: string; |
||||
|
dictType: string; |
||||
|
sort: number; |
||||
|
increment: boolean; |
||||
|
capJavaField: string; |
||||
|
usableColumn: boolean; |
||||
|
superColumn: boolean; |
||||
|
list: boolean; |
||||
|
pk: boolean; |
||||
|
insert: boolean; |
||||
|
edit: boolean; |
||||
|
query: boolean; |
||||
|
required: boolean; |
||||
|
} |
||||
|
|
||||
|
export interface DbParamForm { |
||||
|
treeCode?: any; |
||||
|
treeName?: any; |
||||
|
treeParentCode?: any; |
||||
|
parentMenuId: string; |
||||
|
} |
||||
|
|
||||
|
export interface DbTableForm extends BaseEntity { |
||||
|
createDept?: any; |
||||
|
tableId: string | string; |
||||
|
tableName: string; |
||||
|
tableComment: string; |
||||
|
subTableName?: any; |
||||
|
subTableFkName?: any; |
||||
|
className: string; |
||||
|
tplCategory: string; |
||||
|
packageName: string; |
||||
|
moduleName: string; |
||||
|
businessName: string; |
||||
|
functionName: string; |
||||
|
functionAuthor: string; |
||||
|
genType: string; |
||||
|
genPath: string; |
||||
|
pkColumn?: any; |
||||
|
columns: DbColumnForm[]; |
||||
|
options: string; |
||||
|
remark?: any; |
||||
|
treeCode?: any; |
||||
|
treeParentCode?: any; |
||||
|
treeName?: any; |
||||
|
menuIds?: any; |
||||
|
parentMenuId: string; |
||||
|
parentMenuName?: any; |
||||
|
tree: boolean; |
||||
|
crud: boolean; |
||||
|
params: DbParamForm; |
||||
|
} |
||||
@ -0,0 +1,59 @@ |
|||||
|
/** |
||||
|
* 注册 |
||||
|
*/ |
||||
|
export type RegisterForm = { |
||||
|
tenantId: string; |
||||
|
username: string; |
||||
|
password: string; |
||||
|
confirmPassword?: string; |
||||
|
code?: string; |
||||
|
uuid?: string; |
||||
|
userType?: string; |
||||
|
}; |
||||
|
|
||||
|
/** |
||||
|
* 登录请求 |
||||
|
*/ |
||||
|
export interface LoginData { |
||||
|
tenantId?: string; |
||||
|
username?: string; |
||||
|
password?: string; |
||||
|
rememberMe?: boolean; |
||||
|
socialCode?: string; |
||||
|
socialState?: string; |
||||
|
source?: string; |
||||
|
code?: string; |
||||
|
uuid?: string; |
||||
|
clientId: string; |
||||
|
grantType: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 登录响应 |
||||
|
*/ |
||||
|
export interface LoginResult { |
||||
|
access_token: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 验证码返回 |
||||
|
*/ |
||||
|
export interface VerifyCodeResult { |
||||
|
captchaEnabled: boolean; |
||||
|
uuid?: string; |
||||
|
img?: string; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 租户 |
||||
|
*/ |
||||
|
export interface TenantVO { |
||||
|
companyName: string; |
||||
|
domain: any; |
||||
|
tenantId: string; |
||||
|
} |
||||
|
|
||||
|
export interface TenantInfo { |
||||
|
tenantEnabled: boolean; |
||||
|
voList: TenantVO[]; |
||||
|
} |
||||
|
After Width: | Height: | Size: 160 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 954 B |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 223 B |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 179 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 971 B |
|
After Width: | Height: | Size: 717 B |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
|
After Width: | Height: | Size: 2.1 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 418 B |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 724 B |
|
After Width: | Height: | Size: 818 B |
|
After Width: | Height: | Size: 627 B |
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 497 B |
|
After Width: | Height: | Size: 459 B |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.3 KiB |