diff --git a/furniture-3d-system/public/product-archive-guide/overview.png b/furniture-3d-system/public/product-archive-guide/overview.png index 34b1ba1b..eb2a2b9f 100644 Binary files a/furniture-3d-system/public/product-archive-guide/overview.png and b/furniture-3d-system/public/product-archive-guide/overview.png differ diff --git a/furniture-3d-system/public/product-archive-guide/toolbar-1.png b/furniture-3d-system/public/product-archive-guide/toolbar-1.png index ed8a469e..2ac8af80 100644 Binary files a/furniture-3d-system/public/product-archive-guide/toolbar-1.png and b/furniture-3d-system/public/product-archive-guide/toolbar-1.png differ diff --git a/furniture-3d-system/src/app/supply-chain/database/product-archive/ProductArchiveCodeBatchDialog.tsx b/furniture-3d-system/src/app/supply-chain/database/product-archive/ProductArchiveCodeBatchDialog.tsx new file mode 100644 index 00000000..89bf7ab2 --- /dev/null +++ b/furniture-3d-system/src/app/supply-chain/database/product-archive/ProductArchiveCodeBatchDialog.tsx @@ -0,0 +1,72 @@ +'use client' + +import { useMemo, useState } from 'react' +import Modal from '@/components/ui/Modal' +import { ARCHIVE_CODE_BATCH_LIMIT, parseArchiveCodeQuery } from './archiveCodeQuery' + +export function ProductArchiveCodeBatchDialog({ label, initialText, onConfirm, onCancel }: { + label: string + initialText: string + onConfirm: (values: string[]) => void + onCancel: () => void +}) { + const [text, setText] = useState(initialText) + const { values, error } = useMemo(() => parseArchiveCodeQuery(text), [text]) + + const submit = () => { + if (error || values.length === 0) return + onConfirm(values) + } + + return ( + + + + + }> +
+ + 每行一个,最多 {ARCHIVE_CODE_BATCH_LIMIT} 个。回车查询,Shift+回车换行。 + +