@steedos/service-plugin-amis 2.6.2-beta.21 → 2.6.2-beta.23

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.
@@ -10,44 +10,497 @@
10
10
  "initFetch": true,
11
11
  "className": "bg-white",
12
12
  "id": "u:bb8612f5bbef",
13
- "onEvent": {
14
- "inited": {
15
- "actions": [
16
- {
17
- "actionType": "custom",
18
- "script": "// 新建页面布局时初始化buttons默认值,字段值是CRUD表格控件渲染,新建页面布局时,不会自动填充到form中,需要手动填充\nconst initDefaultButtons = function (input) {\n const superValues = input.__super.__super || {};\n if (superValues.recordId) {\n // 编辑记录本来就会初始化相关字段值,不需要再初始化\n return;\n }\n return {\n buttons: input.buttons,\n }\n}\n\nconst eventData = event.data;\ndoAction({\n actionType: 'setValue',\n componentId: \"object-layout-form\",\n args: {\n value: initDefaultButtons(eventData)\n }\n});\n"
19
- },
20
- {
21
- "actionType": "custom",
22
- "script": "// 新建页面布局时初始化fields默认值,字段值是CRUD表格控件渲染,新建页面布局时,不会自动填充到form中,需要手动填充\nconst initDefaultFields = function (input) {\n const superValues = input.__super.__super || {};\n if (superValues.recordId) {\n // 编辑记录本来就会初始化相关字段值,不需要再初始化\n return;\n }\n return {\n fields: input.fields,\n }\n}\n\nconst eventData = event.data;\ndoAction({\n actionType: 'setValue',\n componentId: \"object-layout-form\",\n args: {\n value: initDefaultFields(eventData)\n }\n});\n"
13
+ "label": "对象表单",
14
+ "objectApiName": "object_layouts",
15
+ "recordId": "${recordId}",
16
+ "enableTabs": true,
17
+ "debug": false,
18
+ "fieldsExtend": {
19
+ "profiles": {
20
+ "amis": {
21
+ "type": "select",
22
+ "name": "profiles",
23
+ "required": true,
24
+ "joinValues": false,
25
+ "extractValue": true,
26
+ "labelField": "label",
27
+ "multiple": true,
28
+ "labelClassName": "text-left",
29
+ "checkAll": true,
30
+ "source": {
31
+ "method": "post",
32
+ "url": "${context.rootUrl}/graphql",
33
+ "data": {
34
+ "query": "{options:permission_set(filters: [\"type\", \"=\", \"profile\"]){name,label}}"
35
+ },
36
+ "requestAdaptor": "",
37
+ "adaptor": "",
38
+ "headers": {
39
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
40
+ }
23
41
  },
24
- {
25
- "actionType": "custom",
26
- "script": "// 新建页面布局时初始化related_lists默认值,字段值是CRUD表格控件渲染,新建页面布局时,不会自动填充到form中,需要手动填充\nconst initDefaultRelatedLists = function (input, rowValue, prop_name) {\n const superValues = input.__super.__super || {};\n if (superValues.recordId) {\n // 编辑记录本来就会初始化相关字段值,不需要再初始化\n return;\n }\n return {\n related_lists: input.related_lists,\n }\n}\n\nconst eventData = event.data;\ndoAction({\n actionType: 'setValue',\n componentId: \"object-layout-form\",\n args: {\n value: initDefaultRelatedLists(eventData)\n }\n});\n"
27
- }
28
- ]
42
+ "valueField": "name",
43
+ "searchable": true,
44
+ "id": "u:3c65447a8a6e",
45
+ "defaultCheckAll": false,
46
+ "checkAllLabel": "全选",
47
+ "autoComplete": "",
48
+ "menuTpl": ""
49
+ }
29
50
  },
30
- "submitSucc": {
31
- "weight": 0,
32
- "actions": [
33
- {
34
- "actionType": "broadcast",
35
- "args": {
36
- "eventName": "@data.changed.object_layouts"
37
- },
38
- "data": {
39
- "objectName": "object_layouts"
51
+ "buttons": {
52
+ "label": "",
53
+ "amis": {
54
+ "headerToolbar": [
55
+ {
56
+ "type": "button",
57
+ "actionType": "dialog",
58
+ "dialog": {
59
+ "title": "${'object_layouts.object_layouts_form.button_set' | t}",
60
+ "body": [
61
+ {
62
+ "type": "transfer",
63
+ "name": "picked_buttons",
64
+ "sortable": true,
65
+ "source": {
66
+ "method": "get",
67
+ "url": "${context.rootUrl}/service/api/amis-metadata-objects/objects/${object_name}/actions/options",
68
+ "sendOn": "!!this.object_name",
69
+ "headers": {
70
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
71
+ },
72
+ "cache": 120000
73
+ },
74
+ "value": "${buttons|pick:button_name|split}",
75
+ "searchable": true,
76
+ "id": "u:d6e067c40e83",
77
+ "joinValues": false,
78
+ "extractValue": true
79
+ }
80
+ ],
81
+ "onEvent": {
82
+ "confirm": {
83
+ "actions": [
84
+ {
85
+ "actionType": "custom",
86
+ "script": "const buttons = [];\nconst picked_buttons = _.cloneDeep(event.data.picked_buttons);\n_.forEach(picked_buttons, function (button) {\n const table_button = _.find(event.data.buttons, { button_name: button });\n if (table_button) {\n buttons.push(table_button)\n } else {\n buttons.push({\n button_name: button\n })\n }\n})\ndoAction({\n \"componentId\": \"object-layout-form\",\n \"actionType\": \"setValue\",\n \"args\": {\n \"value\": {\n buttons\n }\n }\n});"
87
+ }
88
+ ]
89
+ }
90
+ },
91
+ "type": "dialog",
92
+ "id": "u:a0027ac6f8c1",
93
+ "closeOnEsc": false,
94
+ "closeOnOutside": false,
95
+ "showCloseButton": true,
96
+ "size": "md"
97
+ },
98
+ "label": "${'object_layouts.object_layouts_form.button_set' | t}",
99
+ "className": "mb-2",
100
+ "id": "u:1ac8afc8a9bb"
40
101
  }
102
+ ],
103
+ "addable": false,
104
+ "draggable": false,
105
+ "id": "u:1120663b07c6",
106
+ "dialog": {
107
+ "title": "按钮明细"
41
108
  }
42
- ]
109
+ }
110
+ },
111
+ "fields": {
112
+ "amis": {
113
+ "type": "service",
114
+ "body": [
115
+ {
116
+ "name": "fields",
117
+ "required": true,
118
+ "type": "steedos-input-table",
119
+ "fields": [
120
+ {
121
+ "name": "field_name",
122
+ "label": "${'object_layouts.object_layouts_form.fields' | t}",
123
+ "type": "select",
124
+ "amis": {
125
+ "source": "${fields_options}",
126
+ "menuTpl": "",
127
+ "id": "u:beecbd5b6b69"
128
+ },
129
+ "id": "u:b95c69a1cd84"
130
+ },
131
+ {
132
+ "name": "is_readonly",
133
+ "label": "${'object_layouts.object_layouts_form.readonly' | t}",
134
+ "id": "u:5081e6e1af55",
135
+ "type": "boolean",
136
+ "placeholder": "-"
137
+ },
138
+ {
139
+ "name": "is_required",
140
+ "label": "${'object_layouts.object_layouts_form.required' | t}",
141
+ "id": "u:e54afb5cc05c",
142
+ "type": "boolean",
143
+ "placeholder": "-"
144
+ },
145
+ {
146
+ "name": "group",
147
+ "label": "${'object_layouts.object_layouts_form.grouping' | t}",
148
+ "type": "select",
149
+ "amis": {
150
+ "className": "m-0",
151
+ "source": "${field_groups|pick:group_name}",
152
+ "checkAll": false,
153
+ "selectFirst": false,
154
+ "searchable": true,
155
+ "clearable": true,
156
+ "id": "u:f75ddc45d296",
157
+ "multiple": false,
158
+ "mode": "popOver"
159
+ },
160
+ "id": "u:e532b1949676",
161
+ "placeholder": "-"
162
+ },
163
+ {
164
+ "name": "visible_on",
165
+ "label": "${'object_layouts.object_layouts_form.visibile_on' | t}",
166
+ "breakpoint": "*",
167
+ "id": "u:e3618b8b4c52",
168
+ "type": "textarea",
169
+ "placeholder": "-"
170
+ }
171
+ ],
172
+ "headerToolbar": [
173
+ {
174
+ "type": "button",
175
+ "actionType": "dialog",
176
+ "dialog": {
177
+ "title": "${'object_layouts.object_layouts_form.field_set' | t}",
178
+ "body": [
179
+ {
180
+ "type": "transfer",
181
+ "name": "picked_fields",
182
+ "sortable": true,
183
+ "source": "${fields_options}",
184
+ "value": "${fields|pick:field_name|split}",
185
+ "joinValues": false,
186
+ "extractValue": true,
187
+ "searchable": true,
188
+ "id": "u:502c4ecd81b6"
189
+ }
190
+ ],
191
+ "onEvent": {
192
+ "confirm": {
193
+ "actions": [
194
+ {
195
+ "actionType": "custom",
196
+ "script": "var fields = [];\nvar picked_fields = _.cloneDeep(event.data.picked_fields);\n\n_.forEach(picked_fields, function (field) {\n var table_field = _.find(event.data.fields, { field_name: field });\n if (table_field) {\n fields.push(table_field);\n } else {\n fields.push({\n field_name: field\n });\n }\n});\n\n// 将 fields 分为 group 为空和非空的两部分\nvar groupsPartition = _.partition(fields, function(item) {\n return !item.group;\n});\nvar emptyGroups = groupsPartition[0];\nvar nonEmptyGroups = groupsPartition[1];\n\n// 创建排序映射\nvar sortOrderMap = _.fromPairs(_.map(event.data.field_groups, function(item, index) {\n return [item.group_name, index];\n}));\n\n// 对非空 group 的部分进行排序\nvar sortedNonEmptyGroups = _.sortBy(nonEmptyGroups, function(item) {\n return sortOrderMap[item.group];\n});\n\n// 合并两个数组,空 group 的部分在前\nfields = emptyGroups.concat(sortedNonEmptyGroups);\n\ndoAction({\n \"componentId\": \"object-layout-form\",\n \"actionType\": \"setValue\",\n \"args\": {\n \"value\": {\n fields: fields\n }\n }\n});\n"
197
+ }
198
+ ]
199
+ }
200
+ },
201
+ "type": "dialog",
202
+ "size": "md",
203
+ "id": "u:c405734543e0",
204
+ "closeOnEsc": false,
205
+ "closeOnOutside": false,
206
+ "showCloseButton": true
207
+ },
208
+ "label": "${'object_layouts.object_layouts_form.field_set' | t}",
209
+ "id": "u:853b890ab524",
210
+ "className": "mb-2"
211
+ },
212
+ {
213
+ "type": "button",
214
+ "actionType": "dialog",
215
+ "dialog": {
216
+ "title": "${'object_layouts.object_layouts_form.grouping_set' | t}",
217
+ "size": "lg",
218
+ "body": [
219
+ {
220
+ "type": "form",
221
+ "mode": "normal",
222
+ "body": [
223
+ {
224
+ "type": "steedos-input-table",
225
+ "name": "field_groups",
226
+ "addable": true,
227
+ "draggable": true,
228
+ "editable": true,
229
+ "fields": [
230
+ {
231
+ "name": "group_name",
232
+ "type": "text",
233
+ "label": "${'object_layouts.object_layouts_form.group_name' | t}",
234
+ "id": "u:ee2fb813a3e7"
235
+ },
236
+ {
237
+ "type": "text",
238
+ "name": "visible_on",
239
+ "label": "${'object_layouts.object_layouts_form.visible_on' | t}"
240
+ }
241
+ ],
242
+ "id": "u:e9f43ef94d08"
243
+ }
244
+ ]
245
+ }
246
+ ],
247
+ "onEvent": {
248
+ "confirm": {
249
+ "actions": [
250
+ {
251
+ "actionType": "custom",
252
+ "args": {},
253
+ "componentId": "",
254
+ "script": "var field_groups = _.cloneDeep(event.data.field_groups);\nvar fields = _.cloneDeep(event.data.fields);\n\n// 将数组分为 group 为空和非空的两部分\nvar groupsPartition = _.partition(fields, function(item) {\n return !item.group;\n});\nvar emptyGroups = groupsPartition[0];\nvar nonEmptyGroups = groupsPartition[1];\n\n// 创建排序映射\nvar sortOrderMap = _.fromPairs(_.map(field_groups, function(item, index) {\n return [item.group_name, index];\n}));\n\n// 对非空 group 的部分进行排序\nvar sortedNonEmptyGroups = _.sortBy(nonEmptyGroups, function(item) {\n return sortOrderMap[item.group];\n});\n\n// 合并两个数组,空 group 的部分在前\nfields = emptyGroups.concat(sortedNonEmptyGroups);\n\ndoAction({\n \"componentId\": \"object-layout-form\",\n \"actionType\": \"setValue\",\n \"args\": {\n \"value\": {\n field_groups: field_groups,\n fields: fields\n }\n }\n});\n"
255
+ }
256
+ ]
257
+ }
258
+ },
259
+ "type": "dialog",
260
+ "id": "u:e02c8f59216e",
261
+ "closeOnEsc": false,
262
+ "closeOnOutside": false,
263
+ "showCloseButton": true
264
+ },
265
+ "label": "${'object_layouts.object_layouts_form.grouping_set' | t}",
266
+ "id": "u:ec9931ea883c",
267
+ "className": "mb-2"
268
+ }
269
+ ],
270
+ "editable": true,
271
+ "removable": true,
272
+ "showIndex": true,
273
+ "id": "u:22121edc42b1",
274
+ "amis": {
275
+ "columnsTogglable": false
276
+ },
277
+ "dialog": {
278
+ "title": "字段明细",
279
+ "onEvent": {
280
+ "confirm": {
281
+ "actions": [
282
+ {
283
+ "actionType": "custom",
284
+ "script": "var eventForm = event.context.scoped.getComponentById('object-layout-form');\nsetTimeout(function() {\n var form = eventForm;\n var data = form && _.clone(form.getData());\n var fields = data.fields;\n var field_groups = data.field_groups;\n\n // 将fields分为 group 为空和非空的两部分\n var groupsPartition = _.partition(fields, function(item) {\n return !item.group;\n });\n var emptyGroups = groupsPartition[0];\n var nonEmptyGroups = groupsPartition[1];\n\n // 创建排序映射\n var sortOrderMap = _.fromPairs(_.map(field_groups, function(item, index) {\n return [item.group_name, index];\n }));\n\n // 对非空 group 的部分进行排序\n var sortedNonEmptyGroups = _.sortBy(nonEmptyGroups, function(item) {\n return sortOrderMap[item.group];\n });\n\n // 合并两个数组,空 group 的部分在前\n fields = emptyGroups.concat(sortedNonEmptyGroups);\n form.setValues({ fields: fields });\n}, 500);"
285
+ }
286
+ ]
287
+ },
288
+ "cancel": {
289
+ "actions": [
290
+ {
291
+ "actionType": "custom",
292
+ "script": "var form = event.context.scoped.getComponentById('object-layout-form');\nvar data = form && _.clone(form.getData());\nvar fields = data.fields;\nvar field_groups = data.field_groups;\n\n// 将 fields 分为 group 为空和非空的两部分\nvar groupsPartition = _.partition(fields, function(item) {\n return !item.group;\n});\nvar emptyGroups = groupsPartition[0];\nvar nonEmptyGroups = groupsPartition[1];\n\n// 创建排序映射\nvar sortOrderMap = _.fromPairs(_.map(field_groups, function(item, index) {\n return [item.group_name, index];\n}));\n\n// 对非空 group 的部分进行排序\nvar sortedNonEmptyGroups = _.sortBy(nonEmptyGroups, function(item) {\n return sortOrderMap[item.group];\n});\n\n// 合并两个数组,空 group 的部分在前\nfields = emptyGroups.concat(sortedNonEmptyGroups);\nform.setValues({fields: fields});"
293
+ }
294
+ ]
295
+ }
296
+ }
297
+ }
298
+ }
299
+ ],
300
+ "id": "u:ac5b7818b88f",
301
+ "affixFooter": false,
302
+ "api": {
303
+ "method": "get",
304
+ "url": "${context.rootUrl}/service/api/amis-metadata-objects/objects/${object_name}/fields/layout_options",
305
+ "adaptor": "let data = payload.data;data.fields_options = data.options;data.field_groups_options = lodash.uniq(lodash.compact(lodash.map(data.options, \"group\"))) || [];delete data.options;payload.data = data; return payload;",
306
+ "sendOn": "!!this.object_name",
307
+ "data": null,
308
+ "headers": {
309
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
310
+ }
311
+ },
312
+ "className": "col-span-2 m-0",
313
+ "placeholder": "-",
314
+ "onEvent": {
315
+ "fetchInited": {
316
+ "actions": [
317
+ {
318
+ "actionType": "custom",
319
+ "script": "const mixingGroupsFromFields = function (input, formData) { const groupsOptions = input.field_groups_options; const groups = formData.field_groups || []; const object_field_groups = formData.object_field_groups || []; const groupsForMixing = groupsOptions.map(function (item) { return { group_name: item } }); const mixedGroups = lodash.unionBy(groups, groupsForMixing, object_field_groups, \"group_name\"); return { field_groups: mixedGroups }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \"object-layout-form\", args: { value: mixingGroupsFromFields(eventData, context.props.data) }});"
320
+ }
321
+ ]
322
+ }
323
+ },
324
+ "messages": {}
325
+ }
326
+ },
327
+ "related_lists": {
328
+ "amis": {
329
+ "type": "service",
330
+ "id": "u:dbadaff47153",
331
+ "api": {
332
+ "method": "get",
333
+ "url": "${context.rootUrl}/service/api/amis-metadata-objects/objects/${object_name}/relatedLists/options",
334
+ "sendOn": "!!this.object_name",
335
+ "adaptor": "let data = payload.data;data.related_lists_options = data.options;delete data.options;payload.data = data;return payload;",
336
+ "headers": {
337
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
338
+ }
339
+ },
340
+ "className": "col-span-2 m-0",
341
+ "affixFooter": false,
342
+ "body": [
343
+ {
344
+ "name": "related_lists",
345
+ "type": "steedos-input-table",
346
+ "editable": true,
347
+ "removable": true,
348
+ "draggable": false,
349
+ "showIndex": true,
350
+ "columns": [
351
+ "related_field_fullname",
352
+ "label",
353
+ "field_names",
354
+ "visible_on"
355
+ ],
356
+ "fields": [
357
+ {
358
+ "name": "related_field_fullname",
359
+ "label": "${'object_layouts.object_layouts_form.related_list_name' | t}",
360
+ "type": "select",
361
+ "amis": {
362
+ "source": "${related_lists_options}",
363
+ "menuTpl": "",
364
+ "id": "u:beecbd5b6b69"
365
+ },
366
+ "id": "u:5204fc0fbe1c"
367
+ },
368
+ {
369
+ "name": "label",
370
+ "label": "${'object_layouts.object_layouts_form.related_list_label' | t}",
371
+ "type": "text",
372
+ "id": "u:1267e4351d66",
373
+ "placeholder": "-"
374
+ },
375
+ {
376
+ "name": "field_names",
377
+ "label": "${'object_layouts.object_layouts_form.field_names' | t}",
378
+ "type": "select",
379
+ "amis": {
380
+ "source": {
381
+ "method": "get",
382
+ "url": "/service/api/amis-metadata-objects/objects/${related_field_fullname|split:.|first}/fields/options",
383
+ "cache": 60000,
384
+ "headers": {
385
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
386
+ }
387
+ },
388
+ "id": "u:e2ece172d739"
389
+ },
390
+ "id": "u:ce65d4020107",
391
+ "placeholder": "-"
392
+ },
393
+ {
394
+ "name": "sort_field_name",
395
+ "label": "${'object_layouts.object_layouts_form.sort_field_name' | t}",
396
+ "type": "select",
397
+ "amis": {
398
+ "source": {
399
+ "method": "get",
400
+ "url": "/service/api/amis-metadata-objects/objects/${related_field_fullname|split:.|first}/fields/options",
401
+ "cache": 60000,
402
+ "headers": {
403
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
404
+ }
405
+ }
406
+ },
407
+ "id": "u:3dbee6a855c4",
408
+ "multiple": true
409
+ },
410
+ {
411
+ "name": "sort_order",
412
+ "label": "${'object_layouts.object_layouts_form.sort_order' | t}",
413
+ "type": "select",
414
+ "amis": {
415
+ "source": "${sort_order_options}"
416
+ },
417
+ "id": "u:13cb3d304615"
418
+ },
419
+ {
420
+ "name": "filters",
421
+ "label": "${'object_layouts.object_layouts_form.filters_rule' | t}",
422
+ "type": "code",
423
+ "amis": {
424
+ "language": "javascript",
425
+ "description": "${'object_layouts.object_layouts_form.filters_rule_description' | t}",
426
+ "minRows": 3,
427
+ "maxRows": 20
428
+ },
429
+ "breakpoint": "*",
430
+ "id": "u:e4c367804b67"
431
+ },
432
+ {
433
+ "name": "visible_on",
434
+ "label": "${'object_layouts.object_layouts_form.visibile_on' | t}",
435
+ "type": "text",
436
+ "breakpoint": "*",
437
+ "id": "u:1e1dc52d7c33"
438
+ },
439
+ {
440
+ "name": "page_size",
441
+ "label": "${'object_layouts.object_layouts_form.page_size' | t}",
442
+ "type": "number",
443
+ "breakpoint": "*",
444
+ "id": "u:f9bbd9567bbd"
445
+ }
446
+ ],
447
+ "headerToolbar": [
448
+ {
449
+ "type": "button",
450
+ "actionType": "dialog",
451
+ "dialog": {
452
+ "title": "${'object_layouts.object_layouts_form.set_related_list' | t}",
453
+ "body": [
454
+ {
455
+ "type": "transfer",
456
+ "name": "picked_related_lists",
457
+ "sortable": true,
458
+ "source": "${related_lists_options}",
459
+ "value": "${related_lists|pick:related_field_fullname | split}",
460
+ "searchable": true,
461
+ "id": "u:ab6a6c9c8677",
462
+ "joinValues": false,
463
+ "extractValue": true
464
+ }
465
+ ],
466
+ "onEvent": {
467
+ "confirm": {
468
+ "actions": [
469
+ {
470
+ "actionType": "custom",
471
+ "script": "const related_lists = [];\nconst picked_related_lists = _.cloneDeep(event.data.picked_related_lists);\n_.forEach(picked_related_lists, function (related_list) {\n const table_related_list = _.find(event.data.related_lists, { related_field_fullname: related_list });\n if (table_related_list) {\n related_lists.push(table_related_list)\n } else {\n related_lists.push({\n related_field_fullname: related_list,sort_order: \"asc\"\n })\n }\n})\ndoAction({\n \"componentId\": \"object-layout-form\",\n \"actionType\": \"setValue\",\n \"args\": {\n \"value\": {\n related_lists\n }\n }\n});"
472
+ }
473
+ ]
474
+ }
475
+ },
476
+ "type": "dialog",
477
+ "size": "md",
478
+ "id": "u:3663990f226a",
479
+ "closeOnEsc": false,
480
+ "closeOnOutside": false,
481
+ "showCloseButton": true
482
+ },
483
+ "label": "${'object_layouts.object_layouts_form.set_related_list' | t}",
484
+ "id": "u:b9a5d3b611d7",
485
+ "className": "mb-2"
486
+ }
487
+ ],
488
+ "id": "u:95aea10231d3",
489
+ "amis": {
490
+ "columnsTogglable": false
491
+ },
492
+ "dialog": {
493
+ "title": "子表明细"
494
+ }
495
+ }
496
+ ],
497
+ "messages": {}
498
+ }
499
+ },
500
+ "field_groups": {
501
+ "hidden": true
43
502
  }
44
503
  },
45
- "label": "对象表单",
46
- "objectApiName": "object_layouts",
47
- "recordId": "${recordId}",
48
- "enableTabs": true,
49
- "debug": false,
50
- "fieldsExtend": "{\n \"profiles\":{\n \"amis\":{\n \"type\": \"select\",\n \"name\": \"profiles\",\n \"required\": true,\n \"joinValues\": false,\n \"extractValue\": true,\n \"labelField\": \"label\",\n \"multiple\": true,\n \"labelClassName\": \"text-left\",\n \"checkAll\": true,\n \"source\": {\n \"method\": \"post\",\n \"url\": \"\\${context.rootUrl}/graphql\",\n \"data\": {\n \"query\": \"{options:permission_set(filters: [\\\"type\\\", \\\"=\\\", \\\"profile\\\"]){name,label}}\"\n },\n \"requestAdaptor\": \"\",\n \"adaptor\": \"\",\n \"headers\": {\n \"Authorization\": \"Bearer \\${context.tenantId},\\${context.authToken}\"\n }\n },\n \"valueField\": \"name\",\n \"searchable\": true,\n \"id\": \"u:3c65447a8a6e\",\n \"defaultCheckAll\": false,\n \"checkAllLabel\": \"全选\",\n \"autoComplete\":\"\",\n \"menuTpl\":\"\"\n }\n },\n \"buttons\": {\n \"amis\": {\n \"type\":\"service\",\n \"body\":[\n {\n \"type\": \"crud\",\n \"name\": \"buttons\",\n \"label\": \"按钮\",\n \"strictMode\": true,\n \"affixHeader\": false,\n \"editable\": true,\n \"addable\": false,\n \"removable\": true,\n \"draggable\": false,\n \"columns\": [\n {\n \"name\": \"button_name_label\",\n \"label\": \"\\${'object_layouts.object_layouts_form.button_name_label' | t}\",\n \"type\": \"tpl\",\n \"tpl\": \"\\${buttons_options|filter:value:equals:button_name|pick:label}\",\n \"id\": \"u:302f8fadccd3\"\n },\n {\n \"name\": \"visible_on\",\n \"label\": \"\\${'object_layouts.object_layouts_form.visibile_on' | t}\",\n \"className\": \"w-6/12\",\n \"quickEdit\": {\n \"type\": \"input-text\",\n \"className\": \"m-0\",\n \"labelClassName\": \"text-left\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForButton = function (input, prop_name) { let currentPropValue = input.value; const rowValue = input.__super; const formValue = input.__super.__super.__super; const button_name = rowValue.button_name; if (currentPropValue.startsWith(\\\"\\\\$\\\\{\\\")) { currentPropValue = \\\"\\\\\\\\\\\" + currentPropValue }; rowValue[prop_name] = currentPropValue; let newButtons = formValue.buttons.map(function (item) { if (item.button_name == button_name) { return Object.assign({}, item, rowValue); } else { return item; } }); return { buttons: newButtons }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForButton(eventData, \\\"visible_on\\\") }});\"\n }\n ]\n }\n },\n \"tpl\": \"<b><%=data.visible_on%></b>\",\n \"name\": \"visible_on\",\n \"id\": \"u:daa771bd34b9\",\n \"mode\": \"popOver\"\n },\n \"id\": \"u:3c35211aa1a0\",\n \"placeholder\": \"-\"\n }\n ],\n \"className\": \"col-span-2 m-0\",\n \"labelClassName\": \"text-left\",\n \"footable\": false,\n \"headerToolbar\": [\n {\n \"type\": \"button\",\n \"actionType\": \"dialog\",\n \"dialog\": {\n \"title\": \"\\${'object_layouts.object_layouts_form.button_set' | t}\",\n \"body\": [\n {\n \"type\": \"transfer\",\n \"name\": \"picked_buttons\",\n \"sortable\": true,\n \"source\": \"\\${buttons_options}\",\n \"value\": \"\\${buttons|pick:button_name}\",\n \"searchable\": true,\n \"id\": \"u:d6e067c40e83\"\n }\n ],\n \"onEvent\": {\n \"confirm\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const clearButtons = function (input) { return { buttons: [] }};const convertDataForButtons = function (input) { let pickedButtons = input.picked_buttons || []; const superButtons = _.keyBy(input.__super.buttons, 'button_name'); if (typeof pickedButtons === \\\"string\\\") { pickedButtons = pickedButtons.split(\\\",\\\"); }; const convertedButtons = pickedButtons.map(function (key) { return superButtons[key] || { button_name: key } }); return { buttons: convertedButtons }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: clearButtons() }});setTimeout(function () { doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: convertDataForButtons(eventData) } });}, 300);\"\n }\n ]\n }\n },\n \"type\": \"dialog\",\n \"id\": \"u:a0027ac6f8c1\",\n \"closeOnEsc\": false,\n \"closeOnOutside\": false,\n \"showCloseButton\": true,\n \"size\": \"md\"\n },\n \"label\": \"\\${'object_layouts.object_layouts_form.button_set' | t}\",\n \"id\": \"u:1ac8afc8a9bb\"\n }\n ],\n \"headerToolbarClassName\": \"px-1 pb-3\",\n \"source\": \"\\${buttons}\",\n \"id\": \"u:a5d43b752494\",\n \"perPageAvailable\": [\n 10\n ],\n \"messages\": {},\n \"onEvent\": {\n \"rowClick\": {\n \"weight\": 0,\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForButton = function (input, prop_name) { const currentPropValue = input.value; const rowValue = input.__super; const formValue = input.__super.__super.__super; const button_name = rowValue.button_name;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForButton(eventData, \\\"visible_on\\\") }});\"\n }\n ]\n }\n }\n }\n ],\n \"api\": {\n \"method\": \"get\",\n \"url\": \"\\${context.rootUrl}/service/api/amis-metadata-objects/objects/\\${object_name}/actions/options\",\n \"adaptor\": \"let data = payload.data;data.buttons_options = data.options;delete data.options;payload.data = data;return payload;\",\n \"sendOn\": \"!!this.object_name\",\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n \n }\n },\n \"fields\":{\n \"amis\":{\n \"type\": \"service\",\n \"body\": [\n {\n \"name\": \"fields\",\n \"required\": true,\n \"type\": \"crud\",\n \"strictMode\": true,\n \"affixHeader\": false,\n \"editable\": true,\n \"addable\": false,\n \"removable\": true,\n \"draggable\": false,\n \"columns\": [\n {\n \"name\": \"field_name_label\",\n \"label\": \"\\${'object_layouts.object_layouts_form.fields' | t}\",\n \"type\": \"tpl\",\n \"tpl\": \"\\${fields_options|filter:value:equals:field_name|pick:label}\",\n \"id\": \"u:b95c69a1cd84\"\n },\n {\n \"name\": \"is_readonly\",\n \"label\": \"\\${'object_layouts.object_layouts_form.readonly' | t}\",\n \"quickEdit\": {\n \"type\": \"checkbox\",\n \"tpl\": null,\n \"className\": \"m-0\",\n \"labelClassName\": \"text-left\",\n \"mode\": \"inline\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const fieldGroupKey = \\\"group\\\";const getFieldsSortFun = function (groupNames) { return function (m, n) { var tempM = !!m[fieldGroupKey] ? 1 : 0; var tempN = !!n[fieldGroupKey] ? 1 : 0; if (!m[fieldGroupKey] || !n[fieldGroupKey]) { return tempM - tempN; } return groupNames.indexOf(m[fieldGroupKey]) - groupNames.indexOf(n[fieldGroupKey]); };};const quickEidtSaveForField = function (input, prop_name) { const currentPropValue = input.value; const rowValue = input.__super; const formValue = input.__super.__super.__super; const field_name = rowValue.field_name; rowValue[prop_name] = currentPropValue; let newFields = formValue.fields.map(function (item) { if (item.field_name == field_name) { return Object.assign({}, item, rowValue); } else { return item; } }); const fieldGroups = input.__super.__super.field_groups; const groupNames = lodash.compact(lodash.map(fieldGroups, \\\"group_name\\\")); newFields.sort(getFieldsSortFun(groupNames)); return { fields: newFields }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForField(eventData, \\\"is_readonly\\\") }});\"\n }\n ]\n }\n },\n \"id\": \"u:8cb44f3db16c\",\n \"name\": \"is_readonly\"\n },\n \"id\": \"u:5081e6e1af55\",\n \"placeholder\": \"-\"\n },\n {\n \"name\": \"is_required\",\n \"label\": \"\\${'object_layouts.object_layouts_form.required' | t}\",\n \"quickEdit\": {\n \"mode\": \"inline\",\n \"type\": \"checkbox\",\n \"className\": \"m-0\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const fieldGroupKey = \\\"group\\\";const getFieldsSortFun = function (groupNames) { return function (m, n) { var tempM = !!m[fieldGroupKey] ? 1 : 0; var tempN = !!n[fieldGroupKey] ? 1 : 0; if (!m[fieldGroupKey] || !n[fieldGroupKey]) { return tempM - tempN; } return groupNames.indexOf(m[fieldGroupKey]) - groupNames.indexOf(n[fieldGroupKey]); };};const quickEidtSaveForField = function (input, prop_name) { const currentPropValue = input.value; const rowValue = input.__super; const formValue = input.__super.__super.__super; const field_name = rowValue.field_name; rowValue[prop_name] = currentPropValue; let newFields = formValue.fields.map(function (item) { if (item.field_name == field_name) { return Object.assign({}, item, rowValue); } else { return item; } }); const fieldGroups = input.__super.__super.field_groups; const groupNames = lodash.compact(lodash.map(fieldGroups, \\\"group_name\\\")); newFields.sort(getFieldsSortFun(groupNames)); return { fields: newFields }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForField(eventData, \\\"is_required\\\") }});\"\n }\n ]\n }\n },\n \"tpl\": null,\n \"labelClassName\": \"text-left\",\n \"id\": \"u:bbd1c15b6504\",\n \"name\": \"is_required\"\n },\n \"id\": \"u:e54afb5cc05c\",\n \"placeholder\": \"-\"\n },\n {\n \"name\": \"group\",\n \"label\": \"\\${'object_layouts.object_layouts_form.grouping' | t}\",\n \"quickEdit\": {\n \"type\": \"select\",\n \"className\": \"m-0\",\n \"source\": \"\\${field_groups|pick:group_name}\",\n \"checkAll\": false,\n \"selectFirst\": false,\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const fieldGroupKey = \\\"group\\\"; const getFieldsSortFun = function (groupNames) { return function (m, n) { var tempM = !!m[fieldGroupKey] ? 1 : 0; var tempN = !!n[fieldGroupKey] ? 1 : 0; if (!m[fieldGroupKey] || !n[fieldGroupKey]) { return tempM - tempN; } return groupNames.indexOf(m[fieldGroupKey]) - groupNames.indexOf(n[fieldGroupKey]); }; }; const quickEidtSaveForField = function (input, prop_name) { const currentPropValue = input.value; const rowValue = input.__super; const formValue = input.__super.__super.__super; const field_name = rowValue.field_name; rowValue[prop_name] = currentPropValue; let newFields = formValue.fields.map(function (item) { if (item.field_name == field_name) { return Object.assign({}, item, rowValue); } else { return item; } }); const fieldGroups = input.__super.__super.field_groups; const groupNames = lodash.compact(lodash.map(fieldGroups, \\\"group_name\\\")); newFields.sort(getFieldsSortFun(groupNames)); return { fields: newFields } }; const eventData = event.data; const clearFields = function (input) { return { fields: [] } };doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: clearFields() }});setTimeout(function () { doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForField(eventData, \\\"group\\\") } });}, 300);\"\n }\n ]\n }\n },\n \"searchable\": true,\n \"clearable\": true,\n \"name\": \"group\",\n \"id\": \"u:f75ddc45d296\",\n \"multiple\": false,\n \"mode\": \"popOver\"\n },\n \"id\": \"u:e532b1949676\",\n \"placeholder\": \"-\"\n },\n {\n \"name\": \"visible_on\",\n \"label\": \"\\${'object_layouts.object_layouts_form.visibile_on' | t}\",\n \"quickEdit\": {\n \"type\": \"input-text\",\n \"tpl\": \"<b><%=data.visible_on%></b>\",\n \"className\": \"m-0\",\n \"labelClassName\": \"text-left\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const fieldGroupKey = \\\"group\\\";const getFieldsSortFun = function (groupNames) { return function (m, n) { var tempM = !!m[fieldGroupKey] ? 1 : 0; var tempN = !!n[fieldGroupKey] ? 1 : 0; if (!m[fieldGroupKey] || !n[fieldGroupKey]) { return tempM - tempN; } return groupNames.indexOf(m[fieldGroupKey]) - groupNames.indexOf(n[fieldGroupKey]); };};const quickEidtSaveForField = function (input, prop_name) { let currentPropValue = input.value; const rowValue = input.__super; const formValue = input.__super.__super.__super; const field_name = rowValue.field_name; if (currentPropValue.startsWith(\\\"\\\\$\\\\{\\\")) { currentPropValue = \\\"\\\\\\\\\\\" + currentPropValue }; rowValue[prop_name] = currentPropValue; let newFields = formValue.fields.map(function (item) { if (item.field_name == field_name) { return Object.assign({}, item, rowValue); } else { return item; } }); const fieldGroups = input.__super.__super.field_groups; const groupNames = lodash.compact(lodash.map(fieldGroups, \\\"group_name\\\")); newFields.sort(getFieldsSortFun(groupNames)); return { fields: newFields }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForField(eventData, \\\"visible_on\\\") }});\"\n }\n ]\n }\n },\n \"name\": \"visible_on\",\n \"id\": \"u:624913811ecc\",\n \"minRows\": 3,\n \"maxRows\": 20,\n \"mode\": \"popOver\"\n },\n \"breakpoint\": \"*\",\n \"id\": \"u:e3618b8b4c52\",\n \"placeholder\": \"-\"\n }\n ],\n \"className\": \"col-span-2 m-0\",\n \"labelClassName\": \"text-left\",\n \"source\": \"\\${fields}\",\n \"footable\": false,\n \"headerToolbar\": [\n {\n \"type\": \"button\",\n \"actionType\": \"dialog\",\n \"dialog\": {\n \"title\": \"\\${'object_layouts.object_layouts_form.field_set' | t}\",\n \"body\": [\n {\n \"type\": \"transfer\",\n \"name\": \"picked_fields\",\n \"sortable\": true,\n \"source\": \"\\${fields_options}\",\n \"value\": \"\\${fields|pick:field_name}\",\n \"searchable\": true,\n \"id\": \"u:502c4ecd81b6\"\n }\n ],\n \"onEvent\": {\n \"confirm\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const fieldGroupKey = \\\"group\\\";const getFieldsSortFun = function (groupNames) { return function (m, n) { var tempM = !!m[fieldGroupKey] ? 1 : 0; var tempN = !!n[fieldGroupKey] ? 1 : 0; if (!m[fieldGroupKey] || !n[fieldGroupKey]) { return tempM - tempN; }; return groupNames.indexOf(m[fieldGroupKey]) - groupNames.indexOf(n[fieldGroupKey]); };};const clearFields = function (input) { return { fields: [] }};const convertDataForFields = function (input) { let pickedFields = input.picked_fields || []; const superFields = _.keyBy(input.__super.fields, 'field_name'); if (typeof pickedFields === \\\"string\\\") { pickedFields = pickedFields.split(\\\",\\\"); }; const fieldOptions = lodash.keyBy(input.__super.__super.__super.__super.__super.fields_options, \\\"value\\\"); const convertedFields = pickedFields.map(function (field_name) { const superField = superFields[field_name]; if (superField) { return superField; } else { const fieldOption = fieldOptions[field_name]; return { field_name: field_name, is_readonly: fieldOption.readonly, is_required: fieldOption.required, group: fieldOption.group } } }); const fieldGroups = input.__super.__super.__super.__super.__super.field_groups; const groupNames = lodash.compact(lodash.map(fieldGroups, \\\"group_name\\\")); convertedFields.sort(getFieldsSortFun(groupNames)); return { fields: convertedFields }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: clearFields() }});setTimeout(function () { doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: convertDataForFields(eventData) } });}, 300);\"\n }\n ]\n }\n },\n \"type\": \"dialog\",\n \"size\": \"md\",\n \"id\": \"u:c405734543e0\",\n \"closeOnEsc\": false,\n \"closeOnOutside\": false,\n \"showCloseButton\": true\n },\n \"label\": \"\\${'object_layouts.object_layouts_form.field_set' | t}\",\n \"id\": \"u:853b890ab524\"\n },\n {\n \"type\": \"button\",\n \"actionType\": \"dialog\",\n \"dialog\": {\n \"title\": \"\\${'object_layouts.object_layouts_form.grouping_set' | t}\",\n \"size\": \"lg\",\n \"body\": [\n {\n \"type\": \"input-table\",\n \"name\": \"setting_groups\",\n \"addable\": true,\n \"draggable\": true,\n \"editable\": true,\n \"columns\": [\n {\n \"name\": \"group_name\",\n \"label\": \"\\${'object_layouts.object_layouts_form.group_name' | t}\",\n \"id\": \"u:ee2fb813a3e7\"\n },\n {\n \"name\": \"visible_on\",\n \"label\": \"\\${'object_layouts.object_layouts_form.visible_on' | t}\"\n }\n ],\n \"value\": \"\\${field_groups}\",\n \"removable\": true,\n \"id\": \"u:e9f43ef94d08\"\n }\n ],\n \"onEvent\": {\n \"confirm\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"args\": {},\n \"componentId\": \"\",\n \"script\": \"const fieldGroupKey = \\\"group\\\";const getFieldsSortFun = function (groupNames) { return function (m, n) { var tempM = !!m[fieldGroupKey] ? 1 : 0; var tempN = !!n[fieldGroupKey] ? 1 : 0; if (!m[fieldGroupKey] || !n[fieldGroupKey]) { return tempM - tempN; }; return groupNames.indexOf(m[fieldGroupKey]) - groupNames.indexOf(n[fieldGroupKey]); };};const clearFields = function (input) { return { fields: [] }};const convertDataForGroups = function (input) { const settingGroups = input.setting_groups || []; const convertedGroups = lodash.uniqBy(settingGroups.map(function (item) { return { group_name: item.group_name, visible_on: item.visible_on } }), \\\"group_name\\\"); const groupNames = lodash.compact(lodash.map(convertedGroups, \\\"group_name\\\")); const fields = input.__super.__super.items; fields.sort(getFieldsSortFun(groupNames)); return { field_groups: convertedGroups, fields: fields }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: clearFields() }});doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: convertDataForGroups(eventData) }});\"\n }\n ]\n }\n },\n \"type\": \"dialog\",\n \"id\": \"u:e02c8f59216e\",\n \"closeOnEsc\": false,\n \"closeOnOutside\": false,\n \"showCloseButton\": true\n },\n \"label\": \"\\${'object_layouts.object_layouts_form.grouping_set' | t}\",\n \"id\": \"u:ec9931ea883c\"\n }\n ],\n \"headerToolbarClassName\": \"px-1 pb-3\",\n \"id\": \"u:22121edc42b1\"\n }\n ],\n \"id\": \"u:ac5b7818b88f\",\n \"affixFooter\": false,\n \"api\": {\n \"method\": \"get\",\n \"url\": \"\\${context.rootUrl}/service/api/amis-metadata-objects/objects/\\${object_name}/fields/layout_options\",\n \"adaptor\": \"let data = payload.data;data.fields_options = data.options;data.field_groups_options = lodash.uniq(lodash.compact(lodash.map(data.options, \\\"group\\\"))) || [];delete data.options;payload.data = data; return payload;\",\n \"sendOn\": \"!!this.object_name\",\n \"data\": null,\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n }\n },\n \"className\": \"col-span-2 m-0\",\n \"placeholder\": \"-\",\n \"onEvent\": {\n \"fetchInited\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const mixingGroupsFromFields = function (input, formData) { const groupsOptions = input.field_groups_options; const groups = formData.field_groups || []; const object_field_groups = formData.object_field_groups || []; const groupsForMixing = groupsOptions.map(function (item) { return { group_name: item } }); const mixedGroups = lodash.unionBy(groups, groupsForMixing, object_field_groups, \\\"group_name\\\"); return { field_groups: mixedGroups }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: mixingGroupsFromFields(eventData, context.props.data) }});\"\n }\n ]\n }\n },\n \"messages\": {}\n }\n },\n \"related_lists\":{\n \"amis\":{\n \"type\": \"service\",\n \"id\": \"u:dbadaff47153\",\n \"api\": {\n \"method\": \"get\",\n \"url\": \"\\${context.rootUrl}/service/api/amis-metadata-objects/objects/\\${object_name}/relatedLists/options\",\n \"sendOn\": \"!!this.object_name\",\n \"adaptor\": \"let data = payload.data;data.related_lists_options = data.options;delete data.options;payload.data = data;return payload;\",\n \"headers\": {\n \"Authorization\": \"Bearer \\${context.tenantId},\\${context.authToken}\"\n }\n },\n \"className\": \"col-span-2 m-0\",\n \"affixFooter\": false,\n \"body\": [\n {\n \"name\": \"related_lists\",\n \"type\": \"crud\",\n \"strictMode\": true,\n \"affixHeader\": false,\n \"editable\": true,\n \"addable\": true,\n \"removable\": true,\n \"draggable\": false,\n \"columns\": [\n {\n \"name\": \"related_field_fullname_label\",\n \"label\": \"\\${'object_layouts.object_layouts_form.related_list_name' | t}\",\n \"type\": \"tpl\",\n \"tpl\": \"\\${related_lists_options|filter:value:equals:related_field_fullname|pick:label}\",\n \"id\": \"u:5204fc0fbe1c\"\n },\n {\n \"name\": \"label\",\n \"label\": \"\\${'object_layouts.object_layouts_form.related_list_label' | t}\",\n \"quickEdit\": {\n \"type\": \"input-text\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, prop_name) { const currentPropValue = input.value; const rowValue = input; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); }; return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, \\\"label\\\") }});\"\n }\n ]\n }\n },\n \"labelRemark\": \"\\${'object_layouts.object_layouts_form.related_list_label_remark' | t}\",\n \"className\": \"m-0\",\n \"labelClassName\": \"text-left\",\n \"id\": \"u:5b30f2a71830\",\n \"name\": \"label\",\n \"mode\":\"popOver\"\n },\n \"id\": \"u:1267e4351d66\",\n \"placeholder\": \"-\"\n },\n {\n \"name\": \"field_names\",\n \"label\": \"\\${'object_layouts.object_layouts_form.field_names' | t}\",\n \"quickEdit\": {\n \"type\": \"transfer-picker\",\n \"source\": {\n \"method\": \"get\",\n \"url\": \"/service/api/amis-metadata-objects/objects/\\${related_field_fullname|split:.|first}/fields/options\",\n \"cache\": 60000,\n \"headers\": {\n \"Authorization\": \"Bearer \\${context.tenantId},\\${context.authToken}\"\n }\n },\n \"searchable\": true,\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, rowValue, prop_name) { const currentPropValue = input.value; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); } return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, context.props.data, \\\"field_names\\\") }});\"\n }\n ]\n }\n },\n \"joinValues\": false,\n \"extractValue\": true,\n \"mode\": \"inline\",\n \"id\": \"u:a85f62af394f\",\n \"name\": \"field_names\"\n },\n \"type\": \"tpl\",\n \"tpl\": \"<%= data.related_object_fields_options && data.related_object_fields_options[data.related_field_fullname] ? data.related_object_fields_options[data.related_field_fullname].filter(function(item){ return data.field_names && data.field_names.indexOf(item.value) > -1;}).map(function(item){return item.label}) : data.field_names%>\",\n \"id\": \"u:ce65d4020107\",\n \"placeholder\": \"-\"\n },\n {\n \"name\": \"sort_field_name\",\n \"label\": \"\\${'object_layouts.object_layouts_form.sort_field_name' | t}\",\n \"quickEdit\": {\n \"type\": \"transfer-picker\",\n \"joinValues\": false,\n \"extractValue\": true,\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, rowValue, prop_name) { const currentPropValue = input.value; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); } return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, context.props.data, \\\"sort_field_name\\\") }});\"\n }\n ]\n }\n },\n \"source\": {\n \"method\": \"get\",\n \"url\": \"/service/api/amis-metadata-objects/objects/\\${related_field_fullname|split:.|first}/fields/options\",\n \"cache\": 60000,\n \"headers\": {\n \"Authorization\": \"Bearer \\${context.tenantId},\\${context.authToken}\"\n }\n },\n \"searchable\": true,\n \"name\": \"sort_field_name\",\n \"id\": \"u:c1e3daddf92c\",\n \"mode\": \"inline\"\n },\n \"tpl\": \"<%= data.related_object_fields_options && data.related_object_fields_options[data.related_field_fullname] ? data.related_object_fields_options[data.related_field_fullname].filter(function(item){ return data.sort_field_name && data.sort_field_name.indexOf(item.value) > -1;}).map(function(item){return item.label}) : data.sort_field_name%>\",\n \"id\": \"u:3dbee6a855c4\"\n },\n {\n \"name\": \"sort_order\",\n \"label\": \"\\${'object_layouts.object_layouts_form.sort_order' | t}\",\n \"quickEdit\": {\n \"className\": \"m-0\",\n \"labelClassName\": \"text-left\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, rowValue, prop_name) { const currentPropValue = input.value; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); } return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, context.props.data, \\\"sort_order\\\") }});\"\n }\n ]\n }\n },\n \"joinValues\": false,\n \"extractValue\": true,\n \"clearable\": true,\n \"labelField\": \"label\",\n \"valueField\": \"value\",\n \"mode\": \"popOver\",\n \"source\": \"\\${sort_order_options}\",\n \"type\": \"select\",\n \"name\": \"sort_order\",\n \"id\": \"u:951e05ace916\",\n \"multiple\": false\n },\n \"breakpoint\": \"*\",\n \"type\": \"tpl\",\n \"tpl\": \"\\${sort_order_options|filter:value:equals:sort_order|pick:label}\",\n \"id\": \"u:13cb3d304615\"\n },\n {\n \"name\": \"filters\",\n \"label\": \"\\${'object_layouts.object_layouts_form.filters_rule' | t}\",\n \"quickEdit\": {\n \"type\": \"editor\",\n \"language\": \"javascript\",\n \"description\": \"\\${'object_layouts.object_layouts_form.filters_rule_description' | t}\",\n \"tpl\": \"<b><%=data.filters%></b>\",\n \"className\": \"col-span-2 m-0\",\n \"labelClassName\": \"text-left\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, rowValue, prop_name) { const currentPropValue = input.value; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); } return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, context.props.data, \\\"filters\\\") }});\"\n }\n ]\n }\n },\n \"name\": \"filters\",\n \"id\": \"u:0436e626f06a\",\n \"minRows\": 3,\n \"maxRows\": 20\n },\n \"breakpoint\": \"*\",\n \"id\": \"u:e4c367804b67\"\n },\n {\n \"name\": \"visible_on\",\n \"label\": \"\\${'object_layouts.object_layouts_form.visibile_on' | t}\",\n \"quickEdit\": {\n \"type\": \"input-text\",\n \"className\": \"m-0\",\n \"labelClassName\": \"text-left\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, rowValue, prop_name) { let currentPropValue = input.value; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; if (currentPropValue.startsWith(\\\"\\\\$\\\\{\\\")) { currentPropValue = \\\"\\\\\\\\\\\" + currentPropValue }; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); } return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, context.props.data, \\\"visible_on\\\") }});\"\n }\n ]\n }\n },\n \"tpl\": \"<b><%=data.visible_on%></b>\",\n \"name\": \"visible_on\",\n \"id\": \"u:3106cc0f9cc7\",\n \"minRows\": 3,\n \"maxRows\": 20,\n \"mode\": \"popOver\"\n },\n \"breakpoint\": \"*\",\n \"id\": \"u:1e1dc52d7c33\"\n },\n {\n \"name\": \"page_size\",\n \"label\": \"\\${'object_layouts.object_layouts_form.page_size' | t}\",\n \"quickEdit\": {\n \"type\": \"input-number\",\n \"precision\": 0,\n \"className\": \"m-0\",\n \"labelClassName\": \"text-number\",\n \"onEvent\": {\n \"change\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const quickEidtSaveForRelatedList = function (input, rowValue, prop_name) { const currentPropValue = input.value; delete rowValue.event; const formValue = rowValue.__super.__super; const related_field_fullname = rowValue.related_field_fullname; rowValue[prop_name] = currentPropValue; let newRelatedLists = formValue.related_lists.map(function (item) { if (item.related_field_fullname == related_field_fullname) { if (prop_name === \\\"related_field_fullname\\\") { return { related_field_fullname: currentPropValue, sort_order: \\\"asc\\\" } } else { return Object.assign({}, item, rowValue); } } else { return item; } }); const newFormDoc = { related_lists: newRelatedLists }; if (prop_name === \\\"field_names\\\" || prop_name === \\\"sort_field_name\\\") { const currentOptions = {}; currentOptions[related_field_fullname] = input.options; newFormDoc.related_object_fields_options = Object.assign({}, formValue.related_object_fields_options, currentOptions); } return newFormDoc;};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: quickEidtSaveForRelatedList(eventData, context.props.data, \\\"page_size\\\") }});\"\n }\n ]\n }\n },\n \"name\": \"page_size\",\n \"mode\": \"popOver\",\n \"id\": \"u:0e261f265511\"\n },\n \"breakpoint\": \"*\",\n \"id\": \"u:f9bbd9567bbd\"\n }\n ],\n \"className\": \"col-span-2 m-0\",\n \"labelClassName\": \"text-left\",\n \"headerToolbar\": [\n {\n \"type\": \"button\",\n \"actionType\": \"dialog\",\n \"dialog\": {\n \"title\": \"\\${'object_layouts.object_layouts_form.set_related_list' | t}\",\n \"body\": [\n {\n \"type\": \"transfer\",\n \"name\": \"picked_related_lists\",\n \"sortable\": true,\n \"source\": \"\\${related_lists_options}\",\n \"value\": \"\\${related_lists|pick:related_field_fullname}\",\n \"searchable\": true,\n \"id\": \"u:ab6a6c9c8677\"\n }\n ],\n \"onEvent\": {\n \"confirm\": {\n \"actions\": [\n {\n \"actionType\": \"custom\",\n \"script\": \"const clearRelatedLists = function (input) { return { related_lists: [] }};const convertDataForRelatedLists = function (input) { let pickedRelateds = input.picked_related_lists || []; const superRelateds = _.keyBy(input.__super.related_lists, 'related_field_fullname'); if (typeof pickedRelateds === \\\"string\\\") { pickedRelateds = pickedRelateds.split(\\\",\\\"); } const convertedRelateds = pickedRelateds.map(function (key) { return superRelateds[key] || { related_field_fullname: key, sort_order: \\\"asc\\\" } }); return { related_lists: convertedRelateds }};const eventData = event.data;doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: clearRelatedLists() }});setTimeout(function () { doAction({ actionType: 'setValue', componentId: \\\"object-layout-form\\\", args: { value: convertDataForRelatedLists(eventData) } });}, 300);\"\n }\n ]\n }\n },\n \"type\": \"dialog\",\n \"size\": \"md\",\n \"id\": \"u:3663990f226a\",\n \"closeOnEsc\": false,\n \"closeOnOutside\": false,\n \"showCloseButton\": true\n },\n \"label\": \"\\${'object_layouts.object_layouts_form.set_related_list' | t}\",\n \"id\": \"u:b9a5d3b611d7\"\n }\n ],\n \"headerToolbarClassName\": \"px-1 pb-3\",\n \"source\": \"\\${related_lists}\",\n \"footable\": false,\n \"columnsTogglable\": false,\n \"messages\": {},\n \"tableClassName\": \"min-w-max\",\n \"id\": \"u:95aea10231d3\"\n }\n ],\n \"messages\": {}\n }\n },\n \"field_groups\":{\n \"hidden\": true\n }\n}",
51
504
  "form": {
52
505
  "id": "object-layout-form",
53
506
  "data": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/service-plugin-amis",
3
- "version": "2.6.2-beta.21",
3
+ "version": "2.6.2-beta.23",
4
4
  "main": "package.service.js",
5
5
  "scripts": {
6
6
  "build": "yarn build:tailwind-base && yarn build:tailwind",
@@ -13,7 +13,7 @@
13
13
  "publishConfig": {
14
14
  "access": "public"
15
15
  },
16
- "gitHead": "600e2d63df2d9ce268fab74c21b5a50ef102a042",
16
+ "gitHead": "e87b77331a519957167697e0bdb2b42d8e2e15ca",
17
17
  "devDependencies": {
18
18
  "tailwindcss": "3.2.4"
19
19
  }
@@ -124,6 +124,10 @@
124
124
  margin-top: -0.75rem
125
125
  }
126
126
 
127
+ .mb-2 {
128
+ margin-bottom: 0.5rem
129
+ }
130
+
127
131
  .mt-3 {
128
132
  margin-top: 0.75rem
129
133
  }
@@ -196,14 +200,14 @@
196
200
  width: 2.5rem
197
201
  }
198
202
 
199
- .w-6\/12 {
200
- width: 50%
201
- }
202
-
203
203
  .w-full {
204
204
  width: 100%
205
205
  }
206
206
 
207
+ .w-6\/12 {
208
+ width: 50%
209
+ }
210
+
207
211
  .w-4\/5 {
208
212
  width: 80%
209
213
  }
@@ -212,11 +216,6 @@
212
216
  width: 24rem
213
217
  }
214
218
 
215
- .min-w-max {
216
- min-width: -moz-max-content;
217
- min-width: max-content
218
- }
219
-
220
219
  .min-w-\[240px\] {
221
220
  min-width: 240px
222
221
  }