Files
Excelbuilder/docs/excel-import-template-feature-design.md

542 lines
15 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.
# Excel 导入模板功能设计文档:单条模板 / 批量模板
## 1. 设计目标
当前项目已经具备“模板管理”能力,但需要进一步明确模板类型,避免把单条变量模板和从 Excel 导入的一整套变量混在一起。
新的设计目标是把模板管理拆成两类:
```text
单条模板管理:每次新增变量时,复制/套用一条变量模板。
批量模板管理:导入 Excel读取 MES_基本变量原始数据保存为一整套批量模板。
```
其中:
- `单条模板` 保留现在的使用方式,用于新增或编辑单条变量时快速填充字段。
- `批量模板` 用于把外部 Excel 中的 `MES_基本变量原始数据` 整批复制到当前设备模块。
- 批量模板只读取导入 Excel 的 `MES_基本变量原始数据` Sheet。
- 批量模板不读取、不解析、不使用 `设备类型对应表`
- 批量模板不会根据外部 Excel 修改当前网页中的设备模块、工位、设备 IP、DB。
## 2. 模板管理分类
模板管理分为两个 Tab 或两个区域:
```text
单条模板管理 | 批量模板管理
```
| 类型 | 数据来源 | 使用方式 | 结果 |
| --- | --- | --- | --- |
| 单条模板管理 | 用户手动维护的一条变量字段模板 | 新增变量时选择并套用 | 新增 1 条变量 |
| 批量模板管理 | 外部 Excel 的 `MES_基本变量原始数据` | 选择批量模板并使用 | 一次新增多条变量 |
第一版不做设备模板、不做工位模板、不从 Excel 反向生成设备配置。
## 3. 单条模板管理
单条模板管理保留当前功能。
### 3.1 功能定位
单条模板用于减少单条变量录入时的重复填写。
例如用户新增变量时,可以选择:
- `Bool 信号模板`
- `Int 数值模板`
- `Real 浮点模板`
- `String 字符串模板`
然后自动填充:
- `TagTypeID`
- `TagLong`
- `变量类型`
- `是否启用`
- `是否监控`
- 其它常用字段
### 3.2 单条模板使用规则
新增变量时:
1. 用户点击 `新增变量`
2. 系统打开变量编辑弹窗。
3. 用户选择一个单条模板。
4. 点击 `使用模板`
5. 模板字段填入当前变量表单。
6. 用户继续补充 `TagID / TagName / 变量地址 / 测量项目` 等字段。
7. 保存后只新增一条共享变量。
### 3.3 单条模板保存内容
单条模板保存的是一条变量的部分字段,不需要保存完整 38 字段。
建议结构:
```json
{
"id": "tpl-bool-signal",
"templateName": "Bool 信号模板",
"description": "常用 Bool 开关量信号",
"fields": {
"TagTypeID": "11",
"TagLong": "1",
"变量类型": "Bool",
"是否启用": "1",
"是否监控": "1"
}
}
```
## 4. 批量模板管理
批量模板管理是本次新增的重点。
### 4.1 功能定位
批量模板用于把外部 Excel 中的一整套基本变量原始数据保存成可复用模板。
用户后续可以选择这个批量模板,并一次性追加到当前设备模块的共享变量数据中。
效果类似之前版本:
```text
直接复制 Excel 中的 MES_基本变量原始数据
```
### 4.2 批量模板来源
批量模板只来自外部 Excel 的:
```text
MES_基本变量原始数据
```
即使导入 Excel 中存在:
```text
设备类型对应表
```
系统也不读取、不解析、不使用。
### 4.3 批量模板使用结果
用户使用批量模板后:
- 批量模板中的所有变量追加到当前选中的设备模块。
- 当前设备模块右侧 `MES_基本变量原始数据展开预览` 立即刷新。
- 如果当前设备模块有多个配置行,右侧按多个工位展开显示。
- 导出 Excel 时,新追加的变量会出现在 `MES_基本变量原始数据` 中。
## 5. Excel 导入规则
### 5.1 Sheet 读取规则
导入 Excel 时只查找并读取:
```text
MES_基本变量原始数据
```
如果没有该 Sheet提示
```text
未找到 MES_基本变量原始数据 Sheet无法导入批量模板。
```
不会读取:
```text
设备类型对应表
```
也不会读取其它 Sheet。
### 5.2 表头规则
第一行作为表头。
字段以当前系统中的 `MES_HEADERS` 为准。
处理规则:
| 情况 | 处理方式 |
| --- | --- |
| Excel 存在系统支持字段 | 读取该字段 |
| Excel 存在未知字段 | 忽略 |
| Excel 缺少系统字段 | 补为空 |
| Excel 空行 | 忽略 |
至少应存在:
- `TagID`
- `TagName`
建议必须填写:
- `TagTypeID`
- `TagLong`
### 5.3 字段保留规则
批量模板保存导入 Excel 中识别出的多条基本变量原始数据。
保存时字段仍按 38 列标准字段管理:
```text
TagID
TagName
工位号
数据来源
IP
TagTypeID
TagLong
DbName
...
IsWebSocket
```
但导出和右侧预览时,以下字段仍以当前网页设备模块配置为准:
- `工位号`
- `数据来源`
- `IP`
- `DbName`
也就是说,外部 Excel 中这些字段可以被导入保存,但不会覆盖当前网页的设备模块配置。
### 5.4 TagID 规则
外部 Excel 中可能存在两种格式:
```text
TAG_0000001
ST04_TAG_0000001
```
批量模板保存时建议统一保存为基础格式:
```text
TAG_0000001
```
规则:
```text
如果 TagID 中包含 TAG_则从 TAG_ 开始截取。
```
示例:
| 导入值 | 模板保存值 |
| --- | --- |
| `TAG_0000001` | `TAG_0000001` |
| `ST04_TAG_0000001` | `TAG_0000001` |
| `ST11_TAG_0000023` | `TAG_0000023` |
使用批量模板追加到设备模块后,页面预览和 Excel 导出再按当前工位展开:
```text
ST04_TAG_0000001
ST05_TAG_0000001
```
## 6. 批量模板使用规则
### 6.1 使用入口
在模板管理中进入:
```text
批量模板管理
```
选择一个批量模板后点击:
```text
使用批量模板
```
### 6.2 使用前提
必须先选择左侧设备模块。
如果未选择设备模块,提示:
```text
请先选择设备模块,再使用批量模板。
```
### 6.3 追加方式
使用批量模板时,不覆盖当前设备模块已有变量,而是追加。
示例:
```text
当前设备模块已有变量3 条
批量模板变量23 条
使用后当前设备模块变量26 条
```
### 6.4 TagID 冲突处理
如果批量模板中的 `TagID` 与当前设备模块已有变量重复,推荐第一版自动重排。
示例:
当前已有:
```text
TAG_0000001
TAG_0000002
```
批量模板中有:
```text
TAG_0000001
TAG_0000002
TAG_0000003
```
追加后生成:
```text
TAG_0000003
TAG_0000004
TAG_0000005
```
这样可以避免同一设备模块中基础 `TagID` 重复。
### 6.5 展开预览
批量模板追加后,右侧表格按当前设备模块配置行展开。
例如:
```text
当前设备模块配置行ST04、ST05
批量模板变量23 条
右侧展开显示46 行
```
## 7. 数据结构建议
### 7.1 总配置结构
建议 OPFS/localStorage 中保存:
```json
{
"version": 3,
"updatedAt": "2026-06-02T10:00:00.000Z",
"devices": [],
"variableTemplates": [],
"batchVariableTemplates": []
}
```
### 7.2 单条模板结构
```json
{
"id": "tpl-bool-signal",
"templateName": "Bool 信号模板",
"description": "常用 Bool 开关量信号",
"fields": {
"TagTypeID": "11",
"TagLong": "1",
"变量类型": "Bool"
}
}
```
### 7.3 批量模板结构
```json
{
"id": "batch-tpl-001",
"templateName": "放油标准批量模板",
"description": "从外部 Excel 导入",
"sourceFileName": "SignalTable_CZ.xlsx",
"createdAt": "2026-06-02T10:00:00.000Z",
"variables": [
{
"TagID": "TAG_0000001",
"TagName": "PLC_PC_工件到位",
"TagTypeID": "11",
"TagLong": "1",
"变量类型": "Bool",
"变量地址": "0",
"变量其它": ".0"
}
]
}
```
## 8. 页面交互设计
### 8.1 模板管理弹窗
模板管理弹窗分为两个 Tab
```text
单条模板管理 | 批量模板管理
```
### 8.2 单条模板管理
保留当前能力:
- 新增单条模板
- 编辑单条模板
- 删除单条模板
- 在新增变量弹窗中使用单条模板
- 从当前变量保存为单条模板
### 8.3 批量模板管理
新增能力:
- `导入 Excel`
- `预览批量模板`
- `使用批量模板`
- `删除批量模板`
批量模板列表展示:
- 模板名称
- 来源文件
- 变量数量
- 创建时间
### 8.4 导入 Excel 确认弹窗
导入 Excel 后先展示确认信息:
```text
来源文件SignalTable_CZ.xlsx
读取 SheetMES_基本变量原始数据
有效变量数23
忽略空行0
忽略未知列2
模板名称:[放油标准批量模板]
模板说明:[从外部 Excel 导入]
[取消] [保存为批量模板]
```
## 9. 测试方案
### 9.1 单条模板测试
1. 打开新增变量弹窗。
2. 选择一个单条模板。
3. 点击 `使用模板`
4. 确认只填充当前变量表单。
5. 保存后只新增一条变量。
### 9.2 批量模板导入测试
1. 打开模板管理。
2. 进入 `批量模板管理`
3. 点击 `导入 Excel`
4. 选择包含 `MES_基本变量原始数据` 的 Excel。
5. 确认系统只读取该 Sheet。
6. 保存后生成一个批量模板。
### 9.3 非目标 Sheet 测试
1. 导入包含 `设备类型对应表` 的 Excel。
2. 确认系统不读取、不解析、不使用该 Sheet。
3. 当前设备模块配置不发生变化。
### 9.4 批量模板使用测试
1. 选择左侧一个设备模块。
2. 在批量模板管理中选择一个模板。
3. 点击 `使用批量模板`
4. 当前设备模块一次性新增多条变量。
5. 右侧 `MES_基本变量原始数据展开预览` 立即刷新。
### 9.5 Excel 导出测试
1. 使用批量模板批量新增变量。
2. 点击 `生成 Excel`
3. 导出的 `MES_基本变量原始数据` 包含新增变量。
4. 导出的 `工位号 / 数据来源 / IP / DbName` 使用当前网页设备模块配置。
5. 导出的 Excel 仍只包含两个 Sheet。
### 9.6 异常测试
需要验证:
- Excel 没有 `MES_基本变量原始数据` 时提示错误。
- Excel 表头缺少 `TagID``TagName` 时提示错误。
- Excel 空行被忽略。
- Excel 未知列被忽略。
- 批量模板保存后刷新页面仍存在。
## 10. 页面草图
### 10.1 模板管理
```text
┌──────────────────────────────────────────────────────────────────────────────┐
│ 模板管理 │
├──────────────────────────────────────────────────────────────────────────────┤
│ [单条模板管理] [批量模板管理] │
├──────────────────────────────┬───────────────────────────────────────────────┤
│ 批量模板列表 │ 批量模板预览 │
│ [导入 Excel] │ 模板名称:放油标准批量模板 │
│ ┌──────────────────────────┐ │ 来源文件SignalTable_CZ.xlsx │
│ │ 放油标准批量模板 23 条 │ │ 变量数量23 │
│ │ 称重批量模板 12 条 │ │ │
│ └──────────────────────────┘ │ ┌───────────────────────────────────────────┐ │
│ │ │ TagID TagName TagTypeID │ │
│ │ │ TAG_0000001 PLC_PC_工件到位 11 │ │
│ │ │ TAG_0000002 PLC_PC_读取完成 11 │ │
│ │ └───────────────────────────────────────────┘ │
├──────────────────────────────┴───────────────────────────────────────────────┤
│ [删除模板] [使用批量模板] [关闭] │
└──────────────────────────────────────────────────────────────────────────────┘
```
### 10.2 导入确认
```text
┌──────────────────────────────────────────────────────┐
│ 导入 Excel 为批量模板 │
├──────────────────────────────────────────────────────┤
│ 来源文件SignalTable_CZ.xlsx │
│ 读取 SheetMES_基本变量原始数据 │
│ 有效变量数23 │
│ 忽略空行0 │
│ 忽略未知列2 │
│ │
│ 模板名称:[放油标准批量模板 ] │
│ 模板说明:[从外部 Excel 导入 ] │
├──────────────────────────────────────────────────────┤
│ [取消] [保存为批量模板] │
└──────────────────────────────────────────────────────┘
```
## 11. 后续迭代方向
后续可以继续增强:
- 支持导入 Excel 后直接追加到当前设备模块,不先保存为批量模板。
- 支持批量模板内变量字段编辑。
- 支持批量模板导出为 JSON。
- 支持从当前设备模块变量保存为批量模板。
- 支持批量模板使用时选择 TagID 策略:自动重排、保留原值、覆盖重复。
- 支持导入前筛选变量,例如按 `变量类型``TagName``是否启用` 筛选。