@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,255 +1,255 @@
1
- ---
2
- name: module-engine
3
- description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修改后台菜单、菜单统计角标、模块标题指标、复合列表列、移动端业务卡片、查询列、接口替换、跨端 ViewSchema、动态按钮、PageTabs、树形加表格布局和 MicroService 菜单。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi 模块引擎
9
-
10
- 模块引擎决定同一张表在某个菜单、角色和终端中“如何查询、展示和操作”。
11
- 配置实体是 `sys_menu`,不是 `sys_module`;表结构与字段仍属于
12
- `diy_table/diy_field`。
13
-
14
- 导入、导出按钮显示条件分别使用 `sys_menu.ImportCodeShowV8`、`ExportCodeShowV8`,
15
- 与新增、编辑、删除条件一样用 `V8.Result=true/false`。通过模块设计“按钮”分组维护,
16
- 或使用 `microi_update_module`;旧后端需先升级模块引擎应用。它们只控制按钮显示,不能代替后端权限。
17
- 代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
18
- 未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
19
-
20
- ## 必读参考
21
-
22
- - 字段、打开方式、查询配置、ViewSchema 和接口替换:
23
- `references/module-config.md`
24
- - 动态按钮 JSON 与后台任务:`../v8-menu-buttons/SKILL.md`
25
- - 树形+表格:`../microi-left-right-layout/SKILL.md`
26
- - 表单控件:`../microi-form-engine/SKILL.md`
27
- - 表单平铺、CollapseGroup 与 Tabs 决策:`../microi-form-layout/SKILL.md`
28
- - MicroService 菜单:`../microi-microservice/SKILL.md`
29
-
30
- ## 创建/修改标准流程
31
-
32
- 1. `microi_get_db_schema` 读取真实 `diy_table`、字段、已有菜单和父菜单。
33
- 2. 绑定表的菜单使用 `microi_create_module`/Manifest,不直接写 `sys_menu`。
34
- 3. 明确 `openType`、父菜单、路由、PC/移动端显隐和角色范围。
35
- 4. 用字段名配置 `listFields/searchFields/sortFields/hiddenFields/mobileFields`;
36
- MCP 解析为字段 Id 和 `SelectFields/SearchFieldIds/...`。
37
- 5. 同一次创建配齐业务按钮、FormBtns、PageTabs 和批量按钮。
38
- 6. 写后回读模块,检查字段映射、按钮 JSON、路由和目标页面。
39
-
40
- ### 菜单图标必须可辨识(强制)
41
-
42
- - 每个新建或修改的菜单都必须设置与业务相关的图标;根目录、分类及子菜单不能批量使用同一个默认图标。优先按名称和实际功能选择,例如客户用 `UserFilled`、日程用 `Calendar`、仓储用 `Box`、办公用 `OfficeBuilding`。
43
- - 主后台侧栏读取 `sys_menu.IconClass`(CSS/组件图标),不是图片字段 `Icon`。优先填写当前前端已注册的 Element Plus 图标名;使用 FontAwesome/CSS 名称时先核对兼容映射,不能填入不存在的类名后让全部菜单回退为 `Document`。
44
- - 没有贴切图标时,从实际可用图标集合中随机选一个,并将选择结果保存;可以按稳定菜单 Id 生成确定的随机分配,避免每次刷新或重新发布都变图标。同组菜单应有适当差异,不强求不同业务绝对不重复。
45
- - 通过 `microi_create_module` / `microi_update_module` 或 Manifest 的模块配置写入,并把图标纳入应用包。只修改图片字段、只检查数据库字符串或只改本地 Manifest 不算完成;必须回读 `IconClass`,在真实侧栏检查图标可见且有区别。
46
-
47
- ### 新模块表单打开方式(强制默认)
48
-
49
- - AI 新建 `diy_table` / 业务模块时,`FormOpenType` 默认写 `Dialog`,`FormOpenWidth`
50
- 默认写 `80%`;缺省值也必须按这组语义处理,不能再把所有模块统一生成为 Drawer。
51
- - 只有表单确实非常庞大时才使用 `Drawer`:通常是 36 个以上业务字段、至少 2 个
52
- `TableChild`、28 个以上字段且含大型子表,或 7 个以上子表/富文本/代码编辑/上传/地图等
53
- 重型控件。达到阈值仍应先用 `diy_table.Tabs` 与 CollapseGroup 整理信息架构。
54
- - 用户显式指定 `Dialog/Drawer/Page` 或宽度时以用户配置为准。Drawer 是贴边直角容器;
55
- Dialog 使用平台统一大圆角、可拖动、居中弹层,遮罩服从正向开关 `sys_config.FormMaskBlur`,缺失或 `0/false` 默认关闭毛玻璃。
56
- 7. 为管理员/目标角色分配菜单权限,并以真实登录用户验收。
57
-
58
- ## 绑定表菜单不能只写两个字段
59
-
60
- 除 `Name` 和 `DiyTableId` 外,至少配置或允许平台推断:
61
-
62
- - `TableDiyFieldIds`
63
- - `SelectFields`
64
- - `SearchFieldIds`
65
- - `SortFieldIds`
66
- - `NotShowFields`
67
- - `StatisticsFields`
68
- - `MobileListFields`
69
- - `CardTitleTagFields`
70
- - `CardBottomTagFields`
71
- - `DefaultOrderBy`
72
-
73
- 普通状态、开关等低基数字段不能机械创建单列索引。只有真实查询、关联、唯一约束
74
- 或扫描需要的索引才进入 Manifest 并通过 MCP 创建、回读。
75
-
76
- Manifest 中按字段名声明统计列,使用 `statFields` 或 `statisticsFieldNames`,例如
77
- `statFields: ['Amount', 'Quantity']`;MCP 会解析目标租户的字段 Id。
78
- `statisticsFields` / `StatisticsFields` 表示已经转换好的原生 JSON,元素为
79
- `{ Id: '真实 diy_field.Id', Type: 'Sum' }`,不能填字段名称字符串。发布前用有记录的
80
- 实际列表检查 `DataAppend.StatisticsFields` 及页面汇总,再以无权限账号检查汇总范围;
81
- HTTP 成功或菜单字段非空不足以证明统计有效。
82
-
83
- ## AI 模块视觉交付门禁(强制)
84
-
85
- 对每个 `Display=1` 或 `AppDisplay=1` 且绑定业务表的 Diy 模块,AI 不能只依赖 CRUD
86
- 默认页,也不能只写 `Name/DiyTableId` 后结束。至少完成以下设计和回读:
87
-
88
- 1. 每个列表字段都给出符合内容长度的 `TableWidth`;标题/名称/地址较宽,日期/编码居中,
89
- 金额/数量/状态较紧凑。PC 复合列必须另给合理的 `MinWidth`,不得让末列自适应覆盖它。
90
- 2. 每个模块都配置紧凑 Hero 的业务标题、简短副标题和 2~4 个动态指标。优先统计待处理、
91
- 逾期、金额、容量、风险、完成率等当前表真正有意义的业务数据,不能全部退化为总记录数。
92
- 3. 指标只能来自 `StatisticsFields`、当前列表 `DataCount/PageCount` 或一个批量聚合接口。
93
- 禁止随机数、伪统计、静态演示数字和没有口径的“看起来好看”数值。无法推断时允许用
94
- `DataCount + PageCount` 做诚实最低兜底,并在后续由业务人员补充口径。
95
- 4. 左侧菜单角标只给少量有行动含义的重要菜单,例如待办、未读、逾期、低库存;禁止每个
96
- 菜单都加。`PageTabs` 的状态数量、`MoreBtns/PageBtns/FormBtns/BatchSelectMoreBtns/
97
- ExportMoreBtns` 的有用数量也应设计角标,但同页统计必须批量返回,禁止 N+1。
98
- 5. PC 至少设计一个 `Field + Lines + TrailingFields` 复合主列。已放入次要行或右侧图标/
99
- 状态的字段必须从普通独立列去重;主字段、次要行、右侧字段及其 `RequiredFields` 都要
100
- 进入查询结果,宽度必须足以容纳多行和尾随标签。一般情况下每个复合列最多两行,即
101
- 一个主字段加一个 `Lines` 次要字段;可以配置多个各自两行的复合列,但不要在同一列放
102
- 两个 `Lines` 形成三行高表格。确有特殊层级价值时才允许三行,并必须完成桌面视觉验收。
103
- 6. 移动端卡片按真实字段规划图片/头像、标题、副标题、顶部标签、状态、右侧金额、正文、
104
- Meta、底部区域;同一字段不得在多个区域机械重复,空区域应隐藏而不是留下占位。
105
- 7. `EnableViewSchema` 只控制 Detail/Edit 自定义表单。Hero、指标、列表密度、PC 复合列、
106
- 移动端卡片只要有配置就始终生效;设计器必须提供独立的“自定义表单”Tab。
107
-
108
- 平台自动生成的 List/Card 配置只是防止空白界面的最低值,不能替代 AI 对业务状态、金额、
109
- 时效和操作路径的分析。显式配置优先于自动值;写后用 `microi_get_module` 回读 ViewSchema、
110
- 列宽、统计列、卡片区域和角标配置。
111
-
112
- ## 打开方式
113
-
114
- | OpenType | 用途 |
115
- |---|---|
116
- | `Diy` | 标准表单引擎列表/表单 |
117
- | `Component` | 主前端已注册 Vue 组件 |
118
- | `Iframe` | 受控外部页面 |
119
- | `SecondMenu` | 仅作为父菜单 |
120
- | `Report` | 虚拟报表 |
121
- | `MicroService` | 已发布前端微服务页面 |
122
- | `CodeForm` | 表单设计器生成并在已发布微服务中运行的独立 Vue 3 页面;必须绑定 `DiyTableId` |
123
- | `WorkFlow` | 审批工作流模块;必须绑定 `DiyTableId` 和已启用流程的 `FlowDesignId` |
124
-
125
- `WorkFlow` 模块的 `DiyTableId` 必须等于 `wf_flowdesign.TableId`。完整 Manifest
126
- 可填写 `flowName` 引用同一份 `workflows` 定义,生成器保存流程后回填
127
- `sys_menu.FlowDesignId`;引用已存在流程时填真实 `flowDesignId`。
128
- 使用 `microi_get_module` 回读 `OpenType/FlowDesignId/DiyTableId`,再从模块
129
- 实际发起并检查审批待办。流程节点人员、坐标和拓扑详见 `v8-workflow`。
130
-
131
- `CodeForm` 复用 MicroService 宿主与菜单权限上下文。先在表单设计器生成源码,保存至 `microi-generated-forms`,构建并发布微服务;再配置 `MicroServiceKey + MicroServiceRoutePath`(以及当前租户真实的 `MicroServiceId + MicroServicePageId`),保留原表的 `DiyTableId`。Manifest 生成器可解析可移植的 Key/RoutePath;`microi_create_module` 必须传实际 Id。不能把只保存私有源码当作已发布运行产物。
132
-
133
- Iframe 不把长期 Token、密码或连接串放 URL。第三方单点登录使用短期、一次性、
134
- 可撤销的服务端交换票据,限制 redirect/scope,并在落地后清理地址栏。
135
-
136
- ## 数据与业务逻辑
137
-
138
- - 单表 CRUD 已由绑定表菜单提供,不额外创建重复接口引擎。
139
- - 后端 V8 可用 `V8.ModuleEngine.GetTableData({...})`,通过
140
- `ModuleEngineKey` 应用模块的关联表查询配置;标准前端 V8 不挂载
141
- `V8.ModuleEngine`。
142
- - 查询接口替换、导入/导出替换和跨表动作属于复杂逻辑时,使用接口引擎。
143
- - 前端按钮只做确认、收集少量参数、调用接口和刷新;事务与最终校验在后端。
144
- - 预计超过 2 分钟、500 条、1000 个扇出或 100 次外部调用时使用真实后台任务。
145
- - 不复制官网旧“Redis 文本进度 + 长事务循环”导入示例作为新实现;必须有稳定
146
- 幂等键、业务任务状态、真实 Current/Total、失败恢复和必要的 checkpoint 分片。
147
-
148
- ### 原生 SQL 身份占位符与统计安全
149
-
150
- - 模块 SqlWhere/SqlJoin 及字段选项 SQL 中的 `$CurrentUser.Id$`、
151
- `$CurrentUser.RoleIds$`、`$CurrentUser.Level$` 必须使用本次可信后端授权快照。
152
- 角色集合只包含当前有效 RoleId,不能按旧 Token、角色名称或请求中的同名属性授予权限。
153
- `IN ($CurrentUser.RoleIds$)` 继续支持;角色撤销后即使仍拥有同表菜单,也须验证计数与汇总不越权。
154
- - SQL 替换使用局部克隆;部门等其它扩展保留兼容语义,不覆盖 `V8.CurrentUser`。
155
- HTTP JSON 不能注入授权快照或可信调用标记,父用户与当前身份不符、用户禁用均失败关闭。
156
- - 用户访问密钥仍绑定有效 sys_user,沿“账号有效角色 + 密钥 scope/路由/表范围收窄”授权;
157
- 不把访问密钥伪装成无所属账号的独立角色身份,账号不存在或停用时拒绝查询。
158
- - Count、SUM 在逐行数据过滤之前执行,列表/计数/导出必须共享真正的查询范围;
159
- 不能以 DataFilter 已拒绝详情为由宣称统计安全。验收包含旧 Token 撤角、角色删除、
160
- 管理员降级但仍有菜单、不同父身份和用户对象未被修改。
161
- - 本能力依赖对应后端二进制;应用包无需复制用户角色数据。它不改变 DbRead 或父事务的隔离语义,
162
- 联查授权表的副本延迟与旧 RR 快照需要独立验证,不将 SQL 生成通过称为真实数据库验收。
163
-
164
- ### 菜单启动查询与字段元数据兼容
165
-
166
- - 菜单树是登录后的启动控制面。读取 `sys_menu` 时,不能把浏览器传入的
167
- `_SelectFields` 直接交给依赖 `diy_field` 的通用查询投影:旧库、空库或升级后缓存
168
- 未同步时,物理列仍存在但元数据可能不完整,查询结果会退化成只含固定字段 `Id`。
169
- - 服务端应先在已完成登录、租户与角色菜单范围校验的可信边界读取物理菜单行,再在内存中
170
- 按请求字段投影;构建树所需的 `Id/ParentId/Sort` 必须保留。可信标记不得由浏览器 JSON
171
- 绑定,不能借此绕过菜单、角色或数据权限。
172
- - 底层菜单查询失败必须原样返回失败,禁止把失败结果转换成 `Code=1` 的空菜单。回归测试至少
173
- 覆盖“不向表单引擎下传显式投影”“字段名大小写兼容”“投影仍保留树字段”“未指定字段时
174
- 保留物理行”。
175
-
176
- ## 跨端 ViewSchema
177
-
178
- 顶层 PC 数据列表默认使用紧凑的新模块标题样式;即使未启用自定义表单视图,也不能退回无标题的旧外观。无指标头部固定 `44px`、含指标头部固定 `62px`,连同间距总纵向占用约 `50px / 68px`。子表、关联表、嵌入表不重复显示,移动端由固定导航栏承载标题。`Scene=List/Card` 的个性化标题、指标、复合列和卡片配置存在时必须直接生效;`EnableViewSchema` 只控制 Detail/Edit 自定义表单视图。
179
-
180
- PC 列表的固定结构顺序是“模块 Hero(标题/副标题/动态指标)→ PageTabs → 查询与表格”,Hero 必须渲染在页面多 Tab 上方。头部只使用一次性入场和一次性轻量光效,禁止持续循环动画;`prefers-reduced-motion: reduce` 必须关闭动画和过渡。
181
-
182
- PageTabs 通过 `TargetSysMenuId` 切换不同模块/表时,入口模块必须作为稳定宿主:客户端在同一个 `diy-table` 实例内加载目标模块的菜单、表、字段与列表数据,只更新当前 URL 的 `Tab` 查询参数,不替换路由、面包屑、顶部访问标签或宿主 Hero。入口模块只配置一组 PageTabs;目标菜单可隐藏导航,但只需保留目标表格设计和角色权限,不得复制同一组 PageTabs。隐藏目标菜单统一设置 `ParentId=入口菜单Id、Display=0、AppDisplay=0、HasChild=0、PageTabs=[]`,入口菜单保持 `HasChild=0` 以继续作为可点击业务入口。模块设计器必须用可搜索菜单树显示 `TargetSysMenuId` 的模块名称,不能只在运行时 JSON 中保存不可见 Id。切换时必须中止旧请求并以模块上下文版本丢弃迟到响应,失败时回滚原模块。
183
-
184
- 模块首屏或跨模块切换期间,Hero 标题/指标、PageTabs、工具栏与列表必须显示与最终布局同尺寸的主题化骨架屏;不能先渲染空白旧布局再整体位移。骨架屏同样遵守 `prefers-reduced-motion: reduce`,并在无指标或无 PageTabs 时按元数据提示隐藏对应占位。
185
-
186
- `ViewSchema` 是模块级视图,不写入已废弃的通用 `DiyConfig`。优先通过 sys_menu“跨端视图”的 `DiyModulePresentationDesigner` 配置;Detail/Edit 使用独立的“自定义表单视图 JSON”,需要完整协议、角色优先级或未知扩展字段时再使用高级 JSON。启用自定义表单视图后仍须:
187
-
188
- - 配置 `EnableViewSchema=1`;`ViewSchemaVersion/ViewConfigVersion` 可为空,分别按 `1.0/1` 处理并在后续变更时递增配置版本。
189
- - 按 Scene、Device、RoleIds、Priority 选择视图。
190
- - 配置损坏或客户端不支持时回退标准 `sys_menu + diy_table + diy_field`,不能白屏。
191
- - 小程序只消费声明式动作,不执行 PC 的任意 `V8Code`。
192
- - 声明式动作中的 ParamMap/VisibleWhen 只允许白名单字段,不使用 `eval`。
193
-
194
- ### 重要模块的统计与信息层级
195
-
196
- - 待办、库存预警、未读、逾期、待收/待付等有行动含义的菜单,主动询问并配置
197
- `MenuBadgeEnabled=1`、`MenuBadgeApiEngineKey` 与说明统计口径的 `MenuBadgeTooltip`。接口统一返回
198
- `{ Code:1, Data:{ Value: number } }`,并按当前用户权限统计。
199
- - `Scene=List` 的 `Layout.Hero` 用 `Eyebrow/Title/Description/Metrics` 建立模块标题与
200
- 指标条。相同 `ApiEngineKey` 的指标必须由一个聚合接口批量返回,使用 `ValuePath`
201
- 取值;禁止一个指标一次请求。
202
- - PC Hero 有指标时采用“左侧标题说明约 25%~30% + 右侧指标区弹性占满”的信息层级,
203
- 中间只允许一条弱化渐变分隔;指标条容器和单个指标不得叠加多层描边。无指标时标题说明
204
- 自动占满整行,不保留空指标区。每个指标必须显式配置 `Icon`,并通过不同的 `Tone` 或
205
- `Color` 形成可辨识的图标色块与轻背景;同一 Hero 内不得让全部指标使用相同图标和颜色。
206
- - Hero 指标可用 `Source=DataCount` 读取当前筛选总记录数、用 `Source=PageCount` 读取本页
207
- 已加载记录数;两者复用列表结果,不调用额外接口。字段汇总继续用 `Field`,跨表或复合
208
- 统计才用 `ApiEngineKey + ValuePath`。
209
- - `Layout.List.Columns[]` 用 `Field + Lines + TrailingFields` 配置复合列和右侧图标状态;
210
- 默认按 `Field + 1 个 Lines` 形成双行,多个信息组应拆成多个双行复合列,避免单列三行
211
- 抬高整张表。声明支持 `Tone/Color/Icon/ShowLabel/Prefix/Suffix`,引用字段必须进入查询列。
212
- - `Scene=Card, Device=Mobile` 用 `Layout.Card` 配置 `AvatarTextField/TitleField/TopFields/
213
- SubtitleFields/RightFields/Fields/MetaFields/BottomFields`。未配置时继续兼容
214
- `MobileListFields/CardTitleTagFields/CardBottomTagFields`。
215
- - `PageTabs/MoreBtns/PageBtns/BatchSelectMoreBtns/ExportMoreBtns/FormBtns` 需要数量时配置
216
- `BadgeEnabled/BadgeApiEngineKey`;一个接口接收当前页 `Ids + ButtonKeys` 并一次返回
217
- `Data.Buttons` 与 `Data.Rows`,禁止逐行调用。
218
- - 能直接用字段表达的信息优先配置复合列/卡片字段;只有确需 HTML 样式或组合逻辑时
219
- 才使用字段的 `V8TmpEngineTable`,且仍需遵守 DOMPurify 和查询字段范围。
220
- - 存量菜单没有 Hero.Metrics 时,客户端只允许根据真实后端汇总、当前筛选总数、本页加载数
221
- 和本页真实状态分布生成兜底指标;不得用随机值装饰页面。字段聚合缺少全量口径时必须明确
222
- 标注“本页”,不能把当前页求和冒充全表汇总。
223
-
224
- ### 表单布局协同
225
-
226
- - `<=6` 个核心可见字段优先平铺;`7~29` 个字段按基础、业务、状态、附件等信息域使用
227
- `CollapseGroup`;`30+` 个字段,或存在多个大型子表、扫码/代码编辑等强任务域时使用
228
- 表级 `diy_table.Tabs`。最终还要按有效表单行校正,避免产生只有少量字段的空洞 Tab。
229
- - 新增 `Tabs/CollapseGroup/Divider/Alert` 等布局节点必须走明确的“仅元数据”专用路径。
230
- 普通新增字段接口可能同步对业务表执行物理 DDL,不能把向 `diy_field` 新增一行误认为
231
- 仅保存布局配置;写入后要同时回读元数据并核对业务表结构未新增实体列。
232
-
233
- ## 验收
234
-
235
- - `Display/AppDisplay` 除明确隐藏外为 1,父子菜单层级正确。
236
- - 路由刷新、直接访问、切换菜单均不 404/白屏。
237
- - 列表字段、筛选、排序、统计、移动端卡片与预期一致。
238
- - 权限用户可访问,未授权用户不能靠 URL、`_SysMenuId` 或前端字段绕过。
239
- - MoreBtns/FormBtns/PageTabs/BatchSelectMoreBtns 显隐、调用和刷新正确;PageTabs 数字角标使用稳定 Tab Id 取 `Data.Buttons`。
240
- - 菜单角标、模块指标和按钮角标按真实权限返回,零值/超限/接口失败降级正确且无 N+1。
241
- - Hero 在有指标、无指标、长标题和 3~5 个指标时均层级清晰;指标无多层线框,同一组图标与
242
- 语义色可区分,并在浅色/深色主题下保持可读。
243
- - PC 复合列和 Mobile Card 引用的附加字段均在查询结果中;长文本、空值、模板值不破版。
244
- - PC 和移动端分别验证;MicroService 还要验证运行时、页面路由和宿主上下文。
245
- ### 多级表头与顶部 Banner
246
-
247
- - 字段权限使用模块 `FieldPermissions`(Manifest `fieldPermissions`),Version=1;按 Everyone/Roles/Users/Departments/Jobs 与 Fields 配置 Visible/Editable,授权对象数组保存 Id。多个匹配组限制取交集,隐藏同时不可编辑;普通用户按最终能力执行,超级管理员按原管理边界。岗位来自 `diy_job`(显示 `JobName`),匹配权威 `sys_user.Jobs` 中的岗位 Id;岗位与角色 `RoleIds` 分开,不得相互替代。
248
- - 不能只做前端隐藏:FormEngine 查询、隐藏字段条件/排序/统计、导出、写入和导入均须校验。生成代码使用服务端 `DataAppend.FieldAccess`;未传菜单的客户端不能绕过该表已启用的模块限制。验收应覆盖普通账号、直接请求、角色/人员/部门/岗位匹配与只读写入失败。
249
- - 树模块拖动排序配置 `TreeDragSortEnabled`、`TreeDragSortField`(Manifest 同名小驼峰),排序字段必须为已注册数值字段。业务由 Managed、非匿名接口引擎 `mci-tree-drag-sort` 执行,可信原子仅负责固定引擎的模块解析、权限和白名单写入。
250
- - 拖动前取全树快照,移动时核验快照;旧、新父级的所有同级记录按间隔 10 重排,同时维护父级、祖先链、HasChild。不得仅更新被拖动记录,也不得按当前分页重排;跨级、循环、过期快照、任一兄弟无权编辑或写入失败必须整次回滚。
251
-
252
- - 数据源【多级表头】使用现有 `sys_menu.TableHeaders`,填写 `[{"Label":"人数(人)","Fields":["Total","Male","Female"]}]`;`Fields` 必须引用可见、连续的查询列字段名。嵌套分组可使用 `Children`。缺省、非法 JSON、重复或不连续字段时客户端回退普通表头。
253
- - Manifest `modules[].tableHeaders` 接受同一数组,MCP 写入 `sys_menu.TableHeaders`;更新已有菜单可通过 `microi_update_module` 传同名字段并回读,不能把合并表头放入已废弃的 `DiyConfig`。
254
- - 模块的 `HideTableBanner`、`HideFormBanner` 分别关闭表格与表单顶部 Banner。未配置或 `0` 均显示;设为 `1` 后对应专属统计接口不执行,按钮角标接口不受影响。Manifest 使用 `hideTableBanner`、`hideFormBanner`。
255
- - 上述配置由模块引擎官方应用交付,验收应分别核对物理列、字段可见性、商城包哈希,以及普通表头、合并表头和两种 Banner 开关的真实页面与请求。
1
+ ---
2
+ name: module-engine
3
+ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修改后台菜单、菜单统计角标、模块标题指标、复合列表列、移动端业务卡片、查询列、接口替换、跨端 ViewSchema、动态按钮、PageTabs、树形加表格布局和 MicroService 菜单。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi 模块引擎
9
+
10
+ 模块引擎决定同一张表在某个菜单、角色和终端中“如何查询、展示和操作”。
11
+ 配置实体是 `sys_menu`,不是 `sys_module`;表结构与字段仍属于
12
+ `diy_table/diy_field`。
13
+
14
+ 导入、导出按钮显示条件分别使用 `sys_menu.ImportCodeShowV8`、`ExportCodeShowV8`,
15
+ 与新增、编辑、删除条件一样用 `V8.Result=true/false`。通过模块设计“按钮”分组维护,
16
+ 或使用 `microi_update_module`;旧后端需先升级模块引擎应用。它们只控制按钮显示,不能代替后端权限。
17
+ 代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
18
+ 未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
19
+
20
+ ## 必读参考
21
+
22
+ - 字段、打开方式、查询配置、ViewSchema 和接口替换:
23
+ `references/module-config.md`
24
+ - 动态按钮 JSON 与后台任务:`../v8-menu-buttons/SKILL.md`
25
+ - 树形+表格:`../microi-left-right-layout/SKILL.md`
26
+ - 表单控件:`../microi-form-engine/SKILL.md`
27
+ - 表单平铺、CollapseGroup 与 Tabs 决策:`../microi-form-layout/SKILL.md`
28
+ - MicroService 菜单:`../microi-microservice/SKILL.md`
29
+
30
+ ## 创建/修改标准流程
31
+
32
+ 1. `microi_get_db_schema` 读取真实 `diy_table`、字段、已有菜单和父菜单。
33
+ 2. 绑定表的菜单使用 `microi_create_module`/Manifest,不直接写 `sys_menu`。
34
+ 3. 明确 `openType`、父菜单、路由、PC/移动端显隐和角色范围。
35
+ 4. 用字段名配置 `listFields/searchFields/sortFields/hiddenFields/mobileFields`;
36
+ MCP 解析为字段 Id 和 `SelectFields/SearchFieldIds/...`。
37
+ 5. 同一次创建配齐业务按钮、FormBtns、PageTabs 和批量按钮。
38
+ 6. 写后回读模块,检查字段映射、按钮 JSON、路由和目标页面。
39
+
40
+ ### 菜单图标必须可辨识(强制)
41
+
42
+ - 每个新建或修改的菜单都必须设置与业务相关的图标;根目录、分类及子菜单不能批量使用同一个默认图标。优先按名称和实际功能选择,例如客户用 `UserFilled`、日程用 `Calendar`、仓储用 `Box`、办公用 `OfficeBuilding`。
43
+ - 主后台侧栏读取 `sys_menu.IconClass`(CSS/组件图标),不是图片字段 `Icon`。优先填写当前前端已注册的 Element Plus 图标名;使用 FontAwesome/CSS 名称时先核对兼容映射,不能填入不存在的类名后让全部菜单回退为 `Document`。
44
+ - 没有贴切图标时,从实际可用图标集合中随机选一个,并将选择结果保存;可以按稳定菜单 Id 生成确定的随机分配,避免每次刷新或重新发布都变图标。同组菜单应有适当差异,不强求不同业务绝对不重复。
45
+ - 通过 `microi_create_module` / `microi_update_module` 或 Manifest 的模块配置写入,并把图标纳入应用包。只修改图片字段、只检查数据库字符串或只改本地 Manifest 不算完成;必须回读 `IconClass`,在真实侧栏检查图标可见且有区别。
46
+
47
+ ### 新模块表单打开方式(强制默认)
48
+
49
+ - AI 新建 `diy_table` / 业务模块时,`FormOpenType` 默认写 `Dialog`,`FormOpenWidth`
50
+ 默认写 `80%`;缺省值也必须按这组语义处理,不能再把所有模块统一生成为 Drawer。
51
+ - 只有表单确实非常庞大时才使用 `Drawer`:通常是 36 个以上业务字段、至少 2 个
52
+ `TableChild`、28 个以上字段且含大型子表,或 7 个以上子表/富文本/代码编辑/上传/地图等
53
+ 重型控件。达到阈值仍应先用 `diy_table.Tabs` 与 CollapseGroup 整理信息架构。
54
+ - 用户显式指定 `Dialog/Drawer/Page` 或宽度时以用户配置为准。Drawer 是贴边直角容器;
55
+ Dialog 使用平台统一大圆角、可拖动、居中弹层,遮罩服从正向开关 `sys_config.FormMaskBlur`,缺失或 `0/false` 默认关闭毛玻璃。
56
+ 7. 为管理员/目标角色分配菜单权限,并以真实登录用户验收。
57
+
58
+ ## 绑定表菜单不能只写两个字段
59
+
60
+ 除 `Name` 和 `DiyTableId` 外,至少配置或允许平台推断:
61
+
62
+ - `TableDiyFieldIds`
63
+ - `SelectFields`
64
+ - `SearchFieldIds`
65
+ - `SortFieldIds`
66
+ - `NotShowFields`
67
+ - `StatisticsFields`
68
+ - `MobileListFields`
69
+ - `CardTitleTagFields`
70
+ - `CardBottomTagFields`
71
+ - `DefaultOrderBy`
72
+
73
+ 普通状态、开关等低基数字段不能机械创建单列索引。只有真实查询、关联、唯一约束
74
+ 或扫描需要的索引才进入 Manifest 并通过 MCP 创建、回读。
75
+
76
+ Manifest 中按字段名声明统计列,使用 `statFields` 或 `statisticsFieldNames`,例如
77
+ `statFields: ['Amount', 'Quantity']`;MCP 会解析目标租户的字段 Id。
78
+ `statisticsFields` / `StatisticsFields` 表示已经转换好的原生 JSON,元素为
79
+ `{ Id: '真实 diy_field.Id', Type: 'Sum' }`,不能填字段名称字符串。发布前用有记录的
80
+ 实际列表检查 `DataAppend.StatisticsFields` 及页面汇总,再以无权限账号检查汇总范围;
81
+ HTTP 成功或菜单字段非空不足以证明统计有效。
82
+
83
+ ## AI 模块视觉交付门禁(强制)
84
+
85
+ 对每个 `Display=1` 或 `AppDisplay=1` 且绑定业务表的 Diy 模块,AI 不能只依赖 CRUD
86
+ 默认页,也不能只写 `Name/DiyTableId` 后结束。至少完成以下设计和回读:
87
+
88
+ 1. 每个列表字段都给出符合内容长度的 `TableWidth`;标题/名称/地址较宽,日期/编码居中,
89
+ 金额/数量/状态较紧凑。PC 复合列必须另给合理的 `MinWidth`,不得让末列自适应覆盖它。
90
+ 2. 每个模块都配置紧凑 Hero 的业务标题、简短副标题和 2~4 个动态指标。优先统计待处理、
91
+ 逾期、金额、容量、风险、完成率等当前表真正有意义的业务数据,不能全部退化为总记录数。
92
+ 3. 指标只能来自 `StatisticsFields`、当前列表 `DataCount/PageCount` 或一个批量聚合接口。
93
+ 禁止随机数、伪统计、静态演示数字和没有口径的“看起来好看”数值。无法推断时允许用
94
+ `DataCount + PageCount` 做诚实最低兜底,并在后续由业务人员补充口径。
95
+ 4. 左侧菜单角标只给少量有行动含义的重要菜单,例如待办、未读、逾期、低库存;禁止每个
96
+ 菜单都加。`PageTabs` 的状态数量、`MoreBtns/PageBtns/FormBtns/BatchSelectMoreBtns/
97
+ ExportMoreBtns` 的有用数量也应设计角标,但同页统计必须批量返回,禁止 N+1。
98
+ 5. PC 至少设计一个 `Field + Lines + TrailingFields` 复合主列。已放入次要行或右侧图标/
99
+ 状态的字段必须从普通独立列去重;主字段、次要行、右侧字段及其 `RequiredFields` 都要
100
+ 进入查询结果,宽度必须足以容纳多行和尾随标签。一般情况下每个复合列最多两行,即
101
+ 一个主字段加一个 `Lines` 次要字段;可以配置多个各自两行的复合列,但不要在同一列放
102
+ 两个 `Lines` 形成三行高表格。确有特殊层级价值时才允许三行,并必须完成桌面视觉验收。
103
+ 6. 移动端卡片按真实字段规划图片/头像、标题、副标题、顶部标签、状态、右侧金额、正文、
104
+ Meta、底部区域;同一字段不得在多个区域机械重复,空区域应隐藏而不是留下占位。
105
+ 7. `EnableViewSchema` 只控制 Detail/Edit 自定义表单。Hero、指标、列表密度、PC 复合列、
106
+ 移动端卡片只要有配置就始终生效;设计器必须提供独立的“自定义表单”Tab。
107
+
108
+ 平台自动生成的 List/Card 配置只是防止空白界面的最低值,不能替代 AI 对业务状态、金额、
109
+ 时效和操作路径的分析。显式配置优先于自动值;写后用 `microi_get_module` 回读 ViewSchema、
110
+ 列宽、统计列、卡片区域和角标配置。
111
+
112
+ ## 打开方式
113
+
114
+ | OpenType | 用途 |
115
+ |---|---|
116
+ | `Diy` | 标准表单引擎列表/表单 |
117
+ | `Component` | 主前端已注册 Vue 组件 |
118
+ | `Iframe` | 受控外部页面 |
119
+ | `SecondMenu` | 仅作为父菜单 |
120
+ | `Report` | 虚拟报表 |
121
+ | `MicroService` | 已发布前端微服务页面 |
122
+ | `CodeForm` | 表单设计器生成并在已发布微服务中运行的独立 Vue 3 页面;必须绑定 `DiyTableId` |
123
+ | `WorkFlow` | 审批工作流模块;必须绑定 `DiyTableId` 和已启用流程的 `FlowDesignId` |
124
+
125
+ `WorkFlow` 模块的 `DiyTableId` 必须等于 `wf_flowdesign.TableId`。完整 Manifest
126
+ 可填写 `flowName` 引用同一份 `workflows` 定义,生成器保存流程后回填
127
+ `sys_menu.FlowDesignId`;引用已存在流程时填真实 `flowDesignId`。
128
+ 使用 `microi_get_module` 回读 `OpenType/FlowDesignId/DiyTableId`,再从模块
129
+ 实际发起并检查审批待办。流程节点人员、坐标和拓扑详见 `v8-workflow`。
130
+
131
+ `CodeForm` 复用 MicroService 宿主与菜单权限上下文。先在表单设计器生成源码,保存至 `microi-generated-forms`,构建并发布微服务;再配置 `MicroServiceKey + MicroServiceRoutePath`(以及当前租户真实的 `MicroServiceId + MicroServicePageId`),保留原表的 `DiyTableId`。Manifest 生成器可解析可移植的 Key/RoutePath;`microi_create_module` 必须传实际 Id。不能把只保存私有源码当作已发布运行产物。
132
+
133
+ Iframe 不把长期 Token、密码或连接串放 URL。第三方单点登录使用短期、一次性、
134
+ 可撤销的服务端交换票据,限制 redirect/scope,并在落地后清理地址栏。
135
+
136
+ ## 数据与业务逻辑
137
+
138
+ - 单表 CRUD 已由绑定表菜单提供,不额外创建重复接口引擎。
139
+ - 后端 V8 可用 `V8.ModuleEngine.GetTableData({...})`,通过
140
+ `ModuleEngineKey` 应用模块的关联表查询配置;标准前端 V8 不挂载
141
+ `V8.ModuleEngine`。
142
+ - 查询接口替换、导入/导出替换和跨表动作属于复杂逻辑时,使用接口引擎。
143
+ - 前端按钮只做确认、收集少量参数、调用接口和刷新;事务与最终校验在后端。
144
+ - 预计超过 2 分钟、500 条、1000 个扇出或 100 次外部调用时使用真实后台任务。
145
+ - 不复制官网旧“Redis 文本进度 + 长事务循环”导入示例作为新实现;必须有稳定
146
+ 幂等键、业务任务状态、真实 Current/Total、失败恢复和必要的 checkpoint 分片。
147
+
148
+ ### 原生 SQL 身份占位符与统计安全
149
+
150
+ - 模块 SqlWhere/SqlJoin 及字段选项 SQL 中的 `$CurrentUser.Id$`、
151
+ `$CurrentUser.RoleIds$`、`$CurrentUser.Level$` 必须使用本次可信后端授权快照。
152
+ 角色集合只包含当前有效 RoleId,不能按旧 Token、角色名称或请求中的同名属性授予权限。
153
+ `IN ($CurrentUser.RoleIds$)` 继续支持;角色撤销后即使仍拥有同表菜单,也须验证计数与汇总不越权。
154
+ - SQL 替换使用局部克隆;部门等其它扩展保留兼容语义,不覆盖 `V8.CurrentUser`。
155
+ HTTP JSON 不能注入授权快照或可信调用标记,父用户与当前身份不符、用户禁用均失败关闭。
156
+ - 用户访问密钥仍绑定有效 sys_user,沿“账号有效角色 + 密钥 scope/路由/表范围收窄”授权;
157
+ 不把访问密钥伪装成无所属账号的独立角色身份,账号不存在或停用时拒绝查询。
158
+ - Count、SUM 在逐行数据过滤之前执行,列表/计数/导出必须共享真正的查询范围;
159
+ 不能以 DataFilter 已拒绝详情为由宣称统计安全。验收包含旧 Token 撤角、角色删除、
160
+ 管理员降级但仍有菜单、不同父身份和用户对象未被修改。
161
+ - 本能力依赖对应后端二进制;应用包无需复制用户角色数据。它不改变 DbRead 或父事务的隔离语义,
162
+ 联查授权表的副本延迟与旧 RR 快照需要独立验证,不将 SQL 生成通过称为真实数据库验收。
163
+
164
+ ### 菜单启动查询与字段元数据兼容
165
+
166
+ - 菜单树是登录后的启动控制面。读取 `sys_menu` 时,不能把浏览器传入的
167
+ `_SelectFields` 直接交给依赖 `diy_field` 的通用查询投影:旧库、空库或升级后缓存
168
+ 未同步时,物理列仍存在但元数据可能不完整,查询结果会退化成只含固定字段 `Id`。
169
+ - 服务端应先在已完成登录、租户与角色菜单范围校验的可信边界读取物理菜单行,再在内存中
170
+ 按请求字段投影;构建树所需的 `Id/ParentId/Sort` 必须保留。可信标记不得由浏览器 JSON
171
+ 绑定,不能借此绕过菜单、角色或数据权限。
172
+ - 底层菜单查询失败必须原样返回失败,禁止把失败结果转换成 `Code=1` 的空菜单。回归测试至少
173
+ 覆盖“不向表单引擎下传显式投影”“字段名大小写兼容”“投影仍保留树字段”“未指定字段时
174
+ 保留物理行”。
175
+
176
+ ## 跨端 ViewSchema
177
+
178
+ 顶层 PC 数据列表默认使用紧凑的新模块标题样式;即使未启用自定义表单视图,也不能退回无标题的旧外观。无指标头部固定 `44px`、含指标头部固定 `62px`,连同间距总纵向占用约 `50px / 68px`。子表、关联表、嵌入表不重复显示,移动端由固定导航栏承载标题。`Scene=List/Card` 的个性化标题、指标、复合列和卡片配置存在时必须直接生效;`EnableViewSchema` 只控制 Detail/Edit 自定义表单视图。
179
+
180
+ PC 列表的固定结构顺序是“模块 Hero(标题/副标题/动态指标)→ PageTabs → 查询与表格”,Hero 必须渲染在页面多 Tab 上方。头部只使用一次性入场和一次性轻量光效,禁止持续循环动画;`prefers-reduced-motion: reduce` 必须关闭动画和过渡。
181
+
182
+ PageTabs 通过 `TargetSysMenuId` 切换不同模块/表时,入口模块必须作为稳定宿主:客户端在同一个 `diy-table` 实例内加载目标模块的菜单、表、字段与列表数据,只更新当前 URL 的 `Tab` 查询参数,不替换路由、面包屑、顶部访问标签或宿主 Hero。入口模块只配置一组 PageTabs;目标菜单可隐藏导航,但只需保留目标表格设计和角色权限,不得复制同一组 PageTabs。隐藏目标菜单统一设置 `ParentId=入口菜单Id、Display=0、AppDisplay=0、HasChild=0、PageTabs=[]`,入口菜单保持 `HasChild=0` 以继续作为可点击业务入口。模块设计器必须用可搜索菜单树显示 `TargetSysMenuId` 的模块名称,不能只在运行时 JSON 中保存不可见 Id。切换时必须中止旧请求并以模块上下文版本丢弃迟到响应,失败时回滚原模块。
183
+
184
+ 模块首屏或跨模块切换期间,Hero 标题/指标、PageTabs、工具栏与列表必须显示与最终布局同尺寸的主题化骨架屏;不能先渲染空白旧布局再整体位移。骨架屏同样遵守 `prefers-reduced-motion: reduce`,并在无指标或无 PageTabs 时按元数据提示隐藏对应占位。
185
+
186
+ `ViewSchema` 是模块级视图,不写入已废弃的通用 `DiyConfig`。优先通过 sys_menu“跨端视图”的 `DiyModulePresentationDesigner` 配置;Detail/Edit 使用独立的“自定义表单视图 JSON”,需要完整协议、角色优先级或未知扩展字段时再使用高级 JSON。启用自定义表单视图后仍须:
187
+
188
+ - 配置 `EnableViewSchema=1`;`ViewSchemaVersion/ViewConfigVersion` 可为空,分别按 `1.0/1` 处理并在后续变更时递增配置版本。
189
+ - 按 Scene、Device、RoleIds、Priority 选择视图。
190
+ - 配置损坏或客户端不支持时回退标准 `sys_menu + diy_table + diy_field`,不能白屏。
191
+ - 小程序只消费声明式动作,不执行 PC 的任意 `V8Code`。
192
+ - 声明式动作中的 ParamMap/VisibleWhen 只允许白名单字段,不使用 `eval`。
193
+
194
+ ### 重要模块的统计与信息层级
195
+
196
+ - 待办、库存预警、未读、逾期、待收/待付等有行动含义的菜单,主动询问并配置
197
+ `MenuBadgeEnabled=1`、`MenuBadgeApiEngineKey` 与说明统计口径的 `MenuBadgeTooltip`。接口统一返回
198
+ `{ Code:1, Data:{ Value: number } }`,并按当前用户权限统计。
199
+ - `Scene=List` 的 `Layout.Hero` 用 `Eyebrow/Title/Description/Metrics` 建立模块标题与
200
+ 指标条。相同 `ApiEngineKey` 的指标必须由一个聚合接口批量返回,使用 `ValuePath`
201
+ 取值;禁止一个指标一次请求。
202
+ - PC Hero 有指标时采用“左侧标题说明约 25%~30% + 右侧指标区弹性占满”的信息层级,
203
+ 中间只允许一条弱化渐变分隔;指标条容器和单个指标不得叠加多层描边。无指标时标题说明
204
+ 自动占满整行,不保留空指标区。每个指标必须显式配置 `Icon`,并通过不同的 `Tone` 或
205
+ `Color` 形成可辨识的图标色块与轻背景;同一 Hero 内不得让全部指标使用相同图标和颜色。
206
+ - Hero 指标可用 `Source=DataCount` 读取当前筛选总记录数、用 `Source=PageCount` 读取本页
207
+ 已加载记录数;两者复用列表结果,不调用额外接口。字段汇总继续用 `Field`,跨表或复合
208
+ 统计才用 `ApiEngineKey + ValuePath`。
209
+ - `Layout.List.Columns[]` 用 `Field + Lines + TrailingFields` 配置复合列和右侧图标状态;
210
+ 默认按 `Field + 1 个 Lines` 形成双行,多个信息组应拆成多个双行复合列,避免单列三行
211
+ 抬高整张表。声明支持 `Tone/Color/Icon/ShowLabel/Prefix/Suffix`,引用字段必须进入查询列。
212
+ - `Scene=Card, Device=Mobile` 用 `Layout.Card` 配置 `AvatarTextField/TitleField/TopFields/
213
+ SubtitleFields/RightFields/Fields/MetaFields/BottomFields`。未配置时继续兼容
214
+ `MobileListFields/CardTitleTagFields/CardBottomTagFields`。
215
+ - `PageTabs/MoreBtns/PageBtns/BatchSelectMoreBtns/ExportMoreBtns/FormBtns` 需要数量时配置
216
+ `BadgeEnabled/BadgeApiEngineKey`;一个接口接收当前页 `Ids + ButtonKeys` 并一次返回
217
+ `Data.Buttons` 与 `Data.Rows`,禁止逐行调用。
218
+ - 能直接用字段表达的信息优先配置复合列/卡片字段;只有确需 HTML 样式或组合逻辑时
219
+ 才使用字段的 `V8TmpEngineTable`,且仍需遵守 DOMPurify 和查询字段范围。
220
+ - 存量菜单没有 Hero.Metrics 时,客户端只允许根据真实后端汇总、当前筛选总数、本页加载数
221
+ 和本页真实状态分布生成兜底指标;不得用随机值装饰页面。字段聚合缺少全量口径时必须明确
222
+ 标注“本页”,不能把当前页求和冒充全表汇总。
223
+
224
+ ### 表单布局协同
225
+
226
+ - `<=6` 个核心可见字段优先平铺;`7~29` 个字段按基础、业务、状态、附件等信息域使用
227
+ `CollapseGroup`;`30+` 个字段,或存在多个大型子表、扫码/代码编辑等强任务域时使用
228
+ 表级 `diy_table.Tabs`。最终还要按有效表单行校正,避免产生只有少量字段的空洞 Tab。
229
+ - 新增 `Tabs/CollapseGroup/Divider/Alert` 等布局节点必须走明确的“仅元数据”专用路径。
230
+ 普通新增字段接口可能同步对业务表执行物理 DDL,不能把向 `diy_field` 新增一行误认为
231
+ 仅保存布局配置;写入后要同时回读元数据并核对业务表结构未新增实体列。
232
+
233
+ ## 验收
234
+
235
+ - `Display/AppDisplay` 除明确隐藏外为 1,父子菜单层级正确。
236
+ - 路由刷新、直接访问、切换菜单均不 404/白屏。
237
+ - 列表字段、筛选、排序、统计、移动端卡片与预期一致。
238
+ - 权限用户可访问,未授权用户不能靠 URL、`_SysMenuId` 或前端字段绕过。
239
+ - MoreBtns/FormBtns/PageTabs/BatchSelectMoreBtns 显隐、调用和刷新正确;PageTabs 数字角标使用稳定 Tab Id 取 `Data.Buttons`。
240
+ - 菜单角标、模块指标和按钮角标按真实权限返回,零值/超限/接口失败降级正确且无 N+1。
241
+ - Hero 在有指标、无指标、长标题和 3~5 个指标时均层级清晰;指标无多层线框,同一组图标与
242
+ 语义色可区分,并在浅色/深色主题下保持可读。
243
+ - PC 复合列和 Mobile Card 引用的附加字段均在查询结果中;长文本、空值、模板值不破版。
244
+ - PC 和移动端分别验证;MicroService 还要验证运行时、页面路由和宿主上下文。
245
+ ### 多级表头与顶部 Banner
246
+
247
+ - 字段权限使用模块 `FieldPermissions`(Manifest `fieldPermissions`),Version=1;按 Everyone/Roles/Users/Departments/Jobs 与 Fields 配置 Visible/Editable,授权对象数组保存 Id。多个匹配组限制取交集,隐藏同时不可编辑;普通用户按最终能力执行,超级管理员按原管理边界。岗位来自 `diy_job`(显示 `JobName`),匹配权威 `sys_user.Jobs` 中的岗位 Id;岗位与角色 `RoleIds` 分开,不得相互替代。
248
+ - 不能只做前端隐藏:FormEngine 查询、隐藏字段条件/排序/统计、导出、写入和导入均须校验。生成代码使用服务端 `DataAppend.FieldAccess`;未传菜单的客户端不能绕过该表已启用的模块限制。验收应覆盖普通账号、直接请求、角色/人员/部门/岗位匹配与只读写入失败。
249
+ - 树模块拖动排序配置 `TreeDragSortEnabled`、`TreeDragSortField`(Manifest 同名小驼峰),排序字段必须为已注册数值字段。业务由 Managed、非匿名接口引擎 `mci-tree-drag-sort` 执行,可信原子仅负责固定引擎的模块解析、权限和白名单写入。
250
+ - 拖动前取全树快照,移动时核验快照;旧、新父级的所有同级记录按间隔 10 重排,同时维护父级、祖先链、HasChild。不得仅更新被拖动记录,也不得按当前分页重排;跨级、循环、过期快照、任一兄弟无权编辑或写入失败必须整次回滚。
251
+
252
+ - 数据源【多级表头】使用现有 `sys_menu.TableHeaders`,填写 `[{"Label":"人数(人)","Fields":["Total","Male","Female"]}]`;`Fields` 必须引用可见、连续的查询列字段名。嵌套分组可使用 `Children`。缺省、非法 JSON、重复或不连续字段时客户端回退普通表头。
253
+ - Manifest `modules[].tableHeaders` 接受同一数组,MCP 写入 `sys_menu.TableHeaders`;更新已有菜单可通过 `microi_update_module` 传同名字段并回读,不能把合并表头放入已废弃的 `DiyConfig`。
254
+ - 模块的 `HideTableBanner`、`HideFormBanner` 分别关闭表格与表单顶部 Banner。未配置或 `0` 均显示;设为 `1` 后对应专属统计接口不执行,按钮角标接口不受影响。Manifest 使用 `hideTableBanner`、`hideFormBanner`。
255
+ - 上述配置由模块引擎官方应用交付,验收应分别核对物理列、字段可见性、商城包哈希,以及普通表头、合并表头和两种 Banner 开关的真实页面与请求。