@steedos-widgets/amis-object 1.3.19 → 1.3.20

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.
@@ -5176,6 +5176,9 @@ async function getTableColumns$1(fields, options){
5176
5176
  const allowEdit = options.permissions?.allowEdit && !options.isLookup && options.enable_inline_edit != false;
5177
5177
 
5178
5178
  for (const field of fields) {
5179
+ if(field.hidden || field.extra){
5180
+ continue;
5181
+ }
5179
5182
  //增加quickEdit属性,实现快速编辑
5180
5183
  const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
5181
5184
  let className = "";
@@ -15535,7 +15538,7 @@ async function getFormBody(permissionFields, formFields, ctx){
15535
15538
  * @Author: 殷亮辉 yinlianghui@hotoa.com
15536
15539
  * @Date: 2023-11-15 09:50:22
15537
15540
  * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
15538
- * @LastEditTime: 2023-12-04 17:36:50
15541
+ * @LastEditTime: 2023-12-12 17:13:37
15539
15542
  */
15540
15543
 
15541
15544
  /**
@@ -15549,52 +15552,71 @@ function getFormFields(props, mode = "edit") {
15549
15552
  "name": item.name,
15550
15553
  "config": item
15551
15554
  };
15552
- if(mode === "readonly"){
15555
+ if (mode === "readonly") {
15553
15556
  formItem.static = true;
15554
15557
  }
15555
15558
  return formItem;
15556
15559
  }) || [];
15557
15560
  }
15558
15561
 
15562
+ function getInputTableCell(field, showAsInlineEditMode) {
15563
+ if (showAsInlineEditMode) {
15564
+ return {
15565
+ label: field.label,
15566
+ name: field.name,
15567
+ quickEdit: {
15568
+ "type": "steedos-field",
15569
+ "config": field,
15570
+ hideLabel: true
15571
+ }
15572
+ }
15573
+ }
15574
+ else {
15575
+ return {
15576
+ "type": "steedos-field",
15577
+ "config": field,
15578
+ "static": true,
15579
+ "readonly": true,
15580
+ label: field.label,
15581
+ name: field.name,
15582
+ hideLabel: true
15583
+ }
15584
+ }
15585
+ }
15586
+
15559
15587
  /**
15560
15588
  * @param {*} props
15561
15589
  * @param {*} mode edit/new/readonly
15562
15590
  */
15563
15591
  async function getInputTableColumns(props) {
15564
15592
  let columns = props.columns || [];
15593
+ let inlineEditMode = props.inlineEditMode;
15594
+ let showAsInlineEditMode = inlineEditMode && props.editable;
15565
15595
  // 实测过,直接不生成对应的隐藏column并不会对input-table值造成丢失问题,隐藏的列字段值能正常维护
15566
15596
  let fields = props.fields;
15567
- if(columns && columns.length){
15568
- return columns.map(function(column){
15597
+ if (columns && columns.length) {
15598
+ return columns.map(function (column) {
15569
15599
  let field, extendColumnProps = {};
15570
- if(typeof column === "string"){
15600
+ if (typeof column === "string") {
15571
15601
  // 如果字符串,则取出要显示的列配置
15572
- field = fields.find(function(fieldItem){
15602
+ field = fields.find(function (fieldItem) {
15573
15603
  return fieldItem.name === column;
15574
15604
  });
15575
15605
  }
15576
15606
  else {
15577
15607
  // 如果是对象,则合并到steedos-field的config.amis属性中,steedos组件会把config.amis属性混合到最终生成的input-table column
15578
- field = fields.find(function(fieldItem){
15608
+ field = fields.find(function (fieldItem) {
15579
15609
  return fieldItem.name === column.name;
15580
15610
  });
15581
- if(field){
15611
+ if (field) {
15582
15612
  // field.amis = Object.assign({}, field.amis, column);
15583
15613
  // 如果把column合并到field.amis,column的label/width等属性不会生效,只能放外层合并
15584
15614
  extendColumnProps = column;
15585
15615
  }
15586
15616
  }
15587
- if(field){
15588
- return {
15589
- "type": "steedos-field",
15590
- "config": field,
15591
- "static": true,
15592
- "readonly": true,
15593
- label: field.label,
15594
- name: field.name,
15595
- hideLabel: true,
15596
- ...extendColumnProps
15597
- }
15617
+ if (field) {
15618
+ let tableCell = getInputTableCell(field, showAsInlineEditMode);
15619
+ return Object.assign({}, tableCell, extendColumnProps);
15598
15620
  }
15599
15621
  else {
15600
15622
  return column;
@@ -15602,20 +15624,212 @@ async function getInputTableColumns(props) {
15602
15624
  });
15603
15625
  }
15604
15626
  else {
15605
- return fields.map(function(field){
15606
- return {
15607
- "type": "steedos-field",
15608
- "config": field,
15609
- "static": true,
15610
- "readonly": true,
15611
- label: field.label,
15612
- name: field.name,
15613
- hideLabel: true
15614
- }
15627
+ return fields.map(function (field) {
15628
+ let tableCell = getInputTableCell(field, showAsInlineEditMode);
15629
+ return tableCell;
15615
15630
  }) || [];
15616
15631
  }
15617
15632
  }
15618
15633
 
15634
+ function getFormPagination(props) {
15635
+ let onPageChangeScript = `
15636
+ let scope = event.context.scoped;
15637
+ let paginationServiceId = event.data.paginationServiceId;
15638
+ let wrapperServiceId = event.data.wrapperServiceId;
15639
+ let formId = event.data.formId;
15640
+ let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15641
+ let pageChangeDirection = context.props.pageChangeDirection;
15642
+ let currentPage = event.data.page;
15643
+ let currentIndex = event.data.index;
15644
+
15645
+ // 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
15646
+ let currentFormValues = scope.getComponentById(formId).getValues();
15647
+ fieldValue[currentIndex] = currentFormValues;
15648
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15649
+ // doAction({
15650
+ // "componentId": wrapperServiceId,
15651
+ // "actionType": "setValue",
15652
+ // "args": {
15653
+ // "value": {
15654
+ // "changedItems": fieldValue
15655
+ // }
15656
+ // }
15657
+ // });
15658
+ // 如果翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,需要额外给正式表单字段执行一次setValue
15659
+ // 但是同时保存到正式表单字段中会造成翻页后点击取消无法取消翻页之前的改动内容
15660
+ // doAction({
15661
+ // "componentId": "${props.id}",
15662
+ // "actionType": "setValue",
15663
+ // "args": {
15664
+ // "value": fieldValue
15665
+ // }
15666
+ // });
15667
+
15668
+ // 以下是翻页逻辑,翻到下一页并把下一页内容显示到表单上
15669
+ let targetPage;
15670
+ if(pageChangeDirection === "next"){
15671
+ targetPage = currentPage + 1;
15672
+ }
15673
+ else{
15674
+ targetPage = currentPage - 1;
15675
+ }
15676
+ let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
15677
+ // let targetFormData = changedItems[targetIndex];
15678
+ doAction({
15679
+ "actionType": "setValue",
15680
+ "componentId": paginationServiceId,
15681
+ "args": {
15682
+ "value": {
15683
+ "page": targetPage,
15684
+ "index": targetIndex
15685
+ }
15686
+ }
15687
+ });
15688
+ // 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
15689
+ // doAction({
15690
+ // "actionType": "setValue",
15691
+ // "componentId": formId,
15692
+ // "args": {
15693
+ // "value": targetFormData
15694
+ // },
15695
+ // "dataMergeMode": "override"// amis 3.2不支持override模式,高版本才支持
15696
+ // });
15697
+ `;
15698
+ return {
15699
+ "type": "wrapper",
15700
+ "className": "py-2",
15701
+ "body": [
15702
+ {
15703
+ "type": "button",
15704
+ "label": "",
15705
+ "icon": `fa fa-angle-left`,
15706
+ "level": "link",
15707
+ "pageChangeDirection": "prev",
15708
+ "disabledOn": "${page <= 1}",
15709
+ "size": "sm",
15710
+ "onEvent": {
15711
+ "click": {
15712
+ "actions": [
15713
+ {
15714
+ "actionType": "custom",
15715
+ "script": onPageChangeScript
15716
+ }
15717
+ ]
15718
+ }
15719
+ }
15720
+ },
15721
+ {
15722
+ "type": "tpl",
15723
+ "tpl": "${page}/${total}"
15724
+ },
15725
+ {
15726
+ "type": "button",
15727
+ "label": "",
15728
+ "icon": `fa fa-angle-right`,
15729
+ "level": "link",
15730
+ "pageChangeDirection": "next",
15731
+ "disabledOn": "${page >= total}",
15732
+ "size": "sm",
15733
+ "onEvent": {
15734
+ "click": {
15735
+ "actions": [
15736
+ {
15737
+ "actionType": "custom",
15738
+ "script": onPageChangeScript
15739
+ }
15740
+ ]
15741
+ }
15742
+ }
15743
+ }
15744
+ ]
15745
+ }
15746
+ }
15747
+
15748
+ /**
15749
+ * 传入formSchema输出带翻页容器的wrapper
15750
+ * @param {*} props input-table组件props
15751
+ * @param {*} form formSchema
15752
+ * @returns 带翻页容器的wrapper
15753
+ */
15754
+ function getFormPaginationWrapper(props, form) {
15755
+ let serviceId = `service_popup_pagination_wrapper__${props.id}`;
15756
+ let formBody = [
15757
+ {
15758
+ "type": "wrapper",
15759
+ "size": "none",
15760
+ "className": "flex justify-end border-y border-gray-200 -mx-6 shadow-inner sticky top-0 right-0 left-0 z-20 bg-white mb-4",
15761
+ "body": [
15762
+ getFormPagination(props)
15763
+ ]
15764
+ },
15765
+ // form
15766
+ Object.assign({}, form, {
15767
+ "canAccessSuperData": false,
15768
+ "data": {
15769
+ // "&": `\${${props.name}[index]}`,
15770
+ "&": "${changedItems[index]}"
15771
+ }
15772
+ })
15773
+ ];
15774
+ let onServiceInitedScript = `
15775
+ // 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
15776
+ // inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
15777
+ // 思路是每次弹出form之前先把其changedItems同步更新为最新值,这样就能在弹出form中包含单元格中做的修改
15778
+ // 注意:service init事件只会在每次弹出窗口时才执行,在触发翻页时并不会触发service init事件
15779
+ let inlineEditMode = ${props.inlineEditMode};
15780
+ if(!inlineEditMode){
15781
+ return;
15782
+ }
15783
+ let scope = event.context.scoped;
15784
+ let wrapperServiceId = event.data.wrapperServiceId;
15785
+ let wrapperService = scope.getComponentById(wrapperServiceId);
15786
+ let wrapperServiceData = wrapperService.getData();
15787
+ let lastestFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15788
+ //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
15789
+ event.data.changedItems.forEach(function(n,i){
15790
+ event.data.changedItems[i] = lastestFieldValue[i];
15791
+ });
15792
+ `;
15793
+ let schema = {
15794
+ "type": "service",
15795
+ "id": serviceId,
15796
+ "schemaApi": {
15797
+ "url": "${context.rootUrl}/graphql?rebuildOn=${index}",
15798
+ // "url": "${context.rootUrl}/graphql",
15799
+ "method": "post",
15800
+ "headers": {
15801
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
15802
+ },
15803
+ "requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
15804
+ "adaptor": `
15805
+ const formBody = ${JSON.stringify(formBody)};
15806
+ return {
15807
+ "body": formBody
15808
+ }
15809
+ `
15810
+ },
15811
+ // "body": formBody,
15812
+ "data": {
15813
+ "page": "${index + 1}",
15814
+ // "total": `\${${props.name}.length}`,
15815
+ "total": "${changedItems.length}",
15816
+ "paginationServiceId": serviceId,
15817
+ "formId": form.id
15818
+ },
15819
+ "onEvent": {
15820
+ "init": {
15821
+ "actions": [
15822
+ {
15823
+ "actionType": "custom",
15824
+ "script": onServiceInitedScript
15825
+ }
15826
+ ]
15827
+ }
15828
+ }
15829
+ };
15830
+ return schema;
15831
+ }
15832
+
15619
15833
  /**
15620
15834
  * @param {*} props
15621
15835
  * @param {*} mode edit/new/readonly
@@ -15623,29 +15837,58 @@ async function getInputTableColumns(props) {
15623
15837
  async function getForm(props, mode = "edit") {
15624
15838
  let formFields = getFormFields(props, mode);
15625
15839
  let body = await getFormBody(null, formFields);
15840
+ let forId = `form_popup__${props.id}`;
15626
15841
  let schema = {
15627
15842
  "type": "form",
15843
+ "id": forId,
15628
15844
  "title": "表单",
15629
15845
  "debug": false,
15630
15846
  "mode": "normal",
15631
15847
  "body": body,
15848
+ "wrapWithPanel": false,
15632
15849
  "className": "steedos-object-form steedos-amis-form"
15633
15850
  };
15634
15851
  if (mode === "edit") {
15852
+ let onEditItemSubmitScript = `
15853
+ // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15854
+ let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15855
+ fieldValue[event.data.index] = JSON.parse(JSON.stringify(event.data));
15856
+ doAction({
15857
+ "componentId": "${props.id}",
15858
+ "actionType": "setValue",
15859
+ "args": {
15860
+ "value": fieldValue
15861
+ }
15862
+ });
15863
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15864
+ // doAction({
15865
+ // "componentId": event.data.wrapperServiceId,
15866
+ // "actionType": "setValue",
15867
+ // "args": {
15868
+ // "value": {
15869
+ // "changedItems": fieldValue
15870
+ // }
15871
+ // }
15872
+ // });
15873
+ `;
15635
15874
  Object.assign(schema, {
15636
15875
  "onEvent": {
15637
15876
  "submit": {
15638
15877
  "weight": 0,
15639
15878
  "actions": [
15879
+ // {
15880
+ // "actionType": "setValue",
15881
+ // "args": {
15882
+ // "index": "${index}",
15883
+ // "value": {
15884
+ // "&": "$$"
15885
+ // }
15886
+ // },
15887
+ // "componentId": props.id
15888
+ // }
15640
15889
  {
15641
- "actionType": "setValue",
15642
- "args": {
15643
- "index": "${index}",
15644
- "value": {
15645
- "&": "$$"
15646
- }
15647
- },
15648
- "componentId": props.id
15890
+ "actionType": "custom",
15891
+ "script": onEditItemSubmitScript
15649
15892
  }
15650
15893
  ]
15651
15894
  }
@@ -15654,10 +15897,11 @@ async function getForm(props, mode = "edit") {
15654
15897
  }
15655
15898
  else if (mode === "new") {
15656
15899
  let onNewItemSubmitScript = `
15657
- let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15658
- if(!fieldValue){
15659
- fieldValue = [];
15900
+ // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15901
+ if(!event.data.changedItems){
15902
+ event.data.changedItems = [];
15660
15903
  }
15904
+ let fieldValue = event.data.changedItems;
15661
15905
  fieldValue.push(JSON.parse(JSON.stringify(event.data)));
15662
15906
  doAction({
15663
15907
  "componentId": "${props.id}",
@@ -15666,6 +15910,16 @@ async function getForm(props, mode = "edit") {
15666
15910
  "value": fieldValue
15667
15911
  }
15668
15912
  });
15913
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15914
+ // doAction({
15915
+ // "componentId": event.data.wrapperServiceId,
15916
+ // "actionType": "setValue",
15917
+ // "args": {
15918
+ // "value": {
15919
+ // "changedItems": fieldValue
15920
+ // }
15921
+ // }
15922
+ // });
15669
15923
  `;
15670
15924
  Object.assign(schema, {
15671
15925
  "onEvent": {
@@ -15691,6 +15945,9 @@ async function getForm(props, mode = "edit") {
15691
15945
  }
15692
15946
  });
15693
15947
  }
15948
+ if (mode === "edit" || mode === "readonly") {
15949
+ schema = getFormPaginationWrapper(props, schema);
15950
+ }
15694
15951
  return schema;
15695
15952
  }
15696
15953
 
@@ -15725,11 +15982,32 @@ async function getButtonNew(props) {
15725
15982
  };
15726
15983
  }
15727
15984
 
15728
- async function getButtonEdit(props) {
15985
+ async function getButtonEdit(props, showAsInlineEditMode) {
15986
+ let onCancelScript = `
15987
+ let scope = event.context.scoped;
15988
+ let wrapperServiceId = event.data.wrapperServiceId;
15989
+ let wrapperService = scope.getComponentById(wrapperServiceId);
15990
+ let wrapperServiceData = wrapperService.getData();
15991
+ let originalFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15992
+ //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
15993
+ event.data.changedItems.forEach(function(n,i){
15994
+ event.data.changedItems[i] = originalFieldValue[i];
15995
+ });
15996
+ // 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
15997
+ // doAction({
15998
+ // "componentId": wrapperServiceId,
15999
+ // "actionType": "setValue",
16000
+ // "args": {
16001
+ // "value": {
16002
+ // "changedItems": originalFieldValue
16003
+ // }
16004
+ // }
16005
+ // });
16006
+ `;
15729
16007
  return {
15730
16008
  "type": "button",
15731
16009
  "label": "",
15732
- "icon": "fa fa-pencil",
16010
+ "icon": `fa fa-${showAsInlineEditMode ? "expand" : "pencil"}`,//inline edit模式时显示为放开按钮,只读时显示为笔按钮
15733
16011
  "level": "link",
15734
16012
  "onEvent": {
15735
16013
  "click": {
@@ -15747,7 +16025,29 @@ async function getButtonEdit(props) {
15747
16025
  "showErrorMsg": true,
15748
16026
  "showLoading": true,
15749
16027
  "className": "app-popover",
15750
- "closeOnEsc": false
16028
+ "closeOnEsc": false,
16029
+ "data": {
16030
+ // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16031
+ // 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16032
+ // 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
16033
+ "&": "${record || {}}",
16034
+ "global": "${global}",
16035
+ "uiSchema": "${uiSchema}",
16036
+ "grid": "${grid}",
16037
+ "index": "${index}",
16038
+ "changedItems": "${changedItems}",
16039
+ "wrapperServiceId": "${wrapperServiceId}"
16040
+ },
16041
+ "onEvent": {
16042
+ "cancel": {
16043
+ "actions": [
16044
+ {
16045
+ "actionType": "custom",
16046
+ "script": onCancelScript
16047
+ }
16048
+ ]
16049
+ }
16050
+ }
15751
16051
  }
15752
16052
  }
15753
16053
  ]
@@ -15760,7 +16060,7 @@ async function getButtonView(props) {
15760
16060
  return {
15761
16061
  "type": "button",
15762
16062
  "label": "",
15763
- "icon": "fa fa-external-link",
16063
+ "icon": "fa fa-expand",//fa-external-link
15764
16064
  "level": "link",
15765
16065
  "onEvent": {
15766
16066
  "click": {
@@ -15778,7 +16078,18 @@ async function getButtonView(props) {
15778
16078
  "showErrorMsg": true,
15779
16079
  "showLoading": true,
15780
16080
  "className": "app-popover",
15781
- "closeOnEsc": false
16081
+ "closeOnEsc": false,
16082
+ "actions": [],
16083
+ "data": {
16084
+ // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16085
+ // 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16086
+ // global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
16087
+ "&": "${formData || {}}",
16088
+ "grid": "${grid}",
16089
+ "index": "${index}",
16090
+ "changedItems": "${changedItems}",
16091
+ "wrapperServiceId": "${wrapperServiceId}"
16092
+ }
15782
16093
  }
15783
16094
  }
15784
16095
  ]
@@ -15788,6 +16099,32 @@ async function getButtonView(props) {
15788
16099
  }
15789
16100
 
15790
16101
  function getButtonDelete(props) {
16102
+ let onDeleteItemScript = `
16103
+ // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
16104
+ if(!event.data.changedItems){
16105
+ event.data.changedItems = [];
16106
+ }
16107
+ let fieldValue = event.data.changedItems;
16108
+ // fieldValue.push(JSON.parse(JSON.stringify(event.data)));
16109
+ fieldValue.splice(event.data.index, 1)
16110
+ doAction({
16111
+ "componentId": "${props.id}",
16112
+ "actionType": "setValue",
16113
+ "args": {
16114
+ "value": fieldValue
16115
+ }
16116
+ });
16117
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
16118
+ // doAction({
16119
+ // "componentId": event.data.wrapperServiceId,
16120
+ // "actionType": "setValue",
16121
+ // "args": {
16122
+ // "value": {
16123
+ // "changedItems": fieldValue
16124
+ // }
16125
+ // }
16126
+ // });
16127
+ `;
15791
16128
  return {
15792
16129
  "type": "button",
15793
16130
  "label": "",
@@ -15796,12 +16133,16 @@ function getButtonDelete(props) {
15796
16133
  "onEvent": {
15797
16134
  "click": {
15798
16135
  "actions": [
16136
+ // {
16137
+ // "actionType": "deleteItem",
16138
+ // "args": {
16139
+ // "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
16140
+ // },
16141
+ // "componentId": props.id
16142
+ // },
15799
16143
  {
15800
- "actionType": "deleteItem",
15801
- "args": {
15802
- "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
15803
- },
15804
- "componentId": props.id
16144
+ "actionType": "custom",
16145
+ "script": onDeleteItemScript
15805
16146
  }
15806
16147
  ]
15807
16148
  }
@@ -15809,18 +16150,34 @@ function getButtonDelete(props) {
15809
16150
  };
15810
16151
  }
15811
16152
 
15812
- const getAmisInputTableSchema = async (props, readonly) => {
16153
+ const getAmisInputTableSchema = async (props) => {
15813
16154
  if (!props.id) {
15814
16155
  props.id = "steedos_input_table_" + props.name + "_" + Math.random().toString(36).substr(2, 9);
15815
16156
  }
16157
+ let serviceId = `service_wrapper__${props.id}`;
15816
16158
  let buttonsForColumnOperations = [];
16159
+ let inlineEditMode = props.inlineEditMode;
16160
+ let showAsInlineEditMode = inlineEditMode && props.editable;
15817
16161
  if (props.editable) {
15818
- let buttonEditSchema = await getButtonEdit(props);
15819
- buttonsForColumnOperations.push(buttonEditSchema);
16162
+ let showEditButton = true;
16163
+ if (showAsInlineEditMode) {
16164
+ // inline edit模式下只在有列被隐藏时才需要显示编辑按钮
16165
+ if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
16166
+ showEditButton = true;
16167
+ }
16168
+ else {
16169
+ showEditButton = false;
16170
+ }
16171
+ }
16172
+ // 编辑时显示编辑按钮
16173
+ if (showEditButton) {
16174
+ let buttonEditSchema = await getButtonEdit(props, showAsInlineEditMode);
16175
+ buttonsForColumnOperations.push(buttonEditSchema);
16176
+ }
15820
16177
  }
15821
16178
  else {
15822
16179
  // 只读时显示查看按钮
15823
- if(props.columns && props.columns.length > 0 && props.columns.length < props.fields.length){
16180
+ if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
15824
16181
  // 只在有列被隐藏时才需要显示查看按钮
15825
16182
  let buttonViewSchema = await getButtonView(props);
15826
16183
  buttonsForColumnOperations.push(buttonViewSchema);
@@ -15857,13 +16214,26 @@ const getAmisInputTableSchema = async (props, readonly) => {
15857
16214
  "width": buttonsForColumnOperations.length > 1 ? "46px" : "20px"
15858
16215
  });
15859
16216
  }
16217
+ if (showAsInlineEditMode) {
16218
+ inputTableSchema.needConfirm = false;
16219
+ }
16220
+ let dataProviderInited = `
16221
+ // 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
16222
+ setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
16223
+ `;
15860
16224
  let schema = {
15861
- "type": "wrapper",
15862
- "size": "none",
16225
+ "type": "service",
15863
16226
  "body": [
15864
16227
  inputTableSchema
15865
16228
  ],
15866
- "className": props.className
16229
+ "className": props.className,
16230
+ "id": serviceId,
16231
+ "data": {
16232
+ "wrapperServiceId": serviceId
16233
+ },
16234
+ "dataProvider": {
16235
+ "inited": dataProviderInited
16236
+ }
15867
16237
  };
15868
16238
  let footerToolbar = _$1.clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
15869
16239
  if (props.addable) {
@@ -15881,6 +16251,7 @@ const getAmisInputTableSchema = async (props, readonly) => {
15881
16251
  delete props.amis.id;
15882
16252
  Object.assign(schema.body[0], props.amis);
15883
16253
  }
16254
+ // console.log("===schema===", schema);
15884
16255
  return schema;
15885
16256
  };
15886
16257
 
@@ -20877,17 +21248,17 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
20877
21248
  if (_$1.isString(ctx)) {
20878
21249
  ctx = JSON.parse(ctx);
20879
21250
  }
20880
- if (config) {
20881
- steedosField = config;
20882
- if (_$1.isString(steedosField)) {
20883
- steedosField = JSON.parse(config);
20884
- }
21251
+ steedosField = config ? config : field;
21252
+ if (_$1.isString(steedosField)) {
21253
+ steedosField = JSON.parse(steedosField);
20885
21254
  }
20886
21255
  else {
20887
- steedosField = field;
20888
- if (_$1.isString(field)) {
20889
- steedosField = JSON.parse(field);
20890
- }
21256
+ // 这里要clone是因为后面图片字段类型执行steedosField.amis = ...的时候会造成input-table中的图片字段在弹出编辑表单点击确认后整个input-table组件重新渲染了,从而导致其翻页功能异常
21257
+ steedosField = _$1.clone(steedosField);
21258
+ }
21259
+ if (!fStatic && steedosField.readonly && !props.data.hasOwnProperty("_display")) {
21260
+ // 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
21261
+ fStatic = true;
20891
21262
  }
20892
21263
  _d.label = 1;
20893
21264
  case 1:
@@ -21057,6 +21428,9 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21057
21428
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21058
21429
  case 13:
21059
21430
  schema = _d.sent();
21431
+ if (hideLabel) {
21432
+ delete schema.label;
21433
+ }
21060
21434
  // console.log(`AmisSteedosField return schema`, schema)
21061
21435
  return [2 /*return*/, schema];
21062
21436
  case 14: return [3 /*break*/, 16];
@@ -21307,7 +21681,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
21307
21681
  return __generator(this, function (_a) {
21308
21682
  switch (_a.label) {
21309
21683
  case 0:
21310
- props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar;
21684
+ props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode;
21311
21685
  return [4 /*yield*/, getAmisInputTableSchema(props)];
21312
21686
  case 1:
21313
21687
  amisSchema = _a.sent();