@microi.net/cli 5.5.9 → 5.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +99 -99
  10. package/scripts/microi-cli.js +39 -36
  11. package/scripts/microi-skills.meta.json +341 -338
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +3566 -3566
  14. package/skills/README.md +4 -4
  15. package/skills/ai-engine/SKILL.md +45 -45
  16. package/skills/ai-platform-governance/SKILL.md +177 -177
  17. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
  18. package/skills/app-store/SKILL.md +21 -4
  19. package/skills/business-blueprint/SKILL.md +85 -85
  20. package/skills/datasource-engine/SKILL.md +91 -91
  21. package/skills/dos-orm/SKILL.md +15 -0
  22. package/skills/dos-orm/references/api-reference.md +229 -229
  23. package/skills/email-engine/SKILL.md +80 -80
  24. package/skills/email-engine/references/v8-email.md +34 -34
  25. package/skills/job-engine/SKILL.md +154 -154
  26. package/skills/message-notification/SKILL.md +27 -1
  27. package/skills/message-notification/agents/openai.yaml +5 -5
  28. package/skills/message-notification/references/contracts.md +102 -102
  29. package/skills/microi-ai-app-auth.js +652 -652
  30. package/skills/microi-ai-application/SKILL.md +102 -102
  31. package/skills/microi-ai-application/agents/openai.yaml +4 -4
  32. package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
  33. package/skills/microi-client-frontend/SKILL.md +47 -41
  34. 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 +4 -4
  35. 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 +30 -30
  36. 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 +58 -58
  37. package/skills/microi-codex/SKILL.md +2 -0
  38. package/skills/microi-codex-installer/SKILL.md +216 -216
  39. package/skills/microi-codex-installer/agents/openai.yaml +7 -7
  40. package/skills/microi-datasource-mapping/SKILL.md +67 -67
  41. package/skills/microi-db-schema/SKILL.md +6 -6
  42. package/skills/microi-db-schema/references/core-tables.md +18 -18
  43. package/skills/microi-db-schema/references/form-component-options.md +256 -256
  44. package/skills/microi-db-schema/references/schema-overview.md +11 -11
  45. package/skills/microi-db-schema/references/schema.md +46 -46
  46. package/skills/microi-db-schema/references/table-catalog.md +57 -57
  47. package/skills/microi-deployment/SKILL.md +18 -1
  48. package/skills/microi-deployment/references/deployment-matrix.md +101 -101
  49. package/skills/microi-docs-coverage/SKILL.md +10 -0
  50. package/skills/microi-docs-coverage/references/capability-map.md +3 -2
  51. package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
  52. package/skills/microi-form-engine/SKILL.md +27 -3
  53. package/skills/microi-form-engine/references/component-catalog.md +218 -218
  54. package/skills/microi-form-engine/references/data-source-events.md +124 -124
  55. package/skills/microi-form-layout/SKILL.md +13 -13
  56. 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
  57. package/skills/microi-frontend-sdk/SKILL.md +4 -4
  58. 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
  59. package/skills/microi-left-right-layout/SKILL.md +141 -141
  60. package/skills/microi-microservice/SKILL.md +2 -1
  61. package/skills/microi-microservice/references/runtime-delivery.md +278 -278
  62. 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
  63. package/skills/microi-solution-quotation/SKILL.md +78 -78
  64. package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
  65. package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
  66. package/skills/microi-sso/SKILL.md +6 -0
  67. package/skills/microi-sso/references/acceptance.md +49 -49
  68. package/skills/microi-sso/references/configuration-and-security.md +53 -53
  69. package/skills/microi-sso/references/inbound.md +53 -53
  70. package/skills/microi-sso/references/outbound.md +39 -39
  71. package/skills/microi-system-delivery/SKILL.md +5 -4
  72. 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 +7 -2
  73. package/skills/microi-ui/SKILL.md +7 -2
  74. package/skills/microi-uniapp-frontend/SKILL.md +134 -134
  75. 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
  76. 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
  77. package/skills/module-engine/SKILL.md +30 -14
  78. package/skills/ocr-engine/SKILL.md +2 -2
  79. package/skills/ocr-engine/agents/openai.yaml +1 -1
  80. package/skills/page-engine/SKILL.md +28 -28
  81. 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
  82. 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
  83. package/skills/performance-testing/SKILL.md +120 -120
  84. package/skills/playwright-e2e/SKILL.md +84 -84
  85. 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
  86. 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
  87. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +20 -20
  88. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +69 -69
  89. package/skills/print-engine/SKILL.md +11 -3
  90. package/skills/production-readonly-audit/SKILL.md +41 -41
  91. package/skills/report-engine/SKILL.md +71 -71
  92. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
  93. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
  94. package/skills/scripts/sync-embedded-skills.mjs +46 -0
  95. package/skills/scripts/validate-progressive-disclosure.mjs +8 -3
  96. package/skills/search-engine/SKILL.md +75 -75
  97. package/skills/spider-engine/SKILL.md +190 -190
  98. package/skills/system-observability/SKILL.md +169 -157
  99. package/skills/system-observability/references/memory-incident-triage.md +73 -73
  100. package/skills/translate-engine/SKILL.md +1 -1
  101. package/skills/ui-design/SKILL.md +3 -1
  102. package/skills/uniapp-mall-assets/SKILL.md +170 -170
  103. package/skills/unity-integration/SKILL.md +155 -155
  104. package/skills/unity-integration/agents/openai.yaml +4 -4
  105. package/skills/unity-integration/references/ai-app-delivery.md +103 -103
  106. package/skills/unity-integration/references/sdk-api.md +82 -82
  107. package/skills/unity-integration/references/toolbox-migration.md +66 -66
  108. package/skills/unity-integration/references/webgl-hosting.md +57 -57
  109. package/skills/v8-api-config/SKILL.md +4 -0
  110. package/skills/v8-cache-pattern/SKILL.md +306 -306
  111. package/skills/v8-crud-api/SKILL.md +29 -29
  112. 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
  113. package/skills/v8-debugging/SKILL.md +143 -143
  114. package/skills/v8-explorer-tree/SKILL.md +64 -64
  115. 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
  116. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +118 -118
  117. 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
  118. package/skills/v8-file-upload/SKILL.md +5 -2
  119. 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 +2 -2
  120. 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
  121. package/skills/v8-formengine-http/SKILL.md +126 -108
  122. package/skills/v8-frontend-events/SKILL.md +22 -22
  123. package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
  124. package/skills/v8-frontend-events/references/bluetooth-print.md +247 -247
  125. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +50 -50
  126. package/skills/v8-http-integration/SKILL.md +106 -106
  127. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +31 -31
  128. 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
  129. package/skills/v8-image-processing/SKILL.md +190 -190
  130. package/skills/v8-image-processing/agents/openai.yaml +4 -4
  131. package/skills/v8-image-processing/references/api-reference.md +623 -623
  132. package/skills/v8-menu-buttons/SKILL.md +103 -103
  133. 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
  134. 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
  135. 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
  136. package/skills/v8-mongodb/SKILL.md +65 -65
  137. package/skills/v8-mq-mqtt/SKILL.md +175 -175
  138. package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
  139. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +137 -137
  140. package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
  141. package/skills/v8-saas-multi-tenant/SKILL.md +223 -223
  142. package/skills/v8-security/SKILL.md +1 -1
  143. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +122 -122
  144. package/skills/v8-sql-query/SKILL.md +7 -5
  145. package/skills/v8-table-event/SKILL.md +9 -2
  146. 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 +1 -1
  147. 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
  148. package/skills/v8-tcp-integration/SKILL.md +1 -1
  149. package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
  150. package/skills/v8-template-engine/SKILL.md +59 -59
  151. package/skills/v8-utilities/SKILL.md +92 -92
  152. package/skills/v8-utilities/references/client-api-index.md +143 -143
  153. package/skills/v8-utilities/references/platform-http-routes.md +83 -83
  154. package/skills/v8-utilities/references/server-api-index.md +74 -74
  155. package/skills/v8-workflow/SKILL.md +13 -4
  156. package/skills/vision-engine/SKILL.md +19 -19
  157. package/skills/vision-engine/references/architecture-and-acceptance.md +34 -34
  158. package/skills/workspace-conventions/SKILL.md +35 -12
  159. 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 +2 -2
  160. 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
  161. 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
@@ -44,6 +44,23 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
44
44
  6. 绑定菜单后补齐/允许平台推断列表列、搜索列、隐藏列、排序列、移动端列和默认排序。
45
45
  7. 回读 `diy_field`、刷新 schema 缓存,再在真实新增/编辑/查看表单中验收。
46
46
 
47
+ ## 原生查询主库策略
48
+
49
+ - 对不能接受副本延迟的权限关系等表,显式配置 `diy_table.ReadPrimary=1`;普通表保持
50
+ `NULL/0`。只能从可信表元数据选择连接,禁止让查询请求的 `ReadPrimary`、`TableModel`
51
+ 或 `DataBaseId` 控制主库/副本。此配置不扩大菜单、表、记录或字段权限。
52
+ - 原生 Get、List、Count/CountBatch、SUM 批量与回退、Tree 子计数和 Export 必须共用
53
+ 目标表所属数据库的 writer 选择;扩展库不得误回租户基础库。主库不可用或配置非法必须
54
+ 失败,不能以副本或0计数伪装成功。直接调用 `V8.DbRead` 的语义不变。
55
+ - 显式 `DbTrans` 保留,不为主库策略跳出事务;父事务旧 RR 快照仍可能看见旧授权关系,
56
+ 不能声称仅开启本字段就实现与撤权原子串行。需要实时授权时采用独立受控主库身份读取。
57
+ - 标准 `microi_create_table`、`microi_update_table` 和 Manifest `tables[].readPrimary`
58
+ 支持 `null/0/1`,省略保持已有配置,显式 `null` 清回缺省。先升级后端并安装正式表单
59
+ 引擎字段,再配置;不通过定制 `.NET` 启动迁移或原始 SQL 补字段。
60
+ - 元数据冷回源使用主库,写后清表缓存并回读。验收分别证明字段定义、可空物理列、配置值、
61
+ 普通身份真实 Rows/Count/SUM/Tree/Export 与撤权边界;离线会话选择测试不能冒充复制延迟
62
+ 或七种数据库实机测试。所有新普通表字段保持可空,不把已有表批量设为主库。
63
+
47
64
  ## 上传字段配置(AI 生成时强制)
48
65
 
49
66
  - 图片使用 `Config.ImgUpload`,至少明确 `Limit`、`Multiple`、`MaxCount`、`Preview`、
@@ -100,10 +117,17 @@ Drawer 只服务超长复杂表单,不能作为所有 CRUD 模块的模板默
100
117
  - 兼容旧模块 Hero 时仅迁移视觉、`Source=Field` 或显式记录作用域指标;列表总数、分类数量和
101
118
  未引用当前 `Form/RecordId` 的全局接口统计不得进入单记录 Banner,缺省时回到当前记录和
102
119
  授权 `TableChild` 的语义统计。
103
- - 未配置的存量表由运行时按字段类型智能推断,不能因为物理字段为空而隐藏或展示空壳。
104
- 只有 `FormBannerEnabled=0` 才隐藏。
120
+ - 未配置的存量表由运行时按字段类型智能推断,不能因为物理字段为空而隐藏或展示空壳。
121
+ 只有 `FormBannerEnabled=0` 才隐藏。
122
+ - 字段绑定须区分省略/`NULL` 与显式空字符串:`titleField/subtitleField/imageField/backgroundField`
123
+ 省略或 `NULL` 表示未选择,允许兼容推断;显式 `""` 表示不绑定该字段,不能被推断值或旧别名
124
+ 覆盖。取消标题/图片字段后仍保留表单名称/默认图标回退。完整验收须同时使用包含该语义的 MCP
125
+ 与平台前端,逐项回读空字符串并验证实际表单;不能只看到写入 `Code=1` 就宣称生效。
105
126
  - 完整系统 Manifest 使用 `tables[].formBanner`;未提供时 `microi_generate_system` 仍须写入
106
- 类型感知的默认值。逐步创建字段后调用 `microi_configure_form_banner` 并回读验证。
127
+ 类型感知的默认值。逐步创建字段后调用 `microi_configure_form_banner` 并回读验证。
128
+ - `microi_generate_system` 的最终验收与 `microi_validate_system` 必须逐表回读 Banner 语义字段;
129
+ 写入返回成功、结构验收 `Code=1` 都不能代替已持久化配置,`Data.Passed=false` 仍视为失败。
130
+ 旧库缺少 Banner 物理列时先完成平台正式升级,再配置和重新验收,不直接执行 SQL 补列。
107
131
  - 表单设计器验收必须覆盖有/无图片、有/无统计、子表完整聚合、接口失败回退、浅色、深色、
108
132
  PC 和窄屏,并检查文字对比度以及不存在技术字段伪统计。
109
133
 
@@ -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
+ - 列表默认隐藏上传、富文本、地图、子表、布局等重字段;按需在详情中加载。