@steedos/standard-object-database 2.4.0-beta.9 → 2.4.1

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.
@@ -1,24 +1,35 @@
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2022-08-05 14:17:44
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-02-22 10:23:14
6
+ * @Description:
7
+ */
1
8
  const objectql = require("@steedos/objectql");
2
9
  const objectName = "object_fields";
3
10
  Meteor.startup(function () {
4
11
  var _change, _remove, inited = false;
5
12
  _change = function (document) {
6
- try {
7
- objectql.getSteedosSchema().broker.call(`permission_fields.resetAllPermissionSetFieldPermissions`, {
8
- objectName: document.object
9
- }, {
10
- meta: {
11
- user: {
12
- userId: document.owner,
13
- spaceId: document.space,
14
- company_id: document.company_id,
15
- company_ids: document.company_ids,
13
+ // 重置字段权限延迟10秒,防止对象服务未上线
14
+ setTimeout(()=>{
15
+ try {
16
+ console.log("====resetAllPermissionSetFieldPermissions====")
17
+ objectql.getSteedosSchema().broker.call(`permission_fields.resetAllPermissionSetFieldPermissions`, {
18
+ objectName: document.object
19
+ }, {
20
+ meta: {
21
+ user: {
22
+ userId: document.owner,
23
+ spaceId: document.space,
24
+ company_id: document.company_id,
25
+ company_ids: document.company_ids,
26
+ }
16
27
  }
17
- }
18
- });
19
- } catch (error) {
20
- console.error(`resetAllPermissionSetFieldPermissions`, error)
21
- }
28
+ });
29
+ } catch (error) {
30
+ console.error(`resetAllPermissionSetFieldPermissions`, error)
31
+ }
32
+ }, 1000 * 10)
22
33
  };
23
34
  Creator.getCollection(objectName).find({}, {
24
35
  fields: {
@@ -1,24 +1,33 @@
1
+ /*
2
+ * @Author: baozhoutao@steedos.com
3
+ * @Date: 2022-08-05 14:17:44
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-02-22 10:32:01
6
+ * @Description:
7
+ */
1
8
  const objectql = require("@steedos/objectql");
2
9
  const objectName = "permission_objects";
3
10
  Meteor.startup(function () {
4
11
  var _change, _remove, inited = false;
5
12
  _change = function (document) {
6
- try {
7
- objectql.getSteedosSchema().broker.call(`permission_fields.resetFieldPermissions`, {
8
- permissionObjectId: document._id
9
- }, {
10
- meta: {
11
- user: {
12
- userId: document.owner,
13
- spaceId: document.space,
14
- company_id: document.company_id,
15
- company_ids: document.company_ids,
13
+ setTimeout(()=>{
14
+ try {
15
+ objectql.getSteedosSchema().broker.call(`permission_fields.resetFieldPermissions`, {
16
+ permissionObjectId: document._id
17
+ }, {
18
+ meta: {
19
+ user: {
20
+ userId: document.owner,
21
+ spaceId: document.space,
22
+ company_id: document.company_id,
23
+ company_ids: document.company_ids,
24
+ }
16
25
  }
17
- }
18
- });
19
- } catch (error) {
20
- console.error(`resetFieldPermissions`, error)
21
- }
26
+ });
27
+ } catch (error) {
28
+ console.error(`resetFieldPermissions`, error)
29
+ }
30
+ }, 1000 * 10)
22
31
  };
23
32
  Creator.getCollection(objectName).find({}, {
24
33
  fields: {
@@ -2,12 +2,12 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-09-21 18:19:06
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2022-09-22 15:01:31
5
+ * @LastEditTime: 2023-03-01 10:15:14
6
6
  * @Description:
7
7
  */
8
8
  module.exports = {
9
9
  showDesign: function (object_name, record_id) {
10
- document.location = Steedos.absoluteUrl(`/api/amisButtonDesign?id=${record_id}&object=${this.record.object}`);
10
+ document.location = Steedos.absoluteUrl(`/api/amisButtonDesign?id=${record_id}&object=${this.record.record.object}&assetUrls=${Builder.settings.assetUrls}`);
11
11
  },
12
12
  showDesignVisible: function (object_name, record_id, record_permissions) {
13
13
  var perms;
@@ -13,22 +13,6 @@ fields:
13
13
  label: Object
14
14
  create: false
15
15
  sort_no: 110
16
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
17
- function () {
18
- var _options;
19
-
20
- _options = [];
21
-
22
- _.forEach(Creator.objectsByName, function (o, k) {
23
- return _options.push({
24
- label: o.label,
25
- value: k,
26
- icon: o.icon
27
- });
28
- });
29
-
30
- return _options;
31
- }
32
16
  label:
33
17
  type: text
34
18
  label: Label
@@ -47,6 +31,7 @@ fields:
47
31
  type: boolean
48
32
  label: Enable
49
33
  sort_no: 140
34
+ defaultValue: true
50
35
  visible:
51
36
  type: boolean
52
37
  omit: true
@@ -73,7 +58,7 @@ fields:
73
58
  }, {
74
59
  label: "显示在记录查看页右上角的“更多”下拉菜单中,以及列表视图中每项的下拉菜单中",
75
60
  value: "record_more",
76
- icon: "action.more"
61
+ icon: "lead_list"
77
62
  }, {
78
63
  label: "显示在列表视图中每项的下拉菜单中",
79
64
  value: "list_item",
@@ -85,7 +70,7 @@ fields:
85
70
  }, {
86
71
  label: "显示在记录查看页右上角的“更多”下拉菜单中",
87
72
  value: "record_only_more",
88
- icon: "action.more"
73
+ icon: "lead_list"
89
74
  }];
90
75
  }
91
76
  type:
@@ -98,7 +83,7 @@ fields:
98
83
  value: amis_button
99
84
  # - label: 打印模板(word)
100
85
  # value: word-print
101
- defaultValue: script
86
+ defaultValue: amis_button
102
87
  # word_template:
103
88
  # type: lookup
104
89
  # reference_to: word_templates
@@ -121,6 +106,7 @@ fields:
121
106
  language: json
122
107
  required: false
123
108
  is_wide: true
109
+ hidden: true
124
110
  visible_on: "{{formData.type == 'amis_button' ? true: false}}"
125
111
  paging:
126
112
  enabled: false
@@ -14,24 +14,7 @@ fields:
14
14
  reference_to_field: name
15
15
  required: true
16
16
  write_requires_master_read: true
17
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
18
- function () {
19
- var _options;
20
-
21
- _options = [];
22
-
23
- _.forEach(Creator.objectsByName, function (o, k) {
24
- if(!['base','core','space_users_invite','_object_reload_logs'].includes(k)){
25
- return _options.push({
26
- label: o.label,
27
- value: k,
28
- icon: o.icon
29
- });
30
- }
31
- });
32
-
33
- return _options;
34
- }
17
+ filters: ['name', 'notcontains', ['base','core','space_users_invite','_object_reload_logs']]
35
18
  sort_no: 110
36
19
  label:
37
20
  type: text
@@ -108,7 +91,7 @@ fields:
108
91
  value: file
109
92
  - label: Formula
110
93
  value: formula
111
- - label: Roll-Up Summary
94
+ - label: 累计汇总
112
95
  value: summary
113
96
  sort_no: 150
114
97
  defaultValue:
@@ -124,10 +107,6 @@ fields:
124
107
  label: Reference to
125
108
  reference_to: objects
126
109
  reference_to_field: name
127
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
128
- function () {
129
- return Steedos.getObjectsOptions();
130
- }
131
110
  visible_on: "{{['lookup', 'master_detail'].indexOf(formData.type) > -1 ? true: false}}"
132
111
  required: "{{['master_detail'].indexOf(formData.type) > -1 ? true: false}}"
133
112
  sort_no: 180
@@ -169,7 +148,7 @@ fields:
169
148
  required: "{{['autonumber', 'formula'].indexOf(formData.type) > -1 ? true: false}}"
170
149
  sort_no: 210
171
150
  data_type:
172
- type: select
151
+ type: lookup
173
152
  label: Data Type
174
153
  inlineHelpText: This field must be filled when the field type is 'Formula'
175
154
  depend_on:
@@ -326,35 +305,54 @@ fields:
326
305
  type: lookup
327
306
  label: Object to Summarize
328
307
  inlineHelpText: This field must be filled in when the field type is 'Roll-Up Summary'.
308
+ reference_to: objects
309
+ reference_to_field: name
329
310
  depend_on:
330
311
  - object
331
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
332
- function (values) {
333
- if(!values.object){
334
- return [];
335
- }
336
- /*在lookup控件编辑的时候values.object为字符串,在记录详细界面为对象*/
337
- var objectName = typeof values.object === "string" ? values.object : values.object.name;
338
- var object = Creator.getObject(objectName);
339
- if(!object){
340
- return [];
341
- }
342
- var relatedObjects = object.related_objects;
343
- var _options = [];
344
- _.forEach(relatedObjects, function (item, index) {
345
- var relatedObject = Creator.Objects[item.object_name];
346
- var relatedField = relatedObject && relatedObject.fields[item.foreign_key];
347
- /*只需要支持master_detail类型的相关对象,也不支持multiple(本身就不允许配置master_detail为multiple)*/
348
- if(relatedField && relatedField.type === "master_detail" && !relatedField.multiple){
349
- _options.push({
350
- label: relatedObject.label,
351
- value: relatedObject.name,
352
- icon: relatedObject.icon
353
- });
354
- }
355
- });
356
- return _options;
357
- }
312
+ amis:
313
+ "source":
314
+ "method": "get"
315
+ "url": "${context.rootUrl}/service/api/amis-metadata-objects/objects/${object}/detailLists/options?depend_on_object=${object}"
316
+ "headers":
317
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
318
+ "adaptor": ""
319
+ "sendOn": "this.object"
320
+ "requestAdaptor": ""
321
+ "autoComplete":
322
+ "method": "get"
323
+ "url": "${context.rootUrl}/service/api/amis-metadata-objects/objects/${object}/detailLists/options?depend_on_object=${object}"
324
+ "headers":
325
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
326
+ "adaptor": ""
327
+ "sendOn": "this.object"
328
+ "requestAdaptor": ""
329
+ # optionsFunction: !<tag:yaml.org,2002:js/function> |-
330
+ # function (values) {
331
+ # if(!values.object){
332
+ # return [];
333
+ # }
334
+ # /*在lookup控件编辑的时候values.object为字符串,在记录详细界面为对象*/
335
+ # var objectName = typeof values.object === "string" ? values.object : values.object.name;
336
+ # var object = Creator.getObject(objectName);
337
+ # if(!object){
338
+ # return [];
339
+ # }
340
+ # var relatedObjects = object.related_objects;
341
+ # var _options = [];
342
+ # _.forEach(relatedObjects, function (item, index) {
343
+ # var relatedObject = Creator.Objects[item.object_name];
344
+ # var relatedField = relatedObject && relatedObject.fields[item.foreign_key];
345
+ # /*只需要支持master_detail类型的相关对象,也不支持multiple(本身就不允许配置master_detail为multiple)*/
346
+ # if(relatedField && relatedField.type === "master_detail" && !relatedField.multiple){
347
+ # _options.push({
348
+ # label: relatedObject.label,
349
+ # value: relatedObject.name,
350
+ # icon: relatedObject.icon
351
+ # });
352
+ # }
353
+ # });
354
+ # return _options;
355
+ # }
358
356
  visible_on: "{{formData.type === 'summary' ? true: false}}"
359
357
  required: "{{formData.type === 'summary' ? true: false}}"
360
358
  sort_no: 300
@@ -584,6 +582,13 @@ fields:
584
582
  is_wide: true
585
583
  group: Advanced
586
584
  sort_no: 470
585
+ amis:
586
+ label: Amis 属性
587
+ type: code
588
+ language: json
589
+ is_wide: true
590
+ group: Advanced
591
+ sort_no: 455
587
592
  paging:
588
593
  enabled: false
589
594
  list_views:
@@ -1,16 +1,16 @@
1
1
  /*
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-03-28 09:35:34
4
- * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2022-06-08 11:12:24
4
+ * @LastEditors: sunhaolin@hotoa.com
5
+ * @LastEditTime: 2023-03-05 16:47:05
6
6
  * @Description:
7
7
  */
8
8
  module.exports = {
9
9
  listenTo: 'objects',
10
10
 
11
11
  createDefaultRecordView: function (object_name, record_id, item_element) {
12
- if(object_name === 'objects' && this.record){
13
- const objectApiName = this.record.name;
12
+ if(object_name === 'objects' && this.record && this.record.record){
13
+ const objectApiName = this.record.record.name;
14
14
  $("body").addClass("loading");
15
15
  const res = Steedos.authRequest(`/service/api/@${objectApiName}/defUiSchema`, { type: 'post', async: false});
16
16
  $("body").removeClass("loading");
@@ -13,9 +13,11 @@ module.exports = {
13
13
  }
14
14
  });
15
15
  },
16
- customizeVisible: function(object_name, record_id, record_permissions, record){
17
- return Creator.baseObject.actions.standard_new.visible() && record.is_system;
16
+ customizeVisible: function(object_name, record_id, record_permissions, data){
17
+ var record = data && data.record;
18
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system;
18
19
  },
20
+ /*
19
21
  standard_new: function (object_name, record_id, fields){
20
22
  var object = Creator.getObject(object_name);
21
23
  var gridName = this.action.gridName;
@@ -48,6 +50,7 @@ module.exports = {
48
50
  });
49
51
  }
50
52
  },
53
+ */
51
54
  /*
52
55
  standard_edit: function (object_name, record_id, fields){
53
56
  var object = Creator.getObject(object_name);
@@ -22,18 +22,6 @@ fields:
22
22
  reference_to: objects
23
23
  reference_to_field: name
24
24
  write_requires_master_read: true
25
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
26
- function () {
27
- var _options = [];
28
- _.forEach(Creator.objectsByName, function (o, k) {
29
- return _options.push({
30
- label: o.label,
31
- value: k,
32
- icon: o.icon
33
- });
34
- });
35
- return _options;
36
- }
37
25
  type:
38
26
  type: select
39
27
  options:
@@ -51,6 +39,8 @@ fields:
51
39
  multiple: true
52
40
  required: true
53
41
  create: false
42
+ reference_to: permission_set
43
+ reference_to_field: name
54
44
  optionsFunction: !<tag:yaml.org,2002:js/function> |-
55
45
  function () {
56
46
  var profiles = Creator.odata.query('permission_set', {$filter: "(type eq 'profile')"}, true);
@@ -71,23 +61,10 @@ fields:
71
61
  - object_name
72
62
  buttons.$.button_name:
73
63
  type: lookup
74
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
75
- function (values) {
76
- if (!(values != null ? values.object_name : void 0)) {
77
- values.object_name = Session.get("object_name");
78
- }
79
- if(values.object_name && !_.isString(values.object_name)){
80
- values.object_name = values.object_name.name
81
- }
82
- const options = [];
83
- if(values){
84
- var actions = Creator.getObject(values.object_name).actions;
85
- _.each(actions, function(action){
86
- options.push({label: action.label, value: action.name})
87
- })
88
- }
89
- return options;
90
- }
64
+ reference_to: object_actions
65
+ reference_to_field: name
66
+ depend_on:
67
+ - object_name
91
68
  buttons.$.visible_on:
92
69
  label: Visible on
93
70
  type: textarea
@@ -119,24 +96,6 @@ fields:
119
96
  reference_to_field: name
120
97
  depend_on:
121
98
  - object_name
122
- filtersFunction: !<tag:yaml.org,2002:js/function> |-
123
- function (filters, values) {
124
- if(values && values.object_name){
125
- if(values._grid_row_id){
126
- var selected = _.find(values.fields, function(item){return item._id==values._grid_row_id});
127
- var selectedAll = _.pluck(values.fields, 'field_name');
128
- if(selected){
129
- selectedAll = _.difference(selectedAll, [selected.field_name]);
130
- }
131
- if(selectedAll && selectedAll.length > 0){
132
- return [['object', '=', values.object_name], ['name', '!=', selectedAll]]
133
- }
134
- }
135
- return ['object', '=', values.object_name]
136
- }else{
137
- return ['_id', '=', 'no']
138
- }
139
- }
140
99
  fields.$.is_readonly:
141
100
  label: Readonly
142
101
  type: boolean
@@ -31,8 +31,9 @@ module.exports = {
31
31
  });
32
32
 
33
33
  },
34
- customizeVisible: function(object_name, record_id, record_permissions, record){
35
- return Creator.baseObject.actions.standard_new.visible() && record.is_system;
34
+ customizeVisible: function(object_name, record_id, record_permissions, data){
35
+ var record = data && data.record;
36
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system;
36
37
  },
37
38
  copy: function(object_name, record_id){
38
39
  let newRecord = null; // _.clone(Creator.getListView(Session.get("object_name"), record_id));
@@ -87,11 +88,11 @@ module.exports = {
87
88
  }
88
89
  Steedos.Page.Form.StandardNew.render(Session.get("app_id"), 'object_listviews', t("creator_list_copy_list_view"), data, {});
89
90
  },
90
- copyVisible: function(object_name, record_id, record_permissions, record){
91
+ copyVisible: function(object_name, record_id, record_permissions, data){
91
92
  return true;
92
93
  },
93
94
  showDesign: function (object_name, record_id) {
94
- document.location = Steedos.absoluteUrl(`/api/amisListviewDesign?id=${record_id}&object=${this.record.object_name}`);
95
+ document.location = Steedos.absoluteUrl(`/api/amisListviewDesign?id=${record_id}&object=${this.record.object_name}&assetUrls=${Builder.settings.assetUrls}`);
95
96
  },
96
97
  showDesignVisible: function (object_name, record_id, record_permissions) {
97
98
  var perms= {};
@@ -22,22 +22,6 @@ fields:
22
22
  required: true
23
23
  reference_to: objects
24
24
  reference_to_field: name
25
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
26
- function () {
27
- var _options;
28
-
29
- _options = [];
30
-
31
- _.forEach(Creator.objectsByName, function (o, k) {
32
- return _options.push({
33
- label: o.label,
34
- value: k,
35
- icon: o.icon
36
- });
37
- });
38
-
39
- return _options;
40
- }
41
25
  filter_scope:
42
26
  label: Filter Scope
43
27
  type: select
@@ -320,6 +304,20 @@ fields:
320
304
  required: false
321
305
  is_wide: true
322
306
  # visible_on: "{{formData.enable_amis_schema}}"
307
+ requestAdaptor:
308
+ label: 发送适配器
309
+ type: code
310
+ language: "javascript"
311
+ is_wide: true
312
+ inlineHelpText: "函数签名:(api) => api, 数据在 api.data 中,修改后返回 api 对象。"
313
+ group: 数据接口
314
+ adaptor:
315
+ label: 接收适配器
316
+ type: code
317
+ language: "javascript"
318
+ is_wide: true
319
+ inlineHelpText: "函数签名: (payload, response, api) => payload"
320
+ group: 数据接口
323
321
  paging:
324
322
  enabled: false
325
323
  list_views:
@@ -9,22 +9,6 @@ fields:
9
9
  required: true
10
10
  reference_to: objects
11
11
  reference_to_field: name
12
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
13
- function () {
14
- var _options;
15
-
16
- _options = [];
17
-
18
- _.forEach(Creator.objectsByName, function (o, k) {
19
- return _options.push({
20
- label: o.label,
21
- value: k,
22
- icon: o.icon
23
- });
24
- });
25
-
26
- return _options;
27
- }
28
12
  objectName:
29
13
  label: Related Object
30
14
  type: lookup
@@ -42,7 +26,7 @@ fields:
42
26
  _options = [];
43
27
 
44
28
  _.forEach(Creator.objectsByName, function (o, k) {
45
- if(_.include(['cms_files', 'instances', 'tasks', 'notes', 'events', 'approvals', 'audit_records'], k)){
29
+ if(_.includes(['cms_files', 'instances', 'tasks', 'notes', 'events', 'approvals', 'audit_records'], k)){
46
30
  return _options.push({
47
31
  label: o.label,
48
32
  value: k,
@@ -18,22 +18,6 @@ fields:
18
18
  reference_to: objects
19
19
  reference_to_field: name
20
20
  required: true
21
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
22
- function () {
23
- var _options;
24
-
25
- _options = [];
26
-
27
- _.forEach(Creator.objectsByName, function (o, k) {
28
- return _options.push({
29
- label: o.label,
30
- value: k,
31
- icon: o.icon
32
- });
33
- });
34
-
35
- return _options;
36
- }
37
21
  # on:
38
22
  # label: 运行于
39
23
  # type: lookup
@@ -24,7 +24,8 @@ module.exports = {
24
24
  }
25
25
  });
26
26
  },
27
- customizeVisible: function(object_name, record_id, record_permissions, record){
27
+ customizeVisible: function(object_name, record_id, record_permissions, data){
28
+ var record = data && data.record;
28
29
  if(!record){
29
30
  record = {}
30
31
  }
@@ -16,10 +16,6 @@ fields:
16
16
  write_requires_master_read: true
17
17
  reference_to_field: name
18
18
  required: true
19
- optionsFunction: !<tag:yaml.org,2002:js/function> |-
20
- function () {
21
- return Steedos.getObjectsOptions();
22
- }
23
19
 
24
20
  active:
25
21
  type: boolean
@@ -0,0 +1,185 @@
1
+ {
2
+ "type": "page",
3
+ "body": [
4
+ {
5
+ "type": "steedos-record-detail-header",
6
+ "label": "标题面板",
7
+ "objectApiName": "${objectName}",
8
+ "recordId": "${recordId}",
9
+ "onEvent": {
10
+ "recordLoaded": {
11
+ "actions": [
12
+ {
13
+ "actionType": "setValue",
14
+ "args": {
15
+ "value": {
16
+ "recordLoaded": true
17
+ }
18
+ }
19
+ },
20
+ {
21
+ "actionType": "reload",
22
+ "data": {
23
+ "name": "${record.label}",
24
+ "record": "${record}",
25
+ "recordLoaded": true
26
+ }
27
+ }
28
+ ]
29
+ }
30
+ },
31
+ "id": "u:bc56cf9d43bc"
32
+ },
33
+ {
34
+ "type": "tabs",
35
+ "tabs": [
36
+ {
37
+ "title": "详情",
38
+ "body": [
39
+ {
40
+ "type": "steedos-object-form",
41
+ "label": "对象表单",
42
+ "mode": "read",
43
+ "objectApiName": "${objectName}",
44
+ "recordId": "${recordId}",
45
+ "labelAlign": "left",
46
+ "id": "u:4eb5fa6f6fad"
47
+ }
48
+ ],
49
+ "id": "u:b2fbc13aabb8"
50
+ },
51
+ {
52
+ "title": "对象字段",
53
+ "body": [
54
+ {
55
+ "type": "steedos-object-related-listview",
56
+ "objectApiName": "objects",
57
+ "recordId": "${recordId}",
58
+ "relatedObjectApiName": "object_fields",
59
+ "id": "u:6bef459155bd",
60
+ "top": 2000
61
+ }
62
+ ],
63
+ "id": "u:f1a52545b642"
64
+ },
65
+ {
66
+ "title": "列表视图",
67
+ "body": [
68
+ {
69
+ "type": "steedos-object-related-listview",
70
+ "objectApiName": "objects",
71
+ "recordId": "${recordId}",
72
+ "relatedObjectApiName": "object_listviews",
73
+ "id": "u:c415f75c5557",
74
+ "perPage": 20
75
+ }
76
+ ],
77
+ "id": "u:df900c5f2119"
78
+ },
79
+ {
80
+ "title": "操作按钮",
81
+ "body": [
82
+ {
83
+ "type": "steedos-object-related-listview",
84
+ "objectApiName": "objects",
85
+ "recordId": "${recordId}",
86
+ "relatedObjectApiName": "object_actions",
87
+ "perPage": 20,
88
+ "id": "u:e1a8b77a140c"
89
+ }
90
+ ],
91
+ "id": "u:d75b105f6d02"
92
+ },
93
+ {
94
+ "title": "页面布局",
95
+ "body": [
96
+ {
97
+ "type": "steedos-object-related-listview",
98
+ "objectApiName": "objects",
99
+ "recordId": "${recordId}",
100
+ "relatedObjectApiName": "object_layouts",
101
+ "id": "u:ed9559f8aa86",
102
+ "perPage": 20
103
+ }
104
+ ],
105
+ "id": "u:ee4ab13a92e6"
106
+ },
107
+ {
108
+ "title": "对象权限",
109
+ "body": [
110
+ {
111
+ "type": "steedos-object-related-listview",
112
+ "objectApiName": "objects",
113
+ "recordId": "${recordId}",
114
+ "relatedObjectApiName": "permission_objects",
115
+ "perPage": 20
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "title": "流程映射",
121
+ "body": [
122
+ {
123
+ "type": "steedos-object-related-listview",
124
+ "objectApiName": "objects",
125
+ "recordId": "${recordId}",
126
+ "relatedObjectApiName": "object_workflows",
127
+ "perPage": 20,
128
+ "id": "u:e14df76cfa51"
129
+ }
130
+ ],
131
+ "id": "u:cbc13e1a7033"
132
+ },
133
+ {
134
+ "title": "验证规则",
135
+ "body": [
136
+ {
137
+ "type": "steedos-object-related-listview",
138
+ "objectApiName": "objects",
139
+ "recordId": "${recordId}",
140
+ "relatedObjectApiName": "object_validation_rules",
141
+ "perPage": 20
142
+ }
143
+ ]
144
+ },
145
+ {
146
+ "title": "限制规则",
147
+ "body": [
148
+ {
149
+ "type": "steedos-object-related-listview",
150
+ "objectApiName": "objects",
151
+ "recordId": "${recordId}",
152
+ "relatedObjectApiName": "restriction_rules",
153
+ "perPage": 20
154
+ }
155
+ ]
156
+ },
157
+ {
158
+ "title": "共享规则",
159
+ "body": [
160
+ {
161
+ "type": "steedos-object-related-listview",
162
+ "objectApiName": "objects",
163
+ "recordId": "${recordId}",
164
+ "relatedObjectApiName": "share_rules",
165
+ "perPage": 20
166
+ }
167
+ ]
168
+ }
169
+ ],
170
+ "id": "u:6a3b45d7adcf",
171
+ "tabsMode": "vertical",
172
+ "className": "object-detail-tabs mt-3 bg-white border-b sm:shadow sm:rounded sm:border border-slate-300",
173
+ "toolbarClassName": "",
174
+ "linksClassName": "",
175
+ "contentClassName": "bg-white"
176
+ }
177
+ ],
178
+ "regions": [
179
+ "body"
180
+ ],
181
+ "id": "page_objects_record_detail",
182
+ "name": "page_objects_record_detail",
183
+ "bodyClassName": "",
184
+ "className": "object-detail-page"
185
+ }
@@ -0,0 +1,12 @@
1
+ name: object_detail
2
+ is_active: true
3
+ label: 对象详细页面
4
+ object_name: objects
5
+ pageAssignments:
6
+ - type: orgDefault
7
+ page: object_detail
8
+ desktop: true
9
+ mobile: true
10
+ render_engine: amis
11
+ type: record
12
+ widgets: []
@@ -42,7 +42,8 @@ module.exports = {
42
42
  // Steedos.openWindow(Creator.getRelativeUrl("/app/-/" + record.name + "/grid/all"))
43
43
  // }
44
44
  },
45
- show_objectVisible: function(object_name, record_id, record_permissions, record){
45
+ show_objectVisible: function(object_name, record_id, record_permissions, data){
46
+ var record = data && data.record;
46
47
  if(!Creator.isSpaceAdmin()){
47
48
  return false
48
49
  }
@@ -80,7 +81,8 @@ module.exports = {
80
81
  return toastr.error('复制失败: 未启用API');
81
82
  }
82
83
  },
83
- copy_odataVisible: function(object_name, record_id, record_permissions, record){
84
+ copy_odataVisible: function(object_name, record_id, record_permissions, data){
85
+ var record = data && data.record;
84
86
  if(!Creator.isSpaceAdmin()){
85
87
  return false
86
88
  }
@@ -144,7 +146,8 @@ module.exports = {
144
146
  // }
145
147
  // }, null, { iconPath: '/assets/icons' })
146
148
  // },
147
- delete_objectVisible: function(object_name, record_id, record_permissions, record){
149
+ delete_objectVisible: function(object_name, record_id, record_permissions, data){
150
+ var record = data && data.record;
148
151
  if(!Creator.isSpaceAdmin()){
149
152
  return false
150
153
  }
@@ -27,6 +27,7 @@ fields:
27
27
  label: Label
28
28
  required: true
29
29
  is_name: true
30
+ searchable: true
30
31
  name:
31
32
  type: text
32
33
  label: API Name
@@ -242,6 +243,7 @@ fields:
242
243
  omit: true
243
244
  disabled: false
244
245
  readonly: false
246
+ visible_on: "{{global.mode ==='read' ? true : false}}"
245
247
  reload_time:
246
248
  type: datetime
247
249
  hidden: true
@@ -254,6 +256,7 @@ fields:
254
256
  group: script
255
257
  blackbox: true
256
258
  is_wide: true
259
+ visible_on: "{{false}}"
257
260
  form.onRendered:
258
261
  type: code
259
262
  language: javascript
@@ -15,19 +15,8 @@ router.get('/api/amisButtonDesign', core.requireAuthentication, async function (
15
15
  try {
16
16
  res.set('Content-Type', 'text/html');
17
17
  const userSession = req.user;
18
- let assetUrl = "";
19
- let assetUrls = null;
20
- if(process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS && _.isString(process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS)){
21
- assetUrls = process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS.split(',');
22
- assetUrl = `assetUrl=${assetUrls.join("&assetUrl=")}&`;
23
- }else{
24
- var fullPath = path.resolve(path.dirname(require.resolve('@steedos-ui/builder-widgets' + '/package.json')));
25
- var packageFile = path.join(fullPath,'package.json');
26
- var pkg = require(packageFile);
27
- moduleVersion = pkg.version;
28
- assetUrls = [`https://unpkg.com/@steedos-ui/builder-widgets@${moduleVersion}/dist/assets.json`];
29
- assetUrl = `assetUrl=${assetUrls.join("&assetUrl=")}&`;
30
- }
18
+ let assetUrls = req.query.assetUrls;
19
+ const assetUrl = `assetUrl=${assetUrls.split(',').join("&assetUrl=")}&`;
31
20
 
32
21
  // const dataContext = {
33
22
  // rootUrl: __meteor_runtime_config__.ROOT_URL,
@@ -38,7 +27,7 @@ router.get('/api/amisButtonDesign', core.requireAuthentication, async function (
38
27
 
39
28
  const retUrl = __meteor_runtime_config__.ROOT_URL + `/app/admin/objects/${req.query.object}/object_actions/grid?related_field_name=object`
40
29
  const steedosBuilderUrl = process.env.STEEDOS_BUILDER_URL || 'https://builder.steedos.cn';
41
- const builderHost = `${steedosBuilderUrl}/amis?${assetUrl}&retUrl=${retUrl}`;
30
+ const builderHost = `${steedosBuilderUrl}/amis?${assetUrl}retUrl=${retUrl}`;
42
31
 
43
32
  // let data = fs.readFileSync(__dirname+'/design.html', 'utf8');
44
33
  // res.send(data.replace('SteedosBuilderHost',steedosBuilderHost).replace('DataContext', JSON.stringify(dataContext)));
@@ -15,20 +15,8 @@ router.get('/api/amisListviewDesign', core.requireAuthentication, async function
15
15
  try {
16
16
  res.set('Content-Type', 'text/html');
17
17
  const userSession = req.user;
18
- let assetUrl = "";
19
- let assetUrls = null;
20
- if(process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS && _.isString(process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS)){
21
- assetUrls = process.env.STEEDOS_PUBLIC_PAGE_ASSETURLS.split(',');
22
- assetUrl = `assetUrl=${assetUrls.join("&assetUrl=")}&`;
23
- }else{
24
- var fullPath = path.resolve(path.dirname(require.resolve('@steedos-ui/builder-widgets' + '/package.json')));
25
- var packageFile = path.join(fullPath,'package.json');
26
- var pkg = require(packageFile);
27
- moduleVersion = pkg.version;
28
- assetUrls = [`https://unpkg.com/@steedos-ui/builder-widgets@${moduleVersion}/dist/assets.json`];
29
- assetUrl = `assetUrl=${assetUrls.join("&assetUrl=")}&`;
30
- }
31
-
18
+ let assetUrls = req.query.assetUrls;
19
+ const assetUrl = `assetUrl=${assetUrls.split(',').join("&assetUrl=")}&`;
32
20
  // const dataContext = {
33
21
  // rootUrl: __meteor_runtime_config__.ROOT_URL,
34
22
  // tenantId: userSession.spaceId,
@@ -38,7 +26,7 @@ router.get('/api/amisListviewDesign', core.requireAuthentication, async function
38
26
 
39
27
  const retUrl = __meteor_runtime_config__.ROOT_URL + `/app/admin/objects/${req.query.object}/object_listviews/grid?related_field_name=object`
40
28
  const steedosBuilderUrl = process.env.STEEDOS_BUILDER_URL || 'https://builder.steedos.cn';
41
- const builderHost = `${steedosBuilderUrl}/amis?${assetUrl}&retUrl=${retUrl}`;
29
+ const builderHost = `${steedosBuilderUrl}/amis?${assetUrl}retUrl=${retUrl}`;
42
30
 
43
31
  // let data = fs.readFileSync(__dirname+'/design.html', 'utf8');
44
32
  // res.send(data.replace('SteedosBuilderHost',steedosBuilderHost).replace('DataContext', JSON.stringify(dataContext)));
@@ -0,0 +1,21 @@
1
+ const objectql = require('@steedos/objectql');
2
+ const _ = require('lodash');
3
+
4
+ module.exports = {
5
+ listenTo: 'object_fields',
6
+
7
+ beforeInsert: async function(){
8
+ const { doc } = this;
9
+ if(doc && _.has(doc, 'amis') && _.isString(doc.amis)){
10
+ doc.amis = JSON.parse(doc.amis);
11
+ }
12
+ },
13
+
14
+ beforeUpdate: async function(){
15
+ const { doc } = this;
16
+ if(doc && _.has(doc, 'amis') && _.isString(doc.amis)){
17
+ doc.amis = JSON.parse(doc.amis);
18
+ }
19
+ },
20
+
21
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steedos/standard-object-database",
3
- "version": "2.4.0-beta.9",
3
+ "version": "2.4.1",
4
4
  "main": "package.service.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -11,9 +11,9 @@
11
11
  ],
12
12
  "description": "steedos package",
13
13
  "dependencies": {
14
- "@steedos-widgets/amis-lib": "^1.0.10"
14
+ "@steedos-widgets/amis-lib": "^1.0.22"
15
15
  },
16
16
  "repository": {},
17
17
  "license": "MIT",
18
- "gitHead": "7f75a50d8d5ac875eb577d586981ba654a5180ff"
18
+ "gitHead": "ae77c1ed63399245141bf7237cd3966bfc4dc6b1"
19
19
  }