@steedos-widgets/sortable 3.6.2-beta.2 → 3.6.2-beta.21

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.
@@ -20238,22 +20238,29 @@
20238
20238
  * @Description:
20239
20239
  */
20240
20240
 
20241
-
20242
20241
  const Router = {
20243
20242
  getTabDisplayAs(tab_id){
20243
+ const uiSchema = getUISchemaSync$1(tab_id, false);
20244
20244
  var urlSearch = new URLSearchParams(document.location.search);
20245
20245
  if(urlSearch.has('display')){
20246
20246
  return urlSearch.get('display')
20247
20247
  }
20248
20248
  const key = `tab_${tab_id}_display`;
20249
20249
  // const key = `page_display`;
20250
- const value = localStorage.getItem(key);
20251
- return value ? value : 'grid'
20250
+ const value = sessionStorage.getItem(key);
20251
+ let defaultDisplay = "grid";
20252
+ if(uiSchema.enable_split){
20253
+ defaultDisplay = "split";
20254
+ }
20255
+ if(window.innerWidth <= 768){
20256
+ return "grid";
20257
+ }
20258
+ return value ? value : defaultDisplay;
20252
20259
  },
20253
20260
 
20254
20261
  setTabDisplayAs(tab_id, displayAs){
20255
20262
  const key = `tab_${tab_id}_display`;
20256
- localStorage.setItem(key, displayAs);
20263
+ sessionStorage.setItem(key, displayAs);
20257
20264
  },
20258
20265
  getAppPath({formFactor, appId}){
20259
20266
  return `/app/${appId}`;
@@ -20280,8 +20287,8 @@
20280
20287
  /*
20281
20288
  * @Author: baozhoutao@steedos.com
20282
20289
  * @Date: 2022-07-20 16:29:22
20283
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
20284
- * @LastEditTime: 2023-12-28 14:59:08
20290
+ * @LastEditors: liaodaxue
20291
+ * @LastEditTime: 2024-01-25 14:44:17
20285
20292
  * @Description:
20286
20293
  */
20287
20294
 
@@ -20353,6 +20360,25 @@
20353
20360
  }
20354
20361
  }
20355
20362
 
20363
+ /**
20364
+ * 判断浏览器类型
20365
+ * @returns 按需返回浏览器类型;
20366
+ */
20367
+ function getBowserType() {
20368
+ const userAgent = navigator.userAgent;
20369
+ if (userAgent.indexOf("Chrome")!== -1 && userAgent.indexOf("Safari") !== -1 && userAgent.indexOf("Edg") === -1) {
20370
+ return "Chrome";
20371
+ } else if (userAgent.indexOf("Firefox") !== -1) {
20372
+ return "Firefox";
20373
+ } else if (userAgent.indexOf("Safari") !== -1 && userAgent.indexOf("Chrome") === -1 && userAgent.indexOf("Edge") === -1) {
20374
+ return "Safari";
20375
+ } else if (userAgent.indexOf("Edg") !== -1) {
20376
+ return "Edge";
20377
+ } else {
20378
+ return "Unknown browser"; // 其他浏览器...(可根据自己需要确定是否新增其他浏览器的判断)
20379
+ }
20380
+ }
20381
+
20356
20382
  function getNumberTpl(field){
20357
20383
  return `<span>\${_display.${field.name}}</span>`
20358
20384
  }
@@ -20407,7 +20433,7 @@
20407
20433
 
20408
20434
  function getNameTplUrl(field, ctx){
20409
20435
  if(ctx.objectName === 'cms_files'){
20410
- return `\${context.rootUrl}/api/files/files/\${versions[0]}?download=true`
20436
+ return "${(versions[0] && versions[0].url) ? versions[0].url+'?download=true' : context.rootUrl+'/api/files/files/'+versions[0]+'?download=true'}"
20411
20437
  }
20412
20438
  const href = Router.getObjectDetailPath({
20413
20439
  ...ctx, formFactor: ctx.formFactor, appId: "${appId}", objectName: ctx.objectName || "${objectName}", recordId: `\${${ctx.idFieldName}}`
@@ -20921,6 +20947,7 @@
20921
20947
  var frontend_notifications_allread$1 = "Mark all as read";
20922
20948
  var frontend_notifications_allread_message$1 = "All marked as read";
20923
20949
  var frontend_profile$1 = "Profile";
20950
+ var switch_space$1 = "Switch Space";
20924
20951
  var frontend_about$1 = "About";
20925
20952
  var frontend_log_out$1 = "Log out";
20926
20953
  var frontend_listview_warning_start$1 = "The current ";
@@ -21008,6 +21035,7 @@
21008
21035
  frontend_notifications_allread: frontend_notifications_allread$1,
21009
21036
  frontend_notifications_allread_message: frontend_notifications_allread_message$1,
21010
21037
  frontend_profile: frontend_profile$1,
21038
+ switch_space: switch_space$1,
21011
21039
  frontend_about: frontend_about$1,
21012
21040
  frontend_log_out: frontend_log_out$1,
21013
21041
  frontend_listview_warning_start: frontend_listview_warning_start$1,
@@ -21047,9 +21075,9 @@
21047
21075
  var frontend_display_as = "显示为";
21048
21076
  var frontend_record_sum = "个项目";
21049
21077
  var frontend_button_reload_tooltip = "刷新";
21050
- var frontend_button_search_tooltip = "筛选";
21078
+ var frontend_button_search_tooltip = "搜索";
21051
21079
  var frontend_fields_filter_button_search = "搜索";
21052
- var frontend_fields_filter_button_settings = "设置搜索项";
21080
+ var frontend_fields_filter_button_settings = "选择搜索项";
21053
21081
  var frontend_button_listview_control_tooltip = "列表视图控制";
21054
21082
  var frontend_button_listview_control_label = "列表视图控制";
21055
21083
  var frontend_listview_control_columns = "显示的列";
@@ -21097,6 +21125,7 @@
21097
21125
  var frontend_notifications_allread = "全部标记为已读";
21098
21126
  var frontend_notifications_allread_message = "已全部标记为已读";
21099
21127
  var frontend_profile = "个人资料";
21128
+ var switch_space = "切换工作区";
21100
21129
  var frontend_about = "关于";
21101
21130
  var frontend_log_out = "注销";
21102
21131
  var frontend_listview_warning_start = "当前";
@@ -21185,6 +21214,7 @@
21185
21214
  frontend_notifications_allread: frontend_notifications_allread,
21186
21215
  frontend_notifications_allread_message: frontend_notifications_allread_message,
21187
21216
  frontend_profile: frontend_profile,
21217
+ switch_space: switch_space,
21188
21218
  frontend_about: frontend_about,
21189
21219
  frontend_log_out: frontend_log_out,
21190
21220
  frontend_listview_warning_start: frontend_listview_warning_start,
@@ -21498,7 +21528,8 @@
21498
21528
  "failed": "失败了呢。。"
21499
21529
  }
21500
21530
  }
21501
- }
21531
+ },
21532
+ "expression": "${!recordPermissions.modifyAllRecords}"
21502
21533
  },
21503
21534
  {
21504
21535
  "actionType": "setValue",
@@ -21514,7 +21545,7 @@
21514
21545
  "componentId": quickEditId,
21515
21546
  "args": {
21516
21547
  "value":{
21517
- "quickedit_record_permissions": "${event.data}"
21548
+ "quickedit_record_permissions": "${recordPermissions.modifyAllRecords ? {'allowEdit': true} : event.data}"
21518
21549
  }
21519
21550
  }
21520
21551
  }
@@ -21578,7 +21609,7 @@
21578
21609
  `
21579
21610
  }
21580
21611
  },
21581
- "expression":"${event.data.value}"
21612
+ "expression":"${event.data.value && !recordPermissions.modifyAllRecords}"
21582
21613
  },
21583
21614
  {
21584
21615
  "actionType": "setValue",
@@ -21609,10 +21640,20 @@
21609
21640
  "script": `
21610
21641
  const noPermission = event.data.noPermission;
21611
21642
  const crudComponent = event.context.scoped.getComponentById("${options.crudId}");
21612
- const selectedItems = crudComponent && crudComponent.props.store.selectedItems.concat();
21643
+ let selectedItems = crudComponent && crudComponent.props.store.selectedItems.concat();
21613
21644
  noPermission.forEach(function (item) {
21614
21645
  crudComponent && crudComponent.unSelectItem(_.find(selectedItems,{_id:item}));
21646
+ _.remove(selectedItems, (selected) => selected._id === item);
21615
21647
  })
21648
+ doAction({
21649
+ "componentId": "${quickEditId}",
21650
+ "actionType": "setValue",
21651
+ "args": {
21652
+ "value": {
21653
+ selectedItems
21654
+ }
21655
+ }
21656
+ });
21616
21657
  `
21617
21658
  },
21618
21659
  {
@@ -21673,7 +21714,7 @@
21673
21714
  }
21674
21715
 
21675
21716
  function getFieldWidth(width){
21676
- const defaultWidth = "unset";//用于使table内的td标签下生成div,实现将快速编辑按钮固定在右侧的效果,并不是为了unset效果
21717
+ const defaultWidth = null;
21677
21718
  if(typeof width == 'string'){
21678
21719
  if(isNaN(width)){
21679
21720
  return width || defaultWidth;
@@ -21703,18 +21744,35 @@
21703
21744
  //增加quickEdit属性,实现快速编辑
21704
21745
  const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
21705
21746
  let className = "";
21706
- if(field.wrap != true){
21747
+ const bowserType = getBowserType();
21748
+ if(bowserType === "Safari"){
21707
21749
  className += " whitespace-nowrap ";
21708
21750
  }else {
21709
- className += " break-all ";
21751
+ if(field.wrap != true){
21752
+ className += " whitespace-nowrap ";
21753
+ }else {
21754
+ className += " break-words ";
21755
+ }
21756
+ }
21757
+
21758
+ if (typeof field.amis?.className == "object") {
21759
+ className = {
21760
+ [className]: "true",
21761
+ ...field.amis.className
21762
+ };
21763
+ } else if (typeof field.amis?.className == "string") {
21764
+ className = `${className} ${field.amis.className} `;
21710
21765
  }
21766
+ let fieldAmis = lodash.exports.clone(field.amis);
21767
+ delete fieldAmis?.className;
21768
+
21711
21769
  let columnItem;
21712
21770
  if((field.is_name || field.name === options.labelFieldName) && options.objectName === 'cms_files'){
21713
21771
  const previewFileScript = `
21714
21772
  var data = event.data;
21715
21773
  var file_name = data.versions ? data.name : "${field.label}";
21716
- var file_id = data._id;
21717
- SteedosUI.previewFile && SteedosUI.previewFile({file_name, file_id});
21774
+ var file_id = data.versions && data.versions[0] && data.versions[0]._id;
21775
+ window.previewFile && window.previewFile({file_name, file_id});
21718
21776
  `;
21719
21777
  columnItem = {
21720
21778
  "type": "button",
@@ -21739,11 +21797,11 @@
21739
21797
  "expression": "!!!(window && window.nw && window.nw.require)"//浏览器上直接下载
21740
21798
  },
21741
21799
  {
21742
- "args": {},
21743
- "actionType": "custom",
21744
- "script": previewFileScript,
21745
- // "expression": "!!window?.nw?.require" //PC客户端预览附件
21746
- "expression": "!!!(window && window.nw && window.nw.require)"//PC客户端预览附件
21800
+ "args": {},
21801
+ "actionType": "custom",
21802
+ "script": previewFileScript,
21803
+ // "expression": "!!window?.nw?.require" //PC客户端预览附件
21804
+ "expression": "!!(window && window.nw && window.nw.require)"//PC客户端预览附件
21747
21805
  }
21748
21806
  ]
21749
21807
  }
@@ -21758,7 +21816,7 @@
21758
21816
  toggled: field.toggled,
21759
21817
  static: true,
21760
21818
  className,
21761
- }, field.amis, {name: field.name});
21819
+ }, fieldAmis, {name: field.name});
21762
21820
  }else if(field.type === 'avatar' || field.type === 'image' || field.type === 'file'){
21763
21821
  columnItem = Object.assign({}, {
21764
21822
  type: "switch",
@@ -21769,7 +21827,7 @@
21769
21827
  static: true,
21770
21828
  className,
21771
21829
  ...getAmisFileReadonlySchema(field)
21772
- }, field.amis, {name: field.name});
21830
+ }, fieldAmis, {name: field.name});
21773
21831
  }
21774
21832
  else if(field.type === 'select'){
21775
21833
  const map = getSelectMap(field.options);
@@ -21784,7 +21842,7 @@
21784
21842
  className,
21785
21843
  inputClassName: "inline",
21786
21844
  static: true,
21787
- }, field.amis, {name: field.name});
21845
+ }, fieldAmis, {name: field.name});
21788
21846
  }
21789
21847
  else {
21790
21848
  const tpl = await getFieldTpl(field, options);
@@ -21803,23 +21861,14 @@
21803
21861
  if(field.type === 'textarea'){
21804
21862
  className += 'min-w-56';
21805
21863
  }
21806
- if(field.type === 'date'){
21807
- className += 'date-min-w';
21808
- }
21809
- if(field.type === 'datetime'){
21810
- className += 'datetime-min-w';
21811
- }
21864
+ // if(field.type === 'date'){
21865
+ // className += 'date-min-w';
21866
+ // }
21867
+ // if(field.type === 'datetime'){
21868
+ // className += 'datetime-min-w';
21869
+ // }
21812
21870
 
21813
21871
  //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
21872
 
21824
21873
  if(!field.hidden && !field.extra){
21825
21874
  columnItem = Object.assign({}, {
@@ -21836,7 +21885,7 @@
21836
21885
  static: true,
21837
21886
  options: field.type === 'html' ? {html: true} : null
21838
21887
  // toggled: true
21839
- }, field.amis, {name: field.name});
21888
+ }, fieldAmis, {name: field.name});
21840
21889
 
21841
21890
  if(field.type === 'color'){
21842
21891
  columnItem.type = 'color';
@@ -21903,7 +21952,7 @@
21903
21952
  }
21904
21953
  if(isLeft){
21905
21954
  // 左侧半行
21906
- lineChildrenClassName = "steedos-listview-item-left truncate";
21955
+ lineChildrenClassName = "steedos-listview-item-left truncate h-5";
21907
21956
  if(item.field.is_wide){
21908
21957
  // 左侧全行样式可以单独写,如果需要配置两行省略号效果,可以加样式类 two-lines-truncate
21909
21958
  lineChildrenClassName = "steedos-listview-item-wide";
@@ -21915,7 +21964,7 @@
21915
21964
  }
21916
21965
  else {
21917
21966
  // 右侧半行,这里加样式类 flex flex-shrink-0,是为了省略号只显示在左半行,右半行文字一般比较短,如果也加省略号效果的话,左侧文字多的话,右侧没几个字就显示省略号了
21918
- lineChildrenClassName = "steedos-listview-item-right truncate ml-2 flex flex-shrink-0";
21967
+ lineChildrenClassName = "steedos-listview-item-right truncate ml-2 flex flex-shrink-0 h-5";
21919
21968
  }
21920
21969
  //支持字段amis属性配置classname,识别classname的类型,与原样式合并
21921
21970
  var className;
@@ -22026,8 +22075,16 @@
22026
22075
  "actions": [
22027
22076
  {
22028
22077
  "script": `
22029
- let cms_url = "/api/files/files/"+event.data.versions[0]+"?download=true"
22030
- Steedos.cordovaDownload(encodeURI(Steedos.absoluteUrl(cms_url)), event.data.name);
22078
+ let cms_url = '';
22079
+ let value = event.data.versions[0];
22080
+ if(value){
22081
+ if(value.url){
22082
+ cms_url = value.url;
22083
+ }else{
22084
+ cms_url = Steedos.absoluteUrl("/api/files/files/"+value+"?download=true");
22085
+ }
22086
+ }
22087
+ Steedos.cordovaDownload(encodeURI(cms_url), event.data.name);
22031
22088
  `,
22032
22089
  "actionType": "custom"
22033
22090
  }
@@ -22142,7 +22199,8 @@
22142
22199
  label: "&nbsp;",
22143
22200
  fixed: 'right',
22144
22201
  labelClassName: 'text-center',
22145
- className: 'text-center steedos-listview-operation w-10',
22202
+ //TODO:目前3.6.3-patch.3版本中对于动态classname处理存在问题,简单处理固定列问题,等待amis解决crud的columns不支持动态classname的问题
22203
+ className: 'text-center steedos-listview-operation w-10 is-sticky is-sticky-right is-sticky-first-right',
22146
22204
  buttons: [
22147
22205
  {
22148
22206
  "type": "steedos-dropdown-button",
@@ -22238,7 +22296,7 @@
22238
22296
  }
22239
22297
  return {
22240
22298
  mode: "cards",
22241
- perPageAvailable: [5, 10, 20, 50, 100, 500],
22299
+ perPageAvailable: [20, 50, 100, 500],
22242
22300
  name: "thelist",
22243
22301
  headerToolbarClassName: "py-2 px-2 border-gray-300 border-solid border-b",
22244
22302
  className: "",
@@ -22271,7 +22329,7 @@
22271
22329
 
22272
22330
  return {
22273
22331
  mode: "table",
22274
- perPageAvailable: [5, 10, 20, 50, 100, 500],
22332
+ perPageAvailable: [20, 50, 100, 500],
22275
22333
  name: "thelist",
22276
22334
  headerToolbarClassName: "py-2 px-2 border-gray-300 border-solid border-b",
22277
22335
  className: "",
@@ -22397,7 +22455,7 @@
22397
22455
 
22398
22456
  function getDefaultParams(options){
22399
22457
  return {
22400
- perPage: options.top || options.perPage || 10
22458
+ perPage: options.top || options.perPage || 20
22401
22459
  }
22402
22460
  }
22403
22461
 
@@ -22451,7 +22509,6 @@
22451
22509
  "objectApiName": "\${objectName}",
22452
22510
  "recordId": "",
22453
22511
  "mode": "edit",
22454
- "layout": "normal"
22455
22512
  };
22456
22513
 
22457
22514
  if (payload && payload.schema) {
@@ -22660,7 +22717,7 @@
22660
22717
  const formSchema = {
22661
22718
  "type": "service",
22662
22719
  "visibleOn": "this.filterFormSearchableFields && this.filterFormSearchableFields.length",
22663
- "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",
22720
+ "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",
22664
22721
  "style":{
22665
22722
  "max-height":ctx.formFactor === 'SMALL'?"30vh":"unset"
22666
22723
  },
@@ -23247,7 +23304,7 @@
23247
23304
  "className": "slds-filters"
23248
23305
  },
23249
23306
  "size": "xs",
23250
- "className": `border-gray-300 border-y slds-grid slds-grid_vertical slds-nowrap ${!ctx.isLookup && "mt-2"}`,
23307
+ "className": `border-y slds-grid slds-grid_vertical slds-nowrap ${!ctx.isLookup && "mt-2"}`,
23251
23308
  "visibleOn": "this.showFieldsFilter",
23252
23309
  },
23253
23310
  "className": "bg-white"
@@ -24208,7 +24265,7 @@
24208
24265
  "icon": "fa fa-cog",
24209
24266
  //TODO: dropdown-button只支持在按钮上方配置提示,对于上方按钮的点击会有影响,为保持统一,暂时去除,等待amis优化,https://github.com/baidu/amis/issues/7330
24210
24267
  // "tooltip": i18next.t('frontend_button_listview_control_tooltip'),
24211
- "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded border-gray-300 text-gray-500",
24268
+ "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded text-gray-500",
24212
24269
  "align": "right",
24213
24270
  "visibleOn": "${!isLookup}",
24214
24271
  "buttons": [
@@ -24235,14 +24292,14 @@
24235
24292
  {
24236
24293
  "type": "button",
24237
24294
  "label": instance.t('frontend_display_type_is_table'),
24238
- "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');",
24295
+ "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');",
24239
24296
  "rightIcon": displayAs != 'split' ? "fa fa-check" : null,
24240
24297
  "rightIconClassName": "m-l-sm"
24241
24298
  },
24242
24299
  {
24243
24300
  "type": "button",
24244
24301
  "label": instance.t('frontend_display_type_is_split'),
24245
- "onClick": "const key = 'tab_"+objectName+"_display';localStorage.setItem(key, 'split');const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
24302
+ "onClick": "const key = 'tab_"+objectName+"_display';sessionStorage.setItem(key, 'split');const url = document.location.pathname + '?display=split'; props.env.jumpTo(url);",
24246
24303
  "rightIcon": displayAs === 'split' ? "fa fa-check" : null,
24247
24304
  "rightIconClassName": "m-l-sm"
24248
24305
  }
@@ -24253,7 +24310,7 @@
24253
24310
  "icon": "fa fa-table-columns",
24254
24311
  //TODO: dropdown-button只支持在按钮上方配置提示,对于上方按钮的点击会有影响,暂时去除,等待amis优化,https://github.com/baidu/amis/issues/7330
24255
24312
  // "tooltip": `${i18next.t('frontend_display_as')} ${displayAsLabel}`,
24256
- "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded border-gray-300 text-gray-500",
24313
+ "btnClassName": "antd-Button--iconOnly bg-white !p-2 rounded text-gray-500",
24257
24314
  "align": "right",
24258
24315
  "visibleOn": "${window:innerWidth > 768 && !!!isLookup}",
24259
24316
  "buttons": [
@@ -24385,7 +24442,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24385
24442
  {
24386
24443
  "type": "search-box",
24387
24444
  "name": keywordsSearchBoxName,
24388
- "placeholder": "搜索此列表",
24445
+ "placeholder": "快捷搜索",
24389
24446
  "value": crudKeywords,
24390
24447
  // "clearable": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
24391
24448
  "clearAndSubmit": true,
@@ -24446,7 +24503,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24446
24503
  // //TODO: dropdown-button只支持在按钮上方配置提示,对于上方按钮的点击会有影响,为保持统一,暂时去除,等待amis优化,https://github.com/baidu/amis/issues/7330
24447
24504
  // // "tooltip": i18next.t('frontend_button_reload_tooltip'),
24448
24505
  // "tooltipPlacement": "top",
24449
- // "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
24506
+ // "className": "bg-white p-2 rounded text-gray-500",
24450
24507
  // "label": "",
24451
24508
  // "icon": "fa fa-sync",
24452
24509
  // "visibleOn": "${!showFieldsFilter}",
@@ -24470,7 +24527,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24470
24527
  // "tooltip": i18next.t('frontend_button_reload_tooltip'),
24471
24528
  "tooltip":"",
24472
24529
  "tooltipPlacement": "top",
24473
- "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
24530
+ "className": "bg-white p-2 rounded text-gray-500"
24474
24531
  };
24475
24532
  }
24476
24533
  else {
@@ -24481,7 +24538,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24481
24538
  // "tooltip": i18next.t('frontend_button_reload_tooltip'),
24482
24539
  "tooltip":"",
24483
24540
  "tooltipPlacement": "top",
24484
- "className": "bg-white p-2 rounded border-gray-300 text-gray-500"
24541
+ "className": "bg-white p-2 rounded text-gray-500"
24485
24542
  };
24486
24543
  }
24487
24544
  let toolbarFilter;
@@ -24503,7 +24560,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24503
24560
  "visibleOn": "${isFieldsFilterEmpty == false && isLookup != true}"
24504
24561
  },
24505
24562
  "align": "right",
24506
- "className": "bg-white p-2 rounded border-gray-300 text-gray-500",
24563
+ "className": "bg-white p-2 rounded text-gray-500",
24507
24564
  "onEvent": {
24508
24565
  "click": {
24509
24566
  "actions": [
@@ -24589,7 +24646,10 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24589
24646
  // ]
24590
24647
  if(options.displayAs === 'split'){
24591
24648
  return [
24592
- "switch-per-page",
24649
+ {
24650
+ "type": "switch-per-page",
24651
+ "visibleOn": "${count >= 20}"
24652
+ },
24593
24653
  {
24594
24654
  "type": "pagination",
24595
24655
  "maxButtons": 5,
@@ -24611,7 +24671,6 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24611
24671
  else {
24612
24672
  if(options && options.isRelated){
24613
24673
  return [
24614
- "statistics",
24615
24674
  {
24616
24675
  "type": "pagination",
24617
24676
  "maxButtons": 10,
@@ -24624,7 +24683,6 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24624
24683
  const no_pagination = mainObject.paging && (mainObject.paging.enabled === false);
24625
24684
  const is_lookup = options.isLookup;
24626
24685
  const commonConfig = [
24627
- "statistics",
24628
24686
  {
24629
24687
  "type": "pagination",
24630
24688
  "maxButtons": 10,
@@ -24635,7 +24693,10 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24635
24693
  if (no_pagination && is_lookup) {
24636
24694
  return commonConfig;
24637
24695
  } else {
24638
- return ["switch-per-page", ...commonConfig];
24696
+ return [{
24697
+ "type": "switch-per-page",
24698
+ "visibleOn": "${count >= 20}"
24699
+ }, ...commonConfig];
24639
24700
  }
24640
24701
  }
24641
24702
  }
@@ -24659,7 +24720,6 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24659
24720
  "timeOut": 1000
24660
24721
  }
24661
24722
  });
24662
- resizeWindow();
24663
24723
  const scope = event.context.scoped;
24664
24724
  // let filterFormValues = event.data;
24665
24725
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
@@ -24735,8 +24795,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
24735
24795
  /*
24736
24796
  * @Author: baozhoutao@steedos.com
24737
24797
  * @Date: 2022-07-05 15:55:39
24738
- * @LastEditors: liaodaxue
24739
- * @LastEditTime: 2023-10-20 11:38:25
24798
+ * @LastEditors: baozhoutao@steedos.com
24799
+ * @LastEditTime: 2024-01-16 11:14:34
24740
24800
  * @Description:
24741
24801
  */
24742
24802
 
@@ -25303,17 +25363,13 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25303
25363
 
25304
25364
  function getLookupSapceUserTreeSchema(isMobile){
25305
25365
  let apiAdaptor = `
25306
- // console.log("===getLookupSapceUserTreeSchema===", JSON.stringify(payload));
25307
25366
  const records = payload.data.options;
25308
- let isTreeOptionsComputed = false;
25309
- if(records.length === 1 && records[0].children){
25310
- isTreeOptionsComputed = true;
25311
- }
25312
- if(isTreeOptionsComputed){
25313
- return payload;
25314
- }
25315
25367
  const treeRecords = [];
25316
- const getChildren = (records, childrenIds) => {
25368
+ const getChildren = (currentRecord, records, childrenIds) => {
25369
+ if (currentRecord.children && typeof currentRecord.children[0] === "object") {
25370
+ // 考虑api配置了cache缓存的话,不会请求接口但是会重新进这个接收适配器脚本且payload.data.options返回的会是上一次计算结果,这里直接返回计算过的children
25371
+ return currentRecord.children;
25372
+ }
25317
25373
  if (!childrenIds) {
25318
25374
  return;
25319
25375
  }
@@ -25322,7 +25378,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25322
25378
  });
25323
25379
  _.each(children, (item) => {
25324
25380
  if (item.children) {
25325
- item.children = getChildren(records, item.children)
25381
+ item.children = getChildren(item, records, item.children)
25326
25382
  }else{
25327
25383
  item.children = [];
25328
25384
  }
@@ -25348,7 +25404,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25348
25404
 
25349
25405
  _.each(records, (record) => {
25350
25406
  if (record.noParent == 1) {
25351
- treeRecords.push(Object.assign({}, record, { children: getChildren(records, record.children) }));
25407
+ treeRecords.push(Object.assign({}, record, { children: getChildren(record, records, record.children) }));
25352
25408
  }
25353
25409
  });
25354
25410
  console.log(treeRecords)
@@ -25398,6 +25454,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25398
25454
  }
25399
25455
  },
25400
25456
  "label": "",
25457
+ "mode": "normal",
25401
25458
  "name": "organizations",
25402
25459
  "multiple": false,
25403
25460
  "joinValues": false,
@@ -25540,6 +25597,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25540
25597
  }
25541
25598
  });
25542
25599
 
25600
+ let listviewFilter = getListViewFilter(listView);
25601
+ let listviewFiltersFunction = listView && listView._filters;
25602
+
25543
25603
  let sort = "";
25544
25604
  if(listView){
25545
25605
  sort = getListViewSort(listView);
@@ -25586,7 +25646,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25586
25646
  Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
25587
25647
  }
25588
25648
  const selfData = JSON.parse(JSON.stringify(api.data.$self));
25589
- var filters = [];
25649
+ ${listviewFilter && !ctx.inFilterForm ? `var filters = ${JSON.stringify(listviewFilter)};` : 'var filters = [];'}
25590
25650
  var pageSize = api.data.pageSize || 10;
25591
25651
  var pageNo = api.data.pageNo || 1;
25592
25652
  var skip = (pageNo - 1) * pageSize;
@@ -25648,6 +25708,16 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25648
25708
  }
25649
25709
 
25650
25710
  const inFilterForm = ${ctx.inFilterForm};
25711
+
25712
+ const listviewFiltersFunction = ${listviewFiltersFunction};
25713
+
25714
+ if(listviewFiltersFunction && !inFilterForm){
25715
+ const _filters0 = listviewFiltersFunction(filters, api.data.$self.__super);
25716
+ if(_filters0 && _filters0.length){
25717
+ filters.push(_filters0);
25718
+ }
25719
+ }
25720
+
25651
25721
  const filtersFunction = ${field.filtersFunction || field._filtersFunction};
25652
25722
 
25653
25723
  if(filtersFunction && !inFilterForm){
@@ -25766,13 +25836,15 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25766
25836
 
25767
25837
  pickerSchema.affixHeader = false;
25768
25838
 
25769
- var headerToolbarItems = [];
25839
+
25840
+
25841
+ pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { isLookup: true, keywordsSearchBoxName });
25842
+
25770
25843
  if(referenceTo.objectName === "space_users" && field.reference_to_field === "user"){
25771
- headerToolbarItems = getLookupSapceUserTreeSchema(isMobile);
25844
+ pickerSchema.headerToolbar.push(getLookupSapceUserTreeSchema(isMobile));
25772
25845
  pickerSchema.className = pickerSchema.className || "" + " steedos-select-user";
25773
25846
  }
25774
-
25775
- pickerSchema.headerToolbar = getObjectHeaderToolbar(refObjectConfig, fieldsArr, ctx.formFactor, { headerToolbarItems, isLookup: true, keywordsSearchBoxName });
25847
+
25776
25848
  const isAllowCreate = refObjectConfig.permissions.allowCreate;
25777
25849
  const isCreate = lodash.exports.isBoolean(field.create) ? field.create : true;
25778
25850
  // lookup字段配置过滤条件就强制不显示新建按钮
@@ -25885,6 +25957,16 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25885
25957
  pickerSchema.footerToolbar = ["pagination"];
25886
25958
  }
25887
25959
 
25960
+ if(field.inlineHelpText){
25961
+ pickerSchema.toolbarClassName = "hasHelpText";
25962
+ pickerSchema.headerToolbar = [{
25963
+ "type": "tpl",
25964
+ "tpl": field.inlineHelpText,
25965
+ "className": "text-secondary"
25966
+ }, ...pickerSchema.headerToolbar];
25967
+ }
25968
+ pickerSchema.className = (pickerSchema.className || "") + " steedos-lookup-crud";
25969
+
25888
25970
  const data = {
25889
25971
  type: getAmisStaticFieldType('picker', readonly),
25890
25972
  modalTitle: instance.t('frontend_form_please_select') + " " + refObjectConfig.label,
@@ -25960,6 +26042,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25960
26042
  const refObjectConfig = referenceTo && await getUISchema(referenceTo.objectName);
25961
26043
  let listView = getLookupListView(refObjectConfig);
25962
26044
 
26045
+ let listviewFilter = getListViewFilter(listView);
26046
+ let listviewFiltersFunction = listView && listView._filters;
26047
+
25963
26048
  let sort = "";
25964
26049
  if(listView){
25965
26050
  sort = getListViewSort(listView);
@@ -25989,7 +26074,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
25989
26074
  apiInfo.data['rfield'] = `\${object_name}`;
25990
26075
  // [["_id", "=", "$${field.name}._id"],"or",["name", "contains", "$term"]]
25991
26076
  apiInfo.requestAdaptor = `
25992
- var filters = [];
26077
+ ${listviewFilter && !ctx.inFilterForm ? `var filters = ${JSON.stringify(listviewFilter)};` : 'var filters = [];'}
25993
26078
  var top = 200;
25994
26079
  if(api.data.$term){
25995
26080
  filters = [["${referenceTo?.NAME_FIELD_KEY || 'name'}", "contains", api.data.$term]];
@@ -26012,6 +26097,16 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26012
26097
  }
26013
26098
 
26014
26099
  const inFilterForm = ${ctx.inFilterForm};
26100
+
26101
+ const listviewFiltersFunction = ${listviewFiltersFunction};
26102
+
26103
+ if(listviewFiltersFunction && !inFilterForm){
26104
+ const _filters0 = listviewFiltersFunction(filters, api.data.$);
26105
+ if(_filters0 && _filters0.length){
26106
+ filters.push(_filters0);
26107
+ }
26108
+ }
26109
+
26015
26110
  const filtersFunction = ${field.filtersFunction || field._filtersFunction};
26016
26111
 
26017
26112
  if(filtersFunction && !inFilterForm){
@@ -26134,9 +26229,17 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26134
26229
  }
26135
26230
  // console.log(`lookupToAmis====`, field, readonly, ctx)
26136
26231
  if(readonly){
26137
- return {
26138
- type: getAmisStaticFieldType('picker', readonly),
26139
- tpl: getRelatedFieldTpl(field, ctx)
26232
+ if(field.reference_to){
26233
+ return {
26234
+ type: 'steedos-field',
26235
+ config: field,
26236
+ static: true
26237
+ }
26238
+ }else {
26239
+ return {
26240
+ type: getAmisStaticFieldType('picker', readonly),
26241
+ tpl: getRelatedFieldTpl(field, ctx)
26242
+ }
26140
26243
  }
26141
26244
  }
26142
26245
  if(field.reference_to && !lodash.exports.isString(field.reference_to) && !readonly){
@@ -26677,13 +26780,31 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26677
26780
  };
26678
26781
  break;
26679
26782
  case 'input-datetime-range':
26783
+ // convertData = {
26784
+ // type: "input-datetime-range",
26785
+ // inputFormat: 'YYYY-MM-DD HH:mm',
26786
+ // format:'YYYY-MM-DDTHH:mm:ss.SSSZ',
26787
+ // tpl: readonly ? Tpl.getDateTimeTpl(field) : null,
26788
+ // utc: true,
26789
+ // joinValues: false
26790
+ // }
26791
+ // 日期时间字段,按日期方式展现显示控件,用户不用关心小时分钟
26680
26792
  convertData = {
26681
- type: "input-datetime-range",
26682
- inputFormat: 'YYYY-MM-DD HH:mm',
26793
+ type: "input-date-range",
26794
+ inputFormat: "YYYY-MM-DD HH:mm",
26683
26795
  format:'YYYY-MM-DDTHH:mm:ss.SSSZ',
26684
26796
  tpl: readonly ? getDateTimeTpl(field) : null,
26685
26797
  utc: true,
26686
- joinValues: false
26798
+ joinValues: false,
26799
+ "shortcuts": [
26800
+ "thismonth",
26801
+ "2monthsago",
26802
+ "3monthslater",
26803
+ "prevquarter",
26804
+ "thisquarter",
26805
+ "thisyear",
26806
+ "lastYear"
26807
+ ]
26687
26808
  };
26688
26809
  break;
26689
26810
  case 'datetime':
@@ -26734,7 +26855,7 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26734
26855
  convertData = {
26735
26856
  type: getAmisStaticFieldType('datetime', readonly),
26736
26857
  inputFormat: 'YYYY-MM-DD HH:mm',
26737
- format: 'YYYY-MM-DDTHH:mm:ss.SSSZ',
26858
+ format: 'YYYY-MM-DDTHH:mm:00.000Z',
26738
26859
  tpl: readonly ? getDateTimeTpl(field) : null,
26739
26860
  utc: true,
26740
26861
  };
@@ -26865,6 +26986,36 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
26865
26986
  convertData = {
26866
26987
  type: 'static-text'
26867
26988
  };
26989
+ }else if(field.autonumber_enable_modify){
26990
+ convertData = {
26991
+ "type": "input-group",
26992
+ "body": [
26993
+ {
26994
+ "type": "input-text",
26995
+ "name": field.name
26996
+ },
26997
+ {
26998
+ "type": "button",
26999
+ "label": "自动获取",
27000
+ "actionType": "ajax",
27001
+ "api": {
27002
+ "url": `\${context.rootUrl}/api/autonumber/generator/\${objectName}/${field.name}`,
27003
+ "method": "post",
27004
+ "headers": {
27005
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
27006
+ },
27007
+ "adaptor": `
27008
+ payload.data["${field.name}"] = payload.data && payload.data.autonumber;
27009
+ delete payload.data.autonumber;
27010
+ return payload;
27011
+ `
27012
+ },
27013
+ "messages": {
27014
+ "success": "获取成功"
27015
+ }
27016
+ }
27017
+ ]
27018
+ };
26868
27019
  }
26869
27020
  break;
26870
27021
  case 'url':
@@ -27019,11 +27170,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27019
27170
  if(field.subFields){
27020
27171
  convertData = {
27021
27172
  type: 'steedos-input-table',
27022
- showIndex: true,
27023
27173
  editable: !readonly,
27024
27174
  addable: !readonly,
27025
27175
  removable: !readonly,
27026
- draggable: !readonly,
27027
27176
  fields: [],
27028
27177
  amis:{
27029
27178
  columnsTogglable: false
@@ -27075,9 +27224,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27075
27224
  if(field.is_wide || convertData.type === 'group'){
27076
27225
  convertData.className = 'col-span-2 m-0';
27077
27226
  }else {
27078
- convertData.className = 'm-1';
27227
+ convertData.className = 'm-0';
27079
27228
  }
27080
- if(readonly){
27229
+ if(readonly && ctx.mode !== 'edit'){
27081
27230
  convertData.className = `${convertData.className} border-b`;
27082
27231
  }
27083
27232
  if(readonly){
@@ -27100,6 +27249,10 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27100
27249
  }
27101
27250
  }
27102
27251
 
27252
+ if(ctx.amisData && ctx.amisData._master && ctx.amisData._master.relatedKey === field.name){
27253
+ convertData.className = `${convertData.className || ''} hidden`;
27254
+ }
27255
+
27103
27256
  if(lodash.exports.isString(baseData.required)){
27104
27257
  if(baseData.required.startsWith("{{")){
27105
27258
  baseData.requiredOn = `${baseData.required.substring(2, baseData.required.length -2).replace(/formData./g, 'data.')}`;
@@ -27168,8 +27321,9 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
27168
27321
  fieldNamePrefix = `${fieldNamePrefix}between__`;
27169
27322
  }
27170
27323
  if(_field.type === 'datetime'){
27171
- // 特意改为日期范围而不是日期时间范围,因为搜索时一般精确到日期就足够了,需要精确到日期时间范围需要在字段上配置amis属性来实现
27172
- _field.type = 'input-date-range';
27324
+ // 这里如果想把搜索范围展示效果改为日期范围,不可以直接改为input-date-range,因为它们规则不一样,包括时区规则和小时分秒的存值规则都不一样
27325
+ // 所以想改为展示日期范围效果,只能改input-datetime-range类型本身的属性来实现
27326
+ _field.type = 'input-datetime-range';
27173
27327
  _field.is_wide = true;
27174
27328
  fieldNamePrefix = `${fieldNamePrefix}between__`;
27175
27329
  }