# 改图任务系统 - 可视化流程图 ## 📊 **一、表单填写决策树** ``` 用户点击"创建改图任务" ↓ 显示弹窗 ↓ 选择任务类型 ↓ ┌─────┴─────┐ │ │ 小修改 大修改 │ │ │ 勾选空间 │ │ │ 选择时间 │ ┌───┴───┐ │ 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{} ← 报价信息 ``` --- ## 🎨 **五、UI 组件关系图** ``` stage-delivery-new.component │ ├─ 创建改图任务按钮 │ ↓ (click) │ showRevisionTaskModal = true │ ↓ │ │ │ │ ├─ @Input() visible │ ├─ @Input() projectId │ ├─ @Input() availableSpaces ← cachedRevisionSpaces │ ├─ @Input() currentUser │ │ │ ├─ @Output() close │ └─ @Output() created │ ↓ │ onRevisionTaskCreated(taskId) │ ↓ │ loadRevisionTaskCount() │ └─ 改图工单按钮 (带徽章) ↓ (click) showRevisionTaskList = true ↓ │ ├─ @Input() projectId ├─ @Input() currentUser ├─ @Input() isTeamLeader ├─ @Input() isCustomerService │ ├─ @Output() close └─ @Output() refresh ↓ loadRevisionTaskCount() ``` --- ## 🔔 **六、通知流程图(TODO)** ``` 工单状态变更 ↓ 触发事件 ↓ ┌────┴────┐ │ │ │ 事件类型 │ │ │ └────┬────┘ │ ├─ 创建工单 → 通知组长 │ ↓ │ 企业微信消息 │ "【待审批】设计师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%用户 全部用户 │ │ └───┬───┘ ↓ 监控指标 ├─ 错误率 ├─ 响应时间 ├─ 用户反馈 └─ 使用量 ↓ 问题? ├─ 是 → 回滚 → 修复 └─ 否 ↓ ✅ 发布完成 ↓ 发布公告 ``` --- ## 📝 **使用场景示例** ### 场景1:设计师发现小问题 ``` 设计师发现问题 "客厅沙发颜色需要调整" ↓ 点击"创建改图任务" ↓ 选择"小修改" ↓ 填写描述 ↓ 点击"提交" ↓ ✅ 立即记录 无需等待审批 ↓ 继续工作 ``` --- ### 场景2:重大设计变更 ``` 客户要求大改动 "主卧背景墙更换+厨房增加吊柜" ↓ 点击"创建改图任务" ↓ 选择"大修改"(默认) ↓ 勾选空间 ✓ 主卧 ✓ 厨房 ↓ 选择时间:"3-5天" ↓ 填写详细描述 ↓ 点击"提交" ↓ ✅ 工单已创建 等待组长审批 ↓ (第二天) 组长审批通过 ↓ 客服报价:¥500 ↓ 客户确认 ↓ 开始执行 ↓ (3天后) 设计师完成 ↓ ✅ 工单完成 ``` --- ### 场景3:工单被驳回 ``` 设计师创建工单 "增加豪华装修" ↓ 提交工单 ↓ 组长审查发现问题 "超出预算,需求不明确" ↓ 点击"驳回" ↓ 填写原因 "请提供详细预算和具体方案" ↓ 提交驳回 ↓ ❌ 工单被驳回 ↓ 设计师收到通知 ↓ 修改方案后重新提交 ``` --- **文档版本**:v1.0 **创建时间**:2025-11-19 00:55 **用途**:可视化理解改图任务系统