@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/index.umd.js CHANGED
@@ -360,7 +360,7 @@
360
360
  * @Author: baozhoutao@steedos.com
361
361
  * @Date: 2022-08-16 17:02:08
362
362
  * @LastEditors: baozhoutao@steedos.com
363
- * @LastEditTime: 2023-04-17 15:24:21
363
+ * @LastEditTime: 2023-04-19 15:25:50
364
364
  * @Description:
365
365
  */
366
366
 
@@ -372,7 +372,7 @@
372
372
  return urlSearch.get('display')
373
373
  }
374
374
  // const key = `tab.${tab_id}.display`;
375
- const key = `page.display`;
375
+ const key = `page_display`;
376
376
  const value = localStorage.getItem(key);
377
377
  return value ? value : 'grid'
378
378
  },
@@ -1394,8 +1394,8 @@
1394
1394
  /*
1395
1395
  * @Author: baozhoutao@steedos.com
1396
1396
  * @Date: 2022-11-01 15:51:00
1397
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
1398
- * @LastEditTime: 2023-04-16 17:04:16
1397
+ * @LastEditors: baozhoutao@steedos.com
1398
+ * @LastEditTime: 2023-04-19 20:26:27
1399
1399
  * @Description:
1400
1400
  */
1401
1401
 
@@ -1505,7 +1505,27 @@
1505
1505
  "id": "u:e11347411d2d",
1506
1506
  "closeOnEsc": false,
1507
1507
  "closeOnOutside": false,
1508
- "size": "lg"
1508
+ "size": "lg",
1509
+ "actions": [
1510
+ {
1511
+ type: 'button',
1512
+ actionType: 'cancel',
1513
+ label: "取消"
1514
+ },
1515
+ {
1516
+ type: 'button',
1517
+ label: "保存并新建",
1518
+ actionType: 'confirm',
1519
+ close: false,
1520
+ id: "confirmAndNew"
1521
+ },
1522
+ {
1523
+ type: 'button',
1524
+ actionType: 'confirm',
1525
+ label: "保存",
1526
+ primary: true
1527
+ },
1528
+ ]
1509
1529
  }
1510
1530
  }
1511
1531
  ]
@@ -2407,96 +2427,97 @@
2407
2427
  }
2408
2428
  }
2409
2429
 
2410
- async function getObjectFieldsFilterFormSchema(objectSchema, fields, ctx) {
2411
- if(!ctx){
2430
+ async function getObjectFieldsFilterFormSchema(ctx) {
2431
+
2432
+ if (!ctx) {
2412
2433
  ctx = {};
2413
2434
  }
2414
- const body = [];
2415
- for (let field of fields) {
2416
- if (
2417
- !_$1.includes(
2418
- [
2419
- "grid",
2420
- "avatar",
2421
- "image",
2422
- "object",
2423
- "[object]",
2424
- "[Object]",
2425
- "[grid]",
2426
- "[text]",
2427
- "audio",
2428
- "file",
2429
- ],
2430
- field.type
2431
- )
2432
- ) {
2433
- delete field.defaultValue;
2434
- delete field.required;
2435
- delete field.is_wide;
2436
- delete field.readonly;
2437
- delete field.hidden;
2438
- delete field.omit;
2439
- const amisField = await getFieldSearchable(field, fields, ctx);
2440
- if (amisField) {
2441
- body.push(amisField);
2435
+ const formSchema = {
2436
+ "type": "service",
2437
+ "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
2438
+ "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",
2439
+ "schemaApi": {
2440
+ method: 'post',
2441
+ url: `\${context.rootUrl}/graphql?reload=\${filterFormSearchableFields|join}`,
2442
+ data: {
2443
+ $self: "$$",
2444
+ query: "{\n data: objects(filters: [[\"_id\",\"=\",null]],top: 1, skip: 0){_id}\n }"
2445
+ },
2446
+ requestAdaptor: `
2447
+ return {
2448
+ ...api,
2449
+ data: {
2450
+ query: api.data.query
2451
+ }
2452
+ };
2453
+ `,
2454
+ adaptor: `
2455
+ if(payload.errors){
2456
+ payload.status = 2;
2457
+ payload.msg = window.t ? window.t(payload.errors[0].message) : payload.errors[0].message;
2458
+ }
2459
+ const selfData = api.body.$self;
2460
+ const filterFormSearchableFields = selfData.filterFormSearchableFields;
2461
+ const uiSchema = selfData.uiSchema;
2462
+ const fields = uiSchema.fields;
2463
+ const searchableFields = [];
2464
+
2465
+ const resolveAll = function(values){
2466
+ payload.data = {
2467
+ "body": values
2468
+ };
2469
+ return payload;
2470
+ }
2471
+
2472
+ const rejectAll = function(){
2473
+ console.warn("run function getFieldSearchable failed.");
2474
+ }
2475
+
2476
+ return Promise.all(filterFormSearchableFields.map(function (item) {
2477
+ const field = _.clone(fields[item]);
2478
+ if (
2479
+ !_.includes(
2480
+ [
2481
+ "grid",
2482
+ "avatar",
2483
+ "image",
2484
+ "object",
2485
+ "[object]",
2486
+ "[Object]",
2487
+ "[grid]",
2488
+ "[text]",
2489
+ "audio",
2490
+ "file",
2491
+ ],
2492
+ field.type
2493
+ )
2494
+ ) {
2495
+ delete field.defaultValue;
2496
+ delete field.required;
2497
+ delete field.is_wide;
2498
+ delete field.readonly;
2499
+ delete field.hidden;
2500
+ delete field.omit;
2501
+ var ctx = ${JSON.stringify(ctx)};
2502
+ const amisField = window.getFieldSearchable(field, fields, ctx);
2503
+ return amisField;
2504
+ }
2505
+ })).then(resolveAll, rejectAll);
2506
+ `,
2507
+ headers: {
2508
+ Authorization: "Bearer ${context.tenantId},${context.authToken}"
2442
2509
  }
2443
2510
  }
2444
- }
2445
- _$1.map(body, "name");
2446
- if(ctx.enableSearchableFieldsVisibleOn){
2447
- body.forEach(function(fieldItem){
2448
- fieldItem.visibleOn = `this.filterFormSearchableFields && this.filterFormSearchableFields.indexOf("${fieldItem.fieldName}") > -1`;
2449
- // fieldItem.clearValueOnHidden = true;//这个属性会把form字段值删除,但是点击搜索时crud还是把值给传递到过滤条件(api.requestAdaptor的data.$self)中了,应该是crud的bug
2450
- });
2451
- }
2452
-
2453
- // const onBroadcastSearchableFieldsChangeScript = `
2454
- // const data = event.data;
2455
- // const listViewId = data.listViewId;
2456
- // const searchableFields = data.fields;
2457
- // const preSearchableFields = data.__super.__super.fields;
2458
- // const removedFields = _.difference(preSearchableFields, searchableFields);
2459
- // const listViewPropsStoreKey = location.pathname + "/crud/" + listViewId ;
2460
- // let localListViewProps = localStorage.getItem(listViewPropsStoreKey);
2461
- // if(localListViewProps){
2462
- // // 当变更可搜索字段时,如果被移除的可搜索字段在本地存储中已经存入过滤条件中则应该清除本地存储中相关字段的过滤条件。
2463
- // localListViewProps = JSON.parse(localListViewProps);
2464
- // let removedKeys = [];
2465
- // _.each(localListViewProps, function(n,k){
2466
- // // __searchable__开头的不在searchableFields范围则清除其值
2467
- // let isRemoved = !!removedFields.find(function(fieldName){
2468
- // return new RegExp("__searchable__\.*" + fieldName + "$").test(k);
2469
- // });
2470
- // if(isRemoved){
2471
- // removedKeys.push(k);
2472
- // }
2473
- // });
2474
- // const removedValues = {};
2475
- // removedKeys.forEach(function(key){
2476
- // delete localListViewProps[key];
2477
- // removedValues[key] = "";
2478
- // });
2479
- // doAction({
2480
- // actionType: 'setValue',
2481
- // args: {
2482
- // value: removedValues
2483
- // }
2484
- // });
2485
- // localStorage.setItem(listViewPropsStoreKey, JSON.stringify(localListViewProps));
2486
- // }
2487
- // `;
2511
+ };
2488
2512
 
2489
- return body;
2513
+ return formSchema;
2490
2514
  }
2491
2515
 
2492
- async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
2493
- // console.log(ctx)
2494
- if(!ctx){
2516
+ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
2517
+ if (!ctx) {
2495
2518
  ctx = {};
2496
2519
  }
2497
- const filterFormSchema = await getObjectFieldsFilterFormSchema(objectSchema, fields, Object.assign({}, {
2498
- enableSearchableFieldsVisibleOn: true
2499
- }, ctx));
2520
+ const filterFormSchema = await getObjectFieldsFilterFormSchema(ctx);
2500
2521
  const onSearchScript = `
2501
2522
  const scope = event.context.scoped;
2502
2523
  var filterForm = scope.parent.parent.getComponents().find(function(n){
@@ -2529,18 +2550,21 @@
2529
2550
  searchableFieldsStoreKey += listViewId;
2530
2551
  }
2531
2552
  let defaultSearchableFields = sessionStorage.getItem(searchableFieldsStoreKey);
2532
- if(!defaultSearchableFields && data.uiSchema){
2553
+ if(defaultSearchableFields){
2554
+ defaultSearchableFields = defaultSearchableFields.split(",");
2555
+ }
2556
+ if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
2533
2557
  let listView = data.uiSchema.list_views[data.listName];
2534
- defaultSearchableFields = listView && listView.searchable_fields;
2535
- if(defaultSearchableFields && defaultSearchableFields.length){
2536
- defaultSearchableFields = _.map(defaultSearchableFields, 'field');
2558
+ const sFields = listView && listView.searchable_fields;
2559
+ if(sFields && sFields.length){
2560
+ defaultSearchableFields = _.map(sFields, 'field');
2537
2561
  }
2538
2562
  }
2539
2563
  if(_.isEmpty(defaultSearchableFields) && data.uiSchema){
2540
2564
  defaultSearchableFields = _.map(
2541
- _.filter(_.values(data.uiSchema.fields), (field) => {
2565
+ _.sortBy(_.filter(_.values(data.uiSchema.fields), (field) => {
2542
2566
  return field.searchable;
2543
- }),
2567
+ }), "sort_no"),
2544
2568
  "name"
2545
2569
  );
2546
2570
  }
@@ -2678,7 +2702,7 @@
2678
2702
  // "filterFormValues": {"__searchable__name": "xxx"},//搜索项表单值
2679
2703
  // "listViewId": "${listViewId}"
2680
2704
  },
2681
- "id": `service_listview_filter_form_${objectSchema.name}`,
2705
+ // "id": `service_listview_filter_form_${objectSchema.name}`,
2682
2706
  "dataProvider": {
2683
2707
  "inited": dataProviderInited
2684
2708
  },
@@ -2686,15 +2710,7 @@
2686
2710
  "type": "wrapper",
2687
2711
  "body": {
2688
2712
  "type": "wrapper",
2689
- "body": [{
2690
- "type": "wrapper",
2691
- "body": [
2692
- filterFormSchema
2693
- ],
2694
- "size": "xs",
2695
- "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
2696
- "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"
2697
- }, {
2713
+ "body": [filterFormSchema, {
2698
2714
  "type": "wrapper",
2699
2715
  "body": {
2700
2716
  "type": "wrapper",
@@ -3053,16 +3069,7 @@
3053
3069
  * @returns amisSchema
3054
3070
  */
3055
3071
  async function getObjectListHeaderFieldsFilterBar(objectSchema, listViewName, ctx) {
3056
- const searchableFields = _$1.keys(objectSchema.fields);
3057
- const fields = _$1.sortBy(
3058
- _$1.compact(
3059
- _$1.map(searchableFields, (fieldName) => {
3060
- return objectSchema.fields[fieldName];
3061
- })
3062
- ),
3063
- "sort_no"
3064
- );
3065
- const fieldsFilterBarSchema = await getObjectFieldsFilterBarSchema(objectSchema, fields, ctx);
3072
+ const fieldsFilterBarSchema = await getObjectFieldsFilterBarSchema(objectSchema, ctx);
3066
3073
  return fieldsFilterBarSchema;
3067
3074
  }
3068
3075
 
@@ -3841,12 +3848,11 @@ setTimeout(()=>{
3841
3848
  "objectApiName": "object_listviews",
3842
3849
  "recordId": "${recordId}",
3843
3850
  "mode": "edit",
3844
- "initApiAdaptor": "",
3845
3851
  "fields": [
3846
3852
  "filters"
3847
3853
  ],
3848
3854
  "initApiRequestAdaptor": "",
3849
- "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;",
3855
+ "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;",
3850
3856
  "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",
3851
3857
  "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}",
3852
3858
  "onEvent": {
@@ -3906,7 +3912,7 @@ setTimeout(()=>{
3906
3912
  "recordId": "${recordId}",
3907
3913
  "mode": "edit",
3908
3914
  "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}",
3909
- "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;",
3915
+ "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;",
3910
3916
  "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;",
3911
3917
  "fields": [
3912
3918
  "columns",
@@ -3988,7 +3994,7 @@ setTimeout(()=>{
3988
3994
  }
3989
3995
  },
3990
3996
  "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}",
3991
- "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;",
3997
+ "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;",
3992
3998
  "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"
3993
3999
  }
3994
4000
  ],
@@ -4527,13 +4533,16 @@ setTimeout(()=>{
4527
4533
  var sort = orderBy + ' ' + orderDir;
4528
4534
  sort = orderBy ? sort : "${sort}";
4529
4535
  var allowSearchFields = ${JSON.stringify(searchableFields)};
4536
+ let fieldValue;
4530
4537
  if(api.data.$term){
4531
4538
  filters = [["name", "contains", "'+ api.data.$term +'"]];
4532
4539
  }else if(selfData.op === 'loadOptions' && selfData.value){
4533
4540
  if(selfData.value?.indexOf(',') > 0){
4534
- filters = [["${referenceTo.valueField.name}", "=", selfData.value.split(',')]];
4541
+ fieldValue = selfData.value.split(',');
4542
+ filters = [["${referenceTo.valueField.name}", "=", fieldValue]];
4535
4543
  }else{
4536
- filters = [["${referenceTo.valueField.name}", "=", selfData.value]];
4544
+ fieldValue = selfData.value;
4545
+ filters = [["${referenceTo.valueField.name}", "=", fieldValue]];
4537
4546
  }
4538
4547
  }
4539
4548
 
@@ -4587,6 +4596,9 @@ setTimeout(()=>{
4587
4596
  if(enable_tree){
4588
4597
  pageSize = 10000;
4589
4598
  }
4599
+ if(fieldValue && _.isArray(fieldValue) && fieldValue.length > pageSize){
4600
+ pageSize = fieldValue.length;
4601
+ }
4590
4602
  api.data.query = api.data.query.replace(/{__filters}/g, JSON.stringify(filters)).replace('{__top}', pageSize).replace('{__skip}', skip).replace('{__sort}', sort.trim());
4591
4603
  return api;
4592
4604
  `;
@@ -4687,13 +4699,9 @@ setTimeout(()=>{
4687
4699
  //TODO: 等待放大镜bug修复,if会去掉,始终显示放大镜
4688
4700
  if(referenceTo.objectName != "space_users" || field.reference_to_field != "user"){
4689
4701
  if (ctx.filterVisible !== false) {
4690
- let filterLoopCount = ctx.filterLoopCount || 0;
4691
- filterLoopCount++;
4692
- // 可以传入filterVisible为false防止死循环
4693
4702
  pickerSchema.filter = await getObjectFilter(refObjectConfig, fields, {
4694
4703
  isLookup: true,
4695
- ...ctx,
4696
- filterLoopCount,
4704
+ ...ctx
4697
4705
  });
4698
4706
  }
4699
4707
  }
@@ -5672,7 +5680,7 @@ setTimeout(()=>{
5672
5680
  columnsTogglable: false,
5673
5681
  strictMode:false,
5674
5682
  affixHeader: false, // 是否固定表头, 不固定表头, 否则form有y轴滚动条时, 表头会跟随滚动条滚动.
5675
- // needConfirm: true, 此属性设置为false后,导致table不能编辑。
5683
+ needConfirm: false,
5676
5684
  editable: !readonly,
5677
5685
  addable: !readonly,
5678
5686
  removable: !readonly,
@@ -5751,6 +5759,14 @@ setTimeout(()=>{
5751
5759
  convertData.visibleOn = `${field.visible_on.replace(/formData./g, 'data.')}`;
5752
5760
  }
5753
5761
  }
5762
+
5763
+ if(___namespace.isString(baseData.required)){
5764
+ if(baseData.required.startsWith("{{")){
5765
+ baseData.requiredOn = `${baseData.required.substring(2, baseData.required.length -2).replace(/formData./g, 'data.')}`;
5766
+ delete baseData.required;
5767
+ }
5768
+ }
5769
+
5754
5770
  if(convertData.type === 'group'){
5755
5771
  convertData.body[0] = Object.assign({}, baseData, convertData.body[0], { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name});
5756
5772
  return convertData
@@ -5765,8 +5781,9 @@ setTimeout(()=>{
5765
5781
  }
5766
5782
 
5767
5783
  async function getFieldSearchable(perField, permissionFields, ctx){
5768
- const filterLoopCount = ctx.filterLoopCount || 0;
5769
- const maxFilterLoopCount = 5;
5784
+ if(!ctx){
5785
+ ctx = {};
5786
+ }
5770
5787
  let field = perField;
5771
5788
  if(field.type === 'grid'){
5772
5789
  field = await getGridFieldSubFields(perField, permissionFields);
@@ -5827,14 +5844,17 @@ setTimeout(()=>{
5827
5844
  _field.multiple = true;
5828
5845
  _field.is_wide = false;
5829
5846
  _field.defaultValue = undefined;
5830
- // filterVisible: false不再生成lookup字段时的filter,否则会死循环
5831
- const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true, filterVisible: filterLoopCount < maxFilterLoopCount}));
5847
+ const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true}));
5832
5848
  if(amisField){
5833
5849
  return amisField;
5834
5850
  }
5835
5851
  }
5836
5852
  }
5837
5853
 
5854
+ if(typeof window != 'undefined'){
5855
+ window.getFieldSearchable = getFieldSearchable;
5856
+ }
5857
+
5838
5858
  var index = /*#__PURE__*/Object.freeze({
5839
5859
  __proto__: null,
5840
5860
  OMIT_FIELDS: OMIT_FIELDS,
@@ -6014,12 +6034,12 @@ setTimeout(()=>{
6014
6034
  });
6015
6035
  }
6016
6036
  }else{
6017
- data[item] = {
6037
+ data[item] = [{
6018
6038
  value: fileFieldValue,
6019
6039
  name: fileFieldDisplayValue.name,
6020
6040
  url: fileFieldDisplayValue.url + "?download=true",
6021
6041
  state: "uploaded"
6022
- };
6042
+ }];
6023
6043
  }
6024
6044
  }
6025
6045
  })
@@ -6095,12 +6115,12 @@ setTimeout(()=>{
6095
6115
  if(uiSchema.form){
6096
6116
  try{
6097
6117
  var objectFormConfig = JSON.parse(uiSchema.form);
6098
- initialValues = objectFormConfig.initialValues;
6099
- if(initialValues){
6100
- initialValues = new Function("return " + initialValues)();
6118
+ var formInitialValuesFun = objectFormConfig.initialValues;
6119
+ if(formInitialValuesFun){
6120
+ formInitialValuesFun = new Function("return " + formInitialValuesFun)();
6101
6121
  }
6102
- if(typeof initialValues === "function"){
6103
- initialValues = initialValues.apply({doc: defaultValues || {} })
6122
+ if(typeof formInitialValuesFun === "function"){
6123
+ initialValues = formInitialValuesFun.apply({doc: defaultValues || {} , global: api.body.global})
6104
6124
  }
6105
6125
  }
6106
6126
  catch(ex){
@@ -6117,12 +6137,15 @@ setTimeout(()=>{
6117
6137
  }
6118
6138
  // data下的变量需要在保存接口(getSaveApi)中被删除。
6119
6139
  payload.data = {
6120
- initialValues,
6121
- editFormInited: true
6140
+ ...initialValues
6122
6141
  }
6123
6142
  ${options.initApiAdaptor || ''}
6124
6143
  return payload;
6125
6144
  `,
6145
+ responseData: {
6146
+ initialValues: "$$",
6147
+ editFormInited: true
6148
+ },
6126
6149
  data: data,
6127
6150
  headers: {
6128
6151
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
@@ -6529,6 +6552,8 @@ setTimeout(()=>{
6529
6552
  },
6530
6553
  labelAlign,
6531
6554
  persistData: false,
6555
+ resetAfterSubmit: true,
6556
+ preventEnterSubmit: true,
6532
6557
  promptPageLeave: true,
6533
6558
  canAccessSuperData: false,
6534
6559
  name: `form_edit_${recordId}`,
@@ -6566,10 +6591,14 @@ setTimeout(()=>{
6566
6591
  },
6567
6592
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
6568
6593
  },
6569
- {
6570
- "args": {},
6571
- "actionType": "closeDialog"
6572
- }
6594
+ // {
6595
+ // "actionType": "custom",
6596
+ // "script": "debugger;"
6597
+ // },
6598
+ // {
6599
+ // "args": {},
6600
+ // "actionType": "closeDialog"
6601
+ // }
6573
6602
  ]
6574
6603
  }
6575
6604
  }
@@ -6737,6 +6766,13 @@ setTimeout(()=>{
6737
6766
  }else if(field.type === 'html'){
6738
6767
  type = 'markdown';
6739
6768
  }
6769
+ let className = "";
6770
+ if(field.type === 'textarea'){
6771
+ className = 'min-w-56';
6772
+ }
6773
+ if(field.wrap === false){
6774
+ className += " whitespace-nowrap";
6775
+ }
6740
6776
  if(!field.hidden && !field.extra){
6741
6777
  columns.push(Object.assign({}, {
6742
6778
  name: field.name,
@@ -6747,7 +6783,7 @@ setTimeout(()=>{
6747
6783
  type: type,
6748
6784
  tpl: tpl,
6749
6785
  toggled: field.toggled,
6750
- className: field.type === 'textarea' ? 'min-w-56 whitespace-pre-wrap textarea' : "whitespace-nowrap",
6786
+ className,
6751
6787
  html: field.type === 'html' ? true : null
6752
6788
  // toggled: true
6753
6789
  }, field.amis, {name: field.name}));
@@ -7087,13 +7123,17 @@ setTimeout(()=>{
7087
7123
  }
7088
7124
 
7089
7125
  api.data.$term = "$term";
7126
+ api.data.term = "$term";
7090
7127
  api.data.$self = "$$";
7128
+ api.data.self = "$$";
7091
7129
  api.data.filter = "$filter";
7092
7130
  api.data.loaded = "${loaded}";
7093
7131
  api.data.listViewId = "${listViewId}";
7094
7132
  api.requestAdaptor = `
7095
7133
  // selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
7096
7134
  let selfData = JSON.parse(JSON.stringify(api.data.$self));
7135
+ // 保留一份初始data,以供自定义发送适配器中获取原始数据。
7136
+ const data = _.cloneDeep(api.data);
7097
7137
  try{
7098
7138
  // TODO: 不应该直接在这里取localStorage,应该从外面传入
7099
7139
  const listViewId = api.data.listViewId;
@@ -7239,7 +7279,6 @@ setTimeout(()=>{
7239
7279
  if(_.isEmpty(filters)){
7240
7280
  filters = userFilters;
7241
7281
  }else{
7242
- filters.push('and');
7243
7282
  filters.push(userFilters)
7244
7283
  }
7245
7284
  }
@@ -7277,29 +7316,9 @@ setTimeout(()=>{
7277
7316
  })
7278
7317
 
7279
7318
  if(enable_tree){
7280
- const records = payload.data.rows;
7281
- const treeRecords = [];
7282
- const getChildren = (records, childrenIds)=>{
7283
- if(!childrenIds){
7284
- return;
7285
- }
7286
- const children = _.filter(records, (record)=>{
7287
- return _.includes(childrenIds, record._id)
7288
- });
7289
- _.each(children, (item)=>{
7290
- if(item.children){
7291
- item.children = getChildren(records, item.children)
7292
- }
7293
- })
7294
- return children;
7295
- }
7296
-
7297
- _.each(records, (record)=>{
7298
- if(!record.parent){
7299
- treeRecords.push(Object.assign({}, record, {children: getChildren(records, record.children)}));
7300
- }
7301
- });
7302
- payload.data.rows = treeRecords;
7319
+ const records = payload.data.rows || [];
7320
+ const getTreeOptions = SteedosUI.getTreeOptions
7321
+ payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
7303
7322
  }
7304
7323
 
7305
7324
 
@@ -7687,7 +7706,6 @@ setTimeout(()=>{
7687
7706
  // ObjectForm会认作用域下的变量值
7688
7707
  // TODO: 待组件支持initValues属性后应该改掉,不应该通过data直接传值
7689
7708
  // TODO: 全天事件属性传入doc了但是没有生效,需要手动在ObjectForm中勾选全天事件
7690
- event.data = doc;
7691
7709
  const title = "新建 ${objectSchema.label}";
7692
7710
  doAction(
7693
7711
  {
@@ -7700,6 +7718,7 @@ setTimeout(()=>{
7700
7718
  "type": "steedos-object-form",
7701
7719
  "objectApiName": "\${objectName}",
7702
7720
  "mode": "edit",
7721
+ "defaultData": doc,
7703
7722
  "onEvent": {
7704
7723
  "submitSucc": {
7705
7724
  "weight": 0,
@@ -7992,7 +8011,7 @@ setTimeout(()=>{
7992
8011
  * @Author: baozhoutao@steedos.com
7993
8012
  * @Date: 2022-07-05 15:55:39
7994
8013
  * @LastEditors: Please set LastEditors
7995
- * @LastEditTime: 2023-04-11 13:13:00
8014
+ * @LastEditTime: 2023-04-20 11:43:14
7996
8015
  * @Description:
7997
8016
  */
7998
8017
 
@@ -8089,10 +8108,12 @@ setTimeout(()=>{
8089
8108
  mainRelated[arr[0]] = arr[1];
8090
8109
  }
8091
8110
  }else {
8092
- const details = mainObjectUiSchema.details || [];
8111
+ const details = _$1.union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
8093
8112
  for (const detail of details) {
8094
8113
  const arr = detail.split(".");
8095
- mainRelated[arr[0]] = arr[1];
8114
+ if(!_$1.has(mainRelated,arr[0])){
8115
+ mainRelated[arr[0]] = arr[1];
8116
+ }
8096
8117
  }
8097
8118
  }
8098
8119
  }
@@ -8297,13 +8318,17 @@ setTimeout(()=>{
8297
8318
  delete ctx.globalFilter;
8298
8319
 
8299
8320
  const adaptor = `
8300
- if(setDataToComponentId){
8301
- if(payload.data.count){
8302
- setTimeout(function(){
8303
- window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8304
- }, 10);
8305
- }
8306
- };
8321
+ try{
8322
+ if(setDataToComponentId){
8323
+ if(payload.data.count){
8324
+ setTimeout(function(){
8325
+ window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8326
+ }, 10);
8327
+ }
8328
+ };
8329
+ }catch(e){
8330
+ console.log(e);
8331
+ }
8307
8332
  `;
8308
8333
  const amisSchema = {
8309
8334
  "type": "steedos-object-table",
@@ -8314,7 +8339,8 @@ setTimeout(()=>{
8314
8339
  "filtersFunction": filtersFunction,
8315
8340
  "sort": listViewSort,
8316
8341
  "filterVisible": false,
8317
- adaptor,
8342
+ "requestAdaptor": ctx.requestAdaptor,
8343
+ "adaptor": adaptor + ctx.adaptor || '',
8318
8344
  "ctx": ctx
8319
8345
  };
8320
8346
  // console.log(`getRelatedListSchema amisSchema`, amisSchema);