From a6f9ba7526d64ff10eee9669976064c56b97d6ee Mon Sep 17 00:00:00 2001 From: bicochan Date: Thu, 16 Jul 2026 17:54:57 +0900 Subject: [PATCH] =?UTF-8?q?[as]=20feat:=20=EC=9E=AC=EC=9B=90=ED=98=91?= =?UTF-8?q?=EC=9D=98=20=EB=B3=B4=EC=99=84=EC=9A=94=EC=B2=AD=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/fnrs-cnsltn/lib/button-config.ts | 2 - .../lib/fnrs-cnsltn-regist-schema.ts | 18 ++ .../pages/fnrs-cnsltn/lib/form-data-mapper.ts | 19 ++ .../fnrs-cnsltn/lib/save-payload-utils.ts | 5 +- .../ui/components/floating-action-buttons.tsx | 53 +--- .../pages/fnrs-cnsltn/ui/fnrs-form-page.tsx | 119 +++++-- .../pages/fnrs-cnsltn/ui/fnrs-view-page.tsx | 3 +- .../ui/sections/supplement-demand-section.tsx | 57 ---- .../src/pages/instl-sncn/lib/button-config.ts | 2 - .../ui/components/floating-action-buttons.tsx | 31 +- .../pages/instl-sncn/ui/instl-form-page.tsx | 13 +- .../pages/instl-sncn/ui/instl-view-page.tsx | 14 +- apps/as/src/widgets/pbadms-sprt/index.ts | 1 + .../ui}/supplement-demand-section.tsx | 295 +++++++----------- 14 files changed, 284 insertions(+), 348 deletions(-) delete mode 100644 apps/as/src/pages/fnrs-cnsltn/ui/sections/supplement-demand-section.tsx rename apps/as/src/{pages/instl-sncn/ui/sections => widgets/pbadms-sprt/ui}/supplement-demand-section.tsx (53%) diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts b/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts index 55ec0e0ae..6fdba8073 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/button-config.ts @@ -2,7 +2,6 @@ export const FNRS_CNSLTN_VIEW_BUTTON_ACTION = { strg: "strg", aply: "aply", del: "del", - splmntCmptn: "splmntCmptn", fnrsCnsltnAncmnt: "fnrsCnsltnAncmnt", envoSbmsn: "envoSbmsn", rjct: "rjct", @@ -32,7 +31,6 @@ const ROLE_STATUS_BUTTON_ACTIONS: Record ({ + splmntDmndSn: item.splmntDmndSn, + splmntArtclComCd: item.splmntArtclComCd, + splmntArtclCdNm: item.splmntArtclCdNm, + splmntDmndCn: item.splmntDmndCn, + splmntDmndDt: item.splmntDmndDt, + splmntDmndAtchFileGroupId: item.splmntDmndAtchFileGroupId ?? "", + splmntDmndAtchFileNm: item.splmntDmndAtchFileInfo?.orgnlFileNm ?? "", + splmntCn: item.splmntCn ?? "", + splmntPicNm: item.splmntPicNm ?? "", + splmntCmptnDt: item.splmntCmptnDt ?? "", + splmntAtchFileGroupId: item.splmntAtchFileGroupId ?? "", + splmntAtchFileNm: item.splmntAtchFileInfo?.orgnlFileNm ?? "", + splmntAtchFileAtflId: item.splmntAtchFileInfo?.atflId ?? "", + cmptnYn: item.cmptnYn, + })) ?? [], privacyConsent: "Y", }; } @@ -130,6 +148,7 @@ export function getCreateDefaultValues( fnrsSharList: [], cklstResultList: [], esntlAtchFileList: [], + splmntDmndList: [], privacyConsent: "N", }; } diff --git a/apps/as/src/pages/fnrs-cnsltn/lib/save-payload-utils.ts b/apps/as/src/pages/fnrs-cnsltn/lib/save-payload-utils.ts index 7c4782dbb..fb34d7d0e 100644 --- a/apps/as/src/pages/fnrs-cnsltn/lib/save-payload-utils.ts +++ b/apps/as/src/pages/fnrs-cnsltn/lib/save-payload-utils.ts @@ -112,8 +112,7 @@ export function buildSupplementReqPayload( toSplmntDmndSaveItem(item), ); - const nextSn = - existingItems.reduce((max, item) => Math.max(max, item.splmntDmndSn ?? 0), 0) + 1; + const nextSn = existingItems.reduce((max, item) => Math.max(max, item.splmntDmndSn ?? 0), 0) + 1; const newItems: FnrsCnsltnSplmntDmndItem[] = payload.items.map((item, index) => ({ splmntDmndSn: nextSn + index, @@ -129,7 +128,7 @@ export function buildSupplementReqPayload( }; } -function toSplmntDmndSaveItem(item: FnrsCnsltnSplmntDmndItem): FnrsCnsltnSplmntDmndItem { +export function toSplmntDmndSaveItem(item: FnrsCnsltnSplmntDmndItem): FnrsCnsltnSplmntDmndItem { return { splmntDmndSn: item.splmntDmndSn, splmntArtclComCd: item.splmntArtclComCd, diff --git a/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx b/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx index 46d8f9eee..d55333763 100644 --- a/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx +++ b/apps/as/src/pages/fnrs-cnsltn/ui/components/floating-action-buttons.tsx @@ -40,8 +40,8 @@ import { computeReviewStepChecklistProgress } from "../../lib/checklist-utils"; import { buildSavePayload, buildSupplementReqPayload, - buildSupplementSubmitPayload, buildTechReviewReplyPayload, + toSplmntDmndSaveItem, } from "../../lib/save-payload-utils"; import { type ChecklistFormState } from "../../model/view-types"; import type { TechReviewOpinionSectionHandle } from "../sections/tech-review-opinion-section"; @@ -219,15 +219,6 @@ function FloatingActionButtons({ router.push("/fnrs-cnsltn"); } - async function handleSplmntCmptnClick() { - const payload = buildSupplementSubmitPayload(data, checklistFormState); - await executeAction({ - action: FNRS_CNSLTN_VIEW_BUTTON_ACTION.splmntCmptn, - request: payload, - successMessage: "보완완료 처리되었습니다.", - }); - } - async function handleFnrsCnsltnAncmntClick() { const payload: DocPrgrsUpdateRequestDto = { docNo, @@ -380,15 +371,18 @@ function FloatingActionButtons({ return; } - const payload = buildTechReviewReplyPayload( - data, - checklistFormState, - "KECO", - "TE", - "SV", - getReviewOpinionFormData(), - opnrNm, - ); + const payload = { + ...buildTechReviewReplyPayload( + data, + checklistFormState, + "KECO", + "TE", + "SV", + getReviewOpinionFormData(), + opnrNm, + ), + splmntDmndList: (data.splmntDmndList ?? []).map(toSplmntDmndSaveItem), + }; await executeAction({ action: FNRS_CNSLTN_VIEW_BUTTON_ACTION.rvwCmptn, @@ -439,11 +433,6 @@ function FloatingActionButtons({ 삭제 )} - {shouldShowButton(FNRS_CNSLTN_VIEW_BUTTON_ACTION.splmntCmptn) && ( - - )} {shouldShowButton(FNRS_CNSLTN_VIEW_BUTTON_ACTION.fnrsCnsltnAncmnt) && ( - - {isEditMode && ( + {!isSplmntPrgrsStts ? ( <> - - + {isEditMode && ( + <> + + + + )} + ) : ( + )} diff --git a/apps/as/src/pages/fnrs-cnsltn/ui/fnrs-view-page.tsx b/apps/as/src/pages/fnrs-cnsltn/ui/fnrs-view-page.tsx index d4f110f0a..2423e1ead 100644 --- a/apps/as/src/pages/fnrs-cnsltn/ui/fnrs-view-page.tsx +++ b/apps/as/src/pages/fnrs-cnsltn/ui/fnrs-view-page.tsx @@ -5,7 +5,7 @@ import { useRef } from "react"; import { useUserStore } from "@/shared/lib"; import { ElaprDocPrgrsStatus } from "@/entities/elapr"; import { useFnrsCnsltnMng } from "@/entities/fnrs-cnsltn"; -import { SectionCollapsible } from "@/widgets/pbadms-sprt"; +import { SectionCollapsible, SupplementDemandSection } from "@/widgets/pbadms-sprt"; import { Skeleton } from "@common/components"; import { getEditableReviewStep } from "../lib/review-step-utils"; @@ -19,7 +19,6 @@ import { BusinessScaleSection } from "./sections/business-scale-section"; import { ChecklistSection } from "./sections/checklist-section"; import { ContactInfoSection } from "./sections/contact-info-section"; import { FnrsSharSection } from "./sections/fnrs-shar-section"; -import { SupplementDemandSection } from "./sections/supplement-demand-section"; import { TechReviewOpinionSection, type TechReviewOpinionSectionHandle, diff --git a/apps/as/src/pages/fnrs-cnsltn/ui/sections/supplement-demand-section.tsx b/apps/as/src/pages/fnrs-cnsltn/ui/sections/supplement-demand-section.tsx deleted file mode 100644 index 339b803b1..000000000 --- a/apps/as/src/pages/fnrs-cnsltn/ui/sections/supplement-demand-section.tsx +++ /dev/null @@ -1,57 +0,0 @@ -"use client"; - -import { dayjs } from "@/shared/lib"; -import type { FnrsCnsltnSplmntDmndResponseDto } from "@/entities/fnrs-cnsltn"; -import { SectionCollapsible } from "@/widgets/pbadms-sprt"; -import { - Badge, - Table, - TableBody, - TableCell, - TableHead, - TableHeader, - TableRow, -} from "@common/components"; - -interface SupplementDemandSectionProps { - splmntDmndList: FnrsCnsltnSplmntDmndResponseDto[]; -} - -function SupplementDemandSection({ splmntDmndList }: SupplementDemandSectionProps) { - if (splmntDmndList.length === 0) return null; - - return ( - - - - - 항목 - 보완요청 내용 - 보완 내용 - 완료여부 - 요청일시 - - - - {splmntDmndList.map((item) => ( - - {item.splmntArtclCdNm || "-"} - {item.splmntDmndCn || "-"} - {item.splmntCn || "-"} - - - {item.cmptnYn === "Y" ? "완료" : "미완료"} - - - - {item.splmntDmndDt ? dayjs(item.splmntDmndDt).format("YYYY-MM-DD HH:mm") : "-"} - - - ))} - -
-
- ); -} - -export { SupplementDemandSection }; diff --git a/apps/as/src/pages/instl-sncn/lib/button-config.ts b/apps/as/src/pages/instl-sncn/lib/button-config.ts index 28ce89f9e..8dafefd31 100644 --- a/apps/as/src/pages/instl-sncn/lib/button-config.ts +++ b/apps/as/src/pages/instl-sncn/lib/button-config.ts @@ -2,7 +2,6 @@ export const INSTL_SNCN_VIEW_BUTTON_ACTION = { strg: "strg", aply: "aply", del: "del", - splmntCmptn: "splmntCmptn", instlSncnAncmnt: "instlSncnAncmnt", envoSbmsn: "envoSbmsn", rjct: "rjct", @@ -32,7 +31,6 @@ const ROLE_STATUS_BUTTON_ACTIONS: Record; - supplementDemandRef?: React.RefObject; opnrNm?: string; } @@ -69,7 +67,6 @@ function FloatingActionButtons({ dtlInstCd, checklistFormState, techReviewOpinionRef, - supplementDemandRef, opnrNm, }: FloatingActionButtonsProps) { const router = useRouter(); @@ -397,9 +394,7 @@ function FloatingActionButtons({ getReviewOpinionFormData(), opnrNm, ), - splmntDmndList: - supplementDemandRef?.current?.getSplmntDmndList() ?? - (data.splmntDmndList ?? []).map(toSplmntDmndSaveItem), + splmntDmndList: (data.splmntDmndList ?? []).map(toSplmntDmndSaveItem), }; await executeAction({ @@ -451,16 +446,6 @@ function FloatingActionButtons({ 삭제 )} - {shouldShowButton(INSTL_SNCN_VIEW_BUTTON_ACTION.splmntCmptn) && ( - - )} {shouldShowButton(INSTL_SNCN_VIEW_BUTTON_ACTION.instlSncnAncmnt) && (