--- name: product-management description: 商品管理模块的业务规则、数据模型、状态机与 UI 交互规范。当涉及商品相关功能开发时必须参考此 Skill。 --- # 商品管理 (Product Management) 业务 Skill ## 适用范围 当任务涉及以下场景时,必须加载并遵循此 Skill: - 商品列表、商品详情、商品创建/编辑 - SKU 管理、库存管理、价格体系 - 商品分类与属性管理 ## 业务规则 ### 1. 商品状态机 ``` 草稿 (draft) → 待审核 (pending_review) → 已上架 (online) → 已下架 (offline) ↓ ↑ 驳回 (rejected) ────────────────────────────→ ┘ ``` **关键约束**: - 草稿状态可直接删除 - 已上架商品必须先下架才能编辑核心字段(名称、价格、SKU) - 已上架商品的**非核心字段**(描述、图片)允许直接编辑 - 删除操作仅限于「草稿」和「已下架」状态 ### 2. 价格体系 - `originalPrice`: 原价(必填,> 0) - `salePrice`: 售价(必填,> 0,且 ≤ 原价) - `costPrice`: 成本价(选填,仅管理员可见) - 价格精度: 统一保留 **2 位小数**,使用 `number` 类型,前端展示时通过 `valueType: 'money'` 格式化 ### 3. 库存规则 - 库存低于 `safetyStock`(安全库存)时在列表显示 ⚠️ 警告标识 - 库存为 0 时自动标记为「缺货」状态(不影响上下架状态) - 库存变更必须记录变更日志(调拨、入库、出库、盘点) ## 数据模型 ### 核心接口 ```typescript // src/services/product.ts export async function getProductList( params: ProductQueryParams, ): Promise> {} export async function getProductDetail(id: string): Promise {} export async function createProduct( data: ProductFormData, ): Promise {} export async function updateProduct( id: string, data: Partial, ): Promise {} export async function updateProductStatus( id: string, status: ProductStatus, ): Promise {} export async function deleteProduct(id: string): Promise {} ``` ### 关键类型 ```typescript // src/pages/ProductList/data.d.ts type ProductStatus = | 'draft' | 'pending_review' | 'online' | 'offline' | 'rejected'; interface ProductItem { id: string; name: string; categoryId: string; categoryName: string; originalPrice: number; salePrice: number; costPrice?: number; stock: number; safetyStock: number; status: ProductStatus; images: string[]; description: string; attributes: Record; createdAt: string; updatedAt: string; } ``` ## UI 交互规范 ### 1. 商品列表页 - **组件**: `ProTable` - **必须包含列**: 商品名称、分类、售价、库存、状态、操作 - **状态筛选**: 使用 `valueEnum` 映射状态标签颜色 - draft → 灰色 - pending_review → 橙色 - online → 绿色 - offline → 默认 - rejected → 红色 - **批量操作**: 支持批量上架/下架 ### 2. 商品编辑 - **组件**: `ProForm` + `StepsForm`(分步表单) - **步骤**: 基本信息 → SKU/价格 → 图片/描述 → 确认提交 - **价格输入**: 使用 `ProFormMoney` 或 `ProFormDigit` 并配置 `precision={2}` ### 3. 库存警告 - 库存 < 安全库存: 单元格显示橙色 + ⚠️ - 库存 = 0: 单元格显示红色 + "缺货" 标签 ## i18n Key 规范 菜单和页面文案 Key 前缀: - 菜单: `menu.product.*` - 页面: `pages.product.*` - 表单: `product.form.*` - 状态: `product.status.*`