import React, { useEffect, useState } from "react"; import { Modal, Table, Button, Checkbox, Row, Col, Input, Select, Pagination, Form, Space } from "antd"; const { Option } = Select; // mock 数据 const mockSuppliers = Array.from({ length: 25 }).map((_, i) => ({ id: i + 1, name: `XXXX${i + 1}有限公司`, unit: "散运三级单位", dept: "采购部", category: ["燃油", "润滑油", "备件"][i % 3], evalLevel: ["A", "B", "C", "D"][i % 4], })); const evalOptions = [ { value: "", label: "请选择" }, { value: "A", label: "A" }, { value: "B", label: "B" }, { value: "C", label: "C" }, { value: "D", label: "D" }, ]; const categoryOptions = [ { value: "", label: "请选择" }, { value: "燃油", label: "燃油" }, { value: "润滑油", label: "润滑油" }, { value: "备件", label: "备件" }, ]; const PAGE_SIZE = 5; const SupplierSelectModal = ({ visible, onOk, onCancel, selectedSuppliers, }) => { // 查询表单 const [form] = Form.useForm(); // 选中 const [leftSelected, setLeftSelected] = useState([]); const [rightSelected, setRightSelected] = useState([]); const [rightData, setRightData] = useState(selectedSuppliers || []); const [leftPage, setLeftPage] = useState(1); const [query, setQuery] = useState({}); // 数据过滤 const filteredSuppliers = mockSuppliers.filter(item => { const { name = "", evalLevel = "", category = "" } = query; return ( (!name || item.name.includes(name)) && (!evalLevel || item.evalLevel === evalLevel) && (!category || item.category === category) ); }); const pagedSuppliers = filteredSuppliers.slice((leftPage - 1) * PAGE_SIZE, leftPage * PAGE_SIZE); useEffect(() => { setRightData(selectedSuppliers || []); }, [selectedSuppliers, visible]); // 查询 const handleSearch = () => { setQuery(form.getFieldsValue()); setLeftPage(1); setLeftSelected([]); }; // 重置 const handleReset = () => { form.resetFields(); setQuery({}); setLeftPage(1); setLeftSelected([]); }; const leftColumns = [ { title: 0} indeterminate={leftSelected.length > 0 && leftSelected.length < pagedSuppliers.length} onChange={e => { setLeftSelected(e.target.checked ? pagedSuppliers.map(i => i.id) : []); }} >全选, dataIndex: "select", width: 60, render: (_: any, record) => ( { setLeftSelected(e.target.checked ? [...leftSelected, record.id] : leftSelected.filter(id => id !== record.id)); }} >选择 ) }, { title: "供应商名称", dataIndex: "name" }, { title: "准入单位", dataIndex: "unit" }, { title: "准入部门", dataIndex: "dept" }, { title: "准入品类", dataIndex: "category" }, { title: "最近一次评价等级", dataIndex: "evalLevel" } ]; // 已选表格 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: 60, render: (_: any, record) => ( { setRightSelected(e.target.checked ? [...rightSelected, record.id] : rightSelected.filter(id => id !== record.id)); }} >选择 ) }, { title: "供应商名称", dataIndex: "name" }, { title: "准入单位", dataIndex: "unit" }, { title: "准入部门", dataIndex: "dept" }, { title: "准入品类", dataIndex: "category" } ]; // 添加 const handleAdd = () => { const added = pagedSuppliers.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); }; return ( {/* 查询区 */}
备选供应商 {filteredSuppliers.length}
已选供应商
); }; export default SupplierSelectModal;