From 49ffb9dbb28a53e6b2ea259100f528c8e80b7b1f Mon Sep 17 00:00:00 2001 From: zhangtao <9480807882@qq.com> Date: Tue, 5 May 2026 21:47:13 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=A7=BB=E9=99=A4=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E8=B7=AF=E7=94=B1=E5=B9=B6=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E8=B7=AF=E7=94=B1=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除不再使用的系统管理路由模块 - 更新路由配置,确保仅保留必要的模块 - 添加Element Plus图标全局注册功能 - 优化分页组件,增加更多属性支持 - 重构表格操作列渲染逻辑,提升代码可读性和复用性 - 更新多个组件以支持新的操作列渲染方式 --- frontend/new-web/.env | 2 +- frontend/new-web/art-design-pro | 1 + frontend/new-web/scripts/clean-dev.ts | 66 +-- .../src/components/Pagination/index.vue | 21 +- .../core/tables/art-table/index.vue | 136 +++-- .../art-festival-text-scroll/index.vue | 7 +- frontend/new-web/src/config/setting.ts | 2 +- frontend/new-web/src/hooks/core/useAuth.ts | 25 +- .../src/layouts/art-page-content/index.vue | 103 +--- frontend/new-web/src/main.ts | 3 + .../new-web/src/router/guards/beforeEach.ts | 13 +- .../new-web/src/router/modules/exception.ts | 9 +- frontend/new-web/src/router/modules/index.ts | 5 +- frontend/new-web/src/router/modules/system.ts | 49 -- .../new-web/src/router/routes/staticRoutes.ts | 5 +- .../src/router/utils/backendMenuTransform.ts | 7 +- .../src/router/utils/mergeShellMenus.ts | 1 - .../new-web/src/store/modules/user.store.ts | 4 +- frontend/new-web/src/types/router/index.ts | 2 - .../new-web/src/utils/navigation/route.ts | 9 +- frontend/new-web/src/utils/sys/console.ts | 2 +- frontend/new-web/src/utils/table/index.ts | 2 + .../utils/table/renderTableOperationCell.ts | 124 +++++ .../new-web/src/utils/table/tableConfig.ts | 8 +- .../new-web/src/utils/table/tableUtils.ts | 26 +- .../src/views/module_ai/memory/index.vue | 76 +-- .../src/views/module_example/demo/index.vue | 69 ++- .../src/views/module_example/demo01/index.vue | 69 ++- .../views/module_generator/gencode/index.vue | 87 ++-- .../views/module_monitor/resource/index.vue | 37 +- .../src/views/module_system/dept/index.vue | 95 +--- .../dict/components/DataDrawer.vue | 87 ++-- .../src/views/module_system/dict/index.vue | 101 ++-- .../src/views/module_system/log/index.vue | 71 +-- .../src/views/module_system/menu/index.vue | 99 +--- .../src/views/module_system/notice/index.vue | 89 ++-- .../src/views/module_system/param/index.vue | 89 ++-- .../src/views/module_system/role/index.vue | 135 ++--- .../src/views/module_system/user/index.vue | 102 +--- .../views/module_task/cronjob/node/index.vue | 94 ++-- .../new-web/src/views/system/menu/index.vue | 479 ------------------ .../views/system/menu/modules/menu-dialog.vue | 384 -------------- .../new-web/src/views/system/role/index.vue | 239 --------- .../system/role/modules/role-edit-dialog.vue | 162 ------ .../role/modules/role-permission-dialog.vue | 254 ---------- .../views/system/role/modules/role-search.vue | 124 ----- .../new-web/src/views/system/user/index.vue | 258 ---------- .../views/system/user/modules/user-dialog.vue | 143 ------ .../views/system/user/modules/user-search.vue | 111 ---- .../views/widgets/examples/tables/tree.vue | 64 ++- 50 files changed, 936 insertions(+), 3214 deletions(-) create mode 160000 frontend/new-web/art-design-pro delete mode 100644 frontend/new-web/src/router/modules/system.ts create mode 100644 frontend/new-web/src/utils/table/renderTableOperationCell.ts delete mode 100644 frontend/new-web/src/views/system/menu/index.vue delete mode 100644 frontend/new-web/src/views/system/menu/modules/menu-dialog.vue delete mode 100755 frontend/new-web/src/views/system/role/index.vue delete mode 100644 frontend/new-web/src/views/system/role/modules/role-edit-dialog.vue delete mode 100644 frontend/new-web/src/views/system/role/modules/role-permission-dialog.vue delete mode 100644 frontend/new-web/src/views/system/role/modules/role-search.vue delete mode 100644 frontend/new-web/src/views/system/user/index.vue delete mode 100644 frontend/new-web/src/views/system/user/modules/user-dialog.vue delete mode 100644 frontend/new-web/src/views/system/user/modules/user-search.vue diff --git a/frontend/new-web/.env b/frontend/new-web/.env index 4000d5b0..41f1a9c0 100755 --- a/frontend/new-web/.env +++ b/frontend/new-web/.env @@ -10,7 +10,7 @@ VITE_PORT = 5180 VITE_BASE_URL = / # 权限模式【 frontend 仅前端路由 / backend 仅后端菜单 / mixed 后端菜单+前端路由模块合并 】 -VITE_ACCESS_MODE = mixed +VITE_ACCESS_MODE = frontend # 跨域请求时是否携带 Cookie(开启前需确保后端支持) VITE_WITH_CREDENTIALS = false diff --git a/frontend/new-web/art-design-pro b/frontend/new-web/art-design-pro new file mode 160000 index 00000000..6b6d781a --- /dev/null +++ b/frontend/new-web/art-design-pro @@ -0,0 +1 @@ +Subproject commit 6b6d781a63eb51782841ac9c29c2bb42a23911f2 diff --git a/frontend/new-web/scripts/clean-dev.ts b/frontend/new-web/scripts/clean-dev.ts index 758c11d2..10f2317b 100644 --- a/frontend/new-web/scripts/clean-dev.ts +++ b/frontend/new-web/scripts/clean-dev.ts @@ -156,7 +156,6 @@ const targets = [ "CHANGELOG.md", "CHANGELOG.zh-CN.md", "src/views/safeguard", - "src/views/system/nested", "src/views/widgets", "src/views/dashboard/analysis", "src/views/dashboard/ecommerce", @@ -254,73 +253,14 @@ async function cleanRouteModules() { // 忽略 } - // 重写 system.ts - 移除 nested 嵌套菜单 - const systemContent = `import { AppRouteRecord } from '@/types/router' - -export const systemRoutes: AppRouteRecord = { - path: '/art-system', - name: 'ArtSystem', - component: '/index/index', - meta: { - title: 'menus.system.title', - icon: 'ri:user-3-line', - roles: ['R_SUPER', 'R_ADMIN'] - }, - children: [ - { - path: 'user', - name: 'ArtTplUser', - component: '/system/user', - meta: { - title: 'menus.system.user', - keepAlive: true, - roles: ['R_SUPER', 'R_ADMIN'] - } - }, - { - path: 'role', - name: 'ArtTplRole', - component: '/system/role', - meta: { - title: 'menus.system.role', - keepAlive: true, - roles: ['R_SUPER'] - } - }, - { - path: 'menu', - name: 'ArtTplMenus', - component: '/system/menu', - meta: { - title: 'menus.system.menu', - keepAlive: true, - roles: ['R_SUPER'], - authList: [ - { title: '新增', authMark: 'add' }, - { title: '编辑', authMark: 'edit' }, - { title: '删除', authMark: 'delete' } - ] - } - } - ] -} -`; - await fs.writeFile(path.join(modulesPath, "system.ts"), systemContent, "utf-8"); - - // 重写 index.ts - 只导入保留的模块 + // 重写 index.ts:widgets 已删则仅保留 exception const indexContent = `import { AppRouteRecord } from '@/types/router' -import { systemRoutes } from './system' -import { resultRoutes } from './result' import { exceptionRoutes } from './exception' /** - * 导出所有模块化路由 + * 导出所有模块化路由(业务菜单由后端动态下发) */ -export const routeModules: AppRouteRecord[] = [ - systemRoutes, - resultRoutes, - exceptionRoutes -] +export const routeModules: AppRouteRecord[] = [exceptionRoutes] `; await fs.writeFile(path.join(modulesPath, "index.ts"), indexContent, "utf-8"); diff --git a/frontend/new-web/src/components/Pagination/index.vue b/frontend/new-web/src/components/Pagination/index.vue index 72d092f8..bbf32135 100644 --- a/frontend/new-web/src/components/Pagination/index.vue +++ b/frontend/new-web/src/components/Pagination/index.vue @@ -6,8 +6,11 @@ v-model:current-page="currentPage" v-model:page-size="pageSize" :background="background" + :disabled="disabled" :layout="layout" :page-sizes="pageSizes" + :pager-count="pagerCount" + :size="size" :total="total" @size-change="handleSizeChange" @current-change="handleCurrentChange" @@ -17,6 +20,8 @@ diff --git a/frontend/new-web/src/config/setting.ts b/frontend/new-web/src/config/setting.ts index 9769ff5e..93fb2fab 100644 --- a/frontend/new-web/src/config/setting.ts +++ b/frontend/new-web/src/config/setting.ts @@ -114,7 +114,7 @@ export const SETTING_DEFAULT_CONFIG = { /** 是否显示语言切换 */ showLanguage: true, /** 是否显示进度条 */ - showNprogress: false, + showNprogress: true, /** 是否显示设置引导 */ showSettingGuide: true, /** 是否显示节日文本 */ diff --git a/frontend/new-web/src/hooks/core/useAuth.ts b/frontend/new-web/src/hooks/core/useAuth.ts index 0d06e658..f43276b9 100644 --- a/frontend/new-web/src/hooks/core/useAuth.ts +++ b/frontend/new-web/src/hooks/core/useAuth.ts @@ -35,13 +35,13 @@ import { storeToRefs } from "pinia"; import { useUserStore } from "@/store/modules/user.store"; import { useAppMode } from "@/hooks/core/useAppMode"; import type { AppRouteRecord } from "@/types/router"; +import { ROLE_ROOT } from "@/constants"; type AuthItem = NonNullable[number]; -const userStore = useUserStore(); - export const useAuth = () => { const route = useRoute(); + const userStore = useUserStore(); const { isFrontendMode } = useAppMode(); const { info } = storeToRefs(userStore); @@ -54,17 +54,28 @@ export const useAuth = () => { : []; /** - * 检查是否拥有某权限标识(前后端模式通用) - * @param auth 权限标识 - * @returns 是否有权限 + * 检查是否拥有某权限标识(与 v-hasPerm / 表格内 ArtButtonMore 全码一致) + * @param auth 权限标识(多为后端菜单 permission 全码,如 module_system:role:update) */ const hasAuth = (auth: string): boolean => { - // 前端模式 + if (!auth) return true; + + const userPrems = userStore.prems; + const roles = userStore.basicInfo?.roles as { code?: string }[] | undefined; + + // 与 directives/permission hasPerm 一致:超级管理员、通配 + if (roles?.some((r) => r.code === ROLE_ROOT)) return true; + if (userPrems.includes("*:*:*")) return true; + + /** 登录后由菜单树汇总的全局权限码(与 v-hasPerm 同源) */ + if (userPrems.includes(auth)) return true; + + // 前端模式:兼容 info.permissions if (isFrontendMode.value) { return frontendAuthList.includes(auth); } - // 后端模式 + // 后端模式:当前路由 meta 短标识(与 v-auth 一致) return backendAuthList.some((item) => item?.authMark === auth); }; diff --git a/frontend/new-web/src/layouts/art-page-content/index.vue b/frontend/new-web/src/layouts/art-page-content/index.vue index 30805bfc..0fc4698d 100644 --- a/frontend/new-web/src/layouts/art-page-content/index.vue +++ b/frontend/new-web/src/layouts/art-page-content/index.vue @@ -1,14 +1,9 @@