# 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 读取 Sheet:MES_基本变量原始数据 有效变量数: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 │ │ 读取 Sheet:MES_基本变量原始数据 │ │ 有效变量数:23 │ │ 忽略空行:0 │ │ 忽略未知列:2 │ │ │ │ 模板名称:[放油标准批量模板 ] │ │ 模板说明:[从外部 Excel 导入 ] │ ├──────────────────────────────────────────────────────┤ │ [取消] [保存为批量模板] │ └──────────────────────────────────────────────────────┘ ``` ## 11. 后续迭代方向 后续可以继续增强: - 支持导入 Excel 后直接追加到当前设备模块,不先保存为批量模板。 - 支持批量模板内变量字段编辑。 - 支持批量模板导出为 JSON。 - 支持从当前设备模块变量保存为批量模板。 - 支持批量模板使用时选择 TagID 策略:自动重排、保留原值、覆盖重复。 - 支持导入前筛选变量,例如按 `变量类型`、`TagName`、`是否启用` 筛选。