@microi.net/cli 6.1.1 → 6.1.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 +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server.js +108 -106
- package/scripts/microi-skills.meta.json +294 -294
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +13 -13
- package/skills/ai-engine/references/ai-employees.md +48 -48
- package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +93 -93
- package/skills/dos-orm/SKILL.md +105 -105
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +81 -81
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +176 -176
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi/SKILL.md +14 -14
- package/skills/microi-ai-application/SKILL.md +115 -115
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +10 -10
- 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 +10 -10
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +10 -10
- package/skills/microi-codex/SKILL.md +130 -130
- package/skills/microi-datasource-mapping/SKILL.md +131 -131
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/SKILL.md +260 -260
- package/skills/microi-deployment/references/deployment-matrix.md +112 -109
- package/skills/microi-docs-coverage/SKILL.md +133 -133
- package/skills/microi-docs-coverage/references/capability-map.md +91 -91
- package/skills/microi-form-engine/SKILL.md +338 -338
- package/skills/microi-form-engine/references/component-catalog.md +218 -218
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +354 -353
- package/skills/microi-microservice/references/runtime-delivery.md +282 -282
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-sso/SKILL.md +102 -102
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +43 -43
- package/skills/microi-system-delivery/references/context-quality.md +3 -3
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +11 -11
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +12 -12
- package/skills/microi-system-delivery/references/progressive-03-/345/256/211/345/205/250/344/270/216/350/267/250/347/253/257/351/252/214/346/224/266.md +8 -8
- package/skills/microi-uniapp-frontend/SKILL.md +4 -1
- package/skills/module-engine/SKILL.md +297 -297
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- 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 +10 -10
- 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 +12 -12
- package/skills/performance-testing/SKILL.md +227 -227
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +83 -83
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +264 -264
- package/skills/system-observability/references/memory-incident-triage.md +77 -77
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/motion-and-media.md +78 -78
- package/skills/ui-design/references/product-flow-recipes.md +94 -94
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +178 -178
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-api-config/SKILL.md +3 -0
- package/skills/v8-cache-pattern/SKILL.md +320 -320
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-file-upload/references/cdn-alias-repair.md +13 -13
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-mongodb/SKILL.md +201 -201
- package/skills/v8-mq-mqtt/references/mqtt-production.md +352 -352
- package/skills/v8-saas-multi-tenant/SKILL.md +315 -309
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-workflow/references/workflow-configuration.md +49 -49
- package/skills/vision-engine/SKILL.md +160 -160
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +174 -168
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +34 -34
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +6 -6
|
@@ -1,167 +1,167 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: v8-template-engine
|
|
3
|
-
description: Microi V8 模板引擎指南。用于编写表格/表单模板渲染、V8.Result HTML/text 输出、行格式化、徽章、图片和自定义显示逻辑。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
|
-
|
|
8
|
-
# Microi V8 模板引擎(表格/表单 V8 模板)
|
|
9
|
-
|
|
10
|
-
你正在为 Microi 吾码平台编写 **表格 V8 模板引擎**、**表单 V8 模板引擎** 代码。模板引擎用于在数据渲染后自定义最终展示效果(颜色、徽章、图片、HTML),是表单引擎的高级特性。
|
|
11
|
-
|
|
12
|
-
## 核心规则
|
|
13
|
-
|
|
14
|
-
- 模板引擎绑定在【表单属性】的【表格 V8 模板引擎】或【表单 V8 模板引擎】
|
|
15
|
-
- 通过给 `V8.Result` 赋值字符串(HTML 或纯文本)来控制最终渲染结果
|
|
16
|
-
- 在 **表格模板** 中:每行数据都会执行一次,`V8.Form` 是当前行数据
|
|
17
|
-
- 注意:`V8.Form` 此时只能访问到【模块引擎】配置的【查询列】字段;若查询列为空则可访问全部字段
|
|
18
|
-
- 支持 `bootstrap`、`element-ui` 样式类名
|
|
19
|
-
- `V8.EventName` 可能为 `TableTemplateEngine` 或 `FormTemplateEngine`
|
|
20
|
-
- 表格模板同步执行,输出优先级是 `V8.Result` → JavaScript `return` → 原字段值;表单模板异步执行并以 `V8.Result` 为输出
|
|
21
|
-
- 模板结果通过 `v-safe-html`/DOMPurify 净化。`script`、`iframe`、`on*` 事件属性、`javascript:` 等危险内容会被剥离,禁止依赖内联点击事件
|
|
22
|
-
- 业务文本必须 HTML 转义后再拼接;权限、校验、状态写入等业务逻辑必须放后端
|
|
23
|
-
|
|
24
|
-
模板中需要拼 HTML 时,先定义安全转义函数:
|
|
25
|
-
|
|
26
|
-
```javascript
|
|
27
|
-
var escapeHtml = function (value) {
|
|
28
|
-
return String(value == null ? '' : value)
|
|
29
|
-
.replace(/&/g, '&')
|
|
30
|
-
.replace(/</g, '<')
|
|
31
|
-
.replace(/>/g, '>')
|
|
32
|
-
.replace(/"/g, '"')
|
|
33
|
-
.replace(/'/g, ''');
|
|
34
|
-
};
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
## 状态徽章(Bootstrap 样式)
|
|
38
|
-
|
|
39
|
-
```javascript
|
|
40
|
-
var value = V8.Form.Zhuangtai;
|
|
41
|
-
if (V8.IsNull(value)) {
|
|
42
|
-
V8.Result = '';
|
|
43
|
-
} else {
|
|
44
|
-
var classStr = 'badge-primary';
|
|
45
|
-
if (value === '禁用') classStr = 'badge-danger';
|
|
46
|
-
else if (value === '未通过') classStr = 'badge-warning';
|
|
47
|
-
else if (value === '待审核') classStr = 'badge-info';
|
|
48
|
-
else if (value === '通过') classStr = 'badge-success';
|
|
49
|
-
V8.Result = '<span class="badge badge-pill ' + classStr + '">' + escapeHtml(value) + '</span>';
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
可用 Bootstrap 徽章类:`badge-primary`, `badge-secondary`, `badge-success`, `badge-danger`, `badge-warning`, `badge-info`, `badge-light`, `badge-dark`
|
|
54
|
-
|
|
55
|
-
## 内联样式(颜色高亮)
|
|
56
|
-
|
|
57
|
-
```javascript
|
|
58
|
-
// 不同业务状态显示不同字体颜色
|
|
59
|
-
if (V8.Form.XuqiuLX === '合并') {
|
|
60
|
-
V8.Result = '<span style="color:blue;">' + escapeHtml(V8.Form.XuqiuDDH) + '</span>';
|
|
61
|
-
} else if (V8.Form.HebingID) {
|
|
62
|
-
V8.Result = '<span style="color:#999;">' + escapeHtml(V8.Form.XuqiuDDH) + '</span>';
|
|
63
|
-
} else {
|
|
64
|
-
V8.Result = escapeHtml(V8.Form.XuqiuDDH);
|
|
65
|
-
}
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
## 单图列渲染
|
|
69
|
-
|
|
70
|
-
```javascript
|
|
71
|
-
var html = '';
|
|
72
|
-
var fileServer = V8.SysConfig.FileServer;
|
|
73
|
-
if (!V8.IsNull(V8.Form.GongsiLOGO)) {
|
|
74
|
-
html = '<img src="' + escapeHtml(fileServer + V8.Form.GongsiLOGO) + '" '
|
|
75
|
-
+ 'alt="公司Logo" '
|
|
76
|
-
+ 'style="height:40px;width:40px;object-fit:cover;margin:5px 0;" />';
|
|
77
|
-
}
|
|
78
|
-
V8.Result = html;
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## 多图列渲染(带点击放大)
|
|
82
|
-
|
|
83
|
-
```javascript
|
|
84
|
-
var html = '';
|
|
85
|
-
var fileServer = V8.SysConfig.FileServer;
|
|
86
|
-
if (!V8.IsNull(V8.Form.TupianMS) && V8.Form.TupianMS.indexOf('[') !== -1) {
|
|
87
|
-
var imgs = JSON.parse(V8.Form.TupianMS);
|
|
88
|
-
imgs.forEach(function(item) {
|
|
89
|
-
var url = escapeHtml(fileServer + item.Path);
|
|
90
|
-
html += '<a href="' + url + '" target="_blank" rel="noopener noreferrer">'
|
|
91
|
-
+ '<img src="' + url + '" alt="图片" '
|
|
92
|
-
+ 'style="width:40px;height:40px;object-fit:cover;margin:5px 5px 5px 0;" />'
|
|
93
|
-
+ '</a>';
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
V8.Result = html;
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
## 进度条渲染
|
|
100
|
-
|
|
101
|
-
```javascript
|
|
102
|
-
var percent = V8.Form.Progress || 0;
|
|
103
|
-
var color = '#67C23A';
|
|
104
|
-
if (percent < 30) color = '#F56C6C';
|
|
105
|
-
else if (percent < 70) color = '#E6A23C';
|
|
106
|
-
|
|
107
|
-
V8.Result =
|
|
108
|
-
'<div style="width:100%;background:#eee;border-radius:4px;height:16px;position:relative;">'
|
|
109
|
-
+ '<div style="width:' + percent + '%;background:' + color + ';height:100%;border-radius:4px;"></div>'
|
|
110
|
-
+ '<span style="position:absolute;left:50%;top:0;transform:translateX(-50%);color:#333;font-size:12px;line-height:16px;">' + percent + '%</span>'
|
|
111
|
-
+ '</div>';
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## 多字段合并显示
|
|
115
|
-
|
|
116
|
-
```javascript
|
|
117
|
-
// 联系人姓名 + 电话脱敏
|
|
118
|
-
var name = V8.Form.LianxiR || '';
|
|
119
|
-
var phone = V8.Form.LianxiPhone || '';
|
|
120
|
-
if (phone.length === 11) phone = phone.substring(0, 3) + '****' + phone.substring(7);
|
|
121
|
-
V8.Result = '<div><b>' + escapeHtml(name) + '</b><br/><small style="color:#999;">'
|
|
122
|
-
+ escapeHtml(phone) + '</small></div>';
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
模块引擎已有更轻量的声明式方案:`ViewSchema.Layout.List.Columns` 可用 `Field + Lines +
|
|
126
|
-
TrailingFields` 组成多行列,`Layout.Card` 可配置移动端顶部、右侧、正文、元信息和底部字段。
|
|
127
|
-
仅需要多字段排版、图标、`Tone/Color/Prefix/Suffix` 时优先使用声明式配置;需要复杂条件
|
|
128
|
-
HTML 时再给被引用的 `diy_field` 配置 `V8TmpEngineTable`。两种方式都会复用净化后的模板
|
|
129
|
-
结果,且所有引用字段仍必须在模块查询列或 `_SelectFields` 中。
|
|
130
|
-
|
|
131
|
-
## 条件性图标
|
|
132
|
-
|
|
133
|
-
```javascript
|
|
134
|
-
var html = escapeHtml(V8.Form.Title || '');
|
|
135
|
-
if (V8.Form.IsHot === 1) html += ' <i class="fas fa-fire" style="color:#F56C6C;"></i>';
|
|
136
|
-
if (V8.Form.IsNew === 1) html += ' <span class="badge badge-danger">NEW</span>';
|
|
137
|
-
V8.Result = html;
|
|
138
|
-
```
|
|
139
|
-
|
|
140
|
-
## 与字段值变更事件配合(动态计算)
|
|
141
|
-
|
|
142
|
-
```javascript
|
|
143
|
-
// 表格模板中根据多个字段计算
|
|
144
|
-
var price = parseFloat(V8.Form.Price) || 0;
|
|
145
|
-
var discount = parseFloat(V8.Form.Discount) || 1;
|
|
146
|
-
var total = (price * discount).toFixed(2);
|
|
147
|
-
var color = total > 1000 ? '#F56C6C' : '#67C23A';
|
|
148
|
-
V8.Result = '<span style="color:' + color + ';font-weight:bold;">¥' + total + '</span>';
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## 常见错误
|
|
152
|
-
|
|
153
|
-
❌ 不要在模板中调用 `V8.FormEngine`(每行都查 → N+1 性能问题);需要关联数据时在查询列、接口引擎或后端 `DataFilterV8` 预取,只有 `DataFilterV8` 才提供 `V8.CacheData`
|
|
154
|
-
❌ 不要依赖对象/数组的隐式字符串化;`V8.Result` 建议显式输出字符串
|
|
155
|
-
❌ 模板中 `V8.Form` 默认只有【查询列】字段;缺字段就要去模块引擎补查询列
|
|
156
|
-
❌ 不要在模板里写复杂业务逻辑(应放到接口引擎或 DataFilterV8)
|
|
157
|
-
❌ 不要输出 `onclick/onerror`、`script/iframe` 或 `javascript:` URL;DOMPurify 会剥离这些内容
|
|
158
|
-
|
|
159
|
-
## 与 DataFilterV8 的区别
|
|
160
|
-
|
|
161
|
-
| | DataFilterV8(后端) | 模板引擎(前端) |
|
|
162
|
-
|---|---|---|
|
|
163
|
-
| 运行端 | 服务器 | 浏览器 |
|
|
164
|
-
| 用途 | 加工数据、脱敏、补字段 | 渲染 HTML 样式 |
|
|
165
|
-
| 输出 | `V8.Form.字段 = ...` | `V8.Result = '<html>...</html>'` |
|
|
166
|
-
| 字段范围 | 全部数据 | 仅查询列 |
|
|
167
|
-
| 性能 | 每行执行(可用 `V8.CacheData`) | 浏览器渲染时执行 |
|
|
1
|
+
---
|
|
2
|
+
name: v8-template-engine
|
|
3
|
+
description: Microi V8 模板引擎指南。用于编写表格/表单模板渲染、V8.Result HTML/text 输出、行格式化、徽章、图片和自定义显示逻辑。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
|
+
|
|
8
|
+
# Microi V8 模板引擎(表格/表单 V8 模板)
|
|
9
|
+
|
|
10
|
+
你正在为 Microi 吾码平台编写 **表格 V8 模板引擎**、**表单 V8 模板引擎** 代码。模板引擎用于在数据渲染后自定义最终展示效果(颜色、徽章、图片、HTML),是表单引擎的高级特性。
|
|
11
|
+
|
|
12
|
+
## 核心规则
|
|
13
|
+
|
|
14
|
+
- 模板引擎绑定在【表单属性】的【表格 V8 模板引擎】或【表单 V8 模板引擎】
|
|
15
|
+
- 通过给 `V8.Result` 赋值字符串(HTML 或纯文本)来控制最终渲染结果
|
|
16
|
+
- 在 **表格模板** 中:每行数据都会执行一次,`V8.Form` 是当前行数据
|
|
17
|
+
- 注意:`V8.Form` 此时只能访问到【模块引擎】配置的【查询列】字段;若查询列为空则可访问全部字段
|
|
18
|
+
- 支持 `bootstrap`、`element-ui` 样式类名
|
|
19
|
+
- `V8.EventName` 可能为 `TableTemplateEngine` 或 `FormTemplateEngine`
|
|
20
|
+
- 表格模板同步执行,输出优先级是 `V8.Result` → JavaScript `return` → 原字段值;表单模板异步执行并以 `V8.Result` 为输出
|
|
21
|
+
- 模板结果通过 `v-safe-html`/DOMPurify 净化。`script`、`iframe`、`on*` 事件属性、`javascript:` 等危险内容会被剥离,禁止依赖内联点击事件
|
|
22
|
+
- 业务文本必须 HTML 转义后再拼接;权限、校验、状态写入等业务逻辑必须放后端
|
|
23
|
+
|
|
24
|
+
模板中需要拼 HTML 时,先定义安全转义函数:
|
|
25
|
+
|
|
26
|
+
```javascript
|
|
27
|
+
var escapeHtml = function (value) {
|
|
28
|
+
return String(value == null ? '' : value)
|
|
29
|
+
.replace(/&/g, '&')
|
|
30
|
+
.replace(/</g, '<')
|
|
31
|
+
.replace(/>/g, '>')
|
|
32
|
+
.replace(/"/g, '"')
|
|
33
|
+
.replace(/'/g, ''');
|
|
34
|
+
};
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 状态徽章(Bootstrap 样式)
|
|
38
|
+
|
|
39
|
+
```javascript
|
|
40
|
+
var value = V8.Form.Zhuangtai;
|
|
41
|
+
if (V8.IsNull(value)) {
|
|
42
|
+
V8.Result = '';
|
|
43
|
+
} else {
|
|
44
|
+
var classStr = 'badge-primary';
|
|
45
|
+
if (value === '禁用') classStr = 'badge-danger';
|
|
46
|
+
else if (value === '未通过') classStr = 'badge-warning';
|
|
47
|
+
else if (value === '待审核') classStr = 'badge-info';
|
|
48
|
+
else if (value === '通过') classStr = 'badge-success';
|
|
49
|
+
V8.Result = '<span class="badge badge-pill ' + classStr + '">' + escapeHtml(value) + '</span>';
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
可用 Bootstrap 徽章类:`badge-primary`, `badge-secondary`, `badge-success`, `badge-danger`, `badge-warning`, `badge-info`, `badge-light`, `badge-dark`
|
|
54
|
+
|
|
55
|
+
## 内联样式(颜色高亮)
|
|
56
|
+
|
|
57
|
+
```javascript
|
|
58
|
+
// 不同业务状态显示不同字体颜色
|
|
59
|
+
if (V8.Form.XuqiuLX === '合并') {
|
|
60
|
+
V8.Result = '<span style="color:blue;">' + escapeHtml(V8.Form.XuqiuDDH) + '</span>';
|
|
61
|
+
} else if (V8.Form.HebingID) {
|
|
62
|
+
V8.Result = '<span style="color:#999;">' + escapeHtml(V8.Form.XuqiuDDH) + '</span>';
|
|
63
|
+
} else {
|
|
64
|
+
V8.Result = escapeHtml(V8.Form.XuqiuDDH);
|
|
65
|
+
}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## 单图列渲染
|
|
69
|
+
|
|
70
|
+
```javascript
|
|
71
|
+
var html = '';
|
|
72
|
+
var fileServer = V8.SysConfig.FileServer;
|
|
73
|
+
if (!V8.IsNull(V8.Form.GongsiLOGO)) {
|
|
74
|
+
html = '<img src="' + escapeHtml(fileServer + V8.Form.GongsiLOGO) + '" '
|
|
75
|
+
+ 'alt="公司Logo" '
|
|
76
|
+
+ 'style="height:40px;width:40px;object-fit:cover;margin:5px 0;" />';
|
|
77
|
+
}
|
|
78
|
+
V8.Result = html;
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## 多图列渲染(带点击放大)
|
|
82
|
+
|
|
83
|
+
```javascript
|
|
84
|
+
var html = '';
|
|
85
|
+
var fileServer = V8.SysConfig.FileServer;
|
|
86
|
+
if (!V8.IsNull(V8.Form.TupianMS) && V8.Form.TupianMS.indexOf('[') !== -1) {
|
|
87
|
+
var imgs = JSON.parse(V8.Form.TupianMS);
|
|
88
|
+
imgs.forEach(function(item) {
|
|
89
|
+
var url = escapeHtml(fileServer + item.Path);
|
|
90
|
+
html += '<a href="' + url + '" target="_blank" rel="noopener noreferrer">'
|
|
91
|
+
+ '<img src="' + url + '" alt="图片" '
|
|
92
|
+
+ 'style="width:40px;height:40px;object-fit:cover;margin:5px 5px 5px 0;" />'
|
|
93
|
+
+ '</a>';
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
V8.Result = html;
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## 进度条渲染
|
|
100
|
+
|
|
101
|
+
```javascript
|
|
102
|
+
var percent = V8.Form.Progress || 0;
|
|
103
|
+
var color = '#67C23A';
|
|
104
|
+
if (percent < 30) color = '#F56C6C';
|
|
105
|
+
else if (percent < 70) color = '#E6A23C';
|
|
106
|
+
|
|
107
|
+
V8.Result =
|
|
108
|
+
'<div style="width:100%;background:#eee;border-radius:4px;height:16px;position:relative;">'
|
|
109
|
+
+ '<div style="width:' + percent + '%;background:' + color + ';height:100%;border-radius:4px;"></div>'
|
|
110
|
+
+ '<span style="position:absolute;left:50%;top:0;transform:translateX(-50%);color:#333;font-size:12px;line-height:16px;">' + percent + '%</span>'
|
|
111
|
+
+ '</div>';
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## 多字段合并显示
|
|
115
|
+
|
|
116
|
+
```javascript
|
|
117
|
+
// 联系人姓名 + 电话脱敏
|
|
118
|
+
var name = V8.Form.LianxiR || '';
|
|
119
|
+
var phone = V8.Form.LianxiPhone || '';
|
|
120
|
+
if (phone.length === 11) phone = phone.substring(0, 3) + '****' + phone.substring(7);
|
|
121
|
+
V8.Result = '<div><b>' + escapeHtml(name) + '</b><br/><small style="color:#999;">'
|
|
122
|
+
+ escapeHtml(phone) + '</small></div>';
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
模块引擎已有更轻量的声明式方案:`ViewSchema.Layout.List.Columns` 可用 `Field + Lines +
|
|
126
|
+
TrailingFields` 组成多行列,`Layout.Card` 可配置移动端顶部、右侧、正文、元信息和底部字段。
|
|
127
|
+
仅需要多字段排版、图标、`Tone/Color/Prefix/Suffix` 时优先使用声明式配置;需要复杂条件
|
|
128
|
+
HTML 时再给被引用的 `diy_field` 配置 `V8TmpEngineTable`。两种方式都会复用净化后的模板
|
|
129
|
+
结果,且所有引用字段仍必须在模块查询列或 `_SelectFields` 中。
|
|
130
|
+
|
|
131
|
+
## 条件性图标
|
|
132
|
+
|
|
133
|
+
```javascript
|
|
134
|
+
var html = escapeHtml(V8.Form.Title || '');
|
|
135
|
+
if (V8.Form.IsHot === 1) html += ' <i class="fas fa-fire" style="color:#F56C6C;"></i>';
|
|
136
|
+
if (V8.Form.IsNew === 1) html += ' <span class="badge badge-danger">NEW</span>';
|
|
137
|
+
V8.Result = html;
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## 与字段值变更事件配合(动态计算)
|
|
141
|
+
|
|
142
|
+
```javascript
|
|
143
|
+
// 表格模板中根据多个字段计算
|
|
144
|
+
var price = parseFloat(V8.Form.Price) || 0;
|
|
145
|
+
var discount = parseFloat(V8.Form.Discount) || 1;
|
|
146
|
+
var total = (price * discount).toFixed(2);
|
|
147
|
+
var color = total > 1000 ? '#F56C6C' : '#67C23A';
|
|
148
|
+
V8.Result = '<span style="color:' + color + ';font-weight:bold;">¥' + total + '</span>';
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## 常见错误
|
|
152
|
+
|
|
153
|
+
❌ 不要在模板中调用 `V8.FormEngine`(每行都查 → N+1 性能问题);需要关联数据时在查询列、接口引擎或后端 `DataFilterV8` 预取,只有 `DataFilterV8` 才提供 `V8.CacheData`
|
|
154
|
+
❌ 不要依赖对象/数组的隐式字符串化;`V8.Result` 建议显式输出字符串
|
|
155
|
+
❌ 模板中 `V8.Form` 默认只有【查询列】字段;缺字段就要去模块引擎补查询列
|
|
156
|
+
❌ 不要在模板里写复杂业务逻辑(应放到接口引擎或 DataFilterV8)
|
|
157
|
+
❌ 不要输出 `onclick/onerror`、`script/iframe` 或 `javascript:` URL;DOMPurify 会剥离这些内容
|
|
158
|
+
|
|
159
|
+
## 与 DataFilterV8 的区别
|
|
160
|
+
|
|
161
|
+
| | DataFilterV8(后端) | 模板引擎(前端) |
|
|
162
|
+
|---|---|---|
|
|
163
|
+
| 运行端 | 服务器 | 浏览器 |
|
|
164
|
+
| 用途 | 加工数据、脱敏、补字段 | 渲染 HTML 样式 |
|
|
165
|
+
| 输出 | `V8.Form.字段 = ...` | `V8.Result = '<html>...</html>'` |
|
|
166
|
+
| 字段范围 | 全部数据 | 仅查询列 |
|
|
167
|
+
| 性能 | 每行执行(可用 `V8.CacheData`) | 浏览器渲染时执行 |
|
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
# 前端 V8 API 索引
|
|
2
|
-
|
|
3
|
-
本索引对应 `microi.doc/docs/doc/v8-engine/v8-client.md` 和当前
|
|
4
|
-
`Microi.Client` V8 定义。业务表字段如 `V8.Form.OrderNo` 不属于平台函数,
|
|
5
|
-
应按实际表结构理解。
|
|
6
|
-
|
|
7
|
-
## 上下文与状态
|
|
8
|
-
|
|
9
|
-
| API/变量 | 说明 |
|
|
10
|
-
|---|---|
|
|
11
|
-
| `V8.Form`、`V8.OldForm` | 当前表单与已加载旧值 |
|
|
12
|
-
| `V8.FormMode` | `Add`、`Edit`、`View` |
|
|
13
|
-
| `V8.FormSubmitAction` | 提交动作 |
|
|
14
|
-
| `V8.FormOutAction`、`V8.FormOutAfterAction` | 表单关闭/保存后的动作状态 |
|
|
15
|
-
| `V8.LoadMode` | `Design` 或真实运行模式 |
|
|
16
|
-
| `V8.EventName`、`V8.Event`、`V8.KeyCode` | 当前事件、原生事件和键码 |
|
|
17
|
-
| `V8.ThisValue`、`V8.OldValue` | 当前字段值;`OldValue` 主要用于表格行内事件 |
|
|
18
|
-
| `V8.TableId`、`V8.TableName`、`V8.TableModel` | 当前表/表单元数据 |
|
|
19
|
-
| `V8.Row`、`V8.Rows`、`V8.RowIndex`、`V8.TableRowId` | 行事件上下文 |
|
|
20
|
-
| `V8.TableRowSelected`、`V8.SelectedData` | 批量选中行,兼容别名 |
|
|
21
|
-
| `V8.CurrentTableData` | 当前页表格数据 |
|
|
22
|
-
| `V8.SearchParam` | 当前搜索快照 |
|
|
23
|
-
| `V8.SysMenuId`、`V8.SysMenuModel` | 当前授权菜单 |
|
|
24
|
-
| `V8.CurrentUser`、`V8.CurrentToken` | 当前用户和 Token;不得输出到日志/URL |
|
|
25
|
-
| `V8.OsClient`、`V8.SysConfig`、`V8.ClientType` | 租户、客户端配置和终端类型 |
|
|
26
|
-
| `V8.DataAppend` | 打开表单、列表或弹窗时传入的附加数据 |
|
|
27
|
-
| `V8.ParentV8`、`V8.ParentForm` | 子表/弹窗访问父上下文 |
|
|
28
|
-
| `V8.ParentV8.Form` | 读取父级表单数据 |
|
|
29
|
-
| `V8.ParentV8.FormSet(field,value)` | 从子表调用父表字段赋值与联动 |
|
|
30
|
-
| `V8.ApiReplace` | 当前表单/列表接口替换配置,只读使用 |
|
|
31
|
-
| `V8.Result` | 模板或事件输出槽 |
|
|
32
|
-
|
|
33
|
-
## 表单与字段
|
|
34
|
-
|
|
35
|
-
| API | 说明 |
|
|
36
|
-
|---|---|
|
|
37
|
-
| `V8.FormSet(field,value)` | 设置字段值并触发相应联动 |
|
|
38
|
-
| `V8.Field` | 当前字段模型集合 |
|
|
39
|
-
| `V8.FieldSet(field,prop,value)` | 修改 `Visible/Required/Readonly/Data` 等属性 |
|
|
40
|
-
| `V8.FormSubmit(options)` | 提交表单;SubmitFormV8 内不得再次调用 |
|
|
41
|
-
| `V8.FormClose()` | 强制关闭表单 |
|
|
42
|
-
| `V8.CloseThisDialog()` | 关闭当前宿主弹窗/微应用弹窗 |
|
|
43
|
-
| `V8.ReloadForm()` | 重新加载当前表单 |
|
|
44
|
-
| `V8.HideFormBtn(...)` | 隐藏表单按钮 |
|
|
45
|
-
| `V8.HideFormTab(name)`、`V8.ShowFormTab(name)`、`V8.ClickFormTab(name)` | 页签显隐与切换 |
|
|
46
|
-
| `V8.GetFormTabs()` | 获取当前表单页签 |
|
|
47
|
-
| `V8.ShowTableChildHideField(child,fields)` | 强制显示子表隐藏列并刷新 |
|
|
48
|
-
| `V8.GetChildTableData(fieldName)` | 获取指定子表数据 |
|
|
49
|
-
| `V8.RefreshChildTable(field,row?)` | 刷新子表 |
|
|
50
|
-
|
|
51
|
-
## 列表与搜索
|
|
52
|
-
|
|
53
|
-
| API | 说明 |
|
|
54
|
-
|---|---|
|
|
55
|
-
| `V8.RefreshTable({_PageIndex})` | 刷新当前列表 |
|
|
56
|
-
| `V8.SearchSet(value)` | 替换当前模块搜索条件 |
|
|
57
|
-
| `V8.SearchAppend(value)` | 追加当前模块搜索条件 |
|
|
58
|
-
| `V8.OpenTableSetWhere(field,where)` | 设置弹出表格不可被临时搜索覆盖的固定范围 |
|
|
59
|
-
| `V8.AppendSearchChildTable(field,value)` | 历史兼容;新代码优先 `OpenTableSetWhere` |
|
|
60
|
-
| `V8.TableSearchSet(field,value)` | 替换指定子表/表格搜索 |
|
|
61
|
-
| `V8.TableSearchAppend(field,value)` | 追加指定子表/表格搜索 |
|
|
62
|
-
| `V8.TableRefresh(field,param)` | 刷新指定子表/表格 |
|
|
63
|
-
| `V8.ClearTableSelection()` | 清空当前列表勾选 |
|
|
64
|
-
|
|
65
|
-
## 交互与导航
|
|
66
|
-
|
|
67
|
-
| API | 说明 |
|
|
68
|
-
|---|---|
|
|
69
|
-
| `V8.Tips(msg,ok?)` | 消息提示 |
|
|
70
|
-
| `V8.ConfirmTips(content,callback,options?)` | HTML 模式确认框,只传可信/转义内容 |
|
|
71
|
-
| `V8.Router.Push(...)` | 站内路由 |
|
|
72
|
-
| `V8.Window.Open(...)` | 打开窗口 |
|
|
73
|
-
| `V8.OpenForm(...)`、`V8.OpenFormWF(...)` | 历史表单/工作流打开入口 |
|
|
74
|
-
| `V8.OpenAnyForm(options)` | 打开任意表单 |
|
|
75
|
-
| `V8.OpenAnyTable(options)` | 打开任意列表 |
|
|
76
|
-
| `V8.OpenDialog(options)` | 打开主前端已注册 Vue 组件 |
|
|
77
|
-
| `V8.OpenAppDialog(options)` | 打开已发布 MicroService 页面 |
|
|
78
|
-
| `V8.WF.StartWork(...)`、`V8.FormWF` | 前端工作流入口/当前工作流数据 |
|
|
79
|
-
|
|
80
|
-
三个以上输入、上传、表格、步骤条、Tab 或代码编辑器使用
|
|
81
|
-
`V8.OpenAppDialog`,不要在 V8 代码中拼大段 HTML。
|
|
82
|
-
|
|
83
|
-
## 网络与引擎
|
|
84
|
-
|
|
85
|
-
| API | 说明 |
|
|
86
|
-
|---|---|
|
|
87
|
-
| `V8.Http.Get(options)`、`V8.Http.Post(options)`、`V8.Http.PatchResponse(options)` | 推荐前端 HTTP Promise API |
|
|
88
|
-
| `V8.Post(...)`、`V8.Get(...)` | 历史回调 API,兼容保留 |
|
|
89
|
-
| `V8.ApiEngine.Run(...)` | 调用接口引擎,支持 Promise/回调 |
|
|
90
|
-
| `V8.ApiEngine.RunBackground(...)` | 提交持久后台任务 |
|
|
91
|
-
| `V8.DataSourceEngine` | 前端数据源引擎对象 |
|
|
92
|
-
| `V8.DataSourceEngine.Run(...)` | 运行数据源引擎;旧 `GetData` 已弃用 |
|
|
93
|
-
| `V8.FormEngine.GetTableData(...)` | 查询列表 |
|
|
94
|
-
| `V8.FormEngine.GetFormData(...)` | 查询单条 |
|
|
95
|
-
| `V8.FormEngine.DelFormData(...)` | 删除;权限仍由服务端校验 |
|
|
96
|
-
|
|
97
|
-
前端 `V8.FormEngine` 真实方法以当前客户端定义为准,均可按 Promise 使用;
|
|
98
|
-
不要给前端方法虚构后端专用的 `GetTableDataAsync` 名称。标准前端运行时没有公开
|
|
99
|
-
`V8.ModuleEngine`,模块关联查询使用接口引擎、数据源引擎或受控 FormEngine。
|
|
100
|
-
|
|
101
|
-
## 工具能力
|
|
102
|
-
|
|
103
|
-
| API | 说明 |
|
|
104
|
-
|---|---|
|
|
105
|
-
| `V8.IsNull(value)` | 兼容判断 `null/undefined/''/'null'/'undefined'` |
|
|
106
|
-
| `V8.ChineseToPinyin(text,fullPyLen,type)` | 中文转拼音 |
|
|
107
|
-
| `V8.NewGuid()` | 前端生成 GUID |
|
|
108
|
-
| `await V8.NewServerGuid()` | 请求服务端生成 GUID |
|
|
109
|
-
| `V8.Base64.encode(value)` | 前端 Base64 编码 |
|
|
110
|
-
| `V8.Base64.decode(value)` | 前端 Base64 解码 |
|
|
111
|
-
| `V8.Base64.isValid(value)` | 判断字符串是否为有效 Base64 |
|
|
112
|
-
| `V8._` | Underscore 实例,如 `V8._.where(...)` |
|
|
113
|
-
| `V8.Action.GetDateTimeNow()` | 兼容的前端全局时间函数 |
|
|
114
|
-
| `V8.AddSysLog(...)` | 前端发起系统日志记录;不得含秘密 |
|
|
115
|
-
| `V8.SendSystemMessage(...)` | 发送站内系统消息 |
|
|
116
|
-
| `await V8.Method.ScanCode()` | 扫码;成功值同时写入 `V8.ScanCodeRes` |
|
|
117
|
-
| `V8.Print.*` | TSPL/CPCL/ESC-POS 蓝牙标签与小票打印,兼容 GP-M322、CC4,见蓝牙打印参考 |
|
|
118
|
-
| `V8.Identity.GetCapabilities()` | 读取当前租户强身份能力和本人登记状态 |
|
|
119
|
-
| `V8.Identity.CreateActionHash(value)` | 为稳定业务命令生成 SHA-256 摘要 |
|
|
120
|
-
| `V8.Identity.RegisterPasskey(options?)` | 登记当前用户 Passkey |
|
|
121
|
-
| `V8.Identity.Verify({Purpose,ActionHash,Method,Code?})` | 完成 Passkey、Authenticator TOTP 或严格人脸验证并取得一次性后端票据;Totp 需 6 位 Code |
|
|
122
|
-
|
|
123
|
-
扫码应优先接收 Promise 返回值;兼容代码可在调用后读取 `V8.ScanCodeRes`。
|
|
124
|
-
`V8.Identity` 是强身份验证模块。`V8.Identity.Verify` 的成功结果不能直接授权业务;后端必须重读权威数据、重算摘要并调用 `V8.Method.ConsumeIdentityVerificationTicket`。
|
|
125
|
-
蓝牙打印完整 API 包含 `V8.Print.createNew`、`V8.Print.createNewESC`、
|
|
126
|
-
`V8.Print.OpenBluetoothPage`、`V8.Print.isConnected`、
|
|
127
|
-
`V8.Print.reconnect`、`V8.Print.getConnectionState`、`V8.Print.subscribeConnection`、
|
|
128
|
-
`V8.Print.getPrinterProfile`、`V8.Print.setPrinterProfile`、
|
|
129
|
-
`V8.Print.prepareSend`、`V8.Print.Send`、`V8.Print.setOneTimeData`、
|
|
130
|
-
`V8.Print.setPrinterNum`、`V8.Print.disconnect` 和
|
|
131
|
-
`V8.Print.BLEInformation`。其中 `Send` 依赖 `prepareSend` 设置的共享分包游标,
|
|
132
|
-
只作内部状态机入口;业务代码必须调用并 `await prepareSend`。当前挂载范围、连接
|
|
133
|
-
真实性、佳博原 TSPL 回归、CC4 CPCL 适配、Android SPP 与串行约束见
|
|
134
|
-
[`bluetooth-print.md`](../../v8-frontend-events/references/bluetooth-print.md),TSC/ESC
|
|
135
|
-
完整方法见
|
|
136
|
-
[`bluetooth-print-api.md`](../../v8-frontend-events/references/bluetooth-print-api.md)。
|
|
137
|
-
|
|
138
|
-
## 主前端源码帮助对象
|
|
139
|
-
|
|
140
|
-
`DiyCommon.GetApiBase()` 是 `Microi.Client` 主前端源码内部取得 API 根地址的帮助
|
|
141
|
-
方法,不属于租户前端 V8 的稳定公开对象。V8 代码优先使用受控 `V8.Http` 和
|
|
142
|
-
`V8.SysConfig.ApiBase`;MicroService 从宿主数据读取 `apiBase`,不要假设子应用
|
|
143
|
-
全局存在 `DiyCommon`。
|
|
1
|
+
# 前端 V8 API 索引
|
|
2
|
+
|
|
3
|
+
本索引对应 `microi.doc/docs/doc/v8-engine/v8-client.md` 和当前
|
|
4
|
+
`Microi.Client` V8 定义。业务表字段如 `V8.Form.OrderNo` 不属于平台函数,
|
|
5
|
+
应按实际表结构理解。
|
|
6
|
+
|
|
7
|
+
## 上下文与状态
|
|
8
|
+
|
|
9
|
+
| API/变量 | 说明 |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `V8.Form`、`V8.OldForm` | 当前表单与已加载旧值 |
|
|
12
|
+
| `V8.FormMode` | `Add`、`Edit`、`View` |
|
|
13
|
+
| `V8.FormSubmitAction` | 提交动作 |
|
|
14
|
+
| `V8.FormOutAction`、`V8.FormOutAfterAction` | 表单关闭/保存后的动作状态 |
|
|
15
|
+
| `V8.LoadMode` | `Design` 或真实运行模式 |
|
|
16
|
+
| `V8.EventName`、`V8.Event`、`V8.KeyCode` | 当前事件、原生事件和键码 |
|
|
17
|
+
| `V8.ThisValue`、`V8.OldValue` | 当前字段值;`OldValue` 主要用于表格行内事件 |
|
|
18
|
+
| `V8.TableId`、`V8.TableName`、`V8.TableModel` | 当前表/表单元数据 |
|
|
19
|
+
| `V8.Row`、`V8.Rows`、`V8.RowIndex`、`V8.TableRowId` | 行事件上下文 |
|
|
20
|
+
| `V8.TableRowSelected`、`V8.SelectedData` | 批量选中行,兼容别名 |
|
|
21
|
+
| `V8.CurrentTableData` | 当前页表格数据 |
|
|
22
|
+
| `V8.SearchParam` | 当前搜索快照 |
|
|
23
|
+
| `V8.SysMenuId`、`V8.SysMenuModel` | 当前授权菜单 |
|
|
24
|
+
| `V8.CurrentUser`、`V8.CurrentToken` | 当前用户和 Token;不得输出到日志/URL |
|
|
25
|
+
| `V8.OsClient`、`V8.SysConfig`、`V8.ClientType` | 租户、客户端配置和终端类型 |
|
|
26
|
+
| `V8.DataAppend` | 打开表单、列表或弹窗时传入的附加数据 |
|
|
27
|
+
| `V8.ParentV8`、`V8.ParentForm` | 子表/弹窗访问父上下文 |
|
|
28
|
+
| `V8.ParentV8.Form` | 读取父级表单数据 |
|
|
29
|
+
| `V8.ParentV8.FormSet(field,value)` | 从子表调用父表字段赋值与联动 |
|
|
30
|
+
| `V8.ApiReplace` | 当前表单/列表接口替换配置,只读使用 |
|
|
31
|
+
| `V8.Result` | 模板或事件输出槽 |
|
|
32
|
+
|
|
33
|
+
## 表单与字段
|
|
34
|
+
|
|
35
|
+
| API | 说明 |
|
|
36
|
+
|---|---|
|
|
37
|
+
| `V8.FormSet(field,value)` | 设置字段值并触发相应联动 |
|
|
38
|
+
| `V8.Field` | 当前字段模型集合 |
|
|
39
|
+
| `V8.FieldSet(field,prop,value)` | 修改 `Visible/Required/Readonly/Data` 等属性 |
|
|
40
|
+
| `V8.FormSubmit(options)` | 提交表单;SubmitFormV8 内不得再次调用 |
|
|
41
|
+
| `V8.FormClose()` | 强制关闭表单 |
|
|
42
|
+
| `V8.CloseThisDialog()` | 关闭当前宿主弹窗/微应用弹窗 |
|
|
43
|
+
| `V8.ReloadForm()` | 重新加载当前表单 |
|
|
44
|
+
| `V8.HideFormBtn(...)` | 隐藏表单按钮 |
|
|
45
|
+
| `V8.HideFormTab(name)`、`V8.ShowFormTab(name)`、`V8.ClickFormTab(name)` | 页签显隐与切换 |
|
|
46
|
+
| `V8.GetFormTabs()` | 获取当前表单页签 |
|
|
47
|
+
| `V8.ShowTableChildHideField(child,fields)` | 强制显示子表隐藏列并刷新 |
|
|
48
|
+
| `V8.GetChildTableData(fieldName)` | 获取指定子表数据 |
|
|
49
|
+
| `V8.RefreshChildTable(field,row?)` | 刷新子表 |
|
|
50
|
+
|
|
51
|
+
## 列表与搜索
|
|
52
|
+
|
|
53
|
+
| API | 说明 |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `V8.RefreshTable({_PageIndex})` | 刷新当前列表 |
|
|
56
|
+
| `V8.SearchSet(value)` | 替换当前模块搜索条件 |
|
|
57
|
+
| `V8.SearchAppend(value)` | 追加当前模块搜索条件 |
|
|
58
|
+
| `V8.OpenTableSetWhere(field,where)` | 设置弹出表格不可被临时搜索覆盖的固定范围 |
|
|
59
|
+
| `V8.AppendSearchChildTable(field,value)` | 历史兼容;新代码优先 `OpenTableSetWhere` |
|
|
60
|
+
| `V8.TableSearchSet(field,value)` | 替换指定子表/表格搜索 |
|
|
61
|
+
| `V8.TableSearchAppend(field,value)` | 追加指定子表/表格搜索 |
|
|
62
|
+
| `V8.TableRefresh(field,param)` | 刷新指定子表/表格 |
|
|
63
|
+
| `V8.ClearTableSelection()` | 清空当前列表勾选 |
|
|
64
|
+
|
|
65
|
+
## 交互与导航
|
|
66
|
+
|
|
67
|
+
| API | 说明 |
|
|
68
|
+
|---|---|
|
|
69
|
+
| `V8.Tips(msg,ok?)` | 消息提示 |
|
|
70
|
+
| `V8.ConfirmTips(content,callback,options?)` | HTML 模式确认框,只传可信/转义内容 |
|
|
71
|
+
| `V8.Router.Push(...)` | 站内路由 |
|
|
72
|
+
| `V8.Window.Open(...)` | 打开窗口 |
|
|
73
|
+
| `V8.OpenForm(...)`、`V8.OpenFormWF(...)` | 历史表单/工作流打开入口 |
|
|
74
|
+
| `V8.OpenAnyForm(options)` | 打开任意表单 |
|
|
75
|
+
| `V8.OpenAnyTable(options)` | 打开任意列表 |
|
|
76
|
+
| `V8.OpenDialog(options)` | 打开主前端已注册 Vue 组件 |
|
|
77
|
+
| `V8.OpenAppDialog(options)` | 打开已发布 MicroService 页面 |
|
|
78
|
+
| `V8.WF.StartWork(...)`、`V8.FormWF` | 前端工作流入口/当前工作流数据 |
|
|
79
|
+
|
|
80
|
+
三个以上输入、上传、表格、步骤条、Tab 或代码编辑器使用
|
|
81
|
+
`V8.OpenAppDialog`,不要在 V8 代码中拼大段 HTML。
|
|
82
|
+
|
|
83
|
+
## 网络与引擎
|
|
84
|
+
|
|
85
|
+
| API | 说明 |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `V8.Http.Get(options)`、`V8.Http.Post(options)`、`V8.Http.PatchResponse(options)` | 推荐前端 HTTP Promise API |
|
|
88
|
+
| `V8.Post(...)`、`V8.Get(...)` | 历史回调 API,兼容保留 |
|
|
89
|
+
| `V8.ApiEngine.Run(...)` | 调用接口引擎,支持 Promise/回调 |
|
|
90
|
+
| `V8.ApiEngine.RunBackground(...)` | 提交持久后台任务 |
|
|
91
|
+
| `V8.DataSourceEngine` | 前端数据源引擎对象 |
|
|
92
|
+
| `V8.DataSourceEngine.Run(...)` | 运行数据源引擎;旧 `GetData` 已弃用 |
|
|
93
|
+
| `V8.FormEngine.GetTableData(...)` | 查询列表 |
|
|
94
|
+
| `V8.FormEngine.GetFormData(...)` | 查询单条 |
|
|
95
|
+
| `V8.FormEngine.DelFormData(...)` | 删除;权限仍由服务端校验 |
|
|
96
|
+
|
|
97
|
+
前端 `V8.FormEngine` 真实方法以当前客户端定义为准,均可按 Promise 使用;
|
|
98
|
+
不要给前端方法虚构后端专用的 `GetTableDataAsync` 名称。标准前端运行时没有公开
|
|
99
|
+
`V8.ModuleEngine`,模块关联查询使用接口引擎、数据源引擎或受控 FormEngine。
|
|
100
|
+
|
|
101
|
+
## 工具能力
|
|
102
|
+
|
|
103
|
+
| API | 说明 |
|
|
104
|
+
|---|---|
|
|
105
|
+
| `V8.IsNull(value)` | 兼容判断 `null/undefined/''/'null'/'undefined'` |
|
|
106
|
+
| `V8.ChineseToPinyin(text,fullPyLen,type)` | 中文转拼音 |
|
|
107
|
+
| `V8.NewGuid()` | 前端生成 26 位 ULID;名称为兼容保留,不能据此假设是 36 位 GUID |
|
|
108
|
+
| `await V8.NewServerGuid()` | 请求服务端生成 GUID |
|
|
109
|
+
| `V8.Base64.encode(value)` | 前端 Base64 编码 |
|
|
110
|
+
| `V8.Base64.decode(value)` | 前端 Base64 解码 |
|
|
111
|
+
| `V8.Base64.isValid(value)` | 判断字符串是否为有效 Base64 |
|
|
112
|
+
| `V8._` | Underscore 实例,如 `V8._.where(...)` |
|
|
113
|
+
| `V8.Action.GetDateTimeNow()` | 兼容的前端全局时间函数 |
|
|
114
|
+
| `V8.AddSysLog(...)` | 前端发起系统日志记录;不得含秘密 |
|
|
115
|
+
| `V8.SendSystemMessage(...)` | 发送站内系统消息 |
|
|
116
|
+
| `await V8.Method.ScanCode()` | 扫码;成功值同时写入 `V8.ScanCodeRes` |
|
|
117
|
+
| `V8.Print.*` | TSPL/CPCL/ESC-POS 蓝牙标签与小票打印,兼容 GP-M322、CC4,见蓝牙打印参考 |
|
|
118
|
+
| `V8.Identity.GetCapabilities()` | 读取当前租户强身份能力和本人登记状态 |
|
|
119
|
+
| `V8.Identity.CreateActionHash(value)` | 为稳定业务命令生成 SHA-256 摘要 |
|
|
120
|
+
| `V8.Identity.RegisterPasskey(options?)` | 登记当前用户 Passkey |
|
|
121
|
+
| `V8.Identity.Verify({Purpose,ActionHash,Method,Code?})` | 完成 Passkey、Authenticator TOTP 或严格人脸验证并取得一次性后端票据;Totp 需 6 位 Code |
|
|
122
|
+
|
|
123
|
+
扫码应优先接收 Promise 返回值;兼容代码可在调用后读取 `V8.ScanCodeRes`。
|
|
124
|
+
`V8.Identity` 是强身份验证模块。`V8.Identity.Verify` 的成功结果不能直接授权业务;后端必须重读权威数据、重算摘要并调用 `V8.Method.ConsumeIdentityVerificationTicket`。
|
|
125
|
+
蓝牙打印完整 API 包含 `V8.Print.createNew`、`V8.Print.createNewESC`、
|
|
126
|
+
`V8.Print.OpenBluetoothPage`、`V8.Print.isConnected`、
|
|
127
|
+
`V8.Print.reconnect`、`V8.Print.getConnectionState`、`V8.Print.subscribeConnection`、
|
|
128
|
+
`V8.Print.getPrinterProfile`、`V8.Print.setPrinterProfile`、
|
|
129
|
+
`V8.Print.prepareSend`、`V8.Print.Send`、`V8.Print.setOneTimeData`、
|
|
130
|
+
`V8.Print.setPrinterNum`、`V8.Print.disconnect` 和
|
|
131
|
+
`V8.Print.BLEInformation`。其中 `Send` 依赖 `prepareSend` 设置的共享分包游标,
|
|
132
|
+
只作内部状态机入口;业务代码必须调用并 `await prepareSend`。当前挂载范围、连接
|
|
133
|
+
真实性、佳博原 TSPL 回归、CC4 CPCL 适配、Android SPP 与串行约束见
|
|
134
|
+
[`bluetooth-print.md`](../../v8-frontend-events/references/bluetooth-print.md),TSC/ESC
|
|
135
|
+
完整方法见
|
|
136
|
+
[`bluetooth-print-api.md`](../../v8-frontend-events/references/bluetooth-print-api.md)。
|
|
137
|
+
|
|
138
|
+
## 主前端源码帮助对象
|
|
139
|
+
|
|
140
|
+
`DiyCommon.GetApiBase()` 是 `Microi.Client` 主前端源码内部取得 API 根地址的帮助
|
|
141
|
+
方法,不属于租户前端 V8 的稳定公开对象。V8 代码优先使用受控 `V8.Http` 和
|
|
142
|
+
`V8.SysConfig.ApiBase`;MicroService 从宿主数据读取 `apiBase`,不要假设子应用
|
|
143
|
+
全局存在 `DiyCommon`。
|