From 5fcc7592c9e927dca04a0daaea6b37ba670ded10 Mon Sep 17 00:00:00 2001 From: LiJinHui <166460433+stu-rgsze@users.noreply.github.com> Date: Fri, 19 Sep 2025 15:34:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E6=9D=83=E9=99=90=E8=AE=BE=E7=BD=AE(=20?= =?UTF-8?q?=E9=9D=9E=E7=AE=A1=E7=90=86=E5=91=98=E6=89=93=E5=BC=80=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=8B=92=E7=BB=9D=E8=AE=BF=E9=97=AE=E5=B9=B6=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E8=B7=B3=E8=BD=AC=E5=88=B0=E9=A6=96=E9=A1=B5=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E5=A4=8Dbug=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/AgentTemplateController.java | 111 ++------------ .../src/components/AgentTemplateDialog.vue | 107 -------------- main/manager-web/src/i18n/en.js | 10 +- main/manager-web/src/i18n/zh_CN.js | 8 +- main/manager-web/src/i18n/zh_TW.js | 8 + main/manager-web/src/router/index.js | 17 ++- .../src/views/AgentTemplateManagement.vue | 139 +++++++----------- 7 files changed, 103 insertions(+), 297 deletions(-) delete mode 100644 main/manager-web/src/components/AgentTemplateDialog.vue diff --git a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java index 3b3dda7f..ee6f5e57 100644 --- a/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java +++ b/main/manager-api/src/main/java/xiaozhi/modules/agent/controller/AgentTemplateController.java @@ -26,6 +26,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import xiaozhi.common.constant.Constant; import xiaozhi.common.page.PageData; +import xiaozhi.common.utils.ConvertUtils; import xiaozhi.common.utils.Result; import xiaozhi.common.utils.ResultUtils; import xiaozhi.modules.agent.entity.AgentTemplateEntity; @@ -42,42 +43,17 @@ public class AgentTemplateController { @GetMapping("/all") @Operation(summary = "获取所有模板列表") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") public Result> getAgentTemplates() { List templates = agentTemplateService.list(); - // 转换为VO列表 - List voList = templates.stream().map(template -> { - AgentTemplateVO vo = new AgentTemplateVO(); - // 复制属性 - vo.setId(template.getId()); - vo.setAgentCode(template.getAgentCode()); - vo.setAgentName(template.getAgentName()); - vo.setAsrModelId(template.getAsrModelId()); - vo.setVadModelId(template.getVadModelId()); - vo.setLlmModelId(template.getLlmModelId()); - vo.setVllmModelId(template.getVllmModelId()); - vo.setTtsModelId(template.getTtsModelId()); - vo.setTtsVoiceId(template.getTtsVoiceId()); - vo.setMemModelId(template.getMemModelId()); - vo.setIntentModelId(template.getIntentModelId()); - vo.setChatHistoryConf(template.getChatHistoryConf()); - vo.setSystemPrompt(template.getSystemPrompt()); - vo.setSummaryMemory(template.getSummaryMemory()); - vo.setLangCode(template.getLangCode()); - vo.setLanguage(template.getLanguage()); - vo.setSort(template.getSort()); - vo.setCreator(template.getCreator()); - vo.setCreatedAt(template.getCreatedAt()); - vo.setUpdater(template.getUpdater()); - vo.setUpdatedAt(template.getUpdatedAt()); - return vo; - }).toList(); + // 使用ConvertUtils转换为VO列表 + List voList = ConvertUtils.sourceToTarget(templates, AgentTemplateVO.class); return new Result>().ok(voList); } @GetMapping("/page") @Operation(summary = "获取模板分页列表") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") @Parameters({ @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), @@ -102,33 +78,8 @@ public class AgentTemplateController { // 执行分页查询 IPage pageResult = agentTemplateService.page(pageInfo, wrapper); - // 转换为PageData对象 - List voList = pageResult.getRecords().stream().map(template -> { - AgentTemplateVO vo = new AgentTemplateVO(); - // 复制属性 - vo.setId(template.getId()); - vo.setAgentCode(template.getAgentCode()); - vo.setAgentName(template.getAgentName()); - vo.setAsrModelId(template.getAsrModelId()); - vo.setVadModelId(template.getVadModelId()); - vo.setLlmModelId(template.getLlmModelId()); - vo.setVllmModelId(template.getVllmModelId()); - vo.setTtsModelId(template.getTtsModelId()); - vo.setTtsVoiceId(template.getTtsVoiceId()); - vo.setMemModelId(template.getMemModelId()); - vo.setIntentModelId(template.getIntentModelId()); - vo.setChatHistoryConf(template.getChatHistoryConf()); - vo.setSystemPrompt(template.getSystemPrompt()); - vo.setSummaryMemory(template.getSummaryMemory()); - vo.setLangCode(template.getLangCode()); - vo.setLanguage(template.getLanguage()); - vo.setSort(template.getSort()); - vo.setCreator(template.getCreator()); - vo.setCreatedAt(template.getCreatedAt()); - vo.setUpdater(template.getUpdater()); - vo.setUpdatedAt(template.getUpdatedAt()); - return vo; - }).toList(); + // 使用ConvertUtils转换为VO列表 + List voList = ConvertUtils.sourceToTarget(pageResult.getRecords(), AgentTemplateVO.class); // 修复:使用构造函数创建PageData对象,而不是无参构造+setter PageData pageData = new PageData<>(voList, pageResult.getTotal()); @@ -138,44 +89,22 @@ public class AgentTemplateController { @GetMapping("/{id}") @Operation(summary = "获取模板详情") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") public Result getAgentTemplateById(@PathVariable("id") String id) { AgentTemplateEntity template = agentTemplateService.getById(id); if (template == null) { return ResultUtils.error("模板不存在"); } - // 转换为VO - AgentTemplateVO vo = new AgentTemplateVO(); - // 复制属性 - vo.setId(template.getId()); - vo.setAgentCode(template.getAgentCode()); - vo.setAgentName(template.getAgentName()); - vo.setAsrModelId(template.getAsrModelId()); - vo.setVadModelId(template.getVadModelId()); - vo.setLlmModelId(template.getLlmModelId()); - vo.setVllmModelId(template.getVllmModelId()); - vo.setTtsModelId(template.getTtsModelId()); - vo.setTtsVoiceId(template.getTtsVoiceId()); - vo.setMemModelId(template.getMemModelId()); - vo.setIntentModelId(template.getIntentModelId()); - vo.setChatHistoryConf(template.getChatHistoryConf()); - vo.setSystemPrompt(template.getSystemPrompt()); - vo.setSummaryMemory(template.getSummaryMemory()); - vo.setLangCode(template.getLangCode()); - vo.setLanguage(template.getLanguage()); - vo.setSort(template.getSort()); - vo.setCreator(template.getCreator()); - vo.setCreatedAt(template.getCreatedAt()); - vo.setUpdater(template.getUpdater()); - vo.setUpdatedAt(template.getUpdatedAt()); + // 使用ConvertUtils转换为VO + AgentTemplateVO vo = ConvertUtils.sourceToTarget(template, AgentTemplateVO.class); return ResultUtils.success(vo); } @PostMapping @Operation(summary = "创建模板") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") public Result createAgentTemplate(@Valid @RequestBody AgentTemplateEntity template) { boolean saved = agentTemplateService.save(template); if (saved) { @@ -187,7 +116,7 @@ public class AgentTemplateController { @PutMapping @Operation(summary = "更新模板") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") public Result updateAgentTemplate(@Valid @RequestBody AgentTemplateEntity template) { boolean updated = agentTemplateService.updateById(template); if (updated) { @@ -199,7 +128,7 @@ public class AgentTemplateController { @DeleteMapping("/{id}") @Operation(summary = "删除模板") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") public Result deleteAgentTemplate(@PathVariable("id") String id) { boolean deleted = agentTemplateService.removeById(id); if (deleted) { @@ -209,23 +138,11 @@ public class AgentTemplateController { } } - // 删除原有的批量删除方法 - // @PostMapping("/batch-delete") - // @Operation(summary = "批量删除模板") - // @RequiresPermissions("sys:role:normal") - // public Result batchDeleteAgentTemplates(@RequestBody List ids) { - // boolean deleted = agentTemplateService.removeByIds(ids); - // if (deleted) { - // return ResultUtils.success("批量删除成功"); - // } else { - // return ResultUtils.error("批量删除模板失败"); - // } - // } // 添加新的批量删除方法,使用不同的URL @PostMapping("/batch-remove") @Operation(summary = "批量删除模板") - @RequiresPermissions("sys:role:normal") + @RequiresPermissions("sys:role:superAdmin") public Result batchRemoveAgentTemplates(@RequestBody List ids) { boolean deleted = agentTemplateService.removeByIds(ids); if (deleted) { diff --git a/main/manager-web/src/components/AgentTemplateDialog.vue b/main/manager-web/src/components/AgentTemplateDialog.vue deleted file mode 100644 index 451c80d0..00000000 --- a/main/manager-web/src/components/AgentTemplateDialog.vue +++ /dev/null @@ -1,107 +0,0 @@ - - - - - \ No newline at end of file diff --git a/main/manager-web/src/i18n/en.js b/main/manager-web/src/i18n/en.js index c21f3b18..81a17f76 100644 --- a/main/manager-web/src/i18n/en.js +++ b/main/manager-web/src/i18n/en.js @@ -827,7 +827,7 @@ export default { 'providerDialog.confirmBatchDeleteFields': 'Are you sure to delete {count} selected fields?', 'providerDialog.batchDeleteFieldsSuccess': 'Successfully deleted {count} fields', - // ...existing code ... + // 在agentTemplateManagement对象中添加以下键 agentTemplateManagement: { title: 'Default Role Management', templateName: 'Template Name', @@ -848,6 +848,14 @@ export default { serialNumber: 'Serial Number', selectAll: 'Select All', deselectAll: 'Deselect All', + loading: 'Loading...', + confirmSingleDelete: 'Are you sure you want to delete this template?', + confirmBatchDelete: 'Are you sure you want to delete the selected {count} templates?', + deleteSuccess: 'Template deleted successfully', + deleteFailed: 'Template deletion failed', + batchDeleteSuccess: 'Templates deleted successfully', + batchDeleteFailed: 'Template batch deletion failed', + deleteBackendError: 'Deletion failed, please check if the backend service is working properly', templateDialog: { title: 'Template Configuration', templateName: 'Template Name', diff --git a/main/manager-web/src/i18n/zh_CN.js b/main/manager-web/src/i18n/zh_CN.js index ae1097f4..fbe72c7f 100644 --- a/main/manager-web/src/i18n/zh_CN.js +++ b/main/manager-web/src/i18n/zh_CN.js @@ -827,7 +827,7 @@ export default { 'providerDialog.batchDeleteFieldsSuccess': '成功删除{count}个字段', // 默认角色模版和模版快速配置页面 - // 在agentTemplateManagement对象中添加 + // 在agentTemplateManagement对象中添加以下键 agentTemplateManagement: { title: '默认角色管理', templateName: '模板名称', @@ -848,6 +848,12 @@ export default { serialNumber: '序号', selectAll: '全选', deselectAll: '取消全选', + loading: '拼命加载中', + confirmSingleDelete: '确定要删除这个模板吗?', + confirmBatchDelete: '确定要删除选中的 {count} 个模板吗?', + deleteFailed: '模板删除失败', + batchDeleteFailed: '模板批量删除失败', + deleteBackendError: '删除失败,请检查后端服务是否正常', templateDialog: { title: '模板配置', templateName: '模板名称', diff --git a/main/manager-web/src/i18n/zh_TW.js b/main/manager-web/src/i18n/zh_TW.js index e0568cbe..d3721592 100644 --- a/main/manager-web/src/i18n/zh_TW.js +++ b/main/manager-web/src/i18n/zh_TW.js @@ -847,6 +847,14 @@ agentTemplateManagement: { serialNumber:'序號', selectAll: '全選', deselectAll: '取消全選', + deselectAll: '取消全選', + loading: '拼命加載中', + confirmSingleDelete: '確定要刪除這個模板嗎?', + confirmBatchDelete: '確定要刪除選中的 {count} 個模板嗎?', + deleteFailed: '模板刪除失敗', + batchDeleteFailed: '批次刪除失敗', + deleteBackendError: '刪除失敗,請檢查後端服務是否正常', + deleteCancelled: '已取消刪除', templateDialog: { title: '模板配置', templateName: '模板名稱', diff --git a/main/manager-web/src/router/index.js b/main/manager-web/src/router/index.js index fae7de6a..b916e2f3 100644 --- a/main/manager-web/src/router/index.js +++ b/main/manager-web/src/router/index.js @@ -168,12 +168,15 @@ VueRouter.prototype.push = function push(location) { } // 需要登录才能访问的路由 -const protectedRoutes = ['home', 'RoleConfig', 'DeviceManagement', 'UserManagement', 'ModelConfig', 'TemplateQuickConfig'] +const protectedRoutes = ['home', 'RoleConfig', 'DeviceManagement', 'UserManagement', 'ModelConfig'] + +// 需要管理员权限才能访问的路由 +const adminRoutes = ['TemplateQuickConfig', 'AgentTemplateManagement'] // 路由守卫 router.beforeEach((to, from, next) => { // 检查是否是需要保护的路由 - if (protectedRoutes.includes(to.name)) { + if (protectedRoutes.includes(to.name) || adminRoutes.includes(to.name)) { // 从localStorage获取token const token = localStorage.getItem('token') if (!token) { @@ -181,6 +184,16 @@ router.beforeEach((to, from, next) => { next({ name: 'login', query: { redirect: to.fullPath } }) return } + + // 对于需要管理员权限的路由,检查用户是否是超级管理员 + if (adminRoutes.includes(to.name)) { + const isSuperAdmin = localStorage.getItem('isSuperAdmin') === 'true' + if (!isSuperAdmin) { + // 不是管理员,跳转到首页或显示无权限提示 + next({ name: 'home' }) + return + } + } } next() }) diff --git a/main/manager-web/src/views/AgentTemplateManagement.vue b/main/manager-web/src/views/AgentTemplateManagement.vue index b57a1a14..f2dad108 100644 --- a/main/manager-web/src/views/AgentTemplateManagement.vue +++ b/main/manager-web/src/views/AgentTemplateManagement.vue @@ -1,6 +1,6 @@ - - - - + - + + + + + + + + + + + + + + + + + @@ -84,30 +104,19 @@ - -