@microi.net/cli 6.2.2 → 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 +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +117 -116
- package/scripts/microi-cli.js +63 -63
- package/scripts/microi-skills.meta.json +268 -253
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +83 -83
- package/skills/app-store/SKILL.md +7 -6
- package/skills/microi-ai-application/SKILL.md +5 -5
- package/skills/microi-client-frontend/SKILL.md +11 -7
- package/skills/microi-codex-installer/SKILL.md +6 -0
- package/skills/microi-datasource-mapping/SKILL.md +1 -0
- package/skills/microi-db-schema/SKILL.md +8 -0
- package/skills/microi-docs-coverage/references/capability-map.md +10 -10
- package/skills/microi-form-engine/SKILL.md +52 -0
- package/skills/microi-form-engine/references/component-config-index.md +1 -1
- package/skills/microi-form-engine/references/data-source-events.md +6 -1
- package/skills/microi-form-layout/SKILL.md +1 -1
- 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 +6 -0
- package/skills/microi-left-right-layout/SKILL.md +22 -0
- package/skills/microi-microservice/SKILL.md +388 -382
- package/skills/microi-microservice/references/runtime-delivery.md +15 -0
- package/skills/microi-ui/SKILL.md +192 -192
- 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 -183
- package/skills/module-engine/SKILL.md +7 -1
- 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/SKILL.md +227 -223
- package/skills/ui-design/assets/pattern-showcase/index.html +2 -2
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +221 -206
- package/skills/ui-design/references/data-workspace-density.md +77 -0
- package/skills/ui-design/references/design-pattern-library.md +186 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- 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 +165 -164
- 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 +237 -235
- 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 +154 -152
- 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 -207
- package/skills/uniapp-mall-assets/SKILL.md +7 -2
- package/skills/v8-crud-api/SKILL.md +2 -1
- package/skills/v8-explorer-tree/SKILL.md +22 -1
- package/skills/v8-menu-buttons/SKILL.md +2 -0
- package/skills/v8-saas-multi-tenant/SKILL.md +6 -0
- package/skills/v8-security/SKILL.md +11 -1
- package/skills/v8-sql-query/SKILL.md +38 -1
- package/skills/v8-sql-query/examples/business-query.js +18 -0
- package/skills/v8-table-event/SKILL.md +51 -2
- 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 +3 -1
- package/skills/vision-engine/references/video-timeline.md +52 -0
|
@@ -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
|
### 模块级跨端视图
|
|
@@ -170,17 +170,21 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
170
170
|
|
|
171
171
|
- 微服务和定制组件的来源标识必须由 Microi.Client 宿主统一渲染,子应用不得各自实现。微服务来源入口只向当前登录用户 `Level >= 9999` 展示,普通用户、未知或非法等级、受限访问密钥会话不显示标签、关闭按钮及源码详情;不从账号名称、`_IsAdmin` 或子应用元数据推断权限。定制组件的原有来源展示保持兼容,不新增 `RenderSourceBadgeMode`、自动收起或全局关闭配置。
|
|
172
172
|
- `V8.OpenAppDialog` / Drawer 等标准弹层的来源标识放在标题文字之后,不提供关闭按钮;菜单/整页微服务由 `micro-app/host.vue` 在内容区右上角直接渲染,管理员可手动关闭当前页面实例的标识,切换实例或账号后恢复。当前用户等级降低后立即隐藏入口并关闭已展开详情;这只控制来源辅助工具,不能改变业务菜单、关闭 Tab、弹层或后端源码/MCP 鉴权。不得依赖外围路由组件猜测菜单微服务。修改时运行 `tests/microservice-source-badge-permission.spec.mjs` 与既有来源及宿主契约回归。
|
|
173
|
-
- 来源标识使用可点击的 `button` 语义,普通按钮为 `cursor:pointer`,可拖动菜单胶囊使用 `grab/grabbing`;拖动阈值、边界和 Tab 右键详情遵守 `microi-microservice
|
|
173
|
+
- 来源标识使用可点击的 `button` 语义,普通按钮为 `cursor:pointer`,可拖动菜单胶囊使用 `grab/grabbing`;拖动阈值、边界和 Tab 右键详情遵守 `microi-microservice`。点击后用可拖动、居中、亮/暗色适配的宿主 Element Plus 弹层展示(圆角遵循 ui-design,不强制大圆角) AppKey、PageKey、应用内/框架路由、版本、源码定位、运行入口、发布/挂载状态和租户坐标,并生成可复制的 MCP 修改指令;公开详情不得包含 DiyToken、访问密钥、私有配置或用户敏感字段。
|
|
174
174
|
- 框架水印覆盖 `100vw × 100vh` 且固定 `pointer-events:none`。开启后内容空值默认 `$SysTitle$ - $UserName$`(用户名为空回退账号)、方向默认 `DiagonalUp`、密度默认 `Comfortable`、字号空值/0 默认 14,透明度空值/0 默认 30;亮色、深色、弹层、键盘和减少动态效果模式都要验收。
|
|
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`。
|
|
@@ -53,6 +53,12 @@ microi update --background --workspace "<工作区绝对路径>" --json
|
|
|
53
53
|
|
|
54
54
|
后台进程会依次检查/安装全局 CLI、幂等更新 Codex 插件与已存在 DSH 宿主的 profile bundle、执行 `microi ai init`、`microi doctor`、`microi codex status` 和 `microi dsh status`。`codex install --yes` 的 `--yes` 只保留给旧脚本兼容,不再表示必须先取得用户授权。VS Code 扩展同时使用官方扩展宿主的 `workbench.extensions.installExtension` / 自动更新机制;当前 Extension Host 不强制重载。
|
|
55
55
|
|
|
56
|
+
自动更新验收必须区分全局包、宿主插件与每个已连接工作区:
|
|
57
|
+
|
|
58
|
+
- `skills/` 必须包含当次发行的全部 Skill 正文、参考文件、脚本与资产;逐文件清单和摘要参与验收,不能只比较包版本或入口文件。目标路径不可写、复制失败或正文不完整时,`ai init` 必须返回失败,后台记录待重试或带警告状态,不能报告全部同步完成。本地自定义、源码检出及较新 bundle 按既有归属保护保留,并明确其边界。
|
|
59
|
+
- 更新节流必须识别目标工作区。工作区 A 已完成不能成为工作区 B 跳过同步的依据;B 已有连接时仍应投递自己的 AI/Skills/MCP 初始化,未配置连接的目录继续跳过。
|
|
60
|
+
- Codex 插件同样遵守较新提供者优先:旧 CLI 不得把已安装的较新版插件降级;同版插件还需核对内容,损坏不能仅凭版本号认定已同步。连接、模型配置及非吾码插件保持原值,运行中的会话仍按下一段规则处理。
|
|
61
|
+
|
|
56
62
|
当前运行中的扩展、CLI、Codex Router、DSH 会话与 MCP 必须继续使用已加载版本,禁止为了升级终止进程、强制重载窗口、结束对话或拒绝新任务。新版本写入版本隔离目录,只在后续新进程或宿主自然重启时接管。npm registry 不可用、版本无法解析、权限不足、文件被占用或安装失败时,写入 `~/.microi/updater/status.json` 并延后重试;可非模态提示“立即重试/查看日志”,但无论用户是否处理,当前、正在进行和新建工作都必须继续。禁止改用第三方 registry 或不明镜像冒充最新版。
|
|
57
63
|
|
|
58
64
|
## 自然语言入口规则
|
|
@@ -63,6 +63,7 @@ export function createOptionLabel(options = []) {
|
|
|
63
63
|
- 通过已授权接口取得当前关联记录的名称后,同时更新字段选项和同Key显示对象。仅补名称时用 `V8.Form.字段名 = {Key, Value}` 静默赋值,避免 `FormSet` 触发部门/人员等字段的异步联动或把纯查看标记为业务修改。存储字段仍为原Key,不能改成名称或默认第一条。
|
|
64
64
|
- 详情解析以持久主记录和真实权限为依据,不能靠请求传入的任意关联Id读取人员或外站资料。首屏之外的当前关联须单独授权解析,不扩大候选全集;返回仅包含选择器所需字段。
|
|
65
65
|
- 异步回填前核对表单实例、记录Id、依赖值和当前选择;换记录、换部门、改选后的迟到响应丢弃。失败不得伪造名称或清空已有业务关联。
|
|
66
|
+
- 候选数据异步返回或已选值补查后,还要刷新控件本地选中显示对象;`NeedResetDataSourse`、本地搜索候选缓存只能控制候选重置,不能阻止同保存键的 Label 更新。平台实现使用 `RefreshSelectedOptionLabels` 与 `resolveCurrentSelectOption`,只更新显示不发 `ModelChange`、不触发字段 V8、不写回旧记录。候选/补查缓存继续按身份、记录、配置与选中代次隔离,保留原授权补查协议;不得改保存格式或扩大候选全集来修复回显。
|
|
66
67
|
- 验收覆盖新增检索、编辑、只读详情、首屏外已有值、停用/越权关联和迟到响应;必须实际截图核对可读名称,不能仅看控件类型或接口返回成功。
|
|
67
68
|
|
|
68
69
|
### 生成 SQL 配置的字面量安全
|
|
@@ -18,7 +18,15 @@ description: Microi 吾码数据库结构与字典指南。用于通过实时 MC
|
|
|
18
18
|
## 核心模型
|
|
19
19
|
|
|
20
20
|
- `diy_table` 存储表单/表元数据和表级 V8 事件。
|
|
21
|
+
日志、评论、版本的十二个写入事件为顶层 `Data{Log|Comment|Version}{BeforeClient|BeforeServer|AfterServer|AfterClient}V8`,
|
|
22
|
+
类型 mediumtext、CodeEditor;不能写进字段 Config 或模块事件。先读实时 Schema,再由标准 MCP
|
|
23
|
+
发现/保存/回读和代码版本链维护,触发与事务边界见 `../v8-table-event/SKILL.md`。
|
|
24
|
+
`diy_comment.RequestHash` 为可空 varchar(64)、隐藏只读的服务器原评论请求摘要,
|
|
25
|
+
用于 BeforeServer 加工后的幂等核验;不作为客户端可配置写入字段或普通输出。
|
|
21
26
|
- `diy_field` 存储每张 DIY 表的字段,包括组件类型、校验、可见性、数据源、字段事件和模板 V8。
|
|
27
|
+
- 列表单元格对齐是顶层 `diy_field.TableAlign=auto/left/center/right`(空/null 自动),
|
|
28
|
+
普通字段说明的显示模式是顶层 `diy_table.FieldDescriptionMode=inline/tooltip`(空/null 为 inline)。
|
|
29
|
+
使用标准字段/表 MCP 更新和 Manifest 同名小驼峰属性;不放进 Config/DiyConfig,也不复用复合列 Align。
|
|
22
30
|
- DIY 表固定物理字段 `Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted` 也必须有正常的 `diy_field` 元数据;设计器通过 `DisplayDefaultField` 默认隐藏,而不是把它们当异常字段。自然语言“修复审计字段/默认字段异常”应调用 `microi_repair_audit_fields`,由平台幂等补元数据,禁止直接用 SQL 临时修租户数据。
|
|
23
31
|
- `sys_menu` 将 DIY 表转换为菜单/模块页面,并存储查询、按钮、导入导出、卡片/移动端、工作流和权限相关的模块配置。
|
|
24
32
|
- `sys_apiengine` 存储接口引擎定义;通过 `V8.ApiEngine.Run(ApiEngineKey, params)` 调用。
|
|
@@ -14,7 +14,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
14
14
|
| `form-engine/form-custom-control.md` | microi-form-engine, microi-client-frontend | 定制控件、前端扩展边界 |
|
|
15
15
|
| `form-engine/form-datasource.md` | microi-form-engine, microi-datasource-mapping | 选项数据源、逐字段关联回填/清空/异步代次、快照和回显 |
|
|
16
16
|
| `form-engine/form-engine-info.md` | microi-form-engine, microi-client-frontend, v8-crud-api | 表单模型、工具栏、可读记录标题、字段定位、紧凑密度及草稿归属与恢复 |
|
|
17
|
-
| `form-engine/form-field-info.md` | microi-form-engine, v8-table-event |
|
|
17
|
+
| `form-engine/form-field-info.md` | microi-form-engine, v8-table-event | 表单/字段属性与事件、字段级 TableAlign 自动/显式覆盖及表级 FieldDescriptionMode 行内/图标说明 |
|
|
18
18
|
| `form-engine/model-engine.md` | v8-template-engine | 表格/表单模板 |
|
|
19
19
|
| `getting-started/docker-run.md` | microi-deployment, vision-engine | Docker 部署、历史独立编排、群晖CPU视觉双服务及可选行为模型与验收 |
|
|
20
20
|
| `server-panel/overview.md` | microi-deployment, microi-ui | 独立服务器面板、Docker 插件版本、Nginx/SSL、冷备份恢复、共存与 Ops 迁移 |
|
|
@@ -32,9 +32,9 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
32
32
|
| `more/hdfs.md` | v8-file-upload | 分布式文件存储、URL、本机原始流断点续传、固定 Primary/BackupPrivate 私有备份及显式 BackupPublic 最终文件公开、共享日额、原字节与匿名有界回读 |
|
|
33
33
|
| `more/identity-verification.md` | v8-security, v8-utilities, microi-microservice, app-store, v8-saas-multi-tenant | DiyToken、登录方式气泡、Passkey、Authenticator TOTP、Gitee/微信/GitHub、动态租户设置、严格人脸、一次性步进票据、个人中心和自动升级包 |
|
|
34
34
|
| `more/office.md` | v8-export-import, microi-microservice | Office 导入导出与在线编辑集成 |
|
|
35
|
-
| `more/security.md` | v8-security |
|
|
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 功能截图与实测边界 |
|
|
@@ -44,24 +44,24 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
44
44
|
| `system-engine/ai-platform-governance.md` | ai-platform-governance, app-store, business-blueprint, page-engine | 门户、身份、配置、发布、服务韧性、Trace/日志、资产协作与可恢复导入 |
|
|
45
45
|
| `system-engine/ai-workflow-suite.md` | business-blueprint, v8-workflow, microi-system-delivery | AI 工作流、蓝图、状态机、自动化流和流程挖掘 |
|
|
46
46
|
| `system-engine/system-observability.md` | system-observability, performance-testing, v8-debugging, microi-microservice | 系统日志、Trace、热点接口、资源监控、网络流量归因、安全治理、AI/MCP 与商城交付 |
|
|
47
|
-
| `system-engine/app-store.md` | app-store |
|
|
47
|
+
| `system-engine/app-store.md` | app-store | 应用包、安装、升级和回滚;当前公开 API 固定入口、精确历史 CDN 预览与内部发布字段边界 |
|
|
48
48
|
| `system-engine/databases.md` | dos-orm, v8-sql-query, microi-deployment | 扩展数据库与迁移 |
|
|
49
49
|
| `system-engine/datasource-engine.md` | datasource-engine | 数据源定义、执行和供数 |
|
|
50
50
|
| `system-engine/cache.md` | v8-cache-pattern, v8-saas-multi-tenant | L1/L2 架构、租户 Redis、Pub/Sub 失效、V8 安全代理与 Redis 管理器 |
|
|
51
51
|
| `system-engine/file-manage.md` | v8-file-upload, microi-client-frontend | 文件柜、公私桶管理、在线预览、回收站、跨平台与 MinIO 同步 |
|
|
52
52
|
| `system-engine/job.md` | job-engine | 调度、后台任务和分布式恢复 |
|
|
53
|
-
| `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI
|
|
53
|
+
| `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI 前端应用的工程架构与交付;API 固定入口不顶层跳转、历史版本实际地址及菜单/内部资产路由区分 |
|
|
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 |
|
|
61
61
|
| `system-engine/print-engine.md` | print-engine, v8-frontend-events | 服务端模板打印与蓝牙直连边界 |
|
|
62
62
|
| `system-engine/bluetooth-printer.md` | v8-frontend-events, print-engine, microi-client-frontend, microi-microservice | GP-M322 与 CC4 双型号、TSPL/CPCL/ESC-POS、BLE/SPP、微服务平台普通打印桥、旧 V8 兼容及实机验收 |
|
|
63
63
|
| `system-engine/report-engine.md` | report-engine | 虚拟报表和导出 |
|
|
64
|
-
| `system-engine/saas-engine.md` | v8-saas-multi-tenant | 租户识别、SaaS 配置、ZIP
|
|
64
|
+
| `system-engine/saas-engine.md` | v8-saas-multi-tenant | 租户识别、SaaS 配置、ZIP 开库进度与长任务租约、创建结果主/备用入口与实际版本/迁移游标区分 |
|
|
65
65
|
| `system-engine/search-engine.md` | search-engine | Elasticsearch 索引和查询 |
|
|
66
66
|
| `system-engine/email-engine.md` | email-engine | 邮箱系统、源码商城安装、账号维护、收发同步和邮箱 MCP |
|
|
67
67
|
| `system-engine/spider-engine.md` | spider-engine | 浏览器采集和 Worker |
|
|
@@ -73,12 +73,12 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
73
73
|
| `system-engine/wf-engine.md` | v8-workflow | 工作流设计和事件 |
|
|
74
74
|
| `v8-engine/ai-apiengine.md` | ai-engine, v8-api-config, microi-system-delivery | AI 编程与短提示词;完整开发默认清单覆盖原推荐提示词 1–8 |
|
|
75
75
|
| `v8-engine/api-engine.md` | v8-api-config, v8-utilities | 接口上下文、配置、分布式锁续租和调用 |
|
|
76
|
-
| `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config |
|
|
76
|
+
| `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config, v8-sql-query | 接口引擎实战、参数白名单与禁止客户端 SQL 的生成规范 |
|
|
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, uniapp-mall-assets | 全部前端 V8
|
|
81
|
-
| `v8-engine/v8-server.md` | v8-utilities, v8-api-config, v8-http-integration, v8-security, ai-engine | 全部后端 V8
|
|
80
|
+
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-table-event, v8-http-integration, v8-security, ai-engine, print-engine, uniapp-mall-assets | 全部前端 V8、日志/评论/版本四阶段事件及真实写入回执、平台 AI、强身份验证、扫码与文件边界 |
|
|
81
|
+
| `v8-engine/v8-server.md` | v8-utilities, v8-table-event, v8-api-config, v8-http-integration, v8-security, ai-engine, v8-sql-query | 全部后端 V8、活动事件同父事务/空配置兼容、强身份票据、平台 AI、专项路由及可信服务端 SQL/绑定值边界 |
|
|
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` 条件 |
|
|
84
84
|
|
|
@@ -30,6 +30,8 @@ Config/Data、菜单查询列与缓存保持一致。
|
|
|
30
30
|
- 数据源、字段属性、事件与定制组件:`references/data-source-events.md`
|
|
31
31
|
- 表单分组与宽度:`../microi-form-layout/SKILL.md`
|
|
32
32
|
- 后端表单事件:`../v8-table-event/SKILL.md`
|
|
33
|
+
- 日志/评论/数据版本的四阶段事件也属于顶层 `diy_table`,共十二项;
|
|
34
|
+
用标准事件目录及 Manifest `events[]` 保存,名称与新原子事务适用条件以该责任 Skill 为准。
|
|
33
35
|
- 前端字段事件:`../v8-frontend-events/SKILL.md`
|
|
34
36
|
|
|
35
37
|
## 标准工作流
|
|
@@ -72,6 +74,22 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
72
74
|
普通身份真实 Rows/Count/SUM/Tree/Export 与撤权边界;离线会话选择测试不能冒充复制延迟
|
|
73
75
|
或七种数据库实机测试。所有新普通表字段保持可空,不把已有表批量设为主库。
|
|
74
76
|
|
|
77
|
+
## 列对齐与字段说明模式
|
|
78
|
+
|
|
79
|
+
- 表格单元格对齐持久化为顶层 `diy_field.TableAlign`,值为 `auto/left/center/right`。
|
|
80
|
+
省略不改已有值,`null/''/auto` 采用类型感知默认:文本、日期、Select、部门及 AutoNumber
|
|
81
|
+
左对齐,NumberText 右对齐,布尔/视觉控件居中;未知控件再参考真实物理数值/布尔类型。
|
|
82
|
+
显式配置优先;模块复合列 `ViewSchema.Layout.List.Columns[].Align` 保持独立优先,不混写 Config。
|
|
83
|
+
- 普通字段说明由顶层 `diy_table.FieldDescriptionMode` 统一配置:`inline`(空/null 的兼容默认)
|
|
84
|
+
直接显示灰字;`tooltip` 在 Label 旁显示可聚焦的感叹号图标,支持悬停、键盘焦点及窄屏点击。
|
|
85
|
+
不改变 CollapseGroup/Tabs 等布局控件自身的说明,也不改变任何校验和权限。
|
|
86
|
+
- 标准 MCP `microi_add_field/microi_update_field/microi_update_field_list` 使用 `tableAlign`,
|
|
87
|
+
`microi_create_table/microi_update_table` 使用 `fieldDescriptionMode`;Manifest 分别写
|
|
88
|
+
`tables[].fields[].tableAlign` 与 `tables[].fieldDescriptionMode`。未知枚举写前拒绝。
|
|
89
|
+
`microi_get_form_component_catalog` 同时返回 `metadataProperties`,它们是顶层元数据而非控件 Config。
|
|
90
|
+
- 先配套升级前后端与表单引擎官方应用,再回读真实配置、刷新缓存,验证列表/分组表头/行内编辑
|
|
91
|
+
及 Add/Edit/View、多列 Label、键盘与移动端。MCP 成功或配置回读不等于旧客户端已支持。
|
|
92
|
+
|
|
75
93
|
## 上传字段配置(AI 生成时强制)
|
|
76
94
|
|
|
77
95
|
- `Config.FileUpload.MediaType` 明确指定 `file/image/video`,缺省为 `file`。设计器【媒体类型】
|
|
@@ -132,6 +150,33 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
|
|
|
132
150
|
新建表/模块时,除非用户显式指定或表单达到极重阈值(约 36+ 业务字段、2+ 子表或同等
|
|
133
151
|
重型控件密度),默认保存 `diy_table.FormOpenType=Dialog` 与 `FormOpenWidth=80%`。
|
|
134
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
|
+
不能为修上传失败关闭字段权限、公私桶规则或将所有管理员上传放行。
|
|
135
180
|
若设计器显示而运行态不显示,先检查 `InFormV8`/字段 V8 是否调用
|
|
136
181
|
`V8.FieldSet(..., 'Visible', false)`、`hideField` 或传入 `HideFields`,再判断前端源码。
|
|
137
182
|
|
|
@@ -319,6 +364,13 @@ MCP 建模只使用:
|
|
|
319
364
|
`OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
|
|
320
365
|
用于展示关联集合,不能用前端拼接代替数据权限。
|
|
321
366
|
|
|
367
|
+
一对一关联需要保留已占用候选以便区分时,使用 `Config.OpenTable.SelectionDisabledField`
|
|
368
|
+
指定目标记录的占用字段,`SelectionDisabledText` 提供小程序提示。非空且非 `0/false` 的值
|
|
369
|
+
置灰禁选,字段未返回也失败关闭;空值可选,未配置兼容旧行为。先更新 PC 与小程序客户端,
|
|
370
|
+
再通过 `microi_get_field_list` / `microi_update_field` 合并 Config 并回读;不把禁选条件改成
|
|
371
|
+
查询过滤而隐藏记录。覆盖单选、行点击、卡片、全选、刷新后占用及缺字段;服务端仍必须在
|
|
372
|
+
事务中保证一对一、权限和并发占用,前端禁选不能代替后端约束。
|
|
373
|
+
|
|
322
374
|
### 子表验收与复盘
|
|
323
375
|
|
|
324
376
|
- 回读主表字段、子表字段、隐藏子菜单和索引,确认配置中的表 Id、菜单 Id、外键名均真实存在。
|
|
@@ -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
|
|
|
@@ -86,7 +86,12 @@ if (!V8.Form.Name) return { Code: 0, Msg: '名称不能为空' };
|
|
|
86
86
|
## 字段属性
|
|
87
87
|
|
|
88
88
|
常用持久化属性包括 `Visible`、`AppVisible`、`NotEmpty`、`Readonly`、`Data`、
|
|
89
|
-
`Config`、`FormWidth`、`TableWidth`、`Tab`、角色绑定和前端事件代码。
|
|
89
|
+
`Config`、`FormWidth`、`TableWidth`、`TableAlign`、`Tab`、角色绑定和前端事件代码。
|
|
90
|
+
|
|
91
|
+
`TableAlign` 是 `diy_field` 顶层属性,值 `auto/left/center/right`,空/null 按控件类型自动;
|
|
92
|
+
不能放进 `Config`。说明显示模式是 `diy_table.FieldDescriptionMode=inline/tooltip`,空/null
|
|
93
|
+
保持 inline;模式作用于普通字段 Description,不覆盖布局控件自己的说明。具体默认与 MCP 参数见
|
|
94
|
+
`../SKILL.md` 的“列对齐与字段说明模式”。
|
|
90
95
|
|
|
91
96
|
- 除非明确隐藏,`Visible=1`、`AppVisible=1`。
|
|
92
97
|
- 角色绑定只缩小界面可见性,不能代替服务器数据权限。
|
|
@@ -18,7 +18,7 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
|
|
|
18
18
|
表单打开方式与分组是两个独立决策:顶层新表默认 `FormOpenType=Dialog`、
|
|
19
19
|
`FormOpenWidth=80%`。完整系统开发的子表宽度按 `microi-system-delivery` 必读清单第 4 项配置:第一层 75%、第二层 70%,再逐层递减 5 个百分点。只有约 36 个以上业务字段、至少 2 个大型子表,或同等密度的重型控件
|
|
20
20
|
才评估 Drawer;不能用 Drawer 代替 Tabs/CollapseGroup 的信息架构。Dialog 统一使用居中、可拖动、
|
|
21
|
-
|
|
21
|
+
现有宿主 Dialog 壳;圆角依当前主题契约,独立应用采用适度圆角并遵循 ui-design,不以大圆角作为默认;Drawer 贴边。
|
|
22
22
|
|
|
23
23
|
`CollapseGroup` 的运行态视觉统一使用清爽的白色/主题表面卡片:短主题色指示条、紧凑
|
|
24
24
|
标题、可选图标、单行副标题、标题旁轻量 `x 项` 文案,以及最右侧无底色的折叠箭头。
|
|
@@ -171,6 +171,12 @@ if (ctx.token && ctx.token !== appliedHostToken) {
|
|
|
171
171
|
普通 `request`、浏览器 `fetch(FormData)` 上传和 `uni.uploadFile` 都必须读取响应头的新 Token。验收时必须连续执行至少两个需要登录态的请求(前一个允许发生 Token 轮换),确认后一个仍返回 `Code=1`;不能只看页面首屏渲染成功。
|
|
172
172
|
<!-- /microi-progressive:chunk -->
|
|
173
173
|
|
|
174
|
+
### 嵌入长会话验收
|
|
175
|
+
|
|
176
|
+
- 从宿主标准登录开始,打开原菜单中的微应用,再切到原生列表使微应用隐藏;保持同一浏览器会话,跨过该次真实 JWT 的原始 `exp` 后返回原菜单,并执行新的受保护业务调用。分别证明宿主与子应用经标准机制续签、继承同一有效会话,以及返回后的 HTTP/业务结果;只保存脱敏时间和结果,不记录 Token。独立入口通过、缓存首屏、几分钟业务 heartbeat 或 SignalR 房间租期均不能代替宿主长会话验收;浏览器意外退出应记为中断。
|
|
177
|
+
- 若旧宿主从匿名登录页启动后没有开启原有维护,先核对事件作用域与宿主实际能力。在已授权租户中优先使用既有 `LoginEndV8Code` 调用现有根组件标准维护(如 `self.$root.RefreshTokenWithLock`);先完整读取并保留原文,采用项目命名的幂等追加,复用原租户锁和定时器销毁,注销后停止,多次登录不重复安装。写入后回读前后哈希与原文前缀、刷新对应配置缓存,再标准登录并跨真实有效期验证。
|
|
178
|
+
- 钩子只能启动现有标准维护,不得复制 JWT/HTTP 会话实现、另造 Token 算法、放宽鉴权或修改有效期。检查次数及未抛异常不代表续签成功,必须以真实续签响应、新会话同步和后续受保护调用为证据;本地 Skill 增补也不代表 CLI、插件、平台或既有应用已发行升级。
|
|
179
|
+
|
|
174
180
|
## 运行时 ApiBase / OsClient 切换
|
|
175
181
|
|
|
176
182
|
允许用户切换平台的客户端必须把 `ApiBase + OsClient` 视为完整安全边界,而不是只替换请求 URL。候选端点应先匿名探测,成功后再原子更新配置并清除旧 Token、用户和平台派生缓存;账号、RSA 密文、菜单、表元数据和页面状态不得跨边界复用。SDK 每次修改 `apiBase` 或 `osClient` 都必须推进端点代次,请求记录发起时代次,并在处理响应头 Token、鉴权失效或响应体之前拒绝旧代次的迟到响应。验收至少覆盖“旧平台登录请求未返回 -> 切换平台 -> 旧响应携带 Token 返回”,并确认旧 Token 没有写入、新请求只发送一个新 `osclient`。
|
|
@@ -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 实施顺序
|