From 0793ef1e3aa2232ce72debd57ba449a699e0c734 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Fri, 4 Jul 2025 04:32:04 +0000 Subject: (최겸) 0704 평가기준표 수정(create, detail, update 및 excel 기능) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../table/reg-eval-criteria-create-dialog.tsx | 680 +++++++++++++-------- 1 file changed, 424 insertions(+), 256 deletions(-) (limited to 'lib/evaluation-criteria/table/reg-eval-criteria-create-dialog.tsx') diff --git a/lib/evaluation-criteria/table/reg-eval-criteria-create-dialog.tsx b/lib/evaluation-criteria/table/reg-eval-criteria-create-dialog.tsx index 2a668ca8..972af75d 100644 --- a/lib/evaluation-criteria/table/reg-eval-criteria-create-dialog.tsx +++ b/lib/evaluation-criteria/table/reg-eval-criteria-create-dialog.tsx @@ -1,7 +1,5 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ - 'use client'; - /* IMPORT */ import { Button } from '@/components/ui/button'; import { @@ -11,11 +9,12 @@ import { CardHeader, CardTitle, } from '@/components/ui/card'; -import { createRegEvalCriteriaWithDetails } from '../service'; +import { createRegEvalCriteriaFixed, createRegEvalCriteriaVariable } from '../service'; import { Dialog, DialogContent, DialogDescription, + DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; @@ -46,11 +45,11 @@ import { Textarea } from '@/components/ui/textarea'; import { toast } from 'sonner'; import { useForm, useFieldArray } from 'react-hook-form'; import { useEffect, useTransition } from 'react'; +import { useSession } from 'next-auth/react'; import { z } from 'zod'; import { zodResolver } from '@hookform/resolvers/zod'; // ---------------------------------------------------------------------------------------------------- - /* TYPES */ const regEvalCriteriaFormSchema = z.object({ category: z.string().min(1, '평가부문은 필수 항목입니다.'), @@ -59,18 +58,24 @@ const regEvalCriteriaFormSchema = z.object({ classification: z.string().min(1, '구분은 필수 항목입니다.'), range: z.string().nullable().optional(), remarks: z.string().nullable().optional(), + scoreType: z.enum(['fixed', 'variable']).default('fixed'), + variableScoreMin: z.coerce.number().nullable().optional(), + variableScoreMax: z.coerce.number().nullable().optional(), + variableScoreUnit: z.string().nullable().optional(), criteriaDetails: z.array( z.object({ id: z.number().optional(), - detail: z.string().min(1, '평가내용은 필수 항목입니다.'), + detail: z.string().optional(), scoreEquipShip: z.coerce.number().nullable().optional(), scoreEquipMarine: z.coerce.number().nullable().optional(), scoreBulkShip: z.coerce.number().nullable().optional(), scoreBulkMarine: z.coerce.number().nullable().optional(), }) - ).min(1, '최소 1개의 평가 내용이 필요합니다.'), + ).optional(), }); + type RegEvalCriteriaFormData = z.infer; + interface CriteriaDetailFormProps { index: number form: any @@ -83,9 +88,8 @@ interface RegEvalCriteriaFormSheetProps { onOpenChange: (open: boolean) => void, onSuccess: () => void, }; - // ---------------------------------------------------------------------------------------------------- - +/* CRITERIA DETAIL FORM COPONENT */ /* CRITERIA DETAIL FORM COPONENT */ function CriteriaDetailForm({ index, @@ -99,7 +103,7 @@ function CriteriaDetailForm({
- Detail Item - {index + 1} + 평가 옵션 {index + 1} {canRemove && (