@steedos-widgets/amis-lib 3.6.0-beta.4 → 3.6.0-beta.6

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.
package/dist/index.esm.js CHANGED
@@ -545,7 +545,7 @@ function getNameTpl(field, ctx){
545
545
  if(ctx && ctx.isLookup){
546
546
  linkTarget = "target='_blank'";
547
547
  }
548
- return `<a href="${href}" ${linkTarget}>\${${field.name}}</a>`
548
+ return `<a href="${href}" ${linkTarget}>\${${field.name} | raw}</a>`
549
549
  }
550
550
 
551
551
  function getRelatedFieldTpl(field, ctx){
@@ -1102,7 +1102,7 @@ function getAmisStaticFieldType(type, readonly, options){
1102
1102
  * @Author: baozhoutao@steedos.com
1103
1103
  * @Date: 2022-10-28 14:15:09
1104
1104
  * @LastEditors: liaodaxue
1105
- * @LastEditTime: 2023-10-30 17:51:54
1105
+ * @LastEditTime: 2023-12-29 10:46:50
1106
1106
  * @Description:
1107
1107
  */
1108
1108
 
@@ -1156,7 +1156,8 @@ const getAmisFileEditSchema = (steedosField)=>{
1156
1156
  dataType: "form-data",
1157
1157
  url: `\${context.rootUrl}/s3/${tableName}`,
1158
1158
  requestAdaptor: `
1159
- const { _master, global,context } = api.body;
1159
+ const superData = (typeof context != 'undefined') ? context : api.body;
1160
+ const { _master, global } = superData;
1160
1161
  // const { recordId, objectName } = _master;
1161
1162
  const { spaceId, userId, user } = global;
1162
1163
  /*
@@ -1174,8 +1175,9 @@ const getAmisFileEditSchema = (steedosField)=>{
1174
1175
  return api;
1175
1176
  `,
1176
1177
  adaptor: `
1177
- const { context } = api.body;
1178
- var rootUrl = context.rootUrl + "/api/files/${tableName}/";
1178
+ const superData = (typeof context != 'undefined') ? context : api.body;
1179
+ const { context:pageContext } = superData;
1180
+ var rootUrl = pageContext.rootUrl + "/api/files/${tableName}/";
1179
1181
  payload = {
1180
1182
  status: response.status == 200 ? 0 : response.status,
1181
1183
  msg: response.statusText,
@@ -1779,8 +1781,9 @@ async function getQuickEditSchema(field, options){
1779
1781
  case "avatar":
1780
1782
  case "image":
1781
1783
  quickEditSchema.body[0].receiver.adaptor = `
1782
- const { context } = api.body;
1783
- var rootUrl = context.rootUrl + "/api/files/${field.type}s/";
1784
+ const superData = (typeof context != 'undefined') ? context : api.body;
1785
+ const { context:pageContext } = superData;
1786
+ var rootUrl = pageContext.rootUrl + "/api/files/${field.type}s/";
1784
1787
  payload = {
1785
1788
  status: response.status == 200 ? 0 : response.status,
1786
1789
  msg: response.statusText,
@@ -2443,7 +2446,7 @@ async function getTableOperation(ctx){
2443
2446
  type: 'steedos-object-button',
2444
2447
  name: button.name,
2445
2448
  objectName: button.objectName,
2446
- visibleOn: getButtonVisibleOn$1(button),
2449
+ visibleOnAlias: getButtonVisibleOn$1(button),
2447
2450
  className: 'antd-Button--default'
2448
2451
  });
2449
2452
  });
@@ -2568,7 +2571,8 @@ async function getTableSchema$1(fields, options){
2568
2571
  }
2569
2572
 
2570
2573
  if(!isLookup && !hiddenColumnOperation){
2571
- columns.push(await getTableOperation(options));
2574
+ const toolbarOperation = await getTableOperation(options);
2575
+ columns.push(toolbarOperation);
2572
2576
  }
2573
2577
 
2574
2578
  }
@@ -5780,6 +5784,8 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
5780
5784
  `;
5781
5785
  const onCancelScript = `
5782
5786
  // console.log("===onCancelScript=form==");
5787
+ let isLookup = event.data.isLookup;
5788
+ let __lookupField = event.data.__lookupField;
5783
5789
  const scope = event.context.scoped;
5784
5790
  var filterForm = scope.parent.parent.getComponents().find(function(n){
5785
5791
  return n.props.type === "form";
@@ -5827,7 +5833,20 @@ async function getObjectFieldsFilterBarSchema(objectSchema, ctx) {
5827
5833
  // });
5828
5834
 
5829
5835
  // 清除__changedFilterFormValues中的值
5830
- crud && crud.setData({__changedFilterFormValues: {}});
5836
+ // crud && crud.setData({__changedFilterFormValues: {}});
5837
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
5838
+ if(isLookup && __lookupField){
5839
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
5840
+ if(__lookupField.reference_to_field){
5841
+ lookupTag += "__" + __lookupField.reference_to_field;
5842
+ }
5843
+ __changedFilterFormValuesKey += lookupTag;
5844
+ }
5845
+ if(crud){
5846
+ let crudData = crud.getData();
5847
+ crudData[__changedFilterFormValuesKey] = {};
5848
+ crud.setData(crudData);
5849
+ }
5831
5850
  filterForm.handleFormSubmit(event);
5832
5851
  // crud.handleFilterSubmit(removedValues);
5833
5852
 
@@ -7755,7 +7774,12 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
7755
7774
  __changedSearchBoxValues["${keywordsSearchBoxName}"] = event.data["${keywordsSearchBoxName}"];
7756
7775
  // crudService && crudService.setData({__changedSearchBoxValues: __changedSearchBoxValues});
7757
7776
  // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
7758
- crud && crud.setData({__changedSearchBoxValues: __changedSearchBoxValues});
7777
+ // crud && crud.setData({__changedSearchBoxValues: __changedSearchBoxValues});
7778
+ if(crud){
7779
+ let crudData = crud.getData();
7780
+ crudData.__changedSearchBoxValues = __changedSearchBoxValues;
7781
+ crud.setData(crudData);
7782
+ }
7759
7783
  `;
7760
7784
 
7761
7785
  // onSearchScript中加上了onChangeScript中的脚本,是因为amis 3.2不能用change事件执行onChangeScript
@@ -7768,9 +7792,19 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
7768
7792
  // const scope = event.context.scoped;
7769
7793
  // 如果点击过顶部搜索栏表单的取消按钮,会把此处event.data.__super.__super.__super中的搜索表单项的所有字段设置为null
7770
7794
  // 点击取消按钮后继续在表单项中输入过滤条件且最后没有点击回车按键或点击表单项搜索按钮的话,在快速搜索中点击回车按钮提交搜索会所顶部搜索表单中的字段值清空
7795
+ let isLookup = event.data.isLookup;
7796
+ let __lookupField = event.data.__lookupField;
7797
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
7798
+ if(isLookup && __lookupField){
7799
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
7800
+ if(__lookupField.reference_to_field){
7801
+ lookupTag += "__" + __lookupField.reference_to_field;
7802
+ }
7803
+ __changedFilterFormValuesKey += lookupTag;
7804
+ }
7771
7805
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
7772
7806
  setTimeout(function(){
7773
- filterForm.setValues(event.data.__changedFilterFormValues);
7807
+ filterForm.setValues(event.data[__changedFilterFormValuesKey]);
7774
7808
  }, 500);
7775
7809
  `;
7776
7810
 
@@ -7791,8 +7825,8 @@ function getObjectHeaderQuickSearchBox(mainObject, fields, formFactor, { isLooku
7791
7825
  "name": keywordsSearchBoxName,
7792
7826
  "placeholder": "搜索此列表",
7793
7827
  "value": crudKeywords,
7794
- "clearable": true,
7795
- // "clearAndSubmit": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
7828
+ // "clearable": true,//因为清除并不会触发失去焦点事件,只有禁用,但是它会触发change事件,所以等升级到amis 3.4+后可以重新放开
7829
+ "clearAndSubmit": true,
7796
7830
  "searchImediately": false,
7797
7831
  "onEvent": {
7798
7832
  "search": {
@@ -8072,18 +8106,34 @@ async function getObjectFilter(objectSchema, fields, options) {
8072
8106
  crudService && crudService.setData({isFieldsFilterEmpty});
8073
8107
  `;
8074
8108
  let onChangeScript = `
8109
+ let isLookup = event.data.isLookup;
8110
+ let __lookupField = event.data.__lookupField;
8075
8111
  const scope = event.context.scoped;
8076
8112
  // let filterFormValues = event.data;
8077
8113
  let filterForm = SteedosUI.getClosestAmisComponentByType(scope, "form");
8078
8114
  let filterFormService = SteedosUI.getClosestAmisComponentByType(filterForm.context, "service");
8079
8115
  // 使用event.data的话,并不能拿到本地存储中的过滤条件,所以需要从filterFormService中取。
8080
8116
  let filterFormValues = filterFormService.getData();
8117
+ filterFormValues = JSON.parse(JSON.stringify(filterFormValues)); //只取当层数据域中数据,去除__super层数据
8081
8118
  let crud = SteedosUI.getClosestAmisComponentByType(scope, "crud");
8082
8119
  const changedFilterFormValues = _.pickBy(filterFormValues, function(n,k){return /^__searchable__/.test(k);});;
8083
8120
  // let crudService = crud && SteedosUI.getClosestAmisComponentByType(crud.context, "service");
8084
8121
  // crudService && crudService.setData({__changedFilterFormValues: changedFilterFormValues});
8085
8122
  // 这里不用crudService而用crud是因为lookup字段弹出的列表中的crudService中的变量无法传入crud的发送适配器中
8086
- crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
8123
+ // crud && crud.setData({__changedFilterFormValues: changedFilterFormValues});
8124
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
8125
+ if(isLookup && __lookupField){
8126
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
8127
+ if(__lookupField.reference_to_field){
8128
+ lookupTag += "__" + __lookupField.reference_to_field;
8129
+ }
8130
+ __changedFilterFormValuesKey += lookupTag;
8131
+ }
8132
+ if(crud){
8133
+ let crudData = crud.getData();
8134
+ crudData[__changedFilterFormValuesKey] = changedFilterFormValues;
8135
+ crud.setData(crudData);
8136
+ }
8087
8137
  `;
8088
8138
  return {
8089
8139
  "title": "",
@@ -10269,6 +10319,58 @@ function getReferenceToSync(field) {
10269
10319
  }
10270
10320
 
10271
10321
  function getLookupSapceUserTreeSchema(isMobile){
10322
+ let apiAdaptor = `
10323
+ // console.log("===getLookupSapceUserTreeSchema===", JSON.stringify(payload));
10324
+ const records = payload.data.options;
10325
+ let isTreeOptionsComputed = false;
10326
+ if(records.length === 1 && records[0].children){
10327
+ isTreeOptionsComputed = true;
10328
+ }
10329
+ if(isTreeOptionsComputed){
10330
+ return payload;
10331
+ }
10332
+ const treeRecords = [];
10333
+ const getChildren = (records, childrenIds) => {
10334
+ if (!childrenIds) {
10335
+ return;
10336
+ }
10337
+ const children = _.filter(records, (record) => {
10338
+ return _.includes(childrenIds, record.value)
10339
+ });
10340
+ _.each(children, (item) => {
10341
+ if (item.children) {
10342
+ item.children = getChildren(records, item.children)
10343
+ }
10344
+ })
10345
+ return children;
10346
+ }
10347
+
10348
+ const getRoot = (records) => {
10349
+ for (var i = 0; i < records.length; i++) {
10350
+ records[i].noParent = 0;
10351
+ if (!!records[i].parent) {
10352
+ biaozhi = 1
10353
+ for (var j = 0; j < records.length; j++) {
10354
+ if (records[i].parent == records[j].value)
10355
+ biaozhi = 0;
10356
+ }
10357
+ if (biaozhi == 1) records[i].noParent = 1;
10358
+ } else records[i].noParent = 1;
10359
+ }
10360
+ }
10361
+ getRoot(records);
10362
+ console.log(records)
10363
+
10364
+ _.each(records, (record) => {
10365
+ if (record.noParent == 1) {
10366
+ treeRecords.push(Object.assign({}, record, { children: getChildren(records, record.children) }));
10367
+ }
10368
+ });
10369
+ console.log(treeRecords)
10370
+
10371
+ payload.data.options = treeRecords;
10372
+ return payload;
10373
+ `;
10272
10374
  const treeSchema = {
10273
10375
  "type": "input-tree",
10274
10376
  "className":"steedos-select-user-tree",
@@ -10279,8 +10381,7 @@ function getLookupSapceUserTreeSchema(isMobile){
10279
10381
  "headers": {
10280
10382
  "Authorization": "Bearer ${context.tenantId},${context.authToken}"
10281
10383
  },
10282
- "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 ",
10283
- "requestAdaptor": "\n ",
10384
+ "adaptor": apiAdaptor,
10284
10385
  "data": {
10285
10386
  "query": "{options:organizations(filters:[\"hidden\", \"!=\", true],sort:\"sort_no desc\"){value:_id label:name,parent,children}}"
10286
10387
  },
@@ -10481,13 +10582,24 @@ async function lookupToAmisPicker(field, readonly, ctx){
10481
10582
  let keywordsSearchBoxName = `__keywords_lookup__${field.name.replace(/\./g, "_")}__to__${refObjectConfig.name}`;
10482
10583
 
10483
10584
  source.requestAdaptor = `
10484
- let __changedFilterFormValues = api.data.$self.__changedFilterFormValues || {};
10585
+ let __changedFilterFormValuesKey = "__changedFilterFormValues";
10586
+ let __lookupField = api.data.$self.__lookupField;
10587
+ if(__lookupField){
10588
+ let lookupTag = "__lookup__" + __lookupField.name + "__" + __lookupField.reference_to;
10589
+ if(__lookupField.reference_to_field){
10590
+ lookupTag += "__" + __lookupField.reference_to_field;
10591
+ }
10592
+ __changedFilterFormValuesKey += lookupTag;
10593
+ }
10594
+ let __changedFilterFormValues = api.data.$self[__changedFilterFormValuesKey] || {};
10485
10595
  let __changedSearchBoxValues = api.data.$self.__changedSearchBoxValues || {};
10486
10596
  // 把表单搜索和快速搜索中的change事件中记录的过滤条件也拼到$self中,是为解决触发搜索请求时,两边输入的过滤条件都带上,即:
10487
10597
  // 有时在搜索表单中输入过滤条件事,忘记点击回车键或搜索按钮,而是进一步修改快速搜索框中的关键字点击其中回车键触发搜索
10488
10598
  // 这种情况下,触发的搜索请求中没有带上搜索表单中输入的过滤条件。
10489
10599
  // 反过来先在快速搜索框中输入过滤条件却不点击其中回车键触发搜索,而是到搜索表单中触发搜索请求也是一样的。
10490
- Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
10600
+ if(api.data.$self.op !== 'loadOptions'){
10601
+ Object.assign(api.data.$self, __changedSearchBoxValues, __changedFilterFormValues);
10602
+ }
10491
10603
  const selfData = JSON.parse(JSON.stringify(api.data.$self));
10492
10604
  var filters = [];
10493
10605
  var pageSize = api.data.pageSize || 10;
@@ -10694,7 +10806,12 @@ async function lookupToAmisPicker(field, readonly, ctx){
10694
10806
  "objectName": refObjectConfig.name,
10695
10807
  "uiSchema": refObjectConfig,
10696
10808
  "listName": listName,// 需要按视图取可搜索项
10697
- "isLookup": true
10809
+ "isLookup": true,
10810
+ "__lookupField": {
10811
+ "name": field.name,
10812
+ "reference_to": refObjectConfig.name,
10813
+ "reference_to_field": field.reference_to_field
10814
+ }
10698
10815
  });
10699
10816
 
10700
10817
  if(!pickerSchema.onEvent){
@@ -11063,6 +11180,15 @@ async function lookupToAmis(field, readonly, ctx){
11063
11180
 
11064
11181
  // 优先取字段中配置的enable_enhanced_lookup,字段上没配置时,才从对象上取enable_enhanced_lookup属性
11065
11182
  let enableEnhancedLookup = _$1.isBoolean(field.enable_enhanced_lookup) ? field.enable_enhanced_lookup : refObject.enable_enhanced_lookup;
11183
+ let amisVersion = getComparableAmisVersion();
11184
+ if(amisVersion >= 3.6){
11185
+ // amis 3.6.3单选和多选的树picker都有bug(https://github.com/baidu/amis/issues/9279,https://github.com/baidu/amis/issues/9295),我们改amis源码修正了
11186
+ // amis 3.6.3多选的下拉树组件有bug,多选树字段的选中值在编辑模式展开树时不会自动勾选树里面的节点,而是始终勾选显示在最外面的选中值选项(即defaultValueOptions),amis 3.2没有这个问题
11187
+ // 这里强制禁用多选下拉树,统一改为弹出树,如果以后需要下拉树功能,可以把下拉树组件改为一次性加载所有树节点数据模式来跳过这个问题
11188
+ if(!enableEnhancedLookup && refObject.enable_tree && field.multiple){
11189
+ enableEnhancedLookup = true;
11190
+ }
11191
+ }
11066
11192
  // 默认使用下拉框模式显示lookup选项,只能配置了enable_enhanced_lookup才使用弹出增强模式
11067
11193
  if(enableEnhancedLookup == true){
11068
11194
  return await lookupToAmisPicker(field, readonly, ctx);
@@ -12462,8 +12588,8 @@ async function getFormBody(permissionFields, formFields, ctx){
12462
12588
  /*
12463
12589
  * @Author: 殷亮辉 yinlianghui@hotoa.com
12464
12590
  * @Date: 2023-11-15 09:50:22
12465
- * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
12466
- * @LastEditTime: 2023-12-28 15:54:36
12591
+ * @LastEditors: baozhoutao@steedos.com
12592
+ * @LastEditTime: 2024-01-02 15:43:50
12467
12593
  */
12468
12594
 
12469
12595
  /**
@@ -13092,6 +13218,7 @@ async function getButtonActions(props, mode) {
13092
13218
  // "__parentForm": "${__super.__super || {}}",
13093
13219
  // "__parentForm": mode == "new" ? "$$" : "${__super.__super || {}}",
13094
13220
  "__parentForm": mode == "new" ? "$$" : parentFormData,
13221
+ "_master": "${_master}",
13095
13222
  "global": "${global}",
13096
13223
  "uiSchema": "${uiSchema}",
13097
13224
  "index": "${index}",
@@ -14801,8 +14928,8 @@ const getInstanceApprovalHistory = async ()=>{
14801
14928
  /*
14802
14929
  * @Author: baozhoutao@steedos.com
14803
14930
  * @Date: 2022-09-07 16:20:45
14804
- * @LastEditors: baozhoutao@steedos.com
14805
- * @LastEditTime: 2023-03-23 16:49:44
14931
+ * @LastEditors: liaodaxue
14932
+ * @LastEditTime: 2023-12-29 16:06:35
14806
14933
  * @Description:
14807
14934
  */
14808
14935
 
@@ -15628,7 +15755,6 @@ const getFlowFormSchema = async (instance, box) => {
15628
15755
  "messages": {
15629
15756
  },
15630
15757
  "requestAdaptor": `
15631
- const { context } = api.data;
15632
15758
  api.data = {
15633
15759
  query: \`
15634
15760
  {
@@ -15651,7 +15777,7 @@ const getFlowFormSchema = async (instance, box) => {
15651
15777
  `,
15652
15778
  "data": {
15653
15779
  // "&": "$$",
15654
- "context": "${context}",
15780
+ // "context": "${context}",
15655
15781
  "judge": "${new_judge}",
15656
15782
  }
15657
15783
  },