feat(admin): register phase3 service center routes
This commit is contained in:
@@ -63,6 +63,20 @@ describe('admin router access metadata', () => {
|
||||
expect(detailIndex).toBeGreaterThan(globalIndex)
|
||||
})
|
||||
|
||||
it('registers phase-three service center routes with their stable permissions', () => {
|
||||
const expected = [
|
||||
['port-schedules', '/port-schedules', 'platform:firstleg:port-schedule:list'],
|
||||
['customs-cases', '/customs', 'platform:firstleg:customs:list'],
|
||||
['outbound-dispatches', '/outbound-dispatches', 'platform:firstleg:outbound-dispatch:list'],
|
||||
]
|
||||
|
||||
for (const [name, path, permission] of expected) {
|
||||
const route = router.getRoutes().find((item) => item.name === name)
|
||||
expect(route?.path).toBe(path)
|
||||
expect(route?.meta.permission).toBe(permission)
|
||||
}
|
||||
})
|
||||
|
||||
it('protects counterparty records with a stable master-data permission', () => {
|
||||
const route = router.getRoutes().find((item) => item.name === 'counterparties')
|
||||
expect(route?.path).toBe('/master-data/counterparties')
|
||||
|
||||
@@ -21,6 +21,9 @@ import { warehouseRoutes } from '@/modules/warehouses/routes'
|
||||
import { prototypeModuleRoutes } from '@/prototype/routes'
|
||||
import { oceanBookingRoutes } from '@/modules/ocean-bookings/routes'
|
||||
import { truckingRoutes } from '@/modules/trucking/routes'
|
||||
import { portScheduleRoutes } from '@/modules/port-schedules/routes'
|
||||
import { customsRoutes } from '@/modules/customs/routes'
|
||||
import { outboundDispatchRoutes } from '@/modules/outbound-dispatch/routes'
|
||||
import { feeItemRoutes } from '@/modules/fee-items/routes'
|
||||
import { containerLoadingRoutes } from '@/modules/container-loading/routes'
|
||||
import { loadingListRoutes } from '@/modules/loading-lists/routes'
|
||||
@@ -49,7 +52,10 @@ const router = createRouter({
|
||||
...dashboardRoutes,
|
||||
...prototypeModuleRoutes,
|
||||
...oceanBookingRoutes,
|
||||
...portScheduleRoutes,
|
||||
...truckingRoutes,
|
||||
...customsRoutes,
|
||||
...outboundDispatchRoutes,
|
||||
...containerLoadingRoutes,
|
||||
...loadingListRoutes,
|
||||
...financeRoutes,
|
||||
|
||||
@@ -35,6 +35,13 @@ describe('adminNavigation', () => {
|
||||
'库位管理',
|
||||
'托盘管理',
|
||||
])
|
||||
expect(adminNavigation.find((item) => item.key === 'service-center')?.children?.map((item) => item.title)).toEqual([
|
||||
'订舱列表',
|
||||
'船期信息',
|
||||
'拖车列表',
|
||||
'报关协同',
|
||||
'国内出仓',
|
||||
])
|
||||
expect(adminNavigation.find((item) => item.key === 'supplier-center')?.children?.map((item) => item.title)).toEqual([
|
||||
'供应商列表',
|
||||
'快递公司',
|
||||
@@ -89,6 +96,9 @@ describe('adminNavigation', () => {
|
||||
expect(paths).toContain('/container-loading/smart-loading')
|
||||
expect(paths).toContain('/loading-plans')
|
||||
expect(paths).toContain('/loading-lists')
|
||||
expect(paths).toContain('/port-schedules')
|
||||
expect(paths).toContain('/customs')
|
||||
expect(paths).toContain('/outbound-dispatches')
|
||||
expect(paths).not.toContain('/prototype/container-management/container-list')
|
||||
expect(paths).not.toContain('/prototype/container-management/preload-list')
|
||||
expect(paths).not.toContain('/prototype/container-management/manifest')
|
||||
@@ -166,6 +176,25 @@ describe('adminNavigation', () => {
|
||||
])
|
||||
})
|
||||
|
||||
it('shows each phase-three service center entry only with its matching permission', () => {
|
||||
const filtered = filterAdminNavigation(adminNavigation, new Set([
|
||||
'platform:firstleg:ocean-booking:list',
|
||||
'platform:firstleg:port-schedule:list',
|
||||
'platform:firstleg:truck-appointment:list',
|
||||
'platform:firstleg:customs:list',
|
||||
'platform:firstleg:outbound-dispatch:list',
|
||||
]))
|
||||
|
||||
expect(getNavigationLeaves(filtered).map((item) => item.path)).toEqual([
|
||||
'/dashboard',
|
||||
'/ocean-bookings',
|
||||
'/port-schedules',
|
||||
'/trucking',
|
||||
'/customs',
|
||||
'/outbound-dispatches',
|
||||
])
|
||||
})
|
||||
|
||||
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())
|
||||
|
||||
|
||||
@@ -78,7 +78,10 @@ export const adminNavigation: AdminNavigationNode[] = [
|
||||
icon: ClipboardList,
|
||||
children: [
|
||||
{ key: 'booking-list', title: '订舱列表', icon: ClipboardList, path: '/ocean-bookings', permission: 'platform:firstleg:ocean-booking:list' },
|
||||
{ key: 'port-schedules', title: '船期信息', icon: ClipboardList, path: '/port-schedules', permission: 'platform:firstleg:port-schedule:list' },
|
||||
{ key: 'truck-list', title: '拖车列表', icon: Truck, path: '/trucking', permission: 'platform:firstleg:truck-appointment:list' },
|
||||
{ key: 'customs-cases', title: '报关协同', icon: FileCheck2, path: '/customs', permission: 'platform:firstleg:customs:list' },
|
||||
{ key: 'outbound-dispatches', title: '国内出仓', icon: Truck, path: '/outbound-dispatches', permission: 'platform:firstleg:outbound-dispatch:list' },
|
||||
],
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user