From 367d86e0bde2325e504bc1511b5b08520fc086fd Mon Sep 17 00:00:00 2001 From: deartibers <947466799@qq.com> Date: Mon, 10 Oct 2022 13:58:48 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A7=E5=88=B6=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/client/assets/images/console/hong_1.png | Bin 0 -> 21715 bytes web/client/assets/images/console/huang_1.png | Bin 0 -> 27977 bytes web/client/assets/images/console/icon_all.png | Bin 0 -> 1414 bytes .../assets/images/console/icon_offline.png | Bin 0 -> 1615 bytes .../assets/images/console/icon_online.png | Bin 0 -> 1625 bytes web/client/assets/images/console/icon_up.png | Bin 0 -> 619 bytes .../assets/images/console/icon_webpage.png | Bin 0 -> 2026 bytes web/client/assets/images/console/lan_1.png | Bin 0 -> 24448 bytes web/client/assets/images/console/lv_1.png | Bin 0 -> 25930 bytes web/client/assets/images/console/member.png | Bin 0 -> 1377 bytes web/client/assets/images/console/onGoing.png | Bin 0 -> 2687 bytes web/client/assets/images/console/suo.png | Bin 0 -> 694 bytes web/client/assets/images/console/yonghu.png | Bin 0 -> 924 bytes .../src/layout/components/header/index.jsx | 263 +++++---- .../src/layout/containers/layout/index.jsx | 31 +- .../sections/console/containers/console.jsx | 489 ++++++++++++++++- .../src/sections/console/containers/index.js | 3 +- .../console/containers/userCenter.jsx | 82 +++ web/client/src/sections/console/routes.js | 10 +- web/client/src/sections/console/style.less | 21 +- .../src/sections/service/actions/emPush.jsx | 14 + .../src/sections/service/actions/index.js | 5 + .../sections/service/components/pushModal.jsx | 171 ++++++ .../sections/service/containers/emPush.jsx | 506 +++++++++++++++++- web/client/src/sections/service/style.less | 10 +- web/client/src/utils/webapi.js | 2 + 26 files changed, 1448 insertions(+), 159 deletions(-) create mode 100644 web/client/assets/images/console/hong_1.png create mode 100644 web/client/assets/images/console/huang_1.png create mode 100644 web/client/assets/images/console/icon_all.png create mode 100644 web/client/assets/images/console/icon_offline.png create mode 100644 web/client/assets/images/console/icon_online.png create mode 100644 web/client/assets/images/console/icon_up.png create mode 100644 web/client/assets/images/console/icon_webpage.png create mode 100644 web/client/assets/images/console/lan_1.png create mode 100644 web/client/assets/images/console/lv_1.png create mode 100644 web/client/assets/images/console/member.png create mode 100644 web/client/assets/images/console/onGoing.png create mode 100644 web/client/assets/images/console/suo.png create mode 100644 web/client/assets/images/console/yonghu.png create mode 100644 web/client/src/sections/console/containers/userCenter.jsx create mode 100644 web/client/src/sections/service/actions/emPush.jsx create mode 100644 web/client/src/sections/service/components/pushModal.jsx diff --git a/web/client/assets/images/console/hong_1.png b/web/client/assets/images/console/hong_1.png new file mode 100644 index 0000000000000000000000000000000000000000..29e87035cb15edbe316fb0d3a0e688a0eedd5bf3 GIT binary patch literal 21715 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/huang_1.png b/web/client/assets/images/console/huang_1.png new file mode 100644 index 0000000000000000000000000000000000000000..da0b063dc5dc99f1cb8ec7f15749aceac19a1f6a GIT binary patch literal 27977 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­!y3MWk#I4M^Vr==>tUcW_ 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 DRo-?w literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/icon_all.png b/web/client/assets/images/console/icon_all.png new file mode 100644 index 0000000000000000000000000000000000000000..22fe3fd3bc7ccfbe88ad28549dcb3a9c6ea96560 GIT binary patch literal 1414 zcmV;11$p|3P)Px)KuJVFRA@u(np@3vA0|<}C0?Q=B9droNVGmQ`ofEXDWXBD0n!$g)~*O!ddY70(%E)rXO5Yc zEp7KUJ3E7vIInZgch2uS^PTfQ-!}yJ$V2WC4p;)Rr<<~8Mj+Ufm_11uo8~MVQIkp5 zHM64u(${;5VzvWK1)-FZ%6H&G5-!M6X4{-VVMA=-5($VklAiYY+7u1aEK)wm$Gph|!{r++(|a4Q%H;`Hcu*t>BmGl-41;KKaDF)K zk!CqZF%wAj6-wmzmNnjp(fBDCPW<=J*rGtGgcv+ z4Thr%?{G%0A0lzRAK8px_QqLoHZ=|Uzrb^Xr`$wc@d z6xs}s35Mf)OMFeAJ2`t^L8+;Mn=iX3a)MMGnXb0_vkLkzKBmgEZ-LUKvW74hOX?c; zxb5Y+^%n;^`HFKiH;6c0lg+cC8-KJaGtnnNsizR{FKg?Bs%!_qZd+f9r?#%bU*mCn zaOxk#WfcJ92g{se?e3FhzNSmr#+ekI0Yf0+v1`?GB+v^Ap$LeDt{dx|`0Yp=Z0x*P z?m9b){l~7{HccRLo|Sm;{+79|ni2f%oYXrCrk9@2uLy|orY5`@F zrj`zFug1gcyf{4&!pWa*g#}?QfRMt82#FLg;|si4O%Ch?r&HW7fSw&;ptHmu# zmfm_URz|M6A^+tLC7IX-sy2X-VU~CFl-0LYtePpy;qVCd%C;XGgmwA>U2=2 zER2aF(eA|yPnHDTh&_g?yEH*J9`uV1Y1ziCDbvOeX-POZU8c7JWmP<+>}nM*Z@Dux z^a7d9G*;du_JzSIcMQBK2?wLFE+nM3=F(`cB9N}K!h@esZge#2O@O__Wd$WsUF{D4 z`W%t-IYAdl%E*c@^epzqeCch{g`{9n=}n4F9Ihz1bY0MjECw>W2&AW&lk4*`43aXc zm8Yiw!)3Yo@){!lS$TT7cUJrl1L^Uz!hhjd9zQGkr<#0wy_N5a4t6UiSBUL@0T>N^ UQMk#yLI3~&07*qoM6N<$f^a&ZQUCw| literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/icon_offline.png b/web/client/assets/images/console/icon_offline.png new file mode 100644 index 0000000000000000000000000000000000000000..addf36775ee9d1c1613cc9bbe07316f8f5e6783b GIT binary patch literal 1615 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 XAiB8j)&gHI00000NkvXXu0mjf56C7W literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/icon_up.png b/web/client/assets/images/console/icon_up.png new file mode 100644 index 0000000000000000000000000000000000000000..9400de574e3dafac842a67ea9230ab2ac181acb7 GIT binary patch literal 619 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 IM6N<$f)KFT?f?J) literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/lan_1.png b/web/client/assets/images/console/lan_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c6e7b3d2b7bac194a0e0f8a5f0a199ec9fe0585b GIT binary patch literal 24448 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 literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/lv_1.png b/web/client/assets/images/console/lv_1.png new file mode 100644 index 0000000000000000000000000000000000000000..d37eb5b12487c50e71548fa0d5543267acfe0ddf GIT binary patch literal 25930 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 LMY=@tZP5P!f>$A) literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/member.png b/web/client/assets/images/console/member.png new file mode 100644 index 0000000000000000000000000000000000000000..37a3347e66f12b97a936edfbf451f6f9b91c8402 GIT binary patch literal 1377 zcmV-n1)lneP)Px)8%ab#R9HvNmtAaBMHI)+nYr820@=Hz6-A_A4Bc9J zeiZ{n6t1=~y9sD06lLPGVESG#b!7gxpk@Zm1)=Vo&6$%@%6Z8s z|1oM-%MoYRv;ER%_JJ@hZ_lS#aH5{XJI56F7V1n=sP84a92QX`OepXs8L~3 z+UleE`iq#SWFiodN-J23`Mx#6xvW$1@!?vdW~fnNPTJ~yIVZsnrj+w>5TFL7A2Jpn z<+YsaQi^}63Md>;FCarZeJ3esVN!*@3I>$E+gSQMmu*S6d$G{BRROsPTm!A!3r2RC zr=0hL0J%y(0*h_=;c#YlEB?JIpzuaSsLyoyBTs_gOeyDyAVA@mev5#|{m~b7vY~q| zr>X+V7>8r&eFT~_By=*uviY#$zG|Q*zlyrkp6MV$)1VIhl!}LLta{2a4w0yN#**D| zK9lASn=oRrCKZ=22LpNuVf2~~5W<53oR$KMDsAotm1$;fB|<3c&Fl%5%}K@o1p>-A zxyr1BwXf&0#N12F>t~bL`ki83OnAP6({AkwV!QyLKHtn@MYob$OO?FrN$op^qxv%< z+*2sTM8A>bm@`K1>{`R8Gi!~TFkYWEcanty(adx0d54#97LC?_6#+FU++<+d2xu%W z#vrCs*)`AvB9zeOPREfgr=t90;0(EOy_gJrFyg{h&6pL~a<<&G)KgCGWjieErIlTk zo)61Ai6C?RL)<}vqC|8TEG;2IZHcV)Gt+ir`kFw`1DKMxW5bSI;6-`&aNm+8yL1DZ z`ua^ffb7@A(1dLl_3|TBeeN7r$-jIM%9FmD4` zQV`hDdLd^YQ`}WihQcwugMfPr1lpb!@&TpT2C0@(5U*L&3c`H_nj@OLXoeyQ%(YtY z$&Wex8e-?>PQ_<}!1zAd3GC5(3#U)8Gq*d=Kja~c?BGUqCXyC^NjT0e-BI3qJ}|!T z$Y8nEi#v-;0yQd3Ph0b+Ke|l3%S$+STnHFn!;R{1K)7wFFA)-QMwjBhGS4GQHvCjR zpF2>gAR6N7g~req`K*YQUP5ju3KWj%4+wa8h`v7}q+9LVy<9e@Dvas2#>*WU%pa!W z&eGx;it584G-nr?_IUBot>rcdvhK#xy8)Uv2$8?^k0@C%*j;T$$sIE1X6lAfi@BFcikAL<@h@8EGHghy-8u*0Q4>HM literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/onGoing.png b/web/client/assets/images/console/onGoing.png new file mode 100644 index 0000000000000000000000000000000000000000..c1248297ed1dc8df8b0d994510b167289fd5d5b6 GIT binary patch literal 2687 zcmV-_3V`*AP)Pxfm#a#!y=;A1#tmoQA>+}kOYGvxAV*4lKbAf@80|F zdoOt;@BYIi_iVpUe&=`2_x#R9k$MtBKqaKrRHLY@9OEYy6|4tZBqI-{m|0xJIHi=4 zjN^+mrb>@(l4GYxjTJ&7>bnAKkZTMz&aePTOT+-2+C2CSJh&8I*b=eSDImLaky=yTV{_}z z6|6LnIoy!NY&iy*ZVmc<|AQv*#nIr}5(*}-fO)Suwpy+Nj3_Bmi~RPTh4n6e@muJn7yFJZ}6DE=01Yy->gg#k~&<~?C>lSZXQ1y;;Rq)PkK z02tE~hRlYQXBVvIjbYnV*moFatcBLL zMi;`FipWqcKn?{0bSo}WyZu7)Q!i$)W~W|M+ROK7541jZG4rOj8o0n)wF?G5T~$M- z|Eh7&xi!4~IduQC4hv3?QXH*RX@zQ=A4q=c#0{);?xxcETqhn5?;nJQ_2FNCfV=|u z>Ns?10}V2uYddK7L)h{W9615KI#h)Pfhw_9rvLaCVM>1;7W&M9k}?Q)oRkf+K zxPuk*ys9*br812tyc8LVz@3)|gKyAY*(cwAq4I=P7cx|U2_;1;KZ-h07flFQ8HE>> zCTi>PfzV+Re0j`%?B?{p;m3NhGItAJEe$BBu*sIG05ggU8K0uwEw#HOBmmPeg-YtZ}y}c9M+7Z4ftvW-H@FKDL&3*8@+4g@1rFfxJD{>Q| z(h>?*%yCm`7iYniDX{l2^m`J@&ZY~kP|ba+8FMqzAa{NhtiKF`pSFOD8$#2DdV&1l zkX|HZ=U~cXJG_ZfX$c1_#<;1pwjx<4X$W$-QZG=o`iE}*1+I9ygoU_0itTCj=yhU& z3OTs+-$S*4mEl#Yw9i;zz)-v4Uei)<{6(_n%!9dkFnfc)h3b+<@ZS?vy+~WKEt|gD zVUdInGXivrmrAQPu$9ZP#dI@o!|m-Q)$%-)&%6F(oDGT?1$_pq10x7IPAbiW`^kUc_L*=j!WE5H z&0zflP+kGu9*09`BV^7^@V}F=`mJDJ_X?LdsI(dbD<(UsG=VFJ-jkMw=fb3JB&hOk z>1gQwGZ;K42DnhJ>XBDcsGj$;gw-fm8L(HCW;M}T2g=&v)ojg+w`|X;|BMxTVVNi9gp3fXjNL$fEB}> zRGJ)+Z+awrp>hKvaCbZkS6*Tt7ToGv-z&x1#_42x$)zO~STQ1!N)yHPXtut*VXppO zpiHXPLzy*idu=7WobsU3 zk`k<#;-=EvuvnpvU93w>Sdg>b`TvBSd#hR))vU4f4^qIgkhc70@D4@IN&8#z|&_XK=v^W|8N_ORkUU2fEKjyKA~ zx;d}GiZyPzG&`_zemm+{@Q?Rk`F(oJ6$)2ksyY1+9)&*F!mzpUH;-Gf^B$~#bIYYU z%?wGWuN)f;*9ui)s@!8RW3E@YwF0bwi$$eb;TF6OMI*ywsx{_%fm>_93fxMSmdkXb zg8QS5-zHqSH}=M-_N#w1aBCG<6Q-L=vx9C<|BMUtha`~}G`T0XeJbof0@pqi{I#UD z-C7A&40OBkXoX;nsnb^Li_CTln%pp#tNLZ-!MQcNKUA#+E5>@c@ff;L$>!f~L5l{e z^j)jLih)kKG&`uK_gUdeB2(_;dht}Veys<4PNkKz9)p&q;lF6Dzs_+|R3_ZabRAQz zsdcx-u}**$2%#!XuHQ>0;^AeHwZB{f*)U0~vS^^ziBMqmtY}r5eAhcaPu~=eCJj{Q zz{aZ5+@^n>*lsyNh()D&ghJvZgrG==pXgsw}N!n<^_|2u&`F*Sx(9x>2&^A+{z=3is zxwI5m7x(q6(o$eO#05VpEd|yCSU)N)1vUz>Qq*fMEd@48uu|NMN=t$D0amKGsk9VW zpJ1h$lS)g0jRCAwjil02U}FR;)$LST3Tzy}N)w?fEd@4CV5J$WN=t!_BUowb?EmpN ttz?lJFF&7m-yp=9N5Yy*flUzF{{yw3`Hj&>Bqjg=002ovPDHLkV1i_8A4&iK literal 0 HcmV?d00001 diff --git a/web/client/assets/images/console/suo.png b/web/client/assets/images/console/suo.png new file mode 100644 index 0000000000000000000000000000000000000000..92e3599b22ec3b93c3f8a4356668af5ae66ab17d GIT binary patch literal 694 zcmV;n0!jUeP)Px%a7jc#R7gwJ*4;}~K^VvJ@66dfn*s29{6U0o57)HwFtKvK@P3nUOWB+fiA^0-9p7cx|h#Is|DA~(x=cgC$ z4PP4Cz^}}S*@V@-M4P6IE*cryj+;GFX#H;Pd9~de4kucG8tm)?IuDm_WBXtOO6>zZ zKu>VARB8iw;0#(TqRt(!_Hp?|72i`4q!^>e87L2qB+dh)bUV*I;e0`;?<89OAr^d8 z9vtq!fVAGz)iP`b_a8@!G~KHT?s&45wAh5-hHS10X-!~>&qj$es;;o@{PF|Y3Khkz{B^=m61RXK6T` zxQNmd#De$BLg!vS8$X5=Tj+7FuVOfVQ2fa5LMn~LCvG{ZMY~h6#CbHCIt8L?c1pQ3 z_^rE(;uV8KeYFUyd0s;4Cg^G#E1J4uaDEEu+|l{4dPrC6*X4x^=W(J5!QT7@1nqlG zwB^CO*IgX{u z8xpRR2(<(BG|{$sSEnLl@$qI{-yx*l2$pHCMe6d~&6>ov2Dy1KS$as6NtwRxeakdm cX^C}z0ThlvE-l-CPx&R!KxbR7gwhmR)aDRTPGwz4x?}ejrJ?Qm9`6qZfW92*Cv7%yim1F&bkablSmS z4E&A$2kuBDnE624h|vT}r=2Nyfh1NF#7Hb41S%w0TO*XT%sG3RIR{dtGiQ#S3vN7@ zXRq}>d%gRtwU6R4J?b%W`5zqY{Ql|n-2LknT(t@4K;`E?$yGK~PH`}`{4e35lbdl{-Ucy5%nxK^)6Ij^lQD!BFzRnM>rsYd zPEFBt@ijzmM=OhV3XLoeu2@7dSpEo+C`O+m7yq?xCBws-nVoyR*ob^fHhCea>R|A$ zkv1Y-dp&`6XOvI-=L0PqoP5_ib1mn{C(o`O?47R}@&wuz3mks`b}+cqiO8r` znYDwfRu7dw@meTq#yJwZ8VoL{v34Es9Y=e9T06L!nJ%Uf-Hp=MDa23I729{Zo25$1 zTUXH$3Og5?1ecycr2oE1?MgoWdL2t0?;&(z^i6W{Z<=qXs=~lz5_sMpAodD4ztGY) zhgoiC$!x^xt$v^5K=fFnYCTgL?aW&ro{BIdy(<%{PF6(5$R@9a(F_Mp7q>uU2V&a- zMHP2&)mgqsTy6w!(8oWw61|ngwbk3GYLJW3v$*aJRP>JbN|rk@<|#i$jQ>t%dE&Ps zhYnQgZJ<85YVRdU;o2vCrn*4q`e_bry<1ak|8zUI=idPRqW>-MJNFV}jH;R!MtyL4 zq7PBeqQ#=zDRTXn8rkQqS1$}PF|5*Pb%lJQSSznKIQ>uyDO;w{dodLBK~VLZ5FPhz zcTezn-}OiHSA)H2Rr(Oi1{5-IE`B^1JTS2jR4dvXCm)+_3cP2$8)Z@`wM-##Bp942#j(=Gz4@=g{Imsb yY}bgPwd(`4nkSnm2ZNg`F?@2kSsh+4bmTuNvoh literal 0 HcmV?d00001 diff --git a/web/client/src/layout/components/header/index.jsx b/web/client/src/layout/components/header/index.jsx index ca80918..d338a87 100644 --- a/web/client/src/layout/components/header/index.jsx +++ b/web/client/src/layout/components/header/index.jsx @@ -6,133 +6,160 @@ import { IconTreeTriangleDown } from '@douyinfe/semi-icons'; import "./index.less"; const Header = (props) => { - const { dispatch, history, user, actions, socket, headerItems, tochange } = props; + const { dispatch, history, user, actions, socket, headerItems, tochange } = props; - return ( - <> -
-
+ } + > +
+
+ + {user?.name?.substr(0, 1)} + +
+ {user.name} +
v.name + '、')} style={{ width: 60, overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', color: '#969799', fontSize: 12 }}>{user?.department?.map(v => v.name + '、')}
+
+
+
+
{ + history.push(`/userCenter`); + }}> +
+ +
+
+ 用户中心 +
+
+
+
+ +
+
+ 安全认证 +
+
+
{ + dispatch(actions.auth.logout(user)); + if (socket) { + socket.disconnect(); + } + history.push(`/signin`); + }}> + 退出 + {/* */} +
- {/* collapseButton collapseText */} + {/* collapseButton collapseText */} - - - } - /> - - - ); + + + } + /> + + + ); }; function mapStateToProps (state) { - const { global, auth, webSocket } = state; - return { - actions: global.actions, - user: auth.user, - socket: webSocket.socket, - }; + const { global, auth, webSocket } = state; + return { + actions: global.actions, + user: auth.user, + socket: webSocket.socket, + }; } export default connect(mapStateToProps)(Header); diff --git a/web/client/src/layout/containers/layout/index.jsx b/web/client/src/layout/containers/layout/index.jsx index 495636a..28a7f90 100644 --- a/web/client/src/layout/containers/layout/index.jsx +++ b/web/client/src/layout/containers/layout/index.jsx @@ -9,6 +9,7 @@ import Footer from '../../components/footer'; import { resize } from '../../actions/global'; import * as NProgress from 'nprogress'; import PerfectScrollbar from 'perfect-scrollbar'; +import { useLocation } from "react-router"; NProgress.configure({ template: ` @@ -22,7 +23,7 @@ NProgress.configure({ }); let scrollbar - +// const location111 = useLocation(); const LayoutContainer = props => { const { dispatch, msg, user, copyright, children, sections, clientWidth, clientHeight, @@ -116,7 +117,7 @@ const LayoutContainer = props => { if (lastSelectedKeys) {//如果有缓存 for (let i = 0; i < nextItems.length; i++) { if (JSON.parse(lastSelectedKeys)[0] == nextItems[i].itemKey) { - + let openArr = [] for (let j = 0; j < nextItems[i].items.length; j++) { openArr.push(nextItems[i].items[j].itemKey) @@ -137,6 +138,30 @@ const LayoutContainer = props => { } }, []) + useEffect(() => { + let pathnameArr = location.pathname.split('/') + let openArr = [] + for (let i = 0; i < allItems.length; i++) { + if (allItems[i].items) { + for (let j = 0; j < allItems[i].items.length; j++) { + if (allItems[i].items[j].items) { + for (let k = 0; k < allItems[i].items[j].items.length; k++) { + if (allItems[i].items[j].items[k].to == location.pathname) { + for (let o = 0; o < allItems[i].items.length; o++) { + openArr.push(allItems[i].items[o].itemKey) + } + localStorage.setItem('poms_selected_sider', JSON.stringify([pathnameArr[1]])) + localStorage.setItem('poms_open_sider', JSON.stringify(openArr)) + setLeftItems(allItems[i].items) + setLeftShow(true) + } + } + } + } + } + } + }, [location]) + useEffect(() => { NProgress.done(); if ((!user || !user.authorized)) { @@ -173,7 +198,7 @@ const LayoutContainer = props => { // websocket 使用测试 useEffect(() => { - // console.log(socket) + // console.log(socket) if (socket) { socket.on('CAMERA_ONLINE', function (msg) { console.info(msg); diff --git a/web/client/src/sections/console/containers/console.jsx b/web/client/src/sections/console/containers/console.jsx index f3bb34d..c976973 100644 --- a/web/client/src/sections/console/containers/console.jsx +++ b/web/client/src/sections/console/containers/console.jsx @@ -1,16 +1,87 @@ -import React, { useEffect } from 'react'; +import React, { useEffect, useState } from 'react'; import { connect } from 'react-redux'; -import { Spin, Card } from '@douyinfe/semi-ui'; +import { Timeline, Card, Button } from '@douyinfe/semi-ui'; +import { push } from 'react-router-redux'; import '../style.less' +import PerfectScrollbar from "perfect-scrollbar"; const { Meta } = Card; +let newScrollbar; +let overviewScrollbar; +let memberScrollbar; +let equipmentScrollbar; +let webScrollbar; +let problemsScrollbar; + + const Console = (props) => { const { dispatch, actions, user, loading, socket } = props + const stationList = [ + 'url(/assets/images/console/lan_1.png)', + 'url(/assets/images/console/lv_1.png)', + 'url(/assets/images/console/huang_1.png)', + 'url(/assets/images/console/hong_1.png)' + ] + const [timelineList, setTimelineList] = useState(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''])//最新动态列表 + + const [memberList, setMemberList] = useState(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''])//相关成员列表 + + const [equipmentList, setEquipmentList] = useState(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''])//平台设备接入列表 + + const [webList, setWebList] = useState(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''])//关联web应用列表 + const [problemsList, setProblemsList] = useState(['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''])//异常&问题列表 useEffect(() => { // ACTION 示例 // dispatch(actions.example.getMembers(user.orgId)) }, []) + useEffect(() => { + newScrollbar = new PerfectScrollbar("#news", { + suppressScrollX: true, + }); + const domProject = document.getElementById("news"); + if (domProject && newScrollbar) { + newScrollbar.update(); + } + overviewScrollbar = new PerfectScrollbar("#overview", { + suppressScrollY: true, + }); + const domProject1 = document.getElementById("overview"); + if (domProject1 && overviewScrollbar) { + overviewScrollbar.update(); + } + memberScrollbar = new PerfectScrollbar("#member", { + suppressScrollX: true, + }); + const domProject2 = document.getElementById("member"); + if (domProject2 && memberScrollbar) { + memberScrollbar.update(); + } + equipmentScrollbar = new PerfectScrollbar("#equipment", { + suppressScrollX: true, + }); + const domProject3 = document.getElementById("equipment"); + if (domProject3 && equipmentScrollbar) { + equipmentScrollbar.update(); + } + webScrollbar = new PerfectScrollbar("#web", { + suppressScrollX: true, + }); + const domProject4 = document.getElementById("web"); + if (domProject4 && webScrollbar) { + webScrollbar.update(); + } + problemsScrollbar = new PerfectScrollbar("#problems", { + suppressScrollX: true, + }); + const domProject5 = document.getElementById("problems"); + if (domProject5 && problemsScrollbar) { + problemsScrollbar.update(); + } + + // ACTION 示例 + // dispatch(actions.example.getMembers(user.orgId)) + }) // websocket 使用测试 // useEffect(() => { @@ -28,8 +99,418 @@ const Console = (props) => { return ( <> -
- +
+ {/* 头部 */} +
+
+
+ HI,欢迎回来,行业服务部 +
+
+ 刘昊然! +
+
+
+ +
+
+ {/* 主体 */} +
+ {/* 左边 */} +
+ {/* 工作台和统计概览 */} +
+ {/* 我的工作台 */} +
+
+
+
我的工作台
+
MY WORK STATION
+
+
+ setSetup(true)} /> +
+
+
+
+
+
+ 剩余问题: +
+
+ 122 +
+
+
+
+ 今日新增问题: +
+
+
+ 12223 +
+
+ +
+
+
+
+
+ 今日处理: +
+
+ 3 +
+
+
+ {/* 循环类型 */} + { + stationList.map((item, index) => { + return ( +
+
+
+ 关注的项目 + (个) +
+
+
112
+
进行中
+
+
+
+ ) + }) + } +
+ {/* 统计概览 */} +
+
+
+
统计概览
+
STATISTICAL OVERVIEW
+
+
+ setSetup(true)} /> +
+
+
+
+ {/* 项目里程碑 */} +
+
+ 项目里程碑 +
+
+
+
+ 立项时间: +
+
+ 2022-5-12 +
+
+
+
+ 施工时间: +
+
+ 2022-5-12至2022-12-12 +
+
+
+
+
+
+ 内验时间: +
+
+ 2023-1-18 +
+
+
+
+ 外验时间: +
+
+ 2023-3-18 +
+
+
+
+
+ 工程维保时间: +
+
+ 2022-11-11 +
+
+
+
+
+ 售后维修时间: +
+
+ 2022-11-11至2023-12-14 +
+
+ 进行中 +
+
+ {/* 相关成员 */} +
+
+ 相关成员 +
+
+ {memberList.map((item, index) => { + return ( +
+
+
+ 成员 +
+
+ 刘昊然 +
+
+ (负责人) +
+
+
+ 行业服务部 +
+
+ ) + })} +
+
+ {/* 平台设备接入 */} +
+
+ 平台设备接入 +
+
+ { + equipmentList.map((item, index) => { + return ( +
+
+ 5阶ZK1高清摄球机 +
+
+ 视频 +
+
+ 网络 + {/* 网络 */} +
+
+ 在线 +
+ {/*
+ 掉线 +
*/} +
+ ) + }) + } +
+
+ {/* 关联web应用 */} +
+
+ 关联web应用 +
+
+ { + webList.map((item, index) => { + return ( +
+
+
+ web应用 +
+
+ superchangnan.anxiny +
+
+
+ 第三方 +
+
+ ) + }) + } +
+
+ {/* 异常&问题 */} +
+
+ 异常&问题 +
+
+ { + problemsList.map((item, index) => { + return ( +
+
+ 【告警源A】数据信息中断,诊断为 服务异常,请前往确认 +
+
+ 2022-05-21 15:23:41 +
+
+ ) + }) + } +
+
+
+
+
+
+ {/* BI分析模块 */} +
+
+
+
我的工作台
+
MY WORK STATION
+
+
+ setSetup(true)} /> +
+
+
+
+ {/* 右边 */} +
+ {/* 最新动态 */} +
+
+
+
+
最新动态
+
RECENT NEWS
+
+
+ setSetup(true)} /> +
+
+
+ + {timelineList.map((item, index) => { + return ( + + A项目DTU设备状态异常,诊断为离线 + + ) + })} + +
+
+ {/* 我常用的工具 */} +
+
+
+
+
我常用的工具
+
MY USUAL TOOLS
+
+
+
+ + + + +
+
+ +
+
+
+
) diff --git a/web/client/src/sections/console/containers/index.js b/web/client/src/sections/console/containers/index.js index c8d0fe8..d290d54 100644 --- a/web/client/src/sections/console/containers/index.js +++ b/web/client/src/sections/console/containers/index.js @@ -1,5 +1,6 @@ 'use strict'; import Console from './console'; +import UserCenter from './userCenter'; -export { Console }; \ No newline at end of file +export { Console, UserCenter }; \ No newline at end of file diff --git a/web/client/src/sections/console/containers/userCenter.jsx b/web/client/src/sections/console/containers/userCenter.jsx new file mode 100644 index 0000000..4eb4b8c --- /dev/null +++ b/web/client/src/sections/console/containers/userCenter.jsx @@ -0,0 +1,82 @@ +import React, { useEffect, useState } from 'react'; +import { connect } from 'react-redux'; +import { Avatar, Card, Button } from '@douyinfe/semi-ui'; +import { push } from 'react-router-redux'; +import '../style.less' +import PerfectScrollbar from "perfect-scrollbar"; +const { Meta } = Card; + +const UserCenter = (props) => { + const { dispatch, actions, user, loading, socket } = props + useEffect(() => { + console.log('user',user); + // ACTION 示例 + // dispatch(actions.example.getMembers(user.orgId)) + }, []) + useEffect(() => { + + // ACTION 示例 + // dispatch(actions.example.getMembers(user.orgId)) + }) + + // websocket 使用测试 + // useEffect(() => { + // console.log(socket) + // if (socket) { + // socket.on('TEST', function (msg) { + // console.info(msg); + // }); + // return () => { + // socket.off("TEST"); + // } + // } + + // }, [socket]) + + return ( + <> +
+ {/* 头部 */} +
+
+
+ HI,欢迎回来,行业服务部 +
+
+ 刘昊然! +
+
+
+ {/* 主体 */} +
+
+
+
+
用户中心
+
USER CENTER
+
+
+
+ + {user.name.split('')[0]} + +
+
+ {/* moment(row.createTime).format("YYYY-MM-DD HH:mm:ss") */} +
+ + ) +} + +function mapStateToProps (state) { + const { auth, global, members, webSocket } = state; + return { + // loading: members.isRequesting, + user: auth.user, + // actions: global.actions, + // members: members.data, + // socket: webSocket.socket + }; +} + +export default connect(mapStateToProps)(UserCenter); diff --git a/web/client/src/sections/console/routes.js b/web/client/src/sections/console/routes.js index 9900cb1..7a9c027 100644 --- a/web/client/src/sections/console/routes.js +++ b/web/client/src/sections/console/routes.js @@ -1,5 +1,5 @@ 'use strict'; -import { Console, } from './containers'; +import { Console,UserCenter } from './containers'; export default [{ type: 'inner', @@ -10,4 +10,12 @@ export default [{ component: Console, // 不设置 component 则面包屑禁止跳转 } +}, { + type: 'inner', + route: { + path: "/userCenter", + key: 'userCenter', + breadcrumb: '用户中心', + component: UserCenter + } }]; \ No newline at end of file diff --git a/web/client/src/sections/console/style.less b/web/client/src/sections/console/style.less index 75ecdb6..d57914b 100644 --- a/web/client/src/sections/console/style.less +++ b/web/client/src/sections/console/style.less @@ -1,7 +1,18 @@ -#example { - box-shadow: 3px 3px 2px black; +.even{ + .semi-timeline-item-head-default{ + background-color: #005ABD; + } } - -#example:hover { - color: yellowgreen; +.odd{ + .semi-timeline-item-head-default{ + background-color: #FFFFFF; + border: 1px solid #A4CFFF; + } +} +.semi-timeline-item-content-time{ + font-size: 14px; +} +.semi-timeline-item-content{ + font-size: 12px; + width: calc(59% - 14px) !important; } \ No newline at end of file diff --git a/web/client/src/sections/service/actions/emPush.jsx b/web/client/src/sections/service/actions/emPush.jsx new file mode 100644 index 0000000..d4dcd9e --- /dev/null +++ b/web/client/src/sections/service/actions/emPush.jsx @@ -0,0 +1,14 @@ +'use strict'; + +import { ApiTable, basicAction } from '$utils' + +export function getPush () { //获取推送配置列表 + return dispatch => basicAction({ + type: 'get', + dispatch: dispatch, + actionType: 'GET_PUSH', + url: `${ApiTable.getPush}`, + msg: { error: '获取推送配置列表失败' }, + reducer: { name: '' } + }); +} diff --git a/web/client/src/sections/service/actions/index.js b/web/client/src/sections/service/actions/index.js index eb109ab..1014015 100644 --- a/web/client/src/sections/service/actions/index.js +++ b/web/client/src/sections/service/actions/index.js @@ -1,2 +1,7 @@ 'use strict'; +import * as emPush from './emPush' + +export default { + ...emPush +} \ No newline at end of file diff --git a/web/client/src/sections/service/components/pushModal.jsx b/web/client/src/sections/service/components/pushModal.jsx new file mode 100644 index 0000000..b2c73cd --- /dev/null +++ b/web/client/src/sections/service/components/pushModal.jsx @@ -0,0 +1,171 @@ +import React, { useState, useRef, useEffect } from "react"; +import { connect } from "react-redux"; +import { Modal, Form } from "@douyinfe/semi-ui"; +import { IconAlertCircle } from '@douyinfe/semi-icons'; + + +function pushModal (props) { + const { + close, + cancel, + visible, + dispatch, + pepList, + actions, + adminEdit,//是否是编辑 + editObj, + } = props; + const { install } = actions; + const form = useRef();//表单 + const [disablePeople, setDisablePeople] = useState(true); //页码信息 + const [peopleList, setPeopleList] = useState([]); //人员List + const [departmentId, setDepartmentId] = useState(); //部门id + const [peopleId, setPeopleId] = useState(); //人员id + //初始化 + useEffect(() => { + if (editObj.id) { + let departmentList = [] + for (let i = 0; i < pepList.length; i++) { + if (pepList[i].id == editObj.departments[0].id) { + departmentList = pepList[i].users + } + } + setPeopleList(departmentList) + setDepartmentId(editObj.departments[0].id) + setPeopleId(editObj.pepUserId) + setDisablePeople(false) + } + }, []); + + function handleOk () { + //点击弹框确定 右边按钮 + form.current + .validate() + .then((values) => { + if (adminEdit) { + dispatch(install.deteleOrganizationAdmin({id:editObj.id,msg:''})).then( + dispatch(install.postOrganizationUser({ role: ['admin'], pepUserId: values.pepUserId, msg: '修改管理员' })).then((res) => {//获取项企(PEP)全部部门及其下用户 + if (res.success) { + close(); + } + }) + ) + } + else { + dispatch(install.postOrganizationUser({ role: ['admin'], pepUserId: values.pepUserId, msg: '新增管理员' })).then((res) => {//获取项企(PEP)全部部门及其下用户 + if (res.success) { + close(); + } + }) + } + }) + } + function handleCancel () { + cancel(); + //点击弹框取消 左边按钮 + } + return ( + <> + +
+
+
+
成员成为管理员后,拥有平台所有权限和项目,成员的普通角色会被禁用。
+
+
{ + for (var key in field) { + if (key == 'department') { + if (values.department >= 0) { + let departmentList = [] + for (let i = 0; i < pepList.length; i++) { + if (pepList[i].id == values.department) { + departmentList = pepList[i].users + } + } + setPeopleList(departmentList) + setDisablePeople(false) + form.current.setValue('pepUserId', undefined); + } + else { + setPeopleList([]) + setDisablePeople(true) + form.current.setValue('pepUserId', undefined); + } + } + } + }} + getFormApi={(formApi) => (form.current = formApi)} + > +
+ + { + pepList.map((item, index) => { + return ( + + {item.name} + + ) + }) + } + +
+
+ + { + peopleList.map((item, index) => { + return ( + + {item.name} + + ) + }) + } + +
+
+
+
+ + ); +} +function mapStateToProps (state) { + const { auth, global, members } = state; + return { + // loading: members.isRequesting, + user: auth.user, + actions: global.actions, + // members: members.data, + }; +} + +export default connect(mapStateToProps)(pushModal); diff --git a/web/client/src/sections/service/containers/emPush.jsx b/web/client/src/sections/service/containers/emPush.jsx index 8abf95c..d91c9b6 100644 --- a/web/client/src/sections/service/containers/emPush.jsx +++ b/web/client/src/sections/service/containers/emPush.jsx @@ -1,34 +1,498 @@ -import React, { useEffect } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import { connect } from 'react-redux'; +import { Skeleton, Button, Pagination, Form, Popconfirm, Table } from '@douyinfe/semi-ui'; +import { SkeletonScreen, } from "$components"; +import moment from "moment"; +import pushModal from '../components/pushModal' +import '../style.less' +import { Setup } from "$components"; +// import { set } from 'nprogress'; +const EmPush = (props) => { + const form = useRef();//表单 + const { dispatch, actions, user, loading, socket } = props + const { service } = actions; + const [setup, setSetup] = useState(false); //表格设置是否显现 + const [setupp, setSetupp] = useState([]);//实际显示的表格列表 + const [tableSetup, setTableSetup] = useState([]); //单一表格设置信息 + const [query, setQuery] = useState({ limit: 10, page: 0 }); //页码信息 + const [limits, setLimits] = useState()//每页实际条数 + const mylimits = useRef(); //每页实际条数 + const [selected, setSelected] = useState([]) //表格被勾选项 + const [pushModal, setPushModal] = useState(false) //信鸽弹框 + const [systemEdit, setSystemEdit] = useState(false) //是否是修改 + const [anxincloudList, setAnxincloudList] = useState([]) //安心云列表 + const [peplist, setPeplist] = useState([]) //PEP项目管理项目列表 + const [appList, setAppList] = useState([]) //应用列表 + const [pepProjectId, setPepProjectId] = useState() //修改时项企id + const [anxincloudArr, setAnxincloudArr] = useState([]) //修改时已经选择的安心云列表 + const [pepname, setPepname] = useState() //修改时自定义项目名称 + const [anxinDelete, setAnxinDelete] = useState([]) //修改时安心云项目有删除,显示提示信息 + const [appArr, setAppArr] = useState([]) //修改时添加应用 + const [bindId, setBindId] = useState() //修改时绑定的id + const [tableKey, setTableKey] = useState([]) //修改时绑定的id + const page = useRef(query.page);//哪一页 + const EMPUSH = "empush"; + const tableList = [//表格属性 + { + title: '推送信息', + list: [ + { name: "策略类型", value: "pushWay" }, + { name: "推送机制", value: "noticeWay" }, + { name: "监听设备数量", value: "monitorCount" }, + { name: "累计推送次数", value: "logCount" }, + ] + }, +]; -const Server = (props) => { - const { dispatch, actions, user, loading, socket } = props - useEffect(() => { + function handleRow (record, index) {//斑马条纹 + // 给偶数行设置斑马纹 + if (index % 2 === 0) { + return { + style: { + background: '#FAFCFF', + } + }; + } else { + return {}; + } + } - }, []) + const [tableData, setTableData] = useState([]) //表格数据 + useEffect(() => { + attribute(); + dispatch(service.getPush(query)).then((res) => {//获取推送配置列表 + console.log('res.payload.datares.payload.data',res.payload.data); + // setAnxincloudList(res.payload.data) + }) + // dispatch(install.getProjectPmanage(query)).then((res) => {//获取PEP项目管理项目 + // setPeplist(res.payload.data) + // }) + // dispatch(install.getProjectAppList(query)).then((res) => {//获取应用列表 + // setAppList(res.payload.data) + // }) + localStorage.getItem(EMPUSH) == null + ? localStorage.setItem( + EMPUSH, + JSON.stringify(['pushWay','noticeWay','logCount','monitorCount']) + ) + : ""; + }, []) + useEffect(() => { + // getProjectPomsList(); + }, [query]); - return ( - <> -
- -
- - ) + function getProjectPomsList () { + // dispatch(install.getProjectPoms(query)).then((res) => {//获取已绑定项目 + // if (res.success) { + // let mytableData = JSON.parse(JSON.stringify(res.payload.data.rows)); + // let mytableKey = [] + // for (let index = 0; index < mytableData.length; index++) { + // mytableData[index].key = mytableData[index].id + // mytableKey.push(mytableData[index].id) + // } + // setTableKey(mytableKey) + // setTableData(mytableData) + // setLimits(res.payload.data.count) + // mylimits.current = res.payload.data.rows.length + // } + // }) + } + const [columns, setColumns] = useState([//表格属性 + { + title: "策略编号", + dataIndex: "index", + key: 'index', + render: (text, r, index) => { + return index + 1; + }, + }, + { + title: '策略名称', + dataIndex: "pepProjectName", + key: 'pepProjectName', + render: (_, row) => { + return row.pepProjectName + } + }, + { + title: "操作", + width: "20%", + dataIndex: "text", + key: 'text', + render: (_, row) => { + return ( +
+ + + { + // dispatch(install.deleteProjectBind({ bindId: row?.id, msg: '删除安心云、项目管理项目绑定关系' })).then(() => { + // if (page.current > 0 && mylimits.current < 2) { + // setQuery({ limit: 10, page: page.current - 1 }) + // } else { + // setQuery({ limit: 10, page: page.current }) + // } + // }) + }} + > + + +
+ ); + }, + }, + ]) + const rowSelection = { + selectedRowKeys: selected, + onChange: (selectedRowKeys, selectedRows) => { + setSelected(selectedRows.map(v => v.key)) + }, + } + //获取表格属性设置 + function attribute () { + const arr = localStorage.getItem(EMPUSH) + ? JSON.parse(localStorage.getItem(EMPUSH)) + : []; + + const column = [ + { + title: "关联项目", + dataIndex: "noticeWay", + key: "noticeWay", + render: (_, r, index) => { + return r.noticeWay; + }, + }, + { + title: "创建时间", + dataIndex: "logCount", + key: "logCount", + render: (_, r, index) => { + return (r.logCount + '次') + }, + }, + { + title: "接收人", + dataIndex: "monitorCount", + key: "monitorCount", + render: (_, r, index) => { + return r.monitorCount + }, + }, + { + title: "监听问题", + dataIndex: "pushWay", + key: "pushWay", + render: (_, r, index) => { + return r.pushWay=='email' ? '邮件通知' : '短信通知'; + }, + }, + { + title: "通知时效", + dataIndex: "text1", + key: "text1", + render: (_, r, index) => { + return r.text1 + }, + }, + { + title: "启用状态", + dataIndex: "text2", + key: "text2", + render: (_, r, index) => { + return r.text2 + }, + }, + { + title: "推送次数", + dataIndex: "time", + key: "time", + render: (_, r, index) => { + return r.time + }, + }, + ]; + for (let i = 0; i < arr.length; i++) { + let colum = column.filter((item) => { + return item.key === arr[i]; + }); + columns.splice(i + 2, 0, colum[0]); + } + setSetupp(columns); + } + return ( + <> +
+
+
+
+
EM推送
+
Em push
+
+
+
console.log(values)} + // onValueChange={values=>console.log(values)} + getFormApi={(formApi) => (form.current = formApi)} + layout="horizontal" + style={{ position: "relative", width: "100%", flex: 1 }} + > + + + {/* {.map((item) => { + return ( + + {item.name} + + ); + })} */} + + + {/* {.map((item) => { + return ( + + {item.name} + + ); + })} */} + + + +
+ setSetup(true)} /> +
+ +
+
+
+
预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留预留
+
+
+ + s)} + dataSource={tableData} + bordered={false} + empty="暂无数据" + pagination={false} + onRow={handleRow} + rowSelection={rowSelection} + /> + +
+
+
勾选 {selected.length}条 信息
+ + { + // dispatch(install.deleteProjectBind({ bindId: selected.join(','), msg: '删除安心云、项目管理项目绑定关系' })).then(() => { + // if (page.current > 0 && mylimits.current == selected.length) { + // setQuery({ limit: 10, page: page.current - 1 }) + // } else { + // setQuery({ limit: 10, page: page.current }) + // } + // setSelected([]) + // }) + }} + > + + +
+
+ + 共{limits}条信息 + + { + setQuery({ limit: pageSize, page: currentPage - 1 }); + page.current = currentPage - 1 + setSelected([]) + }} + /> +
+
+ + + {/* {//映射关系弹框 + pushModal ? + { + setPushModal(false); + }} + close={() => { + setPushModal(false); + getProjectPomsList() + }} > + : '' + } */} + {setup ? ( + { + setSetup(false); + attribute(); + // setcameraSetup(false); + }} + /> + ) : ( + "" + )} + + ) } function mapStateToProps (state) { - const { auth, global, members, webSocket } = state; - return { - // loading: members.isRequesting, - // user: auth.user, - // actions: global.actions, - // members: members.data, - // socket: webSocket.socket - }; + const { auth, global, ProjectPoms } = state; + return { + // loading: ProjectPoms.isRequesting, + user: auth.user, + actions: global.actions, + // members: members.data, + }; } -export default connect(mapStateToProps)(Server); +export default connect(mapStateToProps)(EmPush); diff --git a/web/client/src/sections/service/style.less b/web/client/src/sections/service/style.less index 75ecdb6..b98d242 100644 --- a/web/client/src/sections/service/style.less +++ b/web/client/src/sections/service/style.less @@ -1,7 +1,5 @@ -#example { - box-shadow: 3px 3px 2px black; -} - -#example:hover { - color: yellowgreen; +.empush{ + .semi-input-wrapper{ + margin-bottom: 0px !important; + } } \ No newline at end of file diff --git a/web/client/src/utils/webapi.js b/web/client/src/utils/webapi.js index 784a070..7ed808c 100644 --- a/web/client/src/utils/webapi.js +++ b/web/client/src/utils/webapi.js @@ -48,6 +48,8 @@ export const ApiTable = { putAlarmVideoConfirm: 'alarm/video/confirm', //确认视频告警信息 getVcmpAuth: 'vcmp/auth', // 获取视频平台应用鉴权token + //服务-信鸽服务 + getPush: "push", //获取推送配置列表 }; export const RouteTable = {