liujie
2026-08-14 92a75a7b157e6fd6423df17cfd32015017bdb8c9
frontend/src/config/adminMenu.js
@@ -7,45 +7,45 @@
})
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' }),
    ],
  },
]
@@ -74,7 +74,7 @@
  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,
@@ -88,3 +88,22 @@
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
}