@microi.net/cli 5.7.9 → 5.8.1
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 +106 -106
- package/scripts/microi-skills.meta.json +293 -290
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +441 -441
- package/skills/README.md +2 -1
- package/skills/ai-engine/SKILL.md +1 -1
- package/skills/ai-engine/references/ai-employees.md +4 -0
- package/skills/ai-platform-governance/SKILL.md +8 -8
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +9 -9
- package/skills/app-store/SKILL.md +58 -4
- package/skills/job-engine/SKILL.md +4 -3
- package/skills/message-notification/SKILL.md +2 -1
- package/skills/microi/SKILL.md +14 -0
- package/skills/microi-ai-application/SKILL.md +16 -3
- package/skills/microi-client-frontend/SKILL.md +10 -5
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +3 -3
- 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 +4 -4
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +3 -3
- package/skills/microi-codex/SKILL.md +15 -0
- package/skills/microi-datasource-mapping/SKILL.md +4 -0
- package/skills/microi-deployment/SKILL.md +7 -0
- package/skills/microi-deployment/references/deployment-matrix.md +8 -0
- package/skills/microi-docs-coverage/references/capability-map.md +1 -0
- package/skills/microi-form-layout/SKILL.md +6 -6
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +3 -3
- package/skills/microi-frontend-sdk/SKILL.md +6 -6
- 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 +7 -7
- package/skills/microi-microservice/SKILL.md +1 -0
- package/skills/microi-mobile-app-quality/SKILL.md +12 -8
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +10 -10
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +4 -4
- package/skills/microi-system-delivery/SKILL.md +5 -5
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +1 -1
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +6 -4
- package/skills/microi-ui/SKILL.md +6 -6
- 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 +5 -5
- package/skills/microi-uniapp-frontend/SKILL.md +10 -10
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +7 -7
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +10 -10
- package/skills/module-engine/SKILL.md +13 -0
- package/skills/page-engine/SKILL.md +19 -8
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +3 -3
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +4 -4
- package/skills/playwright-e2e/SKILL.md +11 -11
- package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +5 -5
- 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 +3 -3
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +7 -7
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +4 -4
- package/skills/system-observability/SKILL.md +3 -0
- package/skills/ui-design/SKILL.md +7 -7
- 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 -2
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +3 -3
- 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 +2 -2
- 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 +1 -1
- package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +3 -3
- package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +2 -2
- 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 +4 -4
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +5 -5
- package/skills/unity-integration/references/ai-app-delivery.md +16 -0
- package/skills/v8-api-config/SKILL.md +6 -0
- package/skills/v8-crud-api/SKILL.md +9 -7
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +8 -8
- package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +2 -2
- package/skills/v8-explorer-tree/SKILL.md +2 -2
- package/skills/v8-export-import/SKILL.md +4 -4
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +3 -3
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +4 -4
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +1 -1
- package/skills/v8-file-upload/SKILL.md +32 -4
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +3 -3
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +3 -3
- package/skills/v8-frontend-events/SKILL.md +6 -6
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +5 -5
- package/skills/v8-http-integration/SKILL.md +4 -4
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +7 -7
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +2 -2
- package/skills/v8-image-processing/SKILL.md +1 -1
- package/skills/v8-menu-buttons/SKILL.md +4 -4
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +4 -4
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +5 -5
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +3 -3
- package/skills/v8-mq-mqtt/SKILL.md +3 -2
- package/skills/v8-mq-mqtt/references/mqtt-production.md +1 -1
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +1 -1
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +1 -1
- package/skills/v8-security/SKILL.md +15 -5
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +3 -3
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +8 -6
- package/skills/v8-table-event/SKILL.md +5 -5
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +6 -6
- 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 +2 -2
- package/skills/v8-tcp-integration/SKILL.md +2 -2
- package/skills/v8-workflow/SKILL.md +42 -7
- package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +7 -7
- package/skills/workspace-conventions/SKILL.md +19 -10
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +8 -7
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +21 -21
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +1 -1
|
@@ -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=8cd14b9e9483cd23cc4ea25411c5c69e015387ade54131252a385c88be3a1a17 -->
|
|
6
6
|
## 8. 运行时高频坑复盘
|
|
7
7
|
|
|
8
8
|
### 前端 V8.Http 与后端同构契约
|
|
@@ -84,7 +84,7 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
84
84
|
- 自动生成的最终 `SqlWhere` 使用带固定前缀 `-- 【权限说明】` 的单行中文注释,就近解释外层括号、租户隔离、AND/OR 组合、超级管理员、普通用户范围、全量角色/岗位/部门、图形条件和闭合括号;不得再生成整段 `/* ... */` 说明。后端还要兼容剥离历史 `-- 【吾码权限说明】`。图形配置使用首行紧凑明文 JSON `-- MICROI_DATA_PERMISSION_CONFIG:{...}` 恢复,省略默认值且不重复保存 `SqlJoin/JoinTables`;旧 `-- MICROI_DATA_PERMISSION_V1:...` Base64 marker 只读兼容、不再生成,设计器不得展示 marker。后端执行前只剥离这些平台专用注释,用户手写注释必须保留。`SqlJoin` 继续保存 JOIN,`JoinTables` 继续保存关联表 JSON,后端协议不变。
|
|
85
85
|
- 有新旧 marker 的配置必须无损回显;没有 marker 的历史手写 SQL 只能原样保留或安全解析字段提示。标准表单对 `CodeEditor` 使用的 `_CodeEditorTransport` 必须由 FormEngine 控制器在进入业务逻辑前统一解码,数据库只保存明文;非法批次不得产生部分解码。
|
|
86
86
|
- 角色、岗位、部门属于查看者放行规则;本人、本人和下级、部门范围属于行范围。超级管理员默认放行,但启用 TenantId 隔离时也不能跨租户。所有表名、别名和字段名生成前做标识符白名单,固定值转义单引号。
|
|
87
|
-
- 官方 `microi_itdos` 与开发租户更新 `diy_field` 后都要刷新 `sys_menu` 表/字段缓存并回读 `Component/Visible/AppVisible/Config`;应用商城资源同步修改 `
|
|
87
|
+
- 官方 `microi_itdos` 与开发租户更新 `diy_field` 后都要刷新 `sys_menu` 表/字段缓存并回读 `Component/Visible/AppVisible/Config`;应用商城资源同步修改 `OfficialApplications/Resource/app.microi.module-engine.json`。
|
|
88
88
|
- 官方文档:`microi.doc/docs/doc/v8-engine/v8-client.md`。
|
|
89
89
|
- Skills:`v8-frontend-events`、`v8-table-event`、`v8-menu-buttons`、`v8-template-engine`、`v8-formengine-http` 和本 Skill。
|
|
90
90
|
|
|
@@ -147,7 +147,7 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
147
147
|
- 修改后运行静态门禁,确认源码不存在内容型 `v-loading`、`ElLoading.service`、硬编码黑色 Loading mask 或加载期空态;再用真实浏览器验证菜单、首页、表格、表单详情在亮色、暗色、自定义主题和移动端下的骨架几何、对比度、`aria-busy`、reduced-motion 及请求失败收口。
|
|
148
148
|
|
|
149
149
|
<!-- /microi-progressive:chunk -->
|
|
150
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-009 sha256=
|
|
150
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-009 sha256=b1105375a6b9477eb397a275c67cd7e1074ae14948c41bd594e91deb4a2ba9b0 -->
|
|
151
151
|
## 7.1 登录验证码与 Sys_Config
|
|
152
152
|
|
|
153
153
|
修改 `Microi.Client/src/views/login/index.vue` 或任何 PC 端登录扩展时,必须遵守平台登录验证码契约:
|
|
@@ -184,7 +184,7 @@ DiyCommon.FormEngine.AddFormData("table_name", { Field: "value" }, function (res
|
|
|
184
184
|
- 自动化检查:单测覆盖失败投影保留最后有效权限、合法撤权、访问密钥、登录切换迟到响应和注销竞态;真实浏览器拦截一次坏的当前用户投影,确认页面无需重新登录即可自动刷新,并连续检查新增、编辑按钮及刷新接口返回的管理员权限始终完整。
|
|
185
185
|
|
|
186
186
|
<!-- /microi-progressive:chunk -->
|
|
187
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-010 sha256=
|
|
187
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-010 sha256=2446aaeadddd95aa22dcd5935c5a9d60b51008bb1e0d5b5b7f6ee01f2fe9dd06 -->
|
|
188
188
|
## Microi 前端 SDK 约束
|
|
189
189
|
|
|
190
190
|
当修改 `Microi.Client` 之外的 Vue3 前端、PC 官网、移动 H5 或定制微前端页面时,必须优先读取 `microi.skills/microi-frontend-sdk/SKILL.md` 并使用 `microi.skills/microi.v8.js`。`Microi.Client` 主后台已有平台请求与 Pinia 体系时,可以复用现有平台能力;但新增独立页面、外部站点、插件页、嵌入式页面不得再复制旧 Vue2/Vuex 版 `microi.v8.js`。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-011 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-011 sha256=4272be553eea5fd0ead8c7933b3b5231a6d8501bfed181294d1e5cf5965314d6 -->
|
|
6
6
|
## Vue3 前端微服务宿主规则
|
|
7
7
|
|
|
8
8
|
`sys_menu.OpenType=MicroService` 时,动态路由必须把 `MicroServiceId`、`MicroServicePageId`、`MicroServiceRoutePath` 和真实入口 `MicroAppUrl` 写入 route meta;浏览器侧菜单路由使用 `/#/micro-app/{MsKey}/{RoutePath}`,不要再生成 `/micro-app-host/{menuId}`,否则地址过长且刷新或直接访问菜单路由容易加载空白页。
|
|
@@ -102,7 +102,7 @@ CurrentUser、ApiBase 和 OsClient。无痕窗口是人工第二租户的最低
|
|
|
102
102
|
- 自动化检查:打开真实列表连续点击两次旧打印按钮,断言抽屉内出现打印引擎、打印数据接口成功、出现浏览器打印日志,并且没有未知组件警告、递归更新、页面异常或失败请求;保存首次和重复点击截图。
|
|
103
103
|
|
|
104
104
|
<!-- /microi-progressive:chunk -->
|
|
105
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-012 sha256=
|
|
105
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-012 sha256=4e579132c5176b46e6e9aa61e87982d63fe2c26c639f0ef3832614b2dacfcb3f -->
|
|
106
106
|
## 在线 AI 应用与微服务页面协作
|
|
107
107
|
|
|
108
108
|
Microi 的 AI 应用与应用商城只有一个主数据源:`sys_microistore`。运行类型写入 `ApplicationType`:普通平台离线包的新建默认值为 `Regular`,既有商城平台应用/通知仍使用 `Platform`,另外还有 `Web / UniApp / MicroService`;读取端必须兼容 `Regular/Platform`。`Category` 保存游戏、企业、行业、教育等业务分类,`PublisherType` 保存官方/社区来源;`mci_ai_app_file / mci_ai_app_version` 仅作为私有源码清单和构建版本从表,其 `AppId` 必须指向 `sys_microistore.Id`。禁止再向 `mci_ai_app` 创建新的主记录。MicroService 另外使用 `sys_microiservice / sys_microiservice_page` 保存运行元数据和页面路由。
|
|
@@ -149,7 +149,7 @@ Microi 的 AI 应用与应用商城只有一个主数据源:`sys_microistore`
|
|
|
149
149
|
- 同一份 ApiKey/Token 摘要在 Overview 与 AI 页面复用同一个组件;Token 额度统一展示“总量/Total”,不要把总量写成“赠送”。复制密钥必须有明确成功或失败提示,并提供 Clipboard API 不可用时的兼容复制。
|
|
150
150
|
|
|
151
151
|
<!-- /microi-progressive:chunk -->
|
|
152
|
-
<!-- microi-progressive:chunk id=microi-client-frontend-013 sha256=
|
|
152
|
+
<!-- microi-progressive:chunk id=microi-client-frontend-013 sha256=57dc1ce4db6ce0aa4865b3d0ad11293a17e473a9f6bb92a084701ea239056d13 -->
|
|
153
153
|
## 浏览器访问密钥路由
|
|
154
154
|
|
|
155
155
|
- 固定看板免登录使用常量匿名路由 `/access-login`,密钥使用 `microi_ak_` 前缀,完整链接格式为 `{Microi.Client前端WebBase}/?OsClient={当前租户}#/access-login?access_key={密钥}&redirect={encodeURIComponent后的站内Hash路由}`。例如目标路由 `/mic/data-dashboard/preview/01KK988A0YPHKAM8SF216917HX` 必须生成 `redirect=%2Fmic%2Fdata-dashboard%2Fpreview%2F01KK988A0YPHKAM8SF216917HX`。生成器只复制当前 `OsClient`,不能把其它页面查询参数带进凭据链接,也不能把 API Server 当成前端 WebBase。
|
|
@@ -13,6 +13,11 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
13
13
|
|
|
14
14
|
## Microi Agent 桌面宿主
|
|
15
15
|
|
|
16
|
+
- 桌面包内置技能目录;干净工作区输入 `/microi` 可发现吾码入口,再读取基础规范与专项技能。查不到时先核对当前桌面版本及内置技能资源,不要求用户复制开发机目录,也不要把 MCP 工具名当成斜杠技能名。
|
|
17
|
+
- 对话输入框上下键回填成功提交的提示词,向下可恢复未发送草稿。菜单、输入法候选、选区和多行正常光标移动优先;不要在用户编辑文本时强行覆盖草稿。
|
|
18
|
+
- 消息编辑/撤回通过真实会话分叉到该消息之前的已完成轮次;原会话和已经执行的文件修改保留。撤回将消息恢复为草稿,编辑则重新发送;这不是撤销文件系统。图片随草稿恢复,无法安全恢复的文件附件明确拒绝,不能静默删除附件或只改屏幕文字而保留旧模型上下文。
|
|
19
|
+
- AI 员工桌面工作台提供十岗、任务草稿、执行、成果审阅、已验收依赖、目标和预算。云端执行复用员工中心;本机执行使用显式受限 OpenClaw Agent 与已有 Gateway。Harness 的会话/技能/定时能力不能证明 OpenClaw 的渠道、Gateway、设备节点与全部 cron 语义已完整内置。相关配置和验收读取 `ai-engine/references/ai-employees.md`。
|
|
20
|
+
|
|
16
21
|
- 桌面与手机配对的本机 HTTP 监听必须避开 Fetch 标准禁止端口。系统自动分配的端口也可能不可浏览器访问;只有浏览器允许的真实监听端口才能进入配对 URL。自动命中禁止端口时关闭监听再有界重选,显式配置禁止端口须报错;权限和占用错误仍保留原错误,不改变系统动态端口范围、不绕过浏览器安全策略。同步上游时保护共同端口选择器、配对监听与对应回归。
|
|
17
22
|
|
|
18
23
|
- Microi Agent 是内部仓库中的独立桌面发行物,直接基于 DataElement/dsh-desktop 与 DeepSeek Harness 二次开发,内置固定版本的 Harness SDK、Node.js、MCP / CLI / Skills;不是需要额外 Agent Token 的 CLI 别名。
|
|
@@ -27,8 +32,18 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
|
|
|
27
32
|
- Harness 本机探测必须以独立硬计时器约束 TCP 连接和响应头,Node 失败后用 Chromium 复核。两个通道在认证地址公布后连续连接失败时,仅重启一次到 IPv6 `::1`;IPv6 也必须实际取得有效 HTTP 响应,不得伪造就绪、绑定所有网卡或关闭鉴权。普通模式与安全模式使用同一规则,500 响应不得触发网络回退或算作就绪。日志同时记录桌面版本、实际监听地址和进程内 HTTP 自检;探测不带凭据、不跟随重定向、不输出自检 Token。恢复日志只去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布运行 `scripts/verify-harness-startup.mjs`,以包内 Node/Harness、真实 Chromium 页面验证普通与安全模式、Node 超时回退、IPv4 双通道受阻后 IPv6 鉴权和双通道真实无响应的有界失败。Mac 验收与 Windows 真机、安装升级、客户设备验收分别记录。
|
|
28
33
|
- Windows 的 IPv4/IPv6 TCP 都连接失败时,允许回退到本次启动创建的私有命名管道。必须先从管道取得真实 HTTP 响应,再沿用 Harness 原有 Host、Origin、启动 Token 和签名 Cookie 验证;不得跳过鉴权或开放公网。HTTP 请求与 `/api/remote.mux` 会话流都要验收,IPC 仅限当前主窗口顶层页面和固定端点,不暴露凭据、管道路径或任意代理能力。`scripts/verify-harness-pipe.mjs` 的 macOS Unix socket 验证不等于 Windows 命名管道或客户设备已通过。
|
|
29
34
|
- 当前 Electron 桌面运行时不能直接打包 iOS/Android,也不能把现有 DMG 原样提交 Mac App Store。移动端和 MAS 版应作为受限客户端,复用账号、模型、会话、MCP 与桌面配对协议,把 Node/Harness/Shell/插件执行放到配对桌面或合规远端;分别完成 Apple/Google 签名和商店审核。
|
|
35
|
+
- MAS 使用独立 `electron.vite.mas.config.ts` 与 `electron-builder.mas.cjs` 构建最小客户端,应用包只含客户端入口、受限 preload、静态界面和版权材料;不能把父工程依赖、Harness、独立 Node 或站外更新器混入沙盒包。正式包使用 Mac App Distribution 与 Mac Installer Distribution;本机验证使用 Mac Development 和包含该设备的开发描述文件。签名钥匙串必须先用实际保存的密码完成锁定、解锁往返验证,再启动构建;记录密码不得被重复生成过程覆盖。签名包、本机运行、Apple 上传处理、提交审核和正式上架分别回读,不能以包已生成代替上架。商店截屏使用经过验证的真实客户端界面,按 Apple 接受的高清尺寸上传,保留原始高清 Logo。
|
|
36
|
+
- Windows Microsoft Store 使用分配给产品的 MSIX Identity/Publisher,上传包由商店签名。MSIX 运行时以 Electron 的 `process.windowsStore` 识别,禁止调用官网 EXE 更新、降级或安装入口;手动检查更新转到该产品的 Microsoft Store 页面,版本列表不请求 NSIS 归档。包内 PE/x64、Manifest/BlockMap 校验、Windows 原生运行、商店认证和正式可下载分别记录。官网 Windows/macOS 下载按钮旁可展示真实商店产品链接,但审核中必须明确标注,不能把未开放页面称为已上架。
|
|
37
|
+
- 闭源商业项目要求免费可信 EXE 下载时,已发布的免费 Store MSIX 可使用 Microsoft Store Web Installer:从官方 badge 生成器的 Direct 模式取得该产品 `get.microsoft.com/installer/download/` 链接,验证真实下载的 Microsoft 签名及文件摘要。这是联网安装当前商店版的小型 EXE,不是给官网完整 NSIS EXE 签名;保留两渠道并说明版本差异,不把下载成功写成原生安装通过,不将动态安装器冒充固定版本 CDN 产物。按当前包 Manifest 的 MinVersion 和架构记录系统条件,分别说明旧 Windows、x86、ARM 仿真、LTSC/Server、离线与企业策略边界;不降低安全策略或虚构全部系统验收。自签名不能产生公众信任,免费开源签名服务不适用于私有商业源码。
|
|
38
|
+
- 复用已签名 MAS 应用制作开发测试包时,必须替换 `Contents/embedded.provisionprofile`,核对描述文件中的证书与开发签名及当前设备一致;`codesign --verify` 通过仍不能替代实际启动。资料目录中的描述文件保持私有权限,复制到安装包后设为普通用户可读,并检查整个有效载荷,避免 ITMS-90255。沙盒阻止调试监听时不得扩大正式包的网络监听权限;自动化测试入口只放入独立开发副本,正式入口、preload 与界面应核对同源,测试入口和配对口令不得进入正式安装包。安装包上传成功后仍要回读 Apple 处理状态、选择构建、上传高清素材并实际提交审核。
|
|
30
39
|
- 官方账号页和关于标签通过 `platform-current-user` 接口引擎读取当前 `sys_user.LicenseType`。桌面相关平台业务逻辑优先通过 `microi_itdos` 接口引擎实现;只有接口引擎缺少必需底层原子能力时才能改后端源码,并说明原因。
|
|
31
40
|
- 正式 Windows/macOS 安装包必须内置固定版本且经过 SHA-256 校验的 cloudflared,运行时优先使用安装包 `resources/bin`,避免首次联网临时下载。检查更新从 `https://api.itdos.com/microi-code/updates/` 的匿名接口引擎读取 YAML/JSON,安装包二进制仍通过 HDFS 流式发布。
|
|
41
|
+
- Windows 安装验收必须包含旧卸载器损坏后的升级、同版本重装、超过 260 字符的路径以及全部文件 SHA-256 回读。安装器使用当次发布的兼容卸载器,并用固定哈希的 Unicode 7-Zip 直接解压到目标目录,禁止恢复临时目录解压后使用 NSIS `CopyFiles` 复制的流程;该流程会将路径或复制错误误报为“应用无法关闭”。进程检查仅匹配安装目录内的产品主程序及内置 Node,不能按整个目录匹配安装器或无关程序。
|
|
42
|
+
- 长路径验收必须先安装完整旧版本,再在同一目录覆盖升级及再次重装,不能只在空目录或仅含模拟卸载器的目录安装。卸载清理、旧文件备份迁移和失败回滚均须支持 Windows 扩展路径;通过真实 NSIS 与独占文件句柄验证长路径迁移和占用回滚,不能仅用 JS 文件操作或首次解压测试替代。
|
|
43
|
+
- Windows 1.2.7 起安装失败诊断直接集成于安装器:失败窗口提供「复制安装日志」与「打开日志」,不另发独立诊断工具。`build/microi-installer-log.nsh` 在实际清理/解压/回滚步骤写入安装目录外的 UTF-8 日志,`build/microi-installer-diagnostics.ps1` 作为内嵌的只读补充,记录 Win32 访问错误和 Restart Manager 占用 PID。整份日志通过原生 Unicode 剪贴板复制;超过容量时明确拒绝而不截断。验收须真实点击复制按钮、核对中文长日志、占用文件的 Win32=32 与回滚;卸载退出码 2 不等同于 Win32 错误码 2,本机通过不代表客户机升级通过。
|
|
44
|
+
- Windows 1.2.8 起升级先在安装盘同级目录完整解压,再切换程序目录;旧文件仅同盘重命名,禁止回退到逐文件跨盘搬运。`build/microi-installer-transaction.nsh` 与相关 NSIS 补丁必须随上游同步永久保留。Win32=33 是文件区域锁错误,不能仅凭此指认某个安全软件;验收须在安装盘与 TEMP 不同的条件下持有真实字节锁,证明旧跨盘操作失败而新版安装成功,并验证持续占用、回滚与未知目标目录冲突。未恢复的同盘备份必须在安装退出后保留,不能存入会自动删除的临时目录;完整源文件哈希检查与客户设备验收分别记录。
|
|
45
|
+
- Windows 1.2.9 起本机启动探测必须使用覆盖 TCP 连接和响应头的硬超时;Harness 输出认证地址后,Node 请求失败可使用实际渲染页面的 Chromium 网络通道回退,严格限制为本次 `http://127.0.0.1:端口/`、不带凭据、不跟随重定向。记录两个通道的真实错误;只有响应正常且存在本次认证信息才可启动页面。恢复日志只能去除缓冲区之间的重叠,不能用全局 Set 删除重试中的相同超时。发布必须运行 `scripts/verify-harness-startup.mjs`,使用发布包内 Node/Harness 验证普通与安全模式、注入 Node 超时后由真实 Chromium 渲染新会话控件,以及双通道真实不响应的有界失败;本机验证不能称为客户设备已通过。
|
|
46
|
+
- 桌面平台 Worker 必须在真实安装包内验证 IPC 与 Windows DPAPI。旧保险库只有成功解密且明文为零字节时才允许迁移为空文档;损坏或其他 Windows 用户的保险库保留原文件并返回具体错误。启动初始化拒绝不能让 Node 服务退出;单元测试、安装成功与真实桌面账号/AI 员工页面联调是三个独立验收层。
|
|
32
47
|
- dsh-desktop 升级必须遵循 `Microi.Agent/同步dsh-desktop上游.md` 的三方同步流程和补丁意图清单;`microi/`、`packages/microi-code-*` 与桥接代码是永久保护区,普通上游文件使用三方比较,补丁必须经 `npm ci` 重放。关于页、NOTICE、MIT License、DataElement 版权与两个上游仓库链接不得删除。停止或退出后的任务保留历史,当前 SDK 的跨进程历史仅供查看,需新建任务引用继续。
|
|
33
48
|
|
|
34
49
|
### 默认中文输出
|
|
@@ -18,6 +18,10 @@ Microi 低代码平台中,`Select / Radio / Checkbox` 等选项组件支持两
|
|
|
18
18
|
|
|
19
19
|
> ⚠️ 注意:若误将 Key 与 Value 设置为相同中文,后台和 DB 中存的就是中文字符串(如 `Level='普通会员'`)。
|
|
20
20
|
|
|
21
|
+
### 字段 V8 必须按保存格式读取选中值
|
|
22
|
+
|
|
23
|
+
`SelectSaveFormat='Text'` 时,`V8.Form.<字段>` 可以是保存字段的原始文本;旧配置可能仍为对象或 JSON 文本。按钮不能无条件读取 `.TableName`、`.Id` 等对象属性。先按真实 Config 提取值并校验非空,再调用接口;接口失败和网络异常均在 `finally` 恢复 Loading。验收须覆盖文本、旧对象、JSON 文本和空选项。
|
|
24
|
+
|
|
21
25
|
---
|
|
22
26
|
|
|
23
27
|
## 二、移动端前端显示枚举值的规范
|
|
@@ -43,6 +43,12 @@ description: Microi 安装、部署、升级和本地运行指南。用于吾码
|
|
|
43
43
|
|
|
44
44
|
共享源码持续变化时,可在独立目录保存完整候选源码和依赖,以该目录运行同一 Full 与发布脚本。专用测试服务使用独立端口,通过发布脚本变量 `MICROI_RELEASE_BACKEND_PORT`、`MICROI_RELEASE_FRONTEND_PORT` 指定收尾端口(默认仍为 61501、61500);进程管理器仍必须核验 PID、命令行和工作区归属,不得结束原工作区服务。变量仅供发布脚本使用,不进入生产 API 配置。
|
|
45
45
|
|
|
46
|
+
macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式;启动余量、95% 暂停与90%恢复及五秒稳定门禁均保留。统计错误应修正探针,正式发布保留内存门禁及共享进程;修复发布逻辑后重新 Full。
|
|
47
|
+
|
|
48
|
+
DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 Full、加密和最终产物冒烟;不得以专项测试替代发布门禁。
|
|
49
|
+
|
|
50
|
+
在线 AI 的 MCP 运行目录必须由已锁定依赖干净安装、编译和裁剪后完整复制。生产命令的符号链接应解析为真实文件并保留执行权限,不能依赖即将清理的临时目录;损坏、越界或循环链接在替换旧运行目录前失败,重新打包清除旧依赖残留。保留制品门禁对符号链接的拒绝规则,专项验证使用同一复制逻辑并核对清理临时目录后命令仍可运行;修复打包逻辑后重新 Full。
|
|
51
|
+
|
|
46
52
|
| 场景 | 推荐入口 |
|
|
47
53
|
|---|---|
|
|
48
54
|
| 生产 Linux、快速安装、可滚动升级 | Docker/Compose |
|
|
@@ -151,6 +157,7 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
|
|
|
151
157
|
`.NET Host` 对业务 DLL 的锁定。
|
|
152
158
|
- Edge/Chrome 用户浏览器、VS Code 的 Playwright Test Server、MCP/语言服务 Node、
|
|
153
159
|
数据库和 Redis 不属于发布清理范围。人工查看使用进程管理器的 `-Action Status`。
|
|
160
|
+
- PowerShell 7 下的 macOS/Linux 进程管理使用真实端口、命令行、精确大小写 CWD 和启动时间回读;身份不明或 PID 复用时失败关闭,只结束已核验根进程的后代。专项回归必须在自有目录、端口和真实进程中证明当前工作区可停止、外部工作区保留,以及原始文件锁诊断;不允许为了跨平台放宽跳过门禁。
|
|
154
161
|
|
|
155
162
|
## 一键发布产物边界与缓存
|
|
156
163
|
|
|
@@ -68,6 +68,14 @@ IIS 进程启动不代表 API 可用,仍要检查 readiness 和真实登录路
|
|
|
68
68
|
|
|
69
69
|
## 本地源码运行
|
|
70
70
|
|
|
71
|
+
macOS 的一键发布探针通过 `run_with_timeout` 使用 GNU `timeout`、`gtimeout` 或仓库 Node 工具 `Microi.Server/tools/run-with-timeout.mjs`。缺少 GNU 命令不能据此判定 Docker 不健康;超时工具只停止自身创建的探针进程。官网专用选项 6 不发布 DLL/NuGet,后端发布的加密门禁保持有效。
|
|
72
|
+
|
|
73
|
+
Obfuscar 路径转换只适用于 Git Bash/MSYS/Cygwin。macOS/Linux 的 `/Users`、`/usr` 等绝对路径直接传给工具;Windows 优先 `cygpath`,无该命令时只转换完整盘符根路径。修复后使用隔离副本验证五个 DLL 和指纹,再重新执行一键脚本的 Full 与最终加密产物冒烟。
|
|
74
|
+
|
|
75
|
+
在线 AI MCP 的生产依赖和命令复制为完整、自足的运行快照,生产命令链接解析为真实文件,保留执行权限;损坏、越界及目录循环链接提前拒绝。临时构建目录清理后命令必须仍能运行,旧依赖不得残留;不放宽原制品门禁。
|
|
76
|
+
|
|
77
|
+
前端构建的 macOS 可用内存按有界 `vm_stat` 的真实页大小计算空闲页加可回收文件页,不叠加匿名非活动、压缩或预读页。解析失败和探针超时回退原生空闲量;Windows/Linux 保持原统计方式。启动预算、95% 暂停、90% 恢复及连续五秒稳定门禁不变,正式发布不能跳过保护;统计错误应修正探针,并保留共享服务。
|
|
78
|
+
|
|
71
79
|
后端:
|
|
72
80
|
|
|
73
81
|
- 使用当前仓库规定的 .NET SDK;
|
|
@@ -76,6 +76,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
76
76
|
| `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config | 接口引擎实战和规范 |
|
|
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
|
+
| `v8-engine/microi-agent.md` | microi-codex, microi-codex-installer | Microi Agent 桌面安装、连接诊断与更新 |
|
|
79
80
|
| `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-http-integration, v8-security, ai-engine, print-engine | 全部前端 V8、平台 AI、强身份验证、扫码和蓝牙打印 |
|
|
80
81
|
| `v8-engine/v8-server.md` | v8-utilities, v8-api-config, v8-http-integration, v8-security, ai-engine | 全部后端 V8、强身份票据、平台 AI 和专项路由 |
|
|
81
82
|
| `v8-engine/vs-code-plugin.md` | v8-explorer-tree, microi-client-frontend, workspace-conventions | VS Code 插件、Microi CLI、AI/MCP 初始化、类型、资源树和共享工作区 |
|
|
@@ -33,7 +33,7 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
|
|
|
33
33
|
- 配置表采用“表级 Tab + Tab 内 CollapseGroup”时,CollapseGroup 必须与成员字段写入同一个 `Tab`,并用连续 `Sort` 保证作用范围在下一个布局节点前结束。发布前必须打开真实编辑表单验证,不能只凭元数据字符串判断布局成功。
|
|
34
34
|
|
|
35
35
|
<!-- microi-progressive:begin -->
|
|
36
|
-
<!-- microi-progressive:chunk id=microi-form-layout-000 sha256=
|
|
36
|
+
<!-- microi-progressive:chunk id=microi-form-layout-000 sha256=cade6a415454aa04f5fcf840e6d9df1323ac9751c0e3c8e1b07b360007413819 -->
|
|
37
37
|
## 1. 三种分组能力速查
|
|
38
38
|
|
|
39
39
|
| 能力 | 存储位置 | 控件 | 核心作用 | 适用场景 |
|
|
@@ -44,7 +44,7 @@ Microi 吾码低代码提供 **三种** 表单分组能力,但每种都有明
|
|
|
44
44
|
| **D. 不分组(默认平铺)** | 无 | — | 全部字段在第一屏 | 总有效表单行 ≤ 6、没有复杂控件,且没有必须强调的业务分组 |
|
|
45
45
|
|
|
46
46
|
<!-- /microi-progressive:chunk -->
|
|
47
|
-
<!-- microi-progressive:chunk id=microi-form-layout-001 sha256=
|
|
47
|
+
<!-- microi-progressive:chunk id=microi-form-layout-001 sha256=f43f8c6f1c156ef3669f0c1f9a9d9d2cb7baf630d0b0cb2f48307a31f3f82ae2 -->
|
|
48
48
|
## 2. 黄金决策流程(AI 必须按此顺序判断)
|
|
49
49
|
|
|
50
50
|
### 2.1 先算“有效表单行”,禁止只数字段
|
|
@@ -95,7 +95,7 @@ Q1: 核心可见字段数、子表和强任务域?
|
|
|
95
95
|
| 工作流审批表(≤10 字段) | D. 不分组 | 禁止使用 Tab |
|
|
96
96
|
|
|
97
97
|
<!-- /microi-progressive:chunk -->
|
|
98
|
-
<!-- microi-progressive:chunk id=microi-form-layout-002 sha256=
|
|
98
|
+
<!-- microi-progressive:chunk id=microi-form-layout-002 sha256=9165f561ba90696ce130d24f71a0e56c521b5f8935eac2ddcffb852f3af5d9b2 -->
|
|
99
99
|
## 4. AI 生成表单布局的标准动作
|
|
100
100
|
|
|
101
101
|
### 4.1 必做顺序
|
|
@@ -137,7 +137,7 @@ Q1: 核心可见字段数、子表和强任务域?
|
|
|
137
137
|
V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.ClickFormTab('tabId')` 动态控制 Tab 显隐和默认选中。
|
|
138
138
|
|
|
139
139
|
<!-- /microi-progressive:chunk -->
|
|
140
|
-
<!-- microi-progressive:chunk id=microi-form-layout-003 sha256=
|
|
140
|
+
<!-- microi-progressive:chunk id=microi-form-layout-003 sha256=8da3bfbd34b7890c3796c47f71c7f4ccef13f16e5da48c3a0a0e111f22fe150a -->
|
|
141
141
|
## 5. 必填与禁止
|
|
142
142
|
|
|
143
143
|
### 5.1 必填
|
|
@@ -167,7 +167,7 @@ V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.C
|
|
|
167
167
|
- ❌ **禁止**用普通新增字段或通用表单数据写入创建布局节点;这类路径可能对目标业务表执行物理 DDL。
|
|
168
168
|
|
|
169
169
|
<!-- /microi-progressive:chunk -->
|
|
170
|
-
<!-- microi-progressive:chunk id=microi-form-layout-004 sha256=
|
|
170
|
+
<!-- microi-progressive:chunk id=microi-form-layout-004 sha256=539ae919554ca9eda5b5a26ac405181f601f4195f6a59baf1fd368d315987e6c -->
|
|
171
171
|
## 6. 验收清单
|
|
172
172
|
|
|
173
173
|
修改或新建表单布局后,AI 必须按以下顺序验收:
|
|
@@ -188,7 +188,7 @@ V8 事件中可用 `V8.HideFormTab('tabId')` / `V8.ShowFormTab('tabId')` / `V8.C
|
|
|
188
188
|
通常跳过这些运行态事件;未完成这一步不得直接判定为 Microi.Client 渲染缺陷。
|
|
189
189
|
|
|
190
190
|
<!-- /microi-progressive:chunk -->
|
|
191
|
-
<!-- microi-progressive:chunk id=microi-form-layout-005 sha256=
|
|
191
|
+
<!-- microi-progressive:chunk id=microi-form-layout-005 sha256=db6759bef83e520e5f137347070f85df1275e14dcbc742bebfdaac4da14be375 -->
|
|
192
192
|
## 9. 与其他 Skill 的关系
|
|
193
193
|
|
|
194
194
|
- 字段创建流程:`v8-table-event/SKILL.md` 写 InFormV8 / SubmitFormV8 等。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-form-layout-006 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-form-layout-006 sha256=a78b000a9fee46d8394b0b6cb186702e520ab513f7eff098f2226f1158e46970 -->
|
|
6
6
|
## 3. 三种分组的存储与配置
|
|
7
7
|
|
|
8
8
|
### 3.1 diy_table.Tabs(表级 Tab)
|
|
@@ -114,7 +114,7 @@
|
|
|
114
114
|
| 适合"互斥分组" | ✅ | ❌ |
|
|
115
115
|
|
|
116
116
|
<!-- /microi-progressive:chunk -->
|
|
117
|
-
<!-- microi-progressive:chunk id=microi-form-layout-007 sha256=
|
|
117
|
+
<!-- microi-progressive:chunk id=microi-form-layout-007 sha256=5944a965b1ac9a5c87a0e066af7f6489d2b5cd09e55fff7dc4e43d8d3a029fd6 -->
|
|
118
118
|
## 7. 反例参考(必须避免)
|
|
119
119
|
|
|
120
120
|
### 反例 1:MRP 运算 3 字段单独建 Tab
|
|
@@ -172,7 +172,7 @@ diy_table.Tabs = [
|
|
|
172
172
|
```
|
|
173
173
|
|
|
174
174
|
<!-- /microi-progressive:chunk -->
|
|
175
|
-
<!-- microi-progressive:chunk id=microi-form-layout-008 sha256=
|
|
175
|
+
<!-- microi-progressive:chunk id=microi-form-layout-008 sha256=1d93c83d865ef941f62c4e8e0dd6238489645bf53367b61e6e397543447dcdbd -->
|
|
176
176
|
## 8. 快速参考代码片段
|
|
177
177
|
|
|
178
178
|
### 8.1 MCP 创建表级 Tab
|
|
@@ -10,7 +10,7 @@ description: Microi 前端 SDK 使用规范,适用于 Vue 3、uni-app、H5、P
|
|
|
10
10
|
所有 Vue 3 前端项目都应使用 `microi.skills/microi.v8.js` 作为统一的 Microi 前端 SDK。新项目不要复制旧版 Vue2/Vuex 请求封装,也不要重新手写 token、上传、文件 URL、ApiEngine 或 FormEngine 层。
|
|
11
11
|
|
|
12
12
|
<!-- microi-progressive:begin -->
|
|
13
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-000 sha256=
|
|
13
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-000 sha256=06f944bc009a4e773ae6d5496d435d3e4a4fdb23d59107dac9cedffcfdf18f86 -->
|
|
14
14
|
## 必须采用的模式
|
|
15
15
|
|
|
16
16
|
将 SDK 复制到项目源码目录,通常是:
|
|
@@ -56,7 +56,7 @@ export function createApp() {
|
|
|
56
56
|
页面和业务接口模块应从项目请求模块导入已配置实例或薄封装函数,不要直接从标准 skill 文件导入。
|
|
57
57
|
|
|
58
58
|
<!-- /microi-progressive:chunk -->
|
|
59
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-001 sha256=
|
|
59
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-001 sha256=f1c2ab1fadc01dbe8ea4b9de98f7c02192c3f2cfed8b792fe62f8ef516b67d83 -->
|
|
60
60
|
## 必须委托 SDK 的能力
|
|
61
61
|
|
|
62
62
|
- `ApiEngine.Run`:直接调用 `/apiengine/{key}` 时使用 `V8.ApiEngine.Run(key, data)`。
|
|
@@ -71,7 +71,7 @@ export function createApp() {
|
|
|
71
71
|
`Microi.Client` 主后台运行时已内置前后端同构的 `V8.Http.Get/Post/Patch` 及对应 Response 方法;表单事件、按钮 V8 等宿主前端新代码必须优先使用 `V8.Http`,旧 `V8.Post/Get` 仅作兼容保留,其参数和兼容规则以 `v8-http-integration/SKILL.md` 为准。独立项目使用本 SDK、且不在主后台 V8 宿主中时,才使用 SDK 自身的小写 `V8.get/post`、`ApiEngine`、`FormEngine`;不要把它们与宿主旧版大写 `V8.Post/Get` 混为一谈,也不要假设浏览器可以绕过第三方接口的 CORS。
|
|
72
72
|
|
|
73
73
|
<!-- /microi-progressive:chunk -->
|
|
74
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-002 sha256=
|
|
74
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-002 sha256=713c6662f9300075831b51b56d219cd6a7562e01837ca1934de03e220dabb611 -->
|
|
75
75
|
## 登录与验证码封装
|
|
76
76
|
|
|
77
77
|
SDK 或项目请求模块必须提供登录所需的系统配置和验证码薄封装,不要让页面散落手写。
|
|
@@ -122,7 +122,7 @@ AI 生成的前端微服务不能假定永远在主平台 iframe/micro-app 宿
|
|
|
122
122
|
- 宿主额外传入 `permissionContext={sysMenuId,moduleEngineKey,diyTableId}`。SDK/服务层需要访问 FormEngine 时使用真实授权 `moduleEngineKey`;该对象不能代替后端权限,也不能成为放宽匿名接口的理由。
|
|
123
123
|
|
|
124
124
|
<!-- /microi-progressive:chunk -->
|
|
125
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-003 sha256=
|
|
125
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-003 sha256=d5d1984e6cd4efbb2340f984473146c66bb342d60bb571454c457f5673b1c68f -->
|
|
126
126
|
## 请求头规则
|
|
127
127
|
|
|
128
128
|
SDK 的 `buildHeaders` 必须集中处理所有请求头,不能让页面、业务 wrapper 或上传逻辑各自拼接租户和鉴权头。
|
|
@@ -134,7 +134,7 @@ SDK 的 `buildHeaders` 必须集中处理所有请求头,不能让页面、业
|
|
|
134
134
|
- 验收时检查真实网络请求:不得出现 `osclient: demo, demo`、`Authorization: Bearer xxx, Bearer xxx` 这类逗号合并值。
|
|
135
135
|
|
|
136
136
|
<!-- /microi-progressive:chunk -->
|
|
137
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-004 sha256=
|
|
137
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-004 sha256=af471c5be701b78f12dc037a4e1ce2289c6443c0921de1546659fefc29216ddd -->
|
|
138
138
|
## 上传规则
|
|
139
139
|
|
|
140
140
|
`V8.uploadFile` 是 Microi 前端唯一允许的上传入口。SDK 实现必须:
|
|
@@ -153,7 +153,7 @@ SDK 的 `buildHeaders` 必须集中处理所有请求头,不能让页面、业
|
|
|
153
153
|
当上传突然报 `移动端文件上传路径不合法!` 时,先检查实际 multipart 表单字段和请求头。在 Microi 移动端/会员 Token 流程中,后端会在 HDFS 上传前校验 `Path`;错误的 `Content-Type` 会导致后端读不到表单字段,并表现为路径错误。
|
|
154
154
|
|
|
155
155
|
<!-- /microi-progressive:chunk -->
|
|
156
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-005 sha256=
|
|
156
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-005 sha256=1a9d0a33adbff849decf01d114e72cad96f80a6122f0b281cecf9092bbcd0c42 -->
|
|
157
157
|
## 项目封装规则
|
|
158
158
|
|
|
159
159
|
面向业务页面的函数名要保持稳定。如果已有项目导出 `callEngine`、`formEngineGet`、`getImageUrl`、`parseImages` 或 `uploadFile`,保留这些导出,内部委托给 `V8`。这样既能统一 SDK,又能避免大面积改页面。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-006 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-006 sha256=e3a4f78365b0d189c55e03eb4cc1f36deaa39b3fe5580ccb4b7b77f8b443be8b -->
|
|
6
6
|
## Token、当前登录用户与当前终端登录协议
|
|
7
7
|
|
|
8
8
|
Microi 后端不是只保存一个全局 Token。每个租户、每个 `sys_user` 在 Redis 中维护一份 `CurrentToken`,其中 `CurrentUser` 表示平台当前登录用户,`Tokens` 表示该用户的多个当前终端登录。每个终端项至少包含 `Token`、`ClientType`、`Did`、`IP`、`CreateTime`、`UpdateTime`;退出、管理员清除登录信息、同终端重新登录或 Token 轮换都会影响该列表。
|
|
@@ -84,13 +84,13 @@ const result = await V8.refreshToken();
|
|
|
84
84
|
- 管理员调用 `ClearUserLoginInfo` 后,旧 Token 返回 `SessionMissing` 或等价明确原因,前端不再循环续签。
|
|
85
85
|
|
|
86
86
|
<!-- /microi-progressive:chunk -->
|
|
87
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-007 sha256=
|
|
87
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-007 sha256=32ff522b3d30d94eb6cc1747b1f1238e35c1c3d43091f3ce308067e320ecb2a4 -->
|
|
88
88
|
## 仅支持 Vue 3
|
|
89
89
|
|
|
90
90
|
新的 Microi 前端工作只支持 Vue 3。不要把 Vue2、Vuex、`Vue.prototype` 或 Vue2/uni-app 条件编译加入 `microi.v8.js`。状态管理属于项目本身,通常使用 Pinia 或本地组合函数;SDK 只负责平台访问、请求、鉴权、上传、资源 URL 和小工具。
|
|
91
91
|
|
|
92
92
|
<!-- /microi-progressive:chunk -->
|
|
93
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-008 sha256=
|
|
93
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-008 sha256=0c59d00b2e54dd61d194d6246dd787a456ab8f12d4abe6dc330b002f41d7ee26 -->
|
|
94
94
|
## Key-Value 枚举的跨端约定(强制)
|
|
95
95
|
|
|
96
96
|
- PC、UniApp、小程序和 Web 页面遇到简单枚举时,应从字段元数据或业务接口返回的公开 `{Key,Value}` 选项获取数据源;`Value` 只负责展示,`Key` 才能进入表单值、URL、缓存键和接口筛选参数。
|
|
@@ -99,7 +99,7 @@ const result = await V8.refreshToken();
|
|
|
99
99
|
- 兼容历史数据时,客户端可以短期识别旧 Value,但提交和新 URL 必须立即归一为 Key;长期迁移由服务端完成并回读验证。
|
|
100
100
|
|
|
101
101
|
<!-- /microi-progressive:chunk -->
|
|
102
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-009 sha256=
|
|
102
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-009 sha256=2e428f404342ad21af261e5f5876e34e2b9fc9455791bf0ad73ff4ad5b3e2ed0 -->
|
|
103
103
|
## 界面层独立
|
|
104
104
|
|
|
105
105
|
SDK 不得导入 Element Plus、uni-ui、uView、TDesign、FirstUI、Pinia、Vue Router 或 axios。界面反馈通过可配置适配器提供:
|
|
@@ -112,7 +112,7 @@ SDK 不得导入 Element Plus、uni-ui、uView、TDesign、FirstUI、Pinia、Vue
|
|
|
112
112
|
这样同一个 SDK 才能同时用于 uni-app、PC 网站、后台扩展页面和文档演示。
|
|
113
113
|
|
|
114
114
|
<!-- /microi-progressive:chunk -->
|
|
115
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-010 sha256=
|
|
115
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-010 sha256=ee237c45899f7204d3da1a2d589a89268c2db2a9b765f68fc7097eadf8da7104 -->
|
|
116
116
|
## 验证
|
|
117
117
|
|
|
118
118
|
将项目改为使用 SDK 后:
|
|
@@ -131,7 +131,7 @@ SDK 不得导入 Element Plus、uni-ui、uView、TDesign、FirstUI、Pinia、Vue
|
|
|
131
131
|
- 自动化检查:生产构建后扫描 JS 产物不得包含本地 ApiBase,并在正式域名上下文断言接口请求 origin 等于配置的生产 API;本地 `npm run dev` 仍应命中开发 API。
|
|
132
132
|
|
|
133
133
|
<!-- /microi-progressive:chunk -->
|
|
134
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-011 sha256=
|
|
134
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-011 sha256=81ac75e383ea5a32ae45aeff1276fc2b8f56141961e70cc3956ae818aaf2fa1d -->
|
|
135
135
|
## 搭配 MCI-UI
|
|
136
136
|
|
|
137
137
|
SDK 负责平台能力,MCI-UI 负责产品界面。新的 Microi Vue3 项目应同时使用:
|
|
@@ -144,7 +144,7 @@ SDK 负责平台能力,MCI-UI 负责产品界面。新的 Microi Vue3 项目
|
|
|
144
144
|
不要在 SDK 内解决界面状态、骨架屏、富文本间距或安全区布局。这一层应使用 MCI-UI 组件处理。
|
|
145
145
|
|
|
146
146
|
<!-- /microi-progressive:chunk -->
|
|
147
|
-
<!-- microi-progressive:chunk id=microi-frontend-sdk-012 sha256=
|
|
147
|
+
<!-- microi-progressive:chunk id=microi-frontend-sdk-012 sha256=d869adb0abd87d9ba03b58faa84944a61895773a6c3642f5c20c8a03e315a2ce -->
|
|
148
148
|
## MicroApp 宿主 Token 同步
|
|
149
149
|
|
|
150
150
|
Vue3 前端微服务通过 `window.microApp.getData()` 接收主平台上下文时,不能只把 `token` 放进普通配置对象后假设请求会自动携带。标准 `microi.v8.js` 必须支持 `config.token`,且 `getToken()` 要优先读取运行时 token,再回退到 `storage[tokenKey]`。微服务必须复用同一个 V8 客户端实例,不能在每次按钮点击时重新 `createMicroiV8()`。
|
|
@@ -44,6 +44,7 @@ description: Microi 前端微服务 MicroService 开发与交付指南。用于
|
|
|
44
44
|
- `sys_microiservice`:已发布运行时。
|
|
45
45
|
- `sys_microiservice_page`:页面路由。
|
|
46
46
|
- 编译后的 HTML/JS/CSS/图片放公有 HDFS,源码不公开。
|
|
47
|
+
- 官方应用的独立体验入口统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶固定根承载最新版编译文件、`/{Version}/` 承载不可变历史编译文件;私有桶采用相同相对目录承载对应源码文件。宿主内部的 `/micro-app/{AppKey}/{RoutePath}` 是菜单路由,不是对外 CDN 体验地址。发布后核对 CDN 刷新完成、入口及资源可访问、业务 API 仍指向目标租户。
|
|
47
48
|
|
|
48
49
|
不能从 `sys_microiservice` 公有产物反推完整源码,也不把大 JS/CSS 长期塞数据库 JSON。
|
|
49
50
|
|
|
@@ -12,7 +12,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
12
12
|
自动触发:只要任务涉及 Microi 移动端应用、H5、微信小程序、App 构建、uni-app 项目、登录页、tabbar、首页、我的页、工作台、报告页、视觉重设计或移动端验收,即使用户没有明确点名,也要应用本 skill。
|
|
13
13
|
|
|
14
14
|
<!-- microi-progressive:begin -->
|
|
15
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=
|
|
15
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=9f83607349ba6e305c3d2993de8eeceab70c344557e5dfa2a5be964492ef4685 -->
|
|
16
16
|
## 1. 导航和快捷入口必须使用真实图标
|
|
17
17
|
|
|
18
18
|
底部导航、首页快捷入口、会员中心快捷项、九宫格操作和悬浮操作,必须在文字上方或旁边显示可识别的图标。
|
|
@@ -40,7 +40,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
40
40
|
- UniApp H5 桌面预览可以显示手机壳;真机和浏览器移动设备仿真必须自动去壳并铺满视口。自动化测试要分别断言桌面手机壳存在、移动端手机壳标题隐藏,同时检查所有底部菜单包含真实图标节点。
|
|
41
41
|
|
|
42
42
|
<!-- /microi-progressive:chunk -->
|
|
43
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-001 sha256=
|
|
43
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-001 sha256=4e1b247852aa9f235a26f756d415ebb9fb922f2fea0569bda1bdc8e0b91c4d1c -->
|
|
44
44
|
## 1.1 包体资源必须按用途分层
|
|
45
45
|
|
|
46
46
|
- 构建前扫描图片、音频、视频、字体和第三方资源;公开的大资源优先上传到当前租户 HDFS 公有桶并通过 `sys_config.FileServer`/CDN 引用,敏感资源使用私有桶。
|
|
@@ -51,7 +51,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
51
51
|
- 迁移到 HDFS/CDN 后必须从构建产物确认原大文件已经消失,并从业务记录/配置回读相对 `Path`;页面要先加载当前租户 `SysConfig.FileServer`,不得以源码硬编码 CDN 域名替代运行期配置。远程资源加载失败时只能回退到轻量本地占位,不得把原大图重新塞回主包。
|
|
52
52
|
|
|
53
53
|
<!-- /microi-progressive:chunk -->
|
|
54
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-002 sha256=
|
|
54
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-002 sha256=b8e83d75588362899921af62996577277ba77b2fab86767317d62607cec80a84 -->
|
|
55
55
|
## 2. 不要猜测 Microi 前端 SDK 登录接口
|
|
56
56
|
|
|
57
57
|
编写登录代码前,先检查本地项目 SDK 封装,例如 `src/utils/microi.v8.js`、`src/utils/api.js`,或标准 `microi.uniapp` 登录实现。
|
|
@@ -66,6 +66,9 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
66
66
|
- 登录实现后的第一个测试必须包含真实点击登录按钮,并检查控制台和网络请求。
|
|
67
67
|
- 登录必须传移动端 `_ClientType` 和稳定 `did`,并在 `App.onShow` 调用标准 SDK 的 `resumeAuthSession(false)`。系统休眠后不能只等定时器恢复。
|
|
68
68
|
- 登录失效提示必须原样展示后端 `Msg`;如果 Token 已过期,显示过期分钟/小时/天,如果 Token 属于其它租户,显示 Token 租户与当前租户。详细协议读取 `microi-frontend-sdk/SKILL.md`。
|
|
69
|
+
- 业务守卫、分享接收、手动登录与鉴权失效必须共用登录导航锁;导航失败或登录页真实到达后释放,不能依赖固定延时。UniApp `invoke` 返回 `false` 不会调用 `complete`,被去重的入口不得保留自己的等待锁。
|
|
70
|
+
- 登录完成优先恢复原业务实例,连续登录页一次移出;历史登录页夹在业务栈中时清栈进入目标。成功返回任务必须去重、在页面销毁时取消,并在执行前复核会话;迟到的失效弹窗不能打断新登录。
|
|
71
|
+
- 业务页先保存入口参数再鉴权;`onLoad` 未登录早退后,`onShow` 必须恢复一次初始化,并合并并发加载。初始化期间会话失效后仍需允许登录返回重取,不能永久显示骨架屏或丢失分享的记录 Id。
|
|
69
72
|
|
|
70
73
|
禁止:
|
|
71
74
|
- 凭空编造 SDK 子对象。
|
|
@@ -76,9 +79,10 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
76
79
|
- H5 路由 `/pages/login/login` 或项目登录路由打开时无控制台错误。
|
|
77
80
|
- 点击账号登录不会抛出 `V8.Login.Login is not a function`。
|
|
78
81
|
- 使用真实系统账号登录后,必须验证“我的”页显示已登录角色,首页/工单/报告不再出现未登录提示,刷新页面或切换底部导航后仍保持一致。
|
|
82
|
+
- 自动回归覆盖并发引导、去重取消无 `complete`、失败重试、历史重复登录栈、登录成功后返回及业务页继续初始化、旧弹窗迟到和页面销毁;真实开发者工具与真机另验冷启动及分享接收,不能用模拟会话代替授权登录。
|
|
79
83
|
|
|
80
84
|
<!-- /microi-progressive:chunk -->
|
|
81
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-003 sha256=
|
|
85
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-003 sha256=a35f20404acbf61814f9475610f881f7c60effc0ce3bb8797cee300cd3349ba7 -->
|
|
82
86
|
## 2.1 登录验证码必须跟随 Sys_Config.EnableCaptcha
|
|
83
87
|
|
|
84
88
|
PC 端、H5、App、微信小程序或任何自定义前端只要调用 `/api/SysUser/login`、`/api/SysUser/Login` 或 `V8.Login(param)`,都必须先读取 `Sys_Config` 的 `EnableCaptcha` 配置,并按配置决定是否展示和提交图形验证码。
|
|
@@ -104,7 +108,7 @@ PC 端、H5、App、微信小程序或任何自定义前端只要调用 `/api/Sy
|
|
|
104
108
|
- 参考标准实现:`microi.uniapp/src/pages/login/index.vue`。
|
|
105
109
|
|
|
106
110
|
<!-- /microi-progressive:chunk -->
|
|
107
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-004 sha256=
|
|
111
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-004 sha256=22bdaf38588f251016e115f1ad15a433e827fb2191041d55ecad42cda94253d1 -->
|
|
108
112
|
## 3. OsClient 请求头不得重复
|
|
109
113
|
|
|
110
114
|
Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览器、代理或服务端运行时可能把 `OsClient` 和 `osclient` 这类大小写重复键合并成 `demo, demo`,导致租户识别失败。
|
|
@@ -126,7 +130,7 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
126
130
|
- 微信/支付宝/飞书/抖音等小程序授权登录接口也必须检查,例如 `/apiengine/miniprogram-login`,不得出现 `osclient: demo, demo` 这类合并值。
|
|
127
131
|
|
|
128
132
|
<!-- /microi-progressive:chunk -->
|
|
129
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-005 sha256=
|
|
133
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-005 sha256=1394c7fb8e59b25553e2f9b71ab7f8cf03290b6930c8d8436123bc6048ad2435 -->
|
|
130
134
|
## 3.1 小程序授权登录必须可追踪、可读错误
|
|
131
135
|
|
|
132
136
|
微信开发者工具的模拟授权与体验版真机调用不是同一条真实链路。手机号授权登录接口必须按阶段诊断,不能只返回“手机号登录失败”。
|
|
@@ -145,7 +149,7 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
145
149
|
- 体验版真机复测授权登录;不能只以开发者工具模拟成功作为上线依据。
|
|
146
150
|
|
|
147
151
|
<!-- /microi-progressive:chunk -->
|
|
148
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-006 sha256=
|
|
152
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-006 sha256=feb9ba3267bdf1f6394c425b45dd71e19ac4382ae05549d6e1b6b664c6517a19 -->
|
|
149
153
|
## 3.1.1 手机号快速验证前置页不得混淆腾讯官方
|
|
150
154
|
|
|
151
155
|
- 调用手机号快速验证组件前展示的登录页、弹窗、按钮、说明、分享标题和失败提示中,禁止出现“微信”“微信官方”“微信登录”“一键登录”等可能让用户误认为腾讯官方功能或官方产品的文案。
|
|
@@ -154,7 +158,7 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
154
158
|
- `build:mp-weixin` 后必须扫描登录页源码和 `dist/build/mp-weixin/pages/login/` 产物中的可见文案,并对手机号快速验证前置页截图;发现混淆词、官方 Logo 或近似元素时阻止上传和提审。
|
|
155
159
|
|
|
156
160
|
<!-- /microi-progressive:chunk -->
|
|
157
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-007 sha256=
|
|
161
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-007 sha256=7598db1fdabfe127c2be7593b83dc3a246b1db852d9c0d4001f849d3e97aa273 -->
|
|
158
162
|
## 3.2 微信小程序每个页面默认支持分享
|
|
159
163
|
|
|
160
164
|
小程序项目必须默认支持转发给朋友和分享到朋友圈,不能只给首页或公开页添加分享。登录和权限控制属于访问阶段,不得用来隐藏分享能力。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-008 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-008 sha256=765335189d85b558ad29ba73c04d1cf078101ee94819f969195b50440a82106f -->
|
|
6
6
|
## 4. 重要按钮必须带图标
|
|
7
7
|
|
|
8
8
|
醒目的主操作必须使用打磨过的图标加文字按钮。
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
- 确认主操作有图标、合适的加载文案和按下反馈。
|
|
24
24
|
|
|
25
25
|
<!-- /microi-progressive:chunk -->
|
|
26
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-009 sha256=
|
|
26
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-009 sha256=e3c66bd92ca059235a7a3b0ece2fdfa598a41eaa149d0ee3a0d24d0d822a9f58 -->
|
|
27
27
|
## 4.1 模块列表优先使用声明式业务卡片
|
|
28
28
|
|
|
29
29
|
Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆叠。优先在
|
|
@@ -53,7 +53,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
53
53
|
- 批量选择后出现底部操作条;取消选择、执行按钮、更多菜单均可单手点击。
|
|
54
54
|
|
|
55
55
|
<!-- /microi-progressive:chunk -->
|
|
56
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-010 sha256=
|
|
56
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-010 sha256=2ddd560cf3620f8fb7f3cf64d62566206430ee14e6ac380a3023c5b9047b4f46 -->
|
|
57
57
|
## 5. 首屏文字和浮层不得重叠
|
|
58
58
|
|
|
59
59
|
移动端首屏常组合大首屏区域和悬浮快捷面板。这个布局必须视觉检查,因为过大的中文标题和激进的负边距容易造成难看的换行或遮挡主按钮。
|
|
@@ -74,7 +74,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
74
74
|
- 检查首屏标题、主/次按钮和后续悬浮面板是否裁切或重叠。
|
|
75
75
|
|
|
76
76
|
<!-- /microi-progressive:chunk -->
|
|
77
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-011 sha256=
|
|
77
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-011 sha256=b599e047e6b7a3688e4264a4d4b334e220e9798cbc13326e85a06f52bf20ce12 -->
|
|
78
78
|
## 5.1 未登录/授权提示必须在可用内容区居中
|
|
79
79
|
|
|
80
80
|
未登录、未授权、无权限等提示模块不能贴在页面顶部。页面上方有 hero/header,下方有 tabBar 或固定底栏时,提示卡片和“立即登录/去授权”按钮必须在剩余可用内容区上下左右居中。
|
|
@@ -94,7 +94,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
94
94
|
- 375px、430px、iOS 刘海屏/灵动岛和 Android 状态栏场景均不得出现贴顶或按钮文字偏移。
|
|
95
95
|
|
|
96
96
|
<!-- /microi-progressive:chunk -->
|
|
97
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-012 sha256=
|
|
97
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-012 sha256=a363aaead9b632f3533e2f046f39cf7b579a91b92ef4e33d42f848d5a7538515 -->
|
|
98
98
|
## 5.2 自定义导航页面必须通过安全区与微信胶囊门禁
|
|
99
99
|
|
|
100
100
|
`navigationStyle: custom` 代表应用接管了系统导航区域,页面壳必须同时负责状态栏、刘海/灵动岛、微信右上角胶囊和底部手势区,不能把这一责任留给业务页面自行估算。
|
|
@@ -113,7 +113,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
113
113
|
- 发现任意页面被遮挡时,必须修复共享页面壳并重跑全路由;禁止只给当前截图页面增加固定 padding。
|
|
114
114
|
|
|
115
115
|
<!-- /microi-progressive:chunk -->
|
|
116
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=
|
|
116
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=207765d0398738f24566763a2481469f4fc63e8a0b5f00abd292fe8a1cdd225a -->
|
|
117
117
|
## 5.3 全屏工具页必须遵守返回状态栈
|
|
118
118
|
|
|
119
119
|
- AI 助手、扫码工作台、全屏预览等独占视口功能需要手机侧滑返回时,优先使用独立路由承载;普通 `position:fixed` 蒙层不能冒充页面历史。
|
|
@@ -122,7 +122,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
122
122
|
- 自动化至少覆盖关闭按钮、Android 返回键/`onBackPress`、微信侧滑返回三条路径,并验证返回后原页面和滚动状态仍然可用。
|
|
123
123
|
|
|
124
124
|
<!-- /microi-progressive:chunk -->
|
|
125
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=
|
|
125
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=1451e6ffbb0c0d29d8362e400540e3fa4f9f38a2402a9faf93de4cce7b1c9b4c -->
|
|
126
126
|
## 5.4 微信浮动入口必须通过真实事件桥门禁
|
|
127
127
|
|
|
128
128
|
- UniApp 自定义组件中的浮动按钮、拖拽助手和悬浮客服不得只做 H5 点击测试。必须在微信运行时找到真实组件节点,派发 `touchstart/touchend`,并断言页面栈、弹层状态或业务动作确实变化。
|
|
@@ -131,7 +131,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
131
131
|
- 自动化需增加对照按钮:同页普通按钮可点击、浮动入口也可点击,才能确认不是自动化连接或页面整体失效。
|
|
132
132
|
|
|
133
133
|
<!-- /microi-progressive:chunk -->
|
|
134
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=
|
|
134
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=8377f92a7456bd68e83867e893f1c9e8eec9edf0bba2a3f434c5bce75a9e2d00 -->
|
|
135
135
|
## 6. 后台菜单必须规划为至少两级
|
|
136
136
|
|
|
137
137
|
真实业务系统的后台菜单不能简单堆成一批一级菜单。
|
|
@@ -159,7 +159,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
159
159
|
- 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
|
|
160
160
|
|
|
161
161
|
<!-- /microi-progressive:chunk -->
|
|
162
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=
|
|
162
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=0c1632d28f986156f8d70b2710dc0219de4643b4b9c61771ac544a18f4c355ac -->
|
|
163
163
|
## 7. 移动端页面需要动效,但动效必须有用
|
|
164
164
|
|
|
165
165
|
移动端产品不应像静态后台表单。
|
|
@@ -181,7 +181,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
181
181
|
- 没有动画导致横向溢出、文字裁切或固定栏抖动。
|
|
182
182
|
|
|
183
183
|
<!-- /microi-progressive:chunk -->
|
|
184
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=
|
|
184
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=2dcca5305da25f543181ae23550547cb3e3761aebae2843c5fc60e7848153176 -->
|
|
185
185
|
## 8. 登录页必须是直接登录界面
|
|
186
186
|
|
|
187
187
|
登录页不能强迫用户先在两个身份标签之间切换才能登录。
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
> 按需读取;本文件由 SKILL.md 的原章节无损拆分。
|
|
4
4
|
|
|
5
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-018 sha256=
|
|
5
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-018 sha256=b6e3138b7f398fad5b03253d07c1eb30e26da5c3df8ff1975117e5a3a282fd58 -->
|
|
6
6
|
## 9. 主题切换必须真实且全局生效
|
|
7
7
|
|
|
8
8
|
当客户要求增加另一种视觉风格时,除非用户明确要求删除,否则要把当前已认可设计保留为一个命名主题,而不是直接覆盖。
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
- 报告详情页必须逐主题截图,检查 `INSPECTION REPORT`、状态胶囊、封面标题、摘要卡、报告正文和富文本在当前主题下都有足够对比度。
|
|
40
40
|
|
|
41
41
|
<!-- /microi-progressive:chunk -->
|
|
42
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-019 sha256=
|
|
42
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-019 sha256=f2ca99aebb70273d991f5142e88bd1e02ff42782df5a8e7e180de297fba0faac -->
|
|
43
43
|
## 10. 报告/列表详情必须保留用户身份
|
|
44
44
|
|
|
45
45
|
从列表进入详情时必须保留调用者身份模型。即使打开的是同一个视觉报告详情页,员工、客户和公开/分享路线也可能需要不同接口。
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
- 确认点击可见卡片后不会发生意外登录跳转。
|
|
61
61
|
|
|
62
62
|
<!-- /microi-progressive:chunk -->
|
|
63
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-020 sha256=
|
|
63
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-020 sha256=95487284aa5f9b1b3a0fb557845b3400af0355e4b2ebf6abebbef461e8ec8485 -->
|
|
64
64
|
## 11. 角色与权限必须基于 sys_user.RoleIds 建模
|
|
65
65
|
|
|
66
66
|
移动端和后台不能只区分“已登录/未登录”。企业应用通常至少有内部员工、售后师傅、客服、客户账号等角色,必须在建模阶段明确角色、菜单权限和数据权限。
|
|
@@ -93,7 +93,7 @@
|
|
|
93
93
|
- 用未绑定的小程序手机号账号登录,截图确认“我的”页出现申请绑定身份入口;提交申请后后台能看到待审核记录;通过审核前数据权限不提前开放,通过审核后对应客户数据或内部工作台能力才出现。
|
|
94
94
|
|
|
95
95
|
<!-- /microi-progressive:chunk -->
|
|
96
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-021 sha256=
|
|
96
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-021 sha256=13405c8ce231e9db8920cd8e1c4e0db26a32c1b5ac967113abee1391985ebfcd -->
|
|
97
97
|
## 审核后的会话与角色同步(强制)
|
|
98
98
|
|
|
99
99
|
- 审核通过后的数据库角色、服务端 DiyToken 身份投影、SDK 用户缓存、页面 capability 和申请状态必须一致,禁止以“退出重登后正常”作为验收成功。
|