133 lines
3.6 KiB
Markdown
133 lines
3.6 KiB
Markdown
---
|
||
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<API.PageResult<ProductItem>> {}
|
||
export async function getProductDetail(id: string): Promise<ProductItem> {}
|
||
export async function createProduct(
|
||
data: ProductFormData,
|
||
): Promise<ProductItem> {}
|
||
export async function updateProduct(
|
||
id: string,
|
||
data: Partial<ProductFormData>,
|
||
): Promise<ProductItem> {}
|
||
export async function updateProductStatus(
|
||
id: string,
|
||
status: ProductStatus,
|
||
): Promise<void> {}
|
||
export async function deleteProduct(id: string): Promise<void> {}
|
||
```
|
||
|
||
### 关键类型
|
||
|
||
```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<string, string>;
|
||
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.*`
|