diff --git a/furniture-3d-system/src/app/supply-chain/management/custom-table/CustomTableView.test.tsx b/furniture-3d-system/src/app/supply-chain/management/custom-table/CustomTableView.test.tsx index a295669f..a2b44178 100644 --- a/furniture-3d-system/src/app/supply-chain/management/custom-table/CustomTableView.test.tsx +++ b/furniture-3d-system/src/app/supply-chain/management/custom-table/CustomTableView.test.tsx @@ -273,7 +273,7 @@ describe('限价管理', () => { expect(screen.getByRole('button', { name: '筛选运营负责人' })).toBeInTheDocument() expect((screen.getByRole('columnheader', { name: /^组合编码/ }) as HTMLElement).style.top).toBe('0px') fireEvent.click(screen.getByRole('button', { name: '筛选组合编码', exact: true })) - expect(await screen.findByRole('button', { name: '批量查询' })).toBeInTheDocument() + expect(await screen.findByRole('textbox', { name: '搜索组合编码' })).toBeInTheDocument() const columnLabels = screen.getAllByRole('columnheader').map((cell) => (cell.textContent ?? '').replace(/[↕↑↓▾]/g, '').trim()) expect(columnLabels.indexOf('运营负责人')).toBe(columnLabels.indexOf('组合编码') + 1) expect(screen.queryByRole('button', { name: '导出明细' })).not.toBeInTheDocument() @@ -304,11 +304,9 @@ describe('限价管理', () => { fireEvent.click(screen.getByRole('button', { name: '筛选条码', exact: true })) const dialog = await screen.findByRole('dialog', { name: '筛选条码' }) - fireEvent.click(within(dialog).getByRole('button', { name: '批量查询' })) - fireEvent.change(within(dialog).getByRole('textbox', { name: '批量查询条码' }), { - target: { value: 'BAR-001\nBAR-002,BAR-003' }, - }) - fireEvent.click(within(dialog).getByRole('button', { name: '查询' })) + const search = within(dialog).getByRole('textbox', { name: '搜索条码' }) + fireEvent.change(search, { target: { value: 'BAR-001 BAR-002 BAR-003' } }) + fireEvent.keyDown(search, { key: 'Enter' }) await waitFor(() => { const latestProductRequest = (global.fetch as jest.Mock).mock.calls diff --git a/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSelect.tsx b/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSelect.tsx index 74da4fba..01b32215 100644 --- a/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSelect.tsx +++ b/furniture-3d-system/src/app/supply-chain/management/custom-table/LimitFilterSelect.tsx @@ -31,8 +31,6 @@ export function FilterOptionPanel({ field, selected, onChange, contextFilters, o const [search, setSearch] = useState('') const [options, setOptions] = useState(field.fixedOptions ?? []) const [loading, setLoading] = useState(false) - const [batchOpen, setBatchOpen] = useState(false) - const [batchText, setBatchText] = useState('') useEffect(() => { if (field.fixedOptions) return @@ -92,13 +90,12 @@ export function FilterOptionPanel({ field, selected, onChange, contextFilters, o ) } - const applyBatch = () => { - const values = parseBatchFilterValues(batchText) + const applyBatch = (raw: string) => { + const values = parseBatchFilterValues(raw) .map((value) => value === '空值' ? PRODUCT_ARCHIVE_EMPTY_FILTER_VALUE : value) if (!values.length) return onChange([...new Set([...selected, ...values])].slice(0, 20000)) - setBatchText('') - setBatchOpen(false) + setSearch('') } return ( @@ -106,25 +103,21 @@ export function FilterOptionPanel({ field, selected, onChange, contextFilters, o setSearch(event.target.value)} + onKeyDown={(event) => { + if (event.key !== 'Enter') return + event.preventDefault() + applyBatch(search) + }} + onPaste={(event) => { + const text = event.clipboardData.getData('text') + if (parseBatchFilterValues(text).length <= 1) return + event.preventDefault() + applyBatch(text) + }} /> - {batchOpen && ( -
-