From c2d471c5a2d57c77b5d3f64d683cf4c41af84fc6 Mon Sep 17 00:00:00 2001 From: jyha00 Date: Wed, 4 Jun 2025 09:27:59 +0900 Subject: [PATCH] =?UTF-8?q?=EC=88=98=EC=9A=94=EB=A7=A4=EC=B9=AD=EA=B2=80?= =?UTF-8?q?=ED=86=A0=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EB=A7=8C=EB=93=9C?= =?UTF-8?q?=EB=8A=94=EC=A4=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/app/matMng/matDmd/coMatRvw/page.tsx | 69 +++++++++++ apps/wr/app/page.tsx | 12 ++ .../prfmncReg/pbnstPrfmncReg/page.tsx | 23 +++- .../wr/app/store/matDmd/coMatRvw/headList.tsx | 109 ++++++++++++++++++ apps/wr/app/store/matDmd/coMatRvw/index.tsx | 34 ++++++ .../store/prfmncReg/pbnstPrfmncReg/index.tsx | 4 +- apps/wr/app/store/store.tsx | 9 +- apps/wr/public/sample_pbnstPrfmncReg.xlsx | Bin 0 -> 13777 bytes 8 files changed, 251 insertions(+), 9 deletions(-) create mode 100644 apps/wr/app/matMng/matDmd/coMatRvw/page.tsx create mode 100644 apps/wr/app/store/matDmd/coMatRvw/headList.tsx create mode 100644 apps/wr/app/store/matDmd/coMatRvw/index.tsx create mode 100644 apps/wr/public/sample_pbnstPrfmncReg.xlsx diff --git a/apps/wr/app/matMng/matDmd/coMatRvw/page.tsx b/apps/wr/app/matMng/matDmd/coMatRvw/page.tsx new file mode 100644 index 000000000..4b2dfcef8 --- /dev/null +++ b/apps/wr/app/matMng/matDmd/coMatRvw/page.tsx @@ -0,0 +1,69 @@ +"use client"; + +import { useWrStore } from "@/app/store"; +import { ContentsDiv, ScrollArea, SearchDiv, SearchFormLeft, SearchFormRight, SearchInput, Title, UiTable } from "@common/business_components/ui"; +import ListDiv from "@common/business_components/ui/list_div"; +import { Button, Label } from "@common/components/ui"; + + +export default function coMatRvw() { + const { code, coRvw, } = useWrStore((state) => state); + const { coRvwHeadList, } = coRvw; + return ( + <> + +
+
+ + <SearchDiv> + <SearchFormLeft> + + <div className="col-span-2 flex flex-row space-x-2"> + <Label className="w-28 mt-2 text-xl text-gray-600">{'시설명'}</Label> + <SearchInput + className={"w-full text-2xl"} + label="" + textValue={""} + setText={(e) => { + }} + /> + </div> + </SearchFormLeft> + <SearchFormRight + className="w-2/12 mx-5 flex flex-col items-center justify-center space-x-2 "> + <div className="space-y"> + <div className="flex flex-row space-x-2"> + <Button + size={"sm"} + onClick={(e) => { }} + > + 조회 + </Button> + </div> + </div> + </SearchFormRight> + </SearchDiv> + </div> + </div> + + <div className="grid grid-cols-6 gap-4 "> + <div className="col-span-6"> + <ListDiv> + <UiTable + headName={[]} + tableData={[]} + children={undefined} + headlist={coRvwHeadList} + pageSize={20} + total={100000} + cellClick={(index: number | undefined, headId: string) => { + }} + onPageChange={() => { }} + ></UiTable> + </ListDiv> + </div> + </div> + </ContentsDiv> + </> + ) +} \ No newline at end of file diff --git a/apps/wr/app/page.tsx b/apps/wr/app/page.tsx index a4955b36a..a6f5856c3 100644 --- a/apps/wr/app/page.tsx +++ b/apps/wr/app/page.tsx @@ -119,6 +119,18 @@ export default function Home() { </div> </div> </div> + + {/* 수요처 매칭 */} + <div> + <h2 className="text-xl font-semibold mb-4">수요처 매칭</h2> + <div className="grid grid-cols-12 gap-4"> + <div className="col-span-2"> + <Button className="w-full"> + <Link href="matMng/matDmd/coMatRvw">수요처 매칭 검토</Link> + </Button> + </div> + </div> + </div> </div> </> ); diff --git a/apps/wr/app/ruseFcltMng/prfmncReg/pbnstPrfmncReg/page.tsx b/apps/wr/app/ruseFcltMng/prfmncReg/pbnstPrfmncReg/page.tsx index e3f3e9fe9..2d29672b3 100644 --- a/apps/wr/app/ruseFcltMng/prfmncReg/pbnstPrfmncReg/page.tsx +++ b/apps/wr/app/ruseFcltMng/prfmncReg/pbnstPrfmncReg/page.tsx @@ -2,34 +2,45 @@ import { useWrStore } from "@/app/store"; import type { pubHasuType } from "@/app/store/ruseFcltMng/fcltReg/pbnstReg/type"; -import { yearOptions } from "@/components/lib/func/commom"; +import { excelDownload, yearOptions } from "@/components/lib/func/commom"; import { ContentsDiv, Title, SearchDiv, SearchFormLeft, SelectBox, SearchInput, SearchFormRight, ScrollArea, UiTable } from "@common/business_components/ui"; import ListDiv from "@common/business_components/ui/list_div"; import { Button, Label } from "@common/components/ui"; -import { useState, useEffect } from "react"; +import { useState, useEffect, useCallback } from "react"; export default function prfmncPrfmncReg() { const { code, prfmnc, prfmncHasuInit, searchFclts, } = useWrStore((state) => state); - const { pbnstPrfmncHeadList, monthHeadList,prfmncRes } = prfmnc; + const { pbnstPrfmncHeadList, monthHeadList, prfmncRes } = prfmnc; const [bdstTable, setbdstTable] = useState<pubHasuType[]>(); const [searchTxt, setSearchTxt] = useState<string>(); const [searchYear, setSearchYear] = useState<string>(String(new Date().getFullYear())); + const excelClick = useCallback(() => { + console.log("dd") + excelDownload( + prfmnc.excelList, + "하수재이용실적", + "sample_pbnstPrfmncReg.xlsx", + "A1:O1" + ); + }, [prfmnc.excelList]) + useEffect(() => { if (!prfmnc.isInit) { prfmncHasuInit("1", "11"); } }, [prfmnc.isInit, prfmncHasuInit]); useEffect(() => { + setbdstTable(prfmncRes) console.log("prfmnc.prfmncRes", prfmncRes) - },[prfmncRes]); + }, [prfmncRes]); return ( <> <ContentsDiv> <div className="grid grid-cols-4 gap-4"> <div className="col-span-4"> - <Title title={"하수재이용 시설 등록"} /> + <Title title={"하수재이용실적 등록"} /> <SearchDiv> <SearchFormLeft> <div className="col-span-2 flex flex-row space-x-2"> @@ -79,7 +90,7 @@ export default function prfmncPrfmncReg() { > 파일등록 </Button> - <Button color="green" size={"sm"} onClick={() => { }}> + <Button color="green" size={"sm"} onClick={excelClick}> 양식받기 </Button> </div> diff --git a/apps/wr/app/store/matDmd/coMatRvw/headList.tsx b/apps/wr/app/store/matDmd/coMatRvw/headList.tsx new file mode 100644 index 000000000..906c97047 --- /dev/null +++ b/apps/wr/app/store/matDmd/coMatRvw/headList.tsx @@ -0,0 +1,109 @@ +import { z } from "zod"; +import type { CommonTableProps } from "../../common/type/headder"; + +export const sttnHeadListType = z.array( + z.object({ + id: z.string(), + title: z.string(), + visible: z.boolean(), + }) +); + +export const coRvwHeadListExport: z.infer<typeof sttnHeadListType> = [ + { + id: "ctpv", + title: "시도", + visible: true, + }, + { + id: "sgg", + title: "시군구", + visible: true, + }, + { + id: "coNm", + title: "회사명", + visible: true, + }, + { + id: "addr", + title: "공장주소", + visible: true, + }, + { + id: "telNo", + title: "전화번호", + visible: true, + }, + { + id: "regDt", //바꾸기 + title: "신청일자", + visible: true, + }, + { + id: "state", //바꾸기 + title: "진행상태", + visible: true, + }, +]; + + +// id는 다확인해야함 +export const coRvwNodeListExport: CommonTableProps[] = [ + { + id: "ctpv", + title: "시도", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + }, + { + id: "sgg", + title: "시군구", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + }, + { + id: "coNm", + title: "회사명", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + }, + { + id: "addr", + title: "공장주소", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + },{ + id: "telNo", + title: "전화번호", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + }, + { + id: "regDt", //바꾸기 + title: "신청일자", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + }, + { + id: "state", //바꾸기 + title: "진행상태", + visible: true, + row: 1, + rowSpan: 1, + colSpan: 1, + }, + +]; \ No newline at end of file diff --git a/apps/wr/app/store/matDmd/coMatRvw/index.tsx b/apps/wr/app/store/matDmd/coMatRvw/index.tsx new file mode 100644 index 000000000..6e62da829 --- /dev/null +++ b/apps/wr/app/store/matDmd/coMatRvw/index.tsx @@ -0,0 +1,34 @@ +import type { z } from "zod"; +import type { sttnHeadListType } from "../coSttn/headList"; +import { coRvwHeadListExport, coRvwNodeListExport } from "./headList"; +import type { CommonTableProps } from "../../common/type/headder"; + +const coRvwHeadList = coRvwHeadListExport; +const coRvwNodeList = coRvwNodeListExport; + +export type coRvwState = { + coRvw: { + isInit: boolean; + coRvwHeadList: z.infer<typeof sttnHeadListType>; + coRvwNodeList: CommonTableProps[]; + + }; +}; + +export const coRvwStateExport: coRvwState = { + coRvw: { + isInit: false, + coRvwHeadList: coRvwHeadList, + coRvwNodeList: coRvwNodeList, + } +} + +export type coRvwType = coRvwState & coRvwActions; + +type coRvwActions = { +}; + +export const coRvwActionsExport: (set: any) => coRvwActions = (set: any) => { + return { + } +} \ No newline at end of file diff --git a/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx b/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx index a726aa463..282c277ec 100644 --- a/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx +++ b/apps/wr/app/store/prfmncReg/pbnstPrfmncReg/index.tsx @@ -15,6 +15,7 @@ export type pbnstPrfmncState = { pbnstPrfmncHeadList: TableUpperProps[]; monthHeadList: TableUpperProps[]; prfmncRes: pubHasuType[]; + excelList: Number[]; } } @@ -24,6 +25,7 @@ export const pbnstPrfmncStateExport: pbnstPrfmncState = { pbnstPrfmncHeadList: pbnstPrfmncHeadList, monthHeadList: monthHeadList, prfmncRes: [], + excelList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], } } @@ -60,7 +62,7 @@ export const pbnstPrfmncActionsExport: (set: any) => pbnstPrfmncActions = (set: prfmncHasuInit: async (page: string, sggOrCity: string) => { try { const prfmncRes = await hasuListFetch(page, sggOrCity); -console.log("prfmncRes", prfmncRes) + console.log("prfmncRes", prfmncRes) return set((state: pbnstPrfmncState) => ({ ...state, prfmnc: { diff --git a/apps/wr/app/store/store.tsx b/apps/wr/app/store/store.tsx index 4bc699604..aa3d19851 100644 --- a/apps/wr/app/store/store.tsx +++ b/apps/wr/app/store/store.tsx @@ -89,6 +89,7 @@ import { coSttnActionsExport, coSttnStateExport, type coSttnState, type coSttnTy import { ldrmntCoSttnActionsExport, ldrmntCoSttnStateExport, type ldrmntCoSttnState, type ldrmntCoSttnType } from "./matDmd/ldrmntCoSttn"; // 옮겨야함 import { searchActions, type comFcltActions, type comFcltState } from "./common/searchCode"; import { pbnstPrfmncActionsExport, pbnstPrfmncStateExport, type pbnstPrfmncState, type pbnstPrfmncType } from "./prfmncReg/pbnstPrfmncReg"; +import { coRvwActionsExport, coRvwStateExport, type coRvwState, type coRvwType } from "./matDmd/coMatRvw"; export type WrStore = comCodeType & pubFacType & @@ -108,7 +109,8 @@ export type WrStore = comCodeType & comFcltActions&comFcltState& coSttnType& // 옮겨야함 ldrmntCoSttnType& // 옮겨야함 - pbnstPrfmncType + pbnstPrfmncType& + coRvwType ; export const StoreZus = ( @@ -129,7 +131,8 @@ export const StoreZus = ( pbnstSttnState& coSttnState& // 옮겨야함 ldrmntCoSttnState& // 옮겨야함 - pbnstPrfmncState + pbnstPrfmncState& + coRvwState = { ...comCodeStateExport, ...pubFacStateExport, @@ -149,6 +152,7 @@ export const StoreZus = ( ...coSttnStateExport, // 옮겨야함 ...ldrmntCoSttnStateExport, // 옮겨야함 ...pbnstPrfmncStateExport, + ...coRvwStateExport, } ) => { return createStore<WrStore>()((set) => { @@ -179,6 +183,7 @@ export const StoreZus = ( ...coSttnActionsExport(set), // 옮겨야함 ...ldrmntCoSttnActionsExport(set), // 옮겨야함 ...pbnstPrfmncActionsExport(set), + ...coRvwActionsExport(set) }; }); }; diff --git a/apps/wr/public/sample_pbnstPrfmncReg.xlsx b/apps/wr/public/sample_pbnstPrfmncReg.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..67f0d559e096443366eeff0f951b5648e422a972 GIT binary patch literal 13777 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 Shv`NDD7@8qS~LD}_WuAe7T<ON literal 0 HcmV?d00001