diff options
| author | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-04 07:48:00 +0000 |
|---|---|---|
| committer | dujinkim <dujin.kim@dtsolution.co.kr> | 2025-11-04 07:48:00 +0000 |
| commit | 680da9b323db8b8d7cf27c674ab0016ec87bfe81 (patch) | |
| tree | 52791f8618c0c5767c6420404ddf849ae28082e8 /lib/vendor-evaluation-submit | |
| parent | 153502b67da990c92973f1f8af416f9a81ec3abb (diff) | |
(임수민) 구매 점검 테스트 요청사항 수정 (11/02)
Diffstat (limited to 'lib/vendor-evaluation-submit')
| -rw-r--r-- | lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx | 70 |
1 files changed, 54 insertions, 16 deletions
diff --git a/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx b/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx index 685530e6..45eea880 100644 --- a/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx +++ b/lib/vendor-evaluation-submit/table/general-evaluation-form-sheet.tsx @@ -330,6 +330,19 @@ export function GeneralEvaluationFormSheet({ const progress = getProgress() + // 응답 ID -> 전역 인덱스 매핑 (카테고리 그룹/정렬과 무관하게 안정적인 인덱스 사용) + const responseIndexById = React.useMemo(() => { + const map: Record<number, number> = {} + if (formData) { + formData.evaluations.forEach((ev, idx) => { + if (ev.response?.id) { + map[ev.response.id] = idx + } + }) + } + return map + }, [formData]) + if (isLoading) { return ( <Sheet open={open} onOpenChange={onOpenChange}> @@ -430,8 +443,11 @@ export function GeneralEvaluationFormSheet({ type="button" variant="outline" size="sm" - onClick={() => handleSaveResponse(index)} - disabled={!item.response?.id} + onClick={() => { + const gi = item.response?.id ? responseIndexById[item.response.id] : undefined + return gi !== undefined ? handleSaveResponse(gi) : undefined + }} + disabled={!item.response?.id || (item.response?.id ? responseIndexById[item.response.id] === undefined : true)} > <SaveIcon className="h-4 w-4 mr-1" /> 저장 @@ -453,23 +469,41 @@ export function GeneralEvaluationFormSheet({ </CardHeader> <CardContent className="space-y-4"> {/* 📝 응답 텍스트만 (점수 입력 제거) */} - <FormField - control={form.control} - name={`responses.${index}.responseText`} - render={({ field }) => ( - <FormItem> - <FormLabel>응답 내용 *</FormLabel> - <FormControl> + {(() => { + const gi = item.response?.id ? responseIndexById[item.response.id] : undefined + if (gi === undefined) { + return ( + <div> + <FormLabel>응답 내용 *</FormLabel> <Textarea - {...field} + value={item.response?.responseText || ''} placeholder="평가 항목에 대한 응답을 상세히 작성해주세요..." className="min-h-[120px]" + disabled /> - </FormControl> - <FormMessage /> - </FormItem> - )} - /> + </div> + ) + } + return ( + <FormField + control={form.control} + name={`responses.${gi}.responseText`} + render={({ field }) => ( + <FormItem> + <FormLabel>응답 내용 *</FormLabel> + <FormControl> + <Textarea + {...field} + placeholder="평가 항목에 대한 응답을 상세히 작성해주세요..." + className="min-h-[120px]" + /> + </FormControl> + <FormMessage /> + </FormItem> + )} + /> + ) + })()} {/* 📎 첨부파일 영역 */} <div className="space-y-3"> @@ -477,7 +511,11 @@ export function GeneralEvaluationFormSheet({ <FormLabel>첨부파일</FormLabel> <div> <Input - ref={(el) => item.response?.id && (fileInputRefs.current[item.response.id] = el)} + ref={(el) => { + if (item.response?.id) { + fileInputRefs.current[item.response.id] = el + } + }} type="file" multiple className="hidden" |
