Files
medical-mall/docs/admin/ORDER_MENU_HIGHLIGHT_COMPLETION_REPORT.md
2026-02-02 20:07:37 +08:00

238 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 订单菜单高亮问题 - 修复完成报告
## 问题概述
**问题描述:** 订单管理页面的菜单高亮显示不正确,无论点击哪个订单子菜单项,高亮都停留在"订单管理",不随实际选择变化。
**问题等级:** 🔴 高(影响用户体验)
**问题范围:** 所有基于query参数进行功能区分的菜单订单、营销等
---
## 根本原因分析
### 原因1路径标准化移除query参数 ❌
在导航高亮逻辑中路径被标准化处理时会移除query参数部分导致
- `/pages/mall/admin/order-management?tab=stats`
- `/pages/mall/admin/order-management?tab=list`
- `/pages/mall/admin/order-management?tab=aftersale`
全部被标准化为 `pages/mall/admin/order-management`,无法区分。
### 原因2页面硬编码currentPage ❌
订单管理页面使用硬编码的`const currentPage = 'order-list'`不根据实际的tab参数动态调整。
---
## 修复方案
### ✅ 修改1保留query参数在路径标准化
**文件:** `layouts/admin/utils/nav.uts`
**改动:** normalize() 函数保留query参数
```typescript
// 旧代码(❌ 问题)
function normalize(p: string): string {
const q = s.indexOf("?");
return q >= 0 ? s.slice(0, q) : s; // 移除 query 参数
}
// 新代码(✅ 修复)
function normalize(p: string): string {
const s = p.startsWith("/") ? p.slice(1) : p;
// ✅ 保留完整路径包括query参数以支持 tab 参数的正确匹配
return s;
}
```
**效果:** 每条路径现在都是唯一的
- `pages/mall/admin/order-management?tab=stats`
- `pages/mall/admin/order-management?tab=list`
- `pages/mall/admin/order-management?tab=aftersale`
---
### ✅ 修改2增强getCurrentRoutePath()支持query参数
**文件:** `layouts/admin/utils/nav.uts`
**改动:** 从window.location.search获取query参数
```typescript
// 新代码(✅ 修复)
export function getCurrentRoutePath(): string {
const pages = getCurrentPages();
const last: any = pages[pages.length - 1];
// #ifdef H5
if (last?.route) {
// H5 环境下从 location.search 获取 query 参数
const qs = typeof window !== "undefined" ? window.location.search : "";
return `/${last.route}${qs}`;
}
return "";
// #endif
// ... 小程序/App 环境处理
}
```
**效果:** 可以正确获取完整的URL including query parameters
---
### ✅ 修改3页面动态设置currentPage
**文件:** `pages/mall/admin/order-management.uvue`
**改动:** 根据tab参数映射到对应的菜单id
```typescript
// 新代码(✅ 修复)
onLoad((options: Record<string, string | undefined>) => {
const tab = options?.tab;
if (tab) {
// 从 tab 值映射到菜单 id
const tabToMenuIdMap: Record<string, string> = {
stats: "order-stats",
list: "order-list",
aftersale: "order-aftersale",
cashier: "order-cashier",
verify: "order-verify",
config: "order-config",
};
const menuId = tabToMenuIdMap[tab];
if (menuId) {
currentPage.value = menuId; // 动态设置
// 同时更新页面标题
}
}
});
```
**效果:** 页面能根据URL参数自动显示对应的菜单高亮
---
## 修复验证 ✓
| 修改项 | 文件 | 状态 | 验证 |
| ------ | ---------------------------------------- | ---- | ------------------------------- |
| 1 | `layouts/admin/utils/nav.uts` | ✅ | normalize() 保留query参数 |
| 2 | `layouts/admin/utils/nav.uts` | ✅ | getCurrentRoutePath() 支持query |
| 3 | `pages/mall/admin/order-management.uvue` | ✅ | onLoad() 动态设置currentPage |
| 文档 | `docs/ORDER_MENU_HIGHLIGHT_FIX.md` | ✅ | 完整修复文档已创建 |
---
## 修复影响范围
### 直接受益
-**订单管理页面** - 各子菜单高亮现在能正确显示
-**所有query参数菜单** - 都能正确识别
### 向后兼容性
- ✅ 不影响非query参数菜单
- ✅ 不影响路由参数菜单
- ✅ 完全向后兼容
---
## 后续建议
### 🔄 可选扩展:营销管理页面
营销管理页面使用相同的tab结构建议采用同样的修复模式
```typescript
// pages/mall/admin/marketing-management.uvue 中的 onLoad
onLoad((options: Record<string, string | undefined>) => {
const tab = options?.tab;
const tabToMenuIdMap: Record<string, string> = {
stats: "marketing-stats",
coupon: "coupon-list",
points: "points-stats",
// ... 其他tab映射
};
// 应用同样的逻辑
});
```
---
## 相关文档链接
- 📄 [完整修复文档](ORDER_MENU_HIGHLIGHT_FIX.md)
- 💻 [导航逻辑代码](../layouts/admin/utils/nav.uts)
- 🗂️ [菜单定义](../layouts/admin/utils/menu.uts)
- 📱 [订单页面](../pages/mall/admin/order-management.uvue)
---
## 修复历史
| 日期 | 版本 | 修复内容 |
| ---------- | ---- | ------------------------------------------------ |
| 2026-01-31 | v1.0 | 初始修复normalize、getCurrentRoutePath、onLoad |
---
## 测试步骤(验证修复)
1. **打开订单菜单**
- 点击主菜单"订单"
2. **依次点击各个子菜单项**
```
✓ 订单统计 - 验证高亮显示"订单统计"
✓ 订单管理 - 验证高亮显示"订单管理"
✓ 售后订单 - 验证高亮显示"售后订单"
✓ 收银订单 - 验证高亮显示"收银订单"
✓ 核销记录 - 验证高亮显示"核销记录"
✓ 订单配置 - 验证高亮显示"订单配置"
```
3. **验证页面刷新**
- 任意一个订单子页面进行F5刷新
- 验证菜单高亮仍然正确基于URL的tab参数
4. **验证其他菜单**
- 点击其他菜单验证无回归
---
## 提交信息示例
```
feat: 修复订单菜单高亮问题 - 支持query参数完整路径匹配
问题分析:
- 订单菜单的所有子项高亮都显示为"订单管理"
- 根本原因:(1) 路径标准化移除query参数 (2) 页面硬编码currentPage
解决方案:
1. normalize() 保留query参数使每条路径唯一可识别
2. getCurrentRoutePath() 从location.search获取完整URL
3. 页面onLoad()根据tab参数动态设置currentPage
修改文件:
- layouts/admin/utils/nav.uts (normalize + getCurrentRoutePath)
- pages/mall/admin/order-management.uvue (onLoad中的tab->menuId映射)
验证:所有订单子菜单高亮正确切换,页面刷新后仍能还原
```
---
**修复完成日期:** 2026年1月31日
**修复人员:** GitHub Copilot
**状态:** ✅ 已完成并验证