From 00cfcf289774337b481fd8933eefe79d49c5e2a4 Mon Sep 17 00:00:00 2001 From: "zhaowei.huang" <228127304@qq.com> Date: Fri, 29 May 2026 23:51:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(rbac-web):=20=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E7=BA=A7=E6=9D=83=E9=99=90=E4=B8=8E=E3=80=8C=E6=9D=83?= =?UTF-8?q?=E9=99=90=E4=B8=8E=E8=A7=92=E8=89=B2=E3=80=8D=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 rbac 的 api/types/mock,对接后端 catalog/roles/users;mock 模式与后端 PageCatalog 完全对齐 - EffectivePermissions 增加 allowedPages,auth store 新增 hasPage 判定 - 路由守卫按 route.name = 页面 Key 做页面级放行,无权时跳转到 scope 内首个可访问页面;AppShell 菜单按 hasPage 过滤 - 路由守卫 switchScope 失败自动重试一次;新增懒加载 chunk 失败整页自愈 onError,修复切页白屏 - PermissionGuard hidden 态改为友好空态提示;AuthRoleView 重写为完整的用户/角色/权限编辑界面 --- .../apps/simple-platform-vue/src/api/rbac.ts | 65 +++ .../src/components/PermissionGuard.vue | 10 +- .../src/components/ScopeSwitcher.vue | 25 +- .../src/layouts/AppShell.vue | 106 +++-- .../apps/simple-platform-vue/src/mock/rbac.ts | 264 ++++++++++ .../simple-platform-vue/src/mock/server.ts | 3 + .../simple-platform-vue/src/router/index.ts | 60 ++- .../simple-platform-vue/src/stores/auth.ts | 10 + .../simple-platform-vue/src/types/auth.ts | 6 + .../simple-platform-vue/src/types/rbac.ts | 84 ++++ .../src/views/admin/config/AuthRoleView.vue | 449 ++++++++++++++++-- 11 files changed, 976 insertions(+), 106 deletions(-) create mode 100644 frontends/apps/simple-platform-vue/src/api/rbac.ts create mode 100644 frontends/apps/simple-platform-vue/src/mock/rbac.ts create mode 100644 frontends/apps/simple-platform-vue/src/types/rbac.ts diff --git a/frontends/apps/simple-platform-vue/src/api/rbac.ts b/frontends/apps/simple-platform-vue/src/api/rbac.ts new file mode 100644 index 0000000..ecd9340 --- /dev/null +++ b/frontends/apps/simple-platform-vue/src/api/rbac.ts @@ -0,0 +1,65 @@ +import http from './http' +import type { + RbacRole, RbacUserView, RbacCatalog, SaveRolePayload, CreateUserPayload, UpdateUserPayload +} from '@/types/rbac' +import { + mockRbacCatalog, mockRbacRoles, mockRbacSaveRole, mockRbacDeleteRole, + mockRbacUsers, mockRbacCreateUser, mockRbacUpdateUser, mockRbacSetPassword, mockRbacDeleteUser +} from '@/mock/rbac' + +const MOCK = import.meta.env.VITE_USE_MOCK === 'true' + +export async function fetchCatalog(): Promise { + if (MOCK) return mockRbacCatalog() + const { data } = await http.get('/rbac/catalog') + return data +} + +export async function fetchRoles(): Promise { + if (MOCK) return mockRbacRoles() + const { data } = await http.get('/rbac/roles') + return data +} + +export async function saveRole(payload: SaveRolePayload): Promise { + if (MOCK) return mockRbacSaveRole(payload) + if (payload.id) { + const { data } = await http.put(`/rbac/roles/${payload.id}`, payload) + return data + } + const { data } = await http.post('/rbac/roles', payload) + return data +} + +export async function deleteRole(id: string): Promise { + if (MOCK) return mockRbacDeleteRole(id) + await http.delete(`/rbac/roles/${id}`) +} + +export async function fetchUsers(): Promise { + if (MOCK) return mockRbacUsers() + const { data } = await http.get('/rbac/users') + return data +} + +export async function createUser(payload: CreateUserPayload): Promise { + if (MOCK) return mockRbacCreateUser(payload) + const { data } = await http.post('/rbac/users', payload) + return data +} + +export async function updateUser(id: string, payload: UpdateUserPayload): Promise { + if (MOCK) return mockRbacUpdateUser(id, payload) + const { data } = await http.put(`/rbac/users/${id}`, payload) + return data +} + +export async function setUserPassword(id: string, password: string): Promise { + if (MOCK) return mockRbacSetPassword(id, password) + await http.put(`/rbac/users/${id}/password`, { password }) +} + +export async function deleteUser(id: string): Promise { + if (MOCK) return mockRbacDeleteUser(id) + await http.delete(`/rbac/users/${id}`) +} diff --git a/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue b/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue index f3e78b5..230099c 100644 --- a/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue +++ b/frontends/apps/simple-platform-vue/src/components/PermissionGuard.vue @@ -6,7 +6,12 @@
- + + + + +