From 4eb7532f822c821fb6b69bf103bd075fefba769b Mon Sep 17 00:00:00 2001 From: dujinkim Date: Tue, 15 Jul 2025 10:07:09 +0000 Subject: (대표님) 20250715 협력사 정기평가, spreadJS, roles 서비스에 함수 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../add-basic-contract-template-dialog.tsx | 406 +++++++++++---------- 1 file changed, 209 insertions(+), 197 deletions(-) (limited to 'lib/basic-contract') diff --git a/lib/basic-contract/template/add-basic-contract-template-dialog.tsx b/lib/basic-contract/template/add-basic-contract-template-dialog.tsx index 3a83d50f..c88819e4 100644 --- a/lib/basic-contract/template/add-basic-contract-template-dialog.tsx +++ b/lib/basic-contract/template/add-basic-contract-template-dialog.tsx @@ -73,9 +73,12 @@ const templateFormSchema = z.object({ status: z.enum(["ACTIVE", "DISPOSED"]).default("ACTIVE"), }).refine((data) => { // 적어도 하나의 적용 범위는 선택되어야 함 - const hasAnyScope = BUSINESS_UNITS.some(unit => - data[unit.key as keyof typeof data] as boolean - ); + const scopeFields = [ + 'shipBuildingApplicable', 'windApplicable', 'pcApplicable', 'nbApplicable', + 'rcApplicable', 'gyApplicable', 'sysApplicable', 'infraApplicable' + ]; + + const hasAnyScope = scopeFields.some(field => data[field as keyof typeof data] === true); return hasAnyScope; }, { message: "적어도 하나의 적용 범위를 선택해야 합니다.", @@ -274,42 +277,85 @@ export function AddTemplateDialog() { 템플릿 추가 - - + + {/* 고정된 헤더 */} + 새 기본계약서 템플릿 추가 템플릿 정보를 입력하고 계약서 파일을 업로드하세요. * 표시된 항목은 필수 입력사항입니다. -
- - {/* 기본 정보 */} - - - 기본 정보 - - -
+ + {/* 스크롤 가능한 컨텐츠 영역 */} +
+ + + {/* 기본 정보 */} + + + 기본 정보 + + +
+ ( + + + 템플릿 코드 * + + + field.onChange(e.target.value.toUpperCase())} + /> + + + 영문 대문자, 숫자, '_', '-'만 사용 가능 + + + + )} + /> + + ( + + 리비전 + + field.onChange(parseInt(e.target.value) || 1)} + /> + + + 템플릿 버전 (기본값: 1) + + + + )} + /> +
+ ( - 템플릿 코드 * + 템플릿 이름 * - field.onChange(e.target.value.toUpperCase())} - /> + - - 영문 대문자, 숫자, '_', '-'만 사용 가능 - )} @@ -317,191 +363,157 @@ export function AddTemplateDialog() { ( - - 리비전 + +
+ 법무검토 필요 + + 법무팀 검토가 필요한 템플릿인지 설정 + +
- field.onChange(parseInt(e.target.value) || 1)} + - - 템플릿 버전 (기본값: 1) - -
)} /> -
- - ( - - - 템플릿 이름 * - - - - - - - )} - /> + + - ( - -
- 법무검토 필요 - - 법무팀 검토가 필요한 템플릿인지 설정 - -
- - - -
+ {/* 적용 범위 */} + + + + 적용 범위 * + + + 이 템플릿이 적용될 사업부를 선택하세요. ({selectedScopesCount}개 선택됨) + + + +
+ + +
+ + + +
+ {BUSINESS_UNITS.map((unit) => ( + ( + + + + +
+ + {unit.label} + +
+
+ )} + /> + ))} +
+ + {form.formState.errors.shipBuildingApplicable && ( +

+ {form.formState.errors.shipBuildingApplicable.message} +

)} - /> -
-
+ + - {/* 적용 범위 */} - - - 적용 범위 - - 이 템플릿이 적용될 사업부를 선택하세요. ({selectedScopesCount}개 선택됨) - - - -
- + + 파일 업로드 + + + ( + + + 계약서 파일 * + + + + + + + {selectedFile ? selectedFile.name : "PDF 파일을 여기에 드래그하세요"} + + + {selectedFile + ? `파일 크기: ${(selectedFile.size / (1024 * 1024)).toFixed(2)} MB` + : "또는 클릭하여 PDF 파일을 선택하세요 (최대 100MB)"} + + + + + + + + )} /> - -
- - - -
- {BUSINESS_UNITS.map((unit) => ( - ( - - - - -
- - {unit.label} - -
-
- )} - /> - ))} -
- - {form.formState.errors.shipBuildingApplicable && ( -

- {form.formState.errors.shipBuildingApplicable.message} -

- )} -
-
- - {/* 파일 업로드 */} - - - 파일 업로드 - - - ( - - - 계약서 파일 * - - - - - - - {selectedFile ? selectedFile.name : "PDF 파일을 여기에 드래그하세요"} - - - {selectedFile - ? `파일 크기: ${(selectedFile.size / (1024 * 1024)).toFixed(2)} MB` - : "또는 클릭하여 PDF 파일을 선택하세요 (최대 100MB)"} - - - - - - - - )} - /> - - {showProgress && ( -
-
- 업로드 진행률 - {uploadProgress}% + + {showProgress && ( +
+
+ 업로드 진행률 + {uploadProgress}% +
+
- -
- )} - - + )} + + + + +
- - - - - - + {/* 고정된 푸터 */} + + + + ); -- cgit v1.2.3