From 70b941c081183eec7f54e3396390630a3ceca240 Mon Sep 17 00:00:00 2001 From: ljpark Date: Thu, 2 Apr 2026 16:14:54 +0900 Subject: [PATCH] =?UTF-8?q?wr:=20=EC=82=AC=EC=9A=A9=EC=9A=A9=EB=8F=84-WR01?= =?UTF-8?q?8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../matMng/coMat/ruseCaseMng/page.tsx | 19 +++++++++++++-- .../matMng/coMat/ruseRvwHstry/page.tsx | 5 +++- apps/wr/components/lib/func/common.tsx | 18 +++++++++++++- .../ruseCaseMng/ruseCaseMngExcelModal.tsx | 23 ++++++++++++++++-- apps/wr/public/sample_ruseCaseMng.xlsx | Bin 20272 -> 20846 bytes 5 files changed, 59 insertions(+), 6 deletions(-) diff --git a/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx b/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx index 01b0ccec5..542f66844 100644 --- a/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx +++ b/apps/wr/app/(with-layout)/matMng/coMat/ruseCaseMng/page.tsx @@ -44,6 +44,7 @@ export default function RuseCaseMng() { const [selectUtz, setSelectUtz] = useState(""); const [name, setName] = useState(""); const [resetPage, isResetPage] = useState(false); + const [displayRuseCaseMngList, setDisplayRuseCaseMngList] = useState(ruseCaseMngList); const { t } = useTranslation("base"); const alert = useAlertStore((state) => state.setMessage); @@ -56,6 +57,19 @@ export default function RuseCaseMng() { ruseCaseMngInit(); }, []); + useEffect(() => { + const sewageOutUseCodeList = code.sewageOutFclttUse ?? []; + + setDisplayRuseCaseMngList( + ruseCaseMngList.map((item) => ({ + ...item, + grnteWqUsg: + sewageOutUseCodeList.find((codeItem) => codeItem.val === item.grnteWqUsg)?.text ?? + item.grnteWqUsg, + })) + ); + }, [code.sewageOutFclttUse, ruseCaseMngList]); + // 시도 선택 const getSelCity = (val: string | number) => { const cityValue = String(val); @@ -133,7 +147,8 @@ export default function RuseCaseMng() { item.ruseFcltUsg, item.ruseFcltSplyCpct, item.ruseFcltPrcsMsrc, - item.grnteWqUsg, + code.sewageOutFclttUse.find((codeItem) => codeItem.val === item.grnteWqUsg)?.text ?? + item.grnteWqUsg, item.grnteWqGrssClfg, item.grnteWqCombResdch, item.grnteWqTrbt, @@ -313,7 +328,7 @@ export default function RuseCaseMng() {
codeItem.val === item.useUsgCd)?.text ?? + item.useUsgCd, dmndTmng: item?.dmndTmng ? moment(item?.dmndTmng).format("YYYY-MM-DD") : "없음", @@ -232,7 +235,7 @@ export default function RuseRvwHstry() { setRvwHistData(tableData(data, { code })); } - }, [rvwHistRes]); + }, [code.sewageOutFclttUse, rvwHistRes]); return ( diff --git a/apps/wr/components/lib/func/common.tsx b/apps/wr/components/lib/func/common.tsx index e8a034b62..1d9d4a43e 100644 --- a/apps/wr/components/lib/func/common.tsx +++ b/apps/wr/components/lib/func/common.tsx @@ -94,6 +94,22 @@ export const excelDownload = ( if (!response.ok) { throw Error(response.statusText); } + + const isTemplateOnlyDownload = + excelList.length === 1 && + Array.isArray(excelList[0]) && + excelList[0].length === 0; + + if (isTemplateOnlyDownload) { + const blob = await response.blob(); + const link = document.createElement("a"); + link.href = URL.createObjectURL(blob); + link.download = fileNm.endsWith(".xlsx") ? fileNm : `${fileNm}.xlsx`; + link.click(); + URL.revokeObjectURL(link.href); + return; + } + // 받은 파일 바인너리 처리 const blobRet = await response.arrayBuffer(); // 버퍼에 있는 엑셀데이터 전달 후 json으로 변환 @@ -406,4 +422,4 @@ export function handleLaeSeCdChange( isCityCd, isSggCd: [{ text: "전체", val: "0" }, ...sggOrdered], }; -} \ No newline at end of file +} diff --git a/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx b/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx index bbcc9497b..8f0445cd6 100644 --- a/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx +++ b/apps/wr/components/ui/modal/coMat/ruseCaseMng/ruseCaseMngExcelModal.tsx @@ -12,13 +12,14 @@ import { useForm } from "react-hook-form"; import type { z } from "zod"; export default function RuseCaseMngExcel({setIsExcelOpen}:{setIsExcelOpen: (isOpen:boolean)=>void}) { - const { insertRuseCaseMng } = useWrStore((state) => state); + const { insertRuseCaseMng, code } = useWrStore((state) => state); const alert = useAlertStore((state) => state.setMessage); const form = useForm>({ resolver: zodResolver(coRegExcel), }); const [file, setFiles] = useState(); + const sewageOutUseCodeList = code.sewageOutFclttUse ?? []; const onSubmit = () => { if (file) { @@ -125,7 +126,25 @@ export default function RuseCaseMngExcel({setIsExcelOpen}:{setIsExcelOpen: (isOp if(parsingExcel.ok&&parsingExcel.value){ - newArray.push(parsingExcel.value); + const parsedValue = { ...parsingExcel.value }; + const usageText = parsedValue.grnteWqUsg?.toString().trim(); + + if (usageText) { + const usageCode = sewageOutUseCodeList.find( + (codeItem) => codeItem.text.trim() === usageText + )?.val; + + if (!usageCode) { + isError.push([ + `${parsedValue.ruseBizNm || "행"} => [보증수질_용도별] '${usageText}' 에 해당하는 WR018 코드가 없습니다.`, + ]); + return; + } + + parsedValue.grnteWqUsg = usageCode; + } + + newArray.push(parsedValue); }else if(parsingExcel.errors){ isError.push(parsingExcel.errors); } diff --git a/apps/wr/public/sample_ruseCaseMng.xlsx b/apps/wr/public/sample_ruseCaseMng.xlsx index 3676b4f71f972b6d877a9f03946a2c5af8cd5b0e..6c6abd4c0d39cc29185b3d3734b9cfe14d1c2612 100644 GIT binary patch delta 13778 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