编辑 | blame | 历史 | 原始文档

首页任务查询优化说明

需求背景

首页需要显示与当前用户相关的所有未完成任务,包括:
1. 用户创建的任务(创建人是当前用户)
2. 分配给当前用户的任务(分配人是当前用户)
3. 执行人员是当前用户的任务(执行人是当前用户)

之前的实现只显示分配给当前用户的任务(assigneeId),不够全面。

实现方案

后端实现

后端已经提供了 /task/my 接口,该接口在 SysTaskMapper.xml 中的实现如下:

SELECT ... 
FROM sys_task t
WHERE t.del_flag = '0' 
  AND (t.creator_id = #{userId} OR t.assignee_id = #{userId})
ORDER BY ...

这个接口查询了:
- creator_id = 当前用户ID(用户创建的任务)
- assignee_id = 当前用户ID(分配给用户的任务,包括执行人)

前端实现

1. 新增API方法

app/api/task.js 中新增:

// 获取我的任务列表
export function getMyTasks() {
  return request({
    url: '/task/my',
    method: 'get'
  })
}

2. 修改首页组件

app/pages/index.vue 中:

修改引入:
```javascript
// 之前
import { listTask, changeTaskStatus } from '@/api/task'

// 之后
import { getMyTasks, changeTaskStatus } from '@/api/task'
```

修改加载方法:
javascript loadRunningTasks() { // 使用 /task/my 接口获取当前用户相关的所有任务 getMyTasks().then(response => { // 过滤出未完成和未取消的任务 const allTasks = Array.isArray(data) ? data : [] this.taskList = allTasks .filter(task => { return task.taskStatus !== 'COMPLETED' && task.taskStatus !== 'CANCELLED' }) .map(task => { // ... 数据格式化 }) }) }

数据过滤逻辑

后端过滤

  • 只返回与当前用户相关的任务(创建人或执行人)
  • 已删除的任务不返回(del_flag = '0'

前端过滤

  • 只显示未完成和未取消的任务
  • 排除状态:COMPLETED(已完成)、CANCELLED(已取消)

优势对比

之前的实现

// 只查询分配给当前用户的任务
const queryParams = {
  assigneeId: userId,
  taskStatuses: 'PENDING,DEPARTING,ARRIVED,RETURNING,IN_PROGRESS'
}
listTask(queryParams)

限制:
- 只能看到分配给自己的任务
- 看不到自己创建但分配给别人的任务
- 需要手动指定状态列表

现在的实现

// 获取所有与用户相关的任务
getMyTasks()

优势:
- 自动包含用户创建的任务
- 自动包含分配给用户的任务
- 后端统一处理查询逻辑
- 前端简单过滤状态即可

测试要点

1. 用户创建的任务

  • 创建一个任务,分配给其他人
  • 首页应该能看到这个任务

2. 分配给用户的任务

  • 其他用户创建任务,分配给当前用户
  • 首页应该能看到这个任务

3. 执行人是用户的任务

  • 任务的执行人字段(assigneeId)设置为当前用户
  • 首页应该能看到这个任务

4. 状态过滤

  • 已完成的任务不显示
  • 已取消的任务不显示
  • 其他状态的任务都显示

相关文件

前端文件

  • app/api/task.js - 新增 getMyTasks API方法
  • app/pages/index.vue - 修改任务加载逻辑

后端文件

  • ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java - /task/my 接口
  • ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml - selectMyTasks SQL查询
  • ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java - selectMyTasks 服务方法

注意事项

  1. 性能考虑/task/my 接口已经在SQL层面做了优化,使用索引查询
  2. 数据安全:后端自动获取当前登录用户ID,前端无法篡改
  3. 向后兼容:保留了原有的 listTask 方法,不影响其他页面使用