transform.tsx 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  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 { getResponsibilityCenterConnectableList } from "./service";
  10. import { log } from "mathjs";
  11. interface TableTransferProps extends TransferProps<TransferItem> {
  12. leftColumns: ProColumns[];
  13. rightColumns: ProColumns[];
  14. record: any,
  15. onSave: (selectedKeys: Key[], selectedRowKeys: any[]) => void;
  16. }
  17. const TableTransfer = React.forwardRef(({ leftColumns, rightColumns, record, onSave, ...restProps }: TableTransferProps, ref) => {
  18. const [_data, _set_data] = useState<any>();
  19. const [targetKeys, setTargetKeys] = useState<string[]>([]);
  20. const [datasource, set_datasource] = useState<any[]>([]);
  21. const [selectedKeys, setSelectedKeys] = useState<string[]>([]);
  22. //获取列表
  23. const getFuncList = async () => {
  24. let resp = await getResponsibilityCenterConnectableList({responsibilityId:record.responsibilityId});
  25. if (resp) {
  26. const defaultDepartments = record.departments?(
  27. record.departments.map((a:any)=>({
  28. id:a.departmentId,
  29. code:a.departmentId,
  30. departmentCode:'',
  31. departmentName:a.departmentName,
  32. departmentStatus:0
  33. }))
  34. ):[];
  35. resp = resp.map((a:any)=>({...a,code:a.id}))
  36. set_datasource([...resp,...defaultDepartments]);
  37. _set_data([...resp,...(record.departments?(record.departments):[])]);
  38. const defaultSelctedkeys = record.departments?record.departments.map((a:any)=>a.departmentId):[]
  39. setTargetKeys(defaultSelctedkeys);
  40. }
  41. }
  42. const onChange = (nextTargetKeys: string[]) => {
  43. setTargetKeys(nextTargetKeys);
  44. };
  45. const onSelectChange = (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => {
  46. //console.log('sourceSelectedKeys:', sourceSelectedKeys,'targetSelectedKeys:',targetSelectedKeys);
  47. setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);
  48. };
  49. useImperativeHandle(ref, () => ({
  50. save: async () => {
  51. const items = datasource.filter(a => targetKeys.includes(a.code));
  52. onSave(targetKeys, items);
  53. }
  54. }));
  55. useEffect(() => {
  56. getFuncList();
  57. }, [])
  58. return (
  59. <Transfer className='TableTransfer' showSearch
  60. titles={['待选项', '已选项']}
  61. locale={{
  62. itemUnit: '项',
  63. itemsUnit: '项',
  64. searchPlaceholder: '请输入',
  65. }}
  66. oneWay={false}
  67. onChange={onChange}
  68. onSelectChange={onSelectChange}
  69. dataSource={datasource}
  70. rowKey={record => record.code}
  71. targetKeys={targetKeys}
  72. selectedKeys={selectedKeys}
  73. filterOption={(inputValue, item) => {
  74. return item.departmentName!.indexOf(inputValue) !== -1
  75. }}
  76. >
  77. {({
  78. direction,
  79. filteredItems,
  80. onItemSelectAll,
  81. onItemSelect,
  82. selectedKeys: listSelectedKeys,
  83. disabled: listDisabled,
  84. }) => {
  85. // console.log({ filteredItems, listSelectedKeys,direction });
  86. const columns = direction === 'left' ? leftColumns : rightColumns;
  87. const rowSelection: TableRowSelection<TransferItem> = {
  88. getCheckboxProps: (item) => ({ disabled: listDisabled || item.disabled }),
  89. onSelectAll(selected, selectedRows) {
  90. const treeSelectedKeys = selectedRows.map(({ code }) => code);
  91. const diffKeys = selected
  92. ? difference(treeSelectedKeys, listSelectedKeys)
  93. : difference(listSelectedKeys, treeSelectedKeys);
  94. onItemSelectAll(diffKeys as string[], selected);
  95. },
  96. onSelect({ code }, selected) {
  97. onItemSelect(code 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={'code'}
  109. pagination={{ showTitle: false, pageSize: 9, showLessItems: false, simple: true, showTotal: () => false }}
  110. tableAlertRender={false}
  111. style={{ pointerEvents: listDisabled ? 'none' : undefined }}
  112. onRow={({ code, disabled: itemDisabled }) => ({
  113. onClick: () => {
  114. if (itemDisabled || listDisabled) return;
  115. onItemSelect(code as string, !listSelectedKeys.includes(code as string));
  116. },
  117. })}
  118. />
  119. );
  120. }}
  121. </Transfer>
  122. )
  123. });
  124. export default TableTransfer