@me-framework/me-sku-editor 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.en.md +36 -0
- package/README.md +230 -0
- package/dist/demo/assets/iconfont.1782658269305-Bwz3sFC-.ttf +0 -0
- package/dist/demo/assets/iconfont.1782658269305-CiRZOtYp.woff +0 -0
- package/dist/demo/assets/iconfont.1782890314097-BllfKX1O.ttf +0 -0
- package/dist/demo/assets/iconfont.1782890314097-D9epzWxu.woff +0 -0
- package/dist/demo/assets/index-CLHSZeXE.css +1 -0
- package/dist/demo/assets/index-T0Giuvdt.js +157 -0
- package/dist/demo/favicon.svg +1 -0
- package/dist/demo/icons.svg +24 -0
- package/dist/demo/index.html +14 -0
- package/dist/lib/favicon.svg +1 -0
- package/dist/lib/icons.svg +24 -0
- package/dist/lib/me-sku-editor.css +2 -0
- package/dist/lib/me-sku-editor.mjs +22601 -0
- package/dist/lib/me-sku-editor.umd.js +104 -0
- package/document/prompt/sku-editor.md +268 -0
- package/document//344/275/277/347/224/250/346/226/207/346/241/243.md +1028 -0
- package/document//345/274/200/345/217/221/346/214/207/345/215/227.md +637 -0
- package/document//345/277/253/351/200/237/345/274/200/345/247/213.md +292 -0
- package/package.json +76 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
# SKU 编辑器开发提示词
|
|
2
|
+
|
|
3
|
+
## 项目概述
|
|
4
|
+
|
|
5
|
+
这是一个功能强大的 Vue 3 商品规格 SKU 编辑器,用于电商平台管理商品规格和库存。
|
|
6
|
+
|
|
7
|
+
## 技术栈
|
|
8
|
+
|
|
9
|
+
- Vue 3 + TypeScript (Composition API, `<script setup>`)
|
|
10
|
+
- Element Plus UI 组件库
|
|
11
|
+
- VXE Table v4 (表格组件)
|
|
12
|
+
- XLSX (Excel 导入导出)
|
|
13
|
+
- Sortable.js (拖拽排序)
|
|
14
|
+
|
|
15
|
+
## 核心功能
|
|
16
|
+
|
|
17
|
+
### 1. 规格管理 (Spec Management)
|
|
18
|
+
- **规格类型**: 支持文字(text)、颜色(color)、图片(image)三种类型
|
|
19
|
+
- **规格操作**: 新增、编辑、删除规格
|
|
20
|
+
- **属性操作**: 每个规格下可添加多个属性值
|
|
21
|
+
- **拖拽排序**: 规格和属性都支持拖拽调整顺序
|
|
22
|
+
- **命名校验**: 规格名不能与系统保留字段重名,规格名不能重复
|
|
23
|
+
- **命名规范**: 规格名和属性名保存时自动 trim 去除前后空格
|
|
24
|
+
- **属性验证**: 属性名不能为空,同一规格下属性名不能重复
|
|
25
|
+
- **折叠展开**: 规格列表支持折叠/展开,方便管理多个规格
|
|
26
|
+
- **快捷操作**:
|
|
27
|
+
- 颜色类型属性可在列表中直接通过颜色选择器修改
|
|
28
|
+
- 点击属性标签快速打开编辑对话框
|
|
29
|
+
- 点击标签关闭图标删除属性(带确认)
|
|
30
|
+
|
|
31
|
+
保留字段列表:
|
|
32
|
+
```typescript
|
|
33
|
+
const RESERVED_NAMES = ['SKU编号', '销售价', '市场价', '成本价', '重量', '体积', '条形码', '状态', '步长', '起购数', '限购数']
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### 2. SKU 表格 (SkuGrid)
|
|
37
|
+
- **自动生成**: 根据规格组合自动生成 SKU 笛卡尔积
|
|
38
|
+
- **单元格合并**: 相同规格值的单元格自动合并显示
|
|
39
|
+
- **列可见性**: 用户可自定义显示/隐藏表格列
|
|
40
|
+
- **数据保留**: 修改规格时保留已编辑的 SKU 数据
|
|
41
|
+
|
|
42
|
+
### 3. 批量编辑 (Batch Edit)
|
|
43
|
+
支持批量设置以下字段:
|
|
44
|
+
- 销售价、市场价、成本价
|
|
45
|
+
- 重量、体积
|
|
46
|
+
- 状态
|
|
47
|
+
- 步长、起购数、限购数
|
|
48
|
+
|
|
49
|
+
### 4. 导入导出 (Import/Export)
|
|
50
|
+
- **导出**: Excel 格式、JSON 格式
|
|
51
|
+
- **导入**: Excel 格式、JSON 格式
|
|
52
|
+
- **拖拽导入**: 支持拖拽文件到区域导入
|
|
53
|
+
|
|
54
|
+
### 5. 数据输出
|
|
55
|
+
- 控制台格式化输出规格和 SKU 数据
|
|
56
|
+
- 支持数据库格式的 SKU 数据导出
|
|
57
|
+
|
|
58
|
+
## 数据结构
|
|
59
|
+
|
|
60
|
+
### 规格类型 (SpecType)
|
|
61
|
+
```typescript
|
|
62
|
+
type SpecType = 'text' | 'color' | 'image'
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### 规格属性 (SpecAttribute)
|
|
66
|
+
```typescript
|
|
67
|
+
interface SpecAttribute {
|
|
68
|
+
id: string
|
|
69
|
+
name: string
|
|
70
|
+
value: AttributeValue | string // 可以是对象或字符串
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### 属性类型详解
|
|
75
|
+
|
|
76
|
+
属性的 `value` 格式取决于所属规格的 `type`:
|
|
77
|
+
|
|
78
|
+
#### 1. 文字类型 (text)
|
|
79
|
+
- **值格式**: 可以是纯字符串,也可以是任意 JSON 对象
|
|
80
|
+
- **UI 展示**: 仅显示属性名称标签
|
|
81
|
+
- **编辑方式**: 文本域输入,支持多行 JSON
|
|
82
|
+
- **示例**:
|
|
83
|
+
```typescript
|
|
84
|
+
// 简单字符串
|
|
85
|
+
{ name: "S", value: "small" }
|
|
86
|
+
// JSON 对象
|
|
87
|
+
{
|
|
88
|
+
name: "S",
|
|
89
|
+
value: {
|
|
90
|
+
size: "small",
|
|
91
|
+
width: 40,
|
|
92
|
+
height: 60,
|
|
93
|
+
weight: 200,
|
|
94
|
+
measurements: { chest: 90, length: 65 }
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
#### 2. 颜色类型 (color)
|
|
100
|
+
- **值格式**: 对象格式 `{ code: string }`
|
|
101
|
+
- **UI 展示**: 颜色选择器 + 属性名称标签
|
|
102
|
+
- **编辑方式**: Element Plus 颜色选择器
|
|
103
|
+
- **示例**:
|
|
104
|
+
```typescript
|
|
105
|
+
{ name: "红色", value: { code: "#ff0000" } }
|
|
106
|
+
{ name: "蓝色", value: { code: "#0000ff", rgb: "rgb(0, 0, 255)" } }
|
|
107
|
+
```
|
|
108
|
+
- **解析逻辑**: 支持多种格式解析
|
|
109
|
+
- 对象: `value.code` 或 `value.color`
|
|
110
|
+
- JSON 字符串: 尝试解析后取 `code` 或 `color`
|
|
111
|
+
- 纯字符串: 直接作为颜色值
|
|
112
|
+
- 默认值: `#ccc`
|
|
113
|
+
|
|
114
|
+
#### 3. 图片类型 (image)
|
|
115
|
+
- **值格式**: 对象格式 `{ url: string }`
|
|
116
|
+
- **UI 展示**: 28x28px 缩略图 + 属性名称标签,点击可预览大图
|
|
117
|
+
- **编辑方式**: 图片上传组件,支持预览和删除
|
|
118
|
+
- **存储格式**: base64 编码的 data URL
|
|
119
|
+
- **示例**:
|
|
120
|
+
```typescript
|
|
121
|
+
{ name: "红色款", value: { url: "data:image/jpeg;base64,/9j/4AAQSkZJRg..." } }
|
|
122
|
+
```
|
|
123
|
+
- **解析逻辑**:
|
|
124
|
+
- 对象: `value.url` 或 `value.image`
|
|
125
|
+
- JSON 字符串: 尝试解析后取 `url` 或 `image`
|
|
126
|
+
- 纯字符串: 直接作为图片 URL
|
|
127
|
+
|
|
128
|
+
### 属性验证规则
|
|
129
|
+
- **属性名不能为空**: 必填验证
|
|
130
|
+
- **属性名 Trim 处理**: 保存时自动去除前后空格,验证和重名检查都基于 trim 后的值
|
|
131
|
+
- **属性名不能重复**: 同一规格下的属性名必须唯一(基于 trim 后的值比较)
|
|
132
|
+
- **删除确认**: 删除属性前弹出确认对话框
|
|
133
|
+
|
|
134
|
+
### 属性交互功能
|
|
135
|
+
- **快速编辑颜色**: 在规格列表中可直接使用颜色选择器修改颜色属性,无需打开对话框
|
|
136
|
+
- **标签点击编辑**: 点击属性标签打开编辑对话框
|
|
137
|
+
- **拖拽排序**: 属性可拖拽调整顺序,影响 SKU 生成顺序
|
|
138
|
+
- **折叠/展开**: 规格支持折叠,隐藏属性列表
|
|
139
|
+
|
|
140
|
+
### 规格 (Spec)
|
|
141
|
+
```typescript
|
|
142
|
+
interface Spec {
|
|
143
|
+
id: string
|
|
144
|
+
name: string
|
|
145
|
+
type: SpecType
|
|
146
|
+
attributes: SpecAttribute[]
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### SKU 行数据 (SkuRow)
|
|
151
|
+
```typescript
|
|
152
|
+
interface SkuRow {
|
|
153
|
+
id: string
|
|
154
|
+
specs: { [key: string]: string } // { specId: attrId }
|
|
155
|
+
skuNo: string
|
|
156
|
+
skuName: string
|
|
157
|
+
image?: string
|
|
158
|
+
salePrice: number
|
|
159
|
+
marketPrice?: number
|
|
160
|
+
costPrice?: number
|
|
161
|
+
weight?: number
|
|
162
|
+
volume?: number
|
|
163
|
+
barcode?: string
|
|
164
|
+
status: number
|
|
165
|
+
sort: number
|
|
166
|
+
step: number
|
|
167
|
+
minBuyLimit: number
|
|
168
|
+
maxBuyLimit: number
|
|
169
|
+
}
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## 组件架构
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
SkuEditor (主组件)
|
|
176
|
+
├── SpecSection (规格管理区域)
|
|
177
|
+
├── SkuGrid (SKU 表格)
|
|
178
|
+
├── SpecDialog (规格编辑对话框)
|
|
179
|
+
├── AttrDialog (属性编辑对话框)
|
|
180
|
+
└── BatchEditDialog (批量编辑对话框)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Composables
|
|
184
|
+
|
|
185
|
+
| Composable | 功能 |
|
|
186
|
+
|-----------|------|
|
|
187
|
+
| useSkuGenerator | SKU 数据生成、笛卡尔积计算 |
|
|
188
|
+
| useColumnVisibility | 列可见性管理 |
|
|
189
|
+
| useSortable | 拖拽排序功能 |
|
|
190
|
+
| useImportExport | 导入导出功能 |
|
|
191
|
+
| useMergeCells | 表格单元格合并 |
|
|
192
|
+
|
|
193
|
+
## 关键实现要点
|
|
194
|
+
|
|
195
|
+
### 1. SKU 生成逻辑
|
|
196
|
+
- 使用笛卡尔积生成所有规格组合
|
|
197
|
+
- 修改规格时,通过 `specs` 和 `attrIds` 匹配保留已有数据
|
|
198
|
+
- 示例: 颜色(红/蓝) + 尺寸(S/M/L) = 6 个 SKU
|
|
199
|
+
|
|
200
|
+
### 2. 单元格合并
|
|
201
|
+
- 使用 VXE Table 的 `span-method` 实现
|
|
202
|
+
- 相同规格值的行合并显示
|
|
203
|
+
- 动态计算合并跨度
|
|
204
|
+
|
|
205
|
+
### 3. 拖拽排序
|
|
206
|
+
- 使用 Sortable.js 实现
|
|
207
|
+
- 规格列表可拖拽
|
|
208
|
+
- 每个规格的属性列表可独立拖拽
|
|
209
|
+
|
|
210
|
+
### 4. Excel 导入导出
|
|
211
|
+
- 使用 XLSX 库
|
|
212
|
+
- 导入时解析规格和 SKU 数据
|
|
213
|
+
- 导出时保留格式和数据
|
|
214
|
+
|
|
215
|
+
### 5. 命名 Trim 处理
|
|
216
|
+
- **规格名 Trim**: 保存规格时自动对名称进行 `trim()` 处理,去除前后空格
|
|
217
|
+
- **属性名 Trim**: 保存属性时自动对名称进行 `trim()` 处理,去除前后空格
|
|
218
|
+
- **验证基于 Trim 后的值**: 重名检查、保留字段检查都基于 trim 后的值进行比较
|
|
219
|
+
- **示例**: 用户输入 `" 颜色 "` 会被保存为 `"颜色"`
|
|
220
|
+
|
|
221
|
+
### 6. 属性值处理
|
|
222
|
+
- **多格式兼容**: 属性值支持字符串、对象、JSON 字符串等多种格式
|
|
223
|
+
- **自动解析**: 读取属性值时自动尝试解析 JSON 字符串
|
|
224
|
+
- **类型安全**: 根据规格类型动态调整编辑界面和验证逻辑
|
|
225
|
+
- **编辑模式**: 编辑属性时,对象值会被格式化为美化的 JSON 字符串展示在文本域中
|
|
226
|
+
- **保存优化**: 保存时根据规格类型构建合适的属性值对象
|
|
227
|
+
|
|
228
|
+
## 开发规范
|
|
229
|
+
|
|
230
|
+
### 代码风格
|
|
231
|
+
- 使用 `<script setup lang="ts">` 语法
|
|
232
|
+
- TypeScript 类型定义完整
|
|
233
|
+
- 函数注释使用 JSDoc 格式
|
|
234
|
+
|
|
235
|
+
### 文件结构
|
|
236
|
+
```
|
|
237
|
+
src/
|
|
238
|
+
├── components/ # Vue 组件
|
|
239
|
+
├── composables/ # 组合式函数
|
|
240
|
+
├── types/ # TypeScript 类型定义
|
|
241
|
+
└── utils/ # 工具函数
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## 示例数据
|
|
245
|
+
|
|
246
|
+
默认示例规格:
|
|
247
|
+
```
|
|
248
|
+
颜色 (color)
|
|
249
|
+
├── 红色 (#ff0000)
|
|
250
|
+
└── 蓝色 (#0000ff)
|
|
251
|
+
|
|
252
|
+
尺寸 (text)
|
|
253
|
+
├── S
|
|
254
|
+
├── M
|
|
255
|
+
└── L
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## 注意事项
|
|
259
|
+
|
|
260
|
+
1. **保留字段**: 新增规格时检查是否与保留字段重名
|
|
261
|
+
2. **Trim 处理**: 规格名和属性名必须 trim 后保存,验证也基于 trim 后的值
|
|
262
|
+
3. **数据保留**: 修改规格时尽可能保留用户已输入的 SKU 数据
|
|
263
|
+
4. **性能**: 规格组合数量多时注意表格渲染性能
|
|
264
|
+
5. **类型安全**: 完整的 TypeScript 类型定义
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
*此提示词用于指导 AI 助手理解和开发/维护 ME SKU Editor 项目*
|