实现系统菜单树管理第一版

This commit is contained in:
andy
2026-07-16 12:47:21 +07:00
parent 5390b8f71b
commit ed37d5f955
9 changed files with 1410 additions and 316 deletions

View File

@@ -10,6 +10,7 @@ import {
createAdminUser,
fetchAdminAudits,
fetchAdminHotels,
fetchAdminMenuTree,
fetchAdminMenus,
fetchAdminPermissions,
fetchAdminRoleDetail,
@@ -20,6 +21,7 @@ import {
updateAdminHotel,
updateAdminHotelStatus,
updateAdminMenu,
updateAdminMenuTreeOrder,
updateAdminRole,
updateAdminUser,
} from '@/services/systemAdminService'
@@ -107,6 +109,69 @@ describe('systemAdminService', () => {
)
})
it('fetches and saves the admin menu tree endpoints', async () => {
const fetchMock = vi.spyOn(globalThis, 'fetch').mockResolvedValue(
mockJsonResponse({
items: [
{
id: '40001',
parent_id: null,
menu_code: 'SYSTEM_SETTINGS',
menu_name: '系统设置',
menu_type: 'GROUP',
route_path: '/system',
component_key: 'system',
icon_key: 'pi pi-cog',
permission_code: 'SYSTEM_ADMIN_CONSOLE_ACCESS',
sort_order: 900,
visible: true,
menu_status: 'ACTIVE',
known_route: true,
created_at: '2026-07-16T00:00:00Z',
updated_at: '2026-07-16T00:00:00Z',
children: [],
},
],
warnings: ['菜单 49999 的 parent_id 不存在,已按根级异常节点返回。'],
}),
)
const tree = await fetchAdminMenuTree()
await updateAdminMenuTreeOrder({
items: [
{
menu_id: '40002',
parent_id: '40001',
sort_order: 100,
},
],
})
expect(tree.items[0]?.children).toEqual([])
expect(tree.warnings[0]).toContain('parent_id')
expect(fetchMock).toHaveBeenNthCalledWith(
1,
'/api/admin/menus/tree',
expect.objectContaining({ method: 'GET' }),
)
expect(fetchMock).toHaveBeenNthCalledWith(
2,
'/api/admin/menus/tree-order',
expect.objectContaining({
method: 'PUT',
body: JSON.stringify({
items: [
{
menu_id: '40002',
parent_id: '40001',
sort_order: 100,
},
],
}),
}),
)
})
it('fetches the readonly permission list', async () => {
const fetchMock = vi.spyOn(globalThis, 'fetch').mockResolvedValue(
mockJsonResponse([