tableSelector.tsx 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. import React, { useEffect, useState } from "react";
  2. import { Input, Switch } from 'antd'
  3. import { KCIMTable } from "@/components/KCIMTable";
  4. import { createFromIconfontCN } from "@ant-design/icons";
  5. import { getCheckData } from "../checkGroupMana/service";
  6. import { ModalForm, ProColumns } from "@ant-design/pro-components";
  7. import { getData } from "../empMana/service";
  8. // import './style.less';
  9. interface TableSelecterProps {
  10. record: any
  11. }
  12. const IconFont = createFromIconfontCN({
  13. scriptUrl: '',
  14. });
  15. const TableSelecter = ({ tableSelecterType, record, open, title, onVisibleChange, rowKey = 'id', request, onFinish }: {
  16. record: any, open: boolean, title: string, onVisibleChange: (bool: boolean) => void,
  17. tableSelecterType:string,
  18. rowKey?: string, request?: (params: any) => Promise<any>, onFinish?: (selectedKeys: React.Key[], selectedRows: any[]) => void
  19. }) => {
  20. const Table = React.forwardRef(({ }: TableSelecterProps, ref) => {
  21. const [datasource, set_datasource] = useState<any[]>([]);
  22. const [selectedKeys, setSelectedKeys] = useState<React.Key[]>([]);
  23. const [selectedRows, set_selectedRows] = useState<any[]>([]);
  24. const [showList, set_showList] = useState<any[]>([]);
  25. const empColumns: ProColumns[] = [
  26. {
  27. title: 'ID',
  28. dataIndex: 'id',
  29. },
  30. {
  31. title: '姓名',
  32. dataIndex: 'name',
  33. },
  34. ];
  35. const checkGroupColumns: ProColumns[] = [
  36. {
  37. title: 'ID',
  38. dataIndex: 'id',
  39. },
  40. {
  41. title: '查核组名',
  42. dataIndex: 'id',
  43. },
  44. {
  45. title: '是否查核组长',
  46. dataIndex: 'flag',
  47. renderText(flag, record, index, action) {
  48. return <Switch size='small' checked={flag == '1'} onChange={(bool) => onSwitchChange(bool, record)} />
  49. },
  50. }
  51. ];
  52. const onSwitchChange = (bool: boolean, record: any) => {
  53. const newData = datasource.map((item) => {
  54. if (item.id == record.id) {
  55. return {
  56. ...item,
  57. flag: bool
  58. }
  59. } else {
  60. return item
  61. }
  62. });
  63. const newShowList = showList.map((item) => {
  64. if (item.id == record.id) {
  65. return {
  66. ...item,
  67. flag: bool
  68. }
  69. } else {
  70. return item
  71. }
  72. });
  73. // console.log({newData,newShowList});
  74. set_datasource([...newData]);
  75. set_showList([...newShowList]);
  76. }
  77. const onSelectChange = (newSelectedRowKeys: React.Key[], selectedRows: any) => {
  78. setSelectedKeys([...newSelectedRowKeys]);
  79. };
  80. const saveHandle = async () => {
  81. onFinish && onFinish(selectedKeys, selectedRows);
  82. }
  83. const getTableData = async () => {
  84. const resp = await getData({
  85. current: 1,
  86. pageSize: 500
  87. });
  88. if (resp) {
  89. set_showList(resp.list);
  90. set_datasource([...datasource, ...resp.list]);
  91. }
  92. return Promise.resolve([]);
  93. }
  94. useEffect(()=>{
  95. console.log({record});
  96. },[record]);
  97. useEffect(() => {
  98. getTableData()
  99. }, [])
  100. return (
  101. <div >
  102. <Input placeholder={'请输入名称'} allowClear
  103. suffix={
  104. <IconFont style={{ color: '#99A6BF' }} type="iconsousuo" />
  105. }
  106. style={{ marginBottom: 8 }}
  107. onChange={(e) => {
  108. if (e.target.value.length != 0) {
  109. const result = datasource.filter(item => item.name.indexOf(e.target.value) != -1);
  110. set_showList(result);
  111. } else {
  112. set_showList(datasource);
  113. }
  114. }}
  115. />
  116. <KCIMTable columns={tableSelecterType == 'EMP' ? empColumns : checkGroupColumns}
  117. options={{
  118. density: true,
  119. setting: {
  120. listsHeight: 100,
  121. },
  122. }}
  123. rowKey={rowKey}
  124. scroll={{ y: 400 }}
  125. tableAlertRender={false}
  126. rowSelection={{
  127. // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
  128. // 注释该行则默认不显示下拉选项
  129. // selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
  130. onChange: onSelectChange,
  131. }}
  132. pagination={{ showTitle: false, showSizeChanger: true }}
  133. dataSource={showList}
  134. />
  135. <div className='footer'>
  136. <span className='cancel' onClick={() => close()}>取消</span>
  137. <span className='ok' onClick={() => saveHandle()}>{`确认(${selectedKeys.length > 0 && selectedKeys.length})`}</span>
  138. </div>
  139. </div>
  140. )
  141. });
  142. const close = () => {
  143. onVisibleChange && onVisibleChange(false);
  144. }
  145. return (
  146. <ModalForm className="TableSelecter" title={title} width={600} submitter={{
  147. render: false
  148. }} open={open} modalProps={{
  149. closable: false,
  150. }}>
  151. <Table
  152. // ref={tableSelecterRef}
  153. record={undefined}
  154. ></Table>
  155. </ModalForm>
  156. )
  157. }
  158. export default TableSelecter