Commit 69a7b0de57d440a1cd1356d3ea52072a56e80883

Authored by 芋道源码
Committed by Gitee
2 parents b0cdfd7a 7dac4467

!220 vue3

Merge pull request !220 from xingyu/master
Showing 55 changed files with 758 additions and 249 deletions
sql/mysql/vue3-menu.sql 0 → 100644
  1 +-- ----------------------------
  2 +-- Table structure for system_menu
  3 +-- icon 不兼容
  4 +-- ----------------------------
  5 +DROP TABLE IF EXISTS `system_menu`;
  6 +CREATE TABLE `system_menu` (
  7 + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
  8 + `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',
  9 + `permission` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '权限标识',
  10 + `type` tinyint NOT NULL COMMENT '菜单类型',
  11 + `sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
  12 + `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父菜单ID',
  13 + `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '路由地址',
  14 + `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '#' COMMENT '菜单图标',
  15 + `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '组件路径',
  16 + `status` tinyint NOT NULL DEFAULT 0 COMMENT '菜单状态',
  17 + `visible` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否可见',
  18 + `keep_alive` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否缓存',
  19 + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
  20 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  21 + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
  22 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  23 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  24 + PRIMARY KEY (`id`) USING BTREE
  25 +) ENGINE = InnoDB AUTO_INCREMENT = 1268 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
  26 +
  27 +-- ----------------------------
  28 +-- Records of system_menu
  29 +-- ----------------------------
  30 +INSERT INTO `system_menu` VALUES (1, '系统管理', '', 1, 10, 0, '/system', 'ep:tools', NULL, 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 13:10:54', b'0');
  31 +INSERT INTO `system_menu` VALUES (2, '基础设施', '', 1, 20, 0, '/infra', 'ep:brush-filled', NULL, 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 13:11:55', b'0');
  32 +INSERT INTO `system_menu` VALUES (5, 'OA 示例', '', 1, 40, 1185, 'oa', 'ep:guide', NULL, 0, b'1', b'1', 'admin', '2021-09-20 16:26:19', '1', '2022-07-20 14:51:03', b'0');
  33 +INSERT INTO `system_menu` VALUES (100, '用户管理', 'system:user:list', 2, 1, 1, 'user', 'ep:avatar', 'system/user/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 13:13:17', b'0');
  34 +INSERT INTO `system_menu` VALUES (101, '角色管理', '', 2, 2, 1, 'role', 'ep:user-filled', 'system/role/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 13:13:41', b'0');
  35 +INSERT INTO `system_menu` VALUES (102, '菜单管理', '', 2, 3, 1, 'menu', 'ep:grid', 'system/menu/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 13:13:54', b'0');
  36 +INSERT INTO `system_menu` VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'ep:office-building', 'system/dept/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:51:31', b'0');
  37 +INSERT INTO `system_menu` VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'ep:briefcase', 'system/post/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:41:47', b'0');
  38 +INSERT INTO `system_menu` VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'ep:list', 'system/dict/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:42:18', b'0');
  39 +INSERT INTO `system_menu` VALUES (106, '配置管理', '', 2, 6, 2, 'config', 'ep:edit', 'infra/config/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:48:29', b'0');
  40 +INSERT INTO `system_menu` VALUES (107, '通知公告', '', 2, 8, 1, 'notice', 'ep:bell-filled', 'system/notice/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:42:30', b'0');
  41 +INSERT INTO `system_menu` VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'ep:document-checked', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:42:52', b'0');
  42 +INSERT INTO `system_menu` VALUES (109, '令牌管理', '', 2, 2, 1261, 'token', 'online', 'system/oauth2/token/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-11 23:31:42', b'0');
  43 +INSERT INTO `system_menu` VALUES (110, '定时任务', '', 2, 12, 2, 'job', 'ep:alarm-clock', 'infra/job/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:49:09', b'0');
  44 +INSERT INTO `system_menu` VALUES (111, 'MySQL 监控', '', 2, 9, 2, 'druid', 'ep:wind-power', 'infra/druid/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:50:06', b'0');
  45 +INSERT INTO `system_menu` VALUES (112, 'Java 监控', '', 2, 11, 2, 'admin-server', 'ep:opportunity', 'infra/server/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:49:42', b'0');
  46 +INSERT INTO `system_menu` VALUES (113, 'Redis 监控', '', 2, 10, 2, 'redis', 'ep:set-up', 'infra/redis/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:49:52', b'0');
  47 +INSERT INTO `system_menu` VALUES (114, '表单构建', 'infra:build:list', 2, 2, 2, 'build', 'ep:calendar', 'infra/build/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:47:29', b'0');
  48 +INSERT INTO `system_menu` VALUES (115, '代码生成', 'infra:codegen:query', 2, 1, 2, 'codegen', 'ep:connection', 'infra/codegen/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:46:41', b'0');
  49 +INSERT INTO `system_menu` VALUES (116, '系统接口', 'infra:swagger:list', 2, 3, 2, 'swagger', 'ep:operation', 'infra/swagger/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-07-20 14:47:41', b'0');
  50 +INSERT INTO `system_menu` VALUES (500, '操作日志', '', 2, 1, 108, 'operate-log', 'form', 'system/operatelog/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  51 +INSERT INTO `system_menu` VALUES (501, '登录日志', '', 2, 2, 108, 'login-log', 'logininfor', 'system/loginlog/index', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  52 +INSERT INTO `system_menu` VALUES (1001, '用户查询', 'system:user:query', 3, 1, 100, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  53 +INSERT INTO `system_menu` VALUES (1002, '用户新增', 'system:user:create', 3, 2, 100, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  54 +INSERT INTO `system_menu` VALUES (1003, '用户修改', 'system:user:update', 3, 3, 100, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  55 +INSERT INTO `system_menu` VALUES (1004, '用户删除', 'system:user:delete', 3, 4, 100, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  56 +INSERT INTO `system_menu` VALUES (1005, '用户导出', 'system:user:export', 3, 5, 100, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  57 +INSERT INTO `system_menu` VALUES (1006, '用户导入', 'system:user:import', 3, 6, 100, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  58 +INSERT INTO `system_menu` VALUES (1007, '重置密码', 'system:user:update-password', 3, 7, 100, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  59 +INSERT INTO `system_menu` VALUES (1008, '角色查询', 'system:role:query', 3, 1, 101, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  60 +INSERT INTO `system_menu` VALUES (1009, '角色新增', 'system:role:create', 3, 2, 101, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  61 +INSERT INTO `system_menu` VALUES (1010, '角色修改', 'system:role:update', 3, 3, 101, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  62 +INSERT INTO `system_menu` VALUES (1011, '角色删除', 'system:role:delete', 3, 4, 101, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  63 +INSERT INTO `system_menu` VALUES (1012, '角色导出', 'system:role:export', 3, 5, 101, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  64 +INSERT INTO `system_menu` VALUES (1013, '菜单查询', 'system:menu:query', 3, 1, 102, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  65 +INSERT INTO `system_menu` VALUES (1014, '菜单新增', 'system:menu:create', 3, 2, 102, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  66 +INSERT INTO `system_menu` VALUES (1015, '菜单修改', 'system:menu:update', 3, 3, 102, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  67 +INSERT INTO `system_menu` VALUES (1016, '菜单删除', 'system:menu:delete', 3, 4, 102, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  68 +INSERT INTO `system_menu` VALUES (1017, '部门查询', 'system:dept:query', 3, 1, 103, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  69 +INSERT INTO `system_menu` VALUES (1018, '部门新增', 'system:dept:create', 3, 2, 103, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  70 +INSERT INTO `system_menu` VALUES (1019, '部门修改', 'system:dept:update', 3, 3, 103, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  71 +INSERT INTO `system_menu` VALUES (1020, '部门删除', 'system:dept:delete', 3, 4, 103, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  72 +INSERT INTO `system_menu` VALUES (1021, '岗位查询', 'system:post:query', 3, 1, 104, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  73 +INSERT INTO `system_menu` VALUES (1022, '岗位新增', 'system:post:create', 3, 2, 104, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  74 +INSERT INTO `system_menu` VALUES (1023, '岗位修改', 'system:post:update', 3, 3, 104, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  75 +INSERT INTO `system_menu` VALUES (1024, '岗位删除', 'system:post:delete', 3, 4, 104, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  76 +INSERT INTO `system_menu` VALUES (1025, '岗位导出', 'system:post:export', 3, 5, 104, '', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  77 +INSERT INTO `system_menu` VALUES (1026, '字典查询', 'system:dict:query', 3, 1, 105, '#', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  78 +INSERT INTO `system_menu` VALUES (1027, '字典新增', 'system:dict:create', 3, 2, 105, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  79 +INSERT INTO `system_menu` VALUES (1028, '字典修改', 'system:dict:update', 3, 3, 105, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  80 +INSERT INTO `system_menu` VALUES (1029, '字典删除', 'system:dict:delete', 3, 4, 105, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  81 +INSERT INTO `system_menu` VALUES (1030, '字典导出', 'system:dict:export', 3, 5, 105, '#', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  82 +INSERT INTO `system_menu` VALUES (1031, '配置查询', 'infra:config:query', 3, 1, 106, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  83 +INSERT INTO `system_menu` VALUES (1032, '配置新增', 'infra:config:create', 3, 2, 106, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  84 +INSERT INTO `system_menu` VALUES (1033, '配置修改', 'infra:config:update', 3, 3, 106, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  85 +INSERT INTO `system_menu` VALUES (1034, '配置删除', 'infra:config:delete', 3, 4, 106, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  86 +INSERT INTO `system_menu` VALUES (1035, '配置导出', 'infra:config:export', 3, 5, 106, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  87 +INSERT INTO `system_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  88 +INSERT INTO `system_menu` VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  89 +INSERT INTO `system_menu` VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  90 +INSERT INTO `system_menu` VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  91 +INSERT INTO `system_menu` VALUES (1040, '操作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  92 +INSERT INTO `system_menu` VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  93 +INSERT INTO `system_menu` VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  94 +INSERT INTO `system_menu` VALUES (1045, '日志导出', 'system:login-log:export', 3, 3, 501, '#', '#', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  95 +INSERT INTO `system_menu` VALUES (1046, '令牌列表', 'system:oauth2-token:page', 3, 1, 109, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:42', b'0');
  96 +INSERT INTO `system_menu` VALUES (1048, '令牌删除', 'system:oauth2-token:delete', 3, 2, 109, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-05-09 23:54:53', b'0');
  97 +INSERT INTO `system_menu` VALUES (1050, '任务新增', 'infra:job:create', 3, 2, 110, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  98 +INSERT INTO `system_menu` VALUES (1051, '任务修改', 'infra:job:update', 3, 3, 110, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  99 +INSERT INTO `system_menu` VALUES (1052, '任务删除', 'infra:job:delete', 3, 4, 110, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  100 +INSERT INTO `system_menu` VALUES (1053, '状态修改', 'infra:job:update', 3, 5, 110, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  101 +INSERT INTO `system_menu` VALUES (1054, '任务导出', 'infra:job:export', 3, 7, 110, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0');
  102 +INSERT INTO `system_menu` VALUES (1056, '生成修改', 'infra:codegen:update', 3, 2, 115, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  103 +INSERT INTO `system_menu` VALUES (1057, '生成删除', 'infra:codegen:delete', 3, 3, 115, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  104 +INSERT INTO `system_menu` VALUES (1058, '导入代码', 'infra:codegen:create', 3, 2, 115, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  105 +INSERT INTO `system_menu` VALUES (1059, '预览代码', 'infra:codegen:preview', 3, 4, 115, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  106 +INSERT INTO `system_menu` VALUES (1060, '生成代码', 'infra:codegen:download', 3, 5, 115, '', '', '', 0, b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2022-04-20 17:03:10', b'0');
  107 +INSERT INTO `system_menu` VALUES (1063, '设置角色菜单权限', 'system:permission:assign-role-menu', 3, 6, 101, '', '', '', 0, b'1', b'1', '', '2021-01-06 17:53:44', '', '2022-04-20 17:03:10', b'0');
  108 +INSERT INTO `system_menu` VALUES (1064, '设置角色数据权限', 'system:permission:assign-role-data-scope', 3, 7, 101, '', '', '', 0, b'1', b'1', '', '2021-01-06 17:56:31', '', '2022-04-20 17:03:10', b'0');
  109 +INSERT INTO `system_menu` VALUES (1065, '设置用户角色', 'system:permission:assign-user-role', 3, 8, 101, '', '', '', 0, b'1', b'1', '', '2021-01-07 10:23:28', '', '2022-04-20 17:03:10', b'0');
  110 +INSERT INTO `system_menu` VALUES (1066, '获得 Redis 监控信息', 'infra:redis:get-monitor-info', 3, 1, 113, '', '', '', 0, b'1', b'1', '', '2021-01-26 01:02:31', '', '2022-04-20 17:03:10', b'0');
  111 +INSERT INTO `system_menu` VALUES (1067, '获得 Redis Key 列表', 'infra:redis:get-key-list', 3, 2, 113, '', '', '', 0, b'1', b'1', '', '2021-01-26 01:02:52', '', '2022-04-20 17:03:10', b'0');
  112 +INSERT INTO `system_menu` VALUES (1070, '代码生成示例', 'infra:test-demo:query', 2, 1, 2, 'test-demo', 'ep:baseball', 'infra/testDemo/index', 0, b'1', b'1', '', '2021-02-06 12:42:49', '1', '2022-07-20 14:46:53', b'0');
  113 +INSERT INTO `system_menu` VALUES (1071, '测试示例表创建', 'infra:test-demo:create', 3, 1, 1070, '', '', '', 0, b'1', b'1', '', '2021-02-06 12:42:49', '1', '2022-04-20 17:03:10', b'0');
  114 +INSERT INTO `system_menu` VALUES (1072, '测试示例表更新', 'infra:test-demo:update', 3, 2, 1070, '', '', '', 0, b'1', b'1', '', '2021-02-06 12:42:49', '1', '2022-04-20 17:03:10', b'0');
  115 +INSERT INTO `system_menu` VALUES (1073, '测试示例表删除', 'infra:test-demo:delete', 3, 3, 1070, '', '', '', 0, b'1', b'1', '', '2021-02-06 12:42:49', '1', '2022-04-20 17:03:10', b'0');
  116 +INSERT INTO `system_menu` VALUES (1074, '测试示例表导出', 'infra:test-demo:export', 3, 4, 1070, '', '', '', 0, b'1', b'1', '', '2021-02-06 12:42:49', '1', '2022-04-20 17:03:10', b'0');
  117 +INSERT INTO `system_menu` VALUES (1075, '任务触发', 'infra:job:trigger', 3, 8, 110, '', '', '', 0, b'1', b'1', '', '2021-02-07 13:03:10', '', '2022-04-20 17:03:10', b'0');
  118 +INSERT INTO `system_menu` VALUES (1076, '数据库文档', '', 2, 4, 2, 'db-doc', 'ep:grid', 'infra/dbDoc/index', 0, b'1', b'1', '', '2021-02-08 01:41:47', '1', '2022-07-20 14:47:56', b'0');
  119 +INSERT INTO `system_menu` VALUES (1077, '监控平台', '', 2, 13, 2, 'skywalking', 'ep:aim', 'infra/skywalking/index', 0, b'1', b'1', '', '2021-02-08 20:41:31', '1', '2022-07-20 14:49:15', b'0');
  120 +INSERT INTO `system_menu` VALUES (1078, '访问日志', '', 2, 1, 1083, 'api-access-log', 'log', 'infra/apiAccessLog/index', 0, b'1', b'1', '', '2021-02-26 01:32:59', '1', '2022-04-20 17:03:10', b'0');
  121 +INSERT INTO `system_menu` VALUES (1082, '日志导出', 'infra:api-access-log:export', 3, 2, 1078, '', '', '', 0, b'1', b'1', '', '2021-02-26 01:32:59', '1', '2022-04-20 17:03:10', b'0');
  122 +INSERT INTO `system_menu` VALUES (1083, 'API 日志', '', 2, 8, 2, 'log', 'ep:bell', NULL, 0, b'1', b'1', '', '2021-02-26 02:18:24', '1', '2022-07-20 14:48:36', b'0');
  123 +INSERT INTO `system_menu` VALUES (1084, '错误日志', 'infra:api-error-log:query', 2, 2, 1083, 'api-error-log', 'log', 'infra/apiErrorLog/index', 0, b'1', b'1', '', '2021-02-26 07:53:20', '', '2022-04-20 17:03:10', b'0');
  124 +INSERT INTO `system_menu` VALUES (1085, '日志处理', 'infra:api-error-log:update-status', 3, 2, 1084, '', '', '', 0, b'1', b'1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', b'0');
  125 +INSERT INTO `system_menu` VALUES (1086, '日志导出', 'infra:api-error-log:export', 3, 3, 1084, '', '', '', 0, b'1', b'1', '', '2021-02-26 07:53:20', '1', '2022-04-20 17:03:10', b'0');
  126 +INSERT INTO `system_menu` VALUES (1087, '任务查询', 'infra:job:query', 3, 1, 110, '', '', '', 0, b'1', b'1', '1', '2021-03-10 01:26:19', '1', '2022-04-20 17:03:10', b'0');
  127 +INSERT INTO `system_menu` VALUES (1088, '日志查询', 'infra:api-access-log:query', 3, 1, 1078, '', '', '', 0, b'1', b'1', '1', '2021-03-10 01:28:04', '1', '2022-04-20 17:03:10', b'0');
  128 +INSERT INTO `system_menu` VALUES (1089, '日志查询', 'infra:api-error-log:query', 3, 1, 1084, '', '', '', 0, b'1', b'1', '1', '2021-03-10 01:29:09', '1', '2022-04-20 17:03:10', b'0');
  129 +INSERT INTO `system_menu` VALUES (1090, '文件列表', '', 2, 5, 1243, 'file-list', 'upload', 'infra/fileList/index', 0, b'1', b'1', '', '2021-03-12 20:16:20', '1', '2022-07-20 12:10:47', b'0');
  130 +INSERT INTO `system_menu` VALUES (1091, '文件查询', 'infra:file:query', 3, 1, 1090, '', '', '', 0, b'1', b'1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', b'0');
  131 +INSERT INTO `system_menu` VALUES (1092, '文件删除', 'infra:file:delete', 3, 4, 1090, '', '', '', 0, b'1', b'1', '', '2021-03-12 20:16:20', '', '2022-04-20 17:03:10', b'0');
  132 +INSERT INTO `system_menu` VALUES (1093, '短信管理', '', 1, 11, 1, 'sms', 'ep:chat-dot-square', NULL, 0, b'1', b'1', '1', '2021-04-05 01:10:16', '1', '2022-07-20 14:43:32', b'0');
  133 +INSERT INTO `system_menu` VALUES (1094, '短信渠道', '', 2, 0, 1093, 'sms-channel', 'phone', 'system/sms/smsChannel', 0, b'1', b'1', '', '2021-04-01 11:07:15', '1', '2022-04-20 17:03:10', b'0');
  134 +INSERT INTO `system_menu` VALUES (1095, '短信渠道查询', 'system:sms-channel:query', 3, 1, 1094, '', '', '', 0, b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0');
  135 +INSERT INTO `system_menu` VALUES (1096, '短信渠道创建', 'system:sms-channel:create', 3, 2, 1094, '', '', '', 0, b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0');
  136 +INSERT INTO `system_menu` VALUES (1097, '短信渠道更新', 'system:sms-channel:update', 3, 3, 1094, '', '', '', 0, b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0');
  137 +INSERT INTO `system_menu` VALUES (1098, '短信渠道删除', 'system:sms-channel:delete', 3, 4, 1094, '', '', '', 0, b'1', b'1', '', '2021-04-01 11:07:15', '', '2022-04-20 17:03:10', b'0');
  138 +INSERT INTO `system_menu` VALUES (1100, '短信模板', '', 2, 1, 1093, 'sms-template', 'phone', 'system/sms/smsTemplate', 0, b'1', b'1', '', '2021-04-01 17:35:17', '1', '2022-04-20 17:03:10', b'0');
  139 +INSERT INTO `system_menu` VALUES (1101, '短信模板查询', 'system:sms-template:query', 3, 1, 1100, '', '', '', 0, b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0');
  140 +INSERT INTO `system_menu` VALUES (1102, '短信模板创建', 'system:sms-template:create', 3, 2, 1100, '', '', '', 0, b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0');
  141 +INSERT INTO `system_menu` VALUES (1103, '短信模板更新', 'system:sms-template:update', 3, 3, 1100, '', '', '', 0, b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0');
  142 +INSERT INTO `system_menu` VALUES (1104, '短信模板删除', 'system:sms-template:delete', 3, 4, 1100, '', '', '', 0, b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0');
  143 +INSERT INTO `system_menu` VALUES (1105, '短信模板导出', 'system:sms-template:export', 3, 5, 1100, '', '', '', 0, b'1', b'1', '', '2021-04-01 17:35:17', '', '2022-04-20 17:03:10', b'0');
  144 +INSERT INTO `system_menu` VALUES (1106, '发送测试短信', 'system:sms-template:send-sms', 3, 6, 1100, '', '', '', 0, b'1', b'1', '1', '2021-04-11 00:26:40', '1', '2022-04-20 17:03:10', b'0');
  145 +INSERT INTO `system_menu` VALUES (1107, '短信日志', '', 2, 2, 1093, 'sms-log', 'phone', 'system/sms/smsLog', 0, b'1', b'1', '', '2021-04-11 08:37:05', '1', '2022-04-20 17:03:10', b'0');
  146 +INSERT INTO `system_menu` VALUES (1108, '短信日志查询', 'system:sms-log:query', 3, 1, 1107, '', '', '', 0, b'1', b'1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', b'0');
  147 +INSERT INTO `system_menu` VALUES (1109, '短信日志导出', 'system:sms-log:export', 3, 5, 1107, '', '', '', 0, b'1', b'1', '', '2021-04-11 08:37:05', '', '2022-04-20 17:03:10', b'0');
  148 +INSERT INTO `system_menu` VALUES (1110, '错误码管理', '', 2, 12, 1, 'error-code', 'ep:document-delete', 'system/errorCode/index', 0, b'1', b'1', '', '2021-04-13 21:46:42', '1', '2022-07-20 14:43:42', b'0');
  149 +INSERT INTO `system_menu` VALUES (1111, '错误码查询', 'system:error-code:query', 3, 1, 1110, '', '', '', 0, b'1', b'1', '', '2021-04-13 21:46:42', '', '2022-04-20 17:03:10', b'0');
  150 +INSERT INTO `system_menu` VALUES (1112, '错误码创建', 'system:error-code:create', 3, 2, 1110, '', '', '', 0, b'1', b'1', '', '2021-04-13 21:46:42', '', '2022-04-20 17:03:10', b'0');
  151 +INSERT INTO `system_menu` VALUES (1113, '错误码更新', 'system:error-code:update', 3, 3, 1110, '', '', '', 0, b'1', b'1', '', '2021-04-13 21:46:42', '', '2022-04-20 17:03:10', b'0');
  152 +INSERT INTO `system_menu` VALUES (1114, '错误码删除', 'system:error-code:delete', 3, 4, 1110, '', '', '', 0, b'1', b'1', '', '2021-04-13 21:46:42', '', '2022-04-20 17:03:10', b'0');
  153 +INSERT INTO `system_menu` VALUES (1115, '错误码导出', 'system:error-code:export', 3, 5, 1110, '', '', '', 0, b'1', b'1', '', '2021-04-13 21:46:42', '', '2022-04-20 17:03:10', b'0');
  154 +INSERT INTO `system_menu` VALUES (1117, '支付管理', '', 1, 11, 0, '/pay', 'ep:goods-filled', NULL, 0, b'1', b'1', '1', '2021-12-25 16:43:41', '1', '2022-07-20 13:11:45', b'0');
  155 +INSERT INTO `system_menu` VALUES (1118, '请假查询', '', 2, 0, 5, 'leave', 'user', 'bpm/oa/leave/index', 0, b'1', b'1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', b'0');
  156 +INSERT INTO `system_menu` VALUES (1119, '请假申请查询', 'bpm:oa-leave:query', 3, 1, 1118, '', '', '', 0, b'1', b'1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', b'0');
  157 +INSERT INTO `system_menu` VALUES (1120, '请假申请创建', 'bpm:oa-leave:create', 3, 2, 1118, '', '', '', 0, b'1', b'1', '', '2021-09-20 08:51:03', '1', '2022-04-20 17:03:10', b'0');
  158 +INSERT INTO `system_menu` VALUES (1126, '应用信息', '', 2, 1, 1117, 'app', 'ep:cellphone', 'pay/app/index', 0, b'1', b'1', '', '2021-11-10 01:13:30', '1', '2022-07-20 14:44:17', b'0');
  159 +INSERT INTO `system_menu` VALUES (1127, '支付应用信息查询', 'pay:app:query', 3, 1, 1126, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0');
  160 +INSERT INTO `system_menu` VALUES (1128, '支付应用信息创建', 'pay:app:create', 3, 2, 1126, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0');
  161 +INSERT INTO `system_menu` VALUES (1129, '支付应用信息更新', 'pay:app:update', 3, 3, 1126, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0');
  162 +INSERT INTO `system_menu` VALUES (1130, '支付应用信息删除', 'pay:app:delete', 3, 4, 1126, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0');
  163 +INSERT INTO `system_menu` VALUES (1131, '支付应用信息导出', 'pay:app:export', 3, 5, 1126, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:31', '', '2022-04-20 17:03:10', b'0');
  164 +INSERT INTO `system_menu` VALUES (1132, '秘钥解析', 'pay:channel:parsing', 3, 6, 1129, '', '', '', 0, b'1', b'1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', b'0');
  165 +INSERT INTO `system_menu` VALUES (1133, '支付商户信息查询', 'pay:merchant:query', 3, 1, 1132, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0');
  166 +INSERT INTO `system_menu` VALUES (1134, '支付商户信息创建', 'pay:merchant:create', 3, 2, 1132, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0');
  167 +INSERT INTO `system_menu` VALUES (1135, '支付商户信息更新', 'pay:merchant:update', 3, 3, 1132, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0');
  168 +INSERT INTO `system_menu` VALUES (1136, '支付商户信息删除', 'pay:merchant:delete', 3, 4, 1132, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0');
  169 +INSERT INTO `system_menu` VALUES (1137, '支付商户信息导出', 'pay:merchant:export', 3, 5, 1132, '', '', '', 0, b'1', b'1', '', '2021-11-10 01:13:41', '', '2022-04-20 17:03:10', b'0');
  170 +INSERT INTO `system_menu` VALUES (1138, '租户列表', '', 2, 0, 1224, 'list', 'peoples', 'system/tenant/index', 0, b'1', b'1', '', '2021-12-14 12:31:43', '1', '2022-04-20 17:03:10', b'0');
  171 +INSERT INTO `system_menu` VALUES (1139, '租户查询', 'system:tenant:query', 3, 1, 1138, '', '', '', 0, b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0');
  172 +INSERT INTO `system_menu` VALUES (1140, '租户创建', 'system:tenant:create', 3, 2, 1138, '', '', '', 0, b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0');
  173 +INSERT INTO `system_menu` VALUES (1141, '租户更新', 'system:tenant:update', 3, 3, 1138, '', '', '', 0, b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0');
  174 +INSERT INTO `system_menu` VALUES (1142, '租户删除', 'system:tenant:delete', 3, 4, 1138, '', '', '', 0, b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0');
  175 +INSERT INTO `system_menu` VALUES (1143, '租户导出', 'system:tenant:export', 3, 5, 1138, '', '', '', 0, b'1', b'1', '', '2021-12-14 12:31:44', '', '2022-04-20 17:03:10', b'0');
  176 +INSERT INTO `system_menu` VALUES (1150, '秘钥解析', '', 3, 6, 1129, '', '', '', 0, b'1', b'1', '1', '2021-11-08 15:15:47', '1', '2022-04-20 17:03:10', b'0');
  177 +INSERT INTO `system_menu` VALUES (1161, '退款订单', '', 2, 3, 1117, 'refund', 'ep:message-box', 'pay/refund/index', 0, b'1', b'1', '', '2021-12-25 08:29:07', '1', '2022-07-20 14:45:23', b'0');
  178 +INSERT INTO `system_menu` VALUES (1162, '退款订单查询', 'pay:refund:query', 3, 1, 1161, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0');
  179 +INSERT INTO `system_menu` VALUES (1163, '退款订单创建', 'pay:refund:create', 3, 2, 1161, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0');
  180 +INSERT INTO `system_menu` VALUES (1164, '退款订单更新', 'pay:refund:update', 3, 3, 1161, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0');
  181 +INSERT INTO `system_menu` VALUES (1165, '退款订单删除', 'pay:refund:delete', 3, 4, 1161, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0');
  182 +INSERT INTO `system_menu` VALUES (1166, '退款订单导出', 'pay:refund:export', 3, 5, 1161, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:29:07', '', '2022-04-20 17:03:10', b'0');
  183 +INSERT INTO `system_menu` VALUES (1173, '支付订单', '', 2, 2, 1117, 'order', 'ep:histogram', 'pay/order/index', 0, b'1', b'1', '', '2021-12-25 08:49:43', '1', '2022-07-20 14:44:36', b'0');
  184 +INSERT INTO `system_menu` VALUES (1174, '支付订单查询', 'pay:order:query', 3, 1, 1173, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0');
  185 +INSERT INTO `system_menu` VALUES (1175, '支付订单创建', 'pay:order:create', 3, 2, 1173, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0');
  186 +INSERT INTO `system_menu` VALUES (1176, '支付订单更新', 'pay:order:update', 3, 3, 1173, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0');
  187 +INSERT INTO `system_menu` VALUES (1177, '支付订单删除', 'pay:order:delete', 3, 4, 1173, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0');
  188 +INSERT INTO `system_menu` VALUES (1178, '支付订单导出', 'pay:order:export', 3, 5, 1173, '', '', '', 0, b'1', b'1', '', '2021-12-25 08:49:43', '', '2022-04-20 17:03:10', b'0');
  189 +INSERT INTO `system_menu` VALUES (1179, '商户信息', '', 2, 0, 1117, 'merchant', 'ep:goods', 'pay/merchant/index', 0, b'1', b'1', '', '2021-12-25 09:01:44', '1', '2022-07-20 14:44:58', b'0');
  190 +INSERT INTO `system_menu` VALUES (1180, '支付商户信息查询', 'pay:merchant:query', 3, 1, 1179, '', '', '', 0, b'1', b'1', '', '2021-12-25 09:01:44', '', '2022-04-20 17:03:10', b'0');
  191 +INSERT INTO `system_menu` VALUES (1181, '支付商户信息创建', 'pay:merchant:create', 3, 2, 1179, '', '', '', 0, b'1', b'1', '', '2021-12-25 09:01:44', '', '2022-04-20 17:03:10', b'0');
  192 +INSERT INTO `system_menu` VALUES (1182, '支付商户信息更新', 'pay:merchant:update', 3, 3, 1179, '', '', '', 0, b'1', b'1', '', '2021-12-25 09:01:44', '', '2022-04-20 17:03:10', b'0');
  193 +INSERT INTO `system_menu` VALUES (1183, '支付商户信息删除', '', 3, 4, 1179, '', '', '', 0, b'1', b'1', '', '2021-12-25 09:01:44', '', '2022-04-20 17:03:10', b'0');
  194 +INSERT INTO `system_menu` VALUES (1184, '支付商户信息导出', 'pay:merchant:export', 3, 5, 1179, '', '', '', 0, b'1', b'1', '', '2021-12-25 09:01:44', '', '2022-04-20 17:03:10', b'0');
  195 +INSERT INTO `system_menu` VALUES (1185, '工作流程', '', 1, 50, 0, '/bpm', 'ep:checked', NULL, 0, b'1', b'1', '1', '2021-12-30 20:26:36', '1', '2022-07-20 13:12:35', b'0');
  196 +INSERT INTO `system_menu` VALUES (1186, '流程管理', '', 1, 10, 1185, 'manager', 'ep:collection-tag', NULL, 0, b'1', b'1', '1', '2021-12-30 20:28:30', '1', '2022-07-20 14:50:31', b'0');
  197 +INSERT INTO `system_menu` VALUES (1187, '流程表单', '', 2, 0, 1186, 'form', 'form', 'bpm/form/index', 0, b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0');
  198 +INSERT INTO `system_menu` VALUES (1188, '表单查询', 'bpm:form:query', 3, 1, 1187, '', '', '', 0, b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0');
  199 +INSERT INTO `system_menu` VALUES (1189, '表单创建', 'bpm:form:create', 3, 2, 1187, '', '', '', 0, b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0');
  200 +INSERT INTO `system_menu` VALUES (1190, '表单更新', 'bpm:form:update', 3, 3, 1187, '', '', '', 0, b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0');
  201 +INSERT INTO `system_menu` VALUES (1191, '表单删除', 'bpm:form:delete', 3, 4, 1187, '', '', '', 0, b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0');
  202 +INSERT INTO `system_menu` VALUES (1192, '表单导出', 'bpm:form:export', 3, 5, 1187, '', '', '', 0, b'1', b'1', '', '2021-12-30 12:38:22', '1', '2022-04-20 17:03:10', b'0');
  203 +INSERT INTO `system_menu` VALUES (1193, '流程模型', '', 2, 5, 1186, 'model', 'guide', 'bpm/model/index', 0, b'1', b'1', '1', '2021-12-31 23:24:58', '103', '2022-04-20 17:03:10', b'0');
  204 +INSERT INTO `system_menu` VALUES (1194, '模型查询', 'bpm:model:query', 3, 1, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-03 19:01:10', '1', '2022-04-20 17:03:10', b'0');
  205 +INSERT INTO `system_menu` VALUES (1195, '模型创建', 'bpm:model:create', 3, 2, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-03 19:01:24', '1', '2022-04-20 17:03:10', b'0');
  206 +INSERT INTO `system_menu` VALUES (1196, '模型导入', 'bpm:model:import', 3, 3, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-03 19:01:35', '1', '2022-04-20 17:03:10', b'0');
  207 +INSERT INTO `system_menu` VALUES (1197, '模型更新', 'bpm:model:update', 3, 4, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-03 19:02:28', '1', '2022-04-20 17:03:10', b'0');
  208 +INSERT INTO `system_menu` VALUES (1198, '模型删除', 'bpm:model:delete', 3, 5, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-03 19:02:43', '1', '2022-04-20 17:03:10', b'0');
  209 +INSERT INTO `system_menu` VALUES (1199, '模型发布', 'bpm:model:deploy', 3, 6, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-03 19:03:24', '1', '2022-04-20 17:03:10', b'0');
  210 +INSERT INTO `system_menu` VALUES (1200, '任务管理', '', 1, 20, 1185, 'task', 'ep:calendar', NULL, 0, b'1', b'1', '1', '2022-01-07 23:51:48', '1', '2022-07-20 14:50:40', b'0');
  211 +INSERT INTO `system_menu` VALUES (1201, '我的流程', '', 2, 0, 1200, 'my', 'people', 'bpm/processInstance/index', 0, b'1', b'1', '', '2022-01-07 15:53:44', '1', '2022-04-20 17:03:10', b'0');
  212 +INSERT INTO `system_menu` VALUES (1202, '流程实例的查询', 'bpm:process-instance:query', 3, 1, 1201, '', '', '', 0, b'1', b'1', '', '2022-01-07 15:53:44', '1', '2022-04-20 17:03:10', b'0');
  213 +INSERT INTO `system_menu` VALUES (1207, '待办任务', '', 2, 10, 1200, 'todo', 'eye-open', 'bpm/task/todo', 0, b'1', b'1', '1', '2022-01-08 10:33:37', '1', '2022-04-20 17:03:10', b'0');
  214 +INSERT INTO `system_menu` VALUES (1208, '已办任务', '', 2, 20, 1200, 'done', 'eye', 'bpm/task/done', 0, b'1', b'1', '1', '2022-01-08 10:34:13', '1', '2022-04-20 17:03:10', b'0');
  215 +INSERT INTO `system_menu` VALUES (1209, '用户分组', '', 2, 2, 1186, 'user-group', 'people', 'bpm/group/index', 0, b'1', b'1', '', '2022-01-14 02:14:20', '103', '2022-04-20 17:03:10', b'0');
  216 +INSERT INTO `system_menu` VALUES (1210, '用户组查询', 'bpm:user-group:query', 3, 1, 1209, '', '', '', 0, b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0');
  217 +INSERT INTO `system_menu` VALUES (1211, '用户组创建', 'bpm:user-group:create', 3, 2, 1209, '', '', '', 0, b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0');
  218 +INSERT INTO `system_menu` VALUES (1212, '用户组更新', 'bpm:user-group:update', 3, 3, 1209, '', '', '', 0, b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0');
  219 +INSERT INTO `system_menu` VALUES (1213, '用户组删除', 'bpm:user-group:delete', 3, 4, 1209, '', '', '', 0, b'1', b'1', '', '2022-01-14 02:14:20', '', '2022-04-20 17:03:10', b'0');
  220 +INSERT INTO `system_menu` VALUES (1215, '流程定义查询', 'bpm:process-definition:query', 3, 10, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:21:43', '1', '2022-04-20 17:03:10', b'0');
  221 +INSERT INTO `system_menu` VALUES (1216, '流程任务分配规则查询', 'bpm:task-assign-rule:query', 3, 20, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:26:53', '1', '2022-04-20 17:03:10', b'0');
  222 +INSERT INTO `system_menu` VALUES (1217, '流程任务分配规则创建', 'bpm:task-assign-rule:create', 3, 21, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:28:15', '1', '2022-04-20 17:03:10', b'0');
  223 +INSERT INTO `system_menu` VALUES (1218, '流程任务分配规则更新', 'bpm:task-assign-rule:update', 3, 22, 1193, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:28:41', '1', '2022-04-20 17:03:10', b'0');
  224 +INSERT INTO `system_menu` VALUES (1219, '流程实例的创建', 'bpm:process-instance:create', 3, 2, 1201, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:36:15', '1', '2022-04-20 17:03:10', b'0');
  225 +INSERT INTO `system_menu` VALUES (1220, '流程实例的取消', 'bpm:process-instance:cancel', 3, 3, 1201, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:36:33', '1', '2022-04-20 17:03:10', b'0');
  226 +INSERT INTO `system_menu` VALUES (1221, '流程任务的查询', 'bpm:task:query', 3, 1, 1207, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:38:52', '1', '2022-04-20 17:03:10', b'0');
  227 +INSERT INTO `system_menu` VALUES (1222, '流程任务的更新', 'bpm:task:update', 3, 2, 1207, '', '', '', 0, b'1', b'1', '1', '2022-01-23 00:39:24', '1', '2022-04-20 17:03:10', b'0');
  228 +INSERT INTO `system_menu` VALUES (1224, '租户管理', '', 2, 0, 1, 'tenant', 'ep:cherry', NULL, 0, b'1', b'1', '1', '2022-02-20 01:41:13', '1', '2022-07-20 14:51:46', b'0');
  229 +INSERT INTO `system_menu` VALUES (1225, '租户套餐', '', 2, 0, 1224, 'package', 'eye', 'system/tenantPackage/index', 0, b'1', b'1', '', '2022-02-19 17:44:06', '1', '2022-04-21 01:21:25', b'0');
  230 +INSERT INTO `system_menu` VALUES (1226, '租户套餐查询', 'system:tenant-package:query', 3, 1, 1225, '', '', '', 0, b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0');
  231 +INSERT INTO `system_menu` VALUES (1227, '租户套餐创建', 'system:tenant-package:create', 3, 2, 1225, '', '', '', 0, b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0');
  232 +INSERT INTO `system_menu` VALUES (1228, '租户套餐更新', 'system:tenant-package:update', 3, 3, 1225, '', '', '', 0, b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0');
  233 +INSERT INTO `system_menu` VALUES (1229, '租户套餐删除', 'system:tenant-package:delete', 3, 4, 1225, '', '', '', 0, b'1', b'1', '', '2022-02-19 17:44:06', '', '2022-04-20 17:03:10', b'0');
  234 +INSERT INTO `system_menu` VALUES (1237, '文件配置', '', 2, 0, 1243, 'file-config', 'config', 'infra/fileConfig/index', 0, b'1', b'1', '', '2022-03-15 14:35:28', '1', '2022-04-20 17:03:10', b'0');
  235 +INSERT INTO `system_menu` VALUES (1238, '文件配置查询', 'infra:file-config:query', 3, 1, 1237, '', '', '', 0, b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0');
  236 +INSERT INTO `system_menu` VALUES (1239, '文件配置创建', 'infra:file-config:create', 3, 2, 1237, '', '', '', 0, b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0');
  237 +INSERT INTO `system_menu` VALUES (1240, '文件配置更新', 'infra:file-config:update', 3, 3, 1237, '', '', '', 0, b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0');
  238 +INSERT INTO `system_menu` VALUES (1241, '文件配置删除', 'infra:file-config:delete', 3, 4, 1237, '', '', '', 0, b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0');
  239 +INSERT INTO `system_menu` VALUES (1242, '文件配置导出', 'infra:file-config:export', 3, 5, 1237, '', '', '', 0, b'1', b'1', '', '2022-03-15 14:35:28', '', '2022-04-20 17:03:10', b'0');
  240 +INSERT INTO `system_menu` VALUES (1243, '文件管理', '', 2, 5, 2, 'file', 'ep:folder-opened', NULL, 0, b'1', b'1', '1', '2022-03-16 23:47:40', '1', '2022-07-20 14:48:19', b'0');
  241 +INSERT INTO `system_menu` VALUES (1247, '敏感词管理', '', 2, 13, 1, 'sensitive-word', 'ep:document-copy', 'system/sensitiveWord/index', 0, b'1', b'1', '', '2022-04-07 16:55:03', '1', '2022-07-20 14:43:53', b'0');
  242 +INSERT INTO `system_menu` VALUES (1248, '敏感词查询', 'system:sensitive-word:query', 3, 1, 1247, '', '', '', 0, b'1', b'1', '', '2022-04-07 16:55:03', '', '2022-04-20 17:03:10', b'0');
  243 +INSERT INTO `system_menu` VALUES (1249, '敏感词创建', 'system:sensitive-word:create', 3, 2, 1247, '', '', '', 0, b'1', b'1', '', '2022-04-07 16:55:03', '', '2022-04-20 17:03:10', b'0');
  244 +INSERT INTO `system_menu` VALUES (1250, '敏感词更新', 'system:sensitive-word:update', 3, 3, 1247, '', '', '', 0, b'1', b'1', '', '2022-04-07 16:55:03', '', '2022-04-20 17:03:10', b'0');
  245 +INSERT INTO `system_menu` VALUES (1251, '敏感词删除', 'system:sensitive-word:delete', 3, 4, 1247, '', '', '', 0, b'1', b'1', '', '2022-04-07 16:55:03', '', '2022-04-20 17:03:10', b'0');
  246 +INSERT INTO `system_menu` VALUES (1252, '敏感词导出', 'system:sensitive-word:export', 3, 5, 1247, '', '', '', 0, b'1', b'1', '', '2022-04-07 16:55:03', '', '2022-04-20 17:03:10', b'0');
  247 +INSERT INTO `system_menu` VALUES (1254, '作者动态', '', 1, 0, 0, 'https://www.iocoder.cn', 'ep:bell-filled', NULL, 0, b'1', b'1', '1', '2022-04-23 01:03:15', '1', '2022-07-20 13:12:43', b'0');
  248 +INSERT INTO `system_menu` VALUES (1255, '数据源配置', '', 2, 1, 2, 'data-source-config', 'ep:coin', 'infra/dataSourceConfig/index', 0, b'1', b'1', '', '2022-04-27 14:37:32', '1', '2022-07-20 14:49:01', b'0');
  249 +INSERT INTO `system_menu` VALUES (1256, '数据源配置查询', 'infra:data-source-config:query', 3, 1, 1255, '', '', '', 0, b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0');
  250 +INSERT INTO `system_menu` VALUES (1257, '数据源配置创建', 'infra:data-source-config:create', 3, 2, 1255, '', '', '', 0, b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0');
  251 +INSERT INTO `system_menu` VALUES (1258, '数据源配置更新', 'infra:data-source-config:update', 3, 3, 1255, '', '', '', 0, b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0');
  252 +INSERT INTO `system_menu` VALUES (1259, '数据源配置删除', 'infra:data-source-config:delete', 3, 4, 1255, '', '', '', 0, b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0');
  253 +INSERT INTO `system_menu` VALUES (1260, '数据源配置导出', 'infra:data-source-config:export', 3, 5, 1255, '', '', '', 0, b'1', b'1', '', '2022-04-27 14:37:32', '', '2022-04-27 14:37:32', b'0');
  254 +INSERT INTO `system_menu` VALUES (1261, '授权管理', '', 1, 10, 1, 'oauth2', 'ep:connection', NULL, 0, b'1', b'1', '1', '2022-05-09 23:38:17', '1', '2022-07-20 14:43:23', b'0');
  255 +INSERT INTO `system_menu` VALUES (1263, '应用管理', '', 2, 0, 1261, 'oauth2/application', 'tool', 'system/oauth2/client/index', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 23:31:36', b'0');
  256 +INSERT INTO `system_menu` VALUES (1264, '客户端查询', 'system:oauth2-client:query', 3, 1, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:06', b'0');
  257 +INSERT INTO `system_menu` VALUES (1265, '客户端创建', 'system:oauth2-client:create', 3, 2, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:23', b'0');
  258 +INSERT INTO `system_menu` VALUES (1266, '客户端更新', 'system:oauth2-client:update', 3, 3, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:28', b'0');
  259 +INSERT INTO `system_menu` VALUES (1267, '客户端删除', 'system:oauth2-client:delete', 3, 4, 1263, '', '', '', 0, b'1', b'1', '', '2022-05-10 16:26:33', '1', '2022-05-11 00:31:33', b'0');
  260 +
  261 +SET FOREIGN_KEY_CHECKS = 1;
... ...
yudao-ui-admin-vue3/README.md
... ... @@ -7,7 +7,7 @@
7 7 ## 注意事项
8 8  
9 9 - 项目路径请不要使用中文命名!!!会造成解析乱码!!!请使用全英文路径!!!
10   -- node >=14.18.0(建议使用16版本) ,pnpm >=7
  10 +- node >=14.18.0(建议使用 16 版本) ,pnpm >=7
11 11 - 开发建议使用 [谷歌浏览器-开发者版](https://www.google.cn/intl/zh-CN/chrome/dev/) 不支持 IE\QQ 等浏览器
12 12  
13 13 ### 前端依赖
... ... @@ -15,7 +15,7 @@
15 15 | 框架 | 说明 | 版本 |
16 16 | --- | --- | --- |
17 17 | [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.37 |
18   -| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 3.0.1 |
  18 +| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 3.0.2 |
19 19 | [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.9 |
20 20 | [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.7.4 |
21 21 | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.16 |
... ... @@ -24,9 +24,7 @@
24 24 | [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.2 |
25 25 | [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
26 26 | [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 2.2.1 |
27   -| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.11 |
28   -
29   -## 用法
  27 +| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.10 |
30 28  
31 29 ### 推荐 VScode 开发,插件如下
32 30  
... ... @@ -42,44 +40,58 @@
42 40  
43 41 ### 安装 pnpm 并启动项目
44 42  
45   -```
46   -# 查看当前 npm 源
  43 +- 查看当前 npm 源
47 44  
  45 +```bash
48 46 npm config ls
  47 +```
49 48  
50   -# 如果执行上面命令您并未看到 registry = "https://registry.npmjs.org/",说明使用的非npm官方源,请执行下面命令
  49 +- 如果执行上面命令您并未看到 registry = "https://registry.npmjs.org/",说明使用的非npm官方源,请执行下面命令
51 50  
  51 +```bash
52 52 npm config set registry https://registry.npmjs.org
  53 +```
53 54  
54   -# 如果您还没安装 pnpm,请执行下面命令
  55 +- 如果您还没安装 pnpm,请执行下面命令
55 56  
  57 +```bash
56 58 npm install -g pnpm
  59 +```
57 60  
58   -# mac 用户遇到安装报错请在命令前加上 sudo
  61 +- mac 用户遇到安装报错请在命令前加上 sudo
59 62  
60   -# 安装依赖
  63 +- 安装依赖
61 64  
  65 +```bash
62 66 pnpm install
  67 +```
63 68  
64   -# 运行项目
  69 +- 运行项目
65 70  
  71 +```bash
66 72 pnpm run dev
  73 +```
67 74  
68   -# 打包
  75 +- 打包
69 76  
  77 +```bash
70 78 pnpm run build:pro
  79 +```
71 80  
72   -# 安装一个包
  81 +- 安装一个包
73 82  
  83 +```bash
74 84 pnpm add 包名
  85 +```
75 86  
76   -# 卸载一个包
  87 +- 卸载一个包
77 88  
  89 +```bash
78 90 pnpm remove 包名
79   -
80   -# 其他命令请看package.json
81 91 ```
82 92  
  93 +- 其他命令请看 package.json
  94 +
83 95 ## 浏览器支持
84 96  
85 97 本地开发推荐使用 `Chrome 80+` 浏览器
... ...
yudao-ui-admin-vue3/package.json
... ... @@ -32,7 +32,7 @@
32 32 "@zxcvbn-ts/core": "^2.0.3",
33 33 "animate.css": "^4.1.1",
34 34 "axios": "^0.27.2",
35   - "dayjs": "^1.11.3",
  35 + "dayjs": "^1.11.4",
36 36 "echarts": "^5.3.3",
37 37 "echarts-wordcloud": "^2.0.0",
38 38 "element-plus": "2.2.9",
... ... @@ -93,13 +93,14 @@
93 93 "typescript": "4.7.4",
94 94 "unplugin-vue-define-options": "^0.6.2",
95 95 "vite": "3.0.2",
  96 + "vite-plugin-compression": "^0.5.1",
96 97 "vite-plugin-eslint": "^1.7.0",
97 98 "vite-plugin-html": "^3.2.0",
98 99 "vite-plugin-purge-icons": "^0.8.1",
99 100 "vite-plugin-style-import": "^1.4.1",
100 101 "vite-plugin-svg-icons": "^2.0.1",
101 102 "vite-plugin-windicss": "^1.8.7",
102   - "vue-tsc": "^0.38.8",
  103 + "vue-tsc": "^0.38.9",
103 104 "windicss": "^3.5.6",
104 105 "windicss-analysis": "^0.3.5"
105 106 },
... ...
yudao-ui-admin-vue3/src/api/infra/file/index.ts renamed to yudao-ui-admin-vue3/src/api/infra/fileList/index.ts
yudao-ui-admin-vue3/src/api/infra/file/types.ts renamed to yudao-ui-admin-vue3/src/api/infra/fileList/types.ts
yudao-ui-admin-vue3/src/api/infra/redis/types.ts
... ... @@ -182,4 +182,4 @@ export interface RedisKeyInfo {
182 182 timeoutType: number
183 183 timeout: number
184 184 memo: string
185   -}
186 185 \ No newline at end of file
  186 +}
... ...
yudao-ui-admin-vue3/src/components/Editor/src/Editor.vue
... ... @@ -6,6 +6,7 @@ import { propTypes } from '@/utils/propTypes'
6 6 import { isNumber } from '@/utils/is'
7 7 import { ElMessage } from 'element-plus'
8 8 import { useLocaleStore } from '@/store/modules/locale'
  9 +import { getAccessToken, getTenantId } from '@/utils/auth'
9 10  
10 11 const localeStore = useLocaleStore()
11 12  
... ... @@ -80,12 +81,40 @@ const editorConfig = computed((): IEditorConfig => {
80 81 },
81 82 autoFocus: false,
82 83 scroll: true,
  84 + MENU_CONF: {
  85 + ['uploadImage']: {
  86 + server: import.meta.env.VITE_UPLOAD_URL,
  87 + // 单个文件的最大体积限制,默认为 2M
  88 + maxFileSize: 2 * 1024 * 1024,
  89 + // 最多可上传几个文件,默认为 100
  90 + maxNumberOfFiles: 10,
  91 + // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []
  92 + allowedFileTypes: ['image/*'],
  93 +
  94 + // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。
  95 + meta: {},
  96 + // 将 meta 拼接到 url 参数中,默认 false
  97 + metaWithUrl: false,
  98 +
  99 + // 自定义增加 http header
  100 + headers: {
  101 + Accept: 'image/*',
  102 + Authorization: 'Bearer ' + getAccessToken(),
  103 + 'tenant-id': getTenantId()
  104 + },
  105 +
  106 + // 跨域是否传递 cookie ,默认为 false
  107 + withCredentials: false,
  108 +
  109 + // 超时时间,默认为 10 秒
  110 + timeout: 5 * 1000 // 5 秒
  111 + }
  112 + },
83 113 uploadImgShowBase64: true
84 114 },
85 115 props.editorConfig || {}
86 116 )
87 117 })
88   -
89 118 const editorStyle = computed(() => {
90 119 return {
91 120 height: isNumber(props.height) ? `${props.height}px` : props.height
... ...
yudao-ui-admin-vue3/src/components/Table/src/Table.vue
... ... @@ -297,6 +297,10 @@ export default defineComponent({
297 297 <style lang="less" scoped>
298 298 :deep(.el-button.is-text) {
299 299 margin-left: 0;
300   - padding: 8px 10px;
  300 + padding: 8px 4px;
  301 +}
  302 +:deep(.el-button.is-link) {
  303 + margin-left: 0;
  304 + padding: 8px 4px;
301 305 }
302 306 </style>
... ...
yudao-ui-admin-vue3/src/components/TagsView/src/TagsView.vue
... ... @@ -455,7 +455,7 @@ watch(
455 455 class="w-[var(--tags-view-height)] h-[var(--tags-view-height)] text-center leading-[var(--tags-view-height)] cursor-pointer block"
456 456 >
457 457 <Icon
458   - icon="ep:setting"
  458 + icon="ep:menu"
459 459 :color="appStore.getIsDark ? 'var(--el-text-color-regular)' : '#333'"
460 460 />
461 461 </span>
... ...
yudao-ui-admin-vue3/src/components/UserInfo/src/UserInfo.vue
... ... @@ -7,6 +7,7 @@ import { resetRouter } from &#39;@/router&#39;
7 7 import { useRouter } from 'vue-router'
8 8 import { useDesign } from '@/hooks/web/useDesign'
9 9 import { useTagsViewStore } from '@/store/modules/tagsView'
  10 +import avatarImg from '@/assets/imgs/avatar.gif'
10 11  
11 12 const tagsViewStore = useTagsViewStore()
12 13  
... ... @@ -22,9 +23,9 @@ const { push, replace } = useRouter()
22 23  
23 24 const user = wsCache.get('user')
24 25  
25   -const avatar = user?.user?.avatar ? user.user.avatar : '@/assets/imgs/avatar.gif'
  26 +const avatar = user.user.avatar ? user.user.avatar : avatarImg
26 27  
27   -const userName = user?.user?.nickname ? user.user.nickname : 'Admin'
  28 +const userName = user.user.nickname ? user.user.nickname : 'Admin'
28 29  
29 30 const loginOut = () => {
30 31 ElMessageBox.confirm(t('common.loginOutMessage'), t('common.reminder'), {
... ...
yudao-ui-admin-vue3/src/config/axios/index.ts
... ... @@ -4,6 +4,8 @@ import qs from &#39;qs&#39;
4 4 import { config } from '@/config/axios/config'
5 5 import { getAccessToken, getRefreshToken, getTenantId } from '@/utils/auth'
6 6 import errorCode from './errorCode'
  7 +import { useI18n } from '@/hooks/web/useI18n'
  8 +const { t } = useI18n()
7 9  
8 10 const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE
9 11 const BASE_URL = import.meta.env.VITE_BASE_URL
... ... @@ -18,8 +20,11 @@ const ignoreMsgs = [
18 20 // 是否显示重新登录
19 21 export const isRelogin = { show: false }
20 22 // Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现
  23 +// 请求队列
  24 +// const requestList = []
21 25 // 是否正在刷新中
22 26 let isRefreshToken = false
  27 +
23 28 export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH]
24 29  
25 30 // 创建axios实例
... ... @@ -95,13 +100,17 @@ service.interceptors.response.use(
95 100 if (!getRefreshToken()) {
96 101 return handleAuthorized()
97 102 }
  103 + // 2. 进行刷新访问令牌
  104 + // TODO: 引入refreshToken会循环依赖报错
98 105 }
99 106 } else if (code === 500) {
100   - ElMessage.error(msg)
  107 + ElMessage.error(t('sys.api.errMsg500'))
101 108 return Promise.reject(new Error(msg))
102 109 } else if (code === 901) {
103 110 ElMessage.error(
104   - '<div>演示模式,无法进行写操作</div>' +
  111 + '<div>' +
  112 + t('sys.api.errMsg901') +
  113 + '</div>' +
105 114 '<div> &nbsp; </div>' +
106 115 '<div>参考 https://doc.iocoder.cn/ 教程</div>' +
107 116 '<div> &nbsp; </div>' +
... ... @@ -124,16 +133,24 @@ service.interceptors.response.use(
124 133 },
125 134 (error: AxiosError) => {
126 135 console.log('err' + error) // for debug
127   - ElMessage.error(error.message)
  136 + let { message } = error
  137 + if (message === 'Network Error') {
  138 + message = t('sys.api.errorMessage')
  139 + } else if (message.includes('timeout')) {
  140 + message = t('sys.api.apiTimeoutMessage')
  141 + } else if (message.includes('Request failed with status code')) {
  142 + message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
  143 + }
  144 + ElMessage.error(message)
128 145 return Promise.reject(error)
129 146 }
130 147 )
131 148 function handleAuthorized() {
132 149 if (!isRelogin.show) {
133 150 isRelogin.show = true
134   - ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
135   - confirmButtonText: '重新登录',
136   - cancelButtonText: '取消',
  151 + ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), {
  152 + confirmButtonText: t('login.relogin'),
  153 + cancelButtonText: t('common.cancel'),
137 154 type: 'warning'
138 155 })
139 156 .then(() => {
... ... @@ -143,6 +160,6 @@ function handleAuthorized() {
143 160 isRelogin.show = false
144 161 })
145 162 }
146   - return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
  163 + return Promise.reject(t('sys.api.timeoutMessage'))
147 164 }
148 165 export { service }
... ...
yudao-ui-admin-vue3/src/locales/en.ts
... ... @@ -108,7 +108,10 @@ export default {
108 108 login: 'Sign in',
109 109 relogin: 'Sign in again',
110 110 otherLogin: 'Sign in with',
  111 + register: 'Register',
  112 + checkPassword: 'Confirm password',
111 113 remember: 'Remember me',
  114 + hasUser: 'Existing account? Go to login',
112 115 forgetPassword: 'Forget password?',
113 116 tenantNamePlaceholder: 'Please Enter Tenant Name',
114 117 usernamePlaceholder: 'Please Enter Username',
... ... @@ -121,6 +124,7 @@ export default {
121 124 getSmsCode: 'Get SMS Code',
122 125 btnMobile: 'Mobile sign in',
123 126 btnQRCode: 'QR code sign in',
  127 + qrcode: 'Scan the QR code to log in',
124 128 btnRegister: 'Sign up',
125 129 SmsSendMsg: 'code has been sent'
126 130 },
... ...
yudao-ui-admin-vue3/src/locales/zh-CN.ts
... ... @@ -108,7 +108,10 @@ export default {
108 108 login: '登录',
109 109 relogin: '重新登录',
110 110 otherLogin: '其他登录方式',
  111 + register: '注册',
  112 + checkPassword: '确认密码',
111 113 remember: '记住我',
  114 + hasUser: '已有账号?去登录',
112 115 forgetPassword: '忘记密码?',
113 116 tenantNamePlaceholder: '请输入租户名称',
114 117 usernamePlaceholder: '请输入用户名',
... ... @@ -121,6 +124,7 @@ export default {
121 124 getSmsCode: '获取验证码',
122 125 btnMobile: '手机登录',
123 126 btnQRCode: '二维码登录',
  127 + qrcode: '扫描二维码登录',
124 128 btnRegister: '注册',
125 129 SmsSendMsg: '验证码已发送'
126 130 },
... ...
yudao-ui-admin-vue3/src/router/modules/error.ts deleted
1   -import { Layout } from '@/utils/routerHelper'
2   -import { useI18n } from '@/hooks/web/useI18n'
3   -const { t } = useI18n()
4   -
5   -const errorRouter = [
6   - {
7   - path: '/error',
8   - component: Layout,
9   - redirect: '/error/404',
10   - name: 'Error',
11   - meta: {
12   - title: t('router.errorPage'),
13   - icon: 'ci:error',
14   - alwaysShow: true
15   - },
16   - children: [
17   - {
18   - path: '404-demo',
19   - component: () => import('@/views/Error/404.vue'),
20   - name: '404Demo',
21   - meta: {
22   - title: '404'
23   - }
24   - },
25   - {
26   - path: '403-demo',
27   - component: () => import('@/views/Error/403.vue'),
28   - name: '403Demo',
29   - meta: {
30   - title: '403'
31   - }
32   - },
33   - {
34   - path: '500-demo',
35   - component: () => import('@/views/Error/500.vue'),
36   - name: '500Demo',
37   - meta: {
38   - title: '500'
39   - }
40   - }
41   - ]
42   - }
43   -]
44   -
45   -export default errorRouter
yudao-ui-admin-vue3/src/router/modules/remaining.ts
... ... @@ -43,7 +43,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
43 43 {
44 44 path: '/user',
45 45 component: Layout,
46   - name: 'User',
  46 + name: 'UserInfo',
47 47 meta: {
48 48 hidden: true
49 49 },
... ... @@ -53,9 +53,10 @@ const remainingRouter: AppRouteRecordRaw[] = [
53 53 component: () => import('@/views/Profile/Index.vue'),
54 54 name: 'Profile',
55 55 meta: {
  56 + canTo: true,
56 57 hidden: true,
  58 + noTagsView: true,
57 59 icon: 'ep:user',
58   - canTo: true,
59 60 title: t('common.profile')
60 61 }
61 62 }
... ... @@ -64,7 +65,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
64 65 {
65 66 path: '/codegen',
66 67 component: Layout,
67   - name: 'Codegen',
  68 + name: 'CodegenEdit',
68 69 meta: {
69 70 hidden: true
70 71 },
... ... @@ -74,7 +75,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
74 75 component: () => import('@/views/infra/codegen/EditTable.vue'),
75 76 name: 'EditTable',
76 77 meta: {
77   - noTagsView: true,
78 78 noCache: true,
79 79 hidden: true,
80 80 canTo: true,
... ... @@ -88,7 +88,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
88 88 {
89 89 path: '/job',
90 90 component: Layout,
91   - name: 'Job',
  91 + name: 'JobL',
92 92 meta: {
93 93 hidden: true
94 94 },
... ... @@ -98,7 +98,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
98 98 component: () => import('@/views/infra/job/JobLog.vue'),
99 99 name: 'JobLog',
100 100 meta: {
101   - noTagsView: true,
102 101 noCache: true,
103 102 hidden: true,
104 103 canTo: true,
... ...
yudao-ui-admin-vue3/src/views/Login/Login.vue
1 1 <script setup lang="ts">
2   -import { LoginForm } from './components'
3   -import { MobileForm } from './components'
  2 +import { LoginForm, MobileForm, RegisterForm, QrCodeForm } from './components'
4 3 import { ThemeSwitch } from '@/components/ThemeSwitch'
5 4 import { LocaleDropdown } from '@/components/LocaleDropdown'
6 5 import { useI18n } from '@/hooks/web/useI18n'
... ... @@ -8,13 +7,13 @@ import { underlineToHump } from &#39;@/utils&#39;
8 7 import { useAppStore } from '@/store/modules/app'
9 8 import { useDesign } from '@/hooks/web/useDesign'
10 9  
  10 +const { t } = useI18n()
  11 +
11 12 const { getPrefixCls } = useDesign()
12 13  
13 14 const prefixCls = getPrefixCls('login')
14 15  
15 16 const appStore = useAppStore()
16   -
17   -const { t } = useI18n()
18 17 </script>
19 18  
20 19 <template>
... ... @@ -67,6 +66,10 @@ const { t } = useI18n()
67 66 <LoginForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
68 67 <!-- 手机登录 -->
69 68 <MobileForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
  69 + <!-- 二维码登录 -->
  70 + <QrCodeForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
  71 + <!-- 注册 -->
  72 + <RegisterForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
70 73 </div>
71 74 </Transition>
72 75 </div>
... ...
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
... ... @@ -13,7 +13,14 @@ import {
13 13 } from 'element-plus'
14 14 import { reactive, ref, unref, onMounted, computed, watch } from 'vue'
15 15 import * as LoginApi from '@/api/login'
16   -import { setToken, setTenantId } from '@/utils/auth'
  16 +import {
  17 + setToken,
  18 + setTenantId,
  19 + getUsername,
  20 + getRememberMe,
  21 + getPassword,
  22 + getTenantName
  23 +} from '@/utils/auth'
17 24 import { useUserStoreWithOut } from '@/store/modules/user'
18 25 import { useCache } from '@/hooks/web/useCache'
19 26 import { usePermissionStore } from '@/store/modules/permission'
... ... @@ -40,7 +47,6 @@ const iconHouse = useIcon({ icon: &#39;ep:house&#39; })
40 47 const iconAvatar = useIcon({ icon: 'ep:avatar' })
41 48 const iconLock = useIcon({ icon: 'ep:lock' })
42 49 const iconCircleCheck = useIcon({ icon: 'ep:circle-check' })
43   -const remember = ref(false)
44 50 const LoginRules = {
45 51 tenantName: [required],
46 52 username: [required],
... ... @@ -61,6 +67,7 @@ const loginData = reactive({
61 67 tenantName: '芋道源码',
62 68 username: 'admin',
63 69 password: 'admin123',
  70 + rememberMe: false,
64 71 code: '',
65 72 uuid: ''
66 73 }
... ... @@ -77,6 +84,20 @@ const getTenantId = async () =&gt; {
77 84 const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName)
78 85 setTenantId(res)
79 86 }
  87 +// 记住我
  88 +const getCookie = () => {
  89 + const username = getUsername()
  90 + const password = getPassword()
  91 + const rememberMe = getRememberMe()
  92 + const tenantName = getTenantName()
  93 + loginData.loginForm = {
  94 + ...loginData.loginForm,
  95 + username: username ? username : loginData.loginForm.username,
  96 + password: password ? password : loginData.loginForm.password,
  97 + rememberMe: rememberMe ? getRememberMe() : false,
  98 + tenantName: tenantName ? tenantName : loginData.loginForm.tenantName
  99 + }
  100 +}
80 101 // 登录
81 102 const handleLogin = async () => {
82 103 await getTenantId()
... ... @@ -103,14 +124,13 @@ const getRoutes = async () =&gt; {
103 124 // 后端过滤菜单
104 125 const res = await LoginApi.getAsyncRoutesApi()
105 126 wsCache.set('roleRouters', res)
106   - await permissionStore.generateRoutes(res).catch(() => {})
  127 + await permissionStore.generateRoutes(res)
107 128 permissionStore.getAddRouters.forEach((route) => {
108 129 addRoute(route as RouteRecordRaw) // 动态添加可访问路由表
109 130 })
110 131 permissionStore.setIsAddRouters(true)
111 132 push({ path: redirect.value || permissionStore.addRouters[0].path })
112 133 }
113   -
114 134 watch(
115 135 () => currentRoute.value,
116 136 (route: RouteLocationNormalizedLoaded) => {
... ... @@ -120,8 +140,9 @@ watch(
120 140 immediate: true
121 141 }
122 142 )
123   -onMounted(() => {
124   - getCode()
  143 +onMounted(async () => {
  144 + await getCode()
  145 + getCookie()
125 146 })
126 147 </script>
127 148 <template>
... ... @@ -165,7 +186,7 @@ onMounted(() =&gt; {
165 186 <el-input
166 187 v-model="loginData.loginForm.password"
167 188 type="password"
168   - :placeholder="t('login.password')"
  189 + :placeholder="t('login.passwordPlaceholder')"
169 190 show-password
170 191 @keyup.enter="handleLogin"
171 192 :prefix-icon="iconLock"
... ... @@ -178,7 +199,7 @@ onMounted(() =&gt; {
178 199 <el-col :span="14">
179 200 <el-input
180 201 v-model="loginData.loginForm.code"
181   - :placeholder="t('login.code')"
  202 + :placeholder="t('login.codePlaceholder')"
182 203 @keyup.enter="handleLogin"
183 204 :prefix-icon="iconCircleCheck"
184 205 style="width: 90%"
... ... @@ -199,7 +220,9 @@ onMounted(() =&gt; {
199 220 <el-form-item>
200 221 <el-row justify="space-between" style="width: 100%">
201 222 <el-col :span="6">
202   - <el-checkbox v-model="remember">{{ t('login.remember') }}</el-checkbox>
  223 + <el-checkbox v-model="loginData.loginForm.rememberMe">
  224 + {{ t('login.remember') }}
  225 + </el-checkbox>
203 226 </el-col>
204 227 <el-col :span="12" :offset="6">
205 228 <el-link type="primary" style="float: right">{{ t('login.forgetPassword') }}</el-link>
... ... @@ -209,24 +232,28 @@ onMounted(() =&gt; {
209 232 </el-col>
210 233 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
211 234 <el-form-item>
212   - <el-button :loading="loginLoading" type="primary" class="w-[100%]" @click="handleLogin">{{
213   - t('login.login')
214   - }}</el-button>
  235 + <el-button :loading="loginLoading" type="primary" class="w-[100%]" @click="handleLogin">
  236 + {{ t('login.login') }}
  237 + </el-button>
215 238 </el-form-item>
216 239 </el-col>
217 240 <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
218 241 <el-form-item>
219 242 <el-row justify="space-between" style="width: 100%" :gutter="5">
220 243 <el-col :span="8">
221   - <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.MOBILE)">{{
222   - t('login.btnMobile')
223   - }}</el-button>
  244 + <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.MOBILE)">
  245 + {{ t('login.btnMobile') }}
  246 + </el-button>
224 247 </el-col>
225 248 <el-col :span="8">
226   - <el-button class="w-[100%]">{{ t('login.btnQRCode') }}</el-button>
  249 + <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.QR_CODE)">
  250 + {{ t('login.btnQRCode') }}
  251 + </el-button>
227 252 </el-col>
228 253 <el-col :span="8">
229   - <el-button class="w-[100%]">{{ t('login.btnRegister') }}</el-button>
  254 + <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.REGISTER)">
  255 + {{ t('login.btnRegister') }}
  256 + </el-button>
230 257 </el-col>
231 258 </el-row>
232 259 </el-form-item>
... ... @@ -254,7 +281,7 @@ onMounted(() =&gt; {
254 281 class="cursor-pointer anticon"
255 282 />
256 283 <Icon
257   - icon="ant-design:weibo-circle-filled"
  284 + icon="ant-design:dingtalk-circle-filled"
258 285 :size="iconSize"
259 286 :color="iconColor"
260 287 class="cursor-pointer anticon"
... ... @@ -266,6 +293,11 @@ onMounted(() =&gt; {
266 293 </el-form>
267 294 </template>
268 295 <style lang="less" scoped>
  296 +:deep(.anticon) {
  297 + &:hover {
  298 + color: var(--el-color-primary) !important;
  299 + }
  300 +}
269 301 .login-code {
270 302 width: 100%;
271 303 height: 38px;
... ...
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
... ... @@ -67,27 +67,21 @@ const redirect = ref&lt;string&gt;(&#39;&#39;)
67 67 const getSmsCode = async () => {
68 68 await getTenantId()
69 69 smsVO.smsCode.mobile = loginData.loginForm.mobileNumber
70   - console.log('getSmsCode begin:', smsVO.smsCode)
71   - await sendSmsCodeApi(smsVO.smsCode)
72   - .then(async (res) => {
73   - // 提示验证码发送成功
74   - ElMessage({
75   - type: 'success',
76   - message: t('login.SmsSendMsg')
77   - })
78   - console.log('res', res)
79   - // 设置倒计时
80   - mobileCodeTimer.value = 60
81   - let msgTimer = setInterval(() => {
82   - mobileCodeTimer.value = mobileCodeTimer.value - 1
83   - if (mobileCodeTimer.value <= 0) {
84   - clearInterval(msgTimer)
85   - }
86   - }, 1000)
87   - })
88   - .catch(() => {
89   - console.log('error')
  70 + await sendSmsCodeApi(smsVO.smsCode).then(async () => {
  71 + // 提示验证码发送成功
  72 + ElMessage({
  73 + type: 'success',
  74 + message: t('login.SmsSendMsg')
90 75 })
  76 + // 设置倒计时
  77 + mobileCodeTimer.value = 60
  78 + let msgTimer = setInterval(() => {
  79 + mobileCodeTimer.value = mobileCodeTimer.value - 1
  80 + if (mobileCodeTimer.value <= 0) {
  81 + clearInterval(msgTimer)
  82 + }
  83 + }, 1000)
  84 + })
91 85 }
92 86 watch(
93 87 () => currentRoute.value,
... ... @@ -126,7 +120,6 @@ const signIn = async () =&gt; {
126 120 // 获取路由
127 121 const getRoutes = async () => {
128 122 // 后端过滤菜单
129   - // TODO @jinz:这块 getRoutes 的代码,是不是可以统一到 store 里,类似 ruoyi-vue 的做法,可能要找作者沟通下
130 123 const routers = await getAsyncRoutesApi()
131 124 wsCache.set('roleRouters', routers)
132 125 await permissionStore.generateRoutes(routers).catch(() => {})
... ...
yudao-ui-admin-vue3/src/views/Login/components/QrCodeForm.vue 0 → 100644
  1 +<script setup lang="ts">
  2 +import { computed, unref } from 'vue'
  3 +import { ElRow, ElCol, ElCard, ElDivider } from 'element-plus'
  4 +import { useI18n } from '@/hooks/web/useI18n'
  5 +import { useLoginState, LoginStateEnum } from './useLogin'
  6 +import LoginFormTitle from './LoginFormTitle.vue'
  7 +import { Qrcode } from '@/components/Qrcode'
  8 +import logoImg from '@/assets/imgs/logo.png'
  9 +
  10 +const { t } = useI18n()
  11 +const { handleBackLogin, getLoginState } = useLoginState()
  12 +const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
  13 +</script>
  14 +
  15 +<template>
  16 + <el-row v-show="getShow" style="maring-left: -10px; maring-right: -10px">
  17 + <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
  18 + <LoginFormTitle style="width: 100%" />
  19 + </el-col>
  20 + <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
  21 + <el-card shadow="hover" class="mb-10px text-center">
  22 + <Qrcode :logo="logoImg" />
  23 + </el-card>
  24 + </el-col>
  25 + <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider>
  26 + <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
  27 + <div class="w-[100%] mt-15px">
  28 + <el-button class="w-[100%]" @click="handleBackLogin">
  29 + {{ t('sys.login.backSignIn') }}
  30 + </el-button>
  31 + </div>
  32 + </el-col>
  33 + </el-row>
  34 +</template>
... ...
yudao-ui-admin-vue3/src/views/Login/components/RegisterForm.vue 0 → 100644
  1 +<script setup lang="ts">
  2 +import { Form } from '@/components/Form'
  3 +import { computed, reactive, ref, unref } from 'vue'
  4 +import { useI18n } from '@/hooks/web/useI18n'
  5 +import { useForm } from '@/hooks/web/useForm'
  6 +import { ElInput, FormRules } from 'element-plus'
  7 +import { useValidator } from '@/hooks/web/useValidator'
  8 +import { useLoginState, LoginStateEnum } from './useLogin'
  9 +import LoginFormTitle from './LoginFormTitle.vue'
  10 +
  11 +const { register, elFormRef } = useForm()
  12 +const { handleBackLogin, getLoginState } = useLoginState()
  13 +const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER)
  14 +const { t } = useI18n()
  15 +
  16 +const { required } = useValidator()
  17 +
  18 +const schema = reactive<FormSchema[]>([
  19 + {
  20 + field: 'title',
  21 + colProps: {
  22 + span: 24
  23 + }
  24 + },
  25 + {
  26 + field: 'username',
  27 + label: t('login.username'),
  28 + value: '',
  29 + component: 'Input',
  30 + colProps: {
  31 + span: 24
  32 + },
  33 + componentProps: {
  34 + placeholder: t('login.usernamePlaceholder')
  35 + }
  36 + },
  37 + {
  38 + field: 'password',
  39 + label: t('login.password'),
  40 + value: '',
  41 + component: 'InputPassword',
  42 + colProps: {
  43 + span: 24
  44 + },
  45 + componentProps: {
  46 + style: {
  47 + width: '100%'
  48 + },
  49 + strength: true,
  50 + placeholder: t('login.passwordPlaceholder')
  51 + }
  52 + },
  53 + {
  54 + field: 'check_password',
  55 + label: t('login.checkPassword'),
  56 + value: '',
  57 + component: 'InputPassword',
  58 + colProps: {
  59 + span: 24
  60 + },
  61 + componentProps: {
  62 + style: {
  63 + width: '100%'
  64 + },
  65 + strength: true,
  66 + placeholder: t('login.passwordPlaceholder')
  67 + }
  68 + },
  69 + {
  70 + field: 'code',
  71 + label: t('login.code'),
  72 + colProps: {
  73 + span: 24
  74 + }
  75 + },
  76 + {
  77 + field: 'register',
  78 + colProps: {
  79 + span: 24
  80 + }
  81 + }
  82 +])
  83 +
  84 +const rules: FormRules = {
  85 + username: [required()],
  86 + password: [required()],
  87 + check_password: [required()],
  88 + code: [required()]
  89 +}
  90 +
  91 +const loading = ref(false)
  92 +
  93 +const loginRegister = async () => {
  94 + const formRef = unref(elFormRef)
  95 + formRef?.validate(async (valid) => {
  96 + if (valid) {
  97 + try {
  98 + loading.value = true
  99 + } finally {
  100 + loading.value = false
  101 + }
  102 + }
  103 + })
  104 +}
  105 +</script>
  106 +
  107 +<template>
  108 + <Form
  109 + :schema="schema"
  110 + :rules="rules"
  111 + label-position="top"
  112 + hide-required-asterisk
  113 + size="large"
  114 + v-show="getShow"
  115 + class="dark:(border-1 border-[var(--el-border-color)] border-solid)"
  116 + @register="register"
  117 + >
  118 + <template #title>
  119 + <LoginFormTitle style="width: 100%" />
  120 + </template>
  121 +
  122 + <template #code="form">
  123 + <div class="w-[100%] flex">
  124 + <el-input v-model="form['code']" :placeholder="t('login.codePlaceholder')" />
  125 + </div>
  126 + </template>
  127 +
  128 + <template #register>
  129 + <div class="w-[100%]">
  130 + <el-button type="primary" class="w-[100%]" :loading="loading" @click="loginRegister">
  131 + {{ t('login.register') }}
  132 + </el-button>
  133 + </div>
  134 + <div class="w-[100%] mt-15px">
  135 + <el-button class="w-[100%]" @click="handleBackLogin">
  136 + {{ t('login.hasUser') }}
  137 + </el-button>
  138 + </div>
  139 + </template>
  140 + </Form>
  141 +</template>
... ...
yudao-ui-admin-vue3/src/views/Login/components/index.ts
1 1 import LoginForm from './LoginForm.vue'
2 2 import MobileForm from './MobileForm.vue'
3 3 import LoginFormTitle from './LoginFormTitle.vue'
  4 +import RegisterForm from './RegisterForm.vue'
  5 +import QrCodeForm from './QrCodeForm.vue'
4 6  
5   -export { LoginForm, MobileForm, LoginFormTitle }
  7 +export { LoginForm, MobileForm, LoginFormTitle, RegisterForm, QrCodeForm }
... ...
yudao-ui-admin-vue3/src/views/infra/apiAccessLog/index.vue
... ... @@ -69,7 +69,7 @@ getList()
69 69 v-hasPermi="['infra:api-access-log:query']"
70 70 @click="handleDetail(row)"
71 71 >
72   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  72 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
73 73 </el-button>
74 74 </template>
75 75 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
... ... @@ -96,7 +96,7 @@ getList()
96 96 v-hasPermi="['infra:api-error-log:export']"
97 97 @click="handleDetail(row)"
98 98 >
99   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  99 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
100 100 </el-button>
101 101 <el-button
102 102 link
... ... @@ -105,7 +105,7 @@ getList()
105 105 v-hasPermi="['infra:api-error-log:update-status']"
106 106 @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.DONE, '已处理')"
107 107 >
108   - <Icon icon="ep:cpu" class="mr-5px" /> 已处理
  108 + <Icon icon="ep:cpu" class="mr-1px" /> 已处理
109 109 </el-button>
110 110 <el-button
111 111 link
... ... @@ -114,7 +114,7 @@ getList()
114 114 v-hasPermi="['infra:api-error-log:update-status']"
115 115 @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.IGNORE, '已忽略')"
116 116 >
117   - <Icon icon="ep:mute-notification" class="mr-5px" /> 已忽略
  117 + <Icon icon="ep:mute-notification" class="mr-1px" /> 已忽略
118 118 </el-button>
119 119 </template>
120 120 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/codegen/index.vue
... ... @@ -100,7 +100,7 @@ getList()
100 100 v-hasPermi="['infra:codegen:preview']"
101 101 @click="handlePreview(row)"
102 102 >
103   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.preview') }}
  103 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.preview') }}
104 104 </el-button>
105 105 <el-button
106 106 link
... ... @@ -108,7 +108,7 @@ getList()
108 108 v-hasPermi="['infra:codegen:update']"
109 109 @click="handleEditTable(row)"
110 110 >
111   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  111 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
112 112 </el-button>
113 113 <el-button
114 114 link
... ... @@ -116,7 +116,7 @@ getList()
116 116 v-hasPermi="['infra:codegen:delete']"
117 117 @click="handleDelete(row)"
118 118 >
119   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  119 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
120 120 </el-button>
121 121 <el-button
122 122 link
... ... @@ -124,7 +124,7 @@ getList()
124 124 v-hasPermi="['infra:codegen:update']"
125 125 @click="handleSynchDb(row)"
126 126 >
127   - <Icon icon="ep:refresh" class="mr-5px" /> {{ t('action.sync') }}
  127 + <Icon icon="ep:refresh" class="mr-1px" /> {{ t('action.sync') }}
128 128 </el-button>
129 129 <el-button
130 130 link
... ... @@ -132,7 +132,7 @@ getList()
132 132 v-hasPermi="['infra:codegen:download']"
133 133 @click="handleGenTable(row)"
134 134 >
135   - <Icon icon="ep:download" class="mr-5px" /> {{ t('action.generate') }}
  135 + <Icon icon="ep:download" class="mr-1px" /> {{ t('action.generate') }}
136 136 </el-button>
137 137 </template>
138 138 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/config/index.vue
... ... @@ -142,7 +142,7 @@ getList()
142 142 v-hasPermi="['infra:config:update']"
143 143 @click="handleUpdate(row)"
144 144 >
145   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  145 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
146 146 </el-button>
147 147 <el-button
148 148 link
... ... @@ -150,7 +150,7 @@ getList()
150 150 v-hasPermi="['infra:config:update']"
151 151 @click="handleDetail(row)"
152 152 >
153   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  153 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
154 154 </el-button>
155 155 <el-button
156 156 link
... ... @@ -158,7 +158,7 @@ getList()
158 158 v-hasPermi="['infra:config:delete']"
159 159 @click="handleDelete(row)"
160 160 >
161   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  161 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
162 162 </el-button>
163 163 </template>
164 164 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/index.vue
... ... @@ -106,7 +106,7 @@ onMounted(async () =&gt; {
106 106 v-hasPermi="['infra:data-source-config:update']"
107 107 @click="handleUpdate(row)"
108 108 >
109   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  109 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
110 110 </el-button>
111 111 <el-button
112 112 link
... ... @@ -114,7 +114,7 @@ onMounted(async () =&gt; {
114 114 v-hasPermi="['infra:data-source-config:update']"
115 115 @click="handleDetail(row)"
116 116 >
117   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  117 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
118 118 </el-button>
119 119 <el-button
120 120 link
... ... @@ -122,7 +122,7 @@ onMounted(async () =&gt; {
122 122 v-hasPermi="['infra:data-source-config:delete']"
123 123 @click="handleDelete(row)"
124 124 >
125   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  125 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
126 126 </el-button>
127 127 </template>
128 128 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
... ... @@ -142,7 +142,7 @@ getList()
142 142 v-hasPermi="['infra:file-config:update']"
143 143 @click="handleUpdate(row)"
144 144 >
145   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  145 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
146 146 </el-button>
147 147 <el-button
148 148 link
... ... @@ -150,7 +150,7 @@ getList()
150 150 v-hasPermi="['infra:file-config:update']"
151 151 @click="handleDetail(row)"
152 152 >
153   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  153 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
154 154 </el-button>
155 155 <el-button
156 156 link
... ... @@ -158,7 +158,7 @@ getList()
158 158 v-hasPermi="['infra:file-config:update']"
159 159 @click="handleMaster(row)"
160 160 >
161   - <Icon icon="ep:flag" class="mr-5px" /> 主配置
  161 + <Icon icon="ep:flag" class="mr-1px" /> 主配置
162 162 </el-button>
163 163 <el-button
164 164 link
... ... @@ -166,7 +166,7 @@ getList()
166 166 v-hasPermi="['infra:file-config:update']"
167 167 @click="handleUpdate(row)"
168 168 >
169   - <Icon icon="ep:share" class="mr-5px" /> {{ t('action.test') }}
  169 + <Icon icon="ep:share" class="mr-1px" /> {{ t('action.test') }}
170 170 </el-button>
171 171 <el-button
172 172 link
... ... @@ -174,7 +174,7 @@ getList()
174 174 v-hasPermi="['infra:file-config:delete']"
175 175 @click="handleDelete(row)"
176 176 >
177   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  177 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
178 178 </el-button>
179 179 </template>
180 180 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/file/fileList.data.ts renamed to yudao-ui-admin-vue3/src/views/infra/fileList/fileList.data.ts
yudao-ui-admin-vue3/src/views/infra/file/index.vue renamed to yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
... ... @@ -4,11 +4,11 @@ import dayjs from &#39;dayjs&#39;
4 4 import { ElMessage, ElUpload, UploadInstance, UploadRawFile, ElImage } from 'element-plus'
5 5 import { useTable } from '@/hooks/web/useTable'
6 6 import { useI18n } from '@/hooks/web/useI18n'
7   -import type { FileVO } from '@/api/infra/file/types'
  7 +import type { FileVO } from '@/api/infra/fileList/types'
8 8 import { allSchemas } from './fileList.data'
9   -import * as FileApi from '@/api/infra/file'
10   -import { useCache } from '@/hooks/web/useCache'
11   -const { wsCache } = useCache()
  9 +import * as FileApi from '@/api/infra/fileList'
  10 +import { getAccessToken, getTenantId } from '@/utils/auth'
  11 +
12 12 const { t } = useI18n() // 国际化
13 13  
14 14 // ========== 列表相关 ==========
... ... @@ -29,7 +29,7 @@ const uploadHeaders = ref()
29 29 const beforeUpload = (file: UploadRawFile) => {
30 30 const isImg = file.type === 'image/jpeg' || 'image/gif' || 'image/png'
31 31 const isLt5M = file.size / 1024 / 1024 < 5
32   - if (!isImg) ElMessage.error('上传文件只能是 xls / xlsx 格式!')
  32 + if (!isImg) ElMessage.error('上传文件只能是 jpeg / gif / png 格式!')
33 33 if (!isLt5M) ElMessage.error('上传文件大小不能超过 5MB!')
34 34 return isImg && isLt5M
35 35 }
... ... @@ -40,8 +40,8 @@ const beforeUpload = (file: UploadRawFile) =&gt; {
40 40 // 文件上传
41 41 const submitFileForm = () => {
42 42 uploadHeaders.value = {
43   - Authorization: 'Bearer ' + wsCache.get('ACCESS_TOKEN'),
44   - 'tenant-id': wsCache.get('tenantId')
  43 + Authorization: 'Bearer ' + getAccessToken(),
  44 + 'tenant-id': getTenantId()
45 45 }
46 46 uploadDisabled.value = true
47 47 uploadRef.value!.submit()
... ... @@ -122,7 +122,7 @@ getList()
122 122 </template>
123 123 <template #action="{ row }">
124 124 <el-button link type="primary" @click="handleDetail(row)">
125   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  125 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
126 126 </el-button>
127 127 <el-button
128 128 link
... ... @@ -130,7 +130,7 @@ getList()
130 130 v-hasPermi="['infra:file:delete']"
131 131 @click="handleDelete(row)"
132 132 >
133   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  133 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
134 134 </el-button>
135 135 </template>
136 136 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
... ... @@ -96,7 +96,7 @@ onMounted(() =&gt; {
96 96 </template>
97 97 <template #action="{ row }">
98 98 <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleDetail(row)">
99   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  99 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
100 100 </el-button>
101 101 </template>
102 102 </Table>
... ...
yudao-ui-admin-vue3/src/views/infra/job/index.vue
... ... @@ -158,19 +158,19 @@ getList()
158 158 </template>
159 159 <template #action="{ row }">
160 160 <el-button link type="primary" v-hasPermi="['infra:job:update']" @click="handleUpdate(row)">
161   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  161 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
162 162 </el-button>
163 163 <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleDetail(row)">
164   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  164 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
165 165 </el-button>
166 166 <el-button link type="primary" v-hasPermi="['infra:job:delete']" @click="handleDelete(row)">
167   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  167 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
168 168 </el-button>
169 169 <el-button link type="primary" v-hasPermi="['infra:job:trigger']" @click="handleRun(row)">
170   - <Icon icon="ep:view" class="mr-5px" /> 执行一次
  170 + <Icon icon="ep:view" class="mr-1px" /> 执行一次
171 171 </el-button>
172 172 <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleJobLog(row)">
173   - <Icon icon="ep:view" class="mr-5px" /> 调度日志
  173 + <Icon icon="ep:view" class="mr-1px" /> 调度日志
174 174 </el-button>
175 175 </template>
176 176 </Table>
... ...
yudao-ui-admin-vue3/src/views/pay/app/index.vue
... ... @@ -139,7 +139,7 @@ getList()
139 139 v-hasPermi="['system:post:update']"
140 140 @click="handleUpdate(row)"
141 141 >
142   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  142 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
143 143 </el-button>
144 144 <el-button
145 145 link
... ... @@ -147,7 +147,7 @@ getList()
147 147 v-hasPermi="['system:post:update']"
148 148 @click="handleDetail(row)"
149 149 >
150   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  150 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
151 151 </el-button>
152 152 <el-button
153 153 link
... ... @@ -155,7 +155,7 @@ getList()
155 155 v-hasPermi="['system:post:delete']"
156 156 @click="handleDelete(row)"
157 157 >
158   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  158 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
159 159 </el-button>
160 160 </template>
161 161 </Table>
... ...
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
... ... @@ -139,7 +139,7 @@ getList()
139 139 v-hasPermi="['system:post:update']"
140 140 @click="handleUpdate(row)"
141 141 >
142   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  142 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
143 143 </el-button>
144 144 <el-button
145 145 link
... ... @@ -147,7 +147,7 @@ getList()
147 147 v-hasPermi="['system:post:update']"
148 148 @click="handleDetail(row)"
149 149 >
150   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  150 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
151 151 </el-button>
152 152 <el-button
153 153 link
... ... @@ -155,7 +155,7 @@ getList()
155 155 v-hasPermi="['system:post:delete']"
156 156 @click="handleDelete(row)"
157 157 >
158   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  158 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
159 159 </el-button>
160 160 </template>
161 161 </Table>
... ...
yudao-ui-admin-vue3/src/views/pay/order/index.vue
... ... @@ -128,13 +128,13 @@ getList()
128 128 </template>
129 129 <template #action="{ row }">
130 130 <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleUpdate(row)">
131   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  131 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
132 132 </el-button>
133 133 <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleDetail(row)">
134   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  134 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
135 135 </el-button>
136 136 <el-button link type="primary" v-hasPermi="['pay:order:delete']" @click="handleDelete(row)">
137   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  137 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
138 138 </el-button>
139 139 </template>
140 140 </Table>
... ...
yudao-ui-admin-vue3/src/views/pay/refund/index.vue
... ... @@ -89,7 +89,7 @@ getList()
89 89 v-hasPermi="['system:post:update']"
90 90 @click="handleDetail(row)"
91 91 >
92   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  92 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
93 93 </el-button>
94 94 <el-button
95 95 link
... ... @@ -97,7 +97,7 @@ getList()
97 97 v-hasPermi="['system:post:delete']"
98 98 @click="handleDelete(row)"
99 99 >
100   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  100 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
101 101 </el-button>
102 102 </template>
103 103 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/dept/index.vue
1 1 <script setup lang="ts">
2 2 import { useI18n } from '@/hooks/web/useI18n'
3   -import { ElCard, ElTree, ElTreeSelect, ElMessage, ElMessageBox } from 'element-plus'
  3 +import { ElInput, ElCard, ElTree, ElTreeSelect, ElMessage, ElMessageBox } from 'element-plus'
4 4 import { handleTree } from '@/utils/tree'
5   -import { onMounted, ref, unref } from 'vue'
  5 +import { onMounted, ref, unref, watch } from 'vue'
6 6 import * as DeptApi from '@/api/system/dept'
7 7 import { Form, FormExpose } from '@/components/Form'
8 8 import { modelSchema } from './dept.data'
... ... @@ -28,6 +28,7 @@ const deptParentId = ref(0) // 上级ID
28 28 const formRef = ref<FormExpose>()
29 29  
30 30 // ========== 创建部门树结构 ==========
  31 +const filterText = ref('')
31 32 const deptOptions = ref([]) // 树形结构
32 33 const treeRef = ref<InstanceType<typeof ElTree>>()
33 34 const getTree = async () => {
... ... @@ -38,9 +39,13 @@ const filterNode = (value: string, data: Tree) =&gt; {
38 39 if (!value) return true
39 40 return data.name.includes(value)
40 41 }
  42 +watch(filterText, (val) => {
  43 + treeRef.value!.filter(val)
  44 +})
41 45 // 新增
42   -const handleAdd = () => {
  46 +const handleAdd = (data: { id: number }) => {
43 47 // 重置表单
  48 + deptParentId.value = data.id
44 49 formTitle.value = '新增部门'
45 50 unref(formRef)?.getElFormRef()?.resetFields()
46 51 showForm.value = true
... ... @@ -73,7 +78,7 @@ const submitForm = async () =&gt; {
73 78 // 提交请求
74 79 try {
75 80 const data = unref(formRef)?.formModel as DeptVO
76   - deptParentId.value = data.parentId
  81 + data.parentId = deptParentId.value
77 82 // TODO: 表单提交待完善
78 83 if (formTitle.value.startsWith('新增')) {
79 84 await DeptApi.createDeptApi(data)
... ... @@ -104,6 +109,7 @@ onMounted(async () =&gt; {
104 109 <div class="custom-tree-container">
105 110 <!-- <p>部门列表</p> -->
106 111 <!-- 操作工具栏 -->
  112 + <el-input v-model="filterText" placeholder="搜索部门" />
107 113 <el-tree
108 114 ref="treeRef"
109 115 node-key="id"
... ... @@ -111,20 +117,20 @@ onMounted(async () =&gt; {
111 117 :props="defaultProps"
112 118 :highlight-current="true"
113 119 default-expand-all
114   - :filter-method="filterNode"
  120 + :filter-node-method="filterNode"
115 121 >
116 122 <template #default="{ node, data }">
117 123 <span class="custom-tree-node">
118 124 <span>{{ node.label }}</span>
119 125 <span>
120   - <el-button link v-hasPermi="['system:dept:create']" @click="handleAdd()">
121   - <Icon icon="ep:plus" class="mr-5px" />
  126 + <el-button link v-hasPermi="['system:dept:create']" @click="handleAdd(data)">
  127 + <Icon icon="ep:plus" class="mr-1px" />
122 128 </el-button>
123 129 <el-button link v-hasPermi="['system:dept:update']" @click="handleUpdate(data)">
124   - <Icon icon="ep:edit" class="mr-5px" />
  130 + <Icon icon="ep:edit" class="mr-1px" />
125 131 </el-button>
126 132 <el-button link v-hasPermi="['system:dept:delete']" @click="handleDelete(data)">
127   - <Icon icon="ep:delete" class="mr-5px" />
  133 + <Icon icon="ep:delete" class="mr-1px" />
128 134 </el-button>
129 135 </span>
130 136 </span>
... ...
yudao-ui-admin-vue3/src/views/system/dict/index.vue
... ... @@ -189,7 +189,7 @@ onMounted(async () =&gt; {
189 189 v-hasPermi="['system:dict:update']"
190 190 @click="handleTypeUpdate(row)"
191 191 >
192   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  192 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
193 193 </el-button>
194 194 <el-button
195 195 link
... ... @@ -197,7 +197,7 @@ onMounted(async () =&gt; {
197 197 v-hasPermi="['system:dict:delete']"
198 198 @click="handleTypeDelete(row)"
199 199 >
200   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  200 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
201 201 </el-button>
202 202 </template>
203 203 </Table>
... ... @@ -221,7 +221,7 @@ onMounted(async () =&gt; {
221 221 <!-- 操作工具栏 -->
222 222 <div class="mb-10px">
223 223 <el-button type="primary" v-hasPermi="['system:dict:create']" @click="handleDataCreate">
224   - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
  224 + <Icon icon="ep:zoom-in" class="mr-1px" /> {{ t('action.add') }}
225 225 </el-button>
226 226 </div>
227 227 <Table
... ... @@ -246,7 +246,7 @@ onMounted(async () =&gt; {
246 246 v-hasPermi="['system:dict:update']"
247 247 @click="handleDataUpdate(row)"
248 248 >
249   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  249 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
250 250 </el-button>
251 251 <el-button
252 252 link
... ... @@ -254,7 +254,7 @@ onMounted(async () =&gt; {
254 254 v-hasPermi="['system:dict:delete']"
255 255 @click="handleDataDelete(row)"
256 256 >
257   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  257 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
258 258 </el-button>
259 259 </template>
260 260 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
... ... @@ -125,7 +125,7 @@ getList()
125 125 v-hasPermi="['system:error-code:update']"
126 126 @click="handleUpdate(row)"
127 127 >
128   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  128 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
129 129 </el-button>
130 130 <el-button
131 131 link
... ... @@ -133,7 +133,7 @@ getList()
133 133 v-hasPermi="['system:error-code:update']"
134 134 @click="handleDetail(row)"
135 135 >
136   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  136 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
137 137 </el-button>
138 138 <el-button
139 139 link
... ... @@ -141,7 +141,7 @@ getList()
141 141 v-hasPermi="['system:error-code:delete']"
142 142 @click="handleDelete(row)"
143 143 >
144   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  144 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
145 145 </el-button>
146 146 </template>
147 147 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue
... ... @@ -54,7 +54,7 @@ getList()
54 54 </template>
55 55 <template #action="{ row }">
56 56 <el-button link type="primary" @click="handleDetail(row)">
57   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  57 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
58 58 </el-button>
59 59 </template>
60 60 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/menu/index.vue
... ... @@ -195,7 +195,7 @@ onMounted(async () =&gt; {
195 195 <ContentWrap>
196 196 <div class="mb-10px">
197 197 <el-button type="primary" v-hasPermi="['system:notice:create']" @click="handleCreate">
198   - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
  198 + <Icon icon="ep:zoom-in" class="mr-1px" /> {{ t('action.add') }}
199 199 </el-button>
200 200 </div>
201 201 <el-table
... ... @@ -238,7 +238,7 @@ onMounted(async () =&gt; {
238 238 v-hasPermi="['system:menu:update']"
239 239 @click="handleUpdate(scope.row)"
240 240 >
241   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  241 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
242 242 </el-button>
243 243 <el-button
244 244 link
... ... @@ -246,7 +246,7 @@ onMounted(async () =&gt; {
246 246 v-hasPermi="['system:menu:delete']"
247 247 @click="handleDelete(scope.row)"
248 248 >
249   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  249 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
250 250 </el-button>
251 251 </template>
252 252 </el-table-column>
... ...
yudao-ui-admin-vue3/src/views/system/notice/index.vue
... ... @@ -127,7 +127,7 @@ getList()
127 127 v-hasPermi="['system:notice:update']"
128 128 @click="handleUpdate(row)"
129 129 >
130   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  130 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
131 131 </el-button>
132 132 <el-button
133 133 link
... ... @@ -135,7 +135,7 @@ getList()
135 135 v-hasPermi="['system:notice:update']"
136 136 @click="handleDetail(row)"
137 137 >
138   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  138 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
139 139 </el-button>
140 140 <el-button
141 141 link
... ... @@ -143,7 +143,7 @@ getList()
143 143 v-hasPermi="['system:notice:delete']"
144 144 @click="handleDelete(row)"
145 145 >
146   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  146 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
147 147 </el-button>
148 148 </template>
149 149 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
... ... @@ -128,7 +128,7 @@ getList()
128 128 v-hasPermi="['system:oauth2-client:update']"
129 129 @click="handleUpdate(row)"
130 130 >
131   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  131 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
132 132 </el-button>
133 133 <el-button
134 134 link
... ... @@ -136,7 +136,7 @@ getList()
136 136 v-hasPermi="['system:oauth2-client:update']"
137 137 @click="handleDetail(row)"
138 138 >
139   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  139 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
140 140 </el-button>
141 141 <el-button
142 142 link
... ... @@ -144,7 +144,7 @@ getList()
144 144 v-hasPermi="['system:oauth2-client:delete']"
145 145 @click="handleDelete(row)"
146 146 >
147   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  147 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
148 148 </el-button>
149 149 </template>
150 150 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
... ... @@ -58,7 +58,7 @@ getList()
58 58 </template>
59 59 <template #action="{ row }">
60 60 <el-button link type="primary" @click="handleDetail(row)">
61   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  61 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
62 62 </el-button>
63 63 <el-button
64 64 link
... ... @@ -66,7 +66,7 @@ getList()
66 66 v-hasPermi="['system:oauth2-token:delete']"
67 67 @click="handleForceLogout(row)"
68 68 >
69   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.logout') }}
  69 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.logout') }}
70 70 </el-button>
71 71 </template>
72 72 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
... ... @@ -72,7 +72,7 @@ getList()
72 72 </template>
73 73 <template #action="{ row }">
74 74 <el-button link type="primary" @click="handleDetail(row)">
75   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  75 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
76 76 </el-button>
77 77 </template>
78 78 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/post/index.vue
... ... @@ -139,7 +139,7 @@ getList()
139 139 v-hasPermi="['system:post:update']"
140 140 @click="handleUpdate(row)"
141 141 >
142   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  142 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
143 143 </el-button>
144 144 <el-button
145 145 link
... ... @@ -147,7 +147,7 @@ getList()
147 147 v-hasPermi="['system:post:update']"
148 148 @click="handleDetail(row)"
149 149 >
150   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  150 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
151 151 </el-button>
152 152 <el-button
153 153 link
... ... @@ -155,7 +155,7 @@ getList()
155 155 v-hasPermi="['system:post:delete']"
156 156 @click="handleDelete(row)"
157 157 >
158   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  158 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
159 159 </el-button>
160 160 </template>
161 161 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/role/index.vue
... ... @@ -191,7 +191,7 @@ getList()
191 191 v-hasPermi="['system:role:update']"
192 192 @click="handleUpdate(row)"
193 193 >
194   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  194 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
195 195 </el-button>
196 196 <el-button
197 197 link
... ... @@ -199,7 +199,7 @@ getList()
199 199 v-hasPermi="['system:role:update']"
200 200 @click="handleDetail(row)"
201 201 >
202   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  202 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
203 203 </el-button>
204 204 <el-button
205 205 link
... ... @@ -207,7 +207,7 @@ getList()
207 207 v-hasPermi="['system:permission:assign-role-menu']"
208 208 @click="handleScope('menu', row)"
209 209 >
210   - <Icon icon="ep:basketball" class="mr-5px" /> 菜单权限
  210 + <Icon icon="ep:basketball" class="mr-1px" /> 菜单权限
211 211 </el-button>
212 212 <el-button
213 213 link
... ... @@ -215,7 +215,7 @@ getList()
215 215 v-hasPermi="['system:permission:assign-role-data-scope']"
216 216 @click="handleScope('data', row)"
217 217 >
218   - <Icon icon="ep:coin" class="mr-5px" /> 数据权限
  218 + <Icon icon="ep:coin" class="mr-1px" /> 数据权限
219 219 </el-button>
220 220 <el-button
221 221 link
... ... @@ -223,7 +223,7 @@ getList()
223 223 v-hasPermi="['system:role:delete']"
224 224 @click="handleDelete(row)"
225 225 >
226   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  226 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
227 227 </el-button>
228 228 </template>
229 229 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
... ... @@ -157,7 +157,7 @@ onMounted(async () =&gt; {
157 157 v-hasPermi="['system:post:update']"
158 158 @click="handleUpdate(row)"
159 159 >
160   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  160 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
161 161 </el-button>
162 162 <el-button
163 163 link
... ... @@ -165,7 +165,7 @@ onMounted(async () =&gt; {
165 165 v-hasPermi="['system:post:update']"
166 166 @click="handleDetail(row)"
167 167 >
168   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  168 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
169 169 </el-button>
170 170 <el-button
171 171 link
... ... @@ -173,7 +173,7 @@ onMounted(async () =&gt; {
173 173 v-hasPermi="['system:post:delete']"
174 174 @click="handleDelete(row)"
175 175 >
176   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  176 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
177 177 </el-button>
178 178 </template>
179 179 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue
... ... @@ -128,7 +128,7 @@ getList()
128 128 v-hasPermi="['system:sms-channel:update']"
129 129 @click="handleUpdate(row)"
130 130 >
131   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  131 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
132 132 </el-button>
133 133 <el-button
134 134 link
... ... @@ -136,7 +136,7 @@ getList()
136 136 v-hasPermi="['system:sms-channel:update']"
137 137 @click="handleDetail(row)"
138 138 >
139   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  139 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
140 140 </el-button>
141 141 <el-button
142 142 link
... ... @@ -144,7 +144,7 @@ getList()
144 144 v-hasPermi="['system:sms-channel:delete']"
145 145 @click="handleDelete(row)"
146 146 >
147   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  147 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
148 148 </el-button>
149 149 </template>
150 150 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
... ... @@ -68,7 +68,7 @@ getList()
68 68 v-hasPermi="['system:sms-channel:update']"
69 69 @click="handleDetail(row)"
70 70 >
71   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  71 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
72 72 </el-button>
73 73 </template>
74 74 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue
... ... @@ -146,7 +146,7 @@ getList()
146 146 v-hasPermi="['system:sms-template:send-sms']"
147 147 @click="handleSendSms(row)"
148 148 >
149   - <Icon icon="ep:cpu" class="mr-5px" /> {{ t('action.test') }}
  149 + <Icon icon="ep:cpu" class="mr-1px" /> {{ t('action.test') }}
150 150 </el-button>
151 151 <el-button
152 152 link
... ... @@ -154,7 +154,7 @@ getList()
154 154 v-hasPermi="['system:sms-template:update']"
155 155 @click="handleUpdate(row)"
156 156 >
157   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  157 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
158 158 </el-button>
159 159 <el-button
160 160 link
... ... @@ -162,7 +162,7 @@ getList()
162 162 v-hasPermi="['system:sms-template:update']"
163 163 @click="handleDetail(row)"
164 164 >
165   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  165 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
166 166 </el-button>
167 167 <el-button
168 168 link
... ... @@ -170,7 +170,7 @@ getList()
170 170 v-hasPermi="['system:sms-template:delete']"
171 171 @click="handleDelete(row)"
172 172 >
173   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  173 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
174 174 </el-button>
175 175 </template>
176 176 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/tenant/index.vue
... ... @@ -177,7 +177,7 @@ onMounted(async () =&gt; {
177 177 v-hasPermi="['system:tenant:update']"
178 178 @click="handleUpdate(row)"
179 179 >
180   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  180 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
181 181 </el-button>
182 182 <el-button
183 183 link
... ... @@ -185,7 +185,7 @@ onMounted(async () =&gt; {
185 185 v-hasPermi="['system:tenant:update']"
186 186 @click="handleDetail(row)"
187 187 >
188   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  188 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
189 189 </el-button>
190 190 <el-button
191 191 link
... ... @@ -193,7 +193,7 @@ onMounted(async () =&gt; {
193 193 v-hasPermi="['system:tenant:delete']"
194 194 @click="handleDelete(row)"
195 195 >
196   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  196 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
197 197 </el-button>
198 198 </template>
199 199 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
... ... @@ -147,10 +147,10 @@ onMounted(async () =&gt; {
147 147 </template>
148 148 <template #action="{ row }">
149 149 <el-button link type="primary" @click="handleUpdate(row)">
150   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  150 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
151 151 </el-button>
152 152 <el-button link type="primary" @click="handleDelete(row)">
153   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  153 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
154 154 </el-button>
155 155 </template>
156 156 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/user/index.vue
1 1 <script setup lang="ts">
2   -import { onMounted, ref, unref } from 'vue'
  2 +import { onMounted, ref, unref, watch } from 'vue'
3 3 import dayjs from 'dayjs'
4 4 import {
  5 + ElInput,
5 6 ElMessage,
6 7 ElCard,
7 8 ElTree,
... ... @@ -29,9 +30,8 @@ import { listSimplePostsApi } from &#39;@/api/system/post&#39;
29 30 import { rules, allSchemas } from './user.data'
30 31 import * as UserApi from '@/api/system/user'
31 32 import download from '@/utils/download'
32   -import { useCache } from '@/hooks/web/useCache'
33 33 import { CommonStatusEnum } from '@/utils/constants'
34   -const { wsCache } = useCache()
  34 +import { getAccessToken, getTenantId } from '@/utils/auth'
35 35 interface Tree {
36 36 id: number
37 37 name: string
... ... @@ -55,6 +55,7 @@ const { register, tableObject, methods } = useTable&lt;UserVO&gt;({
55 55 const { getList, setSearchParams, delList, exportList } = methods
56 56  
57 57 // ========== 创建部门树结构 ==========
  58 +const filterText = ref('')
58 59 const deptOptions = ref([]) // 树形结构
59 60 const searchForm = ref<FormExpose>()
60 61 const treeRef = ref<InstanceType<typeof ElTree>>()
... ... @@ -73,7 +74,9 @@ const handleDeptNodeClick = (data: { [key: string]: any }) =&gt; {
73 74 tableTitle.value = data.name
74 75 methods.getList()
75 76 }
76   -
  77 +watch(filterText, (val) => {
  78 + treeRef.value!.filter(val)
  79 +})
77 80 // ========== CRUD 相关 ==========
78 81 const loading = ref(false) // 遮罩层
79 82 const actionType = ref('') // 操作按钮的类型
... ... @@ -138,7 +141,7 @@ const submitForm = async () =&gt; {
138 141 }
139 142 // 改变用户状态操作
140 143 const handleStatusChange = async (row: UserVO) => {
141   - const text = row.status === CommonStatusEnum.ENABLE ? '停用' : '启用'
  144 + const text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用'
142 145 ElMessageBox.confirm('确认要"' + text + '""' + row.username + '"用户吗?', t('common.reminder'), {
143 146 confirmButtonText: t('common.ok'),
144 147 cancelButtonText: t('common.cancel'),
... ... @@ -146,9 +149,8 @@ const handleStatusChange = async (row: UserVO) =&gt; {
146 149 })
147 150 .then(async () => {
148 151 row.status =
149   - row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE : CommonStatusEnum.ENABLE
150   - const res = await UserApi.updateUserStatusApi(row.id, row.status)
151   - console.info(res)
  152 + row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.ENABLE : CommonStatusEnum.DISABLE
  153 + await UserApi.updateUserStatusApi(row.id, row.status)
152 154 ElMessage.success(text + '成功')
153 155 await getList()
154 156 })
... ... @@ -159,12 +161,10 @@ const handleStatusChange = async (row: UserVO) =&gt; {
159 161 }
160 162 // 重置密码
161 163 const handleResetPwd = (row: UserVO) => {
162   - ElMessageBox.prompt('请输入"' + row.username + '"的新密码', '提示', {
  164 + ElMessageBox.prompt('请输入"' + row.username + '"的新密码', t('common.reminder'), {
163 165 confirmButtonText: t('common.ok'),
164 166 cancelButtonText: t('common.cancel')
165 167 }).then(({ value }) => {
166   - console.log(row.id)
167   - console.log(value)
168 168 UserApi.resetUserPwdApi(row.id, value).then(() => {
169 169 ElMessage.success('修改成功,新密码是:' + value)
170 170 })
... ... @@ -215,8 +215,8 @@ const beforeExcelUpload = (file: UploadRawFile) =&gt; {
215 215 const uploadRef = ref<UploadInstance>()
216 216 const submitFileForm = () => {
217 217 uploadHeaders.value = {
218   - Authorization: 'Bearer ' + wsCache.get('ACCESS_TOKEN'),
219   - 'tenant-id': wsCache.get('tenantId')
  218 + Authorization: 'Bearer ' + getAccessToken(),
  219 + 'tenant-id': getTenantId()
220 220 }
221 221 uploadDisabled.value = true
222 222 uploadRef.value!.submit()
... ... @@ -268,6 +268,7 @@ getList()
268 268 <span>部门列表</span>
269 269 </div>
270 270 </template>
  271 + <el-input v-model="filterText" placeholder="搜索部门" />
271 272 <el-tree
272 273 ref="treeRef"
273 274 node-key="id"
... ... @@ -275,7 +276,7 @@ getList()
275 276 :data="deptOptions"
276 277 :props="defaultProps"
277 278 :highlight-current="true"
278   - :filter-method="filterNode"
  279 + :filter-node-method="filterNode"
279 280 :expand-on-click-node="false"
280 281 @node-click="handleDeptNodeClick"
281 282 />
... ... @@ -343,7 +344,7 @@ getList()
343 344 v-hasPermi="['system:user:update']"
344 345 @click="handleUpdate(row)"
345 346 >
346   - <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
  347 + <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
347 348 </el-button>
348 349 <el-button
349 350 link
... ... @@ -351,7 +352,7 @@ getList()
351 352 v-hasPermi="['system:user:update']"
352 353 @click="handleDetail(row)"
353 354 >
354   - <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
  355 + <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
355 356 </el-button>
356 357 <el-button
357 358 link
... ... @@ -359,7 +360,7 @@ getList()
359 360 v-hasPermi="['system:user:update-password']"
360 361 @click="handleResetPwd(row)"
361 362 >
362   - <Icon icon="ep:key" class="mr-5px" /> 重置密码
  363 + <Icon icon="ep:key" class="mr-1px" /> 重置密码
363 364 </el-button>
364 365 <el-button
365 366 link
... ... @@ -367,7 +368,7 @@ getList()
367 368 v-hasPermi="['system:user:delete']"
368 369 @click="handleDelete(row)"
369 370 >
370   - <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
  371 + <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
371 372 </el-button>
372 373 </template>
373 374 </Table>
... ...
yudao-ui-admin-vue3/src/views/system/user/user.data.ts
... ... @@ -7,9 +7,7 @@ import { CrudSchema, useCrudSchemas } from &#39;@/hooks/web/useCrudSchemas&#39;
7 7 const { t } = useI18n()
8 8 // 表单校验
9 9 export const rules = reactive({
10   - name: [required],
11   - code: [required],
12   - sort: [required],
  10 + nickname: [required],
13 11 status: [required]
14 12 })
15 13 // crudSchemas
... ... @@ -28,6 +26,9 @@ const crudSchemas = reactive&lt;CrudSchema[]&gt;([
28 26 {
29 27 label: '用户账号',
30 28 field: 'username',
  29 + form: {
  30 + show: false
  31 + },
31 32 search: {
32 33 show: true
33 34 }
... ...
yudao-ui-admin-vue3/vite.config.ts
... ... @@ -11,6 +11,7 @@ import { createSvgIconsPlugin } from &#39;vite-plugin-svg-icons&#39;
11 11 import PurgeIcons from 'vite-plugin-purge-icons'
12 12 import DefineOptions from 'unplugin-vue-define-options/vite'
13 13 import { createHtmlPlugin } from 'vite-plugin-html'
  14 +import viteCompression from 'vite-plugin-compression'
14 15  
15 16 // 当前执行node命令时文件夹的地址(工作目录)
16 17 const root = process.cwd()
... ... @@ -80,11 +81,19 @@ export default ({ command, mode }: ConfigEnv): UserConfig =&gt; {
80 81 }),
81 82 PurgeIcons(),
82 83 DefineOptions(),
  84 + viteCompression({
  85 + verbose: true, // 是否在控制台输出压缩结果
  86 + disable: true, // 是否禁用
  87 + threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
  88 + algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
  89 + ext: '.gz', // 生成的压缩包后缀
  90 + deleteOriginFile: false //压缩后是否删除源文件
  91 + }),
83 92 createHtmlPlugin({
84 93 inject: {
85 94 data: {
86 95 title: env.VITE_APP_TITLE,
87   - injectScript: `<script src="./inject.js"></script>`,
  96 + injectScript: `<script src="./inject.js"></script>`
88 97 }
89 98 }
90 99 })
... ...