7a9cf9afbdad72b69fca79fbedc9dbfaf39afb13
\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 | - |