feat
This commit is contained in:
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
/>
|
||||
|
||||
<!-- 名称 -->
|
||||
<span class="node-name">{{ item.name }}</span>
|
||||
<span class="node-name">{{ item.title }}</span>
|
||||
</div>
|
||||
|
||||
<!-- 子节点 -->
|
||||
|
||||
Reference in New Issue
Block a user