@microi.net/cli 6.0.8 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +96 -96
  10. package/scripts/microi-cli.js +1 -1
  11. package/scripts/microi-skills.meta.json +309 -309
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +13 -13
  14. package/skills/README.md +287 -287
  15. package/skills/ai-engine/SKILL.md +273 -273
  16. package/skills/ai-engine/references/ai-employees.md +48 -48
  17. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  18. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +2 -2
  19. package/skills/app-store/SKILL.md +3 -3
  20. package/skills/business-blueprint/SKILL.md +193 -193
  21. package/skills/datasource-engine/SKILL.md +93 -93
  22. package/skills/dos-orm/SKILL.md +105 -105
  23. package/skills/dos-orm/references/api-reference.md +229 -229
  24. package/skills/email-engine/SKILL.md +81 -81
  25. package/skills/email-engine/references/v8-email.md +34 -34
  26. package/skills/job-engine/SKILL.md +176 -176
  27. package/skills/message-notification/SKILL.md +156 -156
  28. package/skills/message-notification/references/contracts.md +102 -102
  29. package/skills/microi/SKILL.md +14 -14
  30. package/skills/microi-ai-app-auth.js +1 -1
  31. package/skills/microi-ai-application/SKILL.md +115 -115
  32. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  33. package/skills/microi-client-frontend/SKILL.md +19 -19
  34. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +10 -10
  35. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +10 -10
  36. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +10 -10
  37. package/skills/microi-codex/SKILL.md +130 -130
  38. package/skills/microi-codex-installer/SKILL.md +233 -233
  39. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  40. package/skills/microi-db-schema/SKILL.md +175 -175
  41. package/skills/microi-db-schema/references/core-tables.md +695 -695
  42. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  43. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  44. package/skills/microi-db-schema/references/schema.md +646 -646
  45. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  46. package/skills/microi-deployment/SKILL.md +260 -258
  47. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  48. package/skills/microi-docs-coverage/SKILL.md +133 -133
  49. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  50. package/skills/microi-form-engine/SKILL.md +338 -338
  51. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  52. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  53. package/skills/microi-left-right-layout/SKILL.md +141 -141
  54. package/skills/microi-microservice/SKILL.md +353 -348
  55. package/skills/microi-microservice/references/runtime-delivery.md +282 -282
  56. package/skills/microi-solution-quotation/SKILL.md +78 -78
  57. package/skills/microi-sso/SKILL.md +102 -102
  58. package/skills/microi-sso/references/acceptance.md +51 -51
  59. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  60. package/skills/microi-sso/references/inbound.md +53 -53
  61. package/skills/microi-sso/references/outbound.md +43 -43
  62. package/skills/microi-system-delivery/SKILL.md +18 -16
  63. package/skills/microi-system-delivery/references/context-quality.md +3 -3
  64. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +11 -11
  65. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +12 -8
  66. package/skills/microi-system-delivery/references/progressive-03-/345/256/211/345/205/250/344/270/216/350/267/250/347/253/257/351/252/214/346/224/266.md +8 -8
  67. package/skills/module-engine/SKILL.md +297 -297
  68. package/skills/module-engine/references/module-config.md +204 -204
  69. package/skills/ocr-engine/SKILL.md +113 -113
  70. package/skills/page-engine/SKILL.md +24 -24
  71. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +10 -10
  72. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +12 -12
  73. package/skills/performance-testing/SKILL.md +227 -227
  74. package/skills/print-engine/SKILL.md +259 -259
  75. package/skills/production-readonly-audit/SKILL.md +41 -41
  76. package/skills/report-engine/SKILL.md +83 -83
  77. package/skills/search-engine/SKILL.md +75 -75
  78. package/skills/spider-engine/SKILL.md +190 -190
  79. package/skills/system-observability/SKILL.md +264 -264
  80. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  81. package/skills/translate-engine/SKILL.md +140 -140
  82. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  83. package/skills/ui-design/references/design-pattern-library.md +184 -184
  84. package/skills/ui-design/references/mci-design-contract.md +163 -163
  85. package/skills/ui-design/references/motion-and-media.md +78 -78
  86. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  87. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  88. package/skills/unity-integration/SKILL.md +178 -178
  89. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  90. package/skills/unity-integration/references/sdk-api.md +82 -82
  91. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  92. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  93. package/skills/v8-cache-pattern/SKILL.md +320 -320
  94. package/skills/v8-debugging/SKILL.md +284 -284
  95. package/skills/v8-explorer-tree/SKILL.md +228 -228
  96. package/skills/v8-file-upload/SKILL.md +1 -1
  97. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -13
  98. package/skills/v8-formengine-http/SKILL.md +238 -238
  99. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  100. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  101. package/skills/v8-image-processing/SKILL.md +190 -190
  102. package/skills/v8-image-processing/references/api-reference.md +623 -623
  103. package/skills/v8-mongodb/SKILL.md +201 -201
  104. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -352
  105. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  106. package/skills/v8-sql-query/SKILL.md +302 -302
  107. package/skills/v8-tcp-integration/SKILL.md +158 -158
  108. package/skills/v8-template-engine/SKILL.md +167 -167
  109. package/skills/v8-utilities/SKILL.md +104 -104
  110. package/skills/v8-utilities/references/client-api-index.md +143 -143
  111. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  112. package/skills/v8-utilities/references/server-api-index.md +188 -188
  113. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  114. package/skills/vision-engine/SKILL.md +160 -160
  115. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  116. package/skills/workspace-conventions/SKILL.md +15 -3
  117. package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +33 -33
  118. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +34 -34
  119. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +6 -6
@@ -1,124 +1,124 @@
1
- # 字段数据源、属性与事件
2
-
3
- ## 数据源类型
4
-
5
- | 类型 | 适用场景 | 配置要点 |
6
- |---|---|---|
7
- | `Data` | 显示值和保存值相同的固定数组 | 适合少量稳定枚举 |
8
- | `KeyValue` | 保存 Key、显示 Label | 推荐;便于翻译和状态演进 |
9
- | `Sql` | 基于当前库的受控查询 | 参数化、限制条数、选择明确字段 |
10
- | `DataSource` | 复用数据源引擎 | 使用稳定 DataSourceId/Key |
11
- | `ApiEngine` | 复杂权限、跨表或外部数据 | 接口返回稳定的 Label/Value 字段 |
12
-
13
- KeyValue 示例:
14
-
15
- ```text
16
- draft|草稿,enabled|启用,disabled|禁用
17
- ```
18
-
19
- 对应核心语义:
20
-
21
- ```json
22
- {
23
- "DataSource": "KeyValue",
24
- "SelectLabel": "Value",
25
- "SelectSaveField": "Key"
26
- }
27
- ```
28
-
29
- 动态 SQL 示例只选择必要字段并限制返回量:
30
-
31
- ```json
32
- {
33
- "DataSource": "Sql",
34
- "Sql": "select Id,Name from biz_customer where Name like '%$Keyword$%' limit 0,20",
35
- "SelectLabel": "Name",
36
- "SelectSaveField": "Id",
37
- "DataSourceSqlRemote": true
38
- }
39
- ```
40
-
41
- SQL 仍必须经过平台受控数据源;不要把用户文本拼成标识符或任意 SQL。复杂权限、
42
- 跨库或外部服务使用数据源引擎/接口引擎。
43
-
44
- ## 动态联动
45
-
46
- 字段值变化时可用前端 V8 更新另一个字段的数据源:
47
-
48
- ```javascript
49
- if (V8.LoadMode === 'Design') return;
50
-
51
- var result = await V8.FormEngine.GetTableData('biz_contact', {
52
- _SelectFields: ['Id', 'Name'],
53
- _Where: [['CustomerId', '=', V8.ThisValue]],
54
- _PageIndex: 1,
55
- _PageSize: 100
56
- });
57
-
58
- V8.FieldSet('ContactId', 'Data', result.Code === 1 ? result.Data : []);
59
- ```
60
-
61
- 前端联动不能替代后端权限和提交校验。
62
-
63
- ## 表单生命周期
64
-
65
- | 配置 | 运行端 | 用途 |
66
- |---|---|---|
67
- | `InFormV8` | 前端 | 默认值、字段显隐、初始化交互 |
68
- | `SubmitFormV8` | 前端 | 即时校验;HTTP 直调不会触发 |
69
- | `SubmitBeforeServerV8` | 后端事务内 | 最终校验、加工、阻止提交 |
70
- | `SubmitAfterServerV8` | 后端事务内 | 同事务联动其它表 |
71
- | `OutFormV8` | 前端 | 关闭后刷新/跳转 |
72
- | `DataFilterV8` | 后端 | 每行脱敏/展示加工 |
73
-
74
- 事件代码、版本和表单属性都必须从当前 `diy_table/diy_field` 回读。后端阻止提交:
75
-
76
- ```javascript
77
- if (!V8.Form.Name) return { Code: 0, Msg: '名称不能为空' };
78
- ```
79
-
80
- ## 字段属性
81
-
82
- 常用属性包括 `Visible`、`AppVisible`、`Required`、`Readonly`、`Data`、
83
- `Config`、`FormWidth`、`TableWidth`、`Tab`、角色绑定和前端事件代码。
84
-
85
- - 除非明确隐藏,`Visible=1`、`AppVisible=1`。
86
- - 角色绑定只缩小界面可见性,不能代替服务器数据权限。
87
- - 修改防抖编辑器/代码字段前必须刷新待保存值,避免最后一次输入未入库。
88
- - `Data/Config` 修改后回读并刷新 schema 缓存。
89
-
90
- ### 历史字段 V8 双存储兼容
91
-
92
- - `diy_field.V8Code` 是历史租户和官方应用包实际使用的物理列,按钮点击/字段值变更代码可能只存在于该列;`Config.V8Code` 是部分新版前端使用的镜像,不能假定它是唯一事实源。
93
- - 后端 `DiyField` 实体、字段查询投影和 `DiyFieldParam` 必须保留 `V8Code`,否则数据库代码虽然仍在,设计器列表和单字段回读都会表现成“0 字”。
94
- - 前端回读顺序固定为:先安全解码历史 Base64,再取“非空物理 `V8Code` 优先、否则 `Config.V8Code`”,最后同步两处。禁止用空镜像覆盖非空物理代码;保存和显式清空时则必须同步写入两处。
95
- - 回归至少包含一个 `Component=Button`、根级 `V8Code` 非空而 `Config.V8Code` 为空的官方包字段,并验证列表回读、选中编辑、保存、刷新后代码仍完整。
96
-
97
- ## DevComponent 定制组件
98
-
99
- 定制组件至少处理:
100
-
101
- - `value/modelValue` 的输入与变更通知;
102
- - 当前字段模型、表单模型、表单模式和只读状态;
103
- - 校验错误、清空、禁用、加载与销毁;
104
- - Add/Edit/View 回显;
105
- - PC、移动端和暗色主题;
106
- - 组件内部请求的 Token/OsClient 传递与错误态。
107
-
108
- 定制组件需要修改并发布主前端。若只服务单一租户、包含多个字段或复杂页面,
109
- 优先创建 MicroService 页面,通过 `V8.OpenAppDialog` 与宿主交互。
110
-
111
- 历史 Options API 定制组件可通过宿主 facade 调用数据源引擎:
112
-
113
- ```javascript
114
- this.Microi.DataSourceEngine.Run('customer_summary', { Id: customerId }, (result) => {
115
- if (this.Microi.CheckResult(result)) {
116
- this.summary = result.Data;
117
- }
118
- });
119
- ```
120
-
121
- `Microi.DataSourceEngine.Run` 是回调式宿主接口,`Microi.CheckResult` 负责按
122
- DosResult 约定判断并展示错误。组件卸载后要阻止迟到回调继续写状态;新页面
123
- 优先使用项目现有的组合式 facade,不要假定 `this.Microi` 在任意 Vue 组件中
124
- 都存在。
1
+ # 字段数据源、属性与事件
2
+
3
+ ## 数据源类型
4
+
5
+ | 类型 | 适用场景 | 配置要点 |
6
+ |---|---|---|
7
+ | `Data` | 显示值和保存值相同的固定数组 | 适合少量稳定枚举 |
8
+ | `KeyValue` | 保存 Key、显示 Label | 推荐;便于翻译和状态演进 |
9
+ | `Sql` | 基于当前库的受控查询 | 参数化、限制条数、选择明确字段 |
10
+ | `DataSource` | 复用数据源引擎 | 使用稳定 DataSourceId/Key |
11
+ | `ApiEngine` | 复杂权限、跨表或外部数据 | 接口返回稳定的 Label/Value 字段 |
12
+
13
+ KeyValue 示例:
14
+
15
+ ```text
16
+ draft|草稿,enabled|启用,disabled|禁用
17
+ ```
18
+
19
+ 对应核心语义:
20
+
21
+ ```json
22
+ {
23
+ "DataSource": "KeyValue",
24
+ "SelectLabel": "Value",
25
+ "SelectSaveField": "Key"
26
+ }
27
+ ```
28
+
29
+ 动态 SQL 示例只选择必要字段并限制返回量:
30
+
31
+ ```json
32
+ {
33
+ "DataSource": "Sql",
34
+ "Sql": "select Id,Name from biz_customer where Name like '%$Keyword$%' limit 0,20",
35
+ "SelectLabel": "Name",
36
+ "SelectSaveField": "Id",
37
+ "DataSourceSqlRemote": true
38
+ }
39
+ ```
40
+
41
+ SQL 仍必须经过平台受控数据源;不要把用户文本拼成标识符或任意 SQL。复杂权限、
42
+ 跨库或外部服务使用数据源引擎/接口引擎。
43
+
44
+ ## 动态联动
45
+
46
+ 字段值变化时可用前端 V8 更新另一个字段的数据源:
47
+
48
+ ```javascript
49
+ if (V8.LoadMode === 'Design') return;
50
+
51
+ var result = await V8.FormEngine.GetTableData('biz_contact', {
52
+ _SelectFields: ['Id', 'Name'],
53
+ _Where: [['CustomerId', '=', V8.ThisValue]],
54
+ _PageIndex: 1,
55
+ _PageSize: 100
56
+ });
57
+
58
+ V8.FieldSet('ContactId', 'Data', result.Code === 1 ? result.Data : []);
59
+ ```
60
+
61
+ 前端联动不能替代后端权限和提交校验。
62
+
63
+ ## 表单生命周期
64
+
65
+ | 配置 | 运行端 | 用途 |
66
+ |---|---|---|
67
+ | `InFormV8` | 前端 | 默认值、字段显隐、初始化交互 |
68
+ | `SubmitFormV8` | 前端 | 即时校验;HTTP 直调不会触发 |
69
+ | `SubmitBeforeServerV8` | 后端事务内 | 最终校验、加工、阻止提交 |
70
+ | `SubmitAfterServerV8` | 后端事务内 | 同事务联动其它表 |
71
+ | `OutFormV8` | 前端 | 关闭后刷新/跳转 |
72
+ | `DataFilterV8` | 后端 | 每行脱敏/展示加工 |
73
+
74
+ 事件代码、版本和表单属性都必须从当前 `diy_table/diy_field` 回读。后端阻止提交:
75
+
76
+ ```javascript
77
+ if (!V8.Form.Name) return { Code: 0, Msg: '名称不能为空' };
78
+ ```
79
+
80
+ ## 字段属性
81
+
82
+ 常用属性包括 `Visible`、`AppVisible`、`Required`、`Readonly`、`Data`、
83
+ `Config`、`FormWidth`、`TableWidth`、`Tab`、角色绑定和前端事件代码。
84
+
85
+ - 除非明确隐藏,`Visible=1`、`AppVisible=1`。
86
+ - 角色绑定只缩小界面可见性,不能代替服务器数据权限。
87
+ - 修改防抖编辑器/代码字段前必须刷新待保存值,避免最后一次输入未入库。
88
+ - `Data/Config` 修改后回读并刷新 schema 缓存。
89
+
90
+ ### 历史字段 V8 双存储兼容
91
+
92
+ - `diy_field.V8Code` 是历史租户和官方应用包实际使用的物理列,按钮点击/字段值变更代码可能只存在于该列;`Config.V8Code` 是部分新版前端使用的镜像,不能假定它是唯一事实源。
93
+ - 后端 `DiyField` 实体、字段查询投影和 `DiyFieldParam` 必须保留 `V8Code`,否则数据库代码虽然仍在,设计器列表和单字段回读都会表现成“0 字”。
94
+ - 前端回读顺序固定为:先安全解码历史 Base64,再取“非空物理 `V8Code` 优先、否则 `Config.V8Code`”,最后同步两处。禁止用空镜像覆盖非空物理代码;保存和显式清空时则必须同步写入两处。
95
+ - 回归至少包含一个 `Component=Button`、根级 `V8Code` 非空而 `Config.V8Code` 为空的官方包字段,并验证列表回读、选中编辑、保存、刷新后代码仍完整。
96
+
97
+ ## DevComponent 定制组件
98
+
99
+ 定制组件至少处理:
100
+
101
+ - `value/modelValue` 的输入与变更通知;
102
+ - 当前字段模型、表单模型、表单模式和只读状态;
103
+ - 校验错误、清空、禁用、加载与销毁;
104
+ - Add/Edit/View 回显;
105
+ - PC、移动端和暗色主题;
106
+ - 组件内部请求的 Token/OsClient 传递与错误态。
107
+
108
+ 定制组件需要修改并发布主前端。若只服务单一租户、包含多个字段或复杂页面,
109
+ 优先创建 MicroService 页面,通过 `V8.OpenAppDialog` 与宿主交互。
110
+
111
+ 历史 Options API 定制组件可通过宿主 facade 调用数据源引擎:
112
+
113
+ ```javascript
114
+ this.Microi.DataSourceEngine.Run('customer_summary', { Id: customerId }, (result) => {
115
+ if (this.Microi.CheckResult(result)) {
116
+ this.summary = result.Data;
117
+ }
118
+ });
119
+ ```
120
+
121
+ `Microi.DataSourceEngine.Run` 是回调式宿主接口,`Microi.CheckResult` 负责按
122
+ DosResult 约定判断并展示错误。组件卸载后要阻止迟到回调继续写状态;新页面
123
+ 优先使用项目现有的组合式 facade,不要假定 `this.Microi` 在任意 Vue 组件中
124
+ 都存在。
@@ -1,141 +1,141 @@
1
- ---
2
- name: microi-left-right-layout
3
- description: Microi 吾码模块引擎“树形+表格/表单”左右结构配置规范。用于通过 MCP、模块引擎或源码配置 `diy_LeftJoinRightView`,把项目、分类、组织等主数据作为左树,并用主外键过滤右侧列表;覆盖字段语义、初始化 V8、移动端自适应、幂等写入和回读验收。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi 左右树表配置规范
9
-
10
- 当需求是“左侧按项目/分类导航,右侧显示该节点的数据列表或表单”时,使用模块组件 `/diy/left-right/LeftTreeJoinRightForm`,配置表为 `diy_LeftJoinRightView`。不要为每个业务菜单复制定制 Vue 页面。
11
-
12
- ## 适用与禁用场景
13
-
14
- - 适用:项目及其成品、用料、请购、提料、锁料、文档,分类及商品,组织及人员。
15
- - 左侧必须是稳定的主数据;右侧必须能通过明确的主外键过滤。
16
- - 左右两边没有关联字段、左侧仅是装饰性筛选,或数据量极大却没有分页/搜索方案时,不应直接套用。
17
-
18
- ## 模块配置
19
-
20
- 目标 `sys_menu` 必须配置:
21
-
22
- ```json
23
- {
24
- "ComponentName": "树形+表格",
25
- "ComponentPath": "/diy/left-right/LeftTreeJoinRightForm"
26
- }
27
- ```
28
-
29
- 同一菜单只能有一条有效的 `diy_LeftJoinRightView` 配置。创建前先按 `GuanlianCD Like 菜单Id` 回读并复用,禁止重复插入。
30
-
31
- ## `diy_LeftJoinRightView` 字段
32
-
33
- | 字段 | 必填 | 含义与写法 |
34
- | --- | --- | --- |
35
- | `GuanlianCD` | 是 | 当前右侧业务菜单链,JSON 数组;末级必须是当前 `sys_menu.Id`。 |
36
- | `ShuxingGLCD` | 是 | 左侧主数据菜单链,JSON 数组;末级对应左表模块。 |
37
- | `GuanlianBD` | 是 | 左侧主表名,例如 `xiangmuguanli`。 |
38
- | `FubiaoGLZD` | 是 | 左表参与关联的字段,通常为 `Id`。 |
39
- | `ZibiaoGLZD` | 右表格必填 | 右表外键,例如 `XiangmuID`、`ProjectId`、`Guid`。必须以实时表结构为准。 |
40
- | `GuanlianPPLJ` | 右表格必填 | 匹配操作符,普通主外键使用 `=`。 |
41
- | `ZuobianZSZJ` | 是 | 左侧组件,通常为 `树形控件`。 |
42
- | `YoubianZSZJ` | 是 | `表格`、`表单` 或 `表单/表格`。 |
43
- | `ShuxianSZDM` | 是 | 左树显示字段,必须与初始化结果的属性名一致。 |
44
- | `ChushiHDM` | 是 | 初始化 V8。必须读取 `V8.Form._PageIndex/_PageSize/inputText`,最终返回 `Data` 和 `DataCount`。 |
45
- | `ZuoyouXSZB` | 否 | 24 栅格比例,例如 `6/18`、`4/20`,中间 `/` 必须保留。 |
46
- | `ShubiaoT` | 否 | 左树标题,例如 `项目目录`。 |
47
- | `ShumoHSS` | 否 | 模糊搜索开关。 |
48
- | `ShuxiaLSS` | 否 | 搜索字段下拉开关。 |
49
- | `ShusouSAN` | 否 | 搜索按钮开关。 |
50
- | `ShushuaX` | 否 | 刷新按钮开关。 |
51
- | `ShudingJXZ` | 否 | 是否允许新增顶级树节点。 |
52
- | `ShuxinZ`、`ShubianJ`、`ShushanC` | 否 | 树节点新增、编辑、删除开关。只在业务允许时开启。 |
53
- | `ShujieDDJSJ` | 否 | 节点点击 V8;可读取 `V8.Form`,异步结果写入 `V8.Result`。 |
54
- | `YincangBSF` | 否 | 节点命中该字段时隐藏右侧区域。 |
55
- | `TanchuangLX`、`TanchuangDX` | 否 | 树节点维护弹窗类型和尺寸。 |
56
- | `LanjiaZ`、`LanjiaZDM` | 否 | 懒加载开关和代码;大树优先使用。 |
57
- | `DefaultExpandLevel` | 否 | 左树默认展开层级。未配置、空值或 `0` 均不展开;`1` 展开一级节点,`2` 再展开二级节点,以此类推。 |
58
-
59
- ## 初始化 V8 与分页契约
60
-
61
- 左树按数据表对待,默认每页 20 条,允许 10/20/50/100 条切换。无论当前只有多少数据,都不能用 `_PageSize:500` 一次拉完整主表。搜索时把页码重置为 1,并在服务端按关键字过滤后返回真实总数。
62
-
63
- 当初始化 V8 使用 `V8.FormEngine.GetTableTree/GetTableDataTree` 时,左侧来源 `diy_table.IsTree` 必须为 `1`,并显式配置真实存在的 `TreeParentField`(通常是 `ParentId`);否则接口会成功返回 `Code=0`,页面只显示“暂无数据”。应用包必须同时携带这两项表元数据,并在发布前通过真实树接口回读,不能只验收 `diy_LeftJoinRightView` 配置行。
64
-
65
- ```js
66
- var form = V8.Form || {};
67
- var pageIndex = Math.max(1, parseInt(form._PageIndex || 1, 10));
68
- var pageSize = Math.min(100, Math.max(1, parseInt(form._PageSize || 20, 10)));
69
- var keyword = String(form.inputText || '').trim();
70
- var query = {
71
- _SelectFields: ['Id', 'Code', 'Name'],
72
- _OrderBy: 'CreateTime',
73
- _OrderByType: 'DESC',
74
- _PageIndex: pageIndex,
75
- _PageSize: pageSize
76
- };
77
-
78
- if (keyword) {
79
- query._Where = [
80
- ['Code', 'Like', keyword],
81
- ['OR', 'Name', 'Like', keyword]
82
- ];
83
- }
84
-
85
- var result = await V8.FormEngine.GetTableData('xiangmuguanli', query);
86
-
87
- if (result.Code !== 1) {
88
- V8.Result = result;
89
- return;
90
- }
91
-
92
- V8.Result = {
93
- Code: 1,
94
- Data: (result.Data || []).map(function (item) {
95
- return {
96
- Id: item.Id,
97
- TreeTitle: [item.Code, item.Name].filter(Boolean).join(' '),
98
- Code: item.Code,
99
- Name: item.Name
100
- };
101
- }),
102
- DataCount: Number(result.DataCount || 0),
103
- PageIndex: pageIndex,
104
- PageSize: pageSize
105
- };
106
- ```
107
-
108
- 对应配置为 `ShuxianSZDM=TreeTitle`、`FubiaoGLZD=Id`。右侧新增时,组件会通过 `ParentDataAppend` 把父节点、父键和 `ZibiaoGLZD` 传给表格;业务字段仍需由表单事件兜底校验。
109
-
110
- 加载请求期间必须显示明确的“正在加载项目...”状态,不能先渲染“暂无数据”;多次搜索或翻页并发返回时,只应用最后一次请求,防止旧结果覆盖新页。
111
-
112
- ## MCP 实施顺序
113
-
114
- 1. 调用实时 Schema/模块查询,确认左右表、菜单 Id、主键、外键和已有配置。
115
- 2. 读取一个已正常运行的左右结构作为基线,只复用结构,不复制租户或业务字段。
116
- 3. 按当前菜单回读 `diy_LeftJoinRightView`;有记录则更新,无记录才新增。
117
- 4. 更新模块 `ComponentName`、`ComponentPath`,随后回读模块和配置行。
118
- 5. 验证“全部”、单节点切换、右表筛选、右侧新增自动关联、刷新和搜索。
119
-
120
- ## 移动端要求
121
-
122
- - `<=767px` 时不在列表上方直接堆放左树。右侧业务列表占满宽度,顶部显示当前项目和“项目目录”按钮。
123
- - 点击“项目目录”后,从左向右打开全高抽屉;推荐宽度 `88%`,保留一段遮罩用于快速关闭。抽屉必须支持关闭按钮、点击遮罩和 Esc 关闭。
124
- - 左树在抽屉内独立滚动,搜索、分页和每页条数选择都必须可操作;关闭抽屉后右表筛选状态不得丢失。
125
- - 右表与页面使用正常纵向滚动,禁止祖先容器 `overflow:hidden` 截断内容。
126
- - 右侧卡片、表格 Tab、列表卡片在移动端必须使用 `height:auto` 和 `overflow:visible`;底部操作栏不得盖住最后一条数据。
127
- - 至少验收桌面 1440x900、手机 390x844;在手机上分别滚动左树和整页到末尾。
128
-
129
- ## 验收清单
130
-
131
- - 当前菜单只匹配一条配置,模块路径正确。
132
- - 使用树接口的左表已启用 `IsTree=1`,`TreeParentField` 与物理父级字段一致。
133
- - 左树标题无 `undefined`、`{}`、空白重复项。
134
- - 点击“全部”清空右侧外键条件;点击节点只显示该节点数据。
135
- - 后端 `_HasChild=true` 表示可展开,Element Plus 的 `isLeaf` 必须映射为独立 `_IsLeaf=!_HasChild`,不得把 `_HasChild` 直接当叶子标记。
136
- - `DefaultExpandLevel` 未配置时必须保持全部折叠;只展开有子节点且深度不超过配置值的节点,不能把平台默认值改成一级展开。
137
- - 页面初始已处于“全部”时,再次点击“全部”不得先清空已加载列表;只清除树节点外键条件并避免重复请求。
138
- - 右侧新增数据自动写入正确外键,切换节点后不会串数据。
139
- - 普通用户不出现仅管理员可用的“页面配置”。
140
- - 桌面左树每页默认 20 条,可翻页并切换 10/20/50/100;加载时不出现错误的空状态。
141
- - 手机初始不显示树,抽屉打开/节点选择自动关闭/遮罩关闭均正常;列表与操作区可滚动到底,无横向挤压和固定高度裁切。
1
+ ---
2
+ name: microi-left-right-layout
3
+ description: Microi 吾码模块引擎“树形+表格/表单”左右结构配置规范。用于通过 MCP、模块引擎或源码配置 `diy_LeftJoinRightView`,把项目、分类、组织等主数据作为左树,并用主外键过滤右侧列表;覆盖字段语义、初始化 V8、移动端自适应、幂等写入和回读验收。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi 左右树表配置规范
9
+
10
+ 当需求是“左侧按项目/分类导航,右侧显示该节点的数据列表或表单”时,使用模块组件 `/diy/left-right/LeftTreeJoinRightForm`,配置表为 `diy_LeftJoinRightView`。不要为每个业务菜单复制定制 Vue 页面。
11
+
12
+ ## 适用与禁用场景
13
+
14
+ - 适用:项目及其成品、用料、请购、提料、锁料、文档,分类及商品,组织及人员。
15
+ - 左侧必须是稳定的主数据;右侧必须能通过明确的主外键过滤。
16
+ - 左右两边没有关联字段、左侧仅是装饰性筛选,或数据量极大却没有分页/搜索方案时,不应直接套用。
17
+
18
+ ## 模块配置
19
+
20
+ 目标 `sys_menu` 必须配置:
21
+
22
+ ```json
23
+ {
24
+ "ComponentName": "树形+表格",
25
+ "ComponentPath": "/diy/left-right/LeftTreeJoinRightForm"
26
+ }
27
+ ```
28
+
29
+ 同一菜单只能有一条有效的 `diy_LeftJoinRightView` 配置。创建前先按 `GuanlianCD Like 菜单Id` 回读并复用,禁止重复插入。
30
+
31
+ ## `diy_LeftJoinRightView` 字段
32
+
33
+ | 字段 | 必填 | 含义与写法 |
34
+ | --- | --- | --- |
35
+ | `GuanlianCD` | 是 | 当前右侧业务菜单链,JSON 数组;末级必须是当前 `sys_menu.Id`。 |
36
+ | `ShuxingGLCD` | 是 | 左侧主数据菜单链,JSON 数组;末级对应左表模块。 |
37
+ | `GuanlianBD` | 是 | 左侧主表名,例如 `xiangmuguanli`。 |
38
+ | `FubiaoGLZD` | 是 | 左表参与关联的字段,通常为 `Id`。 |
39
+ | `ZibiaoGLZD` | 右表格必填 | 右表外键,例如 `XiangmuID`、`ProjectId`、`Guid`。必须以实时表结构为准。 |
40
+ | `GuanlianPPLJ` | 右表格必填 | 匹配操作符,普通主外键使用 `=`。 |
41
+ | `ZuobianZSZJ` | 是 | 左侧组件,通常为 `树形控件`。 |
42
+ | `YoubianZSZJ` | 是 | `表格`、`表单` 或 `表单/表格`。 |
43
+ | `ShuxianSZDM` | 是 | 左树显示字段,必须与初始化结果的属性名一致。 |
44
+ | `ChushiHDM` | 是 | 初始化 V8。必须读取 `V8.Form._PageIndex/_PageSize/inputText`,最终返回 `Data` 和 `DataCount`。 |
45
+ | `ZuoyouXSZB` | 否 | 24 栅格比例,例如 `6/18`、`4/20`,中间 `/` 必须保留。 |
46
+ | `ShubiaoT` | 否 | 左树标题,例如 `项目目录`。 |
47
+ | `ShumoHSS` | 否 | 模糊搜索开关。 |
48
+ | `ShuxiaLSS` | 否 | 搜索字段下拉开关。 |
49
+ | `ShusouSAN` | 否 | 搜索按钮开关。 |
50
+ | `ShushuaX` | 否 | 刷新按钮开关。 |
51
+ | `ShudingJXZ` | 否 | 是否允许新增顶级树节点。 |
52
+ | `ShuxinZ`、`ShubianJ`、`ShushanC` | 否 | 树节点新增、编辑、删除开关。只在业务允许时开启。 |
53
+ | `ShujieDDJSJ` | 否 | 节点点击 V8;可读取 `V8.Form`,异步结果写入 `V8.Result`。 |
54
+ | `YincangBSF` | 否 | 节点命中该字段时隐藏右侧区域。 |
55
+ | `TanchuangLX`、`TanchuangDX` | 否 | 树节点维护弹窗类型和尺寸。 |
56
+ | `LanjiaZ`、`LanjiaZDM` | 否 | 懒加载开关和代码;大树优先使用。 |
57
+ | `DefaultExpandLevel` | 否 | 左树默认展开层级。未配置、空值或 `0` 均不展开;`1` 展开一级节点,`2` 再展开二级节点,以此类推。 |
58
+
59
+ ## 初始化 V8 与分页契约
60
+
61
+ 左树按数据表对待,默认每页 20 条,允许 10/20/50/100 条切换。无论当前只有多少数据,都不能用 `_PageSize:500` 一次拉完整主表。搜索时把页码重置为 1,并在服务端按关键字过滤后返回真实总数。
62
+
63
+ 当初始化 V8 使用 `V8.FormEngine.GetTableTree/GetTableDataTree` 时,左侧来源 `diy_table.IsTree` 必须为 `1`,并显式配置真实存在的 `TreeParentField`(通常是 `ParentId`);否则接口会成功返回 `Code=0`,页面只显示“暂无数据”。应用包必须同时携带这两项表元数据,并在发布前通过真实树接口回读,不能只验收 `diy_LeftJoinRightView` 配置行。
64
+
65
+ ```js
66
+ var form = V8.Form || {};
67
+ var pageIndex = Math.max(1, parseInt(form._PageIndex || 1, 10));
68
+ var pageSize = Math.min(100, Math.max(1, parseInt(form._PageSize || 20, 10)));
69
+ var keyword = String(form.inputText || '').trim();
70
+ var query = {
71
+ _SelectFields: ['Id', 'Code', 'Name'],
72
+ _OrderBy: 'CreateTime',
73
+ _OrderByType: 'DESC',
74
+ _PageIndex: pageIndex,
75
+ _PageSize: pageSize
76
+ };
77
+
78
+ if (keyword) {
79
+ query._Where = [
80
+ ['Code', 'Like', keyword],
81
+ ['OR', 'Name', 'Like', keyword]
82
+ ];
83
+ }
84
+
85
+ var result = await V8.FormEngine.GetTableData('xiangmuguanli', query);
86
+
87
+ if (result.Code !== 1) {
88
+ V8.Result = result;
89
+ return;
90
+ }
91
+
92
+ V8.Result = {
93
+ Code: 1,
94
+ Data: (result.Data || []).map(function (item) {
95
+ return {
96
+ Id: item.Id,
97
+ TreeTitle: [item.Code, item.Name].filter(Boolean).join(' '),
98
+ Code: item.Code,
99
+ Name: item.Name
100
+ };
101
+ }),
102
+ DataCount: Number(result.DataCount || 0),
103
+ PageIndex: pageIndex,
104
+ PageSize: pageSize
105
+ };
106
+ ```
107
+
108
+ 对应配置为 `ShuxianSZDM=TreeTitle`、`FubiaoGLZD=Id`。右侧新增时,组件会通过 `ParentDataAppend` 把父节点、父键和 `ZibiaoGLZD` 传给表格;业务字段仍需由表单事件兜底校验。
109
+
110
+ 加载请求期间必须显示明确的“正在加载项目...”状态,不能先渲染“暂无数据”;多次搜索或翻页并发返回时,只应用最后一次请求,防止旧结果覆盖新页。
111
+
112
+ ## MCP 实施顺序
113
+
114
+ 1. 调用实时 Schema/模块查询,确认左右表、菜单 Id、主键、外键和已有配置。
115
+ 2. 读取一个已正常运行的左右结构作为基线,只复用结构,不复制租户或业务字段。
116
+ 3. 按当前菜单回读 `diy_LeftJoinRightView`;有记录则更新,无记录才新增。
117
+ 4. 更新模块 `ComponentName`、`ComponentPath`,随后回读模块和配置行。
118
+ 5. 验证“全部”、单节点切换、右表筛选、右侧新增自动关联、刷新和搜索。
119
+
120
+ ## 移动端要求
121
+
122
+ - `<=767px` 时不在列表上方直接堆放左树。右侧业务列表占满宽度,顶部显示当前项目和“项目目录”按钮。
123
+ - 点击“项目目录”后,从左向右打开全高抽屉;推荐宽度 `88%`,保留一段遮罩用于快速关闭。抽屉必须支持关闭按钮、点击遮罩和 Esc 关闭。
124
+ - 左树在抽屉内独立滚动,搜索、分页和每页条数选择都必须可操作;关闭抽屉后右表筛选状态不得丢失。
125
+ - 右表与页面使用正常纵向滚动,禁止祖先容器 `overflow:hidden` 截断内容。
126
+ - 右侧卡片、表格 Tab、列表卡片在移动端必须使用 `height:auto` 和 `overflow:visible`;底部操作栏不得盖住最后一条数据。
127
+ - 至少验收桌面 1440x900、手机 390x844;在手机上分别滚动左树和整页到末尾。
128
+
129
+ ## 验收清单
130
+
131
+ - 当前菜单只匹配一条配置,模块路径正确。
132
+ - 使用树接口的左表已启用 `IsTree=1`,`TreeParentField` 与物理父级字段一致。
133
+ - 左树标题无 `undefined`、`{}`、空白重复项。
134
+ - 点击“全部”清空右侧外键条件;点击节点只显示该节点数据。
135
+ - 后端 `_HasChild=true` 表示可展开,Element Plus 的 `isLeaf` 必须映射为独立 `_IsLeaf=!_HasChild`,不得把 `_HasChild` 直接当叶子标记。
136
+ - `DefaultExpandLevel` 未配置时必须保持全部折叠;只展开有子节点且深度不超过配置值的节点,不能把平台默认值改成一级展开。
137
+ - 页面初始已处于“全部”时,再次点击“全部”不得先清空已加载列表;只清除树节点外键条件并避免重复请求。
138
+ - 右侧新增数据自动写入正确外键,切换节点后不会串数据。
139
+ - 普通用户不出现仅管理员可用的“页面配置”。
140
+ - 桌面左树每页默认 20 条,可翻页并切换 10/20/50/100;加载时不出现错误的空状态。
141
+ - 手机初始不显示树,抽屉打开/节点选择自动关闭/遮罩关闭均正常;列表与操作区可滚动到底,无横向挤压和固定高度裁切。