@microi.net/cli 5.7.7 → 5.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +6 -6
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-codex-stdio-adapter.js +0 -0
- package/scripts/mcp-server.js +102 -101
- package/scripts/microi-cli.js +57 -57
- package/scripts/microi-codex-broker.js +450 -450
- package/scripts/microi-codex-router.js +0 -0
- package/scripts/microi-skills.meta.json +366 -366
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +27 -27
- package/skills/README.md +286 -286
- package/skills/ai-engine/SKILL.md +265 -265
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +392 -396
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +90 -90
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +78 -78
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +171 -172
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +155 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +102 -106
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +235 -240
- 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
- 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
- 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
- package/skills/microi-codex/SKILL.md +75 -75
- package/skills/microi-codex-installer/SKILL.md +225 -223
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +107 -111
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/references/deployment-matrix.md +101 -101
- package/skills/microi-docs-coverage/references/capability-map.md +0 -1
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +226 -226
- package/skills/microi-form-engine/references/component-catalog.md +216 -216
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +205 -205
- 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
- package/skills/microi-frontend-sdk/SKILL.md +188 -188
- 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
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +322 -323
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +181 -181
- 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
- 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
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/references/acceptance.md +49 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +39 -39
- package/skills/microi-system-delivery/SKILL.md +134 -134
- 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
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +189 -189
- package/skills/microi-ui/SKILL.md +174 -174
- 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
- package/skills/microi-uniapp-frontend/SKILL.md +193 -193
- 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
- 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
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +237 -250
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +180 -191
- 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
- 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
- package/skills/performance-testing/SKILL.md +221 -221
- package/skills/playwright-e2e/SKILL.md +197 -197
- 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
- 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
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +238 -238
- package/skills/system-observability/references/memory-incident-triage.md +70 -70
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +191 -191
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +198 -198
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- 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
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +137 -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
- 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
- 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
- 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
- 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
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +117 -117
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +155 -155
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +103 -103
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-cache-pattern/SKILL.md +306 -306
- package/skills/v8-crud-api/SKILL.md +175 -175
- 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
- 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
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +209 -209
- 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
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- 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
- package/skills/v8-file-upload/SKILL.md +256 -263
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +101 -101
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +150 -150
- package/skills/v8-formengine-http/SKILL.md +219 -219
- package/skills/v8-frontend-events/SKILL.md +178 -178
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +246 -246
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- 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
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +180 -180
- 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
- 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
- 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
- package/skills/v8-mongodb/SKILL.md +192 -192
- package/skills/v8-mq-mqtt/SKILL.md +175 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +219 -219
- package/skills/v8-security/SKILL.md +168 -168
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +198 -198
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -158
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +144 -144
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +197 -197
- 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
- package/skills/v8-tcp-integration/SKILL.md +147 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +90 -90
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +216 -243
- 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
- package/skills/vision-engine/SKILL.md +159 -159
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +261 -261
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +208 -208
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +216 -216
- 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,175 +1,175 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: v8-crud-api
|
|
3
|
-
description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScript,涉及 V8.FormEngine Add/Upt/Del/GetTableData、DosResult 返回、事务和校验。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
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=d385cc7f9c0048ae1e2263e922ec33a97e8a321bcb88df4dc72a07c269fe1829 -->
|
|
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=38155b3a9dedd994309b15913a160a6647ca4c4a7200546268fe0f5e321c4575 -->
|
|
42
|
-
## 核心规则
|
|
43
|
-
|
|
44
|
-
- 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
|
|
45
|
-
- 全局对象 `V8` 是所有后端能力的入口
|
|
46
|
-
- 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
|
|
47
|
-
- 通过 `V8.CurrentUser` 获取当前登录用户信息
|
|
48
|
-
- 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
|
|
49
|
-
- 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
|
|
50
|
-
- 服务端调用 FormEngine 默认**不触发**表单 V8 事件,加 `_InvokeType: 'Client'` 才触发
|
|
51
|
-
- 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
|
|
52
|
-
|
|
53
|
-
<!-- /microi-progressive:chunk -->
|
|
54
|
-
<!-- microi-progressive:chunk id=v8-crud-api-002 sha256=b1ec527e9a5e97b93ed9d59fdd9cd1dfae74149ab438d1a4a9e3b198976bb6a6 -->
|
|
55
|
-
## 性能底线(必须自检)
|
|
56
|
-
|
|
57
|
-
- 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
|
|
58
|
-
- 禁止在 `for` / `while` / `forEach` / 嵌套循环中反复调用 `GetFormData`、`GetTableData`、`FromSql`、`ApiEngine.Run` 或外部 HTTP。先收集 Id/Key,用一次 `In` 查询或一条 JOIN/聚合 SQL 批量取回,再用对象字典映射。
|
|
59
|
-
- 禁止用双重循环匹配两组列表。先把小表或关联表整理成 `{ id: row }`、`{ parentId: [] }` 这类 Map,再单循环组装结果。
|
|
60
|
-
- 所有列表查询必须设置 `_SelectFields`,只取业务需要的字段;面向前端的列表必须分页或显式限制 `_PageSize`,不能一次拉全表。
|
|
61
|
-
- 报表、统计、跨表汇总优先使用数据库聚合(`COUNT/SUM/GROUP BY/JOIN`)或一次批量查询后内存聚合,不能逐行查明细再累加。
|
|
62
|
-
- 高频读取的系统配置、字典、菜单、字段、角色权限等静态数据要优先使用 `V8.Cache` 或平台已有缓存;写入后必须清理相关缓存。
|
|
63
|
-
- 外部 HTTP、短信、翻译、文件处理等慢操作不要放在数据库事务内循环执行;能批量就批量,不能批量就拆成异步任务/队列。
|
|
64
|
-
- 返回前做一次性能复核:数据库访问次数是否与数据量无关、是否避免 N+1 查询、是否有索引友好的 `_Where` 条件、是否不会因空参数导致全表扫描。
|
|
65
|
-
|
|
66
|
-
### 计量流水与分页审计
|
|
67
|
-
|
|
68
|
-
- Token、积分、余额等计量必须由服务端在真实成功结果后记录,失败请求不得扣减;能够取得供应商 `usage` 时禁止用完整 JSON 字符数代替真实输入/输出 Token。
|
|
69
|
-
- 余额扣减与流水新增必须在同一事务内完成,并锁定当前账户行,避免并发请求透支或出现“余额已扣但流水未写”。
|
|
70
|
-
- 面向个人中心的流水接口必须按 `V8.CurrentUser.Id` 强制隔离,并返回 `PageIndex`、`PageSize`、`TotalCount`;列表只取页面需要的审计字段。
|
|
71
|
-
- 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
|
|
72
|
-
|
|
73
|
-
<!-- /microi-progressive:chunk -->
|
|
74
|
-
<!-- microi-progressive:chunk id=v8-crud-api-003 sha256=d46768bbaaf8b2ebfdd38e09d11e886b135cb65e78984dbfa67d75ec5f947175 -->
|
|
75
|
-
## DosResult 状态码
|
|
76
|
-
|
|
77
|
-
| Code | 含义 |
|
|
78
|
-
|------|------|
|
|
79
|
-
| `1` | 成功 |
|
|
80
|
-
| `0` | 业务失败(自动回滚) |
|
|
81
|
-
| `2` | `GetFormData` 数据不存在(特殊值,仍属正常查询)|
|
|
82
|
-
| `1001` | Token 失效 |
|
|
83
|
-
| `1002` | 身份验证失败 |
|
|
84
|
-
|
|
85
|
-
```javascript
|
|
86
|
-
// GetFormData Code=2 的处理
|
|
87
|
-
var r = V8.FormEngine.GetFormData('Order', { Id: V8.Param.id });
|
|
88
|
-
if (r.Code === 2) return { Code: 0, Msg: '订单不存在' };
|
|
89
|
-
if (r.Code !== 1) return r;
|
|
90
|
-
// r.Data 才是真实数据
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
<!-- /microi-progressive:chunk -->
|
|
94
|
-
<!-- microi-progressive:chunk id=v8-crud-api-004 sha256=6d58584cabd1659ae3af6cbddb797df2c0844c99fd8d2627d02a9c0eae98e8c2 -->
|
|
95
|
-
## 全局日期函数
|
|
96
|
-
|
|
97
|
-
```javascript
|
|
98
|
-
DateNow('yyyy-MM-dd HH:mm:ss') // 当前时间字符串
|
|
99
|
-
DateFormat(new Date(), 'yyyy-MM-dd') // 格式化
|
|
100
|
-
DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
<!-- /microi-progressive:chunk -->
|
|
104
|
-
<!-- microi-progressive:chunk id=v8-crud-api-005 sha256=35220022799bbed7f9b3d82fe14dc0855aa8f77d0640ac411c61d222d02b0eda -->
|
|
105
|
-
## 查询单条
|
|
106
|
-
|
|
107
|
-
```javascript
|
|
108
|
-
if (!V8.Param.id) {
|
|
109
|
-
return { Code: 0, Msg: 'id 不能为空' };
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
var result = V8.FormEngine.GetFormData('SysUser', {
|
|
113
|
-
_Where: [['Id', '=', V8.Param.id]],
|
|
114
|
-
_SelectFields: ['Id', 'Account', 'Name', 'Phone']
|
|
115
|
-
});
|
|
116
|
-
// 也可以用 Id 直接查:{ Id: 'xxx' }
|
|
117
|
-
|
|
118
|
-
if (result.Code !== 1 || !result.Data) {
|
|
119
|
-
return { Code: 0, Msg: '数据不存在' };
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return { Code: 1, Data: result.Data };
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
<!-- /microi-progressive:chunk -->
|
|
126
|
-
<!-- microi-progressive:chunk id=v8-crud-api-006 sha256=510588ad14503caff0a92c614f0e7453bdd343a1e22711c6c5a2b3f8893b5a8d -->
|
|
127
|
-
## 新增
|
|
128
|
-
|
|
129
|
-
```javascript
|
|
130
|
-
if (!V8.Param.Account || !V8.Param.Name) {
|
|
131
|
-
return { Code: 0, Msg: '账号和姓名不能为空' };
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
// 检查唯一性
|
|
135
|
-
var exist = V8.FormEngine.GetFormData('SysUser', {
|
|
136
|
-
_Where: [['Account', '=', V8.Param.Account]]
|
|
137
|
-
});
|
|
138
|
-
if (exist.Code === 1 && exist.Data) {
|
|
139
|
-
return { Code: 0, Msg: '账号已存在' };
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
var result = V8.FormEngine.AddFormData('SysUser', {
|
|
143
|
-
// Id 不传会自动生成 GUID
|
|
144
|
-
Account: V8.Param.Account,
|
|
145
|
-
Name: V8.Param.Name,
|
|
146
|
-
Phone: V8.Param.Phone || '',
|
|
147
|
-
Status: 1
|
|
148
|
-
});
|
|
149
|
-
// result.Data 包含 Id, CreateTime, UserId 等自动生成字段
|
|
150
|
-
|
|
151
|
-
return { Code: result.Code, Data: result.Data, Msg: result.Code === 1 ? '新增成功' : result.Msg };
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
### 批量新增
|
|
155
|
-
|
|
156
|
-
```javascript
|
|
157
|
-
var addList = [];
|
|
158
|
-
for (var i = 0; i < V8.Param.items.length; i++) {
|
|
159
|
-
addList.push({
|
|
160
|
-
FormEngineKey: 'SysUser', // 支持不同表混合批量
|
|
161
|
-
Account: V8.Param.items[i].Account,
|
|
162
|
-
Name: V8.Param.items[i].Name
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
var result = V8.FormEngine.AddTableData(addList);
|
|
166
|
-
```
|
|
167
|
-
|
|
168
|
-
<!-- /microi-progressive:chunk -->
|
|
169
|
-
## 详细参考路由(渐进披露)
|
|
170
|
-
|
|
171
|
-
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
172
|
-
|
|
173
|
-
- [references/progressive-01-查询列表-分页.md](references/progressive-01-查询列表-分页.md):查询列表(分页);更新;删除;按条件批量操作;事务处理;请求内异步与后台处理;动态加字段(运行时改表结构);旧版 _Where 兼容
|
|
174
|
-
- [references/progressive-02-where-条件语法速查.md](references/progressive-02-where-条件语法速查.md):_Where 条件语法速查;注意事项
|
|
175
|
-
<!-- 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
|
+
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
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=d385cc7f9c0048ae1e2263e922ec33a97e8a321bcb88df4dc72a07c269fe1829 -->
|
|
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=38155b3a9dedd994309b15913a160a6647ca4c4a7200546268fe0f5e321c4575 -->
|
|
42
|
+
## 核心规则
|
|
43
|
+
|
|
44
|
+
- 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
|
|
45
|
+
- 全局对象 `V8` 是所有后端能力的入口
|
|
46
|
+
- 通过 `V8.Param` 获取前端传入的参数(URL参数 / form-data / payload-json)
|
|
47
|
+
- 通过 `V8.CurrentUser` 获取当前登录用户信息
|
|
48
|
+
- 返回结果统一格式:`{ Code: 1, Data: any, Msg: '成功' }`
|
|
49
|
+
- 所有 FormEngine 方法在服务器端支持第三个参数传入 `V8.DbTrans`(事务对象)
|
|
50
|
+
- 服务端调用 FormEngine 默认**不触发**表单 V8 事件,加 `_InvokeType: 'Client'` 才触发
|
|
51
|
+
- 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
|
|
52
|
+
|
|
53
|
+
<!-- /microi-progressive:chunk -->
|
|
54
|
+
<!-- microi-progressive:chunk id=v8-crud-api-002 sha256=b1ec527e9a5e97b93ed9d59fdd9cd1dfae74149ab438d1a4a9e3b198976bb6a6 -->
|
|
55
|
+
## 性能底线(必须自检)
|
|
56
|
+
|
|
57
|
+
- 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。
|
|
58
|
+
- 禁止在 `for` / `while` / `forEach` / 嵌套循环中反复调用 `GetFormData`、`GetTableData`、`FromSql`、`ApiEngine.Run` 或外部 HTTP。先收集 Id/Key,用一次 `In` 查询或一条 JOIN/聚合 SQL 批量取回,再用对象字典映射。
|
|
59
|
+
- 禁止用双重循环匹配两组列表。先把小表或关联表整理成 `{ id: row }`、`{ parentId: [] }` 这类 Map,再单循环组装结果。
|
|
60
|
+
- 所有列表查询必须设置 `_SelectFields`,只取业务需要的字段;面向前端的列表必须分页或显式限制 `_PageSize`,不能一次拉全表。
|
|
61
|
+
- 报表、统计、跨表汇总优先使用数据库聚合(`COUNT/SUM/GROUP BY/JOIN`)或一次批量查询后内存聚合,不能逐行查明细再累加。
|
|
62
|
+
- 高频读取的系统配置、字典、菜单、字段、角色权限等静态数据要优先使用 `V8.Cache` 或平台已有缓存;写入后必须清理相关缓存。
|
|
63
|
+
- 外部 HTTP、短信、翻译、文件处理等慢操作不要放在数据库事务内循环执行;能批量就批量,不能批量就拆成异步任务/队列。
|
|
64
|
+
- 返回前做一次性能复核:数据库访问次数是否与数据量无关、是否避免 N+1 查询、是否有索引友好的 `_Where` 条件、是否不会因空参数导致全表扫描。
|
|
65
|
+
|
|
66
|
+
### 计量流水与分页审计
|
|
67
|
+
|
|
68
|
+
- Token、积分、余额等计量必须由服务端在真实成功结果后记录,失败请求不得扣减;能够取得供应商 `usage` 时禁止用完整 JSON 字符数代替真实输入/输出 Token。
|
|
69
|
+
- 余额扣减与流水新增必须在同一事务内完成,并锁定当前账户行,避免并发请求透支或出现“余额已扣但流水未写”。
|
|
70
|
+
- 面向个人中心的流水接口必须按 `V8.CurrentUser.Id` 强制隔离,并返回 `PageIndex`、`PageSize`、`TotalCount`;列表只取页面需要的审计字段。
|
|
71
|
+
- 为便于用户核对,可以保存经过空白归一化的用户输入短摘要;摘要按 Unicode 文本元素截取,不能截断 emoji 或代理对,也不要把完整请求 JSON 当摘要。
|
|
72
|
+
|
|
73
|
+
<!-- /microi-progressive:chunk -->
|
|
74
|
+
<!-- microi-progressive:chunk id=v8-crud-api-003 sha256=d46768bbaaf8b2ebfdd38e09d11e886b135cb65e78984dbfa67d75ec5f947175 -->
|
|
75
|
+
## DosResult 状态码
|
|
76
|
+
|
|
77
|
+
| Code | 含义 |
|
|
78
|
+
|------|------|
|
|
79
|
+
| `1` | 成功 |
|
|
80
|
+
| `0` | 业务失败(自动回滚) |
|
|
81
|
+
| `2` | `GetFormData` 数据不存在(特殊值,仍属正常查询)|
|
|
82
|
+
| `1001` | Token 失效 |
|
|
83
|
+
| `1002` | 身份验证失败 |
|
|
84
|
+
|
|
85
|
+
```javascript
|
|
86
|
+
// GetFormData Code=2 的处理
|
|
87
|
+
var r = V8.FormEngine.GetFormData('Order', { Id: V8.Param.id });
|
|
88
|
+
if (r.Code === 2) return { Code: 0, Msg: '订单不存在' };
|
|
89
|
+
if (r.Code !== 1) return r;
|
|
90
|
+
// r.Data 才是真实数据
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
<!-- /microi-progressive:chunk -->
|
|
94
|
+
<!-- microi-progressive:chunk id=v8-crud-api-004 sha256=6d58584cabd1659ae3af6cbddb797df2c0844c99fd8d2627d02a9c0eae98e8c2 -->
|
|
95
|
+
## 全局日期函数
|
|
96
|
+
|
|
97
|
+
```javascript
|
|
98
|
+
DateNow('yyyy-MM-dd HH:mm:ss') // 当前时间字符串
|
|
99
|
+
DateFormat(new Date(), 'yyyy-MM-dd') // 格式化
|
|
100
|
+
DateAdd(new Date(), 'd', 7, 'yyyy-MM-dd') // 加减(s/m/h/d/w/q/M/y)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
<!-- /microi-progressive:chunk -->
|
|
104
|
+
<!-- microi-progressive:chunk id=v8-crud-api-005 sha256=35220022799bbed7f9b3d82fe14dc0855aa8f77d0640ac411c61d222d02b0eda -->
|
|
105
|
+
## 查询单条
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
if (!V8.Param.id) {
|
|
109
|
+
return { Code: 0, Msg: 'id 不能为空' };
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
var result = V8.FormEngine.GetFormData('SysUser', {
|
|
113
|
+
_Where: [['Id', '=', V8.Param.id]],
|
|
114
|
+
_SelectFields: ['Id', 'Account', 'Name', 'Phone']
|
|
115
|
+
});
|
|
116
|
+
// 也可以用 Id 直接查:{ Id: 'xxx' }
|
|
117
|
+
|
|
118
|
+
if (result.Code !== 1 || !result.Data) {
|
|
119
|
+
return { Code: 0, Msg: '数据不存在' };
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
return { Code: 1, Data: result.Data };
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
<!-- /microi-progressive:chunk -->
|
|
126
|
+
<!-- microi-progressive:chunk id=v8-crud-api-006 sha256=510588ad14503caff0a92c614f0e7453bdd343a1e22711c6c5a2b3f8893b5a8d -->
|
|
127
|
+
## 新增
|
|
128
|
+
|
|
129
|
+
```javascript
|
|
130
|
+
if (!V8.Param.Account || !V8.Param.Name) {
|
|
131
|
+
return { Code: 0, Msg: '账号和姓名不能为空' };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// 检查唯一性
|
|
135
|
+
var exist = V8.FormEngine.GetFormData('SysUser', {
|
|
136
|
+
_Where: [['Account', '=', V8.Param.Account]]
|
|
137
|
+
});
|
|
138
|
+
if (exist.Code === 1 && exist.Data) {
|
|
139
|
+
return { Code: 0, Msg: '账号已存在' };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
var result = V8.FormEngine.AddFormData('SysUser', {
|
|
143
|
+
// Id 不传会自动生成 GUID
|
|
144
|
+
Account: V8.Param.Account,
|
|
145
|
+
Name: V8.Param.Name,
|
|
146
|
+
Phone: V8.Param.Phone || '',
|
|
147
|
+
Status: 1
|
|
148
|
+
});
|
|
149
|
+
// result.Data 包含 Id, CreateTime, UserId 等自动生成字段
|
|
150
|
+
|
|
151
|
+
return { Code: result.Code, Data: result.Data, Msg: result.Code === 1 ? '新增成功' : result.Msg };
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 批量新增
|
|
155
|
+
|
|
156
|
+
```javascript
|
|
157
|
+
var addList = [];
|
|
158
|
+
for (var i = 0; i < V8.Param.items.length; i++) {
|
|
159
|
+
addList.push({
|
|
160
|
+
FormEngineKey: 'SysUser', // 支持不同表混合批量
|
|
161
|
+
Account: V8.Param.items[i].Account,
|
|
162
|
+
Name: V8.Param.items[i].Name
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
var result = V8.FormEngine.AddTableData(addList);
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
<!-- /microi-progressive:chunk -->
|
|
169
|
+
## 详细参考路由(渐进披露)
|
|
170
|
+
|
|
171
|
+
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
172
|
+
|
|
173
|
+
- [references/progressive-01-查询列表-分页.md](references/progressive-01-查询列表-分页.md):查询列表(分页);更新;删除;按条件批量操作;事务处理;请求内异步与后台处理;动态加字段(运行时改表结构);旧版 _Where 兼容
|
|
174
|
+
- [references/progressive-02-where-条件语法速查.md](references/progressive-02-where-条件语法速查.md):_Where 条件语法速查;注意事项
|
|
175
|
+
<!-- microi-progressive:end -->
|