const LEGACY_BACKEND_MENU_TITLES = { 'menu.abnormal': '异常管理', 'menu.aiCallLog': 'AI 观测', 'menu.aiMcpMount': 'MCP 挂载', 'menu.aiParam': 'AI 参数', 'menu.aiPrompt': 'Prompt 管理', 'menu.asnOrder': '入库通知单', 'menu.asnOrderItem': '收货明细', 'menu.asnOrderItemLog': '收货历史明细', 'menu.asnOrderLog': '历史通知单', 'menu.basContainer': '容器规则', 'menu.basStation': '站点管理', 'menu.basStationArea': '站点区域', 'menu.basicInfo': '基础信息', 'menu.check': '盘点管理', 'menu.checkDiff': '盘点差异单', 'menu.checkItem': '盘点单明细', 'menu.checkOrder': '盘点单', 'menu.checkOutBound': '盘点出库', 'menu.companys': '往来企业', 'menu.config': '配置参数', 'menu.container': '容器管理(废)', 'menu.contract': '合同信息(废)', 'menu.customer': '客户表', 'menu.dashboard': '控制台', 'menu.delivery': 'DO单', 'menu.deliveryItem': 'DO单明细', 'menu.department': '部门管理', 'menu.deviceBind': '设备绑定', 'menu.deviceSite': '路径管理', 'menu.dictData': '字典数据集', 'menu.dictType': '数据字典', 'menu.fields': '扩展字段', 'menu.fieldsItem': '扩展字段明细', 'menu.flowInstance': '流程实例', 'menu.flowStepInstance': '流程步骤实例', 'menu.flowStepLog': '流程步骤日志', 'menu.flowStepTemplate': '流程步骤模板', 'menu.freeze': '库存冻结', 'menu.histories': '历史档', 'menu.host': '机构管理', 'menu.inStatistic': '日入库汇总查询', 'menu.inStatisticItem': '日入库明细查询', 'menu.inStockPoces': '入库管理', 'menu.loc': '库位', 'menu.locArea': '逻辑分区(废)', 'menu.locAreaMat': '逻辑分区', 'menu.locAreaMatRela': '库区物料关系', 'menu.locDeadReport': '库存停滞报表', 'menu.locItem': '库存明细', 'menu.locPreview': '库位明细', 'menu.locRevise': '库存调整', 'menu.reviseLog': '库位调整日志', 'menu.reviseLogItem': '库位调整日志明细', 'menu.locType': '库位类型(废)', 'menu.logs': '日志', 'menu.matnr': '物料', 'menu.matnrGroup': '物料分组', 'menu.matnrRoleMenu': '物料权限', 'menu.menu': '菜单管理', 'menu.menuPda': 'PDA菜单', 'menu.missionFlowStepInstance': '任务流程步骤', 'menu.operation': '操作日志', 'menu.outBound': '出库作业', 'menu.outStatistic': '日出库汇总查询', 'menu.outStatisticItem': '日出库明细查询', 'menu.outStock': '出库通知单', 'menu.outStockItem': '出库单明细', 'menu.outStockPoces': '出库管理', 'menu.pdaRoleMenu': 'PDA权限', 'menu.permissions': '权限管理', 'menu.platform': '平台管理', 'menu.preparation': '备料单', 'menu.purchase': 'PO单', 'menu.purchaseItem': 'PO单明细', 'menu.qlyInspect': '质检信息', 'menu.qlyIsptItem': '质检信息明细', 'menu.role': '角色管理', 'menu.serialRule': '编码规则', 'menu.serialRuleItem': '编码规则子表', 'menu.settings': '个人设置', 'menu.shipper': '货主信息', 'menu.statisticCount': '日出入库汇总统计', 'menu.statisticReport': '报表管理', 'menu.statistics': '库存查询', 'menu.stock': '入出库历史', 'menu.stockItem': '单据明细', 'menu.stockManage': '库存管理', 'menu.stockStatistic': '日入库汇总查询', 'menu.stockTransfer': '库位转移', 'menu.subsystemFlowTemplate': '子系统流程模板', 'menu.supplier': '供应商', 'menu.system': '系统设置', 'menu.task': '任务管理', 'menu.taskInstance': '任务实例', 'menu.taskInstanceNode': '任务实例节点', 'menu.taskItem': '任务档明细', 'menu.taskItemLog': '任务明细历史档', 'menu.taskLog': '任务历史档', 'menu.taskPathTemplate': '任务路径模板', 'menu.taskPathTemplateMerge': '任务路径模板合并', 'menu.taskPathTemplateNode': '任务路径模板节点', 'menu.tasks': '任务管理', 'menu.tenant': '租户管理', 'menu.token': '登录日志', 'menu.transfer': '调拔单', 'menu.transferItem': '调拔单明细', 'menu.transferPoces': '调拨管理', 'menu.user': '用户管理', 'menu.userCenter': '个人中心', 'menu.userLogin': '登录日志', 'menu.waitPakin': '组托档', 'menu.waitPakinItem': '组托档明细', 'menu.waitPakinItemLog': '组托历史档明细', 'menu.waitPakinLog': '组托历史档', 'menu.wareWork': '仓库作业', 'menu.warehouse': '仓库', 'menu.warehouseAreas': '库区', 'menu.warehouseAreasItem': '收货库存', 'menu.warehouseRoleMenu': '仓库权限', 'menu.warehouseStock': '即时库存', 'menu.wave': '波次管理', 'menu.waveItem': '波次明细', 'menu.waveRule': '波次策略', 'menu.whMat': '库区物料关系' } const DASHBOARD_MENU_KEYS = new Set(['menus.dashboard.title', 'menus.dashboard.console']) const BACKEND_MENU_TITLE_KEY_MAP = Object.entries(LEGACY_BACKEND_MENU_TITLES).reduce( (accumulator, [key, value]) => { accumulator[key] = key accumulator[value] = key return accumulator }, { '仪表盘': 'menus.dashboard.title', '工作台': 'menus.dashboard.console', 'menus.dashboard.title': 'menus.dashboard.title', 'menus.dashboard.console': 'menus.dashboard.console' } ) function normalizeComponentMenuKey(componentKey) { if (typeof componentKey !== 'string') { return '' } const normalizedComponentKey = componentKey.trim() if (!normalizedComponentKey) { return '' } if (normalizedComponentKey === 'console') { return 'menus.dashboard.console' } return `menu.${normalizedComponentKey}` } function normalizeMenuKey(menuKey) { if (!menuKey) { return '' } if (DASHBOARD_MENU_KEYS.has(menuKey)) { return menuKey } if (menuKey.startsWith('menus.')) { const leaf = menuKey.slice('menus.'.length) const aliasKey = `menu.${leaf}` if (Object.prototype.hasOwnProperty.call(LEGACY_BACKEND_MENU_TITLES, aliasKey)) { return aliasKey } } return menuKey } function containsHan(value) { return /[\u3400-\u9fff]/.test(value) } export function resolveBackendMenuTitle(title, componentKey = '') { const trimmedTitle = typeof title === 'string' ? title.trim() : '' if (trimmedTitle) { if (trimmedTitle.startsWith('menu.') || trimmedTitle.startsWith('menus.')) { const normalizedExistingKey = normalizeMenuKey(trimmedTitle) if (normalizedExistingKey) { return normalizedExistingKey } } const mappedKey = BACKEND_MENU_TITLE_KEY_MAP[trimmedTitle] if (mappedKey) { return normalizeMenuKey(mappedKey) } } const componentMenuKey = normalizeMenuKey(normalizeComponentMenuKey(componentKey)) if (componentMenuKey) { return componentMenuKey } if (trimmedTitle && !containsHan(trimmedTitle)) { return trimmedTitle } return '' } export { LEGACY_BACKEND_MENU_TITLES }