@steedos/standard-object-database 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.
Files changed (57) hide show
  1. package/main/default/client/coordtransform.client.js +153 -0
  2. package/main/default/client/object_fields.client.js +149 -7
  3. package/main/default/objectTranslations/object_actions.en/object_actions.en.objectTranslation.yml +21 -0
  4. package/main/default/objectTranslations/object_actions.zh-CN/object_actions.zh-CN.objectTranslation.yml +21 -0
  5. package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +33 -2
  6. package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +38 -4
  7. package/main/default/objectTranslations/object_layouts.en/object_layouts.en.objectTranslation.yml +9 -0
  8. package/main/default/objectTranslations/object_layouts.zh-CN/object_layouts.zh-CN.objectTranslation.yml +9 -0
  9. package/main/default/objectTranslations/object_listviews.en/object_listviews.en.objectTranslation.yml +29 -1
  10. package/main/default/objectTranslations/object_listviews.zh-CN/object_listviews.zh-CN.objectTranslation.yml +27 -1
  11. package/main/default/objectTranslations/object_triggers.en/object_triggers.en.objectTranslation.yml +22 -1
  12. package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +22 -1
  13. package/main/default/objectTranslations/object_validation_rules.en/object_validation_rules.en.objectTranslation.yml +2 -0
  14. package/main/default/objectTranslations/object_validation_rules.zh-CN/object_validation_rules.zh-CN.objectTranslation.yml +2 -0
  15. package/main/default/objectTranslations/objects.en/objects.en.objectTranslation.yml +2 -0
  16. package/main/default/objectTranslations/objects.zh-CN/objects.zh-CN.objectTranslation.yml +2 -0
  17. package/main/default/objects/1.objects.observe.object.js +4 -1
  18. package/main/default/objects/16.permission_tabs.observe.object.js +44 -0
  19. package/main/default/objects/7.object_actions.observe.object.js +7 -1
  20. package/main/default/objects/object_actions.action.js +35 -4
  21. package/main/default/objects/object_actions.object.js +4 -2
  22. package/main/default/objects/object_actions.object.yml +73 -29
  23. package/main/default/objects/object_fields.object.js +33 -19
  24. package/main/default/objects/object_fields.object.yml +128 -54
  25. package/main/default/objects/object_layouts.action.js +4 -4
  26. package/main/default/objects/object_layouts.object.yml +28 -2
  27. package/main/default/objects/object_listviews.action.js +1 -1
  28. package/main/default/objects/object_listviews.object.js +3 -3
  29. package/main/default/objects/object_listviews.object.yml +67 -16
  30. package/main/default/objects/object_triggers.object.yml +13 -4
  31. package/main/default/objects/object_validation_rules.object.yml +10 -0
  32. package/main/default/objects/objects/buttons/custom.button.js +48 -0
  33. package/main/default/objects/objects/buttons/custom.button.yml +6 -0
  34. package/main/default/objects/objects.action.js +26 -3
  35. package/main/default/objects/objects.core.js +17 -1
  36. package/main/default/objects/objects.object.js +3 -2
  37. package/main/default/objects/objects.object.yml +28 -2
  38. package/main/default/objects/objects.tree.js +3 -2
  39. package/main/default/pages/design_field_layout.page.amis.json +416 -0
  40. package/main/default/pages/design_field_layout.page.yml +7 -0
  41. package/main/default/pages/object_detail.page.amis.json +6 -6
  42. package/main/default/pages/object_fields_form.page.amis.json +35 -0
  43. package/main/default/pages/object_fields_form.page.yml +12 -0
  44. package/main/default/pages/object_form.page.amis.json +31 -0
  45. package/main/default/pages/object_form.page.yml +12 -0
  46. package/main/default/routes/amis_button_design.router.js +19 -3
  47. package/main/default/routes/amis_listview_design.router.js +18 -4
  48. package/main/default/services/suggestions.service.js +4 -5
  49. package/main/default/triggers/object_actions.trigger.js +6 -2
  50. package/main/default/triggers/object_fields.trigger.js +67 -10
  51. package/main/default/triggers/object_listviews.trigger.js +27 -5
  52. package/main/default/triggers/objects.trigger.js +40 -29
  53. package/package.json +4 -3
  54. package/package.service.js +146 -3
  55. package/src/triggers/index.js +11 -0
  56. package/src/triggers/object_fields_trigger_create_index.js +58 -0
  57. package/main/default/objects/object_layouts/buttons/standard_edit.button.yml +0 -44
@@ -3,6 +3,7 @@ label: List View
3
3
  icon: forecasts
4
4
  version: 2
5
5
  enable_dataloader: false
6
+ hidden: true
6
7
  fields:
7
8
  label:
8
9
  label: Label
@@ -15,6 +16,8 @@ fields:
15
16
  searchable: true
16
17
  index: true
17
18
  inlineHelpText: Can only contain lowercase letters and numbers, must start with a letter, cannot end with an underscore character or contain two consecutive underscore characters
19
+ amis:
20
+ requiredOn: "${!!recordId}" #编辑记录时必填,新建记录时不必填走触发器给默认值
18
21
  object_name:
19
22
  label: Object
20
23
  type: master_detail
@@ -61,11 +64,37 @@ fields:
61
64
  value: infinite
62
65
  defaultValue: '"standard"'
63
66
  hidden: true
67
+ sort_no:
68
+ label: Sort no
69
+ type: number
70
+ scale: 0
71
+ defaultValue: 100
72
+ is_enable:
73
+ type: toggle
74
+ label: Enable
75
+ defaultValue: true
76
+ crud_mode:
77
+ label: 显示模式
78
+ type: select
79
+ options:
80
+ - label: 表格
81
+ value: table
82
+ - label: 卡片
83
+ value: cards
84
+ defaultValue: table
64
85
  columns:
65
86
  label: Columns
66
- type: grid
87
+ type: table
67
88
  is_wide: true
68
89
  required: true
90
+ group: show_columns
91
+ amis:
92
+ columns:
93
+ - field
94
+ - name: width
95
+ width: 100
96
+ - name: wrap
97
+ width: 100
69
98
  columns.$:
70
99
  label: Column
71
100
  blackbox: true
@@ -80,18 +109,23 @@ fields:
80
109
  - object_name
81
110
  reference_to: object_fields
82
111
  reference_to_field: name
112
+ enable_enhanced_lookup: false
113
+ filtersFunction: !<tag:yaml.org,2002:js/function> |-
114
+ function(filters, values){
115
+ return ['object', '=', values.object_name]
116
+ }
83
117
  columns.$.width:
84
118
  label: Width
85
119
  type: text
86
- # ag-grid配置rowModelType为infinite的话,列的warp属性功能异常,即不会换行显示且显示效果异常 #258
87
- # columns.$.wrap:
88
- # label: Wrap
89
- # type: boolean
120
+ columns.$.wrap:
121
+ label: Wrap
122
+ type: boolean
90
123
  filter_fields:
91
124
  label: Default Filter Fields
92
125
  type: lookup
93
126
  multiple: true
94
127
  is_wide: true
128
+ hidden: true
95
129
  depend_on:
96
130
  - object_name
97
131
  reference_to: object_fields
@@ -102,6 +136,7 @@ fields:
102
136
  is_wide: true
103
137
  depend_on:
104
138
  - object_name
139
+ group: sort
105
140
  sort.$:
106
141
  label: Order
107
142
  blackbox: true
@@ -126,9 +161,9 @@ fields:
126
161
  is_wide: true
127
162
  hidden: false
128
163
  readonly: false
129
- visible_on: "{{global.mode ==='read' ? true : false}}"
130
164
  depend_on:
131
165
  - object_name
166
+ group: filters
132
167
  # filters.$:
133
168
  # label: Filter
134
169
  # blackbox: true
@@ -189,6 +224,7 @@ fields:
189
224
  is_wide: true
190
225
  depend_on:
191
226
  - object_name
227
+ group: show_columns
192
228
  mobile_columns.$:
193
229
  label: Column
194
230
  blackbox: true
@@ -206,6 +242,7 @@ fields:
206
242
  is_wide: true
207
243
  depend_on:
208
244
  - object_name
245
+ group: search_term
209
246
  searchable_fields.$:
210
247
  label: Column
211
248
  blackbox: true
@@ -217,11 +254,6 @@ fields:
217
254
  is_wide: false
218
255
  reference_to: object_fields
219
256
  reference_to_field: name
220
- sort_no:
221
- label: Sort no
222
- type: number
223
- scale: 0
224
- defaultValue: 100
225
257
  is_system:
226
258
  type: boolean
227
259
  label: System
@@ -242,20 +274,26 @@ fields:
242
274
  required: false
243
275
  is_wide: true
244
276
  # visible_on: "{{formData.enable_amis_schema}}"
277
+ visible_on: "{{false}}"
245
278
  requestAdaptor:
246
- label: 发送适配器
279
+ label: Request Adaptor
247
280
  type: code
248
281
  language: "javascript"
249
282
  is_wide: true
250
283
  inlineHelpText: "函数签名:(api) => api, 数据在 api.data 中,修改后返回 api 对象。"
251
- group: 数据接口
284
+ group: data_interface
285
+ # amis:
286
+ # description: "函数签名:(api) => api, 数据在 api.data 中,修改后返回 api 对象。"
252
287
  adaptor:
253
- label: 接收适配器
288
+ label: Adaptor
254
289
  type: code
255
290
  language: "javascript"
256
291
  is_wide: true
257
292
  inlineHelpText: "函数签名: (payload, response, api) => payload"
258
- group: 数据接口
293
+ group: data_interface
294
+ # amis:
295
+ # description: "函数签名: (payload, response, api) => payload"
296
+
259
297
  paging:
260
298
  enabled: false
261
299
  list_views:
@@ -266,9 +304,22 @@ list_views:
266
304
  - shared
267
305
  - owner
268
306
  - modified
307
+ - is_enable
269
308
  - is_system
270
309
  label: All List Views
271
310
  filter_scope: space
311
+ customize:
312
+ columns:
313
+ - label
314
+ - name
315
+ - shared
316
+ - owner
317
+ - modified
318
+ - is_system
319
+ label: 自定义
320
+ filters:
321
+ - ["is_system","<>",true]
322
+ filter_scope: space
272
323
  actions:
273
324
  customize:
274
325
  label: Customize
@@ -293,4 +344,4 @@ permission_set:
293
344
  allowEdit: true
294
345
  allowRead: false
295
346
  modifyAllRecords: true
296
- viewAllRecords: true
347
+ viewAllRecords: true
@@ -46,7 +46,7 @@ fields:
46
46
  label: "删除记录之后",
47
47
  value: "afterDelete"
48
48
  }, {
49
- label: "查下记录之前",
49
+ label: "查询记录之前",
50
50
  value: "beforeFind"
51
51
  }]
52
52
  isEnabled:
@@ -60,9 +60,7 @@ fields:
60
60
  is_wide: true
61
61
  required: true
62
62
  defaultValue: |-
63
- // _ : lodash
64
- // moment: moment
65
- // validator: validator
63
+ // global: {_:lodash, moment, validator, filters}
66
64
  // ctx
67
65
  // objects
68
66
  // services
@@ -96,6 +94,17 @@ list_views:
96
94
  - is_system
97
95
  label: All
98
96
  filter_scope: space
97
+ customize:
98
+ columns:
99
+ - name
100
+ - listenTo
101
+ - when
102
+ - isEnabled
103
+ - is_system
104
+ label: 自定义
105
+ filters:
106
+ - ["is_system","<>",true]
107
+ filter_scope: space
99
108
  permission_set:
100
109
  user:
101
110
  allowCreate: false
@@ -76,6 +76,16 @@ list_views:
76
76
  - object_name
77
77
  label: All
78
78
  filter_scope: space
79
+ customize:
80
+ columns:
81
+ - name
82
+ - active
83
+ - description
84
+ - object_name
85
+ label: 自定义
86
+ filters:
87
+ - ["is_system","<>",true]
88
+ filter_scope: space
79
89
  permission_set:
80
90
  user:
81
91
  allowCreate: false
@@ -0,0 +1,48 @@
1
+ /*
2
+ * @Author: baozhoutaon@hotoa.com
3
+ * @Date: 2022-03-29 20:33:44
4
+ * @LastEditors: baozhoutao@steedos.com
5
+ * @LastEditTime: 2023-11-19 17:06:18
6
+ * @Description:
7
+ */
8
+ module.exports = {
9
+ custom: function (object_name, record_id) {
10
+ $(document.body).addClass('loading');
11
+ let url = `/graphql`;
12
+ const obj = Creator.odata.get("objects", record_id);
13
+ delete obj.record_permissions;
14
+ delete obj["@odata.context"]
15
+ delete obj["@odata.editLink"]
16
+ delete obj["@odata.etag"]
17
+ delete obj["@odata.id"]
18
+ delete obj.idFieldName;
19
+ let options = {
20
+ type: 'post',
21
+ async: true,
22
+ data: JSON.stringify({
23
+ query: `mutation{objects__upsert(id: "${obj.name}", doc: ${JSON.stringify(JSON.stringify(obj))}){_id,name}}`
24
+ }),
25
+ success: function (data) {
26
+ console.log(`data====>`, data)
27
+ SteedosUI.notification.success({
28
+ message: '对象已自定义。'
29
+ });
30
+ // SteedosUI.router.go({}, "/app/" + Session.get("app_id") + "/" + object_name + "/view/" + data.data.objects__upsert._id);
31
+ FlowRouter.reload()
32
+ $(document.body).removeClass('loading');
33
+ },
34
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
35
+ SteedosUI.notification.error({
36
+ message: '操作失败',
37
+ description: t(XMLHttpRequest.responseJSON.error),
38
+ });
39
+ $(document.body).removeClass('loading');
40
+ }
41
+ };
42
+ Steedos.authRequest(url, options);
43
+ },
44
+ customVisible: function (object_name, record_id, permission, data) {
45
+ var record = data && data.record;
46
+ return record && record.is_system && !record.created;
47
+ }
48
+ }
@@ -0,0 +1,6 @@
1
+ name: custom
2
+ is_enable: true
3
+ label: 自定义
4
+ 'on': record_only
5
+ visible: true
6
+ sort: 200
@@ -1,4 +1,28 @@
1
1
  module.exports = {
2
+ design_field_layout: function (object_name, record_id, item_element) {
3
+ var record = this.record || Creator.getObjectById(record_id);
4
+ if (record && record.record) {
5
+ record = record.record;
6
+ }
7
+ if (!record) {
8
+ return toastr.error("未找到记录");
9
+ }
10
+
11
+ window.open(Creator.getRelativeUrl("/api/page/view/design_field_layout?designObjectName=" + record.name));
12
+ },
13
+ design_field_layoutVisible: function (object_name, record_id, record_permissions, data) {
14
+ var record = data && data.record;
15
+ if (!Creator.isSpaceAdmin()) {
16
+ return false
17
+ }
18
+ if (!record) {
19
+ record = Creator.odata.get("objects", record_id, "is_deleted");
20
+ }
21
+
22
+ if (record && !record.is_deleted && record.name != 'users') {
23
+ return true;
24
+ }
25
+ },
2
26
  show_object: function (object_name, record_id, item_element) {
3
27
  var record = this.record || Creator.getObjectById(record_id);
4
28
  if(record && record.record){
@@ -21,8 +45,7 @@ module.exports = {
21
45
  return toastr.warning("请先启动数据源");
22
46
  }
23
47
  }
24
-
25
- window.open(Creator.getRelativeUrl("/app/admin/" + record.name));
48
+ window.open(Creator.getRelativeUrl("/app/admin/" + (record.name || this.record.name)));
26
49
  // SteedosUI.Object.getUISchema(record.name).then((res)=>{
27
50
  // if(res.idFieldName){
28
51
  // window.open(Creator.getRelativeUrl("/app/-/" + record.name));
@@ -51,7 +74,7 @@ module.exports = {
51
74
  record = Creator.odata.get("objects", record_id, "is_deleted");
52
75
  }
53
76
 
54
- if(record && !record.is_deleted){
77
+ if(record && !record.is_deleted && record.name != 'users'){
55
78
  return true;
56
79
  }
57
80
  },
@@ -21,6 +21,12 @@ function canLoadObject(name, datasource) {
21
21
  return true;
22
22
  }
23
23
 
24
+ function removeObjectConfig(objectName){
25
+ broker.call('objects.removeConfig', {
26
+ objectName: objectName
27
+ });
28
+ }
29
+
24
30
  function getDataSource(doc) {
25
31
  if (doc.datasource && !_.include(defaultDatasourcesName, doc.datasource)) {
26
32
  let datasource = Creator.getCollection("datasources").findOne({ _id: doc.datasource })
@@ -216,6 +222,16 @@ function loadObject(doc, oldDoc) {
216
222
 
217
223
  originalObject.isMain = true;
218
224
 
225
+ const objConfig = register.getOriginalObjectConfig(doc.name);
226
+
227
+ if(objConfig){
228
+ _.each(objConfig.fields, (config, name)=>{
229
+ if(!config._id && !doc.fields[name]){
230
+ doc.fields[name] = config;
231
+ }
232
+ })
233
+ }
234
+
219
235
  register.addObjectConfig(doc, datasourceName);
220
236
  register.loadObjectLazyListViews(doc.name);
221
237
  register.loadObjectLazyActions(doc.name);
@@ -380,5 +396,5 @@ function triggerReloadObject(objectName, type, value, event){
380
396
  }
381
397
 
382
398
  module.exports = {
383
- loadObject, removeObject, getDataSourceName, canLoadObject, getObjectFromDB, getDataSource, reloadObject, triggerReloadObject, loadDBObject
399
+ loadObject, removeObject, getDataSourceName, canLoadObject, getObjectFromDB, getDataSource, reloadObject, triggerReloadObject, loadDBObject, removeObjectConfig
384
400
  }
@@ -233,7 +233,7 @@ function onChangeObjectName(oldName, newDoc){
233
233
  multi: true
234
234
  });
235
235
  //修改trigger
236
- Creator.getCollection("object_triggers").direct.update({space: newDoc.space, object: oldName}, {$set: {object: newDoc.name}}, {
236
+ Creator.getCollection("object_triggers").direct.update({space: newDoc.space, listenTo: oldName}, {$set: {listenTo: newDoc.name}}, {
237
237
  multi: true
238
238
  });
239
239
  //字段表中的reference_to
@@ -313,7 +313,8 @@ let objectTriggers = {
313
313
  type: "text",
314
314
  required: true,
315
315
  index: true,
316
- searchable: true
316
+ searchable: true,
317
+ filterable: true
317
318
  });
318
319
  // Creator.getCollection("object_fields").insert({
319
320
  // object: doc.name,
@@ -23,6 +23,8 @@ fields:
23
23
  # return options;
24
24
  # }
25
25
  defaultValue: 'default'
26
+ amis:
27
+ disabledOn: "${is_system == true}"
26
28
  label:
27
29
  type: text
28
30
  label: Label
@@ -38,6 +40,8 @@ fields:
38
40
  index: true
39
41
  required: true
40
42
  inlineHelpText: Can only contain lowercase letters and numbers, must start with a letter, cannot end with an underscore character or contain two consecutive underscore characters
43
+ amis:
44
+ disabledOn: "${is_system == true}"
41
45
  icon:
42
46
  type: lookup
43
47
  label: Icon
@@ -60,6 +64,8 @@ fields:
60
64
  label: Enable
61
65
  type: boolean
62
66
  defaultValue: true
67
+ amis:
68
+ disabledOn: "${is_system == true}"
63
69
  in_development:
64
70
  type: select
65
71
  label: Development State
@@ -71,6 +77,8 @@ fields:
71
77
  value: "0"
72
78
  defaultValue: "1"
73
79
  required: true
80
+ amis:
81
+ disabledOn: "${is_system == true}"
74
82
  enable_search:
75
83
  type: boolean
76
84
  label: Enable Search
@@ -118,7 +126,7 @@ fields:
118
126
  group: Switch
119
127
  hidden: true
120
128
  enable_inline_edit:
121
- hidden: true
129
+ # hidden: true
122
130
  type: boolean
123
131
  defaultValue: true
124
132
  label: Enable Single Field Edit
@@ -133,7 +141,7 @@ fields:
133
141
  label: Enable Enhanced Lookup
134
142
  inlineHelpText: When enabled, the lookup field associated with this object displays its options as a pop-up window.
135
143
  group: Switch
136
- defaultValue: false
144
+ defaultValue: true
137
145
  enable_dataloader:
138
146
  type: boolean
139
147
  label: Enable Dataloader
@@ -171,6 +179,8 @@ fields:
171
179
  searchable: true
172
180
  inlineHelpText: The default data source does not support this property
173
181
  group: External data source
182
+ amis:
183
+ disabledOn: "${is_system == true}"
174
184
  version:
175
185
  readonly: true
176
186
  label: Version
@@ -372,6 +382,19 @@ fields:
372
382
  rows: 3
373
383
  is_wide: true
374
384
  hidden: true
385
+ field_groups:
386
+ type: grid
387
+ blackbox: true
388
+ is_wide: true
389
+ hidden: false
390
+ visible_on: "${false}"
391
+ field_groups.$.group_name:
392
+ type: text
393
+ field_groups.$.visible_on:
394
+ type: text
395
+ extend:
396
+ type: text
397
+ hidden: true
375
398
  paging:
376
399
  enabled: false
377
400
  relatedList:
@@ -493,6 +516,9 @@ actions:
493
516
  delete_object:
494
517
  on: record_more
495
518
  label: 删除
519
+ design_field_layout:
520
+ on: record_only
521
+ label: 设计字段布局
496
522
  # export:
497
523
  # label: Export
498
524
  # visible: true
@@ -1,8 +1,8 @@
1
1
  /*
2
2
  * @Author: yinlianghui@steedos.com
3
3
  * @Date: 2022-04-13 10:31:03
4
- * @LastEditors: yinlianghui@steedos.com
5
- * @LastEditTime: 2022-05-24 14:03:39
4
+ * @LastEditors: liaodaxue
5
+ * @LastEditTime: 2023-11-17 15:48:30
6
6
  * @Description:
7
7
  */
8
8
  var objectql = require('@steedos/objectql');
@@ -11,6 +11,7 @@ async function insertParentAndChildrenFieldForTreeObject(doc, needToCheckExists)
11
11
  const baseProps = {
12
12
  object: doc.name,
13
13
  reference_to: doc.name,
14
+ deleted_lookup_record_behavior: "clear",
14
15
  type: 'lookup',
15
16
  owner: doc.owner,
16
17
  space: doc.space,