furniture-3d-system-Wu/项目功能规划.md
WuYongJie 5821d73291 初始提交:3D家具安装展示系统
包含:
- furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画)
- autocad-plugin:AutoCAD 家具导出插件源码
- 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 14:00:19 +08:00

346 lines
9.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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