@steedos-widgets/sortable 3.6.2-beta.8 → 3.6.2

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.
@@ -20233,27 +20233,33 @@
20233
20233
  /*
20234
20234
  * @Author: baozhoutao@steedos.com
20235
20235
  * @Date: 2022-08-16 17:02:08
20236
- * @LastEditors: baozhoutao@steedos.com
20237
- * @LastEditTime: 2023-06-20 13:50:15
20236
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
20237
+ * @LastEditTime: 2024-02-02 10:15:00
20238
20238
  * @Description:
20239
20239
  */
20240
20240
 
20241
-
20242
20241
  const Router = {
20243
- getTabDisplayAs(tab_id){
20242
+ getTabDisplayAs(tab_id, defaultEnableSplit){
20244
20243
  var urlSearch = new URLSearchParams(document.location.search);
20245
20244
  if(urlSearch.has('display')){
20246
20245
  return urlSearch.get('display')
20247
20246
  }
20248
20247
  const key = `tab_${tab_id}_display`;
20249
20248
  // const key = `page_display`;
20250
- const value = localStorage.getItem(key);
20251
- return value ? value : 'grid'
20249
+ const value = sessionStorage.getItem(key);
20250
+ let defaultDisplay = "grid";
20251
+ if(defaultEnableSplit === true){
20252
+ defaultDisplay = "split";
20253
+ }
20254
+ if(window.innerWidth <= 768){
20255
+ return "grid";
20256
+ }
20257
+ return value ? value : defaultDisplay;
20252
20258
  },
20253
20259
 
20254
20260
  setTabDisplayAs(tab_id, displayAs){
20255
20261
  const key = `tab_${tab_id}_display`;
20256
- localStorage.setItem(key, displayAs);
20262
+ sessionStorage.setItem(key, displayAs);
20257
20263
  },
20258
20264
  getAppPath({formFactor, appId}){
20259
20265
  return `/app/${appId}`;
@@ -20280,8 +20286,8 @@
20280
20286
  /*
20281
20287
  * @Author: baozhoutao@steedos.com
20282
20288
  * @Date: 2022-07-20 16:29:22
20283
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
20284
- * @LastEditTime: 2023-12-28 14:59:08
20289
+ * @LastEditors: liaodaxue
20290
+ * @LastEditTime: 2024-01-25 14:44:17
20285
20291
  * @Description:
20286
20292
  */
20287
20293
 
@@ -20353,6 +20359,25 @@
20353
20359
  }
20354
20360
  }
20355
20361
 
20362
+ /**
20363
+ * 判断浏览器类型
20364
+ * @returns 按需返回浏览器类型;
20365
+ */
20366
+ function getBowserType() {
20367
+ const userAgent = navigator.userAgent;
20368
+ if (userAgent.indexOf("Chrome")!== -1 && userAgent.indexOf("Safari") !== -1 && userAgent.indexOf("Edg") === -1) {
20369
+ return "Chrome";
20370
+ } else if (userAgent.indexOf("Firefox") !== -1) {
20371
+ return "Firefox";
20372
+ } else if (userAgent.indexOf("Safari") !== -1 && userAgent.indexOf("Chrome") === -1 && userAgent.indexOf("Edge") === -1) {
20373
+ return "Safari";
20374
+ } else if (userAgent.indexOf("Edg") !== -1) {
20375
+ return "Edge";
20376
+ } else {
20377
+ return "Unknown browser"; // 其他浏览器...(可根据自己需要确定是否新增其他浏览器的判断)
20378
+ }
20379
+ }
20380
+
20356
20381
  function getNumberTpl(field){
20357
20382
  return `<span>\${_display.${field.name}}</span>`
20358
20383
  }
@@ -20393,7 +20418,7 @@
20393
20418
  lodash.exports.forEach(selectOptions,(option)=>{
20394
20419
  const optionValue = option.value + '';
20395
20420
  const optionColor = option.color + '';
20396
- if(optionColor){
20421
+ if(optionColor && optionColor != "undefined"){
20397
20422
  const background = optionColor.charAt(0) === '#' ? optionColor : '#'+optionColor;
20398
20423
  const color = getContrastColor(background);
20399
20424
  const optionColorStyle = 'background:'+background+';color:'+color+';line-height:1.5rem';
@@ -20777,7 +20802,31 @@
20777
20802
  }
20778
20803
  }
20779
20804
  if(type === 'file'){
20780
- return {
20805
+ return window.Meteor?.isCordova ? {
20806
+ "type": "control",
20807
+ "body": {
20808
+ "type": "each",
20809
+ "name": "_display." + steedosField.name,
20810
+ "items": {
20811
+ "type": "tpl",
20812
+ "tpl": "${name}",
20813
+ "className": "antd-Button--link inline-block",
20814
+ "onEvent": {
20815
+ "click": {
20816
+ "actions": [
20817
+ {
20818
+ "script": `
20819
+ Steedos.cordovaDownload(encodeURI(event.data.url), event.data.name);
20820
+ `,
20821
+ "actionType": "custom"
20822
+ }
20823
+ ],
20824
+ "weight": 0
20825
+ }
20826
+ }
20827
+ }
20828
+ }
20829
+ } : {
20781
20830
  type: amisFieldType,
20782
20831
  tpl: `
20783
20832
  <% let fileData = data._display.${steedosField.name}; if (fileData) { %>
@@ -20921,6 +20970,7 @@
20921
20970
  var frontend_notifications_allread$1 = "Mark all as read";
20922
20971
  var frontend_notifications_allread_message$1 = "All marked as read";
20923
20972
  var frontend_profile$1 = "Profile";
20973
+ var switch_space$1 = "Switch Space";
20924
20974
  var frontend_about$1 = "About";
20925
20975
  var frontend_log_out$1 = "Log out";
20926
20976
  var frontend_listview_warning_start$1 = "The current ";
@@ -21008,6 +21058,7 @@
21008
21058
  frontend_notifications_allread: frontend_notifications_allread$1,
21009
21059
  frontend_notifications_allread_message: frontend_notifications_allread_message$1,
21010
21060
  frontend_profile: frontend_profile$1,
21061
+ switch_space: switch_space$1,
21011
21062
  frontend_about: frontend_about$1,
21012
21063
  frontend_log_out: frontend_log_out$1,
21013
21064
  frontend_listview_warning_start: frontend_listview_warning_start$1,
@@ -21063,7 +21114,7 @@
21063
21114
  var frontend_listview_control_delete_confirm_text = "如果您删除此列表视图,该视图将为所有具备访问权限的用户永久删除。是否确定要删除?";
21064
21115
  var frontend_listview_control_delete_message_success = "删除成功";
21065
21116
  var frontend_listview_control_filters = "过滤设置";
21066
- var frontend_listview_control_filters_fields_extend = "条件组件1";
21117
+ var frontend_listview_control_filters_fields_extend = "条件组件";
21067
21118
  var frontend_listview_control_new_label = "新建";
21068
21119
  var frontend_listview_control_new_title = "新建 列表视图";
21069
21120
  var frontend_listview_control_new_message_success = "成功";
@@ -21097,6 +21148,7 @@
21097
21148
  var frontend_notifications_allread = "全部标记为已读";
21098
21149
  var frontend_notifications_allread_message = "已全部标记为已读";
21099
21150
  var frontend_profile = "个人资料";
21151
+ var switch_space = "切换工作区";
21100
21152
  var frontend_about = "关于";
21101
21153
  var frontend_log_out = "注销";
21102
21154
  var frontend_listview_warning_start = "当前";
@@ -21185,6 +21237,7 @@
21185
21237
  frontend_notifications_allread: frontend_notifications_allread,
21186
21238
  frontend_notifications_allread_message: frontend_notifications_allread_message,
21187
21239
  frontend_profile: frontend_profile,
21240
+ switch_space: switch_space,
21188
21241
  frontend_about: frontend_about,
21189
21242
  frontend_log_out: frontend_log_out,
21190
21243
  frontend_listview_warning_start: frontend_listview_warning_start,
@@ -21239,7 +21292,7 @@
21239
21292
  isAmisVersionforBatchEdit = window.Amis.version[0] >= 3 && window.Amis.version[2] >= 2;
21240
21293
  }
21241
21294
  const quickEditId = options.objectName + "_" + field.name + "_quickEdit";//定义快速编辑的表单id,用于setvalue传值
21242
- var quickEditSchema = { body: [], id: quickEditId };
21295
+ var quickEditSchema = { body: [], id: quickEditId, className: "steedos-table-quickEdit" };
21243
21296
  //select,avatar,image,file等组件无法行记录字段赋值,暂不支持批量编辑;
21244
21297
  if(field.type != 'avatar' && field.type != 'image' && field.type != 'file' && isAmisVersionforBatchEdit){
21245
21298
  const submitEvent = {
@@ -21498,7 +21551,8 @@
21498
21551
  "failed": "失败了呢。。"
21499
21552
  }
21500
21553
  }
21501
- }
21554
+ },
21555
+ "expression": "${!recordPermissions.modifyAllRecords}"
21502
21556
  },
21503
21557
  {
21504
21558
  "actionType": "setValue",
@@ -21514,7 +21568,7 @@
21514
21568
  "componentId": quickEditId,
21515
21569
  "args": {
21516
21570
  "value":{
21517
- "quickedit_record_permissions": "${event.data}"
21571
+ "quickedit_record_permissions": "${recordPermissions.modifyAllRecords ? {'allowEdit': true} : event.data}"
21518
21572
  }
21519
21573
  }
21520
21574
  }
@@ -21578,7 +21632,7 @@
21578
21632
  `
21579
21633
  }
21580
21634
  },
21581
- "expression":"${event.data.value}"
21635
+ "expression":"${event.data.value && !recordPermissions.modifyAllRecords}"
21582
21636
  },
21583
21637
  {
21584
21638
  "actionType": "setValue",
@@ -21609,10 +21663,20 @@
21609
21663
  "script": `
21610
21664
  const noPermission = event.data.noPermission;
21611
21665
  const crudComponent = event.context.scoped.getComponentById("${options.crudId}");
21612
- const selectedItems = crudComponent && crudComponent.props.store.selectedItems.concat();
21666
+ let selectedItems = crudComponent && crudComponent.props.store.selectedItems.concat();
21613
21667
  noPermission.forEach(function (item) {
21614
21668
  crudComponent && crudComponent.unSelectItem(_.find(selectedItems,{_id:item}));
21669
+ _.remove(selectedItems, (selected) => selected._id === item);
21615
21670
  })
21671
+ doAction({
21672
+ "componentId": "${quickEditId}",
21673
+ "actionType": "setValue",
21674
+ "args": {
21675
+ "value": {
21676
+ selectedItems
21677
+ }
21678
+ }
21679
+ });
21616
21680
  `
21617
21681
  },
21618
21682
  {
@@ -21673,7 +21737,7 @@
21673
21737
  }
21674
21738
 
21675
21739
  function getFieldWidth(width){
21676
- const defaultWidth = "unset";//用于使table内的td标签下生成div,实现将快速编辑按钮固定在右侧的效果,并不是为了unset效果
21740
+ const defaultWidth = null;
21677
21741
  if(typeof width == 'string'){
21678
21742
  if(isNaN(width)){
21679
21743
  return width || defaultWidth;
@@ -21703,18 +21767,35 @@
21703
21767
  //增加quickEdit属性,实现快速编辑
21704
21768
  const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
21705
21769
  let className = "";
21706
- if(field.wrap != true){
21770
+ const bowserType = getBowserType();
21771
+ if(bowserType === "Safari"){
21707
21772
  className += " whitespace-nowrap ";
21708
21773
  }else {
21709
- className += " break-words ";
21774
+ if(field.wrap != true){
21775
+ className += " whitespace-nowrap ";
21776
+ }else {
21777
+ className += " break-words ";
21778
+ }
21779
+ }
21780
+
21781
+ if (typeof field.amis?.className == "object") {
21782
+ className = {
21783
+ [className]: "true",
21784
+ ...field.amis.className
21785
+ };
21786
+ } else if (typeof field.amis?.className == "string") {
21787
+ className = `${className} ${field.amis.className} `;
21710
21788
  }
21789
+ let fieldAmis = lodash.exports.clone(field.amis);
21790
+ delete fieldAmis?.className;
21791
+
21711
21792
  let columnItem;
21712
21793
  if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files'){
21713
21794
  const previewFileScript = `
21714
21795
  var data = event.data;
21715
21796
  var file_name = data.versions ? data.name : "${field.label}";
21716
- var file_id = data._id;
21717
- SteedosUI.previewFile && SteedosUI.previewFile({file_name, file_id});
21797
+ var file_id = data.versions && data.versions[0] && data.versions[0]._id;
21798
+ window.previewFile && window.previewFile({file_name, file_id});
21718
21799
  `;
21719
21800
  columnItem = {
21720
21801
  "type": "button",
@@ -21739,11 +21820,11 @@
21739
21820
  "expression": "!!!(window && window.nw && window.nw.require)"//浏览器上直接下载
21740
21821
  },
21741
21822
  {
21742
- "args": {},
21743
- "actionType": "custom",
21744
- "script": previewFileScript,
21745
- // "expression": "!!window?.nw?.require" //PC客户端预览附件
21746
- "expression": "!!!(window && window.nw && window.nw.require)"//PC客户端预览附件
21823
+ "args": {},
21824
+ "actionType": "custom",
21825
+ "script": previewFileScript,
21826
+ // "expression": "!!window?.nw?.require" //PC客户端预览附件
21827
+ "expression": "!!(window && window.nw && window.nw.require)"//PC客户端预览附件
21747
21828
  }
21748
21829
  ]
21749
21830
  }
@@ -21758,7 +21839,7 @@
21758
21839
  toggled: field.toggled,
21759
21840
  static: true,
21760
21841
  className,
21761
- }, field.amis, {name: field.name});
21842
+ }, fieldAmis, {name: field.name});
21762
21843
  }else if(field.type === 'avatar' || field.type === 'image' || field.type === 'file'){
21763
21844
  columnItem = Object.assign({}, {
21764
21845
  type: "switch",
@@ -21769,7 +21850,7 @@
21769
21850
  static: true,
21770
21851
  className,
21771
21852
  ...getAmisFileReadonlySchema(field)
21772
- }, field.amis, {name: field.name});
21853
+ }, fieldAmis, {name: field.name});
21773
21854
  }
21774
21855
  else if(field.type === 'select'){
21775
21856
  const map = getSelectMap(field.options);
@@ -21784,7 +21865,7 @@
21784
21865
  className,
21785
21866
  inputClassName: "inline",
21786
21867
  static: true,
21787
- }, field.amis, {name: field.name});
21868
+ }, fieldAmis, {name: field.name});
21788
21869
  }
21789
21870
  else {
21790
21871
  const tpl = await getFieldTpl(field, options);
@@ -21803,23 +21884,14 @@
21803
21884
  if(field.type === 'textarea'){
21804
21885
  className += 'min-w-56';
21805
21886
  }
21806
- if(field.type === 'date'){
21807
- className += 'date-min-w';
21808
- }
21809
- if(field.type === 'datetime'){
21810
- className += 'datetime-min-w';
21811
- }
21887
+ // if(field.type === 'date'){
21888
+ // className += 'date-min-w';
21889
+ // }
21890
+ // if(field.type === 'datetime'){
21891
+ // className += 'datetime-min-w';
21892
+ // }
21812
21893
 
21813
21894
  //field上的amis属性里的clssname需要单独判断类型合并
21814
- if (typeof field.amis?.className == "object") {
21815
- className = {
21816
- [className]: "true",
21817
- ...field.amis.className
21818
- };
21819
- } else if (typeof field.amis?.className == "string") {
21820
- className = `${className} ${field.amis.className} `;
21821
- }
21822
- delete field.amis?.className;
21823
21895
 
21824
21896
  if(!field.hidden && !field.extra){
21825
21897
  columnItem = Object.assign({}, {
@@ -21836,7 +21908,7 @@
21836
21908
  static: true,
21837
21909
  options: field.type === 'html' ? {html: true} : null
21838
21910
  // toggled: true
21839
- }, field.amis, {name: field.name});
21911
+ }, fieldAmis, {name: field.name});
21840
21912
 
21841
21913
  if(field.type === 'color'){
21842
21914
  columnItem.type = 'color';
@@ -22032,10 +22104,10 @@
22032
22104
  if(value.url){
22033
22105
  cms_url = value.url;
22034
22106
  }else{
22035
- cms_url = "/api/files/files/"+value+"?download=true"
22107
+ cms_url = Steedos.absoluteUrl("/api/files/files/"+value+"?download=true");
22036
22108
  }
22037
22109
  }
22038
- Steedos.cordovaDownload(encodeURI(Steedos.absoluteUrl(cms_url)), event.data.name);
22110
+ Steedos.cordovaDownload(encodeURI(cms_url), event.data.name);
22039
22111
  `,
22040
22112
  "actionType": "custom"
22041
22113
  }
@@ -22297,6 +22369,50 @@
22297
22369
  }
22298
22370
  }
22299
22371
 
22372
+ /*
22373
+ img/avatar字段值添加URL前缀使其在amis中正常显示图片。
22374
+ */
22375
+ function getScriptForAddUrlPrefixForImgFields(fields){
22376
+ let imgFieldsKeys = [];
22377
+ let imgFields = {};
22378
+ fields.forEach((item)=>{
22379
+ if(lodash.exports.includes(['image','avatar'], item.type)){
22380
+ imgFieldsKeys.push(item.name);
22381
+ imgFields[item.name] = {
22382
+ name: item.name,
22383
+ type: item.type,
22384
+ multiple: item.multiple
22385
+ };
22386
+ }
22387
+ });
22388
+ if(!imgFieldsKeys.length){
22389
+ return '';
22390
+ }
22391
+ return `
22392
+ // image字段值添加URL前缀
22393
+ let imgFieldsKeys = ${JSON.stringify(imgFieldsKeys)};
22394
+ let imgFields = ${JSON.stringify(imgFields)};
22395
+ imgFieldsKeys.forEach((item)=>{
22396
+ let imgFieldValue = data[item];
22397
+ let imgFieldDisplayValue = data._display && data._display[item];
22398
+ if(imgFieldValue && imgFieldValue.length){
22399
+ let fieldProps = imgFields[item];
22400
+ if(fieldProps.multiple){
22401
+ if(imgFieldDisplayValue instanceof Array){
22402
+ data[item] = imgFieldDisplayValue.map((i)=>{
22403
+ const url = window.getImageFieldUrl(i.url);
22404
+ return url;
22405
+ });
22406
+ }
22407
+ }else{
22408
+ const url = imgFieldDisplayValue && window.getImageFieldUrl(imgFieldDisplayValue.url);
22409
+ data[item] = url;
22410
+ }
22411
+ }
22412
+ })
22413
+ `
22414
+ }
22415
+
22300
22416
  /******************************************************************************
22301
22417
  Copyright (c) Microsoft Corporation.
22302
22418
 
@@ -22668,7 +22784,7 @@
22668
22784
  const formSchema = {
22669
22785
  "type": "service",
22670
22786
  "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
22671
- "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",
22787
+ "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-4 sm:grid-cols-4 p-2",
22672
22788
  "style":{
22673
22789
  "max-height":ctx.formFactor === 'SMALL'?"30vh":"unset"
22674
22790
  },
@@ -23255,7 +23371,7 @@
23255
23371
  "className": "slds-filters"
23256
23372
  },
23257
23373
  "size": "xs",
23258
- "className": `border-gray-300 border-y slds-grid slds-grid_vertical slds-nowrap ${!ctx.isLookup && "mt-2"}`,
23374
+ "className": `border-y slds-grid slds-grid_vertical slds-nowrap ${!ctx.isLookup && "mt-2"}`,
23259
23375
  "visibleOn": "this.showFieldsFilter",
23260
23376
  },
23261
23377
  "className": "bg-white"
@@ -23301,6 +23417,7 @@
23301
23417
  "objectApiName": "object_listviews",
23302
23418
  "recordId": "",
23303
23419
  "mode": "edit",
23420
+ "layout": "normal",
23304
23421
  "defaultData": {
23305
23422
  "&": "${list_view}",
23306
23423
  "name":"",
@@ -23308,8 +23425,16 @@
23308
23425
  "filters":"",
23309
23426
  "shared":false,
23310
23427
  "object_name": "${targetObjectName}",
23428
+ "_id":"",
23429
+ "shared_to": null,
23430
+ "shared_to_organizations": null,
23431
+ "locked": false,
23432
+ "owner": null,
23433
+ "company_id": null,
23434
+ "company_ids": null,
23435
+ "is_system": false
23311
23436
  },
23312
- "fieldsExtend": fieldsExtend$4(),
23437
+ "fieldsExtend": fieldsExtend$5(),
23313
23438
  "fields": fields$1(),
23314
23439
  "onEvent": {
23315
23440
  "submitSucc": {
@@ -23360,14 +23485,17 @@
23360
23485
  "mobile_columns",
23361
23486
  "searchable_fields",
23362
23487
  "is_system",
23363
- "shared"
23488
+ "shared",
23489
+ "shared_to",
23490
+ "shared_to_organizations"
23364
23491
  ]
23365
23492
  }
23366
23493
 
23367
- function fieldsExtend$4(){
23494
+ function fieldsExtend$5(){
23368
23495
  return {
23369
23496
  "group": "",
23370
23497
  "label": {
23498
+ "group": "",
23371
23499
  "is_wide": true
23372
23500
  },
23373
23501
  "name": {
@@ -23449,9 +23577,19 @@
23449
23577
  "shared": {
23450
23578
  "group": "",
23451
23579
  "amis": {
23452
- "visibleOn": "${global.user.is_space_admin}"
23580
+ "visibleOn": "${false}"
23453
23581
  }
23454
23582
  },
23583
+ "shared_to": {
23584
+ "group": "",
23585
+ "amis":{
23586
+ "type": "radios",
23587
+ "inline": false
23588
+ }
23589
+ },
23590
+ "shared_to_organizations": {
23591
+ "group": ""
23592
+ },
23455
23593
  "filters": {
23456
23594
  "group": "",
23457
23595
  "amis": {
@@ -23489,14 +23627,23 @@
23489
23627
  "objectApiName": "object_listviews",
23490
23628
  "recordId": "",
23491
23629
  "mode": "edit",
23630
+ "layout": "normal",
23492
23631
  "defaultData": {
23493
23632
  "&": "${list_view}",
23494
23633
  "name":"",
23495
23634
  "label": instance.t('frontend_listview_control_clone_defaultData_label_start') + " ${list_view.label} " + instance.t('frontend_listview_control_clone_defaultData_label_end'),
23496
23635
  "shared":false,
23497
23636
  "object_name": "${targetObjectName}",
23637
+ "_id":"",
23638
+ "shared_to": null,
23639
+ "shared_to_organizations": null,
23640
+ "locked": false,
23641
+ "owner": null,
23642
+ "company_id": null,
23643
+ "company_ids": null,
23644
+ "is_system": false
23498
23645
  },
23499
- "fieldsExtend": fieldsExtend$3(),
23646
+ "fieldsExtend": fieldsExtend$4(),
23500
23647
  "fields": fields(),
23501
23648
  "onEvent": {
23502
23649
  "submitSucc": {
@@ -23544,13 +23691,16 @@
23544
23691
  "mobile_columns.$.field",
23545
23692
  "searchable_fields.$.field",
23546
23693
  "is_system",
23547
- "shared"
23694
+ "shared",
23695
+ "shared_to",
23696
+ "shared_to_organizations"
23548
23697
  ]
23549
23698
  }
23550
23699
 
23551
- function fieldsExtend$3(){
23700
+ function fieldsExtend$4(){
23552
23701
  return {
23553
23702
  "label": {
23703
+ "group": "",
23554
23704
  "is_wide": true
23555
23705
  },
23556
23706
  "name": {
@@ -23600,10 +23750,21 @@
23600
23750
  }
23601
23751
  },
23602
23752
  "shared": {
23753
+ "group": "",
23603
23754
  "amis": {
23604
- "visibleOn": "${global.user.is_space_admin}"
23755
+ "visibleOn": "${false}"
23605
23756
  }
23606
23757
  },
23758
+ "shared_to": {
23759
+ "group": "",
23760
+ "amis":{
23761
+ "type": "radios",
23762
+ "inline": false
23763
+ }
23764
+ },
23765
+ "shared_to_organizations": {
23766
+ "group": ""
23767
+ },
23607
23768
  "filters": {
23608
23769
  "group": "",
23609
23770
  "amis": {
@@ -23613,6 +23774,12 @@
23613
23774
  }
23614
23775
  }
23615
23776
 
23777
+ /*
23778
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
23779
+ * @Date: 2023-06-13 13:51:19
23780
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
23781
+ * @LastEditTime: 2024-02-05 11:25:09
23782
+ */
23616
23783
  const getRenameListviewButtonSchema = ()=>{
23617
23784
  return {
23618
23785
  "type": "button",
@@ -23638,6 +23805,7 @@
23638
23805
  "label": "对象表单",
23639
23806
  "objectApiName": "object_listviews",
23640
23807
  "recordId": "${recordId}",
23808
+ "layout": "normal",
23641
23809
  "mode": "edit",
23642
23810
  "fields": [
23643
23811
  "label"
@@ -23672,6 +23840,12 @@
23672
23840
  }
23673
23841
  };
23674
23842
 
23843
+ /*
23844
+ * @Author: 殷亮辉 yinlianghui@hotoa.com
23845
+ * @Date: 2023-06-13 13:51:19
23846
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
23847
+ * @LastEditTime: 2024-02-06 15:38:49
23848
+ */
23675
23849
  const getSetListviewShareButtonSchema = ()=>{
23676
23850
  return {
23677
23851
  "type": "button",
@@ -23687,6 +23861,8 @@
23687
23861
  "title": instance.t('frontend_listview_control_share'),
23688
23862
  "data": {
23689
23863
  "recordId": "${uiSchema.list_views[listName]._id}",
23864
+ "appId": "${appId}",
23865
+ "global": "${global}",
23690
23866
  "context": "${context}"
23691
23867
  },
23692
23868
  "body": [
@@ -23696,9 +23872,12 @@
23696
23872
  "objectApiName": "object_listviews",
23697
23873
  "recordId": "${recordId}",
23698
23874
  "mode": "edit",
23875
+ "layout": "normal",
23699
23876
  "fields": [
23700
- "shared"
23701
- ]
23877
+ "shared_to",
23878
+ "shared_to_organizations"
23879
+ ],
23880
+ "fieldsExtend": fieldsExtend$3(),
23702
23881
  }
23703
23882
  ],
23704
23883
  "showCloseButton": true,
@@ -23716,6 +23895,21 @@
23716
23895
  }
23717
23896
  };
23718
23897
 
23898
+ function fieldsExtend$3(){
23899
+ return {
23900
+ "shared_to": {
23901
+ "group": "",
23902
+ "amis":{
23903
+ "type": "radios",
23904
+ "inline": false
23905
+ }
23906
+ },
23907
+ "shared_to_organizations": {
23908
+ "group": ""
23909
+ }
23910
+ }
23911
+ }
23912
+
23719
23913
  const getSetListviewFiltersButtonSchema = ()=>{
23720
23914
  return {
23721
23915
  "type": "button",
@@ -23847,10 +24041,12 @@
23847
24041
  function fieldsExtend$2(){
23848
24042
  return {
23849
24043
  "filters": {
24044
+ "label": "",
24045
+ "group": "",
23850
24046
  "visible_on": "true",
23851
24047
  "amis": {
23852
24048
  "type": "condition-builder",
23853
- "label": instance.t('frontend_listview_control_filters_fields_extend'),
24049
+ // "label": i18next.t('frontend_listview_control_filters_fields_extend'),
23854
24050
  "source": {
23855
24051
  "method": "get",
23856
24052
  "url": "${context.rootUrl}/service/api/amis-metadata-listviews/getFilterFields?objectName=${targetObjectName}",
@@ -23893,6 +24089,7 @@
23893
24089
  "objectApiName": "object_listviews",
23894
24090
  "recordId": "${recordId}",
23895
24091
  "mode": "edit",
24092
+ "layout": "normal",
23896
24093
  "fieldsExtend": fieldsExtend$1(),
23897
24094
  "initApiAdaptor": initApiAdaptor$1(),
23898
24095
  "apiRequestAdaptor": apiRequestAdaptor$1(),
@@ -24089,6 +24286,8 @@
24089
24286
  function fieldsExtend(){
24090
24287
  return {
24091
24288
  "sort": {
24289
+ "label": "",
24290
+ "group": "",
24092
24291
  "amis": {
24093
24292
  "type": "tabs-transfer",
24094
24293
  "sortable": true,
@@ -24216,7 +24415,7 @@
24216
24415
  "icon": "fa fa-cog",
24217
24416
  //TODO: dropdown-button只支持在按钮上方配置提示,对于上方按钮的点击会有影响,为保持统一,暂时去除,等待amis优化,https://github.com/baidu/amis/issues/7330
24218
24417
  // "tooltip": i18next.t('frontend_button_listview_control_tooltip'),
24219
- "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded border-gray-300 text-gray-500",
24418
+ "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded text-gray-500",
24220
24419
  "align": "right",
24221
24420
  "visibleOn": "${!isLookup}",
24222
24421
  "buttons": [
@@ -24237,20 +24436,20 @@
24237
24436
  }
24238
24437
  };
24239
24438
 
24240
- const getDisplayAsButton = function(objectName, showDisplayAs){
24241
- let displayAs = Router.getTabDisplayAs(objectName);
24439
+ const getDisplayAsButton = function(objectName, defaultEnableSplit){
24440
+ let displayAs = Router.getTabDisplayAs(objectName, defaultEnableSplit);
24242
24441
  let buttons = [
24243
24442
  {
24244
24443
  "type": "button",
24245
24444
  "label": instance.t('frontend_display_type_is_table'),
24246
- "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');",
24445
+ "onClick": "const key = 'tab_"+objectName+"_display';sessionStorage.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');",
24247
24446
  "rightIcon": displayAs != 'split' ? "fa fa-check" : null,
24248
24447
  "rightIconClassName": "m-l-sm"
24249
24448
  },
24250
24449
  {
24251
24450
  "type": "button",
24252
24451
  "label": instance.t('frontend_display_type_is_split'),
24253
- "onClick": "const key = 'tab_"+objectName+"_display';localStorage.setItem(key, 'split');const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
24452
+ "onClick": "const key = 'tab_"+objectName+"_display';sessionStorage.setItem(key, 'split');const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
24254
24453
  "rightIcon": displayAs === 'split' ? "fa fa-check" : null,
24255
24454
  "rightIconClassName": "m-l-sm"
24256
24455
  }
@@ -24261,7 +24460,7 @@
24261
24460
  "icon": "fa fa-table-columns",
24262
24461
  //TODO: dropdown-button只支持在按钮上方配置提示,对于上方按钮的点击会有影响,暂时去除,等待amis优化,https://github.com/baidu/amis/issues/7330
24263
24462
  // "tooltip": `${i18next.t('frontend_display_as')} ${displayAsLabel}`,
24264
- "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded border-gray-300 text-gray-500",
24463
+ "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded text-gray-500",
24265
24464
  "align": "right",
24266
24465
  "visibleOn": "${window:innerWidth > 768 && !!!isLookup}",
24267
24466
  "buttons": [
@@ -24454,7 +24653,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24454
24653
  // //TODO: dropdown-button只支持在按钮上方配置提示,对于上方按钮的点击会有影响,为保持统一,暂时去除,等待amis优化,https://github.com/baidu/amis/issues/7330
24455
24654
  // // "tooltip": i18next.t('frontend_button_reload_tooltip'),
24456
24655
  // "tooltipPlacement": "top",
24457
- // "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
24656
+ // "className": "bg-white p-2 rounded text-gray-500",
24458
24657
  // "label": "",
24459
24658
  // "icon": "fa fa-sync",
24460
24659
  // "visibleOn": "${!showFieldsFilter}",
@@ -24478,7 +24677,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24478
24677
  // "tooltip": i18next.t('frontend_button_reload_tooltip'),
24479
24678
  "tooltip":"",
24480
24679
  "tooltipPlacement": "top",
24481
- "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
24680
+ "className": "bg-white p-2 rounded text-gray-500"
24482
24681
  };
24483
24682
  }
24484
24683
  else {
@@ -24489,7 +24688,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24489
24688
  // "tooltip": i18next.t('frontend_button_reload_tooltip'),
24490
24689
  "tooltip":"",
24491
24690
  "tooltipPlacement": "top",
24492
- "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
24691
+ "className": "bg-white p-2 rounded text-gray-500"
24493
24692
  };
24494
24693
  }
24495
24694
  let toolbarFilter;
@@ -24511,7 +24710,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24511
24710
  "visibleOn": "${isFieldsFilterEmpty == false && isLookup != true}"
24512
24711
  },
24513
24712
  "align": "right",
24514
- "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
24713
+ "className": "bg-white p-2 rounded text-gray-500",
24515
24714
  "onEvent": {
24516
24715
  "click": {
24517
24716
  "actions": [
@@ -24525,7 +24724,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24525
24724
  "id": "steedos_crud_toolbar_filter"
24526
24725
  };
24527
24726
  }
24528
- let toolbarDisplayAsButton = getDisplayAsButton(mainObject?.name);
24727
+ let toolbarDisplayAsButton = getDisplayAsButton(mainObject?.name, mainObject?.enable_split);
24529
24728
  let toolbarDQuickSearchBox = getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup, keywordsSearchBoxName });
24530
24729
 
24531
24730
  // toolbars返回的数组元素不可以是空对象{},比如hiddenCount ? {} : {"type": "tpl",...},因为空对象最终还是会生成一个空的.antd-Crud-toolbar-item dom
@@ -24671,7 +24870,6 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24671
24870
  "timeOut": 1000
24672
24871
  }
24673
24872
  });
24674
- resizeWindow();
24675
24873
  const scope = event.context.scoped;
24676
24874
  // let filterFormValues = event.data;
24677
24875
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
@@ -24747,8 +24945,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24747
24945
  /*
24748
24946
  * @Author: baozhoutao@steedos.com
24749
24947
  * @Date: 2022-07-05 15:55:39
24750
- * @LastEditors: baozhoutao@steedos.com
24751
- * @LastEditTime: 2024-01-16 11:14:34
24948
+ * @LastEditors: liaodaxue
24949
+ * @LastEditTime: 2024-02-05 17:56:27
24752
24950
  * @Description:
24753
24951
  */
24754
24952
 
@@ -25315,17 +25513,13 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25315
25513
 
25316
25514
  function getLookupSapceUserTreeSchema(isMobile){
25317
25515
  let apiAdaptor = `
25318
- // console.log("===getLookupSapceUserTreeSchema===", JSON.stringify(payload));
25319
25516
  const records = payload.data.options;
25320
- let isTreeOptionsComputed = false;
25321
- if(records.length === 1 && records[0].children){
25322
- isTreeOptionsComputed = true;
25323
- }
25324
- if(isTreeOptionsComputed){
25325
- return payload;
25326
- }
25327
25517
  const treeRecords = [];
25328
- const getChildren = (records, childrenIds) => {
25518
+ const getChildren = (currentRecord, records, childrenIds) => {
25519
+ if (currentRecord.children && typeof currentRecord.children[0] === "object") {
25520
+ // 考虑api配置了cache缓存的话,不会请求接口但是会重新进这个接收适配器脚本且payload.data.options返回的会是上一次计算结果,这里直接返回计算过的children
25521
+ return currentRecord.children;
25522
+ }
25329
25523
  if (!childrenIds) {
25330
25524
  return;
25331
25525
  }
@@ -25334,7 +25528,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25334
25528
  });
25335
25529
  _.each(children, (item) => {
25336
25530
  if (item.children) {
25337
- item.children = getChildren(records, item.children)
25531
+ item.children = getChildren(item, records, item.children)
25338
25532
  }else{
25339
25533
  item.children = [];
25340
25534
  }
@@ -25360,7 +25554,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25360
25554
 
25361
25555
  _.each(records, (record) => {
25362
25556
  if (record.noParent == 1) {
25363
- treeRecords.push(Object.assign({}, record, { children: getChildren(records, record.children) }));
25557
+ treeRecords.push(Object.assign({}, record, { children: getChildren(record, records, record.children) }));
25364
25558
  }
25365
25559
  });
25366
25560
  console.log(treeRecords)
@@ -25410,6 +25604,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25410
25604
  }
25411
25605
  },
25412
25606
  "label": "",
25607
+ "mode": "normal",
25413
25608
  "name": "organizations",
25414
25609
  "multiple": false,
25415
25610
  "joinValues": false,
@@ -25552,6 +25747,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25552
25747
  }
25553
25748
  });
25554
25749
 
25750
+ let listviewFilter = getListViewFilter(listView);
25751
+ let listviewFiltersFunction = listView && listView._filters;
25752
+
25555
25753
  let sort = "";
25556
25754
  if(listView){
25557
25755
  sort = getListViewSort(listView);
@@ -25598,7 +25796,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25598
25796
  Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
25599
25797
  }
25600
25798
  const selfData = JSON.parse(JSON.stringify(api.data.$self));
25601
- var filters = [];
25799
+ ${listviewFilter && !ctx.inFilterForm ? `var filters = ${JSON.stringify(listviewFilter)};` : 'var filters = [];'}
25602
25800
  var pageSize = api.data.pageSize || 10;
25603
25801
  var pageNo = api.data.pageNo || 1;
25604
25802
  var skip = (pageNo - 1) * pageSize;
@@ -25660,6 +25858,16 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25660
25858
  }
25661
25859
 
25662
25860
  const inFilterForm = ${ctx.inFilterForm};
25861
+
25862
+ const listviewFiltersFunction = ${listviewFiltersFunction};
25863
+
25864
+ if(listviewFiltersFunction && !inFilterForm){
25865
+ const _filters0 = listviewFiltersFunction(filters, api.data.$self.__super);
25866
+ if(_filters0 && _filters0.length){
25867
+ filters.push(_filters0);
25868
+ }
25869
+ }
25870
+
25663
25871
  const filtersFunction = ${field.filtersFunction || field._filtersFunction};
25664
25872
 
25665
25873
  if(filtersFunction && !inFilterForm){
@@ -25747,6 +25955,16 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25747
25955
  });
25748
25956
  payload.data.rows = treeRecords;
25749
25957
  }
25958
+ const result = payload.data.rows;
25959
+ if(result && result.length){
25960
+ const updatedResult = _.map(result, (element) => {
25961
+ const data = { ...element };
25962
+ // image字段值添加URL前缀
25963
+ ${getScriptForAddUrlPrefixForImgFields(lodash.exports.values(refObjectConfig.fields))}
25964
+ return data;
25965
+ });
25966
+ payload.data.rows = updatedResult;
25967
+ }
25750
25968
  return payload;
25751
25969
  `;
25752
25970
  if(field.optionsFunction || field._optionsFunction){
@@ -25778,13 +25996,15 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25778
25996
 
25779
25997
  pickerSchema.affixHeader = false;
25780
25998
 
25781
- var headerToolbarItems = [];
25999
+
26000
+
26001
+ pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { isLookup: true, keywordsSearchBoxName });
26002
+
25782
26003
  if(referenceTo.objectName === "space_users" && field.reference_to_field === "user"){
25783
- headerToolbarItems = getLookupSapceUserTreeSchema(isMobile);
26004
+ pickerSchema.headerToolbar.push(getLookupSapceUserTreeSchema(isMobile));
25784
26005
  pickerSchema.className = pickerSchema.className || "" + " steedos-select-user";
25785
26006
  }
25786
-
25787
- pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { headerToolbarItems, isLookup: true, keywordsSearchBoxName });
26007
+
25788
26008
  const isAllowCreate = refObjectConfig.permissions.allowCreate;
25789
26009
  const isCreate = lodash.exports.isBoolean(field.create) ? field.create : true;
25790
26010
  // lookup字段配置过滤条件就强制不显示新建按钮
@@ -25897,8 +26117,19 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25897
26117
  pickerSchema.footerToolbar = ["pagination"];
25898
26118
  }
25899
26119
 
26120
+ if(field.inlineHelpText){
26121
+ pickerSchema.toolbarClassName = "hasHelpText";
26122
+ pickerSchema.headerToolbar = [{
26123
+ "type": "tpl",
26124
+ "tpl": field.inlineHelpText,
26125
+ "className": "text-secondary"
26126
+ }, ...pickerSchema.headerToolbar];
26127
+ }
26128
+ pickerSchema.className = (pickerSchema.className || "") + " steedos-lookup-crud";
26129
+
25900
26130
  const data = {
25901
26131
  type: getAmisStaticFieldType('picker', readonly),
26132
+ className: ctx.className || '',
25902
26133
  modalTitle: instance.t('frontend_form_please_select') + " " + refObjectConfig.label,
25903
26134
  labelField: referenceTo.labelField.name,
25904
26135
  valueField: referenceTo.valueField.name,
@@ -25972,6 +26203,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25972
26203
  const refObjectConfig = referenceTo && await getUISchema(referenceTo.objectName);
25973
26204
  let listView = getLookupListView(refObjectConfig);
25974
26205
 
26206
+ let listviewFilter = getListViewFilter(listView);
26207
+ let listviewFiltersFunction = listView && listView._filters;
26208
+
25975
26209
  let sort = "";
25976
26210
  if(listView){
25977
26211
  sort = getListViewSort(listView);
@@ -26001,7 +26235,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26001
26235
  apiInfo.data['rfield'] = `\${object_name}`;
26002
26236
  // [["_id", "=", "$${field.name}._id"],"or",["name", "contains", "$term"]]
26003
26237
  apiInfo.requestAdaptor = `
26004
- var filters = [];
26238
+ ${listviewFilter && !ctx.inFilterForm ? `var filters = ${JSON.stringify(listviewFilter)};` : 'var filters = [];'}
26005
26239
  var top = 200;
26006
26240
  if(api.data.$term){
26007
26241
  filters = [["${referenceTo?.NAME_FIELD_KEY || 'name'}", "contains", api.data.$term]];
@@ -26024,6 +26258,16 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26024
26258
  }
26025
26259
 
26026
26260
  const inFilterForm = ${ctx.inFilterForm};
26261
+
26262
+ const listviewFiltersFunction = ${listviewFiltersFunction};
26263
+
26264
+ if(listviewFiltersFunction && !inFilterForm){
26265
+ const _filters0 = listviewFiltersFunction(filters, api.data.$);
26266
+ if(_filters0 && _filters0.length){
26267
+ filters.push(_filters0);
26268
+ }
26269
+ }
26270
+
26027
26271
  const filtersFunction = ${field.filtersFunction || field._filtersFunction};
26028
26272
 
26029
26273
  if(filtersFunction && !inFilterForm){
@@ -26100,6 +26344,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26100
26344
  // 但是同时配置autoComplete和source会多请求一次接口
26101
26345
  // TODO:应该想办法把是否字段在子表组件内,即ctx.isInputTable,如果不在子表组件内不需要加source
26102
26346
  data.source = apiInfo;
26347
+ delete data.autoComplete;
26103
26348
  }
26104
26349
  //删除xlink:href中的rootUrl前缀,解决客户端svg为空的问题
26105
26350
  const select_menuTpl = `<span class='flex items-center mt-0.5'>
@@ -26146,7 +26391,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26146
26391
  }
26147
26392
  // console.log(`lookupToAmis====`, field, readonly, ctx)
26148
26393
  if(readonly){
26149
- if(field.reference_to){
26394
+ if(field.reference_to && !field.isTableField){
26395
+ //isTableField只在grid字段内存在
26150
26396
  return {
26151
26397
  type: 'steedos-field',
26152
26398
  config: field,
@@ -26357,8 +26603,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26357
26603
  /*
26358
26604
  * @Author: baozhoutao@steedos.com
26359
26605
  * @Date: 2023-01-13 17:27:54
26360
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
26361
- * @LastEditTime: 2023-08-28 17:45:38
26606
+ * @LastEditors: liaodaxue
26607
+ * @LastEditTime: 2024-02-04 17:29:54
26362
26608
  * @Description:
26363
26609
  */
26364
26610
 
@@ -26459,7 +26705,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26459
26705
  "title": "Insert",
26460
26706
  "items": "image link media addcomment pageembed codesample inserttable | charmap emoticons hr | pagebreak nonbreaking anchor tableofcontents | insertdatetime"
26461
26707
  }
26462
- }
26708
+ },
26709
+ "statusbar": false
26463
26710
  },
26464
26711
  "name": field.name
26465
26712
  }
@@ -26697,13 +26944,31 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26697
26944
  };
26698
26945
  break;
26699
26946
  case 'input-datetime-range':
26947
+ // convertData = {
26948
+ // type: "input-datetime-range",
26949
+ // inputFormat: 'YYYY-MM-DD HH:mm',
26950
+ // format:'YYYY-MM-DDTHH:mm:ss.SSSZ',
26951
+ // tpl: readonly ? Tpl.getDateTimeTpl(field) : null,
26952
+ // utc: true,
26953
+ // joinValues: false
26954
+ // }
26955
+ // 日期时间字段,按日期方式展现显示控件,用户不用关心小时分钟
26700
26956
  convertData = {
26701
- type: "input-datetime-range",
26702
- inputFormat: 'YYYY-MM-DD HH:mm',
26957
+ type: "input-date-range",
26958
+ inputFormat: "YYYY-MM-DD HH:mm",
26703
26959
  format:'YYYY-MM-DDTHH:mm:ss.SSSZ',
26704
26960
  tpl: readonly ? getDateTimeTpl(field) : null,
26705
26961
  utc: true,
26706
- joinValues: false
26962
+ joinValues: false,
26963
+ "shortcuts": [
26964
+ "thismonth",
26965
+ "2monthsago",
26966
+ "3monthslater",
26967
+ "prevquarter",
26968
+ "thisquarter",
26969
+ "thisyear",
26970
+ "lastYear"
26971
+ ]
26707
26972
  };
26708
26973
  break;
26709
26974
  case 'datetime':
@@ -26754,7 +27019,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26754
27019
  convertData = {
26755
27020
  type: getAmisStaticFieldType('datetime', readonly),
26756
27021
  inputFormat: 'YYYY-MM-DD HH:mm',
26757
- format: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
27022
+ format: 'YYYY-MM-DDTHH:mm:00.000Z',
26758
27023
  tpl: readonly ? getDateTimeTpl(field) : null,
26759
27024
  utc: true,
26760
27025
  };
@@ -26885,6 +27150,36 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26885
27150
  convertData = {
26886
27151
  type: 'static-text'
26887
27152
  };
27153
+ }else if(field.autonumber_enable_modify){
27154
+ convertData = {
27155
+ "type": "input-group",
27156
+ "body": [
27157
+ {
27158
+ "type": "input-text",
27159
+ "name": field.name
27160
+ },
27161
+ {
27162
+ "type": "button",
27163
+ "label": "自动获取",
27164
+ "actionType": "ajax",
27165
+ "api": {
27166
+ "url": `\${context.rootUrl}/api/autonumber/generator/\${objectName}/${field.name}`,
27167
+ "method": "post",
27168
+ "headers": {
27169
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
27170
+ },
27171
+ "adaptor": `
27172
+ payload.data["${field.name}"] = payload.data && payload.data.autonumber;
27173
+ delete payload.data.autonumber;
27174
+ return payload;
27175
+ `
27176
+ },
27177
+ "messages": {
27178
+ "success": "获取成功"
27179
+ }
27180
+ }
27181
+ ]
27182
+ };
26888
27183
  }
26889
27184
  break;
26890
27185
  case 'url':
@@ -27090,12 +27385,13 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27090
27385
  break;
27091
27386
  }
27092
27387
  if(!lodash.exports.isEmpty(convertData)){
27388
+ const className = convertData.className;
27093
27389
  if(field.is_wide || convertData.type === 'group'){
27094
- convertData.className = 'col-span-2 m-0';
27390
+ convertData.className = className ? 'col-span-2 m-0 ' + className : 'col-span-2 m-0';
27095
27391
  }else {
27096
- convertData.className = 'm-0';
27392
+ convertData.className = className ? 'm-0 ' + className : 'm-0';
27097
27393
  }
27098
- if(readonly){
27394
+ if(readonly && ctx.mode !== 'edit'){
27099
27395
  convertData.className = `${convertData.className} border-b`;
27100
27396
  }
27101
27397
  if(readonly){
@@ -27103,11 +27399,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27103
27399
  }
27104
27400
 
27105
27401
  let fieldTypeClassName = ' steedos-' + convertData.type + (readonly ? '-readonly' : '-edit');
27106
- if (convertData.className) {
27107
- convertData.className = convertData.className + fieldTypeClassName;
27108
- } else {
27109
- convertData.className = fieldTypeClassName;
27110
- }
27402
+ convertData.className = convertData.className + fieldTypeClassName;
27111
27403
 
27112
27404
  if(field.visible_on && !ctx.inFilterForm){
27113
27405
  // convertData.visibleOn = `\$${field.visible_on.substring(1, field.visible_on.length -1).replace(/formData./g, '')}`;
@@ -27190,8 +27482,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27190
27482
  fieldNamePrefix = `${fieldNamePrefix}between__`;
27191
27483
  }
27192
27484
  if(_field.type === 'datetime'){
27193
- // 特意改为日期范围而不是日期时间范围,因为搜索时一般精确到日期就足够了,需要精确到日期时间范围需要在字段上配置amis属性来实现
27194
- _field.type = 'input-date-range';
27485
+ // 这里如果想把搜索范围展示效果改为日期范围,不可以直接改为input-date-range,因为它们规则不一样,包括时区规则和小时分秒的存值规则都不一样
27486
+ // 所以想改为展示日期范围效果,只能改input-datetime-range类型本身的属性来实现
27487
+ _field.type = 'input-datetime-range';
27195
27488
  _field.is_wide = true;
27196
27489
  fieldNamePrefix = `${fieldNamePrefix}between__`;
27197
27490
  }