@steedos/standard-object-database 2.6.1-beta.7 → 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 (54) hide show
  1. package/main/default/client/coordtransform.client.js +153 -0
  2. package/main/default/client/object_fields.client.js +150 -44
  3. package/main/default/objectTranslations/object_actions.en/object_actions.en.objectTranslation.yml +2 -0
  4. package/main/default/objectTranslations/object_actions.zh-CN/object_actions.zh-CN.objectTranslation.yml +2 -0
  5. package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +27 -2
  6. package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +32 -4
  7. package/main/default/objectTranslations/object_layouts.en/object_layouts.en.objectTranslation.yml +2 -0
  8. package/main/default/objectTranslations/object_layouts.zh-CN/object_layouts.zh-CN.objectTranslation.yml +2 -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 +7 -1
  12. package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +8 -2
  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/objects/1.objects.observe.object.js +4 -1
  16. package/main/default/objects/7.object_actions.observe.object.js +7 -1
  17. package/main/default/objects/object_actions.action.js +34 -3
  18. package/main/default/objects/object_actions.object.js +4 -2
  19. package/main/default/objects/object_actions.object.yml +26 -1
  20. package/main/default/objects/object_fields.object.js +33 -19
  21. package/main/default/objects/object_fields.object.yml +129 -83
  22. package/main/default/objects/object_layouts.action.js +4 -4
  23. package/main/default/objects/object_layouts.object.yml +16 -2
  24. package/main/default/objects/object_listviews.object.yml +67 -16
  25. package/main/default/objects/object_triggers.object.yml +13 -4
  26. package/main/default/objects/object_validation_rules.object.yml +10 -0
  27. package/main/default/objects/objects/buttons/custom.button.js +48 -0
  28. package/main/default/objects/objects/buttons/custom.button.yml +6 -0
  29. package/main/default/objects/objects.action.js +26 -3
  30. package/main/default/objects/objects.core.js +17 -1
  31. package/main/default/objects/objects.object.js +3 -2
  32. package/main/default/objects/objects.object.yml +28 -2
  33. package/main/default/objects/objects.tree.js +3 -2
  34. package/main/default/pages/design_field_layout.page.amis.json +416 -0
  35. package/main/default/pages/design_field_layout.page.yml +7 -0
  36. package/main/default/pages/object_detail.page.amis.json +6 -6
  37. package/main/default/pages/object_fields_form.page.amis.json +35 -0
  38. package/main/default/pages/{object_fields.page.yml → object_fields_form.page.yml} +5 -5
  39. package/main/default/pages/object_form.page.amis.json +31 -0
  40. package/main/default/pages/object_form.page.yml +12 -0
  41. package/main/default/routes/amis_button_design.router.js +11 -2
  42. package/main/default/routes/amis_listview_design.router.js +11 -2
  43. package/main/default/services/suggestions.service.js +4 -5
  44. package/main/default/triggers/object_actions.trigger.js +6 -2
  45. package/main/default/triggers/object_fields.trigger.js +67 -10
  46. package/main/default/triggers/object_listviews.trigger.js +11 -4
  47. package/main/default/triggers/objects.trigger.js +4 -26
  48. package/package.json +4 -3
  49. package/package.service.js +146 -3
  50. package/src/triggers/index.js +11 -0
  51. package/src/triggers/object_fields_trigger_create_index.js +58 -0
  52. package/main/default/objects/object_layouts/buttons/standard_edit.button.yml +0 -44
  53. package/main/default/pages/object_fields.page.amis.json +0 -42
  54. package/main/default/services/object_fields.service.js +0 -242
@@ -6,7 +6,7 @@ fields:
6
6
  label: Name
7
7
  help:
8
8
  description:
9
- object:
9
+ listenTo:
10
10
  label: Object
11
11
  help:
12
12
  description:
@@ -40,6 +40,12 @@ fields:
40
40
  Help</a>
41
41
  help:
42
42
  description:
43
+ is_system:
44
+ label: System
45
+ help:
46
+ description:
43
47
  listviews:
44
48
  all:
45
49
  label: All Triggers
50
+ customize:
51
+ label: Customize
@@ -6,7 +6,7 @@ fields:
6
6
  label: 名称
7
7
  help:
8
8
  description:
9
- object:
9
+ listenTo:
10
10
  label: 所属对象
11
11
  help:
12
12
  description:
@@ -27,7 +27,7 @@ fields:
27
27
  value: "beforeDelete"
28
28
  - label: "删除记录之后"
29
29
  value: "afterDelete"
30
- - label: "查下记录之前"
30
+ - label: "查询记录之前"
31
31
  value: "beforeFind"
32
32
  isEnabled:
33
33
  label: 已启用
@@ -37,6 +37,12 @@ fields:
37
37
  label: 内容
38
38
  help:
39
39
  description:
40
+ is_system:
41
+ label: 系统
42
+ help:
43
+ description:
40
44
  listviews:
41
45
  all:
42
46
  label: 所有
47
+ customize:
48
+ label: 自定义
@@ -35,6 +35,8 @@ fields:
35
35
  listviews:
36
36
  all:
37
37
  label: All Object Validation Rules
38
+ customize:
39
+ label: Customize
38
40
  CustomLabels:
39
41
  object_validation_rules_field_error_display_field:
40
42
  object_validation_rules_field_error_display_field_inlineHelpText:
@@ -29,6 +29,8 @@ fields:
29
29
  listviews:
30
30
  all:
31
31
  label: 所有
32
+ customize:
33
+ label: 自定义
32
34
  CustomLabels:
33
35
  object_validation_rules_field_error_display_field: 错误位置
34
36
  object_validation_rules_field_error_display_field_inlineHelpText: >-
@@ -2,7 +2,7 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-06-23 17:58:55
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2022-07-05 11:26:24
5
+ * @LastEditTime: 2023-12-05 10:35:52
6
6
  * @Description:
7
7
  */
8
8
  var objectql = require('@steedos/objectql');
@@ -53,6 +53,9 @@ Meteor.startup(function () {
53
53
  }
54
54
  },
55
55
  removed: function (oldDocument) {
56
+ if(oldDocument.is_system){
57
+ objectCore.removeObjectConfig(oldDocument.name)
58
+ }
56
59
  return _removeServerObjects(oldDocument);
57
60
  }
58
61
  });
@@ -2,11 +2,12 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-08-05 14:17:44
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-06-27 09:32:45
5
+ * @LastEditTime: 2023-12-05 11:04:22
6
6
  * @Description:
7
7
  */
8
8
  var objectql = require('@steedos/objectql');
9
9
  var objectCore = require('./objects.core.js');
10
+ const register = require('@steedos/metadata-registrar');
10
11
  var lodash = require('lodash');
11
12
  Meteor.startup(function () {
12
13
  var _change, _remove, inited = false;
@@ -48,6 +49,11 @@ Meteor.startup(function () {
48
49
  },
49
50
  removed: function (oldDocument) {
50
51
  if(inited){
52
+ const objConfig = register.getOriginalObjectConfig(oldDocument.object);
53
+ if(objConfig && objConfig.actions[oldDocument.name]){
54
+ return _change(Object.assign(objConfig.actions[oldDocument.name], {_previousName: oldDocument.name}));
55
+ }
56
+
51
57
  return _remove(oldDocument);
52
58
  }
53
59
  }
@@ -2,16 +2,16 @@
2
2
  * @Author: baozhoutao@steedos.com
3
3
  * @Date: 2022-09-21 18:19:06
4
4
  * @LastEditors: baozhoutao@steedos.com
5
- * @LastEditTime: 2023-03-01 10:15:14
5
+ * @LastEditTime: 2023-10-16 13:58:08
6
6
  * @Description:
7
7
  */
8
8
  module.exports = {
9
9
  showDesign: function (object_name, record_id) {
10
10
  document.location = Steedos.absoluteUrl(`/api/amisButtonDesign?id=${record_id}&object=${this.record.record.object}&assetUrls=${Builder.settings.assetUrls}&locale=${Builder.settings.locale}`);
11
11
  },
12
- showDesignVisible: function (object_name, record_id, record_permissions) {
12
+ showDesignVisible: function (object_name, record_id, record_permissions, data) {
13
13
  var perms;
14
- var record = Creator.getObjectRecord(object_name, record_id);
14
+ var record = (data && data.record) || Creator.getObjectRecord(object_name, record_id);
15
15
  if(record.type === 'amis_button'){
16
16
  perms = {};
17
17
  if (record_permissions) {
@@ -25,5 +25,36 @@ module.exports = {
25
25
  return perms["allowEdit"];
26
26
  }
27
27
  return false;
28
+ },
29
+ customize: function (object_name, record_id, fields) {
30
+ var doc = Creator.odata.get(object_name, record_id);
31
+ var newDoc = {}
32
+ _.each(Creator.getObject(object_name).fields, function(v, k){
33
+ if(_.has(doc, k)){
34
+ newDoc[k] = doc[k]
35
+ }
36
+ })
37
+ delete newDoc.is_system;
38
+
39
+ let docName = doc.name
40
+ let docObjectName = doc.object
41
+
42
+ Creator.odata.insert(object_name, Object.assign(newDoc, {name: docName, object: docObjectName}), function(result, error){
43
+ if(result){
44
+ if(Session.get("object_name") === 'object_actions'){
45
+ FlowRouter.go(`/app/-/${object_name}/view/${result._id}`)
46
+ }else{
47
+ href = Creator.getObjectUrl(object_name, result._id);
48
+ window.open(href,'_blank','width=800, height=600, left=50, top= 50, toolbar=no, status=no, menubar=no, resizable=yes, scrollbars=yes')
49
+ }
50
+ }
51
+ });
52
+ },
53
+ customizeVisible: function(object_name, record_id, record_permissions, data){
54
+ var record = data && data.record;
55
+ if(!record){
56
+ record = {}
57
+ }
58
+ return Creator.baseObject.actions.standard_new.visible() && record.is_system && record.type == 'amis_button';
28
59
  }
29
60
  }
@@ -76,7 +76,7 @@ function allowChangeObject(){
76
76
  }
77
77
  }
78
78
 
79
- Creator.Objects.object_actions.triggers = {
79
+ const triggers = {
80
80
  // "after.insert.server.object_actions": {
81
81
  // on: "server",
82
82
  // when: "after.insert",
@@ -149,4 +149,6 @@ Creator.Objects.object_actions.triggers = {
149
149
  }
150
150
  }
151
151
  }
152
- }
152
+ }
153
+
154
+ Creator.Objects.object_actions.triggers = Object.assign(Creator.Objects.object_actions.triggers || {}, triggers);
@@ -96,7 +96,7 @@ fields:
96
96
  type:
97
97
  type: select
98
98
  sort_no: 170
99
- hidden: true
99
+ visible_on: "${false}"
100
100
  options:
101
101
  - label: Custom JavaScript
102
102
  value: script
@@ -129,6 +129,14 @@ fields:
129
129
  is_wide: true
130
130
  hidden: true
131
131
  visible_on: "{{formData.type == 'amis_button' ? true: false}}"
132
+ is_system:
133
+ type: boolean
134
+ label: 系统
135
+ # omit: true
136
+ readonly: true
137
+ visible_on: "{{global.mode ==='read' ? true : false}}"
138
+ disabled: true
139
+ sort_no: 500
132
140
  form:
133
141
  initialValues: !!js/function |
134
142
  function(){
@@ -140,6 +148,9 @@ actions:
140
148
  showDesign:
141
149
  label: 设计器
142
150
  on: record_only
151
+ customize:
152
+ label: 自定义
153
+ on: record_only
143
154
  list_views:
144
155
  all:
145
156
  columns:
@@ -149,8 +160,22 @@ list_views:
149
160
  - 'on'
150
161
  - is_enable
151
162
  - modified
163
+ - is_system
152
164
  label: All
153
165
  filter_scope: space
166
+ customize:
167
+ columns:
168
+ - label
169
+ - name
170
+ - object
171
+ - 'on'
172
+ - is_enable
173
+ - modified
174
+ - is_system
175
+ label: 自定义
176
+ filters:
177
+ - ["is_system","<>",true]
178
+ filter_scope: space
154
179
  permission_set:
155
180
  user:
156
181
  allowCreate: false
@@ -3,6 +3,19 @@ var objectql = require('@steedos/objectql');
3
3
  var clone = require('clone');
4
4
  var objectCore = require('./objects.core.js');
5
5
 
6
+ const objectFieldsFind = function (filter) {
7
+ return objectql.wrapAsync(async function () {
8
+ return await objectql.getObject('object_fields').find(this.filter);
9
+ }, { filter: filter })
10
+ }
11
+
12
+
13
+ const getRecords = function (objectName) {
14
+ return objectql.wrapAsync(async function () {
15
+ return await objectql.getObject(this.objectName).directFind({fields:["_id"], top: 1});
16
+ }, { objectName: objectName })
17
+ }
18
+
6
19
  const MAX_MASTER_DETAIL_LEAVE = objectql.MAX_MASTER_DETAIL_LEAVE;
7
20
 
8
21
  function canRemoveNameFileld(doc){
@@ -105,20 +118,18 @@ function _syncToObject(doc, event) {
105
118
  };
106
119
 
107
120
  function isRepeatedName(doc, name) {
108
- var other;
109
- other = Creator.getCollection("object_fields").find({
110
- object: doc.object,
111
- space: doc.space,
112
- _id: {
113
- $ne: doc._id
114
- },
115
- name: name || doc.name
116
- }, {
117
- fields: {
118
- _id: 1
119
- }
121
+ var other = objectFieldsFind({
122
+ filters: [[
123
+ 'object', '=', doc.object
124
+ ], [
125
+ 'space', '=', doc.space
126
+ ], [
127
+ '_id', '!=', doc._id
128
+ ], [
129
+ 'name', '=', name || doc.name
130
+ ]]
120
131
  });
121
- if (other.count() > 0) {
132
+ if (other.length > 0) {
122
133
  return true;
123
134
  }
124
135
  return false;
@@ -238,7 +249,7 @@ function checkMasterDetailTypeField(doc, oldReferenceTo) {
238
249
 
239
250
  function onChangeName(oldName, newDoc){
240
251
  var newName = newDoc.name
241
- Creator.getCollection("object_listviews").direct.find({space: newDoc.space, object_name: newDoc.object}, {fields: {_id:1, columns: 1}}).forEach(function(view){
252
+ Creator.getCollection("object_listviews").direct.find({space: newDoc.space, object_name: newDoc.object}, {fields: {_id:1, columns: 1, name: 1}}).forEach(function(view){
242
253
  if(_.isArray(view.columns)){
243
254
  var columns = [];
244
255
  _.each(view.columns, function(column){
@@ -258,7 +269,8 @@ function onChangeName(oldName, newDoc){
258
269
  columns.push(column)
259
270
  }
260
271
  });
261
- Creator.getCollection("object_listviews").update({_id: view._id}, {$set: {columns: columns}});
272
+ // 由于 https://github.com/steedos/steedos-platform/issues/4655 改动, 修改列表视图的时候, 必须要传入name, 否则会报错
273
+ Creator.getCollection("object_listviews").update({_id: view._id}, {$set: {name: view.name, columns: columns}});
262
274
  }
263
275
  })
264
276
  }
@@ -427,11 +439,11 @@ var triggers = {
427
439
  }
428
440
  });
429
441
  if (object) {
430
- object_documents = Creator.getCollection(object.name).find();
431
- if ((modifier != null ? (ref6 = modifier.$set) != null ? ref6.reference_to : void 0 : void 0) && doc.reference_to !== _reference_to && object_documents.count() > 0) {
442
+ object_documents = getRecords(object.name);
443
+ if ((modifier != null ? (ref6 = modifier.$set) != null ? ref6.reference_to : void 0 : void 0) && doc.reference_to !== _reference_to && object_documents.length > 0) {
432
444
  throw new Meteor.Error(500, `对象${object.label}中已经有记录,不能修改reference_to字段`);
433
445
  }
434
- if ((modifier != null ? (ref7 = modifier.$unset) != null ? ref7.reference_to : void 0 : void 0) && doc.reference_to !== _reference_to && object_documents.count() > 0) {
446
+ if ((modifier != null ? (ref7 = modifier.$unset) != null ? ref7.reference_to : void 0 : void 0) && doc.reference_to !== _reference_to && object_documents.length > 0) {
435
447
  throw new Meteor.Error(500, `对象${object.label}中已经有记录,不能修改reference_to字段`);
436
448
  }
437
449
  }
@@ -453,6 +465,7 @@ var triggers = {
453
465
  if(!allowChangeObject()){
454
466
  throw new Meteor.Error(500, "华炎云服务不包含自定义业务对象的功能,请部署私有云版本");
455
467
  }
468
+
456
469
  checkName(doc._name);
457
470
  if(['name','owner','parent','children'].indexOf(doc._name)>-1){
458
471
  doc.name = doc._name;
@@ -463,8 +476,9 @@ var triggers = {
463
476
  if(doc.name === 'name' || doc.is_name){
464
477
  checkNameField({type: doc.type})
465
478
  }
466
-
479
+ console.log('insert', doc)
467
480
  if (isRepeatedName(doc)) {
481
+
468
482
  throw new Meteor.Error(doc.name, "字段名不能重复");
469
483
  }
470
484