@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.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, keys, sortBy, compact, toArray, mergeWith, isBoolean, omitBy, isNil, isString, slice, defaultsDeep as defaultsDeep$1, isObject as isObject$1, has, filter, startsWith } from 'lodash';
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-17 15:24:21
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 = `page.display`;
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: 殷亮辉 yinlianghui@hotoa.com
1372
- * @LastEditTime: 2023-04-16 17:04:16
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(objectSchema, fields, ctx) {
2385
- if(!ctx){
2404
+ async function getObjectFieldsFilterFormSchema(ctx) {
2405
+
2406
+ if (!ctx) {
2386
2407
  ctx = {};
2387
2408
  }
2388
- const body = [];
2389
- for (let field of fields) {
2390
- if (
2391
- !includes(
2392
- [
2393
- "grid",
2394
- "avatar",
2395
- "image",
2396
- "object",
2397
- "[object]",
2398
- "[Object]",
2399
- "[grid]",
2400
- "[text]",
2401
- "audio",
2402
- "file",
2403
- ],
2404
- field.type
2405
- )
2406
- ) {
2407
- delete field.defaultValue;
2408
- delete field.required;
2409
- delete field.is_wide;
2410
- delete field.readonly;
2411
- delete field.hidden;
2412
- delete field.omit;
2413
- const amisField = await getFieldSearchable(field, fields, ctx);
2414
- if (amisField) {
2415
- body.push(amisField);
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 body;
2487
+ return formSchema;
2464
2488
  }
2465
2489
 
2466
- async function getObjectFieldsFilterBarSchema(objectSchema, fields, ctx) {
2467
- // console.log(ctx)
2468
- if(!ctx){
2490
+ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
2491
+ if (!ctx) {
2469
2492
  ctx = {};
2470
2493
  }
2471
- const filterFormSchema = await getObjectFieldsFilterFormSchema(objectSchema, fields, Object.assign({}, {
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(!defaultSearchableFields && data.uiSchema){
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
- defaultSearchableFields = listView && listView.searchable_fields;
2509
- if(defaultSearchableFields && defaultSearchableFields.length){
2510
- defaultSearchableFields = _.map(defaultSearchableFields, 'field');
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 searchableFields = keys(objectSchema.fields);
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.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;",
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.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;",
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.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;",
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
  ],
@@ -4661,13 +4667,9 @@ async function lookupToAmisPicker(field, readonly, ctx){
4661
4667
  //TODO: 等待放大镜bug修复,if会去掉,始终显示放大镜
4662
4668
  if(referenceTo.objectName != "space_users" || field.reference_to_field != "user"){
4663
4669
  if (ctx.filterVisible !== false) {
4664
- let filterLoopCount = ctx.filterLoopCount || 0;
4665
- filterLoopCount++;
4666
- // 可以传入filterVisible为false防止死循环
4667
4670
  pickerSchema.filter = await getObjectFilter(refObjectConfig, fields, {
4668
4671
  isLookup: true,
4669
- ...ctx,
4670
- filterLoopCount,
4672
+ ...ctx
4671
4673
  });
4672
4674
  }
4673
4675
  }
@@ -5725,6 +5727,14 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5725
5727
  convertData.visibleOn = `${field.visible_on.replace(/formData./g, 'data.')}`;
5726
5728
  }
5727
5729
  }
5730
+
5731
+ if(_$1.isString(baseData.required)){
5732
+ if(baseData.required.startsWith("{{")){
5733
+ baseData.requiredOn = `${baseData.required.substring(2, baseData.required.length -2).replace(/formData./g, 'data.')}`;
5734
+ delete baseData.required;
5735
+ }
5736
+ }
5737
+
5728
5738
  if(convertData.type === 'group'){
5729
5739
  convertData.body[0] = Object.assign({}, baseData, convertData.body[0], { labelClassName: 'text-left', clearValueOnHidden: true, fieldName: field.name});
5730
5740
  return convertData
@@ -5739,8 +5749,9 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
5739
5749
  }
5740
5750
 
5741
5751
  async function getFieldSearchable(perField, permissionFields, ctx){
5742
- const filterLoopCount = ctx.filterLoopCount || 0;
5743
- const maxFilterLoopCount = 5;
5752
+ if(!ctx){
5753
+ ctx = {};
5754
+ }
5744
5755
  let field = perField;
5745
5756
  if(field.type === 'grid'){
5746
5757
  field = await getGridFieldSubFields(perField, permissionFields);
@@ -5801,14 +5812,17 @@ async function getFieldSearchable(perField, permissionFields, ctx){
5801
5812
  _field.multiple = true;
5802
5813
  _field.is_wide = false;
5803
5814
  _field.defaultValue = undefined;
5804
- // filterVisible: false不再生成lookup字段时的filter,否则会死循环
5805
- const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true, filterVisible: filterLoopCount < maxFilterLoopCount}));
5815
+ const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true}));
5806
5816
  if(amisField){
5807
5817
  return amisField;
5808
5818
  }
5809
5819
  }
5810
5820
  }
5811
5821
 
5822
+ if(typeof window != 'undefined'){
5823
+ window.getFieldSearchable = getFieldSearchable;
5824
+ }
5825
+
5812
5826
  var index = /*#__PURE__*/Object.freeze({
5813
5827
  __proto__: null,
5814
5828
  OMIT_FIELDS: OMIT_FIELDS,
@@ -6069,12 +6083,12 @@ async function getEditFormInitApi(object, recordId, fields, options){
6069
6083
  if(uiSchema.form){
6070
6084
  try{
6071
6085
  var objectFormConfig = JSON.parse(uiSchema.form);
6072
- initialValues = objectFormConfig.initialValues;
6073
- if(initialValues){
6074
- initialValues = new Function("return " + initialValues)();
6086
+ var formInitialValuesFun = objectFormConfig.initialValues;
6087
+ if(formInitialValuesFun){
6088
+ formInitialValuesFun = new Function("return " + formInitialValuesFun)();
6075
6089
  }
6076
- if(typeof initialValues === "function"){
6077
- initialValues = initialValues.apply({doc: defaultValues || {} })
6090
+ if(typeof formInitialValuesFun === "function"){
6091
+ initialValues = formInitialValuesFun.apply({doc: defaultValues || {} , global: api.body.global})
6078
6092
  }
6079
6093
  }
6080
6094
  catch(ex){
@@ -6091,12 +6105,15 @@ async function getEditFormInitApi(object, recordId, fields, options){
6091
6105
  }
6092
6106
  // data下的变量需要在保存接口(getSaveApi)中被删除。
6093
6107
  payload.data = {
6094
- initialValues,
6095
- editFormInited: true
6108
+ ...initialValues
6096
6109
  }
6097
6110
  ${options.initApiAdaptor || ''}
6098
6111
  return payload;
6099
6112
  `,
6113
+ responseData: {
6114
+ initialValues: "$$",
6115
+ editFormInited: true
6116
+ },
6100
6117
  data: data,
6101
6118
  headers: {
6102
6119
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
@@ -6503,6 +6520,8 @@ async function getObjectForm(objectSchema, ctx){
6503
6520
  },
6504
6521
  labelAlign,
6505
6522
  persistData: false,
6523
+ resetAfterSubmit: true,
6524
+ preventEnterSubmit: true,
6506
6525
  promptPageLeave: true,
6507
6526
  canAccessSuperData: false,
6508
6527
  name: `form_edit_${recordId}`,
@@ -6540,10 +6559,14 @@ async function getObjectForm(objectSchema, ctx){
6540
6559
  },
6541
6560
  "expression": `\${_master.objectName != '${objectSchema.name}' && _master.objectName}`
6542
6561
  },
6543
- {
6544
- "args": {},
6545
- "actionType": "closeDialog"
6546
- }
6562
+ // {
6563
+ // "actionType": "custom",
6564
+ // "script": "debugger;"
6565
+ // },
6566
+ // {
6567
+ // "args": {},
6568
+ // "actionType": "closeDialog"
6569
+ // }
6547
6570
  ]
6548
6571
  }
6549
6572
  }
@@ -7061,13 +7084,17 @@ async function getTableApi(mainObject, fields, options){
7061
7084
  }
7062
7085
 
7063
7086
  api.data.$term = "$term";
7087
+ api.data.term = "$term";
7064
7088
  api.data.$self = "$$";
7089
+ api.data.self = "$$";
7065
7090
  api.data.filter = "$filter";
7066
7091
  api.data.loaded = "${loaded}";
7067
7092
  api.data.listViewId = "${listViewId}";
7068
7093
  api.requestAdaptor = `
7069
7094
  // selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
7070
7095
  let selfData = JSON.parse(JSON.stringify(api.data.$self));
7096
+ // 保留一份初始data,以供自定义发送适配器中获取原始数据。
7097
+ const data = _.cloneDeep(api.data);
7071
7098
  try{
7072
7099
  // TODO: 不应该直接在这里取localStorage,应该从外面传入
7073
7100
  const listViewId = api.data.listViewId;
@@ -7251,29 +7278,9 @@ async function getTableApi(mainObject, fields, options){
7251
7278
  })
7252
7279
 
7253
7280
  if(enable_tree){
7254
- const records = payload.data.rows;
7255
- const treeRecords = [];
7256
- const getChildren = (records, childrenIds)=>{
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;
7281
+ const records = payload.data.rows || [];
7282
+ const getTreeOptions = SteedosUI.getTreeOptions
7283
+ payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
7277
7284
  }
7278
7285
 
7279
7286
 
@@ -7966,7 +7973,7 @@ const getRecordPermissions = async (objectName, recordId)=>{
7966
7973
  * @Author: baozhoutao@steedos.com
7967
7974
  * @Date: 2022-07-05 15:55:39
7968
7975
  * @LastEditors: Please set LastEditors
7969
- * @LastEditTime: 2023-04-11 13:13:00
7976
+ * @LastEditTime: 2023-04-20 11:43:14
7970
7977
  * @Description:
7971
7978
  */
7972
7979
 
@@ -8063,10 +8070,12 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
8063
8070
  mainRelated[arr[0]] = arr[1];
8064
8071
  }
8065
8072
  }else {
8066
- const details = mainObjectUiSchema.details || [];
8073
+ const details = union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
8067
8074
  for (const detail of details) {
8068
8075
  const arr = detail.split(".");
8069
- mainRelated[arr[0]] = arr[1];
8076
+ if(!has(mainRelated,arr[0])){
8077
+ mainRelated[arr[0]] = arr[1];
8078
+ }
8070
8079
  }
8071
8080
  }
8072
8081
  }
@@ -8271,13 +8280,17 @@ async function getRelatedListSchema(
8271
8280
  delete ctx.globalFilter;
8272
8281
 
8273
8282
  const adaptor = `
8274
- if(setDataToComponentId){
8275
- if(payload.data.count){
8276
- setTimeout(function(){
8277
- window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8278
- }, 10);
8279
- }
8280
- };
8283
+ try{
8284
+ if(setDataToComponentId){
8285
+ if(payload.data.count){
8286
+ setTimeout(function(){
8287
+ window.$("." + setDataToComponentId + " .antd-Crud").removeClass("hidden");
8288
+ }, 10);
8289
+ }
8290
+ };
8291
+ }catch(e){
8292
+ console.log(e);
8293
+ }
8281
8294
  `;
8282
8295
  const amisSchema = {
8283
8296
  "type": "steedos-object-table",
@@ -8288,7 +8301,8 @@ async function getRelatedListSchema(
8288
8301
  "filtersFunction": filtersFunction,
8289
8302
  "sort": listViewSort,
8290
8303
  "filterVisible": false,
8291
- adaptor,
8304
+ "requestAdaptor": ctx.requestAdaptor,
8305
+ "adaptor": adaptor + ctx.adaptor || '',
8292
8306
  "ctx": ctx
8293
8307
  };
8294
8308
  // console.log(`getRelatedListSchema amisSchema`, amisSchema);