@steedos-widgets/amis-object 3.6.11-beta.6 → 3.6.11

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.
@@ -11457,7 +11457,6 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
11457
11457
  // 等升级到amis 3.4+,blur事件换成change事件执行onChangeScript,就可以不用在onSearchScript中执行onChangeScript了
11458
11458
  // 基于amis3.6,已经不再用blur事件触发onChangeScript,所以这里把之前加上的onChangeScript去掉了,如果以后还要换blur来触发onChangeScript脚本的话,这里又要加回onChangeScript脚本
11459
11459
  const onSearchScript = `
11460
- // console.log("==search=onSearchScript===");
11461
11460
  // 下面的脚本只为解决点击搜索表单取消按钮,再重新在其中输入过滤条件但是不点击搜索按钮或回车按键触发搜索,此时在快速搜索框输入过滤条件按回车按键会把搜索表单中的过滤条件清空的问题
11462
11461
  const scope = event.context.scoped;
11463
11462
  // 如果点击过顶部搜索栏表单的取消按钮,会把此处event.data.__super.__super.__super中的搜索表单项的所有字段设置为null
@@ -11478,13 +11477,15 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
11478
11477
  }, 500);
11479
11478
  `;
11480
11479
 
11481
- const onBlurScript = `
11482
- // console.log("==search=onBlurScript===");
11483
- // 失去焦点事件触发搜索
11484
- const scope = event.context.scoped;
11485
- const sb = SteedosUI.getClosestAmisComponentByType(scope, "search-box");
11486
- sb.handleSearch();
11487
- `;
11480
+ // const onBlurScript = `
11481
+ // // 失去焦点事件触发搜索,先去掉,因为会有bug,见:[Bug]: 列表上快速搜索输入框输入内容后点击放大镜界面上列表未显示过滤后的内容 #6742
11482
+ // const value = event.data.value;
11483
+ // setTimeout(function(){
11484
+ // const scope = event.context.scoped;
11485
+ // const sb = SteedosUI.getClosestAmisComponentByType(scope, "search-box");
11486
+ // sb.handleSearch(value);
11487
+ // }, 500);
11488
+ // `;
11488
11489
 
11489
11490
  return {
11490
11491
  "type": "tooltip-wrapper",
@@ -11523,14 +11524,14 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
11523
11524
  },
11524
11525
  ]
11525
11526
  },
11526
- "blur": {
11527
- "actions": [
11528
- {
11529
- "actionType": "custom",
11530
- "script": onBlurScript
11531
- },
11532
- ]
11533
- }
11527
+ // "blur": {
11528
+ // "actions": [
11529
+ // {
11530
+ // "actionType": "custom",
11531
+ // "script": onBlurScript
11532
+ // },
11533
+ // ]
11534
+ // }
11534
11535
  }
11535
11536
  }
11536
11537
  ]
@@ -11563,13 +11564,10 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
11563
11564
  // listView.handleChangePage(1);
11564
11565
 
11565
11566
 
11566
- // 触发搜索,而不是reload,因为快速搜索输入框失去焦点已经会触发搜索了,这里用reload的话,会有bug
11567
- // 不加setTimeout的话,快速搜索输入框失去焦点再触发此脚本还是有问题
11568
- setTimeout(function(){
11569
- const scope = event.context.scoped;
11570
- const sb = SteedosUI.getClosestAmisComponentByType(scope, "search-box");
11571
- sb.handleSearch();
11572
- }, 500);
11567
+ // 触发搜索,而不是reload,因为使用search-box可以在amissdk是3.6.3-patch.8+实现在非第一页的情况下,快速搜索输入框中过滤条件变更时再点刷新可以自动跳转翻页到第一页
11568
+ const scope = event.context.scoped;
11569
+ const sb = SteedosUI.getClosestAmisComponentByType(scope, "search-box");
11570
+ sb.handleSearch();
11573
11571
  `;
11574
11572
  toolbarReloadButton = {
11575
11573
  // "type": "reload",//不可以直接使用reload,因为它不会设置页码到第一页,这在加载更多按钮的翻页模式下会有问题
@@ -14542,12 +14540,24 @@ async function lookupToAmisPicker(field, readonly, ctx){
14542
14540
  }
14543
14541
 
14544
14542
  var fieldFilters = ${JSON.stringify(field.filters)};
14545
- if(fieldFilters && fieldFilters.length){
14546
- var filtersForString = JSON.stringify(fieldFilters);
14547
- if(filtersForString.indexOf('$') > -1) {
14548
- var currentAmis = amisRequire('amis');
14549
- fieldFilters = JSON.parse(currentAmis.evaluate(filtersForString, api.data.$self.__super))
14543
+ var currentAmis = amisRequire('amis');
14544
+ //递归fieldFilters数组,检查每一个元素,判断若是公式,就仅把它解析
14545
+ function traverseNestedArray(arr) {
14546
+ for (let i = 0; i < arr.length; i++) {
14547
+ if (Array.isArray(arr[i])) {
14548
+ // 如果当前元素是数组,则递归调用自身继续遍历
14549
+ traverseNestedArray(arr[i]);
14550
+ } else {
14551
+ // 如果当前元素不是数组,则处理该元素
14552
+ // 下面正则用于匹配amis公式\${}
14553
+ if(/\\\$\\\{([^}]*)\\\}/.test(arr[i])) {
14554
+ arr[i] = currentAmis.evaluate(arr[i], api.data.$);
14555
+ }
14556
+ }
14550
14557
  }
14558
+ }
14559
+ if(fieldFilters && fieldFilters.length){
14560
+ traverseNestedArray(fieldFilters);
14551
14561
  filters.push(fieldFilters);
14552
14562
  }
14553
14563
 
@@ -14947,12 +14957,24 @@ async function lookupToAmisSelect(field, readonly, ctx){
14947
14957
  // }
14948
14958
 
14949
14959
  var fieldFilters = ${JSON.stringify(field.filters)};
14950
- if(fieldFilters && fieldFilters.length){
14951
- var filtersForString = JSON.stringify(fieldFilters);
14952
- if(filtersForString.indexOf('$') > -1) {
14953
- var currentAmis = amisRequire('amis');
14954
- fieldFilters = JSON.parse(currentAmis.evaluate(filtersForString, api.data.$))
14960
+ var currentAmis = amisRequire('amis');
14961
+ //递归fieldFilters数组,检查每一个元素,判断若是公式,就仅把它解析
14962
+ function traverseNestedArray(arr) {
14963
+ for (let i = 0; i < arr.length; i++) {
14964
+ if (Array.isArray(arr[i])) {
14965
+ // 如果当前元素是数组,则递归调用自身继续遍历
14966
+ traverseNestedArray(arr[i]);
14967
+ } else {
14968
+ // 如果当前元素不是数组,则处理该元素
14969
+ // 下面正则用于匹配amis公式\${}
14970
+ if(/\\\$\\\{([^}]*)\\\}/.test(arr[i])) {
14971
+ arr[i] = currentAmis.evaluate(arr[i], api.data.$);
14972
+ }
14973
+ }
14955
14974
  }
14975
+ }
14976
+ if(fieldFilters && fieldFilters.length){
14977
+ traverseNestedArray(fieldFilters);
14956
14978
  filters.push(fieldFilters);
14957
14979
  }
14958
14980