@microi.net/cli 5.6.5 → 5.6.7

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 (70) 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 +4 -4
  7. package/cordis.patch.yml +1 -1
  8. package/package.json +1 -1
  9. package/scripts/mcp-server.js +45 -44
  10. package/scripts/microi-skills.meta.json +250 -250
  11. package/skills/.microi-skills-version.json +2 -2
  12. package/skills/.progressive-disclosure-manifest.json +221 -221
  13. package/skills/ai-engine/SKILL.md +3 -2
  14. package/skills/ai-platform-governance/SKILL.md +8 -8
  15. package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +9 -9
  16. package/skills/app-store/SKILL.md +3 -1
  17. package/skills/datasource-engine/SKILL.md +3 -1
  18. package/skills/job-engine/SKILL.md +12 -2
  19. package/skills/microi-client-frontend/SKILL.md +19 -5
  20. package/skills/microi-codex/SKILL.md +8 -3
  21. package/skills/microi-deployment/SKILL.md +11 -0
  22. package/skills/microi-form-engine/SKILL.md +3 -0
  23. package/skills/microi-form-engine/references/component-catalog.md +1 -1
  24. package/skills/microi-form-layout/SKILL.md +1 -1
  25. package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +3 -3
  26. package/skills/microi-frontend-sdk/SKILL.md +2 -2
  27. 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 +8 -7
  28. package/skills/microi-mobile-app-quality/SKILL.md +8 -8
  29. package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +10 -10
  30. package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +4 -4
  31. package/skills/microi-sso/SKILL.md +1 -0
  32. package/skills/microi-uniapp-frontend/SKILL.md +10 -10
  33. package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +7 -7
  34. package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +10 -10
  35. package/skills/microi.v8.js +14 -3
  36. package/skills/module-engine/SKILL.md +8 -2
  37. package/skills/page-engine/SKILL.md +4 -4
  38. package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +3 -3
  39. package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +4 -4
  40. package/skills/system-observability/SKILL.md +2 -1
  41. package/skills/uniapp-mall-assets/SKILL.md +6 -0
  42. package/skills/v8-crud-api/SKILL.md +3 -3
  43. 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 +4 -4
  44. package/skills/v8-export-import/SKILL.md +9 -5
  45. package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +3 -3
  46. package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +3 -3
  47. package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +1 -1
  48. 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 +2 -0
  49. package/skills/v8-frontend-events/SKILL.md +4 -3
  50. package/skills/v8-frontend-events/references/bluetooth-print.md +13 -2
  51. package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +2 -2
  52. package/skills/v8-http-integration/SKILL.md +4 -4
  53. package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +2 -2
  54. 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 +1 -1
  55. package/skills/v8-menu-buttons/SKILL.md +4 -4
  56. package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +4 -4
  57. package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +5 -5
  58. package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +3 -3
  59. package/skills/v8-mongodb/SKILL.md +8 -1
  60. package/skills/v8-mq-mqtt/SKILL.md +2 -2
  61. package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +1 -1
  62. package/skills/v8-saas-multi-tenant/SKILL.md +5 -2
  63. package/skills/v8-security/SKILL.md +2 -2
  64. package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +5 -4
  65. package/skills/v8-table-event/SKILL.md +1 -1
  66. 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 +1 -1
  67. package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +2 -2
  68. package/skills/v8-utilities/SKILL.md +6 -2
  69. package/skills/v8-workflow/SKILL.md +2 -2
  70. package/skills/vision-engine/SKILL.md +1 -1
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-008 sha256=765335189d85b558ad29ba73c04d1cf078101ee94819f969195b50440a82106f -->
5
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-008 sha256=8cc961b2ba44763893f3cc09fbfca36668061b6bd75fc8f066904a04622948ff -->
6
6
  ## 4. 重要按钮必须带图标
7
7
 
8
8
  醒目的主操作必须使用打磨过的图标加文字按钮。
@@ -23,7 +23,7 @@
23
23
  - 确认主操作有图标、合适的加载文案和按下反馈。
24
24
 
25
25
  <!-- /microi-progressive:chunk -->
26
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-009 sha256=e3c66bd92ca059235a7a3b0ece2fdfa598a41eaa149d0ee3a0d24d0d822a9f58 -->
26
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-009 sha256=47248f77c0a41a7fd64f6a255d8c9af356b6768e5167c73a48d60b86f1ab9899 -->
27
27
  ## 4.1 模块列表优先使用声明式业务卡片
28
28
 
29
29
  Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆叠。优先在
@@ -53,7 +53,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
53
53
  - 批量选择后出现底部操作条;取消选择、执行按钮、更多菜单均可单手点击。
54
54
 
55
55
  <!-- /microi-progressive:chunk -->
56
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-010 sha256=2ddd560cf3620f8fb7f3cf64d62566206430ee14e6ac380a3023c5b9047b4f46 -->
56
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-010 sha256=979733873bd74cd95b0c84988a8d3709f673a813dc212076e4f02e8b376fb492 -->
57
57
  ## 5. 首屏文字和浮层不得重叠
58
58
 
59
59
  移动端首屏常组合大首屏区域和悬浮快捷面板。这个布局必须视觉检查,因为过大的中文标题和激进的负边距容易造成难看的换行或遮挡主按钮。
@@ -74,7 +74,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
74
74
  - 检查首屏标题、主/次按钮和后续悬浮面板是否裁切或重叠。
75
75
 
76
76
  <!-- /microi-progressive:chunk -->
77
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-011 sha256=b599e047e6b7a3688e4264a4d4b334e220e9798cbc13326e85a06f52bf20ce12 -->
77
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-011 sha256=47a21d62bc04740ed19eea3f7c2c816e4c73b9054de63beb16df12468c6a4363 -->
78
78
  ## 5.1 未登录/授权提示必须在可用内容区居中
79
79
 
80
80
  未登录、未授权、无权限等提示模块不能贴在页面顶部。页面上方有 hero/header,下方有 tabBar 或固定底栏时,提示卡片和“立即登录/去授权”按钮必须在剩余可用内容区上下左右居中。
@@ -94,7 +94,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
94
94
  - 375px、430px、iOS 刘海屏/灵动岛和 Android 状态栏场景均不得出现贴顶或按钮文字偏移。
95
95
 
96
96
  <!-- /microi-progressive:chunk -->
97
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-012 sha256=a363aaead9b632f3533e2f046f39cf7b579a91b92ef4e33d42f848d5a7538515 -->
97
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-012 sha256=22c9781f49c49419f30df95fac1694cbd1b94bdec99215bb7446ad655b111053 -->
98
98
  ## 5.2 自定义导航页面必须通过安全区与微信胶囊门禁
99
99
 
100
100
  `navigationStyle: custom` 代表应用接管了系统导航区域,页面壳必须同时负责状态栏、刘海/灵动岛、微信右上角胶囊和底部手势区,不能把这一责任留给业务页面自行估算。
@@ -113,7 +113,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
113
113
  - 发现任意页面被遮挡时,必须修复共享页面壳并重跑全路由;禁止只给当前截图页面增加固定 padding。
114
114
 
115
115
  <!-- /microi-progressive:chunk -->
116
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=207765d0398738f24566763a2481469f4fc63e8a0b5f00abd292fe8a1cdd225a -->
116
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-013 sha256=f4e1f01f3dde22120ecba9131b5c738118c0e4aa8131ea83978f3e1d6b4db289 -->
117
117
  ## 5.3 全屏工具页必须遵守返回状态栈
118
118
 
119
119
  - AI 助手、扫码工作台、全屏预览等独占视口功能需要手机侧滑返回时,优先使用独立路由承载;普通 `position:fixed` 蒙层不能冒充页面历史。
@@ -122,7 +122,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
122
122
  - 自动化至少覆盖关闭按钮、Android 返回键/`onBackPress`、微信侧滑返回三条路径,并验证返回后原页面和滚动状态仍然可用。
123
123
 
124
124
  <!-- /microi-progressive:chunk -->
125
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=1451e6ffbb0c0d29d8362e400540e3fa4f9f38a2402a9faf93de4cce7b1c9b4c -->
125
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-014 sha256=eaf8ac0e9edadf382a08951d6c43b9ab561dd2a8ee02fc80048fc843e4656033 -->
126
126
  ## 5.4 微信浮动入口必须通过真实事件桥门禁
127
127
 
128
128
  - UniApp 自定义组件中的浮动按钮、拖拽助手和悬浮客服不得只做 H5 点击测试。必须在微信运行时找到真实组件节点,派发 `touchstart/touchend`,并断言页面栈、弹层状态或业务动作确实变化。
@@ -131,7 +131,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
131
131
  - 自动化需增加对照按钮:同页普通按钮可点击、浮动入口也可点击,才能确认不是自动化连接或页面整体失效。
132
132
 
133
133
  <!-- /microi-progressive:chunk -->
134
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=8377f92a7456bd68e83867e893f1c9e8eec9edf0bba2a3f434c5bce75a9e2d00 -->
134
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-015 sha256=3a65e2da022d493b7d950450a10186d33652ec4225c359d9b3800ef431458525 -->
135
135
  ## 6. 后台菜单必须规划为至少两级
136
136
 
137
137
  真实业务系统的后台菜单不能简单堆成一批一级菜单。
@@ -159,7 +159,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
159
159
  - 最终回复必须说明通过 MCP 写入的真实菜单树,以及执行过的权限刷新。
160
160
 
161
161
  <!-- /microi-progressive:chunk -->
162
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=0c1632d28f986156f8d70b2710dc0219de4643b4b9c61771ac544a18f4c355ac -->
162
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-016 sha256=808d3a4d3e7736566e1dd23c287a9316ea851c3ca212ffe283f49e565a7e0a3d -->
163
163
  ## 7. 移动端页面需要动效,但动效必须有用
164
164
 
165
165
  移动端产品不应像静态后台表单。
@@ -181,7 +181,7 @@ Microi.Client 的标准模块移动端不应把 PC 表格字段机械纵向堆
181
181
  - 没有动画导致横向溢出、文字裁切或固定栏抖动。
182
182
 
183
183
  <!-- /microi-progressive:chunk -->
184
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=2dcca5305da25f543181ae23550547cb3e3761aebae2843c5fc60e7848153176 -->
184
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-017 sha256=15d415351b8e3a7700d56cab2b39079494b06265b7d648636d1e511db1892161 -->
185
185
  ## 8. 登录页必须是直接登录界面
186
186
 
187
187
  登录页不能强迫用户先在两个身份标签之间切换才能登录。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-018 sha256=b6e3138b7f398fad5b03253d07c1eb30e26da5c3df8ff1975117e5a3a282fd58 -->
5
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-018 sha256=28b7c339cbf546a91f4f35fce2bc146f052283fad2b6c54d7a8971acde21740a -->
6
6
  ## 9. 主题切换必须真实且全局生效
7
7
 
8
8
  当客户要求增加另一种视觉风格时,除非用户明确要求删除,否则要把当前已认可设计保留为一个命名主题,而不是直接覆盖。
@@ -39,7 +39,7 @@
39
39
  - 报告详情页必须逐主题截图,检查 `INSPECTION REPORT`、状态胶囊、封面标题、摘要卡、报告正文和富文本在当前主题下都有足够对比度。
40
40
 
41
41
  <!-- /microi-progressive:chunk -->
42
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-019 sha256=f2ca99aebb70273d991f5142e88bd1e02ff42782df5a8e7e180de297fba0faac -->
42
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-019 sha256=406cf4edff553e80567a6462a68b872d98275358b89ff196df0873f78a2c30a9 -->
43
43
  ## 10. 报告/列表详情必须保留用户身份
44
44
 
45
45
  从列表进入详情时必须保留调用者身份模型。即使打开的是同一个视觉报告详情页,员工、客户和公开/分享路线也可能需要不同接口。
@@ -60,7 +60,7 @@
60
60
  - 确认点击可见卡片后不会发生意外登录跳转。
61
61
 
62
62
  <!-- /microi-progressive:chunk -->
63
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-020 sha256=95487284aa5f9b1b3a0fb557845b3400af0355e4b2ebf6abebbef461e8ec8485 -->
63
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-020 sha256=c11ddf69390b21893b0bbb7de62592b8af6e9ecee5eb046bbeff99f3782e7493 -->
64
64
  ## 11. 角色与权限必须基于 sys_user.RoleIds 建模
65
65
 
66
66
  移动端和后台不能只区分“已登录/未登录”。企业应用通常至少有内部员工、售后师傅、客服、客户账号等角色,必须在建模阶段明确角色、菜单权限和数据权限。
@@ -93,7 +93,7 @@
93
93
  - 用未绑定的小程序手机号账号登录,截图确认“我的”页出现申请绑定身份入口;提交申请后后台能看到待审核记录;通过审核前数据权限不提前开放,通过审核后对应客户数据或内部工作台能力才出现。
94
94
 
95
95
  <!-- /microi-progressive:chunk -->
96
- <!-- microi-progressive:chunk id=microi-mobile-app-quality-021 sha256=13405c8ce231e9db8920cd8e1c4e0db26a32c1b5ac967113abee1391985ebfcd -->
96
+ <!-- microi-progressive:chunk id=microi-mobile-app-quality-021 sha256=e177d9cc3a9c28603129f42b598d2af72ecf305e934a982ed9801ca0d5a9e73c -->
97
97
  ## 审核后的会话与角色同步(强制)
98
98
 
99
99
  - 审核通过后的数据库角色、服务端 DiyToken 身份投影、SDK 用户缓存、页面 capability 和申请状态必须一致,禁止以“退出重登后正常”作为验收成功。
@@ -76,6 +76,7 @@ description: 设计、实现、配置、迁移、发布和验收 Microi 吾码
76
76
  - `sso_outbound_claims`、`sso_protocol_event`、`sso_event_hook`;
77
77
  - `sso_complete_login`、`sso_rotate_client_secret`、`sso_legacy_token_login` 的业务编排。
78
78
  - 24 个 `sso_http_*` Managed 端点:`/api/Sso/Begin`、`/api/Sso/CompleteAuthorization`、OIDC 回调/Discovery/JWKS/Authorize/Token/UserInfo/Introspect/Revoke/Logout、CAS 回调/Login/Validate/Logout、SAML Begin/ACS/Login/Complete/Metadata/Logout。
79
+ - 历史兼容路由 `/api/Sso/CompleteLogin`、`/api/Sso/LegacyCapabilities`、`/api/Sso/RotateClientSecret` 和 `/api/Sso/SamlBegin` 只用于识别旧客户端并返回受控兼容结果;新宿主优先使用上面的接口引擎地址,不能因旧路由存在而恢复通用 SSO Controller。
79
80
 
80
81
  C# 只保留:
81
82
 
@@ -20,13 +20,13 @@ UniApp/H5/小程序必须通过项目统一 `microi.v8.js` 的 `V8.uploadFile` /
20
20
  登录页默认不得展示 ApiBase、OsClient 或调试配置;但用户明确要求、且安装包由 Microi 平台方作为多租户聚合客户端发布时,允许仅在 `APP-PLUS` 登录页提供通用连接器。协议必须使用固定 `https://` / `http://` 下拉框,地址框禁止重复输入协议,HTTPS 默认,HTTP 显示明文风险并二次确认;H5、小程序和客户专属包不得因此自动开放。候选地址先匿名读取 `GetSysConfig`,验证成功后再持久化。真正切换时必须清除旧 DiyToken、用户、SignalR、菜单/元数据/页面缓存,按 `ApiBase + OsClient` 隔离记住的账号及 RSA 密文,并用端点代次拒绝切换前的迟到响应。支持任意 HTTP 时,最终 IPA 必须显式包含 ATS 例外,Android 安装包必须显式包含 cleartext 例外;不需要任意 HTTP 的正式包应保持平台默认安全策略,iOS ATS 例外还必须在 App Store 审核中说明。
21
21
 
22
22
  <!-- microi-progressive:begin -->
23
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-000 sha256=ecb0fc85b5c3b15ac79c9049ca86de8c586d4ce3a6c975255464069d89f87ac4 -->
23
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-000 sha256=980d63128f930daa224319aece06ee9a407563f722831790a381b100b44bddeb -->
24
24
  ## 移动端质量门禁必须先读
25
25
 
26
26
  创建、重构或修复任何 Microi 移动端项目前,必须同时应用 `microi.skills/microi-mobile-app-quality/SKILL.md`。该 Skill 中的底部导航真实图标、重要按钮图标化、登录 API 校验、微信手机号快捷登录、后台二级菜单和页面动效要求,属于交付验收条件,不是可选优化。
27
27
 
28
28
  <!-- /microi-progressive:chunk -->
29
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=dbfb19570590b460284ffd88502a8610b6fea0d2c36c08b4d15724782aeda61c -->
29
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-001 sha256=8096a337726080dadd3ce98b935e8fc5f77b62cd68f9fb3418ff737dfef97a4b -->
30
30
  ## 标准产品、视图协议与租户扩展
31
31
 
32
32
  Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile + 租户插件”架构,不能把某个交付项目直接写死成平台产品:
@@ -48,7 +48,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
48
48
  仓库必须提供 AI 与人工协作约束文件、租户脚手架、Profile 构建/同步命令和架构检查。平台层改动至少同时构建标准 Profile 与默认交付 Profile;租户视觉改动还要执行多视口截图回归。这样其他同事使用 Codex、Claude、Copilot、Cursor 等工具继续开发时,会先读取相同规则,而不是依赖某次对话记忆。
49
49
 
50
50
  <!-- /microi-progressive:chunk -->
51
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-002 sha256=76ebf3985d21fbbc5d86093b95bdf348e526e3670da9bb6827b5e1a7184e617b -->
51
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-002 sha256=c18bba02e21028df3da4f8ad8f92dc9e7c5800347ed11b53eb872aaf28bd65ed -->
52
52
  ## H5 预览壳与底部导航强制规则
53
53
 
54
54
  - 桌面浏览器允许使用 `Microi UniApp H5 Preview` 手机壳帮助用户理解移动端比例。
@@ -57,7 +57,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
57
57
  - 自动化验收必须同时使用桌面视口与移动视口截图:桌面端断言手机壳存在,移动端断言 `.phone-status` 隐藏且 `.phone` 无圆角、无边框、宽高铺满;每个底部菜单的图标元素和文字都必须可见、可点击。
58
58
 
59
59
  <!-- /microi-progressive:chunk -->
60
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-003 sha256=5cedd05cb29746019a92db56a21123718fde23d5d9df4b8064dfc260bc89ee05 -->
60
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-003 sha256=cf398596130bfa85683b358683631d5056bb3c48a4049214d00a9b26e3a61ec4 -->
61
61
  ## 登录页与手机号快捷登录
62
62
 
63
63
  - 登录页必须是直接登录面,不要默认做“员工登录 / 客户登录”身份 Tab 切换,除非用户明确要求。默认展示系统账号密码登录,同时提供客户手机号快捷登录入口。
@@ -75,7 +75,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
75
75
  - 微信小程序构建后必须扫描登录页源码以及 `dist/build/mp-weixin/pages/login/` 产物,并截图核对手机号快速验证前置页;命中上述混淆文案、官方图形或近似元素时必须阻止上传和提审,不能只检查按钮主文案而漏掉说明文字、错误弹窗或分享标题。
76
76
 
77
77
  <!-- /microi-progressive:chunk -->
78
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-004 sha256=cc25e3d896e6f7349a7a7e93b8025ee797bf9810e60214eb95e41d75aa083422 -->
78
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-004 sha256=c0e95b3c0fef84be2526e4b902a7c0d980d98217139b0d0b5b5b6fca7145641d -->
79
79
  ## 微信小程序全页面分享
80
80
 
81
81
  - 创建或维护 UniApp 微信小程序时,默认把好友转发与朋友圈分享视为页面基础能力;按 `pages.json` 全量路由逐页接入,不等待用户额外提出。
@@ -86,7 +86,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
86
86
  - 验收不能只看首页右上角。用脚本比较 `pages.json` 路由数量与源码/微信构建产物中的两种分享生命周期数量,并在体验版抽测公开页、登录页和受保护详情页。
87
87
 
88
88
  <!-- /microi-progressive:chunk -->
89
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-005 sha256=036ed2e8dd8417615c6641a746852d8c231cd0ab02b357d78a4054404b9dce5d -->
89
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-005 sha256=7e002241f968def653a6ddb7934b3a4f185a0cf5fc845dd31d16f2a47d5cd598 -->
90
90
  ## 首屏 Hero 与浮动面板验收
91
91
 
92
92
  - 移动端首屏 Hero 标题必须按真实中文文案调字号和行高,不能为了“震撼”把业务入口标题做得过大,导致一行半、孤字换行或压住按钮。
@@ -94,7 +94,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
94
94
  - 交付前至少检查 375px 与 430px 宽度首屏截图,确认标题、主按钮、次按钮、浮动面板、第二块内容没有重叠、裁切或不美观换行。
95
95
 
96
96
  <!-- /microi-progressive:chunk -->
97
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-006 sha256=9baac30856c333837f39530bddedfa93a40a4b5a17c809bdf3854ff824061d96 -->
97
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-006 sha256=4ddf2899af481528fd518842ec98aa31ada5e5c0b5dc585c27098b5413b2dd5a -->
98
98
  ## 资源 URL 必须集中解析
99
99
 
100
100
  数据库中的图片、附件、头像、Logo、卡面图、单据图片等字段常见保存形式:
@@ -118,7 +118,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
118
118
  - 第三方占位图、已失效临时地址、空字符串统一清理为空,交给 UI 占位态。
119
119
 
120
120
  <!-- /microi-progressive:chunk -->
121
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-007 sha256=3894454672b6bde6f4a7b329103c9418804f4594b7e3505617590ebea5f136ab -->
121
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-007 sha256=bc13da83759030866897991a5192831ee28bb24ad0ff5a5ad9e5c57917520f0d -->
122
122
  ## 移动端大资源优先使用租户 HDFS/CDN
123
123
 
124
124
  定制 UniApp/H5/小程序中的大图、视频、音频、字体和大型第三方静态文件,默认不要塞进主包。应先确认目标 `OsClient`,通过该租户 MCP/HDFS 上传,再以 `sys_config.FileServer + Path` 的 CDN/公有桶地址引用;合同、证件等敏感资源仍必须使用私有桶和临时签名 URL。
@@ -134,7 +134,7 @@ Microi 标准小程序必须采用“平台内核 + 版本化元数据 + Profile
134
134
  - 原始高清图、视频母版、设计源文件不得继续放在会被 UniApp 收集的 `src/static`、分包目录或其它构建入口中;应移到项目资料/设计源目录。主包仅保留小于门禁的轻量失败占位图和离线关键图标。
135
135
 
136
136
  <!-- /microi-progressive:chunk -->
137
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-008 sha256=ed9dfcd0c7504323632b9b31c2b27f062c85eb53f45d617de9837896543974fb -->
137
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-008 sha256=d52c69b1f93de27639f47c25916cb6c479465ff0db9e5ef3db81073dd50ebebb -->
138
138
  ## 头像必须异步统一解析
139
139
 
140
140
  头像字段比普通图片更容易混合出现上传 JSON、私有路径、相对路径、历史字段名和脏数据。列表页、详情页、业务记录、审批记录、团队/会员卡片、聊天/消息等头像场景都必须走同一个头像解析入口。
@@ -155,7 +155,7 @@ row.OwnerAvatarUrl = await resolveAvatarUrl(rawAvatar);
155
155
  禁止在模板中临时拼接文件服务器,禁止每个页面各写一套头像解析,禁止只在能查到关联用户时才解析接口已经返回的头像字段。
156
156
 
157
157
  <!-- /microi-progressive:chunk -->
158
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-009 sha256=0270fbc5a2ee0d20a4d1d2f2a9c7fc7304e18402d282e1efcf860bd31db9fcb0 -->
158
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-009 sha256=20cfb0b95ea827e9cbca1272b27a57a080976fc1fd8db3b4586e0dc5ed13d903 -->
159
159
  ## 移动端富文本图文排版
160
160
 
161
161
  商品详情、公告详情、活动说明、文章正文、协议说明等富文本在移动端渲染时,图片和文字不能使用同一套留白规则。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-010 sha256=2820c6dbc7641b03cb2d3af98f80ca654162fdac7995993be5cb7e25b8e5bdea -->
5
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-010 sha256=00d4113a82b130df18ac91de3569dc45663f3cfefce829eb626c5e08086505e1 -->
6
6
  ## 移动端分类/双栏列表独立滚动
7
7
 
8
8
  商品分类、知识库分类、通讯录分组、资产分类等“左侧分类 + 右侧列表”的移动端页面,根节点必须固定在一个视口内,不能让整页和内部列表同时滚动。
@@ -34,7 +34,7 @@
34
34
  ```
35
35
 
36
36
  <!-- /microi-progressive:chunk -->
37
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-011 sha256=a28fba298274b738ef9039c6bd6a1707468687e2ae9644a819736374586749e9 -->
37
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-011 sha256=fcf60104a95a27645f4b519b19bde6aab55d41f38388c442179533dd4ed8a35a -->
38
38
  ## 数据页必须使用骨架屏 Loading
39
39
 
40
40
  任何依赖接口/数据库返回数据的移动端页面,都必须区分 `loading`、`data`、`empty`,并且首屏加载态必须使用骨架屏(Skeleton Screen)。接口请求结束前不能提前显示“暂无数据/暂无明细/空空如也”,也不能只用“图标 + 数据加载中...”或单独 spinner 作为页面级 loading。
@@ -72,7 +72,7 @@ async function load() {
72
72
  ```
73
73
 
74
74
  <!-- /microi-progressive:chunk -->
75
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-012 sha256=5554c817702cc491937fb2b32f5ba2ce76554a35ef0a2189979ff1d60789ab30 -->
75
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-012 sha256=5e117837b6cff4db5b22a25c6607a0b1d7d35d27a16285cd44731d2b14db7b4b -->
76
76
  ## 移动端安全区必须兼容 iOS 与 Android
77
77
 
78
78
  任何 UniApp/H5 移动端页面都必须同时适配 iPhone 刘海屏/Dynamic Island/Home Indicator、Android 状态栏/虚拟导航栏/手势条、微信/浏览器/WebView 容器差异。不要用固定 `20px/44px/64px` 直接硬编码顶部或底部间距。
@@ -92,7 +92,7 @@ async function load() {
92
92
  - 独占屏幕且需要支持手机侧滑返回的功能应使用独立页面路由。`onBackPress`/页面返回先消费当前页内部的键盘、对话框和抽屉状态;内部状态清空后才弹出当前页,不能让一次返回直接退出小程序或越过底层业务页。
93
93
 
94
94
  <!-- /microi-progressive:chunk -->
95
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-013 sha256=591a8e5a3e33cfcdb102abf56ebc6eeb5c5896d621442c30e734f455d625842c -->
95
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-013 sha256=b6074ef264327e9cc630a9c4136989d6355ed33ba4902098e8ae025661a207ed -->
96
96
  ## 微信自定义组件的点击与拖动事件必须真机链路验收
97
97
 
98
98
  - UniApp 可拖动浮动入口等自定义组件,不要给 `touchstart/touchmove/touchend/tap` 整组无差别添加 `.stop/.prevent`。这些修饰符会生成微信 `catchtouch* / catchtap`,部分 UniApp 自定义组件中可能吞掉事件桥,出现节点可见但点击和触摸方法完全不执行。
@@ -121,7 +121,7 @@ async function load() {
121
121
  ```
122
122
 
123
123
  <!-- /microi-progressive:chunk -->
124
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-014 sha256=62f20b920f2365d9f2f5062218b10b17aa181ccb3ae5d2260f795e086355f678 -->
124
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-014 sha256=201c7dd1b1e923a62319f1402088fa696bb96aa8ca58a8c7f9817a6ecce36e12 -->
125
125
  ## 列表型资料页必须提供完整管理动作
126
126
 
127
127
  地址、联系人、收款方式、发票抬头、车辆、设备、证照、银行卡等用户维护型资料页,不能只展示简略列表。除非业务明确只读,移动端必须提供:
@@ -135,7 +135,7 @@ async function load() {
135
135
  - 空态行动:没有数据时给出新增入口,但仍要遵守上面的加载态规则。
136
136
 
137
137
  <!-- /microi-progressive:chunk -->
138
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-015 sha256=d8e9280b5127d7dafd4dcb83b22bdb379fef39eac1e2e1b2e37f1c064cfe7fc6 -->
138
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-015 sha256=287d085d3651e0eb20b97fadf0ba616e9f4aea9447efda6824612b64309efd27 -->
139
139
  ## 移动端资产/奖励流水展示
140
140
 
141
141
  收益明细、积分明细、奖励明细、充值记录、订单流水等页面要面向用户展示“发生了什么”和“是否到账”,不要直接暴露后台调试字段。
@@ -147,7 +147,7 @@ async function load() {
147
147
  - 后端接口应先把 `TypeLabel`、`SettleStatusLabel`、`DisplayTime`、`ContributorName`、`CardNo` 等字段整理好,前端只做轻展示,避免多个页面各自拼接导致重复或口径不一致。
148
148
 
149
149
  <!-- /microi-progressive:chunk -->
150
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-016 sha256=552ab6a76e3bcd22678259727a3de0308dd429f390bea3de367b0196049890c3 -->
150
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-016 sha256=db7ea9ce03c26880b560aa8c1759179c2a75cfd329320923c771e682f1d33020 -->
151
151
  ## H5 在 PC 浏览器必须自动模拟移动端
152
152
 
153
153
  移动端 UniApp H5 被 PC 浏览器访问时,不能按桌面宽屏铺满。必须在全局样式里用媒体查询生成手机预览壳。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-017 sha256=00ea6a7366491ea10138bd298a5dd727c6a9bb66b6f9ab4f294b8a3fb89bd900 -->
5
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-017 sha256=9ef6eaa852b4b29ee01b51a4353685ee97ee219ff5d6da881f3de6371654861f -->
6
6
  ## 关键业务资产不得默认选中
7
7
 
8
8
  凡是会扣减、消耗、转移、提交审批或触发财务后果的业务资产,都不能默认选中第一条。例如资产卡、余额账户、积分账户、优惠券、库存批次、付款账户、审批对象、设备工单等。
@@ -15,7 +15,7 @@
15
15
  - 规则同时写在 UI 状态和提交前校验中。
16
16
 
17
17
  <!-- /microi-progressive:chunk -->
18
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-018 sha256=35f9826cc82000f9cedd3ccaffd8e7718b0efbec75cf12665145f1de4f8a6d23 -->
18
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-018 sha256=c55461eba07b7763cb7810818574d4660fbaeed65f95e894e0f859aa96b4bbd2 -->
19
19
  ## 账号角色与会话状态
20
20
 
21
21
  - Microi 企业移动端默认要从 `sys_user.RoleIds`、`_Roles`、`Roles`、`RoleName`、`Level` 解析内部账号角色,不要只用“是否登录”控制界面。
@@ -31,7 +31,7 @@
31
31
  - 收到 `Code=1001/1002` 时用可完整阅读的模态框展示后端 `Msg`,包括过期分钟/小时/天或租户不匹配信息,确认后再跳登录;不能先覆盖成固定 Toast。
32
32
 
33
33
  <!-- /microi-progressive:chunk -->
34
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-019 sha256=72621b385229c3308cbe98dbfa0fb29de95e88d675dad31d9fbe4543b441fdbb -->
34
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-019 sha256=7a258af0c36dd3e82d7f9444043d3b0b9d3bc99f329ff85a167b91594b1a54b1 -->
35
35
  ## 数字、主题、上传与消息
36
36
 
37
37
  - 资产金额、积分、余额、库存值、累计充值、收益等数字要按空间自适应格式化。金额很大时显示为 `1.23万`、`123万`、`1.2亿` 等,不能撑破卡片。
@@ -46,7 +46,7 @@
46
46
  - 私有图片、身份证照片、支付凭证等禁止匿名访问的文件,前端必须先换取临时 URL;不能直接把私有路径给 `<image>`。
47
47
 
48
48
  <!-- /microi-progressive:chunk -->
49
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-020 sha256=6f5c05a725b3325feb889fbb4c97621e247ca9d6eb89970bf9f8602a81177524 -->
49
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-020 sha256=2ae732a49279cc7604169a302987d5428ab3b9e8a108ec442813bbd0aea735a0 -->
50
50
  ## 图片上传必须支持替换与预览
51
51
 
52
52
  头像、支付凭证、实名认证、收款码、证照、商品图、富文本图片等移动端图片上传场景,选择图片后不能把入口锁死。所有上传入口必须统一做到:
@@ -60,7 +60,7 @@
60
60
  - 自动化或手工验收至少覆盖支付凭证、头像/实名认证/收款码中一个私有图场景,确认可替换、可预览、不会丢表单字段。
61
61
 
62
62
  <!-- /microi-progressive:chunk -->
63
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-021 sha256=ad8b543f8e0cd7a20464adb88d456bc21e0451e3f216b1419fa572631543cd49 -->
63
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-021 sha256=68367fcd8e3fae5c2e7da8a956fd803b712ea7bdddbc5a595b16c35b4f7c9fd8 -->
64
64
  ## 组件复用与页面去重
65
65
 
66
66
  同一类 UniApp/H5 UI 在两个及以上页面出现时,必须抽成 `Mci*` 或项目级 `mci-*` 组件,不要复制模板和 scoped 样式到多个业务页面。常见必须复用的结构包括:未登录/授权提示、空态、错误态、骨架屏、列表卡片、商品卡、消息卡、筛选栏、Tab、底部操作栏、按钮组、头像/角标。
@@ -73,7 +73,7 @@
73
73
  - 对复用组件补充自动化检查:静态检查至少确认业务页使用同一个组件;视觉检查至少覆盖两个不同业务页实例。
74
74
 
75
75
  <!-- /microi-progressive:chunk -->
76
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-022 sha256=79b92cb4a1e0b37d786b148a98848fbae3f4424b4d07febc96adbf62ef389431 -->
76
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-022 sha256=bf2b295c18b0e848bffb9dd16a3c8fa2c1d022e7f9a344dd100a2305c5e14de1 -->
77
77
  ## 验收要求
78
78
 
79
79
  每次改动 UniApp/H5 前端后,至少做以下验证:
@@ -90,7 +90,7 @@
90
90
  - 未登录/未授权态必须额外截图确认:提示卡片位于 header 与 tabBar/底栏之间的可用区域中心,不能只横向居中但纵向贴顶。
91
91
 
92
92
  <!-- /microi-progressive:chunk -->
93
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-023 sha256=a9b83516949b57786e8b88bfb13c513af967867a0052d8e6d5475da10da34621 -->
93
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-023 sha256=07c9a59b5b1c165d75648a618039d9627560398a4849da78ea6d1cfa71c4c0de -->
94
94
  ## Microi 前端 SDK 必须接入
95
95
 
96
96
  任何 Microi UniApp/H5 Vue3 项目都必须优先使用 `microi.skills/microi.v8.js` 作为统一前端 SDK,并参考 `microi.skills/microi-frontend-sdk/SKILL.md`。新项目不得再手写分散的 `uni.request`、Token 存储、上传、私有文件 URL、头像解析、`ApiEngine` 或 `FormEngine` 包装。
@@ -103,7 +103,7 @@
103
103
  - SDK 不绑定任何 UI 库;页面 UI 仍遵守本 Skill 的骨架屏、安全区、移动端富文本和资源展示规范。
104
104
 
105
105
  <!-- /microi-progressive:chunk -->
106
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-024 sha256=b2b9b1ea707ab4bd114db5838eda185b7b7e375435cdca21effd7be24f996a27 -->
106
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-024 sha256=c206d390961681ac6dec722beb96c598efa97a97112744c9fabc6f7eee79e43c -->
107
107
  ## MCI-UI Mobile 必须优先使用
108
108
 
109
109
  新的 Microi UniApp/H5 Vue3 项目必须默认基于 `Microi.UI/src/uniapp` 建立页面基础组件,至少包括页面壳、导航栏、按钮、卡片、分段标签、指标卡、底部安全区操作栏、头像、商品卡、骨架屏、数据状态、富文本。用户未主动指定 UI 风格时,AI 必须自动采用 Microi吾码UI。项目可以使用 `uni-ui`、`uView`、`FirstUI` 等第三方组件,但应封装在 MCI-UI 或项目级 `mci-*` 组件后面,不要让业务页面直接散落多套视觉风格。
@@ -117,7 +117,7 @@
117
117
  5. 商品详情、公告、协议等富文本使用 `MciRichText` 或遵循同等结构。
118
118
 
119
119
  <!-- /microi-progressive:chunk -->
120
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-025 sha256=c472359f2f16b287398c0781cb66cbfb98fea99accddbfa078e9f1e9356aa30d -->
120
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-025 sha256=88463d70885f5a2e0718cbd08acfcbe0fa6f60dc4101f9016af575f9932f3783 -->
121
121
  ## 登录、图标与主题补充规范
122
122
 
123
123
  - 登录页不要同时铺开两套完整登录系统。H5/App 默认只做一个“账号/手机号 + 密码”表单;微信小程序默认展示 `<button open-type="getPhoneNumber">` 手机号授权登录,账号密码只能作为次级折叠/备用入口。
@@ -136,7 +136,7 @@
136
136
  - 列表进入详情必须保持身份路径:员工列表点报告详情走员工 token/FormEngine 权限,客户列表点报告详情走 CustomerToken,分享链接走 ShareToken;禁止员工点击可见报告后因为传空 CustomerToken 被跳回登录。
137
137
 
138
138
  <!-- /microi-progressive:chunk -->
139
- <!-- microi-progressive:chunk id=microi-uniapp-frontend-026 sha256=67c8816c77d24e6aef77f1706a72330c7a103b58c623178c056a71203e2b43d3 -->
139
+ <!-- microi-progressive:chunk id=microi-uniapp-frontend-026 sha256=12cab2ca3839d0eee4bebc69648f63b172a793ddeade2c6b0a1108fcad0adc4a -->
140
140
  ## UniApp 上传路径与 Header 规则
141
141
 
142
142
  任何移动端图片、头像、身份认证、付款凭证、富文本图片、收款码上传,都必须走项目统一的 `uploadFile` 包装,并最终委托 `microi.v8.js` 的 `V8.uploadFile`。页面里不得直接调用 `/api/HDFS/UniappUpload`,不得临时手写 `uni.uploadFile`。
@@ -245,6 +245,13 @@ function hasPublicUploadFlag(value) {
245
245
  raw.IsPrivate === false || raw.Private === false || raw.Public === true;
246
246
  }
247
247
 
248
+ function hasPrivateUploadFlag(value) {
249
+ if (!value || typeof value !== 'object') return false;
250
+ const raw = Array.isArray(value) ? (value[0] || {}) : value;
251
+ return [raw.Limit, raw.IsPrivate, raw.Private].some(flag =>
252
+ flag === true || flag === 1 || /^(true|1)$/i.test(String(flag))) || raw.Public === false;
253
+ }
254
+
248
255
  function isKnownPublicUploadPath(path) {
249
256
  // Ordinary form uploads such as /xjy/img and /xjy/file are private by default.
250
257
  // They must use the Managed signer instead of being mistaken for CDN assets.
@@ -770,7 +777,7 @@ export function createMicroiV8(options = {}) {
770
777
  const method = String(options.method || 'POST').toUpperCase();
771
778
  let fullUrl = buildUrl(options.url || options.path || '');
772
779
  const authEnabled = options.auth !== false;
773
- const requestToken = authEnabled ? getToken() : '';
780
+ const requestToken = authEnabled || options.sessionBound === true ? getToken() : '';
774
781
  const headers = buildHeaders(options);
775
782
  const data = options.data === undefined ? {} : options.data;
776
783
  const timeout = options.timeout || config.timeout;
@@ -831,7 +838,7 @@ export function createMicroiV8(options = {}) {
831
838
  throw body || new Error('登录已过期');
832
839
  }
833
840
 
834
- handleReturnedToken(headersReturned, requestToken, authEnabled);
841
+ handleReturnedToken(headersReturned, requestToken, authEnabled || options.sessionBound === true);
835
842
 
836
843
  if (statusCode >= 400) {
837
844
  const error = body || new Error(`请求失败: ${statusCode}`);
@@ -888,6 +895,8 @@ export function createMicroiV8(options = {}) {
888
895
  url: '/api/SysUser/refreshToken',
889
896
  method: 'POST',
890
897
  auth: false,
898
+ // 续签只能更新发起时的会话,避免慢响应覆盖主动登录或恢复已退出的会话。
899
+ sessionBound: true,
891
900
  checkCode: false,
892
901
  silentError: true,
893
902
  headers: {
@@ -991,7 +1000,9 @@ export function createMicroiV8(options = {}) {
991
1000
  const path = extractUploadPath(filePathName);
992
1001
  if (!path || isBlockedAsset(path)) return '';
993
1002
  if (/^(https?:|blob:|data:|file:)/i.test(path)) return assetUrl(path);
994
- if (isLocalPackagedAsset(path) || options.private === false || hasPublicUploadFlag(filePathName) || isKnownPublicUploadPath(path)) {
1003
+ // 文件实际私有标记和私有字段上下文优先,禁止因字段曾改为公有而错误降级 CDN。
1004
+ const privateAccess = options.private === true || hasPrivateUploadFlag(filePathName);
1005
+ if (isLocalPackagedAsset(path) || (!privateAccess && (options.private === false || hasPublicUploadFlag(filePathName) || isKnownPublicUploadPath(path)))) {
995
1006
  return assetUrl(path);
996
1007
  }
997
1008
  // 私有对象没有权威资源上下文时直接失败关闭,禁止以裸路径换取签名。
@@ -8,8 +8,14 @@ description: Microi 模块引擎与 sys_menu 配置指南。用于创建或修
8
8
  # Microi 模块引擎
9
9
 
10
10
  模块引擎决定同一张表在某个菜单、角色和终端中“如何查询、展示和操作”。
11
- 配置实体是 `sys_menu`,不是 `sys_module`;表结构与字段仍属于
12
- `diy_table/diy_field`。
11
+ 配置实体是 `sys_menu`,不是 `sys_module`;表结构与字段仍属于
12
+ `diy_table/diy_field`。
13
+
14
+ 导入、导出按钮显示条件分别使用 `sys_menu.ImportCodeShowV8`、`ExportCodeShowV8`,
15
+ 与新增、编辑、删除条件一样用 `V8.Result=true/false`。通过模块设计“按钮”分组维护,
16
+ 或使用 `microi_update_module`;旧后端需先升级模块引擎应用。它们只控制按钮显示,不能代替后端权限。
17
+ 代码字段是否显示按钮由各字段 `Config.CodeEditor.DisplayMode` 决定,禁止按 `sys_menu` 表名强制覆盖;
18
+ 未配置时默认 `Inline`,需要紧凑按钮的字段显式保存 `Dialog`。
13
19
 
14
20
  ## 必读参考
15
21
 
@@ -22,7 +22,7 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
22
22
  你正在为 Microi 吾码平台生成界面引擎页面的 JSON 数据。界面引擎页面由 `formData` 对象描述,用户导入 JSON 即可使用。
23
23
 
24
24
  <!-- microi-progressive:begin -->
25
- <!-- microi-progressive:chunk id=page-engine-000 sha256=5b79a31a8484bf0a618c2810e66c0ab542fd86ceeb76e7a5cd07a86284c4f6ac -->
25
+ <!-- microi-progressive:chunk id=page-engine-000 sha256=e9ccd20e2c3504afc0a91f5dbe93ed755aed4e83e9ffec13af5b9d60528986e0 -->
26
26
  ## 设计器源码事件
27
27
 
28
28
  只有在扩展界面引擎设计器源码时才使用全局事件总线。用
@@ -31,7 +31,7 @@ MCP 的生成/保存入口包含 `microi_build_page_design` 与 `microi_save_pag
31
31
  触发多次;普通页面 JSON 生成不需要注册事件总线。
32
32
 
33
33
  <!-- /microi-progressive:chunk -->
34
- <!-- microi-progressive:chunk id=page-engine-001 sha256=fa60ff07b50f0d1fdbbf8c3838e94f5de8333a9072c8a5b7e86c4cc91038dfd9 -->
34
+ <!-- microi-progressive:chunk id=page-engine-001 sha256=57717991f9c7de557b524ec36fc9bdd716080b71b682439f1b6662b0b9b2f45c -->
35
35
  ## 核心数据结构
36
36
 
37
37
  ```
@@ -159,7 +159,7 @@ formData(页面)
159
159
  | `radio` | 单选组 | `string` |
160
160
 
161
161
  <!-- /microi-progressive:chunk -->
162
- <!-- microi-progressive:chunk id=page-engine-006 sha256=f50da72e63e62c2e1ea2d47ad2294deba20d6ca1ed732835eeab1e794407306e -->
162
+ <!-- microi-progressive:chunk id=page-engine-006 sha256=2c021e43f4f0d730da1f5a5cf6a2d314589435e2bb9ff573148c787538a8cc86 -->
163
163
  ## 数据来源(widgetParams[0])
164
164
 
165
165
  大多数组件的第一个参数(sort=0)是"数据来源":
@@ -172,7 +172,7 @@ $ApiBase$/apiengine/{ApiEngineKey}
172
172
  ```
173
173
 
174
174
  <!-- /microi-progressive:chunk -->
175
- <!-- microi-progressive:chunk id=page-engine-007 sha256=bf6b4a76b11f27e62fe55e91258e3edb547aeb8456efde9d1ff787136533bf70 -->
175
+ <!-- microi-progressive:chunk id=page-engine-007 sha256=9d5fced79d01857e14e83888681b44f06c69fcc79abf6551dcec312d96c1c02b -->
176
176
  ## 运行态布局与滚动规范
177
177
 
178
178
  - 页面只保留一个主滚动容器:仪表盘、首页和嵌套界面优先继承最外层页面滚动;单个 `pannel`、`workcenter`、`diytable`、`diycalendar`、嵌套 `pageengine` 在运行态默认使用内容自适应高度和 `overflow: visible`,不得无条件设置 `overflow: auto`。
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=page-engine-008 sha256=91bce1411def87c7382ab3759f5fdd9c8d139af3687f8bfb8e000a9c812681a2 -->
5
+ <!-- microi-progressive:chunk id=page-engine-008 sha256=da3cbca3455f750d2635713e3b5f273bc28ce3a696de2108b697aac6632bc8b0 -->
6
6
  ## 所有组件类型
7
7
 
8
8
  ### statistic — 统计面板
@@ -124,7 +124,7 @@
124
124
  首页编排可以组合 `aiengine`、`workcenter`、`diycalendar`、`diytable` 和一个占大区域的 `pageengine`。公告应优先通过绑定 `diy_notice` 的 `diytable` 渲染,使增删改权限继续由 `sys_menu + _RoleLimits` 控制;统计子页面由客户独立替换时,只需修改被嵌入的 `mic_page`,无需重做首页布局。
125
125
 
126
126
  <!-- /microi-progressive:chunk -->
127
- <!-- microi-progressive:chunk id=page-engine-009 sha256=f54168759ae63e6a89d5ccc50ba569915f7e04485b5cb721ff279fff83c9efe0 -->
127
+ <!-- microi-progressive:chunk id=page-engine-009 sha256=7fb5fc82fb49da16a8aa97c449885b920b193f95993c4b87ffea6fac91430f3e -->
128
128
  ## Office/PDF 在线预览自然语言生成规则
129
129
 
130
130
  当用户用自然语言要求“界面引擎预览 PDF/Word/Excel/PPT”“接口引擎返回 PDF 文件”“打开时跳到第 N 页”“按角色显示不同页码”“每 5 秒/10 秒轮询,但只有文件变化才刷新”时,优先生成 `office` 组件,而不是 `iframe/html/browser` 拼接。
@@ -196,7 +196,7 @@ return { Code: 1, Data: { NotModified: true, FileKey: currentFileKey } };
196
196
  生成示例接口时必须写清楚中文注释:每个参数的含义、Redis/缓存 Key 的作用、什么情况下返回 `NeedRefresh:false`、什么情况下返回新的 `FileByteBase64/FileUrl` 和 `PageNumber`。
197
197
 
198
198
  <!-- /microi-progressive:chunk -->
199
- <!-- microi-progressive:chunk id=page-engine-010 sha256=98256e1f8068f29e3e7cb2096fb8290966a58d47390371bec965001a9e706ddd -->
199
+ <!-- microi-progressive:chunk id=page-engine-010 sha256=ad7541cce15739a1af83e459d49895f018d9f7c8d3b9ddc50651194bb66e9d28 -->
200
200
  ## searchData 查询条件通用结构
201
201
 
202
202
  ```json
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 按需读取;本文件由 SKILL.md 的原章节无损拆分。
4
4
 
5
- <!-- microi-progressive:chunk id=page-engine-011 sha256=44c991a664b2379ed0d88b8f307e8cfbff27e4c349270cd9872f856f0d0b570b -->
5
+ <!-- microi-progressive:chunk id=page-engine-011 sha256=12fce12290d6d23fd2fc80ef04861383da21a68ccceeaa4d63baacae3abd2b09 -->
6
6
  ## 版本历史、并发保存与回滚
7
7
 
8
8
  修改现有页面时必须先读取页面详情中的 `CurrentHash`,保存时把它作为 `expectedHash` 传入,并填写简短 `changeSummary`。不要仅凭本地旧 JSON 覆盖远端页面。
@@ -22,7 +22,7 @@
22
22
  - 页面历史属于当前租户数据库;不要假定业务表有物理 `OsClient` 列。
23
23
 
24
24
  <!-- /microi-progressive:chunk -->
25
- <!-- microi-progressive:chunk id=page-engine-012 sha256=61a83f536eede477a85d7d49cadf516e705d7d67510c189f9fb6ab0e72ba63db -->
25
+ <!-- microi-progressive:chunk id=page-engine-012 sha256=3b4d714b8c18fe21dca53f666b702bd2fd8a4fb12e2b0068aa7654eaed7ea847 -->
26
26
  ## 本地撤销、Vue 源码桥与资产包
27
27
 
28
28
  - 设计器本地历史最多 50 步、总计最多 20MB;连续编辑允许合并,但保存前必须刷新当前 `CurrentHash`。
@@ -36,7 +36,7 @@
36
36
  - 复杂页面需要完整工程能力时提升为前端微服务;不要承诺任意 Vue 源码无损反编译回界面引擎。
37
37
 
38
38
  <!-- /microi-progressive:chunk -->
39
- <!-- microi-progressive:chunk id=page-engine-013 sha256=d78e797960620f983fc73f8485c0e928937474340efe6c2ec8923cfd5f4a28f2 -->
39
+ <!-- microi-progressive:chunk id=page-engine-013 sha256=c24083380909395251b816bf0beb96e99b6e1941baf5031a0ae13d947b23c4c0 -->
40
40
  ## 生成 JSON 注意事项
41
41
 
42
42
  1. **编号唯一**:`wrapperOption.number` 和 `widgetOption.number` 页面内唯一(随机5位整数)
@@ -48,7 +48,7 @@
48
48
  7. **formConfig 完整**:所有字段都应包含,不能省略
49
49
  8. **选项卡容器**:组件放在 `tabWidgetMap[tabKey][]` 中,不放在 `widgetList` 中
50
50
  <!-- /microi-progressive:chunk -->
51
- <!-- microi-progressive:chunk id=page-engine-014 sha256=18fecb3e402daeb1f95e8f501c4456455a4c1a3b9de83208d03676f5cbf1cf84 -->
51
+ <!-- microi-progressive:chunk id=page-engine-014 sha256=e1abcb185d1df147ce4631d185ac8cb231f9cfd92fda91bc0e0d72667c837072 -->
52
52
  ## 经营看板周期筛选与布局规则
53
53
 
54
54
  - 老板驾驶舱、经营看板、CRM/订单/售后统计页面,所有统计类组件默认都要提供统一周期筛选:本日、本周、本月、本季、本年、去年,以及“更多”里的自定义时间范围和业务条件。
@@ -211,7 +211,8 @@ UnblockIp:<ip>
211
211
  - 验收分开记录 Node 行为测试、真实管理员/云端只读、文档保留 IP 的受控封禁/到期恢复、真实宿主页面、包正文 SHA 与安装。日志未投递或海量服务未开通时,如实标为待配置,不伪造云端通过。
212
212
 
213
213
  - 普通查询和汇总优先在 `mci-system-observability-query` 接口引擎编排。
214
- - 只有接口引擎缺少宿主进程、Docker、Mongo 聚合、安全运行态等可复用底层能力时,才扩展最小 V8 原子方法;Controller 不承载业务编排。
214
+ - 历史日志兼容入口为 `POST/GET /api/SysLog/AddSysLog`;它只接受当前 DiyToken 用户和租户上下文,返回进入异步持久化流程不等于日志已经落库,必须以后续记录回读作为验收事实。
215
+ - 只有接口引擎缺少宿主进程、Docker、Mongo 聚合、安全运行态等可复用底层能力时,才扩展最小 V8 原子方法;Controller 不承载业务编排。
215
216
  - 官方引擎声明 `ResourcePolicies.ApiEngines=Managed`,由本次已校验包正文覆盖其拥有的资源;客户扩展使用独立 Key 或 `CreateIfMissing`,既有扩展不被覆盖。不得把 Managed 的旧本地改动当作拒绝应用升级的理由,也不得扩大到无关资源。
216
217
  - 按应用发布契约交付表、字段、索引/DDL、接口引擎、菜单、版本日志和微服务运行产物;私有源码由源码同步链交付。`DatabaseOnly/SourceNotIncluded` 必须如实标识,不能声称商城包包含全部源码。安装后回读固定版本快照并在真实页面验收。
217
218
  - 后端框架和商城应用是两条升级链:只升级其中一条不能证明功能完整。目标端应先升级兼容框架,再安装/更新最新【系统日志/监控】应用。
@@ -36,6 +36,12 @@ Microi 上传字段存在四种必须长期兼容的存储形态,不能假设
36
36
 
37
37
  `FileServer` 是对象存储/CDN 地址,不等同于 API 服务。租户切换时必须使用当前 `OsClient` 的运行期配置,禁止在源码中写死域名或租户目录。
38
38
 
39
+ ### 跨端上传字段的形态与桶属性
40
+
41
+ - 控件读取嵌套 `Config.ImgUpload/FileUpload.Multiple` 与 `MaxCount`;`Multiple=false` 保存单图对象,不能因数量上限或默认九图值而保存数组。已有单元素数组在单图控件中按第一项读取,不在查看时回写业务数据。
42
+ - 上传时透传字段授权上下文与配置的 `Limit`,后端仍独立校验字段策略。上传响应中的实际 `Limit` 属于可持久化元数据,必须保留;临时 `Url/PreviewUrl` 与本地预览地址不得入库。
43
+ - 历史对象缺少 `Limit` 时,以字段配置作为取址依据。已有对象明确 `Limit=true/1` 时,即使字段当前为公有,也必须签名;私有字段上下文与实际私有标记优先于公有提示。签发失败保持空地址,禁止尝试把私有路径拼到公有 CDN。
44
+
39
45
  ## 统一资源解析函数
40
46
 
41
47
  未使用 `microi.v8.js` 的项目,应在共享请求/资源模块中实现等价的“提取上传路径 + 解析资源 URL”两层函数,所有页面复用同一逻辑:
@@ -10,7 +10,7 @@ description: Microi V8 CRUD 接口引擎开发。用于编写服务端 JavaScrip
10
10
  你正在开发 Microi 吾码平台的 V8 接口引擎。接口引擎是运行在服务端的 JavaScript 函数,通过 `V8.FormEngine` 操作数据库,通过 `V8.Result` 或 `return` 返回结果。
11
11
 
12
12
  <!-- microi-progressive:begin -->
13
- <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=6b43119f4eae78fb6b185d48c5c289878ba86093ae62ce44ad0bdaa48093f605 -->
13
+ <!-- microi-progressive:chunk id=v8-crud-api-000 sha256=d385cc7f9c0048ae1e2263e922ec33a97e8a321bcb88df4dc72a07c269fe1829 -->
14
14
  ## 本地优先与版本头(必做)
15
15
 
16
16
  AI 本地开发接口引擎时,优先修改 `microi-v8-engine/<租户>/<项目>/接口引擎/.../*.js` 本地文件,再通过 MCP 或 VS Code 插件同步到数据库。插件提示“本地和远端不一致”时,必须先读取本地与远端代码并合并有效差异,不能盲目用任一侧覆盖另一侧。
@@ -38,7 +38,7 @@ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `
38
38
  生成接口引擎代码时,代码内容本身(文件头、普通注释、`console.log`、返回 `Msg` 等)不要包含 `Microi`、`吾码` 等平台品牌文字,除非业务数据或字段值本身必须如此。生成代码要有可维护注释:每个 `function` 前写清用途、关键参数和返回值;跨表事务、权限校验、状态机、金额/库存计算、复杂 `_Where` 条件等代码段前写短注释说明业务原因;避免“给变量赋值”这类无信息量注释。
39
39
 
40
40
  <!-- /microi-progressive:chunk -->
41
- <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=86768d106f68593e51beb29bcff1ee0291c483706431181da34984b22228ff21 -->
41
+ <!-- microi-progressive:chunk id=v8-crud-api-001 sha256=38155b3a9dedd994309b15913a160a6647ca4c4a7200546268fe0f5e321c4575 -->
42
42
  ## 核心规则
43
43
 
44
44
  - 接口引擎文件是纯 JavaScript(Jint 引擎,非 Node.js)
@@ -51,7 +51,7 @@ Microi.net.Api 普通本地启动不要额外设置 `ASPNETCORE_ENVIRONMENT` / `
51
51
  - 接口内 `return Code=1` 自动提交事务、`Code≠1` 自动回滚事务,**禁止**手动 Commit/Rollback
52
52
 
53
53
  <!-- /microi-progressive:chunk -->
54
- <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=9f10ab278468f292b5e26679b7a7ab2ea91bb6d4094e2bff8adb7cb15e39adce -->
54
+ <!-- microi-progressive:chunk id=v8-crud-api-002 sha256=b1ec527e9a5e97b93ed9d59fdd9cd1dfae74149ab438d1a4a9e3b198976bb6a6 -->
55
55
  ## 性能底线(必须自检)
56
56
 
57
57
  - 写接口引擎前必须先做数据访问计划:需要哪些表、哪些字段、预计数据量、是否分页、是否需要缓存。