@microi.net/cli 4.6.2
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/LICENSE +21 -0
- package/README.md +66 -0
- package/dist/mcp-codex-stdio-adapter.js +189 -0
- package/dist/mcp-server.js +972 -0
- package/dist/mcp-trae-windows-launcher.cmd +21 -0
- package/dist/microi-cli-mcp.js +7 -0
- package/dist/microi-cli.js +1645 -0
- package/dist/microi-skills.meta.json +335 -0
- package/dist/microi.skills/.microi-skills-version.json +6 -0
- package/dist/microi.skills/README.md +276 -0
- package/dist/microi.skills/ai-engine/SKILL.md +140 -0
- package/dist/microi.skills/ai-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/app-store/SKILL.md +105 -0
- package/dist/microi.skills/app-store/agents/openai.yaml +4 -0
- package/dist/microi.skills/business-blueprint/SKILL.md +184 -0
- package/dist/microi.skills/datasource-engine/SKILL.md +89 -0
- package/dist/microi.skills/datasource-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/dos-orm/SKILL.md +76 -0
- package/dist/microi.skills/dos-orm/references/api-reference.md +229 -0
- package/dist/microi.skills/job-engine/SKILL.md +141 -0
- package/dist/microi.skills/job-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/message-notification/SKILL.md +113 -0
- package/dist/microi.skills/message-notification/agents/openai.yaml +6 -0
- package/dist/microi.skills/message-notification/references/contracts.md +99 -0
- package/dist/microi.skills/microi-ai-app-auth.js +651 -0
- package/dist/microi.skills/microi-ai-application/SKILL.md +80 -0
- package/dist/microi.skills/microi-ai-application/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-ai-application/references/frontend-baseline.md +164 -0
- package/dist/microi.skills/microi-client-frontend/SKILL.md +562 -0
- package/dist/microi.skills/microi-datasource-mapping/SKILL.md +108 -0
- package/dist/microi.skills/microi-db-schema/SKILL.md +170 -0
- package/dist/microi.skills/microi-db-schema/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-db-schema/references/core-tables.md +695 -0
- package/dist/microi.skills/microi-db-schema/references/form-component-options.md +256 -0
- package/dist/microi.skills/microi-db-schema/references/schema-overview.md +203 -0
- package/dist/microi.skills/microi-db-schema/references/schema.md +647 -0
- package/dist/microi.skills/microi-db-schema/references/table-catalog.md +1607 -0
- package/dist/microi.skills/microi-deployment/SKILL.md +117 -0
- package/dist/microi.skills/microi-deployment/references/deployment-matrix.md +94 -0
- package/dist/microi.skills/microi-docs-coverage/SKILL.md +91 -0
- package/dist/microi.skills/microi-docs-coverage/references/capability-map.md +65 -0
- package/dist/microi.skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +887 -0
- package/dist/microi.skills/microi-form-engine/SKILL.md +159 -0
- package/dist/microi.skills/microi-form-engine/references/component-catalog.md +116 -0
- package/dist/microi.skills/microi-form-engine/references/data-source-events.md +117 -0
- package/dist/microi.skills/microi-form-layout/SKILL.md +373 -0
- package/dist/microi.skills/microi-frontend-sdk/SKILL.md +304 -0
- package/dist/microi.skills/microi-left-right-layout/SKILL.md +132 -0
- package/dist/microi.skills/microi-microservice/SKILL.md +115 -0
- package/dist/microi.skills/microi-microservice/references/runtime-delivery.md +145 -0
- package/dist/microi.skills/microi-mobile-app-quality/SKILL.md +436 -0
- package/dist/microi.skills/microi-solution-quotation/SKILL.md +76 -0
- package/dist/microi.skills/microi-solution-quotation/agents/openai.yaml +4 -0
- package/dist/microi.skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -0
- package/dist/microi.skills/microi-system-delivery/SKILL.md +446 -0
- package/dist/microi.skills/microi-ui/SKILL.md +321 -0
- package/dist/microi.skills/microi-uniapp-frontend/SKILL.md +483 -0
- package/dist/microi.skills/microi.v8.js +1758 -0
- package/dist/microi.skills/module-engine/SKILL.md +131 -0
- package/dist/microi.skills/module-engine/references/module-config.md +174 -0
- package/dist/microi.skills/page-engine/SKILL.md +397 -0
- package/dist/microi.skills/performance-testing/SKILL.md +207 -0
- package/dist/microi.skills/playwright-e2e/SKILL.md +769 -0
- package/dist/microi.skills/print-engine/SKILL.md +237 -0
- package/dist/microi.skills/production-readonly-audit/SKILL.md +39 -0
- package/dist/microi.skills/report-engine/SKILL.md +69 -0
- package/dist/microi.skills/report-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/search-engine/SKILL.md +73 -0
- package/dist/microi.skills/search-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/spider-engine/SKILL.md +188 -0
- package/dist/microi.skills/translate-engine/SKILL.md +91 -0
- package/dist/microi.skills/translate-engine/agents/openai.yaml +4 -0
- package/dist/microi.skills/ui-design/SKILL.md +1575 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/app.js +54 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/index.html +163 -0
- package/dist/microi.skills/ui-design/assets/pattern-showcase/styles.css +311 -0
- package/dist/microi.skills/ui-design/assets/templates/MCI-DESIGN.md +98 -0
- package/dist/microi.skills/ui-design/references/design-pattern-library.md +171 -0
- package/dist/microi.skills/ui-design/references/mci-design-contract.md +84 -0
- package/dist/microi.skills/ui-design/references/motion-and-media.md +71 -0
- package/dist/microi.skills/ui-design/references/product-flow-recipes.md +94 -0
- package/dist/microi.skills/uniapp-mall-assets/SKILL.md +105 -0
- package/dist/microi.skills/v8-api-config/SKILL.md +272 -0
- package/dist/microi.skills/v8-cache-pattern/SKILL.md +286 -0
- package/dist/microi.skills/v8-crud-api/SKILL.md +398 -0
- package/dist/microi.skills/v8-debugging/SKILL.md +279 -0
- package/dist/microi.skills/v8-explorer-tree/SKILL.md +224 -0
- package/dist/microi.skills/v8-export-import/SKILL.md +590 -0
- package/dist/microi.skills/v8-file-upload/SKILL.md +497 -0
- package/dist/microi.skills/v8-formengine-http/SKILL.md +218 -0
- package/dist/microi.skills/v8-frontend-events/SKILL.md +349 -0
- package/dist/microi.skills/v8-frontend-events/references/bluetooth-print-api.md +107 -0
- package/dist/microi.skills/v8-frontend-events/references/bluetooth-print.md +185 -0
- package/dist/microi.skills/v8-http-integration/SKILL.md +379 -0
- package/dist/microi.skills/v8-image-processing/SKILL.md +187 -0
- package/dist/microi.skills/v8-image-processing/agents/openai.yaml +4 -0
- package/dist/microi.skills/v8-image-processing/references/api-reference.md +620 -0
- package/dist/microi.skills/v8-menu-buttons/SKILL.md +661 -0
- package/dist/microi.skills/v8-mongodb/SKILL.md +149 -0
- package/dist/microi.skills/v8-mq-mqtt/SKILL.md +227 -0
- package/dist/microi.skills/v8-saas-multi-tenant/SKILL.md +193 -0
- package/dist/microi.skills/v8-security/SKILL.md +417 -0
- package/dist/microi.skills/v8-sql-query/SKILL.md +290 -0
- package/dist/microi.skills/v8-table-event/SKILL.md +385 -0
- package/dist/microi.skills/v8-template-engine/SKILL.md +165 -0
- package/dist/microi.skills/v8-utilities/SKILL.md +79 -0
- package/dist/microi.skills/v8-utilities/references/client-api-index.md +136 -0
- package/dist/microi.skills/v8-utilities/references/platform-http-routes.md +80 -0
- package/dist/microi.skills/v8-utilities/references/server-api-index.md +129 -0
- package/dist/microi.skills/v8-workflow/SKILL.md +322 -0
- package/dist/microi.skills/workspace-conventions/SKILL.md +479 -0
- package/package.json +40 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: v8-template-engine
|
|
3
|
+
description: Microi V8 模板引擎指南。用于编写表格/表单模板渲染、V8.Result HTML/text 输出、行格式化、徽章、图片和自定义显示逻辑。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Microi V8 模板引擎(表格/表单 V8 模板)
|
|
7
|
+
|
|
8
|
+
你正在为 Microi 吾码平台编写 **表格 V8 模板引擎**、**表单 V8 模板引擎** 代码。模板引擎用于在数据渲染后自定义最终展示效果(颜色、徽章、图片、HTML),是表单引擎的高级特性。
|
|
9
|
+
|
|
10
|
+
## 核心规则
|
|
11
|
+
|
|
12
|
+
- 模板引擎绑定在【表单属性】的【表格 V8 模板引擎】或【表单 V8 模板引擎】
|
|
13
|
+
- 通过给 `V8.Result` 赋值字符串(HTML 或纯文本)来控制最终渲染结果
|
|
14
|
+
- 在 **表格模板** 中:每行数据都会执行一次,`V8.Form` 是当前行数据
|
|
15
|
+
- 注意:`V8.Form` 此时只能访问到【模块引擎】配置的【查询列】字段;若查询列为空则可访问全部字段
|
|
16
|
+
- 支持 `bootstrap`、`element-ui` 样式类名
|
|
17
|
+
- `V8.EventName` 可能为 `TableTemplateEngine` 或 `FormTemplateEngine`
|
|
18
|
+
- 表格模板同步执行,输出优先级是 `V8.Result` → JavaScript `return` → 原字段值;表单模板异步执行并以 `V8.Result` 为输出
|
|
19
|
+
- 模板结果通过 `v-safe-html`/DOMPurify 净化。`script`、`iframe`、`on*` 事件属性、`javascript:` 等危险内容会被剥离,禁止依赖内联点击事件
|
|
20
|
+
- 业务文本必须 HTML 转义后再拼接;权限、校验、状态写入等业务逻辑必须放后端
|
|
21
|
+
|
|
22
|
+
模板中需要拼 HTML 时,先定义安全转义函数:
|
|
23
|
+
|
|
24
|
+
```javascript
|
|
25
|
+
var escapeHtml = function (value) {
|
|
26
|
+
return String(value == null ? '' : value)
|
|
27
|
+
.replace(/&/g, '&')
|
|
28
|
+
.replace(/</g, '<')
|
|
29
|
+
.replace(/>/g, '>')
|
|
30
|
+
.replace(/"/g, '"')
|
|
31
|
+
.replace(/'/g, ''');
|
|
32
|
+
};
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## 状态徽章(Bootstrap 样式)
|
|
36
|
+
|
|
37
|
+
```javascript
|
|
38
|
+
var value = V8.Form.Zhuangtai;
|
|
39
|
+
if (V8.IsNull(value)) {
|
|
40
|
+
V8.Result = '';
|
|
41
|
+
} else {
|
|
42
|
+
var classStr = 'badge-primary';
|
|
43
|
+
if (value === '禁用') classStr = 'badge-danger';
|
|
44
|
+
else if (value === '未通过') classStr = 'badge-warning';
|
|
45
|
+
else if (value === '待审核') classStr = 'badge-info';
|
|
46
|
+
else if (value === '通过') classStr = 'badge-success';
|
|
47
|
+
V8.Result = '<span class="badge badge-pill ' + classStr + '">' + escapeHtml(value) + '</span>';
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
可用 Bootstrap 徽章类:`badge-primary`, `badge-secondary`, `badge-success`, `badge-danger`, `badge-warning`, `badge-info`, `badge-light`, `badge-dark`
|
|
52
|
+
|
|
53
|
+
## 内联样式(颜色高亮)
|
|
54
|
+
|
|
55
|
+
```javascript
|
|
56
|
+
// 不同业务状态显示不同字体颜色
|
|
57
|
+
if (V8.Form.XuqiuLX === '合并') {
|
|
58
|
+
V8.Result = '<span style="color:blue;">' + escapeHtml(V8.Form.XuqiuDDH) + '</span>';
|
|
59
|
+
} else if (V8.Form.HebingID) {
|
|
60
|
+
V8.Result = '<span style="color:#999;">' + escapeHtml(V8.Form.XuqiuDDH) + '</span>';
|
|
61
|
+
} else {
|
|
62
|
+
V8.Result = escapeHtml(V8.Form.XuqiuDDH);
|
|
63
|
+
}
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## 单图列渲染
|
|
67
|
+
|
|
68
|
+
```javascript
|
|
69
|
+
var html = '';
|
|
70
|
+
var fileServer = V8.SysConfig.FileServer;
|
|
71
|
+
if (!V8.IsNull(V8.Form.GongsiLOGO)) {
|
|
72
|
+
html = '<img src="' + escapeHtml(fileServer + V8.Form.GongsiLOGO) + '" '
|
|
73
|
+
+ 'alt="公司Logo" '
|
|
74
|
+
+ 'style="height:40px;width:40px;object-fit:cover;margin:5px 0;" />';
|
|
75
|
+
}
|
|
76
|
+
V8.Result = html;
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## 多图列渲染(带点击放大)
|
|
80
|
+
|
|
81
|
+
```javascript
|
|
82
|
+
var html = '';
|
|
83
|
+
var fileServer = V8.SysConfig.FileServer;
|
|
84
|
+
if (!V8.IsNull(V8.Form.TupianMS) && V8.Form.TupianMS.indexOf('[') !== -1) {
|
|
85
|
+
var imgs = JSON.parse(V8.Form.TupianMS);
|
|
86
|
+
imgs.forEach(function(item) {
|
|
87
|
+
var url = escapeHtml(fileServer + item.Path);
|
|
88
|
+
html += '<a href="' + url + '" target="_blank" rel="noopener noreferrer">'
|
|
89
|
+
+ '<img src="' + url + '" alt="图片" '
|
|
90
|
+
+ 'style="width:40px;height:40px;object-fit:cover;margin:5px 5px 5px 0;" />'
|
|
91
|
+
+ '</a>';
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
V8.Result = html;
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## 进度条渲染
|
|
98
|
+
|
|
99
|
+
```javascript
|
|
100
|
+
var percent = V8.Form.Progress || 0;
|
|
101
|
+
var color = '#67C23A';
|
|
102
|
+
if (percent < 30) color = '#F56C6C';
|
|
103
|
+
else if (percent < 70) color = '#E6A23C';
|
|
104
|
+
|
|
105
|
+
V8.Result =
|
|
106
|
+
'<div style="width:100%;background:#eee;border-radius:4px;height:16px;position:relative;">'
|
|
107
|
+
+ '<div style="width:' + percent + '%;background:' + color + ';height:100%;border-radius:4px;"></div>'
|
|
108
|
+
+ '<span style="position:absolute;left:50%;top:0;transform:translateX(-50%);color:#333;font-size:12px;line-height:16px;">' + percent + '%</span>'
|
|
109
|
+
+ '</div>';
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## 多字段合并显示
|
|
113
|
+
|
|
114
|
+
```javascript
|
|
115
|
+
// 联系人姓名 + 电话脱敏
|
|
116
|
+
var name = V8.Form.LianxiR || '';
|
|
117
|
+
var phone = V8.Form.LianxiPhone || '';
|
|
118
|
+
if (phone.length === 11) phone = phone.substring(0, 3) + '****' + phone.substring(7);
|
|
119
|
+
V8.Result = '<div><b>' + escapeHtml(name) + '</b><br/><small style="color:#999;">'
|
|
120
|
+
+ escapeHtml(phone) + '</small></div>';
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
模块引擎已有更轻量的声明式方案:`ViewSchema.Layout.List.Columns` 可用 `Field + Lines +
|
|
124
|
+
TrailingFields` 组成多行列,`Layout.Card` 可配置移动端顶部、右侧、正文、元信息和底部字段。
|
|
125
|
+
仅需要多字段排版、图标、`Tone/Color/Prefix/Suffix` 时优先使用声明式配置;需要复杂条件
|
|
126
|
+
HTML 时再给被引用的 `diy_field` 配置 `V8TmpEngineTable`。两种方式都会复用净化后的模板
|
|
127
|
+
结果,且所有引用字段仍必须在模块查询列或 `_SelectFields` 中。
|
|
128
|
+
|
|
129
|
+
## 条件性图标
|
|
130
|
+
|
|
131
|
+
```javascript
|
|
132
|
+
var html = escapeHtml(V8.Form.Title || '');
|
|
133
|
+
if (V8.Form.IsHot === 1) html += ' <i class="fas fa-fire" style="color:#F56C6C;"></i>';
|
|
134
|
+
if (V8.Form.IsNew === 1) html += ' <span class="badge badge-danger">NEW</span>';
|
|
135
|
+
V8.Result = html;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## 与字段值变更事件配合(动态计算)
|
|
139
|
+
|
|
140
|
+
```javascript
|
|
141
|
+
// 表格模板中根据多个字段计算
|
|
142
|
+
var price = parseFloat(V8.Form.Price) || 0;
|
|
143
|
+
var discount = parseFloat(V8.Form.Discount) || 1;
|
|
144
|
+
var total = (price * discount).toFixed(2);
|
|
145
|
+
var color = total > 1000 ? '#F56C6C' : '#67C23A';
|
|
146
|
+
V8.Result = '<span style="color:' + color + ';font-weight:bold;">¥' + total + '</span>';
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 常见错误
|
|
150
|
+
|
|
151
|
+
❌ 不要在模板中调用 `V8.FormEngine`(每行都查 → N+1 性能问题);需要关联数据时在查询列、接口引擎或后端 `DataFilterV8` 预取,只有 `DataFilterV8` 才提供 `V8.CacheData`
|
|
152
|
+
❌ 不要依赖对象/数组的隐式字符串化;`V8.Result` 建议显式输出字符串
|
|
153
|
+
❌ 模板中 `V8.Form` 默认只有【查询列】字段;缺字段就要去模块引擎补查询列
|
|
154
|
+
❌ 不要在模板里写复杂业务逻辑(应放到接口引擎或 DataFilterV8)
|
|
155
|
+
❌ 不要输出 `onclick/onerror`、`script/iframe` 或 `javascript:` URL;DOMPurify 会剥离这些内容
|
|
156
|
+
|
|
157
|
+
## 与 DataFilterV8 的区别
|
|
158
|
+
|
|
159
|
+
| | DataFilterV8(后端) | 模板引擎(前端) |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| 运行端 | 服务器 | 浏览器 |
|
|
162
|
+
| 用途 | 加工数据、脱敏、补字段 | 渲染 HTML 样式 |
|
|
163
|
+
| 输出 | `V8.Form.字段 = ...` | `V8.Result = '<html>...</html>'` |
|
|
164
|
+
| 字段范围 | 全部数据 | 仅查询列 |
|
|
165
|
+
| 性能 | 每行执行(可用 `V8.CacheData`) | 浏览器渲染时执行 |
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: v8-utilities
|
|
3
|
+
description: Microi V8 全局对象、上下文变量和通用函数索引。用于查询某个 V8 函数是否存在、区分前端与后端 API,或使用 V8.Method、Base64、EncryptHelper、Action、CurrentUser、SysConfig、OsClient、扫码和客户端导航工具。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Microi V8 通用能力与函数索引
|
|
7
|
+
|
|
8
|
+
本 Skill 是 V8 能力的路由入口,不替代 CRUD、HTTP、缓存、文件、图片、Office、
|
|
9
|
+
工作流等专项 Skill。遇到“吾码有没有某个函数”“这个 API 在前端还是后端”
|
|
10
|
+
或官网函数列表同步任务时,先在这里确定运行端和正式名称,再读取专项 Skill。
|
|
11
|
+
|
|
12
|
+
## 先判断运行端
|
|
13
|
+
|
|
14
|
+
| 运行端 | 典型位置 | API 特征 |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| 前端 | 字段事件、按钮、列表、InFormV8、SubmitFormV8、OutFormV8 | 浏览器 Promise/回调、弹窗、路由、`V8.Print`、扫码 |
|
|
17
|
+
| 后端 | 接口引擎、SubmitBeforeServerV8、SubmitAfterServerV8、DataFilterV8 | `V8.Db`、事务、缓存、Office、加密、服务端 HTTP |
|
|
18
|
+
|
|
19
|
+
同名对象不保证两端方法一致。例如前端 `V8.Base64.encode/decode` 与后端
|
|
20
|
+
`V8.Base64.StringToBase64/Base64ToString` 不同;前端标准运行时没有公开
|
|
21
|
+
`V8.ModuleEngine`,后端才有模块引擎对象。
|
|
22
|
+
|
|
23
|
+
## 必读索引
|
|
24
|
+
|
|
25
|
+
- 前端全部上下文、表单/列表、导航、网络、引擎和工具:
|
|
26
|
+
`references/client-api-index.md`
|
|
27
|
+
- 后端上下文、`V8.Method`、Base64、加密、异步与扩展对象:
|
|
28
|
+
`references/server-api-index.md`
|
|
29
|
+
- 平台 HTTP 路由、动态路由与管理接口边界:
|
|
30
|
+
`references/platform-http-routes.md`
|
|
31
|
+
- 蓝牙标签/小票打印:
|
|
32
|
+
`../v8-frontend-events/references/bluetooth-print.md`
|
|
33
|
+
|
|
34
|
+
若函数未出现在上述索引或当前源码定义中,不得按名字猜测。先搜索
|
|
35
|
+
`Microi.Client/src/views/form-engine/diy-components/v8-api-definitions.js`、
|
|
36
|
+
`v8-api-server-definitions.js`、V8 宿主接口和官网中文函数列表。
|
|
37
|
+
|
|
38
|
+
## 常用通用写法
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// 两端通用的租户/用户上下文,具体字段按当前上下文判空
|
|
42
|
+
var osClient = V8.OsClient;
|
|
43
|
+
var userId = V8.CurrentUser && V8.CurrentUser.Id;
|
|
44
|
+
|
|
45
|
+
// 后端稳定标识与时间
|
|
46
|
+
var id = V8.Method.NewUlid();
|
|
47
|
+
var now = DateNow('yyyy-MM-dd HH:mm:ss');
|
|
48
|
+
var timestamp = V8.Method.GetTimestamp();
|
|
49
|
+
|
|
50
|
+
// 后端 Base64
|
|
51
|
+
var encoded = V8.Base64.StringToBase64('吾码');
|
|
52
|
+
var decoded = V8.Base64.Base64ToString(encoded);
|
|
53
|
+
|
|
54
|
+
// 前端 Base64
|
|
55
|
+
var clientEncoded = V8.Base64.encode('吾码');
|
|
56
|
+
var clientDecoded = V8.Base64.decode(clientEncoded);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 能力选择
|
|
60
|
+
|
|
61
|
+
| 需求 | 专项 Skill |
|
|
62
|
+
|---|---|
|
|
63
|
+
| 表单 CRUD、`_Where` | `v8-crud-api`、`v8-sql-query` |
|
|
64
|
+
| HTTP/第三方接口 | `v8-http-integration` |
|
|
65
|
+
| Redis/Hash | `v8-cache-pattern` |
|
|
66
|
+
| 文件/HDFS | `v8-file-upload` |
|
|
67
|
+
| 图片 | `v8-image-processing` |
|
|
68
|
+
| Excel/Word/PPT/邮件 | `v8-export-import` |
|
|
69
|
+
| 前端事件/打印/扫码 | `v8-frontend-events` |
|
|
70
|
+
| 后端表单事件 | `v8-table-event` |
|
|
71
|
+
| 接口配置/异步/后台任务 | `v8-api-config` |
|
|
72
|
+
|
|
73
|
+
## 不可越过的边界
|
|
74
|
+
|
|
75
|
+
- 平台能力优先使用 `V8.*`,不要假设全局 `System` 可访问任意 CLR 类型。
|
|
76
|
+
- `V8.SysConfig`、`V8.OsClientModel`、`V8.ClientModel` 可能含连接串、密钥和供应商配置,不直接返回前端或写日志。
|
|
77
|
+
- 摘要算法不是密码存储。新密码不使用 MD5/SHA1/SHA256 直接保存。
|
|
78
|
+
- `setTimeout`、`Task.Run` 不能承担请求返回后的可靠后台执行。
|
|
79
|
+
- 前端值只可用于交互;权限、事务和最终业务校验必须在可信后端执行。
|
|
@@ -0,0 +1,136 @@
|
|
|
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.*` | BLE 标签/小票打印,见蓝牙打印参考 |
|
|
118
|
+
|
|
119
|
+
扫码应优先接收 Promise 返回值;兼容代码可在调用后读取 `V8.ScanCodeRes`。
|
|
120
|
+
蓝牙打印完整 API 包含 `V8.Print.createNew`、`V8.Print.createNewESC`、
|
|
121
|
+
`V8.Print.OpenBluetoothPage`、`V8.Print.isConnected`、
|
|
122
|
+
`V8.Print.prepareSend`、`V8.Print.Send`、`V8.Print.setOneTimeData`、
|
|
123
|
+
`V8.Print.setPrinterNum`、`V8.Print.disconnect` 和
|
|
124
|
+
`V8.Print.BLEInformation`。其中 `Send` 依赖 `prepareSend` 设置的共享分包游标,
|
|
125
|
+
只作内部状态机入口;业务代码必须调用并 `await prepareSend`。当前挂载范围、连接
|
|
126
|
+
真实性和串行约束见
|
|
127
|
+
[`bluetooth-print.md`](../../v8-frontend-events/references/bluetooth-print.md),TSC/ESC
|
|
128
|
+
完整方法见
|
|
129
|
+
[`bluetooth-print-api.md`](../../v8-frontend-events/references/bluetooth-print-api.md)。
|
|
130
|
+
|
|
131
|
+
## 主前端源码帮助对象
|
|
132
|
+
|
|
133
|
+
`DiyCommon.GetApiBase()` 是 `Microi.Client` 主前端源码内部取得 API 根地址的帮助
|
|
134
|
+
方法,不属于租户前端 V8 的稳定公开对象。V8 代码优先使用受控 `V8.Http` 和
|
|
135
|
+
`V8.SysConfig.ApiBase`;MicroService 从宿主数据读取 `apiBase`,不要假设子应用
|
|
136
|
+
全局存在 `DiyCommon`。
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Microi 平台 HTTP 路由索引
|
|
2
|
+
|
|
3
|
+
本索引用于识别中文官网示例中的平台路由。路由可用不等于当前用户有权限;始终
|
|
4
|
+
传当前租户 `OsClient`,使用受支持的 Token/访问密钥,并让服务端重新做菜单、
|
|
5
|
+
表单、字段和数据范围校验。
|
|
6
|
+
|
|
7
|
+
## 接口引擎
|
|
8
|
+
|
|
9
|
+
| 路由 | 用途 |
|
|
10
|
+
|---|---|
|
|
11
|
+
| `POST /apiengine/{ApiEngineKey}` | 推荐的稳定接口引擎入口 |
|
|
12
|
+
| `POST /api/ApiEngine/Run` | 兼容入口,Body 传 `ApiEngineKey` |
|
|
13
|
+
| `/apiengine/{ApiEngineKey}--OsClient--{OsClient}--` | 仅用于确实无法设置 Header/Form/Query 的 GET/HEAD 场景 |
|
|
14
|
+
|
|
15
|
+
普通请求优先在唯一 `osclient` Header 传租户,也可在 Query/Form/JSON 中冗余;
|
|
16
|
+
不要无脑把特殊租户后缀加到每条 URL。官网中的
|
|
17
|
+
`/apiengine/test1`、`/apiengine/get-product-list`、打印、支付和 Excel demo
|
|
18
|
+
都是业务 `ApiEngineKey` 示例,不是固定平台接口。
|
|
19
|
+
|
|
20
|
+
## FormEngine
|
|
21
|
+
|
|
22
|
+
标准 Controller 路由:
|
|
23
|
+
|
|
24
|
+
| 路由 | 用途 |
|
|
25
|
+
|---|---|
|
|
26
|
+
| `POST /api/formengine/GetTableData` | 查询列表 |
|
|
27
|
+
| `POST /api/formengine/GetFormData` | 查询单条 |
|
|
28
|
+
| `POST /api/formengine/AddFormData` | 新增 |
|
|
29
|
+
| `POST /api/formengine/UptFormData` | 更新 |
|
|
30
|
+
| `POST /api/formengine/DelFormData` | 删除 |
|
|
31
|
+
| `POST /api/formengine/UptFormDataByWhere` | 按条件更新 |
|
|
32
|
+
| `POST /api/formengine/DelFormDataByWhere` | 按条件删除 |
|
|
33
|
+
| `POST /api/formengine/GetTableDataAnonymous` | 表配置允许时匿名查列表 |
|
|
34
|
+
| `POST /api/formengine/GetFormDataAnonymous` | 表配置允许时匿名查单条 |
|
|
35
|
+
| `POST /api/formengine/AddFormDataAnonymous` | 表配置允许时匿名新增 |
|
|
36
|
+
|
|
37
|
+
动态路由还支持
|
|
38
|
+
`/api/formengine/{operation}-{FormEngineKey}`(兼容无连字符操作名与连字符操作名)。
|
|
39
|
+
访问密钥只需获得相应表/页面和 `form:read` 等作用域,不应把每个动态 URL 加入
|
|
40
|
+
无条件白名单。完整调用模型见 `v8-formengine-http`。
|
|
41
|
+
|
|
42
|
+
## 文件、消息、验证码与诊断
|
|
43
|
+
|
|
44
|
+
| 路由 | 用途与边界 |
|
|
45
|
+
|---|---|
|
|
46
|
+
| `GET /api/Captcha/getCaptcha` | 获取验证码图片;同时保存响应 `captchaid` |
|
|
47
|
+
| `POST /api/Captcha/Recognize` | 受控验证码识别,主要供采集引擎 |
|
|
48
|
+
| `POST /api/HDFS/Upload` | 受限文件上传;优先用平台 SDK/V8 Upload |
|
|
49
|
+
| `POST /api/HDFS/GetPrivateFileUrl` | 获取当前租户短期私有文件地址 |
|
|
50
|
+
| `GET /api/HDFS/OpenPrivateFile` | 受权打开私有文件/Office 代理 |
|
|
51
|
+
| `POST /api/DiyChat/SendSystemMessage` | 发送站内消息;前端优先 `V8.SendSystemMessage` |
|
|
52
|
+
| `POST /api/mq/sendmsg` | MQ HTTP 兼容入口;业务端优先受控 V8/MQ |
|
|
53
|
+
| `GET /api/Diagnostics/health` | 聚合健康状态 |
|
|
54
|
+
| `GET /api/Diagnostics/liveness` | 进程存活检查,不代表已就绪接流量 |
|
|
55
|
+
|
|
56
|
+
`/api/example`、`/api/example/1` 仅用于说明 `V8.Http` 的普通 Controller 地址,
|
|
57
|
+
不属于 Microi 固定接口。
|
|
58
|
+
|
|
59
|
+
## 管理与内部交付接口
|
|
60
|
+
|
|
61
|
+
下列路由不是普通业务 SDK:
|
|
62
|
+
|
|
63
|
+
| 路由 | 限制 |
|
|
64
|
+
|---|---|
|
|
65
|
+
| `POST /api/DiyField/UptDiyFieldList` | 开发设计字段批量保存;需设计权限 |
|
|
66
|
+
| `POST /api/FormEngine/ImportDiyTableRow` | 表格/子表导入;后端复核字段、外键和权限 |
|
|
67
|
+
| `POST /api/SysUser/GetSysUserPassword` | 仅存量 DES 密码的超级管理员兼容查看;必须审计,访问密钥/普通角色拒绝 |
|
|
68
|
+
| `POST /api/V8Engine/UploadApplicationAssetStream` | 管理员应用文件分片流式上传 |
|
|
69
|
+
| `POST /api/V8Engine/FinalizeApplicationStreamPublish` | 校验清单并原子切换应用版本 |
|
|
70
|
+
|
|
71
|
+
应用流式发布必须使用 MCP/平台发布流程:文件逐个校验 SHA-256,版本目录不可变,
|
|
72
|
+
同一应用用跨节点锁串行,入口文件最后切换。不得把这两个内部路由包装成匿名上传。
|
|
73
|
+
|
|
74
|
+
## 安全检查
|
|
75
|
+
|
|
76
|
+
- URL 不携带长期 Token、密码、连接串、私钥或 Redis 凭据。
|
|
77
|
+
- 动态表名、ApiEngineKey、文件路径和 redirect 都先走白名单/授权。
|
|
78
|
+
- 匿名路由只对明确开启的表或接口生效,仍要限流、限大小并做业务校验。
|
|
79
|
+
- 管理接口必须核验当前租户与管理员身份,写后回读;超时先回读,不能盲目重试。
|
|
80
|
+
- 示例 URL 中的租户、表 Key、接口 Key 和 Id 都是占位值,不复制为生产常量。
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# 后端 V8 API 索引
|
|
2
|
+
|
|
3
|
+
本索引对应接口引擎和后端表单事件。专项 API 的完整模板仍以相应 Skill 为准。
|
|
4
|
+
|
|
5
|
+
## 请求与执行上下文
|
|
6
|
+
|
|
7
|
+
| API/变量 | 说明 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| `V8.Param`、`V8.Header` | URL、Form、JSON 参数与请求头 |
|
|
10
|
+
| `V8.CurrentUser` | 当前可信用户;匿名接口可能为空 |
|
|
11
|
+
| `V8.OsClient` | 当前租户 |
|
|
12
|
+
| `V8.SysConfig` | 系统配置;可能含敏感项,不直接返回 |
|
|
13
|
+
| `V8.OsClientModel`、`V8.ClientModel` | 租户配置兼容别名;严禁泄露连接串/密钥 |
|
|
14
|
+
| `V8.Form`、`V8.OldForm` | 后端表单事件的新旧数据 |
|
|
15
|
+
| `V8.FormSubmitAction` | `Add/Upt/Del` |
|
|
16
|
+
| `V8.EventName`、`V8.InvokeType` | 事件名与 Server/Client 调用来源 |
|
|
17
|
+
| `V8.TableModel`、`V8.TableData` | 当前表模型/行数据 |
|
|
18
|
+
| `V8.RowIndex`、`V8.CacheData`、`V8.NotSaveField` | DataFilter 等事件上下文 |
|
|
19
|
+
| `V8.LineValue`、`V8.NextNodeId`、`V8.WF` | 工作流路线与节点上下文 |
|
|
20
|
+
| `V8.FilesByteBase64` | 上传文件 Base64 字典 |
|
|
21
|
+
| `V8.Limits` | 当前 Jint 资源预算与调用深度 |
|
|
22
|
+
| `V8.Action` | 服务器全局 V8 自定义方法 |
|
|
23
|
+
|
|
24
|
+
## 调用、数据与异步
|
|
25
|
+
|
|
26
|
+
| API | 说明 |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `V8.ApiEngine.Run(...)` | 同步调用接口引擎 |
|
|
29
|
+
| `await V8.ApiEngine.RunAsync(...)` | 请求内异步调用接口引擎 |
|
|
30
|
+
| `V8.FormEngine.*` | 表单 CRUD,见 `v8-crud-api` |
|
|
31
|
+
| `await V8.FormEngine.GetTableDataAsync(...)` | 请求内异步查列表 |
|
|
32
|
+
| `V8.Db`、`V8.DbRead`、`V8.DbTrans` | 主库、只读库、共享事务 |
|
|
33
|
+
| `V8.DbTrans.FromSql(sql)` | 在平台提供的共享事务内执行参数化 SQL |
|
|
34
|
+
| `V8.Dbs`、`V8.Dbs.Open(...)` | 已配置的扩展数据库 |
|
|
35
|
+
| `V8.MongoDb.*` | MongoDB CRUD |
|
|
36
|
+
| `V8.DataSourceEngine` | 当前租户数据源引擎对象 |
|
|
37
|
+
| `V8.DataSourceEngine.Run(...)`、`V8.DataSourceEngine.RunAsync(...)` | 同步/请求内异步运行数据源 |
|
|
38
|
+
| `V8.ModuleEngine` | 后端模块模型能力;不能绕过用户模块权限 |
|
|
39
|
+
| `V8.ModuleEngine.GetTableData(...)` | 按 `ModuleEngineKey` 应用模块关联表配置查询 |
|
|
40
|
+
|
|
41
|
+
接口引擎返回后宿主上下文会释放。只在真实 `*Async` 方法上使用 `await`;
|
|
42
|
+
脱离请求的工作使用后台任务、Job、MQ 或 outbox。
|
|
43
|
+
|
|
44
|
+
## V8.Method
|
|
45
|
+
|
|
46
|
+
| API | 说明 |
|
|
47
|
+
|---|---|
|
|
48
|
+
| `V8.Method.NewGuid()`、`V8.Method.NewUlid()` | 生成标识 |
|
|
49
|
+
| `V8.Method.GetTimestamp()` | Unix 秒时间戳 |
|
|
50
|
+
| `V8.Method.GetCurrentToken(token,osClient)` | 读取当前 Token 对象;不透传前端 |
|
|
51
|
+
| `V8.Method.RefreshLoginUser(userId,osClient)` | 刷新用户登录缓存 |
|
|
52
|
+
| `V8.Method.ClearUserLoginInfo(userId,osClient)` | 管理员吊销用户全部终端 Token |
|
|
53
|
+
| `V8.Method.GetPrivateFileUrl({FilePathName})` | 签发当前租户短期私有文件代理地址 |
|
|
54
|
+
| `V8.Method.Upload(options)` | 受配额限制的上传 |
|
|
55
|
+
| `V8.Method.AddSysLog(options)` | 结构化系统日志 |
|
|
56
|
+
| `V8.Method.ParseWhere(where)` | 兼容旧 Where 转换 |
|
|
57
|
+
| `V8.Method.UpdateBackgroundTask(options)` | 上报已提交单位的后台任务进度 |
|
|
58
|
+
| `V8.Method.RefreshExtensionDatabases(osClient?)` | 配置表提交后刷新全节点 `V8.Dbs` |
|
|
59
|
+
|
|
60
|
+
管理员维护、备份、清库、缓存连接管理等低层方法即使可见,也不能暴露为普通
|
|
61
|
+
或匿名业务 API。
|
|
62
|
+
|
|
63
|
+
## Base64 与加密
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
var encoded = V8.Base64.StringToBase64('吾码');
|
|
67
|
+
var decoded = V8.Base64.Base64ToString(encoded);
|
|
68
|
+
|
|
69
|
+
var des = V8.EncryptHelper.DESEncode('legacy-value');
|
|
70
|
+
var plain = V8.EncryptHelper.DESDecode(des);
|
|
71
|
+
var sha1 = V8.EncryptHelper.SHA1('legacy-value');
|
|
72
|
+
var sha256 = V8.EncryptHelper.SHA256('text');
|
|
73
|
+
var sha512 = V8.EncryptHelper.SHA512('text');
|
|
74
|
+
var hex = V8.EncryptHelper.Sha256Hex('text');
|
|
75
|
+
var signature = V8.EncryptHelper.HmacSha256(secretFromConfig, payload);
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`V8.EncryptHelper` 是后端加密/摘要帮助对象。完整入口:
|
|
79
|
+
`V8.EncryptHelper.MD5Encrypt`、`V8.EncryptHelper.SHA1`、
|
|
80
|
+
`V8.EncryptHelper.SHA256`、`V8.EncryptHelper.SHA512`、
|
|
81
|
+
`V8.EncryptHelper.Sha256Hex`、`V8.EncryptHelper.HmacSha256`、
|
|
82
|
+
`V8.EncryptHelper.AESEncrypt`、`V8.EncryptHelper.AESDecrypt`、
|
|
83
|
+
`V8.EncryptHelper.DESEncode`、`V8.EncryptHelper.DESDecode`。
|
|
84
|
+
|
|
85
|
+
MD5/SHA1 仅为兼容摘要;任何摘要都不能直接作为新密码存储方案。AES/DES/HMAC
|
|
86
|
+
密钥从受控配置读取,不硬编码、不写日志、不返回客户端。
|
|
87
|
+
|
|
88
|
+
## 内置与自定义扩展
|
|
89
|
+
|
|
90
|
+
`V8.Alipay`、`V8.AlipayV3`、`V8.WeChat`、`V8.Alidns`、`V8.System` 和
|
|
91
|
+
`V8.Image` 由当前 `Microi.V8Engine/V8Extend.cs` 注册。扩展可被裁剪或二次
|
|
92
|
+
开发,调用前以目标部署源码和编辑器定义为准。
|
|
93
|
+
|
|
94
|
+
- `V8.Alipay.CreatePay(...)` 创建支付宝支付参数;
|
|
95
|
+
`V8.Alipay.Test22(...)` 是历史诊断方法,不能作为生产业务接口。
|
|
96
|
+
- `V8.WeChat` 当前包含签名、授权头与 AES-GCM 解密等微信支付帮助方法。
|
|
97
|
+
- 自定义扩展通过 `V8ExtensionRegistry.Register(name,factory)` 注册为
|
|
98
|
+
`V8.<name>`;不要把某个客户的扩展名写成全平台标准能力。
|
|
99
|
+
|
|
100
|
+
支付/微信/DNS 扩展必须只读取当前租户受控凭据,调用前校验权限、金额、订单状态、
|
|
101
|
+
幂等键和回调签名;私钥、Secret 和原始签名材料不得进入日志或响应。
|
|
102
|
+
|
|
103
|
+
## 其它后端扩展
|
|
104
|
+
|
|
105
|
+
| 能力 | API |
|
|
106
|
+
|---|---|
|
|
107
|
+
| 缓存 | `V8.Cache.Set/Get/Remove/Exists/KeyExist/HashSet/HashGet/HashGetAll/HashDelete/HashIncrement` |
|
|
108
|
+
| HTTP | `V8.Http.Get/Post/Patch`、`GetResponse/PostResponse/PatchResponse` 及真实 `*Async` 版本 |
|
|
109
|
+
| 图片 | `V8.Image.Create/Merge/Overlay/Watermark/Resize/Crop/Rotate/Flip/Draw/Convert/GetInfo/CreateQRCode` |
|
|
110
|
+
| Office | `V8.Office.ExportExcel/ExcelToList/ExportWord/ExportPowerPoint/SendEmail` |
|
|
111
|
+
| 文件 | `V8.HDFS`、`V8.Method.Upload/GetPrivateFileUrl` |
|
|
112
|
+
| MQ | `V8.MQ.SendMsg` |
|
|
113
|
+
| 短信 | `V8.Sms.Send` |
|
|
114
|
+
| 翻译 | `V8.TranslateEngine.Translate` 与语言缓存方法 |
|
|
115
|
+
| 爬虫 | `V8.Spider` |
|
|
116
|
+
| 主机监控 | `V8.System`,仅管理员/运维 |
|
|
117
|
+
| 工作流 | `V8.WFEngine`、事件中的 `V8.WF` |
|
|
118
|
+
|
|
119
|
+
## 全局函数与 CLR 边界
|
|
120
|
+
|
|
121
|
+
| 函数 | 说明 |
|
|
122
|
+
|---|---|
|
|
123
|
+
| `DateNow(format)` | 当前时间字符串 |
|
|
124
|
+
| `DateFormat(value,format)` | 格式化日期 |
|
|
125
|
+
| `DateAdd(value,unit,amount,format)` | 日期加减 |
|
|
126
|
+
| `console.log/error/warn/info` | 服务端日志,必须脱敏限长 |
|
|
127
|
+
|
|
128
|
+
平台能力优先使用 `V8.*`。不要依赖任意全局 `System` CLR 访问;平台还存在
|
|
129
|
+
`V8.System` 主机监控对象,两者不是一回事。
|