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 329594b3b..99bc8643c 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 @@ -8,7 +8,8 @@ import axios from "axios"; import { type HttpResponse, Upload } from "tus-js-client"; import { AUTH_USER_ID, CLAIM_NAME, ENDPOINT, PROXY_HOST } from "@/shared/config"; -import { getCookie, setCookie } from "@/shared/lib"; +import { getCookie, setCookie, useAlertStore, useUserStore } from "@/shared/lib"; +import { deleteAttachment } from "@/shared/lib/attach"; import type { AcntgSeMngTreeDto } from "@/entities/acntg"; import { acntgService } from "@/entities/acntg"; import type { CklstTreeNode } from "@/entities/cklst"; @@ -85,6 +86,9 @@ const ReadCell = ({ value }: { value: string | number }) => ( /* ------------------------------------------------------------------ */ function CnfmRegistPage() { const router = useRouter(); + const userInfo = useUserStore((state) => state.userInfo); + const alert = useAlertStore((state) => state.setMessage); + const [docSeComCd] = useState("INSTL"); const [taskSeComCdNm, setTaskSeComCdNm] = useState("재이용수"); const [taskSeComCd, setTaskSeComCd] = useState("RE"); @@ -227,6 +231,28 @@ function CnfmRegistPage() { upload.start(); }; + /** 기타첨부파일 삭제 핸들러: 백엔드에 DELETE 요청을 보내 소프트삭제 처리 후 상태 갱신 */ + const handleDeleteEtcFile = async (fileId: string, atflId: string) => { + try { + if (atflId) { + await deleteAttachment(atflId); + } + } catch (error) { + console.error("기타 첨부파일 삭제 실패", error); + alert("파일 삭제 중 오류가 발생했습니다."); + return; + } + + setEtcFiles((prev) => { + const next = prev.filter((x) => x.id !== fileId); + if (next.length === 0) { + setEtcFileGroupId(""); + etcFileGroupIdRef.current = ""; + } + return next; + }); + }; + const handleRequiredFileChange = ( key: RequiredAttachKey, e: React.ChangeEvent, @@ -280,7 +306,7 @@ function CnfmRegistPage() { name: file.name, ext, size: toFileSizeText(file.size), - uploader: "(로그인 사용자)", + uploader: userInfo?.userName ?? "알 수 없음", atflCd: uploadedAtflCd, atflId: uploadedAtflId, }); @@ -737,10 +763,10 @@ function CnfmRegistPage() { - - - - - - - - + - + - - +
+ * 사업명 +
🔍 사업찾기
+ * 사업기간 +
+ * 사업내용 @@ -788,19 +812,23 @@ function CnfmRegistPage() {
구분구분
{taskSeComCdNm}
신청 지자체신청 지자체 - (로그인 정보 자동 세팅) + + {userInfo?.enoNm ?? "\u00A0"} +
사업구분 + + *사업구분 +
{[ ["CNFM", "설치인가"], @@ -831,27 +859,45 @@ function CnfmRegistPage() { - + + - + - + - + + + - + + - + - + - + +
신청자 이름 + 신청자 + 이름 - (로그인 사용자 자동 세팅) + + {userInfo?.userName ?? "\u00A0"} + 전화번호전화번호 - (로그인 사용자 자동 세팅) + + {userInfo?.mphn ?? userInfo?.telno ?? "\u00A0"} +
부서부서 - (로그인 사용자 자동 세팅) + + {userInfo?.instSeNm ?? "\u00A0"} + 이메일이메일 - (로그인 사용자 자동 세팅) + {userInfo?.email ?? "\u00A0"}
설계자 이름 + 설계자 + 이름 setDsgnrNm(e.target.value)} /> 전화번호전화번호
소속(용역사)소속 setDsgnrPsitn(e.target.value)} /> 이메일이메일

개인정보 동의

-
-

[개인정보 수집·이용 목적]

-
    -
  • 수집항목: 소속기관, 성명, 전화번호, 이메일, IP Address, 접속 기기 정보
  • -
  • 수집목적: 하수도 시설물 설치인가 신청 및 처리 목적
  • -
  • 보유기간: 관련 법령에 따른 의무 보유 기간 준수
  • -
-

- ※ 개인정보 제공에 동의하지 않을 수 있으나, 미동의 시 서비스 이용이 제한될 수 있습니다. -

+
+

[ 개인정보 수집항목 ]

+
+ * 필수항목 : 소속기관, 소속부서, 담당자, 직급, 사무실 번호, FAX 번호 +
+ ․ 선택항목 : 휴대폰 번호, 이메일 주소 +
+ ․ 기타항목 : IP Address, 쿠키, 시스템 접속 및 이용 기록 +
※ 시스템 이용과정에서 기타 항목의 정보들이 자동으로 생성되어 수집될 수 있습니다. +
+ +

[ 개인정보 이용목적 ]

+
+ ․ 국가하수도정보시스템 웹서비스 이용에 따른 본인 확인 절차에 이용 +
+ ․ 국가하수도정보시스템 사용에 필요한 권한 부여 +
․ 사용자별 맞춤 컨텐츠 (처리시설의 운영 데이터 조회, 수질현황 데이터 조회, 예산 + 편성 / 예산편성 등) 제공에 이용 +
+ +
● 개인정보의 보유 및 이용기간
+
+ ․ 수집된 고객의 개인정보는 2년 동안 보유하며 그 이후에는 문서를 파쇄합니다. +
․ 정보제공자가 개인정보 파쇄를 요청할 경우 즉시 파쇄합니다. +
+ +
+
● 개인정보 제공 거부에 따른 제한사항
+
+ ․ 귀하는 개인정보 제공 동의를 거부할 권리가 있으나, 동의 거부 시 국가하수도정보시스템 + 이용 서비스에 제한이 있을 수 있습니다. +
+
-