@microi.net/cli 5.8.5 → 5.8.7

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 (208) 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/LICENSE +21 -21
  7. package/README.md +71 -71
  8. package/assets/build-meta.json +7 -7
  9. package/assets/feature-matrix.json +138 -138
  10. package/assets/logo.svg +4 -4
  11. package/cordis.patch.yml +1 -1
  12. package/package.json +1 -1
  13. package/scripts/mcp-codex-stdio-adapter.js +0 -0
  14. package/scripts/mcp-server.js +1 -1
  15. package/scripts/microi-cli.js +66 -65
  16. package/scripts/microi-codex-broker.js +450 -450
  17. package/scripts/microi-codex-router.js +618 -618
  18. package/scripts/microi-skills.meta.json +384 -384
  19. package/skills/.microi-skills-version.json +2 -2
  20. package/skills/.progressive-disclosure-manifest.json +21 -21
  21. package/skills/README.md +287 -287
  22. package/skills/ai-engine/SKILL.md +269 -265
  23. package/skills/ai-engine/agents/openai.yaml +4 -4
  24. package/skills/ai-engine/references/ai-employees.md +48 -48
  25. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  26. package/skills/ai-platform-governance/SKILL.md +177 -177
  27. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  28. package/skills/app-store/SKILL.md +525 -525
  29. package/skills/app-store/agents/openai.yaml +4 -4
  30. package/skills/business-blueprint/SKILL.md +193 -193
  31. package/skills/datasource-engine/SKILL.md +93 -93
  32. package/skills/datasource-engine/agents/openai.yaml +4 -4
  33. package/skills/dos-orm/SKILL.md +97 -95
  34. package/skills/dos-orm/references/api-reference.md +229 -229
  35. package/skills/email-engine/SKILL.md +81 -81
  36. package/skills/email-engine/references/v8-email.md +34 -34
  37. package/skills/job-engine/SKILL.md +176 -176
  38. package/skills/job-engine/agents/openai.yaml +4 -4
  39. package/skills/message-notification/SKILL.md +156 -156
  40. package/skills/message-notification/agents/openai.yaml +5 -5
  41. package/skills/message-notification/references/contracts.md +102 -102
  42. package/skills/microi/SKILL.md +14 -14
  43. package/skills/microi-ai-app-auth.js +652 -652
  44. package/skills/microi-ai-application/SKILL.md +115 -115
  45. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  46. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  47. package/skills/microi-client-frontend/SKILL.md +246 -244
  48. 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 +144 -144
  49. 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 +196 -196
  50. 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 +167 -167
  51. package/skills/microi-codex/SKILL.md +102 -100
  52. package/skills/microi-codex-installer/SKILL.md +231 -231
  53. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  54. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  55. package/skills/microi-db-schema/SKILL.md +175 -175
  56. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  57. package/skills/microi-db-schema/references/core-tables.md +695 -695
  58. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  59. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  60. package/skills/microi-db-schema/references/schema.md +646 -646
  61. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  62. package/skills/microi-deployment/SKILL.md +222 -220
  63. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  64. package/skills/microi-docs-coverage/SKILL.md +133 -133
  65. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  66. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  67. package/skills/microi-form-engine/SKILL.md +333 -333
  68. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  69. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  70. package/skills/microi-form-layout/SKILL.md +205 -205
  71. package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
  72. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  73. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
  74. package/skills/microi-left-right-layout/SKILL.md +141 -141
  75. package/skills/microi-microservice/SKILL.md +328 -326
  76. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  77. package/skills/microi-mobile-app-quality/SKILL.md +185 -185
  78. package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
  79. package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
  80. package/skills/microi-solution-quotation/SKILL.md +78 -78
  81. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  82. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  83. package/skills/microi-sso/SKILL.md +96 -90
  84. package/skills/microi-sso/references/acceptance.md +49 -49
  85. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  86. package/skills/microi-sso/references/inbound.md +53 -53
  87. package/skills/microi-sso/references/outbound.md +39 -39
  88. package/skills/microi-system-delivery/SKILL.md +137 -137
  89. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
  90. 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 +217 -217
  91. package/skills/microi-ui/SKILL.md +192 -192
  92. package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
  93. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  94. package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -225
  95. package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
  96. package/skills/microi.v8.js +1921 -1921
  97. package/skills/module-engine/SKILL.md +255 -255
  98. package/skills/module-engine/references/module-config.md +204 -204
  99. package/skills/ocr-engine/SKILL.md +113 -113
  100. package/skills/ocr-engine/agents/openai.yaml +4 -4
  101. package/skills/page-engine/SKILL.md +206 -206
  102. package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
  103. 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 +234 -234
  104. 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 +60 -60
  105. package/skills/performance-testing/SKILL.md +221 -221
  106. package/skills/playwright-e2e/SKILL.md +196 -196
  107. package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
  108. package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
  109. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  110. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  111. package/skills/print-engine/SKILL.md +259 -259
  112. package/skills/production-readonly-audit/SKILL.md +41 -41
  113. package/skills/report-engine/SKILL.md +71 -71
  114. package/skills/report-engine/agents/openai.yaml +4 -4
  115. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  116. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  117. package/skills/scripts/sync-embedded-skills.mjs +46 -46
  118. package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
  119. package/skills/search-engine/SKILL.md +75 -75
  120. package/skills/search-engine/agents/openai.yaml +4 -4
  121. package/skills/spider-engine/SKILL.md +190 -190
  122. package/skills/system-observability/SKILL.md +249 -246
  123. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  124. package/skills/translate-engine/SKILL.md +140 -140
  125. package/skills/translate-engine/agents/openai.yaml +4 -4
  126. package/skills/ui-design/SKILL.md +223 -223
  127. package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
  128. package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
  129. package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
  130. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  131. package/skills/ui-design/references/design-pattern-library.md +184 -184
  132. package/skills/ui-design/references/mci-design-contract.md +163 -163
  133. package/skills/ui-design/references/motion-and-media.md +78 -78
  134. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  135. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
  136. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  137. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
  138. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
  139. package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
  140. package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
  141. package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
  142. package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
  143. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  144. package/skills/unity-integration/SKILL.md +171 -171
  145. package/skills/unity-integration/agents/openai.yaml +4 -4
  146. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  147. package/skills/unity-integration/references/sdk-api.md +82 -82
  148. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  149. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  150. package/skills/v8-api-config/SKILL.md +388 -388
  151. package/skills/v8-cache-pattern/SKILL.md +312 -312
  152. package/skills/v8-crud-api/SKILL.md +178 -178
  153. package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
  154. package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
  155. package/skills/v8-debugging/SKILL.md +284 -284
  156. package/skills/v8-explorer-tree/SKILL.md +228 -228
  157. package/skills/v8-export-import/SKILL.md +219 -219
  158. package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
  159. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  160. package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
  161. package/skills/v8-file-upload/SKILL.md +284 -284
  162. package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +263 -263
  163. package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +161 -161
  164. package/skills/v8-formengine-http/SKILL.md +238 -238
  165. package/skills/v8-frontend-events/SKILL.md +180 -180
  166. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  167. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  168. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  169. package/skills/v8-http-integration/SKILL.md +182 -182
  170. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  171. package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
  172. package/skills/v8-image-processing/SKILL.md +190 -190
  173. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  174. package/skills/v8-image-processing/references/api-reference.md +623 -623
  175. package/skills/v8-menu-buttons/SKILL.md +186 -186
  176. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
  177. package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
  178. package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
  179. package/skills/v8-mongodb/SKILL.md +200 -200
  180. package/skills/v8-mq-mqtt/SKILL.md +176 -176
  181. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  182. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  183. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  184. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  185. package/skills/v8-security/SKILL.md +210 -210
  186. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  187. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  188. package/skills/v8-sql-query/SKILL.md +302 -302
  189. package/skills/v8-table-event/SKILL.md +176 -176
  190. package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -216
  191. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
  192. package/skills/v8-tcp-integration/SKILL.md +147 -147
  193. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  194. package/skills/v8-template-engine/SKILL.md +167 -167
  195. package/skills/v8-utilities/SKILL.md +104 -104
  196. package/skills/v8-utilities/references/client-api-index.md +143 -143
  197. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  198. package/skills/v8-utilities/references/server-api-index.md +188 -188
  199. package/skills/v8-workflow/SKILL.md +252 -252
  200. package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
  201. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  202. package/skills/vision-engine/SKILL.md +160 -160
  203. package/skills/vision-engine/agents/openai.yaml +4 -4
  204. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  205. package/skills/workspace-conventions/SKILL.md +273 -273
  206. 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 +209 -209
  207. 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 +217 -217
  208. 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 +27 -27
@@ -1,205 +1,205 @@
1
- ---
2
- name: microi-form-layout
3
- description: Microi 吾码低代码表单布局分组规范。用于通过 MCP、Manifest、VS Code 插件或 V8 引擎创建/优化 `diy_table` 和 `diy_field` 时,决定使用 `diy_table.Tabs` 表单全局 Tab、字段级 `Tabs` 控件、字段级 `CollapseGroup` 折叠分组,还是直接平铺字段。覆盖"何时分 Tab、何时分折叠分组、有效表单行判断阈值、JSON 配置示例、回读验收与回滚"。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi 表单布局分组规范(Tabs vs CollapseGroup)
9
-
10
- Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明确的使用场景。**AI 必须先按本规范评估,再决定如何分组**,禁止盲目创建 Tab。
11
-
12
- 本 Skill 中的 Tabs、CollapseGroup、Divider 是编辑表单布局。模块级 Detail/Edit/List/Card 跨端视图必须配置在 `sys_menu.ViewSchema` 物理字段中;EntityHero、MetricStrip、ActionGrid、ResponsiveSection 属于独立视图区块,不得伪装成 `diy_field`。三个核心表的 `DiyConfig` 均已废弃,禁止作为新布局或新功能配置入口。
13
-
14
- 控件事实源:`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json` 中 `Sort=1000` 附近的 `Divider`、`CollapseGroup`、`Tabs`、`Alert`、`StaticText`、`Html`、`RichText` 等都属于 Advanced 布局控件。
15
-
16
- 全局遮罩毛玻璃使用正向开关 `sys_config.FormMaskBlur`:缺失、空值或 `0/false` 默认关闭,只有显式 `1/true` 才开启。表级仍使用负向开关 `diy_table.DisableFormMaskBlur`;全局开启后,某张表显式 `1/true` 可单独关闭。旧全局字段 `sys_config.DisableFormMaskBlur` 只作未升级租户兼容回退,元数据必须设置 `Visible=0`、`AppVisible=0`,不得同时向用户展示两套开关。
17
-
18
- 表单打开方式与分组是两个独立决策:新表默认 `FormOpenType=Dialog`、
19
- `FormOpenWidth=80%`。只有约 36 个以上业务字段、至少 2 个大型子表,或同等密度的重型控件
20
- 才评估 Drawer;不能用 Drawer 代替 Tabs/CollapseGroup 的信息架构。Dialog 统一使用居中、可拖动、
21
- 大圆角弹层;Drawer 贴边且不使用大圆角。
22
-
23
- `CollapseGroup` 的运行态视觉统一使用清爽的白色/主题表面卡片:短主题色指示条、紧凑
24
- 标题、可选图标、单行副标题、标题旁轻量 `x 项` 文案,以及最右侧无底色的折叠箭头。
25
- 不得使用整块主题色填充、蓝色大描边或醒目的实心数量胶囊;分组内容与标题属于同一张
26
- 卡片,展开后不再嵌套第二套外框。深色模式使用 Element 主题变量,不能写死白色/蓝色。
27
-
28
- ## 配置类表单的二级分组硬规则
29
-
30
- - `sys_config`、`sys_user`、SaaS 设置、接口参数、打印/工作流设置等“配置类表单”不能因为已经有表级 Tab 就停止信息架构审计。表级 Tab 只负责一级领域;同一 Tab 内存在 **7 个以上可见设置**或 **2 个以上明确语义域**时,必须继续按语义放入 `CollapseGroup`。
31
- - 水印、主题、菜单、登录入口、安全策略、桌面偏好等一组相互关联的开关/参数必须由一个带图标、说明、计数的 CollapseGroup 包裹;不能把 5~20 个设置直接平铺在 Tab 中,也不能让每个小设置单独占一个 Tab。
32
- - 新增设置字段时必须同时审计所在 Tab 的现有字段,而不只是包住本次新增字段。若相邻设置已形成稳定语义域,应一次性补齐该域的 CollapseGroup;隐藏兼容字段继续保留但不计入可见项数。
33
- - 配置表采用“表级 Tab + Tab 内 CollapseGroup”时,CollapseGroup 必须与成员字段写入同一个 `Tab`,并用连续 `Sort` 保证作用范围在下一个布局节点前结束。发布前必须打开真实编辑表单验证,不能只凭元数据字符串判断布局成功。
34
-
35
- <!-- microi-progressive:begin -->
36
- <!-- microi-progressive:chunk id=microi-form-layout-000 sha256=cade6a415454aa04f5fcf840e6d9df1323ac9751c0e3c8e1b07b360007413819 -->
37
- ## 1. 三种分组能力速查
38
-
39
- | 能力 | 存储位置 | 控件 | 核心作用 | 适用场景 |
40
- |------|---------|------|---------|---------|
41
- | **A. diy_table.Tabs(表级 Tab)** | `diy_table.Tabs`(JSON 字符串) | 表单顶部 Tab 条 | 把整张表的字段切到不同 Tab 中,**同屏只能看一个 Tab** | 表单整体很长,单个 Tab 通常占 **≥6 个有效表单行**,且 Tab 之间字段**业务强隔离**(扫码操作 vs 单据信息、主数据 vs 大型子表) |
42
- | **B. 字段级 Tabs 控件** | `diy_field.Component='Tabs'` + `Config.FieldTabs` | 字段本身就是 Tab 容器 | 多个 Tab 字段组合嵌套,**同屏只能看一个 Tab** | 同一张表内需要二级 Tab,或 Tab 内容互相独立 |
43
- | **C. 字段级 CollapseGroup(折叠分组)** | `diy_field.Component='CollapseGroup'` + `Config.CollapseGroup` | 字段是折叠面板标题 | **所有分组可在同一页面展开**,用户一屏看到全部标题和分组字段 | 只占 **≤5 个有效表单行** 的小分组(短字段即使有 8~10 个,也常只占 4~5 行) |
44
- | **D. 不分组(默认平铺)** | 无 | — | 全部字段在第一屏 | 总有效表单行 ≤ 6、没有复杂控件,且没有必须强调的业务分组 |
45
-
46
- <!-- /microi-progressive:chunk -->
47
- <!-- microi-progressive:chunk id=microi-form-layout-001 sha256=f43f8c6f1c156ef3669f0c1f9a9d9d2cb7baf630d0b0cb2f48307a31f3f82ae2 -->
48
- ## 2. 黄金决策流程(AI 必须按此顺序判断)
49
-
50
- ### 2.1 先算“有效表单行”,禁止只数字段
51
-
52
- 字段数不能直接代表视觉高度。AI 必须按 `diy_table.Column` 估算每组字段占用的有效表单行:
53
-
54
- - 普通 Text / Select / NumberText / DateTime 等短控件:占 `1 / Column` 行;双列布局中 8 个短字段约为 4 行。
55
- - `FormWidth=24` 或 Textarea / RichText / FileUpload / ImgUpload / Map:每个至少占 1 行。
56
- - TableChild / CodeEditor / DevComponent / 大型 JsonTable:视为独立任务区,不能按普通字段数压缩。
57
- - 隐藏字段、Id、纯布局控件不计入视觉行数,但必须保留其排序和业务配置。
58
-
59
- **一级字段数门槛**:`<=6` 个核心可见字段优先平铺;`7~29` 个字段按基础、业务、状态、附件等信息域使用 CollapseGroup;`30+` 个字段优先评估表级 Tabs。字段数只是一级门槛,仍须结合下方“有效表单行”和任务隔离判断。
60
-
61
- **表级 Tab 的默认准入条件**:除 `30+` 字段外,表单总有效行通常大于 12 行,并且至少两个 Tab 各自达到 6 个有效行;否则优先平铺或 CollapseGroup。多个大型子表,或扫码、代码编辑、运行测试等强任务域,可以直接进入 Tabs 评估;字段达到 8 个不再自动获得独立 Tab 资格。
62
-
63
- **强任务隔离例外**:扫码/报工/质检操作区、可独立滚动的大型子表、运行测试、代码编辑、工作流事件等即使行数较少,也可以保留 Tab,因为切换代表任务模式而不是装饰性分组。
64
-
65
- ```
66
- 开始
67
- ↓
68
- Q1: 核心可见字段数、子表和强任务域?
69
- ├─ ≤ 6 字段且无复杂控件 → D. 不分组(默认平铺)
70
- ├─ 7 ~ 29 字段且无多个大型子表/强任务域 → 按信息域使用 C. CollapseGroup
71
- └─ ≥ 30 字段,或多个大型子表/强任务域 → 优先评估 A. diy_table.Tabs
72
- ↓
73
- Q2: 是否至少有两个需要切换的独立业务域?
74
- ├─ 否 → D. 平铺,或用 CollapseGroup 收起次要字段
75
- └─ 是
76
- ↓
77
- Q3: 每个业务域的有效表单行数?
78
- ├─ 至少两个业务域均 ≥ 6 行 → A. diy_table.Tabs(表级 Tab)
79
- └─ 存在 ≤ 5 行的小业务域
80
- ↓
81
- 混合方案:Tab 容纳大业务域(≥6 个有效行)+ CollapseGroup 收起小业务域(≤5 个有效行)
82
- ↓
83
- 注意:所有 Tab 内的 ≤5 个有效行小业务域,必须用 CollapseGroup 折叠分组
84
- ```
85
-
86
- **简明决策表**:
87
-
88
- | 场景 | 推荐方案 | 禁止做法 |
89
- |------|---------|---------|
90
- | 13 字段双列表单 + 3 个小业务域(2/9/2 个字段) | 3 个 CollapseGroup,核心业务组默认展开 | 禁止建立 3 个 Tab;9 个短字段通常只有 4.5 行,仍不足以独占一页 |
91
- | 13 字段表 + 1 个"MRP 运算"子集(3 字段) | C. CollapseGroup 折叠"MRP 运算"分组,剩余 10 字段平铺 | 禁止用 diy_table.Tabs 拆出"MRP 运算"Tab(用户必须点击切换才能看到 3 个字段) |
92
- | 35 字段表 + 4 个业务域(10/8/9/8) | A. diy_table.Tabs(4 个 Tab) | 禁止把每个 Tab 内 ≤5 字段的"备注/其他"再开 Tab |
93
- | 42 字段表 + 5 个业务域(14/13/6/5/4) | A. diy_table.Tabs(5 个 Tab),后两个 Tab 内用 C. CollapseGroup 收次要字段 | 禁止为了 4~5 字段"审核信息"单独建 Tab |
94
- | 8 字段简单登记表 | D. 不分组 | 禁止任何 Tab/折叠 |
95
- | 工作流审批表(≤10 字段) | D. 不分组 | 禁止使用 Tab |
96
-
97
- <!-- /microi-progressive:chunk -->
98
- <!-- microi-progressive:chunk id=microi-form-layout-002 sha256=9165f561ba90696ce130d24f71a0e56c521b5f8935eac2ddcffb852f3af5d9b2 -->
99
- ## 4. AI 生成表单布局的标准动作
100
-
101
- ### 4.1 必做顺序
102
-
103
- 1. **先数字段**:调用 `microi_get_field_list` 拉出全部字段,统计**有效字段数**(排除 `Visible=0` 隐藏字段、`Id`、系统字段)。
104
- 2. **再分业务域**:用 `Sort` 顺序浏览字段,把字段聚类到 2~5 个业务域(基础信息 / 业务明细 / 业主/组织 / 财务 / 附件备注 / 状态 / 时间 / 其他)。
105
- 3. **算每个域有效表单行**:A. 大于等于 6 行且存在强隔离价值 → Tab;B. 小于等于 5 行 → CollapseGroup;C. 等于 0 → 删除该域。
106
- 4. **决定顶层方案**:A. 全 Tab / B. Tab+CollapseGroup 混合 / C. 全 CollapseGroup / D. 平铺。
107
- 5. **写配置**:先写 `diy_table.Tabs`(若有 Tab),再逐字段写 `Tab` 归属;新增 `Component=CollapseGroup/Tabs/Divider/Alert` 等布局节点时,只能使用明确标注为“仅元数据”的布局专用路径,不能使用会同步建业务列的普通新增字段接口。
108
- 6. **回读验收**:调用 `microi_get_field_list` 回读,确认 `Tab` 字段、`Sort`、`Component`、`Config.FieldTabs` / `Config.CollapseGroup` JSON 正确。
109
- 7. **V8 完整性校验**:修改前后比较表级六类 V8 事件、字段 `V8Code/KeyupV8Code/Config`;布局迁移不得覆盖业务代码。若代码出现 `HideFormTab/ShowFormTab/ClickFormTab`,必须先适配或跳过该表。
110
- 8. **清缓存**:`microi_refresh_schema_cache tables=['表名']`,避免前端看到旧配置。
111
-
112
- ### 4.2 存量表自动审计与安全迁移
113
-
114
- 当用户要求“检查所有表单设计”时,AI 必须执行自动化盘点,不能只修截图中的一张表:
115
-
116
- 1. 读取所有 `diy_table.Tabs`,排除只有一个 `none` 默认页签的表。
117
- 2. 一次性读取候选表的 `diy_field`,按 `Tab + Sort + Component + FormWidth + Visible` 计算每组有效行数。
118
- 3. 保留扫码、报工、质检操作、大型子表、代码编辑、运行测试等强任务 Tab。
119
- 4. 将“总有效行 ≤12、每组 ≤5 行、无复杂控件、无 Tab 控制 V8”的表列为高置信迁移候选。
120
- 5. 修改前记录 `Tabs`、字段 `Tab/Sort/Component/Config/V8Code/KeyupV8Code` 和表级 V8 摘要;修改后逐项回读,业务代码摘要必须一致。
121
- 6. 迁移为 CollapseGroup 时,只能通过布局专用的“仅元数据”路径新增布局节点,再清空原字段 `Tab` 和表级 `Tabs`;不得重建业务字段,不得改数据源、必填、只读、默认值或 V8。普通新增字段可能触发物理 DDL,严禁把通用 `AddFormData(diy_field)` 或普通字段创建接口当作元数据写入捷径。
122
- 7. 平台控制面、安全表和存在歧义的业务表只报告,不自动批量迁移。
123
-
124
- ### 4.3 后端实现备忘
125
-
126
- 后端表结构(`diy_table`):
127
- - `Tabs` 字段:JSON 字符串,存表级 Tab 列表。
128
- - `TabsPosition` 字段:top / bottom / left / right。
129
- - `TableTabs` / `TableTabsPosition`:表格视图的 Tab,与表单 Tab 独立。
130
- - `FormArticle` / `TableArticle`:表单/表格的说明文案(不是 Tab)。
131
-
132
- 后端字段结构(`diy_field`):
133
- - `Tab` 字段:归属 Tab 名(与 `diy_table.Tabs.Id` 对应)。
134
- - `Component = Tabs` / `CollapseGroup` / `Divider` / `Alert` 等 Advanced 控件,作为布局节点。
135
- - `Config` 字段:JSON 字符串,存 `FieldTabs` / `CollapseGroup` 等子配置。
136
-
137
- V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.ClickFormTab('tabId')` 动态控制 Tab 显隐和默认选中。
138
-
139
- <!-- /microi-progressive:chunk -->
140
- <!-- microi-progressive:chunk id=microi-form-layout-003 sha256=8da3bfbd34b7890c3796c47f71c7f4ccef13f16e5da48c3a0a0e111f22fe150a -->
141
- ## 5. 必填与禁止
142
-
143
- ### 5.1 必填
144
-
145
- - 字段数 13~30 的表单,必须有可见的**业务分组**(Tab 或 CollapseGroup 二选一),不能让用户上下滚动 5 屏找字段。
146
- - 创建 CollapseGroup 分组时,必须设置 `Icon`(如 `fas fa-calculator` / `fas fa-info-circle`),不要默认空白。
147
- - 任何 Tab / CollapseGroup 都必须有 `Description` 解释分组用途,不要只放一个标题。
148
- - 每个 CollapseGroup 必须回读到 `FormWidth=24`;`Config.CollapseGroup.ShowFieldCount` 默认必须为 `true`。
149
- - 可扩展配置表或设置页的末尾 CollapseGroup 不得无边界使用 `ScopeMode=UntilNextGroup`。已知标准子项数量时必须改用 `ScopeMode=FieldCount` 并显式保存准确 `FieldCount`;否则必须增加后续分组边界,避免未来新增字段或租户扩展字段被末尾分组误吞。
150
- - 表级 Tab 与 CollapseGroup 的 `Description` 作为副标题显示;开启计数时统一追加 `x 项`,禁止继续显示 `x 个字段`。运行时动态显隐字段后必须重算计数,已有数字角标配置继续生效,不能被静态字段数覆盖。
151
- - 分组/Tab 的字段计数必须基于字段原始可见性(如 `_baseIsShow`),不能把“当前因折叠而隐藏”误判成不可见,否则收起后的分组会错误显示 `0 项`。
152
- - 表级分组方向完整支持 `TabsPosition=left/top/right/bottom`;每个方向都要检查标题、副标题、动态角标和选中指示线,纵向指示线端点固定为直角。
153
- - 修改 `diy_table.Tabs` 或 `diy_field.Tab` / `Config.CollapseGroup` / `Config.FieldTabs` 后,必须调用 `microi_refresh_schema_cache`。
154
- - Tab 内嵌套 CollapseGroup 时,CollapseGroup 必须设 `DefaultCollapsed=true`(默认收起),避免 Tab 内继续被折叠分组抢首屏空间。
155
- - 新增布局节点后必须同时回读 `diy_field` 元数据和目标业务表结构,确认没有新增物理业务列;若当前工具不提供仅元数据能力,只报告设计建议,不得绕过后端直接写表。
156
-
157
- ### 5.2 禁止
158
-
159
- - ❌ **禁止**为 ≤5 个有效表单行的业务域单独创建 Tab(必须改用 CollapseGroup);8~10 个双列短字段通常仍属于此范围。
160
- - ❌ **禁止**仅凭 13~30 个原始字段决定平铺或分 Tab;总有效行超过 6 且存在明确业务域时,至少使用 CollapseGroup 分组。
161
- - ❌ **禁止**为 8~10 字段的简单业务表创建多层 Tab 嵌套(直接用 CollapseGroup 即可)。
162
- - ❌ **禁止**在用户没有要求时使用 `Tabs` 字段控件(`diy_field.Component='Tabs'`),更优先用 `diy_table.Tabs`。
163
- - ❌ **禁止**让 `CollapseGroup.FormWidth` 为空或依赖表默认列宽;CollapseGroup 默认必须显式保存 `FormWidth=24`。Tabs / Divider / Alert 继续按各自运行时规范处理。
164
- - ❌ **禁止**只创建 Tab 不写字段的 `Tab` 归属(每个 Tab 必须有至少 1 个非空 `Tab` 的字段)。
165
- - ❌ **禁止**用 Tabs 控件的 `FieldCount` 跨过 CollapseGroup 或 Divider 计数(不同布局控件的计数是隔离的)。
166
- - ❌ **禁止**把高频访问的字段(如单据编号、项目名称)放进默认收起的 CollapseGroup。
167
- - ❌ **禁止**用普通新增字段或通用表单数据写入创建布局节点;这类路径可能对目标业务表执行物理 DDL。
168
-
169
- <!-- /microi-progressive:chunk -->
170
- <!-- microi-progressive:chunk id=microi-form-layout-004 sha256=539ae919554ca9eda5b5a26ac405181f601f4195f6a59baf1fd368d315987e6c -->
171
- ## 6. 验收清单
172
-
173
- 修改或新建表单布局后,AI 必须按以下顺序验收:
174
-
175
- 1. **回读字段**:`microi_get_field_list` 检查 `Tab` / `Component` / `Config` 与设计一致。
176
- CollapseGroup 还必须检查 `FormWidth=24`、`Config.CollapseGroup.ShowFieldCount=true`(除非用户明确覆盖)。
177
- 2. **回读表与结构**:`microi_get_table_data _SelectFields=['Id'] _PageSize=1` 验证表可读,并检查实时表结构未因纯布局节点新增物理业务列。
178
- 3. **清缓存**:`microi_refresh_schema_cache tables=['表名']`。
179
- 4. **手动打开表单**:通过 Playwright 或 V8 引擎调用,截图第一屏。
180
- 5. **视觉确认**:
181
- - 第一屏必须能看到核心业务信息,通常至少 6~10 个短字段或一个完整任务区(而不是 2~3 个字段加大片空白)。
182
- - Tab 或 CollapseGroup 标题与说明文字清晰可见。
183
- - 没有任何"只剩 1 个字段的 Tab"。
184
- 6. **业务闭环**:新建一条测试数据、编辑、查看、删除,验证字段在正确分组中显示。
185
-
186
- 若“表单设计器能看到、真实新增/编辑/查看表单看不到”,必须先读取表级 `InFormV8`
187
- 以及相关字段 V8,搜索 `V8.FieldSet`、`hideField`、`Visible=false`、`HideFields`。设计模式
188
- 通常跳过这些运行态事件;未完成这一步不得直接判定为 Microi.Client 渲染缺陷。
189
-
190
- <!-- /microi-progressive:chunk -->
191
- <!-- microi-progressive:chunk id=microi-form-layout-005 sha256=db6759bef83e520e5f137347070f85df1275e14dcbc742bebfdaac4da14be375 -->
192
- ## 9. 与其他 Skill 的关系
193
-
194
- - 字段创建流程:`v8-table-event/SKILL.md` 写 InFormV8 / SubmitFormV8 等。
195
- - 外键 Id+Name 双字段:`ui-design/SKILL.md` 中的"外键字段必须使用 Id+Name 双控件设计"。
196
- - 整行控件规则:`microi-system-delivery/SKILL.md` 中 `FormWidth=24` 的使用条件。
197
- - 表单设计器与按钮:`v8-menu-buttons/SKILL.md`。
198
- - V8 事件 Tab 显隐 API:`v8-table-event/SKILL.md` 中 `V8.HideFormTab` / `V8.ShowFormTab` / `V8.ClickFormTab`。
199
- <!-- /microi-progressive:chunk -->
200
- ## 详细参考路由(渐进披露)
201
-
202
- 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
203
-
204
- - [references/progressive-01-3-三种分组的存储与配置.md](references/progressive-01-3-三种分组的存储与配置.md):3. 三种分组的存储与配置;7. 反例参考(必须避免);8. 快速参考代码片段
205
- <!-- microi-progressive:end -->
1
+ ---
2
+ name: microi-form-layout
3
+ description: Microi 吾码低代码表单布局分组规范。用于通过 MCP、Manifest、VS Code 插件或 V8 引擎创建/优化 `diy_table` 和 `diy_field` 时,决定使用 `diy_table.Tabs` 表单全局 Tab、字段级 `Tabs` 控件、字段级 `CollapseGroup` 折叠分组,还是直接平铺字段。覆盖"何时分 Tab、何时分折叠分组、有效表单行判断阈值、JSON 配置示例、回读验收与回滚"。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi 表单布局分组规范(Tabs vs CollapseGroup)
9
+
10
+ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明确的使用场景。**AI 必须先按本规范评估,再决定如何分组**,禁止盲目创建 Tab。
11
+
12
+ 本 Skill 中的 Tabs、CollapseGroup、Divider 是编辑表单布局。模块级 Detail/Edit/List/Card 跨端视图必须配置在 `sys_menu.ViewSchema` 物理字段中;EntityHero、MetricStrip、ActionGrid、ResponsiveSection 属于独立视图区块,不得伪装成 `diy_field`。三个核心表的 `DiyConfig` 均已废弃,禁止作为新布局或新功能配置入口。
13
+
14
+ 控件事实源:`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json` 中 `Sort=1000` 附近的 `Divider`、`CollapseGroup`、`Tabs`、`Alert`、`StaticText`、`Html`、`RichText` 等都属于 Advanced 布局控件。
15
+
16
+ 全局遮罩毛玻璃使用正向开关 `sys_config.FormMaskBlur`:缺失、空值或 `0/false` 默认关闭,只有显式 `1/true` 才开启。表级仍使用负向开关 `diy_table.DisableFormMaskBlur`;全局开启后,某张表显式 `1/true` 可单独关闭。旧全局字段 `sys_config.DisableFormMaskBlur` 只作未升级租户兼容回退,元数据必须设置 `Visible=0`、`AppVisible=0`,不得同时向用户展示两套开关。
17
+
18
+ 表单打开方式与分组是两个独立决策:新表默认 `FormOpenType=Dialog`、
19
+ `FormOpenWidth=80%`。只有约 36 个以上业务字段、至少 2 个大型子表,或同等密度的重型控件
20
+ 才评估 Drawer;不能用 Drawer 代替 Tabs/CollapseGroup 的信息架构。Dialog 统一使用居中、可拖动、
21
+ 大圆角弹层;Drawer 贴边且不使用大圆角。
22
+
23
+ `CollapseGroup` 的运行态视觉统一使用清爽的白色/主题表面卡片:短主题色指示条、紧凑
24
+ 标题、可选图标、单行副标题、标题旁轻量 `x 项` 文案,以及最右侧无底色的折叠箭头。
25
+ 不得使用整块主题色填充、蓝色大描边或醒目的实心数量胶囊;分组内容与标题属于同一张
26
+ 卡片,展开后不再嵌套第二套外框。深色模式使用 Element 主题变量,不能写死白色/蓝色。
27
+
28
+ ## 配置类表单的二级分组硬规则
29
+
30
+ - `sys_config`、`sys_user`、SaaS 设置、接口参数、打印/工作流设置等“配置类表单”不能因为已经有表级 Tab 就停止信息架构审计。表级 Tab 只负责一级领域;同一 Tab 内存在 **7 个以上可见设置**或 **2 个以上明确语义域**时,必须继续按语义放入 `CollapseGroup`。
31
+ - 水印、主题、菜单、登录入口、安全策略、桌面偏好等一组相互关联的开关/参数必须由一个带图标、说明、计数的 CollapseGroup 包裹;不能把 5~20 个设置直接平铺在 Tab 中,也不能让每个小设置单独占一个 Tab。
32
+ - 新增设置字段时必须同时审计所在 Tab 的现有字段,而不只是包住本次新增字段。若相邻设置已形成稳定语义域,应一次性补齐该域的 CollapseGroup;隐藏兼容字段继续保留但不计入可见项数。
33
+ - 配置表采用“表级 Tab + Tab 内 CollapseGroup”时,CollapseGroup 必须与成员字段写入同一个 `Tab`,并用连续 `Sort` 保证作用范围在下一个布局节点前结束。发布前必须打开真实编辑表单验证,不能只凭元数据字符串判断布局成功。
34
+
35
+ <!-- microi-progressive:begin -->
36
+ <!-- microi-progressive:chunk id=microi-form-layout-000 sha256=cade6a415454aa04f5fcf840e6d9df1323ac9751c0e3c8e1b07b360007413819 -->
37
+ ## 1. 三种分组能力速查
38
+
39
+ | 能力 | 存储位置 | 控件 | 核心作用 | 适用场景 |
40
+ |------|---------|------|---------|---------|
41
+ | **A. diy_table.Tabs(表级 Tab)** | `diy_table.Tabs`(JSON 字符串) | 表单顶部 Tab 条 | 把整张表的字段切到不同 Tab 中,**同屏只能看一个 Tab** | 表单整体很长,单个 Tab 通常占 **≥6 个有效表单行**,且 Tab 之间字段**业务强隔离**(扫码操作 vs 单据信息、主数据 vs 大型子表) |
42
+ | **B. 字段级 Tabs 控件** | `diy_field.Component='Tabs'` + `Config.FieldTabs` | 字段本身就是 Tab 容器 | 多个 Tab 字段组合嵌套,**同屏只能看一个 Tab** | 同一张表内需要二级 Tab,或 Tab 内容互相独立 |
43
+ | **C. 字段级 CollapseGroup(折叠分组)** | `diy_field.Component='CollapseGroup'` + `Config.CollapseGroup` | 字段是折叠面板标题 | **所有分组可在同一页面展开**,用户一屏看到全部标题和分组字段 | 只占 **≤5 个有效表单行** 的小分组(短字段即使有 8~10 个,也常只占 4~5 行) |
44
+ | **D. 不分组(默认平铺)** | 无 | — | 全部字段在第一屏 | 总有效表单行 ≤ 6、没有复杂控件,且没有必须强调的业务分组 |
45
+
46
+ <!-- /microi-progressive:chunk -->
47
+ <!-- microi-progressive:chunk id=microi-form-layout-001 sha256=f43f8c6f1c156ef3669f0c1f9a9d9d2cb7baf630d0b0cb2f48307a31f3f82ae2 -->
48
+ ## 2. 黄金决策流程(AI 必须按此顺序判断)
49
+
50
+ ### 2.1 先算“有效表单行”,禁止只数字段
51
+
52
+ 字段数不能直接代表视觉高度。AI 必须按 `diy_table.Column` 估算每组字段占用的有效表单行:
53
+
54
+ - 普通 Text / Select / NumberText / DateTime 等短控件:占 `1 / Column` 行;双列布局中 8 个短字段约为 4 行。
55
+ - `FormWidth=24` 或 Textarea / RichText / FileUpload / ImgUpload / Map:每个至少占 1 行。
56
+ - TableChild / CodeEditor / DevComponent / 大型 JsonTable:视为独立任务区,不能按普通字段数压缩。
57
+ - 隐藏字段、Id、纯布局控件不计入视觉行数,但必须保留其排序和业务配置。
58
+
59
+ **一级字段数门槛**:`<=6` 个核心可见字段优先平铺;`7~29` 个字段按基础、业务、状态、附件等信息域使用 CollapseGroup;`30+` 个字段优先评估表级 Tabs。字段数只是一级门槛,仍须结合下方“有效表单行”和任务隔离判断。
60
+
61
+ **表级 Tab 的默认准入条件**:除 `30+` 字段外,表单总有效行通常大于 12 行,并且至少两个 Tab 各自达到 6 个有效行;否则优先平铺或 CollapseGroup。多个大型子表,或扫码、代码编辑、运行测试等强任务域,可以直接进入 Tabs 评估;字段达到 8 个不再自动获得独立 Tab 资格。
62
+
63
+ **强任务隔离例外**:扫码/报工/质检操作区、可独立滚动的大型子表、运行测试、代码编辑、工作流事件等即使行数较少,也可以保留 Tab,因为切换代表任务模式而不是装饰性分组。
64
+
65
+ ```
66
+ 开始
67
+ ↓
68
+ Q1: 核心可见字段数、子表和强任务域?
69
+ ├─ ≤ 6 字段且无复杂控件 → D. 不分组(默认平铺)
70
+ ├─ 7 ~ 29 字段且无多个大型子表/强任务域 → 按信息域使用 C. CollapseGroup
71
+ └─ ≥ 30 字段,或多个大型子表/强任务域 → 优先评估 A. diy_table.Tabs
72
+ ↓
73
+ Q2: 是否至少有两个需要切换的独立业务域?
74
+ ├─ 否 → D. 平铺,或用 CollapseGroup 收起次要字段
75
+ └─ 是
76
+ ↓
77
+ Q3: 每个业务域的有效表单行数?
78
+ ├─ 至少两个业务域均 ≥ 6 行 → A. diy_table.Tabs(表级 Tab)
79
+ └─ 存在 ≤ 5 行的小业务域
80
+ ↓
81
+ 混合方案:Tab 容纳大业务域(≥6 个有效行)+ CollapseGroup 收起小业务域(≤5 个有效行)
82
+ ↓
83
+ 注意:所有 Tab 内的 ≤5 个有效行小业务域,必须用 CollapseGroup 折叠分组
84
+ ```
85
+
86
+ **简明决策表**:
87
+
88
+ | 场景 | 推荐方案 | 禁止做法 |
89
+ |------|---------|---------|
90
+ | 13 字段双列表单 + 3 个小业务域(2/9/2 个字段) | 3 个 CollapseGroup,核心业务组默认展开 | 禁止建立 3 个 Tab;9 个短字段通常只有 4.5 行,仍不足以独占一页 |
91
+ | 13 字段表 + 1 个"MRP 运算"子集(3 字段) | C. CollapseGroup 折叠"MRP 运算"分组,剩余 10 字段平铺 | 禁止用 diy_table.Tabs 拆出"MRP 运算"Tab(用户必须点击切换才能看到 3 个字段) |
92
+ | 35 字段表 + 4 个业务域(10/8/9/8) | A. diy_table.Tabs(4 个 Tab) | 禁止把每个 Tab 内 ≤5 字段的"备注/其他"再开 Tab |
93
+ | 42 字段表 + 5 个业务域(14/13/6/5/4) | A. diy_table.Tabs(5 个 Tab),后两个 Tab 内用 C. CollapseGroup 收次要字段 | 禁止为了 4~5 字段"审核信息"单独建 Tab |
94
+ | 8 字段简单登记表 | D. 不分组 | 禁止任何 Tab/折叠 |
95
+ | 工作流审批表(≤10 字段) | D. 不分组 | 禁止使用 Tab |
96
+
97
+ <!-- /microi-progressive:chunk -->
98
+ <!-- microi-progressive:chunk id=microi-form-layout-002 sha256=9165f561ba90696ce130d24f71a0e56c521b5f8935eac2ddcffb852f3af5d9b2 -->
99
+ ## 4. AI 生成表单布局的标准动作
100
+
101
+ ### 4.1 必做顺序
102
+
103
+ 1. **先数字段**:调用 `microi_get_field_list` 拉出全部字段,统计**有效字段数**(排除 `Visible=0` 隐藏字段、`Id`、系统字段)。
104
+ 2. **再分业务域**:用 `Sort` 顺序浏览字段,把字段聚类到 2~5 个业务域(基础信息 / 业务明细 / 业主/组织 / 财务 / 附件备注 / 状态 / 时间 / 其他)。
105
+ 3. **算每个域有效表单行**:A. 大于等于 6 行且存在强隔离价值 → Tab;B. 小于等于 5 行 → CollapseGroup;C. 等于 0 → 删除该域。
106
+ 4. **决定顶层方案**:A. 全 Tab / B. Tab+CollapseGroup 混合 / C. 全 CollapseGroup / D. 平铺。
107
+ 5. **写配置**:先写 `diy_table.Tabs`(若有 Tab),再逐字段写 `Tab` 归属;新增 `Component=CollapseGroup/Tabs/Divider/Alert` 等布局节点时,只能使用明确标注为“仅元数据”的布局专用路径,不能使用会同步建业务列的普通新增字段接口。
108
+ 6. **回读验收**:调用 `microi_get_field_list` 回读,确认 `Tab` 字段、`Sort`、`Component`、`Config.FieldTabs` / `Config.CollapseGroup` JSON 正确。
109
+ 7. **V8 完整性校验**:修改前后比较表级六类 V8 事件、字段 `V8Code/KeyupV8Code/Config`;布局迁移不得覆盖业务代码。若代码出现 `HideFormTab/ShowFormTab/ClickFormTab`,必须先适配或跳过该表。
110
+ 8. **清缓存**:`microi_refresh_schema_cache tables=['表名']`,避免前端看到旧配置。
111
+
112
+ ### 4.2 存量表自动审计与安全迁移
113
+
114
+ 当用户要求“检查所有表单设计”时,AI 必须执行自动化盘点,不能只修截图中的一张表:
115
+
116
+ 1. 读取所有 `diy_table.Tabs`,排除只有一个 `none` 默认页签的表。
117
+ 2. 一次性读取候选表的 `diy_field`,按 `Tab + Sort + Component + FormWidth + Visible` 计算每组有效行数。
118
+ 3. 保留扫码、报工、质检操作、大型子表、代码编辑、运行测试等强任务 Tab。
119
+ 4. 将“总有效行 ≤12、每组 ≤5 行、无复杂控件、无 Tab 控制 V8”的表列为高置信迁移候选。
120
+ 5. 修改前记录 `Tabs`、字段 `Tab/Sort/Component/Config/V8Code/KeyupV8Code` 和表级 V8 摘要;修改后逐项回读,业务代码摘要必须一致。
121
+ 6. 迁移为 CollapseGroup 时,只能通过布局专用的“仅元数据”路径新增布局节点,再清空原字段 `Tab` 和表级 `Tabs`;不得重建业务字段,不得改数据源、必填、只读、默认值或 V8。普通新增字段可能触发物理 DDL,严禁把通用 `AddFormData(diy_field)` 或普通字段创建接口当作元数据写入捷径。
122
+ 7. 平台控制面、安全表和存在歧义的业务表只报告,不自动批量迁移。
123
+
124
+ ### 4.3 后端实现备忘
125
+
126
+ 后端表结构(`diy_table`):
127
+ - `Tabs` 字段:JSON 字符串,存表级 Tab 列表。
128
+ - `TabsPosition` 字段:top / bottom / left / right。
129
+ - `TableTabs` / `TableTabsPosition`:表格视图的 Tab,与表单 Tab 独立。
130
+ - `FormArticle` / `TableArticle`:表单/表格的说明文案(不是 Tab)。
131
+
132
+ 后端字段结构(`diy_field`):
133
+ - `Tab` 字段:归属 Tab 名(与 `diy_table.Tabs.Id` 对应)。
134
+ - `Component = Tabs` / `CollapseGroup` / `Divider` / `Alert` 等 Advanced 控件,作为布局节点。
135
+ - `Config` 字段:JSON 字符串,存 `FieldTabs` / `CollapseGroup` 等子配置。
136
+
137
+ V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.ClickFormTab('tabId')` 动态控制 Tab 显隐和默认选中。
138
+
139
+ <!-- /microi-progressive:chunk -->
140
+ <!-- microi-progressive:chunk id=microi-form-layout-003 sha256=8da3bfbd34b7890c3796c47f71c7f4ccef13f16e5da48c3a0a0e111f22fe150a -->
141
+ ## 5. 必填与禁止
142
+
143
+ ### 5.1 必填
144
+
145
+ - 字段数 13~30 的表单,必须有可见的**业务分组**(Tab 或 CollapseGroup 二选一),不能让用户上下滚动 5 屏找字段。
146
+ - 创建 CollapseGroup 分组时,必须设置 `Icon`(如 `fas fa-calculator` / `fas fa-info-circle`),不要默认空白。
147
+ - 任何 Tab / CollapseGroup 都必须有 `Description` 解释分组用途,不要只放一个标题。
148
+ - 每个 CollapseGroup 必须回读到 `FormWidth=24`;`Config.CollapseGroup.ShowFieldCount` 默认必须为 `true`。
149
+ - 可扩展配置表或设置页的末尾 CollapseGroup 不得无边界使用 `ScopeMode=UntilNextGroup`。已知标准子项数量时必须改用 `ScopeMode=FieldCount` 并显式保存准确 `FieldCount`;否则必须增加后续分组边界,避免未来新增字段或租户扩展字段被末尾分组误吞。
150
+ - 表级 Tab 与 CollapseGroup 的 `Description` 作为副标题显示;开启计数时统一追加 `x 项`,禁止继续显示 `x 个字段`。运行时动态显隐字段后必须重算计数,已有数字角标配置继续生效,不能被静态字段数覆盖。
151
+ - 分组/Tab 的字段计数必须基于字段原始可见性(如 `_baseIsShow`),不能把“当前因折叠而隐藏”误判成不可见,否则收起后的分组会错误显示 `0 项`。
152
+ - 表级分组方向完整支持 `TabsPosition=left/top/right/bottom`;每个方向都要检查标题、副标题、动态角标和选中指示线,纵向指示线端点固定为直角。
153
+ - 修改 `diy_table.Tabs` 或 `diy_field.Tab` / `Config.CollapseGroup` / `Config.FieldTabs` 后,必须调用 `microi_refresh_schema_cache`。
154
+ - Tab 内嵌套 CollapseGroup 时,CollapseGroup 必须设 `DefaultCollapsed=true`(默认收起),避免 Tab 内继续被折叠分组抢首屏空间。
155
+ - 新增布局节点后必须同时回读 `diy_field` 元数据和目标业务表结构,确认没有新增物理业务列;若当前工具不提供仅元数据能力,只报告设计建议,不得绕过后端直接写表。
156
+
157
+ ### 5.2 禁止
158
+
159
+ - ❌ **禁止**为 ≤5 个有效表单行的业务域单独创建 Tab(必须改用 CollapseGroup);8~10 个双列短字段通常仍属于此范围。
160
+ - ❌ **禁止**仅凭 13~30 个原始字段决定平铺或分 Tab;总有效行超过 6 且存在明确业务域时,至少使用 CollapseGroup 分组。
161
+ - ❌ **禁止**为 8~10 字段的简单业务表创建多层 Tab 嵌套(直接用 CollapseGroup 即可)。
162
+ - ❌ **禁止**在用户没有要求时使用 `Tabs` 字段控件(`diy_field.Component='Tabs'`),更优先用 `diy_table.Tabs`。
163
+ - ❌ **禁止**让 `CollapseGroup.FormWidth` 为空或依赖表默认列宽;CollapseGroup 默认必须显式保存 `FormWidth=24`。Tabs / Divider / Alert 继续按各自运行时规范处理。
164
+ - ❌ **禁止**只创建 Tab 不写字段的 `Tab` 归属(每个 Tab 必须有至少 1 个非空 `Tab` 的字段)。
165
+ - ❌ **禁止**用 Tabs 控件的 `FieldCount` 跨过 CollapseGroup 或 Divider 计数(不同布局控件的计数是隔离的)。
166
+ - ❌ **禁止**把高频访问的字段(如单据编号、项目名称)放进默认收起的 CollapseGroup。
167
+ - ❌ **禁止**用普通新增字段或通用表单数据写入创建布局节点;这类路径可能对目标业务表执行物理 DDL。
168
+
169
+ <!-- /microi-progressive:chunk -->
170
+ <!-- microi-progressive:chunk id=microi-form-layout-004 sha256=539ae919554ca9eda5b5a26ac405181f601f4195f6a59baf1fd368d315987e6c -->
171
+ ## 6. 验收清单
172
+
173
+ 修改或新建表单布局后,AI 必须按以下顺序验收:
174
+
175
+ 1. **回读字段**:`microi_get_field_list` 检查 `Tab` / `Component` / `Config` 与设计一致。
176
+ CollapseGroup 还必须检查 `FormWidth=24`、`Config.CollapseGroup.ShowFieldCount=true`(除非用户明确覆盖)。
177
+ 2. **回读表与结构**:`microi_get_table_data _SelectFields=['Id'] _PageSize=1` 验证表可读,并检查实时表结构未因纯布局节点新增物理业务列。
178
+ 3. **清缓存**:`microi_refresh_schema_cache tables=['表名']`。
179
+ 4. **手动打开表单**:通过 Playwright 或 V8 引擎调用,截图第一屏。
180
+ 5. **视觉确认**:
181
+ - 第一屏必须能看到核心业务信息,通常至少 6~10 个短字段或一个完整任务区(而不是 2~3 个字段加大片空白)。
182
+ - Tab 或 CollapseGroup 标题与说明文字清晰可见。
183
+ - 没有任何"只剩 1 个字段的 Tab"。
184
+ 6. **业务闭环**:新建一条测试数据、编辑、查看、删除,验证字段在正确分组中显示。
185
+
186
+ 若“表单设计器能看到、真实新增/编辑/查看表单看不到”,必须先读取表级 `InFormV8`
187
+ 以及相关字段 V8,搜索 `V8.FieldSet`、`hideField`、`Visible=false`、`HideFields`。设计模式
188
+ 通常跳过这些运行态事件;未完成这一步不得直接判定为 Microi.Client 渲染缺陷。
189
+
190
+ <!-- /microi-progressive:chunk -->
191
+ <!-- microi-progressive:chunk id=microi-form-layout-005 sha256=db6759bef83e520e5f137347070f85df1275e14dcbc742bebfdaac4da14be375 -->
192
+ ## 9. 与其他 Skill 的关系
193
+
194
+ - 字段创建流程:`v8-table-event/SKILL.md` 写 InFormV8 / SubmitFormV8 等。
195
+ - 外键 Id+Name 双字段:`ui-design/SKILL.md` 中的"外键字段必须使用 Id+Name 双控件设计"。
196
+ - 整行控件规则:`microi-system-delivery/SKILL.md` 中 `FormWidth=24` 的使用条件。
197
+ - 表单设计器与按钮:`v8-menu-buttons/SKILL.md`。
198
+ - V8 事件 Tab 显隐 API:`v8-table-event/SKILL.md` 中 `V8.HideFormTab` / `V8.ShowFormTab` / `V8.ClickFormTab`。
199
+ <!-- /microi-progressive:chunk -->
200
+ ## 详细参考路由(渐进披露)
201
+
202
+ 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
203
+
204
+ - [references/progressive-01-3-三种分组的存储与配置.md](references/progressive-01-3-三种分组的存储与配置.md):3. 三种分组的存储与配置;7. 反例参考(必须避免);8. 快速参考代码片段
205
+ <!-- microi-progressive:end -->