@microi.net/cli 5.7.8 → 5.8.0
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 +113 -112
- 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 +364 -364
- package/skills/.microi-skills-version.json +2 -2
- 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 +396 -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 +172 -172
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -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 +106 -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 +237 -237
- 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 +72 -70
- 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 +108 -108
- 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/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 +323 -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 +250 -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 +182 -182
- 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 +263 -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 +176 -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 +243 -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,10 +1,10 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: microi-form-engine
|
|
3
|
-
description: Microi 表单引擎设计与控件配置指南。用于创建或修改 diy_table、diy_field、表单组件、字段属性、选项/SQL/数据源引擎数据源、子表、关联表单、定制组件、表单布局和字段事件。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
-
|
|
1
|
+
---
|
|
2
|
+
name: microi-form-engine
|
|
3
|
+
description: Microi 表单引擎设计与控件配置指南。用于创建或修改 diy_table、diy_field、表单组件、字段属性、选项/SQL/数据源引擎数据源、子表、关联表单、定制组件、表单布局和字段事件。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
+
|
|
8
8
|
# Microi 表单引擎设计
|
|
9
9
|
|
|
10
10
|
## 表单设计器生成 Vue 3 代码
|
|
@@ -12,23 +12,23 @@ description: Microi 表单引擎设计与控件配置指南。用于创建或修
|
|
|
12
12
|
保留现有 `Diy` 动态渲染;需要每表独立页面时,在保存设计后使用【生成 Vue 3 代码】。生成器产生 `src/pages/Form_表名.vue`,源码归当前租户 `microi-generated-forms` 微服务私有项目,AI 应用工作台可继续编辑。Vite 构建并发布运行产物后,模块菜单用 `CodeForm`,同时绑定原 `DiyTableId` 与对应微服务路由。生成页经前端 V8 SDK 传 `_SysMenuId` 调用 FormEngine,权限及后端事件继续由服务端校验。
|
|
13
13
|
|
|
14
14
|
生成器遇到复杂控件、动态数据源、前端 V8 事件/模板或人工修改过的目标源码会停止并显示原因;不要静默删字段或覆盖定制代码。设计器再次变更后重新生成草稿,在源码工作台审阅和合并,再构建发布。源码保存不等于微服务已构建、菜单已切换或目标租户已安装。
|
|
15
|
-
|
|
16
|
-
表单引擎同时驱动数据模型、表单、列表、模块、接口配置和工作流配置。处理“新增字段”
|
|
17
|
-
不能只做物理 `ALTER TABLE`:必须让 `diy_table`、`diy_field`、物理列、组件
|
|
18
|
-
Config/Data、菜单查询列与缓存保持一致。
|
|
19
|
-
|
|
20
|
-
平台创建 DIY 表时会自动加入 `DiyCommon.FixedDiyField` 定义的 Id、创建/更新时间、
|
|
21
|
-
创建人、租户等固定字段。业务 Manifest 不重复声明这些字段;读取实时 Schema 或离线快照时也不能
|
|
22
|
-
因为 `_Fields` 只列出可配置字段,就误判物理表缺少固定字段。
|
|
23
|
-
|
|
24
|
-
## 必读参考
|
|
25
|
-
|
|
26
|
-
- 控件完整目录、推荐物理类型和选择规则:`references/component-catalog.md`
|
|
27
|
-
- 数据源、字段属性、事件与定制组件:`references/data-source-events.md`
|
|
28
|
-
- 表单分组与宽度:`../microi-form-layout/SKILL.md`
|
|
29
|
-
- 后端表单事件:`../v8-table-event/SKILL.md`
|
|
30
|
-
- 前端字段事件:`../v8-frontend-events/SKILL.md`
|
|
31
|
-
|
|
15
|
+
|
|
16
|
+
表单引擎同时驱动数据模型、表单、列表、模块、接口配置和工作流配置。处理“新增字段”
|
|
17
|
+
不能只做物理 `ALTER TABLE`:必须让 `diy_table`、`diy_field`、物理列、组件
|
|
18
|
+
Config/Data、菜单查询列与缓存保持一致。
|
|
19
|
+
|
|
20
|
+
平台创建 DIY 表时会自动加入 `DiyCommon.FixedDiyField` 定义的 Id、创建/更新时间、
|
|
21
|
+
创建人、租户等固定字段。业务 Manifest 不重复声明这些字段;读取实时 Schema 或离线快照时也不能
|
|
22
|
+
因为 `_Fields` 只列出可配置字段,就误判物理表缺少固定字段。
|
|
23
|
+
|
|
24
|
+
## 必读参考
|
|
25
|
+
|
|
26
|
+
- 控件完整目录、推荐物理类型和选择规则:`references/component-catalog.md`
|
|
27
|
+
- 数据源、字段属性、事件与定制组件:`references/data-source-events.md`
|
|
28
|
+
- 表单分组与宽度:`../microi-form-layout/SKILL.md`
|
|
29
|
+
- 后端表单事件:`../v8-table-event/SKILL.md`
|
|
30
|
+
- 前端字段事件:`../v8-frontend-events/SKILL.md`
|
|
31
|
+
|
|
32
32
|
## 标准工作流
|
|
33
33
|
|
|
34
34
|
### 物理字段允许为空(强制)
|
|
@@ -36,18 +36,18 @@ Config/Data、菜单查询列与缓存保持一致。
|
|
|
36
36
|
除作为主键的 `Id` 外,通过 MCP、表单设计器、FormEngine、V8 或应用包新增、修改的普通字段,数据库列一律允许 `NULL`。`NotEmpty` 等业务必填要求只作用于表单/服务端校验,不能生成 `NOT NULL`。默认值和是否允许为空是两项独立属性;兼容旧列时只放宽可空约束,保留类型、有效默认值、字符集、排序规则、注释、索引和历史数据,不以补零/空串替代结构修复。
|
|
37
37
|
|
|
38
38
|
MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 1364;移除普通标量列的旧默认值应使用 `SET DEFAULT NULL`。`IS_NULLABLE=YES` 和 `COLUMN_DEFAULT=NULL` 不足以证明可省略字段,需要通过 `SELECT DEFAULT(列) FROM 表 LIMIT 0` 验证。TEXT/BLOB 的缺失默认标志应保留完整列定义执行 `MODIFY COLUMN` 修复,不能对它们使用 `ALTER COLUMN SET DEFAULT NULL`。
|
|
39
|
-
|
|
40
|
-
1. 先通过 `microi_get_db_schema` 读取目标租户的真实表、字段和菜单。
|
|
41
|
-
2. 从当前源码
|
|
42
|
-
`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json`
|
|
43
|
-
核对控件名;官网页面可能含历史控件。
|
|
44
|
-
3. 新表用 `microi_create_table`;字段用 `microi_add_field`,不得直接写
|
|
45
|
-
`diy_field` 或执行临时 DDL。
|
|
46
|
-
4. 选项控件同时设置 `data/config`;关联控件明确保存字段和显示字段。
|
|
47
|
-
5. 字段多时设置 `diy_table.Tabs` 与字段 `Tab`;只有整行控件设置
|
|
48
|
-
`FormWidth=24`,普通字段省略。`CollapseGroup` 属于整行控件,必须显式保存
|
|
49
|
-
`FormWidth=24`,且 `Config.CollapseGroup.ShowFieldCount` 默认补为 `true`。
|
|
50
|
-
6. 绑定菜单后补齐/允许平台推断列表列、搜索列、隐藏列、排序列、移动端列和默认排序。
|
|
39
|
+
|
|
40
|
+
1. 先通过 `microi_get_db_schema` 读取目标租户的真实表、字段和菜单。
|
|
41
|
+
2. 从当前源码
|
|
42
|
+
`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json`
|
|
43
|
+
核对控件名;官网页面可能含历史控件。
|
|
44
|
+
3. 新表用 `microi_create_table`;字段用 `microi_add_field`,不得直接写
|
|
45
|
+
`diy_field` 或执行临时 DDL。
|
|
46
|
+
4. 选项控件同时设置 `data/config`;关联控件明确保存字段和显示字段。
|
|
47
|
+
5. 字段多时设置 `diy_table.Tabs` 与字段 `Tab`;只有整行控件设置
|
|
48
|
+
`FormWidth=24`,普通字段省略。`CollapseGroup` 属于整行控件,必须显式保存
|
|
49
|
+
`FormWidth=24`,且 `Config.CollapseGroup.ShowFieldCount` 默认补为 `true`。
|
|
50
|
+
6. 绑定菜单后补齐/允许平台推断列表列、搜索列、隐藏列、排序列、移动端列和默认排序。
|
|
51
51
|
7. 回读 `diy_field`、刷新 schema 缓存,再在真实新增/编辑/查看表单中验收。
|
|
52
52
|
|
|
53
53
|
## 原生查询主库策略
|
|
@@ -112,164 +112,164 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
112
112
|
- 图片、文件和富文本上传必须携带 `FormEngineKey + FieldId + SysMenuId`,编辑记录再带
|
|
113
113
|
`FormDataId`,TableChild 再带父子授权上下文。后端不得按用户等级统一覆盖字段的“禁止匿名访问”;
|
|
114
114
|
无法回查字段与动作权限的普通上传才安全降级为私有桶。
|
|
115
|
-
|
|
116
|
-
新建表/模块时,除非用户显式指定或表单达到极重阈值(约 36+ 业务字段、2+ 子表或同等
|
|
117
|
-
重型控件密度),默认保存 `diy_table.FormOpenType=Dialog` 与 `FormOpenWidth=80%`。
|
|
118
|
-
Drawer 只服务超长复杂表单,不能作为所有 CRUD 模块的模板默认值。
|
|
119
|
-
若设计器显示而运行态不显示,先检查 `InFormV8`/字段 V8 是否调用
|
|
120
|
-
`V8.FieldSet(..., 'Visible', false)`、`hideField` 或传入 `HideFields`,再判断前端源码。
|
|
121
|
-
|
|
122
|
-
## 表单 Banner(所有新业务表必做)
|
|
123
|
-
|
|
124
|
-
标准表单 Banner 默认显示,以当前主题色约 50% 混合强度叠加深蓝灰渐变,并适配浅色、
|
|
125
|
-
深色与移动端。视觉应有层次但保持清爽,标题始终维持安全对比度;统计卡片使用半透明背景
|
|
126
|
-
和柔和阴影分层,避免堆叠边框。它属于表单语义,配置
|
|
127
|
-
必须写入 `diy_table` 的 `FormBannerEnabled`、`FormBannerTitleField`、
|
|
128
|
-
`FormBannerSubtitleField`、`FormBannerImageField`、`FormBannerIcon`、
|
|
129
|
-
`FormBannerBackgroundField`、`FormBannerTagFields`、`FormBannerMetrics`,禁止写进
|
|
130
|
-
`sys_menu`、`DiyConfig` 或项目定制组件。
|
|
131
|
-
|
|
132
|
-
- 标题优先业务自动编号/单号/编码,再选名称或标题;副标题优先客户、项目、公司、分类、
|
|
133
|
-
日期等可读字段。
|
|
134
|
-
- 左侧图片使用 `ImgUpload`。单图、多图取首图,继续遵循吾码公有/私有文件路径与授权
|
|
135
|
-
规则;图片为空时必须有语义合适的 Font Awesome 图标回退。
|
|
136
|
-
- 右侧标签优先 `Select/Radio/Switch/Checkbox/SelectTree/Department` 等选项字段,最多
|
|
137
|
-
选择 3 个有业务意义的状态、类型或等级。显式 `[]` 表示不要自动标签。
|
|
138
|
-
- 自动统计最多 3 项,只选择真实金额、合计、数量、成本、余额、评分、比率、进度等具有
|
|
139
|
-
明确业务口径的数值字段;必须排除 Id、排序、启用、状态、版本、分页和本页加载量。
|
|
140
|
-
存在 `TableChild` 时,默认统计必须携带完整父表/父字段/父记录授权上下文,在服务端对全部
|
|
141
|
-
关联子表数据计算行数或业务数值合计,不能只统计当前页。跨表自定义口径使用 `ApiEngineKey +
|
|
142
|
-
ValuePath + ParamMap + RefreshSeconds`,相同接口批量返回,禁止 N+1、随机数和固定演示数;
|
|
143
|
-
没有可靠指标时隐藏统计区。显式 `[]` 表示不要自动统计。
|
|
144
|
-
- 兼容旧模块 Hero 时仅迁移视觉、`Source=Field` 或显式记录作用域指标;列表总数、分类数量和
|
|
145
|
-
未引用当前 `Form/RecordId` 的全局接口统计不得进入单记录 Banner,缺省时回到当前记录和
|
|
146
|
-
授权 `TableChild` 的语义统计。
|
|
115
|
+
|
|
116
|
+
新建表/模块时,除非用户显式指定或表单达到极重阈值(约 36+ 业务字段、2+ 子表或同等
|
|
117
|
+
重型控件密度),默认保存 `diy_table.FormOpenType=Dialog` 与 `FormOpenWidth=80%`。
|
|
118
|
+
Drawer 只服务超长复杂表单,不能作为所有 CRUD 模块的模板默认值。
|
|
119
|
+
若设计器显示而运行态不显示,先检查 `InFormV8`/字段 V8 是否调用
|
|
120
|
+
`V8.FieldSet(..., 'Visible', false)`、`hideField` 或传入 `HideFields`,再判断前端源码。
|
|
121
|
+
|
|
122
|
+
## 表单 Banner(所有新业务表必做)
|
|
123
|
+
|
|
124
|
+
标准表单 Banner 默认显示,以当前主题色约 50% 混合强度叠加深蓝灰渐变,并适配浅色、
|
|
125
|
+
深色与移动端。视觉应有层次但保持清爽,标题始终维持安全对比度;统计卡片使用半透明背景
|
|
126
|
+
和柔和阴影分层,避免堆叠边框。它属于表单语义,配置
|
|
127
|
+
必须写入 `diy_table` 的 `FormBannerEnabled`、`FormBannerTitleField`、
|
|
128
|
+
`FormBannerSubtitleField`、`FormBannerImageField`、`FormBannerIcon`、
|
|
129
|
+
`FormBannerBackgroundField`、`FormBannerTagFields`、`FormBannerMetrics`,禁止写进
|
|
130
|
+
`sys_menu`、`DiyConfig` 或项目定制组件。
|
|
131
|
+
|
|
132
|
+
- 标题优先业务自动编号/单号/编码,再选名称或标题;副标题优先客户、项目、公司、分类、
|
|
133
|
+
日期等可读字段。
|
|
134
|
+
- 左侧图片使用 `ImgUpload`。单图、多图取首图,继续遵循吾码公有/私有文件路径与授权
|
|
135
|
+
规则;图片为空时必须有语义合适的 Font Awesome 图标回退。
|
|
136
|
+
- 右侧标签优先 `Select/Radio/Switch/Checkbox/SelectTree/Department` 等选项字段,最多
|
|
137
|
+
选择 3 个有业务意义的状态、类型或等级。显式 `[]` 表示不要自动标签。
|
|
138
|
+
- 自动统计最多 3 项,只选择真实金额、合计、数量、成本、余额、评分、比率、进度等具有
|
|
139
|
+
明确业务口径的数值字段;必须排除 Id、排序、启用、状态、版本、分页和本页加载量。
|
|
140
|
+
存在 `TableChild` 时,默认统计必须携带完整父表/父字段/父记录授权上下文,在服务端对全部
|
|
141
|
+
关联子表数据计算行数或业务数值合计,不能只统计当前页。跨表自定义口径使用 `ApiEngineKey +
|
|
142
|
+
ValuePath + ParamMap + RefreshSeconds`,相同接口批量返回,禁止 N+1、随机数和固定演示数;
|
|
143
|
+
没有可靠指标时隐藏统计区。显式 `[]` 表示不要自动统计。
|
|
144
|
+
- 兼容旧模块 Hero 时仅迁移视觉、`Source=Field` 或显式记录作用域指标;列表总数、分类数量和
|
|
145
|
+
未引用当前 `Form/RecordId` 的全局接口统计不得进入单记录 Banner,缺省时回到当前记录和
|
|
146
|
+
授权 `TableChild` 的语义统计。
|
|
147
147
|
- 未配置的存量表由运行时按字段类型智能推断,不能因为物理字段为空而隐藏或展示空壳。
|
|
148
148
|
只有 `FormBannerEnabled=0` 才隐藏。
|
|
149
149
|
- 字段绑定须区分省略/`NULL` 与显式空字符串:`titleField/subtitleField/imageField/backgroundField`
|
|
150
150
|
省略或 `NULL` 表示未选择,允许兼容推断;显式 `""` 表示不绑定该字段,不能被推断值或旧别名
|
|
151
151
|
覆盖。取消标题/图片字段后仍保留表单名称/默认图标回退。完整验收须同时使用包含该语义的 MCP
|
|
152
152
|
与平台前端,逐项回读空字符串并验证实际表单;不能只看到写入 `Code=1` 就宣称生效。
|
|
153
|
-
- 完整系统 Manifest 使用 `tables[].formBanner`;未提供时 `microi_generate_system` 仍须写入
|
|
153
|
+
- 完整系统 Manifest 使用 `tables[].formBanner`;未提供时 `microi_generate_system` 仍须写入
|
|
154
154
|
类型感知的默认值。逐步创建字段后调用 `microi_configure_form_banner` 并回读验证。
|
|
155
155
|
- `microi_generate_system` 的最终验收与 `microi_validate_system` 必须逐表回读 Banner 语义字段;
|
|
156
156
|
写入返回成功、结构验收 `Code=1` 都不能代替已持久化配置,`Data.Passed=false` 仍视为失败。
|
|
157
157
|
旧库缺少 Banner 物理列时先完成平台正式升级,再配置和重新验收,不直接执行 SQL 补列。
|
|
158
|
-
- 表单设计器验收必须覆盖有/无图片、有/无统计、子表完整聚合、接口失败回退、浅色、深色、
|
|
159
|
-
PC 和窄屏,并检查文字对比度以及不存在技术字段伪统计。
|
|
160
|
-
|
|
161
|
-
## 物理类型底线
|
|
162
|
-
|
|
163
|
-
MCP 建模只使用:
|
|
164
|
-
|
|
165
|
-
- `varchar(N)`
|
|
166
|
-
- `mediumtext` / `longtext`
|
|
167
|
-
- `int` / `bigint`
|
|
168
|
-
- `decimal(18,N)`
|
|
169
|
-
|
|
170
|
-
日期时间用 `varchar(25)` 保存 `yyyy-MM-dd HH:mm:ss`,组件用 `DateTime`;
|
|
171
|
-
开关用 `int`。不得生成 `datetime/date/timestamp/float/double/boolean/bool/string/text/nvarchar`。
|
|
172
|
-
前端设计器 JSON 中的历史默认类型不能覆盖服务器建模规则。
|
|
173
|
-
|
|
174
|
-
## 选项字段
|
|
175
|
-
|
|
176
|
-
`Select`、`MultipleSelect`、`Radio`、`Checkbox` 没有数据源时会显示空选项:
|
|
177
|
-
|
|
178
|
-
```text
|
|
179
|
-
1|启用,0|禁用
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
推荐保存稳定 Key、显示可翻译 Label。修改 `Data/Config/KeyValue` 后必须
|
|
183
|
-
`microi_get_field_list` 回读,并执行 `microi_refresh_schema_cache`。
|
|
184
|
-
|
|
185
|
-
## `JoinForm` 与 `TableChild` 硬性判定
|
|
186
|
-
|
|
187
|
-
这两个控件都能在表单内显示另一张表,但数据关系和运行组件完全不同,生成表/字段前
|
|
188
|
-
必须先确定基数,不得因为名称里出现“关联”就默认使用 `JoinForm`。
|
|
189
|
-
|
|
190
|
-
| 判断项 | `JoinForm`(关联表单) | `TableChild`(子表) |
|
|
191
|
-
|---|---|---|
|
|
192
|
-
| 关系 | 当前记录关联**一个**独立目标记录,通常为 N:1 或 1:1 | 一条主表记录拥有 0..N 条明细,标准 1:N |
|
|
193
|
-
| 关系存储 | 主表字段保存目标记录 `Id` | **子表物理外键**保存主表 `Id`/指定主键值 |
|
|
194
|
-
| 界面 | 嵌入一张 `diy-form`,只展示/编辑一条目标记录 | 嵌入一张 `diy-table`,提供明细列表、分页及行级增删改 |
|
|
195
|
-
| 核心配置 | `Config.JoinForm.{TableId,TableName,JoinFieldName,FormMode,Id,_SearchEqual}` | `Config` 根节点的子表/菜单/外键 Id,加 `Config.TableChild` 运行选项 |
|
|
196
|
-
| 目标限制 | 目标表必须与当前表不同;相同则组件拒绝渲染 | 子表应是独立明细表,并通过外键限定到当前父记录 |
|
|
197
|
-
|
|
198
|
-
### 决策规则(强制)
|
|
199
|
-
|
|
200
|
-
- 需求出现“子表、明细、清单、条目、行项目、多个、若干条、记录列表”,且没有明确说明
|
|
201
|
-
“只关联一条已有记录”时,默认建模为 `TableChild`。
|
|
202
|
-
- 只要一条父记录可能有 0..N 条目标记录,或需要在父表单内列表、分页、新增、编辑、删除
|
|
203
|
-
多行,就必须用 `TableChild`。
|
|
204
|
-
- 只有主表保存一个目标记录 Id、并需要把该独立记录的完整表单嵌入当前表单时,才用
|
|
205
|
-
`JoinForm`。选择一条记录但无需嵌入完整表单时,优先 `OpenTable`/`Select`。
|
|
206
|
-
- 语义仍不明确时必须在任何 MCP 写入前询问基数;禁止静默退化为 `JoinForm`。
|
|
207
|
-
- 禁止把“明细”设计为主表 `XxxId + JoinForm`;禁止让 `JoinForm.TableId/TableName`
|
|
208
|
-
指向当前表;禁止把 1:N 外键放在主表。
|
|
209
|
-
- 完整系统 Manifest 中,`JoinForm` / `TableChild` 字段必须声明 `relation.cardinality`;
|
|
210
|
-
`microi_plan_system` 与 `microi_generate_system` 会在任何写入前执行本节门禁。直接调用
|
|
211
|
-
`microi_add_field` / `microi_update_field` 时,后端仍会校验目标表、主/子外键、隐藏菜单
|
|
212
|
-
和子表索引,不能靠绕过 Manifest 写入未初始化配置。
|
|
213
|
-
|
|
214
|
-
示例:
|
|
215
|
-
|
|
216
|
-
- “订单包含多个商品明细” → `order_detail.OrderId` + `TableChild`。
|
|
217
|
-
- “访客单包含多件携带物品” → `fk_carry_item.VisitId` + `TableChild`,不能用
|
|
218
|
-
`GuestId + JoinForm`,也不能把 `JoinForm` 指回 `fk_carry_item` 自己。
|
|
219
|
-
- “工单关联一个客户,并在工单内展开客户档案” → 主表 `CustomerId` + `JoinForm`。
|
|
220
|
-
|
|
221
|
-
### MCP 创建 `TableChild` 的两阶段流程
|
|
222
|
-
|
|
223
|
-
1. 创建主表和独立子表;在子表创建真实外键(如 `VisitId varchar(50)`)。
|
|
158
|
+
- 表单设计器验收必须覆盖有/无图片、有/无统计、子表完整聚合、接口失败回退、浅色、深色、
|
|
159
|
+
PC 和窄屏,并检查文字对比度以及不存在技术字段伪统计。
|
|
160
|
+
|
|
161
|
+
## 物理类型底线
|
|
162
|
+
|
|
163
|
+
MCP 建模只使用:
|
|
164
|
+
|
|
165
|
+
- `varchar(N)`
|
|
166
|
+
- `mediumtext` / `longtext`
|
|
167
|
+
- `int` / `bigint`
|
|
168
|
+
- `decimal(18,N)`
|
|
169
|
+
|
|
170
|
+
日期时间用 `varchar(25)` 保存 `yyyy-MM-dd HH:mm:ss`,组件用 `DateTime`;
|
|
171
|
+
开关用 `int`。不得生成 `datetime/date/timestamp/float/double/boolean/bool/string/text/nvarchar`。
|
|
172
|
+
前端设计器 JSON 中的历史默认类型不能覆盖服务器建模规则。
|
|
173
|
+
|
|
174
|
+
## 选项字段
|
|
175
|
+
|
|
176
|
+
`Select`、`MultipleSelect`、`Radio`、`Checkbox` 没有数据源时会显示空选项:
|
|
177
|
+
|
|
178
|
+
```text
|
|
179
|
+
1|启用,0|禁用
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
推荐保存稳定 Key、显示可翻译 Label。修改 `Data/Config/KeyValue` 后必须
|
|
183
|
+
`microi_get_field_list` 回读,并执行 `microi_refresh_schema_cache`。
|
|
184
|
+
|
|
185
|
+
## `JoinForm` 与 `TableChild` 硬性判定
|
|
186
|
+
|
|
187
|
+
这两个控件都能在表单内显示另一张表,但数据关系和运行组件完全不同,生成表/字段前
|
|
188
|
+
必须先确定基数,不得因为名称里出现“关联”就默认使用 `JoinForm`。
|
|
189
|
+
|
|
190
|
+
| 判断项 | `JoinForm`(关联表单) | `TableChild`(子表) |
|
|
191
|
+
|---|---|---|
|
|
192
|
+
| 关系 | 当前记录关联**一个**独立目标记录,通常为 N:1 或 1:1 | 一条主表记录拥有 0..N 条明细,标准 1:N |
|
|
193
|
+
| 关系存储 | 主表字段保存目标记录 `Id` | **子表物理外键**保存主表 `Id`/指定主键值 |
|
|
194
|
+
| 界面 | 嵌入一张 `diy-form`,只展示/编辑一条目标记录 | 嵌入一张 `diy-table`,提供明细列表、分页及行级增删改 |
|
|
195
|
+
| 核心配置 | `Config.JoinForm.{TableId,TableName,JoinFieldName,FormMode,Id,_SearchEqual}` | `Config` 根节点的子表/菜单/外键 Id,加 `Config.TableChild` 运行选项 |
|
|
196
|
+
| 目标限制 | 目标表必须与当前表不同;相同则组件拒绝渲染 | 子表应是独立明细表,并通过外键限定到当前父记录 |
|
|
197
|
+
|
|
198
|
+
### 决策规则(强制)
|
|
199
|
+
|
|
200
|
+
- 需求出现“子表、明细、清单、条目、行项目、多个、若干条、记录列表”,且没有明确说明
|
|
201
|
+
“只关联一条已有记录”时,默认建模为 `TableChild`。
|
|
202
|
+
- 只要一条父记录可能有 0..N 条目标记录,或需要在父表单内列表、分页、新增、编辑、删除
|
|
203
|
+
多行,就必须用 `TableChild`。
|
|
204
|
+
- 只有主表保存一个目标记录 Id、并需要把该独立记录的完整表单嵌入当前表单时,才用
|
|
205
|
+
`JoinForm`。选择一条记录但无需嵌入完整表单时,优先 `OpenTable`/`Select`。
|
|
206
|
+
- 语义仍不明确时必须在任何 MCP 写入前询问基数;禁止静默退化为 `JoinForm`。
|
|
207
|
+
- 禁止把“明细”设计为主表 `XxxId + JoinForm`;禁止让 `JoinForm.TableId/TableName`
|
|
208
|
+
指向当前表;禁止把 1:N 外键放在主表。
|
|
209
|
+
- 完整系统 Manifest 中,`JoinForm` / `TableChild` 字段必须声明 `relation.cardinality`;
|
|
210
|
+
`microi_plan_system` 与 `microi_generate_system` 会在任何写入前执行本节门禁。直接调用
|
|
211
|
+
`microi_add_field` / `microi_update_field` 时,后端仍会校验目标表、主/子外键、隐藏菜单
|
|
212
|
+
和子表索引,不能靠绕过 Manifest 写入未初始化配置。
|
|
213
|
+
|
|
214
|
+
示例:
|
|
215
|
+
|
|
216
|
+
- “订单包含多个商品明细” → `order_detail.OrderId` + `TableChild`。
|
|
217
|
+
- “访客单包含多件携带物品” → `fk_carry_item.VisitId` + `TableChild`,不能用
|
|
218
|
+
`GuestId + JoinForm`,也不能把 `JoinForm` 指回 `fk_carry_item` 自己。
|
|
219
|
+
- “工单关联一个客户,并在工单内展开客户档案” → 主表 `CustomerId` + `JoinForm`。
|
|
220
|
+
|
|
221
|
+
### MCP 创建 `TableChild` 的两阶段流程
|
|
222
|
+
|
|
223
|
+
1. 创建主表和独立子表;在子表创建真实外键(如 `VisitId varchar(50)`)。
|
|
224
224
|
2. 在子表为回查创建与物理隔离方式一致的索引:表有 `OsClient` 时通常为
|
|
225
225
|
`(OsClient, VisitId)`,独立租户表没有该列时为 `(VisitId)`。索引写入 Manifest
|
|
226
226
|
`tables[].indexes`,并以 `microi_get_table_indexes` 回读;物理字段回读失败时停止配置。
|
|
227
|
-
3. 为子表创建绑定其 `diyTableId` 的隐藏 CRUD 菜单:`Display=0`、`AppDisplay=0`、
|
|
228
|
-
`HasChild=0`。
|
|
229
|
-
4. 在完整系统 Manifest 的主表字段声明:
|
|
230
|
-
|
|
231
|
-
```json
|
|
232
|
-
{
|
|
233
|
-
"name": "Items",
|
|
234
|
-
"label": "明细",
|
|
235
|
-
"component": "TableChild",
|
|
236
|
-
"formWidth": 24,
|
|
237
|
-
"relation": {
|
|
238
|
-
"cardinality": "1:N",
|
|
239
|
-
"targetTable": "Biz_OrderItem",
|
|
240
|
-
"childForeignKey": "OrderId",
|
|
241
|
-
"childModule": "订单明细(隐藏)",
|
|
242
|
-
"primaryTableFieldName": "Id"
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
```
|
|
246
|
-
|
|
247
|
-
`microi_generate_system` 会先创建全部表与普通字段,再创建隐藏菜单,最后回读并写入
|
|
248
|
-
当前租户真实的 `diy_table.Id` / `sys_menu.Id`。禁止在 Manifest 中编造这些 Id,禁止
|
|
249
|
-
因依赖尚未创建而退化成 `JoinForm`。
|
|
250
|
-
5. `TableChild` 控件字段通常只是表单配置位,关系事实存放在子表外键。至少保存:
|
|
251
|
-
|
|
252
|
-
```json
|
|
253
|
-
{
|
|
254
|
-
"TableChildTableId": "<子表 diy_table.Id>",
|
|
255
|
-
"TableChildSysMenuId": "<子表 sys_menu.Id>",
|
|
256
|
-
"TableChildSysMenuName": "携带物品明细",
|
|
257
|
-
"TableChildFkFieldName": "VisitId",
|
|
258
|
-
"TableChild": {
|
|
259
|
-
"PrimaryTableFieldName": "Id",
|
|
260
|
-
"Data": [],
|
|
261
|
-
"SearchAppend": {},
|
|
262
|
-
"ImportAutoFillFk": true,
|
|
263
|
-
"FieldRelations": [],
|
|
264
|
-
"LastTableId": "",
|
|
265
|
-
"LastSysMenuId": "",
|
|
266
|
-
"LastSysMenuName": "",
|
|
267
|
-
"DisablePagination": false,
|
|
268
|
-
"NoneDefaultHeight": false
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
```
|
|
272
|
-
|
|
227
|
+
3. 为子表创建绑定其 `diyTableId` 的隐藏 CRUD 菜单:`Display=0`、`AppDisplay=0`、
|
|
228
|
+
`HasChild=0`。
|
|
229
|
+
4. 在完整系统 Manifest 的主表字段声明:
|
|
230
|
+
|
|
231
|
+
```json
|
|
232
|
+
{
|
|
233
|
+
"name": "Items",
|
|
234
|
+
"label": "明细",
|
|
235
|
+
"component": "TableChild",
|
|
236
|
+
"formWidth": 24,
|
|
237
|
+
"relation": {
|
|
238
|
+
"cardinality": "1:N",
|
|
239
|
+
"targetTable": "Biz_OrderItem",
|
|
240
|
+
"childForeignKey": "OrderId",
|
|
241
|
+
"childModule": "订单明细(隐藏)",
|
|
242
|
+
"primaryTableFieldName": "Id"
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
`microi_generate_system` 会先创建全部表与普通字段,再创建隐藏菜单,最后回读并写入
|
|
248
|
+
当前租户真实的 `diy_table.Id` / `sys_menu.Id`。禁止在 Manifest 中编造这些 Id,禁止
|
|
249
|
+
因依赖尚未创建而退化成 `JoinForm`。
|
|
250
|
+
5. `TableChild` 控件字段通常只是表单配置位,关系事实存放在子表外键。至少保存:
|
|
251
|
+
|
|
252
|
+
```json
|
|
253
|
+
{
|
|
254
|
+
"TableChildTableId": "<子表 diy_table.Id>",
|
|
255
|
+
"TableChildSysMenuId": "<子表 sys_menu.Id>",
|
|
256
|
+
"TableChildSysMenuName": "携带物品明细",
|
|
257
|
+
"TableChildFkFieldName": "VisitId",
|
|
258
|
+
"TableChild": {
|
|
259
|
+
"PrimaryTableFieldName": "Id",
|
|
260
|
+
"Data": [],
|
|
261
|
+
"SearchAppend": {},
|
|
262
|
+
"ImportAutoFillFk": true,
|
|
263
|
+
"FieldRelations": [],
|
|
264
|
+
"LastTableId": "",
|
|
265
|
+
"LastSysMenuId": "",
|
|
266
|
+
"LastSysMenuName": "",
|
|
267
|
+
"DisablePagination": false,
|
|
268
|
+
"NoneDefaultHeight": false
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
```
|
|
272
|
+
|
|
273
273
|
`FieldRelations` 使用紧凑格式 `[["父表字段","子表字段",true?], ...]`。全部关系用于新增回写和导入回填;第三位 `true` 仅标记参与导入反查父表的关系。后端兼容旧三项配置,新版前端会合并去重并在字段下次保存时清除旧键。
|
|
274
274
|
|
|
275
275
|
- `TableChild` 的父关联键为空、`null` 或仅空白时必须失败关闭:不得发起子表列表请求,服务端
|
|
@@ -281,51 +281,51 @@ MCP 建模只使用:
|
|
|
281
281
|
|
|
282
282
|
`OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
|
|
283
283
|
用于展示关联集合,不能用前端拼接代替数据权限。
|
|
284
|
-
|
|
285
|
-
### 子表验收与复盘
|
|
286
|
-
|
|
287
|
-
- 回读主表字段、子表字段、隐藏子菜单和索引,确认配置中的表 Id、菜单 Id、外键名均真实存在。
|
|
288
|
-
- 用父记录 A 新增/编辑/删除多条子记录;打开父记录 B,确认 A 的数据不可见且不可越权操作。
|
|
289
|
-
- 新增主表尚无真实 Id 时,不得产生孤儿子记录;保存后重新打开仍能正确回显。
|
|
290
|
-
- 若曾误选组件,复盘必须记录:触发用语、误判基数、正确关系、应增加的生成前断言;通用结论
|
|
291
|
-
回写本节,不能只修一张业务表。
|
|
292
|
-
|
|
293
|
-
## 自定义组件边界
|
|
294
|
-
|
|
295
|
-
优先使用现有 44 类标准控件。只有标准控件无法表达交互、且该交互会长期复用时,
|
|
296
|
-
才使用 `DevComponent`:
|
|
297
|
-
|
|
298
|
-
- 多租户共用且与主框架强耦合的 Vue 组件,路径必须稳定并纳入 `Microi.Client` 源码/构建。
|
|
299
|
-
- 支持 Add/Edit/View、只读、必填、清空、校验、移动端和暗色主题。
|
|
300
|
-
- 不在组件内绕过 FormEngine 权限直接访问任意表。
|
|
301
|
-
- 复杂但租户独有、需要固定嵌入表单的区域,优先使用 `DevComponent` + MicroService 路由;临时打开的复杂页面使用 `V8.OpenAppDialog`,都避免把客户逻辑打进主前端。
|
|
302
|
-
- MicroService 表单嵌入使用 `microi.routes.json` 页面级 `LegacyComponentPaths` 作为稳定别名,字段 `Config.DevComponentPath` 与其匹配。主前端存在同路径 Vue 文件时本地优先;不存在时平台自动加载对应 `sys_microiservice_page.RoutePath`。新别名不得与 `/src/views` 真实文件冲突。
|
|
303
|
-
- 组件宿主下发 `componentMode=true`、可序列化 `componentData` 与 `permissionContext`;子应用用 `dev-component:resize` 同步高度,用 `dev-component:event` 回传 `update:modelValue`、`CallbackFormValueChange`、`FormSet` 或 `ParentFormSet`。不传 Vue 实例、函数、循环引用或 `ParentV8`,不直接操作父页面 DOM。
|
|
304
|
-
- 表单嵌入验收必须覆盖 Add/Edit/View/只读、初始值与回写、自动高度、窄屏、暗色主题,以及当前菜单 `ModuleEngineKey` 下的有权/无权账号。
|
|
305
|
-
- `DevComponent` 配置了非空字段标题时必须正常渲染 Label;只有标题本身为空时才允许隐藏,
|
|
306
|
-
不能按组件类型全局吞掉业务标题。`el-form--label-top` 下的字段级 `Button` 仍保留与其它
|
|
307
|
-
控件等高的不可见 Label 占位,使按钮对齐控件区而不是对齐标题行。
|
|
308
|
-
- 字段显式配置 `FormLabelPosition=left/right/top` 时优先于子表、代码编辑器等特殊组件的默认
|
|
309
|
-
`top` 布局;移动端仍可统一回落到 `top`。验收时必须在真实设计器保存后回读该字段配置。
|
|
310
|
-
- 同一标签行同时显示 `Label` 与 `Description` 时,业务 Label 不允许收缩或省略;说明文字使用
|
|
311
|
-
剩余宽度并以省略号截断,完整说明通过 Element Plus tooltip 提供。自定义组件内部不得再次
|
|
312
|
-
输出与宿主字段相同的标题;需要补充的是说明或安全提示。
|
|
313
|
-
- 权限树勾选子菜单时必须补齐全部祖先菜单的 `Read` 权限,祖先不得被动继承子菜单的增删改查;
|
|
314
|
-
这样既保证路由可见,又避免扩大业务操作权限。
|
|
315
|
-
|
|
284
|
+
|
|
285
|
+
### 子表验收与复盘
|
|
286
|
+
|
|
287
|
+
- 回读主表字段、子表字段、隐藏子菜单和索引,确认配置中的表 Id、菜单 Id、外键名均真实存在。
|
|
288
|
+
- 用父记录 A 新增/编辑/删除多条子记录;打开父记录 B,确认 A 的数据不可见且不可越权操作。
|
|
289
|
+
- 新增主表尚无真实 Id 时,不得产生孤儿子记录;保存后重新打开仍能正确回显。
|
|
290
|
+
- 若曾误选组件,复盘必须记录:触发用语、误判基数、正确关系、应增加的生成前断言;通用结论
|
|
291
|
+
回写本节,不能只修一张业务表。
|
|
292
|
+
|
|
293
|
+
## 自定义组件边界
|
|
294
|
+
|
|
295
|
+
优先使用现有 44 类标准控件。只有标准控件无法表达交互、且该交互会长期复用时,
|
|
296
|
+
才使用 `DevComponent`:
|
|
297
|
+
|
|
298
|
+
- 多租户共用且与主框架强耦合的 Vue 组件,路径必须稳定并纳入 `Microi.Client` 源码/构建。
|
|
299
|
+
- 支持 Add/Edit/View、只读、必填、清空、校验、移动端和暗色主题。
|
|
300
|
+
- 不在组件内绕过 FormEngine 权限直接访问任意表。
|
|
301
|
+
- 复杂但租户独有、需要固定嵌入表单的区域,优先使用 `DevComponent` + MicroService 路由;临时打开的复杂页面使用 `V8.OpenAppDialog`,都避免把客户逻辑打进主前端。
|
|
302
|
+
- MicroService 表单嵌入使用 `microi.routes.json` 页面级 `LegacyComponentPaths` 作为稳定别名,字段 `Config.DevComponentPath` 与其匹配。主前端存在同路径 Vue 文件时本地优先;不存在时平台自动加载对应 `sys_microiservice_page.RoutePath`。新别名不得与 `/src/views` 真实文件冲突。
|
|
303
|
+
- 组件宿主下发 `componentMode=true`、可序列化 `componentData` 与 `permissionContext`;子应用用 `dev-component:resize` 同步高度,用 `dev-component:event` 回传 `update:modelValue`、`CallbackFormValueChange`、`FormSet` 或 `ParentFormSet`。不传 Vue 实例、函数、循环引用或 `ParentV8`,不直接操作父页面 DOM。
|
|
304
|
+
- 表单嵌入验收必须覆盖 Add/Edit/View/只读、初始值与回写、自动高度、窄屏、暗色主题,以及当前菜单 `ModuleEngineKey` 下的有权/无权账号。
|
|
305
|
+
- `DevComponent` 配置了非空字段标题时必须正常渲染 Label;只有标题本身为空时才允许隐藏,
|
|
306
|
+
不能按组件类型全局吞掉业务标题。`el-form--label-top` 下的字段级 `Button` 仍保留与其它
|
|
307
|
+
控件等高的不可见 Label 占位,使按钮对齐控件区而不是对齐标题行。
|
|
308
|
+
- 字段显式配置 `FormLabelPosition=left/right/top` 时优先于子表、代码编辑器等特殊组件的默认
|
|
309
|
+
`top` 布局;移动端仍可统一回落到 `top`。验收时必须在真实设计器保存后回读该字段配置。
|
|
310
|
+
- 同一标签行同时显示 `Label` 与 `Description` 时,业务 Label 不允许收缩或省略;说明文字使用
|
|
311
|
+
剩余宽度并以省略号截断,完整说明通过 Element Plus tooltip 提供。自定义组件内部不得再次
|
|
312
|
+
输出与宿主字段相同的标题;需要补充的是说明或安全提示。
|
|
313
|
+
- 权限树勾选子菜单时必须补齐全部祖先菜单的 `Read` 权限,祖先不得被动继承子菜单的增删改查;
|
|
314
|
+
这样既保证路由可见,又避免扩大业务操作权限。
|
|
315
|
+
|
|
316
316
|
## 固定审计字段
|
|
317
317
|
|
|
318
318
|
- 核心协议迁移也必须遵守普通物理列允许 NULL。流式发布的 SaaS 开关、协议版本、栅栏、门禁代次和审计字段不能在旧迁移补跑时重新设为 NOT NULL;默认值、状态机、身份校验和完整审计由可信程序保证,只有主键 Id 保持数据库非空约束。
|
|
319
|
-
|
|
320
|
-
- `Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted` 是 DIY 表的正常固定字段。物理列存在时必须有对应 `diy_field` 元数据,不能长期出现在“异常字段修复”列表;`diy_table.DisplayDefaultField` 只控制设计器默认是否显示这些字段,不等于删除元数据。
|
|
321
|
-
- 统一通过平台修复接口或 MCP `microi_repair_audit_fields` 补齐/恢复元数据。修复必须按 `OsClient` 使用共享租约锁,可重复执行,只处理已存在的固定物理列,不借机执行 DDL,并在成功后清理字段缓存。
|
|
322
|
-
- 表格里的创建人、创建时间、修改时间等审计列应与普通字段共用列头高级搜索、权限和格式化逻辑。
|
|
323
|
-
|
|
324
|
-
## 验收
|
|
325
|
-
|
|
326
|
-
- 物理列与 `diy_field` 一致,字段缓存已刷新。
|
|
327
|
-
- 新增、编辑、查看、列表、搜索、导入/导出至少覆盖适用场景。
|
|
328
|
-
- 选项显示 Label、保存 Key,回显和筛选一致。
|
|
329
|
-
- 子表新增/编辑/删除与父表外键正确,不能跨父记录串数据。
|
|
330
|
-
- PC 与移动端字段顺序、Tabs、整行控件无截断。
|
|
331
|
-
- 前端校验只改善体验;绕过前端直接 HTTP 提交时后端事件仍能阻止非法数据。
|
|
319
|
+
|
|
320
|
+
- `Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted` 是 DIY 表的正常固定字段。物理列存在时必须有对应 `diy_field` 元数据,不能长期出现在“异常字段修复”列表;`diy_table.DisplayDefaultField` 只控制设计器默认是否显示这些字段,不等于删除元数据。
|
|
321
|
+
- 统一通过平台修复接口或 MCP `microi_repair_audit_fields` 补齐/恢复元数据。修复必须按 `OsClient` 使用共享租约锁,可重复执行,只处理已存在的固定物理列,不借机执行 DDL,并在成功后清理字段缓存。
|
|
322
|
+
- 表格里的创建人、创建时间、修改时间等审计列应与普通字段共用列头高级搜索、权限和格式化逻辑。
|
|
323
|
+
|
|
324
|
+
## 验收
|
|
325
|
+
|
|
326
|
+
- 物理列与 `diy_field` 一致,字段缓存已刷新。
|
|
327
|
+
- 新增、编辑、查看、列表、搜索、导入/导出至少覆盖适用场景。
|
|
328
|
+
- 选项显示 Label、保存 Key,回显和筛选一致。
|
|
329
|
+
- 子表新增/编辑/删除与父表外键正确,不能跨父记录串数据。
|
|
330
|
+
- PC 与移动端字段顺序、Tabs、整行控件无截断。
|
|
331
|
+
- 前端校验只改善体验;绕过前端直接 HTTP 提交时后端事件仍能阻止非法数据。
|