Explorar o código

Merge remote-tracking branch 'origin/master'

YunaiV %!s(int64=2) %!d(string=hai) anos
pai
achega
0ae9d179d2
Modificáronse 55 ficheiros con 758 adicións e 249 borrados
  1. 261 0
      sql/mysql/vue3-menu.sql
  2. 29 17
      yudao-ui-admin-vue3/README.md
  3. 3 2
      yudao-ui-admin-vue3/package.json
  4. 0 0
      yudao-ui-admin-vue3/src/api/infra/fileList/index.ts
  5. 0 0
      yudao-ui-admin-vue3/src/api/infra/fileList/types.ts
  6. 1 1
      yudao-ui-admin-vue3/src/api/infra/redis/types.ts
  7. 30 1
      yudao-ui-admin-vue3/src/components/Editor/src/Editor.vue
  8. 5 1
      yudao-ui-admin-vue3/src/components/Table/src/Table.vue
  9. 1 1
      yudao-ui-admin-vue3/src/components/TagsView/src/TagsView.vue
  10. 3 2
      yudao-ui-admin-vue3/src/components/UserInfo/src/UserInfo.vue
  11. 24 7
      yudao-ui-admin-vue3/src/config/axios/index.ts
  12. 4 0
      yudao-ui-admin-vue3/src/locales/en.ts
  13. 4 0
      yudao-ui-admin-vue3/src/locales/zh-CN.ts
  14. 0 45
      yudao-ui-admin-vue3/src/router/modules/error.ts
  15. 5 6
      yudao-ui-admin-vue3/src/router/modules/remaining.ts
  16. 7 4
      yudao-ui-admin-vue3/src/views/Login/Login.vue
  17. 50 18
      yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue
  18. 14 21
      yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue
  19. 34 0
      yudao-ui-admin-vue3/src/views/Login/components/QrCodeForm.vue
  20. 141 0
      yudao-ui-admin-vue3/src/views/Login/components/RegisterForm.vue
  21. 3 1
      yudao-ui-admin-vue3/src/views/Login/components/index.ts
  22. 1 1
      yudao-ui-admin-vue3/src/views/infra/apiAccessLog/index.vue
  23. 3 3
      yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue
  24. 5 5
      yudao-ui-admin-vue3/src/views/infra/codegen/index.vue
  25. 3 3
      yudao-ui-admin-vue3/src/views/infra/config/index.vue
  26. 3 3
      yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/index.vue
  27. 5 5
      yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue
  28. 0 0
      yudao-ui-admin-vue3/src/views/infra/fileList/fileList.data.ts
  29. 9 9
      yudao-ui-admin-vue3/src/views/infra/fileList/index.vue
  30. 1 1
      yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue
  31. 5 5
      yudao-ui-admin-vue3/src/views/infra/job/index.vue
  32. 3 3
      yudao-ui-admin-vue3/src/views/pay/app/index.vue
  33. 3 3
      yudao-ui-admin-vue3/src/views/pay/merchant/index.vue
  34. 3 3
      yudao-ui-admin-vue3/src/views/pay/order/index.vue
  35. 2 2
      yudao-ui-admin-vue3/src/views/pay/refund/index.vue
  36. 15 9
      yudao-ui-admin-vue3/src/views/system/dept/index.vue
  37. 5 5
      yudao-ui-admin-vue3/src/views/system/dict/index.vue
  38. 3 3
      yudao-ui-admin-vue3/src/views/system/errorCode/index.vue
  39. 1 1
      yudao-ui-admin-vue3/src/views/system/loginlog/index.vue
  40. 3 3
      yudao-ui-admin-vue3/src/views/system/menu/index.vue
  41. 3 3
      yudao-ui-admin-vue3/src/views/system/notice/index.vue
  42. 3 3
      yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue
  43. 2 2
      yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue
  44. 1 1
      yudao-ui-admin-vue3/src/views/system/operatelog/index.vue
  45. 3 3
      yudao-ui-admin-vue3/src/views/system/post/index.vue
  46. 5 5
      yudao-ui-admin-vue3/src/views/system/role/index.vue
  47. 3 3
      yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue
  48. 3 3
      yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue
  49. 1 1
      yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue
  50. 4 4
      yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue
  51. 3 3
      yudao-ui-admin-vue3/src/views/system/tenant/index.vue
  52. 2 2
      yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue
  53. 19 18
      yudao-ui-admin-vue3/src/views/system/user/index.vue
  54. 4 3
      yudao-ui-admin-vue3/src/views/system/user/user.data.ts
  55. 10 1
      yudao-ui-admin-vue3/vite.config.ts

+ 261 - 0
sql/mysql/vue3-menu.sql

@@ -0,0 +1,261 @@
+-- ----------------------------
+-- Table structure for system_menu
+-- icon 不兼容
+-- ----------------------------
+DROP TABLE IF EXISTS `system_menu`;
+CREATE TABLE `system_menu`  (
+    `id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
+    `name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',
+    `permission` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '权限标识',
+    `type` tinyint NOT NULL COMMENT '菜单类型',
+    `sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
+    `parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父菜单ID',
+    `path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '路由地址',
+    `icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '#' COMMENT '菜单图标',
+    `component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '组件路径',
+    `status` tinyint NOT NULL DEFAULT 0 COMMENT '菜单状态',
+    `visible` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否可见',
+    `keep_alive` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否缓存',
+    `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
+    `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+    `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
+    `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
+    `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
+    PRIMARY KEY (`id`) USING BTREE
+) ENGINE = InnoDB AUTO_INCREMENT = 1268 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
+
+-- ----------------------------
+-- Records of system_menu
+-- ----------------------------
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+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');
+
+SET FOREIGN_KEY_CHECKS = 1;

+ 29 - 17
yudao-ui-admin-vue3/README.md

@@ -7,7 +7,7 @@
 ## 注意事项
 
 - 项目路径请不要使用中文命名!!!会造成解析乱码!!!请使用全英文路径!!!
-- node >=14.18.0(建议使用16版本) ,pnpm >=7
+- node >=14.18.0(建议使用 16 版本) ,pnpm >=7
 - 开发建议使用 [谷歌浏览器-开发者版](https://www.google.cn/intl/zh-CN/chrome/dev/) 不支持 IE\QQ 等浏览器
 
 ### 前端依赖
@@ -15,7 +15,7 @@
 | 框架 | 说明 | 版本 |
 | --- | --- | --- |
 | [Vue](https://staging-cn.vuejs.org/) | vue 框架 | 3.2.37 |
-| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 3.0.1 |
+| [Vite](https://cn.vitejs.dev//) | 开发与构建工具 | 3.0.2 |
 | [Element Plus](https://element-plus.org/zh-CN/) | Element Plus | 2.2.9 |
 | [TypeScript](https://www.typescriptlang.org/docs/) | JavaScript 的超集 | 4.7.4 |
 | [pinia](https://pinia.vuejs.org/) | Vue 存储库 替代 vuex5 | 2.0.16 |
@@ -24,9 +24,7 @@
 | [vue-router](https://router.vuejs.org/) | vue 路由 | 4.1.2 |
 | [windicss](https://cn.windicss.org/) | 下一代工具优先的 CSS 框架 | 3.5.6 |
 | [iconify](https://icon-sets.iconify.design/) | 在线图标库 | 2.2.1 |
-| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.11 |
-
-## 用法
+| [wangeditor](https://www.wangeditor.com/) | 富文本编辑器 | 5.1.10 |
 
 ### 推荐 VScode 开发,插件如下
 
@@ -42,44 +40,58 @@
 
 ### 安装 pnpm 并启动项目
 
-```
-# 查看当前 npm 源
+- 查看当前 npm 源
 
+```bash
 npm config ls
+```
 
-# 如果执行上面命令您并未看到 registry = "https://registry.npmjs.org/",说明使用的非npm官方源,请执行下面命令
+- 如果执行上面命令您并未看到 registry = "https://registry.npmjs.org/",说明使用的非npm官方源,请执行下面命令
 
+```bash
 npm config set registry https://registry.npmjs.org
+```
 
-# 如果您还没安装 pnpm,请执行下面命令
+- 如果您还没安装 pnpm,请执行下面命令
 
+```bash
 npm install -g pnpm
+```
 
-# mac 用户遇到安装报错请在命令前加上 sudo
+- mac 用户遇到安装报错请在命令前加上 sudo
 
-# 安装依赖
+- 安装依赖
 
+```bash
 pnpm install
+```
 
-# 运行项目
+- 运行项目
 
+```bash
 pnpm run dev
+```
 
-# 打包
+- 打包
 
+```bash
 pnpm run build:pro
+```
 
-# 安装一个包
+- 安装一个包
 
+```bash
 pnpm add 包名
+```
 
-# 卸载一个包
+- 卸载一个包
 
+```bash
 pnpm remove 包名
-
-# 其他命令请看package.json
 ```
 
+- 其他命令请看 package.json
+
 ## 浏览器支持
 
 本地开发推荐使用 `Chrome 80+` 浏览器

+ 3 - 2
yudao-ui-admin-vue3/package.json

@@ -32,7 +32,7 @@
     "@zxcvbn-ts/core": "^2.0.3",
     "animate.css": "^4.1.1",
     "axios": "^0.27.2",
-    "dayjs": "^1.11.3",
+    "dayjs": "^1.11.4",
     "echarts": "^5.3.3",
     "echarts-wordcloud": "^2.0.0",
     "element-plus": "2.2.9",
@@ -93,13 +93,14 @@
     "typescript": "4.7.4",
     "unplugin-vue-define-options": "^0.6.2",
     "vite": "3.0.2",
+    "vite-plugin-compression": "^0.5.1",
     "vite-plugin-eslint": "^1.7.0",
     "vite-plugin-html": "^3.2.0",
     "vite-plugin-purge-icons": "^0.8.1",
     "vite-plugin-style-import": "^1.4.1",
     "vite-plugin-svg-icons": "^2.0.1",
     "vite-plugin-windicss": "^1.8.7",
-    "vue-tsc": "^0.38.8",
+    "vue-tsc": "^0.38.9",
     "windicss": "^3.5.6",
     "windicss-analysis": "^0.3.5"
   },

+ 0 - 0
yudao-ui-admin-vue3/src/api/infra/file/index.ts → yudao-ui-admin-vue3/src/api/infra/fileList/index.ts


+ 0 - 0
yudao-ui-admin-vue3/src/api/infra/file/types.ts → yudao-ui-admin-vue3/src/api/infra/fileList/types.ts


+ 1 - 1
yudao-ui-admin-vue3/src/api/infra/redis/types.ts

@@ -182,4 +182,4 @@ export interface RedisKeyInfo {
   timeoutType: number
   timeout: number
   memo: string
-}
+}

+ 30 - 1
yudao-ui-admin-vue3/src/components/Editor/src/Editor.vue

@@ -6,6 +6,7 @@ import { propTypes } from '@/utils/propTypes'
 import { isNumber } from '@/utils/is'
 import { ElMessage } from 'element-plus'
 import { useLocaleStore } from '@/store/modules/locale'
+import { getAccessToken, getTenantId } from '@/utils/auth'
 
 const localeStore = useLocaleStore()
 
@@ -80,12 +81,40 @@ const editorConfig = computed((): IEditorConfig => {
       },
       autoFocus: false,
       scroll: true,
+      MENU_CONF: {
+        ['uploadImage']: {
+          server: import.meta.env.VITE_UPLOAD_URL,
+          // 单个文件的最大体积限制,默认为 2M
+          maxFileSize: 2 * 1024 * 1024,
+          // 最多可上传几个文件,默认为 100
+          maxNumberOfFiles: 10,
+          // 选择文件时的类型限制,默认为 ['image/*'] 。如不想限制,则设置为 []
+          allowedFileTypes: ['image/*'],
+
+          // 自定义上传参数,例如传递验证的 token 等。参数会被添加到 formData 中,一起上传到服务端。
+          meta: {},
+          // 将 meta 拼接到 url 参数中,默认 false
+          metaWithUrl: false,
+
+          // 自定义增加 http  header
+          headers: {
+            Accept: 'image/*',
+            Authorization: 'Bearer ' + getAccessToken(),
+            'tenant-id': getTenantId()
+          },
+
+          // 跨域是否传递 cookie ,默认为 false
+          withCredentials: false,
+
+          // 超时时间,默认为 10 秒
+          timeout: 5 * 1000 // 5 秒
+        }
+      },
       uploadImgShowBase64: true
     },
     props.editorConfig || {}
   )
 })
-
 const editorStyle = computed(() => {
   return {
     height: isNumber(props.height) ? `${props.height}px` : props.height

+ 5 - 1
yudao-ui-admin-vue3/src/components/Table/src/Table.vue

@@ -297,6 +297,10 @@ export default defineComponent({
 <style lang="less" scoped>
 :deep(.el-button.is-text) {
   margin-left: 0;
-  padding: 8px 10px;
+  padding: 8px 4px;
+}
+:deep(.el-button.is-link) {
+  margin-left: 0;
+  padding: 8px 4px;
 }
 </style>

+ 1 - 1
yudao-ui-admin-vue3/src/components/TagsView/src/TagsView.vue

@@ -455,7 +455,7 @@ watch(
         class="w-[var(--tags-view-height)] h-[var(--tags-view-height)] text-center leading-[var(--tags-view-height)] cursor-pointer block"
       >
         <Icon
-          icon="ep:setting"
+          icon="ep:menu"
           :color="appStore.getIsDark ? 'var(--el-text-color-regular)' : '#333'"
         />
       </span>

+ 3 - 2
yudao-ui-admin-vue3/src/components/UserInfo/src/UserInfo.vue

@@ -7,6 +7,7 @@ import { resetRouter } from '@/router'
 import { useRouter } from 'vue-router'
 import { useDesign } from '@/hooks/web/useDesign'
 import { useTagsViewStore } from '@/store/modules/tagsView'
+import avatarImg from '@/assets/imgs/avatar.gif'
 
 const tagsViewStore = useTagsViewStore()
 
@@ -22,9 +23,9 @@ const { push, replace } = useRouter()
 
 const user = wsCache.get('user')
 
-const avatar = user?.user?.avatar ? user.user.avatar : '@/assets/imgs/avatar.gif'
+const avatar = user.user.avatar ? user.user.avatar : avatarImg
 
-const userName = user?.user?.nickname ? user.user.nickname : 'Admin'
+const userName = user.user.nickname ? user.user.nickname : 'Admin'
 
 const loginOut = () => {
   ElMessageBox.confirm(t('common.loginOutMessage'), t('common.reminder'), {

+ 24 - 7
yudao-ui-admin-vue3/src/config/axios/index.ts

@@ -4,6 +4,8 @@ import qs from 'qs'
 import { config } from '@/config/axios/config'
 import { getAccessToken, getRefreshToken, getTenantId } from '@/utils/auth'
 import errorCode from './errorCode'
+import { useI18n } from '@/hooks/web/useI18n'
+const { t } = useI18n()
 
 const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE
 const BASE_URL = import.meta.env.VITE_BASE_URL
@@ -18,8 +20,11 @@ const ignoreMsgs = [
 // 是否显示重新登录
 export const isRelogin = { show: false }
 // Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现
+// 请求队列
+// const requestList = []
 // 是否正在刷新中
 let isRefreshToken = false
+
 export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH]
 
 // 创建axios实例
@@ -95,13 +100,17 @@ service.interceptors.response.use(
         if (!getRefreshToken()) {
           return handleAuthorized()
         }
+        // 2. 进行刷新访问令牌
+        // TODO: 引入refreshToken会循环依赖报错
       }
     } else if (code === 500) {
-      ElMessage.error(msg)
+      ElMessage.error(t('sys.api.errMsg500'))
       return Promise.reject(new Error(msg))
     } else if (code === 901) {
       ElMessage.error(
-        '<div>演示模式,无法进行写操作</div>' +
+        '<div>' +
+          t('sys.api.errMsg901') +
+          '</div>' +
           '<div> &nbsp; </div>' +
           '<div>参考 https://doc.iocoder.cn/ 教程</div>' +
           '<div> &nbsp; </div>' +
@@ -124,16 +133,24 @@ service.interceptors.response.use(
   },
   (error: AxiosError) => {
     console.log('err' + error) // for debug
-    ElMessage.error(error.message)
+    let { message } = error
+    if (message === 'Network Error') {
+      message = t('sys.api.errorMessage')
+    } else if (message.includes('timeout')) {
+      message = t('sys.api.apiTimeoutMessage')
+    } else if (message.includes('Request failed with status code')) {
+      message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3)
+    }
+    ElMessage.error(message)
     return Promise.reject(error)
   }
 )
 function handleAuthorized() {
   if (!isRelogin.show) {
     isRelogin.show = true
-    ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', {
-      confirmButtonText: '重新登录',
-      cancelButtonText: '取消',
+    ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), {
+      confirmButtonText: t('login.relogin'),
+      cancelButtonText: t('common.cancel'),
       type: 'warning'
     })
       .then(() => {
@@ -143,6 +160,6 @@ function handleAuthorized() {
         isRelogin.show = false
       })
   }
-  return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+  return Promise.reject(t('sys.api.timeoutMessage'))
 }
 export { service }

+ 4 - 0
yudao-ui-admin-vue3/src/locales/en.ts

@@ -108,7 +108,10 @@ export default {
     login: 'Sign in',
     relogin: 'Sign in again',
     otherLogin: 'Sign in with',
+    register: 'Register',
+    checkPassword: 'Confirm password',
     remember: 'Remember me',
+    hasUser: 'Existing account? Go to login',
     forgetPassword: 'Forget password?',
     tenantNamePlaceholder: 'Please Enter Tenant Name',
     usernamePlaceholder: 'Please Enter Username',
@@ -121,6 +124,7 @@ export default {
     getSmsCode: 'Get SMS Code',
     btnMobile: 'Mobile sign in',
     btnQRCode: 'QR code sign in',
+    qrcode: 'Scan the QR code to log in',
     btnRegister: 'Sign up',
     SmsSendMsg: 'code has been sent'
   },

+ 4 - 0
yudao-ui-admin-vue3/src/locales/zh-CN.ts

@@ -108,7 +108,10 @@ export default {
     login: '登录',
     relogin: '重新登录',
     otherLogin: '其他登录方式',
+    register: '注册',
+    checkPassword: '确认密码',
     remember: '记住我',
+    hasUser: '已有账号?去登录',
     forgetPassword: '忘记密码?',
     tenantNamePlaceholder: '请输入租户名称',
     usernamePlaceholder: '请输入用户名',
@@ -121,6 +124,7 @@ export default {
     getSmsCode: '获取验证码',
     btnMobile: '手机登录',
     btnQRCode: '二维码登录',
+    qrcode: '扫描二维码登录',
     btnRegister: '注册',
     SmsSendMsg: '验证码已发送'
   },

+ 0 - 45
yudao-ui-admin-vue3/src/router/modules/error.ts

@@ -1,45 +0,0 @@
-import { Layout } from '@/utils/routerHelper'
-import { useI18n } from '@/hooks/web/useI18n'
-const { t } = useI18n()
-
-const errorRouter = [
-  {
-    path: '/error',
-    component: Layout,
-    redirect: '/error/404',
-    name: 'Error',
-    meta: {
-      title: t('router.errorPage'),
-      icon: 'ci:error',
-      alwaysShow: true
-    },
-    children: [
-      {
-        path: '404-demo',
-        component: () => import('@/views/Error/404.vue'),
-        name: '404Demo',
-        meta: {
-          title: '404'
-        }
-      },
-      {
-        path: '403-demo',
-        component: () => import('@/views/Error/403.vue'),
-        name: '403Demo',
-        meta: {
-          title: '403'
-        }
-      },
-      {
-        path: '500-demo',
-        component: () => import('@/views/Error/500.vue'),
-        name: '500Demo',
-        meta: {
-          title: '500'
-        }
-      }
-    ]
-  }
-]
-
-export default errorRouter

+ 5 - 6
yudao-ui-admin-vue3/src/router/modules/remaining.ts

@@ -43,7 +43,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
   {
     path: '/user',
     component: Layout,
-    name: 'User',
+    name: 'UserInfo',
     meta: {
       hidden: true
     },
@@ -53,9 +53,10 @@ const remainingRouter: AppRouteRecordRaw[] = [
         component: () => import('@/views/Profile/Index.vue'),
         name: 'Profile',
         meta: {
+          canTo: true,
           hidden: true,
+          noTagsView: true,
           icon: 'ep:user',
-          canTo: true,
           title: t('common.profile')
         }
       }
@@ -64,7 +65,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
   {
     path: '/codegen',
     component: Layout,
-    name: 'Codegen',
+    name: 'CodegenEdit',
     meta: {
       hidden: true
     },
@@ -74,7 +75,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
         component: () => import('@/views/infra/codegen/EditTable.vue'),
         name: 'EditTable',
         meta: {
-          noTagsView: true,
           noCache: true,
           hidden: true,
           canTo: true,
@@ -88,7 +88,7 @@ const remainingRouter: AppRouteRecordRaw[] = [
   {
     path: '/job',
     component: Layout,
-    name: 'Job',
+    name: 'JobL',
     meta: {
       hidden: true
     },
@@ -98,7 +98,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
         component: () => import('@/views/infra/job/JobLog.vue'),
         name: 'JobLog',
         meta: {
-          noTagsView: true,
           noCache: true,
           hidden: true,
           canTo: true,

+ 7 - 4
yudao-ui-admin-vue3/src/views/Login/Login.vue

@@ -1,6 +1,5 @@
 <script setup lang="ts">
-import { LoginForm } from './components'
-import { MobileForm } from './components'
+import { LoginForm, MobileForm, RegisterForm, QrCodeForm } from './components'
 import { ThemeSwitch } from '@/components/ThemeSwitch'
 import { LocaleDropdown } from '@/components/LocaleDropdown'
 import { useI18n } from '@/hooks/web/useI18n'
@@ -8,13 +7,13 @@ import { underlineToHump } from '@/utils'
 import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 
+const { t } = useI18n()
+
 const { getPrefixCls } = useDesign()
 
 const prefixCls = getPrefixCls('login')
 
 const appStore = useAppStore()
-
-const { t } = useI18n()
 </script>
 
 <template>
@@ -67,6 +66,10 @@ const { t } = useI18n()
             <LoginForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
             <!-- 手机登录 -->
             <MobileForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
+            <!-- 二维码登录 -->
+            <QrCodeForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
+            <!-- 注册 -->
+            <RegisterForm class="p-20px h-auto m-auto <xl:(rounded-3xl light:bg-white)" />
           </div>
         </Transition>
       </div>

+ 50 - 18
yudao-ui-admin-vue3/src/views/Login/components/LoginForm.vue

@@ -13,7 +13,14 @@ import {
 } from 'element-plus'
 import { reactive, ref, unref, onMounted, computed, watch } from 'vue'
 import * as LoginApi from '@/api/login'
-import { setToken, setTenantId } from '@/utils/auth'
+import {
+  setToken,
+  setTenantId,
+  getUsername,
+  getRememberMe,
+  getPassword,
+  getTenantName
+} from '@/utils/auth'
 import { useUserStoreWithOut } from '@/store/modules/user'
 import { useCache } from '@/hooks/web/useCache'
 import { usePermissionStore } from '@/store/modules/permission'
@@ -40,7 +47,6 @@ const iconHouse = useIcon({ icon: 'ep:house' })
 const iconAvatar = useIcon({ icon: 'ep:avatar' })
 const iconLock = useIcon({ icon: 'ep:lock' })
 const iconCircleCheck = useIcon({ icon: 'ep:circle-check' })
-const remember = ref(false)
 const LoginRules = {
   tenantName: [required],
   username: [required],
@@ -61,6 +67,7 @@ const loginData = reactive({
     tenantName: '芋道源码',
     username: 'admin',
     password: 'admin123',
+    rememberMe: false,
     code: '',
     uuid: ''
   }
@@ -77,6 +84,20 @@ const getTenantId = async () => {
   const res = await LoginApi.getTenantIdByNameApi(loginData.loginForm.tenantName)
   setTenantId(res)
 }
+// 记住我
+const getCookie = () => {
+  const username = getUsername()
+  const password = getPassword()
+  const rememberMe = getRememberMe()
+  const tenantName = getTenantName()
+  loginData.loginForm = {
+    ...loginData.loginForm,
+    username: username ? username : loginData.loginForm.username,
+    password: password ? password : loginData.loginForm.password,
+    rememberMe: rememberMe ? getRememberMe() : false,
+    tenantName: tenantName ? tenantName : loginData.loginForm.tenantName
+  }
+}
 // 登录
 const handleLogin = async () => {
   await getTenantId()
@@ -103,14 +124,13 @@ const getRoutes = async () => {
   // 后端过滤菜单
   const res = await LoginApi.getAsyncRoutesApi()
   wsCache.set('roleRouters', res)
-  await permissionStore.generateRoutes(res).catch(() => {})
+  await permissionStore.generateRoutes(res)
   permissionStore.getAddRouters.forEach((route) => {
     addRoute(route as RouteRecordRaw) // 动态添加可访问路由表
   })
   permissionStore.setIsAddRouters(true)
   push({ path: redirect.value || permissionStore.addRouters[0].path })
 }
-
 watch(
   () => currentRoute.value,
   (route: RouteLocationNormalizedLoaded) => {
@@ -120,8 +140,9 @@ watch(
     immediate: true
   }
 )
-onMounted(() => {
-  getCode()
+onMounted(async () => {
+  await getCode()
+  getCookie()
 })
 </script>
 <template>
@@ -165,7 +186,7 @@ onMounted(() => {
           <el-input
             v-model="loginData.loginForm.password"
             type="password"
-            :placeholder="t('login.password')"
+            :placeholder="t('login.passwordPlaceholder')"
             show-password
             @keyup.enter="handleLogin"
             :prefix-icon="iconLock"
@@ -178,7 +199,7 @@ onMounted(() => {
             <el-col :span="14">
               <el-input
                 v-model="loginData.loginForm.code"
-                :placeholder="t('login.code')"
+                :placeholder="t('login.codePlaceholder')"
                 @keyup.enter="handleLogin"
                 :prefix-icon="iconCircleCheck"
                 style="width: 90%"
@@ -199,7 +220,9 @@ onMounted(() => {
         <el-form-item>
           <el-row justify="space-between" style="width: 100%">
             <el-col :span="6">
-              <el-checkbox v-model="remember">{{ t('login.remember') }}</el-checkbox>
+              <el-checkbox v-model="loginData.loginForm.rememberMe">
+                {{ t('login.remember') }}
+              </el-checkbox>
             </el-col>
             <el-col :span="12" :offset="6">
               <el-link type="primary" style="float: right">{{ t('login.forgetPassword') }}</el-link>
@@ -209,24 +232,28 @@ onMounted(() => {
       </el-col>
       <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
         <el-form-item>
-          <el-button :loading="loginLoading" type="primary" class="w-[100%]" @click="handleLogin">{{
-            t('login.login')
-          }}</el-button>
+          <el-button :loading="loginLoading" type="primary" class="w-[100%]" @click="handleLogin">
+            {{ t('login.login') }}
+          </el-button>
         </el-form-item>
       </el-col>
       <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
         <el-form-item>
           <el-row justify="space-between" style="width: 100%" :gutter="5">
             <el-col :span="8">
-              <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.MOBILE)">{{
-                t('login.btnMobile')
-              }}</el-button>
+              <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.MOBILE)">
+                {{ t('login.btnMobile') }}
+              </el-button>
             </el-col>
             <el-col :span="8">
-              <el-button class="w-[100%]">{{ t('login.btnQRCode') }}</el-button>
+              <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.QR_CODE)">
+                {{ t('login.btnQRCode') }}
+              </el-button>
             </el-col>
             <el-col :span="8">
-              <el-button class="w-[100%]">{{ t('login.btnRegister') }}</el-button>
+              <el-button class="w-[100%]" @click="setLoginState(LoginStateEnum.REGISTER)">
+                {{ t('login.btnRegister') }}
+              </el-button>
             </el-col>
           </el-row>
         </el-form-item>
@@ -254,7 +281,7 @@ onMounted(() => {
               class="cursor-pointer anticon"
             />
             <Icon
-              icon="ant-design:weibo-circle-filled"
+              icon="ant-design:dingtalk-circle-filled"
               :size="iconSize"
               :color="iconColor"
               class="cursor-pointer anticon"
@@ -266,6 +293,11 @@ onMounted(() => {
   </el-form>
 </template>
 <style lang="less" scoped>
+:deep(.anticon) {
+  &:hover {
+    color: var(--el-color-primary) !important;
+  }
+}
 .login-code {
   width: 100%;
   height: 38px;

+ 14 - 21
yudao-ui-admin-vue3/src/views/Login/components/MobileForm.vue

@@ -67,27 +67,21 @@ const redirect = ref<string>('')
 const getSmsCode = async () => {
   await getTenantId()
   smsVO.smsCode.mobile = loginData.loginForm.mobileNumber
-  console.log('getSmsCode begin:', smsVO.smsCode)
-  await sendSmsCodeApi(smsVO.smsCode)
-    .then(async (res) => {
-      // 提示验证码发送成功
-      ElMessage({
-        type: 'success',
-        message: t('login.SmsSendMsg')
-      })
-      console.log('res', res)
-      // 设置倒计时
-      mobileCodeTimer.value = 60
-      let msgTimer = setInterval(() => {
-        mobileCodeTimer.value = mobileCodeTimer.value - 1
-        if (mobileCodeTimer.value <= 0) {
-          clearInterval(msgTimer)
-        }
-      }, 1000)
-    })
-    .catch(() => {
-      console.log('error')
+  await sendSmsCodeApi(smsVO.smsCode).then(async () => {
+    // 提示验证码发送成功
+    ElMessage({
+      type: 'success',
+      message: t('login.SmsSendMsg')
     })
+    // 设置倒计时
+    mobileCodeTimer.value = 60
+    let msgTimer = setInterval(() => {
+      mobileCodeTimer.value = mobileCodeTimer.value - 1
+      if (mobileCodeTimer.value <= 0) {
+        clearInterval(msgTimer)
+      }
+    }, 1000)
+  })
 }
 watch(
   () => currentRoute.value,
@@ -126,7 +120,6 @@ const signIn = async () => {
 // 获取路由
 const getRoutes = async () => {
   // 后端过滤菜单
-  // TODO @jinz:这块 getRoutes 的代码,是不是可以统一到 store 里,类似 ruoyi-vue 的做法,可能要找作者沟通下
   const routers = await getAsyncRoutesApi()
   wsCache.set('roleRouters', routers)
   await permissionStore.generateRoutes(routers).catch(() => {})

+ 34 - 0
yudao-ui-admin-vue3/src/views/Login/components/QrCodeForm.vue

@@ -0,0 +1,34 @@
+<script setup lang="ts">
+import { computed, unref } from 'vue'
+import { ElRow, ElCol, ElCard, ElDivider } from 'element-plus'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useLoginState, LoginStateEnum } from './useLogin'
+import LoginFormTitle from './LoginFormTitle.vue'
+import { Qrcode } from '@/components/Qrcode'
+import logoImg from '@/assets/imgs/logo.png'
+
+const { t } = useI18n()
+const { handleBackLogin, getLoginState } = useLoginState()
+const getShow = computed(() => unref(getLoginState) === LoginStateEnum.QR_CODE)
+</script>
+
+<template>
+  <el-row v-show="getShow" style="maring-left: -10px; maring-right: -10px">
+    <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
+      <LoginFormTitle style="width: 100%" />
+    </el-col>
+    <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
+      <el-card shadow="hover" class="mb-10px text-center">
+        <Qrcode :logo="logoImg" />
+      </el-card>
+    </el-col>
+    <el-divider class="enter-x">{{ t('login.qrcode') }}</el-divider>
+    <el-col :span="24" style="padding-left: 10px; padding-right: 10px">
+      <div class="w-[100%] mt-15px">
+        <el-button class="w-[100%]" @click="handleBackLogin">
+          {{ t('sys.login.backSignIn') }}
+        </el-button>
+      </div>
+    </el-col>
+  </el-row>
+</template>

+ 141 - 0
yudao-ui-admin-vue3/src/views/Login/components/RegisterForm.vue

@@ -0,0 +1,141 @@
+<script setup lang="ts">
+import { Form } from '@/components/Form'
+import { computed, reactive, ref, unref } from 'vue'
+import { useI18n } from '@/hooks/web/useI18n'
+import { useForm } from '@/hooks/web/useForm'
+import { ElInput, FormRules } from 'element-plus'
+import { useValidator } from '@/hooks/web/useValidator'
+import { useLoginState, LoginStateEnum } from './useLogin'
+import LoginFormTitle from './LoginFormTitle.vue'
+
+const { register, elFormRef } = useForm()
+const { handleBackLogin, getLoginState } = useLoginState()
+const getShow = computed(() => unref(getLoginState) === LoginStateEnum.REGISTER)
+const { t } = useI18n()
+
+const { required } = useValidator()
+
+const schema = reactive<FormSchema[]>([
+  {
+    field: 'title',
+    colProps: {
+      span: 24
+    }
+  },
+  {
+    field: 'username',
+    label: t('login.username'),
+    value: '',
+    component: 'Input',
+    colProps: {
+      span: 24
+    },
+    componentProps: {
+      placeholder: t('login.usernamePlaceholder')
+    }
+  },
+  {
+    field: 'password',
+    label: t('login.password'),
+    value: '',
+    component: 'InputPassword',
+    colProps: {
+      span: 24
+    },
+    componentProps: {
+      style: {
+        width: '100%'
+      },
+      strength: true,
+      placeholder: t('login.passwordPlaceholder')
+    }
+  },
+  {
+    field: 'check_password',
+    label: t('login.checkPassword'),
+    value: '',
+    component: 'InputPassword',
+    colProps: {
+      span: 24
+    },
+    componentProps: {
+      style: {
+        width: '100%'
+      },
+      strength: true,
+      placeholder: t('login.passwordPlaceholder')
+    }
+  },
+  {
+    field: 'code',
+    label: t('login.code'),
+    colProps: {
+      span: 24
+    }
+  },
+  {
+    field: 'register',
+    colProps: {
+      span: 24
+    }
+  }
+])
+
+const rules: FormRules = {
+  username: [required()],
+  password: [required()],
+  check_password: [required()],
+  code: [required()]
+}
+
+const loading = ref(false)
+
+const loginRegister = async () => {
+  const formRef = unref(elFormRef)
+  formRef?.validate(async (valid) => {
+    if (valid) {
+      try {
+        loading.value = true
+      } finally {
+        loading.value = false
+      }
+    }
+  })
+}
+</script>
+
+<template>
+  <Form
+    :schema="schema"
+    :rules="rules"
+    label-position="top"
+    hide-required-asterisk
+    size="large"
+    v-show="getShow"
+    class="dark:(border-1 border-[var(--el-border-color)] border-solid)"
+    @register="register"
+  >
+    <template #title>
+      <LoginFormTitle style="width: 100%" />
+    </template>
+
+    <template #code="form">
+      <div class="w-[100%] flex">
+        <el-input v-model="form['code']" :placeholder="t('login.codePlaceholder')" />
+      </div>
+    </template>
+
+    <template #register>
+      <div class="w-[100%]">
+        <el-button type="primary" class="w-[100%]" :loading="loading" @click="loginRegister">
+          {{ t('login.register') }}
+        </el-button>
+      </div>
+      <div class="w-[100%] mt-15px">
+        <el-button class="w-[100%]" @click="handleBackLogin">
+          {{ t('login.hasUser') }}
+        </el-button>
+      </div>
+    </template>
+  </Form>
+</template>

+ 3 - 1
yudao-ui-admin-vue3/src/views/Login/components/index.ts

@@ -1,5 +1,7 @@
 import LoginForm from './LoginForm.vue'
 import MobileForm from './MobileForm.vue'
 import LoginFormTitle from './LoginFormTitle.vue'
+import RegisterForm from './RegisterForm.vue'
+import QrCodeForm from './QrCodeForm.vue'
 
-export { LoginForm, MobileForm, LoginFormTitle }
+export { LoginForm, MobileForm, LoginFormTitle, RegisterForm, QrCodeForm }

+ 1 - 1
yudao-ui-admin-vue3/src/views/infra/apiAccessLog/index.vue

@@ -69,7 +69,7 @@ getList()
           v-hasPermi="['infra:api-access-log:query']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/infra/apiErrorLog/index.vue

@@ -96,7 +96,7 @@ getList()
           v-hasPermi="['infra:api-error-log:export']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -105,7 +105,7 @@ getList()
           v-hasPermi="['infra:api-error-log:update-status']"
           @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.DONE, '已处理')"
         >
-          <Icon icon="ep:cpu" class="mr-5px" /> 已处理
+          <Icon icon="ep:cpu" class="mr-1px" /> 已处理
         </el-button>
         <el-button
           link
@@ -114,7 +114,7 @@ getList()
           v-hasPermi="['infra:api-error-log:update-status']"
           @click="handleProcessClick(row, InfraApiErrorLogProcessStatusEnum.IGNORE, '已忽略')"
         >
-          <Icon icon="ep:mute-notification" class="mr-5px" /> 已忽略
+          <Icon icon="ep:mute-notification" class="mr-1px" /> 已忽略
         </el-button>
       </template>
     </Table>

+ 5 - 5
yudao-ui-admin-vue3/src/views/infra/codegen/index.vue

@@ -100,7 +100,7 @@ getList()
           v-hasPermi="['infra:codegen:preview']"
           @click="handlePreview(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.preview') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.preview') }}
         </el-button>
         <el-button
           link
@@ -108,7 +108,7 @@ getList()
           v-hasPermi="['infra:codegen:update']"
           @click="handleEditTable(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -116,7 +116,7 @@ getList()
           v-hasPermi="['infra:codegen:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
         <el-button
           link
@@ -124,7 +124,7 @@ getList()
           v-hasPermi="['infra:codegen:update']"
           @click="handleSynchDb(row)"
         >
-          <Icon icon="ep:refresh" class="mr-5px" /> {{ t('action.sync') }}
+          <Icon icon="ep:refresh" class="mr-1px" /> {{ t('action.sync') }}
         </el-button>
         <el-button
           link
@@ -132,7 +132,7 @@ getList()
           v-hasPermi="['infra:codegen:download']"
           @click="handleGenTable(row)"
         >
-          <Icon icon="ep:download" class="mr-5px" /> {{ t('action.generate') }}
+          <Icon icon="ep:download" class="mr-1px" /> {{ t('action.generate') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/infra/config/index.vue

@@ -142,7 +142,7 @@ getList()
           v-hasPermi="['infra:config:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -150,7 +150,7 @@ getList()
           v-hasPermi="['infra:config:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -158,7 +158,7 @@ getList()
           v-hasPermi="['infra:config:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/infra/dataSourceConfig/index.vue

@@ -106,7 +106,7 @@ onMounted(async () => {
           v-hasPermi="['infra:data-source-config:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -114,7 +114,7 @@ onMounted(async () => {
           v-hasPermi="['infra:data-source-config:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -122,7 +122,7 @@ onMounted(async () => {
           v-hasPermi="['infra:data-source-config:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 5 - 5
yudao-ui-admin-vue3/src/views/infra/fileConfig/index.vue

@@ -142,7 +142,7 @@ getList()
           v-hasPermi="['infra:file-config:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -150,7 +150,7 @@ getList()
           v-hasPermi="['infra:file-config:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -158,7 +158,7 @@ getList()
           v-hasPermi="['infra:file-config:update']"
           @click="handleMaster(row)"
         >
-          <Icon icon="ep:flag" class="mr-5px" /> 主配置
+          <Icon icon="ep:flag" class="mr-1px" /> 主配置
         </el-button>
         <el-button
           link
@@ -166,7 +166,7 @@ getList()
           v-hasPermi="['infra:file-config:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:share" class="mr-5px" /> {{ t('action.test') }}
+          <Icon icon="ep:share" class="mr-1px" /> {{ t('action.test') }}
         </el-button>
         <el-button
           link
@@ -174,7 +174,7 @@ getList()
           v-hasPermi="['infra:file-config:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 0 - 0
yudao-ui-admin-vue3/src/views/infra/file/fileList.data.ts → yudao-ui-admin-vue3/src/views/infra/fileList/fileList.data.ts


+ 9 - 9
yudao-ui-admin-vue3/src/views/infra/file/index.vue → yudao-ui-admin-vue3/src/views/infra/fileList/index.vue

@@ -4,11 +4,11 @@ import dayjs from 'dayjs'
 import { ElMessage, ElUpload, UploadInstance, UploadRawFile, ElImage } from 'element-plus'
 import { useTable } from '@/hooks/web/useTable'
 import { useI18n } from '@/hooks/web/useI18n'
-import type { FileVO } from '@/api/infra/file/types'
+import type { FileVO } from '@/api/infra/fileList/types'
 import { allSchemas } from './fileList.data'
-import * as FileApi from '@/api/infra/file'
-import { useCache } from '@/hooks/web/useCache'
-const { wsCache } = useCache()
+import * as FileApi from '@/api/infra/fileList'
+import { getAccessToken, getTenantId } from '@/utils/auth'
+
 const { t } = useI18n() // 国际化
 
 // ========== 列表相关 ==========
@@ -29,7 +29,7 @@ const uploadHeaders = ref()
 const beforeUpload = (file: UploadRawFile) => {
   const isImg = file.type === 'image/jpeg' || 'image/gif' || 'image/png'
   const isLt5M = file.size / 1024 / 1024 < 5
-  if (!isImg) ElMessage.error('上传文件只能是 xls / xlsx 格式!')
+  if (!isImg) ElMessage.error('上传文件只能是 jpeg / gif / png 格式!')
   if (!isLt5M) ElMessage.error('上传文件大小不能超过 5MB!')
   return isImg && isLt5M
 }
@@ -40,8 +40,8 @@ const beforeUpload = (file: UploadRawFile) => {
 // 文件上传
 const submitFileForm = () => {
   uploadHeaders.value = {
-    Authorization: 'Bearer ' + wsCache.get('ACCESS_TOKEN'),
-    'tenant-id': wsCache.get('tenantId')
+    Authorization: 'Bearer ' + getAccessToken(),
+    'tenant-id': getTenantId()
   }
   uploadDisabled.value = true
   uploadRef.value!.submit()
@@ -122,7 +122,7 @@ getList()
       </template>
       <template #action="{ row }">
         <el-button link type="primary" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -130,7 +130,7 @@ getList()
           v-hasPermi="['infra:file:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 1 - 1
yudao-ui-admin-vue3/src/views/infra/job/JobLog.vue

@@ -96,7 +96,7 @@ onMounted(() => {
       </template>
       <template #action="{ row }">
         <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
       </template>
     </Table>

+ 5 - 5
yudao-ui-admin-vue3/src/views/infra/job/index.vue

@@ -158,19 +158,19 @@ getList()
       </template>
       <template #action="{ row }">
         <el-button link type="primary" v-hasPermi="['infra:job:update']" @click="handleUpdate(row)">
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button link type="primary" v-hasPermi="['infra:job:delete']" @click="handleDelete(row)">
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
         <el-button link type="primary" v-hasPermi="['infra:job:trigger']" @click="handleRun(row)">
-          <Icon icon="ep:view" class="mr-5px" /> 执行一次
+          <Icon icon="ep:view" class="mr-1px" /> 执行一次
         </el-button>
         <el-button link type="primary" v-hasPermi="['infra:job:query']" @click="handleJobLog(row)">
-          <Icon icon="ep:view" class="mr-5px" /> 调度日志
+          <Icon icon="ep:view" class="mr-1px" /> 调度日志
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/pay/app/index.vue

@@ -139,7 +139,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -147,7 +147,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -155,7 +155,7 @@ getList()
           v-hasPermi="['system:post:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/pay/merchant/index.vue

@@ -139,7 +139,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -147,7 +147,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -155,7 +155,7 @@ getList()
           v-hasPermi="['system:post:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/pay/order/index.vue

@@ -128,13 +128,13 @@ getList()
       </template>
       <template #action="{ row }">
         <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleUpdate(row)">
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button link type="primary" v-hasPermi="['pay:order:update']" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button link type="primary" v-hasPermi="['pay:order:delete']" @click="handleDelete(row)">
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 2 - 2
yudao-ui-admin-vue3/src/views/pay/refund/index.vue

@@ -89,7 +89,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -97,7 +97,7 @@ getList()
           v-hasPermi="['system:post:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 15 - 9
yudao-ui-admin-vue3/src/views/system/dept/index.vue

@@ -1,8 +1,8 @@
 <script setup lang="ts">
 import { useI18n } from '@/hooks/web/useI18n'
-import { ElCard, ElTree, ElTreeSelect, ElMessage, ElMessageBox } from 'element-plus'
+import { ElInput, ElCard, ElTree, ElTreeSelect, ElMessage, ElMessageBox } from 'element-plus'
 import { handleTree } from '@/utils/tree'
-import { onMounted, ref, unref } from 'vue'
+import { onMounted, ref, unref, watch } from 'vue'
 import * as DeptApi from '@/api/system/dept'
 import { Form, FormExpose } from '@/components/Form'
 import { modelSchema } from './dept.data'
@@ -28,6 +28,7 @@ const deptParentId = ref(0) // 上级ID
 const formRef = ref<FormExpose>()
 
 // ========== 创建部门树结构 ==========
+const filterText = ref('')
 const deptOptions = ref([]) // 树形结构
 const treeRef = ref<InstanceType<typeof ElTree>>()
 const getTree = async () => {
@@ -38,9 +39,13 @@ const filterNode = (value: string, data: Tree) => {
   if (!value) return true
   return data.name.includes(value)
 }
+watch(filterText, (val) => {
+  treeRef.value!.filter(val)
+})
 // 新增
-const handleAdd = () => {
+const handleAdd = (data: { id: number }) => {
   // 重置表单
+  deptParentId.value = data.id
   formTitle.value = '新增部门'
   unref(formRef)?.getElFormRef()?.resetFields()
   showForm.value = true
@@ -73,7 +78,7 @@ const submitForm = async () => {
   // 提交请求
   try {
     const data = unref(formRef)?.formModel as DeptVO
-    deptParentId.value = data.parentId
+    data.parentId = deptParentId.value
     // TODO: 表单提交待完善
     if (formTitle.value.startsWith('新增')) {
       await DeptApi.createDeptApi(data)
@@ -104,6 +109,7 @@ onMounted(async () => {
       <div class="custom-tree-container">
         <!-- <p>部门列表</p> -->
         <!-- 操作工具栏 -->
+        <el-input v-model="filterText" placeholder="搜索部门" />
         <el-tree
           ref="treeRef"
           node-key="id"
@@ -111,20 +117,20 @@ onMounted(async () => {
           :props="defaultProps"
           :highlight-current="true"
           default-expand-all
-          :filter-method="filterNode"
+          :filter-node-method="filterNode"
         >
           <template #default="{ node, data }">
             <span class="custom-tree-node">
               <span>{{ node.label }}</span>
               <span>
-                <el-button link v-hasPermi="['system:dept:create']" @click="handleAdd()">
-                  <Icon icon="ep:plus" class="mr-5px" />
+                <el-button link v-hasPermi="['system:dept:create']" @click="handleAdd(data)">
+                  <Icon icon="ep:plus" class="mr-1px" />
                 </el-button>
                 <el-button link v-hasPermi="['system:dept:update']" @click="handleUpdate(data)">
-                  <Icon icon="ep:edit" class="mr-5px" />
+                  <Icon icon="ep:edit" class="mr-1px" />
                 </el-button>
                 <el-button link v-hasPermi="['system:dept:delete']" @click="handleDelete(data)">
-                  <Icon icon="ep:delete" class="mr-5px" />
+                  <Icon icon="ep:delete" class="mr-1px" />
                 </el-button>
               </span>
             </span>

+ 5 - 5
yudao-ui-admin-vue3/src/views/system/dict/index.vue

@@ -189,7 +189,7 @@ onMounted(async () => {
             v-hasPermi="['system:dict:update']"
             @click="handleTypeUpdate(row)"
           >
-            <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+            <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
           </el-button>
           <el-button
             link
@@ -197,7 +197,7 @@ onMounted(async () => {
             v-hasPermi="['system:dict:delete']"
             @click="handleTypeDelete(row)"
           >
-            <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+            <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
           </el-button>
         </template>
       </Table>
@@ -221,7 +221,7 @@ onMounted(async () => {
         <!-- 操作工具栏 -->
         <div class="mb-10px">
           <el-button type="primary" v-hasPermi="['system:dict:create']" @click="handleDataCreate">
-            <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
+            <Icon icon="ep:zoom-in" class="mr-1px" /> {{ t('action.add') }}
           </el-button>
         </div>
         <Table
@@ -246,7 +246,7 @@ onMounted(async () => {
               v-hasPermi="['system:dict:update']"
               @click="handleDataUpdate(row)"
             >
-              <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+              <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
             </el-button>
             <el-button
               link
@@ -254,7 +254,7 @@ onMounted(async () => {
               v-hasPermi="['system:dict:delete']"
               @click="handleDataDelete(row)"
             >
-              <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+              <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
             </el-button>
           </template>
         </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/errorCode/index.vue

@@ -125,7 +125,7 @@ getList()
           v-hasPermi="['system:error-code:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -133,7 +133,7 @@ getList()
           v-hasPermi="['system:error-code:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -141,7 +141,7 @@ getList()
           v-hasPermi="['system:error-code:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 1 - 1
yudao-ui-admin-vue3/src/views/system/loginlog/index.vue

@@ -54,7 +54,7 @@ getList()
       </template>
       <template #action="{ row }">
         <el-button link type="primary" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/menu/index.vue

@@ -195,7 +195,7 @@ onMounted(async () => {
   <ContentWrap>
     <div class="mb-10px">
       <el-button type="primary" v-hasPermi="['system:notice:create']" @click="handleCreate">
-        <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }}
+        <Icon icon="ep:zoom-in" class="mr-1px" /> {{ t('action.add') }}
       </el-button>
     </div>
     <el-table
@@ -238,7 +238,7 @@ onMounted(async () => {
             v-hasPermi="['system:menu:update']"
             @click="handleUpdate(scope.row)"
           >
-            <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+            <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
           </el-button>
           <el-button
             link
@@ -246,7 +246,7 @@ onMounted(async () => {
             v-hasPermi="['system:menu:delete']"
             @click="handleDelete(scope.row)"
           >
-            <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+            <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
           </el-button>
         </template>
       </el-table-column>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/notice/index.vue

@@ -127,7 +127,7 @@ getList()
           v-hasPermi="['system:notice:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -135,7 +135,7 @@ getList()
           v-hasPermi="['system:notice:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -143,7 +143,7 @@ getList()
           v-hasPermi="['system:notice:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue

@@ -128,7 +128,7 @@ getList()
           v-hasPermi="['system:oauth2-client:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -136,7 +136,7 @@ getList()
           v-hasPermi="['system:oauth2-client:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -144,7 +144,7 @@ getList()
           v-hasPermi="['system:oauth2-client:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 2 - 2
yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue

@@ -58,7 +58,7 @@ getList()
       </template>
       <template #action="{ row }">
         <el-button link type="primary" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -66,7 +66,7 @@ getList()
           v-hasPermi="['system:oauth2-token:delete']"
           @click="handleForceLogout(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.logout') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.logout') }}
         </el-button>
       </template>
     </Table>

+ 1 - 1
yudao-ui-admin-vue3/src/views/system/operatelog/index.vue

@@ -72,7 +72,7 @@ getList()
       </template>
       <template #action="{ row }">
         <el-button link type="primary" @click="handleDetail(row)">
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/post/index.vue

@@ -139,7 +139,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -147,7 +147,7 @@ getList()
           v-hasPermi="['system:post:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -155,7 +155,7 @@ getList()
           v-hasPermi="['system:post:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 5 - 5
yudao-ui-admin-vue3/src/views/system/role/index.vue

@@ -191,7 +191,7 @@ getList()
           v-hasPermi="['system:role:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -199,7 +199,7 @@ getList()
           v-hasPermi="['system:role:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -207,7 +207,7 @@ getList()
           v-hasPermi="['system:permission:assign-role-menu']"
           @click="handleScope('menu', row)"
         >
-          <Icon icon="ep:basketball" class="mr-5px" /> 菜单权限
+          <Icon icon="ep:basketball" class="mr-1px" /> 菜单权限
         </el-button>
         <el-button
           link
@@ -215,7 +215,7 @@ getList()
           v-hasPermi="['system:permission:assign-role-data-scope']"
           @click="handleScope('data', row)"
         >
-          <Icon icon="ep:coin" class="mr-5px" /> 数据权限
+          <Icon icon="ep:coin" class="mr-1px" /> 数据权限
         </el-button>
         <el-button
           link
@@ -223,7 +223,7 @@ getList()
           v-hasPermi="['system:role:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/sensitiveWord/index.vue

@@ -157,7 +157,7 @@ onMounted(async () => {
           v-hasPermi="['system:post:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -165,7 +165,7 @@ onMounted(async () => {
           v-hasPermi="['system:post:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -173,7 +173,7 @@ onMounted(async () => {
           v-hasPermi="['system:post:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/sms/smsChannel/index.vue

@@ -128,7 +128,7 @@ getList()
           v-hasPermi="['system:sms-channel:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -136,7 +136,7 @@ getList()
           v-hasPermi="['system:sms-channel:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -144,7 +144,7 @@ getList()
           v-hasPermi="['system:sms-channel:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 1 - 1
yudao-ui-admin-vue3/src/views/system/sms/smsLog/index.vue

@@ -68,7 +68,7 @@ getList()
           v-hasPermi="['system:sms-channel:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
       </template>
     </Table>

+ 4 - 4
yudao-ui-admin-vue3/src/views/system/sms/smsTemplate/index.vue

@@ -146,7 +146,7 @@ getList()
           v-hasPermi="['system:sms-template:send-sms']"
           @click="handleSendSms(row)"
         >
-          <Icon icon="ep:cpu" class="mr-5px" /> {{ t('action.test') }}
+          <Icon icon="ep:cpu" class="mr-1px" /> {{ t('action.test') }}
         </el-button>
         <el-button
           link
@@ -154,7 +154,7 @@ getList()
           v-hasPermi="['system:sms-template:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -162,7 +162,7 @@ getList()
           v-hasPermi="['system:sms-template:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -170,7 +170,7 @@ getList()
           v-hasPermi="['system:sms-template:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 3 - 3
yudao-ui-admin-vue3/src/views/system/tenant/index.vue

@@ -177,7 +177,7 @@ onMounted(async () => {
           v-hasPermi="['system:tenant:update']"
           @click="handleUpdate(row)"
         >
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button
           link
@@ -185,7 +185,7 @@ onMounted(async () => {
           v-hasPermi="['system:tenant:update']"
           @click="handleDetail(row)"
         >
-          <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+          <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
         </el-button>
         <el-button
           link
@@ -193,7 +193,7 @@ onMounted(async () => {
           v-hasPermi="['system:tenant:delete']"
           @click="handleDelete(row)"
         >
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 2 - 2
yudao-ui-admin-vue3/src/views/system/tenantPackage/index.vue

@@ -147,10 +147,10 @@ onMounted(async () => {
       </template>
       <template #action="{ row }">
         <el-button link type="primary" @click="handleUpdate(row)">
-          <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+          <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
         </el-button>
         <el-button link type="primary" @click="handleDelete(row)">
-          <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+          <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
         </el-button>
       </template>
     </Table>

+ 19 - 18
yudao-ui-admin-vue3/src/views/system/user/index.vue

@@ -1,7 +1,8 @@
 <script setup lang="ts">
-import { onMounted, ref, unref } from 'vue'
+import { onMounted, ref, unref, watch } from 'vue'
 import dayjs from 'dayjs'
 import {
+  ElInput,
   ElMessage,
   ElCard,
   ElTree,
@@ -29,9 +30,8 @@ import { listSimplePostsApi } from '@/api/system/post'
 import { rules, allSchemas } from './user.data'
 import * as UserApi from '@/api/system/user'
 import download from '@/utils/download'
-import { useCache } from '@/hooks/web/useCache'
 import { CommonStatusEnum } from '@/utils/constants'
-const { wsCache } = useCache()
+import { getAccessToken, getTenantId } from '@/utils/auth'
 interface Tree {
   id: number
   name: string
@@ -55,6 +55,7 @@ const { register, tableObject, methods } = useTable<UserVO>({
 const { getList, setSearchParams, delList, exportList } = methods
 
 // ========== 创建部门树结构 ==========
+const filterText = ref('')
 const deptOptions = ref([]) // 树形结构
 const searchForm = ref<FormExpose>()
 const treeRef = ref<InstanceType<typeof ElTree>>()
@@ -73,7 +74,9 @@ const handleDeptNodeClick = (data: { [key: string]: any }) => {
   tableTitle.value = data.name
   methods.getList()
 }
-
+watch(filterText, (val) => {
+  treeRef.value!.filter(val)
+})
 // ========== CRUD 相关 ==========
 const loading = ref(false) // 遮罩层
 const actionType = ref('') // 操作按钮的类型
@@ -138,7 +141,7 @@ const submitForm = async () => {
 }
 // 改变用户状态操作
 const handleStatusChange = async (row: UserVO) => {
-  const text = row.status === CommonStatusEnum.ENABLE ? '停用' : '启用'
+  const text = row.status === CommonStatusEnum.ENABLE ? '启用' : '停用'
   ElMessageBox.confirm('确认要"' + text + '""' + row.username + '"用户吗?', t('common.reminder'), {
     confirmButtonText: t('common.ok'),
     cancelButtonText: t('common.cancel'),
@@ -146,9 +149,8 @@ const handleStatusChange = async (row: UserVO) => {
   })
     .then(async () => {
       row.status =
-        row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.DISABLE : CommonStatusEnum.ENABLE
-      const res = await UserApi.updateUserStatusApi(row.id, row.status)
-      console.info(res)
+        row.status === CommonStatusEnum.ENABLE ? CommonStatusEnum.ENABLE : CommonStatusEnum.DISABLE
+      await UserApi.updateUserStatusApi(row.id, row.status)
       ElMessage.success(text + '成功')
       await getList()
     })
@@ -159,12 +161,10 @@ const handleStatusChange = async (row: UserVO) => {
 }
 // 重置密码
 const handleResetPwd = (row: UserVO) => {
-  ElMessageBox.prompt('请输入"' + row.username + '"的新密码', '提示', {
+  ElMessageBox.prompt('请输入"' + row.username + '"的新密码', t('common.reminder'), {
     confirmButtonText: t('common.ok'),
     cancelButtonText: t('common.cancel')
   }).then(({ value }) => {
-    console.log(row.id)
-    console.log(value)
     UserApi.resetUserPwdApi(row.id, value).then(() => {
       ElMessage.success('修改成功,新密码是:' + value)
     })
@@ -215,8 +215,8 @@ const beforeExcelUpload = (file: UploadRawFile) => {
 const uploadRef = ref<UploadInstance>()
 const submitFileForm = () => {
   uploadHeaders.value = {
-    Authorization: 'Bearer ' + wsCache.get('ACCESS_TOKEN'),
-    'tenant-id': wsCache.get('tenantId')
+    Authorization: 'Bearer ' + getAccessToken(),
+    'tenant-id': getTenantId()
   }
   uploadDisabled.value = true
   uploadRef.value!.submit()
@@ -268,6 +268,7 @@ getList()
           <span>部门列表</span>
         </div>
       </template>
+      <el-input v-model="filterText" placeholder="搜索部门" />
       <el-tree
         ref="treeRef"
         node-key="id"
@@ -275,7 +276,7 @@ getList()
         :data="deptOptions"
         :props="defaultProps"
         :highlight-current="true"
-        :filter-method="filterNode"
+        :filter-node-method="filterNode"
         :expand-on-click-node="false"
         @node-click="handleDeptNodeClick"
       />
@@ -343,7 +344,7 @@ getList()
             v-hasPermi="['system:user:update']"
             @click="handleUpdate(row)"
           >
-            <Icon icon="ep:edit" class="mr-5px" /> {{ t('action.edit') }}
+            <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }}
           </el-button>
           <el-button
             link
@@ -351,7 +352,7 @@ getList()
             v-hasPermi="['system:user:update']"
             @click="handleDetail(row)"
           >
-            <Icon icon="ep:view" class="mr-5px" /> {{ t('action.detail') }}
+            <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }}
           </el-button>
           <el-button
             link
@@ -359,7 +360,7 @@ getList()
             v-hasPermi="['system:user:update-password']"
             @click="handleResetPwd(row)"
           >
-            <Icon icon="ep:key" class="mr-5px" /> 重置密码
+            <Icon icon="ep:key" class="mr-1px" /> 重置密码
           </el-button>
           <el-button
             link
@@ -367,7 +368,7 @@ getList()
             v-hasPermi="['system:user:delete']"
             @click="handleDelete(row)"
           >
-            <Icon icon="ep:delete" class="mr-5px" /> {{ t('action.del') }}
+            <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }}
           </el-button>
         </template>
       </Table>

+ 4 - 3
yudao-ui-admin-vue3/src/views/system/user/user.data.ts

@@ -7,9 +7,7 @@ import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas'
 const { t } = useI18n()
 // 表单校验
 export const rules = reactive({
-  name: [required],
-  code: [required],
-  sort: [required],
+  nickname: [required],
   status: [required]
 })
 // crudSchemas
@@ -28,6 +26,9 @@ const crudSchemas = reactive<CrudSchema[]>([
   {
     label: '用户账号',
     field: 'username',
+    form: {
+      show: false
+    },
     search: {
       show: true
     }

+ 10 - 1
yudao-ui-admin-vue3/vite.config.ts

@@ -11,6 +11,7 @@ import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
 import PurgeIcons from 'vite-plugin-purge-icons'
 import DefineOptions from 'unplugin-vue-define-options/vite'
 import { createHtmlPlugin } from 'vite-plugin-html'
+import viteCompression from 'vite-plugin-compression'
 
 // 当前执行node命令时文件夹的地址(工作目录)
 const root = process.cwd()
@@ -80,11 +81,19 @@ export default ({ command, mode }: ConfigEnv): UserConfig => {
       }),
       PurgeIcons(),
       DefineOptions(),
+      viteCompression({
+        verbose: true, // 是否在控制台输出压缩结果
+        disable: true, // 是否禁用
+        threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
+        algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
+        ext: '.gz', // 生成的压缩包后缀
+        deleteOriginFile: false //压缩后是否删除源文件
+      }),
       createHtmlPlugin({
         inject: {
           data: {
             title: env.VITE_APP_TITLE,
-            injectScript: `<script src="./inject.js"></script>`,
+            injectScript: `<script src="./inject.js"></script>`
           }
         }
       })