@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.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
  ],
@@ -4528,13 +4534,16 @@ async function lookupToAmisPicker(field, readonly, ctx){
4528
4534
  var sort = orderBy + ' ' + orderDir;
4529
4535
  sort = orderBy ? sort : "${sort}";
4530
4536
  var allowSearchFields = ${JSON.stringify(searchableFields)};
4537
+ let fieldValue;
4531
4538
  if(api.data.$term){
4532
4539
  filters = [["name", "contains", "'+ api.data.$term +'"]];
4533
4540
  }else if(selfData.op === 'loadOptions' && selfData.value){
4534
4541
  if(selfData.value?.indexOf(',') > 0){
4535
- filters = [["${referenceTo.valueField.name}", "=", selfData.value.split(',')]];
4542
+ fieldValue = selfData.value.split(',');
4543
+ filters = [["${referenceTo.valueField.name}", "=", fieldValue]];
4536
4544
  }else{
4537
- filters = [["${referenceTo.valueField.name}", "=", selfData.value]];
4545
+ fieldValue = selfData.value;
4546
+ filters = [["${referenceTo.valueField.name}", "=", fieldValue]];
4538
4547
  }
4539
4548
  }
4540
4549
 
@@ -4588,6 +4597,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
4588
4597
  if(enable_tree){
4589
4598
  pageSize = 10000;
4590
4599
  }
4600
+ if(fieldValue && _.isArray(fieldValue) && fieldValue.length > pageSize){
4601
+ pageSize = fieldValue.length;
4602
+ }
4591
4603
  api.data.query = api.data.query.replace(/{__filters}/g, JSON.stringify(filters)).replace('{__top}', pageSize).replace('{__skip}', skip).replace('{__sort}', sort.trim());
4592
4604
  return api;
4593
4605
  `;
@@ -4688,13 +4700,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
4688
4700
  //TODO: 等待放大镜bug修复,if会去掉,始终显示放大镜
4689
4701
  if(referenceTo.objectName != "space_users" || field.reference_to_field != "user"){
4690
4702
  if (ctx.filterVisible !== false) {
4691
- let filterLoopCount = ctx.filterLoopCount || 0;
4692
- filterLoopCount++;
4693
- // 可以传入filterVisible为false防止死循环
4694
4703
  pickerSchema.filter = await getObjectFilter(refObjectConfig, fields, {
4695
4704
  isLookup: true,
4696
- ...ctx,
4697
- filterLoopCount,
4705
+ ...ctx
4698
4706
  });
4699
4707
  }
4700
4708
  }
@@ -5673,7 +5681,7 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5673
5681
  columnsTogglable: false,
5674
5682
  strictMode:false,
5675
5683
  affixHeader: false, // 是否固定表头, 不固定表头, 否则form有y轴滚动条时, 表头会跟随滚动条滚动.
5676
- // needConfirm: true, 此属性设置为false后,导致table不能编辑。
5684
+ needConfirm: false,
5677
5685
  editable: !readonly,
5678
5686
  addable: !readonly,
5679
5687
  removable: !readonly,
@@ -5752,6 +5760,14 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5752
5760
  convertData.visibleOn = `${field.visible_on.replace(/formData./g, 'data.')}`;
5753
5761
  }
5754
5762
  }
5763
+
5764
+ if(___namespace.isString(baseData.required)){
5765
+ if(baseData.required.startsWith("{{")){
5766
+ baseData.requiredOn = `${baseData.required.substring(2, baseData.required.length -2).replace(/formData./g, 'data.')}`;
5767
+ delete baseData.required;
5768
+ }
5769
+ }
5770
+
5755
5771
  if(convertData.type === 'group'){
5756
5772
  convertData.body[0] = Object.assign({}, baseData, convertData.body[0], { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name});
5757
5773
  return convertData
@@ -5766,8 +5782,9 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5766
5782
  }
5767
5783
 
5768
5784
  async function getFieldSearchable(perField, permissionFields, ctx){
5769
- const filterLoopCount = ctx.filterLoopCount || 0;
5770
- const maxFilterLoopCount = 5;
5785
+ if(!ctx){
5786
+ ctx = {};
5787
+ }
5771
5788
  let field = perField;
5772
5789
  if(field.type === 'grid'){
5773
5790
  field = await getGridFieldSubFields(perField, permissionFields);
@@ -5828,14 +5845,17 @@ async function getFieldSearchable(perField, permissionFields, ctx){
5828
5845
  _field.multiple = true;
5829
5846
  _field.is_wide = false;
5830
5847
  _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}));
5848
+ const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true}));
5833
5849
  if(amisField){
5834
5850
  return amisField;
5835
5851
  }
5836
5852
  }
5837
5853
  }
5838
5854
 
5855
+ if(typeof window != 'undefined'){
5856
+ window.getFieldSearchable = getFieldSearchable;
5857
+ }
5858
+
5839
5859
  var index = /*#__PURE__*/Object.freeze({
5840
5860
  __proto__: null,
5841
5861
  OMIT_FIELDS: OMIT_FIELDS,
@@ -6015,12 +6035,12 @@ function getScriptForRewriteValueForFileFields(fields){
6015
6035
  });
6016
6036
  }
6017
6037
  }else{
6018
- data[item] = {
6038
+ data[item] = [{
6019
6039
  value: fileFieldValue,
6020
6040
  name: fileFieldDisplayValue.name,
6021
6041
  url: fileFieldDisplayValue.url + "?download=true",
6022
6042
  state: "uploaded"
6023
- };
6043
+ }];
6024
6044
  }
6025
6045
  }
6026
6046
  })
@@ -6096,12 +6116,12 @@ async function getEditFormInitApi(object, recordId, fields, options){
6096
6116
  if(uiSchema.form){
6097
6117
  try{
6098
6118
  var objectFormConfig = JSON.parse(uiSchema.form);
6099
- initialValues = objectFormConfig.initialValues;
6100
- if(initialValues){
6101
- initialValues = new Function("return " + initialValues)();
6119
+ var formInitialValuesFun = objectFormConfig.initialValues;
6120
+ if(formInitialValuesFun){
6121
+ formInitialValuesFun = new Function("return " + formInitialValuesFun)();
6102
6122
  }
6103
- if(typeof initialValues === "function"){
6104
- initialValues = initialValues.apply({doc: defaultValues || {} })
6123
+ if(typeof formInitialValuesFun === "function"){
6124
+ initialValues = formInitialValuesFun.apply({doc: defaultValues || {} , global: api.body.global})
6105
6125
  }
6106
6126
  }
6107
6127
  catch(ex){
@@ -6118,12 +6138,15 @@ async function getEditFormInitApi(object, recordId, fields, options){
6118
6138
  }
6119
6139
  // data下的变量需要在保存接口(getSaveApi)中被删除。
6120
6140
  payload.data = {
6121
- initialValues,
6122
- editFormInited: true
6141
+ ...initialValues
6123
6142
  }
6124
6143
  ${options.initApiAdaptor || ''}
6125
6144
  return payload;
6126
6145
  `,
6146
+ responseData: {
6147
+ initialValues: "$$",
6148
+ editFormInited: true
6149
+ },
6127
6150
  data: data,
6128
6151
  headers: {
6129
6152
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
@@ -6530,6 +6553,8 @@ async function getObjectForm(objectSchema, ctx){
6530
6553
  },
6531
6554
  labelAlign,
6532
6555
  persistData: false,
6556
+ resetAfterSubmit: true,
6557
+ preventEnterSubmit: true,
6533
6558
  promptPageLeave: true,
6534
6559
  canAccessSuperData: false,
6535
6560
  name: `form_edit_${recordId}`,
@@ -6567,10 +6592,14 @@ async function getObjectForm(objectSchema, ctx){
6567
6592
  },
6568
6593
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
6569
6594
  },
6570
- {
6571
- "args": {},
6572
- "actionType": "closeDialog"
6573
- }
6595
+ // {
6596
+ // "actionType": "custom",
6597
+ // "script": "debugger;"
6598
+ // },
6599
+ // {
6600
+ // "args": {},
6601
+ // "actionType": "closeDialog"
6602
+ // }
6574
6603
  ]
6575
6604
  }
6576
6605
  }
@@ -6738,6 +6767,13 @@ async function getTableColumns(fields, options){
6738
6767
  }else if(field.type === 'html'){
6739
6768
  type = 'markdown';
6740
6769
  }
6770
+ let className = "";
6771
+ if(field.type === 'textarea'){
6772
+ className = 'min-w-56';
6773
+ }
6774
+ if(field.wrap === false){
6775
+ className += " whitespace-nowrap";
6776
+ }
6741
6777
  if(!field.hidden && !field.extra){
6742
6778
  columns.push(Object.assign({}, {
6743
6779
  name: field.name,
@@ -6748,7 +6784,7 @@ async function getTableColumns(fields, options){
6748
6784
  type: type,
6749
6785
  tpl: tpl,
6750
6786
  toggled: field.toggled,
6751
- className: field.type === 'textarea' ? 'min-w-56 whitespace-pre-wrap textarea' : "whitespace-nowrap",
6787
+ className,
6752
6788
  html: field.type === 'html' ? true : null
6753
6789
  // toggled: true
6754
6790
  }, field.amis, {name: field.name}));
@@ -7088,13 +7124,17 @@ async function getTableApi(mainObject, fields, options){
7088
7124
  }
7089
7125
 
7090
7126
  api.data.$term = "$term";
7127
+ api.data.term = "$term";
7091
7128
  api.data.$self = "$$";
7129
+ api.data.self = "$$";
7092
7130
  api.data.filter = "$filter";
7093
7131
  api.data.loaded = "${loaded}";
7094
7132
  api.data.listViewId = "${listViewId}";
7095
7133
  api.requestAdaptor = `
7096
7134
  // selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
7097
7135
  let selfData = JSON.parse(JSON.stringify(api.data.$self));
7136
+ // 保留一份初始data,以供自定义发送适配器中获取原始数据。
7137
+ const data = _.cloneDeep(api.data);
7098
7138
  try{
7099
7139
  // TODO: 不应该直接在这里取localStorage,应该从外面传入
7100
7140
  const listViewId = api.data.listViewId;
@@ -7240,7 +7280,6 @@ async function getTableApi(mainObject, fields, options){
7240
7280
  if(_.isEmpty(filters)){
7241
7281
  filters = userFilters;
7242
7282
  }else{
7243
- filters.push('and');
7244
7283
  filters.push(userFilters)
7245
7284
  }
7246
7285
  }
@@ -7278,29 +7317,9 @@ async function getTableApi(mainObject, fields, options){
7278
7317
  })
7279
7318
 
7280
7319
  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;
7320
+ const records = payload.data.rows || [];
7321
+ const getTreeOptions = SteedosUI.getTreeOptions
7322
+ payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
7304
7323
  }
7305
7324
 
7306
7325
 
@@ -7688,7 +7707,6 @@ async function getObjectCalendar(objectSchema, calendarOptions, options) {
7688
7707
  // ObjectForm会认作用域下的变量值
7689
7708
  // TODO: 待组件支持initValues属性后应该改掉,不应该通过data直接传值
7690
7709
  // TODO: 全天事件属性传入doc了但是没有生效,需要手动在ObjectForm中勾选全天事件
7691
- event.data = doc;
7692
7710
  const title = "新建 ${objectSchema.label}";
7693
7711
  doAction(
7694
7712
  {
@@ -7701,6 +7719,7 @@ async function getObjectCalendar(objectSchema, calendarOptions, options) {
7701
7719
  "type": "steedos-object-form",
7702
7720
  "objectApiName": "\${objectName}",
7703
7721
  "mode": "edit",
7722
+ "defaultData": doc,
7704
7723
  "onEvent": {
7705
7724
  "submitSucc": {
7706
7725
  "weight": 0,
@@ -7993,7 +8012,7 @@ const getRecordPermissions = async (objectName, recordId)=>{
7993
8012
  * @Author: baozhoutao@steedos.com
7994
8013
  * @Date: 2022-07-05 15:55:39
7995
8014
  * @LastEditors: Please set LastEditors
7996
- * @LastEditTime: 2023-04-11 13:13:00
8015
+ * @LastEditTime: 2023-04-20 11:43:14
7997
8016
  * @Description:
7998
8017
  */
7999
8018
 
@@ -8090,10 +8109,12 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
8090
8109
  mainRelated[arr[0]] = arr[1];
8091
8110
  }
8092
8111
  }else {
8093
- const details = mainObjectUiSchema.details || [];
8112
+ const details = _$1.union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
8094
8113
  for (const detail of details) {
8095
8114
  const arr = detail.split(".");
8096
- mainRelated[arr[0]] = arr[1];
8115
+ if(!_$1.has(mainRelated,arr[0])){
8116
+ mainRelated[arr[0]] = arr[1];
8117
+ }
8097
8118
  }
8098
8119
  }
8099
8120
  }
@@ -8298,13 +8319,17 @@ async function getRelatedListSchema(
8298
8319
  delete ctx.globalFilter;
8299
8320
 
8300
8321
  const adaptor = `
8301
- if(setDataToComponentId){
8302
- if(payload.data.count){
8303
- setTimeout(function(){
8304
- window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8305
- }, 10);
8306
- }
8307
- };
8322
+ try{
8323
+ if(setDataToComponentId){
8324
+ if(payload.data.count){
8325
+ setTimeout(function(){
8326
+ window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8327
+ }, 10);
8328
+ }
8329
+ };
8330
+ }catch(e){
8331
+ console.log(e);
8332
+ }
8308
8333
  `;
8309
8334
  const amisSchema = {
8310
8335
  "type": "steedos-object-table",
@@ -8315,7 +8340,8 @@ async function getRelatedListSchema(
8315
8340
  "filtersFunction": filtersFunction,
8316
8341
  "sort": listViewSort,
8317
8342
  "filterVisible": false,
8318
- adaptor,
8343
+ "requestAdaptor": ctx.requestAdaptor,
8344
+ "adaptor": adaptor + ctx.adaptor || '',
8319
8345
  "ctx": ctx
8320
8346
  };
8321
8347
  // console.log(`getRelatedListSchema amisSchema`, amisSchema);