@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,234 +1,234 @@
1
- # page-engine 详细参考 1
2
-
3
- > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
-
5
- <!-- microi-progressive:chunk id=page-engine-008 sha256=d3bd322f076bb16a6575e9d9a5b487a9b4fcf98189b163b6608937f4f7615beb -->
6
- ## 所有组件类型
7
-
8
- ### statistic — 统计面板
9
- ```json
10
- { "data": [{ "name": "指标名", "value": 100000, "icon": "Top", "bgColor": "", "bgImage": "linear-gradient(...)", "linkUrl": "/" }], "searchData": [] }
11
- ```
12
-
13
- ### progress — 进度
14
- ```json
15
- { "data": [{ "title": "标题", "value": "¥1,000", "subTitle": "目标", "percentage": 60, "color": "#409EFF" }], "searchData": [] }
16
- ```
17
-
18
- ### links — 快捷导航
19
- ```json
20
- [{ "title": "导航名", "iconUrl": "图标URL", "linkUrl": "/路径" }]
21
- ```
22
-
23
- ### carousel — 轮播图
24
- ```json
25
- [{ "url": "图片URL" }]
26
- ```
27
-
28
- ### tabel — 表格
29
- ```json
30
- {
31
- "headerData": [{ "prop": "字段名", "label": "列标题", "width": "", "align": "center" }],
32
- "bodyData": [{ "字段名": "值" }],
33
- "total": 2,
34
- "searchData": []
35
- }
36
- ```
37
- 特殊列标记:`progress_ui`(进度条), `chart_ui`(迷你图), `rate_ui`(评分), `status_ui`(状态标签), `children`(多级表头)
38
-
39
- ### line / bar — 折线图 / 柱状图
40
- ```json
41
- { "xAxis": ["Mon", "Tue", "Wed"], "series": [{ "name": "系列", "data": [420, 132, 101] }], "searchData": [] }
42
- ```
43
-
44
- ### pie — 饼图
45
- ```json
46
- { "data": [{ "value": 1048, "name": "搜索引擎" }], "searchData": [] }
47
- ```
48
-
49
- ### funnel — 漏斗图
50
- ```json
51
- { "data": [{ "value": 100, "name": "展示" }], "searchData": [] }
52
- ```
53
-
54
- ### linebar — 折柱混合
55
- ```json
56
- { "xAxis": ["周一"], "series": [{ "name": "蒸发量", "type": "bar", "unit": "ml", "data": [2.0] }, { "name": "温度", "type": "line", "unit": "°C", "data": [2.0] }], "searchData": [] }
57
- ```
58
-
59
- ### map — 高德地图
60
- ```json
61
- [{ "id": "1", "title": "标记名", "position": "经度,纬度", "icon": "", "content": "" }]
62
- ```
63
-
64
- ### areamap — 区域地图
65
- ```json
66
- [{ "name": "地区名", "value": 74, "path": "/路径" }]
67
- ```
68
-
69
- ### gantt — 甘特图
70
- ```json
71
- {
72
- "tasks": [{ "id": 10, "text": "任务名", "type": "project", "progress": 0.1, "open": true }],
73
- "links": [{ "id": 10, "source": 12, "target": 13, "type": 1 }],
74
- "columns": [{ "name": "text", "label": "任务名称", "width": 220, "tree": true }]
75
- }
76
- ```
77
-
78
- ### fullcalendar — 日历看板
79
- ```json
80
- [{ "id": "event_01", "title": "事件名", "start": "2025-05-12", "end": "2025-05-13", "allDay": true }]
81
- ```
82
-
83
- ### html — 超文本
84
- ```json
85
- { "dataJson": { "col21": "替换值" }, "dataHtml": "<!DOCTYPE html>...<td>${col21}</td>..." }
86
- ```
87
-
88
- ### descriptions — 描述列表
89
- ```json
90
- [{ "label": "字段名", "value": "值", "span": 1, "align": "center" }]
91
- ```
92
-
93
- ### 其他组件
94
- | 组件 | dataJson |
95
- |------|----------|
96
- | workbench | `{ "icon": "URL", "title": "欢迎", "subTitle": "副标题" }` |
97
- | calendar | `[{ "date": "2024-12-01", "content": "事件" }]` |
98
- | collapse | `[{ "title": "标题", "content": "HTML内容" }]` |
99
- | steps | `{ "activeIndex": 0, "stepArr": [{ "title": "步骤1", "description": "描述" }] }` |
100
- | timeline | `[{ "date": "2024-05-01", "title": "标题", "content": "内容" }]` |
101
- | fish | `[{ "label": "类别", "children": [{ "label": "子项" }] }]` |
102
- | webgl | `{ "gltfPath": "模型URL", "hdrPath": "HDR URL" }` |
103
- | office | `{ "filePath": "文件URL" }` |
104
- | image | widgetParams[0] 为 `input` 类型,value 为图片URL |
105
- | video | widgetParams[0] 为 `input` 类型,value 为视频URL |
106
- | browser | widgetParams[0] 为 `input` 类型,value 为网址 |
107
- | diytable | 传入模块ID和菜单ID,嵌入低代码表格 |
108
- | diyform | 传入表ID和记录ID,嵌入低代码表单 |
109
-
110
- ### 平台内置业务组件
111
-
112
- | type | label | 关键参数 | 说明 |
113
- |------|-------|----------|------|
114
- | `aiengine` | AI引擎 | 无 | 嵌入 `Microi.Client/src/views/ai-engine/index.vue`;运行态使用紧凑嵌入模式,缩小英雄区、统计卡和快捷入口 |
115
- | `workcenter` | 工作中心 | `[0]` 内容;`[1]` 待办模块;`[2]` 流程模块 | 展示“我的工作”时可用两个隐藏 `sys_menu` 模块让 `diy-table` 承载待办与流程列表;日历/公告为兼容模式 |
116
- | `pageengine` | 界面引擎 | `widgetParams[0].type = "pageengine"`,`value` 为 `mic_page.Id` | 嵌入另一个界面引擎页面,设计器提供图形化页面下拉选择 |
117
-
118
- 界面引擎嵌套必须使用 `pageengine-widget.vue` 直接加载 `form-renderer` 组件,不得使用 iframe。每个嵌套页面由 `PAGE_ENGINE_STORE_KEY` 注入独立的 Pinia store,避免子页面覆盖父页面 `formData`;递归页面 Id 通过 `PAGE_ENGINE_RENDER_CONTEXT_KEY` 检测并阻止循环嵌套。父容器和组件高度设为 `0` 表示自动高度,由最外层页面统一滚动。
119
-
120
- `mic_page` 是按角色管理的运行资源:普通登录用户读取或嵌套页面时必须拥有菜单权限或高级表 `Read`,新增、修改、删除分别要求明确的 `Add`、`Edit`、`Del`;所有匿名 FormEngine 调用仍拒绝。角色页只展示服务端返回的分级策略,最终授权和当前操作者的平台管理员身份由后端主库复核。
121
-
122
- 界面引擎渲染页会为 `_IsAdmin` 或 `Level >= 9999` 的用户提供“界面设计”入口,跳转 `/mic/autopage?Id={mic_page.Id}`。入口优先放入后台 TagsView 页签右键菜单,并在页面第一个容器标题栏右侧提供紧凑快捷入口,与 `moreOption` 等操作使用同一个 flex 操作区垂直居中、右对齐;不得额外占用页面高度、增加顶部空白或覆盖标题,非管理员不显示。嵌套 `pageengine` 也必须显示其自身页面的设计入口,并由父页面直接打开对应子页面设计器。
123
-
124
- 首页编排可以组合 `aiengine`、`workcenter`、`diycalendar`、`diytable` 和一个占大区域的 `pageengine`。公告应优先通过绑定 `diy_notice` 的 `diytable` 渲染,使增删改权限继续由 `sys_menu + _RoleLimits` 控制;统计子页面由客户独立替换时,只需修改被嵌入的 `mic_page`,无需重做首页布局。
125
-
126
- <!-- /microi-progressive:chunk -->
127
- <!-- microi-progressive:chunk id=page-engine-009 sha256=81364ae7567d4eeb5a2543d8e3f89ef752e34dfa829a6a53625486cd6458ffdb -->
128
- ## Office/PDF 在线预览自然语言生成规则
129
-
130
- 当用户用自然语言要求“界面引擎预览 PDF/Word/Excel/PPT”“接口引擎返回 PDF 文件”“打开时跳到第 N 页”“按角色显示不同页码”“每 5 秒/10 秒轮询,但只有文件变化才刷新”时,优先生成 `office` 组件,而不是 `iframe/html/browser` 拼接。
131
-
132
- `office` 组件图形化参数必须完整:
133
-
134
- ```json
135
- {
136
- "type": "office",
137
- "label": "Office/PDF预览",
138
- "widgetOption": { "span": 24, "height": 720 },
139
- "widgetParams": [
140
- { "sort": 0, "label": "接口引擎地址", "type": "textarea", "value": "$ApiBase$/apiengine/{ApiEngineKey}" },
141
- { "sort": 1, "label": "静态文件地址", "type": "input", "value": "" },
142
- { "sort": 2, "label": "文件类型", "type": "select", "value": "pdf" },
143
- { "sort": 3, "label": "初始页码", "type": "number", "value": 1 },
144
- { "sort": 4, "label": "轮询接口秒数", "type": "number", "value": 0 }
145
- ]
146
- }
147
- ```
148
-
149
- 接口引擎返回契约:
150
-
151
- ```javascript
152
- return {
153
- Code: 1,
154
- Data: {
155
- FileName: 'report.pdf',
156
- ContentType: 'application/pdf',
157
- FileByteBase64: base64,
158
- PageNumber: 2,
159
- InitialPage: 2,
160
- FileKey: activeFileKey + ':p2',
161
- RefreshSeconds: 5
162
- }
163
- };
164
- ```
165
-
166
- 轮询但不刷新时,不要重复返回文件内容;返回下面任一写法即可,前端会保持当前预览不重建:
167
-
168
- ```javascript
169
- return { Code: 1, Data: { NeedRefresh: false, FileKey: currentFileKey, PageNumber: currentPage } };
170
- return { Code: 1, Data: { NotModified: true, FileKey: currentFileKey } };
171
- ```
172
-
173
- 接口引擎应读取前端轮询参数:`V8.Param.CurrentFileKey`、`V8.Param.CurrentPageNumber`、`V8.Param.PageNumber`、`V8.Param.WidgetNumber`。当 Redis/缓存中的活动文件、版本号、角色页码没有变化时返回 `NeedRefresh:false`;当文件或页码变化时返回 `FileByteBase64` 或 `FileUrl`,同时返回新的 `FileKey` 和 `PageNumber/InitialPage`。
174
-
175
- 角色页码建议在接口引擎中根据 `V8.CurrentUser.Level`、`RoleName`、`RoleIds` 判断,例如管理员第 2 页、财务第 3 页;不要把角色判断写死在前端 Page JSON。缓存 Key 使用 `Microi:${V8.OsClient}:PageEnginePdfPreview:{业务Key}`。
176
-
177
- ### Office/PDF 接口返回字段细则
178
-
179
- - `FileName`:文件名,例如 `report.pdf`。
180
- - `ContentType`:文件类型,PDF 必须用 `application/pdf`;Word/Excel/PPT 可用对应 Office MIME。
181
- - `FileByteBase64`:文件字节 Base64;适合接口引擎动态生成或转发 PDF。
182
- - `FileUrl`:文件 URL;适合文件已在 HDFS/OSS/公网可访问时返回。
183
- - `PageNumber` / `InitialPage`:PDF 打开后跳转页码。角色控制页码必须在接口引擎中根据 `V8.CurrentUser` 判断,不要写死在页面 JSON。
184
- - `FileKey` / `CacheKey`:文件版本标识,建议包含业务 Key、缓存版本号、角色页码,例如 `activePdf:v3:page2`。
185
- - `NeedRefresh:false` / `NotModified:true`:轮询时文件和页码未变化,前端保持当前预览并重新按当前页码定位,不重新下载文件。
186
- - `RefreshSeconds`:接口可返回建议轮询秒数,但页面图形化配置仍是主要控制项;没有自动刷新需求时配置为 `0`。
187
-
188
- 接口引擎要显式读取这些前端参数:
189
-
190
- - `V8.Param.PageNumber`:组件配置的初始页码。
191
- - `V8.Param.CurrentPageNumber`:前端当前页码。
192
- - `V8.Param.CurrentFileKey`:前端当前文件 Key。
193
- - `V8.Param.CurrentFileUrl`:前端当前文件地址。
194
- - `V8.Param.WidgetNumber`:当前 office 组件编号。
195
-
196
- 生成示例接口时必须写清楚中文注释:每个参数的含义、Redis/缓存 Key 的作用、什么情况下返回 `NeedRefresh:false`、什么情况下返回新的 `FileByteBase64/FileUrl` 和 `PageNumber`。
197
-
198
- <!-- /microi-progressive:chunk -->
199
- <!-- microi-progressive:chunk id=page-engine-010 sha256=98256e1f8068f29e3e7cb2096fb8290966a58d47390371bec965001a9e706ddd -->
200
- ## searchData 查询条件通用结构
201
-
202
- ```json
203
- [
204
- { "prop": "period", "value": "month", "defaultValue": "month", "label": "统计周期", "type": "select", "remote": false, "options": [{ "label": "本日", "value": "today" }, { "label": "本周", "value": "week" }, { "label": "本月", "value": "month" }, { "label": "本季", "value": "quarter" }, { "label": "本年", "value": "year" }, { "label": "去年", "value": "lastYear" }] },
205
- { "prop": "department", "value": "", "label": "部门", "type": "select", "remote": false, "optionUrl": "", "options": [{ "label": "全部", "value": "" }] },
206
- { "prop": "keyword", "value": "", "label": "关键词", "type": "input" }
207
- ]
208
- ```
209
-
210
- ### 统计周期与更多筛选
211
-
212
- - 统计类组件 `statistic`、`progress`、`bar`、`line`、`linebar`、`pie`、`funnel`、`tabel` 默认必须支持周期筛选。
213
- - 周期按钮固定包含:本日 `today`、本周 `week`、本月 `month`、本季 `quarter`、本年 `year`、去年 `lastYear`。
214
- - 同时开启组件的显示查询和日期筛选开关:`statistic` 为 `widgetParams[18]/[19]`,`progress` 为 `[26]/[27]`,`bar/line` 为 `[1]/[16]`,`linebar` 为 `[1]/[18]`,`pie` 为 `[1]/[19]`,`funnel/tabel` 为 `[1]/[13]`。
215
- - 接口引擎会收到 `period`、`_period`、`start`、`end`、`startDate`、`endDate`。当 `period` 是 `today/week/month/quarter/year/lastYear` 时,必须优先按 `period` 计算时间范围、标题前缀和图表粒度;只有 `period=custom` 或没有 `period` 但有 `start/end` 时,才按自定义时间范围处理。
216
- - “更多”筛选里放业务条件,例如 `keyword`、`ownerId`、`customerType`、`status`、`department` 等;日期范围作为自定义时间范围保留在更多筛选中。
217
-
218
- ### 交付类首页例外与乱码验收
219
-
220
- - 如果用户明确说明首页是“项目交付看板、全量采集看板、客户交付状态看板”,或统计的是表单数、模块数、接口引擎数、用户数等平台全量资源,并明确不要本日/本周/本月/本年筛选,则统计组件的 `searchData` 必须保持 `[]`,相关显示查询开关必须为 `false`,不要套用经营看板的周期筛选默认值。
221
- - 交付类首页优先使用 `statistic`、`progress`、`pie`、`bar`、`linebar`、`html` 等图形化组件,不要为了凑数据把明细表格放到首页;明细应放在低代码表单菜单里查看。
222
- - 使用脚本或 FormEngine 写入 `mic_page.JsonObj` 时,中文 JSON 必须做编码安全处理:可将最终 JSON 字符串中的非 ASCII 字符转为 `\uXXXX` 后写入,避免数据库或中间层把标题写成 `????`。
223
- - 写入界面引擎后必须回读 `mic_page.JsonObj` 并检查:不包含 `????`;用户要求无周期筛选时,不包含 `period`、`本日`、`本周`、`本月`、`本年`;`JSON.parse(JsonObj)` 后标题能还原为中文。
224
- - 如果使用 MCP 或自动页面生成工具后发现它注入了默认周期筛选,必须在最终写入前移除这些筛选,并再次回读验证。
225
- - 交付类首页必须做可读性验收:彩色统计卡片、深色渐变、图表标签、HTML 组件中的文字必须显式设置高对比文字色。深色/饱和背景使用白色或接近白色文字;浅色背景使用 `#0f172a/#334155` 等深色文字。不得只设置背景色而遗漏标题、数值、图标颜色。
226
- - 写入后必须检查页面 JSON 和接口返回内容不包含直接暴露的 ECharts 模板占位符:`{a}`、`{b}`、`{c}`、`{d}`、`{value}`。这些只能作为图表 formatter 内部配置使用,不能出现在用户可见标题、饼图中心标题、HTML 文案或默认加载文本中。
227
- - 容器标题栏的 `moreOption.hidden` 语义必须按“true=隐藏、false=显示”处理。交付首页、统计驾驶舱如无明确跳转需求,容器标题可直接留空并在 HTML/组件内部渲染标题,避免右上角出现默认 `More/更多`。
228
- - 如果 Page Engine 前端标准图表组件会因为远程数据源自动显示周期筛选,而用户明确要求不要筛选条,可优先使用 `html` 组件承载实时接口返回的图形化驾驶舱;接口返回扁平字段如 `{ html: "<div>...</div>" }`,页面 `dataHtml` 使用 `${html}`。写入后回读验证无周期词、无 `More/更多`、无占位符、无低对比色。
229
- - 生成首页前必须判断组件沉淀层级:如果某个能力是平台高频标准能力(如指标卡、进度列表、状态分布、排行榜、时间线、描述列表、Office 预览),优先使用或补充 Page Engine 标准组件源码;如果只是当前项目的强业务驾驶舱、组合排版、一次性说明区块,可以用 `html` 组件定制。不要把明显可复用的标准能力长期塞进项目 HTML,也不要为了单个业务驾驶舱新增一堆低复用组件。
230
- - `html` 组件承载长文本、失败原因、来源清单、备注说明、交付结论时,必须设置 `white-space:normal`、`overflow-wrap:anywhere` 或使用逐条列表/卡片渲染;禁止把多条内容用 `;`、`,` 拼成一整行导致底部说明挤在一起。写入后必须检查长文本在 1366/1440 宽度下能自然换行且不横向溢出。
231
- - 交付类首页如果使用一个远程 `html` 组件承载整页驾驶舱,运行态应由外层框架滚动,不要给容器和组件写死 1000px 这类固定高度。页面 JSON 可将 `wrapperOption.height` 与 `widgetOption.height` 设为 `0`(或运行态支持的 `auto`),前端运行态必须按内容自适应高度;设计器模式再使用可编辑的默认高度。
232
- - 首页写入口径说明时,必须区分“用户口头期望数量”“原始资料条目数量”“按业务主体合并后的数量”“后台项目/规则/别名数量”。不要只显示一个“未交付 N 个”,应同时列出部分交付、待执行、阻塞/需业务人员配合的清单和原因。
233
-
234
- <!-- /microi-progressive:chunk -->
1
+ # page-engine 详细参考 1
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=page-engine-008 sha256=d3bd322f076bb16a6575e9d9a5b487a9b4fcf98189b163b6608937f4f7615beb -->
6
+ ## 所有组件类型
7
+
8
+ ### statistic — 统计面板
9
+ ```json
10
+ { "data": [{ "name": "指标名", "value": 100000, "icon": "Top", "bgColor": "", "bgImage": "linear-gradient(...)", "linkUrl": "/" }], "searchData": [] }
11
+ ```
12
+
13
+ ### progress — 进度
14
+ ```json
15
+ { "data": [{ "title": "标题", "value": "¥1,000", "subTitle": "目标", "percentage": 60, "color": "#409EFF" }], "searchData": [] }
16
+ ```
17
+
18
+ ### links — 快捷导航
19
+ ```json
20
+ [{ "title": "导航名", "iconUrl": "图标URL", "linkUrl": "/路径" }]
21
+ ```
22
+
23
+ ### carousel — 轮播图
24
+ ```json
25
+ [{ "url": "图片URL" }]
26
+ ```
27
+
28
+ ### tabel — 表格
29
+ ```json
30
+ {
31
+ "headerData": [{ "prop": "字段名", "label": "列标题", "width": "", "align": "center" }],
32
+ "bodyData": [{ "字段名": "值" }],
33
+ "total": 2,
34
+ "searchData": []
35
+ }
36
+ ```
37
+ 特殊列标记:`progress_ui`(进度条), `chart_ui`(迷你图), `rate_ui`(评分), `status_ui`(状态标签), `children`(多级表头)
38
+
39
+ ### line / bar — 折线图 / 柱状图
40
+ ```json
41
+ { "xAxis": ["Mon", "Tue", "Wed"], "series": [{ "name": "系列", "data": [420, 132, 101] }], "searchData": [] }
42
+ ```
43
+
44
+ ### pie — 饼图
45
+ ```json
46
+ { "data": [{ "value": 1048, "name": "搜索引擎" }], "searchData": [] }
47
+ ```
48
+
49
+ ### funnel — 漏斗图
50
+ ```json
51
+ { "data": [{ "value": 100, "name": "展示" }], "searchData": [] }
52
+ ```
53
+
54
+ ### linebar — 折柱混合
55
+ ```json
56
+ { "xAxis": ["周一"], "series": [{ "name": "蒸发量", "type": "bar", "unit": "ml", "data": [2.0] }, { "name": "温度", "type": "line", "unit": "°C", "data": [2.0] }], "searchData": [] }
57
+ ```
58
+
59
+ ### map — 高德地图
60
+ ```json
61
+ [{ "id": "1", "title": "标记名", "position": "经度,纬度", "icon": "", "content": "" }]
62
+ ```
63
+
64
+ ### areamap — 区域地图
65
+ ```json
66
+ [{ "name": "地区名", "value": 74, "path": "/路径" }]
67
+ ```
68
+
69
+ ### gantt — 甘特图
70
+ ```json
71
+ {
72
+ "tasks": [{ "id": 10, "text": "任务名", "type": "project", "progress": 0.1, "open": true }],
73
+ "links": [{ "id": 10, "source": 12, "target": 13, "type": 1 }],
74
+ "columns": [{ "name": "text", "label": "任务名称", "width": 220, "tree": true }]
75
+ }
76
+ ```
77
+
78
+ ### fullcalendar — 日历看板
79
+ ```json
80
+ [{ "id": "event_01", "title": "事件名", "start": "2025-05-12", "end": "2025-05-13", "allDay": true }]
81
+ ```
82
+
83
+ ### html — 超文本
84
+ ```json
85
+ { "dataJson": { "col21": "替换值" }, "dataHtml": "<!DOCTYPE html>...<td>${col21}</td>..." }
86
+ ```
87
+
88
+ ### descriptions — 描述列表
89
+ ```json
90
+ [{ "label": "字段名", "value": "值", "span": 1, "align": "center" }]
91
+ ```
92
+
93
+ ### 其他组件
94
+ | 组件 | dataJson |
95
+ |------|----------|
96
+ | workbench | `{ "icon": "URL", "title": "欢迎", "subTitle": "副标题" }` |
97
+ | calendar | `[{ "date": "2024-12-01", "content": "事件" }]` |
98
+ | collapse | `[{ "title": "标题", "content": "HTML内容" }]` |
99
+ | steps | `{ "activeIndex": 0, "stepArr": [{ "title": "步骤1", "description": "描述" }] }` |
100
+ | timeline | `[{ "date": "2024-05-01", "title": "标题", "content": "内容" }]` |
101
+ | fish | `[{ "label": "类别", "children": [{ "label": "子项" }] }]` |
102
+ | webgl | `{ "gltfPath": "模型URL", "hdrPath": "HDR URL" }` |
103
+ | office | `{ "filePath": "文件URL" }` |
104
+ | image | widgetParams[0] 为 `input` 类型,value 为图片URL |
105
+ | video | widgetParams[0] 为 `input` 类型,value 为视频URL |
106
+ | browser | widgetParams[0] 为 `input` 类型,value 为网址 |
107
+ | diytable | 传入模块ID和菜单ID,嵌入低代码表格 |
108
+ | diyform | 传入表ID和记录ID,嵌入低代码表单 |
109
+
110
+ ### 平台内置业务组件
111
+
112
+ | type | label | 关键参数 | 说明 |
113
+ |------|-------|----------|------|
114
+ | `aiengine` | AI引擎 | 无 | 嵌入 `Microi.Client/src/views/ai-engine/index.vue`;运行态使用紧凑嵌入模式,缩小英雄区、统计卡和快捷入口 |
115
+ | `workcenter` | 工作中心 | `[0]` 内容;`[1]` 待办模块;`[2]` 流程模块 | 展示“我的工作”时可用两个隐藏 `sys_menu` 模块让 `diy-table` 承载待办与流程列表;日历/公告为兼容模式 |
116
+ | `pageengine` | 界面引擎 | `widgetParams[0].type = "pageengine"`,`value` 为 `mic_page.Id` | 嵌入另一个界面引擎页面,设计器提供图形化页面下拉选择 |
117
+
118
+ 界面引擎嵌套必须使用 `pageengine-widget.vue` 直接加载 `form-renderer` 组件,不得使用 iframe。每个嵌套页面由 `PAGE_ENGINE_STORE_KEY` 注入独立的 Pinia store,避免子页面覆盖父页面 `formData`;递归页面 Id 通过 `PAGE_ENGINE_RENDER_CONTEXT_KEY` 检测并阻止循环嵌套。父容器和组件高度设为 `0` 表示自动高度,由最外层页面统一滚动。
119
+
120
+ `mic_page` 是按角色管理的运行资源:普通登录用户读取或嵌套页面时必须拥有菜单权限或高级表 `Read`,新增、修改、删除分别要求明确的 `Add`、`Edit`、`Del`;所有匿名 FormEngine 调用仍拒绝。角色页只展示服务端返回的分级策略,最终授权和当前操作者的平台管理员身份由后端主库复核。
121
+
122
+ 界面引擎渲染页会为 `_IsAdmin` 或 `Level >= 9999` 的用户提供“界面设计”入口,跳转 `/mic/autopage?Id={mic_page.Id}`。入口优先放入后台 TagsView 页签右键菜单,并在页面第一个容器标题栏右侧提供紧凑快捷入口,与 `moreOption` 等操作使用同一个 flex 操作区垂直居中、右对齐;不得额外占用页面高度、增加顶部空白或覆盖标题,非管理员不显示。嵌套 `pageengine` 也必须显示其自身页面的设计入口,并由父页面直接打开对应子页面设计器。
123
+
124
+ 首页编排可以组合 `aiengine`、`workcenter`、`diycalendar`、`diytable` 和一个占大区域的 `pageengine`。公告应优先通过绑定 `diy_notice` 的 `diytable` 渲染,使增删改权限继续由 `sys_menu + _RoleLimits` 控制;统计子页面由客户独立替换时,只需修改被嵌入的 `mic_page`,无需重做首页布局。
125
+
126
+ <!-- /microi-progressive:chunk -->
127
+ <!-- microi-progressive:chunk id=page-engine-009 sha256=81364ae7567d4eeb5a2543d8e3f89ef752e34dfa829a6a53625486cd6458ffdb -->
128
+ ## Office/PDF 在线预览自然语言生成规则
129
+
130
+ 当用户用自然语言要求“界面引擎预览 PDF/Word/Excel/PPT”“接口引擎返回 PDF 文件”“打开时跳到第 N 页”“按角色显示不同页码”“每 5 秒/10 秒轮询,但只有文件变化才刷新”时,优先生成 `office` 组件,而不是 `iframe/html/browser` 拼接。
131
+
132
+ `office` 组件图形化参数必须完整:
133
+
134
+ ```json
135
+ {
136
+ "type": "office",
137
+ "label": "Office/PDF预览",
138
+ "widgetOption": { "span": 24, "height": 720 },
139
+ "widgetParams": [
140
+ { "sort": 0, "label": "接口引擎地址", "type": "textarea", "value": "$ApiBase$/apiengine/{ApiEngineKey}" },
141
+ { "sort": 1, "label": "静态文件地址", "type": "input", "value": "" },
142
+ { "sort": 2, "label": "文件类型", "type": "select", "value": "pdf" },
143
+ { "sort": 3, "label": "初始页码", "type": "number", "value": 1 },
144
+ { "sort": 4, "label": "轮询接口秒数", "type": "number", "value": 0 }
145
+ ]
146
+ }
147
+ ```
148
+
149
+ 接口引擎返回契约:
150
+
151
+ ```javascript
152
+ return {
153
+ Code: 1,
154
+ Data: {
155
+ FileName: 'report.pdf',
156
+ ContentType: 'application/pdf',
157
+ FileByteBase64: base64,
158
+ PageNumber: 2,
159
+ InitialPage: 2,
160
+ FileKey: activeFileKey + ':p2',
161
+ RefreshSeconds: 5
162
+ }
163
+ };
164
+ ```
165
+
166
+ 轮询但不刷新时,不要重复返回文件内容;返回下面任一写法即可,前端会保持当前预览不重建:
167
+
168
+ ```javascript
169
+ return { Code: 1, Data: { NeedRefresh: false, FileKey: currentFileKey, PageNumber: currentPage } };
170
+ return { Code: 1, Data: { NotModified: true, FileKey: currentFileKey } };
171
+ ```
172
+
173
+ 接口引擎应读取前端轮询参数:`V8.Param.CurrentFileKey`、`V8.Param.CurrentPageNumber`、`V8.Param.PageNumber`、`V8.Param.WidgetNumber`。当 Redis/缓存中的活动文件、版本号、角色页码没有变化时返回 `NeedRefresh:false`;当文件或页码变化时返回 `FileByteBase64` 或 `FileUrl`,同时返回新的 `FileKey` 和 `PageNumber/InitialPage`。
174
+
175
+ 角色页码建议在接口引擎中根据 `V8.CurrentUser.Level`、`RoleName`、`RoleIds` 判断,例如管理员第 2 页、财务第 3 页;不要把角色判断写死在前端 Page JSON。缓存 Key 使用 `Microi:${V8.OsClient}:PageEnginePdfPreview:{业务Key}`。
176
+
177
+ ### Office/PDF 接口返回字段细则
178
+
179
+ - `FileName`:文件名,例如 `report.pdf`。
180
+ - `ContentType`:文件类型,PDF 必须用 `application/pdf`;Word/Excel/PPT 可用对应 Office MIME。
181
+ - `FileByteBase64`:文件字节 Base64;适合接口引擎动态生成或转发 PDF。
182
+ - `FileUrl`:文件 URL;适合文件已在 HDFS/OSS/公网可访问时返回。
183
+ - `PageNumber` / `InitialPage`:PDF 打开后跳转页码。角色控制页码必须在接口引擎中根据 `V8.CurrentUser` 判断,不要写死在页面 JSON。
184
+ - `FileKey` / `CacheKey`:文件版本标识,建议包含业务 Key、缓存版本号、角色页码,例如 `activePdf:v3:page2`。
185
+ - `NeedRefresh:false` / `NotModified:true`:轮询时文件和页码未变化,前端保持当前预览并重新按当前页码定位,不重新下载文件。
186
+ - `RefreshSeconds`:接口可返回建议轮询秒数,但页面图形化配置仍是主要控制项;没有自动刷新需求时配置为 `0`。
187
+
188
+ 接口引擎要显式读取这些前端参数:
189
+
190
+ - `V8.Param.PageNumber`:组件配置的初始页码。
191
+ - `V8.Param.CurrentPageNumber`:前端当前页码。
192
+ - `V8.Param.CurrentFileKey`:前端当前文件 Key。
193
+ - `V8.Param.CurrentFileUrl`:前端当前文件地址。
194
+ - `V8.Param.WidgetNumber`:当前 office 组件编号。
195
+
196
+ 生成示例接口时必须写清楚中文注释:每个参数的含义、Redis/缓存 Key 的作用、什么情况下返回 `NeedRefresh:false`、什么情况下返回新的 `FileByteBase64/FileUrl` 和 `PageNumber`。
197
+
198
+ <!-- /microi-progressive:chunk -->
199
+ <!-- microi-progressive:chunk id=page-engine-010 sha256=98256e1f8068f29e3e7cb2096fb8290966a58d47390371bec965001a9e706ddd -->
200
+ ## searchData 查询条件通用结构
201
+
202
+ ```json
203
+ [
204
+ { "prop": "period", "value": "month", "defaultValue": "month", "label": "统计周期", "type": "select", "remote": false, "options": [{ "label": "本日", "value": "today" }, { "label": "本周", "value": "week" }, { "label": "本月", "value": "month" }, { "label": "本季", "value": "quarter" }, { "label": "本年", "value": "year" }, { "label": "去年", "value": "lastYear" }] },
205
+ { "prop": "department", "value": "", "label": "部门", "type": "select", "remote": false, "optionUrl": "", "options": [{ "label": "全部", "value": "" }] },
206
+ { "prop": "keyword", "value": "", "label": "关键词", "type": "input" }
207
+ ]
208
+ ```
209
+
210
+ ### 统计周期与更多筛选
211
+
212
+ - 统计类组件 `statistic`、`progress`、`bar`、`line`、`linebar`、`pie`、`funnel`、`tabel` 默认必须支持周期筛选。
213
+ - 周期按钮固定包含:本日 `today`、本周 `week`、本月 `month`、本季 `quarter`、本年 `year`、去年 `lastYear`。
214
+ - 同时开启组件的显示查询和日期筛选开关:`statistic` 为 `widgetParams[18]/[19]`,`progress` 为 `[26]/[27]`,`bar/line` 为 `[1]/[16]`,`linebar` 为 `[1]/[18]`,`pie` 为 `[1]/[19]`,`funnel/tabel` 为 `[1]/[13]`。
215
+ - 接口引擎会收到 `period`、`_period`、`start`、`end`、`startDate`、`endDate`。当 `period` 是 `today/week/month/quarter/year/lastYear` 时,必须优先按 `period` 计算时间范围、标题前缀和图表粒度;只有 `period=custom` 或没有 `period` 但有 `start/end` 时,才按自定义时间范围处理。
216
+ - “更多”筛选里放业务条件,例如 `keyword`、`ownerId`、`customerType`、`status`、`department` 等;日期范围作为自定义时间范围保留在更多筛选中。
217
+
218
+ ### 交付类首页例外与乱码验收
219
+
220
+ - 如果用户明确说明首页是“项目交付看板、全量采集看板、客户交付状态看板”,或统计的是表单数、模块数、接口引擎数、用户数等平台全量资源,并明确不要本日/本周/本月/本年筛选,则统计组件的 `searchData` 必须保持 `[]`,相关显示查询开关必须为 `false`,不要套用经营看板的周期筛选默认值。
221
+ - 交付类首页优先使用 `statistic`、`progress`、`pie`、`bar`、`linebar`、`html` 等图形化组件,不要为了凑数据把明细表格放到首页;明细应放在低代码表单菜单里查看。
222
+ - 使用脚本或 FormEngine 写入 `mic_page.JsonObj` 时,中文 JSON 必须做编码安全处理:可将最终 JSON 字符串中的非 ASCII 字符转为 `\uXXXX` 后写入,避免数据库或中间层把标题写成 `????`。
223
+ - 写入界面引擎后必须回读 `mic_page.JsonObj` 并检查:不包含 `????`;用户要求无周期筛选时,不包含 `period`、`本日`、`本周`、`本月`、`本年`;`JSON.parse(JsonObj)` 后标题能还原为中文。
224
+ - 如果使用 MCP 或自动页面生成工具后发现它注入了默认周期筛选,必须在最终写入前移除这些筛选,并再次回读验证。
225
+ - 交付类首页必须做可读性验收:彩色统计卡片、深色渐变、图表标签、HTML 组件中的文字必须显式设置高对比文字色。深色/饱和背景使用白色或接近白色文字;浅色背景使用 `#0f172a/#334155` 等深色文字。不得只设置背景色而遗漏标题、数值、图标颜色。
226
+ - 写入后必须检查页面 JSON 和接口返回内容不包含直接暴露的 ECharts 模板占位符:`{a}`、`{b}`、`{c}`、`{d}`、`{value}`。这些只能作为图表 formatter 内部配置使用,不能出现在用户可见标题、饼图中心标题、HTML 文案或默认加载文本中。
227
+ - 容器标题栏的 `moreOption.hidden` 语义必须按“true=隐藏、false=显示”处理。交付首页、统计驾驶舱如无明确跳转需求,容器标题可直接留空并在 HTML/组件内部渲染标题,避免右上角出现默认 `More/更多`。
228
+ - 如果 Page Engine 前端标准图表组件会因为远程数据源自动显示周期筛选,而用户明确要求不要筛选条,可优先使用 `html` 组件承载实时接口返回的图形化驾驶舱;接口返回扁平字段如 `{ html: "<div>...</div>" }`,页面 `dataHtml` 使用 `${html}`。写入后回读验证无周期词、无 `More/更多`、无占位符、无低对比色。
229
+ - 生成首页前必须判断组件沉淀层级:如果某个能力是平台高频标准能力(如指标卡、进度列表、状态分布、排行榜、时间线、描述列表、Office 预览),优先使用或补充 Page Engine 标准组件源码;如果只是当前项目的强业务驾驶舱、组合排版、一次性说明区块,可以用 `html` 组件定制。不要把明显可复用的标准能力长期塞进项目 HTML,也不要为了单个业务驾驶舱新增一堆低复用组件。
230
+ - `html` 组件承载长文本、失败原因、来源清单、备注说明、交付结论时,必须设置 `white-space:normal`、`overflow-wrap:anywhere` 或使用逐条列表/卡片渲染;禁止把多条内容用 `;`、`,` 拼成一整行导致底部说明挤在一起。写入后必须检查长文本在 1366/1440 宽度下能自然换行且不横向溢出。
231
+ - 交付类首页如果使用一个远程 `html` 组件承载整页驾驶舱,运行态应由外层框架滚动,不要给容器和组件写死 1000px 这类固定高度。页面 JSON 可将 `wrapperOption.height` 与 `widgetOption.height` 设为 `0`(或运行态支持的 `auto`),前端运行态必须按内容自适应高度;设计器模式再使用可编辑的默认高度。
232
+ - 首页写入口径说明时,必须区分“用户口头期望数量”“原始资料条目数量”“按业务主体合并后的数量”“后台项目/规则/别名数量”。不要只显示一个“未交付 N 个”,应同时列出部分交付、待执行、阻塞/需业务人员配合的清单和原因。
233
+
234
+ <!-- /microi-progressive:chunk -->
@@ -1,60 +1,60 @@
1
- # page-engine 详细参考 2
2
-
3
- > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
-
5
- <!-- microi-progressive:chunk id=page-engine-011 sha256=44c991a664b2379ed0d88b8f307e8cfbff27e4c349270cd9872f856f0d0b570b -->
6
- ## 版本历史、并发保存与回滚
7
-
8
- 修改现有页面时必须先读取页面详情中的 `CurrentHash`,保存时把它作为 `expectedHash` 传入,并填写简短 `changeSummary`。不要仅凭本地旧 JSON 覆盖远端页面。
9
-
10
- | MCP 工具 | 用途 |
11
- |---|---|
12
- | `microi_list_page_history` | 获取历史元数据与当前哈希 |
13
- | `microi_get_page_history` | 获取指定不可变快照 |
14
- | `microi_compare_page_versions` | 结构化比较两个版本;右侧省略时比较当前页面 |
15
- | `microi_export_page_design` | 导出 `microi.page.v1` 设计包 |
16
- | `microi_rollback_page_design` | 使用 `expectedCurrentHash` 回滚并新增审计版本 |
17
-
18
- - 内容规范化后哈希未变化时,不应新增空历史。
19
- - 遇到哈希冲突先重新读取、比较,再决定合并或重做;禁止去掉 `expectedHash` 强行覆盖。
20
- - 回滚不是删除:目标快照成为新当前版本,回滚前内容仍保留。
21
- - 写后必须再次读取页面详情和历史,确认 `CurrentHash`、版本号、变更摘要和 JSON 一致。
22
- - 页面历史属于当前租户数据库;不要假定业务表有物理 `OsClient` 列。
23
-
24
- <!-- /microi-progressive:chunk -->
25
- <!-- microi-progressive:chunk id=page-engine-012 sha256=61a83f536eede477a85d7d49cadf516e705d7d67510c189f9fb6ab0e72ba63db -->
26
- ## 本地撤销、Vue 源码桥与资产包
27
-
28
- - 设计器本地历史最多 50 步、总计最多 20MB;连续编辑允许合并,但保存前必须刷新当前 `CurrentHash`。
29
- - `Ctrl/Cmd+Z`、`Ctrl/Cmd+Shift+Z`、`Ctrl/Cmd+Y` 不能抢占输入框、textarea、contenteditable 或代码编辑器自己的撤销行为。
30
- - 本地 Undo/Redo 不是审计版本;跨会话恢复仍使用服务端历史与 CAS。
31
- - Page JSON → Vue SFC 只使用确定性 `microi.page.sfc.v1` 模板;禁止 eval、动态执行用户 JSON 或注入任意 import。
32
- - Vue SFC → Page JSON 只接受平台生成标记、完整元数据和匹配 Hash;任意手写 Vue、第三方 SFC 或未知 script 必须拒绝。
33
- - 导入源码后先规范化、显示 Diff,再由用户确认写入;不得因为“解析成功”直接覆盖当前页面。
34
- - 可复用组件/区块使用治理中心 `microi.asset.v1`,声明 Props、Setters、DataAdapters、Platforms 和 DependencyPackages;调用 `mci-asset-publish` DryRun 后再发布。
35
- - 资产依赖必须检查缺失、语义版本范围、循环和最大深度;运行时使用 `mci-asset-resolve` 返回的 `LoadOrder`。
36
- - 复杂页面需要完整工程能力时提升为前端微服务;不要承诺任意 Vue 源码无损反编译回界面引擎。
37
-
38
- <!-- /microi-progressive:chunk -->
39
- <!-- microi-progressive:chunk id=page-engine-013 sha256=b7b520f7d38872b7c5f3972548eb87586798bbc6dba11c6035a6d512c85be22f -->
40
- ## 生成 JSON 注意事项
41
-
42
- 1. **编号唯一**:`wrapperOption.number` 和 `widgetOption.number` 页面内唯一(随机5位整数)
43
- 2. **关联一致**:`widgetOption.wrapperNumber` 必须等于所在容器的 `wrapperOption.number`
44
- 3. **高度合理**:容器高度 >= 内部组件高度之和
45
- 4. **widgetParams 完整**:必须包含该组件定义的所有参数,不能遗漏
46
- 5. **栅格布局**:span 总和 24 为一行,如 span=12 的两个容器为两列布局
47
- 6. **数据来源**:接口引擎 value 使用稳定路径 `$ApiBase$/apiengine/{Key}`,由运行时通过 `osclient` Header 传入 `$OsClient$`;只有无法设置 Header/Form/Query 的 GET/HEAD 或第三方回调才使用特殊租户路径
48
- 7. **formConfig 完整**:所有字段都应包含,不能省略
49
- 8. **选项卡容器**:组件放在 `tabWidgetMap[tabKey][]` 中,不放在 `widgetList` 中
50
- <!-- /microi-progressive:chunk -->
51
- <!-- microi-progressive:chunk id=page-engine-014 sha256=18fecb3e402daeb1f95e8f501c4456455a4c1a3b9de83208d03676f5cbf1cf84 -->
52
- ## 经营看板周期筛选与布局规则
53
-
54
- - 老板驾驶舱、经营看板、CRM/订单/售后统计页面,所有统计类组件默认都要提供统一周期筛选:本日、本周、本月、本季、本年、去年,以及“更多”里的自定义时间范围和业务条件。
55
- - 指标名称不要写死为“月订单金额、月新增客户、月跟进活跃”等固定月份口径。优先使用“订单金额、新增客户、跟进活跃”等中性名称;如业务需要展示周期前缀,运行态会根据当前 `period` 自动显示为“本日/本周/本月/本季/本年/去年”。
56
- - `statistic`、`progress` 这类内容型组件在运行态必须允许按内容自适应高度。生成 JSON 时也要按数据条数预留高度:统计卡片按每行列数计算行数,避免首次打开时出现卡片底部被遮挡或容器内部滚动条。
57
- - 有远程数据源的图表/表格/统计组件,点击周期按钮必须真实触发接口请求,并把 `period`、`_period`、`startDate`、`endDate` 等查询条件传给接口。接口返回数据时不要清空组件已有的 `searchData`,除非明确返回新的完整筛选配置。
58
- - 接口返回的指标名、图例名、表格列名禁止固定写成“月新增客户、月订单金额”等,必须根据最终生效周期输出“本日/本周/本月/本季/本年/去年/自定义”或保持中性名称;否则切换周期后文案会和数据口径冲突。
59
- - `/mic/autopage/:Id` 面向最终用户运行态展示,应渲染 `formRenderer`;设计器入口才渲染 `formDesigner`,避免导航、组件面板、引导遮罩干扰看板访问和自动化截图。
60
- <!-- /microi-progressive:chunk -->
1
+ # page-engine 详细参考 2
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=page-engine-011 sha256=44c991a664b2379ed0d88b8f307e8cfbff27e4c349270cd9872f856f0d0b570b -->
6
+ ## 版本历史、并发保存与回滚
7
+
8
+ 修改现有页面时必须先读取页面详情中的 `CurrentHash`,保存时把它作为 `expectedHash` 传入,并填写简短 `changeSummary`。不要仅凭本地旧 JSON 覆盖远端页面。
9
+
10
+ | MCP 工具 | 用途 |
11
+ |---|---|
12
+ | `microi_list_page_history` | 获取历史元数据与当前哈希 |
13
+ | `microi_get_page_history` | 获取指定不可变快照 |
14
+ | `microi_compare_page_versions` | 结构化比较两个版本;右侧省略时比较当前页面 |
15
+ | `microi_export_page_design` | 导出 `microi.page.v1` 设计包 |
16
+ | `microi_rollback_page_design` | 使用 `expectedCurrentHash` 回滚并新增审计版本 |
17
+
18
+ - 内容规范化后哈希未变化时,不应新增空历史。
19
+ - 遇到哈希冲突先重新读取、比较,再决定合并或重做;禁止去掉 `expectedHash` 强行覆盖。
20
+ - 回滚不是删除:目标快照成为新当前版本,回滚前内容仍保留。
21
+ - 写后必须再次读取页面详情和历史,确认 `CurrentHash`、版本号、变更摘要和 JSON 一致。
22
+ - 页面历史属于当前租户数据库;不要假定业务表有物理 `OsClient` 列。
23
+
24
+ <!-- /microi-progressive:chunk -->
25
+ <!-- microi-progressive:chunk id=page-engine-012 sha256=61a83f536eede477a85d7d49cadf516e705d7d67510c189f9fb6ab0e72ba63db -->
26
+ ## 本地撤销、Vue 源码桥与资产包
27
+
28
+ - 设计器本地历史最多 50 步、总计最多 20MB;连续编辑允许合并,但保存前必须刷新当前 `CurrentHash`。
29
+ - `Ctrl/Cmd+Z`、`Ctrl/Cmd+Shift+Z`、`Ctrl/Cmd+Y` 不能抢占输入框、textarea、contenteditable 或代码编辑器自己的撤销行为。
30
+ - 本地 Undo/Redo 不是审计版本;跨会话恢复仍使用服务端历史与 CAS。
31
+ - Page JSON → Vue SFC 只使用确定性 `microi.page.sfc.v1` 模板;禁止 eval、动态执行用户 JSON 或注入任意 import。
32
+ - Vue SFC → Page JSON 只接受平台生成标记、完整元数据和匹配 Hash;任意手写 Vue、第三方 SFC 或未知 script 必须拒绝。
33
+ - 导入源码后先规范化、显示 Diff,再由用户确认写入;不得因为“解析成功”直接覆盖当前页面。
34
+ - 可复用组件/区块使用治理中心 `microi.asset.v1`,声明 Props、Setters、DataAdapters、Platforms 和 DependencyPackages;调用 `mci-asset-publish` DryRun 后再发布。
35
+ - 资产依赖必须检查缺失、语义版本范围、循环和最大深度;运行时使用 `mci-asset-resolve` 返回的 `LoadOrder`。
36
+ - 复杂页面需要完整工程能力时提升为前端微服务;不要承诺任意 Vue 源码无损反编译回界面引擎。
37
+
38
+ <!-- /microi-progressive:chunk -->
39
+ <!-- microi-progressive:chunk id=page-engine-013 sha256=b7b520f7d38872b7c5f3972548eb87586798bbc6dba11c6035a6d512c85be22f -->
40
+ ## 生成 JSON 注意事项
41
+
42
+ 1. **编号唯一**:`wrapperOption.number` 和 `widgetOption.number` 页面内唯一(随机5位整数)
43
+ 2. **关联一致**:`widgetOption.wrapperNumber` 必须等于所在容器的 `wrapperOption.number`
44
+ 3. **高度合理**:容器高度 >= 内部组件高度之和
45
+ 4. **widgetParams 完整**:必须包含该组件定义的所有参数,不能遗漏
46
+ 5. **栅格布局**:span 总和 24 为一行,如 span=12 的两个容器为两列布局
47
+ 6. **数据来源**:接口引擎 value 使用稳定路径 `$ApiBase$/apiengine/{Key}`,由运行时通过 `osclient` Header 传入 `$OsClient$`;只有无法设置 Header/Form/Query 的 GET/HEAD 或第三方回调才使用特殊租户路径
48
+ 7. **formConfig 完整**:所有字段都应包含,不能省略
49
+ 8. **选项卡容器**:组件放在 `tabWidgetMap[tabKey][]` 中,不放在 `widgetList` 中
50
+ <!-- /microi-progressive:chunk -->
51
+ <!-- microi-progressive:chunk id=page-engine-014 sha256=18fecb3e402daeb1f95e8f501c4456455a4c1a3b9de83208d03676f5cbf1cf84 -->
52
+ ## 经营看板周期筛选与布局规则
53
+
54
+ - 老板驾驶舱、经营看板、CRM/订单/售后统计页面,所有统计类组件默认都要提供统一周期筛选:本日、本周、本月、本季、本年、去年,以及“更多”里的自定义时间范围和业务条件。
55
+ - 指标名称不要写死为“月订单金额、月新增客户、月跟进活跃”等固定月份口径。优先使用“订单金额、新增客户、跟进活跃”等中性名称;如业务需要展示周期前缀,运行态会根据当前 `period` 自动显示为“本日/本周/本月/本季/本年/去年”。
56
+ - `statistic`、`progress` 这类内容型组件在运行态必须允许按内容自适应高度。生成 JSON 时也要按数据条数预留高度:统计卡片按每行列数计算行数,避免首次打开时出现卡片底部被遮挡或容器内部滚动条。
57
+ - 有远程数据源的图表/表格/统计组件,点击周期按钮必须真实触发接口请求,并把 `period`、`_period`、`startDate`、`endDate` 等查询条件传给接口。接口返回数据时不要清空组件已有的 `searchData`,除非明确返回新的完整筛选配置。
58
+ - 接口返回的指标名、图例名、表格列名禁止固定写成“月新增客户、月订单金额”等,必须根据最终生效周期输出“本日/本周/本月/本季/本年/去年/自定义”或保持中性名称;否则切换周期后文案会和数据口径冲突。
59
+ - `/mic/autopage/:Id` 面向最终用户运行态展示,应渲染 `formRenderer`;设计器入口才渲染 `formDesigner`,避免导航、组件面板、引导遮罩干扰看板访问和自动化截图。
60
+ <!-- /microi-progressive:chunk -->