@steedos-widgets/amis-object 1.2.19 → 1.2.26

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.
@@ -3515,7 +3515,7 @@
3515
3515
  * @Author: baozhoutao@steedos.com
3516
3516
  * @Date: 2022-08-16 17:02:08
3517
3517
  * @LastEditors: baozhoutao@steedos.com
3518
- * @LastEditTime: 2023-04-19 15:25:50
3518
+ * @LastEditTime: 2023-06-20 13:50:15
3519
3519
  * @Description:
3520
3520
  */
3521
3521
 
@@ -3526,14 +3526,14 @@
3526
3526
  if(urlSearch.has('display')){
3527
3527
  return urlSearch.get('display')
3528
3528
  }
3529
- // const key = `tab.${tab_id}.display`;
3530
- const key = `page_display`;
3529
+ const key = `tab_${tab_id}_display`;
3530
+ // const key = `page_display`;
3531
3531
  const value = localStorage.getItem(key);
3532
3532
  return value ? value : 'grid'
3533
3533
  },
3534
3534
 
3535
3535
  setTabDisplayAs(tab_id, displayAs){
3536
- const key = `tab.${tab_id}.display`;
3536
+ const key = `tab_${tab_id}_display`;
3537
3537
  localStorage.setItem(key, displayAs);
3538
3538
  },
3539
3539
  getAppPath({formFactor, appId}){
@@ -3547,15 +3547,10 @@
3547
3547
  },
3548
3548
  getObjectDetailPath(props){
3549
3549
  const {formFactor, appId, objectName, recordId, listViewName, _templateType} = props;
3550
- // var urlParams = new URLSearchParams(window.location.search);
3551
- // if(objectName === 'instances'){
3552
- // return `/workflow/space/\${context.tenantId}/\${listName}/${recordId}`;
3553
- // }
3554
- const displayAs = Router$1.getTabDisplayAs(objectName); //urlParams.get("display") ||
3555
3550
  if(_templateType === 'JavaScript'){
3556
- return `/app/${appId}/${objectName}/view/${recordId}?display=${displayAs}&side_object=<%=item.objectName%>&side_listview_id=<%=item.listName%>`;
3551
+ return `/app/${appId}/${objectName}/view/${recordId}?side_object=<%=item.objectName%>&side_listview_id=<%=item.listName%>`;
3557
3552
  }
3558
- return `/app/${appId}/${objectName}/view/${recordId}?display=${displayAs}&side_object=\${objectName}&side_listview_id=\${listName}`;
3553
+ return `/app/${appId}/${objectName}/view/${recordId}?side_object=\${objectName}&side_listview_id=\${listName}`;
3559
3554
  },
3560
3555
  getObjectRelatedViewPath({formFactor, appId, masterObjectName, masterRecordId, objectName, foreignKey}){
3561
3556
  return `/app/${appId}/${masterObjectName}/${masterRecordId}/${objectName}/grid?related_field_name=${foreignKey}`;
@@ -6305,7 +6300,10 @@
6305
6300
  const formSchema = {
6306
6301
  "type": "service",
6307
6302
  "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
6308
- "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",
6303
+ "className": ctx.formFactor === 'SMALL' ? "slds-filters__body p-0 mb-2 overflow-y-auto overflow-x-hidden" : "slds-filters__body p-0 sm:grid sm:gap-2 sm:grid-cols-4 mb-2",
6304
+ "style":{
6305
+ "max-height":ctx.formFactor === 'SMALL'?"30vh":"unset"
6306
+ },
6309
6307
  "schemaApi": {
6310
6308
  method: 'post',
6311
6309
  url: `\${context.rootUrl}/graphql?reload=\${filterFormSearchableFields|join}`,
@@ -6394,28 +6392,42 @@
6394
6392
  // }
6395
6393
  // }
6396
6394
  // listView.handleFilterSubmit(Object.assign({}, removedValues, filterFormValues));
6397
-
6398
- let isMobile = Steedos.isMobile();
6399
- if(isMobile){
6400
- // 手机端点击搜索的时候自动收起搜索栏
6401
- let resizeWindow = function(){
6402
- //触发amis crud 高度重算
6403
- setTimeout(()=>{
6404
- window.dispatchEvent(new Event("resize"))
6405
- }, 500);
6406
- }
6407
- const filterService = filterForm.context.getComponents().find(function(n){
6408
- return n.props.type === "service";
6409
- });
6410
- filterService.setData({showFieldsFilter: false});
6411
- resizeWindow();
6412
- // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6413
- let filterFormValues = event.data;
6414
- let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6415
- let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6416
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6417
- crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter: false});
6395
+ // 点击搜索的时候自动收起搜索栏
6396
+ let resizeWindow = function(){
6397
+ //触发amis crud 高度重算
6398
+ setTimeout(()=>{
6399
+ window.dispatchEvent(new Event("resize"))
6400
+ }, 500);
6401
+ }
6402
+ const filterService = filterForm.context.getComponents().find(function(n){
6403
+ return n.props.type === "service";
6404
+ });
6405
+ let showFieldsFilter = false;
6406
+ const isMobile = window.innerWidth < 768;
6407
+ if(event.data.__from_fields_filter_settings_confirm){
6408
+ // 如果是从设置搜索项点击确认按钮触发的搜索事件不应该自动关闭搜索栏
6409
+ showFieldsFilter = true;
6410
+ }
6411
+ else if(isMobile){
6412
+ // 如果是手机端,点击搜索后自动关闭搜索栏
6413
+ showFieldsFilter = false;
6414
+ }
6415
+ else if(event.data.displayAs === "split") {
6416
+ // PC上分栏模式下的列表,始终按手机上效果处理,即自动关闭搜索栏
6417
+ showFieldsFilter = false;
6418
+ }
6419
+ else if(window.innerHeight >= 1200){
6420
+ // 高分辨率屏幕(2k+),列表高度比较高,没必要自动关闭搜索栏
6421
+ showFieldsFilter = true;
6418
6422
  }
6423
+ filterService.setData({showFieldsFilter});
6424
+ resizeWindow();
6425
+ // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6426
+ let filterFormValues = event.data;
6427
+ let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6428
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6429
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6430
+ crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
6419
6431
  `;
6420
6432
  const onCancelScript = `
6421
6433
  const scope = event.context.scoped;
@@ -6454,12 +6466,9 @@
6454
6466
  setTimeout(()=>{
6455
6467
  window.dispatchEvent(new Event("resize"))
6456
6468
  }, 100);
6457
- let isMobile = Steedos.isMobile();
6458
- if(isMobile){
6459
- // 手机端移除搜索按钮上的红点
6460
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6461
- crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6462
- }
6469
+ // 移除搜索按钮上的红点
6470
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6471
+ crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6463
6472
  `;
6464
6473
  const dataProviderInited = `
6465
6474
  const objectName = data.objectName;
@@ -6512,17 +6521,11 @@
6512
6521
  || (_.isArray(n) && _.isEmpty(n.filter(function(item){return !_.isNil(item)})))
6513
6522
  || (_.isString(n) && n.length === 0);
6514
6523
  });
6515
- // 有过滤条件时自动展开搜索栏
6524
+ // 有过滤条件时只显示搜索按钮上的红点,不自动展开搜索栏
6516
6525
  if(!_.isEmpty(omitedEmptyFormValue)){
6517
- let isMobile = Steedos.isMobile();
6518
- if(isMobile){
6519
- // 手机端不展开,只显示搜索按钮上的红点
6520
- let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6521
- crudService && crudService.setData({isFieldsFilterEmpty: false});
6522
- }
6523
- else{
6524
- setData({ showFieldsFilter: true });
6525
- }
6526
+ let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6527
+ crudService && crudService.setData({isFieldsFilterEmpty: false});
6528
+ // setData({ showFieldsFilter: true });//自动展开搜索栏
6526
6529
  }
6527
6530
  }
6528
6531
  }
@@ -6788,7 +6791,10 @@
6788
6791
  },
6789
6792
  {
6790
6793
  "actionType": "click",
6791
- "componentId": btnSearchId
6794
+ "componentId": btnSearchId,
6795
+ "args": {
6796
+ "__from_fields_filter_settings_confirm": true
6797
+ }
6792
6798
  },
6793
6799
  {
6794
6800
  "componentId": "",
@@ -7320,7 +7326,8 @@
7320
7326
  "name":"",
7321
7327
  "label":"",
7322
7328
  "filters":"",
7323
- "shared":false
7329
+ "shared":false,
7330
+ "object_name": "${targetObjectName}",
7324
7331
  },
7325
7332
  "fieldsExtend": fieldsExtend$4(),
7326
7333
  "fields": fields$1(),
@@ -7367,13 +7374,11 @@
7367
7374
  "object_name",
7368
7375
  "filter_scope",
7369
7376
  "show_count",
7370
- "columns.$.field",
7371
- "columns.$.width",
7372
- "sort.$.field_name",
7373
- "sort.$.order",
7377
+ "columns",
7378
+ "sort",
7374
7379
  "filters",
7375
- "mobile_columns.$.field",
7376
- "searchable_fields.$.field",
7380
+ "mobile_columns",
7381
+ "searchable_fields",
7377
7382
  "is_system",
7378
7383
  "shared"
7379
7384
  ]
@@ -7386,7 +7391,8 @@
7386
7391
  },
7387
7392
  "name": {
7388
7393
  "amis": {
7389
- "hidden": true
7394
+ "hidden": true,
7395
+ "required": false
7390
7396
  }
7391
7397
  },
7392
7398
  "object_name": {
@@ -7396,37 +7402,56 @@
7396
7402
  },
7397
7403
  "filter_scope": {
7398
7404
  "amis": {
7399
- "hidden": true
7405
+ "hidden": true,
7406
+ "required": false
7400
7407
  }
7401
7408
  },
7402
7409
  "columns": {
7403
7410
  "amis": {
7404
- "hidden": true
7411
+ "hidden": true,
7412
+ "required": false
7413
+ }
7414
+ },
7415
+ "mobile_columns":{
7416
+ "amis": {
7417
+ "hidden": true,
7418
+ "required": false
7419
+ }
7420
+ },
7421
+ "searchable_fields":{
7422
+ "amis": {
7423
+ "hidden": true,
7424
+ "required": false
7405
7425
  }
7406
7426
  },
7407
7427
  "filter_fields": {
7408
7428
  "amis": {
7409
- "hidden": true
7429
+ "hidden": true,
7430
+ "required": false
7410
7431
  }
7411
7432
  },
7412
7433
  "scrolling_mode": {
7413
7434
  "amis": {
7414
- "hidden": true
7435
+ "hidden": true,
7436
+ "required": false
7415
7437
  }
7416
7438
  },
7417
7439
  "sort": {
7418
7440
  "amis": {
7419
- "hidden": true
7441
+ "hidden": true,
7442
+ "required": false
7420
7443
  }
7421
7444
  },
7422
7445
  "show_count": {
7423
7446
  "amis": {
7424
- "hidden": true
7447
+ "hidden": true,
7448
+ "required": false
7425
7449
  }
7426
7450
  },
7427
7451
  "type": {
7428
7452
  "amis": {
7429
- "hidden": true
7453
+ "hidden": true,
7454
+ "required": false
7430
7455
  }
7431
7456
  },
7432
7457
  "shared": {
@@ -8211,14 +8236,14 @@
8211
8236
  {
8212
8237
  "type": "button",
8213
8238
  "label": instance.t('frontend_display_type_is_table'),
8214
- "onClick": "let url = document.location.pathname; var urlSearch = new URLSearchParams(document.location.search); if(urlSearch.get(\"side_object\") && urlSearch.get(\"side_listview_id\")){url=`/app/${props.data.appId}/${urlSearch.get(\"side_object\")}/grid/${urlSearch.get(\"side_listview_id\")}`;}; props.env.jumpTo(url + '?display=grid');",
8239
+ "onClick": "const key = 'tab_"+objectName+"_display';localStorage.setItem(key, 'grid');let url = document.location.pathname; var urlSearch = new URLSearchParams(document.location.search); if(urlSearch.get(\"side_object\") && urlSearch.get(\"side_listview_id\")){url=`/app/${props.data.appId}/${urlSearch.get(\"side_object\")}/grid/${urlSearch.get(\"side_listview_id\")}`;}; props.env.jumpTo(url + '?display=grid');",
8215
8240
  "rightIcon": displayAs != 'split' ? "fa fa-check" : null,
8216
8241
  "rightIconClassName": "m-l-sm"
8217
8242
  },
8218
8243
  {
8219
8244
  "type": "button",
8220
8245
  "label": instance.t('frontend_display_type_is_split'),
8221
- "onClick": "const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
8246
+ "onClick": "const key = 'tab_"+objectName+"_display';localStorage.setItem(key, 'split');const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
8222
8247
  "rightIcon": displayAs === 'split' ? "fa fa-check" : null,
8223
8248
  "rightIconClassName": "m-l-sm"
8224
8249
  }
@@ -8249,36 +8274,38 @@ const filterForm = scope.getComponents().find(function(n){
8249
8274
  const filterService = filterForm.context.getComponents().find(function(n){
8250
8275
  return n.props.type === "service";
8251
8276
  });
8252
- // filterService.setData({showFieldsFilter: !!!filterService.props.data.showFieldsFilter});
8277
+ let toShowFieldsFilter = !!!filterService.props.data.showFieldsFilter;
8278
+ filterService.setData({showFieldsFilter: toShowFieldsFilter});
8253
8279
  let resizeWindow = function(){
8254
8280
  //触发amis crud 高度重算
8255
8281
  setTimeout(()=>{
8256
8282
  window.dispatchEvent(new Event("resize"))
8257
8283
  }, 500);
8258
8284
  }
8259
- let isMobile = Steedos.isMobile();
8260
- if(filterService.props.data.showFieldsFilter){
8261
- if(isMobile){
8262
- // 手机上只能通过取消按钮来关闭搜索栏
8263
- return;
8264
- }
8265
- let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8266
- direction: "down",
8267
- name: "btn_filter_form_cancel"
8268
- });
8269
- buttonCancel.props.dispatchEvent('click', {}).then(function(){
8270
- resizeWindow();
8271
- });
8272
- }
8273
- else{
8274
- filterService.setData({showFieldsFilter: true});
8275
- resizeWindow();
8276
- if(isMobile){
8277
- // 手机端在显示搜索栏时隐藏刷新按钮
8278
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8279
- crudService && crudService.setData({showFieldsFilter: true});
8280
- }
8281
- }
8285
+ resizeWindow();
8286
+ // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8287
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8288
+ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
8289
+ // if(filterService.props.data.showFieldsFilter){
8290
+ // if(isMobile){
8291
+ // // 手机上只能通过取消按钮来关闭搜索栏
8292
+ // return;
8293
+ // }
8294
+ // let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8295
+ // direction: "down",
8296
+ // name: "btn_filter_form_cancel"
8297
+ // });
8298
+ // buttonCancel.props.dispatchEvent('click', {}).then(function(){
8299
+ // resizeWindow();
8300
+ // });
8301
+ // }
8302
+ // else{
8303
+ // if(isMobile){
8304
+ // // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8305
+ // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8306
+ // crudService && crudService.setData({showFieldsFilter: true});
8307
+ // }
8308
+ // }
8282
8309
  `;
8283
8310
 
8284
8311
 
@@ -8324,7 +8351,7 @@ else{
8324
8351
  },
8325
8352
  },
8326
8353
  filterVisible ? {
8327
- "label": "",
8354
+ "label": instance.t('frontend_button_search_tooltip'),
8328
8355
  "icon": "fa fa-search",
8329
8356
  "type": "button",
8330
8357
  "tooltip": instance.t('frontend_button_search_tooltip'),
@@ -8377,12 +8404,23 @@ else{
8377
8404
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
8378
8405
  },
8379
8406
  // getExportExcelToolbarButtonSchema(),
8407
+ getSettingListviewToolbarButtonSchema(),
8408
+ getDisplayAsButton(mainObject?.name),
8380
8409
  filterVisible ? {
8381
- "label": "",
8410
+ "label": instance.t('frontend_button_search_tooltip'),
8382
8411
  "icon": "fa fa-search",
8383
8412
  "tooltip": instance.t('frontend_button_search_tooltip'),
8384
8413
  "tooltipPlacement": "bottom",
8385
8414
  "type": "button",
8415
+ "badge": {
8416
+ "offset": [
8417
+ -5,
8418
+ 1
8419
+ ],
8420
+ "size":8,
8421
+ "animation": true,
8422
+ "visibleOn": "${isFieldsFilterEmpty == false}"
8423
+ },
8386
8424
  "align": "right",
8387
8425
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
8388
8426
  "onEvent": {
@@ -8395,9 +8433,7 @@ else{
8395
8433
  ]
8396
8434
  }
8397
8435
  }
8398
- } : {},
8399
- getSettingListviewToolbarButtonSchema(),
8400
- getDisplayAsButton(showDisplayAs)
8436
+ } : {}
8401
8437
  // {
8402
8438
  // "type": "search-box",
8403
8439
  // "align": "right",
@@ -9027,6 +9063,58 @@ else{
9027
9063
  "actions": [
9028
9064
  {
9029
9065
  "actionType": "reload"
9066
+ },
9067
+ {
9068
+ "actionType": "custom",
9069
+ "script": `
9070
+ const masterRecord = event.data._master?.record;
9071
+ const fieldConfig = ${JSON.stringify(field)};
9072
+ let reference_to = fieldConfig.reference_to;
9073
+ let saveValue;
9074
+ const newRecord = {
9075
+ _id: event.data.result.data.recordId,
9076
+ ...event.data.__super.__super
9077
+ }
9078
+ const saveField = fieldConfig.reference_to_field || '_id';
9079
+ const saveFieldValue = newRecord[saveField];
9080
+
9081
+ if( fieldConfig._reference_to && (_.isArray(fieldConfig._reference_to) || _.isFunction(fieldConfig._reference_to) || fieldConfig._reference_to.startsWith('function') ) ){
9082
+
9083
+ const fieldValue = masterRecord ? masterRecord[fieldConfig.name] : {o: reference_to, ids: []};
9084
+ const baseSaveValue = {
9085
+ o: reference_to,
9086
+ ids: [saveFieldValue]
9087
+ };
9088
+ if(fieldValue && fieldValue.o){
9089
+ if(fieldValue.o === reference_to){
9090
+ saveValue = fieldConfig.multiple ? { o: reference_to, ids: fieldValue.ids.concat(saveFieldValue)} : baseSaveValue;
9091
+ }else{
9092
+ saveValue = baseSaveValue;
9093
+ }
9094
+ }else{
9095
+ saveValue = baseSaveValue;
9096
+ }
9097
+
9098
+ }else{
9099
+ if(fieldConfig.multiple){
9100
+ // TODO: 连续新建多个记录时,因为获取的主记录不是实时的,所以只会勾选最后一个新建的记录。
9101
+ const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
9102
+ saveValue = fieldValue.concat(saveFieldValue);
9103
+ }else{
9104
+ saveValue = saveFieldValue;
9105
+ }
9106
+ }
9107
+
9108
+ const ctx = ${JSON.stringify(ctx)};
9109
+ const componentId = ctx.defaults.formSchema.id ? 'service-'+ctx.defaults.formSchema.id : 'new-'+ctx.defaults.formSchema.objectApiName;
9110
+ doAction({
9111
+ actionType: 'setValue',
9112
+ componentId: componentId,
9113
+ args: {
9114
+ value: { [fieldConfig.name]: saveValue }
9115
+ }
9116
+ });
9117
+ `
9030
9118
  }
9031
9119
  ]
9032
9120
  };
@@ -9257,7 +9345,7 @@ else{
9257
9345
  type: 'steedos-field-lookup',
9258
9346
  field,
9259
9347
  readonly,
9260
- ctx: {},
9348
+ ctx,
9261
9349
  }
9262
9350
  // return await lookupToAmisGroup(field, readonly, ctx);
9263
9351
  }
@@ -9411,8 +9499,8 @@ else{
9411
9499
  /*
9412
9500
  * @Author: baozhoutao@steedos.com
9413
9501
  * @Date: 2023-01-13 17:27:54
9414
- * @LastEditors: Please set LastEditors
9415
- * @LastEditTime: 2023-05-31 13:34:22
9502
+ * @LastEditors: liaodaxue
9503
+ * @LastEditTime: 2023-06-16 15:58:21
9416
9504
  * @Description:
9417
9505
  */
9418
9506
 
@@ -9464,6 +9552,7 @@ else{
9464
9552
  }else {
9465
9553
  return {
9466
9554
  "type": "input-rich-text",
9555
+ "receiver": "${context.rootUrl}/s3/images",
9467
9556
  "name": field.name
9468
9557
  }
9469
9558
  // return {
@@ -11147,13 +11236,13 @@ else{
11147
11236
  const masterRecord = self._master.record;
11148
11237
  const masterObjectName = self._master.objectName;
11149
11238
  let relatedValue = self._master.recordId;
11150
- if(refField.reference_to_field && refField.reference_to_field != '_id'){
11239
+ if(refField && refField.reference_to_field && refField.reference_to_field != '_id'){
11151
11240
  relatedValue = masterRecord[refField.reference_to_field]
11152
11241
  }
11153
11242
  let relatedFilters;
11154
11243
  if (
11155
- refField._reference_to ||
11156
- (refField.reference_to && !_.isString(refField.reference_to))
11244
+ refField && (refField._reference_to ||
11245
+ (refField.reference_to && !_.isString(refField.reference_to)))
11157
11246
  ) {
11158
11247
  relatedFilters = [
11159
11248
  [relatedKey + "/o", "=", masterObjectName],
@@ -11303,7 +11392,7 @@ else{
11303
11392
 
11304
11393
  const API_CACHE = 100;
11305
11394
 
11306
- function getReadonlyFormAdaptor(object, fields){
11395
+ function getReadonlyFormAdaptor(object, fields, options){
11307
11396
  let scriptStr = '';
11308
11397
  const selectFields = ___default__namespace.filter(fields, function(field){return field.name.indexOf('.') < 0 && ((field.type == 'select' && field.options) || ((field.type == 'lookup' || field.type == 'master_detail') && !field.reference_to))});
11309
11398
  const gridAndObjectFieldsName = ___default__namespace.map(___default__namespace.filter(fields, function(field){return field.name.indexOf('.') < 0 && (field.type === 'object' || field.type === 'grid')}), 'name');
@@ -11343,9 +11432,16 @@ else{
11343
11432
 
11344
11433
  return `
11345
11434
  if(payload.data.data.length === 0){
11346
- return {
11347
- status: 2,
11348
- msg: "无法找到记录"
11435
+ var isEditor = !!${options && options.isEditor};
11436
+ if(isEditor){
11437
+ // 设计器中始终显示表单,有记录则显示第一条记录,没记录时显示为空表单
11438
+ payload.data.data = [{}];
11439
+ }
11440
+ else{
11441
+ return {
11442
+ status: 2,
11443
+ msg: "无法找到记录"
11444
+ }
11349
11445
  }
11350
11446
  }
11351
11447
  if(payload.data.data){
@@ -11362,7 +11458,7 @@ else{
11362
11458
  var record = _.cloneDeep(data);
11363
11459
  try{
11364
11460
  _.each(gridAndObjectFieldsName, function(name){
11365
- data[name] = data._display[name];
11461
+ data[name] = data._display && data._display[name];
11366
11462
  })
11367
11463
  }catch(e){
11368
11464
  console.error(e)
@@ -11383,10 +11479,10 @@ else{
11383
11479
  async function getReadonlyFormInitApi(object, recordId, fields, options){
11384
11480
  return {
11385
11481
  method: "post",
11386
- url: getApi$2()+"&recordId=${recordId}",
11482
+ url: getApi$2() + '&objectName=${objectName}' + "&recordId=${recordId}",
11387
11483
  cache: API_CACHE,
11388
11484
  // requestAdaptor: "console.log('getReadonlyFormInitApi requestAdaptor', api);return api;",
11389
- adaptor: getReadonlyFormAdaptor(object, fields),
11485
+ adaptor: getReadonlyFormAdaptor(object, fields, options),
11390
11486
  data: await getFindOneQuery$1(object, recordId, fields, options),
11391
11487
  headers: {
11392
11488
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
@@ -12650,6 +12746,8 @@ else{
12650
12746
  };
12651
12747
  if(formSchema.id){
12652
12748
  amisSchema.id = `service-${formSchema.id}`;
12749
+ }else {
12750
+ amisSchema.id = `new-${objectSchema.name}`;
12653
12751
  }
12654
12752
  return amisSchema;
12655
12753
  }
@@ -12816,8 +12914,8 @@ else{
12816
12914
  /*
12817
12915
  * @Author: baozhoutao@steedos.com
12818
12916
  * @Date: 2022-07-05 15:55:39
12819
- * @LastEditors: Please set LastEditors
12820
- * @LastEditTime: 2023-05-17 09:09:33
12917
+ * @LastEditors: liaodaxue
12918
+ * @LastEditTime: 2023-06-20 14:05:50
12821
12919
  * @Description:
12822
12920
  */
12823
12921
 
@@ -12860,10 +12958,11 @@ else{
12860
12958
  if(!___default.isEmpty(relatedLists)){
12861
12959
  for (const relatedList of relatedLists) {
12862
12960
  const arr = relatedList.related_field_fullname.split(".");
12961
+ const foreign_key = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12863
12962
  related.push({
12864
12963
  masterObjectName: objectName,
12865
12964
  object_name: arr[0],
12866
- foreign_key: arr[1],
12965
+ foreign_key,
12867
12966
  label: relatedList.label,
12868
12967
  columns: relatedList.field_names,
12869
12968
  sort: relatedList.sort,
@@ -12876,10 +12975,11 @@ else{
12876
12975
  const details = [].concat(uiSchema.details || []);
12877
12976
  for (const detail of details) {
12878
12977
  const arr = detail.split(".");
12978
+ const foreign_key = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12879
12979
  related.push({
12880
12980
  masterObjectName: objectName,
12881
12981
  object_name: arr[0],
12882
- foreign_key: arr[1]
12982
+ foreign_key
12883
12983
  });
12884
12984
  }
12885
12985
  }
@@ -12911,14 +13011,16 @@ else{
12911
13011
  if(!___default.isEmpty(mainRelatedLists)){
12912
13012
  for (const relatedList of mainRelatedLists) {
12913
13013
  const arr = relatedList.related_field_fullname.split(".");
12914
- mainRelated[arr[0]] = arr[1];
13014
+ const foreign_key_value = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
13015
+ mainRelated[arr[0]] = foreign_key_value;
12915
13016
  }
12916
13017
  }else {
12917
13018
  const details = ___default.union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
12918
13019
  for (const detail of details) {
12919
13020
  const arr = detail.split(".");
13021
+ const foreign_key_value = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12920
13022
  if(!___default.has(mainRelated,arr[0])){
12921
- mainRelated[arr[0]] = arr[1];
13023
+ mainRelated[arr[0]] = foreign_key_value;
12922
13024
  }
12923
13025
  }
12924
13026
  }
@@ -16751,6 +16853,7 @@ else{
16751
16853
  "body": [
16752
16854
  {
16753
16855
  "type": "select",
16856
+ "inputClassName": "select_left",
16754
16857
  "name": leftName,
16755
16858
  "options": options,
16756
16859
  "value": "".concat(value.o)
@@ -17127,11 +17230,22 @@ else{
17127
17230
  if (defaultData) {
17128
17231
  // 让ObjectForm支持props中的dafaultData属性与上层组件配置的defaultData混合
17129
17232
  // 为了解决相关表新建时如果是表单类型微页面,因为找不到ObjectForm在哪层而造成无法设置ObjectForm的defaultData的问题
17130
- amisSchema.data.defaultData = __assign$2({ "&": "${defaultData}" }, defaultData);
17233
+ amisSchema.data.defaultData = __assign$2({ "&": "${defaultData}" }, defaultData //这里的defaultData是form组件的defaultData属性值
17234
+ );
17131
17235
  }
17132
17236
  uiSchema = schema.uiSchema;
17133
17237
  return [3 /*break*/, 4];
17134
- case 2: return [4 /*yield*/, getViewSchema(objectApiName, recordId, options)];
17238
+ case 2:
17239
+ // formInitProps
17240
+ if (!recordId && props.$$editor) {
17241
+ // 设计器中只读表单返回第一条记录
17242
+ options.formInitProps = {
17243
+ filters: [],
17244
+ queryOptions: "top: 1",
17245
+ isEditor: true
17246
+ };
17247
+ }
17248
+ return [4 /*yield*/, getViewSchema(objectApiName, recordId, options)];
17135
17249
  case 3:
17136
17250
  schema = _d.sent();
17137
17251
  amisSchema = schema.amisSchema;
@@ -17162,13 +17276,10 @@ else{
17162
17276
  return __generator(this, function (_g) {
17163
17277
  switch (_g.label) {
17164
17278
  case 0:
17165
- // console.time('AmisObjectListView')
17166
- console.log("AmisObjectListView props", props);
17167
17279
  $schema = props.$schema, top = props.top, perPage = props.perPage, _a = props.showHeader, showHeader = _a === void 0 ? true : _a, data = props.data, defaultData = props.defaultData, _b = props.className, className = _b === void 0 ? "" : _b, crudClassName = props.crudClassName, _c = props.showDisplayAs, showDisplayAs = _c === void 0 ? false : _c, sideSchema = props.sideSchema, props.columnsTogglable, _e = props.filterVisible, filterVisible = _e === void 0 ? true : _e, headerToolbarItems = props.headerToolbarItems, rowClassNameExpr = props.rowClassNameExpr;
17168
17280
  headerSchema = props.headerSchema;
17169
17281
  ctx = props.ctx;
17170
17282
  listName = (defaultData === null || defaultData === void 0 ? void 0 : defaultData.listName) || (data === null || data === void 0 ? void 0 : data.listName) || (props === null || props === void 0 ? void 0 : props.listName);
17171
- console.log('AmisObjectListView ==listName=>', listName);
17172
17283
  defaults = {};
17173
17284
  objectApiName = props.objectApiName || "space_users";
17174
17285
  if (!ctx) {
@@ -17223,7 +17334,7 @@ else{
17223
17334
  "actions": [
17224
17335
  {
17225
17336
  "args": {
17226
- "url": "/app/${appId}/${objectName}/view/${event.data.result.data.recordId}?display=${ls:page_display || 'grid'}&side_object=${objectName}&side_listview_id=${listName}",
17337
+ "url": "/app/${appId}/${objectName}/view/${event.data.result.data.recordId}?side_object=${objectName}&side_listview_id=${listName}",
17227
17338
  "blank": false
17228
17339
  },
17229
17340
  "actionType": "link",
@@ -17295,8 +17406,8 @@ else{
17295
17406
  "headers": {
17296
17407
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
17297
17408
  },
17298
- "requestAdaptor": "console.log('service listview schemaApi requestAdaptor======>');api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
17299
- "adaptor": "\n // console.log('service listview schemaApi adaptor....', api.body); \n let { appId, objectName, defaultListName: listName, display, formFactor: defaultFormFactor} = api.body;\n if(api.body.listName){\n listName = api.body.listName;\n }\n return new Promise((resolve)=>{\n const listViewSchemaProps = ".concat(JSON.stringify(listViewSchemaProps), ";\n const formFactor = ([\"split\"].indexOf(display) > -1) ? 'SMALL': defaultFormFactor;\n listViewSchemaProps.formFactor = formFactor;\n // console.log(\"====listViewSchemaProps===>\", listName, listViewSchemaProps)\n window.getListSchema(appId, objectName, listName, listViewSchemaProps).then((schema)=>{\n payload.data = schema.amisSchema;\n // console.log(\"payload================>\", payload)\n resolve(payload)\n });\n });\n ")
17409
+ "requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
17410
+ "adaptor": "\n // console.log('service listview schemaApi adaptor....', api.body); \n let { appId, objectName, defaultListName: listName, display, formFactor: defaultFormFactor} = api.body;\n if(api.body.listName){\n listName = api.body.listName;\n }\n return new Promise((resolve)=>{\n const listViewSchemaProps = ".concat(JSON.stringify(listViewSchemaProps), ";\n const formFactor = ([\"split\"].indexOf(display) > -1) ? 'SMALL': defaultFormFactor;\n listViewSchemaProps.formFactor = formFactor;\n listViewSchemaProps.displayAs = display;\n // console.log(\"====listViewSchemaProps===>\", listName, display, listViewSchemaProps)\n window.getListSchema(appId, objectName, listName, listViewSchemaProps).then((schema)=>{\n payload.data = schema.amisSchema;\n // console.log(\"payload================>\", payload)\n resolve(payload)\n });\n });\n ")
17300
17411
  },
17301
17412
  // "body": body,
17302
17413
  // "data": serviceData
@@ -18096,7 +18207,7 @@ else{
18096
18207
  schemaApi: {
18097
18208
  "method": "get",
18098
18209
  "url": "${context.rootUrl}/service/api/apps/".concat(appId, "/menus?mobile=true"),
18099
- "adaptor": "\n try {\n\n if(payload.children.length == 0){\n payload.data = {};\n return payload\n }\n const data = { nav: [] };\n const stacked = ".concat(stacked, ";\n const showIcon = ").concat(showIcon, ";\n const selectedId = '").concat(selectedId, "';\n let sum = 0;\n _.each(payload.children, (tab)=>{\n sum++;\n const classIcon = tab.icon.replace(/_/g,\"-\");\n if(sum >= 5){\n data.nav.push({\n \"label\": {\n type: 'tpl',\n tpl: `<span class='fill-slate-500 text-slate-700 block -ml-px no-underline group flex items-center text-[12px] font-medium rounded-md flex-col leading-3 nav-label'><svg class=\"slds-icon slds-icon_container slds-icon-standard-`+classIcon+` flex-shrink-0 h-10 w-10\"><use xlink:href=\"/assets/icons/standard-sprite/svg/symbols.svg#${tab.icon || 'account'}\"></use></svg><span>${tab.name}</span><i class=\"fa fa-angle-right\" aria-hidden=\"true\" style=\"position: absolute;right: 20px;color: #bababa;\"></i></span>`,\n className:'h-full flex items-center'\n },\n \"to\": tab.path,\n \"target\":tab.target\n });\n }else{\n data.nav.push({\n \"label\": {\n type: 'tpl',\n tpl: `<span class='fill-slate-500 text-slate-700 block -ml-px no-underline group flex items-center text-[12px] font-medium rounded-md flex-col leading-3 nav-label'><svg class=\"slds-icon slds-icon_container slds-icon-standard-`+classIcon+` flex-shrink-0 h-10 w-10\"><use xlink:href=\"/assets/icons/standard-sprite/svg/symbols.svg#${tab.icon || 'account'}\"></use></svg>${tab.name}</span>`,\n className:'h-full flex items-center'\n },\n \"to\": tab.path,\n \"target\":tab.target\n });\n }\n \n })\n\n payload.data = {\n \"type\": \"nav\",\n className: payload.children.length ==1 ? '").concat(className1, "' : '").concat(className, "',\n \"stacked\": ").concat(stacked, ",\n \"overflow\": {\n \"enable\": true,\n \"maxVisibleCount\": 4,\n \"overflowPopoverClassName\": \"steedos-global-footer-popup\",\n \"overflowLabel\":{\n \"type\": 'tpl',\n \"tpl\": `<span class='fill-slate-500 text-slate-700 block -ml-px no-underline group flex items-center text-[12px] font-medium rounded-md flex-col leading-3 nav-label'><svg class=\" flex-shrink-0 h-10 w-10\" style=\"padding:7px\"><use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#rows\"></use></svg>").concat(instance.t('Menu'), "</span>`,\n \"className\":'h-full flex items-center'\n },\n \"overflowIndicator\":\"\"\n },\n \"indentSize\": ").concat(indentSize, ",\n \"links\": data.nav,\n };\n } catch (error) {\n console.log(`error`, error)\n }\n return payload;\n "),
18210
+ "adaptor": "\n try {\n\n if(payload.children.length == 0){\n payload.data = {};\n return payload\n }\n const data = { nav: [] };\n const stacked = ".concat(stacked, ";\n const showIcon = ").concat(showIcon, ";\n const selectedId = '").concat(selectedId, "';\n let sum = 0;\n _.each(payload.children, (tab)=>{\n sum++;\n const classIcon = tab.icon.replace(/_/g,\"-\");\n if(sum >= 5){\n data.nav.push({\n \"label\": {\n type: 'tpl',\n tpl: `<span class='fill-slate-500 text-slate-700 block -ml-px no-underline group flex items-center text-[12px] font-medium rounded-md flex-col leading-3 nav-label'><svg class=\"slds-icon slds-icon_container slds-icon-standard-`+classIcon+` flex-shrink-0 h-10 w-10\"><use xlink:href=\"/assets/icons/standard-sprite/svg/symbols.svg#${tab.icon || 'account'}\"></use></svg><span>${tab.name}</span><i class=\"fa fa-angle-right\" aria-hidden=\"true\" style=\"position: absolute;right: 20px;color: #bababa;\"></i></span>`,\n className:'h-full flex items-center'\n },\n \"to\": tab.path,\n \"target\":tab.target\n });\n }else{\n data.nav.push({\n \"label\": {\n type: 'tpl',\n tpl: `<span class='fill-slate-500 truncate text-slate-700 block -ml-px no-underline group flex items-center text-[12px] font-medium rounded-md flex-col leading-3 nav-label'><svg class=\"slds-icon slds-icon_container slds-icon-standard-`+classIcon+` flex-shrink-0 h-10 w-10\"><use xlink:href=\"/assets/icons/standard-sprite/svg/symbols.svg#${tab.icon || 'account'}\"></use></svg><span class=\"truncate\" style=\"max-width: 20vw\">${tab.name}</span></span>`,\n className:'h-full flex items-center'\n },\n \"to\": tab.path,\n \"target\":tab.target\n });\n }\n \n })\n\n payload.data = {\n \"type\": \"nav\",\n className: payload.children.length ==1 ? '").concat(className1, "' : '").concat(className, "',\n \"stacked\": ").concat(stacked, ",\n \"overflow\": {\n \"enable\": true,\n \"maxVisibleCount\": 4,\n \"overflowPopoverClassName\": \"steedos-global-footer-popup\",\n \"overflowLabel\":{\n \"type\": 'tpl',\n \"tpl\": `<span class='fill-slate-500 truncate text-slate-700 block -ml-px no-underline group flex items-center text-[12px] font-medium rounded-md flex-col leading-3 nav-label'><svg class=\" flex-shrink-0 h-10 w-10\" style=\"padding:7px\"><use xlink:href=\"/assets/icons/utility-sprite/svg/symbols.svg#rows\"></use></svg><span class=\"truncate\" style=\"max-width: 20vw\">").concat(instance.t('frontend_menu'), "</span></span>`,\n \"className\":'h-full flex items-center'\n },\n \"overflowIndicator\":\"\"\n },\n \"indentSize\": ").concat(indentSize, ",\n \"links\": data.nav,\n };\n } catch (error) {\n console.log(`error`, error)\n }\n return payload;\n "),
18100
18211
  "headers": {
18101
18212
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
18102
18213
  }
@@ -18938,8 +19049,9 @@ else{
18938
19049
  switch (_a.label) {
18939
19050
  case 0:
18940
19051
  defaultFormFactor = props.formFactor, appId = props.appId, objectApiName = props.objectApiName, props.recordId, display = props.display;
18941
- //TODO 此代码应该在object page template中处理
18942
- Router$1.setTabDisplayAs(objectApiName, display);
19052
+ if (display) {
19053
+ Router$1.setTabDisplayAs(objectApiName, display);
19054
+ }
18943
19055
  recordSchema = {};
18944
19056
  return [4 /*yield*/, getPage({ type: 'record', appId: appId, objectName: objectApiName, formFactor: defaultFormFactor })];
18945
19057
  case 1:
@@ -18997,7 +19109,7 @@ else{
18997
19109
  "type": "wrapper",
18998
19110
  "size": "none",
18999
19111
  "className": {
19000
- "p-0 flex-shrink-0 w-[388px] border-r border-gray-300 bg-gray-100 shadow lg:order-first lg:flex lg:flex-col": "${display == 'split'}",
19112
+ "p-0 flex-shrink-0 min-w-[388px] w-fit border-r border-gray-300 bg-gray-100 shadow lg:order-first lg:flex lg:flex-col": "${display == 'split'}",
19001
19113
  'h-full': "${display != 'split'}",
19002
19114
  },
19003
19115
  "body": {