\345\270\270\350\247\201\351\227\256\351\242\230/\350\247\206\345\233\276\346\211\251\345\261\225.md
... ...
@@ -1,10 +1,73 @@
1 1
# 后端视图扩展
2 2
3
-B app 对 A app 的视图文件进行扩展。例如增加字段、增加标签页
3
+在开发中,常常需要对已有的视图进行扩展,例如增加字段、添加标签页等。以下是一个详细的示例和说明,展示如何通过 JSONPath 对视图进行扩展。
4 4
5
-## 1. 编写 A 视图
5
+## 1. 语法示例
6 6
7
-## 声明菜单,view 指定视图的类型
7
+```json
8
+{
9
+ "jsonpath": [
10
+ {
11
+ "has_not": "tars",
12
+ "expr": "tbar.打印",
13
+ "position": "after",
14
+ "body": [
15
+ {
16
+ "action": "create",
17
+ "auth": "create",
18
+ "name": "无单据生成",
19
+ "actionAfter": "refreshTable"
20
+ }
21
+ ]
22
+ },
23
+ {
24
+ "expr": "columns.repairDate",
25
+ "position": "before",
26
+ "body": [
27
+ {
28
+ "displayName": "报修单号2扩展",
29
+ "name": "reportNo2",
30
+ "groupConf": {
31
+ "name": "故障信息",
32
+ "id": "repairInfoGroup"
33
+ }
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "expr": "buttons.编辑",
39
+ "position": "before",
40
+ "body": [
41
+ {
42
+ "action": "delete",
43
+ "auth": "delete",
44
+ "name": "删除"
45
+ }
46
+ ]
47
+ }
48
+ ]
49
+}
50
+
51
+```
52
+
53
+**语法介绍**
54
+
55
+- **`has_not`**: 判断某个字段或属性是否存在。如果不存在,则执行创建属性。
56
+- **`expr`**: 指定要扩展的位置,支持简略语法:
57
+ - `columns.name`、`buttons.name`、`tbar.name`:通过 `name` 属性定位。
58
+ - 示例:`tabs[?(@.name=='item_info_tab')]..columns.desc`。
59
+- **`position`**: 指定插入位置,可选值:
60
+ - `after`:插入在指定位置之后。
61
+ - `before`:插入在指定位置之前。
62
+ - `replace`:替换内容。
63
+ - `attributes`:添加属性。
64
+- **`body`**: 扩展的内容,可以是字段、按钮、标签页等。
65
+
66
+
67
+
68
+## 2. 编写 A 视图
69
+
70
+声明菜单,view 指定视图的类型
8 71
9 72
```json
10 73
"mom_material_menu": {
... ...
@@ -20,7 +83,7 @@ B app 对 A app 的视图文件进行扩展。例如增加字段、增加标签
20 83
}
21 84
```
22 85
23
-## 声明 A 的表单视图,这里定义了一个标签页
86
+### 2.1 声明 A 的表单视图,这里定义了一个标签页
24 87
25 88
```json
26 89
{
... ...
@@ -60,8 +123,7 @@ B app 对 A app 的视图文件进行扩展。例如增加字段、增加标签
60 123
}
61 124
```
62 125
63
-## 2. 在 B app 声明视图
64
-
126
+### 2.2 在 B app 声明扩展视图
65 127
66 128
67 129
```json
... ...
@@ -168,8 +230,80 @@ B app 对 A app 的视图文件进行扩展。例如增加字段、增加标签
168 230
169 231
```
170 232
233
+## 4. 常用 `expr` 示例
171 234
172
-## 4. JsonPath语法
235
+- **新增一个字段**:
236
+
237
+ ```json
238
+ {
239
+ "expr": "columns.fieldName",
240
+ "position": "after",
241
+ "body": [
242
+ {
243
+ "name": "newField",
244
+ "displayName": "新字段"
245
+ }
246
+ ]
247
+ }
248
+ ```
249
+
250
+- **替换一个字段**:
251
+
252
+ ```json
253
+ {
254
+ "expr": "columns.fieldName",
255
+ "position": "replace",
256
+ "body": [
257
+ {
258
+ "name": "replacedField",
259
+ "displayName": "替换字段"
260
+ }
261
+ ]
262
+ }
263
+ ```
264
+
265
+- **新增一个按钮**:
266
+
267
+ ```json
268
+ {
269
+ "expr": "buttons.删除",
270
+ "position": "after",
271
+ "body": [
272
+ {
273
+ "name": "newButton",
274
+ "displayName": "新按钮"
275
+ }
276
+ ]
277
+ }
278
+ ```
279
+
280
+- **新增一个标签页**:
281
+
282
+ ```json
283
+ {
284
+ "has_not": "tabs",
285
+ "expr": "tabs[?(@.name=='item_design_info_tab')]",
286
+ "position": "after",
287
+ "body": [
288
+ {
289
+ "header": "采购资料",
290
+ "body": {
291
+ "type": "formPart",
292
+ "model": "Material",
293
+ "columns": [
294
+ "caigouziliao",
295
+ "caigouyuan",
296
+ "caigoutiqianqi"
297
+ ]
298
+ }
299
+ }
300
+ ]
301
+ }
302
+ ```
303
+
304
+##
305
+
306
+## 5. JsonPath语法
173 307
174 308
JsonPath的语法相对简单,它采用开发语言友好的表达式形式,如果你了解类C语言,对JsonPath就不会感到不适应。
175 309
... ...
@@ -266,6 +400,3 @@ JsonPath语法要点:
266 400
267 401
268 402
269
-链接:https://www.jianshu.com/p/9808ab64fc0c
270
-
271
-