| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- import type { AppRouteRecord } from '@/types/router'
- /** 目录型菜单缺省图标 */
- export const DEFAULT_SUBMENU_ICON = 'ri:folder-2-line'
- /** 叶子菜单缺省图标 */
- export const DEFAULT_MENU_ITEM_ICON = 'ri:file-list-2-line'
- /**
- * 侧栏菜单图标映射(按路由 name;未在 meta 配置 icon 时使用)
- * 键与 router/modules 中 name 一致,便于前后端菜单对齐。
- */
- export const SIDEBAR_MENU_ICON_MAP: Record<string, string> = {
- // ── 报销管理 ──
- BxManagement: 'ri:wallet-3-line',
- BxConfig: 'ri:settings-4-line',
- BxAdvance: 'ri:money-cny-box-line',
- BxReimburse: 'ri:file-list-3-line',
- BxViewCenter: 'ri:layout-grid-line',
- BxExpenseItem: 'ri:price-tag-3-line',
- BxWorkflowAdvance: 'ri:git-branch-line',
- BxWorkflowReimburse: 'ri:git-merge-line',
- BxAdvanceApply: 'ri:money-cny-circle-line',
- BxAdvanceApprove: 'ri:check-double-line',
- BxAdvanceIssue: 'ri:hand-coin-line',
- BxReimburseApply: 'ri:file-edit-line',
- BxReimburseApprove: 'ri:checkbox-circle-line',
- BxPayment: 'ri:bank-card-line',
- BxViewMine: 'ri:user-line',
- BxViewTodo: 'ri:time-line',
- BxViewAll: 'ri:file-list-3-line',
- // ── CRM ──
- CrmManagement: 'goods',
- CrmProductCategory: 'ri:folder-3-line',
- CrmProduct: 'ri:box-3-line',
- CrmClue: 'ri:seedling-line',
- CrmOpportunity: 'ri:trophy-line',
- CrmQuote: 'ri:file-text-line',
- CrmContract: 'ri:file-paper-2-line',
- CrmCustomer: 'ri:team-line',
- CrmCustomerPool: 'ri:global-line',
- // ── 地磅 ──
- DbManagement: 'ri:scales-3-line',
- DbDashboard: 'ri:dashboard-line',
- DbPlans: 'ri:calendar-schedule-line',
- DbInventory: 'ri:archive-line',
- DbWeighing: 'ri:scales-line',
- // ── 工作流 ──
- Workflow: 'workflow',
- WorkflowProcess: 'workflow',
- WorkflowPending: 'ri:inbox-line',
- WorkflowCompleted: 'ri:checkbox-circle-line',
- WorkflowMyApplications: 'ri:file-user-line',
- LeaveRequest: 'ri:calendar-event-line',
- Duty: 'ri:calendar-schedule-line',
- DutySchedule: 'ri:calendar-check-line',
- // ── 系统 ──
- SystemManage: 'ri:settings-3-line',
- SystemInfo: 'ri:information-line',
- SystemTemp: 'ri:inbox-archive-line',
- Tenant: 'ri:building-line',
- Dict: 'ri:book-2-line',
- Menu: 'ri:menu-line',
- Dept: 'ri:organization-chart',
- Role: 'ri:shield-user-line',
- User: 'user',
- Post: 'ri:briefcase-line',
- // ── 运输 ──
- TransportPlan: 'ri:truck-line',
- PlPlanModule: 'ri:route-line',
- PlCertUpload: 'ri:shield-check-line',
- PlFreightModule: 'ri:money-cny-box-line',
- PlVehicleModule: 'ri:car-line',
- PlDocumentReminderModule: 'ri:alarm-warning-line',
- PlBaseInfo: 'ri:database-2-line',
- PlCarrier: 'ri:building-2-line',
- PlVehicle: 'ri:truck-line',
- PlSelfVehicle: 'ri:car-line',
- PlPersonnel: 'ri:user-settings-line',
- PlPlan: 'ri:route-line',
- PlPlanArchive: 'ri:folder-check-line',
- PlPlanCert: 'ri:shield-check-line',
- PlFreight: 'ri:money-cny-box-line',
- PlFreightApproval: 'ri:checkbox-circle-line',
- PlFreightDisburse: 'ri:bank-card-line',
- PlDocumentReminder: 'ri:alarm-warning-line',
- PlTransportAddress: 'ri:map-pin-line'
- }
- /** 按 menuCode 补充映射(后端菜单可能仅有 code) */
- export const SIDEBAR_MENU_ICON_BY_CODE: Record<string, string> = {
- 'bx:expenseItem:list': 'ri:price-tag-3-line',
- 'bx:workflowAdvance:list': 'ri:git-branch-line',
- 'bx:workflowReimburse:list': 'ri:git-merge-line',
- 'bx:advanceApply:list': 'ri:money-cny-circle-line',
- 'bx:advanceApprove:list': 'ri:check-double-line',
- 'bx:advanceIssue:list': 'ri:hand-coin-line',
- 'bx:reimburseApply:list': 'ri:file-edit-line',
- 'bx:reimburseApprove:list': 'ri:checkbox-circle-line',
- 'bx:payment:list': 'ri:bank-card-line',
- 'bx:invoiceWallet:admin': 'ri:folder-shared-line',
- 'bx:invoiceWallet:mine': 'ri:wallet-3-line',
- 'bx:viewMine:list': 'ri:user-line',
- 'bx:viewTodo:list': 'ri:time-line',
- 'bx:viewAll:list': 'ri:file-list-3-line',
- 'crm:productCategory:list': 'ri:folder-3-line',
- 'crm:product:list': 'ri:box-3-line',
- 'crm:clue:list': 'ri:seedling-line',
- 'crm:opportunity:list': 'ri:trophy-line',
- 'crm:quote:list': 'ri:file-text-line',
- 'crm:contract:list': 'ri:file-paper-2-line',
- 'crm:priceLetter:list': 'ri:file-list-3-line',
- 'crm:customer:list': 'ri:team-line',
- 'crm:customerPool:list': 'ri:global-line',
- 'db:dashboard:list': 'ri:dashboard-line',
- 'db:plan:list': 'ri:calendar-schedule-line',
- 'db:inventory:list': 'ri:archive-line',
- 'db:weighing:list': 'ri:scales-line',
- 'workflow:process': 'workflow',
- 'workflow:pending': 'ri:inbox-line',
- 'workflow:completed': 'ri:checkbox-circle-line',
- 'workflow:myApplications': 'ri:file-user-line',
- 'workflow:leave': 'ri:calendar-event-line',
- 'system:tenant:list': 'ri:building-line',
- 'system:dict:list': 'ri:book-2-line',
- 'system:menu:list': 'ri:menu-line',
- 'system:dept:list': 'ri:organization-chart',
- 'system:role:list': 'ri:shield-user-line',
- 'system:user:list': 'user',
- 'system:post:list': 'ri:briefcase-line',
- 'pl:carrier:list': 'ri:building-2-line',
- 'pl:vehicle:list': 'ri:truck-line',
- 'pl:self-vehicle:list': 'ri:car-line',
- 'pl:driver:list': 'ri:user-settings-line',
- 'pl:plan:list': 'ri:route-line',
- 'pl:plan-archive:list': 'ri:folder-check-line',
- 'pl:plan-cert:list': 'ri:shield-check-line',
- 'pl:freight:list': 'ri:money-cny-box-line',
- 'pl:freight-approval:list': 'ri:checkbox-circle-line',
- 'pl:freight-disburse:list': 'ri:bank-card-line',
- 'pl:transport-address:list': 'ri:map-pin-line',
- 'pl:vehicle-recharge-apply:list': 'ri:gas-station-line',
- 'pl:vehicle-recharge-record:list': 'ri:hand-coin-line',
- 'pl:vehicle-maintenance-apply:list': 'ri:tools-line',
- 'pl:vehicle-maintenance-process:list': 'ri:settings-3-line',
- 'pl:vehicle-urea-apply:list': 'ri:drop-line',
- 'pl:vehicle-urea-disburse:list': 'ri:drop-line',
- 'pl:document:list': 'ri:alarm-warning-line'
- }
- function lookupMappedIcon(item: AppRouteRecord): string {
- const metaIcon = String(item.meta?.icon ?? '').trim()
- if (metaIcon) return metaIcon
- const name = String(item.name ?? '').trim()
- if (name && SIDEBAR_MENU_ICON_MAP[name]) {
- return SIDEBAR_MENU_ICON_MAP[name]
- }
- const menuCode = String((item.meta as { menuCode?: string })?.menuCode ?? '').trim()
- if (menuCode && SIDEBAR_MENU_ICON_BY_CODE[menuCode]) {
- return SIDEBAR_MENU_ICON_BY_CODE[menuCode]
- }
- return ''
- }
- /**
- * 解析侧栏菜单图标:meta.icon → 路由 name / menuCode 映射 → 缺省图标。
- */
- export function resolveSidebarMenuIcon(
- item: AppRouteRecord,
- hasChildren = false
- ): string {
- const mapped = lookupMappedIcon(item)
- if (mapped) return mapped
- return hasChildren ? DEFAULT_SUBMENU_ICON : DEFAULT_MENU_ITEM_ICON
- }
|