From 715f86d3a848866c407d2638bcc2a785dbeb45d4 Mon Sep 17 00:00:00 2001 From: lishenfeng Date: Mon, 17 Feb 2025 17:57:15 +0800 Subject: [PATCH] =?UTF-8?q?feat():=20=E8=B5=84=E6=BA=90=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=AE=9E=E6=97=B6=E6=95=B0=E6=8D=AE=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E5=8E=86=E5=8F=B2=E6=95=B0=E6=8D=AE=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/assets/noData.png | Bin 0 -> 13300 bytes src/models/apiurl.js | 17 +- src/models/session/index.js | 9 +- src/routes.js | 7 +- src/views/Ptjs/Czdbl/dblOption.js | 3 +- src/views/Ptjs/Czdbl/index.js | 30 +++- src/views/Ptjs/Czdbl/qsOption.js | 5 +- src/views/Ptjs/Lssj/index.js | 275 ++++++++++++++++++++++++++++++ src/views/Ptjs/Lssj/qsOption.js | 84 +++++++++ src/views/Ptjs/Lssj/toolbar.js | 108 ++++++++++++ src/views/Ptjs/Sssj/Cpu.js | 123 +++++++++++++ src/views/Ptjs/Sssj/Disk.js | 151 ++++++++++++++++ src/views/Ptjs/Sssj/Memory.js | 104 +++++++++++ src/views/Ptjs/Sssj/index.js | 61 +++++++ src/views/Ptjs/Sssj/index.less | 16 ++ 15 files changed, 977 insertions(+), 16 deletions(-) create mode 100644 public/assets/noData.png create mode 100644 src/views/Ptjs/Lssj/index.js create mode 100644 src/views/Ptjs/Lssj/qsOption.js create mode 100644 src/views/Ptjs/Lssj/toolbar.js create mode 100644 src/views/Ptjs/Sssj/Cpu.js create mode 100644 src/views/Ptjs/Sssj/Disk.js create mode 100644 src/views/Ptjs/Sssj/Memory.js create mode 100644 src/views/Ptjs/Sssj/index.js create mode 100644 src/views/Ptjs/Sssj/index.less diff --git a/public/assets/noData.png b/public/assets/noData.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9cdd53695d4e824f265936ffbc3788d3083c5b GIT binary patch literal 13300 zcmeHuRa;z5uavo6 z$_cVV0DuZ0FD;?zZFHK0=1tb0arfqQ_wBzAx=BtS?9E8OIhiRoV3B^qB(8q97SU&h88Fg#0{1E+GO`k(GtA0;f(>n;Fy(#IYVEGfI@aZMj z)}~L6#HKP=Lu=A(z`JzAcQfebxuvwFG?OY>6O7M%e$-k~hrd@MEiA)e5d;6%>*l~s z?74oK>#cmPvz&#*?T#^p&QTKDbRjKBLjY6@VX%uU+Fv=n(&=q3y23|RqVB=RzU<~f z`g4(cx%buOiZ((3`BxFZuX>41-GNXx#E(Z*!%4Ef*MArfmU@WFy$hJEdi4y zKWTb1ck!zIyO-d6boaB^1)aviEEiZD!lA*48rCht>L!fUr|S(Y63+(2^ziH}%N3N~ zr{gvI7i2%yB6LS1u=5<{5}Q@2pD)_p)Q?b;C}G^ba|JKEih7r%P|v8E@_{-`2p8#_ycB_y+32Xmt}~ zB-1>cZ_YQ{oMM>219d0-kv>Ak7B%(WsfQ5R9y36pMIB7g;83QOng7;0+Z&A5?`)2B z!$t|l#(U}LLaO7G8J!K?w+h+7}JR-zy;fg25{j?JZpxF>x@KER?m9c3%omK`Huz4Y6Gdi2Qx)mK(nOHIzEj zpzrS@v#}#o8PqfSIZPp0g#2Qr>c-bEIzI1W6am?Uyx*>9F#>-WJ0&y#|;v1VoT;a$X;E=%ri@SIoH{ zgN#?sUJ+1@;imT#t$vA7uxFceUFSoat2Q21Qz;*q??yJ#4w(-Efe{^`;DfMP%2mRk zi&!3aF~v~3%y0iG0_n`k23$ZK@}E!!kAcaBCPzwka{IIa4P zZz81_zZ)8C@)+Mfd3sJw-5iXB0dO&mC4btFktdK|f-X|Zl%~ib7K?>~djbG*zLZ>c z7jPh{PbBZBwx3>Uo+E&b;P!fL6>i(K+)8MPNx7U({@F~Dy_w5}m@oGry$( z0R`f^Uc(^t`-2rDpqlnBf{aNX>%*l!X7U0%IT1Fttn6rCPzp@m&Ci@S=NY9D@_lIq zvkohbf~~)eO9;QrvynpIdDn|2g>eLx23VcG<2`83xpJy(wjF%wSMy0$03oHNK52@F z${P_Q;Cp*M9r{rHjDo~U7$8o4qUk;K+?d`d%-KwTa0vFobxY+?ZGSF#auaE2)tTcy`DI!L*Jg*KJpb2Qqj zedR=WLuV3iz4Oyk(6b}ggP*VdLm$#37U)sjbHpY`yivX~o0ca1xGethY{W>_o$_(9 zd+&6WE!J8dXUK5ufIJNcI8lC1vU+`_94UGtT8Cz3{^RE~oU9iBqm1s?m~C3oZ`$sZ zA4*T@4#o5bwhB0SvAGG5B6fIzIXBCf(y6J^dG}AcV-lG1K6o>no~|Tu0V^SKeCfve zQe1MXNL9K?=?P$k1mwU#{aLbxQW-!@moKOI{^!}7N5a!_$8>K6eqf0<68GNH^zwfL zHJw@Y)q0`KnM$PT9`e9`lRDvtk7a2tr!vxxa8z&z(;A#xpyjDB2kUuHuTRU~Ka;#h zhHAkh-&o0>^@R-L01+w#brrU)?zYMVUCxTus%{xi`%(jcmdCXz!jbs}8b?D@O*1|-p zvG{}lt_TY^$wtDQq??MBTt@~DQiCiu2BdXz$0kGHw=V@KscHF=zZnnyoBKwcyZ8F+ zH!DKlhVYqyNs~^(qNRnCld&7$WSQT|(&8fgR3`I3cJ0U9v=AV5&wQq1N4`wisjJHt zxVMh*Tlb-ch_#&yHJz4(RTf4w-po5yCg$z}+{`2Lp^*kjtzmChqKi2c=75 zSpt`Sr7H2zVRv~yOwo(aPjQ+}Y^4fF;D*n?GJj=MIL#ilkQ)G-dTjPBr54?bib_9E z9xh32;{Exwqs|$qfQ%Ki7Li+tIxd4*9D%4cSBY20oCM}ll;;rAXU^H2;T_~~ubxMb zkTEI3rZt_sq{Z$9Cl~9jJKYG>xSw~b2y-JW`;;Kt$DKG)HdVW-?tO5po1Q-ED=A!8 zJNN#|{PCA*SrFj2A`pp69jHrDvh9N2dRN!VAQe2^S{_bJ2rNg`8Md=<2NLu#It9c& zojMYwy{j}Tzn=Jz7urktlqZ`hEP??ZxRA=>j4_4SqMcPw2uT>wMFw6>^WcK$8++5p z|BD24NO;{fA%_jOGKU_>+`ub5N8d#V%%21n4}QOjNM;#z4DZd4Z!)K%QwlGjdX#Dg zuQt8clpcxJ=l|X=w6x6?bdTQmbVmJ*T4-&e_|uL6)hUYkCB&v$A6~ir$4tKT^uBnR zt@Vyq3z?o6q@0Nvnrqfu)7eO>vM~X%;Lh#ir8xVnn2dMQ{sk*oguh>hpt5zRwO9^a zqD_^XMM*}x1s;CgeO@8!0#`Yspg0&YIa<$Yd20o!Ye|KW6@rZQ0N~_Ll@y#4u*rYa zK3#{|*X=!1gvAFwjMrC_GR~?Z#;<5rmR-5YrYGq_*NuEdP^N)r4a z5j1h#R3n{!=K02hGmqA5nS$3jcY;~V)oJH)(&A%3&^9oQ3qu$YRXX?C{tb9R#F$6~F3JuIO@x0vxah z`n1ZL{;~q)-n~ZeC7fy2buhY-20CD!x6XJv|BdvQmTB zS1my0fd){b!M1`T!k#Ne&p~k8rs;nxuMZi?FvtdIQ5O|6SN~+G)*Cxh;Zm)0`5Cap zT>^@;*33!s-0dw>KUdr z+{%2{*(NEcW->;wJo7S15N=G})#v4CkQk8lp`qye*1rUM=g8YX^2!qVWgtCTC)B1| ztbl<|JNIrvF&w!BulRRB3E%PB@GQ5>d6k3nt+bCm8rYj%P}0VRxt4p5T4k!odgMn; ztum2gTNhtZI#~)%hL7~WNY*CaaIz(QO^mnk=>m)1>5bKthPVZe`QlD|wnRI?*w=H! zphmi@9$^dqS9TP*2B52ULh#@fyRlh4V=0W9z{G`)=wkDEAVm82qj%~PoMnfLz}rsA zAWwGuOW7pSuV>J3w*9o2YtwZU=d=}nWfo9k<&Te4PT?{Qf9t#g&1KpX4BU>e96zu-Dx;q z_IJK}Q*-UaeBWPf9Jrg$glxzI!>1hMPo1@JfZIX~xHuq$2>*k13Nu!DD)Hgb1DEET z`a+Z*u|<6%26p1I3O_#?ri&GpOE(8>=c%8|g#IoB;T#I6izZw|iD2|vk48;FC-~`? z*BClM2(q{W+(2F;+_b(eMg7cb9#-zz_x^lsqzs#Fmq7R2A4o^~IuFG0_5z!M0Xlr< zThuVyL~>CR*6nRxXE*B+S~RXPhfjtCPt@ywQ))8(*|;~e<;l6GOg`2tvP;W|PCE`^ zQBS}P@sN34p|aiN4)W-ISXPm)=ulHlMAX3k-ewW`6d3G;UL?mAVpHVpM?L=}JNuy| zt;0y|Gww~yGru>jlwq}t#U9$5u0@t2*TR|{q8(q5_UrTbCO)pb&c3t}5r9{a>is~VjI z%nRI!NHwES=;15a>w)jr%PwtZA_@36uBl1p5*W zSTIc7CaJD0sbms6EP_5q{fe9Z8kF!E@8}{Bb#+g`+qka+t`;=PIn^kQ5>3 zP%#~HJdsYQO&MRs$Oo5RuYy5hv^P2kyz0%xX`Bzpoeh7N1o*TbM+3^lq<7-4ErBgzaqq=$TyY zjgMSwiM1j3Erv!?6dyal(vQnZhH(V}x9ng|j$aY0C7V;w47w6YZd{?sE#nHWZ9^z9wN&YC+heIjo1+EI9V zgE)BeEd7h~sc+||$%do#h8R=4fXCL88o=xyRr)wJOx4|eOfjF0)4xV?ymwd+eQ%LT z5eUiEyk@2(P$dvXzdcRbGKNgEm6XjwnzXy9k$)PPtA?)O#JwU!c@h43*Bg-RWxZXJ zOMDrR=vXLE4)z zF6fmPU2yR2bbDAN?pCTLp4wFZXK4lNxO-R;Hi`wU@9G*HiL z1}yDk5fg!*?pyk3#xK?Bwew*1O7@GPDu?kICyXy-T6}C0d*^KdRN{bM|7<#LbG=q`Qht^FLwSdaFrG3 z)V!yiRKZ~q+3aZ^FFdR3`fo6oprPMI%6dGK8N>3G0#N2xI0DkFPF4&Q3$vF3@dNc+ z1h>#9+0!#6pDN)h?^cW(TH$dFM9_no2B)7w=v^l2s_tNWe#h58sb=9>(bioBitxG3 z)|a^)(#<71ErMuJR9+P-upTc5`Rw2w*3Uj?`R51LIAwyNIwk?P@_9fK@yz!Wc(`On zWA8XN&dF!X!0(!)B41K1JMbsyb}&EyW{%u8D=h)fcMv@4X*L^yAMyyEmVoiS)h8QP+=kle*djsb6$Qg z464kZ|2|3LJ2kTvAw&Jrp+5n<5l}{hc2(-Z8h3QTFF-Jf{hAK`a$~=A+vCs|+yAC6 zGHUw!zT=J8L}~)TxEH8EH1U4LQYV+~I$spMR?$WEP$tg`+HQR6(_XmbM#XLWbMC$i z2HNrs$KzN3*l0)|mszZQbuA(W^aO;FHWBk;;>w^R5Ws)_|t=k95xyh925e#$BzNpnBQI21d%fk%9LV{zVoMZnTxjC zy)7;_fb%5{YyfwEw9OXc#lv$mowXBmS+RMyEZ7ohyiUOm;S)i-$#y?B!YP&Ax=yK= zLb}=qC4)&GGGR{p#(y{~`4JZI5=9I-sptqlKl;`(T*gpuD4u!BF!qF4O2H+2Yc=VJ zVvoDG$peN%CMe!|H=Vn$doSm7gGK*-XF_t@rx9VB7qVYAOA>(|JinvCq(5Wq!xMok z+1QxdS845=ZCeyOh*Rjw50)3;d-~@7cOUaU@pIp%+4pvlB6it7Pj5X)v+qYL!VynC zkWIDeawphLrh!TFf67|K9}Wk&)!KVL%_vSTk=G<66{69f-SRd-zSU8UOA7evNj;%T z5pbhnGec%HH1Q{+4XO^U!w~X#1*gan6NFn}NwH5jqLtlTh|OxWg`4|;GGP1Th=S#Y zi+tee-XHU;JRxoH<(aOz>sNI8t?{wpLx|u;n^CerQ$Ikx9YLhB%TF#WH4z*$_8T{9 zUJV8MMTPYV`}x8ABkB`-ZoQQel_^rPY$%iS?>-mCZCG-?iop>55+RG2KtksH6|Tto z2I9L$GIE#GwRyD4TO9Ge>(T4ZV6#Sq3^VEH$pOObg@u%|p;$zqo;>b>pW7z@tYo}>$>@hd zT1*ifLlB7#@WuZru>KQrNOaBC`0;8UcWVIdc>^>S^JeqS;O zk&S^On!4RMya~uOUGf7s5WJZyp~L3Dod5og>JFw7csOi2yMZrb zUYv84T1{7@tNyyz!Id~~TH-$b-uQRB(RF?7ZKxF95H#6Bd~H1m9k2^as!|2 z)j^2N9Ho|<72b(GT|EKIwKwcTUR)&`DQAr35sQ5Q(qeDK69p_RWJB89%Lwk{#0Z+aodc)ui7nF|x1`T6|x=E&|OLXs}T8AF_H zvM=LAqhO)(xh6pdZMe3Gd*>2Q^5%5a)mh$1+V+dJ3(ITVM{3*cU$Q=RUm+joW#nR& z^@q}quRC9Ld1%iizflX-<(2pxsLw7g$m|FL%i@ZVXWuiIH{$M4IMqyK@Dbo$ULqe5 zp+ho-yr~i106p_#5YZ+HNu=aPa+f{NGaSZt5oQYrini&c!FADw2ys?!`1vvjnBn0P zX~zHn-hAl}#(uNG&TYB$<7nh!%)XIJoqu0JJ}-Mp&kG6EaeToGE^FtQB5NhTvKoJf z2D%y3RY2+Z-1SAA@xx&cKLTjuRzzRv+ZXm-y@aEkzEQ9Df@a9Y(^&Lp4Zdf|(6m*` zKsyjII0cL@)z-w}tKV$F5;lT-Ey=~@ywO}220we~$ZmnTt<-9KcO&R*ED6Dcc6&tm zFzx(SG-Ip&dFT1FRP?AjBzaossBe`44LUi0e?B{VKZ$bO^AG^@nnI(tbW9YG3RhW~ zkh2KtBAgDPeR(4CY_Jg+3f~w9sSHU1CxOv#`MK0zizr4O5b(Hn3N=ob0-7E|!oIJI zRlQgqcWbZ-_hyDVNe=Qidlfp#F=c|$hb59R1sfGddif{PS{67AD!VBohUbv}YAqAQM{vQGY$lmx+zac;2i3V!t z*l>}oDYN7^=5+8Su2Cq{bs2Cu!qpURpovp^t3$5d-w*E{%qmKVKUIk5%UZeZk z=kzK1Ja!HA=rDyv2M#Gh(g+Z$^51L6$Q4{r=iX>FtbHWZ`RvQMUvkxF!;dvD{xDfJLAPuDX~IgJJqZ=| zRujygp69=8MUj~RZ(2V8vcP;3Sx}bu`DHK@d??`dS&zZd>d%v@P;irgq>|UV4uEqa zUfMNkNAbu|VC|2jmCAwBdDK^@ttF5&knNMuEMR8I-fa_^i~tz0p~GP(7$~@*+}dN) z>CKXb4;EY><_AiV;hBtS4sb)-ID!k6+I!mu5CuzIn=k|tyXu`kBP$Rt(cb!AGKLLX z<04aN88*=}L}K-mnoC|V6N%bIjU%tAvS)W& z;KG5fpjO0gat}M9c~e-Q3m23b0$=`$y5BT~F)ieIZG0p1f7lLT03%wcq#?3r{j^l3kPKQvtDCV#NZ#L`yV>x8>8qjg0GF8rJn~y# zRd^D)CS00+7JsRjt3zbqvlGN}8d1sx4w^m#B;^J7|g_)WCm0Nc));tNKwhtlik3LP0`j7ACv&7e1=pH6 zadGCk!eA++*~?FSDeTqVxzr)}>5EMH8jBa-UHBd~cwS;jAek!?v-Q`=%WgV=}8Rx_Iwe~ zwxx>jhSv-!67T*IksAd^gF64mZiw~;GCobo4^MXpbCjvDfZ~YZ>__-h8ArVV@ zCH@=yx-tyu?QBLDqdDhcO2{`2+Wl2d&c!t|ds@8T^@5@Be(PO}4Cd2MiJDBNU|ZWA zyL_-_M>$6lCZXagyy|wmfQy?m2^Pq$*y3MsF{AafHD~qs5bn`f7gzQD_pC7ufuD5O z+}d#Cp*@)oiv}(;)n1CZHEcwnf-zE`l)x;Egq+qY$JYVub%d6(MZVqP!tA|j-9&~myn%VC`d zcxtAcF&8ezy`xZE-{R4hu>a#rOX!}P=`Q0HZ{uH2yLTNyErM5v z!y^zF_*yn#sc!g-PYRa4C>sra+YdQc&U`m-qpJ)PA<7RaQ@)>|`LLcFUnLA#!%WDD zs)svYlYUeVsR+JMA%q=yA$}bFHC0U_q@*O4Ut%!1P(klQxu!TXb{xDi;P|rk;5Yai z;yWnR^OXh_?TP&wES>1{6E?O60k%*#$9rUDI2dJ4C!j|I+QR%@{vX@VaL8n1P43y> z8&GiTjbUbdN#J`X-3WrsC|Hxq9f_FSabN|_v-H-=T>78K=m9t$xM@1m(fhrVm4*~G6;~0P-eHk|EkYId)a+@Y=f4);n_C}R|>`g7(2E>iT z=ZF4x2mvHfXU+vsy;^&fsZ`h8Os~};Ndu>uuk+2&+W!c_h*Y{!)qA8>Wb0Oa*Nw?iyP>+fKtg>}gxNvZ{-zTdN) zQQEM0>YiKbR>3~sRed+g^*_v6k%$}jmk$^yNReT=@cq8vd3*J{(VqY5e1}BbO~w6GvP@x4P$Ef0M=a@*SFag6OG}~pK5`;o0N`dxO;u%Y0=WMHq-1bQ zFer;>@Sx2tp~`6ab(b-!4q+Xg0E6wjjJu5dWdr!}FAm+s<&_YkC+js6W^Mj*{@HwE za%84mBWricec_jNk;3Pnkl^QVx#D(=AyoarFS`>#?^qy+f7EJ2%-_;Mx{{DpxHvxI zW=6noG&!!|@B3=JR_(t|Cc+O%bc}=Txu&M8XNxPgzT`z9I4&6R%bsQV1d-)twJv_2 zcXK22r@i%YJDHWP&vL=Lb1@@W45`Z62`05S{&Ysl3BZ6$#RbX3<9>+Hq{@KZ3@AVs zQflOolB8iZD<5s-{{QFycTCO~SXp)NCf`{Y7~U-8A(D)26QsxadF?A=hU~rP+f1Uf z_+VpGr2WOofrGW>8TS`YzUP=GZU14s8{;)#Xu;`{2a4^J$0(2FZIo_2Ueu-@TT1k@2JZpQ;PABZ z?&Taj`d!bS!+#!EhQ=XvkL3Si+-$GgCO>l>RT%N)oNib#)aU15VQY=g*k9ECVqiVj z?e65@@t~O)q6@OK@)8|#vT}5(D6%C3|RLo9p$)6 zR|%vv{#T^)#SihXl8MW5GL=0EQyqMZWMm+gxEO--*WmXV7oug)dg~K0izw-AtW19J zUFis}T`YLqZyJV5{by~X1S#d4;(y-eeG{sRE)Au5IvHkbL@T&&q)a=^RFwJ)X@X#k z`Dn72Gz?#PgKn^pHB4-l)4T3z5xlT*o>(VYgBxobTGsX^JDx>5{*@Y4-J&jKDP{4M zM8@AeV}5(@S4(C*exSg#)LvHLD$eoC`{fPcV$rT_bRWrniN#E98tSfeczB6K8FY)T zxcJsnQ08S9^Mq0`SY(}c?5@>W(%^gic9jAXUI?o?%487W$9!6`uKW7@!)Pg(;{Qt1 z?M>6W;#g5$?*4RXrF+1Bgn;#&FZwfVa!SYnh8p_q9*R^GY-~)eDZzpF*wY}O6<775MlR%S z7XGCvYfcJqW}@179~X=P@bCMxxv2H!x$(X+G^zG9U~?Sq2iJKB{Bt;3v2;AzxA~Z! z7LH9GC=2R+#0e+TjO#@z?3Au!g%<3Dt~lcV-uRIfNaZVU{PEAN$+xsc?er?jk{*lE z1r;zx-p2u=+qo1myeK!t*aZ%4O#_p^79Az&`~yKj7^=pT123|nE#E%G!-)JUC74;6 zW+C@6ErtZUFV1X+oz0W5y}Ww<6lH!P7P?g|g$6*>V+7VR_v;d(K?Up*#Mfbfu&5GD z;6L!@KykLzkl(_XeQ^OTT-hFnIVGJY;9ALNOP@8@N zH=V^hroJ-d_joT4x;nM5gu$I?#J%-)aP{#1Rxsn2DzJx{jT@E0u(pG`;chI0qQZiT zXGnZVb5jF!d%XKLV2l&=ml%;& zBkxte=B^~VtlD{=L00T4ogqU4T3}^jW97Ir|q4;)~$|HEme!+DK@Y+Ij&-C0X*GCkJi= z4-~l_1!bPc-B%@$gN5lygnMo!^YWDr(0c=kxRQUD=RQ#0l6gr7i%PH~1pVLhyE~s_ zOdc*-iaC$h{ci0==zKjKk@)cn*ZjO2%9~CCgIhBmco|2|VD39e3Ye{_Zh#tqg5S%- zgZk>TL-3Kj4H#@cE;u1D-T88HyV1kFDRfanhJtJ41h;-SdOB9{N%`5(3c_NRjO>2Y zg1UkKymw>4dXY!*#?|er%I}zwZyWNKDvl0X4-zW7qY9%P17B~upl!LDMuqO@v$;DK}aIJX4pe}cj-LH>4`NA624cPoOkwPj_E6dbHfb{12=rTrP) zh1K*mUNz#y!o$Dpb{`SO%5%_wX@imB#roKf1LR!ZFo^A7^GWx;9L+b7=BWEck`9h3 zUE9-M;D1Itu*oR4gnu(v@#uF}IeH{#Wi<-=6vcw-|B!nWLxg~&u~~FiB^y=W(a_=_ zO2m3*7C{`yMi)-_-*WR!z@(RAOjUM%k|&^R(=YGfA_Qg$qy2ZVWg*XWLF1^D#WxQS z^NHuvgTsGFgi?06AWnR-wNi{PDTZj|lRjeKNr#~mnpg$KQ57_=M|=&bfMl4QlU#w< zbjMD#=WH9QABH2Qh0KIe(=BWrPTiD{K?)f&!e&dQlI?9APOU*;A$Q1Y86oE`+W?Ay9KTEx7bea-MfpQuM+d}DE`X=meAIGsggxAzh^4>#WyZZ5q{ z28;O4Fbm&}p2w&J_F2WcmKs+!U}F^Nkub19svEfm4ICh%NLY;=*_voU+j0bcXk>6^QXm`*@87WURqv`L`~ z+qn6XD%$Nxf3^ZvR`xRUb3YGWg2o7FH7fxNtop|EXB*m$Z^(e-+3p4i{XB8WBp zc|gY=5eim2&L;uxy*OVFLkof+x`}Fw?jkUP}Ea=@>jh*Iq|MYMqK%waex-9 z(1A)=8gD($Eapc1DTd<0OV*Nkd7Y@S)|{l}t1-M`Te0u4U6|Pi0CeW&{qflB5o|$c zXEb`#LZc62%k$oZl?)qY-S|B}sAApWx`|0gU`8Koez?~)^mvFz#%!%bnYIL~n4D|N zLa#={s5NxdJrRN<`y!0AB;Kl(tRC5eFY9cWlZ-bYDU!9{=JM1gj*UHkMC6drc^5}Mj`xQsH0B5@che^A<%Gq0VQDh z(9fNNK4TH`R;3cdWCi518G$u($1&&=0N8f2$N}beFFzC~E0DOr>4cZ!rxRc8;Y;C#+!cKOT?KQwx+=TedG7!PC+fy|{0( z?|($fwLscFE3X4ACp4FYZr9rVm>O;|)Hmj%<+GvnMSl*;_fLY7u7FTrzwrR%Wt62W ICBdQp2e%$WD*ylh literal 0 HcmV?d00001 diff --git a/src/models/apiurl.js b/src/models/apiurl.js index b0cad56..fd8d091 100644 --- a/src/models/apiurl.js +++ b/src/models/apiurl.js @@ -15,16 +15,23 @@ const guishiPro = '/shzh/ptjstest' const shengUrl2Pro = '' const nmjPro = '/shzh/jcsj' - - - const jsapi = { - ptjs: { czrz: shengUrlPro + '/prod-api/baseplat-system/operlog/hb/list', czdbl: guishiPro + '/monitor/summary', + export:guishiPro + '/monitor/export/', resource:guishiPro + '/resource/page', - treeList:shengUrlPro + "/prod-api/baseplat-basic/hb/village/getChild/" + treeList: shengUrlPro + "/prod-api/baseplat-basic/hb/village/getChild/", + cpuPage: guishiPro + '/cpu/page', + cpuQuery: guishiPro + '/cpu/list/query', + memoryQuery: guishiPro + '/memory/list/query', + diskQuery: guishiPro + '/disk/list/query', + memoryPage: guishiPro + '/memory/page', + diskPage: guishiPro + '/disk/page', + diskList: guishiPro + '/disk/list', + realCpu: guishiPro + '/cpu/latest', + realMemory: guishiPro + '/memory/latest', + realDisk: guishiPro + '/disk/latest', }, service: { diff --git a/src/models/session/index.js b/src/models/session/index.js index b8ee523..a036e41 100644 --- a/src/models/session/index.js +++ b/src/models/session/index.js @@ -274,7 +274,14 @@ const session = { id:121, redirect: "/ptjs/czrz", parent_id: -1, name: "平台监视", type: 1, order: 1, children: [ { id: 402, path: "/ptjs/czrz", parent_id: 500, name: "操作日志", type: 0, order: 1}, { id: 403, path: "/ptjs/czdbl", parent_id: 500, name: "测站到报率", type: 0, order: 1}, - { id: 404, path: "/ptjs/zysy", parent_id: 500, name: "资源使用", type: 0, order: 1}, + { + id: 404, path: "/ptjs/zysy", parent_id: 500, name: "资源使用", type: 0, order: 1, + children: [ + // { id: 407, path: "/ptjs/zysy/ls", parent_id: 500, name: "历史", type: 0, order: 1 }, + { id: 405, path: "/ptjs/zysy/sssj", parent_id: 500, name: "实时数据", type: 0, order: 1 }, + { id: 406, path: "/ptjs/zysy/lssj", parent_id: 500, name: "历史数据", type: 0, order: 1 }, + ] + }, ] }, diff --git a/src/routes.js b/src/routes.js index fe55fe3..3e07c70 100644 --- a/src/routes.js +++ b/src/routes.js @@ -44,8 +44,13 @@ const routes = [ // 测站到报率 { path: '/ptjs/czdbl', exact: true, component: lazy(() => import('./views/Ptjs/Czdbl')) }, + // 资源使用-实时数据 + { path: '/ptjs/zysy/sssj', exact: true, component: lazy(() => import('./views/Ptjs/Sssj')) }, + // 资源使用-历史数据 + { path: '/ptjs/zysy/lssj', exact: true, component: lazy(() => import('./views/Ptjs/Lssj')) }, + // 资源使用 - { path: '/ptjs/zysy', exact: true, component: lazy(() => import('./views/Ptjs/Zysy')) }, + { path: '/ptjs/zysy/ls', exact: true, component: lazy(() => import('./views/Ptjs/Zysy')) }, //监测站点 { path: '/jczd/zdbg', exact: true, component: lazy(() => import('./views/Jczd/Bg')) }, { path: '/jczd/zdsp', exact: true, component: lazy(() => import('./views/Jczd/Sp')) }, diff --git a/src/views/Ptjs/Czdbl/dblOption.js b/src/views/Ptjs/Czdbl/dblOption.js index b234666..42fdba2 100644 --- a/src/views/Ptjs/Czdbl/dblOption.js +++ b/src/views/Ptjs/Czdbl/dblOption.js @@ -68,7 +68,8 @@ export default function dblOption(sellist,selday) { }, saveAsImage: { show: true, - title: '保存为图片' + name:'日到报率详情', + title: '保存为图片' } } }, diff --git a/src/views/Ptjs/Czdbl/index.js b/src/views/Ptjs/Czdbl/index.js index 6717a23..01b96a1 100644 --- a/src/views/Ptjs/Czdbl/index.js +++ b/src/views/Ptjs/Czdbl/index.js @@ -3,7 +3,7 @@ import { Card, message, Table, Space, Button, Spin, Tree } from 'antd'; import ToolBar from './toolbar.js'; import ToolBottom from './toolBottom.js'; import apiurl from '../../../models/apiurl' -import { xyt_httpget2, httpPostFile } from "../../../utils/request"; +import { xyt_httpget2, httpPostFile,httpGetFile } from "../../../utils/request"; import { exportFile } from '../../../utils/tools' import { resJson } from './res.js'; import ReactEcharts from 'echarts-for-react'; @@ -410,6 +410,20 @@ export default function Czrz() { return node; }) } + + // 山洪数据映射 + const dataUpdate = (data) => { + return data.map(item => { + if (item.adcd == '420391000000000') { + item.adcd = '420381450000000'; + item.adnm = '武当山'; + } + if (item.adcd == '421303000000000') { + item.adcd = '421302000000000'; + } + return item + }) + } const onLoadData = async ({ key, children }) => { if (key.substr(4) != '00000000000') { return @@ -417,8 +431,10 @@ export default function Czrz() { try { const res = await xyt_httpget2(apiurl.ptjs.treeList + key) if (res.code == 200) { + const filterData =res.data.filter(item => item.adcd != '420891000000000') + const results = dataUpdate(filterData) setTreeList(origin => - updateTreeData(origin, key, res.data.map(item => ({ ...item, isLeaf: true }))) + updateTreeData(origin, key, results.map(item => ({ ...item, isLeaf: true }))) ) } } catch (error) { @@ -472,11 +488,11 @@ export default function Czrz() { } // 下载测站离线表 const download = () => { - // httpPostFile(apiurl.service.yjgx.downLoad, params).then((res) => { - // if (res) { - // exportFile('测站离线表.xlsx', res.data) - // } - // }) + httpGetFile(apiurl.ptjs.export + '?' + `tm=${SearchBottom.operTime}`).then((res) => { + if (res) { + exportFile('测站离线表.xlsx', res.data) + } + }) } useEffect(() => { if (searchVal) { diff --git a/src/views/Ptjs/Czdbl/qsOption.js b/src/views/Ptjs/Czdbl/qsOption.js index a7f9c57..d5a853a 100644 --- a/src/views/Ptjs/Czdbl/qsOption.js +++ b/src/views/Ptjs/Czdbl/qsOption.js @@ -88,7 +88,9 @@ export default function qsOption(timeList, listObj, hbobj, list) { chartTimeList[idx] = str.substring(5, 10); }); -console.log("miny",minY); + console.log("chartTimeList", chartTimeList); + console.log("addSerise",addSerise.data); + return { @@ -150,6 +152,7 @@ console.log("miny",minY); }, saveAsImage: { show: true, + name:'到报率变化趋势', title: '保存为图片' } } diff --git a/src/views/Ptjs/Lssj/index.js b/src/views/Ptjs/Lssj/index.js new file mode 100644 index 0000000..2461968 --- /dev/null +++ b/src/views/Ptjs/Lssj/index.js @@ -0,0 +1,275 @@ +import React, { useState, useMemo } from 'react' +import { Card, Tabs,Table } from "antd"; +import ReactEcharts from 'echarts-for-react'; +import ToolBar from './toolbar'; +import zyOptions from './qsOption' +import moment from 'moment'; +import NormalSelect from '../../../components/Form/NormalSelect'; +import usePageTable from '../../../components/Crud/usePageTable.js' +import { findPage2 } from '../../../components/Crud/_.js' +import apiurl from '../../../models/apiurl' +import { httppost,httpget } from '../../../utils/request.js'; +import { useEffect } from 'react'; +export default function Lssj() { + const [searchVal, setSearchVal] = useState(false) + const [cbOptions, setCbOptions] = useState([]) + const [cbValue, setCbValue] = useState("/") + const [optionsData, setOptionsData] = useState([]) + const cpuColumn = [ + { + title: '时间', + dataIndex: 'tm', + key: 'tm', + width: 120, + align: "center", + }, + { + title: '用户态CPU时间(s)', + dataIndex: 'userTime', + key: 'userTime', + width: 120, + align: "center", + }, + { + title: '系统态CPU时间(s)', + dataIndex: 'system', + key: 'system', + width: 120, + align: "center", + }, + { + title: '空闲态CPU时间(s)', + dataIndex: 'idle', + key: 'idle', + width: 120, + align: "center", + },{ + title: 'I/O等待时间(s)', + dataIndex: 'iowait', + key: 'iowait', + width: 120, + align: "center", + }, + { + title: 'CPU使用率(%)', + dataIndex: 'rate', + key: 'rate', + width: 120, + align: "center", + }, + ] + const ncColumn = [ + { + title: '时间', + dataIndex: 'tm', + key: 'tm', + width: 120, + align: "center", + }, + { + title: '总内存(MB)', + dataIndex: 'totalSpace', + key: 'totalSpace', + width: 120, + align: "center", + }, + { + title: '已用内存(MB)', + dataIndex: 'usedSpace', + key: 'usedSpace', + width: 120, + align: "center", + }, + { + title: '可用内存(MB)', + dataIndex: 'freeSpace', + key: 'freeSpace', + width: 120, + align: "center", + }, + { + title: '内存使用率(%)', + dataIndex: 'rate', + key: 'rate', + width: 120, + align: "center", + }, + ] + const ccColumn = [ + { + title: '时间', + dataIndex: 'tm', + key: 'tm', + width: 120, + align: "center", + }, + { + title: '挂载点', + dataIndex: 'mount', + key: 'mount', + width: 120, + align: "center", + }, + { + title: '磁盘名称', + dataIndex: 'name', + key: 'name', + width: 120, + align: "center", + }, + { + title: '总磁盘量(GB)', + dataIndex: 'totalSpace', + key: 'totalSpace', + width: 120, + align: "center", + }, + { + title: '已用磁盘量(GB)', + dataIndex: 'usedSpace', + key: 'usedSpace', + width: 120, + align: "center", + }, + { + title: '可用磁盘量(GB)', + dataIndex: 'freeSpace', + key: 'freeSpace', + width: 120, + align: "center", + }, + { + title: '磁盘使用率(%)', + dataIndex: 'rate', + key: 'rate', + width: 120, + align: "center", + }, + ] + + const url = useMemo(() => { + if (searchVal) { + switch (searchVal.type) { + case 0: + return apiurl.ptjs.cpuPage + case 1: + return apiurl.ptjs.memoryPage + case 2: + return apiurl.ptjs.diskPage + } + } else { + return apiurl.ptjs.cpuPage + } + },[searchVal]) + const { tableProps, search, refresh } = usePageTable((params) => findPage2(url, params)) + + const options = useMemo(() => { + if (searchVal && optionsData.length >0) { + return zyOptions(optionsData || [],searchVal.type) + } else { + return zyOptions() + } + }, [searchVal,optionsData]) + + const newColumns = useMemo(() => { + if (searchVal) { + switch (searchVal.type) { + case 0: + return cpuColumn + case 1: + return ncColumn + case 2: + return ccColumn + } + + } else { + return cpuColumn + } + }, [searchVal]) + + + const getDiskList = async () => { + try { + const res = await httpget(apiurl.ptjs.diskList) + if (res.code == 200) { + setCbOptions(res.data.map(item => ({ label: item.mount, value: item.mount }))) + } + } catch (error) { + console.log(error); + } + } + + // 获取cpu整个时间范围内数据 + const getTotalList = async (params,url) => { + try { + const res = await httppost(url,params) + if (res.code == 200) { + const result = res.data.map(item => ({...item,tm:moment(item.tm).format('HH:mm:ss')})) + setOptionsData(result) + } + } catch (error) { + console.log(error); + } + } + useEffect(() => { + if (searchVal) { + const params = { + ...searchVal, + mount: searchVal?.type == 2 ? cbValue :undefined + }; + search(params) + const url = searchVal.type == 0 ? apiurl.ptjs.cpuQuery : + searchVal.type == 1 ? apiurl.ptjs.memoryQuery : + searchVal.type == 2 ? apiurl.ptjs.diskQuery : + apiurl.ptjs.cpuQuery + getTotalList({...params,type:undefined},url) + } + }, [searchVal,cbValue]) + useEffect(() => { + getDiskList(); + }, []) + + + + return ( +
+ +
+ + 资源使用 +
+ + {optionsData.length > 0 && tableProps.dataSource.length > 0 ? + <> +
+ + {searchVal.type == 2 &&
+ { + setCbValue(value) + }} + value={cbValue} + style={{ width: '230px' }} />
} +
+ + : + + } + + + + + ) +} diff --git a/src/views/Ptjs/Lssj/qsOption.js b/src/views/Ptjs/Lssj/qsOption.js new file mode 100644 index 0000000..bc88448 --- /dev/null +++ b/src/views/Ptjs/Lssj/qsOption.js @@ -0,0 +1,84 @@ + +import { color } from "echarts"; +import moment from "moment" +export default function qsOption(data=[],type=0) { + const minY = Math.ceil(Math.min(...data?.map(item => item.rate))); + const maxY = Math.floor(Math.max(...data?.map(item => item.rate))); + const name = type == 0 ? 'CPU使用率' : + type == 1 ? '内存使用率' : + type == 2 ? '存储使用率' : 'CPU使用率' + const chartType = type != 0 ? 'bar' : 'line'; + return { + legend: { + show: true, + top:10 + }, + grid: { + left: '4%', + right: '4%', + bottom: '8%', + + }, + tooltip: { + trigger: 'axis', + formatter: function (params) { + if (params.length > 0) { + var result = params[0].name + "
"; + params.forEach(function (item) { + if (item.value) { + result += + item.marker + + " " + + item.seriesName + + " : " + + item.value + + "%
"; + } + }); + return result; + } + } + }, + xAxis: { + type: 'category', + data: data.map(item => item.tm), + axisLabel: { + interval: 0 + } + }, + yAxis: { + name: name, + type: 'value', + axisLabel: { + formatter: '{value}%' + }, + min: minY, + max: maxY, + axisLine: { + show: true, + }, + axisTick: { + show: true, + } + }, + series: [ + { + name:name, + type: chartType, + itemStyle: { + normal: { + color:'#02a7f0', + label: { + show: false, + formatter: '{c}%' + }, + labelLine: { + show: true + } + } + }, + data: data.map(item => item.rate) + } + ] + } +} \ No newline at end of file diff --git a/src/views/Ptjs/Lssj/toolbar.js b/src/views/Ptjs/Lssj/toolbar.js new file mode 100644 index 0000000..d169cce --- /dev/null +++ b/src/views/Ptjs/Lssj/toolbar.js @@ -0,0 +1,108 @@ +import React, { useEffect, useState } from 'react'; +import { Form, Input, Button, DatePicker } from 'antd'; +import NormalSelect from '../../../components/Form/NormalSelect'; +import dayjs from 'dayjs'; +import { FileTextOutlined } from '@ant-design/icons'; +const { RangePicker } = DatePicker; + +const ToolBar = ({ setToolVal }) => { + const [showIcon, setShowIcon] = useState(false) + const selectList=[ + {key:'最近1小时',value:1}, + {key:'最近1天',value:2}, + {key:'最近7天',value:3}, + {key:'最近1个月',value:4}, + ] + const Stypes = [ + { label: 'CPU', value: 0 }, + { label: '内存', value: 1 }, + { label: '存储', value: 2 }, + ]; + const [form] = Form.useForm(); + + const onFinish = (values) => { + if (values.tm) { + values.stm = values.tm[0] ? dayjs(values.tm[0]).format('YYYY-MM-DD HH:mm:ss') : ""; + values.etm = values.tm[1] ? dayjs(values.tm[1]).format('YYYY-MM-DD HH:mm:ss') : ""; + delete values.tm + } + setToolVal(values); + } + + const selectTime = (params)=>{ + let tmValue=[] + if(params === 1){ + tmValue=[dayjs().subtract(1, 'hours'), + dayjs() + ] + }else if(params ===2){ + tmValue=[dayjs().subtract(1, 'days'), + dayjs() + ] + }else if(params ===3){ + tmValue=[dayjs().subtract(7, 'days'), + dayjs() + ] + }else if(params ===4){ + tmValue=[dayjs().subtract(1, 'months'), + dayjs() + ] + } + form.setFieldsValue({...params,tm:tmValue}) + } + + const onValuesChange = (values, allValues) => { + if (allValues.tm) { + allValues.stm = allValues.tm[0] ? dayjs(allValues.tm[0]).format('YYYY-MM-DD HH:mm:ss') : ""; + allValues.etm = allValues.tm[1] ? dayjs(allValues.tm[1]).format('YYYY-MM-DD HH:mm:ss') : ""; + delete allValues.operTime + } + console.log(values,allValues); + setToolVal(allValues) + } + useEffect(() => { + const tm = [dayjs().subtract(1, 'hours'), dayjs()]; + form.setFieldsValue({ tm, type: 0 }) + const stm = tm[0].format('YYYY-MM-DD HH:mm:ss'); + const etm = tm[1].format('YYYY-MM-DD HH:mm:ss'); + setToolVal({type:0,stm,etm}) + }, []) + return ( +
+
+ + + + + + + + + + + + + +
{ + setShowIcon(!showIcon) + }} + > + + {showIcon &&
+ {selectList.map((item)=>{ + return
selectTime(item.value)}>{item.key}
+ })} +
} +
+
+ ); +} + +export default ToolBar; \ No newline at end of file diff --git a/src/views/Ptjs/Sssj/Cpu.js b/src/views/Ptjs/Sssj/Cpu.js new file mode 100644 index 0000000..e096676 --- /dev/null +++ b/src/views/Ptjs/Sssj/Cpu.js @@ -0,0 +1,123 @@ +import React from 'react' +import { Descriptions } from 'antd' +import './index.less' +export default function Cpu({data}) { + return ( +
+ + + {data?.cpuVendor} + + + {data?.cpuName} + + + {data?.cpuFamily} + + + {data?.cpuModel} + + + {data?.cpuStepping} + + + {data?.processorId} + + + {data?.cpu64bit ? '是':'否'} + + + {data?.cpuVendorFreq} + + + {data?.logicalProcessorCount} + + + {data?.physicalProcessorCount} + + + {data?.systemCpuLoad} + + + {data?.maxFreq} + + + {data?.cacheSize} + + + {/*
+
CPU
+
AMD
+
+
+
+
+
+
+
利用率
+
20%
+
+
+
速度
+
3.15GHZ
+
+
+
+
+
进程
+
20%
+
+
+
线程
+
20%
+
+
句柄
+
20%
+
+
+
+
+
正常运行时间
+
20%
+
+ +
+
+
+
+
基准速度:
+
2.00GHZ
+
+
+
插槽:
+
1
+
+
+
内核:
+
8
+
+
+
逻辑处理器:
+
8
+
+
+
虚拟化:
+
已启用
+
+
+
L1缓存:
+
512
+
+
+
L2缓存:
+
512
+
+
+
L3缓存:
+
512
+
+
+
*/} +
+ ) +} diff --git a/src/views/Ptjs/Sssj/Disk.js b/src/views/Ptjs/Sssj/Disk.js new file mode 100644 index 0000000..4b80956 --- /dev/null +++ b/src/views/Ptjs/Sssj/Disk.js @@ -0,0 +1,151 @@ +import React from 'react' +import { Table } from 'antd' +import './index.less' +import { render } from '@testing-library/react'; +export default function Disk({ data }) { + + // 工具函数:格式化字节大小 + const formatBytes = (bytes, decimals = 2) => { + if (bytes === 0) return '0 Bytes'; + + const k = 1024; // 1 KB = 1024 Bytes + const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; + const i = Math.floor(Math.log(bytes) / Math.log(k)); // 计算单位索引 + + // 格式化数值并保留指定小数位数 + return `${parseFloat((bytes / Math.pow(k, i)).toFixed(decimals))} ${sizes[i]}`; + }; + const newColumns = [ + { + title: '序号', + dataIndex: 'index', + key: 'index', + width: 60, + render: (_, record, index) => index + 1, + }, + { + title: '文件存储名', + dataIndex: 'name', + key: 'name', + width: 120, + + }, + { + title: '挂载点路径', + dataIndex: 'mount', + key: 'mount', + width: 120, + }, { + title: '文件系统类型', + dataIndex: 'type', + key: 'type', + width: 120, + }, { + title: '总空间大小', + dataIndex: 'totalSpace', + key: 'totalSpace', + width: 120, + render: (v) => {formatBytes(v)} + }, { + title: '可用空间大小', + dataIndex: 'totalSpace', + key: 'totalSpace', + width: 120, + render: (v) => {formatBytes(v)} + + }, + { + title: '空闲空间大小', + dataIndex: 'freeSpace', + key: 'freeSpace', + width: 120, + render: (v) => {formatBytes(v)} + + }, + ] + return ( +
+
存储信息
+
+ {/*
+
CPU
+
AMD
+
+
+
+
+
+
+
利用率
+
20%
+
+
+
速度
+
3.15GHZ
+
+
+
+
+
进程
+
20%
+
+
+
线程
+
20%
+
+
句柄
+
20%
+
+
+
+
+
正常运行时间
+
20%
+
+ +
+
+
+
+
基准速度:
+
2.00GHZ
+
+
+
插槽:
+
1
+
+
+
内核:
+
8
+
+
+
逻辑处理器:
+
8
+
+
+
虚拟化:
+
已启用
+
+
+
L1缓存:
+
512
+
+
+
L2缓存:
+
512
+
+
+
L3缓存:
+
512
+
+
+
*/} + + ) +} diff --git a/src/views/Ptjs/Sssj/Memory.js b/src/views/Ptjs/Sssj/Memory.js new file mode 100644 index 0000000..7468d3c --- /dev/null +++ b/src/views/Ptjs/Sssj/Memory.js @@ -0,0 +1,104 @@ +import React from 'react' +import { Descriptions } from 'antd' +import './index.less' +export default function Memory({ data }) { + + return ( +
+ + + {data?.virtualMemory?.swapTotal} + + + {data?.virtualMemory?.swapUsed} + + + {data?.virtualMemory?.swapPagesIn} + + + {data?.virtualMemory?.swapPagesOut} + + + {data?.virtualMemory?.virtualMax} + + + {data?.virtualMemory?.virtualInUse} + + + + {/*
+
CPU
+
AMD
+
+
+
+
+
+
+
利用率
+
20%
+
+
+
速度
+
3.15GHZ
+
+
+
+
+
进程
+
20%
+
+
+
线程
+
20%
+
+
句柄
+
20%
+
+
+
+
+
正常运行时间
+
20%
+
+ +
+
+
+
+
基准速度:
+
2.00GHZ
+
+
+
插槽:
+
1
+
+
+
内核:
+
8
+
+
+
逻辑处理器:
+
8
+
+
+
虚拟化:
+
已启用
+
+
+
L1缓存:
+
512
+
+
+
L2缓存:
+
512
+
+
+
L3缓存:
+
512
+
+
+
*/} +
+ ) +} diff --git a/src/views/Ptjs/Sssj/index.js b/src/views/Ptjs/Sssj/index.js new file mode 100644 index 0000000..f8c0fab --- /dev/null +++ b/src/views/Ptjs/Sssj/index.js @@ -0,0 +1,61 @@ +import React,{useState,useEffect} from 'react' +import { Card, Tabs } from "antd" +import Cpu from './Cpu'; +import Memory from './Memory.js'; +import Disk from './Disk.js'; +import apiurl from '../../../models/apiurl' +import { httppost,httpget } from '../../../utils/request.js'; +export default function Sssj() { + const items = [ + { + key: '1', + label: 'CPU', + children: '', + }, + { + key: '2', + label: '内存', + children: '', + }, + { + key: '3', + label: '存储', + children: '', + }, + ]; + const [objData, setObjData] = useState({}) + const [tabs, setTabs] = useState('1'); + const getCpuReal = async (tabs) => { + const url = tabs == '1' ? apiurl.ptjs.realCpu : + tabs == '2' ? apiurl.ptjs.realMemory : + tabs == '3' ? apiurl.ptjs.realDisk : + apiurl.ptjs.realCpu; + try { + const res = await httpget(url) + if (res.code == 200) { + setObjData(res.data) + } + } catch (error) { + console.log(error); + } + } + useEffect(() => { + getCpuReal(tabs) + }, [tabs]) + + return ( +
+ +
+ + 资源使用 +
+ setTabs(e)}/> + {tabs === '1' && } + {tabs === '2' && } + {tabs === '3' && } +
+ +
+ ) +} diff --git a/src/views/Ptjs/Sssj/index.less b/src/views/Ptjs/Sssj/index.less new file mode 100644 index 0000000..3706b15 --- /dev/null +++ b/src/views/Ptjs/Sssj/index.less @@ -0,0 +1,16 @@ +.resourceTitle{ + display: flex; + justify-content: space-between; + padding: 0 10px; +} +.echarts-resource-box{ + width: 100%; + height: 440px; +} +.cpu-list{ + display: flex; + column-gap: 10px; + .left{ + + } +} \ No newline at end of file