@steedos/service-plugin-amis 2.3.0-beta.3 → 2.3.0-beta.30
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/amis.render.client.js +60 -14
- package/main/default/client/load.assets.client.js +19 -0
- package/main/default/client/style.client.js +12 -0
- package/main/default/pages/apps_form.page.amis.json +553 -0
- package/main/default/pages/apps_form.page.yml +14 -0
- package/main/default/pages/generate_object_tabs.page.amis.json +104 -0
- package/main/default/pages/generate_object_tabs.page.yml +7 -0
- package/main/default/pages/listview_form.page.amis.json +38 -23
- package/main/default/pages/object_layouts.page.amis.json +907 -0
- package/main/default/pages/object_layouts.page.yml +12 -0
- package/main/default/services/amis-design.service.js +157 -0
- package/main/default/services/metadata/listviews.service.js +8 -2
- package/main/default/services/metadata/objects.service.js +141 -1
- package/main/default/services/metadata/space_users.service.js +201 -0
- package/package.json +2 -2
- package/public/amis/amis.css +1 -1
|
@@ -47,6 +47,24 @@ module.exports = {
|
|
|
47
47
|
async handler(ctx) {
|
|
48
48
|
return await this.getObjects(ctx);
|
|
49
49
|
}
|
|
50
|
+
},
|
|
51
|
+
getRelatedObjects: {
|
|
52
|
+
rest: {
|
|
53
|
+
method: "GET",
|
|
54
|
+
path: "/related_objects/:objectName"
|
|
55
|
+
},
|
|
56
|
+
async handler(ctx) {
|
|
57
|
+
return await this.getRelatedObjects(ctx);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
getObject: {
|
|
61
|
+
rest: {
|
|
62
|
+
method: "GET",
|
|
63
|
+
path: "/object/:objectName"
|
|
64
|
+
},
|
|
65
|
+
async handler(ctx) {
|
|
66
|
+
return await this.getObject(ctx);
|
|
67
|
+
}
|
|
50
68
|
}
|
|
51
69
|
},
|
|
52
70
|
|
|
@@ -82,6 +100,145 @@ module.exports = {
|
|
|
82
100
|
|
|
83
101
|
const dbListViews = await objectql.getObject('object_listviews').directFind({filters: [['shared', '!=', false]]})
|
|
84
102
|
|
|
103
|
+
_.each(objects, (object)=>{
|
|
104
|
+
if(object && object.name){
|
|
105
|
+
|
|
106
|
+
steedosI18n.translationObject(lng, object.name, object)
|
|
107
|
+
|
|
108
|
+
if(object.list_views && !_.isEmpty(object.list_views)){
|
|
109
|
+
_.each(object.list_views, (list_view, name)=>{
|
|
110
|
+
list_view.name = name;
|
|
111
|
+
list_view._id = list_view._id || list_view.name;
|
|
112
|
+
list_view.label = list_view.label || list_view.name;
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
object.list_views = objectql.getSteedosSchema().metadataDriver.find(_.values(object.list_views), {
|
|
116
|
+
projection: {
|
|
117
|
+
_id: 1,
|
|
118
|
+
name: 1,
|
|
119
|
+
label: 1
|
|
120
|
+
}
|
|
121
|
+
}, spaceId);
|
|
122
|
+
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if(_.isEmpty(object.list_views)){
|
|
126
|
+
object.list_views = [];
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const objectListViews = objectql.getSteedosSchema().metadataDriver.find(dbListViews, {
|
|
130
|
+
filters: [['object_name', '=', object.name], ['shared', '=', true] ],
|
|
131
|
+
fields: "_id, name, label"
|
|
132
|
+
}, spaceId);
|
|
133
|
+
|
|
134
|
+
_.each(object.list_views, (listView)=>{
|
|
135
|
+
if(!_.find(objectListViews, (dbListView)=>{ return dbListView.name === listView.name})){
|
|
136
|
+
objectListViews.push(listView);
|
|
137
|
+
}
|
|
138
|
+
})
|
|
139
|
+
object.list_views = objectListViews;
|
|
140
|
+
}
|
|
141
|
+
})
|
|
142
|
+
return objects;
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
/* 复制getObjects函数根据objectName筛选下单独的对象信息 */
|
|
146
|
+
getObject: {
|
|
147
|
+
async handler(ctx) {
|
|
148
|
+
const objectName = ctx.params.objectName;
|
|
149
|
+
const userSession = ctx.meta.user;
|
|
150
|
+
const lng = userSession.language || 'zh-CN';
|
|
151
|
+
const spaceId = userSession.spaceId;
|
|
152
|
+
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
153
|
+
const allObjects = _.pluck(clone(allMetadataObjects), 'metadata');
|
|
154
|
+
|
|
155
|
+
const query = {
|
|
156
|
+
filters: [ ['hidden', '!=', true] , ['name', '<>', ExcludeObjectNames]],
|
|
157
|
+
projection: {
|
|
158
|
+
name: 1,
|
|
159
|
+
label: 1,
|
|
160
|
+
list_views: 1
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const objects = objectql.getSteedosSchema().metadataDriver.find(allObjects, query, spaceId);
|
|
165
|
+
|
|
166
|
+
const dbListViews = await objectql.getObject('object_listviews').directFind({filters: [['shared', '!=', false]]})
|
|
167
|
+
|
|
168
|
+
_.each(objects, (object)=>{
|
|
169
|
+
if(object && object.name){
|
|
170
|
+
|
|
171
|
+
steedosI18n.translationObject(lng, object.name, object)
|
|
172
|
+
|
|
173
|
+
if(object.list_views && !_.isEmpty(object.list_views)){
|
|
174
|
+
_.each(object.list_views, (list_view, name)=>{
|
|
175
|
+
list_view.name = name;
|
|
176
|
+
list_view._id = list_view._id || list_view.name;
|
|
177
|
+
list_view.label = list_view.label || list_view.name;
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
object.list_views = objectql.getSteedosSchema().metadataDriver.find(_.values(object.list_views), {
|
|
181
|
+
projection: {
|
|
182
|
+
_id: 1,
|
|
183
|
+
name: 1,
|
|
184
|
+
label: 1
|
|
185
|
+
}
|
|
186
|
+
}, spaceId);
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if(_.isEmpty(object.list_views)){
|
|
191
|
+
object.list_views = [];
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
const objectListViews = objectql.getSteedosSchema().metadataDriver.find(dbListViews, {
|
|
195
|
+
filters: [['object_name', '=', object.name], ['shared', '=', true] ],
|
|
196
|
+
fields: "_id, name, label"
|
|
197
|
+
}, spaceId);
|
|
198
|
+
|
|
199
|
+
_.each(object.list_views, (listView)=>{
|
|
200
|
+
if(!_.find(objectListViews, (dbListView)=>{ return dbListView.name === listView.name})){
|
|
201
|
+
objectListViews.push(listView);
|
|
202
|
+
}
|
|
203
|
+
})
|
|
204
|
+
object.list_views = objectListViews;
|
|
205
|
+
}
|
|
206
|
+
})
|
|
207
|
+
const object = objects.find(function (obj) {
|
|
208
|
+
return obj.name === objectName;
|
|
209
|
+
});
|
|
210
|
+
return object;
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
getRelatedObjects: {
|
|
214
|
+
async handler(ctx) {
|
|
215
|
+
const objectName = ctx.params.objectName;
|
|
216
|
+
const userSession = ctx.meta.user;
|
|
217
|
+
const lng = userSession.language || 'zh-CN';
|
|
218
|
+
const spaceId = userSession.spaceId;
|
|
219
|
+
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
220
|
+
const allObjects = _.pluck(clone(allMetadataObjects), 'metadata');
|
|
221
|
+
|
|
222
|
+
const query = {
|
|
223
|
+
filters: [ ['hidden', '!=', true] , ['name', '<>', ExcludeObjectNames]],
|
|
224
|
+
projection: {
|
|
225
|
+
name: 1,
|
|
226
|
+
label: 1,
|
|
227
|
+
list_views: 1,
|
|
228
|
+
fields: 1
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
let objects = objectql.getSteedosSchema().metadataDriver.find(allObjects, query, spaceId);
|
|
233
|
+
objects = objects.filter(function(object){
|
|
234
|
+
let relatedFieldKey = _.findKey(object.fields, function(field){
|
|
235
|
+
return (field.type === "lookup" || field.type === "master_detail") && field.reference_to === objectName;
|
|
236
|
+
});
|
|
237
|
+
return !!relatedFieldKey;
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
const dbListViews = await objectql.getObject('object_listviews').directFind({filters: [['shared', '!=', false]]})
|
|
241
|
+
|
|
85
242
|
_.each(objects, (object)=>{
|
|
86
243
|
if(object && object.name){
|
|
87
244
|
|
|
@@ -343,11 +343,17 @@ module.exports = {
|
|
|
343
343
|
if(field.type === 'select'){
|
|
344
344
|
return field.options;
|
|
345
345
|
}else if(field.reference_to){
|
|
346
|
-
|
|
346
|
+
let referenceTo = field.reference_to;
|
|
347
|
+
let reference_to_field = field.reference_to_field || objectConfig._idFieldName || '_id'
|
|
348
|
+
if(referenceTo === 'users'){
|
|
349
|
+
referenceTo = 'space_users';
|
|
350
|
+
reference_to_field = 'user'
|
|
351
|
+
}
|
|
352
|
+
const records = await objectql.getObject(referenceTo).find({filters: [[]]})
|
|
347
353
|
return _.map(records, (record)=>{
|
|
348
354
|
return {
|
|
349
355
|
label: record[objectConfig._NAME_FIELD_KEY || 'name'],
|
|
350
|
-
value: record[
|
|
356
|
+
value: record[reference_to_field]
|
|
351
357
|
};
|
|
352
358
|
})
|
|
353
359
|
}
|
|
@@ -127,6 +127,26 @@ module.exports = {
|
|
|
127
127
|
|
|
128
128
|
return { status: 0, data: { options } }
|
|
129
129
|
},
|
|
130
|
+
},
|
|
131
|
+
getObjectsForGenerateTabsOptions: {
|
|
132
|
+
rest: {
|
|
133
|
+
method: "GET",
|
|
134
|
+
path: "/objects/generate_tabs_options"
|
|
135
|
+
},
|
|
136
|
+
async handler(ctx) {
|
|
137
|
+
const options = await this.getObjectsGenerateTabsOptions(ctx);
|
|
138
|
+
return { status: 0, data: { options } }
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
generateTabs: {
|
|
142
|
+
rest: {
|
|
143
|
+
method: "POST",
|
|
144
|
+
path: "/objects/generate/tabs"
|
|
145
|
+
},
|
|
146
|
+
async handler(ctx) {
|
|
147
|
+
const result = await this.generateTabs(ctx);
|
|
148
|
+
return { status: 0, data: result }
|
|
149
|
+
}
|
|
130
150
|
}
|
|
131
151
|
},
|
|
132
152
|
|
|
@@ -312,7 +332,10 @@ module.exports = {
|
|
|
312
332
|
type: "detail",
|
|
313
333
|
}
|
|
314
334
|
*/
|
|
315
|
-
|
|
335
|
+
const relationsInfo = await object.getRelationsInfo();
|
|
336
|
+
const details = relationsInfo && relationsInfo.details;
|
|
337
|
+
const lookupDetails = relationsInfo && relationsInfo.lookup_details;
|
|
338
|
+
relatedLists = relatedLists.concat(_.union(details, lookupDetails));
|
|
316
339
|
|
|
317
340
|
if(objectConfig.enable_tasks){
|
|
318
341
|
relatedLists.push("tasks.related_to")
|
|
@@ -354,6 +377,123 @@ module.exports = {
|
|
|
354
377
|
})
|
|
355
378
|
return options;
|
|
356
379
|
}
|
|
380
|
+
},
|
|
381
|
+
getObjectsGenerateTabsOptions: {
|
|
382
|
+
async handler(ctx) {
|
|
383
|
+
const userSession = ctx.meta.user;
|
|
384
|
+
const lng = userSession.language || 'zh-CN';
|
|
385
|
+
const spaceId = userSession.spaceId;
|
|
386
|
+
const objectTabs = await objectql.getObject('tabs').find({filters: [['type', '=', "object"]]});
|
|
387
|
+
const tabObjects = _.map(objectTabs, "object");
|
|
388
|
+
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
389
|
+
const allObjects = _.map(clone(allMetadataObjects), 'metadata');
|
|
390
|
+
const query = {
|
|
391
|
+
filters: [['hidden', '!=', true], ['name', '<>', tabObjects]],
|
|
392
|
+
projection: {
|
|
393
|
+
name: 1,
|
|
394
|
+
label: 1
|
|
395
|
+
}
|
|
396
|
+
};
|
|
397
|
+
// 只列出未找到tabs记录的对象清单
|
|
398
|
+
const objects = objectql.getSteedosSchema().metadataDriver.find(allObjects, query, spaceId);
|
|
399
|
+
|
|
400
|
+
_.each(objects, (object)=>{
|
|
401
|
+
if(object && object.name){
|
|
402
|
+
steedosI18n.translationObject(lng, object.name, object)
|
|
403
|
+
}
|
|
404
|
+
})
|
|
405
|
+
return _.map(objects, (object)=>{
|
|
406
|
+
return {
|
|
407
|
+
value: object.name,
|
|
408
|
+
label: object.label || object.name
|
|
409
|
+
}
|
|
410
|
+
});
|
|
411
|
+
}
|
|
412
|
+
},
|
|
413
|
+
generateTabs: {
|
|
414
|
+
async handler(ctx) {
|
|
415
|
+
let selectedObjects = ctx.params && ctx.params.objects && ctx.params.objects.split(",");
|
|
416
|
+
if(!selectedObjects || !selectedObjects.length){
|
|
417
|
+
return {
|
|
418
|
+
doneCount:0,
|
|
419
|
+
errors: []
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
const userSession = ctx.meta.user;
|
|
423
|
+
const lng = userSession.language || 'zh-CN';
|
|
424
|
+
const spaceId = userSession.spaceId;
|
|
425
|
+
const userId = userSession.userId;
|
|
426
|
+
const companyId = userSession.company_id;
|
|
427
|
+
const companyIds = userSession.company_ids;
|
|
428
|
+
const allMetadataObjects = await objectql.getSteedosSchema().getAllObject();
|
|
429
|
+
const allObjects = _.map(clone(allMetadataObjects), 'metadata');
|
|
430
|
+
const query = {
|
|
431
|
+
filters: [['name', 'in', selectedObjects]], //['hidden', '!=', true] ,
|
|
432
|
+
projection: {
|
|
433
|
+
name: 1,
|
|
434
|
+
label: 1
|
|
435
|
+
}
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
const objects = objectql.getSteedosSchema().metadataDriver.find(allObjects, query, spaceId);
|
|
439
|
+
|
|
440
|
+
_.each(objects, (object) => {
|
|
441
|
+
if (object && object.name) {
|
|
442
|
+
steedosI18n.translationObject(lng, object.name, object)
|
|
443
|
+
}
|
|
444
|
+
})
|
|
445
|
+
const errors = [];
|
|
446
|
+
let doneCount = 0;
|
|
447
|
+
for(let i = 0;i < objects.length; i++) {
|
|
448
|
+
const object = objects[i];
|
|
449
|
+
try{
|
|
450
|
+
const existCount = await objectql.getObject('tabs').count({filters: [['object', '=', object.name]]});
|
|
451
|
+
if(existCount > 0){
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
const tabLabel = object.label || object.name;
|
|
455
|
+
const tabName = "object_" + object.name.replace(/__c$/, "");
|
|
456
|
+
const now = new Date();
|
|
457
|
+
const doc = {
|
|
458
|
+
label: tabLabel,
|
|
459
|
+
name: tabName,
|
|
460
|
+
icon: object.icon,
|
|
461
|
+
type: "object",
|
|
462
|
+
mobile: true,
|
|
463
|
+
desktop: true,
|
|
464
|
+
object: object.name,
|
|
465
|
+
space: spaceId,
|
|
466
|
+
owner: userId,
|
|
467
|
+
created_by: userId,
|
|
468
|
+
created: now,
|
|
469
|
+
modified_by: userId,
|
|
470
|
+
modified: now,
|
|
471
|
+
company_id: companyId,
|
|
472
|
+
company_ids: companyIds
|
|
473
|
+
};
|
|
474
|
+
const tab = await objectql.getObject('tabs').insert(doc);
|
|
475
|
+
if(tab && tab._id){
|
|
476
|
+
doneCount++;
|
|
477
|
+
}
|
|
478
|
+
else{
|
|
479
|
+
errors.push({
|
|
480
|
+
object: (object.label || object.name) + `(${object.name})`,
|
|
481
|
+
message: ""
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
}
|
|
485
|
+
catch(ex){
|
|
486
|
+
errors.push({
|
|
487
|
+
object: (object.label || object.name) + `(${object.name})`,
|
|
488
|
+
message: ex.message
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
};
|
|
492
|
+
return {
|
|
493
|
+
doneCount:doneCount,
|
|
494
|
+
errors: errors
|
|
495
|
+
}
|
|
496
|
+
}
|
|
357
497
|
}
|
|
358
498
|
}
|
|
359
499
|
};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @Description: 提供amis选人组件需要的数据接口
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
const objectql = require("@steedos/objectql");
|
|
6
|
+
const _ = require("lodash");
|
|
7
|
+
const clone = require("clone");
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
module.exports = {
|
|
11
|
+
name: "amis-metadata-space_users",
|
|
12
|
+
mixins: [],
|
|
13
|
+
/**
|
|
14
|
+
* Settings
|
|
15
|
+
*/
|
|
16
|
+
settings: {
|
|
17
|
+
|
|
18
|
+
},
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Dependencies
|
|
22
|
+
*/
|
|
23
|
+
dependencies: [],
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Actions
|
|
27
|
+
*/
|
|
28
|
+
actions: {
|
|
29
|
+
getSpaceUsersOptions: {
|
|
30
|
+
rest: {
|
|
31
|
+
method: "GET",
|
|
32
|
+
path: "/space_users/options"
|
|
33
|
+
},
|
|
34
|
+
async handler(ctx) {
|
|
35
|
+
const options = await this.getSpaceUsersOptions(ctx);
|
|
36
|
+
return { status: 0, data: { options } }
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Events
|
|
43
|
+
*/
|
|
44
|
+
events: {
|
|
45
|
+
|
|
46
|
+
},
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Methods
|
|
50
|
+
*/
|
|
51
|
+
methods: {
|
|
52
|
+
/**
|
|
53
|
+
1.当没有传入参数,即第一次请求接口时返回如下格式的数据:
|
|
54
|
+
[
|
|
55
|
+
{
|
|
56
|
+
"leftOptions": [
|
|
57
|
+
{
|
|
58
|
+
"label": "总公司",
|
|
59
|
+
"value": 1,
|
|
60
|
+
"defer": true
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
"children": [
|
|
64
|
+
{
|
|
65
|
+
"ref": 1,
|
|
66
|
+
"defer": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"ref": 2,
|
|
70
|
+
"defer": true
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"ref": 3,
|
|
74
|
+
"defer": true
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
"ref": 4,
|
|
78
|
+
"defer": true
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"ref": 5,
|
|
82
|
+
"defer": true
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"ref": 6,
|
|
86
|
+
"defer": true
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
]
|
|
91
|
+
2.当传入def参数值时,表示展开左侧组织树某个组织,此时返回如下格式的数据:
|
|
92
|
+
[
|
|
93
|
+
{
|
|
94
|
+
"label": "部门 A",
|
|
95
|
+
"value": 2
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
"label": "部门 B",
|
|
99
|
+
"value": 3,
|
|
100
|
+
"defer": true
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"label": "部门 C",
|
|
104
|
+
"value": 4
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
2.当传入ref参数值时,表示点击左侧某个组织,按此组织过滤右侧人员列表,此时返回如下格式的数据:
|
|
108
|
+
[
|
|
109
|
+
{
|
|
110
|
+
"label": "用户 1",
|
|
111
|
+
"value": "user1"
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"label": "用户 2",
|
|
115
|
+
"value": "user2"
|
|
116
|
+
}
|
|
117
|
+
]
|
|
118
|
+
*/
|
|
119
|
+
getSpaceUsersOptions: {
|
|
120
|
+
async handler(ctx) {
|
|
121
|
+
const userSession = ctx.meta.user;
|
|
122
|
+
const spaceId = userSession.spaceId;
|
|
123
|
+
// 有 dep 值则是懒加载部门树,有 ref 值则是懒加载人员,否则按第一次加载返回第一个 option作为select的基本配置
|
|
124
|
+
// 需要懒加载的项通过返回相关项的 defer 为 true 来标记。左右两部分都支持懒加载。
|
|
125
|
+
// 参考 https://aisuda.bce.baidu.com/amis/zh-CN/components/form/select#%E4%BA%BA%E5%91%98%E7%82%B9%E9%80%89
|
|
126
|
+
const dep = ctx.params.dep;
|
|
127
|
+
const ref = ctx.params.ref;
|
|
128
|
+
const valueField = ctx.params.valueField || "user";//user or _id
|
|
129
|
+
const term = ctx.params.term;
|
|
130
|
+
if(dep){
|
|
131
|
+
// 有 dep 值则是懒加载部门树,返回展开后的部门列表
|
|
132
|
+
const fields = "_id,name,children".split(",");
|
|
133
|
+
const filters = [['space', '=', spaceId], ['parent', '=', dep]];
|
|
134
|
+
const orgs = await objectql.getObject('organizations').find({filters: filters, fields: fields});
|
|
135
|
+
const reOptions = _.map(orgs, (org)=>{
|
|
136
|
+
return {
|
|
137
|
+
value: org._id,
|
|
138
|
+
label: org.name,
|
|
139
|
+
defer: !!(org.children && org.children.length)
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return reOptions;
|
|
143
|
+
}
|
|
144
|
+
else if(ref || term){
|
|
145
|
+
// 有 ref 值则是懒加载人员,返回按ref值过滤后的人员列表
|
|
146
|
+
const fields = "_id,name,user".split(",");
|
|
147
|
+
const filters = [['space', '=', spaceId], ['user_accepted', '=', true]];
|
|
148
|
+
if(term){
|
|
149
|
+
const fieldsForSearch = ["name", "username", "email", "mobile"];
|
|
150
|
+
const termFilters = [];
|
|
151
|
+
fieldsForSearch.forEach(function(field){
|
|
152
|
+
termFilters.push([field, 'contains', term]);
|
|
153
|
+
termFilters.push("or");
|
|
154
|
+
});
|
|
155
|
+
termFilters.pop();
|
|
156
|
+
filters.push(termFilters);
|
|
157
|
+
}
|
|
158
|
+
else{
|
|
159
|
+
filters.push(['organizations_parents', '=', ref]);
|
|
160
|
+
}
|
|
161
|
+
const sus = await objectql.getObject('space_users').find({filters: filters, fields: fields});
|
|
162
|
+
const reOptions = _.map(sus, (su)=>{
|
|
163
|
+
return {
|
|
164
|
+
value: su[valueField],
|
|
165
|
+
label: su.name
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
return reOptions;
|
|
169
|
+
}
|
|
170
|
+
else{
|
|
171
|
+
// 接口返回的选项中,第一个 option 是以下这种格式时,
|
|
172
|
+
// 也会把 options[0].leftOptions 当成 leftOptions
|
|
173
|
+
// options[0].children 当 options。
|
|
174
|
+
// 同时 options[0].leftDefaultValue 可以用来配置左侧选项的默认值。
|
|
175
|
+
const reOptions = [{
|
|
176
|
+
children: [],
|
|
177
|
+
leftOptions: [],
|
|
178
|
+
leftDefaultValue: ''
|
|
179
|
+
}];
|
|
180
|
+
const fields = "_id,name,children".split(",");
|
|
181
|
+
const filters = [['space', '=', spaceId], ['parent', '=', null]];
|
|
182
|
+
const rootOrgs = await objectql.getObject('organizations').find({filters: filters, fields: fields});
|
|
183
|
+
reOptions[0].leftOptions = _.map(rootOrgs, (org)=>{
|
|
184
|
+
return {
|
|
185
|
+
value: org._id,
|
|
186
|
+
label: org.name,
|
|
187
|
+
defer: !!(org.children && org.children.length)
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
reOptions[0].children = _.map(rootOrgs, (org)=>{
|
|
191
|
+
return {
|
|
192
|
+
ref: org._id,
|
|
193
|
+
defer: !!(org.children && org.children.length)
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
return reOptions;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@steedos/service-plugin-amis",
|
|
3
|
-
"version": "2.3.0-beta.
|
|
3
|
+
"version": "2.3.0-beta.30",
|
|
4
4
|
"main": "package.service.js",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "node .scripts/build.tailwind.js"
|
|
@@ -10,5 +10,5 @@
|
|
|
10
10
|
"publishConfig": {
|
|
11
11
|
"access": "public"
|
|
12
12
|
},
|
|
13
|
-
"gitHead": "
|
|
13
|
+
"gitHead": "edcebd33164ec6148abccda56589416638b1872d"
|
|
14
14
|
}
|
package/public/amis/amis.css
CHANGED
|
@@ -52,7 +52,7 @@ body{
|
|
|
52
52
|
min-width: 100px;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
.steedos-amis-form .antd-Collapse .antd-Form--normal{
|
|
55
|
+
.steedos-amis-form .antd-Collapse .antd-Form--normal, .antd-Form--normal .antd-Tabs .antd-Tabs-content .antd-Tabs-pane .form-content{
|
|
56
56
|
display: grid!important;
|
|
57
57
|
grid-template-columns: repeat(2,minmax(0,1fr))!important;
|
|
58
58
|
grid-row-gap: 1rem!important;
|