修复bug

This commit is contained in:
2026-08-03 20:50:18 +08:00
parent d2370650e7
commit fa922ca96f
13 changed files with 357 additions and 736 deletions
+7 -4
View File
@@ -16,10 +16,7 @@ describe('adminNavigation', () => {
'通用',
'系统管理',
])
expect(adminNavigation[0].children?.map((item) => item.title)).toEqual([
'客户列表',
'企业审核',
])
expect(adminNavigation[0].children?.map((item) => item.title)).toEqual(['客户列表'])
expect(adminNavigation.find((item) => item.key === 'general')?.children?.map((item) => item.title)).toContain('快递公司')
expect(adminNavigation.find((item) => item.key === 'general')?.children?.map((item) => item.title)).toContain('下载中心')
expect(adminNavigation.find((item) => item.key === 'system')?.children?.map((item) => item.title)).toEqual([
@@ -56,6 +53,12 @@ describe('adminNavigation', () => {
expect(JSON.stringify(adminNavigation, (key, value) => key === 'icon' ? '[icon]' : value)).toBe(sourceSnapshot)
})
it('keeps the merged customer entry for existing review-only roles', () => {
const filtered = filterAdminNavigation(adminNavigation, new Set(['platform:customer:review']))
expect(getNavigationLeaves(filtered).map((item) => item.path)).toContain('/customers')
})
it('supports manually hiding a module without removing its route definition', () => {
const filtered = filterAdminNavigation([{ key: 'hidden', title: '隐藏模块', icon: adminNavigation[0].icon, path: '/hidden', hidden: true }], new Set())
+9 -4
View File
@@ -5,7 +5,6 @@ import {
ClipboardList,
Database,
Download,
FileCheck2,
KeyRound,
Settings,
ShieldCheck,
@@ -21,6 +20,7 @@ export interface AdminNavigationNode {
iconColor?: string
path?: string
permission?: string
permissionAnyOf?: string[]
/** Set to true to remove a prototype module from the sidebar without deleting its route. */
hidden?: boolean
children?: AdminNavigationNode[]
@@ -41,8 +41,7 @@ export const adminNavigation: AdminNavigationNode[] = [
icon: Building2,
iconColor: '#52c41a',
children: [
{ key: 'customers-list', title: '客户列表', icon: Building2, path: '/customers', permission: 'platform:customer:list' },
{ key: 'enterprise-reviews', title: '企业审核', icon: FileCheck2, path: '/customers/reviews', permission: 'platform:customer:review' },
{ key: 'customers-list', title: '客户列表', icon: Building2, path: '/customers', permission: 'platform:customer:list', permissionAnyOf: ['platform:customer:review'] },
// { key: 'warehouse-tier-fee', title: '海外仓阶梯费用', icon: Building2, path: '/prototype/customer-management/warehouse-tier-fee' },
],
},
@@ -258,7 +257,13 @@ export function filterAdminNavigation(
const children = filterAdminNavigation(node.children, permissionCodes)
return children.length ? [{ ...node, children }] : []
}
if (!node.path || (node.permission && !permissionCodes.has(node.permission))) return []
const alternativePermissions = node.permissionAnyOf ?? []
const requiresPermission = Boolean(node.permission || alternativePermissions.length)
const hasPermission = !requiresPermission || Boolean(
(node.permission && permissionCodes.has(node.permission))
|| alternativePermissions.some((permission) => permissionCodes.has(permission)),
)
if (!node.path || !hasPermission) return []
return [{ ...node }]
})
}