@steedos-widgets/amis-lib 1.2.3 → 1.2.6-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/dist/cjs/tsconfig.tsbuildinfo +1 -1
- package/dist/index.cjs.js +204 -178
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +205 -179
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +204 -178
- package/dist/index.umd.js.map +1 -1
- package/dist/types/lib/converter/amis/api.d.ts +4 -0
- package/dist/types/lib/converter/amis/fields_filter.d.ts +29 -23
- package/dist/types/lib/converter/amis/header.d.ts +13 -14
- package/dist/types/lib/converter/amis/index.d.ts +4 -0
- package/dist/types/lib/converter/amis/toolbar.d.ts +13 -14
- package/dist/types/lib/objects.d.ts +4 -0
- package/dist/types/lib/objectsRelated.d.ts +2 -0
- package/dist/types/lib/page_init.d.ts +4 -0
- package/dist/types/schema/standard_new.amis.d.ts +22 -0
- package/dist/types/standard/button.d.ts +22 -0
- package/package.json +2 -2
package/dist/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _$1 from 'lodash';
|
|
2
|
-
import ___default, { isEmpty, isArray, each, find, endsWith, cloneDeep, includes, get, map,
|
|
2
|
+
import ___default, { isEmpty, isArray, each, find, endsWith, cloneDeep, includes, get, map, toArray, mergeWith, isBoolean, omitBy, isNil, isString, union, has, slice, defaultsDeep as defaultsDeep$1, isObject as isObject$1, filter, startsWith } from 'lodash';
|
|
3
3
|
import { Router as Router$1, getSteedosAuth as getSteedosAuth$1, lookupToAmis as lookupToAmis$1, fetchAPI as fetchAPI$1 } from '@steedos-widgets/amis-lib';
|
|
4
4
|
import isPlainObject from 'lodash/isPlainObject';
|
|
5
5
|
|
|
@@ -334,7 +334,7 @@ const getSteedosAuth = () => {
|
|
|
334
334
|
* @Author: baozhoutao@steedos.com
|
|
335
335
|
* @Date: 2022-08-16 17:02:08
|
|
336
336
|
* @LastEditors: baozhoutao@steedos.com
|
|
337
|
-
* @LastEditTime: 2023-04-
|
|
337
|
+
* @LastEditTime: 2023-04-19 15:25:50
|
|
338
338
|
* @Description:
|
|
339
339
|
*/
|
|
340
340
|
|
|
@@ -346,7 +346,7 @@ const Router = {
|
|
|
346
346
|
return urlSearch.get('display')
|
|
347
347
|
}
|
|
348
348
|
// const key = `tab.${tab_id}.display`;
|
|
349
|
-
const key = `
|
|
349
|
+
const key = `page_display`;
|
|
350
350
|
const value = localStorage.getItem(key);
|
|
351
351
|
return value ? value : 'grid'
|
|
352
352
|
},
|
|
@@ -1368,8 +1368,8 @@ var config = {
|
|
|
1368
1368
|
/*
|
|
1369
1369
|
* @Author: baozhoutao@steedos.com
|
|
1370
1370
|
* @Date: 2022-11-01 15:51:00
|
|
1371
|
-
* @LastEditors:
|
|
1372
|
-
* @LastEditTime: 2023-04-
|
|
1371
|
+
* @LastEditors: baozhoutao@steedos.com
|
|
1372
|
+
* @LastEditTime: 2023-04-19 20:26:27
|
|
1373
1373
|
* @Description:
|
|
1374
1374
|
*/
|
|
1375
1375
|
|
|
@@ -1479,7 +1479,27 @@ const getSchema$4 = async (uiSchema, ctx) => {
|
|
|
1479
1479
|
"id": "u:e11347411d2d",
|
|
1480
1480
|
"closeOnEsc": false,
|
|
1481
1481
|
"closeOnOutside": false,
|
|
1482
|
-
"size": "lg"
|
|
1482
|
+
"size": "lg",
|
|
1483
|
+
"actions": [
|
|
1484
|
+
{
|
|
1485
|
+
type: 'button',
|
|
1486
|
+
actionType: 'cancel',
|
|
1487
|
+
label: "取消"
|
|
1488
|
+
},
|
|
1489
|
+
{
|
|
1490
|
+
type: 'button',
|
|
1491
|
+
label: "保存并新建",
|
|
1492
|
+
actionType: 'confirm',
|
|
1493
|
+
close: false,
|
|
1494
|
+
id: "confirmAndNew"
|
|
1495
|
+
},
|
|
1496
|
+
{
|
|
1497
|
+
type: 'button',
|
|
1498
|
+
actionType: 'confirm',
|
|
1499
|
+
label: "保存",
|
|
1500
|
+
primary: true
|
|
1501
|
+
},
|
|
1502
|
+
]
|
|
1483
1503
|
}
|
|
1484
1504
|
}
|
|
1485
1505
|
]
|
|
@@ -2381,96 +2401,97 @@ async function getObjectFieldsFilterButtonSchema(objectSchema) {
|
|
|
2381
2401
|
}
|
|
2382
2402
|
}
|
|
2383
2403
|
|
|
2384
|
-
async function getObjectFieldsFilterFormSchema(
|
|
2385
|
-
|
|
2404
|
+
async function getObjectFieldsFilterFormSchema(ctx) {
|
|
2405
|
+
|
|
2406
|
+
if (!ctx) {
|
|
2386
2407
|
ctx = {};
|
|
2387
2408
|
}
|
|
2388
|
-
const
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
2398
|
-
|
|
2399
|
-
|
|
2400
|
-
|
|
2401
|
-
|
|
2402
|
-
|
|
2403
|
-
|
|
2404
|
-
|
|
2405
|
-
|
|
2406
|
-
|
|
2407
|
-
|
|
2408
|
-
|
|
2409
|
-
|
|
2410
|
-
|
|
2411
|
-
|
|
2412
|
-
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2409
|
+
const formSchema = {
|
|
2410
|
+
"type": "service",
|
|
2411
|
+
"visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
|
|
2412
|
+
"className": ctx.formFactor === 'SMALL' ? "slds-filters__body p-0 mb-2" : "slds-filters__body p-0 sm:grid sm:gap-2 sm:grid-cols-4 mb-2",
|
|
2413
|
+
"schemaApi": {
|
|
2414
|
+
method: 'post',
|
|
2415
|
+
url: `\${context.rootUrl}/graphql?reload=\${filterFormSearchableFields|join}`,
|
|
2416
|
+
data: {
|
|
2417
|
+
$self: "$$",
|
|
2418
|
+
query: "{\n data: objects(filters: [[\"_id\",\"=\",null]],top: 1, skip: 0){_id}\n }"
|
|
2419
|
+
},
|
|
2420
|
+
requestAdaptor: `
|
|
2421
|
+
return {
|
|
2422
|
+
...api,
|
|
2423
|
+
data: {
|
|
2424
|
+
query: api.data.query
|
|
2425
|
+
}
|
|
2426
|
+
};
|
|
2427
|
+
`,
|
|
2428
|
+
adaptor: `
|
|
2429
|
+
if(payload.errors){
|
|
2430
|
+
payload.status = 2;
|
|
2431
|
+
payload.msg = window.t ? window.t(payload.errors[0].message) : payload.errors[0].message;
|
|
2432
|
+
}
|
|
2433
|
+
const selfData = api.body.$self;
|
|
2434
|
+
const filterFormSearchableFields = selfData.filterFormSearchableFields;
|
|
2435
|
+
const uiSchema = selfData.uiSchema;
|
|
2436
|
+
const fields = uiSchema.fields;
|
|
2437
|
+
const searchableFields = [];
|
|
2438
|
+
|
|
2439
|
+
const resolveAll = function(values){
|
|
2440
|
+
payload.data = {
|
|
2441
|
+
"body": values
|
|
2442
|
+
};
|
|
2443
|
+
return payload;
|
|
2444
|
+
}
|
|
2445
|
+
|
|
2446
|
+
const rejectAll = function(){
|
|
2447
|
+
console.warn("run function getFieldSearchable failed.");
|
|
2448
|
+
}
|
|
2449
|
+
|
|
2450
|
+
return Promise.all(filterFormSearchableFields.map(function (item) {
|
|
2451
|
+
const field = _.clone(fields[item]);
|
|
2452
|
+
if (
|
|
2453
|
+
!_.includes(
|
|
2454
|
+
[
|
|
2455
|
+
"grid",
|
|
2456
|
+
"avatar",
|
|
2457
|
+
"image",
|
|
2458
|
+
"object",
|
|
2459
|
+
"[object]",
|
|
2460
|
+
"[Object]",
|
|
2461
|
+
"[grid]",
|
|
2462
|
+
"[text]",
|
|
2463
|
+
"audio",
|
|
2464
|
+
"file",
|
|
2465
|
+
],
|
|
2466
|
+
field.type
|
|
2467
|
+
)
|
|
2468
|
+
) {
|
|
2469
|
+
delete field.defaultValue;
|
|
2470
|
+
delete field.required;
|
|
2471
|
+
delete field.is_wide;
|
|
2472
|
+
delete field.readonly;
|
|
2473
|
+
delete field.hidden;
|
|
2474
|
+
delete field.omit;
|
|
2475
|
+
var ctx = ${JSON.stringify(ctx)};
|
|
2476
|
+
const amisField = window.getFieldSearchable(field, fields, ctx);
|
|
2477
|
+
return amisField;
|
|
2478
|
+
}
|
|
2479
|
+
})).then(resolveAll, rejectAll);
|
|
2480
|
+
`,
|
|
2481
|
+
headers: {
|
|
2482
|
+
Authorization: "Bearer ${context.tenantId},${context.authToken}"
|
|
2416
2483
|
}
|
|
2417
2484
|
}
|
|
2418
|
-
}
|
|
2419
|
-
map(body, "name");
|
|
2420
|
-
if(ctx.enableSearchableFieldsVisibleOn){
|
|
2421
|
-
body.forEach(function(fieldItem){
|
|
2422
|
-
fieldItem.visibleOn = `this.filterFormSearchableFields && this.filterFormSearchableFields.indexOf("${fieldItem.fieldName}") > -1`;
|
|
2423
|
-
// fieldItem.clearValueOnHidden = true;//这个属性会把form字段值删除,但是点击搜索时crud还是把值给传递到过滤条件(api.requestAdaptor的data.$self)中了,应该是crud的bug
|
|
2424
|
-
});
|
|
2425
|
-
}
|
|
2426
|
-
|
|
2427
|
-
// const onBroadcastSearchableFieldsChangeScript = `
|
|
2428
|
-
// const data = event.data;
|
|
2429
|
-
// const listViewId = data.listViewId;
|
|
2430
|
-
// const searchableFields = data.fields;
|
|
2431
|
-
// const preSearchableFields = data.__super.__super.fields;
|
|
2432
|
-
// const removedFields = _.difference(preSearchableFields, searchableFields);
|
|
2433
|
-
// const listViewPropsStoreKey = location.pathname + "/crud/" + listViewId ;
|
|
2434
|
-
// let localListViewProps = localStorage.getItem(listViewPropsStoreKey);
|
|
2435
|
-
// if(localListViewProps){
|
|
2436
|
-
// // 当变更可搜索字段时,如果被移除的可搜索字段在本地存储中已经存入过滤条件中则应该清除本地存储中相关字段的过滤条件。
|
|
2437
|
-
// localListViewProps = JSON.parse(localListViewProps);
|
|
2438
|
-
// let removedKeys = [];
|
|
2439
|
-
// _.each(localListViewProps, function(n,k){
|
|
2440
|
-
// // __searchable__开头的不在searchableFields范围则清除其值
|
|
2441
|
-
// let isRemoved = !!removedFields.find(function(fieldName){
|
|
2442
|
-
// return new RegExp("__searchable__\.*" + fieldName + "$").test(k);
|
|
2443
|
-
// });
|
|
2444
|
-
// if(isRemoved){
|
|
2445
|
-
// removedKeys.push(k);
|
|
2446
|
-
// }
|
|
2447
|
-
// });
|
|
2448
|
-
// const removedValues = {};
|
|
2449
|
-
// removedKeys.forEach(function(key){
|
|
2450
|
-
// delete localListViewProps[key];
|
|
2451
|
-
// removedValues[key] = "";
|
|
2452
|
-
// });
|
|
2453
|
-
// doAction({
|
|
2454
|
-
// actionType: 'setValue',
|
|
2455
|
-
// args: {
|
|
2456
|
-
// value: removedValues
|
|
2457
|
-
// }
|
|
2458
|
-
// });
|
|
2459
|
-
// localStorage.setItem(listViewPropsStoreKey, JSON.stringify(localListViewProps));
|
|
2460
|
-
// }
|
|
2461
|
-
// `;
|
|
2485
|
+
};
|
|
2462
2486
|
|
|
2463
|
-
return
|
|
2487
|
+
return formSchema;
|
|
2464
2488
|
}
|
|
2465
2489
|
|
|
2466
|
-
async function getObjectFieldsFilterBarSchema(objectSchema,
|
|
2467
|
-
|
|
2468
|
-
if(!ctx){
|
|
2490
|
+
async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
|
|
2491
|
+
if (!ctx) {
|
|
2469
2492
|
ctx = {};
|
|
2470
2493
|
}
|
|
2471
|
-
const filterFormSchema = await getObjectFieldsFilterFormSchema(
|
|
2472
|
-
enableSearchableFieldsVisibleOn: true
|
|
2473
|
-
}, ctx));
|
|
2494
|
+
const filterFormSchema = await getObjectFieldsFilterFormSchema(ctx);
|
|
2474
2495
|
const onSearchScript = `
|
|
2475
2496
|
const scope = event.context.scoped;
|
|
2476
2497
|
var filterForm = scope.parent.parent.getComponents().find(function(n){
|
|
@@ -2503,18 +2524,21 @@ async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
|
|
|
2503
2524
|
searchableFieldsStoreKey += listViewId;
|
|
2504
2525
|
}
|
|
2505
2526
|
let defaultSearchableFields = sessionStorage.getItem(searchableFieldsStoreKey);
|
|
2506
|
-
if(
|
|
2527
|
+
if(defaultSearchableFields){
|
|
2528
|
+
defaultSearchableFields = defaultSearchableFields.split(",");
|
|
2529
|
+
}
|
|
2530
|
+
if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
|
|
2507
2531
|
let listView = data.uiSchema.list_views[data.listName];
|
|
2508
|
-
|
|
2509
|
-
if(
|
|
2510
|
-
defaultSearchableFields = _.map(
|
|
2532
|
+
const sFields = listView && listView.searchable_fields;
|
|
2533
|
+
if(sFields && sFields.length){
|
|
2534
|
+
defaultSearchableFields = _.map(sFields, 'field');
|
|
2511
2535
|
}
|
|
2512
2536
|
}
|
|
2513
2537
|
if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
|
|
2514
2538
|
defaultSearchableFields = _.map(
|
|
2515
|
-
_.filter(_.values(data.uiSchema.fields), (field) => {
|
|
2539
|
+
_.sortBy(_.filter(_.values(data.uiSchema.fields), (field) => {
|
|
2516
2540
|
return field.searchable;
|
|
2517
|
-
}),
|
|
2541
|
+
}), "sort_no"),
|
|
2518
2542
|
"name"
|
|
2519
2543
|
);
|
|
2520
2544
|
}
|
|
@@ -2652,7 +2676,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
|
|
|
2652
2676
|
// "filterFormValues": {"__searchable__name": "xxx"},//搜索项表单值
|
|
2653
2677
|
// "listViewId": "${listViewId}"
|
|
2654
2678
|
},
|
|
2655
|
-
"id": `service_listview_filter_form_${objectSchema.name}`,
|
|
2679
|
+
// "id": `service_listview_filter_form_${objectSchema.name}`,
|
|
2656
2680
|
"dataProvider": {
|
|
2657
2681
|
"inited": dataProviderInited
|
|
2658
2682
|
},
|
|
@@ -2660,15 +2684,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
|
|
|
2660
2684
|
"type": "wrapper",
|
|
2661
2685
|
"body": {
|
|
2662
2686
|
"type": "wrapper",
|
|
2663
|
-
"body": [{
|
|
2664
|
-
"type": "wrapper",
|
|
2665
|
-
"body": [
|
|
2666
|
-
filterFormSchema
|
|
2667
|
-
],
|
|
2668
|
-
"size": "xs",
|
|
2669
|
-
"visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
|
|
2670
|
-
"className": ctx.formFactor === 'SMALL' ? "slds-filters__body p-0 mb-2": "slds-filters__body p-0 sm:grid sm:gap-2 sm:grid-cols-4 mb-2"
|
|
2671
|
-
}, {
|
|
2687
|
+
"body": [filterFormSchema, {
|
|
2672
2688
|
"type": "wrapper",
|
|
2673
2689
|
"body": {
|
|
2674
2690
|
"type": "wrapper",
|
|
@@ -3027,16 +3043,7 @@ async function getObjectListHeaderSecordLine(objectSchema, listViewName, ctx) {
|
|
|
3027
3043
|
* @returns amisSchema
|
|
3028
3044
|
*/
|
|
3029
3045
|
async function getObjectListHeaderFieldsFilterBar(objectSchema, listViewName, ctx) {
|
|
3030
|
-
const
|
|
3031
|
-
const fields = sortBy(
|
|
3032
|
-
compact(
|
|
3033
|
-
map(searchableFields, (fieldName) => {
|
|
3034
|
-
return objectSchema.fields[fieldName];
|
|
3035
|
-
})
|
|
3036
|
-
),
|
|
3037
|
-
"sort_no"
|
|
3038
|
-
);
|
|
3039
|
-
const fieldsFilterBarSchema = await getObjectFieldsFilterBarSchema(objectSchema, fields, ctx);
|
|
3046
|
+
const fieldsFilterBarSchema = await getObjectFieldsFilterBarSchema(objectSchema, ctx);
|
|
3040
3047
|
return fieldsFilterBarSchema;
|
|
3041
3048
|
}
|
|
3042
3049
|
|
|
@@ -3815,12 +3822,11 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
|
|
|
3815
3822
|
"objectApiName": "object_listviews",
|
|
3816
3823
|
"recordId": "${recordId}",
|
|
3817
3824
|
"mode": "edit",
|
|
3818
|
-
"initApiAdaptor": "",
|
|
3819
3825
|
"fields": [
|
|
3820
3826
|
"filters"
|
|
3821
3827
|
],
|
|
3822
3828
|
"initApiRequestAdaptor": "",
|
|
3823
|
-
"initApiAdaptor": "const recordId_tmp = api.body.recordId;\nlet data_tmp;\nif (recordId_tmp) {\n data_tmp = payload.data
|
|
3829
|
+
"initApiAdaptor": "const recordId_tmp = api.body.recordId;\nlet data_tmp;\nif (recordId_tmp) {\n data_tmp = payload.data;\n // 数据格式转换\n if (data_tmp) {\n if (data_tmp.filters && lodash.isString(data_tmp.filters)) {\n try {\n data_tmp.filters = JSON.parse(data_tmp.filters);\n } catch (e) { }\n }\n\n if (data_tmp.filters && lodash.isString(data_tmp.filters)) {\n data_tmp._filters_type_controller = 'function';\n } else {\n data_tmp._filters_type_controller = 'conditions'\n }\n\n if (data_tmp._filters_type_controller === 'conditions') {\n data_tmp._filters_conditions = window.amisConvert.filtersToConditions(data_tmp.filters || []);\n data_tmp.filters = data_tmp._filters_conditions;\n } else {\n data_tmp._filters_function = data_tmp.filters;\n }\n }\n}\nfor (key in data_tmp) {\n if (data_tmp[key] === null) {\n delete data_tmp[key];\n }\n}\npayload.data = Object.assign(payload.data, data_tmp);\ndelete payload.extensions;",
|
|
3824
3830
|
"apiRequestAdaptor": "const recordId = api.body.recordId;\nif (formData._filters_type_controller === 'conditions' && formData._filters_conditions) {\n formData.filters = window.amisConvert.conditionsToFilters(formData.filters);\n} else {\n formData.filters = formData._filters_function || null;\n}\n\ndelete formData._filters_type_controller;\ndelete formData._filters_conditions;\ndelete formData._filters_function;\n// 字符串拼接(不支持ES6``语法)\nquery = 'mutation{record: ' + objectName + '__insert(doc: {__saveData}){_id}}';\nif (api.body.recordId) {\n query = 'mutation{record: ' + objectName + '__update(id: \"' + recordId + '\", doc: {__saveData}){_id}}';\n};\n__saveData = JSON.stringify(JSON.stringify(formData));\napi.data = { query: query.replace('{__saveData}', __saveData) };\n",
|
|
3825
3831
|
"fieldsExtend": "{\"filters\": {\n \"visible_on\": \"true\",\n \"amis\": {\n \"type\": \"condition-builder\",\n \"label\": \"条件组件\",\n \"source\": {\n \"method\": \"get\",\n \"url\": \"${context.rootUrl}/service/api/amis-metadata-listviews/getFilterFields?objectName=${objectName}\",\n \"dataType\": \"json\",\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n }\n }\n}",
|
|
3826
3832
|
"onEvent": {
|
|
@@ -3880,7 +3886,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
|
|
|
3880
3886
|
"recordId": "${recordId}",
|
|
3881
3887
|
"mode": "edit",
|
|
3882
3888
|
"fieldsExtend": "{\n \"columns\": {\n \"amis\": {\n \"type\": \"transfer\",\n \"sortable\": true,\n \"searchable\": true,\n \"source\": {\n \"method\": \"get\",\n \"url\": \"${context.rootUrl}/service/api/amis-metadata-objects/objects/${objectName}/fields/options\",\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n }\n },\n \"mobile_columns\": {\n \"group\": \"手机端\",\n \"amis\": {\n \"type\": \"transfer\",\n \"sortable\": true,\n \"searchable\": true,\n \"source\": {\n \"method\": \"get\",\n \"url\": \"${context.rootUrl}/service/api/amis-metadata-objects/objects/${objectName}/fields/options\",\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n }\n }\n}",
|
|
3883
|
-
"initApiAdaptor": "const recordId_tmp = api.body.recordId;\nlet columns_tmp = {}, mobile_columns_tmp = {};\nif (recordId_tmp) {\n columns_tmp = payload.data.
|
|
3889
|
+
"initApiAdaptor": "const recordId_tmp = api.body.recordId;\nlet columns_tmp = {}, mobile_columns_tmp = {};\nif (recordId_tmp) {\n columns_tmp = payload.data.columns;\n mobile_columns_tmp = payload.data.mobile_columns;\n if (columns_tmp) {\n columns_tmp = lodash.map(columns_tmp, 'field');\n }\n if (mobile_columns_tmp) {\n mobile_columns_tmp = lodash.map(mobile_columns_tmp, 'field');\n }\n}\npayload.data.columns = columns_tmp;\npayload.data.mobile_columns = mobile_columns_tmp;\n\ndelete payload.extensions;\nreturn payload;",
|
|
3884
3890
|
"apiRequestAdaptor": "const formData_tmp = api.body.$;\nconst objectName_tmp = api.body.objectName;\nconst recordId_tmp = api.body.recordId;\n\nif (typeof formData_tmp.columns == 'string') {\n formData_tmp.columns = formData_tmp.columns?.split(',');\n}\nif (typeof formData_tmp.mobile_columns == 'string') {\n formData_tmp.mobile_columns = formData_tmp.mobile_columns?.split(',');\n}\n\n// 数据格式转换\nformData_tmp.columns = lodash.map(formData_tmp.columns, (item) => {\n return { field: item };\n});\nformData.mobile_columns = lodash.map(formData.mobile_columns, (item) => {\n return { field: item };\n});\n\n// 字符串拼接(不支持ES6语法)\nlet query_tmp = 'mutation{record: ' + objectName_tmp + '__insert(doc: {__saveData}){_id}}';\nif (api.body.recordId) {\n query_tmp = 'mutation{record: ' + objectName_tmp + '__update(id: \"' + recordId_tmp +'\", doc: {__saveData}){_id}}';\n};\ndelete formData_tmp._id;\nlet __saveData_tmp = JSON.stringify(JSON.stringify(formData_tmp));\napi.data = { query: query_tmp.replace('{__saveData}', __saveData_tmp) };\n\nreturn api;",
|
|
3885
3891
|
"fields": [
|
|
3886
3892
|
"columns",
|
|
@@ -3962,7 +3968,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
|
|
|
3962
3968
|
}
|
|
3963
3969
|
},
|
|
3964
3970
|
"fieldsExtend": "{\n \"sort\": {\n \"amis\": {\n \"type\": \"tabs-transfer\",\n \"sortable\": true,\n \"searchable\": true,\n \"source\": {\n \"method\": \"get\",\n \"url\": \"${context.rootUrl}/service/api/amis-metadata-objects/objects/${objectName}/sortFields/options\",\n \"headers\": {\n \"Authorization\": \"Bearer ${context.tenantId},${context.authToken}\"\n }\n }\n }\n }\n}",
|
|
3965
|
-
"initApiAdaptor": "let sort;\nif (recordId) {\n sort = payload.data.
|
|
3971
|
+
"initApiAdaptor": "let sort;\nif (recordId) {\n sort = payload.data.sort;\n //数据格式转换\n if (sort instanceof Array) {\n sort = lodash.map(sort, (item) => {\n return item.field_name + ':' + (item.order || 'asc')\n });\n }\n}\npayload.data.sort = sort;\ndelete payload.extensions;",
|
|
3966
3972
|
"apiRequestAdaptor": "const recordId = api.body.recordId;\n//数据格式转换\nif (typeof formData.sort == 'string') {\n formData.sort = formData.sort?.split(',');\n}\nformData.sort = lodash.map(formData.sort, (item) => {\n const arr = item.split(':');\n return { field_name: arr[0], order: arr[1] };\n});\nif (recordId) {\n query = 'mutation{record: ' + objectName + '__update(id: \"' + recordId + '\", doc: {__saveData}){_id}}';\n}\n__saveData = JSON.stringify(JSON.stringify(formData));\napi.data = { query: query.replace('{__saveData}', __saveData) };\n"
|
|
3967
3973
|
}
|
|
3968
3974
|
],
|
|
@@ -4501,13 +4507,16 @@ async function lookupToAmisPicker(field, readonly, ctx){
|
|
|
4501
4507
|
var sort = orderBy + ' ' + orderDir;
|
|
4502
4508
|
sort = orderBy ? sort : "${sort}";
|
|
4503
4509
|
var allowSearchFields = ${JSON.stringify(searchableFields)};
|
|
4510
|
+
let fieldValue;
|
|
4504
4511
|
if(api.data.$term){
|
|
4505
4512
|
filters = [["name", "contains", "'+ api.data.$term +'"]];
|
|
4506
4513
|
}else if(selfData.op === 'loadOptions' && selfData.value){
|
|
4507
4514
|
if(selfData.value?.indexOf(',') > 0){
|
|
4508
|
-
|
|
4515
|
+
fieldValue = selfData.value.split(',');
|
|
4516
|
+
filters = [["${referenceTo.valueField.name}", "=", fieldValue]];
|
|
4509
4517
|
}else{
|
|
4510
|
-
|
|
4518
|
+
fieldValue = selfData.value;
|
|
4519
|
+
filters = [["${referenceTo.valueField.name}", "=", fieldValue]];
|
|
4511
4520
|
}
|
|
4512
4521
|
}
|
|
4513
4522
|
|
|
@@ -4561,6 +4570,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
|
|
|
4561
4570
|
if(enable_tree){
|
|
4562
4571
|
pageSize = 10000;
|
|
4563
4572
|
}
|
|
4573
|
+
if(fieldValue && _.isArray(fieldValue) && fieldValue.length > pageSize){
|
|
4574
|
+
pageSize = fieldValue.length;
|
|
4575
|
+
}
|
|
4564
4576
|
api.data.query = api.data.query.replace(/{__filters}/g, JSON.stringify(filters)).replace('{__top}', pageSize).replace('{__skip}', skip).replace('{__sort}', sort.trim());
|
|
4565
4577
|
return api;
|
|
4566
4578
|
`;
|
|
@@ -4661,13 +4673,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
|
|
|
4661
4673
|
//TODO: 等待放大镜bug修复,if会去掉,始终显示放大镜
|
|
4662
4674
|
if(referenceTo.objectName != "space_users" || field.reference_to_field != "user"){
|
|
4663
4675
|
if (ctx.filterVisible !== false) {
|
|
4664
|
-
let filterLoopCount = ctx.filterLoopCount || 0;
|
|
4665
|
-
filterLoopCount++;
|
|
4666
|
-
// 可以传入filterVisible为false防止死循环
|
|
4667
4676
|
pickerSchema.filter = await getObjectFilter(refObjectConfig, fields, {
|
|
4668
4677
|
isLookup: true,
|
|
4669
|
-
...ctx
|
|
4670
|
-
filterLoopCount,
|
|
4678
|
+
...ctx
|
|
4671
4679
|
});
|
|
4672
4680
|
}
|
|
4673
4681
|
}
|
|
@@ -5646,7 +5654,7 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
|
|
|
5646
5654
|
columnsTogglable: false,
|
|
5647
5655
|
strictMode:false,
|
|
5648
5656
|
affixHeader: false, // 是否固定表头, 不固定表头, 否则form有y轴滚动条时, 表头会跟随滚动条滚动.
|
|
5649
|
-
|
|
5657
|
+
needConfirm: false,
|
|
5650
5658
|
editable: !readonly,
|
|
5651
5659
|
addable: !readonly,
|
|
5652
5660
|
removable: !readonly,
|
|
@@ -5725,6 +5733,14 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
|
|
|
5725
5733
|
convertData.visibleOn = `${field.visible_on.replace(/formData./g, 'data.')}`;
|
|
5726
5734
|
}
|
|
5727
5735
|
}
|
|
5736
|
+
|
|
5737
|
+
if(_$1.isString(baseData.required)){
|
|
5738
|
+
if(baseData.required.startsWith("{{")){
|
|
5739
|
+
baseData.requiredOn = `${baseData.required.substring(2, baseData.required.length -2).replace(/formData./g, 'data.')}`;
|
|
5740
|
+
delete baseData.required;
|
|
5741
|
+
}
|
|
5742
|
+
}
|
|
5743
|
+
|
|
5728
5744
|
if(convertData.type === 'group'){
|
|
5729
5745
|
convertData.body[0] = Object.assign({}, baseData, convertData.body[0], { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name});
|
|
5730
5746
|
return convertData
|
|
@@ -5739,8 +5755,9 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
|
|
|
5739
5755
|
}
|
|
5740
5756
|
|
|
5741
5757
|
async function getFieldSearchable(perField, permissionFields, ctx){
|
|
5742
|
-
|
|
5743
|
-
|
|
5758
|
+
if(!ctx){
|
|
5759
|
+
ctx = {};
|
|
5760
|
+
}
|
|
5744
5761
|
let field = perField;
|
|
5745
5762
|
if(field.type === 'grid'){
|
|
5746
5763
|
field = await getGridFieldSubFields(perField, permissionFields);
|
|
@@ -5801,14 +5818,17 @@ async function getFieldSearchable(perField, permissionFields, ctx){
|
|
|
5801
5818
|
_field.multiple = true;
|
|
5802
5819
|
_field.is_wide = false;
|
|
5803
5820
|
_field.defaultValue = undefined;
|
|
5804
|
-
|
|
5805
|
-
const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true, filterVisible: filterLoopCount < maxFilterLoopCount}));
|
|
5821
|
+
const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true}));
|
|
5806
5822
|
if(amisField){
|
|
5807
5823
|
return amisField;
|
|
5808
5824
|
}
|
|
5809
5825
|
}
|
|
5810
5826
|
}
|
|
5811
5827
|
|
|
5828
|
+
if(typeof window != 'undefined'){
|
|
5829
|
+
window.getFieldSearchable = getFieldSearchable;
|
|
5830
|
+
}
|
|
5831
|
+
|
|
5812
5832
|
var index = /*#__PURE__*/Object.freeze({
|
|
5813
5833
|
__proto__: null,
|
|
5814
5834
|
OMIT_FIELDS: OMIT_FIELDS,
|
|
@@ -5988,12 +6008,12 @@ function getScriptForRewriteValueForFileFields(fields){
|
|
|
5988
6008
|
});
|
|
5989
6009
|
}
|
|
5990
6010
|
}else{
|
|
5991
|
-
data[item] = {
|
|
6011
|
+
data[item] = [{
|
|
5992
6012
|
value: fileFieldValue,
|
|
5993
6013
|
name: fileFieldDisplayValue.name,
|
|
5994
6014
|
url: fileFieldDisplayValue.url + "?download=true",
|
|
5995
6015
|
state: "uploaded"
|
|
5996
|
-
};
|
|
6016
|
+
}];
|
|
5997
6017
|
}
|
|
5998
6018
|
}
|
|
5999
6019
|
})
|
|
@@ -6069,12 +6089,12 @@ async function getEditFormInitApi(object, recordId, fields, options){
|
|
|
6069
6089
|
if(uiSchema.form){
|
|
6070
6090
|
try{
|
|
6071
6091
|
var objectFormConfig = JSON.parse(uiSchema.form);
|
|
6072
|
-
|
|
6073
|
-
if(
|
|
6074
|
-
|
|
6092
|
+
var formInitialValuesFun = objectFormConfig.initialValues;
|
|
6093
|
+
if(formInitialValuesFun){
|
|
6094
|
+
formInitialValuesFun = new Function("return " + formInitialValuesFun)();
|
|
6075
6095
|
}
|
|
6076
|
-
if(typeof
|
|
6077
|
-
initialValues =
|
|
6096
|
+
if(typeof formInitialValuesFun === "function"){
|
|
6097
|
+
initialValues = formInitialValuesFun.apply({doc: defaultValues || {} , global: api.body.global})
|
|
6078
6098
|
}
|
|
6079
6099
|
}
|
|
6080
6100
|
catch(ex){
|
|
@@ -6091,12 +6111,15 @@ async function getEditFormInitApi(object, recordId, fields, options){
|
|
|
6091
6111
|
}
|
|
6092
6112
|
// data下的变量需要在保存接口(getSaveApi)中被删除。
|
|
6093
6113
|
payload.data = {
|
|
6094
|
-
initialValues
|
|
6095
|
-
editFormInited: true
|
|
6114
|
+
...initialValues
|
|
6096
6115
|
}
|
|
6097
6116
|
${options.initApiAdaptor || ''}
|
|
6098
6117
|
return payload;
|
|
6099
6118
|
`,
|
|
6119
|
+
responseData: {
|
|
6120
|
+
initialValues: "$$",
|
|
6121
|
+
editFormInited: true
|
|
6122
|
+
},
|
|
6100
6123
|
data: data,
|
|
6101
6124
|
headers: {
|
|
6102
6125
|
Authorization: "Bearer ${context.tenantId},${context.authToken}"
|
|
@@ -6503,6 +6526,8 @@ async function getObjectForm(objectSchema, ctx){
|
|
|
6503
6526
|
},
|
|
6504
6527
|
labelAlign,
|
|
6505
6528
|
persistData: false,
|
|
6529
|
+
resetAfterSubmit: true,
|
|
6530
|
+
preventEnterSubmit: true,
|
|
6506
6531
|
promptPageLeave: true,
|
|
6507
6532
|
canAccessSuperData: false,
|
|
6508
6533
|
name: `form_edit_${recordId}`,
|
|
@@ -6540,10 +6565,14 @@ async function getObjectForm(objectSchema, ctx){
|
|
|
6540
6565
|
},
|
|
6541
6566
|
"expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
|
|
6542
6567
|
},
|
|
6543
|
-
{
|
|
6544
|
-
|
|
6545
|
-
|
|
6546
|
-
}
|
|
6568
|
+
// {
|
|
6569
|
+
// "actionType": "custom",
|
|
6570
|
+
// "script": "debugger;"
|
|
6571
|
+
// },
|
|
6572
|
+
// {
|
|
6573
|
+
// "args": {},
|
|
6574
|
+
// "actionType": "closeDialog"
|
|
6575
|
+
// }
|
|
6547
6576
|
]
|
|
6548
6577
|
}
|
|
6549
6578
|
}
|
|
@@ -6711,6 +6740,13 @@ async function getTableColumns(fields, options){
|
|
|
6711
6740
|
}else if(field.type === 'html'){
|
|
6712
6741
|
type = 'markdown';
|
|
6713
6742
|
}
|
|
6743
|
+
let className = "";
|
|
6744
|
+
if(field.type === 'textarea'){
|
|
6745
|
+
className = 'min-w-56';
|
|
6746
|
+
}
|
|
6747
|
+
if(field.wrap === false){
|
|
6748
|
+
className += " whitespace-nowrap";
|
|
6749
|
+
}
|
|
6714
6750
|
if(!field.hidden && !field.extra){
|
|
6715
6751
|
columns.push(Object.assign({}, {
|
|
6716
6752
|
name: field.name,
|
|
@@ -6721,7 +6757,7 @@ async function getTableColumns(fields, options){
|
|
|
6721
6757
|
type: type,
|
|
6722
6758
|
tpl: tpl,
|
|
6723
6759
|
toggled: field.toggled,
|
|
6724
|
-
className
|
|
6760
|
+
className,
|
|
6725
6761
|
html: field.type === 'html' ? true : null
|
|
6726
6762
|
// toggled: true
|
|
6727
6763
|
}, field.amis, {name: field.name}));
|
|
@@ -7061,13 +7097,17 @@ async function getTableApi(mainObject, fields, options){
|
|
|
7061
7097
|
}
|
|
7062
7098
|
|
|
7063
7099
|
api.data.$term = "$term";
|
|
7100
|
+
api.data.term = "$term";
|
|
7064
7101
|
api.data.$self = "$$";
|
|
7102
|
+
api.data.self = "$$";
|
|
7065
7103
|
api.data.filter = "$filter";
|
|
7066
7104
|
api.data.loaded = "${loaded}";
|
|
7067
7105
|
api.data.listViewId = "${listViewId}";
|
|
7068
7106
|
api.requestAdaptor = `
|
|
7069
7107
|
// selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
|
|
7070
7108
|
let selfData = JSON.parse(JSON.stringify(api.data.$self));
|
|
7109
|
+
// 保留一份初始data,以供自定义发送适配器中获取原始数据。
|
|
7110
|
+
const data = _.cloneDeep(api.data);
|
|
7071
7111
|
try{
|
|
7072
7112
|
// TODO: 不应该直接在这里取localStorage,应该从外面传入
|
|
7073
7113
|
const listViewId = api.data.listViewId;
|
|
@@ -7213,7 +7253,6 @@ async function getTableApi(mainObject, fields, options){
|
|
|
7213
7253
|
if(_.isEmpty(filters)){
|
|
7214
7254
|
filters = userFilters;
|
|
7215
7255
|
}else{
|
|
7216
|
-
filters.push('and');
|
|
7217
7256
|
filters.push(userFilters)
|
|
7218
7257
|
}
|
|
7219
7258
|
}
|
|
@@ -7251,29 +7290,9 @@ async function getTableApi(mainObject, fields, options){
|
|
|
7251
7290
|
})
|
|
7252
7291
|
|
|
7253
7292
|
if(enable_tree){
|
|
7254
|
-
const records = payload.data.rows;
|
|
7255
|
-
const
|
|
7256
|
-
|
|
7257
|
-
if(!childrenIds){
|
|
7258
|
-
return;
|
|
7259
|
-
}
|
|
7260
|
-
const children = _.filter(records, (record)=>{
|
|
7261
|
-
return _.includes(childrenIds, record._id)
|
|
7262
|
-
});
|
|
7263
|
-
_.each(children, (item)=>{
|
|
7264
|
-
if(item.children){
|
|
7265
|
-
item.children = getChildren(records, item.children)
|
|
7266
|
-
}
|
|
7267
|
-
})
|
|
7268
|
-
return children;
|
|
7269
|
-
}
|
|
7270
|
-
|
|
7271
|
-
_.each(records, (record)=>{
|
|
7272
|
-
if(!record.parent){
|
|
7273
|
-
treeRecords.push(Object.assign({}, record, {children: getChildren(records, record.children)}));
|
|
7274
|
-
}
|
|
7275
|
-
});
|
|
7276
|
-
payload.data.rows = treeRecords;
|
|
7293
|
+
const records = payload.data.rows || [];
|
|
7294
|
+
const getTreeOptions = SteedosUI.getTreeOptions
|
|
7295
|
+
payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
|
|
7277
7296
|
}
|
|
7278
7297
|
|
|
7279
7298
|
|
|
@@ -7661,7 +7680,6 @@ async function getObjectCalendar(objectSchema, calendarOptions, options) {
|
|
|
7661
7680
|
// ObjectForm会认作用域下的变量值
|
|
7662
7681
|
// TODO: 待组件支持initValues属性后应该改掉,不应该通过data直接传值
|
|
7663
7682
|
// TODO: 全天事件属性传入doc了但是没有生效,需要手动在ObjectForm中勾选全天事件
|
|
7664
|
-
event.data = doc;
|
|
7665
7683
|
const title = "新建 ${objectSchema.label}";
|
|
7666
7684
|
doAction(
|
|
7667
7685
|
{
|
|
@@ -7674,6 +7692,7 @@ async function getObjectCalendar(objectSchema, calendarOptions, options) {
|
|
|
7674
7692
|
"type": "steedos-object-form",
|
|
7675
7693
|
"objectApiName": "\${objectName}",
|
|
7676
7694
|
"mode": "edit",
|
|
7695
|
+
"defaultData": doc,
|
|
7677
7696
|
"onEvent": {
|
|
7678
7697
|
"submitSucc": {
|
|
7679
7698
|
"weight": 0,
|
|
@@ -7966,7 +7985,7 @@ const getRecordPermissions = async (objectName, recordId)=>{
|
|
|
7966
7985
|
* @Author: baozhoutao@steedos.com
|
|
7967
7986
|
* @Date: 2022-07-05 15:55:39
|
|
7968
7987
|
* @LastEditors: Please set LastEditors
|
|
7969
|
-
* @LastEditTime: 2023-04-11
|
|
7988
|
+
* @LastEditTime: 2023-04-20 11:43:14
|
|
7970
7989
|
* @Description:
|
|
7971
7990
|
*/
|
|
7972
7991
|
|
|
@@ -8063,10 +8082,12 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
|
|
|
8063
8082
|
mainRelated[arr[0]] = arr[1];
|
|
8064
8083
|
}
|
|
8065
8084
|
}else {
|
|
8066
|
-
const details = mainObjectUiSchema.details || [];
|
|
8085
|
+
const details = union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
|
|
8067
8086
|
for (const detail of details) {
|
|
8068
8087
|
const arr = detail.split(".");
|
|
8069
|
-
mainRelated
|
|
8088
|
+
if(!has(mainRelated,arr[0])){
|
|
8089
|
+
mainRelated[arr[0]] = arr[1];
|
|
8090
|
+
}
|
|
8070
8091
|
}
|
|
8071
8092
|
}
|
|
8072
8093
|
}
|
|
@@ -8271,13 +8292,17 @@ async function getRelatedListSchema(
|
|
|
8271
8292
|
delete ctx.globalFilter;
|
|
8272
8293
|
|
|
8273
8294
|
const adaptor = `
|
|
8274
|
-
|
|
8275
|
-
if(
|
|
8276
|
-
|
|
8277
|
-
|
|
8278
|
-
|
|
8279
|
-
|
|
8280
|
-
|
|
8295
|
+
try{
|
|
8296
|
+
if(setDataToComponentId){
|
|
8297
|
+
if(payload.data.count){
|
|
8298
|
+
setTimeout(function(){
|
|
8299
|
+
window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
|
|
8300
|
+
}, 10);
|
|
8301
|
+
}
|
|
8302
|
+
};
|
|
8303
|
+
}catch(e){
|
|
8304
|
+
console.log(e);
|
|
8305
|
+
}
|
|
8281
8306
|
`;
|
|
8282
8307
|
const amisSchema = {
|
|
8283
8308
|
"type": "steedos-object-table",
|
|
@@ -8288,7 +8313,8 @@ async function getRelatedListSchema(
|
|
|
8288
8313
|
"filtersFunction": filtersFunction,
|
|
8289
8314
|
"sort": listViewSort,
|
|
8290
8315
|
"filterVisible": false,
|
|
8291
|
-
|
|
8316
|
+
"requestAdaptor": ctx.requestAdaptor,
|
|
8317
|
+
"adaptor": adaptor + ctx.adaptor || '',
|
|
8292
8318
|
"ctx": ctx
|
|
8293
8319
|
};
|
|
8294
8320
|
// console.log(`getRelatedListSchema amisSchema`, amisSchema);
|