@microi.net/cli 5.8.5 → 5.8.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/LICENSE +21 -21
  7. package/README.md +71 -71
  8. package/assets/build-meta.json +7 -7
  9. package/assets/feature-matrix.json +138 -138
  10. package/assets/logo.svg +4 -4
  11. package/cordis.patch.yml +1 -1
  12. package/package.json +1 -1
  13. package/scripts/mcp-codex-stdio-adapter.js +0 -0
  14. package/scripts/mcp-server.js +1 -1
  15. package/scripts/microi-cli.js +66 -65
  16. package/scripts/microi-codex-broker.js +450 -450
  17. package/scripts/microi-codex-router.js +618 -618
  18. package/scripts/microi-skills.meta.json +384 -384
  19. package/skills/.microi-skills-version.json +2 -2
  20. package/skills/.progressive-disclosure-manifest.json +21 -21
  21. package/skills/README.md +287 -287
  22. package/skills/ai-engine/SKILL.md +269 -265
  23. package/skills/ai-engine/agents/openai.yaml +4 -4
  24. package/skills/ai-engine/references/ai-employees.md +48 -48
  25. package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
  26. package/skills/ai-platform-governance/SKILL.md +177 -177
  27. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  28. package/skills/app-store/SKILL.md +525 -525
  29. package/skills/app-store/agents/openai.yaml +4 -4
  30. package/skills/business-blueprint/SKILL.md +193 -193
  31. package/skills/datasource-engine/SKILL.md +93 -93
  32. package/skills/datasource-engine/agents/openai.yaml +4 -4
  33. package/skills/dos-orm/SKILL.md +97 -95
  34. package/skills/dos-orm/references/api-reference.md +229 -229
  35. package/skills/email-engine/SKILL.md +81 -81
  36. package/skills/email-engine/references/v8-email.md +34 -34
  37. package/skills/job-engine/SKILL.md +176 -176
  38. package/skills/job-engine/agents/openai.yaml +4 -4
  39. package/skills/message-notification/SKILL.md +156 -156
  40. package/skills/message-notification/agents/openai.yaml +5 -5
  41. package/skills/message-notification/references/contracts.md +102 -102
  42. package/skills/microi/SKILL.md +14 -14
  43. package/skills/microi-ai-app-auth.js +652 -652
  44. package/skills/microi-ai-application/SKILL.md +115 -115
  45. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  46. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  47. package/skills/microi-client-frontend/SKILL.md +246 -244
  48. package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -144
  49. package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +196 -196
  50. package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +167 -167
  51. package/skills/microi-codex/SKILL.md +102 -100
  52. package/skills/microi-codex-installer/SKILL.md +231 -231
  53. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  54. package/skills/microi-datasource-mapping/SKILL.md +122 -122
  55. package/skills/microi-db-schema/SKILL.md +175 -175
  56. package/skills/microi-db-schema/agents/openai.yaml +4 -4
  57. package/skills/microi-db-schema/references/core-tables.md +695 -695
  58. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  59. package/skills/microi-db-schema/references/schema-overview.md +202 -202
  60. package/skills/microi-db-schema/references/schema.md +646 -646
  61. package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
  62. package/skills/microi-deployment/SKILL.md +222 -220
  63. package/skills/microi-deployment/references/deployment-matrix.md +109 -109
  64. package/skills/microi-docs-coverage/SKILL.md +133 -133
  65. package/skills/microi-docs-coverage/references/capability-map.md +91 -91
  66. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  67. package/skills/microi-form-engine/SKILL.md +333 -333
  68. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  69. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  70. package/skills/microi-form-layout/SKILL.md +205 -205
  71. package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
  72. package/skills/microi-frontend-sdk/SKILL.md +194 -194
  73. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
  74. package/skills/microi-left-right-layout/SKILL.md +141 -141
  75. package/skills/microi-microservice/SKILL.md +328 -326
  76. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  77. package/skills/microi-mobile-app-quality/SKILL.md +185 -185
  78. package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
  79. package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
  80. package/skills/microi-solution-quotation/SKILL.md +78 -78
  81. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  82. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  83. package/skills/microi-sso/SKILL.md +96 -90
  84. package/skills/microi-sso/references/acceptance.md +49 -49
  85. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  86. package/skills/microi-sso/references/inbound.md +53 -53
  87. package/skills/microi-sso/references/outbound.md +39 -39
  88. package/skills/microi-system-delivery/SKILL.md +137 -137
  89. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
  90. package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +217 -217
  91. package/skills/microi-ui/SKILL.md +192 -192
  92. package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
  93. package/skills/microi-uniapp-frontend/SKILL.md +193 -193
  94. package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -225
  95. package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
  96. package/skills/microi.v8.js +1921 -1921
  97. package/skills/module-engine/SKILL.md +255 -255
  98. package/skills/module-engine/references/module-config.md +204 -204
  99. package/skills/ocr-engine/SKILL.md +113 -113
  100. package/skills/ocr-engine/agents/openai.yaml +4 -4
  101. package/skills/page-engine/SKILL.md +206 -206
  102. package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
  103. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -234
  104. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -60
  105. package/skills/performance-testing/SKILL.md +221 -221
  106. package/skills/playwright-e2e/SKILL.md +196 -196
  107. package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
  108. package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
  109. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
  110. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
  111. package/skills/print-engine/SKILL.md +259 -259
  112. package/skills/production-readonly-audit/SKILL.md +41 -41
  113. package/skills/report-engine/SKILL.md +71 -71
  114. package/skills/report-engine/agents/openai.yaml +4 -4
  115. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  116. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  117. package/skills/scripts/sync-embedded-skills.mjs +46 -46
  118. package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
  119. package/skills/search-engine/SKILL.md +75 -75
  120. package/skills/search-engine/agents/openai.yaml +4 -4
  121. package/skills/spider-engine/SKILL.md +190 -190
  122. package/skills/system-observability/SKILL.md +249 -246
  123. package/skills/system-observability/references/memory-incident-triage.md +77 -77
  124. package/skills/translate-engine/SKILL.md +140 -140
  125. package/skills/translate-engine/agents/openai.yaml +4 -4
  126. package/skills/ui-design/SKILL.md +223 -223
  127. package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
  128. package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
  129. package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
  130. package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
  131. package/skills/ui-design/references/design-pattern-library.md +184 -184
  132. package/skills/ui-design/references/mci-design-contract.md +163 -163
  133. package/skills/ui-design/references/motion-and-media.md +78 -78
  134. package/skills/ui-design/references/product-flow-recipes.md +94 -94
  135. package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
  136. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
  137. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
  138. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
  139. package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
  140. package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
  141. package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
  142. package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
  143. package/skills/uniapp-mall-assets/SKILL.md +176 -176
  144. package/skills/unity-integration/SKILL.md +171 -171
  145. package/skills/unity-integration/agents/openai.yaml +4 -4
  146. package/skills/unity-integration/references/ai-app-delivery.md +119 -119
  147. package/skills/unity-integration/references/sdk-api.md +82 -82
  148. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  149. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  150. package/skills/v8-api-config/SKILL.md +388 -388
  151. package/skills/v8-cache-pattern/SKILL.md +312 -312
  152. package/skills/v8-crud-api/SKILL.md +178 -178
  153. package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
  154. package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
  155. package/skills/v8-debugging/SKILL.md +284 -284
  156. package/skills/v8-explorer-tree/SKILL.md +228 -228
  157. package/skills/v8-export-import/SKILL.md +219 -219
  158. package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
  159. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
  160. package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
  161. package/skills/v8-file-upload/SKILL.md +284 -284
  162. package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +263 -263
  163. package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +161 -161
  164. package/skills/v8-formengine-http/SKILL.md +238 -238
  165. package/skills/v8-frontend-events/SKILL.md +180 -180
  166. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  167. package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
  168. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
  169. package/skills/v8-http-integration/SKILL.md +182 -182
  170. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
  171. package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
  172. package/skills/v8-image-processing/SKILL.md +190 -190
  173. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  174. package/skills/v8-image-processing/references/api-reference.md +623 -623
  175. package/skills/v8-menu-buttons/SKILL.md +186 -186
  176. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
  177. package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
  178. package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
  179. package/skills/v8-mongodb/SKILL.md +200 -200
  180. package/skills/v8-mq-mqtt/SKILL.md +176 -176
  181. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  182. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
  183. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  184. package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
  185. package/skills/v8-security/SKILL.md +210 -210
  186. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
  187. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
  188. package/skills/v8-sql-query/SKILL.md +302 -302
  189. package/skills/v8-table-event/SKILL.md +176 -176
  190. package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -216
  191. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
  192. package/skills/v8-tcp-integration/SKILL.md +147 -147
  193. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  194. package/skills/v8-template-engine/SKILL.md +167 -167
  195. package/skills/v8-utilities/SKILL.md +104 -104
  196. package/skills/v8-utilities/references/client-api-index.md +143 -143
  197. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  198. package/skills/v8-utilities/references/server-api-index.md +188 -188
  199. package/skills/v8-workflow/SKILL.md +252 -252
  200. package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
  201. package/skills/v8-workflow/references/workflow-configuration.md +49 -49
  202. package/skills/vision-engine/SKILL.md +160 -160
  203. package/skills/vision-engine/agents/openai.yaml +4 -4
  204. package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
  205. package/skills/workspace-conventions/SKILL.md +273 -273
  206. package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +209 -209
  207. package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +217 -217
  208. package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +27 -27
@@ -1,178 +1,178 @@
1
- ---
2
- name: v8-crud-api
3
- description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScript,涉及 V8.FormEngine Add/Upt/Del/GetTableData、DosResult 返回、事务和校验。
4
- ---
5
-
6
- > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
-
8
- # Microi V8 CRUD API 接口引擎开发
9
-
10
- 你正在开发 Microi 吾码平台的 V8 接口引擎。接口引擎是运行在服务端的 JavaScript 函数,通过 `V8.FormEngine` 操作数据库,通过 `V8.Result` 或 `return` 返回结果。
11
-
12
- <!-- microi-progressive:begin -->
13
- <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=522eba2beee1f0b0df087fe86f1ff70bc74b8e9f68a844a5bea1471389a0df22 -->
14
- ## 本地优先与版本头(必做)
15
-
16
- AI 本地开发接口引擎时,优先修改 `microi-v8-engine/<租户>/<项目>/接口引擎/.../*.js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。插件提示“本地和远端不一致”时,必须先读取本地与远端代码并合并有效差异,不能盲目用任一侧覆盖另一侧。
17
-
18
- 每一次修改、上传、推送接口引擎代码,都必须维护文件顶部版本区域。版本号从 `v1.0.0` 开始;每次上传/推送/修改递增 1;补丁位和次版本位最大为 9 并向前进位(`v1.0.9 -> v1.1.0`、`v1.9.9 -> v2.0.0`、`v9.9.9 -> v10.0.0`)。代码头只写完整功能说明,不写修改历史、时间戳或 ChangeLog。推荐格式:
19
-
20
- ```javascript
21
- /*
22
- * V8 ApiEngine
23
- * ApiEngineKey: 示例接口引擎Key
24
- * Version: v1.0.0
25
- * 功能说明:
26
- * - 完整说明该接口引擎负责的业务功能、输入参数、关键返回字段和重要副作用。
27
- */
28
- ```
29
-
30
- 同步流程:`确认后端可达(不可达则自动启动 Microi.Server/Microi.net.Api/Microi.net.Api.csproj) -> 读取远端 -> 修改本地并递增语义版本头 -> JS 语法检查 -> 保存远端 -> 回读远端确认代码头 Version 与 sys_apiengine.Version 一致 -> 用 HTTP /apiengine/{key} + osclient Header 复测`。只用 MCP 保存成功不算完成,必须至少做回读或 HTTP 验证。普通 POST/PUT/PATCH/DELETE 禁止无脑追加 `--OsClient--...--`;该特殊路径仅保留给确实无法传 Header/Form/Query 的 GET/HEAD 或第三方回调场景。
31
-
32
- 如果保存或回读时出现 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听等服务不可达问题,不能提前中止。需要启动或重启本地 API 时,必须在 `Microi.Server/Microi.net.Api` 目录通过 VS Code 可见终端执行 `dotnet run --launch-profile Microi.net.Api`,让开发者能肉眼看到并手动停止;不要用隐藏后台 shell 启动长期占用端口的 API 进程。若工具当前无法打开可见终端,应先说明限制并让用户启动/重启后继续验证。涉及 PC 页面联调或 Playwright 时,`Microi.Client` 也必须使用可见终端执行:`npm run dev -- --host 0.0.0.0 --port 1988`。只有启动失败、依赖缺失、数据库连接失败或端口冲突无法处理时才报告阻塞。
33
-
34
- Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `DOTNET_ENVIRONMENT`,让 `Program.cs` 读取 `Microi.Server/Microi.net.Api/.microi-local` 并加载对应的 `appsettings.{Env}.json`。
35
-
36
- 版本与历史同步规则:通过 MCP 或 VS Code 插件保存接口引擎时,必须同步写入 `sys_apiengine.Version`;新版平台把每次修改说明作为独立记录写入 `mci_apiengine_change_history`,表单中的“修改历史”使用 `TableChild` 展示,不再让客户端拼接或覆盖 `sys_apiengine.ChangeHistory` 多行文本。写入必须携带版本号与简明说明,并使用幂等 `EntryKey` 防止网络重试产生重复记录。安装/升级表单引擎官方应用时,旧 `ChangeHistory` 按非空行迁入子表并保留旧物理列作滚动兼容;尚未安装该子表、旧库缺字段或迁移期间,后端应自动回退旧字段或仅更新 `ApiV8Code` 与 `UpdateTime`,不得因此阻断代码同步。
37
-
38
- 生成接口引擎代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;跨表事务、权限校验、状态机、金额/库存计算、复杂 `_Where` 条件等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
39
-
40
- <!-- /microi-progressive:chunk -->
41
- <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=d0bed55dcaa08fd84319107269643dd5aba5aadecf4f394c8ac55d80ab959677 -->
42
- ## 核心规则
43
-
44
- - 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
45
- - 全局对象 `V8` 是所有后端能力的入口
46
- - 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
47
- - 严格业务字段白名单先逐项排除本入口支持的宿主传输字段:固定 `ApiEngineKey / ApiAddress`、调用类型、设备和 HTTP 请求元数据;不得把整个下划线前缀视为安全字段,不解析 `_RawBody` 重写动作,也不从传输字段取授权。历史调试器的 `TestParam1` 仅兼容 null/undefined、最多 200 字符的字符串、有限数字或布尔值并立即丢弃;对象、数组、超长值和其它未知字段继续拒绝。真实 HTTP 与内部调用都须验收,普通岗位无初始化配置副作用,权限继续读取权威当前用户与目标租户。
48
- - `V8.Param` 中嵌套 JSON 的 `JObject/JArray` 可能是 Jint 宿主对象,`Array.isArray` 不一定成立。需要严格数组、布尔或结构校验时,在业务入口对有界业务参数使用 `JSON.parse(JSON.stringify(V8.Param || {}))` 转为纯 JSON,再执行原字段白名单、类型、大小与权限校验;不能把只有 `length` 的对象当数组。只规范化业务参数,不复制或信任客户端身份、`V8.CurrentUser`、`V8.DbTrans` 或 `V8.WF`;大文件继续使用专用文件通道。验收须同时覆盖真实 HTTP 宿主集合和离线 JavaScript 数组。
49
- - 通过 `V8.CurrentUser` 获取当前登录用户信息
50
- - 高精度 `decimal(p,s)` / 带小数位 `number(p,s)` 的金额、数量、换算率使用无分组、英文小数点的十进制字符串,避免先 `Number()` / `parseFloat()` 或浮点运算丢位。后端使用固定文化解析,拒绝逗号分组、本地化逗号小数、指数、非数字和越界;业务层仍须按字段约束精度、小数位、范围和权限。空值兼容不变,不能从舍入后的历史值重建精度或擅自回填。用真实 HTTP、数据库写后读与目标租户验收,不能把 CLR 参数绑定冒充数据库成功。
51
- - 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
52
- - 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
53
- - 服务端调用 FormEngine 默认**不触发**表单 V8 事件,加 `_InvokeType: 'Client'` 才触发
54
- - 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
55
-
56
- <!-- /microi-progressive:chunk -->
57
- <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=8a2aee7581fd589e15b219f2f79fdb442cb29adba667fc76e1e2e7a1f3bb1b43 -->
58
- ## 性能底线(必须自检)
59
-
60
- - 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
61
- - 禁止在 `for` / `while` / `forEach` / 嵌套循环中反复调用 `GetFormData`、`GetTableData`、`FromSql`、`ApiEngine.Run` 或外部 HTTP。先收集 Id/Key,用一次 `In` 查询或一条 JOIN/聚合 SQL 批量取回,再用对象字典映射。
62
- - 禁止用双重循环匹配两组列表。先把小表或关联表整理成 `{ id: row }`、`{ parentId: [] }` 这类 Map,再单循环组装结果。
63
- - 所有列表查询必须设置 `_SelectFields`,只取业务需要的字段;面向前端的列表必须分页或显式限制 `_PageSize`,不能一次拉全表。
64
- - 报表、统计、跨表汇总优先使用数据库聚合(`COUNT/SUM/GROUP BY/JOIN`)或一次批量查询后内存聚合,不能逐行查明细再累加。
65
- - 高频读取的系统配置、字典、菜单、字段、角色权限等静态数据要优先使用 `V8.Cache` 或平台已有缓存;写入后必须清理相关缓存。
66
- - 外部 HTTP、短信、翻译、文件处理等慢操作不要放在数据库事务内循环执行;能批量就批量,不能批量就拆成异步任务/队列。
67
- - 返回前做一次性能复核:数据库访问次数是否与数据量无关、是否避免 N+1 查询、是否有索引友好的 `_Where` 条件、是否不会因空参数导致全表扫描。
68
-
69
- ### 计量流水与分页审计
70
-
71
- - Token、积分、余额等计量必须由服务端在真实成功结果后记录,失败请求不得扣减;能够取得供应商 `usage` 时禁止用完整 JSON 字符数代替真实输入/输出 Token。
72
- - 余额扣减与流水新增必须在同一事务内完成,并锁定当前账户行,避免并发请求透支或出现“余额已扣但流水未写”。
73
- - 面向个人中心的流水接口必须按 `V8.CurrentUser.Id` 强制隔离,并返回 `PageIndex`、`PageSize`、`TotalCount`;列表只取页面需要的审计字段。
74
- - 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
75
-
76
- <!-- /microi-progressive:chunk -->
77
- <!-- microi-progressive:chunk id=v8-crud-api-003 sha256=a60257da3c153170b731b125c9b58614fe84030645c343688f70c9d060b0e0eb -->
78
- ## DosResult 状态码
79
-
80
- | Code | 含义 |
81
- |------|------|
82
- | `1` | 成功 |
83
- | `0` | 业务失败(自动回滚) |
84
- | `2` | `GetFormData` 数据不存在(特殊值,仍属正常查询)|
85
- | `1001` | Token 失效 |
86
- | `1002` | 身份验证失败 |
87
-
88
- ```javascript
89
- // GetFormData Code=2 的处理
90
- var r = V8.FormEngine.GetFormData('Order', { Id: V8.Param.id });
91
- if (r.Code === 2) return { Code: 0, Msg: '订单不存在' };
92
- if (r.Code !== 1) return r;
93
- // r.Data 才是真实数据
94
- ```
95
-
96
- <!-- /microi-progressive:chunk -->
97
- <!-- microi-progressive:chunk id=v8-crud-api-004 sha256=4efce43d196d67f3b6125747c645477442235b39ecf0ddfca325fb3bd1f444ae -->
98
- ## 全局日期函数
99
-
100
- ```javascript
101
- DateNow('yyyy-MM-dd HH:mm:ss') // 当前时间字符串
102
- DateFormat(new Date(), 'yyyy-MM-dd') // 格式化
103
- DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
104
- ```
105
-
106
- <!-- /microi-progressive:chunk -->
107
- <!-- microi-progressive:chunk id=v8-crud-api-005 sha256=f3d8f0628ddd51845fc700fe63bfa037480f131484c8238874d380cb05a89a92 -->
108
- ## 查询单条
109
-
110
- ```javascript
111
- if (!V8.Param.id) {
112
- return { Code: 0, Msg: 'id 不能为空' };
113
- }
114
-
115
- var result = V8.FormEngine.GetFormData('SysUser', {
116
- _Where: [['Id', '=', V8.Param.id]],
117
- _SelectFields: ['Id', 'Account', 'Name', 'Phone']
118
- });
119
- // 也可以用 Id 直接查:{ Id: 'xxx' }
120
-
121
- if (result.Code !== 1 || !result.Data) {
122
- return { Code: 0, Msg: '数据不存在' };
123
- }
124
-
125
- return { Code: 1, Data: result.Data };
126
- ```
127
-
128
- <!-- /microi-progressive:chunk -->
129
- <!-- microi-progressive:chunk id=v8-crud-api-006 sha256=b8ae0ea6ccd746994ea5fa74f4ae4e6163c1ffd09eb141d6fd5863d77d36f35b -->
130
- ## 新增
131
-
132
- ```javascript
133
- if (!V8.Param.Account || !V8.Param.Name) {
134
- return { Code: 0, Msg: '账号和姓名不能为空' };
135
- }
136
-
137
- // 检查唯一性
138
- var exist = V8.FormEngine.GetFormData('SysUser', {
139
- _Where: [['Account', '=', V8.Param.Account]]
140
- });
141
- if (exist.Code === 1 && exist.Data) {
142
- return { Code: 0, Msg: '账号已存在' };
143
- }
144
-
145
- var result = V8.FormEngine.AddFormData('SysUser', {
146
- // Id 不传会自动生成 GUID
147
- Account: V8.Param.Account,
148
- Name: V8.Param.Name,
149
- Phone: V8.Param.Phone || '',
150
- Status: 1
151
- });
152
- // result.Data 包含 Id, CreateTime, UserId 等自动生成字段
153
-
154
- return { Code: result.Code, Data: result.Data, Msg: result.Code === 1 ? '新增成功' : result.Msg };
155
- ```
156
-
157
- ### 批量新增
158
-
159
- ```javascript
160
- var addList = [];
161
- for (var i = 0; i < V8.Param.items.length; i++) {
162
- addList.push({
163
- FormEngineKey: 'SysUser', // 支持不同表混合批量
164
- Account: V8.Param.items[i].Account,
165
- Name: V8.Param.items[i].Name
166
- });
167
- }
168
- var result = V8.FormEngine.AddTableData(addList);
169
- ```
170
-
171
- <!-- /microi-progressive:chunk -->
172
- ## 详细参考路由(渐进披露)
173
-
174
- 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
175
-
176
- - [references/progressive-01-查询列表-分页.md](references/progressive-01-查询列表-分页.md):查询列表(分页);更新;删除;按条件批量操作;事务处理;请求内异步与后台处理;动态加字段(运行时改表结构);旧版 _Where 兼容
177
- - [references/progressive-02-where-条件语法速查.md](references/progressive-02-where-条件语法速查.md):_Where 条件语法速查;注意事项
178
- <!-- microi-progressive:end -->
1
+ ---
2
+ name: v8-crud-api
3
+ description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScript,涉及 V8.FormEngine Add/Upt/Del/GetTableData、DosResult 返回、事务和校验。
4
+ ---
5
+
6
+ > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
7
+
8
+ # Microi V8 CRUD API 接口引擎开发
9
+
10
+ 你正在开发 Microi 吾码平台的 V8 接口引擎。接口引擎是运行在服务端的 JavaScript 函数,通过 `V8.FormEngine` 操作数据库,通过 `V8.Result` 或 `return` 返回结果。
11
+
12
+ <!-- microi-progressive:begin -->
13
+ <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=522eba2beee1f0b0df087fe86f1ff70bc74b8e9f68a844a5bea1471389a0df22 -->
14
+ ## 本地优先与版本头(必做)
15
+
16
+ AI 本地开发接口引擎时,优先修改 `microi-v8-engine/<租户>/<项目>/接口引擎/.../*.js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。插件提示“本地和远端不一致”时,必须先读取本地与远端代码并合并有效差异,不能盲目用任一侧覆盖另一侧。
17
+
18
+ 每一次修改、上传、推送接口引擎代码,都必须维护文件顶部版本区域。版本号从 `v1.0.0` 开始;每次上传/推送/修改递增 1;补丁位和次版本位最大为 9 并向前进位(`v1.0.9 -> v1.1.0`、`v1.9.9 -> v2.0.0`、`v9.9.9 -> v10.0.0`)。代码头只写完整功能说明,不写修改历史、时间戳或 ChangeLog。推荐格式:
19
+
20
+ ```javascript
21
+ /*
22
+ * V8 ApiEngine
23
+ * ApiEngineKey: 示例接口引擎Key
24
+ * Version: v1.0.0
25
+ * 功能说明:
26
+ * - 完整说明该接口引擎负责的业务功能、输入参数、关键返回字段和重要副作用。
27
+ */
28
+ ```
29
+
30
+ 同步流程:`确认后端可达(不可达则自动启动 Microi.Server/Microi.net.Api/Microi.net.Api.csproj) -> 读取远端 -> 修改本地并递增语义版本头 -> JS 语法检查 -> 保存远端 -> 回读远端确认代码头 Version 与 sys_apiengine.Version 一致 -> 用 HTTP /apiengine/{key} + osclient Header 复测`。只用 MCP 保存成功不算完成,必须至少做回读或 HTTP 验证。普通 POST/PUT/PATCH/DELETE 禁止无脑追加 `--OsClient--...--`;该特殊路径仅保留给确实无法传 Header/Form/Query 的 GET/HEAD 或第三方回调场景。
31
+
32
+ 如果保存或回读时出现 `fetch failed`、`ECONNREFUSED`、`000 Failed to connect`、端口无人监听等服务不可达问题,不能提前中止。需要启动或重启本地 API 时,必须在 `Microi.Server/Microi.net.Api` 目录通过 VS Code 可见终端执行 `dotnet run --launch-profile Microi.net.Api`,让开发者能肉眼看到并手动停止;不要用隐藏后台 shell 启动长期占用端口的 API 进程。若工具当前无法打开可见终端,应先说明限制并让用户启动/重启后继续验证。涉及 PC 页面联调或 Playwright 时,`Microi.Client` 也必须使用可见终端执行:`npm run dev -- --host 0.0.0.0 --port 1988`。只有启动失败、依赖缺失、数据库连接失败或端口冲突无法处理时才报告阻塞。
33
+
34
+ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `DOTNET_ENVIRONMENT`,让 `Program.cs` 读取 `Microi.Server/Microi.net.Api/.microi-local` 并加载对应的 `appsettings.{Env}.json`。
35
+
36
+ 版本与历史同步规则:通过 MCP 或 VS Code 插件保存接口引擎时,必须同步写入 `sys_apiengine.Version`;新版平台把每次修改说明作为独立记录写入 `mci_apiengine_change_history`,表单中的“修改历史”使用 `TableChild` 展示,不再让客户端拼接或覆盖 `sys_apiengine.ChangeHistory` 多行文本。写入必须携带版本号与简明说明,并使用幂等 `EntryKey` 防止网络重试产生重复记录。安装/升级表单引擎官方应用时,旧 `ChangeHistory` 按非空行迁入子表并保留旧物理列作滚动兼容;尚未安装该子表、旧库缺字段或迁移期间,后端应自动回退旧字段或仅更新 `ApiV8Code` 与 `UpdateTime`,不得因此阻断代码同步。
37
+
38
+ 生成接口引擎代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;跨表事务、权限校验、状态机、金额/库存计算、复杂 `_Where` 条件等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
39
+
40
+ <!-- /microi-progressive:chunk -->
41
+ <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=d0bed55dcaa08fd84319107269643dd5aba5aadecf4f394c8ac55d80ab959677 -->
42
+ ## 核心规则
43
+
44
+ - 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
45
+ - 全局对象 `V8` 是所有后端能力的入口
46
+ - 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
47
+ - 严格业务字段白名单先逐项排除本入口支持的宿主传输字段:固定 `ApiEngineKey / ApiAddress`、调用类型、设备和 HTTP 请求元数据;不得把整个下划线前缀视为安全字段,不解析 `_RawBody` 重写动作,也不从传输字段取授权。历史调试器的 `TestParam1` 仅兼容 null/undefined、最多 200 字符的字符串、有限数字或布尔值并立即丢弃;对象、数组、超长值和其它未知字段继续拒绝。真实 HTTP 与内部调用都须验收,普通岗位无初始化配置副作用,权限继续读取权威当前用户与目标租户。
48
+ - `V8.Param` 中嵌套 JSON 的 `JObject/JArray` 可能是 Jint 宿主对象,`Array.isArray` 不一定成立。需要严格数组、布尔或结构校验时,在业务入口对有界业务参数使用 `JSON.parse(JSON.stringify(V8.Param || {}))` 转为纯 JSON,再执行原字段白名单、类型、大小与权限校验;不能把只有 `length` 的对象当数组。只规范化业务参数,不复制或信任客户端身份、`V8.CurrentUser`、`V8.DbTrans` 或 `V8.WF`;大文件继续使用专用文件通道。验收须同时覆盖真实 HTTP 宿主集合和离线 JavaScript 数组。
49
+ - 通过 `V8.CurrentUser` 获取当前登录用户信息
50
+ - 高精度 `decimal(p,s)` / 带小数位 `number(p,s)` 的金额、数量、换算率使用无分组、英文小数点的十进制字符串,避免先 `Number()` / `parseFloat()` 或浮点运算丢位。后端使用固定文化解析,拒绝逗号分组、本地化逗号小数、指数、非数字和越界;业务层仍须按字段约束精度、小数位、范围和权限。空值兼容不变,不能从舍入后的历史值重建精度或擅自回填。用真实 HTTP、数据库写后读与目标租户验收,不能把 CLR 参数绑定冒充数据库成功。
51
+ - 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
52
+ - 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
53
+ - 服务端调用 FormEngine 默认**不触发**表单 V8 事件,加 `_InvokeType: 'Client'` 才触发
54
+ - 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
55
+
56
+ <!-- /microi-progressive:chunk -->
57
+ <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=8a2aee7581fd589e15b219f2f79fdb442cb29adba667fc76e1e2e7a1f3bb1b43 -->
58
+ ## 性能底线(必须自检)
59
+
60
+ - 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
61
+ - 禁止在 `for` / `while` / `forEach` / 嵌套循环中反复调用 `GetFormData`、`GetTableData`、`FromSql`、`ApiEngine.Run` 或外部 HTTP。先收集 Id/Key,用一次 `In` 查询或一条 JOIN/聚合 SQL 批量取回,再用对象字典映射。
62
+ - 禁止用双重循环匹配两组列表。先把小表或关联表整理成 `{ id: row }`、`{ parentId: [] }` 这类 Map,再单循环组装结果。
63
+ - 所有列表查询必须设置 `_SelectFields`,只取业务需要的字段;面向前端的列表必须分页或显式限制 `_PageSize`,不能一次拉全表。
64
+ - 报表、统计、跨表汇总优先使用数据库聚合(`COUNT/SUM/GROUP BY/JOIN`)或一次批量查询后内存聚合,不能逐行查明细再累加。
65
+ - 高频读取的系统配置、字典、菜单、字段、角色权限等静态数据要优先使用 `V8.Cache` 或平台已有缓存;写入后必须清理相关缓存。
66
+ - 外部 HTTP、短信、翻译、文件处理等慢操作不要放在数据库事务内循环执行;能批量就批量,不能批量就拆成异步任务/队列。
67
+ - 返回前做一次性能复核:数据库访问次数是否与数据量无关、是否避免 N+1 查询、是否有索引友好的 `_Where` 条件、是否不会因空参数导致全表扫描。
68
+
69
+ ### 计量流水与分页审计
70
+
71
+ - Token、积分、余额等计量必须由服务端在真实成功结果后记录,失败请求不得扣减;能够取得供应商 `usage` 时禁止用完整 JSON 字符数代替真实输入/输出 Token。
72
+ - 余额扣减与流水新增必须在同一事务内完成,并锁定当前账户行,避免并发请求透支或出现“余额已扣但流水未写”。
73
+ - 面向个人中心的流水接口必须按 `V8.CurrentUser.Id` 强制隔离,并返回 `PageIndex`、`PageSize`、`TotalCount`;列表只取页面需要的审计字段。
74
+ - 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
75
+
76
+ <!-- /microi-progressive:chunk -->
77
+ <!-- microi-progressive:chunk id=v8-crud-api-003 sha256=a60257da3c153170b731b125c9b58614fe84030645c343688f70c9d060b0e0eb -->
78
+ ## DosResult 状态码
79
+
80
+ | Code | 含义 |
81
+ |------|------|
82
+ | `1` | 成功 |
83
+ | `0` | 业务失败(自动回滚) |
84
+ | `2` | `GetFormData` 数据不存在(特殊值,仍属正常查询)|
85
+ | `1001` | Token 失效 |
86
+ | `1002` | 身份验证失败 |
87
+
88
+ ```javascript
89
+ // GetFormData Code=2 的处理
90
+ var r = V8.FormEngine.GetFormData('Order', { Id: V8.Param.id });
91
+ if (r.Code === 2) return { Code: 0, Msg: '订单不存在' };
92
+ if (r.Code !== 1) return r;
93
+ // r.Data 才是真实数据
94
+ ```
95
+
96
+ <!-- /microi-progressive:chunk -->
97
+ <!-- microi-progressive:chunk id=v8-crud-api-004 sha256=4efce43d196d67f3b6125747c645477442235b39ecf0ddfca325fb3bd1f444ae -->
98
+ ## 全局日期函数
99
+
100
+ ```javascript
101
+ DateNow('yyyy-MM-dd HH:mm:ss') // 当前时间字符串
102
+ DateFormat(new Date(), 'yyyy-MM-dd') // 格式化
103
+ DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
104
+ ```
105
+
106
+ <!-- /microi-progressive:chunk -->
107
+ <!-- microi-progressive:chunk id=v8-crud-api-005 sha256=f3d8f0628ddd51845fc700fe63bfa037480f131484c8238874d380cb05a89a92 -->
108
+ ## 查询单条
109
+
110
+ ```javascript
111
+ if (!V8.Param.id) {
112
+ return { Code: 0, Msg: 'id 不能为空' };
113
+ }
114
+
115
+ var result = V8.FormEngine.GetFormData('SysUser', {
116
+ _Where: [['Id', '=', V8.Param.id]],
117
+ _SelectFields: ['Id', 'Account', 'Name', 'Phone']
118
+ });
119
+ // 也可以用 Id 直接查:{ Id: 'xxx' }
120
+
121
+ if (result.Code !== 1 || !result.Data) {
122
+ return { Code: 0, Msg: '数据不存在' };
123
+ }
124
+
125
+ return { Code: 1, Data: result.Data };
126
+ ```
127
+
128
+ <!-- /microi-progressive:chunk -->
129
+ <!-- microi-progressive:chunk id=v8-crud-api-006 sha256=b8ae0ea6ccd746994ea5fa74f4ae4e6163c1ffd09eb141d6fd5863d77d36f35b -->
130
+ ## 新增
131
+
132
+ ```javascript
133
+ if (!V8.Param.Account || !V8.Param.Name) {
134
+ return { Code: 0, Msg: '账号和姓名不能为空' };
135
+ }
136
+
137
+ // 检查唯一性
138
+ var exist = V8.FormEngine.GetFormData('SysUser', {
139
+ _Where: [['Account', '=', V8.Param.Account]]
140
+ });
141
+ if (exist.Code === 1 && exist.Data) {
142
+ return { Code: 0, Msg: '账号已存在' };
143
+ }
144
+
145
+ var result = V8.FormEngine.AddFormData('SysUser', {
146
+ // Id 不传会自动生成 GUID
147
+ Account: V8.Param.Account,
148
+ Name: V8.Param.Name,
149
+ Phone: V8.Param.Phone || '',
150
+ Status: 1
151
+ });
152
+ // result.Data 包含 Id, CreateTime, UserId 等自动生成字段
153
+
154
+ return { Code: result.Code, Data: result.Data, Msg: result.Code === 1 ? '新增成功' : result.Msg };
155
+ ```
156
+
157
+ ### 批量新增
158
+
159
+ ```javascript
160
+ var addList = [];
161
+ for (var i = 0; i < V8.Param.items.length; i++) {
162
+ addList.push({
163
+ FormEngineKey: 'SysUser', // 支持不同表混合批量
164
+ Account: V8.Param.items[i].Account,
165
+ Name: V8.Param.items[i].Name
166
+ });
167
+ }
168
+ var result = V8.FormEngine.AddTableData(addList);
169
+ ```
170
+
171
+ <!-- /microi-progressive:chunk -->
172
+ ## 详细参考路由(渐进披露)
173
+
174
+ 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
175
+
176
+ - [references/progressive-01-查询列表-分页.md](references/progressive-01-查询列表-分页.md):查询列表(分页);更新;删除;按条件批量操作;事务处理;请求内异步与后台处理;动态加字段(运行时改表结构);旧版 _Where 兼容
177
+ - [references/progressive-02-where-条件语法速查.md](references/progressive-02-where-条件语法速查.md):_Where 条件语法速查;注意事项
178
+ <!-- microi-progressive:end -->