fix: 按轨迹新手指引模式补齐订单/渠道指引菜单与路由映射
generate-menu-excel、vite dev SPA 白名单、top-nav path 映射与 locale 区分同名「新手指引」。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
2f230d3761
commit
b87301e89d
@ -304,6 +304,17 @@ const menuData = [
|
|||||||
hideInMenu: false,
|
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,
|
level: 2,
|
||||||
name: '我要查价',
|
name: '我要查价',
|
||||||
@ -361,6 +372,17 @@ const menuData = [
|
|||||||
hideInMenu: false,
|
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,
|
level: 2,
|
||||||
name: '销售产品',
|
name: '销售产品',
|
||||||
|
|||||||
@ -32,7 +32,7 @@
|
|||||||
<component :is="getSubMenuIcon(menuItem, item, menuNameToLocaleKeyMap)" />
|
<component :is="getSubMenuIcon(menuItem, item, menuNameToLocaleKeyMap)" />
|
||||||
</span>
|
</span>
|
||||||
<span class="child-menu-item__text">
|
<span class="child-menu-item__text">
|
||||||
{{ formatMenuTitle(menuItem.name || menuItem.meta?.title) }}
|
{{ formatMenuTitle(menuItem.name || menuItem.meta?.title, menuItem.path || menuItem.route) }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -169,7 +169,7 @@ import {
|
|||||||
useHiprintClientState,
|
useHiprintClientState,
|
||||||
} from '@/utils/hiprint/hiprintClientState';
|
} from '@/utils/hiprint/hiprintClientState';
|
||||||
import { getMapIdFromAccessToken } from '@/utils/jwt';
|
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 { canAccessCustomerPortalRoute } from '@/utils/login-portal';
|
||||||
import { resolveCurrentCustomer } from '@/api/customer/resolve';
|
import { resolveCurrentCustomer } from '@/api/customer/resolve';
|
||||||
import { CUSTOMER_BALANCE_CHANGED_EVENT } from '@/api/customer/accountFlow';
|
import { CUSTOMER_BALANCE_CHANGED_EVENT } from '@/api/customer/accountFlow';
|
||||||
@ -405,6 +405,9 @@ const belongTopMenu = computed(() => {
|
|||||||
return '';
|
return '';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 路径 → locale(同名菜单如「新手指引」须按 path 区分)
|
||||||
|
const pathToLocaleKeyMap = PATH_TO_LOCALE_KEY;
|
||||||
|
|
||||||
// 中文菜单名称到 locale key 的映射表
|
// 中文菜单名称到 locale key 的映射表
|
||||||
const menuNameToLocaleKeyMap: Record<string, string> = {
|
const menuNameToLocaleKeyMap: Record<string, string> = {
|
||||||
'首页': 'menu.home',
|
'首页': 'menu.home',
|
||||||
@ -483,8 +486,12 @@ const menuNameToLocaleKeyMap: Record<string, string> = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 格式化菜单标题
|
// 格式化菜单标题
|
||||||
const formatMenuTitle = (title?: string) => {
|
const formatMenuTitle = (title?: string, path?: string) => {
|
||||||
if (!title) return '';
|
if (!title) return '';
|
||||||
|
const routePath = path?.trim();
|
||||||
|
if (routePath && pathToLocaleKeyMap[routePath]) {
|
||||||
|
return t(pathToLocaleKeyMap[routePath]) || title;
|
||||||
|
}
|
||||||
// 如果是 locale key,直接翻译
|
// 如果是 locale key,直接翻译
|
||||||
if (title.startsWith('menu.')) {
|
if (title.startsWith('menu.')) {
|
||||||
return t(title) || title;
|
return t(title) || title;
|
||||||
@ -576,7 +583,14 @@ const pathToRouteNameMap: Record<string, string> = {
|
|||||||
'/channel/weightRounding': 'WeightRounding',
|
'/channel/weightRounding': 'WeightRounding',
|
||||||
'/channel/autoTrigger': 'AutoTrigger',
|
'/channel/autoTrigger': 'AutoTrigger',
|
||||||
'/channel/issueTemplate': 'IssueTemplate',
|
'/channel/issueTemplate': 'IssueTemplate',
|
||||||
|
'/channel/guide': 'ChannelGuide',
|
||||||
|
'/order/guide': 'OrderGuide',
|
||||||
|
'/order/priceCheck': 'PriceCheck',
|
||||||
|
'/order/placeOrder': 'PlaceOrder',
|
||||||
|
'/order/myOrders': 'MyOrders',
|
||||||
|
'/order/batchJobs': 'OrderBatchJobs',
|
||||||
// Track 相关路由
|
// Track 相关路由
|
||||||
|
'/track/guide': 'TrackGuide',
|
||||||
'/track/order': 'TrackOrder',
|
'/track/order': 'TrackOrder',
|
||||||
'/track/warningOrder': 'TrackWarningOrder',
|
'/track/warningOrder': 'TrackWarningOrder',
|
||||||
'/track/state': 'TrackState',
|
'/track/state': 'TrackState',
|
||||||
|
|||||||
@ -104,6 +104,13 @@ export function resolveArcoIcon(icon?: string | null): Component | null {
|
|||||||
return (Icons as Record<string, Component>)[pascal] ?? 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 = {
|
type MenuIconItem = {
|
||||||
name?: string
|
name?: string
|
||||||
path?: string
|
path?: string
|
||||||
@ -118,6 +125,10 @@ function resolveLocaleKey(
|
|||||||
menuItem: MenuIconItem,
|
menuItem: MenuIconItem,
|
||||||
nameToLocaleKeyMap?: Record<string, string>,
|
nameToLocaleKeyMap?: Record<string, string>,
|
||||||
): string | undefined {
|
): 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 || ''
|
const title = menuItem.name || menuItem.meta?.title || ''
|
||||||
if (!title) return undefined
|
if (!title) return undefined
|
||||||
if (title.startsWith('menu.')) return title
|
if (title.startsWith('menu.')) return title
|
||||||
|
|||||||
@ -258,7 +258,9 @@ export default defineConfig(({ mode }) => {
|
|||||||
'/channel/autoTrigger',
|
'/channel/autoTrigger',
|
||||||
'/channel/issueTemplate',
|
'/channel/issueTemplate',
|
||||||
'/channel/labelDesign',
|
'/channel/labelDesign',
|
||||||
|
'/channel/guide',
|
||||||
// Order 相关前端路由
|
// Order 相关前端路由
|
||||||
|
'/order/guide',
|
||||||
'/order/priceCheck',
|
'/order/priceCheck',
|
||||||
'/order/placeOrder',
|
'/order/placeOrder',
|
||||||
'/order/myOrders',
|
'/order/myOrders',
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user