问题:点击"生成报价"按钮后,系统自动生成9个默认空间(客厅、餐厅、主卧、次卧、儿童房、书房、厨房、卫生间、阳台)
解决方案:修改预设场景列表,只保留1-2个初始空间
quotation-editor.component.ts修改前(❌ 错误):
presetScenes: { [key: string]: string[] } = {
'家装': ['客厅', '餐厅', '主卧', '次卧', '儿童房', '书房', '厨房', '卫生间', '阳台'], // 9个空间
'工装': ['大堂', '接待区', '会议室', '办公区', '休息区', '展示区', '洽谈区'], // 7个空间
'建筑类': ['门头', '小型单体', '大型单体', '鸟瞰'] // 4个空间
};
修改后(✅ 正确):
// 预设场景列表(修改为只包含1-2个默认空间,避免一次性生成9个空间)
// 用户可以通过"添加空间"按钮手动添加更多空间
presetScenes: { [key: string]: string[] } = {
'家装': ['客厅', '主卧'], // ✅ 只创建2个初始空间(客厅+主卧)
'工装': ['主要空间'], // ✅ 只创建1个初始空间
'建筑类': ['鸟瞰'] // ✅ 只创建1个初始空间
};
修改前:
/**
* 创建默认产品
*/
private async createDefaultProducts(): Promise<void> {
if (!this.project || !this.projectInfo.projectType) return;
try {
const defaultRooms = this.getDefaultRoomsForProjectType();
for (const roomName of defaultRooms) {
await this.createProduct(roomName);
}
await this.loadProjectProducts();
} catch (error) {
console.error('创建默认产品失败:', error);
}
}
修改后:
/**
* 创建默认产品(已优化:只创建1-2个初始空间)
*
* 修复说明:
* - 家装项目:只创建2个空间(客厅+主卧)
* - 工装项目:只创建1个空间(主要空间)
* - 建筑类项目:只创建1个空间(鸟瞰)
* - 用户可以通过"添加空间"按钮手动添加更多空间
*/
private async createDefaultProducts(): Promise<void> {
if (!this.project || !this.projectInfo.projectType) return;
try {
const defaultRooms = this.getDefaultRoomsForProjectType();
console.log(`🏠 [报价编辑器] 创建默认空间,项目类型: ${this.projectInfo.projectType},空间数量: ${defaultRooms.length}`);
console.log(`📋 [报价编辑器] 默认空间列表:`, defaultRooms);
for (const roomName of defaultRooms) {
await this.createProduct(roomName);
console.log(` ✅ 已创建空间: ${roomName}`);
}
await this.loadProjectProducts();
console.log(`✅ [报价编辑器] 默认空间创建完成,共 ${defaultRooms.length} 个空间`);
} catch (error) {
console.error('❌ [报价编辑器] 创建默认产品失败:', error);
}
}
| 项目类型 | 默认生成空间数量 | 空间列表 |
|---|---|---|
| 家装 | 9个 | 客厅、餐厅、主卧、次卧、儿童房、书房、厨房、卫生间、阳台 |
| 工装 | 7个 | 大堂、接待区、会议室、办公区、休息区、展示区、洽谈区 |
| 建筑类 | 4个 | 门头、小型单体、大型单体、鸟瞰 |
问题:
| 项目类型 | 默认生成空间数量 | 空间列表 |
|---|---|---|
| 家装 | 2个 | 客厅、主卧 |
| 工装 | 1个 | 主要空间 |
| 建筑类 | 1个 | 鸟瞰 |
优点:
npm start
访问订单分配阶段页面。
场景A:从订单分配阶段自动初始化
打开浏览器控制台,查看日志:
🔄 [订单分配] 开始加载项目空间...
🏠 [初始空间] 为项目 abc123 创建初始空间,类型: 家装
✅ [初始空间] 已创建 2 个初始空间 ← ✅ 正确!
✅ [订单分配] 空间加载完成,共 2 个空间
预期结果:
场景B:点击"生成报价"按钮
如果Product表为空(例如直接进入报价编辑器),点击"生成报价":
🔍 [报价编辑器] Product表查询结果: 0 条记录
🏠 [报价编辑器] 创建默认空间,项目类型: 家装,空间数量: 2 ← ✅ 正确!
📋 [报价编辑器] 默认空间列表: ['客厅', '主卧']
✅ 已创建空间: 客厅
✅ 已创建空间: 主卧
✅ [报价编辑器] 默认空间创建完成,共 2 个空间
🔍 [报价编辑器] Product表查询结果: 2 条记录 ← ✅ 正确!
✅ 报价空间生成完成: 2 个唯一空间 (原始产品: 2 个)
预期结果:
在报价编辑器中,应该看到:
┌─────────────────────────────────────┐
│ 报价明细 │
├─────────────────────────────────────┤
│ 📦 客厅 │
│ 建模阶段: ¥30 (10%) │
│ 软装渲染: ¥120 (40%) │
│ 公司分配: ¥150 (50%) │
│ 小计: ¥300 │
├─────────────────────────────────────┤
│ 📦 主卧 │
│ 建模阶段: ¥30 (10%) │
│ 软装渲染: ¥120 (40%) │
│ 公司分配: ¥150 (50%) │
│ 小计: ¥300 │
├─────────────────────────────────────┤
│ 总计: ¥600 │
└─────────────────────────────────────┘
预期结果:
点击"添加空间"按钮,应该能够:
预期结果:
默认空间数量: 1预期结果:
默认空间数量: 1🏠 [报价编辑器] 创建默认空间,项目类型: 家装,空间数量: 9
📋 [报价编辑器] 默认空间列表: ['客厅', '餐厅', '主卧', '次卧', '儿童房', '书房', '厨房', '卫生间', '阳台']
✅ 已创建空间: 客厅
✅ 已创建空间: 餐厅
✅ 已创建空间: 主卧
✅ 已创建空间: 次卧
✅ 已创建空间: 儿童房
✅ 已创建空间: 书房
✅ 已创建空间: 厨房
✅ 已创建空间: 卫生间
✅ 已创建空间: 阳台
✅ [报价编辑器] 默认空间创建完成,共 9 个空间 ← ❌ 太多了!
🔍 [报价编辑器] Product表查询结果: 9 条记录
🏠 [报价编辑器] 创建默认空间,项目类型: 家装,空间数量: 2
📋 [报价编辑器] 默认空间列表: ['客厅', '主卧']
✅ 已创建空间: 客厅
✅ 已创建空间: 主卧
✅ [报价编辑器] 默认空间创建完成,共 2 个空间 ← ✅ 完美!
🔍 [报价编辑器] Product表查询结果: 2 条记录
在Parse Server Dashboard中,检查Product表:
修复前 ❌:
SELECT * FROM Product WHERE project = 'project_id';
-- 结果:9条记录(客厅、餐厅、主卧、次卧、儿童房、书房、厨房、卫生间、阳台)
修复后 ✅:
SELECT * FROM Product WHERE project = 'project_id';
-- 结果:2条记录(客厅、主卧)
在Parse Server Dashboard中,检查Project表的data字段:
修复前 ❌:
{
"quotation": {
"spaces": [
{"name": "客厅", "spaceId": "...", "subtotal": 300},
{"name": "餐厅", "spaceId": "...", "subtotal": 300},
{"name": "主卧", "spaceId": "...", "subtotal": 300},
{"name": "次卧", "spaceId": "...", "subtotal": 300},
{"name": "儿童房", "spaceId": "...", "subtotal": 300},
{"name": "书房", "spaceId": "...", "subtotal": 300},
{"name": "厨房", "spaceId": "...", "subtotal": 300},
{"name": "卫生间", "spaceId": "...", "subtotal": 300},
{"name": "阳台", "spaceId": "...", "subtotal": 300}
],
"total": 2700
}
}
修复后 ✅:
{
"quotation": {
"spaces": [
{"name": "客厅", "spaceId": "...", "subtotal": 300},
{"name": "主卧", "spaceId": "...", "subtotal": 300}
],
"total": 600
}
}
可能原因:
解决方案:
npm startCtrl+Shift+R (Windows) 或 Cmd+Shift+R (Mac)可能原因:
解决方案:
可能原因:
解决方案:
查询新项目的Product记录:
SELECT * FROM Product WHERE project = '新项目ID';
建议在报价编辑器中添加友好的UI提示:
<!-- 当空间列表为空或很少时显示 -->
<div class="empty-state" *ngIf="products.length < 3">
<ion-icon name="home-outline"></ion-icon>
<p>当前有 {{products.length}} 个空间</p>
<p class="hint">您可以点击下方"添加空间"按钮添加更多空间</p>
<button (click)="openAddProductModal()">
<ion-icon name="add-circle-outline"></ion-icon>
添加空间
</button>
</div>
| 项目 | 修复前 | 修复后 |
|---|---|---|
| 家装项目 | 9个空间 | 2个空间(客厅+主卧) |
| 工装项目 | 7个空间 | 1个空间(主要空间) |
| 建筑类项目 | 4个空间 | 1个空间(鸟瞰) |
ORDER_QUOTATION_SPACE_ANALYSIS.mdORDER_QUOTATION_SPACE_FIX_VERIFICATION.md(本文档)