LabelTemplateEditor_Full.md
5.8 KB
标签模板编辑器(Label Template Editor)
超级完整 · 前端开发规格说明
适用对象:AI 前端开发模型 / 前端工程师
技术范围:仅前端页面(Vue / React 均可)
数据范围:仅前端内存 / LocalStorage
不包含:后端、接口、登录、权限、真实打印
一、项目目标(必须理解)
本系统用于实现一个 所见即所得(WYSIWYG)的标签模板编辑器,用于配置和设计可打印的商品标签、价格标签、营养标签等。
系统最终产物:
- 一个可交互的前端页面
- 一份可导出的 JSON 标签模板结构
二、整体页面布局(强约束)
页面必须为 三栏布局,不可合并、不可简化:
┌──────────────┬────────────────────────────┬────────────────────┐
│ 左侧标签库 │ 中央标签画布 │ 右侧属性设置面板 │
│ Elements │ Label Canvas │ Properties │
└──────────────┴────────────────────────────┴────────────────────┘
三、核心数据模型(绝对不可改)
3.1 标签模板(LabelTemplate)
{
"id": "template-001",
"name": "Price Label",
"labelType": "PRICE",
"unit": "cm",
"width": 6,
"height": 4,
"appliedLocation": "ALL",
"showRuler": true,
"elements": []
}
字段说明:
| 字段 | 说明 |
|---|---|
| id | 模板唯一标识 |
| name | 模板名称 |
| labelType | 标签类型(PRICE / NUTRITION / SHIPPING) |
| unit | 尺寸单位(cm / inch) |
| width | 标签宽度 |
| height | 标签高度 |
| appliedLocation | 适用门店 |
| showRuler | 是否显示刻度 |
| elements | 标签元素集合 |
3.2 标签元素(LabelElement)
{
"id": "el-001",
"type": "TEXT_PRICE",
"x": 10,
"y": 20,
"width": 120,
"height": 30,
"rotation": "horizontal",
"border": "none",
"config": {}
}
通用字段说明:
| 字段 | 说明 |
|---|---|
| id | 元素唯一标识 |
| type | 元素类型 |
| x / y | 在画布中的坐标 |
| width / height | 元素尺寸 |
| rotation | horizontal / vertical |
| border | none / line / dotted |
| config | 元素专属配置 |
四、左侧标签库(Elements Panel)
100% 对照 Excel,不允许遗漏
A. 基础文字类(Excel: Text, Price, etc)
| UI名称 | type |
|---|---|
| 普通文本 | TEXT_STATIC |
| 商品名称 | TEXT_PRODUCT |
| 商品价格 | TEXT_PRICE |
B. 编码类(Excel: Barcode / QR Code)
| UI名称 | type |
|---|---|
| 一维条码 | BARCODE |
| 二维码 | QRCODE |
C. 图形类(Excel: Image, Logo)
| UI名称 | type |
|---|---|
| 图片 / Logo | IMAGE |
D. 时间日期类(Excel: Current Date / Time / Duration)
| UI名称 | type |
|---|---|
| 当前日期 | DATE |
| 当前时间 | TIME |
| 保质期 / 有效期 | DURATION |
E. 重量与计价类(Excel: Weight / Weight Based)
| UI名称 | type |
|---|---|
| 重量 | WEIGHT |
| 按重量计价 | WEIGHT_PRICE |
F. 结构辅助类(Excel: Blank Space)
| UI名称 | type |
|---|---|
| 空白占位 | BLANK |
G. 复合结构类(Excel: Nutrition Facts)
| UI名称 | type |
|---|---|
| 营养成分表 | NUTRITION |
五、中央画布(Label Canvas)
5.1 画布规则
- 画布尺寸 = 模板 width × height
- 根据 unit 自动换算 px
- 可显示刻度尺
- 背景为白色
5.2 元素交互规则
- 拖拽移动
- 拖拽缩放(四角)
- 单击选中
- Delete 删除
- 仅允许单选
六、右侧属性面板(Properties Panel)
6.1 状态一:未选中元素(模板级)
字段:
- Template Name
- Starter Template
- Label Type
- Applied Location
- Width / Height
- Unit
- Show Ruler
6.2 状态二:选中元素(通用)
字段:
- X / Y
- Width / Height
- Rotation
- Border
6.3 状态三:元素专属属性(完整定义)
TEXT_STATIC / TEXT_PRODUCT / TEXT_PRICE
{
"contentType": "STATIC | PRODUCT | PRICE",
"text": "Apple",
"fontFamily": "Arial",
"fontSize": 14,
"fontWeight": "normal | bold",
"textAlign": "left | center | right",
"prefix": "¥",
"decimal": 2
}
BARCODE
{
"barcodeType": "CODE128 | EAN13",
"data": "123456789",
"showText": true
}
QRCODE
{
"data": "https://example.com",
"errorLevel": "L | M | Q | H"
}
IMAGE
{
"src": "base64 / url",
"scaleMode": "contain | cover"
}
DATE / TIME / DURATION
{
"format": "YYYY-MM-DD HH:mm",
"offsetDays": 3
}
WEIGHT
{
"unit": "g | kg | lb",
"value": 500
}
WEIGHT_PRICE
{
"unitPrice": 10,
"weight": 0.5,
"currency": "¥"
}
NUTRITION
{
"calories": 120,
"fat": "5g",
"protein": "3g",
"carbs": "10g",
"layout": "standard"
}
七、模板保存与导出
- 保存至 LocalStorage
- Key:label-template-{id}
- 支持导出 JSON 文件
八、Excel Sheet 覆盖性校验(结论)
Excel 中所有 Sheet 均已覆盖:
- Text, Price, etc
- Barcode
- QR Code
- Image, Logo
- Blank Space
- Nutrition Facts
- Weight Based
- Weight
- Duration
- Current Date
- Current Time
- Label Type
- How-to
- Label ID
- Multiple Options / DateTime
无遗漏功能点
九、给 AI 的最终开发指令(强约束)
请严格按照本文档实现前端标签模板编辑器
不得修改数据结构
不得自行简化功能
不得引入后端或接口