import { Input, Modal, Table, TableColumnsType, TablePaginationConfig, Button, Select, } from "antd"; import React, { useRef, useState } from "react"; import { useRequest } from "ahooks"; import { SearchOutlined } from "@ant-design/icons"; export default function SelectModal({ api, columns, onSuccess, onChange, defaultParams, value, disabled, }: { api: (params: any) => Promise; columns: TableColumnsType; onSuccess: (data: any, params: any[]) => any[]; onChange: (selectedRows: any[]) => void; defaultParams?: [params: any]; value: any; disabled: boolean; }) { const [open, setOpen] = React.useState(false); const [searchKey, setSearchKey] = useState(""); const [selectedRowRows, setSelectedRowRows] = React.useState([]); const [dataSource, setDataSource] = React.useState([]); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, pageSizeOptions: ["10", "20", "30", "40"], }); const dataRef = useRef([]); const { loading, run } = useRequest(api, { defaultParams, onSuccess(data, params) { const result = onSuccess(data, params); setDataSource(result); dataRef.current = result; }, }); const handleSlected = (_keys: React.Key[], rows: any[]) => { setSelectedRowRows(rows); }; const handleChange = (pagination: TablePaginationConfig) => { setPagination(pagination); if (defaultParams) { run({ currentPage: pagination.current, pageSize: pagination.pageSize, }); } }; const handleSearch = () => { setDataSource(dataRef.current.filter((item) => item.name.includes(searchKey))) } const handleOk = () => { onChange(selectedRowRows); setOpen(false); }; return ( <> } closable={false} > } placeholder="关键字搜索" value={searchKey} onChange={(e) => setSearchKey(e.target.value)} onBlur={handleSearch} onPressEnter={handleSearch} />