From 153f3b7fa76f662b20cd583af0676a7a9d2aa012 Mon Sep 17 00:00:00 2001 From: jangwoong Date: Wed, 27 May 2026 17:28:37 +0900 Subject: [PATCH 1/2] =?UTF-8?q?[as=20instl]=20=20=20user-store.ts=20?= =?UTF-8?q?=EC=97=90=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80=20=EB=B0=8F?= =?UTF-8?q?=20=EB=93=B1=EB=A1=9D=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=82=AC=EC=9A=A9=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/instl-sncn/ui/cnfm-regist-page.tsx | 62 +++++++++++-------- apps/as/src/shared/store/user-store.ts | 10 +++ 2 files changed, 46 insertions(+), 26 deletions(-) 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 188a80b2a..7c5978b4b 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 type { AcntgSeMngTreeDto } from "@/entities/acntg"; import { acntgService } from "@/entities/acntg"; import type { CklstTreeNode } from "@/entities/cklst"; @@ -27,6 +28,7 @@ import { type InstlSncnBzScaleSaveDto, type InstlSncnMng, } from "@/entities/instl-sncn"; + import { Button, Input } from "@common/components"; import "./cnfm-page.css"; @@ -88,6 +90,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"); @@ -742,10 +747,10 @@ function CnfmRegistPage() { - - - - - - - - + - + - - +
+ * 사업명 +
🔍 사업찾기
+ * 사업기간 +
+ * 사업내용 @@ -793,19 +796,21 @@ function CnfmRegistPage() {
구분구분
{taskSeComCdNm}
신청 지자체신청 지자체 - (로그인 정보 자동 세팅) + + {userInfo?.enoNm ?? "\u00A0"} +
사업구분 + 사업구분
{[ ["CNFM", "설치인가"], @@ -836,27 +841,31 @@ function CnfmRegistPage() { - + + - + - + - + + + - + + - + - + - + +
신청자 이름신청자이름 - (로그인 사용자 자동 세팅) + {userInfo?.userName ?? "\u00A0"} 전화번호전화번호 - (로그인 사용자 자동 세팅) + {userInfo?.mphn ?? userInfo?.telno ?? "\u00A0"}
부서부서 - (로그인 사용자 자동 세팅) + {userInfo?.instSeNm ?? "\u00A0"} 이메일이메일 - (로그인 사용자 자동 세팅) + {userInfo?.email ?? "\u00A0"}
설계자 이름설계자이름 setDsgnrNm(e.target.value)} /> 전화번호전화번호
소속(용역사)소속 setDsgnrPsitn(e.target.value)} /> 이메일이메일 Date: Wed, 27 May 2026 18:42:47 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[as=20instl]=20=EA=B8=B0=ED=83=80=20?= =?UTF-8?q?=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C=EC=8B=9C=20=EC=8B=A4?= =?UTF-8?q?=EC=A0=9C=20=EC=B2=A8=EB=B6=80=20=ED=8C=8C=EC=9D=BC=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=B4=EC=84=9C=20=EC=82=AD=EC=A0=9C=EC=97=AC?= =?UTF-8?q?=EB=B6=80=20Y=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/instl-sncn/ui/cnfm-regist-page.tsx | 108 ++++++++++++------ apps/as/src/shared/lib/attach.ts | 17 +++ 2 files changed, 87 insertions(+), 38 deletions(-) create mode 100644 apps/as/src/shared/lib/attach.ts 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 7c5978b4b..8e1e9af50 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,6 +8,7 @@ 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 { deleteAttachment } from "@/shared/lib/attach"; import { getCookie, setCookie, useAlertStore, useUserStore } from "@/shared/lib"; import type { AcntgSeMngTreeDto } from "@/entities/acntg"; @@ -236,6 +237,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) => { const file = e.target.files?.[0]; if (!file) return; @@ -286,7 +309,7 @@ function CnfmRegistPage() { name: file.name, ext, size: toFileSizeText(file.size), - uploader: "(로그인 사용자)", + uploader: userInfo?.userName ?? "알 수 없음", atflCd: uploadedAtflCd, atflId: uploadedAtflId, }); @@ -747,7 +770,7 @@ function CnfmRegistPage() { - - - - + - + - +
+ * 사업명 @@ -761,7 +784,7 @@ function CnfmRegistPage() { + * 사업기간 @@ -783,7 +806,7 @@ function CnfmRegistPage() {
+ * 사업내용 @@ -796,12 +819,12 @@ function CnfmRegistPage() {
구분구분
{taskSeComCdNm}
신청 지자체신청 지자체 {userInfo?.enoNm ?? "\u00A0"} @@ -809,7 +832,7 @@ function CnfmRegistPage() {
사업구분*사업구분
{[ @@ -841,31 +864,31 @@ function CnfmRegistPage() { - - + + - + - + - + - - + + - + - + - +
신청자이름신청자이름 {userInfo?.userName ?? "\u00A0"} 전화번호전화번호 {userInfo?.mphn ?? userInfo?.telno ?? "\u00A0"}
부서부서 {userInfo?.instSeNm ?? "\u00A0"} 이메일이메일 {userInfo?.email ?? "\u00A0"}
설계자이름설계자이름 setDsgnrNm(e.target.value)} /> 전화번호전화번호
소속소속 이메일이메일

개인정보 동의

-
-

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

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

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

+
+

[ 개인정보 수집항목 ]

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

[ 개인정보 이용목적 ]

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