From 3fdb03cc60eee52044216ea154b490076501bf74 Mon Sep 17 00:00:00 2001 From: ygx Date: Thu, 12 Mar 2026 22:38:13 +0800 Subject: [PATCH] feat --- src/router/menu-data.ts | 4 +- .../components/PermissionSettingDialog.vue | 38 ++++++++++++++----- .../components/PermissionTree.vue | 2 +- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/router/menu-data.ts b/src/router/menu-data.ts index c349549..2411188 100644 --- a/src/router/menu-data.ts +++ b/src/router/menu-data.ts @@ -72,12 +72,12 @@ export function transformMenuToRoutes(menuItems: ServerMenuItem[]): AppRouteReco meta: { locale: item.locale || item.title, requiresAuth: item.requiresAuth !== false, - icon: item.icon, + icon: item.icon || item?.menu_icon, order: item.sort_key ?? item.order, hideInMenu: item.hideInMenu, hideChildrenInMenu: item.hideChildrenInMenu, roles: item.roles, - isNewTab: item.is_new_tab + isNewTab: item.is_new_tab, }, component: DEFAULT_LAYOUT, } diff --git a/src/views/ops/pages/system-settings/account-management/components/PermissionSettingDialog.vue b/src/views/ops/pages/system-settings/account-management/components/PermissionSettingDialog.vue index 464dc01..94df48d 100644 --- a/src/views/ops/pages/system-settings/account-management/components/PermissionSettingDialog.vue +++ b/src/views/ops/pages/system-settings/account-management/components/PermissionSettingDialog.vue @@ -38,12 +38,13 @@ import { ref, computed, watch } from 'vue' import { Message } from '@arco-design/web-vue' import PermissionTreeItem from './PermissionTree.vue' import { - getUserPmnTree, userPmn, userModifyPmn, } from '@/api/module/user' +import { fetchMenu } from '@/api/module/pmn' import type { UserItem } from '@/api/types' import { useAppStore } from '@/store' +import { buildTree } from '@/utils/tree' const props = defineProps<{ user: UserItem | null @@ -74,26 +75,43 @@ const fetchPermissions = async () => { loading.value = true try { - // 并行获取权限树和用户当前权限 - const [treeRes, pmnRes] = await Promise.all([ - getUserPmnTree({ id: props.user.id, workspace: import.meta.env.VITE_APP_WORKSPACE || '' }), + // 并行获取完整权限树和用户当前权限 + const [menuRes, pmnRes] = await Promise.all([ + fetchMenu({ page: 1, size: 999 }), // 获取系统所有菜单 userPmn({ id: props.user.id, workspace: import.meta.env.VITE_APP_WORKSPACE || '', }), ]) - console.log('treeRes', treeRes) - if (treeRes.details) { - permissionTree.value = treeRes.data + // 构建完整的权限树结构 + if (menuRes?.code === 0 && menuRes.details?.data) { + const { rootItems } = buildTree(menuRes.details.data, { + idKey: 'id', + parentKey: 'parent_id', + childrenKey: 'children', + orderKey: 'sort_key' + }) + permissionTree.value = rootItems + // 默认展开第一层 - treeRes.data.forEach((item: any) => { + rootItems.forEach((item: any) => { expandedKeys.value.add(item.id) }) } - if (pmnRes.data) { - selectedPermissions.value = pmnRes.data.map((item: any) => item.pmn_id || item) + // 设置用户当前拥有的权限为选中状态 + if (pmnRes.details) { + console.log('pmnRes.details', pmnRes.details) + // 处理不同的数据格式:对象数组或ID数组 + selectedPermissions.value = pmnRes.details[0]?.permissions.map((item: any) => { + if (typeof item === 'object' && item !== null) { + // 如果是对象,优先使用 id 字段,其次 pmn_id 字段 + return item.id || item.pmn_id + } + // 如果是数字,直接返回 + return item + }).filter((id: any) => id !== undefined && id !== null) originalPermissions.value = [...selectedPermissions.value] } } catch (error) { diff --git a/src/views/ops/pages/system-settings/account-management/components/PermissionTree.vue b/src/views/ops/pages/system-settings/account-management/components/PermissionTree.vue index ada258e..62ea251 100644 --- a/src/views/ops/pages/system-settings/account-management/components/PermissionTree.vue +++ b/src/views/ops/pages/system-settings/account-management/components/PermissionTree.vue @@ -21,7 +21,7 @@ /> - {{ item.name }} + {{ item.title }}