From 4845450ea55291feb6bb6ca2e23ce8d1592b82b9 Mon Sep 17 00:00:00 2001 From: swcho Date: Tue, 19 Aug 2025 18:23:47 +0900 Subject: [PATCH] =?UTF-8?q?feat,=20refactor:=20-=20=EC=88=98=EC=9A=A9?= =?UTF-8?q?=EA=B0=80-=EB=A7=A8=ED=99=80=20=EB=A7=A4=EC=B9=AD=EA=B2=B0?= =?UTF-8?q?=EA=B3=BC=20=EC=96=91=EC=8B=9D=20=ED=8C=8C=EC=9D=BC=20=EB=8B=A4?= =?UTF-8?q?=EC=9A=B4=EB=A1=9C=EB=93=9C=20=EA=B8=B0=EB=8A=A5=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20=ED=8C=8C=EC=9D=BC=20=EB=8B=A4=EC=9A=B4?= =?UTF-8?q?=EB=A1=9C=EB=93=9C=20=EB=B2=84=ED=8A=BC=20=EC=83=89=EC=83=81=20?= =?UTF-8?q?green=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../map/searchModal/searchModal.tsx | 6 +- .../(with-base-layout)/ii/irsetting/page.tsx | 83 ++++++++++-------- .../app/(with-base-layout)/ii/rdii/page.tsx | 26 ++++-- .../(with-base-layout)/oper/floodPre/page.tsx | 2 +- .../(with-base-layout)/oper/oldPp/page.tsx | 2 +- apps/sn/app/components/ui/formSection.tsx | 5 +- .../manhole-consumer-matching-template.xlsx | Bin 0 -> 10087 bytes 7 files changed, 70 insertions(+), 54 deletions(-) create mode 100644 apps/sn/public/samples/manhole-consumer-matching-template.xlsx diff --git a/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx b/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx index 8b38d232d..61f7f5acf 100644 --- a/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx +++ b/apps/sn/app/(map-layout)/map/searchModal/searchModal.tsx @@ -1084,7 +1084,7 @@ const SearchModal: React.FC = ({ resetPageNo={isResetPage} resetSelection={isResetSelection} headButton={ - + } /> @@ -1112,7 +1112,7 @@ const SearchModal: React.FC = ({ resetPageNo={isResetPage} resetSelection={isResetSelection} headButton={ - + } /> @@ -1138,7 +1138,7 @@ const SearchModal: React.FC = ({ resetPageNo={isResetDetailPage} resetSelection={isResetDetailSelection} headButton={ - + } /> diff --git a/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx b/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx index 6af066e4d..1f089fbd6 100644 --- a/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx +++ b/apps/sn/app/(with-base-layout)/ii/irsetting/page.tsx @@ -2,11 +2,11 @@ import { postData } from '@/components/lib/api' import FileUploadForm from '@/components/ui/fileUploadForm' import FormSection from '@/components/ui/formSection' -import { DateMonthPicker, filePicked } from '@common/business_components/ui' +import { DateMonthPicker, filePicked, downloadExcel } from '@common/business_components/ui' import ListDiv from '@common/business_components/ui/list_div' -import { Input } from '@common/components/ui' +import { Input, Button } from '@common/components/ui' import { zodResolver } from '@hookform/resolvers/zod' -import { useState } from 'react' +import { useState, useCallback } from 'react' import { useForm } from 'react-hook-form' import { z } from 'zod' import { excelToFlowRateData, excelToMatchingResultData, excelToTimePatternData, excelToRcptrInfoData } from '@/components/lib/utils' @@ -306,7 +306,7 @@ const IrSetting = () => { : null; const rcptrInfoData = file5?.file ? parsedResults.find(r => r && r.fileName === file5.file?.name)?.parsedData - : null; + : null; // 새로운 JSON 데이터 생성 const combinedAnalysisData = { @@ -342,9 +342,8 @@ const IrSetting = () => { return; } } - // const handleAnalysisClick = () => { - // } - //const rcptrInfoShow = true; + + return ( <> @@ -368,34 +367,7 @@ const IrSetting = () => { onAnalysis={handleAnalysisClick} > {[
- - handleFileSelection(0, file, cd, id)} - showButton={false} - showPreview={true} - accept={".inp"} - fileIdx={0} /> - - - handleFileSelection(1, file, cd, id)} - showButton={false} - showPreview={true} - accept={".xls, .xlsx, .xlsm, .xltx"} - fileIdx={1} /> - - - handleFileSelection(2, file, cd, id)} - showButton={false} - showPreview={true} - accept={".xls, .xlsx, .xlsm, .xltx"} - fileIdx={2} /> - - + {/* 연월 선택 라이브러리로 수정 필요 */} { startYear={1900} // 시작 연도 설정 /> - + handleFileSelection(4, file, cd, id)} @@ -417,7 +389,42 @@ const IrSetting = () => { accept={".xls, .xlsx, .xlsm, .xltx"} fileIdx={4} /> - + + handleFileSelection(0, file, cd, id)} + showButton={false} + showPreview={true} + accept={".inp"} + fileIdx={0} /> + + +
+ handleFileSelection(1, file, cd, id)} + showButton={false} + showPreview={true} + accept={".xls, .xlsx, .xlsm, .xltx"} + fileIdx={1} /> + +
+
+ + handleFileSelection(2, file, cd, id)} + showButton={false} + showPreview={true} + accept={".xls, .xlsx, .xlsm, .xltx"} + fileIdx={2} /> + + { @@ -445,7 +452,7 @@ const IrSetting = () => { placeholder="예: 0.75" /> - + setInput2(e.target.value)} diff --git a/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx b/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx index 7354db6cd..26c49d7c1 100644 --- a/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx +++ b/apps/sn/app/(with-base-layout)/ii/rdii/page.tsx @@ -5,7 +5,7 @@ import FileUploadForm from "@/components/ui/fileUploadForm" import FormSection from "@/components/ui/formSection" import BaseLayout from "../BaseLayout" import { DateMonthPicker, filePicked } from "@common/business_components/ui" -import { Input } from "@common/components/ui" +import { Input, Button } from "@common/components/ui" import { zodResolver } from "@hookform/resolvers/zod" import { Label } from '@radix-ui/react-label' import { useState } from "react" @@ -392,15 +392,16 @@ export default function RTKForm() { > {[
- + - +
+ *
+ *
-
+
handleFileSelection(0, file, cd, id)} @@ -430,7 +432,7 @@ export default function RTKForm() { accept={".inp"} fileIdx={0} />
-
+
handleFileSelection(1, file, cd, id)} @@ -438,8 +440,14 @@ export default function RTKForm() { showPreview={true} accept={".xls, .xlsx, .xlsm, .xltx"} fileIdx={1} /> +
-
+
handleFileSelection(2, file, cd, id)} @@ -448,7 +456,7 @@ export default function RTKForm() { accept={".xls, .xlsx, .xlsm, .xltx"} fileIdx={2} />
- + { @@ -478,7 +486,7 @@ export default function RTKForm() { placeholder="0 ~ 1 사이의 값 입력" /> - + - + {

사업정보 등록현황

- +
diff --git a/apps/sn/app/(with-base-layout)/oper/oldPp/page.tsx b/apps/sn/app/(with-base-layout)/oper/oldPp/page.tsx index efcea5461..7165188ca 100644 --- a/apps/sn/app/(with-base-layout)/oper/oldPp/page.tsx +++ b/apps/sn/app/(with-base-layout)/oper/oldPp/page.tsx @@ -205,7 +205,7 @@ const Page = () => {

사업정보 등록현황

- +
diff --git a/apps/sn/app/components/ui/formSection.tsx b/apps/sn/app/components/ui/formSection.tsx index 384808aee..4f33fbbe5 100644 --- a/apps/sn/app/components/ui/formSection.tsx +++ b/apps/sn/app/components/ui/formSection.tsx @@ -6,12 +6,13 @@ interface FormSectionProps { titleNm: string form: any name: string + required?: boolean } -const FormSection = ({ children, titleNm, form, name }: FormSectionProps) => { +const FormSection = ({ children, titleNm, form, name, required }: FormSectionProps) => { return (
-
{titleNm}
+
{titleNm}{required && *}
hqpDQp)mB(AWT206YKypa6*S1WnpQ007W1000&M9#U7_!QRE( z-o@~Zr=vMgpV`CCmb?HOl0FXr3GV;z@jpBRm2XDu`&iMtG!I`%bZbQ9zbh|?CvGR! zrQU~2^GMX9ZvH|*|J|3)LPfm}zL!SDc2bx2LJ+@dg;rZkWZRbcUi&q*5z>d4D(5qy zN10s7prT5Rn1=W$t~`8{lM~q4COC!G6%%F~${&<8xLl2h9DBXzN(W*U;jhGLx?b*< zL*6YN361n=L(0E!#W&&g2v%hxlv~s6>{Mar(4el#1d^yTC*Q=pz^+qnYrH3uJsh3E z&eN~6BH$M%6S1y@D79lJL*@uWK(AxNJ}0*ffMuZqwU4&4BlfR&_!u2Y#CH{|sG#fuQL>HHGgP7{FwcJcfC4E0g{DpFtW=j^-BSR!B7tdY=xlBa zWMTgG{4YKKhdKGDp;smt6A|`*P7%w^HX{nn%RE5 zkjU)8dh}sZ${JRsqr8 zOg9{iWfvC8WA!66_>smJtF#mxewXV+FWdFC7UWr=9Kt+L#)sT)xKOvCu&#O;N+U6$ zy|8Rg1YjJ-FUFzZO}ZJx2`3IS=3w*g-qO<$yellBl(=l0 z3FEYxV0C4;0Zx&Of^}xBaVOwDMD4gLsIjGmJmZDMmmh87tJko(L7rsO7X%2hf+(JV z>HRqhhTC4rYxwid?-q)l6K{J9?~%U{SICo=a|!u`xsbmbmL~ImkqG=!klvwwvgsoB zF#4ir^_+3+^2B0iWN3aJ{HFh|GQc5Te0{LGRK6LrpJT-aQJtZs z-dK|=u2^%*&QBm0V2Y_9G-fV)5L=qWn8K|Zmz2l1?_dRRsTv0kq#73Vzj929SKTjx z=dP>q1^P_#Es}n#kqC=n6_L}S! zVRf>>M2Ze2AfC22v`PKAJq)*!+CpAkp--vWMV2wdYcoTRBQZUQO&5{pw3DQTT5k)L zVgapJ*>mCr5rfWqg%wl@4pGKr2SkH((yAh~K!yl|g%ojhZHR#^BzqPet2mxncj``0$P^lSmTEy_80Gu>%vx2bI|E zwNp1p;O8SBoAZtiYj+{t9$AqEk4suKh~FmHWzF^F1R)3sQcJChqI0H;9Exa_(A3!$ z6~UnRm;b2oYFa833l!K7>8fnAn8J>+JwWdc88owxjbKu)k_?hQv$Y9$vb{HPW+&ok zXe`eFC8T}6Ibo5YZ8ScD1XUN=Kha&eEODL^STbD5570^+0hu|P3 zeqyw^ibUd2Pr|op#Nr6M>9!Hw=foP}Mz=j;e0l%FjklHbCQd@lT(nVWK7@JGn$P%- zf^F)IgrXFS_^`t5p=XBdA2m^2f@2*LY>>jh+KBxhO$1sQJDZ!Sxj0+fTLOQzT|P6S zas#Z`up3<)Bx2Xuoki&f(M9Q@>>DLP(Qgs#vS3$=xXbn@ilxyVHYR{0#C@XyeO3)V zKZbhlJWU>#xc5bG)_5~b`Jtj4ne@$%nTL2*73&9v;mjH4c`Jb5i-ZiuX0bMXMNAj( zi5DqcEJJSV7pl%V7Oe$FvyXIf1{>Bf)~|HbyBGKyQH%jdGcQfqUV@CoW3?lvjm97I zCea|qYq8g4Fm|54xc<0)x;tZ(i4XF52e)Kf@ z=SmDbZ&W|o3$!vfcLDxx`+vJ(`>*8>iR+E*W5t%dfqD}6@J?C?MHW}%p=?#(gEF~a zfn9wce}nz#-9T*q@yi#-$uHcQ4}xVx7N`k~bM26!JEnM6wWr=IOg*A?yoaB$5tszy zjc1v=GoX}|%HoB0mt`Y7Sx4@oh^8vbZS2ks;Tl<# znobyZd^Lmlg;celj$?hv1nmoZCS=YhLuC2ljf4wi_=Y9Fo(GtS9=TuVy!AzeF0uP% z?BW{XpJu=oE3hIP766DN{55?0&3?I9ncJDO{C56r*vH!XQA9l0zATrokT1U7zO}Gr zIfM1KwOlnzig#5#r(dm?)*c^@-T|ed(<6k6$>(!2`M$VhLMyf-59}`Lu~<#!X1YV_ znu)fvW^zw*fwCSUOeGkfo}cd0ls2@S1Vxqs1JsnXW?aTB<*I{|D2NiwW?X8nyhGcM z90LDp3p6P; z*=}$>%yUgJ89pI*LYiN9arxBX1>vE9zk952CF#&y{`&K+5sD#06TiXuM+RjH+4`O^ z<~va?y-PO)0*-dmP#&Ke&5E5tP5R+5bGH%NK}L*BXC^5g?G>m1XjN*Nt?)bSxM}nm zUWsI6)h#{hBzR1RNX)_f);BM%t($0AjQSQMsmb1ZBrlGNvEkB5xkU-15V`H|(T zNA1D;c9wEQm%cDuZAK$uR*5sx|-rdMXw*e8z_%*eWebo$D z)3-(Mow@EYD5X%a1MQ*?s>6{tiunq-^@uVjI&y+OE(Ppa@}N|EtMFqD%$$ePa|d)p zPjkyxp|+B*&Io?arNQ#vK2R9am)!rj;1-Ta)d*U~PEJ`;2*cpEGRUXLunNLrB)*IJ zYHE7`LJ>pm`Icxr%1eZ_2kW#FuBAUi2St^jk>VzU?3BI=FII}Oer({r620OD>V>1l zgoQ4^J@-{W;mMKa2sFtY5sobTb{Zuk!JX)R;ZnNYt|wANm&X1Q=nnM{g4M~5$odZzB=%vVNbN6)wqcHMjzKH&r%F4-3O z#x*F$F_#f~QAE>Kt^zv2(4vecb&ri>XgezwL*pe>y+f&|LLyf2V_NBhgQQSqN^F!D z1I(j}V_pFw%@4Nv5m({IJQ}x2Pv%%tr zH05@>U2MZ0o2v<9FT$%lWjltsHRraJOsUf}2W;fe)RN_~N$h737}EwJCA9-A6*2oE zdnI(A)7eoO{M9S32X52sn*7r~b=W3<)fzKz6Br)|rmB0%ayRC@WEYN1GN;i|TkP3X zlU)ir4+^M!V5e>zRKQe6idZQ?FF1Wo{bo`rRI07vT;A6VDg zyWeL+e=I>%5lnO%MTNngPU+>FmvL~Wo#z1HVnrcqNw!n8*&pW|>!;eVpj!urq}tOW zFriR!_IbJ;O4EHHI2wFe1S@n9`N>Lax^&)9y0SQ&cosHeUrrQjul4{|oh)`J%xcAD zsP^LBkOyL0|Ce^WX@sm?6v+&fTTPWz>rqL#GkRbvX0`%~38mwqGA57y@}oKTl!SHo zmPT~|d1u`YAvuEsAs>7@fteubcK%dYAiuXA8Zcz6gf44CHXI%7aF4ujxu++G%950j8bG1BFm~A30vOBGP;oDuT!LU6ysGC1RDZkMN0se?7rSqj=*s z;^1lg2@R>ZeVxfez2;5nLzPYbmxp=hMV9ycUq?yOv?Q?KKOV0Y!|kcKo;MMt zc{uI3SqyJcs_`&NO6q|=CNne>rFC~2JCQ&Z00l}f3FoB*=sC-)40?|mk3yyJ8-||K|KOs*l^OilBGn-J_1J;XDpF+flt3 zaDooRMwHE8Y-+53e;lV(rN&o0r3v5Ig6lI)*J_p_D(2z8AZR8IdMGk9vfezKOSyPI(jbL0JbKO1I0gLRBqM^Ez?Ee#28-6P?y6iWOtICjh=+ zQlmKOg$ic>ZZt=OeJv~I@{Scn3M~+|Y~d-utn~UF|2`#WiGV2dSY!DcV>iH@x@0fA z7tdmyfSYWyB;?W%#a;dp4AU9)%VbWR(K)#c{8d4_nIw*~wb8kD5v{%kJMLKX<@pW|z zKf{W$mKJigbN9dEz}KGqfxIYDMb5b0shP77FOk=ouT!!inR#{49>OoO2I&8iW+kSvjf3%m5TS!<<6h35N23frk$BE6+qKJ{j^Gbm;p za^EcZ0&A7mAyRkAHE>6+sE_yyTNrL5*GZ~~S%dA_iXtY)1g@$w0->s%mW81dtnSLF z241}AD+8h~JYIk*8d~(>76gGH1X)7;&e3D6`6|5bjC}DjOmdm@Lyj2WDhIOV&|i(t zjLbFKU*E6$=^CQlsUK%tGn$B2cUNOIlPDm4QI|{TAuXCjBxZs~MPx1u*X+~yK@7*> z>Xm#(LrMTdE#FmSHp8sQfJcXLbKC^k3VtK^5Dq7;&$L_vevd#_H~u8*>_-C6*#wTI z;(QL&4;*yF#0r)TF2^uyy$@^DK7GWtCET5){;XxZ3i4eP9kNemZ=;+XW=qx^iHbmz zzQo8~k5e~UE{hl0z46gm(~dkYGgD|5{k@m03jGG(HmT@p_U`?7Jm0>`!l$LTte-7c zD|LWLFnYklwEqy&@hGq0_m5n`gf-(42e()u0s#1b^L>AMy~(MHz!g^Xu#@Zq|EYaa zB5}DOxFiHK_VIj<>=H6diZLy$Rc9KA{GM)x_^hV#yxF1As`MPZ>di1oo;@{JgO^<(*m)%VjCt7kRenf#?+qdi z=GVY%!$3D+&K(C?7VbrwIBdzWOg(j9oMjL}F7txm%hLmFZP(uE#glOc;)@PjhKIUciT%Xtu>=dQvTtES}DtZa{*R@sD_ z#Xy$h#{b0%B~8=@Mz5XAB?Oh0sie9{C5ufo5SD|W%GBolNL4l~s5z}YQOar1#TzDR zn!iK?Bh~&Zq?+b=ng5A`KbqakLRW<xUXVlGrW9@TVNSO+leK6u#;6bxEt3C4TaxO*^ewU^n1-3W6Nag zOq}1+DO9Oedr|-3&4X-JLw>~{vt-Prt)aDW&>0czmV0BJQTXjxBEZQTCQTsz>+*7u zPSO?eK1n^PB5*_9Y~HFG_H}w+j64vrkQXDATbz{mGC$-%J3NK{@NH(gAI)+ti-f&L zzVaZZKyrSPIaiA`so-0c3>7=6Qyr_coNr8_@&v(k=7YQvm@8d#-8Bjh@^2CoM>L<{ zg8CPbz+wBUu4aflMH982cxOCRu}{QTmzy~Eflr2DTKzrfRN)h=PzDE_2H-#)1Ds_v zb1+qQc5no;m^wI{|6VWqH@OI&x{ySb*TJmVq3ep@(TYx{>QNfFK4O0GPGi<4jv8z! z=`xj|FRH44^hUBBE{KTh+WUNx<2~!>$LPF=lsq9vK(S6W3^5{~Fv2O;VRoRDP>7Ng z^rbiiK3k;F)5ja@Jn~$%S1JXEJ}J8e|5{_Nxi0H@4{d+C9H&RjCDPF;wC?LRa) zZAteZ`|k)&6uFo?tC_pF{F*Uhd3MjnY+`MHtU0batBfsNybsU6PsLlkgsoFbK3u{X zV7x-h9cp|~+}21ShIt{bOKhoE`@U&%qc0T6jXC>_zy~__V~pPoEshR;nGP&TXZnM? z*Eha(p}UFn5)o1-=NIH8g|8_`FicdY&YbV)q$@VOrRohtxy@@cX<%lM z8zWU2phh6g8a#H{_Vy_*@mRY_IV zP>urBC|;Y}>r^hB@d|C)_RMZ+6cWgx%oMQJX@rZtUjW%V3ck+IG5 zT9qNT4;V8H6q*1vVuxzMKjXe>-Gn>rZ5eIeKO zfXd^l|9E-TB#Z#%;DAn2808l3iF`qFY3c%(!jdWY!Iw(~L40mdGGh=+IXj~?$$OwS zr_WY&YpnfX29@(etvf|-39cV-c%T{vWStRsMJ&|!5{Xoyzl4QLjE~!k`orUKpCKH# zggSRI4UVNyfKS{v(R!egV_1{`k{jY@$j7`^_ki~ln1a3C3@SNBIefuhOLe$u!0?A$ zBV77*8mCx?DWr$P?az~OX_G;C9j(6AETiu+wi(OkPcA%vz{w@N)BpT<-0Ee2Ii$T2 ztHK@Ffl{)Hw`+{lHYFBg1%5g+si@BN0`?SYO+4j0$yh$wUFdK)amk3Wb&dl%5gguC zuWevAnM$Ap%Apshk~)X+wEVH|d!tuW6?y@PBaR)nQU%wMw7dN(eLwm=KuQa2c(~Ri z2`jWXdxDWh#@Z|Va64QWuG^~d(~cv6SGJe@Ccx}fOkv0Y_kfKAt=zdpNi%%uH7%pu zz%xJxrq(BNtn;J!_U|efNOr^PWniEcn?6H5M_!S zxl>Wi9PLSf`}-22(TLUWcb9j2>Binss&qKFd6gr>dAW(u(T#2F4bj9(xi>lS)OoCJ zQwt(esp!L`{o+6@d(IyB#_8+u?s%R@-Y#gxqGilc(uIY5usgEEZ(Z zxN4SQ4|zVopm&};Z9ht@YK1RpY5-3XFx>$u08l}*V@yWNQs=D{DY%kVcGy~SlW}H* zoZ}@Z3(@Q|8Ynlnn;BSvx%6?pc6z*iIPAZ>e`Jv=EMnp@)&#}On+jV&vn}B+z%t3% z+KMaT*ud9B)}7v>?TWr{Gq#HOq1^q@c<=1_c+uz%JhOYe<7{iYZEwGKLTgPI^SQ4X zl4^G8V>C6z>Qdfy<#kc(U_rO1>(n<(YCDY|Dz@dWeNh|Ct5@?jX<9FhV5cSHA?BVm zcBODH802?PA5-yd4!=vl;fd%E#|HwE30#f%=gmTYyxTvn|FCsPS^lp8f8ECLhv2W* z4`2fQX;Z^A%