@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.
@@ -5148,6 +5148,9 @@ async function getTableColumns$1(fields, options){
5148
5148
  const allowEdit = options.permissions?.allowEdit && !options.isLookup && options.enable_inline_edit != false;
5149
5149
 
5150
5150
  for (const field of fields) {
5151
+ if(field.hidden || field.extra){
5152
+ continue;
5153
+ }
5151
5154
  //增加quickEdit属性,实现快速编辑
5152
5155
  const quickEditSchema = allowEdit ? await getQuickEditSchema(field, options) : allowEdit;
5153
5156
  let className = "";
@@ -15507,7 +15510,7 @@ async function getFormBody(permissionFields, formFields, ctx){
15507
15510
  * @Author: 殷亮辉 yinlianghui@hotoa.com
15508
15511
  * @Date: 2023-11-15 09:50:22
15509
15512
  * @LastEditors: 殷亮辉 yinlianghui@hotoa.com
15510
- * @LastEditTime: 2023-12-04 17:36:50
15513
+ * @LastEditTime: 2023-12-12 17:13:37
15511
15514
  */
15512
15515
 
15513
15516
  /**
@@ -15521,52 +15524,71 @@ function getFormFields(props, mode = "edit") {
15521
15524
  "name": item.name,
15522
15525
  "config": item
15523
15526
  };
15524
- if(mode === "readonly"){
15527
+ if (mode === "readonly") {
15525
15528
  formItem.static = true;
15526
15529
  }
15527
15530
  return formItem;
15528
15531
  }) || [];
15529
15532
  }
15530
15533
 
15534
+ function getInputTableCell(field, showAsInlineEditMode) {
15535
+ if (showAsInlineEditMode) {
15536
+ return {
15537
+ label: field.label,
15538
+ name: field.name,
15539
+ quickEdit: {
15540
+ "type": "steedos-field",
15541
+ "config": field,
15542
+ hideLabel: true
15543
+ }
15544
+ }
15545
+ }
15546
+ else {
15547
+ return {
15548
+ "type": "steedos-field",
15549
+ "config": field,
15550
+ "static": true,
15551
+ "readonly": true,
15552
+ label: field.label,
15553
+ name: field.name,
15554
+ hideLabel: true
15555
+ }
15556
+ }
15557
+ }
15558
+
15531
15559
  /**
15532
15560
  * @param {*} props
15533
15561
  * @param {*} mode edit/new/readonly
15534
15562
  */
15535
15563
  async function getInputTableColumns(props) {
15536
15564
  let columns = props.columns || [];
15565
+ let inlineEditMode = props.inlineEditMode;
15566
+ let showAsInlineEditMode = inlineEditMode && props.editable;
15537
15567
  // 实测过,直接不生成对应的隐藏column并不会对input-table值造成丢失问题,隐藏的列字段值能正常维护
15538
15568
  let fields = props.fields;
15539
- if(columns && columns.length){
15540
- return columns.map(function(column){
15569
+ if (columns && columns.length) {
15570
+ return columns.map(function (column) {
15541
15571
  let field, extendColumnProps = {};
15542
- if(typeof column === "string"){
15572
+ if (typeof column === "string") {
15543
15573
  // 如果字符串,则取出要显示的列配置
15544
- field = fields.find(function(fieldItem){
15574
+ field = fields.find(function (fieldItem) {
15545
15575
  return fieldItem.name === column;
15546
15576
  });
15547
15577
  }
15548
15578
  else {
15549
15579
  // 如果是对象,则合并到steedos-field的config.amis属性中,steedos组件会把config.amis属性混合到最终生成的input-table column
15550
- field = fields.find(function(fieldItem){
15580
+ field = fields.find(function (fieldItem) {
15551
15581
  return fieldItem.name === column.name;
15552
15582
  });
15553
- if(field){
15583
+ if (field) {
15554
15584
  // field.amis = Object.assign({}, field.amis, column);
15555
15585
  // 如果把column合并到field.amis,column的label/width等属性不会生效,只能放外层合并
15556
15586
  extendColumnProps = column;
15557
15587
  }
15558
15588
  }
15559
- if(field){
15560
- return {
15561
- "type": "steedos-field",
15562
- "config": field,
15563
- "static": true,
15564
- "readonly": true,
15565
- label: field.label,
15566
- name: field.name,
15567
- hideLabel: true,
15568
- ...extendColumnProps
15569
- }
15589
+ if (field) {
15590
+ let tableCell = getInputTableCell(field, showAsInlineEditMode);
15591
+ return Object.assign({}, tableCell, extendColumnProps);
15570
15592
  }
15571
15593
  else {
15572
15594
  return column;
@@ -15574,20 +15596,212 @@ async function getInputTableColumns(props) {
15574
15596
  });
15575
15597
  }
15576
15598
  else {
15577
- return fields.map(function(field){
15578
- return {
15579
- "type": "steedos-field",
15580
- "config": field,
15581
- "static": true,
15582
- "readonly": true,
15583
- label: field.label,
15584
- name: field.name,
15585
- hideLabel: true
15586
- }
15599
+ return fields.map(function (field) {
15600
+ let tableCell = getInputTableCell(field, showAsInlineEditMode);
15601
+ return tableCell;
15587
15602
  }) || [];
15588
15603
  }
15589
15604
  }
15590
15605
 
15606
+ function getFormPagination(props) {
15607
+ let onPageChangeScript = `
15608
+ let scope = event.context.scoped;
15609
+ let paginationServiceId = event.data.paginationServiceId;
15610
+ let wrapperServiceId = event.data.wrapperServiceId;
15611
+ let formId = event.data.formId;
15612
+ let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15613
+ let pageChangeDirection = context.props.pageChangeDirection;
15614
+ let currentPage = event.data.page;
15615
+ let currentIndex = event.data.index;
15616
+
15617
+ // 翻页到下一页之前需要先把当前页改动的内容保存到中间变量changedItems中
15618
+ let currentFormValues = scope.getComponentById(formId).getValues();
15619
+ fieldValue[currentIndex] = currentFormValues;
15620
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15621
+ // doAction({
15622
+ // "componentId": wrapperServiceId,
15623
+ // "actionType": "setValue",
15624
+ // "args": {
15625
+ // "value": {
15626
+ // "changedItems": fieldValue
15627
+ // }
15628
+ // }
15629
+ // });
15630
+ // 如果翻页到下一页前需要同时把改动的内容保存到最终正式的表单字段中,需要额外给正式表单字段执行一次setValue
15631
+ // 但是同时保存到正式表单字段中会造成翻页后点击取消无法取消翻页之前的改动内容
15632
+ // doAction({
15633
+ // "componentId": "${props.id}",
15634
+ // "actionType": "setValue",
15635
+ // "args": {
15636
+ // "value": fieldValue
15637
+ // }
15638
+ // });
15639
+
15640
+ // 以下是翻页逻辑,翻到下一页并把下一页内容显示到表单上
15641
+ let targetPage;
15642
+ if(pageChangeDirection === "next"){
15643
+ targetPage = currentPage + 1;
15644
+ }
15645
+ else{
15646
+ targetPage = currentPage - 1;
15647
+ }
15648
+ let targetIndex = targetPage - 1;//input-table组件行索引,从0开始的索引
15649
+ // let targetFormData = changedItems[targetIndex];
15650
+ doAction({
15651
+ "actionType": "setValue",
15652
+ "componentId": paginationServiceId,
15653
+ "args": {
15654
+ "value": {
15655
+ "page": targetPage,
15656
+ "index": targetIndex
15657
+ }
15658
+ }
15659
+ });
15660
+ // 这里不用进一步把表单内容setValue到form中,是因为编辑表单中schemaApi监听了行索引index的变化,其值变化时会重新build整个form
15661
+ // doAction({
15662
+ // "actionType": "setValue",
15663
+ // "componentId": formId,
15664
+ // "args": {
15665
+ // "value": targetFormData
15666
+ // },
15667
+ // "dataMergeMode": "override"// amis 3.2不支持override模式,高版本才支持
15668
+ // });
15669
+ `;
15670
+ return {
15671
+ "type": "wrapper",
15672
+ "className": "py-2",
15673
+ "body": [
15674
+ {
15675
+ "type": "button",
15676
+ "label": "",
15677
+ "icon": `fa fa-angle-left`,
15678
+ "level": "link",
15679
+ "pageChangeDirection": "prev",
15680
+ "disabledOn": "${page <= 1}",
15681
+ "size": "sm",
15682
+ "onEvent": {
15683
+ "click": {
15684
+ "actions": [
15685
+ {
15686
+ "actionType": "custom",
15687
+ "script": onPageChangeScript
15688
+ }
15689
+ ]
15690
+ }
15691
+ }
15692
+ },
15693
+ {
15694
+ "type": "tpl",
15695
+ "tpl": "${page}/${total}"
15696
+ },
15697
+ {
15698
+ "type": "button",
15699
+ "label": "",
15700
+ "icon": `fa fa-angle-right`,
15701
+ "level": "link",
15702
+ "pageChangeDirection": "next",
15703
+ "disabledOn": "${page >= total}",
15704
+ "size": "sm",
15705
+ "onEvent": {
15706
+ "click": {
15707
+ "actions": [
15708
+ {
15709
+ "actionType": "custom",
15710
+ "script": onPageChangeScript
15711
+ }
15712
+ ]
15713
+ }
15714
+ }
15715
+ }
15716
+ ]
15717
+ }
15718
+ }
15719
+
15720
+ /**
15721
+ * 传入formSchema输出带翻页容器的wrapper
15722
+ * @param {*} props input-table组件props
15723
+ * @param {*} form formSchema
15724
+ * @returns 带翻页容器的wrapper
15725
+ */
15726
+ function getFormPaginationWrapper(props, form) {
15727
+ let serviceId = `service_popup_pagination_wrapper__${props.id}`;
15728
+ let formBody = [
15729
+ {
15730
+ "type": "wrapper",
15731
+ "size": "none",
15732
+ "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",
15733
+ "body": [
15734
+ getFormPagination(props)
15735
+ ]
15736
+ },
15737
+ // form
15738
+ Object.assign({}, form, {
15739
+ "canAccessSuperData": false,
15740
+ "data": {
15741
+ // "&": `\${${props.name}[index]}`,
15742
+ "&": "${changedItems[index]}"
15743
+ }
15744
+ })
15745
+ ];
15746
+ let onServiceInitedScript = `
15747
+ // 以下脚本在inlineEditMode模式时才有必要执行(不过执行了也没有坏处,纯粹是没必要),是为了解决:
15748
+ // inlineEditMode模式时,用户在表格单元格中直接修改数据,然后弹出的表单form中并没有包含单元格中修改的内容
15749
+ // 思路是每次弹出form之前先把其changedItems同步更新为最新值,这样就能在弹出form中包含单元格中做的修改
15750
+ // 注意:service init事件只会在每次弹出窗口时才执行,在触发翻页时并不会触发service init事件
15751
+ let inlineEditMode = ${props.inlineEditMode};
15752
+ if(!inlineEditMode){
15753
+ return;
15754
+ }
15755
+ let scope = event.context.scoped;
15756
+ let wrapperServiceId = event.data.wrapperServiceId;
15757
+ let wrapperService = scope.getComponentById(wrapperServiceId);
15758
+ let wrapperServiceData = wrapperService.getData();
15759
+ let lastestFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15760
+ //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断
15761
+ event.data.changedItems.forEach(function(n,i){
15762
+ event.data.changedItems[i] = lastestFieldValue[i];
15763
+ });
15764
+ `;
15765
+ let schema = {
15766
+ "type": "service",
15767
+ "id": serviceId,
15768
+ "schemaApi": {
15769
+ "url": "${context.rootUrl}/graphql?rebuildOn=${index}",
15770
+ // "url": "${context.rootUrl}/graphql",
15771
+ "method": "post",
15772
+ "headers": {
15773
+ "Authorization": "Bearer ${context.tenantId},${context.authToken}"
15774
+ },
15775
+ "requestAdaptor": "api.data={query: '{spaces__findOne(id: \"none\"){_id,name}}'};return api;",
15776
+ "adaptor": `
15777
+ const formBody = ${JSON.stringify(formBody)};
15778
+ return {
15779
+ "body": formBody
15780
+ }
15781
+ `
15782
+ },
15783
+ // "body": formBody,
15784
+ "data": {
15785
+ "page": "${index + 1}",
15786
+ // "total": `\${${props.name}.length}`,
15787
+ "total": "${changedItems.length}",
15788
+ "paginationServiceId": serviceId,
15789
+ "formId": form.id
15790
+ },
15791
+ "onEvent": {
15792
+ "init": {
15793
+ "actions": [
15794
+ {
15795
+ "actionType": "custom",
15796
+ "script": onServiceInitedScript
15797
+ }
15798
+ ]
15799
+ }
15800
+ }
15801
+ };
15802
+ return schema;
15803
+ }
15804
+
15591
15805
  /**
15592
15806
  * @param {*} props
15593
15807
  * @param {*} mode edit/new/readonly
@@ -15595,29 +15809,58 @@ async function getInputTableColumns(props) {
15595
15809
  async function getForm(props, mode = "edit") {
15596
15810
  let formFields = getFormFields(props, mode);
15597
15811
  let body = await getFormBody(null, formFields);
15812
+ let forId = `form_popup__${props.id}`;
15598
15813
  let schema = {
15599
15814
  "type": "form",
15815
+ "id": forId,
15600
15816
  "title": "表单",
15601
15817
  "debug": false,
15602
15818
  "mode": "normal",
15603
15819
  "body": body,
15820
+ "wrapWithPanel": false,
15604
15821
  "className": "steedos-object-form steedos-amis-form"
15605
15822
  };
15606
15823
  if (mode === "edit") {
15824
+ let onEditItemSubmitScript = `
15825
+ // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15826
+ let fieldValue = event.data.changedItems;//这里不可以_.cloneDeep,因为翻页form中用的是event.data.changedItems,直接变更其值即可改变表单中的值
15827
+ fieldValue[event.data.index] = JSON.parse(JSON.stringify(event.data));
15828
+ doAction({
15829
+ "componentId": "${props.id}",
15830
+ "actionType": "setValue",
15831
+ "args": {
15832
+ "value": fieldValue
15833
+ }
15834
+ });
15835
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15836
+ // doAction({
15837
+ // "componentId": event.data.wrapperServiceId,
15838
+ // "actionType": "setValue",
15839
+ // "args": {
15840
+ // "value": {
15841
+ // "changedItems": fieldValue
15842
+ // }
15843
+ // }
15844
+ // });
15845
+ `;
15607
15846
  Object.assign(schema, {
15608
15847
  "onEvent": {
15609
15848
  "submit": {
15610
15849
  "weight": 0,
15611
15850
  "actions": [
15851
+ // {
15852
+ // "actionType": "setValue",
15853
+ // "args": {
15854
+ // "index": "${index}",
15855
+ // "value": {
15856
+ // "&": "$$"
15857
+ // }
15858
+ // },
15859
+ // "componentId": props.id
15860
+ // }
15612
15861
  {
15613
- "actionType": "setValue",
15614
- "args": {
15615
- "index": "${index}",
15616
- "value": {
15617
- "&": "$$"
15618
- }
15619
- },
15620
- "componentId": props.id
15862
+ "actionType": "custom",
15863
+ "script": onEditItemSubmitScript
15621
15864
  }
15622
15865
  ]
15623
15866
  }
@@ -15626,10 +15869,11 @@ async function getForm(props, mode = "edit") {
15626
15869
  }
15627
15870
  else if (mode === "new") {
15628
15871
  let onNewItemSubmitScript = `
15629
- let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15630
- if(!fieldValue){
15631
- fieldValue = [];
15872
+ // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
15873
+ if(!event.data.changedItems){
15874
+ event.data.changedItems = [];
15632
15875
  }
15876
+ let fieldValue = event.data.changedItems;
15633
15877
  fieldValue.push(JSON.parse(JSON.stringify(event.data)));
15634
15878
  doAction({
15635
15879
  "componentId": "${props.id}",
@@ -15638,6 +15882,16 @@ async function getForm(props, mode = "edit") {
15638
15882
  "value": fieldValue
15639
15883
  }
15640
15884
  });
15885
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
15886
+ // doAction({
15887
+ // "componentId": event.data.wrapperServiceId,
15888
+ // "actionType": "setValue",
15889
+ // "args": {
15890
+ // "value": {
15891
+ // "changedItems": fieldValue
15892
+ // }
15893
+ // }
15894
+ // });
15641
15895
  `;
15642
15896
  Object.assign(schema, {
15643
15897
  "onEvent": {
@@ -15663,6 +15917,9 @@ async function getForm(props, mode = "edit") {
15663
15917
  }
15664
15918
  });
15665
15919
  }
15920
+ if (mode === "edit" || mode === "readonly") {
15921
+ schema = getFormPaginationWrapper(props, schema);
15922
+ }
15666
15923
  return schema;
15667
15924
  }
15668
15925
 
@@ -15697,11 +15954,32 @@ async function getButtonNew(props) {
15697
15954
  };
15698
15955
  }
15699
15956
 
15700
- async function getButtonEdit(props) {
15957
+ async function getButtonEdit(props, showAsInlineEditMode) {
15958
+ let onCancelScript = `
15959
+ let scope = event.context.scoped;
15960
+ let wrapperServiceId = event.data.wrapperServiceId;
15961
+ let wrapperService = scope.getComponentById(wrapperServiceId);
15962
+ let wrapperServiceData = wrapperService.getData();
15963
+ let originalFieldValue = wrapperServiceData["${props.name}"];//这里不可以用event.data["${props.name}"]因为amis input talbe有一层单独的作用域,其值会延迟一拍
15964
+ //不可以直接像event.data.changedItems = originalFieldValue; 这样整个赋值,否则作用域会断,造成无法还原
15965
+ event.data.changedItems.forEach(function(n,i){
15966
+ event.data.changedItems[i] = originalFieldValue[i];
15967
+ });
15968
+ // 因为翻页form中用的是event.data.changedItems中的数据,所以像下面这样doAction setValue无法实现还原
15969
+ // doAction({
15970
+ // "componentId": wrapperServiceId,
15971
+ // "actionType": "setValue",
15972
+ // "args": {
15973
+ // "value": {
15974
+ // "changedItems": originalFieldValue
15975
+ // }
15976
+ // }
15977
+ // });
15978
+ `;
15701
15979
  return {
15702
15980
  "type": "button",
15703
15981
  "label": "",
15704
- "icon": "fa fa-pencil",
15982
+ "icon": `fa fa-${showAsInlineEditMode ? "expand" : "pencil"}`,//inline edit模式时显示为放开按钮,只读时显示为笔按钮
15705
15983
  "level": "link",
15706
15984
  "onEvent": {
15707
15985
  "click": {
@@ -15719,7 +15997,29 @@ async function getButtonEdit(props) {
15719
15997
  "showErrorMsg": true,
15720
15998
  "showLoading": true,
15721
15999
  "className": "app-popover",
15722
- "closeOnEsc": false
16000
+ "closeOnEsc": false,
16001
+ "data": {
16002
+ // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16003
+ // 额外把华炎魔方主表记录ObjectForm中的字段值从record变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16004
+ // 额外把global、uiSchema也映射过去,有可能要用,后续需要用到其他变更可以这里加映射
16005
+ "&": "${record || {}}",
16006
+ "global": "${global}",
16007
+ "uiSchema": "${uiSchema}",
16008
+ "grid": "${grid}",
16009
+ "index": "${index}",
16010
+ "changedItems": "${changedItems}",
16011
+ "wrapperServiceId": "${wrapperServiceId}"
16012
+ },
16013
+ "onEvent": {
16014
+ "cancel": {
16015
+ "actions": [
16016
+ {
16017
+ "actionType": "custom",
16018
+ "script": onCancelScript
16019
+ }
16020
+ ]
16021
+ }
16022
+ }
15723
16023
  }
15724
16024
  }
15725
16025
  ]
@@ -15732,7 +16032,7 @@ async function getButtonView(props) {
15732
16032
  return {
15733
16033
  "type": "button",
15734
16034
  "label": "",
15735
- "icon": "fa fa-external-link",
16035
+ "icon": "fa fa-expand",//fa-external-link
15736
16036
  "level": "link",
15737
16037
  "onEvent": {
15738
16038
  "click": {
@@ -15750,7 +16050,18 @@ async function getButtonView(props) {
15750
16050
  "showErrorMsg": true,
15751
16051
  "showLoading": true,
15752
16052
  "className": "app-popover",
15753
- "closeOnEsc": false
16053
+ "closeOnEsc": false,
16054
+ "actions": [],
16055
+ "data": {
16056
+ // 这里必须加data数据映射,否则翻页功能中取changedItems值时会乱,比如翻页编辑后会把上一页中没改过的字段值带过去
16057
+ // 额外把华炎魔方主表记录ObjectForm中的字段值从formData变量中映射到子表form中,因为子表lookup字段filtersFunction中可能依赖了主表记录中的字段值,比如“工作流规则”对象“时间触发器”字段中的“日期字段”字段
16058
+ // global、uiSchema等常用变量本来就在formData变量已经存在了,无需另外映射
16059
+ "&": "${formData || {}}",
16060
+ "grid": "${grid}",
16061
+ "index": "${index}",
16062
+ "changedItems": "${changedItems}",
16063
+ "wrapperServiceId": "${wrapperServiceId}"
16064
+ }
15754
16065
  }
15755
16066
  }
15756
16067
  ]
@@ -15760,6 +16071,32 @@ async function getButtonView(props) {
15760
16071
  }
15761
16072
 
15762
16073
  function getButtonDelete(props) {
16074
+ let onDeleteItemScript = `
16075
+ // let fieldValue = _.cloneDeep(event.data["${props.name}"]);
16076
+ if(!event.data.changedItems){
16077
+ event.data.changedItems = [];
16078
+ }
16079
+ let fieldValue = event.data.changedItems;
16080
+ // fieldValue.push(JSON.parse(JSON.stringify(event.data)));
16081
+ fieldValue.splice(event.data.index, 1)
16082
+ doAction({
16083
+ "componentId": "${props.id}",
16084
+ "actionType": "setValue",
16085
+ "args": {
16086
+ "value": fieldValue
16087
+ }
16088
+ });
16089
+ // // 因为翻页form中用的是event.data.changedItems中的数据,所以不需要像下面这样doAction setValue变更中间变量changedItems值
16090
+ // doAction({
16091
+ // "componentId": event.data.wrapperServiceId,
16092
+ // "actionType": "setValue",
16093
+ // "args": {
16094
+ // "value": {
16095
+ // "changedItems": fieldValue
16096
+ // }
16097
+ // }
16098
+ // });
16099
+ `;
15763
16100
  return {
15764
16101
  "type": "button",
15765
16102
  "label": "",
@@ -15768,12 +16105,16 @@ function getButtonDelete(props) {
15768
16105
  "onEvent": {
15769
16106
  "click": {
15770
16107
  "actions": [
16108
+ // {
16109
+ // "actionType": "deleteItem",
16110
+ // "args": {
16111
+ // "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
16112
+ // },
16113
+ // "componentId": props.id
16114
+ // },
15771
16115
  {
15772
- "actionType": "deleteItem",
15773
- "args": {
15774
- "index": "${index+','}" //这里不加逗号后续会报错,语法是逗号分隔可以删除多行
15775
- },
15776
- "componentId": props.id
16116
+ "actionType": "custom",
16117
+ "script": onDeleteItemScript
15777
16118
  }
15778
16119
  ]
15779
16120
  }
@@ -15781,18 +16122,34 @@ function getButtonDelete(props) {
15781
16122
  };
15782
16123
  }
15783
16124
 
15784
- const getAmisInputTableSchema = async (props, readonly) => {
16125
+ const getAmisInputTableSchema = async (props) => {
15785
16126
  if (!props.id) {
15786
16127
  props.id = "steedos_input_table_" + props.name + "_" + Math.random().toString(36).substr(2, 9);
15787
16128
  }
16129
+ let serviceId = `service_wrapper__${props.id}`;
15788
16130
  let buttonsForColumnOperations = [];
16131
+ let inlineEditMode = props.inlineEditMode;
16132
+ let showAsInlineEditMode = inlineEditMode && props.editable;
15789
16133
  if (props.editable) {
15790
- let buttonEditSchema = await getButtonEdit(props);
15791
- buttonsForColumnOperations.push(buttonEditSchema);
16134
+ let showEditButton = true;
16135
+ if (showAsInlineEditMode) {
16136
+ // inline edit模式下只在有列被隐藏时才需要显示编辑按钮
16137
+ if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
16138
+ showEditButton = true;
16139
+ }
16140
+ else {
16141
+ showEditButton = false;
16142
+ }
16143
+ }
16144
+ // 编辑时显示编辑按钮
16145
+ if (showEditButton) {
16146
+ let buttonEditSchema = await getButtonEdit(props, showAsInlineEditMode);
16147
+ buttonsForColumnOperations.push(buttonEditSchema);
16148
+ }
15792
16149
  }
15793
16150
  else {
15794
16151
  // 只读时显示查看按钮
15795
- if(props.columns && props.columns.length > 0 && props.columns.length < props.fields.length){
16152
+ if (props.columns && props.columns.length > 0 && props.columns.length < props.fields.length) {
15796
16153
  // 只在有列被隐藏时才需要显示查看按钮
15797
16154
  let buttonViewSchema = await getButtonView(props);
15798
16155
  buttonsForColumnOperations.push(buttonViewSchema);
@@ -15829,13 +16186,26 @@ const getAmisInputTableSchema = async (props, readonly) => {
15829
16186
  "width": buttonsForColumnOperations.length > 1 ? "46px" : "20px"
15830
16187
  });
15831
16188
  }
16189
+ if (showAsInlineEditMode) {
16190
+ inputTableSchema.needConfirm = false;
16191
+ }
16192
+ let dataProviderInited = `
16193
+ // 单独维护一份中间变量changedItems,因为原变量在input-table组件有单独的作用域,翻页功能中无法维护此作用域中的行记录值
16194
+ setData({ changedItems: _.cloneDeep(data["${props.name}"]) || []});
16195
+ `;
15832
16196
  let schema = {
15833
- "type": "wrapper",
15834
- "size": "none",
16197
+ "type": "service",
15835
16198
  "body": [
15836
16199
  inputTableSchema
15837
16200
  ],
15838
- "className": props.className
16201
+ "className": props.className,
16202
+ "id": serviceId,
16203
+ "data": {
16204
+ "wrapperServiceId": serviceId
16205
+ },
16206
+ "dataProvider": {
16207
+ "inited": dataProviderInited
16208
+ }
15839
16209
  };
15840
16210
  let footerToolbar = clone(props.footerToolbar || []); //这里不clone的话,会造成死循环,应该是因为props属性变更会让组件重新渲染
15841
16211
  if (props.addable) {
@@ -15853,6 +16223,7 @@ const getAmisInputTableSchema = async (props, readonly) => {
15853
16223
  delete props.amis.id;
15854
16224
  Object.assign(schema.body[0], props.amis);
15855
16225
  }
16226
+ // console.log("===schema===", schema);
15856
16227
  return schema;
15857
16228
  };
15858
16229
 
@@ -20849,17 +21220,17 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
20849
21220
  if (isString(ctx)) {
20850
21221
  ctx = JSON.parse(ctx);
20851
21222
  }
20852
- if (config) {
20853
- steedosField = config;
20854
- if (isString(steedosField)) {
20855
- steedosField = JSON.parse(config);
20856
- }
21223
+ steedosField = config ? config : field;
21224
+ if (isString(steedosField)) {
21225
+ steedosField = JSON.parse(steedosField);
20857
21226
  }
20858
21227
  else {
20859
- steedosField = field;
20860
- if (isString(field)) {
20861
- steedosField = JSON.parse(field);
20862
- }
21228
+ // 这里要clone是因为后面图片字段类型执行steedosField.amis = ...的时候会造成input-table中的图片字段在弹出编辑表单点击确认后整个input-table组件重新渲染了,从而导致其翻页功能异常
21229
+ steedosField = clone(steedosField);
21230
+ }
21231
+ if (!fStatic && steedosField.readonly && !props.data.hasOwnProperty("_display")) {
21232
+ // 字段配置为只读,强制走fStatic模式,加上_display判断是为了不影响历史代码,比如直接在ObjectForm中调用steedos-field组件
21233
+ fStatic = true;
20863
21234
  }
20864
21235
  _d.label = 1;
20865
21236
  case 1:
@@ -21029,6 +21400,9 @@ var AmisSteedosField = function (props) { return __awaiter(void 0, void 0, void
21029
21400
  return [4 /*yield*/, index.convertSFieldToAmisField(steedosField, readonly, ctx)];
21030
21401
  case 13:
21031
21402
  schema = _d.sent();
21403
+ if (hideLabel) {
21404
+ delete schema.label;
21405
+ }
21032
21406
  // console.log(`AmisSteedosField return schema`, schema)
21033
21407
  return [2 /*return*/, schema];
21034
21408
  case 14: return [3 /*break*/, 16];
@@ -21279,7 +21653,7 @@ var AmisInputTable = function (props) { return __awaiter(void 0, void 0, void 0,
21279
21653
  return __generator(this, function (_a) {
21280
21654
  switch (_a.label) {
21281
21655
  case 0:
21282
- props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar;
21656
+ props.$schema, props.fields, props.name, props.id, props.data, props.columns, props.amis, props.className, props.tableClassName, props.footerToolbar, props.inlineEditMode;
21283
21657
  return [4 /*yield*/, getAmisInputTableSchema(props)];
21284
21658
  case 1:
21285
21659
  amisSchema = _a.sent();