@microi.net/cli 6.2.3 → 6.2.4
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 +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +121 -121
- package/scripts/microi-skills.meta.json +236 -227
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +23 -23
- package/skills/microi-client-frontend/SKILL.md +10 -6
- package/skills/microi-docs-coverage/references/capability-map.md +2 -2
- package/skills/microi-form-engine/SKILL.md +27 -0
- package/skills/microi-form-engine/references/component-config-index.md +1 -1
- package/skills/microi-left-right-layout/SKILL.md +22 -0
- package/skills/microi-microservice/SKILL.md +1 -0
- package/skills/module-engine/SKILL.md +2 -0
- package/skills/page-engine/SKILL.md +7 -1
- package/skills/page-engine/examples/go-view-operations.json +8467 -0
- package/skills/page-engine/examples/go-view-procurement.json +2800 -0
- package/skills/page-engine/references/go-view-json.md +62 -0
- 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 +2 -1
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +2 -2
- package/skills/v8-menu-buttons/SKILL.md +2 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-11-
|
|
3
|
+
"generatedAt": "2026-11-06T10:46:35.029Z",
|
|
4
4
|
"policy": {
|
|
5
5
|
"maxEntryLines": 285,
|
|
6
6
|
"referenceBudgetLines": 245,
|
|
@@ -169,11 +169,11 @@
|
|
|
169
169
|
]
|
|
170
170
|
},
|
|
171
171
|
"microi-client-frontend": {
|
|
172
|
-
"originalSha256": "
|
|
173
|
-
"originalLines":
|
|
172
|
+
"originalSha256": "d28132d23345c1c14cb1c1b88b3f0bee53bbf31d35dd1dc501af71cf6d50cd6a",
|
|
173
|
+
"originalLines": 751,
|
|
174
174
|
"prefixSha256": "578d60fc1b769bff36396db2c0c6b2affa61ad02e956d8ad574e8238764b4008",
|
|
175
175
|
"prefixBytes": 2231,
|
|
176
|
-
"entryLines":
|
|
176
|
+
"entryLines": 285,
|
|
177
177
|
"chunks": [
|
|
178
178
|
{
|
|
179
179
|
"id": "microi-client-frontend-000",
|
|
@@ -195,8 +195,8 @@
|
|
|
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": "5d3b01eb376defa4bcbf754a617bcfab2e0cfa56e492c6f28c081488a049ba2b",
|
|
199
|
+
"lines": 144,
|
|
200
200
|
"heading": "2. 表单引擎三层结构"
|
|
201
201
|
},
|
|
202
202
|
{
|
|
@@ -211,8 +211,8 @@
|
|
|
211
211
|
"id": "microi-client-frontend-004",
|
|
212
212
|
"ordinal": 7,
|
|
213
213
|
"destination": "microi-client-frontend/SKILL.md",
|
|
214
|
-
"sha256": "
|
|
215
|
-
"lines":
|
|
214
|
+
"sha256": "7cf7bca3618237a68089a9891292028c6293c17eee973cb3af40afaef3740383",
|
|
215
|
+
"lines": 44,
|
|
216
216
|
"heading": "7. 验证建议"
|
|
217
217
|
},
|
|
218
218
|
{
|
|
@@ -1240,11 +1240,11 @@
|
|
|
1240
1240
|
]
|
|
1241
1241
|
},
|
|
1242
1242
|
"page-engine": {
|
|
1243
|
-
"originalSha256": "
|
|
1244
|
-
"originalLines":
|
|
1245
|
-
"prefixSha256": "
|
|
1246
|
-
"prefixBytes":
|
|
1247
|
-
"entryLines":
|
|
1243
|
+
"originalSha256": "70a5ff3b1731fb37377ecd3de472c496791ab9342a2f4afd9d9526ddb4dd7228",
|
|
1244
|
+
"originalLines": 504,
|
|
1245
|
+
"prefixSha256": "275d241756ef499f32137058e70c4ab73123d9491c1341a27b733583592ae0fb",
|
|
1246
|
+
"prefixBytes": 7505,
|
|
1247
|
+
"entryLines": 256,
|
|
1248
1248
|
"chunks": [
|
|
1249
1249
|
{
|
|
1250
1250
|
"id": "page-engine-000",
|
|
@@ -1654,8 +1654,8 @@
|
|
|
1654
1654
|
]
|
|
1655
1655
|
},
|
|
1656
1656
|
"ui-design": {
|
|
1657
|
-
"originalSha256": "
|
|
1658
|
-
"originalLines":
|
|
1657
|
+
"originalSha256": "66f933fe29b2e92085ceb312f325f1bae47f0442f4ae09ee61d0daaba76f14e6",
|
|
1658
|
+
"originalLines": 1653,
|
|
1659
1659
|
"prefixSha256": "fe80f1234b699c315ae180876dd81f374516eee7d57455e4a4b2ffca488f7d9a",
|
|
1660
1660
|
"prefixBytes": 1679,
|
|
1661
1661
|
"entryLines": 228,
|
|
@@ -1720,8 +1720,8 @@
|
|
|
1720
1720
|
"id": "ui-design-007",
|
|
1721
1721
|
"ordinal": 6,
|
|
1722
1722
|
"destination": "ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md",
|
|
1723
|
-
"sha256": "
|
|
1724
|
-
"lines":
|
|
1723
|
+
"sha256": "ebbab60498811bb1736c9ee40b0942539a3a838b18ab866b42c9445d5bd6b0e7",
|
|
1724
|
+
"lines": 148,
|
|
1725
1725
|
"heading": "颜色体系(CSS Variables — 支持主题切换)"
|
|
1726
1726
|
},
|
|
1727
1727
|
{
|
|
@@ -1752,7 +1752,7 @@
|
|
|
1752
1752
|
"id": "ui-design-011",
|
|
1753
1753
|
"ordinal": 11,
|
|
1754
1754
|
"destination": "ui-design/references/progressive-02-字体.md",
|
|
1755
|
-
"sha256": "
|
|
1755
|
+
"sha256": "bebc60aaa973e63aafc4ea7a73b6c2bc3aa876c33125b1b386e8901ddcc43d72",
|
|
1756
1756
|
"lines": 42,
|
|
1757
1757
|
"heading": "骨架屏 Loading 设计规范"
|
|
1758
1758
|
},
|
|
@@ -2646,11 +2646,11 @@
|
|
|
2646
2646
|
]
|
|
2647
2647
|
},
|
|
2648
2648
|
"v8-menu-buttons": {
|
|
2649
|
-
"originalSha256": "
|
|
2650
|
-
"originalLines":
|
|
2651
|
-
"prefixSha256": "
|
|
2652
|
-
"prefixBytes":
|
|
2653
|
-
"entryLines":
|
|
2649
|
+
"originalSha256": "31a0bd6b4f5b3a6d19099c8bd6d8a3f97e80f9757d2265580792da69806b07ef",
|
|
2650
|
+
"originalLines": 690,
|
|
2651
|
+
"prefixSha256": "485069ce8a2192366d730b50e1ac27c5c66d38a0e5a8949a978cb27b6ac15e23",
|
|
2652
|
+
"prefixBytes": 1612,
|
|
2653
|
+
"entryLines": 189,
|
|
2654
2654
|
"chunks": [
|
|
2655
2655
|
{
|
|
2656
2656
|
"id": "v8-menu-buttons-000",
|
|
@@ -62,7 +62,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
62
62
|
| 通用 V8/低代码工具 | `src/utils/diy.common.js`、`src/utils/v8-*.js` |
|
|
63
63
|
|
|
64
64
|
<!-- /microi-progressive:chunk -->
|
|
65
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=
|
|
65
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=5d3b01eb376defa4bcbf754a617bcfab2e0cfa56e492c6f28c081488a049ba2b -->
|
|
66
66
|
## 2. 表单引擎三层结构
|
|
67
67
|
|
|
68
68
|
### 模块级跨端视图
|
|
@@ -175,12 +175,16 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
175
175
|
|
|
176
176
|
### 用户级界面偏好(强制)
|
|
177
177
|
|
|
178
|
+
- 界面材质是独立维度:`ThemeMaterial=Solid/Glass/Frosted/Liquid` 分别为实色、普通玻璃、磨砂玻璃、液态玻璃,不增加第三种 `ThemeMode` 或把玻璃写成 `ThemeColor`。全局保存 `sys_config.ThemeMaterial`,个人保存同名 `sys_user` 字段;个人 `System`/空值/null 继承,系统缺省/未知为 Solid。主题设置和个人中心共用 `platform-user-update-preferences` 当前用户白名单及保存队列;登录前纯外观缓存可含材质但不含身份/权限/凭据,匿名选择只预览。恢复默认写 System,不能固化当前全局材质。
|
|
179
|
+
- 玻璃运行标识为根 `data-mci-material=solid/glass/frosted/liquid`,`theme-material.js` 统一解析,`theme-material.scss` 消费语义表面和前景;模糊限于壳层、导航、面板及弹层,不能每个表格单元格独立滤镜或持续液体变形。背景复用当前租户已校验壁纸目录,个人只保存目录Id;API/租户切换使旧目录响应失效。无 backdrop-filter、`prefers-reduced-transparency` 或 forced-colors 时降级实色;关闭渐变/阴影仍有效,菜单文字、表格内容、输入及焦点保持可读。iframe 通过既有主题快照接收材质,不读取父DOM或自行重建个人偏好。
|
|
180
|
+
- 全框架玻璃沿统一材质色板和语义令牌覆盖表格、表单、控件、弹层及精确AppKey微应用;壁纸全局只调理一次明度,大容器只铺一层低alpha表面,内层画布透明。`theme-material-components.scss` 承接表单、Banner、折叠/Tab、Element控件与官方平台应用投影。静态边使用细暗 `--mci-material-border`,不泛白/发光;hover可加强底边,键盘 `focus-visible` 使用独立清晰焦点环;小范围主操作使用成对的primary-bg/hover/text令牌保留主次。文字不使用容器opacity,Canvas/业务图片及显式图片背景保留像素;固定列裁剪滚入固定区的普通单元格绘制防透字,退出材质后恢复,不能重新铺实色挡板。真实跨文档iframe不继承CSS,当前micro-app沙箱可见DOM投影到lightDOM时也只能在所属AppKey范围适配,不能用裸micro-app-body规则污染其他应用。
|
|
181
|
+
- AI 配置材质先 `microi_get_field_list` 回读 sys_config/sys_user 实际枚举;个人使用 `microi_run_engine` 调用 `platform-user-update-preferences`,`params:{ThemeMaterial:'Frosted'}`、`confirmExecution:'platform-user-update-preferences'`,不能传目标账号/租户、CSS、透明度或URL。字段/PC版本缺失时更新责任官方应用与PC;MCP通用读字段/执行引擎已覆盖,不新增专用写设置通道。
|
|
178
182
|
- 菜单前景独立于按钮前景与页面显示模式。主题设置在自定义颜色旁提供 `MenuTextColor=Auto/Light/Dark`(跟随主题/浅色/深色),默认按实际菜单背景选择。普通、选中、悬停、顶部与侧边弹出菜单必须使用同一前景契约;模式切换和主题重应用保留显式选择。沿当前账号偏好队列保存到 `sys_user.MenuTextColor`,个人中心同步回显;空值继承 `sys_config.MenuTextColor`,全局缺省 Auto。重置清空个人值。旧租户仅使用身份隔离的设备回退,禁止新增全局 localStorage 偏好。密度仅保留现有“小/标准/大”滑杆,不再增加同步的预设按钮组。修改时执行 `menu-text-color.spec.mjs`、偏好接口白名单与真实浏览器刷新恢复回归。
|
|
179
183
|
|
|
180
184
|
右上角主题设置的边角风格默认圆角;已安装 `sys_user.CornerStyle` 时从账号偏好恢复,旧租户才使用浏览器本地兼容值。根元素 `data-mci-corner-style` 控制全局角半径,覆盖动态挂载的 Element Plus 弹层。顶栏入口统一使用 40px 触控区域和 20px 图标,AI 入口使用图标组件,不使用图片。模块 `HideTableBanner`、`HideFormBanner` 只在值明确为 `1/true` 时隐藏对应 Banner,并跳过其专属统计请求;未安装开关字段的旧菜单继续显示。
|
|
181
185
|
|
|
182
186
|
- 边角风格先读取当前用户 `CornerStyle`:`round/square` 显式覆盖;空值或 `System` 继承租户 `sys_config.CornerStyle`,租户空值默认为圆角。不得把空个人值提前归一为 `round`,否则会阻断租户直角设置。
|
|
183
|
-
- 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System`
|
|
187
|
+
- 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System` 继承租户,租户空值为 TopSide;`MenuChildExpandMode` 全局空值为 Right。`TopSide` 将一级放顶部,当前一级的二级及更深菜单复用原侧栏;单个子菜单仍留在侧栏,无可见子菜单时隐藏侧栏并释放内容宽度。侧栏仍支持收起及 `MenuChildExpandMode=System/Down/Right`,收起后的叶菜单使用既有向右弹出面板显示真实名称,保留多级分支、键盘焦点与Escape,不重复叠加Tooltip。顶部导航复用当前权限路由、角标与外链,空间不足收纳到更多菜单;移动端仍采用底部导航。当前路由与一级归属由 `hybrid-navigation.js` 统一投影,禁止修改共享权限树。
|
|
184
188
|
- 侧栏与角色管理组织树共用 `MciResizablePane`:右边缘拖拽、可访问分隔条、方向键/Shift/Home/End 和收起按钮必须同样可用。`sys_user.SidebarWidth/RoleTreeWidth` 为 nullable 整数像素(160–600),`SidebarCollapsed/RoleTreeCollapsed` 为 nullable 0/1;使用当前账号的 Managed 偏好白名单保存。拖拽中仅预览,松开提交,取消或卸载释放指针。视口夹紧保留主内容宽度,不能把夹紧值覆盖长期偏好;窄屏禁拖,旧租户仅用账号/租户/API 隔离的设备回退。侧栏空宽度沿用 `sys_config.MenuWidth` 后回退240px,角色树默认240px。
|
|
185
189
|
- 顶部主导航与工作区 Tabs 是不同层级:`Top/TopSide` 的当前一级使用独立短底线,hover/focus 前景显式跟随可读主题,禁止继承 Element 的低对比品牌色。长弹出菜单使用独立主题表面、无异色顶边和内部滚动,嵌套层仍 Teleport;顶部菜单标题与品牌不显示 title/alt/Tooltip 类提示浮层,保留完整 aria-label 无障碍名称;顶栏整条背景色带须贴合视口或所属壳层左右边界,不能把内部 padding 当成全宽验收,内容区留白独立处理。窄视口“更多”菜单也遵守同一契约。
|
|
186
190
|
- 顶部导航整行(含功能图标和账号姓名)使用主题运行时的 `--sidebar-*` 可读表面与前景;主题面板和业务弹层保留自身语义表面。主题入口为齿轮,界面密度在同一主题面板调整,已安装 `sys_user.UiDensityScale` 时保存当前账号、个人空值继承 `sys_config.UiDensityScale`,旧租户才使用按租户/账号隔离的设备回退;AI 入口使用圆圈内 AI 字母 SVG,不能回退魔法棒或图片。
|
|
@@ -192,7 +196,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
192
196
|
- 登录前可展示当前设备最后一次成功登录用户的纯外观缓存,按规范化 API 地址与租户隔离,并按“缓存中的显式外观项 → 当前全局配置 → 平台默认”逐项合并;只在真实登录成功或当前用户偏好确认后更新。缓存白名单不得包含 Token、账号资料、角色和权限;损坏、未知项及跨租户缓存忽略,不新增匿名按账号查询个人设置的接口。登录页预览不改这份已确认缓存;登录成功后以当前用户服务器偏好为准,不能把旧缓存写入另一账号。
|
|
193
197
|
- 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
|
|
194
198
|
- 密度覆盖不能只改字号和单元格 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` 继承全局。
|
|
199
|
+
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor/LoginWallpaper` 清空、`ThemeMaterial/CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
196
200
|
- `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留按钮/输入边界、键盘焦点、加载指示与纯图标操作;登录方式图标、说明文字与按钮前景按所在真实表面配对,不能被全局渐变关闭规则改为白底白字。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名阶段只使用已确认的纯外观缓存、当前租户默认或当前匿名预览,不发起个人设置读取/写入。
|
|
197
201
|
- `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
|
|
198
202
|
- 新增全局开关 CSS 必须检查编译后选择器;scoped 中 `:global(html[attr]) .child` 会丢失后代范围,禁止用它隐藏装饰。使用独立非 scoped 且有完整登录/框架作用域的样式,或将完整选择器放进 `:global(...)`;必须断言开启全部开关时根 html、body、框架与弹层仍可见。
|
|
@@ -200,6 +204,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
200
204
|
- 右上角即时切换可以乐观应用并短防抖保存;远端保存失败时保留当前设备效果并明确提示。个人中心和右上角必须调用同一个应用包交付的白名单接口引擎(当前为 `platform-user-update-preferences`),不能分别形成两套字段、枚举或优先级。
|
|
201
205
|
- 导航切入或退出 `TopSide` 会重建顶栏组件;卸载前必须发送尚未保存的偏好,在途请求与后续选择共用按 store、API 地址、租户、账号和登录会话隔离的运行时队列。新顶栏继承失败状态和重试数据,旧响应不能覆盖更新的选择或跨账号合并队列;标准续签保留 `MicroiSessionId` 时也保留最终待保存选择,计算属性显式依赖 Pinia.Token。JWT 解码仅用于本地队列归属,服务端仍通过标准 DiyToken 验证授权;不得将会话凭据写入偏好存储、日志或响应。使用真实 Vue computed 和组件生命周期回归 `theme-select-autosave-lifecycle.spec.mjs` 验证卸载、在途合并、失败重试、续签及账号/租户/会话切换。
|
|
202
206
|
- 主题回归同时执行 `framework-appearance.spec.mjs`、`ui-density-runtime.spec.mjs` 与 `theme-select-autosave-lifecycle.spec.mjs`;真实浏览器默认使用一个常规桌面 CSS 视口(优先用户实际视口,否则 1920×1080),验证系统设置与左菜单在 90/110 两档的尺寸变化、全局/个人继承与恢复、全部顶栏隐藏后账号仍在,以及装饰关闭后的亮暗和焦点可见性。只有用户明确要求或缺陷涉及超宽屏时才追加 4K,不把截图文件像素尺寸当作浏览器 CSS 视口。
|
|
207
|
+
- 个人和全局 `UiDensityScale` 都缺省/空值时使用小档90,显式100继续保持标准,不能为改默认覆盖已有用户/租户值。主题面板的系统设置导航只向已登录 `Level>=9999` 显示,点击时再次检查且不代替系统设置后端鉴权。表头压缩只减少文字/图标保留区,不改列宽或拖动热区;行操作hover不得上移到单元格裁剪边界之外。回归运行 `framework-ui-settings-entry.spec.mjs` 和 `framework-ui-followups.e2e.spec.mjs`,玻璃Loading需同时检查指令、微服务、模块祖先与真实截图透底,Solid搜索要验实际 `.el-select__input` 的成对前景。
|
|
203
208
|
|
|
204
209
|
<!-- /microi-progressive:chunk -->
|
|
205
210
|
<!-- microi-progressive:chunk id=microi-client-frontend-003 sha256=301f766dc1ab1c6b021aa861a76b44844905d432393ab407472f58f00d6283cd -->
|
|
@@ -224,7 +229,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
224
229
|
---
|
|
225
230
|
|
|
226
231
|
<!-- /microi-progressive:chunk -->
|
|
227
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=
|
|
232
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=7cf7bca3618237a68089a9891292028c6293c17eee973cb3af40afaef3740383 -->
|
|
228
233
|
## 7. 验证建议
|
|
229
234
|
|
|
230
235
|
### 本地 ApiBase 与 OsClient 解析(强制)
|
|
@@ -255,12 +260,11 @@ WebOS 直链容器不能只等旧版 `CallbackSysMenuModel` / `CallbackCurrentDi
|
|
|
255
260
|
### 菜单微服务缓存与恢复(强制)
|
|
256
261
|
|
|
257
262
|
- 首次挂载分开检查资源下载与渲染:下载最多 60 秒,`beforemount` 资源齐备后才开始原有 12 秒渲染期限;不得在资源正常下载时提前销毁沙箱。成功仍要求真实可见 DOM,保留一次自愈与旧实例保护。回归覆盖超过 12 秒的真实下载、下载停滞、渲染停滞和陈旧实例事件。
|
|
258
|
-
|
|
259
263
|
- 动态菜单宿主的 Vue 路由保持 `keepAlive:false`,由 `<micro-app keep-alive>` 独占运行时状态;契约固定为 `runtime-keep-alive`,禁止 Vue `KeepAlive` 和 micro-app 双层缓存。
|
|
260
264
|
- 每个顶部 Tab 按完整路由生成稳定实例身份,最多保留 5 个隐藏实例并按 LRU 淘汰。关闭 Tab、退出登录、Token/角色变化以及版本或入口变化时必须精确销毁对应运行时。
|
|
261
265
|
- 恢复时强制同步宿主上下文并检查真实可见 DOM;子应用监听 `appstate-change`,在 `afterhidden` 幂等暂停轮询、WebSocket 和观察器,在 `aftershow` 幂等恢复并重新测量布局,同时保留用户输入、筛选、滚动和内部路由。
|
|
266
|
+
- 微服务 `openForm` 省略 `sysMenuId` 时,宿主从自身冻结的 `ownedRouteMeta.Id` 补回菜单上下文,不能在异步打开后借用另一页的全局 `$route`。显式跨表菜单仍透传并由 FormEngine 验证,不设置 `_IsAdmin`、绕过行范围或增加用户权限;没有合法菜单/表权限时保留拒绝。修改运行 `micro-app-open-form-context.spec.mjs` 并在实际商城点击发布新应用;涉及保存链路时用获授权的本轮私有 fixture 完成保存、独立回读、重开及精确清理,不上传或公开发布测试包。
|
|
262
267
|
- 修改宿主、TagsView 或权限路由时,必须同时读取 [Vue3 前端微服务宿主规则](references/progressive-03-vue3-前端微服务宿主规则.md) 并运行微服务缓存契约测试。
|
|
263
|
-
|
|
264
268
|
- 修改 Vue/JS 后先跑 VS Code Problems 或 `get_errors`。
|
|
265
269
|
- 宿主按钮重置只作用于 `button:not(:focus-visible)`,不能用全局 `outline:none !important` 覆盖组件或微应用的键盘焦点。微应用保留自己的边框形状,焦点色使用已适配明暗表面的 `--mci-text-link`(缺省回退正文语义色),不能直接用浅品牌色。真实 Tab/Shift+Tab 回归须核对 `:focus-visible`、实际 `outline-style`、宽度、颜色与至少 3:1 对比度;`outline-style:none` 即使宽度非零也不可见。使用阴影焦点时另验实际 `box-shadow`,不能只看焦点状态。平台样式组件回归归 Full,应用自身按钮继续在真实业务页面验收。
|
|
266
270
|
- 影响核心前端时跑 `Microi.Client` 的 `npm run build`。
|
|
@@ -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, v8-sql-query | 平台安全和兼容基线、业务接口禁止客户端 SQL 与受权控制面边界 |
|
|
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, ui-design | 系统/租户配置、独立玻璃材质与降级、登录前外观缓存与壁纸、个人覆盖、全框架密度、框架显隐和敏感边界 |
|
|
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, microi-left-right-layout | 菜单统计、复合列/卡片、业务编号展示、真实追溯、按钮角标、节点V8结构化OR筛选和页面入口 |
|
|
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 |
|
|
@@ -150,6 +150,33 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
150
150
|
新建表/模块时,除非用户显式指定或表单达到极重阈值(约 36+ 业务字段、2+ 子表或同等
|
|
151
151
|
重型控件密度),默认保存 `diy_table.FormOpenType=Dialog` 与 `FormOpenWidth=80%`。
|
|
152
152
|
Drawer 只服务超长复杂表单,不能作为所有 CRUD 模块的模板默认值。
|
|
153
|
+
`diy_table.FormOpenHeight` 配置【弹窗高度】,仅对 Dialog 生效。MCP
|
|
154
|
+
`microi_create_table` / `microi_update_table` 与 Manifest 使用 `formOpenHeight`;省略保留,
|
|
155
|
+
`null`/空串恢复自动。支持无单位数字(px)、`600px`、`75%`、`80dvh`、`40rem` 等安全单一长度,
|
|
156
|
+
不传样式片段、`url`、`var` 或表达式。非法旧值自动回退。运行态在弹窗首帧前取得完整字段元数据,
|
|
157
|
+
按最多有效字段的全局 Tab(含公共字段、重型控件与布局)估算并固定本次高度;切换Tab不重新撑高,
|
|
158
|
+
内容在内部滚动。3–4个字段保持小窗,几十字段使用较大高度并受视口上限限制;Drawer保持全高。
|
|
159
|
+
|
|
160
|
+
### 主子表同次保存与预上传
|
|
161
|
+
|
|
162
|
+
用户需要父表与子表同时填写、一次保存时,使用原生 `TableChild` 加子模块
|
|
163
|
+
`SaveType=Submit`、`AddBtnType=InTable`、`InTableEdit=1`,并明确配置
|
|
164
|
+
`InTableEditFields`、`SelectFields` 与可见列表列,覆盖所有必填录入字段;从`NotShowFields`移除这些录入字段。
|
|
165
|
+
复合列和模板不能吞掉编辑控件:编辑时对应原生输入优先,辅助编辑字段仍保留单独列。保留既有`ViewSchema`和无关业务Hooks。
|
|
166
|
+
前端保留子行草稿,父表保存时走现有 `SaveBatch.OperationList`,父操作在前、子操作在后,
|
|
167
|
+
每行保持Client身份及完整 `_SysMenuId/_TableChildAuth`;服务端重读父字段、表、菜单和外键,
|
|
168
|
+
任一校验或后端V8失败整批回滚,不把客户端关系提示当授权,不设置可信Server标志。
|
|
169
|
+
该顺序事务只涵盖当前租户主库;扩展库和自定义替换接口必须显式共享事务编排,不能假装原子成功。
|
|
170
|
+
失败/网络未知保留输入,不自动重试。成功须有父记录Id及完整回执后才清理待提交状态。
|
|
171
|
+
|
|
172
|
+
旧SaveBatch只按AddList后UptList执行,只有与OperationList顺序完全相同时才兼容;
|
|
173
|
+
父Update后子Add必须升级后端。禁止用`window`全局WeakMap、定时器、对子表FormIn强制保存父表、
|
|
174
|
+
`FormSubmitInside`递归重入或手写父子权限上下文代替原生暂存/事务能力。遇旧租户桥接V8,
|
|
175
|
+
先全量读取、保留无关业务逻辑并验证真实录入闭环,不能机械删除保护。
|
|
176
|
+
|
|
177
|
+
新增主表及子表均可预分配Id,附件上传不能用“FormDataId非空”推断编辑;后端必须到当前租户
|
|
178
|
+
对应写库核实记录存在性后走原Add/Edit授权。预上传仍携带表、字段、菜单、预分配Id和完整父链,
|
|
179
|
+
不能为修上传失败关闭字段权限、公私桶规则或将所有管理员上传放行。
|
|
153
180
|
若设计器显示而运行态不显示,先检查 `InFormV8`/字段 V8 是否调用
|
|
154
181
|
`V8.FieldSet(..., 'Visible', false)`、`hideField` 或传入 `HideFields`,再判断前端源码。
|
|
155
182
|
|
|
@@ -290,7 +290,7 @@ Config 静态路径:`TreeCheckbox`、`TreeCheckbox.DataSourceApi`、`TreeCheck
|
|
|
290
290
|
|
|
291
291
|
来源:`Microi.Client/src/views/form-engine/diy-field-component/diy-opentable.vue`。
|
|
292
292
|
|
|
293
|
-
Config 静态路径:`OpenTable`、`OpenTable.BeforeOpenV8`、`OpenTable.BtnName`、`OpenTable.MultipleSelect`、`OpenTable.PropsWhere`、`OpenTable.SearchAppend`、`OpenTable.ShowDialog`、`OpenTable.SubmitV8`、`OpenTable.SysMenuId`、`OpenTable.SysMenuName`、`OpenTable.TableId`、`OpenTable.TableName`。
|
|
293
|
+
Config 静态路径:`OpenTable`、`OpenTable.BeforeOpenV8`、`OpenTable.BtnName`、`OpenTable.MultipleSelect`、`OpenTable.PropsWhere`、`OpenTable.SearchAppend`、`OpenTable.SelectionDisabledField`、`OpenTable.ShowDialog`、`OpenTable.SubmitV8`、`OpenTable.SysMenuId`、`OpenTable.SysMenuName`、`OpenTable.TableId`、`OpenTable.TableName`。
|
|
294
294
|
|
|
295
295
|
设计器绑定(含临时编辑键,不能直接当 Config):`BeforeOpenV8`、`BtnName`、`MultipleSelect`、`SubmitV8`。
|
|
296
296
|
|
|
@@ -107,6 +107,28 @@ V8.Result = {
|
|
|
107
107
|
|
|
108
108
|
对应配置为 `ShuxianSZDM=TreeTitle`、`FubiaoGLZD=Id`。右侧新增时,组件会通过 `ParentDataAppend` 把父节点、父键和 `ZibiaoGLZD` 传给表格;业务字段仍需由表单事件兜底校验。
|
|
109
109
|
|
|
110
|
+
### 节点事件返回复合筛选
|
|
111
|
+
|
|
112
|
+
普通主外键继续使用 `ZibiaoGLZD/GuanlianPPLJ`。确需多个关系字段时,在已授权的配置
|
|
113
|
+
`ShujieDDJSJ` 节点 V8 返回 `{ PropsWhere: [...] }`,例如主部门或兼职部门同时匹配:
|
|
114
|
+
|
|
115
|
+
```js
|
|
116
|
+
var id = String(V8.Form.Id || '');
|
|
117
|
+
V8.Result = { PropsWhere: [
|
|
118
|
+
{ Name: 'DeptId', Type: '=', Value: id, GroupStart: true },
|
|
119
|
+
{ AndOr: 'OR', Name: 'DeptIds', Type: 'Like', Value: '"' + id + '"', GroupEnd: true }
|
|
120
|
+
] };
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
`GroupStart/GroupEnd` 使用布尔值。字段名、关系及存储格式必须先通过实时 Schema 回读,
|
|
124
|
+
示例不能用于任意业务表。这里只传结构化条件和值,禁止由前端传 SQL;服务端仍校验菜单、表和数据范围。
|
|
125
|
+
运行时只接受非数组对象中的 `PropsWhere` 数组并深复制;明确 `[]` 清空节点条件,未返回或类型非法
|
|
126
|
+
继续原单关联筛选。慢节点事件返回前再次核对节点代次,切节点后的旧结果不能覆盖当前筛选。
|
|
127
|
+
|
|
128
|
+
配置复用 `microi_get_module`、`microi_get_field_list` 和标准 `microi_admin_table_data`
|
|
129
|
+
读取/更新 `diy_LeftJoinRightView`,不新增通用 SQL 接口。系统账号与角色管理的组织树共同使用
|
|
130
|
+
现有 `RoleTreeWidth/RoleTreeCollapsed` 个人偏好;其它业务树保留各自比例。
|
|
131
|
+
|
|
110
132
|
加载请求期间必须显示明确的“正在加载项目...”状态,不能先渲染“暂无数据”;多次搜索或翻页并发返回时,只应用最后一次请求,防止旧结果覆盖新页。
|
|
111
133
|
|
|
112
134
|
## MCP 实施顺序
|
|
@@ -329,6 +329,7 @@ window.addEventListener('appstate-change', (event) => {
|
|
|
329
329
|
|
|
330
330
|
- 唯一根容器必须同时写入 `data-mci-ui-root="{AppKey}"`、`data-theme`、`data-mci-palette`,并把宿主字段映射为本应用的语义 Token;禁止把宿主页面的 `html/body` 当作子应用样式开关。
|
|
331
331
|
- 主操作色优先使用 `--mci-color-primary` / `--el-color-primary` 或宿主 `themeColor`;表面、文字、边框分别使用 `themeTokens.surface/surfaceSoft/textPrimary/textSecondary/border`。成功、警告、错误色可以保持语义独立,但必须分别提供浅色与深色可读状态。
|
|
332
|
+
- 材质从 `themeTokens.material` 及固定语义值 `materialSurface/materialOverlay/materialControl/materialRowHover/materialText/materialTextSecondary/materialTextMuted/materialBorder/materialControlBorder/materialFocus` 接收,小范围主操作用 `materialPrimaryBg/materialPrimaryHover/materialPrimaryText` 配对;模糊/饱和度继续用既有材质值,不传CSS正文、壁纸URL或身份。大容器只铺一层低alpha表面,内层透明,文字/媒体不使用整容器opacity;静态细暗边与活动控件/键盘焦点分开,Solid清除旧值。原生选项菜单等无法采样玻璃的区域使用同调实色回退。真正跨文档iframe须显式消费快照;当前micro-app iframe沙箱把可见DOM投影到宿主lightDOM的micro-app-body时,宿主也只能在精确AppKey所属根及弹窗区域提供兼容样式,禁止据此读取父DOM或对其他应用强行注入通用样式。
|
|
332
333
|
- 表格、表单、弹窗、上传、骨架屏、空状态、错误态、禁用态、悬停和焦点环都必须覆盖浅色与深色;大面积背景不能直接写死 `#fff` 或某个深色,主题色不能只改按钮而其它视觉仍留在旧配色。
|
|
333
334
|
- 主题切换必须即时生效且不重挂应用、不丢失表单/筛选/内部路由;卸载时清理本应用创建的媒体查询、数据与生命周期监听器。
|
|
334
335
|
- 界面密度与主题属于同一必读契约。宿主 `uiDensity`(兼容 `themeTokens.uiDensity`)提供 `scale/factor/variables`;将 `variables` 映射到应用唯一根容器,写入 `data-mci-ui-density`,在首次挂载、主题消息和缓存实例再次显示时更新。嵌入态不得用自己的旧用户快照或 localStorage 覆盖宿主。iframe 不继承父页面 CSS,禁止声称父框架修改了变量就已适配微服务。
|
|
@@ -3,6 +3,8 @@ name: module-engine
|
|
|
3
3
|
description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修改后台菜单、菜单统计角标、模块标题指标、复合列表列、移动端业务卡片、查询列、接口替换、跨端 ViewSchema、动态按钮、PageTabs、树形加表格布局和 MicroService 菜单。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
+
官方系统目录(系统帐号、角色、岗位)的批量操作通过 `BatchSelectMoreBtns` 与 `platform-directory-batch-delete` 交付;不要让 AI 用通用 SQL 删除系统表或绕过可信目录接口。角色权限界面提供基础信息、MCP配置、表直连权限三个 Tab,切换必须保留未保存草稿。新应用登记界面只把名称、唯一应用 Id、版本、应用类型、分类、公开状态、预览图和介绍放在应用信息,运行状态与兼容字段放更多信息;制作应用与更新日志保留独立 Tab。微服务打开该标准表单时须继承冻结宿主菜单上下文,仍由后端校验目标表/记录权限,不能传 `_IsAdmin` 绕过。
|
|
7
|
+
|
|
6
8
|
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
9
|
|
|
8
10
|
# Microi 模块引擎
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: page-engine
|
|
3
|
-
description: 生成和审查 Microi 界面引擎 Page Engine
|
|
3
|
+
description: 生成和审查 Microi 界面引擎 Page Engine 与内置 GoView 数据大屏 JSON。用于 mic_page 页面、mic_data_dashboard 可编辑大屏、图表、表格、画布布局与真实渲染验收。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
7
|
|
|
8
8
|
# Microi 界面引擎(Page Engine)页面 JSON 生成
|
|
9
9
|
|
|
10
|
+
## 先区分 Page Engine 与内置 GoView
|
|
11
|
+
|
|
12
|
+
用户指定 GoView、数据大屏或提供科技风自由画布截图时,先读取 [GoView 原生 JSON、MCP 与完整示例](references/go-view-json.md)。吾码已将 GoView 集成在前端,不需要独立 GoView Docker、端口或后端;不能根据容器清单或菜单名称断言未安装。先调用 `microi_get_go_view_schema`、`microi_list_go_view_projects` 发现实际能力,旧 MCP 没有这些工具时核对工具版本与 `mic_data_dashboard` 实时 Schema,不得改用 `mic_page` 冒充 GoView。
|
|
13
|
+
|
|
14
|
+
两种 JSON 不可混用:Page Engine 是 `mic_page` 的 `formConfig/widgetList`;GoView 是 `mic_data_dashboard.ContentData` 的 `editCanvasConfig/componentList/requestGlobalConfig`。下文继续描述 Page Engine。
|
|
15
|
+
|
|
10
16
|
MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_page_design`;版本治理入口见下文。保存工具写入后仍需回读 `mic_page`,不能把生成成功当作持久化成功。
|
|
11
17
|
|
|
12
18
|
## 完整 AI 开发默认报表(强制)
|