用户点击"创建改图任务"
↓
显示弹窗
↓
选择任务类型
↓
┌─────┴─────┐
│ │
小修改 大修改
│ │
│ 勾选空间
│ │
│ 选择时间
│ ┌───┴───┐
│ 2-3天 自定义
│ │ │
│ │ 输入天数
│ └───┬───┘
│ │
└─────┬─────┘
│
填写描述
↓
┌────┴────┐
│ 验证 │
└────┬────┘
│
┌─────┴─────┐
否 是
│ │
按钮禁用 按钮可点击
↓
点击"提交"
↓
┌─────┴─────┐
小修改 大修改
│ │
保存到minorRevisions 保存到revisionTasks
│ │
"小修改已记录" "工单已创建,等待审批"
│ │
└──────┬─────┘
↓
刷新工单数量
↓
关闭弹窗
创建小修改
↓
记录到数据库
↓
✅ 完成
(无需审批、报价、确认)
创建工单
↓
pending_approval (待审批)
↓
组长审批
↓
┌───┴───┐
│ │
批准 驳回
│ │
│ rejected
│ (已驳回)
│ ↓
│ ❌ 结束
│
approved (已批准)
↓
客服报价
↓
quoted (已报价)
↓
客户确认 (TODO)
↓
confirmed (执行中)
↓
设计师完成
↓
completed (已完成)
↓
✅ 结束
注:任何阶段都可以取消 → cancelled
┌─────────────────────────────────────────────┐
│ 工单状态 │
├───────────┬──────────┬──────────┬──────────┤
│ 操作/角色 │ 设计师 │ 组长 │ 客服 │
├───────────┼──────────┼──────────┼──────────┤
│ 创建工单 │ ✅ │ ✅ │ ❌ │
├───────────┼──────────┼──────────┼──────────┤
│ 审批工单 │ ❌ │ ✅ │ ❌ │
│(待审批→批准)│ │ │ │
├───────────┼──────────┼──────────┼──────────┤
│ 驳回工单 │ ❌ │ ✅ │ ❌ │
│(待审批→驳回)│ │ │ │
├───────────┼──────────┼──────────┼──────────┤
│ 报价工单 │ ❌ │ ❌ │ ✅ │
│(已批准→报价)│ │ │ │
├───────────┼──────────┼──────────┼──────────┤
│ 完成工单 │ ✅ │ ✅ │ ❌ │
│(执行中→完成)│ │ │ │
├───────────┼──────────┼──────────┼──────────┤
│ 取消工单 │ ❌ │ ✅ │ ✅ │
│(任意→取消) │ │ │ │
└───────────┴──────────┴──────────┴──────────┘
Parse Server
│
└─ Project 表
│
├─ id (项目ID)
├─ name (项目名称)
├─ currentStage (当前阶段)
│
└─ data (JSON字段)
│
├─ minorRevisions[] ← 小修改记录
│ │
│ ├─ [0]
│ │ ├─ id: "MR_xxx"
│ │ ├─ description: "修改描述"
│ │ ├─ createdBy: "设计师ID"
│ │ └─ createdAt: Date
│ │
│ └─ [1] ...
│
├─ revisionTasks[] ← 大修改工单
│ │
│ ├─ [0]
│ │ ├─ id: "RT_xxx"
│ │ ├─ type: "major"
│ │ ├─ spaceIds: ["空间1", "空间2"]
│ │ ├─ estimatedDays: "2-3天"
│ │ ├─ description: "修改描述"
│ │ ├─ status: "pending_approval"
│ │ ├─ createdBy: "设计师ID"
│ │ ├─ approvedBy?: "组长ID"
│ │ ├─ quotedBy?: "客服ID"
│ │ ├─ quotedPrice?: 500
│ │ └─ completedBy?: "设计师ID"
│ │
│ └─ [1] ...
│
├─ deliveryMessages[] ← 交付消息
│
└─ quotation{} ← 报价信息
stage-delivery-new.component
│
├─ 创建改图任务按钮
│ ↓ (click)
│ showRevisionTaskModal = true
│ ↓
│ <app-revision-task-modal>
│ │
│ ├─ @Input() visible
│ ├─ @Input() projectId
│ ├─ @Input() availableSpaces ← cachedRevisionSpaces
│ ├─ @Input() currentUser
│ │
│ ├─ @Output() close
│ └─ @Output() created
│ ↓
│ onRevisionTaskCreated(taskId)
│ ↓
│ loadRevisionTaskCount()
│
└─ 改图工单按钮 (带徽章)
↓ (click)
showRevisionTaskList = true
↓
<app-revision-task-list>
│
├─ @Input() projectId
├─ @Input() currentUser
├─ @Input() isTeamLeader
├─ @Input() isCustomerService
│
├─ @Output() close
└─ @Output() refresh
↓
loadRevisionTaskCount()
工单状态变更
↓
触发事件
↓
┌────┴────┐
│ │
│ 事件类型 │
│ │
└────┬────┘
│
├─ 创建工单 → 通知组长
│ ↓
│ 企业微信消息
│ "【待审批】设计师XXX提交了改图工单"
│
├─ 审批通过 → 通知客服
│ ↓
│ 企业微信消息
│ "【待报价】改图工单已审批通过"
│
├─ 报价完成 → 通知客户
│ ↓
│ 短信/微信
│ "您的改图工单报价已完成,请确认"
│
├─ 客户确认 → 通知设计师
│ ↓
│ 企业微信消息
│ "【开始执行】客户已确认改图工单"
│
├─ 工单完成 → 通知所有人
│ ↓
│ 企业微信消息
│ "【已完成】改图工单已完成"
│
└─ 驳回工单 → 通知创建人
↓
企业微信消息
"【已驳回】工单被驳回:驳回原因"
事件源
├─ 创建工单
├─ 更新状态
└─ 完成工单
↓
Parse Cloud Code
↓
┌────┴────┐
│ │
实时推送 消息队列
│ │
│ 企业微信API
│ │
├─────────┘
↓
WebSocket
↓
前端接收
↓
┌─────┴─────┐
│ │
更新UI 通知提示
│ │
└─────┬─────┘
↓
用户看到更新
开始测试
↓
┌───┴───┐
│ │
│ 测试类型│
│ │
└───┬───┘
│
├─ 单元测试
│ ↓
│ 表单验证测试
│ ├─ 描述必填
│ ├─ 空间必选(大修改)
│ └─ 自定义天数≥1
│ ↓
│ 提交逻辑测试
│ ├─ 小修改不创建工单
│ └─ 大修改创建工单
│ ↓
│ ✅ 单元测试通过
│
├─ 集成测试
│ ↓
│ 完整流程测试
│ ├─ 创建 → 审批 → 报价 → 完成
│ ├─ 创建 → 驳回
│ └─ 小修改流程
│ ↓
│ 权限测试
│ ├─ 设计师不能审批
│ └─ 客服不能审批
│ ↓
│ 数据同步测试
│ ├─ 工单数量更新
│ └─ 列表刷新
│ ↓
│ ✅ 集成测试通过
│
└─ E2E测试
↓
模拟用户操作
├─ 点击按钮
├─ 填写表单
├─ 提交工单
└─ 查看列表
↓
验证结果
├─ UI正确显示
├─ 数据正确保存
└─ 通知正确发送
↓
✅ E2E测试通过
↓
测试完成
发现问题
↓
问题类型?
↓
┌───┴───┐
│ │
│ │
│ │
└───┬───┘
│
├─ 页面卡顿
│ ↓
│ 检查控制台
│ ↓
│ ngOnChanges频繁调用?
│ ├─ 是 → 检查模板绑定
│ │ ├─ 使用方法?→ 改为属性
│ │ └─ 刷新浏览器
│ └─ 否 → 检查其他性能问题
│
├─ 按钮无响应
│ ↓
│ 检查按钮状态
│ ├─ disabled?→ 检查验证逻辑
│ ├─ submitting?→ 等待提交完成
│ └─ z-index被遮挡?→ 检查CSS
│
├─ 数据不显示
│ ↓
│ 检查网络请求
│ ├─ 失败?→ 检查Parse连接
│ └─ 成功?→ 检查数据处理逻辑
│
└─ 工单数量不更新
↓
检查刷新逻辑
├─ loadRevisionTaskCount调用?
└─ 刷新页面
↓
问题解决?
├─ 是 → ✅ 完成
└─ 否 → 查看详细日志
用户操作
↓
记录时间戳
↓
┌───┴───┐
│ │
│ 操作类型│
│ │
└───┬───┘
│
├─ 创建工单
│ ├─ 开始时间
│ ├─ 表单验证时间
│ ├─ API调用时间
│ └─ 结束时间
│ ↓
│ 计算总耗时
│ ↓
│ ✅ <1秒 正常
│ ⚠️ 1-3秒 可接受
│ ❌ >3秒 需优化
│
├─ 加载列表
│ ├─ 开始时间
│ ├─ 数据加载时间
│ ├─ 渲染时间
│ └─ 结束时间
│ ↓
│ 计算总耗时
│ ↓
│ ✅ <500ms 正常
│ ⚠️ 500ms-1s 可接受
│ ❌ >1s 需优化
│
└─ 状态更新
├─ 开始时间
├─ API调用时间
├─ UI更新时间
└─ 结束时间
↓
计算总耗时
↓
记录到监控系统
↓
生成性能报告
开发完成
↓
代码审查
↓
单元测试
↓
集成测试
↓
E2E测试
↓
所有测试通过?
├─ 否 → 修复问题 → 重新测试
└─ 是
↓
预发布环境
↓
冒烟测试
↓
性能测试
↓
安全扫描
↓
文档更新
↓
准备发布
↓
┌───┴───┐
│ │
灰度发布 全量发布
│ │
10%用户 全部用户
│ │
└───┬───┘
↓
监控指标
├─ 错误率
├─ 响应时间
├─ 用户反馈
└─ 使用量
↓
问题?
├─ 是 → 回滚 → 修复
└─ 否
↓
✅ 发布完成
↓
发布公告
设计师发现问题
"客厅沙发颜色需要调整"
↓
点击"创建改图任务"
↓
选择"小修改"
↓
填写描述
↓
点击"提交"
↓
✅ 立即记录
无需等待审批
↓
继续工作
客户要求大改动
"主卧背景墙更换+厨房增加吊柜"
↓
点击"创建改图任务"
↓
选择"大修改"(默认)
↓
勾选空间
✓ 主卧
✓ 厨房
↓
选择时间:"3-5天"
↓
填写详细描述
↓
点击"提交"
↓
✅ 工单已创建
等待组长审批
↓
(第二天)
组长审批通过
↓
客服报价:¥500
↓
客户确认
↓
开始执行
↓
(3天后)
设计师完成
↓
✅ 工单完成
设计师创建工单
"增加豪华装修"
↓
提交工单
↓
组长审查发现问题
"超出预算,需求不明确"
↓
点击"驳回"
↓
填写原因
"请提供详细预算和具体方案"
↓
提交驳回
↓
❌ 工单被驳回
↓
设计师收到通知
↓
修改方案后重新提交
文档版本:v1.0
创建时间:2025-11-19 00:55
用途:可视化理解改图任务系统