From ed2b91f3bb95717a52e2054314df34c9dfa72bc9 Mon Sep 17 00:00:00 2001 From: Swanky <413564165@qq.com> Date: Fri, 5 Jan 2024 20:44:00 +0800 Subject: [PATCH] 1 --- package-lock.json | 32 +++ package.json | 1 + public/images/摄像头数量.png | Bin 0 -> 2796 bytes public/images/气象站数量.png | Bin 0 -> 2892 bytes public/images/物联网底座.png | Bin 0 -> 6080 bytes public/images/生态修复工程图标.png | Bin 0 -> 11077 bytes public/images/生态修复工程背景.png | Bin 0 -> 31163 bytes public/images/虫情设备数量.png | Bin 0 -> 2493 bytes src/components/Main/Content/index.js | 9 +- .../Cdzzy/CdzzyLeft/Zbsj/echartsOptions.js | 246 ++++++++++++++++++ .../components/Cdzzy/CdzzyLeft/Zbsj/index.js | 30 +++ .../Main/components/Cdzzy/CdzzyLeft/index.js | 16 ++ .../components/Cdzzy/CdzzyLeft/index.less | 23 ++ .../Stxfgc/StxfgcLeft/Mjtj/echartsOptions.js | 81 ++++++ .../Stxfgc/StxfgcLeft/Mjtj/index.js | 28 ++ .../StxfgcLeft/Tzjetj/echartsOptions.js | 73 ++++++ .../Stxfgc/StxfgcLeft/Tzjetj/index.js | 28 ++ .../components/Stxfgc/StxfgcLeft/index.js | 61 +++++ .../components/Stxfgc/StxfgcLeft/index.less | 22 ++ .../Main/components/Wlwsb/WlwsbLeft/index.js | 49 ++++ .../components/Wlwsb/WlwsbLeft/index.less | 24 ++ .../Yhsw/YhswLeft/Fsqmjtj/echartsOptions.js | 3 +- src/utils/apis/StxhApi.js | 13 + 23 files changed, 735 insertions(+), 4 deletions(-) create mode 100644 public/images/摄像头数量.png create mode 100644 public/images/气象站数量.png create mode 100644 public/images/物联网底座.png create mode 100644 public/images/生态修复工程图标.png create mode 100644 public/images/生态修复工程背景.png create mode 100644 public/images/虫情设备数量.png create mode 100644 src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/echartsOptions.js create mode 100644 src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/index.js create mode 100644 src/components/Main/components/Cdzzy/CdzzyLeft/index.js create mode 100644 src/components/Main/components/Cdzzy/CdzzyLeft/index.less create mode 100644 src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/echartsOptions.js create mode 100644 src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/index.js create mode 100644 src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/echartsOptions.js create mode 100644 src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/index.js create mode 100644 src/components/Main/components/Stxfgc/StxfgcLeft/index.js create mode 100644 src/components/Main/components/Stxfgc/StxfgcLeft/index.less create mode 100644 src/components/Main/components/Wlwsb/WlwsbLeft/index.js create mode 100644 src/components/Main/components/Wlwsb/WlwsbLeft/index.less create mode 100644 src/utils/apis/StxhApi.js diff --git a/package-lock.json b/package-lock.json index 1da41e0..dd5e43c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,6 +30,7 @@ "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "echarts": "^5.4.3", + "echarts-gl": "^2.0.9", "eslint": "^8.3.0", "eslint-config-react-app": "^7.0.1", "eslint-webpack-plugin": "^3.1.1", @@ -6093,6 +6094,11 @@ "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz", "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, + "node_modules/claygl": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz", + "integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==" + }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz", @@ -7128,6 +7134,18 @@ "zrender": "5.4.4" } }, + "node_modules/echarts-gl": { + "version": "2.0.9", + "resolved": "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz", + "integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==", + "dependencies": { + "claygl": "^1.2.1", + "zrender": "^5.1.1" + }, + "peerDependencies": { + "echarts": "^5.1.2" + } + }, "node_modules/echarts/node_modules/tslib": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", @@ -22695,6 +22713,11 @@ "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz", "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" }, + "claygl": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/claygl/-/claygl-1.3.0.tgz", + "integrity": "sha512-+gGtJjT6SSHD2l2yC3MCubW/sCV40tZuSs5opdtn79vFSGUgp/lH139RNEQ6Jy078/L0aV8odCw8RSrUcMfLaQ==" + }, "clean-css": { "version": "5.3.3", "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz", @@ -23515,6 +23538,15 @@ } } }, + "echarts-gl": { + "version": "2.0.9", + "resolved": "https://registry.npmmirror.com/echarts-gl/-/echarts-gl-2.0.9.tgz", + "integrity": "sha512-oKeMdkkkpJGWOzjgZUsF41DOh6cMsyrGGXimbjK2l6Xeq/dBQu4ShG2w2Dzrs/1bD27b2pLTGSaUzouY191gzA==", + "requires": { + "claygl": "^1.2.1", + "zrender": "^5.1.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", diff --git a/package.json b/package.json index 8ee944b..b614e18 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "dotenv": "^10.0.0", "dotenv-expand": "^5.1.0", "echarts": "^5.4.3", + "echarts-gl": "^2.0.9", "eslint": "^8.3.0", "eslint-config-react-app": "^7.0.1", "eslint-webpack-plugin": "^3.1.1", diff --git a/public/images/摄像头数量.png b/public/images/摄像头数量.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d29ced1c2b5c758939ab372cece59db631b858 GIT binary patch literal 2796 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 LNkvXXu0mjfgnU>! literal 0 HcmV?d00001 diff --git a/public/images/生态修复工程背景.png b/public/images/生态修复工程背景.png new file mode 100644 index 0000000000000000000000000000000000000000..6500868a89b595be3af0c77b9d6b8559ac0068cf GIT binary patch literal 31163 zcmV)KK)Sz)P)PyA07*naRCr#+y~~be>2)Ty|9wteva*V-Bv~RQw1h^3rrHt(r~%tk4I1_XSmUNR zmmh#^Hz4^T`~ZH91{xlDX3s3b)}Y-m8ngvUE|FDPnGtc$-q!jq>tFjn`$R@j5;{Ou zMx3+nm-Vgnee2RD{H%@t{@u@?{}285zxX}={)^B0XFvF)O`re!Hof_0EB^J*mml}v zzx#^6zx@UOeXqac_fK#2*=?I1e#PHExoOkg(>i_eFmrQnrs?U+Hhnrx)8kE>o{nug zebu*rf77PZfq&m0+Vtf#O&@d3*YUZ(i!-}>XwzxNvg=vv+|F$}KeqMep-t1PX*%=! z>GqNT#^2{dTW^~FernTnH%-Sc`R_8f>G;%cr@QH4Y3=rS>dVDm4Z8~Zj z@p=3lT3eS>n+|iknWpJ!IklUG%dCgFP4V4yGfjt6!+!92Yq7oKa?Wi`({Y*(=eEYW z@&7}7cjSKObDP$4JI3Gh($;0_>&3G1*{b83TRZssxwWaSxCiSxwL@!dT9-B*4!pRr zPAr38&vAV7)RuOb=XE_VGrn6}TietQ-hR`*W*$R)ex9dkj_=#l=GeZr8GqxrV!u-? zGvQdL<)CAZ=X9QCT#wivk7-?(b~wz_y6QP@GmfK8YwWd6(=yHNz;of#-saZYvhv?p zf12kw=@w_?b8R!P#j;}Q&2g>T-W+Ee2NK5~`-*MkdGPPpBF;9B9pB+I9wR=FgW?vr zjTXldKmGgIYJ9LP^E%;Zd5ZWYHm@UyW7TJ|z4%}3l*bYOTjR2DPyC60apQ0`V!2rU z90w80@G#@J7v7u+XFAO|4_q$XOr8f$HLh0qJ3pS{Q=C#;ZF6vdIs}|M?^x`Wr-c)X zy~o4QR%{`@ta!fS zvjq=DKT}^png zpTBw4rgyh(diA*C-}rg|OaA-GU7H?m^5m!2H*I?SvQ4*7D?lKA;@?+C{{Hk;o1XM} zfI$3&;eUUcr`OZ;`gmH`_jmJj3L`&F(?`>^3JAiu<1-lf2N?S)K*2xfrv?zX575x( z@$c~oM)}su0SM-{#`5uV3(v5C@AE1Ga27m}u!eEC1h9M5% zD#kjNJJUc;a~S+3Uai~)40qU~I99DcP3PER*rGNcw5|*vA5a_qI0hTfFx*dJi)5tZ zyErDih;5n=(;UWGz=M}V#}w~V01RLKFbG@@r>XtTv8RQg5bt}K`Y?Vpr!YL+w+t|C z;1Y(9+rc&u_$>a0)xg>^UOq1!2S827KnR2(nQ;&Tr3(Yj4b$Gmee7>`fIIF1fCYfs z+5&5X>%hY?;MmaX*a^5asMw}|*E0(M(DCDX#ddM?V1UC{0J!4XtoXz5N+TD`(o_vL z6qb$Pg*DbWKnbTw<38bgUYl-UY4Wf=;zj^aKm#@u4=pj%5TgBuMdUX+7GWKYVeCrI z2@PxjEMZR9)y9*+Z8L$JArKFvPUQBsWFmBLx>1j9==fm5iFpQNf}zinhwL96m4Vf3 zFFGb(H9(4ij5jQx056lCc`ZjI4d(}I&4*(U=UHkpa0pq8y)<9 zi4K1LmptCj-?Zs_j0pbe7k}0M!zbTe-A;xE|9S`B*+jx8Zxvd8oyJaccm7$a;Jk4`E+AFpv?!N&};eE$C zIu-*-8rcTJe}XY4&>YSYK&|xbV?FN+z!DGonUMrN%@zhbUQPm0Y=`SHGML+0>mSy& z1$@l0jNbV4*sxAK%m(pzDb6zuZFv9j@2aQ=)}GHdj$0l)_ARf|p9dfWyyV~5HzJL> zm@itfvc3(CKgYgku+^+$sOK;D5sSn#759zzBLHrR&*W^tAli7z1I97JL6+gSI|>`Ov}Fm$Go>&*2tgao5TO5z07i>26kNZ#K=k3$B%9<7fyM}A!poM<2o&`M@ zxSMgE09q>$a%$mSPIohuP1-aU9mx1WBi{nmf^-%Q{B!5==g zMo-H}6piXMP}5Ycnz zC}kab{WSLHwt{{-%johu8(PHAIKQBE0wH)jv40wO0~4-+*Y!Efb6c?A6;T2K?b1kl zpRmE)kq!WTa1fGC8#Pu)-#4`Y^Mhh0(nuB&|tBhqBLVM^iIy?`4CVGRu zG7KdTYT@rBNN5zrVE~9KSa4PQ^2;n&S@)3Oi7Rano?!?9SthDED&4ptp z{imo&XDOOW(GpLD%ZfT8w-k4j7nwh#3=1$ZD*fi~{OCtM{MszW2|TZ6cA2Y#vAWy zHP}I)(8z)kN>*TLX8?vgdq)tle#i^qd52dIgG&2?&uskdLC1FyT`bcayNP8EFvd6} zc|3crikRR$G+h5_K0APZJlKa^?3qWkUqhJz%UB90u18KsURZ5NrUAG zDb5M@4;oFrOWfWBzuo`?Z_@XV)FAj>?E^+%+gf8=&{4v@?fL=@)dF4%plhSWZS-qx zBfTzxRrLNr92or5Ta|H4Llx%|52($hXgP0R#{!J>y_HTP5*`N06cvoohDMPi0J|@+ zQj|ng0RaV&74S)?m<2R6YvjE_No~AtdGw_A<2&2{(O2G2H{Q5+icECxuq<)L*Rw|( zHmf)*0UM%*xVN#ZCAMgqO}HxdzDKv(e?~L5zp&vz7waN?cldueCyF!(;ze)paspy$ z8$~bCHRCA(h~jw8Pmj~9H=j*^@ZjsMG8=tqsuimT`4A%D%4gB>qfT}qcD;~S90RREUhlWaq zoU|3`7KoCx-BM1-JSb8zoz($=Mi@s;(Oew84KcPtATt$0O9UgW?NPx8cm!`Ru7kjg zg_-<7=R4IY(KL90GSZNNW@KWP-(az!l5Bi+exmMpeQ01s_29bDZVI^Q28g~PT?Z$8 zOApE7+M}l)(j$Vj$h;1`KKc*u1&%>^2RtG?tK?Wo1T^*vK9y2+zvP(|b&n#ceUQ9*#f@ssba&rwB}k-=SCUVqW%w-4)u zZt&6DRsq400Zs>C5K+OGpos9<9!)ev2C>}z>9LU}l7}xLH~^tW1=uFM{f7<+57V^X zDAOna;&Ga8Q!^m{U!wwSV~h-98HmP(;sHPq4303`CjbStg(rf>2nGo(9SjUA5gG8l zFYReaH;AG-PMe1_=hp{18wrG{hh$0QTn&22=xRl;IqZ z2;W2orjL@#x30kJ4={nz?uJB$!r4w8R0Rf9w!`BEN(arHbe-t^PFX2~${s5S2tY|{ z5i*Db8b$@yMR0JSG(bs}sK9(Ww&(jH&R!9RG#nEoR`{7f06UB8wnh$v_Dcf_Lu?HP zmsG%xOVqWU05r?H1_A*d4R3%e!GaDs%{tCQM&8d6_RIHD#+}g>mx~~ff=veqP&=LS zp)AA@)8JwvDh`5M4FJPYNVmcsNoO%1${^8}rzb=PKm3!Q?tnq8Hc~|K*$z!qDWX`U z(nO{EV<9kI07LE};bloATnF0nuJz;TGL933=Z&o7i2aP5KL_dw4e(((oqBv>zwI<>s?FlJKl-d2835>3MnRw z@=-G8)T5OJzte|G@ma>N8+>lhUNc{E?hC1*)F5Ep=#hs}HefI+$R|JcMQrl^G8>F9 zbBf`WCfY^@G%UIR{GG?{G|xD;fTMIQO^pF;Dp=4+(H4dGPEnX%tg@~s+RKnJGSJyz zf4F)ww&K0hLE&7r&l2uA8MR*!PMxNrql`&Hdq|B$cO#_S6OBw0p=ea%K z3r0dkQvf(C9o5cwp<;B6nGza+M((vC-@KT~jy?UyJ5-tPzqg<{%72iS0E2SK^m$jKo&Prk1IEx)k{l1O zM|)0zIq4)Q=FAcjAn-9!q~Q7j?jwPOR23tIOrQaSBtaO@5?prPYw+@-UnImpw3QP= zJ|7hY3Q(BIB!k=mH}wr>3b7V|5el_`oFMdyH0_L>QU}9Dh0GEMOiD|rnCB>vOYo<2 zFHzd2Iim}K9RbtMyyzobT%HTFouq!-2@ugnfG7#8+NP=&d?4olgEzl1{lTC7bh@Wz zV3d~Gy#@#a80IC*9|HV#B!Y?QWnwuP0LIoq?CRJ%btNc7N+ z>lb3Z_$(rXDZt>qO%jp`7Bu*venKTyWB_j;1!J+3xdp}3>7m;;t&gk$kns&2U~Q+u z4^to}&7?F@;Kn(1gU}!X7!G0VwH-JsFjA^TFbz~a(kj;K%2R;R z(ea78v6zeZ9hoXj6NC{Z#e|enq_ZpKG5Gxw8IZP7bO1s{l!?4wey?*%J@_rP^O4Z(k_mf`Ucr^Tt5|^DZ_-OjQ5o_S^*xek0{ia4Y-W53~Z!4%DC&*4F^5b zl~Szj03_N;$I4naXEouR%p1bg= z+y^*sN)nCttbmw3yNm#_tfEg!*V-RXQh|!8rWBOZ~tbA3=9IU zGZ=;A5)njw!9RWdb`FgIc6UfAjnAI``u*&h0vuwYg~IT!A1O=dp;s0!Z%^|S)x}Xm z5SqZ3QA6;)O>e_dkGj>@DkOVoQyBfPTv+Bzpr|8=%Hj})2@3Zi&Md_n{ec(khg`Bhsz#z}ed zl)3?C2hDAQ7##HgiUJT3(9qKk&h7SaZjT`n$KR+l)_3iwN@0}iitknC5BB{yqtJ^7 zf~=k=8R#P_FI`a^FMP=giYP(6d>CKTJcp?I-B36dc579!gkg!k@Ze!5M6m>+Gar>I zs%l<^!mhB5((Abeh@QnLAnE|MLY~&O2%-AYi$904Wcz`*3E^p+er-))0aZm~Tox~C zrpFeq+r}C0hWPmb{fw_lF zEw%N6=Njh+po!%cx7>h=F3QA_g8`%ql)Mix)+ky+`w4`2%Cb>3l0a3wS%SONNfmhE zcyw1wE7_7rz$^*SJ&oC{jUxe5F9J{q z*J-R13^F3YJyeK6k(N{z&nYhsFCPuF>nemb0)hksX(J8_aH68g!WJx)WmI&Q89|Ir zj5ifdjAYC?V)P;bBhL-{U|}7zx3I^jM}fgLnkWt(pzufY^cTNaAs&}h()ilhL-G4w zf!SpWX%~ta6>KwwcrPdr_e`P48XCdip{?^h!9XCubWzq1;3u<$jxGG^DLntD;|lr* zZ6sU-)(t+eiJN!Ir!@e1{ydq;2r(_wx%?~=LJ=7WkFT+Pl~^x4Jh}Y4`)9Hmg&$aX3D9;YrZK-6T}HI^-^@8 z_+(dU(t`Aw1*TcLut?sXt6fbsk-}1np+E&rbaL!4&Un?tsl(i2JIK+ekjFw=8fMr= zUK1PZ&X0>)!J0faMiuN=BVUvM(s;Q#w^9x=#)`a@$3#%#If&ifth31~vfU+LByU>T zM9g(60F_48DXZB4f|)vsT8&pFeKvI$(qhu3dzxg=I4b*)v6V{O&nG#2U0qi+U)BlO z%!r~hc$NK1>+pioR)mtBR-)(a7cf&&c^-7g>4+H|1UD9ksqh+w^xk7xJomYKMrPPn zQdK|}Ez;9SMG%=ka%NEm7{0ND6KWQbvHmo@`t-Buhd=shd-a_ZkR=xx2(Hu?eE;sZ z@q9Xs)W5r)z-Qs?A!H4GtgNAT+pM8a4o`g6MGLKu9SG)!(;BIx0R}YurMkF)0jh~X z2`M_L4eD-=_&mS@fMCE0+Q(D*|UcV}Pm-7rdN9C#A5LYp{q=ovO0N`jnWcGw7PHli-Aj6;nGlPbK z39oS$iP6v#pwi1$rVjad^$S4OPN!T*A7u|8h}EjNbvBUA6OG7ZX2BF-3 z3BICF02XYc5dHEX)uK>|m8s%-ffZS=fbFuUTf{9z%VPSY_d6^*54A?6Vpnci3|V;r5BM~P>j*Rm_i!qqo^q>?5<^pY(dR5xH_ zsAnaB4AsxlAxvS2F4CqY$GgTs+EL9Q5?6&IQQZWMY#RFj19IpDX(!Y0Snai^#vmj$ zN5p8B1e{W4DaV^b(zTa3BhcGu4pcJAyO(BE^#Vw$a)uC_b{V6anp?C1a>aHSW~MP%^TJZA$! zrHTLsztT0iCm8r5W@K=8Y|FbMQo8Bfga*_w_y7Y_L^UdijVUq+K-kbk+EGLYQK<|d zz=2kQSlL6hp`3pg7#vSB=xLnPIPCqGA~mKjc9bS)Qvd)U07*naRFH@r zr#Q>}{-BZI1J$N>=y9QFgG^^PM)IUrbWgBBkAF?MNqjXB`d#34`lgMt^ocH3cbl2iPi7=#F`WR20yQ)&76M4`s5FrXp9Fpe91?ov)ury! zF+|r?*T>F}qZLIY4t}^_Y)ll|`SduwiaLWIZHmrz0AU9R#`Y6?Swyut-P7?M-@%}Y z{+eLmW^@r1_$Jm?69$6~Mf5uK19c;H>L@_qvGv-45S0lCjtmeL2n@!^00MC|ojV*O zUTQZ1254(dFrclqcYX;7YXSheT@b*OBDxzH;Ng~6Un7Ia8iF>^HG}QG(L^lTL(t<) z%Ef(y2nZ1wIO`@g1K4dDefFs;2DYS>ma5-aHzNZZ(8y@4%Ons9Bx+>9v`j9qTzw1A zo7NTdz!=&yBc3fHRC53@@cv=EM=)^fi4GW~iTdB+jGIeg=8veP)E%CQ3<}7Qv#&Yu z+sJ^=ap)4JbNDZ{VnqgF9BXYs7B3m3+`d4bX^7xVjZxFR9_fgN=n#kpe;_LIF7P=6hQP93$4rwih;P5=={%R2ngP_t~am>)m$4o18z7i4lkd zX(#n$1VGW9rc=O|>GWCa5z!CMVng{QKop=Sg<~^hO~$}VWk!q0BGXGpWJFCMS^grD zTUQokGpN}_&r}`n3COT@rAw)4B4iYOXNopN2?iGe@;9a_qJt2ScO!$)3SW zq?rIA6o+PT%0jUY2&AdxxhGA;Xn+;CTGqv5s4VT?K855e4y!)ESvcB8aP_2fOtBO& z;7iH$RQ2`Qw5*orzM+u#utlLx)(m78(uO8tT>(7E*ndVIj!2fdgPXlS_96mZB(0;i zkf@zX!PNK8aCyC=_i1)QRhCGvQ4md(VxFP`02@Pm(m#wa!ZT&mL12?1hLIMx5*}fK zT8RqM7`qk$JtN>hhXZ5IJdJy{ljwB-B~@33)?gs-nU0{iZ)n{~6WRVnWTaUMtiveU zMadSjVFk4jG^&chY#80~QV5rTzMdUoRYT`-nl(KB?Cb|QeM2Q8-r_ntgU*92^LhtEg{(Vmyc#e97&;4?L4 zN|n`qOejjQ0tf+oEJGMZSo2e6LKG#V3fY~M>Vekzak~4IG*JAFHiH54(l|%^18BOeD6LBA?#GQM_5C!DSCej>$+)g`1n>ZPi5*b)j)`JcK zIqDLWN{YXeW(nKG`2riw00ML2ofmZeDY@t!49-d=-Sje&XuJUfMF!}8>PB+b43Hx( zY72t5TRRt;h*=h~m6Bbg7X{@CtRrBU zM}R&=s5hWDxC;i{IC@sX5O!~zlg6YgM5j_WlyiR^Y_#O(=M*n)lZCA|K#UYFGl1~A zNC>weY5L8EN5JJQ8_+rOz%c}fkz7PK8XwlFC%%oMH%bRn+A4YT)(lK75f6F4d3+?2 z?DgB@t-QZHVijdE5mL02kA``?J!+}XFS@N#fEP2~kDKv|+A#>|=t3u*k~9#D;pkkO zQ^6yM`{2z;iy+$d)Yw8@WzfOr!fH1!Lluw>1U)hkMHCy;nL`sn#L#z0RiC#(eT=wq zotC0aedf$0FT!l1poxA`+fnRf6U7==qJtV4#A17`Cu$~s3J!O?R;K0nnH~V@<4mhSVjgo0TqUGBei@ep!v}^yX(8Df0a}BSCC{!JtM41psX9)jC=wz}Q|Eb ze<;$>;bvP2(o^h_-TMpS;NhM4x|yNk(Qqq1N8(D-sKJIuoxz2Gj0?gIejqxyHq0g> zg8B8kwe}&(hIB(zaM7k(B66)WFc{#->IAbvGl=iU=pZx$P(<-lq5|4xMh4IfRABaS zp3#!}LO>qDpwL7}D~%00o2b%60)guNZ;HzbO%zdrL4whNJb2SYnOa&}N$k-?Xdb75 zGiW_gBLmS&n>qu5iFJiIh%qv-A&+?j?m<+$oU(zLjIo#z3CJNHatO_~E}&-{_ z-gO3LI+w;DRxrRJYT57@sWCePs2WVCrpj|wy@CqkNE4|g#3e;k*5PZx$N+T)&iLa# zO%qX5AWt3-mb%h21$GGuy38-gD(ekr&xU9;2k>e+AEkTs?juy%MeJu2;g}hjWKSRh z3Y%|qu%JD2Zhf|)=FH#h#3{}~oQLWlXv|Z@b>2J^0VFz`o98)n?ZA;h8hm_jN(b+3 z2O?2sOzW}!Nhezs-Ze5%q=@K|=P4#CMf;+C6hm1Hyc8^8z~qFGUg07o@nGTcLCP&JMMK0*bQd^3Ac*Fuf#9DFzuQgNQ@ApBR?Pe>hdtIMft z2A92wKA;)I1_BJe`VVhAm9SHIHqI{y0ofE0?)AfMbDaSWD*6tUIs+`TS7U(YbDc(t zcGLum{nXMFkOc~R*+jL@fJV8bmcrPV5tjuF>aZF|1-k-r7_0MP1=WNS{E`b^QcHuo zjg}L98I)S;uB2#75EI{BRczzl3(=x=Mbr?W$=hCPsXXvaWKd}$Iydulb~ce-%G3<( z<(J+=q^7Qb0V5Rl)FD+e3dlWe5e9ms2Pozl%8R)*TyQ-G}(<5J41<1&gCH%Gp^y2iSNZ zOXrl?TgVYj7l-NbCB@e%9Y-bc)&~&f%wT6!WikpcPihK%TS`|{+mKDx4Wd3;KpFKa zAPYRRSWwp_#2cDEda?H4ovkEtqyrTwD<2P@yNnoYt7YinD>MDJ*BL14NTE54g%u7J z_u1J_{rb^PvhB6Ih3Yd$2mG_ptF?}REv*xE(>qs6DI*I3LDEPYkm2T&9+Hb7$IREt zVd7?4-U~!A+JMhX_u8xyk39tB`){G>%q^_TN!6&}1p{qrHqj^^2-QMYvlJ+%~5&6pPh znjj32TR!A48+r2t6sH4JFL$s)2sZz23Q=j~(nyKlMxbsecQrNOAZi7YM}45S&z@H+dmc*5E?K|nN?C=Tla zuB}ic#-oDZ&)>FGS2uX|oK0ioV4MmD{X8WZ=kc-sQMaz5qO^~qy6W1gb3=0LT(WPKt4ymCg-_FFrzACQ4{cZndLEix*7y-QxEpwI@e1|WAOBq{i6wBJ~ww3 z-DDHl=vh4HwJKDHd3qW0G(tmUz zKUHeGdRJ7AE4%CsZ)l=0Y-+-k+c!Wk^M?N^k%5Z(EL@L9Su1s(J=<*PoRt&o=ff-! zw!=a^*;MNoGS(91>Ag!u*ffe07yw;3U_n2owEQ`mkr)_arAUNGJ4nt;4peLPS^cxE*CJ}Z!wR$8M1EEm0rRDt{=0U4;| zhIOSKMSNbXkd^g=I)l3yR`a2D6mj3w(n1D(PdxtGbp{5IFsLz!taSFQsioqp_h}*- z_;~Tcm{9N?Dvo9JVZ1j2vh;~-bp{e|H$`VPGT>|2E1F$fz%0LT2-#BNN(C}nRnWuU z(2j~wN@{6(!0ho8p0p~ALFIrBcRLD>)T|ZA%*yd(Ge;VvZF)A5BDiZ6$eCJND6Nv| z*Ad=x#o`m#k=r=_jxTL$Ot^ z#9=q0^SEC|F;qvLmtxLY_d)ZEiNne!68cb-_BDJS%Gk+7a7 zh}-Kh?3|>eteS)#xiC5)wDe%cU~hb*;pcL>54tbeV90f3d9S!t%{tgnS-LQeQerdF zj)DU6Pul&(aGTiD9#!;#)Y9YUZ`Zy4M0*p>oJ|zF8pm4ZyaJ_{)<$(B7~m2`(OGmJ zRgb!{=#0zs-b63b4EAOoJGE4E31W6YEjp{3!HZK%v!IPxNKaQQkeeu^=Ni?`Oj)dk zdee@g=oDAlQAEWuXAi5+pwdJrB8#E&5jN;J5FN=I8`@FW7`oN~1z$4WS*H;FdG^47 z>3iwf_jA&VpQ9}KvbaA{ROKn2FZ?n+T+&5BBL#J|tuwd^208}TG0+=kTB+tJu%eAd zTdA%rI#X{VGUOC)VPE;e*65%QmDjoT3S=z11hoX3%Jc`kQajlfMQ4nV3aygSMx|OZ zdqu`RuPa)GWbY??=N3O@y)rVOFRo~(J0Ct)8C2>EURQKW>AvZRNZBu$<)sFF)~Qt5 zm7a1x<}~csO{p{Bep$9>5!@L}rh^EQ0tVVqz!6a~Gj9l926Z;@%WNHTKPjB6&ryrSaB3#bBE;GKlpLr2-iz zQHsurjt~@)>kJ|?K!o6~qFV1FGKlrFN_i|g+ct^IT7r#ca6Ox76EWbmlrb#5iAYf( z_?74CeUeM<+we2WqO)8FFFzv#&_8*-NndSVV$>TL2$-)e+a!;=WHPyG7|#c?dH^(= zY$6zHdaj^}4$(AJuW2GM8^ z6Um%TS~P=<3~cbN5wrtZT%+o<&N0SvZfy;(HzNaR2AjyBPz)Iv)L95J5;Zb_A(Ro1 z)KU=Or8ulMs#C@h?zh`fR6ZQbGBvg~s`Ja+8`a4mXJfctXTTOU%803r>g@IV#g4x< zPLq_FJUSa)&NJi-m^6_Mr=pTkKxT_;tdbOnzyPdoBofRAO>Zj#vS#_RhN@@=d@(NS z446s93gm6Ia6hgdOu*FN6`f+J~g`Q+s#T}-4jzb9+xS7XXC*e*i;RWSe11Pw&bF$h>MKcSV*QQ zz=4d2cHQTkAm?kv{biR|J_))W6nOcOQ%l1y=m&)ksiNFCj}i$I1OyeyW%Q@je2i{O z+A~-cg>>3WG?LCxG?9@;PpytmPrde91>^z-I=T4gT1HXnT>8?;;98wQbS%X~GDHT? z(L^}H=vq3=GuYG^#6o+$iAF%EmBPnU+h_(ju(50D3p9h0NrX#YT2tWfYZ*gYFZ&ZY zt&|3Xk-=U&3f?l!GLFR4p@sED1+t=wO@E^BzEzKbcb`q@ScR;t{Fri8}`KIzeKz<~MR&MXm? zpiCdkAt>{Tuk|LXo_}wb%nqK;|CM+yW0=O?K%1I@>m9O47sjuO%QSw}40OC|OsB+} zyf@0@)%k*>=-x1?tUMmUWJV2){A|m!FA+5Zrf~U9$q|rf%fS>J7jgA=(_KH&ehCuE z%fn?ZLbA86*5M8r3?`j{Q9=R&3nr!V(ai`#0A&X0A~M(j46m!Rpd3w@BI;+YvbWS8 zq$F>O&V&T4j;9yG+^MKD_!h=q*4{*V@Lw?L>{`*8uh}&b8TRm<8`Z^V%fF?Kj5gMf z8iBbt+~)4s+QVs$!n0+T;SyC;>kJ4MR~pp`4EAUuS0HC5(Qa>|%NEv~Ms;PL0gl6Z zfLl@w-AVV_QN()Nc?K#ni*^(?67sOKH&LaDP-j5T-H}1>G)f>~_7BBY8ig((Lois*;v$U|@Wcr9w@@!?DgIiKVlZdO22U>LoG;d*udA&_5 zm5iaE7twD`}u^hta7RlxStAPnuk=&g+no0UPk- zR5e8h+=crXCB;L!E5V?&M&R<=cG6e+Ox(O8mrj}6!_JH)M|J5g*Y*$sITx|%5VLsB zp>Zu88-?^re+{Xrwa&mm0N}!jA!9j7dd8Tlsk(6!V+fPYnVhRduvgW8T_0|tX;5bHeKsLoe!m}wB{rSX;9S7YB}3v2)V z_^7d$9BsKf&tRa5IC@|^>5ThOJ%J;D$SXZR%?DI6GXzgCi4`0f;7z6>-ZZK!lg^w? z6x#^nKDMJ6Cz|2qKCmz>o5m?pfmj?hXzn%S3S?19xU89Sn!+V}21O(>aq1dGY2@Zd zdZ|2f8T{8nW0GNh_rGPBaGcz57<1guv1_o;e z?n|VKDcnB-3ffv*GmvMg-b9@yf^`T18|Q|sshZidjSR9;ow8^|MMp>}n#q&nx_}HJ zqtG}BU@&ai+e!L^+EMiMPdbSN4)%QF+yS;*&QzB|tH>C!QJtxWUMZcL0qE^)ROiTm znykdsPSy17_+8x;omt!Amuz3n&sb6I^RKC;tS#xe_QmKk)KNVM4ZA5j+E5t$o_3u1 zvI#nIbiIjO=KSk8^Dwn-g-K<4fg*=t(pk|qh72PY40p}IpNtWeA}-BE@KPBp=$a(> z76G}v`qpp0D@gNqC-XHL)m_sId_MyaARrg<*x!w{28ay4!QnR7#$H~_CVCDG>ZCKb zu*NN_B64X|mw-^`8F=KS55A_B!dPp#&9yoM?vU4cug>6b4wkqVHVwUrWPoONiacI+ zEv;iOMe|%%Aa|a3)8?8R@3RWn?5(7EqHlkg@VOUjm3ami?I>&@7)fx{qo@Vf8faz$ z8sCLs&-T?d8X2;Q@WPiC)?;L#k(V4PsTpbHpHef(sc6i3&2|*H1gLh+$z#1EEIj@) zkxc#dZ3t^*AZh{?$Tm(KE#uY6wnm zvS*{@a}C2$hv-NjZ~+_ZJP0nB*y)6I7+xrneTtm2rjRm91H|JViq71mPHIB(>NM(U zJVn>oNIRm)^R)(2#z=~%?^KGS9D4U|N1+u7W?d0ZBZ*6t*-ko7R#>~`Xcu)EwOpiv zDo`kt4v@zClvht+xZaM!$HzE~sHYl&1WhHC8vOdAJ*C*y4ciPZ+jw2zo^=!g@~bzW zO+VbWu%=abcDT*Y|FV6Zc?Jf9_T|GGZLB@ZAog^j8SF#`I3m{>;P*byz!T1FpE>DF zbC64&LG4e}=NXh4$gzQ#cYLik5sdwQJBl>Y=Vc8*z)XWG99N3SKv1Isx39)`OABFn zmnN#&M0K8l#bX%+S0B?GXVKXYtf1GDfB7+E8(5McMC>wcc1~FShWL-n2N(>|d5XyT7 z7aCtW%g$PIZ=%>3=_MRB`5hLWAu{Ozx!1y428o8I^ew6a@>Vm5Ek<-%L7Q}nB}t3s z0Vd8{;b_iYD3=1ZqLpk^H=#u}`5yv;X!1_Yx#&!j&J^vW?@Nlw&qRy)&(578bx{P| zY%{HQxz|H5Q%irVxC}fzT6Sodj++135FopZ!*<-8s9Qo7Kp6a7fvm2i+X~;J8JMQg zn#1uM9q=p`!=Kbp)kji{&no0?=hCb$R_vDBN-MSJAaJBZCYzpB0cl1O{VEiiivV2E%ZhXjJE}rJi(Fo7DN%MUHg_!+1&*o++CMbC6YM&3x|0T7bWwpkL=Sz8 z=Jg6>G^$${8lxP@6NTTLrWVE%6p~XK-Hw9!cUy|6QXz5N00Rkg>;@^iNs$Ih15{vl z=GHQ!Ckx?J@WaVmqEv>lm#~SYx>(#Xo5&UKyi_2U-aC3p-IvMUe`cXvW)lh6vzZv` zFiHz+(*X3=Yn{QCw(MA-;8pkWn}IJ4>ME^9kG(YS zQv`1TS&^9Q3UY3woM*F7%JFyGh|E;d<{c^MdtJLLjq0pPQ~_Mh1Myhh`vKFNnp_xpb!j8T-sR$kzqr8>N@JHxbskGTdgP7Zg1KG?C|_ zaL1a#Y$J}B0sV; z?)KOV&H@b7Xii=}sg*0)M2-wHJu(b^FF2!j-6I2KS%tjPQ%g6K&fK85h^XoHd!6W@ z5&O`98w;+~KR}smx|YHSp;xvB#*k8=_z3S(0d_fw#()3-AOJ~3K~!I&iOoENV$={B zXtW_My^h_&X6NX4<{1bOZRktNqQq{djg~pgJ|DHMCdG3Gc-Kj1X~>kBlOUK{5XzU# z`v(6n(KnEh z4WV7lrgn6+5sP)YPqdc3Z*9O4ld^MmwHx}i(im`eO{w)HsJvz=>N9L}tpwpM>AKEU zW%YBOTe1CoDFnJ%u(0V_#5w~{IzycSybNN?b2E?!n&>&r;6gy&DLRW>qO3rEMnJ|X z?X+szl11zss2r^ihih84G>rqG37sipAHdv78PlTS|<)CZ4Mbij`1?^+Qzs{1;1 z1{}$0jYD^&8{(v6@Q^~kV8%U-wq0kn9p0)g#@(xkUzUMY`q0lH$yFNbl2FROYrD`n;su;{9{PqN?fCJ-UD# zMQ7vK%UIKZ@PQe~6%1g5-@L|-ce9BG5qUX0&2_jGkSVOan2)#@jkaF3&>-g!8qyc3K&F6Vnhr%>1;

uSDQoOS<2DNHAi#a>jJ*^WZ9s7s*31@Cbu!;C7aVE(>Vw1{ zLnb<&=}k0+=E7M9xOZwtQGv&;E+QL;3IjWu>iCdMgnPv1cohtkMa~44P`9(m8Hlws zgwIzXr{FBmEru?P5R5w0JNJstHU(umFASs+4Mtu)OIamfK7|Mvmkqv8Pq}`+^ zL+YmJ3NW|g8Tq>%675e$xTlx;T5l?l{SG<13A@SvXdm8}J9bb2CWn`qQM_I$t!So1 z0!xp+EKlQ+-c%q142t*mHNXG>@Wo%@q}`Xu!)-P+k!B#*k(V*cV7_}?Yoj_`f@fwR zUu#sip^1hjbqNNWw9-L94yq`U|MrI4#0IK>Tnu^uLHrqD0Pz^hc75U57S=?f<{8MF zb`<`u4!1$-c}XixL%gj(_EfTr0>*X}WA=}M=SrixZDde&1{iBjE9?DW=IM-l%SjQo4Gkpn|2f$Zo~H{u9Q9dK3AA+m7!)6?3{fg8iWiwQzBt_ zHOoQiJ1|)CA4^aFtXwXJki0st_oiKfm(g}ASd{HxJsb=2-<5)Bn!>sDTb(4M&aqLQ zz@SVz3$BRit;~NP+D6z@gs4tl5^&+9b-IX(aAO>|_}Qe2{);Wo6-CkVZp8Up~p%sB=z z_N;)xMmNZ!v)+!PQb?GA44@h644g@X?}kZd?qeiTIeHVFmZ&d4rUi`8rp^G{fPcSR zbk+ssl3ps$j|FFJ^G2g4Fd&K0yO#1Hi|a_@r&2%Ta2sVFZ7YzGS)~-k8X4FF7LO}Y zH+ICXr5v-#S3;l_{5vzMkmt`dS7rW`qBFjGj!rDhO2UrFMj+N3)pdb08`X)<$mv=x z&Vtu3AdJR#NQLawhg(aKd61FAv8fg%C!GZ-(T>27@onCC#p1=ghg-*964;czRmf`3 zQ&yZbFVV+{w;6?JvMKa-Eqo6`IH@g1TCz!93sK4|4v+apXynJ^=SgL!R@)0`5M4u4 zMw6$;xJEz#ll_IdX5ed)f-Wzx5~MtdErG|!Vz0bYTuQI4eSY+WRneIosP2h&!x90{Gml1)S)bBe3a*{zTT4!N&hf$YLO*CBK+pX=aR zqLsio1`>cKiiA4ZHwQPplyp$#?)yJ{vI?v!* z1#&D`Q%kRb0a8ojaDR=lmuO*K#baMorIuFln08kJu9ov0Vk3gplp4(Ik1d$l)Ivxzn{kWtp$E0F7yGf+Zh2C|H6Y6i~; z$X+HI{;)PoV1NuzkQ_)1xrhudDv(L3FnzSQqv$k|^awOXqjAgZs7h7wCCmz1KEyq{ zgZXvNCL#dMrgRh;px8|{168OcO*9mpNu!8kh9NO9fp+R+Jt>STieL(?z<|Yd>`8;H zAUcX!bSD11f&t5#>W5PBwey%JN1tORNO3q2+p-Vb&ZL!{Ns(G7qzM}mgzZd z3~EgcbwzOp8XIc%K%xP6WDswi=Rf24vKyv6d{QwrLq-{wqDi9eTgUIH2bBk=7o2@0 z8^U^v5{(GF+>WB#QEnhpRB2qHV-cV!JJWn_G{po2I@$&o(L}OVE;=hw6K({X05XqC zIk!bWuxB1e##Cx4q8mL#W*>G%*93jW`G}w(3*Z*Yhuc;-tiYLET%S%MQ4D9Y0Io+? zVe8)dd)wJ=>HEF!;8~J-7%8Y_J5!_hY|3j__>s?@KF{OT?a{puca(97C?y`TIjuZK zhF>Ec7oVL^k1RUtGmw2idLYJZqCqo=rE1sGYhW+}0dC^EFIs?spS_oKEydA2lUn** z*HW%K47VAwej>ee6B+D)L5&QsO%;kcI;aBjMU%Rdv;=Yfhz!o_JoYWBT}%01Mx^mf zoxw&k;QZs>d#Dc^*^dm=?pibvA57N^oTJ+`AJ!@eU-k}S74T9G`L>01?@biO4NZ_r zvpNC^Xbkr(;v21OpW3KyPcv`@vYuaqfwr+X&mh!hwou57qE2;XMw1PkqlYg3(s6Tk zk>?q70o*-p!0GOcz1#@M-5B?1pl7it18Rq&+1CuVi6Ck4oPLVPMHE?5%f0B0UaO+D z%{+sx(Net70oD`8%5WRlc{>d1d1Q?M7Ac$Tnc`ME3Y*__AZXk~o29|q7<1h#S-U>M z(-wx*mtq24XNk4)jw#l%g#>M;$9mFpx56S(p9D*Gj?68)E=0$y=`q|O&NG&DjW#oi ze2kSU@^ynFh1C?M0G4z!%DNtKlfW*qfu2b}F9kY`((;^^^W${?>BZPfy-+nWh=z4F zz4Qfj2DsI4U$w|4nm>BKCLny=3(qJZvukMugXM7QAaQqWwNc&lR>)XdSjQ(dwe;CK zgJ`t22;eV|y*EYb%1GQ5|gfwF+eR zoaut^PGqp@O$3^V#=h$YLvNx@(V4P|kR=oYcHDB>86kC^0Uvw{$P|GIN?pwDQOqSx z1Rl0}`RuEdMiCx4Tt!zOGn?i5q_dsjHpogsjFX0oy@r_nXaO0&qd*OG!3=2=UT`ty z~G(K-yBE zAn~NvUQG^9;sT6b1qusCpCO_lMhdtpXX}t7|ELf8ShzjK2pkaN*gt zqO-B!%vf9-)jiv_6vnvpCc?YYbq7y6+e&MET%4}fgph;SxB~t3h?gb zzAuK`@bNCdMPm#RS)(%h`u3*I(a5xW$eM=`Nj&7oT$PH>d#*JokpU`jMT01t$n7Wy z1{!;5z+s0^K2w<91xbZ3HRl=drR~{7I0ty74#)5&Rd+sL4czzPpU z@g+TIXP?@LjSX*fMqw8f$b-P{G@=f2GTun&h$MAgf6o4&>0>j$#CZc39Tsaha!M82GuNFVP)^<*z%>0ET@zw^1{o zEiOX!o@O9}4Jyb*X8;RxiKQI{n%D(}vy)8(>(YA@oo4nI>ea@kj#z2zEFak~w6_S` zzNtW-or0+L)4(I<{j>bPq?SG-ATKe^po+eljF#&g3~E&1XN}w}+F%n*&;ykQCjX`- z&TgbtGl*uZ!8uciPUFL6WAvq*Rd}%lK-AJ=+=le-Ump=TmU0*ss&eD0eRbwf{pGB6rG^MvnyYLNjS#5~~Q4?lEN}9*Xk}dZRj& zV6Z2Z3^wnvQIz#4jtk70DKA_1J`H|vTAGxgGU&Jnb*-kK79ZR>0S`2q~MW7R11SqAu+{rO=mb|;-_++_uW zP4#htLA-9~@YCaeS!cj~*a)Z((LfWS`WOqgc3#eN>IHlWLpGQhFsWXtVG#C}Y7<35Qg(@PeSskZ`5hP_hHUOgOVg!q25na=>w@Sogpf&%E zR90-W7-`*KxatXz>I0Ou6apj}b45D#>anpp&w#TdI!DiIWiw0TX$qbXzbp{{Wvg=6 zTDbI=g1IztqREa?4oNadmD{KXD?1I-4l>qT&6bG))Hc-S)`Y)Vb|j) z1!QymZaLj4gBlrZW)*B&SeNBh1HhMkm~;k1|ADThHrVp?ks6wGNj^v0qBCB=;CKmE z>ROr*5cwg^HF^}8rpO9pQ5hciqB;ZX2c?a5Mh2R4W+P4d46F`_ zCDBCsU4|>Gdb^$IKtR(VgY2O-n>G&}6tY(kzSsV01+sM@M?5sz1XX|rr?e^C3x?Ct z0yS2d#uRZ&Zz9_`0Ti3j1^s7Zs`OIRCfSiyKDWT86ub!lY+JSS8u`dIC*>s1eN%fO zl~($dR9o}^J&mW(M4$;%=Mm`g#>h#LhJjmBuDzd?JZhteGnq&URS-%ljPE6{H}7`* zetvqK?n5*9ljvIdlHNqmR3MM-C=3Yk@3m%i-#EOU>&Qz0NGUqQ-#fjDRsg_5a|>&W z#|8tO?zOR(ML?#(KeamPEYeD!t3WmoO!E>%TU*!`yD-Go_aDvafSaI@^Fj zuRz9f0S1v-RE$2Z;aF#2nyB_BvH^}Z6^FHr*+gtjQ3uzQRM7P9dv7AsNL@gtVNTxP z<1kZWxRP2*ra3%7=oe^KC*Hgkoml`T^)y5V=xY?Vz6_SZq_D`&BzxZlugHW7Vf zIu+3Welodg#c;0seG?2@{Xk6XK%Ij+wGH zE+6Ri4t|`R9&DiLdx*#>QcJIb!3Sm_e`uZo4EftvIMD=ys4>t_47eHV3|w>;R8ehX zy@?E73k{2Akn@jk4sA2fplAlTRAXu>T2|ZJpIZ#Kxt*qIEIjKo1rBZU*h`$?j(}X+ zQCy^!+Q`(@(%N<+C?{ko4HVLtTG|e%T;@AlQ~5&3Jxoz&un~~?oRleM6%1_DN(*ai z0Yx)Ne%{*=7-h@qE1Cgn1WZQ>+$u$+yGg#@89)?1`Oq2++@DC_RROts`}XG5!Wu#- zn{L=B(IA8;85ka#!H$6JIR~IUYQ*7r2I|Hsqv@$(>}6zn3?d1PYHv~(#*Csh`snza z2hBiKE@#~WG(@k}c?Q0xZe*8Yzm1)M5gdMIjUWO-N^RB!Bva67B5DER=iO(?4bMy$ zfjeQJEJio4thq9zXrhq%}+vydj_$?M)T9I@Ro>#0(Z`;{KEVw28 z!sHx01IfXcjHWEO!x&+Yw4?`Zoq#9mLO}sgT6xVgF#T0CgA7)3Bsvi2cnck;)tM72 zN(;wt1DdpAFAH~;k_rRebwlVUahhk95R&5Z83J--6aB>5MD}d{?%%QK%vQWa2O%Q+ z5T0t zXrp#$qKn={;Vs@KO@#GSXW+=-q5}E3j-|eM;r&}{z&1-imO2Ny1$h((GJIf#JiJk=mEJy*FK%$~EH=Y|K18z8n+n90! z7+j4E&@T^K1L+}k6wTg5s%?Pru8r!nuL1@mP2|+jE=1G)VlzBd38P|IH%G0jdjT9; zI>4B3dJ{>sqo=Ie2XH%hV=gA0u{Tjvx*hIO!?HVrFfw#O+yo>J>>NNiX133T6nQfKd0<$Ef>E zgU#<0w%AaMP9lH-A?5hUaQ8-a*_^Zk0oTCa+B|iN{6Od=@X{y@YXS@#dTqoIWt6@~ z=hJB%Zd1VETAe{GQbgpv)Y8Y>@62vtZHfq6R%+=so9MFW%oLIB{nf}Iip}O_et*1O zw{-@62J$A8$Qu+GYy@Jpq6jdE)KVJjm;qbbQN)Mmr~>Hxbwma$W**C1eXbqFhrr-C zO`#jafEy3D@kmTW0teAj0FR+JQEa=UmTm;(P1n+rqrOvgmZ_ycW=}fnbq1SGrv?JF zs)lbrPn>Q^|5LnrpK)Msw^koh^{g$d;~1=4I3p=JdPN3qmKQMmF@r zTA{q`Xt{H4Gtzgv2YyvR#&2++L^H}!)+X^N$caO56m7N@T*%%)}?r(g|;%4y50oc6P)Ov}1W zbq%HSjJDJT2zOF*yO>OBWnzFg9FnG^{8Q4EeV#$l3t-es)|Syl z7%&LP6v$P3;b_GNtX@i)XXFZGTrh5zXJY{wGmxbj^rACc%fGu|dz!(Ob`;MIw}Jiq z#^Mh5uq{$0Bk8SIU{4DonxxDB@D)KZDZw8?YMIL6=h*4r}Q zL?@ix$Y7r)0vN>4ARyP-$sU2}D_kd?)fvbqX$HHK&azQmA31r^wKOn8-gHI=dhf0e zx7lVB;TYq=bb2W^BqOkJSPeb<5SRReFRTU&{TTh!4=L}yAn^7fg_lSe8FnA2vL;~%k7_2KewbWp65gG8pt(~iOs4vmK>CJD&k#+`*U)ENxoEDVoA{!GmTO~h$#ejNEeX1i@h zi7JU8A3?v?p1SOcTWC9ys9e9nzrO+{SeVIqhs`(%Bld2qR6T)KQ3eJK01q$RBE9T~bS# z?HPM1gFhe`!(-I28I9G{@h44G!N3#Fa?%(bL$X6m#$?mM)1cOS zB4rh@`~Hj0Qw!^?aj466aij{{tfNp8Z9ZeFKVUl!7wD-;NY{sDuyy2gCfvj@S{@4E zS(V*;7t!cTB-c0(MF7fs=0C(Hzyc$*X$hL>)6b?K{`jZUt7lV7eI_r^3}Vqr6UE<~ z)Y6?9$eVcvFVGAkwRD=^qG?@CFLf<}(@K5VBN#+fzzXD>IWmYW9#0R{46*_l#$A+A zri)5Imf?@o($ov~zyR0!Ok?lVQY<&jKvtarhvw`E$oh=mJwMODsiheiTnx7viq33! z>ex%3OD{Y-M<<`5=*)(<))}M`QwwWk^hB$RgIYmgmOzv`ZyMEUQ`_D|tj-2+9&K3ey>!^p2*EU`W@{3s#{SkIz;=@09}_8Bk{X<3mL{ z8h^=bBDA6+DWfP&_b`n@rlErNb4{^=6KW0dhbbb*0jxSk@_?->{*o1@gTUt?yA{dc zn(A?T5?N%|Pxw}p=dFW5y-%!G2K;pp;{padmRu@@N@Z!~m`X&b=wo>dn&`9X4}Scw zU1yLSCO176o$a)*uJa6Hm6v7{nIalnSi=V0-?ZiJX|6Q}c@L3U^uRtv8g5fFiEztR zV}ReUL=qU(Xvne!rXph`7oa$J!7X%n?0^)GYl5NxGmV7|)?5OAAmrC26c>jF6HkZq1@B@dp{ z)ff@bo0mQVZrimC)C@ZJt7FTS32MPHE+Z}-7lGclHm;Tl@}!t6uWMBr<59RfYlyu( zd90)P&7AxtC(r`A=hh4@9iTBv^wjZW6oPH$GvUEFeMYb|d`uxoR3&lD=zvDo)vVbu zv~c5U%qE(Pmz+)XT z!E2>xgek5#-cAAG`GDo-vYWy=yY9{!iVbV-F`-~62)Ouzfbf73*1O)QZk&NUebuQULJ`#)mWt(>mR9 z4CB3=8|Ed$!#BVnUwclFz`+He@UcH?_Ax!46Fh6sOL*1=6!;7ePSzpBcL@e5%#ydK z-XOY1si~zSFFf+ztPW>0pXE6+pWJp+*+kh!!WslYEr-^?OO&C^R@MBBy?OLv=W-O6 zi5sM2e6A6)WbFgq2^Fh}mXXmS-GJP0(>`&%BR7X0E8-pMe<~IWa$kjNUI$z~Qq%b& z7l2?V*KPDbZ)e?G_Bs+r zfKH|8>94`|1_XM|=p>7ds5~!ZaPfM`YV;_DQ3J|{37R+y%sen;Y;@7QTQgj|5_OdOA_Falyy_CRal(X+^PABKM0r~1>=6d_ zNzEv@dG1e^-8u$Ammax?&1j#zUWj-~vO(r54f>6iCNOI5gXd^xvua--*|ns>N*?FS`!Ck{c>G`cL3<}PGWf-3{reyMWeX6%=D+tb z|NY`so8JDSY-5_HH?P|Cj>7Qt$uHaFqO*saHa&jXrZ>SUak?4)ef3qFo{sI4=u!0k zXo8-M7*00Q5LMK3WCbzyhX+F$JFza9{b)*eMujkz3s5nwn6nPz znD~7x7vU_rqk=*T>PZg@##%-{pQX)b?FUf?1>-g98aS>|{eSdu!<<7GTt;3kYf!`Ph;l$*V!W{EmKxy(mkBXi-nHnR;MB<5;$46T z8v9WiE7t2R66jsROrqkKM$%KRyiU+eanvkGqnH=Sm@hjhDS#M(2upKQ1SZ@=);}1$ z7;RCjO`jPlw7eLiJ2btP=R=dSrr=H z;}${(KoTPe1{7Br0i{=<>xG>$xd6*D=+e=q>S}2=`EOZP9xHixP2PkTIz@1C^MlnhV%E*B5r2xU-fBfYL0}aD% zBU6kd0Km(Wv$9Z*EdfN4638JjEVaN+VWu^t6P8e`%d;jEFTj#FEBH-drjd(lU?5_; z32wCC8ydb&LlIo)?IvC&khKG5hDy>U_lE6LT#jduqd~>##}#+hOzxA$7@z>;<+*gZ zRp6v3Y~=>J@t#pFCUB2ul=Ug3@JQb%2*T$?XMhCH8L~r}#unelLi(QP&wUUSxow(q zo;!U35=zb@5~`Z$;k#$IoitlwF*nA0D$ovMGifGclL5wei?^KdmTM9^l$l%V(6c<9 zp3V>N{?EHN-~M-p?YxECq1*=+!F#S$n+c$r!g09T5Z(O}!(nmd9v-Ga%0Ab$wcA1Xun+ zs&47bo%gtD)u%CxBB&u+V@b&o| z?SJ_%PA8@XmKEdI$Q;ZfUL8$1jeyr>o!~%nL@WQ@|KT;zzC34kIF7@_xX~-$N$~?`#0Z{ zVYoQoX8<9Vt)Sp_Jv%vPDDPavG1{n$)L}Z;?!X{s$6~+dNJZ=XZ2B2~`~H{Tx(aHi z?;4Q$j!tj4;IX_JK<59^ZT!?a3;#a6`o>y;##`I~PC1|T6V8Rs9NIc?fAHU^nRM(9&ZyoVzt-z zkL~T3)1>xL7&`Y+0kHM7{|rT1Z|?R~0rabBT?Rl5kQ#psO!|C1_jR(RcwOiA+@|;O z-W_=S0+L83m>%9w)7||Pi30g^Q;d587r(s#w!B$=opqtE1yIZ1%l4f(;Nu?wtbRX! z=gm}bE59T6XU}k6?4uahT|-;?T;)DTK-e+RSHP=pV#j`5?0;{W7wj7mb9Z12HXT%W z6o}7C2U&f(A}x5+(P0M!11rOb0(JERr$C;;aX3ydfAJ9GX}a!QU%TdgJJbsEhu}J% z>+Wv(B$s!vI1cgE@jOlM*LL@v@63Pr<3GE(|ITOQjkfaqYk)yLB8<%Z*?K`Wd6{d5 zf5+I@&5nj2uj2Rq-;0ZV`r^{q*X`7~&GGp%0D+g?GxAvelM-3PC4av)@K|QY$m90B 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 Hu0mjfTI8cK literal 0 HcmV?d00001 diff --git a/src/components/Main/Content/index.js b/src/components/Main/Content/index.js index c6dedbf..b2839b8 100644 --- a/src/components/Main/Content/index.js +++ b/src/components/Main/Content/index.js @@ -9,6 +9,9 @@ import CdzyRight from '../components/Cdzy/CdzyRight'; import CdthLeft from '../components/Cdth/CdthLeft'; import YhswLeft from '../components/Yhsw/YhswLeft'; import YhswRight from '../components/Yhsw/YhswRight'; +import StxfgcLeft from '../components/Stxfgc/StxfgcLeft'; +import WlwsbLeft from '../components/Wlwsb/WlwsbLeft'; +import CdzzyLeft from '../components/Cdzzy/CdzzyLeft'; const items = [{ name: '草地资源', @@ -27,15 +30,15 @@ const items = [{ }, { name: '生态修复工程', key: 'stxfgc', - LeftPanel: props => 4 + LeftPanel: StxfgcLeft, }, { name: '草地征占用', key: 'cdzzy', - LeftPanel: props => 5 + LeftPanel: CdzzyLeft, }, { name: '物联网设备', key: 'wlwsb', - LeftPanel: props => 6 + LeftPanel: WlwsbLeft, }] export default function Content(props) { diff --git a/src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/echartsOptions.js b/src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/echartsOptions.js new file mode 100644 index 0000000..990fe0c --- /dev/null +++ b/src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/echartsOptions.js @@ -0,0 +1,246 @@ +import * as echarts from 'echarts' +import { } from 'echarts-gl' +import _ from 'lodash'; +export const getOption = (datas) => { + const colors = ['#0053CF', '#F8B551'] + let selectedIndex = ''; + let hoveredIndex = ''; + const sum = _.sumBy(datas, 'value'); + let option = getPie3D( + datas?.map((data, i) => { + return { + name: data.name, + value: data.value, + itemStyle: { + color: colors[i], + }, + } + }), + 0.4 + ); + // 生成扇形的曲面参数方程 + function getParametricEquation(startRatio, endRatio, isSelected, isHovered, k, h) { + // 计算 + const midRatio = (startRatio + endRatio) / 2; + + const startRadian = startRatio * Math.PI * 2; + const endRadian = endRatio * Math.PI * 2; + const midRadian = midRatio * Math.PI * 2; + + // 如果只有一个扇形,则不实现选中效果。 + if (startRatio === 0 && endRatio === 1) { + // eslint-disable-next-line no-param-reassign + isSelected = false; + } + + // 通过扇形内径/外径的值,换算出辅助参数 k(默认值 1/3) + // eslint-disable-next-line no-param-reassign + k = typeof k !== 'undefined' ? k : 1 / 3; + + // 计算选中效果分别在 x 轴、y 轴方向上的位移(未选中,则位移均为 0) + const offsetX = isSelected ? Math.cos(midRadian) * 0.1 : 0; + const offsetY = isSelected ? Math.sin(midRadian) * 0.1 : 0; + + // 计算高亮效果的放大比例(未高亮,则比例为 1) + const hoverRate = isHovered ? 1.05 : 1; + + // 返回曲面参数方程 + return { + u: { + min: -Math.PI, + max: Math.PI * 3, + step: Math.PI / 32, + }, + + v: { + min: 0, + max: Math.PI * 2, + step: Math.PI / 20, + }, + + x(u, v) { + if (u < startRadian) { + return offsetX + Math.cos(startRadian) * (1 + Math.cos(v) * k) * hoverRate; + } + if (u > endRadian) { + return offsetX + Math.cos(endRadian) * (1 + Math.cos(v) * k) * hoverRate; + } + return offsetX + Math.cos(u) * (1 + Math.cos(v) * k) * hoverRate; + }, + + y(u, v) { + if (u < startRadian) { + return offsetY + Math.sin(startRadian) * (1 + Math.cos(v) * k) * hoverRate; + } + if (u > endRadian) { + return offsetY + Math.sin(endRadian) * (1 + Math.cos(v) * k) * hoverRate; + } + return offsetY + Math.sin(u) * (1 + Math.cos(v) * k) * hoverRate; + }, + + z(u, v) { + if (u < -Math.PI * 0.5) { + return Math.sin(u); + } + if (u > Math.PI * 2.5) { + return Math.sin(u) * h * 0.1; + } + // 当前图形的高度是Z根据h(每个value的值决定的) + return Math.sin(v) > 0 ? 1 * h * 0.1 : -1; + }, + }; + } + // 生成模拟 3D 饼图的配置项 + function getPie3D(pieData, internalDiameterRatio) { + const series = []; + // 总和 + let sumValue = 0; + let startValue = 0; + let endValue = 0; + const legendData = []; + const k = + typeof internalDiameterRatio !== 'undefined' + ? (1 - internalDiameterRatio) / (1 + internalDiameterRatio) + : 1 / 3; + + // 为每一个饼图数据,生成一个 series-surface 配置 + for (let i = 0; i < pieData.length; i += 1) { + sumValue += pieData[i].value; + + const seriesItem = { + name: typeof pieData[i].name === 'undefined' ? `series${i}` : pieData[i].name, + type: 'surface', + parametric: true, + wireframe: { + show: false, + }, + pieData: pieData[i], + pieStatus: { + selected: false, + hovered: false, + k, + }, + }; + + if (typeof pieData[i].itemStyle !== 'undefined') { + const { itemStyle } = pieData[i]; + + // eslint-disable-next-line no-unused-expressions + typeof pieData[i].itemStyle.color !== 'undefined' ? (itemStyle.color = pieData[i].itemStyle.color) : null; + // eslint-disable-next-line no-unused-expressions + typeof pieData[i].itemStyle.opacity !== 'undefined' + ? (itemStyle.opacity = pieData[i].itemStyle.opacity) + : null; + + seriesItem.itemStyle = itemStyle; + } + series.push(seriesItem); + } + // 使用上一次遍历时,计算出的数据和 sumValue,调用 getParametricEquation 函数, + // 向每个 series-surface 传入不同的参数方程 series-surface.parametricEquation,也就是实现每一个扇形。 + console.log(series); + for (let i = 0; i < series.length; i += 1) { + endValue = startValue + series[i].pieData.value; + + series[i].pieData.startRatio = startValue / sumValue; + series[i].pieData.endRatio = endValue / sumValue; + series[i].parametricEquation = getParametricEquation( + series[i].pieData.startRatio, + series[i].pieData.endRatio, + false, + false, + k, + // 我这里做了一个处理,使除了第一个之外的值都是10 + series[i].pieData.value === series[0].pieData.value ? 35 : 10 + ); + + startValue = endValue; + + legendData.push(series[i].name); + } + + // 准备待返回的配置项,把准备好的 legendData、series 传入。 + return { + // animation: false, + tooltip: { + formatter: (params) => { + if (params.seriesName !== 'mouseoutSeries') { + return `${params.seriesName + }
${option.series[params.seriesIndex].pieData.value}`; + } + return ''; + }, + }, + xAxis3D: { + min: -1.0, + max: 1.0, + }, + yAxis3D: { + min: -1.0, + max: 1.0, + }, + zAxis3D: { + min: -0.5, + max: 0.01, + }, + legend: { + orient: 'vertical', + data: datas?.map(data => data.name), + textStyle: { + color: '#fff', + fontSize: 15, + lineHeight: 20 + // rich: richObj + }, + itemWidth: 10, + itemHeight: 10, + itemGap: 20, + icon: 'circle', + formatter: function (name) { + + let index = datas.findIndex((item) => item.name === name); + const item = datas[index]; + const p = Math.round(item.value / sum * 10000) / 100 + return `${item.name}: ${p}% \r\n${item.value} ${item.unit}`; + }, + right: '50', + top: '80', //居右显示 + }, + grid3D: { + show: false, + boxHeight: 5, + top: -40, + left: -120, + viewControl: { + // 3d效果可以放大、旋转等,请自己去查看官方配置 + alpha: 25, + beta: 0, + rotateSensitivity: 1, + zoomSensitivity: 0, + panSensitivity: 0, + distance: 300, + }, + // 后处理特效可以为画面添加高光、景深、环境光遮蔽(SSAO)、调色等效果。可以让整个画面更富有质感。 + postEffect: { + // 配置这项会出现锯齿,请自己去查看官方配置有办法解决 + enable: false, + bloom: { + enable: true, + bloomIntensity: 0.1, + }, + SSAO: { + enable: true, + quality: 'medium', + radius: 2, + }, + // temporalSuperSampling: { + // enable: true, + // }, + }, + }, + series, + }; + } + return option; +} \ No newline at end of file diff --git a/src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/index.js b/src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/index.js new file mode 100644 index 0000000..37fccc5 --- /dev/null +++ b/src/components/Main/components/Cdzzy/CdzzyLeft/Zbsj/index.js @@ -0,0 +1,30 @@ +import { useState, useEffect, useRef } from 'react' +import useEcharts from '../../../../../hooks/useEcharts'; +import CdzyApi from '../../../../../../utils/apis/CdzyApi'; +import { getOption } from './echartsOptions'; +import LittleTitle from '../../../../../common/LittleTitle'; +import HomeApi from '../../../../../../utils/apis/HomeApi'; + +export default function Zbsj(props) { + const [data, setData] = useState(); + const ref = useRef(); + const chart = useEcharts(ref.current); + useEffect(() => { + + HomeApi.item('cdzhy').then(resp => { + setData(resp.data); + }) + }, []); + useEffect(() => { + if (chart && data) { + const options = getOption(data); + chart.setOption(options); + } + }, [chart, data]); + return <> + 指标数据 +

+ +} \ No newline at end of file diff --git a/src/components/Main/components/Cdzzy/CdzzyLeft/index.js b/src/components/Main/components/Cdzzy/CdzzyLeft/index.js new file mode 100644 index 0000000..f84c974 --- /dev/null +++ b/src/components/Main/components/Cdzzy/CdzzyLeft/index.js @@ -0,0 +1,16 @@ +import { useState, useEffect } from 'react' +import LeftPanel from '../../../../common/LeftPanel'; +import LittleTitle from '../../../../common/LittleTitle'; +import HomeApi from '../../../../../utils/apis/HomeApi'; +import { toPng } from '../../../../../utils/helper/helper'; +import './index.less'; +import Zbsj from './Zbsj'; +export default function CdzzyLeft(props) { + + + return + + ; +} \ No newline at end of file diff --git a/src/components/Main/components/Cdzzy/CdzzyLeft/index.less b/src/components/Main/components/Cdzzy/CdzzyLeft/index.less new file mode 100644 index 0000000..da5b6b3 --- /dev/null +++ b/src/components/Main/components/Cdzzy/CdzzyLeft/index.less @@ -0,0 +1,23 @@ +.cdzy-left { + .value { + font-size: 24px; + font-family: Adobe Heiti Std; + font-weight: bold; + color: #6ACBFF; + + background: linear-gradient(0deg, #01BEFC 0%, #FFFFFF 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .name { + font-size: 18px; + color: #EFF0F1; + } + + .unit { + color: #A6DFFD; + opacity: 0.8; + font-size: 16px; + } +} \ No newline at end of file diff --git a/src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/echartsOptions.js b/src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/echartsOptions.js new file mode 100644 index 0000000..13857bc --- /dev/null +++ b/src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/echartsOptions.js @@ -0,0 +1,81 @@ +import * as echarts from 'echarts' +import _ from 'lodash'; +export const getOption = (datas) => { + datas = datas?.reverse(); + let max = _.max(datas?.map(data => data.acreage)); + max = max * 1.2 + const colors = ['#1F68E2', '#E2C334', '#00E9CB', '#44DA84', '#747DF8', '#31B9FF']; + const sum = _.sumBy(datas, 'acreage'); + return { + tooltip:{}, + legend: { + show: true, + orient: 'vertical', + right: '0', + icon: 'circle', + itemWidth: 10, + itemHeight: 10, + top: 'center', + textStyle: { + color: '#fff', + fontSize: 14, + }, + itemGap: 16, + formatter: function (name) { + let index = datas.findIndex((item) => item.name === name); + const item = datas[index]; + if (!item) { + return null; + } + const unit = item.unit; + const valueText = item.acreage + return `${item.name} ${valueText} ${unit}`; + }, + }, + series: [ + { + showEmptyCircle: true, + name: '', + type: 'pie', + minAngle: 10, + radius: ['50', '80'], + center: ['30%', '50%'], + // roseType: 'area', + color: colors, + label: { + show: false + }, + + // itemStyle: { + // borderRadius: 5, + // borderColor: '#ffffff00', + // borderWidth: 5 + // }, + data: datas?.map?.(data => { + return { + name: data.name, + value: data.acreage + } + }) + }, + { + type: 'pie', + radius: ['92', '94'], + data: [ + { + value: 50, + name: '', + itemStyle: { + color: '#ffffff4d' + } + }, + ], + center: ['30%', '50%'], + label: { + show: false + } + } + ] + }; + +} \ No newline at end of file diff --git a/src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/index.js b/src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/index.js new file mode 100644 index 0000000..d7f5130 --- /dev/null +++ b/src/components/Main/components/Stxfgc/StxfgcLeft/Mjtj/index.js @@ -0,0 +1,28 @@ +import { useState, useEffect, useRef } from 'react' +import useEcharts from '../../../../../hooks/useEcharts'; +import CdzyApi from '../../../../../../utils/apis/CdzyApi'; +import { getOption } from './echartsOptions'; +import LittleTitle from '../../../../../common/LittleTitle'; +import YhswApi from '../../../../../../utils/apis/YhswApi'; +import StxhApi from '../../../../../../utils/apis/StxhApi'; + +export default function Mjtj(props) { + const [data, setData] = useState(); + const ref = useRef(); + const chart = useEcharts(ref.current); + useEffect(() => { + StxhApi.acreageCount().then(resp => { + setData(resp.data); + }) + }, []); + useEffect(() => { + if (chart && data) { + const options = getOption(data); + chart.setOption(options); + } + }, [chart, data]); + return
+ 面积统计 +
+
+} \ No newline at end of file diff --git a/src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/echartsOptions.js b/src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/echartsOptions.js new file mode 100644 index 0000000..ab1a369 --- /dev/null +++ b/src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/echartsOptions.js @@ -0,0 +1,73 @@ +import * as echarts from 'echarts' +import _ from 'lodash'; +export const getOption = (datas) => { + datas = datas?.reverse(); + let max = _.max(datas?.map(data => data.money)); + max = max * 1.2 + const colors = ['#1F68E2', '#E2C334', '#00E9CB', '#44DA84', '#747DF8', '#31B9FF']; + const sum = _.sumBy(datas, 'money'); + return { + tooltip:{}, + legend: { + show: true, + orient: 'vertical', + right: '0', + icon: 'circle', + itemWidth: 10, + itemHeight: 10, + top: 'center', + textStyle: { + color: '#fff', + fontSize: 14, + }, + itemGap: 16, + formatter: function (name) { + let index = datas.findIndex((item) => item.name === name); + const item = datas[index]; + if (!item) { + return null; + } + const unit = item.unit; + const valueText = item.money + return `${item.name} ${valueText} ${unit}`; + }, + }, + series: [ + { + name: '', + type: 'pie', + radius: ['0', '80'], + center: ['30%', '50%'], + // roseType: 'area', + color: colors, + label: { + show: false + }, + data: datas?.map?.(data => { + return { + name: data.name, + value: data.money + } + }) + }, + { + type: 'pie', + radius: ['92', '94'], + data: [ + { + value: 50, + name: '', + itemStyle: { + color: '#ffffff4d' + } + }, + ], + center: ['30%', '50%'], + label: { + show: false + } + } + ] + }; + +} \ No newline at end of file diff --git a/src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/index.js b/src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/index.js new file mode 100644 index 0000000..d197ba5 --- /dev/null +++ b/src/components/Main/components/Stxfgc/StxfgcLeft/Tzjetj/index.js @@ -0,0 +1,28 @@ +import { useState, useEffect, useRef } from 'react' +import useEcharts from '../../../../../hooks/useEcharts'; +import CdzyApi from '../../../../../../utils/apis/CdzyApi'; +import { getOption } from './echartsOptions'; +import LittleTitle from '../../../../../common/LittleTitle'; +import YhswApi from '../../../../../../utils/apis/YhswApi'; +import StxhApi from '../../../../../../utils/apis/StxhApi'; + +export default function Tzjetj(props) { + const [data, setData] = useState(); + const ref = useRef(); + const chart = useEcharts(ref.current); + useEffect(() => { + StxhApi.moneyCount().then(resp => { + setData(resp.data); + }) + }, []); + useEffect(() => { + if (chart && data) { + const options = getOption(data); + chart.setOption(options); + } + }, [chart, data]); + return
+ 投资金额统计 +
+
+} \ No newline at end of file diff --git a/src/components/Main/components/Stxfgc/StxfgcLeft/index.js b/src/components/Main/components/Stxfgc/StxfgcLeft/index.js new file mode 100644 index 0000000..eb6cebc --- /dev/null +++ b/src/components/Main/components/Stxfgc/StxfgcLeft/index.js @@ -0,0 +1,61 @@ +import { useState, useEffect } from 'react' +import LeftPanel from '../../../../common/LeftPanel'; +import LittleTitle from '../../../../common/LittleTitle'; +import HomeApi from '../../../../../utils/apis/HomeApi'; +import { Space } from 'antd'; +import { toPng } from '../../../../../utils/helper/helper'; +import './index.less'; +import Mjtj from './Mjtj'; +import Tzjetj from './Tzjetj'; +export default function StxfgcLeft(props) { + + const [datas, setDatas] = useState(); + useEffect(() => { + HomeApi.item('stxh').then(resp => { + setDatas(resp.data); + }) + }, []) + + return + 指标数据 +
+
+ {datas?.map((data, i) => { + return
+ +
+ +
{data.name}
+
{data.value}
+
({data.unit})
+
+
+
+ })} +
+
+ + +
; +} \ No newline at end of file diff --git a/src/components/Main/components/Stxfgc/StxfgcLeft/index.less b/src/components/Main/components/Stxfgc/StxfgcLeft/index.less new file mode 100644 index 0000000..26304f1 --- /dev/null +++ b/src/components/Main/components/Stxfgc/StxfgcLeft/index.less @@ -0,0 +1,22 @@ +.stxfgc-left { + .value { + font-size: 24px; + font-family: Adobe Heiti Std; + font-weight: bold; + color: #6ACBFF; + background: linear-gradient(0deg, #01BEFC 0%, #FFFFFF 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .name { + font-size: 18px; + color: #EFF0F1; + } + + .unit { + color: #DAEEF9; + opacity: 0.8; + font-size: 16px; + } +} \ No newline at end of file diff --git a/src/components/Main/components/Wlwsb/WlwsbLeft/index.js b/src/components/Main/components/Wlwsb/WlwsbLeft/index.js new file mode 100644 index 0000000..ff0b8bb --- /dev/null +++ b/src/components/Main/components/Wlwsb/WlwsbLeft/index.js @@ -0,0 +1,49 @@ +import { useState, useEffect } from 'react' +import LeftPanel from '../../../../common/LeftPanel'; +import LittleTitle from '../../../../common/LittleTitle'; +import HomeApi from '../../../../../utils/apis/HomeApi'; +import { toPng } from '../../../../../utils/helper/helper'; +import './index.less'; +export default function WlwsbLeft(props) { + + const [datas, setDatas] = useState(); + useEffect(() => { + HomeApi.item('wlw').then(resp => { + setDatas(resp.data); + }) + }, []) + + return + 指标数据 +
+ {datas?.map((data, i) => { + return
+
+
+
+
+
{data.name}
+
+
{data.value}
+
  ({data.unit})
+
+
+ })} +
+
; +} \ No newline at end of file diff --git a/src/components/Main/components/Wlwsb/WlwsbLeft/index.less b/src/components/Main/components/Wlwsb/WlwsbLeft/index.less new file mode 100644 index 0000000..396d174 --- /dev/null +++ b/src/components/Main/components/Wlwsb/WlwsbLeft/index.less @@ -0,0 +1,24 @@ +.wlwsb-left { + .value { + font-size: 24px; + font-family: Adobe Heiti Std; + font-weight: bold; + color: #6ACBFF; + + background: linear-gradient(0deg, #01BEFC 0%, #FFFFFF 100%); + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + } + + .name { + font-size: 18px; + color: #EFF0F1; + margin-bottom: 10px; + } + + .unit { + color: #A6DFFD; + opacity: 0.8; + font-size: 16px; + } +} \ No newline at end of file diff --git a/src/components/Main/components/Yhsw/YhswLeft/Fsqmjtj/echartsOptions.js b/src/components/Main/components/Yhsw/YhswLeft/Fsqmjtj/echartsOptions.js index f3ec0bd..702195b 100644 --- a/src/components/Main/components/Yhsw/YhswLeft/Fsqmjtj/echartsOptions.js +++ b/src/components/Main/components/Yhsw/YhswLeft/Fsqmjtj/echartsOptions.js @@ -7,6 +7,7 @@ export const getOption = (datas) => { const colors = ['#0CEAFC', '#4A76F8', '#E3A41C', '#1E58FC']; const sum = _.sumBy(datas, 'acreage'); return { + tooltip:{}, legend: { show: true, orient: 'vertical', @@ -33,7 +34,7 @@ export const getOption = (datas) => { }, series: [ { - name: 'Nightingale Chart', + name: '', type: 'pie', radius: ['0', '100'], center: ['50%', '40%'], diff --git a/src/utils/apis/StxhApi.js b/src/utils/apis/StxhApi.js new file mode 100644 index 0000000..538038e --- /dev/null +++ b/src/utils/apis/StxhApi.js @@ -0,0 +1,13 @@ + + +import _ from 'lodash'; +import FetchHelper from '../helper/fetch-helper'; + +export default class StxhApi { + static acreageCount() { + return FetchHelper.getJson(`/openApi/stxh/acreageCount`); + } + static moneyCount() { + return FetchHelper.getJson(`/openApi/stxh/moneyCount`); + } +} \ No newline at end of file