From 707b070d5ca330897add49df7f94f4ee9b93d050 Mon Sep 17 00:00:00 2001 From: liujiangyong Date: Fri, 28 Jul 2023 15:11:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B0=B4=E5=8A=A1=E6=95=B0=E6=8D=AE=E6=8E=A5?= =?UTF-8?q?=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/app/lib/middlewares/proxy.js | 12 ++ api/config.js | 12 ++ api/package.json | 2 +- .../client/assets/images/weather/baoxue.png | Bin 0 -> 1424 bytes .../client/assets/images/weather/dayu.png | Bin 0 -> 1332 bytes .../client/assets/images/weather/duoyun.png | Bin 0 -> 1797 bytes .../client/assets/images/weather/fucheng.png | Bin 0 -> 1806 bytes .../assets/images/weather/leizhengyu.png | Bin 0 -> 1435 bytes .../client/assets/images/weather/mai.png | Bin 0 -> 1512 bytes .../images/weather/qiangshachengbao.png | Bin 0 -> 1380 bytes .../client/assets/images/weather/qing.png | Bin 0 -> 1662 bytes .../assets/images/weather/shachengbao.png | Bin 0 -> 1631 bytes .../assets/images/weather/tedabaoyu.png | Bin 0 -> 1405 bytes .../client/assets/images/weather/weizhi.png | Bin 0 -> 1279 bytes .../client/assets/images/weather/wu.png | Bin 0 -> 665 bytes .../client/assets/images/weather/xiaoxue.png | Bin 0 -> 1105 bytes .../client/assets/images/weather/xiaoyu.png | Bin 0 -> 1204 bytes .../client/assets/images/weather/yangsha.png | Bin 0 -> 1698 bytes .../client/assets/images/weather/yingtian.png | Bin 0 -> 1534 bytes .../client/assets/images/weather/yujiaxue.png | Bin 0 -> 1287 bytes .../client/assets/images/weather/zhenyu.png | Bin 0 -> 1987 bytes .../client/assets/images/weather/zhongxue.png | Bin 0 -> 1377 bytes .../client/assets/images/weather/zhongyu.png | Bin 0 -> 1240 bytes .../community-safty/components/style.less | 6 +- .../water-prevention/actions/index.js | 4 + .../actions/waterconservancy.js | 83 ++++++++++ .../water-prevention/actions/worksafety.js | 70 ++++++++ .../components/emergency-left-bottom.js | 69 ++++---- .../components/emergency-right-top.js | 15 +- .../components/left-bottom.js | 12 +- .../components/right-bottom.js | 60 ++++--- .../water-prevention/components/right-top.js | 16 +- .../water-prevention/components/style.less | 25 ++- .../water-prevention/components/weather.js | 145 ++++++++++++++++- .../water-prevention/constants/water.js | 22 +++ .../water-prevention/containers/gis.js | 94 ++++++----- .../water-prevention/containers/gis.less | 40 ++++- .../water-prevention/containers/homePage.js | 150 +++++++++++++++++- super-screen/client/src/utils/webapi.js | 15 ++ super-screen/config.js | 4 +- super-screen/package.json | 2 +- super-screen/routes/weather/index.js | 55 +++++++ 42 files changed, 765 insertions(+), 148 deletions(-) create mode 100644 api/app/lib/middlewares/proxy.js create mode 100644 super-screen/client/assets/images/weather/baoxue.png create mode 100644 super-screen/client/assets/images/weather/dayu.png create mode 100644 super-screen/client/assets/images/weather/duoyun.png create mode 100644 super-screen/client/assets/images/weather/fucheng.png create mode 100644 super-screen/client/assets/images/weather/leizhengyu.png create mode 100644 super-screen/client/assets/images/weather/mai.png create mode 100644 super-screen/client/assets/images/weather/qiangshachengbao.png create mode 100644 super-screen/client/assets/images/weather/qing.png create mode 100644 super-screen/client/assets/images/weather/shachengbao.png create mode 100644 super-screen/client/assets/images/weather/tedabaoyu.png create mode 100644 super-screen/client/assets/images/weather/weizhi.png create mode 100644 super-screen/client/assets/images/weather/wu.png create mode 100644 super-screen/client/assets/images/weather/xiaoxue.png create mode 100644 super-screen/client/assets/images/weather/xiaoyu.png create mode 100644 super-screen/client/assets/images/weather/yangsha.png create mode 100644 super-screen/client/assets/images/weather/yingtian.png create mode 100644 super-screen/client/assets/images/weather/yujiaxue.png create mode 100644 super-screen/client/assets/images/weather/zhenyu.png create mode 100644 super-screen/client/assets/images/weather/zhongxue.png create mode 100644 super-screen/client/assets/images/weather/zhongyu.png create mode 100644 super-screen/client/src/sections/water-prevention/actions/waterconservancy.js create mode 100644 super-screen/client/src/sections/water-prevention/actions/worksafety.js create mode 100644 super-screen/client/src/sections/water-prevention/constants/water.js create mode 100644 super-screen/routes/weather/index.js diff --git a/api/app/lib/middlewares/proxy.js b/api/app/lib/middlewares/proxy.js new file mode 100644 index 0000000..657c87c --- /dev/null +++ b/api/app/lib/middlewares/proxy.js @@ -0,0 +1,12 @@ +const proxy = require('koa-proxy'); + +module.exports.entry = function (app, router, opts) { + app.use(proxy({ + host: opts.host, + match: opts.match, + map: function (path) { + return path.replace(opts.match, ''); + }, + suppressRequestHeaders: ['content-length'], + })) +} \ No newline at end of file diff --git a/api/config.js b/api/config.js index 40af44e..0a2ce22 100644 --- a/api/config.js +++ b/api/config.js @@ -78,6 +78,18 @@ const product = { dbConfig: DATABASE_CONFIG, } + }, { + entry: require('./app/lib/middlewares/proxy').entry, + opts: { + host: 'https://waterconservancy.anxinyun.cn', + match: /\/_water\//, + } + }, { + entry: require('./app/lib/middlewares/proxy').entry, + opts: { + host: 'https://smartworksafety.anxinyun.cn', + match: /\/_worksafety\//, + } } ], dc: { diff --git a/api/package.json b/api/package.json index e4d46c6..daae907 100644 --- a/api/package.json +++ b/api/package.json @@ -27,7 +27,7 @@ "jszip": "^3.10.1", "kafka-node": "^2.2.3", "koa-convert": "^1.2.0", - "koa-proxy": "^0.9.0", + "koa-proxy": "^1.0.0-alpha.3", "moment": "^2.24.0", "mqtt": "^4.3.7", "node-schedule": "^2.1.0", diff --git a/super-screen/client/assets/images/weather/baoxue.png b/super-screen/client/assets/images/weather/baoxue.png new file mode 100644 index 0000000000000000000000000000000000000000..c6791b4a2d4e46a8c4fa47049df9dcff0b8abc20 GIT binary patch literal 1424 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 literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/fucheng.png b/super-screen/client/assets/images/weather/fucheng.png new file mode 100644 index 0000000000000000000000000000000000000000..b614c9a96e5428945c8ad023651359ff475cc1b2 GIT binary patch literal 1806 zcmV+p2l4ocP)Px*$Vo&&RA@u(T4`(>RS^E>ZPJz`r3h3gq8t?|0$M~7mpBWksN6^hMT9fE5x2Op zo!Cx!;G;eY6a+%0*e(Ss6n-Ft;0Hn!D4;??KpGBFN;ySEIaCs-)OL2zI;8k`-gN>$ zYS;eh{bpyr`QGl%yf=hB>_>YTUo;5UyW&cPd&5ufmrLiC0dyWQ=NRIp)+wz$Qg#ei zlMuH*c{v!pV4lmspeD#42^w!yW7``}&diNq8JWD8i82JdICGySugi69x*B^=U+M}r zO*a_rAlk?R-gv-xYuvVsu$28%(wU);0L(9RK%jNekiL+J*v_%1FL|{&%Fh&Ih&6#l zPNbzwO-pC^V}Oq=vL|{Y7StCx`F8u0I-8sDgfAY_!IQVI^VfPxq44xjf3N!8~gWMBjp_GZxa<+c~tZN%?Y1IcH)BR zcXf1hj5^tSyovKoqE%qtf6SaVYl1o>0eyp$t(5(3Bbng@gFD833t;(PQ}lbKB(oyn zvA|Q)MzUA{Xt|c=X#-MrWSkrpUibN)J2b0h+naLQ=i%@*%4e(6{T_O#f3IzS>{!6y z%$(Wt2X4IagzQ9oTPwvh>F^f8pGm22EwpV^S`*1+En*uA*P?0@iMgThM6y+j*oq2E z`Rv{!X7*%ZBD>!VZ9}!)%6JkyeXHg%^IXx?G#HWBd_9rmcq08XXn5r0Q8IV7YBM)T zdGW|Z?7edJ{9JCdeF|t}Fxa)(@w4RdB`-C>Nig;u`}X5!LE_3tP=C|OaXwL*ozF0E z$u2BmRr?{w-cZf=)a_4Q#>@#Y@AFUL@e>4fj(0nD{;fpu(C`{&zF-_jL{GIe&$(I3 zvvbPA!|z``C&Sr6W)v6tgkPIl>FA|iW1F2*w=cPZnQth=5ZxCK84uXmy8NlR#5_<| z4-@^;+T3=OlpVj@+WQhIFuF=Hg3uccbw`whJ-(#dWR9wCtU>6Ju)eC2)BgT`?ZZ!p z{wzz@Sb6$QENmQZn=EhA$Kap}BQ$YUG@!4kWWQp?hs|Gq_vsLTspS~@G9EULQWAFi zQV%nmcdBkoAa5*eD7zU8|6kifmpAnoVBV_qEpTrv*!^H7!rsuD1G4EIMP=l_j}-kG z4;eGm3M+Rk#!NM#Esg}cUUN`s3xf|U#Sqauv5;|wt*v6mVjQmtakkSt#N|u=2{SW`|TI( ztj4#?pS*}nxIx?w(0~xsSJ+xMDy?d=Sj(7(!nLekHL*7ot|m*hj44u>nNI@X2XG7k z#r|$hQMEpy8vz7~=!5adcM)dh(*Rh9PFhXTat_wo8n({F@fJQFcU9C*+5TD1VYtsPI?$Qm{UMn}{fXu2o354}fihUc2Lls~R1D?F@?Hvq?}cMfVQ6;^lkF%fMljJi>2)s%*l2)3c{B$8HBCJlva zO0G!+tNJV*2w0;IbCS{8U!Y1!vce6|rQNHypRM^@P zICXc6^nZ%yJtDGpbczUDhfUVBYQ4O$#&c!8xUA9R{JeJQCf*_dR^M1R-4cL4BHA@} wTyJVRJ^>BFjwz~fKttgg7tk^MJx<}j0S*$FTR)$r{Qv*}07*qoM6N<$f-zZhpa1{> literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/leizhengyu.png b/super-screen/client/assets/images/weather/leizhengyu.png new file mode 100644 index 0000000000000000000000000000000000000000..d1818cab9d8b1963cfbe27a05ce76ef4a5b604a6 GIT binary patch literal 1435 zcmV;M1!Ve(P)Px)RY^oaRA@u(nrnzvRTRg6{~2GC3RY%M%ZO?2WQCPb+K0jlMZJ?!QDg)?h>)x( z$$}!Nun@`~7+FLFMNpA7SDmsCiljY2s3_-7Q&yNbVVOPfHIEf*=FB+b+~>LX+_^K( z`greNYyW>|?Xw?iA90MCjxk<_from=hci5!;UYc(Gn)?F1e^~{2F?UJfZf0@U=vU; z>6;>U+b2}yL)y$LfyKZ*z_~esYzH2b^g)j8b8Z$Xu$f&9yb4^Bv!cEYzXEQS^ixRx zer}Ngo7wFFtY^3o+XpO?w7!ra-M*0ko7vsK%TTm+-rw^ZiZR5C4s2#)fmOhbz?foW zC5UklxJuI2LShyjxLb^woe10qECWUrBC?ln3s58JpRn;F1MUT03%m}@2rKd^zn3K4 z8#Y$nz-BfPnCDL#I2{-ftf9XHKHR>LWW5EMnGbDWYR(QTw3lDIuj7)EVPfSBY-X1N zPXe=mOf&DV!1I7-!o_u(nKb}&!iY@avr^InVPa(k4kn>jfLrqH;9Fpcq|IhF8%O{n z^Nf+M`5!*IBpuE-UPfRu^C7zyn3iwgUhRE$E#_?99eS3ejrrvf}wL+5b=hFiJ0-P1Gh*F04>{d(qEnSBFMUP^mP)f+7`&uSx zMLOU=ffEK&T?Bn^mUKlr;O~H`5p+6`A$LhSBOS0;3KtHfx(NC{ENOH)U@yM;fqf|1 zZb_%513nqpS;V7UIXt+nk}gjP>_3{B7va2kK2*$$`cGv7J{9-@7&ioneQ)iBza43T zgDhVMygvkhS4r|~o=(eF@pv?-V+~erUt(uU`Zp)wAk%jSw+O|mN0sW~`71eFl5drJ zENc-jfc8tV=YY=L${?`!fV(95y;L8|3Ao$C%&rcuQ0jn5Wd`nB;&nb6CHb*1rR4?O zJA#=_2nz9jm*mCx(6I`5a9;5DT9#j^dtJ*f-7?xhh|H!b(*Fkr_&#ADw(d=D1^Jr`T6s+@z7Kq{IBh4S63T8NhJebo4kV# z^KU+mdMAJmfR)Te1yE^d5F>{$S#n;gEHYhXPjgx468sp(3qZ&WD zttMXEbDHT#KFERJ!8$)Z3|?dZG(t;=*LcApwUrNW@)@wMioUdmcr5$gy1wyq;Ib|s zT0yrFkG-97NGFnSVYVpf=MeE&K{fO6Gv2!7bUJJkrYg`<>S|VIoq!UJyD?5d?8hpu zr>@4o`^apG<{4PKufr3l;0fl}KAz1b)BoXtJ?bYdW3krJ%$dA5tB8$1kKw;V`@#N# z5%Y;xd$x14tvjpOcW@kYtM}yQkiJ!6!1?sr literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/mai.png b/super-screen/client/assets/images/weather/mai.png new file mode 100644 index 0000000000000000000000000000000000000000..ebb2a4b857100eaa098a57485d2528701290580d GIT binary patch literal 1512 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 IM6N<$g2d+j8UO$Q literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/shachengbao.png b/super-screen/client/assets/images/weather/shachengbao.png new file mode 100644 index 0000000000000000000000000000000000000000..ea3f6d640ce7610a477b98d454b05a765d487094 GIT binary patch literal 1631 zcmV-l2B7(gP)Px*8A(JzRA@u(nt6y-bri=x->1>OSd{gbZJI$VZJH*Ep$6@=V1MK?q@YA8I8HN@ zqvlMrR75LU<7f~SNzn!sWf@6}LS-UWwpdWwqM?>q&O34Bj$Gf|_ujp4?i)s(^XI+i zch33#&hMVzS*|$9NCz2SdI2Bk9`E&VuZO#^17>y_a2s$na4K*-@Ehyu<~G0MD*jG9pWM9xxbKpCMD%R6p^9ux>Lu z0(c!5mB6MZNmU8>OJ~oWY)6pnvvQ2xy9-zbYygG=WAfNJN78)>F(hJ-4R}^{t4G#zBBZZvX{b0ibfg~w zW`y{D0j`(yX^3Yg@L+_jRgx}Egdibve84q}r(m|QlYD7vOa0_UAuulUW?(e130NrU z=iGH><{NQx&hssjPDqF$5qoUFE_HTIYgN`X2kdar&Wvn+Q+-8aB8>sFnXLoP&RM%t zl1KTnQ6j)@#oW2?_1(RD2W*@>chv4uEHkr<06*e;BYq&~8%cvokr{VQUchE{ zBye0@K{5Hvs}izH3WC(F!ygGK_^0G`El+zM+wbCa~Hm>rz}o0)%COMxpR zJWxztSKkkn^l_9BGaCmy4xC;<$qL|ZNuTHAi30ozaBWvDFJb+2l05J3L}peGRL7M0 z4=_p6^HKa!fIR^?DyHzX*ggYBNZOGr(99}sYBFS|{Qc#HaiOY@V&i^g& zHE;oNN*)o@B|T9Pu)j1jPa%f{Q7|o#F6UpsOTu-Mw#E@`X8tYS8shciIz!T9fvtxE z4r+3QyycQS0oqH6@8LK`rpaUGNe*?u*dR}Dl(amo!^|ACXKwv+bZ?ThkN0~#;JBM- zW~%{DXu`Bhk~bsv9}mX?Y-S#Bz6bm?gy}~~0}d#_X6E^L8*o{~<}8!sg-m`A2j4@j zmvj-|M4S!pP9FEDrutG^hDLWAb_|+ikC`De{YhIL8%B(rB9Z`V2CGt!#4C@I|e7GcU_@zRH zMlIf(_IYnP$)mK7b1nz&2lnYs1d5-MG$kz~dV&Y{U@cH0G5RKyms|__Kl8b5j-8QR!h31n2xybV*{?NSvJwkR+cfq(ZR)SJt#{H|sn`mDtf-U(xAzrm%Hpc26+%PipjClDut` z8YKX{_#-p(3ThwniG6eZWdHZ7kcVB5{{eJI0?Qwk6#o4w!P5M!u>n`rE*aCFZGS6Q zRG&>Tf{RNzeD#GoGb-NC002ovPDHLkV1l<&35@^% literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/tedabaoyu.png b/super-screen/client/assets/images/weather/tedabaoyu.png new file mode 100644 index 0000000000000000000000000000000000000000..a6737e2cf75498b2bf8db628cd18cd076dbe6e4f GIT binary patch literal 1405 zcmV-@1%mpCP)Px)H%UZ6RA@u(nrm!SRS?I2|J`C0F#?7JH7J6mTQvqud|-kmMg!7reS-Q){N#%d zY6M?ViyD<+qG)0?F`B5+1SK(DsQ3s~G#U*?e6~PD5rv4Nf(Quhj+u75?b2=c?%r)_ zmz|`^p58Na=6`1HoOAx?io;BFnBk=ixYQ$Fj&M1`MVbLKn+9A5Oa&&S{@Q?Tz!uh#O z{@_K}%q{`m0!D^(b`x-gq_0ETNvjtBDd1uKbp2(Lt_f=>6kszu8fcfauP;Z;>~i2$!25=k znUdZOV{EIHHnTH;Z-y9{ zeBAMEtsgr64OFGg%$E4}4L+d5A9}FT}gg*d$gE8FY0Z9)B0qjSzQ-(WQz*D+P zk~1o4$rjy^Y*dZ*Gv?Lc`XBbA82;h$-U62d#cfe^S0(hIG6LJCevVK*G0NyVt zgL%pJ4$t$GPKf~CD#;Ho{T8j`QatfdB>=iv(nb9O_J?Nn7;tw90KQ$)Q$YZa0loz? zUie`)0lR?7lAMs}JEgmxn3=O1Yl=v>4)%O4kmM{)hU6juE(2aGB3m(7pnav8+eI-2 zig1rep9Q=DOd2e2LyqIe!&@XdQP4|ra$2b(=7hSF>vsaqHxEVen~8fRE$`2{K!AH1 zNL`Zo)#o^1Y>E{*6wF8x*a`dwtOZ)LrEp&F@K6k6SfBEaaM%G4wSF1!p^m^nk6(C% zS8N`G?K>T5D|J(xCCQW(8)}Fo#}XaAj+x^#3AM!5k!a^sDk^p|tICg~nX+=z$=HFD zFj|OLXY7<{whI2)FpWquNp0*)Brjfpr7*x|Q4+0Q9sQu;?DZ__YTikY+Sqa<@LWe* zY@{w$P3oSh{N4}8vUmUAX(zZ*Xyrs|CvEO%H*Fk8 zTU+-{zSKlKR@-B;8n7OhcZ$>!uXftC%l3B6d=KCm@GR*&Omt4s-&&We|LV;Bwi+7 zbA7k&`uSM$nRHu`bBR}f-oy6ybbjUMMXQl`%+KtBrLdyaQHeVoYXJRzZtL|8;!EQ41f(RvfuqnNf39WjU6$=x5FHE$oq?j5c>od~Z`7rQkB&C1qU zBzXa>ok(;pwNpL|jJ9Kb4>KtPF7<$yBV3MfiOoPcrAsWJz2N*0kaYS?uxZ=O00000 LNkvXXu0mjf0V0RJ literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/weizhi.png b/super-screen/client/assets/images/weather/weizhi.png new file mode 100644 index 0000000000000000000000000000000000000000..9ae68644b489d7afe36be2dcce5dbdd647364720 GIT binary patch literal 1279 zcmVPx(xk*GpRA@u(nQO?UQxwO4fA>4Nhm7llG&B)HE+3dtG-(p4iNO$`%=j>_B_f1R z3>jubikd<)Gs+;ugitP{nGeVvjC2WIlvNNvtc+1{NcMV z>6NicTIoeuGD-~r%TN$ZQA zq}Fvga0{?&4=}&Fy-9L0>su;EI3jid769k>(NEhB{gsN&i`_hoh=YN5fgO7wagV;e zZ?sjbbVSSpZUc53#0YS=BomL8M8tW($*Hidl=MvDw~JDR?`CSPBwvNTrE7#!s@(@T z-3Ark(|sguNMP?utgEPRzNCB8@7n;sRH*XPB{>`Vl3swH08Ak2$m^0$N?=^Q&6$1g zi}I9Pd)6yW8OH5(*tUjS@Yb$k!o zizHpyuYaY0BjV81Hn!+jVafXYC0&&OyB0iHvSx*(nFYYEz_`okM zV6~*^w6_!BD*d$TS@=HsTKo(=47d^(#dq8c%4zI^b`0=VRplk?ymx`5SIcya0~`_i z0iO+#2Y2)RyVR~)#U~=%%l#xYJ*^||`R@03ZmgsX@D;$KI@T)g{lNnPNlrzB_4Qd= zfvHtg-&%H~q+5#{$^g43p3{%k0oIy`oYqdei0~6~88Bl2UEQ|$F3*tkLVHme;17W# zhHQ9ab&p88r2Wr`coHxf$sy+K(%KeGcL$JJOzH=9D#(`~)pc z={JGna$5I8MAG#UaWwE6FvhYn*#D3wpEwx@W5#iz8w;AlTRriqis@clfz^uX` z-sE8zqo6^7n)|m$Jbr{cCCQ|wRQduus7Ir;uK_$t(a7OT6X6`EI!Zd52#-=Ua`@6j pILE1ulFlZ=qZExCzD&9Z{{t4TR7{=zxz+#x002ovPDHLkV1kO=Wyk;k literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/wu.png b/super-screen/client/assets/images/weather/wu.png new file mode 100644 index 0000000000000000000000000000000000000000..fe7b233cb4403134dd68b9ec6b06e74b4ec1fea3 GIT binary patch literal 665 zcmV;K0%rY*P)Px%Q%OWYRA@u(nK5e>K@^3*V-O1)CDwKdTBu-S;U5rNtpq_)P)Vain}86o5EVPo zLQ$}^v(U;SWk66wENo+`Xdns}dc(j(9&21FJx7>46FQ7oDnbRd`?(2)4ADZ3pfGCxM*}{-1z*l5UQEZ)SUd`@m6P zoB!=M@Bz3c>1E^mG2j-kAJ~#m*Z-f*a5!~0C85*V|T{PwgT^gz5j^$ z2^^60(Vutc-i;I{f$yKt2a+zv68;QK2T;6_blej-47?7UzbfgDKR*lH?toWE;yw(9bv}+D&dX`T3ouSa8r_iwJc4+v02N~ zh-bH!r4i0yGb_|v98{klvgmYTU7Px(3rR#lRA@u(noG!4RTRg6e-sn6hh~~R1Qi>6C=?+&=rJfCkcgr_g9;}pB$SGZS)ihbk5n9qq7h++FQk;{WrUI_s4Eui&%W>T+Nf+fcGTbXiz^= ztq@={dmcCl49e*2_rMHEKWDUaPd#^FGaDb?$47E<(qSh^`aKVOMF7tNmH{5+yyPVC zavsY&ci>J!GkY<-!~S*7L)J+8AgiImfZZ`O>j!)YEYBe$-1d|v>2wz8RKR975O@uk z9CGRKkW2kNI}B`>xIgQs7Xy~I~Lf?UIM-bh9)%%+yXuVJ^`Kr_5veQ=+_&%Ow#H`ZPf)f zv)2JH03K-c0R`wClJsh$c54Eg*+k$d;2)kU$yG^18g(cV*vuXVegvLu)NsLi3xoZ? zflI)5k}SzHYXPqe=_HAbDvbFJ*a)na^iMs9?gI|dy$n291(K9LTm|My@;W|JqJZZC zTT?!$O2a*MEs(S=%Bd*e&0(WnC5W`X+yq{bbgHLf6z~tgxU^5G;P~T`JkxZODBwSU z$0`WWh)Yu??eD4>1?*K))pBnmu&%RS(mQd$S1O!;(}MpbsUr^9n`hp&Xa%_@$&09a z61Ak)0E=3I7Puj4Kpe0a<~0*{lTE}0Nn_%G`vPZyQB4LH8m8beSkyWDQsfm^FW6r?}gQmaES6Sz)Q2LZV~In!ncakBzdQ$o5XcIo(b)l z(M=ZV<&suK`JAMu!Gp0or-2QDV!*HQ_tV=Dv5VX_qczO z&eU@(F>n`fkN7L0Fa3Cc_f%H4_`dhg(Bj!I$$!U6YT#Il6(7(Bu6TelyH|RI&CG8E z4Cq+_WhO~zpj2Qp^RK(NQT=@CQAyVl`kC9XQh?2DCg8_5zV$p7y!S8tn_j|7+K?Mj zjG?lC_W@JF(Q0Q7_q5`_Pf9AS;ZPQ^cMrdbsLTHfjq`6?EyDiJe(KkddVp;SSCg){ z8t{7H?HW)!B>6jDij=jaKM%mZ33)4!eF=D@VW*_orO@VZ(Ik&GB2 zPlTHS|4Q;+cqvj!gu9ZM*>+%XmQ(yJGgCTn7H9L&Z3E{qi&eJKj&PNulZS7;F2er- Xyjl%RG(!0100000NkvXXu0mjfh9nUp literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/xiaoyu.png b/super-screen/client/assets/images/weather/xiaoyu.png new file mode 100644 index 0000000000000000000000000000000000000000..3d2f22a9fd4a814551b1f9a4cbb55357234660f6 GIT binary patch literal 1204 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 literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/yingtian.png b/super-screen/client/assets/images/weather/yingtian.png new file mode 100644 index 0000000000000000000000000000000000000000..61c5876e06c55ff2b68742ad05e1c07fa7c3a9f3 GIT binary patch literal 1534 zcmVPx)xJg7oRA@u(ntf=Mbri?H-+S+-ty$VqtVlzH`lA<3%LptBqLAp7O~TmRM9WGE zW1G#*9&*mqKSD5N(&kHA5%i)a7AcmRK`4?^5u~PQl9mR(Oxy1L##wiEz4z`u&vSQ2 zyVw0-u*-AK`JK;me!u6O-+3P5G8??ic+m@->k;pbaBqZj><;uU=}ZN*wsz(4zY&=N zVXT0gAq^mSM!+$W-v+=G%9lrQh}gGE|@#{`^?$= z&ypwLS#>M!4u>@Z#AA^9r|SrTUr25fut(&95Cf;$!r==Hv53Mzg(Jg7-VgETMGfUI zr#nx|ZIkMv<7_B6*Lq^9gi=7BZcf4j7&r}Zc_=@)y1^;i>jlDb6mT3yyvX{M=@i0o zRu4MY+O|p3U4D&5_o7I>Rgf2$>p10qrDr4aT1kN$8+YaHKeTs?pt0#pN#M6YfMsvi zS8PtEZ)prbznDM!Z8`Wf$y4df=~X8waF@~yxh`~NaPs_`vOnXUkaQb>G62s37~F}I zM*w^Rz^bo|Ke!TrUu#%Z)OI#}0Mb=n?^=f(!H)~_%ZuappQLL6ECDdVhfUkVYXHn9 zX*VGwBLTR&ws~44qNRSVllX3MQNM9BXO^_Y>PmVFKqG*Ger-nOZHX6?+>)mLC29%4 zRkNEnN*eFSIKf{F@_h;o0R;TmOCoD0s%a$O>7t#)CSFxd^Fcv3b!wPA z4&rlyhZND_V1P%03hbLVuk2_XY%zfM0i-@Lc_*+X{shU-ysIQiCW~;3q`q;Ytt396 zxOUWt!p$WmC1JNoB@F;D6~IdXZgi9Pc-;;bV@Uq!Q9eN|5xA!Lq|okc$M`0c&#CjB zinJz?ln-DI06R%#BHG(XK9Dis%9^Hq04#m9l7Sfu>L)e29nK{c*ghrM>CsNoJpk6F zNJoAcCXoElk3xrRk|o`=9AFt3C|+1UX?-%Il5UNrn8yJO1JF@lTSc`Uzx0lHk zMw7H-sjuPY^hINmY~Oqu6HTuZeF@-o09OE50bqz%MHjinBwz7s%M-99Te`Mq`uLro z8|8PC9PQV>E3l+n0PF%#=+}5R%U>{`Ncw8?rUaH`71AC6cXYG!>6&*en*gxq#X$gH zlRTfwm>aO2YTixPoBu)2(xPREIV68iHoqJ2PXH_hW!pFnU?Ry4@s4*2EXnfg{%j+S z@z-kaQj%+98Bzh40$7#Bz~;K`=le+7bEti!0;Rt&V+qOWZot;&nU)K*0QQk=uO(6~X?rAz)u7CCk07*qoM6N<$g0EZ9=>Px# literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/yujiaxue.png b/super-screen/client/assets/images/weather/yujiaxue.png new file mode 100644 index 0000000000000000000000000000000000000000..a3e049e38f407ea35a0f5fef39d6653e5d450a0a GIT binary patch literal 1287 zcmV+i1^D`jP)Px(!AV3xRA@u(nrmnrRTRg6|E*fZYFkl!RurvkYZXPoY7Hn@1F}(yD270-MG>v~ zp$Wbf{no1Zfa0Tw;sezBL2A+vw4jJ+P|*5JYg@He6txwL*j5sA5K%@H6lu@HVhk z($#9;{(P~d z-DwSG4m|9TnOzk0;WN`Z8R$PQX?a>(6$5t1%85Qsym#@87O4?P-<~ZOWy4!)nGIC}j&FlbLC9RLD zGz|D!;MIxrGUK{@fzl>vO_<#<;H(x28FQ3n&bO2cB>9?PjD!Jy4xCk%`RXj(E9rtb zz`p@URVPE)UNuYd)X|89Mfjg8oO{bA4HQ;Ox~UYfZv>7{T0@oT^+}pr3fMQ>p0%h4 z*(GUA<|V92KMCAk546B;Nn+$B$rn=5 zqqM&j2o7nXknGo&vlFcp|P=#gA;}Na`;M97OpT;8Wn(8YK3u;+2v*_xHV2 z#$yi9U4#AkK}o*F9Vc;eTAs`Dy=HR_MB0;l9g?1i^0g%Ju%elHdiEaRLa4f{65fP+ z08j9JQ7kaAfk%ORpT0E6OZ#sh;QVi*#iRLqkmBiyo4PF}m z`eTznfZS7V_;LT?OY6e3G@O>fLkQ_N#l6w-h2uJ z16xL3DA!I){;|Zgsa8z!ffsm0i#X}c`;NK+4x;Rb;VS^YK`>fg3J%ZzsyE=JfHy@y zl^hmd|E>m>N8Zk<(I!0~_^3#eULnb^Ce}?K_NmBIzuy7h_~~Bo-;)b|*>ssCzZy~P zz+2`q*zcq5km!JBT4sl4JI(B1Nqfz#!{^{p)6)OXBctE5{RsO1-Z3&QNlR%tJ>L8s zVKn))Px+eMv+?RA@u(n|p9vRUOB_-@Ds3Z3xCP%|IYJwB77NwW3spZnoNB)9kKIMrIU6 z8B`cV9TXWKIEYik5d3Hi;MWT}c0S?8p_$H5I=Zv~ZiPs_k|B9VIFY;8 zPaj3Qb_|N#rR6hQ`XPvx`Rw9Z@9z$HI<)sDVh z8C$@ETcVd4W0(L(@`vF>?u*qN4R2lXmcrQa4?r+q$O|BHL<5E;z&)Y!E`7Wjgr1IO zAn2^vBgbad&1kr|ea8vAFm~kZ0dI@VH%5)&@dgRr6Hey7G5(sGp&`a1#2-*f#Hit6H z-UGqB`gx80%}Y}MQ`hp_ueuN;BaaB=G6#N7y}95$t%;6rzFs>qN5H28m3lTOBJXko zTbZE1)!}6BZZ9_M>Usj!(`~Ze(2ppRtV8@=o+>8rOtYHa|*kD!2*M zFCACF&t^L39+OuNKqP1p$iGSLx^Nd%S{~Pmm^e^6BUS5j2gv z{X`_WYjF`c6Z^4Y7@w=Es%hVe#Itv*dm<7BumQmP9RR3a|0#g4vA8+$x0$}u`E=Ve zBGOWENA8X!a!b_je7bF|h6@a@!U1))hzA0RF%W5N3BSn1aLLUAuB;A_f3HZ zGqF#LVQdsY127tZ_Tf-6n^MO0&9U17iin&KKrLbI z9s}+m>3JvS7+9p36@45)H-Py-CGS<)({=zV-TMQ{V`V@QQF0UVX&3N0k}(&06I5&i zi-_7V++TvV(t94jtt5Z1yorbk)Q`mA5|X+XXsf`BwngM}0BVN5z@f88)uayKQvl{T z)U76dH_6pr>{tSeh}vxI0#K|bzQHX`Qtj4Ux0=8rqV~MIOJmiw6CV{10C+Ee*{ZTc z@@1#Ct$@{-Rcq>GZF|)O3E%;e`|Sj23M?XOAN_RcY1*;%M#`ua;&zfhvI?RW@XY|$ zTN#*S_t%j8O0Ae`0rvo?d_U`u=DIyg0ax7#5>i}Lp#79Bl%m$JFW2w z9tr?<0`ya6HOZRanJs&`9F4;gkDm~BY#lC@lq?Uw*#;g5uDCmuf<&nsz4tPH2t8 z=sdqt(yglVn9RWb!Ami}bpVSv>hR%A5ce0jXFw(2-vejp$fVHP^M%^L_*Ggvhd!z}mG~75rxy=n|S;t>sFOj@Xx@R5m{{dkU Vv|ICbT}l7|002ovPDHLkV1fun%VYom literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/zhongxue.png b/super-screen/client/assets/images/weather/zhongxue.png new file mode 100644 index 0000000000000000000000000000000000000000..0e713e801dd17ff9a0bdb2daf00e333951004392 GIT binary patch literal 1377 zcmV-n1)lneP)Px)8%ab#RA@u(nrWz&RTPGwmj;`pf#zrwp=hE^lloH@4Mr29KQb^HexwBzSX2^( zAq^5JWgtQkL{St`3QaT+MMWbe5tPldltE-8E8f~i?mhQA_Z!dg+~Zwvxj)X{Ypv&7 zdsutzEw(Vx7RJjs@SsP0Ji_Al0`Zmgj-%B)wUraoILq1CEIOfEB7xDQw$X=8={9lLY|I3hf3p96NQ z>FnFUd6K@Ysb^F7#(^W^*aW+4Lr#7QOqcXS6Z*OVJO{WDII0N;laAMclbaacjRUtJ zBVq<{H*jb};7cVftgEYQz;-MmwgYYk>}XwEe*s5J`mhdkDJK%Z8Ng|2AKe%D8~7Y} z0eD2xkL?ac#7f|@I*z8k-lxy6qo)vXMC|Cj5x5%IX%vHoUkzL%$&1Z@5)tlqXB|gV zU+dpr(sxyL3+RN#m>7kCiZzM=s~ zWUB_|?@;s4O7fJdBprd%e)m+?t z)LtjxMZn^sO8TIkPgwVQVU*( zqxOFSvn4%|{0k7e`v2%w59zorAn+V;*_!0$SRt74_k`n)9Rq$0rI1AF$F^HtrM zA;~H4CdrEMAHcR%E%aHx6_OU@0e=nnP%sFxR?-o9z;6MrS`310kTk6Fk~O4Vc)NTM zXn~EAcF2qHOkmA`06XoRlm|S)`RRbnY@V=(htCh4lIFI}XjTaQai#CaVc;QaFL`3 zxJL?(xe~P4cDtq;RK7R=CGVn3rO5~})i^cA%bzPx)iUCXwsbN%^5NuQOqQwcaCT;wy9AFs5FpC_Ct>F2V}w6~84 zXLnDx<@3J)GbQJ z7*|xe7_SW6@-ia)jPMd*r6gB8I{|o3`fPf3y7=-tuCstid5cd(TnQ{sFZ6CNGg8{y z)&?$OJZ)p&rq%odU<%-m;|ucx{r*GJs?l^sgg?wDMeL2%rdPnW3BqxV00000NkvXXu0mjfP|S{= literal 0 HcmV?d00001 diff --git a/super-screen/client/assets/images/weather/zhongyu.png b/super-screen/client/assets/images/weather/zhongyu.png new file mode 100644 index 0000000000000000000000000000000000000000..3309cd04b7ed262fe6fbce9bb46c9ab4b29ce42a GIT binary patch literal 1240 zcmV;}1Sk86P)Px(l1W5CRA@u(nptREWfaGM|HRhT4WX{3XqSh~*y2hNH&hg{rW26bDkxeXe2`jO zTC~&!1RoSpYq4r@e^HTIt0t+oq*fpFK}8fF5>27jxMSRs?#x|>JCn?T zJmsAK`TxK3&H282?iCZvG{N-J5Io*1-l%Y+!YQqQnVkmQ0GtJ!;{6Q*-vhgWZNM9n zcBPck7pCf4+RPRKcL8UI6w(c>k@RUu|443C6KrND15W@~M`BcRHsCp6xukz%#Fq`J zieNK49oP;WmyqnoZowpdmk?(-JaxgI*mr?xDUsX>oG0m*H1Mh+_xd2 zWs>$L#Y|oB|35%8hr0lH9GIPyq!<5yB-i{BSycoNF*36wfd_%x60s}=?*ryZ>PvzZ zNwAq623!hU;hm$?fdjzTzz**m{c|)SGkX!ZDG5<8cB7;vNpM05HnYjVO5o0bX5@~L z*PNfE9}cPX3gEFMM7`Mk!1N>yEKso5bzcYOL?HYJuoigQTOil9=SGOHT)m*5B%Kr&-dC`hxvIFk zY%VTvmE&5y>*ue)E=fO!%~wwFD&Uc@AT{9k3Gh7dj3jqzl(jK}&Fl#8m^r=%ghZwA zC9qi17v%!|1h)ZiM$J@1{(k`lN$>k{@)PWil3Qv>KpZLqzpJsLsaDPfkvxHeD>B%sHU6tK^^wccbCd~bt8z4&hJy5V$<#PZx9z8r^;;h0~ zNm@5LdC~mMs-? zb@eV`&|WS1sL13gGq`f*@cSp<*pA+ZFuTKx>8CB{K88tT@dUrscQG6|xZ2XK6msnq znRNE7rpUv?KFyj>YtGG+%Ueg!D;U=eJGABF@jWC%Jb;GaMuo?2)5ex={D#NwikfL! zojd1I+<)+em9&^b&ON1+x2~S04B`faC7Z-77UbQxA(guH28?B%!vJmhq#wE^_&~g) zcRl7V9&BfJ%eBmv8{n6>5BsMw@XscU3z2Q0kPrR@X>0E+_OZEi@z4qixt9_h!tMr; z6rkSX8-nYtVo~`vDjapi>dn7V;d-lBRK63g!v6sretArfiJ#v90000 basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_PCODE', + url: `${ApiTable.getPcode}`, + msg: { error: '获取水环境pcode失败' }, + }); +} + +export function waterLogin(data) { + return dispatch => basicAction({ + type: 'post', + data, + dispatch: dispatch, + actionType: 'POST_WATER_LOGIN', + url: `${ApiTable.waterLogin}`, + msg: { error: '登录水环境失败' }, + // reducer: { name: 'members' } + }); +} + +export function getWaterLevelTrend(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_WATER_LEVEL_TREND', + url: `${ApiTable.getWaterLevelTrend}`, + msg: { error: '获取水位趋势失败' }, + }); +} + +export function getWaterStructures(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_WATER_STRUCTURES', + url: `${ApiTable.getWaterStructures}`, + msg: { error: '获取水务结构物失败' }, + }); +} + +export function getWaterVideoList(struIds, query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_WATER_VIDEO_LIST', + url: `${ApiTable.getWaterVideoList.replace('{struIds}', struIds)}`, + msg: { error: '获取水务视频失败' }, + }); +} + +export function getYsAccessToken(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_YS_ACCESS_TOKEN', + url: `${ApiTable.getYsAccessToken}`, + msg: { error: '获取萤石授权失败' }, + }); +} + +export function getWaterAlarms(query) { + return dispatch => basicAction({ + type: 'post', + query, + // data: { "keywords": "", "status": "new", "levels": [1, 2, 3], "orderBy": "endTime", "orderDirection": "desc", "limit": 10, "offset": 0, "structures": null, "types": [1] }, + data: { "structures": null, "orderBy": "endTime", "endTime": "2022-06-30 23:59:59", "keywords": "", "levels": [1, 2, 3], "startTime": "2022-06-01 00:00:00", "orderDirection": "desc", "status": "history", "offset": 0, "types": [1], "limit": 10 }, + dispatch: dispatch, + actionType: 'GET_WATER_ALARMS', + url: `${ApiTable.getWaterAlarms}`, + msg: { error: '获取告警失败' }, + }); +} diff --git a/super-screen/client/src/sections/water-prevention/actions/worksafety.js b/super-screen/client/src/sections/water-prevention/actions/worksafety.js new file mode 100644 index 0000000..89d6db0 --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/actions/worksafety.js @@ -0,0 +1,70 @@ +'use strict'; + +import { basicAction } from '@peace/utils' +import { ApiTable } from '$utils' + +export function worksafetyLogin(data) { + return dispatch => basicAction({ + type: 'post', + data, + dispatch: dispatch, + actionType: 'POST_WORKSAFETY_LOGIN', + url: `${ApiTable.worksafetyLogin}`, + msg: { error: '登录安监失败' }, + }); +} + +export function getEmerOrgList(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_EMER_ORG_LIST', + url: `${ApiTable.getEmerOrgList}`, + msg: { error: '登录应急机构失败' }, + }); +} + +export function getEmerTeamList(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_EMER_TEAM_LIST', + url: `${ApiTable.getEmerTeamList}`, + msg: { error: '登录应急队伍失败' }, + }); +} + +export function getEmerExpertList(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_EMER_EXPERT_LIST', + url: `${ApiTable.getEmerExpertList}`, + msg: { error: '登录应急专家失败' }, + }); +} + +export function getEmerMedicalList(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_EMER_MEDICAL_LIST', + url: `${ApiTable.getEmerMedicalList}`, + msg: { error: '登录医疗机构失败' }, + }); +} + +export function getEmerRefugeList(query) { + return dispatch => basicAction({ + type: 'get', + query, + dispatch: dispatch, + actionType: 'GET_EMER_REFUGE_LIST', + url: `${ApiTable.getEmerRefugeList}`, + msg: { error: '登录避难场所失败' }, + }); +} \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js b/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js index b5eea29..a177073 100644 --- a/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js +++ b/super-screen/client/src/sections/water-prevention/components/emergency-left-bottom.js @@ -1,55 +1,42 @@ import React from 'react' import { Box } from '$components'; +import { Tooltip } from 'antd'; function Infrastructure(props) { - + const { waterLevelAlarms } = props; return
-
-
-
-
-
2023-06-20 17:00:00
-
二级预警
-
-
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
-
-
-
-
-
-
-
2023-06-20 17:00:00
-
一级预警
-
-
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
-
-
-
-
-
-
-
2023-06-20 17:00:00
-
二级预警
+ { + // alarm_unhandle FF2C2C alarm_handle FFEA00 + waterLevelAlarms.map(a =>
= 3 ? 'alarm_handle' : 'alarm_unhandle'}> +
+
+
+ +
{a.alarms[0]?.source?.name}
+
+
= 3 ? '#FFEA00' : '#FF2C2C' }}>{convertLevelToLabel(a.alarms[0]?.level)}
+
+
{a.alarms[0]?.content}
-
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
-
-
-
-
-
-
-
2023-06-20 17:00:00
-
二级预警
-
-
萌萌小区25栋305等等等等等发生等等火灾扥大哥大呢个
-
-
+
) + }
} export default Infrastructure; - +function convertLevelToLabel(level) { + switch (level) { + case 1: + return '一级预警'; + case 2: + return '二级预警'; + case 3: + return '三级预警'; + default: + return ''; + } +} diff --git a/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js b/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js index fd9260a..e676ba4 100644 --- a/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js +++ b/super-screen/client/src/sections/water-prevention/components/emergency-right-top.js @@ -3,7 +3,7 @@ import { Box } from '$components'; import './style.less'; function CitySafty(props) { - const { emengencyTab } = props; + const { emengencyTab, emerResource } = props; const tab_name = { yjjg: '应急机构', yjdw: '应急队伍', @@ -11,29 +11,28 @@ function CitySafty(props) { yljg: '医疗机构', bncs: '避难场所', } - return + return
{ - [1, 2, 3, 4, 5, 6, 7].map((s, index) => { + emerResource?.map((s, index) => { return
场所名称
-
{tab_name[emengencyTab] + s}
+
{s.name || '--'}
场所地点
-
南昌县中心街道人民路168号 - 人民路168号人民路168号
+
{s.address || s.region || '--'}
承载人数
-
2000 人
+
-- 人
目标距离
-
2.5 Km
+
-- Km
场所{index + 1}
diff --git a/super-screen/client/src/sections/water-prevention/components/left-bottom.js b/super-screen/client/src/sections/water-prevention/components/left-bottom.js index 0f3f86f..db6523b 100644 --- a/super-screen/client/src/sections/water-prevention/components/left-bottom.js +++ b/super-screen/client/src/sections/water-prevention/components/left-bottom.js @@ -1,8 +1,10 @@ import React from 'react' import { Box } from '$components'; -import RingChart from './charts/ring' -function LeftBottom(props) { +import RingChart from './charts/ring'; +import { SHUI_ZHAN } from '../constants/water'; +function LeftBottom(props) { + const { waterLevelLength } = props; const colors = [ { linearGradientTo: 'rgba(5, 207, 247, 0)', @@ -31,9 +33,9 @@ function LeftBottom(props) { ]; const data = [ - { name: '泵站站点', value: 2560 }, - { name: '雨量站点', value: 1560 }, - { name: '水位站点', value: 3560 } + { name: '泵站站点', value: SHUI_ZHAN.length }, + { name: '雨量站点', value: 1 }, + { name: '水位站点', value: waterLevelLength } ] return diff --git a/super-screen/client/src/sections/water-prevention/components/right-bottom.js b/super-screen/client/src/sections/water-prevention/components/right-bottom.js index 904aafd..f3390ae 100644 --- a/super-screen/client/src/sections/water-prevention/components/right-bottom.js +++ b/super-screen/client/src/sections/water-prevention/components/right-bottom.js @@ -1,31 +1,53 @@ import React, { useEffect, useState } from 'react' import { Box } from '$components'; +import { Select } from 'antd'; import './style.less'; +const { Option } = Select; function DataTop5(props) { + const { structures, accessToken, videoList } = props; + const [showVideoList, setShowVideoList] = useState([]); + useEffect(() => { + if (videoList.length && structures.length) setShowVideoList(videoList.filter(v => v.structId === structures[0].id)); + }, [videoList]) - return + const renderSubtitle = () => ( + + ); + return
-
-
南昌大道14:12:32
-
-
-
南昌大道11:34:12
-
-
-
南昌大道08:34:12
-
-
-
南昌大道09:12:34
-
-
-
南昌大道08:34:12
-
-
-
南昌大道09:12:34
-
+ { + showVideoList?.map((v, i) => { + const src = `https://open.ys7.com/ezopen/h5/iframe?url=${v.url}&autoplay=1&accessToken=${accessToken}` + return
+ +
+ {v.name} +
+
+ }) + } +
} diff --git a/super-screen/client/src/sections/water-prevention/components/right-top.js b/super-screen/client/src/sections/water-prevention/components/right-top.js index a9073d7..d59d52d 100644 --- a/super-screen/client/src/sections/water-prevention/components/right-top.js +++ b/super-screen/client/src/sections/water-prevention/components/right-top.js @@ -1,8 +1,10 @@ import React, { useEffect, useState } from 'react' import { Box } from '$components'; +import { Tooltip } from 'antd'; import './style.less'; function CitySafty(props) { + const { trendData } = props; return
@@ -14,16 +16,16 @@ function CitySafty(props) {
- {[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].map((s, index) => { - return
+ {trendData?.map((s, index) => { + return
- 点位{index + 1} + {s.name}
-
2023-01-02 12:12:12
-
111
+
{s.currentTime}
+
{s.waterLevel}{s.waterLevel &&
0 ? '_upicon' : '_downicon'} />}
-
- {index % 2 == 0 ? '正常' : '告警'} +
+ {s.futureState === '正常' ? '正常' : s.futureState.length ? '告警' : '--'}
diff --git a/super-screen/client/src/sections/water-prevention/components/style.less b/super-screen/client/src/sections/water-prevention/components/style.less index 42e567a..84df1b1 100644 --- a/super-screen/client/src/sections/water-prevention/components/style.less +++ b/super-screen/client/src/sections/water-prevention/components/style.less @@ -365,11 +365,12 @@ height: 100%; display: flex; flex-wrap: wrap; - align-items: center; - justify-content: center; + align-items: start; + justify-content: start; ._item { width: 46%; + margin: 0.5% 2%; height: 32%; background: url('/assets/images/homepage/fire/videobg.png') no-repeat; background-size: 100% 100%; @@ -377,9 +378,9 @@ .video_bottom { position: absolute; - bottom: 9%; - left: 4%; - width: 91%; + bottom: 0; + left: 2%; + width: 96%; height: 20px; background: rgba(0, 0, 0, 0.4); font-size: 12px; @@ -387,6 +388,12 @@ display: flex; justify-content: space-between; + .video_bottom_text { + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } } } } @@ -505,12 +512,16 @@ ._rank_item1 { text-align: center; - width: 15%; + width: 20%; + margin-left: 5px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; } ._rank_item2 { // text-align: center; - width: 40%; + width: 35%; } ._rank_item3 { diff --git a/super-screen/client/src/sections/water-prevention/components/weather.js b/super-screen/client/src/sections/water-prevention/components/weather.js index 4e7536e..27955a4 100644 --- a/super-screen/client/src/sections/water-prevention/components/weather.js +++ b/super-screen/client/src/sections/water-prevention/components/weather.js @@ -1,18 +1,153 @@ -import React, { useEffect, useState } from 'react' +import React, { useEffect, useState, useMemo } from 'react' import moment from 'moment'; +import { RouteRequest } from '@peace/utils'; + +const WEATHERMARGIN = 1 * 60 * 60 * 1000; +const WEATHERArr = [ + { + lbl: '未知', + key: 'weizhi', + }, + { + lbl: '暴雪', + key: 'baoxue', + }, + { + lbl: '多云', + key: 'duoyun', + }, + { + lbl: '浮沉', + key: 'fucheng', + }, + { + lbl: '雷阵雨', + key: 'leizhengyu', + }, + { + lbl: '霾', + key: 'mai', + }, + { + lbl: '强沙尘暴', + key: 'qiangshachengbao', + }, + { + lbl: '晴', + key: 'qing', + }, + { + lbl: '沙尘暴', + key: 'shachengbao', + }, + { + lbl: '特大暴雨', + key: 'tedabaoyu', + }, + { + lbl: '雾', + key: 'wu', + }, + { + lbl: '小雪', + key: 'xiaoxue', + }, + { + lbl: '小雨', + key: 'xiaoyu', + }, + { + lbl: '扬沙', + key: 'yangsha', + }, + { + lbl: '阴天', + key: 'yingtian', + }, + { + lbl: '雨夹雪', + key: 'yujiaxue', + }, + { + lbl: '阵雨', + key: 'zhenyu', + }, + { + lbl: '中雪', + key: 'zhongxue', + }, + { + lbl: '中雨', + key: 'zhongyu', + }, + { + lbl: '大雨', + key: 'dayu', + }, +]; +const ICONSMAP = {}; + +WEATHERArr.forEach(({ lbl, key }) => { + const icon = `/assets/images/weather/${key}.png`; + ICONSMAP[lbl] = icon; +}); function Weather() { + const [time, setTime] = useState(new Date().toLocaleTimeString()); + const [weather, setWeather] = useState(''); + const [temp, setTemp] = useState(0); + + useEffect(() => { + const timeUpdate = setInterval(() => { + setTime(new Date().toLocaleTimeString()); + }, 1000); + return () => { + clearInterval(timeUpdate); + }; + }, []); + + const queryWeather = () => { + RouteRequest.get(`/query/weather?cname=南昌市`).then((doc) => { + console.log(doc, 'weather'); + const w = doc?.text || '未知'; + const temp = doc?.temp || 0; + setWeather(w); + setTemp(temp); + }); + }; + + useEffect(() => { + queryWeather(); + const timeUpdate = setInterval(() => { + queryWeather(); + }, WEATHERMARGIN); + return () => { + clearInterval(timeUpdate); + }; + }, []); + + const iconSrc = useMemo(() => { + const icon = ICONSMAP[weather]; + if (icon) return icon; + const rgx = new RegExp(weather); + for (const k in ICONSMAP) { + if (rgx.test(k)) { + return ICONSMAP[k]; + } + } + return ''; + }, [weather]); return
{moment().format('YYYY-MM-DD')}
-
{moment().format('HH:mm:ss')}
+
{time}
-
+ icon
-
晴转多云
-
18~26℃
+
{weather}
+
{temp}℃
} diff --git a/super-screen/client/src/sections/water-prevention/constants/water.js b/super-screen/client/src/sections/water-prevention/constants/water.js new file mode 100644 index 0000000..aab77db --- /dev/null +++ b/super-screen/client/src/sections/water-prevention/constants/water.js @@ -0,0 +1,22 @@ +export const SHUI_ZHAN = [ + { name: '莲塘渡槽', location: [115.95219, 28.5429711], }, + { name: '雄溪站', location: [115.908888, 28.5337351], structId: 2945 }, + { name: '塔田站', location: [115.916979, 28.5319411], }, + { name: '万寿湖站', location: [115.929167, 28.5222881], }, + { name: '张坊站', location: [115.9092, 28.5049421], }, + { name: '东山站', location: [115.887528, 28.4872531], }, + { name: '河外泵站', location: [115.889888, 28.4856311], }, + { name: '三山站', location: [115.888521, 28.4726391], }, + { name: '内湖电排站', location: [115.891311, 28.4692441], }, + { name: '沥山站', location: [115.897692, 28.5616881], }, + { name: '象湖站', location: [115.894774, 28.5789311], }, + { name: '姚塘站', location: [115.863709, 28.579954], }, + { name: '河下站', location: [115.844769, 28.5602231], }, + { name: '霞山站', location: [115.841465, 28.5508371], }, + { name: '石岐站', location: [115.838675, 28.5507611], }, + { name: '清湖站', location: [115.838418, 28.5378311], }, + { name: '虎山站', location: [115.843673, 28.5366861], }, + { name: '新八月湖站', location: [115.880322, 28.6076911], }, + // { name: '八月湖站', location: [115.868392, 28.6091981], }, + { name: '河口电排站', location: [115.924659, 28.52865] }, +] \ No newline at end of file diff --git a/super-screen/client/src/sections/water-prevention/containers/gis.js b/super-screen/client/src/sections/water-prevention/containers/gis.js index e5d0985..037d266 100644 --- a/super-screen/client/src/sections/water-prevention/containers/gis.js +++ b/super-screen/client/src/sections/water-prevention/containers/gis.js @@ -2,6 +2,7 @@ import React, { useEffect, useState } from 'react'; import { connect } from 'react-redux'; import { render } from 'react-dom'; import { data as heatmapData } from './data' +import { SHUI_ZHAN } from '../constants/water'; import './gis.less' const MAPDOMID = 'fs-amap-container1'; let map = null; @@ -15,8 +16,10 @@ const MARKER_IMG_NAME = { markeryellow: '廉租房', } function Map(props) { + const { trendData, waterLevelAlarms } = props; const [delay, setDelay] = useState(true) const [tab, setTab] = useState('overview') + // 地图初始化 const loadMap = () => { // 图片图层 实现瓦片地图中国地图样式 bounds 第一个点为左下角 第二个点为右上角 @@ -74,8 +77,6 @@ function Map(props) { renderLayer() createText() }, 1000); - - }; const createText = () => { @@ -145,7 +146,7 @@ function Map(props) { // 初始化GIS 组件销毁清空定时器 useEffect(() => { loadMap(); - }, []); + }, [trendData, waterLevelAlarms]); const renderMarkers = () => { map.clearMap(); @@ -156,18 +157,18 @@ function Map(props) { if (loca && heatmap) loca.remove(heatmap) //初始层级 zoom14以下显示聚合点 - const data = [ - { lng: 116.117906, lat: 28.678096, type: 'home', name: '泵站1', kind: 'markergreen' }, - { lng: 116.195238, lat: 28.842114, type: 'home', name: '泵站2', kind: 'markerblue' }, - { lng: 116.037227, lat: 28.558811, type: 'home', name: '泵站3', kind: 'markeryellow' }, - { lng: 115.925856, lat: 28.558811, type: 'home', name: '泵站4', kind: 'markergreen' }, - { lng: 115.989847, lat: 28.484411, type: 'home', name: '泵站5', kind: 'markergreen' }, - ] + // const data = [ + // { lng: 116.117906, lat: 28.678096, type: 'home', name: '泵站1', kind: 'markergreen' }, + // { lng: 116.195238, lat: 28.842114, type: 'home', name: '泵站2', kind: 'markerblue' }, + // { lng: 116.037227, lat: 28.558811, type: 'home', name: '泵站3', kind: 'markeryellow' }, + // { lng: 115.925856, lat: 28.558811, type: 'home', name: '泵站4', kind: 'markergreen' }, + // { lng: 115.989847, lat: 28.484411, type: 'home', name: '泵站5', kind: 'markergreen' }, + // ] //初始点位显示 - data.map((x, index) => { + SHUI_ZHAN.map((x, index) => { var marker = new AMap.Marker({ - position: new AMap.LngLat(x.lng, x.lat), + position: new AMap.LngLat(x.location[0], x.location[1]), // 将一张图片的地址设置为 icon icon: '/assets/images/homepage/water/_monitor.png', // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 @@ -250,14 +251,25 @@ function Map(props) { } const renderAlarms = () => { - if (tab == 'person') { + if (tab == 'person' || !waterLevelAlarms.length || !trendData.length) { return; } - - const alarms = [ - { lng: 116.044599, lat: 28.663869, type: 'device', name: 'xxx水位1', kind: 'markeralarm' }, - ] - + const alarms = waterLevelAlarms.map(a => { + let alarm = { + lng: a.lng, + lat: a.lat, + // type: 'device', + name: a.alarms[0]?.source.name, + kind: 'markeralarm' + }; + for (const t of trendData) { + if (t?.id == a.alarms[0]?.source.id) { + alarm.waterLevel = t.waterLevel; + alarm.alert = t.alert; + } + } + return alarm; + }) alarms.map((x, index) => { var marker = new AMap.Marker({ position: new AMap.LngLat(x.lng, x.lat), @@ -266,13 +278,14 @@ function Map(props) { // 设置了 icon 以后,设置 icon 的偏移量,以 icon 的 [center bottom] 为原点 offset: new AMap.Pixel(-13, -30), zooms: [3, 14], + zIndex: 13, }); marker.setTitle(x.name); map.add(marker); let infowindow = new AMap.InfoWindow({ isCustom: true, //使用自定义窗体 - content: `
+ content: `
`, offset: new AMap.Pixel(233, 260) }); @@ -301,11 +314,11 @@ function Map(props) {
实时水位 - 7.86m + {x.waterLevel}m
预警水位 - 7.86m + {x.alert}m
近1h雨量 @@ -405,12 +418,13 @@ function Map(props) { const renderLayer = () => { if (!loca) return; - const dataSource = [ - { lng: 116.194039, lat: 28.712472, data: 14 }, - { lng: 116.051963, lat: 28.546815, data: 25 }, - { lng: 116.064207, lat: 28.694385, data: 35 }, - { lng: 115.983192, lat: 28.345722, data: 20 } - ] + // const dataSource = [ + // { lng: 116.194039, lat: 28.712472, data: 14 }, + // { lng: 116.051963, lat: 28.546815, data: 25 }, + // { lng: 116.064207, lat: 28.694385, data: 35 }, + // { lng: 115.983192, lat: 28.345722, data: 20 } + // ] + const dataSource = trendData; if (gridLayer && loca) loca.remove(gridLayer) @@ -462,25 +476,25 @@ function Map(props) { // } height: function (index, feature) { const baseHeigh = 1200 - return feature.coordinates[0].properties.x.data > 30 ? baseHeigh * 6 : - feature.coordinates[0].properties.x.data > 25 ? baseHeigh * 5 : - feature.coordinates[0].properties.x.data > 20 ? baseHeigh * 4 : - feature.coordinates[0].properties.x.data > 15 ? baseHeigh * 3 : - feature.coordinates[0].properties.x.data > 10 ? baseHeigh * 2 : - feature.coordinates[0].properties.x.data > 0 ? baseHeigh * 1 : 0 + return feature.coordinates[0].properties.x.waterLevel > 30 ? baseHeigh * 6 : + feature.coordinates[0].properties.x.waterLevel > 25 ? baseHeigh * 5 : + feature.coordinates[0].properties.x.waterLevel > 20 ? baseHeigh * 4 : + feature.coordinates[0].properties.x.waterLevel > 15 ? baseHeigh * 3 : + feature.coordinates[0].properties.x.waterLevel > 10 ? baseHeigh * 2 : + feature.coordinates[0].properties.x.waterLevel > 0 ? baseHeigh * 1 : 0 }, topColor: function (index, feature) { - return feature.coordinates[0].properties.x.data > 30 ? 'rgba(255,136,140,1)' : 'rgba(117,154,206,1)' + return feature.coordinates[0].properties.x.waterLevel > 30 ? 'rgba(255,136,140,1)' : 'rgba(117,154,206,1)' }, sideColor: function (index, feature) { - return feature.coordinates[0].properties.x.data > 30 ? 'rgba(255,136,140,1)' : 'rgba(117,154,206,1)' + return feature.coordinates[0].properties.x.waterLevel > 30 ? 'rgba(255,136,140,1)' : 'rgba(117,154,206,1)' }, sideTopColor: function (index, feature) { - return feature.coordinates[0].properties.x.data > 30 ? 'rgba(255,136,140,1)' : 'rgba(117,154,206,1)' + return feature.coordinates[0].properties.x.waterLevel > 30 ? 'rgba(255,136,140,1)' : 'rgba(117,154,206,1)' }, sideBottomColor: function (index, feature) { - return feature.coordinates[0].properties.x.data > 30 ? 'rgba(255,136,140,0.5)' : 'rgba(117,154,206,0.5)' + return feature.coordinates[0].properties.x.waterLevel > 30 ? 'rgba(255,136,140,0.5)' : 'rgba(117,154,206,0.5)' }, }); gridLayer = gridLayer @@ -495,7 +509,7 @@ function Map(props) { cursor: 'pointer', angle: 0, // visible: false, - offset: [0, -s.data], + offset: [0, -s.waterLevel], style: { 'padding': '5px 10px', 'margin-bottom': '1rem', @@ -511,7 +525,7 @@ function Map(props) { }); text.setMap(map); text.show(); - text.setText(s.data + 'm') + text.setText(`${s.waterLevel || '--'}m`) text.setPosition(new AMap.LngLat(s.lng, s.lat)); }) @@ -523,7 +537,7 @@ function Map(props) { // if (feat) { // text.show(); - // text.setText(feat.coordinates[0].properties.x.data + 'm'); + // text.setText(feat.coordinates[0].properties.x.waterLevel + 'm'); // text.setPosition(e.lnglat); // } else { diff --git a/super-screen/client/src/sections/water-prevention/containers/gis.less b/super-screen/client/src/sections/water-prevention/containers/gis.less index cf4e6af..84cedc0 100644 --- a/super-screen/client/src/sections/water-prevention/containers/gis.less +++ b/super-screen/client/src/sections/water-prevention/containers/gis.less @@ -199,15 +199,17 @@ .gis-infowindow-alarm { background: url('/assets/images/homepage/communtity/alarminfowindow.png') no-repeat; - background-size: 100% 100% !important; - height: 380px !important; + background-size: 100% 100%; + height: 380px; width: 311px; - padding-top: 137px !important; + padding-top: 137px; + padding-left: 22px; + color: #fff; .gis_exit { cursor: pointer; position: absolute; - right: 2px; + right: 8px; top: 15px; width: 30.75px; height: 23px; @@ -219,8 +221,32 @@ margin-bottom: 10px; height: 35px; background-image: linear-gradient(180deg, #a7050591 0%, #48010191 100%); - ; + width: 93%; + display: flex; + align-items: center; + padding-left: 10px; + + .gis_title { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #C3E6FF; + letter-spacing: 0; + margin-right: 12px; + } + .gis_text { + font-family: SourceHanSansCN-Regular; + font-weight: 400; + font-size: 14px; + color: #FFFFFF; + letter-spacing: 0; + line-height: 21px; + max-width: 183px; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } } .confirm_text { @@ -262,8 +288,8 @@ line-height: 30px; width: 81px; height: 30px; - background-image: linear-gradient(180deg, #C50000 1%, #b600006e 52%, #C50000 100%); - box-shadow: inset 0 1px 14px 0 #ff2b2b59; + background-image: linear-gradient(180deg, #C50000 1%, #b600006e 52%, #C50000 100%) !important; + box-shadow: inset 0 1px 14px 0 #ff2b2b59 !important; border-radius: 4px; font-family: SourceHanSansCN-Medium; font-weight: 500; diff --git a/super-screen/client/src/sections/water-prevention/containers/homePage.js b/super-screen/client/src/sections/water-prevention/containers/homePage.js index 4bee23a..0c744a9 100644 --- a/super-screen/client/src/sections/water-prevention/containers/homePage.js +++ b/super-screen/client/src/sections/water-prevention/containers/homePage.js @@ -16,18 +16,155 @@ import moment from 'moment'; import './style.less' function homePage(props) { - const { dispatch } = props; + const { dispatch, actions } = props; + const { + getPcode, waterLogin, getWaterLevelTrend, getWaterStructures, getWaterVideoList, getYsAccessToken, getWaterAlarms, + worksafetyLogin, getEmerOrgList, getEmerTeamList, getEmerExpertList, getEmerMedicalList, getEmerRefugeList + } = actions.waterprevention; const childStyle = { height: '49%', color: '#fff', marginBottom: 17 } const cardHeight = document.body.clientHeight * 0.896 * 0.32 const cardContentHeight = cardHeight - 42 - 13 const [tab, setTab] = useState('overview');// overview emergency const [emengencyTab, setEmengencyTab] = useState('yjjg'); + const [trendData, setTrendData] = useState([]); + const [videoList, setVideoList] = useState([]); + const [accessToken, setAccessToken] = useState(''); + const [structures, setStructures] = useState([]); + const [waterLevelAlarms, setWaterLevelAlarms] = useState([]); + const [emerResource, setEmerResource] = useState([]); const SCREEN_COMPONENTS = { overview: { leftTop: LeftTop, leftBottom: LeftBottom, rightTop: RightTop, rightBottom: RightBottom }, emergency: { leftTop: EmergencyLeftTop, leftBottom: EmergencyLeftBottom, rightTop: EmergencyRightTop, rightBottom: EmergencyRightBottom } } const currentContainer = SCREEN_COMPONENTS[tab]; + + useEffect(() => { + getData(); + }, []) + + const getData = () => { + // 水务 + dispatch(getPcode()).then(res => { + if (res.success) { + dispatch(waterLogin({ username: "123456", password: "123456", pcode: res.payload.data.pcode })).then(loginRes => { + if (loginRes.success) { + const { token } = loginRes.payload.data; + sessionStorage.setItem('waterUser', JSON.stringify(loginRes.payload.data)); + // 水位趋势 + dispatch(getWaterLevelTrend({ orgId: 84, keyword: '', token })).then(trendRes => { + let fifterData = [] + if (trendRes.success) { + trendRes.payload.data.map((item, index) => { + let alert = item.alert ? item.alert.replace('(', '').replace(')', '').split(',')[0] : '--' + let historyMax = item.historyMax ? item.historyMax.replace('(', '').replace(')', '').split(',')[0] : '--' + let waterLevel = item.data.length != 0 ? item.data[item.data.length - 1].waterLevel : '' + let lastWaterLevel = item.data.length != 0 ? item.data[item.data.length - 2].waterLevel : '' + let currentTime = item.data.length != 0 ? moment(item.data[item.data.length - 1].time).format('YYYY-MM-DD HH:mm:ss') : '' + let currentState = item.data.length != 0 ? (item.alert && alert <= waterLevel ? '超警戒' : '正常') : '' + let futureState = '' + if (item.alert && item.futureData && item.futureData.length != 0) { + item.futureData.map((futureItem) => { + if (futureItem.value >= alert) { + futureState = `超警戒,预计${item.forecast_time}时水位抵达${(item.value).toFixed(2)}m` + } + }) + futureState = futureState != '' ? futureState : '正常' + } + fifterData.push({ + index: index + 1, + name: item.name, + currentState, + waterLevel, + lastWaterLevel, + currentTime, + alert, + historyMax, + futureState, + lat: item.latitude, + lng: item.longitude, + id: item.id + }) + }) + } + setTrendData(fifterData) + }) + // 结构物 + dispatch(getWaterStructures({ token })).then(structRes => { + if (structRes.success) { + setStructures(structRes.payload.data); + // 视频 + let promiseArr = [ + dispatch(getWaterVideoList(structRes.payload.data?.map(s => s.id).join(), { token })), + dispatch(getYsAccessToken({ token })) + ]; + Promise.all(promiseArr).then(resArr => { + if (resArr[0].success && resArr[1].success) { + const at = resArr[1].payload.data.accessToken; + const list = resArr[0].payload.data?.map(v => ({ url: v.yingshi.hlsAddress, name: v.name, structId: v.structId })); + setAccessToken(at) + setVideoList(list); + } + }) + // 告警 + dispatch(getWaterAlarms({ token })).then(alarmRes => { + if (alarmRes.success) { + let levelAlarms = []; + alarmRes.payload.data.alarms.forEach(a => { + let alarm = { ...a } + for (const struct of structRes.payload.data) { + if (struct.id === a.structureId && struct.type.name === '河流') { + alarm.lng = struct.longitude; + alarm.lat = struct.latitude; + levelAlarms.push(alarm); + } + }; + }) + setWaterLevelAlarms(levelAlarms); + } + }) + } + }) + } + }) + } + }) + // 安监 + dispatch(worksafetyLogin({ p: 'anjianshidian', username: 'SuperAdmin', password: '123456' })).then(res => { + if (res.success) { + sessionStorage.setItem('worksafetyUser', JSON.stringify(res.payload.data)); + getEmerResource(emengencyTab, res.payload.data.token) + } + }) + } + + const getEmerResource = (type, token) => { + if (type && token) { + const handleRequestComplete = (res) => { + if (res.success) setEmerResource(res.payload.data); + } + switch (type) { + case 'yjjg': + dispatch(getEmerOrgList({ token })).then(handleRequestComplete); + break; + case 'yjdw': + dispatch(getEmerTeamList({ token })).then(handleRequestComplete); + break; + case 'yjzj': + dispatch(getEmerExpertList({ token })).then(handleRequestComplete); + break; + case 'yljg': + dispatch(getEmerMedicalList({ token })).then(handleRequestComplete); + break; + case 'bncs': + dispatch(getEmerRefugeList({ token })).then(handleRequestComplete); + break; + default: + break; + } + } + } + return <>
@@ -43,7 +180,7 @@ function homePage(props) {
- +
@@ -54,16 +191,20 @@ function homePage(props) { }} changeEmengencyTab={(e) => { setEmengencyTab(e) + const { token } = JSON.parse(sessionStorage.getItem('worksafetyUser')); + getEmerResource(e, token) }} + trendData={trendData} + waterLevelAlarms={waterLevelAlarms} />
- +
- +
@@ -78,7 +219,6 @@ function mapStateToProps(state) { return { clientHeight: global.clientHeight, actions: global.actions, - }; } diff --git a/super-screen/client/src/utils/webapi.js b/super-screen/client/src/utils/webapi.js index 0245b23..8373f08 100644 --- a/super-screen/client/src/utils/webapi.js +++ b/super-screen/client/src/utils/webapi.js @@ -116,6 +116,21 @@ export const ApiTable = { delServiceManagement: 'service-management/{id}', lookField: 'lookField', + //大屏-水务 + getPcode: '_water/get/pcode', + waterLogin: '_water/_api/login', + getWaterLevelTrend: '_water/_api/overview/monitoring-station', + getWaterStructures: '_water/_api/organizations/84/structures', + getWaterVideoList: '_water/_api/structures/{struIds}/ipcs?stationIds=undefined', + getYsAccessToken: '_water/_api/yingshi/accessToken', + getWaterAlarms: '_water/_api/axy/alarm?userId=1134&orderBy=endTime&orderDirection=desc&limit=10&offset=0', + //安监 + worksafetyLogin: '_worksafety/_api/project/login', + getEmerOrgList: '_worksafety/_api/emergency/resource-org-list', // 应急机构 + getEmerTeamList: '_worksafety/_api/emergency/resource-team-list', // 应急队伍 + getEmerExpertList: '_worksafety/_api/emergency/resource-expert-list', // 应急专家 + getEmerMedicalList: '_worksafety/_api/emergency/resource-medical-list', // 医疗机构 + getEmerRefugeList: '_worksafety/_api/emergency/resource-refuge-list', // 避难场所 }; export const RouteTable = { diff --git a/super-screen/config.js b/super-screen/config.js index 685e278..b953cc9 100644 --- a/super-screen/config.js +++ b/super-screen/config.js @@ -26,6 +26,7 @@ const ANXINCLOUD_QINIU_ACCESSKEY = process.env.ANXINCLOUD_QINIU_ACCESSKEY || fla const ANXINCLOUD_QINIU_SECRETKEY = process.env.ANXINCLOUD_QINIU_SECRETKEY || flags.qnsk; const ANXINCLOUD_QINIU_BUCKET_RESOURCE = process.env.ANXINCLOUD_QINIU_BUCKET_RESOURCE || flags.qnbkt; const ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE = process.env.ANXINCLOUD_QINIU_DOMAIN_QNDMN_RESOURCE || flags.qndmn; +const weatherUrl = process.env.ANXINCLOUD_WEATHERAPP_API || "https://weatherssj.anxinyun.cn/weatherApp/weather/getImmeData" //阿里OSS const ALI_OSS_ACCESSKEY = process.env.ALI_OSS_ACCESSKEY || flags.aliOssAccessKey; @@ -84,7 +85,8 @@ const product = { secretKey: ALI_OSS_SECRETKET, bucket: ALI_OSS_BUCKET, region: ALI_OSS_REGION - } + }, + weatherUrl, } }, { diff --git a/super-screen/package.json b/super-screen/package.json index b2a7a71..a62f703 100644 --- a/super-screen/package.json +++ b/super-screen/package.json @@ -69,7 +69,7 @@ "@fs/attachment": "^1.0.0", "@jiaminghi/data-view-react": "^1.2.5", "@peace/components": "0.0.35", - "@peace/utils": "0.0.37", + "@peace/utils": "0.0.66", "ahooks": "^3.7.4", "ali-oss": "^6.17.1", "antd": "^4.24.5", diff --git a/super-screen/routes/weather/index.js b/super-screen/routes/weather/index.js new file mode 100644 index 0000000..cd175bb --- /dev/null +++ b/super-screen/routes/weather/index.js @@ -0,0 +1,55 @@ +const request = require('superagent'); + +let _weatherUrl = ''; +module.exports.entry = function (app, router, opts) { + const { weatherUrl } = opts; + console.log(weatherUrl, '天气'); + _weatherUrl = weatherUrl; + // _weatherUrl = "https://weatherssj.anxinyun.cn/weatherApp/weather/getImmeData" + + router.get('/query/weather', weather); +}; + +async function weather(ctx) { + try { + const { cname } = ctx.query; + const reg = /.+?(省|市|自治区|自治州|县|区)/g; + const arr = cname.match(reg); + if (Array.isArray(arr)) { + let cityName = arr[0]; + if (arr[1]) { + cityName = arr[1]; + } + const weatherRes = await request.post(_weatherUrl).send({ cityName }); + const { body } = weatherRes; + if (body && body.data) { + ctx.status = 200; + ctx.body = { ...body.data, cname, texta: _weatherUrl }; + } else { + ctx.status = 400; + ctx.body = { msg: '获取天气错误' }; + } + } else { + ctx.status = 400; + ctx.body = { msg: '地址解析错误' }; + } + } catch (error) { + console.log('[*err]', error); + ctx.status = 400; + ctx.body = error; + } +} + +// ip地址识别库 +// 淘宝IP地址查询接口:http://ip.taobao.com/service/getIpInfo.php?ip=1.1.35.57 +// 腾讯IP地址查询接口:http://fw.qq.com/ipaddress +// 新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js +// 新浪多地域测试方法:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=218.192.3.42 +// 搜狐IP地址查询接口(默认GBK):http://pv.sohu.com/cityjson +// 搜狐IP地址查询接口(可设置编码):http://pv.sohu.com/cityjson?ie=utf-8 +// 搜狐另外的IP地址查询接口:http://txt.go.sohu.com/ip/soip +// 谷歌IP地址查询接口:http://j.maxmind.com/app/geoip.js +// 1616 IP地址查询接口:http://w.1616.net/chaxun/iptolocal.php +// 126 http://ip.ws.126.net/ipquery hao123 +// http://app.hao123.com/ipquery/getcity.php?rtype=2 +// 太平洋电脑网 http://whois.pconline.com.cn/ \ No newline at end of file