@steedos-widgets/amis-object 1.3.17-beta.2 → 1.3.18

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.
@@ -1,6 +1,6 @@
1
1
  import React, { createContext, useState, useEffect, createElement } from 'react';
2
2
  import * as _$1 from 'lodash';
3
- import _$1__default, { isEmpty, isArray, each, find, endsWith, cloneDeep, toArray, mergeWith, isString, union, has, map, slice, defaultsDeep as defaultsDeep$1, includes, filter, omitBy, isNil, get as get$1, isObject as isObject$1, forEach, trimEnd, isBoolean, startsWith, isFunction, compact, difference, keys, pick, first, values, pickBy, random, assign } from 'lodash';
3
+ import _$1__default, { isEmpty, isArray, each, find, endsWith, cloneDeep, toArray, mergeWith, isString, union, has, map, slice, defaultsDeep as defaultsDeep$1, includes, clone, filter, omitBy, isNil, get as get$1, isObject as isObject$1, forEach, trimEnd, isBoolean, startsWith, isFunction, compact, difference, keys, pick, first, values, pickBy, random, assign } from 'lodash';
4
4
  import { Dropdown, Image, Tabs, Spin, Badge, Skeleton, Modal as Modal$1, message, notification, Button, Space, Drawer as Drawer$1 } from 'antd';
5
5
  import ReactDOM, { createRoot } from 'react-dom';
6
6
 
@@ -5127,9 +5127,9 @@ function getFieldWidth(width){
5127
5127
  const defaultWidth = "unset";//用于使table内的td标签下生成div,实现将快速编辑按钮固定在右侧的效果,并不是为了unset效果
5128
5128
  if(typeof width == 'string'){
5129
5129
  if(isNaN(width)){
5130
- return width;
5130
+ return width || defaultWidth;
5131
5131
  }else {
5132
- return Number(width);
5132
+ return Number(width) || defaultWidth;
5133
5133
  }
5134
5134
  }else if(typeof width == 'number'){
5135
5135
  return width;
@@ -5230,6 +5230,7 @@ async function getTableColumns$1(fields, options){
5230
5230
  width: getFieldWidth(field.width),
5231
5231
  toggled: field.toggled,
5232
5232
  className,
5233
+ inputClassName: "inline",
5233
5234
  static: true,
5234
5235
  }, field.amis, {name: field.name});
5235
5236
  }
@@ -5267,6 +5268,7 @@ async function getTableColumns$1(fields, options){
5267
5268
  tpl: tpl,
5268
5269
  toggled: field.toggled,
5269
5270
  className,
5271
+ inputClassName: "inline",
5270
5272
  static: true,
5271
5273
  options: field.type === 'html' ? {html: true} : null
5272
5274
  // toggled: true
@@ -5288,8 +5290,8 @@ async function getTableColumns$1(fields, options){
5288
5290
  const href = Router$1.getObjectDetailPath({
5289
5291
  ...options, formFactor: options.formFactor, appId: "${appId}", objectName: options.objectName || "${objectName}", recordId: `\${${options.idFieldName}}`
5290
5292
  });
5291
- columns[0].type = "tpl";
5292
- columns[0].tpl = `<a href="${href}">\${${columns[0].name}}</a>`;
5293
+ columns[1].type = "tpl";
5294
+ columns[1].tpl = `<a href="${href}">\${${columns[1].name}}</a>`;
5293
5295
  }
5294
5296
  return columns;
5295
5297
  }
@@ -5756,19 +5758,25 @@ async function getTableApi(mainObject, fields, options){
5756
5758
  if(options.isRelated){
5757
5759
  api.url += "&recordId=${_master.recordId}";
5758
5760
  }
5759
- // api.cache = 3000;
5760
-
5761
+ api.cache = 3000;
5761
5762
  api.data.$term = "$term";
5762
5763
  api.data.term = "$term";
5763
5764
  api.data.$self = "$$";
5764
5765
  api.data.self = "$$";
5765
5766
  api.data.filter = "$filter";
5766
- api.data.__filterFormValues = "${__filterFormValues}";
5767
- api.data.__serachBoxValues = "${__serachBoxValues}";
5768
5767
  api.data.loaded = "${loaded}";
5769
5768
  api.data.listViewId = "${listViewId}";
5770
5769
  api.data.listName = "${listName}";
5771
5770
  api.requestAdaptor = `
5771
+ let __changedFilterFormValues = api.data.$self.__changedFilterFormValues || {};
5772
+ let __changedSearchBoxValues = api.data.$self.__changedSearchBoxValues || {};
5773
+ // 把表单搜索和快速搜索中的change事件中记录的过滤条件也拼到$self中,是为解决触发搜索请求时,两边输入的过滤条件都带上,即:
5774
+ // 有时在搜索表单中输入过滤条件事,忘记点击回车键或搜索按钮,而是进一步修改快速搜索框中的关键字点击其中回车键触发搜索
5775
+ // 这种情况下,触发的搜索请求中没有带上搜索表单中输入的过滤条件。
5776
+ // 反过来先在快速搜索框中输入过滤条件却不点击其中回车键触发搜索,而是到搜索表单中触发搜索请求也是一样的。
5777
+ // 这里直接合并到api.data.$self,而不是后面定义的selfData变量,是因为可以省去在接收适配器中写一样的合并逻辑
5778
+ // 如果有问题可以改为合并到selfData变量中,但是要在接收适配器中写上一样的合并逻辑,否则里面的过滤条件不会存入本地存储中
5779
+ Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
5772
5780
  // selfData 中的数据由 CRUD 控制. selfData中,只能获取到 CRUD 给定的data. 无法从数据链中获取数据.
5773
5781
  let selfData = JSON.parse(JSON.stringify(api.data.$self));
5774
5782
  // 保留一份初始data,以供自定义发送适配器中获取原始数据。
@@ -5838,11 +5846,7 @@ async function getTableApi(mainObject, fields, options){
5838
5846
  userFilters = [["${valueField.name}", "=", selfData.value]];
5839
5847
  }
5840
5848
 
5841
- const __filterFormValues = api.data.__filterFormValues;
5842
- const __serachBoxValues = api.data.__serachBoxValues;
5843
- // 筛选按钮
5844
- const filterSelfData = __filterFormValues ? __filterFormValues : selfData;
5845
- var searchableFilter = SteedosUI.getSearchFilter(filterSelfData) || [];
5849
+ var searchableFilter = SteedosUI.getSearchFilter(selfData) || [];
5846
5850
  if(searchableFilter.length > 0){
5847
5851
  if(userFilters.length > 0 ){
5848
5852
  userFilters = [userFilters, 'and', searchableFilter];
@@ -5863,8 +5867,7 @@ async function getTableApi(mainObject, fields, options){
5863
5867
  })
5864
5868
  }
5865
5869
 
5866
- const keyWords = __serachBoxValues ? __serachBoxValues.__keywords : selfData.__keywords;
5867
- var keywordsFilters = SteedosUI.getKeywordsSearchFilter(keyWords, allowSearchFields);
5870
+ var keywordsFilters = SteedosUI.getKeywordsSearchFilter(selfData.__keywords, allowSearchFields);
5868
5871
  if(keywordsFilters && keywordsFilters.length > 0){
5869
5872
  userFilters.push(keywordsFilters);
5870
5873
  }
@@ -5984,7 +5987,25 @@ async function getTableApi(mainObject, fields, options){
5984
5987
  if(enable_tree){
5985
5988
  const records = payload.data.rows || [];
5986
5989
  const getTreeOptions = SteedosUI.getTreeOptions
5987
- payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
5990
+ let isTreeOptionsComputed = false;
5991
+ if(records.length === 1 && records[0].children){
5992
+ isTreeOptionsComputed = true;
5993
+ }
5994
+ if(!isTreeOptionsComputed){
5995
+ // 如果api接口设置在缓存,缓存期间并不会重新请求接口,payload.data.rows是上次计算后的结果
5996
+ payload.data.rows = getTreeOptions(records,{"valueField":"_id"});
5997
+ }
5998
+ try{
5999
+ setTimeout(() => {
6000
+ let expandBtn = $('.steedos-object-listview-content .antd-Table-content .antd-Table-table thead .antd-Table-expandBtn');
6001
+ if(expandBtn && expandBtn.length > 0 && !expandBtn.hasClass("is-active")){
6002
+ expandBtn[0].click();
6003
+ }
6004
+ }, 600);
6005
+ }
6006
+ catch(ex){
6007
+ console.error("tree数据格式展开异常:", ex);
6008
+ }
5988
6009
  }
5989
6010
 
5990
6011
 
@@ -6017,19 +6038,6 @@ async function getTableApi(mainObject, fields, options){
6017
6038
  selfData.page = localListViewProps.page || 1;
6018
6039
  }
6019
6040
  }
6020
-
6021
- // 列表视图(对象表格)筛选按钮表单输入框输入内容后,如果不按回车键或者搜索按钮,selfData中该输入框是没有最新值的。
6022
- const __filterFormValues = api.body.__filterFormValues;
6023
- if(__filterFormValues){
6024
- let filterFormValues = JSON.parse(JSON.stringify(__filterFormValues)) || {};
6025
- selfData = Object.assign({}, selfData, filterFormValues);
6026
- }
6027
- // “搜索此列表”搜索框同理。
6028
- const __serachBoxValues = api.body.__serachBoxValues;
6029
- if(__serachBoxValues){
6030
- let serachBoxValues = JSON.parse(JSON.stringify(__serachBoxValues)) || {};
6031
- selfData = Object.assign({}, selfData, serachBoxValues);
6032
- }
6033
6041
 
6034
6042
  delete selfData.context;
6035
6043
  delete selfData.global;
@@ -8804,6 +8812,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
8804
8812
  const filterFormSchema = await getObjectFieldsFilterFormSchema(ctx);
8805
8813
  const keywordsSearchBoxName = ctx.keywordsSearchBoxName || "__keywords";
8806
8814
  const onSearchScript = `
8815
+ // console.log("===onSearchScript=form==");
8807
8816
  const scope = event.context.scoped;
8808
8817
  var filterForm = scope.parent.parent.getComponents().find(function(n){
8809
8818
  return n.props.type === "form";
@@ -8860,25 +8869,13 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
8860
8869
  crudService && crudService.setData({isFieldsFilterEmpty, showFieldsFilter});
8861
8870
  `;
8862
8871
  const onCancelScript = `
8863
- doAction(
8864
- {
8865
- "componentId": 'service_${ctx.crudId}',
8866
- "actionType": "setValue",
8867
- "args": {
8868
- "value": {
8869
- "__filterFormValues": null
8870
- }
8871
- }
8872
- }
8873
- )
8872
+ // console.log("===onCancelScript=form==");
8874
8873
  const scope = event.context.scoped;
8875
8874
  var filterForm = scope.parent.parent.getComponents().find(function(n){
8876
8875
  return n.props.type === "form";
8877
8876
  });
8878
8877
  var filterFormValues = filterForm.getValues();
8879
- var listView = scope.parent.parent.parent.getComponents().find(function(n){
8880
- return n.props.type === "crud";
8881
- });
8878
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
8882
8879
  const removedValues = {};
8883
8880
  for(var k in filterFormValues){
8884
8881
  if(/^__searchable__/.test(k)){
@@ -8893,7 +8890,7 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
8893
8890
  if(localListViewProps){
8894
8891
  localListViewProps = JSON.parse(localListViewProps);
8895
8892
  for(var k in localListViewProps){
8896
- if(k !== "__keywords"){
8893
+ if(/^__searchable__/.test(k)){
8897
8894
  removedValues[k] = null;
8898
8895
  }
8899
8896
  }
@@ -8904,20 +8901,35 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
8904
8901
  //lookup字段保留快速搜索条件
8905
8902
  removedValues[keywordsSearchBoxName] = filterFormValues[keywordsSearchBoxName];
8906
8903
  }
8907
- filterForm.reset();
8908
- setTimeout(()=>{
8909
- listView.handleFilterSubmit(removedValues);
8910
- }, 100);
8911
- const filterService = filterForm.context.getComponents().find(function(n){
8912
- return n.props.type === "service";
8913
- });
8914
- filterService.setData({showFieldsFilter: !!!filterService.props.data.showFieldsFilter});
8904
+ filterForm.setValues(removedValues);//会把表单提交到toolbar的快速搜索区域,造成在快速搜索框中触发搜索时再次把搜索表单中的字段值清除掉的bug,已单独在快速搜索框那边添加搜索事件代码处理过了
8905
+ // 以下方法都无法实现清除表单值
8906
+ // filterForm.setValues({}, true)
8907
+ // filterForm.reset();
8908
+ // filterForm.handleAction({},{
8909
+ // "actionType": "setValue",
8910
+ // "args": {
8911
+ // "value": removedValues
8912
+ // }
8913
+ // });
8914
+ // 下面触发clear动作可以清除表单值,且不会把表单提交到toolbar的快速搜索区域,但是会把金额等范围字段清空成非范围字段
8915
+ // filterForm.handleAction({},{
8916
+ // "actionType": "clear"
8917
+ // });
8918
+
8919
+ // 清除__changedFilterFormValues中的值
8920
+ crud && crud.setData({__changedFilterFormValues: {}});
8921
+ filterForm.handleFormSubmit(event);
8922
+ // crud.handleFilterSubmit(removedValues);
8923
+
8924
+ let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
8925
+ filterFormService.setData({showFieldsFilter: !!!filterFormService.props.data.showFieldsFilter});
8915
8926
  //触发amis crud 高度重算
8916
8927
  setTimeout(()=>{
8917
8928
  window.dispatchEvent(new Event("resize"))
8918
8929
  }, 100);
8919
8930
  // 移除搜索按钮上的红点
8920
- let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8931
+ // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
8932
+ let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
8921
8933
  crudService && crudService.setData({isFieldsFilterEmpty: true, showFieldsFilter: false});
8922
8934
  `;
8923
8935
  const dataProviderInited = `
@@ -9857,78 +9869,97 @@ function fields$1(){
9857
9869
 
9858
9870
  function fieldsExtend$4(){
9859
9871
  return {
9872
+ "group": "",
9860
9873
  "label": {
9861
9874
  "is_wide": true
9862
9875
  },
9863
9876
  "name": {
9877
+ "group": "",
9864
9878
  "amis": {
9865
9879
  "hidden": true,
9866
9880
  "required": false
9867
9881
  }
9868
9882
  },
9869
9883
  "object_name": {
9884
+ "group": "",
9870
9885
  "amis": {
9871
9886
  "hidden": true
9872
9887
  }
9873
9888
  },
9874
9889
  "filter_scope": {
9890
+ "group": "",
9875
9891
  "amis": {
9876
9892
  "hidden": true,
9877
9893
  "required": false
9878
9894
  }
9879
9895
  },
9880
9896
  "columns": {
9897
+ "group": "",
9881
9898
  "amis": {
9882
9899
  "hidden": true,
9883
9900
  "required": false
9884
9901
  }
9885
9902
  },
9886
9903
  "mobile_columns":{
9904
+ "group": "",
9887
9905
  "amis": {
9888
9906
  "hidden": true,
9889
9907
  "required": false
9890
9908
  }
9891
9909
  },
9892
9910
  "searchable_fields":{
9911
+ "group": "",
9893
9912
  "amis": {
9894
9913
  "hidden": true,
9895
9914
  "required": false
9896
9915
  }
9897
9916
  },
9898
9917
  "filter_fields": {
9918
+ "group": "",
9899
9919
  "amis": {
9900
9920
  "hidden": true,
9901
9921
  "required": false
9902
9922
  }
9903
9923
  },
9904
9924
  "scrolling_mode": {
9925
+ "group": "",
9905
9926
  "amis": {
9906
9927
  "hidden": true,
9907
9928
  "required": false
9908
9929
  }
9909
9930
  },
9910
9931
  "sort": {
9932
+ "group": "",
9911
9933
  "amis": {
9912
9934
  "hidden": true,
9913
9935
  "required": false
9914
9936
  }
9915
9937
  },
9916
9938
  "show_count": {
9939
+ "group": "",
9917
9940
  "amis": {
9918
9941
  "hidden": true,
9919
9942
  "required": false
9920
9943
  }
9921
9944
  },
9922
9945
  "type": {
9946
+ "group": "",
9923
9947
  "amis": {
9924
9948
  "hidden": true,
9925
9949
  "required": false
9926
9950
  }
9927
9951
  },
9928
9952
  "shared": {
9953
+ "group": "",
9929
9954
  "amis": {
9930
9955
  "visibleOn": "${global.user.is_space_admin}"
9931
9956
  }
9957
+ },
9958
+ "filters": {
9959
+ "group": "",
9960
+ "amis": {
9961
+ "hidden": true
9962
+ }
9932
9963
  }
9933
9964
  }
9934
9965
  }
@@ -10075,6 +10106,12 @@ function fieldsExtend$3(){
10075
10106
  "amis": {
10076
10107
  "visibleOn": "${global.user.is_space_admin}"
10077
10108
  }
10109
+ },
10110
+ "filters": {
10111
+ "group": "",
10112
+ "amis": {
10113
+ "hidden": true
10114
+ }
10078
10115
  }
10079
10116
  }
10080
10117
  }
@@ -10413,7 +10450,6 @@ function fieldsExtend$1(){
10413
10450
  }
10414
10451
  },
10415
10452
  "mobile_columns": {
10416
- "group": instance.t('frontend_listview_control_columns_mobile_group'),
10417
10453
  "amis": {
10418
10454
  "type": "transfer",
10419
10455
  "sortable": true,
@@ -10783,7 +10819,8 @@ crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
10783
10819
  // }
10784
10820
  `;
10785
10821
 
10786
- function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup = false, keywordsSearchBoxName = "__keywords", crudId } = {}){
10822
+ // function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup = false, keywordsSearchBoxName = "__keywords", crudId } = {}){
10823
+ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup = false, keywordsSearchBoxName = "__keywords" } = {}){
10787
10824
  const searchableFieldsLabel = [];
10788
10825
  _.each(mainObject.fields, function (field) {
10789
10826
  if (isFieldQuickSearchable(field, mainObject.NAME_FIELD_KEY)) {
@@ -10799,6 +10836,33 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
10799
10836
  crudKeywords = (localListViewProps && localListViewProps.__keywords) || "";
10800
10837
  }
10801
10838
 
10839
+ const onChangeScript = `
10840
+ const scope = event.context.scoped;
10841
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
10842
+ // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
10843
+ let __changedSearchBoxValues = {};
10844
+ __changedSearchBoxValues["${keywordsSearchBoxName}"] = event.data["${keywordsSearchBoxName}"];
10845
+ // crudService && crudService.setData({__changedSearchBoxValues: __changedSearchBoxValues});
10846
+ // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
10847
+ crud && crud.setData({__changedSearchBoxValues: __changedSearchBoxValues});
10848
+ `;
10849
+
10850
+ // onSearchScript中加上了onChangeScript中的脚本,是因为amis 3.2不能用change事件执行onChangeScript
10851
+ // 而点击回车按键又不会触发blur事件,所以只能每次回车事件中额外再执行一次onChangeScript
10852
+ // 等升级到amis 3.4+,blur事件换成change事件执行onChangeScript,就可以不用在onSearchScript中执行onChangeScript了
10853
+ const onSearchScript = `
10854
+ ${onChangeScript}
10855
+
10856
+ // 下面的脚本只为解决点击搜索表单取消按钮,再重新在其中输入过滤条件但是不点击搜索按钮或回车按键触发搜索,此时在快速搜索框输入过滤条件按回车按键会把搜索表单中的过滤条件清空的问题
10857
+ // const scope = event.context.scoped;
10858
+ // 如果点击过顶部搜索栏表单的取消按钮,会把此处event.data.__super.__super.__super中的搜索表单项的所有字段设置为null
10859
+ // 点击取消按钮后继续在表单项中输入过滤条件且最后没有点击回车按键或点击表单项搜索按钮的话,在快速搜索中点击回车按钮提交搜索会所顶部搜索表单中的字段值清空
10860
+ let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
10861
+ setTimeout(function(){
10862
+ filterForm.setValues(event.data.__changedFilterFormValues);
10863
+ }, 500);
10864
+ `;
10865
+
10802
10866
  return {
10803
10867
  "type": "tooltip-wrapper",
10804
10868
  "id": "steedos_crud_toolbar_quick_search",
@@ -10817,28 +10881,24 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
10817
10881
  "placeholder": "搜索此列表",
10818
10882
  "value": crudKeywords,
10819
10883
  "clearable": true,
10820
- "clearAndSubmit": true,
10884
+ // "clearAndSubmit": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
10821
10885
  "searchImediately": false,
10822
10886
  "onEvent": {
10823
- "change": {
10887
+ "search": {
10824
10888
  "actions": [
10825
10889
  {
10826
10890
  "actionType": "custom",
10827
- "script": `
10828
- doAction(
10829
- {
10830
- "componentId": 'service_${crudId}',
10831
- "actionType": "setValue",
10832
- "args": {
10833
- "value": {
10834
- "__serachBoxValues": event.data
10835
- }
10836
- }
10837
- }
10838
- )
10839
- `
10891
+ "script": onSearchScript
10840
10892
  }
10841
10893
  ]
10894
+ },
10895
+ "blur": { //这里把change事件换成blur是因为amis 3.2change事件中setData会卡,升级到3.4+后就可以换回change事件
10896
+ "actions": [
10897
+ {
10898
+ "actionType": "custom",
10899
+ "script": onChangeScript
10900
+ },
10901
+ ]
10842
10902
  }
10843
10903
  }
10844
10904
  }
@@ -10847,7 +10907,7 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
10847
10907
  }
10848
10908
 
10849
10909
  function getObjectHeaderToolbar(mainObject, fields, formFactor, {
10850
- showDisplayAs = false, hiddenCount = false, headerToolbarItems, crudId,
10910
+ showDisplayAs = false, hiddenCount = false, headerToolbarItems,
10851
10911
  filterVisible = true, isLookup = false, keywordsSearchBoxName } = {}){
10852
10912
  // console.log(`getObjectHeaderToolbar====>`, filterVisible)
10853
10913
  // console.log(`getObjectHeaderToolbar`, mainObject)
@@ -10951,7 +11011,7 @@ function getObjectHeaderToolbar(mainObject, fields, formFactor, {
10951
11011
  };
10952
11012
  }
10953
11013
  let toolbarDisplayAsButton = getDisplayAsButton(mainObject?.name);
10954
- let toolbarDQuickSearchBox = getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup, keywordsSearchBoxName, crudId });
11014
+ let toolbarDQuickSearchBox = getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLookup, keywordsSearchBoxName });
10955
11015
 
10956
11016
  // toolbars返回的数组元素不可以是空对象{},比如hiddenCount ? {} : {"type": "tpl",...},因为空对象最终还是会生成一个空的.antd-Crud-toolbar-item dom
10957
11017
  // 当出现空的.antd-Crud-toolbar-item dom时会影响toolbar元素的maring-right css样式计算,如果有动态需要应该加到动态数组变量toolbars中
@@ -11099,6 +11159,20 @@ async function getObjectFilter(objectSchema, fields, options) {
11099
11159
  let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
11100
11160
  crudService && crudService.setData({isFieldsFilterEmpty});
11101
11161
  `;
11162
+ let onChangeScript = `
11163
+ const scope = event.context.scoped;
11164
+ // let filterFormValues = event.data;
11165
+ let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
11166
+ let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
11167
+ // 使用event.data的话,并不能拿到本地存储中的过滤条件,所以需要从filterFormService中取。
11168
+ let filterFormValues = filterFormService.getData();
11169
+ let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
11170
+ const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});;
11171
+ // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
11172
+ // crudService && crudService.setData({__changedFilterFormValues: changedFilterFormValues});
11173
+ // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
11174
+ crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
11175
+ `;
11102
11176
  return {
11103
11177
  "title": "",
11104
11178
  "submitText": "",
@@ -11122,19 +11196,7 @@ async function getObjectFilter(objectSchema, fields, options) {
11122
11196
  "actions": [
11123
11197
  {
11124
11198
  "actionType": "custom",
11125
- "script": `
11126
- doAction(
11127
- {
11128
- "componentId": 'service_${options.crudId}',
11129
- "actionType": "setValue",
11130
- "args": {
11131
- "value": {
11132
- "__filterFormValues": event.data
11133
- }
11134
- }
11135
- }
11136
- )
11137
- `
11199
+ "script": onChangeScript
11138
11200
  }
11139
11201
  ]
11140
11202
  }
@@ -11209,7 +11271,6 @@ async function getObjectCRUD(objectSchema, fields, options){
11209
11271
  const bulkActions = getBulkActions(objectSchema);
11210
11272
  const defaults = options.defaults;
11211
11273
  const listSchema = (defaults && defaults.listSchema) || {};
11212
- const id = `listview_${objectSchema.name}`;
11213
11274
 
11214
11275
  const bodyProps = {
11215
11276
  // toolbar: getToolbar(),
@@ -11219,7 +11280,7 @@ async function getObjectCRUD(objectSchema, fields, options){
11219
11280
  ...options,
11220
11281
  disableStatistics: options.queryCount === false
11221
11282
  }),
11222
- filter: options.filterVisible !== false && await getObjectFilter(objectSchema, fields, Object.assign({}, options, {crudId: id})),
11283
+ filter: options.filterVisible !== false && await getObjectFilter(objectSchema, fields, options),
11223
11284
  };
11224
11285
  if(options.formFactor !== 'SMALL' || ["split"].indexOf(options.displayAs) == -1){
11225
11286
  if(listSchema.mode !== "cards"){
@@ -11248,8 +11309,7 @@ async function getObjectCRUD(objectSchema, fields, options){
11248
11309
  showDisplayAs,
11249
11310
  hiddenCount: options.queryCount === false,
11250
11311
  headerToolbarItems: options.headerToolbarItems,
11251
- filterVisible: options.filterVisible,
11252
- crudId: id
11312
+ filterVisible: options.filterVisible
11253
11313
  });
11254
11314
 
11255
11315
  options.amisData = createObject(options.amisData, {
@@ -11262,6 +11322,7 @@ async function getObjectCRUD(objectSchema, fields, options){
11262
11322
 
11263
11323
 
11264
11324
  let body = null;
11325
+ const id = `listview_${objectSchema.name}`;
11265
11326
  if(options.formFactor === 'SMALL' && false){
11266
11327
  delete bodyProps.bulkActions;
11267
11328
  delete bodyProps.headerToolbar;
@@ -11340,7 +11401,12 @@ async function getObjectCRUD(objectSchema, fields, options){
11340
11401
  hiddenOn: options.tableHiddenOn,
11341
11402
  autoFillHeight,
11342
11403
  className: `flex-auto ${crudClassName || ""}`,
11343
- bodyClassName: "bg-white",
11404
+ // 这里不可以用动态className,因为它会把样式类加到.antd-Crud和.antd-Table.antd-Crud-body这两层div中,而子表列表中crudClassName中有hidden样式类会造成所有子表都不显示的bug
11405
+ // className: {
11406
+ // [`flex-auto ${crudClassName || ""}`]: "true",
11407
+ // "is-steedos-crud-data-empty": "${!items || COUNT(items) == 0}"
11408
+ // },
11409
+ bodyClassName: "bg-white",//上面className写成动态的class变量对象的话,bodyClassName不会生效,会被上面的className值覆盖
11344
11410
  crudClassName: crudClassName,
11345
11411
  quickSaveApi: {
11346
11412
  url: `\${context.rootUrl}/graphql`,
@@ -13231,8 +13297,6 @@ async function lookupToAmisTreeSelect(field, readonly, ctx) {
13231
13297
  return amisSchema;
13232
13298
  }
13233
13299
 
13234
- const keywordsSearchBoxName = `__keywords_lookup`;
13235
-
13236
13300
  const getReferenceToFieldSchema = (field, refObjectConfig)=>{
13237
13301
  let referenceTo = field.reference_to;
13238
13302
  if(!referenceTo){
@@ -13491,8 +13555,18 @@ async function lookupToAmisPicker(field, readonly, ctx){
13491
13555
 
13492
13556
  source.data.$term = "$term";
13493
13557
  source.data.$self = "$$";
13494
-
13558
+
13559
+ // field.name可能是带点的名称,比如审批王中子表字段'instances.instances_submitter',如果不替换掉点,会造成审批王表单中新建子表行时报错
13560
+ let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
13561
+
13495
13562
  source.requestAdaptor = `
13563
+ let __changedFilterFormValues = api.data.$self.__changedFilterFormValues || {};
13564
+ let __changedSearchBoxValues = api.data.$self.__changedSearchBoxValues || {};
13565
+ // 把表单搜索和快速搜索中的change事件中记录的过滤条件也拼到$self中,是为解决触发搜索请求时,两边输入的过滤条件都带上,即:
13566
+ // 有时在搜索表单中输入过滤条件事,忘记点击回车键或搜索按钮,而是进一步修改快速搜索框中的关键字点击其中回车键触发搜索
13567
+ // 这种情况下,触发的搜索请求中没有带上搜索表单中输入的过滤条件。
13568
+ // 反过来先在快速搜索框中输入过滤条件却不点击其中回车键触发搜索,而是到搜索表单中触发搜索请求也是一样的。
13569
+ Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
13496
13570
  const selfData = JSON.parse(JSON.stringify(api.data.$self));
13497
13571
  var filters = [];
13498
13572
  var pageSize = api.data.pageSize || 10;
@@ -13627,6 +13701,14 @@ async function lookupToAmisPicker(field, readonly, ctx){
13627
13701
  }
13628
13702
  });
13629
13703
  payload.data.rows = treeRecords;
13704
+ try{
13705
+ setTimeout(() => {
13706
+ $('.amis-dialog-widget.antd-Modal .antd-Table-content .antd-Table-table thead .antd-Table-expandBtn')[0]?.click();
13707
+ }, 600);
13708
+ }
13709
+ catch(ex){
13710
+ console.error("tree数据格式展开异常:", ex);
13711
+ }
13630
13712
  }
13631
13713
  return payload;
13632
13714
  `;
@@ -13799,6 +13881,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
13799
13881
 
13800
13882
  async function lookupToAmisSelect(field, readonly, ctx){
13801
13883
  let referenceTo = await getReferenceTo(field);
13884
+ const isMobile = window.innerWidth <= 768;
13802
13885
  const valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;
13803
13886
  // const labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';
13804
13887
 
@@ -13979,7 +14062,11 @@ async function lookupToAmisSelect(field, readonly, ctx){
13979
14062
  </span>
13980
14063
  <span class='pl-1.5'>\${label}</span>
13981
14064
  </span>`;
13982
- data.menuTpl = "${icon ? `"+select_menuTpl+"` : label}";
14065
+ const menuTpl = "${icon ? `"+select_menuTpl+"` : label}";
14066
+ // TODO: 待amis修复了此bug, 就可以撤销添加menuTpl的判断。
14067
+ if(!(isMobile && field.multiple)){
14068
+ data.menuTpl = menuTpl;
14069
+ }
13983
14070
  if(field.multiple){
13984
14071
  data.multiple = true;
13985
14072
  data.extractValue = true;
@@ -14487,6 +14574,8 @@ function getSelectFieldOptions(field){
14487
14574
  }
14488
14575
 
14489
14576
  async function convertSFieldToAmisField(field, readonly, ctx) {
14577
+ // console.log('convertSFieldToAmisField====>', field, readonly, ctx)
14578
+ const isMobile = window.innerWidth <= 768;
14490
14579
  // 创建人和修改人、创建时间和修改时间不显示
14491
14580
  if(_$1.includes(OMIT_FIELDS, field.name) && ctx.showSystemFields != true){
14492
14581
  return;
@@ -14549,7 +14638,11 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
14549
14638
  </span>
14550
14639
  <span class='pl-1.5'>\${label}</span>
14551
14640
  </span>`;
14552
- convertData.menuTpl = "${icon ? `"+select_menuTpl+"` : label}";
14641
+ const menuTpl = "${icon ? `"+select_menuTpl+"` : label}";
14642
+ // TODO: 待amis修复了此bug, 就可以撤销添加menuTpl的判断。
14643
+ if(!(isMobile && field.multiple)){
14644
+ convertData.menuTpl = menuTpl;
14645
+ }
14553
14646
  if(field.multiple){
14554
14647
  convertData.multiple = true;
14555
14648
  convertData.extractValue = true;
@@ -15136,9 +15229,7 @@ async function getFieldSearchable(perField, permissionFields, ctx){
15136
15229
 
15137
15230
  const amisField = await convertSFieldToAmisField(_field, false, Object.assign({}, ctx, {fieldNamePrefix: fieldNamePrefix, required: false, showSystemFields: true, inFilterForm: true}));
15138
15231
  if(amisField){
15139
- return Object.assign({}, amisField,{
15140
- submitOnChange: false
15141
- });
15232
+ return amisField;
15142
15233
  }
15143
15234
  }
15144
15235
  }
@@ -15412,7 +15503,7 @@ async function getFormBody(permissionFields, formFields, ctx){
15412
15503
  * @Author: 殷亮辉 yinlianghui@hotoa.com
15413
15504
  * @Date: 2023-11-15 09:50:22
15414
15505
  * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
15415
- * @LastEditTime: 2023-11-29 17:48:02
15506
+ * @LastEditTime: 2023-12-04 17:36:50
15416
15507
  */
15417
15508
 
15418
15509
  /**
@@ -15531,12 +15622,16 @@ async function getForm(props, mode = "edit") {
15531
15622
  }
15532
15623
  else if (mode === "new") {
15533
15624
  let onNewItemSubmitScript = `
15534
- event.data["${props.name}"].push(JSON.parse(JSON.stringify(event.data)));
15625
+ let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15626
+ if(!fieldValue){
15627
+ fieldValue = [];
15628
+ }
15629
+ fieldValue.push(JSON.parse(JSON.stringify(event.data)));
15535
15630
  doAction({
15536
15631
  "componentId": "${props.id}",
15537
15632
  "actionType": "setValue",
15538
15633
  "args": {
15539
- "value": event.data["${props.name}"]
15634
+ "value": fieldValue
15540
15635
  }
15541
15636
  });
15542
15637
  `;
@@ -15738,11 +15833,20 @@ const getAmisInputTableSchema = async (props, readonly) => {
15738
15833
  ],
15739
15834
  "className": props.className
15740
15835
  };
15836
+ let footerToolbar = clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
15741
15837
  if (props.addable) {
15742
- let buttonNewSchema = getButtonNew(props);
15743
- schema.body.push(buttonNewSchema);
15838
+ let buttonNewSchema = await getButtonNew(props);
15839
+ footerToolbar.unshift(buttonNewSchema);
15840
+ }
15841
+ if (footerToolbar.length) {
15842
+ schema.body.push({
15843
+ "type": "wrapper",
15844
+ "size": "none",
15845
+ "body": footerToolbar
15846
+ });
15744
15847
  }
15745
15848
  if (props.amis) {
15849
+ delete props.amis.id;
15746
15850
  Object.assign(schema.body[0], props.amis);
15747
15851
  }
15748
15852
  return schema;
@@ -19135,7 +19239,7 @@ var AmisObjectListView = function (props) { return __awaiter(void 0, void 0, voi
19135
19239
  amisSchemaData = Object.assign({}, data, defaultData);
19136
19240
  listViewId = (ctx === null || ctx === void 0 ? void 0 : ctx.listViewId) || amisSchemaData.listViewId;
19137
19241
  allData = createObject(data, defaultData);
19138
- listViewSchemaProps = __assign$2(__assign$2({ top: top, perPage: perPage, showHeader: showHeader, defaults: defaults }, ctx), { listViewId: listViewId, setDataToComponentId: setDataToComponentId, filterVisible: filterVisible, showDisplayAs: showDisplayAs, displayAs: displayAs, headerToolbarItems: headerToolbarItems, rowClassNameExpr: rowClassNameExpr, hiddenColumnOperation: hiddenColumnOperation, columns: columns, crudDataFilter: crudDataFilter, onCrudDataFilter: onCrudDataFilter, amisData: allData, env: env, requestAdaptor: requestAdaptor, adaptor: adaptor });
19242
+ listViewSchemaProps = __assign$2(__assign$2({ top: top, perPage: perPage, defaults: defaults }, ctx), { listViewId: listViewId, setDataToComponentId: setDataToComponentId, filterVisible: filterVisible, showDisplayAs: showDisplayAs, displayAs: displayAs, headerToolbarItems: headerToolbarItems, rowClassNameExpr: rowClassNameExpr, hiddenColumnOperation: hiddenColumnOperation, columns: columns, crudDataFilter: crudDataFilter, onCrudDataFilter: onCrudDataFilter, amisData: allData, env: env, requestAdaptor: requestAdaptor, adaptor: adaptor });
19139
19243
  if (!headerSchema) {
19140
19244
  headerSchema = getObjectListHeader$1(uiSchema, listName, ctx);
19141
19245
  }
@@ -19151,6 +19255,9 @@ var AmisObjectListView = function (props) { return __awaiter(void 0, void 0, voi
19151
19255
  serviceData.uiSchema = uiSchema;
19152
19256
  }
19153
19257
  serviceData.defaultListName = listName ? listName : (_h = first(values(uiSchema.list_views))) === null || _h === void 0 ? void 0 : _h.name;
19258
+ if (!showHeader) {
19259
+ headerSchema = {};
19260
+ }
19154
19261
  // console.timeEnd('AmisObjectListView')
19155
19262
  // console.log('serviceData===>', serviceData)
19156
19263
  // console.log('headerSchema===>', headerSchema)
@@ -19234,7 +19341,7 @@ function getTableColumns(columns, includedFields, fieldsExtend) {
19234
19341
  return tableColumns;
19235
19342
  }
19236
19343
  var AmisObjectTable = function (props) { return __awaiter(void 0, void 0, void 0, function () {
19237
- var $schema, filters, filtersFunction, amisCondition, top, headerSchema, includedFields, fieldsExtend, sort, sortField, sortOrder, extraColumns, data, defaultData, _a, formFactor, _b, className, requestAdaptor, adaptor, _c, filterVisible, headerToolbarItems, crudDataFilter, onCrudDataFilter, env, crudMode, _d, hiddenColumnOperation, ctx, crud, columns, defaults, objectApiName, schemaKeys, listSchema, setDataToComponentId, amisFilters, tableFilters, amisSchemaData, allData, appId, amisSchema;
19344
+ var $schema, filters, filtersFunction, amisCondition, top, headerSchema, includedFields, fieldsExtend, sort, sortField, sortOrder, extraColumns, data, defaultData, _a, formFactor, _b, className, requestAdaptor, adaptor, _c, filterVisible, headerToolbarItems, crudDataFilter, onCrudDataFilter, env, crudMode, _d, hiddenColumnOperation, ctx, crud, columns, defaults, objectApiName, schemaKeys, listSchema, setDataToComponentId, amisFilters, tableFilters, amisSchemaData, allData, appId, tableSchema, amisSchema, uiSchema;
19238
19345
  return __generator(this, function (_e) {
19239
19346
  switch (_e.label) {
19240
19347
  case 0:
@@ -19288,12 +19395,14 @@ var AmisObjectTable = function (props) { return __awaiter(void 0, void 0, void 0
19288
19395
  ctx = pickBy(ctx, function (value) { return value !== undefined; });
19289
19396
  return [4 /*yield*/, getTableSchema(appId, objectApiName, columns, __assign$2(__assign$2({ filters: tableFilters, filtersFunction: filtersFunction, top: top, sort: sort, sortField: sortField, sortOrder: sortOrder, extraColumns: extraColumns, defaults: defaults }, ctx), { setDataToComponentId: setDataToComponentId, requestAdaptor: requestAdaptor, adaptor: adaptor, filterVisible: filterVisible, headerToolbarItems: headerToolbarItems, crudDataFilter: crudDataFilter, onCrudDataFilter: onCrudDataFilter, amisData: allData, env: env }))];
19290
19397
  case 1:
19291
- amisSchema = (_e.sent()).amisSchema;
19398
+ tableSchema = _e.sent();
19399
+ amisSchema = tableSchema.amisSchema;
19400
+ uiSchema = tableSchema.uiSchema;
19292
19401
  amisSchema.data = Object.assign({}, amisSchema.data, amisSchemaData);
19293
19402
  if (has(props, 'objectApiName')) {
19294
19403
  amisSchema.data.objectName = objectApiName;
19295
19404
  }
19296
- amisSchema.className = "steedos-object-table ".concat(amisSchema.className, " h-full flex flex-col ").concat(className);
19405
+ amisSchema.className = "steedos-object-table ".concat(uiSchema.enable_tree ? "is-steedos-tree-table" : "", " ").concat(amisSchema.className, " h-full flex flex-col ").concat(className);
19297
19406
  amisSchema.objectApiName = objectApiName; //设计器中切换对象时画布中显示的列未同步变更
19298
19407
  // console.timeEnd('AmisObjectTable')
19299
19408
  return [2 /*return*/, amisSchema];
@@ -19457,12 +19566,12 @@ var AmisRecordService = function (props) { return __awaiter(void 0, void 0, void
19457
19566
  }); };
19458
19567
 
19459
19568
  var AmisRecordDetailRelatedList = function (props) { return __awaiter(void 0, void 0, void 0, function () {
19460
- var $schema, objectApiName, recordId, relatedObjectApiName, data, relatedKey, top, perPage, hiddenEmptyTable, appId, relatedLabel, _a, className, columns, sort, filters, visible_on, requestAdaptor, adaptor, formFactor, formData, schema;
19569
+ var $schema, objectApiName, recordId, relatedObjectApiName, data, relatedKey, top, perPage, hiddenEmptyTable, appId, relatedLabel, _a, className, columns, sort, filters, visible_on, requestAdaptor, adaptor, visibleOn, formFactor, formData, schema;
19461
19570
  var _b;
19462
19571
  return __generator(this, function (_c) {
19463
19572
  switch (_c.label) {
19464
19573
  case 0:
19465
- $schema = props.$schema, objectApiName = props.objectApiName, recordId = props.recordId, relatedObjectApiName = props.relatedObjectApiName, data = props.data, relatedKey = props.relatedKey, top = props.top, perPage = props.perPage, hiddenEmptyTable = props.hiddenEmptyTable, appId = props.appId, relatedLabel = props.relatedLabel, _a = props.className, className = _a === void 0 ? '' : _a, columns = props.columns, sort = props.sort, filters = props.filters, visible_on = props.visible_on, requestAdaptor = props.requestAdaptor, adaptor = props.adaptor;
19574
+ $schema = props.$schema, objectApiName = props.objectApiName, recordId = props.recordId, relatedObjectApiName = props.relatedObjectApiName, data = props.data, relatedKey = props.relatedKey, top = props.top, perPage = props.perPage, hiddenEmptyTable = props.hiddenEmptyTable, appId = props.appId, relatedLabel = props.relatedLabel, _a = props.className, className = _a === void 0 ? '' : _a, columns = props.columns, sort = props.sort, filters = props.filters, visible_on = props.visible_on, requestAdaptor = props.requestAdaptor, adaptor = props.adaptor, visibleOn = props.visibleOn;
19466
19575
  formFactor = props.formFactor;
19467
19576
  if (!formFactor) {
19468
19577
  formFactor = window.innerWidth < 768 ? 'SMALL' : 'LARGE';
@@ -19497,6 +19606,10 @@ var AmisRecordDetailRelatedList = function (props) { return __awaiter(void 0, vo
19497
19606
  }
19498
19607
  });
19499
19608
  }
19609
+ // 因为 visibleOn 的值格式是字符串,所以这里加个判断条件。
19610
+ if (visibleOn) {
19611
+ schema.visibleOn = visibleOn;
19612
+ }
19500
19613
  return [2 /*return*/, schema];
19501
19614
  }
19502
19615
  });
@@ -20758,7 +20871,7 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
20758
20871
  source: {
20759
20872
  "method": "post",
20760
20873
  "url": "${context.rootUrl}/graphql",
20761
- "requestAdaptor": "\n var steedosField = ".concat(JSON.stringify(steedosField), ";\n var objectName, filters, valueFieldKey, labelFieldKey;\n if(_.isString(steedosField.reference_to)){\n const referenceTo = getReferenceToSync(steedosField);\n const referenceToField = steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[steedosField.name];\n if(_.isString(value)){\n value = [value]\n }\n filters = [referenceToField, \"in\", value || []];\n }else{\n const _steedosField = {\n ...steedosField,\n reference_to: api.data[steedosField.name].o\n }\n const referenceTo = getReferenceToSync(_steedosField);\n const referenceToField = _steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[_steedosField.name] && api.data[_steedosField.name].ids;\n filters = [referenceToField, \"in\", value || []];\n }\n api.data = {\n query: '{options:' + objectName + '(filters: ' + JSON.stringify(filters) + '){label: ' + labelFieldKey + ',value: ' + valueFieldKey + '}}'\n }\n return api;\n "),
20874
+ "requestAdaptor": "\n var steedosField = ".concat(JSON.stringify(steedosField), ";\n var objectName, filters, valueFieldKey, labelFieldKey;\n if(_.isString(steedosField.reference_to)){\n const referenceTo = getReferenceToSync(steedosField);\n const referenceToField = steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[steedosField.name];\n if(_.isString(value)){\n value = [value]\n }\n filters = [referenceToField, \"in\", value || []];\n if(objectName == \"object_fields\"){\n //\u5BF9\u8C61\u4E3Aobject_fields\u65F6\uFF0C\u5FC5\u987B\u52A0\u4E0Aobject\u7684\u8FC7\u6EE4\u6761\u4EF6\n const filtersFunction = ").concat(steedosField.filtersFunction || steedosField._filtersFunction, ";\n if(filtersFunction){\n const _filters = filtersFunction(filters, api.data);\n if(_filters && _filters.length > 0){\n filters = [filters,_filters]\n }\n }\n }\n }else{\n const _steedosField = {\n ...steedosField,\n reference_to: api.data[steedosField.name].o\n }\n const referenceTo = getReferenceToSync(_steedosField);\n const referenceToField = _steedosField.reference_to_field || '_id';\n\n objectName = referenceTo.objectName\n valueFieldKey = referenceTo && referenceTo.valueField?.name || '_id' ;\n labelFieldKey = referenceTo && referenceTo.labelField?.name || 'name';\n let value = api.data[_steedosField.name] && api.data[_steedosField.name].ids;\n filters = [referenceToField, \"in\", value || []];\n }\n api.data = {\n query: '{options:' + objectName + '(filters: ' + JSON.stringify(filters) + '){label: ' + labelFieldKey + ',value: ' + valueFieldKey + '}}'\n }\n return api;\n "),
20762
20875
  "trackExpression": "${" + steedosField.name + "}",
20763
20876
  "cache": 3000
20764
20877
  },
@@ -21162,7 +21275,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
21162
21275
  return __generator(this, function (_a) {
21163
21276
  switch (_a.label) {
21164
21277
  case 0:
21165
- props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName;
21278
+ props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar;
21166
21279
  return [4 /*yield*/, getAmisInputTableSchema(props)];
21167
21280
  case 1:
21168
21281
  amisSchema = _a.sent();