@microi.net/cli 6.2.1 → 6.2.3

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.
Files changed (71) hide show
  1. package/.codebuddy-plugin/marketplace.json +2 -2
  2. package/.codebuddy-plugin/plugin.json +1 -1
  3. package/.codex-plugin/plugin.json +1 -1
  4. package/.workbuddy-plugin/marketplace.json +2 -2
  5. package/.workbuddy-plugin/plugin.json +1 -1
  6. package/assets/build-meta.json +5 -5
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +147 -121
  10. package/scripts/microi-cli.js +62 -62
  11. package/scripts/microi-skills.meta.json +279 -264
  12. package/skills/.microi-skills-version.json +2 -2
  13. package/skills/.progressive-disclosure-manifest.json +101 -101
  14. package/skills/README.md +1 -1
  15. package/skills/app-store/SKILL.md +7 -6
  16. package/skills/microi-ai-application/SKILL.md +5 -5
  17. package/skills/microi-client-frontend/SKILL.md +21 -15
  18. 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 +9 -1
  19. package/skills/microi-codex/SKILL.md +2 -0
  20. package/skills/microi-codex-installer/SKILL.md +6 -0
  21. package/skills/microi-datasource-mapping/SKILL.md +6 -0
  22. package/skills/microi-db-schema/SKILL.md +8 -0
  23. package/skills/microi-db-schema/references/form-component-options.md +7 -0
  24. package/skills/microi-deployment/SKILL.md +3 -3
  25. package/skills/microi-deployment/references/deployment-matrix.md +1 -1
  26. package/skills/microi-docs-coverage/references/capability-map.md +13 -13
  27. package/skills/microi-form-engine/SKILL.md +46 -3
  28. package/skills/microi-form-engine/references/business-numbering.md +70 -0
  29. package/skills/microi-form-engine/references/component-catalog.md +4 -0
  30. package/skills/microi-form-engine/references/component-config-index.md +359 -0
  31. package/skills/microi-form-engine/references/data-source-events.md +13 -2
  32. package/skills/microi-form-engine/references/form-generation-quality.md +160 -0
  33. package/skills/microi-form-layout/SKILL.md +1 -1
  34. package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +6 -0
  35. package/skills/microi-microservice/SKILL.md +387 -382
  36. package/skills/microi-microservice/references/runtime-delivery.md +15 -0
  37. package/skills/microi-system-delivery/SKILL.md +7 -0
  38. package/skills/microi-system-delivery/references/delivery-pitfalls.md +5 -0
  39. package/skills/microi-ui/SKILL.md +192 -192
  40. 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
  41. package/skills/microi-uniapp-frontend/SKILL.md +3 -1
  42. package/skills/microi.v8.js +6 -4
  43. package/skills/module-engine/SKILL.md +13 -1
  44. package/skills/scripts/sync-embedded-skills.mjs +13 -0
  45. package/skills/ui-design/SKILL.md +227 -223
  46. package/skills/ui-design/assets/pattern-showcase/index.html +2 -2
  47. package/skills/ui-design/assets/templates/MCI-DESIGN.md +221 -206
  48. package/skills/ui-design/references/data-workspace-density.md +77 -0
  49. package/skills/ui-design/references/design-pattern-library.md +186 -184
  50. package/skills/ui-design/references/mci-design-contract.md +163 -163
  51. package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +165 -164
  52. package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +237 -235
  53. package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +154 -152
  54. 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
  55. package/skills/uniapp-mall-assets/SKILL.md +10 -2
  56. package/skills/v8-crud-api/SKILL.md +2 -1
  57. package/skills/v8-explorer-tree/SKILL.md +22 -1
  58. package/skills/v8-file-upload/SKILL.md +283 -283
  59. 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 +7 -1
  60. package/skills/v8-frontend-events/SKILL.md +14 -6
  61. package/skills/v8-image-processing/SKILL.md +13 -2
  62. package/skills/v8-image-processing/references/api-reference.md +49 -3
  63. package/skills/v8-saas-multi-tenant/SKILL.md +6 -0
  64. package/skills/v8-security/SKILL.md +11 -1
  65. package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +6 -1
  66. package/skills/v8-sql-query/SKILL.md +38 -1
  67. package/skills/v8-sql-query/examples/business-query.js +18 -0
  68. package/skills/v8-table-event/SKILL.md +51 -2
  69. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +3 -1
  70. package/skills/v8-utilities/references/server-api-index.md +1 -0
  71. package/skills/vision-engine/references/video-timeline.md +53 -0
@@ -90,13 +90,13 @@ UniApp 使用 Vue 3 + TypeScript 的官方 Vite 工具链,并同时遵守 `mic
90
90
  4. 同步私有源码,再流式发布公有构建目录;源码同步失败不得继续发布。发布前回读并冻结应用的 `CurrentVersion` 与 `AppVersion`,stage 只上传不可变版本资产,finalize 必须同时提交 `ExpectedCurrentVersion` 与 `ExpectedAppVersion` 做 compare-and-set;缺一项、状态漂移或回读不一致都停止,不能自动覆盖较新发布。
91
91
  - v3 的应用基线、fence、应用行版本及 active/committed 指针是原始请求的不可变事实;stage 后只按回读更新版本行的 `ExpectedVersionRowVersion`。已提交但仍为 `ProjectionPending` 时,先回读版本与应用,保留原 `RequestId / RequestFingerprint / DeliveryBatchId` 和首次 finalize 的应用基线,重放原请求取得幂等完成回执;禁止把提交后的新指针或 fence 拼入旧请求。只有 `Completed=true` 与 CDN 文件完整性回读同时通过,才继续发布安装包。
92
92
  5. 每次创建、修改、升级或重新发布 AI 应用,必须在任何源码同步、stage、finalize 或商城制包之前,为目标精确 `AppVersion` 写入 `sys_microistore_changelog`。日志的 `StoreId / Version / Title / ChangeType / Content / ReleaseTime` 必须完整;发布工具显式传入含义一致且非空的 `changeSummary`,发布后同时回读商城子表与 `mci_ai_app_version.ChangeSummary`。缺日志或版本不一致必须停止发布。
93
- 6. 官方 Web、UniApp、MicroService 的体验地址统一为 `https://static.itdos.com/{OsClient小写}/micro-app/{AppKey}/index.html`,公有桶对象键与域名后的路径完全一致;不再按运行类型分叉到 `ai-app-publish`,也不把 v3 内部 API resolver 用作公开体验地址。当前版本的全部编译文件写入该应用固定根,历史版本写入同根的 `/{Version}/` 目录;历史目录一旦验证不得覆写成不同字节。
93
+ 6. 当前公开 Web、UniApp、MicroService 的体验地址统一为 `{可信ApiBase}/micro-app/{tenantLower}/{权威AppKey}/index.html`;租户段取当前连接 OsClient 小写,应用身份与公开范围来自同源权威记录。入口直接返回当前已提交 HTML,页面加载后地址栏仍保持固定入口,不作顶层 30x 跳转到 typed v3、CDN/NAS 或版本目录。清单内的 JS/CSS/图片仍可按原协议分流。公有桶 `{tenantLower}/micro-app/{AppKey}/` 固定根和 `/{exactPublishedVersion}/` 历史目录继续作为 CDN 发布投影,历史目录一旦验证不得覆写成不同字节。
94
94
  7. 同一版本私有源码文件使用相同的租户、应用、版本相对路径写入私有桶;固定根保存最近一次已完成发布的源码。确实不含源码的编译包在包声明中记录 `Source=NotIncluded`,运行时版本的 `SourceSnapshotPath` 保持空值,不得从公有产物伪造源码。先校验完整公有版本与私有源码快照,再提升固定根的非入口资产和 `index.html`;固定入口切换后提交 CDN 精确路径刷新,回读刷新任务终态和公有入口及引用资源,再更新商城 `PreviewUrl/PublicPublishPath`。刷新任务仅提交成功、单个 CDN 节点 200 或本地构建成功都不算完成。
95
- 8. 官网、二维码、分享链接和商城“立即体验”只使用固定根 `index.html`;版本目录仅供回滚与显式历史预览。CDN 直接读取公有桶对象,不要求其做动态版本解析或反向代理。发布器必须使 HTML 引用的 JS/CSS 在切换时已存在,并验证从 `static.itdos.com` 打开的应用仍把业务 API 请求发往目标租户的 `ApiBase`。
96
- v3 的 `sys_microistore.PreviewUrl/PublicPublishPath` 和版本 `PreviewUrl` 在数据库内保留以 `/` 开头的对象路径,后端完成态检查会与投影路径逐字比较;官网接口与商城工作台对外展示时使用租户 `FileServer` 转为完整 CDN URL。不得为统一展示直接把这些 v3 内部字段改写成绝对 URL。
95
+ 8. 官网、二维码、分享链接和商城“立即体验”使用上方 API 固定入口。显式历史预览使用已回读版本的实际 `{可信FileServer}/{tenantLower}/micro-app/{AppKey}/{exactPublishedVersion}/index.html`,保留 FileServer 的路径前缀;不能从数字 `CurrentVersion` 推算语义 `AppVersion`,也不能把旧 `/{version}/...` 短 API 或 `?version=` 当作通用 V3 历史读取。签名 URL、明确历史版本、私有或未知公开性的入口不规范化成 current。CDN 直接读取公有桶对象,不要求其做动态版本解析;发布器仍须在切换前确保 HTML 引用的 JS/CSS 已存在,并核对业务请求使用目标租户的 ApiBase。
96
+ v3 的 `sys_microistore.PreviewUrl/PublicPublishPath` 和版本 `PreviewUrl` 在数据库内保留以 `/` 开头的对象路径,后端完成态检查会与投影路径逐字比较;`StableResolverPath` 继续保留 typed v3 内部协议。官网接口与商城工作台只在展示层转换已确认公开的当前入口,不为统一展示批量改写这些字段或安装身份。
97
97
  9. 新的官方 Web、UniApp、MicroService 发布统一使用支持固定 CDN 投影的 v3 目录流式发布;旧 `ai_app_build` 只保留历史兼容和迁移读取,不作为新版本发布入口。目标 API 的 `ApplicationCdnProjectionSupported` 未启用时先部署后端并停止新发布,不回退到 `ai-app-publish`。
98
- 10. 官方 `static.itdos.com` 的刷新凭据从当前租户后端系统设置 `Integration.Cdn.Aliyun.*` 读取,兼容旧的 `Integration.Dns.Aliyun.*` 与 SaaS `AlidnsKeyId/AlidnsKeySecret`;必须成对配置并具备刷新及任务查询权限。刷新任务可能合并多个 URL 到同一任务号,应以全部任务 `Complete` 和 CDN 文件哈希回读为准;不得仅凭提交成功切换商城入口。批量发布须考虑 CDN 每日刷新配额。
99
- 11. `SharedPublicRuntime.EntryUrl` 和历史版本目录仅用于历史记录、回滚、摘要校验与审计。回读应用、版本、active 文件清单和 SHA-256;旧清单文件只能可逆归档,不能删除。再分别直接请求稳定当前入口、不可变版本入口及主要 JS/CSS,并断言前者完成加载后地址栏仍不含版本段。
98
+ 10. 命中 `static.itdos.com` 官方 CDN 刷新分支时,凭据从当前租户后端系统设置 `Integration.Cdn.Aliyun.*` 读取,兼容旧的 `Integration.Dns.Aliyun.*` 与 SaaS `AlidnsKeyId/AlidnsKeySecret`;必须成对配置并具备刷新及任务查询权限。刷新任务可能合并多个 URL 到同一任务号,应以全部任务 `Complete` 和 CDN 文件哈希回读为准;不得仅凭提交成功切换商城入口。批量发布须考虑 CDN 每日刷新配额。该投影步骤不把 CDN 地址改成用户当前体验入口。
99
+ 11. `SharedPublicRuntime.EntryUrl` 仍用于共享不可变运行资源,历史版本目录用于显式历史预览、回滚、摘要校验与审计,不能替代当前公开固定入口。回读应用、版本、active 文件清单和 SHA-256;旧清单文件只能可逆归档,不能删除。再分别直接请求 API 当前入口、已核验历史入口及主要 JS/CSS,并在真实浏览器断言当前入口加载后地址栏未跳到 typed v3、CDN/NAS 或版本段。历史对象缺失时报告未恢复,不以当前字节冒充历史。
100
100
 
101
101
  ## 完成定义
102
102
 
@@ -20,7 +20,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
20
20
  `SysConfig.HideSystemLicenseVersion` 缺省关闭,标签可点击跳转 `/license`,不能因一次请求失败永久消失。
21
21
 
22
22
  <!-- microi-progressive:begin -->
23
- <!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=ea9cdd10772c42cc8202aa50ed3f8bec0a41588b16539b2968f256c7ee05cd3a -->
23
+ <!-- microi-progressive:chunk id=microi-client-frontend-000 sha256=9c67c14e9db73bac1aa0147322ac82f8fd66034a7695d16b9bbc621338e389bb -->
24
24
  ## 单行文本插槽按钮约定
25
25
 
26
26
  - `diy-input.vue` 的插槽按钮行为存储在 `diy_field.Config.SlotButtonV8Code`。
@@ -30,10 +30,8 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
30
30
 
31
31
  > 适用于修改 `Microi.Client/` 前台源码。新 AI 对话在动 `Microi.Client/src/views/form-engine` 前,应先阅读本 Skill,避免把分散在 SFC、mixins、utils、路由和低代码配置里的逻辑误判成不存在。
32
32
 
33
- ---
34
-
35
33
  <!-- /microi-progressive:chunk -->
36
- <!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=60265fdc9842dcc4f032f80e1a93b88dd5f47f1261d0fa7334c2a7eac8d31c4c -->
34
+ <!-- microi-progressive:chunk id=microi-client-frontend-001 sha256=14f5f54111ea6a59bbce9997288c2d40135b0f4c62827387c83688ad6e6eb7c9 -->
37
35
  ## 1. 技术栈和源码入口
38
36
 
39
37
  ### 详情评论、日志与版本的按需读取
@@ -63,10 +61,8 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
63
61
  | 表单设计器 | `diy-design.vue`、`diy-components/*` |
64
62
  | 通用 V8/低代码工具 | `src/utils/diy.common.js`、`src/utils/v8-*.js` |
65
63
 
66
- ---
67
-
68
64
  <!-- /microi-progressive:chunk -->
69
- <!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=e3952f5ff503da3ddb350f01feb9a4da153ba36c8a49e69cc1f52a660c458caa -->
65
+ <!-- microi-progressive:chunk id=microi-client-frontend-002 sha256=162a8ec35c74cce48d108093dc3bfc05cc97866e067469487587ecccc020e7e9 -->
70
66
  ## 2. 表单引擎三层结构
71
67
 
72
68
  ### 模块级跨端视图
@@ -102,10 +98,12 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
102
98
 
103
99
  ### `diy-form-full.vue`
104
100
 
101
+ - 顶部保存/工作流主操作优先于业务按钮和 `workspace-actions` 插槽;记录选择、数量、字段搜索及按钮共用 `--mci-form-toolbar-height`。Page/Dialog/Drawer 与手机分支一起验收,不移动或删除业务 V8 保存链路。
102
+ - 标题和记录选择复用 `field-display-value.js` 的可读标题解析:配置优先后按可见字段顺序兜底,跳过媒体、数值和 Id/GUID/ULID;下拉只用真实显示值,不借用未解析保存键。无合理业务值显示友好序号,禁止截取记录 Id。
103
+ - `form-field-search.js` 提供模糊建议与定位:只展开目标 Tab/分组,先计算未访问 Tab 的运行态归属,再滚动/聚焦当前表单内字段。不得通过搜索恢复权限/V8隐藏字段;切记录、关闭后的旧定位响应作废,不修改业务值。
104
+ - 仅90/95启用额外紧凑留白,覆盖 Banner、FORM SECTION、字段间距、子表标题、折叠和 Tab;其余档位沿常规密度缩放,手机目标仍至少44px。修改运行 `form-workspace-tools.spec.mjs`、`field-display-value.spec.mjs`、`ui-density-presentation.spec.mjs`,再做真实几何与主题验收;静态回归不等于截图通过。
105
105
  - TableChild 详情的菜单元数据和关联数据请求都要携带完整 `_TableChildAuth`,嵌套子表保留 `Parent` 链;后端 `FormRelatedDataService` 的父记录授权参数也必须转交。不能以隐藏子菜单普遍授予 Read 代替父模块权限、父行范围、配置绑定和子行归属校验。
106
-
107
106
  - 同次打开按服务器、租户、菜单、表、完整授权上下文和打开代次合并菜单请求;初始化失败后的记录回调不重复请求/提示,但主动重试、重开和切记录仍可重试。关闭或切记录后旧响应不得覆盖新状态。
108
-
109
107
  - 关联 Counts 等真实表元数据与记录回调完成再调度;日志、评论、代码版本全部关闭时跳过。相同上下文在途读取可合并,菜单与 Counts 的错误提示按各自分支判断。修改时运行 `tests/tablechild-detail-context.spec.mjs`,并用只有父模块 Read 的真实账号验证正常详情、嵌套、重开、重试及伪造/跨父记录拒绝。
110
108
 
111
109
  表单外壳,不直接渲染字段。它负责:
@@ -138,8 +136,16 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
138
136
  - 维护 `FormDiyTableModel`、`OldForm`、`DiyFieldList`。
139
137
  - 对外 emit `CallbackSetFormData` 和 `CallbackSetDiyTableModel` 给 `diy-form-full.vue`。
140
138
 
139
+ ### 草稿箱的归属与异步上下文
140
+
141
+ `diy-form-full-data.mixin.js` 负责保存、列表和加载草稿,字段快照与恢复复用 `diy-form.vue` 的 `GetDraftData/ApplyVersionData`。列表保留 `SourceTableId`、`Status=Draft`、当前用户固定审计字段 `UserId` 三项过滤;后端填写创建人,前端不传任意用户归属。应用前再次核对归属,不能仅信任列表来源。
142
+
143
+ 请求代次使用可访问、有限的数值状态,不依赖未初始化的下划线属性自增。响应必须同时匹配最新请求与 API、租户、用户、表单、记录、菜单及打开代次;迟到的保存/列表响应不能写入新上下文。失败、异常和拒绝的 Promise 都应结束当前请求的 loading。测试使用真实 Vue 实例和实际子表单快照/恢复方法,覆盖缺少身份、跨上下文迟到响应及 `false/0/空字符串/数组`,不能只把 `data()` 复制到普通对象掩盖代理行为。
144
+
141
145
  ### 前端 V8 上下文不是固定 DTO
142
146
 
147
+ 原生 `FormSet` 的异步上下文绑定、加载代次与回归要求见 [运行时规则](references/progressive-02-8-运行时高频坑复盘.md#原生-formset-的异步上下文绑定)。
148
+
143
149
  `DiyCommon.SetV8DefaultValue()` 只创建基础能力,`diy-table.vue`、`diy-form.vue`、`diy-form-full.vue` 和各 mixin 会按事件再挂载动态属性。新增 API 或修正文档时必须同时核对这些入口,不能只看一个 `V8` 对象字面量。
144
150
 
145
151
  常见上下文差异:
@@ -164,7 +170,7 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
164
170
 
165
171
  - 微服务和定制组件的来源标识必须由 Microi.Client 宿主统一渲染,子应用不得各自实现。微服务来源入口只向当前登录用户 `Level >= 9999` 展示,普通用户、未知或非法等级、受限访问密钥会话不显示标签、关闭按钮及源码详情;不从账号名称、`_IsAdmin` 或子应用元数据推断权限。定制组件的原有来源展示保持兼容,不新增 `RenderSourceBadgeMode`、自动收起或全局关闭配置。
166
172
  - `V8.OpenAppDialog` / Drawer 等标准弹层的来源标识放在标题文字之后,不提供关闭按钮;菜单/整页微服务由 `micro-app/host.vue` 在内容区右上角直接渲染,管理员可手动关闭当前页面实例的标识,切换实例或账号后恢复。当前用户等级降低后立即隐藏入口并关闭已展开详情;这只控制来源辅助工具,不能改变业务菜单、关闭 Tab、弹层或后端源码/MCP 鉴权。不得依赖外围路由组件猜测菜单微服务。修改时运行 `tests/microservice-source-badge-permission.spec.mjs` 与既有来源及宿主契约回归。
167
- - 来源标识使用可点击的 `button` 语义,普通按钮为 `cursor:pointer`,可拖动菜单胶囊使用 `grab/grabbing`;拖动阈值、边界和 Tab 右键详情遵守 `microi-microservice`。点击后用可拖动、居中、亮/暗色适配的大圆角 Element Plus 弹层展示 AppKey、PageKey、应用内/框架路由、版本、源码定位、运行入口、发布/挂载状态和租户坐标,并生成可复制的 MCP 修改指令;公开详情不得包含 DiyToken、访问密钥、私有配置或用户敏感字段。
173
+ - 来源标识使用可点击的 `button` 语义,普通按钮为 `cursor:pointer`,可拖动菜单胶囊使用 `grab/grabbing`;拖动阈值、边界和 Tab 右键详情遵守 `microi-microservice`。点击后用可拖动、居中、亮/暗色适配的宿主 Element Plus 弹层展示(圆角遵循 ui-design,不强制大圆角) AppKey、PageKey、应用内/框架路由、版本、源码定位、运行入口、发布/挂载状态和租户坐标,并生成可复制的 MCP 修改指令;公开详情不得包含 DiyToken、访问密钥、私有配置或用户敏感字段。
168
174
  - 框架水印覆盖 `100vw × 100vh` 且固定 `pointer-events:none`。开启后内容空值默认 `$SysTitle$ - $UserName$`(用户名为空回退账号)、方向默认 `DiagonalUp`、密度默认 `Comfortable`、字号空值/0 默认 14,透明度空值/0 默认 30;亮色、深色、弹层、键盘和减少动态效果模式都要验收。
169
175
 
170
176
  ### 用户级界面偏好(强制)
@@ -182,10 +188,12 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
182
188
  - 桌面壳层使用视口高度与可收缩的 flex 内容区,只有路由内容滚动,导航和 Tab 不随页面滚动;移动端仍保留文档滚动。用户入口含头像与姓名,不能使用纯图标的固定 flex 宽度;异步图表须在真实 DOM 挂载后观察尺寸变化,避免侧边/顶部导航切换后撑破卡片。
183
189
  - 主题色、浅色/深色、菜单子级展开方式等需要“换设备仍生效”的选择必须保存到当前 DiyToken 用户的 `sys_user` 白名单字段;`localStorage` 只作为未安装新字段租户和匿名启动阶段的兼容回退,不能作为跨设备事实源。
184
190
  - 已安装用户偏好字段时优先级固定为“当前用户显式值 → 租户 `sys_config` → 平台安全默认”;个人菜单值 `System` 表示继承租户配置。不得让上一位用户的浏览器本地主题覆盖下一位已登录用户。
191
+ - 登录页与登录后共用主题设置组件;登录页使用居中弹层且禁止调用个人保存队列。壁纸使用当前租户目录缩略图,登录后仅保存 `sys_user.LoginWallpaper` 中的目录 Id,不能持久化任意外部 URL;空值恢复默认行为,字段由系统账号及 SaaS 基础包交付。
192
+ - 登录前可展示当前设备最后一次成功登录用户的纯外观缓存,按规范化 API 地址与租户隔离,并按“缓存中的显式外观项 → 当前全局配置 → 平台默认”逐项合并;只在真实登录成功或当前用户偏好确认后更新。缓存白名单不得包含 Token、账号资料、角色和权限;损坏、未知项及跨租户缓存忽略,不新增匿名按账号查询个人设置的接口。登录页预览不改这份已确认缓存;登录成功后以当前用户服务器偏好为准,不能把旧缓存写入另一账号。
185
193
  - 主题面板的主题色、亮暗模式、边角、导航、菜单展开、密度、三个装饰开关及登录风格均有同名系统全局默认,不新建重复字段。`framework-appearance.js` 统一应用运行状态;渲染继承值不能写成个人选择。`UiDensityScale` 安全范围为 90~110、步长 5,覆盖表单标签/普通控件、系统设置表单、侧栏、表格、Tab 与 Teleport 弹层;富文本、代码、地图和子表保持内容高度,触屏最小目标仍为 44px。
186
- - 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距与普通表格 `.cell` 的历史38/40px行高都必须采用同一密度 token。多行内容保持自然高度,不能设置固定行高裁切。直角样式需按真实选择器优先级覆盖 `.el-message-box.mci-unified-message-box` 等双class的 important 壳,并验退出确认 Teleport 首帧。
187
- - 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
188
- - `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留输入边界、键盘焦点、加载指示与纯图标操作。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名读取当前租户默认或本匿名上下文明确预览,不能读取上一账号的个人值。
194
+ - 密度覆盖不能只改字号和单元格 padding:父菜单底圈、图标、菜单行间距、普通表格 `.cell` 的历史38/40px行高、模块/表单 Banner、表单顶部工具栏与折叠分组标头都必须采用同一密度 token,同步缩放字号、图标、padding和最小高度。多行内容保持自然高度,不能设置固定行高裁切。直角样式需按真实选择器优先级覆盖 `.el-message-box.mci-unified-message-box` 等双class的 important 壳,并验退出确认 Teleport 首帧。表格列宽拖动热区与可见分隔线分开,不能叠加两条边框造成2px视觉;验证拖拽保存仍可用。
195
+ - 【恢复默认】沿原保存队列把 `ThemeMode/ThemeColor/LoginWallpaper` 清空、`CornerStyle/NavigationLayout/MenuChildExpandMode/LoginStyle` 写 `System`、`UiDensityScale/DisableGradient/DisableShadow/DisableButtonIcon` 写 `null`,只作用当前用户。同时清旧设备回退与本身份缓存;不能修改 `sys_config` 或把平台默认值写成个人覆盖。开关 `0` 与 `null` 语义不同:`0` 可覆盖全局 `1`,`null` 继承全局。
196
+ - `DisableGradient/DisableShadow/DisableButtonIcon` 同时支持个人与租户默认,根标识分别为 `data-mci-disable-gradient/shadow/button-icon`。去装饰仍保留按钮/输入边界、键盘焦点、加载指示与纯图标操作;登录方式图标、说明文字与按钮前景按所在真实表面配对,不能被全局渐变关闭规则改为白底白字。登录样式 `LoginStyle=Original/Minimal/Split/Console` 复用一套业务 mixin 与表单,不复制验证码、SSO、强认证、协议及回跳逻辑;匿名阶段只使用已确认的纯外观缓存、当前租户默认或当前匿名预览,不发起个人设置读取/写入。
189
197
  - `sys_config.HideFrameworkFunctions` 只控制顶栏入口,固定 Key 为 `Chat/BackgroundTasks/Search/Language/Theme/AI/Bluetooth/SystemStyle/FullScreen`,账号头像姓名始终保留。它与控制移动端等范围的原 AI 禁用开关独立,也不能代替功能权限。所有入口提供 `data-framework-function` 便于验收,未知 Key 忽略。
190
198
  - 新增全局开关 CSS 必须检查编译后选择器;scoped 中 `:global(html[attr]) .child` 会丢失后代范围,禁止用它隐藏装饰。使用独立非 scoped 且有完整登录/框架作用域的样式,或将完整选择器放进 `:global(...)`;必须断言开启全部开关时根 html、body、框架与弹层仍可见。
191
199
  - 自助保存优先使用官方 `Managed` 接口引擎,由 `V8.CurrentUser.Id` 与 `V8.OsClient` 推导用户和租户,并在服务端构造固定白名单更新对象;接口参数禁止决定目标 Id/OsClient,也禁止写入 Account、Phone、Tenant、Dept、Role、Level、State、Pwd、认证因子和登录审计字段。只有缺少可复用可信原子能力时才新增 C# DTO/端点。保存成功后调用 `V8.Method.RefreshLoginUser` 刷新登录缓存,并让微服务宿主重新同步 `CurrentUser`。
@@ -193,8 +201,6 @@ description: Microi.Client 源码架构指南。用于修改 Microi.Client Vue
193
201
  - 导航切入或退出 `TopSide` 会重建顶栏组件;卸载前必须发送尚未保存的偏好,在途请求与后续选择共用按 store、API 地址、租户、账号和登录会话隔离的运行时队列。新顶栏继承失败状态和重试数据,旧响应不能覆盖更新的选择或跨账号合并队列;标准续签保留 `MicroiSessionId` 时也保留最终待保存选择,计算属性显式依赖 Pinia.Token。JWT 解码仅用于本地队列归属,服务端仍通过标准 DiyToken 验证授权;不得将会话凭据写入偏好存储、日志或响应。使用真实 Vue computed 和组件生命周期回归 `theme-select-autosave-lifecycle.spec.mjs` 验证卸载、在途合并、失败重试、续签及账号/租户/会话切换。
194
202
  - 主题回归同时执行 `framework-appearance.spec.mjs`、`ui-density-runtime.spec.mjs` 与 `theme-select-autosave-lifecycle.spec.mjs`;真实浏览器默认使用一个常规桌面 CSS 视口(优先用户实际视口,否则 1920×1080),验证系统设置与左菜单在 90/110 两档的尺寸变化、全局/个人继承与恢复、全部顶栏隐藏后账号仍在,以及装饰关闭后的亮暗和焦点可见性。只有用户明确要求或缺陷涉及超宽屏时才追加 4K,不把截图文件像素尺寸当作浏览器 CSS 视口。
195
203
 
196
- ---
197
-
198
204
  <!-- /microi-progressive:chunk -->
199
205
  <!-- microi-progressive:chunk id=microi-client-frontend-003 sha256=301f766dc1ab1c6b021aa861a76b44844905d432393ab407472f58f00d6283cd -->
200
206
  ## 4. 工作流与表单提交
@@ -2,9 +2,17 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=microi-client-frontend-008 sha256=8cd14b9e9483cd23cc4ea25411c5c69e015387ade54131252a385c88be3a1a17 -->
5
+ <!-- microi-progressive:chunk id=microi-client-frontend-008 sha256=a435b99b6bfad7ab62d95ef78f0614205e5da51cfc0d4f2b7d3a1f7c6eb9c2ea -->
6
6
  ## 8. 运行时高频坑复盘
7
7
 
8
+ ### 原生 FormSet 的异步上下文绑定
9
+
10
+ `form-v8-context.js` 为原生 `FormSet` 绑定表单对象、记录及加载代次;
11
+ `SetV8DefaultValue` 和 `RefreshCachedV8Context` 都必须接入,`GetAllData` 每次加载递增代次。
12
+ 不得恢复成会把旧异步响应写入新记录的共享 `self.FormSet` 引用。运行
13
+ `form-v8-context.spec.mjs`,验证切记录、同记录重载、卸载和正常事件链;直接写 `V8.Form`
14
+ 及其它异步副作用仍需自己的当前性检查。
15
+
8
16
  ### 前端 V8.Http 与后端同构契约
9
17
 
10
18
  `Microi.Client` 的前端 V8 运行时在 `src/utils/diy.common.js` 挂载 `V8.Http`,实现位于 `src/utils/v8-http.js`。修改 HTTP 能力时必须保持:
@@ -23,6 +23,8 @@ description: 在 Microi Agent、Codex 或 DeepSeek Harness 中完成 Microi吾
23
23
 
24
24
  平台 Api/Web 版本入口可生成独立开发工具连接。收到连接 JSON 时,用 `microi auth import --session-stdin` 从标准输入导入,再运行 `microi ai init` 和 `microi doctor`;禁止将 Token 放入命令行、源码或日志,不再索取账号密码。开发 Token 使用现有终端有效期,可独立撤销;它只授权该业务租户,不能替代 Microi Agent 的官方 AI 计费账号登录。访问密钥的最小业务 scope 不能替代完整 MCP 管理身份。第三方 App Secret 默认进入系统设置“安全与服务接入”,优先使用 `microi_manage_server_private_secret`。
25
25
 
26
+ 共享开发会话的已有签名 `Did` 必须跨 CLI/VSCode/MCP 保持稳定,仅缺失/`Empty` 时受控迁移;本地解析不代替后端验签。`TokenReplaced` 先回读同连接共享 Token,真正吊销、超界过期或登录缓存丢失须有效登录后重新复制导入,禁止用 `tokenlogin` 绕过;空身份 `Code=1` 不算成功。平台后端修复兼容已发布 CLI 6.2.1,内部源码加固不自动触发 Agent 产品发行;详细边界见 `v8-security` 的 Token 章节。
27
+
26
28
  每次 Microi 对话先完整读取工作区 `microi.skills/workspace-conventions/SKILL.md`;工作区尚未初始化时读取本插件同级 `../workspace-conventions/SKILL.md`。按其中首部完成创始人身份识别及平台功能四项同步检查,再进入专项流程;完整规则只维护该基础入口,不复制到本路由。
27
29
 
28
30
  在已初始化吾码工作区中,用户仅描述业务需求也自动读取 `microi-system-delivery/SKILL.md`
@@ -53,6 +53,12 @@ microi update --background --workspace "<工作区绝对路径>" --json
53
53
 
54
54
  后台进程会依次检查/安装全局 CLI、幂等更新 Codex 插件与已存在 DSH 宿主的 profile bundle、执行 `microi ai init`、`microi doctor`、`microi codex status` 和 `microi dsh status`。`codex install --yes` 的 `--yes` 只保留给旧脚本兼容,不再表示必须先取得用户授权。VS Code 扩展同时使用官方扩展宿主的 `workbench.extensions.installExtension` / 自动更新机制;当前 Extension Host 不强制重载。
55
55
 
56
+ 自动更新验收必须区分全局包、宿主插件与每个已连接工作区:
57
+
58
+ - `skills/` 必须包含当次发行的全部 Skill 正文、参考文件、脚本与资产;逐文件清单和摘要参与验收,不能只比较包版本或入口文件。目标路径不可写、复制失败或正文不完整时,`ai init` 必须返回失败,后台记录待重试或带警告状态,不能报告全部同步完成。本地自定义、源码检出及较新 bundle 按既有归属保护保留,并明确其边界。
59
+ - 更新节流必须识别目标工作区。工作区 A 已完成不能成为工作区 B 跳过同步的依据;B 已有连接时仍应投递自己的 AI/Skills/MCP 初始化,未配置连接的目录继续跳过。
60
+ - Codex 插件同样遵守较新提供者优先:旧 CLI 不得把已安装的较新版插件降级;同版插件还需核对内容,损坏不能仅凭版本号认定已同步。连接、模型配置及非吾码插件保持原值,运行中的会话仍按下一段规则处理。
61
+
56
62
  当前运行中的扩展、CLI、Codex Router、DSH 会话与 MCP 必须继续使用已加载版本,禁止为了升级终止进程、强制重载窗口、结束对话或拒绝新任务。新版本写入版本隔离目录,只在后续新进程或宿主自然重启时接管。npm registry 不可用、版本无法解析、权限不足、文件被占用或安装失败时,写入 `~/.microi/updater/status.json` 并延后重试;可非模态提示“立即重试/查看日志”,但无论用户是否处理,当前、正在进行和新建工作都必须继续。禁止改用第三方 registry 或不明镜像冒充最新版。
57
63
 
58
64
  ## 自然语言入口规则
@@ -7,6 +7,11 @@ description: Microi 选项类字段的数据源 Key/Value 映射规范。用于
7
7
 
8
8
  # microi-datasource-mapping — 数据源 Key/Value 映射规范
9
9
 
10
+ 选择器显示/保存映射与业务回填是不同功能。创建或修复项目、人员、客户等关联选择时,
11
+ 必须按 `../microi-form-engine/references/form-generation-quality.md` 核对当前表已有的
12
+ 关联 Id、名称、负责人、电话、岗位和组织列,明确来源与逐字段回填、改选/清空及历史快照。
13
+ `SelectSaveField` 和已选值补查不会自动填这些其它字段。
14
+
10
15
  ## 一、后台字段数据源的两种模式
11
16
 
12
17
  Microi 低代码平台中,`Select / Radio / Checkbox` 等选项组件支持两种数据源配置方式:
@@ -58,6 +63,7 @@ export function createOptionLabel(options = []) {
58
63
  - 通过已授权接口取得当前关联记录的名称后,同时更新字段选项和同Key显示对象。仅补名称时用 `V8.Form.字段名 = {Key, Value}` 静默赋值,避免 `FormSet` 触发部门/人员等字段的异步联动或把纯查看标记为业务修改。存储字段仍为原Key,不能改成名称或默认第一条。
59
64
  - 详情解析以持久主记录和真实权限为依据,不能靠请求传入的任意关联Id读取人员或外站资料。首屏之外的当前关联须单独授权解析,不扩大候选全集;返回仅包含选择器所需字段。
60
65
  - 异步回填前核对表单实例、记录Id、依赖值和当前选择;换记录、换部门、改选后的迟到响应丢弃。失败不得伪造名称或清空已有业务关联。
66
+ - 候选数据异步返回或已选值补查后,还要刷新控件本地选中显示对象;`NeedResetDataSourse`、本地搜索候选缓存只能控制候选重置,不能阻止同保存键的 Label 更新。平台实现使用 `RefreshSelectedOptionLabels` 与 `resolveCurrentSelectOption`,只更新显示不发 `ModelChange`、不触发字段 V8、不写回旧记录。候选/补查缓存继续按身份、记录、配置与选中代次隔离,保留原授权补查协议;不得改保存格式或扩大候选全集来修复回显。
61
67
  - 验收覆盖新增检索、编辑、只读详情、首屏外已有值、停用/越权关联和迟到响应;必须实际截图核对可读名称,不能仅看控件类型或接口返回成功。
62
68
 
63
69
  ### 生成 SQL 配置的字面量安全
@@ -18,7 +18,15 @@ description: Microi 吾码数据库结构与字典指南。用于通过实时 MC
18
18
  ## 核心模型
19
19
 
20
20
  - `diy_table` 存储表单/表元数据和表级 V8 事件。
21
+ 日志、评论、版本的十二个写入事件为顶层 `Data{Log|Comment|Version}{BeforeClient|BeforeServer|AfterServer|AfterClient}V8`,
22
+ 类型 mediumtext、CodeEditor;不能写进字段 Config 或模块事件。先读实时 Schema,再由标准 MCP
23
+ 发现/保存/回读和代码版本链维护,触发与事务边界见 `../v8-table-event/SKILL.md`。
24
+ `diy_comment.RequestHash` 为可空 varchar(64)、隐藏只读的服务器原评论请求摘要,
25
+ 用于 BeforeServer 加工后的幂等核验;不作为客户端可配置写入字段或普通输出。
21
26
  - `diy_field` 存储每张 DIY 表的字段,包括组件类型、校验、可见性、数据源、字段事件和模板 V8。
27
+ - 列表单元格对齐是顶层 `diy_field.TableAlign=auto/left/center/right`(空/null 自动),
28
+ 普通字段说明的显示模式是顶层 `diy_table.FieldDescriptionMode=inline/tooltip`(空/null 为 inline)。
29
+ 使用标准字段/表 MCP 更新和 Manifest 同名小驼峰属性;不放进 Config/DiyConfig,也不复用复合列 Align。
22
30
  - DIY 表固定物理字段 `Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted` 也必须有正常的 `diy_field` 元数据;设计器通过 `DisplayDefaultField` 默认隐藏,而不是把它们当异常字段。自然语言“修复审计字段/默认字段异常”应调用 `microi_repair_audit_fields`,由平台幂等补元数据,禁止直接用 SQL 临时修租户数据。
23
31
  - `sys_menu` 将 DIY 表转换为菜单/模块页面,并存储查询、按钮、导入导出、卡片/移动端、工作流和权限相关的模块配置。
24
32
  - `sys_apiengine` 存储接口引擎定义;通过 `V8.ApiEngine.Run(ApiEngineKey, params)` 调用。
@@ -2,6 +2,13 @@
2
2
 
3
3
  本参考用于 AI 生成、审查或修复 `diy_field.Config`。事实源仍是 `Microi.Client/src/views/form-engine/diy-field-component/` 与 `diy-component-list.json`;组件源码新增配置时,必须同步更新本文件和官方文档。
4
4
 
5
+ 全部当前控件的配置路径、设计器选项与来源哈希查询 MCP `microi_get_form_component_catalog`;
6
+ 离线读 `../../microi-form-engine/references/component-config-index.md`。
7
+ 生成决策、关联回填、日期精度和验收统一读
8
+ `../../microi-form-engine/references/form-generation-quality.md`。
9
+ 日期/钟点/月日统一使用 DateTime,`DateTimeType=MM-dd` 在配套 PC 保存 `11-04`,
10
+ `HH:mm` 保存钟点;不因格式特殊改成 Text。多选日期需容量支持数组的物理列。
11
+
5
12
  ## 字段级元数据
6
13
 
7
14
  | 字段 | 说明 |
@@ -163,7 +163,7 @@ PowerShell 5/7 进程管理入口同时固定 UTF-8 控制台与管道输出;
163
163
  不代表错误流编码正确。用真实子进程强制继承旧代码页,核对非零拒绝状态、完整中文
164
164
  诊断和无非法 UTF-8;保留原锁与进程归属断言,再重新执行所选发布门禁。
165
165
 
166
- macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式;启动余量、95% 暂停与90%恢复及五秒稳定门禁均保留。统计错误应修正探针,正式发布保留内存门禁及共享进程;修复发布逻辑后重新执行所选发布门禁。
166
+ macOS 前端构建使用有界 `vm_stat` 探针,根据真实页大小读取空闲页与可回收文件页;匿名非活动页、压缩页和已包含的预读页不叠加。探针失败时回退原生空闲内存,Windows/Linux 保持既有方式。吾码PC默认现代构建保留6144MiB堆,以5632MiB(5.5GiB)进程树预算加max(1GiB,物理内存3%)余量准入,32GiB主机约6.5GiB、64GiB约7.42GiB;全机占用97%暂停本轮树,95%以内连续五秒恢复。低于8GiB宿主保留至少1.5GiB余量,宿主限堆/自定义堆或未知阶段按堆加有界原生开销回退;串行压缩/legacy保留1536/2048MiB堆及768MiB原生下限,32GiB启动目标约3.25/3.75GiB。顺序阶段不叠加峰值,正式发布不跳保护,不结束共享服务;修复后执行所选发布门禁。
167
167
 
168
168
  DLL 加密脚本只在 Git Bash、MSYS 或 Cygwin 中转换 Windows 路径,优先使用 `cygpath`;macOS/Linux 必须保留原生绝对路径,不能把 `/Users` 或 `/usr` 误认为盘符。修复时先对隔离的构建副本执行原加密器,核对五个目标 DLL 的实际哈希变化及加密指纹,再由一键脚本重新执行 PlatformRelease、加密和最终产物冒烟;不得以专项测试替代发布门禁。
169
169
 
@@ -268,9 +268,9 @@ Microi API 安装时,`AppSettings` 与同名容器环境变量只允许以下
268
268
  ## 构建资源保护
269
269
 
270
270
  启动 Node/Vite/dotnet/Docker build 前检查物理内存和同类进程。默认只运行一个重任务。
271
- 启动门槛按“当前阶段进程树预算 + `max(1.5GB, 物理内存 5%)` 系统安全余量”计算,
271
+ 吾码PC使用上文专用准入和97%暂停/95%稳定恢复策略;其余任务的启动门槛按“当前阶段进程树预算 + `max(1.5GB, 物理内存 5%)` 系统安全余量”计算,
272
272
  优先采用实测峰值;顺序阶段分别计算,不叠加峰值,也不得再用固定 20% 随机器容量放大门槛。
273
- 资源不足时改做定向测试/构建,不并行启动多个全量任务;全机占用达到 95% 时暂停或终止本轮启动的重任务树。
273
+ 资源不足时改做定向测试/构建,不并行启动多个全量任务;其余任务全机占用达到95%时暂停或终止本轮启动的重任务树。
274
274
 
275
275
  ## Windows 多 AI 本地服务与 Release 文件锁
276
276
 
@@ -107,7 +107,7 @@ Obfuscar 路径转换只适用于 Git Bash/MSYS/Cygwin。macOS/Linux 的 `/Users
107
107
 
108
108
  在线 AI MCP 的生产依赖和命令复制为完整、自足的运行快照,生产命令链接解析为真实文件,保留执行权限;损坏、越界及目录循环链接提前拒绝。临时构建目录清理后命令必须仍能运行,旧依赖不得残留;不放宽原制品门禁。
109
109
 
110
- 前端构建的 macOS 可用内存按有界 `vm_stat` 的真实页大小计算空闲页加可回收文件页,不叠加匿名非活动、压缩或预读页。解析失败和探针超时回退原生空闲量;Windows/Linux 保持原统计方式。启动预算、95% 暂停、90% 恢复及连续五秒稳定门禁不变,正式发布不能跳过保护;统计错误应修正探针,并保留共享服务。
110
+ 前端构建的 macOS 可用内存按有界 `vm_stat` 的真实页大小计算空闲页加可回收文件页,不叠加匿名非活动、压缩或预读页。解析失败和探针超时回退原生空闲量;Windows/Linux 保持原统计方式。吾码PC默认现代构建保持6144MiB堆,以5632MiB进程树预算加max(1GiB,物理内存3%)准入,32GiB约6.5GiB、64GiB约7.42GiB;97%暂停、95%以内连续五秒恢复。低于8GiB宿主至少保留1.5GiB余量,宿主限堆/自定义堆及未知阶段回退到堆加有界原生开销;串行压缩/legacy仍为1536/2048MiB堆、768MiB原生下限,32GiB启动目标约3.25/3.75GiB。各阶段分别计算,不跳过保护,不结束共享服务。
111
111
 
112
112
  后端:
113
113
 
@@ -10,11 +10,11 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
10
10
  | `about/microi-training-syllabus.md` | microi-system-delivery, business-blueprint | 培训知识域和交付全景 |
11
11
  | `about/partner.md` | microi-system-delivery | 信息型页面;产品与交付能力索引 |
12
12
  | `about/template.md` | microi-system-delivery | 信息型页面;官方内容模板 |
13
- | `form-engine/all-form-component.md` | microi-form-engine, microi-form-layout | 当前组件目录、物理类型和布局 |
13
+ | `form-engine/all-form-component.md` | microi-form-engine, microi-form-layout | 当前控件配置、日期精度、物理类型、业务编号/历史编码、自动编号/只读预估和布局 |
14
14
  | `form-engine/form-custom-control.md` | microi-form-engine, microi-client-frontend | 定制控件、前端扩展边界 |
15
- | `form-engine/form-datasource.md` | microi-form-engine, microi-datasource-mapping | 选项数据源、联动和回显 |
16
- | `form-engine/form-engine-info.md` | microi-form-engine, v8-crud-api | 表单模型和运行时能力 |
17
- | `form-engine/form-field-info.md` | microi-form-engine, v8-table-event | 表单/字段属性与事件 |
15
+ | `form-engine/form-datasource.md` | microi-form-engine, microi-datasource-mapping | 选项数据源、逐字段关联回填/清空/异步代次、快照和回显 |
16
+ | `form-engine/form-engine-info.md` | microi-form-engine, microi-client-frontend, v8-crud-api | 表单模型、工具栏、可读记录标题、字段定位、紧凑密度及草稿归属与恢复 |
17
+ | `form-engine/form-field-info.md` | microi-form-engine, v8-table-event | 表单/字段属性与事件、字段级 TableAlign 自动/显式覆盖及表级 FieldDescriptionMode 行内/图标说明 |
18
18
  | `form-engine/model-engine.md` | v8-template-engine | 表格/表单模板 |
19
19
  | `getting-started/docker-run.md` | microi-deployment, vision-engine | Docker 部署、历史独立编排、群晖CPU视觉双服务及可选行为模型与验收 |
20
20
  | `server-panel/overview.md` | microi-deployment, microi-ui | 独立服务器面板、Docker 插件版本、Nginx/SSL、冷备份恢复、共存与 Ops 迁移 |
@@ -32,9 +32,9 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
32
32
  | `more/hdfs.md` | v8-file-upload | 分布式文件存储、URL、本机原始流断点续传、固定 Primary/BackupPrivate 私有备份及显式 BackupPublic 最终文件公开、共享日额、原字节与匿名有界回读 |
33
33
  | `more/identity-verification.md` | v8-security, v8-utilities, microi-microservice, app-store, v8-saas-multi-tenant | DiyToken、登录方式气泡、Passkey、Authenticator TOTP、Gitee/微信/GitHub、动态租户设置、严格人脸、一次性步进票据、个人中心和自动升级包 |
34
34
  | `more/office.md` | v8-export-import, microi-microservice | Office 导入导出与在线编辑集成 |
35
- | `more/security.md` | v8-security | 平台安全和兼容基线 |
35
+ | `more/security.md` | v8-security, v8-sql-query | 平台安全和兼容基线、业务接口禁止客户端 SQL 与受权控制面边界 |
36
36
  | `more/sso.md` | microi-sso, v8-security, app-store | 双向 OIDC/SAML2/CAS、账号映射、协议端点、安全基线、商城发布与验收 |
37
- | `more/sys-config.md` | v8-utilities, microi-deployment, microi-client-frontend | 系统/租户配置、全局主题与个人覆盖、框架显隐和敏感边界 |
37
+ | `more/sys-config.md` | v8-utilities, microi-deployment, microi-client-frontend | 系统/租户配置、登录前外观缓存与壁纸、个人覆盖、全框架密度、框架显隐和敏感边界 |
38
38
  | `system-engine/ai-engine.md` | ai-engine, v8-http-integration, microi-ai-application | 模型代理、License、V8.AI、MCP 对话、跨端调用和安全 |
39
39
  | `system-engine/ai-cad.md` | ai-engine, v8-api-config, microi-ai-application, app-store | 吾码接口引擎到 SolidWorks 桌面插件的参数计划、模型回读、BOM 与图纸交付边界 |
40
40
  | `system-engine/digital-human-live.md` | ai-engine, microi-microservice, app-store, playwright-e2e | 自建数字人直播、本机推理、话术知识、OBS 接入、4K 功能截图与实测边界 |
@@ -44,24 +44,24 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
44
44
  | `system-engine/ai-platform-governance.md` | ai-platform-governance, app-store, business-blueprint, page-engine | 门户、身份、配置、发布、服务韧性、Trace/日志、资产协作与可恢复导入 |
45
45
  | `system-engine/ai-workflow-suite.md` | business-blueprint, v8-workflow, microi-system-delivery | AI 工作流、蓝图、状态机、自动化流和流程挖掘 |
46
46
  | `system-engine/system-observability.md` | system-observability, performance-testing, v8-debugging, microi-microservice | 系统日志、Trace、热点接口、资源监控、网络流量归因、安全治理、AI/MCP 与商城交付 |
47
- | `system-engine/app-store.md` | app-store | 应用包、安装、升级和回滚 |
47
+ | `system-engine/app-store.md` | app-store | 应用包、安装、升级和回滚;当前公开 API 固定入口、精确历史 CDN 预览与内部发布字段边界 |
48
48
  | `system-engine/databases.md` | dos-orm, v8-sql-query, microi-deployment | 扩展数据库与迁移 |
49
49
  | `system-engine/datasource-engine.md` | datasource-engine | 数据源定义、执行和供数 |
50
50
  | `system-engine/cache.md` | v8-cache-pattern, v8-saas-multi-tenant | L1/L2 架构、租户 Redis、Pub/Sub 失效、V8 安全代理与 Redis 管理器 |
51
51
  | `system-engine/file-manage.md` | v8-file-upload, microi-client-frontend | 文件柜、公私桶管理、在线预览、回收站、跨平台与 MinIO 同步 |
52
52
  | `system-engine/job.md` | job-engine | 调度、后台任务和分布式恢复 |
53
- | `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI 前端应用的工程架构与交付 |
53
+ | `system-engine/micro-app.md` | microi-microservice, microi-ai-application | 微服务/AI 前端应用的工程架构与交付;API 固定入口不顶层跳转、历史版本实际地址及菜单/内部资产路由区分 |
54
54
  | `system-engine/multi-end-client.md` | microi-client-frontend, microi-mobile-app-quality, microi-uniapp-frontend | PC/WebOS/UniApp/App 边界;统一快捷登录、租户长效会话、地图服务、单列安全区、持续动效与公开交付 |
55
55
  | `system-engine/microi-ui.md` | microi-ui | Microi.UI 组件和主题 |
56
56
  | `system-engine/message-notification.md` | message-notification | 统一消息通知微服务、原 mic_msgset 多通道配置、MCP/Skills、租户/产品版本与帐号范围、后端重启领取、居中弹窗与 SignalR/轮询恢复 |
57
- | `system-engine/module-engine.md` | module-engine, v8-menu-buttons, v8-template-engine, microi-mobile-app-quality | 菜单统计、模块指标、复合列、移动卡片、按钮角标和页面入口 |
57
+ | `system-engine/module-engine.md` | module-engine, v8-menu-buttons, v8-template-engine, microi-mobile-app-quality | 菜单统计、复合列/卡片、业务编号展示、真实追溯、按钮角标和页面入口 |
58
58
  | `system-engine/mq.md` | v8-mq-mqtt | RabbitMQ 租户连接、队列规范化、事务发布、消费确认、有限重试、幂等与多节点运行 |
59
59
  | `system-engine/mqtt-engine.md` | v8-mq-mqtt | MQTT Broker、SaaS 认证、Topic ACL、V8 事件、设备路由、下行与生产部署 |
60
60
  | `system-engine/page-engine.md` | page-engine | 界面引擎 JSON |
61
61
  | `system-engine/print-engine.md` | print-engine, v8-frontend-events | 服务端模板打印与蓝牙直连边界 |
62
62
  | `system-engine/bluetooth-printer.md` | v8-frontend-events, print-engine, microi-client-frontend, microi-microservice | GP-M322 与 CC4 双型号、TSPL/CPCL/ESC-POS、BLE/SPP、微服务平台普通打印桥、旧 V8 兼容及实机验收 |
63
63
  | `system-engine/report-engine.md` | report-engine | 虚拟报表和导出 |
64
- | `system-engine/saas-engine.md` | v8-saas-multi-tenant | 租户识别、SaaS 配置、ZIP 开库进度与长任务租约 |
64
+ | `system-engine/saas-engine.md` | v8-saas-multi-tenant | 租户识别、SaaS 配置、ZIP 开库进度与长任务租约、创建结果主/备用入口与实际版本/迁移游标区分 |
65
65
  | `system-engine/search-engine.md` | search-engine | Elasticsearch 索引和查询 |
66
66
  | `system-engine/email-engine.md` | email-engine | 邮箱系统、源码商城安装、账号维护、收发同步和邮箱 MCP |
67
67
  | `system-engine/spider-engine.md` | spider-engine | 浏览器采集和 Worker |
@@ -73,12 +73,12 @@ Markdown。第一列是相对 `microi.doc/docs/doc/` 的路径;第二列 Skill
73
73
  | `system-engine/wf-engine.md` | v8-workflow | 工作流设计和事件 |
74
74
  | `v8-engine/ai-apiengine.md` | ai-engine, v8-api-config, microi-system-delivery | AI 编程与短提示词;完整开发默认清单覆盖原推荐提示词 1–8 |
75
75
  | `v8-engine/api-engine.md` | v8-api-config, v8-utilities | 接口上下文、配置、分布式锁续租和调用 |
76
- | `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config | 接口引擎实战和规范 |
76
+ | `v8-engine/apiengine-index.md` | v8-crud-api, v8-api-config, v8-sql-query | 接口引擎实战、参数白名单与禁止客户端 SQL 的生成规范 |
77
77
  | `v8-engine/form-engine.md` | v8-crud-api, v8-formengine-http, module-engine, microi-form-engine | FormEngine API、HTTP、原生查询身份/统计范围与按表主库策略 |
78
78
  | `v8-engine/mcp-server.md` | microi-system-delivery, microi-codex-installer, v8-security | MCP 工具、确认、审计、文件、日志、备份与访问密钥 |
79
79
  | `v8-engine/microi-agent.md` | microi-codex, microi-codex-installer | Microi Agent 桌面安装、连接诊断与更新 |
80
- | `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-http-integration, v8-security, ai-engine, print-engine | 全部前端 V8、平台 AI、强身份验证、扫码和蓝牙打印 |
81
- | `v8-engine/v8-server.md` | v8-utilities, v8-api-config, v8-http-integration, v8-security, ai-engine | 全部后端 V8、强身份票据、平台 AI 和专项路由 |
80
+ | `v8-engine/v8-client.md` | v8-utilities, v8-frontend-events, v8-table-event, v8-http-integration, v8-security, ai-engine, print-engine, uniapp-mall-assets | 全部前端 V8、日志/评论/版本四阶段事件及真实写入回执、平台 AI、强身份验证、扫码与文件边界 |
81
+ | `v8-engine/v8-server.md` | v8-utilities, v8-table-event, v8-api-config, v8-http-integration, v8-security, ai-engine, v8-sql-query | 全部后端 V8、活动事件同父事务/空配置兼容、强身份票据、平台 AI、专项路由及可信服务端 SQL/绑定值边界 |
82
82
  | `v8-engine/vs-code-plugin.md` | v8-explorer-tree, microi-client-frontend, workspace-conventions | VS Code 插件、Microi CLI、AI/MCP 初始化、类型、资源树和共享工作区 |
83
83
  | `v8-engine/where.md` | v8-crud-api, v8-sql-query | 参数化 `_Where` 条件 |
84
84
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: microi-form-engine
3
- description: Microi 表单引擎设计与控件配置指南。用于创建或修改 diy_table、diy_field、表单组件、字段属性、选项/SQL/数据源引擎数据源、子表、关联表单、定制组件、表单布局和字段事件。
3
+ description: Microi 表单引擎设计与控件配置指南。用于创建或修改 diy_table、diy_field、全部表单控件、关联选择回填、日期时间精度、字段属性、数据源、子表、关联表单、定制组件、布局和字段事件。
4
4
  ---
5
5
 
6
6
  > **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
@@ -25,10 +25,13 @@ Config/Data、菜单查询列与缓存保持一致。
25
25
 
26
26
  ## 必读参考
27
27
 
28
+ - 生成或修复任何字段前读取 [表单生成质量规则](references/form-generation-quality.md):为全部字段确认业务语义、数据源、关联回填、日期精度、配置与验收;不得只建控件外观。相关字段配置用 `microi_get_form_component_catalog` 查询,旧宿主查 [控件配置源码索引](references/component-config-index.md)。
28
29
  - 控件完整目录、推荐物理类型和选择规则:`references/component-catalog.md`
29
30
  - 数据源、字段属性、事件与定制组件:`references/data-source-events.md`
30
31
  - 表单分组与宽度:`../microi-form-layout/SKILL.md`
31
32
  - 后端表单事件:`../v8-table-event/SKILL.md`
33
+ - 日志/评论/数据版本的四阶段事件也属于顶层 `diy_table`,共十二项;
34
+ 用标准事件目录及 Manifest `events[]` 保存,名称与新原子事务适用条件以该责任 Skill 为准。
32
35
  - 前端字段事件:`../v8-frontend-events/SKILL.md`
33
36
 
34
37
  ## 标准工作流
@@ -45,7 +48,7 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
45
48
  核对控件名;官网页面可能含历史控件。
46
49
  3. 新表用 `microi_create_table`;字段用 `microi_add_field`,不得直接写
47
50
  `diy_field` 或执行临时 DDL。
48
- 4. 选项控件同时设置 `data/config`;关联控件明确保存字段和显示字段。
51
+ 4. 选项控件同时设置 `data/config`;关联控件明确保存字段、显示字段和其它关联列的逐字段回填映射。当前表已有负责人、电话、岗位、组织等列时主动核对来源与联动;选择名称不会自动回填。使用字段 V8/`OpenTable.SubmitV8`,或者 MCP `autoFill` 单选构建器;合并既有事件,覆盖改选、清空与迟到响应。重要归属由后端重算校验。
49
52
  5. 字段多时设置 `diy_table.Tabs` 与字段 `Tab`;只有整行控件设置
50
53
  `FormWidth=24`,普通字段省略。`CollapseGroup` 属于整行控件,必须显式保存
51
54
  `FormWidth=24`,且 `Config.CollapseGroup.ShowFieldCount` 默认补为 `true`。
@@ -71,6 +74,22 @@ MySQL 的 `ALTER COLUMN DROP DEFAULT` 会让可空列也在省略字段时报 13
71
74
  普通身份真实 Rows/Count/SUM/Tree/Export 与撤权边界;离线会话选择测试不能冒充复制延迟
72
75
  或七种数据库实机测试。所有新普通表字段保持可空,不把已有表批量设为主库。
73
76
 
77
+ ## 列对齐与字段说明模式
78
+
79
+ - 表格单元格对齐持久化为顶层 `diy_field.TableAlign`,值为 `auto/left/center/right`。
80
+ 省略不改已有值,`null/''/auto` 采用类型感知默认:文本、日期、Select、部门及 AutoNumber
81
+ 左对齐,NumberText 右对齐,布尔/视觉控件居中;未知控件再参考真实物理数值/布尔类型。
82
+ 显式配置优先;模块复合列 `ViewSchema.Layout.List.Columns[].Align` 保持独立优先,不混写 Config。
83
+ - 普通字段说明由顶层 `diy_table.FieldDescriptionMode` 统一配置:`inline`(空/null 的兼容默认)
84
+ 直接显示灰字;`tooltip` 在 Label 旁显示可聚焦的感叹号图标,支持悬停、键盘焦点及窄屏点击。
85
+ 不改变 CollapseGroup/Tabs 等布局控件自身的说明,也不改变任何校验和权限。
86
+ - 标准 MCP `microi_add_field/microi_update_field/microi_update_field_list` 使用 `tableAlign`,
87
+ `microi_create_table/microi_update_table` 使用 `fieldDescriptionMode`;Manifest 分别写
88
+ `tables[].fields[].tableAlign` 与 `tables[].fieldDescriptionMode`。未知枚举写前拒绝。
89
+ `microi_get_form_component_catalog` 同时返回 `metadataProperties`,它们是顶层元数据而非控件 Config。
90
+ - 先配套升级前后端与表单引擎官方应用,再回读真实配置、刷新缓存,验证列表/分组表头/行内编辑
91
+ 及 Add/Edit/View、多列 Label、键盘与移动端。MCP 成功或配置回读不等于旧客户端已支持。
92
+
74
93
  ## 上传字段配置(AI 生成时强制)
75
94
 
76
95
  - `Config.FileUpload.MediaType` 明确指定 `file/image/video`,缺省为 `file`。设计器【媒体类型】
@@ -182,7 +201,9 @@ MCP 建模只使用:
182
201
  - `int` / `bigint`
183
202
  - `decimal(18,N)`
184
203
 
185
- 日期时间用 `varchar(25)` 保存 `yyyy-MM-dd HH:mm:ss`,组件用 `DateTime`;
204
+ 日期时间单值通常用 `varchar(25)`,组件用 `DateTime`,按实际精度配置 `DateTimeType`:
205
+ `date/datetime/datetime_HHmm/HH:mm/HH:mm:ss/month/year/MM-dd` 等;`MM-dd` 表示无年份的月日,
206
+ 不是文本框。多选日期使用足够长的 varchar/mediumtext 保存数组,具体格式见质量规则。
186
207
  开关用 `int`。不得生成 `datetime/date/timestamp/float/double/boolean/bool/string/text/nvarchar`。
187
208
  前端设计器 JSON 中的历史默认类型不能覆盖服务器建模规则。
188
209
 
@@ -191,6 +212,20 @@ MCP 建模只使用:
191
212
  但未触碰控件的表单模型保留原始 `NULL`,显式切换才提交 `0/1`;不要为了视觉状态
192
213
  设置 `DefaultValue=1` 或在表单加载时回写旧记录。其它 `Switch` 保持原行为。
193
214
 
215
+ ## 自动编号规则与只读预估
216
+
217
+ 建模、编号修复或列表显示长串机器编码时,先读 [业务编号与追溯契约](references/business-numbering.md)。
218
+ 区分内部 Id、可读业务编号和历史外部编码;在蓝图中确定规则、唯一范围、展示和追溯验收,
219
+ 不因使用了 AutoNumber 就省略业务设计,也不为美化展示重写主键或历史正式编码。
220
+
221
+ - `AutoNumber` 的数据规则与生成规则使用 Radio:`DataRule='' / NoDeleted`,`CreateRule='' / MaxValueAdd1`。分别表示全部/排除已删除匹配数据,以及匹配记录数/最大编号数字部分加1;不因为改呈现而改变保存值域。
222
+ - `POST /api/FormEngine/PreviewAutoNumbers` 使用当前菜单/表的新增权限和服务器真实Config,只读计算预计值。请求传 `FormEngineKey`、`_SysMenuId`、真实 `FieldIds` 和只含关联列当前值的 `_FormData`;子表保留当前 `_TableChildAuth`。不接受客户端Config覆盖权威规则。
223
+ - 仅展示返回的 `Data.Values[fieldId]` 且必须明确 `IsEstimate=true / Reserved=false`。预计不占号、不保留编号、不写表单,不触发字段V8;保存时重新分配,不能保证预估等于最终值。关联值改变、API/租户上下文变化或卸载后丢弃旧预估;旧版/失败时显示保存时自动生成,不本地猜编号。
224
+ - 含非空前缀或补零位数大于1时,数值列无法原样保存,设计器、预览与保存均应拒绝并说明改为兼容的 `varchar`。先核对现有物理类型、容量、数据和索引,再经表单设计/MCP调整;保留历史编号,不自行SQL或前端转换。只有无前缀且位数为1的纯数值编号可保留数值列。
225
+ - 配置UI和预估实现为 `diy-field-component/diy-autonumber.vue`、`auto-number-preview.js`;回归 `auto-number-preview.spec.mjs` 覆盖只发依赖字段、零占号、数值配置拒绝及真实Vue迟到/卸载边界。源码/单元通过与实际接口、MCP配置回读及保存结果分开记录。
226
+ - 自动编号新旧分配协议不支持混合写节点。升级前暂停相关表的编号写入,排空并停止所有旧 API 节点,确认旧连接的未提交事务已提交或回滚,再启动新节点并验证预估、实际保存与并发分配;客户端升级和旧缓存过期不构成安全证据,不宣称无缝滚动兼容。客户部署另行验证该前置,不自动代客户升级。
227
+ - 同一物理租户/表/列共享未完成事务预留,不按规则、前缀或关联组拆分,防止配置改变或数据库 collation 将大小写值视为同组时重号。不同组并发可能暂时跳号;事务完成后按各组已提交因子计算,不承诺连续无缺口。不能为了消除跳号回收未知结果或仍活跃事务的预留。
228
+
194
229
  ## 选项字段
195
230
 
196
231
  `Select`、`MultipleSelect`、`Radio`、`Checkbox` 没有数据源时会显示空选项:
@@ -302,6 +337,13 @@ MCP 建模只使用:
302
337
  `OpenTable` 用于弹出列表选择数据,固定授权范围用 `V8.OpenTableSetWhere`;`JoinTable`
303
338
  用于展示关联集合,不能用前端拼接代替数据权限。
304
339
 
340
+ 一对一关联需要保留已占用候选以便区分时,使用 `Config.OpenTable.SelectionDisabledField`
341
+ 指定目标记录的占用字段,`SelectionDisabledText` 提供小程序提示。非空且非 `0/false` 的值
342
+ 置灰禁选,字段未返回也失败关闭;空值可选,未配置兼容旧行为。先更新 PC 与小程序客户端,
343
+ 再通过 `microi_get_field_list` / `microi_update_field` 合并 Config 并回读;不把禁选条件改成
344
+ 查询过滤而隐藏记录。覆盖单选、行点击、卡片、全选、刷新后占用及缺字段;服务端仍必须在
345
+ 事务中保证一对一、权限和并发占用,前端禁选不能代替后端约束。
346
+
305
347
  ### 子表验收与复盘
306
348
 
307
349
  - 回读主表字段、子表字段、隐藏子菜单和索引,确认配置中的表 Id、菜单 Id、外键名均真实存在。
@@ -340,6 +382,7 @@ MCP 建模只使用:
340
382
  - `Id`、`CreateTime`、`UpdateTime`、`UserId`、`UserName`、`IsDeleted` 是 DIY 表的正常固定字段。物理列存在时必须有对应 `diy_field` 元数据,不能长期出现在“异常字段修复”列表;`diy_table.DisplayDefaultField` 只控制设计器默认是否显示这些字段,不等于删除元数据。
341
383
  - 统一通过平台修复接口或 MCP `microi_repair_audit_fields` 补齐/恢复元数据。修复必须按 `OsClient` 使用共享租约锁,可重复执行,只处理已存在的固定物理列,不借机执行 DDL,并在成功后清理字段缓存。
342
384
  - 表格里的创建人、创建时间、修改时间等审计列应与普通字段共用列头高级搜索、权限和格式化逻辑。
385
+ - `mci_drafts` 的创建人使用固定审计字段 `UserId`,不能以不存在的 `CreateUser` 查询。草稿箱必须同时限定当前 `SourceTableId`、`Status=Draft` 和当前用户 `UserId`;创建人由后端写入,禁止删除归属条件或由前端冒充。排错先读不含 `Data` 正文的最小元数据,恢复测试仅使用当前用户的草稿,并覆盖 `false`、`0`、空字符串和数组。
343
386
 
344
387
  ## 验收
345
388
 
@@ -0,0 +1,70 @@
1
+ # 业务编号与追溯契约
2
+
3
+ 用于业务表建模、编号修复及列表/卡片展示设计。先读当前 Schema、菜单配置、用户编号要求
4
+ 和少量授权样本;没有客户结构和样本时,只报告规则缺口,不断言某个长串值就是主键。
5
+
6
+ ## 区分三种用途
7
+
8
+ | 用途 | 保存与关联 | 默认呈现 |
9
+ |---|---|---|
10
+ | 内部 Id、外键、Guid | 稳定标识;用于真实关联与权限,不随业务编号变化 | 普通业务列表隐藏,明确调试需求按权限显示 |
11
+ | 业务编号,如组织 ZZ001、单据 DD000001 | 优先复用已有正式编号;保存为文本以保留前导零 | 与名称配对,支持检索、复制、详情及适用的导出 |
12
+ | 外部/历史编码 | 保留来源系统、原值及与内部 Id 的映射;可为长串值 | 按追溯需要放次要区域/详情,不自动取代正式业务编号 |
13
+
14
+ 这些是设计用途,不是新的 Config/Manifest 属性。字段名 Code 可以是正常业务编号;
15
+ “内部业务单号”也不等于技术主键。Guid 组件、真实外键和明确的技术标识才按内部标识处理。
16
+ 字段名称和长度都不能单独证明实际用途,显式用户配置优先。
17
+
18
+ ## 每张需要编号的表先确定方案
19
+
20
+ - 是否已有可复用编号、由本系统生成还是由外部系统分配;字典、日志、关系表不机械新增流水号。
21
+ - 前缀、补零位数、容量、关联分组,是否存在年度/业务周期及重置规则;写清多个节点和并发保存的分配者。
22
+ - 唯一范围是整表、租户还是年度/分组;只有整表唯一时使用单列唯一,分组唯一按实际字段设计组合约束。
23
+ - 创建后能否改号、作废后是否保留,以及未知写入、失败重试和导入数据如何保持同一业务记录。
24
+ - 列表/卡片/选择器/详情/搜索/打印导出展示哪一列;真实跳转使用哪个菜单和内部记录 Id。
25
+
26
+ 已有合法行业编码、客户指定格式或外部编码优先,不能把“短前缀+流水”强制用于全部业务。
27
+ 前缀和位数由需求决定,不把某个客户的 ZZ/QY/JH 规则写入平台默认值。
28
+
29
+ 需要平台流水时复用服务端 AutoNumber;当前控件配置先查 `microi_get_form_component_catalog`
30
+ 或 `microi_build_field_config`。例如整表唯一的组织编号:
31
+
32
+ ```json
33
+ {
34
+ "name": "Code", "label": "组织编号", "type": "varchar(50)",
35
+ "component": "AutoNumber", "unique": 1,
36
+ "configSource": { "sourceType": "AutoNumber", "prefix": "ZZ", "length": 3 }
37
+ }
38
+ ```
39
+
40
+ 这只是字段片段,省略的主键由平台创建。不能把示例直接应用到未授权生产库;分组流水
41
+ 须按实际范围调整唯一约束。时间前缀、分组和重置须核对当前原生规则,不编造占位符或承诺
42
+ 未实现的年度清零。预估值不占号,保存结果为准;并发分配不承诺连续无缺口。
43
+
44
+ 禁止用前端 max+1、行号、当前页索引、随机 Guid/ULID 或截短 Id 代替所需流水;
45
+ 截短随机串不能证明唯一。重要编号不得仅在前端生成或只加只读样式。
46
+
47
+ ## 展示与可点击追溯
48
+
49
+ 1. 默认优先“业务名称 + 业务编号”,负责人/状态等进入其它合适区域。显式 ViewSchema、
50
+ 列表列和隐藏列先完整回读再合并,不覆盖已有正确布局;需要显示内部 Id 时同时检查隐藏列。
51
+ 2. 用 `microi_get_module` 回读查询列、隐藏列、ViewSchema,并核对实际响应含编号。
52
+ Code/OrgCode 不应仅因名称不同出现不同待遇;不能仅检查元数据字符串就声称页面可读。
53
+ 3. 列表、卡片、选择器、详情和适用的导出使用同一正式编号;长外部编码按需提供完整值与复制,
54
+ 不能只通过省略号、颜色或截短隐藏错误。名称仍用于辨认,编号仍用于精确查找。
55
+ 4. 追溯依靠真实外键或关联表,目标菜单和记录 Id 必须来自当前租户。使用平台实际支持的
56
+ OpenDetail/OpenForm/OpenList 或前端表单入口,并验证目标记录和当前用户权限。
57
+ 5. 来源缺失、已删除、无权限分别呈现清楚状态;没有目标时不渲染可点击空链接。
58
+ 下游是一对多集合时按当前记录外键打开受权列表,不把名称相似当成关系,也不做逐行 N+1。
59
+ 6. 历史来源缺失只能标注,不能虚构上游;新增关联或补齐映射前核对证据和写入授权。
60
+
61
+ ## 存量修复与验收
62
+
63
+ 先区分“字段选错、格式未配置、编号未生成、旧记录待治理、客户端/缓存未更新”。
64
+ 有正确业务编号时只调整展示;缺编号时先提出可核对的映射与增量方案,保留主键、外键、
65
+ 历史外部编码、已发正式单据和审计。未知结果先回读;不能为了截图整齐批量改号或伪造来源。
66
+
67
+ 验收至少覆盖保存后重新打开、编号搜索/复制、列表与卡片、适用的导出;流水覆盖并发、
68
+ 重试及唯一范围,追溯覆盖真实上游、多个下游、缺失来源和无权限账号。不能用当前页行号
69
+ 冒充持久编号,也不能把“已计划改号”、仍在执行的任务或蓝色文字当作验收完成。
70
+ 离线/隔离测试、正式渠道分发和目标客户验收分别记录。
@@ -4,6 +4,10 @@
4
4
  `Microi.Client/src/views/form-engine/diy-field-component/diy-component-list.json`
5
5
  为当前事实源;物理类型以服务器/MCP 允许类型为准。
6
6
 
7
+ 控件名覆盖不等于配置覆盖。完整生成先读 [表单生成质量规则](form-generation-quality.md),
8
+ 按控件查询 MCP `microi_get_form_component_catalog` 的配置路径、标签、枚举及来源哈希;
9
+ 离线查 [控件配置源码索引](component-config-index.md)。
10
+
7
11
  ## 基础输入
8
12
 
9
13
  | Component | 用途 | 推荐物理类型 |