diff --git a/apps/as/src/entities/elapr/api/elapr-dmnd-service.ts b/apps/as/src/entities/elapr/api/elapr-dmnd-service.ts new file mode 100644 index 000000000..8b2e67fa2 --- /dev/null +++ b/apps/as/src/entities/elapr/api/elapr-dmnd-service.ts @@ -0,0 +1,17 @@ +import { client } from "@/shared/api"; +import { ENDPOINT } from "@/shared/config"; + +import type { + ElaprDmndResponse, + ElaprDmndSaveRequest, + ElaprDmndService, +} from "../model/elapr-dmnd-interface"; + +async function create(body: ElaprDmndSaveRequest): Promise { + const response = await client.post(ENDPOINT.AS_ELAPR_SERVICE.ELAPR_DMND, body); + return response.data; +} + +export const ElaprDmndApi: ElaprDmndService = { + create, +}; diff --git a/apps/as/src/entities/elapr/api/elapr-prgrs-service.ts b/apps/as/src/entities/elapr/api/elapr-prgrs-service.ts new file mode 100644 index 000000000..97f925113 --- /dev/null +++ b/apps/as/src/entities/elapr/api/elapr-prgrs-service.ts @@ -0,0 +1,7 @@ +import { client } from "@/shared/api"; + +export async function processElaprPrgrs(elaprPrgrsId: string, atrzPrgrsSttsComCd = "ATRZ_STTS_003"): Promise { + await client.put(`/as-elapr-service/api/v1/elapr-prgrs-stts/${elaprPrgrsId}/process`, { + atrzPrgrsSttsComCd, + }); +} diff --git a/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts b/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts new file mode 100644 index 000000000..249d98bf9 --- /dev/null +++ b/apps/as/src/entities/elapr/model/elapr-dmnd-interface.ts @@ -0,0 +1,22 @@ +export interface ElaprDmndSaveRequest { + elaprDocNo: string; + elaprTmpltId: string; + dmndTtl: string; + dmndCn: string; +} + +export interface ElaprDmndResponse { + elaprDmndId: string; + elaprDocNo: string; + elaprTmpltId: string; + dmndTtl: string; + dmndCn: string; + atrzSttsComCd: string; + rqstrUuid: string; + regDt: string; + updtDt: string; +} + +export interface ElaprDmndService { + create(body: ElaprDmndSaveRequest): Promise; +} diff --git a/apps/as/src/entities/instl-sncn/index.ts b/apps/as/src/entities/instl-sncn/index.ts index 5da39b459..cd340d42d 100644 --- a/apps/as/src/entities/instl-sncn/index.ts +++ b/apps/as/src/entities/instl-sncn/index.ts @@ -8,4 +8,5 @@ export { type InstlSncnMng, type InstlSncnMngSearchParams, type SpringPage, + type ElaprDocPrgrsClientResponseDto, } from "./model/instl-sncn-interface"; diff --git a/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts b/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts index e9a4060ab..81c769f98 100644 --- a/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts +++ b/apps/as/src/entities/instl-sncn/model/instl-sncn-interface.ts @@ -22,6 +22,8 @@ export interface InstlSncnMngSearchParams { } export interface InstlSncnMng { + gugun: string; + sido: string; instlSncnDocNo: string; admdstCd: string; sidoNm?: string; @@ -108,6 +110,28 @@ export interface InstlSncnApplySaveRequestDto { export type ReviewStepCode = "LOCAL" | "ENV" | "KECO"; + + +/** 전자결재 진행상태 (클라이언트 응답용) */ +export interface ElaprDocPrgrsClientResponseDto { + elaprDocNo?: string; + elaprDmndId?: string; + elaprPrgrsId?: string; + atrzSeqNo?: number; + atrzSeComCd?: string; + atrzSeComNm?: string; + aprvrUuid?: string; + aprvrUuidNm?: string; + atrzPrgrsSttsComCd?: string; + atrzPrgrsSttsComNm?: string; + rjctRsn?: string | null; + atrzDt?: string | null; + jbpsSeNm?: string; + jbgdSeNm?: string; + ognzNm?: string; +} + +// det 응답에 전자결재 진행상태 목록을 포함 export interface InstlSncnMngDetResponse { detDto: InstlSncnMng; bizSclList: any[]; @@ -115,6 +139,7 @@ export interface InstlSncnMngDetResponse { cklstResultList?: any[]; esntlFileList: any[]; etcFileList: any[]; + elaprDocPrgrsList?: ElaprDocPrgrsClientResponseDto[] | null; } export interface InstlSncnMngService { diff --git a/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx b/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx index 0f5d24a62..8597baf69 100644 --- a/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx +++ b/apps/as/src/pages/instl-sncn/ui/cnfm-list-page.tsx @@ -231,7 +231,7 @@ function CnfmListPage() { 담당자 해당기관 진행상황 - 시행일 + 신청일 @@ -253,12 +253,12 @@ function CnfmListPage() { className="cnfm-row-clickable" onClick={() => router.push(`/instl-sncn/${row.instlSncnDocNo}`)} > - {row.sidoNm || "-"} - {row.sggNm || "-"} + {row.sido || "-"} + {row.gugun|| "-"} {row.bizNm || "-"} {row.taskSeCdNm || row.taskSeComCd || "-"} - {row.chrgrNm || row.aplcntNm || "-"} - {row.instNm || row.aplcntOgdpNm || "-"} + {row.aplcntNm || "-"} + {row.envoSeCdNm || "-"}
diff --git a/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx b/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx index 5bcd8925c..8b736b028 100644 --- a/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx +++ b/apps/as/src/pages/instl-sncn/ui/cnfm-regist-page.tsx @@ -155,12 +155,14 @@ const normalizeChecklistResultRows = (payload: any): any[] => { */ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { const router = useRouter(); - const userInfo2 = useUserStore((state) => state.userInfo); + const userInfo = useUserStore((state) => state.userInfo); // userInfo?.dtlInstCd 테스트 코드 ENV.ROLE_USER03 , KECO 권한 테스트용 (실제 권한에 맞게 변경 필요) + /* const userInfo = { ...userInfo2, dtlInstCd: "ROLE_USER03", //ROLE_USER03, ROLE_USER02, ROLE_USER01 KECO 권한 테스트용 (실제 권한에 맞게 변경 필요) }; + */ const alert = useAlertStore((state) => state.setMessage); const qc = useQueryClient(); const currentDet = useMemo(() => initialData?.detDto ?? initialData, [initialData]); @@ -204,7 +206,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { const [docSeComCd] = useState("INSTL"); const [taskSeComCdNm, setTaskSeComCdNm] = useState( - () => (currentDet?.taskSeComCdNm as string) ?? "재이용수", + () => (currentDet?.taskSeComCdNm as string) ?? "", ); const [taskSeComCd, setTaskSeComCd] = useState(() => (currentDet?.taskSeComCd as string) ?? "RE"); @@ -212,7 +214,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { // do not override server-provided initialData (modify mode) if (currentDet) return; - const raw = sessionStorage.getItem(INSTL_SNCN_REGISTER_SELECTION_KEY); + const raw = sessionStorage.getItem(INSTL_SNCN_REGISTER_SELECTION_KEY); if (!raw) return; try { @@ -220,7 +222,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { taskSeComCdList?: string[]; taskSeComCdNmList?: string[]; }; - + setTaskSeComCd(parsed.taskSeComCdList?.join(",") || "RE"); setTaskSeComCdNm(parsed.taskSeComCdNmList?.join(",") || "재이용수"); } catch { @@ -436,7 +438,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { // 수정모드인 경우 서버가 전달한 업무구분(단일 혹은 콤마로 결합된 복수)을 상태로 복원 setTaskSeComCd(det.taskSeComCd); - setTaskSeComCdNm(det.taskSeComCdNm ); + setTaskSeComCdNm(det.taskSeCdNm ); // 매핑 완료 플래그 설정 — 이후 동일 컴포넌트 인스턴스에서 재매핑 방지 initialMappedRef.current = true; @@ -634,7 +636,6 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { const { data: cklstTree = [] } = useQuery({ queryKey: ["cklstTree", docSeComCd, taskSeComCd], queryFn: async () => { - console.log("Fetching checklist tree with", { docSeComCd, taskSeComCd }); // support comma-separated task codes (e.g. "RE,SP") by splitting const raw = taskSeComCd ?? ""; const codes = raw @@ -1125,7 +1126,7 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { } const toInstlSncnMngPayload = (prgrsSttsComCd: "SV" | "ST"| "ER"): InstlSncnMng => ({ - instlSncnDocNo: docId ?? "", // 수정 시 기존 문서번호 유지, 신규 저장 시 빈값 + instlSncnDocNo: docId ?? "", admdstCd: "", sidoNm: "", sggNm: "", @@ -1156,6 +1157,8 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { regDt: "", mdfcnDt: "", rgtrNm: "", + gugun: "", + sido: "" }); async function handleSave() { @@ -1304,7 +1307,9 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) { 신청 지자체 - {userInfo?.enoNm ?? "\u00A0"} + {isModifyMode + ? `${currentDet?.sido ?? "-"} ${currentDet?.gugun ?? "-"}` + : userInfo?.laeSeNm ?? "\u00A0"} @@ -1313,9 +1318,9 @@ function CnfmRegistPage({ initialData }: { initialData?: any } = {}) {
{[ - ["CNFM", "설치인가"], - ["APR", "설치승인"], - ["AFA", "폐지인가"], + ["1", "설치인가"], + ["2", "설치승인"], + ["3", "폐지승인"], ].map(([val, label]) => (