transform.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. import React, { Key, useEffect, useImperativeHandle, useState } from "react";
  2. import { Transfer } from 'antd'
  3. import { TransferItem, TransferProps } from 'antd/es/transfer';
  4. import { ColumnsType } from 'antd/es/table';
  5. import { difference } from "lodash";
  6. import { TableRowSelection } from 'antd/es/table/interface';
  7. import { KCIMTable } from "@/components/KCIMTable";
  8. import { ProColumns } from "@ant-design/pro-components";
  9. import { Tabs} from 'antd';
  10. import { log } from "mathjs";
  11. import { getAccountingSubjectList } from "../../accountingAccountSet/accountingSubMana/service";
  12. import { getIncomeCollectionListHasConnected } from "./service";
  13. interface TableTransferProps extends TransferProps<TransferItem> {
  14. leftColumns: ProColumns[];
  15. rightColumns: ProColumns[];
  16. record: any,
  17. keyName: string,
  18. onSave: (selectedKeys: Key[], selectedRowKeys: any[]) => void;
  19. }
  20. const TableTransfer = React.forwardRef(({ leftColumns, rightColumns, keyName, record, onSave, ...restProps }: TableTransferProps, ref) => {
  21. const [_data, _set_data] = useState<any>();
  22. const [targetKeys, setTargetKeys] = useState<string[]>([]);
  23. const [datasource, set_datasource] = useState<any[]>([]);
  24. const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
  25. //获取列表
  26. const getFuncList = async () => {
  27. const {id } = record;
  28. const resp = await getAccountingSubjectList({ accountType:1, shareParamId: id, pageSize: 500, current: 1 });
  29. if (resp) {
  30. set_datasource(resp.list);
  31. _set_data(resp.list);
  32. // setTargetKeys(accountingIds);
  33. }
  34. }
  35. const setInit = async ()=>{
  36. const {id} = record;
  37. const resp = await getIncomeCollectionListHasConnected({id});
  38. if(resp){
  39. const tempArr = resp?resp.map((item:any)=>item.accountingCode):[];
  40. setTargetKeys([...tempArr]);
  41. }
  42. }
  43. const onChange = (nextTargetKeys: string[]) => {
  44. setTargetKeys(nextTargetKeys);
  45. };
  46. const onSelectChange = (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => {
  47. //console.log('sourceSelectedKeys:', sourceSelectedKeys,'targetSelectedKeys:',targetSelectedKeys);
  48. setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);
  49. };
  50. useImperativeHandle(ref, () => ({
  51. save: async () => {
  52. const items = datasource.filter(a => targetKeys.includes(a[`${keyName}`]));
  53. onSave(targetKeys, items);
  54. }
  55. }));
  56. useEffect(() => {
  57. getFuncList();
  58. setInit();
  59. }, []);
  60. return (
  61. <div>
  62. <Transfer className='TableTransfer' showSearch
  63. titles={['待选项', '已选项']}
  64. locale={{
  65. itemUnit: '项',
  66. itemsUnit: '项',
  67. searchPlaceholder: '请输入',
  68. }}
  69. oneWay={false}
  70. onChange={onChange}
  71. onSelectChange={onSelectChange}
  72. dataSource={datasource}
  73. rowKey={record => record[`${keyName}`]}
  74. targetKeys={targetKeys}
  75. selectedKeys={selectedKeys}
  76. filterOption={(inputValue, item) => {
  77. return item.name!.indexOf(inputValue) !== -1
  78. }}
  79. >
  80. {({
  81. direction,
  82. filteredItems,
  83. onItemSelectAll,
  84. onItemSelect,
  85. selectedKeys: listSelectedKeys,
  86. disabled: listDisabled,
  87. }) => {
  88. // console.log({ filteredItems, listSelectedKeys,direction });
  89. const columns = direction === 'left' ? leftColumns : rightColumns;
  90. const rowSelection: TableRowSelection<TransferItem> = {
  91. getCheckboxProps: (item) => ({ disabled: listDisabled || item.disabled }),
  92. onSelectAll(selected, selectedRows) {
  93. const treeSelectedKeys = selectedRows.map((a) => a[`${keyName}`]);
  94. const diffKeys = selected
  95. ? difference(treeSelectedKeys, listSelectedKeys)
  96. : difference(listSelectedKeys, treeSelectedKeys);
  97. onItemSelectAll(diffKeys as string[], selected);
  98. },
  99. onSelect(item, selected) {
  100. onItemSelect(item[`${keyName}`], selected);
  101. },
  102. selectedRowKeys: listSelectedKeys,
  103. };
  104. return (
  105. <KCIMTable
  106. rowSelection={rowSelection}
  107. columns={columns as TransferItem[]}
  108. dataSource={filteredItems}
  109. size="small"
  110. bordered={false}
  111. rowKey={`${keyName}`}
  112. tableStyle={{border:'none'}}
  113. pagination={{ showTitle: false, pageSize: 9, showLessItems: false, simple: true, showTotal: () => false }}
  114. tableAlertRender={false}
  115. style={{ pointerEvents: listDisabled ? 'none' : undefined }}
  116. onRow={(row) => ({
  117. onClick: () => {
  118. if (row.itemDisabled || listDisabled) return;
  119. onItemSelect(row[`${keyName}`], !listSelectedKeys.includes(row[`${keyName}`]));
  120. },
  121. })}
  122. />
  123. );
  124. }}
  125. </Transfer>
  126. </div>
  127. )
  128. });
  129. export default TableTransfer