import React, { useEffect, useState } from "react"; import { Modal, Table, Button, Checkbox, Row, Col, Input, Select, Form, Space, message } from "antd"; import { getSupplierCategoryPage } from '../services'; const { Option } = Select; interface Supplier { id: number; supplierId: string; categoryId: string; supplierName: string; unit: string; // 准入部门 accessTime: string; // 准入时间 categoryName: string; // 准入品类 lastEval: string; // 最近一次评价 lastEvalDate: string; // 评价时间 } interface SupplierSelectModalProps { visible: boolean; selectedSuppliers: Supplier[]; onOk: (suppliers: Supplier[]) => void; onCancel: () => void; } const SupplierSelectModal: React.FC = ({ visible, selectedSuppliers, onOk, onCancel, }) => { const [form] = Form.useForm(); const [leftSelected, setLeftSelected] = useState([]); const [rightSelected, setRightSelected] = useState([]); const [rightData, setRightData] = useState([]); const [data, setData] = useState([]); const [pagination, setPagination] = useState({ current: 1, pageSize: 5, total: 0 }); const [loading, setLoading] = useState(false); useEffect(() => { if (visible) { setRightData(selectedSuppliers || []); fetchData(); } }, [visible]); const fetchData = async (params: any = {}, pageNo = 1, pageSize = 5) => { setLoading(true); try { const res = await getSupplierCategoryPage({ ...params, pageNo, pageSize }); if (res.code === 200) { setData(res.data.records); setPagination({ current: pageNo, pageSize: pageSize, total: res.data.total }); } else { message.error('获取数据失败'); } } catch { message.error('获取数据异常'); } finally { setLoading(false); } }; const handleSearch = () => { const values = form.getFieldsValue(); fetchData(values, 1, pagination.pageSize); }; const handleReset = () => { form.resetFields(); fetchData({}, 1, pagination.pageSize); }; const handleAdd = () => { const added = data.filter(s => leftSelected.includes(s.id)); const combined = [...rightData, ...added.filter(i => !rightData.some(r => r.id === i.id))]; setRightData(combined); setLeftSelected([]); }; const handleRemove = () => { setRightData(rightData.filter(i => !rightSelected.includes(i.id))); setRightSelected([]); }; const handleOk = () => { onOk(rightData); }; const columns = [ { title: 0} indeterminate={leftSelected.length > 0 && leftSelected.length < data.length} onChange={e => { setLeftSelected(e.target.checked ? data.map(i => i.id) : []); }} >全选, dataIndex: "select", width: 80, render: (_: any, record: Supplier) => ( { setLeftSelected(e.target.checked ? [...leftSelected, record.id] : leftSelected.filter(id => id !== record.id)); }} >选择 ) }, { title: "供应商名称", dataIndex: "supplierName" }, { title: "准入单位", dataIndex: "deptId" }, { title: "准入部门", dataIndex: "deptId" }, { title: "准入品类", dataIndex: "categoryName" } ]; const rightColumns = [ { title: 0} indeterminate={rightSelected.length > 0 && rightSelected.length < rightData.length} onChange={e => { setRightSelected(e.target.checked ? rightData.map(i => i.id) : []); }} >全选, dataIndex: "select", width: 80, render: (_: any, record: Supplier) => ( { setRightSelected(e.target.checked ? [...rightSelected, record.id] : rightSelected.filter(id => id !== record.id)); }} >选择 ) }, { title: "供应商名称", dataIndex: "supplierName" }, { title: "准入单位", dataIndex: "deptId" }, { title: "准入部门", dataIndex: "deptId" }, { title: "准入品类", dataIndex: "categoryName" } ]; return (
备选供应商
{ const values = form.getFieldsValue(); fetchData(values, pag.current!, pag.pageSize!); }} size="small" bordered />
已选供应商
); }; export default SupplierSelectModal;