@steedos-widgets/amis-lib 1.2.3 → 1.2.6-beta.9

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/index.cjs.js CHANGED
@@ -361,7 +361,7 @@ const getSteedosAuth = () => {
361
361
  * @Author: baozhoutao@steedos.com
362
362
  * @Date: 2022-08-16 17:02:08
363
363
  * @LastEditors: baozhoutao@steedos.com
364
- * @LastEditTime: 2023-04-17 15:24:21
364
+ * @LastEditTime: 2023-04-19 15:25:50
365
365
  * @Description:
366
366
  */
367
367
 
@@ -373,7 +373,7 @@ const Router = {
373
373
  return urlSearch.get('display')
374
374
  }
375
375
  // const key = `tab.${tab_id}.display`;
376
- const key = `page.display`;
376
+ const key = `page_display`;
377
377
  const value = localStorage.getItem(key);
378
378
  return value ? value : 'grid'
379
379
  },
@@ -1395,8 +1395,8 @@ var config = {
1395
1395
  /*
1396
1396
  * @Author: baozhoutao@steedos.com
1397
1397
  * @Date: 2022-11-01 15:51:00
1398
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
1399
- * @LastEditTime: 2023-04-16 17:04:16
1398
+ * @LastEditors: baozhoutao@steedos.com
1399
+ * @LastEditTime: 2023-04-19 20:26:27
1400
1400
  * @Description:
1401
1401
  */
1402
1402
 
@@ -1506,7 +1506,27 @@ const getSchema$4 = async (uiSchema, ctx) => {
1506
1506
  "id": "u:e11347411d2d",
1507
1507
  "closeOnEsc": false,
1508
1508
  "closeOnOutside": false,
1509
- "size": "lg"
1509
+ "size": "lg",
1510
+ "actions": [
1511
+ {
1512
+ type: 'button',
1513
+ actionType: 'cancel',
1514
+ label: "取消"
1515
+ },
1516
+ {
1517
+ type: 'button',
1518
+ label: "保存并新建",
1519
+ actionType: 'confirm',
1520
+ close: false,
1521
+ id: "confirmAndNew"
1522
+ },
1523
+ {
1524
+ type: 'button',
1525
+ actionType: 'confirm',
1526
+ label: "保存",
1527
+ primary: true
1528
+ },
1529
+ ]
1510
1530
  }
1511
1531
  }
1512
1532
  ]
@@ -2408,96 +2428,97 @@ async function getObjectFieldsFilterButtonSchema(objectSchema) {
2408
2428
  }
2409
2429
  }
2410
2430
 
2411
- async function getObjectFieldsFilterFormSchema(objectSchema, fields, ctx) {
2412
- if(!ctx){
2431
+ async function getObjectFieldsFilterFormSchema(ctx) {
2432
+
2433
+ if (!ctx) {
2413
2434
  ctx = {};
2414
2435
  }
2415
- const body = [];
2416
- for (let field of fields) {
2417
- if (
2418
- !_$1.includes(
2419
- [
2420
- "grid",
2421
- "avatar",
2422
- "image",
2423
- "object",
2424
- "[object]",
2425
- "[Object]",
2426
- "[grid]",
2427
- "[text]",
2428
- "audio",
2429
- "file",
2430
- ],
2431
- field.type
2432
- )
2433
- ) {
2434
- delete field.defaultValue;
2435
- delete field.required;
2436
- delete field.is_wide;
2437
- delete field.readonly;
2438
- delete field.hidden;
2439
- delete field.omit;
2440
- const amisField = await getFieldSearchable(field, fields, ctx);
2441
- if (amisField) {
2442
- body.push(amisField);
2436
+ const formSchema = {
2437
+ "type": "service",
2438
+ "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
2439
+ "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",
2440
+ "schemaApi": {
2441
+ method: 'post',
2442
+ url: `\${context.rootUrl}/graphql?reload=\${filterFormSearchableFields|join}`,
2443
+ data: {
2444
+ $self: "$$",
2445
+ query: "{\n data: objects(filters: [[\"_id\",\"=\",null]],top: 1, skip: 0){_id}\n }"
2446
+ },
2447
+ requestAdaptor: `
2448
+ return {
2449
+ ...api,
2450
+ data: {
2451
+ query: api.data.query
2452
+ }
2453
+ };
2454
+ `,
2455
+ adaptor: `
2456
+ if(payload.errors){
2457
+ payload.status = 2;
2458
+ payload.msg = window.t ? window.t(payload.errors[0].message) : payload.errors[0].message;
2459
+ }
2460
+ const selfData = api.body.$self;
2461
+ const filterFormSearchableFields = selfData.filterFormSearchableFields;
2462
+ const uiSchema = selfData.uiSchema;
2463
+ const fields = uiSchema.fields;
2464
+ const searchableFields = [];
2465
+
2466
+ const resolveAll = function(values){
2467
+ payload.data = {
2468
+ "body": values
2469
+ };
2470
+ return payload;
2471
+ }
2472
+
2473
+ const rejectAll = function(){
2474
+ console.warn("run function getFieldSearchable failed.");
2475
+ }
2476
+
2477
+ return Promise.all(filterFormSearchableFields.map(function (item) {
2478
+ const field = _.clone(fields[item]);
2479
+ if (
2480
+ !_.includes(
2481
+ [
2482
+ "grid",
2483
+ "avatar",
2484
+ "image",
2485
+ "object",
2486
+ "[object]",
2487
+ "[Object]",
2488
+ "[grid]",
2489
+ "[text]",
2490
+ "audio",
2491
+ "file",
2492
+ ],
2493
+ field.type
2494
+ )
2495
+ ) {
2496
+ delete field.defaultValue;
2497
+ delete field.required;
2498
+ delete field.is_wide;
2499
+ delete field.readonly;
2500
+ delete field.hidden;
2501
+ delete field.omit;
2502
+ var ctx = ${JSON.stringify(ctx)};
2503
+ const amisField = window.getFieldSearchable(field, fields, ctx);
2504
+ return amisField;
2505
+ }
2506
+ })).then(resolveAll, rejectAll);
2507
+ `,
2508
+ headers: {
2509
+ Authorization: "Bearer ${context.tenantId},${context.authToken}"
2443
2510
  }
2444
2511
  }
2445
- }
2446
- _$1.map(body, "name");
2447
- if(ctx.enableSearchableFieldsVisibleOn){
2448
- body.forEach(function(fieldItem){
2449
- fieldItem.visibleOn = `this.filterFormSearchableFields && this.filterFormSearchableFields.indexOf("${fieldItem.fieldName}") > -1`;
2450
- // fieldItem.clearValueOnHidden = true;//这个属性会把form字段值删除,但是点击搜索时crud还是把值给传递到过滤条件(api.requestAdaptor的data.$self)中了,应该是crud的bug
2451
- });
2452
- }
2453
-
2454
- // const onBroadcastSearchableFieldsChangeScript = `
2455
- // const data = event.data;
2456
- // const listViewId = data.listViewId;
2457
- // const searchableFields = data.fields;
2458
- // const preSearchableFields = data.__super.__super.fields;
2459
- // const removedFields = _.difference(preSearchableFields, searchableFields);
2460
- // const listViewPropsStoreKey = location.pathname + "/crud/" + listViewId ;
2461
- // let localListViewProps = localStorage.getItem(listViewPropsStoreKey);
2462
- // if(localListViewProps){
2463
- // // 当变更可搜索字段时,如果被移除的可搜索字段在本地存储中已经存入过滤条件中则应该清除本地存储中相关字段的过滤条件。
2464
- // localListViewProps = JSON.parse(localListViewProps);
2465
- // let removedKeys = [];
2466
- // _.each(localListViewProps, function(n,k){
2467
- // // __searchable__开头的不在searchableFields范围则清除其值
2468
- // let isRemoved = !!removedFields.find(function(fieldName){
2469
- // return new RegExp("__searchable__\.*" + fieldName + "$").test(k);
2470
- // });
2471
- // if(isRemoved){
2472
- // removedKeys.push(k);
2473
- // }
2474
- // });
2475
- // const removedValues = {};
2476
- // removedKeys.forEach(function(key){
2477
- // delete localListViewProps[key];
2478
- // removedValues[key] = "";
2479
- // });
2480
- // doAction({
2481
- // actionType: 'setValue',
2482
- // args: {
2483
- // value: removedValues
2484
- // }
2485
- // });
2486
- // localStorage.setItem(listViewPropsStoreKey, JSON.stringify(localListViewProps));
2487
- // }
2488
- // `;
2512
+ };
2489
2513
 
2490
- return body;
2514
+ return formSchema;
2491
2515
  }
2492
2516
 
2493
- async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
2494
- // console.log(ctx)
2495
- if(!ctx){
2517
+ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
2518
+ if (!ctx) {
2496
2519
  ctx = {};
2497
2520
  }
2498
- const filterFormSchema = await getObjectFieldsFilterFormSchema(objectSchema, fields, Object.assign({}, {
2499
- enableSearchableFieldsVisibleOn: true
2500
- }, ctx));
2521
+ const filterFormSchema = await getObjectFieldsFilterFormSchema(ctx);
2501
2522
  const onSearchScript = `
2502
2523
  const scope = event.context.scoped;
2503
2524
  var filterForm = scope.parent.parent.getComponents().find(function(n){
@@ -2530,18 +2551,21 @@ async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
2530
2551
  searchableFieldsStoreKey += listViewId;
2531
2552
  }
2532
2553
  let defaultSearchableFields = sessionStorage.getItem(searchableFieldsStoreKey);
2533
- if(!defaultSearchableFields && data.uiSchema){
2554
+ if(defaultSearchableFields){
2555
+ defaultSearchableFields = defaultSearchableFields.split(",");
2556
+ }
2557
+ if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
2534
2558
  let listView = data.uiSchema.list_views[data.listName];
2535
- defaultSearchableFields = listView && listView.searchable_fields;
2536
- if(defaultSearchableFields && defaultSearchableFields.length){
2537
- defaultSearchableFields = _.map(defaultSearchableFields, 'field');
2559
+ const sFields = listView && listView.searchable_fields;
2560
+ if(sFields && sFields.length){
2561
+ defaultSearchableFields = _.map(sFields, 'field');
2538
2562
  }
2539
2563
  }
2540
2564
  if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
2541
2565
  defaultSearchableFields = _.map(
2542
- _.filter(_.values(data.uiSchema.fields), (field) => {
2566
+ _.sortBy(_.filter(_.values(data.uiSchema.fields), (field) => {
2543
2567
  return field.searchable;
2544
- }),
2568
+ }), "sort_no"),
2545
2569
  "name"
2546
2570
  );
2547
2571
  }
@@ -2679,7 +2703,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
2679
2703
  // "filterFormValues": {"__searchable__name": "xxx"},//搜索项表单值
2680
2704
  // "listViewId": "${listViewId}"
2681
2705
  },
2682
- "id": `service_listview_filter_form_${objectSchema.name}`,
2706
+ // "id": `service_listview_filter_form_${objectSchema.name}`,
2683
2707
  "dataProvider": {
2684
2708
  "inited": dataProviderInited
2685
2709
  },
@@ -2687,15 +2711,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
2687
2711
  "type": "wrapper",
2688
2712
  "body": {
2689
2713
  "type": "wrapper",
2690
- "body": [{
2691
- "type": "wrapper",
2692
- "body": [
2693
- filterFormSchema
2694
- ],
2695
- "size": "xs",
2696
- "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
2697
- "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"
2698
- }, {
2714
+ "body": [filterFormSchema, {
2699
2715
  "type": "wrapper",
2700
2716
  "body": {
2701
2717
  "type": "wrapper",
@@ -3054,16 +3070,7 @@ async function getObjectListHeaderSecordLine(objectSchema, listViewName, ctx) {
3054
3070
  * @returns amisSchema
3055
3071
  */
3056
3072
  async function getObjectListHeaderFieldsFilterBar(objectSchema, listViewName, ctx) {
3057
- const searchableFields = _$1.keys(objectSchema.fields);
3058
- const fields = _$1.sortBy(
3059
- _$1.compact(
3060
- _$1.map(searchableFields, (fieldName) => {
3061
- return objectSchema.fields[fieldName];
3062
- })
3063
- ),
3064
- "sort_no"
3065
- );
3066
- const fieldsFilterBarSchema = await getObjectFieldsFilterBarSchema(objectSchema, fields, ctx);
3073
+ const fieldsFilterBarSchema = await getObjectFieldsFilterBarSchema(objectSchema, ctx);
3067
3074
  return fieldsFilterBarSchema;
3068
3075
  }
3069
3076
 
@@ -3842,12 +3849,11 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
3842
3849
  "objectApiName": "object_listviews",
3843
3850
  "recordId": "${recordId}",
3844
3851
  "mode": "edit",
3845
- "initApiAdaptor": "",
3846
3852
  "fields": [
3847
3853
  "filters"
3848
3854
  ],
3849
3855
  "initApiRequestAdaptor": "",
3850
- "initApiAdaptor": "const recordId_tmp = api.body.recordId;\nlet data_tmp;\nif (recordId_tmp) {\n data_tmp = payload.data.initialValues;\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.initialValues = Object.assign(payload.data.initialValues, data_tmp);\ndelete payload.extensions;",
3856
+ "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;",
3851
3857
  "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",
3852
3858
  "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}",
3853
3859
  "onEvent": {
@@ -3907,7 +3913,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
3907
3913
  "recordId": "${recordId}",
3908
3914
  "mode": "edit",
3909
3915
  "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}",
3910
- "initApiAdaptor": "const recordId_tmp = api.body.recordId;\nlet columns_tmp = {}, mobile_columns_tmp = {};\nif (recordId_tmp) {\n columns_tmp = payload.data.initialValues.columns;\n mobile_columns_tmp = payload.data.initialValues.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.initialValues.columns = columns_tmp;\npayload.data.initialValues.mobile_columns = mobile_columns_tmp;\n\ndelete payload.extensions;\nreturn payload;",
3916
+ "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;",
3911
3917
  "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;",
3912
3918
  "fields": [
3913
3919
  "columns",
@@ -3989,7 +3995,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
3989
3995
  }
3990
3996
  },
3991
3997
  "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}",
3992
- "initApiAdaptor": "let sort;\nif (recordId) {\n sort = payload.data.initialValues.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.initialValues.sort = sort;\ndelete payload.extensions;",
3998
+ "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;",
3993
3999
  "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"
3994
4000
  }
3995
4001
  ],
@@ -4688,13 +4694,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
4688
4694
  //TODO: 等待放大镜bug修复,if会去掉,始终显示放大镜
4689
4695
  if(referenceTo.objectName != "space_users" || field.reference_to_field != "user"){
4690
4696
  if (ctx.filterVisible !== false) {
4691
- let filterLoopCount = ctx.filterLoopCount || 0;
4692
- filterLoopCount++;
4693
- // 可以传入filterVisible为false防止死循环
4694
4697
  pickerSchema.filter = await getObjectFilter(refObjectConfig, fields, {
4695
4698
  isLookup: true,
4696
- ...ctx,
4697
- filterLoopCount,
4699
+ ...ctx
4698
4700
  });
4699
4701
  }
4700
4702
  }
@@ -5752,6 +5754,14 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5752
5754
  convertData.visibleOn = `${field.visible_on.replace(/formData./g, 'data.')}`;
5753
5755
  }
5754
5756
  }
5757
+
5758
+ if(___namespace.isString(baseData.required)){
5759
+ if(baseData.required.startsWith("{{")){
5760
+ baseData.requiredOn = `${baseData.required.substring(2, baseData.required.length -2).replace(/formData./g, 'data.')}`;
5761
+ delete baseData.required;
5762
+ }
5763
+ }
5764
+
5755
5765
  if(convertData.type === 'group'){
5756
5766
  convertData.body[0] = Object.assign({}, baseData, convertData.body[0], { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name});
5757
5767
  return convertData
@@ -5766,8 +5776,9 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5766
5776
  }
5767
5777
 
5768
5778
  async function getFieldSearchable(perField, permissionFields, ctx){
5769
- const filterLoopCount = ctx.filterLoopCount || 0;
5770
- const maxFilterLoopCount = 5;
5779
+ if(!ctx){
5780
+ ctx = {};
5781
+ }
5771
5782
  let field = perField;
5772
5783
  if(field.type === 'grid'){
5773
5784
  field = await getGridFieldSubFields(perField, permissionFields);
@@ -5828,14 +5839,17 @@ async function getFieldSearchable(perField, permissionFields, ctx){
5828
5839
  _field.multiple = true;
5829
5840
  _field.is_wide = false;
5830
5841
  _field.defaultValue = undefined;
5831
- // filterVisible: false不再生成lookup字段时的filter,否则会死循环
5832
- const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true, filterVisible: filterLoopCount < maxFilterLoopCount}));
5842
+ const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true}));
5833
5843
  if(amisField){
5834
5844
  return amisField;
5835
5845
  }
5836
5846
  }
5837
5847
  }
5838
5848
 
5849
+ if(typeof window != 'undefined'){
5850
+ window.getFieldSearchable = getFieldSearchable;
5851
+ }
5852
+
5839
5853
  var index = /*#__PURE__*/Object.freeze({
5840
5854
  __proto__: null,
5841
5855
  OMIT_FIELDS: OMIT_FIELDS,
@@ -6096,12 +6110,12 @@ async function getEditFormInitApi(object, recordId, fields, options){
6096
6110
  if(uiSchema.form){
6097
6111
  try{
6098
6112
  var objectFormConfig = JSON.parse(uiSchema.form);
6099
- initialValues = objectFormConfig.initialValues;
6100
- if(initialValues){
6101
- initialValues = new Function("return " + initialValues)();
6113
+ var formInitialValuesFun = objectFormConfig.initialValues;
6114
+ if(formInitialValuesFun){
6115
+ formInitialValuesFun = new Function("return " + formInitialValuesFun)();
6102
6116
  }
6103
- if(typeof initialValues === "function"){
6104
- initialValues = initialValues.apply({doc: defaultValues || {} })
6117
+ if(typeof formInitialValuesFun === "function"){
6118
+ initialValues = formInitialValuesFun.apply({doc: defaultValues || {} , global: api.body.global})
6105
6119
  }
6106
6120
  }
6107
6121
  catch(ex){
@@ -6118,12 +6132,15 @@ async function getEditFormInitApi(object, recordId, fields, options){
6118
6132
  }
6119
6133
  // data下的变量需要在保存接口(getSaveApi)中被删除。
6120
6134
  payload.data = {
6121
- initialValues,
6122
- editFormInited: true
6135
+ ...initialValues
6123
6136
  }
6124
6137
  ${options.initApiAdaptor || ''}
6125
6138
  return payload;
6126
6139
  `,
6140
+ responseData: {
6141
+ initialValues: "$$",
6142
+ editFormInited: true
6143
+ },
6127
6144
  data: data,
6128
6145
  headers: {
6129
6146
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
@@ -6530,6 +6547,8 @@ async function getObjectForm(objectSchema, ctx){
6530
6547
  },
6531
6548
  labelAlign,
6532
6549
  persistData: false,
6550
+ resetAfterSubmit: true,
6551
+ preventEnterSubmit: true,
6533
6552
  promptPageLeave: true,
6534
6553
  canAccessSuperData: false,
6535
6554
  name: `form_edit_${recordId}`,
@@ -6567,10 +6586,14 @@ async function getObjectForm(objectSchema, ctx){
6567
6586
  },
6568
6587
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
6569
6588
  },
6570
- {
6571
- "args": {},
6572
- "actionType": "closeDialog"
6573
- }
6589
+ // {
6590
+ // "actionType": "custom",
6591
+ // "script": "debugger;"
6592
+ // },
6593
+ // {
6594
+ // "args": {},
6595
+ // "actionType": "closeDialog"
6596
+ // }
6574
6597
  ]
6575
6598
  }
6576
6599
  }
@@ -7088,13 +7111,17 @@ async function getTableApi(mainObject, fields, options){
7088
7111
  }
7089
7112
 
7090
7113
  api.data.$term = "$term";
7114
+ api.data.term = "$term";
7091
7115
  api.data.$self = "$$";
7116
+ api.data.self = "$$";
7092
7117
  api.data.filter = "$filter";
7093
7118
  api.data.loaded = "${loaded}";
7094
7119
  api.data.listViewId = "${listViewId}";
7095
7120
  api.requestAdaptor = `
7096
7121
  // selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
7097
7122
  let selfData = JSON.parse(JSON.stringify(api.data.$self));
7123
+ // 保留一份初始data,以供自定义发送适配器中获取原始数据。
7124
+ const data = _.cloneDeep(api.data);
7098
7125
  try{
7099
7126
  // TODO: 不应该直接在这里取localStorage,应该从外面传入
7100
7127
  const listViewId = api.data.listViewId;
@@ -7278,29 +7305,9 @@ async function getTableApi(mainObject, fields, options){
7278
7305
  })
7279
7306
 
7280
7307
  if(enable_tree){
7281
- const records = payload.data.rows;
7282
- const treeRecords = [];
7283
- const getChildren = (records, childrenIds)=>{
7284
- if(!childrenIds){
7285
- return;
7286
- }
7287
- const children = _.filter(records, (record)=>{
7288
- return _.includes(childrenIds, record._id)
7289
- });
7290
- _.each(children, (item)=>{
7291
- if(item.children){
7292
- item.children = getChildren(records, item.children)
7293
- }
7294
- })
7295
- return children;
7296
- }
7297
-
7298
- _.each(records, (record)=>{
7299
- if(!record.parent){
7300
- treeRecords.push(Object.assign({}, record, {children: getChildren(records, record.children)}));
7301
- }
7302
- });
7303
- payload.data.rows = treeRecords;
7308
+ const records = payload.data.rows || [];
7309
+ const getTreeOptions = SteedosUI.getTreeOptions
7310
+ payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
7304
7311
  }
7305
7312
 
7306
7313
 
@@ -7993,7 +8000,7 @@ const getRecordPermissions = async (objectName, recordId)=>{
7993
8000
  * @Author: baozhoutao@steedos.com
7994
8001
  * @Date: 2022-07-05 15:55:39
7995
8002
  * @LastEditors: Please set LastEditors
7996
- * @LastEditTime: 2023-04-11 13:13:00
8003
+ * @LastEditTime: 2023-04-20 11:43:14
7997
8004
  * @Description:
7998
8005
  */
7999
8006
 
@@ -8090,10 +8097,12 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
8090
8097
  mainRelated[arr[0]] = arr[1];
8091
8098
  }
8092
8099
  }else {
8093
- const details = mainObjectUiSchema.details || [];
8100
+ const details = _$1.union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
8094
8101
  for (const detail of details) {
8095
8102
  const arr = detail.split(".");
8096
- mainRelated[arr[0]] = arr[1];
8103
+ if(!_$1.has(mainRelated,arr[0])){
8104
+ mainRelated[arr[0]] = arr[1];
8105
+ }
8097
8106
  }
8098
8107
  }
8099
8108
  }
@@ -8298,13 +8307,17 @@ async function getRelatedListSchema(
8298
8307
  delete ctx.globalFilter;
8299
8308
 
8300
8309
  const adaptor = `
8301
- if(setDataToComponentId){
8302
- if(payload.data.count){
8303
- setTimeout(function(){
8304
- window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8305
- }, 10);
8306
- }
8307
- };
8310
+ try{
8311
+ if(setDataToComponentId){
8312
+ if(payload.data.count){
8313
+ setTimeout(function(){
8314
+ window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8315
+ }, 10);
8316
+ }
8317
+ };
8318
+ }catch(e){
8319
+ console.log(e);
8320
+ }
8308
8321
  `;
8309
8322
  const amisSchema = {
8310
8323
  "type": "steedos-object-table",
@@ -8315,7 +8328,8 @@ async function getRelatedListSchema(
8315
8328
  "filtersFunction": filtersFunction,
8316
8329
  "sort": listViewSort,
8317
8330
  "filterVisible": false,
8318
- adaptor,
8331
+ "requestAdaptor": ctx.requestAdaptor,
8332
+ "adaptor": adaptor + ctx.adaptor || '',
8319
8333
  "ctx": ctx
8320
8334
  };
8321
8335
  // console.log(`getRelatedListSchema amisSchema`, amisSchema);