diff options
| author | joonhoekim <26rote@gmail.com> | 2025-11-12 11:07:00 +0900 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-11-12 11:07:00 +0900 |
| commit | bbb13a1ea700f3be7ac12459b63804b843e93dc4 (patch) | |
| tree | 872e4787b7467a7e66cae77ca0e1007b58b24dfb /lib/swp | |
| parent | 74d8f31dd5b23f458cb14742d4d23caa90bfd86f (diff) | |
(김준회) 업로드 파일명 파싱시 OWN_DOC_NO 로 검증하도록 변경
Diffstat (limited to 'lib/swp')
| -rw-r--r-- | lib/swp/table/swp-table-toolbar.tsx | 8 | ||||
| -rw-r--r-- | lib/swp/table/swp-upload-validation-dialog.tsx | 19 |
2 files changed, 14 insertions, 13 deletions
diff --git a/lib/swp/table/swp-table-toolbar.tsx b/lib/swp/table/swp-table-toolbar.tsx index 0fd29fd3..add69666 100644 --- a/lib/swp/table/swp-table-toolbar.tsx +++ b/lib/swp/table/swp-table-toolbar.tsx @@ -38,7 +38,7 @@ interface SwpTableToolbarProps { vendorCode?: string; droppedFiles?: File[]; onFilesProcessed?: () => void; - documents?: Array<{ DOC_NO: string }>; // 업로드 권한 검증용 문서 목록 + documents?: Array<{ OWN_DOC_NO: string | null }>; // 업로드 권한 검증용 문서 목록 (OWN_DOC_NO 기준) userId?: string; // 파일 취소 시 필요 } @@ -81,10 +81,12 @@ export function SwpTableToolbar({ const [showValidationDialog, setShowValidationDialog] = useState(false); /** - * 업로드 가능한 문서번호 목록 추출 + * 업로드 가능한 문서번호 목록 추출 (OWN_DOC_NO 기준) */ const availableDocNos = useMemo(() => { - return documents.map(doc => doc.DOC_NO); + return documents + .map(doc => doc.OWN_DOC_NO) + .filter((ownDocNo): ownDocNo is string => ownDocNo !== null && ownDocNo !== undefined); }, [documents]); /** diff --git a/lib/swp/table/swp-upload-validation-dialog.tsx b/lib/swp/table/swp-upload-validation-dialog.tsx index 2d17e041..8e786c8b 100644 --- a/lib/swp/table/swp-upload-validation-dialog.tsx +++ b/lib/swp/table/swp-upload-validation-dialog.tsx @@ -12,7 +12,6 @@ import { import { Alert, AlertDescription } from "@/components/ui/alert"; import { Badge } from "@/components/ui/badge"; import { CheckCircle2, XCircle, AlertCircle, Upload } from "lucide-react"; -import { ScrollArea } from "@/components/ui/scroll-area"; interface FileValidationResult { file: File; @@ -39,7 +38,7 @@ interface SwpUploadValidationDialogProps { /** * 파일명 검증 함수 (클라이언트 사이드) - * 형식: [DOC_NO]_[REV_NO]_[STAGE].[확장자] 또는 [DOC_NO]_[REV_NO]_[STAGE]_[자유-파일명].[확장자] + * 형식: [OWN_DOC_NO]_[REV_NO]_[STAGE].[확장자] 또는 [OWN_DOC_NO]_[REV_NO]_[STAGE]_[자유-파일명].[확장자] * 자유 파일명은 선택사항이며, 포함될 경우 언더스코어를 포함할 수 있음 * @param fileName 검증할 파일명 * @param availableDocNos 업로드 가능한 문서번호 목록 (선택) @@ -76,15 +75,15 @@ export function validateFileName( // 언더스코어로 분리 const parts = nameWithoutExt.split("_"); - // 최소 3개 파트 필요: docNo, revNo, stage (fileName은 선택사항) + // 최소 3개 파트 필요: ownDocNo, revNo, stage (fileName은 선택사항) if (parts.length < 3) { return { valid: false, - error: `언더스코어(_)가 최소 2개 있어야 합니다 (현재: ${parts.length - 1}개). 형식: [DOC_NO]_[REV_NO]_[STAGE].[확장자]`, + error: `언더스코어(_)가 최소 2개 있어야 합니다 (현재: ${parts.length - 1}개). 형식: [OWN_DOC_NO]_[REV_NO]_[STAGE].[확장자]`, }; } - // 앞에서부터 3개는 고정: docNo, revNo, stage + // 앞에서부터 3개는 고정: ownDocNo, revNo, stage const ownDocNo = parts[0]; const revNo = parts[1]; const stage = parts[2]; @@ -96,7 +95,7 @@ export function validateFileName( if (!ownDocNo || ownDocNo.trim() === "") { return { valid: false, - error: "문서번호(DOC_NO)가 비어있습니다", + error: "문서번호(OWN_DOC_NO)가 비어있습니다", }; } @@ -232,7 +231,7 @@ export function SwpUploadValidationDialog({ )} {/* 파일 목록 */} - <ScrollArea className="h-[300px] rounded-md border p-4"> + <div className="max-h-[400px] overflow-auto rounded-md border p-4"> <div className="space-y-3"> {/* 검증 성공 파일 */} {validFiles.length > 0 && ( @@ -310,7 +309,7 @@ export function SwpUploadValidationDialog({ </div> )} </div> - </ScrollArea> + </div> {/* 형식 안내 */} <div className="rounded-lg bg-blue-50 dark:bg-blue-950/30 border border-blue-200 dark:border-blue-800 p-3"> @@ -318,13 +317,13 @@ export function SwpUploadValidationDialog({ 올바른 파일명 형식 </div> <code className="text-xs text-blue-700 dark:text-blue-300"> - [DOC_NO]_[REV_NO]_[STAGE].[확장자] + [OWN_DOC_NO]_[REV_NO]_[STAGE].[확장자] </code> <div className="text-xs text-blue-600 dark:text-blue-400 mt-1"> 예: VD-DOC-001_01_IFA.pdf </div> <div className="text-xs text-blue-600 dark:text-blue-400 mt-1"> - ※ 선택사항: [DOC_NO]_[REV_NO]_[STAGE]_[파일명].[확장자] (파일명 추가 가능) + ※ 선택사항: [OWN_DOC_NO]_[REV_NO]_[STAGE]_[파일명].[확장자] (파일명 추가 가능) </div> <div className="text-xs text-blue-600 dark:text-blue-400 mt-1"> ※ 파일명에는 언더스코어(_)가 포함될 수 있습니다. |
