@steedos/standard-object-database 2.6.8-beta.8 → 2.6.8

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.
@@ -100,7 +100,7 @@ fields:
100
100
  help: 联动字段;例如:A是B依赖的字段,当A字段值发生改变,B字段选项值会随之改变。
101
101
  description:
102
102
  create:
103
- label: 是否显示新建按钮
103
+ label: 弹出选择时允许新建
104
104
  help:
105
105
  description:
106
106
  reference_to_field:
@@ -1,5 +1,8 @@
1
1
  module.exports = {
2
2
  standard_newVisible: function (object_name, record_id, permission, data) {
3
+ if (!record_id) {
4
+ return false;
5
+ }
3
6
  if(!Creator.isSpaceAdmin()){
4
7
  return false
5
8
  }
@@ -203,7 +203,7 @@ fields:
203
203
  blackbox: true
204
204
  label: Default Value
205
205
  sort_no: 160
206
- visible_on: "{{['autonumber','formula','summary','image','file'].indexOf(formData.type) > -1 ? false: true}}"
206
+ visible_on: "{{formData.type && ['autonumber','formula','summary','image','file'].indexOf(formData.type) < 0}}"
207
207
  amis:
208
208
  type: service
209
209
  className:
@@ -219,7 +219,7 @@ fields:
219
219
  data:
220
220
  object: ${object}
221
221
  name: ${name}
222
- options: ${options}
222
+ options: ${options|filter:label:isTrue|filter:value:isTrue}
223
223
  type: ${type}
224
224
  reference_to: ${reference_to}
225
225
  multiple: ${multiple}
@@ -228,7 +228,7 @@ fields:
228
228
  mode: ${global.mode}
229
229
  scale: ${scale}
230
230
  _id: ${_id}
231
- trackExpression: "${object},${options},${type},${reference_to},${reference_to_field},${multiple},${filtersFunction},${_id},${scale}"
231
+ trackExpression: "${object},${options|filter:label:isTrue|filter:value:isTrue|pick:label,value|json},${type},${reference_to},${reference_to_field},${multiple},${filtersFunction},${_id},${scale}"
232
232
  headers:
233
233
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
234
234
  # sendOn: "!!this.type"
@@ -289,7 +289,7 @@ fields:
289
289
  disabledOn: "${is_system == true}"
290
290
  create:
291
291
  type: boolean
292
- label: 是否显示新建按钮
292
+ label: 弹出选择时允许新建
293
293
  defaultValue: true
294
294
  visible_on: "{{['lookup'].indexOf(formData.type) > -1 ? true: false}}"
295
295
  sort_no: 185
@@ -556,11 +556,42 @@ fields:
556
556
  - object
557
557
  filtersFunction: !<tag:yaml.org,2002:js/function> |-
558
558
  function (filters, values) {
559
- if(values && values.object){
560
- return ['object', '=', values.object]
561
- }else{
562
- return ['_id', '=', 'no']
559
+ //按照from字段类型给予不同的过滤限制,具体规则参考https://github.com/steedos/steedos-platform/issues/6496
560
+ var fieldFilters = {
561
+ "text": ["text", "textarea"],
562
+ "textarea": ["text", "textarea"],
563
+ "boolean": ["boolean", "toggle"],
564
+ "toggle": ["boolean", "toggle"],
565
+ "number": ["number", "currency"],
566
+ "currency": ["number", "currency"],
567
+ "lookup": ["lookup", "master_detail"],
568
+ "master_detail": ["lookup", "master_detail"],
569
+ "autonumber": ["autonumber", "text", "textarea"],
570
+ "email": ["email", "text", "textarea"]
571
+ };
572
+ var currentFilter = [];
573
+ var referenceObject = BuilderAmisObject && BuilderAmisObject.AmisLib && BuilderAmisObject.AmisLib.getUISchemaSync(values.reference_to);
574
+ var fromField = referenceObject && referenceObject.fields[values.auto_fill_mapping__from];
575
+
576
+ if (fromField && fromField.data_type) {
577
+ currentFilter.push(['type', 'in', fieldFilters[fromField.data_type] || fromField.data_type.split()]);
578
+ }else if (fromField) {
579
+ currentFilter.push(['type', 'in', fieldFilters[fromField.type] || fromField.type.split()]);
580
+ if (fromField.type == "lookup" || fromField.type == "master_detail") {
581
+ if (fromField.reference_to) {
582
+ currentFilter.push(['reference_to', '=', fromField.reference_to]);
583
+ }
584
+ if (fromField.reference_to_field) {
585
+ currentFilter.push(['reference_to_field', '=', fromField.reference_to_field]);
586
+ }
587
+ }
588
+ }
589
+ if (values && values.object) {
590
+ currentFilter.push(['object', '=', values.object]);
591
+ } else {
592
+ currentFilter.push(['_id', '=', 'no']);
563
593
  }
594
+ return currentFilter;
564
595
  }
565
596
  formula_blank_value:
566
597
  type: select
@@ -339,6 +339,7 @@ let objectTriggers = {
339
339
  object_name: doc.name,
340
340
  shared_to: "space",
341
341
  filter_scope: "space",
342
+ crud_mode: 'table',
342
343
  columns: [{field: 'name'}],
343
344
  "sort" : [
344
345
  {
@@ -355,6 +356,7 @@ let objectTriggers = {
355
356
  object_name: doc.name,
356
357
  shared_to: "space",
357
358
  filter_scope: "space",
359
+ crud_mode: 'table',
358
360
  columns: [{field: 'name'}]
359
361
  });
360
362
 
@@ -39,33 +39,43 @@
39
39
  "body": [
40
40
  {
41
41
  "type": "steedos-input-table",
42
- "inlineEditMode": true,
42
+ "enableDialog": false,
43
43
  "fields": [
44
44
  {
45
45
  "name": "group_name",
46
46
  "label": "名称",
47
47
  "type": "text",
48
+ "amis": {
49
+ "disabledOn": "${is_default || is_hidden}"
50
+ },
48
51
  "id": "u:31952daa443c"
49
52
  },
50
53
  {
51
54
  "name": "visible_on",
52
55
  "label": "显示条件",
53
56
  "type": "text",
57
+ "amis": {
58
+ "disabledOn": "${is_default || is_hidden}"
59
+ },
54
60
  "id": "u:8d7551abcd28",
55
61
  "value": null
56
62
  },
57
63
  {
58
64
  "name": "collapsed",
59
65
  "label": "默认折叠",
66
+ "amis": {
67
+ "disabledOn": "${is_default || is_hidden}"
68
+ },
60
69
  "type": "boolean"
61
70
  }
62
71
  ],
63
72
  "columns": [
64
73
  {
65
- "name": "group_name",
66
- "inlineEditMode": false
74
+ "name": "group_name"
75
+ },
76
+ {
77
+ "name": "visible_on"
67
78
  },
68
- "visible_on",
69
79
  {
70
80
  "name": "collapsed",
71
81
  "width": 50
@@ -76,7 +86,6 @@
76
86
  "editable": true,
77
87
  "removable": true,
78
88
  "draggable": false,
79
- "showIndex": false,
80
89
  "id": "u:776ec89804c0",
81
90
  "label": ""
82
91
  }
@@ -88,7 +97,7 @@
88
97
  "actions": [
89
98
  {
90
99
  "actionType": "custom",
91
- "script": "//整理分组数据\nlet setting_groups = _.cloneDeep(event.data.groups);\nif (!_.find(setting_groups, { is_default: true })) {\n setting_groups.unshift({\n \"id\": \"未分组\",\n \"group_name\": \"未分组\",\n \"visible_on\": \"\",\n \"is_default\": true\n })\n}\nif (!_.find(setting_groups, { is_hidden: true })) {\n setting_groups.push({\n id: \"隐藏\",\n group_name: \"隐藏\",\n visible_on: \"\",\n is_hidden: true\n });\n}\nsetting_groups.forEach(function (group) {\n if (group.is_hidden) {\n group.group_name = \"隐藏\";\n group.visible_on = \"\";\n }\n if (group.is_default) {\n group.group_name = \"未分组\";\n group.visible_on = \"\";\n }\n if (!group.id) {\n group.id = group.group_name;\n }\n if (!group.visible_on) {\n group.visible_on = \"\"\n }\n})\n\n//整理字段与分组关系的数据\nlet fieldForGroup = {};\nlet oldGroup = _.cloneDeep(event.data.fieldForGroup);\nsetting_groups.forEach(function (group) {\n if (_.has(oldGroup, group.id)) {\n fieldForGroup[group.id] = oldGroup[group.id];\n oldGroup = _.omit(oldGroup, group.id);\n } else {\n fieldForGroup[group.id] = [];\n }\n})\nif (oldGroup && !_.isEmpty(oldGroup)) {\n _.forEach(oldGroup, function (value, key) {\n fieldForGroup[\"未分组\"] = _.unionBy(fieldForGroup[\"未分组\"], value);\n });\n}\n\n//未分组 放在所有分组开头,隐藏 放在所有分组最后\nconst defaultGroup = fieldForGroup[\"未分组\"];\nconst hiddenGroup = fieldForGroup[\"隐藏\"];\ndelete fieldForGroup[\"未分组\"];\ndelete fieldForGroup[\"隐藏\"];\nfieldForGroup = _.merge({ \"未分组\": defaultGroup }, fieldForGroup, { \"隐藏\": hiddenGroup });\n\n//根据fieldForGroup调整groups顺序,设置分组与保存时需要groups按照顺序\nconst keys = _.keys(fieldForGroup);\nsetting_groups = _.sortBy(setting_groups, function (group) { return _.findIndex(keys, function (key) { return key == group.group_name }) });\n\ndoAction({\n actionType: 'setValue',\n componentId: 'service_field_design',\n args: {\n value: {\n groups: setting_groups\n }\n }\n});\n\ndoAction({\n actionType: 'setValue',\n componentId: \"form_field_design\",\n args: {\n value: { design_field: fieldForGroup }\n }\n});"
100
+ "script": "///整理分组数据\nconst defaultGroupName = \"未分组\";\nconst hiddenGroupName = \"隐藏\";\nlet setting_groups = _.cloneDeep(event.data.groups);\nif (!_.find(setting_groups, { is_default: true })) {\n setting_groups.unshift({\n \"id\": defaultGroupName,\n \"group_name\": defaultGroupName,\n \"visible_on\": \"\",\n \"is_default\": true\n })\n}\nif (!_.find(setting_groups, { is_hidden: true })) {\n setting_groups.push({\n id: hiddenGroupName,\n group_name: hiddenGroupName,\n visible_on: \"\",\n is_hidden: true\n });\n}\nsetting_groups.forEach(function (group) {\n if (group.is_hidden) {\n group.group_name = hiddenGroupName;\n group.visible_on = \"\";\n }\n if (group.is_default) {\n group.group_name = defaultGroupName;\n group.visible_on = \"\";\n }\n if (!group.id) {\n group.id = group.group_name;\n }\n if (!group.visible_on) {\n group.visible_on = \"\"\n }\n})\n\n//整理字段与分组关系的数据\nlet fieldForGroup = {};\nlet oldGroup = _.cloneDeep(event.data.fieldForGroup);\nsetting_groups.forEach(function (group) {\n if (_.has(oldGroup, group.id)) {\n fieldForGroup[group.id] = oldGroup[group.id];\n oldGroup = _.omit(oldGroup, group.id);\n } else {\n fieldForGroup[group.id] = [];\n }\n})\nif (oldGroup && !_.isEmpty(oldGroup)) {\n _.forEach(oldGroup, function (value, key) {\n fieldForGroup[defaultGroupName] = _.unionBy(fieldForGroup[defaultGroupName], value);\n });\n}\n\n//未分组 放在所有分组开头,隐藏 放在所有分组最后\nconst defaultGroup = fieldForGroup[defaultGroupName];\nconst hiddenGroup = fieldForGroup[hiddenGroupName];\ndelete fieldForGroup[defaultGroupName];\ndelete fieldForGroup[hiddenGroupName];\nfieldForGroup = _.merge({ [defaultGroupName]: defaultGroup }, fieldForGroup, { [hiddenGroupName]: hiddenGroup });\n\n//根据fieldForGroup调整groups顺序,设置分组与保存时需要groups按照顺序\nconst keys = _.keys(fieldForGroup);\nsetting_groups = _.sortBy(setting_groups, function (group) { return _.findIndex(keys, function (key) { return key == group.group_name }) });\n\ndoAction({\n actionType: 'setValue',\n componentId: 'service_field_design',\n args: {\n value: {\n groups: setting_groups\n }\n }\n});\n\ndoAction({\n actionType: 'setValue',\n componentId: \"form_field_design\",\n args: {\n value: { design_field: fieldForGroup }\n }\n});"
92
101
  }
93
102
  ]
94
103
  }
@@ -312,7 +321,7 @@
312
321
  "headers": {
313
322
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
314
323
  },
315
- "requestAdaptor": "var graphqlOrder = \"\";\n//先修改字段,使系统对象自行自定义\n//根据design_field,修改对象字段的sort_no与groups\nvar index = 1;\n_.forEach(api.data.design_field, function (items, key) {\n let group = key;\n if (key == \"未分组\" || key == \"隐藏\") {\n group = null;\n }\n _.forEach(items, function (item) {\n const field = _.find(api.data.fields, { 'id': item });\n //如果是在隐藏分组里的字段,就给visible_on属性赋予{{false}};如果不在隐藏分组里,就判断来自数据库内的visible_on属性是不是{{false}},是就清除,不是就保持不变\n const visible_on = key == \"隐藏\" ? \"{{false}}\" : (field.attr_visible_on == \"{{false}}\" ? \"{{true}}\" : field.attr_visible_on);\n let docJson = {\n sort_no: index * 10,\n group, visible_on\n }\n if (field.id == field._id && field.is_system) {\n docJson = {\n object: api.data.$self.designObjectName,\n type: field.type,\n _name: field._name,\n label: field.label,\n sort_no: index * 10,\n group,\n visible_on,\n is_system: field.is_system\n }\n }\n if (key != \"隐藏\") {\n docJson.hidden = false;\n }\n let itemOrder = 'upsert' + index + ':object_fields__upsert(id:\"' + item + '\" , doc:' + JSON.stringify(JSON.stringify(docJson)) + '){_id}\\n';\n graphqlOrder += itemOrder;\n index++;\n })\n})\n\n//根据groups,修改对象的字段分组field_groups\nvar field_groups = _.cloneDeep(api.data.groups);\n_.remove(field_groups, { is_default: true });\n_.remove(field_groups, { is_hidden: true });\nfield_groups = field_groups.map(function (group) {\n return _.omit(group, 'id');\n})\nconst keys = _.keys(api.data.design_field);\nfield_groups = _.sortBy(field_groups, function (group) { return _.findIndex(keys, function (key) { return key == group.group_name }) });\nconst groupOrder = 'upsert0:objects__upsert(id:\"' + api.data.$self.designObjectId + '\" , doc:' + JSON.stringify(JSON.stringify({ field_groups, name: api.data.$self.designObjectName })) + ') {_id}';\ngraphqlOrder += groupOrder;\n\n\ngraphqlOrder = 'mutation {' + graphqlOrder + '}';\nreturn {\n ...api,\n data: {\n query: graphqlOrder\n }\n}",
324
+ "requestAdaptor": "var graphqlOrder = \"\";\nvar field_groups = _.cloneDeep(api.data.groups);\n//先修改字段,使系统对象自行自定义\n//根据design_field,修改对象字段的sort_no与groups\nvar index = 1;\nconst defaultGroupName = _.find(field_groups, { 'is_default': true })?.name || \"未分组\";\nconst hiddenGroupName = _.find(field_groups, { 'is_hidden': true })?.name || \"隐藏\";\n_.forEach(api.data.design_field, function (items, key) {\n let group = key;\n if (key == defaultGroupName || key == hiddenGroupName) {\n group = null;\n }\n _.forEach(items, function (item) {\n const field = _.find(api.data.fields, { 'id': item });\n //如果是在隐藏分组里的字段,就给visible_on属性赋予{{false}};如果不在隐藏分组里,就判断来自数据库内的visible_on属性是不是{{false}},是就清除,不是就保持不变\n const visible_on = key == hiddenGroupName ? \"{{false}}\" : (field.attr_visible_on == \"{{false}}\" ? \"{{true}}\" : field.attr_visible_on);\n let docJson = {\n sort_no: index * 10,\n group, visible_on\n }\n if (field.id == field._id && field.is_system) {\n docJson = {\n object: api.data.$self.designObjectName,\n type: field.type,\n _name: field._name,\n label: field.label,\n sort_no: index * 10,\n group,\n visible_on,\n is_system: field.is_system\n }\n }\n if (key != hiddenGroupName) {\n docJson.hidden = false;\n }\n let itemOrder = 'upsert' + index + ':object_fields__upsert(id:\"' + item + '\" , doc:' + JSON.stringify(JSON.stringify(docJson)) + '){_id}\\n';\n graphqlOrder += itemOrder;\n index++;\n })\n})\n\n//根据groups,修改对象的字段分组field_groups\n_.remove(field_groups, { is_default: true });\n_.remove(field_groups, { is_hidden: true });\nfield_groups = field_groups.map(function (group) {\n return _.omit(group, 'id');\n})\nconst keys = _.keys(api.data.design_field);\nfield_groups = _.sortBy(field_groups, function (group) { return _.findIndex(keys, function (key) { return key == group.group_name }) });\nconst groupOrder = 'upsert0:objects__upsert(id:\"' + api.data.$self.designObjectId + '\" , doc:' + JSON.stringify(JSON.stringify({ field_groups, name: api.data.$self.designObjectName })) + ') {_id}';\ngraphqlOrder += groupOrder;\n\n\ngraphqlOrder = 'mutation {' + graphqlOrder + '}';\nreturn {\n ...api,\n data: {\n query: graphqlOrder\n }\n}",
316
325
  "adaptor": "if (payload.errors) {\n payload.status = 2;\n payload.msg = window.t ? window.t(payload.errors[\n 0\n ].message) : payload.errors[\n 0\n ].message;\n}\nreturn payload;",
317
326
  "messages": {},
318
327
  "data": {
@@ -358,7 +367,7 @@
358
367
  },
359
368
  "messages": {},
360
369
  "requestAdaptor": "",
361
- "adaptor": "//筛选出可编辑的字段\r\nvar oldFields = _.filter(payload.data.fields, function (obj) { return obj.recordPermissions.allowEdit; });\r\n//将group为空的字段分为未分组的组中,将系统字段的_id改为对象名.字段名\r\noldFields = _.map(oldFields, function (obj) {\r\n obj.originId = obj._id;\r\n if (obj.hidden || obj.visible_on == \"{{false}}\") {\r\n obj.group = \"隐藏\";\r\n }else if (obj.group === null) {\r\n obj.group = \"未分组\";\r\n }\r\n if (obj.is_system) {\r\n obj._id = api.data.designObjectName + \".\" + obj._name;\r\n }\r\n return obj;\r\n});\r\n\r\n//整合出字段的属性集合\r\nconst fields = oldFields.map((field) => {\r\n return {\r\n \"id\": field._id,//用与steedos-board组件的关系分辨\r\n \"_name\": field._name,\r\n \"label\": field.label,\r\n \"_id\": field.originId,//用于打开steedos-objectform\r\n \"columnSpan\": field.is_wide ? 2 : 1,\r\n \"is_system\": field.is_system,\r\n \"type\": field.type,\r\n \"attr_visible_on\": field.visible_on\r\n }\r\n})\r\n\r\n//从字段的group属性中,整合出字段分组的属性集合\r\nlet field_groups = _.map(_.uniqBy(oldFields, \"group\"), function (obj) {\r\n return {\r\n \"id\": obj.group,\r\n \"group_name\": obj.group,\r\n \"visible_on\": \"\"\r\n };\r\n});\r\n\r\n//合并对象上的field_groups与字段上的group\r\nlet groups = _.unionBy(api.data.field_groups, field_groups, 'id');\r\n\r\n//判断是否第一次调用接口,不是的话(说明是触发了datachange事件),返回fields与fieldUpdateData\r\nif (api.data.dataInitialed) {\r\n const eventData = api.data.eventData;\r\n let fieldUpdateData = \"\";\r\n const fieldForGroup = api.data.fieldForGroup;\r\n let fieldForGroupLength = 0;\r\n _.forIn(fieldForGroup, function (value, key) {\r\n fieldForGroupLength += value.length;\r\n });\r\n if (fieldForGroupLength < fields.length) {\r\n fieldUpdateData = {\r\n type: \"insert\",\r\n id: eventData.result.data.recordId\r\n }\r\n } else if (fieldForGroupLength > fields.length) {\r\n fieldUpdateData = {\r\n type: \"delete\",\r\n id: eventData._id\r\n }\r\n }\r\n return payload = {\r\n data: {\r\n fields,\r\n fieldUpdateData\r\n }\r\n }\r\n}\r\n\r\n//整合字段与分组的关系\r\nconst oldFieldsInGroups = _.groupBy(oldFields, \"group\");\r\nlet fieldForGroup = _.mapValues(_.groupBy(groups, \"id\"), function (group,key) {\r\n if (oldFieldsInGroups[key]) {\r\n return _.map(oldFieldsInGroups[key], function (obj) {\r\n return obj._id;\r\n });\r\n } else {\r\n return [];\r\n }\r\n});\r\n\r\n//未分组 放在所有分组开头,隐藏 放在所有分组最后\r\nconst defaultGroup = fieldForGroup[\"未分组\"];\r\nconst hiddenGroup = fieldForGroup[\"隐藏\"];\r\ndelete fieldForGroup[\"未分组\"];\r\ndelete fieldForGroup[\"隐藏\"];\r\nfieldForGroup = _.merge({ \"未分组\": defaultGroup }, fieldForGroup, { \"隐藏\": hiddenGroup });\r\n\r\n//根据fieldForGroup调整groups顺序,设置分组与保存时需要groups按照顺序\r\nconst keys = _.keys(fieldForGroup);\r\ngroups = _.sortBy(groups, function (group) { return _.findIndex(keys, function (key) { return key == group.group_name }) });\r\n\r\nreturn payload = {\r\n data: {\r\n fields,\r\n groups,\r\n fieldForGroup,\r\n dataInitialed: true\r\n }\r\n};",
370
+ "adaptor": "//筛选出可编辑的字段\nvar oldFields = _.filter(payload.data.fields, function (obj) { return obj.recordPermissions.allowEdit; });\n//将group为空的字段分为未分组的组中,将系统字段的_id改为对象名.字段名\noldFields = _.map(oldFields, function (obj) {\n obj.originId = obj._id;\n if (obj.hidden || obj.visible_on == \"{{false}}\") {\n obj.group = \"隐藏\";\n }else if (obj.group === null) {\n obj.group = \"未分组\";\n }\n if (obj.is_system) {\n obj._id = api.data.designObjectName + \".\" + obj._name;\n }\n return obj;\n});\n\n//整合出字段的属性集合\nconst fields = oldFields.map((field) => {\n return {\n \"id\": field._id,//用与steedos-board组件的关系分辨\n \"_name\": field._name,\n \"label\": field.label,\n \"_id\": field.originId,//用于打开steedos-objectform\n \"columnSpan\": field.is_wide ? 2 : 1,\n \"is_system\": field.is_system,\n \"type\": field.type,\n \"attr_visible_on\": field.visible_on\n }\n})\n\n//从字段的group属性中,整合出字段分组的属性集合\nlet field_groups = _.map(_.uniqBy(oldFields, \"group\"), function (obj) {\n return {\n \"id\": obj.group,\n \"group_name\": obj.group,\n \"visible_on\": \"\"\n };\n});\n\n//合并对象上的field_groups与字段上的group\nlet groups = _.unionBy(api.data.field_groups, field_groups, 'id');\n\n//判断是否第一次调用接口,不是的话(说明是触发了datachange事件),返回fields与fieldUpdateData;目前新增与删除都不支持\nif (api.data.dataInitialed) {\n const eventData = api.data.eventData;\n let fieldUpdateData = \"\";\n const fieldForGroup = api.data.fieldForGroup;\n let fieldForGroupLength = 0;\n _.forIn(fieldForGroup, function (value, key) {\n fieldForGroupLength += value.length;\n });\n if (fieldForGroupLength < fields.length) {\n fieldUpdateData = {\n type: \"insert\",\n id: eventData.result.data.recordId\n }\n } else if (fieldForGroupLength > fields.length) {\n fieldUpdateData = {\n type: \"delete\",\n id: eventData._id\n }\n }\n return payload = {\n data: {\n fields,\n fieldUpdateData,\n \n }\n }\n}\n\n//整合字段与分组的关系\nconst oldFieldsInGroups = _.groupBy(oldFields, \"group\");\nlet fieldForGroup = _.mapValues(_.groupBy(groups, \"id\"), function (group,key) {\n if (oldFieldsInGroups[key]) {\n return _.map(oldFieldsInGroups[key], function (obj) {\n return obj._id;\n });\n } else {\n return [];\n }\n});\n\n//未分组 放在所有分组开头,隐藏 放在所有分组最后\nconst defaultGroupName = _.find(groups, { 'is_default': true })?.name || \"未分组\";\nconst hiddenGroupName = _.find(groups, { 'is_hidden': true })?.name || \"隐藏\";\nconst defaultGroup = fieldForGroup[defaultGroupName];\nconst hiddenGroup = fieldForGroup[hiddenGroupName];\ndelete fieldForGroup[defaultGroupName];\ndelete fieldForGroup[hiddenGroupName];\nfieldForGroup = _.merge({ [defaultGroupName]: defaultGroup }, fieldForGroup, { [hiddenGroupName]: hiddenGroup });\n\n//根据fieldForGroup调整groups顺序,设置分组与保存时需要groups按照顺序\nconst keys = _.keys(fieldForGroup);\ngroups = _.sortBy(groups, function (group) { return _.findIndex(keys, function (key) { return key == group.group_name }) });\n\nreturn payload = {\n data: {\n fields,\n groups,\n fieldForGroup,\n dataInitialed: true\n }\n};",
362
371
  "sendOn": "!!this.designObjectId"
363
372
  },
364
373
  "messages": {},
@@ -367,7 +376,7 @@
367
376
  "actions": [
368
377
  {
369
378
  "actionType": "custom",
370
- "script": "\nconst fieldForGroup = context.props.data.fieldForGroup;\nconst fieldUpdateData = event.data.fieldUpdateData;\nif (fieldUpdateData && fieldUpdateData.type == \"delete\") {\n _.forIn(fieldForGroup, function (group, group_name) {\n _.remove(group, function (field) {\n return field === fieldUpdateData.id;\n })\n });\n} else if (fieldUpdateData && fieldUpdateData.type == \"insert\") {\n fieldForGroup[\"未分组\"].push(fieldUpdateData.id);\n}\n// doAction({\n// actionType: 'setValue',\n// componentId: \"service_field_design\",\n// args: {\n// value: { fieldForGroup }\n// }\n// });\n\ndoAction({\n actionType: 'setValue',\n componentId: \"form_field_design\",\n args: {\n value: { design_field:fieldForGroup }\n }\n});\n\n",
379
+ "script": "//新增或删除时才会触发,目前暂不支持\nconst fieldForGroup = context.props.data.fieldForGroup;\nconst fieldUpdateData = event.data.fieldUpdateData;\nif (fieldUpdateData && fieldUpdateData.type == \"delete\") {\n _.forIn(fieldForGroup, function (group, group_name) {\n _.remove(group, function (field) {\n return field === fieldUpdateData.id;\n })\n });\n} else if (fieldUpdateData && fieldUpdateData.type == \"insert\") {\n fieldForGroup[\"未分组\"].push(fieldUpdateData.id);\n}\n// doAction({\n// actionType: 'setValue',\n// componentId: \"service_field_design\",\n// args: {\n// value: { fieldForGroup }\n// }\n// });\n\ndoAction({\n actionType: 'setValue',\n componentId: \"form_field_design\",\n args: {\n value: { design_field:fieldForGroup }\n }\n});\n\n",
371
380
  "expression": "${event.data.fieldUpdateData}"
372
381
  }
373
382
  ]
@@ -391,7 +400,7 @@
391
400
  },
392
401
  "messages": {},
393
402
  "requestAdaptor": "",
394
- "adaptor": "const field_groups = payload.data.objects[0] && _.map(payload.data.objects[0].field_groups, function (obj) {\n return {\n \"id\": obj.group_name,\n \"group_name\": obj.group_name,\n \"visible_on\": obj.visible_on,\n \"default_folded\": obj.default_folded\n }\n});\nfield_groups.unshift({\n id: \"隐藏\",\n group_name: \"隐藏\",\n visible_on: \"\",\n is_hidden: true\n});\nfield_groups.unshift({\n id: \"未分组\",\n group_name: \"未分组\",\n visible_on: \"\",\n is_default: true\n});\n\n\n\nconst designObjectId = payload.data.objects[0] && payload.data.objects[0]._id;\nreturn payload = {\n data: {\n field_groups,\n designObjectId,\n designObjectLabel: payload.data.objects[0] && payload.data.objects[0].label,\n _master: {\n recordId: designObjectId\n }\n }\n}"
403
+ "adaptor": "const field_groups = payload.data.objects[0] && _.map(payload.data.objects[0].field_groups, function (obj) {\n return {\n \"id\": obj.group_name,\n \"group_name\": obj.group_name,\n \"visible_on\": obj.visible_on,\n \"collapsed\": obj.collapsed\n }\n});\nfield_groups.unshift({\n id: \"隐藏\",\n group_name: \"隐藏\",\n visible_on: \"\",\n is_hidden: true\n});\nfield_groups.unshift({\n id: \"未分组\",\n group_name: \"未分组\",\n visible_on: \"\",\n is_default: true\n});\n\n\n\nconst designObjectId = payload.data.objects[0] && payload.data.objects[0]._id;\nreturn payload = {\n data: {\n field_groups,\n designObjectId,\n designObjectLabel: payload.data.objects[0] && payload.data.objects[0].label,\n _master: {\n recordId: designObjectId\n }\n }\n}"
395
404
  },
396
405
  "messages": {},
397
406
  "onEvent": {
@@ -125,6 +125,25 @@
125
125
  },
126
126
  "id": "u:adf4200a2170"
127
127
  }
128
+ },
129
+ "type": {
130
+ "amis": {
131
+ "onEvent": {
132
+ "change": {
133
+ "actions": [
134
+ {
135
+ "actionType": "setValue",
136
+ "args": {
137
+ "value": {
138
+ "defaultValue": null
139
+ }
140
+ },
141
+ "componentId": "steedos_object_fields_form"
142
+ }
143
+ ]
144
+ }
145
+ }
146
+ }
128
147
  }
129
148
  },
130
149
  "form": {
@@ -2,7 +2,7 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-06-02 17:45:15
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-04-28 10:35:46
5
+ * @LastEditTime: 2024-02-29 13:28:53
6
6
  * @Description:
7
7
  -->
8
8
  <html>
@@ -101,6 +101,7 @@
101
101
  schema.data.context.tenantId = tenantId;
102
102
  schema.data.context.userId = userId;
103
103
  schema.data.context.authToken = authToken;
104
+ schema.data.context.user = <%- JSON.stringify(userSession) %>;
104
105
 
105
106
  return schema || initialContent
106
107
  }
@@ -56,6 +56,7 @@ router.get('/api/amisButtonDesign', core.requireAuthentication, async function (
56
56
  userId: userSession.userId,
57
57
  authToken: userSession.authToken,
58
58
  id: req.query.id,
59
+ userSession: userSession
59
60
  }
60
61
  const options = {}
61
62
  ejs.renderFile(filename, data, options, function(err, str){
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/standard-object-database",
3
- "version": "2.6.8-beta.8",
3
+ "version": "2.6.8",
4
4
  "main": "package.service.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -12,10 +12,10 @@
12
12
  "description": "steedos package",
13
13
  "dependencies": {
14
14
  "@steedos-widgets/amis-lib": "^1.0.22",
15
- "@steedos/metadata-core": "2.6.8-beta.8",
16
- "@steedos/standard-objects": "2.6.8-beta.8"
15
+ "@steedos/metadata-core": "2.6.8",
16
+ "@steedos/standard-objects": "2.6.8"
17
17
  },
18
18
  "repository": {},
19
19
  "license": "MIT",
20
- "gitHead": "9bd8e831f7078537495f2d48e24185803ac42373"
20
+ "gitHead": "2114137be783174e207dac675e75a3597bacdf21"
21
21
  }
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * @Author: sunhaolin@hotoa.com
3
3
  * @Date: 1985-10-26 16:15:00
4
- * @LastEditors: 孙浩林 sunhaolin@steedos.com
5
- * @LastEditTime: 2023-11-30 10:13:13
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2024-02-29 10:24:41
6
6
  * @Description:
7
7
  */
8
8
  "use strict";
@@ -167,6 +167,9 @@ module.exports = {
167
167
  const dbRecord = await object.directFind({filters: ['_id','=',id]});
168
168
  if(dbRecord.length === 0){
169
169
  // const newId = await object._makeNewID();
170
+ const objectConfig = await object.toConfig();
171
+ let field_groups = objectConfig.field_groups || null;
172
+
170
173
  const now = new Date();
171
174
  await object.directInsert(Object.assign({}, data, {
172
175
  // _id: newId,
@@ -182,13 +185,14 @@ module.exports = {
182
185
  company_ids: userSession.company_ids,
183
186
  extend: name,
184
187
  custom: false,
185
- is_system: true
188
+ is_system: true,
189
+ field_groups: field_groups
186
190
  }));
187
191
  // id = newId;
188
192
  }
189
193
 
190
194
  if(data.is_system){
191
- data = _.pick(data, ['label', 'icon', 'enable_files', 'enable_tasks', 'enable_notes', 'enable_events', 'enable_workflow', 'enable_instances', 'enable_inline_edit', 'enable_tree', 'enable_enhanced_lookup', 'description', 'is_deleted'])
195
+ data = _.pick(data, ['label', 'icon', 'enable_files', 'enable_tasks', 'enable_notes', 'enable_events', 'enable_workflow', 'enable_instances', 'enable_inline_edit', 'enable_tree', 'enable_enhanced_lookup', 'description', 'is_deleted', 'field_groups'])
192
196
  }
193
197
 
194
198
  return object.update(id, data, userSession)