ソースを参照

修复服务端登录、注册、权限配置问题

tycoding 1 年間 前
コミット
f34a4f4b8e
27 ファイル変更458 行追加140 行削除
  1. 20 72
      docs/langchat.sql
  2. 3 0
      langchat-auth/src/main/java/cn/tycoding/langchat/auth/endpoint/AigcAuthEndpoint.java
  3. 28 4
      langchat-auth/src/main/java/cn/tycoding/langchat/auth/endpoint/AuthEndpoint.java
  4. 10 1
      langchat-auth/src/main/java/cn/tycoding/langchat/auth/service/GlobalExceptionTranslator.java
  5. 3 1
      langchat-common/src/main/java/cn/tycoding/langchat/common/dto/ChatReq.java
  6. 18 0
      langchat-core/src/main/java/cn/tycoding/langchat/core/provider/EmbedProvider.java
  7. 2 2
      langchat-core/src/main/java/cn/tycoding/langchat/core/service/impl/LangChatServiceImpl.java
  8. 2 9
      langchat-core/src/main/java/cn/tycoding/langchat/core/service/impl/LangDocServiceImpl.java
  9. 2 2
      langchat-server/src/main/java/cn/tycoding/langchat/aigc/endpoint/AigcChatEndpoint.java
  10. 8 0
      langchat-ui/src/api/auth.ts
  11. 1 0
      langchat-ui/src/enums/pageEnum.ts
  12. 2 1
      langchat-ui/src/router/guards.ts
  13. 15 1
      langchat-ui/src/router/index.ts
  14. 7 0
      langchat-ui/src/store/modules/asyncRoute.ts
  15. 12 3
      langchat-ui/src/store/modules/user.ts
  16. 14 12
      langchat-ui/src/views/aigc/chat/components/Chat.vue
  17. 3 1
      langchat-ui/src/views/aigc/chat/components/store/chat.d.ts
  18. 3 1
      langchat-ui/src/views/aigc/chat/components/store/useChatStore.ts
  19. 14 4
      langchat-ui/src/views/aigc/common/ModelProvider.vue
  20. 2 2
      langchat-ui/src/views/aigc/model/data.ts
  21. 13 1
      langchat-ui/src/views/login/index.vue
  22. 243 0
      langchat-ui/src/views/login/register.vue
  23. 3 0
      langchat-ui/src/views/upms/role/index.vue
  24. 2 0
      langchat-upms/src/main/java/cn/tycoding/langchat/upms/entity/SysUser.java
  25. 5 3
      langchat-upms/src/main/java/cn/tycoding/langchat/upms/service/impl/SysMenuServiceImpl.java
  26. 23 20
      langchat-upms/src/main/java/cn/tycoding/langchat/upms/service/impl/SysUserServiceImpl.java
  27. 0 0
      langchat-upms/src/main/resources/mapper/SysMenuMapper.xml

+ 20 - 72
docs/langchat.sql

@@ -490,77 +490,6 @@ CREATE TABLE `sys_log` (
                            PRIMARY KEY (`id`) USING BTREE
 ) ENGINE=InnoDB AUTO_INCREMENT=1788943211071373402 DEFAULT CHARSET=utf8mb3 COMMENT='日志表';
 
--- ----------------------------
--- Records of sys_log
--- ----------------------------
-BEGIN;
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373337, 1, 'administrator', '删除用户', '/upms/user/4', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:31:12');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373338, 1, 'administrator', '删除用户', '/upms/user/5', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:31:16');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373339, 1, 'administrator', '删除用户', '/upms/user/6', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:31:18');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373340, 1, 'administrator', '删除用户', '/upms/user/2', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:31:23');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373341, 1, 'administrator', '修改用户', '/upms/user', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:32:51');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373342, 1, 'administrator', '删除角色', '/upms/role/6', 0, 'cn.tycoding.langchat.upms.controller.SysRoleController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:32:58');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373343, 1, 'administrator', '删除角色', '/upms/role/3', 0, 'cn.tycoding.langchat.upms.controller.SysRoleController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:33:03');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373344, 1, 'administrator', '修改部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:34:03');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373345, 1, 'administrator', '修改部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:34:14');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373346, 1, 'administrator', '修改部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:34:26');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373347, 1, 'administrator', '修改部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:35:27');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373348, 1, 'administrator', '修改部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:35:37');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373349, 1, 'administrator', '修改部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.update()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:35:43');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373350, 1, 'administrator', '新增部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.add()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:35:50');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373351, 1, 'administrator', '新增部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.add()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:36:01');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373352, 1, 'administrator', '新增部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.add()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:36:35');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373353, 1, 'administrator', '新增部门', '/upms/dept', 0, 'cn.tycoding.langchat.upms.controller.SysDeptController.add()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:36:44');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373354, 1, 'administrator', '删除角色', '/upms/role/1', 0, 'cn.tycoding.langchat.upms.controller.SysRoleController.delete()', '', '124.127.73.88', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 10:37:30');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373355, 1, 'langchat', '修改角色', '/upms/role', 0, 'cn.tycoding.langchat.upms.controller.SysRoleController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 13:12:34');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373356, 1, 'langchat', '修改角色', '/upms/role', 0, 'cn.tycoding.langchat.upms.controller.SysRoleController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 13:15:43');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373357, 1, 'administrator', '修改菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:43:03');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373358, 1, 'administrator', '修改菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:43:12');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373359, 1, 'administrator', '删除菜单', '/upms/menu/211', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:43:25');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373360, 1, 'administrator', '删除菜单', '/upms/menu/231', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:43:29');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373361, 1, 'administrator', '删除菜单', '/upms/menu/232', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:44:04');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373362, 1, 'administrator', '修改菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:44:24');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373363, 1, 'administrator', '删除菜单', '/upms/menu/111', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:45:38');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373364, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:46:44');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373365, 1, 'administrator', '删除菜单', '/upms/menu/121', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:47:07');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373366, 1, 'administrator', '删除菜单', '/upms/menu/131', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:47:17');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373367, 1, 'administrator', '删除菜单', '/upms/menu/141', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.delete()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:47:32');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373368, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:48:34');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373369, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:48:57');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373370, 1, 'administrator', '修改菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:49:05');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373371, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:49:21');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373372, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:52:53');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373373, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:53:11');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373374, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:53:27');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373375, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:54:04');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373376, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:54:25');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373377, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:54:39');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373378, 1, 'administrator', '修改菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.update()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:54:48');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373379, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:55:25');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373380, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:55:42');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373381, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:56:00');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373382, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:56:45');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373383, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:57:03');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373384, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:57:38');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373385, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 15:58:57');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373386, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:01:37');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373387, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:01:53');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373388, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:02:09');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373389, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:02:58');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373390, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:03:15');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373391, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:03:31');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373392, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:04:48');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373393, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:05:25');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373394, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:11:01');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373395, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:11:38');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373396, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:12:45');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373397, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:13:07');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373398, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:13:26');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373399, 1, 'administrator', '新增菜单', '/upms/menu', 0, 'cn.tycoding.langchat.upms.controller.SysMenuController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:13:51');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373400, 1, 'administrator', '新增用户', '/upms/user', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:21:23');
-INSERT INTO `sys_log` (`id`, `type`, `username`, `operation`, `url`, `time`, `method`, `params`, `ip`, `user_agent`, `create_time`) VALUES (1788943211071373401, 1, 'administrator', '新增用户', '/upms/user', 0, 'cn.tycoding.langchat.upms.controller.SysUserController.add()', '', '127.0.0.1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36', '2024-06-28 16:21:36');
-COMMIT;
-
 -- ----------------------------
 -- Table structure for sys_menu
 -- ----------------------------
@@ -698,7 +627,6 @@ CREATE TABLE `sys_role` (
 BEGIN;
 INSERT INTO `sys_role` (`id`, `name`, `alias`, `des`) VALUES (1, '超级管理员', 'administrator', '超级管理员管理员,不受权限控制');
 INSERT INTO `sys_role` (`id`, `name`, `alias`, `des`) VALUES (2, '演示环境角色', 'demo_env', '演示环境使用角色,没有页面操作权限');
-INSERT INTO `sys_role` (`id`, `name`, `alias`, `des`) VALUES (4, '测试角色', 'test', '这是测试的');
 INSERT INTO `sys_role` (`id`, `name`, `alias`, `des`) VALUES (5, '客户端角色', 'client_role', '客户端用户的角色');
 COMMIT;
 
@@ -716,6 +644,26 @@ CREATE TABLE `sys_role_menu` (
 -- Records of sys_role_menu
 -- ----------------------------
 BEGIN;
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 100);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 110);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 120);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 130);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 140);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 200);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 210);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 230);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 300);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 310);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 320);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 330);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 340);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 350);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 400);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 410);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 420);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1788942973669572613);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1788942973669572614);
+INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) VALUES (2, 1788942973669572615);
 COMMIT;
 
 -- ----------------------------

+ 3 - 0
langchat-auth/src/main/java/cn/tycoding/langchat/auth/endpoint/AigcAuthEndpoint.java

@@ -13,6 +13,7 @@ import cn.tycoding.langchat.aigc.service.AigcUserService;
 import cn.tycoding.langchat.aigc.utils.AigcAuthUtil;
 import cn.tycoding.langchat.aigc.utils.AigcStpUtil;
 import cn.tycoding.langchat.auth.service.TokenInfo;
+import cn.tycoding.langchat.auth.utils.SysLogUtil;
 import cn.tycoding.langchat.common.constant.CacheConst;
 import cn.tycoding.langchat.common.exception.ServiceException;
 import cn.tycoding.langchat.common.properties.AuthProps;
@@ -67,6 +68,7 @@ public class AigcAuthEndpoint {
 
         AigcUser aigcUser = BeanUtil.copyProperties(userInfo, AigcUser.class);
         aigcUser.setPassword(null);
+        SysLogUtil.publish(1, "客户端登录");
         log.info("====> Aigc User Login success! token={}", tokenInfo.getTokenValue());
         return R.ok(new TokenInfo()
                 .setToken(tokenInfo.tokenValue)
@@ -112,6 +114,7 @@ public class AigcAuthEndpoint {
                 .setStatus(true)
                 .setCreateTime(new Date());
         userService.save(user);
+        SysLogUtil.publish(1, "客户端注册");
         return R.ok();
     }
 

+ 28 - 4
langchat-auth/src/main/java/cn/tycoding/langchat/auth/endpoint/AuthEndpoint.java

@@ -8,6 +8,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Dict;
 import cn.hutool.core.util.StrUtil;
 import cn.tycoding.langchat.auth.service.TokenInfo;
+import cn.tycoding.langchat.auth.utils.SysLogUtil;
 import cn.tycoding.langchat.common.constant.CacheConst;
 import cn.tycoding.langchat.common.exception.ServiceException;
 import cn.tycoding.langchat.common.properties.AuthProps;
@@ -15,9 +16,11 @@ import cn.tycoding.langchat.common.utils.MybatisUtil;
 import cn.tycoding.langchat.common.utils.QueryPage;
 import cn.tycoding.langchat.common.utils.R;
 import cn.tycoding.langchat.upms.dto.UserInfo;
+import cn.tycoding.langchat.upms.entity.SysUser;
 import cn.tycoding.langchat.upms.service.SysUserService;
 import cn.tycoding.langchat.upms.utils.AuthUtil;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -58,15 +61,12 @@ public class AuthEndpoint {
             throw new ServiceException("The username or password is error");
         }
 
-        return onLogin(userInfo);
-    }
-
-    private R onLogin(UserInfo userInfo) {
         StpUtil.login(userInfo.getId());
         SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
         StpUtil.getSession()
                 .set(CacheConst.AUTH_USER_INFO_KEY, userInfo)
                 .set(CacheConst.AUTH_TOKEN_INFO_KEY, tokenInfo);
+        SysLogUtil.publish(1, "服务端登录");
         log.info("====> login success,token={}", tokenInfo.getTokenValue());
         return R.ok(new TokenInfo().setToken(tokenInfo.tokenValue).setExpiration(tokenInfo.tokenTimeout));
     }
@@ -77,6 +77,30 @@ public class AuthEndpoint {
         return R.ok();
     }
 
+    @PostMapping("/register")
+    public R emailRegister(@RequestBody SysUser data) {
+        if (StrUtil.isBlank(data.getUsername()) || StrUtil.isBlank(data.getPassword())) {
+            throw new ServiceException("The user name or password is empty");
+        }
+
+        // 校验用户名是否已存在
+        List<SysUser> list = userService.list(Wrappers.<SysUser>lambdaQuery().eq(SysUser::getUsername, data.getUsername()));
+        if (!list.isEmpty()) {
+            throw new ServiceException("This username has already been registered");
+        }
+
+        SysUser user = new SysUser()
+                .setUsername(data.getUsername())
+                .setPassword(AuthUtil.encode(authProps.getSaltKey(), data.getPassword()))
+                .setRealName(data.getUsername())
+                .setPhone(data.getPhone())
+                .setStatus(true)
+                .setCreateTime(new Date());
+        userService.save(user);
+        SysLogUtil.publish(1, "服务端注册");
+        return R.ok();
+    }
+
     @GetMapping("/info")
     public R<UserInfo> info() {
         UserInfo userInfo = userService.info(AuthUtil.getUsername());

+ 10 - 1
langchat-auth/src/main/java/cn/tycoding/langchat/auth/service/GlobalExceptionTranslator.java

@@ -1,11 +1,11 @@
 package cn.tycoding.langchat.auth.service;
 
 import cn.dev33.satoken.exception.NotLoginException;
+import cn.dev33.satoken.exception.NotPermissionException;
 import cn.dev33.satoken.exception.SaTokenException;
 import cn.tycoding.langchat.common.exception.AuthException;
 import cn.tycoding.langchat.common.exception.ServiceException;
 import cn.tycoding.langchat.common.utils.R;
-import java.nio.file.AccessDeniedException;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.data.redis.RedisConnectionFailureException;
@@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 import org.springframework.web.bind.annotation.RestControllerAdvice;
 import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
 
+import java.nio.file.AccessDeniedException;
+
 /**
  * 全局异常拦截(注意:这种方式只能拦截经过Controller的异常,未经过Controller的异常拦截不到)
  *
@@ -84,6 +86,13 @@ public class GlobalExceptionTranslator {
         return R.fail(HttpStatus.BAD_REQUEST);
     }
 
+    @ExceptionHandler({NotPermissionException.class})
+    @ResponseStatus(HttpStatus.UNAUTHORIZED)
+    public R handleError(NotPermissionException e) {
+        e.printStackTrace();
+        return R.fail("没有操作权限");
+    }
+
     @ExceptionHandler({SaTokenException.class})
     @ResponseStatus(HttpStatus.UNAUTHORIZED)
     public R handleError(SaTokenException e) {

+ 3 - 1
langchat-common/src/main/java/cn/tycoding/langchat/common/dto/ChatReq.java

@@ -13,7 +13,9 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 public class ChatReq {
 
-    private String model;
+    private String modelId;
+    private String modelName;
+    private String modelProvider;
 
     private String message;
 

+ 18 - 0
langchat-core/src/main/java/cn/tycoding/langchat/core/provider/EmbedProvider.java

@@ -1,6 +1,11 @@
 package cn.tycoding.langchat.core.provider;
 
+import cn.tycoding.langchat.aigc.component.ProviderEnum;
+import dev.langchain4j.data.document.DocumentSplitter;
+import dev.langchain4j.data.document.splitter.DocumentSplitters;
+import dev.langchain4j.model.azure.AzureOpenAiTokenizer;
 import dev.langchain4j.model.embedding.EmbeddingModel;
+import dev.langchain4j.model.openai.OpenAiTokenizer;
 import lombok.AllArgsConstructor;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
@@ -15,6 +20,19 @@ public class EmbedProvider {
 
     private final ApplicationContext context;
 
+    public static DocumentSplitter splitter(String modelName, String modelProvider) {
+        if (ProviderEnum.OPENAI.getModel().equals(modelProvider)) {
+            return DocumentSplitters.recursive(100, 0, new OpenAiTokenizer(modelName));
+        }
+        if (ProviderEnum.AZURE_OPENAI.getModel().equals(modelProvider)) {
+            return DocumentSplitters.recursive(100, 0, new AzureOpenAiTokenizer(modelName));
+        }
+//        if (ProviderEnum.ALIBABA.getModel().equals(modelProvider)) {
+//            return new QwenTokenizer(modelName);
+//        }
+        return DocumentSplitters.recursive(100, 0);
+    }
+
     public EmbeddingModel embed() {
         if (context.containsBean("OpenAiEmbeddingModel")) {
             return (EmbeddingModel) context.getBean("OpenAiEmbeddingModel");

+ 2 - 2
langchat-core/src/main/java/cn/tycoding/langchat/core/service/impl/LangChatServiceImpl.java

@@ -38,7 +38,7 @@ public class LangChatServiceImpl implements LangChatService {
 
     @Override
     public TokenStream chat(ChatReq req) {
-        StreamingChatLanguageModel model = provider.stream(req.getModel());
+        StreamingChatLanguageModel model = provider.stream(req.getModelId());
 
         Assistant assistant;
         if (req.getIsGoogleSearch()) {
@@ -70,7 +70,7 @@ public class LangChatServiceImpl implements LangChatService {
     @Override
     public String text(ChatReq req) {
         try {
-            ChatLanguageModel model = provider.text(req.getModel());
+            ChatLanguageModel model = provider.text(req.getModelId());
             return model.generate(req.getPrompt().text());
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 9
langchat-core/src/main/java/cn/tycoding/langchat/core/service/impl/LangDocServiceImpl.java

@@ -14,13 +14,11 @@ import dev.langchain4j.data.document.Document;
 import dev.langchain4j.data.document.DocumentSplitter;
 import dev.langchain4j.data.document.loader.FileSystemDocumentLoader;
 import dev.langchain4j.data.document.parser.apache.tika.ApacheTikaDocumentParser;
-import dev.langchain4j.data.document.splitter.DocumentSplitters;
 import dev.langchain4j.data.embedding.Embedding;
 import dev.langchain4j.data.segment.TextSegment;
 import dev.langchain4j.memory.chat.MessageWindowChatMemory;
 import dev.langchain4j.model.chat.StreamingChatLanguageModel;
 import dev.langchain4j.model.embedding.EmbeddingModel;
-import dev.langchain4j.model.openai.OpenAiTokenizer;
 import dev.langchain4j.rag.content.retriever.ContentRetriever;
 import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever;
 import dev.langchain4j.rag.query.Query;
@@ -39,7 +37,6 @@ import java.util.function.Function;
 import static cn.tycoding.langchat.core.consts.EmbedConst.FILENAME;
 import static cn.tycoding.langchat.core.consts.EmbedConst.KNOWLEDGE;
 import static dev.langchain4j.data.document.Metadata.metadata;
-import static dev.langchain4j.model.openai.OpenAiModelName.GPT_3_5_TURBO;
 import static dev.langchain4j.store.embedding.filter.MetadataFilterBuilder.metadataKey;
 
 /**
@@ -75,11 +72,7 @@ public class LangDocServiceImpl implements LangDocService {
         Document document = FileSystemDocumentLoader.loadDocument(req.getPath(), new ApacheTikaDocumentParser());
         document.metadata().put(KNOWLEDGE, req.getKnowledgeId()).put(FILENAME, req.getDocsName());
 
-        DocumentSplitter splitter = DocumentSplitters.recursive(
-                100,
-                0,
-                new OpenAiTokenizer(GPT_3_5_TURBO)
-        );
+        DocumentSplitter splitter = EmbedProvider.splitter(req.getModelName(), req.getModelProvider());
         List<TextSegment> segments = splitter.split(document);
         List<Embedding> embeddings = model.embedAll(segments).content();
         List<String> ids = embeddingStore.addAll(embeddings, segments);
@@ -93,7 +86,7 @@ public class LangDocServiceImpl implements LangDocService {
 
     @Override
     public TokenStream chat(ChatReq req) {
-        StreamingChatLanguageModel chatLanguageModel = modelProvider.stream(req.getModel());
+        StreamingChatLanguageModel chatLanguageModel = modelProvider.stream(req.getModelId());
         AiServices<Assistant> aiServices = AiServices.builder(Assistant.class)
                 .chatMemoryProvider(memoryId -> MessageWindowChatMemory.withMaxMessages(5))
                 .streamingChatLanguageModel(chatLanguageModel);

+ 2 - 2
langchat-server/src/main/java/cn/tycoding/langchat/aigc/endpoint/AigcChatEndpoint.java

@@ -47,9 +47,9 @@ public class AigcChatEndpoint {
             req.setPrompt(PromptUtil.build(req.getMessage(), req.getPromptText()));
         }
 
-        if (req.getModel().endsWith(ModelConst.IMAGE_SUFFIX)) {
+        if (req.getModelId().endsWith(ModelConst.IMAGE_SUFFIX)) {
             AigcOss oss = chatService.image(
-                    new ImageR().setPrompt(req.getPrompt()).setModel(req.getModel()));
+                    new ImageR().setPrompt(req.getPrompt()).setModel(req.getModelId()));
             emitter.send("Image:" + oss);
             emitter.complete();
         } else {

+ 8 - 0
langchat-ui/src/api/auth.ts

@@ -22,6 +22,14 @@ export function login(data: any) {
   });
 }
 
+export function register(data: any) {
+  return http.request({
+    url: `/auth/register`,
+    method: 'POST',
+    data,
+  });
+}
+
 /**
  * @description: 用户登出
  */

+ 1 - 0
langchat-ui/src/enums/pageEnum.ts

@@ -2,6 +2,7 @@ export enum PageEnum {
   // 登录
   BASE_LOGIN = '/login',
   BASE_LOGIN_NAME = 'Login',
+  BASE_REGISTER = '/register',
   //重定向
   REDIRECT = '/redirect',
   REDIRECT_NAME = 'Redirect',

+ 2 - 1
langchat-ui/src/router/guards.ts

@@ -8,8 +8,9 @@ import { PageEnum } from '@/enums/pageEnum';
 import { ErrorPageRoute } from '@/router/base';
 
 const LOGIN_PATH = PageEnum.BASE_LOGIN;
+const REGISTER_PATH = PageEnum.BASE_REGISTER;
 
-const whitePathList = [LOGIN_PATH]; // no redirect whitelist
+const whitePathList = [LOGIN_PATH, REGISTER_PATH]; // no redirect whitelist
 
 export function createRouterGuards(router: Router) {
   const userStore = useUser();

+ 15 - 1
langchat-ui/src/router/index.ts

@@ -37,11 +37,25 @@ export const LoginRoute: RouteRecordRaw = {
   },
 };
 
+export const RegisterRoute: RouteRecordRaw = {
+  path: '/register',
+  name: 'Register',
+  component: () => import('@/views/login/register.vue'),
+  meta: {
+    title: '注册',
+  },
+};
+
 //需要验证权限
 export const asyncRoutes = [...routeModuleList];
 
 //普通路由 无需验证权限
-export const constantRouter: RouteRecordRaw[] = [LoginRoute, RootRoute, RedirectRoute];
+export const constantRouter: RouteRecordRaw[] = [
+  LoginRoute,
+  RegisterRoute,
+  RootRoute,
+  RedirectRoute,
+];
 
 const router = createRouter({
   history: createWebHistory(),

+ 7 - 0
langchat-ui/src/store/modules/asyncRoute.ts

@@ -116,6 +116,13 @@ export const useAsyncRouteStore = defineStore({
       this.setMenus(accessedRouters);
       return toRaw(accessedRouters);
     },
+    clear() {
+      this.menus = [];
+      this.routers = constantRouter;
+      this.routersAdded = [];
+      this.keepAliveComponents = [];
+      this.isDynamicRouteAdded = false;
+    },
   },
 });
 

+ 12 - 3
langchat-ui/src/store/modules/user.ts

@@ -2,8 +2,9 @@ import { defineStore } from 'pinia';
 import { store } from '@/store';
 import { ACCESS_TOKEN, CURRENT_USER, IS_SCREENLOCKED } from '@/store/mutation-types';
 
-import { getUserInfo, login, logout } from '@/api/auth';
+import { getUserInfo, login, logout, register } from '@/api/auth';
 import { storage } from '@/utils/Storage';
+import { useAsyncRouteStore } from '@/store/modules/asyncRoute';
 
 export type UserInfoType = {
   id: string;
@@ -70,6 +71,10 @@ export const useUserStore = defineStore({
       }
       return response;
     },
+    // 注册
+    async register(params: any) {
+      return await register(params);
+    },
 
     // 获取用户信息
     async getInfo() {
@@ -96,14 +101,18 @@ export const useUserStore = defineStore({
     async logout() {
       await logout();
       this.setPermissions([]);
+      this.setToken('');
+      this.setAvatar('');
       this.setUserInfo({
         id: '',
         username: '',
         realName: '',
         avatar: '',
       });
-      storage.remove(ACCESS_TOKEN);
-      storage.remove(CURRENT_USER);
+      storage.clear();
+
+      const routerStore = useAsyncRouteStore();
+      routerStore.clear();
     },
   },
 });

+ 14 - 12
langchat-ui/src/views/aigc/chat/components/Chat.vue

@@ -1,4 +1,4 @@
-<script setup lang="ts">
+<script lang="ts" setup>
   import Message from './message/Message.vue';
   import { useProjectSetting } from '@/hooks/setting/useProjectSetting';
   import { computed, ref } from 'vue';
@@ -96,7 +96,9 @@
           message,
           role: 'user',
           isGoogleSearch: chatStore.isGoogleSearch,
-          model: chatStore.model,
+          modelId: chatStore.modelId,
+          modelName: chatStore.modelName,
+          modelProvider: chatStore.modelProvider,
         },
         async ({ event }) => {
           const list = event.target.responseText.split('\n\n');
@@ -180,17 +182,17 @@
       <div ref="contentRef" class="h-full overflow-hidden overflow-y-auto">
         <div
           ref="scrollRef"
-          class="w-full max-w-screen-3xl m-auto pl-8 pr-8"
           :class="[isMobile ? 'p-2' : 'p-5']"
+          class="w-full max-w-screen-3xl m-auto pl-8 pr-8"
         >
           <Message
             v-for="(item, index) of dataSources"
             :key="index"
             :date-time="item.createTime"
-            :text="item.message"
-            :inversion="item.role !== 'assistant'"
             :error="item.isError"
+            :inversion="item.role !== 'assistant'"
             :loading="loading"
+            :text="item.message"
             @delete="handleDelete(item)"
           />
           <div class="sticky bottom-0 left-0 flex justify-center">
@@ -212,24 +214,24 @@
           <n-input
             ref="inputRef"
             v-model:value="message"
-            type="textarea"
-            @keypress="handleEnter"
             :autosize="{ minRows: 1, maxRows: isMobile ? 1 : 4 }"
             class="!rounded-full px-2 py-1"
             placeholder="搜索"
             size="large"
+            type="textarea"
+            @keypress="handleEnter"
           >
             <template #prefix>
-              <n-popselect placement="top" :options="menuOptions" trigger="click">
-                <n-button text class="!mr-2">
+              <n-popselect :options="menuOptions" placement="top" trigger="click">
+                <n-button class="!mr-2" text>
                   <template #icon>
-                    <n-icon class="text-2xl" :component="AttachOutline" />
+                    <n-icon :component="AttachOutline" class="text-2xl" />
                   </template>
                 </n-button>
               </n-popselect>
             </template>
             <template #suffix>
-              <n-button text :loading="loading" @click="handleSubmit">
+              <n-button :loading="loading" text @click="handleSubmit">
                 <template #icon>
                   <n-icon :component="SparklesOutline" />
                 </template>
@@ -242,7 +244,7 @@
   </div>
 </template>
 
-<style scoped lang="less">
+<style lang="less" scoped>
   ::v-deep(.custom-input) {
     .n-input-wrapper {
       padding-right: 10px;

+ 3 - 1
langchat-ui/src/views/aigc/chat/components/store/chat.d.ts

@@ -1,6 +1,8 @@
 export interface ChatState {
   messages: any[];
-  model: string;
+  modelId: string;
+  modelName: string;
+  modelProvider: string;
   conversationId: string | null;
   docsId: string | null;
   prompt: any;

+ 3 - 1
langchat-ui/src/views/aigc/chat/components/store/useChatStore.ts

@@ -5,7 +5,9 @@ import { ChatState } from '@/views/aigc/chat/components/store/chat';
 export const useChatStore = defineStore('chat-store', {
   state: (): ChatState =>
     <ChatState>{
-      model: '',
+      modelId: '',
+      modelName: '',
+      modelProvider: '',
       conversationId: null,
       docsId: null,
       messages: [],

+ 14 - 4
langchat-ui/src/views/aigc/common/ModelProvider.vue

@@ -1,6 +1,6 @@
 <script lang="ts" setup>
   import { useChatStore } from '@/views/aigc/chat/components/store/useChatStore';
-  import { onMounted } from 'vue';
+  import { onMounted, toRaw } from 'vue';
   import { getChatModels } from '@/api/aigc/model';
   import { LLMProviders } from '@/views/aigc/model/data';
   import { ref } from 'vue-demi';
@@ -11,8 +11,10 @@
   onMounted(async () => {
     const providers = await getChatModels();
     const data: any = [];
-    if (chatStore.model === '') {
-      chatStore.model = providers[0].id;
+    if (chatStore.modelName === '') {
+      chatStore.modelId = providers[0].id;
+      chatStore.modelName = providers[0].model;
+      chatStore.modelProvider = providers[0].provider;
     }
     LLMProviders.forEach((i) => {
       const children = providers.filter((m) => m.provider == i.model);
@@ -28,17 +30,25 @@
     });
     modelList.value = data;
   });
+
+  function onUpdate(val, opt) {
+    const obj = toRaw(opt);
+    chatStore.modelId = obj.id;
+    chatStore.modelName = obj.model;
+    chatStore.modelProvider = obj.provider;
+  }
 </script>
 
 <template>
   <n-select
-    v-model:value="chatStore.model"
+    v-model:value="chatStore.modelId"
     :consistent-menu-width="false"
     :label-field="'name'"
     :options="modelList"
     :value-field="'id'"
     class="!w-32"
     size="small"
+    @update:value="onUpdate"
   />
 </template>
 

+ 2 - 2
langchat-ui/src/views/aigc/model/data.ts

@@ -74,7 +74,7 @@ export const LLMProviders: any[] = [
   },
   {
     model: ProviderEnum.BAIDU,
-    name: '百度大模型',
+    name: '百度千帆大模型',
     models: [
       'ernie_bot_8k',
       'eb-instant',
@@ -93,7 +93,7 @@ export const LLMProviders: any[] = [
   },
   {
     model: ProviderEnum.ALIBABA,
-    name: '阿里大模型',
+    name: '阿里千帆大模型',
     models: [
       'qwen-turbo',
       'qwen-plus',

+ 13 - 1
langchat-ui/src/views/login/index.vue

@@ -46,6 +46,10 @@
       }
     });
   };
+
+  function onCodeLogin() {
+    message.warning('暂时没有接入短信登录方式');
+  }
 </script>
 
 <template>
@@ -89,7 +93,15 @@
               登录
             </n-button>
           </n-form-item>
-          <div class="mt-5 text-xs text-gray-300 login-animation5 text-center">
+          <div class="login-animation4 mb-3">
+            <div class="w-full flex justify-end gap-2">
+              <n-button text type="info" @click="onCodeLogin">验证码登录</n-button>
+              <n-button text type="info" @click="router.push(PageEnum.BASE_REGISTER)">
+                注册账号
+              </n-button>
+            </div>
+          </div>
+          <div class="mt-8 text-xs text-gray-300 login-animation5 text-center">
             * 温馨提示:建议使用谷歌、Microsoft Edge,版本 80 及以上浏览器,360浏览器请使用极速模式
           </div>
         </n-form>

+ 243 - 0
langchat-ui/src/views/login/register.vue

@@ -0,0 +1,243 @@
+<script lang="ts" setup>
+  import { reactive, ref, toRaw } from 'vue';
+  import { useRouter } from 'vue-router';
+  import { useUserStore } from '@/store/modules/user';
+  import { useMessage } from 'naive-ui';
+  import { LockClosedOutline, PersonOutline, PhonePortraitOutline } from '@vicons/ionicons5';
+  import { PageEnum } from '@/enums/pageEnum';
+  import { websiteConfig } from '@/config/website.config';
+
+  const formRef = ref();
+  const message = useMessage();
+  const loading = ref(false);
+  const userStore = useUserStore();
+  const router = useRouter();
+  const form = reactive({
+    username: '',
+    password: '',
+    phone: '',
+  });
+
+  const rules = {
+    username: { required: true, message: '请输入用户名', trigger: 'blur' },
+    password: {
+      required: true,
+      trigger: 'blur',
+      validator: (rule: any, value: string) => {
+        return new Promise<void>((resolve, reject) => {
+          if (value.length == 0) {
+            reject(new Error('请输入密码'));
+          }
+          if (value.length < 6) {
+            reject(new Error('密码长度至少6位'));
+          } else {
+            resolve();
+          }
+        });
+      },
+    },
+    phone: {
+      required: true,
+      trigger: 'blur',
+      validator: (rule: any, value: string) => {
+        return new Promise<void>((resolve, reject) => {
+          if (value.length == 0) {
+            reject(new Error('请输入手机号'));
+          }
+          if (!/^[1]+[3,8]+\d{9}$/.test(value)) {
+            reject(new Error('手机号格式错误'));
+          } else {
+            resolve();
+          }
+        });
+      },
+    },
+  };
+
+  const handleSubmit = (e) => {
+    e.preventDefault();
+    formRef.value.validate(async (errors: any) => {
+      if (!errors) {
+        loading.value = true;
+        try {
+          await userStore.register(toRaw(form));
+          message.success('注册成功,请重新登陆');
+          await router.push(PageEnum.BASE_LOGIN);
+        } finally {
+          loading.value = false;
+        }
+      }
+    });
+  };
+</script>
+
+<template>
+  <div class="view-account">
+    <div class="view-account-header"></div>
+    <div class="view-account-container">
+      <div class="view-account-top">
+        <div class="view-account-top-logo">
+          <img :src="websiteConfig.loginImage" alt="" />
+        </div>
+        <div class="view-account-top-desc">{{ websiteConfig.loginDesc }}</div>
+      </div>
+      <div class="view-account-form">
+        <div class="text-center text-2xl mb-8">Register {{ websiteConfig.title }}</div>
+        <n-form ref="formRef" :model="form" :rules="rules" label-placement="left" size="large">
+          <n-form-item class="login-animation1" path="username">
+            <n-input v-model:value="form.username" placeholder="请输入用户名">
+              <template #prefix>
+                <n-icon color="#808695" size="18">
+                  <PersonOutline />
+                </n-icon>
+              </template>
+            </n-input>
+          </n-form-item>
+          <n-form-item class="login-animation2" path="password">
+            <n-input
+              v-model:value="form.password"
+              placeholder="请输入密码"
+              showPasswordOn="click"
+              type="password"
+            >
+              <template #prefix>
+                <n-icon color="#808695" size="18">
+                  <LockClosedOutline />
+                </n-icon>
+              </template>
+            </n-input>
+          </n-form-item>
+          <n-form-item class="login-animation3" path="phone">
+            <n-input v-model:value="form.phone" placeholder="请输入手机号" showPasswordOn="click">
+              <template #prefix>
+                <n-icon color="#808695" size="18">
+                  <PhonePortraitOutline />
+                </n-icon>
+              </template>
+            </n-input>
+          </n-form-item>
+          <n-form-item class="login-animation3 mt-2">
+            <n-button :loading="loading" block size="large" type="primary" @click="handleSubmit">
+              注册
+            </n-button>
+          </n-form-item>
+          <div class="login-animation4 mb-3">
+            <div class="w-full flex justify-end gap-2">
+              <n-text class="cursor-pointer" type="info" @click="router.push(PageEnum.BASE_LOGIN)">
+                返回登录
+              </n-text>
+            </div>
+          </div>
+          <div class="mt-8 text-xs text-gray-300 login-animation5 text-center">
+            * 温馨提示:建议使用谷歌、Microsoft Edge,版本 80 及以上浏览器,360浏览器请使用极速模式
+          </div>
+        </n-form>
+      </div>
+    </div>
+  </div>
+</template>
+
+<style lang="less" scoped>
+  .view-account {
+    background-color: #f8f8f8;
+    display: flex;
+    flex-direction: column;
+    height: 100vh;
+    overflow: auto;
+
+    &-container {
+      flex: 1;
+      padding: 32px 12px;
+      max-width: 400px;
+      min-width: 400px;
+      margin: 0 auto;
+
+      .view-account-form {
+        background: white;
+        border-radius: 15px;
+        padding: 30px 45px 40px 45px;
+      }
+    }
+
+    &-top {
+      padding: 32px 0 25px 0;
+      text-align: center;
+
+      &-desc {
+        font-size: 14px;
+        color: #808695;
+      }
+    }
+
+    &-other {
+      width: 100%;
+    }
+
+    .default-color {
+      color: #515a6e;
+
+      .ant-checkbox-wrapper {
+        color: #515a6e;
+      }
+    }
+  }
+
+  @media (min-width: 768px) {
+    .view-account {
+      background-image: url('../../assets/images/login.svg');
+      background-repeat: no-repeat;
+      background-position: 50%;
+      background-size: 100%;
+    }
+
+    .page-account-container {
+      padding: 32px 0 24px 0;
+    }
+  }
+
+  @keyframes anim-num {
+    0% {
+      transform: translateY(60px);
+      opacity: 0;
+    }
+    100% {
+      transform: translateY(0);
+      opacity: 1;
+    }
+  }
+  .login-animation1 {
+    opacity: 0;
+    animation-name: anim-num;
+    animation-duration: 0.5s;
+    animation-fill-mode: forwards;
+    animation-delay: 0.1s;
+  }
+  .login-animation2 {
+    opacity: 0;
+    animation-name: anim-num;
+    animation-duration: 0.5s;
+    animation-fill-mode: forwards;
+    animation-delay: 0.2s;
+  }
+  .login-animation3 {
+    opacity: 0;
+    animation-name: anim-num;
+    animation-duration: 0.5s;
+    animation-fill-mode: forwards;
+    animation-delay: 0.3s;
+  }
+  .login-animation4 {
+    opacity: 0;
+    animation-name: anim-num;
+    animation-duration: 0.5s;
+    animation-fill-mode: forwards;
+    animation-delay: 0.4s;
+  }
+  .login-animation5 {
+    opacity: 0;
+    animation-name: anim-num;
+    animation-duration: 0.5s;
+    animation-fill-mode: forwards;
+    animation-delay: 0.5s;
+  }
+</style>

+ 3 - 0
langchat-ui/src/views/upms/role/index.vue

@@ -7,6 +7,7 @@
   import { DeleteOutlined, EditOutlined, PlusOutlined } from '@vicons/antd';
   import Edit from './edit.vue';
   import { useDialog, useMessage } from 'naive-ui';
+  import { RoleEnum } from '@/enums/roleEnum';
 
   const message = useMessage();
   const dialog = useDialog();
@@ -27,11 +28,13 @@
           {
             type: 'info',
             icon: EditOutlined,
+            ifShow: record.alias !== RoleEnum.ADMINISTRATOR,
             onClick: handleEdit.bind(null, record),
           },
           {
             type: 'error',
             icon: DeleteOutlined,
+            ifShow: record.alias !== RoleEnum.ADMINISTRATOR,
             onClick: handleDelete.bind(null, record),
           },
         ],

+ 2 - 0
langchat-upms/src/main/java/cn/tycoding/langchat/upms/entity/SysUser.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
+import lombok.experimental.Accessors;
 
 import java.io.Serializable;
 import java.util.Date;
@@ -15,6 +16,7 @@ import java.util.Date;
  * @since 2024/4/15
  */
 @Data
+@Accessors(chain = true)
 @TableName("sys_user")
 public class SysUser implements Serializable {
     private static final long serialVersionUID = -94827981963832107L;

+ 5 - 3
langchat-upms/src/main/java/cn/tycoding/langchat/upms/service/impl/SysMenuServiceImpl.java

@@ -16,6 +16,7 @@ import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -42,12 +43,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
 //    @Cacheable(value = CacheConst.MENU_DETAIL_KEY, key = "#userId")
     public List<MenuTree<SysMenu>> build(Long userId) {
         List<Long> roleIds = AuthUtil.getRoleIds();
-        if (roleIds.isEmpty()) {
-//            throw new AuthException(AuthUtil.NOT_ROLE_ERROR);
-        }
         if (AuthUtil.getRoleNames().contains(AuthUtil.ADMINISTRATOR)) {
             // 超级管理员,不做权限过滤
             roleIds.clear();
+        } else {
+            if (roleIds.isEmpty()) {
+                return new ArrayList<>();
+            }
         }
         List<SysMenu> sysMenuList = baseMapper.build(roleIds, CommonConst.MENU_TYPE_MENU);
         List<MenuTree<SysMenu>> build = TreeUtil.build(sysMenuList);

+ 23 - 20
langchat-upms/src/main/java/cn/tycoding/langchat/upms/service/impl/SysUserServiceImpl.java

@@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.RequiredArgsConstructor;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -62,7 +63,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
     }
 
     @Override
-//    @Cacheable(value = CacheConst.USER_DETAIL_KEY, key = "#username")
+    @Cacheable(value = CacheConst.USER_DETAIL_KEY, key = "#username")
     public UserInfo info(String username) {
         SysUser user = this.findByName(username);
         UserInfo userInfo = BeanUtil.copyProperties(user, UserInfo.class);
@@ -78,27 +79,29 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
         //获取用户角色列表
         List<SysRole> sysRoleList = sysRoleService.findRolesByUserId(userInfo.getId());
-        if (sysRoleList.isEmpty()) {
-            throw new ServiceException(AuthUtil.NOT_ROLE_ERROR);
+        if (!sysRoleList.isEmpty()) {
+            //获取用户权限列表
+            List<SysMenu> menuList = new ArrayList<>();
+            long isAdmin = sysRoleList.stream().filter(role -> AuthUtil.ADMINISTRATOR.equals(role.getAlias())).count();
+            if (isAdmin > 0) {
+                // 包含了超级管理员角色,拥有所有权限
+                menuList = sysMenuService.list();
+            } else {
+                // 根据角色筛选权限
+                menuList = sysMenuService.getUserMenuList(sysRoleList);
+            }
+            Set<String> perms =
+                    menuList.stream().map(SysMenu::getPerms).filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
+
+            List<Long> roleIds = sysRoleList.stream().map(SysRole::getId).toList();
+            userInfo.setRoleIds(roleIds);
+
+            //获取用户部门信息
+            SysDept sysDept = sysDeptService.getById(userInfo.getDeptId());
+            return userInfo.setRoles(sysRoleList).setPerms(perms).setDept(sysDept);
         }
 
-        //获取用户权限列表
-        List<SysMenu> menuList = new ArrayList<>();
-        long isAdmin = sysRoleList.stream().filter(role -> AuthUtil.ADMINISTRATOR.equals(role.getAlias())).count();
-        if (isAdmin > 0) {
-            // 包含了超级管理员角色,拥有所有权限
-            menuList = sysMenuService.list();
-        } else {
-            // 根据角色筛选权限
-            menuList = sysMenuService.getUserMenuList(sysRoleList);
-        }
-        Set<String> perms =
-                menuList.stream().map(SysMenu::getPerms).filter(StringUtils::isNotEmpty).collect(Collectors.toSet());
-
-        //获取用户部门信息
-        SysDept sysDept = sysDeptService.getById(userInfo.getDeptId());
-
-        return userInfo.setRoles(sysRoleList).setPerms(perms).setDept(sysDept);
+        return userInfo;
     }
 
     @Override

langchat-upms/src/main/resources/mapper/AigcStructColService.xml → langchat-upms/src/main/resources/mapper/SysMenuMapper.xml