@microi.net/cli 5.7.7 → 5.7.9

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 (191) 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 +6 -6
  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 +102 -101
  15. package/scripts/microi-cli.js +57 -57
  16. package/scripts/microi-codex-broker.js +450 -450
  17. package/scripts/microi-codex-router.js +0 -0
  18. package/scripts/microi-skills.meta.json +366 -366
  19. package/skills/.microi-skills-version.json +2 -2
  20. package/skills/.progressive-disclosure-manifest.json +27 -27
  21. package/skills/README.md +286 -286
  22. package/skills/ai-engine/SKILL.md +265 -265
  23. package/skills/ai-engine/agents/openai.yaml +4 -4
  24. package/skills/ai-platform-governance/SKILL.md +177 -177
  25. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  26. package/skills/app-store/SKILL.md +392 -396
  27. package/skills/app-store/agents/openai.yaml +4 -4
  28. package/skills/business-blueprint/SKILL.md +193 -193
  29. package/skills/datasource-engine/SKILL.md +90 -90
  30. package/skills/datasource-engine/agents/openai.yaml +4 -4
  31. package/skills/dos-orm/references/api-reference.md +229 -229
  32. package/skills/email-engine/SKILL.md +78 -78
  33. package/skills/email-engine/references/v8-email.md +34 -34
  34. package/skills/job-engine/SKILL.md +171 -172
  35. package/skills/job-engine/agents/openai.yaml +4 -4
  36. package/skills/message-notification/SKILL.md +155 -156
  37. package/skills/message-notification/agents/openai.yaml +5 -5
  38. package/skills/message-notification/references/contracts.md +102 -102
  39. package/skills/microi-ai-app-auth.js +652 -652
  40. package/skills/microi-ai-application/SKILL.md +102 -106
  41. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  42. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  43. package/skills/microi-client-frontend/SKILL.md +235 -240
  44. 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
  45. 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
  46. 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
  47. package/skills/microi-codex/SKILL.md +75 -75
  48. package/skills/microi-codex-installer/SKILL.md +225 -223
  49. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  50. package/skills/microi-datasource-mapping/SKILL.md +107 -111
  51. package/skills/microi-db-schema/SKILL.md +175 -175
  52. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  53. package/skills/microi-db-schema/references/core-tables.md +695 -695
  54. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  55. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  56. package/skills/microi-db-schema/references/schema.md +646 -646
  57. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  58. package/skills/microi-deployment/references/deployment-matrix.md +101 -101
  59. package/skills/microi-docs-coverage/references/capability-map.md +0 -1
  60. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  61. package/skills/microi-form-engine/SKILL.md +226 -226
  62. package/skills/microi-form-engine/references/component-catalog.md +216 -216
  63. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  64. package/skills/microi-form-layout/SKILL.md +205 -205
  65. 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
  66. package/skills/microi-frontend-sdk/SKILL.md +188 -188
  67. 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
  68. package/skills/microi-left-right-layout/SKILL.md +141 -141
  69. package/skills/microi-microservice/SKILL.md +322 -323
  70. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  71. package/skills/microi-mobile-app-quality/SKILL.md +181 -181
  72. 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
  73. 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
  74. package/skills/microi-solution-quotation/SKILL.md +78 -78
  75. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  76. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  77. package/skills/microi-sso/references/acceptance.md +49 -49
  78. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  79. package/skills/microi-sso/references/inbound.md +53 -53
  80. package/skills/microi-sso/references/outbound.md +39 -39
  81. package/skills/microi-system-delivery/SKILL.md +134 -134
  82. 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
  83. 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 +189 -189
  84. package/skills/microi-ui/SKILL.md +174 -174
  85. 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
  86. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  87. 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
  88. 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
  89. package/skills/microi.v8.js +1921 -1921
  90. package/skills/module-engine/SKILL.md +237 -250
  91. package/skills/module-engine/references/module-config.md +204 -204
  92. package/skills/ocr-engine/SKILL.md +113 -113
  93. package/skills/ocr-engine/agents/openai.yaml +4 -4
  94. package/skills/page-engine/SKILL.md +180 -191
  95. 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
  96. 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
  97. package/skills/performance-testing/SKILL.md +221 -221
  98. package/skills/playwright-e2e/SKILL.md +197 -197
  99. 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
  100. 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
  101. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  102. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  103. package/skills/print-engine/SKILL.md +259 -259
  104. package/skills/production-readonly-audit/SKILL.md +41 -41
  105. package/skills/report-engine/SKILL.md +71 -71
  106. package/skills/report-engine/agents/openai.yaml +4 -4
  107. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  108. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  109. package/skills/search-engine/SKILL.md +75 -75
  110. package/skills/search-engine/agents/openai.yaml +4 -4
  111. package/skills/spider-engine/SKILL.md +190 -190
  112. package/skills/system-observability/SKILL.md +238 -238
  113. package/skills/system-observability/references/memory-incident-triage.md +70 -70
  114. package/skills/translate-engine/SKILL.md +140 -140
  115. package/skills/translate-engine/agents/openai.yaml +4 -4
  116. package/skills/ui-design/SKILL.md +191 -191
  117. package/skills/ui-design/assets/templates/MCI-DESIGN.md +198 -198
  118. package/skills/ui-design/references/design-pattern-library.md +184 -184
  119. package/skills/ui-design/references/mci-design-contract.md +163 -163
  120. 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
  121. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +137 -137
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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 +117 -117
  128. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  129. package/skills/unity-integration/SKILL.md +155 -155
  130. package/skills/unity-integration/agents/openai.yaml +4 -4
  131. package/skills/unity-integration/references/ai-app-delivery.md +103 -103
  132. package/skills/unity-integration/references/sdk-api.md +82 -82
  133. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  134. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  135. package/skills/v8-cache-pattern/SKILL.md +306 -306
  136. package/skills/v8-crud-api/SKILL.md +175 -175
  137. 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
  138. 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
  139. package/skills/v8-debugging/SKILL.md +284 -284
  140. package/skills/v8-explorer-tree/SKILL.md +228 -228
  141. package/skills/v8-export-import/SKILL.md +209 -209
  142. 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
  143. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  144. 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
  145. package/skills/v8-file-upload/SKILL.md +256 -263
  146. 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 +101 -101
  147. 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 +150 -150
  148. package/skills/v8-formengine-http/SKILL.md +219 -219
  149. package/skills/v8-frontend-events/SKILL.md +178 -178
  150. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  151. package/skills/v8-frontend-events/references/bluetooth-print.md +246 -246
  152. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  153. package/skills/v8-http-integration/SKILL.md +182 -182
  154. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  155. 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
  156. package/skills/v8-image-processing/SKILL.md +190 -190
  157. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  158. package/skills/v8-image-processing/references/api-reference.md +623 -623
  159. package/skills/v8-menu-buttons/SKILL.md +180 -180
  160. 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
  161. 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
  162. 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
  163. package/skills/v8-mongodb/SKILL.md +192 -192
  164. package/skills/v8-mq-mqtt/SKILL.md +175 -176
  165. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  166. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  167. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  168. package/skills/v8-saas-multi-tenant/SKILL.md +219 -219
  169. package/skills/v8-security/SKILL.md +168 -168
  170. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +198 -198
  171. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -158
  172. package/skills/v8-sql-query/SKILL.md +302 -302
  173. package/skills/v8-table-event/SKILL.md +144 -144
  174. 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 +197 -197
  175. 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
  176. package/skills/v8-tcp-integration/SKILL.md +147 -147
  177. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  178. package/skills/v8-template-engine/SKILL.md +167 -167
  179. package/skills/v8-utilities/SKILL.md +90 -90
  180. package/skills/v8-utilities/references/client-api-index.md +143 -143
  181. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  182. package/skills/v8-utilities/references/server-api-index.md +188 -188
  183. package/skills/v8-workflow/SKILL.md +216 -243
  184. 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
  185. package/skills/vision-engine/SKILL.md +159 -159
  186. package/skills/vision-engine/agents/openai.yaml +4 -4
  187. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  188. package/skills/workspace-conventions/SKILL.md +261 -261
  189. 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 +208 -208
  190. 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 +216 -216
  191. 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,213 +1,213 @@
1
- # microi-mobile-app-quality 详细参考 1
2
-
3
- > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
-
5
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-008 sha256=8cc961b2ba44763893f3cc09fbfca36668061b6bd75fc8f066904a04622948ff -->
6
- ## 4. 重要按钮必须带图标
7
-
8
- 醒目的主操作必须使用打磨过的图标加文字按钮。
9
-
10
- 要求:
11
- - 登录、去登录、提交、保存、确认、接单、报修、生成报告、上传照片以及首屏主操作必须包含图标。
12
- - 按钮必须有可见的按下态、加载态、禁用态,并有足够触控高度。
13
- - 主按钮应使用项目品牌渐变或品牌纯色,阴影克制,文字对比度安全。
14
- - `open-type="getPhoneNumber"` 这类小程序原生按钮必须样式化为 `mci-btn`,并移除默认边框。
15
-
16
- 禁止:
17
- - 首屏、空状态、登录页或固定底栏里出现纯文字主按钮。
18
- - 按钮文字没有垂直居中。
19
- - 异步操作按钮没有加载反馈。
20
-
21
- 验收:
22
- - 截图检查空状态、登录页和表单提交页。
23
- - 确认主操作有图标、合适的加载文案和按下反馈。
24
-
25
- <!-- /microi-progressive:chunk -->
26
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-009 sha256=47248f77c0a41a7fd64f6a255d8c9af356b6768e5167c73a48d60b86f1ab9899 -->
27
- ## 4.1 模块列表优先使用声明式业务卡片
28
-
29
- Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆叠。优先在
30
- `sys_menu.ViewSchema` 配置 `Scene=Card, Device=Mobile`:
31
-
32
- - `AvatarTextField`:头像首字或业务简称;没有头像时才显示序号。
33
- - `TitleField`:唯一主标题,最多两行,不能被右侧金额挤成单字列。
34
- - `TopFields/StatusFields`:顶部状态、分类、阶段标签,使用少量语义色。
35
- - `SubtitleFields`:客户、负责人、供应商等一至两项关联信息。
36
- - `RightFields`:金额、未付、库存等高辨识度数值,支持 `Prefix/Suffix/Tone/Color`。
37
- - `Fields/MetaFields`:正文和编号、创建人、日期等弱化信息。
38
- - `BottomFields`:联系人、跟进、合同、附件等可行动的计数或标签。
39
-
40
- 要求:
41
-
42
- - 卡片内边距通常 12 至 14px,标题、弱信息、金额形成清晰三级层次;不能全卡同字号同颜色。
43
- - 选择框、更多、底部操作和浮动主按钮的触控区域至少 40 至 44px。
44
- - 选中态用边框/底色/勾选状态表达,不通过 `transform` 位移导致列表跳动。
45
- - 只配置字段值和样式时使用 ViewSchema;复杂 HTML 才使用字段 `V8TmpEngineTable`,仍须净化。
46
- - 未配置 Card 视图时兼容 `MobileListFields/CardTitleTagFields/CardBottomTagFields`,不得白屏。
47
- - 卡片引用字段必须进入查询列;关联计数由列表接口批量返回,禁止每张卡片再次请求。
48
-
49
- 验收:
50
-
51
- - 以 375x812、390x844、430x932 至少三种视口检查长标题、空值、大金额、多标签和选中态。
52
- - 检查顶部/右侧/底部多字段与模板字段均能显示,滚动到底后浮动按钮不遮挡最后一张卡。
53
- - 批量选择后出现底部操作条;取消选择、执行按钮、更多菜单均可单手点击。
54
-
55
- <!-- /microi-progressive:chunk -->
56
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-010 sha256=979733873bd74cd95b0c84988a8d3709f673a813dc212076e4f02e8b376fb492 -->
57
- ## 5. 首屏文字和浮层不得重叠
58
-
59
- 移动端首屏常组合大首屏区域和悬浮快捷面板。这个布局必须视觉检查,因为过大的中文标题和激进的负边距容易造成难看的换行或遮挡主按钮。
60
-
61
- 要求:
62
- - 首屏标题必须使用能适配真实中文文案的字号,在常见 375px 和 430px 手机宽度下都要可读。
63
- - 两行中文标题要有足够行高;紧凑业务首屏内不要使用过大的展示字。
64
- - 使用悬浮快捷面板时,首屏底部要给操作区预留内边距,负边距只能轻微覆盖装饰空间。
65
- - 首屏主按钮必须完整可见且可点击,包括阴影和圆角底边。
66
-
67
- 禁止:
68
- - 首屏标题换行成难看的单字或双字第二行。
69
- - 悬浮面板覆盖登录、报告或提交按钮。
70
- - 通过隐藏按钮或缩小触控区域来解决重叠。
71
-
72
- 验收:
73
- - 在 375px 和 430px 宽度截图首屏。
74
- - 检查首屏标题、主/次按钮和后续悬浮面板是否裁切或重叠。
75
-
76
- <!-- /microi-progressive:chunk -->
77
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-011 sha256=47a21d62bc04740ed19eea3f7c2c816e4c73b9054de63beb16df12468c6a4363 -->
78
- ## 5.1 未登录/授权提示必须在可用内容区居中
79
-
80
- 未登录、未授权、无权限等提示模块不能贴在页面顶部。页面上方有 hero/header,下方有 tabBar 或固定底栏时,提示卡片和“立即登录/去授权”按钮必须在剩余可用内容区上下左右居中。
81
-
82
- 要求:
83
- - 复用统一组件,例如 `MciAuthPrompt` / `mci-auth-prompt`,不要每个页面复制一套未登录提示样式。
84
- - 页面容器使用 `flex-direction: column` 时,未登录提示外层必须 `flex: 1`、`display:flex`、`align-items:center`、`justify-content:center`,并考虑底部安全区。
85
- - 如果组件放在自定义组件根节点内,业务页仍要提供外层居中 wrapper,避免小程序自定义组件根节点不参与父级 flex 导致卡片贴顶。
86
- - 未登录提示的按钮文字和图标必须在按钮内上下左右居中。
87
-
88
- 禁止:
89
- - 未登录提示卡片紧贴 header 下方,只在横向居中、纵向不居中。
90
- - 因 tabBar、刘海屏、安全区或固定底栏导致提示卡片视觉中心偏上。
91
-
92
- 验收:
93
- - 截图检查工作台、消息、我的等未登录态页面,卡片和主按钮必须在 header 与 tabBar/底栏之间的可用区域居中。
94
- - 375px、430px、iOS 刘海屏/灵动岛和 Android 状态栏场景均不得出现贴顶或按钮文字偏移。
95
-
96
- <!-- /microi-progressive:chunk -->
97
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-012 sha256=22c9781f49c49419f30df95fac1694cbd1b94bdec99215bb7446ad655b111053 -->
98
- ## 5.2 自定义导航页面必须通过安全区与微信胶囊门禁
99
-
100
- `navigationStyle: custom` 代表应用接管了系统导航区域,页面壳必须同时负责状态栏、刘海/灵动岛、微信右上角胶囊和底部手势区,不能把这一责任留给业务页面自行估算。
101
-
102
- 要求:
103
- - 统一页面壳读取 `uni.getWindowInfo()`,旧运行时回退 `uni.getSystemInfoSync()`;顶部至少使用 `statusBarHeight`,底部使用 `safeAreaInsets.bottom` 或 `screenHeight - safeArea.bottom`。
104
- - CSS `env(safe-area-inset-*)` 只能作为 H5 兜底,不能作为微信小程序唯一实现。真实值应注入 `--mci-safe-top`、`--mci-safe-bottom` 等共享变量。
105
- - 微信小程序必须读取 `getMenuButtonBoundingClientRect()` 并为顶部栏预留胶囊右侧宽度;标题、登录、分享、状态按钮与返回按钮都不能和胶囊相交。
106
- - 全屏弹层或工作台的多按钮头部必须纳入同一门禁。若按钮组不能完整放在胶囊左侧,标题和按钮组整体布局到胶囊底边以下;不得让关闭按钮被原生“更多/关闭”覆盖。
107
- - 底部导航、fixed 提交栏、底部弹层和正文滚动区必须消费同一个底部安全变量,正文还要预留完整固定栏高度。
108
- - 审计 `pages.json` 的全部页面:每一个自定义导航路由都必须使用统一安全页面壳。首页通过不代表详情页、表单页、管理页已经通过。
109
-
110
- 自动化验收:
111
- - 在微信开发者工具至少选择一台 iPhone 刘海/灵动岛机型和一台 Android 机型,逐页访问 `pages.json` 全路由并截图。
112
- - 断言首个可交互元素位于状态栏下方,逐个读取顶部按钮与胶囊的矩形并确认不相交,底部导航/按钮位于手势条上方,最后一条滚动内容可完整显示。
113
- - 发现任意页面被遮挡时,必须修复共享页面壳并重跑全路由;禁止只给当前截图页面增加固定 padding。
114
-
115
- <!-- /microi-progressive:chunk -->
116
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=f4e1f01f3dde22120ecba9131b5c738118c0e4aa8131ea83978f3e1d6b4db289 -->
117
- ## 5.3 全屏工具页必须遵守返回状态栈
118
-
119
- - AI 助手、扫码工作台、全屏预览等独占视口功能需要手机侧滑返回时,优先使用独立路由承载;普通 `position:fixed` 蒙层不能冒充页面历史。
120
- - 返回事件按“键盘/确认框 -> 内部抽屉/筛选 -> 当前全屏页 -> 底层业务页”的顺序消费。关闭按钮与手机返回手势必须得到一致结果。
121
- - 从 Tab 页进入后,第一次返回只能关闭全屏工具页并回到原 Tab;路由栈异常或分享直达时才兜底回首页,禁止退出小程序或跳过原页面。
122
- - 自动化至少覆盖关闭按钮、Android 返回键/`onBackPress`、微信侧滑返回三条路径,并验证返回后原页面和滚动状态仍然可用。
123
-
124
- <!-- /microi-progressive:chunk -->
125
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=eaf8ac0e9edadf382a08951d6c43b9ab561dd2a8ee02fc80048fc843e4656033 -->
126
- ## 5.4 微信浮动入口必须通过真实事件桥门禁
127
-
128
- - UniApp 自定义组件中的浮动按钮、拖拽助手和悬浮客服不得只做 H5 点击测试。必须在微信运行时找到真实组件节点,派发 `touchstart/touchend`,并断言页面栈、弹层状态或业务动作确实变化。
129
- - `touch* / tap` 上的 `.stop/.prevent` 会编译成 `catchtouch* / catchtap`;禁止在可拖拽组件上整组滥用。若出现“看得见但点不动”,先检查生成 WXML 是 `catch*` 还是 `bind*`,再检查事件方法与路由,不要用构建成功替代交互验收。
130
- - 短触与拖动应通过明确位移阈值区分。短触在 `touchend` 完成主动作,拖动只更新位置并持久化,导航失败必须给用户可见反馈。
131
- - 自动化需增加对照按钮:同页普通按钮可点击、浮动入口也可点击,才能确认不是自动化连接或页面整体失效。
132
-
133
- <!-- /microi-progressive:chunk -->
134
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=3a65e2da022d493b7d950450a10186d33652ec4225c359d9b3800ef431458525 -->
135
- ## 6. 后台菜单必须规划为至少两级
136
-
137
- 真实业务系统的后台菜单不能简单堆成一批一级菜单。
138
-
139
- 要求:
140
- - 先创建父级菜单分组,再把子级 CRUD 模块放到对应分组下。
141
- - 相关页面超过三个的业务模块必须有父级目录菜单。
142
- - 建议分组示例:
143
- - 客户中心:客户、站点、联系人、客户账号绑定。
144
- - 设备中心:设备台账、设备模板、维保参数。
145
- - 维保运营:计划、工单、服务记录、维修申请。
146
- - 报告中心:巡检报告、阅读日志、打印/分享模板。
147
- - 系统配置:字典、任务、集成设置。
148
- - 使用 Manifest/MCP 时,必须显式包含父模块和子模块。子模块必须设置 `ParentId`。
149
- - dry-run 计划必须列出最终菜单树,不能只列平铺菜单名。
150
- - 如果用户要求通过 MCP 修复已有后台,要真正执行远端工作:读取 `sys_menu`,创建缺失的父级 `SecondMenu` 行,更新现有子菜单 `ParentId` / `Sort`,给管理员角色授权新父菜单,然后回读菜单树。
151
- - 当用户明确要求修改当前 MCP 租户时,不要只把规则写进 skill 就停下。
152
-
153
- 禁止:
154
- - 把所有生成模块直接创建到根菜单。
155
- - 把客户主数据、工单、报告、日志和设置混在同一级。
156
-
157
- 验收:
158
- - MCP 生成后回读 `sys_menu` 并确认菜单深度。
159
- - 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
160
-
161
- <!-- /microi-progressive:chunk -->
162
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=808d3a4d3e7736566e1dd23c287a9316ea851c3ca212ffe283f49e565a7e0a3d -->
163
- ## 7. 移动端页面需要动效,但动效必须有用
164
-
165
- 移动端产品不应像静态后台表单。
166
-
167
- 要求:
168
- - 页面首屏、面板、卡片和重要操作区使用克制的入场动画。
169
- - 点击目标要有按下反馈。
170
- - 骨架屏应有轻微流光或脉冲。
171
- - 装饰动效幅度要小,不能干扰任务完成。
172
- - 支持时尊重减少动态效果偏好。
173
-
174
- 禁止:
175
- - 整个应用没有交互反馈。
176
- - 在密集业务列表上使用重度循环动画。
177
- - 动效导致布局位移或文字重叠。
178
-
179
- 验收:
180
- - 浏览器或设备检查确认卡片、面板、按钮或骨架屏有可见但克制的动效。
181
- - 没有动画导致横向溢出、文字裁切或固定栏抖动。
182
-
183
- <!-- /microi-progressive:chunk -->
184
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=15d415351b8e3a7700d56cab2b39079494b06265b7d648636d1e511db1892161 -->
185
- ## 8. 登录页必须是直接登录界面
186
-
187
- 登录页不能强迫用户先在两个身份标签之间切换才能登录。
188
-
189
- 要求:
190
- - H5/App 提供一个账号或手机号 + 密码表单。除非后端明确支持并要求第二条路径,否则不要把独立手机号客户登录表单和账号密码表单并列展示。
191
- - 微信小程序默认使用 `<button open-type="getPhoneNumber">` 的手机号授权登录。账号密码登录可以作为次级兜底,但必须折叠或弱化,不能和手机号授权并列成第二套完整登录系统。
192
- - 微信小程序手机号快捷登录必须把返回的手机号 `code` 传给后端;当后端需要 OpenId/UnionId 时,还必须调用 `uni.login()` 获取新的 `LoginCode`。
193
- - H5/App 兜底只有在后端支持手机号登录时才提供手动手机号输入。
194
- - 登录文案要清楚:账号/手机号 + 密码是一条路径;微信手机号授权是小程序默认路径。
195
- - 登录页不要展示当前租户、OsClient、移动端构建版本、API host、调试版本块等内部实现信息。
196
-
197
- 禁止:
198
- - 除非用户明确要求,否则把员工/客户身份标签作为主登录模型。
199
- - 同屏展示两套完整登录系统,例如“账号 + 密码”和“手机号输入登录”并列。
200
- - 假设前端可以从 `getPhoneNumber` 直接读取微信手机号;现代微信返回的是 code。
201
- - 目标是微信小程序时,只把手机号登录实现成文本输入。
202
- - 向终端用户展示租户、版本或调试块。
203
-
204
- 验收:
205
- - 实现前检查标准参考 `microi.uniapp/src/pages/login/index.vue`。
206
- - 测试账号登录路径和手机号登录按钮渲染。
207
- - 构建 H5 和微信小程序目标。
208
-
209
- <!-- /microi-progressive:chunk -->
210
-
211
- ## 平台方通用 App 的登录连接器例外
212
-
213
- “登录页不要展示 ApiBase / OsClient”仍是 H5、小程序与客户专属 App 的默认规则。只有用户明确要求、并由平台方提交一个聚合多租户的通用 `APP-PLUS` 安装包时,才允许把平台连接器作为登录页次级折叠卡片;必须保留清晰的当前连接摘要、固定协议下拉、HTTP 风险提示、带图标的应用按钮、连接 loading/disabled 状态,并在展开后通过滚动和安全区保证小屏设备不裁切登录操作。连接器不能伪装成调试面板,也不能展示 Token、密码或其它秘密。
1
+ # microi-mobile-app-quality 详细参考 1
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-008 sha256=8cc961b2ba44763893f3cc09fbfca36668061b6bd75fc8f066904a04622948ff -->
6
+ ## 4. 重要按钮必须带图标
7
+
8
+ 醒目的主操作必须使用打磨过的图标加文字按钮。
9
+
10
+ 要求:
11
+ - 登录、去登录、提交、保存、确认、接单、报修、生成报告、上传照片以及首屏主操作必须包含图标。
12
+ - 按钮必须有可见的按下态、加载态、禁用态,并有足够触控高度。
13
+ - 主按钮应使用项目品牌渐变或品牌纯色,阴影克制,文字对比度安全。
14
+ - `open-type="getPhoneNumber"` 这类小程序原生按钮必须样式化为 `mci-btn`,并移除默认边框。
15
+
16
+ 禁止:
17
+ - 首屏、空状态、登录页或固定底栏里出现纯文字主按钮。
18
+ - 按钮文字没有垂直居中。
19
+ - 异步操作按钮没有加载反馈。
20
+
21
+ 验收:
22
+ - 截图检查空状态、登录页和表单提交页。
23
+ - 确认主操作有图标、合适的加载文案和按下反馈。
24
+
25
+ <!-- /microi-progressive:chunk -->
26
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-009 sha256=47248f77c0a41a7fd64f6a255d8c9af356b6768e5167c73a48d60b86f1ab9899 -->
27
+ ## 4.1 模块列表优先使用声明式业务卡片
28
+
29
+ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆叠。优先在
30
+ `sys_menu.ViewSchema` 配置 `Scene=Card, Device=Mobile`:
31
+
32
+ - `AvatarTextField`:头像首字或业务简称;没有头像时才显示序号。
33
+ - `TitleField`:唯一主标题,最多两行,不能被右侧金额挤成单字列。
34
+ - `TopFields/StatusFields`:顶部状态、分类、阶段标签,使用少量语义色。
35
+ - `SubtitleFields`:客户、负责人、供应商等一至两项关联信息。
36
+ - `RightFields`:金额、未付、库存等高辨识度数值,支持 `Prefix/Suffix/Tone/Color`。
37
+ - `Fields/MetaFields`:正文和编号、创建人、日期等弱化信息。
38
+ - `BottomFields`:联系人、跟进、合同、附件等可行动的计数或标签。
39
+
40
+ 要求:
41
+
42
+ - 卡片内边距通常 12 至 14px,标题、弱信息、金额形成清晰三级层次;不能全卡同字号同颜色。
43
+ - 选择框、更多、底部操作和浮动主按钮的触控区域至少 40 至 44px。
44
+ - 选中态用边框/底色/勾选状态表达,不通过 `transform` 位移导致列表跳动。
45
+ - 只配置字段值和样式时使用 ViewSchema;复杂 HTML 才使用字段 `V8TmpEngineTable`,仍须净化。
46
+ - 未配置 Card 视图时兼容 `MobileListFields/CardTitleTagFields/CardBottomTagFields`,不得白屏。
47
+ - 卡片引用字段必须进入查询列;关联计数由列表接口批量返回,禁止每张卡片再次请求。
48
+
49
+ 验收:
50
+
51
+ - 以 375x812、390x844、430x932 至少三种视口检查长标题、空值、大金额、多标签和选中态。
52
+ - 检查顶部/右侧/底部多字段与模板字段均能显示,滚动到底后浮动按钮不遮挡最后一张卡。
53
+ - 批量选择后出现底部操作条;取消选择、执行按钮、更多菜单均可单手点击。
54
+
55
+ <!-- /microi-progressive:chunk -->
56
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-010 sha256=979733873bd74cd95b0c84988a8d3709f673a813dc212076e4f02e8b376fb492 -->
57
+ ## 5. 首屏文字和浮层不得重叠
58
+
59
+ 移动端首屏常组合大首屏区域和悬浮快捷面板。这个布局必须视觉检查,因为过大的中文标题和激进的负边距容易造成难看的换行或遮挡主按钮。
60
+
61
+ 要求:
62
+ - 首屏标题必须使用能适配真实中文文案的字号,在常见 375px 和 430px 手机宽度下都要可读。
63
+ - 两行中文标题要有足够行高;紧凑业务首屏内不要使用过大的展示字。
64
+ - 使用悬浮快捷面板时,首屏底部要给操作区预留内边距,负边距只能轻微覆盖装饰空间。
65
+ - 首屏主按钮必须完整可见且可点击,包括阴影和圆角底边。
66
+
67
+ 禁止:
68
+ - 首屏标题换行成难看的单字或双字第二行。
69
+ - 悬浮面板覆盖登录、报告或提交按钮。
70
+ - 通过隐藏按钮或缩小触控区域来解决重叠。
71
+
72
+ 验收:
73
+ - 在 375px 和 430px 宽度截图首屏。
74
+ - 检查首屏标题、主/次按钮和后续悬浮面板是否裁切或重叠。
75
+
76
+ <!-- /microi-progressive:chunk -->
77
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-011 sha256=47a21d62bc04740ed19eea3f7c2c816e4c73b9054de63beb16df12468c6a4363 -->
78
+ ## 5.1 未登录/授权提示必须在可用内容区居中
79
+
80
+ 未登录、未授权、无权限等提示模块不能贴在页面顶部。页面上方有 hero/header,下方有 tabBar 或固定底栏时,提示卡片和“立即登录/去授权”按钮必须在剩余可用内容区上下左右居中。
81
+
82
+ 要求:
83
+ - 复用统一组件,例如 `MciAuthPrompt` / `mci-auth-prompt`,不要每个页面复制一套未登录提示样式。
84
+ - 页面容器使用 `flex-direction: column` 时,未登录提示外层必须 `flex: 1`、`display:flex`、`align-items:center`、`justify-content:center`,并考虑底部安全区。
85
+ - 如果组件放在自定义组件根节点内,业务页仍要提供外层居中 wrapper,避免小程序自定义组件根节点不参与父级 flex 导致卡片贴顶。
86
+ - 未登录提示的按钮文字和图标必须在按钮内上下左右居中。
87
+
88
+ 禁止:
89
+ - 未登录提示卡片紧贴 header 下方,只在横向居中、纵向不居中。
90
+ - 因 tabBar、刘海屏、安全区或固定底栏导致提示卡片视觉中心偏上。
91
+
92
+ 验收:
93
+ - 截图检查工作台、消息、我的等未登录态页面,卡片和主按钮必须在 header 与 tabBar/底栏之间的可用区域居中。
94
+ - 375px、430px、iOS 刘海屏/灵动岛和 Android 状态栏场景均不得出现贴顶或按钮文字偏移。
95
+
96
+ <!-- /microi-progressive:chunk -->
97
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-012 sha256=22c9781f49c49419f30df95fac1694cbd1b94bdec99215bb7446ad655b111053 -->
98
+ ## 5.2 自定义导航页面必须通过安全区与微信胶囊门禁
99
+
100
+ `navigationStyle: custom` 代表应用接管了系统导航区域,页面壳必须同时负责状态栏、刘海/灵动岛、微信右上角胶囊和底部手势区,不能把这一责任留给业务页面自行估算。
101
+
102
+ 要求:
103
+ - 统一页面壳读取 `uni.getWindowInfo()`,旧运行时回退 `uni.getSystemInfoSync()`;顶部至少使用 `statusBarHeight`,底部使用 `safeAreaInsets.bottom` 或 `screenHeight - safeArea.bottom`。
104
+ - CSS `env(safe-area-inset-*)` 只能作为 H5 兜底,不能作为微信小程序唯一实现。真实值应注入 `--mci-safe-top`、`--mci-safe-bottom` 等共享变量。
105
+ - 微信小程序必须读取 `getMenuButtonBoundingClientRect()` 并为顶部栏预留胶囊右侧宽度;标题、登录、分享、状态按钮与返回按钮都不能和胶囊相交。
106
+ - 全屏弹层或工作台的多按钮头部必须纳入同一门禁。若按钮组不能完整放在胶囊左侧,标题和按钮组整体布局到胶囊底边以下;不得让关闭按钮被原生“更多/关闭”覆盖。
107
+ - 底部导航、fixed 提交栏、底部弹层和正文滚动区必须消费同一个底部安全变量,正文还要预留完整固定栏高度。
108
+ - 审计 `pages.json` 的全部页面:每一个自定义导航路由都必须使用统一安全页面壳。首页通过不代表详情页、表单页、管理页已经通过。
109
+
110
+ 自动化验收:
111
+ - 在微信开发者工具至少选择一台 iPhone 刘海/灵动岛机型和一台 Android 机型,逐页访问 `pages.json` 全路由并截图。
112
+ - 断言首个可交互元素位于状态栏下方,逐个读取顶部按钮与胶囊的矩形并确认不相交,底部导航/按钮位于手势条上方,最后一条滚动内容可完整显示。
113
+ - 发现任意页面被遮挡时,必须修复共享页面壳并重跑全路由;禁止只给当前截图页面增加固定 padding。
114
+
115
+ <!-- /microi-progressive:chunk -->
116
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=f4e1f01f3dde22120ecba9131b5c738118c0e4aa8131ea83978f3e1d6b4db289 -->
117
+ ## 5.3 全屏工具页必须遵守返回状态栈
118
+
119
+ - AI 助手、扫码工作台、全屏预览等独占视口功能需要手机侧滑返回时,优先使用独立路由承载;普通 `position:fixed` 蒙层不能冒充页面历史。
120
+ - 返回事件按“键盘/确认框 -> 内部抽屉/筛选 -> 当前全屏页 -> 底层业务页”的顺序消费。关闭按钮与手机返回手势必须得到一致结果。
121
+ - 从 Tab 页进入后,第一次返回只能关闭全屏工具页并回到原 Tab;路由栈异常或分享直达时才兜底回首页,禁止退出小程序或跳过原页面。
122
+ - 自动化至少覆盖关闭按钮、Android 返回键/`onBackPress`、微信侧滑返回三条路径,并验证返回后原页面和滚动状态仍然可用。
123
+
124
+ <!-- /microi-progressive:chunk -->
125
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=eaf8ac0e9edadf382a08951d6c43b9ab561dd2a8ee02fc80048fc843e4656033 -->
126
+ ## 5.4 微信浮动入口必须通过真实事件桥门禁
127
+
128
+ - UniApp 自定义组件中的浮动按钮、拖拽助手和悬浮客服不得只做 H5 点击测试。必须在微信运行时找到真实组件节点,派发 `touchstart/touchend`,并断言页面栈、弹层状态或业务动作确实变化。
129
+ - `touch* / tap` 上的 `.stop/.prevent` 会编译成 `catchtouch* / catchtap`;禁止在可拖拽组件上整组滥用。若出现“看得见但点不动”,先检查生成 WXML 是 `catch*` 还是 `bind*`,再检查事件方法与路由,不要用构建成功替代交互验收。
130
+ - 短触与拖动应通过明确位移阈值区分。短触在 `touchend` 完成主动作,拖动只更新位置并持久化,导航失败必须给用户可见反馈。
131
+ - 自动化需增加对照按钮:同页普通按钮可点击、浮动入口也可点击,才能确认不是自动化连接或页面整体失效。
132
+
133
+ <!-- /microi-progressive:chunk -->
134
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=3a65e2da022d493b7d950450a10186d33652ec4225c359d9b3800ef431458525 -->
135
+ ## 6. 后台菜单必须规划为至少两级
136
+
137
+ 真实业务系统的后台菜单不能简单堆成一批一级菜单。
138
+
139
+ 要求:
140
+ - 先创建父级菜单分组,再把子级 CRUD 模块放到对应分组下。
141
+ - 相关页面超过三个的业务模块必须有父级目录菜单。
142
+ - 建议分组示例:
143
+ - 客户中心:客户、站点、联系人、客户账号绑定。
144
+ - 设备中心:设备台账、设备模板、维保参数。
145
+ - 维保运营:计划、工单、服务记录、维修申请。
146
+ - 报告中心:巡检报告、阅读日志、打印/分享模板。
147
+ - 系统配置:字典、任务、集成设置。
148
+ - 使用 Manifest/MCP 时,必须显式包含父模块和子模块。子模块必须设置 `ParentId`。
149
+ - dry-run 计划必须列出最终菜单树,不能只列平铺菜单名。
150
+ - 如果用户要求通过 MCP 修复已有后台,要真正执行远端工作:读取 `sys_menu`,创建缺失的父级 `SecondMenu` 行,更新现有子菜单 `ParentId` / `Sort`,给管理员角色授权新父菜单,然后回读菜单树。
151
+ - 当用户明确要求修改当前 MCP 租户时,不要只把规则写进 skill 就停下。
152
+
153
+ 禁止:
154
+ - 把所有生成模块直接创建到根菜单。
155
+ - 把客户主数据、工单、报告、日志和设置混在同一级。
156
+
157
+ 验收:
158
+ - MCP 生成后回读 `sys_menu` 并确认菜单深度。
159
+ - 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
160
+
161
+ <!-- /microi-progressive:chunk -->
162
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=808d3a4d3e7736566e1dd23c287a9316ea851c3ca212ffe283f49e565a7e0a3d -->
163
+ ## 7. 移动端页面需要动效,但动效必须有用
164
+
165
+ 移动端产品不应像静态后台表单。
166
+
167
+ 要求:
168
+ - 页面首屏、面板、卡片和重要操作区使用克制的入场动画。
169
+ - 点击目标要有按下反馈。
170
+ - 骨架屏应有轻微流光或脉冲。
171
+ - 装饰动效幅度要小,不能干扰任务完成。
172
+ - 支持时尊重减少动态效果偏好。
173
+
174
+ 禁止:
175
+ - 整个应用没有交互反馈。
176
+ - 在密集业务列表上使用重度循环动画。
177
+ - 动效导致布局位移或文字重叠。
178
+
179
+ 验收:
180
+ - 浏览器或设备检查确认卡片、面板、按钮或骨架屏有可见但克制的动效。
181
+ - 没有动画导致横向溢出、文字裁切或固定栏抖动。
182
+
183
+ <!-- /microi-progressive:chunk -->
184
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=15d415351b8e3a7700d56cab2b39079494b06265b7d648636d1e511db1892161 -->
185
+ ## 8. 登录页必须是直接登录界面
186
+
187
+ 登录页不能强迫用户先在两个身份标签之间切换才能登录。
188
+
189
+ 要求:
190
+ - H5/App 提供一个账号或手机号 + 密码表单。除非后端明确支持并要求第二条路径,否则不要把独立手机号客户登录表单和账号密码表单并列展示。
191
+ - 微信小程序默认使用 `<button open-type="getPhoneNumber">` 的手机号授权登录。账号密码登录可以作为次级兜底,但必须折叠或弱化,不能和手机号授权并列成第二套完整登录系统。
192
+ - 微信小程序手机号快捷登录必须把返回的手机号 `code` 传给后端;当后端需要 OpenId/UnionId 时,还必须调用 `uni.login()` 获取新的 `LoginCode`。
193
+ - H5/App 兜底只有在后端支持手机号登录时才提供手动手机号输入。
194
+ - 登录文案要清楚:账号/手机号 + 密码是一条路径;微信手机号授权是小程序默认路径。
195
+ - 登录页不要展示当前租户、OsClient、移动端构建版本、API host、调试版本块等内部实现信息。
196
+
197
+ 禁止:
198
+ - 除非用户明确要求,否则把员工/客户身份标签作为主登录模型。
199
+ - 同屏展示两套完整登录系统,例如“账号 + 密码”和“手机号输入登录”并列。
200
+ - 假设前端可以从 `getPhoneNumber` 直接读取微信手机号;现代微信返回的是 code。
201
+ - 目标是微信小程序时,只把手机号登录实现成文本输入。
202
+ - 向终端用户展示租户、版本或调试块。
203
+
204
+ 验收:
205
+ - 实现前检查标准参考 `microi.uniapp/src/pages/login/index.vue`。
206
+ - 测试账号登录路径和手机号登录按钮渲染。
207
+ - 构建 H5 和微信小程序目标。
208
+
209
+ <!-- /microi-progressive:chunk -->
210
+
211
+ ## 平台方通用 App 的登录连接器例外
212
+
213
+ “登录页不要展示 ApiBase / OsClient”仍是 H5、小程序与客户专属 App 的默认规则。只有用户明确要求、并由平台方提交一个聚合多租户的通用 `APP-PLUS` 安装包时,才允许把平台连接器作为登录页次级折叠卡片;必须保留清晰的当前连接摘要、固定协议下拉、HTTP 风险提示、带图标的应用按钮、连接 loading/disabled 状态,并在展开后通过滚动和安全区保证小屏设备不裁切登录操作。连接器不能伪装成调试面板,也不能展示 Token、密码或其它秘密。