@steedos/service-plugin-amis 2.6.1-beta.6 → 2.6.2-beta.10
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/main/default/client/amis.render.client.js +67 -16
- package/main/default/client/creator.function.client.js +4 -4
- package/main/default/pages/{action_field_updates.page.amis.json → action_field_updates_form.page.amis.json} +14 -14
- package/main/default/pages/{action_field_updates.page.yml → action_field_updates_form.page.yml} +1 -1
- package/main/default/pages/apps_form.page.amis.json +295 -567
- package/main/default/pages/listview_form.page.amis.json +179 -552
- package/main/default/pages/object_layouts_form.page.amis.json +100 -0
- package/main/default/pages/{object_layouts.page.yml → object_layouts_form.page.yml} +1 -1
- package/main/default/services/amis-design.service.js +39 -12
- package/main/default/services/metadata/objects.service.js +38 -13
- package/main/default/services/utils/page-schema.js +5 -8
- package/main/default/translations/en.translation.yml +28 -0
- package/main/default/translations/zh-CN.translation.yml +28 -0
- package/package.json +2 -2
- package/package.service.js +62 -4
- package/public/tailwind/tailwind-steedos.css +119 -44
- package/main/default/pages/object_layouts.page.amis.json +0 -913
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "page",
|
|
3
|
+
"body": [
|
|
4
|
+
{
|
|
5
|
+
"type": "service",
|
|
6
|
+
"body": [
|
|
7
|
+
{
|
|
8
|
+
"type": "steedos-object-form",
|
|
9
|
+
"mode": "edit",
|
|
10
|
+
"initFetch": true,
|
|
11
|
+
"className": "bg-white",
|
|
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"
|
|
23
|
+
},
|
|
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
|
+
]
|
|
29
|
+
},
|
|
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"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
},
|
|
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
|
+
"form": {
|
|
52
|
+
"id": "object-layout-form",
|
|
53
|
+
"data": {
|
|
54
|
+
"sort_order_options": [
|
|
55
|
+
{
|
|
56
|
+
"label": "${'object_layouts.object_layouts_form.positive_order' | t}",
|
|
57
|
+
"value": "asc"
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
"label": "${'object_layouts.object_layouts_form.reverse_order' | t}",
|
|
61
|
+
"value": "desc"
|
|
62
|
+
}
|
|
63
|
+
]
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"apiRequestAdaptor": "delete formData.created;\ndelete formData.created_by;\ndelete formData.modified;\ndelete formData.modified_by;\ndelete formData._display;\ndelete formData.sort_order_options;\ndelete formData.buttons_options;\ndelete formData.fields_options;\ndelete formData.field_groups_options;\ndelete formData.related_lists_options;\ndelete formData.related_object_fields_options;\ndelete formData.isLookup;\nquery = `mutation{record: object_layouts__insert(doc: {__saveData}){_id}}`;\nif (formData.recordId) {\n query = `mutation{record: object_layouts__update(id: \"` + formData.recordId + `\", doc: {__saveData}){_id}}`;\n};\ndelete formData._id;\n__saveData = JSON.stringify(JSON.stringify(formData));\n\napi.data = { query: query.replace('{__saveData}', __saveData) };\nreturn api;",
|
|
67
|
+
"tabsMode": "line"
|
|
68
|
+
}
|
|
69
|
+
],
|
|
70
|
+
"id": "u:306afc3d4713",
|
|
71
|
+
"api": {
|
|
72
|
+
"method": "post",
|
|
73
|
+
"url": "${context.rootUrl}/graphql",
|
|
74
|
+
"dataType": "json",
|
|
75
|
+
"headers": {
|
|
76
|
+
"Authorization": "Bearer ${context.tenantId},${context.authToken}"
|
|
77
|
+
},
|
|
78
|
+
"data": {
|
|
79
|
+
"query": "{object_field_groups:objects(filters: [[\"name\",\"=\",\"${_master.record.name}\"]]){_id,name,field_groups}}"
|
|
80
|
+
},
|
|
81
|
+
"requestAdaptor": "",
|
|
82
|
+
"adaptor": "var field_groups = payload.data.object_field_groups;\nfield_groups = field_groups && field_groups.length > 0 && field_groups[0].field_groups;\nreturn payload = {\n data: {\n object_field_groups: field_groups\n }\n}",
|
|
83
|
+
"messages": {}
|
|
84
|
+
},
|
|
85
|
+
"messages": {}
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"regions": [
|
|
89
|
+
"body"
|
|
90
|
+
],
|
|
91
|
+
"data": {
|
|
92
|
+
"objectName": "object_layouts"
|
|
93
|
+
},
|
|
94
|
+
"id": "u:3b0de7e88def",
|
|
95
|
+
"bodyClassName": "p-0",
|
|
96
|
+
"name": "page_edit_${recordId}",
|
|
97
|
+
"initApi": null,
|
|
98
|
+
"initFetch": null,
|
|
99
|
+
"className": "page-form-object_layouts"
|
|
100
|
+
}
|
|
@@ -85,21 +85,28 @@ module.exports = {
|
|
|
85
85
|
const lng = userSession.language || 'zh-CN';
|
|
86
86
|
const spaceId = userSession.spaceId;
|
|
87
87
|
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
88
|
-
const allObjects = _.
|
|
88
|
+
const allObjects = _.map(allMetadataObjects, (metadataObject)=>{
|
|
89
|
+
return {
|
|
90
|
+
name: metadataObject.metadata.name,
|
|
91
|
+
label: metadataObject.metadata.label,
|
|
92
|
+
NAME_FIELD_KEY: metadataObject.metadata.NAME_FIELD_KEY,
|
|
93
|
+
hidden: metadataObject.metadata.hidden,
|
|
94
|
+
list_views: clone(metadataObject.metadata.list_views),
|
|
95
|
+
};
|
|
96
|
+
})
|
|
97
|
+
// _.pluck(clone(allMetadataObjects), 'metadata');
|
|
89
98
|
|
|
90
99
|
const query = {
|
|
91
100
|
filters: [ ['hidden', '!=', true] , ['name', '<>', ExcludeObjectNames]],
|
|
92
101
|
projection: {
|
|
93
102
|
name: 1,
|
|
94
103
|
label: 1,
|
|
95
|
-
list_views: 1
|
|
104
|
+
list_views: 1,
|
|
105
|
+
NAME_FIELD_KEY: 1
|
|
96
106
|
}
|
|
97
107
|
};
|
|
98
|
-
|
|
99
108
|
const objects = objectql.getSteedosSchema().metadataDriver.find(allObjects, query, spaceId);
|
|
100
|
-
|
|
101
109
|
const dbListViews = await objectql.getObject('object_listviews').directFind({filters: [['shared', '!=', false]]})
|
|
102
|
-
|
|
103
110
|
_.each(objects, (object)=>{
|
|
104
111
|
if(object && object.name){
|
|
105
112
|
|
|
@@ -119,7 +126,13 @@ module.exports = {
|
|
|
119
126
|
label: 1
|
|
120
127
|
}
|
|
121
128
|
}, spaceId);
|
|
122
|
-
|
|
129
|
+
// object.list_views = _.each(_.values(object.list_views), (listview)=>{
|
|
130
|
+
// return {
|
|
131
|
+
// _id: listview._id,
|
|
132
|
+
// name: listview.name,
|
|
133
|
+
// label: listview.label
|
|
134
|
+
// }
|
|
135
|
+
// });
|
|
123
136
|
}
|
|
124
137
|
|
|
125
138
|
if(_.isEmpty(object.list_views)){
|
|
@@ -217,8 +230,16 @@ module.exports = {
|
|
|
217
230
|
const lng = userSession.language || 'zh-CN';
|
|
218
231
|
const spaceId = userSession.spaceId;
|
|
219
232
|
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
220
|
-
const allObjects = _.
|
|
221
|
-
|
|
233
|
+
const allObjects = _.map(allMetadataObjects, (metadataObject)=>{
|
|
234
|
+
return {
|
|
235
|
+
name: metadataObject.metadata.name,
|
|
236
|
+
label: metadataObject.metadata.label,
|
|
237
|
+
NAME_FIELD_KEY: metadataObject.metadata.NAME_FIELD_KEY,
|
|
238
|
+
hidden: metadataObject.metadata.hidden,
|
|
239
|
+
list_views: clone(metadataObject.metadata.list_views),
|
|
240
|
+
fields: clone(metadataObject.metadata.fields),
|
|
241
|
+
};
|
|
242
|
+
});
|
|
222
243
|
const object = await objectql.getSteedosSchema().getObject(objectName);
|
|
223
244
|
const objectConfig = object.toConfig();
|
|
224
245
|
steedosI18n.translationObject(lng, objectConfig.name, objectConfig);
|
|
@@ -237,7 +258,6 @@ module.exports = {
|
|
|
237
258
|
let details = relationsInfo && relationsInfo.details;
|
|
238
259
|
const lookupDetails = relationsInfo && relationsInfo.lookup_details;
|
|
239
260
|
details = _.union(details, lookupDetails);
|
|
240
|
-
|
|
241
261
|
_.each(details, function(related){
|
|
242
262
|
/*related可能是一个lookup_details,它是对象而不是字符串,从中取出key值*/
|
|
243
263
|
if(typeof related !== "string"){
|
|
@@ -283,12 +303,19 @@ module.exports = {
|
|
|
283
303
|
fields: 1
|
|
284
304
|
}
|
|
285
305
|
};
|
|
286
|
-
|
|
287
|
-
|
|
306
|
+
let objects = _.map(_.filter((allObjects), (obj)=>{
|
|
307
|
+
return obj.hidden != true;
|
|
308
|
+
}), (obj)=>{
|
|
309
|
+
return {
|
|
310
|
+
name: obj.name,
|
|
311
|
+
label: obj.label,
|
|
312
|
+
list_views: obj.list_views,
|
|
313
|
+
fields: obj.fields
|
|
314
|
+
}
|
|
315
|
+
})
|
|
288
316
|
objects = objects.filter(function(object){
|
|
289
317
|
return relatedListObjects.includes(object.name);
|
|
290
318
|
});
|
|
291
|
-
|
|
292
319
|
const dbListViews = await objectql.getObject('object_listviews').directFind({filters: [['shared', '!=', false]]})
|
|
293
320
|
|
|
294
321
|
_.each(objects, (object)=>{
|
|
@@ -121,20 +121,34 @@ module.exports = {
|
|
|
121
121
|
const fieldsOptions = await this.getObjectFieldsOptions(ctx);
|
|
122
122
|
const userSession = ctx.meta.user;
|
|
123
123
|
const lng = userSession.language || "zh-CN";
|
|
124
|
+
const objectName = ctx.params.objectName;
|
|
125
|
+
const object = await objectql.getSteedosSchema().getObject(objectName);
|
|
126
|
+
const objectConfig = object.toConfig();
|
|
127
|
+
const fields = objectConfig.fields;
|
|
128
|
+
|
|
129
|
+
// image、file、lookup、master_detail、select 不参与排序
|
|
130
|
+
let ascChildren = [];
|
|
131
|
+
_.forEach(fieldsOptions, (opt)=>{
|
|
132
|
+
if(["image","file","lookup","master_detail","select"].indexOf(fields[opt.value].type)<0){
|
|
133
|
+
ascChildren.push({label: `${opt.label}(${steedosI18n.t('asc', {}, lng)})`, value: `${opt.value}:asc`})
|
|
134
|
+
}
|
|
135
|
+
})
|
|
136
|
+
let descChildren = [];
|
|
137
|
+
_.forEach(fieldsOptions, (opt)=>{
|
|
138
|
+
if(["image","file","lookup","master_detail","select"].indexOf(fields[opt.value].type)<0){
|
|
139
|
+
descChildren.push({label: `${opt.label}(${steedosI18n.t('desc', {}, lng)})`, value: `${opt.value}:desc`})
|
|
140
|
+
}
|
|
141
|
+
})
|
|
124
142
|
const options = [
|
|
125
143
|
{
|
|
126
144
|
label: steedosI18n.t('asc', {}, lng),
|
|
127
145
|
searchable: true,
|
|
128
|
-
children:
|
|
129
|
-
return {label: `${opt.label}(${steedosI18n.t('asc', {}, lng)})`, value: `${opt.value}:asc`}
|
|
130
|
-
})
|
|
146
|
+
children: ascChildren
|
|
131
147
|
},
|
|
132
148
|
{
|
|
133
149
|
label: steedosI18n.t('desc', {}, lng),
|
|
134
150
|
searchable: true,
|
|
135
|
-
children:
|
|
136
|
-
return {label: `${opt.label}(${steedosI18n.t('desc', {}, lng)})`, value: `${opt.value}:desc`}
|
|
137
|
-
})
|
|
151
|
+
children: descChildren
|
|
138
152
|
}
|
|
139
153
|
];
|
|
140
154
|
|
|
@@ -180,7 +194,7 @@ module.exports = {
|
|
|
180
194
|
const lng = userSession.language || 'zh-CN';
|
|
181
195
|
const spaceId = userSession.spaceId;
|
|
182
196
|
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
183
|
-
const allObjects = _.map(
|
|
197
|
+
const allObjects = _.map(allMetadataObjects, 'metadata');
|
|
184
198
|
const query = {
|
|
185
199
|
filters: [ ['name', '<>', ExcludeObjectNames]], //['hidden', '!=', true] ,
|
|
186
200
|
projection: {
|
|
@@ -189,7 +203,14 @@ module.exports = {
|
|
|
189
203
|
}
|
|
190
204
|
};
|
|
191
205
|
|
|
192
|
-
const objects =
|
|
206
|
+
const objects = _.map(_.filter(allObjects, (obj)=>{
|
|
207
|
+
return !_.includes(ExcludeObjectNames, obj.name)
|
|
208
|
+
}), (obj)=>{
|
|
209
|
+
return {
|
|
210
|
+
name: obj.name,
|
|
211
|
+
label: obj.label
|
|
212
|
+
}
|
|
213
|
+
})
|
|
193
214
|
|
|
194
215
|
_.each(objects, (object)=>{
|
|
195
216
|
if(object && object.name){
|
|
@@ -236,7 +257,7 @@ module.exports = {
|
|
|
236
257
|
|
|
237
258
|
let output = [];
|
|
238
259
|
output = _.uniq(_.compact(_.map(_.sortBy(fieldsArr, "sort_no"), (field)=>{
|
|
239
|
-
if((include_hide || !field.hidden) && !_.includes(["grid", "object", "[Object]", "[object]", "Object", "markdown"
|
|
260
|
+
if((include_hide || !field.hidden) && !_.includes(["grid", "object", "[Object]", "[object]", "Object", "markdown"], field.type)){
|
|
240
261
|
// 隐藏的字段 和 字段类型 判断
|
|
241
262
|
return {
|
|
242
263
|
value: field.name,
|
|
@@ -342,7 +363,7 @@ module.exports = {
|
|
|
342
363
|
})
|
|
343
364
|
let relatedOptions = [];
|
|
344
365
|
relatedOptions = _.uniq(_.compact(_.map(_.sortBy(fieldsArr, "sort_no"), (field) => {
|
|
345
|
-
if ((!field.hidden) && !_.includes(["grid", "object", "[Object]", "[object]", "Object", "markdown"
|
|
366
|
+
if ((!field.hidden) && !_.includes(["grid", "object", "[Object]", "[object]", "Object", "markdown"], field.type)) {
|
|
346
367
|
return {
|
|
347
368
|
'value': field.name,
|
|
348
369
|
'label': field.label || field.name
|
|
@@ -378,6 +399,10 @@ module.exports = {
|
|
|
378
399
|
const userSession = ctx.meta.user;
|
|
379
400
|
const lng = userSession.language || 'zh-CN';
|
|
380
401
|
const objectName = ctx.params.objectName;
|
|
402
|
+
let {showHiddenField = false} = ctx.params;
|
|
403
|
+
if(showHiddenField=='true'){
|
|
404
|
+
showHiddenField = true;
|
|
405
|
+
}
|
|
381
406
|
const objectConfig = await objectql.getSteedosSchema().getObject(objectName).toConfig();
|
|
382
407
|
steedosI18n.translationObject(lng, objectConfig.name, objectConfig);
|
|
383
408
|
|
|
@@ -391,7 +416,7 @@ module.exports = {
|
|
|
391
416
|
|
|
392
417
|
const fieldsArr = [];
|
|
393
418
|
_.each(objectConfig.fields , (field, field_name)=>{
|
|
394
|
-
if (field.hidden) return;
|
|
419
|
+
if (showHiddenField != true && field.hidden) return;
|
|
395
420
|
if (ExcludeFieldNames.includes(field_name)) return;
|
|
396
421
|
if(!_.has(field, "name")){
|
|
397
422
|
field.name = field_name
|
|
@@ -567,7 +592,7 @@ module.exports = {
|
|
|
567
592
|
const objectTabs = await objectql.getObject('tabs').find({filters: [['type', '=', "object"]]});
|
|
568
593
|
const tabObjects = _.map(objectTabs, "object");
|
|
569
594
|
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
570
|
-
const allObjects = _.map(
|
|
595
|
+
const allObjects = _.map(allMetadataObjects, 'metadata');
|
|
571
596
|
const query = {
|
|
572
597
|
filters: [['hidden', '!=', true], ['name', '<>', tabObjects]],
|
|
573
598
|
projection: {
|
|
@@ -607,7 +632,7 @@ module.exports = {
|
|
|
607
632
|
const companyId = userSession.company_id;
|
|
608
633
|
const companyIds = userSession.company_ids;
|
|
609
634
|
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
610
|
-
const allObjects = _.map(
|
|
635
|
+
const allObjects = _.map(allMetadataObjects, 'metadata');
|
|
611
636
|
const query = {
|
|
612
637
|
filters: [['name', 'in', selectedObjects]], //['hidden', '!=', true] ,
|
|
613
638
|
projection: {
|
|
@@ -21,18 +21,15 @@ const getFormPageInitSchema = function (objectApiName) {
|
|
|
21
21
|
"label": "对象表单",
|
|
22
22
|
"objectApiName": objectApiName,
|
|
23
23
|
"recordId": "${recordId}",
|
|
24
|
-
"className": "
|
|
24
|
+
"className": "",
|
|
25
25
|
"id": "u:b3d626885b90",
|
|
26
|
+
"enableTabs": true,
|
|
26
27
|
"mode": "edit",
|
|
27
28
|
"layout": "normal"
|
|
28
29
|
};
|
|
29
30
|
return {
|
|
30
|
-
type: '
|
|
31
|
+
type: 'service',
|
|
31
32
|
name: getScopeId(objectApiName, "form"),
|
|
32
|
-
bodyClassName: '',
|
|
33
|
-
regions: [
|
|
34
|
-
"body"
|
|
35
|
-
],
|
|
36
33
|
body: [
|
|
37
34
|
amisSchema
|
|
38
35
|
]
|
|
@@ -53,7 +50,7 @@ const getListPageInitSchema = function (objectApiName) {
|
|
|
53
50
|
"objectApiName": objectApiName,
|
|
54
51
|
"columnsTogglable": false,
|
|
55
52
|
"showHeader": true,
|
|
56
|
-
className: "sm:border bg-white sm:
|
|
53
|
+
className: "sm:border bg-white sm:rounded border-gray-300 border-solid"
|
|
57
54
|
}]
|
|
58
55
|
}
|
|
59
56
|
}
|
|
@@ -92,7 +89,7 @@ const getRecordPageInitSchema = async function (objectApiName, userSession) {
|
|
|
92
89
|
}
|
|
93
90
|
const content = {
|
|
94
91
|
"type": "tabs",
|
|
95
|
-
"className": "sm:mt-3 bg-white sm:
|
|
92
|
+
"className": "sm:mt-3 bg-white sm:rounded sm:border border-gray-300 p-4",
|
|
96
93
|
"tabs": [
|
|
97
94
|
detailed
|
|
98
95
|
]
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
CustomLabels:
|
|
2
|
+
object_layouts:
|
|
3
|
+
object_layouts_form:
|
|
4
|
+
check_all_label: Check All
|
|
5
|
+
sequence: Sequence
|
|
6
|
+
button_name_label: Name
|
|
7
|
+
visibile_on: Display Conditions
|
|
8
|
+
button_set: Set Buttons
|
|
9
|
+
fields: Fields
|
|
10
|
+
readonly: Readonly
|
|
11
|
+
required: Required
|
|
12
|
+
grouping: Grouping
|
|
13
|
+
field_set: Set Fields
|
|
14
|
+
grouping_set: Set Grouping
|
|
15
|
+
group_name: Name
|
|
16
|
+
visible_on: VisibleOn
|
|
17
|
+
related_list_name: Related List Name
|
|
18
|
+
related_list_label: Displayed Title
|
|
19
|
+
related_list_label_remark: Default to object name
|
|
20
|
+
field_names: Displayed Fields
|
|
21
|
+
sort_field_name: Sort Fields
|
|
22
|
+
sort_order: Sort Order
|
|
23
|
+
filters_rule: Filter Rules
|
|
24
|
+
filters_rule_description: 'Function signature: (filters, data)=>user-defined filter conditions. The data is in data, and the user-defined filter conditions are returned after modification'
|
|
25
|
+
page_size: Display quantity per page
|
|
26
|
+
set_related_list: Set Related List
|
|
27
|
+
positive_order: Positive Order
|
|
28
|
+
reverse_order: Reverse order
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
CustomLabels:
|
|
2
|
+
object_layouts:
|
|
3
|
+
object_layouts_form:
|
|
4
|
+
check_all_label: 全选
|
|
5
|
+
sequence: 序号
|
|
6
|
+
button_name_label: 名称
|
|
7
|
+
visibile_on: 显示条件
|
|
8
|
+
button_set: 设置按钮
|
|
9
|
+
fields: 字段
|
|
10
|
+
readonly: 只读
|
|
11
|
+
required: 必填
|
|
12
|
+
grouping: 分组
|
|
13
|
+
field_set: 设置字段
|
|
14
|
+
grouping_set: 设置分组
|
|
15
|
+
group_name: 名称
|
|
16
|
+
visible_on: 显示条件
|
|
17
|
+
related_list_name: 子表名称
|
|
18
|
+
related_list_label: 显示标题
|
|
19
|
+
related_list_label_remark: 默认为对象名称
|
|
20
|
+
field_names: 显示的字段
|
|
21
|
+
sort_field_name: 排序字段
|
|
22
|
+
sort_order: 排序方式
|
|
23
|
+
filters_rule: 过滤规则
|
|
24
|
+
filters_rule_description: 函数签名:(filters, data) => 自定义过滤条件, 数据在 data 中,修改后返回 自定义过滤条件
|
|
25
|
+
page_size: 每页显示数量
|
|
26
|
+
set_related_list: 设置子表
|
|
27
|
+
positive_order: 正序
|
|
28
|
+
reverse_order: 倒序
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-plugin-amis",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.2-beta.10",
|
|
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": "
|
|
16
|
+
"gitHead": "afbd1c34d1516e44494b5d5a192bbce80e48af93",
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"tailwindcss": "3.2.4"
|
|
19
19
|
}
|