ETest-Vue-FastAPI/工单状态参数筛选功能实现说明.md

5.0 KiB
Raw Permalink Blame History

工单状态参数筛选功能实现说明

功能描述

当通过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 参数的处理:

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中提取 stateorderId 参数
  3. 状态映射
    • state=0testStep=1(测试中)
    • state=1testStep=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

扩展功能

如果需要支持更多状态,可以扩展映射关系:

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 - 按钮点击事件修复说明