| | |
| | | }) |
| | | |
| | | export const adminMenu = [ |
| | | page('dashboard', '工作台', '/dashboard', { icon: 'Monitor', component: 'dashboard' }), |
| | | page('dashboard', '工作台', '/dashboard', { icon: 'Monitor', component: 'dashboard', permission: 'DASHBOARD' }), |
| | | { |
| | | code: 'users', title: '用户管理', icon: 'User', children: [ |
| | | page('visitor-list', '游客列表', '/visitors', { component: 'visitors' }), |
| | | page('visitor-list', '游客列表', '/visitors', { component: 'visitors', permission: 'VISITOR_LIST' }), |
| | | ], |
| | | }, |
| | | { |
| | | code: 'guides', title: '导游管理', icon: 'Guide', children: [ |
| | | page('guide-list', '导游列表', '/guides', { component: 'guides' }), |
| | | page('guide-audit', '导游审核', '/guide-audits', { component: 'guideAudits' }), |
| | | page('guide-team', '讲解队管理', '/guide-teams', { component: 'guideTeams' }), |
| | | page('guide-list', '导游列表', '/guides', { component: 'guides', permission: 'GUIDE_LIST' }), |
| | | page('guide-audit', '导游审核', '/guide-audits', { component: 'guideAudits', permission: 'GUIDE_AUDIT' }), |
| | | page('guide-team', '讲解队管理', '/guide-teams', { component: 'guideTeams', permission: 'GUIDE_TEAM' }), |
| | | ], |
| | | }, |
| | | { |
| | | code: 'orders', title: '订单管理', icon: 'Tickets', children: [ |
| | | page('order-list', '订单列表', '/orders', { component: 'orders' }), |
| | | page('order-list', '订单列表', '/orders', { component: 'orders', permission: 'ORDER_LIST' }), |
| | | ], |
| | | }, |
| | | { |
| | | code: 'operations', title: '运营管理', icon: 'Operation', children: [ |
| | | page('city-list', '城市管理', '/operations/cities', { component: 'cities' }), |
| | | page('scenic-list', '景区管理', '/operations/scenic-spots', { component: 'scenicSpots' }), |
| | | page('review-list', '评价管理', '/operations/reviews', { component: 'reviews' }), |
| | | page('feedback-list', '反馈管理', '/operations/feedback', { component: 'feedback' }), |
| | | page('platform-settings', '平台设置', '/operations/platform-settings', { component: 'platformSettings' }), |
| | | page('agreement-settings', '协议设置', '/operations/agreements', { component: 'agreements' }), |
| | | page('city-list', '城市管理', '/operations/cities', { component: 'cities', permission: 'CITY_LIST' }), |
| | | page('scenic-list', '景区管理', '/operations/scenic-spots', { component: 'scenicSpots', permission: 'SCENIC_LIST' }), |
| | | page('review-list', '评价管理', '/operations/reviews', { component: 'reviews', permission: 'REVIEW_LIST' }), |
| | | page('feedback-list', '反馈管理', '/operations/feedback', { component: 'feedback', permission: 'FEEDBACK_LIST' }), |
| | | page('platform-settings', '平台设置', '/operations/platform-settings', { component: 'platformSettings', permission: 'PLATFORM_SETTINGS' }), |
| | | page('agreement-settings', '协议设置', '/operations/agreements', { component: 'agreements', permission: 'AGREEMENT_SETTINGS' }), |
| | | ], |
| | | }, |
| | | { |
| | | code: 'finance', title: '财务管理', icon: 'Wallet', children: [ |
| | | page('finance-detail', '财务详情', '/finance/details', { component: 'financeLedger' }), |
| | | page('finance-refund', '财务详情-退款', '/finance/refunds', { component: 'financeLedger' }), |
| | | page('withdrawal-list', '提现管理', '/finance/withdrawals', { component: 'withdrawals' }), |
| | | page('finance-detail', '财务详情', '/finance/details', { component: 'financeLedger', permission: 'FINANCE_DETAIL' }), |
| | | page('finance-refund', '财务详情-退款', '/finance/refunds', { component: 'financeLedger', permission: 'FINANCE_REFUND' }), |
| | | page('withdrawal-list', '提现管理', '/finance/withdrawals', { component: 'withdrawals', permission: 'WITHDRAWAL_LIST' }), |
| | | ], |
| | | }, |
| | | { |
| | | code: 'system', title: '系统设置', icon: 'Setting', children: [ |
| | | page('role-list', '角色管理', '/system/roles', { component: 'roles' }), |
| | | page('employee-list', '员工管理', '/system/employees', { component: 'employees' }), |
| | | page('role-list', '角色管理', '/system/roles', { component: 'roles', permission: 'ROLE_LIST' }), |
| | | page('employee-list', '员工管理', '/system/employees', { component: 'employees', permission: 'EMPLOYEE_LIST' }), |
| | | ], |
| | | }, |
| | | ] |
| | |
| | | path: item.path.slice(1), |
| | | name: item.code, |
| | | component: componentLoaders[item.component], |
| | | meta: { title: item.title }, |
| | | meta: { title: item.title, permission: item.permission }, |
| | | props: item.component === 'placeholder' |
| | | ? { title: item.title, description: item.description, endpoint: item.endpoint } |
| | | : undefined, |
| | |
| | | export const getExpandedMenuCodes = (items = adminMenu) => items.flatMap((item) => ( |
| | | item.children ? [item.code, ...getExpandedMenuCodes(item.children)] : [] |
| | | )) |
| | | |
| | | export const hasPermission = (menuCodes, permission) => ( |
| | | !permission || new Set(menuCodes || []).has(permission) |
| | | ) |
| | | |
| | | export const filterAdminMenu = (menuCodes, items = adminMenu) => items.flatMap((item) => { |
| | | if (item.children) { |
| | | const children = filterAdminMenu(menuCodes, item.children) |
| | | return children.length ? [{ ...item, children }] : [] |
| | | } |
| | | return hasPermission(menuCodes, item.permission) ? [item] : [] |
| | | }) |
| | | |
| | | export const firstPermittedPath = (menuCodes) => { |
| | | const firstItem = filterAdminMenu(menuCodes) |
| | | .flatMap((item) => item.children || [item]) |
| | | .find((item) => item.path) |
| | | return firstItem?.path || null |
| | | } |