@microi.net/cli 5.7.8 → 5.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +6 -6
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-codex-stdio-adapter.js +0 -0
- package/scripts/mcp-server.js +113 -112
- package/scripts/microi-cli.js +57 -57
- package/scripts/microi-codex-broker.js +450 -450
- package/scripts/microi-codex-router.js +0 -0
- package/scripts/microi-skills.meta.json +364 -364
- package/skills/.microi-skills-version.json +2 -2
- package/skills/README.md +286 -286
- package/skills/ai-engine/SKILL.md +265 -265
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +396 -396
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +90 -90
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +78 -78
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +172 -172
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +106 -106
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +237 -237
- 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 +144 -144
- 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 +196 -196
- 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 +167 -167
- package/skills/microi-codex/SKILL.md +72 -70
- package/skills/microi-codex-installer/SKILL.md +225 -223
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +108 -108
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/references/deployment-matrix.md +101 -101
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +226 -226
- package/skills/microi-form-engine/references/component-catalog.md +216 -216
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +205 -205
- 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 +235 -235
- package/skills/microi-frontend-sdk/SKILL.md +188 -188
- 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 +176 -176
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +323 -323
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +181 -181
- 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 +213 -213
- 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 +128 -128
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/references/acceptance.md +49 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +39 -39
- package/skills/microi-system-delivery/SKILL.md +134 -134
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
- 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 +189 -189
- package/skills/microi-ui/SKILL.md +174 -174
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
- package/skills/microi-uniapp-frontend/SKILL.md +193 -193
- 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 +225 -225
- 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 +154 -154
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +250 -250
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +182 -182
- 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 +234 -234
- 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 +60 -60
- package/skills/performance-testing/SKILL.md +221 -221
- package/skills/playwright-e2e/SKILL.md +197 -197
- 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 +173 -173
- 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 +183 -183
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +238 -238
- package/skills/system-observability/references/memory-incident-triage.md +70 -70
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +191 -191
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +198 -198
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +137 -137
- 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 +235 -235
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
- 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 +238 -238
- 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 +194 -194
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
- package/skills/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 +117 -117
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +155 -155
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +103 -103
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-cache-pattern/SKILL.md +306 -306
- package/skills/v8-crud-api/SKILL.md +175 -175
- 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 +226 -226
- 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 +49 -49
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +209 -209
- 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 +211 -211
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- 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 +42 -42
- package/skills/v8-file-upload/SKILL.md +263 -263
- 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 +101 -101
- 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 +150 -150
- package/skills/v8-formengine-http/SKILL.md +219 -219
- package/skills/v8-frontend-events/SKILL.md +178 -178
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +246 -246
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- 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 +44 -44
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +180 -180
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
- 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 +228 -228
- 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 +104 -104
- package/skills/v8-mongodb/SKILL.md +192 -192
- package/skills/v8-mq-mqtt/SKILL.md +176 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +219 -219
- package/skills/v8-security/SKILL.md +168 -168
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +198 -198
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +158 -158
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +144 -144
- 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 +197 -197
- 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 +46 -46
- package/skills/v8-tcp-integration/SKILL.md +147 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +90 -90
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +243 -243
- 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 +180 -180
- package/skills/vision-engine/SKILL.md +159 -159
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +261 -261
- 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 +208 -208
- 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 +216 -216
- 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 +27 -27
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: ocr-engine
|
|
3
|
-
description: 为 Microi 吾码集成、配置、调用和验收通用 OCR 能力。处理 V8.OCR、/apiengine/platform-ocr-recognize、PaddleX/PaddleOCR 服务、SaaS 租户 OCR 配置、图片或 PDF 文字识别、OCR 安全边界、Docker 部署和多节点交付时使用。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
-
|
|
8
|
-
# Microi OCR 引擎
|
|
9
|
-
|
|
10
|
-
## 先读取相关规范
|
|
11
|
-
|
|
12
|
-
- 涉及租户配置时,读取 `../v8-saas-multi-tenant/SKILL.md`。
|
|
13
|
-
- 涉及外部 OCR 服务时,读取 `../v8-http-integration/SKILL.md`。
|
|
14
|
-
- 涉及 Base64、上传文件或私有文件时,读取 `../v8-file-upload/SKILL.md`。
|
|
15
|
-
- 涉及权限、密钥、日志或匿名接口时,读取 `../v8-security/SKILL.md`。
|
|
16
|
-
- 涉及数据库字段和表单 Tab 时,读取 `../microi-db-schema/SKILL.md`。
|
|
17
|
-
|
|
18
|
-
## 固定架构
|
|
19
|
-
|
|
20
|
-
Microi 后端只实现统一 OCR 网关、租户隔离、协议适配和安全治理,不在 .NET 进程内训练或维护 OCR 模型。默认提供方为独立部署的 PaddleX OCR 服务;业务代码只能调用 `IMicroiOcr`、`V8.OCR` 或官方 Managed 接口 `/apiengine/platform-ocr-recognize`,不得直接读取 SaaS 密钥并自行拼接 HTTP 请求。
|
|
21
|
-
|
|
22
|
-
同步识别必须绑定当前请求和当前租户。批量、超大文件或长耗时 OCR 应进入共享数据库/MQ/outbox,以全局任务 Id 做幂等;不得把任务状态、队列或锁只放在单机内存中。
|
|
23
|
-
|
|
24
|
-
## SaaS 配置
|
|
25
|
-
|
|
26
|
-
配置位于 `sys_osclients` 的独立“OCR识别”Tab:
|
|
27
|
-
|
|
28
|
-
| 字段 | 用途 | 默认值 |
|
|
29
|
-
|---|---|---|
|
|
30
|
-
| `OcrEnabled` | 租户总开关,默认关闭 | `0` |
|
|
31
|
-
| `OcrProvider` | `PaddleX` 或 `PaddleXHighStability` | `PaddleX` |
|
|
32
|
-
| `OcrEndpoint` | OCR 服务完整接口地址 | 空 |
|
|
33
|
-
| `OcrApiKey` | 可选 Bearer 密钥,只允许后端使用 | 空 |
|
|
34
|
-
| `OcrHeadersJson` | 可选服务端固定请求头 JSON | 空 |
|
|
35
|
-
| `OcrTimeoutSeconds` | 单次超时秒数 | `60` |
|
|
36
|
-
| `OcrMaxFileMB` | 单文件大小上限 | `20` |
|
|
37
|
-
| `OcrMaxPages` | PDF 页数上限 | `10` |
|
|
38
|
-
| `OcrMinConfidence` | 返回文本最低置信度 | `0` |
|
|
39
|
-
|
|
40
|
-
这些配置不得投影到 `V8.OsClientModel`,不得由前端请求覆盖,不得写入普通日志。没有启用、没有 endpoint 或配置无效时必须失败关闭。
|
|
41
|
-
|
|
42
|
-
## 调用
|
|
43
|
-
|
|
44
|
-
接口引擎或后端表单事件中:
|
|
45
|
-
|
|
46
|
-
```js
|
|
47
|
-
var result = await V8.OCR.Recognize({
|
|
48
|
-
FileByteBase64: V8.FilesByteBase64.invoice,
|
|
49
|
-
FileName: 'invoice.png',
|
|
50
|
-
UseDocOrientationClassify: true,
|
|
51
|
-
UseDocUnwarping: true,
|
|
52
|
-
UseTextlineOrientation: true,
|
|
53
|
-
TextRecScoreThresh: 0.5,
|
|
54
|
-
ReturnWordBox: false
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
if (result.Code !== 1) {
|
|
58
|
-
return result;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
Code: 1,
|
|
63
|
-
Data: {
|
|
64
|
-
Text: result.Data.Text,
|
|
65
|
-
Pages: result.Data.Pages,
|
|
66
|
-
Provider: result.Data.Provider
|
|
67
|
-
}
|
|
68
|
-
};
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
已登录客户端调用 `POST /apiengine/platform-ocr-recognize`,请求体与 `V8.OCR.Recognize` 一致,并携带正常登录 Token。`OsClient` 以 Token 解析结果为准。该接口由官方应用以 `Managed` 策略恢复;个性化逻辑只能写入租户 `platform-runtime-custom-hook`,且官方接口不会把文件 Base64、识别原文或密钥传给 Hook。
|
|
72
|
-
|
|
73
|
-
标准成功结果包含 `Provider`、`Text`、`Pages`、`ElapsedMilliseconds`。每页包含 `PageIndex`、`Text`、`Regions`,每个区域包含 `Text`、`Confidence` 和归一化后的 `Polygon`。
|
|
74
|
-
|
|
75
|
-
## 协议与输入边界
|
|
76
|
-
|
|
77
|
-
- `PaddleX` 使用基础服务协议 `POST /ocr`。
|
|
78
|
-
- `PaddleXHighStability` 使用 KServe 协议 `POST /v2/models/ocr/infer`。
|
|
79
|
-
- 接受 PDF、PNG、JPEG、BMP、GIF、TIFF、WebP;同时检查文件扩展名、Base64 和文件魔数。
|
|
80
|
-
- 固定 `visualize=false`,避免服务返回大体积可视化图片。
|
|
81
|
-
- 由服务端限制文件大小、超时、PDF 页数、响应体大小和最低置信度。
|
|
82
|
-
- 禁止接受调用方传入 endpoint、API key、任意请求头、代理地址或本地文件路径,防止 SSRF 和密钥绕过。
|
|
83
|
-
- 日志只记录租户、提供方、状态码、耗时和安全裁剪后的错误,不记录文件 Base64、识别原文、API key 或完整响应。
|
|
84
|
-
|
|
85
|
-
## Docker 与多节点
|
|
86
|
-
|
|
87
|
-
- OCR 模型服务独立部署,固定 PaddleX/PaddlePaddle/模型版本;不要使用浮动 `latest` 直接上线。
|
|
88
|
-
- CPU 基线位于 `../../Microi.Server/Microi.OCR/deploy/paddlex/`,固定 PaddleX 3.6.1 与 PaddlePaddle 3.2.2;公开镜像固定为 `registry.cn-hangzhou.aliyuncs.com/microios/paddlex-ocr:3.6.1-paddle3.2.2-cpu`,当前只交付 `linux/amd64`。PaddlePaddle 3.3.0 存在 CPU oneDNN PIR 推理兼容问题,在完成真实图片回归前不得升级。
|
|
89
|
-
- 发布镜像使用同目录 `publish-image.ps1`:它从根目录发布配置读取凭据,通过隔离 Docker 配置和 `--password-stdin` 登录,推送后退出并匿名回读公开摘要。不得在命令行、日志或文档中展开用户名/密码,也不得只凭 `docker push` 返回成功就宣布国内镜像可用。
|
|
90
|
-
- 发布镜像时执行 `create_pipeline("OCR")` 预置默认产线模型。运行时使用 named volume 挂载 `/home/microi/.paddlex`,让 Docker 首次创建卷时从镜像复制模型;不要改成空宿主机 bind mount,否则会遮住镜像内的预置模型并触发重新下载。
|
|
91
|
-
- OCR 宿主机端口只绑定 `127.0.0.1`;Docker 化 API 与 OCR 同时加入 external bridge 网络 `microi-ocr`,一键安装的内部 endpoint 固定为 `http://microi-install-ocr:8080/ocr`。不得通过公网/LAN 回环调用同机 OCR。
|
|
92
|
-
- `install-microi.sh` 默认尝试安装 OCR,但先部署 API/Web 并通过 liveness、完整 `ServerVersion` 升级链和 readiness。随后必须依次满足“固定镜像拉取并回读为 amd64 → OCR healthy → Upgrade29 的 9 个物理字段数据库回读 → 唯一活动主租户 → 配置写入后回读 → API 重启 readiness”才设置 `OcrEnabled=1`;任一步失败都保持 OCR 能力关闭并记录警告,但不得中断已经可用的核心平台。字段每秒回读一次且最多 15 秒;正常升级应首轮命中,镜像过旧或迁移失败应快速关闭 OCR,禁止无意义等待 5 分钟。不要用安装脚本直接伪造 `diy_field` 元数据绕过 Upgrade29。
|
|
93
|
-
- API/Web 官方浮动 `latest` 必须在 Compose 启动时强制回源拉取,避免旧本机镜像缺少 Upgrade29。核心门禁失败时输出“安装未完成”恢复汇总并保留非零退出码;OCR 字段、服务或配置门禁失败时,成功汇总明确显示“OCR SaaS 未启用”和附加能力警告。两种汇总都不是启用 OCR 的依据。
|
|
94
|
-
- OCR 使用固定不可变版本,不加入只跟踪 API/Web 浮动标签的 Watchtower 自动更新列表;升级镜像时先发布新 tag、匿名回读 digest/架构,再修改 Compose 与安装器。
|
|
95
|
-
- 登录国内镜像源必须从本机发布配置读取凭据并走 `docker login --password-stdin`,不得输出密码。推送成功不是发布验收,必须使用隔离的匿名 Docker config 回读 manifest/digest,必要时再做匿名拉取。
|
|
96
|
-
- 不要在内存不足的共享开发机上直接构建模型镜像。构建前检查物理内存、Docker 占用与同类进程;保留至少 `max(6 GB, 物理内存 20%)`,不足时延后构建而不是停止他人服务。
|
|
97
|
-
- API 多节点共享同一个或同一组 OCR endpoint;每节点仅保留无状态 `HttpClient`。
|
|
98
|
-
- OCR 服务至少配置 readiness、并发上限、CPU/GPU 资源上限、请求体上限和访问控制。
|
|
99
|
-
- GPU 推理采用独立 Worker/服务池,避免 OCR 模型抢占 Microi API 内存。
|
|
100
|
-
- 滚动升级时保持旧新 OCR 响应协议兼容;协议变更先扩展解析器,再升级服务。
|
|
101
|
-
|
|
102
|
-
## 验收门禁
|
|
103
|
-
|
|
104
|
-
交付时分别报告:
|
|
105
|
-
|
|
106
|
-
1. 源码:网关、V8、REST、SaaS 字段、密钥投影隔离是否齐全。
|
|
107
|
-
2. 定向测试:基础协议、高稳定协议、低置信度过滤、错误响应、配置隔离。
|
|
108
|
-
3. 数据库:目标 `OsClient` 的 Tab、字段和物理列经 MCP 写后回读。
|
|
109
|
-
4. 服务:真实 PNG/JPEG/PDF 至少各一例,包含中英文、旋转和多页场景。
|
|
110
|
-
5. 多节点:两个 API 节点同时调用,同租户限制一致,服务故障时均能超时/降级且不泄漏密钥。
|
|
111
|
-
6. UI:SaaS 配置表单能查看独立 Tab、保存配置,密码字段不出现在普通前端上下文。
|
|
112
|
-
|
|
113
|
-
没有真实 OCR endpoint、服务版本和样例识别结果时,只能声明“平台接入完成、运行验收待配置”,不能声明生产 OCR 已可用。
|
|
1
|
+
---
|
|
2
|
+
name: ocr-engine
|
|
3
|
+
description: 为 Microi 吾码集成、配置、调用和验收通用 OCR 能力。处理 V8.OCR、/apiengine/platform-ocr-recognize、PaddleX/PaddleOCR 服务、SaaS 租户 OCR 配置、图片或 PDF 文字识别、OCR 安全边界、Docker 部署和多节点交付时使用。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
+
|
|
8
|
+
# Microi OCR 引擎
|
|
9
|
+
|
|
10
|
+
## 先读取相关规范
|
|
11
|
+
|
|
12
|
+
- 涉及租户配置时,读取 `../v8-saas-multi-tenant/SKILL.md`。
|
|
13
|
+
- 涉及外部 OCR 服务时,读取 `../v8-http-integration/SKILL.md`。
|
|
14
|
+
- 涉及 Base64、上传文件或私有文件时,读取 `../v8-file-upload/SKILL.md`。
|
|
15
|
+
- 涉及权限、密钥、日志或匿名接口时,读取 `../v8-security/SKILL.md`。
|
|
16
|
+
- 涉及数据库字段和表单 Tab 时,读取 `../microi-db-schema/SKILL.md`。
|
|
17
|
+
|
|
18
|
+
## 固定架构
|
|
19
|
+
|
|
20
|
+
Microi 后端只实现统一 OCR 网关、租户隔离、协议适配和安全治理,不在 .NET 进程内训练或维护 OCR 模型。默认提供方为独立部署的 PaddleX OCR 服务;业务代码只能调用 `IMicroiOcr`、`V8.OCR` 或官方 Managed 接口 `/apiengine/platform-ocr-recognize`,不得直接读取 SaaS 密钥并自行拼接 HTTP 请求。
|
|
21
|
+
|
|
22
|
+
同步识别必须绑定当前请求和当前租户。批量、超大文件或长耗时 OCR 应进入共享数据库/MQ/outbox,以全局任务 Id 做幂等;不得把任务状态、队列或锁只放在单机内存中。
|
|
23
|
+
|
|
24
|
+
## SaaS 配置
|
|
25
|
+
|
|
26
|
+
配置位于 `sys_osclients` 的独立“OCR识别”Tab:
|
|
27
|
+
|
|
28
|
+
| 字段 | 用途 | 默认值 |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `OcrEnabled` | 租户总开关,默认关闭 | `0` |
|
|
31
|
+
| `OcrProvider` | `PaddleX` 或 `PaddleXHighStability` | `PaddleX` |
|
|
32
|
+
| `OcrEndpoint` | OCR 服务完整接口地址 | 空 |
|
|
33
|
+
| `OcrApiKey` | 可选 Bearer 密钥,只允许后端使用 | 空 |
|
|
34
|
+
| `OcrHeadersJson` | 可选服务端固定请求头 JSON | 空 |
|
|
35
|
+
| `OcrTimeoutSeconds` | 单次超时秒数 | `60` |
|
|
36
|
+
| `OcrMaxFileMB` | 单文件大小上限 | `20` |
|
|
37
|
+
| `OcrMaxPages` | PDF 页数上限 | `10` |
|
|
38
|
+
| `OcrMinConfidence` | 返回文本最低置信度 | `0` |
|
|
39
|
+
|
|
40
|
+
这些配置不得投影到 `V8.OsClientModel`,不得由前端请求覆盖,不得写入普通日志。没有启用、没有 endpoint 或配置无效时必须失败关闭。
|
|
41
|
+
|
|
42
|
+
## 调用
|
|
43
|
+
|
|
44
|
+
接口引擎或后端表单事件中:
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
var result = await V8.OCR.Recognize({
|
|
48
|
+
FileByteBase64: V8.FilesByteBase64.invoice,
|
|
49
|
+
FileName: 'invoice.png',
|
|
50
|
+
UseDocOrientationClassify: true,
|
|
51
|
+
UseDocUnwarping: true,
|
|
52
|
+
UseTextlineOrientation: true,
|
|
53
|
+
TextRecScoreThresh: 0.5,
|
|
54
|
+
ReturnWordBox: false
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
if (result.Code !== 1) {
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
Code: 1,
|
|
63
|
+
Data: {
|
|
64
|
+
Text: result.Data.Text,
|
|
65
|
+
Pages: result.Data.Pages,
|
|
66
|
+
Provider: result.Data.Provider
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
已登录客户端调用 `POST /apiengine/platform-ocr-recognize`,请求体与 `V8.OCR.Recognize` 一致,并携带正常登录 Token。`OsClient` 以 Token 解析结果为准。该接口由官方应用以 `Managed` 策略恢复;个性化逻辑只能写入租户 `platform-runtime-custom-hook`,且官方接口不会把文件 Base64、识别原文或密钥传给 Hook。
|
|
72
|
+
|
|
73
|
+
标准成功结果包含 `Provider`、`Text`、`Pages`、`ElapsedMilliseconds`。每页包含 `PageIndex`、`Text`、`Regions`,每个区域包含 `Text`、`Confidence` 和归一化后的 `Polygon`。
|
|
74
|
+
|
|
75
|
+
## 协议与输入边界
|
|
76
|
+
|
|
77
|
+
- `PaddleX` 使用基础服务协议 `POST /ocr`。
|
|
78
|
+
- `PaddleXHighStability` 使用 KServe 协议 `POST /v2/models/ocr/infer`。
|
|
79
|
+
- 接受 PDF、PNG、JPEG、BMP、GIF、TIFF、WebP;同时检查文件扩展名、Base64 和文件魔数。
|
|
80
|
+
- 固定 `visualize=false`,避免服务返回大体积可视化图片。
|
|
81
|
+
- 由服务端限制文件大小、超时、PDF 页数、响应体大小和最低置信度。
|
|
82
|
+
- 禁止接受调用方传入 endpoint、API key、任意请求头、代理地址或本地文件路径,防止 SSRF 和密钥绕过。
|
|
83
|
+
- 日志只记录租户、提供方、状态码、耗时和安全裁剪后的错误,不记录文件 Base64、识别原文、API key 或完整响应。
|
|
84
|
+
|
|
85
|
+
## Docker 与多节点
|
|
86
|
+
|
|
87
|
+
- OCR 模型服务独立部署,固定 PaddleX/PaddlePaddle/模型版本;不要使用浮动 `latest` 直接上线。
|
|
88
|
+
- CPU 基线位于 `../../Microi.Server/Microi.OCR/deploy/paddlex/`,固定 PaddleX 3.6.1 与 PaddlePaddle 3.2.2;公开镜像固定为 `registry.cn-hangzhou.aliyuncs.com/microios/paddlex-ocr:3.6.1-paddle3.2.2-cpu`,当前只交付 `linux/amd64`。PaddlePaddle 3.3.0 存在 CPU oneDNN PIR 推理兼容问题,在完成真实图片回归前不得升级。
|
|
89
|
+
- 发布镜像使用同目录 `publish-image.ps1`:它从根目录发布配置读取凭据,通过隔离 Docker 配置和 `--password-stdin` 登录,推送后退出并匿名回读公开摘要。不得在命令行、日志或文档中展开用户名/密码,也不得只凭 `docker push` 返回成功就宣布国内镜像可用。
|
|
90
|
+
- 发布镜像时执行 `create_pipeline("OCR")` 预置默认产线模型。运行时使用 named volume 挂载 `/home/microi/.paddlex`,让 Docker 首次创建卷时从镜像复制模型;不要改成空宿主机 bind mount,否则会遮住镜像内的预置模型并触发重新下载。
|
|
91
|
+
- OCR 宿主机端口只绑定 `127.0.0.1`;Docker 化 API 与 OCR 同时加入 external bridge 网络 `microi-ocr`,一键安装的内部 endpoint 固定为 `http://microi-install-ocr:8080/ocr`。不得通过公网/LAN 回环调用同机 OCR。
|
|
92
|
+
- `install-microi.sh` 默认尝试安装 OCR,但先部署 API/Web 并通过 liveness、完整 `ServerVersion` 升级链和 readiness。随后必须依次满足“固定镜像拉取并回读为 amd64 → OCR healthy → Upgrade29 的 9 个物理字段数据库回读 → 唯一活动主租户 → 配置写入后回读 → API 重启 readiness”才设置 `OcrEnabled=1`;任一步失败都保持 OCR 能力关闭并记录警告,但不得中断已经可用的核心平台。字段每秒回读一次且最多 15 秒;正常升级应首轮命中,镜像过旧或迁移失败应快速关闭 OCR,禁止无意义等待 5 分钟。不要用安装脚本直接伪造 `diy_field` 元数据绕过 Upgrade29。
|
|
93
|
+
- API/Web 官方浮动 `latest` 必须在 Compose 启动时强制回源拉取,避免旧本机镜像缺少 Upgrade29。核心门禁失败时输出“安装未完成”恢复汇总并保留非零退出码;OCR 字段、服务或配置门禁失败时,成功汇总明确显示“OCR SaaS 未启用”和附加能力警告。两种汇总都不是启用 OCR 的依据。
|
|
94
|
+
- OCR 使用固定不可变版本,不加入只跟踪 API/Web 浮动标签的 Watchtower 自动更新列表;升级镜像时先发布新 tag、匿名回读 digest/架构,再修改 Compose 与安装器。
|
|
95
|
+
- 登录国内镜像源必须从本机发布配置读取凭据并走 `docker login --password-stdin`,不得输出密码。推送成功不是发布验收,必须使用隔离的匿名 Docker config 回读 manifest/digest,必要时再做匿名拉取。
|
|
96
|
+
- 不要在内存不足的共享开发机上直接构建模型镜像。构建前检查物理内存、Docker 占用与同类进程;保留至少 `max(6 GB, 物理内存 20%)`,不足时延后构建而不是停止他人服务。
|
|
97
|
+
- API 多节点共享同一个或同一组 OCR endpoint;每节点仅保留无状态 `HttpClient`。
|
|
98
|
+
- OCR 服务至少配置 readiness、并发上限、CPU/GPU 资源上限、请求体上限和访问控制。
|
|
99
|
+
- GPU 推理采用独立 Worker/服务池,避免 OCR 模型抢占 Microi API 内存。
|
|
100
|
+
- 滚动升级时保持旧新 OCR 响应协议兼容;协议变更先扩展解析器,再升级服务。
|
|
101
|
+
|
|
102
|
+
## 验收门禁
|
|
103
|
+
|
|
104
|
+
交付时分别报告:
|
|
105
|
+
|
|
106
|
+
1. 源码:网关、V8、REST、SaaS 字段、密钥投影隔离是否齐全。
|
|
107
|
+
2. 定向测试:基础协议、高稳定协议、低置信度过滤、错误响应、配置隔离。
|
|
108
|
+
3. 数据库:目标 `OsClient` 的 Tab、字段和物理列经 MCP 写后回读。
|
|
109
|
+
4. 服务:真实 PNG/JPEG/PDF 至少各一例,包含中英文、旋转和多页场景。
|
|
110
|
+
5. 多节点:两个 API 节点同时调用,同租户限制一致,服务故障时均能超时/降级且不泄漏密钥。
|
|
111
|
+
6. UI:SaaS 配置表单能查看独立 Tab、保存配置,密码字段不出现在普通前端上下文。
|
|
112
|
+
|
|
113
|
+
没有真实 OCR endpoint、服务版本和样例识别结果时,只能声明“平台接入完成、运行验收待配置”,不能声明生产 OCR 已可用。
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface:
|
|
2
|
-
display_name: "Microi OCR 引擎"
|
|
3
|
-
short_description: "集成、配置和验证 Microi 通用 OCR 能力"
|
|
4
|
-
default_prompt: "Use $ocr-engine to integrate and validate tenant-isolated OCR in Microi."
|
|
1
|
+
interface:
|
|
2
|
+
display_name: "Microi OCR 引擎"
|
|
3
|
+
short_description: "集成、配置和验证 Microi 通用 OCR 能力"
|
|
4
|
+
default_prompt: "Use $ocr-engine to integrate and validate tenant-isolated OCR in Microi."
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: page-engine
|
|
3
|
-
description: 生成和审查 Microi 界面引擎 Page Engine 页面 JSON。用于创建仪表盘、图表、表格、地图、组件、页面布局,或校验 mic_page formData JSON。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
-
|
|
8
|
-
# Microi 界面引擎(Page Engine)页面 JSON 生成
|
|
9
|
-
|
|
1
|
+
---
|
|
2
|
+
name: page-engine
|
|
3
|
+
description: 生成和审查 Microi 界面引擎 Page Engine 页面 JSON。用于创建仪表盘、图表、表格、地图、组件、页面布局,或校验 mic_page formData JSON。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Codex 非阻塞自动更新:** 当前宿主为 Codex 时,吾码 CLI、Codex 插件与工作区 AI/MCP 由后台自动更新;需要诊断时读取 `../microi-codex-installer/SKILL.md`。更新失败、等待空闲或尚未重载均不得阻断当前、正在进行或新建任务。非 Codex 宿主跳过此项。
|
|
7
|
+
|
|
8
|
+
# Microi 界面引擎(Page Engine)页面 JSON 生成
|
|
9
|
+
|
|
10
10
|
MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_page_design`;版本治理入口见下文。保存工具写入后仍需回读 `mic_page`,不能把生成成功当作持久化成功。
|
|
11
11
|
|
|
12
12
|
## 紧凑报表与平台主题
|
|
@@ -18,7 +18,7 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
|
|
|
18
18
|
运行容器默认 `wrapperOption.heightMode="content"`,`height` 只保留设计器布局尺寸。仅需固定图形画布时设为 `fixed`;图表自身可以设置 240–320px 高度。不要为一行指标、标题、三行表格预留 200–400px 空容器。紧凑布局的卡片间距建议 10–16px,面板内边距 8–16px;统计组件 `widgetParams[24].value` 支持 `summary`(图标和大数字)、`detail`(多行小指标)及兼容的 `cards`。
|
|
19
19
|
|
|
20
20
|
用户提供参考截图时,先拆出面板行列比例、指标主次、图表与表格高度、标题/筛选位置,再用原生 pannel/statistic/chart/tabel/list 组合配置。不能把所有指标替换成一排大色块,也不能用模板假数据声称已接通客户业务。必须用同一视口截图检查浅色和平台深色,检查页面缩放后的断行与纵向空白;布局接近度和真实数据绑定分别验收。
|
|
21
|
-
|
|
21
|
+
|
|
22
22
|
### 平台智能工作首页
|
|
23
23
|
|
|
24
24
|
保留 `aiengine` 原生 AI 创作中心,与 `homeoverview` 工作概览组成桌面首行 14/10 栅格;任务、月历与公告放在下一行,移动端自动切为 24 栅格。不能把任务的完整 15 行列表或未配置日程的大空白块直接堆在首屏。
|
|
@@ -30,177 +30,177 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
|
|
|
30
30
|
- 修改已有首页前通过 MCP 读取页面及历史 `CurrentHash`,保存传 `expectedCurrentHash`,再回读 JSON 和历史,保留可恢复版本。
|
|
31
31
|
|
|
32
32
|
你正在为 Microi 吾码平台生成界面引擎页面的 JSON 数据。界面引擎页面由 `formData` 对象描述,用户导入 JSON 即可使用。
|
|
33
|
-
|
|
34
|
-
<!-- microi-progressive:begin -->
|
|
35
|
-
<!-- microi-progressive:chunk id=page-engine-000 sha256=e9ccd20e2c3504afc0a91f5dbe93ed755aed4e83e9ffec13af5b9d60528986e0 -->
|
|
36
|
-
## 设计器源码事件
|
|
37
|
-
|
|
38
|
-
只有在扩展界面引擎设计器源码时才使用全局事件总线。用
|
|
39
|
-
`EventBus.on(eventName, handler)` 监听保存、日期选择或组件跳转等事件,并在
|
|
40
|
-
组件卸载时逐项调用 `EventBus.off(eventName)`。重复挂载不解绑会造成一次操作
|
|
41
|
-
触发多次;普通页面 JSON 生成不需要注册事件总线。
|
|
42
|
-
|
|
43
|
-
<!-- /microi-progressive:chunk -->
|
|
44
|
-
<!-- microi-progressive:chunk id=page-engine-001 sha256=57717991f9c7de557b524ec36fc9bdd716080b71b682439f1b6662b0b9b2f45c -->
|
|
45
|
-
## 核心数据结构
|
|
46
|
-
|
|
47
|
-
```
|
|
48
|
-
formData(页面)
|
|
49
|
-
├── Id: string // 页面唯一ID(GUID)
|
|
50
|
-
├── Title: string // 页面标题
|
|
51
|
-
├── Number: string // 页面编号(如 PAGE1)
|
|
52
|
-
├── Desc: string // 页面描述
|
|
53
|
-
└── JsonObj
|
|
54
|
-
├── formConfig // 页面全局配置
|
|
55
|
-
└── wrapperList[] // 容器列表
|
|
56
|
-
├── wrapperOption // 容器配置
|
|
57
|
-
└── widgetList[] // 组件列表
|
|
58
|
-
├── widgetOption // 组件通用配置
|
|
59
|
-
└── widgetParams[] // 组件私有参数
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
<!-- /microi-progressive:chunk -->
|
|
63
|
-
<!-- microi-progressive:chunk id=page-engine-002 sha256=6a1a85b40bcb5f8be694b0aad73a805083acd0d6fcd9cba36278dc9b51d24dcb -->
|
|
64
|
-
## formConfig 页面全局配置
|
|
65
|
-
|
|
66
|
-
```json
|
|
67
|
-
{
|
|
68
|
-
"gutter": 0, "mask": true, "drag": true, "left": true,
|
|
69
|
-
"hover": true, "shadow": true, "link": false, "watermark": false,
|
|
70
|
-
"mobile": false, "dark": false, "autoRefresh": 0, "lastRefreshTime": "",
|
|
71
|
-
"watermarkStyle": {
|
|
72
|
-
"content": "Microi吾码",
|
|
73
|
-
"font": { "fontSize": 16, "color": "rgba(255, 0, 0, 0.15)" },
|
|
74
|
-
"rotate": -22
|
|
75
|
-
},
|
|
76
|
-
"dynamicStyle": { "padding": "4px", "backgroundColor": "", "opacity": 1 }
|
|
77
|
-
}
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
<!-- /microi-progressive:chunk -->
|
|
81
|
-
<!-- microi-progressive:chunk id=page-engine-003 sha256=8afb75b0e4d85ab9f56a7ba018e1cc50f758d3e604683d8c38d5f0a45d53f135 -->
|
|
82
|
-
## 容器类型
|
|
83
|
-
|
|
84
|
-
| type | label | 说明 |
|
|
85
|
-
|------|-------|------|
|
|
86
|
-
| `pannel` | 卡片 | 标准容器,包含一个 `widgetList` |
|
|
87
|
-
| `tabs` | 选项卡 | 多标签页容器,使用 `tabWidgetMap` 存储每个 tab 的组件 |
|
|
88
|
-
|
|
89
|
-
### 卡片容器(pannel)关键字段
|
|
90
|
-
|
|
91
|
-
```json
|
|
92
|
-
{
|
|
93
|
-
"type": "pannel",
|
|
94
|
-
"label": "卡片",
|
|
95
|
-
"hidden": false,
|
|
96
|
-
"wrapperOption": {
|
|
97
|
-
"number": 10001, // 随机5位整数,页面内唯一
|
|
98
|
-
"span": 12, // 栅格宽度(1-24,24=满宽)
|
|
99
|
-
"height": 300, // 容器高度(px)
|
|
100
|
-
"margin": "0px 10px 10px 0px",
|
|
101
|
-
"dynamicStyle": { "padding": "10px", "backgroundColor": "" },
|
|
102
|
-
"titleOption": {
|
|
103
|
-
"hidden": true, // true=隐藏标题
|
|
104
|
-
"title": "未命名",
|
|
105
|
-
"dynamicStyle": { "textAlign": "left", "padding": "0px", "height": "20px", "lineHeight": "20px", "fontSize": "14px", "color": "" },
|
|
106
|
-
"moreOption": { "hidden": true, "icon": "More", "iconShow": false, "text": "更多", "linkurl": "/", "linktype": "router", "refresh": "0", "datetime": "0", "autotime": false, "autotimeval": 1, "dynamicStyle": { "color": "", "fontSize": "12px" } }
|
|
107
|
-
}
|
|
108
|
-
},
|
|
109
|
-
"widgetList": []
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
### 选项卡容器(tabs)
|
|
114
|
-
|
|
115
|
-
组件放在 `tabWidgetMap[tabKey][]` 中,**不**放在 `widgetList` 中。
|
|
116
|
-
|
|
117
|
-
```json
|
|
118
|
-
{
|
|
119
|
-
"type": "tabs",
|
|
120
|
-
"wrapperOption": {
|
|
121
|
-
"number": 10002, "span": 24, "height": 400,
|
|
122
|
-
"tabType": "", // '' | 'card' | 'border-card'
|
|
123
|
-
"tabPosition": "top", // 'top' | 'right' | 'bottom' | 'left'
|
|
124
|
-
"tabs": [
|
|
125
|
-
{ "key": "tab_1", "label": "标签页1" },
|
|
126
|
-
{ "key": "tab_2", "label": "标签页2" }
|
|
127
|
-
],
|
|
128
|
-
"activeTab": "tab_1"
|
|
129
|
-
},
|
|
130
|
-
"tabWidgetMap": { "tab_1": [], "tab_2": [] },
|
|
131
|
-
"widgetList": []
|
|
132
|
-
}
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
<!-- /microi-progressive:chunk -->
|
|
136
|
-
<!-- microi-progressive:chunk id=page-engine-004 sha256=9c7c85bb0d25267d07e45d9abeb5691c2f0ffd9da233351cf2f448a9b848cea5 -->
|
|
137
|
-
## 组件通用结构
|
|
138
|
-
|
|
139
|
-
```json
|
|
140
|
-
{
|
|
141
|
-
"type": "bar",
|
|
142
|
-
"label": "柱状图",
|
|
143
|
-
"category": 0,
|
|
144
|
-
"show": 1,
|
|
145
|
-
"widgetOption": {
|
|
146
|
-
"number": 20001, // 随机5位整数,页面内唯一
|
|
147
|
-
"wrapperNumber": 10001, // 必须等于所在容器的 wrapperOption.number
|
|
148
|
-
"span": 24,
|
|
149
|
-
"height": 280,
|
|
150
|
-
"dynamicStyle": { "padding": "8px", "backgroundColor": "" }
|
|
151
|
-
},
|
|
152
|
-
"widgetParams": []
|
|
153
|
-
}
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
<!-- /microi-progressive:chunk -->
|
|
157
|
-
<!-- microi-progressive:chunk id=page-engine-005 sha256=c1e31dede775f14761182fc197cf428d494806c4503a622ffdad3d16d091d3e0 -->
|
|
158
|
-
## widgetParams 参数类型
|
|
159
|
-
|
|
160
|
-
| type | 说明 | value 类型 |
|
|
161
|
-
|------|------|-----------|
|
|
162
|
-
| `textarea` | 多行文本(数据来源) | `string` |
|
|
163
|
-
| `input` | 单行文本 | `string` |
|
|
164
|
-
| `number` | 数字 | `number` |
|
|
165
|
-
| `switch` | 开关 | `boolean` |
|
|
166
|
-
| `slider` | 滑块 | `number` |
|
|
167
|
-
| `color` | 颜色选择 | `string` |
|
|
168
|
-
| `select` | 下拉选择 | `string` |
|
|
169
|
-
| `radio` | 单选组 | `string` |
|
|
170
|
-
|
|
171
|
-
<!-- /microi-progressive:chunk -->
|
|
172
|
-
<!-- microi-progressive:chunk id=page-engine-006 sha256=2c021e43f4f0d730da1f5a5cf6a2d314589435e2bb9ff573148c787538a8cc86 -->
|
|
173
|
-
## 数据来源(widgetParams[0])
|
|
174
|
-
|
|
175
|
-
大多数组件的第一个参数(sort=0)是"数据来源":
|
|
176
|
-
- **静态数据**:`value` 为空,数据在 `typeOptions.dataJson` 中
|
|
177
|
-
- **动态接口**:`value` 设为接口地址,运行时请求替换 `dataJson`
|
|
178
|
-
|
|
179
|
-
**接口引擎地址格式:**
|
|
180
|
-
```
|
|
181
|
-
$ApiBase$/apiengine/{ApiEngineKey}
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
<!-- /microi-progressive:chunk -->
|
|
185
|
-
<!-- microi-progressive:chunk id=page-engine-007 sha256=ce0486eb9d2282bc199972e167e85aca7b03860d15abdd03982c4a23a90e206e -->
|
|
186
|
-
## 运行态布局与滚动规范
|
|
187
|
-
|
|
33
|
+
|
|
34
|
+
<!-- microi-progressive:begin -->
|
|
35
|
+
<!-- microi-progressive:chunk id=page-engine-000 sha256=e9ccd20e2c3504afc0a91f5dbe93ed755aed4e83e9ffec13af5b9d60528986e0 -->
|
|
36
|
+
## 设计器源码事件
|
|
37
|
+
|
|
38
|
+
只有在扩展界面引擎设计器源码时才使用全局事件总线。用
|
|
39
|
+
`EventBus.on(eventName, handler)` 监听保存、日期选择或组件跳转等事件,并在
|
|
40
|
+
组件卸载时逐项调用 `EventBus.off(eventName)`。重复挂载不解绑会造成一次操作
|
|
41
|
+
触发多次;普通页面 JSON 生成不需要注册事件总线。
|
|
42
|
+
|
|
43
|
+
<!-- /microi-progressive:chunk -->
|
|
44
|
+
<!-- microi-progressive:chunk id=page-engine-001 sha256=57717991f9c7de557b524ec36fc9bdd716080b71b682439f1b6662b0b9b2f45c -->
|
|
45
|
+
## 核心数据结构
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
formData(页面)
|
|
49
|
+
├── Id: string // 页面唯一ID(GUID)
|
|
50
|
+
├── Title: string // 页面标题
|
|
51
|
+
├── Number: string // 页面编号(如 PAGE1)
|
|
52
|
+
├── Desc: string // 页面描述
|
|
53
|
+
└── JsonObj
|
|
54
|
+
├── formConfig // 页面全局配置
|
|
55
|
+
└── wrapperList[] // 容器列表
|
|
56
|
+
├── wrapperOption // 容器配置
|
|
57
|
+
└── widgetList[] // 组件列表
|
|
58
|
+
├── widgetOption // 组件通用配置
|
|
59
|
+
└── widgetParams[] // 组件私有参数
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
<!-- /microi-progressive:chunk -->
|
|
63
|
+
<!-- microi-progressive:chunk id=page-engine-002 sha256=6a1a85b40bcb5f8be694b0aad73a805083acd0d6fcd9cba36278dc9b51d24dcb -->
|
|
64
|
+
## formConfig 页面全局配置
|
|
65
|
+
|
|
66
|
+
```json
|
|
67
|
+
{
|
|
68
|
+
"gutter": 0, "mask": true, "drag": true, "left": true,
|
|
69
|
+
"hover": true, "shadow": true, "link": false, "watermark": false,
|
|
70
|
+
"mobile": false, "dark": false, "autoRefresh": 0, "lastRefreshTime": "",
|
|
71
|
+
"watermarkStyle": {
|
|
72
|
+
"content": "Microi吾码",
|
|
73
|
+
"font": { "fontSize": 16, "color": "rgba(255, 0, 0, 0.15)" },
|
|
74
|
+
"rotate": -22
|
|
75
|
+
},
|
|
76
|
+
"dynamicStyle": { "padding": "4px", "backgroundColor": "", "opacity": 1 }
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
<!-- /microi-progressive:chunk -->
|
|
81
|
+
<!-- microi-progressive:chunk id=page-engine-003 sha256=8afb75b0e4d85ab9f56a7ba018e1cc50f758d3e604683d8c38d5f0a45d53f135 -->
|
|
82
|
+
## 容器类型
|
|
83
|
+
|
|
84
|
+
| type | label | 说明 |
|
|
85
|
+
|------|-------|------|
|
|
86
|
+
| `pannel` | 卡片 | 标准容器,包含一个 `widgetList` |
|
|
87
|
+
| `tabs` | 选项卡 | 多标签页容器,使用 `tabWidgetMap` 存储每个 tab 的组件 |
|
|
88
|
+
|
|
89
|
+
### 卡片容器(pannel)关键字段
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"type": "pannel",
|
|
94
|
+
"label": "卡片",
|
|
95
|
+
"hidden": false,
|
|
96
|
+
"wrapperOption": {
|
|
97
|
+
"number": 10001, // 随机5位整数,页面内唯一
|
|
98
|
+
"span": 12, // 栅格宽度(1-24,24=满宽)
|
|
99
|
+
"height": 300, // 容器高度(px)
|
|
100
|
+
"margin": "0px 10px 10px 0px",
|
|
101
|
+
"dynamicStyle": { "padding": "10px", "backgroundColor": "" },
|
|
102
|
+
"titleOption": {
|
|
103
|
+
"hidden": true, // true=隐藏标题
|
|
104
|
+
"title": "未命名",
|
|
105
|
+
"dynamicStyle": { "textAlign": "left", "padding": "0px", "height": "20px", "lineHeight": "20px", "fontSize": "14px", "color": "" },
|
|
106
|
+
"moreOption": { "hidden": true, "icon": "More", "iconShow": false, "text": "更多", "linkurl": "/", "linktype": "router", "refresh": "0", "datetime": "0", "autotime": false, "autotimeval": 1, "dynamicStyle": { "color": "", "fontSize": "12px" } }
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
"widgetList": []
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 选项卡容器(tabs)
|
|
114
|
+
|
|
115
|
+
组件放在 `tabWidgetMap[tabKey][]` 中,**不**放在 `widgetList` 中。
|
|
116
|
+
|
|
117
|
+
```json
|
|
118
|
+
{
|
|
119
|
+
"type": "tabs",
|
|
120
|
+
"wrapperOption": {
|
|
121
|
+
"number": 10002, "span": 24, "height": 400,
|
|
122
|
+
"tabType": "", // '' | 'card' | 'border-card'
|
|
123
|
+
"tabPosition": "top", // 'top' | 'right' | 'bottom' | 'left'
|
|
124
|
+
"tabs": [
|
|
125
|
+
{ "key": "tab_1", "label": "标签页1" },
|
|
126
|
+
{ "key": "tab_2", "label": "标签页2" }
|
|
127
|
+
],
|
|
128
|
+
"activeTab": "tab_1"
|
|
129
|
+
},
|
|
130
|
+
"tabWidgetMap": { "tab_1": [], "tab_2": [] },
|
|
131
|
+
"widgetList": []
|
|
132
|
+
}
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
<!-- /microi-progressive:chunk -->
|
|
136
|
+
<!-- microi-progressive:chunk id=page-engine-004 sha256=9c7c85bb0d25267d07e45d9abeb5691c2f0ffd9da233351cf2f448a9b848cea5 -->
|
|
137
|
+
## 组件通用结构
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"type": "bar",
|
|
142
|
+
"label": "柱状图",
|
|
143
|
+
"category": 0,
|
|
144
|
+
"show": 1,
|
|
145
|
+
"widgetOption": {
|
|
146
|
+
"number": 20001, // 随机5位整数,页面内唯一
|
|
147
|
+
"wrapperNumber": 10001, // 必须等于所在容器的 wrapperOption.number
|
|
148
|
+
"span": 24,
|
|
149
|
+
"height": 280,
|
|
150
|
+
"dynamicStyle": { "padding": "8px", "backgroundColor": "" }
|
|
151
|
+
},
|
|
152
|
+
"widgetParams": []
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
<!-- /microi-progressive:chunk -->
|
|
157
|
+
<!-- microi-progressive:chunk id=page-engine-005 sha256=c1e31dede775f14761182fc197cf428d494806c4503a622ffdad3d16d091d3e0 -->
|
|
158
|
+
## widgetParams 参数类型
|
|
159
|
+
|
|
160
|
+
| type | 说明 | value 类型 |
|
|
161
|
+
|------|------|-----------|
|
|
162
|
+
| `textarea` | 多行文本(数据来源) | `string` |
|
|
163
|
+
| `input` | 单行文本 | `string` |
|
|
164
|
+
| `number` | 数字 | `number` |
|
|
165
|
+
| `switch` | 开关 | `boolean` |
|
|
166
|
+
| `slider` | 滑块 | `number` |
|
|
167
|
+
| `color` | 颜色选择 | `string` |
|
|
168
|
+
| `select` | 下拉选择 | `string` |
|
|
169
|
+
| `radio` | 单选组 | `string` |
|
|
170
|
+
|
|
171
|
+
<!-- /microi-progressive:chunk -->
|
|
172
|
+
<!-- microi-progressive:chunk id=page-engine-006 sha256=2c021e43f4f0d730da1f5a5cf6a2d314589435e2bb9ff573148c787538a8cc86 -->
|
|
173
|
+
## 数据来源(widgetParams[0])
|
|
174
|
+
|
|
175
|
+
大多数组件的第一个参数(sort=0)是"数据来源":
|
|
176
|
+
- **静态数据**:`value` 为空,数据在 `typeOptions.dataJson` 中
|
|
177
|
+
- **动态接口**:`value` 设为接口地址,运行时请求替换 `dataJson`
|
|
178
|
+
|
|
179
|
+
**接口引擎地址格式:**
|
|
180
|
+
```
|
|
181
|
+
$ApiBase$/apiengine/{ApiEngineKey}
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
<!-- /microi-progressive:chunk -->
|
|
185
|
+
<!-- microi-progressive:chunk id=page-engine-007 sha256=ce0486eb9d2282bc199972e167e85aca7b03860d15abdd03982c4a23a90e206e -->
|
|
186
|
+
## 运行态布局与滚动规范
|
|
187
|
+
|
|
188
188
|
- 页面只保留一个主滚动容器:仪表盘、首页和嵌套界面优先继承最外层页面滚动;单个 `pannel`、`workcenter`、`diytable`、`diycalendar`、嵌套 `pageengine` 在运行态默认使用内容自适应高度和 `overflow: visible`,不得无条件设置 `overflow: auto`。
|
|
189
189
|
- 经典桌面主滚动容器为路由内容区,导航与 Tab 留在视口内;移动端继续保留外层文档滚动。图表在异步挂载后绑定尺寸观察器,切换导航、收缩侧栏及改变窗口宽度都应重新测量,禁止仅隐藏溢出而保留错误画布宽度。真实回归覆盖两种导航、两种桌面宽度,以及日程创建后刷新、备注编辑和删除。
|
|
190
|
-
- 固定高度只用于设计器拖拽预览、图表画布或确有虚拟滚动需求的组件。设计态可按 `widgetOption.height` 提供滚动,运行态必须先验证内容能完整展开;不能用双滚动条掩盖容器高度不足。
|
|
191
|
-
- 表格型容器通常按 15 条数据验收,表头、工具栏、全部数据行和分页区应同时可见;首页紧凑表格可通过 `diy-table` 的 `PageSizeList` 追加 `[10]`,并在 `sys_menu.DefaultPageSize` 为空时默认选择候选页码中的最小值。空间不足时先压缩统计卡、工具栏、行高和间距,再考虑增加外层页面长度,不隐藏分页、不在卡片内部滚动。
|
|
192
|
-
- 同一行的容器使用一致的左右边距、内边距、标题高度和顶部基线;同层卡片间距必须相同,左右边缘、标题、工具栏和内容区应形成稳定对齐线。推荐使用统一的 8px 基础间距和 8/12/16px 倍数。
|
|
193
|
-
- 成对容器应设置相同的最小高度;内容较少的组件通过内容居中、合理留白或自适应布局消化空间,不能在底部留下明显的大块无意义空白。内容较多时允许容器自然增高并由页面继续向下滚动。
|
|
194
|
-
- 日历和公告应完整展示工具栏、主体和底部操作区;日历优先使用 `height: auto` / `contentHeight: auto`,公告优先使用标准表单引擎分页与权限按钮。
|
|
195
|
-
- 运行态移动端必须按实际视口自动切为 24 栅格,不能只依赖保存 JSON 中的 `formConfig.mobile`;窗口旋转或宽度变化时也要同步。嵌入的 `diytable` 不得渲染独立列表页的固定返回栏和全局 FAB,新增、页面按钮、批量操作应留在当前容器工具栏内;容器标题操作区允许紧凑换行,但不能绝对定位覆盖标题或其它卡片。
|
|
196
|
-
- `aiengine` 在移动端嵌入首页时应使用内容自适应高度和外层页面滚动,指标卡与快捷入口优先两列紧凑排布,避免 4 个指标和全部快捷入口单列堆叠造成超长首屏;输入区和模型/推理设置必须保持可见且不横向溢出。
|
|
197
|
-
- 交付前必须在真实运行页检查:是否存在内部纵向/横向滚动条、15 条表格分页是否可见、同排容器是否对齐、四周边距是否一致、组件底部是否有异常空白。仅检查设计器画布不算验收完成。
|
|
198
|
-
|
|
199
|
-
<!-- /microi-progressive:chunk -->
|
|
200
|
-
## 详细参考路由(渐进披露)
|
|
201
|
-
|
|
202
|
-
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
203
|
-
|
|
204
|
-
- [references/progressive-01-所有组件类型.md](references/progressive-01-所有组件类型.md):所有组件类型;Office/PDF 在线预览自然语言生成规则;searchData 查询条件通用结构
|
|
205
|
-
- [references/progressive-02-版本历史-并发保存与回滚.md](references/progressive-02-版本历史-并发保存与回滚.md):版本历史、并发保存与回滚;本地撤销、Vue 源码桥与资产包;生成 JSON 注意事项;经营看板周期筛选与布局规则
|
|
206
|
-
<!-- microi-progressive:end -->
|
|
190
|
+
- 固定高度只用于设计器拖拽预览、图表画布或确有虚拟滚动需求的组件。设计态可按 `widgetOption.height` 提供滚动,运行态必须先验证内容能完整展开;不能用双滚动条掩盖容器高度不足。
|
|
191
|
+
- 表格型容器通常按 15 条数据验收,表头、工具栏、全部数据行和分页区应同时可见;首页紧凑表格可通过 `diy-table` 的 `PageSizeList` 追加 `[10]`,并在 `sys_menu.DefaultPageSize` 为空时默认选择候选页码中的最小值。空间不足时先压缩统计卡、工具栏、行高和间距,再考虑增加外层页面长度,不隐藏分页、不在卡片内部滚动。
|
|
192
|
+
- 同一行的容器使用一致的左右边距、内边距、标题高度和顶部基线;同层卡片间距必须相同,左右边缘、标题、工具栏和内容区应形成稳定对齐线。推荐使用统一的 8px 基础间距和 8/12/16px 倍数。
|
|
193
|
+
- 成对容器应设置相同的最小高度;内容较少的组件通过内容居中、合理留白或自适应布局消化空间,不能在底部留下明显的大块无意义空白。内容较多时允许容器自然增高并由页面继续向下滚动。
|
|
194
|
+
- 日历和公告应完整展示工具栏、主体和底部操作区;日历优先使用 `height: auto` / `contentHeight: auto`,公告优先使用标准表单引擎分页与权限按钮。
|
|
195
|
+
- 运行态移动端必须按实际视口自动切为 24 栅格,不能只依赖保存 JSON 中的 `formConfig.mobile`;窗口旋转或宽度变化时也要同步。嵌入的 `diytable` 不得渲染独立列表页的固定返回栏和全局 FAB,新增、页面按钮、批量操作应留在当前容器工具栏内;容器标题操作区允许紧凑换行,但不能绝对定位覆盖标题或其它卡片。
|
|
196
|
+
- `aiengine` 在移动端嵌入首页时应使用内容自适应高度和外层页面滚动,指标卡与快捷入口优先两列紧凑排布,避免 4 个指标和全部快捷入口单列堆叠造成超长首屏;输入区和模型/推理设置必须保持可见且不横向溢出。
|
|
197
|
+
- 交付前必须在真实运行页检查:是否存在内部纵向/横向滚动条、15 条表格分页是否可见、同排容器是否对齐、四周边距是否一致、组件底部是否有异常空白。仅检查设计器画布不算验收完成。
|
|
198
|
+
|
|
199
|
+
<!-- /microi-progressive:chunk -->
|
|
200
|
+
## 详细参考路由(渐进披露)
|
|
201
|
+
|
|
202
|
+
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
203
|
+
|
|
204
|
+
- [references/progressive-01-所有组件类型.md](references/progressive-01-所有组件类型.md):所有组件类型;Office/PDF 在线预览自然语言生成规则;searchData 查询条件通用结构
|
|
205
|
+
- [references/progressive-02-版本历史-并发保存与回滚.md](references/progressive-02-版本历史-并发保存与回滚.md):版本历史、并发保存与回滚;本地撤销、Vue 源码桥与资产包;生成 JSON 注意事项;经营看板周期筛选与布局规则
|
|
206
|
+
<!-- microi-progressive:end -->
|