Преглед изворни кода

feat(国际化): 新增预设数据国际化及相关功能

- 新增`US`地区预设流程模式及步骤数据
- 调整预设数据加载逻辑,根据当前选择的地区加载对应数据
- `SplashActivity`、`LoginActivity`、`InitWelcomeFragment`中增加预设数据加载逻辑
- `item_home_menu.xml`布局增加`minWidth`属性,修复部分语言文本显示不全问题
周文健 пре 1 месец
родитељ
комит
3a74b7b8fb

+ 98 - 0
app/src/main/assets/preset/CN/preset_workflow_mode.json

@@ -0,0 +1,98 @@
+[
+  {
+    "modeId": 1,
+    "modeCode": "1",
+    "isPreset": true,
+    "modeName": "上锁-共锁-解锁",
+    "modeTitle": "上锁-共锁-解锁",
+    "modeDescription": "包含上锁-共锁-解锁步骤",
+    "isColockSupport": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 2,
+    "modeCode": "2",
+    "isPreset": true,
+    "modeName": "上锁-解锁",
+    "modeTitle": "上锁-解锁",
+    "modeDescription": "包含上锁-解锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 3,
+    "modeCode": "3",
+    "isPreset": true,
+    "modeName": "解锁-上锁",
+    "modeTitle": "解锁-上锁",
+    "modeDescription": "包含解锁-上锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 4,
+    "modeCode": "4",
+    "isPreset": true,
+    "modeName": "上锁",
+    "modeTitle": "上锁",
+    "modeDescription": "包含上锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 5,
+    "modeCode": "5",
+    "isPreset": true,
+    "modeName": "解锁",
+    "modeTitle": "解锁",
+    "modeDescription": "包含解锁步骤",
+    "isColockSupport": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  },
+  {
+    "modeId": 6,
+    "modeCode": "6",
+    "isPreset": true,
+    "modeName": "LOTO八大步骤(玛氏)",
+    "modeTitle": "LOTO八大步骤(玛氏)",
+    "modeDescription": "LOTO八大步骤(玛氏)",
+    "isColockSupport": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1,
+    "status": true
+  }
+]

+ 684 - 0
app/src/main/assets/preset/CN/preset_workflow_step.json

@@ -0,0 +1,684 @@
+[
+  {
+    "stepId": 1,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": true,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": true,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 2,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": true,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 3,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "共锁",
+    "stepTitle": "共锁",
+    "stepTitleShort": "共锁",
+    "stepIcon": "access-control.svg",
+    "stepDescription": "共锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": true,
+    "enableReleaseColock": true,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 4,
+    "modeId": 1,
+    "stepTemplateId": null,
+    "stepIndex": 4,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 5,
+    "modeId": 2,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 6,
+    "modeId": 2,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 7,
+    "modeId": 2,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 8,
+    "modeId": 3,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 9,
+    "modeId": 3,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 10,
+    "modeId": 3,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 1,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 11,
+    "modeId": 4,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 12,
+    "modeId": 4,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "上锁",
+    "stepTitle": "上锁",
+    "stepTitleShort": "上锁",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": true,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 13,
+    "modeId": 5,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "选择人员",
+    "stepTitle": "选择人员",
+    "stepTitleShort": "选择人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "选择人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 14,
+    "modeId": 5,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "解锁",
+    "stepTitle": "解锁",
+    "stepTitleShort": "解锁",
+    "stepIcon": "unlock.svg",
+    "stepDescription": "解锁",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 15,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 1,
+    "stepName": "识别工作内容",
+    "stepTitle": "识别工作内容",
+    "stepTitleShort": "识别工作内容",
+    "stepIcon": "ballot-check.svg",
+    "stepDescription": "识别工作内容",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 16,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 2,
+    "stepName": "判断能量源与隔离方式",
+    "stepTitle": "判断能量源与隔离方式",
+    "stepTitleShort": "判断能量源与隔离方式",
+    "stepIcon": "bolt.svg",
+    "stepDescription": "判断能量源与隔离方式",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 17,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 3,
+    "stepName": "通知所有受影响的人员",
+    "stepTitle": "通知所有受影响的人员",
+    "stepTitleShort": "通知所有受影响的人员",
+    "stepIcon": "users-alt.svg",
+    "stepDescription": "通知所有受影响的人员",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": true,
+    "enableSetColocker": true,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 18,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 4,
+    "stepName": "正常操作停机",
+    "stepTitle": "正常操作停机",
+    "stepTitleShort": "正常操作停机",
+    "stepIcon": "power.svg",
+    "stepDescription": "正常操作停机",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": true,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": true,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 19,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 5,
+    "stepName": "上锁并挂牌",
+    "stepTitle": "上锁并挂牌",
+    "stepTitleShort": "上锁并挂牌",
+    "stepIcon": "lock.svg",
+    "stepDescription": "上锁并挂牌",
+    "confirmType": 0,
+    "confirmRoleCode": "jtlocker",
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": true,
+    "enableLock": true,
+    "enableColock": true,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 20,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 6,
+    "stepName": "能量隔离证实",
+    "stepTitle": "能量隔离证实",
+    "stepTitleShort": "能量隔离证实",
+    "stepIcon": "bolt-slash.svg",
+    "stepDescription": "能量隔离证实",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 21,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 7,
+    "stepName": "取锁前检查",
+    "stepTitle": "取锁前检查",
+    "stepTitleShort": "取锁前检查",
+    "stepIcon": "shield-check.svg",
+    "stepDescription": "取锁前检查",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": true,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": false,
+    "enableUnlock": false,
+    "enableEndJob": false,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  },
+  {
+    "stepId": 22,
+    "modeId": 6,
+    "stepTemplateId": null,
+    "stepIndex": 8,
+    "stepName": "拆锁恢复开关",
+    "stepTitle": "拆锁恢复开关",
+    "stepTitleShort": "拆锁恢复开关",
+    "stepIcon": "rotate-left.svg",
+    "stepDescription": "拆锁恢复开关",
+    "confirmType": 0,
+    "confirmRoleCode": null,
+    "confirmUser": null,
+    "enableCancelJob": false,
+    "enableSetLocker": false,
+    "enableSetColocker": false,
+    "enableAddColocker": false,
+    "gotoStepAfterAddingColocker": null,
+    "enableReduceColocker": false,
+    "enableLock": false,
+    "enableColock": false,
+    "enableReleaseColock": true,
+    "enableUnlock": true,
+    "enableEndJob": true,
+    "creator": "admin",
+    "createTime": "2025-06-23 09:47:00",
+    "updater": "admin",
+    "updateTime": "2025-06-23 09:47:00",
+    "deleted": false,
+    "tenantId": 1
+  }
+]

+ 0 - 0
app/src/main/assets/preset/preset_workflow_mode.json → app/src/main/assets/preset/US/preset_workflow_mode.json


+ 0 - 0
app/src/main/assets/preset/preset_workflow_step.json → app/src/main/assets/preset/US/preset_workflow_step.json


+ 3 - 1
app/src/main/java/com/grkj/iscs/features/init/fragment/InitWelcomeFragment.kt

@@ -3,6 +3,7 @@ package com.grkj.iscs.features.init.fragment
 import androidx.core.view.isVisible
 import androidx.fragment.app.viewModels
 import com.grkj.data.data.MMKVConstants
+import com.grkj.data.database.PresetData
 import com.grkj.data.enums.HardwareMode
 import com.grkj.iscs.R
 import com.grkj.iscs.databinding.FragmentInitWelcomeBinding
@@ -82,7 +83,8 @@ class InitWelcomeFragment : BaseFragment<FragmentInitWelcomeBinding>() {
             ) { selected: LanguageEntry ->
                 // 切换并持久化(MMKV),I18nManager 会热更新
                 LanguageStore.setExplicit(Locale.forLanguageTag(selected.tag))
-
+                PresetData.targetRegion = selected.region ?: PresetData.targetRegion
+                viewModel.checkPresetData().observe(this){}
                 // 芯片文本友好化(可选)
                 binding.chipLang.text = I18nManager.locale.value.toLanguageTag()
                 requireActivity().recreate()

+ 23 - 2
app/src/main/java/com/grkj/iscs/features/init/viewmodel/InitDeviceRegistrationKeyAndLockViewModel.kt

@@ -5,12 +5,16 @@ import androidx.lifecycle.MutableLiveData
 import androidx.lifecycle.liveData
 import com.grkj.data.config.ISCSConfig
 import com.grkj.data.data.MMKVConstants
+import com.grkj.data.database.PresetData
 import com.grkj.data.enums.HardwareMode
 import com.grkj.data.hardware.DockData
 import com.grkj.data.hardware.ble.BleConnectionManager
 import com.grkj.data.hardware.modbus.DeviceConst
 import com.grkj.data.hardware.modbus.DockBean
 import com.grkj.data.logic.IHardwareLogic
+import com.grkj.data.logic.IRoleLogic
+import com.grkj.data.logic.IWorkflowLogic
+import com.grkj.data.logic.impl.standard.RoleLogic
 import com.grkj.data.model.dos.IsLockCabinetSlots
 import com.grkj.ui_base.base.BaseViewModel
 import com.grkj.ui_base.business.HardwareBusinessManager
@@ -26,7 +30,11 @@ import javax.inject.Inject
 import kotlin.coroutines.resume
 
 @HiltViewModel
-class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardwareRepository: IHardwareLogic) :
+class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(
+    val hardwareRepository: IHardwareLogic,
+    val roleLogic: IRoleLogic,
+    val workflowLogic: IWorkflowLogic
+) :
     BaseViewModel() {
     val isLoadComplete: MutableLiveData<Boolean> = MutableLiveData(false)
     var isDestroy: Boolean = false
@@ -72,6 +80,18 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
         }
     }
 
+    /**
+     * 检查预设数据
+     */
+    fun checkPresetData(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            roleLogic.addPresetRoleData(PresetData.presetSysRole)
+            workflowLogic.addPresetWorkflowMode(PresetData.presetWorkflowMode)
+            workflowLogic.addPresetWorkflowStep(PresetData.presetWorkflowStep)
+            emit(true)
+        }
+    }
+
     /**
      * 检查钥匙是否是新设备
      */
@@ -161,7 +181,8 @@ class InitDeviceRegistrationKeyAndLockViewModel @Inject constructor(val hardware
                                                 mac
                                             }"
                                         )
-                                        HardwareMode.getCurrentHardwareMode().updateKeyMac(keyBean.rfid,mac)
+                                        HardwareMode.getCurrentHardwareMode()
+                                            .updateKeyMac(keyBean.rfid, mac)
                                         alreadyUsedMac.add(mac)
                                         if (cont.isActive) {
                                             cont.resume(true)

+ 4 - 3
app/src/main/java/com/grkj/iscs/features/login/activity/LoginActivity.kt

@@ -19,6 +19,7 @@ import com.drake.brv.utils.linear
 import com.drake.brv.utils.models
 import com.drake.brv.utils.setup
 import com.grkj.data.data.MainDomainData
+import com.grkj.data.database.PresetData
 import com.grkj.data.enums.LoginResultEnum
 import com.grkj.data.model.local.LoginMenuEntity
 import com.grkj.iscs.ISCSApplication
@@ -81,7 +82,8 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
             ) { selected: LanguageEntry ->
                 // 切换并持久化(MMKV),I18nManager 会热更新
                 LanguageStore.setExplicit(Locale.forLanguageTag(selected.tag))
-
+                PresetData.targetRegion = selected.region ?: PresetData.targetRegion
+                viewModel.checkPresetData().observe(this) {}
                 // 芯片文本友好化(可选)
                 binding.chipLang.text = I18nManager.locale.value.toLanguageTag()
                 recreate()
@@ -187,10 +189,9 @@ class LoginActivity : BaseActivity<ActivityLoginBinding>() {
         super.initData()
         viewModel.registerFaceFeature().observe(this) {}
         viewModel.checkPresetWorkflowStepIcon().observe(this) {}
-        //todo 模拟器不支持
+        //todo 模拟器不支持 测试用,直接创建管理员账号
         ArcSoftUtil.checkActiveStatus(SIKCore.getApplication())
         ArcSoftUtil.initEngine(SIKCore.getApplication())
-        //todo 测试用,直接创建管理员账号 adminitrator
 //        viewModel.insertAdminAccount().observe(this) {}
         requestPermissionsIfNeeded(*Constants.needPermission) {
             if (it) {

+ 18 - 0
app/src/main/java/com/grkj/iscs/features/login/viewmodel/LoginViewModel.kt

@@ -2,8 +2,10 @@ package com.grkj.iscs.features.login.viewmodel
 
 import androidx.lifecycle.LiveData
 import androidx.lifecycle.liveData
+import com.grkj.data.database.PresetData
 import com.grkj.data.enums.LoginResultEnum
 import com.grkj.data.logic.IJobTicketLogic
+import com.grkj.data.logic.IRoleLogic
 import com.grkj.data.logic.IUserLogic
 import com.grkj.data.logic.IWorkflowLogic
 import com.grkj.data.logic.impl.standard.JobTicketLogic
@@ -24,6 +26,7 @@ import javax.inject.Inject
 @HiltViewModel
 class LoginViewModel @Inject constructor(
     override val userLogic: IUserLogic,
+    val roleLogic: IRoleLogic,
     val workflowLogic: IWorkflowLogic
 ) : BaseViewModel(userLogic) {
 
@@ -127,6 +130,9 @@ class LoginViewModel @Inject constructor(
         }
     }
 
+    /**
+     * 获取所有用户
+     */
     fun getAllUser(): LiveData<Boolean> {
         return liveData(Dispatchers.IO) {
             logger.info(
@@ -137,4 +143,16 @@ class LoginViewModel @Inject constructor(
             )
         }
     }
+
+    /**
+     * 检查预设数据
+     */
+    fun checkPresetData(): LiveData<Boolean> {
+        return liveData(Dispatchers.IO) {
+            roleLogic.addPresetRoleData(PresetData.presetSysRole)
+            workflowLogic.addPresetWorkflowMode(PresetData.presetWorkflowMode)
+            workflowLogic.addPresetWorkflowStep(PresetData.presetWorkflowStep)
+            emit(true)
+        }
+    }
 }

+ 11 - 1
app/src/main/java/com/grkj/iscs/features/splash/activity/SplashActivity.kt

@@ -8,6 +8,7 @@ import com.grkj.data.data.MMKVConstants
 import com.grkj.data.database.BackupScheduler
 import com.grkj.data.database.DbReadyGate
 import com.grkj.data.database.ISCSDatabase
+import com.grkj.data.database.PresetData
 import com.grkj.data.enums.HardwareMode
 import com.grkj.data.utils.event.StartListenerEvent
 import com.grkj.iscs.R
@@ -31,6 +32,7 @@ import dagger.hilt.android.AndroidEntryPoint
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
+import kotlinx.coroutines.withContext
 import java.util.Locale
 
 @AndroidEntryPoint
@@ -55,8 +57,12 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
                             // 触发构建 + 迁移 + 打开;onOpen 回调里会 DbReadyGate.open()
                             val db = ISCSDatabase.instance
                             //todo 测试用,直接进入,不初始化
-                            DbReadyGate.await()
+//                            DbReadyGate.await()
 //                            withContext(Dispatchers.Main) {
+//                                val targetRegion = "US" // 自己决定用什么;也可以是 "CN" / 配置项 / 服务器下发
+//                                val entries = LanguageRegistry.entriesFromSources(targetRegion)
+//                                PresetData.targetRegion =
+//                                    entries.find { it.isSelected }?.region ?: targetRegion
 //                                viewModel.checkPresetData().observe(this@SplashActivity) {
 //                                    viewModel.checkSysMenuAndRole().observe(this@SplashActivity) {
 //                                        startActivity(
@@ -82,6 +88,10 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
                 HardwareMode.getCurrentHardwareMode()
                     .connectAndAddListener()
             }
+            val targetRegion = "US" // 自己决定用什么;也可以是 "CN" / 配置项 / 服务器下发
+            val entries = LanguageRegistry.entriesFromSources(targetRegion)
+            PresetData.targetRegion =
+                entries.find { it.isSelected }?.region ?: targetRegion
             viewModel.checkPresetData().observe(this@SplashActivity) {
                 viewModel.checkSysMenuAndRole().observe(this@SplashActivity) {
                     val isAppInit = MMKVConstants.APP_INIT.getMMKVData(false)

+ 1 - 0
app/src/main/res/layout-land/item_home_menu.xml

@@ -6,6 +6,7 @@
         android:layout_height="wrap_content"
         android:gravity="center_horizontal"
         android:orientation="vertical"
+        android:minWidth="@dimen/menu_min_width"
         android:paddingHorizontal="@dimen/iscs_space_4"
         android:paddingVertical="@dimen/iscs_space_2">
 

+ 1 - 0
app/src/main/res/layout/item_home_menu.xml

@@ -6,6 +6,7 @@
         android:layout_height="wrap_content"
         android:gravity="center_horizontal"
         android:orientation="vertical"
+        android:minWidth="@dimen/menu_min_width"
         android:padding="@dimen/iscs_space_2">
 
         <cn.bingoogolapple.badgeview.BGABadgeFrameLayout

+ 1 - 0
app/src/main/res/values/dimens.xml

@@ -54,6 +54,7 @@
     <dimen name="workflow_step_item_height">100dp</dimen>
     <dimen name="workflow_step_item_index_size">30dp</dimen>
     <dimen name="add_to_map_input_min_width">200dp</dimen>
+    <dimen name="menu_min_width">160dp</dimen>
     <dimen name="step_item_width">120dp</dimen>
     <dimen name="step_item_height">180dp</dimen>
     <dimen name="step_item_icon_size">70dp</dimen>

+ 28 - 15
data/src/main/java/com/grkj/data/database/PresetData.kt

@@ -19,30 +19,43 @@ object PresetData {
 
     private val logger: Logger = LoggerFactory.getLogger(PresetData::class.java)
 
+    /**
+     * 目标地区
+     */
+    var targetRegion: String = "US"
+
     /**
      * 预设角色
      */
-    val presetSysRole: List<SysRole> = run {
-        val presetSysRole = SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_sys_role.json")
-        logger.info("预设数据:$presetSysRole")
-        gson.fromJson(presetSysRole, object : TypeToken<List<SysRole>>() {}.type)
-    }
+    val presetSysRole: List<SysRole>
+        get() = run {
+            val presetSysRole =
+                SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_sys_role.json")
+            logger.info("预设数据:$presetSysRole")
+            gson.fromJson(presetSysRole, object : TypeToken<List<SysRole>>() {}.type)
+        }
 
     /**
      * 预设流程模式
      */
-    val presetWorkflowMode: List<WorkflowMode> = run {
-        val presetWorkflowMode = SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_workflow_mode.json")
-        logger.info("预设数据:$presetWorkflowMode")
-        gson.fromJson(presetWorkflowMode, object : TypeToken<List<WorkflowMode>>() {}.type)
-    }
+    val presetWorkflowMode: List<WorkflowMode>
+        get() = run {
+            val presetWorkflowMode =
+                SIKCore.getApplication()
+                    .readJsonFromAssets("$ASSETS_DIR/$targetRegion/preset_workflow_mode.json")
+            logger.info("预设数据:$presetWorkflowMode")
+            gson.fromJson(presetWorkflowMode, object : TypeToken<List<WorkflowMode>>() {}.type)
+        }
 
     /**
      * 预设流程模式步骤
      */
-    val presetWorkflowStep: List<WorkflowStep> = run {
-        val presetWorkflowStep = SIKCore.getApplication().readJsonFromAssets("$ASSETS_DIR/preset_workflow_step.json")
-        logger.info("预设数据:$presetWorkflowStep")
-        gson.fromJson(presetWorkflowStep, object : TypeToken<List<WorkflowStep>>() {}.type)
-    }
+    val presetWorkflowStep: List<WorkflowStep>
+        get() = run {
+            val presetWorkflowStep =
+                SIKCore.getApplication()
+                    .readJsonFromAssets("$ASSETS_DIR/$targetRegion/preset_workflow_step.json")
+            logger.info("预设数据:$presetWorkflowStep")
+            gson.fromJson(presetWorkflowStep, object : TypeToken<List<WorkflowStep>>() {}.type)
+        }
 }