From 34546864f404d3cdeea9b6aea12513ba537ed68a Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Tue, 27 Jan 2026 17:59:11 +0800 Subject: [PATCH] =?UTF-8?q?feat():=E5=85=A8=E5=91=A8=E6=9C=9F=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- src/assets/images/card/smallCard.png | Bin 0 -> 5873 bytes src/assets/images/card/wrj.png | Bin 0 -> 42663 bytes src/index.less | 69 +----- src/service/apiurl.js | 12 +- .../components/AllWeatherControl/index.js | 138 ++++++++++++ .../components/AllWeatherControl/index.less | 211 ++++++++++++++++++ .../components/ManagementCycle/index.js | 35 +++ .../components/ManagementCycle/index.less | 59 +++++ .../components/CapacityCurve.js | 175 +++++++++++++++ .../components/MainBuildingInfo.js | 84 +++---- .../EngineeringElements/components/XlCurve.js | 159 +++++++++++++ .../EngineeringElements/index.js | 59 ++++- .../EngineeringElements/index.less | 9 +- .../Home/components/Business/SiQuan/index.js | 11 +- .../components/Business/SiQuan/index.less | 4 +- 16 files changed, 907 insertions(+), 120 deletions(-) create mode 100644 src/assets/images/card/smallCard.png create mode 100644 src/assets/images/card/wrj.png create mode 100644 src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js create mode 100644 src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.less create mode 100644 src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.js create mode 100644 src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.less create mode 100644 src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/CapacityCurve.js create mode 100644 src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/XlCurve.js diff --git a/package.json b/package.json index cf26503..e2fc421 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "craco-less": "2.1.0-alpha.0", "crypto-js": "^4.1.1", "echarts": "^4.9.0", - "echarts-for-react": "^3.0.2", + "echarts-for-react": "3.0.2", "http-proxy-middleware": "^2.0.6", "moment": "^2.29.4", "react": "^18.2.0", diff --git a/src/assets/images/card/smallCard.png b/src/assets/images/card/smallCard.png new file mode 100644 index 0000000000000000000000000000000000000000..62b0c01b393ad127dae3f4078d373f7ed33a2f1d GIT binary patch literal 5873 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TezyK_7GJS46wq=dQb#LlsNp-m{ z+8TZN&7$ew$nK#zW-Nqb!+2Z*`6I(~I>K0xKGZq?A0hhq(}*FilOIY#yBLP|c0Lx( z^FP{bPEO1PP*m&o6%U7O;kE}Dd7P3tL^SRdte~ht>81qq1be8yi@Mw|cc6R558<@W z79u|r2_H{|v|P{p7F7-AS?Xe|!NGm^&p{ajG+5n6#*_mUdT@*^>NbCIk^3Thc^ip?HiM7|ex2qVyF%wf^MddMAwwIm*>B^@gf&e7Kxb2e$YdnPS* zuKnfa_~4EOkUnxt(*rWzo^hVnZi2QCzLIdfjYm z0@#w1Ykh_J`65)Dtl`Ti9+)Cw%OPL&xLnpv`aIT|_2eap+_NUA8SJ)3iOqVQnzOrU zapn*IYV+WmTSB(aHljOFZ*yYga6U*+-`bJ6hZfx|m%%lI2pcXhnBb0W+;X+bzA86V z=Yun)2Nw~1nDGU}$;rA~m#AwSwpLh^A;v5nfB|a53&H_&Y<=;<$nY4RT#K`>|MlkR z>wV#K^P=JiMR9OcF$X5cZ??8|LZENa3mzO%=UAMLHFj{~yFrAUt<|<@C0w<+n~iRM z-{#0V24Ymr7VZjWt8zoN&WnLivL(<%wInwj!g6T+L|wlJj5XV(R# zJaUc3_(2XIV9eLJ=DP5}Deh~0ss`gYUG0l8>5IILf#5+e0P&IU+>DslP;uIQ&eg{8 zFg}k9I;ED?u!gKh9(&iPK1cDR)r>5+mZ{l!^gGo7)WTx54=M7EEAlAXbL&rUcvreL zsQH3GY<%q!jaqof@v+UB+PFDAGA?-&wK|6oYN+(DuPd5EgFQ9P8N9TV$#kMx^x39@ zq_&YTMswi#V(2qwW8s%b9Maa9~3I_Xa(k7&c zjZZitgNsI@!cKW_@^Q1xF+=1lpcia@aC4uP}{cOG2*YS2lYna?JJ(r%ct5Ic;t{=$N3z z=0vhot52KbVU5Me%I8#%qECMaIxN&?ZpWq`%E3jjdnPrzSDv!~n=;KwEQvbWI+#7+ zfeo-J9wr;7&CiiVPi?sR_#CN0sbd`}_{tuOLC@;ZYfRKq-SV(d3!ibE*?kvA+XuA@ z^PBC5_HYV%5SnZgVSgdhu6^9~@u}8e;{`mpqG4EE-YB@P>;IHC978>={^9kuI_+o?1I*M{r8%~M&r38+b zuH=%Vj#Af;ew3b=Y}|B@tsQgRHt9Kp+<#&Bac)cDR`7&5zR91Q@K*#NijUgo2f4_* zjp7=swTsWG_SA;+YM6Dnc142$VT(0Rf2vL{#IiUy5}VPZU{0;V_Wq~W*R@retz|lV z|C7`l?;jw7qH-HEVPkHS4>5T^irAJzWDRcCqDMAd5@*z~A?xtlYwZm(`K%e=I4=$l zB<$WE8E2jGTD7eYbN0yWTJYjz_t_^?bL)-k$g}3CMM5HrP#ec4G{)(vy?I-cOv*)R ztg~n{hc;Z|mNZyHcn%1*^&}z~*_^Q$Ih$&lN@cbuAxpK-*P!+YS9Gs(1sIpHjbnP z^4-9KEIqb4vo@|1>%%FZosLsn7?M|UtG#on+5eBXP{`Pr5XC16$P*($dq+2#tZHb{ z6C0jEYN!Sw6yiFx>yK^D)W*%~Q4&vm2*r}d)+gxl{O1DaUU?DI;;C0QlHl6MzE;aQje3`EV*YGOeLX1I{xH_i_jUak$s1)wz$wnHfJox67zaAnW&|p zPX{{RnBZ$#zYo#*T<~CeeRPcP+Ro@Zk3&Ww?LC}@tr>=B(6`jQSl1Alj1XS6O{TDw z)z9o%8z)TwxrQjf^Z5YMQ)_=J<{0YH{d#Pl50PxqT*r*{b%Zf|TY)>|o$DXs{Dl}3 zJW%U{X|t_&Hlm<5lIUHukM)=+z-tgwHQ=)^qF7j~$2MnjhN5FTT@BP6`sgZv-;7#<3ji`_(^T~BplZ%e% z-*E5~HGIZw=R6l7`Ox;4ry@TVD>2k#i}|$#xZR!V!pK4n^{KYEQgiY3YjL(g$Yi;I zYMnr$=!b_!yG8$^!C}0PWt}L-1q>c8ChLuXB0aV_(-#*CKuh(U<5K3H_7KDmn7%L^ zENFVYNzK;Y1$7`=!xISQ1;qrkt1)7bgYIcqg=rik(Gs9qdb|cTO|@H*@00Q?+ZJP+ z(-)i9V>Jmd=MePE3G$#NThf6e6d5%Ske82@OBWSj<#W3R3r&V-vMX4MF1RFO1gadELM9WoiyT z{GAmg+ar7st)?u1)x8nn*tiNQa#1>qwm|=e<1xA>of^~t`IzT2zBv;cH>1ZkK2b~H zW58hzv)5PHmAwiu~_B+sULFsWV#j}a?Fe{XlQ+1+koWNBYUYif9(oqD$sicuRgQeW`qn95UH3FMbJwcg3sG@2jiPFxp8h1fv$ynG+9ef`$Xg- zPqcn~Qc(E&(}Q1q6u$w_u`IbE`Wfy(V;tXal6_Ypr6Z1k4e#VezYsi7=(ugtZluMt zM2y7@BR$H7=6I|_iD-R2XpD<#Zudx$OCi9WeU5Jy`tSEZI_tUxH-Y2J_nw##qVeF` zF}P@xXq)7@9Ak$o52fUdq3<-&rj$bT@!k`i&>yAU50Bdz!tEZ(hY;5^`@%55=hwI0 zXC6<@&Qp&mDUG?Vg@yDMBRLMYqxLa$iW>e*uvm~{!zn%{+9rA90))dyo3Ff}cXJFw z8`mS99tEy}*@r;RB-$pj5}BqaZa(WZ=dL^pf?yzOB5*Vztm&e#fScKGrCf9iX;LbI zm*&)LjaJGUwm|#HV8~G|wpV&$MLnRM!*kSZZE7RkHj$AsG{oBih1Ba)#2f=^93R}p zi<2!}3OR-cv8jbHTg@7rMwbOEH`OA?q^{O+PI*H)tU#OF)^O1uADQp)cs5$;Zccy9 z=j2BQ(|R#pONB7oT|+w$V-^<)HX&=pYYM(u=-u~IvpIU80m73U(U(F&gfjuW+4zxR zIRY6T#ye=6Ox6&9kY1uKj`{&@t(c?e#26OS@=OUVR&W7BwF(>XJk2#&tQQ`m#*o!T zd;`A!pYMPe8#MqKW8?s0-^rc=8VM@a3*`C zoc<8xnJB|8Ddy64aYP?_bFxn7Uw#f>GPn81%q$w46WjeU)Hya*Xt%{te`3QGHbyA7 z#Zfeq4cX{$*zdq4a>lwJjbJb*TZexG=} zlBq=(#{<7AN@87N_({<(PBPkNMFSNBvG5>NFQd25t5A%|bid z@STLXP33-WB!Zkvfagod>{y4cARC1#h`DYTHRxmg@&dr1l!Ery=1g8(s)~4TDjvSg zA>?%gn@;B4S0!*tesc2L@ZCq9Bw6Aqq?i~jpX20QjB1U-Bt|zp>X8}(axO$+!|;CG zrjvQfKn$4OqmQAV$2%8&RmwpNvQd}<@%aFe8V1;W-$`@(t^cv48OW2mRx@*kS&Mcd zY8#lWkq5ar%+6GZxj7bd(03tf+qK)RQJ4bpi{w*WybcgNG`u+3yY{`*9NoMvL`G)- z(8mcpP-!X`BHBeTlR&hAI%UYts1rsu2N>TtK16ZUw)&?(1i**KoM^j_LO?He_-3Kk zu3}~-@&U>-i$YrnJ`A9a`5+gE*^v^&Jhy9c1UvR8Lf?f6@;DdgD9j-wVA8YUQ#B}lmmq`- zF_!{?9E%m&W$2=4Rf`ZSYyx(@4iV=lHDCJjW}*N6IyHwMe1h-h$U6FL(=yn^*CL^K zc!VcWszpz2ct#}qHqH>t0==6MWhe%JPLJ8gL$=*_sd?y(80=dgg(!W#IJxl33#qxo zcX`c$*YP53Bp0L@<{nJ6BgoIFA#cVJBc&BM5nO=V%Os+RgW~28Loxb>U>4}`UWZcG zav@AJB~pERG-Trrx4L*PH5c&GGS3wgJBXwEP{jsP^M)IiX>GDm&A+7S7@98fu=TG# z*gv4(;M7DkCZLX+GqG{S&mCcI;ey~FwBJJBQbhk+?vh_-CTau7>f0c=UeP`67}n`weN`hP|jS~>xuhcev=lL{^svDtG$QQ z!SxSx|LOzG2z;F)^<=R6y(Rem6f-5k4jN?sAuVAvp?sU?D0taSz`stDZc_tdph}3} zhXEarpHBMRKAl~A5%NEJR9sOMvEqBb8DM_1TBX%P=hNY*H`4O(iw8g9l|-`H-b(A^ zwZ6esX7<@lM=AoGY^I2D5t;Kt3QdboWl2^LG{JtEz*34@WvG}3Fy=@pMc-~ zqn02V)ELK#=Ao!Bd+%umeU)uagbsn&xSSM|`vwBY=lPs_;hD6+t!Dq7cT=-17km#Sj0dZuzqxWBV&H;{11&W zAxFYKCdMEbvf(X{x)4NdJ{K9wdUOfosgTpSf~0EU@|vLC)PZU`gt8ppi^4V`mP>hq z(0YB8zWDhs((ZSkOv~4P_OqWHe*8%~cj$Bde14iwP|JMkie_HiryTtD$Y&7|%C?6E#Ch>4k=zV9GUhuE z&C8)3I}OgseLXt3nfBj!GwnQaIbHkdKj0a6?fdDKpZ;UI`1-5q>wo`6x_9G7+B$y@ zwNagox@6Fv8aI44C5?GbmFH5_2)->!|5GF51&s3xit$EE8txDxf!7=p@5$pK zl*jTeDHUq)0w9pllv@x z?85h|-25-xYj;-i)9M9(la7fF-uiVq+CNBpufBu};H->4{Ozad?uVbI^VeQXJC`5U znqS>aw|@C6+yb6RXP>p8i5FY%Yt{F1{y`HyPueeyYKUTJH7{&l+j-UnFs(^8W!rcVy<;~8~b zzDGO%5^Kr}jdb_3&(r7s_H*pprF8Y5|2AFv(I4T7o6`RQE|67W%X_YJ00000NkvXX Hu0mjfh@gwq literal 0 HcmV?d00001 diff --git a/src/assets/images/card/wrj.png b/src/assets/images/card/wrj.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4cdf97ab16208209c0525c3c3c1b56ff9ee06b GIT binary patch literal 42663 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

JoZmTUP( z2i;UI#e$!QDy|pQJgyFDWT(H_55#8t^O^0?5dQbf2s$$Ps@3Z9F1l>KL=p`pGzsoB^N+HvQicf!=!v>i*@AD*ky ze^=m78)`=YHd{TQv(_oqe~9z$>ig~^F~f|%yb8U#$Jf)=tM@5(!TDHvH~DP~k2Dtu z?>KDa+h2d$;$|4~6XY-VK{O0nbQ0LMtdhoyJ3wRO#F*67Ra9d6r$}&=M8(7QJ~0xt zUHtnb=(qIGX;UTkR(FtCvS4tBN%3DRX_)bkca0dY6Yq*)b{2_x0@aF&wZm>QHSf5K zwD*~&ZIz)$+;irFdD_7z1LYE}oGoViW34GM>kPikIq;|5Zr@*ew}(!NhoXE}Dis{# z`sW{6P;#}yf1SyQ@yuvdDi)UE4`%a=^~am&rfjIgMk3`>4c5XryFx-!#W=h2aIN~( zMfM!qG~VzEQgV`7x@O?PnSv*4zCxpSwRXQi2-{HmUSRzSN>C`v6sd9Fuhj(WojbWDGx2SNvx-i_N`B9B*xq{}Q91NXE1&G)c>b$*(SB zZ^lJ^2(vSza()B0f}CcX1q*mhw6(VH%l4zH7Hf))pm~?iVq4$O1tk5ELyUN}U;X%2)n&2c1Dh7ezX;~?}!G{X{%wJY*-HFDky@+J4}?&~9TF!=dMC@(Y@EY$S@ z4qp1joJuU;SacSgI%6?K0y7mk$#?2GO10B%?+n#j*Li6t!e(@#Ng0xOuSLd7o z0I&&-v^FRr3z>$z;Hj9H<2bC%aRPJa9VxlVoQ{_P#ne@64yF9A;AQ)hShQzML$Bim z(|6l1Cr)ano^JLr=FKswxjXP>5mn0wkUUVxMvPcyvkTqZ(=h=L7Qg^?1ax;7m3z<= zzlO2%BKyIvbFP+^8a0*uB_VPdl;NUvt{YF$Q}x8sC^h`Pq;Cr@1OU+UP5x%FSmQJ8 z-@IrBxtl0 zig>NtCSnOjEDmchhqesR|2NQ!xEk)aMDsk&KK_)N4{F6)k<>gt(q7+Ym+zk^X^;G= zX>JC?&zP9ACMR7da}$Of7~*x%m*YbmcnG@%0<9bHV!ayXGioK5iJXosMo)fklyn0> zYKG~XXY?7Z%tT8{IP&~EgpgA&%JTFPb=RVsB~e-quM}4_^<`nlW7iEB*f1)AKq&Ij z@1c>sTy@w&E9@W=74>kDfq~W%fx^B>FS9+U30#3Z1nv?a7&l2b$Zc!+KXtS44sfz1 zp7;> z6TWP~%Gm>Xcp|K86pOEyz?g9jRkR?|%eg6+YX3(y)qPm@+4bL;m>eeyMxMwh(nwgg zzxQ{Lmo`Rji*{{f;_Y!O>t{Z~3uPlxe7$3ZPL|hbx#QF2I3j9Sy|1O`rIY4E75^KY z$P;(QC`dosWrECOe`OFG`I#wO$fBWba&>M)hdW_9^k@tRq>`(K>#ikg1uz{3gOl0| z_Y4_SF4rB|S?na7>^KIBpb>!}b4RUFiU6nFK+uv3<98H;9(r&o3&KXw76-K?^lrUGhJb z=sxeFqQXriz^C647>BYb77v8lHrKdlV7fd) zXa2U9)P+;c{6)13nIUNcK9hBu6YrwSMYg zTSOt&%h`IqXrAY)0Uf-wU$;PIBC{@lfK70!!kr;2MFv<>7MPGeK_rA)1Q5MUHD+-T zAVfo*(iiUPtal3jx%wfST2!3}6%OP6lⅅMhNwP{GFCob}OBkV*0cx-_LdDL&8)P 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/W~Jw>+WM{KMBkHK#mLc2M^uHu*v61e1XQ5;MJwhAO2^sWL#LL77t;yWtdC zpY0)#zdYKjfwh5v0lj=u6q!!|Ft8hg0+jtSrY%$-$jbY(L=ICb64>1c)@SH$ zq305tAJv8vnE+MXb#)|4zPM+AF~fAdRng|VMIZ0n1=FZS#n!r3 z*d{FRDVzi%v~yTZ-a4PkOzcJW^K8%abq$BJQ2%@_e>*LJ3UiM45Ji&qHJc8N69Hi2 zH>Hg7<&^8n4W#e@Z~(SDRX~q71*odkPEWyH+Q-Q4Y(g{VqJi*{=qD?+08tG|`2OTs zdT2GBgl_81tztX$+xFMpq2;HF(-F9z|FW9{8Ul8kgIs!Ac`Y>@G*6cP7C5sp6krQA zZdo*c3TV&xddMe!)zH>jI*#m$eNTTHTIKsuIeR8rp(>m!lSWE}7sNPPwv~S^d#@C6=TK+ z5P05V8$)0#yI*llwhH1ZvivR|Wh4bBJ|)v=XYh$OmpXpkig(HA+_vyB*?uETx^03^ zT{VU$*8qS67-D&0qP#*Y`0&xDsQ?Bva0H*3@kkpcXkD)$Bb#61%J!r>H;>M>Ps0C4 zI|(LbYs>D^TMRf-xKes!t1My`K6KFTZw>W0IoWu4mR?0#nqcx>%O{)Z_Z!CAy9Cre zl^*+zYl?vxPTR$vY{ZhroM%Y6<#f@)C3kpS30NyQv_3!z*0U(7`hz0Z2QYEWMNwdt zuZ6u?!H+s|lFO&0AWdd}0b{_6Qs4#!PqVOXJMX`#+h16@blr~faNm_4Hjc!Fx!+`H zBMOi8OyEPWsCTF$hZ$1-DZY8A8K0JzKF@vn(N6rvw=g1jIC5h-gKsj!+uLo0C5RwB zotJBCa)F}C((gjOCm18F{&JouFK-jIBrS|QAA};)WP1H2?gAo&`U8n&vI4Yq09Wjc7E^U zqIND?GA7vCuzr4J`2wJTDPPZlI^+qWMtQ?%v1T;9jt!{}24?gh0@PaxUiBU(uk-L> z%Gat!>G@IW?Byy1RiWlj@iIx=_*|_k{@MwP5>KVAR5?9K zo@q!dcyoTUYDeiOE)X(w+_3rQ(tY#I<&C8EJ{|KO>r7F?_!;cV1VYZ3n)OcNB^3_U zr}woGa}$|i1WXHG{vW{u2E1yN^w$shqCR!HmN%0#Dq$r{&tWk0=f3NWX}~5LFXQjZ zSF)rp85h;HZSqPv<>XiN+Txm6Ly{5-WpYX2dS*J=Orcm9@T8&)?qY0i)-oFZXRF}q z?}y?6&RHufMReCGpVs{^+76f@L-cngJcFdy2eAxROEIHML2jm5fBz<-#GwIapbph(f3edZ>zLK;&zx`ys%V(o!`k_9<8-N&Wc7|-s&jf*8mt?{Y zA)TEipJU}DX5%Df8?AXGU_CZ7AHAbVUOKsWML-Oyl5vEV$ECR!+0x}*7P$K&6}Cn< zf-H&3#6&lbXto`f05G30XnPTvFrxqr)$2OnLoIvXV8k7$s1^@5 zYUOWK;J00IYdpEM&?0OD#yQ4lj?vAnXKC(uRb(&m)UgExI}@rDG;|F$mD!GJM=c9d zUU`PArWnq6a0)dXjJy_~D4iq{k2BZ)nrFVIUJ&tZUsJX)H>2IHWwY$xDXkYkWAWx% zId#%EcCZhzw=%STyT#v`%wg)-Q)~HoyK6=(DgX>rc*Xkuh^|U;Q~?^|1J&Sgn=y>p z2KqmOck|l(%|&r#Em|$85R1$vzESBv%zY9 zV$yi^@YEl)`u)6|fWQEF8f&72blNda2nj0Gp73ZJC~-CFVU1%*>#Gml$fF8mB5|nG6R{H0UsY9=voTFR%nxI`g4B|s;etpfP{V=nfK8jQ z$=jR-MY}A@mfr*9?vSo{<)MT>GgBWs<0e+M$zXQ^U{gG392= zKGTLRFbAhfk$;Ca7yL6kO~M6U~n-X!oF zEFu&a-XKNhk($Fw1x5(tZyI=2GBI7I!sR{5wGecFm9FoiaoNv>`^&I?TYkZ(EKMvX z(UC33xG!iwzElXGD*XVcL*kYIKkQ$~8xY=dG|tUozPdt2^_wbH?dz-~_v0BS!=oTV ziG9BA`}^H zu2mY9cD{y6OTYW4&fiuP69PyJD4jaO@;9_-KhBA1>wUTN z#5m}|U#cV-t$r|JQJXqegdE9v6B~;@(xu}0|EY_5_u#Xbkx}$~F?8_FGo1`>q(FQc zIiE`mvk6(r@PAboF0(!J=09l~q^2Fg^Q0O9ks|8WPxksJk)-}fM~x&D1qUXWZ&Y4^ zaK;P(FO1dJzEwnkg6O|d1n0&n+hx}5&_BhoSmi%ybD#df5ob4MiRNTwGPb`n02PcLn z(B3h%Yj9+y$N-bz^Pf zjMyZ>bw#1*u8WM6}5!TG2tv%FQm^a(dxPLK#BQ0FfSC3ThNt z5bb6tvLE_G|I%0b$f+C%2QXs3fIt!mp%FB3Ck+czGlET1R9C@^zgP_9xkIPbwJF2Z zP|Oz%8AeYik`IjdN>ln-K$P36uB#6Cu{xguJ7ePKU+K>oIieG0YwBJv2!nsKK|g?u zlKdj01vOdCE9gA8h?W4xdY;ZR0gh%MQm(V0E*vboaksnzW}@Y|f%CNPgyNE<%%2ov zbO0hg0s6pi#5_PUH!ScPOpRM;2am+iNiHD(g;Do25$7jYXRKUfFWE7#Aoj7sfGS;5 zR+S-dz+e)sQBeiG#tSBxI;}gaz)e!%dC;ikEK3$bAxcWPRD6A4$-~-RE*e%y*gNlUPI^cZKayps7L;lkxxiI*CxY^> zr;x{xhLi!wgVY$#-f7YUqLh%9z-szH4?2e~RagLh5ZEF1E>AG%44yuDEa$C9j+I;S zulZyBViA^?m+r$&N{Sb*Nu0ims;mFWm1RLXi?BxYXH;CVPZYMEi+c06jej78*dPfs za!f9vLU~`JJXGACnsP&t@*>b5Wy5(kNlaE}IOpmt3a?!z1L0zDWt{ABS&)gn4GJ$2JH5Jat(HOidzLpsL3 zfs7jEy^p|hTDPibFZ}fdIxXDlnBCHkS&|@$3IVo^y#oIEOPQR``+dcYp4av0 zmp9o4>riGX%_~rbUWh=od-x~az8@SW-f5AJTvl3ojIs{jWTY&f_CUQpRa7G=i%_+Tr>A2=_b@cfLvq137xvw+`5Kp| ztu0hp;?H|4I=f#H@2K{>)|f?C-jmbX{b~=4be))xYo6XA(G|? zn=_8?=_tH-5Kvb4rD7@S?;$>(19e44ybN)Q5g3jG@l1)n72z@77HWH^?PQ9k?P*z1 zltQgkQiMIwtVa`LtevQ;x{AoOacv$80LOwy17pe*&>?=!Q_7Mn%*eg}0l%hqtO;TP z#1F2qYQq7XW5RJKudZPnf)WH$oH4B8<^_=t8Z;EC!a1i$x;7(&Nk9IlVWp@qR75J{ zST=AT2O_V}Ht*5O&__?=Ro3r04+0udC!9v#Ns>E>DD2`?O}22+a$4PYTwYM zbxfd;ymooY{l4Sby`lIwQOPyKKPA#qoN~Ew1Lw*Q;LC({~c8DZlq{c$^;i7HX$Z zKt=VjH?G)J=P4&i{ZSYCqS8z|pF-hfy$NL&>=(`$o;w896+oATE#=pkx8%v!?M$s2 zDU_K+PxT@dv?JocI@?)=j=nu_^LbMTH9YCVQ>%;(j=@2!h)smrr0Z7*LwiyhxQI8L z9Svz)JK@+JmwpsieVCaAkN)kkhtyl6tRsRJgWezTDBwH5$%fmZT z)s#Q{R?KmYV)G$$oP71Pgd3p%I=+8&r-5DFPJJ(k`|+Z6zos-zTF2C)fjT6dM{(q+ zHKfk8OyUv`*F4sEq{5L32czqn9NN$=5JBV?*}{3PY}^mqe!+it9bD@2@nZ3`Rb67g zUOd23-`h(c>n1J3OBY}6uAVylWDyv9THfL@g-#j(HuFOw)HTv_;{2)*y|5c8d8CIE zmY?sou&0fiHiD$WbjV0Cf*AA~bsYzPP+(lnxdZ- zN}TfI?0a7y8JnH8bDZ{|y^hs-m(z<(4FU2eYsJjAnlyQTl4|q21@N@dT(~rV)XldgtIE`%UbIbe5$k=0!`!B?s{OH9{$P zk);NWxr@fO`agA)hh&W46aCTzGhQVz*KcU!EB5s$LEZm+?>1a58iDQ>lsr_*A~|^F ze_DMr3*hJ1Ge;=9)KM8TPT~dnujw*J)IK>24K*yU573&6Q>0}n1y)h0fqrb+E3U!t zh|Z)-1F!`t2!m6Bb+>zxXf_SnZ8iVy}wTg>TFNE;pe*;Kjj?tbvs{~3i3hY zRyHO#YIe4IcbDC5OY94;xlk*L_f$xp-fbe$&Vz5*)nO!Bn|Crn@whbfg5maTc?ISC zx)gZ@Cfi)*PC~UDFIm1^aJ3j1VG3IWW-o1F#uIcugZ}+o24 z?eLL3-*t#Nj2Kcd z7no8qbW$JQQq)M;D!*A7ig)+`VVHrL2Sb3V)HzJ$`~ldI4RIhG^p2H#`7PV58|39o z+}BT#u1En=A%@Wc_U{b~y`@Km$mzm~!=kuF<&B~A46=Z4?1ibf7XgfMG#Zhtxt$@N zf{s1aB>@c8BaWHt&g*>5Z7tzny)8pYU;$XJ6;K;NcQc_yM;0Z zHdMIk&(HZ}0YsT05r*xOce|DLKIAIpmtO`eZfHpq(fb z7>Y+L1=s`7`v}BQnz;g~T}M#vvR{QUzuWY{KS8`!YQEqui2egztA@ZU#&_r7%p^dUSXI z!;rfk37l0tuq0YZ82bIMC_vKZOnE~ooT>p|V9@Q$b}D1cr8S?aHbz5qB9!c)y+VVyxW<;4k&rmFZ16fZ44~sIgevBan(Iv*iWE@S z#z~Rd{~=aw07n#t-VGsIi^5tc!U6LHH@V0nAC4l|N+3wLqlE@P{CRlLfE!y}GtCoP z5b+L(+Z^#4^`~<$mnbajP4blGb;!Jjm$z>JO@?h7dPB;58G_Y6Ban!TQ1cZRY658! z88wlLv{ZT^5e_-2({sOIj35Hm$WSvLwS+F$IH?M97NlGp2?;ru!clR-SSeeFO7nE- zh>=<tPNfX-;8Xl$voEV!$AlmqIIudaA5}8EyUk`kpDtfO{2CvP5!k&rQf9Q0 ztnUjI5Py}y#>iAs4PzDZw{0G5Di<7rtGe`)lDII5f~iqn0+jLPr9L_l9{MM}aZU0V8y5ORF2B_r|oGe?c^m=(*oXb^!eRmL;$`bH}b9(|F7lWpq!q=GtjG^XB5R9Xf6h*N^;3Wo-Wt*+w+@d28E%O5fVfB zARe(u(7Vzc!VG3gl8Yl8HVk}jOVb9f?_K_nU2Q%bZTB8}xyYypGWg9m*aBgwx6xZpR2+coknDQAggQK3@8T zAp^z5VHMk$1X^VaE;R~OFaY!l$-OWOW5+0be;q8!t{r(U1g>{FiV;KX!bbkj3-H#H zv_wQoi%x+Ipn|l^sGUGpxk$z}xy7q2vMe{bHyW;F!6tnc&g(yD+T2+`6^UUsVv^}Ck)9+BIkNj z-KujzNg|gevm4(VGPZ>YnAh#R^~a%Y#QoFC~hsFzC#`$1Ucu{{_LB8OXt71n~Y-04493W6(N-v<*_*Te6WN4kvk# zHx&$hnS%?tgLH>pkaum}@@H-fPxc`&svM|L)x~ z?aB1=*t5ZH?S=PU(bJ@?&$})m=D+7Z;wTa)-RER7m1>hkF1BB#>3C|D@~k!^~DzZ^P)4;uW7e`j8P&Ex!~QP zNLY)p>u0Eb#bOXR&7hymD3Cr7Q%W6$MBV~*b5eG&r8^>Ys;xZJ8cg^|hxg*uKzBqV z54|b=P6)P?IW;+L6DsLyr38cRJI<7>&1b{B%R<$iGp&2Ov-vfKKPF#k$Q%<);XC9cRyJ4jGE6*uS zmnivvVVC4`yX05a#s>L7=zxL3inWvU@o?$YYSPCVSH*C@8)M~LHtNdBM;VK@(KW`I z(Z&54m)0%77w-e~OoiWSVxT~E0f|gfP||9N4Z?+uoHMgP1Px~sQjAjdxjkmR%deKq zy7Xg-74Jq37 zVd^e?z-f9ImtxAbKb;ea_{+;$0iMa$R0^M^nm61IE)|t76#-A}4tD_ohaaW`r;WFM9l{Up*zXOX|4m$yS(6dBa-PSQvVR3>4j% zdN0KHv&_Y9P1_czx|qtR9X=%Y?HH>4)AMCY?wSD4zh=D?TV-4^z2QiGNoev1aOySk11mi?H+^Jl znBK1=Xg9qI$~@@)>4T6!^loqMA%?rP!s_m+2=X?OuanG^Vh)CWx*%&ZYHajZ^}#{H zqh>%MizSHOG?CtXSwrwrz+DSgH6{NbRB0JnITr~>jaJKSmHN(fR6Dp4W^Vl&K-{YYn+3J)suv(3}K?J*fSxbIuq~a?e3djLFKNy-&$=pW8WuE zMAUA1$)@bQ!)i>5IjgRC96ZqlFyO=aQ4>UyOQ9^Ps?eXVAe9$oRhQ98*jhFbR#`ES z-+Ny=JGyrr;yuN_GT&s_B?GRa=!xo6Vbexj|2h7D0hw6Kza0Zk%&4_z_ikSaR{N5w z3k7J3e4!$gay6m*g2l(D@FoV}h`QrT2PSafX~wRsLjat&T0#=0EM)wrq)7)h=#uik zFwT04o|maZYoAS0>)}?+nDf8$`l|iSc&#XIG7p$>D_0=6km3iQq#vv)9VvkYUeCN~ zNHWwB2zCsWSceI?6G7VizW)OpE(%?By;yL*QcgI!gb}o8F5NNIC+5kVP}A@kbW}O= z5uZ(ZncDufK=_Z$QRV-We?YAEIL&H)4PD9pE+vir4_rQ_78M+Xw54gR@^6L1cFmdQ z*?CMxU3~LKB1I(aQWz=g7Kf-R%Sg8Z8vJkK?*@(hab0)gZHPE*Lq9<&k3Ox!UgtL2 z>#DvV7<1e^-$2z{!ERu#m?9h(LYWfm@$9>>CLHjbXFrow%5&7FDFVIV3N@W4?5jNr zTD;sM#5fYTz4uwyK4>3G5seJ<&;FROa8Q@aRtJ~@( z1HP@y5b&Gunw}FqfiJ7Z{|gSif2Y(op72MkjrC^!%RVng-BFH;kn2;*kzdOGe{R4T zDpHEqtSv^!m;fem$E{z2gJ=qdYHmFSgI`k?4aeTP|`kx~75Pm}r^idkIAZ?qFEpA8iow}1{XkHC|)E5YM3 z<|{wnlB$|XxzUy;k}SMCzQ5D{oJmAH8XTp*313#2#F;^kRD;IVY9yqrn^gL3e8dTdyDoNw0}KQ$6&JOEx#@w#ct<%5kLI z6l5=L(k0dLNe=#i5E#k?FI^<3BrlP)o6}cXG#7mE# z?*>BHb1HvZ&ZgY7=DL;nS_6Sb4Q*U=!y1WVeqc)()p@;EvyDEiX=eufuGKQ(qz!(m zPFoir>*hT zan&+UNqo-<0v`bb^%qOi#3m3NCy68g`l7Udq=nVKN*fdrOJ|OGYN$mSSiSgpu^I(j z^#;4c3B_obq#eCVO!JfCdISL(v!m(PW!Xp&!V`}l5=y9g{l#fpE`4d_Ki@%{)Tw*y zGfY7-hsw6n)66mEdFJcP>d}ABz~cx*Md8acC7<@su?>@-7qP{t!LI(tv-9VEbqVs* znLwCShNa@iI3=YQK*?lOYYBK!mTR+@ zK6}BzJbcCvjmSv#P073dFjkCBU=Wp9G&OC40WH zoV5cclcVk2n?;BB_4lgTqQdl*mtpY>K6gsvzIRm@3Ot0KHx~zX+ zf7;nmifOHNYE;0{uc%{U|E*9qK$fRhK)Ym|#LTWhTg1R>tXoD`WX77<_62z(>U)y4 zns%kz0$C+<#jnU-?^G2czFldfe7qU}EG=Lv8uvE-lgGpun%_t+ZG^#j)}}0tVT3gK zVq?Rw%+Fw5PXjJb{$1l{xGR^DC09Pj0 zysag$I2zUKFY)HCP=0ty<~>H9%7=h0LbaTHjoVr+#k`tj<)sEY8b{pDaVmr}{wcIs~^2rLW;mn&G2Ypo8% z2oz}_q^HpWCHTnV0O38)%&;9$LwNde(O>fruz;Yo^QjV;IWO^7Cel&peU9zLZx^{( z?>;;5UY>!4?#5sTX&*lCytD6NasI#=L~yWf+lgM@meUG2a2f^fSvhJSDabq9NHO?O*fg)%$1e8Vz* zse5WcViv3}u{Mk(f6i(own8(hDucvt*v0$jZ8f?*$Khv+!H<4tSH3kaOXm*={~W50 zb{{#^^-incJmkS-j>qOz>E;k~V*yjTJCn4l=2VUMi#Q|)2KM77^FyQOmmX~s2iK$r zBlMo#SKq8=(ia76C1`wsoH zFl~4|*^O=U5Qv5i8mx%-9zErDAdD%~q?wC&i4uU(l(>+?Rh=<;yZ;(WlM-}$unBB< zHBbDYsuPk``V%-QOE9!-k0Ey@hAsm*-r^3qdgo8~~-B{Lh|$^ zb=ng9myfID@8%iO&T0;k^YIZ@(9S1nLe+=fh`s^8&ZW5L{uiS&PbByKoo9lM*R=gY zBIcfLFNm^ce6)W5XVRxaC;ALbN`7!C3V^~jQXnR}YiO`PkA=P%i%aOcVC^-=E+=Lr zdjGKR{uogF{O?pHz<=$JhAsd z$KtlfTqx^Vx*p=SL!d3feB8^HZ+q{namTT|+>N(~Kr>kr(O35YGxRX!uU*|fPW*v* zlWx}Y4fTDQ9ta&$PG2(ZeSU$^)X$-c4*(yj+P$mGoM~3L#WlE1{Nl55dyRH;KQ&Rr zUYxkn5YHhNki>N*o9XE5RQxZ_LDamS9C?SDLs-yCC$(cYVry{YK<+yzLVGccMb-nh z!U5Po@JDd5s~FH$##!J*tk7c&n2^njoM#|(4ImGhUp99+YAli=cKLyVT0qh$f90!L zxtc#JN!BmPk;U!q-KV82(3fYF$N-A`{I_sy!2Y|}m?CR-a&izqb+UaS?lpV-7SwB! z)EbNTY2__*zd0$9ia@b(C|e~n98a~K36_rK5lYJXkE0(y=_KN3c4fBLo3``0Ci2!$ z;n&!EtGaQIL9qd8Zm~aqV#*BRoN+c!*rt-AK>yr_LB)N<45e{mTc%_EyvCAPj(G~a z1Uegj?wuot%f;36Lb$TXiY60600Y8|hY=>js221LxeyZu*pF}$j{#Gci6C=;n2O@_ zO-GFAKaO`f)bVN$gQvdLS5;r^Jmy^sUmhOVJ&murXMKEhYwi!AWIV%$I1qWZ&2geYD{!JW>(vl`Bsz}{DXbB0kG(r=JCe7JaQ2@CUC&uFioL&x}TDm31WsqE_ z=ifgwoz;(9nqTB9Kq9HKwH!SWW4t4_5X>!(Svq?mcG?hB{Mtol8@!mqmhH74*Gu?IA6FyBi<%J;@0&8~((Lq=vLPE`_Y8$3+!p zT`%ye;5IdBm++ld*zUya*ps8(lOkaMM`V&SXU|($w~LBVYvL$4<16-CVvA2vBJ8ka zeHjV3fvYW%q1OPx15d<0!IHHA#1>Z&Ic!dHe1hM%EQjBr2jZjCNKp3Lh3odSbKpc)B$W>W zMp6O-$S)`Usy75M2wHF`cE%(5T8K}i0QK(#BqAgl)3~$rMpS6`aVJh7MN9-o?GU80 zFBk9@15HWy&zm`nkljr}ocjA~WIrd(?Utr+5>LTV_4GFUq#YrRmp|<%IVULph-tsU z!GUHX4_+Zb&C#*s816Rr68=n@D!%;@KPrFgHg{t@myjAkxIs67`W@IC;$VR_fbgNj zk-+U($rUmRz`h`;CN#2LjV~k>YW;HEpzE*C^esg$iX3vB9Tt36$Cwp{4zE8R0o%Vp zffk)1|4eHEJQ3P>vbR?}`7>lIka!F4$2P*g)_c<@i7(Xdj91GWZMknSMqN4sPB#EY zV1Gs66q?K!(_C`oSxJ&5N~N?%zx3EW?v@Og^!=~!q5;IbOjPLs7vT%+#x&5VO|VG?w>IJ(p+NN$!k51-tgr}n23ZzBUl%^7u0yAzM+zy@8GFP^dHa@4iJrbwnp1WEcB57t{XJznK1eBBnlUD}TDEC;N z*5QYUnPYNA4WhJjuyy}s)_A3FllZAZ`?W?V5u>qzb5ko%54diOh7eEOc+A-a`e_Mh zXGNq!^$&smnUw~NZYtQ!ApT=`O(%S``$r-)BZt7SACsmZZgi|_dwixri2BDufB)I$ z-hF{0|G5n<=rj$JFyP2ck>8`1_lqXz$VEwZoV@@m9g5B3{gYDE`{EmV2W?SR%>Yg zlnphLt(l*uCi{K-j5gmz3wf_oQ|DmDS$Nmyo!qWWN899H*N-uM5_4p5H%zr8h4dgq zVeZHfJEi#)TC1x+sizI!Do*1%@+9>(l7-oX*m1DIMVefWTZxX+7$?V$^aE(!hNzUK zuTxhM5NONv$8V7JbZ8+KKWW+KZ$N1$S$vUu%yl7)CG9X28<4#Dw0KH)e~}+0y0?{c zKcte@wG@4O7V>Bni$+N)L=#M!3-L32z>A~=n=ILxg}-$#TC_9jbfqdyTb58d6~g6 zx!y&sjN%E_mq4p;cRmK>7VBNKOsqx#dH!p${?0djD2Gx<`*fBB4O;V~_a!mD$G+Ir z;hjd*>KD`AHgLi)#vmSYei)W;cFt59MML&kuMd{VPW`v00B;#S+MSa_UnL z1`l-%S)5wHsml+qo%RZZlSn=KpC2dfcCI@KCs4(wfZs;VkKSvNWJuSa=jb`59A ztt3D+TF675rYbJ4;}_5!l8zkTcMZa%wpa6RU)}XZQSZVs5+reo60fIx8R1RN;gptOTM+{KIo=GpVxk$+J z$K@`c3_pd42&1dYJmOQRZE$tJ_(1*-{@*2ZgZU{Qst3PjS`fL|Pn1zEx^+xnD>t>H z`x@F(Lgq43zfbjFYIpclRGod&l7j<>2_ zXhM!nF+bG$fLS1cJG30(NduCIqhY4|WvyZUE4TbTU;GW zZkBQu`b1*Zv2g=jOc{6%vy5xAxs9(!`*xP&#x?bbr={TCsXJ#MQr~{uYKUSbN=9&t%puCF!ZzZo4XuunTZi9yijbIQ;a*b7T72X_hfFFO>S@P1-Gd@>djp$tu`%9lX?2Bnk~P? zLiFq@Vg81p@L_-E_{p^_NjU?2JsP9Ta8C2|eGp<~pW=ermR6Y!07pn1awVlE_@u4P zbbr+S;T+kISJFdhI7uj&9JmCYA^GaO3C^0qYPhmwq2KB$gQ2q&rGvm`4(m@8glOh@ z_vitZ;U51<$FTTGS-7fZinYMB336T&L0td+nsq)Ek{l3}fbg30R05=c5%4;4=qp6A zK+`K1Du*f^Cq?0klhL*!^t+Q*{A($sO?{3TG@CS0<|Lhv1PZSU4T_-;2MeX+<~s|~ z@V!}U6gJ(&*XGCwMO>w}+3w5nAg6|IoP)6h_XdM{cEt|e^9EHNaPm&_rV)S*Q|eF> z+Nf}`Vi+ct)i3~X5GbD@23Wp3n!!`#6jZ$5wu<6D z{DhESg=BG;sof>7JCFz_jfh|Plk|X9gB1hH*CWU=X7ec=L?#XpS2nS($|sk8qa5Wy z0k(o|7w+hrhpvocQ?R!<;+bD}nMLA0_EhZbA1F#s7!_)APs9o@*>5himPvWN+DX|< zwJXggg`G-Qp zY`3k|_4r8SgSUISX?oTmqE174^fI-ase!4AH!;x(Pk66+MdeFo-$X=aj(O&eepOfF z!uFVUkp*%PI7${2IjT;{)QJ6lPLkZ@GYGm7;i#jgJ`}cCj0j_S1$EQjFIW*OY=ur= zc5g53Z4*KHLWdksZR&8IaL4kqeIS`nY0cCm)BQWFvZvn=KkQhugNnZM$| z3oz}QLfD0wi?MAsQW~sOM+qwX_X$=d%~%4f%p{Q7p4VQpskd_QUmtUW{+zawK=JD+mz8|w z4!+b?zku)CtKMkXVgv4_^HO&;YfC=&uYWvlUMR+1dt1Ff>*K6?dnMPU%tQ_K@$%ct z=d2c;+WBM?`}SsIzxO`JAl>IgqX(^P&>c(re5?s(pHU@#u!0!(dTKoW8@_1vb`Tg0 zvA4rUFJm~{;+%@IrD%IWQaCgSk^U`)lAlhe?bBIWtWQF9q{IRM z<2MmUbL_X|fqTdE$iZw&HGyGZ`&J@)h2EQ-tr4Pjo0_{@DLn!G#j{Vjju^X_aAagMJP@vZ6L zwv~r(tuyGnx+gJ9bkMhS@oVU2SANM|8~=%{pa0SL_0>^V?cZw%T`*D0HTW0jgz=HtJRNg^FiG@|s-re@ntzfR(!G|C?I`Y(c<2d*H&hhWRVP zCdkJ0?RM3$(BR2M;OA>lgn_opd5y&9*S?odmq{`?gMxU7cgA~P2~yWmn9~>;xHl8& z%`+3m5E@_8rn;t(zoy08dUNwkDE*tS&@|5sgLsqipcnes+6(baKxeo&gBianMa4y$ z$4!6G(LWoloOt^wtzh8dGG;Q^EoLW}_b_1BV+Hi0GsTJD>!;Y}-qWi7JP!<^(?$u= zNL|Yr!Qq*vKXQ#uq{2V>@yJ~^Ca(|=tbQaPi1W$!Z0fZLQZf)d&QJOb$evR?*ha*A z3Pq+HEG`|FrJ2t?F;6xyA8#nV1I?9WDBA=gA`CGN#aWOaBB+gFXum0dB}a&($NJwh zh~@t`%^o4Sp~#E^d7;kz;}zxWn7?8@q1~3R*F^+3b$iO&CUE?pPYVa~Hx|~NN+%M} zO4a{_n#v!f{J`&yF)hPmE759cP;!L&)@;P#{DvhW>XfApKY8WO8P0a}xvEaZDHmyiT<~->o+-Pz`ks*<2imGOH!31OA z=upU}ob}Iq17SUY2}ziycPnu%WT}cc>Br<@F%kz~J+0g^!U$-D2@*iNm8e^54*P#4 z7-xC+K^mA&&;y`!LXT`jKA|~;?7WD6FJnTO>SRk%=La6D*xZmF4fUK7p_SmiWq@t= zOPh!4(hp!Z%uhvvdD_y=J@)8lKIl$8B&pQ1PjMe`bJTIna33h35dKarsE;PCYOZ!+ zjjfn;t@@Nl(v?c)_mox~!XajZN9b{Q(eZf1+1Yr#0dAf-k>TDn48#3m44?nWY)(PE zSrcoV>g1X4N709XlG$mp^Cb9@4Ixa(lm8 z&0qCZOoW1fIwD@Ex}*-E51l=kTpcNt0IjaU*Ol53Ze zWeD5L%S_vR1OhCS3xh*h;md>+@i|zkYRmZrchd6wWY|_E)nVt}xlhB6c0bnQMD5yf4VGPV0De#77!y2fbRo{D39rNG-O%!t{P^$F@vSU6`Ss<-Xnu!ipwjO~e4u8!n zgwdmh3pd-j{7rjCAsTYM4xz-Sd&ZhFqQ;rzS8`Wx>1{GGX32;$jH4+f~BOo`p|{~slmTc zc=RZrt>%J3iA@ZcVBehHf|LSYHU7zD5q8#JY%&!R`=g`(6eX<1u|Yi~mrh}`sJikhPg)Bq}A9J@=ExLzihK5_G>v5Y%|(#f$$dHYZze>CH4QenNU* z4M93TihMt-UZf1`r@olLW}R;;MkP$Mda|stCGwf%`1CJ>?c?SUrkAbre@B4@f%B{zY z0YSGoHw2sWEGr_!zO5sBdWucEVn%36a`gWEx%dL^O1GaHNF8$~Z0L#G6{K$sNFMDm zD$&n`Gn0m>(yV$YgTGs+`GZYYy#^jyS_&Vi>)xID^Guuupk-GciygTRuNEgkaxmF{ z?C~=6MSr|_vU3zTIop^%saVzZpVPy*>FT2Hd0zct>Xq`g8?U>aRFzd?_vq$V^oEsye7b2(PTELEbRW*NMm)VZ{e{Nw)cu!;>7f)j}1qrFF_qTvz;L9@N@f}hFw>H zf8UJfccYe*-?OitSZq97tgWAP zmxR(&UhA=;Ty|o?NnkmibrtwI$4n;M! zxn{*4ra9NGo>W7PqMk7bGMnu~apF5wP#)&EmBvR+ah-XRQ!qu@+-zM(jnC>!rzRZ?oVraW2G(q~n1Hh3c~I*9`h4a{wQE^7YNmelil4YG>_xtpvxe#RGRX+AqKQ zoR%?TFiSyNfX>!SamsDDe-)U)AQ7(+46R}j4QX`z%e-@e`$}e$FwF@0oW!B0#MOr= zpA4ZlK8CqyZa#QK%y{@6W)%BT0e6^Fte$iAc8X;J@aD2opVmDb)~w}At>ALZ;CzWw z`j`trLoI$Z9;r2#7POJ$`W8xFiV78%GnBT*j^S#S%pd!!(nO4iP&6ie-Ml+8k*kRS z71TnRdm?uB++4BuQ)g+v5&wdr;t$8!BSV?<3Z8THEm@QPiDQ!$I-hQRI;iqSgD!2P zm}hN27Uxv@*!^jlsa6)vxH&J-`1F=nFu;)Wd2EO(J^Ku!z^=h_uKl2@jSBnq4VQgp z2jjv=1=z;T^(M{((@9tZUfd)9*(bmB-vu;DaklbmtiST_ZVG`;kB!_M25J}ZgPbyCxb66(l8?-%+D8Xn z@9VPUWwG^rJWLf%TqaIh)b3l3KArGz9CQ|^Q0IsUD80e^a@k!oGwqg;>TgU@r-Ip~ zDaPWzLKW zmAAe1)a>V?zn24=HCJy`m9Tetcx~iQ&aQ-bDb66TFDAuQPMhbe?RVZ9=sI;I_?neJ zkQv9lRH`{+vhXsF0~D6c#(u`<&WH9xiJxwPiqRReijMs@%~$n|TjRmtpZ(XvRMJR0 zdOX&JSn^6IDcyg`yC|d_GH<6BybxK1kS3ipC)s?Ym_=p0dnz`b@ab=9*4g_ z9}c#v;E7PPglxZ*(xFR|wGvsgM zlOx_Djbo?$nyd%Z8g%4H< zVLl=GcY@sn;i(1Z4H!(?UaM+exbKuX+n4xn+NSJ-^P0}#xxPjVg118W6jrLE

LA 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 literal 0 HcmV?d00001 diff --git a/src/index.less b/src/index.less index 723a858..8380a13 100644 --- a/src/index.less +++ b/src/index.less @@ -38,11 +38,11 @@ code { background: transparent; // Override white background } ::-webkit-scrollbar-thumb { - background: #ECF2F9; + background: rgba(0, 160, 233, 0.5); border-radius: 4px; } ::-webkit-scrollbar-thumb:hover { - background: #ECF2F9; + background: rgba(0, 160, 233, 0.8); } @@ -58,10 +58,10 @@ code { } } .ant-table-content::-webkit-scrollbar-thumb,.ant-table-body::-webkit-scrollbar-thumb { - background: #C1C1C1;//#ECF2F9; + background: rgba(0, 160, 233, 0.5);//#ECF2F9; } .ant-table-content::-webkit-scrollbar-thumb,.ant-table-body::-webkit-scrollbar-thumb:hover { - background: #C1C1C1;//#ECF2F9; + background: rgba(0, 160, 233, 0.8);//#ECF2F9; } .ant-modal-title{ @@ -70,68 +70,7 @@ code { } -.adcdTreeSelectorBox{ - width: 230px; - height:calc( 100vh - 145px ); - margin:0 20px 0 0; - background: #fff; - //box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); - position:relative; - border: 1px solid #d9d9d9; - box-sizing: border-box; - .treeBox{ - //height:calc( 100vh - 158px ); - overflow: hidden auto; - padding: 8px 0 0 2px; - border-top: 1px solid #d9d9d9; - } - .ant-input-group .ant-input,.ant-btn{ - border:0; - } - .ant-input-affix-wrapper{ - border:0; - //border-right: 2px solid #d9d9d9; - } - .checkboxBox{ - position:absolute; - top:34px; - width:100%; - height:30px; - background:#fff; - border-top: 1px solid #d9d9d9; - padding-top:4px; - } -} - -.adcdTreeTableBox{ - width:calc( 100vw - 602px ); - height:calc( 100vh - 143px ); - background: #fff; - //box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); -} - -.CrudAdcdTreeTableBox{ - width:calc( 100vw - 602px ); - height:calc( 100vh - 143px ); - background: #fff; - //box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.1); -} - -.radarVideoModal{ - .ant-modal-content{ - width: 100%; - height: 100%; - .ant-modal-body{ - width: 100%; - height: calc( 100% - 120px ); - padding: 0 30px; - } - .ant-tabs-tabpane{ - height: calc( 76vh - 120px ); - } - } -} .toolbarBox{ .ant-form-item{ diff --git a/src/service/apiurl.js b/src/service/apiurl.js index 8646e82..6fb13d9 100644 --- a/src/service/apiurl.js +++ b/src/service/apiurl.js @@ -14,7 +14,17 @@ const apiurl = { qys: { yhjmhPage:service + '/iaCFlrvvlg/page', qsydwPage:service + '/iaCBsnssinfo/page', - wxqPage:service + '/iaCDanad/page', + wxqPage: service + '/iaCDanad/page', + gcys: { + buildInfo: service + '/attResBuilding/info', + krlineList:service + '/stZvarlB/list', + xllineList:service + '/stZqrlB/list', + } + }, + qth: { + rainList: { + list:service + '/attResBase/rainBasinDivision/queryStPptnDetails/list', + } } } } diff --git a/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js b/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js new file mode 100644 index 0000000..d6f83ee --- /dev/null +++ b/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.js @@ -0,0 +1,138 @@ +import React,{useState,useEffect} from 'react'; +import { Table } from 'antd'; +import arrowIcon from '@/assets/images/card/arrow.png'; +import smallCard from '@/assets/images/card/smallCard.png'; +import wrj from '@/assets/images/card/wrj.png'; +import apiurl from '@/service/apiurl'; +import { httpget,httppost } from '@/utils/request'; +import './index.less'; + +const AllWeatherControl = () => { + const [rainList, setRainList] = useState([]) + const rainColumns = [ + { + title: '站名', + dataIndex: 'stnm', + key: 'stnm', + align: 'center', + width: 140, + ellipsis:true + }, + { + title: '今日', + dataIndex: 'today', + key: 'today', + align: 'center', + }, + { + title: '昨日', + dataIndex: 'yesterdayDrp', + key: 'yesterdayDrp', + align: 'center', + }, + { + title: '24h预报', + dataIndex: 'h24', + key: 'h24', + align: 'h24', + }, + ]; + + + // Reservoir Data + const reservoirData = [ + { label: '主坝坝前', value: '103.17', unit: 'm', isPrimary: true, showArrow: true, underline: true }, + { label: '汛限水位', value: '104.50', unit: 'm' }, + { label: '距汛限', value: '-1.67', unit: 'm', isNegative: true }, + { label: '副坝坝前', value: '104.17', unit: 'm' }, + { label: '当前库容', value: '3867.0', unit: '万m³', isPrimary: true }, + { label: '有效库容', value: '2867.0', unit: '万m³', isPrimary: true }, + ]; + + const getRainList = async () => { + try { + const result = await httpget(apiurl.sq.qth.rainList); + if (result.code == 200) { + setRainList(result.data) + } + } catch (error) { + console.log(error); + } + } + useEffect(() => { + getRainList() + }, []) + + return ( +

+ {/* 雨情 Section */} +
+
+
+ arrow + 雨情 +
+
+ record.isTotal ? 'total-row' : ''} + bordered={false} + scroll={{y:300}} + /> + + + {/* 水库水情 Section */} +
+
+
+ arrow + 水库水情 +
+
+
+ {reservoirData.map((item, index) => ( +
+
+ {item.value} + {item.unit} +
+
{item.label}
+ {item.showArrow && } +
+ ))} +
+
+ + {/* 无人机 Section */} +
+
+
+ arrow + 无人机 +
+ 视频墙 +
+
+
+
+
直播画面
+
巡查任务
+
+
+
+
+ ); +}; + +export default AllWeatherControl; diff --git a/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.less b/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.less new file mode 100644 index 0000000..dcf1fe5 --- /dev/null +++ b/src/views/Home/components/Business/SiQuan/components/AllWeatherControl/index.less @@ -0,0 +1,211 @@ +.all-weather-control { + height: 100%; + display: flex; + flex-direction: column; + color: #fff; + padding: 5px; + overflow-y: auto; + + // Global Scrollbar + &::-webkit-scrollbar { + width: 0; + height: 0; + } + + .section { + margin-bottom: 10px; + &:last-child { + margin-bottom: 0; + } + + .section-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 5px; + + .title-wrapper { + display: flex; + align-items: center; + + .arrow-icon { + width: 20px; + height: 18px; + margin-right: 8px; + object-fit: contain; + } + + .section-title { + font-size: 16px; + color: #fff; // Matches the orange/gold color in screenshot + font-weight: 500; + } + } + + .link { + color: #00eaff; + font-size: 14px; + cursor: pointer; + text-decoration: underline; + + &:hover { + color: #fff; + } + } + } + } + + // Rain Table Styling + .rain-section { + .ant-table-wrapper { + .ant-table { + background: transparent; + color: #fff; + + .ant-table-thead > tr > th { + background: rgba(0, 70, 110, 0.6); + color: #fff; + border-bottom: none; + padding: 8px 4px; + text-align: center; + font-size: 13px; + } + + .ant-table-tbody > tr > td { + border-bottom: 1px solid rgba(255, 255, 255, 0.1); + color: #fff; + padding: 8px 4px; + text-align: center; + font-size: 13px; + } + + .ant-table-tbody > tr:hover > td { + background: rgba(255, 255, 255, 0.1) !important; + } + + // Zebra striping if needed, or just transparent + .ant-table-tbody > tr.ant-table-row:nth-child(even) { + background-color: rgba(255, 255, 255, 0.05); + } + } + + .ant-table-placeholder { + background: transparent; + .ant-empty-description { + color: rgba(255,255,255,0.5); + } + } + } + } + + .reservoir-section { + .reservoir-cards { + display: flex; + flex-wrap: wrap; + + .reservoir-card { + width: calc((100% - 20px) / 3); + margin-bottom: 5px; + margin-right: 10px; + &:nth-child(3n) { + margin-right: 0; + } + background-size: 100% 100%; + background-repeat: no-repeat; + height: 60px; // Adjust based on design + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 5px; + position: relative; + + .value { + font-size: 18px; + font-weight: bold; + color: #00D8FF; + .num { + display: inline-block; + padding-bottom: 2px; + } + .num.underline { + border-bottom: 1px solid #00a0e9; + } + .unit { + font-size: 12px; + font-weight: normal; + margin-left: 2px; + color: #fff; + } + + &.primary { color: #00eaff; } + &.negative { color: #68c639; } + } + + .label { + font-size: 14px; + color: #9DD2E4; + margin-top: 2px; + } + + .arrow-up { + color: #ff4d4f; + position: absolute; + right: 5px; + top: 5px; + } + } + } + } + + // UAV Styling + .uav-section { + .uav-content { + display: flex; + align-items: center; + justify-content: space-between; + height: 100px; + position: relative; + + .uav-image { + flex: 1; + height: 100%; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + } + + .uav-actions { + display: flex; + flex-direction: column; + gap: 15px; + margin-left: 10px; + + .uav-button { + width: 120px; + height: 36px; + line-height: 36px; + text-align: center; + background: rgba(18, 56, 102, 0.6); + border: 1px solid #00a0e9; + border-radius: 4px; + color: #fff; + font-size: 14px; + cursor: pointer; + transition: all 0.3s; + box-shadow: 0 0 5px rgba(0, 160, 233, 0.3); + + &:hover { + background: rgba(0, 160, 233, 0.4); + box-shadow: 0 0 10px rgba(0, 160, 233, 0.6); + } + } + } + + // Connecting lines visualization (optional, if needed to match 1:1 perfectly) + .connection-line { + // ... + } + } + } +} diff --git a/src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.js b/src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.js new file mode 100644 index 0000000..2a604f5 --- /dev/null +++ b/src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.js @@ -0,0 +1,35 @@ +import React from 'react'; +import smallCard from '@/assets/images/card/smallCard.png'; +import './index.less'; + +const ManagementCycle = () => { + const data = [ + { label: '安全鉴定', value: '三类坝' }, + { label: '病险水库', value: '是' }, + { label: '除险加固', value: '2024年11月' }, + { label: '降等报废', value: '无' }, + { label: '调度规则', value: '2023年12月', underline: true }, + { label: '应急预案', value: '2023年12月', underline: true }, + ]; + + return ( +
+
+ {data.map((item, index) => ( +
+
+ {item.value} +
+
{item.label}
+
+ ))} +
+
+ ); +}; + +export default ManagementCycle; diff --git a/src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.less b/src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.less new file mode 100644 index 0000000..8748f69 --- /dev/null +++ b/src/views/Home/components/Business/SiQuan/components/ManagementCycle/index.less @@ -0,0 +1,59 @@ +.management-cycle { + height: 100%; + padding: 10px; + overflow-y: auto; + + // Global Scrollbar + &::-webkit-scrollbar { + width: 0; + height: 0; + } + + .card-grid { + display: flex; + flex-wrap: wrap; + height: 100%; + align-content: flex-start; + + .cycle-card { + width: calc((100% - 20px) / 3); + height: 80px; // Slightly taller to accommodate text comfortably + margin-bottom: 15px; + margin-right: 10px; + + &:nth-child(3n) { + margin-right: 0; + } + + background-size: 100% 100%; + background-repeat: no-repeat; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + padding: 5px; + box-sizing: border-box; + + .value-wrapper { + margin-bottom: 5px; + + &.underlined { + border-bottom: 1px solid #00a0e9; // Match the blue theme + padding-bottom: 2px; + } + + .value { + font-size: 18px; + font-weight: bold; + color: #00D8FF; + } + } + + .label { + font-size: 14px; + color: #fff; + text-align: center; + } + } + } +} diff --git a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/CapacityCurve.js b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/CapacityCurve.js new file mode 100644 index 0000000..57e873e --- /dev/null +++ b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/CapacityCurve.js @@ -0,0 +1,175 @@ +import React, { useMemo } from 'react'; +import ReactEcharts from 'echarts-for-react'; +import { Table } from 'antd'; +import { GetInterval } from '@/utils/tools'; +const CapacityCurve = ({data=[]}) => { + const dataSource = (data && data.length > 0) ? data : []; + + // Robust data parsing + const validData = dataSource.map(item => ({ + ...item, + rz: parseFloat(item.rz), + w: parseFloat(item.w) + })).filter(item => !isNaN(item.rz) && !isNaN(item.w)); + + const hasData = validData.length > 0; + + let maxVal = hasData ? Math.ceil(Math.max(...validData.map(obj => obj.rz))) : 100; + let minVal = hasData ? Math.floor(Math.min(...validData.map(obj => obj.rz))) : 0; + let maxValX = hasData ? Math.max(...validData.map(obj => obj.w)) : 100; + let minValX = hasData ? Math.min(...validData.map(obj => obj.w)) : 0; + + // Prevent min === max for axes + if (minVal === maxVal) { + maxVal += 1; + minVal -= 1; + } + if (minValX === maxValX) { + maxValX += 10; + minValX -= 10; + if (minValX < 0) minValX = 0; + } + + // Calculate safe interval + let intervalX = GetInterval(minValX, maxValX); + if (intervalX <= 0 || isNaN(intervalX)) intervalX = 20; + + const columns = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + render: (text, record, index) => index + 1, + width: 80, + align: 'center', + }, + { + title: '水位(m)', + dataIndex: 'rz', + key: 'rz', + align: 'center', + }, + { + title: '库容(万m³)', + dataIndex: 'w', + key: 'w', + align: 'center', + }, + ]; + + const option = useMemo(() => { + return { + toolbox: { + show: true, + feature: { + saveAsImage: { + show: true, + excludeComponents: ['toolbox'], + pixelRatio: 2, + name:"库容曲线图" + } + }, + right: "14%", + top:"5%" + }, + title: { + text: "库容曲线图", + left: "40%", + textStyle: { + color: '#fff', + } + }, + tooltip: { + trigger: 'axis', + }, + grid: [ + { + top: "10%", + left: "15%", + right: "15%", + bottom: "8%" + }, + ], + xAxis: [ + { + name: "库容(万m³)", + nameTextStyle: { + color: '#fff', + }, + nameGap: 5, + type: 'value', + min:Math.floor(minValX / 5) *5, + max:Math.ceil(maxValX / 5) *5, + interval: intervalX, + splitLine: { + show: false + }, + axisLabel: { + color: '#fff', + fontSize: 12, + }, + } + ], + yAxis: [ + { + type: 'value', + name: "库水位(m)", + nameTextStyle: { + color: '#fff', + }, + minInterval:1, + splitLine: { + show: true, + lineStyle: { + color: '#fff', + width: 0.25, + type: 'dotted' + } + }, + axisLabel: { + color: '#fff', + fontSize: 12, + }, + axisLine: { + show: false + }, + axisTick: { + show: false, + }, + min: minVal, + max: maxVal + } + ], + series: [ + { + type: 'line', + color: "#007AFD", + data: validData.map(item=>[item.w,item.rz]), + smooth: true + }, + ] + }; + }, [minVal, maxVal, minValX, maxValX, intervalX, validData]); + + return ( +
+
+
+ +
+ +
+ + ); +}; + +export default CapacityCurve; diff --git a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/MainBuildingInfo.js b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/MainBuildingInfo.js index 8e5b37c..0ba2398 100644 --- a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/MainBuildingInfo.js +++ b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/MainBuildingInfo.js @@ -1,7 +1,8 @@ -import React from 'react'; +import React,{useState,useEffect} from 'react'; import { Descriptions } from 'antd'; +const MainBuildingInfo = ({data={}}) => { + const [info, setInfo] = useState({}) -const MainBuildingInfo = ({ data = {} }) => { const commonLabelStyle = { width: '200px', textAlign: 'right', @@ -21,63 +22,68 @@ const MainBuildingInfo = ({ data = {} }) => { style: descriptionStyle, }); + useEffect(() => { + setInfo(data) + }, [data]) + + return (
{/* 主坝 */} - {data.mainDamType || '-'} - {data.mainDamCrestElevation || '-'} - {data.mainDamLength || '-'} - {data.mainDamWidth || '-'} - {data.mainDamMaxHeight || '-'} + {info.mainType || '-'} + {info.mainCrestElevation || '-'} + {info.mainCrestLength || '-'} + {info.mainCrestWidth || '-'} + {info.mainMaxHeight || '-'} {/* 副坝 */} - {data.auxDamType || '-'} - {data.auxDamCrestElevation || '-'} - {data.auxDamLength || '-'} - {data.auxDamWidth || '-'} - {data.auxDamMaxHeight || '-'} + {info.auxType || '-'} + {info.auxCrestElevation || '-'} + {info.auxCrestLength || '-'} + {info.auxCrestWidth || '-'} + {info.auxMaxHeight || '-'} {/* 溢洪道 */} - {data.spillwayType || '-'} - {data.spillwayCrestType || '-'} - {data.spillwayFoundation || '-'} - {data.spillwayCrestElevation || '-'} - {data.spillwayNetWidth || '-'} - {data.spillwayDissipationType || '-'} - {data.spillwayCheckFlow || '-'} - {data.spillwayDesignFlow || '-'} - {data.spillwayDissipationFlow || '-'} + {info.spillwayType || '-'} + {info.spillwayCrestType || '-'} + {info.spillwayFoundation || '-'} + {info.spillwayCrestElevation || '-'} + {info.spillwayNetWidth || '-'} + {info.spillwayEnergyDissipation || '-'} + {info.spillwayCheckFloodDischarge || '-'} + {info.spillwayDesignFloodDischarge || '-'} + {info.spillwayScouringDischarge || '-'} {/* 灌溉发电洞 */} - {data.irrigationTunnelType || '-'} - {data.irrigationTunnelLining || '-'} - {data.irrigationTunnelFoundation || '-'} - {data.irrigationTunnelInletElevation || '-'} - {data.irrigationTunnelSectionSize || '-'} - {data.irrigationTunnelLength || '-'} - {data.irrigationTunnelDesignFlow || '-'} - {data.irrigationTunnelGateType || '-'} - {data.irrigationTunnelHoistType || '-'} + {info.irrigationType || '-'} + {info.irrigationLiningType || '-'} + {info.irrigationFoundation || '-'} + {info.irrigationInletElevation || '-'} + {info.irrigationCrossSection || '-'} + {info.irrigationLength || '-'} + {info.irrigationDesignFlow || '-'} + {info.irrigationGateType || '-'} + {info.irrigationHoistType || '-'} {/* 放空洞 */} - {data.outletTunnelType || '-'} - {data.outletTunnelLining || '-'} - {data.outletTunnelFoundation || '-'} - {data.outletTunnelInletElevation || '-'} - {data.outletTunnelSectionSize || '-'} - {data.outletTunnelLength || '-'} - {data.outletTunnelDesignFlow || '-'} - {data.outletTunnelGateType || '-'} - {data.outletTunnelHoistType || '-'} + {info.emptyingType || '-'} + {info.emptyingLiningType || '-'} + {info.emptyingFoundation || '-'} + {info.emptyingInletElevation || '-'} + {info.emptyingCrossSection || '-'} + {info.emptyingLength || '-'} + {info.emptyingDesignFlow || '-'} + {info.emptyingGateType || '-'} + {info.emptyingHoistType || '-'}
); diff --git a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/XlCurve.js b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/XlCurve.js new file mode 100644 index 0000000..7a8e1ae --- /dev/null +++ b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/components/XlCurve.js @@ -0,0 +1,159 @@ +import React, { useMemo,useEffect,useState } from 'react'; +import ReactEcharts from 'echarts-for-react'; +import { Table,Empty } from 'antd'; +import { GetInterval } from '@/utils/tools'; +const XlCurve = ({data=[]}) => { + + + + const columns = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + render: (text, record, index) => index + 1, + width: 80, + align: 'center', + }, + { + title: '水位(m)', + dataIndex: 'z', + key: 'z', + align: 'center', + }, + { + title: '流量(m³/s)', + dataIndex: 'q', + key: 'q', + align: 'center', + }, + ]; + + const option = useMemo(() => { + if (data.length > 0) { + const maxVal = Math.ceil(Math.max(...data.map(obj => obj.q))) + const minVal = Math.floor(Math.min(...data.map(obj => obj.q))) + const maxValX = Math.max(...data.map(obj => obj.z)) + const minValX = Math.min(...data.map(obj => obj.z)) + return { + toolbox: { + show: true, + feature: { + saveAsImage: { + show: true, + excludeComponents: ['toolbox'], + pixelRatio: 2, + name:"泄流曲线图" + } + }, + right: "14%", + top:"5%" + }, + title: { + text: "泄流曲线图", + left: "40%", + textStyle: { + color: '#fff', + } + }, + tooltip: { + trigger: 'axis', + }, + grid: [ + { + top: "10%", + left: "15%", + right: "15%", + bottom: "8%" + }, + ], + xAxis: [ + { + name: "库水位(m)", + nameTextStyle: { + color: '#fff', + }, + nameGap: 5, + type: 'value', + min:Math.floor(minValX / 5) *5, + max:Math.ceil(maxValX / 5) *5, + interval: GetInterval(minValX,maxValX), + splitLine: { + show: false + }, + axisLabel: { + color: '#fff', + fontSize: 12, + }, + } + ], + yAxis: [ + { + type: 'value', + name: "流量(m³/s)", + nameTextStyle: { + color: '#fff', + }, + minInterval:1, + splitLine: { + show: true, + lineStyle: { + color: '#fff', + width: 0.25, + type: 'dotted' + } + }, + axisLabel: { + color: '#fff', + fontSize: 12, + }, + axisLine: { + show: false + }, + axisTick: { + show: false, + }, + min: minVal, + max: maxVal + } + ], + series: [ + { + type: 'line', + color: "#007AFD", + data: data.map(item=>[item.z,item.q]), + smooth: true + }, + ] + }; + } + + }, [data]); + + + + return ( +
+
+
+ +
+ {data.length > 0 ? : + + } + +
+ + ); +}; + +export default XlCurve; diff --git a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.js b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.js index 80c756c..c2a9217 100644 --- a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.js +++ b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.js @@ -1,16 +1,22 @@ -import React, { useState } from 'react'; +import React, { useState,useEffect } from 'react'; import { PaperClipOutlined } from '@ant-design/icons'; import PdfView from '@/views/Home/components/UI/PdfView' import BasicInfo from './components/BasicInfo'; import MainFeatureParams from './components/MainFeatureParams'; import MainBuildingInfo from './components/MainBuildingInfo'; +import CapacityCurve from './components/CapacityCurve'; +import XlCurve from './components/XlCurve'; +import { httpget,httppost } from '@/utils/request'; +import apiurl from '@/service/apiurl'; import './index.less'; const EngineeringElements = ({ data }) => { const [activeButton, setActiveButton] = useState('basic'); const [pdfOpen, setPdfOpen] = useState(false) const [filesItem, setFilesItem] = useState({}) - + const [info, setInfo] = useState({}) //主要建筑物信息 + const [krLineList, setKrLineList] = useState([]) //库容曲线 + const [xrLineList, setXrLineList] = useState([]) //泄流曲线 const buttons = [ { label: '工程基础信息', value: 'basic' }, { label: '主要特征参数', value: 'params' }, @@ -18,7 +24,42 @@ const EngineeringElements = ({ data }) => { { label: '水库库容曲线', value: 'capacity-curve' }, { label: '水库泄流曲线', value: 'discharge-curve' }, ]; - + + // 建筑物信息 + const getBuildInfo = async () => { + try { + const result = await httpget(apiurl.sq.qys.gcys.buildInfo); + if (result.code == 200) { + setInfo(result.data) + } + } catch (error) { + console.log(error); + } + } + + // 库容曲线 + const getKrList = async () => { + try { + const result = await httppost(apiurl.sq.qys.gcys.krlineList); + if (result.code == 200) { + setKrLineList(result.data) + } + } catch (error) { + console.log(error); + } + } + + // 泄流曲线 + const getXlList = async () => { + try { + const result = await httppost(apiurl.sq.qys.gcys.xllineList); + if (result.code == 200) { + setXrLineList(result.data) + } + } catch (error) { + console.log(error); + } + } const handlePreview = (data) => { setPdfOpen(true) setFilesItem(data) @@ -31,7 +72,11 @@ const EngineeringElements = ({ data }) => { case 'params': return ; case 'buildings': - return ; + return ; + case 'capacity-curve': + return ; + case 'discharge-curve': + return ; default: return (
@@ -41,7 +86,11 @@ const EngineeringElements = ({ data }) => { ); } }; - +useEffect(() => { + getBuildInfo() + getKrList() + getXlList() + }, []) return (
diff --git a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.less b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.less index 4d6e7c6..1ffa598 100644 --- a/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.less +++ b/src/views/Home/components/Business/SiQuan/components/ModalComponents/EngineeringElements/index.less @@ -49,14 +49,21 @@ width: 6px; } &::-webkit-scrollbar-thumb { - background: rgba(255, 255, 255, 0.2); + background: rgba(0, 160, 233, 0.5); border-radius: 3px; } &::-webkit-scrollbar-track { background: transparent; } + &::-webkit-scrollbar-thumb:hover { + background: rgba(0, 160, 233, 0.8); + } .engineering-descriptions { + table { + table-layout: fixed !important; + } + .ant-descriptions-view { border-color: rgba(59, 124, 255, 0.3); } diff --git a/src/views/Home/components/Business/SiQuan/index.js b/src/views/Home/components/Business/SiQuan/index.js index 9a816d6..01f1278 100644 --- a/src/views/Home/components/Business/SiQuan/index.js +++ b/src/views/Home/components/Business/SiQuan/index.js @@ -6,8 +6,8 @@ import MonitoringElements from './components/MonitoringElements'; import ReservoirAreaElements from './components/ModalComponents/ReservoirAreaElements'; import EngineeringElements from './components/ModalComponents/EngineeringElements'; import DownstreamElements from './components/ModalComponents/DownstreamElements'; -// import ManagementElements from './components/ModalComponents/ManagementElements'; -// import AllWeatherMastery from './components/AllWeatherMastery'; +import AllWeatherControl from './components/AllWeatherControl'; +import ManagementCycle from './components/ManagementCycle'; import CommonModal from '../../UI/CommonModal'; import { httppost } from '@/utils/request'; import apiurl from '@/service/apiurl'; @@ -23,7 +23,6 @@ const SiQuan = () => { { label: '库区要素', value: 'kqys' }, { label: '工程要素', value: 'gcys' }, { label: '下游要素', value: 'xyys' }, - // { label: '管理要素', value: 'glys' }, ]; const getInfo = async () => { @@ -64,7 +63,7 @@ const SiQuan = () => { } > @@ -79,10 +78,10 @@ const SiQuan = () => { className="panel-card card-1" headerExtra={ console.log('管控全天候 clicked')} />} > -
内容填充区域
+
-
内容填充区域
+
diff --git a/src/views/Home/components/Business/SiQuan/index.less b/src/views/Home/components/Business/SiQuan/index.less index 07469e1..7652176 100644 --- a/src/views/Home/components/Business/SiQuan/index.less +++ b/src/views/Home/components/Business/SiQuan/index.less @@ -31,8 +31,8 @@ } .right-part { - .card-1 { flex: 4; } + .card-1 { flex: 5; } .card-2 { flex: 3; } - .card-3 { flex: 1; } + .card-3 { flex: 2; } } }