@microi.net/cli 6.2.0 → 6.2.2
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 +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +142 -117
- package/scripts/microi-cli.js +54 -54
- package/scripts/microi-skills.meta.json +250 -238
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +69 -38
- package/skills/README.md +1 -1
- package/skills/microi-client-frontend/SKILL.md +20 -14
- 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 +9 -1
- package/skills/microi-codex/SKILL.md +2 -0
- package/skills/microi-datasource-mapping/SKILL.md +5 -0
- package/skills/microi-db-schema/references/form-component-options.md +7 -0
- package/skills/microi-deployment/SKILL.md +3 -3
- package/skills/microi-deployment/references/deployment-matrix.md +1 -1
- package/skills/microi-docs-coverage/references/capability-map.md +6 -6
- package/skills/microi-form-engine/SKILL.md +21 -3
- package/skills/microi-form-engine/references/business-numbering.md +70 -0
- package/skills/microi-form-engine/references/component-catalog.md +4 -0
- package/skills/microi-form-engine/references/component-config-index.md +359 -0
- package/skills/microi-form-engine/references/data-source-events.md +7 -1
- package/skills/microi-form-engine/references/form-generation-quality.md +160 -0
- package/skills/microi-system-delivery/SKILL.md +7 -0
- package/skills/microi-system-delivery/references/delivery-pitfalls.md +5 -0
- package/skills/microi-uniapp-frontend/SKILL.md +3 -1
- package/skills/microi.v8.js +6 -4
- package/skills/module-engine/SKILL.md +8 -0
- package/skills/scripts/sync-embedded-skills.mjs +13 -0
- package/skills/uniapp-mall-assets/SKILL.md +3 -0
- package/skills/v8-file-upload/SKILL.md +7 -3
- package/skills/v8-file-upload/references/hotspot-offload-operations.md +18 -0
- 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 +7 -1
- package/skills/v8-frontend-events/SKILL.md +14 -6
- package/skills/v8-image-processing/SKILL.md +13 -2
- package/skills/v8-image-processing/references/api-reference.md +49 -3
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +6 -1
- package/skills/v8-utilities/references/server-api-index.md +1 -0
- package/skills/vision-engine/SKILL.md +12 -3
- package/skills/vision-engine/references/video-timeline.md +42 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "6.2.
|
|
2
|
+
"version": "6.2.2",
|
|
3
3
|
"versionRule": "Microi version uses three numeric parts. Each publish increments the last part; when a part exceeds 9 it carries to the previous part: 1.0.9 -> 1.1.0, 1.9.9 -> 2.0.0.",
|
|
4
4
|
"managedBy": "Microi.Agent/bump-version.js",
|
|
5
|
-
"updatedAt": "2026-11-
|
|
5
|
+
"updatedAt": "2026-11-04T17:11:04.392Z"
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-11-
|
|
3
|
+
"generatedAt": "2026-11-04T16:35:17.549Z",
|
|
4
4
|
"policy": {
|
|
5
5
|
"maxEntryLines": 285,
|
|
6
6
|
"referenceBudgetLines": 245,
|
|
@@ -169,34 +169,34 @@
|
|
|
169
169
|
]
|
|
170
170
|
},
|
|
171
171
|
"microi-client-frontend": {
|
|
172
|
-
"originalSha256": "
|
|
173
|
-
"originalLines":
|
|
172
|
+
"originalSha256": "e00e8cb939d01a254c40b985ec212b97643a9237ab3a082c2b251950215b4b28",
|
|
173
|
+
"originalLines": 747,
|
|
174
174
|
"prefixSha256": "578d60fc1b769bff36396db2c0c6b2affa61ad02e956d8ad574e8238764b4008",
|
|
175
175
|
"prefixBytes": 2231,
|
|
176
|
-
"entryLines":
|
|
176
|
+
"entryLines": 281,
|
|
177
177
|
"chunks": [
|
|
178
178
|
{
|
|
179
179
|
"id": "microi-client-frontend-000",
|
|
180
180
|
"ordinal": 0,
|
|
181
181
|
"destination": "microi-client-frontend/SKILL.md",
|
|
182
|
-
"sha256": "
|
|
183
|
-
"lines":
|
|
182
|
+
"sha256": "9c67c14e9db73bac1aa0147322ac82f8fd66034a7695d16b9bbc621338e389bb",
|
|
183
|
+
"lines": 10,
|
|
184
184
|
"heading": "单行文本插槽按钮约定"
|
|
185
185
|
},
|
|
186
186
|
{
|
|
187
187
|
"id": "microi-client-frontend-001",
|
|
188
188
|
"ordinal": 1,
|
|
189
189
|
"destination": "microi-client-frontend/SKILL.md",
|
|
190
|
-
"sha256": "
|
|
191
|
-
"lines":
|
|
190
|
+
"sha256": "14f5f54111ea6a59bbce9997288c2d40135b0f4c62827387c83688ad6e6eb7c9",
|
|
191
|
+
"lines": 30,
|
|
192
192
|
"heading": "1. 技术栈和源码入口"
|
|
193
193
|
},
|
|
194
194
|
{
|
|
195
195
|
"id": "microi-client-frontend-002",
|
|
196
196
|
"ordinal": 2,
|
|
197
197
|
"destination": "microi-client-frontend/SKILL.md",
|
|
198
|
-
"sha256": "
|
|
199
|
-
"lines":
|
|
198
|
+
"sha256": "9d2a95bc17bfd6e11dcb7d3d07d61dbbc0c0939614f28d0a8ed330e5d2200dd6",
|
|
199
|
+
"lines": 139,
|
|
200
200
|
"heading": "2. 表单引擎三层结构"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
@@ -243,8 +243,8 @@
|
|
|
243
243
|
"id": "microi-client-frontend-008",
|
|
244
244
|
"ordinal": 8,
|
|
245
245
|
"destination": "microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md",
|
|
246
|
-
"sha256": "
|
|
247
|
-
"lines":
|
|
246
|
+
"sha256": "a435b99b6bfad7ab62d95ef78f0614205e5da51cfc0d4f2b7d3a1f7c6eb9c2ea",
|
|
247
|
+
"lines": 152,
|
|
248
248
|
"heading": "8. 运行时高频坑复盘"
|
|
249
249
|
},
|
|
250
250
|
{
|
|
@@ -763,11 +763,11 @@
|
|
|
763
763
|
]
|
|
764
764
|
},
|
|
765
765
|
"microi-system-delivery": {
|
|
766
|
-
"originalSha256": "
|
|
767
|
-
"originalLines":
|
|
768
|
-
"prefixSha256": "
|
|
769
|
-
"prefixBytes":
|
|
770
|
-
"entryLines":
|
|
766
|
+
"originalSha256": "a5077b92226c9a0747426f7d97be1d575ac96c6d20082e78441e35b798368645",
|
|
767
|
+
"originalLines": 729,
|
|
768
|
+
"prefixSha256": "5cf0c7a5be5fa805e324b09392bfcc931d4c4723859fd42243a005c647033490",
|
|
769
|
+
"prefixBytes": 7817,
|
|
770
|
+
"entryLines": 126,
|
|
771
771
|
"chunks": [
|
|
772
772
|
{
|
|
773
773
|
"id": "microi-system-delivery-000",
|
|
@@ -986,11 +986,11 @@
|
|
|
986
986
|
]
|
|
987
987
|
},
|
|
988
988
|
"microi-uniapp-frontend": {
|
|
989
|
-
"originalSha256": "
|
|
990
|
-
"originalLines":
|
|
989
|
+
"originalSha256": "e2599b80fa08c833df00052da976ac76a2561bb1b4e292df0efbf805a2a3bfe5",
|
|
990
|
+
"originalLines": 578,
|
|
991
991
|
"prefixSha256": "65800093e36bea00659b3aa2ae67919c860ac6cf83c4480a6c9b65cd9f1e901a",
|
|
992
992
|
"prefixBytes": 4933,
|
|
993
|
-
"entryLines":
|
|
993
|
+
"entryLines": 233,
|
|
994
994
|
"chunks": [
|
|
995
995
|
{
|
|
996
996
|
"id": "microi-uniapp-frontend-000",
|
|
@@ -1004,8 +1004,8 @@
|
|
|
1004
1004
|
"id": "microi-uniapp-frontend-001",
|
|
1005
1005
|
"ordinal": 1,
|
|
1006
1006
|
"destination": "microi-uniapp-frontend/SKILL.md",
|
|
1007
|
-
"sha256": "
|
|
1008
|
-
"lines":
|
|
1007
|
+
"sha256": "de245aa65643e8bbb5d9cfd5256066295b4857bfa2fc8ef2689161eee9b2bc25",
|
|
1008
|
+
"lines": 39,
|
|
1009
1009
|
"heading": "标准产品、视图协议与租户扩展"
|
|
1010
1010
|
},
|
|
1011
1011
|
{
|
|
@@ -2265,11 +2265,11 @@
|
|
|
2265
2265
|
]
|
|
2266
2266
|
},
|
|
2267
2267
|
"v8-file-upload": {
|
|
2268
|
-
"originalSha256": "
|
|
2269
|
-
"originalLines":
|
|
2270
|
-
"prefixSha256": "
|
|
2271
|
-
"prefixBytes":
|
|
2272
|
-
"entryLines":
|
|
2268
|
+
"originalSha256": "27437eda886f63fd36c507c7bbb41444abcaf865442a373808077a378a14008b",
|
|
2269
|
+
"originalLines": 823,
|
|
2270
|
+
"prefixSha256": "7122b5d00aa238fb5b085079a51f9551589ff1892dd5ca980d2e479eac83fa65",
|
|
2271
|
+
"prefixBytes": 27771,
|
|
2272
|
+
"entryLines": 285,
|
|
2273
2273
|
"chunks": [
|
|
2274
2274
|
{
|
|
2275
2275
|
"id": "v8-file-upload-000",
|
|
@@ -2315,8 +2315,8 @@
|
|
|
2315
2315
|
"id": "v8-file-upload-005",
|
|
2316
2316
|
"ordinal": 3,
|
|
2317
2317
|
"destination": "v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md",
|
|
2318
|
-
"sha256": "
|
|
2319
|
-
"lines":
|
|
2318
|
+
"sha256": "4922ff1364f2a9994d7cc47ff224e07c794e382b6f5f44b75b76ae365f7efff1",
|
|
2319
|
+
"lines": 185,
|
|
2320
2320
|
"heading": "公有桶 vs 私有桶"
|
|
2321
2321
|
},
|
|
2322
2322
|
{
|
|
@@ -2403,11 +2403,11 @@
|
|
|
2403
2403
|
]
|
|
2404
2404
|
},
|
|
2405
2405
|
"v8-frontend-events": {
|
|
2406
|
-
"originalSha256": "
|
|
2407
|
-
"originalLines":
|
|
2406
|
+
"originalSha256": "06cd2aea5aa78076aab9ed6325c9e5da1a9134058f1b066c1c34bb9f5c2e2b99",
|
|
2407
|
+
"originalLines": 375,
|
|
2408
2408
|
"prefixSha256": "2a1ea30769327bb6e98bfe19aad03843e4300a6553505618aaa73300a0776531",
|
|
2409
2409
|
"prefixBytes": 1300,
|
|
2410
|
-
"entryLines":
|
|
2410
|
+
"entryLines": 189,
|
|
2411
2411
|
"chunks": [
|
|
2412
2412
|
{
|
|
2413
2413
|
"id": "v8-frontend-events-000",
|
|
@@ -2421,8 +2421,8 @@
|
|
|
2421
2421
|
"id": "v8-frontend-events-001",
|
|
2422
2422
|
"ordinal": 1,
|
|
2423
2423
|
"destination": "v8-frontend-events/SKILL.md",
|
|
2424
|
-
"sha256": "
|
|
2425
|
-
"lines":
|
|
2424
|
+
"sha256": "bf7d6288bece731f78dbfa29b0e04ff56631d3693979bb91d759fe26ef92d0ec",
|
|
2425
|
+
"lines": 93,
|
|
2426
2426
|
"heading": "字段事件(在【字段属性】中配置)"
|
|
2427
2427
|
},
|
|
2428
2428
|
{
|
|
@@ -2853,8 +2853,8 @@
|
|
|
2853
2853
|
]
|
|
2854
2854
|
},
|
|
2855
2855
|
"v8-security": {
|
|
2856
|
-
"originalSha256": "
|
|
2857
|
-
"originalLines":
|
|
2856
|
+
"originalSha256": "bfcd9423cab69bea59a890fb2d112651e450edfde534b91d0a88500c0cb2d365",
|
|
2857
|
+
"originalLines": 590,
|
|
2858
2858
|
"prefixSha256": "bf500844894621ccc29468c41013bc423fdc5768bfcc87e0cfe20675a0b0f1d8",
|
|
2859
2859
|
"prefixBytes": 8550,
|
|
2860
2860
|
"entryLines": 255,
|
|
@@ -2943,8 +2943,8 @@
|
|
|
2943
2943
|
"id": "v8-security-010",
|
|
2944
2944
|
"ordinal": 10,
|
|
2945
2945
|
"destination": "v8-security/references/progressive-02-7-日志记录.md",
|
|
2946
|
-
"sha256": "
|
|
2947
|
-
"lines":
|
|
2946
|
+
"sha256": "556686f6250c75b35428b7283f79769b5a450cb9f67138f6483d2ea73f235751",
|
|
2947
|
+
"lines": 30,
|
|
2948
2948
|
"heading": "9. Token、终端会话与租户隔离"
|
|
2949
2949
|
},
|
|
2950
2950
|
{
|
|
@@ -3643,6 +3643,37 @@
|
|
|
3643
3643
|
]
|
|
3644
3644
|
}
|
|
3645
3645
|
]
|
|
3646
|
+
},
|
|
3647
|
+
"vision-engine": {
|
|
3648
|
+
"originalSha256": "f61aad44ba78d19e1cc68a69ddb2acfdb912955e3f730059b6268ae2de044045",
|
|
3649
|
+
"originalLines": 273,
|
|
3650
|
+
"prefixSha256": "37e9b497263de639624fd742d7609578f1b25123ba3974c3b96d7ed59ad0ecf3",
|
|
3651
|
+
"prefixBytes": 757,
|
|
3652
|
+
"entryLines": 281,
|
|
3653
|
+
"chunks": [
|
|
3654
|
+
{
|
|
3655
|
+
"id": "vision-engine-000",
|
|
3656
|
+
"ordinal": 0,
|
|
3657
|
+
"destination": "vision-engine/SKILL.md",
|
|
3658
|
+
"sha256": "70053ac1db19e3d2ea23cc875a3de5fedb7c614d3c348572972309bf4a9ff4a8",
|
|
3659
|
+
"lines": 264,
|
|
3660
|
+
"heading": "先读取相关规范"
|
|
3661
|
+
}
|
|
3662
|
+
],
|
|
3663
|
+
"references": [
|
|
3664
|
+
{
|
|
3665
|
+
"path": "references/architecture-and-acceptance.md",
|
|
3666
|
+
"headings": [
|
|
3667
|
+
"架构与验收"
|
|
3668
|
+
]
|
|
3669
|
+
},
|
|
3670
|
+
{
|
|
3671
|
+
"path": "references/video-timeline.md",
|
|
3672
|
+
"headings": [
|
|
3673
|
+
"可信录像时间线与快速人脸定位"
|
|
3674
|
+
]
|
|
3675
|
+
}
|
|
3676
|
+
]
|
|
3646
3677
|
}
|
|
3647
3678
|
}
|
|
3648
3679
|
}
|
package/skills/README.md
CHANGED
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
| **v8-workflow** | 工作流(审批流程)V8 事件 | `v8-workflow/SKILL.md` |
|
|
26
26
|
| **v8-api-config** | 接口引擎配置(匿名/锁/StopHttp/响应文件) | `v8-api-config/SKILL.md` |
|
|
27
27
|
| **v8-saas-multi-tenant** | SaaS 多租户(OsClient/OsClientModel) | `v8-saas-multi-tenant/SKILL.md` |
|
|
28
|
-
| **v8-image-processing** |
|
|
28
|
+
| **v8-image-processing** | 服务端图片生成、合并、水印、缩放、裁剪、绘制、二维码,以及多页中文 PDF 字体缓存释放 | `v8-image-processing/SKILL.md` |
|
|
29
29
|
| **v8-file-upload** | 文件上传/下载/响应(HDFS、私有桶 URL) | `v8-file-upload/SKILL.md` |
|
|
30
30
|
| **v8-export-import** | Excel 自定义导入导出(含进度跟踪) | `v8-export-import/SKILL.md` |
|
|
31
31
|
| **v8-debugging** | 调试模式、异常捕获、系统日志 | `v8-debugging/SKILL.md` |
|
|
@@ -20,7 +20,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
20
20
|
`SysConfig.HideSystemLicenseVersion` 缺省关闭,标签可点击跳转 `/license`,不能因一次请求失败永久消失。
|
|
21
21
|
|
|
22
22
|
<!-- microi-progressive:begin -->
|
|
23
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=
|
|
23
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=9c67c14e9db73bac1aa0147322ac82f8fd66034a7695d16b9bbc621338e389bb -->
|
|
24
24
|
## 单行文本插槽按钮约定
|
|
25
25
|
|
|
26
26
|
- `diy-input.vue` 的插槽按钮行为存储在 `diy_field.Config.SlotButtonV8Code`。
|
|
@@ -30,10 +30,8 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
30
30
|
|
|
31
31
|
> 适用于修改 `Microi.Client/` 前台源码。新 AI 对话在动 `Microi.Client/src/views/form-engine` 前,应先阅读本 Skill,避免把分散在 SFC、mixins、utils、路由和低代码配置里的逻辑误判成不存在。
|
|
32
32
|
|
|
33
|
-
---
|
|
34
|
-
|
|
35
33
|
<!-- /microi-progressive:chunk -->
|
|
36
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=
|
|
34
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=14f5f54111ea6a59bbce9997288c2d40135b0f4c62827387c83688ad6e6eb7c9 -->
|
|
37
35
|
## 1. 技术栈和源码入口
|
|
38
36
|
|
|
39
37
|
### 详情评论、日志与版本的按需读取
|
|
@@ -63,10 +61,8 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
63
61
|
| 表单设计器 | `diy-design.vue`、`diy-components/*` |
|
|
64
62
|
| 通用 V8/低代码工具 | `src/utils/diy.common.js`、`src/utils/v8-*.js` |
|
|
65
63
|
|
|
66
|
-
---
|
|
67
|
-
|
|
68
64
|
<!-- /microi-progressive:chunk -->
|
|
69
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=
|
|
65
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=9d2a95bc17bfd6e11dcb7d3d07d61dbbc0c0939614f28d0a8ed330e5d2200dd6 -->
|
|
70
66
|
## 2. 表单引擎三层结构
|
|
71
67
|
|
|
72
68
|
### 模块级跨端视图
|
|
@@ -102,10 +98,12 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
102
98
|
|
|
103
99
|
### `diy-form-full.vue`
|
|
104
100
|
|
|
101
|
+
- 顶部保存/工作流主操作优先于业务按钮和 `workspace-actions` 插槽;记录选择、数量、字段搜索及按钮共用 `--mci-form-toolbar-height`。Page/Dialog/Drawer 与手机分支一起验收,不移动或删除业务 V8 保存链路。
|
|
102
|
+
- 标题和记录选择复用 `field-display-value.js` 的可读标题解析:配置优先后按可见字段顺序兜底,跳过媒体、数值和 Id/GUID/ULID;下拉只用真实显示值,不借用未解析保存键。无合理业务值显示友好序号,禁止截取记录 Id。
|
|
103
|
+
- `form-field-search.js` 提供模糊建议与定位:只展开目标 Tab/分组,先计算未访问 Tab 的运行态归属,再滚动/聚焦当前表单内字段。不得通过搜索恢复权限/V8隐藏字段;切记录、关闭后的旧定位响应作废,不修改业务值。
|
|
104
|
+
- 仅90/95启用额外紧凑留白,覆盖 Banner、FORM SECTION、字段间距、子表标题、折叠和 Tab;其余档位沿常规密度缩放,手机目标仍至少44px。修改运行 `form-workspace-tools.spec.mjs`、`field-display-value.spec.mjs`、`ui-density-presentation.spec.mjs`,再做真实几何与主题验收;静态回归不等于截图通过。
|
|
105
105
|
- TableChild 详情的菜单元数据和关联数据请求都要携带完整 `_TableChildAuth`,嵌套子表保留 `Parent` 链;后端 `FormRelatedDataService` 的父记录授权参数也必须转交。不能以隐藏子菜单普遍授予 Read 代替父模块权限、父行范围、配置绑定和子行归属校验。
|
|
106
|
-
|
|
107
106
|
- 同次打开按服务器、租户、菜单、表、完整授权上下文和打开代次合并菜单请求;初始化失败后的记录回调不重复请求/提示,但主动重试、重开和切记录仍可重试。关闭或切记录后旧响应不得覆盖新状态。
|
|
108
|
-
|
|
109
107
|
- 关联 Counts 等真实表元数据与记录回调完成再调度;日志、评论、代码版本全部关闭时跳过。相同上下文在途读取可合并,菜单与 Counts 的错误提示按各自分支判断。修改时运行 `tests/tablechild-detail-context.spec.mjs`,并用只有父模块 Read 的真实账号验证正常详情、嵌套、重开、重试及伪造/跨父记录拒绝。
|
|
110
108
|
|
|
111
109
|
表单外壳,不直接渲染字段。它负责:
|
|
@@ -138,8 +136,16 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
138
136
|
- 维护 `FormDiyTableModel`、`OldForm`、`DiyFieldList`。
|
|
139
137
|
- 对外 emit `CallbackSetFormData` 和 `CallbackSetDiyTableModel` 给 `diy-form-full.vue`。
|
|
140
138
|
|
|
139
|
+
### 草稿箱的归属与异步上下文
|
|
140
|
+
|
|
141
|
+
`diy-form-full-data.mixin.js` 负责保存、列表和加载草稿,字段快照与恢复复用 `diy-form.vue` 的 `GetDraftData/ApplyVersionData`。列表保留 `SourceTableId`、`Status=Draft`、当前用户固定审计字段 `UserId` 三项过滤;后端填写创建人,前端不传任意用户归属。应用前再次核对归属,不能仅信任列表来源。
|
|
142
|
+
|
|
143
|
+
请求代次使用可访问、有限的数值状态,不依赖未初始化的下划线属性自增。响应必须同时匹配最新请求与 API、租户、用户、表单、记录、菜单及打开代次;迟到的保存/列表响应不能写入新上下文。失败、异常和拒绝的 Promise 都应结束当前请求的 loading。测试使用真实 Vue 实例和实际子表单快照/恢复方法,覆盖缺少身份、跨上下文迟到响应及 `false/0/空字符串/数组`,不能只把 `data()` 复制到普通对象掩盖代理行为。
|
|
144
|
+
|
|
141
145
|
### 前端 V8 上下文不是固定 DTO
|
|
142
146
|
|
|
147
|
+
原生 `FormSet` 的异步上下文绑定、加载代次与回归要求见 [运行时规则](references/progressive-02-8-运行时高频坑复盘.md#原生-formset-的异步上下文绑定)。
|
|
148
|
+
|
|
143
149
|
`DiyCommon.SetV8DefaultValue()` 只创建基础能力,`diy-table.vue`、`diy-form.vue`、`diy-form-full.vue` 和各 mixin 会按事件再挂载动态属性。新增 API 或修正文档时必须同时核对这些入口,不能只看一个 `V8` 对象字面量。
|
|
144
150
|
|
|
145
151
|
常见上下文差异:
|
|
@@ -182,10 +188,12 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
182
188
|
- 桌面壳层使用视口高度与可收缩的 flex 内容区,只有路由内容滚动,导航和 Tab 不随页面滚动;移动端仍保留文档滚动。用户入口含头像与姓名,不能使用纯图标的固定 flex 宽度;异步图表须在真实 DOM 挂载后观察尺寸变化,避免侧边/顶部导航切换后撑破卡片。
|
|
183
189
|
- 主题色、浅色/深色、菜单子级展开方式等需要“换设备仍生效”的选择必须保存到当前 DiyToken 用户的 `sys_user` 白名单字段;`localStorage` 只作为未安装新字段租户和匿名启动阶段的兼容回退,不能作为跨设备事实源。
|
|
184
190
|
- 已安装用户偏好字段时优先级固定为“当前用户显式值 → 租户 `sys_config` → 平台安全默认”;个人菜单值 `System` 表示继承租户配置。不得让上一位用户的浏览器本地主题覆盖下一位已登录用户。
|
|
191
|
+
- 登录页与登录后共用主题设置组件;登录页使用居中弹层且禁止调用个人保存队列。壁纸使用当前租户目录缩略图,登录后仅保存 `sys_user.LoginWallpaper` 中的目录 Id,不能持久化任意外部 URL;空值恢复默认行为,字段由系统账号及 SaaS 基础包交付。
|
|
192
|
+
- 登录前可展示当前设备最后一次成功登录用户的纯外观缓存,按规范化 API 地址与租户隔离,并按“缓存中的显式外观项 → 当前全局配置 → 平台默认”逐项合并;只在真实登录成功或当前用户偏好确认后更新。缓存白名单不得包含 Token、账号资料、角色和权限;损坏、未知项及跨租户缓存忽略,不新增匿名按账号查询个人设置的接口。登录页预览不改这份已确认缓存;登录成功后以当前用户服务器偏好为准,不能把旧缓存写入另一账号。
|
|
185
193
|
- 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
|
|
186
|
-
- 密度覆盖不能只改字号和单元格 padding
|
|
187
|
-
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
188
|
-
- `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon
|
|
194
|
+
- 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距、普通表格 `.cell` 的历史38/40px行高、模块/表单 Banner、表单顶部工具栏与折叠分组标头都必须采用同一密度 token,同步缩放字号、图标、padding和最小高度。多行内容保持自然高度,不能设置固定行高裁切。直角样式需按真实选择器优先级覆盖 `.el-message-box.mci-unified-message-box` 等双class的 important 壳,并验退出确认 Teleport 首帧。表格列宽拖动热区与可见分隔线分开,不能叠加两条边框造成2px视觉;验证拖拽保存仍可用。
|
|
195
|
+
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor/LoginWallpaper` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
196
|
+
- `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留按钮/输入边界、键盘焦点、加载指示与纯图标操作;登录方式图标、说明文字与按钮前景按所在真实表面配对,不能被全局渐变关闭规则改为白底白字。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名阶段只使用已确认的纯外观缓存、当前租户默认或当前匿名预览,不发起个人设置读取/写入。
|
|
189
197
|
- `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
|
|
190
198
|
- 新增全局开关 CSS 必须检查编译后选择器;scoped 中 `:global(html[attr]) .child` 会丢失后代范围,禁止用它隐藏装饰。使用独立非 scoped 且有完整登录/框架作用域的样式,或将完整选择器放进 `:global(...)`;必须断言开启全部开关时根 html、body、框架与弹层仍可见。
|
|
191
199
|
- 自助保存优先使用官方 `Managed` 接口引擎,由 `V8.CurrentUser.Id` 与 `V8.OsClient` 推导用户和租户,并在服务端构造固定白名单更新对象;接口参数禁止决定目标 Id/OsClient,也禁止写入 Account、Phone、Tenant、Dept、Role、Level、State、Pwd、认证因子和登录审计字段。只有缺少可复用可信原子能力时才新增 C# DTO/端点。保存成功后调用 `V8.Method.RefreshLoginUser` 刷新登录缓存,并让微服务宿主重新同步 `CurrentUser`。
|
|
@@ -193,8 +201,6 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
193
201
|
- 导航切入或退出 `TopSide` 会重建顶栏组件;卸载前必须发送尚未保存的偏好,在途请求与后续选择共用按 store、API 地址、租户、账号和登录会话隔离的运行时队列。新顶栏继承失败状态和重试数据,旧响应不能覆盖更新的选择或跨账号合并队列;标准续签保留 `MicroiSessionId` 时也保留最终待保存选择,计算属性显式依赖 Pinia.Token。JWT 解码仅用于本地队列归属,服务端仍通过标准 DiyToken 验证授权;不得将会话凭据写入偏好存储、日志或响应。使用真实 Vue computed 和组件生命周期回归 `theme-select-autosave-lifecycle.spec.mjs` 验证卸载、在途合并、失败重试、续签及账号/租户/会话切换。
|
|
194
202
|
- 主题回归同时执行 `framework-appearance.spec.mjs`、`ui-density-runtime.spec.mjs` 与 `theme-select-autosave-lifecycle.spec.mjs`;真实浏览器默认使用一个常规桌面 CSS 视口(优先用户实际视口,否则 1920×1080),验证系统设置与左菜单在 90/110 两档的尺寸变化、全局/个人继承与恢复、全部顶栏隐藏后账号仍在,以及装饰关闭后的亮暗和焦点可见性。只有用户明确要求或缺陷涉及超宽屏时才追加 4K,不把截图文件像素尺寸当作浏览器 CSS 视口。
|
|
195
203
|
|
|
196
|
-
---
|
|
197
|
-
|
|
198
204
|
<!-- /microi-progressive:chunk -->
|
|
199
205
|
<!-- microi-progressive:chunk id=microi-client-frontend-003 sha256=301f766dc1ab1c6b021aa861a76b44844905d432393ab407472f58f00d6283cd -->
|
|
200
206
|
## 4. 工作流与表单提交
|
|
@@ -2,9 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-008 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-008 sha256=a435b99b6bfad7ab62d95ef78f0614205e5da51cfc0d4f2b7d3a1f7c6eb9c2ea -->
|
|
6
6
|
## 8. 运行时高频坑复盘
|
|
7
7
|
|
|
8
|
+
### 原生 FormSet 的异步上下文绑定
|
|
9
|
+
|
|
10
|
+
`form-v8-context.js` 为原生 `FormSet` 绑定表单对象、记录及加载代次;
|
|
11
|
+
`SetV8DefaultValue` 和 `RefreshCachedV8Context` 都必须接入,`GetAllData` 每次加载递增代次。
|
|
12
|
+
不得恢复成会把旧异步响应写入新记录的共享 `self.FormSet` 引用。运行
|
|
13
|
+
`form-v8-context.spec.mjs`,验证切记录、同记录重载、卸载和正常事件链;直接写 `V8.Form`
|
|
14
|
+
及其它异步副作用仍需自己的当前性检查。
|
|
15
|
+
|
|
8
16
|
### 前端 V8.Http 与后端同构契约
|
|
9
17
|
|
|
10
18
|
`Microi.Client` 的前端 V8 运行时在 `src/utils/diy.common.js` 挂载 `V8.Http`,实现位于 `src/utils/v8-http.js`。修改 HTTP 能力时必须保持:
|
|
@@ -23,6 +23,8 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
23
23
|
|
|
24
24
|
平台 Api/Web 版本入口可生成独立开发工具连接。收到连接 JSON 时,用 `microi auth import --session-stdin` 从标准输入导入,再运行 `microi ai init` 和 `microi doctor`;禁止将 Token 放入命令行、源码或日志,不再索取账号密码。开发 Token 使用现有终端有效期,可独立撤销;它只授权该业务租户,不能替代 Microi Agent 的官方 AI 计费账号登录。访问密钥的最小业务 scope 不能替代完整 MCP 管理身份。第三方 App Secret 默认进入系统设置“安全与服务接入”,优先使用 `microi_manage_server_private_secret`。
|
|
25
25
|
|
|
26
|
+
共享开发会话的已有签名 `Did` 必须跨 CLI/VSCode/MCP 保持稳定,仅缺失/`Empty` 时受控迁移;本地解析不代替后端验签。`TokenReplaced` 先回读同连接共享 Token,真正吊销、超界过期或登录缓存丢失须有效登录后重新复制导入,禁止用 `tokenlogin` 绕过;空身份 `Code=1` 不算成功。平台后端修复兼容已发布 CLI 6.2.1,内部源码加固不自动触发 Agent 产品发行;详细边界见 `v8-security` 的 Token 章节。
|
|
27
|
+
|
|
26
28
|
每次 Microi 对话先完整读取工作区 `microi.skills/workspace-conventions/SKILL.md`;工作区尚未初始化时读取本插件同级 `../workspace-conventions/SKILL.md`。按其中首部完成创始人身份识别及平台功能四项同步检查,再进入专项流程;完整规则只维护该基础入口,不复制到本路由。
|
|
27
29
|
|
|
28
30
|
在已初始化吾码工作区中,用户仅描述业务需求也自动读取 `microi-system-delivery/SKILL.md`
|
|
@@ -7,6 +7,11 @@ description: Microi 选项类字段的数据源 Key/Value 映射规范。用于
|
|
|
7
7
|
|
|
8
8
|
# microi-datasource-mapping — 数据源 Key/Value 映射规范
|
|
9
9
|
|
|
10
|
+
选择器显示/保存映射与业务回填是不同功能。创建或修复项目、人员、客户等关联选择时,
|
|
11
|
+
必须按 `../microi-form-engine/references/form-generation-quality.md` 核对当前表已有的
|
|
12
|
+
关联 Id、名称、负责人、电话、岗位和组织列,明确来源与逐字段回填、改选/清空及历史快照。
|
|
13
|
+
`SelectSaveField` 和已选值补查不会自动填这些其它字段。
|
|
14
|
+
|
|
10
15
|
## 一、后台字段数据源的两种模式
|
|
11
16
|
|
|
12
17
|
Microi 低代码平台中,`Select / Radio / Checkbox` 等选项组件支持两种数据源配置方式:
|
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
本参考用于 AI 生成、审查或修复 `diy_field.Config`。事实源仍是 `Microi.Client/src/views/form-engine/diy-field-component/` 与 `diy-component-list.json`;组件源码新增配置时,必须同步更新本文件和官方文档。
|
|
4
4
|
|
|
5
|
+
全部当前控件的配置路径、设计器选项与来源哈希查询 MCP `microi_get_form_component_catalog`;
|
|
6
|
+
离线读 `../../microi-form-engine/references/component-config-index.md`。
|
|
7
|
+
生成决策、关联回填、日期精度和验收统一读
|
|
8
|
+
`../../microi-form-engine/references/form-generation-quality.md`。
|
|
9
|
+
日期/钟点/月日统一使用 DateTime,`DateTimeType=MM-dd` 在配套 PC 保存 `11-04`,
|
|
10
|
+
`HH:mm` 保存钟点;不因格式特殊改成 Text。多选日期需容量支持数组的物理列。
|
|
11
|
+
|
|
5
12
|
## 字段级元数据
|
|
6
13
|
|
|
7
14
|
| 字段 | 说明 |
|
|
@@ -163,7 +163,7 @@ PowerShell 5/7 进程管理入口同时固定 UTF-8 控制台与管道输出;
|
|
|
163
163
|
不代表错误流编码正确。用真实子进程强制继承旧代码页,核对非零拒绝状态、完整中文
|
|
164
164
|
诊断和无非法 UTF-8;保留原锁与进程归属断言,再重新执行所选发布门禁。
|
|
165
165
|
|
|
166
|
-
macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux
|
|
166
|
+
macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式。吾码PC默认现代构建保留6144MiB堆,以5632MiB(5.5GiB)进程树预算加max(1GiB,物理内存3%)余量准入,32GiB主机约6.5GiB、64GiB约7.42GiB;全机占用97%暂停本轮树,95%以内连续五秒恢复。低于8GiB宿主保留至少1.5GiB余量,宿主限堆/自定义堆或未知阶段按堆加有界原生开销回退;串行压缩/legacy保留1536/2048MiB堆及768MiB原生下限,32GiB启动目标约3.25/3.75GiB。顺序阶段不叠加峰值,正式发布不跳保护,不结束共享服务;修复后执行所选发布门禁。
|
|
167
167
|
|
|
168
168
|
DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 PlatformRelease、加密和最终产物冒烟;不得以专项测试替代发布门禁。
|
|
169
169
|
|
|
@@ -268,9 +268,9 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
268
268
|
## 构建资源保护
|
|
269
269
|
|
|
270
270
|
启动 Node/Vite/dotnet/Docker build 前检查物理内存和同类进程。默认只运行一个重任务。
|
|
271
|
-
|
|
271
|
+
吾码PC使用上文专用准入和97%暂停/95%稳定恢复策略;其余任务的启动门槛按“当前阶段进程树预算 + `max(1.5GB, 物理内存 5%)` 系统安全余量”计算,
|
|
272
272
|
优先采用实测峰值;顺序阶段分别计算,不叠加峰值,也不得再用固定 20% 随机器容量放大门槛。
|
|
273
|
-
|
|
273
|
+
资源不足时改做定向测试/构建,不并行启动多个全量任务;其余任务全机占用达到95%时暂停或终止本轮启动的重任务树。
|
|
274
274
|
|
|
275
275
|
## Windows 多 AI 本地服务与 Release 文件锁
|
|
276
276
|
|
|
@@ -107,7 +107,7 @@ Obfuscar 路径转换只适用于 Git Bash/MSYS/Cygwin。macOS/Linux 的 `/Users
|
|
|
107
107
|
|
|
108
108
|
在线 AI MCP 的生产依赖和命令复制为完整、自足的运行快照,生产命令链接解析为真实文件,保留执行权限;损坏、越界及目录循环链接提前拒绝。临时构建目录清理后命令必须仍能运行,旧依赖不得残留;不放宽原制品门禁。
|
|
109
109
|
|
|
110
|
-
前端构建的 macOS 可用内存按有界 `vm_stat` 的真实页大小计算空闲页加可回收文件页,不叠加匿名非活动、压缩或预读页。解析失败和探针超时回退原生空闲量;Windows/Linux
|
|
110
|
+
前端构建的 macOS 可用内存按有界 `vm_stat` 的真实页大小计算空闲页加可回收文件页,不叠加匿名非活动、压缩或预读页。解析失败和探针超时回退原生空闲量;Windows/Linux 保持原统计方式。吾码PC默认现代构建保持6144MiB堆,以5632MiB进程树预算加max(1GiB,物理内存3%)准入,32GiB约6.5GiB、64GiB约7.42GiB;97%暂停、95%以内连续五秒恢复。低于8GiB宿主至少保留1.5GiB余量,宿主限堆/自定义堆及未知阶段回退到堆加有界原生开销;串行压缩/legacy仍为1536/2048MiB堆、768MiB原生下限,32GiB启动目标约3.25/3.75GiB。各阶段分别计算,不跳过保护,不结束共享服务。
|
|
111
111
|
|
|
112
112
|
后端:
|
|
113
113
|
|
|
@@ -10,10 +10,10 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
10
10
|
| `about/microi-training-syllabus.md` | microi-system-delivery, business-blueprint | 培训知识域和交付全景 |
|
|
11
11
|
| `about/partner.md` | microi-system-delivery | 信息型页面;产品与交付能力索引 |
|
|
12
12
|
| `about/template.md` | microi-system-delivery | 信息型页面;官方内容模板 |
|
|
13
|
-
| `form-engine/all-form-component.md` | microi-form-engine, microi-form-layout |
|
|
13
|
+
| `form-engine/all-form-component.md` | microi-form-engine, microi-form-layout | 当前控件配置、日期精度、物理类型、业务编号/历史编码、自动编号/只读预估和布局 |
|
|
14
14
|
| `form-engine/form-custom-control.md` | microi-form-engine, microi-client-frontend | 定制控件、前端扩展边界 |
|
|
15
|
-
| `form-engine/form-datasource.md` | microi-form-engine, microi-datasource-mapping |
|
|
16
|
-
| `form-engine/form-engine-info.md` | microi-form-engine, v8-crud-api |
|
|
15
|
+
| `form-engine/form-datasource.md` | microi-form-engine, microi-datasource-mapping | 选项数据源、逐字段关联回填/清空/异步代次、快照和回显 |
|
|
16
|
+
| `form-engine/form-engine-info.md` | microi-form-engine, microi-client-frontend, v8-crud-api | 表单模型、工具栏、可读记录标题、字段定位、紧凑密度及草稿归属与恢复 |
|
|
17
17
|
| `form-engine/form-field-info.md` | microi-form-engine, v8-table-event | 表单/字段属性与事件 |
|
|
18
18
|
| `form-engine/model-engine.md` | v8-template-engine | 表格/表单模板 |
|
|
19
19
|
| `getting-started/docker-run.md` | microi-deployment, vision-engine | Docker 部署、历史独立编排、群晖CPU视觉双服务及可选行为模型与验收 |
|
|
@@ -34,7 +34,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
34
34
|
| `more/office.md` | v8-export-import, microi-microservice | Office 导入导出与在线编辑集成 |
|
|
35
35
|
| `more/security.md` | v8-security | 平台安全和兼容基线 |
|
|
36
36
|
| `more/sso.md` | microi-sso, v8-security, app-store | 双向 OIDC/SAML2/CAS、账号映射、协议端点、安全基线、商城发布与验收 |
|
|
37
|
-
| `more/sys-config.md` | v8-utilities, microi-deployment, microi-client-frontend |
|
|
37
|
+
| `more/sys-config.md` | v8-utilities, microi-deployment, microi-client-frontend | 系统/租户配置、登录前外观缓存与壁纸、个人覆盖、全框架密度、框架显隐和敏感边界 |
|
|
38
38
|
| `system-engine/ai-engine.md` | ai-engine, v8-http-integration, microi-ai-application | 模型代理、License、V8.AI、MCP 对话、跨端调用和安全 |
|
|
39
39
|
| `system-engine/ai-cad.md` | ai-engine, v8-api-config, microi-ai-application, app-store | 吾码接口引擎到 SolidWorks 桌面插件的参数计划、模型回读、BOM 与图纸交付边界 |
|
|
40
40
|
| `system-engine/digital-human-live.md` | ai-engine, microi-microservice, app-store, playwright-e2e | 自建数字人直播、本机推理、话术知识、OBS 接入、4K 功能截图与实测边界 |
|
|
@@ -54,7 +54,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
54
54
|
| `system-engine/multi-end-client.md` | microi-client-frontend, microi-mobile-app-quality, microi-uniapp-frontend | PC/WebOS/UniApp/App 边界;统一快捷登录、租户长效会话、地图服务、单列安全区、持续动效与公开交付 |
|
|
55
55
|
| `system-engine/microi-ui.md` | microi-ui | Microi.UI 组件和主题 |
|
|
56
56
|
| `system-engine/message-notification.md` | message-notification | 统一消息通知微服务、原 mic_msgset 多通道配置、MCP/Skills、租户/产品版本与帐号范围、后端重启领取、居中弹窗与 SignalR/轮询恢复 |
|
|
57
|
-
| `system-engine/module-engine.md` | module-engine, v8-menu-buttons, v8-template-engine, microi-mobile-app-quality |
|
|
57
|
+
| `system-engine/module-engine.md` | module-engine, v8-menu-buttons, v8-template-engine, microi-mobile-app-quality | 菜单统计、复合列/卡片、业务编号展示、真实追溯、按钮角标和页面入口 |
|
|
58
58
|
| `system-engine/mq.md` | v8-mq-mqtt | RabbitMQ 租户连接、队列规范化、事务发布、消费确认、有限重试、幂等与多节点运行 |
|
|
59
59
|
| `system-engine/mqtt-engine.md` | v8-mq-mqtt | MQTT Broker、SaaS 认证、Topic ACL、V8 事件、设备路由、下行与生产部署 |
|
|
60
60
|
| `system-engine/page-engine.md` | page-engine | 界面引擎 JSON |
|
|
@@ -77,7 +77,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
77
77
|
| `v8-engine/form-engine.md` | v8-crud-api, v8-formengine-http, module-engine, microi-form-engine | FormEngine API、HTTP、原生查询身份/统计范围与按表主库策略 |
|
|
78
78
|
| `v8-engine/mcp-server.md` | microi-system-delivery, microi-codex-installer, v8-security | MCP 工具、确认、审计、文件、日志、备份与访问密钥 |
|
|
79
79
|
| `v8-engine/microi-agent.md` | microi-codex, microi-codex-installer | Microi Agent 桌面安装、连接诊断与更新 |
|
|
80
|
-
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-http-integration, v8-security, ai-engine, print-engine | 全部前端 V8、平台 AI
|
|
80
|
+
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-http-integration, v8-security, ai-engine, print-engine, uniapp-mall-assets | 全部前端 V8、平台 AI、强身份验证、扫码、蓝牙打印与原始 HTTP 公有资源兼容边界 |
|
|
81
81
|
| `v8-engine/v8-server.md` | v8-utilities, v8-api-config, v8-http-integration, v8-security, ai-engine | 全部后端 V8、强身份票据、平台 AI 和专项路由 |
|
|
82
82
|
| `v8-engine/vs-code-plugin.md` | v8-explorer-tree, microi-client-frontend, workspace-conventions | VS Code 插件、Microi CLI、AI/MCP 初始化、类型、资源树和共享工作区 |
|
|
83
83
|
| `v8-engine/where.md` | v8-crud-api, v8-sql-query | 参数化 `_Where` 条件 |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: microi-form-engine
|
|
3
|
-
description: Microi 表单引擎设计与控件配置指南。用于创建或修改 diy_table、diy_field
|
|
3
|
+
description: Microi 表单引擎设计与控件配置指南。用于创建或修改 diy_table、diy_field、全部表单控件、关联选择回填、日期时间精度、字段属性、数据源、子表、关联表单、定制组件、布局和字段事件。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
@@ -25,6 +25,7 @@ Config/Data、菜单查询列与缓存保持一致。
|
|
|
25
25
|
|
|
26
26
|
## 必读参考
|
|
27
27
|
|
|
28
|
+
- 生成或修复任何字段前读取 [表单生成质量规则](references/form-generation-quality.md):为全部字段确认业务语义、数据源、关联回填、日期精度、配置与验收;不得只建控件外观。相关字段配置用 `microi_get_form_component_catalog` 查询,旧宿主查 [控件配置源码索引](references/component-config-index.md)。
|
|
28
29
|
- 控件完整目录、推荐物理类型和选择规则:`references/component-catalog.md`
|
|
29
30
|
- 数据源、字段属性、事件与定制组件:`references/data-source-events.md`
|
|
30
31
|
- 表单分组与宽度:`../microi-form-layout/SKILL.md`
|
|
@@ -45,7 +46,7 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
45
46
|
核对控件名;官网页面可能含历史控件。
|
|
46
47
|
3. 新表用 `microi_create_table`;字段用 `microi_add_field`,不得直接写
|
|
47
48
|
`diy_field` 或执行临时 DDL。
|
|
48
|
-
4. 选项控件同时设置 `data/config
|
|
49
|
+
4. 选项控件同时设置 `data/config`;关联控件明确保存字段、显示字段和其它关联列的逐字段回填映射。当前表已有负责人、电话、岗位、组织等列时主动核对来源与联动;选择名称不会自动回填。使用字段 V8/`OpenTable.SubmitV8`,或者 MCP `autoFill` 单选构建器;合并既有事件,覆盖改选、清空与迟到响应。重要归属由后端重算校验。
|
|
49
50
|
5. 字段多时设置 `diy_table.Tabs` 与字段 `Tab`;只有整行控件设置
|
|
50
51
|
`FormWidth=24`,普通字段省略。`CollapseGroup` 属于整行控件,必须显式保存
|
|
51
52
|
`FormWidth=24`,且 `Config.CollapseGroup.ShowFieldCount` 默认补为 `true`。
|
|
@@ -182,7 +183,9 @@ MCP 建模只使用:
|
|
|
182
183
|
- `int` / `bigint`
|
|
183
184
|
- `decimal(18,N)`
|
|
184
185
|
|
|
185
|
-
|
|
186
|
+
日期时间单值通常用 `varchar(25)`,组件用 `DateTime`,按实际精度配置 `DateTimeType`:
|
|
187
|
+
`date/datetime/datetime_HHmm/HH:mm/HH:mm:ss/month/year/MM-dd` 等;`MM-dd` 表示无年份的月日,
|
|
188
|
+
不是文本框。多选日期使用足够长的 varchar/mediumtext 保存数组,具体格式见质量规则。
|
|
186
189
|
开关用 `int`。不得生成 `datetime/date/timestamp/float/double/boolean/bool/string/text/nvarchar`。
|
|
187
190
|
前端设计器 JSON 中的历史默认类型不能覆盖服务器建模规则。
|
|
188
191
|
|
|
@@ -191,6 +194,20 @@ MCP 建模只使用:
|
|
|
191
194
|
但未触碰控件的表单模型保留原始 `NULL`,显式切换才提交 `0/1`;不要为了视觉状态
|
|
192
195
|
设置 `DefaultValue=1` 或在表单加载时回写旧记录。其它 `Switch` 保持原行为。
|
|
193
196
|
|
|
197
|
+
## 自动编号规则与只读预估
|
|
198
|
+
|
|
199
|
+
建模、编号修复或列表显示长串机器编码时,先读 [业务编号与追溯契约](references/business-numbering.md)。
|
|
200
|
+
区分内部 Id、可读业务编号和历史外部编码;在蓝图中确定规则、唯一范围、展示和追溯验收,
|
|
201
|
+
不因使用了 AutoNumber 就省略业务设计,也不为美化展示重写主键或历史正式编码。
|
|
202
|
+
|
|
203
|
+
- `AutoNumber` 的数据规则与生成规则使用 Radio:`DataRule='' / NoDeleted`,`CreateRule='' / MaxValueAdd1`。分别表示全部/排除已删除匹配数据,以及匹配记录数/最大编号数字部分加1;不因为改呈现而改变保存值域。
|
|
204
|
+
- `POST /api/FormEngine/PreviewAutoNumbers` 使用当前菜单/表的新增权限和服务器真实Config,只读计算预计值。请求传 `FormEngineKey`、`_SysMenuId`、真实 `FieldIds` 和只含关联列当前值的 `_FormData`;子表保留当前 `_TableChildAuth`。不接受客户端Config覆盖权威规则。
|
|
205
|
+
- 仅展示返回的 `Data.Values[fieldId]` 且必须明确 `IsEstimate=true / Reserved=false`。预计不占号、不保留编号、不写表单,不触发字段V8;保存时重新分配,不能保证预估等于最终值。关联值改变、API/租户上下文变化或卸载后丢弃旧预估;旧版/失败时显示保存时自动生成,不本地猜编号。
|
|
206
|
+
- 含非空前缀或补零位数大于1时,数值列无法原样保存,设计器、预览与保存均应拒绝并说明改为兼容的 `varchar`。先核对现有物理类型、容量、数据和索引,再经表单设计/MCP调整;保留历史编号,不自行SQL或前端转换。只有无前缀且位数为1的纯数值编号可保留数值列。
|
|
207
|
+
- 配置UI和预估实现为 `diy-field-component/diy-autonumber.vue`、`auto-number-preview.js`;回归 `auto-number-preview.spec.mjs` 覆盖只发依赖字段、零占号、数值配置拒绝及真实Vue迟到/卸载边界。源码/单元通过与实际接口、MCP配置回读及保存结果分开记录。
|
|
208
|
+
- 自动编号新旧分配协议不支持混合写节点。升级前暂停相关表的编号写入,排空并停止所有旧 API 节点,确认旧连接的未提交事务已提交或回滚,再启动新节点并验证预估、实际保存与并发分配;客户端升级和旧缓存过期不构成安全证据,不宣称无缝滚动兼容。客户部署另行验证该前置,不自动代客户升级。
|
|
209
|
+
- 同一物理租户/表/列共享未完成事务预留,不按规则、前缀或关联组拆分,防止配置改变或数据库 collation 将大小写值视为同组时重号。不同组并发可能暂时跳号;事务完成后按各组已提交因子计算,不承诺连续无缺口。不能为了消除跳号回收未知结果或仍活跃事务的预留。
|
|
210
|
+
|
|
194
211
|
## 选项字段
|
|
195
212
|
|
|
196
213
|
`Select`、`MultipleSelect`、`Radio`、`Checkbox` 没有数据源时会显示空选项:
|
|
@@ -340,6 +357,7 @@ MCP 建模只使用:
|
|
|
340
357
|
- `Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted` 是 DIY 表的正常固定字段。物理列存在时必须有对应 `diy_field` 元数据,不能长期出现在“异常字段修复”列表;`diy_table.DisplayDefaultField` 只控制设计器默认是否显示这些字段,不等于删除元数据。
|
|
341
358
|
- 统一通过平台修复接口或 MCP `microi_repair_audit_fields` 补齐/恢复元数据。修复必须按 `OsClient` 使用共享租约锁,可重复执行,只处理已存在的固定物理列,不借机执行 DDL,并在成功后清理字段缓存。
|
|
342
359
|
- 表格里的创建人、创建时间、修改时间等审计列应与普通字段共用列头高级搜索、权限和格式化逻辑。
|
|
360
|
+
- `mci_drafts` 的创建人使用固定审计字段 `UserId`,不能以不存在的 `CreateUser` 查询。草稿箱必须同时限定当前 `SourceTableId`、`Status=Draft` 和当前用户 `UserId`;创建人由后端写入,禁止删除归属条件或由前端冒充。排错先读不含 `Data` 正文的最小元数据,恢复测试仅使用当前用户的草稿,并覆盖 `false`、`0`、空字符串和数组。
|
|
343
361
|
|
|
344
362
|
## 验收
|
|
345
363
|
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# 业务编号与追溯契约
|
|
2
|
+
|
|
3
|
+
用于业务表建模、编号修复及列表/卡片展示设计。先读当前 Schema、菜单配置、用户编号要求
|
|
4
|
+
和少量授权样本;没有客户结构和样本时,只报告规则缺口,不断言某个长串值就是主键。
|
|
5
|
+
|
|
6
|
+
## 区分三种用途
|
|
7
|
+
|
|
8
|
+
| 用途 | 保存与关联 | 默认呈现 |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| 内部 Id、外键、Guid | 稳定标识;用于真实关联与权限,不随业务编号变化 | 普通业务列表隐藏,明确调试需求按权限显示 |
|
|
11
|
+
| 业务编号,如组织 ZZ001、单据 DD000001 | 优先复用已有正式编号;保存为文本以保留前导零 | 与名称配对,支持检索、复制、详情及适用的导出 |
|
|
12
|
+
| 外部/历史编码 | 保留来源系统、原值及与内部 Id 的映射;可为长串值 | 按追溯需要放次要区域/详情,不自动取代正式业务编号 |
|
|
13
|
+
|
|
14
|
+
这些是设计用途,不是新的 Config/Manifest 属性。字段名 Code 可以是正常业务编号;
|
|
15
|
+
“内部业务单号”也不等于技术主键。Guid 组件、真实外键和明确的技术标识才按内部标识处理。
|
|
16
|
+
字段名称和长度都不能单独证明实际用途,显式用户配置优先。
|
|
17
|
+
|
|
18
|
+
## 每张需要编号的表先确定方案
|
|
19
|
+
|
|
20
|
+
- 是否已有可复用编号、由本系统生成还是由外部系统分配;字典、日志、关系表不机械新增流水号。
|
|
21
|
+
- 前缀、补零位数、容量、关联分组,是否存在年度/业务周期及重置规则;写清多个节点和并发保存的分配者。
|
|
22
|
+
- 唯一范围是整表、租户还是年度/分组;只有整表唯一时使用单列唯一,分组唯一按实际字段设计组合约束。
|
|
23
|
+
- 创建后能否改号、作废后是否保留,以及未知写入、失败重试和导入数据如何保持同一业务记录。
|
|
24
|
+
- 列表/卡片/选择器/详情/搜索/打印导出展示哪一列;真实跳转使用哪个菜单和内部记录 Id。
|
|
25
|
+
|
|
26
|
+
已有合法行业编码、客户指定格式或外部编码优先,不能把“短前缀+流水”强制用于全部业务。
|
|
27
|
+
前缀和位数由需求决定,不把某个客户的 ZZ/QY/JH 规则写入平台默认值。
|
|
28
|
+
|
|
29
|
+
需要平台流水时复用服务端 AutoNumber;当前控件配置先查 `microi_get_form_component_catalog`
|
|
30
|
+
或 `microi_build_field_config`。例如整表唯一的组织编号:
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
{
|
|
34
|
+
"name": "Code", "label": "组织编号", "type": "varchar(50)",
|
|
35
|
+
"component": "AutoNumber", "unique": 1,
|
|
36
|
+
"configSource": { "sourceType": "AutoNumber", "prefix": "ZZ", "length": 3 }
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
这只是字段片段,省略的主键由平台创建。不能把示例直接应用到未授权生产库;分组流水
|
|
41
|
+
须按实际范围调整唯一约束。时间前缀、分组和重置须核对当前原生规则,不编造占位符或承诺
|
|
42
|
+
未实现的年度清零。预估值不占号,保存结果为准;并发分配不承诺连续无缺口。
|
|
43
|
+
|
|
44
|
+
禁止用前端 max+1、行号、当前页索引、随机 Guid/ULID 或截短 Id 代替所需流水;
|
|
45
|
+
截短随机串不能证明唯一。重要编号不得仅在前端生成或只加只读样式。
|
|
46
|
+
|
|
47
|
+
## 展示与可点击追溯
|
|
48
|
+
|
|
49
|
+
1. 默认优先“业务名称 + 业务编号”,负责人/状态等进入其它合适区域。显式 ViewSchema、
|
|
50
|
+
列表列和隐藏列先完整回读再合并,不覆盖已有正确布局;需要显示内部 Id 时同时检查隐藏列。
|
|
51
|
+
2. 用 `microi_get_module` 回读查询列、隐藏列、ViewSchema,并核对实际响应含编号。
|
|
52
|
+
Code/OrgCode 不应仅因名称不同出现不同待遇;不能仅检查元数据字符串就声称页面可读。
|
|
53
|
+
3. 列表、卡片、选择器、详情和适用的导出使用同一正式编号;长外部编码按需提供完整值与复制,
|
|
54
|
+
不能只通过省略号、颜色或截短隐藏错误。名称仍用于辨认,编号仍用于精确查找。
|
|
55
|
+
4. 追溯依靠真实外键或关联表,目标菜单和记录 Id 必须来自当前租户。使用平台实际支持的
|
|
56
|
+
OpenDetail/OpenForm/OpenList 或前端表单入口,并验证目标记录和当前用户权限。
|
|
57
|
+
5. 来源缺失、已删除、无权限分别呈现清楚状态;没有目标时不渲染可点击空链接。
|
|
58
|
+
下游是一对多集合时按当前记录外键打开受权列表,不把名称相似当成关系,也不做逐行 N+1。
|
|
59
|
+
6. 历史来源缺失只能标注,不能虚构上游;新增关联或补齐映射前核对证据和写入授权。
|
|
60
|
+
|
|
61
|
+
## 存量修复与验收
|
|
62
|
+
|
|
63
|
+
先区分“字段选错、格式未配置、编号未生成、旧记录待治理、客户端/缓存未更新”。
|
|
64
|
+
有正确业务编号时只调整展示;缺编号时先提出可核对的映射与增量方案,保留主键、外键、
|
|
65
|
+
历史外部编码、已发正式单据和审计。未知结果先回读;不能为了截图整齐批量改号或伪造来源。
|
|
66
|
+
|
|
67
|
+
验收至少覆盖保存后重新打开、编号搜索/复制、列表与卡片、适用的导出;流水覆盖并发、
|
|
68
|
+
重试及唯一范围,追溯覆盖真实上游、多个下游、缺失来源和无权限账号。不能用当前页行号
|
|
69
|
+
冒充持久编号,也不能把“已计划改号”、仍在执行的任务或蓝色文字当作验收完成。
|
|
70
|
+
离线/隔离测试、正式渠道分发和目标客户验收分别记录。
|