@microi.net/cli 5.9.2 → 5.9.4

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 (171) 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/.mcp.json +1 -1
  5. package/.workbuddy-plugin/marketplace.json +2 -2
  6. package/.workbuddy-plugin/plugin.json +1 -1
  7. package/assets/build-meta.json +6 -6
  8. package/cordis.patch.yml +1 -1
  9. package/package.json +1 -1
  10. package/scripts/codex-marketplace.json +20 -20
  11. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  12. package/scripts/mcp-server.js +81 -81
  13. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  14. package/scripts/microi-cli-mcp.js +7 -7
  15. package/scripts/microi-codex-broker.js +21 -5
  16. package/scripts/microi-codex-router.js +17 -1
  17. package/scripts/microi-skills.meta.json +354 -348
  18. package/skills/.microi-skills-version.json +2 -2
  19. package/skills/.progressive-disclosure-manifest.json +122 -115
  20. package/skills/README.md +287 -287
  21. package/skills/ai-engine/SKILL.md +269 -269
  22. package/skills/ai-engine/references/ai-employees.md +48 -48
  23. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  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 +525 -525
  27. package/skills/business-blueprint/SKILL.md +193 -193
  28. package/skills/datasource-engine/SKILL.md +93 -93
  29. package/skills/dos-orm/SKILL.md +101 -95
  30. package/skills/dos-orm/references/api-reference.md +229 -229
  31. package/skills/email-engine/SKILL.md +81 -81
  32. package/skills/email-engine/references/v8-email.md +34 -34
  33. package/skills/job-engine/SKILL.md +176 -176
  34. package/skills/message-notification/SKILL.md +156 -156
  35. package/skills/message-notification/references/contracts.md +102 -102
  36. package/skills/microi/SKILL.md +14 -14
  37. package/skills/microi-ai-application/SKILL.md +115 -115
  38. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  39. package/skills/microi-client-frontend/SKILL.md +242 -242
  40. 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
  41. 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
  42. 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
  43. package/skills/microi-codex-installer/SKILL.md +231 -231
  44. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  45. package/skills/microi-db-schema/SKILL.md +175 -175
  46. package/skills/microi-db-schema/references/core-tables.md +695 -695
  47. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  48. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  49. package/skills/microi-db-schema/references/schema.md +646 -646
  50. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  51. package/skills/microi-deployment/SKILL.md +239 -220
  52. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  53. package/skills/microi-docs-coverage/SKILL.md +133 -133
  54. package/skills/microi-docs-coverage/references/capability-map.md +90 -90
  55. package/skills/microi-form-engine/SKILL.md +338 -333
  56. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  57. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  58. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  59. 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
  60. package/skills/microi-left-right-layout/SKILL.md +141 -141
  61. package/skills/microi-microservice/SKILL.md +332 -328
  62. package/skills/microi-microservice/references/runtime-delivery.md +282 -278
  63. package/skills/microi-mobile-app-quality/SKILL.md +203 -203
  64. 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 +227 -227
  65. 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 +129 -129
  66. package/skills/microi-solution-quotation/SKILL.md +78 -78
  67. package/skills/microi-sso/SKILL.md +95 -91
  68. package/skills/microi-sso/references/acceptance.md +51 -49
  69. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  70. package/skills/microi-sso/references/inbound.md +53 -53
  71. package/skills/microi-sso/references/outbound.md +43 -39
  72. package/skills/microi-ui/SKILL.md +192 -192
  73. 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
  74. package/skills/microi-uniapp-frontend/SKILL.md +206 -204
  75. 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 +261 -261
  76. 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
  77. package/skills/module-engine/SKILL.md +255 -255
  78. package/skills/module-engine/references/module-config.md +204 -204
  79. package/skills/ocr-engine/SKILL.md +113 -113
  80. package/skills/page-engine/SKILL.md +206 -206
  81. 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
  82. 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
  83. package/skills/performance-testing/SKILL.md +227 -221
  84. package/skills/playwright-e2e/SKILL.md +197 -196
  85. 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
  86. 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
  87. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  88. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  89. package/skills/print-engine/SKILL.md +259 -259
  90. package/skills/production-readonly-audit/SKILL.md +41 -41
  91. package/skills/report-engine/SKILL.md +71 -71
  92. package/skills/search-engine/SKILL.md +75 -75
  93. package/skills/spider-engine/SKILL.md +190 -190
  94. package/skills/system-observability/SKILL.md +259 -246
  95. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  96. package/skills/translate-engine/SKILL.md +140 -140
  97. package/skills/ui-design/SKILL.md +223 -223
  98. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  99. package/skills/ui-design/references/design-pattern-library.md +184 -184
  100. package/skills/ui-design/references/mci-design-contract.md +163 -163
  101. package/skills/ui-design/references/motion-and-media.md +78 -78
  102. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  103. 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
  104. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  112. package/skills/unity-integration/SKILL.md +178 -171
  113. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  114. package/skills/unity-integration/references/sdk-api.md +82 -82
  115. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  116. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  117. package/skills/v8-api-config/SKILL.md +388 -388
  118. package/skills/v8-cache-pattern/SKILL.md +312 -312
  119. package/skills/v8-crud-api/SKILL.md +179 -178
  120. 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
  121. 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
  122. package/skills/v8-debugging/SKILL.md +284 -284
  123. package/skills/v8-explorer-tree/SKILL.md +228 -228
  124. package/skills/v8-export-import/SKILL.md +219 -219
  125. 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
  126. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  127. 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
  128. package/skills/v8-file-upload/SKILL.md +255 -284
  129. package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -0
  130. 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
  131. 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
  132. package/skills/v8-file-upload/references/progressive-03-/347/251/272/347/233/256/345/275/225/346/240/207/350/256/260/344/270/216/350/277/234/347/250/213/344/270/213/350/275/275.md +36 -0
  133. package/skills/v8-formengine-http/SKILL.md +238 -238
  134. package/skills/v8-frontend-events/SKILL.md +180 -180
  135. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  136. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  137. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  138. package/skills/v8-http-integration/SKILL.md +182 -182
  139. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  140. 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
  141. package/skills/v8-image-processing/SKILL.md +190 -190
  142. package/skills/v8-image-processing/references/api-reference.md +623 -623
  143. package/skills/v8-menu-buttons/SKILL.md +186 -186
  144. 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
  145. 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
  146. 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
  147. package/skills/v8-mongodb/SKILL.md +200 -200
  148. package/skills/v8-mq-mqtt/SKILL.md +178 -176
  149. package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -342
  150. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  151. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  152. package/skills/v8-security/SKILL.md +227 -210
  153. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  154. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  155. package/skills/v8-sql-query/SKILL.md +302 -302
  156. package/skills/v8-table-event/SKILL.md +176 -176
  157. 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
  158. 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
  159. package/skills/v8-tcp-integration/SKILL.md +158 -147
  160. package/skills/v8-template-engine/SKILL.md +167 -167
  161. package/skills/v8-utilities/SKILL.md +104 -104
  162. package/skills/v8-utilities/references/client-api-index.md +143 -143
  163. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  164. package/skills/v8-utilities/references/server-api-index.md +188 -188
  165. package/skills/v8-workflow/SKILL.md +252 -252
  166. 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
  167. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  168. package/skills/vision-engine/SKILL.md +160 -160
  169. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  170. package/skills/workspace-conventions/SKILL.md +13 -13
  171. 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 +2 -2
@@ -1,227 +1,227 @@
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=fb7a9bfb6e8be41d472df82edf6238b9d09e6aeabd54eb71bce2a255a50c6326 -->
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
- ### 5.2.1 底部空白、滚动和键盘必须测量
116
-
117
- - 安全区来源单独回读:H5 使用 CSS 环境安全区,禁止将 `screenHeight - windowHeight` 当作底部 inset。App/小程序按各端权威接口取值,`0` 必须原样保留;不得以 `inset || guessedFallback` 触发估算。用非最大化桌面窗口、浏览器缩放和地址栏收展重测,不能仅用 `screen === viewport` 的固定截图通过门禁。
118
-
119
- - 矩形断言以实际页面内屏为边界:桌面使用手机壳内屏,移动端使用当前可见视口;导航底边与该边界的差应在事先约定的舍入容差内(示例 `2 CSS px`)。壳外阴影、边框和桌面留边不算导航下方空白。
120
- - 同时量导航外框和内部菜单触摸区。外框贴底但高度几百像素、菜单挤在其顶部仍算失败;内部菜单下方剩余高度只能等于真实安全区加设计底间距,不能把多余区域都解释成“安全区”。
121
- - 至少选三个主 Tab,在初始、滚动中、滚动到底、切回短内容/空态后重复测量;导航位置应稳定,最后一项不能被导航遮挡。普通单列页只允许一个主体滚动 owner,桌面 body 不应跟随正文滚动。
122
- - 覆盖桌面正常与矮屏、375px/430px 手机、预览断点两侧、手机横屏和旋转后恢复。`rpx` 换算要在 768px、960px 和 4K 外窗下检查实际导航高度,不能只看源码写了 `430px` 壳宽。
123
- - 输入框获得焦点、软键盘打开、关闭和返回后重新验证可见区域与导航。H5 结合 `visualViewport` 的尺寸/偏移判断真实可见范围,原生端遵守其键盘模式;缩小浏览器视口只证明 resize 响应,不能证明 iOS/Android 真键盘行为。
124
- - 取 `fullPage:false` 的真实视口截图并核对导航下方区域。长页 `fullPage` 图中导航可能位于图中部,不能据此判定贴底,也不能仅凭长图或图标存在宣称布局通过。
125
-
126
- <!-- /microi-progressive:chunk -->
127
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=f4e1f01f3dde22120ecba9131b5c738118c0e4aa8131ea83978f3e1d6b4db289 -->
128
- ## 5.3 全屏工具页必须遵守返回状态栈
129
-
130
- - AI 助手、扫码工作台、全屏预览等独占视口功能需要手机侧滑返回时,优先使用独立路由承载;普通 `position:fixed` 蒙层不能冒充页面历史。
131
- - 返回事件按“键盘/确认框 -> 内部抽屉/筛选 -> 当前全屏页 -> 底层业务页”的顺序消费。关闭按钮与手机返回手势必须得到一致结果。
132
- - 从 Tab 页进入后,第一次返回只能关闭全屏工具页并回到原 Tab;路由栈异常或分享直达时才兜底回首页,禁止退出小程序或跳过原页面。
133
- - 自动化至少覆盖关闭按钮、Android 返回键/`onBackPress`、微信侧滑返回三条路径,并验证返回后原页面和滚动状态仍然可用。
134
-
135
- <!-- /microi-progressive:chunk -->
136
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=eaf8ac0e9edadf382a08951d6c43b9ab561dd2a8ee02fc80048fc843e4656033 -->
137
- ## 5.4 微信浮动入口必须通过真实事件桥门禁
138
-
139
- - UniApp 自定义组件中的浮动按钮、拖拽助手和悬浮客服不得只做 H5 点击测试。必须在微信运行时找到真实组件节点,派发 `touchstart/touchend`,并断言页面栈、弹层状态或业务动作确实变化。
140
- - `touch* / tap` 上的 `.stop/.prevent` 会编译成 `catchtouch* / catchtap`;禁止在可拖拽组件上整组滥用。若出现“看得见但点不动”,先检查生成 WXML 是 `catch*` 还是 `bind*`,再检查事件方法与路由,不要用构建成功替代交互验收。
141
- - 短触与拖动应通过明确位移阈值区分。短触在 `touchend` 完成主动作,拖动只更新位置并持久化,导航失败必须给用户可见反馈。
142
- - 自动化需增加对照按钮:同页普通按钮可点击、浮动入口也可点击,才能确认不是自动化连接或页面整体失效。
143
-
144
- <!-- /microi-progressive:chunk -->
145
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=3a65e2da022d493b7d950450a10186d33652ec4225c359d9b3800ef431458525 -->
146
- ## 6. 后台菜单必须规划为至少两级
147
-
148
- 真实业务系统的后台菜单不能简单堆成一批一级菜单。
149
-
150
- 要求:
151
- - 先创建父级菜单分组,再把子级 CRUD 模块放到对应分组下。
152
- - 相关页面超过三个的业务模块必须有父级目录菜单。
153
- - 建议分组示例:
154
- - 客户中心:客户、站点、联系人、客户账号绑定。
155
- - 设备中心:设备台账、设备模板、维保参数。
156
- - 维保运营:计划、工单、服务记录、维修申请。
157
- - 报告中心:巡检报告、阅读日志、打印/分享模板。
158
- - 系统配置:字典、任务、集成设置。
159
- - 使用 Manifest/MCP 时,必须显式包含父模块和子模块。子模块必须设置 `ParentId`。
160
- - dry-run 计划必须列出最终菜单树,不能只列平铺菜单名。
161
- - 如果用户要求通过 MCP 修复已有后台,要真正执行远端工作:读取 `sys_menu`,创建缺失的父级 `SecondMenu` 行,更新现有子菜单 `ParentId` / `Sort`,给管理员角色授权新父菜单,然后回读菜单树。
162
- - 当用户明确要求修改当前 MCP 租户时,不要只把规则写进 skill 就停下。
163
-
164
- 禁止:
165
- - 把所有生成模块直接创建到根菜单。
166
- - 把客户主数据、工单、报告、日志和设置混在同一级。
167
-
168
- 验收:
169
- - MCP 生成后回读 `sys_menu` 并确认菜单深度。
170
- - 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
171
-
172
- <!-- /microi-progressive:chunk -->
173
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=e76ae9654126f9efcd103801dfc90cd77955953a94b2a6e01496cf7e8539049b -->
174
- ## 7. 移动端页面需要动效,但动效必须有用
175
-
176
- 移动端产品不应像静态后台表单。
177
-
178
- 要求:
179
- - 首版设计明确每页的动效来源,首屏、面板、卡片和重要操作区有统一入场与操作反馈;支持“清爽/精致”不等于删除所有动效。
180
- - 有品牌展示或用户要求持续酷炫效果时,在可见首屏/状态区使用轻量背景流光、光晕、轨道、呼吸或装饰漂浮等持续动效。主要使用 `transform/opacity`,限制层数、范围与幅度;持续动画不能只存在于加载中的骨架屏,不能伪造车辆、交易或其它业务状态。
181
- - 点击目标要有按下反馈。
182
- - 骨架屏应有轻微流光或脉冲。
183
- - 装饰动效幅度要小,不能干扰任务完成。
184
- - H5 尊重 `prefers-reduced-motion`,原生端提供等价减弱/关闭能力;页面隐藏或 App `onHide` 暂停装饰循环、计时器/RAF,恢复前台再启动,离开页面清理监听。浏览器 DOM、媒体查询与 RAF 仅在 H5 分支使用,不破坏小程序/App 编译。
185
- - 装饰层 `pointer-events:none`,被共享内屏裁切;标题、输入框、验证码、正文与关键按钮位置稳定。动效不能触发新的业务请求、重复提交或连续数据刷新。
186
-
187
- 禁止:
188
- - 整个应用没有交互反馈。
189
- - 在密集业务列表上使用重度循环动画。
190
- - 动效导致布局位移或文字重叠。
191
-
192
- 验收:
193
- - 浏览器或设备实际等待至少两个不同时间点,记录动画属性/截图变化,确认可见页面确实持续在动;只扫描 `@keyframes` 或截图一个静止画面不能证明效果。
194
- - 重测减少动态、前后台暂停/恢复、路由切换、按钮按下、输入/验证码操作与所有主 Tab。确认文字/输入控件矩形稳定、装饰层不夺取触摸、没有重复请求,并留存相应证据;浏览器结果不能冒充原生性能实测。
195
- - 没有动画导致横向溢出、文字裁切或固定栏抖动。
196
-
197
- <!-- /microi-progressive:chunk -->
198
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=9d89588a5dfc384aec720c47cad0506844f0233bd7540cb555650ed7929db946 -->
199
- ## 8. 登录页必须是直接登录界面
200
-
201
- 登录页不能强迫用户先在两个身份标签之间切换才能登录。
202
-
203
- 要求:
204
- - H5/App 默认提供一个手机号 + 图形验证码 + 短信验证码表单,服务端按租户策略统一已注册登录与未注册自动注册;密码是次级折叠/备用入口。封闭企业账号或用户指定模型保留其策略,不擅自开放注册。
205
- - 微信小程序默认使用 `<button open-type="getPhoneNumber">` 的手机号授权登录。账号密码登录可以作为次级兜底,但必须折叠或弱化,不能和手机号授权并列成第二套完整登录系统。
206
- - 微信小程序手机号快捷登录必须把返回的手机号 `code` 传给后端;当后端需要 OpenId/UnionId 时,还必须调用 `uni.login()` 获取新的 `LoginCode`。
207
- - 短信能力未配置时给明确的暂不可用状态与有效备用入口,不构造看似成功的验证码流程。微信小程序具备正式授权能力时保持手机号授权主路径,与短信/密码入口共用平台 DiyToken。
208
- - 默认文案说明“未注册手机号将按平台规则自动注册”,展示实际协议/隐私同意;不先要求用户猜测该点登录还是注册。
209
- - 登录页不要展示当前租户、OsClient、移动端构建版本、API host、调试版本块等内部实现信息。
210
-
211
- 禁止:
212
- - 除非用户明确要求,否则把员工/客户身份标签作为主登录模型。
213
- - 同屏展示两套完整登录系统,例如“账号 + 密码”和“手机号输入登录”并列。
214
- - 假设前端可以从 `getPhoneNumber` 直接读取微信手机号;现代微信返回的是 code。
215
- - 目标是微信小程序时,只把手机号登录实现成文本输入。
216
- - 向终端用户展示租户、版本或调试块。
217
-
218
- 验收:
219
- - 实现前检查标准参考 `microi.uniapp/src/pages/login/index.vue`。
220
- - 测试账号登录路径和手机号登录按钮渲染。
221
- - 构建 H5 和微信小程序目标。
222
-
223
- <!-- /microi-progressive:chunk -->
224
-
225
- ## 平台方通用 App 的登录连接器例外
226
-
227
- “登录页不要展示 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=765335189d85b558ad29ba73c04d1cf078101ee94819f969195b50440a82106f -->
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=e3c66bd92ca059235a7a3b0ece2fdfa598a41eaa149d0ee3a0d24d0d822a9f58 -->
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=2ddd560cf3620f8fb7f3cf64d62566206430ee14e6ac380a3023c5b9047b4f46 -->
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=b599e047e6b7a3688e4264a4d4b334e220e9798cbc13326e85a06f52bf20ce12 -->
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=42b24b7174d41d0dfb6e296b45902b65d65ded52a4d6c9ccb689656656096deb -->
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
+ ### 5.2.1 底部空白、滚动和键盘必须测量
116
+
117
+ - 安全区来源单独回读:H5 使用 CSS 环境安全区,禁止将 `screenHeight - windowHeight` 当作底部 inset。App/小程序按各端权威接口取值,`0` 必须原样保留;不得以 `inset || guessedFallback` 触发估算。用非最大化桌面窗口、浏览器缩放和地址栏收展重测,不能仅用 `screen === viewport` 的固定截图通过门禁。
118
+
119
+ - 矩形断言以实际页面内屏为边界:桌面使用手机壳内屏,移动端使用当前可见视口;导航底边与该边界的差应在事先约定的舍入容差内(示例 `2 CSS px`)。壳外阴影、边框和桌面留边不算导航下方空白。
120
+ - 同时量导航外框和内部菜单触摸区。外框贴底但高度几百像素、菜单挤在其顶部仍算失败;内部菜单下方剩余高度只能等于真实安全区加设计底间距,不能把多余区域都解释成“安全区”。
121
+ - 至少选三个主 Tab,在初始、滚动中、滚动到底、切回短内容/空态后重复测量;导航位置应稳定,最后一项不能被导航遮挡。普通单列页只允许一个主体滚动 owner,桌面 body 不应跟随正文滚动。
122
+ - 覆盖桌面正常与矮屏、375px/430px 手机、预览断点两侧、手机横屏和旋转后恢复。`rpx` 换算要在 768px、960px 和 4K 外窗下检查实际导航高度,不能只看源码写了 `430px` 壳宽。
123
+ - 输入框获得焦点、软键盘打开、关闭和返回后重新验证可见区域与导航。H5 结合 `visualViewport` 的尺寸/偏移判断真实可见范围,原生端遵守其键盘模式;缩小浏览器视口只证明 resize 响应,不能证明 iOS/Android 真键盘行为。
124
+ - 取 `fullPage:false` 的真实视口截图并核对导航下方区域。长页 `fullPage` 图中导航可能位于图中部,不能据此判定贴底,也不能仅凭长图或图标存在宣称布局通过。
125
+
126
+ <!-- /microi-progressive:chunk -->
127
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=207765d0398738f24566763a2481469f4fc63e8a0b5f00abd292fe8a1cdd225a -->
128
+ ## 5.3 全屏工具页必须遵守返回状态栈
129
+
130
+ - AI 助手、扫码工作台、全屏预览等独占视口功能需要手机侧滑返回时,优先使用独立路由承载;普通 `position:fixed` 蒙层不能冒充页面历史。
131
+ - 返回事件按“键盘/确认框 -> 内部抽屉/筛选 -> 当前全屏页 -> 底层业务页”的顺序消费。关闭按钮与手机返回手势必须得到一致结果。
132
+ - 从 Tab 页进入后,第一次返回只能关闭全屏工具页并回到原 Tab;路由栈异常或分享直达时才兜底回首页,禁止退出小程序或跳过原页面。
133
+ - 自动化至少覆盖关闭按钮、Android 返回键/`onBackPress`、微信侧滑返回三条路径,并验证返回后原页面和滚动状态仍然可用。
134
+
135
+ <!-- /microi-progressive:chunk -->
136
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=1451e6ffbb0c0d29d8362e400540e3fa4f9f38a2402a9faf93de4cce7b1c9b4c -->
137
+ ## 5.4 微信浮动入口必须通过真实事件桥门禁
138
+
139
+ - UniApp 自定义组件中的浮动按钮、拖拽助手和悬浮客服不得只做 H5 点击测试。必须在微信运行时找到真实组件节点,派发 `touchstart/touchend`,并断言页面栈、弹层状态或业务动作确实变化。
140
+ - `touch* / tap` 上的 `.stop/.prevent` 会编译成 `catchtouch* / catchtap`;禁止在可拖拽组件上整组滥用。若出现“看得见但点不动”,先检查生成 WXML 是 `catch*` 还是 `bind*`,再检查事件方法与路由,不要用构建成功替代交互验收。
141
+ - 短触与拖动应通过明确位移阈值区分。短触在 `touchend` 完成主动作,拖动只更新位置并持久化,导航失败必须给用户可见反馈。
142
+ - 自动化需增加对照按钮:同页普通按钮可点击、浮动入口也可点击,才能确认不是自动化连接或页面整体失效。
143
+
144
+ <!-- /microi-progressive:chunk -->
145
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=8377f92a7456bd68e83867e893f1c9e8eec9edf0bba2a3f434c5bce75a9e2d00 -->
146
+ ## 6. 后台菜单必须规划为至少两级
147
+
148
+ 真实业务系统的后台菜单不能简单堆成一批一级菜单。
149
+
150
+ 要求:
151
+ - 先创建父级菜单分组,再把子级 CRUD 模块放到对应分组下。
152
+ - 相关页面超过三个的业务模块必须有父级目录菜单。
153
+ - 建议分组示例:
154
+ - 客户中心:客户、站点、联系人、客户账号绑定。
155
+ - 设备中心:设备台账、设备模板、维保参数。
156
+ - 维保运营:计划、工单、服务记录、维修申请。
157
+ - 报告中心:巡检报告、阅读日志、打印/分享模板。
158
+ - 系统配置:字典、任务、集成设置。
159
+ - 使用 Manifest/MCP 时,必须显式包含父模块和子模块。子模块必须设置 `ParentId`。
160
+ - dry-run 计划必须列出最终菜单树,不能只列平铺菜单名。
161
+ - 如果用户要求通过 MCP 修复已有后台,要真正执行远端工作:读取 `sys_menu`,创建缺失的父级 `SecondMenu` 行,更新现有子菜单 `ParentId` / `Sort`,给管理员角色授权新父菜单,然后回读菜单树。
162
+ - 当用户明确要求修改当前 MCP 租户时,不要只把规则写进 skill 就停下。
163
+
164
+ 禁止:
165
+ - 把所有生成模块直接创建到根菜单。
166
+ - 把客户主数据、工单、报告、日志和设置混在同一级。
167
+
168
+ 验收:
169
+ - MCP 生成后回读 `sys_menu` 并确认菜单深度。
170
+ - 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
171
+
172
+ <!-- /microi-progressive:chunk -->
173
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=2f0127586e4a25f5b73f47a018e3c0cf2dbc2aaf483bf05fb6baf9d77e558a19 -->
174
+ ## 7. 移动端页面需要动效,但动效必须有用
175
+
176
+ 移动端产品不应像静态后台表单。
177
+
178
+ 要求:
179
+ - 首版设计明确每页的动效来源,首屏、面板、卡片和重要操作区有统一入场与操作反馈;支持“清爽/精致”不等于删除所有动效。
180
+ - 有品牌展示或用户要求持续酷炫效果时,在可见首屏/状态区使用轻量背景流光、光晕、轨道、呼吸或装饰漂浮等持续动效。主要使用 `transform/opacity`,限制层数、范围与幅度;持续动画不能只存在于加载中的骨架屏,不能伪造车辆、交易或其它业务状态。
181
+ - 点击目标要有按下反馈。
182
+ - 骨架屏应有轻微流光或脉冲。
183
+ - 装饰动效幅度要小,不能干扰任务完成。
184
+ - H5 尊重 `prefers-reduced-motion`,原生端提供等价减弱/关闭能力;页面隐藏或 App `onHide` 暂停装饰循环、计时器/RAF,恢复前台再启动,离开页面清理监听。浏览器 DOM、媒体查询与 RAF 仅在 H5 分支使用,不破坏小程序/App 编译。
185
+ - 装饰层 `pointer-events:none`,被共享内屏裁切;标题、输入框、验证码、正文与关键按钮位置稳定。动效不能触发新的业务请求、重复提交或连续数据刷新。
186
+
187
+ 禁止:
188
+ - 整个应用没有交互反馈。
189
+ - 在密集业务列表上使用重度循环动画。
190
+ - 动效导致布局位移或文字重叠。
191
+
192
+ 验收:
193
+ - 浏览器或设备实际等待至少两个不同时间点,记录动画属性/截图变化,确认可见页面确实持续在动;只扫描 `@keyframes` 或截图一个静止画面不能证明效果。
194
+ - 重测减少动态、前后台暂停/恢复、路由切换、按钮按下、输入/验证码操作与所有主 Tab。确认文字/输入控件矩形稳定、装饰层不夺取触摸、没有重复请求,并留存相应证据;浏览器结果不能冒充原生性能实测。
195
+ - 没有动画导致横向溢出、文字裁切或固定栏抖动。
196
+
197
+ <!-- /microi-progressive:chunk -->
198
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=257d7d2f5ad586565168fe19af4d091b8a4333f0b6a19622c9a164d9237c0ff5 -->
199
+ ## 8. 登录页必须是直接登录界面
200
+
201
+ 登录页不能强迫用户先在两个身份标签之间切换才能登录。
202
+
203
+ 要求:
204
+ - H5/App 默认提供一个手机号 + 图形验证码 + 短信验证码表单,服务端按租户策略统一已注册登录与未注册自动注册;密码是次级折叠/备用入口。封闭企业账号或用户指定模型保留其策略,不擅自开放注册。
205
+ - 微信小程序默认使用 `<button open-type="getPhoneNumber">` 的手机号授权登录。账号密码登录可以作为次级兜底,但必须折叠或弱化,不能和手机号授权并列成第二套完整登录系统。
206
+ - 微信小程序手机号快捷登录必须把返回的手机号 `code` 传给后端;当后端需要 OpenId/UnionId 时,还必须调用 `uni.login()` 获取新的 `LoginCode`。
207
+ - 短信能力未配置时给明确的暂不可用状态与有效备用入口,不构造看似成功的验证码流程。微信小程序具备正式授权能力时保持手机号授权主路径,与短信/密码入口共用平台 DiyToken。
208
+ - 默认文案说明“未注册手机号将按平台规则自动注册”,展示实际协议/隐私同意;不先要求用户猜测该点登录还是注册。
209
+ - 登录页不要展示当前租户、OsClient、移动端构建版本、API host、调试版本块等内部实现信息。
210
+
211
+ 禁止:
212
+ - 除非用户明确要求,否则把员工/客户身份标签作为主登录模型。
213
+ - 同屏展示两套完整登录系统,例如“账号 + 密码”和“手机号输入登录”并列。
214
+ - 假设前端可以从 `getPhoneNumber` 直接读取微信手机号;现代微信返回的是 code。
215
+ - 目标是微信小程序时,只把手机号登录实现成文本输入。
216
+ - 向终端用户展示租户、版本或调试块。
217
+
218
+ 验收:
219
+ - 实现前检查标准参考 `microi.uniapp/src/pages/login/index.vue`。
220
+ - 测试账号登录路径和手机号登录按钮渲染。
221
+ - 构建 H5 和微信小程序目标。
222
+
223
+ <!-- /microi-progressive:chunk -->
224
+
225
+ ## 平台方通用 App 的登录连接器例外
226
+
227
+ “登录页不要展示 ApiBase / OsClient”仍是 H5、小程序与客户专属 App 的默认规则。只有用户明确要求、并由平台方提交一个聚合多租户的通用 `APP-PLUS` 安装包时,才允许把平台连接器作为登录页次级折叠卡片;必须保留清晰的当前连接摘要、固定协议下拉、HTTP 风险提示、带图标的应用按钮、连接 loading/disabled 状态,并在展开后通过滚动和安全区保证小屏设备不裁切登录操作。连接器不能伪装成调试面板,也不能展示 Token、密码或其它秘密。