From f4b1a770184e8647e0b3042a52a1bcc6f9cf00ce Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Wed, 12 Nov 2025 17:49:57 +0900 Subject: (김준회) SWP: 파일 업로드시 Stage 검증 추가, DOC_CLASS 관리 단순화 (코드 제거), DOC_CLASS 추가시 검증(A-Z0-9) 처리 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/swp/table/swp-upload-validation-dialog.tsx | 55 ++++++++++++++++++++------ 1 file changed, 44 insertions(+), 11 deletions(-) (limited to 'lib/swp/table/swp-upload-validation-dialog.tsx') diff --git a/lib/swp/table/swp-upload-validation-dialog.tsx b/lib/swp/table/swp-upload-validation-dialog.tsx index 8e786c8b..ef48f0c6 100644 --- a/lib/swp/table/swp-upload-validation-dialog.tsx +++ b/lib/swp/table/swp-upload-validation-dialog.tsx @@ -43,11 +43,15 @@ interface SwpUploadValidationDialogProps { * @param fileName 검증할 파일명 * @param availableDocNos 업로드 가능한 문서번호 목록 (선택) * @param isVendorMode 벤더 모드인지 여부 (true인 경우 문서번호 검증 필수) + * @param docNoToDocTypeMap 문서번호 → DOC_TYPE 매핑 (Stage 검증용) + * @param documentClassStages Document Class → 허용 Stage 목록 매핑 */ export function validateFileName( fileName: string, availableDocNos?: string[], - isVendorMode?: boolean + isVendorMode?: boolean, + docNoToDocTypeMap?: Record, + documentClassStages?: Record ): { valid: boolean; parsed?: { @@ -134,12 +138,36 @@ export function validateFileName( } } + // Stage 검증 (DOC_TYPE별 허용 Stage 확인) + const trimmedDocNo = ownDocNo.trim(); + const trimmedStage = stage.trim(); + + if (docNoToDocTypeMap && documentClassStages) { + const docType = docNoToDocTypeMap[trimmedDocNo]; + + if (docType) { + const allowedStages = documentClassStages[docType]; + + if (allowedStages && allowedStages.length > 0) { + // 허용된 Stage 목록이 있는 경우에만 검증 + if (!allowedStages.includes(trimmedStage)) { + return { + valid: false, + error: `문서 '${trimmedDocNo}'의 Document Class '${docType}'에서 Stage '${trimmedStage}'는 허용되지 않습니다. 허용된 Stage: ${allowedStages.join(", ")}`, + }; + } + } + // allowedStages가 비어있으면 Stage 검증을 스킵 (설정되지 않은 경우) + } + // docType이 없으면 Stage 검증을 스킵 (문서 정보가 없는 경우) + } + return { valid: true, parsed: { - ownDocNo: ownDocNo.trim(), + ownDocNo: trimmedDocNo, revNo: revNo.trim(), - stage: stage.trim(), + stage: trimmedStage, fileName: customFileName.trim(), extension, }, @@ -314,7 +342,7 @@ export function SwpUploadValidationDialog({ {/* 형식 안내 */}
- 올바른 파일명 형식 + 📋 올바른 파일명 형식
[OWN_DOC_NO]_[REV_NO]_[STAGE].[확장자] @@ -329,13 +357,18 @@ export function SwpUploadValidationDialog({ ※ 파일명에는 언더스코어(_)가 포함될 수 있습니다.
{isVendorMode && ( -
- {availableDocNos.length > 0 ? ( - <>ℹ️ 업로드 가능한 문서: {availableDocNos.length}개 - ) : ( - <>⚠️ 할당된 문서가 없습니다 - )} -
+ <> +
+ {availableDocNos.length > 0 ? ( + <>ℹ️ 업로드 가능한 문서: {availableDocNos.length}개 + ) : ( + <>⚠️ 할당된 문서가 없습니다 + )} +
+
+ ⚠️ 각 문서의 Document Class에 정의된 Stage만 사용할 수 있습니다. +
+ )} -- cgit v1.2.3