@microi.net/cli 5.9.1 → 5.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +3 -3
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/microi-skills.meta.json +207 -204
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +46 -28
- package/skills/README.md +2 -2
- package/skills/microi-docs-coverage/references/capability-map.md +1 -1
- package/skills/microi-mobile-app-quality/SKILL.md +9 -3
- package/skills/microi-mobile-app-quality/references/mobile-first-delivery.md +75 -0
- 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 +11 -8
- 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 +6 -5
- package/skills/microi-uniapp-frontend/SKILL.md +13 -8
- 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 +4 -4
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
"url": "https://microi.net"
|
|
6
6
|
},
|
|
7
7
|
"description": "Microi吾码官方 AI 插件市场",
|
|
8
|
-
"version": "5.9.
|
|
8
|
+
"version": "5.9.2",
|
|
9
9
|
"plugins": [
|
|
10
10
|
{
|
|
11
11
|
"name": "microi",
|
|
12
12
|
"source": ".",
|
|
13
13
|
"description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
|
|
14
|
-
"version": "5.9.
|
|
14
|
+
"version": "5.9.2",
|
|
15
15
|
"strict": true
|
|
16
16
|
}
|
|
17
17
|
]
|
|
@@ -5,13 +5,13 @@
|
|
|
5
5
|
"url": "https://microi.net"
|
|
6
6
|
},
|
|
7
7
|
"description": "Microi吾码官方 AI 插件市场",
|
|
8
|
-
"version": "5.9.
|
|
8
|
+
"version": "5.9.2",
|
|
9
9
|
"plugins": [
|
|
10
10
|
{
|
|
11
11
|
"name": "microi",
|
|
12
12
|
"source": ".",
|
|
13
13
|
"description": "Microi吾码 AI 开发插件:服务器连接、Skills、MCP、V8 全量同步与低代码交付",
|
|
14
|
-
"version": "5.9.
|
|
14
|
+
"version": "5.9.2",
|
|
15
15
|
"strict": true
|
|
16
16
|
}
|
|
17
17
|
]
|
package/assets/build-meta.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"builtAt": "2026-10-
|
|
3
|
-
"version": "5.9.
|
|
2
|
+
"builtAt": "2026-10-11T08:09:47.299Z",
|
|
3
|
+
"version": "5.9.2",
|
|
4
4
|
"sourceProducts": [
|
|
5
5
|
"vscode-extension",
|
|
6
6
|
"microi-cli",
|
|
@@ -14,6 +14,6 @@
|
|
|
14
14
|
"cli": "f9f346bce30623280ce56afd4d0d516918a869f8e264ae55863c8f5d7c28002b",
|
|
15
15
|
"router": "761b54007451348da5f6491245635c15c33663cae6c1811005839bc2312886e2",
|
|
16
16
|
"broker": "fffe3a7bbbc0c842d69c2eda09a0490ce0055a060f56d6a6d6230046e8952749",
|
|
17
|
-
"dshBundle": "
|
|
17
|
+
"dshBundle": "8f7a9b90bc278a6e5e8eadff122006909cd3167dd398a26b9988df27616ca74c"
|
|
18
18
|
}
|
|
19
19
|
}
|
package/cordis.patch.yml
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
serverName: microi
|
|
8
8
|
transport: stdio
|
|
9
9
|
command: !!js process.execPath
|
|
10
|
-
args: ["-e","/*\n * DeepSeek Harness 通过 profile bundle 加载此 `node -e` 引导脚本。\n * DSH 不保证 MCP 子进程 cwd 位于 npm 包根,因此按 DSH_HOME/profile 定位\n * 当前版本的 @microi.net/cli,再复用 Codex 同源适配器与多连接路由器。\n */\nconst fs = require('node:fs');\nconst os = require('node:os');\nconst path = require('node:path');\nconst packageName = '@microi.net/cli';\nconst expectedVersion = '5.9.
|
|
10
|
+
args: ["-e","/*\n * DeepSeek Harness 通过 profile bundle 加载此 `node -e` 引导脚本。\n * DSH 不保证 MCP 子进程 cwd 位于 npm 包根,因此按 DSH_HOME/profile 定位\n * 当前版本的 @microi.net/cli,再复用 Codex 同源适配器与多连接路由器。\n */\nconst fs = require('node:fs');\nconst os = require('node:os');\nconst path = require('node:path');\nconst packageName = '@microi.net/cli';\nconst expectedVersion = '5.9.2';\n\nfunction readJson(filePath) {\n try { return JSON.parse(fs.readFileSync(filePath, 'utf8')); }\n catch { return undefined; }\n}\n\nfunction expandHome(value) {\n if (value === '~') return os.homedir();\n if (value.startsWith('~/') || value.startsWith('~\\\\')) return path.join(os.homedir(), value.slice(2));\n return value;\n}\n\nfunction validRoot(value) {\n const root = path.resolve(value);\n const pkg = readJson(path.join(root, 'package.json'));\n const patch = path.join(root, 'cordis.patch.yml');\n const adapter = path.join(root, 'scripts', 'mcp-codex-stdio-adapter.js');\n const router = path.join(root, 'scripts', 'microi-codex-router.js');\n if (pkg?.name !== packageName || pkg?.version !== expectedVersion) return undefined;\n if (pkg?.dsh?.bundle?.patch !== './cordis.patch.yml') return undefined;\n if (![patch, adapter, router].every(filePath => fs.existsSync(filePath))) return undefined;\n return { root: fs.realpathSync(root), adapter, router, modifiedAt: fs.statSync(router).mtimeMs };\n}\n\nfunction findPlugin() {\n const explicit = String(process.env.MICROI_DSH_PLUGIN_ROOT || '').trim();\n if (explicit) {\n const plugin = validRoot(explicit);\n if (!plugin) throw new Error(`MICROI_DSH_PLUGIN_ROOT 不是版本 ${expectedVersion} 的有效 Microi DSH bundle:${explicit}`);\n return plugin;\n }\n const configuredHome = String(process.env.DSH_HOME || '').trim();\n const dshHome = path.resolve(expandHome(configuredHome || path.join(os.homedir(), '.dsh')));\n const profilesRoot = path.join(dshHome, 'profiles');\n const candidates = [];\n if (fs.existsSync(profilesRoot)) {\n for (const entry of fs.readdirSync(profilesRoot, { withFileTypes: true })) {\n if (!entry.isDirectory() || entry.name === 'node_modules') continue;\n const root = path.join(profilesRoot, entry.name, 'node_modules', '@microi.net', 'cli');\n const plugin = validRoot(root);\n if (plugin) candidates.push(plugin);\n }\n }\n candidates.sort((left, right) => right.modifiedAt - left.modifiedAt);\n if (!candidates[0]) throw new Error(`未在 ${profilesRoot} 找到版本 ${expectedVersion} 的 ${packageName}`);\n return candidates[0];\n}\n\ntry {\n const plugin = findPlugin();\n process.env.MICROI_DSH_PLUGIN_ROOT = plugin.root;\n process.env.MICROI_CODEX_PLUGIN_ROOT = plugin.root;\n process.env.MICROI_TOOL_SOURCE = 'dsh';\n process.env.MICROI_TOOL_VERSION = expectedVersion;\n process.env.MICROI_WORKSPACE_ROOT = process.env.MICROI_WORKSPACE_ROOT || process.cwd();\n process.argv[2] = plugin.router;\n require(plugin.adapter);\n} catch (error) {\n console.error(`[microi-dsh-bootstrap] ${error instanceof Error ? error.message : String(error)}`);\n process.exit(1);\n}\n"]
|
|
11
11
|
env:
|
|
12
12
|
MICROI_TOOL_SOURCE: dsh
|
|
13
13
|
cwd: !!js process.cwd()
|
package/package.json
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
1
|
{
|
|
2
|
-
"builtAt": "2026-10-
|
|
2
|
+
"builtAt": "2026-10-11T08:16:19.893Z",
|
|
3
3
|
"source": "../microi.skills",
|
|
4
4
|
"extension": {
|
|
5
5
|
"name": "v8-engine",
|
|
6
|
-
"version": "5.9.
|
|
6
|
+
"version": "5.9.2",
|
|
7
7
|
"publisher": "Microi"
|
|
8
8
|
},
|
|
9
9
|
"skills": {
|
|
10
|
-
"version": "5.9.
|
|
10
|
+
"version": "5.9.2",
|
|
11
11
|
"versionRule": "Microi version uses three numeric parts. Each publish increments the last part; when a part exceeds 9 it carries to the previous part: 1.0.9 -> 1.1.0, 1.9.9 -> 2.0.0.",
|
|
12
12
|
"managedBy": "Microi.Agent/bump-version.js"
|
|
13
13
|
},
|
|
14
14
|
"output": {
|
|
15
15
|
"dir": "dist/microi.skills",
|
|
16
|
-
"files":
|
|
16
|
+
"files": 191,
|
|
17
17
|
"skills": 68,
|
|
18
|
-
"bytes":
|
|
18
|
+
"bytes": 2774816
|
|
19
19
|
},
|
|
20
20
|
"fileHashes": {
|
|
21
|
-
".microi-skills-version.json": "
|
|
22
|
-
".progressive-disclosure-manifest.json": "
|
|
23
|
-
"README.md": "
|
|
21
|
+
".microi-skills-version.json": "3c2b9612aac8d832c2cd87a5502140b663904dc6c1d63bd35223069acce73e80",
|
|
22
|
+
".progressive-disclosure-manifest.json": "5d15ad2fbd9deff1cd00309b96ee6f193f10fd93c75cbd32cd984c5d00589ee5",
|
|
23
|
+
"README.md": "8a35975bc00b1a17f5a43b05c87332bc2d5c9d45b08efd57c01062addb380cc1",
|
|
24
24
|
"ai-engine/SKILL.md": "b09ccf9e1dc08d2ca3cbf9e7d091d07bc4794b8d60ebfe959ba61aaefdc8d34b",
|
|
25
25
|
"ai-engine/agents/openai.yaml": "40deb07801006a46b9a7f0020d13251955eeadd04c8e591160210479936f8b5b",
|
|
26
26
|
"ai-engine/references/ai-employees.md": "59c2eb348acd18ceb584dbe6244a7864d8a20c149a9ec82472c6b2a3b8bbdcd6",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"microi-deployment/SKILL.md": "250921425cf4058a53d41245e8801c00287daa5294d925f170d58bc05dc0775b",
|
|
64
64
|
"microi-deployment/references/deployment-matrix.md": "e84fcaa8b58ec4cd4c5fa9cfa70e3f6b0b2660f3e0b466c216268e41935b5cf7",
|
|
65
65
|
"microi-docs-coverage/SKILL.md": "655640f8291a66123d27128b44f9a583fae6f4121a50cde36e47a00a1065e37a",
|
|
66
|
-
"microi-docs-coverage/references/capability-map.md": "
|
|
66
|
+
"microi-docs-coverage/references/capability-map.md": "344e801894b6e3f416d3bcbdff79b0b624d5e1e47714ce1c73a0412c95e948df",
|
|
67
67
|
"microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "99504246f531c127ec268f913c3ca516a1e10d4eefe24b72225f932ba048a5f8",
|
|
68
68
|
"microi-form-engine/SKILL.md": "db470e797156153b9c0b3537e957bda70f65db4b076720f98619af9cba9cafe5",
|
|
69
69
|
"microi-form-engine/references/component-catalog.md": "872bac09afac47b0e6f7c67394938e1f8c12003cdcae66104523676347ccd1d7",
|
|
@@ -75,9 +75,10 @@
|
|
|
75
75
|
"microi-left-right-layout/SKILL.md": "179866b36b343f88804074b7b48e9d5f47834ddeebe0e4b5d63d07dea81f3bab",
|
|
76
76
|
"microi-microservice/SKILL.md": "710b6c550250aab89293a504633d7eaa3008752d6fd586020805fbc5bb3ed745",
|
|
77
77
|
"microi-microservice/references/runtime-delivery.md": "f257bd6e47a2133b3d13bf2d2ecf4bff686506ed45f041001270552deb0ea69d",
|
|
78
|
-
"microi-mobile-app-quality/SKILL.md": "
|
|
79
|
-
"microi-mobile-app-quality/references/
|
|
80
|
-
"microi-mobile-app-quality/references/progressive-
|
|
78
|
+
"microi-mobile-app-quality/SKILL.md": "adbd8cb10a945cb7050a6df49565a981525341e5323dc31eef26ff31a3de5265",
|
|
79
|
+
"microi-mobile-app-quality/references/mobile-first-delivery.md": "d535a826a05643fd6141d17494eaeb178e80a7122d2427e561cc61c843154344",
|
|
80
|
+
"microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "67bef6fee547c1ce285e94d181f7a883bb05cc5fd2081645d6c932c89a6e8af2",
|
|
81
|
+
"microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "56fdb32726c1e63a2562bd0cb2d1873eaec8be2afdffbbe744fc9ae73ca8250c",
|
|
81
82
|
"microi-solution-quotation/SKILL.md": "f5a32d2cbdbe72cd490a6ae785f0e5cf4779ae8e1e27ca02b3cf575170b7bdfe",
|
|
82
83
|
"microi-solution-quotation/agents/openai.yaml": "a9429da9e31fb159360e0eb77cc7275c1f55c4b7ff4dd83d64d3d5070d018e66",
|
|
83
84
|
"microi-solution-quotation/scripts/build_solution_quote.py": "af8a56c57958ac97a6d4ccbb376fd90da6de4c093082b9b61054babff0a79d1a",
|
|
@@ -91,9 +92,9 @@
|
|
|
91
92
|
"microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "a211a839b8bbb1b267fd6a4f2c5b911ba8ba5c06bbd83421b5446fbacbd5ee41",
|
|
92
93
|
"microi-ui/SKILL.md": "78ffca8064865c0eccafdc7ce56d181fb26052679b8285dbe2eb6f89f9e76867",
|
|
93
94
|
"microi-ui/references/progressive-01-移动端场景蓝图.md": "c2ec47cc017c7002a4b9ab4a089b92448faf0c3be9c02d3038d4e52832f78e16",
|
|
94
|
-
"microi-uniapp-frontend/SKILL.md": "
|
|
95
|
+
"microi-uniapp-frontend/SKILL.md": "df10952435aa33ca00ec821610383bb542151cc2367f13525b3f135c86da0786",
|
|
95
96
|
"microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "18b72b3aa7a38da1186cb51dea78d89aaa6ff2e0c2ac9401ca85a81af4c3dadb",
|
|
96
|
-
"microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "
|
|
97
|
+
"microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "2860a71540b7256041d2215e8654031f4bca09b3c115ec0b34fc7c31db3d18fb",
|
|
97
98
|
"microi.v8.js": "89ab7a2e3dcb8e4312e95febcbffdf82b5b714d32f50c986eab6ce730173d174",
|
|
98
99
|
"microi/SKILL.md": "d80e3564871d0e222f2bfc5e815225e99f99e1e2bd4cdd037131af46955e1610",
|
|
99
100
|
"module-engine/SKILL.md": "0e7eeee161dc256841e277fa7efd4dae761f03b4370465960e6241f1b00a26d5",
|
|
@@ -210,196 +211,197 @@
|
|
|
210
211
|
"workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "256b5c737c37fd03092d922b3112b2046c7e1bb46f30c4e04f44e8d669d6660b"
|
|
211
212
|
},
|
|
212
213
|
"fileVersions": {
|
|
213
|
-
".microi-skills-version.json": "5.9.
|
|
214
|
-
".progressive-disclosure-manifest.json": "5.9.
|
|
215
|
-
"README.md": "5.9.
|
|
216
|
-
"ai-engine/SKILL.md": "5.9.
|
|
217
|
-
"ai-engine/agents/openai.yaml": "5.9.
|
|
218
|
-
"ai-engine/references/ai-employees.md": "5.9.
|
|
219
|
-
"ai-engine/references/self-hosted-digital-human.md": "5.9.
|
|
220
|
-
"ai-platform-governance/SKILL.md": "5.9.
|
|
221
|
-
"ai-platform-governance/references/progressive-01-功能开关.md": "5.9.
|
|
222
|
-
"app-store/SKILL.md": "5.9.
|
|
223
|
-
"app-store/agents/openai.yaml": "5.9.
|
|
224
|
-
"business-blueprint/SKILL.md": "5.9.
|
|
225
|
-
"datasource-engine/SKILL.md": "5.9.
|
|
226
|
-
"datasource-engine/agents/openai.yaml": "5.9.
|
|
227
|
-
"dos-orm/SKILL.md": "5.9.
|
|
228
|
-
"dos-orm/references/api-reference.md": "5.9.
|
|
229
|
-
"email-engine/SKILL.md": "5.9.
|
|
230
|
-
"email-engine/references/v8-email.md": "5.9.
|
|
231
|
-
"job-engine/SKILL.md": "5.9.
|
|
232
|
-
"job-engine/agents/openai.yaml": "5.9.
|
|
233
|
-
"message-notification/SKILL.md": "5.9.
|
|
234
|
-
"message-notification/agents/openai.yaml": "5.9.
|
|
235
|
-
"message-notification/references/contracts.md": "5.9.
|
|
236
|
-
"microi-ai-app-auth.js": "5.9.
|
|
237
|
-
"microi-ai-application/SKILL.md": "5.9.
|
|
238
|
-
"microi-ai-application/agents/openai.yaml": "5.9.
|
|
239
|
-
"microi-ai-application/references/frontend-baseline.md": "5.9.
|
|
240
|
-
"microi-client-frontend/SKILL.md": "5.9.
|
|
241
|
-
"microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.9.
|
|
242
|
-
"microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.9.
|
|
243
|
-
"microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.9.
|
|
244
|
-
"microi-codex-installer/SKILL.md": "5.9.
|
|
245
|
-
"microi-codex-installer/agents/openai.yaml": "5.9.
|
|
246
|
-
"microi-codex/SKILL.md": "5.9.
|
|
247
|
-
"microi-datasource-mapping/SKILL.md": "5.9.
|
|
248
|
-
"microi-db-schema/SKILL.md": "5.9.
|
|
249
|
-
"microi-db-schema/agents/openai.yaml": "5.9.
|
|
250
|
-
"microi-db-schema/references/core-tables.md": "5.9.
|
|
251
|
-
"microi-db-schema/references/form-component-options.md": "5.9.
|
|
252
|
-
"microi-db-schema/references/schema-overview.md": "5.9.
|
|
253
|
-
"microi-db-schema/references/schema.md": "5.9.
|
|
254
|
-
"microi-db-schema/references/table-catalog.md": "5.9.
|
|
255
|
-
"microi-deployment/SKILL.md": "5.9.
|
|
256
|
-
"microi-deployment/references/deployment-matrix.md": "5.9.
|
|
257
|
-
"microi-docs-coverage/SKILL.md": "5.9.
|
|
258
|
-
"microi-docs-coverage/references/capability-map.md": "5.9.
|
|
259
|
-
"microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.9.
|
|
260
|
-
"microi-form-engine/SKILL.md": "5.9.
|
|
261
|
-
"microi-form-engine/references/component-catalog.md": "5.9.
|
|
262
|
-
"microi-form-engine/references/data-source-events.md": "5.9.
|
|
263
|
-
"microi-form-layout/SKILL.md": "5.9.
|
|
264
|
-
"microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.9.
|
|
265
|
-
"microi-frontend-sdk/SKILL.md": "5.9.
|
|
266
|
-
"microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.9.
|
|
267
|
-
"microi-left-right-layout/SKILL.md": "5.9.
|
|
268
|
-
"microi-microservice/SKILL.md": "5.9.
|
|
269
|
-
"microi-microservice/references/runtime-delivery.md": "5.9.
|
|
270
|
-
"microi-mobile-app-quality/SKILL.md": "5.9.
|
|
271
|
-
"microi-mobile-app-quality/references/
|
|
272
|
-
"microi-mobile-app-quality/references/progressive-
|
|
273
|
-
"microi-
|
|
274
|
-
"microi-solution-quotation/
|
|
275
|
-
"microi-solution-quotation/
|
|
276
|
-
"microi-
|
|
277
|
-
"microi-sso/
|
|
278
|
-
"microi-sso/references/
|
|
279
|
-
"microi-sso/references/
|
|
280
|
-
"microi-sso/references/
|
|
281
|
-
"microi-
|
|
282
|
-
"microi-system-delivery/
|
|
283
|
-
"microi-system-delivery/references/progressive-
|
|
284
|
-
"microi-
|
|
285
|
-
"microi-ui/
|
|
286
|
-
"microi-
|
|
287
|
-
"microi-uniapp-frontend/
|
|
288
|
-
"microi-uniapp-frontend/references/progressive-
|
|
289
|
-
"microi
|
|
290
|
-
"microi
|
|
291
|
-
"
|
|
292
|
-
"module-engine/
|
|
293
|
-
"
|
|
294
|
-
"ocr-engine/
|
|
295
|
-
"
|
|
296
|
-
"page-engine/
|
|
297
|
-
"page-engine/
|
|
298
|
-
"page-engine/references/progressive-
|
|
299
|
-
"
|
|
300
|
-
"
|
|
301
|
-
"playwright-e2e/
|
|
302
|
-
"playwright-e2e/references/progressive-
|
|
303
|
-
"playwright-e2e/references/progressive-
|
|
304
|
-
"playwright-e2e/references/progressive-
|
|
305
|
-
"
|
|
306
|
-
"
|
|
307
|
-
"
|
|
308
|
-
"report-engine/
|
|
309
|
-
"
|
|
310
|
-
"scripts/
|
|
311
|
-
"scripts/
|
|
312
|
-
"scripts/
|
|
313
|
-
"
|
|
314
|
-
"search-engine/
|
|
315
|
-
"
|
|
316
|
-
"
|
|
317
|
-
"system-observability/
|
|
318
|
-
"
|
|
319
|
-
"translate-engine/
|
|
320
|
-
"
|
|
321
|
-
"ui-design/
|
|
322
|
-
"ui-design/assets/pattern-showcase/
|
|
323
|
-
"ui-design/assets/pattern-showcase/
|
|
324
|
-
"ui-design/assets/
|
|
325
|
-
"ui-design/
|
|
326
|
-
"ui-design/references/
|
|
327
|
-
"ui-design/references/
|
|
328
|
-
"ui-design/references/
|
|
329
|
-
"ui-design/references/
|
|
330
|
-
"ui-design/references/progressive-
|
|
331
|
-
"ui-design/references/progressive-
|
|
332
|
-
"ui-design/references/progressive-
|
|
333
|
-
"ui-design/references/progressive-
|
|
334
|
-
"ui-design/references/progressive-
|
|
335
|
-
"ui-design/references/progressive-
|
|
336
|
-
"ui-design/references/progressive-
|
|
337
|
-
"
|
|
338
|
-
"
|
|
339
|
-
"unity-integration/
|
|
340
|
-
"unity-integration/
|
|
341
|
-
"unity-integration/references/
|
|
342
|
-
"unity-integration/references/
|
|
343
|
-
"unity-integration/references/
|
|
344
|
-
"
|
|
345
|
-
"v8-
|
|
346
|
-
"v8-
|
|
347
|
-
"v8-crud-api/
|
|
348
|
-
"v8-crud-api/references/progressive-
|
|
349
|
-
"v8-
|
|
350
|
-
"v8-
|
|
351
|
-
"v8-
|
|
352
|
-
"v8-export-import/
|
|
353
|
-
"v8-export-import/references/progressive-
|
|
354
|
-
"v8-export-import/references/progressive-
|
|
355
|
-
"v8-
|
|
356
|
-
"v8-file-upload/
|
|
357
|
-
"v8-file-upload/references/progressive-
|
|
358
|
-
"v8-
|
|
359
|
-
"v8-
|
|
360
|
-
"v8-frontend-events/
|
|
361
|
-
"v8-frontend-events/references/bluetooth-print.md": "5.9.
|
|
362
|
-
"v8-frontend-events/references/
|
|
363
|
-
"v8-
|
|
364
|
-
"v8-http-integration/
|
|
365
|
-
"v8-http-integration/references/progressive-
|
|
366
|
-
"v8-
|
|
367
|
-
"v8-image-processing/
|
|
368
|
-
"v8-image-processing/
|
|
369
|
-
"v8-
|
|
370
|
-
"v8-menu-buttons/
|
|
371
|
-
"v8-menu-buttons/references/progressive-
|
|
372
|
-
"v8-menu-buttons/references/progressive-
|
|
373
|
-
"v8-
|
|
374
|
-
"v8-
|
|
375
|
-
"v8-mq-mqtt/
|
|
376
|
-
"v8-mq-mqtt/references/
|
|
377
|
-
"v8-mq-mqtt/
|
|
378
|
-
"v8-
|
|
379
|
-
"v8-
|
|
380
|
-
"v8-security/
|
|
381
|
-
"v8-security/references/progressive-
|
|
382
|
-
"v8-
|
|
383
|
-
"v8-
|
|
384
|
-
"v8-table-event/
|
|
385
|
-
"v8-table-event/references/progressive-
|
|
386
|
-
"v8-
|
|
387
|
-
"v8-tcp-integration/
|
|
388
|
-
"v8-
|
|
389
|
-
"v8-
|
|
390
|
-
"v8-utilities/
|
|
391
|
-
"v8-utilities/references/
|
|
392
|
-
"v8-utilities/references/
|
|
393
|
-
"v8-
|
|
394
|
-
"v8-workflow/
|
|
395
|
-
"v8-workflow/references/
|
|
396
|
-
"
|
|
397
|
-
"vision-engine/
|
|
398
|
-
"vision-engine/
|
|
399
|
-
"
|
|
400
|
-
"workspace-conventions/
|
|
401
|
-
"workspace-conventions/references/progressive-
|
|
402
|
-
"workspace-conventions/references/progressive-
|
|
214
|
+
".microi-skills-version.json": "5.9.2",
|
|
215
|
+
".progressive-disclosure-manifest.json": "5.9.2",
|
|
216
|
+
"README.md": "5.9.2",
|
|
217
|
+
"ai-engine/SKILL.md": "5.9.2",
|
|
218
|
+
"ai-engine/agents/openai.yaml": "5.9.2",
|
|
219
|
+
"ai-engine/references/ai-employees.md": "5.9.2",
|
|
220
|
+
"ai-engine/references/self-hosted-digital-human.md": "5.9.2",
|
|
221
|
+
"ai-platform-governance/SKILL.md": "5.9.2",
|
|
222
|
+
"ai-platform-governance/references/progressive-01-功能开关.md": "5.9.2",
|
|
223
|
+
"app-store/SKILL.md": "5.9.2",
|
|
224
|
+
"app-store/agents/openai.yaml": "5.9.2",
|
|
225
|
+
"business-blueprint/SKILL.md": "5.9.2",
|
|
226
|
+
"datasource-engine/SKILL.md": "5.9.2",
|
|
227
|
+
"datasource-engine/agents/openai.yaml": "5.9.2",
|
|
228
|
+
"dos-orm/SKILL.md": "5.9.2",
|
|
229
|
+
"dos-orm/references/api-reference.md": "5.9.2",
|
|
230
|
+
"email-engine/SKILL.md": "5.9.2",
|
|
231
|
+
"email-engine/references/v8-email.md": "5.9.2",
|
|
232
|
+
"job-engine/SKILL.md": "5.9.2",
|
|
233
|
+
"job-engine/agents/openai.yaml": "5.9.2",
|
|
234
|
+
"message-notification/SKILL.md": "5.9.2",
|
|
235
|
+
"message-notification/agents/openai.yaml": "5.9.2",
|
|
236
|
+
"message-notification/references/contracts.md": "5.9.2",
|
|
237
|
+
"microi-ai-app-auth.js": "5.9.2",
|
|
238
|
+
"microi-ai-application/SKILL.md": "5.9.2",
|
|
239
|
+
"microi-ai-application/agents/openai.yaml": "5.9.2",
|
|
240
|
+
"microi-ai-application/references/frontend-baseline.md": "5.9.2",
|
|
241
|
+
"microi-client-frontend/SKILL.md": "5.9.2",
|
|
242
|
+
"microi-client-frontend/references/progressive-01-3-动态按钮系统.md": "5.9.2",
|
|
243
|
+
"microi-client-frontend/references/progressive-02-8-运行时高频坑复盘.md": "5.9.2",
|
|
244
|
+
"microi-client-frontend/references/progressive-03-vue3-前端微服务宿主规则.md": "5.9.2",
|
|
245
|
+
"microi-codex-installer/SKILL.md": "5.9.2",
|
|
246
|
+
"microi-codex-installer/agents/openai.yaml": "5.9.2",
|
|
247
|
+
"microi-codex/SKILL.md": "5.9.2",
|
|
248
|
+
"microi-datasource-mapping/SKILL.md": "5.9.2",
|
|
249
|
+
"microi-db-schema/SKILL.md": "5.9.2",
|
|
250
|
+
"microi-db-schema/agents/openai.yaml": "5.9.2",
|
|
251
|
+
"microi-db-schema/references/core-tables.md": "5.9.2",
|
|
252
|
+
"microi-db-schema/references/form-component-options.md": "5.9.2",
|
|
253
|
+
"microi-db-schema/references/schema-overview.md": "5.9.2",
|
|
254
|
+
"microi-db-schema/references/schema.md": "5.9.2",
|
|
255
|
+
"microi-db-schema/references/table-catalog.md": "5.9.2",
|
|
256
|
+
"microi-deployment/SKILL.md": "5.9.2",
|
|
257
|
+
"microi-deployment/references/deployment-matrix.md": "5.9.2",
|
|
258
|
+
"microi-docs-coverage/SKILL.md": "5.9.2",
|
|
259
|
+
"microi-docs-coverage/references/capability-map.md": "5.9.2",
|
|
260
|
+
"microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs": "5.9.2",
|
|
261
|
+
"microi-form-engine/SKILL.md": "5.9.2",
|
|
262
|
+
"microi-form-engine/references/component-catalog.md": "5.9.2",
|
|
263
|
+
"microi-form-engine/references/data-source-events.md": "5.9.2",
|
|
264
|
+
"microi-form-layout/SKILL.md": "5.9.2",
|
|
265
|
+
"microi-form-layout/references/progressive-01-3-三种分组的存储与配置.md": "5.9.2",
|
|
266
|
+
"microi-frontend-sdk/SKILL.md": "5.9.2",
|
|
267
|
+
"microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md": "5.9.2",
|
|
268
|
+
"microi-left-right-layout/SKILL.md": "5.9.2",
|
|
269
|
+
"microi-microservice/SKILL.md": "5.9.2",
|
|
270
|
+
"microi-microservice/references/runtime-delivery.md": "5.9.2",
|
|
271
|
+
"microi-mobile-app-quality/SKILL.md": "5.9.2",
|
|
272
|
+
"microi-mobile-app-quality/references/mobile-first-delivery.md": "5.9.2",
|
|
273
|
+
"microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md": "5.9.2",
|
|
274
|
+
"microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md": "5.9.2",
|
|
275
|
+
"microi-solution-quotation/SKILL.md": "5.9.2",
|
|
276
|
+
"microi-solution-quotation/agents/openai.yaml": "5.9.2",
|
|
277
|
+
"microi-solution-quotation/scripts/build_solution_quote.py": "5.9.2",
|
|
278
|
+
"microi-sso/SKILL.md": "5.9.2",
|
|
279
|
+
"microi-sso/references/acceptance.md": "5.9.2",
|
|
280
|
+
"microi-sso/references/configuration-and-security.md": "5.9.2",
|
|
281
|
+
"microi-sso/references/inbound.md": "5.9.2",
|
|
282
|
+
"microi-sso/references/outbound.md": "5.9.2",
|
|
283
|
+
"microi-system-delivery/SKILL.md": "5.9.2",
|
|
284
|
+
"microi-system-delivery/references/progressive-01-标准工作流.md": "5.9.2",
|
|
285
|
+
"microi-system-delivery/references/progressive-02-自动化测试必须覆盖的坑.md": "5.9.2",
|
|
286
|
+
"microi-ui/SKILL.md": "5.9.2",
|
|
287
|
+
"microi-ui/references/progressive-01-移动端场景蓝图.md": "5.9.2",
|
|
288
|
+
"microi-uniapp-frontend/SKILL.md": "5.9.2",
|
|
289
|
+
"microi-uniapp-frontend/references/progressive-01-移动端分类-双栏列表独立滚动.md": "5.9.2",
|
|
290
|
+
"microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md": "5.9.2",
|
|
291
|
+
"microi.v8.js": "5.9.2",
|
|
292
|
+
"microi/SKILL.md": "5.9.2",
|
|
293
|
+
"module-engine/SKILL.md": "5.9.2",
|
|
294
|
+
"module-engine/references/module-config.md": "5.9.2",
|
|
295
|
+
"ocr-engine/SKILL.md": "5.9.2",
|
|
296
|
+
"ocr-engine/agents/openai.yaml": "5.9.2",
|
|
297
|
+
"page-engine/SKILL.md": "5.9.2",
|
|
298
|
+
"page-engine/examples/compact-dashboard.json": "5.9.2",
|
|
299
|
+
"page-engine/references/progressive-01-所有组件类型.md": "5.9.2",
|
|
300
|
+
"page-engine/references/progressive-02-版本历史-并发保存与回滚.md": "5.9.2",
|
|
301
|
+
"performance-testing/SKILL.md": "5.9.2",
|
|
302
|
+
"playwright-e2e/SKILL.md": "5.9.2",
|
|
303
|
+
"playwright-e2e/references/progressive-01-全自动登录-免验证码-但不免密码-必读.md": "5.9.2",
|
|
304
|
+
"playwright-e2e/references/progressive-02-文字对比度与可读性自动化检查-必做.md": "5.9.2",
|
|
305
|
+
"playwright-e2e/references/progressive-03-microi-helper-模板.md": "5.9.2",
|
|
306
|
+
"playwright-e2e/references/progressive-04-ci-建议.md": "5.9.2",
|
|
307
|
+
"print-engine/SKILL.md": "5.9.2",
|
|
308
|
+
"production-readonly-audit/SKILL.md": "5.9.2",
|
|
309
|
+
"report-engine/SKILL.md": "5.9.2",
|
|
310
|
+
"report-engine/agents/openai.yaml": "5.9.2",
|
|
311
|
+
"scripts/optimize-progressive-disclosure.mjs": "5.9.2",
|
|
312
|
+
"scripts/refresh-progressive-disclosure.mjs": "5.9.2",
|
|
313
|
+
"scripts/sync-embedded-skills.mjs": "5.9.2",
|
|
314
|
+
"scripts/validate-progressive-disclosure.mjs": "5.9.2",
|
|
315
|
+
"search-engine/SKILL.md": "5.9.2",
|
|
316
|
+
"search-engine/agents/openai.yaml": "5.9.2",
|
|
317
|
+
"spider-engine/SKILL.md": "5.9.2",
|
|
318
|
+
"system-observability/SKILL.md": "5.9.2",
|
|
319
|
+
"system-observability/references/memory-incident-triage.md": "5.9.2",
|
|
320
|
+
"translate-engine/SKILL.md": "5.9.2",
|
|
321
|
+
"translate-engine/agents/openai.yaml": "5.9.2",
|
|
322
|
+
"ui-design/SKILL.md": "5.9.2",
|
|
323
|
+
"ui-design/assets/pattern-showcase/app.js": "5.9.2",
|
|
324
|
+
"ui-design/assets/pattern-showcase/index.html": "5.9.2",
|
|
325
|
+
"ui-design/assets/pattern-showcase/styles.css": "5.9.2",
|
|
326
|
+
"ui-design/assets/templates/MCI-DESIGN.md": "5.9.2",
|
|
327
|
+
"ui-design/references/design-pattern-library.md": "5.9.2",
|
|
328
|
+
"ui-design/references/mci-design-contract.md": "5.9.2",
|
|
329
|
+
"ui-design/references/motion-and-media.md": "5.9.2",
|
|
330
|
+
"ui-design/references/product-flow-recipes.md": "5.9.2",
|
|
331
|
+
"ui-design/references/progressive-01-颜色体系-css-variables-支持主题切换.md": "5.9.2",
|
|
332
|
+
"ui-design/references/progressive-02-字体.md": "5.9.2",
|
|
333
|
+
"ui-design/references/progressive-03-动效规范-丰富但不卡.md": "5.9.2",
|
|
334
|
+
"ui-design/references/progressive-04-组件风格速查.md": "5.9.2",
|
|
335
|
+
"ui-design/references/progressive-05-移动端专用规范.md": "5.9.2",
|
|
336
|
+
"ui-design/references/progressive-06-主题切换实现.md": "5.9.2",
|
|
337
|
+
"ui-design/references/progressive-07-速查-从头搭建一个移动端页面.md": "5.9.2",
|
|
338
|
+
"ui-design/references/progressive-08-表单分组规范-tabs-vs-collapsegroup-强制.md": "5.9.2",
|
|
339
|
+
"uniapp-mall-assets/SKILL.md": "5.9.2",
|
|
340
|
+
"unity-integration/SKILL.md": "5.9.2",
|
|
341
|
+
"unity-integration/agents/openai.yaml": "5.9.2",
|
|
342
|
+
"unity-integration/references/ai-app-delivery.md": "5.9.2",
|
|
343
|
+
"unity-integration/references/sdk-api.md": "5.9.2",
|
|
344
|
+
"unity-integration/references/toolbox-migration.md": "5.9.2",
|
|
345
|
+
"unity-integration/references/webgl-hosting.md": "5.9.2",
|
|
346
|
+
"v8-api-config/SKILL.md": "5.9.2",
|
|
347
|
+
"v8-cache-pattern/SKILL.md": "5.9.2",
|
|
348
|
+
"v8-crud-api/SKILL.md": "5.9.2",
|
|
349
|
+
"v8-crud-api/references/progressive-01-查询列表-分页.md": "5.9.2",
|
|
350
|
+
"v8-crud-api/references/progressive-02-where-条件语法速查.md": "5.9.2",
|
|
351
|
+
"v8-debugging/SKILL.md": "5.9.2",
|
|
352
|
+
"v8-explorer-tree/SKILL.md": "5.9.2",
|
|
353
|
+
"v8-export-import/SKILL.md": "5.9.2",
|
|
354
|
+
"v8-export-import/references/progressive-01-excellayout-高级自由布局.md": "5.9.2",
|
|
355
|
+
"v8-export-import/references/progressive-02-powerpoint-导出.md": "5.9.2",
|
|
356
|
+
"v8-export-import/references/progressive-03-安全-性能注意.md": "5.9.2",
|
|
357
|
+
"v8-file-upload/SKILL.md": "5.9.2",
|
|
358
|
+
"v8-file-upload/references/progressive-01-公有桶-vs-私有桶.md": "5.9.2",
|
|
359
|
+
"v8-file-upload/references/progressive-02-office-文件在线编辑版本号规则.md": "5.9.2",
|
|
360
|
+
"v8-formengine-http/SKILL.md": "5.9.2",
|
|
361
|
+
"v8-frontend-events/SKILL.md": "5.9.2",
|
|
362
|
+
"v8-frontend-events/references/bluetooth-print-api.md": "5.9.2",
|
|
363
|
+
"v8-frontend-events/references/bluetooth-print.md": "5.9.2",
|
|
364
|
+
"v8-frontend-events/references/progressive-01-列表事件.md": "5.9.2",
|
|
365
|
+
"v8-http-integration/SKILL.md": "5.9.2",
|
|
366
|
+
"v8-http-integration/references/progressive-01-get-请求.md": "5.9.2",
|
|
367
|
+
"v8-http-integration/references/progressive-02-错误处理模式.md": "5.9.2",
|
|
368
|
+
"v8-image-processing/SKILL.md": "5.9.2",
|
|
369
|
+
"v8-image-processing/agents/openai.yaml": "5.9.2",
|
|
370
|
+
"v8-image-processing/references/api-reference.md": "5.9.2",
|
|
371
|
+
"v8-menu-buttons/SKILL.md": "5.9.2",
|
|
372
|
+
"v8-menu-buttons/references/progressive-01-2-按钮对象-schema.md": "5.9.2",
|
|
373
|
+
"v8-menu-buttons/references/progressive-02-8-模式-f-后台任务按钮-长任务.md": "5.9.2",
|
|
374
|
+
"v8-menu-buttons/references/progressive-03-10-反模式-避免.md": "5.9.2",
|
|
375
|
+
"v8-mongodb/SKILL.md": "5.9.2",
|
|
376
|
+
"v8-mq-mqtt/SKILL.md": "5.9.2",
|
|
377
|
+
"v8-mq-mqtt/references/mqtt-production.md": "5.9.2",
|
|
378
|
+
"v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-物联网.md": "5.9.2",
|
|
379
|
+
"v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs": "5.9.2",
|
|
380
|
+
"v8-saas-multi-tenant/SKILL.md": "5.9.2",
|
|
381
|
+
"v8-security/SKILL.md": "5.9.2",
|
|
382
|
+
"v8-security/references/progressive-01-2-权限校验.md": "5.9.2",
|
|
383
|
+
"v8-security/references/progressive-02-7-日志记录.md": "5.9.2",
|
|
384
|
+
"v8-sql-query/SKILL.md": "5.9.2",
|
|
385
|
+
"v8-table-event/SKILL.md": "5.9.2",
|
|
386
|
+
"v8-table-event/references/progressive-01-informv8-js-表单打开事件.md": "5.9.2",
|
|
387
|
+
"v8-table-event/references/progressive-02-前端事件名-v8-eventname-可能的值.md": "5.9.2",
|
|
388
|
+
"v8-tcp-integration/SKILL.md": "5.9.2",
|
|
389
|
+
"v8-tcp-integration/agents/openai.yaml": "5.9.2",
|
|
390
|
+
"v8-template-engine/SKILL.md": "5.9.2",
|
|
391
|
+
"v8-utilities/SKILL.md": "5.9.2",
|
|
392
|
+
"v8-utilities/references/client-api-index.md": "5.9.2",
|
|
393
|
+
"v8-utilities/references/platform-http-routes.md": "5.9.2",
|
|
394
|
+
"v8-utilities/references/server-api-index.md": "5.9.2",
|
|
395
|
+
"v8-workflow/SKILL.md": "5.9.2",
|
|
396
|
+
"v8-workflow/references/progressive-01-节点开始-v8-事件.md": "5.9.2",
|
|
397
|
+
"v8-workflow/references/workflow-configuration.md": "5.9.2",
|
|
398
|
+
"vision-engine/SKILL.md": "5.9.2",
|
|
399
|
+
"vision-engine/agents/openai.yaml": "5.9.2",
|
|
400
|
+
"vision-engine/references/architecture-and-acceptance.md": "5.9.2",
|
|
401
|
+
"workspace-conventions/SKILL.md": "5.9.2",
|
|
402
|
+
"workspace-conventions/references/progressive-01-版本更新日志保护规则-强制.md": "5.9.2",
|
|
403
|
+
"workspace-conventions/references/progressive-02-microi-net-api-本地启动约定.md": "5.9.2",
|
|
404
|
+
"workspace-conventions/references/progressive-03-cli-与-ide-插件错版共存约定.md": "5.9.2"
|
|
403
405
|
},
|
|
404
406
|
"files": [
|
|
405
407
|
".microi-skills-version.json",
|
|
@@ -460,6 +462,7 @@
|
|
|
460
462
|
"microi-microservice/SKILL.md",
|
|
461
463
|
"microi-microservice/references/runtime-delivery.md",
|
|
462
464
|
"microi-mobile-app-quality/SKILL.md",
|
|
465
|
+
"microi-mobile-app-quality/references/mobile-first-delivery.md",
|
|
463
466
|
"microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md",
|
|
464
467
|
"microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md",
|
|
465
468
|
"microi-solution-quotation/SKILL.md",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "5.9.
|
|
2
|
+
"version": "5.9.2",
|
|
3
3
|
"versionRule": "Microi version uses three numeric parts. Each publish increments the last part; when a part exceeds 9 it carries to the previous part: 1.0.9 -> 1.1.0, 1.9.9 -> 2.0.0.",
|
|
4
4
|
"managedBy": "Microi.Agent/bump-version.js",
|
|
5
|
-
"updatedAt": "2026-10-
|
|
5
|
+
"updatedAt": "2026-10-11T08:09:45.325Z"
|
|
6
6
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 1,
|
|
3
|
-
"generatedAt": "2026-10-
|
|
3
|
+
"generatedAt": "2026-10-11T08:16:17.880Z",
|
|
4
4
|
"policy": {
|
|
5
5
|
"maxEntryLines": 285,
|
|
6
6
|
"referenceBudgetLines": 245,
|
|
@@ -534,18 +534,18 @@
|
|
|
534
534
|
]
|
|
535
535
|
},
|
|
536
536
|
"microi-mobile-app-quality": {
|
|
537
|
-
"originalSha256": "
|
|
538
|
-
"originalLines":
|
|
539
|
-
"prefixSha256": "
|
|
540
|
-
"prefixBytes":
|
|
541
|
-
"entryLines":
|
|
537
|
+
"originalSha256": "9daf042cef2c4cee073ec259f19fd8e8623f7e83de7d83c9b1a5a8bc381b0216",
|
|
538
|
+
"originalLines": 562,
|
|
539
|
+
"prefixSha256": "f6538a190ba1835e623cef831221fed3ccdc90159c7002c3df038aaaed0f5c19",
|
|
540
|
+
"prefixBytes": 1577,
|
|
541
|
+
"entryLines": 204,
|
|
542
542
|
"chunks": [
|
|
543
543
|
{
|
|
544
544
|
"id": "microi-mobile-app-quality-000",
|
|
545
545
|
"ordinal": 0,
|
|
546
546
|
"destination": "microi-mobile-app-quality/SKILL.md",
|
|
547
|
-
"sha256": "
|
|
548
|
-
"lines":
|
|
547
|
+
"sha256": "0bb2395379c14ff6e32e659c1703128665838fc5a2e58a7d53a2d8f8ae63be47",
|
|
548
|
+
"lines": 40,
|
|
549
549
|
"heading": "1. 导航和快捷入口必须使用真实图标"
|
|
550
550
|
},
|
|
551
551
|
{
|
|
@@ -560,8 +560,8 @@
|
|
|
560
560
|
"id": "microi-mobile-app-quality-002",
|
|
561
561
|
"ordinal": 2,
|
|
562
562
|
"destination": "microi-mobile-app-quality/SKILL.md",
|
|
563
|
-
"sha256": "
|
|
564
|
-
"lines":
|
|
563
|
+
"sha256": "bbbd05cdab08058194f97b492c7d09cea748dcfdba6e7fac5063b5d67d078c89",
|
|
564
|
+
"lines": 32,
|
|
565
565
|
"heading": "2. 不要猜测 Microi 前端 SDK 登录接口"
|
|
566
566
|
},
|
|
567
567
|
{
|
|
@@ -672,15 +672,15 @@
|
|
|
672
672
|
"id": "microi-mobile-app-quality-016",
|
|
673
673
|
"ordinal": 16,
|
|
674
674
|
"destination": "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md",
|
|
675
|
-
"sha256": "
|
|
676
|
-
"lines":
|
|
675
|
+
"sha256": "e76ae9654126f9efcd103801dfc90cd77955953a94b2a6e01496cf7e8539049b",
|
|
676
|
+
"lines": 24,
|
|
677
677
|
"heading": "7. 移动端页面需要动效,但动效必须有用"
|
|
678
678
|
},
|
|
679
679
|
{
|
|
680
680
|
"id": "microi-mobile-app-quality-017",
|
|
681
681
|
"ordinal": 17,
|
|
682
682
|
"destination": "microi-mobile-app-quality/references/progressive-01-4-重要按钮必须带图标.md",
|
|
683
|
-
"sha256": "
|
|
683
|
+
"sha256": "9d89588a5dfc384aec720c47cad0506844f0233bd7540cb555650ed7929db946",
|
|
684
684
|
"lines": 25,
|
|
685
685
|
"heading": "8. 登录页必须是直接登录界面"
|
|
686
686
|
},
|
|
@@ -704,7 +704,7 @@
|
|
|
704
704
|
"id": "microi-mobile-app-quality-020",
|
|
705
705
|
"ordinal": 20,
|
|
706
706
|
"destination": "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md",
|
|
707
|
-
"sha256": "
|
|
707
|
+
"sha256": "0ba25107b10b0abb9367309a65f5004829293b572fceddd483d85443f46d9af8",
|
|
708
708
|
"lines": 32,
|
|
709
709
|
"heading": "11. 角色与权限必须基于 sys_user.RoleIds 建模"
|
|
710
710
|
},
|
|
@@ -712,9 +712,17 @@
|
|
|
712
712
|
"id": "microi-mobile-app-quality-021",
|
|
713
713
|
"ordinal": 21,
|
|
714
714
|
"destination": "microi-mobile-app-quality/references/progressive-02-9-主题切换必须真实且全局生效.md",
|
|
715
|
-
"sha256": "
|
|
716
|
-
"lines":
|
|
715
|
+
"sha256": "7569a732bd895f6175f4735ccbddd57ede3d9782fff458449d266e76c7c17d38",
|
|
716
|
+
"lines": 33,
|
|
717
717
|
"heading": "最终交付清单"
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
"id": "microi-mobile-app-quality-022",
|
|
721
|
+
"ordinal": 22,
|
|
722
|
+
"destination": "microi-mobile-app-quality/references/mobile-first-delivery.md",
|
|
723
|
+
"sha256": "748fc4a802457bab760ae24281c3bb27cb70841fe72b61b86f088439236867aa",
|
|
724
|
+
"lines": 68,
|
|
725
|
+
"heading": "开发前固定事实源和首版范围"
|
|
718
726
|
}
|
|
719
727
|
],
|
|
720
728
|
"references": [
|
|
@@ -741,6 +749,16 @@
|
|
|
741
749
|
"11. 角色与权限必须基于 sys_user.RoleIds 建模",
|
|
742
750
|
"最终交付清单"
|
|
743
751
|
]
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
"path": "references/mobile-first-delivery.md",
|
|
755
|
+
"headings": [
|
|
756
|
+
"开发前固定事实源和首版范围",
|
|
757
|
+
"短信、地图与安全配置",
|
|
758
|
+
"布局与持续动效从首版验收",
|
|
759
|
+
"后台与运营能力属于业务交付",
|
|
760
|
+
"真实发布与自动化证据"
|
|
761
|
+
]
|
|
744
762
|
}
|
|
745
763
|
]
|
|
746
764
|
},
|
|
@@ -942,17 +960,17 @@
|
|
|
942
960
|
]
|
|
943
961
|
},
|
|
944
962
|
"microi-uniapp-frontend": {
|
|
945
|
-
"originalSha256": "
|
|
946
|
-
"originalLines":
|
|
947
|
-
"prefixSha256": "
|
|
948
|
-
"prefixBytes":
|
|
949
|
-
"entryLines":
|
|
963
|
+
"originalSha256": "14a9b2c9bab0e3a906acc7e9f5ee8007927cb0339c01bc41a789a9751d7433ed",
|
|
964
|
+
"originalLines": 550,
|
|
965
|
+
"prefixSha256": "c38b3bec2e4d9e67345f78bf3f2213cdcd8c765dcfc77d3457b7bfe2bb8d715a",
|
|
966
|
+
"prefixBytes": 3061,
|
|
967
|
+
"entryLines": 205,
|
|
950
968
|
"chunks": [
|
|
951
969
|
{
|
|
952
970
|
"id": "microi-uniapp-frontend-000",
|
|
953
971
|
"ordinal": 0,
|
|
954
972
|
"destination": "microi-uniapp-frontend/SKILL.md",
|
|
955
|
-
"sha256": "
|
|
973
|
+
"sha256": "1769ef931aebcb62aba41dd3c9f65d45200cdb33ec697268d92af069f3f36789",
|
|
956
974
|
"lines": 5,
|
|
957
975
|
"heading": "移动端质量门禁必须先读"
|
|
958
976
|
},
|
|
@@ -968,16 +986,16 @@
|
|
|
968
986
|
"id": "microi-uniapp-frontend-002",
|
|
969
987
|
"ordinal": 2,
|
|
970
988
|
"destination": "microi-uniapp-frontend/SKILL.md",
|
|
971
|
-
"sha256": "
|
|
972
|
-
"lines":
|
|
989
|
+
"sha256": "4afd4d5fc252848a1808a4210139a7e96e0e054a936921ab6ab552e58488f0da",
|
|
990
|
+
"lines": 15,
|
|
973
991
|
"heading": "H5 预览壳与底部导航强制规则"
|
|
974
992
|
},
|
|
975
993
|
{
|
|
976
994
|
"id": "microi-uniapp-frontend-003",
|
|
977
995
|
"ordinal": 3,
|
|
978
996
|
"destination": "microi-uniapp-frontend/SKILL.md",
|
|
979
|
-
"sha256": "
|
|
980
|
-
"lines":
|
|
997
|
+
"sha256": "bc471d69e918fdad463836c069b18b93d7194d739fb030096e592d5a80d516dd",
|
|
998
|
+
"lines": 21,
|
|
981
999
|
"heading": "登录页与手机号快捷登录"
|
|
982
1000
|
},
|
|
983
1001
|
{
|
|
@@ -1096,7 +1114,7 @@
|
|
|
1096
1114
|
"id": "microi-uniapp-frontend-018",
|
|
1097
1115
|
"ordinal": 18,
|
|
1098
1116
|
"destination": "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md",
|
|
1099
|
-
"sha256": "
|
|
1117
|
+
"sha256": "df78e011402f4e4b8901d6f8a99392bf1ee51d3085fccc69c49fe39f425903a2",
|
|
1100
1118
|
"lines": 15,
|
|
1101
1119
|
"heading": "账号角色与会话状态"
|
|
1102
1120
|
},
|
|
@@ -1152,7 +1170,7 @@
|
|
|
1152
1170
|
"id": "microi-uniapp-frontend-025",
|
|
1153
1171
|
"ordinal": 25,
|
|
1154
1172
|
"destination": "microi-uniapp-frontend/references/progressive-02-关键业务资产不得默认选中.md",
|
|
1155
|
-
"sha256": "
|
|
1173
|
+
"sha256": "aae9073d117844c10351d533df89c546661e63b15e82319df9e818b9dee004f9",
|
|
1156
1174
|
"lines": 18,
|
|
1157
1175
|
"heading": "登录、图标与主题补充规范"
|
|
1158
1176
|
},
|
package/skills/README.md
CHANGED
|
@@ -84,8 +84,8 @@
|
|
|
84
84
|
| **microi-docs-coverage** | 中文官网文档到 Skills 的能力映射、V8 API 漏项审计和同步流程 | `microi-docs-coverage/SKILL.md` |
|
|
85
85
|
| **microi-solution-quotation** | 生成紧凑的一页式 Microi吾码解决方案、市场预估价、优惠报价与开发周期 Word | `microi-solution-quotation/SKILL.md` |
|
|
86
86
|
| **microi-frontend-sdk** | Vue3/UniApp/H5/PC 前端统一 SDK、Token终端会话/续签、上传、资源 URL、ApiEngine/FormEngine | `microi-frontend-sdk/SKILL.md` |
|
|
87
|
-
| **microi-uniapp-frontend** |
|
|
88
|
-
| **microi-mobile-app-quality** |
|
|
87
|
+
| **microi-uniapp-frontend** | UniApp/H5/App/小程序:手机号快捷登录、租户长效会话、多角色源码、资源、安全区与动效 | `microi-uniapp-frontend/SKILL.md` |
|
|
88
|
+
| **microi-mobile-app-quality** | 首版交付门禁:真实登录/地图、手机单列与导航几何、持续动效、后台运营和公开发布验收 | `microi-mobile-app-quality/SKILL.md` |
|
|
89
89
|
| **microi-datasource-mapping** | 数据源 Key/Value 映射、下拉枚举与前后端显示值一致性 | `microi-datasource-mapping/SKILL.md` |
|
|
90
90
|
| **v8-formengine-http** | 移动端/外部系统直接调用 FormEngine HTTP 路由的约定 | `v8-formengine-http/SKILL.md` |
|
|
91
91
|
| **v8-explorer-tree** | VS Code 插件 V8 资源管理器目录规范和本地文件归档 | `v8-explorer-tree/SKILL.md` |
|
|
@@ -51,7 +51,7 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
|
|
|
51
51
|
| `system-engine/file-manage.md` | v8-file-upload, microi-client-frontend | 文件柜、公私桶管理、在线预览、回收站、跨平台与 MinIO 同步 |
|
|
52
52
|
| `system-engine/job.md` | job-engine | 调度、后台任务和分布式恢复 |
|
|
53
53
|
| `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI 前端应用的工程架构与交付 |
|
|
54
|
-
| `system-engine/multi-end-client.md` | microi-client-frontend, microi-mobile-app-quality, microi-uniapp-frontend | PC
|
|
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
57
|
| `system-engine/module-engine.md` | module-engine, v8-menu-buttons, v8-template-engine, microi-mobile-app-quality | 菜单统计、模块指标、复合列、移动卡片、按钮角标和页面入口 |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: microi-mobile-app-quality
|
|
3
|
-
description: Microi
|
|
3
|
+
description: Microi 移动端首版交付质量门禁。用于 UniApp/H5/App/小程序创建、修复与发布,覆盖统一快捷登录、长效会话、单列手机布局、真实服务接入、持续动效、后台运营与公开入口验收。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
@@ -11,8 +11,10 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
11
11
|
|
|
12
12
|
自动触发:只要任务涉及 Microi 移动端应用、H5、微信小程序、App 构建、uni-app 项目、登录页、tabbar、首页、我的页、工作台、报告页、视觉重设计或移动端验收,即使用户没有明确点名,也要应用本 skill。
|
|
13
13
|
|
|
14
|
+
开发前读取[首版交付与外部服务验收](references/mobile-first-delivery.md),按本次实际业务列出适用门禁。首版就验真实手机号流程、会话恢复、手机与桌面布局、持续动效及发布入口;只有首页截图、编译成功或 SDK 对象存在不能宣布产品交付。第三方商户账号尚未开通时完成安全模板与失败路径,并准确区分接入完成和真实业务验收。
|
|
15
|
+
|
|
14
16
|
<!-- microi-progressive:begin -->
|
|
15
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=
|
|
17
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-000 sha256=0bb2395379c14ff6e32e659c1703128665838fc5a2e58a7d53a2d8f8ae63be47 -->
|
|
16
18
|
## 1. 导航和快捷入口必须使用真实图标
|
|
17
19
|
|
|
18
20
|
底部导航、首页快捷入口、会员中心快捷项、九宫格操作和悬浮操作,必须在文字上方或旁边显示可识别的图标。
|
|
@@ -45,6 +47,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
45
47
|
|
|
46
48
|
- 图标存在、页面截图生成和按钮可见都不足以通过验收。必须测量手机壳内屏或移动可见视口、导航外框、每个菜单触摸区与正文滚动区的真实矩形;导航外框底边贴齐所属内屏底边,导航项下方只保留设计间距和真实系统安全区。
|
|
47
49
|
- 桌面手机壳须有明确的可用高度;底部导航贴壳底,不贴浏览器外窗底。手机和移动设备仿真自动去壳;横屏、旋转和宽屏手机不能仅因宽度超过断点就变成桌面预览。
|
|
50
|
+
- 手机产品在桌面内屏保持移动端单列,禁止把首页地图和操作面板按外窗宽度排为两列。桌面可居中预览,但正文、导航及动效均受手机内屏约束;有业务依据的分类双栏单独验证。
|
|
48
51
|
- 页面壳按“头部不收缩、正文 `flex:1; min-height:0`、导航 `flex-shrink:0`”分配空间。普通单列页只允许一个正文滚动 owner,不能让 body、路由包装层和正文同时滚动;短内容也不能把导航挤到中间或在导航下方留下大块空白。
|
|
49
52
|
- 安全区来自运行时或 CSS `env` 的统一变量,只消费一次。流内导航已占据布局空间时,正文不再预留整条导航高度;覆盖式导航才预留其**实测总高度**,不能同时累加导航高度、固定占位和第二份安全区。桌面无真实手势区时不得伪造几十像素底部 padding。
|
|
50
53
|
- 宽度受限的 H5 手机壳仍可能按浏览器宽度换算 `rpx`,必须检查 `pages.json.globalStyle` 的 `rpxCalcMaxDeviceWidth / rpxCalcBaseDeviceWidth` 和实际构建产物;导航高度、图标和尾部占位不得随 4K 桌面视口放大。`750rpx` 不能充当容器 `100%`。
|
|
@@ -63,7 +66,7 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
63
66
|
- 迁移到 HDFS/CDN 后必须从构建产物确认原大文件已经消失,并从业务记录/配置回读相对 `Path`;页面要先加载当前租户 `SysConfig.FileServer`,不得以源码硬编码 CDN 域名替代运行期配置。远程资源加载失败时只能回退到轻量本地占位,不得把原大图重新塞回主包。
|
|
64
67
|
|
|
65
68
|
<!-- /microi-progressive:chunk -->
|
|
66
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-002 sha256=
|
|
69
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-002 sha256=bbbd05cdab08058194f97b492c7d09cea748dcfdba6e7fac5063b5d67d078c89 -->
|
|
67
70
|
## 2. 不要猜测 Microi 前端 SDK 登录接口
|
|
68
71
|
|
|
69
72
|
编写登录代码前,先检查本地项目 SDK 封装,例如 `src/utils/microi.v8.js`、`src/utils/api.js`,或标准 `microi.uniapp` 登录实现。
|
|
@@ -81,6 +84,8 @@ description: Microi 移动端质量门禁,适用于 UniApp/H5/微信小程序
|
|
|
81
84
|
- 业务守卫、分享接收、手动登录与鉴权失效必须共用登录导航锁;导航失败或登录页真实到达后释放,不能依赖固定延时。UniApp `invoke` 返回 `false` 不会调用 `complete`,被去重的入口不得保留自己的等待锁。
|
|
82
85
|
- 登录完成优先恢复原业务实例,连续登录页一次移出;历史登录页夹在业务栈中时清栈进入目标。成功返回任务必须去重、在页面销毁时取消,并在执行前复核会话;迟到的失效弹窗不能打断新登录。
|
|
83
86
|
- 业务页先保存入口参数再鉴权;`onLoad` 未登录早退后,`onShow` 必须恢复一次初始化,并合并并发加载。初始化期间会话失效后仍需允许登录返回重取,不能永久显示骨架屏或丢失分享的记录 Id。
|
|
87
|
+
- 默认快捷流程必须分别验证已注册登录与新手机号自动注册;新用户只授最低角色,已认证角色默认工作模式与普通用户切换均来自服务端身份。企业封闭注册策略不得被前端快捷入口绕过。没有用户授权的收信手机号时,完成发送失败/限频/验证码错误等自动化与真实已有账号登录,收信及首次短信注册由用户在发布后验收;不得向库内用户发短信,也不能把这部分写成已送达。
|
|
88
|
+
- Token 持久化与恢复须按子租户真实 `AccessTokenLifetime` 校验移动端 JWT 时长,不写死 20/30 天。覆盖主动旧换新、响应头轮换、并发续签、冷启动/前台恢复、跨租户、吊销、退出时在途响应;新会话不得被旧响应恢复或清除。实现规范见 [UniApp 默认登录与会话](../microi-uniapp-frontend/SKILL.md)。
|
|
84
89
|
|
|
85
90
|
禁止:
|
|
86
91
|
- 凭空编造 SDK 子对象。
|
|
@@ -194,4 +199,5 @@ Microi 请求只能发送一个不区分大小写的 OsClient 请求头。浏览
|
|
|
194
199
|
|
|
195
200
|
- [references/progressive-01-4-重要按钮必须带图标.md](references/progressive-01-4-重要按钮必须带图标.md):4. 重要按钮必须带图标;4.1 模块列表优先使用声明式业务卡片;5. 首屏文字和浮层不得重叠;5.1 未登录/授权提示必须在可用内容区居中;5.2 自定义导航页面必须通过安全区与微信胶囊门禁;5.3 全屏工具页必须遵守返回状态栈;5.4 微信浮动入口必须通过真实事件桥门禁;6. 后台菜单必须规划为至少两级;7. 移动端页面需要动效,但动效必须有用;8. 登录页必须是直接登录界面
|
|
196
201
|
- [references/progressive-02-9-主题切换必须真实且全局生效.md](references/progressive-02-9-主题切换必须真实且全局生效.md):9. 主题切换必须真实且全局生效;10. 报告/列表详情必须保留用户身份;11. 角色与权限必须基于 sys_user.RoleIds 建模;最终交付清单
|
|
202
|
+
- [references/mobile-first-delivery.md](references/mobile-first-delivery.md):新建/交付移动产品必读;首版事实源、短信与地图、安全迁移、布局动效、后台运营、正式发布与证据边界
|
|
197
203
|
<!-- microi-progressive:end -->
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 移动端首版交付与外部服务验收
|
|
2
|
+
|
|
3
|
+
适用于新建或交付移动产品;局部修复只执行相关项,保持既有正确配置与用户授权。
|
|
4
|
+
快捷登录和会话协议以 `microi-uniapp-frontend`、`microi-frontend-sdk` 为准;本参考负责
|
|
5
|
+
把源码、外部服务、后台与正式入口组成一条可回读的交付链,避免只有静态页面。
|
|
6
|
+
|
|
7
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-022 sha256=748fc4a802457bab760ae24281c3bb27cb70841fe72b61b86f088439236867aa -->
|
|
8
|
+
## 开发前固定事实源和首版范围
|
|
9
|
+
|
|
10
|
+
- 使用指定 MCP 的实际 Profile,先回读 `ApiBase + OsClient`,不能因为官网发布归主租户就让试用端请求主租户。不同租户用独立浏览器 context,不能只新开标签。
|
|
11
|
+
- 调用 `microi_list_applications` 盘点在线应用与全部文件;读取目标 `microi_get_application_context` 时显式请求完整内容并检查完整性、文件数和错误数。当前工具 Schema 与实际返回为准,截断结果不能当完整源码。
|
|
12
|
+
- 正式可编辑源码、Manifest、接口引擎、资源策略、构建、测试及设计素材保持在唯一 `AI应用/{appKey}`;受审计独立仓库按发布契约指定。`.tmp/` 只存一次性脚本/报告,不成为发布源;源码交付包必须自包含必要项目文件,不能依赖开发者电脑的临时目录。
|
|
13
|
+
- 把需求拆成可演示的核心流程、角色、后台模块、服务依赖与验收矩阵。首版同时实现移动页面与需求内的业务接口,不把能点击的按钮、模拟成功 Toast、静态地图或随机报表当完成。
|
|
14
|
+
- 默认以实际品牌建立统一壳、图标、字号、间距、卡片、错误/空态、骨架屏和动效组件。用户给参考图是业务/视觉依据;允许个性化时按其意图设计,不复制其它品牌、Logo 或以无限装饰牺牲操作。
|
|
15
|
+
- 多角色使用同一 UniApp 源码与 session/capability store;新用户最低权限、申请、审核、默认角色入口、切回普通角色均有服务端闭环。不存在审核结果时不能因前端模式切换开放高级工作台。
|
|
16
|
+
|
|
17
|
+
## 短信、地图与安全配置
|
|
18
|
+
|
|
19
|
+
### 复用已有能力而非猜接口
|
|
20
|
+
|
|
21
|
+
- 先检查同源官网登录/注册、标准 `microi.uniapp` 与现有引擎的真实请求、字段和失败语义。可复用短信发送、验证码消费、DiyToken 签发与续签,保留租户注册策略、最低角色与禁用账号约束。
|
|
22
|
+
- 验证图形码、短信用途、超时、限频、重放与同手机号并发注册;发送成功回执只证明供应商受理,不代表短信到达。真实手机号必须由用户指定或授权,不能从数据库随便选一个;用户选择自行收信时保留明确的发布后验收项。
|
|
23
|
+
- 第三方账号尚未开通时完成字段、说明、后台入口、最小接入模板、错误处理和契约测试。不得把测试桩、验证码绕过、固定数据或匿名管理员权限当正式接通。
|
|
24
|
+
|
|
25
|
+
### 密钥只在正确租户的安全边界内流转
|
|
26
|
+
|
|
27
|
+
- 地图、短信、支付与电子开票敏感项进入当前租户系统设置的安全配置;公开启动配置只返回明确白名单的能力开关、供应商和当前端必要运行值。不得返回整个 `V8.SysConfig`、`V8.OsClientModel` 或私有设置字典。
|
|
28
|
+
- 获授权从另一租户迁移配置时,先核对供应商产品、运营主体、域名和可复用范围;仅复制所需键的最小允许列表,由可信后端在目标租户重新加密。禁止整行复制 `sys_osclients`、盲拷租户密文、复用基础设施连接串或把秘密写进源码/Manifest。
|
|
29
|
+
- 使用已存在且审阅过的安全配置工具;若没有安全迁移能力,先补可信通用能力或让管理员在后台填写,不能通过 FormEngine、SQL 别名、临时维护引擎或普通 Reveal 绕过权限。具体实现以 `v8-security` 为准。
|
|
30
|
+
- MCP `microi_run_engine` 的原始 `params` 可能被持久化审计;Token、短信码、完整手机号和密钥不得当普通引擎参数用于调试或迁移。认证验收通过标准 SDK/受保护传输在内存使用凭据,日志、报告和错误响应只保留脱敏阶段/追踪号;专用安全写入工具仍按其脱敏契约执行。
|
|
31
|
+
|
|
32
|
+
### 地图必须按产品与终端验证
|
|
33
|
+
|
|
34
|
+
- 高德浏览器 JS API 的 ClientKey 与 Web 服务 REST Key 是不同产品,不能互换。H5 按明确运行 `Mode` 接入:`js` 加载官方 JS SDK;`server-static` 可由可信服务端调用官方 REST 静态地图,返回真实图片并配合服务端 POI、逆地理编码和路线。后者是静态地图,不具备交互瓦片的拖动/缩放体验;不能借此绕过供应商产品或商业授权。App/小程序走对应平台地图与原生授权适配器,不能在非 H5 分支执行 `window/document`。
|
|
35
|
+
- `js` 模式的 JS 安全码或安全代理地址在 SDK 加载前配置,核对当前 SDK 版本、域名允许列表、HTTPS、CORS;所有模式都核对对应产品与商业权限。复制主租户 Key 不保证目标 CDN 域名可用;`INVALID_USER_KEY`、域名拒绝、安全码错误、配额或商业授权错误必须保留供应商阶段与追踪号。
|
|
36
|
+
- 地图运行配置采用最小投影。浏览器 ClientKey 的公开使用不授权公开 REST Key、短信 Secret 或其它服务密钥;需要保护的 JS 安全配置优先按供应商支持方式通过服务端代理,并限制可信目标,不能接受任意转发 URL。
|
|
37
|
+
- 匿名地图能力按业务允许范围设计,不能因为公共首页要地图就整体放开系统设置或要求游客先用管理员 Token。已登录与未登录分别验实际加载及接口权限。
|
|
38
|
+
- 真实浏览器按模式验收可见尺寸与供应商响应:`js` 断言 SDK 成功及实际瓦片/要素;`server-static` 断言供应商成功响应、图片类型(如 PNG)、真实像素尺寸和已显示的地图图片,不能把错误 JSON、空图或本地示意图当地图。两种模式均点击定位、地点搜索/选择、逆地理编码、路线规划并检查实际结果;定位允许/拒绝、加载超时、空结果和配额不足都有可继续操作的降级。
|
|
39
|
+
- “SDK 全局对象存在”“地图容器存在”“占位文字显示”不是地图已接通。渲染失败要区分配置未启用、Key 产品错误、域名/商业拒绝、容器尺寸与供应商不可用,不能统一吞成模糊提示后宣称通过。
|
|
40
|
+
|
|
41
|
+
## 布局与持续动效从首版验收
|
|
42
|
+
|
|
43
|
+
| 范围 | 通过条件 | 常见失败 |
|
|
44
|
+
|---|---|---|
|
|
45
|
+
| 桌面 H5 | 居中手机内屏,仍为移动单列,内屏有高度上限 | 主页面变两列、超长手机壳、外窗出现正文第二滚动条 |
|
|
46
|
+
| 手机/设备仿真 | 去壳铺满可见视口,横竖屏与键盘恢复正常 | 仅按宽度把横屏手机当桌面、`100vh` 残留键盘空白 |
|
|
47
|
+
| 底部导航 | 内屏底边贴合,菜单触摸区和实际安全区高度有界 | `screenHeight-windowHeight` 伪造数百像素安全区、重复占位 |
|
|
48
|
+
| 动效 | 入场/按压/骨架反馈及适用持续装饰实测可见 | 只写 keyframes、只在 loading 动、文字输入持续跳动 |
|
|
49
|
+
| 减少动态/后台 | 用户偏好生效,隐藏暂停,恢复不累积监听 | 后台循环耗电、路由越切计时器越多、装饰夺取点击 |
|
|
50
|
+
|
|
51
|
+
几何断言和共享安全区规则见 UniApp 布局参考;持续动效规则见本 Skill 的“7. 移动端
|
|
52
|
+
页面需要动效”。每个路由都使用共享壳,不给被投诉的一个页面临时补 padding。
|
|
53
|
+
|
|
54
|
+
## 后台与运营能力属于业务交付
|
|
55
|
+
|
|
56
|
+
- 完整产品需求包含管理时,后台必须有真实可见的父子菜单、授权模块、搜索/状态筛选、详情、审核/业务操作与运营报表。用客户将使用的账号进入后台验收,不能只在数据库查到菜单行。
|
|
57
|
+
- 报表从真实业务表按权限、日期、城市/组织等范围聚合;金额、订单、状态、优惠/补贴、资金流水各口径能追溯,并与明细对账。没有数据时显示空态,不能填随机 KPI。
|
|
58
|
+
- 用户授权添加测试/运营数据时使用可复现、幂等且有来源标识的种子;主子表、金额、状态和时间口径一致。隔离测试城市/账号/交易,报表说明数据范围,不能伪称真实营业或发出真实短信/扣款/开票;原用户和既有资金数据保持不变。
|
|
59
|
+
- 单一运营主体默认一组支付宝和一组微信收款配置;只有业务明确需要多商户/多通道才设计路由。服务端金额重算、签名/回调验签、幂等、防重放、对账与电子开票状态机仍必须实现,不能因只有一家主体就省略。
|
|
60
|
+
- 客户自有支付/开票账号上线前在后台配置。模板与沙箱通过不代表正式收款/出票;正式受理、异步回调、查询、退款/失败和税务结果分别保留验收边界。
|
|
61
|
+
- 涉及海外/多城市监管时,区分客户材料、已核实法规与推断。预留地区/城市接入、数据区域、审计、车辆终端和合规材料状态,按正式规格实现适配;软件交付不等于牌照、认证或监管审批已获准,遮挡/缺失需求只能标注假设,不能编造成已确认条款。
|
|
62
|
+
|
|
63
|
+
## 真实发布与自动化证据
|
|
64
|
+
|
|
65
|
+
1. 从本次冻结源码执行必要的 H5、小程序和 App 编译/单测/契约测试;App 编译资源不是 APK/IPA,小程序构建也不代表已提审或真机通过。
|
|
66
|
+
2. 使用真实目标 API 与独立登录上下文测试匿名、已有账号、最低角色、高级/多角色和无权访问。每个核心路由与关键按钮有正/负路径:加载、失败、重试、取消、提交及返回状态,不能只点首页。
|
|
67
|
+
3. H5 至少覆盖 375×812、430×932、桌面矮屏/普通/4K、断点与手机横屏;记录内屏、导航/菜单矩形、滚动 owner、页面溢出、可达末项、网络与控制台。真机软键盘、原生权限与性能证据独立记录。
|
|
68
|
+
4. 通过 MCP 同步私有源码并发布公开编译产物,等待终态后独立回读版本、文件清单/哈希、运行指针和 CDN 实际内容;返回任务 Id、上传成功或 BuildStatus 文本不能代替完成回执。保留旧版可恢复指针,不手工伪造发布状态。
|
|
69
|
+
5. 请求需要官网试用/推荐时,回读应用列表记录并从匿名官网点击实际卡片,确认推荐、版本、入口及运行端 `ApiBase + OsClient` 正确;在**公开 URL** 再跑登录、地图、角色、动效及多视口回归,不能以本地构建替代公开体验。
|
|
70
|
+
6. 客户方案/PDF 若在范围内,截图来自已验收页面:后台高分辨率、移动端真实视口,3D 手机外观只能包装原截图,不生成不存在的界面。图注区分真实页面、测试运营数据、规划能力和供应商待开通项;高清截图不能替代功能证据。
|
|
71
|
+
|
|
72
|
+
交接按用户编号列出源码与本地测试、MCP 业务资源、私有源码/公有产物、官网入口、
|
|
73
|
+
设备/渠道和第三方业务各层结果。任何未实测项明确原因,不能笼统宣称“全自动化通过”
|
|
74
|
+
或“商业就绪”覆盖用户尚未完成的收信、商户开通、正式支付/开票和渠道审核。
|
|
75
|
+
<!-- /microi-progressive:chunk -->
|
|
@@ -170,17 +170,19 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
170
170
|
- 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
|
|
171
171
|
|
|
172
172
|
<!-- /microi-progressive:chunk -->
|
|
173
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=
|
|
173
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=e76ae9654126f9efcd103801dfc90cd77955953a94b2a6e01496cf7e8539049b -->
|
|
174
174
|
## 7. 移动端页面需要动效,但动效必须有用
|
|
175
175
|
|
|
176
176
|
移动端产品不应像静态后台表单。
|
|
177
177
|
|
|
178
178
|
要求:
|
|
179
|
-
-
|
|
179
|
+
- 首版设计明确每页的动效来源,首屏、面板、卡片和重要操作区有统一入场与操作反馈;支持“清爽/精致”不等于删除所有动效。
|
|
180
|
+
- 有品牌展示或用户要求持续酷炫效果时,在可见首屏/状态区使用轻量背景流光、光晕、轨道、呼吸或装饰漂浮等持续动效。主要使用 `transform/opacity`,限制层数、范围与幅度;持续动画不能只存在于加载中的骨架屏,不能伪造车辆、交易或其它业务状态。
|
|
180
181
|
- 点击目标要有按下反馈。
|
|
181
182
|
- 骨架屏应有轻微流光或脉冲。
|
|
182
183
|
- 装饰动效幅度要小,不能干扰任务完成。
|
|
183
|
-
-
|
|
184
|
+
- H5 尊重 `prefers-reduced-motion`,原生端提供等价减弱/关闭能力;页面隐藏或 App `onHide` 暂停装饰循环、计时器/RAF,恢复前台再启动,离开页面清理监听。浏览器 DOM、媒体查询与 RAF 仅在 H5 分支使用,不破坏小程序/App 编译。
|
|
185
|
+
- 装饰层 `pointer-events:none`,被共享内屏裁切;标题、输入框、验证码、正文与关键按钮位置稳定。动效不能触发新的业务请求、重复提交或连续数据刷新。
|
|
184
186
|
|
|
185
187
|
禁止:
|
|
186
188
|
- 整个应用没有交互反馈。
|
|
@@ -188,21 +190,22 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
|
|
|
188
190
|
- 动效导致布局位移或文字重叠。
|
|
189
191
|
|
|
190
192
|
验收:
|
|
191
|
-
-
|
|
193
|
+
- 浏览器或设备实际等待至少两个不同时间点,记录动画属性/截图变化,确认可见页面确实持续在动;只扫描 `@keyframes` 或截图一个静止画面不能证明效果。
|
|
194
|
+
- 重测减少动态、前后台暂停/恢复、路由切换、按钮按下、输入/验证码操作与所有主 Tab。确认文字/输入控件矩形稳定、装饰层不夺取触摸、没有重复请求,并留存相应证据;浏览器结果不能冒充原生性能实测。
|
|
192
195
|
- 没有动画导致横向溢出、文字裁切或固定栏抖动。
|
|
193
196
|
|
|
194
197
|
<!-- /microi-progressive:chunk -->
|
|
195
|
-
<!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=
|
|
198
|
+
<!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=9d89588a5dfc384aec720c47cad0506844f0233bd7540cb555650ed7929db946 -->
|
|
196
199
|
## 8. 登录页必须是直接登录界面
|
|
197
200
|
|
|
198
201
|
登录页不能强迫用户先在两个身份标签之间切换才能登录。
|
|
199
202
|
|
|
200
203
|
要求:
|
|
201
|
-
- H5/App
|
|
204
|
+
- H5/App 默认提供一个手机号 + 图形验证码 + 短信验证码表单,服务端按租户策略统一已注册登录与未注册自动注册;密码是次级折叠/备用入口。封闭企业账号或用户指定模型保留其策略,不擅自开放注册。
|
|
202
205
|
- 微信小程序默认使用 `<button open-type="getPhoneNumber">` 的手机号授权登录。账号密码登录可以作为次级兜底,但必须折叠或弱化,不能和手机号授权并列成第二套完整登录系统。
|
|
203
206
|
- 微信小程序手机号快捷登录必须把返回的手机号 `code` 传给后端;当后端需要 OpenId/UnionId 时,还必须调用 `uni.login()` 获取新的 `LoginCode`。
|
|
204
|
-
-
|
|
205
|
-
-
|
|
207
|
+
- 短信能力未配置时给明确的暂不可用状态与有效备用入口,不构造看似成功的验证码流程。微信小程序具备正式授权能力时保持手机号授权主路径,与短信/密码入口共用平台 DiyToken。
|
|
208
|
+
- 默认文案说明“未注册手机号将按平台规则自动注册”,展示实际协议/隐私同意;不先要求用户猜测该点登录还是注册。
|
|
206
209
|
- 登录页不要展示当前租户、OsClient、移动端构建版本、API host、调试版本块等内部实现信息。
|
|
207
210
|
|
|
208
211
|
禁止:
|
|
@@ -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=0ba25107b10b0abb9367309a65f5004829293b572fceddd483d85443f46d9af8 -->
|
|
64
64
|
## 11. 角色与权限必须基于 sys_user.RoleIds 建模
|
|
65
65
|
|
|
66
66
|
移动端和后台不能只区分“已登录/未登录”。企业应用通常至少有内部员工、售后师傅、客服、客户账号等角色,必须在建模阶段明确角色、菜单权限和数据权限。
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
- 微信小程序手机号授权登录后,如果当前 OpenId/小程序用户还没有绑定客户或内部 `sys_user` 身份,移动端不能只显示“联系管理员”。必须提供“申请绑定身份”入口,允许用户申请绑定客户、售后师傅或客服等角色,并把申请写入独立审核表;后台审核通过后才写客户绑定表或 `Sys_User.MiniProgramOpenId` 等正式身份字段。
|
|
76
76
|
- 身份绑定申请必须显示审核状态:待审核、已通过、已驳回。待审核期间不要提前开放客户数据、接单、工单处理等能力;已驳回要展示原因或允许重新提交。
|
|
77
77
|
- 后台审核必须由有权限的内部账号执行。审核客户申请时应由后台选择真实客户 Id 后再写绑定关系,不能只相信用户填写的客户名称;审核售后师傅/客服申请时应由后台选择真实 `sys_user.Id` 后再绑定 OpenId。
|
|
78
|
-
- 使用 MCP 建角色前先回读 `sys_role` 和 `sys_menu`。如果 `microi_save_role` 或通用 `add_form_data('sys_role')` 因 `UpdateTime cannot be null`
|
|
78
|
+
- 使用 MCP 建角色前先回读 `sys_role` 和 `sys_menu`。如果 `microi_save_role` 或通用 `add_form_data('sys_role')` 因 `UpdateTime cannot be null` 等系统字段问题失败,定位并使用平台修复后的专用角色工具,写入超时先回读;缺能力先补通用 MCP,禁止新建一次性维护接口引擎绕过角色工具和权限边界。
|
|
79
79
|
|
|
80
80
|
禁止:
|
|
81
81
|
- 只做前端显示区分,后台角色和菜单权限不落库。
|
|
@@ -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=7569a732bd895f6175f4735ccbddd57ede3d9782fff458449d266e76c7c17d38 -->
|
|
97
97
|
## 审核后的会话与角色同步(强制)
|
|
98
98
|
|
|
99
99
|
- 审核通过后的数据库角色、服务端 DiyToken 身份投影、SDK 用户缓存、页面 capability 和申请状态必须一致,禁止以“退出重登后正常”作为验收成功。
|
|
@@ -109,14 +109,14 @@
|
|
|
109
109
|
|
|
110
110
|
移动端项目标记完成前必须确认:
|
|
111
111
|
- 图标:底部导航、首页快捷入口、个人中心快捷项、主按钮。
|
|
112
|
-
- 登录:H5/App
|
|
112
|
+
- 登录:H5/App 默认手机号 + 图形验证码 + 短信码统一登录/按租户策略自动注册,密码备用;正式小程序优先手机号授权;没有并列重复身份体系与调试块,SDK 契约已核验。
|
|
113
113
|
- 登录状态:成功登录必须同时有 token 和用户 `Id`;刷新、切换导航和进入“我的”页后,不得出现缓存用户名但仍提示未登录。
|
|
114
114
|
- 按钮:图标 + 文字、按下态、加载态。
|
|
115
115
|
- 菜单:后台规划为至少两级树。
|
|
116
116
|
- 请求头:`osclient` 是唯一标准请求头值,没有因大小写重复。
|
|
117
117
|
- 未登录态:授权/登录提示卡片和主按钮在可用内容区上下左右居中,不贴顶部。
|
|
118
118
|
- 首屏:首屏文字和悬浮快捷面板已截图检查,无裁切或重叠。
|
|
119
|
-
-
|
|
119
|
+
- 动效:入场、点击、骨架屏与适用的持续品牌动效实测可见;减少动态、后台暂停、路由恢复与稳定文字矩形均通过。
|
|
120
120
|
- 主题:命名主题可持久化,未登录可切换,并影响所有页面和底部导航。
|
|
121
121
|
- 主题质检:每个 `pages.json` 路由在每个命名主题下都截图检查;切换主题再导航后,没有低对比文字,也没有 Vue scheduler/router 错误。
|
|
122
122
|
- 图标对比:首页快捷入口、底部导航、我的快捷入口在每个主题下都清晰可见;不得出现绿色圆底配绿色图标、灰色圆底配低对比图标等情况。
|
|
@@ -125,4 +125,5 @@
|
|
|
125
125
|
- 登录诊断:体验版手机号登录失败时显示阶段、原因和追踪号;后台系统日志可按追踪号查到脱敏错误上下文。
|
|
126
126
|
- 角色权限:`sys_user.RoleIds`、`sys_role`、`sys_rolelimit`、前端 capability 和接口行级过滤已联动验证。
|
|
127
127
|
- 验证:脚本存在时运行 `build:h5`、`build:mp-weixin` 和 `build:app`;执行 H5 路由冒烟测试和控制台检查。
|
|
128
|
+
- 首版闭环:按 [首版交付与外部服务验收](mobile-first-delivery.md) 留存真实服务、后台、运营数据、私有源码同步、CDN 与公开试用入口证据;有客户账号或渠道依赖的未实测项逐项列明。
|
|
128
129
|
<!-- /microi-progressive:chunk -->
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: microi-uniapp-frontend
|
|
3
|
-
description: Microi 吾码 UniApp/H5
|
|
3
|
+
description: Microi 吾码 UniApp/H5/App/小程序前端规范。用于创建或维护移动产品,覆盖手机号快捷登录、租户长效会话、统一角色源码、地图接入、资源、安全区、持续动效和真实发布验收。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
@@ -20,10 +20,10 @@ UniApp/H5/小程序必须通过项目统一 `microi.v8.js` 的 `V8.uploadFile` /
|
|
|
20
20
|
登录页默认不得展示 ApiBase、OsClient 或调试配置;但用户明确要求、且安装包由 Microi 平台方作为多租户聚合客户端发布时,允许仅在 `APP-PLUS` 登录页提供通用连接器。协议必须使用固定 `https://` / `http://` 下拉框,地址框禁止重复输入协议,HTTPS 默认,HTTP 显示明文风险并二次确认;H5、小程序和客户专属包不得因此自动开放。候选地址先匿名读取 `GetSysConfig`,验证成功后再持久化。真正切换时必须清除旧 DiyToken、用户、SignalR、菜单/元数据/页面缓存,按 `ApiBase + OsClient` 隔离记住的账号及 RSA 密文,并用端点代次拒绝切换前的迟到响应。支持任意 HTTP 时,最终 IPA 必须显式包含 ATS 例外,Android 安装包必须显式包含 cleartext 例外;不需要任意 HTTP 的正式包应保持平台默认安全策略,iOS ATS 例外还必须在 App Store 审核中说明。
|
|
21
21
|
|
|
22
22
|
<!-- microi-progressive:begin -->
|
|
23
|
-
<!-- microi-progressive:chunk id=microi-uniapp-frontend-000 sha256=
|
|
23
|
+
<!-- microi-progressive:chunk id=microi-uniapp-frontend-000 sha256=1769ef931aebcb62aba41dd3c9f65d45200cdb33ec697268d92af069f3f36789 -->
|
|
24
24
|
## 移动端质量门禁必须先读
|
|
25
25
|
|
|
26
|
-
创建、重构或修复任何 Microi 移动端项目前,必须同时应用 `microi.skills/microi-mobile-app-quality/SKILL.md
|
|
26
|
+
创建、重构或修复任何 Microi 移动端项目前,必须同时应用 `microi.skills/microi-mobile-app-quality/SKILL.md`,并读取其[首版交付与外部服务验收](../microi-mobile-app-quality/references/mobile-first-delivery.md)。手机号快捷登录、会话续签、导航几何、真实地图、页面动效和公开发布回读从首版纳入需求与测试,不能先交静态占位版,再等待用户逐页指出问题。涉及后台与第三方服务时按实际业务范围执行,既有授权和租户策略优先。
|
|
27
27
|
|
|
28
28
|
<!-- /microi-progressive:chunk -->
|
|
29
29
|
<!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=51e5f609e93cf164acb9af45f83a8d713f28fba3d68b22d4331a86e5f5248fc5 -->
|
|
@@ -50,12 +50,13 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
|
|
|
50
50
|
仓库必须提供 AI 与人工协作约束文件、租户脚手架、Profile 构建/同步命令和架构检查。平台层改动至少同时构建标准 Profile 与默认交付 Profile;租户视觉改动还要执行多视口截图回归。这样其他同事使用 Codex、Claude、Copilot、Cursor 等工具继续开发时,会先读取相同规则,而不是依赖某次对话记忆。
|
|
51
51
|
|
|
52
52
|
<!-- /microi-progressive:chunk -->
|
|
53
|
-
<!-- microi-progressive:chunk id=microi-uniapp-frontend-002 sha256=
|
|
53
|
+
<!-- microi-progressive:chunk id=microi-uniapp-frontend-002 sha256=4afd4d5fc252848a1808a4210139a7e96e0e054a936921ab6ab552e58488f0da -->
|
|
54
54
|
## H5 预览壳与底部导航强制规则
|
|
55
55
|
|
|
56
56
|
- H5 的底部安全区采用 CSS `env(safe-area-inset-bottom)` 等浏览器权威值,不能使用 `screenHeight - windowHeight` 或 `screen.height - innerHeight` 推算。App/小程序只读取平台权威 inset;零值正常,禁止用 `inset || guessedFallback` 换成猜测值。验收必须覆盖物理屏幕与浏览器视口不同、非最大化桌面、缩放和移动浏览器工具栏收展。
|
|
57
57
|
|
|
58
58
|
- 桌面浏览器允许使用 `Microi UniApp H5 Preview` 手机壳帮助用户理解移动端比例。
|
|
59
|
+
- 面向手机的页面在桌面手机壳内仍保持相同的单列布局和移动字号,不能因外窗变宽把地图、主面板或整页拆成桌面两列;业务明确设计的分类双栏另按其独立滚动规范执行。
|
|
59
60
|
- 真机、窄屏浏览器以及 PC DevTools 移动设备仿真必须自动去掉手机壳标题、外边距、圆角、边框和阴影,内容铺满当前可见视口。`767px` 是常用宽度断点,不是手机身份判断;手机横屏/旋转不能因宽度超过它就重新套壳。H5 优先使用动态视口高度并保留旧浏览器兜底,键盘与浏览器栏变化要重新核对可见区域。
|
|
60
61
|
- 桌面手机壳必须约束高度,不能只用 `min-height:100vh` 让内容继续撑长。导航底边贴齐手机壳**内屏**底边,不是浏览器窗口底边;头部和导航不收缩,正文及路由中间包装层使用 `flex:1; min-height:0; min-width:0`。
|
|
61
62
|
- 普通单列壳只有一个正文滚动 owner;流内底栏已占高度,不再给正文叠加整条 tabBar 占位。覆盖式固定底栏由共享布局预留一次实测总高度,包含真实安全区;禁止根容器、正文、占位元素与导航分别重复累加底部间距。双栏列表仅允许明确设计的两块独立滚动区。
|
|
@@ -65,18 +66,22 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
|
|
|
65
66
|
- 完整实现与门禁示例见 [H5 手机壳和几何验收](references/progressive-01-移动端分类-双栏列表独立滚动.md#h5-在-pc-浏览器必须自动模拟移动端)。修改共享壳后重跑所有 Tab 与路由,不能只给当前页面补 padding。
|
|
66
67
|
|
|
67
68
|
<!-- /microi-progressive:chunk -->
|
|
68
|
-
<!-- microi-progressive:chunk id=microi-uniapp-frontend-003 sha256=
|
|
69
|
-
##
|
|
69
|
+
<!-- microi-progressive:chunk id=microi-uniapp-frontend-003 sha256=bc471d69e918fdad463836c069b18b93d7194d739fb030096e592d5a80d516dd -->
|
|
70
|
+
## 默认快捷登录、自动注册与长效会话
|
|
70
71
|
|
|
71
|
-
-
|
|
72
|
+
- H5/App 面向用户的默认登录面为“手机号 + 图形验证码 + 短信验证码”,同一个提交动作由服务端判断:已注册登录,未注册按当前租户开放注册策略自动注册并登录。密码登录是次级折叠/备用入口,不先要求选择“登录/注册”或“员工/客户”。企业封闭账号及用户明确指定的登录模型保留其策略;不得为了展示快捷登录而擅自开放注册、启用短信或授予员工角色。
|
|
73
|
+
- 图形验证码先用于服务端校验短信发送,短信码才证明手机号控制权;供应商未配置、余额不足或短信失败时返回可诊断原因,不能以图形码代替短信、使用万能码或返回短信明文。前端倒计时不代替后端限频、过期、用途绑定、一次性消费与重放保护。沿用官网/标准 UniApp 的实际契约,不能照抄界面后猜接口。
|
|
74
|
+
- 默认新账号只获得租户定义的最低用户角色;高级身份申请经后台审核后才升级。多角色用同一源码、同一 DiyToken 和集中 capability 切换工作模式;已审核的服务角色可默认进入工作台,同时保留已授权的普通用户能力。前端模式和角色缓存不能授予接口权限。
|
|
72
75
|
- 账号密码登录必须先检查项目本地 SDK 实际导出,常见是 `V8.Login(param)` 或 `/api/SysUser/Login`。禁止凭空写 `V8.Login.Login(...)` 这类未验证子对象。
|
|
73
76
|
- 登录、接口引擎、FormEngine、上传等所有请求头必须做大小写不敏感去重;`osclient` 只能发送一个运行期值,例如 `demo`,禁止同时传 `OsClient` 与 `osclient` 导致网络面板出现 `demo, demo`。
|
|
74
77
|
- 账号密码登录只有在同时拿到成功码、有效 token 和有效用户 `Id` 时才算成功。Microi 登录 token 可能在响应头 `authorization`,用户信息可能在响应体 `Data`;两者任一缺失都要清理 SDK token、本地用户缓存和 session。
|
|
75
78
|
- 恢复本地会话时必须重新校验 token 和用户 `Id`,禁止出现页面显示 `admin` 但状态仍是“未登录”的半登录状态。
|
|
79
|
+
- DiyToken、用户与稳定 `did` 按 `ApiBase + OsClient` 隔离持久化,使用统一 SDK/session store;存储写入失败不能继续成功导航。移动登录传准确 `_ClientType`,有效期读取子租户 `AccessTokenLifetime`(单位天),实际可能是 20、30 天或其它配置,前端不得硬编码。验收以本次 JWT 的签发/到期时间与服务端配置匹配为准,本地 JWT 解析只作调度,不能代替服务端验签。
|
|
80
|
+
- 默认接入 SDK `startTokenMaintenance()`、`resumeAuthSession(false)` 与 `refreshToken()`:按真实到期窗口以旧换新,每个请求接收响应头 `authorization`,同一运行上下文的并发请求 single-flight。有多标签会话需求时,另按 SDK 实际协议验证跨标签 Token/退出同步及竞态,不能把单实例的刷新 Promise 当作已支持跨标签单飞。前台恢复立即检查,退出、切换账号或租户递增会话代次,拒绝旧请求的 Token/用户回写及迟到失效弹窗。已到期、被吊销或管理员撤销的会话不能因本地仍有 Token 无限延长。完整协议见 [SDK Token 与终端协议](../microi-frontend-sdk/references/progressive-01-token-当前登录用户与当前终端登录协议.md)。
|
|
76
81
|
- 账号密码登录调用 `/api/SysUser/login`、`/api/SysUser/Login` 或 `V8.Login(param)` 前,必须读取 `/apiengine/platform-sys-config` 或 `V8.GetSysConfig(true)`,并根据 `Sys_Config.EnableCaptcha` 决定是否显示图形验证码。判断函数必须兼容 `1`、`true`、`'1'`、`'true'`,不要直接 `!!cfg.EnableCaptcha`。
|
|
77
82
|
- 开启验证码时,页面必须通过 `GET /api/Captcha/GetCaptcha` 获取验证码图片,读取响应头 `captchaid`,提交账号登录时传 `_CaptchaId` 和 `_CaptchaValue`;登录失败后清空输入并刷新验证码。未开启验证码时不显示验证码,不传空验证码字段。
|
|
78
83
|
- 微信小程序手机号快捷登录必须使用 `<button open-type="getPhoneNumber">`,通过 `@getphonenumber` 获取 `detail.code`,并重新调用 `uni.login({ provider:'weixin' })` 获取新的 `LoginCode`。前端不能假设能直接拿到手机号明文。
|
|
79
|
-
-
|
|
84
|
+
- 微信小程序具备正式授权能力时,手机号授权仍优先走 `Code + LoginCode`;短信输入路径共用同一平台身份与会话,并由实际能力决定备用入口,不能另建平行用户/权限 Token。
|
|
80
85
|
- 登录按钮、去登录按钮、手机号授权按钮必须是图标 + 文案按钮,具备 loading、disabled/pressed 反馈,且原生 button 默认边框要清掉。
|
|
81
86
|
- 体验版授权登录必须保留可诊断错误:请求层归一化 `uni.request.fail.errMsg`、HTTP 状态和接口 `Msg`,登录页用模态框完整展示“阶段 + 原因 + 追踪号”。后端接口引擎按阶段写脱敏系统日志;不能只在前端 catch 后显示固定“手机号登录失败”。
|
|
82
87
|
- 小程序调用手机号快速验证组件的前置页、按钮、弹窗、分享标题和失败提示不得出现“微信”“微信官方”“微信登录”“一键登录”等可能混淆腾讯官方的文案,也不得展示微信官方 Logo、相似绿色气泡图标或仿官方品牌元素。统一使用“手机号快捷登录”“手机号快速验证”等中性业务文案,只展示应用自身品牌 Logo。
|
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
- 规则同时写在 UI 状态和提交前校验中。
|
|
16
16
|
|
|
17
17
|
<!-- /microi-progressive:chunk -->
|
|
18
|
-
<!-- microi-progressive:chunk id=microi-uniapp-frontend-018 sha256=
|
|
18
|
+
<!-- microi-progressive:chunk id=microi-uniapp-frontend-018 sha256=df78e011402f4e4b8901d6f8a99392bf1ee51d3085fccc69c49fe39f425903a2 -->
|
|
19
19
|
## 账号角色与会话状态
|
|
20
20
|
|
|
21
21
|
- Microi 企业移动端默认要从 `sys_user.RoleIds`、`_Roles`、`Roles`、`RoleName`、`Level` 解析内部账号角色,不要只用“是否登录”控制界面。
|
|
22
22
|
- 角色能力必须集中在 Pinia/session store 中计算,例如 `isTechnician`、`isServiceAgent`、`isCustomerAccount`、`canAcceptOrders`、`canManageCustomers`、`canViewReports`。多角色账号取能力并集;只有服务端已确认的 `Level>=9999` 才属于平台超级管理员。前端“超级管理员”角色名只用于展示,不能授予接口权限。
|
|
23
23
|
- 客户账号判断要精确,只把“客户”“客户账号”“客户用户”或明确包含“客户账号”的角色当作客户侧账号;不要把“客户管理”等后台角色误判为客户。
|
|
24
24
|
- 所有页面、底部导航、按钮、未登录提示、头像姓名和角色文本都必须读同一个 session store。页面不能直接读取旧 storage 展示用户名。
|
|
25
|
-
-
|
|
25
|
+
- 新建手机号登录、自动注册和多角色移动端统一签发平台 DiyToken,数据按真实用户及绑定关系过滤,不能并行创建第二套长期用户/权限 Token。存量已审核的 `CustomerToken` 协议只按原接口兼容并维护隔离,不把它当新项目默认身份体系,也不混用员工接口绕过权限。
|
|
26
26
|
- 登出、登录失败、token 缺失、用户 `Id` 缺失时要统一清理 `Token`、`staffUser/customerUser`、绑定信息和本地 session。
|
|
27
27
|
- 接口引擎登录失败时要把 `Msg` 原样传到统一错误展示层,禁止在 store 或业务 API 包装中覆盖成固定文案;网络错误优先读取 `errMsg/message`,HTTP 错误同时保留状态码。
|
|
28
28
|
- 员工账号登录必须传准确 `_ClientType`;H5、App、微信/支付宝/飞书/抖音小程序均属于移动长效终端,默认读取 SaaS 引擎 `AccessTokenLifetime`(单位天,默认 30 天)。完整 Token 协议以 `microi-frontend-sdk/SKILL.md` 为准。
|
|
@@ -117,10 +117,10 @@
|
|
|
117
117
|
5. 商品详情、公告、协议等富文本使用 `MciRichText` 或遵循同等结构。
|
|
118
118
|
|
|
119
119
|
<!-- /microi-progressive:chunk -->
|
|
120
|
-
<!-- microi-progressive:chunk id=microi-uniapp-frontend-025 sha256=
|
|
120
|
+
<!-- microi-progressive:chunk id=microi-uniapp-frontend-025 sha256=aae9073d117844c10351d533df89c546661e63b15e82319df9e818b9dee004f9 -->
|
|
121
121
|
## 登录、图标与主题补充规范
|
|
122
122
|
|
|
123
|
-
-
|
|
123
|
+
- 登录页不同时铺开两套完整登录系统。H5/App 默认手机号、图形验证码、短信验证码统一登录/自动注册,遵守当前租户开放注册策略;密码作为次级备用入口。微信小程序正式能力可用时优先展示 `<button open-type="getPhoneNumber">` 手机号授权登录,仍共用平台 DiyToken。完整流程以入口“默认快捷登录、自动注册与长效会话”为准。
|
|
124
124
|
- 微信小程序手机号授权登录必须使用 `@getphonenumber` 的 `detail.code`,并重新调用 `uni.login({ provider:'weixin' })` 获取新的 `LoginCode`;不要假设前端能拿到手机号明文。
|
|
125
125
|
- 账号密码兜底入口必须跟随 `Sys_Config.EnableCaptcha`:开启时显示验证码图片和输入框,提交 `_CaptchaId/_CaptchaValue`;关闭时完全隐藏且不提交空字段。
|
|
126
126
|
- 登录页、我的页、设置页不要向终端用户展示“当前租户 / OsClient / 移动端版本 / API 地址 / 调试版本”等内部实现块。
|