@microi.net/cli 6.2.3 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +6 -6
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +122 -122
- package/scripts/microi-cli.js +44 -44
- package/scripts/microi-codex-broker.js +2 -0
- package/scripts/microi-skills.meta.json +288 -261
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +104 -101
- package/skills/app-store/SKILL.md +555 -553
- package/skills/app-store/references/platform-row-format.md +7 -0
- package/skills/dos-orm/SKILL.md +2 -0
- package/skills/dos-orm/references/oceanbase-mysql.md +8 -0
- package/skills/message-notification/SKILL.md +2 -0
- package/skills/microi-ai-application/SKILL.md +1 -0
- package/skills/microi-client-frontend/SKILL.md +18 -50
- 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 +18 -1
- package/skills/microi-client-frontend/references/progressive-04-/345/211/215/347/253/257/346/216/245/345/217/243/344/270/216/347/274/223/345/255/230/346/201/242/345/244/215.md +45 -0
- package/skills/microi-codex/SKILL.md +2 -0
- package/skills/microi-deployment/SKILL.md +7 -0
- package/skills/microi-docs-coverage/references/capability-map.md +3 -3
- 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 +15 -0
- package/skills/microi-mobile-app-quality/SKILL.md +2 -0
- package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +2 -1
- package/skills/microi-system-delivery/SKILL.md +8 -1
- package/skills/microi-system-delivery/references/delivery-pitfalls.md +19 -0
- package/skills/microi-ui/SKILL.md +7 -4
- package/skills/microi-uniapp-frontend/SKILL.md +10 -1
- package/skills/microi.v8.js +17 -3
- package/skills/module-engine/SKILL.md +7 -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/playwright-e2e/SKILL.md +11 -3
- package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +4 -4
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +2 -2
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +2 -2
- package/skills/ui-design/SKILL.md +19 -5
- package/skills/ui-design/assets/pattern-showcase/app.js +57 -0
- package/skills/ui-design/assets/pattern-showcase/index.html +35 -4
- package/skills/ui-design/assets/pattern-showcase/scenario-state.js +34 -0
- package/skills/ui-design/assets/pattern-showcase/styles.css +115 -0
- package/skills/ui-design/references/data-workspace-density.md +8 -0
- package/skills/ui-design/references/design-pattern-library.md +50 -1
- package/skills/ui-design/references/mobile-product-language.md +93 -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/uniapp-mall-assets/SKILL.md +1 -0
- package/skills/v8-crud-api/SKILL.md +2 -1
- package/skills/v8-file-upload/SKILL.md +2 -2
- package/skills/v8-frontend-events/SKILL.md +2 -1
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +21 -1
- package/skills/v8-menu-buttons/SKILL.md +2 -0
- package/skills/v8-table-event/SKILL.md +2 -1
- package/skills/vision-engine/SKILL.md +284 -280
- package/skills/vision-engine/references/architecture-and-acceptance.md +14 -0
- package/skills/vision-engine/references/realtime-cpu-profiles.md +73 -0
- package/skills/vision-engine/references/video-timeline.md +176 -0
- package/skills/workspace-conventions/SKILL.md +3 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# 历史平台表行格式与覆盖安装
|
|
2
|
+
|
|
3
|
+
`Managed` 资源按授权应用包覆盖,`CreateIfMissing`、业务数据和租户扩展按原合同保留;“强制覆盖”不等于删除客户数据或绕过平台兼容版本、权限、哈希与资源所有权校验。
|
|
4
|
+
|
|
5
|
+
MySQL 的 `COMPACT`/`REDUNDANT` 会把 TEXT 前缀内联,旧备份即使恢复到新 MySQL 仍可在菜单 INSERT 时触发 1118 / 8126 字节行限制。后端启动与独立导入器在添加列、写菜单之前检查固定平台表的实际 ENGINE/ROW_FORMAT,仅对真实 InnoDB 旧格式执行 `ALTER TABLE ... ROW_FORMAT=DYNAMIC`。不得重写客户列、删索引、关闭严格模式或吞掉 ALTER 错误。
|
|
6
|
+
|
|
7
|
+
后台按表复用前置检查点并强回读,现代格式不写 DDL,ValidateOnly 保持只读;新动态表显式使用 DYNAMIC。回归须在已授权现有 MySQL 上重现旧行格式的实际 INSERT 失败,再证明原数据、索引、默认值、中文/Emoji 和重复覆盖均保持正确;不能用字符串断言或当前空库安装一次代替旧库回归。
|
package/skills/dos-orm/SKILL.md
CHANGED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
# OceanBase MySQL 兼容接入
|
|
2
|
+
|
|
3
|
+
- 使用 `OceanBase`、`OceanBase-MySql` 或 `OceanBaseMySql` 配置别名;Dos.ORM 复用参数化 MySQL 方言和 MySql.Data 驱动,平台运行时名称归一为 `MySql`。不支持用这些入口连接 Oracle 兼容模式。
|
|
4
|
+
- SQL 用户通常为 `user@tenant`,SQL 默认端口 `2881`,外部端口以实际编排为准。测试优先绑定回环地址并用已有授权的 SSH 隧道,不为连接测试公开数据库端口。
|
|
5
|
+
- `MySql.Data.ServerVersion` 可能去掉 OceanBase 后缀;真实身份由 `SELECT VERSION()` 读取并按端点短时缓存。每次打开及池复用时恢复驱动一致的 client/connection 字符集(默认 utf8mb4,显式配置优先),防止连接池重认证将会话重置为 latin1 后中文参数乱码;保留连接重置,不修改全局参数。会话 `ob_query_timeout` 继承连接串命令超时,导入器另同步事务预算。
|
|
6
|
+
- 使用原生 `DatabaseSeedImporter.ImportMySql57` 还原同一 SHA 的官网 SaaS 空库。逐表核对列、索引、完整行数和数据摘要,再验证真实 DDL、NULL/Unicode/日期/小数、参数化、事务、BulkInsert、Upsert、分页及平台 API;只有登录或 SELECT 1 不算全量兼容验收。
|
|
7
|
+
- 流式 SQL 分句必须保留字符串内部的 CRLF、CR、LF,不能用 `ReadLine()` 后统一补 LF;V8/JSON/文件正文与哈希都属于还原验收。仅行数一致不能证明内容完整。
|
|
8
|
+
- 复用现有服务。用户明确要求远端 OceanBase 安装时才建立对应编排及独立验收库;默认平台发布不追加此专项、不创建本地测试容器、不触及客户数据库。
|
|
@@ -92,6 +92,8 @@ return V8.ApiEngine.Run('msg_event', {
|
|
|
92
92
|
|
|
93
93
|
### 4. 前端通知中心
|
|
94
94
|
|
|
95
|
+
框架通知中心的数量统一放在五个页签,不再增加重复统计卡片。“安装/更新全部平台应用”作为公共工具栏主操作跨页签可见,继续核验管理员权限、排除官方发布租户并防重复提交;不增加“去应用商城”按钮。弹层、徽标、错误详情和滚动区使用宿主主题变量,核对明暗色、非默认主题色及窄屏。
|
|
96
|
+
|
|
95
97
|
前端 V8 使用 `V8.Notification.List` 获取当前登录用户的权威快照,使用 `MarkRead` 标记本人通知。SignalR 固定事件 `ReceivePlatformNotification` 只用于低延迟刷新:客户端按 `Id/EventId` 去重,收到后仍以列表接口回读为准。
|
|
96
98
|
|
|
97
99
|
```js
|
|
@@ -58,6 +58,7 @@ UniApp 使用 Vue 3 + TypeScript 的官方 Vite 工具链,并同时遵守 `mic
|
|
|
58
58
|
- SFC 模板承担真实 DOM 结构;事件使用 Vue 绑定,状态使用 `ref/reactive/computed`,副作用在组合函数的生命周期内注册并清理。
|
|
59
59
|
- 组件以业务语义命名,如 `RoomLobby`、`GameTable`、`AudioMixer`、`SettlementDialog`,不要按颜色或位置命名。
|
|
60
60
|
- 长连接、轮询、音频上下文、动画帧、观察器和全局事件必须在卸载时释放;页面隐藏时暂停非必要工作。
|
|
61
|
+
- 首次数据读取失败后,后续有效轮询必须能启动尚未创建的场景或播放器,不能只对可空实例调用更新。初始化使用单个在途Promise与存活/实例保护,卸载后的迟到成功不得复活页面;同时覆盖首次失败后恢复、并发启动只创建一个实例及卸载时回填的行为回归。加载失败保持明确错误与原数据,不通过延长全局超时或隐藏失败取得通过。
|
|
61
62
|
- 响应式布局至少覆盖 1440px 桌面和 390px 移动视口;使用安全区、44px 触控目标、键盘焦点和 `prefers-reduced-motion`。
|
|
62
63
|
- 音频应用必须区分背景音乐、人声和效果音,分别调节、静音和持久化;浏览器首次用户手势前不得强制播放。
|
|
63
64
|
- 不使用原生 `alert/confirm/prompt`;使用宿主反馈或可访问的 MCI 弹层。
|
|
@@ -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=b87a61e03738e2f510e4036fb2d13750b2af873b37aa307def6f44894fa48213 -->
|
|
66
66
|
## 2. 表单引擎三层结构
|
|
67
67
|
|
|
68
68
|
### 模块级跨端视图
|
|
@@ -144,7 +144,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
144
144
|
|
|
145
145
|
### 前端 V8 上下文不是固定 DTO
|
|
146
146
|
|
|
147
|
-
原生 `FormSet` 的异步上下文绑定、加载代次与回归要求见 [运行时规则](references/progressive-02-8-运行时高频坑复盘.md#原生-formset-的异步上下文绑定)。
|
|
147
|
+
原生 `FormSet` 的异步上下文绑定、加载代次与回归要求见 [运行时规则](references/progressive-02-8-运行时高频坑复盘.md#原生-formset-的异步上下文绑定)。Select 在子表行或 V8 `FormSet` 后只显示保存 Id 时,先查 [已选值显示补查](references/progressive-02-8-运行时高频坑复盘.md#select-动态赋值与子表回显),不能把 Id 改存 Label。替换原生详情使用模块 `sys_menu.DetailPageV8`;`InFormV8` 是已打开表单的初始化,不是详情打开前拦截点。
|
|
148
148
|
|
|
149
149
|
`DiyCommon.SetV8DefaultValue()` 只创建基础能力,`diy-table.vue`、`diy-form.vue`、`diy-form-full.vue` 和各 mixin 会按事件再挂载动态属性。新增 API 或修正文档时必须同时核对这些入口,不能只看一个 `V8` 对象字面量。
|
|
150
150
|
|
|
@@ -175,12 +175,23 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
175
175
|
|
|
176
176
|
### 用户级界面偏好(强制)
|
|
177
177
|
|
|
178
|
+
- 启动屏 `#microi_loading` 是独立不透明遮挡层,使用 `--mci-startup-surface`,不能继承玻璃画布的透明 `--mci-bg-base`。进度未到100%、到100%但业务仍等待、明确失败时都不能透出登录或壁纸;只有真实租户、首路由与当前场景壁纸选择/预载完成后发送 `microi:app-ready`,先显示完整100%帧再退出。保留等待文案、失败原因和重试,不把这条启动边界扩散为业务骨架不透明。
|
|
179
|
+
- 壁纸统一复用 `utils/wallpaper-runtime.js`。登录的 `sys_config.LoginBgImgRandom` 开启时,历史 `LoginWallpaper` 不能锁死刷新随机;桌面按个人 `RandomDesktopBg` 明确0/1优先,`null/undefined/空字符串` 才继承 `sys_config.DesktopBgImgRandom`,固定图片字段与随机开关分别解析。同一document、API/租户/场景/账号/策略共用目录请求、一次随机选择及预载Promise,玻璃与WebOS不能各自重抽;刷新重新选择,手选可覆盖本document,不把临时随机结果写回个人偏好。账号/租户变化后的迟到结果失效,图片/目录失败有界回退。
|
|
180
|
+
- `login-branding.js` 只将无凭据、特殊端口、query及hash的 `https://static.itdos.com` 公开图片映射至同路径 `https://file.microi.net`;文件对象和JSON先解包再解析。不能全局替换任意客户HTTP地址、签名URL或相似域名,也不能把目录读取成功当作图片已可加载。
|
|
181
|
+
- `ImgUpload` 的主上传卡片就是原生文件选择入口,不再复制一个独立“选择图片”按钮;点击、Enter、Space保留原生filechooser,多选仍按字段配置。移动布局主卡片同样可选图库,拍照保留单独入口与后置摄像头capture;裁剪开关不得冒泡触发选图。隐藏/查看模式不残留可操作文件input,数量、公私桶、权限、裁剪和上传前后事件不变。
|
|
182
|
+
- WebOS 新窗口的初始高度为已扣除工具栏/Dock后的可用桌面高度88%,再走原边界限制;不是持续强制高度,也不能重置已打开窗口的拖动、缩放或最大化。Toolbar图标、时间、搜索/主题和账号共用配对的 `--webos-toolbar-text`,浅色玻璃深字、深色玻璃浅字;去除影响辨识的文字阴影和hover降透明,经典界面与非玻璃样式保持独立。
|
|
183
|
+
- 回归检查真实启动CSS/脚本与背景组件、随机/固定/继承/预载/迟到响应,运行 `startup-wallpaper.browser.mjs`、`wallpaper-runtime.spec.mjs` 和既有主题/登录兼容测试;上传用真实SFC与ElUpload的鼠标/键盘filechooser,WebOS覆盖两种桌面风格、亮暗玻璃及初始/还原/最大化。窄屏相机模拟不是原生硬件验收,源码测试、实际页面与渠道发布分别报告。
|
|
184
|
+
|
|
185
|
+
- 界面材质是独立维度:`ThemeMaterial=Solid/Glass/Frosted/Liquid` 分别为实色、普通玻璃、磨砂玻璃、液态玻璃,不增加第三种 `ThemeMode` 或把玻璃写成 `ThemeColor`。全局保存 `sys_config.ThemeMaterial`,个人保存同名 `sys_user` 字段;个人 `System`/空值/null 继承,系统缺省/未知为 Solid。主题设置和个人中心共用 `platform-user-update-preferences` 当前用户白名单及保存队列;登录前纯外观缓存可含材质但不含身份/权限/凭据,匿名选择只预览。恢复默认写 System,不能固化当前全局材质。
|
|
186
|
+
- 玻璃运行标识为根 `data-mci-material=solid/glass/frosted/liquid`,`theme-material.js` 统一解析,`theme-material.scss` 消费语义表面和前景;模糊限于壳层、导航、面板及弹层,不能每个表格单元格独立滤镜或持续液体变形。背景复用当前租户已校验壁纸目录,个人只保存目录Id;API/租户切换使旧目录响应失效。无 backdrop-filter、`prefers-reduced-transparency` 或 forced-colors 时降级实色;关闭渐变/阴影仍有效,菜单文字、表格内容、输入及焦点保持可读。iframe 通过既有主题快照接收材质,不读取父DOM或自行重建个人偏好。
|
|
187
|
+
- 修改全框架玻璃、浮层或加载态前,必须读取 [玻璃材质采样与清晰度](references/progressive-02-8-运行时高频坑复盘.md#玻璃材质采样与清晰度):沿用统一采样所有者、轻内层控件与清晰前景,保留固定列、iframe 隔离、加载草稿及迟到响应边界,并完成真实背景与嵌套浮层验收。
|
|
188
|
+
- 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
189
|
- 菜单前景独立于按钮前景与页面显示模式。主题设置在自定义颜色旁提供 `MenuTextColor=Auto/Light/Dark`(跟随主题/浅色/深色),默认按实际菜单背景选择。普通、选中、悬停、顶部与侧边弹出菜单必须使用同一前景契约;模式切换和主题重应用保留显式选择。沿当前账号偏好队列保存到 `sys_user.MenuTextColor`,个人中心同步回显;空值继承 `sys_config.MenuTextColor`,全局缺省 Auto。重置清空个人值。旧租户仅使用身份隔离的设备回退,禁止新增全局 localStorage 偏好。密度仅保留现有“小/标准/大”滑杆,不再增加同步的预设按钮组。修改时执行 `menu-text-color.spec.mjs`、偏好接口白名单与真实浏览器刷新恢复回归。
|
|
179
190
|
|
|
180
191
|
右上角主题设置的边角风格默认圆角;已安装 `sys_user.CornerStyle` 时从账号偏好恢复,旧租户才使用浏览器本地兼容值。根元素 `data-mci-corner-style` 控制全局角半径,覆盖动态挂载的 Element Plus 弹层。顶栏入口统一使用 40px 触控区域和 20px 图标,AI 入口使用图标组件,不使用图片。模块 `HideTableBanner`、`HideFormBanner` 只在值明确为 `1/true` 时隐藏对应 Banner,并跳过其专属统计请求;未安装开关字段的旧菜单继续显示。
|
|
181
192
|
|
|
182
193
|
- 边角风格先读取当前用户 `CornerStyle`:`round/square` 显式覆盖;空值或 `System` 继承租户 `sys_config.CornerStyle`,租户空值默认为圆角。不得把空个人值提前归一为 `round`,否则会阻断租户直角设置。
|
|
183
|
-
- 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System`
|
|
194
|
+
- 桌面经典布局使用 `NavigationLayout=Side/Top/TopSide`,个人空值或 `System` 继承租户,租户空值为 TopSide;`MenuChildExpandMode` 全局空值为 Right。`TopSide` 将一级放顶部,当前一级的二级及更深菜单复用原侧栏;单个子菜单仍留在侧栏,无可见子菜单时隐藏侧栏并释放内容宽度。侧栏仍支持收起及 `MenuChildExpandMode=System/Down/Right`,收起后的叶菜单使用既有向右弹出面板显示真实名称,保留多级分支、键盘焦点与Escape,不重复叠加Tooltip。顶部导航复用当前权限路由、角标与外链,空间不足收纳到更多菜单;移动端仍采用底部导航。当前路由与一级归属由 `hybrid-navigation.js` 统一投影,禁止修改共享权限树。
|
|
184
195
|
- 侧栏与角色管理组织树共用 `MciResizablePane`:右边缘拖拽、可访问分隔条、方向键/Shift/Home/End 和收起按钮必须同样可用。`sys_user.SidebarWidth/RoleTreeWidth` 为 nullable 整数像素(160–600),`SidebarCollapsed/RoleTreeCollapsed` 为 nullable 0/1;使用当前账号的 Managed 偏好白名单保存。拖拽中仅预览,松开提交,取消或卸载释放指针。视口夹紧保留主内容宽度,不能把夹紧值覆盖长期偏好;窄屏禁拖,旧租户仅用账号/租户/API 隔离的设备回退。侧栏空宽度沿用 `sys_config.MenuWidth` 后回退240px,角色树默认240px。
|
|
185
196
|
- 顶部主导航与工作区 Tabs 是不同层级:`Top/TopSide` 的当前一级使用独立短底线,hover/focus 前景显式跟随可读主题,禁止继承 Element 的低对比品牌色。长弹出菜单使用独立主题表面、无异色顶边和内部滚动,嵌套层仍 Teleport;顶部菜单标题与品牌不显示 title/alt/Tooltip 类提示浮层,保留完整 aria-label 无障碍名称;顶栏整条背景色带须贴合视口或所属壳层左右边界,不能把内部 padding 当成全宽验收,内容区留白独立处理。窄视口“更多”菜单也遵守同一契约。
|
|
186
197
|
- 顶部导航整行(含功能图标和账号姓名)使用主题运行时的 `--sidebar-*` 可读表面与前景;主题面板和业务弹层保留自身语义表面。主题入口为齿轮,界面密度在同一主题面板调整,已安装 `sys_user.UiDensityScale` 时保存当前账号、个人空值继承 `sys_config.UiDensityScale`,旧租户才使用按租户/账号隔离的设备回退;AI 入口使用圆圈内 AI 字母 SVG,不能回退魔法棒或图片。
|
|
@@ -191,8 +202,8 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
191
202
|
- 登录页与登录后共用主题设置组件;登录页使用居中弹层且禁止调用个人保存队列。壁纸使用当前租户目录缩略图,登录后仅保存 `sys_user.LoginWallpaper` 中的目录 Id,不能持久化任意外部 URL;空值恢复默认行为,字段由系统账号及 SaaS 基础包交付。
|
|
192
203
|
- 登录前可展示当前设备最后一次成功登录用户的纯外观缓存,按规范化 API 地址与租户隔离,并按“缓存中的显式外观项 → 当前全局配置 → 平台默认”逐项合并;只在真实登录成功或当前用户偏好确认后更新。缓存白名单不得包含 Token、账号资料、角色和权限;损坏、未知项及跨租户缓存忽略,不新增匿名按账号查询个人设置的接口。登录页预览不改这份已确认缓存;登录成功后以当前用户服务器偏好为准,不能把旧缓存写入另一账号。
|
|
193
204
|
- 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
|
|
194
|
-
- 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距、普通表格 `.cell` 的历史38/40px行高、模块/表单 Banner、表单顶部工具栏与折叠分组标头都必须采用同一密度 token,同步缩放字号、图标、padding
|
|
195
|
-
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor/LoginWallpaper` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
205
|
+
- 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距、普通表格 `.cell` 的历史38/40px行高、模块/表单 Banner、表单顶部工具栏与折叠分组标头都必须采用同一密度 token,同步缩放字号、图标、padding和最小高度。90/95小档桌面顶栏及侧栏/固定头/主内容偏移共用 `--mci-ui-topbar-height:44px`,标准/大档保持50px;表单标题与Banner压缩重复留白,保留保存/更多/搜索并按内容容器自然换行,移动触控目标仍至少44px。多行内容保持自然高度,不能设置固定行高裁切。直角样式需按真实选择器优先级覆盖 `.el-message-box.mci-unified-message-box` 等双class的 important 壳,并验退出确认 Teleport 首帧。表格列宽拖动热区与可见分隔线分开,不能叠加两条边框造成2px视觉;验证拖拽保存仍可用。
|
|
206
|
+
- 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor/LoginWallpaper` 清空、`ThemeMaterial/CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
|
|
196
207
|
- `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留按钮/输入边界、键盘焦点、加载指示与纯图标操作;登录方式图标、说明文字与按钮前景按所在真实表面配对,不能被全局渐变关闭规则改为白底白字。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名阶段只使用已确认的纯外观缓存、当前租户默认或当前匿名预览,不发起个人设置读取/写入。
|
|
197
208
|
- `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
|
|
198
209
|
- 新增全局开关 CSS 必须检查编译后选择器;scoped 中 `:global(html[attr]) .child` 会丢失后代范围,禁止用它隐藏装饰。使用独立非 scoped 且有完整登录/框架作用域的样式,或将完整选择器放进 `:global(...)`;必须断言开启全部开关时根 html、body、框架与弹层仍可见。
|
|
@@ -200,6 +211,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
200
211
|
- 右上角即时切换可以乐观应用并短防抖保存;远端保存失败时保留当前设备效果并明确提示。个人中心和右上角必须调用同一个应用包交付的白名单接口引擎(当前为 `platform-user-update-preferences`),不能分别形成两套字段、枚举或优先级。
|
|
201
212
|
- 导航切入或退出 `TopSide` 会重建顶栏组件;卸载前必须发送尚未保存的偏好,在途请求与后续选择共用按 store、API 地址、租户、账号和登录会话隔离的运行时队列。新顶栏继承失败状态和重试数据,旧响应不能覆盖更新的选择或跨账号合并队列;标准续签保留 `MicroiSessionId` 时也保留最终待保存选择,计算属性显式依赖 Pinia.Token。JWT 解码仅用于本地队列归属,服务端仍通过标准 DiyToken 验证授权;不得将会话凭据写入偏好存储、日志或响应。使用真实 Vue computed 和组件生命周期回归 `theme-select-autosave-lifecycle.spec.mjs` 验证卸载、在途合并、失败重试、续签及账号/租户/会话切换。
|
|
202
213
|
- 主题回归同时执行 `framework-appearance.spec.mjs`、`ui-density-runtime.spec.mjs` 与 `theme-select-autosave-lifecycle.spec.mjs`;真实浏览器默认使用一个常规桌面 CSS 视口(优先用户实际视口,否则 1920×1080),验证系统设置与左菜单在 90/110 两档的尺寸变化、全局/个人继承与恢复、全部顶栏隐藏后账号仍在,以及装饰关闭后的亮暗和焦点可见性。只有用户明确要求或缺陷涉及超宽屏时才追加 4K,不把截图文件像素尺寸当作浏览器 CSS 视口。
|
|
214
|
+
- 个人和全局 `UiDensityScale` 都缺省/空值时使用小档90,显式100继续保持标准,不能为改默认覆盖已有用户/租户值。主题面板的系统设置导航只向已登录 `Level>=9999` 显示,点击时再次检查且不代替系统设置后端鉴权。表头压缩只减少文字/图标保留区,不改列宽或拖动热区;行操作hover不得上移到单元格裁剪边界之外。回归运行 `framework-ui-settings-entry.spec.mjs` 和 `framework-ui-followups.e2e.spec.mjs`,玻璃Loading需同时检查指令、微服务、模块祖先与真实截图透底,Solid搜索要验实际 `.el-select__input` 的成对前景。
|
|
203
215
|
|
|
204
216
|
<!-- /microi-progressive:chunk -->
|
|
205
217
|
<!-- microi-progressive:chunk id=microi-client-frontend-003 sha256=301f766dc1ab1c6b021aa861a76b44844905d432393ab407472f58f00d6283cd -->
|
|
@@ -224,52 +236,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
|
|
|
224
236
|
---
|
|
225
237
|
|
|
226
238
|
<!-- /microi-progressive:chunk -->
|
|
227
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=c122ac25dd00abc7af5751c6db50fe5f9fed29a9979f454ba9a23209d25dbaca -->
|
|
228
|
-
## 7. 验证建议
|
|
229
239
|
|
|
230
|
-
### 本地 ApiBase 与 OsClient 解析(强制)
|
|
231
|
-
|
|
232
|
-
WebOS 直链容器不能只等旧版 `CallbackSysMenuModel` / `CallbackCurrentDiyTableModel`:标准页面可能不再发送这些事件,标题与图标必须回退当前权限路由的 `meta.title/icon`。路由切换时清空旧模型,回调绑定来源路由并拒绝迟到事件;嵌入窗通知、桌面和手机标题共用同一响应式结果。修改时运行 `tests/webos-page-title.spec.mjs`,并验收直链、刷新、前进后退、桌面窗口和经典界面。
|
|
233
|
-
|
|
234
|
-
- 域名发现先于租户确定,固定 `platform-os-client-by-domain` 请求不能自动注入默认或缓存租户,也不能携带旧 Token;显式调用租户仍保持。没有 URL/index.html 租户时,每次冷启动重新发现域名,成功后更新缓存,失败立即停止,不写入 `iTdos` 继续请求配置。配置业务失败不是连接故障,健康检查成功不能触发循环重载;只有确认连接故障后的恢复才重载失败启动页。回归覆盖无缓存、错误缓存、显式租户及失败不重载,使用 `domain-tenant-bootstrap.spec.mjs`。
|
|
235
|
-
- 登录回跳使用 Vue Router 解析完整深链接后合并 query/hash;对象式 `push({path, query})` 的 query 会覆盖 path 中原有参数,不能直接传空对象导致记录 Id 丢失。使用 `login-deep-link-query.spec.mjs` 验证编号、编码参数、重复参数和锚点。
|
|
236
|
-
|
|
237
|
-
- `app.use(router)` 会立即触发首个路由守卫。守卫中的 SSO、认证、菜单请求必须等待 `initApp()` 完成真实租户和系统配置初始化;初始化失败时取消导航并保留启动错误界面。释放初始化等待必须早于 `router.isReady()`,避免彼此等待;禁止将缓存尚未建立时的 `GetOsClient()` 默认值 `iTdos` 发给客户服务器。
|
|
238
|
-
|
|
239
|
-
- 身份和菜单只读初始化的短暂失败最多读取三次,间隔 300/1000ms;认证失效立即回登录页并保留原深链接,HTTP 403 和已耗尽的菜单依赖重试不得继续重试。重试期间退出登录应停止后续读取,不得用清空 Token、伪造角色或放行保护路由掩盖错误。持续失败用 `next(error)` 保留身份/菜单阶段和原始原因,禁止用 `next(false)` 把它替换为 `Navigation aborted`;启动界面不能据此断言后端断网。当前用户请求的传输失败必须 reject,不能留下永久 pending 的 Promise。修改这条链路时运行 `route-bootstrap-recovery.spec.mjs`,并用真实路由验证健康登录、短暂失败恢复、持续失败提示和过期会话跳转。
|
|
240
|
-
|
|
241
|
-
- `ApiServiceUnavailable` 确认连接故障后,每轮探测结束 5 秒后继续请求固定匿名健康接口;单次请求超时 5 秒,自动与手动检测共用在途请求。后端返回有效健康正文后停止轮询,启动失败的页面只重载一次原 URL,已经就绪的业务页面原地撤掉异常层并保留输入,禁止重放失败的业务写入。旧版健康接口也必须返回有效的 Healthy 正文,不能把反向代理 HTML/404 当作恢复。安全拦截继续按后端解除时间检查,不用连接故障轮询缩短封禁。定向回归使用 `api-service-recovery.spec.mjs` 与 `api-service-status.spec.mjs`,浏览器必须验证断连到自动恢复全过程。
|
|
242
|
-
|
|
243
|
-
- `src/config.json.ApiBaseDev` 是本地默认 API;URL 中 `#` 之前的 `ApiBase`、`OsClient` 必须同时
|
|
244
|
-
高于 `index.html`、config、Pinia 与 localStorage。解析统一走
|
|
245
|
-
`src/utils/runtime-endpoint-query.js`,禁止在新入口另写正则形成不同优先级。
|
|
246
|
-
- URL 只允许有效的 HTTP(S) ApiBase 和安全 OsClient。页面初始化后通过不含 Token 的
|
|
247
|
-
`window.__MICROI_RUNTIME_ENDPOINT__` 暴露实际值,便于 AI/自动化确认没有误连配置文件中的服务器。
|
|
248
|
-
- 页面已解析的租户必须进入真实 HTTP 请求。`DiyCommon.UseAxios/UseAxiosAll` 与共享 axios 请求层统一通过 `request-tenant-context.js` 补当前 API 的 `osclient` 请求头;保留调用者显式的路径、Query、参数或 Header 租户,不给其它服务器或相邻 API 子路径自动添加页面租户。JSON 正文在动态路由阶段可能尚未读取,不能只依赖正文或旧 Token 选择租户。验收必须增加同源旧 Token 指向其它/不存在租户的真实后端场景:`platform-current-user` 应走页面租户并返回登录失效,保留原深链接进入登录页,不得显示“无法确认接口配置”或让 SSO 发现返回错误租户的 404;定向回归为 `request-tenant-context.spec.mjs`。
|
|
249
|
-
- 首次身份读取的业务/传输失败交给路由守卫处理,`getInfo` 不调用带全局通知副作用的 `DiyCommon.Result`,同时抑制请求层通知和抢先登录跳转;`App.PageInit` 等待首次导航成功后再启动续签/用户刷新,导航失败时结束。既要验证干净会话,也要验证旧登录缓存和失败后重复刷新,不能以隔离浏览器成功代替用户当前会话验收。
|
|
250
|
-
- 同源浏览器窗口仍共享 Token、CurrentUser 等持久化状态。不同 `ApiBase + OsClient` 并行测试必须
|
|
251
|
-
使用独立 browser context/profile;URL 最高优先级不等于登录态隔离。
|
|
252
|
-
- 修改该链路时运行 `node --test tests/runtime-endpoint-query.spec.mjs`,再使用两个独立
|
|
253
|
-
`browser.newContext()` 验证两组运行目标互不串号。
|
|
254
|
-
|
|
255
|
-
### 菜单微服务缓存与恢复(强制)
|
|
256
|
-
|
|
257
|
-
- 首次挂载分开检查资源下载与渲染:下载最多 60 秒,`beforemount` 资源齐备后才开始原有 12 秒渲染期限;不得在资源正常下载时提前销毁沙箱。成功仍要求真实可见 DOM,保留一次自愈与旧实例保护。回归覆盖超过 12 秒的真实下载、下载停滞、渲染停滞和陈旧实例事件。
|
|
258
|
-
|
|
259
|
-
- 动态菜单宿主的 Vue 路由保持 `keepAlive:false`,由 `<micro-app keep-alive>` 独占运行时状态;契约固定为 `runtime-keep-alive`,禁止 Vue `KeepAlive` 和 micro-app 双层缓存。
|
|
260
|
-
- 每个顶部 Tab 按完整路由生成稳定实例身份,最多保留 5 个隐藏实例并按 LRU 淘汰。关闭 Tab、退出登录、Token/角色变化以及版本或入口变化时必须精确销毁对应运行时。
|
|
261
|
-
- 恢复时强制同步宿主上下文并检查真实可见 DOM;子应用监听 `appstate-change`,在 `afterhidden` 幂等暂停轮询、WebSocket 和观察器,在 `aftershow` 幂等恢复并重新测量布局,同时保留用户输入、筛选、滚动和内部路由。
|
|
262
|
-
- 修改宿主、TagsView 或权限路由时,必须同时读取 [Vue3 前端微服务宿主规则](references/progressive-03-vue3-前端微服务宿主规则.md) 并运行微服务缓存契约测试。
|
|
263
|
-
|
|
264
|
-
- 修改 Vue/JS 后先跑 VS Code Problems 或 `get_errors`。
|
|
265
|
-
- 宿主按钮重置只作用于 `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
|
-
- 影响核心前端时跑 `Microi.Client` 的 `npm run build`。
|
|
267
|
-
- 如果改了工作流、表单保存、按钮 V8,建议用实际 `sys_menu` 配置测试:
|
|
268
|
-
- `FormBtns` 是否出现在表单右上角/FAB。
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
<!-- /microi-progressive:chunk -->
|
|
273
240
|
## 详细参考路由(渐进披露)
|
|
274
241
|
|
|
275
242
|
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
@@ -277,4 +244,5 @@ WebOS 直链容器不能只等旧版 `CallbackSysMenuModel` / `CallbackCurrentDi
|
|
|
277
244
|
- [references/progressive-01-3-动态按钮系统.md](references/progressive-01-3-动态按钮系统.md):3. 动态按钮系统;5. 路由与打开方式;6. 修改前必查清单
|
|
278
245
|
- [references/progressive-02-8-运行时高频坑复盘.md](references/progressive-02-8-运行时高频坑复盘.md):8. 运行时高频坑复盘;7.1 登录验证码与 Sys_Config;Microi 前端 SDK 约束
|
|
279
246
|
- [references/progressive-03-vue3-前端微服务宿主规则.md](references/progressive-03-vue3-前端微服务宿主规则.md):Vue3 前端微服务宿主规则;在线 AI 应用与微服务页面协作;浏览器访问密钥路由
|
|
247
|
+
- [references/progressive-04-前端接口与缓存恢复.md](references/progressive-04-前端接口与缓存恢复.md):运行目标、菜单微服务缓存与恢复
|
|
280
248
|
<!-- microi-progressive:end -->
|
|
@@ -2,7 +2,7 @@
|
|
|
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=d0192d6d272dafa342f51af6b30e6e6d2b5d916898b94116fc62d1bcd5a03f87 -->
|
|
6
6
|
## 8. 运行时高频坑复盘
|
|
7
7
|
|
|
8
8
|
### 原生 FormSet 的异步上下文绑定
|
|
@@ -13,6 +13,15 @@
|
|
|
13
13
|
`form-v8-context.spec.mjs`,验证切记录、同记录重载、卸载和正常事件链;直接写 `V8.Form`
|
|
14
14
|
及其它异步副作用仍需自己的当前性检查。
|
|
15
15
|
|
|
16
|
+
### Select 动态赋值与子表回显
|
|
17
|
+
|
|
18
|
+
- `diy-select.vue` 在挂载、`modelValue/ModelProps` 变化后的 `nextTick`、远程候选完成或 `field.Data` 整体替换后,复用 `DiyCommon.ResolveFieldsSelectedData` 补齐缺失标签。候选分页与已选值补查独立,不能扫描全部页或把第一页当作全部选项。
|
|
19
|
+
- 单/多选、Id/Label、Text/Json 及数组按既有保存配置解释;`0/false` 是有效键,清空保持清空。普通 Data/KeyValue 和直接存 Label 继续本地处理。SQL 使用服务端受控解析;Api/ApiEngine/DataSource 只有 `Config.SelectedValueLookup===true` 且返回 `DataAppend.SelectedValuesResolved===true` 才接受补查结果,否则保留原 Id。
|
|
20
|
+
- 每个控件独立构建字段补查投影,不能让多行共用字段对象的请求彼此作废;真实 Label 可替换同键的临时 Id 占位并刷新 Element 显示缓存。此路径只更新显示选项,不 emit `ModelChange`、不触发字段 V8、不写 `V8.Form` 或改变提交格式,更不是其它业务字段的关联回填。
|
|
21
|
+
- 请求携带当前表单、菜单和子表授权上下文;API、租户、会话、表单引用、记录、选择代次、配置变化或组件卸载后,丢弃迟到结果。无权限、已删除、契约未确认或失败时保留原保存值,不扩大候选范围。
|
|
22
|
+
- 实例短缓存命中仍应用已选 Label,只是不重复 HTTP;比较选项列表以避免 watch 反馈循环,不把独立投影存进共享字段的长期缓存。授权/菜单就绪后重建上下文使旧负缓存失效;补查失败捕获后释放实例缓存,允许后续重试。
|
|
23
|
+
- 修改须验证单/多选×Text/Json×本地/远程搜索×Sql/Api/ApiEngine/DataSource,补充多行共享元数据、清空、数值键、Label/Data/KeyValue、迟到及无业务回写断言。真实子表和 V8 动态赋值应另做页面验收。
|
|
24
|
+
|
|
16
25
|
### 前端 V8.Http 与后端同构契约
|
|
17
26
|
|
|
18
27
|
`Microi.Client` 的前端 V8 运行时在 `src/utils/diy.common.js` 挂载 `V8.Http`,实现位于 `src/utils/v8-http.js`。修改 HTTP 能力时必须保持:
|
|
@@ -154,6 +163,14 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
154
163
|
- 保存/提交/登录验证等动作保留按钮 Loading,可信百分比保留真实进度;其余 spinner、转圈图标和“加载中”文案不得充当内容加载态。
|
|
155
164
|
- 修改后运行静态门禁,确认源码不存在内容型 `v-loading`、`ElLoading.service`、硬编码黑色 Loading mask 或加载期空态;再用真实浏览器验证菜单、首页、表格、表单详情在亮色、暗色、自定义主题和移动端下的骨架几何、对比度、`aria-busy`、reduced-motion 及请求失败收口。
|
|
156
165
|
|
|
166
|
+
### 玻璃材质采样与清晰度
|
|
167
|
+
|
|
168
|
+
- 全框架玻璃沿统一材质色板和语义令牌覆盖表格、表单、控件、弹层及精确 AppKey 微应用。背景保留壁纸原有色彩与明暗结构,不使用全局去色滤镜或厚重白/黑 veil;一个独立外壳只采样一次背景,内层画布透明,按钮与控件用轻填充,不对每个字段、Tag 或表格单元格叠独立滤镜。`theme-material-components.scss` 承接表单、Banner、折叠/Tab、Element 控件与官方平台应用投影;WebOS 窗口、工具栏、Dock、右键菜单与加载态也复用材质语义令牌,不另存偏好。`diy-code-editor` 为明确例外:自身、版本预览/对比及 AI 内部控件使用固定原生 `vs-dark` 暗色域和独立语义变量,不能把 Monaco 画布改透明或跟随品牌/明暗/材质;保留共享 loader 与原生 token,模型 Teleport 下拉仅用自有 class 隔离,不污染其它编辑器。
|
|
169
|
+
- 经典桌面显示 TagsView 时,由完整 `.tags-view-container-microi` 独占页签与路由内容的玻璃采样;仅玻璃模式把 `.classic-workspace.with-tags` 的 `padding-inline` 归零,将原有 10px 留白放进直接页签容器,内部 strip 与 route host 均不再铺背景或 blur,四边不得露出原始壁纸边带。手机和无 TagsView 的 AppMain 仍保留自己的材质所有者。浅色采用亮珍珠局部表面,让导航同亮度、卡片轻填充并保留层次,不把整屏等量染色;深色沿用独立色板。
|
|
170
|
+
- Dialog、Drawer、列设置、行操作与下拉浮层使用独立语义表面,不把页面薄底或固定透明度数字直接套到任意文字背景。必须让背景色块和纹理透射、后方文字被充分处理,嵌套浮层也不出现正文重叠;不能为修某个浮层而加厚整页底。背景、局部填充、边缘和正文分层,正文不降低容器 opacity,不施加文字 filter/mix-blend;静态边用细暗 `--mci-material-border`,有限方向反光不变成白圈或光晕,focus-visible 独立清晰。小范围主操作使用成对 primary-bg/hover/text 保留主次;Canvas/业务图片/显式背景图保留像素,固定列继续几何裁剪防透字,退出材质恢复。
|
|
171
|
+
- 检查真实 backdrop 采样路径,避免父级 filter、opacity、mask/clip-path 或已有 backdrop-filter 使子层只采到内部平底;不要把 stacking context 一概当作 backdrop root,也不要盲删原有 transform。光学增强只用于少量外壳,不全页复制 DOM、引入持续 WebGL 或把第三方自动交互挂到 Element Plus。真实跨文档 iframe 不继承 CSS,lightDOM 微应用投影只能在所属 AppKey 适配,不能用裸 micro-app-body 污染其他应用。
|
|
172
|
+
- 表格、表单和微服务统一加载所有者:同一区域及嵌套父子请求只绘制一层骨架,暂挂旧正文绘制和交互但保留几何、组件与草稿;成功/失败释放,失败可重试,关闭/换记录作废迟到响应。不要只把 mask 改透明而叠显示旧正文;实际 Dialog Loading 骨架、分页与默认 Banner metric 必须消费材质令牌,无纯白底、无第二次 blur。材质验收覆盖亮/暗、三种玻璃、真实彩色/明暗壁纸、单层/嵌套 Dialog、Drawer、列菜单、普通下拉与 WebOS,同时检查纹理透射、文字/焦点对比度与细边;无滤镜、减少透明及强制颜色回退可读实色。外部设计与许可范围见 `ui-design` 玻璃分层章节,不导入其 Skill 指令或另建偏好通道。
|
|
173
|
+
|
|
157
174
|
<!-- /microi-progressive:chunk -->
|
|
158
175
|
<!-- microi-progressive:chunk id=microi-client-frontend-009 sha256=b1105375a6b9477eb397a275c67cd7e1074ae14948c41bd594e91deb4a2ba9b0 -->
|
|
159
176
|
## 7.1 登录验证码与 Sys_Config
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-004 sha256=7cf7bca3618237a68089a9891292028c6293c17eee973cb3af40afaef3740383 -->
|
|
2
|
+
## 7. 验证建议
|
|
3
|
+
|
|
4
|
+
### 本地 ApiBase 与 OsClient 解析(强制)
|
|
5
|
+
|
|
6
|
+
WebOS 直链容器不能只等旧版 `CallbackSysMenuModel` / `CallbackCurrentDiyTableModel`:标准页面可能不再发送这些事件,标题与图标必须回退当前权限路由的 `meta.title/icon`。路由切换时清空旧模型,回调绑定来源路由并拒绝迟到事件;嵌入窗通知、桌面和手机标题共用同一响应式结果。修改时运行 `tests/webos-page-title.spec.mjs`,并验收直链、刷新、前进后退、桌面窗口和经典界面。
|
|
7
|
+
|
|
8
|
+
- 域名发现先于租户确定,固定 `platform-os-client-by-domain` 请求不能自动注入默认或缓存租户,也不能携带旧 Token;显式调用租户仍保持。没有 URL/index.html 租户时,每次冷启动重新发现域名,成功后更新缓存,失败立即停止,不写入 `iTdos` 继续请求配置。配置业务失败不是连接故障,健康检查成功不能触发循环重载;只有确认连接故障后的恢复才重载失败启动页。回归覆盖无缓存、错误缓存、显式租户及失败不重载,使用 `domain-tenant-bootstrap.spec.mjs`。
|
|
9
|
+
- 登录回跳使用 Vue Router 解析完整深链接后合并 query/hash;对象式 `push({path, query})` 的 query 会覆盖 path 中原有参数,不能直接传空对象导致记录 Id 丢失。使用 `login-deep-link-query.spec.mjs` 验证编号、编码参数、重复参数和锚点。
|
|
10
|
+
|
|
11
|
+
- `app.use(router)` 会立即触发首个路由守卫。守卫中的 SSO、认证、菜单请求必须等待 `initApp()` 完成真实租户和系统配置初始化;初始化失败时取消导航并保留启动错误界面。释放初始化等待必须早于 `router.isReady()`,避免彼此等待;禁止将缓存尚未建立时的 `GetOsClient()` 默认值 `iTdos` 发给客户服务器。
|
|
12
|
+
|
|
13
|
+
- 身份和菜单只读初始化的短暂失败最多读取三次,间隔 300/1000ms;认证失效立即回登录页并保留原深链接,HTTP 403 和已耗尽的菜单依赖重试不得继续重试。重试期间退出登录应停止后续读取,不得用清空 Token、伪造角色或放行保护路由掩盖错误。持续失败用 `next(error)` 保留身份/菜单阶段和原始原因,禁止用 `next(false)` 把它替换为 `Navigation aborted`;启动界面不能据此断言后端断网。当前用户请求的传输失败必须 reject,不能留下永久 pending 的 Promise。修改这条链路时运行 `route-bootstrap-recovery.spec.mjs`,并用真实路由验证健康登录、短暂失败恢复、持续失败提示和过期会话跳转。
|
|
14
|
+
|
|
15
|
+
- `ApiServiceUnavailable` 确认连接故障后,每轮探测结束 5 秒后继续请求固定匿名健康接口;单次请求超时 5 秒,自动与手动检测共用在途请求。后端返回有效健康正文后停止轮询,启动失败的页面只重载一次原 URL,已经就绪的业务页面原地撤掉异常层并保留输入,禁止重放失败的业务写入。旧版健康接口也必须返回有效的 Healthy 正文,不能把反向代理 HTML/404 当作恢复。安全拦截继续按后端解除时间检查,不用连接故障轮询缩短封禁。定向回归使用 `api-service-recovery.spec.mjs` 与 `api-service-status.spec.mjs`,浏览器必须验证断连到自动恢复全过程。
|
|
16
|
+
|
|
17
|
+
- `src/config.json.ApiBaseDev` 是本地默认 API;URL 中 `#` 之前的 `ApiBase`、`OsClient` 必须同时
|
|
18
|
+
高于 `index.html`、config、Pinia 与 localStorage。解析统一走
|
|
19
|
+
`src/utils/runtime-endpoint-query.js`,禁止在新入口另写正则形成不同优先级。
|
|
20
|
+
- URL 只允许有效的 HTTP(S) ApiBase 和安全 OsClient。页面初始化后通过不含 Token 的
|
|
21
|
+
`window.__MICROI_RUNTIME_ENDPOINT__` 暴露实际值,便于 AI/自动化确认没有误连配置文件中的服务器。
|
|
22
|
+
- 页面已解析的租户必须进入真实 HTTP 请求。`DiyCommon.UseAxios/UseAxiosAll` 与共享 axios 请求层统一通过 `request-tenant-context.js` 补当前 API 的 `osclient` 请求头;保留调用者显式的路径、Query、参数或 Header 租户,不给其它服务器或相邻 API 子路径自动添加页面租户。JSON 正文在动态路由阶段可能尚未读取,不能只依赖正文或旧 Token 选择租户。验收必须增加同源旧 Token 指向其它/不存在租户的真实后端场景:`platform-current-user` 应走页面租户并返回登录失效,保留原深链接进入登录页,不得显示“无法确认接口配置”或让 SSO 发现返回错误租户的 404;定向回归为 `request-tenant-context.spec.mjs`。
|
|
23
|
+
- 首次身份读取的业务/传输失败交给路由守卫处理,`getInfo` 不调用带全局通知副作用的 `DiyCommon.Result`,同时抑制请求层通知和抢先登录跳转;`App.PageInit` 等待首次导航成功后再启动续签/用户刷新,导航失败时结束。既要验证干净会话,也要验证旧登录缓存和失败后重复刷新,不能以隔离浏览器成功代替用户当前会话验收。
|
|
24
|
+
- 同源浏览器窗口仍共享 Token、CurrentUser 等持久化状态。不同 `ApiBase + OsClient` 并行测试必须
|
|
25
|
+
使用独立 browser context/profile;URL 最高优先级不等于登录态隔离。
|
|
26
|
+
- 修改该链路时运行 `node --test tests/runtime-endpoint-query.spec.mjs`,再使用两个独立
|
|
27
|
+
`browser.newContext()` 验证两组运行目标互不串号。
|
|
28
|
+
|
|
29
|
+
### 菜单微服务缓存与恢复(强制)
|
|
30
|
+
|
|
31
|
+
- 首次挂载分开检查资源下载与渲染:下载最多 60 秒,`beforemount` 资源齐备后才开始原有 12 秒渲染期限;不得在资源正常下载时提前销毁沙箱。成功仍要求真实可见 DOM,保留一次自愈与旧实例保护。回归覆盖超过 12 秒的真实下载、下载停滞、渲染停滞和陈旧实例事件。
|
|
32
|
+
- 动态菜单宿主的 Vue 路由保持 `keepAlive:false`,由 `<micro-app keep-alive>` 独占运行时状态;契约固定为 `runtime-keep-alive`,禁止 Vue `KeepAlive` 和 micro-app 双层缓存。
|
|
33
|
+
- 每个顶部 Tab 按完整路由生成稳定实例身份,最多保留 5 个隐藏实例并按 LRU 淘汰。关闭 Tab、退出登录、Token/角色变化以及版本或入口变化时必须精确销毁对应运行时。
|
|
34
|
+
- 恢复时强制同步宿主上下文并检查真实可见 DOM;子应用监听 `appstate-change`,在 `afterhidden` 幂等暂停轮询、WebSocket 和观察器,在 `aftershow` 幂等恢复并重新测量布局,同时保留用户输入、筛选、滚动和内部路由。
|
|
35
|
+
- 微服务 `openForm` 省略 `sysMenuId` 时,宿主从自身冻结的 `ownedRouteMeta.Id` 补回菜单上下文,不能在异步打开后借用另一页的全局 `$route`。显式跨表菜单仍透传并由 FormEngine 验证,不设置 `_IsAdmin`、绕过行范围或增加用户权限;没有合法菜单/表权限时保留拒绝。修改运行 `micro-app-open-form-context.spec.mjs` 并在实际商城点击发布新应用;涉及保存链路时用获授权的本轮私有 fixture 完成保存、独立回读、重开及精确清理,不上传或公开发布测试包。
|
|
36
|
+
- 修改宿主、TagsView 或权限路由时,必须同时读取 [Vue3 前端微服务宿主规则](references/progressive-03-vue3-前端微服务宿主规则.md) 并运行微服务缓存契约测试。
|
|
37
|
+
- 修改 Vue/JS 后先跑 VS Code Problems 或 `get_errors`。
|
|
38
|
+
- 宿主按钮重置只作用于 `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,应用自身按钮继续在真实业务页面验收。
|
|
39
|
+
- 影响核心前端时跑 `Microi.Client` 的 `npm run build`。
|
|
40
|
+
- 如果改了工作流、表单保存、按钮 V8,建议用实际 `sys_menu` 配置测试:
|
|
41
|
+
- `FormBtns` 是否出现在表单右上角/FAB。
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
<!-- /microi-progressive:chunk -->
|
|
@@ -38,6 +38,8 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
38
38
|
- 对话输入框上下键回填成功提交的提示词,向下可恢复未发送草稿。菜单、输入法候选、选区和多行正常光标移动优先;不要在用户编辑文本时强行覆盖草稿。
|
|
39
39
|
- 消息编辑/撤回通过真实会话分叉到该消息之前的已完成轮次;原会话和已经执行的文件修改保留。撤回将消息恢复为草稿,编辑则重新发送;这不是撤销文件系统。图片随草稿恢复,无法安全恢复的文件附件明确拒绝,不能静默删除附件或只改屏幕文字而保留旧模型上下文。
|
|
40
40
|
- AI 员工按项目群协作,十个岗位加技术总监共十一个岗位,可分别选择桌面已配置模型;原任务、成果审阅、目标和预算仍从「任务与验收」进入。群与任务共用用户明确选择并已登录的吾码 MCP,不能默认切到官方账号或首个客户。数据、运行与验收记录归所选租户;未安装员工中心或权限不足必须明确提示,不能擅自向所有客户安装。Harness 的会话/技能/定时能力不能证明完整 OpenClaw 已内置。相关执行边界读取 `ai-engine/references/ai-employees.md`。
|
|
41
|
+
- `GroupWorkflowList` 将本人未结束工作置首,其余按创建时间和 Id 从新到旧排列并去重、最多二十条;全部结束后群头应打开最新工作会话。验收多条工作时独立核对实际选中的 SessionId,不能仅凭窗口打开判定成功;群消息和交接仍按原时间正序展示。
|
|
42
|
+
- 员工中心 v1.2.7 的嵌入导航保留用户当前页:同入口 resize/theme/resume 不是导航,只有真实宿主路由或身份/入口变化才切换;验收每页需等待骨架消失与绘制稳定,并独立核对截图中的标题、选中态和实际内容。
|
|
41
43
|
- 员工群消息先持久提交 SQL 消息、运行与 outbox,再返回短确认;后台用稳定 Mongo `_id` 同步并按授权游标分页读取,失败明确显示 SQL 兜底,不能把未确认发送或模型排队当完成。旧历史只在当前群管理者显式操作后分批迁移。SignalR 使用通用 `/api-engine-realtime` 和群授权,只传版本提示;断线重连后重新授权并按游标回读,不将推送当持久记录。Token 留在桌面 Worker,切换 MCP/用户/群时清理旧订阅及迟到响应。最终安装包须实测详情、模型选择保存、短确认、Mongo 回读及断线恢复。
|
|
42
44
|
- Mongo 附件投影保存规范四字段数组的 JSON 字符串,读回仍核对完整消息摘要,不能只比较顶层 ContentHash。冲突先用同源、当前群管理权限限定的只读审计;旧嵌套字段已丢失时不可猜测解码或跳过摘要。派生投影修复仅限 SQL 正文摘要与 outbox 一致、原 outbox 独占租约仍有效、Mongo 同 Message/Group/Owner、时间/序号及其余非附件字段匹配、已知缺陷形态明确的记录;只更新派生附件字段并完整回读核对,不把固定 Id 更新宣称为 Mongo 原子 CAS。未知冲突保留 SQL 兜底,不改业务消息或模型运行、不扫描所有租户。
|
|
43
45
|
- 同一桌面实例的多个 Worker 必须共享本机模型容量预准入,在领取云端任务前取得名额;RPC 超时不等于模型终态,结果未知时停止自动重放并保留核对入口。
|
|
@@ -52,6 +52,12 @@ MySQL 就绪和后续 SQL 使用最终 TCP 服务,不能把镜像初始化时
|
|
|
52
52
|
指纹到同一会话历史,再以原版本、渠道和累计起点重新冻结并执行完整门禁。
|
|
53
53
|
此开关不能复用失败测试,也不能重写已有成功阶段;默认续发仍严格拒绝源码漂移。
|
|
54
54
|
|
|
55
|
+
仅当用户明确改定唯一最终发行版本,且原会话没有任何成功阶段或上传时,使用原入口
|
|
56
|
+
`--resume=<原会话绝对路径> --retarget-unaccepted-version=x.y.z` 顺延一次。原生门禁核验
|
|
57
|
+
原计划、全部旧候选证据及不变的配置、渠道和测试范围,保留原始起点、版本变更记录与
|
|
58
|
+
失败 TRX/TAP;新版本重新冻结并执行完整门禁。不得与重冻、凭据或控制恢复叠加,
|
|
59
|
+
也不能用于已有成功发布结果的会话;普通续发仍保留原版本。
|
|
60
|
+
|
|
55
61
|
收到“发布吾码”“完整正式发布”“一键发布”时,默认执行根目录 `Microi一键编译发布.sh --platform-release`(默认完整选项):新版本号按原规则 +1 一次,NuGet、API Docker、PC Docker、官方网站文档及其 Docker 全部发布。官网不再是可选追加项;只有用户明确要求“仅前端/仅后端/仅官网”等局部发布时才缩小范围。完整入口使用 `PlatformRelease` 执行常规 Microi.Tests(平台单元/组件,不自动追加 Full 专项)、吾码前端通用 Node 测试、真实接口检查与最终加密产物启动/运行冒烟;扩展浏览器验收仅在显式传入 `--platform-frontend-tests` 时追加。真实付费 AI、鸿地/JUNCHI、XJY 等指定客户数据专项和 SQL Server 等独立提供商专项默认不纳入,不再逐次询问;只有用户另行明确要求专项时才执行,回执逐项列为“不适用/未执行”,不能冒充通过。独立商城应用、OpenClaw 等应用源码专项由各自入口执行,不作为平台发布前置;平台 SDK、商城协议、安装器、SaaS 与工作流通用回归继续保留。Microi Code/Agent 是独立产品,不混入吾码平台测试与发行。
|
|
56
62
|
|
|
57
63
|
1. 默认确认 NuGet、API/PC 和官网完整渠道及版本;记录开始时间,每次新完整发布从当前版本 +1 一次。中断后使用脚本输出的 `--resume=<会话JSON>` 恢复同一完整发布,沿用原版本、渠道、候选和累计起点;`--release-version=x.y.z` 只用于显式选择版本,本身不代表复用测试或产物。不能仅凭版本文件未提交推断为续发。
|
|
@@ -107,6 +113,7 @@ MySQL 就绪和后续 SQL 使用最终 TCP 服务,不能把镜像初始化时
|
|
|
107
113
|
|
|
108
114
|
- 项目由 `Microi.Ops` 更名为 `Microi.Panel`;独立 .NET + Vue + Microi.UI 宿主使用自己的管理员账号、SQLite 和 Docker 权限,业务 API/Web 停止时仍可操作。只安装面板时使用 `install-microi-panel.sh`,不要求先安装吾码业务平台、宝塔或 1Panel。具体命令与能力边界见中文官网 `server-panel/overview.md`。
|
|
109
115
|
- 先确认主机内存、Docker Engine 身份、活动任务、已有 Ops/Panel 控制器、端口、编排和数据目录。每台 Docker 主机只运行一个吾码控制器。与宝塔/1Panel 共存时使用独立安装目录、容器名、卷、网络和端口;80/443 等监听端口不能被两个入口同时占用,不得重置 Docker 或自动接管第三方面板资源。
|
|
116
|
+
- 安装器选端口同时回读 Docker PortBindings 与主机监听状态,包含未运行容器已声明的 TCP 绑定和本次规划的自定义 Ops 端口;探测失败不能当作空闲。WebSocket `/diy-websocket` 共用 API 端口,TCP/MQTT 使用各自显式映射。Ops 运行时禁止命令行竞争更新是控制器互斥,不能通过抢占或挪走 WebSocket 端口绕过。
|
|
110
117
|
- 宝塔原厂进程检查可能识别 Docker 内的 Nginx,后装时即使端口独立也会提示已有 Web 环境。按已授权范围处理原厂确认:隔离机验收保存确认记录与安装前基线,客户机不自动确认未授权的覆盖或迁移。非交互执行要显式处理已识别的提示并设置超时,不能把挂起、安装器退出或仅出现目录当作安装成功;完成后回读原 Docker 身份、面板凭据/证书哈希及真实网站内容。
|
|
111
118
|
- 1Panel 版本检查使用原厂支持的 `1pctl version` 或 `1panel-core version`,再核对 core/agent 的真实 systemd ExecStart 和官方包 ELF 哈希。不要猜测执行 `1panel-agent version`:已验收的 v2.4.1 会启动另一个 agent 并争用 Unix socket。宝塔新版本不一定保留旧 `data/version.pl`,应使用当前安装版本支持的读取方法,并独立验证真实服务、浏览器页面和网站。
|
|
112
119
|
- 插件市场只安装目录内明确版本与 SHA-256 的镜像;检查架构、许可、健康检查、持久卷和真实业务读写。Oracle 等原厂许可渠道不擅自镜像;MinIO 社区归档后的源码构建必须保留对应源码、许可与摘要。跨数据库大版本升级仍需专用迁移方案。
|
|
@@ -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 |
|
|
@@ -69,7 +69,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
69
69
|
| `system-engine/vision-engine.md` | vision-engine, ai-engine, microi-microservice, app-store, v8-security | ONNX 视觉特征、样本匹配、视频脸框与有界跟随、授权图库与私有示例、异步候选复核、微服务与商城交付 |
|
|
70
70
|
| `system-engine/translate-engine.md` | translate-engine | 多语言与翻译供应商 |
|
|
71
71
|
| `system-engine/unity-integration.md` | unity-integration, v8-api-config, microi-client-frontend | Unity UPM、WebGL/Windows、多人租约、公屏、DiyToken 与 V8 通讯边界 |
|
|
72
|
-
| `system-engine/visualization-engine.md` | page-engine, microi-ui, microi-microservice | 3D、LIS 型材库、CAD、goView
|
|
72
|
+
| `system-engine/visualization-engine.md` | page-engine, microi-ui, microi-microservice | 3D、LIS 型材库、CAD、goView 与数据大屏能力边界;空间合批、透明/AO、完整手势、安全镜头、纯读取诊断和同DPR连续交互验收;世界坐标玻璃牌、实际相机裁剪与异步场景原子提交;真实ModelKey实例与CAD细部绑定、静态AO的T·R·S/独立UV1/非色彩/合批核验、限定族有界并集与来源保全;明确暂停的完整AO结果复用与真实输入/资源失效验证 |
|
|
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 | 接口上下文、配置、分布式锁续租和调用 |
|
|
@@ -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 实施顺序
|
|
@@ -15,6 +15,8 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
|
|
|
15
15
|
|
|
16
16
|
完整数据模型、文件/路由协议和宿主通信见 `references/runtime-delivery.md`。
|
|
17
17
|
|
|
18
|
+
设计、创建或修改吾码前端微服务页面、菜单应用或定制弹窗时,默认执行[前端界面任务默认路由](../microi-system-delivery/SKILL.md#前端界面任务默认路由)。用户直接提出页面需求时,同样先读取并应用 [吾码 UI 设计](../ui-design/SKILL.md) 和 [Microi.UI](../microi-ui/SKILL.md)。
|
|
19
|
+
|
|
18
20
|
## 何时使用
|
|
19
21
|
|
|
20
22
|
### 看板与复杂页面的三种实现方式
|
|
@@ -287,8 +289,20 @@ AI 生成菜单微服务时,应优先封装一个 `callMicroiHost(action, data
|
|
|
287
289
|
- 品牌车辆和真实建筑只能在拥有明确资产/商标使用依据时描述为精确复刻。程序化或原创近似模型使用“风格化/演示模型”措辞,不得把车型标签当作厂商认证。视觉签收与功能、运行发布、商城包、目标租户安装是不同证据层。
|
|
288
290
|
- 运动物体优先使用可复用几何/材质、LOD、实例化和离屏回绕;相机近景仍要检查曲面法线、透明车窗、轮胎方向、脚底接地、穿模和阴影。页面隐藏时暂停动画,恢复时避免累积大时间差导致物体瞬移。
|
|
289
291
|
- 三维数据标牌可以使用透明 PBR 厚度几何、纹理文字与空间连线,但必须保留对齐的 DOM 点击/键盘目标、读屏文本和焦点环。小屏避碰要测试真实矩形交集,不能仅检查页面无横向滚动;把冲突标牌一律向上推会在工具条边界堆叠。玻璃 transmission 会额外渲染场景,密集人群应先量测绘制次数,再选择透明近似或折射质量档。
|
|
292
|
+
- 先明确标牌属于实体世界还是屏幕 HUD。用户要求嵌入场景的玻璃牌时,位置、米制尺寸和朝向由世界坐标/业务锚点决定,随相机产生透视缩小并参与深度遮挡;不能为保持字号和避碰,每帧把它反投影到固定屏幕槽、复制相机四元数或关闭 depthTest。无操作的只读牌不能用透明 DOM 矩形拦截旋转/缩放;可访问文本与键盘入口另保留。验收固定同一业务锚点,仅改变相机,断言世界矩阵不变、画面投影变化、遮挡正确、背面文字不镜像。
|
|
293
|
+
- 镜头切换的裁剪参数依据相机实际位置与沿途净空,不能只因选中了室内目标就提前使用室内近裁平面,否则相机仍在远景时会丢失深度精度。异步几何/着色器准备期间保留旧场景完整可见,在准备成功且导航世代仍有效后一次提交目标层、剖切、灯光和镜头;不得跨 await 隐藏正在显示的对象,也不能用周期性全屏暗遮罩掩盖准备闪烁。验收应录制总览到室内、跨楼层、连续快览及快速重复切换的实际运动帧,静态像素检查不代替动态验收。
|
|
294
|
+
- 模型库中有精细原型不等于真实业务已使用它。先从当前租户真实 Bootstrap 或资产表取得实际 ModelKey(以真实响应字段为准)及逐键实例数,区分生产设备、布局单元和 IoT;再将细部几何绑定到实际 CAD/业务根,逐条串联业务 Id、模型键、库节点、嵌套实例与运行截图。顶层同名键实例为零时也须检查原型是否已嵌入 CAD 子树,不能由库中存在或某一个计数直接宣称全量可见、全部未展示或逐机一致。
|
|
295
|
+
- 静态 AO 烘焙必须使用当前实际实例的 T·R·S 与对应建筑/设备几何,保留原 UV0,另建独立 UV1;标量 occlusionTexture 使用匹配的 texCoord/aoMap.channel 与 NoColorSpace,不能当 sRGB 彩色贴图。用真实加载器和实际合批后的几何检查 UV1 数量、有限性、范围、通道与字节保全,并分别验证贴图解码、GPU采样和同机位画面;CPU图像mock不计视觉通过。运动构件须排除或明确记录当次零命中;静态布局/姿态改变后显式重烘焙,有限范围环境遮蔽不得冒称完整 GI、实测光度或实时动态阴影。
|
|
296
|
+
- 只有运行者明确 paused、无活动镜头/转场且属于已审计支持范围的真实 AO 输入逐值完全相同时,才可复用最近成功生成的完整 16 AO+16 降噪结果;颜色、透明玻璃与 Output 仍每帧实时绘制。相机/投影/裁剪、几何/实例/祖先变换、材质/可见性/排序、噪声/采样参数、尺寸、上下文及 GPU 资源等相关输入改变时必须失效;未知可编程变形、外部 GPU 可变输入与未覆盖回调拒绝缓存。首帧、失效、恢复帧完整重算,异常不能保留旧 valid 结果;非暂停实时状态不复用。保持原像素门槛,分别测静态 PNG、真实失效与真实 RAF 帧时;部分样本通过不等于所有视角/实体手机无频闪,不能无证据把残差归因于 AO。
|
|
297
|
+
- CAD近共面柱或构件只在有来源句柄、明确外包络与限定同族范围内做有界并集,保留全部来源身份/元数据、非目标位置/法线/UV/材质和可回滚原件;列出允许变拓扑的具体批次并独立解码核验。不能按全园坐标近似或统一阈值全局“清重复”,以免删掉真实相邻件、通道或实际重叠装配;目标样本零重复三角只证明所查范围,不能承诺全园零共面或所有运动帧零频闪。
|
|
290
298
|
- 人群实例化须按可复用几何及材质属性分组,保留各人物肘膝关节矩阵,颜色用实例属性;实例化之后仍验证抬脚/落脚和长时间回绕。车辆座椅按座舱净高缩放,不能所有车型使用同一绝对头枕高度。静态源码断言之外,应实例化真实几何做边界/有限矩阵单测,并提供街景近景入口供实拍验收。
|
|
291
299
|
- 建筑照片立面、实体墙和屋顶若几乎共面,旋转相机时会触发深度缓冲 z-fighting:外露侧墙的纹理面沿法向留明确间距,屋顶纹理面高于实体面,必要时用 `polygonOffset`;被相邻楼翼/门廊遮住的内部端面不要重复画照片面。验收须从东、西两端短侧墙和斜俯视分别实拍,暂停动态物体后比较同角度连续帧的大幅像素跳变;只看主立面截图不能证明无闪烁。
|
|
300
|
+
- 大车间或楼层按材质合成一个巨型 Mesh 会丢失局部视锥剔除。静态不透明几何应按实际米制空间块与材质分组,保留全部顶点、法线、UV、业务拾取身份和阴影;动态机构及楼层/剖切语义保持独立。用总览、近景和侧向机位比较可见三角形、绘制次数与帧时,不能只因 drawcall 减少就判定更快,也不能把分块当成减面或降低贴图质量。
|
|
301
|
+
- 透明/透射构件保留每个实体的排序边界与真实包围球,不跨整层按玻璃材质合并;缺少资产身份时逐构件保留。沿用原 PBR、深度写入、双面和透明度语义,不用统一 `renderOrder`、改不透明或单面掩盖排序问题;相交透明表面仍须单独检查。AO 法线/深度通道只采真实可遮挡实体,排除投影牌、透明玻璃及装饰背景;临时过滤用 `finally` 精确恢复原可见性、材质和 override,不能留下隐藏楼层或改变颜色通道的实际显示。
|
|
302
|
+
- 拖动拾取按完整 pointer 手势判断:记录按下、全过程最大位移、按键、pointer 身份及多指状态,只有同一次未拖动的正常抬起才执行点击。不能只比较按下与抬起位置,否则绕一圈回到起点会误选设备并触发镜头跳转;取消、失焦、页面隐藏和卸载时清除待定手势,并覆盖触摸与非主键路径。
|
|
303
|
+
- 室内手动镜头碰撞检查前后位置之间的完整扫掠与真实净空,不能只看终点或关闭碰撞换取平滑。碰撞时停在接触前的安全位置,并结算 OrbitControls 的残余阻尼,防止持续推进后弹回;静止镜头不重复全场景扫描。程序镜头和手动控制必须有唯一当前所有者,切换后旧阻尼或迟到回调不能再次改变新机位。
|
|
304
|
+
- 诊断 getter、统计与截图采样必须纯读取,不能通过读取修正面牌可见性、相机或业务状态。投影与避碰在每个实际渲染帧统一更新,不能依赖低频统计定时器;同一相机/时钟下,连续读取诊断、切换采样顺序或暂不读取诊断,实际画面与可见对象集合应一致。
|
|
305
|
+
- 流畅度验收使用真实连续旋转、滚轮/触摸缩放与镜头切换,固定设备/GPU、视口、DPR、画质、数据和模型候选,分别记录冷加载/预热、帧间隔分位、长帧、可见三角形和绘制次数。静止 FPS、CPU 合成剔除或电脑模拟手机视口不能代替实体手机 GPU 结论;移动中的 AO、MSAA、阴影与材质保持约定质量,不在输入期间暗中关闭。颜色 MSAA 与后处理轮廓/着色器高光的抗锯齿范围分别验证,不凭配置名承诺无频闪。
|
|
292
306
|
|
|
293
307
|
### 菜单页签缓存与子应用生命周期(强制)
|
|
294
308
|
|
|
@@ -329,6 +343,7 @@ window.addEventListener('appstate-change', (event) => {
|
|
|
329
343
|
|
|
330
344
|
- 唯一根容器必须同时写入 `data-mci-ui-root="{AppKey}"`、`data-theme`、`data-mci-palette`,并把宿主字段映射为本应用的语义 Token;禁止把宿主页面的 `html/body` 当作子应用样式开关。
|
|
331
345
|
- 主操作色优先使用 `--mci-color-primary` / `--el-color-primary` 或宿主 `themeColor`;表面、文字、边框分别使用 `themeTokens.surface/surfaceSoft/textPrimary/textSecondary/border`。成功、警告、错误色可以保持语义独立,但必须分别提供浅色与深色可读状态。
|
|
346
|
+
- 材质从 `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
347
|
- 表格、表单、弹窗、上传、骨架屏、空状态、错误态、禁用态、悬停和焦点环都必须覆盖浅色与深色;大面积背景不能直接写死 `#fff` 或某个深色,主题色不能只改按钮而其它视觉仍留在旧配色。
|
|
333
348
|
- 主题切换必须即时生效且不重挂应用、不丢失表单/筛选/内部路由;卸载时清理本应用创建的媒体查询、数据与生命周期监听器。
|
|
334
349
|
- 界面密度与主题属于同一必读契约。宿主 `uiDensity`(兼容 `themeTokens.uiDensity`)提供 `scale/factor/variables`;将 `variables` 映射到应用唯一根容器,写入 `data-mci-ui-density`,在首次挂载、主题消息和缓存实例再次显示时更新。嵌入态不得用自己的旧用户快照或 localStorage 覆盖宿主。iframe 不继承父页面 CSS,禁止声称父框架修改了变量就已适配微服务。
|
|
@@ -13,6 +13,8 @@ description: Microi 移动端首版交付质量门禁。用于 UniApp/H5/App/小
|
|
|
13
13
|
|
|
14
14
|
开发前读取[首版交付与外部服务验收](references/mobile-first-delivery.md),按本次实际业务列出适用门禁。首版就验真实手机号流程、会话恢复、手机与桌面布局、持续动效及发布入口;只有首页截图、编译成功或 SDK 对象存在不能宣布产品交付。第三方商户账号尚未开通时完成安全模板与失败路径,并准确区分接入完成和真实业务验收。
|
|
15
15
|
|
|
16
|
+
涉及新产品设计、整站重设计或用户反馈“平庸/同质/缺少设计感”时,同时读取 [移动产品设计语言](../ui-design/references/mobile-product-language.md) 与 [项目设计签名](../ui-design/references/design-pattern-library.md#项目设计签名与场景配方)。功能、几何和设计表达分开验收:真实可用、图标对齐、无报错是基础,不能据此关闭构图同质的问题;应以同视口、同内容的页面族截图说明具体改善和仍存在的视觉缺陷。不要机械为每页增加动效、照片或大标题。
|
|
17
|
+
|
|
16
18
|
<!-- microi-progressive:begin -->
|
|
17
19
|
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=de98f218788f72f407d39ef9bdee2c1155574ce7a831021f63971d1eaf08943b -->
|
|
18
20
|
## 1. 导航和快捷入口必须使用真实图标
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
快捷登录和会话协议以 `microi-uniapp-frontend`、`microi-frontend-sdk` 为准;本参考负责
|
|
5
5
|
把源码、外部服务、后台与正式入口组成一条可回读的交付链,避免只有静态页面。
|
|
6
6
|
|
|
7
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-022 sha256=
|
|
7
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-022 sha256=2654c16ea78aaccf6a6e742c84ac7e4faac86b7bad6ad51341aa6cda09a61b88 -->
|
|
8
8
|
## 开发前固定事实源和首版范围
|
|
9
9
|
|
|
10
10
|
- 使用指定 MCP 的实际 Profile,先回读 `ApiBase + OsClient`,不能因为官网发布归主租户就让试用端请求主租户。不同租户用独立浏览器 context,不能只新开标签。
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
- 地图、短信、支付与电子开票敏感项进入当前租户系统设置的安全配置;公开启动配置只返回明确白名单的能力开关、供应商和当前端必要运行值。不得返回整个 `V8.SysConfig`、`V8.OsClientModel` 或私有设置字典。
|
|
28
28
|
- 获授权从另一租户迁移配置时,先核对供应商产品、运营主体、域名和可复用范围;仅复制所需键的最小允许列表,由可信后端在目标租户重新加密。禁止整行复制 `sys_osclients`、盲拷租户密文、复用基础设施连接串或把秘密写进源码/Manifest。
|
|
29
29
|
- 使用已存在且审阅过的安全配置工具;若没有安全迁移能力,先补可信通用能力或让管理员在后台填写,不能通过 FormEngine、SQL 别名、临时维护引擎或普通 Reveal 绕过权限。具体实现以 `v8-security` 为准。
|
|
30
|
+
- 主租户向同API分区子租户复用阿里云短信凭据,可使用 `microi_copy_main_sms_credentials`:先 Inspect,核对主租户真实管理员、源成对配置、目标及Revision,再精确确认Copy。目标已有秘密不覆盖,只有可信服务端读取并重新加密;回执只含状态。旧后端没有能力时先升级可信控制面,不能改走明文读取。新会员默认角色配置在后端私有 `Auth.Sms.DefaultRoleId`,不得从匿名请求选择角色或使用旧兼容值 `Allow` 绕过验证码。
|
|
30
31
|
- MCP `microi_run_engine` 的原始 `params` 可能被持久化审计;Token、短信码、完整手机号和密钥不得当普通引擎参数用于调试或迁移。认证验收通过标准 SDK/受保护传输在内存使用凭据,日志、报告和错误响应只保留脱敏阶段/追踪号;专用安全写入工具仍按其脱敏契约执行。
|
|
31
32
|
|
|
32
33
|
### 地图必须按产品与终端验证
|
|
@@ -9,6 +9,8 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
|
|
|
9
9
|
|
|
10
10
|
# Microi 全系统交付复盘与总控规范
|
|
11
11
|
|
|
12
|
+
浏览器交互验收先执行 `workspace-conventions/SKILL.md` 首部的浏览器选择规则:用户未指定时默认使用当前 Codex/WorkBuddy/DSH 宿主的内置浏览器,包括新开发 PC 后台、UniApp/H5 与本地预览;仅在没有内置浏览器、必要能力不支持或有界诊断确认不可用时降级到本地浏览器。具体测试、独立 CI 与会话隔离按 `playwright-e2e` 执行。
|
|
13
|
+
|
|
12
14
|
所有范围的收尾都必须执行 [测试临时文件随任务清理](../workspace-conventions/SKILL.md#测试临时文件必须随任务清理强制):每轮测试结束清理本任务 `.tmp`、宿主临时目录、隔离源码/运行副本和已结束工作树,交付必需证据先最小归档,失败/中断也要回收;独立回读删除结果,并逐项说明确需暂留的文件、体积、原因与清理时机。脚本需有实际 teardown,不能把文字规范当作自动清理功能。
|
|
13
15
|
|
|
14
16
|
本 Skill 来自一次完整业务系统交付复盘。目标是让下一套 OA、ERP、MES、CRM、商城、预约、互联网项目等 Microi 系统少走返工路:先固定事实源,再用 MCP 正确建模,最后用可视化和业务闭环测试证明可交付。
|
|
@@ -26,6 +28,10 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
|
|
|
26
28
|
|
|
27
29
|
完整系统及用户反馈后的交付复测,还须读取 [交付易错项与证据门禁](references/delivery-pitfalls.md),逐项记录适用、通过、失败或不适用及理由。此表适用于所有模型与宿主;连接成功、模型自述“已完成”或引用规则不能替代实际回执。涉及报表/模拟数据时必须执行 `report-engine` 的默认周期覆盖检查。
|
|
28
30
|
|
|
31
|
+
## 前端界面任务默认路由
|
|
32
|
+
|
|
33
|
+
根据吾码工作区、当前应用和用户要操作的界面识别任务。设计、创建或修改前端微服务页面或移动端界面时,即使用户只说“给订单加个详情页”或“调整手机端首页”,也要在设计和实现前完整读取并应用 [吾码 UI 设计](../ui-design/SKILL.md) 和 [Microi.UI](../microi-ui/SKILL.md)。再按下表读取端侧专项规范,沿用既有设计契约和用户指定的设计体系。纯后端改动、只读盘点等按实际范围读取专项。
|
|
34
|
+
|
|
29
35
|
按本次实际能力读取相关 Skill,不能只读总控入口后凭记忆实现:
|
|
30
36
|
|
|
31
37
|
| 工作内容 | 相关 Skill |
|
|
@@ -36,7 +42,8 @@ description: 已初始化吾码工作区的默认 AI 开发总控入口,用户
|
|
|
36
42
|
| 菜单骨架、AI 开发中占位、逐菜单切换、PageTabs、模块展示 | `module-engine`、`v8-menu-buttons` |
|
|
37
43
|
| 选项 Key/Label、数据源、状态模板 | `microi-datasource-mapping`、`datasource-engine`、`v8-template-engine` |
|
|
38
44
|
| 业务接口、表单事件 | `v8-crud-api`、`v8-table-event` |
|
|
39
|
-
|
|
|
45
|
+
| 前端微服务、个人中心、菜单应用、定制组件或复杂弹窗 | [微服务](../microi-microservice/SKILL.md)、[宿主前端](../microi-client-frontend/SKILL.md),结合上方两份 UI Skill 核对宿主主题色、明暗、密度和样式隔离 |
|
|
46
|
+
| 移动端页面(UniApp、移动 H5、App、微信小程序) | [UniApp 前端](../microi-uniapp-frontend/SKILL.md)、[移动端质量](../microi-mobile-app-quality/SKILL.md),结合上方两份 UI Skill 核对导航、触控、动效和目标端验收 |
|
|
40
47
|
| MCP 连接入口、角色 AI 开发授权 | `microi-codex`、`v8-security`;服务端逐请求复核范围与操作开关,普通表单路由不能作为绕过通道 |
|
|
41
48
|
| 业务统计、老板经营、领导管理看板及明细报表 | `page-engine`、`report-engine`、`datasource-engine` |
|
|
42
49
|
| 真实业务、截图、账号和跨端验收 | `playwright-e2e`;有独立前端时再读相应前端 Skill |
|