Files
PartsInquiry/doc/product_enhancement_requirements.md
2025-09-27 22:57:59 +08:00

188 lines
13 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.

# 货品功能扩展需求文档(草案)
## 1. 当前实现概览
### 1.1 用户端uni-app
- `pages/product/list.vue`:支持关键字与按类别筛选、下拉分页、查看详情并跳转编辑;展示“平台推荐/我的提交”标签。
- `pages/product/form.vue`:可创建/编辑货品,字段涵盖名称、条码、品牌、型号、规格、产地、单位、类别、安全库存、四列售价、初始库存、图片与备注;提供图片识码能力;图片上传走 `/api/attachments`
- **`pages/product/submit.vue`**:新增配件提交入口,支持型号唯一校验、多图上传、参数 JSON、备注、安全库存等字段提交成功跳转“我的提交”。
- **`pages/product/submissions.vue``pages/product/submission-detail.vue`**:新增提交列表与详情页,支持状态筛选、滚动分页、驳回重新提交、图片/参数展示。
- 字典:调用 `/api/product-units``/api/product-categories` 读取全局单位/类别,并缓存到本地。
### 1.2 管理端Vue3 + Element Plus
- **`admin/src/views/parts/Submissions.vue`**:已上线配件审核模块,提供筛选、详情、编辑、通过/驳回、Excel 导出能力。
- 其它模块VIP 系统、公告管理、咨询回复、用户管理、配件管理、供应商管理、主数据字典。
- 待迭代:登录页、角色权限细分、操作日志可视化。
### 1.3 后端Spring Boot
- `ProductSubmissionController` + `ProductSubmissionService`:完成用户提交、用户查看、管理员审核/驳回、导出全链路;审批通过时同步 `products``product_images``source_submission_id` 等字段。
- OpenAPI 已新增 `/api/products/submissions*``/api/admin/parts/submissions*` 路径,并标记为 ✅ Fully Implemented。
- 数据模型:`products``product_prices``inventories``product_images` 已投产;`part_submissions` 已扩展 JSON、状态、审核信息等字段。
- 图片存储:统一走 `attachments`,提交与商品共享资源。
## 2. 差距分析
| 需求点 | 现状 | 差距 |
| --- | --- | --- |
| 用户提交配件待审核 | 用户端新增提交/列表/详情页面,与后台接口打通 | 持续跟踪型号唯一范围(店铺或全局);补充并发校验测试 |
| 审核管理 | 管理端已上线审核列表、详情编辑、通过/驳回、导出 | 后续可扩展批量操作、导出更大数据量的异步方案 |
| 数据查询增强 | 后端支持多条件、返回 total前端列表分页同步 | 可继续优化查询性能(索引/缓存)与前端展示字段 |
| 图片管理 | 提交端与审核端均支持多图显示、预览、排序 | 可根据需求补充图片备注、AI 识别等增强能力 |
| 上架逻辑 | 审核通过自动写入 `products` 并关联 `source_submission_id``global_sku_id` | 待确认产品图片、参数同步策略是否满足后续拓展(如平台库) |
| 导出 | 管理端支持按筛选条件导出 Excel2000 条以内同步导出) | 后续可评估异步导出/下载中心、导出模板自定义 |
## 3. 设计方案
> 项目采用方案 A基于 `part_submissions` + `products` 双轨流程),方案 B 已放弃,不再纳入考虑。
### 方案 A基于现有 `part_submissions` + `products` 双轨流程(已确认)
1. **用户提交**
- 新增用户端页面 `pages/product/submit.vue`字段型号model唯一必填、配件名称name、配件参数parameters自由文本/JSON 字段)、图片(多图,最多 9 张)、备注。
- 调用 `POST /api/products/submissions`,写入 `part_submissions``shop_id``user_id``model_unique``status=pending``images JSON``extra_attrs``created_at`
- 验证规则:
- `model_unique` 同一店铺 + 全局唯一(需确认范围)。
- 图片通过 `attachments` 保存,限制尺寸/数量。
- 上传成功后展示提交状态(待审核)。
2. **管理员审核**
- 新增管理端视图 `admin/src/views/parts/Submissions.vue`
- 列表字段:型号、名称、提交人、提交时间、当前状态、备注、图片缩略图。
- 过滤项:状态(待审/已审/驳回)、关键字(支持型号/名称/提交人)、提交时间区间、店铺。
- 操作:
- 查看详情(弹窗):可编辑名称、型号、参数、图片(增删排序)、备注。
- 审核按钮:批准/驳回,必须填写备注(驳回)。
- 批量导出:选中或按筛选条件导出 Excel。
- 审核通过逻辑:
- 检测是否存在相同型号产品:
- 若没有:创建 `products`source_submission_id 引用)、初始化库存 0、价格默认 0关联图片。
- 若已有:补充图片、参数(可覆盖或合并),并记录 submission→product 对应关系。
- 更新 `part_submissions.status=approved``reviewer_id``reviewed_at``product_id`
- 将产品显示给提交用户(若产品属于平台库,可关联 `global_sku_id`)。
- 审核驳回:状态=reject记录 `remark``reviewer_id``reviewed_at`
3. **数据查询**
- `GET /api/products` 增强:支持 `brand``model``status`(是否审核通过)、`createdStart/End` 等参数;返回 `{ list, total }`
- `GET /api/admin/parts/submissions` 支持分页+多条件,默认按创建时间倒序。
- Excel 导出:`GET /api/admin/parts/submissions/export`,返回文件下载,支持当前过滤条件。
4. **图片管理**
- 提交阶段:图片存储 `attachments`ownerType=submission路径按 hash 去重。
- 审核详情弹窗内使用 `el-image` + preview 功能查看大图;允许删除/新增(调用 `/api/attachments` 上传)。
- 审核通过时同步图片至 `product_images`(可重用 attachment URL无需复制物理文件根据排序保存 `sort_order`
5. **上架逻辑**
- 平台维护 `global_skus`(可选):
- 审核通过界面提供“关联平台配件”下拉,或创建新平台配件,同时写入 `global_skus`
- `products.global_sku_id` 记录来源,供其他店铺引用。
- 用户提交的产品通过审核后自动加入其店铺的 `products`,并可在商品列表中展示“平台推荐/自有”区分。
### 4.1 数据模型变更细节
#### part_submissions新增/调整)
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `name` | VARCHAR(120) | 配件名称(用户填写,可用于审核) |
| `parameters` | JSON | 结构化参数,如规格、尺寸、材质等 |
| `images` | JSON | 图片 URL 列表,提交阶段存储 |
| `status` | ENUM('pending','approved','rejected') | 当前审核状态 |
| `remark` | VARCHAR(255) | 审核备注(驳回原因等) |
| `reviewer_id` | BIGINT | 审核人 ID |
| `reviewed_at` | DATETIME | 审核时间 |
| `product_id` | BIGINT | 审核通过后关联的产品 ID |
| `global_sku_id` | BIGINT | 可选,关联平台配件 ID |
| `source_shop_id` | BIGINT | 原提交店铺(若与 shop_id 区分需求明确可保留) |
> 若原表已有旧字段(如 `compatible`、`size` 等),可迁移到 `parameters` JSON 中或保留以兼容老数据。
#### products新增字段
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| `source_submission_id` | BIGINT | 来源提交记录 ID |
| `global_sku_id` | BIGINT | 平台配件 ID可选 |
| `platform_status` | ENUM('platform','custom') | 产品来源标识(可选) |
需要为 `model_unique``shop_id` 添加唯一索引,保障型号不可重复提交(规则确定后实施)。
### 4.2 接口契约摘要
| 接口 | 方法 | 说明 | 核心入参 | 返回 |
| --- | --- | --- | --- | --- |
| `/api/products/submissions` | POST | 用户提交配件 | `{ name, model, parameters?, images[], remark? }` | `{ id, status }` |
| `/api/products/submissions` | GET | 用户查看提交记录 | `status?, page, size` | `{ list, total }` |
| `/api/admin/parts/submissions` | GET | 管理端列表 | `status?, kw?, shopId?, reviewerId?, startAt?, endAt?, page, size` | `{ list, total }` |
| `/api/admin/parts/submissions/{id}` | GET | 查看详情 | - | 详细信息(含图片) |
| `/api/admin/parts/submissions/{id}` | PUT | 编辑字段(名称/参数/图片) | `{ name?, parameters?, images?, remark? }` | `{ ok: true }` |
| `/api/admin/parts/submissions/{id}/approve` | POST | 审核通过 | `{ remark?, assignGlobalSkuId?, createGlobalSku? }` | `{ ok: true, productId }` |
| `/api/admin/parts/submissions/{id}/reject` | POST | 审核驳回 | `{ remark }` | `{ ok: true }` |
| `/api/admin/parts/submissions/export` | GET | Excel 导出 | 同列表查询参数 | 二进制文件 |
| `/api/products` | GET | 增强查询 | `kw, brand, model, status, categoryId, startAt, endAt, page, size` | `{ list, total }` |
OpenAPI 需同步更新:新增路径、请求体/响应体、状态标注。
### 4.3 前端/后端任务拆分
**后端**
1. 数据库迁移脚本(新增字段、索引、默认值)。
2. 提交接口实现:存储提交记录、处理图片、型号唯一校验。
3. 审核接口实现:
- 获取详情、编辑提交记录。
- 批准流程(创建/更新产品、同步图片、记录审计)。
- 驳回流程。
4. 列表查询与导出(注意权限:仅管理员)。
5. 产品查询增强(支持多条件和 total
6. 单元测试/集成测试:审核通过/驳回、重复型号、导出大数据量。
**管理端前端**
1. 新建 `Submissions.vue` 页面:
- 列表 + 搜索表单 + 分页。
- Excel 导出按钮。
2. 审核详情弹窗组件:
- 多图预览/排序Element Plus `el-image` + `el-upload` 或复用现有 `ImageUploader` 组件)。
- 字段编辑与保存。
- 审核通过/驳回按钮及确认弹窗。
3. 上架结果联动:审批通过后刷新列表,提示成功。
**用户端前端**
1. 新增 `pages/product/submit.vue`
- 表单输入 + 多图上传 + 校验(型号唯一、本地格式校验)。
- 提交成功提示与跳转。
2. 新增“我的提交”页面或在现有列表中添加状态指示。
3. 货品列表/详情展示新字段(如“平台配件”标签、审核状态)。
## 5. 开发计划建议
1. **第一阶段:后端改造**
- 数据库变更(通过 MysqlMCP更新 `part_submissions``products``global_skus` 相关字段与索引。
- 新增接口实现(提交、审核、导出、多条件查询)。
- 扩展 `ProductService` 支持 total、更多筛选。
- 调整 OpenAPI标注实现状态。
2. **第二阶段:管理端前端**
- 新建审核模块页面,集成组合查询 + 分页 + 导出。
- 审核详情对话框支持多图预览/编辑、字段修改、审核按钮。
3. **第三阶段:用户端前端**
- 新增“提交配件”入口(从货品列表或我的模块进入)。
- 提交表单 + 多图上传(复用 ImageUploader
- 提交记录列表(待审/已通过/驳回)与状态提示。
- 审核通过后自动同步到货品列表(带标签)。
4. **第四阶段:测试与文档**
- 定义审批流程测试用例:提交->审批->列表刷新->导出。
- 验证图片上传、重复型号、并发审批场景。
- 更新需求文档、开发文档、用户操作指引。
## 6. 验收标准
- 用户端可提交配件:型号唯一校验、上传多图成功、提交后状态为“待审核”。
- 管理端待审核列表能根据筛选条件展示结果,并支持详情查看(含大图预览、编辑字段)。
- 管理端可对单条记录审核通过/驳回:
- 通过:在 `products` 中生成或更新商品;提交用户在商品列表中可见;状态变更为“已通过”。
- 驳回:状态变更为“已驳回”,记录审核备注。
- 导出功能可按筛选条件导出 Excel至少包含 2000 条数据测试无超时;生成文件名避免冲突(时间戳+操作人)。
- 数据查询支持组合条件,返回总数;前后端分页一致。
- 图片管理:审核详情中可预览大图、删除、重新上传;重复文件自动识别 hash避免冲突。
- 上线后数据库结构、OpenAPI、开发文档同步更新无遗漏。
## 7. 风险与注意事项
- 型号唯一性需统一标准化(去空格、大小写)并考虑跨店铺冲突策略。
- 审核通过时同步到 `products`,需明确库存与价格的初始值(建议默认 0提醒用户自行编辑
- Excel 导出需加限流或异步处理,防止长时间请求阻塞。
- 图片引用避免重复占用存储;可直接引用同一 URL而非复制文件。
- 若需消息通知(如审核结束提醒),需要后续补充通知机制。
- 需要回顾 `global_skus``products` 的关系,明确平台配件库与用户私有货品的边界,以免数据混乱。
---
> 本文档结合现状与新增需求整理。请确认方案后,可进一步拆解任务并排期执行。