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 3676b4f71..6c6abd4c0 100644 Binary files a/apps/wr/public/sample_ruseCaseMng.xlsx and b/apps/wr/public/sample_ruseCaseMng.xlsx differ