包含: - furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画) - autocad-plugin:AutoCAD 家具导出插件源码 - 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
346 lines
9.2 KiB
Markdown
346 lines
9.2 KiB
Markdown
# 3D 家具安装展示系统 - 功能规划文档
|
||
|
||
> **创建时间**:2026-01-29
|
||
> **文档状态**:进行中
|
||
> **参考来源**:`方案设定/` 文件夹中的视频截图(31张)
|
||
|
||
---
|
||
|
||
## 一、项目背景理解
|
||
|
||
### 1.1 项目定位
|
||
|
||
这是一个面向**家具外贸企业**的 3D 产品展示和安装指导系统,核心目标是:
|
||
|
||
1. **快速报价**:给外贸客户提供完整的产品报价信息
|
||
2. **设计确认**:当客户反馈"板子设计错了"时,能快速展示和确认
|
||
3. **安装指导**:生成安装动画,让客户确认"安装对不对"
|
||
4. **包装方案**:自动计算包装尺寸和成本
|
||
|
||
### 1.2 核心使用场景(来自字幕)
|
||
|
||
| 字幕内容 | 对应场景 |
|
||
|---------|---------|
|
||
| "这是我给我外贸客户的一个报价" | 给客户发送产品报价 |
|
||
| "客户说我的板子设计错了" | 客户反馈设计问题 |
|
||
| "我的设计师已经改完了" | 设计师修改后快速更新 |
|
||
| "我可以随时截图给客户看整个的结构" | 展示产品结构 |
|
||
| "包括直接生成安装动画" | 生成安装动画 |
|
||
| "丢给客户看安装对不对" | 客户确认安装方案 |
|
||
| "包括这个包装方案,我也可以立刻马上出来" | 快速生成包装方案 |
|
||
|
||
---
|
||
|
||
## 二、功能需求梳理
|
||
|
||
### 2.1 产品信息展示
|
||
|
||
**目标**:展示完整的产品报价信息
|
||
|
||
**需要展示的字段**:
|
||
- 货号(如 AFZWG251129A)
|
||
- 品类(如 置物柜)
|
||
- 产品板材、产品颜色
|
||
- 产品尺寸(mm)
|
||
- 预估包装尺寸
|
||
- 预估包装总量(kg)、产品净重(kg)
|
||
- 建议零售价(CNY)、供货价(CNY)
|
||
|
||
**展示形式**:
|
||
- 3D 外观尺寸图(带尺寸标注)
|
||
- 爆炸图(展示内部结构)
|
||
- 五金透视图
|
||
- 包材说明图
|
||
|
||
---
|
||
|
||
### 2.2 3D 模型展示系统
|
||
|
||
**目标**:让客户直观了解产品结构
|
||
|
||
**核心功能**:
|
||
1. **快速渲染**:"立刻马上渲染出了3D图"
|
||
2. **360度旋转查看**:"然后这样360度再转一圈"
|
||
3. **板件编号标注**:"每一块板都标了数字"
|
||
4. **爆炸图展示**:"我可以随时截图给客户看整个的结构"
|
||
5. **设计更新后快速刷新**:"我的设计师已经改完了"
|
||
|
||
**与现有项目对应**:
|
||
- 已有 `@react-three/fiber` + `@react-three/drei` 3D 渲染能力
|
||
- 已有 `Panel` 模型存储板件信息
|
||
- 需要增强:板件编号渲染、爆炸图视图切换
|
||
|
||
---
|
||
|
||
### 2.3 安装动画系统(重点功能)
|
||
|
||
**目标**:生成安装动画,让客户确认安装是否正确
|
||
|
||
**核心功能**:
|
||
1. **自动生成安装动画**:"包括直接生成安装动画"
|
||
2. **动画播放控制**:"这个安装动画生成完了之后"
|
||
3. **动画下载**:"我可以直接下载下来"、"就会提示我下载看到了吧"
|
||
- 格式:MP4
|
||
- 分辨率:720×1080 (9:16 竖屏)
|
||
- 文件大小:约 1.90MB
|
||
4. **分享给客户**:"丢给客户看安装对不对"、"让客户看安装图纸了"
|
||
|
||
**底部操作按钮**(参考截图):
|
||
- 退出安装
|
||
- 生成图纸
|
||
- 预览孔位
|
||
- 播放控制
|
||
|
||
**与现有项目对应**:
|
||
- 已有 `AssemblyStep` 模型存储装配步骤
|
||
- 已有 `animation-engine.ts` 动画引擎
|
||
- 已有 `AssemblyPlayer.tsx` 播放器组件
|
||
- 需要新增:**动画录制和导出为视频功能**
|
||
|
||
---
|
||
|
||
### 2.4 BOM 清单系统
|
||
|
||
**目标**:展示完整的物料清单
|
||
|
||
**清单内容**:
|
||
|
||
#### 2.4.1 板材清单
|
||
| 材质 | 颜色 | 厚度(mm) | 平方(m²) |
|
||
|------|------|----------|----------|
|
||
| E0刨花板 | 绿色 | 16 | 1.52 |
|
||
|
||
#### 2.4.2 小板信息
|
||
| 材质 | 颜色 | 名称 | 规格(mm) | 面积(m²) | 重量(kg) |
|
||
|------|------|------|----------|----------|----------|
|
||
| E0刨花板 | 绿色 | 底板 | 668×411×16 | 0.27 | 2.95 |
|
||
| E0刨花板 | 绿色 | 左侧板 | 636×450×16 | 0.29 | 3.08 |
|
||
| ... | ... | ... | ... | ... | ... |
|
||
|
||
#### 2.4.3 五金配件清单
|
||
| 名称 | 规格 | 五金件包编号 | 数量/包 |
|
||
|------|------|-------------|---------|
|
||
| 木棒 | Φ6*40 | LJJM50003016 | 28 |
|
||
| 滑轨/双镜座 | Φ3*12 | LS40LJ003018 | 16 |
|
||
| ... | ... | ... | ... |
|
||
|
||
#### 2.4.4 封边清单
|
||
| 颜色 | 宽度(mm) | 厚度(mm) | 长度(m) |
|
||
|------|----------|----------|---------|
|
||
| 绿色 | 18 | 1 | 15.804 |
|
||
|
||
**与现有项目对应**:
|
||
- 已有 `Panel` 模型(板件)
|
||
- 需要新增:五金配件模型、封边数据、BOM清单页面
|
||
|
||
---
|
||
|
||
### 2.5 包装方案系统
|
||
|
||
**目标**:自动计算包装方案和成本
|
||
|
||
**核心功能**:
|
||
1. **板件排版**:"他就开始进行排版"
|
||
2. **箱体尺寸计算**:"这样整体就出来了我们箱体的大小"
|
||
3. **成本计算**:
|
||
- 纸箱成本价:4.45元
|
||
- 纸箱面积:0.83 m²
|
||
- 箱体尺寸:668×450×101mm
|
||
4. **分层展示**:第3层、第6层等,显示厚度
|
||
|
||
**与现有项目对应**:
|
||
- 已有 `PackagingPlan` 模型
|
||
- 已有 `boxes` JSON 字段存储箱子详情
|
||
- 需要新增:**板件排版算法**、**成本计算功能**、**可视化展示**
|
||
|
||
---
|
||
|
||
### 2.6 产品列表管理
|
||
|
||
**目标**:管理所有产品,提供快捷操作
|
||
|
||
**列表字段**:
|
||
- 规格/包装尺寸
|
||
- 颜色
|
||
- 材质
|
||
- 设计者
|
||
- 设计日期
|
||
- 创建/更新/编辑时间
|
||
- 自动生成状态
|
||
|
||
**操作按钮**:
|
||
| 按钮 | 功能 |
|
||
|------|------|
|
||
| 编辑 | 编辑产品信息 |
|
||
| 设计完成 | 标记设计完成状态 |
|
||
| 预览 | 预览3D模型 |
|
||
| 包装箱 | 查看包装方案 |
|
||
| 生成分享链接 | 生成可分享的链接 |
|
||
| 导出XML | 导出产品数据 |
|
||
| JdDXML | 导出特定格式 |
|
||
| 包装方案 | 查看/编辑包装方案 |
|
||
| 安装方案 | 查看/编辑安装方案 |
|
||
|
||
**与现有项目对应**:
|
||
- 已有产品列表页面 `/products`
|
||
- 已有 `ShareLink` 分享功能
|
||
- 需要新增:导出XML、状态管理、更多操作按钮
|
||
|
||
---
|
||
|
||
### 2.7 分享与导出
|
||
|
||
**目标**:方便与客户沟通
|
||
|
||
**功能**:
|
||
1. 生成分享链接
|
||
2. 导出 XML 数据
|
||
3. 下载安装动画(MP4)
|
||
4. 截图分享
|
||
|
||
**与现有项目对应**:
|
||
- 已有 `ShareLink` 模型和功能
|
||
- 需要新增:XML导出、视频下载
|
||
|
||
---
|
||
|
||
## 三、技术实现说明
|
||
|
||
### 3.1 现有技术栈
|
||
|
||
| 技术 | 用途 |
|
||
|------|------|
|
||
| Next.js 16 + React 19 | 前端框架 |
|
||
| Three.js + @react-three/fiber | 3D 渲染 |
|
||
| GSAP | 动画引擎 |
|
||
| Prisma + PostgreSQL | 数据库 |
|
||
| Tailwind CSS | 样式(使用项目自己的设计系统) |
|
||
|
||
### 3.2 关键技术挑战
|
||
|
||
1. **视频录制与导出**
|
||
- 需要将 Three.js canvas 录制为视频
|
||
- 可选方案:MediaRecorder API、CCapture.js、ffmpeg.wasm
|
||
|
||
2. **板件排版算法**
|
||
- 二维装箱问题(2D Bin Packing)
|
||
- 需要考虑板件尺寸、厚度、重量限制
|
||
|
||
3. **爆炸图实现**
|
||
- 计算各板件的爆炸位置
|
||
- 平滑动画过渡
|
||
|
||
---
|
||
|
||
## 四、优先级规划
|
||
|
||
### P0 - 核心功能(优先实现)
|
||
|
||
1. **3D 模型展示增强**
|
||
- [ ] 板件编号渲染
|
||
- [ ] 爆炸图视图
|
||
- [ ] 360度旋转控制优化
|
||
|
||
2. **安装动画增强**
|
||
- [ ] 动画播放控制完善
|
||
- [ ] 动画录制为视频
|
||
- [ ] 视频下载功能
|
||
|
||
3. **BOM 清单页面**
|
||
- [ ] 板材清单展示
|
||
- [ ] 小板信息展示
|
||
- [ ] 五金配件清单
|
||
|
||
### P1 - 重要功能
|
||
|
||
4. **包装方案系统**
|
||
- [ ] 板件排版可视化
|
||
- [ ] 箱体尺寸计算
|
||
- [ ] 成本计算
|
||
|
||
5. **产品信息展示**
|
||
- [ ] 报价信息展示页面
|
||
- [ ] 多视图切换(外观图、爆炸图、五金透视图)
|
||
|
||
### P2 - 扩展功能
|
||
|
||
6. **导出功能**
|
||
- [ ] XML 导出
|
||
- [ ] 图纸生成
|
||
- [ ] 孔位预览
|
||
|
||
7. **产品列表增强**
|
||
- [ ] 更多操作按钮
|
||
- [ ] 状态管理
|
||
- [ ] 批量操作
|
||
|
||
---
|
||
|
||
## 五、UI/视觉说明
|
||
|
||
> **重要提示**:功能参考方案设定的截图,但 **UI 和视觉效果使用项目自己的设计系统**
|
||
|
||
### 5.1 现有设计系统
|
||
|
||
项目已有完整的设计系统,位于 `src/lib/design-tokens/`:
|
||
- `colors.ts` - 颜色系统
|
||
- `spacing.ts` - 间距系统
|
||
- `typography.ts` - 排版系统
|
||
- `animations.ts` - 动画系统
|
||
|
||
### 5.2 现有组件
|
||
|
||
项目已有的 UI 组件可直接复用:
|
||
- `src/components/auth/` - 认证相关
|
||
- `src/components/common/` - 通用组件(LazyImage、LazyLoadWrapper)
|
||
- `src/components/assembly/` - 装配相关(AssemblyPlayer、AssemblyStepEditor)
|
||
- `src/components/packaging/` - 包装相关(PackagingEditor)
|
||
- `src/components/panels/` - 板件相关(PanelEditor)
|
||
|
||
---
|
||
|
||
## 六、数据模型对照
|
||
|
||
### 6.1 已有模型(可直接使用)
|
||
|
||
| 模型 | 对应功能 |
|
||
|------|---------|
|
||
| Product | 产品信息 |
|
||
| ProductSKU | SKU 规格 |
|
||
| Panel | 板件信息 |
|
||
| AssemblyStep | 装配步骤 |
|
||
| PackagingPlan | 包装方案 |
|
||
| ShareLink | 分享链接 |
|
||
|
||
### 6.2 需要新增/扩展的模型
|
||
|
||
| 模型 | 用途 |
|
||
|------|------|
|
||
| Hardware | 五金配件(螺丝、滑轨等) |
|
||
| EdgeBanding | 封边条信息 |
|
||
| 扩展 Panel | 增加颜色、材质字段 |
|
||
| 扩展 Product | 增加报价相关字段 |
|
||
|
||
---
|
||
|
||
## 七、下一步行动
|
||
|
||
1. **确认优先级**:与用户确认先做哪些功能
|
||
2. **技术调研**:视频录制方案选型
|
||
3. **数据模型设计**:确定需要新增的数据库字段
|
||
4. **原型开发**:从 P0 功能开始逐步实现
|
||
|
||
---
|
||
|
||
## 八、参考资料
|
||
|
||
- 方案设定截图:`方案设定/` 目录(1.jpg - 31.jpg)
|
||
- 项目文档:`furniture-3d-system/docs/`
|
||
- 设计系统:`furniture-3d-system/src/lib/design-tokens/`
|
||
- 规划文档:`.kiro/specs/`
|
||
|
||
---
|
||
|
||
**文档版本**:v1.0
|
||
**最后更新**:2026-01-29
|