@microi.net/cli 4.9.6 → 4.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) 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 +6 -5
  7. package/package.json +1 -1
  8. package/scripts/mcp-server.js +83 -83
  9. package/scripts/microi-cli.js +55 -85
  10. package/scripts/microi-codex-broker.js +418 -0
  11. package/scripts/microi-codex-router.js +129 -65
  12. package/scripts/microi-skills.meta.json +310 -151
  13. package/skills/.microi-skills-version.json +2 -2
  14. package/skills/.progressive-disclosure-manifest.json +3566 -0
  15. package/skills/ai-platform-governance/SKILL.md +21 -166
  16. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -0
  17. package/skills/microi-client-frontend/SKILL.md +17 -434
  18. 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 -0
  19. 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 +178 -0
  20. 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 +144 -0
  21. package/skills/microi-db-schema/SKILL.md +3 -3
  22. package/skills/microi-db-schema/references/schema-overview.md +1 -1
  23. package/skills/microi-db-schema/references/schema.md +1 -1
  24. package/skills/microi-db-schema/references/table-catalog.md +1 -1
  25. package/skills/microi-form-engine/SKILL.md +1 -1
  26. package/skills/microi-form-layout/SKILL.md +19 -225
  27. 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 -0
  28. package/skills/microi-frontend-sdk/SKILL.md +17 -151
  29. 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 +171 -0
  30. package/skills/microi-mobile-app-quality/SKILL.md +22 -288
  31. 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 +209 -0
  32. 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 +117 -0
  33. package/skills/microi-system-delivery/SKILL.md +16 -380
  34. package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +186 -0
  35. 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 +210 -0
  36. package/skills/microi-ui/SKILL.md +19 -169
  37. 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 -0
  38. package/skills/microi-uniapp-frontend/SKILL.md +26 -335
  39. 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 -0
  40. 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 -0
  41. package/skills/page-engine/SKILL.md +23 -271
  42. 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 -0
  43. 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 -0
  44. package/skills/playwright-e2e/SKILL.md +24 -590
  45. 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 -0
  46. 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 -0
  47. package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -0
  48. package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +69 -0
  49. package/skills/scripts/optimize-progressive-disclosure.mjs +204 -0
  50. package/skills/scripts/refresh-progressive-disclosure.mjs +64 -0
  51. package/skills/scripts/validate-progressive-disclosure.mjs +52 -0
  52. package/skills/ui-design/SKILL.md +26 -1461
  53. 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 -0
  54. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +155 -0
  55. 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 -0
  56. 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 -0
  57. 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 -0
  58. 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 -0
  59. 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 -0
  60. package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -0
  61. package/skills/v8-crud-api/SKILL.md +20 -245
  62. 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 -0
  63. 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 -0
  64. package/skills/v8-export-import/SKILL.md +15 -425
  65. 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 -0
  66. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -0
  67. 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 -0
  68. package/skills/v8-file-upload/SKILL.md +16 -354
  69. 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 +227 -0
  70. 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 +149 -0
  71. package/skills/v8-frontend-events/SKILL.md +19 -205
  72. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -0
  73. package/skills/v8-http-integration/SKILL.md +14 -236
  74. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -0
  75. 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 -0
  76. package/skills/v8-menu-buttons/SKILL.md +15 -511
  77. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +221 -0
  78. 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 +224 -0
  79. 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 -0
  80. package/skills/v8-mq-mqtt/SKILL.md +11 -175
  81. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -0
  82. package/skills/v8-security/SKILL.md +16 -329
  83. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +199 -0
  84. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -0
  85. package/skills/v8-table-event/SKILL.md +16 -236
  86. package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -0
  87. 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 -0
  88. package/skills/v8-workflow/SKILL.md +19 -160
  89. 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 -0
  90. package/skills/workspace-conventions/SKILL.md +29 -361
  91. 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 -0
  92. 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 +196 -0
  93. 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 -0
@@ -13,6 +13,8 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
13
13
 
14
14
  控件事实源:`Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json` 中 `Sort=1000` 附近的 `Divider`、`CollapseGroup`、`Tabs`、`Alert`、`StaticText`、`Html`、`RichText` 等都属于 Advanced 布局控件。
15
15
 
16
+ <!-- microi-progressive:begin -->
17
+ <!-- microi-progressive:chunk id=microi-form-layout-000 sha256=cade6a415454aa04f5fcf840e6d9df1323ac9751c0e3c8e1b07b360007413819 -->
16
18
  ## 1. 三种分组能力速查
17
19
 
18
20
  | 能力 | 存储位置 | 控件 | 核心作用 | 适用场景 |
@@ -22,6 +24,8 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
22
24
  | **C. 字段级 CollapseGroup(折叠分组)** | `diy_field.Component='CollapseGroup'` + `Config.CollapseGroup` | 字段是折叠面板标题 | **所有分组可在同一页面展开**,用户一屏看到全部标题和分组字段 | 只占 **≤5 个有效表单行** 的小分组(短字段即使有 8~10 个,也常只占 4~5 行) |
23
25
  | **D. 不分组(默认平铺)** | 无 | — | 全部字段在第一屏 | 总有效表单行 ≤ 6、没有复杂控件,且没有必须强调的业务分组 |
24
26
 
27
+ <!-- /microi-progressive:chunk -->
28
+ <!-- microi-progressive:chunk id=microi-form-layout-001 sha256=f43f8c6f1c156ef3669f0c1f9a9d9d2cb7baf630d0b0cb2f48307a31f3f82ae2 -->
25
29
  ## 2. 黄金决策流程(AI 必须按此顺序判断)
26
30
 
27
31
  ### 2.1 先算“有效表单行”,禁止只数字段
@@ -71,116 +75,8 @@ Q1: 核心可见字段数、子表和强任务域?
71
75
  | 8 字段简单登记表 | D. 不分组 | 禁止任何 Tab/折叠 |
72
76
  | 工作流审批表(≤10 字段) | D. 不分组 | 禁止使用 Tab |
73
77
 
74
- ## 3. 三种分组的存储与配置
75
-
76
- ### 3.1 diy_table.Tabs(表级 Tab)
77
-
78
- 存储:`diy_table.Tabs`(JSON 字符串)+ 每个字段的 `diy_field.Tab`(归属 Tab 名)。
79
-
80
- ```jsonc
81
- // diy_table.Tabs JSON 格式
82
- [
83
- { "Id": "basic", "Name": "基础信息", "Sort": 10 },
84
- { "Id": "business","Name": "业务明细", "Sort": 20 },
85
- { "Id": "attach", "Name": "附件备注", "Sort": 30 }
86
- ]
87
- ```
88
-
89
- 字段归属:在 `diy_field.Tab` 写 `Id`(不是 `Name`)。`Tab` 留空的字段属于"非 Tab 字段"(即 `diy_table.Tabs` 之外的字段),会作为隐藏的剩余字段自动归到最后 Tab。
90
-
91
- - 字段 `Tab="basic"` → 归属"基础信息"Tab
92
- - 字段 `Tab=""` 且 `diy_table.Tabs` 存在 → 自动归到最后一个 Tab 的剩余字段
93
- - 字段 `Tab=""` 且 `diy_table.Tabs` 不存在 → 全部在第一屏平铺
94
-
95
- **不推荐用法**:把 `diy_table.Tabs` 拆出 3 个 Tab、每个 Tab 内只有 2~3 个字段。这会让用户必须点击 3 次 Tab 才能看完一张表,且首屏只看到 2~3 个字段。
96
-
97
- ### 3.2 字段级 Tabs 控件(`diy_field.Component='Tabs'`)
98
-
99
- 存储:`diy_field` 行 + `Config.FieldTabs`(JSON)。
100
-
101
- ```jsonc
102
- // diy_field 必要字段
103
- {
104
- "Id": "TabsField_Main",
105
- "Name": "TabsMain",
106
- "Label": "主分组",
107
- "Component": "Tabs",
108
- "Type": "varchar(50)",
109
- "Sort": 50,
110
- "Visible": 0, // 通常设为 0,因为 Tabs 本身是布局控件
111
- "AppVisible": 0,
112
- "Config": "{\"FieldTabs\":{...}}"
113
- }
114
-
115
- // Config.FieldTabs
116
- {
117
- "ScopeMode": "FieldCount", // 或 "Manual"
118
- "TotalFieldCount": 0, // 0 表示直到下一个 Tabs
119
- "DefaultActiveKey": "tab1",
120
- "Type": "card", // "" | "card" | "border-card"
121
- "Position": "top", // top | bottom | left | right
122
- "Stretch": false,
123
- "ShowFieldCount": true,
124
- "CaptureRest": true,
125
- "Description": "",
126
- "Theme": "default",
127
- "Tabs": [
128
- { "Key": "tab1", "Title": "页签一", "Icon": "fas fa-info-circle", "FieldCount": 6, "Disabled": false }
129
- ]
130
- }
131
- ```
132
-
133
- **作用范围**:从该 Tabs 字段开始,到下一个 `Component in (Tabs, CollapseGroup, Divider)` 字段为止。
134
-
135
- ### 3.3 字段级 CollapseGroup 折叠分组(`diy_field.Component='CollapseGroup'`)
136
-
137
- 存储:`diy_field` 行 + `Config.CollapseGroup`(JSON)。
138
-
139
- ```jsonc
140
- // diy_field 必要字段
141
- {
142
- "Id": "CollapseGroup_MRP",
143
- "Name": "MrpGroup",
144
- "Label": "MRP 运算",
145
- "Component": "CollapseGroup",
146
- "Type": "",
147
- "Sort": 120,
148
- "Visible": 1,
149
- "AppVisible": 1,
150
- "FormWidth": 24,
151
- "Config": "{\"CollapseGroup\":{...}}"
152
- }
153
-
154
- // Config.CollapseGroup
155
- {
156
- "DefaultCollapsed": false, // 默认展开;高频访问分组可设 false
157
- "ScopeMode": "UntilNextGroup", // 直到下一个折叠/Tab/Divider
158
- "FieldCount": 5, // ScopeMode=FieldCount 时生效
159
- "Description": "MRP 运算结果与时间",
160
- "Icon": "fas fa-calculator",
161
- "Theme": "primary", // default | primary | success | warning | danger
162
- "ShowFieldCount": true
163
- }
164
- ```
165
-
166
- **作用范围**:从该 CollapseGroup 字段开始,到下一个 `Component in (Tabs, CollapseGroup, Divider)` 字段为止。
167
-
168
- **默认值硬规则**:`CollapseGroup` 必须保存 `FormWidth=24`(PC 表单 100% 宽度);
169
- `Config.CollapseGroup.ShowFieldCount` 省略时必须补为 `true`。只有用户明确要求隐藏数量时
170
- 才允许写 `ShowFieldCount=false`,只有用户明确要求非整行实验布局时才允许覆盖宽度。
171
-
172
- **与 Tab 的关键区别**:所有 CollapseGroup 标题**始终可见**,分组内字段**默认展开**或**默认收起**,但所有分组的字段**都在同一页面**,可同时展开多个。
173
-
174
- ### 3.4 控件视觉对比
175
-
176
- | 视觉表现 | Tabs | CollapseGroup |
177
- |---------|------|---------------|
178
- | 首屏可见字段数 | 仅一个 Tab 的字段 | **所有分组的标题 + 展开分组的字段** |
179
- | 用户切换分组方式 | 必须点击 Tab 头 | 可直接滚动或逐个点击展开 |
180
- | 同时看到多组 | ❌ | ✅ |
181
- | 适合"展开后阅读" | ❌(频繁切换会烦) | ✅ |
182
- | 适合"互斥分组" | ✅ | ❌ |
183
-
78
+ <!-- /microi-progressive:chunk -->
79
+ <!-- microi-progressive:chunk id=microi-form-layout-002 sha256=9165f561ba90696ce130d24f71a0e56c521b5f8935eac2ddcffb852f3af5d9b2 -->
184
80
  ## 4. AI 生成表单布局的标准动作
185
81
 
186
82
  ### 4.1 必做顺序
@@ -221,6 +117,8 @@ Q1: 核心可见字段数、子表和强任务域?
221
117
 
222
118
  V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.ClickFormTab('tabId')` 动态控制 Tab 显隐和默认选中。
223
119
 
120
+ <!-- /microi-progressive:chunk -->
121
+ <!-- microi-progressive:chunk id=microi-form-layout-003 sha256=eebf51aec08023443964d82e1140026ec7cef627b3d2ed6ead169e1fd14353a3 -->
224
122
  ## 5. 必填与禁止
225
123
 
226
124
  ### 5.1 必填
@@ -245,6 +143,8 @@ V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.C
245
143
  - ❌ **禁止**把高频访问的字段(如单据编号、项目名称)放进默认收起的 CollapseGroup。
246
144
  - ❌ **禁止**用普通新增字段或通用表单数据写入创建布局节点;这类路径可能对目标业务表执行物理 DDL。
247
145
 
146
+ <!-- /microi-progressive:chunk -->
147
+ <!-- microi-progressive:chunk id=microi-form-layout-004 sha256=539ae919554ca9eda5b5a26ac405181f601f4195f6a59baf1fd368d315987e6c -->
248
148
  ## 6. 验收清单
249
149
 
250
150
  修改或新建表单布局后,AI 必须按以下顺序验收:
@@ -264,121 +164,8 @@ V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.C
264
164
  以及相关字段 V8,搜索 `V8.FieldSet`、`hideField`、`Visible=false`、`HideFields`。设计模式
265
165
  通常跳过这些运行态事件;未完成这一步不得直接判定为 Microi.Client 渲染缺陷。
266
166
 
267
- ## 7. 反例参考(必须避免)
268
-
269
- ### 反例 1:MRP 运算 3 字段单独建 Tab
270
-
271
- ```
272
- ❌ 错误:
273
- diy_table.Tabs = [
274
- { Id: 'basic', Name: '基础信息' }, // 5 字段
275
- { Id: 'mrp', Name: 'MRP 运算' }, // 3 字段
276
- { Id: 'remark', Name: '备注' } // 1 字段
277
- ]
278
- // 用户打开表单,第一屏只看到 5 个"基础信息"字段,"MRP 运算"和"备注"被藏在 Tab 里
279
-
280
- ✅ 正确:
281
- // 不创建 diy_table.Tabs,把"MRP 运算" 3 字段用 CollapseGroup 收在表单末尾(默认展开)
282
- // 把"备注"也用 CollapseGroup 或 Divider 收
283
- // 第一屏用户能看到所有基础信息 + MRP 运算
284
- ```
285
-
286
- ### 反例 1.1:项目收款记录拆成 2/9/2 三个 Tab
287
-
288
- ```
289
- ❌ 错误:
290
- 项目(2 个短字段) + 收款(9 个短字段) + 附件备注(2 个整行字段)分别建 Tab。
291
- 结果是每页只有 1~5 行内容,桌面抽屉出现大面积空白,用户要切换三次才能看完整记录。
292
-
293
- ✅ 正确:
294
- 取消表级 Tab,按原顺序建立“项目信息 / 收款信息 / 附件备注”三个 CollapseGroup。
295
- 核心组默认展开,低频附件备注可默认收起;保留原字段、数据源、必填规则和 V8 代码。
296
- ```
297
-
298
- ### 反例 2:13 字段表全平铺
299
-
300
- ```
301
- ❌ 错误:
302
- // 13 字段全部 Tab 留空
303
- // 用户必须向下滚动 3 屏才能看到所有字段
304
-
305
- ✅ 正确:
306
- // 13 字段按业务分两组:8 字段"基础信息" + 5 字段"业务明细"
307
- // 用 1 个 diy_table.Tabs(基础信息 + 业务明细)
308
- // 或用 1 个 CollapseGroup 把"业务明细"5 字段收起
309
- ```
310
-
311
- ### 反例 3:42 字段表用 6 个 Tab
312
-
313
- ```
314
- ❌ 错误:
315
- // 6 个 Tab:基础(14) + 项目业主(2) + 发货通知(13) + 生产需求(3) + 审核(4) + ERP出库(4) + 其他(2)
316
- // 用户要点 6 次才能看完,且"项目业主"和"生产需求"这种 2~3 字段的 Tab 完全没必要
317
-
318
- ✅ 正确:
319
- // 4 个 Tab:基础(14) + 发货通知+生产需求(16) + 审核+ERP出库(8) + 其他(4)
320
- // 或 3 个 Tab + 内部嵌套 CollapseGroup
321
- ```
322
-
323
- ## 8. 快速参考代码片段
324
-
325
- ### 8.1 MCP 创建表级 Tab
326
-
327
- ```js
328
- // 假设已创建 diy_table,通过 microi_update_table 设置 Tabs
329
- // 注意:microi_create_table 不直接接收 Tabs JSON,需创建后 microi_update_table 补全
330
- microi_update_table({
331
- name: "yutaoliaojieguo",
332
- // 暂未直接传 Tabs,需要通过 microi_update_table 文档化的方式补全
333
- })
334
- ```
335
-
336
- > 实际写入 `diy_table.Tabs` 优先用 `microi_update_field` 之外的元数据写入方式或 `microi_upsert_engine` 委托接口引擎;后续 MCP 工具可补强 `Tabs` 参数。
337
-
338
- ### 8.2 MCP 创建字段级 CollapseGroup
339
-
340
- ```js
341
- // 1. 创建一个 CollapseGroup 字段
342
- microi_add_layout_field({
343
- tableId: "01KTASHWEBE514R1XTB0WVJJRX",
344
- name: "MrpGroup",
345
- label: "MRP 运算",
346
- component: "CollapseGroup",
347
- sort: 150,
348
- visible: 1,
349
- appVisible: 1,
350
- config: JSON.stringify({
351
- CollapseGroup: {
352
- DefaultCollapsed: false,
353
- ScopeMode: "UntilNextGroup",
354
- Description: "MRP 运算状态、批次号与时间",
355
- Icon: "fas fa-calculator",
356
- Theme: "primary",
357
- ShowFieldCount: true
358
- }
359
- }),
360
- confirmExecution: "MrpGroup"
361
- })
362
-
363
- // 工具默认写入 FormWidth=24;回读必须确认宽度为 24 且 ShowFieldCount=true。
364
-
365
- // 2. 让"MRP 运算"相关字段归属到该 CollapseGroup
366
- // 范围方式:把 CalcStatus、CalcBatchNo、MrpTime 三个字段的 Sort 排在 150~300 之间,
367
- // 下一个 CollapseGroup/Tabs/Divider 字段之前的所有字段都属于该分组
368
- ```
369
-
370
- ### 8.3 MCP 把字段 Tab 归属到 diy_table.Tabs
371
-
372
- ```js
373
- // 创建表级 Tab
374
- // 1. microi_update_table 设置 diy_table.Tabs 字段(待 MCP 工具补全)
375
- // 2. 给字段写 Tab 归属
376
- microi_update_field({
377
- id: "01KVTWDJ7WXB3Z60HGJ5BPTBJ0",
378
- tab: "basic" // 归属到 diy_table.Tabs.Id='basic' 的 Tab
379
- })
380
- ```
381
-
167
+ <!-- /microi-progressive:chunk -->
168
+ <!-- microi-progressive:chunk id=microi-form-layout-005 sha256=db6759bef83e520e5f137347070f85df1275e14dcbc742bebfdaac4da14be375 -->
382
169
  ## 9. 与其他 Skill 的关系
383
170
 
384
171
  - 字段创建流程:`v8-table-event/SKILL.md` 写 InFormV8 / SubmitFormV8 等。
@@ -386,3 +173,10 @@ microi_update_field({
386
173
  - 整行控件规则:`microi-system-delivery/SKILL.md` 中 `FormWidth=24` 的使用条件。
387
174
  - 表单设计器与按钮:`v8-menu-buttons/SKILL.md`。
388
175
  - V8 事件 Tab 显隐 API:`v8-table-event/SKILL.md` 中 `V8.HideFormTab` / `V8.ShowFormTab` / `V8.ClickFormTab`。
176
+ <!-- /microi-progressive:chunk -->
177
+ ## 详细参考路由(渐进披露)
178
+
179
+ 仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
180
+
181
+ - [references/progressive-01-3-三种分组的存储与配置.md](references/progressive-01-3-三种分组的存储与配置.md):3. 三种分组的存储与配置;7. 反例参考(必须避免);8. 快速参考代码片段
182
+ <!-- microi-progressive:end -->
@@ -0,0 +1,235 @@
1
+ # microi-form-layout 详细参考 1
2
+
3
+ > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
+
5
+ <!-- microi-progressive:chunk id=microi-form-layout-006 sha256=a78b000a9fee46d8394b0b6cb186702e520ab513f7eff098f2226f1158e46970 -->
6
+ ## 3. 三种分组的存储与配置
7
+
8
+ ### 3.1 diy_table.Tabs(表级 Tab)
9
+
10
+ 存储:`diy_table.Tabs`(JSON 字符串)+ 每个字段的 `diy_field.Tab`(归属 Tab 名)。
11
+
12
+ ```jsonc
13
+ // diy_table.Tabs JSON 格式
14
+ [
15
+ { "Id": "basic", "Name": "基础信息", "Sort": 10 },
16
+ { "Id": "business","Name": "业务明细", "Sort": 20 },
17
+ { "Id": "attach", "Name": "附件备注", "Sort": 30 }
18
+ ]
19
+ ```
20
+
21
+ 字段归属:在 `diy_field.Tab` 写 `Id`(不是 `Name`)。`Tab` 留空的字段属于"非 Tab 字段"(即 `diy_table.Tabs` 之外的字段),会作为隐藏的剩余字段自动归到最后 Tab。
22
+
23
+ - 字段 `Tab="basic"` → 归属"基础信息"Tab
24
+ - 字段 `Tab=""` 且 `diy_table.Tabs` 存在 → 自动归到最后一个 Tab 的剩余字段
25
+ - 字段 `Tab=""` 且 `diy_table.Tabs` 不存在 → 全部在第一屏平铺
26
+
27
+ **不推荐用法**:把 `diy_table.Tabs` 拆出 3 个 Tab、每个 Tab 内只有 2~3 个字段。这会让用户必须点击 3 次 Tab 才能看完一张表,且首屏只看到 2~3 个字段。
28
+
29
+ ### 3.2 字段级 Tabs 控件(`diy_field.Component='Tabs'`)
30
+
31
+ 存储:`diy_field` 行 + `Config.FieldTabs`(JSON)。
32
+
33
+ ```jsonc
34
+ // diy_field 必要字段
35
+ {
36
+ "Id": "TabsField_Main",
37
+ "Name": "TabsMain",
38
+ "Label": "主分组",
39
+ "Component": "Tabs",
40
+ "Type": "varchar(50)",
41
+ "Sort": 50,
42
+ "Visible": 0, // 通常设为 0,因为 Tabs 本身是布局控件
43
+ "AppVisible": 0,
44
+ "Config": "{\"FieldTabs\":{...}}"
45
+ }
46
+
47
+ // Config.FieldTabs
48
+ {
49
+ "ScopeMode": "FieldCount", // 或 "Manual"
50
+ "TotalFieldCount": 0, // 0 表示直到下一个 Tabs
51
+ "DefaultActiveKey": "tab1",
52
+ "Type": "card", // "" | "card" | "border-card"
53
+ "Position": "top", // top | bottom | left | right
54
+ "Stretch": false,
55
+ "ShowFieldCount": true,
56
+ "CaptureRest": true,
57
+ "Description": "",
58
+ "Theme": "default",
59
+ "Tabs": [
60
+ { "Key": "tab1", "Title": "页签一", "Icon": "fas fa-info-circle", "FieldCount": 6, "Disabled": false }
61
+ ]
62
+ }
63
+ ```
64
+
65
+ **作用范围**:从该 Tabs 字段开始,到下一个 `Component in (Tabs, CollapseGroup, Divider)` 字段为止。
66
+
67
+ ### 3.3 字段级 CollapseGroup 折叠分组(`diy_field.Component='CollapseGroup'`)
68
+
69
+ 存储:`diy_field` 行 + `Config.CollapseGroup`(JSON)。
70
+
71
+ ```jsonc
72
+ // diy_field 必要字段
73
+ {
74
+ "Id": "CollapseGroup_MRP",
75
+ "Name": "MrpGroup",
76
+ "Label": "MRP 运算",
77
+ "Component": "CollapseGroup",
78
+ "Type": "",
79
+ "Sort": 120,
80
+ "Visible": 1,
81
+ "AppVisible": 1,
82
+ "FormWidth": 24,
83
+ "Config": "{\"CollapseGroup\":{...}}"
84
+ }
85
+
86
+ // Config.CollapseGroup
87
+ {
88
+ "DefaultCollapsed": false, // 默认展开;高频访问分组可设 false
89
+ "ScopeMode": "UntilNextGroup", // 直到下一个折叠/Tab/Divider
90
+ "FieldCount": 5, // ScopeMode=FieldCount 时生效
91
+ "Description": "MRP 运算结果与时间",
92
+ "Icon": "fas fa-calculator",
93
+ "Theme": "primary", // default | primary | success | warning | danger
94
+ "ShowFieldCount": true
95
+ }
96
+ ```
97
+
98
+ **作用范围**:从该 CollapseGroup 字段开始,到下一个 `Component in (Tabs, CollapseGroup, Divider)` 字段为止。
99
+
100
+ **默认值硬规则**:`CollapseGroup` 必须保存 `FormWidth=24`(PC 表单 100% 宽度);
101
+ `Config.CollapseGroup.ShowFieldCount` 省略时必须补为 `true`。只有用户明确要求隐藏数量时
102
+ 才允许写 `ShowFieldCount=false`,只有用户明确要求非整行实验布局时才允许覆盖宽度。
103
+
104
+ **与 Tab 的关键区别**:所有 CollapseGroup 标题**始终可见**,分组内字段**默认展开**或**默认收起**,但所有分组的字段**都在同一页面**,可同时展开多个。
105
+
106
+ ### 3.4 控件视觉对比
107
+
108
+ | 视觉表现 | Tabs | CollapseGroup |
109
+ |---------|------|---------------|
110
+ | 首屏可见字段数 | 仅一个 Tab 的字段 | **所有分组的标题 + 展开分组的字段** |
111
+ | 用户切换分组方式 | 必须点击 Tab 头 | 可直接滚动或逐个点击展开 |
112
+ | 同时看到多组 | ❌ | ✅ |
113
+ | 适合"展开后阅读" | ❌(频繁切换会烦) | ✅ |
114
+ | 适合"互斥分组" | ✅ | ❌ |
115
+
116
+ <!-- /microi-progressive:chunk -->
117
+ <!-- microi-progressive:chunk id=microi-form-layout-007 sha256=5944a965b1ac9a5c87a0e066af7f6489d2b5cd09e55fff7dc4e43d8d3a029fd6 -->
118
+ ## 7. 反例参考(必须避免)
119
+
120
+ ### 反例 1:MRP 运算 3 字段单独建 Tab
121
+
122
+ ```
123
+ ❌ 错误:
124
+ diy_table.Tabs = [
125
+ { Id: 'basic', Name: '基础信息' }, // 5 字段
126
+ { Id: 'mrp', Name: 'MRP 运算' }, // 3 字段
127
+ { Id: 'remark', Name: '备注' } // 1 字段
128
+ ]
129
+ // 用户打开表单,第一屏只看到 5 个"基础信息"字段,"MRP 运算"和"备注"被藏在 Tab 里
130
+
131
+ ✅ 正确:
132
+ // 不创建 diy_table.Tabs,把"MRP 运算" 3 字段用 CollapseGroup 收在表单末尾(默认展开)
133
+ // 把"备注"也用 CollapseGroup 或 Divider 收
134
+ // 第一屏用户能看到所有基础信息 + MRP 运算
135
+ ```
136
+
137
+ ### 反例 1.1:项目收款记录拆成 2/9/2 三个 Tab
138
+
139
+ ```
140
+ ❌ 错误:
141
+ 项目(2 个短字段) + 收款(9 个短字段) + 附件备注(2 个整行字段)分别建 Tab。
142
+ 结果是每页只有 1~5 行内容,桌面抽屉出现大面积空白,用户要切换三次才能看完整记录。
143
+
144
+ ✅ 正确:
145
+ 取消表级 Tab,按原顺序建立“项目信息 / 收款信息 / 附件备注”三个 CollapseGroup。
146
+ 核心组默认展开,低频附件备注可默认收起;保留原字段、数据源、必填规则和 V8 代码。
147
+ ```
148
+
149
+ ### 反例 2:13 字段表全平铺
150
+
151
+ ```
152
+ ❌ 错误:
153
+ // 13 字段全部 Tab 留空
154
+ // 用户必须向下滚动 3 屏才能看到所有字段
155
+
156
+ ✅ 正确:
157
+ // 13 字段按业务分两组:8 字段"基础信息" + 5 字段"业务明细"
158
+ // 用 1 个 diy_table.Tabs(基础信息 + 业务明细)
159
+ // 或用 1 个 CollapseGroup 把"业务明细"5 字段收起
160
+ ```
161
+
162
+ ### 反例 3:42 字段表用 6 个 Tab
163
+
164
+ ```
165
+ ❌ 错误:
166
+ // 6 个 Tab:基础(14) + 项目业主(2) + 发货通知(13) + 生产需求(3) + 审核(4) + ERP出库(4) + 其他(2)
167
+ // 用户要点 6 次才能看完,且"项目业主"和"生产需求"这种 2~3 字段的 Tab 完全没必要
168
+
169
+ ✅ 正确:
170
+ // 4 个 Tab:基础(14) + 发货通知+生产需求(16) + 审核+ERP出库(8) + 其他(4)
171
+ // 或 3 个 Tab + 内部嵌套 CollapseGroup
172
+ ```
173
+
174
+ <!-- /microi-progressive:chunk -->
175
+ <!-- microi-progressive:chunk id=microi-form-layout-008 sha256=1d93c83d865ef941f62c4e8e0dd6238489645bf53367b61e6e397543447dcdbd -->
176
+ ## 8. 快速参考代码片段
177
+
178
+ ### 8.1 MCP 创建表级 Tab
179
+
180
+ ```js
181
+ // 假设已创建 diy_table,通过 microi_update_table 设置 Tabs
182
+ // 注意:microi_create_table 不直接接收 Tabs JSON,需创建后 microi_update_table 补全
183
+ microi_update_table({
184
+ name: "yutaoliaojieguo",
185
+ // 暂未直接传 Tabs,需要通过 microi_update_table 文档化的方式补全
186
+ })
187
+ ```
188
+
189
+ > 实际写入 `diy_table.Tabs` 优先用 `microi_update_field` 之外的元数据写入方式或 `microi_upsert_engine` 委托接口引擎;后续 MCP 工具可补强 `Tabs` 参数。
190
+
191
+ ### 8.2 MCP 创建字段级 CollapseGroup
192
+
193
+ ```js
194
+ // 1. 创建一个 CollapseGroup 字段
195
+ microi_add_layout_field({
196
+ tableId: "01KTASHWEBE514R1XTB0WVJJRX",
197
+ name: "MrpGroup",
198
+ label: "MRP 运算",
199
+ component: "CollapseGroup",
200
+ sort: 150,
201
+ visible: 1,
202
+ appVisible: 1,
203
+ config: JSON.stringify({
204
+ CollapseGroup: {
205
+ DefaultCollapsed: false,
206
+ ScopeMode: "UntilNextGroup",
207
+ Description: "MRP 运算状态、批次号与时间",
208
+ Icon: "fas fa-calculator",
209
+ Theme: "primary",
210
+ ShowFieldCount: true
211
+ }
212
+ }),
213
+ confirmExecution: "MrpGroup"
214
+ })
215
+
216
+ // 工具默认写入 FormWidth=24;回读必须确认宽度为 24 且 ShowFieldCount=true。
217
+
218
+ // 2. 让"MRP 运算"相关字段归属到该 CollapseGroup
219
+ // 范围方式:把 CalcStatus、CalcBatchNo、MrpTime 三个字段的 Sort 排在 150~300 之间,
220
+ // 下一个 CollapseGroup/Tabs/Divider 字段之前的所有字段都属于该分组
221
+ ```
222
+
223
+ ### 8.3 MCP 把字段 Tab 归属到 diy_table.Tabs
224
+
225
+ ```js
226
+ // 创建表级 Tab
227
+ // 1. microi_update_table 设置 diy_table.Tabs 字段(待 MCP 工具补全)
228
+ // 2. 给字段写 Tab 归属
229
+ microi_update_field({
230
+ id: "01KVTWDJ7WXB3Z60HGJ5BPTBJ0",
231
+ tab: "basic" // 归属到 diy_table.Tabs.Id='basic' 的 Tab
232
+ })
233
+ ```
234
+
235
+ <!-- /microi-progressive:chunk -->