@microi.net/cli 5.5.9 → 5.6.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/.mcp.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/README.md +71 -71
- package/assets/build-meta.json +5 -5
- package/assets/feature-matrix.json +129 -129
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/codex-marketplace.json +20 -20
- package/scripts/mcp-codex-stdio-adapter.js +189 -189
- package/scripts/mcp-trae-windows-launcher.cmd +21 -21
- package/scripts/microi-cli-mcp.js +7 -7
- package/scripts/microi-codex-broker.js +447 -447
- package/scripts/microi-codex-router.js +582 -582
- package/scripts/microi-skills.meta.json +336 -336
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +3566 -3566
- package/skills/README.md +3 -3
- package/skills/ai-engine/SKILL.md +45 -45
- 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 +177 -177
- package/skills/business-blueprint/SKILL.md +85 -85
- package/skills/datasource-engine/SKILL.md +91 -91
- package/skills/dos-orm/SKILL.md +81 -81
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +80 -80
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +154 -154
- package/skills/message-notification/SKILL.md +126 -126
- 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 -102
- 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 +43 -43
- 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 +2 -2
- 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 +28 -28
- 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 +56 -56
- package/skills/microi-codex/SKILL.md +46 -46
- package/skills/microi-codex-installer/SKILL.md +216 -216
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +67 -67
- package/skills/microi-db-schema/SKILL.md +6 -6
- package/skills/microi-db-schema/references/core-tables.md +18 -18
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +11 -11
- package/skills/microi-db-schema/references/schema.md +46 -46
- package/skills/microi-db-schema/references/table-catalog.md +57 -57
- package/skills/microi-deployment/SKILL.md +18 -1
- package/skills/microi-deployment/references/deployment-matrix.md +101 -101
- package/skills/microi-docs-coverage/SKILL.md +123 -123
- package/skills/microi-docs-coverage/references/capability-map.md +1 -0
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +50 -50
- package/skills/microi-form-engine/references/component-catalog.md +218 -218
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +13 -13
- 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 +4 -4
- 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 +175 -175
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +15 -15
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- 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-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/SKILL.md +85 -85
- 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/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 +20 -20
- package/skills/microi-ui/SKILL.md +7 -2
- package/skills/microi-uniapp-frontend/SKILL.md +134 -134
- 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 +136 -136
- 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 +124 -124
- package/skills/module-engine/SKILL.md +16 -16
- package/skills/ocr-engine/SKILL.md +2 -2
- package/skills/ocr-engine/agents/openai.yaml +1 -1
- package/skills/page-engine/SKILL.md +28 -28
- 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 +126 -126
- 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 +42 -42
- package/skills/performance-testing/SKILL.md +120 -120
- package/skills/playwright-e2e/SKILL.md +84 -84
- 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 +68 -68
- 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 +64 -64
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +20 -20
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +69 -69
- package/skills/print-engine/SKILL.md +36 -36
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/scripts/validate-progressive-disclosure.mjs +52 -52
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +162 -162
- package/skills/system-observability/references/memory-incident-triage.md +73 -73
- package/skills/translate-engine/SKILL.md +1 -1
- package/skills/ui-design/SKILL.md +3 -1
- package/skills/uniapp-mall-assets/SKILL.md +170 -170
- 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-api-config/SKILL.md +378 -378
- package/skills/v8-cache-pattern/SKILL.md +306 -306
- package/skills/v8-crud-api/SKILL.md +29 -29
- 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 +56 -56
- package/skills/v8-debugging/SKILL.md +143 -143
- package/skills/v8-explorer-tree/SKILL.md +64 -64
- 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 +201 -201
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +118 -118
- 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 +32 -32
- package/skills/v8-file-upload/SKILL.md +154 -154
- 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 +133 -133
- 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 +138 -138
- package/skills/v8-formengine-http/SKILL.md +107 -107
- package/skills/v8-frontend-events/SKILL.md +22 -22
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +247 -247
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +50 -50
- package/skills/v8-http-integration/SKILL.md +106 -106
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +31 -31
- 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 +5 -5
- 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 +103 -103
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +145 -145
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
- 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 +43 -43
- package/skills/v8-mongodb/SKILL.md +65 -65
- package/skills/v8-mq-mqtt/SKILL.md +175 -175
- 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 +137 -137
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +223 -223
- package/skills/v8-security/SKILL.md +25 -25
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +122 -122
- package/skills/v8-sql-query/SKILL.md +127 -127
- package/skills/v8-table-event/SKILL.md +20 -20
- 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 +18 -18
- 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 +15 -15
- package/skills/v8-tcp-integration/SKILL.md +1 -1
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +59 -59
- package/skills/v8-utilities/SKILL.md +92 -92
- 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 +74 -74
- package/skills/v8-workflow/SKILL.md +44 -44
- package/skills/vision-engine/SKILL.md +19 -19
- package/skills/vision-engine/references/architecture-and-acceptance.md +34 -34
- package/skills/workspace-conventions/SKILL.md +236 -236
- 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 +179 -179
- 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 +21 -21
|
@@ -23,13 +23,13 @@ Config/Data、菜单查询列与缓存保持一致。
|
|
|
23
23
|
- 后端表单事件:`../v8-table-event/SKILL.md`
|
|
24
24
|
- 前端字段事件:`../v8-frontend-events/SKILL.md`
|
|
25
25
|
|
|
26
|
-
## 标准工作流
|
|
27
|
-
|
|
28
|
-
### 物理字段允许为空(强制)
|
|
29
|
-
|
|
30
|
-
除作为主键的 `Id` 外,通过 MCP、表单设计器、FormEngine、V8 或应用包新增、修改的普通字段,数据库列一律允许 `NULL`。`NotEmpty` 等业务必填要求只作用于表单/服务端校验,不能生成 `NOT NULL`。默认值和是否允许为空是两项独立属性;兼容旧列时只放宽可空约束,保留类型、有效默认值、字符集、排序规则、注释、索引和历史数据,不以补零/空串替代结构修复。
|
|
31
|
-
|
|
32
|
-
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`。
|
|
26
|
+
## 标准工作流
|
|
27
|
+
|
|
28
|
+
### 物理字段允许为空(强制)
|
|
29
|
+
|
|
30
|
+
除作为主键的 `Id` 外,通过 MCP、表单设计器、FormEngine、V8 或应用包新增、修改的普通字段,数据库列一律允许 `NULL`。`NotEmpty` 等业务必填要求只作用于表单/服务端校验,不能生成 `NOT NULL`。默认值和是否允许为空是两项独立属性;兼容旧列时只放宽可空约束,保留类型、有效默认值、字符集、排序规则、注释、索引和历史数据,不以补零/空串替代结构修复。
|
|
31
|
+
|
|
32
|
+
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`。
|
|
33
33
|
|
|
34
34
|
1. 先通过 `microi_get_db_schema` 读取目标租户的真实表、字段和菜单。
|
|
35
35
|
2. 从当前源码
|
|
@@ -42,32 +42,32 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
42
42
|
`FormWidth=24`,普通字段省略。`CollapseGroup` 属于整行控件,必须显式保存
|
|
43
43
|
`FormWidth=24`,且 `Config.CollapseGroup.ShowFieldCount` 默认补为 `true`。
|
|
44
44
|
6. 绑定菜单后补齐/允许平台推断列表列、搜索列、隐藏列、排序列、移动端列和默认排序。
|
|
45
|
-
7. 回读 `diy_field`、刷新 schema 缓存,再在真实新增/编辑/查看表单中验收。
|
|
46
|
-
|
|
47
|
-
## 上传字段配置(AI 生成时强制)
|
|
48
|
-
|
|
49
|
-
- 图片使用 `Config.ImgUpload`,至少明确 `Limit`、`Multiple`、`MaxCount`、`Preview`、
|
|
50
|
-
`MaxSize` 和 `Crop`;文件使用 `Config.FileUpload`,至少明确 `Limit`、`Multiple`、
|
|
51
|
-
`MaxCount`、`MaxSize`。完整键和值域读取 `references/component-catalog.md`。
|
|
52
|
-
- `ImgUpload.Preview` 未配置时默认开启压缩;普通业务图片优先保持开启。裁剪前的原图无论
|
|
53
|
-
展示图配置为公有或私有、是否压缩,都必须保存在 HDFS 私有桶,业务字段不得保存原图路径。
|
|
54
|
-
- `ImgUpload.Crop.Enabled` 只控制表单打开时是否默认选中裁剪。运行时的裁剪开关、存储范围、
|
|
55
|
-
单/多图数量、压缩状态和最大体积统一显示在紧凑上传面板中;不得把 `Enabled=false` 误解为
|
|
56
|
-
禁止用户裁剪。`Mode` 只允许 `free/fixed/select`。
|
|
57
|
-
- 图片和文件的拖放区都使用同一紧凑配置面板。`Multiple=true` 时必须设置业务合理的
|
|
58
|
-
`MaxCount`;`MaxSize` 单位为 MB,字段限制只能收紧租户/平台上限,不能放大。
|
|
59
|
-
- 富文本使用 `Config.RichText`:必须明确 `Limit`,并按需配置
|
|
60
|
-
`Image.Enabled/MaxSize/MaxCount/Preview/CompressMaxSize/CompressMaxWidth`、
|
|
61
|
-
`Video.Enabled/MaxSize/MaxCount`、`File.Enabled/MaxSize/MaxCount/Accept`。公开公告、商品详情
|
|
62
|
-
等匿名正文显式使用 `Limit=false`;内部正文使用 `true`。旧字段缺失配置时安全默认为私有桶,
|
|
63
|
-
图片默认压缩到约 500 KB、最长边 1920 px。
|
|
64
|
-
- 私有富文本只能持久化稳定对象标识,禁止把 HDFS 签名 URL、审计代理 Ticket 或 DiyToken 写入
|
|
65
|
-
HTML。每次查看/编辑按当前菜单、表、记录和字段权限换取新短效地址;外部匿名页面没有此权限
|
|
66
|
-
上下文,因此不能把私有 RichText 当作公开正文。普通用户通过当前表单新增/编辑授权后,后端
|
|
67
|
-
必须回读 `diy_field.Config.RichText.Limit` 决定公私桶;只改请求 `Limit=false` 不能绕过字段配置。
|
|
68
|
-
- 图片、文件和富文本上传必须携带 `FormEngineKey + FieldId + SysMenuId`,编辑记录再带
|
|
69
|
-
`FormDataId`,TableChild 再带父子授权上下文。后端不得按用户等级统一覆盖字段的“禁止匿名访问”;
|
|
70
|
-
无法回查字段与动作权限的普通上传才安全降级为私有桶。
|
|
45
|
+
7. 回读 `diy_field`、刷新 schema 缓存,再在真实新增/编辑/查看表单中验收。
|
|
46
|
+
|
|
47
|
+
## 上传字段配置(AI 生成时强制)
|
|
48
|
+
|
|
49
|
+
- 图片使用 `Config.ImgUpload`,至少明确 `Limit`、`Multiple`、`MaxCount`、`Preview`、
|
|
50
|
+
`MaxSize` 和 `Crop`;文件使用 `Config.FileUpload`,至少明确 `Limit`、`Multiple`、
|
|
51
|
+
`MaxCount`、`MaxSize`。完整键和值域读取 `references/component-catalog.md`。
|
|
52
|
+
- `ImgUpload.Preview` 未配置时默认开启压缩;普通业务图片优先保持开启。裁剪前的原图无论
|
|
53
|
+
展示图配置为公有或私有、是否压缩,都必须保存在 HDFS 私有桶,业务字段不得保存原图路径。
|
|
54
|
+
- `ImgUpload.Crop.Enabled` 只控制表单打开时是否默认选中裁剪。运行时的裁剪开关、存储范围、
|
|
55
|
+
单/多图数量、压缩状态和最大体积统一显示在紧凑上传面板中;不得把 `Enabled=false` 误解为
|
|
56
|
+
禁止用户裁剪。`Mode` 只允许 `free/fixed/select`。
|
|
57
|
+
- 图片和文件的拖放区都使用同一紧凑配置面板。`Multiple=true` 时必须设置业务合理的
|
|
58
|
+
`MaxCount`;`MaxSize` 单位为 MB,字段限制只能收紧租户/平台上限,不能放大。
|
|
59
|
+
- 富文本使用 `Config.RichText`:必须明确 `Limit`,并按需配置
|
|
60
|
+
`Image.Enabled/MaxSize/MaxCount/Preview/CompressMaxSize/CompressMaxWidth`、
|
|
61
|
+
`Video.Enabled/MaxSize/MaxCount`、`File.Enabled/MaxSize/MaxCount/Accept`。公开公告、商品详情
|
|
62
|
+
等匿名正文显式使用 `Limit=false`;内部正文使用 `true`。旧字段缺失配置时安全默认为私有桶,
|
|
63
|
+
图片默认压缩到约 500 KB、最长边 1920 px。
|
|
64
|
+
- 私有富文本只能持久化稳定对象标识,禁止把 HDFS 签名 URL、审计代理 Ticket 或 DiyToken 写入
|
|
65
|
+
HTML。每次查看/编辑按当前菜单、表、记录和字段权限换取新短效地址;外部匿名页面没有此权限
|
|
66
|
+
上下文,因此不能把私有 RichText 当作公开正文。普通用户通过当前表单新增/编辑授权后,后端
|
|
67
|
+
必须回读 `diy_field.Config.RichText.Limit` 决定公私桶;只改请求 `Limit=false` 不能绕过字段配置。
|
|
68
|
+
- 图片、文件和富文本上传必须携带 `FormEngineKey + FieldId + SysMenuId`,编辑记录再带
|
|
69
|
+
`FormDataId`,TableChild 再带父子授权上下文。后端不得按用户等级统一覆盖字段的“禁止匿名访问”;
|
|
70
|
+
无法回查字段与动作权限的普通上传才安全降级为私有桶。
|
|
71
71
|
|
|
72
72
|
新建表/模块时,除非用户显式指定或表单达到极重阈值(约 36+ 业务字段、2+ 子表或同等
|
|
73
73
|
重型控件密度),默认保存 `diy_table.FormOpenType=Dialog` 与 `FormOpenWidth=80%`。
|
|
@@ -170,9 +170,9 @@ MCP 建模只使用:
|
|
|
170
170
|
### MCP 创建 `TableChild` 的两阶段流程
|
|
171
171
|
|
|
172
172
|
1. 创建主表和独立子表;在子表创建真实外键(如 `VisitId varchar(50)`)。
|
|
173
|
-
2. 在子表为回查创建与物理隔离方式一致的索引:表有 `OsClient` 时通常为
|
|
174
|
-
`(OsClient, VisitId)`,独立租户表没有该列时为 `(VisitId)`。索引写入 Manifest
|
|
175
|
-
`tables[].indexes`,并以 `microi_get_table_indexes` 回读;物理字段回读失败时停止配置。
|
|
173
|
+
2. 在子表为回查创建与物理隔离方式一致的索引:表有 `OsClient` 时通常为
|
|
174
|
+
`(OsClient, VisitId)`,独立租户表没有该列时为 `(VisitId)`。索引写入 Manifest
|
|
175
|
+
`tables[].indexes`,并以 `microi_get_table_indexes` 回读;物理字段回读失败时停止配置。
|
|
176
176
|
3. 为子表创建绑定其 `diyTableId` 的隐藏 CRUD 菜单:`Display=0`、`AppDisplay=0`、
|
|
177
177
|
`HasChild=0`。
|
|
178
178
|
4. 在完整系统 Manifest 的主表字段声明:
|
|
@@ -219,17 +219,17 @@ MCP 建模只使用:
|
|
|
219
219
|
}
|
|
220
220
|
```
|
|
221
221
|
|
|
222
|
-
`FieldRelations` 使用紧凑格式 `[["父表字段","子表字段",true?], ...]`。全部关系用于新增回写和导入回填;第三位 `true` 仅标记参与导入反查父表的关系。后端兼容旧三项配置,新版前端会合并去重并在字段下次保存时清除旧键。
|
|
223
|
-
|
|
224
|
-
- `TableChild` 的父关联键为空、`null` 或仅空白时必须失败关闭:不得发起子表列表请求,服务端
|
|
225
|
-
收到空关联键也必须返回空集合,不能把空筛选忽略后退化成全表查询。旧客户端无法在请求层保证时,
|
|
226
|
-
应让控件在关联键有效前保持不挂载;`DisablePagination` 必须为 `false`,只作为第二道限流保护。
|
|
227
|
-
- `InFormV8`、字段进入事件和抽屉打开回调不得为预生成的父 `Id` 持久化默认子记录;用户取消
|
|
228
|
-
新增不会提交父表,会留下无法回滚的孤儿数据。默认行应保留在前端状态,或在父表保存成功后通过
|
|
229
|
-
幂等的后端事件创建;不需要真实明细时保持 0 行。
|
|
230
|
-
|
|
231
|
-
`OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
|
|
232
|
-
用于展示关联集合,不能用前端拼接代替数据权限。
|
|
222
|
+
`FieldRelations` 使用紧凑格式 `[["父表字段","子表字段",true?], ...]`。全部关系用于新增回写和导入回填;第三位 `true` 仅标记参与导入反查父表的关系。后端兼容旧三项配置,新版前端会合并去重并在字段下次保存时清除旧键。
|
|
223
|
+
|
|
224
|
+
- `TableChild` 的父关联键为空、`null` 或仅空白时必须失败关闭:不得发起子表列表请求,服务端
|
|
225
|
+
收到空关联键也必须返回空集合,不能把空筛选忽略后退化成全表查询。旧客户端无法在请求层保证时,
|
|
226
|
+
应让控件在关联键有效前保持不挂载;`DisablePagination` 必须为 `false`,只作为第二道限流保护。
|
|
227
|
+
- `InFormV8`、字段进入事件和抽屉打开回调不得为预生成的父 `Id` 持久化默认子记录;用户取消
|
|
228
|
+
新增不会提交父表,会留下无法回滚的孤儿数据。默认行应保留在前端状态,或在父表保存成功后通过
|
|
229
|
+
幂等的后端事件创建;不需要真实明细时保持 0 行。
|
|
230
|
+
|
|
231
|
+
`OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
|
|
232
|
+
用于展示关联集合,不能用前端拼接代替数据权限。
|
|
233
233
|
|
|
234
234
|
### 子表验收与复盘
|
|
235
235
|
|
|
@@ -262,9 +262,9 @@ MCP 建模只使用:
|
|
|
262
262
|
- 权限树勾选子菜单时必须补齐全部祖先菜单的 `Read` 权限,祖先不得被动继承子菜单的增删改查;
|
|
263
263
|
这样既保证路由可见,又避免扩大业务操作权限。
|
|
264
264
|
|
|
265
|
-
## 固定审计字段
|
|
266
|
-
|
|
267
|
-
- 核心协议迁移也必须遵守普通物理列允许 NULL。流式发布的 SaaS 开关、协议版本、栅栏、门禁代次和审计字段不能在旧迁移补跑时重新设为 NOT NULL;默认值、状态机、身份校验和完整审计由可信程序保证,只有主键 Id 保持数据库非空约束。
|
|
265
|
+
## 固定审计字段
|
|
266
|
+
|
|
267
|
+
- 核心协议迁移也必须遵守普通物理列允许 NULL。流式发布的 SaaS 开关、协议版本、栅栏、门禁代次和审计字段不能在旧迁移补跑时重新设为 NOT NULL;默认值、状态机、身份校验和完整审计由可信程序保证,只有主键 Id 保持数据库非空约束。
|
|
268
268
|
|
|
269
269
|
- `Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted` 是 DIY 表的正常固定字段。物理列存在时必须有对应 `diy_field` 元数据,不能长期出现在“异常字段修复”列表;`diy_table.DisplayDefaultField` 只控制设计器默认是否显示这些字段,不等于删除元数据。
|
|
270
270
|
- 统一通过平台修复接口或 MCP `microi_repair_audit_fields` 补齐/恢复元数据。修复必须按 `OsClient` 使用共享租约锁,可重复执行,只处理已存在的固定物理列,不借机执行 DDL,并在成功后清理字段缓存。
|
|
@@ -1,218 +1,218 @@
|
|
|
1
|
-
# 表单组件目录
|
|
2
|
-
|
|
3
|
-
控件名称以
|
|
4
|
-
`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json`
|
|
5
|
-
为当前事实源;物理类型以服务器/MCP 允许类型为准。
|
|
6
|
-
|
|
7
|
-
## 基础输入
|
|
8
|
-
|
|
9
|
-
| Component | 用途 | 推荐物理类型 |
|
|
10
|
-
|---|---|---|
|
|
11
|
-
| `Text` | 单行文本 | `varchar(200)` |
|
|
12
|
-
| `Guid` | GUID/只读标识 | `varchar(50)` |
|
|
13
|
-
| `Textarea` | 多行文本 | `mediumtext` |
|
|
14
|
-
| `NumberText` | 整数/金额/小数 | `int` 或 `decimal(18,2)` |
|
|
15
|
-
| `DateTime` | 日期时间选择 | `varchar(25)` |
|
|
16
|
-
| `Select` | 下拉单选 | `varchar(50)` |
|
|
17
|
-
| `MultipleSelect` | 下拉多选 | `varchar(500)` 或 `mediumtext` |
|
|
18
|
-
| `Radio` | 单选 | `varchar(50)` |
|
|
19
|
-
| `Checkbox` | 多选 | `varchar(500)` 或 `mediumtext` |
|
|
20
|
-
| `Switch` | 0/1 开关 | `int` |
|
|
21
|
-
| `Rate` | 评分 | `int` |
|
|
22
|
-
| `Progress` | 进度展示/输入 | `int` |
|
|
23
|
-
| `Slider` | 滑块 | `int` 或 `decimal(18,2)` |
|
|
24
|
-
| `ColorPicker` | 颜色 | `varchar(50)` |
|
|
25
|
-
| `AutoNumber` | 自动编号 | `varchar(200)` |
|
|
26
|
-
| `Button` | 表单动作按钮 | 通常 `varchar(50)`,不承载核心业务值 |
|
|
27
|
-
|
|
28
|
-
## 布局与内容
|
|
29
|
-
|
|
30
|
-
| Component | 用途 | 规则 |
|
|
31
|
-
|---|---|---|
|
|
32
|
-
| `Divider` | 分割线 | 布局字段,不进入关键查询 |
|
|
33
|
-
| `CollapseGroup` | 局部分组折叠 | 先读 `microi-form-layout` |
|
|
34
|
-
| `Tabs` | 字段级页签布局 | 整体多分区优先 `diy_table.Tabs` |
|
|
35
|
-
| `Alert` | 提示说明 | 不承载业务状态 |
|
|
36
|
-
| `StaticText` | 静态文本 | 不承载业务状态 |
|
|
37
|
-
| `Html` | 可信 HTML 展示 | 必须净化,不拼接不可信内容 |
|
|
38
|
-
| `RichText` | 富文本 | `mediumtext`;输出需净化 |
|
|
39
|
-
| `CodeEditor` | 代码/JSON/SQL 编辑 | `mediumtext`;通常 `FormWidth=24`;长配置表单使用 `Config.CodeEditor.DisplayMode=Dialog`,默认只渲染“编辑代码(N字)”按钮;代码工作台可用 `Inline` |
|
|
40
|
-
| `JsonTable` | JSON 表格 | `mediumtext`;定义结构与大小上限 |
|
|
41
|
-
|
|
42
|
-
## 文件与高级输入
|
|
43
|
-
|
|
44
|
-
| Component | 用途 | 推荐物理类型 |
|
|
45
|
-
|---|---|---|
|
|
46
|
-
| `ImgUpload` | 图片上传 | `mediumtext` |
|
|
47
|
-
| `FileUpload` | 文件上传 | `mediumtext` |
|
|
48
|
-
| `Autocomplete` | 自动完成 | `varchar(200)` |
|
|
49
|
-
| `TagInput` | 标签集合 | `varchar(500)` 或 `mediumtext` |
|
|
50
|
-
| `Transfer` | 穿梭框多选 | `mediumtext` |
|
|
51
|
-
| `Cascader` | 级联选择 | `varchar(500)` |
|
|
52
|
-
| `Address` | 省市区地址 | `varchar(500)` |
|
|
53
|
-
| `Department` | 部门选择 | `varchar(50)` |
|
|
54
|
-
| `SelectTree` | 树形选择 | `varchar(50)` 或 `varchar(500)` |
|
|
55
|
-
| `TreeCheckbox` | 树形权限多选 | `mediumtext` |
|
|
56
|
-
|
|
57
|
-
## 关联、地图与扩展
|
|
58
|
-
|
|
59
|
-
| Component | 用途 | 关键约束 |
|
|
60
|
-
|---|---|---|
|
|
61
|
-
| `OpenTable` | 弹出列表选择 | 配置保存字段、显示字段和固定查询范围 |
|
|
62
|
-
| `JoinTable` | 关联集合展示 | 查询与权限在服务端完成 |
|
|
63
|
-
| `JoinForm` | 嵌入一个独立记录的完整表单 | 主表字段保存一个目标 Id;目标表不能与当前表相同 |
|
|
64
|
-
| `TableChild` | 主表内嵌 0..N 条明细列表 | 独立子表、子表真实外键、隐藏子菜单、回查索引 |
|
|
65
|
-
| `Map` | 点位 | 高德/百度/腾讯;`Config.MapCompany=System/AMap/Baidu/Tencent`;凭据只进租户“安全与服务接入”,不得写字段配置或公开 SysConfig |
|
|
66
|
-
| `MapArea` | 区域 | 与 `Map` 共用供应商安全配置;`mediumtext` 保存 `Paths`,限制路径、点数和体积 |
|
|
67
|
-
| `Qrcode` | 二维码卡片展示 | 优先 `IsVirtual=1`;扫码原文另存普通 `varchar` 字段 |
|
|
68
|
-
| `FontAwesome` | 图标选择 | `varchar(200)` |
|
|
69
|
-
| `DevComponent` | 主前端定制 Vue 控件 | 仅用于长期复用且标准控件无法满足的场景 |
|
|
70
|
-
|
|
71
|
-
### `Map / MapArea` 运行时与安全边界
|
|
72
|
-
|
|
73
|
-
- 渲染事实源是 `Microi.Client/src/views/form-engine/diy-field-component/diy-map.vue`;公共错误分类与安全配置请求在同目录 `map-runtime.js`。
|
|
74
|
-
- 字段只保存 `Config.MapCompany`,值为 `System / AMap / Baidu / Tencent`。禁止把 Key、securityJsCode、Secret 或代理凭据写入 `diy_field.Config`、V8 前端事件、公开 `sys_config` 投影或前端构建变量。
|
|
75
|
-
- 租户凭据使用 `mci_system_setting` 的 `Map.*` 模板,在“系统设置 → 安全与服务接入”由超级管理员维护。运行时由可信后端按 DiyToken 租户和当前供应商做白名单投影,只返回一家的 `ClientKey`,必须 `no-store` 并拒绝访问密钥会话。
|
|
76
|
-
- 旧 `sys_config.AMapKey / AMapSecret / BaiduAK` 仅在对应新设置未启用时兼容回退。不要为迁移直接重新公开这些字段。
|
|
77
|
-
- 旧字段 `Config` 中的 `MapKey / MapSecret / AMapKey / AMapSecret / BaiduAK / TencentMapKey` 等明文属性不属于运行时配置;设计器保存地图配置时必须清除。迁移顺序固定为“先写入并启用租户 `Map.*` Secret,再清理字段元数据”。
|
|
78
|
-
- 浏览器 JS Key 天然可见,必须配置供应商域名/Referer 白名单;高德生产环境优先配置 `Map.AMap.ServiceHost`,存在代理时不得再返回 `SecurityJsCode`。
|
|
79
|
-
- 加载中、缺少 Key、运行时接口不匹配、SDK 网络/超时/鉴权/域名/WebGL/容器尺寸错误必须在控件区域显示明确原因码和重试入口,禁止只 `console.warn/error` 后留下空白地图。
|
|
80
|
-
- `Map` 保持 `{Name}_Lng / {Name}_Lat / {Name}.{Address,Center,Zoom}`;`MapArea` 保持 `{Name}.{Paths,Center,Zoom}`。三家供应商切换不得改变持久化格式。
|
|
81
|
-
|
|
82
|
-
### `JoinForm` 不是子表
|
|
83
|
-
|
|
84
|
-
- `JoinForm` 渲染 `diy-form`,通过 `Config.JoinForm.JoinFieldName` 从当前表单取出一个
|
|
85
|
-
目标记录 Id(也可用固定 `Id` / `_SearchEqual`),因此表达的是“这一条记录关联哪一条
|
|
86
|
-
独立记录”。当前表和目标表相同会被组件判为无效并拒绝渲染。
|
|
87
|
-
- `TableChild` 渲染 `diy-table`,通过 `Config.TableChildFkFieldName` 把子表列表限定在
|
|
88
|
-
当前父记录,并依赖 `TableChildTableId` 与 `TableChildSysMenuId` 完成列表和行级增删改。
|
|
89
|
-
- `TableChild` 控件字段通常不承担关系存储;真正的关系列位于子表,例如
|
|
90
|
-
`order_detail.OrderId`。不得创建主表 `DetailId` 后用 `JoinForm` 冒充明细。
|
|
91
|
-
- 生成前先问“一个父记录最多有几条目标记录”:答案可能大于 1 就选 `TableChild`;只有
|
|
92
|
-
明确恰好一个目标 Id 且需要嵌入完整目标表单时才选 `JoinForm`。不确定时先询问,不写入。
|
|
93
|
-
|
|
94
|
-
### `Qrcode` 的数据契约
|
|
95
|
-
|
|
96
|
-
- 字段 `Config.Qrcode` 只保存 `DisplayWidth`、`ShowDownload`、`DownloadText` 等外观项,
|
|
97
|
-
不指定扫码内容。表单运行态必须通过
|
|
98
|
-
`V8.FieldSet('<字段名>', 'DataAppend', payload)` 提供数据。
|
|
99
|
-
- `payload.Code` 为必填扫码原文,兼容小写 `code`;可选 `title`、`titleValue`、
|
|
100
|
-
`fields:[{Label,Value}]`(或旧版 `DataConfig:[{label,key}]`)、`Color`、
|
|
101
|
-
`CardColor`、`FileName/fileName`、`createTime`。
|
|
102
|
-
- 在 `InFormV8` 中设置时必须跳过 `V8.LoadMode === 'Design'`,否则设计器保存可能把
|
|
103
|
-
运行态 `DataAppend` 固化到字段模型。
|
|
104
|
-
- 表单控件会生成 PNG Data URL 并回写控件值以兼容旧页面。纯展示字段优先设
|
|
105
|
-
`IsVirtual=1`;若历史表已有物理字段,则通过 `V8.NotSaveField` 排除保存。不要把 Base64
|
|
106
|
-
图片写入短 `varchar`。需要持久化时保存原始 URL/编号,再把它传给 `Code`。
|
|
107
|
-
- 列表二维码列直接渲染原始字段值;表单二维码卡片读取 `DataAppend.Code`,两种场景不得
|
|
108
|
-
混为同一输入协议。
|
|
109
|
-
- 二维码中的 URL 仍需服务端鉴权,不得嵌入 DiyToken、访问密钥或长期业务秘密。
|
|
110
|
-
|
|
111
|
-
```js
|
|
112
|
-
if (V8.LoadMode !== 'Design') {
|
|
113
|
-
V8.FieldSet('Qrcode116', 'DataAppend', {
|
|
114
|
-
Code: V8.Form.OrderNo || V8.Form.Id || 'https://microi.net',
|
|
115
|
-
title: '订单二维码',
|
|
116
|
-
titleValue: V8.Form.OrderNo || '',
|
|
117
|
-
fields: [{ Label: '客户:', Value: V8.Form.CustomerName || '' }],
|
|
118
|
-
FileName: '订单-' + (V8.Form.OrderNo || '二维码')
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## 官网历史名称
|
|
124
|
-
|
|
125
|
-
中文官网可能仍展示 `PhoneSMS`、`Timeline` 等历史/业务扩展控件。生成新字段前
|
|
126
|
-
必须在当前 `diy-component-list.json`、目标租户 `diy_field.Component` 和实际客户端
|
|
127
|
-
中核对;未出现在当前控件清单的名称不得仅凭旧文档直接生成。
|
|
128
|
-
|
|
129
|
-
## 常用配置键
|
|
130
|
-
|
|
131
|
-
这些是 `diy_field.Config` 内的配置路径,不是可调用函数;保存后必须回读
|
|
132
|
-
`Config` 并刷新 Schema 缓存:
|
|
133
|
-
|
|
134
|
-
| 组件族 | 常用配置路径 |
|
|
135
|
-
|---|---|
|
|
136
|
-
| Textarea | `Textarea.DefaultRows` |
|
|
137
|
-
| TagInput | `TagInput.Placeholder`、`TagInput.Options`、`TagInput.MaxCount` |
|
|
138
|
-
| Transfer | `Transfer.LeftTitle`、`Transfer.RightTitle`、`Transfer.Filterable`、`Transfer.Options` |
|
|
139
|
-
| AutoNumber | `AutoNumber.DataRule`、`AutoNumber.CreateRule`,以及 `AutoNumberFixed`、`AutoNumberLength`、`AutoNumberFields` |
|
|
140
|
-
| Button | `Button.Type`、`Button.Icon`、`Button.Size`、`Button.PreviewCanClick`、`Button.RefreshTableAfterClick`、`Button.Loading`(`V8.FieldSet` 时使用 `Config.Button.Loading`) |
|
|
141
|
-
| Divider / StaticText | `Divider.Icon`、`StaticText.Content` |
|
|
142
|
-
| OpenTable | `OpenTable.BtnName`、`OpenTable.MultipleSelect`、`OpenTable.BeforeOpenV8`、`OpenTable.SubmitV8` |
|
|
143
|
-
| CodeEditor / JsonTable | `CodeEditor.Height`、`JsonTable.Columns`、`JsonTable.Columns[].Config` |
|
|
144
|
-
| JoinForm | `JoinForm.TableId`、`JoinForm.TableName`、`JoinForm.JoinFieldName`、`JoinForm.FormMode`、`JoinForm.Id`、`JoinForm._SearchEqual` |
|
|
145
|
-
| TableChild | Config 根节点的 `TableChildTableId`、`TableChildSysMenuId`、`TableChildFkFieldName`;`TableChild.PrimaryTableFieldName`(默认 `Id`)及分页/导入选项 |
|
|
146
|
-
| ImgUpload | `ImgUpload.Limit/Multiple/MaxCount/Tips/Preview/MaxSize/SaveFullPath`;`ImgUpload.Crop.Enabled` 仅表示默认开启,另有 `Mode=free/fixed/select`、`Ratio`、`CustomWidth/CustomHeight`、`AllowZoom/AllowRotate/AllowFlip`;运行时在上传面板内提供裁剪开关,裁剪弹层提供“不裁剪直接上传”;导出时会按最大图片数展开列 |
|
|
147
|
-
| FileUpload | `FileUpload.Limit/Multiple/MaxCount/Tips/MaxSize/SaveFullPath`,以及 Office 预览/编辑/版本配置;文件不使用 `ImgUpload.Preview/Crop` |
|
|
148
|
-
| RichText | `RichText.Limit`;`Image.Enabled/MaxSize/MaxCount/Preview/CompressMaxSize/CompressMaxWidth`;`Video.Enabled/MaxSize/MaxCount`;`File.Enabled/MaxSize/MaxCount/Accept`;私有正文存稳定标识而不是临时 URL |
|
|
149
|
-
| Qrcode | `Qrcode.DisplayWidth`、`Qrcode.ShowDownload`、`Qrcode.DownloadText`;扫码内容使用运行态 `DataAppend.Code` |
|
|
150
|
-
|
|
151
|
-
其余选择、树、上传、关联和布局选项以当前字段设计器和
|
|
152
|
-
`microi-db-schema/references/form-component-options.md` 为事实源;不要凭旧截图
|
|
153
|
-
发明配置键。
|
|
154
|
-
|
|
155
|
-
### `ImgUpload / FileUpload` 生成与运行时规则
|
|
156
|
-
|
|
157
|
-
```json
|
|
158
|
-
{
|
|
159
|
-
"ImgUpload": {
|
|
160
|
-
"Limit": true,
|
|
161
|
-
"Multiple": true,
|
|
162
|
-
"MaxCount": 6,
|
|
163
|
-
"Tips": "支持 JPG、PNG、WebP",
|
|
164
|
-
"Preview": true,
|
|
165
|
-
"MaxSize": 10,
|
|
166
|
-
"SaveFullPath": false,
|
|
167
|
-
"Crop": {
|
|
168
|
-
"Enabled": true,
|
|
169
|
-
"Mode": "select",
|
|
170
|
-
"Ratio": "16:9",
|
|
171
|
-
"CustomWidth": 1,
|
|
172
|
-
"CustomHeight": 1,
|
|
173
|
-
"AllowZoom": true,
|
|
174
|
-
"AllowRotate": true,
|
|
175
|
-
"AllowFlip": true
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
- `Limit=true` 表示字段配置为私有桶,`false` 表示配置为公有桶。普通用户有当前表单新增/编辑权限时也按此权威配置执行;运行时提交表、字段、菜单、记录上下文,后端回读 `diy_field.Config`,不得信任客户端 `Limit/Path`,也不得按用户等级统一强制私有。
|
|
182
|
-
- `Multiple=true` 时 `MaxCount` 必须是正整数;`MaxSize` 单位为 MB。`Preview` 未配置时按 `true` 压缩,普通列表、卡片、商品图不要关闭。
|
|
183
|
-
- `Crop.Enabled` 只决定运行时裁剪开关的初始状态;`false` 或缺失时用户仍可在紧凑上传面板主动开启。裁剪前原图始终进入 HDFS 私有桶,业务字段只保存展示图元数据。
|
|
184
|
-
- 图片和文件都把拖放提示、存储范围、单/多文件、最大数量、处理方式和最大体积合并到同一个紧凑面板;不要在字段外再生成重复说明卡片。
|
|
185
|
-
|
|
186
|
-
### `RichText` 生成与运行时规则
|
|
187
|
-
|
|
188
|
-
```json
|
|
189
|
-
{
|
|
190
|
-
"RichText": {
|
|
191
|
-
"EditorProduct": "WangEditor",
|
|
192
|
-
"Limit": true,
|
|
193
|
-
"Image": {
|
|
194
|
-
"Enabled": true,
|
|
195
|
-
"MaxSize": 20,
|
|
196
|
-
"MaxCount": 10,
|
|
197
|
-
"Preview": true,
|
|
198
|
-
"CompressMaxSize": 500,
|
|
199
|
-
"CompressMaxWidth": 1920
|
|
200
|
-
},
|
|
201
|
-
"Video": { "Enabled": true, "MaxSize": 200, "MaxCount": 3 },
|
|
202
|
-
"File": { "Enabled": true, "MaxSize": 100, "MaxCount": 10, "Accept": "" }
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
```
|
|
206
|
-
|
|
207
|
-
- 公开公告、商品详情等匿名网页内容显式用 `Limit=false`;内部公告、合同说明等用 `true`。旧字段缺失时默认私有,不能由 AI 猜成公有。
|
|
208
|
-
- 普通用户经当前表单新增/编辑授权后可以发布公有 RichText;后端按字段权威配置选择桶。缺少 `FormEngineKey/FieldId` 等可验证上下文的普通上传仍保持私有,不能用裸 `Limit=false` 代替授权。
|
|
209
|
-
- `MaxSize` 单位 MB,`CompressMaxSize` 单位 KB。图片压缩开启时原图仍先进入 HDFS 私有桶,正文只引用展示图。
|
|
210
|
-
- 私有正文只保存 `/__microi_richtext_private__/...` 稳定标识;运行时携带当前菜单、表、记录和字段上下文换取短效代理 URL,禁止把临时 Token/Ticket 回写字段。
|
|
211
|
-
- 普通文件通过富文本工具栏附件入口插入 `a.href`;私有授权只接受真实 `img/video/source.src` 与 `a.href` 的精确路径,不接受正文文字、`data-*` 或脚本标签。
|
|
212
|
-
- RichText 通常使用 `FormWidth=24`,配置摘要保持单行紧凑,不要再生成独立的大说明卡。
|
|
213
|
-
|
|
214
|
-
## 宽度与重字段
|
|
215
|
-
|
|
216
|
-
- 普通 Text、Select、NumberText、DateTime 默认不写 `FormWidth`。
|
|
217
|
-
- Textarea、RichText、CodeEditor、JsonTable、上传、子表、地图、布局和定制组件通常 `FormWidth=24`。
|
|
218
|
-
- 列表默认隐藏上传、富文本、地图、子表、布局等重字段;按需在详情中加载。
|
|
1
|
+
# 表单组件目录
|
|
2
|
+
|
|
3
|
+
控件名称以
|
|
4
|
+
`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json`
|
|
5
|
+
为当前事实源;物理类型以服务器/MCP 允许类型为准。
|
|
6
|
+
|
|
7
|
+
## 基础输入
|
|
8
|
+
|
|
9
|
+
| Component | 用途 | 推荐物理类型 |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| `Text` | 单行文本 | `varchar(200)` |
|
|
12
|
+
| `Guid` | GUID/只读标识 | `varchar(50)` |
|
|
13
|
+
| `Textarea` | 多行文本 | `mediumtext` |
|
|
14
|
+
| `NumberText` | 整数/金额/小数 | `int` 或 `decimal(18,2)` |
|
|
15
|
+
| `DateTime` | 日期时间选择 | `varchar(25)` |
|
|
16
|
+
| `Select` | 下拉单选 | `varchar(50)` |
|
|
17
|
+
| `MultipleSelect` | 下拉多选 | `varchar(500)` 或 `mediumtext` |
|
|
18
|
+
| `Radio` | 单选 | `varchar(50)` |
|
|
19
|
+
| `Checkbox` | 多选 | `varchar(500)` 或 `mediumtext` |
|
|
20
|
+
| `Switch` | 0/1 开关 | `int` |
|
|
21
|
+
| `Rate` | 评分 | `int` |
|
|
22
|
+
| `Progress` | 进度展示/输入 | `int` |
|
|
23
|
+
| `Slider` | 滑块 | `int` 或 `decimal(18,2)` |
|
|
24
|
+
| `ColorPicker` | 颜色 | `varchar(50)` |
|
|
25
|
+
| `AutoNumber` | 自动编号 | `varchar(200)` |
|
|
26
|
+
| `Button` | 表单动作按钮 | 通常 `varchar(50)`,不承载核心业务值 |
|
|
27
|
+
|
|
28
|
+
## 布局与内容
|
|
29
|
+
|
|
30
|
+
| Component | 用途 | 规则 |
|
|
31
|
+
|---|---|---|
|
|
32
|
+
| `Divider` | 分割线 | 布局字段,不进入关键查询 |
|
|
33
|
+
| `CollapseGroup` | 局部分组折叠 | 先读 `microi-form-layout` |
|
|
34
|
+
| `Tabs` | 字段级页签布局 | 整体多分区优先 `diy_table.Tabs` |
|
|
35
|
+
| `Alert` | 提示说明 | 不承载业务状态 |
|
|
36
|
+
| `StaticText` | 静态文本 | 不承载业务状态 |
|
|
37
|
+
| `Html` | 可信 HTML 展示 | 必须净化,不拼接不可信内容 |
|
|
38
|
+
| `RichText` | 富文本 | `mediumtext`;输出需净化 |
|
|
39
|
+
| `CodeEditor` | 代码/JSON/SQL 编辑 | `mediumtext`;通常 `FormWidth=24`;长配置表单使用 `Config.CodeEditor.DisplayMode=Dialog`,默认只渲染“编辑代码(N字)”按钮;代码工作台可用 `Inline` |
|
|
40
|
+
| `JsonTable` | JSON 表格 | `mediumtext`;定义结构与大小上限 |
|
|
41
|
+
|
|
42
|
+
## 文件与高级输入
|
|
43
|
+
|
|
44
|
+
| Component | 用途 | 推荐物理类型 |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `ImgUpload` | 图片上传 | `mediumtext` |
|
|
47
|
+
| `FileUpload` | 文件上传 | `mediumtext` |
|
|
48
|
+
| `Autocomplete` | 自动完成 | `varchar(200)` |
|
|
49
|
+
| `TagInput` | 标签集合 | `varchar(500)` 或 `mediumtext` |
|
|
50
|
+
| `Transfer` | 穿梭框多选 | `mediumtext` |
|
|
51
|
+
| `Cascader` | 级联选择 | `varchar(500)` |
|
|
52
|
+
| `Address` | 省市区地址 | `varchar(500)` |
|
|
53
|
+
| `Department` | 部门选择 | `varchar(50)` |
|
|
54
|
+
| `SelectTree` | 树形选择 | `varchar(50)` 或 `varchar(500)` |
|
|
55
|
+
| `TreeCheckbox` | 树形权限多选 | `mediumtext` |
|
|
56
|
+
|
|
57
|
+
## 关联、地图与扩展
|
|
58
|
+
|
|
59
|
+
| Component | 用途 | 关键约束 |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `OpenTable` | 弹出列表选择 | 配置保存字段、显示字段和固定查询范围 |
|
|
62
|
+
| `JoinTable` | 关联集合展示 | 查询与权限在服务端完成 |
|
|
63
|
+
| `JoinForm` | 嵌入一个独立记录的完整表单 | 主表字段保存一个目标 Id;目标表不能与当前表相同 |
|
|
64
|
+
| `TableChild` | 主表内嵌 0..N 条明细列表 | 独立子表、子表真实外键、隐藏子菜单、回查索引 |
|
|
65
|
+
| `Map` | 点位 | 高德/百度/腾讯;`Config.MapCompany=System/AMap/Baidu/Tencent`;凭据只进租户“安全与服务接入”,不得写字段配置或公开 SysConfig |
|
|
66
|
+
| `MapArea` | 区域 | 与 `Map` 共用供应商安全配置;`mediumtext` 保存 `Paths`,限制路径、点数和体积 |
|
|
67
|
+
| `Qrcode` | 二维码卡片展示 | 优先 `IsVirtual=1`;扫码原文另存普通 `varchar` 字段 |
|
|
68
|
+
| `FontAwesome` | 图标选择 | `varchar(200)` |
|
|
69
|
+
| `DevComponent` | 主前端定制 Vue 控件 | 仅用于长期复用且标准控件无法满足的场景 |
|
|
70
|
+
|
|
71
|
+
### `Map / MapArea` 运行时与安全边界
|
|
72
|
+
|
|
73
|
+
- 渲染事实源是 `Microi.Client/src/views/form-engine/diy-field-component/diy-map.vue`;公共错误分类与安全配置请求在同目录 `map-runtime.js`。
|
|
74
|
+
- 字段只保存 `Config.MapCompany`,值为 `System / AMap / Baidu / Tencent`。禁止把 Key、securityJsCode、Secret 或代理凭据写入 `diy_field.Config`、V8 前端事件、公开 `sys_config` 投影或前端构建变量。
|
|
75
|
+
- 租户凭据使用 `mci_system_setting` 的 `Map.*` 模板,在“系统设置 → 安全与服务接入”由超级管理员维护。运行时由可信后端按 DiyToken 租户和当前供应商做白名单投影,只返回一家的 `ClientKey`,必须 `no-store` 并拒绝访问密钥会话。
|
|
76
|
+
- 旧 `sys_config.AMapKey / AMapSecret / BaiduAK` 仅在对应新设置未启用时兼容回退。不要为迁移直接重新公开这些字段。
|
|
77
|
+
- 旧字段 `Config` 中的 `MapKey / MapSecret / AMapKey / AMapSecret / BaiduAK / TencentMapKey` 等明文属性不属于运行时配置;设计器保存地图配置时必须清除。迁移顺序固定为“先写入并启用租户 `Map.*` Secret,再清理字段元数据”。
|
|
78
|
+
- 浏览器 JS Key 天然可见,必须配置供应商域名/Referer 白名单;高德生产环境优先配置 `Map.AMap.ServiceHost`,存在代理时不得再返回 `SecurityJsCode`。
|
|
79
|
+
- 加载中、缺少 Key、运行时接口不匹配、SDK 网络/超时/鉴权/域名/WebGL/容器尺寸错误必须在控件区域显示明确原因码和重试入口,禁止只 `console.warn/error` 后留下空白地图。
|
|
80
|
+
- `Map` 保持 `{Name}_Lng / {Name}_Lat / {Name}.{Address,Center,Zoom}`;`MapArea` 保持 `{Name}.{Paths,Center,Zoom}`。三家供应商切换不得改变持久化格式。
|
|
81
|
+
|
|
82
|
+
### `JoinForm` 不是子表
|
|
83
|
+
|
|
84
|
+
- `JoinForm` 渲染 `diy-form`,通过 `Config.JoinForm.JoinFieldName` 从当前表单取出一个
|
|
85
|
+
目标记录 Id(也可用固定 `Id` / `_SearchEqual`),因此表达的是“这一条记录关联哪一条
|
|
86
|
+
独立记录”。当前表和目标表相同会被组件判为无效并拒绝渲染。
|
|
87
|
+
- `TableChild` 渲染 `diy-table`,通过 `Config.TableChildFkFieldName` 把子表列表限定在
|
|
88
|
+
当前父记录,并依赖 `TableChildTableId` 与 `TableChildSysMenuId` 完成列表和行级增删改。
|
|
89
|
+
- `TableChild` 控件字段通常不承担关系存储;真正的关系列位于子表,例如
|
|
90
|
+
`order_detail.OrderId`。不得创建主表 `DetailId` 后用 `JoinForm` 冒充明细。
|
|
91
|
+
- 生成前先问“一个父记录最多有几条目标记录”:答案可能大于 1 就选 `TableChild`;只有
|
|
92
|
+
明确恰好一个目标 Id 且需要嵌入完整目标表单时才选 `JoinForm`。不确定时先询问,不写入。
|
|
93
|
+
|
|
94
|
+
### `Qrcode` 的数据契约
|
|
95
|
+
|
|
96
|
+
- 字段 `Config.Qrcode` 只保存 `DisplayWidth`、`ShowDownload`、`DownloadText` 等外观项,
|
|
97
|
+
不指定扫码内容。表单运行态必须通过
|
|
98
|
+
`V8.FieldSet('<字段名>', 'DataAppend', payload)` 提供数据。
|
|
99
|
+
- `payload.Code` 为必填扫码原文,兼容小写 `code`;可选 `title`、`titleValue`、
|
|
100
|
+
`fields:[{Label,Value}]`(或旧版 `DataConfig:[{label,key}]`)、`Color`、
|
|
101
|
+
`CardColor`、`FileName/fileName`、`createTime`。
|
|
102
|
+
- 在 `InFormV8` 中设置时必须跳过 `V8.LoadMode === 'Design'`,否则设计器保存可能把
|
|
103
|
+
运行态 `DataAppend` 固化到字段模型。
|
|
104
|
+
- 表单控件会生成 PNG Data URL 并回写控件值以兼容旧页面。纯展示字段优先设
|
|
105
|
+
`IsVirtual=1`;若历史表已有物理字段,则通过 `V8.NotSaveField` 排除保存。不要把 Base64
|
|
106
|
+
图片写入短 `varchar`。需要持久化时保存原始 URL/编号,再把它传给 `Code`。
|
|
107
|
+
- 列表二维码列直接渲染原始字段值;表单二维码卡片读取 `DataAppend.Code`,两种场景不得
|
|
108
|
+
混为同一输入协议。
|
|
109
|
+
- 二维码中的 URL 仍需服务端鉴权,不得嵌入 DiyToken、访问密钥或长期业务秘密。
|
|
110
|
+
|
|
111
|
+
```js
|
|
112
|
+
if (V8.LoadMode !== 'Design') {
|
|
113
|
+
V8.FieldSet('Qrcode116', 'DataAppend', {
|
|
114
|
+
Code: V8.Form.OrderNo || V8.Form.Id || 'https://microi.net',
|
|
115
|
+
title: '订单二维码',
|
|
116
|
+
titleValue: V8.Form.OrderNo || '',
|
|
117
|
+
fields: [{ Label: '客户:', Value: V8.Form.CustomerName || '' }],
|
|
118
|
+
FileName: '订单-' + (V8.Form.OrderNo || '二维码')
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## 官网历史名称
|
|
124
|
+
|
|
125
|
+
中文官网可能仍展示 `PhoneSMS`、`Timeline` 等历史/业务扩展控件。生成新字段前
|
|
126
|
+
必须在当前 `diy-component-list.json`、目标租户 `diy_field.Component` 和实际客户端
|
|
127
|
+
中核对;未出现在当前控件清单的名称不得仅凭旧文档直接生成。
|
|
128
|
+
|
|
129
|
+
## 常用配置键
|
|
130
|
+
|
|
131
|
+
这些是 `diy_field.Config` 内的配置路径,不是可调用函数;保存后必须回读
|
|
132
|
+
`Config` 并刷新 Schema 缓存:
|
|
133
|
+
|
|
134
|
+
| 组件族 | 常用配置路径 |
|
|
135
|
+
|---|---|
|
|
136
|
+
| Textarea | `Textarea.DefaultRows` |
|
|
137
|
+
| TagInput | `TagInput.Placeholder`、`TagInput.Options`、`TagInput.MaxCount` |
|
|
138
|
+
| Transfer | `Transfer.LeftTitle`、`Transfer.RightTitle`、`Transfer.Filterable`、`Transfer.Options` |
|
|
139
|
+
| AutoNumber | `AutoNumber.DataRule`、`AutoNumber.CreateRule`,以及 `AutoNumberFixed`、`AutoNumberLength`、`AutoNumberFields` |
|
|
140
|
+
| Button | `Button.Type`、`Button.Icon`、`Button.Size`、`Button.PreviewCanClick`、`Button.RefreshTableAfterClick`、`Button.Loading`(`V8.FieldSet` 时使用 `Config.Button.Loading`) |
|
|
141
|
+
| Divider / StaticText | `Divider.Icon`、`StaticText.Content` |
|
|
142
|
+
| OpenTable | `OpenTable.BtnName`、`OpenTable.MultipleSelect`、`OpenTable.BeforeOpenV8`、`OpenTable.SubmitV8` |
|
|
143
|
+
| CodeEditor / JsonTable | `CodeEditor.Height`、`JsonTable.Columns`、`JsonTable.Columns[].Config` |
|
|
144
|
+
| JoinForm | `JoinForm.TableId`、`JoinForm.TableName`、`JoinForm.JoinFieldName`、`JoinForm.FormMode`、`JoinForm.Id`、`JoinForm._SearchEqual` |
|
|
145
|
+
| TableChild | Config 根节点的 `TableChildTableId`、`TableChildSysMenuId`、`TableChildFkFieldName`;`TableChild.PrimaryTableFieldName`(默认 `Id`)及分页/导入选项 |
|
|
146
|
+
| ImgUpload | `ImgUpload.Limit/Multiple/MaxCount/Tips/Preview/MaxSize/SaveFullPath`;`ImgUpload.Crop.Enabled` 仅表示默认开启,另有 `Mode=free/fixed/select`、`Ratio`、`CustomWidth/CustomHeight`、`AllowZoom/AllowRotate/AllowFlip`;运行时在上传面板内提供裁剪开关,裁剪弹层提供“不裁剪直接上传”;导出时会按最大图片数展开列 |
|
|
147
|
+
| FileUpload | `FileUpload.Limit/Multiple/MaxCount/Tips/MaxSize/SaveFullPath`,以及 Office 预览/编辑/版本配置;文件不使用 `ImgUpload.Preview/Crop` |
|
|
148
|
+
| RichText | `RichText.Limit`;`Image.Enabled/MaxSize/MaxCount/Preview/CompressMaxSize/CompressMaxWidth`;`Video.Enabled/MaxSize/MaxCount`;`File.Enabled/MaxSize/MaxCount/Accept`;私有正文存稳定标识而不是临时 URL |
|
|
149
|
+
| Qrcode | `Qrcode.DisplayWidth`、`Qrcode.ShowDownload`、`Qrcode.DownloadText`;扫码内容使用运行态 `DataAppend.Code` |
|
|
150
|
+
|
|
151
|
+
其余选择、树、上传、关联和布局选项以当前字段设计器和
|
|
152
|
+
`microi-db-schema/references/form-component-options.md` 为事实源;不要凭旧截图
|
|
153
|
+
发明配置键。
|
|
154
|
+
|
|
155
|
+
### `ImgUpload / FileUpload` 生成与运行时规则
|
|
156
|
+
|
|
157
|
+
```json
|
|
158
|
+
{
|
|
159
|
+
"ImgUpload": {
|
|
160
|
+
"Limit": true,
|
|
161
|
+
"Multiple": true,
|
|
162
|
+
"MaxCount": 6,
|
|
163
|
+
"Tips": "支持 JPG、PNG、WebP",
|
|
164
|
+
"Preview": true,
|
|
165
|
+
"MaxSize": 10,
|
|
166
|
+
"SaveFullPath": false,
|
|
167
|
+
"Crop": {
|
|
168
|
+
"Enabled": true,
|
|
169
|
+
"Mode": "select",
|
|
170
|
+
"Ratio": "16:9",
|
|
171
|
+
"CustomWidth": 1,
|
|
172
|
+
"CustomHeight": 1,
|
|
173
|
+
"AllowZoom": true,
|
|
174
|
+
"AllowRotate": true,
|
|
175
|
+
"AllowFlip": true
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
- `Limit=true` 表示字段配置为私有桶,`false` 表示配置为公有桶。普通用户有当前表单新增/编辑权限时也按此权威配置执行;运行时提交表、字段、菜单、记录上下文,后端回读 `diy_field.Config`,不得信任客户端 `Limit/Path`,也不得按用户等级统一强制私有。
|
|
182
|
+
- `Multiple=true` 时 `MaxCount` 必须是正整数;`MaxSize` 单位为 MB。`Preview` 未配置时按 `true` 压缩,普通列表、卡片、商品图不要关闭。
|
|
183
|
+
- `Crop.Enabled` 只决定运行时裁剪开关的初始状态;`false` 或缺失时用户仍可在紧凑上传面板主动开启。裁剪前原图始终进入 HDFS 私有桶,业务字段只保存展示图元数据。
|
|
184
|
+
- 图片和文件都把拖放提示、存储范围、单/多文件、最大数量、处理方式和最大体积合并到同一个紧凑面板;不要在字段外再生成重复说明卡片。
|
|
185
|
+
|
|
186
|
+
### `RichText` 生成与运行时规则
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{
|
|
190
|
+
"RichText": {
|
|
191
|
+
"EditorProduct": "WangEditor",
|
|
192
|
+
"Limit": true,
|
|
193
|
+
"Image": {
|
|
194
|
+
"Enabled": true,
|
|
195
|
+
"MaxSize": 20,
|
|
196
|
+
"MaxCount": 10,
|
|
197
|
+
"Preview": true,
|
|
198
|
+
"CompressMaxSize": 500,
|
|
199
|
+
"CompressMaxWidth": 1920
|
|
200
|
+
},
|
|
201
|
+
"Video": { "Enabled": true, "MaxSize": 200, "MaxCount": 3 },
|
|
202
|
+
"File": { "Enabled": true, "MaxSize": 100, "MaxCount": 10, "Accept": "" }
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
- 公开公告、商品详情等匿名网页内容显式用 `Limit=false`;内部公告、合同说明等用 `true`。旧字段缺失时默认私有,不能由 AI 猜成公有。
|
|
208
|
+
- 普通用户经当前表单新增/编辑授权后可以发布公有 RichText;后端按字段权威配置选择桶。缺少 `FormEngineKey/FieldId` 等可验证上下文的普通上传仍保持私有,不能用裸 `Limit=false` 代替授权。
|
|
209
|
+
- `MaxSize` 单位 MB,`CompressMaxSize` 单位 KB。图片压缩开启时原图仍先进入 HDFS 私有桶,正文只引用展示图。
|
|
210
|
+
- 私有正文只保存 `/__microi_richtext_private__/...` 稳定标识;运行时携带当前菜单、表、记录和字段上下文换取短效代理 URL,禁止把临时 Token/Ticket 回写字段。
|
|
211
|
+
- 普通文件通过富文本工具栏附件入口插入 `a.href`;私有授权只接受真实 `img/video/source.src` 与 `a.href` 的精确路径,不接受正文文字、`data-*` 或脚本标签。
|
|
212
|
+
- RichText 通常使用 `FormWidth=24`,配置摘要保持单行紧凑,不要再生成独立的大说明卡。
|
|
213
|
+
|
|
214
|
+
## 宽度与重字段
|
|
215
|
+
|
|
216
|
+
- 普通 Text、Select、NumberText、DateTime 默认不写 `FormWidth`。
|
|
217
|
+
- Textarea、RichText、CodeEditor、JsonTable、上传、子表、地图、布局和定制组件通常 `FormWidth=24`。
|
|
218
|
+
- 列表默认隐藏上传、富文本、地图、子表、布局等重字段;按需在详情中加载。
|