furniture-3d-system-Wu/docs/upload-api-guide.md
WuYongJie 3d2014db37 feat: Phase 1 完成 - 数据库模型重构
- 更新 User 模型:添加 name、isFirstLogin、role 枚举、team 关联
- 创建 Department 模型:支持层级结构和部门负责人
- 创建 Team 模型:小组管理和组长关联
- 更新 Product 模型:添加 createdBy、collaborators、visibility、软删除
- 更新 ProductSKU 模型:添加 ownerId、transferHistory、软删除
- 创建 Feedback 模型:问题反馈系统
- 创建 ActivityLog 模型:操作日志记录
- 添加 6 种角色枚举:SUPER_ADMIN、ADMIN、DEPARTMENT_MANAGER、TEAM_LEADER、DESIGNER、VIEWER
- 添加用户状态枚举:ACTIVE、INACTIVE、SUSPENDED
- 运行数据库迁移并生成 Prisma Client
- 更新文档:TODO.md、PHASE1_COMPLETE.md
2025-12-12 21:45:58 +08:00

154 lines
3.3 KiB
Markdown
Raw 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.

# 产品上传 API 使用指南
## 概述
产品上传功能已完成,支持批量上传 3D 模型文件并自动创建产品和 SKU。
## 功能特性
✅ **已完成**:
- Apple HIG 2025 风格的上传弹窗
- 拖拽上传和点击选择文件
- 批量上传多个文件
- 实时上传进度显示
- 文件验证(格式、大小)
- 产品信息表单
- 文件上传到 MinIO
- 自动创建产品和 SKU 记录
- 上传成功后自动刷新列表
⏳ **待完成**:
- DWG 文件转换为 GLB/GLTF
- 自动生成缩略图
- 文件压缩优化
## API 端点
### 上传产品
```
POST /api/products/upload
Content-Type: multipart/form-data
```
**请求参数**:
- `modelNumber` (必填): 产品型号,如 "SF-001"
- `name` (必填): 产品名称,如 "现代简约沙发"
- `category` (可选): 产品分类
- `description` (可选): 产品描述
- `files` (必填): 3D 模型文件数组
**响应**:
```json
{
"success": true,
"product": {
"id": "...",
"modelNumber": "SF-001",
"name": "现代简约沙发",
"modelUrl": "http://localhost:9000/furniture-models/models/SF-001",
"thumbnailUrl": "/placeholder-thumbnail.png",
"skus": [
{
"id": "...",
"skuCode": "SF-001-01",
"modelUrl": "...",
...
}
]
}
}
```
### 获取产品列表
```
GET /api/products
```
**查询参数**:
- `search` (可选): 搜索关键词
- `category` (可选): 产品分类
**响应**:
```json
{
"success": true,
"products": [...]
}
```
## 使用流程
1. 用户点击"上传产品"按钮
2. 弹出上传弹窗
3. 填写产品信息(型号、名称、分类、描述)
4. 拖拽或选择 3D 模型文件
5. 显示上传进度
6. 点击"确认上传"
7. 文件上传到 MinIO
8. 创建产品和 SKU 记录
9. 自动刷新产品列表
## 文件要求
- **支持格式**: .dwg, .glb, .gltf
- **单文件大小**: 最大 100MB
- **批量上传**: 支持同时上传多个文件
- **自动 SKU**: 每个文件自动创建一个 SKU
## 环境配置
确保 `.env` 文件中配置了以下变量:
```env
# MinIO 配置
S3_ENDPOINT=http://localhost:9000
S3_REGION=us-east-1
S3_BUCKET=furniture-models
S3_ACCESS_KEY=minioadmin
S3_SECRET_KEY=minioadmin
# 数据库配置
DATABASE_URL=postgresql://postgres:postgres@localhost:5432/furniture3d
```
## 测试步骤
1. 启动开发服务器:
```bash
npm run dev
```
2. 确保 MinIO 和 PostgreSQL 正在运行
3. 访问 http://localhost:3000
4. 点击"上传产品"按钮
5. 填写产品信息并上传文件
6. 查看产品列表是否更新
## 故障排查
### 上传失败
- 检查 MinIO 是否运行:访问 http://localhost:9000
- 检查数据库连接:运行 `npm run prisma:studio`
- 查看浏览器控制台错误信息
- 查看服务器日志
### 文件格式不支持
- 当前支持 .dwg, .glb, .gltf 格式
- DWG 转换功能待实现
### 缩略图显示占位图
- 自动生成缩略图功能待实现
- 当前使用占位图 `/placeholder-thumbnail.png`
## 下一步优化
1. **DWG 转换**:集成 DWG 转 GLB/GLTF 转换服务
2. **缩略图生成**:使用 Three.js 服务端渲染生成缩略图
3. **文件压缩**:上传前自动压缩大文件
4. **进度优化**:显示真实的上传进度(当前是模拟)
5. **错误处理**:更详细的错误提示和重试机制