drawerContent.jsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import React,{useState,useEffect,useRef} from 'react'
  2. import { PageContainer } from '@ant-design/pro-layout';
  3. import ProTable from '@ant-design/pro-table';
  4. import {Table } from 'antd';
  5. import { DrawerForm } from '@ant-design/pro-form';
  6. import {deepGetVal,deepGetAllParents,unique} from '@/utils';
  7. export default function DrawerContent(props) {
  8. const {
  9. visible=false,
  10. onVisibleChange=()=>{},
  11. currentRow={},
  12. renderListFunc=()=>{},
  13. onFinishFunc=()=>{console.log('init onFinishFunc')},
  14. columns=[],
  15. defaultSelected=[],
  16. config={},
  17. title,
  18. pageContainerConfig=()=>{},
  19. expandable={}
  20. } = props;
  21. const {rowKeys='id',tableSearch=false,} = config;
  22. const drawerRef = useRef();
  23. const [selectedKeys,setSelectedKeys] = useState([]);
  24. const [defaultSelectedKeys,setDefaultSelectedKeys] = useState([]);
  25. const [ifSearch,setIfSearch] = useState(false);
  26. const drawerTableRef= useRef();
  27. const [selectedRows,setSelectedRows] = useState([]);
  28. const renderDefault = ()=>{
  29. const defaultSelects = defaultSelected;
  30. setDefaultSelectedKeys(defaultSelected);
  31. setSelectedKeys(defaultSelects);
  32. }
  33. useEffect(()=>{
  34. renderDefault();
  35. },[currentRow,defaultSelected])
  36. return visible&&currentRow&&columns.length>0 ? (
  37. <>
  38. <DrawerForm
  39. title={title}
  40. visible={visible}
  41. onVisibleChange={onVisibleChange}
  42. formRef={drawerRef}
  43. drawerProps={{
  44. forceRender: true,
  45. destroyOnClose: true,
  46. }}
  47. onFinish={async (values) => {
  48. // console.log({onFinishFunc,values});
  49. onFinishFunc(values,defaultSelectedKeys,selectedRows);
  50. }}
  51. >
  52. <PageContainer
  53. {...pageContainerConfig(drawerTableRef)}
  54. >
  55. <ProTable
  56. columns={columns}
  57. rowKey={rowKeys}
  58. tableClassName="drawerContent"
  59. request={renderListFunc}
  60. search={tableSearch}
  61. actionRef={drawerTableRef}
  62. onSubmit={(u)=>{
  63. // console.log({u});
  64. setIfSearch(true);
  65. }}
  66. onReset={()=>{setIfSearch(false);}}
  67. expandable={{
  68. ...expandable,
  69. }}
  70. rowSelection={{
  71. // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
  72. // 注释该行则默认不显示下拉选项
  73. selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
  74. checkStrictly:true,
  75. selectedRowKeys:selectedKeys,
  76. renderCell:(checked, record, index, originNode)=>{
  77. if(!record[expandable['childrenColumnName']]||record[expandable['childrenColumnName']].length==0)return originNode
  78. },
  79. onChange:(selectedRowKeys, selectedRows)=>{
  80. // console.log({selectedRowKeys,selectedRows});
  81. setSelectedRows(selectedRows);
  82. setSelectedKeys(selectedRowKeys);
  83. setDefaultSelectedKeys([].concat(selectedRowKeys));
  84. },
  85. onSelect:(record, selected, selectedRows, nativeEvent)=>{
  86. // // console.log({record, selected, selectedRows, nativeEvent,ifSearch});
  87. // let _defaultSelectedKeys = defaultSelectedKeys;
  88. // let children = record[expandable['childrenColumnName']];
  89. // let arr=[];
  90. // if(children&&children.length>0){
  91. // arr = deepGetVal(children,rowKeys,expandable['childrenColumnName']);
  92. // }
  93. // arr.push(record[rowKeys]);
  94. // if(!selected){
  95. // arr.forEach(val=>{
  96. // const index = defaultSelectedKeys.findIndex(item=>item == val);
  97. // // console.log(index,record[rowKeys],defaultSelectedKeys)
  98. // if(index != -1){
  99. // _defaultSelectedKeys.splice(index,1);
  100. // }
  101. // });
  102. // _defaultSelectedKeys = unique(_defaultSelectedKeys);
  103. // setDefaultSelectedKeys(_defaultSelectedKeys);
  104. // }else{
  105. // let tempArr = _defaultSelectedKeys.concat(arr);
  106. // tempArr = unique(tempArr);
  107. // setDefaultSelectedKeys([].concat(tempArr));
  108. // }
  109. }
  110. }}
  111. />
  112. </PageContainer>
  113. </DrawerForm>
  114. </>
  115. ) : <></>
  116. }