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 }}