您在订单分配阶段手动删除了报价空间,但其他阶段(需求确认、交付执行、设计师分配)仍然显示9个空间,数据没有同步。
之前虽然实现了统一空间管理系统(ProductSpaceService中的saveUnifiedSpaceData和getUnifiedSpaceData方法),但各个阶段组件还没有使用这些新方法,仍然直接从Product表读取数据,导致:
Project.data.unifiedSpaces统一存储stage-order.component.ts)loadProjectSpaces() - 加载空间时使用统一管理
// ❌ 旧代码
this.projectSpaces = await this.productSpaceService.getProjectProductSpaces(projectId);
// ✅ 新代码
const unifiedSpaces = await this.productSpaceService.getUnifiedSpaceData(projectId);
// 转换为组件格式并使用
deleteSpace() - 删除空间时同步到统一存储
// ❌ 旧代码
await this.productSpaceService.deleteProductSpace(spaceId);
this.projectSpaces = this.projectSpaces.filter(s => s.id !== spaceId);
// ✅ 新代码
// 从本地列表移除
this.projectSpaces = this.projectSpaces.filter(s => s.id !== spaceId);
// 保存到统一存储(自动同步到Product表和报价数据)
await this.productSpaceService.saveUnifiedSpaceData(projectId, unifiedSpaces);
关键改进:
saveUnifiedSpaceDataProject.data.unifiedSpaces ✅Project.data.quotation.spaces ✅stage-requirements.component.ts)loadData() - 加载空间数据
// ❌ 旧代码
this.projectProducts = await this.productSpaceService.getProjectProductSpaces(projectId);
// ✅ 新代码
const unifiedSpaces = await this.productSpaceService.getUnifiedSpaceData(projectId);
// 转换为组件格式
this.projectProducts = unifiedSpaces.map(space => ({...}));
关键改进:
Project.data.unifiedSpaces读取stage-delivery.component.ts)loadProjectProducts() - 加载空间数据
// ❌ 旧代码
this.projectProducts = await this.productSpaceService.getProjectProductSpaces(projectId);
// ✅ 新代码
const unifiedSpaces = await this.productSpaceService.getUnifiedSpaceData(projectId);
// 转换为组件格式
this.projectProducts = unifiedSpaces.map(space => ({...}));
关键改进:
Project.data.unifiedSpaces读取syncProductsWithQuotation方法(不再需要)designer-team-assignment-modal.component.ts)loadRealProjectSpaces() - 加载空间数据
// ❌ 旧代码
this.parseProducts = await this.productSpaceService.getProjectProductSpaces(projectId);
// ✅ 新代码
const unifiedSpaces = await this.productSpaceService.getUnifiedSpaceData(projectId);
// 转换为组件格式
this.parseProducts = unifiedSpaces.map(space => ({...}));
关键改进:
用户在订单分配阶段删除空间
↓
1. 从本地列表移除空间
this.projectSpaces = this.projectSpaces.filter(s => s.id !== spaceId)
↓
2. 保存到统一存储
await productSpaceService.saveUnifiedSpaceData(projectId, spaces)
↓
3. 自动同步到三个地方:
├─ Project.data.unifiedSpaces ✅
├─ Project.data.quotation.spaces ✅
└─ Product表(删除对应记录)✅
↓
4. 其他阶段加载时:
├─ 需求确认:从unifiedSpaces读取 ✅
├─ 交付执行:从unifiedSpaces读取 ✅
└─ 设计师分配:从unifiedSpaces读取 ✅
↓
结果:所有阶段显示一致的空间数量 ✅
| 文件 | 修改内容 | 行数 |
|---|---|---|
stage-order.component.ts |
修改loadProjectSpaces()和deleteSpace() |
~100行 |
stage-requirements.component.ts |
修改loadData()中的空间加载逻辑 |
~40行 |
stage-delivery.component.ts |
修改loadProjectProducts()中的空间加载逻辑 |
~30行 |
designer-team-assignment-modal.component.ts |
修改loadRealProjectSpaces() |
~40行 |
总计修改: 4个文件,约210行代码
所有阶段都添加了详细的日志输出:
订单分配阶段:
🔄 [订单分配] 开始加载项目空间...
✅ [订单分配] 从统一存储加载到 5 个空间
✅ [订单分配] 空间加载完成,共 5 个空间
需求确认阶段:
🔄 [需求确认] 开始加载项目空间...
✅ [需求确认] 从统一存储加载到 5 个空间
✅ [需求确认] 空间加载完成,共 5 个空间
交付执行阶段:
🔄 [交付执行] 开始加载项目空间...
✅ [交付执行] 从统一存储加载到 5 个空间
✅ [交付执行] 空间加载完成,共 5 个空间
设计师分配:
🔄 [设计师分配] 开始加载项目空间...
✅ [设计师分配] 从统一存储加载到 5 个空间
✅ [设计师分配] 空间加载完成,共 5 个空间: ['客厅', '主卧', ...]
在浏览器控制台执行:
// 检查项目空间数据一致性
await productSpaceService.debugProjectSpaceData('项目ID');
// 输出示例:
// 📊 [调试] Project.data.unifiedSpaces: 5 个空间
// 📊 [调试] Project.data.quotation.spaces: 5 个空间
// 📊 [调试] Product表: 5 个空间
// ✅ [调试] 数据一致性检查通过
saveUnifiedSpaceData(projectId, spaces)Project.data.unifiedSpacesProject.data.quotation.spacesgetUnifiedSpaceData(projectId)Project.data.unifiedSpaces读取syncUnifiedSpacesToProducts(projectId, spaces)Project.data.unifiedSpaces读取Project.data.quotation.spaces字段批量修复历史数据:
// 对所有项目执行一次数据修复
await productSpaceService.forceRepairSpaceData(projectId);
监控数据一致性:
定期运行debugProjectSpaceData检查数据一致性
用户培训: 告知用户空间管理的新逻辑
修复完成时间: 2025-11-15
修复人员: AI Assistant
测试状态: ✅ 待用户验证
请刷新页面并测试以下场景: