@microi.net/cli 5.8.5 → 5.8.6

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 (211) 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/LICENSE +21 -21
  8. package/README.md +71 -71
  9. package/assets/build-meta.json +6 -6
  10. package/assets/feature-matrix.json +138 -138
  11. package/assets/logo.svg +4 -4
  12. package/cordis.patch.yml +1 -1
  13. package/package.json +1 -1
  14. package/scripts/codex-marketplace.json +20 -20
  15. package/scripts/mcp-codex-stdio-adapter.js +189 -189
  16. package/scripts/mcp-trae-windows-launcher.cmd +21 -21
  17. package/scripts/microi-cli-mcp.js +7 -7
  18. package/scripts/microi-cli.js +66 -65
  19. package/scripts/microi-codex-broker.js +450 -450
  20. package/scripts/microi-codex-router.js +618 -618
  21. package/scripts/microi-skills.meta.json +384 -384
  22. package/skills/.microi-skills-version.json +2 -2
  23. package/skills/.progressive-disclosure-manifest.json +3566 -3566
  24. package/skills/README.md +287 -287
  25. package/skills/ai-engine/SKILL.md +269 -265
  26. package/skills/ai-engine/agents/openai.yaml +4 -4
  27. package/skills/ai-engine/references/ai-employees.md +48 -48
  28. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  29. package/skills/ai-platform-governance/SKILL.md +177 -177
  30. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  31. package/skills/app-store/SKILL.md +525 -525
  32. package/skills/app-store/agents/openai.yaml +4 -4
  33. package/skills/business-blueprint/SKILL.md +193 -193
  34. package/skills/datasource-engine/SKILL.md +93 -93
  35. package/skills/datasource-engine/agents/openai.yaml +4 -4
  36. package/skills/dos-orm/SKILL.md +97 -97
  37. package/skills/dos-orm/references/api-reference.md +229 -229
  38. package/skills/email-engine/SKILL.md +81 -81
  39. package/skills/email-engine/references/v8-email.md +34 -34
  40. package/skills/job-engine/SKILL.md +176 -176
  41. package/skills/job-engine/agents/openai.yaml +4 -4
  42. package/skills/message-notification/SKILL.md +156 -156
  43. package/skills/message-notification/agents/openai.yaml +5 -5
  44. package/skills/message-notification/references/contracts.md +102 -102
  45. package/skills/microi/SKILL.md +14 -14
  46. package/skills/microi-ai-app-auth.js +652 -652
  47. package/skills/microi-ai-application/SKILL.md +115 -115
  48. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  49. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  50. package/skills/microi-client-frontend/SKILL.md +244 -244
  51. 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
  52. 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
  53. 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
  54. package/skills/microi-codex/SKILL.md +102 -102
  55. package/skills/microi-codex-installer/SKILL.md +231 -231
  56. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  57. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  58. package/skills/microi-db-schema/SKILL.md +175 -175
  59. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  60. package/skills/microi-db-schema/references/core-tables.md +695 -695
  61. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  62. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  63. package/skills/microi-db-schema/references/schema.md +646 -646
  64. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  65. package/skills/microi-deployment/SKILL.md +221 -221
  66. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  67. package/skills/microi-docs-coverage/SKILL.md +133 -133
  68. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  69. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  70. package/skills/microi-form-engine/SKILL.md +333 -333
  71. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  72. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  73. package/skills/microi-form-layout/SKILL.md +205 -205
  74. 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
  75. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  76. 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
  77. package/skills/microi-left-right-layout/SKILL.md +141 -141
  78. package/skills/microi-microservice/SKILL.md +326 -324
  79. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  80. package/skills/microi-mobile-app-quality/SKILL.md +185 -185
  81. 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
  82. 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
  83. package/skills/microi-solution-quotation/SKILL.md +78 -78
  84. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  85. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  86. package/skills/microi-sso/SKILL.md +92 -92
  87. package/skills/microi-sso/references/acceptance.md +49 -49
  88. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  89. package/skills/microi-sso/references/inbound.md +53 -53
  90. package/skills/microi-sso/references/outbound.md +39 -39
  91. package/skills/microi-system-delivery/SKILL.md +137 -137
  92. 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
  93. 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
  94. package/skills/microi-ui/SKILL.md +192 -192
  95. 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
  96. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  97. 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
  98. 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
  99. package/skills/microi.v8.js +1921 -1921
  100. package/skills/module-engine/SKILL.md +255 -255
  101. package/skills/module-engine/references/module-config.md +204 -204
  102. package/skills/ocr-engine/SKILL.md +113 -113
  103. package/skills/ocr-engine/agents/openai.yaml +4 -4
  104. package/skills/page-engine/SKILL.md +206 -206
  105. package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
  106. 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
  107. 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
  108. package/skills/performance-testing/SKILL.md +221 -221
  109. package/skills/playwright-e2e/SKILL.md +196 -196
  110. 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
  111. 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
  112. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  113. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  114. package/skills/print-engine/SKILL.md +259 -259
  115. package/skills/production-readonly-audit/SKILL.md +41 -41
  116. package/skills/report-engine/SKILL.md +71 -71
  117. package/skills/report-engine/agents/openai.yaml +4 -4
  118. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  119. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  120. package/skills/scripts/sync-embedded-skills.mjs +46 -46
  121. package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
  122. package/skills/search-engine/SKILL.md +75 -75
  123. package/skills/search-engine/agents/openai.yaml +4 -4
  124. package/skills/spider-engine/SKILL.md +190 -190
  125. package/skills/system-observability/SKILL.md +248 -248
  126. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  127. package/skills/translate-engine/SKILL.md +140 -140
  128. package/skills/translate-engine/agents/openai.yaml +4 -4
  129. package/skills/ui-design/SKILL.md +223 -223
  130. package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
  131. package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
  132. package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
  133. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  134. package/skills/ui-design/references/design-pattern-library.md +184 -184
  135. package/skills/ui-design/references/mci-design-contract.md +163 -163
  136. package/skills/ui-design/references/motion-and-media.md +78 -78
  137. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  138. 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
  139. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  140. 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
  141. 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
  142. 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
  143. 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
  144. 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
  145. 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
  146. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  147. package/skills/unity-integration/SKILL.md +171 -171
  148. package/skills/unity-integration/agents/openai.yaml +4 -4
  149. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  150. package/skills/unity-integration/references/sdk-api.md +82 -82
  151. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  152. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  153. package/skills/v8-api-config/SKILL.md +388 -388
  154. package/skills/v8-cache-pattern/SKILL.md +312 -312
  155. package/skills/v8-crud-api/SKILL.md +178 -178
  156. 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
  157. 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
  158. package/skills/v8-debugging/SKILL.md +284 -284
  159. package/skills/v8-explorer-tree/SKILL.md +228 -228
  160. package/skills/v8-export-import/SKILL.md +219 -219
  161. 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
  162. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  163. 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
  164. package/skills/v8-file-upload/SKILL.md +284 -284
  165. 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
  166. 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
  167. package/skills/v8-formengine-http/SKILL.md +238 -238
  168. package/skills/v8-frontend-events/SKILL.md +180 -180
  169. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  170. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  171. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  172. package/skills/v8-http-integration/SKILL.md +182 -182
  173. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  174. 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
  175. package/skills/v8-image-processing/SKILL.md +190 -190
  176. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  177. package/skills/v8-image-processing/references/api-reference.md +623 -623
  178. package/skills/v8-menu-buttons/SKILL.md +186 -186
  179. 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
  180. 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
  181. 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
  182. package/skills/v8-mongodb/SKILL.md +200 -200
  183. package/skills/v8-mq-mqtt/SKILL.md +176 -176
  184. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  185. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  186. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  187. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  188. package/skills/v8-security/SKILL.md +210 -210
  189. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  190. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  191. package/skills/v8-sql-query/SKILL.md +302 -302
  192. package/skills/v8-table-event/SKILL.md +176 -176
  193. 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
  194. 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
  195. package/skills/v8-tcp-integration/SKILL.md +147 -147
  196. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  197. package/skills/v8-template-engine/SKILL.md +167 -167
  198. package/skills/v8-utilities/SKILL.md +104 -104
  199. package/skills/v8-utilities/references/client-api-index.md +143 -143
  200. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  201. package/skills/v8-utilities/references/server-api-index.md +188 -188
  202. package/skills/v8-workflow/SKILL.md +252 -252
  203. 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
  204. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  205. package/skills/vision-engine/SKILL.md +160 -160
  206. package/skills/vision-engine/agents/openai.yaml +4 -4
  207. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  208. package/skills/workspace-conventions/SKILL.md +273 -273
  209. 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
  210. 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
  211. 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,225 +1,225 @@
1
- # microi-uniapp-frontend 详细参考 1
2
-
3
- > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
-
5
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-010 sha256=2820c6dbc7641b03cb2d3af98f80ca654162fdac7995993be5cb7e25b8e5bdea -->
6
- ## 移动端分类/双栏列表独立滚动
7
-
8
- 商品分类、知识库分类、通讯录分组、资产分类等“左侧分类 + 右侧列表”的移动端页面,根节点必须固定在一个视口内,不能让整页和内部列表同时滚动。
9
-
10
- - 根页面使用 `height:100vh; overflow:hidden; display:flex; flex-direction:column;`。
11
- - 分类主体使用 `flex:1; min-height:0; display:flex;`,并给底部 tabBar 预留 `padding-bottom: calc(tabBarHeight + env(safe-area-inset-bottom));`。
12
- - 左侧分类和右侧列表分别用 `scroll-view scroll-y`,高度来自父级 `height:100%` / `flex:1; min-height:0`,不要用整页滚动承载右侧商品列表。
13
- - 右侧分页必须绑定 `@scrolltolower`,设置合理 `lower-threshold`,并维护 `pageIndex/pageSize/loading/finished`,第一页重置列表,后续页追加列表。
14
- - 切换左侧分类或顶部专区时,必须重置分页状态并重新加载第一页;不能沿用旧分类的 `finished` 或 `pageIndex`。
15
- - 验收截图要重点看底部:内容不能被 tabBar 压住,页面底部不能出现整页滚动留下的大块空隙。
16
-
17
- 参考结构:
18
-
19
- ```vue
20
- <view class="page-category">
21
- <view class="area-tabs">...</view>
22
- <view class="cat-body">
23
- <scroll-view class="cat-side" scroll-y>...</scroll-view>
24
- <scroll-view class="cat-content" scroll-y lower-threshold="120" @scrolltolower="loadMore">...</scroll-view>
25
- </view>
26
- </view>
27
- ```
28
-
29
- ```scss
30
- .page-category { height: 100vh; overflow: hidden; display: flex; flex-direction: column; }
31
- .cat-body { flex: 1; min-height: 0; display: flex; padding-bottom: calc(104rpx + env(safe-area-inset-bottom)); }
32
- .cat-side { width: 176rpx; height: 100%; }
33
- .cat-content { flex: 1; min-width: 0; height: 100%; }
34
- ```
35
-
36
- <!-- /microi-progressive:chunk -->
37
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-011 sha256=a28fba298274b738ef9039c6bd6a1707468687e2ae9644a819736374586749e9 -->
38
- ## 数据页必须使用骨架屏 Loading
39
-
40
- 任何依赖接口/数据库返回数据的移动端页面,都必须区分 `loading`、`data`、`empty`,并且首屏加载态必须使用骨架屏(Skeleton Screen)。接口请求结束前不能提前显示“暂无数据/暂无明细/空空如也”,也不能只用“图标 + 数据加载中...”或单独 spinner 作为页面级 loading。
41
-
42
- - `loading` 初始值设为 `true`(或进入页面同步设为 `true`),请求 `finally` 中再置为 `false`;未登录、无权限、参数缺失等提前返回分支也必须关闭 `loading`。
43
- - 首屏加载、切换 tab、筛选、搜索、分类、重新加载第一页时,应显示与最终版式接近的骨架:列表页用列表骨架,双列商品用网格骨架,详情页用详情骨架,首页 Banner/卡片区用对应区域骨架。
44
- - 分页追加下一页时不能遮住已有数据,可在列表底部追加紧凑骨架行/骨架卡片;已有数据仍保持可阅读和可滚动。
45
- - 空态必须使用 `!loading && list.length === 0`,不能直接写 `v-if="!list.length"`;空态可以用图标、文案和行动按钮,但只能在请求完成后出现。
46
- - 请求失败时结束 loading,并给用户 toast、错误空态或可重试入口;不要静默失败后停在骨架屏,也不要把失败误显示成“暂无数据”。
47
- - 通用组件可以保留 `DataState` 处理空态,但其 `loading` 分支必须渲染骨架屏,不得渲染加载文案作为主体。
48
- - 骨架屏样式必须遵循 `microi.skills/ui-design/SKILL.md` 的骨架屏 Loading 设计规范:形态贴近最终内容、尺寸稳定、主题适配、动效克制,并支持弱化动效。
49
-
50
- 参考结构:
51
-
52
- ```vue
53
- <SkeletonGrid v-if="loading && !list.length" :rows="6" />
54
- <view v-for="item in list" :key="item.Id">...</view>
55
- <SkeletonList v-if="loading && list.length" compact :rows="2" />
56
- <DataState v-else-if="!list.length" empty-text="暂无数据" />
57
- ```
58
-
59
- ```js
60
- const loading = ref(true);
61
- const list = ref([]);
62
-
63
- async function load() {
64
- loading.value = true;
65
- try {
66
- const r = await queryList();
67
- list.value = r.Code === 1 ? (r.Data || []) : [];
68
- } finally {
69
- loading.value = false;
70
- }
71
- }
72
- ```
73
-
74
- <!-- /microi-progressive:chunk -->
75
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-012 sha256=5554c817702cc491937fb2b32f5ba2ce76554a35ef0a2189979ff1d60789ab30 -->
76
- ## 移动端安全区必须兼容 iOS 与 Android
77
-
78
- 任何 UniApp/H5 移动端页面都必须同时适配 iPhone 刘海屏/Dynamic Island/Home Indicator、Android 状态栏/虚拟导航栏/手势条、微信/浏览器/WebView 容器差异。不要用固定 `20px/44px/64px` 直接硬编码顶部或底部间距。
79
-
80
- - `manifest.json` / H5 模板必须确保 viewport 含 `viewport-fit=cover`,否则 iOS 的 `env(safe-area-inset-*)` 不会完整生效。
81
- - 页面根节点使用 `min-height:100vh` 或固定视口布局时,顶部内容、底部固定栏和内部滚动容器必须一起考虑安全区,不能只给根节点加 padding。
82
- - 顶部自定义导航栏应结合 `uni.getSystemInfoSync().statusBarHeight` 和 CSS `env(safe-area-inset-top)`:状态栏占位负责不同系统高度,导航按钮和标题整体下移,返回按钮触摸区不能压到刘海/状态栏。
83
- - 不能只依赖 `env(safe-area-inset-*)`。微信小程序、部分 Android WebView 或开发者工具中该值可能为 `0`;项目必须通过 `uni.getWindowInfo()`(旧端回退 `uni.getSystemInfoSync()`)读取 `statusBarHeight`、`safeArea` / `safeAreaInsets`,注入统一的 `--mci-safe-top`、`--mci-safe-bottom` 等页面壳变量。
84
- - 微信小程序使用 `navigationStyle: custom` 时,必须读取 `uni.getMenuButtonBoundingClientRect()`(必要时回退 `wx.getMenuButtonBoundingClientRect()`),给顶部栏右侧预留 `windowWidth - capsule.left + gap`。登录、分享、状态角标、更多操作等任何按钮都不能进入右上角胶囊区域。
85
- - 全屏弹层/工作台如果包含历史、新建、关闭等多个头部操作,必须先计算整组宽度;胶囊左侧不足时将整组放到胶囊底边以下,不得通过缩小触摸区、覆盖胶囊或截断标题硬塞。自动化测试应读取元素与胶囊 `boundingClientRect` 并断言不相交。
86
- - 安全区实现必须集中在 `MciPage`、页面壳 composable/runtime 或全局布局中;禁止每页各自猜测 `20px/44px`。`pages.json` 中每个 `navigationStyle: custom` 页面都必须接入同一个页面壳,新增路由时同步纳入检查。
87
- - 底部 `tabBar`、购买栏、提交栏、批量操作栏等 fixed 元素必须使用 `padding-bottom: env(safe-area-inset-bottom)`,主体内容必须额外预留底部高度,避免最后一条数据被按钮或 tabBar 遮挡。
88
- - 底部 fixed 元素应优先使用运行时 `--mci-safe-bottom`,以 CSS `env(safe-area-inset-bottom)` 作为 H5 兜底;底部导航、提交栏、弹出层和滚动容器必须引用同一变量,不能各算一套。
89
- - 双栏分类页、聊天页、详情页带底部按钮时,内部 `scroll-view` 要用 `flex:1; min-height:0` 承载滚动,并在滚动容器底部预留 `calc(fixedBarHeight + env(safe-area-inset-bottom))`。
90
- - H5 在 PC 手机壳模式下,fixed 顶栏/底栏仍要限制在手机壳宽度内;不能铺满整个桌面浏览器。
91
- - 验收必须至少覆盖一个 iPhone 刘海/灵动岛尺寸、一个 Android 高状态栏或虚拟导航栏尺寸、一个微信开发者工具真机模拟尺寸、一个 PC H5 手机壳尺寸;逐项截图检查顶部不被状态栏/胶囊遮挡、底部按钮不贴边、列表最后一项可见。不能只截图首页,必须按 `pages.json` 路由清单覆盖登录、Tab 页、详情、表单、弹层和管理页。
92
- - 独占屏幕且需要支持手机侧滑返回的功能应使用独立页面路由。`onBackPress`/页面返回先消费当前页内部的键盘、对话框和抽屉状态;内部状态清空后才弹出当前页,不能让一次返回直接退出小程序或越过底层业务页。
93
-
94
- <!-- /microi-progressive:chunk -->
95
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-013 sha256=591a8e5a3e33cfcdb102abf56ebc6eeb5c5896d621442c30e734f455d625842c -->
96
- ## 微信自定义组件的点击与拖动事件必须真机链路验收
97
-
98
- - UniApp 可拖动浮动入口等自定义组件,不要给 `touchstart/touchmove/touchend/tap` 整组无差别添加 `.stop/.prevent`。这些修饰符会生成微信 `catchtouch* / catchtap`,部分 UniApp 自定义组件中可能吞掉事件桥,出现节点可见但点击和触摸方法完全不执行。
99
- - 优先使用可正常分发的 `bindtouch* / bindtap`,在方法内部通过 10-12px 位移阈值区分短触与拖动;短触应在 `touchend` 直接执行主动作,`tap` 仅作鼠标/H5 兜底,拖动结束不得误触主动作。
100
- - 导航失败必须提供可见提示并记录错误,禁止让点击失败表现为毫无反应。
101
- - H5 的 DOM `.click()`、CDP 触摸和微信预览编译都不能证明小程序组件事件桥正常。交付前必须使用微信开发者工具或 `miniprogram-automator` 对真实节点派发触摸,并断言目标页面进入页面栈;同时抽查一个普通按钮,排除自动化工具自身失效。
102
-
103
- 参考样式:
104
-
105
- ```scss
106
- .page-mobile {
107
- min-height: 100vh;
108
- padding-top: calc(24rpx + var(--mci-safe-top, env(safe-area-inset-top)));
109
- padding-bottom: calc(112rpx + var(--mci-safe-bottom, env(safe-area-inset-bottom)));
110
- box-sizing: border-box;
111
- }
112
- .mci-navbar {
113
- padding-right: var(--mci-capsule-right, 0px);
114
- }
115
- .bottom-bar {
116
- position: fixed;
117
- left: 24rpx;
118
- right: 24rpx;
119
- bottom: calc(24rpx + var(--mci-safe-bottom, env(safe-area-inset-bottom)));
120
- }
121
- ```
122
-
123
- <!-- /microi-progressive:chunk -->
124
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-014 sha256=62f20b920f2365d9f2f5062218b10b17aa181ccb3ae5d2260f795e086355f678 -->
125
- ## 列表型资料页必须提供完整管理动作
126
-
127
- 地址、联系人、收款方式、发票抬头、车辆、设备、证照、银行卡等用户维护型资料页,不能只展示简略列表。除非业务明确只读,移动端必须提供:
128
-
129
- - 查看完整信息:点击卡片或“详情”打开详情页/弹层,显示列表里省略的所有关键字段。
130
- - 新增和编辑:新增与编辑可以复用同一表单,编辑时要带 Id 并回填现有值。
131
- - 删除:必须有二次确认,并校验当前用户只能删除自己的资料;删除成功后刷新列表。
132
- - 默认/启用类状态:同一用户只允许一个默认值时,后端保存接口要负责互斥清理,前端不能只改本地 UI。
133
- - 权限与接口:后端接口必须用 token/当前用户校验所有权,不能信任前端传来的 MemberId/UserId。
134
- - 跨会员但属于当前业务流程可见的数据(例如订单买家查看卖家收款方式、交易双方资料、售后处理信息)必须由订单/售后等业务 ApiEngine 在完成订单参与者权限校验后返回;前端不能用通用 `formEngineGet` 直接查对方会员表数据,因为移动端通用查询通常会自动追加当前会员隔离条件。
135
- - 空态行动:没有数据时给出新增入口,但仍要遵守上面的加载态规则。
136
-
137
- <!-- /microi-progressive:chunk -->
138
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-015 sha256=d8e9280b5127d7dafd4dcb83b22bdb379fef39eac1e2e1b2e37f1c064cfe7fc6 -->
139
- ## 移动端资产/奖励流水展示
140
-
141
- 收益明细、积分明细、奖励明细、充值记录、订单流水等页面要面向用户展示“发生了什么”和“是否到账”,不要直接暴露后台调试字段。
142
-
143
- - 每条记录必须显示完整时间(至少 `yyyy-MM-dd HH:mm:ss` 或同等精度),不能只显示日期加分钟片段。
144
- - 有入账状态的记录必须用清晰标签展示,例如“待入账 / 已入账”;待入账金额颜色要与已入账区分,但仍保持可读。
145
- - 推荐显示:类型、金额、完整时间、状态、贡献会员/交易对象、业务资产短码(如卡号/券码)和必要的标题。
146
- - 不要在移动端直接显示内部 `RelOrderId`、服务费订单号、数据库 Id、调试来源操作、规则比例说明等后台字段,除非页面是面向运维的后台工具。
147
- - 后端接口应先把 `TypeLabel`、`SettleStatusLabel`、`DisplayTime`、`ContributorName`、`CardNo` 等字段整理好,前端只做轻展示,避免多个页面各自拼接导致重复或口径不一致。
148
-
149
- <!-- /microi-progressive:chunk -->
150
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-016 sha256=610b00696fd8a1548842974b5551e0e55bc276a3605459947251f508b4ef2ad3 -->
151
- ## H5 在 PC 浏览器必须自动模拟移动端
152
-
153
- 移动端 UniApp H5 被 PC 浏览器访问时,不能按桌面宽屏铺满。必须在全局样式里用媒体查询生成手机预览壳。
154
-
155
- 基础要求:
156
-
157
- - `@media screen and (min-width: 768px)` 下把 `uni-app` 居中并限制到常见手机宽度,例如 `430px`。
158
- - `html, body` 使用克制的桌面背景,`uni-app` 内保持移动端页面本身背景。
159
- - 如果项目或主题给 `body.theme-light`、`body.theme-dark` 写了背景色,PC 媒体查询必须显式覆盖,避免手机壳外侧仍显示暗色或项目内装饰背景。
160
- - 同步约束 `uni-page`、`uni-page-wrapper`、`uni-page-body` 的宽度。
161
- - `uni-page-body` 给底部菜单和安全区预留 padding,避免内容或底部操作栏压住 tabBar。
162
- - 所有 `position: fixed` 底部操作栏按同一手机壳宽度居中。
163
- - 原生 `uni-tabbar` 和 `.uni-tabbar` 必须显式设置 `position: fixed`、`bottom: 0`、同宽居中和足够的 `z-index`,否则主体像手机壳但底部菜单可能丢失或铺满 PC 宽屏。
164
- - 页面内 `position: fixed` 的装饰背景(如 aurora、粒子、全屏渐变)在 PC 壳模式下必须收回到 `uni-app/uni-page-body` 内,不能覆盖整块桌面背景。
165
-
166
- 参考样式:
167
-
168
- ```scss
169
- @media screen and (min-width: 768px) {
170
- html,
171
- body {
172
- min-height: 100%;
173
- background:
174
- linear-gradient(135deg, rgba(255,255,255,.78), rgba(244,246,250,.92) 44%, rgba(236,239,245,.98)),
175
- radial-gradient(circle at 18% 16%, rgba(181,18,32,.07), transparent 32%),
176
- radial-gradient(circle at 84% 10%, rgba(216,162,58,.08), transparent 28%),
177
- #F3F5F9;
178
- }
179
-
180
- body { margin: 0; }
181
-
182
- uni-app {
183
- position: relative;
184
- display: block;
185
- width: min(430px, 100vw);
186
- min-height: 100vh;
187
- margin: 0 auto;
188
- overflow-x: hidden;
189
- background: var(--app-bg-base, #F7F8FB);
190
- box-shadow: 0 18px 54px rgba(28, 36, 52, .16);
191
- }
192
-
193
- uni-page,
194
- uni-page-wrapper,
195
- uni-page-body {
196
- width: 100% !important;
197
- max-width: 430px;
198
- margin: 0 auto;
199
- }
200
-
201
- uni-page-body {
202
- padding-bottom: calc(64px + env(safe-area-inset-bottom));
203
- }
204
-
205
- .bottom-bar {
206
- left: 50% !important;
207
- right: auto !important;
208
- width: calc(min(430px, 100vw) - 24px);
209
- transform: translateX(-50%);
210
- }
211
-
212
- uni-tabbar,
213
- uni-tabbar .uni-tabbar {
214
- position: fixed !important;
215
- left: 50% !important;
216
- right: auto !important;
217
- bottom: 0 !important;
218
- width: min(430px, 100vw) !important;
219
- transform: translateX(-50%);
220
- z-index: 99 !important;
221
- }
222
- }
223
- ```
224
-
225
- <!-- /microi-progressive:chunk -->
1
+ # microi-uniapp-frontend 详细参考 1
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-010 sha256=2820c6dbc7641b03cb2d3af98f80ca654162fdac7995993be5cb7e25b8e5bdea -->
6
+ ## 移动端分类/双栏列表独立滚动
7
+
8
+ 商品分类、知识库分类、通讯录分组、资产分类等“左侧分类 + 右侧列表”的移动端页面,根节点必须固定在一个视口内,不能让整页和内部列表同时滚动。
9
+
10
+ - 根页面使用 `height:100vh; overflow:hidden; display:flex; flex-direction:column;`。
11
+ - 分类主体使用 `flex:1; min-height:0; display:flex;`,并给底部 tabBar 预留 `padding-bottom: calc(tabBarHeight + env(safe-area-inset-bottom));`。
12
+ - 左侧分类和右侧列表分别用 `scroll-view scroll-y`,高度来自父级 `height:100%` / `flex:1; min-height:0`,不要用整页滚动承载右侧商品列表。
13
+ - 右侧分页必须绑定 `@scrolltolower`,设置合理 `lower-threshold`,并维护 `pageIndex/pageSize/loading/finished`,第一页重置列表,后续页追加列表。
14
+ - 切换左侧分类或顶部专区时,必须重置分页状态并重新加载第一页;不能沿用旧分类的 `finished` 或 `pageIndex`。
15
+ - 验收截图要重点看底部:内容不能被 tabBar 压住,页面底部不能出现整页滚动留下的大块空隙。
16
+
17
+ 参考结构:
18
+
19
+ ```vue
20
+ <view class="page-category">
21
+ <view class="area-tabs">...</view>
22
+ <view class="cat-body">
23
+ <scroll-view class="cat-side" scroll-y>...</scroll-view>
24
+ <scroll-view class="cat-content" scroll-y lower-threshold="120" @scrolltolower="loadMore">...</scroll-view>
25
+ </view>
26
+ </view>
27
+ ```
28
+
29
+ ```scss
30
+ .page-category { height: 100vh; overflow: hidden; display: flex; flex-direction: column; }
31
+ .cat-body { flex: 1; min-height: 0; display: flex; padding-bottom: calc(104rpx + env(safe-area-inset-bottom)); }
32
+ .cat-side { width: 176rpx; height: 100%; }
33
+ .cat-content { flex: 1; min-width: 0; height: 100%; }
34
+ ```
35
+
36
+ <!-- /microi-progressive:chunk -->
37
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-011 sha256=a28fba298274b738ef9039c6bd6a1707468687e2ae9644a819736374586749e9 -->
38
+ ## 数据页必须使用骨架屏 Loading
39
+
40
+ 任何依赖接口/数据库返回数据的移动端页面,都必须区分 `loading`、`data`、`empty`,并且首屏加载态必须使用骨架屏(Skeleton Screen)。接口请求结束前不能提前显示“暂无数据/暂无明细/空空如也”,也不能只用“图标 + 数据加载中...”或单独 spinner 作为页面级 loading。
41
+
42
+ - `loading` 初始值设为 `true`(或进入页面同步设为 `true`),请求 `finally` 中再置为 `false`;未登录、无权限、参数缺失等提前返回分支也必须关闭 `loading`。
43
+ - 首屏加载、切换 tab、筛选、搜索、分类、重新加载第一页时,应显示与最终版式接近的骨架:列表页用列表骨架,双列商品用网格骨架,详情页用详情骨架,首页 Banner/卡片区用对应区域骨架。
44
+ - 分页追加下一页时不能遮住已有数据,可在列表底部追加紧凑骨架行/骨架卡片;已有数据仍保持可阅读和可滚动。
45
+ - 空态必须使用 `!loading && list.length === 0`,不能直接写 `v-if="!list.length"`;空态可以用图标、文案和行动按钮,但只能在请求完成后出现。
46
+ - 请求失败时结束 loading,并给用户 toast、错误空态或可重试入口;不要静默失败后停在骨架屏,也不要把失败误显示成“暂无数据”。
47
+ - 通用组件可以保留 `DataState` 处理空态,但其 `loading` 分支必须渲染骨架屏,不得渲染加载文案作为主体。
48
+ - 骨架屏样式必须遵循 `microi.skills/ui-design/SKILL.md` 的骨架屏 Loading 设计规范:形态贴近最终内容、尺寸稳定、主题适配、动效克制,并支持弱化动效。
49
+
50
+ 参考结构:
51
+
52
+ ```vue
53
+ <SkeletonGrid v-if="loading && !list.length" :rows="6" />
54
+ <view v-for="item in list" :key="item.Id">...</view>
55
+ <SkeletonList v-if="loading && list.length" compact :rows="2" />
56
+ <DataState v-else-if="!list.length" empty-text="暂无数据" />
57
+ ```
58
+
59
+ ```js
60
+ const loading = ref(true);
61
+ const list = ref([]);
62
+
63
+ async function load() {
64
+ loading.value = true;
65
+ try {
66
+ const r = await queryList();
67
+ list.value = r.Code === 1 ? (r.Data || []) : [];
68
+ } finally {
69
+ loading.value = false;
70
+ }
71
+ }
72
+ ```
73
+
74
+ <!-- /microi-progressive:chunk -->
75
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-012 sha256=5554c817702cc491937fb2b32f5ba2ce76554a35ef0a2189979ff1d60789ab30 -->
76
+ ## 移动端安全区必须兼容 iOS 与 Android
77
+
78
+ 任何 UniApp/H5 移动端页面都必须同时适配 iPhone 刘海屏/Dynamic Island/Home Indicator、Android 状态栏/虚拟导航栏/手势条、微信/浏览器/WebView 容器差异。不要用固定 `20px/44px/64px` 直接硬编码顶部或底部间距。
79
+
80
+ - `manifest.json` / H5 模板必须确保 viewport 含 `viewport-fit=cover`,否则 iOS 的 `env(safe-area-inset-*)` 不会完整生效。
81
+ - 页面根节点使用 `min-height:100vh` 或固定视口布局时,顶部内容、底部固定栏和内部滚动容器必须一起考虑安全区,不能只给根节点加 padding。
82
+ - 顶部自定义导航栏应结合 `uni.getSystemInfoSync().statusBarHeight` 和 CSS `env(safe-area-inset-top)`:状态栏占位负责不同系统高度,导航按钮和标题整体下移,返回按钮触摸区不能压到刘海/状态栏。
83
+ - 不能只依赖 `env(safe-area-inset-*)`。微信小程序、部分 Android WebView 或开发者工具中该值可能为 `0`;项目必须通过 `uni.getWindowInfo()`(旧端回退 `uni.getSystemInfoSync()`)读取 `statusBarHeight`、`safeArea` / `safeAreaInsets`,注入统一的 `--mci-safe-top`、`--mci-safe-bottom` 等页面壳变量。
84
+ - 微信小程序使用 `navigationStyle: custom` 时,必须读取 `uni.getMenuButtonBoundingClientRect()`(必要时回退 `wx.getMenuButtonBoundingClientRect()`),给顶部栏右侧预留 `windowWidth - capsule.left + gap`。登录、分享、状态角标、更多操作等任何按钮都不能进入右上角胶囊区域。
85
+ - 全屏弹层/工作台如果包含历史、新建、关闭等多个头部操作,必须先计算整组宽度;胶囊左侧不足时将整组放到胶囊底边以下,不得通过缩小触摸区、覆盖胶囊或截断标题硬塞。自动化测试应读取元素与胶囊 `boundingClientRect` 并断言不相交。
86
+ - 安全区实现必须集中在 `MciPage`、页面壳 composable/runtime 或全局布局中;禁止每页各自猜测 `20px/44px`。`pages.json` 中每个 `navigationStyle: custom` 页面都必须接入同一个页面壳,新增路由时同步纳入检查。
87
+ - 底部 `tabBar`、购买栏、提交栏、批量操作栏等 fixed 元素必须使用 `padding-bottom: env(safe-area-inset-bottom)`,主体内容必须额外预留底部高度,避免最后一条数据被按钮或 tabBar 遮挡。
88
+ - 底部 fixed 元素应优先使用运行时 `--mci-safe-bottom`,以 CSS `env(safe-area-inset-bottom)` 作为 H5 兜底;底部导航、提交栏、弹出层和滚动容器必须引用同一变量,不能各算一套。
89
+ - 双栏分类页、聊天页、详情页带底部按钮时,内部 `scroll-view` 要用 `flex:1; min-height:0` 承载滚动,并在滚动容器底部预留 `calc(fixedBarHeight + env(safe-area-inset-bottom))`。
90
+ - H5 在 PC 手机壳模式下,fixed 顶栏/底栏仍要限制在手机壳宽度内;不能铺满整个桌面浏览器。
91
+ - 验收必须至少覆盖一个 iPhone 刘海/灵动岛尺寸、一个 Android 高状态栏或虚拟导航栏尺寸、一个微信开发者工具真机模拟尺寸、一个 PC H5 手机壳尺寸;逐项截图检查顶部不被状态栏/胶囊遮挡、底部按钮不贴边、列表最后一项可见。不能只截图首页,必须按 `pages.json` 路由清单覆盖登录、Tab 页、详情、表单、弹层和管理页。
92
+ - 独占屏幕且需要支持手机侧滑返回的功能应使用独立页面路由。`onBackPress`/页面返回先消费当前页内部的键盘、对话框和抽屉状态;内部状态清空后才弹出当前页,不能让一次返回直接退出小程序或越过底层业务页。
93
+
94
+ <!-- /microi-progressive:chunk -->
95
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-013 sha256=591a8e5a3e33cfcdb102abf56ebc6eeb5c5896d621442c30e734f455d625842c -->
96
+ ## 微信自定义组件的点击与拖动事件必须真机链路验收
97
+
98
+ - UniApp 可拖动浮动入口等自定义组件,不要给 `touchstart/touchmove/touchend/tap` 整组无差别添加 `.stop/.prevent`。这些修饰符会生成微信 `catchtouch* / catchtap`,部分 UniApp 自定义组件中可能吞掉事件桥,出现节点可见但点击和触摸方法完全不执行。
99
+ - 优先使用可正常分发的 `bindtouch* / bindtap`,在方法内部通过 10-12px 位移阈值区分短触与拖动;短触应在 `touchend` 直接执行主动作,`tap` 仅作鼠标/H5 兜底,拖动结束不得误触主动作。
100
+ - 导航失败必须提供可见提示并记录错误,禁止让点击失败表现为毫无反应。
101
+ - H5 的 DOM `.click()`、CDP 触摸和微信预览编译都不能证明小程序组件事件桥正常。交付前必须使用微信开发者工具或 `miniprogram-automator` 对真实节点派发触摸,并断言目标页面进入页面栈;同时抽查一个普通按钮,排除自动化工具自身失效。
102
+
103
+ 参考样式:
104
+
105
+ ```scss
106
+ .page-mobile {
107
+ min-height: 100vh;
108
+ padding-top: calc(24rpx + var(--mci-safe-top, env(safe-area-inset-top)));
109
+ padding-bottom: calc(112rpx + var(--mci-safe-bottom, env(safe-area-inset-bottom)));
110
+ box-sizing: border-box;
111
+ }
112
+ .mci-navbar {
113
+ padding-right: var(--mci-capsule-right, 0px);
114
+ }
115
+ .bottom-bar {
116
+ position: fixed;
117
+ left: 24rpx;
118
+ right: 24rpx;
119
+ bottom: calc(24rpx + var(--mci-safe-bottom, env(safe-area-inset-bottom)));
120
+ }
121
+ ```
122
+
123
+ <!-- /microi-progressive:chunk -->
124
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-014 sha256=62f20b920f2365d9f2f5062218b10b17aa181ccb3ae5d2260f795e086355f678 -->
125
+ ## 列表型资料页必须提供完整管理动作
126
+
127
+ 地址、联系人、收款方式、发票抬头、车辆、设备、证照、银行卡等用户维护型资料页,不能只展示简略列表。除非业务明确只读,移动端必须提供:
128
+
129
+ - 查看完整信息:点击卡片或“详情”打开详情页/弹层,显示列表里省略的所有关键字段。
130
+ - 新增和编辑:新增与编辑可以复用同一表单,编辑时要带 Id 并回填现有值。
131
+ - 删除:必须有二次确认,并校验当前用户只能删除自己的资料;删除成功后刷新列表。
132
+ - 默认/启用类状态:同一用户只允许一个默认值时,后端保存接口要负责互斥清理,前端不能只改本地 UI。
133
+ - 权限与接口:后端接口必须用 token/当前用户校验所有权,不能信任前端传来的 MemberId/UserId。
134
+ - 跨会员但属于当前业务流程可见的数据(例如订单买家查看卖家收款方式、交易双方资料、售后处理信息)必须由订单/售后等业务 ApiEngine 在完成订单参与者权限校验后返回;前端不能用通用 `formEngineGet` 直接查对方会员表数据,因为移动端通用查询通常会自动追加当前会员隔离条件。
135
+ - 空态行动:没有数据时给出新增入口,但仍要遵守上面的加载态规则。
136
+
137
+ <!-- /microi-progressive:chunk -->
138
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-015 sha256=d8e9280b5127d7dafd4dcb83b22bdb379fef39eac1e2e1b2e37f1c064cfe7fc6 -->
139
+ ## 移动端资产/奖励流水展示
140
+
141
+ 收益明细、积分明细、奖励明细、充值记录、订单流水等页面要面向用户展示“发生了什么”和“是否到账”,不要直接暴露后台调试字段。
142
+
143
+ - 每条记录必须显示完整时间(至少 `yyyy-MM-dd HH:mm:ss` 或同等精度),不能只显示日期加分钟片段。
144
+ - 有入账状态的记录必须用清晰标签展示,例如“待入账 / 已入账”;待入账金额颜色要与已入账区分,但仍保持可读。
145
+ - 推荐显示:类型、金额、完整时间、状态、贡献会员/交易对象、业务资产短码(如卡号/券码)和必要的标题。
146
+ - 不要在移动端直接显示内部 `RelOrderId`、服务费订单号、数据库 Id、调试来源操作、规则比例说明等后台字段,除非页面是面向运维的后台工具。
147
+ - 后端接口应先把 `TypeLabel`、`SettleStatusLabel`、`DisplayTime`、`ContributorName`、`CardNo` 等字段整理好,前端只做轻展示,避免多个页面各自拼接导致重复或口径不一致。
148
+
149
+ <!-- /microi-progressive:chunk -->
150
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-016 sha256=610b00696fd8a1548842974b5551e0e55bc276a3605459947251f508b4ef2ad3 -->
151
+ ## H5 在 PC 浏览器必须自动模拟移动端
152
+
153
+ 移动端 UniApp H5 被 PC 浏览器访问时,不能按桌面宽屏铺满。必须在全局样式里用媒体查询生成手机预览壳。
154
+
155
+ 基础要求:
156
+
157
+ - `@media screen and (min-width: 768px)` 下把 `uni-app` 居中并限制到常见手机宽度,例如 `430px`。
158
+ - `html, body` 使用克制的桌面背景,`uni-app` 内保持移动端页面本身背景。
159
+ - 如果项目或主题给 `body.theme-light`、`body.theme-dark` 写了背景色,PC 媒体查询必须显式覆盖,避免手机壳外侧仍显示暗色或项目内装饰背景。
160
+ - 同步约束 `uni-page`、`uni-page-wrapper`、`uni-page-body` 的宽度。
161
+ - `uni-page-body` 给底部菜单和安全区预留 padding,避免内容或底部操作栏压住 tabBar。
162
+ - 所有 `position: fixed` 底部操作栏按同一手机壳宽度居中。
163
+ - 原生 `uni-tabbar` 和 `.uni-tabbar` 必须显式设置 `position: fixed`、`bottom: 0`、同宽居中和足够的 `z-index`,否则主体像手机壳但底部菜单可能丢失或铺满 PC 宽屏。
164
+ - 页面内 `position: fixed` 的装饰背景(如 aurora、粒子、全屏渐变)在 PC 壳模式下必须收回到 `uni-app/uni-page-body` 内,不能覆盖整块桌面背景。
165
+
166
+ 参考样式:
167
+
168
+ ```scss
169
+ @media screen and (min-width: 768px) {
170
+ html,
171
+ body {
172
+ min-height: 100%;
173
+ background:
174
+ linear-gradient(135deg, rgba(255,255,255,.78), rgba(244,246,250,.92) 44%, rgba(236,239,245,.98)),
175
+ radial-gradient(circle at 18% 16%, rgba(181,18,32,.07), transparent 32%),
176
+ radial-gradient(circle at 84% 10%, rgba(216,162,58,.08), transparent 28%),
177
+ #F3F5F9;
178
+ }
179
+
180
+ body { margin: 0; }
181
+
182
+ uni-app {
183
+ position: relative;
184
+ display: block;
185
+ width: min(430px, 100vw);
186
+ min-height: 100vh;
187
+ margin: 0 auto;
188
+ overflow-x: hidden;
189
+ background: var(--app-bg-base, #F7F8FB);
190
+ box-shadow: 0 18px 54px rgba(28, 36, 52, .16);
191
+ }
192
+
193
+ uni-page,
194
+ uni-page-wrapper,
195
+ uni-page-body {
196
+ width: 100% !important;
197
+ max-width: 430px;
198
+ margin: 0 auto;
199
+ }
200
+
201
+ uni-page-body {
202
+ padding-bottom: calc(64px + env(safe-area-inset-bottom));
203
+ }
204
+
205
+ .bottom-bar {
206
+ left: 50% !important;
207
+ right: auto !important;
208
+ width: calc(min(430px, 100vw) - 24px);
209
+ transform: translateX(-50%);
210
+ }
211
+
212
+ uni-tabbar,
213
+ uni-tabbar .uni-tabbar {
214
+ position: fixed !important;
215
+ left: 50% !important;
216
+ right: auto !important;
217
+ bottom: 0 !important;
218
+ width: min(430px, 100vw) !important;
219
+ transform: translateX(-50%);
220
+ z-index: 99 !important;
221
+ }
222
+ }
223
+ ```
224
+
225
+ <!-- /microi-progressive:chunk -->