@steedos-widgets/sortable 1.3.22-beta.3 → 3.6.0-beta.10

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.
@@ -53975,8 +53975,8 @@ const Router = {
53975
53975
  /*
53976
53976
  * @Author: baozhoutao@steedos.com
53977
53977
  * @Date: 2022-07-20 16:29:22
53978
- * @LastEditors: liaodaxue
53979
- * @LastEditTime: 2023-09-11 17:19:53
53978
+ * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
53979
+ * @LastEditTime: 2023-12-28 14:59:08
53980
53980
  * @Description:
53981
53981
  */
53982
53982
 
@@ -54033,6 +54033,21 @@ function getLookupListView(refObjectConfig) {
54033
54033
  return listView;
54034
54034
  }
54035
54035
 
54036
+
54037
+ /**
54038
+ * 获取可比较的amis版本号
54039
+ * @returns 只返回前两位版本,第三位忽略,比如3.6.3返回3.6
54040
+ */
54041
+ function getComparableAmisVersion() {
54042
+ let amis = (window.amisRequire && window.amisRequire('amis')) || window.Amis;
54043
+ let amisVersion = amis && amis.version;
54044
+ if(amisVersion){
54045
+ let comparableVersions = amisVersion.split(".");
54046
+ let comparableVersion = parseFloat(comparableVersions[0].toString() + "." + comparableVersions[1].toString());
54047
+ return comparableVersion;
54048
+ }
54049
+ }
54050
+
54036
54051
  function getNumberTpl(field){
54037
54052
  return `<span>\${_display.${field.name}}</span>`
54038
54053
  }
@@ -54101,7 +54116,7 @@ function getNameTpl(field, ctx){
54101
54116
  if(ctx && ctx.isLookup){
54102
54117
  linkTarget = "target='_blank'";
54103
54118
  }
54104
- return `<a href="${href}" ${linkTarget}>\${${field.name}}</a>`
54119
+ return `<a href="${href}" ${linkTarget}>\${${field.name} | raw}</a>`
54105
54120
  }
54106
54121
 
54107
54122
  function getRelatedFieldTpl(field, ctx){
@@ -54426,7 +54441,7 @@ function getAmisStaticFieldType(type, readonly, options){
54426
54441
  * @Author: baozhoutao@steedos.com
54427
54442
  * @Date: 2022-10-28 14:15:09
54428
54443
  * @LastEditors: liaodaxue
54429
- * @LastEditTime: 2023-10-30 17:51:54
54444
+ * @LastEditTime: 2023-12-29 10:46:50
54430
54445
  * @Description:
54431
54446
  */
54432
54447
 
@@ -54480,7 +54495,8 @@ const getAmisFileEditSchema = (steedosField)=>{
54480
54495
  dataType: "form-data",
54481
54496
  url: `\${context.rootUrl}/s3/${tableName}`,
54482
54497
  requestAdaptor: `
54483
- const { _master, global,context } = api.body;
54498
+ const superData = (typeof context != 'undefined') ? context : api.body;
54499
+ const { _master, global } = superData;
54484
54500
  // const { recordId, objectName } = _master;
54485
54501
  const { spaceId, userId, user } = global;
54486
54502
  /*
@@ -54498,8 +54514,9 @@ const getAmisFileEditSchema = (steedosField)=>{
54498
54514
  return api;
54499
54515
  `,
54500
54516
  adaptor: `
54501
- const { context } = api.body;
54502
- var rootUrl = context.rootUrl + "/api/files/${tableName}/";
54517
+ const superData = (typeof context != 'undefined') ? context : api.body;
54518
+ const { context:pageContext } = superData;
54519
+ var rootUrl = pageContext.rootUrl + "/api/files/${tableName}/";
54503
54520
  payload = {
54504
54521
  status: response.status == 200 ? 0 : response.status,
54505
54522
  msg: response.statusText,
@@ -54965,7 +54982,6 @@ async function getQuickEditSchema(field, options){
54965
54982
  {
54966
54983
  "actionType": "custom",
54967
54984
  "script": `
54968
-
54969
54985
  var _display = _.cloneDeep(event.data._display);
54970
54986
  ${displayField}
54971
54987
  doAction({actionType: 'setValue', "args": {"value": {_display}},componentId: "${quickEditId}"});
@@ -55103,8 +55119,9 @@ async function getQuickEditSchema(field, options){
55103
55119
  case "avatar":
55104
55120
  case "image":
55105
55121
  quickEditSchema.body[0].receiver.adaptor = `
55106
- const { context } = api.body;
55107
- var rootUrl = context.rootUrl + "/api/files/${field.type}s/";
55122
+ const superData = (typeof context != 'undefined') ? context : api.body;
55123
+ const { context:pageContext } = superData;
55124
+ var rootUrl = pageContext.rootUrl + "/api/files/${field.type}s/";
55108
55125
  payload = {
55109
55126
  status: response.status == 200 ? 0 : response.status,
55110
55127
  msg: response.statusText,
@@ -55135,9 +55152,26 @@ async function getQuickEditSchema(field, options){
55135
55152
  "onEvent":{
55136
55153
  "init":{
55137
55154
  "actions":[
55155
+ //amis3.6无法从数据域中直接拿到正确的selectitems,需要通过crud组件的getSelected()函数获取
55156
+ {
55157
+ "actionType": "custom",
55158
+ "script": `
55159
+ crudScoped = event.context.scoped.getComponentById('${options.crudId}');
55160
+ const selectedItems = crudScoped && crudScoped.control.getSelected();
55161
+ doAction({
55162
+ "componentId": "${quickEditId}",
55163
+ "actionType": "setValue",
55164
+ "args": {
55165
+ "value": {
55166
+ selectedItems
55167
+ }
55168
+ }
55169
+ });
55170
+ `
55171
+ },
55138
55172
  {
55139
55173
  "actionType": "setValue",
55140
- "componentId": `service_listview_${options.objectName}`,
55174
+ "componentId": quickEditId,
55141
55175
  "args": {
55142
55176
  "value":{
55143
55177
  "quickedit_record_permissions_loading": true
@@ -55162,7 +55196,7 @@ async function getQuickEditSchema(field, options){
55162
55196
  },
55163
55197
  {
55164
55198
  "actionType": "setValue",
55165
- "componentId": `service_listview_${options.objectName}`,
55199
+ "componentId": quickEditId,
55166
55200
  "args": {
55167
55201
  "value":{
55168
55202
  "quickedit_record_permissions_loading": false
@@ -55171,7 +55205,7 @@ async function getQuickEditSchema(field, options){
55171
55205
  },
55172
55206
  {
55173
55207
  "actionType": "setValue",
55174
- "componentId": `service_listview_${options.objectName}`,
55208
+ "componentId": quickEditId,
55175
55209
  "args": {
55176
55210
  "value":{
55177
55211
  "quickedit_record_permissions": "${event.data}"
@@ -55350,8 +55384,6 @@ function getFieldWidth(width){
55350
55384
  async function getTableColumns(fields, options){
55351
55385
  const columns = [];
55352
55386
  if(!options.isLookup && !options.isInputTable){
55353
- //将_display放入crud的columns中,可以通过setvalue修改行内数据域的_display,而不影响上层items的_display,用于批量编辑
55354
- columns.push({name: '_display',type: 'static', width: 32, placeholder: "",id: "_display_${_index}", className: "hidden"});
55355
55387
  if(!options.enable_tree){
55356
55388
  columns.push({name: '_index',type: 'text', width: 32, placeholder: ""});
55357
55389
  }
@@ -55509,8 +55541,8 @@ async function getTableColumns(fields, options){
55509
55541
  const href = Router.getObjectDetailPath({
55510
55542
  ...options, formFactor: options.formFactor, appId: "${appId}", objectName: options.objectName || "${objectName}", recordId: `\${${options.idFieldName}}`
55511
55543
  });
55512
- columns[1].type = "tpl";
55513
- columns[1].tpl = `<a href="${href}">\${${columns[1].name}}</a>`;
55544
+ columns[0].type = "tpl";
55545
+ columns[0].tpl = `<a href="${href}">\${${columns[0].name}}</a>`;
55514
55546
  }
55515
55547
  return columns;
55516
55548
  }
@@ -55769,7 +55801,7 @@ async function getTableOperation(ctx){
55769
55801
  type: 'steedos-object-button',
55770
55802
  name: button.name,
55771
55803
  objectName: button.objectName,
55772
- visibleOn: getButtonVisibleOn$1(button),
55804
+ visibleOnAlias: getButtonVisibleOn$1(button),
55773
55805
  className: 'antd-Button--default'
55774
55806
  });
55775
55807
  });
@@ -55894,8 +55926,18 @@ async function getTableSchema$1(fields, options){
55894
55926
  }
55895
55927
 
55896
55928
  if(!isLookup && !hiddenColumnOperation){
55897
- columns.push(await getTableOperation(options));
55929
+ const toolbarOperation = await getTableOperation(options);
55930
+ columns.push(toolbarOperation);
55898
55931
  }
55932
+
55933
+ }
55934
+
55935
+ const treeConfig = {};
55936
+
55937
+ if(options.enable_tree){
55938
+ treeConfig.expandConfig = {
55939
+ expand: 'first'
55940
+ };
55899
55941
  }
55900
55942
 
55901
55943
  return {
@@ -55913,6 +55955,7 @@ async function getTableSchema$1(fields, options){
55913
55955
  labelTpl: `\${${options.labelFieldName}}`,
55914
55956
  autoFillHeight: false, // 自动高度效果不理想,先关闭
55915
55957
  columnsTogglable: false,
55958
+ ...treeConfig
55916
55959
  }
55917
55960
  }
55918
55961
 
@@ -56377,12 +56420,16 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
56377
56420
  // }
56378
56421
  // listView.handleFilterSubmit(Object.assign({}, removedValues, filterFormValues));
56379
56422
  // 点击搜索的时候自动收起搜索栏
56380
- let resizeWindow = function(){
56381
- //触发amis crud 高度重算
56382
- setTimeout(()=>{
56383
- window.dispatchEvent(new Event("resize"))
56384
- }, 500);
56385
- }
56423
+ //触发amis crud 高度重算
56424
+ doAction({
56425
+ "actionType": "broadcast",
56426
+ "args": {
56427
+ "eventName": "@height.changed.${objectSchema.name}"
56428
+ },
56429
+ "data": {
56430
+ "timeOut": 500
56431
+ }
56432
+ });
56386
56433
  const filterService = filterForm.context.getComponents().find(function(n){
56387
56434
  return n.props.type === "service";
56388
56435
  });
@@ -56415,6 +56462,8 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
56415
56462
  `;
56416
56463
  const onCancelScript = `
56417
56464
  // console.log("===onCancelScript=form==");
56465
+ let isLookup = event.data.isLookup;
56466
+ let __lookupField = event.data.__lookupField;
56418
56467
  const scope = event.context.scoped;
56419
56468
  var filterForm = scope.parent.parent.getComponents().find(function(n){
56420
56469
  return n.props.type === "form";
@@ -56462,16 +56511,36 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
56462
56511
  // });
56463
56512
 
56464
56513
  // 清除__changedFilterFormValues中的值
56465
- crud && crud.setData({__changedFilterFormValues: {}});
56514
+ // crud && crud.setData({__changedFilterFormValues: {}});
56515
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
56516
+ if(isLookup && __lookupField){
56517
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
56518
+ if(__lookupField.reference_to_field){
56519
+ lookupTag += "__" + __lookupField.reference_to_field;
56520
+ }
56521
+ __changedFilterFormValuesKey += lookupTag;
56522
+ }
56523
+ if(crud){
56524
+ let crudData = crud.getData();
56525
+ crudData[__changedFilterFormValuesKey] = {};
56526
+ crud.setData(crudData);
56527
+ }
56466
56528
  filterForm.handleFormSubmit(event);
56467
56529
  // crud.handleFilterSubmit(removedValues);
56468
56530
 
56469
56531
  let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
56470
56532
  filterFormService.setData({showFieldsFilter: !!!filterFormService.props.data.showFieldsFilter});
56471
56533
  //触发amis crud 高度重算
56472
- setTimeout(()=>{
56473
- window.dispatchEvent(new Event("resize"))
56474
- }, 100);
56534
+ doAction({
56535
+ "actionType": "broadcast",
56536
+ "args": {
56537
+ "eventName": "@height.changed.${objectSchema.name}"
56538
+ },
56539
+ "data": {
56540
+ "timeOut": 100
56541
+ }
56542
+ });
56543
+
56475
56544
  // 移除搜索按钮上的红点
56476
56545
  // let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
56477
56546
  let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
@@ -56628,9 +56697,15 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
56628
56697
  sessionStorage.setItem(listViewPropsStoreKey, JSON.stringify(localListViewProps));
56629
56698
  }
56630
56699
  //触发amis crud 高度重算
56631
- setTimeout(()=>{
56632
- window.dispatchEvent(new Event("resize"))
56633
- }, 100)
56700
+ doAction({
56701
+ "actionType": "broadcast",
56702
+ "args": {
56703
+ "eventName": "@height.changed.${objectSchema.name}"
56704
+ },
56705
+ "data": {
56706
+ "timeOut": 100
56707
+ }
56708
+ });
56634
56709
  // ===END===
56635
56710
  `;
56636
56711
  return {
@@ -57872,13 +57947,16 @@ const filterService = filterForm.context.getComponents().find(function(n){
57872
57947
  });
57873
57948
  let toShowFieldsFilter = !!!filterService.props.data.showFieldsFilter;
57874
57949
  filterService.setData({showFieldsFilter: toShowFieldsFilter});
57875
- let resizeWindow = function(){
57876
- //触发amis crud 高度重算
57877
- setTimeout(()=>{
57878
- window.dispatchEvent(new Event("resize"))
57879
- }, 1000);
57880
- }
57881
- resizeWindow();
57950
+ //触发amis crud 高度重算
57951
+ doAction({
57952
+ "actionType": "broadcast",
57953
+ "args": {
57954
+ "eventName": "@height.changed." + event.data.objectName
57955
+ },
57956
+ "data": {
57957
+ "timeOut": 1000
57958
+ }
57959
+ });
57882
57960
  // 手机端在显示搜索栏时隐藏crud上的刷新按钮,因为点击后crud高度显示有问题
57883
57961
  let crudService = scope.getComponentById("service_listview_" + event.data.objectName);
57884
57962
  crudService && crudService.setData({showFieldsFilter: toShowFieldsFilter});
@@ -57929,7 +58007,12 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
57929
58007
  __changedSearchBoxValues["${keywordsSearchBoxName}"] = event.data["${keywordsSearchBoxName}"];
57930
58008
  // crudService && crudService.setData({__changedSearchBoxValues: __changedSearchBoxValues});
57931
58009
  // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
57932
- crud && crud.setData({__changedSearchBoxValues: __changedSearchBoxValues});
58010
+ // crud && crud.setData({__changedSearchBoxValues: __changedSearchBoxValues});
58011
+ if(crud){
58012
+ let crudData = crud.getData();
58013
+ crudData.__changedSearchBoxValues = __changedSearchBoxValues;
58014
+ crud.setData(crudData);
58015
+ }
57933
58016
  `;
57934
58017
 
57935
58018
  // onSearchScript中加上了onChangeScript中的脚本,是因为amis 3.2不能用change事件执行onChangeScript
@@ -57942,9 +58025,19 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
57942
58025
  // const scope = event.context.scoped;
57943
58026
  // 如果点击过顶部搜索栏表单的取消按钮,会把此处event.data.__super.__super.__super中的搜索表单项的所有字段设置为null
57944
58027
  // 点击取消按钮后继续在表单项中输入过滤条件且最后没有点击回车按键或点击表单项搜索按钮的话,在快速搜索中点击回车按钮提交搜索会所顶部搜索表单中的字段值清空
58028
+ let isLookup = event.data.isLookup;
58029
+ let __lookupField = event.data.__lookupField;
58030
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
58031
+ if(isLookup && __lookupField){
58032
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
58033
+ if(__lookupField.reference_to_field){
58034
+ lookupTag += "__" + __lookupField.reference_to_field;
58035
+ }
58036
+ __changedFilterFormValuesKey += lookupTag;
58037
+ }
57945
58038
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
57946
58039
  setTimeout(function(){
57947
- filterForm.setValues(event.data.__changedFilterFormValues);
58040
+ filterForm.setValues(event.data[__changedFilterFormValuesKey]);
57948
58041
  }, 500);
57949
58042
  `;
57950
58043
 
@@ -57965,8 +58058,8 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
57965
58058
  "name": keywordsSearchBoxName,
57966
58059
  "placeholder": "搜索此列表",
57967
58060
  "value": crudKeywords,
57968
- "clearable": true,
57969
- // "clearAndSubmit": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
58061
+ // "clearable": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
58062
+ "clearAndSubmit": true,
57970
58063
  "searchImediately": false,
57971
58064
  "onEvent": {
57972
58065
  "search": {
@@ -58227,12 +58320,16 @@ async function getObjectFilter(objectSchema, fields, options) {
58227
58320
  return;
58228
58321
  }
58229
58322
  // 列表搜索栏字段值变更后立刻触发提交表单执行crud搜索,所以这里需要额外重算crud高度及筛选按钮红色星号图标显示隐藏
58230
- let resizeWindow = function(){
58231
- //触发amis crud 高度重算
58232
- setTimeout(()=>{
58233
- window.dispatchEvent(new Event("resize"))
58234
- }, 1000);
58235
- }
58323
+ //触发amis crud 高度重算
58324
+ doAction({
58325
+ "actionType": "broadcast",
58326
+ "args": {
58327
+ "eventName": "@height.changed.${objectSchema.name}"
58328
+ },
58329
+ "data": {
58330
+ "timeOut": 1000
58331
+ }
58332
+ });
58236
58333
  resizeWindow();
58237
58334
  const scope = event.context.scoped;
58238
58335
  // let filterFormValues = event.data;
@@ -58246,18 +58343,34 @@ async function getObjectFilter(objectSchema, fields, options) {
58246
58343
  crudService && crudService.setData({isFieldsFilterEmpty});
58247
58344
  `;
58248
58345
  let onChangeScript = `
58346
+ let isLookup = event.data.isLookup;
58347
+ let __lookupField = event.data.__lookupField;
58249
58348
  const scope = event.context.scoped;
58250
58349
  // let filterFormValues = event.data;
58251
58350
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
58252
58351
  let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
58253
58352
  // 使用event.data的话,并不能拿到本地存储中的过滤条件,所以需要从filterFormService中取。
58254
58353
  let filterFormValues = filterFormService.getData();
58354
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
58255
58355
  let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
58256
58356
  const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});;
58257
58357
  // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
58258
58358
  // crudService && crudService.setData({__changedFilterFormValues: changedFilterFormValues});
58259
58359
  // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
58260
- crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
58360
+ // crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
58361
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
58362
+ if(isLookup && __lookupField){
58363
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
58364
+ if(__lookupField.reference_to_field){
58365
+ lookupTag += "__" + __lookupField.reference_to_field;
58366
+ }
58367
+ __changedFilterFormValuesKey += lookupTag;
58368
+ }
58369
+ if(crud){
58370
+ let crudData = crud.getData();
58371
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
58372
+ crud.setData(crudData);
58373
+ }
58261
58374
  `;
58262
58375
  return {
58263
58376
  "title": "",
@@ -58860,6 +58973,60 @@ function getReferenceToSync(field) {
58860
58973
  }
58861
58974
 
58862
58975
  function getLookupSapceUserTreeSchema(isMobile){
58976
+ let apiAdaptor = `
58977
+ // console.log("===getLookupSapceUserTreeSchema===", JSON.stringify(payload));
58978
+ const records = payload.data.options;
58979
+ let isTreeOptionsComputed = false;
58980
+ if(records.length === 1 && records[0].children){
58981
+ isTreeOptionsComputed = true;
58982
+ }
58983
+ if(isTreeOptionsComputed){
58984
+ return payload;
58985
+ }
58986
+ const treeRecords = [];
58987
+ const getChildren = (records, childrenIds) => {
58988
+ if (!childrenIds) {
58989
+ return;
58990
+ }
58991
+ const children = _.filter(records, (record) => {
58992
+ return _.includes(childrenIds, record.value)
58993
+ });
58994
+ _.each(children, (item) => {
58995
+ if (item.children) {
58996
+ item.children = getChildren(records, item.children)
58997
+ }else{
58998
+ item.children = [];
58999
+ }
59000
+ })
59001
+ return children;
59002
+ }
59003
+
59004
+ const getRoot = (records) => {
59005
+ for (var i = 0; i < records.length; i++) {
59006
+ records[i].noParent = 0;
59007
+ if (!!records[i].parent) {
59008
+ biaozhi = 1
59009
+ for (var j = 0; j < records.length; j++) {
59010
+ if (records[i].parent == records[j].value)
59011
+ biaozhi = 0;
59012
+ }
59013
+ if (biaozhi == 1) records[i].noParent = 1;
59014
+ } else records[i].noParent = 1;
59015
+ }
59016
+ }
59017
+ getRoot(records);
59018
+ console.log(records)
59019
+
59020
+ _.each(records, (record) => {
59021
+ if (record.noParent == 1) {
59022
+ treeRecords.push(Object.assign({}, record, { children: getChildren(records, record.children) }));
59023
+ }
59024
+ });
59025
+ console.log(treeRecords)
59026
+
59027
+ payload.data.options = treeRecords;
59028
+ return payload;
59029
+ `;
58863
59030
  const treeSchema = {
58864
59031
  "type": "input-tree",
58865
59032
  "className":"steedos-select-user-tree",
@@ -58870,8 +59037,7 @@ function getLookupSapceUserTreeSchema(isMobile){
58870
59037
  "headers": {
58871
59038
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
58872
59039
  },
58873
- "adaptor": "if (payload.data.treeCache == true) {\n return payload;\n }\n const records = payload.data.options;\n const treeRecords = [];\n const getChildren = (records, childrenIds) => {\n if (!childrenIds) {\n return;\n }\n const children = _.filter(records, (record) => {\n return _.includes(childrenIds, record.value)\n });\n _.each(children, (item) => {\n if (item.children) {\n item.children = getChildren(records, item.children)\n }\n })\n return children;\n }\n\n const getRoot = (records) => {\n for (var i = 0; i < records.length; i++){\n records[i].noParent = 0;\n if (!!records[i].parent) {\n biaozhi = 1\n for (var j = 0; j < records.length; j++){\n if (records[i].parent == records[j].value)\n biaozhi = 0;\n }\n if (biaozhi == 1) records[i].noParent = 1;\n } else records[i].noParent = 1;\n }\n }\n getRoot(records);\n console.log(records)\n\n _.each(records, (record) => {\n if (record.noParent ==1) {\n treeRecords.push(Object.assign({}, record, { children: getChildren(records, record.children) }));\n }\n });\n console.log(treeRecords)\n\n payload.data.options = treeRecords;\n payload.data.treeCache = true;\n return payload;\n ",
58874
- "requestAdaptor": "\n ",
59040
+ "adaptor": apiAdaptor,
58875
59041
  "data": {
58876
59042
  "query": "{options:organizations(filters:[\"hidden\", \"!=\", true],sort:\"sort_no desc\"){value:_id label:name,parent,children}}"
58877
59043
  },
@@ -59072,13 +59238,24 @@ async function lookupToAmisPicker(field, readonly, ctx){
59072
59238
  let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
59073
59239
 
59074
59240
  source.requestAdaptor = `
59075
- let __changedFilterFormValues = api.data.$self.__changedFilterFormValues || {};
59241
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
59242
+ let __lookupField = api.data.$self.__lookupField;
59243
+ if(__lookupField){
59244
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
59245
+ if(__lookupField.reference_to_field){
59246
+ lookupTag += "__" + __lookupField.reference_to_field;
59247
+ }
59248
+ __changedFilterFormValuesKey += lookupTag;
59249
+ }
59250
+ let __changedFilterFormValues = api.data.$self[__changedFilterFormValuesKey] || {};
59076
59251
  let __changedSearchBoxValues = api.data.$self.__changedSearchBoxValues || {};
59077
59252
  // 把表单搜索和快速搜索中的change事件中记录的过滤条件也拼到$self中,是为解决触发搜索请求时,两边输入的过滤条件都带上,即:
59078
59253
  // 有时在搜索表单中输入过滤条件事,忘记点击回车键或搜索按钮,而是进一步修改快速搜索框中的关键字点击其中回车键触发搜索
59079
59254
  // 这种情况下,触发的搜索请求中没有带上搜索表单中输入的过滤条件。
59080
59255
  // 反过来先在快速搜索框中输入过滤条件却不点击其中回车键触发搜索,而是到搜索表单中触发搜索请求也是一样的。
59081
- Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
59256
+ if(api.data.$self.op !== 'loadOptions'){
59257
+ Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
59258
+ }
59082
59259
  const selfData = JSON.parse(JSON.stringify(api.data.$self));
59083
59260
  var filters = [];
59084
59261
  var pageSize = api.data.pageSize || 10;
@@ -59173,8 +59350,19 @@ async function lookupToAmisPicker(field, readonly, ctx){
59173
59350
  })
59174
59351
  payload.data.rows = rows;
59175
59352
  */
59353
+ if(enable_tree){
59354
+ const rows = _.map(payload.data.rows, (item)=>{
59355
+ delete item.children;
59356
+ delete item.parent;
59357
+ return item;
59358
+ })
59359
+ payload.data.rows = rows;
59360
+ }
59176
59361
  return payload;
59177
59362
  }
59363
+ if(!payload.data.rows){
59364
+ payload.data.rows = [];
59365
+ }
59178
59366
  if(enable_tree){
59179
59367
  const records = payload.data.rows;
59180
59368
  const treeRecords = [];
@@ -59201,6 +59389,8 @@ async function lookupToAmisPicker(field, readonly, ctx){
59201
59389
  _.each(children, (item)=>{
59202
59390
  if(item.children){
59203
59391
  item.children = getChildren(records, item.children)
59392
+ }else{
59393
+ item.children = [];
59204
59394
  }
59205
59395
  })
59206
59396
  return children;
@@ -59213,14 +59403,6 @@ async function lookupToAmisPicker(field, readonly, ctx){
59213
59403
  }
59214
59404
  });
59215
59405
  payload.data.rows = treeRecords;
59216
- try{
59217
- setTimeout(() => {
59218
- $('.amis-dialog-widget.antd-Modal .antd-Table-content .antd-Table-table thead .antd-Table-expandBtn')[0]?.click();
59219
- }, 600);
59220
- }
59221
- catch(ex){
59222
- console.error("tree数据格式展开异常:", ex);
59223
- }
59224
59406
  }
59225
59407
  return payload;
59226
59408
  `;
@@ -59247,6 +59429,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
59247
59429
  labelFieldName,
59248
59430
  top: top,
59249
59431
  isLookup: true,
59432
+ enable_tree: refObjectConfig.enable_tree,
59250
59433
  ...ctx
59251
59434
  });
59252
59435
 
@@ -59262,7 +59445,7 @@ async function lookupToAmisPicker(field, readonly, ctx){
59262
59445
  const isAllowCreate = refObjectConfig.permissions.allowCreate;
59263
59446
  const isCreate = lodash.exports.isBoolean(field.create) ? field.create : true;
59264
59447
  // lookup字段配置过滤条件就强制不显示新建按钮
59265
- let isHasFilters = (field.filters || field._filtersFunction) ? true : false;
59448
+ let isHasFilters = (field.filters || field.filtersFunction || field._filtersFunction) ? true : false;
59266
59449
  if (isAllowCreate && isCreate && !isHasFilters) {
59267
59450
  const new_button = await getSchema$5(refObjectConfig, { appId: ctx.appId, objectName: refObjectConfig.name, formFactor: ctx.formFactor });
59268
59451
  new_button.align = "right";
@@ -59282,7 +59465,12 @@ async function lookupToAmisPicker(field, readonly, ctx){
59282
59465
  "objectName": refObjectConfig.name,
59283
59466
  "uiSchema": refObjectConfig,
59284
59467
  "listName": listName,// 需要按视图取可搜索项
59285
- "isLookup": true
59468
+ "isLookup": true,
59469
+ "__lookupField": {
59470
+ "name": field.name,
59471
+ "reference_to": refObjectConfig.name,
59472
+ "reference_to_field": field.reference_to_field
59473
+ }
59286
59474
  });
59287
59475
 
59288
59476
  if(!pickerSchema.onEvent){
@@ -59455,7 +59643,7 @@ async function lookupToAmisSelect(field, readonly, ctx){
59455
59643
  sendOn.push(`this.${fName}`);
59456
59644
  });
59457
59645
  if(depend_on.length > 0){
59458
- apiInfo.url = `${apiInfo.url}?${depend_on.join('&')}`;
59646
+ apiInfo.url = `${apiInfo.url}&${depend_on.join('&')}`;
59459
59647
  apiInfo.sendOn = `${sendOn.join(' && ')}`;
59460
59648
  }
59461
59649
  }
@@ -59563,6 +59751,13 @@ async function lookupToAmisSelect(field, readonly, ctx){
59563
59751
  autoComplete: apiInfo,
59564
59752
  searchable: true,
59565
59753
  };
59754
+ let amisVersion = getComparableAmisVersion();
59755
+ if(amisVersion >= 3.6){
59756
+ // amis 3.6中不加source会造成子表组件中弹出行编辑窗口的lookup字段有时不请求接口(概率现象,同一个地方反复操作有时请求有时不请求)
59757
+ // 但是同时配置autoComplete和source会多请求一次接口
59758
+ // TODO:应该想办法把是否字段在子表组件内,即ctx.isInputTable,如果不在子表组件内不需要加source
59759
+ data.source = apiInfo;
59760
+ }
59566
59761
  //删除xlink:href中的rootUrl前缀,解决客户端svg为空的问题
59567
59762
  const select_menuTpl = `<span class='flex items-center mt-0.5'>
59568
59763
  <span role='img' aria-label='smile' class='anticon anticon-smile'>
@@ -59644,18 +59839,37 @@ async function lookupToAmis(field, readonly, ctx){
59644
59839
 
59645
59840
  // 优先取字段中配置的enable_enhanced_lookup,字段上没配置时,才从对象上取enable_enhanced_lookup属性
59646
59841
  let enableEnhancedLookup = lodash.exports.isBoolean(field.enable_enhanced_lookup) ? field.enable_enhanced_lookup : refObject.enable_enhanced_lookup;
59842
+ let amisVersion = getComparableAmisVersion();
59843
+ if(amisVersion >= 3.6){
59844
+ // amis 3.6.3单选和多选的树picker都有bug(https://github.com/baidu/amis/issues/9279,https://github.com/baidu/amis/issues/9295),我们改amis源码修正了
59845
+ // amis 3.6.3多选的下拉树组件有bug,多选树字段的选中值在编辑模式展开树时不会自动勾选树里面的节点,而是始终勾选显示在最外面的选中值选项(即defaultValueOptions),amis 3.2没有这个问题
59846
+ // 这里强制禁用多选下拉树,统一改为弹出树,如果以后需要下拉树功能,可以把下拉树组件改为一次性加载所有树节点数据模式来跳过这个问题
59847
+ if(!enableEnhancedLookup && refObject.enable_tree && field.multiple){
59848
+ enableEnhancedLookup = true;
59849
+ }
59850
+ }
59851
+ let amisSchema;
59647
59852
  // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
59648
59853
  if(enableEnhancedLookup == true){
59649
- return await lookupToAmisPicker(field, readonly, ctx);
59854
+ amisSchema = await lookupToAmisPicker(field, readonly, ctx);
59650
59855
  }else if(refObject.enable_tree) {
59651
- return await lookupToAmisTreeSelect(field, readonly, Object.assign({}, ctx, {
59856
+ amisSchema = await lookupToAmisTreeSelect(field, readonly, Object.assign({}, ctx, {
59652
59857
  labelField: referenceTo.labelField?.name || 'name',
59653
59858
  valueField: referenceTo.valueField?.name || '_id',
59654
59859
  objectName: referenceTo.objectName
59655
59860
  }));
59656
59861
  }else {
59657
- return await lookupToAmisSelect(field, readonly, ctx);
59862
+ amisSchema = await lookupToAmisSelect(field, readonly, ctx);
59658
59863
  }
59864
+ let refLookupPage = refObject.pages && refObject.pages.lookup;
59865
+ if(refLookupPage){
59866
+ if(typeof refLookupPage == 'string'){
59867
+ refLookupPage = JSON.parse(refLookupPage);
59868
+ }
59869
+ // Object.assign(amisSchema, refLookupPage);
59870
+ // amisSchema = _.defaultsDeep({}, refLookupPage, amisSchema);
59871
+ }
59872
+ return amisSchema;
59659
59873
  }
59660
59874
 
59661
59875
  async function lookupToAmisIdsPicker(field, readonly, ctx){
@@ -60293,7 +60507,8 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
60293
60507
  },
60294
60508
  pipeOut: (value, oldValue, data) => {
60295
60509
  if(value){
60296
- return value/100;
60510
+ const result = value/100;
60511
+ return Number(result.toFixed(field.scale+2));
60297
60512
  }
60298
60513
  return value;
60299
60514
  },
@@ -60525,7 +60740,7 @@ async function convertSFieldToAmisField(field, readonly, ctx) {
60525
60740
  }
60526
60741
  if(!lodash.exports.isEmpty(convertData)){
60527
60742
  if(field.is_wide || convertData.type === 'group'){
60528
- convertData.className = 'col-span-2 m-1';
60743
+ convertData.className = 'col-span-2 m-0';
60529
60744
  }else {
60530
60745
  convertData.className = 'm-1';
60531
60746
  }