+ {/* 컨텐츠 영역 */}
+
- {/* 기본정보 테이블 */}
-
-
-
-
+ {/* 기본정보 테이블 */}
+
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
+
+
+
-
+
-
-
-
-
-
- {/* 요구수질 섹션 타이틀 바 */}
-
-
- 요구수질
-
- {/* 수질기준참고 모달 */}
- setOpenRef(false)}
- imageSrc="/images/landing/water_quality_ref_1.png"
- />
+
+
+
-
- {/* 요구수질 테이블 */}
-
- {/* 1행 */}
-
-
-
-
- }
- rightLabel="총질소(T-N)(mg/L)"
- rightControl={
-
- }
- />
-
-
- {/* 2행 */}
-
}
- rightLabel="총인(T-P)(mg/L)"
- rightControl={
-
- }
- />
-
-
- {/* 3행 */}
-
- }
- rightLabel="수소이온농도(pH)"
- rightControl={
-
- setPh((p) => ({ ...p, min: v }))}
- className="w-32"
- />
- ~
- setPh((p) => ({ ...p, max: v }))}
- className="w-32"
- />
-
- }
- />
-
-
- {/* 4행 */}
-
- 생물화학적산소요구량
-
- (BOD)(mg/L)
- >
- }
- leftRequired
- leftControl={}
- rightLabel="염화물(mgCL/L)"
- rightControl={}
- />
-
-
- {/* 5행 */}
- setOdor(e.target.value)}
- className="h-11 w-full max-w-[200px] rounded-md border border-neutral-300 bg-white px-3 text-sm outline-none focus:border-neutral-500"
- >
-
-
-
-
- }
- rightLabel="전기전도도(µs/cm)"
- rightControl={}
- />
-
-
- {/* 6행 */}
- }
- rightLabel="비고"
- rightControl={
-
+
+
+
setOpenCand(false)}
+ initialSelected={selectedCands}
+ onApply={(list) => {
+ setSelectedCands(list);
+
+ // ✅ cand1~3 입력칸에 반영(시설명만 넣는 버전)
+ setCand1(list[0]?.name ?? "");
+ setCand2(list[1]?.name ?? "");
+ setCand3(list[2]?.name ?? "");
+
+ setOpenCand(false);
+ }}
+ />
>
);
}
-export default function DemandRegisterPage() {
- return (
- Loading...}>
-
-
- );
-}
-
/* ----------------------------- UI helpers ----------------------------- */
function Divider() {
diff --git a/apps/dm_new/app/(with-layout)/apply/status/page.tsx b/apps/dm_new/app/(with-layout)/apply/status/page.tsx
index cb3210da7..fc9e61134 100644
--- a/apps/dm_new/app/(with-layout)/apply/status/page.tsx
+++ b/apps/dm_new/app/(with-layout)/apply/status/page.tsx
@@ -1,179 +1,157 @@
-// apps/dm/app/(landing)/reuse/apply/status/page.tsx
"use client";
import { useEffect, useMemo, useRef, useState } from "react";
import SubPageHeader from "@/components/SubPageHeader";
-
-type WaterDetail = {
- toc: string;
- bdo: string;
- tn: string;
- tp: string;
- cl: string;
- conductivity: string;
- coliform: string;
- turbidity: string;
- odor: string;
- color: string;
- ph: string;
- note: string;
-};
-
-type Row = {
- id: number;
- sido: string;
- sigungu: string;
- company: string;
- address: string;
- phone: string;
- date: string;
- status: "진행중" | "진행완료";
- detail: {
- reqDate: string;
- reqQty: string;
- usePurpose: string;
- price: string;
- water: WaterDetail;
- candidates: [string, string, string];
- };
-};
-
-const MOCK: Row[] = [
- {
- id: 1,
- sido: "서울특별시",
- sigungu: "금천구",
- company: "서울워터솔루션(주)",
- address: "서울특별시 금천구 가산디지털2로 119, 24층(가산동)",
- phone: "010-0000-0000",
- date: "2025-01-14",
- status: "진행중",
- detail: {
- reqDate: "2025-02",
- reqQty: "1,200",
- usePurpose: "공업용수",
- price: "350",
- water: {
- toc: "4",
- bdo: "3",
- tn: "10",
- tp: "1.0",
- cl: "120",
- conductivity: "800",
- coliform: "0",
- turbidity: "2",
- odor: "무",
- color: "무",
- ph: "7.2",
- note: "-",
- },
- candidates: ["후보지1", "후보지2", "후보지3"],
- },
- },
- {
- id: 2,
- sido: "제주특별자치도",
- sigungu: "서귀포",
- company: "회사명이 길어도괜찮지",
- address: "제주특별자치도 서귀포시 천제연로 156, 3층 2호(색달동 1077호)",
- phone: "010-0000-0000",
- date: "2025-01-14",
- status: "진행완료",
- detail: {
- reqDate: "2025-03",
- reqQty: "800",
- usePurpose: "조경용수",
- price: "300",
- water: {
- toc: "5",
- bdo: "4",
- tn: "12",
- tp: "1.2",
- cl: "140",
- conductivity: "900",
- coliform: "0",
- turbidity: "3",
- odor: "무",
- color: "무",
- ph: "7.0",
- note: "현장 협의",
- },
- candidates: ["후보지1", "후보지2", "후보지3"],
- },
- },
-];
-
-function StatusBadge({ v }: { v: Row["status"] }) {
- const cls = v === "진행중" ? "text-red-600" : "text-lime-600";
- return
{v};
-}
+import { useDmStore } from "@/app/store";
+import type { DemandCompBizType } from "@/app/store/sdmMng";
type TopField = { label: string; value: string; required?: boolean };
type PairField = { label: string; value: string };
+type SessionUser = { dmdInfoId?: string };
+
+const formatDate = (value: string | Date | "" | undefined) => {
+ if (!value) return "-";
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return String(value);
+ const yyyy = date.getFullYear();
+ const mm = String(date.getMonth() + 1).padStart(2, "0");
+ const dd = String(date.getDate()).padStart(2, "0");
+ return `${yyyy}-${mm}-${dd}`;
+};
+
+const formatValue = (value: string | number | null | undefined) => {
+ if (value === null || value === undefined || value === "") return "-";
+ return String(value);
+};
+
+const formatBelow = (value: string | number | null | undefined) => {
+ if (value === null || value === undefined || value === "") return "-";
+ if (Number(value) === -1) return "불검출";
+ return `${value} 이하`;
+};
+
+function StatusBadge({ v }: { v: string }) {
+ const cls = v === "신청" ? "text-red-600" : "text-lime-600";
+ return
{v || "-"};
+}
export default function DemandStatusPage() {
- const rows = useMemo(() => MOCK, []);
+ const { getSdmInfoStatusList, Sdm, Common } = useDmStore((state) => state);
+ const { successLogin, sdmInfoStatusList } = Sdm;
+ const { selectSidoData, selectSigunData } = Common;
- // ✅ rows가 빈 경우도 대비 (런타임 오류 방지)
- const [selectedId, setSelectedId] = useState
(rows[0]?.id ?? null);
-
- // ✅ 상세영역 스크롤 이동용
const detailRef = useRef(null);
- // ✅ selected 계산 안정화
- const selected = useMemo(() => {
- if (!rows.length) return null;
- const found = rows.find((r) => r.id === selectedId);
- return found ?? rows[0];
- }, [rows, selectedId]);
+ const [isLoginStorageInfo, setIsLoginStorageInfo] = useState(false);
+ const [selectedDmdInfoSn, setSelectedDmdInfoSn] = useState(null);
+ const [transformedSdmInfoStatusList, setTransformedSdmInfoStatusList] = useState([]);
- // ✅ rows가 바뀌었는데 selectedId가 null이면 자동 첫번째 선택
useEffect(() => {
- const first = rows[0];
- if (!first) return; // ✅ rows가 비어있으면 종료 (TS + 런타임 안전)
+ const user = sessionStorage.getItem("user");
+ if (user) {
+ setIsLoginStorageInfo(true);
+ }
+ }, []);
- if (selectedId == null) setSelectedId(first.id);
- }, [rows, selectedId]);
+ useEffect(() => {
+ if (!successLogin && !isLoginStorageInfo) return;
+
+ const user = sessionStorage.getItem("user");
+ if (!user) return;
+
+ try {
+ const userData = JSON.parse(user) as SessionUser;
+ const dmdInfoId = userData.dmdInfoId?.trim();
+ if (dmdInfoId) {
+ getSdmInfoStatusList(dmdInfoId);
+ }
+ } catch (error) {
+ console.error("Error parsing user data:", error);
+ }
+ }, [successLogin, isLoginStorageInfo, getSdmInfoStatusList]);
+
+ useEffect(() => {
+ const mappedList = sdmInfoStatusList.map((item) => ({
+ ...item,
+ ctpvCd: selectSidoData.find((sido) => sido.val === item.ctpvCd?.trim())?.text || item.ctpvCd,
+ sggCd: selectSigunData.find((sigun) => sigun.val === item.sggCd?.trim())?.text || item.sggCd,
+ }));
+
+ setTransformedSdmInfoStatusList(mappedList);
+ }, [sdmInfoStatusList, selectSidoData, selectSigunData]);
+
+ useEffect(() => {
+ const first = transformedSdmInfoStatusList[0];
+ if (!first) {
+ setSelectedDmdInfoSn(null);
+ return;
+ }
+
+ if (selectedDmdInfoSn == null) {
+ setSelectedDmdInfoSn(first.dmdInfoSn);
+ return;
+ }
+
+ const exists = transformedSdmInfoStatusList.some(
+ (item) => item.dmdInfoSn === selectedDmdInfoSn,
+ );
+ if (!exists) {
+ setSelectedDmdInfoSn(first.dmdInfoSn);
+ }
+ }, [transformedSdmInfoStatusList, selectedDmdInfoSn]);
+
+ const selectedSdmInfoStatus = useMemo(() => {
+ if (!transformedSdmInfoStatusList.length) return null;
+ return (
+ transformedSdmInfoStatusList.find((item) => item.dmdInfoSn === selectedDmdInfoSn) ??
+ transformedSdmInfoStatusList[0]
+ );
+ }, [transformedSdmInfoStatusList, selectedDmdInfoSn]);
- // ✅ 상단 2행(요구시기/요구수량/사용용도/희망단가) - TS 안전하게 object로 구성
const topFields: TopField[] = useMemo(() => {
- if (!selected) return [];
- return [
- { label: "요구시기", value: selected.detail.reqDate, required: true },
- { label: "요구수량(㎡/d)", value: selected.detail.reqQty },
- { label: "사용용도", value: selected.detail.usePurpose },
- { label: "희망단가(원)", value: selected.detail.price },
- ];
- }, [selected]);
+ if (!selectedSdmInfoStatus) return [];
+
+ return [
+ { label: "요구시기", value: formatDate(selectedSdmInfoStatus.dmndTmng), required: true },
+ { label: "요구수량(㎥/d)", value: formatValue(selectedSdmInfoStatus.dmndQty) },
+ { label: "사용용도", value: formatValue(selectedSdmInfoStatus.useUsgCd) },
+ { label: "희망단가(원/㎥)", value: formatValue(selectedSdmInfoStatus.wntUntprc) },
+ ];
+ }, [selectedSdmInfoStatus]);
- // ✅ 수질 항목 - TS 안전
const waterFields: PairField[] = useMemo(() => {
- if (!selected) return [];
- const w = selected.detail.water;
+ if (!selectedSdmInfoStatus) return [];
+
return [
- { label: "총대장균군수(개/100mℓ)", value: w.coliform },
- { label: "결합잔류염소(mg/L)", value: "-" },
- { label: "탁도(NTU)", value: w.turbidity },
+ { label: "총대장균군수(개/100mL)", value: formatBelow(selectedSdmInfoStatus.grssClfg) },
+ { label: "결합잔류염소(mg/L)", value: formatBelow(selectedSdmInfoStatus.combResdch) },
+ { label: "탁도(NTU)", value: formatBelow(selectedSdmInfoStatus.trbt) },
- { label: "생물화학적산소요구량(BOD)(mg/L)", value: w.bdo },
- { label: "냄새", value: w.odor },
- { label: "색도(도)", value: w.color },
+ { label: "생물학적산소요구량(BOD)(mg/L)", value: formatBelow(selectedSdmInfoStatus.blgcOxygDmndQnt) },
+ { label: "냄새", value: formatValue(selectedSdmInfoStatus.smll) },
+ { label: "색도(도)", value: formatBelow(selectedSdmInfoStatus.crmty) },
- { label: "총질소(T-N)(mg/L)", value: w.tn },
- { label: "총인(T-P)(mg/L)", value: w.tp },
- { label: "수소이온농도(pH)", value: w.ph },
+ { label: "총질소(T-N)(mg/L)", value: formatBelow(selectedSdmInfoStatus.tn) },
+ { label: "총인(T-P)(mg/L)", value: formatBelow(selectedSdmInfoStatus.tph) },
+ { label: "수소이온농도(pH)", value: formatValue(selectedSdmInfoStatus.ph) },
- { label: "염화물(mgCL/L)", value: w.cl },
- { label: "전기전도도(µs/cm)", value: w.conductivity },
- { label: "비고", value: w.note },
+ { label: "염화물(mgCL/L)", value: formatBelow(selectedSdmInfoStatus.clIonQnt) },
+ { label: "전기전도도(μS/cm)", value: formatBelow(selectedSdmInfoStatus.cdtnv) },
+ { label: "비고", value: formatValue(selectedSdmInfoStatus.rmrk) },
];
- }, [selected]);
+ }, [selectedSdmInfoStatus]);
- const onSelectRow = (id: number) => {
- setSelectedId(id);
+ const candidateNames = useMemo(() => {
+ const list = selectedSdmInfoStatus?.splyCndtList ?? [];
+ return [
+ list[0]?.ruseUtztnFcltNm ?? "",
+ list[1]?.ruseUtztnFcltNm ?? "",
+ list[2]?.ruseUtztnFcltNm ?? "",
+ ];
+ }, [selectedSdmInfoStatus]);
- // ✅ “행 클릭 → 아래 상세로 보여짐” 체감 확실히: 상세영역으로 이동
- // (사용자가 이미 아래를 보고 있다면 거의 움직이지 않음)
+ const onSelectSdmInfoStatus = (dmdInfoSn: number | "") => {
+ setSelectedDmdInfoSn(dmdInfoSn);
requestAnimationFrame(() => {
detailRef.current?.scrollIntoView({ behavior: "smooth", block: "start" });
});
@@ -181,158 +159,182 @@ export default function DemandStatusPage() {
return (
- {/* 서브 타이틀 + 브레드크럼 */}
-
+
- {/* 컨텐츠 영역 */}
-
- {/* 리스트 테이블 */}
-
- 수요정보 신청현황
+
+
+ 수요정보 신청현황
-
-
-
-
- | NO. |
- 시도 |
- 시군구 |
- 회사명 |
- 공장주소 |
- 전화번호 |
- 신청일자 |
- 진행상태 |
-
-
+
+
+
+
+ | NO. |
+ 시도 |
+ 시군구 |
+ 회사명 |
+ 공장주소 |
+ 전화번호 |
+ 신청일자 |
+ 진행상태 |
+
+
-
- {rows.length === 0 ? (
-
- |
- 조회된 신청내역이 없습니다.
- |
-
- ) : (
- rows.map((r) => {
- const active = r.id === selected?.id;
- return (
- onSelectRow(r.id)}
- onKeyDown={(e) => {
- if (e.key === "Enter" || e.key === " ") onSelectRow(r.id);
- }}
- className={[
- "border-t border-neutral-200 outline-none",
- "cursor-pointer",
- active ? "bg-slate-50" : "hover:bg-slate-50",
- "focus-visible:ring-2 focus-visible:ring-slate-300",
- ].join(" ")}
- aria-selected={active}
- >
- | {r.id} |
- {r.sido} |
- {r.sigungu} |
- {r.company} |
- {r.address} |
- {r.phone} |
- {r.date} |
-
-
- |
-
- );
- })
- )}
-
-
-
-
+
+ {transformedSdmInfoStatusList.length === 0 ? (
+
+ |
+ 조회된 신청내역이 없습니다.
+ |
+
+ ) : (
+ transformedSdmInfoStatusList.map((sdmInfoStatus, index) => {
+ const active = sdmInfoStatus.dmdInfoSn === selectedSdmInfoStatus?.dmdInfoSn;
+ return (
+ onSelectSdmInfoStatus(sdmInfoStatus.dmdInfoSn)}
+ onKeyDown={(e) => {
+ if (e.key === "Enter" || e.key === " ") {
+ onSelectSdmInfoStatus(sdmInfoStatus.dmdInfoSn);
+ }
+ }}
+ className={[
+ "border-t border-neutral-200 outline-none",
+ "cursor-pointer",
+ active ? "bg-slate-50" : "hover:bg-slate-50",
+ "focus-visible:ring-2 focus-visible:ring-slate-300",
+ ].join(" ")}
+ aria-selected={active}
+ >
+ | {sdmInfoStatus.index || index + 1} |
+ {formatValue(sdmInfoStatus.ctpvCd)} |
+ {formatValue(sdmInfoStatus.sggCd)} |
+ {formatValue(sdmInfoStatus.dmdCoNm)} |
+ {formatValue(sdmInfoStatus.daddr)} |
+ {formatValue(sdmInfoStatus.telno)} |
+ {formatDate(sdmInfoStatus.dmndTmng)} |
+
+
+ |
+
+ );
+ })
+ )}
+
+
+
+
- {/* 상세현황 */}
-
+
+
- {!selected ? (
-
- 상세 정보를 표시할 신청건이 없습니다.
-
- ) : (
-
-
- 요구수량
+ {!selectedSdmInfoStatus ? (
+
+ 상세 정보를 표시할 신청건이 없습니다.
+
+ ) : (
+
+
+ 요구수량
+
+
+
+ {topFields.map((field) => (
+
+
+ {field.label}
+ {field.required ? * : null}
+
+
+ {field.value}
+
+
+ ))}
+
+
+ 요구수질
-
- {/* 상단 2행 */}
- {topFields.map((f) => (
-
-
- {f.label}
- {f.required ? * : null}
-
-
- {f.value}
-
+ {waterFields.map((field) => (
+
+
+ {field.label}
- ))}
+
+ {field.value}
+
+
+ ))}
- {/* 수질 */}
-
- 요구수질
-
-
- {waterFields.map((f) => (
-
-
- {f.label}
-
-
- {f.value}
-
-
- ))}
-
- {/* 공급처 후보지 */}
-
- 공급처 후보지
-
-
- {selected.detail.candidates.map((v, i) => (
-
-
- 후보지{i + 1}
-
-
- {v}
-
-
- ))}
+
+ 공급처 후보지
+
+ {candidateNames.map((candidateName, index) => (
+
+
+ 후보지{index + 1}
+
+
+ {candidateName}
+
+
+ ))}
+
+
+ 수요신청 진행상태
- )}
-
-
+
+
+
+ 진행상태
+
+
+ {formatValue(selectedSdmInfoStatus.status)}
+
+
+
+
+ 공급처매칭결과
+
+
+ {formatValue(selectedSdmInfoStatus.ruseUtztnFcltNm)}
+
+
+
+
+ )}
+
+
);
}
diff --git a/apps/dm_new/app/(with-layout)/intro/greywater/page.tsx b/apps/dm_new/app/(with-layout)/intro/greywater/page.tsx
index 54f4ef682..fec020ece 100644
--- a/apps/dm_new/app/(with-layout)/intro/greywater/page.tsx
+++ b/apps/dm_new/app/(with-layout)/intro/greywater/page.tsx
@@ -1,7 +1,11 @@
// apps/dm/app/(landing)/reuse/intro/greywater/page.tsx
"use client";
+import Image, { type StaticImageData } from "next/image";
import SubPageHeader from "@/components/SubPageHeader";
+import greywaterIntro from "@/public/images/landing/intro/greywater_intro.png";
+import greywaterMandatory from "@/public/images/landing/intro/greywater_mandatory.png";
+import greywaterStandard from "@/public/images/landing/intro/greywater_standard.png";
function SectionTitle({ children }: { children: React.ReactNode }) {
return (
@@ -21,17 +25,18 @@ function Hr({ className = "" }: HrProps) {
}
type ImgCardProps = {
- src: string;
+ src: StaticImageData;
alt: string;
};
function ImgCard({ src, alt }: ImgCardProps) {
return (
-
);
@@ -58,7 +63,7 @@ export default function GreywaterPage() {
@@ -68,7 +73,7 @@ export default function GreywaterPage() {
@@ -78,7 +83,7 @@ export default function GreywaterPage() {
diff --git a/apps/dm_new/app/(with-layout)/intro/law/page.tsx b/apps/dm_new/app/(with-layout)/intro/law/page.tsx
index 32728806b..0d903a32a 100644
--- a/apps/dm_new/app/(with-layout)/intro/law/page.tsx
+++ b/apps/dm_new/app/(with-layout)/intro/law/page.tsx
@@ -1,7 +1,14 @@
// apps/dm/app/(landing)/reuse/intro/law/page.tsx
"use client";
+import Image, { type StaticImageData } from "next/image";
import SubPageHeader from "@/components/SubPageHeader";
+import lawTimeline from "@/public/images/landing/intro/law_timeline.png";
+import performanceLeft from "@/public/images/landing/intro/performance_left.png";
+import domesticTextbox from "@/public/images/landing/intro/domestic_textbox.png";
+import policyTimeline from "@/public/images/landing/intro/policy_timeline.png";
+import relNote from "@/public/images/landing/intro/rel_note.png";
+import linkage from "@/public/images/landing/intro/linkage.png";
function SectionTitle({ children }: { children: React.ReactNode }) {
return (
@@ -21,17 +28,18 @@ function Hr({ className = "" }: HrProps) {
}
type ImgCardProps = {
- src: string;
+ src: StaticImageData;
alt: string;
};
function ImgCard({ src, alt }: ImgCardProps) {
return (
-
);
@@ -58,7 +66,7 @@ export default function WaterReuseLawPage() {
@@ -68,7 +76,7 @@ export default function WaterReuseLawPage() {
@@ -78,7 +86,7 @@ export default function WaterReuseLawPage() {
@@ -88,7 +96,7 @@ export default function WaterReuseLawPage() {
@@ -98,7 +106,7 @@ export default function WaterReuseLawPage() {
@@ -114,7 +122,7 @@ export default function WaterReuseLawPage() {
• 물관리 계획(국가수도기본계획, 국가 및 유역하수도종합계획, 하천유역수자원관리계획 등)과의 연계성 확보 → 통합적인 관점에서 물이용 체계 구축 필요
-
+
diff --git a/apps/dm_new/app/(with-layout)/intro/layout.tsx b/apps/dm_new/app/(with-layout)/intro/layout.tsx
index 91e9e2e54..e025f4c80 100644
--- a/apps/dm_new/app/(with-layout)/intro/layout.tsx
+++ b/apps/dm_new/app/(with-layout)/intro/layout.tsx
@@ -5,7 +5,9 @@ export default function IntroLayout({ children }: { children: ReactNode }) {
return (
- {children}
+
+ {children}
+
);
}
diff --git a/apps/dm_new/app/(with-layout)/intro/rain/page.tsx b/apps/dm_new/app/(with-layout)/intro/rain/page.tsx
index 0fc3b1de9..3f88d7f58 100644
--- a/apps/dm_new/app/(with-layout)/intro/rain/page.tsx
+++ b/apps/dm_new/app/(with-layout)/intro/rain/page.tsx
@@ -1,7 +1,12 @@
// apps/dm/app/(landing)/reuse/intro/law/page.tsx
"use client";
+import Image, { type StaticImageData } from "next/image";
import SubPageHeader from "@/components/SubPageHeader";
+import rainreuseIntro from "@/public/images/landing/intro/rainreuse_intro.png";
+import rainreuseMandatory from "@/public/images/landing/intro/rainreuse_mandatory.png";
+import rainwaterDesign from "@/public/images/landing/intro/rainwater_design.png";
+import rainwaterStandards from "@/public/images/landing/intro/rainwater_standards.png";
function SectionTitle({ children }: { children: React.ReactNode }) {
return (
@@ -21,17 +26,18 @@ function Hr({ className = "" }: HrProps) {
}
type ImgCardProps = {
- src: string;
+ src: StaticImageData;
alt: string;
};
function ImgCard({ src, alt }: ImgCardProps) {
return (
-
);
@@ -58,7 +64,7 @@ export default function RainwaterReusePage() {
@@ -68,7 +74,7 @@ export default function RainwaterReusePage() {
@@ -78,7 +84,7 @@ export default function RainwaterReusePage() {
@@ -88,7 +94,7 @@ export default function RainwaterReusePage() {
diff --git a/apps/dm_new/app/(with-layout)/intro/sewage/page.tsx b/apps/dm_new/app/(with-layout)/intro/sewage/page.tsx
index c6e355ed9..526fd4e9c 100644
--- a/apps/dm_new/app/(with-layout)/intro/sewage/page.tsx
+++ b/apps/dm_new/app/(with-layout)/intro/sewage/page.tsx
@@ -1,7 +1,10 @@
// apps/dm/app/(landing)/reuse/intro/treated/page.tsx
"use client";
+import Image, { type StaticImageData } from "next/image";
import SubPageHeader from "@/components/SubPageHeader";
+import treatedwaterIntro from "@/public/images/landing/intro/treatedwater_intro.png";
+import treatedwaterMandatory from "@/public/images/landing/intro/treatedwater_mandatory.png";
function SectionTitle({ children }: { children: React.ReactNode }) {
return (
@@ -21,17 +24,18 @@ function Hr({ className = "" }: HrProps) {
}
type ImgCardProps = {
- src: string;
+ src: StaticImageData;
alt: string;
};
function ImgCard({ src, alt }: ImgCardProps) {
return (