@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.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +6 -5
- package/package.json +1 -1
- package/scripts/mcp-server.js +83 -83
- package/scripts/microi-cli.js +55 -85
- package/scripts/microi-codex-broker.js +418 -0
- package/scripts/microi-codex-router.js +129 -65
- package/scripts/microi-skills.meta.json +310 -151
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +3566 -0
- package/skills/ai-platform-governance/SKILL.md +21 -166
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -0
- package/skills/microi-client-frontend/SKILL.md +17 -434
- 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
- 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
- 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
- package/skills/microi-db-schema/SKILL.md +3 -3
- package/skills/microi-db-schema/references/schema-overview.md +1 -1
- package/skills/microi-db-schema/references/schema.md +1 -1
- package/skills/microi-db-schema/references/table-catalog.md +1 -1
- package/skills/microi-form-engine/SKILL.md +1 -1
- package/skills/microi-form-layout/SKILL.md +19 -225
- 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
- package/skills/microi-frontend-sdk/SKILL.md +17 -151
- 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
- package/skills/microi-mobile-app-quality/SKILL.md +22 -288
- 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
- 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
- package/skills/microi-system-delivery/SKILL.md +16 -380
- 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
- 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
- package/skills/microi-ui/SKILL.md +19 -169
- 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
- package/skills/microi-uniapp-frontend/SKILL.md +26 -335
- 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
- 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
- package/skills/page-engine/SKILL.md +23 -271
- 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
- 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
- package/skills/playwright-e2e/SKILL.md +24 -590
- 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
- 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
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -0
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +69 -0
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -0
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -0
- package/skills/scripts/validate-progressive-disclosure.mjs +52 -0
- package/skills/ui-design/SKILL.md +26 -1461
- 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
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +155 -0
- 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
- 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
- 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
- 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
- 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
- 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
- package/skills/v8-crud-api/SKILL.md +20 -245
- 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
- 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
- package/skills/v8-export-import/SKILL.md +15 -425
- 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
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -0
- 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
- package/skills/v8-file-upload/SKILL.md +16 -354
- 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
- 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
- package/skills/v8-frontend-events/SKILL.md +19 -205
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -0
- package/skills/v8-http-integration/SKILL.md +14 -236
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -0
- 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
- package/skills/v8-menu-buttons/SKILL.md +15 -511
- 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
- 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
- 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
- package/skills/v8-mq-mqtt/SKILL.md +11 -175
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -0
- package/skills/v8-security/SKILL.md +16 -329
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +199 -0
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -0
- package/skills/v8-table-event/SKILL.md +16 -236
- 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
- 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
- package/skills/v8-workflow/SKILL.md +19 -160
- 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
- package/skills/workspace-conventions/SKILL.md +29 -361
- 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
- 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
- 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
|
-
|
|
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
|
-
|
|
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 -->
|