From a644e80191a33fc2bca562ccb3d80ab9a90b9355 Mon Sep 17 00:00:00 2001 From: ljpark Date: Wed, 6 May 2026 16:29:47 +0900 Subject: [PATCH] =?UTF-8?q?dm:=20=EC=88=98=EC=9A=94=EC=B2=98=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95=20=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/dm/.env.local | 2 +- .../dm/app/(with-layout)/apply/dmdco/page.tsx | 19 +++++++++++++------ .../status/_components/RainStatusSection.tsx | 4 ++-- apps/dm/app/(with-layout)/status/page.tsx | 2 +- apps/dm/app/store/sdmMng/postcode-service.ts | 4 ++-- apps/dm/components/LoginModal.tsx | 2 +- apps/dm/components/PostcodeModal.tsx | 11 +++++++++-- .../src/ui/sdmInsertForm/form.tsx | 1 + 8 files changed, 30 insertions(+), 15 deletions(-) diff --git a/apps/dm/.env.local b/apps/dm/.env.local index 47ff660f3..df18c9228 100644 --- a/apps/dm/.env.local +++ b/apps/dm/.env.local @@ -18,7 +18,7 @@ NEXT_PUBLIC_CS_TUS_UPLOAD = /attach-service/api/v1/tus/upload NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr NEXT_PUBLIC_NGII_PARAM = 04trYP9_xwLAfALjwZ-B8g&service=WMTS&request=GetTile&version=1.0.0&format=image/png&layer=korean_map&style=korean&tilematrixset=korean&tilematrix={z}&tilecol={x}&tilerow={y} NEXT_PUBLIC_GATEWAY_URL=http://con.mind-one.co.kr:11083 # 개발 서버 API -# NEXT_PUBLIC_GATEWAY_URL=http://localhost:8883 # 개발 서버 API # 박이정 +# NEXT_PUBLIC_GATEWAY_URL=http://localhost:8883 # 개발 서버 API NEXT_PUBLIC_FINDADRESS_URL=https://business.juso.go.kr/addrlink/addrLinkApi.do diff --git a/apps/dm/app/(with-layout)/apply/dmdco/page.tsx b/apps/dm/app/(with-layout)/apply/dmdco/page.tsx index 38b3941d1..4e8dc5195 100644 --- a/apps/dm/app/(with-layout)/apply/dmdco/page.tsx +++ b/apps/dm/app/(with-layout)/apply/dmdco/page.tsx @@ -1,3 +1,6 @@ +/** + * 수요처 등록/수정 + */ "use client"; import { useEffect, useMemo, useRef, useState, type ReactNode, type RefObject } from "react"; @@ -15,6 +18,7 @@ type SessionUser = { dmdCoNm?: string; zip?: string; daddr?: string; + daddr2?: string; telno?: string; ctpvCd?: string; sggCd?: string; @@ -170,7 +174,7 @@ export default function DemandPlaceRegisterPage() { const [company, setCompany] = useState(""); const [bizNo, setBizNo] = useState(""); const [workerNo, setWorkerNo] = useState(""); - const [noWorkerNo, setNoWorkerNo] = useState(false); + const [noWorkerNo, setNoWorkerNo] = useState(true); // 종사업자번호 해당없음 default 선택으로 설정 const [zip, setZip] = useState(""); const [addr1, setAddr1] = useState(""); @@ -218,7 +222,7 @@ export default function DemandPlaceRegisterPage() { setCompany(String(user.dmdCoNm ?? "")); setZip(String(user.zip ?? "")); setAddr1(String(user.daddr ?? "")); - setAddr2(""); + setAddr2(String(user.daddr2 ?? "")); setTel(formatKoreanPhoneNumber(String(user.telno ?? ""))); setSido(String(user.ctpvCd ?? "")); setSigungu(String(user.sggCd ?? "")); @@ -305,9 +309,11 @@ export default function DemandPlaceRegisterPage() { } } - const mergedAddress = [addr1.trim(), addr2.trim()].filter(Boolean).join(" "); - if (!mergedAddress) return alert("사업자주소를 입력해 주세요."); - if (mergedAddress.length > 40) return alert("주소는 40자 이내로 입력해주세요."); + const baseAddress = addr1.trim(); + const detailAddress = addr2.trim(); + if (!baseAddress && !detailAddress) return alert("사업자주소를 입력해 주세요."); + if (baseAddress.length > 40) return alert("주소는 40자 이내로 입력해주세요."); + if (detailAddress.length > 40) return alert("상세 주소는 40자 이내로 입력해주세요."); if (!telDigits) return alert("전화번호를 입력해 주세요."); if (!/^\d{8,11}$/.test(telDigits)) { @@ -341,7 +347,8 @@ export default function DemandPlaceRegisterPage() { dmdInfoId: fullDmdInfoId, bzmnNo: bizDigits, zip: zip.trim(), - daddr: mergedAddress, + daddr: baseAddress, + daddr2: detailAddress, telno: telDigits, rgtr: (sessionUser?.rgtr as string) || myUUID, }; diff --git a/apps/dm/app/(with-layout)/status/_components/RainStatusSection.tsx b/apps/dm/app/(with-layout)/status/_components/RainStatusSection.tsx index 34560ef75..90fd0520c 100644 --- a/apps/dm/app/(with-layout)/status/_components/RainStatusSection.tsx +++ b/apps/dm/app/(with-layout)/status/_components/RainStatusSection.tsx @@ -278,12 +278,12 @@ export default function RainStatusSection() {
- {/* 2) 빗물이용시설의 용도별 분포 (2023년 기준) */} + {/* 2) 빗물이용시설의 용도별 분포 (xxxx년 기준) */}
- 빗물이용시설의 용도별 분포 (2023년 기준) + 빗물이용시설의 용도별 분포 ({selectYear}년 기준)
diff --git a/apps/dm/app/(with-layout)/status/page.tsx b/apps/dm/app/(with-layout)/status/page.tsx index f757ae2ce..b18662c06 100644 --- a/apps/dm/app/(with-layout)/status/page.tsx +++ b/apps/dm/app/(with-layout)/status/page.tsx @@ -16,7 +16,7 @@ const menus: BusinessSubNavMenu[] = [ }, { id: "status-rain-purpose-distribution", - label: "빗물이용시설의 용도별 분포 (2023년 기준)", + label: "빗물이용시설의 용도별 분포", }, { id: "status-rain-purpose-usage", diff --git a/apps/dm/app/store/sdmMng/postcode-service.ts b/apps/dm/app/store/sdmMng/postcode-service.ts index 814d7e0c6..1964b7c71 100644 --- a/apps/dm/app/store/sdmMng/postcode-service.ts +++ b/apps/dm/app/store/sdmMng/postcode-service.ts @@ -257,9 +257,9 @@ export function extractSearchInputFromRoadAddr(roadAddr: string): string { * @returns 최대 5개의 "도로명 건물본번" 자동완성 문자열 목록 */ export async function fetchPostcodeSuggestions(input: string): Promise { - const normalized = input.replace(/\s+/g, " ").trim(); + const normalized = input.replace(/\s+/g, " ").trim(); // space가 여러개일 때, 하나만 남김 const parts = normalized.split(" "); - const tail = parts.at(-1) ?? ""; + const tail = parts.at(-1) ?? ""; // 마지막 요소 const roadNm = /^\d+(?:-\d+)?$/.test(tail) && parts.length > 1 ? parts.slice(0, -1).join(" ").trim() diff --git a/apps/dm/components/LoginModal.tsx b/apps/dm/components/LoginModal.tsx index 60f46f7ad..6a36e6481 100644 --- a/apps/dm/components/LoginModal.tsx +++ b/apps/dm/components/LoginModal.tsx @@ -326,7 +326,7 @@ export default function LoginModal({ open, onClose, onSuccess }: LoginModalProps