# MES 基本变量模板功能设计文档 ## 1. 设计目标 当前网页在新增变量时,有一部分字段适合自动填写,例如 `TagID`、`工位号`、`数据来源`、`IP`、`DbName` 等来源字段;也有一部分字段经常重复填写,例如 `TagTypeID`、`TagLong`、`变量类型`、`监控组`、上下限、保存标记等。 为了减少重复录入,建议新增“变量模板”功能。用户可以提前维护常用变量模板,在新增变量时直接套用模板,然后只修改少量差异字段。 模板功能的目标是: - 支持新增模板。 - 支持编辑模板。 - 支持删除模板。 - 支持在新增变量时使用模板。 - 支持从当前变量保存为模板。 - 支持模板数据持久化,刷新页面不丢失。 - 不破坏当前设备模块、配置行、工位展开预览和 Excel 导出规则。 ## 2. 功能边界 模板只负责快速填充变量字段,不直接生成设备配置行。 设备模块和工位配置仍由设备模块弹窗维护: - `设备名称` - `工位名称` - `设备型号` - `设备IP` - `DB` - `是否启用` 变量模板主要作用于 `MES_基本变量原始数据` 的变量字段。 模板不直接保存以下最终展开字段: - `工位号` - `数据来源` - `IP` - `DbName` 这些字段仍以当前设备模块配置行为准,在页面预览和导出 Excel 时自动覆盖。 ## 3. 模板类型建议 第一版建议先做一种模板:`变量模板`。 后续如果需要,可以扩展为三类: | 模板类型 | 用途 | 第一版是否实现 | | --- | --- | --- | | 单变量模板 | 新增一条变量时快速填充字段 | 是 | | 变量组模板 | 一次添加多条常用变量,例如一组握手信号 | 后续 | | 设备模块模板 | 一次创建设备配置行和变量集合 | 后续 | 第一版先实现单变量模板即可,避免功能一下子过重。 ## 4. 数据结构设计 建议在 OPFS/localStorage 保存的数据中新增 `variableTemplates` 字段: ```json { "version": 2, "updatedAt": "2026-06-01T10:00:00.000Z", "devices": [], "variableTemplates": [] } ``` 模板对象建议如下: ```json { "id": "tpl-bool-signal", "templateName": "Bool 信号模板", "description": "常用 Bool 开关量信号", "fields": { "TagTypeID": "11", "TagLong": "1", "变量类型": "Bool", "变量地址": "", "变量其它": "", "是否启用": "1", "监控组": "Monitor", "是否监控": "1", "IsGoodBad": "1", "IsSaveToSql": "0", "IsWebSocket": "0" } } ``` 说明: - `templateName` 用于页面下拉选择和模板管理列表展示。 - `description` 用于解释模板用途。 - `fields` 只保存模板要填充的字段。 - 模板不强制保存 38 个字段,未配置字段保持空白或保留当前变量已有值。 ## 5. 字段填充规则 新增变量时分三层填充: 1. 系统自动字段。 2. 用户选择的模板字段。 3. 用户手动编辑字段。 优先级从低到高: ```text 空白变量 -> 系统自动字段 -> 模板字段 -> 用户手动修改 ``` ### 5.1 系统自动字段 新增变量时自动填入: | 字段 | 填充规则 | | --- | --- | | `TagID` | 自动生成下一条基础编号,例如 `TAG_0000005`,允许用户修改 | | `工位号` | 取当前设备模块第一条配置行的 `工位名称`,仅用于预览 | | `数据来源` | 取当前配置行的 `设备名称` 或 `数据来源`,仅用于预览 | | `IP` | 取当前配置行的 `设备IP`,仅用于预览 | | `DbName` | 取当前配置行的 `DB`,仅用于预览 | ### 5.2 模板字段 选择模板后,模板中的 `fields` 覆盖当前表单对应字段。 例如选择 `Bool 信号模板` 后自动填入: ```text TagTypeID = 11 TagLong = 1 变量类型 = Bool 是否启用 = 1 监控组 = Monitor 是否监控 = 1 ``` ### 5.3 用户手动字段 用户在弹窗中手动输入的内容优先级最高。 如果用户已经输入了 `TagName`,再切换模板时建议弹出确认: ```text 使用模板会覆盖当前已填写的部分字段,是否继续? ``` 第一版也可以简化为:模板只填充空字段,不覆盖已有内容。 推荐第一版采用“只填空字段”,体验更安全。 ## 6. 页面交互设计 ### 6.1 新增变量弹窗 在新增变量弹窗顶部增加模板选择区: ```text 模板: [请选择模板 v] [使用模板] [保存为模板] ``` 按钮说明: | 按钮 | 功能 | | --- | --- | | `使用模板` | 将选中的模板字段填入当前变量表单 | | `保存为模板` | 将当前变量表单中可复用字段保存为一个新模板 | `TagID / TagName / TagTypeID / TagLong` 建议保留在基础信息中,其中 `TagTypeID` 和 `TagLong` 必填。 ### 6.2 编辑变量弹窗 编辑变量时也显示模板区: ```text 模板: [请选择模板 v] [使用模板] [保存为模板] ``` 使用模板时,只影响当前编辑的共享变量模板行。保存后当前设备模块下所有工位展开行同步变化。 ### 6.3 模板管理入口 建议在右侧变量表工具栏增加按钮: ```text [模板管理] [新增变量] [编辑变量] [复制变量] [删除变量] ``` 点击 `模板管理` 打开模板管理弹窗。 ## 7. 模板管理弹窗 模板管理弹窗建议采用左右结构: ```text ┌──────────────────────────────────────────────────────────────┐ │ 变量模板管理 [新增模板] │ ├───────────────────────┬──────────────────────────────────────┤ │ 模板列表 │ 模板详情编辑 │ │ ┌───────────────────┐ │ 模板名称:[Bool 信号模板 ] │ │ │ Bool 信号模板 │ │ 模板说明:[常用 Bool 开关量信号] │ │ │ Int 数值模板 │ │ │ │ │ Real 浮点模板 │ │ TagTypeID:[11] TagLong:[1] │ │ │ String 字符串模板 │ │ 变量类型:[Bool] │ │ └───────────────────┘ │ 是否启用:[1] │ │ │ 监控组:[Monitor] │ │ │ 是否监控:[1] │ ├───────────────────────┴──────────────────────────────────────┤ │ [删除] [取消] [保存模板] │ └──────────────────────────────────────────────────────────────┘ ``` 模板管理支持: - 新增模板。 - 编辑模板。 - 删除模板。 - 复制模板。 - 从当前变量生成模板。 ## 8. 默认模板建议 系统可以内置几条基础模板,用户可编辑或删除。 ### 8.1 Bool 模板 ```json { "templateName": "Bool 信号模板", "fields": { "TagTypeID": "11", "TagLong": "1", "变量类型": "Bool", "是否启用": "1", "是否监控": "1" } } ``` ### 8.2 Int 模板 ```json { "templateName": "Int 数值模板", "fields": { "TagTypeID": "2", "TagLong": "2", "变量类型": "Int", "是否启用": "1" } } ``` ### 8.3 Real 模板 ```json { "templateName": "Real 浮点模板", "fields": { "TagTypeID": "4", "TagLong": "4", "变量类型": "Real", "是否启用": "1" } } ``` ### 8.4 String 模板 ```json { "templateName": "String 字符串模板", "fields": { "TagTypeID": "8", "TagLong": "60", "变量类型": "String", "变量其它": ".58", "是否启用": "1" } } ``` ## 9. 保存和持久化规则 模板数据和设备模块数据一起保存到 OPFS/localStorage。 每次发生以下操作后自动保存: - 新增模板。 - 编辑模板。 - 删除模板。 - 从变量保存为模板。 - 导入配置 JSON。 导出配置 JSON 时也应包含 `variableTemplates`,方便用户迁移模板。 导入旧 JSON 时如果没有 `variableTemplates`,系统自动补充默认模板。 ## 10. Excel 导出影响 模板不直接影响 Excel 结构。 Excel 仍只导出两个 Sheet: 1. `MES_基本变量原始数据` 2. `设备类型对应表` 模板只影响变量创建和编辑后的字段值。最终 Excel 导出仍以当前设备模块中的变量数据为准。 如果变量字段为空,导出 Excel 时继续按当前规则处理:空字段不强制填默认值。 ## 11. 校验建议 新增或编辑变量时建议校验: - `TagID` 不能为空。 - `TagName` 不能为空。 - `TagTypeID` 不能为空。 - `TagLong` 不能为空。 - 同一设备模块内基础 `TagID` 不建议重复。 模板保存时建议校验: - 模板名称不能为空。 - 模板名称不能重复。 - 模板至少包含一个可填充字段。 使用模板时建议提示: - 模板会填充哪些字段。 - 是否覆盖已有字段。 ## 12. 第一版实施建议 建议新增或修改: ```text src/data/default-variable-templates.json src/utils/templateBuilder.js src/views/SignalTableGenerator.vue src/utils/opfsStore.js docs/variable-template-feature-design.md ``` 职责划分: | 文件 | 职责 | | --- | --- | | `default-variable-templates.json` | 保存系统默认模板 | | `templateBuilder.js` | 模板规范化、应用模板、从变量生成模板 | | `SignalTableGenerator.vue` | 模板管理 UI、变量弹窗模板选择 | | `opfsStore.js` | 保存和读取 `variableTemplates` | ## 13. 测试方案 ### 13.1 新增模板 1. 打开模板管理。 2. 点击 `新增模板`。 3. 填写模板名称和字段。 4. 保存模板。 5. 刷新页面后模板仍存在。 ### 13.2 使用模板新增变量 1. 选择一个设备模块。 2. 点击 `新增变量`。 3. 选择 `Bool 信号模板`。 4. 点击 `使用模板`。 5. 确认 `TagTypeID / TagLong / 变量类型` 自动填入。 6. 保存变量。 7. 右侧展开表格出现新变量。 ### 13.3 编辑变量时使用模板 1. 选中一条变量。 2. 点击 `编辑变量`。 3. 选择另一个模板。 4. 保存变量。 5. 当前设备模块下所有工位对应展开行同步变化。 ### 13.4 从变量保存为模板 1. 编辑一条变量。 2. 点击 `保存为模板`。 3. 输入模板名称。 4. 保存后在模板管理中可以看到新模板。 ### 13.5 导入导出配置 1. 新增一个模板。 2. 导出配置 JSON。 3. 清空或更换浏览器数据。 4. 导入配置 JSON。 5. 确认模板随配置恢复。 ### 13.6 Excel 导出 1. 使用模板新增变量。 2. 导出 `SignalTable_CZ.xlsx`。 3. 确认 Excel 中变量字段来自用户保存后的变量数据。 4. 确认 Excel 仍只有两个 Sheet。 ## 14. 页面草图 ### 14.1 变量表工具栏 ```text ┌──────────────────────────────────────────────────────────────────────────────┐ │ MES_基本变量原始数据展开预览 │ │ 当前设备模块:共 3 个配置行,右侧显示所有工位展开后的 MES 原始数据 │ │ [模板管理] [新增变量] │ ├──────────────────────────────────────────────────────────────────────────────┤ │ TagID TagName 工位号 数据来源 TagTypeID TagLong │ │ ST04_TAG_0000001 PLC_PC_工件到位 ST04 放油前 11 1 │ │ ST05_TAG_0000001 PLC_PC_工件到位 ST05 放油后 11 1 │ └──────────────────────────────────────────────────────────────────────────────┘ ``` ### 14.2 新增变量弹窗 ```text ┌──────────────────────────────────────────────────────────────┐ │ 新增变量 │ ├──────────────────────────────────────────────────────────────┤ │ 模板: [Bool 信号模板 v] [使用模板] [保存为模板] │ ├──────────────────────────────────────────────────────────────┤ │ 基础信息 │ │ TagID: [TAG_0000001] TagName: [ ] │ │ TagTypeID: [11 ] TagLong: [1 ] │ │ 工位号: [ST04 ] 数据来源: [放油前 ] │ │ IP: [192.168.1.60] DbName: [DB10000 ] │ ├──────────────────────────────────────────────────────────────┤ │ 变量定义 │ │ 变量类型: [Bool ] 变量地址:[ ] │ │ 变量其它: [ ] 变量类型代码:[ ] │ ├──────────────────────────────────────────────────────────────┤ │ [取消] [保存变量] │ └──────────────────────────────────────────────────────────────┘ ``` ### 14.3 模板管理弹窗 ```text ┌──────────────────────────────────────────────────────────────┐ │ 变量模板管理 [新增模板] │ ├───────────────────────┬──────────────────────────────────────┤ │ Bool 信号模板 │ 模板名称:[Bool 信号模板 ] │ │ Int 数值模板 │ 模板说明:[常用 Bool 开关量信号] │ │ Real 浮点模板 │ TagTypeID:[11] TagLong:[1] │ │ String 字符串模板 │ 变量类型:[Bool] │ │ │ 是否启用:[1] │ ├───────────────────────┴──────────────────────────────────────┤ │ [删除] [取消] [保存模板] │ └──────────────────────────────────────────────────────────────┘ ``` ## 15. 后续扩展方向 后续可以继续增强: - 支持变量组模板,一次新增多条变量。 - 支持模板分类,例如 Bool、Int、Real、String、MES 通讯、PLC 握手。 - 支持模板导入导出为单独 JSON 文件。 - 支持从现有 Excel 扫描变量并生成模板。 - 支持设置默认模板,新建变量时自动应用。 - 支持模板字段锁定,例如某些模板强制固定 `TagTypeID` 和 `TagLong`。