# 工单按钮点击事件修复说明 ## 问题描述 点击工单管理页面的"测试中"等按钮时,页面跳转到错误的URL: ``` http://127.0.0.1/test_work_order/testOrder01?page=work_order&state=0 ``` ## 问题分析 ### URL结构分析 ``` http://127.0.0.1/test_work_order/testOrder01?page=work_order&state=0 ^^^^^^^^^^^^^^^^ ^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^ 父菜单路径 子菜单路径 查询参数 ``` ### 可能的原因 1. **菜单配置问题**:工单管理菜单下可能有一个子菜单,path是 `testOrder01` 2. **事件冒泡问题**:按钮点击事件可能触发了父元素的点击事件 3. **路由守卫问题**:可能有全局路由守卫拦截了按钮点击 ### 按钮点击事件 原始代码: ```vue 测试中 ``` 这个点击事件只是设置查询参数并调用 `getList()` 方法,不应该触发路由跳转。 ## 修复方案 ### 方案1:阻止事件默认行为(已实施) 在所有按钮的点击事件中添加 `.prevent` 修饰符,阻止默认行为: ```vue 测试中 ``` 修改的按钮: - 全部工单 - 待领取 - 测试中 - 一审中 - 二审中 - 三审中 - 已完成 ### 方案2:检查菜单配置 需要检查数据库中是否有错误的子菜单配置: ```sql -- 查询工单管理菜单及其所有子菜单 SELECT menu_id, menu_name, parent_id, path, component, query, menu_type FROM sys_menu WHERE menu_id IN (2098, 2092) OR parent_id IN (2098, 2092) ORDER BY parent_id, order_num; ``` 如果发现有 path 为 `testOrder01` 的子菜单,需要删除或修改它。 ### 方案3:修改按钮点击处理方法 将按钮点击事件改为调用方法,而不是内联代码: ```vue 测试中 methods: { handleFilterByStep(step) { // 阻止任何可能的路由跳转 event.preventDefault(); event.stopPropagation(); // 设置查询参数 this.queryParams.testStep = step; // 刷新列表 this.getList(); } } ``` ## 修改内容 ### 文件:`ruoyi-fastapi-frontend/src/views/system/test_work_order/index.vue` **修改前:** ```vue 测试中 ``` **修改后:** ```vue 测试中 ``` 所有状态筛选按钮都添加了 `.prevent` 修饰符。 ## 测试步骤 ### 1. 清除浏览器缓存 - 按 `Ctrl + Shift + R` 强制刷新页面 ### 2. 测试按钮点击 1. 访问工单管理页面 2. 点击"测试中"按钮 3. 验证: - URL 应该保持为:`http://127.0.0.1/system/test_work_order` - 数据列表应该显示 testStep=1 的工单 - 不应该有任何路由跳转 ### 3. 测试所有按钮 依次点击以下按钮,验证都不会触发路由跳转: - 全部工单 - 待领取 - 测试中 - 一审中 - 二审中 - 三审中 - 已完成 ### 4. 检查浏览器控制台 打开浏览器开发者工具(F12),检查: - Console 标签:是否有 JavaScript 错误 - Network 标签:是否有正确的 API 请求 - 请求 URL 应该是:`http://127.0.0.1:9099/system/test_work_order/list?testStep=1&pageNum=1&pageSize=10` ## 如果问题仍然存在 ### 检查菜单配置 运行 `check_workorder_submenu.sql` 查询菜单配置: ```bash mysql -h127.0.0.1 -P3306 -uroot -p123456 ry-fastapi < check_workorder_submenu.sql ``` 查找是否有: - path 为 `testOrder01` 的菜单 - query 参数包含 `page=work_order&state=0` 的菜单 如果找到,需要删除或修改这些菜单配置。 ### 检查路由配置 确认 `router/index.js` 中没有多余的路由配置。 ### 检查全局事件监听 检查是否有全局的点击事件监听器拦截了按钮点击。 ## 相关文件 - `ruoyi-fastapi-frontend/src/views/system/test_work_order/index.vue` - 工单管理页面(已修改) - `check_workorder_submenu.sql` - 菜单配置查询脚本 - `fix_workorder_menu_path.sql` - 菜单路径修复脚本 - `工单菜单路径配置错误修复说明.md` - 菜单配置修复说明 ## 注意事项 1. `.prevent` 修饰符会阻止事件的默认行为 2. 如果按钮在 `` 标签或 `` 中,`.prevent` 会阻止链接跳转 3. 确保没有其他代码监听了这些按钮的点击事件 4. 如果使用了事件委托,可能需要添加 `.stop` 修饰符阻止事件冒泡 ## 预期结果 - ✅ 点击按钮后,URL 保持不变 - ✅ 数据列表正确筛选 - ✅ 不会触发路由跳转 - ✅ 浏览器控制台没有错误