From 825a0ae95a8dc4860ea8a6681425855b1bee997f Mon Sep 17 00:00:00 2001 From: zhangyu Date: Tue, 28 May 2024 17:57:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=96=87=E6=A1=A3=E8=A1=A5=E5=85=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nezha-docs/docs/.vitepress/sidebar.js | 14 +- nezha-docs/docs/public/dashboard.jpg | Bin 0 -> 102520 bytes nezha-docs/src/__docs__/index.en-US.md | 1175 +---------------- nezha-docs/src/__docs__/index.zh-CN.md | 1175 +---------------- nezha-docs/src/note/index.en-US.md | 11 + .../src/other/dashboardFlow/index.en-US.md | 11 + nezha-docs/src/other/dashboardFlow/index.vue | 20 + .../src/other/dashboardFlow/index.zh-CN.md | 11 + nezha-docs/src/other/i18nUse/index.en-US.md | 11 + nezha-docs/src/other/i18nUse/index.vue | 20 + nezha-docs/src/other/i18nUse/index.zh-CN.md | 11 + nezha-docs/src/other/themeUse/index.en-US.md | 26 + nezha-docs/src/other/themeUse/index.vue | 20 + nezha-docs/src/other/themeUse/index.zh-CN.md | 43 + 14 files changed, 319 insertions(+), 2229 deletions(-) create mode 100644 nezha-docs/docs/public/dashboard.jpg create mode 100644 nezha-docs/src/other/dashboardFlow/index.en-US.md create mode 100644 nezha-docs/src/other/dashboardFlow/index.vue create mode 100644 nezha-docs/src/other/dashboardFlow/index.zh-CN.md create mode 100644 nezha-docs/src/other/i18nUse/index.en-US.md create mode 100644 nezha-docs/src/other/i18nUse/index.vue create mode 100644 nezha-docs/src/other/i18nUse/index.zh-CN.md create mode 100644 nezha-docs/src/other/themeUse/index.en-US.md create mode 100644 nezha-docs/src/other/themeUse/index.vue create mode 100644 nezha-docs/src/other/themeUse/index.zh-CN.md diff --git a/nezha-docs/docs/.vitepress/sidebar.js b/nezha-docs/docs/.vitepress/sidebar.js index 436ae45f4..097f39ccb 100644 --- a/nezha-docs/docs/.vitepress/sidebar.js +++ b/nezha-docs/docs/.vitepress/sidebar.js @@ -14,6 +14,14 @@ export const sidebar = { { text: '简介', link: '/' }, ], }, + { + text: '前端部分功能介绍', + items: [ + {text:'dashboard 流程', link: '/dashboardFlow'}, + {text:'主题简单使用教程', link: '/themeUse'}, + {text:'国际化使用教程', link: '/i18nUse'}, + ], + }, { text: '组件', items: [ @@ -91,11 +99,7 @@ export const sidebar = { { text: '注意事项', link: '/note', - items: [ - {text:'dashboard 流程'}, - {text:'主题简单使用教程'}, - {text:'国际化使用教程'}, - ] + items: [] } ], }; diff --git a/nezha-docs/docs/public/dashboard.jpg b/nezha-docs/docs/public/dashboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dc63bc809733712f707fe402052ab2ca298f9e74 GIT binary patch literal 102520 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 z%0D6rM4|YM9(g8qqel!@)cH-(s(wM!EMPBx(j*dbkg3(eK^xq7Ui9>N2L7|*3#lOM zd?dH#tV7DZggfiU_g}eWs26%{h!iO)f`Ng&$I?a8hLi9SN>8OTjqm_2p|^C3d)1|( z2`<{mWxP+9e=CGxpQENQe@AiiR9AQpr0K>QF~^SFrg}?CM0FuHs~P2h=6|1cD6_(J zS#oEAq&Te; zE=J%OaGzbVyN;=;`@FL0m_A1~h2=6y=*iKkHhNh*`P|Z4)=L!ZlyP^nP0Y(B zsUT4hBVYNc#$nAm=W5v#_3nwxmfvQGr;LJ{!Q>qUnVwxg8Tr}lK?|H& z%*E*^Tys;(GYK(0bel_a?`Igv!v{qQyx3CQ_zQ+fKd%8O z7i_Je5vM~@U)~Yr0_#RqcAfnDC)Nq?9NcCnq64g?5s4BN!Lu@+-M*2-iI8KigdDQpN=>HW~+kc&*`0u*%Vet+9K#J3v z#^rjYA(w1Z_qQW6B_+8+cP-3D7M{*b`crL2CZMX;lCm>-1rD^}BcMM#Cf$2Cdk+Bb z5P4B+fZXQI1iHXpU@$>^RtLRwA?)hb+!73^&JD0f_Jm7~D6LtpFh(lF z3pYSD4l^a=c>06BLGWRRO{0aR5L&l+6Ev)QF=bGEB{)A1MO-hibkqMam@P-r`MP9q zQ_Nu=L^XE}Zy1S>(xUYznx>xnN0#L=x8${cU;&Nk95U#0Vie=DGB375Q#}>9J%Xx#n+hdy>3R!-vczg=VL-@b_>N&UAau|1+wnfccuEXIS?b?{%1 z)@k}y2cO<*Dmr}Uk=`y_3!2;?(sLP9n18fgl=qZZJ)#R*t$4B?av<-H#^ho7xU4eh zrw@UsL=-xb1V;j zABrA%j)`x%e(>90Lt_5F3mnPnRBJQKyK6b(yQU!r8`S{WI+)z4Fz`uobIdJB4b3>I z)Ldp*EmEgeZG%FFDzwG1kA6f1Yd>v+tQg}Gtb8K+hqNa}Q_HND%U_gYrf+WRo&%nH zXe}1;c_BAHGeM$X0Wb!I3b*hoT$qFQX<{0}>-3YR4Gi;f#jJeEC30)jz`6y~H**a9 zs#h;*06T^V6f)8YP_F3ju7*924)jTkF@RFm{1F{g1s^nD>*vKo$(~94LwcBvIgRiy z_cwMsA_ENsb@JF^3Jg^|KtcfC=)iuf}Mqv7G2QT@@lK3=D zFTkZ!64y|MT>LbH&v6<6B$zQE`g&jK?yvf_Bg$QZ6Vj2x{e4Jik;V>{Oe zgWx`R(uTOBZ8psBBwnzVoJ%5BNLH&3>X{meI7x9?-}0o;_Oa;3#_FY@{n*@N5dFI| zk3P9-bv+)pRkXfrw}>Kf42}YUKf_e)in@P7Ir=0z?ihz&9Pt5p$I~{H?{AL5vSO## zp<1Vd?C|h~`SVbV;e}Lk%h)W8m}sr_t{|)cEyzud(dLK00BjcfH*gE&-vYP-us@r&RJ)j^PaQr`~1Or_GYjBeRj!yzR%v@ z&*yWy;a$2aaWjDZevqT@6{2ilS{9vU1@LlTJCP%srO{DT>(w0u{hX)Jd`>XWg+6Q~ z5JCt^mSdI8{n{jOD0OkHnJ-a2`~L19^wNL#l1&$}yrf1CZ5f7s5uV{>|0P+zm>%-m z(31VYomD3h=)WVFEcurt=|X5%%#~f5PycS!|K7}lf3xanh=gZ1UxqtuNd)}9D^e>T zpd^y~{5!0hf7HMG(V%jd{~1!-EjM~+5Pn=$*+)ze-=X?xY^IvP7PC*yHASQ(BaKzzC|7GDN5^*%keb_!h@l3kBE9NRTy{I;%fA(DA7H$ANmRbPF(+on9@$>>ugx zyjjI|nk1fhG}&o5fBM^MvPH8|X!$V}@=}<7ME%hjL|tQ+o1QO1Knn**<(hT0}* z=$qL^uvXTq(Mj2Z7gb3RP>=P4C0f{ZF6f;=?`Z0~SB<;(Wvp3JAT}guA zk#%PFL0>K)LnAZsgb&|Qx6Gi4^FGVFk`>c;P-SF%+ejPjjblICOnW2Mxe?m2>c!Fr zQ7D6pLZ_>2zEOkU+DTJpB=ww=bO&Xb5YxZG@YrLUB0Ie4Djcg9RA{un6JEL4sIrDt z`b`VD^`xe?S!dnA)LZ9d!=(#y^A*o_4p}Cbf@g_2@=Ly?R2@(46fD%xOW0O(m;Er& zrs}lLZ&^XrV~k@P4kouqnMtlz;;SD>dfr7n4p)U#*~ z&ukI5_|*?KVo=tg@8ZNyfPLI0TKey+&QW8qI7E_2OG@;b5uet$Jsd%{BPc zLC6-~&=LJH!M0+YoEe^4VmsOUe5<2_m8hEMo*p6Pk2s`sj#JuMiD-(Z2{%8B0=%#J zaxdk~<@~-&;}t!2h)>Bge*{KrcD5x`6Y$I4C?bo|V?VeV8>Ts-2m#7B7wf8N7<=XS z)q6JbWmjtv!MdFVCkzuur($HLvi#439wIMeOCS;Th8TG=q(~Nm>`9+~B2R?`m;ue2 z&msKNPRF!AM3IUE)387F45_LBWIEf}!tvOi0V=!xPC^y|MT>;O3mH!uIz~rq?n@yo zTs9RVNm(iuZ?LK5!q8x@#LKMP$B+Dy&;@rXbDAp*I$Lwiu^kdy4bpNw5}BKy6O5AW z3F-$%vEA5yUv5BP;~{nH^5n8kLckYzqSMr8t9OG#o!$4nFeJ~Q4-T}9Ax|xy&s3jNN%XB;#l?iP` z<+vm^#VNnPn;WpM`N(z6OQm8i-RB{1@%YI`JxQZ#8{3V7;$KpW@}onW;ok-p*Da5e zs_mE#-wk+{4K9WNIj5x4M@bjcbDQl#*6CdJy$aoGT3RaB?J7BaEzMY+~!`1mI~b^ed1%yX%(U@g4r( zLG=If_TR5u(lnI^{DL2CVp)b4eVq!7QqFq+wL4$@Kg_%T_xdk?l>49IMzJNhhuAtE zhu%pM9M(yy3IQDc1x}z1-2canH;2`$&(^m4Y#66ZO0t6rT(?Y9l<<~kW4pcMDOn#c z+)d)ju^xR&OBg#hl3jUIB}FM=c*(XRvwM7+8!11y)%m1pQQ>S;D&>X7THeH+HYeqe z)T}{#7`>sc1n^}ln@xO+c`hCh< zIo=*UPhL|j{e73jm!C2(K({FLqo!5k7B`HQwvBmW#Mi?4=B6ox6 ze_H+5pTmD!4_hdgbR-mPQmKmx_|a;J=!-4j2;l4SdLQ=iSzZPONP=VsF}zO_FXLMRN2EP=$7HJnH2%J8 zkOtI%MFL{4&7_xi5?{wKUlmiUlvOPfuHX0J#s2sFogj}pFVB;{#NMjQZdr&ZZ2iE> zX=iT`hu_AXRCN~}OcCZf`wA zQQpT3!)OHjcJ0baZNvkMg^r*?+{`nEoR`e$(>Kj5nzc6DOj z1wh6VbZk8sT{|H{sC<l|$c4ml6M&zBgk-oF_Dsi6I+?zq@>@v9QZovEy zHa#8s@o4f84xeFUD&KnPiT1T0A62`fiZj(&M+(z7wJh1rbr_+XfkM$;fm#wlZ*k|) zr|A9bdlIUKewOp?+u#=rxL-W`ylzt|)J-aHUlG=RZgW#_wiuDpptx?zHJmn#rPaG_ zM!40#BCSo33VZ)}`~R6USrT&Mk~{Rm#krl^6hTry>*cbNUj^xZ&gN^aEQ`1* zGmP)7oZ8;VPmOZ>Nv8fk zF!25D7?x|P?noAUW!5UVy3bTFkDQ+gy!b-K32VF@N^%_(9flwtZHc(BNZxPShFaE1 z#2NbBl*hOEpDFvNzFBeP(;#c%>02^6%4U#SA->`O88tWzZ>elG^L?m%$$fdXP`oOQZxe*TZ^g443d`d(B-Ru=`AP#5xU_y64k z`}0ED)bx-G_v!4Yr=_J;9mB!LSJ%{1U9DsX!(aecYI&_IMHKX{Dv}EL?#eEs>@4-> znT9ZzP=WmeE-BwcxxWVWoUlBWU$uMrpF2ybD z)3xtPPXohycqs1+wWH^YWkA~JpTVXB1C)9ZnKBUsy|9dO=^Sd~?m3959UEi1duRV$ z-`-nC;`%(ID?QE>7cegQmu$LDrKeh^VO!O#6O=+sh0|f64je9_g8b!v+$O4h@$o4+ zd`VrY$Jt5>lNZ>|mUeO-|U zkVx2ZLYN|?Q`RmtzikN&nGRm4P`$hHbF>s|2e+vl=nQA?eX%~00pjSU7pBs5gr-n4 z1t2tK4u_*52zvIvU3xF##cHuqjMMAZN%9tny7YvKShe0$%i4a9z49q2gQvXIyU)b8 z{>{(`^~O>>pcr{d-KadM$K?TBa%CMBdWZ0J5c<43!?B_=a$p~NM8^4S!Uwf zF!^TZ+7q*8!~cihV0SO2O-(0*Xp5n5TovQIJD%ovt=+L@5NsjOSDZ|OW(q}WzyxuS zp55mkB1J9!5O$^oQUMFm9!?+s>q(LC=uZ`pM z_PO_1r9(P|>nO0Aa!)APgA14Z5;* zW!J9D2Mh5B@{H)y-a*h>%(%BH|H|hV)03yv)3jP?o6dT0emaY0s9LNtH-6emVgSP; z%;D_@rod*GVvLFN^ffpFX~}cDl&|bM>H)fC`-@JiT=FD$x>r0k-&Yy(l6%CV#5H&@^_+)->Q5UA z>(=pfPx4$=ro(=niZ`D6&7wWjmv85dmOk1NpofYE2fK#HT7do5YfxhzP!Hl1s~LMT zP;WG{J=Y?(0?NyS=8Tn`=R$2iA#}bYNT!y{CUmu`+-)CjQn)*Lt2erSa#Y`kJs7b! z|K7M$a5^8l*QdfdlgfGKc-CT15+&&jW(hJArtC1aj(I;+C%t3cB-p*6zICGn1aZCK zu5x}B^iy=(#||EF`!vIgW4K!E)dXjy z(_LrG=YF7s>1XFiYx+iAioMO}mQNwSoOmj=IIx#II3MjfaHCxfTgQ5s0n5kjcWxx& zbtp;7?#>RCSPM<@j;V15k0Red+LiU)(Bik&K~e*1-y*3pJVi<~QmPOs`*@M7g1pv$ z0RX|8&S197n%`%x7xof(6b6TvH8TvnV+Z$7Cyy~R)pvO9l1Ep7KBal2yAPw_8Xr18 z)K()^b>?dBRB~s#=bq1%=jgl$k&+3MXXvsHUvHS^)OtEI>kg*=D3z)rB8w`pQKO|u z%9aOJ{=TbYTUQ_1qb<~F4tj6lkvj8f)lhROdby~ups18e43KoT(hUp|(PBWtX80ZS z*m>FMSBCHAlYgl8O32SvvakM8)z|uyw!sNU$5qRo^#J2ydyC6?^>!IqgfTJP;a?x; z7rhC@3|ZVPhZu}8F52_d`*Yvf?B2pQD2jL}(5OoHvDaLXq@L;flfnm338Ug>AnMFS zmdS@KVZ}YBl*>GAXYB&I(#Nwo0ZiOncdKI=(~_&c2E*KAn*|A^ z@pu(*7jCGFLRm@@KS99qF<{%@cR8+o`{C+q`G-E?kui}rYZ&!MW>P@umaW{SP^Y4> zQc8n_D;~M5ot;8*%8Fr{2xF~s-*c(8J3*}$VQvc&y}_kT@Fka|Z{3i^$jAc|>BRiJ z9J&`s(JU}0o|S)gq3Oa^_)%!aEeX=rUEPB*Rd2|eF|Hhl6QF?}&HuJp%!XTkt7FO` zp8lScqQ||mp@Z@WmEG28tC|$iIaluL(%kY71_Z|R10IKi9oKdJXA@{%899>FLB2#~ zb*y)Y9{lw>*>fW+<`w9Zh;QqYT+j60I$1nwM``W*4U^6DlzzW5>h_gyM&&pXXb!@~ly=4ct`&$G`vPZ1mq&ZR?DEP8M>cZkQgOU31?-dnd2 zl-oIRTiHP5YF%bB6n3M@n~U&?G09D$dfJVG>Yz+AFtlyj`IRiFg^u-H$-jRi=a$Ul z;c&+_Qq9?4BECP(A-Xw+dASmGGWFp>2=ej`o8Nc+dgr}~*G}@-m#n7c zsP65h-h=ag!(bLQbH0Xm0FvZFj|G z{dI@eU-m!jenn_9F2Ba3hwCPWzuYk$f%hByXy968p)EU{el#ehLZM`X&k96tp7@>{ zbIHl0Nc!-ro!BU+1YK45B=XQuv98LvcVXsbwZeB{NWkN@*A%Ukzki;PB_n*F+?q{Uw2WzGZ^J`mB ziPJ;e6&v8t(Q4%m|EZi(fnfgGjOS}wSk%yM*+gz*=kvfw%~EInjpsugtrxdimz`B- zN6OOSIK853PPw>SkMFv%h~aaHJlf60ID8wMV@`U?n&JR_9mtFgLqD{cdXpm4a(2)) z_&`ZVS)l4jydu~gLe$fz;-h@bHL=*sugL0|FJL*y^sr>QF`NQ@vIOS9WQQC~ERKl9 z9nXPt2lQz(VOV!WpCs1IbZzaznTA1Ra8AGs5S@!hb_kZM{a&t_!Gn~L_@r?KrWN@< z>q1wPs=`x;6AR9#d;@FF=Fj`?Pv^K&o4mnOMnAdJfX8}evlmn0VK6mxzh(pm<-P<# zs%p$e6s#|pBOZ+|qg`JF;d)V(gHEIVw}hT`KIiLuP?=CAhK)3+)avl2TM|~!a06^k zHJoe>GI$ZtH}y}@~}C|=dWb?&jkQC@UNd{e`wgNeiQE|IJn zW$Rbs{e3Z4P0-CW^ew(t9biv|LPcbezM|{7f~S$%ne=G_J~S+NitD<6zFSKM@zFZC z^IAq0zkg+Tv8KnwL?_)~v93JQ*NGuxp%iMjCn&O^UsX3pDDd$Pkm_h+E!;6a02C74Tg5(+*NpR|d$fv837i+C`VX`Z*B zYx9V^ShLn|&_!(QyAcC~7`!Y|7u(YZC#5^LmHJufI4apqab-89X@2kr1G6q{CfjeY zMb_neCLxv z?l>xZg1|^Bh{mnq_0}t~0M`cEG#2F)w5~b)iPRlx6eqa!XK}}I*7M}o+}Y5xor?WZ zS~{VhpeacqUGX-qRyjy=yzAL_Up_pA6|OIYl+k?BeyDb0tgDU$6sG!;o zVzwQaWzNe^V^#CUj_=lUJJD^Sb%{Zl)rV>7L1uNj{f*{OpjVPWHW{g(D6LNqUKpp| zzLmZ2McS0Cy1)Ql8V;4F##qNS(wOrRD&E&BW)0f)JcCp8UiGjP&hi$6M?NNxmq};j z6V?-zW5R(Y>O^uQ66x0|rvxz5cC>OE1Si#ZByML;@$UD27!+GrorvZcc5C@31tk8*lRzVF?&w*P^#X-|1#OT1r1Vb+BrclLql!m(MUq06O!|#v3wG@4}TXjtzJ*N4nZ1viWor`QD)ey2y%WLnjytQSNwqQ&dDQEw;Ub9r_u%W6iiFS@dc5 z*=LO|l;v7dc`3QA^YLJ%=7#}rp_y!&Q!PF^S{QN{B%2kSFp|Iv2*0--GNA~&5WeoZ zg$f@Sx%94tn7J5NLMjaNp35!n_ySpU7f}_I+g^&=n{~SNyeG#-U9wufl(S9nu?a=` znwSA)CMYh`kzfVQK7EXcaF)Huy)v)G^BHgmt)F#x-#X2xA!*teWgLQq5Qbpt%nch? zLaJk{lTIocA1C#?#q4d^6ILJ_yis9fBl&8oUuH}sl^E$7qHkQ6u6s5BOCwRLFA<>y zF?-k-5=q>Lh}tM|-S@$Z^ory-D;xrp$=!ak&(u`gH@r{94p71 z$=WTQP<i@ zLB8IoU?nh;mp++c>;CaO8xw2+5m%UJ6sqaEy!Dv)qZ4y_)7Q@^>gC0_d}lbyw!Kyvkpiab39C@FxcuAiI&jkV7rwG@w&f=MY*-5 zo-Khg^c_@wY+YtYI|sy>S$UTc*&(gV@7Y5Zwi`|Z?J8IMDy+oyT||RKkOV<}c)#sm z?n{bl3*UdSO=rkahhFCJ@vxZDiM`BDG;UJT?s!8I(IB44(dacpie7CWm%EZaeR@TC zAwc`G_!t1H3F@YT>$`EU0+&lRcT*jD=JnQUU9=IX-!n54Jla4_7>T^-qOmyfvP^kB zy_{Kl(b9kC`I4WqVUhJLD_?+_hLWJMhz%~5=QTHB^1ZLgU4suMiO%C?7$gx!s~QY~ zo#i8+!XkA6DcSQas$r~PFcjO3ti6(5fs!Kj^EICw8~8O~24I0HE*~7$ei(V5(}Bu9 z?zT*$2C0XgDW#+&9uJI8rE2Okk+l(NU2i^@oOoT?_A%Q~qfb9X-}hRVd0>=Wd8-*n zj;@-iXpM6=ai?(F+tL8z$8q&SvlJIjP{9ZVsIgHx$m|5}`7vh3kT$8A4p>vtGc6?L z9yll9>7XG=$V(Q=KUE{~uM;4yMRJL56}QiSF!J1>3?sm70|pGt69ba1qY4(}dWs5* zlMrx))dN$J!Z$2}u301%@Yrxf#twb~vhG&BcL>1$@(uzI$4duUkgEay9@m!4Tdj`% zG-ye(sL=5C0%7d>Br!%p!`9V#xKB%l-H$Otk*bFdGZ1otI?{=wx0nsdBP5LS4rMm% zwtGBf`RF`4y?#Zo%#Y;++-hG~o%YX)A8_}-o=T1k2q;9SvDMU&wf=m-__40nSk)I@ zQ-?DiIQ4H-%IfZLR!>i#j!!8l8V?qW_N%tnol8equv&=9O$gMsTT zhVB#I&7_~+L=S>eUOzVFS8de>s~ z(^~H3yD_CMYi1Djjnxla7;(Gz%eCvh zva?Z$kQjPCk;&X}=X~jtI4?asuC)%xl9A@*mk^`}A-1#Ue+zYUxVPBS8C{6Z6nn`H zYZw&>Mk`k#KPTfA5Wqkq>Hcxq+^C%nn~><91MLx065YB&W=Li>nEPtX$5T(2ej3 zSsvy0LBj{@Ip-^dXWsRch%>M0(r3lOw{SfhU^wmhz$=|99U>MRO+V4>(#m(GYGvh$-G}=xNQm_jS@=_S>e{q5mmbaT zn;9tzSd56O4OWmsWn-g`)t;_f`8+nGj(T-r4L!^;#0M~Zdfr9jg$_co2NFSie2@v! zkcc;*T0#e!Cb`5v3}xUNaM4fF^BrGYb$e`(DGAhGKB0fZ8%A|3cbRX`9@5q6ItLOL z>6kdCD}fQ)!p$5ZjG@);P`nj>t8MM4`P~Ib*p_fCfv`FTp@)CLjs4pQj@|7YA5cd_ zlH5KV$$!8KI)Q_oTL{>Kw)VeV<#x|_lCtV9+@~h4<%wak-ePTb($3d;Vn%pOy~D*q zAmO4?MW1E|e+!8DOkb9%Y}CRm7I(2$e?A&=VIX?{B}x^0=1CHL%@|h<23tG$1&SB1DV!G4*{F(ZW~d5Yfd9Ft zW|qapHv&QCIBH2pOTGezTIP8h;_$U{h|x$FO16gG?Q!!t97(16^FxRc#a_{={k2&1 z(NOYIl86N`ajdM%GqUfM{k`enHlTysg6R0N^YHAwI_4(GZZ9sUoI&YunTYa2hUw)s zqS*cV(dQ_G^FO*#yB2g5k5hY9YI?(BwApEHgiaXng5}aoYB)B!!azO=0%bs=qORrk4^M)84oL zY88?`TVQY}C}xbtq(UpD3U}1{89Z}p8D0||h9<^Pz zYCX_Kr636f3&5Ktl|6NhGaw?lzM-8;NA4KBeohutgx%&g7dciz_w*YX+*?jGWiDjv zi`h}tA_EGmOipVrAg5CRq`=2-8Vki;+DMDe`TDxT!_sy9q?zG@^~}`V=^G7i>h@!e ze&3Z(DI{cFP)ea<>7MKQC2!rEFO>xd)hd6+zR~vxalWFsTu)12 zVqd;uRD_*8ZkqmGF&QT){Io|0)S#bZm&xu{vf~9!CUM9>L>3KvgTl^)fxJednCblp)#b;v!RfC;%e-$voGqG_cPe|@ zHl_kom5h4KKN@;N5Y>qKvrRUZi-!-t=0S=xjOv!daJS!8Hajj1Mi?vgMmO}lE>6Sh z>RNM@QF$^T%8+e6?%@^gLPeGsa|hXiLTwomgq4l=G^JYPPd+*g(k!28hg8 zgLb*+PqePsa+DsLLo{(i<%?ku`G=d^lDd$Uh1*r_Y8yv_cOK0duk*;8Kr=bHOK|lL z$*8l%rk0~yN8O1(Lgte!+S{l&{4^g#m029#iOZ+c8>5sPtxN6${He1s+EUgy^vuX9 z*<#jk_AZL?c&Jk43|)@&hNV{RwG%U6~h=KNcC+m*1(8B{f$jmisHPV8HyZQjZTn=MT}B& z;%l8*NXDho_X7}ghFn=|i0;Fl?tlhv34xw|uMR-CY!oeA_V(=<(luY#r<-w&4oH@N zQ6+)grcFh$0njOxz!@%jLdNw%ogwV8yV|gnWC)44V--;B3M(TJ{AYF3Ves)n?HkCC zKx+1a%6&;nF(;t+aNXtn3}SY&weW;(1oB)Vxila50b;C-)aYpKJic-n+uE^Yp+Ig| z+!&AjZLSiD`cnMX(7)w5Xflmsn|RbDB)^FDy1cw6Fr}OxsR@Bd>ZkA+u1)7R1kRb0 zTV}t&Z`ua2C7iA?deW)IpVuVAzYDE{O=FjHH>kDHg~i36Z2OM>5Z0~xuB9{d6+kOO0};+wPs$< z+-5i6{CQH%i@-QlKg}}1SxO$JoM%ko1X8DG-Um|mWgn61YZhzX3Zif|{=gBo*;iz%tz91t4+PB>t}a7x!<5WzENikfaWETfU+S`C{~ha~FWv z;U#Sk5*ki(>NEV5-GHN|K=>OEp7TYX&E_*EJYazu{CIuKzXTv7qpEsJLgWPdevaQz z2%ZYj64tE;vu-<#t!tSZ{GlV40_y%F0%6K&Wmok2c6ei-i33W6!|4M#nh#$uDoQAC zJ|1M3QYw0XQxb;b6UtY2?SHu~mu}M)aXdXz1@WvXTq%6PzM0~EG*rJ&DJx7-vJFQY z_W_$-db?{U?1dOu%L)9l{RV;Bt{4UCj)Lfd!S2mw4v*enkPa$}ki3_CyzQb|=&W~j zC{~VH!QL}iHJUUXVj(e7>e~%5I;#v>bc6i! zSvVhI-0M_%W8V6Ihyy)azT3+Rip~M zukwbJtbj90--bS!$rR$?zh-pQnKSWJo(z#qDom1u9Z|O;E+yy_+Lrtp=2=9$tZ!Zi zO7WV>Lq2!|_zuD@s5?1jg$8DyX4Wo=6rQ_svO+2p{6=zM3W3q{Bf z%dNm;!-79exQ2T{1T06(5qcy5{5f#*Y@)Nz*4?9Y6b+IpG$U}FoUZj!CD()FQc9Ca z=1vxH3D<5mPgT3R>Y32xlA>3mTPWQ5vV}u9%XS`D$E=L-j>?pfr<8mEb>GwQ4sM(F zR22!V3$D2aVXDD(+@L~|E0+&(eE!ogCnBd>Cwba*CUP;WHVW$fZS=tBMEmjAa=D!a zTMX#qk+aQ9;d%y`+3<)x;yoQW@ckvLd0)$%4grQofJjEGJV*!o5pzh~bcFAQ2?n>E zd(8^}hUbMx;vx^J&igyNV!9Hg!whm^)oH6%P1?*5t;dV&aAUg`K(ieg@A~O_YPvzu zZ>_d%-p(bHD7JnI-We!5SypA}y+70IuJgdELMFVf?@s?`>)EURUisCI9N2ksTv8%a zct6>bse?#EBUSG1YSuajd|7h3c0gDDj1SCz#?yTL?NQW*C%GeKV?ObtcH<@sV{CmG zar89VH7dMm-q+%;2SS89>|*lNG2CG2!AuFnXjdFHE;3UImCbtH)3Q!w7`pk(x!sQV zAXXHMdb34(*1S4oe={MSboe(-)}E4MFUuGsPYXj^=rhhCGENOpjPUJv)j?e`;Eq)>D+LWY_F)myotB$7@|WD_GTj8Ss|j7+*)$8|`u@u|Uym!# z;FquQ(cKq-=^dw1XOle6Ee^7e#bhgaoYc>mxN0A*%W;c@L( zS8wLx_5Jb%u(q{?`Rp#f;R%8hdhwc)*r6e@pI+VeeRVPM@^_hyHn(er`I2#yzGNS> zeD{=P5d^px3Jj2xE$K=2%vT7;gAoI3Q^bf&0VL6(Y8Lcf-Mn{oUDg~G#Nqxt2o6%7 zfz?jCQUp_RR@a?X8THGS1Jw->_l_cSoyoC8n_Jz$^;up>*lK_kzoGXHdRrfwMVi50 zc<`dD2)RctVQ$?a(f`h|Cxk?cvfG0v&!Ei_mOSHuKSBmx1>rq*Oz+?)o*6K+3W8Pr*p?1JqcXQRcOTlZWSWLdn#cvFe z%KHlE=;dx}P5WMye0&I3eOg%1p~lRG)H&KYj5R~;jtTj4lLUIgiL96mv?xdv@P_qqi$Zp(M@QPgP;LE3Rf&?kYgCjTZgG zWvK>{RJu(i4N4Iaba5_S}7e>=6@a|96c zS~&DMHfwZ^5S3pSP+P3LBjb&|Y@@qme|s`IzLk|C%L-;R%i$N`&)#@}`Wg)%eXp-@MU-aN*u*jSEJJ(;iXJ~&-il}JD@0N|`kbmDbCkpm$eayE7{55Uv zKK*3t=UrZZzw*Ch@9$L z4g*rv(yfQAIWIXM1KT{E$xBGg#|wUK50=+UxaYTQo?gbH*UY*+<`qzXgt&i|X);pg zT_n)>d51s1K2^pM{(t;iEH*3p5AHMSx^-;o+;@Dw@wKlj@*t0k0`JF>4XJqrb-OpP z4q)T2N)8FC|A@T*%G!5dl>}}D{nPMQee+-5)r$QMw(D2cuzZJFRwK?SDy5D3fx5I* zR8v_%Et;NAoQ!*FkR=tq3B%_^eG zv!j$RTcP(aE#*>BtGqt|JVI!N(`v?**d@XIgRe?T@92IKA$YdGs_v_jaZPrOA_!08 zSJnN~@IS7rrx@7JX){fIyo?PIcJr&rd3x{m_v;o~hH|a)wcd3HsxqvtC{%qJG^$Sj zWGSZe&ALX9d*4aXP%r-|z0*Dt@&$M2bA;Vscg@WK)KcTOgyl!eh3dJ%L(Z@b2&`nvOypZ;f;&A+>r{!QlpW@V1QY05t;`ERn=|Dzu0Z|(jM zmxtM{&URNp8=96qt{E$uJ?K-z=~qU7PphMoa`#3(!Oz60Fbrq(bs^)GFGk`De!A4r zn5oX&)68&m>~DF?Gi}4JsI@sD9FiDIxO$e~Weld|Ts&@{lhe!IL|I!A62zfcTzuCb=TZOVSFA`V$yF80<_tDF?6K#*1eLo{t5(#bvoGz}(a$|ErA>cMjlV0oDZl~rSCj1gNbuJs#KrcJoG;)^_ zBGS{z*0-0i2d9zRMPahI86e)wjtO?ADij$M7gXNGODKA|@Fgm!KwbL)s^lHl(yU^L zxKK}9P_Vruxcu<5%|~j8ZPcH)-CIdFb0)0YH`2CV45EHrKIZIDpU3%5qP^g&LSNnf zv;05%=YReDdAHX1p+K5Z5aF9+SN!B&<3=FykWb7~rgX<+``hvjzwf$R!PJW-_09ud zViN!=V-5@ZL3D|FE7+x#J1#~JO29?G;qt?=r5+3!-L^$e`lRz({!^R#ffoVu^OCN! zn(kBM>1Qq3JQ1YQer#-95Yo7m_Nn)ElL2|PYn(E4a7?K*FXD2koOzA?2W9W=_MPh= zjEEM07Ha+T_Mhed**~lQf13}z_U&0WGSx~P@ID-PDeZj)uJQb6UNPQD>Ca!}(f#mG z@^4s|vc^9etF|b=)Ry(-J7FvNi|jRV8%a}f19Jw*dzw31Pi2Lj-Om4vEA_4?JkgGo z1@4=r5+#3~-z#)kAWZZfVbHzwrMKdi+GUeA#odQA#$g2#n${w~;(zY?Ptf!JM-2b3 zilX_~hJCX&oASX#sr|6t=SU9KF%Y~f?(atVA(dfA$QQDw9*x2k``4dtM#GeT=ir6f|MJsQq}`mt;{Oph^j}B9Q%etIAD`Qn1$R zXq#&swF5ibY-AG}8_6GT2bZ{{@AgcV1XYf$Ny9MO4tMsRFw@CIpmc4j#u zg0*Y$MOJ`?I8mK`Y-m6b8*UewJIrZ^d^_M^2RPZdzaXp}ABJ6=L8>ZH73lL1+CwH1 zuhOdxWYk&L0%pr<9i4}q26S;n1uo~MOmmh(Eb9Gpj$+HxU2F-qFYV(yL$sqF7K^DiRA)H!wPj0`+DXr zr#w>FL7oHEA>UHl;@M_qU@%zs_7vWqtD^<{&_J1~EveH#@f)Q{^_$IaeHy)qf&NZa(~vF)e;m-VYeaQ86`jUV7H}t!+Tcv|1*VCQ2C7uPP_lTCqA`sGcs^#5ysG$!*50RqJ1S3kmnNYD{=+Zl{ z#`)}wgC6y

WrQ81O+SNu7q{^FuZ=PMFK(u2ejaA?{QqrX*YV`!4W%BhL?r>kZ?n zhwoQ(YM8(d2apNZt6Qc;(GcahgptHb>m7p`^KS>2;Vszw9)v(@@p?;GYApyj!z@>y()Vu5R${yC{ojMk*TIwr-_U z$*PRSpCk(86Y7F#qOkKUYVZS6k!$ANd5-qc8$~d6^`!wrzO=))`qb9ym#r}% z<>!(Pm7YABHBus+=l}Qs!O#HQPj8j(9~g33TpeVC`8_R6a>|z>R$*Xp3WWx9pJ@V?)>M9^J;^%531^G&pmvfu;C! z<=qQ)O%U3MS+<{E?hlnZtO>#f?m)lUTj(BSn_Bc8tKXT`fMf#_OG z-qWY1Fc8DZp1`q{-k9u3yQI=+P0cl5O_cqf(Hk13vC!5{OypI3^X%SDc2MAR-x_@S zY@|bOuQEsoW1AEN|_s5(|@umqMwH7a_x58-_Cr~0PjFOZ!jFR zmg$}uZEXh{-Rzb&euxF+Nlbacv_Y6U zDSu%k*Xg8o({jz!ywm7b-8r_NeK5926~pqPcCVG#R87#+lXW`(o87 zBH~#_e0?v0h7^I@6+&1}F#~;rU5U z^nbDU-f>N(YuhL@j=ELQL8=r{Kv3!c2BfPr0RaPqUPeL<1SIr6I$MNbz<>eiN()IK zNFYQAWu$k6&_j_b=N>heO+bl zYiPd4O!)ZZANe2EKP`qc-l^(qx(u%odvaZ_fEv|Jv>+zl#*R_-Gs?%@L6-ga#`mi2 zFTF>LSso$N633}Hf3vsYvQY{AgV{PoWJmYsQkRp})H15C2<-DP%mfcLzurt7gQ#1) z=dj_L=G1WdbzCLM#oAcQz_T=0x+Jf-D1w2P!Yx$PSQSDn{eG{5`1nrZdTQ`RJ;8M0 z?DhDb^KG{mX#~EWyF~>p>%H?;L-onn0=(l8Uvjn>BMqJwy;ZJm?P_@neD->gKs8pa zCsEG2D9i-3IogqJB93koH$z(O+lrf$NeY1K#UjiXiOkH)%MSf(XmTofXnNBu10X{A zI!_j;(f(~$Su?q3|F0-(kpW}BHno|Xp)U);Jr2Beq9=1OSs)-2v|doSSf~oB{5)~ z=_ZCjbxlI79Av5Y&BD|o)R$^7au`o8?~F@UaDlOkiQWzFszKdP91KoXEM&Cdq)`j| zn4fHzvd@~l@HxiFd$p-7dca71yxnrHSVkPWtM{bW1?4D#m0EhjMr&ucHy&~;m ztxL2yR6+dFifG8(PBKY!IzylMw zF{K)JDd{2cfPSECiz3&Y3aTDmOO>J7Z@qjb$l+pTv5lfMG7925E6XzUX@Pyo;`2_v zXw|7HkG%EHs9R0$*;PKl54=fu{W;|@nZZ(uYf$Q5mr$~zL6^oL$>26gb!`z6Z~$>w zu)?nu^RxJphM^xyCDP^i@NZ7?XrFh2cn7Q9w;EF` zgJJuu7c=`+{wBG0tZIk7^Y%e{<>iwIBYKG=cOQyn$?CWfAzW*+p9qs%?M}4RGxK%) zg=R~tS_<%5RFW`iD?ruO&`ing^L|pQl2(D4`4N)`wZgwaC)7vR)`#n&>+8oJuKvB+ zMDxOmqkv3;>FY<-yy^YgUI_gU!tV7qv*}E&_~jnQ(?uy)^YidStEkkRnqyN2JoQ0p zc^_OC-MT2(JwFzggyQTRvKAFh1yM!bkFBh(GI@>83uKmbSU7_~N}|a`R~Sef)1zxE z+!>eEI~fcZROFs+l=30(PnrrtQ~QH5jF5+C=`%qf%d!xq`P3VJ(i2OfQUo*vq5@DL z6lx}YC)~#ft2>J{yqBD02vklvf1-O z*_{Q`uRr&?hM5>JxLl6wFYnd022n-JV61RudyXUl3W=6DRt&dPs9Sdf@hDx3Cq`g; zEuoy8JPvp~H5iY7dS}`6yRLWm>fZv=n+BtHNZ3Sg%Q~7z zT|>hD*9tol$C(+?{s_uPM?EmW_o&<|7Z!>emCA}+ECUo~vJ*z_D*g8FS#z?=iVacDHy2jLD*1jT^5x|d3^Hm*<6x&+?4li;hi4kC^#1fQ^+nIS1~KLL+PzOowy>vH(|* zMaNnx|9#;zI)Rn`hVbTz?b;#Ny_=q@T8h1^J~x|9TL9jLSxFJBB-oCg&9hR~uLpiY z5l7_{QnQmX(#3TRFRS1Kl+rmlgDodHRkQ`&wI7rEoFVR{M~_T`itTC`w{YoPc&t^v zl`W(gxwkfqRiXgKg3*86cqngs$CB~{eN_+~-CF$X3*qEvGe}EAp%6*ye4YyZ6&0!O zgKVwUo=)cEGz&NGn{{VwQzPcydua*BpT0QVEV=z^sOb^4i!1r|Skj5PL_2Ql-MV3+ zowKrK`rx=mo@KT zTKYR~x<%zB=8UcwhCv~g0Y&-Afs0?{WpH0}EUbe$!dP``gI}-yEsB!=HotP}U1U6$ z_u6JT5~va!e5n(ZiCCvF1agJVI#-*{hy@dkGRysvM8+whr6|Mpx(4OebYh4%&m4Qpoj4k`j(Xia z$1xKTKS0u45jlUNAcP&_C%r(lH0|_4D~a8_Svpu*VVC<4 zz)E$Rp2NBbk+pDNCcQqVYMiBO1Pu+$zAV_gnT4wE3rrPXIF4;7vK3L!6gBLk*E~qH zwDf=At`_+^<5D<{U0`%1FtkN4W8}dIAWN{P2z2ct^6hJw`cx3qF0{%iQPor97Jnqh^Ae{E#A1;4EFzs83~;XKI~4Hy9_Npdwp zc?SXPmpU6y7WZb~<>;OwLs-_Z#e;-?0u}5$h3$^rX-t&8=TqZxU?TrBZxn=3KjCGy z^rUhOx9l~GPrQ_q&Wg3JPD)DeIk2doq-O?$U(DLpRg62(cq^Tm$6{_Q<3e`GqphMN z^<;fQh{=c>J({*VH#(&rZ}<59Z0d!e)G@Q3PyO}`Xwfq*H;9wXoGxHRf~QJ8zni;X zN}{>#{5->RMQ>^gLH)!`n&C|!K=G3CJG;X*!SaR^pX9~R!j+!Ov^osS+ahyN8ZKA- zWyGyRvUp7ew=dPTCou%6X?0A;gVNidkV0pcj1kqY zJLzXD1L0NB%AKDTZ^F5=P=-7xzqVpbJ3)MPytsHcUjT``%A0KW#8@J00CuBKvfWb( z&aK!#mAaETDRr|L|4t8CNYa5=?(?G}94Sf>oL~#z#)y{9F3?4c=W(PRA;UGWvYLlz zyEeS~leM6mV5aom3v3?HXd9fDS8%a75TB^GfRN&uR8Cjx!d+e(B^rXg3#s|pug1c8 zy9^QO{3v806)(d@anH}09MC6o0*qorRCs35a1Z!B&BiyRt0(`%>dc3aww~Fq23u|e z0tZgJnp|`8Fo_cm3|lVZ!X#<0Olx~st+c$mlL6~k4=`lkE_+)Vdle(QxsA?KhP^H- z3ctVL6E|$q4fK(3Z?R*~{;}VgaBbL*8ib#=j?*)HG0E!n2@D*P$&CAB) z#~z~uy9E0k77Rd~V4!cxOuwqlt=jq#K*SA~!gtwE%W~*$uSHgtMT9vlXW^(kcK9JH zyl=w$pA+%kH%2T2392kO;^UW_GbMGOdVYHZ1v~hu=t3ukjB+xZQnFXtG~JMA@;N(~ zRKp+^wQaJ>UArY;YFCHYL0yKwSr31tQF4=mEzA)QGEWXvAbJOUltv3hMs$W*56`zl;sJ3skwmZJJG`m5K3W1%ij}mie`Wh{u&qYU$D6Zz^(#4!k5+ z%5+vX0UcOlKbrU7XzVgEfBhc&>`sloycm}sa`F|siVaBc(yYW0$}=`;`W7PNjo&VP z=aA_g6KK!8%}pvesxQoJW{6vf@wZl6M;%m+egSdWveG5&ar|x#4)5XDqBR4MPrX(Y zmWgRyM-l0Dn|d06Gjh0U2~;fB5EzL?rmh`Upv6B@aj=V51U0^9H9E0GN~9YI%Wwpw zg-96)hyiy2B$%mXbgcP@Z#qcXJK*ESVRvkNyfA1y!d20#ad2_0B)i9&%#}VF*HG`A zeK&sD+lv`_-b=Q3)n@c2v$_Qj%ZML;Mfw|*YS_JpeWsiz2@4hcteg!U>2ke76hY0Z zVXzk!2Be3=F{L25o&@KOy{hyU#+cw+fxBvFV|4Tc6rB_|7{OcY^l50iunFd5~CeXVG zkUy_l1pPw%_x&posemx$52*jrmH*>IM!|%_Gkj}E*Vkjh#y9P=J`WnYB}Z>yEIumP z?ej0J1!gL+=ux|7r78sWZ)`S|f<`-wU1qL>YgU5!H*-kfK{6}02-8JTY*FI5I_PA@ z%3PyLEK{#1V$138N=36DbbSlgsYcpK5oDt>^&{Ox-D-9U#1z~-Xd0KxSh-@od_)a1H%<2~@%s?+`CHtsFDmNa1m@ z?Fw^^rIdc2B;&5{q|}d-dD_MxvEDFE&c7UJr7155@Jbv0Je$E^4z$^>{Qz)Mzy5hP zkv|Xo@5}xX{XXwlNmk z>_7G(=TKi7igq)}8m}PAZQScfeQBX)OfROmxURUiOvhEbm0YUp4d&!j)-^+4+Wv3X zkpEaK{@XR=KZfGJxWSdg<=_eZs<>cP;(q+pvFug|WiJwBN#<-5fQ!9Z-VK3OtJ)EE zG}-p|ubl`sloHnW^=`+=-M%pPL-Xy3$-OGOh|mv5@4Jbr8p5Y7A1;gH<`?4WSnrfH zvPDJZNxBP#;yPNFD;`x7e%8_R)@o{UR1IKvuH29xJ(<wB;TGxR}vD6bf$SfF5T7_%;sOFZuBCDbPj6MDheuv z`NYM4*3~&sSwpywU&jihyml8zE3S$F`P^nFk5Q|6(A~-H#0>ZLMWz7xIto{lhkv+z z(6_>?fU^tA1QDA8CV~%>Oz2Gb!1?SGW~YRNCP_k)R`5UTD)2w?H;90uTBl)!LGXe4 zoW$&00a(1fpx|zGXI$*#*Bg(UoCJI6yH&HY$=XRgvMm?{WyR+65<-5cyqrrbU5S%f z@}qO{u5RGf8jk@6GgG4v3)>{WVSzM|OOf%1zNnZLZD-pliOq(7M%(Etx8X4@xK6*H z?ZUX00u=$%<>u&bY+f~8%FiF1^Q%5aXLVH>9bcy%dW2r)U-9L6`HjsxM^Y-PSPk!g z4ij>i-dYb=G(K|WZ>blQ5{)c1XkM7qs@FX_Q+^~tJ2;Q1sgE6dc-V#U;eNgGHOvED zUf$r10sq`h%8}alYf`1h40r3RitT@)P2}S-4L(l@Q@Nw=+gfcN7Y7DO6y?3gSwl(` zY&%IU-f7`r2?~^_QAHwz8~wyZHc4RDa`r%1*g2ef*#(EZu7eo#KT_N zi&uKMQkc+P;c6?aOGJEK{j}|#p74a+lyjwhEke)#Z*EDmW*|UQEpyjUN)-_HD`3wm zim~T!R*hh#dL@F5#)Z;M%M(h~1=~jnaPF=0(gXC>7F`{Qj{S2p+P4Ak4kjSHH7TPD` zAUVJOKx_zU?`Zn9>={$fLchd0y)XH8(vgt&Xe*Xc<%4oidE`%B*KRR}51+?44+*|L zu2#-woWR-)-h3WC-XWS`A-*hAfX9@~2)TuIbb@hvv5` zj$WY)T`^T0_Zwt*4H)t%_3{T z87Fx7!b$C`U)_)sA1Hzs`00bp=(q_x_;EVZl^855d}{ri>CQWNM9#Q}2_-a{!0GUE8a`A^ptQTIm^gLgRx4X$ zAF7N?)izwmRZMxxnb;N26_q6a74~->SP;KLy0)8(u)fXCD zgTI*g;)iy3Y(_Sz`dWG-3xp7xTYwmds`6z9nl>4IteCJjm*MF6a(IAevWj!i&YD8o z$%>w?fr!?9EL0qtv0IH#gayA9{*TG^&au%DQ>lMd-ETZS!(QP~l?Tu(Gdwh$h_5LC zgLpQjB->l@Z|tL9IciW((thlp{Iwg$H)}Ok4guW65Bhu2z%x6etdPFl(J3}w@Dp`} zZ~{|1UVL%9ygKxa4I~`BrE{`9c_XtCNN4_c-}93A^4;cY#u`B zM?II0`V0OC7n7wXO&E=5E8D*npeGJUdaugyr^#?q_IoYU0?o>~M{lRZnFx(Y84NNK zL;Pxu*}cTKJ&CczGi9Co;`;6J4Iau9)P0_ZS?+>YbSv-vUxOun*mPj+5@e+bWh!b$ z=iR@0;oW^6nvr`gb!0n3Yi80eF2T3#%S}U1Gy)+#rD(#I^sR%5gdHCr-M*rS%@N*j z)7*D;w#}Es7~6B)gAY$!ovc)@wz{K*)(;`5j^oT@gSlY~xHQRWVj$+VB?wg~;~FdaJzV1wFGJi#36^wM?`5TLjd=m`7ny(DKF$SK*Ij5;@w|A`kr6)qWYz2A87N{Ddb%O}l*UYu@@#4h?NLJnVH9dvmu*puTTxC80SF z^I}|ebbK$@XPRzI-s@Y`TY&mcxO=H)e`7Q0$H%yTV*~F8rOzhF9AC})0(tdE+gH1i zqP^1pi$$EF=xQg8!DJTZkvdYgxR=nVYC^jfzyOdy6!P^HH^}y0Y(Lu{rx1B5CC~e-Ev==4v=+UW! znQc-VMP|LS={DmVo3WU~H@3r`+gDT{Rw=|qdD6@_l+&Ce9$In&&%KE_nqtJr-D|Ctni}VI2cph>HKP*_QD0Lw1yuN%_ZI6{Gb~FJPL_U%CmM2Cbt;eq} zax317z#P8q(zKJ8X0UcwG7R(^lydeD0i7hz5r4Stzyu&7lTS$dkSc^C9SFKb>8V6nh<1i@&uGgo1x2ImZqA21-K} zHp5)TbyAN}$2!EtdnmbaLSrHk3O8*V?6;#M3S7QYyN6uhyP{=-pxh?ldCm5pcD?jm z=9$xcuK96ciQYmKXqFB!T9ofzs?kDekAu4Htt<0Y<{zq?Z+O!S_Dd*}j3podRgu05 z41<)fYjaywbMs-)AEyNVW6J;6#-`#+?aMvPoPotR|FX;npQ-dyQIB zutc{rhC5&BDAnJud^BwTJf}b_s3cs!mCPwj@pMs%jM2f9 z>MnOx#+WHY+@=WCdoHEYU9s;DiD@Fq1)3}WGCX`sp(q2m0vE2i))ud3oMvupsyLQx`4Bts)xAu3?-DjdYo*SCb*w@)S`LdK5sea) z(#ElV9Rr9hKYG=X#F3zcDmVpV=aMN`X)l`w3aGL3hPN6m3uKl_Re4=|+6ytkfT1R7 z6_m!a|I%-SW*PaP;*En=9Yw3V2kYf51ROacM@99lhb{4WGD&o@sD~1ytHu|olKB#S zo5ayAf`u3+lpndI+C>6!HR2mYFZ;2-CeEI+SJIL#18do9iVwJaICWz>RqAgca6NlY zYgbzbeC9sbQ7Q5?RD_hC+a9Q<(kNV$yt+&W0q$AJkM)8}b_3zq~$#ccaTB8ySMOy)Wy_#pU^<|E)4J#}{E zBIgrfaC&vo^>1u(H7GwIZQ9IKipX*A&BTZ3*peO&LB=2v$5c+bZ$j-U7k5oX7fCwX z48a-U)5r+z*Yu(2xDWYg7L&iUX1#Y@KH|h|PsSlf0#wpDmGuH3oSb3y4as`~``Occ zMXjN@KZ+;5<{C?lX-0@bya{W5h(d_^uH|HLl6COD00W|KnXm9Lqb~!>o7Hd?ZTPAX364&kU#8+VbqJ~51 zj~)3(Hy{g16DLYCFA>KiX`$RT{IS8ouu_5prIt3u?#s=o{?YdJ{4Zbxws$2&%=r-A z*#Q1mUOsN->a4K7THz=`+ZP!{RekDvfM34JSnBziLfr8Y?9$I`QW-Med264eJpVtjZ0r?P%H375s!Fy zI4pQ)X!o8F4O|Y@Uwks^`)RG>55~z(k9FB@5?9Boj0|5&qscl|Eg4<}N25-U_up+Gyz-$xiNeGr+TEk_?-eE4|0Yths0WZgpR zf*$CN`AKkpHCGfm_zQFVtn0bfghUxxuV3rtGvrG?w5o`EX;kyjFNNEC%>;z_lqFvg z4-uolM9IWShg?aoyEf~oJ{f%mub?AF_L!=f3m%1pLX0@lb0RZ8V}8x@6pQW4MhTs- zTgvbDn}vSq8*MCkvIANaoqgIuU_?!GV$i@R$vm}p)>WeuwAm_15tVh>_@zuDAzL8`3#tULR{AvROLP4g>o45%1Sm>k{veM_gG zv;sw-RLCp(l7FA)0}Q+jz^CzN!FqNt5o@)RAf0P^zFqYLWkVl?ixslk;?KW4BN$oj z^c=<`NE|}bm#?{*#D=Y`h+FEnaVt1vizm=)HpyXj$b~UZh#Da{e-T99-VRbbont?n zVbywwM|N@LJ;hU{r_d8QJFrk|3^Ak|S@&DWZ}Y2)LcL?T=C*i++oi2?ahTX@;47~`~q&)`!`*RlNpEt)XmulQJZTesr=c~ zb)EPU6rNDuiO0vqkDiUb=&UlBWoE`ZcGX0)tEjg35OzKyD2KG5v8j+ChAua65j)}s zOhv24G$bOD{dsO&GWeh~xEcrMXbHCLB9 zH;gq`WUIsExD_lZewkhZ#jfdQr)qC5OspdM?S;j1k5=uve1UPeoW5o@RMphH>HAyi z;WL-eZ)}X)Wey*AKGR$=H~(wxW7-`Lj7_;@E0&+L*?ZncV< z4Kn5!;vw|0-SdD0Gm!AsO-5X|35Q4b%c}IwCd_FI*Vj*r$K}eeQ9`3zqw|kf32&g< z3l@KOv~3%m0!HDrYzq7?0T#nu-aYm<-KGUn|wcrfCdaK0=&VYE1S+@m=- z4t6Bw`$O?=!gI?~J)^T-6Fcz@?vp>&l0qX?^zl(q#b;GoQ{N4G<+6|U-n+Y}T#tV$ z%N?03EJ29y>hC!m9~1hl~F z>okP~f%4M$as__;h^VCefROpPcM{mXnW~^~p>ot2bFXB3&p* zQMHrMzNC`wKrQp4yY3ee?bgQ)WaI~>>!wEH9d7yY`5@FCFpdK|`4At{q(wDas5Inx zxHZBzb8Sb+I4Z1Mp8@evbWy<~X9Cn>35ab2h<1p~fVVc~!1 zG2zG0D~VGT9^Q*U50M_HuKH>mK2Wn3s|g=5fny&39)0YZ-HZN;e`)AkVXZ-X>1?M^ zlBrGnu&U+!dhptFP0~C`eyiS?bF|+CdwMxUYP~cM-BKBa)p~v07}l2#A@i-)^~Do(w;5hB z<3{gQw153Cp^1$%&ZC%s(XtK6-@POYtshdOe9_utQkq5{6H>qYwPEMah}3<2$7RIf z_lvO!FD8cDUb>nPycY>nns~ofE_%5HCS#uO*jwT_lrTDE_8Lj56WqP;8kjhEq252k zoJCN2Qm2zoQeYk=OAh4WqZ|@;MfyKmx*2A{zqVA)3aPvBcsZA82&^`fQTu!9B||E( zK+7+LLgWLRc>t%He*A%vS{ET`H715_S^lNgsUEa|a3~KkA5@6;ur$0lnR`+mER)jM z@r#C_BFd%fOBc@uG7C?~)Cjz`Jg7qBeHNm}_(!lGk+7UpcORsNBv>J0KuQdnI2MF0 zwlqVlLJ|0=OyS4R+%(R8$xYp=q3Sblo2!#Wyi>z3LJs=hYnC1xAz#Q2D)uBYB{2S{ z2_Nh;H*PTyJQ--NdA;}^Jw%kzf{ygns?FJgpD62~Hs$M6GZR)eh&O_CVP%V#2A5U> zKNTd)(;HT_`y%~ZFI-}_???Zk1b`izP}}pLRF`w5ZdhdD8=x_dMv~#9mTyxJ*PZ=| zJ&+kQYlR{#bj6ct=wIN`2Vg%E(=PI(5ur<@(~XHb@(5!b&h0zcp$UK;5B>w}5a_79 z`3hlEMf9@r?_jBzmq*O~3-Jj4Ul9*@^>FgrKmXrYH|@Uja!_#bo;j+d+Mc%>)wW=0Pkop8BE@rj7%%29A_};8xlY=- z3h3mArQ*F#B5qtIyYstpU+H~V6{i53nz0@XG2Tli>FPx?7soCu*WA|C`%)cZl4KHi z!D@SR5B4rCp1QMoilm;JBupqDxMA@QCa=dm^3$;l3dXDvv#$|VDObNZ@*og9MG&fo zo=iu0F?&vyA{o@Qx64$bTT0%-QizJgQGjpeey|xEf1PrESI(0jENMlHu)trsCkZLa zd8n3bSY{pOHDDPSSo-XiI0^#wNs72a5|xJ7B~2`b`VKmLtd=NZOpM6d*=thy+<>m& zbUuUV!t4%lKdbfx>N~(mB4La~rUM=i44$l8Q@HmJFLpimKJBZL>a|VwrMUiL2hC9x z!&wLRcNvHy+w#cm@zfDF-y`{_nm%H&t5pi=uGLfb@M%Ih>zFxC8($utN?DXuaP`Vc z+<04ozd=QR>C>0qcBtv}-T;iw^O+^%07v6~>5E}G-mLtZIkZd1{r1w3LTqd*pDNMq zegJ4a$|JOvR^3VHUCa~p@wYowbh5aw+ZP}bQjMa~)vw+&U_v?>G&&>v7EEy9<0UD? zgA>Oo=134^&7`y8LFLZvvWE(FD)yAB_$2z=Tf5%h-!cv?<^m&o7p4~%ohy5OAqpsF zDRK8~FVu8c_%|W!)SrWLhQQG0;uTt@>jCq2v2`LAq;}TMMEsV|8BBqUYlcB=n;5t! zSo>}wtZ2Eoa&65#nC9K9nXr6PG@1gIeqU=Pd!I-el~axrwtxsJ_K9f9o)T!Q8&GAX zzg!+&aH)2PtHm07&Llb2VG9~Ji3;*VcV2UM=OxFsC4lXudC!12U%Gh<9f<9h>N#Q@ z0H+;F0HybiU+cP^g$qqstJd=K)I5wqyu*xQk5Vs&y@goSt)XK~6S_|V11N}Uh;`G4 zU)97guBprzU-T!}nga>YYa1dwHR>U115&VkBpwvp;R@3%T?l6-LLodhM3Y_pqgn}u zn;hR8SS-|$P`#k1tn}KUl%^9>Ur-5>@!`Y|TPfJYi!UcMJiuq8OnaM*n?eJ+;A-zs zFjhpVwNTeJl0AVrBv(wP2@8>e*2ED7!#sV5v8X2PJ;ok+KOx@PjU2=tNMC>=$}XJ z6u~AVBV#?^ilJb$26ny8oJ(9;UdKmutI``naG8( zAA8IOLA93F|IS23zf7?4%5mTif?7qjr#SVp`()NOp>)$ATM>a?snn3W6* zmAdsd%7rXIy+6{5tMQ#*GYEqS+$-ICxp|a5e}{NyC1FyNUAWI}C@Z#0$kMS=EF%m=U8zQs+XD7a%4wel8CWZ%N@sS0pI~?%mIw zFZnSAso9!q=f3LAebCZQ>MQ(k-Vjb67|@jH#nUA=nup626$f|oc7yYs<`1%Pu3Y2_hSyS^ehM8@=` zH$=(g6<^1E8`&Te(Cwj$K5!zq4{U9Yo1&!mZyAawOWS2rtASo9T&CyAD^DVyPCUb@ z#8dA2RfB*^5SE5%J8V+RmIFQS|7oS7*rc%!o zY-7?&kVUCBQo!u69jkUOrEa>sLrN+SAM*BB0q7ZM;_~wwU@AF*@L=8-bHx+PSouIW%zf9g8(EO$CNv+ys(gL4=!~=?2LgBc#rCEl7 znyq+JULnp}w0+NKL{v(GUTwKpq2UqdLzQbJZt!5TH_7xEDp$ooVjim)cs!Ve43g_NU%DpY71Gt7B04oU&Uptj6!NR zHl<2R4D=I3E24_G653cbT^7O5gs?w0GKbszXoK|46@16oC>7CotXP@K$uVjYErp2%8RL_VXp=c>Pruv<9dq$hs>Rb3-+{MfVUjQbI?*Iv}d3!}BmhBi_$}hE}cHLzkTAM-lES7nP)gl*anYFDzu zK)fx^wMs2h*Hc`fjNNZ+9y{{Cm2db8+=*;F5Jq{niWtho@P^nuP7VCVR){9X9J?o- z*5H0m%1Qm(4D$AZt3O#_7~36}9p~f5$w=YSn(j8@xH^PK7HPl8K0ABq3?Mh%Q|g}A z*t4JA6G}S!P_9tnSvE8ku6}Kkm)t4#iR?7my1!%V>*qoYE~V#Ue&e zA4w{2tq}jylA=C$;?2soF*P^1`s$qo8iiJ6B~!Xv517l)(v^+9ArUHT1}aRmbHhi^ z=C<1Evrq1>TUp$FUgZ45Av$!A*3d4z()K}4TO)!oJ%4e>?KWF_)JOk=xoIF}z7|5b z`uW4xjdg6yEA^q*pMG@PJKeUF6s7+4=~PL?Ur%=~ZGulEM{|39^K5uI>q1iB)x(g3 zQ+2i`Y!d&4>zvx3Yir53k*T4&7Y>(Hb-kL(O}uwQ)1(OHmFFfOWSI}O!b`9W3KAN+ z=MP?<d|;!73i>)lfahlqGG7Kw8t8xK&=LUN+21Ag!yg zCQf(K{;>Pz(yL?HnCRSb3tbKD7y!P`NgytnK;SALKP$9+n4h4b`eEw zJC9QL4(Nus0Vj<2@!>jgd= z*{V#3i#P&4o3411J_9+hUIc145M5n}g$ylPqP)k3Dw{l1bck{*C@oBla9cS@tWO>b zfZ7rDu(|0I6Ww~~;(1@D-a*7U3-_NOZzs$@A8I$9s2Bt`S9l-Go?1=a3TRs+*xqxS zsxnC?1qIj&Ry!rm>jj|k$YOwAT0lN!UtYq+Q@Idm#h$AGKjuGjyeJKeY9$guE}CxM zoM6tl76a+5`8B7Wk@pbJa&BK)OqXm58obiBx%025-?nwnu^je5CaJv#=s(g*e zINW$F^!bMD@9rP0Y}1;c9cw#xbj`aW-#fuO41){wbxD*AKJByy7vCv>QhESUH#;LI z>)-u57j@x|Rt8M(FgBLP(JHVStVyE{c1V#4KV1&YsxZEgeP{_I*tee?ghAN)6*;*3 zOGr%3qgw+H<+cKFbZqGd8!wn-nyapRToA4_WhEk}Vh#_lBa z?npn&YP$KszQS9=!lPB>(bv=n1Yk(BglO>clz86JjndDPA`4PHdSO}W9#=H;Y6$m( z^w%w(bjS?)Ppna39Xy-UJ_GO$rJTC597%aS`A$44Wc@Wq^2e8Rp@o9X{d!G!#XyHt z_x{aWVp!CGl&JJjiLM@EEwk)J`K87#DuA?sU^udv?cQ4Zo@-y|6D!A*IryJN(=F$5$887Vlgwwy0IQPVR(^!7+6R zpX({_cdg}JZsRjCRim<%Y3dY%$({G+Z9+Sd@fB*eKwmxr>k=TfmUC)A0w8%o|<<;2%2-)vJYpSNAcM58~cFl@jzmbzocPhPdx-p}Q zNa}KN^Wh6WcO7G%h*@`>G{+Acwoh3jB))cx|7P)9XNB)|*-%r>Bqwnihe4eKLd|y# z`O&@284_6VoD;ui*_^1~(q0C2Kpr1t#l_X(b6Dt=6X}xC`GYe`W&!U~V~NI5og=}8 zcCe!$3+2VwP>Pd5o|L=`-ltyV;>U^0tn`qR_KT#Ni>(I8(J}22(KZ19c>Q~Eyk9KY zAsx=zFqqwvKB-7momFb5L!t`BTcTBk_L3VdH;LL3~T+ zUYaFY+=Ih=F$p`}Qz+#l6@ZEia6q`8OK(rMS>P^}4~uTrXKeW33j_ET1BO8W2jpf& zYx|R0b-5SSo86{8;R*0+x!auo0@=Tln&w@`TMEV+L?4f5BB!z?Tii}h<%FznN!#sM zI^!O#u}k0j?Dt%Vn(eD5>sk=;jV;RC77h$Vo<$w%*xm;re9zw}W;?^07*77ZE|=Wo z+dgqwH{THHaX_z<%(@oCerS9}Uka%ZG#oE<%%~x5P z$_<{;Sswm+8@Y+o&VCWJrQ_7~OQU^*p!v*To@+PiYsP$)P9S#-hO)v?Ysp3QyYx~S z@9%>^jX78g-~Yx&y3|;>8T77n(69tl>SXXsQP+D8xGoI|nQtCw zaP~XhT1<&axA|u=qPPA3^ltgbjU&P{zUTJdyfkQcUC+13jD0AG{dxRJ1?J~VmHaG= zRz7xqL>;BnuO(~$MCqo~QQh~-?!#m`AjhMpZ|AhTzjB;fzTJ0bu=H*^#9pNOtGg}# zQq;ey(|X=Y`#pKu5dItW<+Zj8b&EM)9wXkxPo1yDUVHWeqZM*@-Wy;*t6D~wtR*aJ z9tT4UYGO=Jn&CCbycvkV_gXCIdo5PSslr!EXRgKx&Z`C#pdCH`tpF|ITb$ANTH^3s zYihoA)%WtXD6+l94AYQr4bar6Q3iDHUG)zhu{erQQP-G8?=eKv5oo1Q3 zEWGLO9HzE_*BcQ{SB1*p>-Ob(kug`*1O|x_){9oOEouw_s*yH!u|KmU5li#Y29tk; zAK1LvRl1D|Xkb7R&2~c$Q6aoDefNGL8bAe9UwrE9OHhaZtQAui09idQdd>~LC-^v4 zxlQmNHE5JsI;X~|=1t>C*U*wKZ3Ap1pVKX|m=;2(-zWP6fK`9V+wl-hKh_yEC;0*}dbO9WJS#uq)+baThM}zGuT% zF!0oc`Cz4dn<$}@{fZ+ndkXd#Fa`j4i2aXa1w1oPYdl0MOG?}Pi$VBD^skv@$X_O( zf7?_vl?fahuV|_Y_&cqUG;HP_<#xfMaRu*YI0K7O-2gQ}Umx9Z9c+c|KAW*!#b1Wi ztXhJttA%U!T($FZV=}|U!q*x^-(i!LUs<*_@o|O8{Wh6B5$aTA`Ze<`W(D<3V90DN zP!{5tL1ng2r-@50! zzQ23cy64_?PyR_hS)c6v$}BA4fvbqKGJ;KKpMw&y*Y z*IEw_m1LCZp9^eOPH*Ug%R0l1p2B33qI@2S_oa+3Bs#GK-H=j5+mAoXo0Squ3EI!l zhqrXt7VXh@IzbQG=B!Y;_WXqet6PiiRBmGPa08o+QL|&p?E%b_x`5gb-e2@o$Qtv$ zk(dG!gbD@}`837k>k{z4U$_E+K2Z9`SGn@si^{Bh=s&2cpnv4LPhOIz>&wzv8FOQ$ z!9>jBfNu+l#$hS2QI1(on1th^yVee-k0J){O}k-)GQ}1#3zInj9$qfE5qz za#jAm)l5SI$ghdAH;F!Kc2l;1n5*m^SD+(HAf_8>YIjS5z{Ar%8%Vjm^wU4WI|J&> zs^#PMB0J&g`CbGcZP~*rm)Z3&Sa-{Ca}J?efDNmn2N>S`kf!FStWl;m9DcXPxI{a0 z>`E$0@wJ7i>EZqYVa6-i2a2V4Do}EIJyi)R*2SeG6??9onjR~f^JZp%^6oJsNxBst zy~lwLpH#Nxly0TZfnK=4FQkTa=VCo2j%ga#BL4vAEE?gtQwwWK+`8i*BF+H?FD%A9 zSa6*7AlF#cgJs$aAN8IwO4Y9{VEF`5*)i;L-sXts?=rdm10#Brk;8S;eKqtSy4&a? zx8@zMC)(Om5x0h1!7oiY;LE*pgADsvaqou_EQa3cz1QbnhSOMx(tHH2PbS3vO4=l> zXu!+5`hk+eor(QjDm2g%#3O|kC@KQ39jb4~upEDh9$T~PjcGX!s4e(%hd2T0suyKL z0TFPcg?!tWe=Hx5x94Jikqk=F`o_nP1b=4z_F5;1;{ccIBKoc>Kd7Ajx^ad7(j{uv zn=I!X@p}Q3AS(zIFs@#T$0&}JS?Ehnv7w;@O%py%wGz+chopS(43h)*B+8Roy^503 zqsAc;DwhTDZE0c9%Bz1^ejU;NODfwi_OY zLk&<-1F1T_?cWV`NKQUN=gyC`yzd^%N)Gb#`Tgk6i_sSzvB^a(4`S->=mz>V)gjTF zrvk^C+$D49?Pq&#uU@RV)L4PBn@ACy+)tkXA2i4hTKw=RmtMQMD#qXlle_8Qd&2bkAkC}^FF$?!wTkxP;ZtM5)gk?i2puEhC zxZnfo_aWHrG_PNXT&@fxY}U@_^nVFxV(F%Dco0iMMRv@MbQ1S{cwsDs)AzS&49^DN zrsqkd&j_#cALCM2ATp(O>J3R#pj{k42LR9lEyzOF|NCq?)X8?WKF|Sk7$;Z9Q6-SC zTr})gk3ERxHGMwk9mu&Hm3yPJ!Tn#|5yo{I=sy0}48T<|Ar&+}r)?a1LDUJ0d50H8 z5zl=sceLg>H@JqGJCQs6>|+mz`;p(>l9$lOcJsf~AK2GCKYFBR_+?OiSqny6fwsdS zY`XB4&KCWSP$@?8LrgDN;m-?ce~y4Cs7OPvjbbwgUd|l1_DzKi9dKdU@lyX4EDlw% zMHF*W4|XpjxGMA1aC0$W2MEwk{u`g-756!GS84?3@FN!rZ%xguDML_UTu5(t|3jB| zQO6XEUQcMVr=eH{PEFgA<|2KvX%e&>>_^dCt^({`N=ul3L}D=VmkrZfJYR%)V~h@&?cYq zz~RDs6-w2cD^|g}z5|L>$2zk4PJ%buNUgM=s%dCAByja!aGq&U8AL=UD5PZcoYhD{ z(BmqFrWb{iklfz6goks+ipiegDc+5BuRXAkl4XNRF%Pcn|M zpV9jcAt=eKg$+@~_L=hB4=(L-&0=YjK3$|?!X|y=Ji26X=~Ge`K~+apKfINc_KojW zof8p{t>_?#Js${P;Du%0(3T^BylV#^(H;^M z6S|E$``(E9J?-_X;my^bIK+RDhWX#;)PFo{ID~)5LByO8zHRnvy6v%D8#_Dq8dxCQ zcHU;V`7=iGQgmfIM+<@jh)#6>9$Vnt?FgthhrR4u--R?dFhlj<9t{Fk>EiKWw9pC9 z-1)IhdNAJ7aLSxVq?<^dEL!2*{1Y>$y?D0V_g)R`R!&>`<1Z%`EcdJ@^_4hLjcIo7 zRj%o_yjaak9rvPgyz6pPzQ*%)tBU!Xztr9T;jQXT%iR{XWFa0m&)hoPKuL++G!|-i zj=rw2^~Vww7~J58`(>C zJiWqZ2ale15f(oGkSq6%@2}1OrQ5$zKQ8?5`c4*FVebT9-KnMRJsVc3UMbO-B9+Gp z1Fr`7<;46kUuy5s<(hHMzcErwZ$n9&Xr8D$f1b3QokJqrbqJpfk*gI?@*_6F zQHaXfwYi9YMMz z`C%?JCcC18G+fwlO2Iu$Yk7q~&bB;gA#Zab-(t0yMVD*BgU6wYn?-6qG2}<_b&B5E z+q^t&Th8-Ca=yERasP{`*DI{WO9_)g`^{-CwALCibQj`|u|<1rW5LTgJ~ic%$9aG% z{s87oy56DuPXQFIk&K7=n;M1Mk(&mWck6e-Dt%;$<=;SUg8OeanP2VUw zj8^E^PT&8y-SQq0CYT`S_yQ7d{OpTGYh8Q0MPFF_X2Gvpb_+3|_9w@0`LnJ@8H^7u zu8vHlT%{8I?CJ)46|ZT|R-75PXB#ybwB#SPEpd0zlg(>Abm=#Zd7HB-bl-lgCd5@E zl9UUfZsl}*Nf?OOP2Y0o85YEjIZC|YfG(6dHMUabCx>6WlJo}6eDiUJL~zN?Utj|c zHy+EQh%JfbD7f^J%gXx~BHVRqW`+T&)V;8lrn6g8`?q3Bgln5rvzkD*$WHG}LW;qi(ydDivAi4I z0hoW)4^faq-ZVnFU_-vGCAAH{Cqe)2Z!`fHip%l4xx8f&r>Y)sW3h3w^>CcY!mGMD zD>YYS$(+8JR^^ws+*;Cz*rIem3#!(ZG`UC&Vmy475PFtpI25jFrdi*&rahX85^P$4 znXDXlO;`pW&ig5Qqq((%x9+cyQKAVh(7);6DN^TWgml65r74!zU7|~{TuNovo$iH$dc*0=GOoh`xJ1G}Tk-wnsQD<3 zTU3>Fy^iZ1ab0G?WJ+H#)yeJ{S^19fgY*#VX{lA2qD+c7Wzi%PCBl6;B9}Um7x1`l)YVZ(~~h&GP82)Pk(6 zroB9UXaJdY)x>sMT@yBX!LN8WWN_{} zyKq?^0a0=QP0aKYi=hJZE%9wJ6I??}3%%uk!A$sTmwz``WB>X$yXHQ`9e}EbwyuAH zc%sT4=xXXNWmsNs1qhv5ZoD>7vJh7c?vkL?3-d7WI%j~bmF$aua=#inUGB(gZoL-` zQE4|x4LJi(QPnUgu}Nu`2X{xL6;Dl1FKtb66$;bwJ*_IL#a44U0dP`adDT1DR6wX+ z?ypIRTLV0u0%Iqyl+;F`aq=%px}OITg2`*6^}A&C9P|o%U1Z2LNhwlZbp+P0!S>!O zaq&nLXr*;)gii*ErFBYD=0SxgtDCA^m}msIewU(>uH~o;M9ZF0q(YrUO{(hLmf%t# zb55eKOqJQwL6Y)QCm$;hE5pj50Gg3HQON07!*u1$0GjECSH*dN8bzXIFxkf zb1;sOzUL;Tmnx^<;g>UsxN6)qiD;J2Ax`VJl>6b}aCp$6!~MkDOX6K4w3C?*RvRGI z>-Xq`OH@G(=KQD9*KgxbTB1=!++hPEom0vO;~KvbW|siJMxYt z;?7vX`YfBz=$B4oSZRSvLzNq@qNZ^Zbgw0ZSh?3pkP$EPG&PX*vmh_JWvwumDX1q% z#}Sx|q+#L;_=V;j3>#S&WIomtmA*MFW2Xu)-3K3>JK~HmmK^bL`mM zNbZT9dZ1f#TR7U#_R&LEs;WzfHAP1$2+P|VDTfc~onBZ`R&0-i^}=lCefv%juqGQU zr}@PSkl{#8fNM7+b^{0%d0Tq4=C2d@U-0_hG^Bre(Em?2m*TZ>V%ELK10Ym8^}I+U zNj_Fls)RYFFe@8&i`W}#qclw93{P+b(Os|!-6uOc3l&~PIIA#TEhR5FPtHbDN{C@C zG;5{jSMg+yNCCujC~WEw^W&0rb+YKzr!8Y*a3pC&1;R#j1)*2d`DgJDjhiorEtv;% zC<~j5@sx$)$m>ow{a=N4KUWD@Ru14_Ap+H%wU!dwzO} z=T+M9hN_)?4?jRzoVxZ;|Dyke2E-Q&r%umq=DQ9}8vb%6cruSNH-j5xOI<%+G%-Fg zp5fbX$^^YT+!M2JK$$l_ty`aO?|Uvl!{_NR7vc7THZofT_gAYIw5_YLDxanJ)E?&g z(WEzRGtkIlOBJR~e`bk`v zSW^QPe$`kp3=jJY_3{6Mhm1Wx__n*ZWrO)8-@deK{WplW@kvula+kYI5$l?rNo$Q`v6qzlo&(5Ajz6!jn&) zMf$>bm3r~u1`JqJ6GlYT2N zz**n*8$J8|YV}%+sJ=@xkt2I$Pa^Y22a4;ujzhMrTX@nm9uLNl@7C}CrnXQ*PpaZ&nOvJX7{S3T1YsqT#Om-kX!GaF=qg%-*}o|Uz&LZriJ3PnpTIkxJ$ zQ0aCTz)9NG*;KSJBeUJoMT3|pw|b6Z7v7(C=e6JC&XdYrR<`*>F1Gj9B(hP-eUl*} zT7_$Ft;(9fF2?$Rc#{7$8KhBQe3i)2?fDbO z9|xKU^Il>#7Tz%~FkI3?EbX#g->)1OmJOp$1i*)Y%tr&Us;k2&qKuo99syrcf=|g- zR@13s0AjLD*gwh#A3k=XQMixQLutzv?43WN7jGa&|6tEc;%mycG1(^OYltSLB9T6c z&=165fJmmEdEiQURy?{<^;~Yug6>MBRPtmdfs%xv>Y8C5FvjAM{|aD^e4 zS8J`H)Q7KSZQs9fW$y?GAVJrToAoIm&3GgqVuQ__hr}56X|kekr=(Lv@-wXoBeji* zpb9NHPnt@$oi_lH-Pd2x<(aP6rw@-)P@H3GGJQf6;8rqzJB-hfHtZ#yv5!5v?1H?w+9xS;*8ty;`9wSQ`TRcWjoTgK(7!FgL-jWaT6#{nsyQcj<_h65GXD+)(;_&?O9_Sf6+c9c;M zXsr;ZpPsf_HGIWa@b{rQoa7=RcZ?vNz;)``p#ij zlt<$K4B%TU50TV&&5KH3i=bP8{c(3+CJ_lKx-?Gsi7upPJYhgh`xK;qn6UcgePHZT@liSkx=N^ParU^{gCSs@bkHPiSF9Q z>m>{-S*0wR13cKdwN0FzExS*`jaCeGkxD{^H7lZVX*wj<>6J3wVgi$p)o15F_r$vy!$i#_O^VP4r;n&)JyL~X9G^*dx zHG;ZJrrNsGf$aoSTzg7tpJkY1tfnO<81bspse(VHa~3XBmv1-bT0?z!iST#IQlBl>u9lDcMFzcUH1*yPTjt;&z=}u4oso2!6X;w@oO$kcg7lUQzHa)t2 z=;!{3UoTWSQ=bK+;lu4u$w101NVcV8*DWswYQr8`hz- zJ^G$)8&|)iK=;xc$*;M@#92u<&n8#KNKqLVlmy61%B?E0Q_7bHbQP3bQfFm~4Y}yR zv(I(!S(#?f^~G%&1H{eX>8-NBlPCRhSTapz4{yB35T&H;33b2o_lh66mu`yz8$?UL zp;kyXUPLMp?D$O@yAfSYu@?Qcx#cOdXP6G@LY6`5I-Hnt!<)q{_t)qsJU(eBeTdvA zWU0#Ntw%TsU3#2IYMG0sc7VK1*l`<6& z{!sQ4&qh~?a2?tp;sf@3P(KN+tiFV?OUbm)=w?i|yP6%?sAG=oVSKBx(FP&t8Yxg! zhjYbJu|Uh^ivSb#uL!%3ZD{()AG@er8t5`faQWCuu698KzBPcK@>1ittUhH)6A(c|K+ub?9h3og$jaVXZq8uIt^!^6 z)vdT`?PJU5a-9Tpy?jhuS)k033wZ^iR+jd^*-gs)qFiC}1y!7$SmvQI+F!tE$|m6E zqF!?_`l0lh{`{3+qVHZ#AJ(2*g!dSO?w3|n1V9YaX%sJkvNWGQWCRWXtMd6%kq<); zx9m9)^lS9#rT}?i+IWd|CV)a&fgH9^N(oF9J3f{S#}K8Vg7k=YPkX(m6<*EbarbDX zlItGL;jcHlvtJ}~x<0^wD?y7$Mou~0aRc@+<38}IA5J%=#6QH+TE#Im>3V8sONvbq z^UvW~o$R)pS4vC}r<9nj^=3FC#OLK*?Vl{yrb8MGl0a6|>bYB?IhWCy?clz%6h=); z454;hTY}F34g>?ym*LL>1RxMSG37h&*ZpK%(gGRf=Jg=n7vK2i zA`Q*zc3U29UH`_{cdT(kCqnVpzxp5l$a(tD-*+2@MNF~p9K<-(F`Kk)_S>;``=_hF z@dYIO1AkAwuH|75^sg@05g^X-0qRK6)X91^TDRM?;L8J9d+jnc3EQ1$CB?hut6o}h z#%in5II_!dwsb~>AU|uK`i<`lWgLkFZibW#?_vqEh3iS1kdx--r*qmHxreO+uJ;~AOhd-gq zIKWAn%N8zIuIlOrj|fU=KCSfvh-OPMmY7O;?A&q;u_6*~d1_6dIRFLhjy>nFxH^yE zxACLeXQItyRpwv+nr=iB>A(rCzhbdbPAUd^oA8;wID%5Jcoi%kzngqFT}7ZZRXL(u zG&E5E8L1=M3rA(nJ5^&+6;E6phy;O64@b)v*CCp1 zpvqK0OoP5ms%cJgY6z!|GcHYcU^xu_?t##|GuIC?%Xw2gTm|xOB5+d>w5Zv5CdaR+ zB-f+Fzm-GjNGWKV47xU@ltqk7S{6^LYxS-VSnWw0@=~q(95|eHyrcBpjT9At-j^U1 zCMA$nYh%sLmp2|)h8j(80*j9$@LNjY4l`Po8!Cb9c9W>Yt%7ROhVE>Yuikp0V1r0T#S5dNMV)bYl-%3W=l*P7GHR1sTNvT~n@>Eu4mHUm>&GA$oUR|N7R zlT=>)IB_EoBzwe*Dj-*px)VA6poK*(XWoj*nGd+}Cpk5xG+Sqx%`y|CIl^Z}NtEhI z3PLwr^uwOvsd%Q+QZU7+QMG0BeM8%UQ)Q*%ehj`aXExW-%V=I-wa9h5FAFJRH%+r~ zrmLU3hf%W6S?e}a0@&8n6{ciM$&Fm{S{q$YN~+yY^UqjyNy69?*wz(VQkO#+#yJyBIL~WNB*QMoA}Q zNHu+G5rkZkC}k7qZo*gc_m$V~laG}B>0Q0uo?+vMj91Z+cR^FDH-p|?GV7?YIWKWs zK5z-kfXf;yetqFAoNZO4`nzX!#sW#0+%U;>Cc80D_yi-nlG0U;YKu20M%=pa-JgsD z7ZNpvztF?gS}98K^bw6^<)mil{lpZYm6$~M6_dvIz2h}eo=l(%@0ZaPDUj<}SR-H2 zm=GR?ov2r&j>|Kk&VY0#zRPl$oLHE7acn?ZbdWG)@!ruP#p>l;e(m&5sQ2EPz8s=n zZvOdRZ)Bq@qenNz_Ny(HxNW_OX_~SO@{^k8VyIS!jW&IfMylnMHO{|NFRQv%-DyR* zn=e|@^V}y;3G@~`<0JCN%E#&n)wj$Gue>ZB&=C?~!mN~&lj{ze8EL-=v$1wN|PaJ zTz6T#QeU}CsQ4r}MG(#6Yo&S^ug{wUwLt3a`tQ-foKDUYG#oBGZ1qMKeYv;FKQXs` z$Q^DaMaplRmTOQd#44)^;jy`F$=B-h=pe96_+gms6b<}*!q|I&p~(Z)EsLvk zMw0nzkSB(VF+F717S!#{TF=SZ+ZtJu`v_j7!shr>m(x62 z<%r}GhP_l=6*ii>)-Vz_(lE_SkG1bFw9npZhl7^0L;zW^qRlWnb1%>8kuwFw(Yne^-NT@5W>bK+GuViF8ZCNPUr!Q!OhICQn`C4Bl`poCXp!>;b_A04wLl39u(uk*W@ z`df%4`QR=2S-_aYSN)RWQd_@2=4dLg$T@z4!&B{6WdG`J#==q-i`pIvsBlRM<3|>3 zhlXBj06x6=sn$IhUGmGPx*uK-E>y}ofI28xJJ>zz^X=dpjrCyto6ggIMOKu{E;J)j ziufk0zDfCe{i4%5VrzNg1nL>um0RyC9%m_m!!(D4Z94)fW;xX@Qw*4^-`Tht_NrFp z$*AOLu2dn#?m>{V!^qw0E?QJ->w^knIZacJ?bsI}zIyc+8DmA_txa9S9f`_Mw%UI7 zK0Anr`hYae%2v2B#AgwE?D$XqAG&&&pvONK*deJ29=F!PY2g_>NB59HPXhlyct?QC zFO9Dh6ED7Cj41!sXGb8Qms>yRF|h&87VR?1{*`MQx#AT*dtBy)1J6K#rz6WJq^5tr zrzuu#jkCH5x(OIpAihXS%d55SYEOI?ps&=esdUCzr`#~Khn@)sw&@uoE3b^zT`BDg zYuIxLD2d8q9)D(qe`C=Eo#mf}fCRJ3W+e$tQ%iN>?G(we=O1gg&OQsK)A9z_18~%E zgXYirw5d^cvP&SzxP_tn`cK=6Rvyj4-NSxK-muHtbk$D%p2U;SdruW4zi zhE!rR(}%=5*TRl%|D-kSwR&{W25N(%gRr(f9$od0I|_FSGd|1ScsoGSVd?D3IIu#l z-fVdFaje^eVdcv$0WW6h{=Ap*VsbHJDzR-mKQm;9L0^^|2`jn7;tqZK(YJ$g(wopv z)_9Q(d1b^Qe5paey5D8?n>7CUY$3^17CSs#2^2PxQUreOz{q?2@r_Siui^Ej(}TCG zX2(vn#y@BshV@iwl=-V0QM&vXt7Nixqg0_L(r6-Zk<&gTFgympcYhfIjA%EnDqxiJ zmSYc*&YM45hIUa~D!cEzja!VnJf7K79y+!^I(-S7xV!lLJk2)yZm$y>Yv9QZI_~>m zU2L7xy)Dt%?H5$TJ~DzS|2if#QZ3)1fccurjk=y-|LXWrrda@*S-xgt>LiN>ra!jb zwi9zEq~?h*Lq;18V$b#(sdez&(U98tO{M3q*nD`b$2RbZCNU+s#GB#u zQ!_h3<5l5%frEQh;`?m&su!xpn8If;N#}I1OknEv4Wz%IhZ;ml=wLBGW|X7#8kxB)vH?adMN@> z^7z&IYU~%1y_%=@^Lk$mq6KZwcxhRwY|A&*=s~uldGTXbNq|0%rykrRcSs ziwlQt&pjYTSY+}j**lmvRrOKTsyi07QMn;6l733MnC|7+Q1k$(Wg|``l9+)~AvVS* zY(=u}rb}FIesvM`VDz2wbeV;UwNh?3pMirQ$8_dvn``%e6)b-_5nMkKeIosh zOOKNK;rk6#{&sJ+4OhKh_7FY?+jqO*MEYhC~}0DY@4j8dc98+4~a8gDWOD_U}PCxmWUc zJdUXDx83n?X@0VQ2t zvW{=cO*Dj%Do^QYzx@q0rSO&=cr(VjT+p6Z*%|HHN85G_0LfD+42225VdD1ArXz^M z+T=1U5wj7;{VJNv187%MOMas_qSyvZck{X8#AFxgq4QOm-pSy>L`NR)P}0ZgB^H`D zyU(9KIT$9Q>^|6Z&e&)-Hfzp5vUG4q4%KaGiNp{Kw=CfxILP7MZ|yVd2T!aP&u;o= zS$%p9PCh{=%jydw5XpA4MXBWlGD}`1Q9wA#x)+ra_H#_M*i#EH`qALU3*@ta@@a%~ zYRcwuroE!BSZ;e7HQxAg?m(Af8Rkas#89mG9evwgRNzIuBQai9Y5_0nhVHjqT%?iw zg-HPcH<(21F>C87WARhDj+H?bfpZ+(-qzQ~>4aHfjk|2qbO*)75F=A1ndp)1jT@E_ zAqadb?&snDH)f*vrl~jLo(GnQ!i?%uJujcP4bq<55Kt%u#rZ{*^p*RiMVYdXkwk_B zRH+afsFSlw1i~tzf-XrN6KU{(D#<^UfjQOKu*qg$oJmLO#rbi;FE5HQQUy9Q6=93c z3#I+WA9-~ebuTYirO$$k7`S)*k0(W`=@YTI{uTuZd5!5}e8x9E`7}2SFopd}8Ye#E z$Xe>Un-!Am)vx(_3dm8Jb&>@+gd4^J-O!e~6gWgWZ9SC{3WsYh7#bQCNF9+T(Y<#k zi`RqQUks<}O{zXf9Fg!ViIgs2zojml;C|D}>`1h4V4Oc6nQSbjNcT8jkbm2MxGIrU zjl+f}nooVIrl&K_z2PdBK6!RIRY?p@{#(2c6_fjH`EmGnh^rqexl>L6UvAPwT@I?c-czxRCxUAI7oHFMyVx3YBiAlo2J9wE!a5!w} zFFOi<*^!9Jc)0QG8{Z-?W19#_p2K{#{Qsf3`Ad_3_pm&PONr03=j{zgGn@?O#&in0&nw@q8|gJZ8sC z*$&=U<0(PDmp}aX2md`d|DHMjr~Et8$!W$xo2KQf7EME9&fU*T=W!wtabBt?a0w1I z$I4R5ha$|!pMM?r!@&cmtDC2}0dx*>>6TO1B8HnAFZS)W8{gOtdgFiQ@znE4@bD70 zuB9cuZ+Fd#3fwv;8s9=ODUEH(=@=3)2xBd>3wMrg+Q$6n?1z75dHjFzvj*RW{u^@o B)=2;W literal 0 HcmV?d00001 diff --git a/nezha-docs/src/__docs__/index.en-US.md b/nezha-docs/src/__docs__/index.en-US.md index 480c01b1c..7f8b6e547 100644 --- a/nezha-docs/src/__docs__/index.en-US.md +++ b/nezha-docs/src/__docs__/index.en-US.md @@ -11,1147 +11,98 @@ map: # 目录结构 ``` -│ http.js -│ permission.js +│ http.js axios 请求的实例 处理请求头等公共参数 +│ permission.js 权限 │ -├─assets -│ ├─css -│ │ │ animate.css -│ │ │ common.scss -│ │ │ font.scss -│ │ │ index.scss -│ │ │ main.scss -│ │ │ nzIcon.css -│ │ │ THEME_README.md +├─assets 部分静态资源 +│ ├─css 公共css │ │ │ -│ │ ├─common -│ │ │ button.scss -│ │ │ checkbox.scss -│ │ │ index.scss -│ │ │ loading.scss -│ │ │ maplibre-gl.css -│ │ │ rightBoxCommon.scss -│ │ │ tableCommon.scss -│ │ │ tooltip.scss +│ │ ├─common 组件css │ │ │ -│ │ ├─components -│ │ │ │ index.scss -│ │ │ │ -│ │ │ ├─chart -│ │ │ │ chart.scss -│ │ │ │ -│ │ │ ├─charts -│ │ │ │ chart-list.scss -│ │ │ │ chart.scss -│ │ │ │ -│ │ │ ├─cli -│ │ │ │ fileDirectory.scss -│ │ │ │ fileListState.scss -│ │ │ │ webSSH.scss -│ │ │ │ webSSHNew.scss -│ │ │ │ -│ │ │ ├─common -│ │ │ │ │ browserWindowZoom.scss -│ │ │ │ │ chartUnit.scss -│ │ │ │ │ configSync.scss -│ │ │ │ │ deleteButton.scss -│ │ │ │ │ diagnosisTab.scss -│ │ │ │ │ elementSet.scss -│ │ │ │ │ intro.scss -│ │ │ │ │ latIngPicker.scss -│ │ │ │ │ loading.scss -│ │ │ │ │ login.css -│ │ │ │ │ login.scss -│ │ │ │ │ multipleTime.scss -│ │ │ │ │ nezhaColor.scss -│ │ │ │ │ nzTransfer.scss -│ │ │ │ │ pagination.scss -│ │ │ │ │ searchBox.scss -│ │ │ │ │ searchInput.scss -│ │ │ │ │ selectTable.scss -│ │ │ │ │ timePicker.scss -│ │ │ │ │ v-md-editor.scss -│ │ │ │ │ -│ │ │ │ ├─alert -│ │ │ │ │ alertDaysInfo.scss -│ │ │ │ │ alertLabel.scss -│ │ │ │ │ alertMessageInfo.scss -│ │ │ │ │ alertRuleInfo.scss -│ │ │ │ │ alertStateInfo.scss -│ │ │ │ │ selectAlertSilence.scss -│ │ │ │ │ -│ │ │ │ ├─bottomBox -│ │ │ │ │ bottomBox.scss -│ │ │ │ │ dashboardTab.scss -│ │ │ │ │ issueTab.scss -│ │ │ │ │ terminalLogCMDTab.scss -│ │ │ │ │ terminalLogMonitorTab.scss -│ │ │ │ │ terminalLogRecordTab.scss -│ │ │ │ │ -│ │ │ │ ├─detailView -│ │ │ │ │ │ detailView.scss -│ │ │ │ │ │ detailViewTopSearch.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─list -│ │ │ │ │ │ common.scss -│ │ │ │ │ │ -│ │ │ │ │ └─view -│ │ │ │ │ detailRightTop.scss -│ │ │ │ │ detailViewRight.scss -│ │ │ │ │ -│ │ │ │ ├─filterSearch -│ │ │ │ │ filterSearch.scss -│ │ │ │ │ -│ │ │ │ ├─globalSearch -│ │ │ │ │ globalSearch.scss -│ │ │ │ │ searchItemInfo.scss -│ │ │ │ │ -│ │ │ │ ├─labelFilter -│ │ │ │ │ clickSearch.scss -│ │ │ │ │ -│ │ │ │ ├─panel -│ │ │ │ │ panelVariables.scss -│ │ │ │ │ -│ │ │ │ ├─paramBpx -│ │ │ │ │ paramBox.scss -│ │ │ │ │ -│ │ │ │ ├─picker -│ │ │ │ │ picker.scss -│ │ │ │ │ -│ │ │ │ ├─popBox -│ │ │ │ │ guide.scss -│ │ │ │ │ selectAssetMetaGroup.scss -│ │ │ │ │ selectAssetType.scss -│ │ │ │ │ selectDashboard.scss -│ │ │ │ │ selectPanel.scss -│ │ │ │ │ selectWalk.scss -│ │ │ │ │ snapshotProgress.scss -│ │ │ │ │ -│ │ │ │ ├─project -│ │ │ │ │ │ chart.scss -│ │ │ │ │ │ meta2dHeader.scss -│ │ │ │ │ │ meta2dMain.scss -│ │ │ │ │ │ meta2dProps.scss -│ │ │ │ │ │ topology.scss -│ │ │ │ │ │ topologyL5.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─L5 -│ │ │ │ │ │ │ CanvasContextMenu.scss -│ │ │ │ │ │ │ CanvasProps.scss -│ │ │ │ │ │ │ topologyTopTool.scss -│ │ │ │ │ │ │ topoTooltip.scss -│ │ │ │ │ │ │ -│ │ │ │ │ │ └─popData -│ │ │ │ │ │ common.scss -│ │ │ │ │ │ -│ │ │ │ │ └─popData -│ │ │ │ │ Info.scss -│ │ │ │ │ -│ │ │ │ ├─rightBox -│ │ │ │ │ │ addEndpointBox.scss -│ │ │ │ │ │ alertRuleBox.scss -│ │ │ │ │ │ alertSilenceBox.scss -│ │ │ │ │ │ assetBactchEditBox.scss -│ │ │ │ │ │ assetMetaBox.scss -│ │ │ │ │ │ assetStateBox.scss -│ │ │ │ │ │ backupsBox.scss -│ │ │ │ │ │ batchAddEndpoint.scss -│ │ │ │ │ │ batchModifyEndpoint.scss -│ │ │ │ │ │ editEndpointBoxNew.scss -│ │ │ │ │ │ ipam.scss -│ │ │ │ │ │ issueBox.scss -│ │ │ │ │ │ locationCascader.scss -│ │ │ │ │ │ menuBox.scss -│ │ │ │ │ │ mibBox.scss -│ │ │ │ │ │ moduleBox.scss -│ │ │ │ │ │ panelBox.scss -│ │ │ │ │ │ pipelineSelect.scss -│ │ │ │ │ │ recordRuleBox.css -│ │ │ │ │ │ recordRuleBox.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─asset -│ │ │ │ │ │ assetBox.scss -│ │ │ │ │ │ assetDiscoveryBox.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─chartRightBox -│ │ │ │ │ │ chartRightBox.scss -│ │ │ │ │ │ -│ │ │ │ │ └─trafficSetting -│ │ │ │ │ subBox.scss -│ │ │ │ │ trafficSettingTab.scss -│ │ │ │ │ -│ │ │ │ ├─table -│ │ │ │ │ ├─alert -│ │ │ │ │ │ alertMessageTable.scss -│ │ │ │ │ │ alertRuleTable.scss -│ │ │ │ │ │ alertSilenceTable.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─asset -│ │ │ │ │ │ assetTable.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─settings -│ │ │ │ │ │ backupsTable.scss -│ │ │ │ │ │ cortexDetailTable.scss -│ │ │ │ │ │ endpointTable.scss -│ │ │ │ │ │ switchTab.scss -│ │ │ │ │ │ userTable.scss -│ │ │ │ │ │ -│ │ │ │ │ └─special -│ │ │ │ │ endpointQuery.scss -│ │ │ │ │ -│ │ │ │ ├─threshold -│ │ │ │ │ threshold.scss -│ │ │ │ │ -│ │ │ │ └─v-selectpagenew -│ │ │ │ selectpage.scss -│ │ │ │ -│ │ │ ├─introjs -│ │ │ │ introjs-dark.scss -│ │ │ │ introjs.scss -│ │ │ │ -│ │ │ ├─layout -│ │ │ │ container.scss -│ │ │ │ header.scss -│ │ │ │ home.scss -│ │ │ │ leftMenu.scss -│ │ │ │ -│ │ │ └─page -│ │ │ ├─alert -│ │ │ │ alertMessage.scss -│ │ │ │ nzAlertTag.scss -│ │ │ │ -│ │ │ ├─config -│ │ │ │ │ about.scss -│ │ │ │ │ agent.scss -│ │ │ │ │ assetMeta.scss -│ │ │ │ │ backups.scss -│ │ │ │ │ licenseGen.scss -│ │ │ │ │ mibBrowser.scss -│ │ │ │ │ operationRecord.scss -│ │ │ │ │ profile.scss -│ │ │ │ │ profileChangePin.scss -│ │ │ │ │ setup.scss -│ │ │ │ │ system.scss -│ │ │ │ │ -│ │ │ │ └─system -│ │ │ │ license.scss -│ │ │ │ notifyMethodTab.scss -│ │ │ │ -│ │ │ ├─dashboard -│ │ │ │ │ chartBox.scss -│ │ │ │ │ panel.scss -│ │ │ │ │ -│ │ │ │ ├─explore -│ │ │ │ │ explore.scss -│ │ │ │ │ exploreHistory.scss -│ │ │ │ │ logTab.scss -│ │ │ │ │ promqlInput.scss -│ │ │ │ │ queryPrompt.scss -│ │ │ │ │ -│ │ │ │ └─overview -│ │ │ │ chart.scss -│ │ │ │ overview2.scss -│ │ │ │ -│ │ │ ├─integration -│ │ │ │ integration.scss -│ │ │ │ -│ │ │ ├─monitor -│ │ │ │ └─project -│ │ │ │ project.scss -│ │ │ │ -│ │ │ ├─notebook -│ │ │ │ notebook.scss -│ │ │ │ -│ │ │ ├─softwareType -│ │ │ │ softwareType.scss -│ │ │ │ -│ │ │ └─tool -│ │ │ ping.scss -│ │ │ trace.scss +│ │ ├─components 组件css │ │ │ -│ │ ├─font -│ │ │ iconfont.css -│ │ │ iconfont.eot -│ │ │ iconfont.js -│ │ │ iconfont.json -│ │ │ iconfont.svg -│ │ │ iconfont.ttf -│ │ │ iconfont.woff -│ │ │ iconfont.woff2 -│ │ │ Inter-Regular.ttf -│ │ │ metricPreview.scss -│ │ │ NotoSans-Regular.ttf -│ │ │ NunitoSans-Regular.ttf +│ │ ├─font 字体图标css │ │ │ -│ │ └─themes -│ │ │ common.scss -│ │ │ theme-dark.scss -│ │ │ theme-light.scss -│ │ │ -│ │ └─src -│ │ │ alert.scss -│ │ │ aside.scss -│ │ │ autocomplete.scss -│ │ │ avatar.scss -│ │ │ backtop.scss -│ │ │ badge.scss -│ │ │ base.scss -│ │ │ breadcrumb-item.scss -│ │ │ breadcrumb.scss -│ │ │ button-group.scss -│ │ │ button.scss -│ │ │ calendar.scss -│ │ │ card.scss -│ │ │ carousel-item.scss -│ │ │ carousel.scss -│ │ │ cascader-panel.scss -│ │ │ cascader.scss -│ │ │ checkbox-button.scss -│ │ │ checkbox-group.scss -│ │ │ checkbox.scss -│ │ │ col.scss -│ │ │ collapse-item.scss -│ │ │ collapse.scss -│ │ │ color-picker.scss -│ │ │ container.scss -│ │ │ date-picker.scss -│ │ │ descriptions-item.scss -│ │ │ descriptions.scss -│ │ │ dialog.scss -│ │ │ display.scss -│ │ │ divider.scss -│ │ │ drawer.scss -│ │ │ dropdown-item.scss -│ │ │ dropdown-menu.scss -│ │ │ dropdown.scss -│ │ │ empty.scss -│ │ │ footer.scss -│ │ │ form-item.scss -│ │ │ form.scss -│ │ │ header.scss -│ │ │ icon.scss -│ │ │ image.scss -│ │ │ index.scss -│ │ │ infinite-scroll.scss -│ │ │ infiniteScroll.scss -│ │ │ input-number.scss -│ │ │ input.scss -│ │ │ link.scss -│ │ │ loading.scss -│ │ │ main.scss -│ │ │ menu-item-group.scss -│ │ │ menu-item.scss -│ │ │ menu.scss -│ │ │ message-box.scss -│ │ │ message.scss -│ │ │ notification.scss -│ │ │ option-group.scss -│ │ │ option.scss -│ │ │ page-header.scss -│ │ │ pagination.scss -│ │ │ popconfirm.scss -│ │ │ popover.scss -│ │ │ popper.scss -│ │ │ progress.scss -│ │ │ radio-button.scss -│ │ │ radio-group.scss -│ │ │ radio.scss -│ │ │ rate.scss -│ │ │ reset.scss -│ │ │ result.scss -│ │ │ row.scss -│ │ │ scrollbar.scss -│ │ │ select-dropdown.scss -│ │ │ select.scss -│ │ │ skeleton-item.scss -│ │ │ skeleton.scss -│ │ │ slider.scss -│ │ │ spinner.scss -│ │ │ step.scss -│ │ │ steps.scss -│ │ │ submenu.scss -│ │ │ switch.scss -│ │ │ tab-pane.scss -│ │ │ table-column.scss -│ │ │ table.scss -│ │ │ tabs.scss -│ │ │ tag.scss -│ │ │ time-picker.scss -│ │ │ time-select.scss -│ │ │ timeline-item.scss -│ │ │ timeline.scss -│ │ │ tooltip.scss -│ │ │ transfer.scss -│ │ │ tree.scss -│ │ │ upload.scss -│ │ │ -│ │ ├─common -│ │ │ popup.scss -│ │ │ transition.scss -│ │ │ var.scss -│ │ │ -│ │ ├─date-picker -│ │ │ date-picker.scss -│ │ │ date-range-picker.scss -│ │ │ date-table.scss -│ │ │ month-table.scss -│ │ │ picker-panel.scss -│ │ │ picker.scss -│ │ │ time-picker.scss -│ │ │ time-range-picker.scss -│ │ │ time-spinner.scss -│ │ │ year-table.scss -│ │ │ -│ │ ├─fonts -│ │ │ element-icons.ttf -│ │ │ element-icons.woff -│ │ │ -│ │ └─mixins -│ │ config.scss -│ │ function.scss -│ │ mixins.scss -│ │ utils.scss -│ │ _button.scss +│ │ └─themes 主题css +│ │ │ +│ ├─img 图片文件 +│ │ │ +│ └─stylus 对外暴露的css (所有css) +│ +├─components 组件 +│ ├─chart 所有 chart 主要相关的组件 │ │ -│ ├─img -│ │ dc.png -│ │ dc1.png -│ │ dc2.png -│ │ dc3.png -│ │ down.png -│ │ explore-tab-logo.png -│ │ favicon.ico -│ │ jj.png -│ │ jj1.png -│ │ jj3.png -│ │ loading.gif -│ │ login-background.png -│ │ logo-big.png -│ │ logo.svg -│ │ logo1-2.png -│ │ starCloud1.svg -│ │ starCloud2.svg -│ │ starCloud3.svg -│ │ starCloud4.svg -│ │ starCloud5.svg -│ │ starCloud6.svg -│ │ starCloud7.svg -│ │ system-sound-settings.gif -│ │ up.png +│ ├─cli 前端shell组件 │ │ -│ └─stylus -│ index.scss -│ main.scss -│ -├─components -│ ├─chart -│ │ │ assetInfoData.js -│ │ │ chart.vue -│ │ │ chartDataFormat.js -│ │ │ chartDetail.vue -│ │ │ chartDetailNew.vue -│ │ │ chartFormat.js -│ │ │ chartHeader.vue -│ │ │ chartHeaderMixin.js -│ │ │ chartList.vue -│ │ │ chartMixin.js -│ │ │ ChartScreenHeader.vue -│ │ │ chartTempData.js -│ │ │ defaultLineData.js -│ │ │ defaultLogData.js -│ │ │ defaultTableData.js -│ │ │ endpointInfoData.js -│ │ │ logContext.vue -│ │ │ logsData.js -│ │ │ markdownEditor.vue -│ │ │ panelChart.vue -│ │ │ renderChart.js -│ │ │ richTextEditor.vue -│ │ │ tempGroup.js +│ ├─common 公共组件 │ │ │ -│ │ └─chart -│ │ │ chart-table.vue -│ │ │ chartAssetInfo.vue -│ │ │ chartAutotopology.vue -│ │ │ chartBar.vue -│ │ │ chartBubble.vue -│ │ │ chartClock.vue -│ │ │ chartDiagram.vue -│ │ │ chartDoughnut.vue -│ │ │ chartEndpointInfo.vue -│ │ │ chartFunnel.vue -│ │ │ chartGauge.vue -│ │ │ chartGroup.vue -│ │ │ chartHexagonD3.vue -│ │ │ chartLog.vue -│ │ │ chartMap.vue -│ │ │ chartNoData.vue -│ │ │ chartPie.vue -│ │ │ chartRank.vue -│ │ │ chartRose.vue -│ │ │ chartSankey.vue -│ │ │ chartStat.vue -│ │ │ chartTable.vue -│ │ │ chartText.vue -│ │ │ chartTimeSeries.vue -│ │ │ chartTopology.vue -│ │ │ chartTreemap.vue -│ │ │ chartUrl.vue -│ │ │ legend.vue -│ │ │ line-chart-block.vue -│ │ │ mapStyle.js -│ │ │ tools.js -│ │ │ -│ │ ├─grid -│ │ │ aspectRatio.js -│ │ │ CustomDragElement.vue -│ │ │ DOM.js -│ │ │ draggableUtils.js -│ │ │ GridItem.vue -│ │ │ GridLayout.vue -│ │ │ index.js -│ │ │ responsiveUtils.js -│ │ │ TestElement.vue -│ │ │ utils.js -│ │ │ -│ │ ├─options -│ │ │ chartBar.js -│ │ │ chartClock.js -│ │ │ chartGauge.js -│ │ │ chartHexagonD3.js -│ │ │ chartPie.js -│ │ │ chartSparkline.js -│ │ │ chartTimeSeries.js -│ │ │ chartTreemap.js -│ │ │ fontWidth.js -│ │ │ -│ │ └─uplot -│ │ chartTimeSeries.vue -│ │ chartTimeSeriesMixin.js -│ │ stack.js -│ │ testData.js -│ │ -│ ├─cli -│ │ console.vue -│ │ consoleNew.vue -│ │ fileDirectory.vue -│ │ fileListState.vue -│ │ terminal.vue -│ │ webSSH.vue -│ │ webSSHNew.vue -│ │ -│ ├─common -│ │ │ browserWindowZoom.vue -│ │ │ chartUnit.vue -│ │ │ configSync.vue -│ │ │ copy.vue -│ │ │ deleteButton.vue -│ │ │ diagnosisTab.vue -│ │ │ elementSet.vue -│ │ │ i18n.js -│ │ │ intro.vue -│ │ │ latlngPicker.vue -│ │ │ loading.vue -│ │ │ login.vue -│ │ │ metaData.vue -│ │ │ multipleTime.vue -│ │ │ nezhaColor.vue -│ │ │ nzTransfer.vue -│ │ │ pagination.vue -│ │ │ pickTime.vue -│ │ │ playlist.vue -│ │ │ searchInput.vue -│ │ │ searchSelectInfo.js -│ │ │ selectTable.vue -│ │ │ timePicker.vue +│ │ ├─alert hover弹窗相关组件 │ │ │ -│ │ ├─alert -│ │ │ alertDaysInfo.vue -│ │ │ alertDetail.vue -│ │ │ alertLabel.vue -│ │ │ alertLabel2.vue -│ │ │ alertLabel3.vue -│ │ │ alertMessageInfo.vue -│ │ │ alertMessageInfoDetail.vue -│ │ │ alertMessageInfoTab.vue -│ │ │ alertMessageInfoTimeLine.vue -│ │ │ alertMessageLabelMixin.js -│ │ │ alertRuleInfo.vue -│ │ │ alertRuleInfo2.vue -│ │ │ alertStateInfo.vue -│ │ │ nzTooltip.vue -│ │ │ selectAlertSilence.vue -│ │ │ terminalLogInfo.vue -│ │ │ trendMixins.js +│ │ ├─bottomBox 底弹窗 +│ │ │ └─tabs 底弹窗分页面 │ │ │ -│ │ ├─bottomBox -│ │ │ │ bottomBox.vue -│ │ │ │ nzBottomDataList.vue +│ │ ├─detailView 详细视图组件 +│ │ │ +│ │ ├─elSelect 重写element select +│ │ │ +│ │ │ +│ │ ├─globalSearch 公关稿搜索组件 +│ │ │ +│ │ ├─js 部分公用js +│ │ │ │ common.js 工具函数 +│ │ │ │ constants.js 静态数据 +│ │ │ │ divResize.js div改变宽高 +│ │ │ │ example.js 工具函数 处理 处理legend的别名 +│ │ │ │ htmlToPdf.js 将 html 转为pdf +│ │ │ │ iconList.js 部分字体图标静态数据 +│ │ │ │ tools.js 工具函数 +│ │ │ │ validate.js element 校验函数 +│ │ │ │ Xterm.js 前端shell 引用文件 │ │ │ │ -│ │ │ └─tabs -│ │ │ alertMessageTab.vue -│ │ │ alertMessageTabNew.vue -│ │ │ alertRuleEvalLog.vue -│ │ │ assetSubTab.vue -│ │ │ assetTab.vue -│ │ │ cabinetTab.vue -│ │ │ commentsBottomTab.vue -│ │ │ cortexDetail.vue -│ │ │ dashboardTab.vue -│ │ │ discoveryTab.vue -│ │ │ endpointQuery.vue -│ │ │ endpointTabNew.vue -│ │ │ IpDetails.vue -│ │ │ issueTab.vue -│ │ │ licenseManagementTab.vue -│ │ │ logBottomTab.vue -│ │ │ lokiStatus.vue -│ │ │ networkBottomTab.vue -│ │ │ notebookTab.vue -│ │ │ operationLogTab.vue -│ │ │ processBottomTab.vue -│ │ │ recordRuleEvalLog.vue -│ │ │ recordRulesQuery.vue -│ │ │ rolesTab.vue -│ │ │ scrapeEndpoint.vue -│ │ │ softwareAssetTab.vue -│ │ │ terminalLogCMDTab.vue -│ │ │ terminalLogMonitorTab.vue -│ │ │ terminalLogRecordTab.vue -│ │ │ terminalLogSftpTab.vue -│ │ │ terminalLogTab.vue -│ │ │ vsysBottomTab.vue +│ │ │ └─radomcolor 随机颜色 +│ │ │ color.txt 颜色数据 +│ │ │ randomcolor.js 随机颜色函数 │ │ │ -│ │ ├─copy-code -│ │ │ │ copy-code.css -│ │ │ │ index.js -│ │ │ │ preview.js -│ │ │ │ -│ │ │ └─utils -│ │ │ markdown-it-copy-code.js +│ │ ├─labelFilter asset endpoint 筛选组件 │ │ │ -│ │ ├─detailView -│ │ │ │ detailViewTopSearch.vue -│ │ │ │ nzDetailView.vue -│ │ │ │ -│ │ │ ├─list -│ │ │ │ ├─alertRule -│ │ │ │ │ alertRuleDetail.vue -│ │ │ │ │ -│ │ │ │ ├─asset -│ │ │ │ │ assetDetail.vue -│ │ │ │ │ -│ │ │ │ ├─dc -│ │ │ │ │ dcDetail.vue -│ │ │ │ │ -│ │ │ │ ├─endpoint -│ │ │ │ │ endpointDetail.vue -│ │ │ │ │ -│ │ │ │ ├─module -│ │ │ │ │ moduleDetail.vue -│ │ │ │ │ -│ │ │ │ ├─notebook -│ │ │ │ │ notebookDetail.vue -│ │ │ │ │ -│ │ │ │ ├─terminalLogDetail -│ │ │ │ │ terminalLogDetail.vue -│ │ │ │ │ -│ │ │ │ └─userDetail -│ │ │ │ userDetail.vue -│ │ │ │ -│ │ │ └─view -│ │ │ │ detailViewRight.vue -│ │ │ │ -│ │ │ └─detailRightTop -│ │ │ detailRightTop.vue +│ │ ├─language 国际化文件 │ │ │ -│ │ ├─elSelect -│ │ │ MyElSelect.vue │ │ │ -│ │ ├─filterSearch -│ │ │ filterSearch.vue -│ │ │ filterSearchData.js +│ │ ├─mixin vue混合 │ │ │ -│ │ ├─globalSearch -│ │ │ globalSearch.vue -│ │ │ searchItemInfo.vue +│ │ ├─myDatePicker 重构 el-data │ │ │ -│ │ ├─js -│ │ │ │ common.js -│ │ │ │ constants.js -│ │ │ │ divResize.js -│ │ │ │ example.js -│ │ │ │ htmlToPdf.js -│ │ │ │ iconList.js -│ │ │ │ tools.js -│ │ │ │ validate.js -│ │ │ │ Xterm.js -│ │ │ │ -│ │ │ └─radomcolor -│ │ │ color.txt -│ │ │ randomcolor.js +│ │ ├─project 拓扑图相关 │ │ │ -│ │ ├─labelFilter -│ │ │ clickSearch.vue -│ │ │ clickSearchNew.vue -│ │ │ dropdown.vue +│ │ ├─rightBox 右侧新增修改 │ │ │ -│ │ ├─language -│ │ │ cn.js -│ │ │ en.js -│ │ │ index.js -│ │ │ newcn.js -│ │ │ newen.js +│ │ ├─searchBox 搜索组件 │ │ │ -│ │ ├─message -│ │ │ │ index.js -│ │ │ │ -│ │ │ └─src -│ │ │ main.js -│ │ │ main.vue -│ │ │ -│ │ ├─mixin -│ │ │ │ alertLabelMixin.js -│ │ │ │ beforeMeta2d.js -│ │ │ │ chartDataList.js -│ │ │ │ dataList.js -│ │ │ │ detailViewLeftMixin.js -│ │ │ │ detailViewMixin.js -│ │ │ │ detailViewRightMixin.js -│ │ │ │ editRigthBox.js -│ │ │ │ exportHtml.js -│ │ │ │ globalVariables.js -│ │ │ │ htmlToPdfMixin.js -│ │ │ │ mainMixinFun.js -│ │ │ │ promqlInput.js -│ │ │ │ routerPathParams.js -│ │ │ │ subDataList.js -│ │ │ │ table.js -│ │ │ │ -│ │ │ └─system -│ │ │ systemMixin.js -│ │ │ -│ │ ├─myDatePicker -│ │ │ │ index.js -│ │ │ │ -│ │ │ └─src -│ │ │ │ picker.vue -│ │ │ │ -│ │ │ ├─basic -│ │ │ │ date-table.vue -│ │ │ │ month-table.vue -│ │ │ │ time-spinner.vue -│ │ │ │ year-table.vue -│ │ │ │ -│ │ │ ├─panel -│ │ │ │ date-range.vue -│ │ │ │ date.vue -│ │ │ │ month-range.vue -│ │ │ │ time-range.vue -│ │ │ │ time-select.vue -│ │ │ │ time.vue -│ │ │ │ -│ │ │ └─picker -│ │ │ date-picker.js -│ │ │ time-picker.js -│ │ │ time-select.js -│ │ │ -│ │ ├─overView -│ │ │ messageAsset.vue -│ │ │ -│ │ ├─panel -│ │ │ panelVariables.vue -│ │ │ -│ │ ├─popBox -│ │ │ guide.vue -│ │ │ selectAssetMetaGroup.vue -│ │ │ selectAssetType.vue -│ │ │ selectDashboard.vue -│ │ │ selectPanel.vue -│ │ │ selectWalk.vue -│ │ │ topToolMoreOptions.vue -│ │ │ -│ │ ├─project -│ │ │ │ topoData.js -│ │ │ │ topologyMixin.js -│ │ │ │ -│ │ │ ├─image -│ │ │ │ emptyData.png -│ │ │ │ -│ │ │ ├─L5 -│ │ │ │ topoTooltip.vue -│ │ │ │ -│ │ │ ├─meta2d -│ │ │ │ │ CanvasContextMenu.vue -│ │ │ │ │ meta2dCanvas.vue -│ │ │ │ │ meta2dData.vue -│ │ │ │ │ meta2dElement.vue -│ │ │ │ │ meta2dHeader.vue -│ │ │ │ │ meta2dMain.vue -│ │ │ │ │ meta2dProps.vue -│ │ │ │ │ meta2dSelectImage.vue -│ │ │ │ │ meta2dTooltip.vue -│ │ │ │ │ topologyTopTool.vue -│ │ │ │ │ -│ │ │ │ └─js -│ │ │ │ defaultIcon.js -│ │ │ │ defaultPenLineData.js -│ │ │ │ meta2dMainCalc.js -│ │ │ │ meta2dStore.js -│ │ │ │ topoUtil.js -│ │ │ │ -│ │ │ └─popData -│ │ │ alertTable.vue -│ │ │ assetTable.vue -│ │ │ endpointTable.vue -│ │ │ expressionInfo.vue -│ │ │ Info.vue -│ │ │ Main.vue -│ │ │ -│ │ ├─rightBox -│ │ │ │ addEndpointBox.vue -│ │ │ │ agentBox.vue -│ │ │ │ alertRuleBox.vue -│ │ │ │ alertSilenceBox.vue -│ │ │ │ apiKeyBox.vue -│ │ │ │ assetMetaBox.vue -│ │ │ │ assetMetaGroup.vue -│ │ │ │ assetStateBox.vue -│ │ │ │ batchAddEndpoint.vue -│ │ │ │ batchEditEndpoint.vue -│ │ │ │ batchModifyEndpoint.vue -│ │ │ │ cabinetBox.vue -│ │ │ │ chartTempBox.vue -│ │ │ │ dashboardTempBox.vue -│ │ │ │ dcBox.vue -│ │ │ │ editEndpointBoxNew.vue -│ │ │ │ exprTmplBox.vue -│ │ │ │ ipamBox.vue -│ │ │ │ ipDetailsBox.vue -│ │ │ │ issueBox.vue -│ │ │ │ locationCascader.vue -│ │ │ │ menuBox.vue -│ │ │ │ mibBox.vue -│ │ │ │ moduleBox.vue -│ │ │ │ panelBox.vue -│ │ │ │ pipelineSelect.vue -│ │ │ │ playlistBox.vue -│ │ │ │ profileBox.vue -│ │ │ │ projectBox.vue -│ │ │ │ recordRuleBox.vue -│ │ │ │ snmpCredentialBox.vue -│ │ │ │ -│ │ │ ├─administration -│ │ │ │ assetTypeBox.vue -│ │ │ │ backupsBox.vue -│ │ │ │ modelBox.vue -│ │ │ │ roleBox.vue -│ │ │ │ userBox.vue -│ │ │ │ -│ │ │ ├─asset -│ │ │ │ assetBatchEditBox.vue -│ │ │ │ assetBox.vue -│ │ │ │ assetDiscoveryBox.vue -│ │ │ │ -│ │ │ ├─chart -│ │ │ │ chartConfig.vue -│ │ │ │ chartRightBox.vue -│ │ │ │ chartTypeShow.js -│ │ │ │ otherChartConfig.vue -│ │ │ │ publicConfig.js -│ │ │ │ systemChartConfig.vue -│ │ │ │ -│ │ │ ├─setting -│ │ │ │ cabinetBox.vue -│ │ │ │ globalizationBox.vue -│ │ │ │ -│ │ │ ├─software -│ │ │ │ softwareAssetBox.vue -│ │ │ │ softwareTypeBox.vue -│ │ │ │ -│ │ │ └─trafficSetting -│ │ │ subBox.vue -│ │ │ trafficSettingBox.vue -│ │ │ trafficSettingTab.vue -│ │ │ -│ │ ├─searchBox -│ │ │ searchBox.vue -│ │ │ searchBoxInfo.js -│ │ │ -│ │ ├─snapshotProgress +│ │ ├─snapshotProgress 快照蒙版 │ │ │ snapshotProgress.vue │ │ │ -│ │ ├─table -│ │ │ │ nzDataList.vue -│ │ │ │ -│ │ │ ├─alert -│ │ │ │ alertMessageTable.vue -│ │ │ │ alertRuleEvalLogTable.vue -│ │ │ │ alertRuleTable.vue -│ │ │ │ alertSilenceTable.vue -│ │ │ │ -│ │ │ ├─asset -│ │ │ │ assetCommentTable.vue -│ │ │ │ assetDiscoveryTable.vue -│ │ │ │ assetMetaTable.vue -│ │ │ │ assetNetworkTable.vue -│ │ │ │ assetProcessTable.vue -│ │ │ │ assetTable.vue -│ │ │ │ assetVsysTable.vue -│ │ │ │ disccoveryTabTable.vue -│ │ │ │ licenseMangeTable.vue -│ │ │ │ -│ │ │ ├─settings -│ │ │ │ agentTable.vue -│ │ │ │ assetTypeTable.vue -│ │ │ │ backupsTable.vue -│ │ │ │ cabinetTable.vue -│ │ │ │ chartTmplTable.vue -│ │ │ │ cortexDetailTable.vue -│ │ │ │ credentialsTable.vue -│ │ │ │ dashboardTmplTable.vue -│ │ │ │ dcTable.vue -│ │ │ │ endpointTable.vue -│ │ │ │ exprTmplTable.vue -│ │ │ │ globalizationTable.vue -│ │ │ │ ipamTable.vue -│ │ │ │ ipDetailsTable.vue -│ │ │ │ issueTable.vue -│ │ │ │ lokiStatusTable.vue -│ │ │ │ menuTable.vue -│ │ │ │ mibTable.vue -│ │ │ │ modelTable.vue -│ │ │ │ moduleTable.vue -│ │ │ │ notebookTable.vue -│ │ │ │ operationLogTable.vue -│ │ │ │ projectTable.vue -│ │ │ │ recordRuleEvalLogTable.vue -│ │ │ │ recordRuleTable.vue -│ │ │ │ roleTable.vue -│ │ │ │ scrapeEndpointTable.vue -│ │ │ │ softwareAssetTable.vue -│ │ │ │ softwareTypeTable.vue -│ │ │ │ terminalLogSftpTable.vue -│ │ │ │ terminalLogTable.vue -│ │ │ │ userTable.vue -│ │ │ │ userTabTable.vue -│ │ │ │ -│ │ │ ├─special -│ │ │ │ endpointQueryTab.vue -│ │ │ │ recordRulesQueryTab.vue -│ │ │ │ -│ │ │ └─tool -│ │ │ pingTable.vue -│ │ │ traceTable.vue +│ │ ├─table table组件 │ │ │ -│ │ ├─v-selectpagenew -│ │ │ │ index.js -│ │ │ │ methods.js -│ │ │ │ Pagination.js -│ │ │ │ Selectpage.js -│ │ │ │ Table.js -│ │ │ │ -│ │ │ └─css -│ │ │ selectPage.css +│ │ ├─v-selectpagenew 重构的 v-selectpage │ │ │ -│ │ └─vueQR -│ │ └─packages -│ │ index.js -│ │ readAsArrayBuffer.js -│ │ util.js -│ │ vue-qr.vue +│ │ └─vueQR 二维码 │ │ -│ ├─layout -│ │ container.vue -│ │ header.vue -│ │ home.vue -│ │ leftMenu.vue +│ ├─layout 布局 +│ │ container.vue 主体 +│ │ header.vue 头部 +│ │ home.vue 容器 +│ │ leftMenu.vue 左侧菜单 │ │ -│ └─page -│ │ uPlot.vue -│ │ -│ ├─alert -│ │ alertMessage.vue -│ │ alertRule.vue -│ │ alertSilence.vue -│ │ nzAlertTag.vue -│ │ -│ ├─asset -│ │ │ asset.vue -│ │ │ assetDiscovery.vue -│ │ │ -│ │ ├─components -│ │ │ alert.vue -│ │ │ assetTagEx.vue -│ │ │ endpoint.vue -│ │ │ ping.vue -│ │ │ -│ │ └─software -│ │ softwareAsset.vue -│ │ softwareType.vue -│ │ -│ ├─config -│ │ │ about.vue -│ │ │ agent.vue -│ │ │ assetMeta.vue -│ │ │ assetState.vue -│ │ │ assetType.vue -│ │ │ backups.vue -│ │ │ basic.vue -│ │ │ credentials.vue -│ │ │ dc.vue -│ │ │ email.vue -│ │ │ globalization.vue -│ │ │ ipam.vue -│ │ │ issue.vue -│ │ │ ldap.vue -│ │ │ licenseGen.vue -│ │ │ menus.vue -│ │ │ mib.vue -│ │ │ mibBrowser.vue -│ │ │ model.vue -│ │ │ monitor.vue -│ │ │ operationLog.vue -│ │ │ operationRecord.vue -│ │ │ profile.vue -│ │ │ profileChangePin.vue -│ │ │ recordRule.vue -│ │ │ roles.vue -│ │ │ setup.vue -│ │ │ snmp.vue -│ │ │ system.vue -│ │ │ terminal.vue -│ │ │ terminalLog.vue -│ │ │ user.vue -│ │ │ -│ │ ├─system -│ │ │ apiKeyTab.vue -│ │ │ apiKeyTable.vue -│ │ │ license.vue -│ │ │ licenseData.js -│ │ │ linkTab.vue -│ │ │ linkTable.vue -│ │ │ notifyMethodTab.vue -│ │ │ notifyMethodTable.vue -│ │ │ selfApiKeyTab.vue -│ │ │ selfApiKeyTable.vue -│ │ │ systemCommon.js -│ │ │ -│ │ └─template -│ │ chartTemp.vue -│ │ dashboardTemp.vue -│ │ exprTemp.vue -│ │ index.vue -│ │ -│ ├─dashboard -│ │ │ alertChartParam.vue -│ │ │ dashboard.vue -│ │ │ -│ │ ├─explore -│ │ │ │ CMTheme.tsx -│ │ │ │ explore.vue -│ │ │ │ exploreItem.vue -│ │ │ │ exploreItemHtml.vue -│ │ │ │ exploreItemMixin.js -│ │ │ │ logqlHint.js -│ │ │ │ logTab.vue -│ │ │ │ promqlInput.vue -│ │ │ │ suggestions.vue -│ │ │ │ -│ │ │ ├─histoyrComponent -│ │ │ │ exploreHistory.vue -│ │ │ │ -│ │ │ ├─logql -│ │ │ │ getTimeRange.js -│ │ │ │ lezerConfig.js -│ │ │ │ logql.vue -│ │ │ │ logqlMixin.js -│ │ │ │ monacoConfig.js -│ │ │ │ setError.js -│ │ │ │ situation.js -│ │ │ │ -│ │ │ ├─logqlparser -│ │ │ │ logqloarser.go -│ │ │ │ -│ │ │ ├─MonacoVue -│ │ │ │ vue-monaco.js -│ │ │ │ -│ │ │ ├─promqlparser -│ │ │ │ go.mod -│ │ │ │ go.sum -│ │ │ │ promqlparser.go -│ │ │ │ promqlparser.wasm -│ │ │ │ wasm_exec.js -│ │ │ │ -│ │ │ └─queryPrompt -│ │ │ queryPrompt.vue -│ │ │ -│ │ └─overview -│ │ chart.vue -│ │ chartConfig.vue -│ │ -│ ├─integration -│ │ │ integration.vue -│ │ │ -│ │ └─integration-tabs -│ │ alert.vue -│ │ automatic.vue -│ │ configuration.vue -│ │ dashboard.vue -│ │ integration-tabs.vue -│ │ manual.vue -│ │ metric.vue -│ │ -│ ├─monitor -│ │ ├─endpoint -│ │ │ endpointList.vue -│ │ │ -│ │ ├─module -│ │ │ moduleList.vue -│ │ │ -│ │ └─project -│ │ index.vue -│ │ project.vue -│ │ projectList.vue -│ │ -│ ├─notebook -│ │ notebook.vue -│ │ notebookAdd.vue -│ │ notebookList.vue -│ │ -│ └─tool -│ assetDiscovery.vue -│ ping.vue -│ trace.vue +│ └─page 页面 │ -├─entrance -│ ├─app -│ │ App.vue -│ │ index.html -│ │ lodashInfo.md -│ │ main.js +├─entrance 打包入口 +│ ├─app 基础 │ │ -│ └─exportHtml -│ App.vue -│ exportHtml.html -│ exportHtml.js -│ i18nData.js +│ └─exportHtml 快照 │ -├─libs -│ bus.js +├─libs 工具函数 │ -├─router -│ │ index.js -│ │ -│ └─exportHtmlRouter -│ index.js +├─router 路由 │ -└─store - exportHtml.js - index.js - panel.js - terminalFile.js - timePicker.js - topology.js - user.js +└─store vuex ``` \ No newline at end of file diff --git a/nezha-docs/src/__docs__/index.zh-CN.md b/nezha-docs/src/__docs__/index.zh-CN.md index 480c01b1c..7f8b6e547 100644 --- a/nezha-docs/src/__docs__/index.zh-CN.md +++ b/nezha-docs/src/__docs__/index.zh-CN.md @@ -11,1147 +11,98 @@ map: # 目录结构 ``` -│ http.js -│ permission.js +│ http.js axios 请求的实例 处理请求头等公共参数 +│ permission.js 权限 │ -├─assets -│ ├─css -│ │ │ animate.css -│ │ │ common.scss -│ │ │ font.scss -│ │ │ index.scss -│ │ │ main.scss -│ │ │ nzIcon.css -│ │ │ THEME_README.md +├─assets 部分静态资源 +│ ├─css 公共css │ │ │ -│ │ ├─common -│ │ │ button.scss -│ │ │ checkbox.scss -│ │ │ index.scss -│ │ │ loading.scss -│ │ │ maplibre-gl.css -│ │ │ rightBoxCommon.scss -│ │ │ tableCommon.scss -│ │ │ tooltip.scss +│ │ ├─common 组件css │ │ │ -│ │ ├─components -│ │ │ │ index.scss -│ │ │ │ -│ │ │ ├─chart -│ │ │ │ chart.scss -│ │ │ │ -│ │ │ ├─charts -│ │ │ │ chart-list.scss -│ │ │ │ chart.scss -│ │ │ │ -│ │ │ ├─cli -│ │ │ │ fileDirectory.scss -│ │ │ │ fileListState.scss -│ │ │ │ webSSH.scss -│ │ │ │ webSSHNew.scss -│ │ │ │ -│ │ │ ├─common -│ │ │ │ │ browserWindowZoom.scss -│ │ │ │ │ chartUnit.scss -│ │ │ │ │ configSync.scss -│ │ │ │ │ deleteButton.scss -│ │ │ │ │ diagnosisTab.scss -│ │ │ │ │ elementSet.scss -│ │ │ │ │ intro.scss -│ │ │ │ │ latIngPicker.scss -│ │ │ │ │ loading.scss -│ │ │ │ │ login.css -│ │ │ │ │ login.scss -│ │ │ │ │ multipleTime.scss -│ │ │ │ │ nezhaColor.scss -│ │ │ │ │ nzTransfer.scss -│ │ │ │ │ pagination.scss -│ │ │ │ │ searchBox.scss -│ │ │ │ │ searchInput.scss -│ │ │ │ │ selectTable.scss -│ │ │ │ │ timePicker.scss -│ │ │ │ │ v-md-editor.scss -│ │ │ │ │ -│ │ │ │ ├─alert -│ │ │ │ │ alertDaysInfo.scss -│ │ │ │ │ alertLabel.scss -│ │ │ │ │ alertMessageInfo.scss -│ │ │ │ │ alertRuleInfo.scss -│ │ │ │ │ alertStateInfo.scss -│ │ │ │ │ selectAlertSilence.scss -│ │ │ │ │ -│ │ │ │ ├─bottomBox -│ │ │ │ │ bottomBox.scss -│ │ │ │ │ dashboardTab.scss -│ │ │ │ │ issueTab.scss -│ │ │ │ │ terminalLogCMDTab.scss -│ │ │ │ │ terminalLogMonitorTab.scss -│ │ │ │ │ terminalLogRecordTab.scss -│ │ │ │ │ -│ │ │ │ ├─detailView -│ │ │ │ │ │ detailView.scss -│ │ │ │ │ │ detailViewTopSearch.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─list -│ │ │ │ │ │ common.scss -│ │ │ │ │ │ -│ │ │ │ │ └─view -│ │ │ │ │ detailRightTop.scss -│ │ │ │ │ detailViewRight.scss -│ │ │ │ │ -│ │ │ │ ├─filterSearch -│ │ │ │ │ filterSearch.scss -│ │ │ │ │ -│ │ │ │ ├─globalSearch -│ │ │ │ │ globalSearch.scss -│ │ │ │ │ searchItemInfo.scss -│ │ │ │ │ -│ │ │ │ ├─labelFilter -│ │ │ │ │ clickSearch.scss -│ │ │ │ │ -│ │ │ │ ├─panel -│ │ │ │ │ panelVariables.scss -│ │ │ │ │ -│ │ │ │ ├─paramBpx -│ │ │ │ │ paramBox.scss -│ │ │ │ │ -│ │ │ │ ├─picker -│ │ │ │ │ picker.scss -│ │ │ │ │ -│ │ │ │ ├─popBox -│ │ │ │ │ guide.scss -│ │ │ │ │ selectAssetMetaGroup.scss -│ │ │ │ │ selectAssetType.scss -│ │ │ │ │ selectDashboard.scss -│ │ │ │ │ selectPanel.scss -│ │ │ │ │ selectWalk.scss -│ │ │ │ │ snapshotProgress.scss -│ │ │ │ │ -│ │ │ │ ├─project -│ │ │ │ │ │ chart.scss -│ │ │ │ │ │ meta2dHeader.scss -│ │ │ │ │ │ meta2dMain.scss -│ │ │ │ │ │ meta2dProps.scss -│ │ │ │ │ │ topology.scss -│ │ │ │ │ │ topologyL5.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─L5 -│ │ │ │ │ │ │ CanvasContextMenu.scss -│ │ │ │ │ │ │ CanvasProps.scss -│ │ │ │ │ │ │ topologyTopTool.scss -│ │ │ │ │ │ │ topoTooltip.scss -│ │ │ │ │ │ │ -│ │ │ │ │ │ └─popData -│ │ │ │ │ │ common.scss -│ │ │ │ │ │ -│ │ │ │ │ └─popData -│ │ │ │ │ Info.scss -│ │ │ │ │ -│ │ │ │ ├─rightBox -│ │ │ │ │ │ addEndpointBox.scss -│ │ │ │ │ │ alertRuleBox.scss -│ │ │ │ │ │ alertSilenceBox.scss -│ │ │ │ │ │ assetBactchEditBox.scss -│ │ │ │ │ │ assetMetaBox.scss -│ │ │ │ │ │ assetStateBox.scss -│ │ │ │ │ │ backupsBox.scss -│ │ │ │ │ │ batchAddEndpoint.scss -│ │ │ │ │ │ batchModifyEndpoint.scss -│ │ │ │ │ │ editEndpointBoxNew.scss -│ │ │ │ │ │ ipam.scss -│ │ │ │ │ │ issueBox.scss -│ │ │ │ │ │ locationCascader.scss -│ │ │ │ │ │ menuBox.scss -│ │ │ │ │ │ mibBox.scss -│ │ │ │ │ │ moduleBox.scss -│ │ │ │ │ │ panelBox.scss -│ │ │ │ │ │ pipelineSelect.scss -│ │ │ │ │ │ recordRuleBox.css -│ │ │ │ │ │ recordRuleBox.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─asset -│ │ │ │ │ │ assetBox.scss -│ │ │ │ │ │ assetDiscoveryBox.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─chartRightBox -│ │ │ │ │ │ chartRightBox.scss -│ │ │ │ │ │ -│ │ │ │ │ └─trafficSetting -│ │ │ │ │ subBox.scss -│ │ │ │ │ trafficSettingTab.scss -│ │ │ │ │ -│ │ │ │ ├─table -│ │ │ │ │ ├─alert -│ │ │ │ │ │ alertMessageTable.scss -│ │ │ │ │ │ alertRuleTable.scss -│ │ │ │ │ │ alertSilenceTable.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─asset -│ │ │ │ │ │ assetTable.scss -│ │ │ │ │ │ -│ │ │ │ │ ├─settings -│ │ │ │ │ │ backupsTable.scss -│ │ │ │ │ │ cortexDetailTable.scss -│ │ │ │ │ │ endpointTable.scss -│ │ │ │ │ │ switchTab.scss -│ │ │ │ │ │ userTable.scss -│ │ │ │ │ │ -│ │ │ │ │ └─special -│ │ │ │ │ endpointQuery.scss -│ │ │ │ │ -│ │ │ │ ├─threshold -│ │ │ │ │ threshold.scss -│ │ │ │ │ -│ │ │ │ └─v-selectpagenew -│ │ │ │ selectpage.scss -│ │ │ │ -│ │ │ ├─introjs -│ │ │ │ introjs-dark.scss -│ │ │ │ introjs.scss -│ │ │ │ -│ │ │ ├─layout -│ │ │ │ container.scss -│ │ │ │ header.scss -│ │ │ │ home.scss -│ │ │ │ leftMenu.scss -│ │ │ │ -│ │ │ └─page -│ │ │ ├─alert -│ │ │ │ alertMessage.scss -│ │ │ │ nzAlertTag.scss -│ │ │ │ -│ │ │ ├─config -│ │ │ │ │ about.scss -│ │ │ │ │ agent.scss -│ │ │ │ │ assetMeta.scss -│ │ │ │ │ backups.scss -│ │ │ │ │ licenseGen.scss -│ │ │ │ │ mibBrowser.scss -│ │ │ │ │ operationRecord.scss -│ │ │ │ │ profile.scss -│ │ │ │ │ profileChangePin.scss -│ │ │ │ │ setup.scss -│ │ │ │ │ system.scss -│ │ │ │ │ -│ │ │ │ └─system -│ │ │ │ license.scss -│ │ │ │ notifyMethodTab.scss -│ │ │ │ -│ │ │ ├─dashboard -│ │ │ │ │ chartBox.scss -│ │ │ │ │ panel.scss -│ │ │ │ │ -│ │ │ │ ├─explore -│ │ │ │ │ explore.scss -│ │ │ │ │ exploreHistory.scss -│ │ │ │ │ logTab.scss -│ │ │ │ │ promqlInput.scss -│ │ │ │ │ queryPrompt.scss -│ │ │ │ │ -│ │ │ │ └─overview -│ │ │ │ chart.scss -│ │ │ │ overview2.scss -│ │ │ │ -│ │ │ ├─integration -│ │ │ │ integration.scss -│ │ │ │ -│ │ │ ├─monitor -│ │ │ │ └─project -│ │ │ │ project.scss -│ │ │ │ -│ │ │ ├─notebook -│ │ │ │ notebook.scss -│ │ │ │ -│ │ │ ├─softwareType -│ │ │ │ softwareType.scss -│ │ │ │ -│ │ │ └─tool -│ │ │ ping.scss -│ │ │ trace.scss +│ │ ├─components 组件css │ │ │ -│ │ ├─font -│ │ │ iconfont.css -│ │ │ iconfont.eot -│ │ │ iconfont.js -│ │ │ iconfont.json -│ │ │ iconfont.svg -│ │ │ iconfont.ttf -│ │ │ iconfont.woff -│ │ │ iconfont.woff2 -│ │ │ Inter-Regular.ttf -│ │ │ metricPreview.scss -│ │ │ NotoSans-Regular.ttf -│ │ │ NunitoSans-Regular.ttf +│ │ ├─font 字体图标css │ │ │ -│ │ └─themes -│ │ │ common.scss -│ │ │ theme-dark.scss -│ │ │ theme-light.scss -│ │ │ -│ │ └─src -│ │ │ alert.scss -│ │ │ aside.scss -│ │ │ autocomplete.scss -│ │ │ avatar.scss -│ │ │ backtop.scss -│ │ │ badge.scss -│ │ │ base.scss -│ │ │ breadcrumb-item.scss -│ │ │ breadcrumb.scss -│ │ │ button-group.scss -│ │ │ button.scss -│ │ │ calendar.scss -│ │ │ card.scss -│ │ │ carousel-item.scss -│ │ │ carousel.scss -│ │ │ cascader-panel.scss -│ │ │ cascader.scss -│ │ │ checkbox-button.scss -│ │ │ checkbox-group.scss -│ │ │ checkbox.scss -│ │ │ col.scss -│ │ │ collapse-item.scss -│ │ │ collapse.scss -│ │ │ color-picker.scss -│ │ │ container.scss -│ │ │ date-picker.scss -│ │ │ descriptions-item.scss -│ │ │ descriptions.scss -│ │ │ dialog.scss -│ │ │ display.scss -│ │ │ divider.scss -│ │ │ drawer.scss -│ │ │ dropdown-item.scss -│ │ │ dropdown-menu.scss -│ │ │ dropdown.scss -│ │ │ empty.scss -│ │ │ footer.scss -│ │ │ form-item.scss -│ │ │ form.scss -│ │ │ header.scss -│ │ │ icon.scss -│ │ │ image.scss -│ │ │ index.scss -│ │ │ infinite-scroll.scss -│ │ │ infiniteScroll.scss -│ │ │ input-number.scss -│ │ │ input.scss -│ │ │ link.scss -│ │ │ loading.scss -│ │ │ main.scss -│ │ │ menu-item-group.scss -│ │ │ menu-item.scss -│ │ │ menu.scss -│ │ │ message-box.scss -│ │ │ message.scss -│ │ │ notification.scss -│ │ │ option-group.scss -│ │ │ option.scss -│ │ │ page-header.scss -│ │ │ pagination.scss -│ │ │ popconfirm.scss -│ │ │ popover.scss -│ │ │ popper.scss -│ │ │ progress.scss -│ │ │ radio-button.scss -│ │ │ radio-group.scss -│ │ │ radio.scss -│ │ │ rate.scss -│ │ │ reset.scss -│ │ │ result.scss -│ │ │ row.scss -│ │ │ scrollbar.scss -│ │ │ select-dropdown.scss -│ │ │ select.scss -│ │ │ skeleton-item.scss -│ │ │ skeleton.scss -│ │ │ slider.scss -│ │ │ spinner.scss -│ │ │ step.scss -│ │ │ steps.scss -│ │ │ submenu.scss -│ │ │ switch.scss -│ │ │ tab-pane.scss -│ │ │ table-column.scss -│ │ │ table.scss -│ │ │ tabs.scss -│ │ │ tag.scss -│ │ │ time-picker.scss -│ │ │ time-select.scss -│ │ │ timeline-item.scss -│ │ │ timeline.scss -│ │ │ tooltip.scss -│ │ │ transfer.scss -│ │ │ tree.scss -│ │ │ upload.scss -│ │ │ -│ │ ├─common -│ │ │ popup.scss -│ │ │ transition.scss -│ │ │ var.scss -│ │ │ -│ │ ├─date-picker -│ │ │ date-picker.scss -│ │ │ date-range-picker.scss -│ │ │ date-table.scss -│ │ │ month-table.scss -│ │ │ picker-panel.scss -│ │ │ picker.scss -│ │ │ time-picker.scss -│ │ │ time-range-picker.scss -│ │ │ time-spinner.scss -│ │ │ year-table.scss -│ │ │ -│ │ ├─fonts -│ │ │ element-icons.ttf -│ │ │ element-icons.woff -│ │ │ -│ │ └─mixins -│ │ config.scss -│ │ function.scss -│ │ mixins.scss -│ │ utils.scss -│ │ _button.scss +│ │ └─themes 主题css +│ │ │ +│ ├─img 图片文件 +│ │ │ +│ └─stylus 对外暴露的css (所有css) +│ +├─components 组件 +│ ├─chart 所有 chart 主要相关的组件 │ │ -│ ├─img -│ │ dc.png -│ │ dc1.png -│ │ dc2.png -│ │ dc3.png -│ │ down.png -│ │ explore-tab-logo.png -│ │ favicon.ico -│ │ jj.png -│ │ jj1.png -│ │ jj3.png -│ │ loading.gif -│ │ login-background.png -│ │ logo-big.png -│ │ logo.svg -│ │ logo1-2.png -│ │ starCloud1.svg -│ │ starCloud2.svg -│ │ starCloud3.svg -│ │ starCloud4.svg -│ │ starCloud5.svg -│ │ starCloud6.svg -│ │ starCloud7.svg -│ │ system-sound-settings.gif -│ │ up.png +│ ├─cli 前端shell组件 │ │ -│ └─stylus -│ index.scss -│ main.scss -│ -├─components -│ ├─chart -│ │ │ assetInfoData.js -│ │ │ chart.vue -│ │ │ chartDataFormat.js -│ │ │ chartDetail.vue -│ │ │ chartDetailNew.vue -│ │ │ chartFormat.js -│ │ │ chartHeader.vue -│ │ │ chartHeaderMixin.js -│ │ │ chartList.vue -│ │ │ chartMixin.js -│ │ │ ChartScreenHeader.vue -│ │ │ chartTempData.js -│ │ │ defaultLineData.js -│ │ │ defaultLogData.js -│ │ │ defaultTableData.js -│ │ │ endpointInfoData.js -│ │ │ logContext.vue -│ │ │ logsData.js -│ │ │ markdownEditor.vue -│ │ │ panelChart.vue -│ │ │ renderChart.js -│ │ │ richTextEditor.vue -│ │ │ tempGroup.js +│ ├─common 公共组件 │ │ │ -│ │ └─chart -│ │ │ chart-table.vue -│ │ │ chartAssetInfo.vue -│ │ │ chartAutotopology.vue -│ │ │ chartBar.vue -│ │ │ chartBubble.vue -│ │ │ chartClock.vue -│ │ │ chartDiagram.vue -│ │ │ chartDoughnut.vue -│ │ │ chartEndpointInfo.vue -│ │ │ chartFunnel.vue -│ │ │ chartGauge.vue -│ │ │ chartGroup.vue -│ │ │ chartHexagonD3.vue -│ │ │ chartLog.vue -│ │ │ chartMap.vue -│ │ │ chartNoData.vue -│ │ │ chartPie.vue -│ │ │ chartRank.vue -│ │ │ chartRose.vue -│ │ │ chartSankey.vue -│ │ │ chartStat.vue -│ │ │ chartTable.vue -│ │ │ chartText.vue -│ │ │ chartTimeSeries.vue -│ │ │ chartTopology.vue -│ │ │ chartTreemap.vue -│ │ │ chartUrl.vue -│ │ │ legend.vue -│ │ │ line-chart-block.vue -│ │ │ mapStyle.js -│ │ │ tools.js -│ │ │ -│ │ ├─grid -│ │ │ aspectRatio.js -│ │ │ CustomDragElement.vue -│ │ │ DOM.js -│ │ │ draggableUtils.js -│ │ │ GridItem.vue -│ │ │ GridLayout.vue -│ │ │ index.js -│ │ │ responsiveUtils.js -│ │ │ TestElement.vue -│ │ │ utils.js -│ │ │ -│ │ ├─options -│ │ │ chartBar.js -│ │ │ chartClock.js -│ │ │ chartGauge.js -│ │ │ chartHexagonD3.js -│ │ │ chartPie.js -│ │ │ chartSparkline.js -│ │ │ chartTimeSeries.js -│ │ │ chartTreemap.js -│ │ │ fontWidth.js -│ │ │ -│ │ └─uplot -│ │ chartTimeSeries.vue -│ │ chartTimeSeriesMixin.js -│ │ stack.js -│ │ testData.js -│ │ -│ ├─cli -│ │ console.vue -│ │ consoleNew.vue -│ │ fileDirectory.vue -│ │ fileListState.vue -│ │ terminal.vue -│ │ webSSH.vue -│ │ webSSHNew.vue -│ │ -│ ├─common -│ │ │ browserWindowZoom.vue -│ │ │ chartUnit.vue -│ │ │ configSync.vue -│ │ │ copy.vue -│ │ │ deleteButton.vue -│ │ │ diagnosisTab.vue -│ │ │ elementSet.vue -│ │ │ i18n.js -│ │ │ intro.vue -│ │ │ latlngPicker.vue -│ │ │ loading.vue -│ │ │ login.vue -│ │ │ metaData.vue -│ │ │ multipleTime.vue -│ │ │ nezhaColor.vue -│ │ │ nzTransfer.vue -│ │ │ pagination.vue -│ │ │ pickTime.vue -│ │ │ playlist.vue -│ │ │ searchInput.vue -│ │ │ searchSelectInfo.js -│ │ │ selectTable.vue -│ │ │ timePicker.vue +│ │ ├─alert hover弹窗相关组件 │ │ │ -│ │ ├─alert -│ │ │ alertDaysInfo.vue -│ │ │ alertDetail.vue -│ │ │ alertLabel.vue -│ │ │ alertLabel2.vue -│ │ │ alertLabel3.vue -│ │ │ alertMessageInfo.vue -│ │ │ alertMessageInfoDetail.vue -│ │ │ alertMessageInfoTab.vue -│ │ │ alertMessageInfoTimeLine.vue -│ │ │ alertMessageLabelMixin.js -│ │ │ alertRuleInfo.vue -│ │ │ alertRuleInfo2.vue -│ │ │ alertStateInfo.vue -│ │ │ nzTooltip.vue -│ │ │ selectAlertSilence.vue -│ │ │ terminalLogInfo.vue -│ │ │ trendMixins.js +│ │ ├─bottomBox 底弹窗 +│ │ │ └─tabs 底弹窗分页面 │ │ │ -│ │ ├─bottomBox -│ │ │ │ bottomBox.vue -│ │ │ │ nzBottomDataList.vue +│ │ ├─detailView 详细视图组件 +│ │ │ +│ │ ├─elSelect 重写element select +│ │ │ +│ │ │ +│ │ ├─globalSearch 公关稿搜索组件 +│ │ │ +│ │ ├─js 部分公用js +│ │ │ │ common.js 工具函数 +│ │ │ │ constants.js 静态数据 +│ │ │ │ divResize.js div改变宽高 +│ │ │ │ example.js 工具函数 处理 处理legend的别名 +│ │ │ │ htmlToPdf.js 将 html 转为pdf +│ │ │ │ iconList.js 部分字体图标静态数据 +│ │ │ │ tools.js 工具函数 +│ │ │ │ validate.js element 校验函数 +│ │ │ │ Xterm.js 前端shell 引用文件 │ │ │ │ -│ │ │ └─tabs -│ │ │ alertMessageTab.vue -│ │ │ alertMessageTabNew.vue -│ │ │ alertRuleEvalLog.vue -│ │ │ assetSubTab.vue -│ │ │ assetTab.vue -│ │ │ cabinetTab.vue -│ │ │ commentsBottomTab.vue -│ │ │ cortexDetail.vue -│ │ │ dashboardTab.vue -│ │ │ discoveryTab.vue -│ │ │ endpointQuery.vue -│ │ │ endpointTabNew.vue -│ │ │ IpDetails.vue -│ │ │ issueTab.vue -│ │ │ licenseManagementTab.vue -│ │ │ logBottomTab.vue -│ │ │ lokiStatus.vue -│ │ │ networkBottomTab.vue -│ │ │ notebookTab.vue -│ │ │ operationLogTab.vue -│ │ │ processBottomTab.vue -│ │ │ recordRuleEvalLog.vue -│ │ │ recordRulesQuery.vue -│ │ │ rolesTab.vue -│ │ │ scrapeEndpoint.vue -│ │ │ softwareAssetTab.vue -│ │ │ terminalLogCMDTab.vue -│ │ │ terminalLogMonitorTab.vue -│ │ │ terminalLogRecordTab.vue -│ │ │ terminalLogSftpTab.vue -│ │ │ terminalLogTab.vue -│ │ │ vsysBottomTab.vue +│ │ │ └─radomcolor 随机颜色 +│ │ │ color.txt 颜色数据 +│ │ │ randomcolor.js 随机颜色函数 │ │ │ -│ │ ├─copy-code -│ │ │ │ copy-code.css -│ │ │ │ index.js -│ │ │ │ preview.js -│ │ │ │ -│ │ │ └─utils -│ │ │ markdown-it-copy-code.js +│ │ ├─labelFilter asset endpoint 筛选组件 │ │ │ -│ │ ├─detailView -│ │ │ │ detailViewTopSearch.vue -│ │ │ │ nzDetailView.vue -│ │ │ │ -│ │ │ ├─list -│ │ │ │ ├─alertRule -│ │ │ │ │ alertRuleDetail.vue -│ │ │ │ │ -│ │ │ │ ├─asset -│ │ │ │ │ assetDetail.vue -│ │ │ │ │ -│ │ │ │ ├─dc -│ │ │ │ │ dcDetail.vue -│ │ │ │ │ -│ │ │ │ ├─endpoint -│ │ │ │ │ endpointDetail.vue -│ │ │ │ │ -│ │ │ │ ├─module -│ │ │ │ │ moduleDetail.vue -│ │ │ │ │ -│ │ │ │ ├─notebook -│ │ │ │ │ notebookDetail.vue -│ │ │ │ │ -│ │ │ │ ├─terminalLogDetail -│ │ │ │ │ terminalLogDetail.vue -│ │ │ │ │ -│ │ │ │ └─userDetail -│ │ │ │ userDetail.vue -│ │ │ │ -│ │ │ └─view -│ │ │ │ detailViewRight.vue -│ │ │ │ -│ │ │ └─detailRightTop -│ │ │ detailRightTop.vue +│ │ ├─language 国际化文件 │ │ │ -│ │ ├─elSelect -│ │ │ MyElSelect.vue │ │ │ -│ │ ├─filterSearch -│ │ │ filterSearch.vue -│ │ │ filterSearchData.js +│ │ ├─mixin vue混合 │ │ │ -│ │ ├─globalSearch -│ │ │ globalSearch.vue -│ │ │ searchItemInfo.vue +│ │ ├─myDatePicker 重构 el-data │ │ │ -│ │ ├─js -│ │ │ │ common.js -│ │ │ │ constants.js -│ │ │ │ divResize.js -│ │ │ │ example.js -│ │ │ │ htmlToPdf.js -│ │ │ │ iconList.js -│ │ │ │ tools.js -│ │ │ │ validate.js -│ │ │ │ Xterm.js -│ │ │ │ -│ │ │ └─radomcolor -│ │ │ color.txt -│ │ │ randomcolor.js +│ │ ├─project 拓扑图相关 │ │ │ -│ │ ├─labelFilter -│ │ │ clickSearch.vue -│ │ │ clickSearchNew.vue -│ │ │ dropdown.vue +│ │ ├─rightBox 右侧新增修改 │ │ │ -│ │ ├─language -│ │ │ cn.js -│ │ │ en.js -│ │ │ index.js -│ │ │ newcn.js -│ │ │ newen.js +│ │ ├─searchBox 搜索组件 │ │ │ -│ │ ├─message -│ │ │ │ index.js -│ │ │ │ -│ │ │ └─src -│ │ │ main.js -│ │ │ main.vue -│ │ │ -│ │ ├─mixin -│ │ │ │ alertLabelMixin.js -│ │ │ │ beforeMeta2d.js -│ │ │ │ chartDataList.js -│ │ │ │ dataList.js -│ │ │ │ detailViewLeftMixin.js -│ │ │ │ detailViewMixin.js -│ │ │ │ detailViewRightMixin.js -│ │ │ │ editRigthBox.js -│ │ │ │ exportHtml.js -│ │ │ │ globalVariables.js -│ │ │ │ htmlToPdfMixin.js -│ │ │ │ mainMixinFun.js -│ │ │ │ promqlInput.js -│ │ │ │ routerPathParams.js -│ │ │ │ subDataList.js -│ │ │ │ table.js -│ │ │ │ -│ │ │ └─system -│ │ │ systemMixin.js -│ │ │ -│ │ ├─myDatePicker -│ │ │ │ index.js -│ │ │ │ -│ │ │ └─src -│ │ │ │ picker.vue -│ │ │ │ -│ │ │ ├─basic -│ │ │ │ date-table.vue -│ │ │ │ month-table.vue -│ │ │ │ time-spinner.vue -│ │ │ │ year-table.vue -│ │ │ │ -│ │ │ ├─panel -│ │ │ │ date-range.vue -│ │ │ │ date.vue -│ │ │ │ month-range.vue -│ │ │ │ time-range.vue -│ │ │ │ time-select.vue -│ │ │ │ time.vue -│ │ │ │ -│ │ │ └─picker -│ │ │ date-picker.js -│ │ │ time-picker.js -│ │ │ time-select.js -│ │ │ -│ │ ├─overView -│ │ │ messageAsset.vue -│ │ │ -│ │ ├─panel -│ │ │ panelVariables.vue -│ │ │ -│ │ ├─popBox -│ │ │ guide.vue -│ │ │ selectAssetMetaGroup.vue -│ │ │ selectAssetType.vue -│ │ │ selectDashboard.vue -│ │ │ selectPanel.vue -│ │ │ selectWalk.vue -│ │ │ topToolMoreOptions.vue -│ │ │ -│ │ ├─project -│ │ │ │ topoData.js -│ │ │ │ topologyMixin.js -│ │ │ │ -│ │ │ ├─image -│ │ │ │ emptyData.png -│ │ │ │ -│ │ │ ├─L5 -│ │ │ │ topoTooltip.vue -│ │ │ │ -│ │ │ ├─meta2d -│ │ │ │ │ CanvasContextMenu.vue -│ │ │ │ │ meta2dCanvas.vue -│ │ │ │ │ meta2dData.vue -│ │ │ │ │ meta2dElement.vue -│ │ │ │ │ meta2dHeader.vue -│ │ │ │ │ meta2dMain.vue -│ │ │ │ │ meta2dProps.vue -│ │ │ │ │ meta2dSelectImage.vue -│ │ │ │ │ meta2dTooltip.vue -│ │ │ │ │ topologyTopTool.vue -│ │ │ │ │ -│ │ │ │ └─js -│ │ │ │ defaultIcon.js -│ │ │ │ defaultPenLineData.js -│ │ │ │ meta2dMainCalc.js -│ │ │ │ meta2dStore.js -│ │ │ │ topoUtil.js -│ │ │ │ -│ │ │ └─popData -│ │ │ alertTable.vue -│ │ │ assetTable.vue -│ │ │ endpointTable.vue -│ │ │ expressionInfo.vue -│ │ │ Info.vue -│ │ │ Main.vue -│ │ │ -│ │ ├─rightBox -│ │ │ │ addEndpointBox.vue -│ │ │ │ agentBox.vue -│ │ │ │ alertRuleBox.vue -│ │ │ │ alertSilenceBox.vue -│ │ │ │ apiKeyBox.vue -│ │ │ │ assetMetaBox.vue -│ │ │ │ assetMetaGroup.vue -│ │ │ │ assetStateBox.vue -│ │ │ │ batchAddEndpoint.vue -│ │ │ │ batchEditEndpoint.vue -│ │ │ │ batchModifyEndpoint.vue -│ │ │ │ cabinetBox.vue -│ │ │ │ chartTempBox.vue -│ │ │ │ dashboardTempBox.vue -│ │ │ │ dcBox.vue -│ │ │ │ editEndpointBoxNew.vue -│ │ │ │ exprTmplBox.vue -│ │ │ │ ipamBox.vue -│ │ │ │ ipDetailsBox.vue -│ │ │ │ issueBox.vue -│ │ │ │ locationCascader.vue -│ │ │ │ menuBox.vue -│ │ │ │ mibBox.vue -│ │ │ │ moduleBox.vue -│ │ │ │ panelBox.vue -│ │ │ │ pipelineSelect.vue -│ │ │ │ playlistBox.vue -│ │ │ │ profileBox.vue -│ │ │ │ projectBox.vue -│ │ │ │ recordRuleBox.vue -│ │ │ │ snmpCredentialBox.vue -│ │ │ │ -│ │ │ ├─administration -│ │ │ │ assetTypeBox.vue -│ │ │ │ backupsBox.vue -│ │ │ │ modelBox.vue -│ │ │ │ roleBox.vue -│ │ │ │ userBox.vue -│ │ │ │ -│ │ │ ├─asset -│ │ │ │ assetBatchEditBox.vue -│ │ │ │ assetBox.vue -│ │ │ │ assetDiscoveryBox.vue -│ │ │ │ -│ │ │ ├─chart -│ │ │ │ chartConfig.vue -│ │ │ │ chartRightBox.vue -│ │ │ │ chartTypeShow.js -│ │ │ │ otherChartConfig.vue -│ │ │ │ publicConfig.js -│ │ │ │ systemChartConfig.vue -│ │ │ │ -│ │ │ ├─setting -│ │ │ │ cabinetBox.vue -│ │ │ │ globalizationBox.vue -│ │ │ │ -│ │ │ ├─software -│ │ │ │ softwareAssetBox.vue -│ │ │ │ softwareTypeBox.vue -│ │ │ │ -│ │ │ └─trafficSetting -│ │ │ subBox.vue -│ │ │ trafficSettingBox.vue -│ │ │ trafficSettingTab.vue -│ │ │ -│ │ ├─searchBox -│ │ │ searchBox.vue -│ │ │ searchBoxInfo.js -│ │ │ -│ │ ├─snapshotProgress +│ │ ├─snapshotProgress 快照蒙版 │ │ │ snapshotProgress.vue │ │ │ -│ │ ├─table -│ │ │ │ nzDataList.vue -│ │ │ │ -│ │ │ ├─alert -│ │ │ │ alertMessageTable.vue -│ │ │ │ alertRuleEvalLogTable.vue -│ │ │ │ alertRuleTable.vue -│ │ │ │ alertSilenceTable.vue -│ │ │ │ -│ │ │ ├─asset -│ │ │ │ assetCommentTable.vue -│ │ │ │ assetDiscoveryTable.vue -│ │ │ │ assetMetaTable.vue -│ │ │ │ assetNetworkTable.vue -│ │ │ │ assetProcessTable.vue -│ │ │ │ assetTable.vue -│ │ │ │ assetVsysTable.vue -│ │ │ │ disccoveryTabTable.vue -│ │ │ │ licenseMangeTable.vue -│ │ │ │ -│ │ │ ├─settings -│ │ │ │ agentTable.vue -│ │ │ │ assetTypeTable.vue -│ │ │ │ backupsTable.vue -│ │ │ │ cabinetTable.vue -│ │ │ │ chartTmplTable.vue -│ │ │ │ cortexDetailTable.vue -│ │ │ │ credentialsTable.vue -│ │ │ │ dashboardTmplTable.vue -│ │ │ │ dcTable.vue -│ │ │ │ endpointTable.vue -│ │ │ │ exprTmplTable.vue -│ │ │ │ globalizationTable.vue -│ │ │ │ ipamTable.vue -│ │ │ │ ipDetailsTable.vue -│ │ │ │ issueTable.vue -│ │ │ │ lokiStatusTable.vue -│ │ │ │ menuTable.vue -│ │ │ │ mibTable.vue -│ │ │ │ modelTable.vue -│ │ │ │ moduleTable.vue -│ │ │ │ notebookTable.vue -│ │ │ │ operationLogTable.vue -│ │ │ │ projectTable.vue -│ │ │ │ recordRuleEvalLogTable.vue -│ │ │ │ recordRuleTable.vue -│ │ │ │ roleTable.vue -│ │ │ │ scrapeEndpointTable.vue -│ │ │ │ softwareAssetTable.vue -│ │ │ │ softwareTypeTable.vue -│ │ │ │ terminalLogSftpTable.vue -│ │ │ │ terminalLogTable.vue -│ │ │ │ userTable.vue -│ │ │ │ userTabTable.vue -│ │ │ │ -│ │ │ ├─special -│ │ │ │ endpointQueryTab.vue -│ │ │ │ recordRulesQueryTab.vue -│ │ │ │ -│ │ │ └─tool -│ │ │ pingTable.vue -│ │ │ traceTable.vue +│ │ ├─table table组件 │ │ │ -│ │ ├─v-selectpagenew -│ │ │ │ index.js -│ │ │ │ methods.js -│ │ │ │ Pagination.js -│ │ │ │ Selectpage.js -│ │ │ │ Table.js -│ │ │ │ -│ │ │ └─css -│ │ │ selectPage.css +│ │ ├─v-selectpagenew 重构的 v-selectpage │ │ │ -│ │ └─vueQR -│ │ └─packages -│ │ index.js -│ │ readAsArrayBuffer.js -│ │ util.js -│ │ vue-qr.vue +│ │ └─vueQR 二维码 │ │ -│ ├─layout -│ │ container.vue -│ │ header.vue -│ │ home.vue -│ │ leftMenu.vue +│ ├─layout 布局 +│ │ container.vue 主体 +│ │ header.vue 头部 +│ │ home.vue 容器 +│ │ leftMenu.vue 左侧菜单 │ │ -│ └─page -│ │ uPlot.vue -│ │ -│ ├─alert -│ │ alertMessage.vue -│ │ alertRule.vue -│ │ alertSilence.vue -│ │ nzAlertTag.vue -│ │ -│ ├─asset -│ │ │ asset.vue -│ │ │ assetDiscovery.vue -│ │ │ -│ │ ├─components -│ │ │ alert.vue -│ │ │ assetTagEx.vue -│ │ │ endpoint.vue -│ │ │ ping.vue -│ │ │ -│ │ └─software -│ │ softwareAsset.vue -│ │ softwareType.vue -│ │ -│ ├─config -│ │ │ about.vue -│ │ │ agent.vue -│ │ │ assetMeta.vue -│ │ │ assetState.vue -│ │ │ assetType.vue -│ │ │ backups.vue -│ │ │ basic.vue -│ │ │ credentials.vue -│ │ │ dc.vue -│ │ │ email.vue -│ │ │ globalization.vue -│ │ │ ipam.vue -│ │ │ issue.vue -│ │ │ ldap.vue -│ │ │ licenseGen.vue -│ │ │ menus.vue -│ │ │ mib.vue -│ │ │ mibBrowser.vue -│ │ │ model.vue -│ │ │ monitor.vue -│ │ │ operationLog.vue -│ │ │ operationRecord.vue -│ │ │ profile.vue -│ │ │ profileChangePin.vue -│ │ │ recordRule.vue -│ │ │ roles.vue -│ │ │ setup.vue -│ │ │ snmp.vue -│ │ │ system.vue -│ │ │ terminal.vue -│ │ │ terminalLog.vue -│ │ │ user.vue -│ │ │ -│ │ ├─system -│ │ │ apiKeyTab.vue -│ │ │ apiKeyTable.vue -│ │ │ license.vue -│ │ │ licenseData.js -│ │ │ linkTab.vue -│ │ │ linkTable.vue -│ │ │ notifyMethodTab.vue -│ │ │ notifyMethodTable.vue -│ │ │ selfApiKeyTab.vue -│ │ │ selfApiKeyTable.vue -│ │ │ systemCommon.js -│ │ │ -│ │ └─template -│ │ chartTemp.vue -│ │ dashboardTemp.vue -│ │ exprTemp.vue -│ │ index.vue -│ │ -│ ├─dashboard -│ │ │ alertChartParam.vue -│ │ │ dashboard.vue -│ │ │ -│ │ ├─explore -│ │ │ │ CMTheme.tsx -│ │ │ │ explore.vue -│ │ │ │ exploreItem.vue -│ │ │ │ exploreItemHtml.vue -│ │ │ │ exploreItemMixin.js -│ │ │ │ logqlHint.js -│ │ │ │ logTab.vue -│ │ │ │ promqlInput.vue -│ │ │ │ suggestions.vue -│ │ │ │ -│ │ │ ├─histoyrComponent -│ │ │ │ exploreHistory.vue -│ │ │ │ -│ │ │ ├─logql -│ │ │ │ getTimeRange.js -│ │ │ │ lezerConfig.js -│ │ │ │ logql.vue -│ │ │ │ logqlMixin.js -│ │ │ │ monacoConfig.js -│ │ │ │ setError.js -│ │ │ │ situation.js -│ │ │ │ -│ │ │ ├─logqlparser -│ │ │ │ logqloarser.go -│ │ │ │ -│ │ │ ├─MonacoVue -│ │ │ │ vue-monaco.js -│ │ │ │ -│ │ │ ├─promqlparser -│ │ │ │ go.mod -│ │ │ │ go.sum -│ │ │ │ promqlparser.go -│ │ │ │ promqlparser.wasm -│ │ │ │ wasm_exec.js -│ │ │ │ -│ │ │ └─queryPrompt -│ │ │ queryPrompt.vue -│ │ │ -│ │ └─overview -│ │ chart.vue -│ │ chartConfig.vue -│ │ -│ ├─integration -│ │ │ integration.vue -│ │ │ -│ │ └─integration-tabs -│ │ alert.vue -│ │ automatic.vue -│ │ configuration.vue -│ │ dashboard.vue -│ │ integration-tabs.vue -│ │ manual.vue -│ │ metric.vue -│ │ -│ ├─monitor -│ │ ├─endpoint -│ │ │ endpointList.vue -│ │ │ -│ │ ├─module -│ │ │ moduleList.vue -│ │ │ -│ │ └─project -│ │ index.vue -│ │ project.vue -│ │ projectList.vue -│ │ -│ ├─notebook -│ │ notebook.vue -│ │ notebookAdd.vue -│ │ notebookList.vue -│ │ -│ └─tool -│ assetDiscovery.vue -│ ping.vue -│ trace.vue +│ └─page 页面 │ -├─entrance -│ ├─app -│ │ App.vue -│ │ index.html -│ │ lodashInfo.md -│ │ main.js +├─entrance 打包入口 +│ ├─app 基础 │ │ -│ └─exportHtml -│ App.vue -│ exportHtml.html -│ exportHtml.js -│ i18nData.js +│ └─exportHtml 快照 │ -├─libs -│ bus.js +├─libs 工具函数 │ -├─router -│ │ index.js -│ │ -│ └─exportHtmlRouter -│ index.js +├─router 路由 │ -└─store - exportHtml.js - index.js - panel.js - terminalFile.js - timePicker.js - topology.js - user.js +└─store vuex ``` \ No newline at end of file diff --git a/nezha-docs/src/note/index.en-US.md b/nezha-docs/src/note/index.en-US.md index f15292fd4..c797b1b4c 100644 --- a/nezha-docs/src/note/index.en-US.md +++ b/nezha-docs/src/note/index.en-US.md @@ -3,4 +3,15 @@ map: path: /note --- +1. 图表类型新增 需要后端增加相应的类型
+2. 新增颜色类型相关的样式 需要同事增加两个主题色 或者使用原有主题色
+ 位置
src/assets/css/themes/theme-dark.scss
src/assets/css/themes/theme-light.scss
+3. 国际化更改后需要跟告知后端 后端需要更新相应数据库
+4. 图表相关的国际化 需要保存到本地 或者一直维持最新避免快照国际化错误
+5. 快照图标需要转化为base64,才能显示对应图标。 所以iconfont 需要将相应内容转化为base64
+6. 搜索框新增查询条件时 无法回显 需要查看 routerPathParams.js 以及 查看 datalist.js 的 created
位置
/src/components/common/mixin
+7. element-ui 的表格组件的气泡组件不建议使用 容易引起表格卡顿 建议换为一个弹窗组件 传对应的实例完成
+8. + + diff --git a/nezha-docs/src/other/dashboardFlow/index.en-US.md b/nezha-docs/src/other/dashboardFlow/index.en-US.md new file mode 100644 index 000000000..b689411df --- /dev/null +++ b/nezha-docs/src/other/dashboardFlow/index.en-US.md @@ -0,0 +1,11 @@ +--- +map: + path: /dashboardFlow +--- + + +1. dashboard 简单加载流程 +
+2. dashboard 滚动加载
+ 根据当前组件所在高度 是否小于 当前页面宽加滚动距离判断
+ group 内为 当前组高度 加 组件在group内的位置判断是否加载
diff --git a/nezha-docs/src/other/dashboardFlow/index.vue b/nezha-docs/src/other/dashboardFlow/index.vue new file mode 100644 index 000000000..543432675 --- /dev/null +++ b/nezha-docs/src/other/dashboardFlow/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/nezha-docs/src/other/dashboardFlow/index.zh-CN.md b/nezha-docs/src/other/dashboardFlow/index.zh-CN.md new file mode 100644 index 000000000..b689411df --- /dev/null +++ b/nezha-docs/src/other/dashboardFlow/index.zh-CN.md @@ -0,0 +1,11 @@ +--- +map: + path: /dashboardFlow +--- + + +1. dashboard 简单加载流程 +
+2. dashboard 滚动加载
+ 根据当前组件所在高度 是否小于 当前页面宽加滚动距离判断
+ group 内为 当前组高度 加 组件在group内的位置判断是否加载
diff --git a/nezha-docs/src/other/i18nUse/index.en-US.md b/nezha-docs/src/other/i18nUse/index.en-US.md new file mode 100644 index 000000000..50ebf20c6 --- /dev/null +++ b/nezha-docs/src/other/i18nUse/index.en-US.md @@ -0,0 +1,11 @@ +--- +map: + path: /i18nUse +--- +使用 直接 $t(code) 即可
+先访问地址
+http://192.168.44.22/ui/i18n?orderBy=id&pageNo=1&pageSize=20&detailType=list
+查看是否有自己需要添加的i18n
+若有直接使用对应code
+若没有点击新增 要新增两种语言的 然后使用对应code
+ diff --git a/nezha-docs/src/other/i18nUse/index.vue b/nezha-docs/src/other/i18nUse/index.vue new file mode 100644 index 000000000..543432675 --- /dev/null +++ b/nezha-docs/src/other/i18nUse/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/nezha-docs/src/other/i18nUse/index.zh-CN.md b/nezha-docs/src/other/i18nUse/index.zh-CN.md new file mode 100644 index 000000000..50ebf20c6 --- /dev/null +++ b/nezha-docs/src/other/i18nUse/index.zh-CN.md @@ -0,0 +1,11 @@ +--- +map: + path: /i18nUse +--- +使用 直接 $t(code) 即可
+先访问地址
+http://192.168.44.22/ui/i18n?orderBy=id&pageNo=1&pageSize=20&detailType=list
+查看是否有自己需要添加的i18n
+若有直接使用对应code
+若没有点击新增 要新增两种语言的 然后使用对应code
+ diff --git a/nezha-docs/src/other/themeUse/index.en-US.md b/nezha-docs/src/other/themeUse/index.en-US.md new file mode 100644 index 000000000..79b57972c --- /dev/null +++ b/nezha-docs/src/other/themeUse/index.en-US.md @@ -0,0 +1,26 @@ +--- +map: + path: /themeUse +--- + +# 介绍 +主题核心其实就是 颜色的改变
+ +目前前端主题实现的基本原理就是 css变量,在不同class名称下 配置不同的css变量
+ +# 位置
+黑色 对应class .theme-dark 对应变量文件为 src/assets/css/themes/theme-dark.scss
+白色 对应class .theme-light 对应变量文件为 src/assets/css/themes/theme-light.scss
+主题切换是 将class名替换为对应即可
+注意 黑色和白色主题的变量名 需要一一对应 + +# 使用 +当你想使用颜色属性时 需要到对应位置搜索对应颜色 或者根据备注使用相应的颜色
+例 : +``` +黑色 $--color-font: #FFFFFF +白色 $--color-font: #000000 +.font{ + color: $--color-font +} +``` \ No newline at end of file diff --git a/nezha-docs/src/other/themeUse/index.vue b/nezha-docs/src/other/themeUse/index.vue new file mode 100644 index 000000000..543432675 --- /dev/null +++ b/nezha-docs/src/other/themeUse/index.vue @@ -0,0 +1,20 @@ + + + diff --git a/nezha-docs/src/other/themeUse/index.zh-CN.md b/nezha-docs/src/other/themeUse/index.zh-CN.md new file mode 100644 index 000000000..546cc009b --- /dev/null +++ b/nezha-docs/src/other/themeUse/index.zh-CN.md @@ -0,0 +1,43 @@ +--- +map: + path: /themeUse +--- + +# 介绍 +主题核心其实就是 颜色的改变
+ +目前前端主题实现的基本原理就是 css变量,在不同class名称下 配置不同的css变量
+ +# 位置
+黑色 对应class .theme-dark 对应变量文件为 src/assets/css/themes/theme-dark.scss
+白色 对应class .theme-light 对应变量文件为 src/assets/css/themes/theme-light.scss
+主题切换是 将class名替换为对应即可
+注意 黑色和白色主题的变量名 需要一一对应 + +# 使用 +当你想使用颜色属性时 需要到对应位置搜索对应颜色 或者根据备注使用相应的颜色
+例 : +``` +黑色 $--color-font: #FFFFFF +白色 $--color-font: #000000 +.font{ + color: $--color-font +} + +经过编译之后会变为 两套css + +.theme-dark { + $--color-font: #FFFFFF + .font{ + color: $--color-font + } +} + + +.theme-light { + $--color-font: #000000 + .font{ + color: $--color-font + } +} +``` \ No newline at end of file