import usePagination from '@/hooks/usePagination'; import { getListApi } from '@/pages/capital/StandardMange/api'; import { Button, Input, Modal, Popover, Row, Table, Tag } from 'antd'; import type { ColumnsType } from 'antd/es/table'; import { debounce } from 'lodash'; import React, { useEffect, useState } from 'react'; import { AssetTypeEnum } from '@/pages/capital/entity'; interface Props { visible: boolean; onCancel: () => void; onChange?: Function; value?: any; multiple?: boolean; } const columns: ColumnsType = [ { title: '物品名称', dataIndex: 'name', render: (text: string, row: StanderList.ListVO) => { return ( <>
{text}
{row.type && AssetTypeEnum[row.type]} ); } }, { title: '物品编码', dataIndex: 'code', }, { title: '规格型号', dataIndex: 'specList', render: (text, record) => { const items = (text || []).map(i => `${i.standardSpecName}:${i.specDetails}`); return ( {items.join(';')}} >
{items.slice(0, 3).map((i: string) => { return (

{i}

); })} {items.length > 3 ? (...) : null}
); }, }]; const SelectGoodsTable = (props: Props) => { const { visible, onCancel, onChange, multiple = true, value = [] } = props; const { list, paginationConfig, loading, setLoading, setParams } = usePagination(getListApi, { status: 1 }); const [selectedRow, setSelectedRow] = useState([]); useEffect(() => { if (value.length > 0) { setSelectedRow([...value]); } }, [value]); const start = () => { setLoading(true); // ajax request after empty completing setTimeout(() => { setSelectedRow([]); setLoading(false); }, 1000); }; function saveDate() { console.log("🚀 ~ file: SelectGoodsTable.tsx:80 ~ saveDate ~ selectedRow:", selectedRow); onChange && onChange(selectedRow); onCancel(); } const onFilter = debounce((v: string) => { setParams({ keywords: v }, true); }, 600); const rowSelection = { type: multiple ? "checkbox" : "radio", selectedRowKeys: selectedRow.map(row => row.code), onSelect: (row: any, _selected: boolean) => { const index = selectedRow.findIndex((_row) => _row.code == row.code); if (!multiple) { setSelectedRow([row]); return; } if (_selected) { selectedRow.unshift(row); } else if (index > -1) { selectedRow.splice(index, 1); } setSelectedRow([...selectedRow]); }, onSelectAll: (selected, selectedRows, changeRows) => { const changedKeys = changeRows.map((row) => row.code); let newData = [...selectedRow]; // 全选 if (selected) { // 过滤掉已选的 newData = selectedRow.concat(changeRows.filter((row: any) => !selectedRow.some((item) => item.code == row.code))); } else { // 全不选 - 去掉已选的 newData = selectedRow.filter((row) => !changedKeys.includes(row.code)); } setSelectedRow(newData); }, }; const hasSelected = selectedRow.length > 0; return ( onFilter(e.target.value)} /> {!!multiple && (
{hasSelected ? `已选择 ${selectedRow.length} 项` : ''}
)}
); }; export default SelectGoodsTable;