2025-11-18 21:20
存储位置:Project.data.deliveryMessages
数据结构:
{
deliveryMessages: [
{
id: 'msg_1234567890_abc123',
project: 'projectId',
stage: 'white_model | soft_decor | rendering | post_process',
messageType: 'text | image | text_with_image',
content: '消息内容',
images: ['url1', 'url2'],
sentBy: 'userId',
sentByName: '用户名',
sentAt: Date
}
]
}
白模 (white_model):
- "老师我这里硬装模型做好了,看下是否有问题,如果没有,我去做渲染"
- "老师,白模阶段完成,请查看确认"
- "硬装结构已完成,请审阅"
软装 (soft_decor):
- "软装好了,准备渲染,有问题可以留言"
- "老师,软装设计已完成,请查看"
- "家具配置完成,准备进入渲染阶段"
渲染 (rendering):
- "老师,渲染图已完成,请查看效果"
- "效果图已出,请审阅"
- "渲染完成,请查看是否需要调整"
后期 (post_process):
- "老师,后期处理完成,请验收"
- "最终成品已完成,请查看"
- "所有修图完成,请确认"
src/app/pages/services/delivery-message.service.ts - 消息服务stage-delivery.component.ts - 消息发送逻辑(第3089-3189行)stage-delivery-new.component.html - 消息弹窗UI(第406-492行)stage-delivery-new.component.scss - 消息弹窗样式(第1505-1752行)Project.data.minorRevisionsProject.data.revisionTasks小修改存储:Project.data.minorRevisions
{
minorRevisions: [
{
id: 'MR_1234567890_abc123',
projectId: 'projectId',
type: 'minor',
spaceIds: [],
spaceNames: [],
estimatedDays: '',
description: '修改描述',
createdBy: 'userId',
createdByName: '用户名',
createdByRole: 'designer',
createdAt: Date
}
]
}
大修改工单存储:Project.data.revisionTasks
{
revisionTasks: [
{
id: 'RT_1234567890_abc123',
projectId: 'projectId',
type: 'major',
spaceIds: ['space1', 'space2'],
spaceNames: ['客厅', '主卧'],
estimatedDays: '2-3天',
customDays: 3,
description: '需要修改的内容...',
status: 'pending_approval',
// 创建信息
createdBy: 'userId',
createdByName: '设计师名字',
createdByRole: 'designer',
createdAt: Date,
// 组长审批
approvedBy: 'leaderId',
approvedByName: '组长名字',
approvedAt: Date,
approvalNotes: '审批意见',
// 驳回信息
rejectedBy: 'leaderId',
rejectedByName: '组长名字',
rejectedAt: Date,
rejectionReason: '驳回原因',
// 客服报价
quotedBy: 'csId',
quotedByName: '客服名字',
quotedAt: Date,
quotedPrice: 1000,
quotedNotes: '报价说明',
// 客户确认
confirmedBy: 'customerId',
confirmedByName: '客户名字',
confirmedAt: Date,
// 完成信息
completedBy: 'userId',
completedByName: '完成人',
completedAt: Date,
completionNotes: '完成说明'
}
]
}
创建工单 (pending_approval)
↓
组长审批 (approved) / 驳回 (rejected)
↓
客服报价 (quoted)
↓
客户确认 (confirmed)
↓
执行中 (confirmed)
↓
已完成 (completed)
可取消 → (cancelled)
src/app/pages/services/revision-task.service.ts - 改图工单服务src/modules/project/components/revision-task-modal/ - 创建工单弹窗src/modules/project/components/revision-task-list/ - 工单列表组件stage-delivery.component.ts - 工单集成逻辑(第3004-3088行)位置:每个已上传图片的缩略图右上角
功能:
实现:
<button class="send-image-btn"
(click)="sendSingleImage(space.id, type.id, file.url)"
title="发送图片">
<svg>...</svg>
</button>
位置:每个阶段的文件列表下方
功能:
实现:
<button class="send-message-btn"
(click)="openSendMessageModal(space.id, type.id)">
<svg>...</svg>
发送消息
</button>
位置:页面右上角固定按钮组
功能:
实现:
<button class="create-revision-btn"
(click)="showRevisionTaskModal = true">
创建改图任务
</button>
位置:页面右上角固定按钮组
功能:
实现:
<button class="revision-list-btn"
(click)="showRevisionTaskList = true">
改图工单
@if (revisionTaskCount > 0) {
<span class="badge">{{ revisionTaskCount }}</span>
}
</button>
┌─────────────────────────────────────────────────────────┐
│ 交付执行阶段 [创建改图任务] [改图工单] │
├─────────────────────────────────────────────────────────┤
│ │
│ 空间1 (主卧) │
│ ┌───────────────────────────────────────────────────┐ │
│ │ 白模 [+] [发送消息] │ │
│ │ [图1] [图2] [图3] │ │
│ │ (每个图片右上角有发送按钮) │ │
│ ├───────────────────────────────────────────────────┤ │
│ │ 软装 [+] [发送消息] │ │
│ │ [图1] [图2] │ │
│ ├───────────────────────────────────────────────────┤ │
│ │ 渲染 [+] [发送消息] │ │
│ │ [图1] [图2] [图3] [图4] │ │
│ ├───────────────────────────────────────────────────┤ │
│ │ 后期 [+] [发送消息] │ │
│ │ [图1] [图2] │ │
│ └───────────────────────────────────────────────────┘ │
│ │
│ 空间2 (客厅) │
│ └─ (同上结构) │
│ │
└─────────────────────────────────────────────────────────┘
┌──────────────────────────────────────┐
│ 发送消息 ✕ │
├──────────────────────────────────────┤
│ 空间:主卧 │
│ 阶段:白模 │
├──────────────────────────────────────┤
│ 快速回复: │
│ ⚪ 老师我这里硬装模型做好了... │
│ ⚪ 老师,白模阶段完成... │
│ ⚪ 硬装结构已完成... │
├──────────────────────────────────────┤
│ 自定义消息: │
│ ┌────────────────────────────────┐ │
│ │ │ │
│ │ │ │
│ └────────────────────────────────┘ │
│ 0 / 500 │
├──────────────────────────────────────┤
│ 将发送的图片: │
│ [图1] [图2] [图3] │
├──────────────────────────────────────┤
│ [取消] [发送] │
└──────────────────────────────────────┘
┌──────────────────────────────────────┐
│ 创建改图任务 ✕ │
├──────────────────────────────────────┤
│ 任务类型: │
│ ⚪ 小修改 ⚪ 大修改 (选中) │
│ 内部处理 需审批和报价 │
├──────────────────────────────────────┤
│ 涉及空间: [全选] │
│ ☑ 主卧 │
│ ☐ 客厅 │
│ ☑ 厨房 │
├──────────────────────────────────────┤
│ 预计时间: │
│ ⚪ 2-3天 ⚪ 3-5天 ⚪ 5-7天 │
│ ⚪ 自定义: [3] 天 │
├──────────────────────────────────────┤
│ 修改描述:* │
│ ┌────────────────────────────────┐ │
│ │ 请输入需要修改的内容... │ │
│ │ │ │
│ │ │ │
│ └────────────────────────────────┘ │
│ 0 / 500 │
├──────────────────────────────────────┤
│ ℹ️ 大修改需要组长审批和客服报价 │
│ 创建后将通知组长和客服 │
├──────────────────────────────────────┤
│ [取消] [提交] │
└──────────────────────────────────────┘
┌──────────────────────────────────────────────────────┐
│ 改图工单 ✕ │
├──────────────────────────────────────────────────────┤
│ [大修改工单] [小修改记录] │
├──────────────────────────────────────────────────────┤
│ │
│ 🔴 待审批 #RT001 │
│ 涉及空间:主卧、客厅 │
│ 预计时间:2-3天 │
│ 创建人:张三 · 2024-11-18 14:30 │
│ [展开详情] [审批] [驳回] │
│ │
│ 🟢 已完成 #RT002 │
│ 涉及空间:厨房 │
│ 预计时间:3-5天 │
│ 创建人:李四 · 2024-11-17 10:00 │
│ [查看详情] │
│ │
└──────────────────────────────────────────────────────┘
文件位置:src/app/pages/services/delivery-message.service.ts
主要方法:
// 获取阶段预设话术
getStageTemplates(stage: string): string[]
// 创建文本消息
createTextMessage(projectId, stage, content, currentUser): Promise<DeliveryMessage>
// 创建图片消息(支持带文字)
createImageMessage(projectId, stage, imageUrls, content, currentUser): Promise<DeliveryMessage>
// 获取项目所有消息
getProjectMessages(projectId): Promise<DeliveryMessage[]>
// 获取特定阶段的消息
getStageMessages(projectId, stage): Promise<DeliveryMessage[]>
文件位置:src/app/pages/services/revision-task.service.ts
主要方法:
// 创建改图工单(自动区分小修改/大修改)
createRevisionTask(task): Promise<string>
// 获取项目的所有改图工单
getProjectRevisionTasks(projectId): Promise<RevisionTask[]>
// 获取项目的所有小修改记录
getProjectMinorRevisions(projectId): Promise<any[]>
// 更新工单状态
updateRevisionTask(projectId, taskId, updates): Promise<void>
// 组长审批工单
approveRevisionTask(projectId, taskId, approver, notes?): Promise<void>
// 组长驳回工单
rejectRevisionTask(projectId, taskId, rejecter, reason): Promise<void>
// 客服报价
quoteRevisionTask(projectId, taskId, quoter, price, notes?): Promise<void>
// 客户确认工单
confirmRevisionTask(projectId, taskId, confirmer): Promise<void>
// 完成工单
completeRevisionTask(projectId, taskId, completer, notes?): Promise<void>
// 取消工单
cancelRevisionTask(projectId, taskId): Promise<void>
用户上传图片
↓
点击图片上的"发送"按钮
↓
弹出消息选择弹窗
↓
选择预设话术 OR 自定义输入
↓
DeliveryMessageService.createImageMessage()
↓
保存到 Project.data.deliveryMessages
↓
[TODO] 调用企业微信API发送到客户群
↓
显示成功提示
设计师创建工单
↓
RevisionTaskService.createRevisionTask()
↓
保存到 Project.data.revisionTasks
↓
状态: pending_approval
↓
[TODO] 通知组长审批
↓
组长审批通过
↓
状态: approved
↓
[TODO] 通知客服报价
↓
客服报价
↓
状态: quoted
↓
[TODO] 通知客户确认
↓
客户确认
↓
状态: confirmed (执行中)
↓
设计师标记完成
↓
状态: completed
设计师创建工单
↓
RevisionTaskService.createRevisionTask()
↓
保存到 Project.data.minorRevisions
↓
直接记录,无需审批
↓
显示成功提示
Project.data.deliveryMessagesProject.data.minorRevisionsProject.data.revisionTaskspending_approvalapprovedrejectedquotedconfirmedcompleted现象:点击创建工单和工单列表后,弹窗显示但无法点击任何按钮
原因:z-index 层级冲突 + 缺少 pointer-events: auto
修复方案:
pointer-events: auto 和 position: relative修改文件:
revision-task-modal.component.scssrevision-task-list.component.scssstage-delivery-new.component.scss详见:FINAL_INTERACTION_FIX.md
OnPush 变更检测策略ngOnChanges 调用频率DELIVERY_ENHANCEMENT_OVERVIEW.md - 总体需求概述DELIVERY_MESSAGE_DESIGN.md - 消息功能详细设计DELIVERY_INTERACTION_FIX.md - 弹窗交互问题修复FINAL_INTERACTION_FIX.md - 最终交互问题修复文档创建时间:2025-11-18 21:20
创建人:Cascade AI Assistant
状态:✅ 功能完整,待用户验证