@microi.net/cli 5.2.1 → 5.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.
- package/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/assets/build-meta.json +5 -5
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +1 -1
- package/scripts/microi-codex-broker.js +12 -2
- package/scripts/microi-skills.meta.json +199 -199
- package/skills/.microi-skills-version.json +2 -2
- package/skills/app-store/SKILL.md +63 -11
- package/skills/microi-client-frontend/SKILL.md +15 -1
- package/skills/microi-form-engine/SKILL.md +106 -84
- package/skills/microi-form-engine/references/component-catalog.md +74 -3
- package/skills/microi-form-layout/SKILL.md +16 -7
- 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 +4 -0
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +4 -0
- package/skills/microi-system-delivery/SKILL.md +13 -13
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +53 -53
- package/skills/microi-uniapp-frontend/SKILL.md +9 -1
- package/skills/module-engine/SKILL.md +8 -8
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/v8-api-config/SKILL.md +167 -154
- package/skills/v8-cache-pattern/SKILL.md +114 -114
- package/skills/v8-file-upload/SKILL.md +28 -3
- 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 +1 -1
- package/skills/workspace-conventions/SKILL.md +11 -0
|
@@ -1,204 +1,204 @@
|
|
|
1
|
-
# 模块引擎配置参考
|
|
2
|
-
|
|
3
|
-
## 核心归属
|
|
4
|
-
|
|
5
|
-
| 配置 | 归属 |
|
|
6
|
-
|---|---|
|
|
7
|
-
| 表与字段元数据 | `diy_table`、`diy_field` |
|
|
8
|
-
| 菜单、列表列、按钮、打开方式、ViewSchema | `sys_menu` |
|
|
9
|
-
| 接口替换业务逻辑 | `sys_apiengine` |
|
|
10
|
-
| 左右树配置 | `diy_LeftJoinRightView` |
|
|
11
|
-
| MicroService 运行时/页面 | `sys_microiservice`、`sys_microiservice_page` |
|
|
12
|
-
|
|
13
|
-
## 查询与显示
|
|
14
|
-
|
|
15
|
-
| 逻辑配置 | sys_menu 侧含义 |
|
|
16
|
-
|---|---|
|
|
17
|
-
| `TableDiyFieldIds` | 当前模块可用字段全集 |
|
|
18
|
-
| `SelectFields` | 列表查询字段 |
|
|
19
|
-
| `SearchFieldIds` | 可搜索字段 |
|
|
20
|
-
| `SortFieldIds` | 可排序字段 |
|
|
21
|
-
| `NotShowFields` | 查询但不直接显示的字段 |
|
|
22
|
-
| `StatisticsFields` | 汇总字段 |
|
|
23
|
-
| `MobileListFields` | 移动端列表字段 |
|
|
24
|
-
| `CardTitleTagFields` | 卡片标题/标签字段 |
|
|
25
|
-
| `CardBottomTagFields` | 卡片底部字段 |
|
|
26
|
-
| `DefaultOrderBy` | 默认排序 |
|
|
27
|
-
| `MenuBadgeEnabled` | 左侧菜单统计角标开关 |
|
|
28
|
-
| `MenuBadgeApiEngineKey` | 菜单统计接口引擎 Key,返回 `Data.Value` |
|
|
29
|
-
| `MenuBadgeTooltip` | 鼠标移入菜单数字角标时显示的统计口径说明;应写清对象、用户范围及待办/未读/总数等含义 |
|
|
30
|
-
|
|
31
|
-
默认隐藏 Id、外键、系统字段、布局字段、上传、富文本、地图和子表等重字段。
|
|
32
|
-
默认搜索优先名称、标题、编号、状态、类型、分类、负责人和时间;统计优先金额、
|
|
33
|
-
数量、价格、积分和余额。用户明确配置优先。
|
|
34
|
-
|
|
35
|
-
每个可见且绑定表的 Diy 模块还必须有 List/Card 展示设计:所有普通列给合理
|
|
36
|
-
`TableWidth`,至少一个 PC 复合列给 `MinWidth`,Hero 有业务标题、副标题和 2~4 个
|
|
37
|
-
真实指标,移动卡片覆盖可用的标题/副标题/顶部/状态/右侧/正文/Meta/底部区域。
|
|
38
|
-
复合列一般只用一个主字段加一个 `Lines` 次要字段,形成紧凑双行;可以配置多个各自双行
|
|
39
|
-
的复合列,但不要在同一列堆两个 `Lines` 形成三行。复合列和卡片区域使用过的字段不得
|
|
40
|
-
继续机械显示为普通列或在多个区域重复。
|
|
41
|
-
|
|
42
|
-
菜单角标只用于少量待办、未读、逾期、预警等重要入口;PageTabs 与按钮角标按业务价值
|
|
43
|
-
选择。相同页面的一组指标/角标使用一个批量接口,不逐指标、逐按钮、逐行请求。
|
|
44
|
-
配置菜单角标时应同时配置 `MenuBadgeTooltip`;历史菜单缺少该字段时,客户端回退显示菜单名
|
|
45
|
-
和原始数字,不得因提示文案缺失影响角标本身。
|
|
46
|
-
自动默认值只保证旧库和漏配模块不出现空白标题,不替代业务设计;严禁用随机数或静态演示
|
|
47
|
-
数字伪造统计。没有可推断业务指标时只使用真实 `DataCount/PageCount` 兜底。
|
|
48
|
-
|
|
49
|
-
## 打开方式细节
|
|
50
|
-
|
|
51
|
-
### Diy
|
|
52
|
-
|
|
53
|
-
默认 `/diy/diy-table-rowlist`,绑定 `DiyTableId` 后自动具备列表、搜索、新增、
|
|
54
|
-
编辑、删除、导入和导出。
|
|
55
|
-
|
|
56
|
-
### Component
|
|
57
|
-
|
|
58
|
-
用于主前端源码已注册的组件。组件路径必须存在并经过目标前端构建验证。
|
|
59
|
-
|
|
60
|
-
### Iframe
|
|
61
|
-
|
|
62
|
-
仅允许受控 URL。地址接口引擎可返回动态 URL,但:
|
|
63
|
-
|
|
64
|
-
- 密钥只在后端使用;
|
|
65
|
-
- 外部 Token 短时缓存并按 `OsClient + 用户 + 目标系统` 隔离;
|
|
66
|
-
- URL 参数使用一次性交换码,不使用当前后台 JWT;
|
|
67
|
-
- 限制跳转域名并防 SSRF/开放重定向。
|
|
68
|
-
|
|
69
|
-
### SecondMenu
|
|
70
|
-
|
|
71
|
-
只承载子菜单,不绑定业务表;`HasChild` 与真实子菜单一致。
|
|
72
|
-
|
|
73
|
-
### Report
|
|
74
|
-
|
|
75
|
-
使用报表引擎虚拟表。读取 `report-engine/SKILL.md`。
|
|
76
|
-
|
|
77
|
-
### MicroService
|
|
78
|
-
|
|
79
|
-
必须同时绑定:
|
|
80
|
-
|
|
81
|
-
- `MicroServiceId`
|
|
82
|
-
- `MicroServicePageId`
|
|
83
|
-
- `MicroServiceRoutePath`
|
|
84
|
-
- `MicroServiceKey`
|
|
85
|
-
- `ComponentPath=/micro-app/host`
|
|
86
|
-
|
|
87
|
-
路由优先 `/micro-app/{MsKey}/{RoutePath}`,并兼容历史 Id 路由。
|
|
88
|
-
|
|
89
|
-
完整系统 Manifest 使用可移植引用:模块写 `openType=MicroService`、`microServiceKey`、`microServiceRoutePath`,不把某个租户的 `MicroServiceId/MicroServicePageId` 固化进发行包。`microi_generate_system` 会在首个写操作前回读运行元数据并补齐两个 Id;解析失败必须停止整次生成。直接调用 `microi_create_module` 时仍须一次提供全部四个绑定字段。
|
|
90
|
-
|
|
91
|
-
## 跨端 ViewSchema
|
|
92
|
-
|
|
93
|
-
专用物理字段:
|
|
94
|
-
|
|
95
|
-
| 字段 | 说明 |
|
|
96
|
-
|---|---|
|
|
97
|
-
| `EnableViewSchema` | 1 启用 Detail/Edit 自定义表单视图;不控制 List/Card |
|
|
98
|
-
| `ViewSchemaVersion` | 可选;为空默认 `1.0` |
|
|
99
|
-
| `ViewConfigVersion` | 可选;为空默认 `1`,后续发布递增并驱动缓存失效 |
|
|
100
|
-
| `ViewSchema` | Detail/Edit/List/Card JSON |
|
|
101
|
-
|
|
102
|
-
顶层 PC 列表不依赖 `EnableViewSchema` 才采用新样式:平台始终显示紧凑模块标题;ViewSchema 中有效的 List-PC 与 Card-Mobile 配置也不受该开关限制。模块表单中的 `DiyModulePresentationDesigner` 负责可视化编辑这些展示配置,以独立 JSON 编辑 Detail/Edit,并通过高级 JSON 保留角色视图及未知字段。
|
|
103
|
-
|
|
104
|
-
设计器固定提供“模块标题与统计 / PC 复合列 / 移动端卡片 / 自定义表单 / 高级 JSON”五个
|
|
105
|
-
Tab;开关标签是“启用自定义表单视图”,只影响第四个 Tab 中的 Detail/Edit。
|
|
106
|
-
|
|
107
|
-
视图项常用字段:`Key`、`Scene`、`Device`、`RoleIds`、`Priority`、`Layout`。
|
|
108
|
-
标准区块包括 `EntityHero`、`MetricStrip`、`ActionGrid`、
|
|
109
|
-
`ResponsiveSection`。声明式动作包括:
|
|
110
|
-
|
|
111
|
-
`ApiEngine`、`OpenDetail`、`OpenList`、`OpenForm`、`Navigate`、
|
|
112
|
-
`Dial`、`Scan`、`Map`、`Refresh`、`Back`、`Copy`。
|
|
113
|
-
|
|
114
|
-
`ParamMap` 可使用经过白名单处理的 `$form.Field`、`$user.Field`、
|
|
115
|
-
`$menu.Field`。小程序端不下载/执行任意 V8Code。
|
|
116
|
-
|
|
117
|
-
### List / Card 展示协议
|
|
118
|
-
|
|
119
|
-
| 配置路径 | 用途 | 核心字段 |
|
|
120
|
-
|---|---|---|
|
|
121
|
-
| `Layout.Hero` | 模块眉题、标题、说明、统计条 | `Eyebrow/Title/Description/Metrics` |
|
|
122
|
-
| `Hero.Metrics[]` | 内置、字段或接口引擎指标 | `Key/Label/Source/Field/ApiEngineKey/ValuePath/Prefix/Suffix/Icon/Tone/Color/RefreshSeconds` |
|
|
123
|
-
| `Layout.List.Columns[]` | PC 复合列 | `Field/Lines/TrailingFields/RequiredFields/Align/MinWidth` |
|
|
124
|
-
| `Layout.Card` | 移动端业务卡片 | `AvatarTextField/TitleField/TopFields/SubtitleFields/RightFields/Fields/MetaFields/BottomFields` |
|
|
125
|
-
|
|
126
|
-
字段引用对象支持 `Name/AsName/Label/ShowLabel/Icon/Tone/Color/Prefix/Suffix/
|
|
127
|
-
FontWeight/DisplayStyle`。运行时会把引用字段并入 `_SelectFields`;查询接口替换也必须
|
|
128
|
-
返回这些字段。多字段模板沿用对应 `diy_field.V8TmpEngineTable`,不在 ViewSchema 内保存
|
|
129
|
-
可执行脚本。
|
|
130
|
-
|
|
131
|
-
PC 复合列的常规高度上限是两行:`Field` 占主行,`Lines` 通常只放 1 项。多个信息组拆成
|
|
132
|
-
多个两行复合列;只有确有层级价值且完成桌面截图验收后,才允许在同一列放第 2 个
|
|
133
|
-
`Lines`。`TrailingFields` 位于右侧,不应被误用成增加纵向信息层级。
|
|
134
|
-
|
|
135
|
-
Hero 必须在 PageTabs 上方渲染。PC 无指标/含指标头部分别为 `44px / 62px`,连同间距的
|
|
136
|
-
总纵向占用约 `50px / 68px`。有指标时标题说明区占约 25%~30%,指标区弹性占满其余空间,
|
|
137
|
-
两区只用弱化渐变分隔;指标容器不加外框,单指标使用轻量语义色背景和图标色块,禁止
|
|
138
|
-
“外层框 + 指标条框 + 指标卡框”的多层线框。无指标时标题说明自动铺满。每个指标必须
|
|
139
|
-
显式配置 `Icon`,同一 Hero 内使用不同 `Tone` 或 `Color` 与不同图标,不能只靠数字区分。
|
|
140
|
-
只允许一次性入场与一次性轻量光效,禁止持续循环动画;
|
|
141
|
-
`prefers-reduced-motion: reduce` 下关闭动画和过渡。
|
|
142
|
-
|
|
143
|
-
`Hero.Metrics[].Source` 可直接配置 `DataCount`(当前筛选总记录数)或 `PageCount`(本页
|
|
144
|
-
加载数),两者复用列表结果且不请求接口。字段汇总使用 `Field`。动态指标接口按
|
|
145
|
-
`ApiEngineKey` 分组调用,参数包含 `MetricKeys`、当前模块/表、租户和筛选上下文;同一接口
|
|
146
|
-
应一次返回多个指标。`ValuePath` 例:`Data.UnpaidAmount`。
|
|
147
|
-
|
|
148
|
-
## 动态按钮位置
|
|
149
|
-
|
|
150
|
-
| 字段 | 位置 |
|
|
151
|
-
|---|---|
|
|
152
|
-
| `MoreBtns` | 行操作 |
|
|
153
|
-
| `FormBtns` | 表单底部 |
|
|
154
|
-
| `BatchSelectMoreBtns` | 批量勾选后 |
|
|
155
|
-
| `PageTabs` | 页面顶部 Tab,固定在模块 Hero 下方 |
|
|
156
|
-
| `PageBtns` | 页面级 |
|
|
157
|
-
| `ExportMoreBtns` | 导出扩展 |
|
|
158
|
-
|
|
159
|
-
按钮对象必须有稳定唯一 Id、Sort、Name、显隐逻辑和动作。后台任务按钮还要配置
|
|
160
|
-
ApiEngineKey、Workload、幂等字段、并发 Key、业务状态/任务 Id/进度/ETA 字段。
|
|
161
|
-
|
|
162
|
-
`PageTabs` 与五类按钮共用统计字段:`BadgeEnabled`、`BadgeApiEngineKey`、`BadgeValuePath`、`BadgeField`、
|
|
163
|
-
`BadgeTone`、`BadgeColor`、`BadgeMax`、`BadgeShowZero`、`BadgeRefreshSeconds`。接口一次接收当前页 `Ids` 与
|
|
164
|
-
`ButtonKeys`,推荐返回:
|
|
165
|
-
|
|
166
|
-
```json
|
|
167
|
-
{
|
|
168
|
-
"Code": 1,
|
|
169
|
-
"Data": {
|
|
170
|
-
"Buttons": { "button-id": 12 },
|
|
171
|
-
"Rows": { "row-id": { "button-id": 2 } }
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
行按钮的 `BadgeField` 直接读取当前行已有字段;PageTabs/页面按钮的 `BadgeField` 读取模块 `StatisticsFields` 页面汇总值,必须同时配置“统计列”。字段模式不调用接口;其它行统计必须批量聚合,禁止 N+1。
|
|
177
|
-
|
|
178
|
-
## 接口替换
|
|
179
|
-
|
|
180
|
-
可替换查询、新增、更新、删除、导入、导入进度和导出接口。替换后仍要保持平台
|
|
181
|
-
返回契约、权限、分页、统计、错误码和租户隔离。
|
|
182
|
-
|
|
183
|
-
- 查询:返回 `Code/Data/DataCount`,不可丢失菜单权限。
|
|
184
|
-
- 导入:读取文件、校验、分片写入、真实进度、幂等恢复。
|
|
185
|
-
- 导出:大数据使用后台任务/流式文件,不在请求内无界物化。
|
|
186
|
-
- 所有路径变量只能使用平台明确支持的占位符,不拼接 Token。
|
|
187
|
-
|
|
188
|
-
## PageTabs 两种模式
|
|
189
|
-
|
|
190
|
-
- 无目标菜单:在当前模块执行 V8,通常 `V8.SearchSet(...)`。
|
|
191
|
-
- 有 `TargetSysMenuId`:在当前 `diy-table` 实例内加载目标模块的菜单、表、字段和列表数据。目标菜单即使隐藏导航,也必须给角色权限。
|
|
192
|
-
|
|
193
|
-
PageTabs 可以通过 `BadgeApiEngineKey` 显示数字角标。接口按 `ButtonKeys` 一次返回所有 Tab 数量到 `Data.Buttons`,`BadgeValuePath` 可显式指定 `Data.Buttons.{TabId}`;失败只隐藏角标,不能阻断页签切换。
|
|
194
|
-
|
|
195
|
-
PageTabs 只表达当前模块的数据类别/状态,不能取代模块 Hero,也不能渲染到 Hero 上方。
|
|
196
|
-
|
|
197
|
-
跨表 Tab 由入口模块统一配置一组 PageTabs,目标菜单只保留各自的模块设计、表绑定和角色权限,不复制 PageTabs。隐藏目标菜单统一设置 `ParentId=入口菜单Id、Display=0、AppDisplay=0、HasChild=0、PageTabs=[]`,入口菜单继续保持 `HasChild=0` 作为可直接点击的业务入口。模块设计器用【关联模块】可搜索菜单树展示名称、保存 `TargetSysMenuId`。切换只更新当前 URL 的 `Tab` 查询参数;路由、面包屑、顶部访问标签和入口模块 Hero 保持稳定,表格上下文在原实例中切换。实现时必须取消旧请求、丢弃迟到响应并在失败时回滚,禁止按菜单名或业务表名写死。
|
|
198
|
-
|
|
199
|
-
首屏和跨模块切换应为 Hero 标题/统计、PageTabs、工具栏和列表提供与最终几何尺寸一致的主题化骨架屏;根据模块元数据判断是否预留指标区和 PageTabs,并支持 `prefers-reduced-motion: reduce`。
|
|
200
|
-
|
|
201
|
-
## URL 参数
|
|
202
|
-
|
|
203
|
-
兼容参数包括 `ShowClassicTop`、`ShowClassicLeft`、`FormDataId`。它们只控制
|
|
204
|
-
界面/默认打开记录,不建立授权;记录仍须通过当前菜单和数据权限校验。
|
|
1
|
+
# 模块引擎配置参考
|
|
2
|
+
|
|
3
|
+
## 核心归属
|
|
4
|
+
|
|
5
|
+
| 配置 | 归属 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| 表与字段元数据 | `diy_table`、`diy_field` |
|
|
8
|
+
| 菜单、列表列、按钮、打开方式、ViewSchema | `sys_menu` |
|
|
9
|
+
| 接口替换业务逻辑 | `sys_apiengine` |
|
|
10
|
+
| 左右树配置 | `diy_LeftJoinRightView` |
|
|
11
|
+
| MicroService 运行时/页面 | `sys_microiservice`、`sys_microiservice_page` |
|
|
12
|
+
|
|
13
|
+
## 查询与显示
|
|
14
|
+
|
|
15
|
+
| 逻辑配置 | sys_menu 侧含义 |
|
|
16
|
+
|---|---|
|
|
17
|
+
| `TableDiyFieldIds` | 当前模块可用字段全集 |
|
|
18
|
+
| `SelectFields` | 列表查询字段 |
|
|
19
|
+
| `SearchFieldIds` | 可搜索字段 |
|
|
20
|
+
| `SortFieldIds` | 可排序字段 |
|
|
21
|
+
| `NotShowFields` | 查询但不直接显示的字段 |
|
|
22
|
+
| `StatisticsFields` | 汇总字段 |
|
|
23
|
+
| `MobileListFields` | 移动端列表字段 |
|
|
24
|
+
| `CardTitleTagFields` | 卡片标题/标签字段 |
|
|
25
|
+
| `CardBottomTagFields` | 卡片底部字段 |
|
|
26
|
+
| `DefaultOrderBy` | 默认排序 |
|
|
27
|
+
| `MenuBadgeEnabled` | 左侧菜单统计角标开关 |
|
|
28
|
+
| `MenuBadgeApiEngineKey` | 菜单统计接口引擎 Key,返回 `Data.Value` |
|
|
29
|
+
| `MenuBadgeTooltip` | 鼠标移入菜单数字角标时显示的统计口径说明;应写清对象、用户范围及待办/未读/总数等含义 |
|
|
30
|
+
|
|
31
|
+
默认隐藏 Id、外键、系统字段、布局字段、上传、富文本、地图和子表等重字段。
|
|
32
|
+
默认搜索优先名称、标题、编号、状态、类型、分类、负责人和时间;统计优先金额、
|
|
33
|
+
数量、价格、积分和余额。用户明确配置优先。
|
|
34
|
+
|
|
35
|
+
每个可见且绑定表的 Diy 模块还必须有 List/Card 展示设计:所有普通列给合理
|
|
36
|
+
`TableWidth`,至少一个 PC 复合列给 `MinWidth`,Hero 有业务标题、副标题和 2~4 个
|
|
37
|
+
真实指标,移动卡片覆盖可用的标题/副标题/顶部/状态/右侧/正文/Meta/底部区域。
|
|
38
|
+
复合列一般只用一个主字段加一个 `Lines` 次要字段,形成紧凑双行;可以配置多个各自双行
|
|
39
|
+
的复合列,但不要在同一列堆两个 `Lines` 形成三行。复合列和卡片区域使用过的字段不得
|
|
40
|
+
继续机械显示为普通列或在多个区域重复。
|
|
41
|
+
|
|
42
|
+
菜单角标只用于少量待办、未读、逾期、预警等重要入口;PageTabs 与按钮角标按业务价值
|
|
43
|
+
选择。相同页面的一组指标/角标使用一个批量接口,不逐指标、逐按钮、逐行请求。
|
|
44
|
+
配置菜单角标时应同时配置 `MenuBadgeTooltip`;历史菜单缺少该字段时,客户端回退显示菜单名
|
|
45
|
+
和原始数字,不得因提示文案缺失影响角标本身。
|
|
46
|
+
自动默认值只保证旧库和漏配模块不出现空白标题,不替代业务设计;严禁用随机数或静态演示
|
|
47
|
+
数字伪造统计。没有可推断业务指标时只使用真实 `DataCount/PageCount` 兜底。
|
|
48
|
+
|
|
49
|
+
## 打开方式细节
|
|
50
|
+
|
|
51
|
+
### Diy
|
|
52
|
+
|
|
53
|
+
默认 `/diy/diy-table-rowlist`,绑定 `DiyTableId` 后自动具备列表、搜索、新增、
|
|
54
|
+
编辑、删除、导入和导出。
|
|
55
|
+
|
|
56
|
+
### Component
|
|
57
|
+
|
|
58
|
+
用于主前端源码已注册的组件。组件路径必须存在并经过目标前端构建验证。
|
|
59
|
+
|
|
60
|
+
### Iframe
|
|
61
|
+
|
|
62
|
+
仅允许受控 URL。地址接口引擎可返回动态 URL,但:
|
|
63
|
+
|
|
64
|
+
- 密钥只在后端使用;
|
|
65
|
+
- 外部 Token 短时缓存并按 `OsClient + 用户 + 目标系统` 隔离;
|
|
66
|
+
- URL 参数使用一次性交换码,不使用当前后台 JWT;
|
|
67
|
+
- 限制跳转域名并防 SSRF/开放重定向。
|
|
68
|
+
|
|
69
|
+
### SecondMenu
|
|
70
|
+
|
|
71
|
+
只承载子菜单,不绑定业务表;`HasChild` 与真实子菜单一致。
|
|
72
|
+
|
|
73
|
+
### Report
|
|
74
|
+
|
|
75
|
+
使用报表引擎虚拟表。读取 `report-engine/SKILL.md`。
|
|
76
|
+
|
|
77
|
+
### MicroService
|
|
78
|
+
|
|
79
|
+
必须同时绑定:
|
|
80
|
+
|
|
81
|
+
- `MicroServiceId`
|
|
82
|
+
- `MicroServicePageId`
|
|
83
|
+
- `MicroServiceRoutePath`
|
|
84
|
+
- `MicroServiceKey`
|
|
85
|
+
- `ComponentPath=/micro-app/host`
|
|
86
|
+
|
|
87
|
+
路由优先 `/micro-app/{MsKey}/{RoutePath}`,并兼容历史 Id 路由。
|
|
88
|
+
|
|
89
|
+
完整系统 Manifest 使用可移植引用:模块写 `openType=MicroService`、`microServiceKey`、`microServiceRoutePath`,不把某个租户的 `MicroServiceId/MicroServicePageId` 固化进发行包。`microi_generate_system` 会在首个写操作前回读运行元数据并补齐两个 Id;解析失败必须停止整次生成。直接调用 `microi_create_module` 时仍须一次提供全部四个绑定字段。
|
|
90
|
+
|
|
91
|
+
## 跨端 ViewSchema
|
|
92
|
+
|
|
93
|
+
专用物理字段:
|
|
94
|
+
|
|
95
|
+
| 字段 | 说明 |
|
|
96
|
+
|---|---|
|
|
97
|
+
| `EnableViewSchema` | 1 启用 Detail/Edit 自定义表单视图;不控制 List/Card |
|
|
98
|
+
| `ViewSchemaVersion` | 可选;为空默认 `1.0` |
|
|
99
|
+
| `ViewConfigVersion` | 可选;为空默认 `1`,后续发布递增并驱动缓存失效 |
|
|
100
|
+
| `ViewSchema` | Detail/Edit/List/Card JSON |
|
|
101
|
+
|
|
102
|
+
顶层 PC 列表不依赖 `EnableViewSchema` 才采用新样式:平台始终显示紧凑模块标题;ViewSchema 中有效的 List-PC 与 Card-Mobile 配置也不受该开关限制。模块表单中的 `DiyModulePresentationDesigner` 负责可视化编辑这些展示配置,以独立 JSON 编辑 Detail/Edit,并通过高级 JSON 保留角色视图及未知字段。
|
|
103
|
+
|
|
104
|
+
设计器固定提供“模块标题与统计 / PC 复合列 / 移动端卡片 / 自定义表单 / 高级 JSON”五个
|
|
105
|
+
Tab;开关标签是“启用自定义表单视图”,只影响第四个 Tab 中的 Detail/Edit。
|
|
106
|
+
|
|
107
|
+
视图项常用字段:`Key`、`Scene`、`Device`、`RoleIds`、`Priority`、`Layout`。
|
|
108
|
+
标准区块包括 `EntityHero`、`MetricStrip`、`ActionGrid`、
|
|
109
|
+
`ResponsiveSection`。声明式动作包括:
|
|
110
|
+
|
|
111
|
+
`ApiEngine`、`OpenDetail`、`OpenList`、`OpenForm`、`Navigate`、
|
|
112
|
+
`Dial`、`Scan`、`Map`、`Refresh`、`Back`、`Copy`。
|
|
113
|
+
|
|
114
|
+
`ParamMap` 可使用经过白名单处理的 `$form.Field`、`$user.Field`、
|
|
115
|
+
`$menu.Field`。小程序端不下载/执行任意 V8Code。
|
|
116
|
+
|
|
117
|
+
### List / Card 展示协议
|
|
118
|
+
|
|
119
|
+
| 配置路径 | 用途 | 核心字段 |
|
|
120
|
+
|---|---|---|
|
|
121
|
+
| `Layout.Hero` | 模块眉题、标题、说明、统计条 | `Eyebrow/Title/Description/Metrics` |
|
|
122
|
+
| `Hero.Metrics[]` | 内置、字段或接口引擎指标 | `Key/Label/Source/Field/ApiEngineKey/ValuePath/Prefix/Suffix/Icon/Tone/Color/RefreshSeconds` |
|
|
123
|
+
| `Layout.List.Columns[]` | PC 复合列 | `Field/Lines/TrailingFields/RequiredFields/Align/MinWidth` |
|
|
124
|
+
| `Layout.Card` | 移动端业务卡片 | `AvatarTextField/TitleField/TopFields/SubtitleFields/RightFields/Fields/MetaFields/BottomFields` |
|
|
125
|
+
|
|
126
|
+
字段引用对象支持 `Name/AsName/Label/ShowLabel/Icon/Tone/Color/Prefix/Suffix/
|
|
127
|
+
FontWeight/DisplayStyle`。运行时会把引用字段并入 `_SelectFields`;查询接口替换也必须
|
|
128
|
+
返回这些字段。多字段模板沿用对应 `diy_field.V8TmpEngineTable`,不在 ViewSchema 内保存
|
|
129
|
+
可执行脚本。
|
|
130
|
+
|
|
131
|
+
PC 复合列的常规高度上限是两行:`Field` 占主行,`Lines` 通常只放 1 项。多个信息组拆成
|
|
132
|
+
多个两行复合列;只有确有层级价值且完成桌面截图验收后,才允许在同一列放第 2 个
|
|
133
|
+
`Lines`。`TrailingFields` 位于右侧,不应被误用成增加纵向信息层级。
|
|
134
|
+
|
|
135
|
+
Hero 必须在 PageTabs 上方渲染。PC 无指标/含指标头部分别为 `44px / 62px`,连同间距的
|
|
136
|
+
总纵向占用约 `50px / 68px`。有指标时标题说明区占约 25%~30%,指标区弹性占满其余空间,
|
|
137
|
+
两区只用弱化渐变分隔;指标容器不加外框,单指标使用轻量语义色背景和图标色块,禁止
|
|
138
|
+
“外层框 + 指标条框 + 指标卡框”的多层线框。无指标时标题说明自动铺满。每个指标必须
|
|
139
|
+
显式配置 `Icon`,同一 Hero 内使用不同 `Tone` 或 `Color` 与不同图标,不能只靠数字区分。
|
|
140
|
+
只允许一次性入场与一次性轻量光效,禁止持续循环动画;
|
|
141
|
+
`prefers-reduced-motion: reduce` 下关闭动画和过渡。
|
|
142
|
+
|
|
143
|
+
`Hero.Metrics[].Source` 可直接配置 `DataCount`(当前筛选总记录数)或 `PageCount`(本页
|
|
144
|
+
加载数),两者复用列表结果且不请求接口。字段汇总使用 `Field`。动态指标接口按
|
|
145
|
+
`ApiEngineKey` 分组调用,参数包含 `MetricKeys`、当前模块/表、租户和筛选上下文;同一接口
|
|
146
|
+
应一次返回多个指标。`ValuePath` 例:`Data.UnpaidAmount`。
|
|
147
|
+
|
|
148
|
+
## 动态按钮位置
|
|
149
|
+
|
|
150
|
+
| 字段 | 位置 |
|
|
151
|
+
|---|---|
|
|
152
|
+
| `MoreBtns` | 行操作 |
|
|
153
|
+
| `FormBtns` | 表单底部 |
|
|
154
|
+
| `BatchSelectMoreBtns` | 批量勾选后 |
|
|
155
|
+
| `PageTabs` | 页面顶部 Tab,固定在模块 Hero 下方 |
|
|
156
|
+
| `PageBtns` | 页面级 |
|
|
157
|
+
| `ExportMoreBtns` | 导出扩展 |
|
|
158
|
+
|
|
159
|
+
按钮对象必须有稳定唯一 Id、Sort、Name、显隐逻辑和动作。后台任务按钮还要配置
|
|
160
|
+
ApiEngineKey、Workload、幂等字段、并发 Key、业务状态/任务 Id/进度/ETA 字段。
|
|
161
|
+
|
|
162
|
+
`PageTabs` 与五类按钮共用统计字段:`BadgeEnabled`、`BadgeApiEngineKey`、`BadgeValuePath`、`BadgeField`、
|
|
163
|
+
`BadgeTone`、`BadgeColor`、`BadgeMax`、`BadgeShowZero`、`BadgeRefreshSeconds`。接口一次接收当前页 `Ids` 与
|
|
164
|
+
`ButtonKeys`,推荐返回:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
{
|
|
168
|
+
"Code": 1,
|
|
169
|
+
"Data": {
|
|
170
|
+
"Buttons": { "button-id": 12 },
|
|
171
|
+
"Rows": { "row-id": { "button-id": 2 } }
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
行按钮的 `BadgeField` 直接读取当前行已有字段;PageTabs/页面按钮的 `BadgeField` 读取模块 `StatisticsFields` 页面汇总值,必须同时配置“统计列”。字段模式不调用接口;其它行统计必须批量聚合,禁止 N+1。
|
|
177
|
+
|
|
178
|
+
## 接口替换
|
|
179
|
+
|
|
180
|
+
可替换查询、新增、更新、删除、导入、导入进度和导出接口。替换后仍要保持平台
|
|
181
|
+
返回契约、权限、分页、统计、错误码和租户隔离。
|
|
182
|
+
|
|
183
|
+
- 查询:返回 `Code/Data/DataCount`,不可丢失菜单权限。
|
|
184
|
+
- 导入:读取文件、校验、分片写入、真实进度、幂等恢复。
|
|
185
|
+
- 导出:大数据使用后台任务/流式文件,不在请求内无界物化。
|
|
186
|
+
- 所有路径变量只能使用平台明确支持的占位符,不拼接 Token。
|
|
187
|
+
|
|
188
|
+
## PageTabs 两种模式
|
|
189
|
+
|
|
190
|
+
- 无目标菜单:在当前模块执行 V8,通常 `V8.SearchSet(...)`。
|
|
191
|
+
- 有 `TargetSysMenuId`:在当前 `diy-table` 实例内加载目标模块的菜单、表、字段和列表数据。目标菜单即使隐藏导航,也必须给角色权限。
|
|
192
|
+
|
|
193
|
+
PageTabs 可以通过 `BadgeApiEngineKey` 显示数字角标。接口按 `ButtonKeys` 一次返回所有 Tab 数量到 `Data.Buttons`,`BadgeValuePath` 可显式指定 `Data.Buttons.{TabId}`;失败只隐藏角标,不能阻断页签切换。
|
|
194
|
+
|
|
195
|
+
PageTabs 只表达当前模块的数据类别/状态,不能取代模块 Hero,也不能渲染到 Hero 上方。
|
|
196
|
+
|
|
197
|
+
跨表 Tab 由入口模块统一配置一组 PageTabs,目标菜单只保留各自的模块设计、表绑定和角色权限,不复制 PageTabs。隐藏目标菜单统一设置 `ParentId=入口菜单Id、Display=0、AppDisplay=0、HasChild=0、PageTabs=[]`,入口菜单继续保持 `HasChild=0` 作为可直接点击的业务入口。模块设计器用【关联模块】可搜索菜单树展示名称、保存 `TargetSysMenuId`。切换只更新当前 URL 的 `Tab` 查询参数;路由、面包屑、顶部访问标签和入口模块 Hero 保持稳定,表格上下文在原实例中切换。实现时必须取消旧请求、丢弃迟到响应并在失败时回滚,禁止按菜单名或业务表名写死。
|
|
198
|
+
|
|
199
|
+
首屏和跨模块切换应为 Hero 标题/统计、PageTabs、工具栏和列表提供与最终几何尺寸一致的主题化骨架屏;根据模块元数据判断是否预留指标区和 PageTabs,并支持 `prefers-reduced-motion: reduce`。
|
|
200
|
+
|
|
201
|
+
## URL 参数
|
|
202
|
+
|
|
203
|
+
兼容参数包括 `ShowClassicTop`、`ShowClassicLeft`、`FormDataId`。它们只控制
|
|
204
|
+
界面/默认打开记录,不建立授权;记录仍须通过当前菜单和数据权限校验。
|