@microi.net/cli 5.8.7 → 5.8.9
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 +3 -3
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/microi-skills.meta.json +203 -203
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +17 -17
- package/skills/microi-client-frontend/SKILL.md +3 -2
- package/skills/microi-docs-coverage/references/capability-map.md +1 -1
- package/skills/microi-form-layout/SKILL.md +205 -205
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
- package/skills/microi-system-delivery/SKILL.md +154 -137
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +239 -193
- 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 +217 -217
|
@@ -1,193 +1,239 @@
|
|
|
1
|
-
# microi-system-delivery 详细参考 1
|
|
2
|
-
|
|
3
|
-
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
|
-
|
|
5
|
-
新建业务表的字段落地后必须配置默认表单 Banner:完整 Manifest 使用
|
|
6
|
-
`tables[].formBanner`,逐步建模调用 `microi_configure_form_banner`。标题、图片、标签和
|
|
7
|
-
统计都应来自真实字段或真实接口引擎;配置写 `diy_table`,禁止写入 `sys_menu`。即使用户
|
|
8
|
-
没有逐项指定,也必须写入类型感知的合理默认值,不能交付空 Banner。
|
|
9
|
-
|
|
10
|
-
<!-- microi-progressive:chunk id=microi-system-delivery-005 sha256=
|
|
11
|
-
##
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
-
|
|
77
|
-
|
|
78
|
-
-
|
|
79
|
-
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
- `
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
-
|
|
175
|
-
-
|
|
176
|
-
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
4.
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
1
|
+
# microi-system-delivery 详细参考 1
|
|
2
|
+
|
|
3
|
+
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
|
+
|
|
5
|
+
新建业务表的字段落地后必须配置默认表单 Banner:完整 Manifest 使用
|
|
6
|
+
`tables[].formBanner`,逐步建模调用 `microi_configure_form_banner`。标题、图片、标签和
|
|
7
|
+
统计都应来自真实字段或真实接口引擎;配置写 `diy_table`,禁止写入 `sys_menu`。即使用户
|
|
8
|
+
没有逐项指定,也必须写入类型感知的合理默认值,不能交付空 Banner。
|
|
9
|
+
|
|
10
|
+
<!-- microi-progressive:chunk id=microi-system-delivery-005 sha256=8f34122f08c3cee8f4aed5054c012cb560904442ea080fa2fc3d495b73b53a25 -->
|
|
11
|
+
## 完整系统开发默认交付清单(原推荐提示词 1–8)
|
|
12
|
+
|
|
13
|
+
以下八项来自官网最后编号版推荐提示词,是完整系统新建/开发的默认交付要求。
|
|
14
|
+
以企业架构、业务产品、低代码/V8、UI/UX、数据工程和自动化测试的联合视角完成需求;
|
|
15
|
+
用户明确的需求及已有正确配置优先。每项必须记录实现位置与验收证据,不能因短提示词未重复展开而漏做。
|
|
16
|
+
|
|
17
|
+
### 1. 深度需求分析与持续文档
|
|
18
|
+
|
|
19
|
+
- 使用用户指定 MCP 开发完整、完善的系统。认真读取全部需求文档,深度分析业务关系、角色、流程和边界。
|
|
20
|
+
- 在需求文件同目录维护一份详细 Markdown 需求/交付文档,作为可持续读写的事实源;没有需求文件时放在项目文档目录。后续需求变更立即同步,不只交付方案、代码片段或待办清单。
|
|
21
|
+
|
|
22
|
+
### 2. 成熟建模、业务动作与完整验收数据
|
|
23
|
+
|
|
24
|
+
- 开始前盘点真实 Schema、表、字段、索引、菜单、接口引擎、事件、工作流、页面、角色及已有数据;复用并幂等更新,禁止重复建表/菜单或覆盖正确配置。
|
|
25
|
+
- 完整创建需求内的菜单、表、字段、V8 按钮、V8 事件和相关资源,设计成熟业务所需的唯一约束、普通索引、组合索引及正确表间关系。复杂业务按钮调用接口引擎,前端 V8 只做确认、参数收集、提示和刷新。
|
|
26
|
+
- 在已授权生成验收数据的开发/验收租户,每张业务表准备至少 100 条左右可复现数据,已有足量数据优先复用、缺量才补齐;主子表关联、流程操作、状态流转、金额/库存等业务关系必须合理。字典/系统配置不为凑数量伪造无效选项;逐表报告数量及确有业务基数限制的例外。
|
|
27
|
+
- 业务界面和记录名称使用正常业务语义,不显示“测试001”等测试字眼,呈现完整运行环境;数据来源和可清理种子标识保留在验收记录中。不得把验收数据灌入未授权的生产库或声称其为真实交易。
|
|
28
|
+
- 补齐全部选项/关联字段的数据源,需要多个账号、角色和权限路径时一并创建并验收。
|
|
29
|
+
|
|
30
|
+
### 3. 自主推进与 MCP 生成闭环
|
|
31
|
+
|
|
32
|
+
- 合理技术细节自行决策并持续执行,不把可通过 Schema、Skills、MCP 或浏览器发现的信息重复询问用户;只对无法推断的关键业务决定、目标连接或必要授权询问。
|
|
33
|
+
- 先调用 `microi_get_db_schema`、`microi_get_manifest_schema`,形成 Manifest;依次执行 `microi_plan_system`、`microi_generate_system dryRun:true`、已确认写入范围内的真实生成(`dryRun:false`、`confirmExecution`)和 `microi_validate_system`。用户已有明确写入授权时不重复索要同一授权。
|
|
34
|
+
|
|
35
|
+
### 4. 表单宽度、数据能力与业务看板
|
|
36
|
+
|
|
37
|
+
- 主表单默认打开宽度 80%,第一层子表 75%,第二层 70%,更深层每级递减 5 个百分点;依据真实打开层级配置,不能把全部子表都设为 80%。过深嵌套或移动窄屏先保证内容可读,并记录有依据的响应式调整;用户指定宽度优先。
|
|
38
|
+
- 为需求内业务表启用数据日志、数据评论、数据版本,并用真实界面/操作确认生效。按业务域组织菜单,不把所有模块塞进一个总菜单。
|
|
39
|
+
- 根据业务需要用界面引擎/报表引擎设计实用、美观的看板报表。普通短字段采用双列或合理栅格,不设置字段 `FormWidth`;长文本、富文本、上传、地图、代码、子表及整行布局控件使用 `FormWidth=24`。
|
|
40
|
+
|
|
41
|
+
### 5. 选项完整性与状态模板
|
|
42
|
+
|
|
43
|
+
- `Select`、`Radio`、`Checkbox`、`MultipleSelect` 均需完整 KeyValue 或其它真实数据源:保存稳定 Key、显示中文 Label,禁止空下拉。关联字段须能检索、保存、回显并按同一 Key 筛选。
|
|
44
|
+
- 状态、分类等 Key/Value 字段按语义完善模板引擎展示,用不同样式帮助辨识;不仅补选项字符串,还要验收录入、列表、详情和筛选的一致性。
|
|
45
|
+
|
|
46
|
+
### 6. 折叠分组与页面多 Tab
|
|
47
|
+
|
|
48
|
+
- 优先用 `CollapseGroup` 组织小业务域;普通分组默认展开(`DefaultCollapsed=false`),确属非关键、低频信息才默认折叠,Tab 内嵌套也遵守此默认。
|
|
49
|
+
- 不为少量字段拆出很多表单 Tab;约 30 个以上字段、多个大型子表或明显任务隔离时,按 `microi-form-layout` 的有效行数规则使用表级 Tabs,并补齐字段归属。
|
|
50
|
+
- 模块引擎 `PageTabs` 用于便捷查看不同类别/状态的数据,不能与表单 Tabs 混为一谈。
|
|
51
|
+
|
|
52
|
+
### 7. 每个模块的完整展示设计
|
|
53
|
+
|
|
54
|
+
- 逐列给合理宽度;仅少量重要、可行动菜单配置动态统计角标,避免全部菜单堆数字。数据表格 `PageTabs` 及有业务价值的更多 V8 按钮配置统计角标,批量聚合而非 N+1。
|
|
55
|
+
- 每个业务模块都设计顶部标题、副标题及多个动态业务指标;根据对应表的状态、金额、时效、风险等分析口径,不能只放无意义的总条数,也不能省略整个指标区。
|
|
56
|
+
- PC 设计主字段、多行副字段和右侧图标/状态的复合列,给予足够宽度;复合区域已有字段从普通列去重,避免重复显示。行数与宽度按 `module-engine` 约束和实际截图调整。
|
|
57
|
+
- 移动卡片按可用业务字段规划图片、标题、副标题、顶部标签、右侧金额/状态、内容、Meta、底部动态区域;无来源区域隐藏,同一字段不重复堆放。所有统计来自真实数据,按业务权限和筛选范围计算。
|
|
58
|
+
|
|
59
|
+
### 8. 贯穿开发的真实业务与截图验收
|
|
60
|
+
|
|
61
|
+
- 按用户指定或已核验的本地/远端验收地址、MCP 连接及账号持续自动化测试;先核对真实 ApiBase/OsClient,覆盖登录、多角色、完整业务操作、数据流转、电脑/移动、明暗主题及截图复核,不能最后只打开首页。
|
|
62
|
+
- 页面、控制台或网络报错要定位并修复本次交付相关问题,回归后给出证据;外部服务阻断如实记录,不能声称未验证的路径已通过。
|
|
63
|
+
- 完成后只关闭本次 AI 创建的临时浏览器、服务和进程,并回读清理结果;不得遗留孤儿进程,也不得结束用户或其它任务共享的服务。按 `playwright-e2e` 维护测试与截图产物。
|
|
64
|
+
|
|
65
|
+
## 标准工作流
|
|
66
|
+
|
|
67
|
+
### 1. 需求蓝图阶段
|
|
68
|
+
|
|
69
|
+
- 读取全部需求文件、截图、历史说明、客户反馈和已交付文档。
|
|
70
|
+
- 用 `business-blueprint` 或同等文档固定:角色、菜单、状态机、关键表、接口引擎、按钮、任务调度、业务时间窗口、费率和权限边界。
|
|
71
|
+
- 用户新增或纠正规则后,立即同步到蓝图/方案文档,避免后续实现忘记业务口径。
|
|
72
|
+
- 生成系统前,用 MCP 读取现有 `diy_table`、`diy_field`、`sys_menu`、`sys_apiengine`,不要重复造表或编造字段。
|
|
73
|
+
|
|
74
|
+
### 2. MCP 建模阶段
|
|
75
|
+
|
|
76
|
+
- 开始任何 MCP 盘点前先调用 `microi_get_status` 验证当前连接、API Server
|
|
77
|
+
与 `OsClient`,再读取结构;“配置文件里有 MCP”不能证明当前真实可用。
|
|
78
|
+
- 创建复杂系统优先使用 Manifest:表、字段、菜单、按钮、接口引擎、权限、页面、打印、工作流、任务统一规划。
|
|
79
|
+
- 先 dry-run:`microi_plan_system` / `microi_generate_system dryRun:true`。
|
|
80
|
+
- 用户确认后真实写入,并立即 `microi_validate_system`。
|
|
81
|
+
- 所有写操作前必须确认 MCP 绑定的 API Server、OsClient 和用户指定租户一致;多个 MCP 同时存在时,读写不能跨服务器混用。
|
|
82
|
+
- 对资金/资产类生产数据执行清理、重算、修复、补发、扣减前,必须留下可审计痕迹:中文备注 SQL、维护接口说明、执行时间、影响行数、回读验证结果。能用小范围条件时不要全表更新。
|
|
83
|
+
- 写入菜单时,业务按钮一次性配齐 `MoreBtns`、`FormBtns`、`PageBtns`、`BatchSelectMoreBtns`、`PageTabs`,按钮前端只负责交互,后端逻辑放接口引擎。
|
|
84
|
+
- 写入后台菜单时必须至少规划两级菜单树:先创建业务域父菜单,再把 CRUD、报表、日志、设置模块挂到对应父菜单。不要把客户、设备、工单、报告、日志、配置等所有模块直接创建为一级菜单。Manifest dry-run 和最终交付说明都必须列出菜单树。
|
|
85
|
+
- 新建前端 MicroService 时,必须先 `microi_list_applications` 盘点,再用 `microi_scaffold_vue_microservice` 在当前租户 `AI应用/{appKey}` 做预演和确认创建;构建后依次同步私有源码、发布公有产物、回读页面 Id。每个菜单通过 `microi_create_module` 一次绑定 `MicroServiceId/MicroServicePageId/MicroServiceRoutePath/MicroServiceKey`,写后用 `microi_get_module` 回读,不得把普通 URL 菜单的创建成功误报成微服务菜单已交付。
|
|
86
|
+
- 完整系统 Manifest 中的 MicroService 菜单使用 `microServiceKey + microServiceRoutePath` 作为跨租户可移植引用;`microi_generate_system` 必须在任何写入前回读并解析当前租户的服务/页面 Id。直接调用 `microi_create_module` 时仍须一次提供全部四个绑定字段。
|
|
87
|
+
- Windows 上脚手架从临时目录原子改名时,杀毒软件或索引器可能短暂返回 `EPERM/EACCES/EBUSY`;MCP 应做有上限的短重试并保持原子改名,重试仍失败才清理临时目录并报错,禁止改成逐文件覆盖目标目录。
|
|
88
|
+
- 编译产物优先调用 `microi_publish_application_directory_stream`。流式端点失败时必须检查 `uploadedCount/retrySafe`:只有 `uploadedCount=0` 且 `retrySafe=true`、并且产物较小时,才可临时回退 `microi_publish_microservice`;已上传部分文件时先按版本和哈希回读,禁止无判断重复发布。回退与远端版本缺口必须写进交付结论。
|
|
89
|
+
- `microi_get_application_context` 返回文件清单不等于源码可读;必须检查 `ContentsComplete/ContentErrorCount` 以及逐文件 `ContentReadError`。MinIO 服务端读取私有源码应走内网端点,不能因公网代理拒绝私有桶而把 `IncludedContents=true` 误判为完整上下文。
|
|
90
|
+
- 用户明确要求通过 MCP 修正当前后台菜单时,不能只更新 Skill 或文档后停下。必须回读 `sys_menu`,创建缺失的父级 `SecondMenu`,更新现有子菜单 `ParentId` / `Sort`,给管理员角色补父菜单权限,最后再次回读验证树结构。
|
|
91
|
+
- 表单布局默认遵守平台约定,例如 PC 双列;字段显示顺序要跟业务表单顺序一致。
|
|
92
|
+
- 平台通用功能除了改源码,还必须同步到官方主租户 `iTdos` 的应用商城母版并回读验证;项目专属视图、字段和业务动作只写目标租户,不能混入官方母版。
|
|
93
|
+
|
|
94
|
+
### 2.1 物理字段与跨端视图
|
|
95
|
+
|
|
96
|
+
- `diy_table.DiyConfig`、`diy_field.DiyConfig`、`sys_menu.DiyConfig` 均为废弃兼容字段。MCP、Manifest、应用包和手工更新都不得向其中写入新配置。
|
|
97
|
+
- 新配置必须先增加业务语义清晰的物理字段,再通过 `diy_field` 元数据暴露控件;不得把多个无关能力重新塞进一个通用 JSON 口袋字段。
|
|
98
|
+
- Detail/Edit/List/Card 统一视图属于模块场景,使用 `sys_menu.EnableViewSchema`、`ViewSchemaVersion`、`ViewConfigVersion`、`ViewSchema`。
|
|
99
|
+
- `ViewSchema` 可按 PC/Mobile/All 和 RoleIds 选择视图;禁用、缺失、损坏或客户端不支持时必须回退到现有模块/表单。
|
|
100
|
+
- EntityHero、MetricStrip、ActionGrid、ResponsiveSection 是独立视图区块,不是 `diy_field` 数据字段,也不能用 DevComponent 或虚拟字段模拟。
|
|
101
|
+
- 小程序仅执行白名单 ActionSchema 和声明式显隐/参数映射,不执行任意前端 V8。复杂业务动作调用接口引擎,重要校验进入后端表单事件。
|
|
102
|
+
|
|
103
|
+
绑定 `diyTableId` 创建 CRUD 菜单时,必须配置或允许 MCP/后端自动推断 `TableDiyFieldIds`、`SelectFields`、`SearchFieldIds`、`SortFieldIds`、`NotShowFields`、`StatisticsFields`、`MobileListFields`、`CardTitleTagFields`、`CardBottomTagFields`、`DefaultOrderBy`。列表列、搜索列、移动端卡片列不能为空白;`Id/XxxId/XxxIds`、系统字段、布局控件和富文本/上传/地图/子表等重字段默认不展示在列表。
|
|
104
|
+
|
|
105
|
+
搜索字段默认覆盖名称/标题/编号、状态/类型/分类、负责人/部门/客户、日期时间;金额、价格、数量、积分、余额、人数等数值字段默认进入 `StatisticsFields`。选择类、开关、部门、树、级联、地址等字段应尽量使用等值筛选。
|
|
106
|
+
|
|
107
|
+
每个可见业务模块还必须通过视觉交付门禁:逐字段设置合理列表宽度;每个模块都有紧凑
|
|
108
|
+
标题、业务副标题和 2~4 个真实动态指标;只给少量重要菜单设置行动型侧栏角标;为状态
|
|
109
|
+
PageTabs 和有决策价值的更多按钮设置批量统计角标;PC 至少一个合理宽度且去重普通列的
|
|
110
|
+
复合主列;复合列一般只用“主字段 + 1 个 Lines”组成双行,可以配置多个双行复合列,
|
|
111
|
+
不要把两个 Lines 堆进同一列形成三行高表格;移动端按图片/标题/副标题/顶部/状态/
|
|
112
|
+
右侧金额/正文/Meta/底部规划动态区域。
|
|
113
|
+
自动生成只是最低兜底,AI 必须按业务表、状态机和数据口径精调。禁止用随机数、固定演示数
|
|
114
|
+
或无来源值装饰指标;当前页求和必须明确标注“本页”。`EnableViewSchema` 只控制
|
|
115
|
+
Detail/Edit 自定义表单,不能用它关闭 List/Card 展示设计。
|
|
116
|
+
|
|
117
|
+
字段较多的表单必须做视觉分组,优先使用默认展开的 `CollapseGroup`;约 30+ 字段、多个大型子表或强任务隔离才评估表级 Tabs。不能以“业务域有 8 字段”为由独占一个 Tab。具体阈值、有效表单行、Config 和回读验收统一读取 `microi-form-layout/SKILL.md`,不维护另一套冲突决策表。
|
|
118
|
+
|
|
119
|
+
**强制禁止**:
|
|
120
|
+
|
|
121
|
+
- ❌ **禁止**为 ≤7 字段的业务域单独建 Tab(必须改用 `CollapseGroup`,否则用户必须点击 Tab 才能看到 3~5 个字段,违反"首屏信息密度"原则)。
|
|
122
|
+
- ❌ **禁止**为 13~30 字段的表把所有字段平铺(必须用 Tab 或 CollapseGroup 分组)。
|
|
123
|
+
- ❌ **禁止**在用户没有要求时使用 `Component='Tabs'` 字段级控件(更优先用 `diy_table.Tabs` 表级 Tab)。
|
|
124
|
+
- ❌ **禁止**让 CollapseGroup 依赖空 `FormWidth`;CollapseGroup 默认必须显式保存 `FormWidth=24`,并默认设置 `Config.CollapseGroup.ShowFieldCount=true`。Tabs / Divider / Alert 按各自运行时规范处理。
|
|
125
|
+
- ❌ **禁止**只创建 Tab 不写字段的 `Tab` 归属(每个 Tab 必须有至少 1 个非空 `Tab` 的字段)。
|
|
126
|
+
|
|
127
|
+
典型反例:13 字段的表把 3 个运算字段单独放进 Tab,导致切换后只有少量内容;应改为默认展开的 `CollapseGroup`,让基础信息和运算字段在同页可读。详见 `microi-form-layout/SKILL.md` 的反例参考。
|
|
128
|
+
|
|
129
|
+
表单控件选择必须参考 `Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json`,包括文本、数字、日期、选择、树、部门、地址、关联表单、弹窗选表、子表、上传、富文本、代码、地图、二维码、布局控件等;普通字段不手动设置 `FormWidth`,整行控件才设 `24`。CollapseGroup 必须显式设 `24`,并默认开启 `ShowFieldCount`。
|
|
130
|
+
|
|
131
|
+
### 3. 主子表与关联表单设计
|
|
132
|
+
|
|
133
|
+
先判定关系基数,再生成字段:
|
|
134
|
+
|
|
135
|
+
- “子表、明细、清单、条目、行项目、多个记录”默认是主表 1:N 子表,使用
|
|
136
|
+
`TableChild`。创建独立子表,在子表放真实父级外键,建立 `(OsClient, ParentId)`
|
|
137
|
+
回查索引,并创建 `Display=0`、`AppDisplay=0`、`HasChild=0` 的子表菜单。
|
|
138
|
+
- `JoinForm` 只用于主表保存一个目标 Id、并嵌入一条独立目标记录完整表单的 N:1/1:1
|
|
139
|
+
场景;目标表不能是当前表。需要列表、多行增删改或可能有多条记录时禁止使用。
|
|
140
|
+
- `TableChild` 的 `TableChildTableId`、`TableChildSysMenuId`、`TableChildFkFieldName`
|
|
141
|
+
必须引用回读后的真实资源。完整系统 Manifest 使用
|
|
142
|
+
`relation:{cardinality:"1:N",targetTable,childForeignKey,childModule}`,生成器按“全部表与
|
|
143
|
+
普通字段 → 隐藏子表菜单 → 关系字段”分阶段解析当前租户 Id;禁止猜 Id,禁止退化成
|
|
144
|
+
`JoinForm`。
|
|
145
|
+
- 基数不清楚时必须在远端写入前询问用户。调用 `microi_plan_system` / `dryRun` 前先做
|
|
146
|
+
关系语义审查。MCP 会硬性拒绝“1:N + JoinForm”、自关联 JoinForm、缺主/子外键、缺
|
|
147
|
+
`Display=0/AppDisplay=0/HasChild=0` 隐藏子菜单或缺 `(OsClient, FK)` 回查索引;AI
|
|
148
|
+
不得改用直接单字段工具绕过。
|
|
149
|
+
- 复用已有子表时,优先复用源 `TableChild` 已验证、当前用户有权限的子表菜单;只有不存在
|
|
150
|
+
可复用菜单时才新建隐藏菜单。设计器显示但运行表单不显示时,必须先检查主表 `InFormV8`
|
|
151
|
+
是否通过 `V8.FieldSet`/`hideField` 把目标 TableChild 设为不可见。
|
|
152
|
+
|
|
153
|
+
`JoinForm` 的可移植 Manifest 只写名称,不写租户 Id:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"name": "CustomerProfile",
|
|
158
|
+
"label": "客户资料",
|
|
159
|
+
"component": "JoinForm",
|
|
160
|
+
"relation": {
|
|
161
|
+
"cardinality": "N:1",
|
|
162
|
+
"targetTable": "Biz_Customer",
|
|
163
|
+
"joinFieldName": "CustomerId"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
`JoinForm` / `OpenTable` 等单记录关联仍需兼顾可读字段,不能只生成一个裸 `XxxId`。
|
|
169
|
+
|
|
170
|
+
推荐模式:
|
|
171
|
+
|
|
172
|
+
- `XxxId`:隐藏字段,保存真实 Id。
|
|
173
|
+
- `XxxName`:可见 Select/OpenTable/JoinForm,显示业务名称。
|
|
174
|
+
- 数据源:优先 SQL 或接口引擎,`SelectLabel` 为名称,`SelectSaveField` 按业务需要保存名称或 Id。
|
|
175
|
+
- 值变更事件:选择名称时同步写入隐藏 Id,或选择 Id 时同步名称,保持列表和详情可读。
|
|
176
|
+
- 下拉远程搜索无数据时必须结束 loading,显示空状态,不能一直“加载中”。
|
|
177
|
+
|
|
178
|
+
### 3.1 业务枚举字段一致性
|
|
179
|
+
|
|
180
|
+
业务枚举或专区、等级、状态、类型字段不能只改前端映射,也不能只改接口引擎逻辑。低代码后台的 `diy_field.Data` / `diy_field.Config` 是 PC 管理端录入数据的事实源之一,必须同步维护。
|
|
181
|
+
|
|
182
|
+
- 改枚举前先用 MCP 读取目标 `diy_field`,确认 `Component`、`DataSource`、`SelectSaveField` 和现有选项。
|
|
183
|
+
- KeyValue 组件必须让后台选项、接口引擎判断值、前端展示/筛选值保持同一套 Key。后台存了旧 Key 时,移动端会查不到或显示不出来。
|
|
184
|
+
- 修改字段属性优先使用 `microi_get_field_list` / `microi_update_field` / `microi_refresh_schema_cache`,MCP 缺能力时先补 MCP 或平台通用 API。
|
|
185
|
+
- 完成后必须回读 `diy_field.Data` / `diy_field.Config`,并用 Playwright 或接口测试覆盖后台录入值在前端列表、详情、筛选中的显示。
|
|
186
|
+
|
|
187
|
+
### 4. 示例数据与资源导入
|
|
188
|
+
|
|
189
|
+
- 完整系统开发的数据数量、关联、账号和种子来源按上方默认清单第 2 项执行;局部回归只准备覆盖该改动的最小夹具,不重复补全库 100 条。
|
|
190
|
+
- 业务图片、头像、海报、二维码、商品图、公告图必须通过平台 HDFS/API 或数据库字段进入系统,不要用 `picsum.photos`、`qrserver.com`、`placeholder.com` 等第三方占位服务。
|
|
191
|
+
- 图片字段既要验数据库值,也要验前端真实加载。
|
|
192
|
+
- 需要二维码时优先用平台接口,例如 `/api/Os/CreateQRCodeImage` 或租户接口引擎生成 HDFS 图片。
|
|
193
|
+
|
|
194
|
+
### 5. V8 接口引擎与事件
|
|
195
|
+
|
|
196
|
+
- 接口引擎代码必须格式化、语义版本可追踪、可回读。
|
|
197
|
+
- 保存后必须走 HTTP 稳定路径 `/apiengine/{ApiEngineKey}` 并通过 `osclient` Header 传租户做 smoke test;只用内部 run 通过不够。普通 POST/PUT/PATCH/DELETE 禁止追加 `--OsClient--...--`;只有调用方无法设置 Header/Query 的第三方回调才使用 `--OsClient--{OsClient}--`,可使用 Query 时固定为 `?OsClient=`。
|
|
198
|
+
- 返回必须是标准 DosResult,除明确文件/HTML场景外,不允许返回字符串 `null`、空响应、非 JSON。
|
|
199
|
+
- 业务异常必须给用户可理解的 `Msg`,不能吞异常或只 `catch(e){}`。
|
|
200
|
+
- 定时任务、超时取消、VIP 过期、自动拒绝、库存释放等跨时间逻辑,必须建 Job 或可被 Job 调用的接口引擎。
|
|
201
|
+
- 交易、库存、积分、余额、审批状态流转必须做后端幂等和权限校验。
|
|
202
|
+
|
|
203
|
+
### 6. VS Code 插件同步纪律
|
|
204
|
+
|
|
205
|
+
VS Code 插件必须让用户清楚知道本地和远端是否一致。
|
|
206
|
+
|
|
207
|
+
- 每次准备推送接口引擎、表单/字段 V8、模块按钮或流程节点 V8 前,必须先运行当前服务器及对应引擎分类的同步状态检测。直接“推送当前文件”也必须自动预检;远端较新、双方冲突、没有同步基线或预检失败时一律停止覆盖。
|
|
208
|
+
- 同步状态接口若超时、限流、返回 `Code != 1` 或数据不完整,必须按“检查失败”停止拉取和推送;禁止将缺失的远端结果解释成“服务器无修改”。命令行可用 `npm run sync:status -- --os-client <tenant> --scope <api|form|module|workflow> --conflict-dir <dir>` 保存冲突双方供 AI 合并;确认本地修改与冲突均为 0 后,可用 `--pull --confirm <tenant>` 复用插件拉取链路,禁止绕开预检。
|
|
209
|
+
- 单文件推送预检只查询目标文件对应的接口、表、模块或流程节点,不得为推送一个文件扫描整个分类;全量同步状态使用低并发、短间隔批次,避免多人并行开发时触发服务器安全限流。
|
|
210
|
+
- AI 只修改少量 V8 文件时,收尾优先逐个执行 `sync:status -- --file <path>`;只有需要做服务器基线盘点或多人交接时才运行全量状态检查。
|
|
211
|
+
- 同步状态要显示本地修改数、远端较新数、服务器已删除数、冲突数,以及接口引擎、表单/字段 V8、模块按钮、流程节点的分类数量。
|
|
212
|
+
- 已成功推送到数据库的文件不能继续显示为已修改。
|
|
213
|
+
- Web 端改过远端代码时,插件要支持检测冲突、查看 diff、手动选择本地/远端/合并。
|
|
214
|
+
- Token 过期时优先自动 refresh token;不要频繁让用户重新登录。
|
|
215
|
+
- ApiEngine 本地文件推送到 `sys_apiengine.ApiV8Code` 必须是明文代码。历史 Base64 旧数据可以读取时兼容解码,但新保存不得写 Base64。
|
|
216
|
+
- ApiEngineKey、ApiAddress、Id 用于缓存或匹配时统一大小写策略,避免大小写导致重复或缓存 miss。
|
|
217
|
+
- 生成 MCP Server 后,插件应自动启动或提示一键启动,不要让用户每次手工右键启动。
|
|
218
|
+
- “查看同步状态”必须能从数量下钻到具体资源。若提示本地未推送,必须列出接口引擎/表单V8事件/字段V8事件/模块按钮/流程节点V8的 Key、名称、文件路径、本地修改时间和同步基准时间,不能只弹出总数。
|
|
219
|
+
- 插件判断本地修改时,若远端代码和本地代码内容一致,应自动对齐 `.microi-meta.json` 与文件 `mtime`;表单事件等 Key 匹配要大小写兼容,避免真实无差异却长期提示“本地未推送”。
|
|
220
|
+
- AI 交付前要使用插件口径或完全等价的插件状态复核;最终说明中必须写明本地未推送、远端差异、冲突是否为 0。
|
|
221
|
+
- 多人并行开发时按状态处理:`localModified` 才允许推送;`remoteModified` 先拉取;`remoteDeleted` 表示服务器已删除且本地未改,全量拉取必须先备份再清理;服务器已删除但本地也修改时按 `conflict` 处理;`conflict` 必须比较基线、本地和远端后人工合并。正文一致仅时间戳不同则自动校准 meta/mtime。处理后再次检测,不能以“已点击同步”代替结果回读。
|
|
222
|
+
- AI 使用 MCP、接口引擎 API 或手写脚本直接写远端 V8 后,必须立刻把远端当前生效代码回读到本地 V8 文件,并同步更新 `.microi-meta.json` 的 `updateTime/filePath` 与文件 `mtime`。只推远端、不校准本地时间戳,会被插件判定为“本地未推送”,属于未完成交付。
|
|
223
|
+
- 同步检查不能只看总数。若数量不为 0,必须按“正文一致仅 meta/mtime 不一致 / 远端较新需拉回 / 本地较新需推送 / 冲突需人工合并”分类列出具体文件,并在处理后再次复核到 0 或说明原因。
|
|
224
|
+
- 生产环境资金、积分、资产、订单相关 V8 代码不得为了清空同步状态而盲目覆盖远端。远端 `UpdateTime` 晚于本地基线且正文不同,默认先拉远端或做人工合并;只有确认本地是未推送修复时才推送。
|
|
225
|
+
|
|
226
|
+
### 7. MCP 能力优先级
|
|
227
|
+
|
|
228
|
+
遇到平台元数据批量修复、示例数据、接口格式化、表单布局、外键 Select、页面按钮、权限、任务调度、工作流、打印、数据源等需求,优先级如下:
|
|
229
|
+
|
|
230
|
+
1. 已有 MCP 工具直接完成。
|
|
231
|
+
2. MCP 缺工具但后端有 API:补 MCP 封装。
|
|
232
|
+
3. 后端也缺通用 API:补 `V8EngineController` 或对应平台控制器的通用能力,再补 MCP。
|
|
233
|
+
4. 只有租户私有业务逻辑才新建接口引擎。
|
|
234
|
+
|
|
235
|
+
交付包含 DIY 表时,验收固定审计物理列与 `diy_field` 元数据一致;发现 `Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted` 被列为异常字段时,调用通用修复接口或 MCP `microi_repair_audit_fields` 幂等修复并回读。交付用户个性化首页时,同时验收 Token 绑定保存、站内路由规范化、权限失效回退,以及账号密码、Token 与 SSO 三种登录入口的一致性。
|
|
236
|
+
|
|
237
|
+
不要用租户接口引擎修平台设计器、全局上传限制、VS Code 插件同步、MCP 元数据写入等平台级问题。
|
|
238
|
+
|
|
239
|
+
<!-- /microi-progressive:chunk -->
|