@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.
@@ -3489,7 +3489,7 @@ const getSteedosAuth = () => {
3489
3489
  * @Author: baozhoutao@steedos.com
3490
3490
  * @Date: 2022-08-16 17:02:08
3491
3491
  * @LastEditors: baozhoutao@steedos.com
3492
- * @LastEditTime: 2023-04-19 15:25:50
3492
+ * @LastEditTime: 2023-06-20 13:50:15
3493
3493
  * @Description:
3494
3494
  */
3495
3495
 
@@ -3500,14 +3500,14 @@ const Router$1 = {
3500
3500
  if(urlSearch.has('display')){
3501
3501
  return urlSearch.get('display')
3502
3502
  }
3503
- // const key = `tab.${tab_id}.display`;
3504
- const key = `page_display`;
3503
+ const key = `tab_${tab_id}_display`;
3504
+ // const key = `page_display`;
3505
3505
  const value = localStorage.getItem(key);
3506
3506
  return value ? value : 'grid'
3507
3507
  },
3508
3508
 
3509
3509
  setTabDisplayAs(tab_id, displayAs){
3510
- const key = `tab.${tab_id}.display`;
3510
+ const key = `tab_${tab_id}_display`;
3511
3511
  localStorage.setItem(key, displayAs);
3512
3512
  },
3513
3513
  getAppPath({formFactor, appId}){
@@ -3521,15 +3521,10 @@ const Router$1 = {
3521
3521
  },
3522
3522
  getObjectDetailPath(props){
3523
3523
  const {formFactor, appId, objectName, recordId, listViewName, _templateType} = props;
3524
- // var urlParams = new URLSearchParams(window.location.search);
3525
- // if(objectName === 'instances'){
3526
- // return `/workflow/space/\${context.tenantId}/\${listName}/${recordId}`;
3527
- // }
3528
- const displayAs = Router$1.getTabDisplayAs(objectName); //urlParams.get("display") ||
3529
3524
  if(_templateType === 'JavaScript'){
3530
- return `/app/${appId}/${objectName}/view/${recordId}?display=${displayAs}&side_object=<%=item.objectName%>&side_listview_id=<%=item.listName%>`;
3525
+ return `/app/${appId}/${objectName}/view/${recordId}?side_object=<%=item.objectName%>&side_listview_id=<%=item.listName%>`;
3531
3526
  }
3532
- return `/app/${appId}/${objectName}/view/${recordId}?display=${displayAs}&side_object=\${objectName}&side_listview_id=\${listName}`;
3527
+ return `/app/${appId}/${objectName}/view/${recordId}?side_object=\${objectName}&side_listview_id=\${listName}`;
3533
3528
  },
3534
3529
  getObjectRelatedViewPath({formFactor, appId, masterObjectName, masterRecordId, objectName, foreignKey}){
3535
3530
  return `/app/${appId}/${masterObjectName}/${masterRecordId}/${objectName}/grid?related_field_name=${foreignKey}`;
@@ -6279,7 +6274,10 @@ async function getObjectFieldsFilterFormSchema(ctx) {
6279
6274
  const formSchema = {
6280
6275
  "type": "service",
6281
6276
  "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
6282
- "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",
6277
+ "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",
6278
+ "style":{
6279
+ "max-height":ctx.formFactor === 'SMALL'?"30vh":"unset"
6280
+ },
6283
6281
  "schemaApi": {
6284
6282
  method: 'post',
6285
6283
  url: `\${context.rootUrl}/graphql?reload=\${filterFormSearchableFields|join}`,
@@ -6368,28 +6366,42 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6368
6366
  // }
6369
6367
  // }
6370
6368
  // listView.handleFilterSubmit(Object.assign({}, removedValues, filterFormValues));
6371
-
6372
- let isMobile = Steedos.isMobile();
6373
- if(isMobile){
6374
- // 手机端点击搜索的时候自动收起搜索栏
6375
- let resizeWindow = function(){
6376
- //触发amis crud 高度重算
6377
- setTimeout(()=>{
6378
- window.dispatchEvent(new Event("resize"))
6379
- }, 500);
6380
- }
6381
- const filterService = filterForm.context.getComponents().find(function(n){
6382
- return n.props.type === "service";
6383
- });
6384
- filterService.setData({showFieldsFilter: false});
6385
- resizeWindow();
6386
- // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6387
- let filterFormValues = event.data;
6388
- let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6389
- let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6390
- let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6391
- crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter: false});
6369
+ // 点击搜索的时候自动收起搜索栏
6370
+ let resizeWindow = function(){
6371
+ //触发amis crud 高度重算
6372
+ setTimeout(()=>{
6373
+ window.dispatchEvent(new Event("resize"))
6374
+ }, 500);
6392
6375
  }
6376
+ const filterService = filterForm.context.getComponents().find(function(n){
6377
+ return n.props.type === "service";
6378
+ });
6379
+ let showFieldsFilter = false;
6380
+ const isMobile = window.innerWidth < 768;
6381
+ if(event.data.__from_fields_filter_settings_confirm){
6382
+ // 如果是从设置搜索项点击确认按钮触发的搜索事件不应该自动关闭搜索栏
6383
+ showFieldsFilter = true;
6384
+ }
6385
+ else if(isMobile){
6386
+ // 如果是手机端,点击搜索后自动关闭搜索栏
6387
+ showFieldsFilter = false;
6388
+ }
6389
+ else if(event.data.displayAs === "split") {
6390
+ // PC上分栏模式下的列表,始终按手机上效果处理,即自动关闭搜索栏
6391
+ showFieldsFilter = false;
6392
+ }
6393
+ else if(window.innerHeight >= 1200){
6394
+ // 高分辨率屏幕(2k+),列表高度比较高,没必要自动关闭搜索栏
6395
+ showFieldsFilter = true;
6396
+ }
6397
+ filterService.setData({showFieldsFilter});
6398
+ resizeWindow();
6399
+ // 使用filterForm.getValues()的话,并不能拿到本地存储中的过滤条件,所以需要从event.data中取。
6400
+ let filterFormValues = event.data;
6401
+ let isFieldsFilterEmpty = SteedosUI.isFilterFormValuesEmpty(filterFormValues);
6402
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
6403
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
6404
+ crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
6393
6405
  `;
6394
6406
  const onCancelScript = `
6395
6407
  const scope = event.context.scoped;
@@ -6428,12 +6440,9 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6428
6440
  setTimeout(()=>{
6429
6441
  window.dispatchEvent(new Event("resize"))
6430
6442
  }, 100);
6431
- let isMobile = Steedos.isMobile();
6432
- if(isMobile){
6433
- // 手机端移除搜索按钮上的红点
6434
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6435
- crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6436
- }
6443
+ // 移除搜索按钮上的红点
6444
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
6445
+ crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
6437
6446
  `;
6438
6447
  const dataProviderInited = `
6439
6448
  const objectName = data.objectName;
@@ -6486,17 +6495,11 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6486
6495
  || (_.isArray(n) && _.isEmpty(n.filter(function(item){return !_.isNil(item)})))
6487
6496
  || (_.isString(n) && n.length === 0);
6488
6497
  });
6489
- // 有过滤条件时自动展开搜索栏
6498
+ // 有过滤条件时只显示搜索按钮上的红点,不自动展开搜索栏
6490
6499
  if(!_.isEmpty(omitedEmptyFormValue)){
6491
- let isMobile = Steedos.isMobile();
6492
- if(isMobile){
6493
- // 手机端不展开,只显示搜索按钮上的红点
6494
- let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6495
- crudService && crudService.setData({isFieldsFilterEmpty: false});
6496
- }
6497
- else{
6498
- setData({ showFieldsFilter: true });
6499
- }
6500
+ let crudService = SteedosUI.getRef(data.$scopeId).getComponentById("service_listview_" + data.objectName)
6501
+ crudService && crudService.setData({isFieldsFilterEmpty: false});
6502
+ // setData({ showFieldsFilter: true });//自动展开搜索栏
6500
6503
  }
6501
6504
  }
6502
6505
  }
@@ -6762,7 +6765,10 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
6762
6765
  },
6763
6766
  {
6764
6767
  "actionType": "click",
6765
- "componentId": btnSearchId
6768
+ "componentId": btnSearchId,
6769
+ "args": {
6770
+ "__from_fields_filter_settings_confirm": true
6771
+ }
6766
6772
  },
6767
6773
  {
6768
6774
  "componentId": "",
@@ -7294,7 +7300,8 @@ const getNewListviewButtonSchema = ()=>{
7294
7300
  "name":"",
7295
7301
  "label":"",
7296
7302
  "filters":"",
7297
- "shared":false
7303
+ "shared":false,
7304
+ "object_name": "${targetObjectName}",
7298
7305
  },
7299
7306
  "fieldsExtend": fieldsExtend$4(),
7300
7307
  "fields": fields$1(),
@@ -7341,13 +7348,11 @@ function fields$1(){
7341
7348
  "object_name",
7342
7349
  "filter_scope",
7343
7350
  "show_count",
7344
- "columns.$.field",
7345
- "columns.$.width",
7346
- "sort.$.field_name",
7347
- "sort.$.order",
7351
+ "columns",
7352
+ "sort",
7348
7353
  "filters",
7349
- "mobile_columns.$.field",
7350
- "searchable_fields.$.field",
7354
+ "mobile_columns",
7355
+ "searchable_fields",
7351
7356
  "is_system",
7352
7357
  "shared"
7353
7358
  ]
@@ -7360,7 +7365,8 @@ function fieldsExtend$4(){
7360
7365
  },
7361
7366
  "name": {
7362
7367
  "amis": {
7363
- "hidden": true
7368
+ "hidden": true,
7369
+ "required": false
7364
7370
  }
7365
7371
  },
7366
7372
  "object_name": {
@@ -7370,37 +7376,56 @@ function fieldsExtend$4(){
7370
7376
  },
7371
7377
  "filter_scope": {
7372
7378
  "amis": {
7373
- "hidden": true
7379
+ "hidden": true,
7380
+ "required": false
7374
7381
  }
7375
7382
  },
7376
7383
  "columns": {
7377
7384
  "amis": {
7378
- "hidden": true
7385
+ "hidden": true,
7386
+ "required": false
7387
+ }
7388
+ },
7389
+ "mobile_columns":{
7390
+ "amis": {
7391
+ "hidden": true,
7392
+ "required": false
7393
+ }
7394
+ },
7395
+ "searchable_fields":{
7396
+ "amis": {
7397
+ "hidden": true,
7398
+ "required": false
7379
7399
  }
7380
7400
  },
7381
7401
  "filter_fields": {
7382
7402
  "amis": {
7383
- "hidden": true
7403
+ "hidden": true,
7404
+ "required": false
7384
7405
  }
7385
7406
  },
7386
7407
  "scrolling_mode": {
7387
7408
  "amis": {
7388
- "hidden": true
7409
+ "hidden": true,
7410
+ "required": false
7389
7411
  }
7390
7412
  },
7391
7413
  "sort": {
7392
7414
  "amis": {
7393
- "hidden": true
7415
+ "hidden": true,
7416
+ "required": false
7394
7417
  }
7395
7418
  },
7396
7419
  "show_count": {
7397
7420
  "amis": {
7398
- "hidden": true
7421
+ "hidden": true,
7422
+ "required": false
7399
7423
  }
7400
7424
  },
7401
7425
  "type": {
7402
7426
  "amis": {
7403
- "hidden": true
7427
+ "hidden": true,
7428
+ "required": false
7404
7429
  }
7405
7430
  },
7406
7431
  "shared": {
@@ -8185,14 +8210,14 @@ const getDisplayAsButton = function(objectName, showDisplayAs){
8185
8210
  {
8186
8211
  "type": "button",
8187
8212
  "label": instance.t('frontend_display_type_is_table'),
8188
- "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');",
8213
+ "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');",
8189
8214
  "rightIcon": displayAs != 'split' ? "fa fa-check" : null,
8190
8215
  "rightIconClassName": "m-l-sm"
8191
8216
  },
8192
8217
  {
8193
8218
  "type": "button",
8194
8219
  "label": instance.t('frontend_display_type_is_split'),
8195
- "onClick": "const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
8220
+ "onClick": "const key = 'tab_"+objectName+"_display';localStorage.setItem(key, 'split');const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
8196
8221
  "rightIcon": displayAs === 'split' ? "fa fa-check" : null,
8197
8222
  "rightIconClassName": "m-l-sm"
8198
8223
  }
@@ -8223,36 +8248,38 @@ const filterForm = scope.getComponents().find(function(n){
8223
8248
  const filterService = filterForm.context.getComponents().find(function(n){
8224
8249
  return n.props.type === "service";
8225
8250
  });
8226
- // filterService.setData({showFieldsFilter: !!!filterService.props.data.showFieldsFilter});
8251
+ let toShowFieldsFilter = !!!filterService.props.data.showFieldsFilter;
8252
+ filterService.setData({showFieldsFilter: toShowFieldsFilter});
8227
8253
  let resizeWindow = function(){
8228
8254
  //触发amis crud 高度重算
8229
8255
  setTimeout(()=>{
8230
8256
  window.dispatchEvent(new Event("resize"))
8231
8257
  }, 500);
8232
8258
  }
8233
- let isMobile = Steedos.isMobile();
8234
- if(filterService.props.data.showFieldsFilter){
8235
- if(isMobile){
8236
- // 手机上只能通过取消按钮来关闭搜索栏
8237
- return;
8238
- }
8239
- let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8240
- direction: "down",
8241
- name: "btn_filter_form_cancel"
8242
- });
8243
- buttonCancel.props.dispatchEvent('click', {}).then(function(){
8244
- resizeWindow();
8245
- });
8246
- }
8247
- else{
8248
- filterService.setData({showFieldsFilter: true});
8249
- resizeWindow();
8250
- if(isMobile){
8251
- // 手机端在显示搜索栏时隐藏刷新按钮
8252
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8253
- crudService && crudService.setData({showFieldsFilter: true});
8254
- }
8255
- }
8259
+ resizeWindow();
8260
+ // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8261
+ let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8262
+ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
8263
+ // if(filterService.props.data.showFieldsFilter){
8264
+ // if(isMobile){
8265
+ // // 手机上只能通过取消按钮来关闭搜索栏
8266
+ // return;
8267
+ // }
8268
+ // let buttonCancel = SteedosUI.getClosestAmisComponentByType(filterForm.context, "button", {
8269
+ // direction: "down",
8270
+ // name: "btn_filter_form_cancel"
8271
+ // });
8272
+ // buttonCancel.props.dispatchEvent('click', {}).then(function(){
8273
+ // resizeWindow();
8274
+ // });
8275
+ // }
8276
+ // else{
8277
+ // if(isMobile){
8278
+ // // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
8279
+ // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8280
+ // crudService && crudService.setData({showFieldsFilter: true});
8281
+ // }
8282
+ // }
8256
8283
  `;
8257
8284
 
8258
8285
 
@@ -8298,7 +8325,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
8298
8325
  },
8299
8326
  },
8300
8327
  filterVisible ? {
8301
- "label": "",
8328
+ "label": instance.t('frontend_button_search_tooltip'),
8302
8329
  "icon": "fa fa-search",
8303
8330
  "type": "button",
8304
8331
  "tooltip": instance.t('frontend_button_search_tooltip'),
@@ -8351,12 +8378,23 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
8351
8378
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
8352
8379
  },
8353
8380
  // getExportExcelToolbarButtonSchema(),
8381
+ getSettingListviewToolbarButtonSchema(),
8382
+ getDisplayAsButton(mainObject?.name),
8354
8383
  filterVisible ? {
8355
- "label": "",
8384
+ "label": instance.t('frontend_button_search_tooltip'),
8356
8385
  "icon": "fa fa-search",
8357
8386
  "tooltip": instance.t('frontend_button_search_tooltip'),
8358
8387
  "tooltipPlacement": "bottom",
8359
8388
  "type": "button",
8389
+ "badge": {
8390
+ "offset": [
8391
+ -5,
8392
+ 1
8393
+ ],
8394
+ "size":8,
8395
+ "animation": true,
8396
+ "visibleOn": "${isFieldsFilterEmpty == false}"
8397
+ },
8360
8398
  "align": "right",
8361
8399
  "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
8362
8400
  "onEvent": {
@@ -8369,9 +8407,7 @@ function getObjectHeaderToolbar(mainObject, formFactor, {showDisplayAs = false,
8369
8407
  ]
8370
8408
  }
8371
8409
  }
8372
- } : {},
8373
- getSettingListviewToolbarButtonSchema(),
8374
- getDisplayAsButton(showDisplayAs)
8410
+ } : {}
8375
8411
  // {
8376
8412
  // "type": "search-box",
8377
8413
  // "align": "right",
@@ -9001,6 +9037,58 @@ async function lookupToAmisPicker(field, readonly, ctx){
9001
9037
  "actions": [
9002
9038
  {
9003
9039
  "actionType": "reload"
9040
+ },
9041
+ {
9042
+ "actionType": "custom",
9043
+ "script": `
9044
+ const masterRecord = event.data._master?.record;
9045
+ const fieldConfig = ${JSON.stringify(field)};
9046
+ let reference_to = fieldConfig.reference_to;
9047
+ let saveValue;
9048
+ const newRecord = {
9049
+ _id: event.data.result.data.recordId,
9050
+ ...event.data.__super.__super
9051
+ }
9052
+ const saveField = fieldConfig.reference_to_field || '_id';
9053
+ const saveFieldValue = newRecord[saveField];
9054
+
9055
+ if( fieldConfig._reference_to && (_.isArray(fieldConfig._reference_to) || _.isFunction(fieldConfig._reference_to) || fieldConfig._reference_to.startsWith('function') ) ){
9056
+
9057
+ const fieldValue = masterRecord ? masterRecord[fieldConfig.name] : {o: reference_to, ids: []};
9058
+ const baseSaveValue = {
9059
+ o: reference_to,
9060
+ ids: [saveFieldValue]
9061
+ };
9062
+ if(fieldValue && fieldValue.o){
9063
+ if(fieldValue.o === reference_to){
9064
+ saveValue = fieldConfig.multiple ? { o: reference_to, ids: fieldValue.ids.concat(saveFieldValue)} : baseSaveValue;
9065
+ }else{
9066
+ saveValue = baseSaveValue;
9067
+ }
9068
+ }else{
9069
+ saveValue = baseSaveValue;
9070
+ }
9071
+
9072
+ }else{
9073
+ if(fieldConfig.multiple){
9074
+ // TODO: 连续新建多个记录时,因为获取的主记录不是实时的,所以只会勾选最后一个新建的记录。
9075
+ const fieldValue = (masterRecord && masterRecord[fieldConfig.name]) || [];
9076
+ saveValue = fieldValue.concat(saveFieldValue);
9077
+ }else{
9078
+ saveValue = saveFieldValue;
9079
+ }
9080
+ }
9081
+
9082
+ const ctx = ${JSON.stringify(ctx)};
9083
+ const componentId = ctx.defaults.formSchema.id ? 'service-'+ctx.defaults.formSchema.id : 'new-'+ctx.defaults.formSchema.objectApiName;
9084
+ doAction({
9085
+ actionType: 'setValue',
9086
+ componentId: componentId,
9087
+ args: {
9088
+ value: { [fieldConfig.name]: saveValue }
9089
+ }
9090
+ });
9091
+ `
9004
9092
  }
9005
9093
  ]
9006
9094
  };
@@ -9231,7 +9319,7 @@ async function lookupToAmis(field, readonly, ctx){
9231
9319
  type: 'steedos-field-lookup',
9232
9320
  field,
9233
9321
  readonly,
9234
- ctx: {},
9322
+ ctx,
9235
9323
  }
9236
9324
  // return await lookupToAmisGroup(field, readonly, ctx);
9237
9325
  }
@@ -9385,8 +9473,8 @@ async function getIdsPickerSchema(field, readonly, ctx){
9385
9473
  /*
9386
9474
  * @Author: baozhoutao@steedos.com
9387
9475
  * @Date: 2023-01-13 17:27:54
9388
- * @LastEditors: Please set LastEditors
9389
- * @LastEditTime: 2023-05-31 13:34:22
9476
+ * @LastEditors: liaodaxue
9477
+ * @LastEditTime: 2023-06-16 15:58:21
9390
9478
  * @Description:
9391
9479
  */
9392
9480
 
@@ -9438,6 +9526,7 @@ const getHtmlFieldSchema = (field, readonly, ctx)=>{
9438
9526
  }else {
9439
9527
  return {
9440
9528
  "type": "input-rich-text",
9529
+ "receiver": "${context.rootUrl}/s3/images",
9441
9530
  "name": field.name
9442
9531
  }
9443
9532
  // return {
@@ -11121,13 +11210,13 @@ async function getTableApi(mainObject, fields, options){
11121
11210
  const masterRecord = self._master.record;
11122
11211
  const masterObjectName = self._master.objectName;
11123
11212
  let relatedValue = self._master.recordId;
11124
- if(refField.reference_to_field && refField.reference_to_field != '_id'){
11213
+ if(refField && refField.reference_to_field && refField.reference_to_field != '_id'){
11125
11214
  relatedValue = masterRecord[refField.reference_to_field]
11126
11215
  }
11127
11216
  let relatedFilters;
11128
11217
  if (
11129
- refField._reference_to ||
11130
- (refField.reference_to && !_.isString(refField.reference_to))
11218
+ refField && (refField._reference_to ||
11219
+ (refField.reference_to && !_.isString(refField.reference_to)))
11131
11220
  ) {
11132
11221
  relatedFilters = [
11133
11222
  [relatedKey + "/o", "=", masterObjectName],
@@ -11277,7 +11366,7 @@ function getRecordPermissionsApi(object, recordId, options){
11277
11366
 
11278
11367
  const API_CACHE = 100;
11279
11368
 
11280
- function getReadonlyFormAdaptor(object, fields){
11369
+ function getReadonlyFormAdaptor(object, fields, options){
11281
11370
  let scriptStr = '';
11282
11371
  const selectFields = ___default.filter(fields, function(field){return field.name.indexOf('.') < 0 && ((field.type == 'select' && field.options) || ((field.type == 'lookup' || field.type == 'master_detail') && !field.reference_to))});
11283
11372
  const gridAndObjectFieldsName = ___default.map(___default.filter(fields, function(field){return field.name.indexOf('.') < 0 && (field.type === 'object' || field.type === 'grid')}), 'name');
@@ -11317,9 +11406,16 @@ function getReadonlyFormAdaptor(object, fields){
11317
11406
 
11318
11407
  return `
11319
11408
  if(payload.data.data.length === 0){
11320
- return {
11321
- status: 2,
11322
- msg: "无法找到记录"
11409
+ var isEditor = !!${options && options.isEditor};
11410
+ if(isEditor){
11411
+ // 设计器中始终显示表单,有记录则显示第一条记录,没记录时显示为空表单
11412
+ payload.data.data = [{}];
11413
+ }
11414
+ else{
11415
+ return {
11416
+ status: 2,
11417
+ msg: "无法找到记录"
11418
+ }
11323
11419
  }
11324
11420
  }
11325
11421
  if(payload.data.data){
@@ -11336,7 +11432,7 @@ function getReadonlyFormAdaptor(object, fields){
11336
11432
  var record = _.cloneDeep(data);
11337
11433
  try{
11338
11434
  _.each(gridAndObjectFieldsName, function(name){
11339
- data[name] = data._display[name];
11435
+ data[name] = data._display && data._display[name];
11340
11436
  })
11341
11437
  }catch(e){
11342
11438
  console.error(e)
@@ -11357,10 +11453,10 @@ function getReadonlyFormAdaptor(object, fields){
11357
11453
  async function getReadonlyFormInitApi(object, recordId, fields, options){
11358
11454
  return {
11359
11455
  method: "post",
11360
- url: getApi$2()+"&recordId=${recordId}",
11456
+ url: getApi$2() + '&objectName=${objectName}' + "&recordId=${recordId}",
11361
11457
  cache: API_CACHE,
11362
11458
  // requestAdaptor: "console.log('getReadonlyFormInitApi requestAdaptor', api);return api;",
11363
- adaptor: getReadonlyFormAdaptor(object, fields),
11459
+ adaptor: getReadonlyFormAdaptor(object, fields, options),
11364
11460
  data: await getFindOneQuery$1(object, recordId, fields, options),
11365
11461
  headers: {
11366
11462
  Authorization: "Bearer ${context.tenantId},${context.authToken}"
@@ -12624,6 +12720,8 @@ async function getObjectForm(objectSchema, ctx){
12624
12720
  };
12625
12721
  if(formSchema.id){
12626
12722
  amisSchema.id = `service-${formSchema.id}`;
12723
+ }else {
12724
+ amisSchema.id = `new-${objectSchema.name}`;
12627
12725
  }
12628
12726
  return amisSchema;
12629
12727
  }
@@ -12790,8 +12888,8 @@ const getRecordPermissions = async (objectName, recordId)=>{
12790
12888
  /*
12791
12889
  * @Author: baozhoutao@steedos.com
12792
12890
  * @Date: 2022-07-05 15:55:39
12793
- * @LastEditors: Please set LastEditors
12794
- * @LastEditTime: 2023-05-17 09:09:33
12891
+ * @LastEditors: liaodaxue
12892
+ * @LastEditTime: 2023-06-20 14:05:50
12795
12893
  * @Description:
12796
12894
  */
12797
12895
 
@@ -12834,10 +12932,11 @@ async function getObjectRelatedList(
12834
12932
  if(!isEmpty(relatedLists)){
12835
12933
  for (const relatedList of relatedLists) {
12836
12934
  const arr = relatedList.related_field_fullname.split(".");
12935
+ const foreign_key = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12837
12936
  related.push({
12838
12937
  masterObjectName: objectName,
12839
12938
  object_name: arr[0],
12840
- foreign_key: arr[1],
12939
+ foreign_key,
12841
12940
  label: relatedList.label,
12842
12941
  columns: relatedList.field_names,
12843
12942
  sort: relatedList.sort,
@@ -12850,10 +12949,11 @@ async function getObjectRelatedList(
12850
12949
  const details = [].concat(uiSchema.details || []);
12851
12950
  for (const detail of details) {
12852
12951
  const arr = detail.split(".");
12952
+ const foreign_key = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12853
12953
  related.push({
12854
12954
  masterObjectName: objectName,
12855
12955
  object_name: arr[0],
12856
- foreign_key: arr[1]
12956
+ foreign_key
12857
12957
  });
12858
12958
  }
12859
12959
  }
@@ -12885,14 +12985,16 @@ async function getRecordDetailRelatedListSchema(objectName, recordId, relatedObj
12885
12985
  if(!isEmpty(mainRelatedLists)){
12886
12986
  for (const relatedList of mainRelatedLists) {
12887
12987
  const arr = relatedList.related_field_fullname.split(".");
12888
- mainRelated[arr[0]] = arr[1];
12988
+ const foreign_key_value = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12989
+ mainRelated[arr[0]] = foreign_key_value;
12889
12990
  }
12890
12991
  }else {
12891
12992
  const details = union(mainObjectUiSchema.details,mainObjectUiSchema.lookup_details) || [];
12892
12993
  for (const detail of details) {
12893
12994
  const arr = detail.split(".");
12995
+ const foreign_key_value = arr[2] ? arr[1]+'.'+arr[2] : arr[1];
12894
12996
  if(!has(mainRelated,arr[0])){
12895
- mainRelated[arr[0]] = arr[1];
12997
+ mainRelated[arr[0]] = foreign_key_value;
12896
12998
  }
12897
12999
  }
12898
13000
  }
@@ -16725,6 +16827,7 @@ var getSchema = function (field, value, ctx) { return __awaiter(void 0, void 0,
16725
16827
  "body": [
16726
16828
  {
16727
16829
  "type": "select",
16830
+ "inputClassName": "select_left",
16728
16831
  "name": leftName,
16729
16832
  "options": options,
16730
16833
  "value": "".concat(value.o)
@@ -17101,11 +17204,22 @@ var AmisObjectForm = function (props) { return __awaiter(void 0, void 0, void 0,
17101
17204
  if (defaultData) {
17102
17205
  // 让ObjectForm支持props中的dafaultData属性与上层组件配置的defaultData混合
17103
17206
  // 为了解决相关表新建时如果是表单类型微页面,因为找不到ObjectForm在哪层而造成无法设置ObjectForm的defaultData的问题
17104
- amisSchema.data.defaultData = __assign$2({ "&": "${defaultData}" }, defaultData);
17207
+ amisSchema.data.defaultData = __assign$2({ "&": "${defaultData}" }, defaultData //这里的defaultData是form组件的defaultData属性值
17208
+ );
17105
17209
  }
17106
17210
  uiSchema = schema.uiSchema;
17107
17211
  return [3 /*break*/, 4];
17108
- case 2: return [4 /*yield*/, getViewSchema(objectApiName, recordId, options)];
17212
+ case 2:
17213
+ // formInitProps
17214
+ if (!recordId && props.$$editor) {
17215
+ // 设计器中只读表单返回第一条记录
17216
+ options.formInitProps = {
17217
+ filters: [],
17218
+ queryOptions: "top: 1",
17219
+ isEditor: true
17220
+ };
17221
+ }
17222
+ return [4 /*yield*/, getViewSchema(objectApiName, recordId, options)];
17109
17223
  case 3:
17110
17224
  schema = _d.sent();
17111
17225
  amisSchema = schema.amisSchema;
@@ -17136,13 +17250,10 @@ var AmisObjectListView = function (props) { return __awaiter(void 0, void 0, voi
17136
17250
  return __generator(this, function (_g) {
17137
17251
  switch (_g.label) {
17138
17252
  case 0:
17139
- // console.time('AmisObjectListView')
17140
- console.log("AmisObjectListView props", props);
17141
17253
  $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;
17142
17254
  headerSchema = props.headerSchema;
17143
17255
  ctx = props.ctx;
17144
17256
  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);
17145
- console.log('AmisObjectListView ==listName=>', listName);
17146
17257
  defaults = {};
17147
17258
  objectApiName = props.objectApiName || "space_users";
17148
17259
  if (!ctx) {
@@ -17197,7 +17308,7 @@ var AmisObjectListView = function (props) { return __awaiter(void 0, void 0, voi
17197
17308
  "actions": [
17198
17309
  {
17199
17310
  "args": {
17200
- "url": "/app/${appId}/${objectName}/view/${event.data.result.data.recordId}?display=${ls:page_display || 'grid'}&side_object=${objectName}&side_listview_id=${listName}",
17311
+ "url": "/app/${appId}/${objectName}/view/${event.data.result.data.recordId}?side_object=${objectName}&side_listview_id=${listName}",
17201
17312
  "blank": false
17202
17313
  },
17203
17314
  "actionType": "link",
@@ -17269,8 +17380,8 @@ var AmisObjectListView = function (props) { return __awaiter(void 0, void 0, voi
17269
17380
  "headers": {
17270
17381
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
17271
17382
  },
17272
- "requestAdaptor": "console.log('service listview schemaApi requestAdaptor======>');api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
17273
- "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 ")
17383
+ "requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
17384
+ "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 ")
17274
17385
  },
17275
17386
  // "body": body,
17276
17387
  // "data": serviceData
@@ -18070,7 +18181,7 @@ var AmisGlobalFooter = function (props) { return __awaiter(void 0, void 0, void
18070
18181
  schemaApi: {
18071
18182
  "method": "get",
18072
18183
  "url": "${context.rootUrl}/service/api/apps/".concat(appId, "/menus?mobile=true"),
18073
- "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 "),
18184
+ "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 "),
18074
18185
  "headers": {
18075
18186
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
18076
18187
  }
@@ -18912,8 +19023,9 @@ var PageRecordDetail = function (props) { return __awaiter(void 0, void 0, void
18912
19023
  switch (_a.label) {
18913
19024
  case 0:
18914
19025
  defaultFormFactor = props.formFactor, appId = props.appId, objectApiName = props.objectApiName, props.recordId, display = props.display;
18915
- //TODO 此代码应该在object page template中处理
18916
- Router$1.setTabDisplayAs(objectApiName, display);
19026
+ if (display) {
19027
+ Router$1.setTabDisplayAs(objectApiName, display);
19028
+ }
18917
19029
  recordSchema = {};
18918
19030
  return [4 /*yield*/, getPage({ type: 'record', appId: appId, objectName: objectApiName, formFactor: defaultFormFactor })];
18919
19031
  case 1:
@@ -18971,7 +19083,7 @@ var PageObject = function (props) { return __awaiter(void 0, void 0, void 0, fun
18971
19083
  "type": "wrapper",
18972
19084
  "size": "none",
18973
19085
  "className": {
18974
- "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'}",
19086
+ "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'}",
18975
19087
  'h-full': "${display != 'split'}",
18976
19088
  },
18977
19089
  "body": {