transform.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import React, { 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. interface TableTransferProps extends TransferProps<TransferItem> {
  9. leftColumns: ColumnsType<any>;
  10. rightColumns: ColumnsType<any>;
  11. }
  12. const TableTransfer = React.forwardRef(
  13. ({ leftColumns, rightColumns, ...restProps }: TableTransferProps, ref) => {
  14. const [_data, _set_data] = useState<any>();
  15. const [targetKeys, setTargetKeys] = useState<string[]>([]);
  16. const [datasource, set_datasource] = useState<any[]>([]);
  17. const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
  18. //获取单元
  19. const getFuncList = async () => {
  20. // const resp = await getTotalEmps({
  21. // computeDate: currentComputeDate as string,
  22. // unitCode: currentSelectedTreeNode.code
  23. // });
  24. // if (resp) {
  25. // //_set_data(resp);
  26. // const allData = resp.allEmployees.concat(resp.checkEmployees);
  27. // set_datasource(allData);
  28. // const defaultSelctedkeys = resp.checkEmployees.map((item: any) => item.empNo);
  29. // setTargetKeys(defaultSelctedkeys);
  30. // }
  31. };
  32. const onChange = (nextTargetKeys: string[]) => {
  33. setTargetKeys(nextTargetKeys);
  34. };
  35. const onSelectChange = (
  36. sourceSelectedKeys: string[],
  37. targetSelectedKeys: string[],
  38. ) => {
  39. //console.log('sourceSelectedKeys:', sourceSelectedKeys,'targetSelectedKeys:',targetSelectedKeys);
  40. setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);
  41. };
  42. useImperativeHandle(ref, () => ({
  43. save: async () => {
  44. // const items = datasource.filter(a => targetKeys.includes(a.empNo));
  45. // const resp = await saveEmpsRequest(items);
  46. // if (resp) {
  47. // tableRef.current?.reload();
  48. // }
  49. },
  50. }));
  51. useEffect(() => {
  52. getFuncList();
  53. }, []);
  54. return (
  55. <Transfer
  56. className="TableTransfer"
  57. showSearch
  58. titles={['待选项', '已选项']}
  59. locale={{
  60. itemUnit: '项',
  61. itemsUnit: '项',
  62. searchPlaceholder: '请输入',
  63. }}
  64. oneWay={true}
  65. onChange={onChange}
  66. onSelectChange={onSelectChange}
  67. dataSource={datasource}
  68. rowKey={(record) => record.empNo}
  69. targetKeys={targetKeys}
  70. selectedKeys={selectedKeys}
  71. filterOption={(inputValue, item) => {
  72. return item.name!.indexOf(inputValue) !== -1;
  73. }}
  74. >
  75. {({
  76. direction,
  77. filteredItems,
  78. onItemSelectAll,
  79. onItemSelect,
  80. selectedKeys: listSelectedKeys,
  81. disabled: listDisabled,
  82. }) => {
  83. // console.log({ filteredItems, listSelectedKeys,direction });
  84. const columns = direction === 'left' ? leftColumns : rightColumns;
  85. const rowSelection: TableRowSelection<TransferItem> = {
  86. getCheckboxProps: (item) => ({
  87. disabled: listDisabled || item.disabled,
  88. }),
  89. onSelectAll(selected, selectedRows) {
  90. const treeSelectedKeys = selectedRows.map(({ empNo }) => empNo);
  91. const diffKeys = selected
  92. ? difference(treeSelectedKeys, listSelectedKeys)
  93. : difference(listSelectedKeys, treeSelectedKeys);
  94. onItemSelectAll(diffKeys as string[], selected);
  95. },
  96. onSelect({ empNo }, selected) {
  97. onItemSelect(empNo as string, selected);
  98. },
  99. selectedRowKeys: listSelectedKeys,
  100. };
  101. return (
  102. <KCIMTable
  103. rowSelection={rowSelection}
  104. columns={columns as TransferItem[]}
  105. dataSource={filteredItems}
  106. size="small"
  107. bordered={false}
  108. rowKey={'empNo'}
  109. pagination={{
  110. showTitle: false,
  111. pageSize: 9,
  112. showLessItems: false,
  113. simple: true,
  114. showTotal: () => false,
  115. }}
  116. tableAlertRender={false}
  117. style={{ pointerEvents: listDisabled ? 'none' : undefined }}
  118. onRow={({ empNo, disabled: itemDisabled }) => ({
  119. onClick: () => {
  120. if (itemDisabled || listDisabled) return;
  121. onItemSelect(
  122. empNo as string,
  123. !listSelectedKeys.includes(empNo as string),
  124. );
  125. },
  126. })}
  127. />
  128. );
  129. }}
  130. </Transfer>
  131. );
  132. },
  133. );
  134. export default TableTransfer;