80 Commits

Author SHA1 Message Date
Your Name
d08f0a3d47 fix: 添加UserService.isAdminUser方法以修复编译错误 2026-01-03 13:45:53 +08:00
Your Name
2bd4163328 fix: 修复任务审核弹窗UI对齐和设计师列表权限问题,排查详情信息缺失
1. 前端 TaskHall.vue:
   - 修复接单方式单选框的对齐问题,改为 Flex 布局并排显示且等高
   - 调整样式使其更整齐

2. 后端 UserController.java:
   - getDesignersWithWorkload 方法增加权限控制
   - 如果未传 deptId,非管理员用户强制使用自己的 deptId
   - 修复了其他部门负责人可以看到全公司设计师的问题

3. 后端 TaskApprovalService.java:
   - 在 getPendingApprovalTasks 中添加日志
   - 记录品牌、类目、平台信息填充失败的情况,便于排查数据问题
2026-01-03 13:44:23 +08:00
Your Name
6113bb3b0c style: 适配全站灰绿配色主题,优化审批弹窗样式
- 将弹窗主题改为深色背景 (#1f1f1f)
- 标签颜色改为深灰背景+白色文字
- Radio 选中颜色和 hover 颜色改为全站主色 (#31f08b)
- 按钮和下拉框聚焦颜色统一为绿色主题
- 修复指定设计师功能点击无效的问题
2026-01-03 13:28:47 +08:00
Your Name
c3454123db feat: 优化指派设计师功能,改用Select下拉框并显示工作量和预计完成时间
问题修复:
✅ 修复指派设计师按钮点击无效的问题
✅ 将Radio组改为Select下拉框,体验更好

功能优化:

1. 后端增强 (UserService.java)
   ✅ 新增返回设计师最早预计完成时间 (earliestDeadline)
   ✅ 查询该设计师进行中任务的最早deadline
   ✅ 便于负责人评估设计师工作量

2. 前端界面优化 (TaskHall.vue)
   ✅ 将RadioGroup改为Select下拉框
   ✅ 下拉框尺寸改为large,更易操作
   ✅ 显示设计师姓名
   ✅ 显示进行中任务数量
   ✅ 显示预计最早完成时间(相对时间)
   ✅ 根据工作量显示不同颜色:
      - 0个任务:绿色 "空闲"
      - 1-3个:绿色 "进行中: X个"
      - 4-5个:橙色 "进行中: X个"
      - 6+个:红色 "进行中: X个"

3. 时间显示格式
   ✅ 相对时间显示(例如:2天8小时后)
   ✅ 24小时内显示小时数
   ✅ 已逾期显示为"已逾期"

4. 下拉框选项样式
   ✅ 双栏布局:左侧姓名,右侧工作信息
   ✅ 工作量和完成时间用 | 分隔
   ✅ 信息一目了然

使用示例:
- 选择"指定设计师接单"
- 点击下拉框
- 看到:张三 | 进行中: 2个 | 最早完成: 1天5小时后
- 方便评估后选择最合适的设计师
2026-01-03 12:27:52 +08:00
Your Name
7e970fa614 style: 优化审核弹窗UI风格,统一使用Ant Design组件
优化内容:

1. 组件替换
   ✅ 使用 Button 替换原生 button
   ✅ 使用 Select 替换原生 select
   ✅ 使用 InputNumber 替换 input[type=number]
   ✅ 使用 Space 组件优化布局
   ✅ 使用 Tag 组件显示标签

2. 任务类型编辑区域
   ✅ 改用浅灰背景 (#fafafa)
   ✅ 边框颜色统一 (#e8e8e8)
   ✅ 任务类型显示为蓝色 Tag
   ✅ 使用 InputNumber 组件调整数量
   ✅ 删除按钮使用 text + danger 样式
   ✅ 添加按钮使用 primary + 绿色样式

3. 接单方式选择
   ✅ Radio 选项卡片化设计
   ✅ 选中状态浅蓝背景 (#e6f7ff)
   ✅ 添加图标前缀 (🏢/👤)
   ✅ 卡片圆角 6px
   ✅ 过渡动画效果

4. 设计师列表
   ✅ 卡片化设计,选中高亮
   ✅ 使用 Tag 显示任务数量
   ✅ 根据任务量显示不同颜色:
      - 0-3个:success (绿色)
      - 4-5个:warning (橙色)
      - 6+个:error (红色)

5. 弹窗样式
   ✅ 标题添加 emoji 图标
   ✅ 宽度调整为 650px
   ✅ 按钮尺寸统一为 large
   ✅ 按钮最小宽度 100px

6. 驳回弹窗
   ✅ 同样优化风格
   ✅ 增加内边距
   ✅ 文本域高度增加到 5 行
   ✅ 统一按钮样式

整体效果:
- 与系统其他页面风格一致
- 使用 Ant Design 标准组件
- 视觉层次更清晰
- 交互体验更友好
- 响应式过渡动画
2026-01-03 12:07:54 +08:00
Your Name
9d431d0f0e fix: 修复任务类型编辑弹窗语法错误 2026-01-03 11:58:01 +08:00
Your Name
fac68333a7 feat: 优化任务时效计算逻辑 - 从接单时开始计算
问题:
- 任务时效(deadline)应该从设计师接单时开始计算
- 而不是从任务创建或审核通过时计算

修改内容:

1. TaskService.grabTask()
   - 无论任务之前是否有deadline
   - 抢单时都重新计算deadline
   - 从接单时间(now)开始 + estimatedHours
   - 添加详细日志记录

2. TaskApprovalService.approveReceivingLevel()
   - 接单部门负责人指定设计师时
   - 重新计算deadline
   - 从指定时间(now)开始 + estimatedHours
   - 添加详细日志记录

3. TaskApprovalService.approveDemandLevel()
   - assigned模式下已有正确逻辑
   - 从分配时间开始计算deadline
   - 保持不变

计算逻辑:
- deadline = 接单时间 + estimatedHours(小时)
- 如果estimatedHours为空或0,不设置deadline
- 记录详细日志便于排查

影响范围:
- 设计师抢单:✅ 重新计算
- 负责人指派:✅ 重新计算
- 需求部门指定:✅ 已有逻辑
- 发布到大厅:❌ 不设置(等待接单后计算)

示例:
- 任务预估8小时
- 设计师12:00接单
- deadline = 12:00 + 8小时 = 20:00
2026-01-03 11:54:59 +08:00
Your Name
a241730633 feat: 接单部门负责人审核时可编辑任务类型
新增功能:
1. 审核弹窗增加任务类型编辑区域
   - 显示当前所有任务类型
   - 每个类型可调整数量
   - 可删除任务类型
   - 可添加新的任务类型
   - 自动从下拉列表选择(防重复)

2. 编辑界面优化
   - 灰色背景区域突出显示
   - 每个任务类型独立卡片
   - 数量输入框(最小值1)
   - 红色删除按钮
   - 绿色添加按钮

3. 数据提交
   - 审核时携带taskUpdates参数
   - 包含修改后的任务类型列表
   - 后端自动重新计算总积分
   - 支持流水线任务和普通任务

4. 后端支持(已有)
   - TaskApprovalService.applyTaskUpdates()
   - 自动更新taskTypeIds字段
   - 重新计算totalScore
   - 记录审核日志

使用场景:
- 接单部门负责人审核任务时
- 发现任务类型需要调整
- 直接在审核弹窗中编辑
- 编辑后再选择指派设计师或发布到大厅
2026-01-03 11:53:46 +08:00
Your Name
193810628a fix: 修复三个问题
问题1:接单部门负责人审核缺少指派选项
- 已在之前修复handleApproveTask函数,接单部门负责人审核时会调用handleApproveTwoLevelTask
- 提供完整的审核选项(指派设计师/发布到大厅)

问题2:被驳回任务状态显示和编辑功能
- 修复状态显示:rejected显示"已驳回"(之前显示"已取消")
- 添加"重新编辑提交"按钮到被驳回的任务卡片
- 点击跳转到任务创建页面进行编辑
- 用户可以修改任务信息后重新提交审核

问题3:钉钉群通知调试改进
- 添加更详细的日志记录
- 在发送前后都记录日志
- 记录sendRobotMessage的返回值
- 方便排查通知发送失败的问题

改进内容:
1. 任务状态映射优化
   - rejected -> "已驳回"
   - cancelled -> "已取消"
   - 不再混淆这两种状态

2. 被驳回任务编辑流程
   - 任务卡片显示"重新编辑提交"按钮
   - 跳转到创建页面(带editId和mode参数)
   - 保留原有任务信息,允许修改后重新提交

3. 钉钉通知日志增强
   - "准备发送钉钉群通知"
   - "准备调用钉钉机器人发送消息"
   - "钉钉群通知发送成功/失败"
   - 详细的异常堆栈信息
2026-01-03 11:48:28 +08:00
Your Name
fdda2e5878 feat: 添加任务发布到大厅时的钉钉群机器人通知
问题:
- 任务审核通过并发布到大厅时,没有触发钉钉群机器人通知
- 设计师无法第一时间知道有新任务可接单

修复内容:
1. TaskApprovalService.approveReceivingLevel()
   - 接单部门负责人审核通过时
   - 如果未指定设计师(发布到大厅)
   - 自动发送钉钉群机器人消息
   - 包含任务标题、编号、积分、品牌等信息

2. TaskItemService.approveTaskGroup()
   - 子任务组审核通过时
   - 如果未指定设计师(发布到大厅)
   - 自动发送钉钉群机器人消息
   - 包含主任务标题、子任务组信息、任务列表

3. 通知内容:
   - 标题:🎯 新任务发布 / 🎯 新子任务组发布
   - 详细信息:任务编号、积分、品牌、类目、平台等
   - 行动提示:💡 赶快去任务大厅抢单吧!

4. 错误处理:
   - 通知发送失败不影响主流程
   - 记录错误日志便于排查

影响范围:
- 每次任务发布到大厅时,接单部门群会收到通知
- 提高设计师接单效率
- 通知发送失败不会影响任务正常流转
2026-01-03 11:35:36 +08:00
Your Name
371cfd5b2a feat: 为任务卡片添加子任务进度统计功能
新增功能:
1. Task实体新增字段:
   - subTaskTotal: 子任务总数
   - subTaskCompleted: 已完成子任务数
   - subTaskInProgress: 进行中子任务数
   - subTaskPending: 待接单子任务数
   - subTasks: 子任务列表(包含处理人信息)

2. TaskService新增方法:
   - fillSubTaskStats(): 填充流水线任务的子任务统计信息
   - 自动在getMyPublishedTasks和getMyReceivedTasks中调用
   - 统计各状态子任务数量
   - 自动填充处理人信息

3. 同时修复流水线任务主任务状态同步问题:
   - 设计师接单第一个子任务时,主任务状态更新为in_progress
   - 确保需求方能正确看到任务进度

影响范围:
- 需求方查看"我发起的"任务时,可以看到子任务进度
- 设计师查看接收的任务时,可以看到子任务详情
- 为后续前端显示提供数据支持
2026-01-03 11:32:16 +08:00
Your Name
ef7e39cb00 fix: 修复接单部门负责人审核时缺少指派设计师选项的问题
问题:
- 在任务卡片和详情页点击通过审核按钮时
- 接单部门负责人无法选择指派设计师或发布到大厅
- 只能直接通过审核并发布到大厅

原因:
- handleApproveTask函数使用了简化版的审核逻辑
- 没有调用handleApproveTwoLevelTask中的完整功能

修复内容:
- 修改handleApproveTask函数
- 当currentApproverRole === 'receiving_leader'时
- 自动跳转到handleApproveTwoLevelTask函数
- 提供完整的审核选项:
  ✅ 指派部门内的设计师接单
  ✅ 发布到任务大厅抢单
  ✅ 显示设计师当前进行中的任务数量

现在接单部门负责人在任何地方审核任务时,都会看到:
1. 选择发布方式(指派设计师 / 发布到大厅)
2. 如果选择指派,可以看到每个设计师的工作量
3. 审核通过后,任务按选择的方式分配
2026-01-03 11:22:02 +08:00
Your Name
6c50652df8 fix: 为所有通知添加钉钉推送功能
问题:
1. 需求部门负责人收不到审核通知
2. 任务完结时发起者收不到通知
3. 所有通知都没有钉钉个人消息推送

修复内容:
1. TaskItemService - 添加5个通知的钉钉推送
   - 子任务被接单通知
   - 子任务组待审核通知
   - 流水线任务完成通知
   - 子任务被驳回通知
   - 子任务已指派通知

2. TaskService - 已完成(之前修复)
   - 任务待审核通知
   - 任务提交审核通知
   - 任务审核通过通知
   - 任务被驳回通知
   - 抢单成功通知

3. NotificationService便捷方法
   - sendNotification(receiverId, title, content, type, id)
   - 默认启用钉钉推送

现在所有通知都会:
✅ 发送站内通知
✅ 发送钉钉个人工作消息(如果用户绑定了钉钉ID)
2026-01-03 11:17:07 +08:00
Your Name
038659bd41 fix: 修复用户管理和任务抢单权限控制
1. 修复设置管理员报错
   - 修正BusinessException构造函数调用

2. 完善抢单权限控制
   - 需求部门成员不能抢单
   - 所有部门负责人不能抢单(包括需求和接单部门)
   - 只有指定接单部门的普通成员可以抢单
   - 验证部门是否允许接该需求类型
   - 抢单成功后发送通知给任务发起人

3. 前端抢单按钮状态控制
   - 添加canGrabTask方法判断抢单权限
   - 可接单:绿色按钮
   - 不可接单:灰色按钮并禁用
   - 鼠标悬停显示不能抢单的原因
   - 支持任务列表和详情页面

4. 优化用户体验
   - 点击不可抢单按钮时提示具体原因
   - 按钮文案动态显示状态
2026-01-03 11:07:42 +08:00
Your Name
93781bb202 fix: 修复用户管理表格布局问题
- 增加操作列宽度从250px到320px(容纳3个按钮)
- 添加表格横向滚动配置(scroll x: 1200)
- 确保固定的操作列不会遮挡其他内容
2026-01-03 10:50:41 +08:00
Your Name
c62fe7853f fix: 修复钉钉个人通知未发送的问题
- TaskService中所有关键通知添加setPushDingtalk(1)
  - 任务待审核通知
  - 任务提交审核通知
  - 任务审核通过通知
  - 任务被驳回通知(高优先级)
- NotificationService便捷方法默认启用钉钉推送
- 确保所有重要通知都能触发个人工作消息推送
2026-01-03 10:42:59 +08:00
Your Name
1fd4d245a1 feat: 实现钉钉个人通知功能
- NotificationService添加DingTalkService和UserMapper依赖
- 实现asyncPushToDingtalk方法,支持发送个人工作通知
- 自动检查用户是否绑定钉钉ID
- 构建Markdown格式的通知内容
- 异步发送,不影响主流程性能
2026-01-03 10:29:55 +08:00
Your Name
e0a9402efd feat: 添加用户管理员身份设置功能
- 数据库添加is_admin字段和索引
- User实体类添加isAdmin字段
- 后端添加setAdmin API(UserController和UserService)
- 前端用户管理界面添加管理员标识列
- 添加设置/取消管理员按钮及功能
- 用户管理表格显示管理员标识(红色标签)
2026-01-03 10:13:29 +08:00
Your Name
3f57f6d3de fix: 修复通知图标颜色继承问题 2026-01-02 20:26:48 +08:00
Your Name
36fadab2be style: 调整通知图标颜色为浅白色
- 改为rgba(255, 255, 255, 0.75)浅白色,与系统设置图标颜色一致
- 悬停时改为rgba(255, 255, 255, 0.95)更亮的白色
2026-01-02 20:21:49 +08:00
Your Name
9c6f5351fa feat: 恢复任务卡片进度条显示
- 在进行中的任务中保留进度条显示
- 在我发起的任务中添加进度条(进行中和已完成状态显示)
- 在已完成任务中添加进度条(显示100%)
- 移除我发起的任务中冗余的文本进度显示
2026-01-02 20:17:57 +08:00
Your Name
9c27f8c9f4 fix: 替换通知图标为统一的Icon组件样式
- 移除自定义SVG图标,使用Icon组件的bell图标
- 确保通知图标与系统设置、成就、签到等图标风格统一
- 修复类型检查错误
2026-01-02 20:11:27 +08:00
Your Name
8e0ecdb3ce fix: 移除TaskItem不存在的setStartTime调用 2026-01-02 20:05:09 +08:00
Your Name
6314d2e034 feat: 实现子任务组审核功能
- 修改子任务完成逻辑,解锁后的子任务组设置为pending_group_approval状态
- 添加子任务组审核API(approveTaskGroup, rejectTaskGroup)
- 在待审核Tab中集成子任务组显示,统一管理主任务和子任务组审核
- 子任务组卡片显示子任务组标识
- 审核时支持选择发布到大厅或指定设计师
- 修复通知图标样式,与系统设置图标对齐统一
2026-01-02 20:02:45 +08:00
Your Name
2a7f9f7cd7 feat: 隐藏招募任务和指定任务发布类型,只保留默认模式 2026-01-02 19:54:25 +08:00
Your Name
73e47a3d71 fix: 进行中任务Tab同时显示普通任务和子任务,支持子任务的进度更新和完结操作 2026-01-02 19:42:59 +08:00
Your Name
e86b5a45f3 feat: 接单部门审核时添加指定设计师接单功能,显示设计师工作量 2026-01-02 19:32:53 +08:00
Your Name
b44a7e744f feat: 可接任务Tab同时显示普通任务和子任务,并添加子任务标签 2026-01-02 19:28:21 +08:00
Your Name
ea4b6a8dc5 修复流水线任务审核通过后主任务状态未更新的问题
问题:流水线任务在审核通过后,主任务status仍为draft,导致子任务无法在可接任务列表中显示
原因:splitIntoPipelineSubTasks方法中只处理了recruitment和assigned模式,default模式下没有设置主任务状态
解决:为default模式及其他模式添加status=pending的设置,确保子任务可以被设计师看到并接单
2026-01-02 19:18:51 +08:00
Your Name
0daf772560 修复task_approval_log表结构不匹配问题
问题:实体类TaskApprovalLog定义的字段与数据库表不匹配
- 缺少approval_level字段
- 缺少approver_name字段
- 缺少action字段
- 缺少comment字段
- 缺少changes字段

解决:重新创建task_approval_log表,使其与实体类定义一致
2026-01-02 19:08:03 +08:00
Your Name
94e5986673 修复部门搜索框UI样式重叠问题
将a-input-search改为a-input,避免自带搜索按钮与prefix图标重叠
2026-01-02 18:58:22 +08:00
Your Name
7d881ab617 修复Notification实体类updateTime字段导致的SQL错误
问题:审核通过时发送通知失败,提示'Unknown column update_time in field list'
原因:Notification实体类定义了updateTime字段并标记为自动填充,但数据库表sys_notification中没有此字段
解决:将updateTime字段标记为exist=false,表示此字段不存在于数据库表中
2026-01-02 18:52:42 +08:00
Your Name
302def1e7c 为部门管理添加搜索功能
1. 添加部门搜索框,支持搜索部门名称、编码和负责人
2. 部门负责人下拉选择已有搜索功能(show-search和filterUserOption)
3. 实时显示搜索结果数量
2026-01-02 18:48:58 +08:00
Your Name
3b9fb61312 修复待审核任务审核API调用和Tab数量显示问题
1. 修复TaskHall.vue中handleApproveTask和handleRejectTask使用错误的API
   - 改为使用两级审核API:approveDemandLevel/approveReceivingLevel
   - 改为使用rejectByDemandLeader/rejectByReceivingLeader

2. 修复Tab标签数量显示为0的问题
   - 新增loadAllTabCounts函数在页面初始化时加载所有Tab数量
   - 在任务操作后刷新Tab数量统计

3. 优化通知图标类型映射
   - 支持大小写不敏感的通知类型匹配
   - 支持task_approval等下划线格式的通知类型
2026-01-02 18:42:00 +08:00
Your Name
a6827bf193 修复task_item表缺少group_no字段的问题 2026-01-02 18:32:40 +08:00
Your Name
e978a7cdb1 修复发布任务失败问题并添加编码自动生成功能
1. 修复task表approval_status字段长度问题(VARCHAR(20)->VARCHAR(50))
2. 为品牌、平台、类目、任务子类型添加自动生成编码功能
3. 优化编码输入体验,添加自动生成按钮
2026-01-02 18:28:41 +08:00
Your Name
e3ff05e2b5 修复category表is_leaf字段,使类目在发布任务时可选 2026-01-02 18:17:34 +08:00
Your Name
1dcb48fea8 修复team_score_pool表team_id字段NOT NULL导致的插入失败问题 2026-01-02 18:13:14 +08:00
Your Name
cf33f38274 添加TeamScorePoolService的@Slf4j注解以支持日志功能 2026-01-02 18:10:15 +08:00
Your Name
6df38c4f89 修复部门设置负责人失败的问题
- 前端:允许选择所有用户作为部门负责人,不限于该部门成员
- 前端:修复leaderId和parentId的类型兼容性问题
- 后端:添加leaderId有效性验证,防止设置不存在的用户
2026-01-02 18:00:20 +08:00
Your Name
ec6a0d1838 修复保存部门失败问题:添加详细错误处理和日志记录 2026-01-02 16:45:30 +08:00
Your Name
e40cf047fa 修复设置部门负责人:前端使用0表示清除负责人(后端会将0转换为null) 2026-01-02 16:40:59 +08:00
Your Name
ffed3d0856 修复设置部门负责人:改进leaderId处理逻辑,支持清除负责人 2026-01-02 16:33:02 +08:00
Your Name
f17415f44e 修复设置部门负责人:允许设置为null或0来清除负责人 2026-01-02 16:27:55 +08:00
Your Name
4e74747947 添加调试日志:在syncUserFromDingTalk中添加详细的roleIds检查日志 2026-01-02 16:17:37 +08:00
Your Name
cfa38c9b36 修复三个问题:1.钉钉登录时保留管理员角色 2.用户管理已支持设置管理员角色 3.网站设置添加注册功能开关 2026-01-02 16:08:44 +08:00
Your Name
e1989510de 添加后端日志:在getUserInfoByToken中记录roleIds 2026-01-02 15:59:08 +08:00
Your Name
9197c06cc3 优化Navbar管理员判断:优先检查roleIds,添加调试日志 2026-01-02 15:58:50 +08:00
Your Name
94a4e79a31 修复UserInfo接口:添加roleIds字段以支持管理员角色判断 2026-01-02 15:53:07 +08:00
Your Name
171f329b15 优化Navbar菜单点击:在menu-item上添加@click.stop防止事件冒泡 2026-01-02 15:46:19 +08:00