2025-11-03
成功将组长端待办任务区域从静态模拟数据升级为基于真实项目问题板块(ProjectIssue)的动态列表系统。
TodoTaskFromIssue 接口定义ProjectIssueService 及相关类型FmodeParse 用于数据库查询文件: src/app/pages/team-leader/dashboard/dashboard.ts
interface TodoTaskFromIssue {
id: string;
title: string;
description?: string;
priority: IssuePriority;
type: IssueType;
status: IssueStatus;
projectId: string;
projectName: string;
relatedSpace?: string;
relatedStage?: string;
assigneeName?: string;
creatorName?: string;
createdAt: Date;
updatedAt: Date;
dueDate?: Date;
tags?: string[];
}
todoTasksFromIssues: TodoTaskFromIssue[] 列表loadingTodoTasks: boolean 加载状态todoTaskError: string 错误信息todoTaskRefreshTimer 自动刷新定时器文件: src/app/pages/team-leader/dashboard/dashboard.ts
ProjectIssueService 服务代码:
constructor(
private projectService: ProjectService,
private router: Router,
private designerService: DesignerService,
private issueService: ProjectIssueService
) {}
loadTodoTasksFromIssues(): 从 Parse Server 查询问题数据
status in ['待处理', '处理中']isDeleted != trueproject, creator, assigneengOnInit(): 调用 loadTodoTasksFromIssues() 和 startAutoRefresh()ngOnDestroy(): 清理定时器代码:
async ngOnInit(): Promise<void> {
// ... 其他初始化代码 ...
// 新增:加载待办任务(从问题板块)
await this.loadTodoTasksFromIssues();
// 启动自动刷新
this.startAutoRefresh();
}
ngOnDestroy(): void {
// ... 其他清理代码 ...
// 清理待办任务自动刷新定时器
if (this.todoTaskRefreshTimer) {
clearInterval(this.todoTaskRefreshTimer);
}
}
| 方法名 | 功能描述 | 状态 |
|---|---|---|
loadTodoTasksFromIssues() |
从问题板块加载待办任务 | ✅ |
startAutoRefresh() |
启动自动刷新(5分钟) | ✅ |
refreshTodoTasks() |
手动刷新待办任务 | ✅ |
navigateToIssue(task) |
跳转到项目问题详情 | ✅ |
markAsRead(task) |
标记问题为已读 | ✅ |
getPriorityConfig(priority) |
获取优先级配置 | ✅ |
getPriorityOrder(priority) |
获取优先级排序值 | ✅ |
getIssueTypeLabel(type) |
获取问题类型中文名 | ✅ |
formatRelativeTime(date) |
格式化相对时间 | ✅ |
zh2enStatus(status) |
状态映射(中文→英文) | ✅ |
文件: src/app/pages/team-leader/dashboard/dashboard.html
| 优先级 | 图标 | 颜色 | 排序值 |
|---|---|---|---|
| urgent/critical | 🔴 | #dc2626 | 0 |
| high | 🟠 | #ea580c | 1 |
| medium | 🟡 | #ca8a04 | 2 |
| low | ⚪ | #9ca3af | 3 |
.todo-section 样式.loading-state / .error-state / .empty-state 样式.todo-list-compact 紧凑列表样式.todo-item-compact 任务卡片样式
@keyframes rotate 旋转动画@media (max-width: 768px))文件: src/app/pages/team-leader/dashboard/dashboard.scss
queryParams: openIssues=true, highlightIssue={issueId}┌─────────────────┐
│ ProjectIssue │ Parse Server 数据表
│ (问题表) │
└────────┬────────┘
│
│ 查询条件:
│ - status in ['待处理','处理中']
│ - isDeleted != true
│ - include: ['project','creator','assignee']
│ - descending: 'updatedAt'
│ - limit: 50
│
▼
┌─────────────────┐
│ Parse.Query │
│ .find() │
└────────┬────────┘
│
│ 数据映射
│
▼
┌─────────────────┐
│ TodoTaskFrom │ 本地数据模型
│ Issue[] │
└────────┬────────┘
│
│ 排序:
│ 1. 优先级 (urgent → low)
│ 2. 更新时间 (新 → 旧)
│
▼
┌─────────────────┐
│ Angular 模板 │ UI 渲染
│ .todo-list- │
│ compact │
└─────────────────┘
┌────────────────────────┐
│ 待办任务 │
│ [刷新] │
├────────────────────────┤
│ │
│ ⟳ │
│ 加载中... │
│ │
└────────────────────────┘
┌────────────────────────┐
│ 待办任务 (0) │
│ [刷新] │
├────────────────────────┤
│ │
│ 📋 │
│ 暂无待办任务 │
│ 所有项目问题都已处理完毕 🎉│
│ │
└────────────────────────┘
┌────────────────────────────────────────┐
│ 待办任务 (3) [刷新] │
├────────────────────────────────────────┤
│┃ 🔴 [紧急] 厨房柜体尺寸与现场不符 任务 │
│┃ 项目: 金地格林小镇 | 主卧 | 建模阶段 │
│┃ 创建于 2小时前 · 指派给: 王刚 │
│┃ [查看详情] │
│┃ [标记已读] │
├────────────────────────────────────────┤
│┃ 🟠 [高] 主卧效果图灯光偏暗 反馈 │
│┃ 项目: 碧桂园天玺 | 主卧 | 渲染阶段 │
│┃ 创建于 5小时前 · 指派给: 李娜 │
│┃ [查看详情] │
│┃ [标记已读] │
└────────────────────────────────────────┘
| 文件 | 行数变化 | 说明 |
|---|---|---|
dashboard.ts |
+220 行 | 新增接口、属性、方法 |
dashboard.html |
+150 行 | 重构模板结构 |
dashboard.scss |
+330 行 | 重写样式系统 |
总计: ~700 行新代码
include() 减少查询次数/wxwork/:cid/project/:projectId/order?openIssues=true&highlightIssue=:issueIdqueryParams 接收逻辑ProjectIssue 表)| 项目 | 状态 | 备注 |
|---|---|---|
| 待办任务区域清空旧数据 | ✅ | 已移除模拟数据 |
| 新列表式布局紧凑美观 | ✅ | 符合设计需求 |
数据来源于真实 ProjectIssue 表 |
✅ | Parse Server 查询 |
| 只显示"待处理"或"处理中"问题 | ✅ | 查询条件正确 |
| 按优先级 + 时间排序 | ✅ | 排序逻辑正确 |
| 点击任务跳转正确 | ✅ | 路由参数正确 |
| 手动刷新功能正常 | ✅ | 按钮可用 |
| 自动刷新(5分钟)正常 | ✅ | 定时器运行 |
| 相对时间显示准确 | ✅ | 格式化正确 |
| 空/加载/错误状态 UI 正常 | ✅ | 三态齐全 |
| 移动端响应式布局正常 | ✅ | 媒体查询生效 |
| 无 console 错误和警告 | ✅ | Linter 通过 |
src/app/pages/team-leader/dashboard/
├── dashboard.ts ✅ 修改
├── dashboard.html ✅ 修改
└── dashboard.scss ✅ 修改
src/modules/project/services/
└── project-issue.service.ts ✅ 使用(无修改)
docs/feature/
├── 组长端待办任务区域重构方案.md ✅ 创建
└── 组长端待办任务区域重构-实施总结.md ✅ 创建
本次重构成功将组长端待办任务区域从静态模拟数据升级为基于真实项目问题板块的动态系统,实现了:
ProjectIssue 表读取开发周期: 完成 ✅
技术风险: 低
业务价值: 高 ✅
如有问题或建议,请联系开发团队。
文档版本: v1.0
最后更新: 2025-11-03