From 5a5307752acd32c674eab19527be470cdfa5de43 Mon Sep 17 00:00:00 2001 From: ZZJ Date: Sat, 22 Feb 2020 16:23:25 +0800 Subject: [PATCH 01/72] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .babelrc | 16 + .gitignore | 1 + package.json | 89 +- src/components/Uploader.vue | 2 +- yarn-error.log | 6330 +++++++++++++++++++++-------------- yarn.lock | 6241 +++++++++++++++++++--------------- 6 files changed, 7316 insertions(+), 5363 deletions(-) create mode 100644 .babelrc diff --git a/.babelrc b/.babelrc new file mode 100644 index 0000000..3ea9f21 --- /dev/null +++ b/.babelrc @@ -0,0 +1,16 @@ +{ + "presets": ["@babel/preset-react"], + "plugins": [ + [ + "module-resolver", + { + "root": "./", + "alias": { + "@": "./src", + "static": "./static", + "vue": "vue/dist/vue.common" + } + } + ] + ] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0722e27..d138752 100755 --- a/.gitignore +++ b/.gitignore @@ -10,5 +10,6 @@ gen node_modules/ package-lock.json yarn.lock +yarn-error.log dist dist-tmp \ No newline at end of file diff --git a/package.json b/package.json index 4461d54..d357a0e 100755 --- a/package.json +++ b/package.json @@ -10,65 +10,42 @@ "test": "parcel build index.html" }, "dependencies": { - "axios": "0.16.2", + "axios": "^0.19.2", + "compressorjs": "^1.0.6", "image-compressor": "^1.2.0", - "image-compressor.js": "^1.1.4", - "intercept-link-clicks": "1.0.2", - "js-cookie": "2.2.0", - "less": "^3.10.3", - "luxon": "1.3.2", - "markdown-it": "8.4.2", - "marked": "0.6.0", - "moment": "2.23.0", - "querystring": "0.2.0", - "vue": "2.4.4", - "vue-component-persist": "1.1.2", - "vue-datetime": "1.0.0-beta.3", - "vue-l-carousel": "1.0.1", - "vue-router": "2.6.0", - "vue-toasted": "1.1.24", - "vuex": "2.5", - "vuex-persist": "2.0.0", - "weekstart": "1.0.0", - "xhook": "1.4.9" + "intercept-link-clicks": "^1.0.2", + "js-cookie": "^2.2.1", + "less": "^3.11.1", + "luxon": "^1.22.0", + "markdown-it": "^10.0.0", + "marked": "^0.8.0", + "moment": "^2.24.0", + "querystring": "^0.2.0", + "vue": "^2.6.11", + "vue-component-persist": "^1.1.4", + "vue-datetime": "1.0.0-beta.11", + "vue-l-carousel": "^1.1.0", + "vue-router": "^3.1.5", + "vue-toasted": "^1.1.27", + "vuex": "^3.1.2", + "vuex-persist": "^2.2.0", + "weekstart": "^1.0.1", + "xhook": "^1.4.9" }, "devDependencies": { - "@vue/component-compiler-utils": "2.1.0", - "autoprefixer": "9.4.3", - "babel-plugin-module-resolver": "3.1.1", - "babel-plugin-syntax-jsx": "6.18.0", - "babel-plugin-transform-runtime": "6.23.0", - "babel-plugin-transform-vue-jsx": "3.7.0", - "babel-preset-env": "1.7.0", - "babel-preset-stage-0": "6.24.1", - "normalize.css": "7.0.0", - "parcel": "1.9.7", - "parcel-plugin-sw-cache": "0.2.5", - "pug": "2.0.0-rc.4", - "stylus": "0.54.5", - "vue-hot-reload-api": "2.3.0", - "vue-template-compiler": "2.4.4" - }, - "babel": { - "presets": [ - "env", - "stage-0" - ], - "plugins": [ - "transform-runtime", - "transform-vue-jsx", - [ - "module-resolver", - { - "root": "./", - "alias": { - "@": "./src", - "static": "./static", - "vue": "vue/dist/vue.common" - } - } - ] - ] + "@babel/core": "^7.0.0-0", + "@babel/preset-react": "^7.8.3", + "@vue/component-compiler-utils": "^3.1.1", + "autoprefixer": "^9.7.4", + "babel-plugin-module-resolver": "^4.0.0", + "normalize.css": "^8.0.1", + "parcel": "^1.12.4", + "parcel-bundler": "^1.11.0", + "parcel-plugin-sw-cache": "^0.3.1", + "pug": "^2.0.4", + "stylus": "^0.54.7", + "vue-hot-reload-api": "^2.3.4", + "vue-template-compiler": "^2.6.11" }, "postcss": { "plugins": { diff --git a/src/components/Uploader.vue b/src/components/Uploader.vue index bf85c3f..242aeb9 100644 --- a/src/components/Uploader.vue +++ b/src/components/Uploader.vue @@ -11,7 +11,7 @@ diff --git a/static/images/live2d-new.png b/static/images/live2d-new.png new file mode 100644 index 0000000000000000000000000000000000000000..cddbcc2c195f632a1e3239719055bcd23be6faa2 GIT binary patch literal 41436 zcmeFZcR1Dm-#Gp}w#X_)iIa>Xd#{`#TS}6w$j)Aobxz}L6cGy9kxdGbGNO_sMG=t| zk&Hz4Ip4=i@Av2a+~4cIzrXwXUcW!TuB)r#yq@E+_e<3AW7=D{?An45+N!IgX^apJ ze564PbnqW>kLVTnkI_r#j4wh=+pvE)bSI4qA-YZ%6Eip+};0m zg|FYy3xLMo1oFM?lqmKUr zGG0RiV~i4hzoD(2iwB0sfq&cOplR#ppvEsPDJ>}`DJ3Q)Wg;b~EGMljEhQ?cs4OY@ zXQ`p5y^G_;e_tviCaH)m1x8EB{->oNH}A50c#g`TPFtzFApbv z{J&_atl{bA=>r!7bTa?`y{?AFaUV}d7dLp|Ypi_)uX|KOUP?(`UQAkCY7<;TLuFkL zUq4$9I|p4&HGZIwxQmNDfT|#=plEL^CM7E=D<oH9oP(IWqk^KCtb(1Kn4+VCgP63Pf|8w-yraCG z!#Pa$H^oU=$Hf;IeerK?I_cp3_a`?O{H6pc+uC88p~i2AiG+ha|KDG`{1^22AKm=- z{s3nOIQ0J@C4X-B^>p+Lu=Q~`>;$y?pNXQxe}{pu?S=m{{O24UBxR)(ZN-4A3SzRd z3bJD79L_0#S#pq9l(e^(vy%pX{sHXY;r}DLvdVHw%5n<-i0=P2{C{6y=WOfYqyL$N{&yJtZ_4=pGe#1avHc@(692m_Za(`r!wf9l{0gi+_VHhC27dXMqjK;7 zV)=j@(#q6RLFi7ouI6Erz_cG5p>dXr>EBku9%d|h2@oFI%fuh1x}{MopKSjZZOk1l zcP6R3=~8Mo7DA6iZ6v<5v50-{S9zd16JsV>+B?AHzRO%j$Sv<&OQ}>|u>6@~F}JwS zxBG4zCU{)k{nx1@RQfSuRRVFwr;1(&y;^H&P1G~ah=EOi57H#evBM8H zfok)A5;OkKF$B7}%`g7nG5?P?|4(k{{9fzItW__{;F zlPZSfbpLp3mc2U=Vw1tNGq=lF*Hh=tz}G<)!O8QwYt*p}2tB_B&rxUo$L5Cf#BVWu zJ@DHBj$m3sz1fY$HEI+mfA8|*!`!N4J*Pd@?wzsfd}Lwyi(38F&bDeAULJ(JOhnAG z!$L)1o6b$+XF-(__154KIZ)*zMouO*+$vuJDbs|aX<4y za4VfWfDvb~c~`RWv(+N=JuHOVt3y>8DI8xXWJU}MxLaW`@64>k1JC@sNRvd%@>OoKsr_B+fXIQ+i(ak zSPTiu#rao zVd9g%+%PkC($H{y36l8lpVg)y8es()xrvxk9b&Vb^3)UazqzQdr{j zJNja%k~tN}n_}9py=r#urE9L;O!P17!p1WWa+X-!y+;4+r^P(wM}|~sNZ}hd2Bfne zq}qnJ$9nc}sc$V>D6QkXpa0Oml13mpb4OfO_lDf4#h1ZfM>EJm+A@L^Oz=~KMemgK zRqXW`JoMwYkD~@6UBciv{4}UeVVd{j?w0(wD-}CgqJy`(6z2%y_pVoxu1ftJynjpL zaoMgkv9)i}0;J(P2UgB5%@;Bi8U9YnPu_|{j2hr-nTPXxJ{R_{y>h;Fo8;GfFt(Y< z1u}W3-$TuC{wJsE$^^LtCr3ug3NH zw4m$7Ro4ttee%F^+SZ?cHA`yApYXhB0|48VPv7{lJ|XqM!S2L{f$h1W~a}1u=;ruPnpEncJV?Wg&zNf3&w0|XF#8;kX3WvjM34oOoItGi1j^~vcx+@F z39lx=%Wopu>R%_t`lKiIHj?>}K~lc$m?{s<+88^awy^3_oiw+gAmE+2{^aKa-nd>i z#3ltY!*R`2PEqMY~*Sg^6) z7m0IPiWXd*JNs>PayCJA!#(qWAjJa{fN{)nvd`VYG_AX5qw4x?(!_Eh)k@ydwyx(x zlb$sOqALMSfTJXaBST6i9C~Y1Ia?4P0=k^P)ri<^d%m?{8zzw47~dj6Cw=vFFn(nF zrZ4k3aq1+83l~{)3c-zH~APrOJl(LL~Q0uqQ_#Bg4r-1F7FewCsqN@HIDL(@1f0lA2*1k8{B zJb-OFhi$@F<@?`os1-6?_oNlW8UA#`=^AtDyb~&(FA_;9jlNCFulhR3h=C@Cfkx`< zdVPApI^kZb76EY zk*5rUL)CT1F}A&JP6*R$I=4=&{i4p{F=Vza5TQH>J5FPq|a<_cokk^aupHGu$!*0tNt7Si`x`Ak}!4~sc)mGy-wYGmZEh( zuaH%B3hYlvWTj7hVBy)KjGt{;oH_{-YB(>mFssh$@M})Op-iyRpG>`tk}C6$OOKy8 z{#J?r+XLm3Dc4-&na5dH&!G=YyS%C;GE_uY8A^K zP3i4yNEJ);=$SW|P8&a>`M|QhOr8ESi=igh33*KEym+Gc^VYSe+DA_^)6$USB_UMW zRj@TNNW-{!d=yNa)DJNN)2dJ3h3l@F0RvCs4<$+5CbIkJ#J?4|R6pvMo_S?rU|=w3 z?e#xQ6wBS`hf-v9bw+Meo0ph zXU&P{P^b4cUx{~J9CGVz-lw5Ub$s5FC7g$@E09vEw|-`qA9oQTus5BK${IB!W1-l^KH(xk>R9zg;{&d$zn%MJVM~vFYf>_O_jmTj|(J``Q~uE0_EwGDjw@ zn+{I2xqKG8v643V<<^3dZi8^_Z&ndP{Isur?PBApP!Ea6XFCV=S8u3htm;3N5V#q; z^q2Op7xUogs8Lwr7Sn>WnKX!GP*@tYcB9LmC9L&hN&?;OMa)FGho*y^Klm*rI5WdK z{%u&D6)ad`x7hd2Z9Q+jLUl2jE(%1A`kxq)IS?_tr$~W?(%NmWPuj;qnH+ww`^z># zN^AA>yQ@8_q@5dX5r|X?F#ulQa*eFCp0BaZf=YZy>L@Schwl`_l=)0v-Y9&>G)RRI z#*-tEi;26GVn9uHKEF+p>8=a87DYKAt9rs+WbgAtir;)-tkZrx=?!+~;`ymM-V3#F zi>m$3gZ}{a_Z`xI0P26g9mVfoF{&7j`dfJElKit#+%C8x*SyfiN;uYKwj@Yj;r?xs z;S=qu>35n}+4r)5C8!a)0{a?3bn7@S8+9L&LHH`*ola?=O+Glp=B-3|#VQ)rCr;6s zmzXaOHwHFm;`GQBIqy3fS0rqC5lMC*z}0RUK`sr6lFL2QSs+M?qV&py;z0>|Wfi}! z26q5&3vXk*{Q$hh(X%~;BvrH1?pRL`;3^!({U}Q!f0$8fZEudUZ|Bo5JhQmXuiUE@ z$0GzM$&go>nEXTpt3sQCF@|7WIt*~Ul!g!z2OmFbgJY*TShaz97rQf#Lyb{)@ zow|+1Lj|DaaUxaql%%vW&ptK14h2L2oCDjb10VcOp+bd+L9+X5esB0L)1wceZJ{i$ z+@x3$;Wf5z7wp^2x&5ta>Cr2pYPszA?(Rbt2+xTT=r2em(=1oX5L?Nr4I&Z~7VwUi zu~#Rlz669_u%kyl2FW%|`h`OJ?5-lqZmWq%0=*Xl=hHZ|w@Si2BG^523mep^Z{+8h zXBeF@UAy~!i4`$iYjJwn2b5ARGDCP~V5ER)q0PX)qs=zo!YZ&(I6dazF#QA4tSLd@gcr2BmTpr-_3d=A{1k)T8d%Avr5Jx zTZOg(Aa!{U9Jo13F*Pa8a+x5zX&yfXc~m}-P+PE z<}?#0x4E258wtgR3|r9!l9A5QAYP86JBP8Ff4MArd>bgxx zaPMNpd1@e3G6_tT8KC4JpW#r`Dh)f@5VI^vokSK4o0aY_*FHOp<4`0gu;Bq@?7;$RKl}!Al7Pl` zE6Mb8e-)g=ktVT?mW4K@ac$e;z)<+xCt}b^!{tGxbRlJr$U6}KQQ#}jA0g_5hn-Lv z>UZaDbbG%A(ma4nv&f{J_on_J<#p0)b}fi}1L-0xzu`(8@^i{Lu`EG*@>q$| z8nA}#R(rg7K&{T8I*79Bp;5D~40vgP;%eEW`Pu7O&CFqp58($wO6Z;ngDTnY1OjBw zSIm0`UVaJS*8*;T^wzB`)RBtd3?yJk9ev#ZUg5+lD|!_TwsF9e`oe4S8yeC(?8aU9 zZxILkr)qf_5$S_1z@dm?wMAVN`1I;dYtc6+d@&ApH5_ngd@#?7kkeXQ2^|d^E6}>B z@wGZamgT$H2t3$L+p$e^EiLD<;F5{thFN*Zl67j-sLof6%LIM72TlyXfvx4h);eE? zwY_&a5rKq#ceUqr1La5kZy?Q^e@OC99zYQ)T&G7_*{wyg<;}iwL;lz)b=Zz3>SH_2 zR_GC_S|K*LjLy%XlA3fD2v+%`cp($Gjn;oIzp=CsF^km(fc!vzvK+wPUboE9DFZ|7Dq> z>eerJWKta=cPQIr7K+O!ZRs8XyBEg-z{^e@&`pmK2R~&1rA#dz7KA1%f6e7)^vaC; zt?=to_SQP1TpX~z9yIIp*u(i*sQ+wA=jv9L$6=2=3PRvayI+k8V)s77azwASA)6X!WTw z*hE|F&!ZdBrd1&RpY@$#!8KT*jVZj%j@XVbRaG4x$TCrHAN#sIh;cjjHp<}sgZU+kh{^1H}l2H-#$hFt4Dmx!Va;Y zTQ&&$hsCYnk{VaA<#-%~dqES6T^mLg`pIoIe(D}ayU73_j|htJuJ)on?-eLN@j zBM#7Dq>I5CXYz-q1W`o7Ec*A&qb>;*cfPdR=OK~J2~H8d*2Gw=Tm28uQcU4QI6Flf z`+gF7{oYRufPS!YbN^P19)Cft)^_s_@k%P>1+w^RzaH2V9bt1EQUsf8zY~+VT((k# z(tsS&kr<$zF>rPa_G>uy>%(W-qK)lf=^Mexl73`k1Yn+fzh#aH3W;Q}byqjny~yFj zpM9c$;@Dwb^d_O)R^Nv8&`|8)_FfRxS1j1=ud*Nt;|>g#U?Ie2yWQqn*Pbz|Xt&&x}fjH}SB(MztJPH7sZUPvxiaDLJtyRHH=m3UO z(tSlMjBH5up?6Q@=P@UJTGtCE4-f;GWV|5kV^>n$$j25aLX^~5%4rkzX$#7wgQv9c z)KNE9$%--+fRPft1)pMp<1HR=MLLRrsIuyipDn~$hNd~p(3BBqxBpnd+4$3%n&1N* zh zdM7ZA-<6T|8z5X(fO-Y|>LIbBroGvk=!*V z2=-nFw1m*~;rHC3aldp-Ala@y%Le+koL>?^99MxisyBiI)qXEQmbxr|X7OpY*HdAf zjS%d*44zcYhkO0ogNB_@O*+84w8Ir*WF`>$tWXf=Z%Eq(e7m56s7vBA;p zAX19J^~wl1na4=?yW1vxw;Gx3V*&cxKZ7a*1ewZK^*WuzNby~08eEqE!F{mIZc=@d z(#fhba`GQ$PHi?L;+W5R*Ltn}9%g8Ug2WlQ^5(^i(Vqn)=pEPu(r`Z=#T}xvjj_VW zeE|QN1*qj=0nMaOJ*F%Us^|_FRmtR@p@xRAh)wL%H?hZJ{aOfJ-l@Vdy_WP8LurW5 zkf!rPkw1ms5W&00Q6*R-8)!6{OVEL~p=PWUbRp#uiS!Ii%y{2~-=$|jQ2ene>qBD~ zR(hdGy$94`9khfi5_{5U53KN@#wF?03O9M7WvB#5M)wT;QBp=O1_l9EM%1WUhT)A2 zB+uOXQ$aY*zlD}$1U}`8wHajp_NSZ&n7?uM~ywRK%97?lE zIgX3WG;hGY?YtXJPlCoF3C9J_9L2w}!w-!E7CZo4nm^XG)a`6OH^+A_u1$AfPv=oJ zCyLu}becfx_qUTH8U0H48#?F7pFW+=h!dzgTUey(K?w*cDSF?UCQ?>W-LdqBs3ld)lQ><$J@kxH332%qD?ht|35U4U)obx!ejBR}ghJ0FA;{IL%2u@4Wfgp( zBf0)@PgN!hx6P_8zgrh8{xk9Pd%(l*VZ86kZbIewg302~>nc?~)=MesZGE$Onw>1) zYM(S{FNw|i*M?Zsn|%S%Cd6O0!hw^G)OF{2>(LwPz0<62F)>`Y=K5=n{N}J7EZf4; z&kD{JFA3{1;Em6y&8^981o(MgJQ92;S>Qn2;fh+Hz6W8Cy2hyE%UF;+si z6l$NNgvR?A_cbBdV$1I9Yp9AT`u0m`AqfUj9WxR@v zSHfV=*JLuWcy&#zm1M6ZZT?Xv_+?r*RhbxP$zlmD&0P&9#KwNVinuPG9P2Z@aQCZX zdXVxx6>;GcNm}b~h4h_{1x;7naA=3Mc`$9D!`f3tl-x!i>E>+WV{nS#^RrTYBdssU zI@HtnR_pS}5xay_4|cFg(g4CVW@|~RJb1~C<3Bg9r0qA*e#jE9GsJzPibPTnfw6@^ zvyu%NUU~+D)076vP~3-xCUQ-`52U(w%?6(B!vQH zdf6`(Hua3(&G%Qkj&k6BjxOy8JHZJtX@08f{EPY6yVqzX*)GUYS&dvyEMV^Sa&Y{qhHk=-kQnQ z;~m4e>2t>jeu~Tc_Pen~4i0Rn9dpGAPRe&v@wYXVL2Qby7MPS<->!W0zUrfekxSrZ z;fNDwBsKcVpV#*e%|Ug9fq|8tcs1%#M&O(8uU%S#T0{_R?sCQ<4#-$%ZZ;1SA%I|^ zun*6X_NS>!#%U7PmIsb*e@p4*XJ?CnpsvTfF;(CMG+;>pCr!!5b-oDt=TX^qrK15m zy+;BR%*BnA3#kZ>AesVQF@Lmgm-qhOreU0rB5{Jth_mkJ6Q*rxlqdT9cuR3t@F#uv z$;Zz7s5)ceL>twOSo#S1b2}NeRd8g!k9;Kn-Mc|{+zA*B8?ckXSY%ujS0=wj(c0OPIm5#ujg{tB-8>> zG(e%UgazOHsr9Gy5m(gX-Mk9oCl6n$7N0S0_}Drt&Jl4w!z)nrr)2_^`L~}sNazPW zjUSWBXHwl@r5kI~xpK)t%}JileiDCpghjWdo8;ABA8IC1mNMqI!mA6R1PP)oD#)M| z+H9vY1*RpSXJ@#2Ts*omh3p&R=cYFp>STEVE*kJN8({n6&hLuxz*Y6Dt0#xP!0mN7fj-j*Pu8+-XbF;G1J0jFt{(iEl`^vTx zFK=$qFG)M}B>9l7y^(o_kn~s9GbWUa9U~#JS%D_FkfTsI%Q7^9Bz0tx=rys8?ycTA zIb^hPsp5M>^Ba2S8`_+W?kndmx+eZaCxDHTnWJ4$p&|c#&Zc;}vk14mhwkmI%0b(c z%q*w+IS}!Lh?zQ!gfO3`GXKCHfC%v)Gsp^Q>kTeT&d=WqbP0>MPPT~#DJdcrFy{q> z-#e2|FBIj=%s7k7=I6hjl^i;^Iy-ln+gsbNzO`sd?E{Cd!ci`kIAxe45fkAo>5ae8 zMwYBa>YrzlXIN!Dy$a5KNYJG7r)uZsDas9-b~OF)0b>B0n{ASWDtHfMEKDuS5h-}RYlWLfRl<@5-vgnh&l zPj*tj699wN?H1SEMS;p5KZ_tY7aJXoaM|!VlUel4RwqlL2$6@1C><|O67eC6kI{x` z?U7!EFI@)))*gJ38Dt{N70`KM%MU^q&kzt86oYtJz2lLR+NlA5hfDz$WlK;yi;sv^Ya5= zq|wIGOqJc}>f~_Yqxu~iWP)k|T@BkQko#mDS~dw@r6e8eSxWl+r1zL|&<0M1`QX%h zka+iY+8TfFoq&&HmlO5ERrT>^=QmX7vIbhvOgmC|*$&#f^hN8Ls}?)r-`ipC3O zRdsHGa)g~3M=3K&>GGAiT z*S^LztH&9f@nFo_f}F9~niiN;l*Djyo>ib{K>z{by$}01Fws&2(V7Wdm2i2+?9$A^ zvW2jV`JkP%a2&X=q|8Buyo6g^SEAT<<4D~gABqJIaeQ928MpE&U^|B9pq}*%yR%F* zSf-1E!1*T~sYtbVikFCkMPM244njeI=2f31a>SuhNY!MIxA9Q^>RLRgy3z3Kn#ZC= zIuDe{bs~c}hTe+SjqkXBnLoZ6Tc$;R#_5$txS ziwD}LZHp-!g8X1`q2p(J1Mf+}d)4BHicnaZ#BHOaoUCBXp)zv-B8K>G`P$p#`4lEc zFX&j{4Zjzw?|c)f5`zDnflK&V#xwsM5ze;JgA&jR~%#bl@|t05DB!`#DL0*{huB zeH0Gt&IeP*@#6xdwz@v3Ce$juHbV)J_r87o z2D5LFFP=0{K)g%mVZMPLE9{eUA&<$9R^9jpJRm%}C&xJVCPOM;A4n$$3Df78V>>$+ z7BZXFArJ0Mp;?AHOR#)Puo_-p2jPF6H= zRH|I2X{-7QdAMN8r1v?-XtYb$f};_0iExJiigSmuhD9eerd?247UIE}NJ^Cz#EM)V zNqhwZYq%6Bb)N}H$Q6tc2RElUa{O}3Fd({oGY=3|>*wfQ3L`k)M1*doGP3^aA4Idb zU394e`eMU)i;{9mJ@S#knZZxRog()WGX;QX6D?r6*oe zB@6U6^b&%3GRd>5Y5l{*zXcST%a@mEi+=MLR%RUXmRK6p1`6K!N;ai-FDSj_vb><) zT1?sTCeHNj6xdXR`izaJ4koh)2$TjxqIN7v9z0+>cKl@;^zgO!);CP_JUuO3rTHiO z%5#%20y8{se8}r=)>)i!^#;xIu)0x=m7^eD8p@H<`M(z^61%PRzjskGj!k}v^#-v+ z&vu!0=LDCP2Nwkh9HCAPb`HX# zxSJ3n#2uw{PafeoO&Pd&G@ySkf@+)2h+4~>=Ev#zv&U&kC3|rs18<9s04Nqj=C}-& zUVkFnP<P34OOV?18U^D`wYj#isc@iIyIMXHbwT>4M#Q^8`bn?A zRGw(~c&kPLiQ+C*fY``%R<3$R-5SNH#DCg|O2Az$OP>>~e$|SNcC=)Ecqt+o3C1F0di3MDi&0D>ro`g&{>pwcLy`A78-Xk5VDjE@xEzfNxbM$uk!(!OiKdN&;-CGcQJbByRgzj0lZo;Nv!VBf zk_!)QmrS~@!r{rg6vj-g`5ka5x@Wu0rvZ16CNYCEI&aTR>&HzOxU(7Eya4pS5XDOl zm>Mao(STyboEYOTR9}$^(2H{*ohQ#(C^^`{0=l8Rjbo<$H*0oh*l^(=!a%37XlpaY zM+xf(66P`D+CEtMg;c|F);k>z5)uKsb`F*G+3WgGl)$EtG%+cW5TCxG!h9MaGX==* zY<$)tIF$)Poom9i7~eO88iX-c zWi`&P-}UZ;Dd{Y)Zwa#%|70G6296(UhAs=*-t_NEo|OIA6er`>ucoA7#vXZ+O3pRv z$SsU0R}X8WRc61hy0oX6U3--E9&iNDWZ+Kg{M>5I&&GizZILid0!{gkl z81eN1PvJh+{We$?7*x^LHX2tJW*$dj01Ro6s?Q zq~SEF!Q_IYe^u^E6{T9xB|Deies-)w&LKo;@dDRLviP;a{tc zuj;Jx!MC=Up6V>fwbgC7wNRg%soS^LB|kSofRSwn2V#I`y;XKa#QKy#sAi|CZu_BO z&sL~yo(M_J>tA~SF$EA~a|C1JQ)2zbqcc+}nb4{+p=GN~`$2CdW3P@9atD(Z)O*ez z*XQ6#Sh$@hNDsMX)P5?>AdsXi$V5*n2Y+fX?{v5}kv033@5Zh~NdEBUwR9l(_ICz9 zXF~?wmDpc^z1E+#7X8Y+d%z! zt`s`G-+$Orf_i&(a#Bpm9Ya7kQiX?Af8i{jY`(cnlRODOCJ=h}_aH?;7h3k)-Yb*n zd_JCkno<_>fM;qc;z{3!uGN!d;x=DJ!zZC@oPfw%T}x8$F@&@ zXt-WBKO|fvNG&i8uN>sxU41#X;{p{a$UcoYLAjeNXd9A=jg)+Qp34$z;_r4aO~K@( z6jtuclIo(P3b#^IK649P>aGk$l>i&)Q-}I`j=gc+ob*Ur{dVE%O`ZbQ9f`TrK$AVa zw{R9$)`cXuaUyOQhE!-fv@m#&#JYhEod+8kOb(npnW8+QvdJ4#1r&hm$+wlLafUF? zBc3{tO@6!w3X_eQlD7mxEh-tGU)zFcihfs8gnEru8@QhLgh0hE%-ipXXI%%dd9xH8 zC{wtl(Iny2lOwjoi+Z0~dRdKCd^@jQSMeKIFS{U0J6}bC*DKWH7J42g;5@5#E4(>O zOVFZOsieSc`s!ko?#7Q-0`y^gftaxviV-2%_>JdI?ewGjs4RJ4lDJch>ZUCN-h9W` zE;3MQF`yw`=XIEgU4Lzj{)VYAblebPy`sT6EoQ`3wL^02j)k!WdcMg{>eGu=YxlzN zlPZ$x1<3h^iz}`x&w9_?LQ%?e zND6hleAI8!@i;{Cgg!?4k1Ld%c=7XNu3i(YZ^5H3RH=?)mGC>Zeddj_7S#pC>9&^> z;>p5LCE2clh6}p~DHN0I4&;s*?k?hh`rB-E0+b}aS1XUQz-@SMu-XOr5J_p;K-bS* z#l)k^5NZv?c-b=|W&%_km$#5;T$hF#pwDxGcRXE=nHdvg=RK#;&ok%!Ctk=^n6DI@ z(9l33#WD*^*;egzW98NYF81-&)0$uiRsJPHTK*wnlzvfX4dzhWO=yp^#~~9WpyOUd zq0>!upj=*g*+rh1!}>*8p(V7kEip_MyLc22Oj_%H22=5DC`T{9TofrE+4#<20LD0} z(xOx0!}DRHO-uRw3+V_-)*zgP9I@lO&;O@D3;`MsY%Pu15_|S1$o4g(0Xx0gxc`&M!!*)b(t0S^E zDYV%T)up7~;hNJX5}&?04mi=(nhZGZdog)-#7jyM=(-+YnOVJ1Uzj zY^dmm4{ zyiTGpv+G2?+4!6%Lk7mDt9Fo>&(x%ekOT^Zspu{&mob=$x&%X2hU1)BaySj)4Vd3r z=o_EuObD}vV#NNF8(U@aBOXEXh$Q*37{xJr@>XxdL5i`uAsP#=ysZj1!NAT);*$II z0n;3FsBl{=O7e!;IKQ41`!S9gTS8<3l};XvLc7AKZ;)f`eM1%#YE2S1lGuTv()jhUZNu70Ve529vmSk! z-MXT<-jliNyR0y{m1$)W_D1$WmFC4Bsy=L_FK?F(yts4TNu)Aro58ERt*cM^r>dr` z9bcV|FG*{e11gaAZ-o^94y!Na){e!!mkwD9O@6DY;Orw%VU^LvnvjyE(L&-p7U9zX zBE9~PIRj`I^b$TIqlbc7YLCy$ebI2*d~+-!+ob&V>zSn`o&|`dZKowx=sx!DIYY?=P+HN45M72}j!Dp z7R7Z<|3y7&zVz@Lsj)Zyk>t)s^)Oee`mI;Zu&_;yXHHXdSdfJii52Z355~0&Q?OafWg|vYOdOIUY)QRyAPnlhIQht7 zQkf2_%=%5e7@pfUV2#lloA%Q+U>L0W^<>jA*sz7;9NQq1mMgdWH06*KB|zH80dw%d z%V+Brw~LaE!-t8$lW|)vn@3M!z^TKMv>J}$(YN91dyHN1?wl*xwBDq9j;5L1`PD~s zh5;52T?HVdRfk;_@wy~B9kl%Q+Z^^*6qqqXpWjC5O(WKuvdfH_4c9|&Le0BBL{J~9 zXz^zd&?WtfgBkYOVG5X-_q5RRMnlm&M^Vb=i&MiS0bJf*+|aX*zboPgE;JtrGlWG3 zSSrfbkjzXlUHQaD;K&M3h+%4oAa<|c`wUg7KZLy@PjUkWK-GqxhrCzUH;8Kjw#IE& zJLvveHXeP^L9&g*eEtp9ahrmuD+y;30}pVMN?_Lwn#PNY>vpwa*IC(tsksx?wIeJz zy15jZPu4JUvTsW(mjKFxT8L7-HD?4-$6RvXCNTd~>%P2d$Ix*PA$%?#T7f&+O@C~Dzx$4|njlg{d07{R6VYOH_?66W8` zjzwOn2ob&qYpZ9d6Nw8sMFahzn?(1-0isYhnCc;MRzWOW^ zFLZE4P?+zoV`nA~BP@3BYEJt06UWEQck{z*LQI;jQU41#0{G>bvq| z-lbiO;4plbJIZhUg7Ou}H&m}PSdKx^Rts_HXZ`Lxe;L9!2Y|eIN*89`2Vp)5n*q_n z3=p3Av1LDdBlg9g(V&Yp7cLmwG7v=PsrSGDrUXNg0 zT7H_>Ke#o)W%rik6dD4isSA6md%Tug?yxSsqd+(n$8p-KpEH0#GA&kShzZQI!ZowI zaVa#UABS0zRIC=Hw!$|_=1(c zVI3*!!3eiCyjz;`?nQXz8)}_Usz#$h%FPpBw&Sf-8m@10U^_QtkAoJF5B@ir0HDI3MZw!R;FyHQFnEz&IU~0BwO% z|5|c;-7SV3jGS!r-MFUvo{uxxdv0&a6G!+5A%r#49@{&s2C2qLC0YD|Q4*`~I#i6_ zpwb=jHvN0d?snEac^rNcm(K*(hcr}YrIImeNnEX?9q^7I(O_-G%~6!zv=1Lig$5|_ z7P)IF_SXY`FroOmnjVb`)wj`6R$G&62Weos=cC1ejh4p~j9>+I)Mr-SmE4lJH6ZS( zb54}-odeD9-{8xDF`aK%LwM7I7`y%98#j`5dML8_LUBCI?uee)CS-gI!P3&2@8?XL z0nyw&OCioLuqlUP=xwd)`Ms}{kYhx8l=mV*P4K)kHuzBGd9PRgazl1i70&#*lhve7 zqHK({B;fO7=nHEp3|MfNOnhKwbqk#yWjH*&9B%4;R>#*j?ENSNhOJ-(SHGAe6U8mG#4GQ{Mv$y0 zXaV_GEHfMLZeSzxAc?ghDVDqjsr>I7aMo8Sn^Qaxu)P?Ke*A3V5-I8!dgbt`2_^z_ zqNy1xZM6EqIwAb|e(JkcywteaD3Kec0`j=yyB`iIE_*`k)#MzfdHU_74Z?$jhGSg4 z<;xLFb9pa}AAP`jz~Y`DCl)!;`P{nX$-&JDlsUUG)$m3**M92~iJ>Xr_mf9dFuo#r z=k_Za(r4(#VpM<;QV1mci>V|ph}rOOL-FL(`Ap2@D}0z5!c)9>KNCL#q!iU{Sof$R z=h}<=&p{be5<_xa#YMSEzLxS93z!GAe+Skuv_N8Je;i%HsUDe$&F0Vzi6}kvL3%%N z*e^YwGB?$k61Dms$|VF+S^6M%0D}%=tW1ITDWt1HJ0PHv;BzU$T78fAejVxX1`P7k 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 Date: Sun, 8 Mar 2020 15:55:13 +0800 Subject: [PATCH 06/72] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E9=80=89=E6=8B=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Card.vue | 3 ++- static/images/favicon.png | Bin 17819 -> 28501 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/pages/Card.vue b/src/pages/Card.vue index 682052b..5e95fbe 100644 --- a/src/pages/Card.vue +++ b/src/pages/Card.vue @@ -60,7 +60,8 @@ try { let prevDayTimestamp = this.oldestDate - 1000 * 60 * 60 * 24 let prevDay = new Date(prevDayTimestamp) - let prevDayName = `${prevDay.getFullYear()}-${prevDay.getMonth() + 1}-${prevDay.getDate()}` + let prevDayName = `${prevDay.getFullYear()}-${(prevDay.getMonth() + 1) < 10 ? '0'+ (prevDay.getMonth() + 1) : (prevDay.getMonth() + 1)}-${prevDay.getDate() < 10 ? '0' + prevDay.getDate(): prevDay.getDate()}` + console.log(prevDayName) let res = await api.get('/api/card', { date: prevDayName }) if (res) { this.card.detail = this.card.detail.concat(res.detail) diff --git a/static/images/favicon.png b/static/images/favicon.png index 277eeacf35fae435ba26eb62c3860253dfc058de..285563bbd4074bc479227efc65ea2ea68f9c50ff 100644 GIT binary patch literal 28501 zcmc$G2UL?;+u)lZpnxDvKu}^tibz+wCMqZ@B7+J_5u{q^MLCrqMwU9SdAdM1V8t4c9$HyakdUl7hLz?Y40d_+y(nRc(dKdl#jU|a5#U#;EJci zi7Q4Y?XFz1)3V1C_TqH?v;hDY2k&z@KNn|LFKxd)cotl3@H>30gvYU#cwgFs-v<%m zP9HPI9dPq>!0lF4SFlsrwHv3QrKqB=wo6NECr(vaMN>&xQ%OZlK}B7Am$J61D(>e$ zc!15*-cj2`@8C~d;L{%bd2erbZ6zgNUtdLEHAOd1CnXgvEiENwRV7tb1+YTF%iq=e zoS%ZL*S22}^c=kGJTJI=UvP89L5SyU-F&?F-~pwpEV#J;1J>2+rE-QE2$_d zLzY+z?d|?q=kDX_%tCH&r{v)5;Nsxw?FH7V{Ik~myqmY1*Lk=94d{Qq{x<|bw8xJ9 zgX2Ha;^OiT3NLT{%Ycoa0{M@ty-xbOJ1Chrc)9s_+BxW724rr7+_-BW@N_um?dEyX z&CU6jqKto$j5}}uDn<(@d+eOu1y{(2+;6)a^v-!Z?7^!lt12rft0<_boK)GZy<1gV zRYhJ|Q(IYib?GrT`wNc#zb{o&P}YP?)wHyC|NBy4H}>be&;1`4+uLb7x_P>s16*Hl zIp^e{)io4$ zJ2+_UR@QRRIJe8;*M2=WJ0EBVaQ~`H*t^*Q82=(q(@|a3Rzpn_n7W$1f}O)Idj%~G z)!hoVnwrWQc6O?cj=MB}K|Ahw0eIy(=ii}1s_X$o4druc=TvMR6x1CxG!=Gf*zH!( zbkuNAP_@(0vQtraRJU`mg|^Q!CvAfZUO>_QKfURMgU8R`oG;*57NmX74tmBOyd5+N z2YdX_#~1#CJpNmlfA04^?*M@Q7gn;0-OJ6<+xMKO!#*b3_CG)_1=JW}s5mBM|N3um7YO@Zq0C<=_g0 z$j2vz)RulqfV>d@tu z(E{y@`3j?t_YO$(F1;^v%xtc;a=8OOY^I6!QrgGoNf?krFU;J7sTAgAgp7qhQ{fLp zmi6;LKmPBoTZNj+g7ja(`yIP1vUn73V23}5kV3>5{y>CSKmYUN|L(d~sQ+hpzhf6d z=-UD6|F=9t-u|T}HR0-?-*D`X@zj^>OyMb^`i-cI1fDG?jN-Q(A8Bx7rz|D~msa^V0ax z&;V)FS_IRRGUv+y#YwD@(4L|M8ICqDyH-#)vrK*a)Ib(&-`M@#3MW;owhx{BjOeUz4$_lW*Ac1Kbo%@m8Pv+`uDa`@4m*@ls*RC* z51Pft?ya^;HM?qVq0if@I5aZ?nQ~gu;ee}bs(ZdN_a0+X6tM+jEF&jx)gBE)T|rq4 zzUC@v34q)rHYVqvOol`+V}FZf!$6AAmPeL_Dv-vpN``6j|1uVWSEj>4#DXo zw6pn#bwggxb%s+!Aed!M1hu*1(?9u_v;CFaf#^Klcf{o)8k#hS(OU>h*>|=_Y$nes zDtjyRGEw?jnvVt6kjZ&wjj{K~w0_izs$pdSCC76iGylEcSqtKI=b(peh22iEE?>U1 zZD4&BkeRQ5@pr+9JzLC>)9i1Wra7;LxWn5fT#gc-rDcUY8uF!ER0JuVoWIf`5Pd9|XFen;fEtVVPR za4WA@PPmJ1tH0jhvxWt80m2;q_$mRDL+6_|43j@9u0bzm0}?hS14=JeB&Oc+pLUxw zJ6E&HZ_)G3zNZ6rIVGCm7w6-*zLi5#Hm$!Lq zPCw0EPV1+xVs0IEX;dfInDfS=WmFmc?G;k1Vzal)o9ch6nj6p|&_Iv_#$tJADfeYc z&|U@fkTAw^Q@zqs8wM~WRlMKq&Avhf%zfXhv!n0&bfS;fqJLEAZ$1dgY4>tjr@VB$ zXl-g*xmrcu1|U7MeZ_E#oMD&qy6Q{Z280NN`|~$;YM8S*(}f!Yg6ZoXive|4dEYi? z%ol7%Kb5r!xs`2lZzMbu*hKE772YM@wvAXQX&vZbCTBps|UBZg3n@;rk#UUPkuzRQsN< zSEwP(U~7}NV#Hdst%OtU=HR`e0O)=a%T7nh>aJ8_s_+dg6j^rz!2%n|C&BT&pSr*b zb~l)90^I?|Tu{GvNfKOZS68`om2ln{ipZg_Z23vrLsH(Fc=|hlgK_`^`E?&kQNV-~ zUj!c7_#mCzoGHw+d3E<|4GXN$RYPVDT}Oze^SHNfay-h2Iy420v~RecIWs~&`AgR+ z$ih6dFhP;Qkp+fCxLmNhIdjjpk5`gpfeRA%?c8N;sr)*>{nDRLPx@$1X8_*jF zApsUxZ*sv#qgsj=E6xZwO}iZ>3!=3P#ZYU&n$~&9;s6lxUEmK!Uop1V@)PAtbH|JM zt@ingSKejOB@q7YY#dsYzb1Z2jt6)?YX^~Ig?WrQ(lXhL5 zICJJ^o?)xC0D%1)8nv7cN88`+!FwH=ru&d2vMzZYj3&|1FhubLV%FM4-0bMO2}%8P zY>A`PALc4zk8S4j8Uo@bk7ZFRj{%;v!o*aMg&RYUj(zzl(`>yvM)L?v7fI^?vepGY zB8LU0C+SBg{CK;;xwrPHG>T~QL7RI`lSE3+!Q`O}Kc?y_)-}__tFhg>Fi(}1kPyE? zQ*zi1Ys(oUc3{O^ugt0G@pQI^2z;qw@6vXfDRdREERhod)GPA<$g}2&a=n|mS8Nq6EULC zKGMybb;N+^AOnLKm@*T;?VqV&kNZUm;2U9MRTqE)Aet>K(d_z((uPVvcwFR5zm9x! zpg98`x+Bxkf0GKA*Ot;c=6fxgJN)*qjGZpul~dQG8dh!;&o3?mawiLh7T-2Ue*%p5 z8$~&r(&RZ}klSCXXD@zkCIik&RiOCWtP<0xzFVMx-2a004A^DxzPwB+!#|%5IG)=d z=`>SACdOb`mwdl+=4jUx+$z4p%w_(R70%<%(%j3dctj3xajJL}qQ6yBuU-XLTqFYi za8ut%fOk*XRl`^TD{x0)U6VzVBwI$-?F|C!04LRrFn)6Ug%oUpQO>4z2`k#KgZr5{e=E2o15bVz-ZLaL` z7j!B1pP+Iw=xm4?8}yzE)BDz$n_4mCGz_4z^bQI6*KaoR&>W0U&okIchb@87H15LC znT{gS?@i%;E`<0)0Y;)FPI9&g1_ryzjc|(rWcAB3A5yFW3d;9Tadtd_KiNcVgF;cZyvCMoB!EL2m+^8SgeVm_k2j03XEu2BN;H1!QaU_cPOc z#Y+rMGSiJc)HfrG6KIkreGUy7ZWazvMMOWDl3{gQ2?eL@4poH_Lt42Y8=*8pT8c3$iauJdy!uck6shpf4ba^9)WzTiQ&$>ZZ@n=k~9K zQ}c>7Y(KGqLm#BIhZR<4zzK&qN&(obQ@H`)Qfusah6Ye2$kCV5?+xC(`jcs?3{{Hh zZVv1!mgs#VEI+l|3W!s^$bcnp1#T@et)^ORo-GWuYIt&>C5?mllOQP=q##um7$B}y z-{1svcc!z-`^Xr8#-M@a2O#RTwA%LOsR*nJk<63Fa-hgNzesWQo*!njz`!l#us&y# zK)S7@w*-59j$a2buQ5e|4?=k{1#lifI^`@1 zIwz9oBhLy=cJe?VTw@;_E7!A$Alh0!y68VgOFmc9ar=BIJFW*A`@x-0MVn03}=F{aTA0iCBc^BMf+A zAz*uVHvz$gq$98duu}m%a2Nn%>L$YYBmwwq$X6u4Xil%Kv|A07m3cHWoO;o{%tR2O=Rw*?BORyf^ioM4852(X zzZFsotV&d`}v!a{w^Q9S-)9OAdcT;r8sh( zZ(x<3YVh~N3}u0oarZBZ!7{z~1<>`uN**{IOHX!d)2?^kS(#Wv`8#eUdn1RfK%)ZJ zV%v%9HNk;q?k{Y9TQ>Gw3ct99;3J5#2)1_;7H@^1)5(V3 zW-}*}3=?;C8eLrs$l7%HkKjYSI%4c;-)9`Z)X~m=yEekfyJihL$c@m>HKJd8${sqd zX*=!k<~@#d{Mcetic^x)eWPUEV;Ro3#A{de-gR0l@|4T4)eWNIE)bp;lfPsuXiO!A z(@euHT)d|n>Mvnh%$4fJo8aOeD_XSj}Y6-Ijah!OJ{iDoq3|smK)s9Ja9IHgZ}SZAz#}x7c=Q;bZPzyC60K@ z?uAoRx2_76(ZoAgcqmV#86NH_hxN2%MCy2|X};hs|n#49vYF@g8h?a;Nu@mTJPFfVdQeQ5CU@B zX};goG1uMTnLlz4n(4T;T>G_SIB$024BMn;W?%$n>XT`y{D3LKf?zXe{qFT`TND0k zNE}y%_8+BXxzPFx=9MsyvyUIc^%ZCBN%eDK<_%P@aQOwhS#g8Hl6(nmP~7RXV@<2q z*n;WD7UAx07CmIj8i4QF_=kFPrJJGsp9HyFDy5kwB^gM^6-(~5T)>0ICnN)_Mkqla zV!!?Mfp$NPa(i^)+x#jm${XTRTyBZ4<#Cuo;P2qC2-1Zlq5 zzL$^Ydmd;0n0+VDg~?!FBZT0zVC{Q$S(^E1Ln(!CAn{63f5cWUOj`-1srBdBoT25&EbxaP+ZgJXKW)hk(_&W8Ef$3al#=H zn2mFK_B8 z|C4yVq6d1fwEB)edE&8`tO!yvna2!dnT|oF*aI5mQ$YGM{WE*KVI$1F8ivEOL#90X zSH7$_?z^K$DZ|sy&6oFD4aJzaW7FO7+>igLkJz1zr&?pad6 zZkkEYS0YXy-f5sg#wJ$}$1dll6f5Vo7P#zO$A#F;QFCqZ(^s%6pDy>vCz0~8$p)J$ ziXL6Yz#~Yc9MJzO=DUrCdS_*L*Ukp)G+|PERjpUrDC{A*FIBe7{w&#EFVo1%F<(vj zANN}?+%iCeqc#it%?*-w>R;M%oiFd@HSdqvcYI6bMgr{;|M6Oi0oof)WGU1XO<#_v z&T5PbspzQ}ig~|r)|+jJCAq6#+GO}%EnCcqh&f*IQ6$n8t1dnX<&i1Gu!JLYdQji0 zCTNcOl476&0{MucAm<80KRjlLW5|%~gJA(VZ^2L!0z#=s&`f-`c0(NLnr@8kQ^}41 z76_X;^km$%YmT);hEK?0AuFJciDIlsps&i9dW}0qfC8Zzla80a=#}QiSJdCJlaSqr zMurMe)<%zFt`@=~>lO3Tl1Pl*z~38t!up?4a4~wpDLxobhuO?go-3fdoPvj)8oM75 zVmzg*6fi%x@GagZDWLdaA&enY|D*Mq>an}XPib)Oi+F8du8+i#Vs>!{6vETZ>t)hK zNyE%M9W?!*86J;kulw5TVg-xLoOEUfO$m>W-RG$#LWCYbZbr96tdyqYp51gTEHqRW z%M!!u<&>8NeBaNJ!0vv-qOz)ugce|%Na-0^ZyWf}QQzBuuP#VUm0^6K<;_|<1Q%bN z2B7ib$WNm0#l|u9_4FDIb4wn>?l3v888vI6YYkiL=}C=$&7)k5^6pw@#CHMVp(kK8I>&MTk#9D=gkZ!{?H0fRsTO5g> zpZ||F4eUT8(XTHC<=g(wlz`cMGdNg*B{eVBZm>csUjw|)tr*rCOCsQ*K6%=5ov59r z-5J2G^DlZ@@I-L_zPOW{3vqYm{wyN$v2Ypm!e7=7^Dc%dRmz2jGwc_oS04KCG6o_1JIa$=Jy!Ej&V7>q_PcvsI9a}+% z#!j>_fc;bxXI|w}#X@vFwu1tM`1Ta2#2x(a2PywFjsx=8NbgE~1}qia7pcf6^^#r7 z8~FKS9zL~iVH;uj@nAE_hz`UVgMVVE!B!vuazmpb=R=$1i@bk9*H;wCgItE*lAmt?atgh@o1MT{dX5Z) zWE38_Xr05XN-BgpbvPF30BRvk9+(n;kPc+e8ch&}LZiF=?Ki-l^+4H{XNMokJ6b@ zb$fSnK~!TVIq68&dR%3A7yLlhr(u3zYb{&sz z9Z;NajzwMz_mQ13Z;lsZM+{2MFQI`k?I0sUPoHROBMe1`B@2xx6FcDXbsXK(vZUL! z3?&k@@qt1IjKPgAsHAoKWFFL{e-eK4+Vha~R0j1ulq^2zWA?Y;#1C%bAmS0t$5CD; zw4$ZU;ohKz%#IX40F)bK{et9Q0*uyrHn- zPf_`*_%j|L6&%@WI`jC-CcaF+(9JJn9T$i+`a(b&kW^@qjK21U*XJv)iXQdlX3MJB zUD-Y$A&V#r{c$JqPEcGBCko9pQN0i`vK9)>Dlh^)iJ^|a2<nM<8qCXluc0fDl18wW2IjFHG&*fTk$xoHmmbdPyoK(51@q8bK zyiLE~eLDN|)B(;p|LDSb$ikCMxyD?woG_cMA$6Qrxdo`+&2V|Vm#~scGKF@bXOvv9 z(O86tMquC_oTi~MhHSVnTlIu6v1j)%?dFRri>@xH!RL{R$TwF7=Rm8rL zy3!0Sm0v5!87fcWznAcFNw+>o9Q4L9_Os0NnxI=SAAcDFQ)U9dEr^ffK7v_Z_DiaW_ zDxa*|EO1`&Z^WiKWq;Z?-(r8L^6R(nS9;ks{uPeE_Pr~@PTpC5A>Nd6)HnP^eg;%e zbng+O274-Eya~4b?!yj4GbIp^R^-6~AYq1m*0x@GYBJ&yywCk4CXB>hT#`%*nl4o; zNJ9Y*y*_V`?KbV5NZuM*M01GGjAi@PEgqsa?Jew;-)kgHFsV5?^n2EpI@_QODnjKk zodST36HJfA6ex9Rv7{i|R}cL7yL&7dB?`cNo*H*_iDyx%&8(Qx2qJpJTM$qRdiZXz zz}s)Qff?{oWHrvcja12?3ic(_!Q2i(R=v$36h-hE0 zGEpBq<#6>yyLF%&#M5=?(0%kc5@Lo=*|mHMXGL8WulmBsb=9S)COHQFnN#3}GVxPj z-IMP7r(HL_bF5wu$UN|Np#CsA{BnHE|8Y1#Af%gzDcD;2{UoNePjZ~4@%w$?z$R+S zU#fcwJWOcv3tEctbT4giq%1xRg?=Q~DLu&Uv_7H_f>0dE z2(<7f6j)o{fM6c!AdC?LR%OW4x_>dKMf@Zr%05gXvGUC-q{j>xH>9RO+eEbX5xDuX znU0!=?i(XvD~^N%mykx!qtLr*aCw+XM}8Y8v^()_I<_Q zLsRQrjr8NX^qvP;fH^QdFMIGNtguX`!9{1Ji~l8l+`ttsBru(IAL0~149$NEm4$~^ z5m{>yfv5}uS8NVLK?=@Td|KVK*mzxIbqUl(@3bi#ifEtj3dNE~nU)LpvcM@L!2}8+ zro6RI^xoqPPRmQhx|v9{Tnod&ntk@J5FqZbtjA`X$f-ylt&uB4b~4W~UFWmeG=dv& zM7P6``0^fY;&&dv_|lDr<`Bau7o2hGAH4clbHXvE5qv{Q?aL$ zbLVgRc*v$=i7S-L3w$NL4TQ5a#?)mN%3T?3eFZmI)#C}o;43_FmJAgzp#@5f7w|^+ zhHE{-f=e7J*8%JLVlfu7&xXBkRg~)3s&f%=*Wwl~ZwprINqsIqT_1lhE|K%~w=4c< zF*yEthSzC_;7*G_;I~r%m|!yhWorx$1A7ja7=y1{1*M_ZE>vkDiQe+1u!$&#+%5v= zffNmeT^3!T@Y^t%%D~E!#GJJaOI?=6pnV_3VA-+BBTY_lZ{T?HUyuADpo_Kc`zYrf3I30gN?EcyGbP$Kl5ZS-s%|qZH{`aPyu6HA{775r9?ampILKn?XVN%I( zj-#1$t8wX;9~<;T`@2y(aDnHZ4Gr%}_G!T6*2@CsV$XmZfXWYvHA7=foY2QXfS@1p zpQrh)z=Uo8K$Lrvpw~u+JsXs3U}tKES*$bK6$s^W|CuVq(eTrKzBN1TM93j%bz`|_ zQvyqIP35N>;^Wooel>WH)r2wuX^zIf@N|lIqj+*nrbI%N=isNmZqso$D{dkUbl7%+u!|ABt*^h=>?} z=S$0@eSh0j;y>dUU~AiRC(SG~k2Dz~8F-XV%dn;}M^cJ?Mom|`iUY=v?_KI^P7x+O z3k~%PKAP2wBYKWu4Q!_=4S^o-M+m&g?OrJkKb3}vebzi!s=DUbwZ-gS>X*$YfeZ)p zh2(j$QdNqepJV^roH|!o>wHa?!y~J4CZjoZUnt3!N7nA?MK7-=zJq$@GZxn+I5Dw6 zGAt$!^KH7Z+a@q&(U~I-k58tm7C~3PS(CvH8dYsE-h$~5vN*lt<@KNQr<_T60jLWI zuC>X|CfPU}UbX^<(VCAHZwvFS9U=8`6tk|{5%~Vxba&BBHCl+j-mTtkm{fUBJu;@|C3k90914!f{%L69*S>JZ z71PL%yQ9CF?_j}fq?ETdh~7^uM2=V>1@Kn?UPRo3r4}!@LID|G%a7-}7xVT!<4q7) z1se2y4Utf83F7$(!4-*ClQO!d*zv=-c(zv(EeN7@?Xh0NKSiIX-`!Gq44F;iX2n-5 zG0JeKM&^>q4-O>lpjLREN!nq2&(ipkLUC9EGSvI6*MptB1%$lm(tBJQ$m!i5{dZq* zb*&T8)6=Ewp*-dE5JVWt;F?C>R)jb#je=_f{T0GKuy{;Ox5(6r0v8@#Qk8>Vaw)wVNLO;U9Xhg!F|~xwjd{tyC^5j;z~@Lnu#?F2Zg%7b`h$z8b-SWMKcsX^80F~CHNh}i-l-W-CbAZ& z`0WZ6Vv$~_UHP%kQ#7>C|8BE5x%}JUe&+fF+ z&Zo9m&)*IQmOGd)p`>EE%kf#t4a`OdapL`UG{{3U7e~|Y+m&V1_)It+#w#XvqQ77c` zJYP}U_4w>9n|x*lKAXwlQ*zd;GM5UB4tI=@c<;PPIk_r@jxb1dNGr!`Lh0TN&d65t z+kdV0$O0R{@xJ)W_4t5= ziKL6Ef-A=Yf+qiXmHhp!*CF{ArY5VV>E_@)AC{$7Lxr;B39kA6Sm#w@o=*;y4IsLh z8@sB4uRgFhbgY?a$)aPPZnRaf_L!X$2Y#TC3vm+# zS!c4vv<>n)Kw`o~xI0zqJl@ozQ5u5gtqGzCK3@0U4(BV6<6muyJ zQ*Ve%-q<Q=FnTY4_8vF5t+bf&id zrs-t!<9*}eL1vG9cDG>c>92meeW#dOiSlLXrBTERJv4n$C!p&*yY-$Oy{RobVp(A` zAo%&6_W5KWNo&s21vMngFd)yf=9h|R4~pA>d~o(<^J7=fy~ZEU{uKP>6_9*d@AqZ0 z?Hpl}tk+&S$Z;<&Sz_~on8^05dtbvEf6?n3nItx8+J7~L%?2fKA&uFIvt2`)@824P z-MMYa89kLP$nx`gH+IC%sc|o7DU%eduD$X#!I{|h{rgUO@fX_BI+rI|4>VrI73r7H zbbx=~$-<(J=UC$)B9wt_@Wn5yHpqiHsV;lAkB9l9cG!0GOiz1$b9tgK-Vnj^5BH74x>^#qB93S@8_}EQ*3nczZ zkx$z_aO|1x&tc0v$<#4KJ<{5qCv(HXTswUixUC$4+L2hwZ8Nr0*sGva8)lD;8`9E>C{akd7cSgzT~4Jaz<_ zMOpJExTZPH?D+1}a_w6hb8~aYIHUCoJ1khnw1>i(#DYEK1^u+n!3;SK@0&rtnYbh% zvoGcH>mH$D+a2xotM0akB8(Wc0S0%10s+*^i$9t!CDHC^oJpCfkx7xtwpJMocrw0C z7^WYPfG)4}*0p{SeX#Y@nH_Dy2%xxyKKTbCYi;z7loPrleB4XeG~Bhbus=cprlRpB zKz)c#{+Rh?b~3z4=aU4Ya{yI_;fipCr%Mdm6Xv$yXaC|f1RS^ulB_T`aO~;E@l1tX zonamI<=skmE>|?2z1F|?!Y?P20lnMG2A=P*@H!)m^n5+Qi9AA#OA`B$7mspdk{z~x z+V@M1fCz_zb*Tm#$m09Qi18b^rp$Iu`WkxcHqVOFY8{YFDne{Ma{$#KexaH{e){)$v%s+5 zj8w}*ogFcQY}Hv(f{O>)?(JKTU%$m_`}S4gDsUk}`k%tG>#ET5nwX_hEO?UfgvZJ z8hv*MpoWdo;8t1Wwwk%xdK?H3;xLd5!8X)AI8c-Ndbnk`Nx{J*z)z;=rU*_$MZ>5B zQ7*|*8NP87OU6i5O#iqcx%_8@UvMw9TQ(uDUH}*N1XtnmUOZw(cm4(07#RXHA;6@? z*~y**bxArL7GZ@xqj!}GLI*XVF)0&OG)%z_5cz|2#wFF(BPT4Iw*xEi3x<T#0)XE(Uxd770?>Q?wxm1C|D zlCD=#Z^~k;PC@1JuImResZnr@CAf9A)_n9SaOU0}a=r#2{sF>X^s&tLVc1&_AksS0 zP@$wc7t;S3hMf>anV+k`?a1X((1k^ehhV+HVZ|E_i&b3^E{Jg8hMoMi7bnMQ0L+!e zY${k<+Muv&^IvMAmcT+v<@pKBsi>fb`cT?+>MU=S1s#`E1b3)^;Bx|p^?Vda$^UEy zA{ohw+O-)RNlF@iXSDxBI_*l_dfY^uQPse}Go>8XrZ&fCQ{P25!4V=Mq%Y{pLG$1# zHE1!q6t6l^E9d7X*ol&8>R>%-%UHznUn#UNC_QT5{j$e;dLl?!aIi>F;2#a;AaZYFC+`J0DSo!> zS(MAJir`wk<~=(mtAey7Guo?Amwg0k`C`G7K^J4E2Sx?Y$%m+cuH++b@;O~f#NHBFKX7FM!o#QW z+PE4K1db#yUJpP2kU>wG>;K*ybtH&yFZGz&5zvK=F{wO*Y+t4GPf;DUKKV~oaY~5c zp02{N8^;LaW0FFnp9NM%jhgQIo_u#!X<=+`Xl5Ae?wJ!hgtZ~F=sOZEsKr%)raWVn5Y{UXWzSN;@S<%x zb72`!8L=ZMia;H33vMb|E|c8!TKE&ly&VY&367fh>AG^Yo|kx6|75DZr1fnnXykP~ z0bQP3m$0l6BEE#ZW{u%9j>G+3MZprSO*iT_7D#C3K8yF?-}%;$9n|Yec>7kX{?nUP zc^!raoFuWA;0DnE_@+}jVhdZ*g@Yf zRU+GK`aV9(Qahl4@YqgRgXzwC8?Ln|bM~48l~@%7nanoVk!y%Q0eE zPVZ*{vtgbd_Mmq80FK$EZ|EfFjU!sK$MufH&&~PN)9`y)M!pY}S&{d}UcyU&+s80) zxU%PlQ3~zr&dQGM8DGT8xtDVQ5tB0tC7H%_G~^|(fGOD}}+W6+uXN=Ijy zMhYNfR(|674CeP-jAtf3fSLp}KNyq4y)PbAT&XRu&8`M?FV2YRJplLicybM@baa7f zBnJ<|(sS|%_bCLN{LjvmJ+}rM!4AEZ@3>WTYg3fwZ)=|(appYOHlu_u3mse#OQ90z z=T@3VTaKMv2j#EkaMVfpSC_A*dV1|_{4L{j*ENV zH;eMi9oMBCU!rf3bjw7STb`0g&!fS32_Sx^=*^MK?1%=Y!Of%i=);~PrTM{oL#pH6 z1~UrNm|!L$HL{*2$@sf?DS;|A!&D52ydyS%A%_%VQjJ%)fl<$jD@}U+MUdI0na<*X z7G!Eq5AE;fi}!s(4IcI^1w{@n)CYfa?JTmA{*r-969mbs;KI;C~xouLOi?m$VpvuX#H==A61 zwtHmf4D49t9dgxj;KD>_?Umg%FDc*_yNy6OUN{1G@Pu_d0=)L%`}>`_kxV|UH!s4t zm?<}4Q3ZA}1G64@57uo4vo-kbV;t4fOF<7#p=+pA{U|`-0274~2%Jn{duT>KRZ^Rp zZd>AGxz4Yreqrd#;= ziH)H;lQ~!sxKbc6X_%tK5$loiMwrAOGcAk-XHeG)LeqjTe-8(8U2dSHO$33{<|RD# zK7vGzj5WG5gAwmrl2VvC-Zxe%N=^%s_-nMLcy@M(VXO%hbdXd;IU2Y<6{3t^akNHS z!5sD=j`-%?Ivg;dZbQmV{{M80*KXD8=*Aw!QrFsumXek<^LFeTH1r(iBFrKm9c0%%N1GeGcE;`m%58zT0~O_DlZ?OTN6TYYm`k<^r81PoinKq865qbo zhtO>sHnANX2XLH7gpJD(z(;wEo#ApA1-}pjenSn^4X!JbKJ<*3BB10+`ABDTgDpi z{us~~M*Rr$dsL)%sXL0=X6U@~zYJEvilIcp-gkpd`5khGt^hwjO_EksGI+!ZQ2$A} z+|ms6VNOKlE3SAp@PX5N1!>z`frdMW@c14^FQc_Z6Nx?tUk>0xGT6%ZkuYnJ{} zczhS3D=O%wib`2KioOE#(BQfT5lg-1xQ_RN*VAbEC_TOMm8z92B@YDm)(SNXhu_!C z<4Qw+-ygxc=EVg%JqHR#?L>+ zoC+R0W6N`X=ciQomV(lU?}b9_NCz@hFD!AXU##zU`r|-uzIjco01Qw)Lfj4EJ%uwH zuEPt#X9#)zQd+W>%Dftfbjv*22=L`$8o&wLREtCN-=TDW8U`~X0QLUw2}4Kqlx`Yk-W`-6|E{U$x2BXr)WLb}1>$}Lz7Tl>6FaVj@c*WQ z>*SFrY8S#u$rBwc+pLBBE&^GVZ)yYE2g^{<*)n^348FHO;y#guGm649qHhn zn+w@9hIJRkok?Nq{!KtxUJe(^;_qF}LkXS6yBn@>?LUOFu8AQS4PsLUJW_Q~J?R4#|I2@d_ zJl<7%4S|~uZ%p)@5BYcDMMaLHqJ1NzPk#u5Z@aZinfB3U^N9nmx1`XVQ^3tskz`Pb zTE!fR=kh*}V)NN0uVHR5URb@X{cjHCc5@U3Ba5dosp;J0uH@D;C78O@j4>^jgyecB zadIfno^;c+;*yfCvzC_5q~+n~{`5luAZp}Up*NaQsb3(gaT#MvowUG`b3uFgW9;m` zykHq{Iq`1&RKczQl=NjZ)o>McJgOJ7#0iE3V+kU|Rt>5sn``KwVVCuu3p z)Tnk;?CS^#yy~on0rQf17#?*-$r~9Xw)v&&3rl)ZFHX@9MQth0KSh!3q29MDBE1PB z+yYlmc@7(#LXX|OP?vZT(|zU=TBL})>Evjj$p_S3F^H;n`nE0h%Z^|r^SJ;8CgV)y zicIao<9QNC?(%BLE8PH!{LCeM?6^8P_-q?seJ|CWkP<3%F%})T8t~;THO-U}yjUj5 zjHdB@T9J9TU>DgRc_C{#WgiA!B(dJ#5Q)tOr(p9sj1eJoER4`GC_XVL7<2X6yKu=k z`soTu`?O$!z0YFG!tr_9p>dSQrereJISoC$5&6JM*W1syvW3p}eoQ8yZG-Y3!QSMI z9!lCNN+ghxz0VwLV--AW?F@2bL}@vR4SochA91hVO&HcanmKCKb?VmHiRK7G+P!9f zU~U|`HKgoQ1kGr}`7VfF>#RF~$cb-^#w zmou0%!Lv(s8=s@S-IPdf#6uyK4O26%PA|p~fqurBW&k_X$_YpFOoP%EdC?i> z)RK|FI11+ed%@K_ffL)#MGWph3d0ya9@TY+Cwe#cCHtftmr6U#?BM;bR^toA_qe_# z?L1obo^)RX`2c4itxv!C&M`Rpq+JRTKSR-4n@UdT|(9fof z1P!-~&AxLf1{XjFW>Yp?4PFep@>rEJ@OcOR=@DOHg7i{Wc;+eU4-#JPxhlo=Q#i!y z>&kAtrn~$bm_D)6e`1`rNW0jqfvIdJ#h&4n*oz9-}#Q25}cn4VBpIemre&22)Tj*w)a|Ib0qU0&m`u0gAq) zv_-c|&H3TSxwh=N(s$4DO?Vmlng)db6*ka?FkrjElG#-5Nbe*eW)@02t}(lY^oiZ; z{=x&gq^CzlFjWcRWfPKPvNTh$V41d;7Zt3LxwGVBXL1EUK-T)~e~ixO53Vn1#>882 zK4DzG@wvCzl%0tnWbj94FuhljvLiCAPv8dnrS<^o*}9O4bQ=?|*x0@uUcb}x`YF0^ z?npwzRbU^tKHhn{-tLdOF(~Bk(kK@~Gft` z@oDM1J58tFfvEbvS((mZe zH(A1nB}2w`PBM$!eLR4Ey|;{yFpCJJp*GW*i1BTFDU2)>@(?y! z!d4#4C?9{40;a@V3~RE=C7j`GmevbwX=#Osn=^PzKS`;l(E6Yiz#=ubihkJa71N7n zbak3d9^vVPAs&*!S^!iud$km9QJOY&T=BWuB-GSc?=}`WB4B%Yn~Zg^@&VqTD+KhOEx* zORG}Q`aD9J!n;i@v;d(--%etLczvm}JxbjB=#4_`0cUn{mmg@%bB3R0$kg6N1IVrNx+!Dx>~kblynF60at*v@f`5981vch!Pdg!vY03~r zG{3IzE-dvvmhS353c-@I3qh+gPo}bp@?)SmO=f-|g`bqsOp5vO)SS9oI%mYK>p4=I z(24XO6^{e-6m4_|?-O)bzX?r8inPCGs13u8Tdo_UPi9<)z__r|RZr?-_K8r=D>0|< zjrWhXbbw}W+B|5A&g6o&^?Jj!na$(OfL<@}3McNVGY0}E+zbA07~Q|0UK08wS#uGL zq@E%PA?_!LrqX7wCJnY^3FA`M1^aqZlUiXzhb`q3-_iWg4c9_s&wF!o`jY0e%}7dr zD2HOf8+07JXq<%VQrojE8%NM3+8YmsV{5*{G1>5U%9{n^&x(M{r>B3A?fES*jSq%= z%_iT)(c|d@$~Cm7Wt|+>BHY@fdw8u^OmWVE+!0By`1soRCOO2$0wmDQYh}eMOv%$> z!lM)6C1JsmjQRZWc`9>Y>((=U9~-Z$q+SMeYrcSQ{=0I!E2J9S2QPXs~Fn}U^vUSn-}y5#!&PLxJkz(tSs zbW?IN=OTib1NPw6^)=l@VvHLg{QXGA^q}V^(nH2l{rG%W@(r^6J@7WA+TmRTN4Sj}soO5p#~UeE%=p*EcV(Ru@k{`fMfMw^#;G_#om|6WuW1-yHX(cEC%*P10< z`o#Jj#b6nbXAasY`}zh>gL@5PV)^iLsiy>deb^=kcc$Ew+%+~FwbFZRnR_Uc)I6co zczH7A1mh3zMm`w9sXw%pXa)qVAHKl?W8`}UO-C7&r0wKR=bp|DoQ#{%6Lx97iFSI4VqXNe+^bGE-5MTO1VC zIH^c(2~&xgbaN}A3n7&1sDqSSxr{PyIk|NTX^b?Y3nG_c%*?a)c)qXK^TYF;*ZBh; zKlJM5vp;*Uz4lsb@6X!n{WfW|-|)p*Q>!*~{Bp;VKWLYtPSmdzv1rsT!`n^9uKjO? zQ@%h8z+RTn;D2)21v9v|U+%+*S@T-~RrX6lo089&h`7B|!aI!@wG)A#vinggCOh+}L;lZiI?LLXzn&RQy+s`elEtD6H51p^` z>EO=XzZvEluW z29u%4eaQ$0;5&fDij}6wwNMuS^Bvh{Z5x(!4okQa##TKHu#6Xlf^1Gd2>>)Zj%#@D zhRXdd@a_?PdW0~kgqLveCLpL@I11p?rOwO}s>nkQ99wR`s~jJ;KWwBmq1Dg&vF)xh zJoB^Q9iP-WYMAo7^y$IuvqHGW?Ig*4pW1A;O)JIW!c!#;ca*69IrYn9?(1ymc+wm; zO6kfu669Qt{3R`owLcNVZHJ3xo2buEe{l|dX;g;aJtee-aPdj+`!(8#>^%<;m<}{_ zg>0VT(r|t9-bK56-wv!kdGHE&_Z;oFnh2Ww=accL2PuiKP(9dscTiQ6zdn%BXx*1N zpig%bE}8w2J@RAeXV(Zzp9K6Ej}{K$U^SqBC;&wIMbCdJu#&7QpFFzImOoYsl3FOp zW}M&8@0yc^!99*K0?ts*wTfK{=!8w!oljcrR4HT&M{khx+Vm#i>^|R^_E)zeK-r20 zqI=NSPyF1LuoZO9)%}6ukG@cdH2y>IFkD_gB6>Ls3<<4}sLO5g!evToSPcH@h0|_m z>_tH(F1&+3p7f4yBXRZi7*903QHVmztD`oBiAk`rdut^?7>bLFb9E4m3BLJ`ynU6S z-39GA&VcX(A`EdXXW#7t3}nrmfYiD|`8;XvO_6;eOsYu@2>o2Yk^mV!vLr}cDyz+J z-O4>2$XqO*dp&AM^o3e6n_L~Crx2_%K-|0`mkzfX+e}kVUw)!gyP1Y!WOBLoV!r-d z4Xr?!g8>!BvO1`P-HKb4P<2$FylnFRpvcN5-d^o*CyAQW@9Gu!=M4iZ5m`NX*~BMz zy5B6doxQz2XeM}l)G?b2X>k`FL@hI|OYSOFOUX&{V3V)&!j1ChhqSwGf@Uat#?LFM zhQ>z^XTPNZ(D4N##`#&WBwRP=VDc1A@Pt3i5cX<$RWf3iCHFMku*seW0vABE79xj% z(tFd3_;^JP-_zuR8~N8E`dQbXSm9bRA1u0l?s9GJ2w zOna+C z*#NqOE?odn^Q&T%K0O0x{Z4o*uVEV7hpRq1lVq@z=u&aDpDFYx5E@@tdmXTrx>*1M zEnTaKdl3FGj94_#Ui)O<*ZZ(HK8mA8scH*>kp}>oru|ru#28P`9Epu~jvhaOBzkT&4DQn?A=IJBxbA5clR^jTTh^B|4x6yHid90~a=B^0 zG2r^)i3O252ZDOn28c@?qdbbu)W~1{i;C|GKh(_tYu^RqZHea(t5No^T@R|U-Ty7z zl^|!g@lefzbrchep# z0jTOMPtLpeIYOKnA1Plr1-^A)f`p+@leBqo{)2&E#-|4#XG+3#*t^0&FHObIM>M^6 zi`GOhY9MRx^=4XPxG0!S!@@Q7F++dcB+_j^sd949EJPB5wopB+uX!+#4BFS$zkp%!8$bvXtxaK2=9gZAA7k|11K909h0S^&uSGCeX030;^1qg%f zOaP3l@vQn=4yl1CVy=;~egDMk1#T;1`rH-?Z)72JJvPC>@jCvT|5lK?w?Fgiqv$H&@6 zqzX?+UJsuTWoeC3pYhmzRa;n;Sljh`j*d|KqMU$O3}g%t0ph`8;EAzoZ=cDmBuupL zk3gEK%UdFO=yfiKSZg%{LOX!gezNP@_;S|ldwr4WibecEYw%acPm#L_F!FU>1xM;nc z2_fb=fP=hg{+aP-*L=8+5Z%tH?Syxn*P>gGLxy-}elsZUkZrot+?b=l=bN_-@F3BN zwe3tCKr4tgj#Up|p6X;Yqx}nr9wh;7za-bI;5HvOE=Et?qQ}dchU}RN~p#UG1bl)|q1zv#e zB^q!W>qzvNubx1Bx>a8U**!2+?)p^wQSTz}ouFdo@5TAcCcCOXjUgc3g8QZd@!9xQ zSVbvC`DRN%uh|vMHCmnm)buM6r?!NS+xubd6zT*C0p*Pmx$I;;I$D_=DO|Ol9=Z>V&Q0ht3p8S@`kEWGVT0+v zNoHY0qC5Zf-YM!Ub&;nJOMuN>_25@_%>x}4#53o@pAz*ix>zm+I4kr(>zapSFqZya zuKymW_MyOW4qOUb`&6_45iq)3DzvedPGj-UdbADy#wH!>rj*ur8NY=}Li(0`@Vb;Q zPcc>ykaM;8d0FRa?D4A^-k6bHq7Xf{k=r=kN4;bWWrwvN=?=Y{jdpmzVyQ1R)ex?Q|YDhsv%3PIBmbv(3C>R7m=fu@N`Z$vAa@5 zX{bw@&}q(9RLPJZ{L>=?vUMJ%M=kJK=#P>GVj_LOA_>|K5#>$R`$DJtuWub@*_*qWg;v~4k2$1LAs$&X)@s=+@ z(mbeT+DDh=%V`iptq)|=HtHYuo1wAvru#+Ks*ThV5HCs=Jq;5xS0`I@Mw$<0)5-^F zD1YdQVpy%)8EG7m*rPQ)3!DPYhX%&t(N>g`_2D{Q?xI(ZvIg;~_@REM5Z$SO{qCilaau0a=(4i6Rej#W@TDbOVO$b$Hz5=~R0p7gc=(r?eL zFTyf6A^P&I&VXsttug@O(^f6jZa{#fa#}K?>u9^#nrAi>2PrSm0NJcIq&}w#OaM?! z3PP*GISM#u`4=SUu!QbQ)@ztv=qKj$XmF~L)^lA<;S`6|XWI7^R)!u#-=d5Mugy}> zAnM%W4n;p=_fF3VeImyy`$`uYxMV8GU5to}tECdO6tX5I7yv;_yfOJPq(wzj`r=V`q(_YmwkF*EQ|(@ zMfZX9cvR0U=4&XyBy6*GT>n{EQFFADR_5Ejql6cE193QaD;wnn;#+0pPR`^pD(|!N zgaHo)=u2;U7I9YV5)?Vu^R!`I3ER;)HcoQ3XGj(d*x4B%Ftb>7wWm>;G;@V-@-p|? zkCj%%?@v#$W@Lt0Otux00FxBI{_Q>HC9XB-7G1!vCiNTMs_(OdAc~#+m7sEECf~Al zbBs%wn}FNuIY_M)X)9*nQNBvzYQkh!{Zro}ZMTjs1sWPQ0bk2+(2T%<=aJNk139%S zneUX1D(VP6op-mAFO+ zE2cWEC3c=3vto63I=OqjhK~PG(pKI;<;Qj_1(DQ>_#N+8$thH(_3KHeeWU8|ve-_N z)9GBKkQ})yJ9lYp5D!qdEx$yHF4N{|3!wfRlc|yeX0WPHZ|Mhu)nmo_2JFuSmD694 zXSL^cz3*rM(U2tor5HMKFn%QrOY0tKq!$p*W^=Y1--|TLj;o0yA;sK<)1o_MSlOm> z3LT?U=Zd9S26D_iH%F`INsKyfWn#?El93F~jd!Ppe7Uv%namod)_Q4zaqgwKz%Y5H zwOKqtZ>jX{t+y?UlWyD2n>EsSACyk>CSGT8sWm^|pv3R3aWq;L+NPeLITJ6=x*Vgc z!nA(swQg8>@s{$I{t)>Ok6s5j4Lf$rCNxLRusgDtRGo>7IzPtud^BksGRrp`Px4Lo z-2n5#8aL{YH8I`S0ztN+nGS@MmA5{i?lT|Dc}HT-f4_;Ai#Ttre$cMVXD<#)8opr zgOI$@(sSDtB^9MEtZPoXHb1IGie7Kr-1SWKw7tCbjIJD$W1^jFta=H*+1@@}E;CRZ z?z+dRCr`w%1AEMxC6TPUdnGrQ+sdVO`E4id)s-^taHzWD&HtWf6~D5>t|P0P>NWXs ztckM%Ev80B%x3!-pSABt)(l51J!gK`O1m|;a`}f4%?}P2b%1B?oGag!=ksVK8 z?8K=|ogF>b*9XQ5di_8DMhM7&A#xx1`NwuJ{=aXBX7-=fq8I}z|a4#w12y(3$Fu(7xV=20Di!{|J5IL`M2#vy&{*#upIQyzZfP5>o-J3`A-vE d5WK%aKzrlz`In0B(w|V@b~cXIgz+}$05li(6akl-4Ey9Nmm+(`%)Adp~> zWb4^y@B5#3|M%{=_cBJ)t7}$$WwU10T0J0IQ(XZIog5ti0AML8%4*-g2mN@VBH#b+ z5r>T2zrnd`D@X&X#vgpV|3G7|sI3M7_%Piwg#iHHe=zR>0PY|F;FBo;Ae;#RkT_+x zYKh)2pgAe(y8-~5^gmv3UL_J9004fzjgFq1o|>w#In03*VgWOQa(X#9-E#u~qF%!H zmkv-j2#uG6y`!tJml)ko4&nRjA7m~%nx8Cgc4BmTYML}MFc&BdA15y-h)x`xhK5Ge z#llipTUP#8@%v9=bk=TePQqMVo}QkZo;;i|7b`AqAt50y5SR-L2HtZ3UA-OMAYMR6 zSNdN-e#4Q4x|+M#IJw!t9BF>wLd;<9ZenzFKNS7`^NXEsHkN;Aa&-OGt$PQ#eynhD zbAq`3PRz*~<_2@MhB^Ii<-f@OzWk2>P%oQ*(EDTMAH^)pe^=<_?qdHlC>G{iPIBD3>37=q3+rL7U&r+MgC0t6aVii7gmyy(R6`X+So(If0Q4MlAH`b zw-7%+5X^ax@wa?`iz5TGhq<=$~>QaX|K*cp5Oa0l-KNkM5^B)0z zSpByEKNtQAAjAF*>IQT1{!1QyB zxIm?>?i~`B`q6u6G=DpTX=G$*z#wj38WuH(xsBtGgPB#7>+b~raNv)f_zRz>HPli3 z9)usr4FZA$b+|#oJYZp7K6a3xFbMP;+E1>32C;E;b%QvXLw}99&3_#6Uu^i3_&@7_ znEyPD%w3=mH>kyLhW$$YtJvQc%Kzr6Ft>&{T0t$uxqfr*H^N`N`{BnwW{;Qq|AXv7 zc_4zkyyg}_K?^<}Ag{TA8Bj=22n;lbm_vB@p=J;>UcTR~{C|@@SBS^|wz(7d@08JR zsrsMDogfgz0|bL~xOs$m_=Nd*|GSk35&-iGLV0(e`23%=xc^&fQ%FeA zT)>=95XjBTBM9W><1q&ca&rp-Ed_-HxcNbreEfX>i)-_jUHq?8%Wsp=zfU=$zl=yq z|K9KaGtd4_{Ewpg75Y!Z+b{Rg7BKVsapLzX6^2?^@(TzG@&WnH1))H0?)%mR5#r?s zn%|FcP%|($$U^9TI`~D=pTPcI(JwV7|Knu%F}VHLw*dD&_x{FA81~;CGyf6h4;z0e z?H}6y)Lrj=;`}jM{ig@~U&Q|o{XV$Ajmm!?ZGItMFh8##2xuX|!}lZFLO=-Ak{1Xy zvoJU3Glzh=c?5n80zY*93G5GDzo+7laQ|sO{*iQHnV%z_?EP5xKN>{;!ucl+KUUQ4 zAGKIO+#tW9{8Ll?H{QSC{Imt;q6353|HHKXm!s%+vwju&3*P;0tc|7je`M7koWElH zQks8yrt>p!zfkX=7>T3b$M(0UPvYozY+dpI0N7edR!YYU?!X@0$~Nt5 z9`S-Ep9Ov1EQ(3q+{~=ASF}Tx1Bc+eZz9>67g;54M=UO2hcUgE!Inx-Qg%{_^i z11P0HmXs9PkGm>qCgfeGja{eexeP_`J>9fi@>`x<)D=8*9dn{Mf)i8&0lJlzci_%k zM30!InjQ(Tbyt0MZ|fMU{*b`w>2K9EZq)=a3|J_{$kPo-dTk6$biVXh`^yXv^Fp{aW0xBzF6V z;?4WCM+@JN#Jn|aS_yyU4@ZhOT4w)M3v0sk?274>?{i=xHLBmce+U&lGQF`VZb z-EFxJ+0&S zfV@r9n=SFZup@Ue0f%KfBC00E20ez8p^v<9txn(YsU;ZcL8H-D_<7C-&L#8?SPXs1 zz&!mnL#iH2yu^aI=lbvMUbpv?MT}X9_lk?H*QWrOx`BBC-(Ny^Mze}b!;G!>v17N_ zjT1Qoz7A2{WJOr27+1?Yn8H$;>>9SCi?CtR<8`hcU_Dffn#~x`wXIoiny$PP9dz^` zH2`mTGr|{5&xphPCt1$U%zYD#;a7P!FU|GzR?Gqs?$P@M`w)_GFK6jUzy0e^^u@uvo>t8G4%A~#|a?=y7idHTedG( z97sR%8<}8kA0me_<9ee!Pl!6#JwNQ2Y!>D=>VUTNVl@0;eI(XV0SU^Zn_RxNi%rjkvFg*CH0aX>gXF&e77+Zdc%v zNpTAV=Gl@GU;>J9jr=!7Up!Hv`E(>Rf5~ZmZin-@<+i-I|GTkosa(+7OOJ9?c({b1 zy?Dz&?Orm6u>Sl`mYMKedZ=SHYa9|!kMvm^7+)*{S~^c(kO&aY=M_h{3`p%&@EsVf zb{Zz@Y?^B`tio{MUpxw`=2>WaM55aopsNF2UU~<`qwz@?V-uEgi}_ZAdeX@huP$f$ z1kQ+7gkjK&SESFsFU-vsl&UC+_oCbranT<3B@(vy?MkPU6$+q{jFDNQ#7)z90!%lE z3e&KAwxn{Au4fFhsY8ua+tRCq$M`lS=*pJFI}f(ek3*p+l)=Nz6f%5(S0y3HI?clj zG>$>2KZn+zKT-_k2g4QSfy*~oApqWIbkqlPqUxn^({E0|xftYaK5_au}%#vVT)c6&aDodBk(E?-5BhqhPN1o>)cwm0P35~HC$bq_GcNQ-A>n^Axy3y1l zdA@y!8_BDs=o`g@;&k=wg7+${$>d&9Se)awGsT>!hbZ@~P7>i4 zaG0SpWkuD67D(daYc1|>XaNV@(}5#WWR^8x6J7pK>O*NUw6SqoiB47GY=iQ~kqgKb zVDV?UdoAuhxr{T8(`z}k585|G7{r};U)3S5T9)}F3>x84Ux0WofxMU9tqD{YVg?rm zw=?s$Lm@3`M?JOVkRQ$P6&9LP~a> zwi#uo8l#gdYZXFKA0quY;1#Wrk&#UoEiH9HXWUp?{P@E23*q^2!3K8z=m{Gg)IkH} z;%L*hOFNI+WkCo|~E#M^=?CHHV9!>O*nr`n%XhG2d}KTr2e|2U!tJ|?~M+kdt3xXCkS z_aZ$CWtcXe25Zks({bl{P~6LA{`1zpVVjn!*V`p7ue=c5g-H52eRvbg)SbYFR7KGU z7}9+ujfuX3ADW1ei2O94?7ud0)W zQv`c+l0IcmM;v!#@n-8ngym#ywwg(kXXUp(j3RR~C`ZCpu=kL>zM|BGtSyPmhITi_ z^xh#(zlm+6a_SAaM8wZKrHSb(tTH~4w9WR~FCV0WW?nlz`wrEftgC!(cru~X=?In{H3cYkW-cV{ho#1kA1`RUjWkuDj z_sY%$ zBIx(fFdC_AVbYOs>&yiRHxK34M6D6|OD}WaG?fzcTSvBArX3qNULEXts4Z{lUM6#Y zt=Ww%l;f>PML1!9u^Y8tx;4n3Ecu9l*0SivKMLg?*E~IM~rt z*9g4{g*w#`MyYJds0Z@%>{qNJL(3C%d)pxVZ{eHMA_~p7MP@)9+yK-l{vq@TQ~ExY zib+=y>=u)-r_4CxwBd9lg-7Q+b$xR#4;fF$66)W?3zoT*S+DSlYhSZiW@n;N zAV^Wrew^;miosjh5V2GvyeN$)i3}oW&B0>}Du3X`U+J(vMYZ~f1rG(;AMc6;Uo)^F zn`0CEB5##+?ar6T$BpfVRfla?#`;<%=9NRs3s)v~Wt_#H<@SxN>zTJU#63h>m!eaW zgzP1seHWC>wA5=kk|9MsAuGgeOf+Lh!3@m-eqm=q#m3Ss^8Q~6a71;qU`EdQ*~$>r zYKSPiiLyRK9P4x^ga3KqDi%UNquxZ|YbxK*_$yb0pPH)V3Z;1cEY^+T)vnT;6;F6m zY2qCG3!O3@NZnjKSoz;XdY}M+er&49aT^k!5FZeK5^j~-X+0=J>CwjA88jT-&`BG1 zVRuhcv23m@>~_%9uc}+9?||D4sKLQBfX}Df>s%q?z`ax2I9xF5Yu$6VHJmT7q=>J^ z=j9-m>Ef~^%GTbf3t$jOQ}51G-l*eL<}Q9`cQcAMWkxzQ3(=`2A!(1FeAr7M5~Jtv zq?Fpu+Pbr_>;Za&S_j0cQ@F-#Qs=1C;Zx%)ra7*WeFwuS-G~Im!UwKLo|aqDUYYJ` z_`PnW=uv85IIif0hq`#FDom0J_;uPFz0?>}TQhne5lUzRs9p?A%ceuM~8QRF6@mkPK2sDS& zi>=X0nW#CrVb$MwqN){ZnpT{ZDG6gy$2$68U}>kI(2cq8!J)PL@JllCik{4sL`5%) z_6r-;R%uTb$ieU*souuvXN%V7)<0 zWA3djHP=5!)B9csqR8*&dF0a({f689p-fltrS%D~B@5q+hUBzfJYsG1B|RN;yO0yq zPqW>|J(-C8!8MvbWH>K@GM0c;rfK1jP+0G2^97`11#o1eTME+Cr}L0Q_^Ac^xaHja$)Z*sM{p_nnGP&mNR+qJy#4W;r3>XML z;q?rMgymn{MWq=((ut=erx71u2V8uZR=9m1Z38cUt9??GiP0I&o&Omjo9LPmhaX)r z*rINC=DGG-L9(zN^ZO*JH%I0OSPzmSt1vL5;U*DZejD%=UF~)4kEr#Tc$Kbh$4MHr zsf({u-lO;7+F80d6KyOVm*%Z(Ptfg4$66WzISc7P;jjc*DjXZ87i73z$!LrRCMvd2K=HnG1U;5oZ>aofK3S*E?OFQaA!e$` z>lf_`*Ntz-q?wgkon0N;Nz=<;D?~=yC>akVq+A_Wqrn~b1r=_|&E(}vPE$$Vp&iC3 zch!Dp2U4bYBY!mHCs^DreQtxIHX+3D~vzu`Iqf zUV%X+>dm6h%{%nlX_wr*kWS$@v1rdc&zH);pP4sXy8jVXCDa7hg;FfBUT9`S*RQQ5pMm2*9Q=IlDX`QbQnqr?jwkm<) zdo;yi=2Y)rn{W{WpD2ynqK>u|0uIpYi)0)#Yt!@{Tt zZ8|HO+N;ux6J1J)i3rJoh>xz(O|MT-I)_=3Q&P6W&yfQyglxU*8yccdCnTsne4nQx zbC5Pue$nI?gNtxiY1!+<9WhoRciLNiwEAjnLLF@HVJBbB1jZGn7Wo_y;#)ef=}keh zJmj%1F!H#5TLVpjI|znYad<;6pX*CnUQqYgzS7z)Pq&B-jP_*ojeX zLdtd9^6Jl$60Kd!J6F6ObT@m4T>4^Qyl1< zYNW(JcRO9nvtP%KfVMufapw-HJDCVDPE(QDci^-o?S?#Bl?)Kn+jdpz6x9Q`@eNTv zC2f-EKV52Xs2tZX7w2La<>|;$woJ@yq0`U=lFUPhIn zlJP*Oy$5#Gg_wl%I)vbb-;>!H9_TVB%6Q*26CKat9D79E%dq(Z_ZQ&Ir3sURp#+bs9qopUEzI-rBILK$U z79rxj6|qxzmhyEAUZ{D)^u=NqqY0~{qvyC`2Un&#r42~vP{DHMSOakhIvwon;}J#K z<~iigvL=fLe}o(k7d~=Q&}ByFv;=sTtva4;dDV&eF`w2(XtT(_EAn~!6=o-*$|$;N zeSdb%2uRy>-aAU{djb~97TV%cXVk2?k|JUru9rP|DZJY?YWQvp;wMD7V*=zi&6ts1 zd1@yK3y=1cCRLtsqYD%yr)TG;G}gaZo9ihSvf&zlYpc2=TwiAwXLoOZH}9B*NT*%5 zYfLEA$kRk%=s_H=43*r{WM#-M4gjmKt#*R)zvEj%=`aK>tx^Of;M5ekrV@A=fJ)Ou zY7Xf{zQbkQ5%d|0`mIO?8a+uT4QG=6Wz`XmwS~w?NkOROxP#n?;k{jnIYBj0$&c_) zkrUv;r)9BgI^9>#4jA;4@QWF3*s8ys6@>CVnj#mwYb$PNoI1#jzj!G!OmQZbBlhge z9vLQ@E)0jK@6L28xA@loHEq@RT#ZPS_mA<$sNEk6Vr2+^^_UFa2)6lHBKP4i!i3f) zKJVpIvBL%8$T9v%GKZJJ>?mK5Tyr#+sO?yiilthe*d7ERk_TBU_1KV2k!}rCD2TGZ z7h_>jBo9utS)>k+z#Hgn=>Ar-N86*PC-LN2{cNMov;&H~K_nD=Hk9nTrh)9mqtO$H z%+7>V@KRHZMLotPK}cw*928o@!oiU`cxJUipFQtFCFfo0vJmg%6Z_n|qKKBH}SsS80N!i)E{%8@j zhdp}N*j)1@jEW;(Bu)@Afy=R)J9a#G)DjV2`^bE6yY($I$W;5;SvR}@5_YM&~w`m31oOVYrcRlP3S4% zaqEFGXsP&va+T{L-8N0p=Fz88=!S9z!}L=Rf;7lYYZ95~)a!eiQBO8<22YkdrIINT zZNG9VV~VZ=%<#S6sFQ4zGu6C(b;veKeL>tD{ZQMt?ZcW&YCTdsbMX5w^=5jiy#2{F$&`^C zm;Gawmb@4$@n?c)A0-e$uVSi{bvnj8+v5PpED@_gA6)OkdD$G+#Jw;x%{iP6W}?-R z4OOzAUrM0Q#qe{;wF~4iI!JBmzv#iXfpIUTWBEzYGxj5ALD!~-uf5&OR##sE+y_L2 z!{{o#P|`MAT8xjQO(WuF;?05XNPIg9IzpqKyd$4hu{S&#EC8nQy zKY+=G^7%rgd{s1)8Yw0WzHHL>#iKpVMSoy0?COAmAi5E^n9&Ln=j%2P&;LXh7`G;Y zFB{*ateT+Xd^19h6=7~b$Vm}ou#wqJRT28Y<_TQnG6ey>*thu_qa&9~+x1MIAkOm>WY_9?BHm|Rb2RJ#Utwnlh7X#Q*|rr@UfNUXM@ zLHEtg*Tsz~6)vKdmX=U3*+Up<#UU;M0X;FNA&dCsTBvy5-P0sN^qv)u?miMhBa9{d z0sJ|(Ztlak^>kQDBY`SWQ!rr>jd4U;5M$+20r7CmQh@mU!B>qn!OK%q!s8jnhiBBi z3ZL>C&ZATZqcELtiD@+k5#5wxB6o+L(JvPk&WcF0?g+_KMp70h8SCgU*xK0*bta?j z#j6xz%TjBeo^_p>wfYS7^(n!ij!$SYiz^EF_13HL1^scF)c^_iA%Tn5K%t!CK#)-E zp}?m*XXeT>L!<{<`(^YLIM9tL`M$*Z0taUiG2ql|=O|IqtFD*508-7z`|@!>cjut4}(Obj~fR}6G?S)W!< zzlTTaI$$#EtFH$xIgs}i`tX#J$`zX>P{C% zG=d)rhfH3zj%UAQEOh-MZ~%Ji#wv%xvLA7T(;X=bsOgxP zPZJC<>w-E6oyK3ZC-bmy%>ydg=8pr?RBl6LI?Y%4kal-|l-ZuCv!nh(bF z2rU9KtsZpXTLwgtGZRbs{W*1Y0s;a$=r(A#18MPF9-P=9JKN4~0;44P%6iFTd=6LP z9Ex}B>1xVx!WUh=EGI{6We9v~K1wR3D<554&65<-aT;bkzUslmHG%jvw4ah3$i)%9 zJ~1zC#-Sh{S4>D_WIg09-<_j~R$4>G2QNwnwQQueZ+L)CM@NS|lhR_6 zNFjKlW}@}@@vg%t;BIbaX0TT1!K4+WSaSVv*$j3QWng^}l2EuwK4@L+*R`{Xq&GDH_^V2m$^``_5*+4Hhl!SNF-<4Cg$u)aZey2mWzw zG&mv%eB&(bCfgfx;33>{>_?{!kD*B#w^s^VxGpX(vH<~aAKaM)-ng@l&#FpB+rC%9 z%d=^A_1qoL(LUL{6~l%rfBbrf{U!C~i~T&0?cuZ#a|z$uvyanI@_sT_uToq=M9$6N zhqew&VIwJmZ~17Ih|#+x;C)1qeU=ir1IXUWewUIBi&*}?!b2Iv9CN+NNkx?brxTi_ zcfiLS?rjVp3t4TclZF^3dM%bRC>Rhk%lQn0IGz1Au<0=PLDyb^m1W`^e502J=t*#j zEchF*%B%2~#72$Z*e`%vC>K3r2AY*0UtVq|_Nj2SGfY4Awj9l*rPO#-`Gir?uwJDf zO76}L9C=b>7OvOk0Td5h!_P4C$VvtDrVJab+c$e|#0*nAUu+^Ybd#H<2$pO-#taN% z-|QCKwd`}g-YUa(Prbsb`synxph0R<(q9xoJO~)g%dch+5BAnNs_~FrAleJmx zrHpPYYWP0)QvCM9h1?}euf)ZpsKxOSYCKlS-Xf}6W*4qo46Zjc<(HE(IMGNL#Hi|6 zAG2hhY8b%b*w5G7q%a7UAWl1xvT$;y`*fDSe#hJw-Ph+<&zsX@^;{+h4 zt||bYAPymBPuFF**zu!{lEDu+!spf1*7iCyEi-|^U<*BS^PXIbviMm&NR0g(eX&Ss8mkaF%dN;jbOkxk)lPehOx(cd80yp*_z%yjQ+=KFs^5Nk zRtLnM4+TACMa9W5Au7V!EyEU`e1#cHE}2@-B(-Q5QVG>?V0CcIIX$HEB^FFKL4C@u zsn>0ojL#U*Wcn->z7v=vH2DdOBbSTdSTUW??tRpR_?2qH!RM}2LJQ=tpM+d@qQ0H( zstk3yy}8WoE%DCSN7vQW4Vjh&W9(k4K7aO%4H)mbJD&EvUlG@2JtFiStWnw6I00vg6mjOGYR&cBT>%awr#%6B`Wh_>r3jT!@RHd0fC5n{~iN|wj% z338XWNZumiRUbr-A8*#le%Xp=)5AxZZO`OpUwd> zEH1j;ro12p$sS`Md#oVhB&LQbX-!gu=S5D0yLeq4+Me|1 zy41DSd))1Zz!o0^m?f4U0-a?I3pRZx4Ewtb0^3YO*vS{Wxet7o9OuNjqa{ACXpCNk z!>QsAqj%Ar8#wiR2nkcXqNuAg!ZPCYLwz^0&WpF=;V0N9+R* zZE=F1x$UzX0ib%21iE;&J{=^6s@@FATF2bF83~nEaKlci30|2%u14$o7Y3 z)EfYKZ$v}Tyy(NIDz&9{K{jwIAzgxz?lXN}Z0FVC;!&e$2Q(%>>#*`s1M79&0=SCMY`i5y&*WL0RO zVt}zBoX^ovlI8c1H{WSe8S~nm8=q)B^%Ru+fcKoT3^{LDq`|-O>6}mfH+wh0Mo=@2 zx^_W*y3-N0)7dce;gX(BgYfcq0;e^mBeAN$;{*FWvU5q zd7q1`&BI9c{Ys-tanY}o`4^8(pA1HvvXhGG@m%H!32m^omLQ~hrAoYIxbt(M9`VeG zE$7}bcPHXB0%e3=D(%I%Rc^lM@V_sm>`cOsL7eBp2}j@fwIs9QuQ}-y!r(^HFZ9a{ z9d81wDb8PQ^m|wx4liT3azlgBw&rBJ5NQ=PvD&&)9;WndoPODw6CFad2666qe1})y z!_|oKJN&$@b7VF7HKpL#y-1(%%4Y9`sQSP~xqi3&{tNVCS){HxGqKdS-u6OM7wc22 znWS20g&S_NN#x}t2gVL{Pq;)dG2XSXdkTGm&<{q&KBQ%U>lX+vsw_GB?ny8Zy*fHV zlC=|ER9eS-T;ec&zAn_-wNSx`6&Q)f%= z{~CkWc8k6lTsFDBRB_r@cqr)U(}80Nq4z}rsiyV|Y#jT>CrZ)v$7-D}Lc8C>{BS#P zd-70SNW(E+G&3>CCSB$g=8(_<#c_CRd#xztv*Glj%;3dkm@h@#LhPQ4YX2e_S%y^&k(OYO7`DOvE`7moTwYzIH1FEnQRa zz*qD;2LJPO*QRm}$j#ZQ+zc{K|vymdfVx%~yJ(L zaoy~l+1e{A4ta(C<&ge~iA*B5Jxlkno1%;+MAehS(hRoxaGCBAF<%rjyTQA7EiO!R zAsW#E@7!cb1#HLHmHCBMO=PdL({^sh<5X3HT1G~^N=sGR;5d!k7aPeuyq>-L_J}B! zv9(R~Yt zT_Y)(x7YKAnNxNyLz?_L>Ii-R!xEQ07lDe(b4L2!P`t}o4k2?%lXa5e77C?+iWpa$ zuhM6)G3Z14zSR^I(lDtOD}={*?O{Hh1WH$rkKe=$n#4FyD#7nD5veHBwcxy_VA`i& zR@X{=U6|e!vNx8qVQ%kvm5;^a`OKEqzga)s& z(YxIWx6L@6Q$=E#HxZv!&@4F>+Voo=ptm;&^4)0&A(UAn(E1;$ab`H@&f0Py6>_d! z-SAcB27Z3YOT}T+7y@{P+Bh7V_^zXv5vw_3j)Nn{T8#o#Q$xN}ShzijA;~l|aH2mg zctsdn6(3F>HQZ4uYcam273=+w2W}IlHk1HuF!md+q_rQskz?S%#iOkR>j1`_!C1I= zFV~bP!(~!t&6d)r4q6;-UuCB6Fp4(&`M#cZ)o`l5F|r(J-0)DA6(6|>=k5Viq_Seo zvj-_nb>2`$4Y!@JG_9rbdPMPs^Hr6`kXNF7@D=Q|g>M%oK(v%m^rH$_MtHUU_`YPnQ)0vmPei0TJ?X>IKp; zzptZ_7(xzB5GcS!0d4zZ#tH>mid*Lyaw=TW$oC_c#U#Xk$ZP-<3WoUvu_)1ky3iz=Va-6JW^O4$b2nk6I85!6?b#& z&Tk34U{P_wjrPH0YF&W+&DN5#YU<)va^@w!Yp4+#1l4%L&Wumo(&Y|-~NMxGLd zWskaR{8m||38^p?J2D^q424?*@350c;PG+K$mjXX6p~Y#Bs9f`xg82HOYdTGU%?V& zq0rI2YVtYR@IBWWV{UrJ4`4?3H;i`U`apXS-4@uVRD6>Ghe$ z3rWu;#MyR)4&~14*|S*2^#@|$F)}HBbKA@wmMBbqmqO|K&-2djD=t}p;@4#hNUHuD z2=;OME6|3j`1ib{DD9IbF)xp6Jg84G*J435X>kDY%O!S8n7_Z5hufKIWFMG>>W%C1 zt*Rl~+m9@74Z27v1uf4}D`GgCF!&jl_xdcdPiQE4{R9;1ASwp3Q8IBoR{Djeqw7iU zaGH+-aD2YYXQ-H%OfT0kvJ1CLyvr(vU4F_47`+j#B$b3rD6l0_6nB@cq%}0k4+wRm z+haSR^9QMi1daEIC`Wl2UVk7z7-Y5;&_!1LB8O0gjtMVEmGO49=wqAFawEdLj~de+ zLSHKCnxmntMEja-lpyel85jY@tZ~~*cJkTtcvQS8f@rZgJWcq5*EU^AnA*8An9W!j zdo@oSD2;qHM7}08$xB?CKKEJ+=E9wc{Kg`tmzzpgid37RH8hp4N@n2As Date: Sun, 8 Mar 2020 17:05:11 +0800 Subject: [PATCH 07/72] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E5=8D=A1?= =?UTF-8?q?=E9=80=9A=E6=B5=81=E6=B0=B4=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/TimestampPicker.vue | 44 ++++++++++++++++++++++++------ src/pages/Card.vue | 41 ++++++++++++++++++++++------ 2 files changed, 69 insertions(+), 16 deletions(-) diff --git a/src/components/TimestampPicker.vue b/src/components/TimestampPicker.vue index 67302e6..7ac4882 100644 --- a/src/components/TimestampPicker.vue +++ b/src/components/TimestampPicker.vue @@ -1,6 +1,6 @@ @@ -15,12 +15,45 @@ datetime: () => import('vue-datetime').then(k => k.Datetime) }, props: { - value: Number + value: Number, + // 选择类型 + // date 日期 ; datetime 日期时间 ; time 时间 => 原生属性 + useType: { + type: String, + default: 'datetime' + }, + // 显示类型 + // date 日期 ; datetime 日期时间 ; time 时间 + showType: { + type: String, + default: 'datetime' + } }, data () { return { date: new Date().toString(), - format: { + format: {} + } + }, + created () { + if (this.value) { + this.date = new Date(this.value).toISOString() + } + // 根据显示类型定义 format + if (this.showType === 'date'){ + this.format = { + year: 'numeric', + month: 'numeric', + day: 'numeric', + } + }else if (this.showType === 'time'){ + this.format = { + hour: 'numeric', + minute: '2-digit', + hour12: false + } + }else{ + this.format = { year: 'numeric', month: 'numeric', day: 'numeric', @@ -28,11 +61,6 @@ minute: '2-digit', hour12: false } - } - }, - created () { - if (this.value) { - this.date = new Date(this.value).toISOString() } }, watch: { diff --git a/src/pages/Card.vue b/src/pages/Card.vue index 5e95fbe..ab4fff6 100644 --- a/src/pages/Card.vue +++ b/src/pages/Card.vue @@ -18,28 +18,37 @@ .right {{ formatTimeNatural(item.time) }} li.empty(v-if='!card.detail.length') 暂无消费数据 li.prev-day - .hint {{ formatDateNatural(oldestDate) }}至今 总支出 {{ totalPayments.toFixed(2) }} - button(@click='loadPrevDay()' :class='{ loading: loading }') {{ loading ? '...' : '加载前一天' }} + .hint {{ formatDateNatural(oldestDate) }} 总支出 {{ totalPayments.toFixed(2) }} + button(@click='loadPrevDay()' :class='{ loading: loading }') {{ loading ? '...' : '查询前一天' }} + timestamp.time(v-model='oldestDate' :useType='useType' :showType='showType' ) + button(@click='loadOneDay()' :class='{ loading: loading }') {{ loading ? '...' : '查询' }} From 714aea4fa1b92fb117b9868d30d8e35d1847704d Mon Sep 17 00:00:00 2001 From: ZZJ Date: Sun, 8 Mar 2020 17:16:54 +0800 Subject: [PATCH 08/72] =?UTF-8?q?=E4=BF=AE=E6=94=B9banner=E7=9A=84?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Banner.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/Banner.vue b/src/components/Banner.vue index 473a38c..b8e33ba 100644 --- a/src/components/Banner.vue +++ b/src/components/Banner.vue @@ -36,8 +36,9 @@ methods: { async reload() { this.banner = await api.get('/api/banner') + console.log(this.banner) }, - async click({ hasUrl, bid }) { + async click({ hasUrl, id }) { if (hasUrl) { // iOS WebApp 端,需要用 location.href 赋值才能在 Safari 中打开,否则将会在 WebApp 中打开,导致无法返回 @@ -51,7 +52,7 @@ // https://blog.csdn.net/wgrzhuaq/article/details/7821725 else { let win = window.open('about:blank', '_blank') - let url = await api.put('/api/banner', { bid }) + let url = await api.put('/api/banner', { id }) // 由于 interceptor.js 的 hook,window.open 可能返回 null(小程序情况) // 此时,直接调用 window.open 来触发 hook 中的复制链接 From feefdde500dd132b6b30818feecf6c97cccede53 Mon Sep 17 00:00:00 2001 From: ZZJ Date: Mon, 23 Mar 2020 20:20:39 +0800 Subject: [PATCH 09/72] =?UTF-8?q?=E7=A9=BA=E6=95=99=E5=AE=A4=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Banner.vue | 1 - src/pages/Card.vue | 3 --- src/pages/Classroom.vue | 51 ++++++++++++++++++++++++++++++--------- 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/src/components/Banner.vue b/src/components/Banner.vue index b8e33ba..a8ec1da 100644 --- a/src/components/Banner.vue +++ b/src/components/Banner.vue @@ -36,7 +36,6 @@ methods: { async reload() { this.banner = await api.get('/api/banner') - console.log(this.banner) }, async click({ hasUrl, id }) { if (hasUrl) { diff --git a/src/pages/Card.vue b/src/pages/Card.vue index ab4fff6..730c624 100644 --- a/src/pages/Card.vue +++ b/src/pages/Card.vue @@ -5,9 +5,6 @@ button.info .title 卡余额 .content {{ card.info.balance }} - button.info - .title 电子钱包余额 - .content {{ card.info.eacc }} button.charge(@click="navigateToCharge()") 充值 ul.detail-list li(v-for='item in card.detail') diff --git a/src/pages/Classroom.vue b/src/pages/Classroom.vue index 61d3e5b..ebbe76b 100644 --- a/src/pages/Classroom.vue +++ b/src/pages/Classroom.vue @@ -6,18 +6,18 @@ .picker //- 校区切换器 .prev ‹ - .cur {{ campus[displayCampus].name }} + .cur {{campus[displayCampus].name}} .next › //- 教学楼切换器 .prev(@click='prevBuilding()') ‹ - .cur {{ building[displayBuilding].name }} + .cur {{building[displayBuilding].name}} .next(@click='nextBuilding()') › li .picker //- 学期切换器 .prev(@click='prevTerm()') ‹ - .cur(title='点击回到本学期' @click='displayTerm = currentTerm') {{ term[displayTerm].name }} + .cur(title='点击回到本学期' @click='displayTerm = currentTerm') {{term[displayTerm].name}} .next(@click='nextTerm()') › li .picker @@ -50,7 +50,7 @@ .top .left {{ item.name }} .right 座位数:{{ item.seatCount }} - li.empty(v-if='isInit') + li.empty(v-if='isInit') 点击按钮查询空教室哦~ li.empty(v-else-if='!classroom.length') 该时间段这栋楼没有空教室…… @@ -58,14 +58,32 @@ \ No newline at end of file + + diff --git a/src/pages/Classroom.vue b/src/pages/Classroom.vue index ebbe76b..e812d0a 100644 --- a/src/pages/Classroom.vue +++ b/src/pages/Classroom.vue @@ -51,7 +51,7 @@ .left {{ item.name }} .right 座位数:{{ item.seatCount }} li.empty(v-if='isInit') 点击按钮查询空教室哦~ - li.empty(v-else-if='!classroom.length') 该时间段这栋楼没有空教室…… + li.empty(v-if='!classroom.length && !isInit') 该时间段这栋楼没有空教室…… @@ -66,7 +66,7 @@ isInit: true, timelist:[ - { start:8, end:8 + 45/60 }, //第一节课 + { start:0, end:8 + 45/60 }, //第一节课 { start:8 + 45/60, end:9 + 35/60 }, //第二节课 { start:9 + 35/60, end:10 + 35/60 }, //第三节课 { start:10 + 35/60, end:11 + 25/60 }, //第四节课 @@ -80,7 +80,7 @@ { start:18 + 15/60, end:19 + 15/60 }, //第十一节课 { start:19 + 15/60, end:20 + 5/60 }, //第十二节课 - { start:20 + 5/60, end:20 + 55/60 }, //第十三节课 + { start:20 + 5/60, end:24 }, //第十三节课 ], @@ -191,15 +191,16 @@ }, async search() { this.classroom = await api.get('api/classroom', { - campusId: this.campus[this.displayCampus].id, - buildingId: this.building[this.displayBuilding].id, - termId: this.term[this.displayTerm].id, - startWeek: this.displayWeek, - endWeek: this.displayWeek, - dayOfWeek: this.displayDay, - startSequence: this.startSequence, - endSequence: this.endSequence - }) + campusId: this.campus[this.displayCampus].id, + buildingId: this.building[this.displayBuilding].id, + termId: this.term[this.displayTerm].id, + startWeek: this.displayWeek, + endWeek: this.displayWeek, + dayOfWeek: this.displayDay, + startSequence: this.startSequence, + endSequence: this.endSequence + }) + this.isInit = false } } } diff --git a/src/router.js b/src/router.js index aa16996..608a1cb 100755 --- a/src/router.js +++ b/src/router.js @@ -171,7 +171,7 @@ export default new Router({ }, { path: '/cet', - name: 'CET 查询', + name: 'CET 助手', component: CET }, { From ce5847e1d4593ba8d33633794fb0a4ad1279b2a2 Mon Sep 17 00:00:00 2001 From: ZZJ Date: Tue, 24 Mar 2020 17:53:28 +0800 Subject: [PATCH 12/72] =?UTF-8?q?CET=E8=80=83=E8=AF=95=E5=8A=A9=E6=89=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/CET.vue | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/pages/CET.vue b/src/pages/CET.vue index a4d5003..93a2715 100644 --- a/src/pages/CET.vue +++ b/src/pages/CET.vue @@ -4,13 +4,13 @@ a.hintTip 妈妈再也不会担心我忘记准考证啦~φ(≧ω≦*)♪ div.crad a.subtitle 准考证号: - input(v-model='cetform.examCode') + input(v-model="cetform.examCode" placeholder='请输入准考证号') div.location a.subtitle 考试地点: - input(v-model='cetform.location') + input(v-model="cetform.location" placeholder='请输入考试地点') div.time a.subtitle 时间: - timestamp.timestamp(v-model='cetform.examTime' :useType='useType' :showType='showType') + timestamp.timestamp(v-model="cetform.examTime" :useType="useType" :showType="showType") a.ddlTip(v-if='cetform.examTime') {{ displayTip }} a.display button(@click='save()') {{this.loading ? '...' : '保存'}} @@ -34,22 +34,44 @@ cetform:{ examCode:'', location:'', - examTime:'' + examTime:0 } } }, + // 👇这个用用法很高级,但是我不会 persist: { cet: 'herald-default-cet' }, async created() { + let cacheCET = JSON.parse(localStorage.getItem('herald-default-cet')) + + // 先去取一下缓存 + if(cacheCET){ + // 如果缓存存在则显示 + this.cetform = cacheCET + } + + // 再从后端获取与一下 const res = await api.get('/api/cet') - this.cetform = res + if(res !== '暂无记录'){ + this.cetform = res + // 缓存 CET 查询结果 + localStorage.setItem('herald-default-cet',JSON.stringify(this.cetform)) + }else{ + // 没有记录的提醒 + } }, methods:{ ...formatter, async save(){ this.loading = true - await api.post('api/cet',this.cetform); + try{ + await api.post('api/cet',this.cetform); + // 如果保存成功就缓存到本地 + localStorage.setItem('herald-default-cet',JSON.stringify(this.cetform)) + }catch(err){ + console.log(err) + } this.loading = false } }, From 582ddbcec9ddeeff66ee1d9d51965b17cfb25a7c Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Wed, 1 Apr 2020 23:51:13 +0800 Subject: [PATCH 13/72] =?UTF-8?q?=E5=89=A9=E4=B8=8B=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 9 +- src/components/Curriculum.vue | 956 ++++++++++++++++++-------------- src/components/Dashboard.vue | 6 +- src/manifest.json | 1 + src/pages/Classroom.vue | 6 +- src/pages/Grade.vue | 107 ++-- src/pages/lostAndFound/List.vue | 2 +- src/router.js | 10 +- 8 files changed, 623 insertions(+), 474 deletions(-) diff --git a/src/App.vue b/src/App.vue index 8c29df4..fada187 100644 --- a/src/App.vue +++ b/src/App.vue @@ -38,7 +38,8 @@ const store = new Vuex.Store({ token: "", pending: false, user: {}, - isLogin: false + isLogin: false, + appUrl:"" }, plugins: [vuexLocal.plugin], mutations: { @@ -126,7 +127,8 @@ export default { mouseX: 0, mouseY: 0, logoImg, - downloadImg + downloadImg, + appUrl:"heraldapp://tommy.seu.edu.cn", }; }, computed:{ @@ -140,7 +142,7 @@ export default { async created() { this.title = this.$route.name; this.isHome = this.$route.path === "/"; - + this.$store.state.appUrl =this.appUrl; // 请求计数,有请求正在处理则显示加载态 // 注意根据 Xhook 要求,before handler 参数个数必须是 1,after handler 参数个数必须是 2,不能省略 let requests = 0, @@ -267,6 +269,7 @@ export default { --color-error #ed3f1f --color-error-light #fa8070 --color-error-bg #ffe2de + --color-purple #9B51E0 -webkit-tap-highlight-color transparent font-size 13px color var(--color-text-regular) diff --git a/src/components/Curriculum.vue b/src/components/Curriculum.vue index 9383848..816a578 100644 --- a/src/components/Curriculum.vue +++ b/src/components/Curriculum.vue @@ -17,7 +17,7 @@ //- 星期切换器 .prev(v-if='type === "week"' @click='prevWeek()') ‹ - .cur(v-if='type === "week"' title='点击回到本周' @click='Math.min(this.maxWeek, Math.max(1, this.currentWeek))') 第 {{ displayWeek }} 周 + .cur(v-if='type === "week"' title='点击回到本周' @click='()=>{this.displayWeek=Math.min(this.maxWeek, Math.max(1, this.currentWeek))}') 第 {{ displayWeek }} 周 .next(v-if='type === "week"' @click='nextWeek()') › //- 周视图:课表格子 @@ -28,7 +28,11 @@ table.block-bg tr(v-for='_ in 13' v-if='fixedClasses.length') td(v-for='_ in weekdayCount') - .block(v-for='item in fixedClasses' v-if='item.dayOfWeek' :class='{ selected: item === selected }' :style='getBlockStyle(item)' @click='select(item)') + .normal-block(v-for='item in fixedNormalClasses' v-if='item.dayOfWeek' :class='{ selected: item === selected }' :style='getBlockStyle(item)' @click='select(item)') + .name {{ item.courseName }} + .teacher {{ item.teacherName }} + .place {{ item.location }} + .custom-block(v-for='item in fixedCustomClasses' v-if='item.dayOfWeek' :class='{ selected: item === selected }' :style='getBlockStyle(item)' @click='select(item)') .name {{ item.courseName }} .teacher {{ item.teacherName }} .place {{ item.location }} @@ -68,444 +72,570 @@ + diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index 19fcdbd..b7bffb4 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -19,7 +19,7 @@ .row item(v-if='isUndergraduate' :icon='iconSrtp' name='SRTP' :value='srtp && srtp.info.points' :is-stale='srtp && srtp.isStale' route='/srtp') - item(v-if='isStudent' :icon='iconGrade' :name='(isGraduate ? "成绩" : "总绩点")' :value='gpa && (gpa.gpa || gpa.score || "暂无")' :is-stale='gpa && gpa.isStale' route='/grade' :is-graduate='isGraduate') + item(v-if='isStudent' :icon='iconGrade' :name='(isGraduate ? "成绩" : "绩点估算")' :is-stale='true' route='/grade' :is-graduate='isGraduate') .row(v-if='!tidyMode') item(v-if='isUndergraduate' name='跑操' :value='pe && pe.count' :is-stale='pe && pe.isStale' route='/pe') @@ -47,9 +47,9 @@ .row(v-if='!tidyMode && user.admin && user.admin.publicity') item(name='轮播管理' route='/admin/banner' value='›') item(name='活动管理' route='/admin/activity' value='›') - + .row - item(name='通知' route='/notice' :value='curNotice && curNotice.title || "暂无通知"') + item(name='公告' route='/notice' :value='curNotice && curNotice.title || "暂无公告"') diff --git a/src/manifest.json b/src/manifest.json index 6e6198f..ad2cf41 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -9,6 +9,7 @@ "sizes": "192x192" } ], + "start_url": "/", "theme_color": "#ffffff", "background_color": "#eeeeee", diff --git a/src/pages/Classroom.vue b/src/pages/Classroom.vue index e812d0a..a49a0c9 100644 --- a/src/pages/Classroom.vue +++ b/src/pages/Classroom.vue @@ -6,18 +6,18 @@ .picker //- 校区切换器 .prev ‹ - .cur {{campus[displayCampus].name}} + .cur {{campus[displayCampus].name?campus[displayCampus].name:"---"}} .next › //- 教学楼切换器 .prev(@click='prevBuilding()') ‹ - .cur {{building[displayBuilding].name}} + .cur {{building[displayBuilding].name?building[displayBuilding].name:"---"}} .next(@click='nextBuilding()') › li .picker //- 学期切换器 .prev(@click='prevTerm()') ‹ - .cur(title='点击回到本学期' @click='displayTerm = currentTerm') {{term[displayTerm].name}} + .cur(title='点击回到本学期' @click='displayTerm = currentTerm') {{term[displayTerm].name?term[displayTerm].name:"---"}} .next(@click='nextTerm()') › li .picker diff --git a/src/pages/Grade.vue b/src/pages/Grade.vue index 8173186..4497fd3 100644 --- a/src/pages/Grade.vue +++ b/src/pages/Grade.vue @@ -3,13 +3,15 @@ .page div(v-if='gpa') ul.detail-list - li.info(v-if="!isGraduate") - .top - .tag 教务 - .left GPA {{ Number(gpa.gpa).toFixed(3) === 0.000 ? "教务处未公开" : Number(gpa.gpa).toFixed(3) || '暂无' }} - .bottom - .left 首修 {{ Number(gpa.gpaBeforeMakeup).toFixed(3) === 0.000 ? "暂无" : Number(gpa.gpaBeforeMakeup).toFixed(3) || '未计算' }} / 已获学分 {{ gpa.achievedCredits }} - .right 计算至 {{ lastCalculateSemester }} + li.info + .warning-tip 以下数据均由小猴偷米提供,仅供参考,与教务处无关,不具备法律效应,不能作为评奖评优、推免等参考依据。所有成绩相关数据以教务处网站查询结果为准。 + //- li.info(v-if="!isGraduate") + //- .top + //- .tag 教务 + //- .left GPA {{ Number(gpa.gpa).toFixed(3) === 0.000 ? "教务处未公开" : Number(gpa.gpa).toFixed(3) || '暂无' }} + //- .bottom + //- .left 首修 {{ Number(gpa.gpaBeforeMakeup).toFixed(3) === 0.000 ? "暂无" : Number(gpa.gpaBeforeMakeup).toFixed(3) || '未计算' }} / 已获学分 {{ gpa.achievedCredits }} + //- .right 计算至 {{ lastCalculateSemester }} li.info(v-if="!isGraduate && shouldShowDelta") .top @@ -33,15 +35,14 @@ .tag 均分 .left AVG {{ predictAVGWithMakeup() }} .right = {{ weighedScore().toFixed(2) }} ÷ {{ sumCredits() }} - .bottom .left 首修 {{ predictAVGWithoutMakeup() }} - li.info(v-if="!isGraduate") - .top - .tag 留学 - .left AVG {{ predictForeignAVGWithMakeup() }} - .right = {{ weighedForeignScore().toFixed(2) }} ÷ {{ sumCredits() }} + //- li.info(v-if="!isGraduate") + //- .top + //- .tag 留学 + //- .left AVG {{ predictForeignAVGWithMakeup() }} + //- .right = {{ weighedForeignScore().toFixed(2) }} ÷ {{ sumCredits() }} li.info(v-if="isGraduate") .top @@ -50,8 +51,9 @@ .left 规格化平均成绩 {{ gpa.score || '未计算' }} / 已获学分 {{ gpa.credits.total }} / 应修学分 {{ gpa.credits.required }} .right 教务处计算于 {{ formatTimeNatural(gpa.calculationTime) }} li.info - .top 以上绩点为小猴偷米使用《大学生手册》所提供的算法估算得出,仅供个人参考,不能作为评奖评优以及其他用途的凭据,准确绩点以教务处为准 - + .top + span 自定义课程成绩请前往 + a(:href="appUrl") 小猴偷米 App .check-list(v-if="!isGraduate" v-for='item in gpa.detail') .tip.filtered(:class="{ visible: hasFilteredCourse(item.semester) }") 学期局部估算不包含被后续学期重修覆盖的课程。 .section @@ -60,14 +62,14 @@ .select-all(@click='toggleSelectAllInSemester(item)') {{ hasSelectAllInSemester(item) ? '全不选' : '全选' }} //- 先放非选修,可以选择 - button.check-box.required(v-for='k in item.courses' v-if='!k.courseType' :class='{ disabled: !isSelected(k), bad: !k.isPassed, makeup: k.scoreType !== "首修" }' :style='{ opacity: k.equivalentScore / 100 }' @click='toggle(k)') + button.check-box.required(v-for='k in item.courses' v-if='k.courseType=="必修"' :class='{ disabled: !isSelected(k), bad: !k.isPassed, makeup: k.scoreType !== "首修" }' :style='{ opacity: k.score / 100 }' @click='toggle(k)') .name {{ k.courseName }}{{ k.scoreType !== '首修' ? ' (' + k.scoreType + ')' : '' }} - .grade {{ k.equivalentScore }}{{ k.score != k.equivalentScore ? ' (' + k.score + ')' : '' }} × {{ k.credit }} + .grade {{ k.score }} × {{ k.credit }} //- 然后放选修 - button.check-box.optional(v-for='k in item.courses' v-if='k.courseType' :class='{ disabled: true, bad: !k.isPassed, makeup: k.scoreType !== "首修" }') + button.check-box.optional(v-for='k in item.courses' v-if='k.courseType!="必修"' :class='{ disabled: !isSelected(k), bad: !k.isPassed, makeup: k.scoreType !== "首修" }' :style='{ opacity: k.score / 100 }' @click='toggle(k)') .name {{ k.courseName }}{{ k.scoreType !== '首修' ? '(' + k.scoreType + ')' : '' }} - .grade {{ k.equivalentScore }} ({{ k.courseType }} {{ k.credit }} 学分) + .grade {{ k.score }} ({{ k.courseType }} {{ k.credit }} 学分) ul.detail-list(v-if="isGraduate" v-for='item in gpa.detail') .section 第 {{ item.semester }} 学期 @@ -75,7 +77,7 @@ .info .name {{ k.courseName }} .grade {{ k.score }} ({{ k.scoreType + k.credit + '学分' }}) - .tube(:style='"width: " + k.equivalentScore + "%"') + .tube(:style='"width: " + k.score + "%"') + .wh_container >>> .wh_content_li { + color: #162947; + font-weight: bold; + } + + .wh_container >>> .wh_jiantou1 { + border-top: 2px solid #162947; + border-left: 2px solid #162947; + } + + .wh_container >>> .wh_jiantou2 { + border-top: 2px solid #162947; + border-right: 2px solid #162947; + } + + .wh_container >>> .wh_content_item>.wh_isMark { + cursor: default; + background-color: #00A4CA; + color: white; + } + + .wh_container >>> .wh_content_item .wh_isToday { + cursor: default; + background-color: white; + color: #211D48; + } + + .wh_container >>> .wh_content_item .wh_chose_day { + cursor: default; + background-color: white; + color: #211D48; + } + + .wh_container >>> .wh_content_item .restDay { + cursor: default; + background-color: white; + color: #cccccc; + } +} + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 18c48fd..7c5a4e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5979,6 +5979,11 @@ void-elements@^2.0.1: resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +vue-calendar-component@^2.8.2: + version "2.8.2" + resolved "https://registry.npm.taobao.org/vue-calendar-component/download/vue-calendar-component-2.8.2.tgz#8f60c05a72c8aacbdd224016f4e1a96664abd8aa" + integrity sha1-j2DAWnLIqsvdIkAW9OGpZmSr2Ko= + vue-component-persist@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/vue-component-persist/-/vue-component-persist-1.1.4.tgz#841beca030755ee509a5dbf26bdfa561e376d810" From 872ce17c1d16405d57302e2569217410c725b704 Mon Sep 17 00:00:00 2001 From: R_shrug <656598766@qq.com> Date: Sat, 4 Apr 2020 16:43:09 +0800 Subject: [PATCH 15/72] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E8=B7=91=E6=93=8D=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Pe.vue | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/pages/Pe.vue b/src/pages/Pe.vue index 43d41c9..8362f81 100644 --- a/src/pages/Pe.vue +++ b/src/pages/Pe.vue @@ -18,6 +18,7 @@ :sundayStart="true" :textTop="['日','一','二','三','四','五','六']" :markDateMore="RestDays" + v-on:changeMonth="changeDate" ) ul.detail-list li(v-for='item in pe.health') @@ -109,8 +110,8 @@ export default { nextWeek() { this.curDate += 1000 * 60 * 60 * 24 * 7; }, - getRestDay() { - let now = new Date(); + getRestDay(date) { + let now = new Date(date); let daysNumber = new Date( now.getFullYear(), now.getMonth() + 1, @@ -128,6 +129,9 @@ export default { } } return RestDay; + }, + changeDate(date) { + this.RestDays = this.getRestDay(date); } } }; @@ -196,11 +200,6 @@ ul.pe-list { color: #211d48; } - .wh_container >>> .wh_item_date:hover { - background-color: white; - color: #211D48; - } - .wh_container >>> .wh_other_dayhide { color: #cccccc; } @@ -237,12 +236,6 @@ ul.pe-list { border-right: 2px solid #162947; } - .wh_container >>> .wh_content_item>.wh_isMark { - cursor: default; - background-color: #00A4CA; - color: white; - } - .wh_container >>> .wh_content_item .wh_isToday { cursor: default; background-color: white; @@ -255,10 +248,21 @@ ul.pe-list { color: #211D48; } + .wh_container >>> .wh_item_date:hover { + background-color: white; + color: #211D48; + } + .wh_container >>> .wh_content_item .restDay { cursor: default; background-color: white; color: #cccccc; } + + .wh_container >>> .wh_content_item>.wh_isMark { + cursor: default; + background-color: #00A4CA; + color: white; + } } \ No newline at end of file From 649cbdd999f88845167a8084076198eeb752e6f6 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 5 Apr 2020 19:56:41 +0800 Subject: [PATCH 16/72] =?UTF-8?q?=E9=80=9A=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard.vue | 5 +- src/pages/Notification.vue | 186 +++++++++++++++++++++++++++++++++ src/pages/NotificationView.vue | 96 +++++++++++++++++ src/router.js | 12 +++ 4 files changed, 297 insertions(+), 2 deletions(-) create mode 100644 src/pages/Notification.vue create mode 100644 src/pages/NotificationView.vue diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index b7bffb4..4634535 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -19,7 +19,7 @@ .row item(v-if='isUndergraduate' :icon='iconSrtp' name='SRTP' :value='srtp && srtp.info.points' :is-stale='srtp && srtp.isStale' route='/srtp') - item(v-if='isStudent' :icon='iconGrade' :name='(isGraduate ? "成绩" : "绩点估算")' :is-stale='true' route='/grade' :is-graduate='isGraduate') + item(v-if='isStudent' :icon='iconGrade' :name='(isGraduate ? "成绩" : "绩点估算")' route='/grade' :is-graduate='isGraduate') .row(v-if='!tidyMode') item(v-if='isUndergraduate' name='跑操' :value='pe && pe.count' :is-stale='pe && pe.isStale' route='/pe') @@ -47,7 +47,8 @@ .row(v-if='!tidyMode && user.admin && user.admin.publicity') item(name='轮播管理' route='/admin/banner' value='›') item(name='活动管理' route='/admin/activity' value='›') - + .row + item(name='通知' route='/notification' ) .row item(name='公告' route='/notice' :value='curNotice && curNotice.title || "暂无公告"') diff --git a/src/pages/Notification.vue b/src/pages/Notification.vue new file mode 100644 index 0000000..9863e8a --- /dev/null +++ b/src/pages/Notification.vue @@ -0,0 +1,186 @@ + + + + \ No newline at end of file diff --git a/src/pages/NotificationView.vue b/src/pages/NotificationView.vue new file mode 100644 index 0000000..2986d2d --- /dev/null +++ b/src/pages/NotificationView.vue @@ -0,0 +1,96 @@ + + + diff --git a/src/router.js b/src/router.js index 7ad1e40..711b82e 100755 --- a/src/router.js +++ b/src/router.js @@ -31,6 +31,8 @@ import LostAndFoundDetail from '@/pages/lostAndFound/Detail' import TeamList from '@/pages/team/List' import TeamPublish from '@/pages/team/Publish' import CustomExam from '@/pages/CustomExam' +import Notification from '@/pages/Notification' +import NotificationView from '@/pages/NotificationView' Vue.use(Router) // 微信环境下,为隐藏前进后退按钮栏,设置 mode 为 abstract,实现完全不产生浏览器历史 @@ -204,6 +206,16 @@ export default new Router({ name: '自定义考试提醒', component: CustomExam }, + { + path: '/notification', + name: '通知', + component: Notification + }, + { + path: '/notification-view/:id', + name: '通知详情', + component: NotificationView + }, { path: '*', redirect: '/' From cf4752d8be0d2da6bcfb4275cdf975ef1e3bfd30 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 5 Apr 2020 20:22:07 +0800 Subject: [PATCH 17/72] =?UTF-8?q?=E9=80=9A=E7=9F=A5=E5=B7=B2=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard.vue | 2 ++ src/pages/NotificationView.vue | 33 +++++++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index 4634535..814895d 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -84,6 +84,7 @@ export default { library: null, notice: null, activities: null, + notification:null, curNoticeIndex: 0, downloadImg, logoutImg, @@ -115,6 +116,7 @@ export default { api.get("/api/srtp").then(res => (this.srtp = res)); api.get("/api/lecture").then(res => (this.lecture = res)); api.get("/api/library").then(res => (this.library = res)); + api.get("/api/notification").then(res => (this.notification = res)); api.get("/api/activity?pagesize=20").then(res => (this.activities = res)); api.get("/api/notice").then(res => { this.notice = res; diff --git a/src/pages/NotificationView.vue b/src/pages/NotificationView.vue index 2986d2d..237342e 100644 --- a/src/pages/NotificationView.vue +++ b/src/pages/NotificationView.vue @@ -2,7 +2,9 @@ .page.notificationview(v-if="data.title") .title - .title-text {{data.title}} + .title-row + .title-text {{data.title}} + button.title-read(@click="markRead()" v-if="!data.isRead") 我知道啦 .status .role {{`来自 ${data.role} ${data.publisher}`}} .time 发布于{{formatDateNatural(data.publishTime)}} @@ -31,20 +33,35 @@ export default { }, methods: { ...formatter, + async markRead() { + if (this.data.isRead) { + // return; + } + let res = await api.post("/api/notification/read", { + id: this.$route.params.id + }); + }, async load() { this.data = await api.get( `/api/notification?id=${this.$route.params.id}` ); - console.log(this.data); } } }; - diff --git a/src/router.js b/src/router.js index 711b82e..81bbe82 100755 --- a/src/router.js +++ b/src/router.js @@ -33,6 +33,7 @@ import TeamPublish from '@/pages/team/Publish' import CustomExam from '@/pages/CustomExam' import Notification from '@/pages/Notification' import NotificationView from '@/pages/NotificationView' +import Curriculum from '@/pages/Curriculum' Vue.use(Router) // 微信环境下,为隐藏前进后退按钮栏,设置 mode 为 abstract,实现完全不产生浏览器历史 @@ -211,6 +212,11 @@ export default new Router({ name: '通知', component: Notification }, + { + path: '/curriculum', + name: '课表', + component: Curriculum + }, { path: '/notification-view/:id', name: '通知详情', From f52a2e46014a51934adb39c87fde763ea0957465 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 19 Apr 2020 12:16:31 +0800 Subject: [PATCH 28/72] =?UTF-8?q?=E6=9A=82=E5=AD=98=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 1481 +++++++++++++++++++---------------- src/api.js | 2 + src/components/Login.vue | 194 ++--- src/components/SeuLogin.vue | 98 --- src/pages/CET.vue | 6 +- src/pages/Home.vue | 34 +- 6 files changed, 961 insertions(+), 854 deletions(-) delete mode 100644 src/components/SeuLogin.vue diff --git a/src/App.vue b/src/App.vue index fada187..a29c91b 100644 --- a/src/App.vue +++ b/src/App.vue @@ -3,7 +3,6 @@ .app-container //- base-page 为手机版底部界面,桌面版左侧栏 .base-page - seuLogin scrollView(v-if='isLogin') home(:user='user') login(v-else :loging='loging') @@ -17,7 +16,7 @@ .current {{ title }} scrollView.overlay-router(:scrollToTopKey='$route.path' :style='"--mouse-x: " + mouseX + "px; --mouse-y: " + mouseY + "px"') transition(name='page') - router-view(:user='user') + router-view(:user='user') \ No newline at end of file diff --git a/src/api.js b/src/api.js index b94fb9c..9d5a7ef 100755 --- a/src/api.js +++ b/src/api.js @@ -18,6 +18,7 @@ export default new Vue({ }, computed: { isLogin() { + return window.store.getters.isLogin }, token() { @@ -63,6 +64,7 @@ export default new Vue({ Vue.toasted.show('登录已失效,请重新登录') } window.store.commit('logout') + } else { //Vue.toasted.show('请求失败:' + reason) throw new Error(reason) diff --git a/src/components/Login.vue b/src/components/Login.vue index bed3dc4..b4c83cb 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -4,112 +4,130 @@ .live2d-container //- 仿 B 站,输密码闭眼睛 live2d(:force-state='false') + .tips 小猴偷米对接东南大学统一身份认证服务和网络与信息中心共享数据库,为您提供准确有效的数据查询服务与校园生活相关特色服务。 button.primary.disabled(v-if='loging') 正在登录… - button.primary(v-else, @click='login()') 点击进行统一身份验证 - .tips 小猴偷米使用业界公认标准加密你的所有隐私数据,使用只有你知道的统一身份认证密码和只有你的设备保存的会话标识符 (token) 作为数据解密的密钥。 - .Qtips 小猴偷米客服QQ:210784021 + button.primary(v-else, @click='login()') 统一身份认证 + + .Qtips + div 版权信息 2020 东南大学信使计划工作室 + a(href="https://www.beian.miit.gov.cn/") 苏 ICP 备10088665号 diff --git a/src/components/SeuLogin.vue b/src/components/SeuLogin.vue deleted file mode 100644 index 5eb06f2..0000000 --- a/src/components/SeuLogin.vue +++ /dev/null @@ -1,98 +0,0 @@ - - - diff --git a/src/pages/CET.vue b/src/pages/CET.vue index 93a2715..4a02663 100644 --- a/src/pages/CET.vue +++ b/src/pages/CET.vue @@ -43,7 +43,7 @@ cet: 'herald-default-cet' }, async created() { - let cacheCET = JSON.parse(localStorage.getItem('herald-default-cet')) + let cacheCET = this.$store.state.cetForm // 先去取一下缓存 if(cacheCET){ @@ -56,7 +56,7 @@ if(res !== '暂无记录'){ this.cetform = res // 缓存 CET 查询结果 - localStorage.setItem('herald-default-cet',JSON.stringify(this.cetform)) + this.$store.commit("setCet",this.cetform) }else{ // 没有记录的提醒 } @@ -68,7 +68,7 @@ try{ await api.post('api/cet',this.cetform); // 如果保存成功就缓存到本地 - localStorage.setItem('herald-default-cet',JSON.stringify(this.cetform)) + this.$store.commit("setCet",this.cetform) }catch(err){ console.log(err) } diff --git a/src/pages/Home.vue b/src/pages/Home.vue index 24a9207..3ab152f 100644 --- a/src/pages/Home.vue +++ b/src/pages/Home.vue @@ -8,17 +8,31 @@ \ No newline at end of file From 626846012d60f0c5b60a1ca37a58e80ab2356b99 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Mon, 4 May 2020 11:58:19 +0800 Subject: [PATCH 29/72] =?UTF-8?q?intro=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Intro.vue | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/pages/Intro.vue b/src/pages/Intro.vue index 848d00a..5f7bb46 100644 --- a/src/pages/Intro.vue +++ b/src/pages/Intro.vue @@ -6,13 +6,17 @@ .top .left 一卡通号 .right {{ user.cardnum }} + li + .top + .left 校区 + .right {{ dorm.campus }} li .top .left 宿舍 - .right(v-if='dorm && dorm.building') {{ dorm.campus }} {{ dorm.building }} {{ dorm.room }} {{ dorm.bed }}号床 + .right(v-if='dorm') {{ dorm.SSFJH }} .right(v-else) 暂未分配宿舍 .bottom - .left(v-if='dorm && dorm.building') 可到校园地图服务系统查看宿舍楼所在位置。 + .left(v-if='dorm') 可到校园地图服务系统查看宿舍楼所在位置。 .left(v-else) 待分配宿舍中,请留意班级群通知 From 075f1ee6936e9e86a600713b2a8b320be6f5baca Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Mon, 4 May 2020 12:26:10 +0800 Subject: [PATCH 30/72] bugfix --- src/components/Login.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Login.vue b/src/components/Login.vue index b4c83cb..3ccb714 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -111,7 +111,7 @@ export default { text-align: justify; width: 260px; position: absolute; - bottom: 10px; + bottom: 20px; color: #ccc; text-align: center; } From 9516ab5a27e945dbc6b90700244eb797d20363f1 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Mon, 4 May 2020 12:35:17 +0800 Subject: [PATCH 31/72] bugfix --- src/components/Login.vue | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/components/Login.vue b/src/components/Login.vue index 3ccb714..5a55afb 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -55,6 +55,8 @@ export default { .widget.login { align-items: center; position: absolute; + margin:0; + padding:0; width: 100%; min-height: 100%; display: flex; From edd76d87b960ea7dac3a90ca3e72efa14ea1c369 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Tue, 2 Jun 2020 22:17:18 +0800 Subject: [PATCH 32/72] =?UTF-8?q?=E5=A2=9E=E5=8A=A0auth?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/main.js b/src/main.js index 879c29d..d91fe48 100755 --- a/src/main.js +++ b/src/main.js @@ -38,6 +38,17 @@ if (window.navigator.standalone) { } Vue.config.productionTip = false +window.__global__ = { + store, + router +} +// 支持跨用户调试 +window.auth = (token) => { + store.commit("logout"); + store.commit('setToken', token) + window.location.reload() + return '身份已切换!' +} Vue.use(Toasted, { duration: 5000, From 61f610112e348deec7e6e0be1d60f6386f435501 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Tue, 2 Jun 2020 22:41:41 +0800 Subject: [PATCH 33/72] bugfix --- src/components/Dashboard.vue | 2 +- src/components/Login.vue | 1 + src/pages/Home.vue | 2 -- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index 814895d..d864485 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -141,7 +141,7 @@ export default { methods: { logout() { this.$store.commit("logout"); - window.location = `https://newids.seu.edu.cn/authserver/logout?goto=https://tommy.seu.edu.cn` + } }, computed: { diff --git a/src/components/Login.vue b/src/components/Login.vue index 5a55afb..b70033b 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -45,6 +45,7 @@ export default { params: this.$route.params, fullPath: this.$route.fullPath }); + window.location = `https://newids.seu.edu.cn/authserver/logout?goto=https://tommy.seu.edu.cn` this.loading = true; window.location = `https://newids.seu.edu.cn/authserver/login?goto=https://tommy.seu.edu.cn`; } diff --git a/src/pages/Home.vue b/src/pages/Home.vue index 3ab152f..1740b8b 100644 --- a/src/pages/Home.vue +++ b/src/pages/Home.vue @@ -25,8 +25,6 @@ export default { toutiao }, created() { - console.log(this.$store.state.hasUnfinishedRoute) - console.log(this.$store.state.unfinishedRoute) if (this.$store.state.hasUnfinishedRoute) { this.$router.push({ path: this.$store.state.unfinishedRoute.fullPath, From a186b307f1cbf7690212778e605f983cc049bffd Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Tue, 2 Jun 2020 22:58:36 +0800 Subject: [PATCH 34/72] bugfix --- src/App.vue | 29 +++++++++++++++-------------- src/main.js | 1 + 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/App.vue b/src/App.vue index a29c91b..b40bf56 100644 --- a/src/App.vue +++ b/src/App.vue @@ -199,20 +199,21 @@ export default { } } } - // else { - // let token = window.store.state.token; // 先从 Vuex 读取 token - // if (token) { - // // 更新 user 信息,同时用于检查登录态,若检查失败,应立即退出,允许用户重新登录 - // try { - // user = await api.get("/api/user"); - // user.admin = await api.get("/api/admin/admin"); - // this.$store.commit("setUser", user); - // } catch (e) { - // // this.$toasted.show("登录过期,请重新登录"); - // // this.$store.commit("logout"); - // } - // } - // } + else { + let token = window.store.state.token; // 先从 Vuex 读取 token + if (token) { + // 更新 user 信息,同时用于检查登录态,若检查失败,应立即退出,允许用户重新登录 + try { + let user = await api.get("/api/user"); + user.admin = await api.get("/api/admin/admin"); + this.$store.commit("setUser", user); + } catch (e) { + console.log(e.message); + this.$toasted.show("登录过期,请重新登录"); + this.$store.commit("logout"); + } + } + } }, mounted() { let el = this.$refs.page; diff --git a/src/main.js b/src/main.js index d91fe48..48f6634 100755 --- a/src/main.js +++ b/src/main.js @@ -46,6 +46,7 @@ window.__global__ = { window.auth = (token) => { store.commit("logout"); store.commit('setToken', token) + window.location.reload() return '身份已切换!' } From b4412c9184f328e5185bc8ae44734827f979caa3 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sat, 13 Jun 2020 11:22:24 +0800 Subject: [PATCH 35/72] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E8=BD=AE=E6=92=AD?= =?UTF-8?q?=E8=AF=A6=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Banner.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Banner.vue b/src/components/Banner.vue index a8ec1da..1c68644 100644 --- a/src/components/Banner.vue +++ b/src/components/Banner.vue @@ -42,7 +42,7 @@ // iOS WebApp 端,需要用 location.href 赋值才能在 Safari 中打开,否则将会在 WebApp 中打开,导致无法返回 if (window.__herald_env === 'webapp' || window.__herald_env === 'wx') { - window.location.href = await api.put('/api/banner', { bid }) + window.location.href = await api.put('/api/banner', { id }) } // 其他情况下,需要用 window.open 在新窗打开 From c7d759b7ff9a5b6ba4971f47e66f2bc7f5f6d151 Mon Sep 17 00:00:00 2001 From: R_shrug <656598766@qq.com> Date: Sat, 8 Aug 2020 10:14:15 +0800 Subject: [PATCH 36/72] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/NoticeView.vue | 296 ++++++++++++++++++------------------- src/pages/Notification.vue | 2 +- src/pages/admin/Notice.vue | 276 +++++++++++++++++----------------- 3 files changed, 287 insertions(+), 287 deletions(-) diff --git a/src/pages/NoticeView.vue b/src/pages/NoticeView.vue index d637a8b..f3294d0 100644 --- a/src/pages/NoticeView.vue +++ b/src/pages/NoticeView.vue @@ -1,148 +1,148 @@ - - - + + + diff --git a/src/pages/Notification.vue b/src/pages/Notification.vue index df6ce87..54aadf7 100644 --- a/src/pages/Notification.vue +++ b/src/pages/Notification.vue @@ -5,7 +5,7 @@ input.input(placeholder="输入标题搜索已加载通知" v-model="searchKey") .empty-hint(v-if="filteredNotification.length === 0") 列表空空如也~ .notification-list(v-if="filteredNotification.length > 0") - .notification-item(v-for="item in filteredNotification" :key="item.notificationId" @click="detail(item.notificationId)") + .notification-item(v-for="item in filteredNotification" :key="item.notificatioid" @click="detail(item.notificatioid)") .notification-title .notification-title-text {{item.title}} .notification-title-time {{formatDateNatural(item.publishTime)}} diff --git a/src/pages/admin/Notice.vue b/src/pages/admin/Notice.vue index 7cfb422..40947d8 100644 --- a/src/pages/admin/Notice.vue +++ b/src/pages/admin/Notice.vue @@ -1,138 +1,138 @@ - - - + + + From d5a1dcb0d0342cf18bb41d53f1dee6cecd2f5fc2 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sat, 8 Aug 2020 10:19:49 +0800 Subject: [PATCH 37/72] bugfix --- src/components/Login.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Login.vue b/src/components/Login.vue index b70033b..eff2e36 100644 --- a/src/components/Login.vue +++ b/src/components/Login.vue @@ -2,7 +2,7 @@ .widget.login .live2d-container - //- 仿 B 站,输密码闭眼睛 + //live2d注入 live2d(:force-state='false') .tips 小猴偷米对接东南大学统一身份认证服务和网络与信息中心共享数据库,为您提供准确有效的数据查询服务与校园生活相关特色服务。 button.primary.disabled(v-if='loging') 正在登录… From c9158b62e741fce1d285b3eb425d746f09de2b09 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sat, 8 Aug 2020 10:22:43 +0800 Subject: [PATCH 38/72] bugfix --- src/pages/Notice.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Notice.vue b/src/pages/Notice.vue index af898ce..5fd5fc8 100644 --- a/src/pages/Notice.vue +++ b/src/pages/Notice.vue @@ -92,7 +92,7 @@ return '#/notice/competition/' + notice.srtpId } if (notice.nid != null) { - return '#/notice/' + notice.nid + return '#/notice/' + notice.id } return '#/notice/url/' + encodeURIComponent(notice.url) } From ce9c5f8b9c702ebbade1490e3881dfef6150c479 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sat, 8 Aug 2020 10:25:16 +0800 Subject: [PATCH 39/72] bugfix --- src/pages/Notice.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Notice.vue b/src/pages/Notice.vue index 5fd5fc8..fe5b6aa 100644 --- a/src/pages/Notice.vue +++ b/src/pages/Notice.vue @@ -91,7 +91,7 @@ if (notice.site === 'SRTP') { return '#/notice/competition/' + notice.srtpId } - if (notice.nid != null) { + if (notice.id != null) { return '#/notice/' + notice.id } return '#/notice/url/' + encodeURIComponent(notice.url) From d41904a480f03d0ff7a2bf1ef3e155bb799687bb Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sat, 8 Aug 2020 10:29:31 +0800 Subject: [PATCH 40/72] bugfix --- src/components/TouTiao.vue | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/TouTiao.vue b/src/components/TouTiao.vue index be58a2f..a356eb0 100644 --- a/src/components/TouTiao.vue +++ b/src/components/TouTiao.vue @@ -13,7 +13,7 @@ export default { data() { return { notice: false, - nid: 0 + id: 0 }; }, created() { @@ -21,14 +21,14 @@ export default { notice.forEach(k => { if (k.site === "小猴偷米") { this.notice = k.title; - this.nid = k.nid; + this.id = k.id; } }); }); }, methods: { showNotice(){ - this.$router.push('/notice/' + this.nid) + this.$router.push('/notice/' + this.id) } } }; From a4ddbe800eafe15fca5d81221d1f84954454b892 Mon Sep 17 00:00:00 2001 From: R_shrug <656598766@qq.com> Date: Sat, 8 Aug 2020 10:38:54 +0800 Subject: [PATCH 41/72] bugfix --- src/components/TouTiao.vue | 112 ++++++++++---------- src/pages/Notice.vue | 202 ++++++++++++++++++------------------- src/router.js | 2 +- 3 files changed, 158 insertions(+), 158 deletions(-) diff --git a/src/components/TouTiao.vue b/src/components/TouTiao.vue index be58a2f..4e97ca5 100644 --- a/src/components/TouTiao.vue +++ b/src/components/TouTiao.vue @@ -1,56 +1,56 @@ - - - + + + diff --git a/src/pages/Notice.vue b/src/pages/Notice.vue index af898ce..f0cb050 100644 --- a/src/pages/Notice.vue +++ b/src/pages/Notice.vue @@ -1,102 +1,102 @@ - - \ No newline at end of file diff --git a/src/router.js b/src/router.js index 81bbe82..b95c5ee 100755 --- a/src/router.js +++ b/src/router.js @@ -98,7 +98,7 @@ export default new Router({ component: NoticeView }, { - path: '/notice/:nid', + path: '/notice/:id', name: '公告', component: NoticeView }, From 9ab0dc83929e932d08d66f922d2d43ff83464c55 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sat, 8 Aug 2020 10:39:36 +0800 Subject: [PATCH 42/72] bugfix --- src/router.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/router.js b/src/router.js index 81bbe82..b95c5ee 100755 --- a/src/router.js +++ b/src/router.js @@ -98,7 +98,7 @@ export default new Router({ component: NoticeView }, { - path: '/notice/:nid', + path: '/notice/:id', name: '公告', component: NoticeView }, From 1ff87bcb6ac8d9d7e0704ebd29fdc54429e8d965 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 9 Aug 2020 10:15:14 +0800 Subject: [PATCH 43/72] =?UTF-8?q?app=E9=93=BE=E6=8E=A5=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Download.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Download.vue b/src/pages/Download.vue index 3a68b1e..98f6ed3 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -5,7 +5,7 @@ img.qr(:src='qrcodeImg') .buttons p 下载 App: - a(href='https://hybrid.myseu.cn/herald-new-app-10.apk' target='_blank') + a(href='https://hybrid.myseu.cn/herald-new-app-4.apk' target='_blank') button 新版本 Android From d1ab8241ce03ebc302e7a7fa96a03987db36e3ff Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 9 Aug 2020 10:59:16 +0800 Subject: [PATCH 44/72] =?UTF-8?q?app=E7=89=88=E6=9C=AC=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Download.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/pages/Download.vue b/src/pages/Download.vue index 98f6ed3..92e5dd0 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -5,9 +5,9 @@ img.qr(:src='qrcodeImg') .buttons p 下载 App: - a(href='https://hybrid.myseu.cn/herald-new-app-4.apk' target='_blank') + a(href='https://hybrid.myseu.cn/herald-new-app-4.apk' target='_blank' v-if='url') button 新版本 Android - + button(v-else) 稍等片刻~ From 5870934079ef2bc30f18984afb1846f6def51915 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 9 Aug 2020 11:03:17 +0800 Subject: [PATCH 45/72] a --- src/pages/Download.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/pages/Download.vue b/src/pages/Download.vue index 92e5dd0..707140d 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -18,6 +18,7 @@ return { qrcodeImg,url:"" } }, async created() { + console.log("get version") let res = await api.get("/api/version"); this.url = res.data.downloadUrl; } From 5335f301d8ec4faf74a6a9a5938c3b8830328423 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 9 Aug 2020 11:04:26 +0800 Subject: [PATCH 46/72] bugfix --- src/pages/Download.vue | 93 ++++++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/src/pages/Download.vue b/src/pages/Download.vue index 707140d..dcf2179 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -11,57 +11,62 @@ From de46791c88d8d193d1d30001c9c284e55d299a98 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Sun, 9 Aug 2020 11:09:07 +0800 Subject: [PATCH 47/72] bugfix --- src/pages/Download.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pages/Download.vue b/src/pages/Download.vue index dcf2179..ed24674 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -5,7 +5,7 @@ img.qr(:src='qrcodeImg') .buttons p 下载 App: - a(href='https://hybrid.myseu.cn/herald-new-app-4.apk' target='_blank' v-if='url') + a(:href='url' target='_blank' v-if='url') button 新版本 Android button(v-else) 稍等片刻~ @@ -19,7 +19,7 @@ export default { }, async created() { let res = await api.get("/api/version"); - this.url = res.data.downloadUrl; + this.url = res.downloadUrl; } }; From f6a9448a62459bd7eb0e73b03671cf6d2caddef9 Mon Sep 17 00:00:00 2001 From: HHHKKKHHH <1790733272@qq.com> Date: Thu, 13 Aug 2020 17:36:04 +0800 Subject: [PATCH 48/72] bugfix --- src/components/TouTiao.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/TouTiao.vue b/src/components/TouTiao.vue index a356eb0..0bbbc1f 100644 --- a/src/components/TouTiao.vue +++ b/src/components/TouTiao.vue @@ -19,7 +19,7 @@ export default { created() { api.get("/api/notice").then(notice => { notice.forEach(k => { - if (k.site === "小猴偷米") { + if (k.site === "小猴偷米"&&k.isRead) { this.notice = k.title; this.id = k.id; } From 15b8581447125437d1959ca4986a00468127e4ad Mon Sep 17 00:00:00 2001 From: R-shrug <213183580@seu.edu.cn> Date: Tue, 6 Oct 2020 16:02:49 +0800 Subject: [PATCH 49/72] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E7=AB=AF=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 85 +++++++++++++++++++----------------- src/components/Dashboard.vue | 6 +-- 2 files changed, 47 insertions(+), 44 deletions(-) diff --git a/src/App.vue b/src/App.vue index b40bf56..313ba6e 100644 --- a/src/App.vue +++ b/src/App.vue @@ -1,22 +1,25 @@ @@ -634,7 +637,7 @@ img:not([src]), img[src=''] { } .spacing { - flex: 1 1 0; + flex: 1 1 0%; } img.download { @@ -662,7 +665,7 @@ img:not([src]), img[src=''] { } .overlay-page { - flex: 1 1 0; + flex: 1 1 0%; overflow: hidden; margin-left: -15px; background: var(--color-divider); @@ -706,7 +709,7 @@ img:not([src]), img[src=''] { display: flex; flex-direction: row; align-items: center; - flex: 1 1 0; + flex: 1 1 0%; .back { display: block; @@ -724,7 +727,7 @@ img:not([src]), img[src=''] { } .current { - flex: 1 1 0; + flex: 1 1 0%; font-size: 15px; font-weight: bold; color: var(--color-text-bold); @@ -735,7 +738,7 @@ img:not([src]), img[src=''] { } .overlay-router { - flex: 1 1 0; + flex: 1 1 0%; position: relative; .scroll-content > * { diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index d864485..cf09e89 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -40,13 +40,13 @@ //- item(name='App' route='/download' value='›') .row(v-if='!tidyMode && user.admin && user.admin.maintenance') - item(name='系统概况' route='/admin/monitor' value='›') - item(name='权限管理' route='/admin/privilege' value='›') + //- item(name='系统概况' route='/admin/monitor' value='›') + //- item(name='权限管理' route='/admin/privilege' value='›') item(name='通知管理' route='/admin/notice' value='›') .row(v-if='!tidyMode && user.admin && user.admin.publicity') item(name='轮播管理' route='/admin/banner' value='›') - item(name='活动管理' route='/admin/activity' value='›') + //- item(name='活动管理' route='/admin/activity' value='›') .row item(name='通知' route='/notification' ) .row From e45c5f2928faadb5a3f012994702bfb094f4b0fb Mon Sep 17 00:00:00 2001 From: R-shrug <213183580@seu.edu.cn> Date: Tue, 6 Oct 2020 17:23:51 +0800 Subject: [PATCH 50/72] =?UTF-8?q?noob=E8=81=94=E6=83=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/App.vue b/src/App.vue index 313ba6e..424a8fe 100644 --- a/src/App.vue +++ b/src/App.vue @@ -83,7 +83,6 @@ import login from "@/components/Login.vue"; import logoImg from "static/images/logo.png"; import downloadImg from "static/images/download.png"; import qs from "querystring"; -import { use } from "vue/types/umd"; function getOffsetTop(obj) { let tmp = obj.offsetTop - obj.scrollTop; From 8b9de6bd14f558e9e54e63ef7e0c776cb383690f Mon Sep 17 00:00:00 2001 From: R-shrug <213183580@seu.edu.cn> Date: Tue, 6 Oct 2020 17:48:19 +0800 Subject: [PATCH 51/72] =?UTF-8?q?=E6=94=B9=E6=9D=83=E9=99=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard.vue | 185 +++++++++++++++++++++-------------- 1 file changed, 112 insertions(+), 73 deletions(-) diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index cf09e89..be9f2f1 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -1,57 +1,102 @@ @@ -210,7 +249,7 @@ export default { .identity { font-size: 12px; - flex: 1 1 0; + flex: 1 1 0%; white-space: nowrap; color: var(--color-text-secondary); @@ -252,7 +291,7 @@ export default { flex-direction: row; > * { - flex: 1 1 0; + flex: 1 1 0%; } } } @@ -267,7 +306,7 @@ export default { .subtitle { font-size: 12px; color: var(--color-text-secondary); - flex: 1 1 0; + flex: 1 1 0%; } .function { From a5943a6fc063634840956e485b74404cbff36a5b Mon Sep 17 00:00:00 2001 From: kaihong Huang Date: Thu, 5 Nov 2020 19:09:40 +0800 Subject: [PATCH 52/72] =?UTF-8?q?=E5=BC=95=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Dashboard.vue | 6 ++++++ src/pages/Download.vue | 25 ++++++++++++++++--------- static/images/App2.png | Bin 0 -> 27215 bytes 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 static/images/App2.png diff --git a/src/components/Dashboard.vue b/src/components/Dashboard.vue index be9f2f1..092e5a6 100644 --- a/src/components/Dashboard.vue +++ b/src/components/Dashboard.vue @@ -14,6 +14,12 @@ transition-group.widget.dashboard(name="fade") banner(key="banner", v-show="!tidyMode") .dashboard-container.border-top(key="dashboard", v-if="user") + .row( + v-if="!tidyMode" + ) + //- item(name='系统概况' route='/admin/monitor' value='›') + //- item(name='权限管理' route='/admin/privilege' value='›') + item(name="还没拥有新版小猴 App ?快来尝试下吧~", route="/download", value="›") .row item( :icon="iconCard", diff --git a/src/pages/Download.vue b/src/pages/Download.vue index ed24674..ea089d3 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -1,25 +1,25 @@ @@ -65,8 +65,15 @@ export default { width: 100%; height: auto; filter: hue-rotate(-15deg); - max-width: 500px; - margin: 0 auto; + max-width: 300px; + margin: 50px auto; + } + img.app { + width: 100%; + height: auto; + filter: hue-rotate(-15deg); + max-width: 400px; + margin: 20px auto; } } diff --git a/static/images/App2.png b/static/images/App2.png new file mode 100644 index 0000000000000000000000000000000000000000..aaf63593cfdf33fbc9d7bd5ffb63f27fe9853401 GIT binary patch literal 27215 zcmd42by!?o(l3e!4GxXFL!fbYm*5t(>2BPD2M-n;f;b4+uA|N2(s3^^gxCgBj+{VsXg8s0zlb+TNCP8l~puwZzDhIc-s*{gZer^MPT$& zlC!JusRZ%vw}OUh&Vd zfNv7?wjLg?qTJlx-rkSA`5w8r*>HnJL`1lGc)59bxc~|-_h-%?5FajQcZR=lkcYcN z-RxXF>|C5_?>R!OTs%D_=mAOpP{GOdFSgF^f0_v}7`G3^l^gts=U%1Xgs!$O9xm>- zF8_x7ugCxN5)Aqmb5~C{$KMjepxkgrxD(vj!yTXn|1|($S`CfA$p57*PELPOyL%{j z0c!kdkbg<-uJ_Cp&aDG?cky(C!WF!L5gGobjk|{q{O|VsFJ1@8|9aWO&idcHd;jF0 z3;_4B`!}TbPyQlx6_s;?Lp)sE^jusV{}wx1f3rBPoE$By1_Wy7eD49adma9K0WJ^m zfJ@Nd2ND+#mC2*R09Z27{mkeH)39%dtzQ5Jsu%Zei2cg ze+1&%;427%6OV9(lKC-ieiSqJ5 z`M?5D0WMw$T#$=j(29>s*jiA83oZl)L-@c@UYOt?>H_b}yFfkf1ML3&KPD*51q$%^ zyKvUlFn*{o@H)RBScppq$`9v)0JEG6#v>qNB_eDkC3nkb^t~|9RHE)y;LxO zBOkvNKZKWuhYKRi1LNX{!-cp+;QV0VLxdm3BPav~^rff04+~L%4ImQaej-ZH0|xkg z)95}t9XW2bdoi?e{$`J0G~C zk-QyX8~5L02!j9Vk?}t~0t@ioL&)Dv_BZuq0LQokq3Zr8M9D&I{=9Oull<4#7O}Dt z^n=K6<--2byKzwt*@+3sGqXMake3xE2T zJhZq5n()B^)hDI_Yu^S`RmKSB2&X83QEfx0+* z!QK8L#9Se65TMF{ySYoyTf4b9(L!8Z9qpjM5rx~!8TM!L{wvC9JzQx24z2&zXfU{& z-9H4vKaTR32(MGA9j3TE{HV{g(3oc0z5Dv2k`Sl|8H^9 ze^lnbOI!auhyHDT{$H3wBL9Q||9TGn#>PJ&j{E&ncKh?R z?9H#S>@1ov0W>tmw)5llz33gEYM~HJEL7yr260jU5Kf@LWYakNLVUvHH{^sQhv~w zP%}u%b~li=F=)cDV?@D}i;|1d6ksxstVw-tMvITsS%%wksYj*#x{$G?B1IbMCAHY+ z)~juX+c(TsusYQb2;!K&x29&twHGxR-$!oqnyiE4pV%uy~tP^hU4nO(QlO zQ=Z|=D_3f}{s=tieN?gvCS_$RzjS#RwQ{pGR8rkB^{YU0TrDZiKpQE=h}GO4!~a+3 zvU4C@O=)I5<*|o#KV|x|?Pt+|vb_?)JW<=fTyCH?yPXsR`6u$4$wnB7b5BRZVuOmmPmj z9q$&D`jswmoHo6 zBMp+Hg`V7+JN!8zpBY8Hg z6A8Wt3?hc!ud#@intVmA&9G>J7rxcMzF)uYe5V#l+Q@=M*JgPut@XO8RKiC?F3NL| zjQAWkNBGn40U{on^4Z;o{07*XCyj`v|TTP(GE?bW{kyP6RAu0?eSQ`fY zOe34>JSto{wXo$G&~2mV{lmak^3h-pCLrNXpS_CjsIL?gU(Qqn2k>rTqdSN?5~$1& ze82_;M-I^HItRVP;Xmjmx#_GM$o4jmb9b-FKs8?Il#RvsjS!%xA{0@0w%AP$e)9o` zUU1DwME{0D-6CT`D{03wh7VbI$QJ@JTO+<70nl9DO^AP|Gg0gy19tk2%|sLok7H+< zLOKr)n<4vj%jxm~T0dr3yPxN}4G;gE3o1t}n(DY8NSYRugl_<{qwA@A=-}6vx5_sS7stt? z%aYgKTHa^n9GBMIQM&hG4Qp*;=m-tMFCN_oZ8G`m(#l}we4kc^V)fc` zAX&P)nxhzlG_LHn4s!{&*!4WMLgt&i)oe5vs zrpEOB_7)#^J<20CaP%nZMlLT}x_awvW65nkUpb`-vcis(Vz-z&4?@GAFLx!%wV0=% z&LM=V6*X<%j1p61A*ZK23B%)~z@poVwI!CC`Pz8(QsE3hF>QT=Y(rz4g>(7)Dk(%Z zwEo4Ee*zsGgz#Sd_=$;Yw~Y|>GXuCCt_&G1?%f7V_3#+;w{!aG&W4AVs_nq2RA@YOh2vJDUt7hPZ zeV*Y*eSdf+CZ7Pxix@)gZdP|Zv@7P9-vgH#w8hRvdHG(%W?UzO);!esfkeO8kDbqD3NiTSQ+f3<06L)r{`;F1Cx^ZR&Tzv5MeY zNzia7ShXwjr_}{`HwV_1pQLNQHm0PP$TS4t<}PsNtUX3imm`P^I%HRw7^m~=N9g%{qes|g z)Kv223j*5w&|80-!D{RD`O#F2sBc!Dh4R4+bi`bA#JnH&C0GHakYpNjy;ON76}vw1 zdV46gQMC;RL{% zLVTGL;W?hwZ;%kd&Mb-ziYExUK}3~Q81yMd{caHLs3gaV=u5QtW1VWh6W4C!(L{21 zxNgzKr-RWqug&)Ty?jg0LS55-%%mVZFL`*lYOWfUq5j;>LGZU!zs-8C~ZIJBKIUmA8SXF&|%1l86`NCplxPt za6BZ9OTTbrk=AuoWu< zZQI91?gH%+5;LOY(&mO?P53{s1|et&4PZ;&f>8Y1`as;M3HH_wBabrImX(lmfYRg9 z-390;q4j&!q`1hvgC$l@dHKG3?Bw~O{Bcf}Ik*UUOz45D%4@7CL9*yk^~&|9%0%9d zF0Gr=(qvHUN)S|9-lpvwM|?-eE?LVt&((yLk{~>ez=)O95?fk+dexAug`PaCm))0$ ziYQoP_;qE-0H}vNbQqyk9+)t1=a}>4i(H3LlE4P3V0nRvn$ZgBhpSKq+E%rSSt;`%ixvz-2^gb<3*lNDbwdNVv)QUfu_#7S1I$S|}UOd;T4uOQe< zk*1b6wZlfY7d^iuZkr_NIzK=c^bV_;Cq+eGNnss%xB^C?(|D1O{C1xJD6g#m2Afl& zu1}h&;3T3Yph*zk6j?}FJTf9`+-u0*4}~Kc7otOt@NvqowD{(cZ%TRUR8U&|-s0fy z?>2vLla)Uka|PNwAzVz0Wzk4iKOVZx*#eYhipxwSR1tb4^njQfA@Cc)=C*9f7!VRW%*;8y6xn1 zGWSsO_NTL?uMa;hY_d)Ha{5%$!}#b^De=X|B<9|k((ytq!fi|E0~67n8ZGKfb$#Uz zVYv)t`nR{CRd>eimLsWQ1&1S==$#}k-inrm;oIA)@;6zz2uD8R#OBrSIbIB!Q2vA_ zPwzSnPt{^Y1x_O(w6vMKK+Vzkuw&sr2~YXnT&f%Vl+t15@2`_cnxMJ) z@acKkMCF~Ayy^1CvhJTx+#FUGnu*V+L+qB&3Fy#EvCXt`pp?9moIx2x6d24Q1E!CM ztk;fx*bx>mEx%iCCPu9cH5h$h8VIOaT0gEptU>IGaExY17_7tYDho_t^0gxk&fqa# zKl3%TaZrB-3%GkgU>d^=joB=F=_|$Dh1mslv_S?z#RVshk%h5Ws1P)fE?9!MTsvW^ zE~=^+Kx@Dz{)*@ABwADf^(RYg)>^F!k(ulM{l!(gQlkAqdeu}xjOACxQFr#Na+MNN zPC~nsyd7e1G2e(4V*lLR>$=N`e2Crda*yr!XB; zkt&os$&Ep?`T5#PF(f5SJ44yv#DRkApB^_`d3A%PPaZQ#=BB0;cQ{ zlSkwcu(PoZeA}0BjLCI}K~`48!Dt9E64YZ!GR$SIann`mP^;zLW1lR93PjRMRQFqE zp0Nw>(%SCzWB!mgyJ&n20@MjM)WNOE{?AZ@`w#Ftd9SJ<-v1h7<6=s0ZIk?sN*I z5=V>Yqxje6VGE6w^rR&9;4Pg!B>VY^B3yH-wbsgkqtR1grSVkb4wavZm;^&A$1JW| z{n1#7^+!%1Ty)Qvnrgm=O9^?dFDn8op>xUBOSMV-b{- z)&pJV*odQndayB2Vg}dAXgxml?VddXKlQ$0D3D%uk0Z@oGeib!#jLy4acAQhEsJ)x$|!f5>Jz27Lr82D$?)aYeaePA5WJ*~|B(bKz?BR@e_pyZWxWlqL4U-2A$ z^J?#B3()uHej3P4JWcb!oIxSY4Am%!ibp(+WAvnZoQ-oV7Cz((bqaoZ6MJHsQ^e{= z$&&9{%7ZH&Cu-Ekx7inU4PQCD{*f2NP|X<*HUQ=t`7bQxZvQ-T6uLe%7B91_pd!ST z@8(4^7~DC_hlWRa7Tr}#tX{Zv`#W(~)tcQgmCsu`X|`@QT(?z_oM&^vEAwACj(@CS zpmOwC0hnJtTG1jv`fFws5%V5sVFD2Wx2!O2N-6qdA8|Frz5dViR+;!W(S_i2oF6TiM?-Vw z34`tqoD<^-FckUlr?L9ViMIk|Urf1`Y)Fy9dt`5mUf&|VorDpx% zpNUBu?!_sqnOFl5nN;M(@l~qt=!n#_%h&6D{Oi0s30*u8eJx$LZcO)J+qCd|S+Z8*uJ%i6`Ikoyj7CF=#7qo?A-yuh z52JF2+21a(|D~O_ahF`2sd!8cF0e^w|qj4;Z-#{NQ;qyOmnP=4GgN{7BCA7(mLzgMdK$}aqelJ|04fVD#WWD**}y?3rJ3^SYJ;lz9ym<#-Aq0%^%?x z1l_*Mqwj5ou?5#Yqn4}HN(gMIl}_t3;!O47EU;27MXeil%rMTfhIRn?pVh)S#+pSr=Zchm2nwjIdu!<)M-x)|@9E8f4<7JYiKu zn;qsPI7f{Y)Rm2iQ;wCrbe!6BJo0TDp!8(gY&81|rH_suL*|>2s_ulx<%+K8GS?qt;x_!RKTvSr^jl2TtB8q4`mQwM=M|* zc*ojj#UHFR^zNNjPh@P7d%~g_!gwL*L%}9tEw;E$8ZP9SHFdo4$jITHv;kJtUdl>C zBWg2R7 zDsHZ3^sAfQJ$SbhYcISbmoJ^FABmx?kmX}f$$J6 znLze@z7!KC@g`U79m>n6Uq~4Thrc+~PSf;XZ6K(^=2%n}(SZfZWhp}k#pCLlPD%%6 zmpqgg$n4aPI|EE_%@mq*WfG}@Lh>Vk6%T5ddd+Y)Y;&SOYApQ?*dLVEc$tj5iB2>r z2;{IO;!g)U=OR6jwz2jK5jLKQ=X|%0#;Bg2|90$SKzmt*2sS_*Ixm|G^Lbp4rj}at za$=j-{8t~J{UmEFxq!VgV!iD+{YWMs%c^_r;O0nX=x$Z(LqO?Xn%kon6?+V3ZuxGk zh>ac*uG*D^1WcB(KWY5)L|j7$Kv&**lVmOl^}Z0Q#~h^nSK;x1r;aMXOBG>G;T87 zEfm1qG?u5y&UzJzaSpmx=XjPoOP>`iNqEwEqZ&S<5N;sJ!{D&sFoXJ1?E> z!?N$Y@t2)jNtf4mfi5VTG-sspSgbOEJYkwGPUdK@f^}3HG6hzdIV5@Q?Vts$$r7D( zZ>`v_I?jsm+aybIBQ8urP94^r&j9QnVLuQWNPgF(NF9C27a8ruDr=G^6P2KPd2=f{ zhC?Di5zUh0gM=&fi|71+Dx)@DQ^nek=0jqgEGGxk#U?(Dxf51*vHith_Y#~6|I?Hd zE5W2kwmy6iSF>_->N5&+Evz1k!`dLvkZfxLh^*>{aLEAS5@le80BjUt$>@`Eu%d3u z%Nj7Uw+J!U!*RM#`ri#)YIDE4Qey~+j3S@B*JfyK2;Mc2@UuuUuRK;j8f7+8u| z7v&}Xs;Vbv>4K8=OJ_Y!it^+W*}Kz~MyL4*e@Qaxzzc}@aUWsR<;E*Q#hOu(&Ft(w z1~NDL0mh!nM=kl}w}H8&yma5%bGFuQIaoar1XYhu_!J>cjmjZC--_%~h3h8bbH5rU z8Z(8wmUzjRCAX9RmX6rZ_if~CrWVpFw--T@H9sxHcY-z*!()cuocEh>NYdUVQ|tv< zIq4S_h5?XHWIvBiXQuoRLZHQ-fL%XaG=#}Uv5ZW<-(bU)$@S|t&E?LUq}Zvr!jCPU zyJ(Zyh2&0rP?}Ik%NpGZ$Ce`jumBwjQns` zBCV;{>q+?0)vKX*4}#$qW>R!csjOfi)Ha_1n^YB_>PA+Rcx^=MhmVld6GU zRxxa~AS5^}lsASM%K2EexA`rLRf(+uyA|g&n<{N6f8om(wU1i@kI2)a@$G|>2&};B z%Em|$d3F_Nnk{1B{IG2!vv2I8B)h4ZnA=5`SZTLsR-Zn7Le>f0mLI%2SlefUM5YPvcX3L(-^yKG`$3jVZa3yKd2sN_4H%5Y^gD zq~NHSFpxc>MmB%1#z_A4hYv5aWrdN$aLWR*I$3eGD1Aa8zbtPs0&QY@4vKZK$ueJX~rIpx4Y)%v(6<@Z7rDop5VN zkcTl2pkJtp0xLHnJ(A9G>Xr>Ht>zk$0>Q1=d2&32Nj&q(3u9(vC^cQ&Dupfw&sR1_ zPDP~mBNaV$N;d)7XBY@^&&x#J2SV~ik!9KIz&wWDdgXId6tC6Lk52Jv?45r20d1e^ z90TWThbVO+<`$Reu-0yqD*oq6nDH**=g;jUv-&~8&zCWi4V>UxKRSRamY*>rR##QK z=-FOdq7~OdR?~Db;nVH0oeTZsQUaEt5xj7mmCckN*PCa)LO$X-iUrJ=6ynrl6CPO= z#nPe{XkTH^)J2Me@cl==ln1HuBoECLs3fCBHp?qq&MpmF7F7BJoBukp%iEY1H&$v# zY7dZym1N07)e%MdiFD;{G7RkdNtx3M#VBQ-gWD&gf$s6~QAdtsL_3OU!5|@_wax+| zwzQi3Yfs^VQQua+ddKXKKdMWa8kgfdpX6}#Sg+N(e5=g~8GK6_PWw4l-}hteQydbr zCmY8;Xiba7PdWMK_Bja7iuxJG7`hKv!k=^%x7^_^7D#Zra+uiX+FIFRUN-AaPG1MvA4bg_4K>!*HBAW_s7m$;g+HLkAl4q6qp+qToxQ zU0)%~^XK^08R#(zLsy-G#+|h+Z~WapZ$5eQB#A)B8o)mt9Vr7~d-OCqi0bU_+(t|+ z2iT9wu`6uTl3FxU(6hN%8<4R%_5*)KKs z_58|&YPFRg%@AMy!^Bg;Ls@5E<|0vJ?#F}3!*~U|5OW!iHdhTMcC>8PkwD7rd9iQU zay%@4xLiQW0ahJ-RcGWGpF>KeLH5K>?2LrOiwM-uKR$V*B&YRB(@h+#XzEJMpIJk^_vI*f z0-wjaa3r3P1@jA;Cc}li5qA0bgh*%qiuMp%fmeJpiE}B@ss(%k{DMHLyxTDL(TDJ@ zW8ZcSMTw;X$N*~W=TpYS8BZzm;7ns7v?JU3PeRMt+Lh^K*IQ#XcB)8SPI*4Xe7|P( zX}oSa#L5gsHGUv`K?FA9@9gm!tQb-+Q@zx=YS-lMFf3}-U!v2hpa2^VV>h>78x5Va zO`rCP2#n&;HPE`Jl`1A>jhHqF6Di(x7=6ru8E4z`!QcA$O7dFhla7fqOeM#g_@&oo zO%N6TbbPsnIqpN={lz$LATT0^S};WO)EoCiw9fcppcJ-YUq??xC&qeC0{6Fs%)6?Q zsb#Z#Frv``P^^W-9LfhJWKIqf^GDH}$rYmMmQuu6pnsm2NHPd@;X8kcEf-yzf#(Oa z7zrC)XF%f*i>@rt%6h83aZY#t^ zhY&gRNA%%Y-e6-N_`#(J^jF_b@4m*B9JqxVXNDhFqVas#J+p=`lYQY1$c%kp zHl9>s&Pg`n*3Qic>&$9un&Z+H|2%o~fyUY4u2P=RFBBd!8mxoW&*b??_a_IdICB$c zhOvF`ycr#%J@y+mU;>Y4eg{rQJWIrz_%SXzJ|w|A{Eu8-IV~$Afr$-?xmg ztEXERB705~61jv7+P)8~LU7QcmrcMI4Urhrim;hevF^ZxWEsEgJR_?2W2xc7-4xpI z1Xi@)^{;GH$wj-bKPgPT8ig>{(1)h@FmIoRoPhT<^L=aOxn5MY9<)eG**p<4h#ZQV zi2uF&a)aeEKX=6nRUaOR7ErLsc;eiPlHPwBfQ5<0!PMkfLE+*NW;r$?iX+B!#OAxr zby#0P=0sCxE0YQhlAbzQ)M1-ap|?4+Ixet_6v?=>e>WIQ3T$S|avJcz-Z7f!0r>^d z@uw_Gk0jtI*GgzbXOIxbKnm#6Lp48#w%a%)&T}Ip58&@Q*iC+9a(CK%K21-;dr7`d zK-3hjmXAK&iz_8=8NRkRTX&6K<8d>9NhU&`E@l<0nXM#Ob}}e7ceiKgna+px5<8fp z{Sn!I$ZV;m41~9JA?Mw+5j)RO3S7;o@_N>9Kgjo};woX5DZk{hl1}Z6!bws}_zSpi zWGHnR4@L~yD*hTKegP$`v`fO5;Ycie!T`lKwj1YP!0eXg?WKw$c^L9M+kI3dAaJSG z+eNlK5?IpVL`D>@2^nB(rGonesj#uJy`5aHKlw?#+@2+{LiibD~W;o`q7*BeC&H- zp-;>wQn&fLN4@zi1#}XIIeWX-j;xq6e~$30#mX2A2{4Pqzw9|aU8EH-t#zo+!`odz z89YX0RryXzFcpBaF;5(m(J!?9=toPf?cD<)9k#?e=Cxh*R;7~j1$~E!M-RB#H{!QR(J+1g>`*!e+Jq)82aQe#At(q-%A5NQ4%zny|@Y7TWY6x@Q_lP2NYIhSM#K@ zq^ztbmW+?bYtINT*)Wm>E2{`{cY8C_?kCjJ+M36T$*3aQG2%0v!d5f?Ns}(Y-8iwF zK&Dvzcm)3rp78aYQ>1n7*pyR2WcXm@sx~e~4e+YJQoohLQfXG#!01%UhY4lB4F-Kf zyiYYad~?i1rA|tnQ*k#pqZ4`KyJzt!L%Yh>6v3rH=MEp-^;5G^t!)!HqBT$W!e6Lx z8P59*6f8nKTT1HS;Lxk9DG~l!%saoXjxej}IUbTMItXeR+r8~!b-Fd)v=V~lx*ATJ z!=JCNukSchv)UBuDojc3>cmNcRaREU<9F_8>NN{z<>nUJzaTUvnPI|==%YjAqZ>F+ z2<@0BF%bD`!uBEJ)2wAdvNd~(zNSNB4n~FX%NRX!kyjyfw3xE7WEC>UU*pe=MKWm5 zW+Dm885QQ9ep^9xg?BvAmiM`qlK%OCi2sG2xclVKD6{tQ%-MsJL4+X`&_1Y$$%s4D9d8A zQbKZYthQHh7-scv8DTiVz4!f8R}>6hI{q>~pid3#Xvnd^G~|m=rkDlMrulJj#g7nf z&);{_fv|h*8$u?!bt}X0j4BOg_Py={t@EOvyT)dW`pbZ>ZQI#blZ)@%K~VwM=iT-V zvPlIpZ=Z+Z4ZXvD(Tn(I?1j|Lwx&_5S0&qeNsVg8N+T>l0gesqEETO+U;B3SgWfxT z5bV#&-%}D@|DYUOXt%BPyd&m;PR>FdtR@RTLYZxcybWT+6@9Eksg1Ba`ja*~><$fY z`;L~%DSiB{t@{#C;iqAZRcD+8zE*h&9sp7M?Sb1a)?#u~dYs?CEhs=~sbV0fsbf$_QQf!yemNepVnZfh$AuEZ&xY#!dIDW5%R&nLBI(D?J=r1ubgp9qid^V`I`6*6pNUKCd9uj4vl>C6bUZZ zF&npw9IOCUWJ%}i)w04!iA0x?k6Qh4^QD_ijexMhpj!dtp2z zwEyDk=XZSiMKcsH1PEhtQVaj%Rp8okLj&yo-$hPr7sm{;V68BtOs`f^S278s@MANx3K ztP2P5$Qy|Yc$a!n4l&hI$AJy#6N6P2(b+%@P>KQ zlRv!s#R~l%ja+*qH8$&8?=yK)_!nz>>epbs*^yGx`L<_#@suJVD#^^N`7w{kkJ>(2 z_pbGS7>g5ph4V_#Np&VZZwBa_cE57zzz9OTVZ4J}(tPeIVTQ&~_pn^`wAz)+$_i_GX+ke&wAEUM5?3D^~|v?MoW@(6w>wmpvv6oIXbiAfc9?yo5d1Ic&_Hv)0~KPh~fc$sjG-K6V8Oth2DhF zn69Zy+b3^acuOos!e%_*yy=B*gs=uH#cJ?i^CD;BkCQoy=s~RuSWQe!#upZ_%cr8x z&(CEnroVg%wdK#!vEM&hU9-q*b(nsnoD`y$)Cdxb6-%n(dbq>&?Y-#g*YeC&#GJzvbF}tyhBN4ZwY70S%vBV*GCqNG# zCv?6Q?2}c`HdcO1j#x32xBp>XcpS1~uzr>8SURr0OZo+#19Wb`pZUJHq1Uw)zxQ;=Ub$fsn??a+kNYz5Tqb49M>@t=`;AKqd*R_WPb{m=qn|pPQ23+$^$w z{GHHjdiCUz_9HKmLig2KlvtkQQXAO=Tx#_vMk-17D%CeM6iNuDtJfV~%;6#dC#tR` zUXmG$tBZPSqH+yj<0smC6j-s2)ym>ofq`X2I{1=HX6$gOOl+z3OgL>W=J{kV{1VQN4$a4anF_n&NvFT0sT> zE_2X2H6ngor&c&p+cHJvhk=eb+|POrl7d9ha zhIKu-DOZv)PNT+K3r2baekojO-4Ip@dJ))7l0G29r1JaN`5$cNz5Oi_R~` zHs!p%g;)#O6tJK?1C|X>v~_f>HeB72m{0~~vly^iJBUkxbDG2-A2?;jm2&{?vb7nv zfVUU^$e3EOkRw}V=Iwkv22R=7?-+8Cl}f8*cU3=p#N!kQBuFz5aLQU3(#z+q&crfx z3=Gg>`gv(z+twPzzyGE3z-$`qd%899AVZ0@kd=#z%F-B+x5B_d_Eik*Ge3@ifIvxQ zrG}p)e%$l#3kyiO2>#L5Wgm>t)K+3-Bl};*-zd_o!sUaatAsBZ*9)>P;v$_Mg&7e} zIJh)O5|@Kyp30qQlMxH#QI|J%P`@3F4=*cYj@?3u1;Ke@{5ps;jU%F)T%AMB+sK_I7UpV{bnFhotCRa<_J0QsDy^n=CgW zN!l-&^#&v+5U;H8y^~ms>bnjDOIvV@XgHCx4EaV;^x!&M#%U#fcXk+|KpexPC)S{f zDkWbMk~n3CO2>sS+rOy#Q8HO~XjVUyzxp=qCM-sPgfdANPl}1?FpXr+U1N=N)Poi9 z#>Ebi+7J6;Qwn@Igg+_zx(MT)Eq`>~m?VYs`}vfc@5xzNLB8$MoZjoh_h%G(}8cAw%DI(Y1SKj!OOM!~6CZr67y^Mp_BFuc(&K&@775 z7(B~C!C3F~WfS8ZOU&rGnzJdHWIvOW(Mun9Kj`WX4emvpaqMb6L^|%UaA`;N@I(}( zP^~cVZz)34HX9R0C61EkdAcTlU(u5tl)3`d0Ef1|zURULgPF%bd0SP}mA&$VhX^ll zk-fw$f!*3RL=SJ4_UeO@vuZcot9gXZDs7Bg&#EaA^5wp?9Fx zcvNCG(GNzr9T%3>bi>hSF>gV$+jqGbMd}qD2&in90e7M?rhVL-Z-ooGoq`uF+!S;_COD zHhUnetaHOc*bS1C*MHhiY-suQ+XrcW%svt&t>NW2RANa>7Vq;n6=LnMOWch_>l%W9 z9ZDh_+AQTJ{=6oZ_j=5EI4k&JGG9a#%U>H2Rp7HgaQl!LnR7V06lO_?HZW&W!2W%_ z_*SI_V-NcA+%x4V4$pnW!(qL2JQ$+0PEI4=zp>(nG)6{1S7q{{I5^S@sCea`NpQ=% zz^=`8sW-mt2}7Wsm=g9X$um7upQUH$;k|4z@vg$y=^w*iIk#XWGi#`xRA8p_jS3?R zE%`72pi|7LKY;hu)4!|;E&a78Ns#L=A8O(l3=0(`uYIH>Q{{28akr(17znJ01H#{M z>jEf&&QG_pg?V@fTNJSZC28K>4DXN;$pgX(A)x|lo)yrf1 zTxiFb&{!ETz1^2$&B2Cgb1`}Yt%n1@E>8eN4N;;AAi6%^59R!r2p7pqCx>EZ70DoK z!RuCk%st88bwhk5giLb{(lWyt$;N0qd1%?-2L8H;)Ao}ZD9{tvKZAN#6GgYKlej$4 zQik}~Qie>LMT>x@A=JlV5i^%=+4+DOpHDu{2D!;3;E8sqOd$8H$^bSvP5r6?vDDir zay)YNi;e=v1QwZG1@@F5KUr2{cu6I|0K&-#s`s4X;Y6$HUq3cwY8z5S<3)TZ!btGY zZX_p0Bnd$aBxeGPME^==<9b|ZC$7(?(si)d)%HwWN6?))Ar0}@r7{Za+RNYZ1Hs5E zz6W>y-|+Y58n9lsJd6V`@kW7p6c9n7i_U`=$Lq&06Z}y&UwfNtQ?xOEthf8(dcFT1 zy4d15Q*TEIwDR#LJOiD&3@LaAEFsvb0s_KvX~$9TcvFlke+A66QwU!>=C)C0fRSff z&iY0%5F4E+3}UHpN@orYEk8W9Rfl5h3to1O@R~ekU{kEOVI-Cw>@#wt>#=88v=!XO ze3Jss&yWKSSe{$EqU*k85BbIuHo87kvF%M7T>cI;ZvHT^x>#%g%~htc%}BifHIyO2 zZAfXLh0|pDFp9H&Lpfy&duBJ`;cZA6`$~$g&(%l!??`(y;MD&9UP8R#{wSS0#%D2J^mi<3;fUgJjN054RyV#Nz1F#ZJ4Lp&<`n~v4!u+u+j~T0VsTd1 z=;vvEeNY^DM~$yscW5jA5u3#mY`lT~R??A}SIGU7{p5!&^;(oJbC}>){ek>+bpv0_ zAJ~<(Ds%bvgJ0|)?sLJA+Li=kKX&cSvS9Wj=2R^-Cr`5*b9Pl2i(4U6Cd5OgAKkiZ z;4CCFL#jT8f85=1UCaPCbrhjZo4R2yDbW-yVfu z`TBQsQ0GKrW(z`)_5>+-JlRQ`j~gIj-aqDeWPLn%4W^aQgZwjOZ$lALdyPln$VisQ zw$oC>70vs-A`?Jrwku}PEud9@6t@*kCZJm$-PcrCf@6W>5I^|RIKU|OyUL`Bbu3*@ z8tut$2a!MVUZj!hQ(jpnr2BvNvl7@DaC@##KQl+A=x!UCe~3Zo6QEPUW199{?#1I7 z(~*q-r=_zFi>htHIL!*Hgmib;(yS;gDbgXmOE(gtbk_osf`D|FG)mVJDqRxNEuE6z zf%m(v{eQ2WGiRP>?wR|yBf4CD{G_-eY^07>=^Z_R1&32?I0plqzn@pZ;Oi>BEp8bm zxoY84p{U|eF*sJ6V|&ER*XLdrLt};Lx$>Eweq}n2XtN`b%_WZ$*|&c{ig3wdZJeP> zw`Mhqr?4^w1)WCoXZ)7PJeu6ajPdA+%47B5mz6IC?RiHlJ0e*NZ6p{kEko&|$h#{D zdv1EL-3N#^rl2O7fVq=MIM>FUP$4)=sLaf2AHP^h+JEddEt${z{pYu?7R-DWN+wmq z6YibFzSo{SY_O4$(rW8hyiP_j8oe1(01Irs`iphr`^ zwjRRuW;q&x`+a=`7|8;H>?z-C(aJt~rQi7Gx~a8I7K`fqW`qW^!-T0hGb}clR0c;` z$&6hPv=@p`o{0^nbl@W4fdjT{u(BT);1@S1t*`)mn%^VtJS3Kb;`Ea+_t*Qac6LpU2V$&l5$A>mj2#mfUAWD8qCN<~>1Fqi(Y9p_oZ$ zti8{;-_-|Cd^arfNMJvx%=PtlP{PFGUZ{TazUns3>8OvCzL|F!n-&F^1jXIGJq6M} zk}F=qs3>Vb$$M5=xlvrpZJ?UR!yF;+J17=5YYDnIov#kTEtwve$aog;@A#ikhH&(3 zI0`Gq?%8g$e_L(h9i@S_6g%mF*ZJEx(q6z50l189o?xnL!Bf;NefHy_Q+E8!@3$hv zz@?@{VP4{2?5T6JZ2iS)Ud!c#>&)@rnaio^Y`+IrrA6W!pwq~`$z0vxRAb^?Y&PBx z)w27Dn5YwbDhRCD`cmxcGw4wGXdd5BtsJ~b%rEmx7x#IkOsuW6WDN8|j2L!5#kiC| z*|0`dt4BJ_o7I9RC>||_T)MDS_Vxr;9QXT8mbDi1%ZaHg7#sf)fwCxyzxplswwWP! zgzb%iK^4#{-?x|dD^i!II|(9f<>hOwjyIL+Wx`IAT(_U6Z@EZl$fL;nc=U!FJYw;A zkjthhlOot3SHR4G-`>r8YaUT${Z3ZKsn(f9lOm9bG(jhO;_fG~SXp+5WxVhD4(AGT z8ao}XRRAsS{Xpy}xxK%}5!-w0NiW9(mYT~9BwsKkQ*T!3{&#fWuYw7Z6la;}yCd=c z5p{WLV|BdJTzZweV2`&l1`o6TX=L zEo@-_hQ@&c+3m<4(Dqdo>=`?gzXJdY2)=RjF5{?TdBqEDP)^ z(PC8#z7GWw@r2sAJ=JhpO8oR$L~6YcGQ^5yTJ~$S&i-u=UfYew50h$cB&^r_Yq6a* z1Pg`K7<6)SVExKn$hiZPwL7H?mCG1>eYMc6W3#Pgx;OW<&A?=6EZ(WPBc!u4#5>8@t_#OenDZs~0`n^W{{S0%Y$g@sSLM?R( zt<9Wfs>XGSto)EDjHZ_T;{+DeDU+e7p@NNOeg9aM)wzebS-7$cfm`jlz3snKfj%?)UP-_)9g2QCH=dyhS=AIY6l?v0%c53ZfI9@Ty=V-K8akzPp~T1!UBzI23+aE@`_l2{KhgO?9u3qJY`+ z(c6UQ2`RJ{aBiK?h)!xR?(e8A=i^>~CS4{?dO;RwPZ&y?YA0J5w)}E06I!hv=rvf> zviCV!{*O4JMz6VmGz$T+L=PB?X&pZcBMusX(t2T)zW`{C??+w`fgia3c`f=c_me4>t~29f?Wo;3OLe!Ds+)OJ@?N0 zGBd+Bo(F6f=~C3`_BUsSuyp&M1n)WLSfW?E`r)-VHY5XWtSr&85N&*8(SoUuFs0ca z4i%{{AFoKYOA$-sZ?BdNtaRo*$C8r^-H>TsRt_k^i?m@M!bstml1zkBboi2NM1WUR zQdt=nC=wpc9zXWaWz>mebJdGVa4b)H@)83zK3v}k5Eupl9s0=duz#w6)#uiIm5ZwY z8o;!hpZqrpB4_2Sz;vCfS=uH(;;?nZe%Vgh%-4@J*WUDjj1j{NG7=#4h1C>J?))Rz z_mg&fa~Zjm>iKg%ZZIUFi2hm)%)W@YEab`iRH7nQZ6}+M3}1}w&im6Q-QD;)nbHKd z%vf3FW+yc-A2=Q-<6<*FM*phU;&iVNP`2A#7rqRdd}sPxw;5=};Mu^50CaU=wIwMd zC@;Lg#`EsxJhqTvc6QbUxL5-+Fe5%lQk{q`@~xqBk991z! zdrkW<#E<$IJ@>wCe1-SkOQiHvPh_Ut72+|P=AQtgth8TP`pH+a?QbIrZ0^;r7H5ec z*SnHf@St97Jubvw%xGM;9vMU1<+cyUIz<#Bk+8Ws{X*D>X$mDvN)Md4g zz|F%0sIseG3NnO%0tAdn6T1yQtdb`|u9t#%6!b|7IN-zN&b>B53*UgiRKgzbM=^-~ z{-mOj6uk)J+2=gcp!@A297y@r(ue;QKD`}UtZ6>CeY6j+0-m9C)+rcU`A_vW)wd^1FcV*{z7*57`a7tK>oLl~pj2Z{#ip5}PlX#9TX zn67a+`>~)aRfbm}f!tAJ_T%CmC8{8aCzM~CqC-xN(epFM6hSNTBK!B0X+9bJGC?lJ zy_W<;Zz$d2hj{J*ZM0Q>n!Y9oXhp}D7{8&YE!+@EQ;IGUVH@yp$0E7GQ5Q6<+5I$Z z9`AyvW&CgGkRvYOaca5HkP#!9APS{>wo_Jfa5n1%KVJX!^}Jz>kDO#SbQ5nt7c2gS zI<1`gFz^ZkgDp#U@8YaYaNGRYBQ&h|5HezP{1GzS-J>cemGX=0ao|c$A59Ev%FTnY z+;nPP>$is&rTDfQSBm8NAayEIxt$*$Rx@?YGd0ED!e9TJPBre8O2NzJscs*u?f*D% zN~LI$jG@m^%;B2h^27i4+F9MZFFMD!=&$D6<|nEDg@+tXe6*BA#n1{h+1+c`pMckV z4-_D-XgPZWAnvl8nr3Trys;$VU?_aJ-HIs!f0`{MT0QC*SGMyMzRw(G+KP1%Y&>I_1?II68;Lz zDO6(};>ojm9=Erj`YL-0QXoxl___nc!0Zl;Ubd-@28UjA88tWQ{zC$bO$~MOwIhT9 z>~&H=oNMH-^%khw^D(QdtINv3%Aa_8Zq64n@oNC6>NQ$zHI1@qppt`L?u5t1XoMggZSb-k(oDLvIZNpd|C z;C~cy7A{PK!X>21i?nLEljy z`7@qSP?Sn^eivz-_E<;h3L4Ks=@9Yq+t|(ZzxH&o<`DG&=lu%RzlZE>0`we6vPxWZ zR3vouoK)-Ct#H%N+qB=r^?#6qeB-b|tX_i<%EU1+}qP#I|BA1#AVxbc@x)zKeY>?USaF$SCL?{&wjmP^q~f;uL2O`@NB zoiVk1=V$3ePTPyN<)GEfJ0hYVebbZKn@;A6>Q+GF5JSn5^cd+d7)$)dDVxR;jG?gz%5s zL)9O4g}T#!w!^KR(sj(dGWoJ}#|TFCCa?GIedBa}qy<`eJBXn1$jR5h_~f2b0&cEBsuNHUt_p;<$4m3Uy$Jezi%;w;Y|>NcQLzyK9N z9ldwRzTEX)q@M~=#f0FJ!lo*WJa7MPEV)6i#CuU>-KZTEJBcSIMBAzfRrS}=RFrEf zA|PMlxwtV0B{D^hc(M}B#oOj4B0d=ep+}zOLS^b++1_S~)#1K4kRyi|%~7fuR@P&c z8xbT;Ld|zq-1owj3w%@K_i#8Jk{^wzayOXGLnJyW(B*7VWq}`t4~l#==5=Nb2H9{W zD@8&r-g>5wy={D6CbK@m*N4GYqtNJ__|$4bwDoX=6z|Iv`AEqMqq%Cta(N7&Z+#6q zP;$t&laf$fTh1H@^`1uU%6VW2{`iaq;6ur(2!ha+2?Ps% zsd#X{1G_sDe7Fr3i*k1q&*EUPMYIC>5y%V=_02%u(KDGxmd1b&erG-dC?b99e3}gP z-{T=zNHXb{f`5OUo;JG7i6SENnZ_Qk6>*TlR(jDhZ@7TshRNLx5EK?{?E^Yv3Mpfs zYPhExtjygvrI~1-pZH5oz=h1xr(5t{M@cW0AFv;k@B80Fu=LnFtee288s6?oYj=Qg z_5&pAth_iLMCvL6Y%IKJi;vA_G4BY(6urAX9@#x#0jhzw-?D7Fk@1&Q5F88&3y8#7 z%%#PwXr(AB6>y)k>>~T>eGCDPJo3fb%5BMr5Uf^-(#xG-6a+!yn__%}`((sFVdRCW zSb*Uf{Dvffz&Xeg*Jo5?m#jULXI!^n?@)*l7KGDUpHJ>9^b75RYw_FlTf;VI`c{Z7 zku9iSoLLd%yq?-FG=)-Ql_oOGb@an1L(i*7WNEuUykf;*ti&-@+i~{kB$*%|!nNh@F?a zhqd+JtHq-q0b67Lg5nfxb5zDI_El2fGBE#kGLy_cYCwP9=qgV+cO=Oxnpv`v3!l4d zHq-b=3)|WNHg{`&#;`LBvz0l^);+L;{vl7$ZkJ3Kw|X^j<@Bu7z_CF9<77yc&8VgL zdF>|P7u%V486m;S8s}JwyJ<-=g!PWX(j-ba#5l?mMjX|aLz3=Xa$GS2T@>&Zj zAh1%V(h~m=+<-CFA2-tirkY-$1xI_K8PQW8o*V&$`@mJ(^OkKECD7R8XLwlcFCPtX z)fRav{8xj8#Yo{C=-V0msxJEY6R(L*OTk~&JNG^t9sk1f9(mv76Q|F!B^ynE>h#HN z~Yq?XbZL_gN< zaM9WO+g_Iz(^6rR;m8Gfu#kK!X?XoH&z%5Wv`~0ShF>~HbciGZ)Y@r=EczXH($mx ziwx%q7xAu%;o?F$?BJl4rqLYQK1{sWb9u~39o_J&q;;HotR?b41QEWuta>;E=;FhX z&a-9PcjtiZyWu5*$kH#JP)>I25D4R8k4Oy6FUy$%LCO(1=)AC}YIwAa3e;h#)DV_h zi^nC;N1dc9% zMzjp)rS1eaUEh;AxE%Pt#!xnS7P#L$A6YcGsDS@ujC>IQUfJ6BGn%Ao`2rFw02F;h z>+_HpDp^I{WbILHT@+ma>Tkd8W_&v~+NBS>>yZuyKFS(NWS10Xrq>Oq!smwV>>@{u z)+w7%&HdV3{#kOfC;pw-y8O2!Y1OZU8cW=z)33%joUUdPBZmxZV5nU8)jWXid88_$ z2dFVX9skk>yl2hi7L$*&F+y&t*2jSjdRlBRmyS^MMprLNEV~KU>Vs7?+Cd{fly|$< zVI~s<3yIIaWDTg9CC%)Kmm^*0yQ?#cxm;}Z9+E=plBk>v-81+nOI(nNE!$n9RoT@i zx?w^&2arD@uAIWyVNC|L=(`)#>u<%_Ed%|`1Ayjv*#8M{>GGAhlAf(1)#DXTJ@Ubl z`ZnkNX7#ASvTBJnU3ar_j)#MYgv}O^B{|SRQk#JG=6H)7j~oIpnb ztKYim+Kf*hF8UCE4E6+9>|6URf!0wc zy0^=i`cICUr8bIz!>uZ2vK=adPZ(y=OAEc%fTtJli_;Uj5&=;QoLM?*96@A=UeN3j zGHFHG3AiP{Pl8~{ZSp;QU-dwr8Vwdfh7^PKHxJmB-!G1u+pA*6+oqV{aT^b%j|xH4 zYyr`Pf6wF&%Nq=w_xGL{3S@%;uSnI`fw-%ud;vbFm^-nU2Yt6Rz-?WM!CxlFxj(4V z2W$gX;?`I^a$#;uTdx13?(nHI;-~w=YlfdP6ix_7iH#2t0(>&{y+6uFL)SlEMgw@o zHd3wB`N_%#3q%T=9j;xYmld{eLm}?QxTv#l`BU9!-X3-y<-s9F;t#~sLsW-mMy@El z^%yPy8&vg?61R+1HgSfO1;8_|Xyc_e`S317#`k=FkS_;rT0E_%`?Co$d*?)iKz)*$l!p@e_%>MJN12nagHlhvmv;s3muKsDXJ>nT@!?1Sw3uZh){2%OQMh?eWO(+00Wdln zYw0nMi3xLI9>%!w%V#dA6UQ*gIq!+;`Silzdx?W)5Y)$!+_rhvP+n zUH?m))tCfnL{Io8m;(;@fPD0=Dn4!K&RFg4Mf3QziCk{w(z`dSphPh7oMC%*|9shZ zC}<&T1?ke)8olmZ8hr#j|N7DYMJ>Q_+JQvzWCLs#GbEBEi{X914goeiDo z%y$Y*WRw0eMK}>eEp3(mU4r5h-T)6`LVF8bRNJ36R8o+}`khPSUEk{5yYCFRK;?*S z2%Y#xpY)9=S0pz*PgDSxMjzeH8I_#?@QvnAa)@N;?s#I+rEOD<+HsqeTg1=epnz<= zC;p3KV5eMol_;5K$?Fj^E#x>mbNwdK$YGY|U<*xGgzz%Bd z*r`bJ-%9_LT+A4JxD38Qh$3pD!Io457d6=K@_1ula25|U3E~kkjwvMkPsYT}SQcJm zz-SwtQ*)FxphScm<^BP)(4nZ+99>Da(JhzxV`Q0~Mos9mkHGN~z>Imr6kO`S|3;eP p3_Ax@GWS^;qvN5cXM1rgVcJWrp9`KEy#LE5MLAX33Te~8{{adVgFOHM literal 0 HcmV?d00001 From 4a159fb98f660ae26cbe004c6a2d32a1cc12e970 Mon Sep 17 00:00:00 2001 From: kaihong Huang Date: Thu, 5 Nov 2020 19:41:32 +0800 Subject: [PATCH 53/72] bugfix --- src/pages/Download.vue | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/pages/Download.vue b/src/pages/Download.vue index ea089d3..5c030b2 100644 --- a/src/pages/Download.vue +++ b/src/pages/Download.vue @@ -1,7 +1,9 @@ From a391f460288ac86afba51792889704d5152cb69b Mon Sep 17 00:00:00 2001 From: Wave-SYJ Date: Fri, 9 Apr 2021 00:34:30 +0800 Subject: [PATCH 56/72] =?UTF-8?q?=E8=AE=B2=E5=BA=A7=E8=A1=A8=E5=8D=95?= =?UTF-8?q?=E5=8F=AA=E8=AF=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/admin/Lecture.vue | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pages/admin/Lecture.vue b/src/pages/admin/Lecture.vue index 06a600b..840dd98 100644 --- a/src/pages/admin/Lecture.vue +++ b/src/pages/admin/Lecture.vue @@ -10,7 +10,7 @@ th.operations 操作 tr.lecture.add td - input.name(placeholder="新增", v-model="newLecture.name") + input.name(placeholder="新增" v-model="newLecture.name") td input.location(v-model="newLecture.location") td @@ -29,9 +29,9 @@ tr.lecture(v-for="(lecture, index) in lectures") td - input.name(v-model="lecture.name") + input.name(v-model="lecture.name" readonly="readonly") td - input.location(v-model="lecture.location") + input.location(v-model="lecture.location" readonly="readonly") td timestamp.dateStr( v-model="lecture.date", @@ -39,7 +39,7 @@ showType="date" ) td - input.url(v-model="lecture.url") + input.url(v-model="lecture.url" readonly="readonly") td.operations button.save(v-if="lecture.name") 上传数据 confirm-button.remove(@click='removeLecture(lecture.id)' confirm-text='确定') 删除 From f32e7c40c2aa20aad6996e6391e703625db98a0c Mon Sep 17 00:00:00 2001 From: Wave-SYJ Date: Sat, 10 Apr 2021 00:22:25 +0800 Subject: [PATCH 57/72] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=89=93=E5=8D=A1?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/TimestampPicker.vue | 2 +- src/pages/admin/Lecture.vue | 32 +++++---- src/pages/admin/LectureDetail.vue | 100 +++++++++++++++++++++++++++++ src/router.js | 7 ++ 4 files changed, 123 insertions(+), 18 deletions(-) create mode 100644 src/pages/admin/LectureDetail.vue diff --git a/src/components/TimestampPicker.vue b/src/components/TimestampPicker.vue index 7ac4882..4d3170c 100644 --- a/src/components/TimestampPicker.vue +++ b/src/components/TimestampPicker.vue @@ -2,7 +2,7 @@ + :minute-step='5' :auto='true' value-zone='local'/> - diff --git a/src/router.js b/src/router.js index a12bbf4..90c938f 100755 --- a/src/router.js +++ b/src/router.js @@ -18,6 +18,7 @@ import AdminPrivilege from '@/pages/admin/Privilege' import AdminBanner from '@/pages/admin/Banner' import AdminActivity from '@/pages/admin/Activity' import AdminLecture from '@/pages/admin/Lecture' +import AdminLectureDetail from '@/pages/admin/LectureDetail' import Laundry from '@/pages/Laundry' import Download from '@/pages/Download' import Bus from '@/pages/Bus' @@ -35,6 +36,7 @@ import CustomExam from '@/pages/CustomExam' import Notification from '@/pages/Notification' import NotificationView from '@/pages/NotificationView' import Curriculum from '@/pages/Curriculum' + Vue.use(Router) // 微信环境下,为隐藏前进后退按钮栏,设置 mode 为 abstract,实现完全不产生浏览器历史 @@ -138,6 +140,11 @@ export default new Router({ name: '讲座管理', component: AdminLecture }, + { + path: '/admin/lecture/detail/:id', + name: '讲座打卡管理', + component: AdminLectureDetail + }, { path: '/admin/banner', name: '轮播管理', From 9669404c3158389e2d35e775094679264b5435a5 Mon Sep 17 00:00:00 2001 From: Wave-SYJ Date: Sat, 10 Apr 2021 20:50:39 +0800 Subject: [PATCH 58/72] =?UTF-8?q?=E6=9A=82=E5=AD=98=E4=BB=A5=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/TimestampPicker.vue | 2 ++ src/pages/admin/LectureDetail.vue | 37 ++++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/src/components/TimestampPicker.vue b/src/components/TimestampPicker.vue index 4d3170c..39cc6ae 100644 --- a/src/components/TimestampPicker.vue +++ b/src/components/TimestampPicker.vue @@ -52,6 +52,8 @@ minute: '2-digit', hour12: false } + } else if (this.showType === 'datetimesecond') { + this.format = "yyyy/MM/dd HH:mm:ss" }else{ this.format = { year: 'numeric', diff --git a/src/pages/admin/LectureDetail.vue b/src/pages/admin/LectureDetail.vue index 5c87615..1bff73a 100644 --- a/src/pages/admin/LectureDetail.vue +++ b/src/pages/admin/LectureDetail.vue @@ -9,6 +9,23 @@ th.location 地点 th.time 时间 th.operations 操作 + tr.record.add + td + input.cardnum(v-model="newRecord.cardnum") + td + input.name(v-model="newRecord.name") + td + input.location(v-model="newRecord.location") + td + timestamp.timestamp( + v-model="newRecord.timestamp", + useType="datetime", + showType="datetimesecond", + ) + td.operations + //- confirm-button.remove(@click='removeRecord(record.id)' confirm-text='确定') 删除 + confirm-button.add-record(v-if="newRecord.cardnum && newRecord.name && newRecord.location && newRecord.timestamp" @click='addRecord' ) 打卡数据 + tr.record(v-for="(record, index) in cardRecords") td input.cardnum(v-model="record.cardnum" readonly="readonly") @@ -18,6 +35,8 @@ input.location(v-model="record.location" readonly="readonly") td input.timestamp(v-model="record.timeStr" readonly="readonly") + td.operations + confirm-button.remove(@click='removeRecord(record.id)' confirm-text='确定') 删除 page-bar( :current="pagination.current", :pageSize="pagination.pageSize", @@ -31,10 +50,11 @@ import api from "@/api"; import timestamp from "@/components/TimestampPicker.vue"; import pageBar from "@/components/Pagination.vue"; import moment from 'moment'; +import confirmButton from "@/components/ConfirmButton.vue"; export default { components: { - timestamp, pageBar + timestamp, pageBar, confirmButton }, data() { return { @@ -45,11 +65,16 @@ export default { current: 1, pageSize: 20, total: 0 - } + }, + newRecord: {} }; }, methods: { - async loadData() { + async removeRecord(id) { + await api.delete('api/lecture/admin/cardRecord?id=' + id) + this.reloadData() + }, + async reloadData() { const id = this.$route.params.id this.lecture = { id: "{FC2D081E-FF21-4D3E-9ADC-F24BC917679B}", @@ -78,9 +103,13 @@ export default { (pagination.current - 1) * pagination.pageSize + 1 + pagination.pageSize ); }, + async addRecord() { + await api.post("/api/lecture/admin/cardRecord", [this.newRecord]) + this.reloadData() + } }, created() { - this.loadData() + this.reloadData() }, }; From 97d23566ac6cc188653150c22c575629066b089e Mon Sep 17 00:00:00 2001 From: Wave-SYJ Date: Sat, 10 Apr 2021 22:43:57 +0800 Subject: [PATCH 59/72] =?UTF-8?q?=E6=89=93=E5=8D=A1=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E6=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/admin/Lecture.vue | 4 +-- src/pages/admin/LectureDetail.vue | 54 +++++++++++++++++++------------ 2 files changed, 35 insertions(+), 23 deletions(-) diff --git a/src/pages/admin/Lecture.vue b/src/pages/admin/Lecture.vue index 2d6ce4d..490e9aa 100644 --- a/src/pages/admin/Lecture.vue +++ b/src/pages/admin/Lecture.vue @@ -101,8 +101,8 @@ export default { changePage(pagination) { this.pagination = pagination; this.lectures = this.originLectures.slice( - (pagination.current - 1) * pagination.pageSize + 1, - (pagination.current - 1) * pagination.pageSize + 1 + pagination.pageSize + (pagination.current - 1) * pagination.pageSize, + (pagination.current - 1) * pagination.pageSize + pagination.pageSize ); }, async addLecture() { diff --git a/src/pages/admin/LectureDetail.vue b/src/pages/admin/LectureDetail.vue index 1bff73a..5a52b53 100644 --- a/src/pages/admin/LectureDetail.vue +++ b/src/pages/admin/LectureDetail.vue @@ -2,29 +2,29 @@ .admin-page .subcontainer .summary-p 讲座:{{ lecture.name }} + span 导入 table.list tr.record-header th.cardnum 一卡通号 th.name 姓名 th.location 地点 th.time 时间 - th.operations 操作 + th.operation 操作 tr.record.add td input.cardnum(v-model="newRecord.cardnum") td input.name(v-model="newRecord.name") td - input.location(v-model="newRecord.location") + input.location(v-model="lecture.location" readonly="readonly") td timestamp.timestamp( v-model="newRecord.timestamp", useType="datetime", showType="datetimesecond", ) - td.operations - //- confirm-button.remove(@click='removeRecord(record.id)' confirm-text='确定') 删除 - confirm-button.add-record(v-if="newRecord.cardnum && newRecord.name && newRecord.location && newRecord.timestamp" @click='addRecord' ) 打卡数据 + td.operation + confirm-button.add-record(v-if="newRecord.cardnum && newRecord.name && lecture.location && newRecord.timestamp" @click='addRecord()' confirm-text='确定') 添加 tr.record(v-for="(record, index) in cardRecords") td @@ -32,10 +32,10 @@ td input.name(v-model="record.name" readonly="readonly") td - input.location(v-model="record.location" readonly="readonly") + input.location(v-model="lecture.location" readonly="readonly") td input.timestamp(v-model="record.timeStr" readonly="readonly") - td.operations + td.operation confirm-button.remove(@click='removeRecord(record.id)' confirm-text='确定') 删除 page-bar( :current="pagination.current", @@ -76,21 +76,16 @@ export default { }, async reloadData() { const id = this.$route.params.id - this.lecture = { - id: "{FC2D081E-FF21-4D3E-9ADC-F24BC917679B}", - name: "“工程伦理学”系列三讲:原理、案例及应用", - dateStr: "2014-03-03", - location: "教学3号楼团委报告厅", - url: null - }; + api.get("/api/lecture/admin/detail?id=" + id).then(result => this.lecture = result) this.originCardRecords = (await api.get("/api/lecture/admin/cardRecord?lectureID=" + id)).map( item => ( { ...item, - timeStr: moment(item.timestamp).format("YYYY/M/D HH:MM:SS") + timeStr: moment(item.timestamp).format("YYYY/MM/DD HH:MM:SS") } ) - ) + ).sort((item1, item2) => item2.timestamp - item1.timestamp); + this.initNewRecord(); this.changePage({ ...this.pagination, total: this.originCardRecords.length @@ -99,14 +94,27 @@ export default { changePage(pagination) { this.pagination = pagination; this.cardRecords = this.originCardRecords.slice( - (pagination.current - 1) * pagination.pageSize + 1, - (pagination.current - 1) * pagination.pageSize + 1 + pagination.pageSize - ); + (pagination.current - 1) * pagination.pageSize, + (pagination.current - 1) * pagination.pageSize + pagination.pageSize + ) }, async addRecord() { - await api.post("/api/lecture/admin/cardRecord", [this.newRecord]) + await api.post("/api/lecture/admin/cardRecord", { + recordArray: [{ + ...this.newRecord, + dateStr: this.lecture.dateStr, + location: this.lecture.location + }] + }) this.reloadData() - } + }, + initNewRecord() { + this.newRecord = { + cardnum: "", + name: "", + timestamp: this.newRecord.timestamp + }; + }, }, created() { this.reloadData() @@ -124,6 +132,10 @@ export default { .timestamp { width: 160px; } + + .operation { + width: 60px; + } } From c907cffea38cf0faf33409541852809d7b25dc30 Mon Sep 17 00:00:00 2001 From: Wave-SYJ Date: Sun, 11 Apr 2021 00:28:28 +0800 Subject: [PATCH 60/72] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=AF=BC=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + src/pages/admin/LectureDetail.vue | 89 +++++++++++++++++++++---------- yarn.lock | 80 ++++++++++++++++++++++----- 3 files changed, 128 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 3ff9757..0de33ea 100755 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "markdown-it": "^10.0.0", "marked": "^0.8.0", "moment": "^2.24.0", + "neat-csv": "^5.2.0", "querystring": "^0.2.0", "vue": "^2.6.11", "vue-calendar-component": "^2.8.2", diff --git a/src/pages/admin/LectureDetail.vue b/src/pages/admin/LectureDetail.vue index 5a52b53..63899d8 100644 --- a/src/pages/admin/LectureDetail.vue +++ b/src/pages/admin/LectureDetail.vue @@ -1,8 +1,9 @@