Files
Excelbuilder/docs/variable-template-feature-design.md
2026-06-01 17:55:16 +08:00

16 KiB
Raw Blame History

MES 基本变量模板功能设计文档

1. 设计目标

当前网页在新增变量时,有一部分字段适合自动填写,例如 TagID工位号数据来源IPDbName 等来源字段;也有一部分字段经常重复填写,例如 TagTypeIDTagLong变量类型监控组、上下限、保存标记等。

为了减少重复录入,建议新增“变量模板”功能。用户可以提前维护常用变量模板,在新增变量时直接套用模板,然后只修改少量差异字段。

模板功能的目标是:

  • 支持新增模板。
  • 支持编辑模板。
  • 支持删除模板。
  • 支持在新增变量时使用模板。
  • 支持从当前变量保存为模板。
  • 支持模板数据持久化,刷新页面不丢失。
  • 不破坏当前设备模块、配置行、工位展开预览和 Excel 导出规则。

2. 功能边界

模板只负责快速填充变量字段,不直接生成设备配置行。

设备模块和工位配置仍由设备模块弹窗维护:

  • 设备名称
  • 工位名称
  • 设备型号
  • 设备IP
  • DB
  • 是否启用

变量模板主要作用于 MES_基本变量原始数据 的变量字段。

模板不直接保存以下最终展开字段:

  • 工位号
  • 数据来源
  • IP
  • DbName

这些字段仍以当前设备模块配置行为准,在页面预览和导出 Excel 时自动覆盖。

3. 模板类型建议

第一版建议先做一种模板:变量模板

后续如果需要,可以扩展为三类:

模板类型 用途 第一版是否实现
单变量模板 新增一条变量时快速填充字段
变量组模板 一次添加多条常用变量,例如一组握手信号 后续
设备模块模板 一次创建设备配置行和变量集合 后续

第一版先实现单变量模板即可,避免功能一下子过重。

4. 数据结构设计

建议在 OPFS/localStorage 保存的数据中新增 variableTemplates 字段:

{
  "version": 2,
  "updatedAt": "2026-06-01T10:00:00.000Z",
  "devices": [],
  "variableTemplates": []
}

模板对象建议如下:

{
  "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. 用户手动编辑字段。

优先级从低到高:

空白变量 -> 系统自动字段 -> 模板字段 -> 用户手动修改

5.1 系统自动字段

新增变量时自动填入:

字段 填充规则
TagID 自动生成下一条基础编号,例如 TAG_0000005,允许用户修改
工位号 取当前设备模块第一条配置行的 工位名称,仅用于预览
数据来源 取当前配置行的 设备名称数据来源,仅用于预览
IP 取当前配置行的 设备IP,仅用于预览
DbName 取当前配置行的 DB,仅用于预览

5.2 模板字段

选择模板后,模板中的 fields 覆盖当前表单对应字段。

例如选择 Bool 信号模板 后自动填入:

TagTypeID = 11
TagLong = 1
变量类型 = Bool
是否启用 = 1
监控组 = Monitor
是否监控 = 1

5.3 用户手动字段

用户在弹窗中手动输入的内容优先级最高。

如果用户已经输入了 TagName,再切换模板时建议弹出确认:

使用模板会覆盖当前已填写的部分字段,是否继续?

第一版也可以简化为:模板只填充空字段,不覆盖已有内容。

推荐第一版采用“只填空字段”,体验更安全。

6. 页面交互设计

6.1 新增变量弹窗

在新增变量弹窗顶部增加模板选择区:

模板: [请选择模板 v] [使用模板] [保存为模板]

按钮说明:

按钮 功能
使用模板 将选中的模板字段填入当前变量表单
保存为模板 将当前变量表单中可复用字段保存为一个新模板

TagID / TagName / TagTypeID / TagLong 建议保留在基础信息中,其中 TagTypeIDTagLong 必填。

6.2 编辑变量弹窗

编辑变量时也显示模板区:

模板: [请选择模板 v] [使用模板] [保存为模板]

使用模板时,只影响当前编辑的共享变量模板行。保存后当前设备模块下所有工位展开行同步变化。

6.3 模板管理入口

建议在右侧变量表工具栏增加按钮:

[模板管理] [新增变量] [编辑变量] [复制变量] [删除变量]

点击 模板管理 打开模板管理弹窗。

7. 模板管理弹窗

模板管理弹窗建议采用左右结构:

┌──────────────────────────────────────────────────────────────┐
│ 变量模板管理                                      [新增模板] │
├───────────────────────┬──────────────────────────────────────┤
│ 模板列表              │ 模板详情编辑                         │
│ ┌───────────────────┐ │ 模板名称:[Bool 信号模板        ]    │
│ │ Bool 信号模板      │ │ 模板说明:[常用 Bool 开关量信号]    │
│ │ Int 数值模板       │ │                                      │
│ │ Real 浮点模板      │ │ TagTypeID[11]  TagLong[1]       │
│ │ String 字符串模板  │ │ 变量类型:[Bool]                    │
│ └───────────────────┘ │ 是否启用:[1]                        │
│                       │ 监控组:[Monitor]                    │
│                       │ 是否监控:[1]                        │
├───────────────────────┴──────────────────────────────────────┤
│                                  [删除] [取消] [保存模板]     │
└──────────────────────────────────────────────────────────────┘

模板管理支持:

  • 新增模板。
  • 编辑模板。
  • 删除模板。
  • 复制模板。
  • 从当前变量生成模板。

8. 默认模板建议

系统可以内置几条基础模板,用户可编辑或删除。

8.1 Bool 模板

{
  "templateName": "Bool 信号模板",
  "fields": {
    "TagTypeID": "11",
    "TagLong": "1",
    "变量类型": "Bool",
    "是否启用": "1",
    "是否监控": "1"
  }
}

8.2 Int 模板

{
  "templateName": "Int 数值模板",
  "fields": {
    "TagTypeID": "2",
    "TagLong": "2",
    "变量类型": "Int",
    "是否启用": "1"
  }
}

8.3 Real 模板

{
  "templateName": "Real 浮点模板",
  "fields": {
    "TagTypeID": "4",
    "TagLong": "4",
    "变量类型": "Real",
    "是否启用": "1"
  }
}

8.4 String 模板

{
  "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. 第一版实施建议

建议新增或修改:

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 变量表工具栏

┌──────────────────────────────────────────────────────────────────────────────┐
│ 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 新增变量弹窗

┌──────────────────────────────────────────────────────────────┐
│ 新增变量                                                     │
├──────────────────────────────────────────────────────────────┤
│ 模板: [Bool 信号模板 v]        [使用模板] [保存为模板]       │
├──────────────────────────────────────────────────────────────┤
│ 基础信息                                                     │
│ TagID     [TAG_0000001]   TagName  [              ]      │
│ TagTypeID [11        ]   TagLong  [1             ]       │
│ 工位号:    [ST04      ]   数据来源: [放油前        ]       │
│ IP        [192.168.1.60] DbName   [DB10000       ]       │
├──────────────────────────────────────────────────────────────┤
│ 变量定义                                                     │
│ 变量类型:  [Bool      ]   变量地址:[              ]        │
│ 变量其它:  [          ]   变量类型代码:[          ]        │
├──────────────────────────────────────────────────────────────┤
│                                      [取消] [保存变量]        │
└──────────────────────────────────────────────────────────────┘

14.3 模板管理弹窗

┌──────────────────────────────────────────────────────────────┐
│ 变量模板管理                                      [新增模板] │
├───────────────────────┬──────────────────────────────────────┤
│ Bool 信号模板          │ 模板名称:[Bool 信号模板        ]    │
│ Int 数值模板           │ 模板说明:[常用 Bool 开关量信号]    │
│ Real 浮点模板          │ TagTypeID[11]   TagLong[1]      │
│ String 字符串模板      │ 变量类型:[Bool]                    │
│                       │ 是否启用:[1]                       │
├───────────────────────┴──────────────────────────────────────┤
│                                  [删除] [取消] [保存模板]     │
└──────────────────────────────────────────────────────────────┘

15. 后续扩展方向

后续可以继续增强:

  • 支持变量组模板,一次新增多条变量。
  • 支持模板分类,例如 Bool、Int、Real、String、MES 通讯、PLC 握手。
  • 支持模板导入导出为单独 JSON 文件。
  • 支持从现有 Excel 扫描变量并生成模板。
  • 支持设置默认模板,新建变量时自动应用。
  • 支持模板字段锁定,例如某些模板强制固定 TagTypeIDTagLong