fix: 按轨迹新手指引模式补齐订单/渠道指引菜单与路由映射

generate-menu-excel、vite dev SPA 白名单、top-nav path 映射与 locale 区分同名「新手指引」。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zzh 2026-07-09 15:34:48 +08:00
parent 2f230d3761
commit b87301e89d
4 changed files with 52 additions and 3 deletions

View File

@ -304,6 +304,17 @@ const menuData = [
hideInMenu: false,
},
// 二级菜单 - 订单
{
level: 2,
name: '新手指引',
permissionCode: 'Order',
route: '/order/guide',
component: 'views/order/orderGuide/index',
icon: 'icon-book',
order: 0,
hideInMenu: false,
parentRoute: '/order',
},
{
level: 2,
name: '我要查价',
@ -361,6 +372,17 @@ const menuData = [
hideInMenu: false,
},
// 二级菜单 - 渠道
{
level: 2,
name: '新手指引',
permissionCode: 'Channel',
route: '/channel/guide',
component: 'views/channel/channelGuide/index',
icon: 'icon-book',
order: 0,
hideInMenu: false,
parentRoute: '/channel',
},
{
level: 2,
name: '销售产品',

View File

@ -32,7 +32,7 @@
<component :is="getSubMenuIcon(menuItem, item, menuNameToLocaleKeyMap)" />
</span>
<span class="child-menu-item__text">
{{ formatMenuTitle(menuItem.name || menuItem.meta?.title) }}
{{ formatMenuTitle(menuItem.name || menuItem.meta?.title, menuItem.path || menuItem.route) }}
</span>
</div>
</div>
@ -169,7 +169,7 @@ import {
useHiprintClientState,
} from '@/utils/hiprint/hiprintClientState';
import { getMapIdFromAccessToken } from '@/utils/jwt';
import { getSubMenuIcon } from '@/utils/menu-icon';
import { getSubMenuIcon, PATH_TO_LOCALE_KEY } from '@/utils/menu-icon';
import { canAccessCustomerPortalRoute } from '@/utils/login-portal';
import { resolveCurrentCustomer } from '@/api/customer/resolve';
import { CUSTOMER_BALANCE_CHANGED_EVENT } from '@/api/customer/accountFlow';
@ -405,6 +405,9 @@ const belongTopMenu = computed(() => {
return '';
});
// 路径 → locale(同名菜单如「新手指引」须按 path 区分)
const pathToLocaleKeyMap = PATH_TO_LOCALE_KEY;
// 中文菜单名称到 locale key 的映射表
const menuNameToLocaleKeyMap: Record<string, string> = {
'首页': 'menu.home',
@ -483,8 +486,12 @@ const menuNameToLocaleKeyMap: Record<string, string> = {
};
// 格式化菜单标题
const formatMenuTitle = (title?: string) => {
const formatMenuTitle = (title?: string, path?: string) => {
if (!title) return '';
const routePath = path?.trim();
if (routePath && pathToLocaleKeyMap[routePath]) {
return t(pathToLocaleKeyMap[routePath]) || title;
}
// 如果是 locale key,直接翻译
if (title.startsWith('menu.')) {
return t(title) || title;
@ -576,7 +583,14 @@ const pathToRouteNameMap: Record<string, string> = {
'/channel/weightRounding': 'WeightRounding',
'/channel/autoTrigger': 'AutoTrigger',
'/channel/issueTemplate': 'IssueTemplate',
'/channel/guide': 'ChannelGuide',
'/order/guide': 'OrderGuide',
'/order/priceCheck': 'PriceCheck',
'/order/placeOrder': 'PlaceOrder',
'/order/myOrders': 'MyOrders',
'/order/batchJobs': 'OrderBatchJobs',
// Track 相关路由
'/track/guide': 'TrackGuide',
'/track/order': 'TrackOrder',
'/track/warningOrder': 'TrackWarningOrder',
'/track/state': 'TrackState',

View File

@ -104,6 +104,13 @@ export function resolveArcoIcon(icon?: string | null): Component | null {
return (Icons as Record<string, Component>)[pascal] ?? null
}
/** 同名菜单(如「新手指引」)按 path 区分 locale */
export const PATH_TO_LOCALE_KEY: Record<string, string> = {
'/track/guide': 'menu.track.trackGuide',
'/order/guide': 'menu.order.orderGuide',
'/channel/guide': 'menu.channel.channelGuide',
}
type MenuIconItem = {
name?: string
path?: string
@ -118,6 +125,10 @@ function resolveLocaleKey(
menuItem: MenuIconItem,
nameToLocaleKeyMap?: Record<string, string>,
): string | undefined {
const routePath = (menuItem.path || menuItem.route || '').trim()
if (routePath && PATH_TO_LOCALE_KEY[routePath]) {
return PATH_TO_LOCALE_KEY[routePath]
}
const title = menuItem.name || menuItem.meta?.title || ''
if (!title) return undefined
if (title.startsWith('menu.')) return title

View File

@ -258,7 +258,9 @@ export default defineConfig(({ mode }) => {
'/channel/autoTrigger',
'/channel/issueTemplate',
'/channel/labelDesign',
'/channel/guide',
// Order 相关前端路由
'/order/guide',
'/order/priceCheck',
'/order/placeOrder',
'/order/myOrders',