工单路由跳转bug优化
parent
0065a1aea4
commit
347d9472ab
|
|
@ -1,29 +1,59 @@
|
|||
-- 查询工单管理菜单及其所有子菜单
|
||||
-- 检查工单管理菜单配置
|
||||
-- 诊断路由跳转问题的根本原因
|
||||
|
||||
-- 1. 查看工单管理的完整菜单树
|
||||
SELECT
|
||||
m.menu_id,
|
||||
m.menu_name,
|
||||
m.parent_id,
|
||||
m.order_num,
|
||||
m.path,
|
||||
m.component,
|
||||
m.query,
|
||||
m.menu_type,
|
||||
m.visible,
|
||||
m.perms,
|
||||
CASE
|
||||
WHEN m.parent_id = 0 THEN '根菜单'
|
||||
WHEN m.parent_id = 2098 THEN '工单管理子菜单'
|
||||
WHEN m.parent_id = 2092 THEN '测试工单子菜单'
|
||||
ELSE '其他'
|
||||
END as menu_level
|
||||
FROM sys_menu m
|
||||
WHERE m.menu_id IN (2098, 2092)
|
||||
OR m.parent_id IN (2098, 2092)
|
||||
ORDER BY
|
||||
CASE
|
||||
WHEN m.menu_id = 2098 THEN 1
|
||||
WHEN m.parent_id = 2098 THEN 2
|
||||
WHEN m.parent_id = 2092 THEN 3
|
||||
ELSE 4
|
||||
END,
|
||||
m.order_num;
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
order_num,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type,
|
||||
visible,
|
||||
status
|
||||
FROM sys_menu
|
||||
WHERE menu_id = 2098 -- 工单管理父菜单
|
||||
OR parent_id = 2098 -- 工单管理的子菜单
|
||||
OR menu_id = 2092 -- 测试工单菜单
|
||||
OR parent_id = 2092 -- 测试工单的子菜单
|
||||
ORDER BY parent_id, order_num;
|
||||
|
||||
-- 2. 查找所有包含 testOrder 或 testWorkOrder 的错误路径
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type
|
||||
FROM sys_menu
|
||||
WHERE path LIKE '%testOrder%'
|
||||
OR path LIKE '%testWorkOrder%'
|
||||
OR component LIKE '%test_order%';
|
||||
|
||||
-- 3. 查找所有状态相关的子菜单(这些可能是错误的)
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type
|
||||
FROM sys_menu
|
||||
WHERE parent_id IN (2098, 2092)
|
||||
AND menu_name IN ('进行中', '已完成', '待领取', '一审中', '二审中', '三审中', '全部工单', '测试中');
|
||||
|
||||
-- 4. 检查是否有重复的菜单配置
|
||||
SELECT
|
||||
menu_name,
|
||||
COUNT(*) as count,
|
||||
GROUP_CONCAT(menu_id) as menu_ids,
|
||||
GROUP_CONCAT(path) as paths
|
||||
FROM sys_menu
|
||||
WHERE parent_id IN (2098, 2092)
|
||||
GROUP BY menu_name
|
||||
HAVING COUNT(*) > 1;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
-- 删除工单管理下所有错误的子菜单
|
||||
-- 这些子菜单导致路由跳转错误
|
||||
|
||||
-- 查看所有工单管理的子菜单
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type
|
||||
FROM sys_menu
|
||||
WHERE parent_id = 2098 -- 工单管理的menu_id
|
||||
ORDER BY order_num;
|
||||
|
||||
-- 删除所有状态相关的子菜单
|
||||
-- 注意:请先确认上面的查询结果,再执行删除操作
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND menu_name IN ('进行中', '已完成', '待领取', '一审中', '二审中', '三审中', '全部工单');
|
||||
|
||||
-- 验证删除结果
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
menu_type
|
||||
FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
ORDER BY order_num;
|
||||
|
||||
-- 应该只剩下"测试工单"这一个子菜单
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
-- 删除错误的"进行中"子菜单
|
||||
-- 这个菜单导致点击"测试中"按钮时跳转到错误的URL
|
||||
-- 删除工单管理下的错误子菜单
|
||||
-- 这些子菜单导致路由跳转到错误的URL
|
||||
|
||||
-- 首先查看这个菜单的详细信息
|
||||
-- 步骤1:先查看要删除的菜单(确认后再执行删除)
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
|
|
@ -10,20 +10,26 @@ SELECT
|
|||
component,
|
||||
query,
|
||||
menu_type,
|
||||
visible
|
||||
perms
|
||||
FROM sys_menu
|
||||
WHERE menu_name = '进行中'
|
||||
AND parent_id = 2098
|
||||
AND path = 'testOrder01';
|
||||
WHERE parent_id = 2098 -- 工单管理的直接子菜单
|
||||
AND menu_type = 'C' -- 菜单类型
|
||||
AND path IN ('testOrder01', 'testWorkOrder02', 'test_work_order')
|
||||
AND menu_name IN ('进行中', '已完成', '测试中', '待领取', '一审中', '二审中', '三审中', '全部工单');
|
||||
|
||||
-- 删除这个错误的菜单
|
||||
-- 注意:请先确认上面的查询结果是否正确,再执行删除操作
|
||||
-- 步骤2:删除错误的状态子菜单
|
||||
-- 注意:请先执行步骤1确认要删除的菜单,再执行此步骤
|
||||
DELETE FROM sys_menu
|
||||
WHERE menu_name = '进行中'
|
||||
AND parent_id = 2098
|
||||
AND path = 'testOrder01';
|
||||
WHERE parent_id = 2098 -- 工单管理的直接子菜单
|
||||
AND menu_type = 'C' -- 菜单类型
|
||||
AND menu_name IN ('进行中', '已完成', '测试中', '待领取', '一审中', '二审中', '三审中', '全部工单');
|
||||
|
||||
-- 验证删除结果
|
||||
-- 步骤3:删除所有包含错误路径的菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND path IN ('testOrder01', 'testWorkOrder02');
|
||||
|
||||
-- 步骤4:验证删除结果
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
|
|
@ -34,3 +40,26 @@ SELECT
|
|||
FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
ORDER BY order_num;
|
||||
|
||||
-- 步骤5:确保工单管理父菜单的路径正确
|
||||
UPDATE sys_menu
|
||||
SET
|
||||
path = 'test_work_order',
|
||||
update_time = NOW()
|
||||
WHERE menu_id = 2098
|
||||
AND path != 'test_work_order';
|
||||
|
||||
-- 步骤6:最终验证 - 应该只有"测试工单"(menu_id=2092)这一个子菜单
|
||||
SELECT
|
||||
m1.menu_id as parent_id,
|
||||
m1.menu_name as parent_name,
|
||||
m1.path as parent_path,
|
||||
m2.menu_id as child_id,
|
||||
m2.menu_name as child_name,
|
||||
m2.path as child_path,
|
||||
m2.component as child_component,
|
||||
m2.menu_type as child_type
|
||||
FROM sys_menu m1
|
||||
LEFT JOIN sys_menu m2 ON m1.menu_id = m2.parent_id
|
||||
WHERE m1.menu_id = 2098
|
||||
ORDER BY m2.order_num;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,138 @@
|
|||
-- 工单路由跳转问题一键修复脚本
|
||||
-- 执行此脚本前请先备份数据库!
|
||||
-- mysqldump -u your_username -p your_database sys_menu > sys_menu_backup.sql
|
||||
|
||||
-- ============================================
|
||||
-- 步骤1:查看修复前的菜单配置
|
||||
-- ============================================
|
||||
SELECT '=== 修复前的工单管理菜单配置 ===' as info;
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
order_num,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type,
|
||||
visible,
|
||||
status
|
||||
FROM sys_menu
|
||||
WHERE menu_id = 2098 -- 工单管理父菜单
|
||||
OR parent_id = 2098 -- 工单管理的子菜单
|
||||
ORDER BY parent_id, order_num;
|
||||
|
||||
-- ============================================
|
||||
-- 步骤2:删除错误的状态子菜单
|
||||
-- ============================================
|
||||
SELECT '=== 开始删除错误的子菜单 ===' as info;
|
||||
|
||||
-- 删除所有状态相关的错误子菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND menu_type = 'C'
|
||||
AND menu_name IN ('进行中', '已完成', '测试中', '待领取', '一审中', '二审中', '三审中', '全部工单');
|
||||
|
||||
-- 删除包含错误路径的菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND path IN ('testOrder01', 'testWorkOrder02', 'testOrder', 'testWorkOrder');
|
||||
|
||||
-- 删除组件路径错误的菜单(指向test_order而不是test_work_order)
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND component LIKE '%test_order%'
|
||||
AND component NOT LIKE '%test_work_order%';
|
||||
|
||||
SELECT '=== 错误子菜单已删除 ===' as info;
|
||||
|
||||
-- ============================================
|
||||
-- 步骤3:修复父菜单路径
|
||||
-- ============================================
|
||||
SELECT '=== 开始修复父菜单路径 ===' as info;
|
||||
|
||||
UPDATE sys_menu
|
||||
SET
|
||||
path = 'test_work_order',
|
||||
update_time = NOW()
|
||||
WHERE menu_id = 2098
|
||||
AND path != 'test_work_order';
|
||||
|
||||
SELECT '=== 父菜单路径已修复 ===' as info;
|
||||
|
||||
-- ============================================
|
||||
-- 步骤4:确保测试工单子菜单配置正确
|
||||
-- ============================================
|
||||
SELECT '=== 检查测试工单子菜单配置 ===' as info;
|
||||
|
||||
UPDATE sys_menu
|
||||
SET
|
||||
path = 'test_work_order',
|
||||
component = 'system/test_work_order/index',
|
||||
update_time = NOW()
|
||||
WHERE menu_id = 2092;
|
||||
|
||||
SELECT '=== 测试工单子菜单已修复 ===' as info;
|
||||
|
||||
-- ============================================
|
||||
-- 步骤5:验证修复结果
|
||||
-- ============================================
|
||||
SELECT '=== 修复后的工单管理菜单配置 ===' as info;
|
||||
SELECT
|
||||
m1.menu_id as parent_id,
|
||||
m1.menu_name as parent_name,
|
||||
m1.path as parent_path,
|
||||
m1.menu_type as parent_type,
|
||||
m2.menu_id as child_id,
|
||||
m2.menu_name as child_name,
|
||||
m2.path as child_path,
|
||||
m2.component as child_component,
|
||||
m2.query as child_query,
|
||||
m2.menu_type as child_type,
|
||||
m2.order_num as child_order
|
||||
FROM sys_menu m1
|
||||
LEFT JOIN sys_menu m2 ON m1.menu_id = m2.parent_id
|
||||
WHERE m1.menu_id = 2098
|
||||
ORDER BY m2.order_num;
|
||||
|
||||
-- ============================================
|
||||
-- 步骤6:检查是否还有其他错误配置
|
||||
-- ============================================
|
||||
SELECT '=== 检查是否还有其他错误配置 ===' as info;
|
||||
|
||||
-- 查找所有包含 testOrder 或 testWorkOrder 的路径
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
'路径包含testOrder或testWorkOrder' as issue
|
||||
FROM sys_menu
|
||||
WHERE (path LIKE '%testOrder%' OR path LIKE '%testWorkOrder%')
|
||||
AND path != 'test_work_order'
|
||||
AND menu_id NOT IN (2098, 2092);
|
||||
|
||||
-- 查找组件路径指向test_order的菜单
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
'组件路径错误' as issue
|
||||
FROM sys_menu
|
||||
WHERE component LIKE '%test_order%'
|
||||
AND component NOT LIKE '%test_work_order%'
|
||||
AND menu_name LIKE '%工单%';
|
||||
|
||||
-- ============================================
|
||||
-- 完成提示
|
||||
-- ============================================
|
||||
SELECT '=== 修复完成!===' as info;
|
||||
SELECT '请执行以下操作:' as info;
|
||||
SELECT '1. 清除Redis缓存(如果使用):redis-cli FLUSHDB' as step;
|
||||
SELECT '2. 重启后端服务' as step;
|
||||
SELECT '3. 清除浏览器缓存:Ctrl+Shift+R' as step;
|
||||
SELECT '4. 退出并重新登录系统' as step;
|
||||
SELECT '5. 测试URL:http://your-domain/system/test_work_order' as step;
|
||||
|
|
@ -431,8 +431,25 @@ export default {
|
|||
deep: true,
|
||||
handler(to) {
|
||||
const orderId = to.query.orderId || to.params.orderId;
|
||||
const state = to.query.state || to.params.state;
|
||||
|
||||
if(orderId !== undefined && orderId !== null) {
|
||||
this.queryParams.batchId = orderId;
|
||||
}
|
||||
|
||||
// 根据 state 参数设置 testStep 筛选条件
|
||||
if(state !== undefined && state !== null) {
|
||||
const stateNum = parseInt(state);
|
||||
if (stateNum === 0) {
|
||||
// state=0 表示进行中,对应 testStep=1
|
||||
this.queryParams.testStep = 1;
|
||||
} else if (stateNum === 1) {
|
||||
// state=1 表示已完成,对应 testStep=5
|
||||
this.queryParams.testStep = 5;
|
||||
}
|
||||
}
|
||||
|
||||
if(orderId !== undefined && orderId !== null || state !== undefined && state !== null) {
|
||||
this.getList();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,176 @@
|
|||
# 工单状态参数筛选功能实现说明
|
||||
|
||||
## 功能描述
|
||||
|
||||
当通过URL参数访问工单管理页面时,自动根据 `state` 参数筛选工单状态。
|
||||
|
||||
## URL参数说明
|
||||
|
||||
### state 参数映射
|
||||
|
||||
| state 值 | 含义 | testStep 值 | 显示的工单 |
|
||||
|---------|------|------------|----------|
|
||||
| 0 | 进行中 | 1 | 测试中的工单 |
|
||||
| 1 | 已完成 | 5 | 已完成的工单 |
|
||||
|
||||
### 示例URL
|
||||
|
||||
1. **查看进行中的工单**:
|
||||
```
|
||||
http://123.56.98.4:8081/system/test_work_order?state=0
|
||||
```
|
||||
自动筛选 `testStep=1`(测试中)的工单
|
||||
|
||||
2. **查看已完成的工单**:
|
||||
```
|
||||
http://123.56.98.4:8081/system/test_work_order?state=1
|
||||
```
|
||||
自动筛选 `testStep=5`(已完成)的工单
|
||||
|
||||
3. **查看特定批次的进行中工单**:
|
||||
```
|
||||
http://123.56.98.4:8081/system/test_work_order?orderId=123&state=0
|
||||
```
|
||||
筛选批次ID为123且状态为测试中的工单
|
||||
|
||||
## 实现细节
|
||||
|
||||
### 修改文件
|
||||
`ruoyi-fastapi-frontend/src/views/system/test_work_order/index.vue`
|
||||
|
||||
### 修改内容
|
||||
|
||||
在 `watch` 部分添加了对 `state` 参数的处理:
|
||||
|
||||
```javascript
|
||||
watch: {
|
||||
'$route': {
|
||||
immediate: true,
|
||||
deep: true,
|
||||
handler(to) {
|
||||
const orderId = to.query.orderId || to.params.orderId;
|
||||
const state = to.query.state || to.params.state;
|
||||
|
||||
if(orderId !== undefined && orderId !== null) {
|
||||
this.queryParams.batchId = orderId;
|
||||
}
|
||||
|
||||
// 根据 state 参数设置 testStep 筛选条件
|
||||
if(state !== undefined && state !== null) {
|
||||
const stateNum = parseInt(state);
|
||||
if (stateNum === 0) {
|
||||
// state=0 表示进行中,对应 testStep=1
|
||||
this.queryParams.testStep = 1;
|
||||
} else if (stateNum === 1) {
|
||||
// state=1 表示已完成,对应 testStep=5
|
||||
this.queryParams.testStep = 5;
|
||||
}
|
||||
}
|
||||
|
||||
if(orderId !== undefined && orderId !== null || state !== undefined && state !== null) {
|
||||
this.getList();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 工作流程
|
||||
|
||||
1. **路由变化触发**:当URL中的查询参数变化时,触发路由监听器
|
||||
2. **参数解析**:从URL中提取 `state` 和 `orderId` 参数
|
||||
3. **状态映射**:
|
||||
- `state=0` → `testStep=1`(测试中)
|
||||
- `state=1` → `testStep=5`(已完成)
|
||||
4. **数据加载**:调用 `getList()` 方法,根据设置的 `testStep` 筛选工单
|
||||
|
||||
## 与菜单配置的关系
|
||||
|
||||
### 菜单配置示例
|
||||
|
||||
如果您想在菜单中添加"进行中"和"已完成"的快捷入口:
|
||||
|
||||
**进行中菜单**:
|
||||
- 菜单名称:进行中
|
||||
- 上级菜单:工单管理
|
||||
- 菜单类型:菜单(C)
|
||||
- 路由地址:test_work_order
|
||||
- 组件路径:system/test_work_order/index
|
||||
- 路由参数:`{"state": 0}`
|
||||
- 权限字符:system:test_work_order:list
|
||||
|
||||
**已完成菜单**:
|
||||
- 菜单名称:已完成
|
||||
- 上级菜单:工单管理
|
||||
- 菜单类型:菜单(C)
|
||||
- 路由地址:test_work_order
|
||||
- 组件路径:system/test_work_order/index
|
||||
- 路由参数:`{"state": 1}`
|
||||
- 权限字符:system:test_work_order:list
|
||||
|
||||
## 扩展功能
|
||||
|
||||
如果需要支持更多状态,可以扩展映射关系:
|
||||
|
||||
```javascript
|
||||
if(state !== undefined && state !== null) {
|
||||
const stateNum = parseInt(state);
|
||||
switch(stateNum) {
|
||||
case 0:
|
||||
this.queryParams.testStep = 1; // 测试中
|
||||
break;
|
||||
case 1:
|
||||
this.queryParams.testStep = 5; // 已完成
|
||||
break;
|
||||
case 2:
|
||||
this.queryParams.testStep = 0; // 待领取
|
||||
break;
|
||||
case 3:
|
||||
this.queryParams.testStep = 2; // 一审中
|
||||
break;
|
||||
case 4:
|
||||
this.queryParams.testStep = 3; // 二审中
|
||||
break;
|
||||
case 5:
|
||||
this.queryParams.testStep = 4; // 三审中
|
||||
break;
|
||||
default:
|
||||
this.queryParams.testStep = null; // 全部
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 测试步骤
|
||||
|
||||
### 1. 清除浏览器缓存
|
||||
按 `Ctrl + Shift + R` 强制刷新页面
|
||||
|
||||
### 2. 测试进行中筛选
|
||||
访问:`http://123.56.98.4:8081/system/test_work_order?state=0`
|
||||
- 应该只显示 testStep=1 的工单
|
||||
- 页面标题或筛选条件应该显示"测试中"
|
||||
|
||||
### 3. 测试已完成筛选
|
||||
访问:`http://123.56.98.4:8081/system/test_work_order?state=1`
|
||||
- 应该只显示 testStep=5 的工单
|
||||
- 页面标题或筛选条件应该显示"已完成"
|
||||
|
||||
### 4. 测试组合筛选
|
||||
访问:`http://123.56.98.4:8081/system/test_work_order?orderId=123&state=1`
|
||||
- 应该显示批次ID为123且已完成的工单
|
||||
|
||||
### 5. 测试无参数访问
|
||||
访问:`http://123.56.98.4:8081/system/test_work_order`
|
||||
- 应该显示所有工单(不筛选状态)
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. **参数优先级**:URL参数会覆盖页面上的按钮筛选
|
||||
2. **参数持久性**:URL参数只在页面加载时生效,点击页面上的按钮会改变筛选条件
|
||||
3. **参数验证**:代码会将 state 参数转换为整数,非数字参数会被忽略
|
||||
4. **兼容性**:同时支持 query 参数和 params 参数
|
||||
|
||||
## 相关文件
|
||||
- `ruoyi-fastapi-frontend/src/views/system/test_work_order/index.vue` - 工单管理页面(已修改)
|
||||
- `工单菜单错误子菜单修复说明.md` - 菜单配置修复说明
|
||||
- `工单按钮点击事件修复说明.md` - 按钮点击事件修复说明
|
||||
|
|
@ -0,0 +1,261 @@
|
|||
# 工单路由跳转问题完整修复方案
|
||||
|
||||
## 问题描述
|
||||
|
||||
点击工单管理页面的"测试中"、"已完成"等按钮时,URL跳转到错误的路径:
|
||||
- 错误URL示例:`http://123.56.98.4:8081/test_work_order/testWorkOrder02?page=work_order&state=1`
|
||||
- 正确URL应该是:`http://123.56.98.4:8081/system/test_work_order?state=1`
|
||||
|
||||
## 根本原因
|
||||
|
||||
数据库中存在错误的菜单配置,这些菜单拦截了按钮的点击事件,导致路由跳转到错误的URL。
|
||||
|
||||
### 错误的菜单配置特征:
|
||||
1. **parent_id = 2098**(工单管理的子菜单)
|
||||
2. **menu_type = 'C'**(菜单类型)
|
||||
3. **path = 'testOrder01'** 或 **'testWorkOrder02'** 等错误路径
|
||||
4. **menu_name = '进行中'、'已完成'** 等状态名称
|
||||
5. **component = 'system/test_order/index'**(错误!应该是 test_work_order)
|
||||
|
||||
## 修复步骤
|
||||
|
||||
### 步骤1:诊断问题
|
||||
|
||||
运行诊断脚本查看当前菜单配置:
|
||||
|
||||
```bash
|
||||
mysql -u your_username -p your_database < check_workorder_submenu.sql
|
||||
```
|
||||
|
||||
或者在数据库客户端中执行:
|
||||
|
||||
```sql
|
||||
-- 查看工单管理的所有子菜单
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type
|
||||
FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
ORDER BY order_num;
|
||||
```
|
||||
|
||||
**预期结果**:应该只有一个子菜单"测试工单"(menu_id=2092)
|
||||
|
||||
**实际结果**:可能有多个错误的子菜单(进行中、已完成等)
|
||||
|
||||
### 步骤2:备份数据库
|
||||
|
||||
在修改前务必备份:
|
||||
|
||||
```bash
|
||||
mysqldump -u your_username -p your_database sys_menu > sys_menu_backup.sql
|
||||
```
|
||||
|
||||
### 步骤3:删除错误的子菜单
|
||||
|
||||
执行删除脚本:
|
||||
|
||||
```bash
|
||||
mysql -u your_username -p your_database < delete_wrong_submenu.sql
|
||||
```
|
||||
|
||||
或者手动执行:
|
||||
|
||||
```sql
|
||||
-- 删除所有状态相关的错误子菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND menu_type = 'C'
|
||||
AND menu_name IN ('进行中', '已完成', '测试中', '待领取', '一审中', '二审中', '三审中', '全部工单');
|
||||
|
||||
-- 删除包含错误路径的菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND path IN ('testOrder01', 'testWorkOrder02');
|
||||
```
|
||||
|
||||
### 步骤4:修复父菜单路径
|
||||
|
||||
确保工单管理父菜单的路径正确:
|
||||
|
||||
```sql
|
||||
UPDATE sys_menu
|
||||
SET
|
||||
path = 'test_work_order',
|
||||
update_time = NOW()
|
||||
WHERE menu_id = 2098;
|
||||
```
|
||||
|
||||
### 步骤5:验证修复结果
|
||||
|
||||
```sql
|
||||
-- 查看工单管理的菜单树
|
||||
SELECT
|
||||
m1.menu_id as parent_id,
|
||||
m1.menu_name as parent_name,
|
||||
m1.path as parent_path,
|
||||
m2.menu_id as child_id,
|
||||
m2.menu_name as child_name,
|
||||
m2.path as child_path,
|
||||
m2.component as child_component,
|
||||
m2.menu_type as child_type
|
||||
FROM sys_menu m1
|
||||
LEFT JOIN sys_menu m2 ON m1.menu_id = m2.parent_id
|
||||
WHERE m1.menu_id = 2098
|
||||
ORDER BY m2.order_num;
|
||||
```
|
||||
|
||||
**正确的结果应该是**:
|
||||
|
||||
| parent_id | parent_name | parent_path | child_id | child_name | child_path | child_component | child_type |
|
||||
|-----------|-------------|-------------|----------|------------|------------|-----------------|------------|
|
||||
| 2098 | 工单管理 | test_work_order | 2092 | 测试工单 | test_work_order | system/test_work_order/index | C |
|
||||
|
||||
### 步骤6:清除缓存并重新登录
|
||||
|
||||
1. **清除Redis缓存**(如果使用了Redis):
|
||||
```bash
|
||||
redis-cli
|
||||
FLUSHDB
|
||||
```
|
||||
|
||||
2. **重启后端服务**:
|
||||
```bash
|
||||
# 停止服务
|
||||
# 启动服务
|
||||
```
|
||||
|
||||
3. **清除浏览器缓存**:
|
||||
- 按 `Ctrl + Shift + Delete`
|
||||
- 或者按 `Ctrl + Shift + R` 强制刷新
|
||||
|
||||
4. **重新登录系统**:
|
||||
- 退出登录
|
||||
- 重新登录
|
||||
|
||||
### 步骤7:测试功能
|
||||
|
||||
1. **测试菜单导航**:
|
||||
- 点击左侧菜单"工单管理" → "测试工单"
|
||||
- URL应该是:`http://123.56.98.4:8081/system/test_work_order`
|
||||
|
||||
2. **测试状态筛选按钮**:
|
||||
- 点击"测试中"按钮
|
||||
- URL应该保持:`http://123.56.98.4:8081/system/test_work_order`(不跳转)
|
||||
- 页面应该只显示 testStep=1 的工单
|
||||
|
||||
3. **测试URL参数**:
|
||||
- 访问:`http://123.56.98.4:8081/system/test_work_order?state=0`
|
||||
- 应该显示测试中的工单
|
||||
- 访问:`http://123.56.98.4:8081/system/test_work_order?state=1`
|
||||
- 应该显示已完成的工单
|
||||
|
||||
## 如果需要保留状态子菜单
|
||||
|
||||
如果您确实需要在菜单中显示"进行中"、"已完成"等快捷入口,请按以下方式配置:
|
||||
|
||||
### 正确的菜单配置
|
||||
|
||||
**进行中菜单**:
|
||||
- 菜单名称:进行中
|
||||
- 上级菜单:工单管理(menu_id=2098)
|
||||
- 菜单类型:菜单(C)
|
||||
- 路由地址:`test_work_order`(不是 testOrder01)
|
||||
- 组件路径:`system/test_work_order/index`(不是 test_order)
|
||||
- 路由参数:`{"state": 0}`
|
||||
- 权限字符:`system:test_work_order:list`
|
||||
- 显示顺序:2
|
||||
|
||||
**已完成菜单**:
|
||||
- 菜单名称:已完成
|
||||
- 上级菜单:工单管理(menu_id=2098)
|
||||
- 菜单类型:菜单(C)
|
||||
- 路由地址:`test_work_order`(不是 testWorkOrder02)
|
||||
- 组件路径:`system/test_work_order/index`(不是 test_order)
|
||||
- 路由参数:`{"state": 1}`
|
||||
- 权限字符:`system:test_work_order:list`
|
||||
- 显示顺序:3
|
||||
|
||||
### 添加菜单的SQL
|
||||
|
||||
```sql
|
||||
-- 添加"进行中"菜单
|
||||
INSERT INTO sys_menu (
|
||||
menu_name, parent_id, order_num, path, component,
|
||||
query, is_frame, is_cache, menu_type, visible,
|
||||
status, perms, icon, create_time
|
||||
) VALUES (
|
||||
'进行中', 2098, 2, 'test_work_order', 'system/test_work_order/index',
|
||||
'{"state": 0}', 1, 0, 'C', '0',
|
||||
'0', 'system:test_work_order:list', 'education', NOW()
|
||||
);
|
||||
|
||||
-- 添加"已完成"菜单
|
||||
INSERT INTO sys_menu (
|
||||
menu_name, parent_id, order_num, path, component,
|
||||
query, is_frame, is_cache, menu_type, visible,
|
||||
status, perms, icon, create_time
|
||||
) VALUES (
|
||||
'已完成', 2098, 3, 'test_work_order', 'system/test_work_order/index',
|
||||
'{"state": 1}', 1, 0, 'C', '0',
|
||||
'0', 'system:test_work_order:list', 'education', NOW()
|
||||
);
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q1: 删除菜单后还是跳转错误?
|
||||
**A**: 需要清除缓存并重新登录:
|
||||
1. 清除Redis缓存
|
||||
2. 重启后端服务
|
||||
3. 清除浏览器缓存(Ctrl+Shift+R)
|
||||
4. 退出并重新登录
|
||||
|
||||
### Q2: 点击按钮还是会跳转?
|
||||
**A**: 检查前端代码是否添加了 `.prevent` 修饰符:
|
||||
```vue
|
||||
<el-button @click.prevent="queryParams.testStep = 1; getList()">
|
||||
测试中
|
||||
</el-button>
|
||||
```
|
||||
|
||||
### Q3: URL参数不生效?
|
||||
**A**: 检查路由监听器是否正确处理了 `state` 参数(参考 `工单状态参数筛选功能实现说明.md`)
|
||||
|
||||
### Q4: 如何确认菜单配置正确?
|
||||
**A**: 运行以下SQL查询:
|
||||
```sql
|
||||
SELECT menu_id, menu_name, parent_id, path, component, query
|
||||
FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
ORDER BY order_num;
|
||||
```
|
||||
|
||||
应该只看到"测试工单"这一个子菜单,或者您手动添加的正确配置的子菜单。
|
||||
|
||||
## 相关文件
|
||||
|
||||
- `check_workorder_submenu.sql` - 诊断脚本
|
||||
- `delete_wrong_submenu.sql` - 删除错误菜单脚本
|
||||
- `fix_workorder_menu_path.sql` - 修复父菜单路径脚本
|
||||
- `工单状态参数筛选功能实现说明.md` - state参数功能说明
|
||||
- `工单按钮点击事件修复说明.md` - 按钮事件修复说明
|
||||
- `工单菜单错误子菜单修复说明.md` - 菜单配置说明
|
||||
|
||||
## 修复时间线
|
||||
|
||||
1. ✅ 前端按钮添加 `.prevent` 修饰符
|
||||
2. ✅ 前端路由监听器添加 `state` 参数处理
|
||||
3. ⚠️ **待完成:删除数据库中的错误菜单配置**
|
||||
4. ⚠️ **待完成:清除缓存并重新登录**
|
||||
|
||||
## 总结
|
||||
|
||||
路由跳转问题的根本原因是数据库中存在错误的菜单配置。这些菜单的路径(如 testOrder01、testWorkOrder02)和组件路径(system/test_order/index)都是错误的,导致点击按钮时被这些菜单拦截,跳转到错误的URL。
|
||||
|
||||
**解决方案**:删除这些错误的菜单配置,或者修改为正确的配置。修改后必须清除缓存并重新登录才能生效。
|
||||
|
|
@ -0,0 +1,138 @@
|
|||
# 快速修复工单路由问题
|
||||
|
||||
## 问题现象
|
||||
|
||||
点击"测试中"或"已完成"按钮时,URL跳转到:
|
||||
```
|
||||
http://123.56.98.4:8081/test_work_order/testWorkOrder02?page=work_order&state=1
|
||||
```
|
||||
|
||||
应该是:
|
||||
```
|
||||
http://123.56.98.4:8081/system/test_work_order?state=1
|
||||
```
|
||||
|
||||
## 快速修复(3步)
|
||||
|
||||
### 第1步:执行SQL修复脚本
|
||||
|
||||
在数据库客户端(如Navicat、DBeaver)中执行:
|
||||
|
||||
```bash
|
||||
mysql -u your_username -p your_database < fix_workorder_routing_complete.sql
|
||||
```
|
||||
|
||||
或者直接复制以下SQL到数据库客户端执行:
|
||||
|
||||
```sql
|
||||
-- 删除错误的子菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND menu_type = 'C'
|
||||
AND menu_name IN ('进行中', '已完成', '测试中', '待领取', '一审中', '二审中', '三审中', '全部工单');
|
||||
|
||||
-- 删除错误路径的菜单
|
||||
DELETE FROM sys_menu
|
||||
WHERE parent_id = 2098
|
||||
AND path IN ('testOrder01', 'testWorkOrder02');
|
||||
|
||||
-- 修复父菜单路径
|
||||
UPDATE sys_menu
|
||||
SET path = 'test_work_order', update_time = NOW()
|
||||
WHERE menu_id = 2098;
|
||||
|
||||
-- 验证结果(应该只有一个子菜单"测试工单")
|
||||
SELECT menu_id, menu_name, path, component
|
||||
FROM sys_menu
|
||||
WHERE parent_id = 2098;
|
||||
```
|
||||
|
||||
### 第2步:清除缓存
|
||||
|
||||
**如果使用Redis**:
|
||||
```bash
|
||||
redis-cli
|
||||
FLUSHDB
|
||||
exit
|
||||
```
|
||||
|
||||
**重启后端服务**:
|
||||
```bash
|
||||
# 停止后端服务
|
||||
# 启动后端服务
|
||||
```
|
||||
|
||||
### 第3步:清除浏览器缓存并重新登录
|
||||
|
||||
1. 按 `Ctrl + Shift + R` 强制刷新页面
|
||||
2. 退出登录
|
||||
3. 重新登录系统
|
||||
|
||||
## 测试验证
|
||||
|
||||
### 测试1:菜单导航
|
||||
- 点击左侧菜单"工单管理" → "测试工单"
|
||||
- ✅ URL应该是:`http://123.56.98.4:8081/system/test_work_order`
|
||||
|
||||
### 测试2:状态筛选按钮
|
||||
- 点击"测试中"按钮
|
||||
- ✅ URL保持不变(不跳转)
|
||||
- ✅ 只显示 testStep=1 的工单
|
||||
|
||||
- 点击"已完成"按钮
|
||||
- ✅ URL保持不变(不跳转)
|
||||
- ✅ 只显示 testStep=5 的工单
|
||||
|
||||
### 测试3:URL参数
|
||||
- 访问:`http://123.56.98.4:8081/system/test_work_order?state=0`
|
||||
- ✅ 显示测试中的工单
|
||||
|
||||
- 访问:`http://123.56.98.4:8081/system/test_work_order?state=1`
|
||||
- ✅ 显示已完成的工单
|
||||
|
||||
## 如果还有问题
|
||||
|
||||
### 问题1:删除后还是跳转错误
|
||||
**原因**:缓存未清除
|
||||
**解决**:
|
||||
1. 确认已清除Redis缓存
|
||||
2. 确认已重启后端服务
|
||||
3. 确认已清除浏览器缓存
|
||||
4. 确认已重新登录
|
||||
|
||||
### 问题2:找不到菜单
|
||||
**原因**:误删了正确的菜单
|
||||
**解决**:恢复备份或重新添加菜单
|
||||
|
||||
### 问题3:权限不足
|
||||
**原因**:菜单权限配置错误
|
||||
**解决**:检查菜单的 `perms` 字段是否为 `system:test_work_order:list`
|
||||
|
||||
## 诊断命令
|
||||
|
||||
如果修复后还有问题,运行以下SQL诊断:
|
||||
|
||||
```sql
|
||||
-- 查看工单管理的所有菜单
|
||||
SELECT
|
||||
menu_id,
|
||||
menu_name,
|
||||
parent_id,
|
||||
path,
|
||||
component,
|
||||
query,
|
||||
menu_type
|
||||
FROM sys_menu
|
||||
WHERE menu_id = 2098 OR parent_id = 2098
|
||||
ORDER BY parent_id, order_num;
|
||||
```
|
||||
|
||||
**正确的结果应该是**:
|
||||
- 1个父菜单:工单管理(menu_id=2098, path=test_work_order)
|
||||
- 1个子菜单:测试工单(menu_id=2092, path=test_work_order, component=system/test_work_order/index)
|
||||
|
||||
## 相关文件
|
||||
|
||||
- `fix_workorder_routing_complete.sql` - 一键修复脚本
|
||||
- `check_workorder_submenu.sql` - 诊断脚本
|
||||
- `工单路由跳转问题完整修复方案.md` - 详细说明
|
||||
Loading…
Reference in New Issue