qiangdanxitong/更新通知-2026-01-22.md

357 lines
15 KiB
Markdown
Raw Permalink 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.

# 系统更新通知
**更新日期:** 2026年1月22日
---
## 📋 更新概览
本次更新主要包含以下内容:
- ✨ 扩展任务搜索功能,支持搜索任务卡片的所有信息
- 🔒 一级需求部门发起任务必须上传预览图
- 🎨 任务卡片增加一级需求人显示,优化长名字显示
- 🐛 修复流水线任务异常扣分问题
- 🐛 修复需求部门看不到一级需求任务的问题
- 🐛 修复需求部门负责人无法驳回任务的问题
- 🐛 修复筛选功能搜索报错问题
- 🐛 修复 SQL 查询错误
---
## ✨ 新增功能
### 1. 扩展任务搜索功能
**功能描述:** 任务搜索功能现在支持搜索任务卡片的所有信息,不再仅限于任务标题和编号。
**搜索范围包括:**
- ✅ 任务标题 (`title`)
- ✅ 任务编号 (`task_no`)
- ✅ SPU信息 (`spu_info`)
- ✅ 备注信息 (`remark`)
- ✅ 产品条码 (`product_barcodes`)
- ✅ 发布人姓名 (`publisher_name`)
- ✅ 发布人部门名称 (`publisher_dept_name`)
- ✅ 品牌名称 (`brand_name`)
- ✅ 类目名称 (`category_name`)
- ✅ 平台名称 (`platform_name`)
- ✅ 任务类型名称 (`task_type_name`)
- ✅ 一级需求人姓名 (`primary_publisher_name`)
- ✅ 一级需求部门名称 (`primary_publisher_dept_name`)
- ✅ 需求部门发起人姓名 (`detail_completer_name`)
- ✅ 接收人姓名 (`receiver_name`)
**适用场景:**
- 任务大厅搜索
- 进行中任务搜索
- 已完成任务搜索
- 子任务搜索
**使用示例:**
- 搜索品牌名称(如"卓禾")可以找到该品牌的所有任务
- 搜索发布人姓名可以找到该用户发布的所有任务
- 搜索一级需求人姓名可以找到该用户发起的一级需求任务
---
### 2. 一级需求部门必须上传预览图
**功能描述:** 一级需求部门用户发起任务时,系统强制要求上传预览图。
**实现方式:**
- 前端验证:表单验证规则中添加预览图必填验证
- 后端验证:创建任务时检查预览图是否上传
- 用户提示:预览图上传区域显示明确的必填提示
**影响范围:**
- 一级需求部门用户创建普通任务
- 一级需求部门用户创建流水线任务
**用户体验:**
- 如果未上传预览图,提交时会显示错误提示:"一级需求部门发起任务必须上传预览图"
- 预览图上传区域会显示红色警告图标和提示文字
---
### 3. 任务卡片增加一级需求人显示
**功能描述:** 对于一级需求部门发起的任务,任务卡片现在会显示一级需求人和需求部门发起人的信息,让任务来源更加清晰。
**显示内容:**
- ✅ **一级需求人**:显示一级需求部门发起人的姓名和部门名称(橙色标识)
- ✅ **需求部门发起人**:显示补充任务明细的需求部门成员姓名(绿色标识)
- ✅ **发布人**:显示任务的发布人姓名(默认绿色标识)
**显示逻辑:**
- 如果是一级需求任务(`isPrimaryTask=1`):
- 显示"一级需求人"(如果存在)
- 显示"需求部门发起人"(如果存在,即已补充明细)
- 否则显示"发布人"
- 如果是普通任务:
- 显示"发布人"
**优化内容:**
- 一级需求人名字超过 8 个字符时显示省略号
- 需求部门发起人名字超过 8 个字符时显示省略号
- 发布人名字超过 8 个字符时显示省略号
- 鼠标悬停时通过 Tooltip 显示完整信息(包含部门名称)
**显示效果:**
- 一级需求任务示例:
- `一级需求人: 张三... (运营中心...)`(橙色)
- `需求部门发起人: 李四...`(绿色)
- 悬停提示:`一级需求人: 张三丰 (运营中心A-事业二部)`
**适用位置:**
- 任务大厅任务卡片
- 进行中任务卡片
- 已完成任务卡片
- 我发起的任务卡片
- 待审核任务卡片
- 草稿箱任务卡片
- 子任务卡片
---
## 🐛 问题修复
### 1. 修复流水线任务异常扣分问题
**问题描述:**
- 流水线任务的子任务按时完成后,主任务仍然被系统检查进度更新情况
- 导致已完成子任务的用户被错误扣分
- 影响范围:所有流水线任务的接收人
**问题原因:**
- 进度检查服务 (`ProgressCheckService`) 在检查任务进度时,没有区分流水线任务的主任务和子任务
- 流水线任务的主任务 (`is_pipeline=1`) 在子任务完成后,主任务状态仍为 `in_progress`,但主任务本身不需要更新进度
- 系统错误地对主任务进行了进度检查,导致已完成子任务的用户被扣分
**解决方案:**
- 修改 `ProgressCheckService.checkDailyProgressUpdate()` 方法
- 在进度检查时排除流水线任务的主任务(`is_pipeline=1`)
- 只对流水线任务的子任务进行进度检查
- 清理了历史错误扣分记录(共 21 条)
**修复效果:**
- ✅ 流水线任务的主任务不再被检查进度
- ✅ 已完成子任务的用户不会再被错误扣分
- ✅ 历史错误扣分记录已清理
**影响用户:**
- 所有流水线任务的接收人
- 特别是已完成子任务但主任务仍在进行中的用户
---
### 2. 修复需求部门看不到一级需求任务的问题
**问题描述:**
- 需求部门负责人审核通过一级需求部门的任务后,在"进行中任务"中看不到该任务
- 需求部门成员补充完任务明细并发布后,在"进行中任务"中也看不到该任务
- 影响范围:所有需求部门负责人和成员
**问题原因:**
- 一级需求部门的任务在需求部门负责人审核通过后,状态变为 `pending_detail_completion`(待明细完善)
- 此时任务的 `publisher_dept_id` 是一级需求部门的 ID,不是需求部门的 ID
- 需求部门负责人的"进行中任务"查询只按 `publisherDeptIds` 过滤,无法找到这些任务
- 需求部门成员的"进行中任务"查询只查询 `role='publisher'` 的任务,无法找到作为 `detail_completer` 的任务
**解决方案:**
- **后端修改:**
- 在 `TaskController.getTaskList` 中添加 `includeDetailCompleterDeptIds` 参数
- 在 `TaskService.getTaskList` 中添加按明细完善人部门查询的逻辑
- 在 `TaskController.getMyTasks` 中添加 `role='detail_completer'` 支持
- 新增 `TaskService.getMyDetailCompleterTasks` 方法,查询用户作为明细完善人的任务
- **前端修改:**
- 需求部门负责人查看"进行中任务"时,传递 `includeDetailCompleterDeptIds` 参数
- 需求部门成员查看"进行中任务"时,同时查询 `publisher` 和 `detail_completer` 角色的任务并合并结果
**修复效果:**
- ✅ 需求部门负责人可以在"进行中任务"中看到已审核通过的一级需求任务
- ✅ 需求部门成员可以在"进行中任务"中看到自己作为明细完善人的任务
- ✅ 任务状态流转更加清晰,用户能正确跟踪任务进度
**影响用户:**
- 所有需求部门负责人
- 所有需求部门成员
---
### 3. 修复需求部门负责人无法驳回任务的问题
**问题描述:**
- 需求部门负责人在驳回一级需求部门的任务时,系统报错:"需求部门负责人不存在"
- 导致需求部门负责人无法正常驳回任务
- 影响范围:所有需求部门负责人
**问题原因:**
- 一级需求部门的任务被驳回时,系统尝试将任务返回给需求部门的负责人
- 但某些一级需求部门(`dept_type='primary_demand'`)可能没有设置 `leader_id`
- 当 `TaskApprovalService.rejectByReceivingLeader` 方法检查 `demandDept.getLeaderId()` 时,如果为 `null`,会抛出异常
**解决方案:**
- 修改 `TaskApprovalService.rejectByReceivingLeader` 方法
- 当需求部门的 `leader_id` 为 `null` 时,不再抛出异常
- 改为将任务的 `currentApproverId` 设置为任务的 `publisherId`,将任务返回给原始发起人
- 这样即使需求部门没有负责人,任务也能正常被驳回并返回给发起人
**修复效果:**
- ✅ 需求部门负责人可以正常驳回一级需求部门的任务
- ✅ 即使需求部门没有负责人,任务也能正常被驳回
- ✅ 任务会正确返回给原始发起人
**影响用户:**
- 所有需求部门负责人
- 特别是需要驳回一级需求部门任务的负责人
---
### 4. 修复筛选功能搜索报错
**问题描述:**
- 错误信息:`TypeError: Assignment to constant variable`
- 触发场景:在任务大厅、进行中任务、已完成任务等页面使用筛选功能时
**问题原因:**
- 使用 `v-model` 绑定 `reactive` 对象时,Vue 尝试重新赋值整个对象
- `reactive` 对象不能直接重新赋值,导致报错
**解决方案:**
- 将所有 `TaskFilters` 组件的 `v-model` 改为 `:model-value` 和 `@update:model-value`
- 在事件处理函数中使用 `Object.assign` 更新对象属性,而不是重新赋值整个对象
**修复的筛选器:**
- ✅ 可接任务筛选 (`filters`)
- ✅ 待审核任务筛选 (`reviewFilters`)
- ✅ 进行中任务筛选 (`inProgressFilters`)
- ✅ 已完成任务筛选 (`completedFilters`)
- ✅ 我发起的任务筛选 (`publishedFilters`)
- ✅ 草稿箱筛选 (`draftsFilters`)
---
### 4. 修复 SQL 查询错误
**问题描述:**
- 错误信息:`Unknown column 't.description' in 'where clause'`
- 触发场景:使用搜索功能时
**问题原因:**
- 在扩展搜索功能时,SQL 查询中引用了 `task` 表中不存在的 `description` 字段
**解决方案:**
- 从所有 SQL 查询中移除了对 `t.description` 字段的引用
- 修复了以下文件中的查询:
- `TaskMapper.java` - `selectTaskHall` 和 `selectTaskHallByDept` 方法
- `TaskItemMapper.java` - 所有子任务查询方法
- `TaskService.java` - `getCompletedTasks` 方法
---
## 📝 技术细节
### 前端修改
**文件:** `frontend/src/views/TaskHall.vue`
- 导入 `Tooltip` 组件
- 添加 `truncateText` 辅助函数
- 修改所有显示需求人名字的地方,添加 Tooltip 和截断显示
- 修复 `v-model` 绑定问题,改用 `:model-value` 和 `@update:model-value`
- **修复需求部门看不到一级需求任务:**
- 需求部门负责人查看"进行中任务"时,添加 `includeDetailCompleterDeptIds` 参数
- 需求部门成员查看"进行中任务"时,同时查询 `publisher` 和 `detail_completer` 角色的任务并合并结果
- 更新 `loadDashboardStats` 统计逻辑,包含 `detail_completer` 角色的任务
**文件:** `frontend/src/views/CreateTask.vue`
- 添加预览图必填验证规则
- 在提交时添加额外的预览图验证
- 更新预览图上传区域的提示信息
**文件:** `frontend/src/api/task.ts`
- 在 `MyTasksParams` 接口中添加 `detail_completer` 作为有效的 `role` 值
- 在 `getTasks` 函数中添加 `includeDetailCompleterDeptIds` 参数
### 后端修改
**文件:** `backend/src/main/java/com/designhub/mapper/TaskMapper.java`
- 扩展 `selectTaskHall` 和 `selectTaskHallByDept` 的搜索条件
- 添加明细完善人、接收人、任务类型的关联查询
- 移除不存在的 `description` 字段引用
**文件:** `backend/src/main/java/com/designhub/mapper/TaskItemMapper.java`
- 扩展所有子任务查询方法的搜索条件
- 移除不存在的 `description` 字段引用
**文件:** `backend/src/main/java/com/designhub/service/TaskService.java`
- 扩展 `getCompletedTasks` 方法的搜索条件
- 在 `createTask` 和 `createPipelineTask` 方法中添加预览图必填验证
- 移除不存在的 `description` 字段引用
- **修复需求部门看不到一级需求任务:**
- 在 `getTaskList` 方法中添加 `includeDetailCompleterDeptIds` 参数支持
- 添加按明细完善人部门查询的逻辑(支持一级需求任务)
- 在 `getMyTasks` 方法中添加 `role='detail_completer'` 支持
- 新增 `getMyDetailCompleterTasks` 方法,查询用户作为明细完善人的任务
- 在 `fillTaskRelatedInfo` 方法中添加 `detailCompleterName` 的填充逻辑
**文件:** `backend/src/main/java/com/designhub/controller/TaskController.java`
- **修复需求部门看不到一级需求任务:**
- 在 `getTaskList` 接口中添加 `includeDetailCompleterDeptIds` 参数(逗号分隔的部门ID列表)
- 在 `getMyTasks` 接口中添加 `role='detail_completer'` 支持
**文件:** `backend/src/main/java/com/designhub/service/ProgressCheckService.java`
- **修复流水线任务异常扣分:**
- 修改 `checkDailyProgressUpdate` 方法,排除流水线任务的主任务(`is_pipeline=1`)
- 只对流水线任务的子任务进行进度检查
---
## 🎯 影响范围
### 用户影响
- ✅ **一级需求部门用户**:发起任务时必须上传预览图
- ✅ **所有用户**:搜索功能更强大,可以搜索更多字段
- ✅ **所有用户**:任务卡片显示更美观,长名字不再影响布局
- ✅ **流水线任务接收人**:不再被错误扣分,已完成子任务后不会被检查主任务进度
- ✅ **需求部门负责人**:可以在"进行中任务"中看到已审核通过的一级需求任务
- ✅ **需求部门成员**:可以在"进行中任务"中看到自己作为明细完善人的任务
### 功能影响
- ✅ **搜索功能**:支持搜索任务卡片的所有信息
- ✅ **筛选功能**:修复了搜索时的报错问题
- ✅ **任务创建**:一级需求部门用户必须上传预览图
- ✅ **进度检查**:流水线任务的主任务不再被检查进度,避免错误扣分
- ✅ **任务可见性**:需求部门可以正确查看一级需求任务的进度
---
## ⚠️ 注意事项
1. **一级需求部门用户**:从本次更新开始,发起任务时必须上传预览图,否则无法提交任务。
2. **搜索功能**:搜索功能已扩展,现在可以搜索更多字段,但不再支持搜索 `description` 字段(该字段在数据库中不存在)。
3. **名字显示**:任务卡片中的需求人名字如果超过 8 个字符会自动截断,鼠标悬停可查看完整信息。
4. **流水线任务进度检查**:流水线任务的主任务不再进行进度检查,只有子任务会被检查进度。已完成子任务的用户不会再被错误扣分。
5. **一级需求任务可见性**:
- 需求部门负责人审核通过一级需求任务后,可以在"进行中任务"中看到该任务
- 需求部门成员补充完任务明细并发布后,可以在"进行中任务"中看到该任务
- 任务状态为 `pending_detail_completion`(待明细完善)时,会显示在需求部门的"进行中任务"中
---
## 📞 问题反馈
如果在使用过程中遇到任何问题,请及时反馈:
- 系统异常
- 功能异常
- 用户体验问题
---
**更新完成时间:** 2026年1月22日 15:40
**部署状态:** ✅ 已部署到生产环境