@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.
- package/main/default/client/coordtransform.client.js +153 -0
- package/main/default/client/object_fields.client.js +150 -44
- package/main/default/objectTranslations/object_actions.en/object_actions.en.objectTranslation.yml +2 -0
- package/main/default/objectTranslations/object_actions.zh-CN/object_actions.zh-CN.objectTranslation.yml +2 -0
- package/main/default/objectTranslations/object_fields.en/object_fields.en.objectTranslation.yml +27 -2
- package/main/default/objectTranslations/object_fields.zh-CN/object_fields.zh-CN.objectTranslation.yml +32 -4
- package/main/default/objectTranslations/object_layouts.en/object_layouts.en.objectTranslation.yml +2 -0
- package/main/default/objectTranslations/object_layouts.zh-CN/object_layouts.zh-CN.objectTranslation.yml +2 -0
- package/main/default/objectTranslations/object_listviews.en/object_listviews.en.objectTranslation.yml +29 -1
- package/main/default/objectTranslations/object_listviews.zh-CN/object_listviews.zh-CN.objectTranslation.yml +27 -1
- package/main/default/objectTranslations/object_triggers.en/object_triggers.en.objectTranslation.yml +7 -1
- package/main/default/objectTranslations/object_triggers.zh-CN/object_triggers.zh-CN.objectTranslation.yml +8 -2
- package/main/default/objectTranslations/object_validation_rules.en/object_validation_rules.en.objectTranslation.yml +2 -0
- package/main/default/objectTranslations/object_validation_rules.zh-CN/object_validation_rules.zh-CN.objectTranslation.yml +2 -0
- package/main/default/objects/1.objects.observe.object.js +4 -1
- package/main/default/objects/7.object_actions.observe.object.js +7 -1
- package/main/default/objects/object_actions.action.js +34 -3
- package/main/default/objects/object_actions.object.js +4 -2
- package/main/default/objects/object_actions.object.yml +26 -1
- package/main/default/objects/object_fields.object.js +33 -19
- package/main/default/objects/object_fields.object.yml +129 -83
- package/main/default/objects/object_layouts.action.js +4 -4
- package/main/default/objects/object_layouts.object.yml +16 -2
- package/main/default/objects/object_listviews.object.yml +67 -16
- package/main/default/objects/object_triggers.object.yml +13 -4
- package/main/default/objects/object_validation_rules.object.yml +10 -0
- package/main/default/objects/objects/buttons/custom.button.js +48 -0
- package/main/default/objects/objects/buttons/custom.button.yml +6 -0
- package/main/default/objects/objects.action.js +26 -3
- package/main/default/objects/objects.core.js +17 -1
- package/main/default/objects/objects.object.js +3 -2
- package/main/default/objects/objects.object.yml +28 -2
- package/main/default/objects/objects.tree.js +3 -2
- package/main/default/pages/design_field_layout.page.amis.json +416 -0
- package/main/default/pages/design_field_layout.page.yml +7 -0
- package/main/default/pages/object_detail.page.amis.json +6 -6
- package/main/default/pages/object_fields_form.page.amis.json +35 -0
- package/main/default/pages/{object_fields.page.yml → object_fields_form.page.yml} +5 -5
- package/main/default/pages/object_form.page.amis.json +31 -0
- package/main/default/pages/object_form.page.yml +12 -0
- package/main/default/routes/amis_button_design.router.js +11 -2
- package/main/default/routes/amis_listview_design.router.js +11 -2
- package/main/default/services/suggestions.service.js +4 -5
- package/main/default/triggers/object_actions.trigger.js +6 -2
- package/main/default/triggers/object_fields.trigger.js +67 -10
- package/main/default/triggers/object_listviews.trigger.js +11 -4
- package/main/default/triggers/objects.trigger.js +4 -26
- package/package.json +4 -3
- package/package.service.js +146 -3
- package/src/triggers/index.js +11 -0
- package/src/triggers/object_fields_trigger_create_index.js +58 -0
- package/main/default/objects/object_layouts/buttons/standard_edit.button.yml +0 -44
- package/main/default/pages/object_fields.page.amis.json +0 -42
- package/main/default/services/object_fields.service.js +0 -242
package/main/default/objectTranslations/object_triggers.en/object_triggers.en.objectTranslation.yml
CHANGED
|
@@ -6,7 +6,7 @@ fields:
|
|
|
6
6
|
label: Name
|
|
7
7
|
help:
|
|
8
8
|
description:
|
|
9
|
-
|
|
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
|
-
|
|
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: 自定义
|
|
@@ -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:
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
431
|
-
if ((modifier != null ? (ref6 = modifier.$set) != null ? ref6.reference_to : void 0 : void 0) && doc.reference_to !== _reference_to && object_documents.
|
|
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.
|
|
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
|
|