transform.tsx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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 { log } from "mathjs";
  10. import { getHasConnectedHisItemDicListReq, getHisItemDicListReq } from "./service";
  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. const [queryCondition,set_queryCondition] = useState('');
  23. //获取列表
  24. const getFuncList = async (params:any) => {
  25. let resp = await getHisItemDicListReq({pageSize:500,current:1,...params});
  26. if (resp) {
  27. set_datasource([...resp.list]);
  28. }
  29. }
  30. const getDefaultData = async ()=>{
  31. const resp = await getHasConnectedHisItemDicListReq({qualificationId:record.id});
  32. if(resp){
  33. const defaultkeys = resp.list.map((a:any)=>`${a.id}`);
  34. setTargetKeys([...targetKeys,...defaultkeys]);
  35. }
  36. }
  37. const onChange = (nextTargetKeys: string[]) => {
  38. setTargetKeys(nextTargetKeys);
  39. };
  40. const onSelectChange = (sourceSelectedKeys: string[], targetSelectedKeys: string[]) => {
  41. //console.log('sourceSelectedKeys:', sourceSelectedKeys,'targetSelectedKeys:',targetSelectedKeys);
  42. setSelectedKeys([...sourceSelectedKeys, ...targetSelectedKeys]);
  43. };
  44. useImperativeHandle(ref, () => ({
  45. save: async () => {
  46. const items = datasource.filter(a => targetKeys.includes(a.hisItemId));
  47. onSave(targetKeys, items);
  48. }
  49. }));
  50. useEffect(() => {
  51. getFuncList({});
  52. getDefaultData();
  53. }, [])
  54. return (
  55. <Transfer className='TableTransfer' showSearch
  56. titles={['待选项', '已选项']}
  57. locale={{
  58. itemUnit: '项',
  59. itemsUnit: '项',
  60. searchPlaceholder: '医嘱编码、医嘱名称',
  61. }}
  62. oneWay={false}
  63. onChange={onChange}
  64. onSelectChange={onSelectChange}
  65. dataSource={datasource}
  66. rowKey={record => record.hisItemId}
  67. targetKeys={targetKeys}
  68. selectedKeys={selectedKeys}
  69. filterOption={(inputValue, item) => {
  70. return (item.hisItemName!.indexOf(inputValue) !== -1)||(item.hisItemId!.indexOf(inputValue) !== -1)
  71. }}
  72. >
  73. {({
  74. direction,
  75. filteredItems,
  76. onItemSelectAll,
  77. onItemSelect,
  78. selectedKeys: listSelectedKeys,
  79. disabled: listDisabled,
  80. }) => {
  81. // console.log({ filteredItems, listSelectedKeys,direction });
  82. const columns = direction === 'left' ? leftColumns : rightColumns;
  83. const rowSelection: TableRowSelection<TransferItem> = {
  84. getCheckboxProps: (item) => ({ disabled: listDisabled || item.disabled }),
  85. onSelectAll(selected, selectedRows) {
  86. const treeSelectedKeys = selectedRows.map(({ hisItemId }) => hisItemId);
  87. const diffKeys = selected
  88. ? difference(treeSelectedKeys, listSelectedKeys)
  89. : difference(listSelectedKeys, treeSelectedKeys);
  90. onItemSelectAll(diffKeys as string[], selected);
  91. },
  92. onSelect({ hisItemId }, selected) {
  93. onItemSelect(hisItemId as string, selected);
  94. },
  95. selectedRowKeys: listSelectedKeys,
  96. };
  97. return (
  98. <KCIMTable
  99. rowSelection={rowSelection}
  100. columns={columns as TransferItem[]}
  101. dataSource={filteredItems}
  102. size="small"
  103. tableStyle={{border:'none'}}
  104. bordered={false}
  105. rowKey={'hisItemId'}
  106. pagination={{ showTitle: false, pageSize: 9, showLessItems: false, simple: true, showTotal: () => false }}
  107. tableAlertRender={false}
  108. style={{ pointerEvents: listDisabled ? 'none' : undefined }}
  109. onRow={({ code, disabled: itemDisabled }) => ({
  110. onClick: () => {
  111. if (itemDisabled || listDisabled) return;
  112. onItemSelect(code as string, !listSelectedKeys.includes(code as string));
  113. },
  114. })}
  115. />
  116. );
  117. }}
  118. </Transfer>
  119. )
  120. });
  121. export default TableTransfer