3_uuw+X|i2PA7%C$aPS$Ng|p2M3kYER{pEfS41fE5dPw?nRe%GKAUTyd z93TXV9s@8=-PICL1q8{dx{iRHRyMbUUV|X1$Cy*fas9jW(XsUAiVgz^J%@UY`uW4b zi5|SZCowz-0|-4w3`yjLAbHJ!5P&eWdUZ*25flIt#U-WcfDnY;^QGGeNg*HJDnML_ z&)cPAeX0(~-G45oGIWY>Z# >e)+;0eq--8_U0aWk2#~H*c6sA=yYwAP8~=c$ryGd^WMe|~wEHjrfBawp2{#gZ zfkc3Gk>PfY01}JRdVxfMSY$(IW$d2P2a6^FiA6az%Mc(n)el ;;%+;`trqUK3y?t)+p?M5 zZMT4g8;Q{&5g?YCGf-KhKq5c}N^0|_{ AX9|&-x>wDk!bNqO5_`f z0%T2QXrC7adWS@Syo6daYZb7B#OOxi+NPZBCqPal(SkJ!0ExvTDO~=I1c?AylMUME ztODF4=?xMAayHajxK@GQAQ2#IGeP@ZRG=qF1jxlOYsD4?EFr0RxBV25Evjf=DR7_w zkbkuPNQwYC2&iW56=?mD6aiwN6DsjY0V_ySg-22Z$Wbu$(MbV==eBA*k|IEy@ C (ElVr6*9wwSkE95Y$_X=K^+3|fBPjx8#0)*t z=II3Z^Zmn_RW6ITN74c$0>mZ!Z5CSkJAdLWK++2!ZDwRZuYsi02{6sKgv8^K6ahk% zWN#EGbpo6#wSok=tsxO0IZB$oQ2 ^@=&S9s3J8!{iL}AU3J8#z(O2E!6%ZidLnH@lDj+~=s;|1kD *!+R*?K z44-QIqWa4#5DpL$k%TNS#q}ET3E!@7rM0~&5DE~kOp%CDMaDOLjOw5KvVT_~1R$Jm za8hi2Wy)Tzl<*N>@!6w%l^IKc>VS}FoNvUEW!@Wn#`pOxwZ(D;;%!+SkYw<~Dz#)4 zB(;>kUhmy5y}!Q2^0id~;iQ)#%W`+)Z7E3N#l+I1s(^6PYuT7uWeJj6%KO(_6%haC zm8(IJl+(IoO#;MFZ9!rvrhj!&E6WogD}}qXn;^NQOq iWDGD!V3~7 zVG9>4KpX`ZB#z=1Dq4Uz3oS^T1$Hie2_Vic^k2LnX*b3Kq)_YxNg<()s}Uf^f?g|5 zkX%zI=DIEc;Rh$DAD;Yr|Lw=KF^@$Efgp(xh2=hU1qfj9Ba{5# 2CrvQw(5&=b!%&DaHS%EG9A>rvMa--&^Kmt&6+j*~7PvWic z_VSwt1UN|eTcrRfL2|2V<89wOAZy^rVHPA=2~964&@>>NlwWGt(&a!xFSK-fukAG4 z@=|tNxlIG|beA5|rGLL0meUIfk{bjYXw#+vv5b=-u~f64vINLMECtDd7@D0FXc~~a zr}RA;{|ORfK^rfwX+XSQ86-#=&uT;Wn+60Oyxwkj4HD`tWxBdmO6l|UG!F;~biQfZ zmkN^Y8n#|S^MDWl&o{0M5)>ZSx&VZ85nf~J6-GhgrEL6iyMF)#nR$)r2#~b=vTx$l znsoyR!UIX;!!4R|)x3MltCbJ9vMWG{9|`0QiN!Nu_`23O5P0^MYyIkRzwQ7bNI>HG zD^PqfD*_~5m$=bT_EUi_0r}aql(+=!l|&IB(fLS@wBNLAK#;9xNa!iO4ghE;OR0N6 z2r`g(joGXBB!7#4!VV>5w<<6MAc*35Vp|gu^&&*q&xQd62|Xc6@6t!=sAB3x++-gL z5LEPngs<+_dI^Mj5hCkj!vTVfJwigeWcCWU0m6L(j;I)KG>m4u w|S+Pg6j=#`PC`Z(=c!=)loLsLncR28fd2tiIDi4jd))>G3>d z60qWbW`I;|Llad42^TP$a8^#fC}0N2-7dX tS)yL&z*@MR|N zWCD&7!>X*1&Ofpew$tGN0S@nb1*PF2C3OCQ3idV>Al`6ruEj92WY3XP!n;Sz^^7(R z2Y-l102qFhfP-@_5C7-NEb(2FIUjmm-#s9};r%^%dX8Ff^qQDa+SN5684gdexf)gz z4tfs_ulyq1Eg&QgJ%^ukDFH{x%ebCxQQ7Ae=n@d%@II Z9iv-UfQ$qOZ5=&%OSHcmKz~RW?;~oIo})xtOC( T;i2GKyYmI7_4I(wvAwdBSIABedq>| z+*BYqwkSPD_EB(TCE`!J10=fSJXfU?^5{`|^-qAjYT-Ty9M+G=xI4YBf`4xI5+H>_ zDL4uVZCs52F&6Z=I39Tr9LK7(^I3p6#tJxibVS1{N0FV279dUnXE>aSSFwc@5Fidh z3l0ZSUy3X{BS4Jx<{k&bD&t~RTqOkrh@tSnp?e&Lf(9r`fEWcqa2N?0teC2RFjmKc zX>zkWg5ze%+;_10&Bm&LpnnqM^_C$K97M4bJJXEnfJ{EUOCP6cWB&<`#sap&-4K9q zBaOSwEBvpv3;ybayqf&QDh>e%tpyT}$jnDJhJ(O?zmffvZ#D{q0fgpoM2-vzaB$8f zIEdC5777p~2NGVl84VQt0S
l?jT^_Yd?K0%K`(`rfWO zAiSq)sl 0Zz6F0D6UIV_DvY z>CZj&e{Tv{ouH#jbwF@}7ril+NdXH5tcF+k5&{s*2GJ b3jHUsxCkIM_LGEGU0l~>^95H~U1(T1DpDZ;X_Bjtq tPX7e}0RR8rZXj3;00006Nkl QQcB8@C~9nSPh*J4rHe|* z^&A>h-zg&|mmES-Ut|mCObO-IlyCRv_s9Fb>s{|}J?~oU`8~g9CA;n1uC`o%Ie|b> z<8hsK<7dmS1un(+GOzMN0%5r&&k6B}B+3g;?jNv$*dzIHQP4#7DX@Q-&>X}9-Zg~J z=W7hscyy6!3>Nh+aq{}!=K;Q}+aLYyyEZ=F(e3A%Xhn2PwBl=4?S$u#4D&T{E%O6C zKSEz;4ZLj&zmFDkzFF+LF;UUotID}`(W%2 vZ!^>cq*`ge6>*zpM0wR9(3Xqxn{0)(= zcOtR?P0N1P@eUAS7V+Se4rSC I>G6GhWSaz1uI;G)nnj6KMF8kxq2=lUU-NH@%eU@$K!>2ep%*~ z$5EjpZUvZEo vuc3+r==~wsqe_%33j;^tt-jajRvx$JZsodvjxIW$RLg zZjXcxR{yTH$r`)8X#ExWymv0a2oV|YTU?;-JWw>T%}Dvjy9G0OQ7k-jF3a4}owr~g z6A)O-S5e}K90to=Q|Z$MY*CawBb_P>zeeWgT`Hw k^|d8m^WxQPWu=2KM7)4So@~H z34zka0e#!#sB8d{KXB~Mjl2RNt`;u7vZyQo2`)pX-$Z5tNSg)kobo<6S$7jab{sbq z>F^+FU%hr&ZyX(@*7Frg$Nee5 qzod4(>^(Xsx7e!!9d*ZjUb^vf zj@LKyAZ*vky0uQ%jd+mLQFjlmkDWil6cMM3!Zb$QzkF%{sr@o%R855uKE(KLoP4Nd zer|4@$Hc^5_fa!m(njbi-HlBFa^*{xxl-KltX<1V;yfb}eLmXGmNN#UU@Se&ide9s zl>>cx!Yopa9a>M-IBM@~ine*m{x()#wPt#2n}aANr(=9(^m0mf1@$y=@8%9mp7T#u zO>WSm)efS5+ck^%KA$%0cC0~Et&i}Ijn5WJQp}K=AXU^)y020A`9^}-@isDYOx~ZE zKb-lkJ7<*fmFR9?`R2PhDmOYhrkFcrn%rd&A~tiss&Cb}f=rfnl5(7l{N10}zh8TB zy+keHLZ=YkT`IQOL1Bx;Ck}^91CTU2m0L+C0w%nox^@jVG;L0ODh8lpddx?wT?C}< z;Za{S-^h`G@NFo!-AQ2A(L*LK2?Vs|6y5n2j{E!h?rc>ekTEo7l2YnJmhNpZi7+Pu z-Y#jA IdA;aoC=&P6}HBWfP^snA(*Yuw?%ot8OZ6<)4 z^tiAjFkGAV)neDsr{<{V-~A;n)zJ<0o;zN2^1*--z5aW}rqb;jpNo@j+Tfgdt{op2 z!%IInWWhMCyRyP6wb_~pA^JgB9&=yoq^+c*Xw{ruL98tpa9ugiBsj;>vQ;(gglaOp z@@Y?Ge+cV?#;m@|`wUA|F7)ia*Dz9Y&+Dll*$KMS;}#&${Rv3@ x)<1pkqO1WG8byV=)b0zumQUsE3w)3C?ghbWO4 1*u{Fc`jMQIC*b3+FcGa zZTY8p@**8cuRdF^$)D~S+)F9THcZqWACK}|PT9Y|cI#a?F~GW`Q}&Tugp)Jhn}WR_ zfa|7XmJ4j;7tlN&1rzzcrDUj6khjmFY=9*%qvxRcA1>Q8ge>l*&+OrfJz3a(!_n<^ zRkjV*IjG`hubrY^Yp#9|1%t+rJ5Y!c&ojebGY4QX%YtuIhA1T~x+;7$vjA3rPVmWc zrQ|XbBV~cp!i@DSD%B2h+09A!G8w?BIOXi>Lct=H_RG}JM?oGTJkhY4-1#%LC6P0N z=WH)5$9w_3AP;pO`t@4DhtvXE-5)O51l0A5W)44~u&2TNiNllnq_aEOqTKztnE)%W z{>mtX`VAiAP%ug7y)B7kKC$nE7;Z)xBYG&TQm2iBv?JEN+yHn#-Rn=mK-2!r!|Tuo z()-5Bf(LTf!XdCa_ILzObjZ X{*TX}P=jmvl&Xx#A=lO`6TrU3^!3+2FT{+4JYdepaRYehuDNx-r|6G7=#= zC^A|emNFZ4E3=Bxem4%Dj<)$HpMcsNAY^UD#o^=psaGr_5c-6$?n0rEg?#KDSqFqG z!%2*jfu(5#)T4JpSC5epu78wU#w3Bey&JinIl{F_xQywmfon&y)ov#S2^6QAg UeK+qKe>NR0D zuZ5$wO Hu9Wl==0;<{c66?h?`KF$609UQunit;4a(^(1KwVoBIURo({ N|1Z2pStL+e56zIb bkHRi{{o4CUhFdln6J!L7Nj?u19?=uA2pc)#mcX>iYF>Azppr3JEIqW zqpwTFcYUEhQoNq74n*L28GNy+i6Lo$UFS7QIvGTuYG5VPl1)HVH^pkoDQu|Wv7zM> zpjt&x|6{(9T~OQ!6ED?V@rSx&@N)d%>ojg(s8(Gks9r(uOia9TBv`+k#vSuWdE+F^ zyiY&1un=95AxVM9t8R)X^*gWL+CXfoDW-CzxoMteW*xF#IQF30?V4hbygaz7(ChVh zYnV;~)p7WxOTgn`2jGJbZ(zu{-0((8>NCX(0%39SoP$9MK1DA5H9jsO94L`>3DLWc QaSwsFZKqSY!|&+-00g6_OaK4? literal 2892 zcmW+&c|4T+7oHg}&Dfe5$ (SEsU{e7nQY0 zNkv>-lBEUrW{Jv{8VcF2^n1I1yvyf2-}jv7Jm;Lxdy?&Jeiajz6-FQsVoU~|1wZ?K zUT7isUhmjYf ^V<_sgKKfx?)*)D2u);o=5PKD-(=~7><)Em zd!-IBysOvpsA!bCCPl{zi3|b`iV%HMg0szB4t5K07=VwU%&=^6ktR{Fvl*L2^_YCT zIurYKecCvpO*bfbsut=)9rjHlU!A =I`F#d(n7-CHUaDcrQR9&RY}BY~oYiVXX=Uss4P9jB1w>PP6%1cX74&AM}8|0cxl zInSDLi9>Rx1^PEFPzrNfK=_XHES(z`ZMyG^B bJ?m45KY&E^YD*Q#J0#DCqm1%2LGNjJ4VOmvz9 zJd4SDRadsQV^_aI_SC(I_d+OH3_UKY_k~IELK?V0-)gZyofcnvz3kWd?fa+gH?*-7 zMaI(!`Pe6$%?QyUn{8I}*!8xeL-yhV>mfg)E(B}s{e_$Llo6+NWUzA-H|EZ+u}vip zLsprXxU+-TLX{XLO mZ$B()>QlV$f4XGh zf>WGd9aa1d3Qas9>lfLj*+y4i&2Nvi5;BZ*RSX!Z8ie!pO}`if$S_aEd}@0)pqz8h z#=_ujV*}>Z*&$bAqE#|zR=(k5_$VqRRGGORu2DeHXb>ePZ4SLO2sw7}@yDAhZjrVq z=I4Td)ILkSO#NPAvX=#b6F$;nSEyA%IxVgrH==i`PvI+=WLKuC=waA6HSqkh_LBF4 z{+ia(=ZRRc{) zucU?c1;E*;2U%)+yIIFA4W;oM$+HWZ_G=eRkKR-0T z$aQ7l+cPO@% 1wl!JH>0S*}wjNDJ~U!yV!py- *~^h^2wH&q(%bE4gM;vg-Ch^CY~38- y%f|-K;-uNV~WHWLl3$Bu1 zD%z1bkh*ZP_)KI|*d0PvMYIFd_hXb)N>#mIrMfkC DJ{J>l`5}Ku!1m(k8{};pJPluAbojv*)H!C7%F(EI89zaek*OW3ye~H*qNC%gSK- zhs_PO(djE{zUhq&v>tE95RKI6Z%gvHj+@tsy|ZO8dcPYtD| l-{MNS2XJao-h7v +k1{nLHRsAO9sjTgU5@8Q7P!3(?a!t z5Reu7oeq$IfY5^DvMB3sC%HHKt(yX29?qWY7g7+AfkQCQ)e=D+!{3Or2e6gZp@Fui z-DA)dca-UsNeD<)U8sCfkqzzyn9);Uw-uh)6jRhs*x{sCT=mPfmdEuih2@uQ*kH+w z^n>h $1HPc2x@<|WTp>zm(CUaeOpsa zdp0cs)h7E#Rq3FZm!BRgPRoqwvu%u(22UTJC(y0suK9<6b46wc_2VlDeWNG6Hb_L*f z`@dH $!g{3H~xbePeStFBqE?KyK`3husQ{-tlRsMz}ND>@_o=CL%&M-H+dBL zJuOZ57NEW-1)Vy3mNfx0exUDlH3eqe)1!2s4`98H(|m5{BVc$^mi4??0Ge$;e5!?8 zt>!r`q!m85EPS^;0PYFTxbJK5pZlo6zW57KHBl9>W@_-26W^vE|Nig>Sz2|9Ez{-P z9PSGJVo_j&b%X=u-mCD9hlzDoWUYpx&`m{>CWqiI6gya)ohR`{!fShXJ%REPKCrlo zi#d-%;|q1xq^uFt6fODAUYI~5MnCQ)FoIzjSVMQxVTNZ|cwr`jYWB*jVF}JKLP@Ed z3rkM2p07!#Si-n5KE<|7kGgZKVVdusCn~;q;m+3<`zso!l# EBPd-^3Bwg_ zP2G7p2*|5v`29ErOxh5}xx;3joFpeELE&Ca zwOv|+wJyP#$im^oq)JB?;O;Y4yj-VZH;4wRZ)TJ5@d&89tiNa!4i{j-B $UI4TU!(f=f`g}jF6zWIq$y$;OUu@ik%6Zs!(AQ94i6% ;Ud_lWoNf^i6PnVQOe?JKo-l&48Bo5$42ZSB_KpxB$~Ih) zU0K6S&aQJSA-P0&Rd@Fp4hS@(XmISQk;h{tYQ`*ZXAYts|5Dqe3XEZ;AKf}KMcXjJ zb(;= *GgxNh;eh@_qlDHA~a#I$_a$uI@RkVh!h!?g#{Gi}4GOF?~| zT48pELhY0eY~Ob_|3J4;Paw`-ZqG-lY=$$g)~AwfI*}7U{7oXp8`B0{BW!Svg(YM` zF>Wu%`TD)RtD1N_Vq#h80s8VTFX5I86rT&RiDVMI2r~9%&cbWVut-!nHPxIVm+ biWL(TKe4j4*>+?$B%eYUo5;63;kS%1rUcela1-q91yl3m?v%M4Q3wD F{{e9i k-KmtbzP>`c&_yP$G0|ntMAb}GED98yo ze2D}o2 +Kbr4+gusWSqN2x^7Mol>rhwetEk3 zc|8yF+tWuIhx>ue2ZLQ*P@^l gGCxD!M#sr1b^&l={{_S&IbI_o8u{N&49itYr_H{sqW zF`qI7 DZ$TGn$i{eTUy{x({?-sXW&KD7w?=RY{(0@j51bKf$&daJob@v+vms^hB zxVsQU<&ZaPeyhgJiV~2y;N?=wg&_QCRnh6!NH8ClTGa*7vqvK(W10mC;8M%MPqnHG z!n23Pr0cbh`e%` 8Q$L3f8bDLn7+M^)7^i! z+P=STCx5oO3{VTHi5{p{i&FP2Qdf}8_)juF9Hqw1Eo4aUgF9v=fZE{THK0~mBjxM7 zt{`#>O&yw^E$&{PQ}^e7 0u&@xy
Wg-Czk_e8w#UMaIc6G)b9&vYhZ9lJPU9TeI z vAkF;^~2*@yu!~HPNH`<24f51RkfC)tzhR}jQj$wX#3arEFp+gi0 z_s2b*WZqXp3u1C-$Gr7%(0koG8`cI8TYnHaLe?&T`}lInrDt0AiRMW#tRRt#o@Xlc z*=sL?EU!+*do3+bw(=f M_)QB*GRMjU0v}8$NaeZ5@V*Iz6+~~Q zoO-WV-!-+(P8caG+g_XLEvz8#6&fGjA5VP^{#t|g)3vNvXhHPII1iNM*o+c3(SMhk z2rUTa1tx$l6DE^kkjn`?7rKFgHZE_6c@SO@KtNMbc8gC!n6M2Dv~hVm%nJ$v3Tz~B zga8FO0;b5*4C0;u1#w>@CRmdI1*u7&vE37(Anr@V1ZxtYAT{YTwtE5;#C?g<669Vs z1Sp6NNA}Vw0SeM-VL2=t0u;oCBY%78lmG?kw6GkO4FL*b!!c4Xp~gxpR11a*ULIfy?fPR yVuJ&Op0pXNnAk! zFDqt0jr#2|t|0x^lp`}FKz~6DVOHsiXTq%5!wRCSOJSjytavkbF8S*?GKY!WePuyv zqaWK|el7U=fhA^7XhHPoi>22}khYF7a)~r+q=)(oEeL?<(re#d#{r_C$z= 9f95B=hkt$)%i%A%rtf89=4 zpAQqzTSH#j+F3jB&pEKV=DWG0^~d+dbKuZCG8aUpkmTP#GM@1hva|FpvH-dQGZN(x zBtEx{06qkYn)EOS%mn#_A`^ERPn)ep78C_}Xovh#oPeG&aB!4b6c3Jo64!bTm qn4d=jWK@^N6 0x zqtqOe1xXE9d_Mp(K9dw5gTsJL$nn8#zW?}k;WtTwv;{|qP=6AEVE4DV`r}gT@#{?r zfh0jv0#)CKl9-gBIXON?opu&U6GSH4N8Faak-W9QE#>SeS7j#*9i?=6DsmRNeB;k8 z7YnlH4bNxTir-0rwa^t)Xfd=h6Lu};zRx*j?k*N&AFSy|DYO>c-ymFOq^yLQ%jA|M zmGJ-fmkW{*WPiyRift UCuH?w>8UyVxt|nX zC%~W2^WRE9*$5;3hs76 aurL@ww%Oc13*KK-6b@psd5MZJt zppdUoj!(8t3WD@02`DUSmu*Wqe&^JzAQ%QE0R_88Ie-3U*|Z=S4kZDF^^I~IX4t$S z7#1Y~h4e-_j l7PbH%}kDcNc^6o!5`)B(?9gsl^_@( zB>{!=jdGl4ge|%g1cRa^pm4lVj^k|pe5Ff4Fvu*D{Jfs^wla-B;$C84WYRjktooHp zw}N1h=6{l)Q?^e6oy&oNb}a}7NJ&5;Ln|alhRhdr*}Wj3K}kTtumzC=#6k#yfl?As zFld3~0Ie{BV6c<~6jroga)4AQK`>xS0tyK&pd6qSP7n;5l7Pa3)~6g70SGAw$WRhc zxS$1=19ZX)g27V~P&m 1pxp`0tyEj<$q8p;ROK&m1Nx9;`{JzzffprpUO?G zD+Sq+o9 +w=4P8FNbamE_K&lPih?tWTxJZII2H5B8X9BM zwz-`s#zE8+ _7 zBtc5EWxNguP>>Fa$RXq-Ktb}cWzQWDpdcL-kweHwfP&;>%bq(RKtW83$WD4CKtXz~ zEXQR+fP$D{WGB56pdh_gmg6!ZKtW6}vVW6a2~ZI4m1TZa2~d!#_!- r! z0SZzTKZAQGKta4$i1}3|KtZbFuN$1v&l8{^=NWN}zyv5r;No-W=Lt}d^NhGfU;-2* zaPc|x^8_f!c}Cn~Ie~8Wpdj6pk^{*>fP& F(uuz|z4<8FD8Qs7FBO?!xek1=0TB=705(Ur3-80$B6@T&@RR zPZDJM{<=NT7oQ>lw**q>Y?2^KA%D?G-IrfTpd^76b2V8IHInZ|N|u?i5((&BP24wG zkoS1w!}}w@l7LeJ
SI)WtA-G8@(7>j?ikw7&9^1gWb_Bu}ZeVsuPCVztL^MJ8P zj-u>|@UaL1kwULvaMr+q+Ayf8Ap5-bqI}4LGYi{;9yrLsj)Mp>NSj28_xAF (|Ms9!r1! Rf;3PhrdW?aY*#_*acAU42vCql3dJ<*5TGD+xHD=a1Sm)&g<_g@2vCqZ z+!?hI0u&@uq1bI71pWsA0RR7GiJBh(000I_L_t&o00B5OMVUJO%K!iX07*qoM6N<$ Eg6l$|kN^Mx literal 3266 zcmZ`+dpML^7k}SjFoSbkMj`2qsTdJ*O;h7OjLXaz22pNNA|!QOMl(gnErz0Gj@*V} zLT54xCq!k0ba4xZ+&eCbTndM8`tSSW`~KMb_pIMq&t7})wf9=jN+vqlN+Xq#002na z;jPF*6#N_#V#2x7y(%97q^{aonNxlP=l>Xro-mS0w4*Xh#Ho*>GrV&9vpu3mE1R(a zF6MVk4a$4%ORVTXQpaM3%mE}2^ro|#Q58R{|6_BZJEL{+%!!e xORoM_ZetSh>~s*anHB` zfzJYqX7#F%+Df_=#0Uk8RSm@(o267~J2@Ojb^YkW>#^KKGy-}qPe(*j3heP&fL{l< z=~9}85u93Z?5F7a))pVK`>fgE!?wo7k#lnfy3hPBx|(MpnQuYU{EaVDZR;~5_t%c> z#KmsgpDHu|?9 5v9-{VHT?bvsMvzswlb+){;jD^>uqto?ixIiL}wHVTIEw zGwrHbhrvH_Unk=_3s_ewW_RV4LhW))R#uVJsd3NfALr-$AdvaA&UI>D+Z+bDmWGFy zU2Lp+i$nu*$M4Rvh)oI63m%e8KoHeahvnj~&7Pk5!r3ba DN_41MdT`>{GADQWQY{nWsOJQua#nU$Qns)afktCnRzh z13*viQ?5;-wo{$!&hP3}1rP_%n#wQD-I?=;Lv#F!ilBrrF*kPiq!iu3-k>&PMJ^-? z1H(t{_g-XTcSn1SHgx3+oeYatuX-i0`=FQOFSVgm@48|ecufy1Yf1nU@Qk{KMbI6E zV$8Fl_v>w$RvQsdi=srCMXkF>z7vSA*woGpcEVNYYg!jfKmMN6zACMHZJKl3g?tH= zAs4f8sC*-+oRs%5??93rs3$uB)A9iwmJ6RX2aY-f^ ZL7@GFmEzMfp^vf+mRT&kNJMT
%D#KMnX0MEyxxyJl zrP`p$*hBhM^|yPyA}g&D6DP?Y*qiCTD4!f%q!nD$q(wB@W6cFphALDy>t5!PpfuP! zpfDx@A@g{ii$me;IjX#+^&|VNcg}fXHX~^V^b@_GgQRg1c8%5}NxMSG>Y%DwIxk|+ z2=mJ`@oJTGjn(sZ#wY<1 a9{0qa~J|Y&Rm#-Lv<>Ez=mq$Z`cK8P^Pz zm#w8ns3d+5QcR+^_?A`L+*Iku;=}ywfW_(n%3VyH480;>I0{|AF)ORl;_%pm@s?28 zMORe07P^*#AVMsd`CZREfV8UH#EX+}pZB{!VK51mj&%3c-?R Dh=tZ18%D(qrzv8 zDxoiuI}kDzw&qHV@_yuR+I%+=i`A!nc|&Z?Pmg;%;Yp25VRqEs`{=3@*w606;2z#y zY_t1r927|!AIL|VX!8%RFAi0(vz=GpHat7oc(TcT?rwK8R)cvOyvy#h#KnDLcEprX zW0jGUoaRAxpEr(zjbpj2epPByMBzEj6+fxCir+sK#Gs{)mMy#a2rocZW^@)*8Cmix zXn@&bp@v^KO~>DnFYJ sDTRla+oBVK&ad!3~i{i!o)h+M;-l`P t0kqHGUiHR8v{nIYC2=yQJWA}vlbA_ug+6{o zvlu?!BUqX)@k{^gev7kKT(Eg@OMw`VarV}J<|R}ps=R4R=iF|{zqhTy^aQ8Me?@;F z&)N01rd`=EY3N2QsBn$<`B0sm+NM!5XjP|Q36+NkHZx~zdlVV`Qb+VL<=@ D?P7V*20I?@?YU4U9Jcx9&L6Fq*sGzDBs zn%-)$Qb> f{kY$k~&WWf%6AH=c$BVF&)&0y2NPmm|M~pm6+*No@!9+oU);` zU}B}<_XGG3*?n7K#)x@7ZN}Jc$d&8ZohMe(#cYTUJ+gEnUM3=s#~G;<(T^J` %QkhVt<= zT*P#Ei#J@4gBGPjBY~hGNR*@Y;27(O$7z~92t7D us7)^>j9=#qGy#_b40e( z6?vRP0(arlrj{c08!F1Bw^-wbypkmJ&EnUSW(L=&G+VfMum6cEK);$$mT-QoHD;OA zs3Um0 =en3uN6( 9>#sS2Bdf GkKLqe2M$}Mq&1L$>u-)I#Q5L7KkE)NUsht(5k z4Z?LAUU#=gQUTnh44Jis3V=S3*=am9GoK+eX;Xez> 5%< z2 u1$=B0mnu7)-IkuP72 zdxcz~t*?J*8qN3cJF9|r7@{(KlY3pP*KWary2*@djo52@fp^)5wO?qU2J9H+=cMQY zu~?nuBASbI5Xt8>V}fGvhW@!uVAZvym|le2gWUSQ9jCJ^2sc^J0p&E!FSs)1vU`ru z@hB)0StF)k;yLx1pH;u|ub9l=n)sgFU^T;Y*;?V0-bZmKk8pMV{R18_8;*D_A-S0A zFn)X>@@gMaBct2Li+YRDu_F!uJ3E-2`BGsgBKETd5dpT=%3+>F?gJqM*jYPSRay94 F{|~Z}$3y@C diff --git a/mobile-h5/static/menu-icons/oa-mine.png b/mobile-h5/static/menu-icons/oa-mine.png index 9ff85732a223cac6e1b0483b488ff0ccce45a111..41bfa6960434a0f53727a6a07ea6fea7349750e0 100644 GIT binary patch literal 5475 zcmWkycRUns7{5D*BXUDJLdV_N;f(BY9M0aGl7x&xcIMeaI(ubjOCq9lAx;V@qm0b5 zw 3U*fc%{0H6R} z0^TARxZ&uXUm(vSpn#7Y{v|%8K$u$ma3DX$TQ<|_^;1qTxBeQ|L}MqxE1K1+*cZ6S zcARxx-w&b?#Cm$Nv$$C0`DguS!nSda$S50mxwy)jI+iXHDE-A1(v8^J`}cg&|JWim zUK}%6b3fYQa-vYtX&rO407QyhF0yhlmahz{%i$xOI|jx#DPHWg8E<_=h@W_0$!47H z*hob&z0((6pUr=$?xaN`9CT^H^1bZ+%V!y#v4`3Xcwta2IQr=suv6-DW~Y7Z3wVq* z6-{69WRGjFJk?ZCxC8KySP|oBw`dUOig2+2L=ShV2HtuiY)(1v{pbSGZ0O{^N~fi+ zyu&qe?TiS{wTVE1u4YRpmhi$?OUirg7g--+^H6lS4m^ Q;4Jx%KnW?aXmRv z0Z0tcNl%Y=>WCu)W0n2I@8|y0idvU&@>-=u*)e6Gzw*v 2KH+i)b26nmDT??ZyErVH~G%PL4A)}9u#jXUL9d25R&^_(4@8mM$vlbb? zIm~Yp?<8|Qt+^DAf!IG}skf+oJT$zzNwpe1h&b?kBF1bk+#VrJ_75qZH|RIrQzoW+ ztw&$r*3;7^r2HG4O0w=DWVVaD5bLkkbM2U|aASb+8)apNy6@kzHjV=y3+}@)Uqb N)N z!3kWE>c ROumQbsO^aFPZLVlh-G$4yzV5s6-ysos z52j88$2%W4#>J{pZYtxbFPY%xCsy&+nNu%$xbW)DLQhniuLCoW!MLMZkn9}^4bcZ> z1t=x9#uvp>tiL8H*-r~ltZP&8uizkZa3B_DRv=5N;CDOBSEoQmWAnY!YamFx*(1-& zYm19ABpFqp*Y5~$3MwLO +%K8&%V4W|usk*E{bRt*g_y`OZjG@AGZr_vw!(oyn49IQl+y8>bKlaW{qKN~K ze(vFoY7!;Q@jT5|jqtlM(w8|Cm{|bF+;X27*qIn+`(7+QvwT{Gm1Cd~|5*KFFKV%< z@*p)e=dtG)UlGQ7)>m!C`3`#Yim*W}^r2Q#!uO$H(m-H{oXs^ntLU0~i5 nJ}cnYMMxqf`b6k45u zB43wKOcwCsw&XX#;(t#(;QH;G-RcHjY!4J $65Y!mnZmZ>?G*6ZWNj=pwTBVAc7k zo}H4NfBV~R`Z(m@BTvf5v}4Ey33c4l!od =qn)NV$#)A%Ns;#v)&5yFuXQWx;eA@VXJWc)F7SFDV@zB7E z@^+$(S`>(%$-8e&{xrTTbCYJGhN)wa(aa9-CNmnuthYYQoW>^Ktc}$wISNKd&ds{Z z3`7&n*BZl{4hP!Kk><2MT#j&v1VvxpJv&`>?x$yof{m&f|LSJIHd-1(BaEM(f;9>| zByx;-Mr-cR(=YYwoP14`Un;Du6@X;KWNv28-T_0K U~kWM@NHi@O(Q)&l^c?E)4XJ;wEzV>{~CU^`MlK_rJ9Q#X}Og zg+52lZg+O1pv0H$A}}Bqo}IqIkkv~HKfd1YY%D V+PNyk3{}E{qQsaYvy0I zFAW#d87M{nS|HfZPHwynNmdR(VEXzEIRo?qu69FX=LlOC#x *tbzur#dz-w;$?H zfCJGus-AyKD^H~ wD<8m`EYVScbEe3^N~bPNJw7rTX) zgwu(JHJ+0}GsNEXBN8v77{8_HYNsPJ>r*ZQAHU-2RhN)?c2e+;f`zw9U>G}ZR&VHi zdAL3<^Bp3kRsQ$55ku)+?$^X*OvrY>^#}{UA13{}BHY6b(|>%>R@XThh9-)cS=}Kx z`Bz~OLG>z1rA#w?fMVO!Qg*dh@(u*<8{vJ N-l=&=MzM=IBRAt}TlwBoxA- z*HWqETYwV%=2NM*Ofz>Z3QbwUkJ~KPqrow`kjj!(QU6(wgr8r=jv1#Nz zKe3jO94)_T$NS>7*hC0w7!VZxAk1BbOiia?mb+v*gbk?ng)l7rpA->dT=gbSsA_O` z_+p8Uva?i+ITk+|$^w58;X?L0G57F B}3)bG)AIxFze z*V&JM96{eF4xIZ1UPuYCJdoJqZhzSSoj3Zhpe;Oz=VeTsB25h=!QHXWb$DOntL#1@ zU9XBbW_XPkb(ehJNks!x#`E#hicAapm-zxbbq5@Cd#=LiR3q a?A`8pIqoxRl?8tJ z{vxoqb#DHQtuYq{k;JuhjWIf7dO7dm^0>_=M4B$e`wpGF?BoEiR9j!cPbR1Hqg*}< zBj^l}fj4AkYAnto%ZOC$?6c%mYn*yQ`xqSDz570ii3HB6d+8tH$^y{VSh!%9fy~?b zG6O|TIL7}Z9TdmJR4van)G~oqfh>YnL)$;QY8DrH)g+m)^+R5=n5_qOrUpiR%7)pM zu6gbHavXc<^rwr+tT3QrDwdX~OV^mB9*r5%(cU~|t?*Lys7rFl9TC)MkGDWVY 4`K~UwsLJ3KYfBQ*-_zWzu#RFRx9 W$BZa^ls|Kvy4Hkv|-12 zEA&mvKv|ym{YVTg6^dW4{y2Af0px#>rw#qmQjttqG1?Rx%8fx`b#yrH%xaIe-o@*( zjPNDEz(VW>Xk6eWw-1yIXd(643s2b$qp;gxnC27fXlr{`XQ#3YiPAraKGQP8{*Ici z*dw+FDRq~Ij9ErZCul+Js*#CMKPP!CP`8gnbJIf6ujn_NM87(_^UK>&2K}z!ys~F| z3JA?b`*4}J@_?$j7vF<}Jec?e5)wD6b|zeN6h+dldGO3mO`$nKy*u<7e7YiNhTeCR z7$qyn`!U^3w4h{6Nzwp>3~}(1z2?}ukfJBncRJa2BDvG`om!W|BX-~f1~Q9c>g%~% z{#do;Mmz&?{82_@X0!f2@=b6yQO!ChZ~U}%I2H9R(d>SGi$fg_TCP{;ds3mC{a1!# ztfWwq_e=vA`oky>=0dRB1uqf3(*(>JAD9Z`B*m@)oCl(rl_FqH`rsRu4X2kod1{I% ztTnmF#U{)-z(d{bIJR<@o}`D>HeT_5NjhjEzt50|YTQeaNBk4Pcv4+wVb~`Sz|W;a zUZFWK52*O(DhWVe+1r> 7g|6M%u0_q0GZlQRXr)R2g-<)Ew2>D;hc `!GS^8*B!EVlWR^X7jBrxDTH;^|SWu`Td5S;~H{`}}U z?-S0XpU2=`dc7o#&DUI=Tnd=H#x#10(}c*2>s(diE-9PjL2sGuX)s?gnf_V(fmtR1 zK+p33U%(j|O65=L{ufRju}B(#t=mO&+cPX (A4pc5K78-Jt!~ZDiXbdNHtjUns z$a64wm~Nu^hj!fR+>>{imf~oBMnjDhW82v3A0+YW(eoU!1A>rNID78 !|7Uqan+4>43JpX8G?4qE) zVY~G!rv;^?6sHw9oB7=b9$P>T)UM;A8_L>L3jk+^-&LD;9sTT39nCGaZ_v`IZ|d%2 zeQ&qhI6ZU7T~>-L=3G>~dhdRCU2UD4-H1aQ@BY1FXs{PfSSREWWMED((U`9*8&96n z4DNCcG>!*!zHT8)jQcH1aCE))f9t!=cd0R}?E2YAm#g+#VE}awn`q6K#<1NiNQkza zKUiE8%pJ&vOLF!-*ndS3RiH{5lP;pw*?3k3^v CyxQss) z{Pjiv)FhI>S@XiObV%;}2+)n4mJRDEMv#$EcsS|x1)B=b@nfsg+lS@cC7Sg@q!Ltt zy;P@so4*s7*k8ZSl|Th{*f+@%c?_Y6W9B}SuqgSqidae?zKZ @ofzm2vV7PP;PM;f^y1`u`gxEF<%aaH%i?tjAR5Jh9|CYy8zX{*_C}ebZ#`D` zZH*BPb&wv*(G!4ZGmulh=W51dIYBLygWrX^R&~L*XG6-bc!WJ^<}?KXJNi7eJLz4X zL!?@QblA=Qq~FzH1JT+FpZ(10Jq|T`N!Dz}vcLNW?~lgGq2GRLT=u*oBLe1JitARG zud9>+Dq^60qjLXhulS%0oB}4yR!Sa>r8Q>#{qovBbFvm{D|5nTSCa+uPr+xQ+ *HX7Pg5TXp5Fab~yuQmGfqQ(_l$m}7x$ObQFJ`AD061Q+nBGQUJ8r%vX+u@S zrfw%q6FxcJOIq+-XW+A%X8OWUMb+|LQjcnYEC{dK2ohlQ2XVAeG5miKoCKR|hZo?I z2=h^oNg*)PUb7$8lBA`Zlm6#K2)kh_O2iU&60?jet#-eqH3M;h(SJ0WmT(v+r=VKh z7f^oHFnX&vxWhB@$VL `a`UQE6XI KfQZL+=w*ut}^ zJx4iPviWXcTisn*xj_s{%D>0j(l_>@@g2jDemUuzk+dJuvom;~-euZ`;s3Zu2Z*35 Vtw=il)2E#PbhV5KjT%m*{{Zjq#eo0- delta 4426 zcmV-Q5w-5)D$OF0EPtI_cHA}+h9PAG+D>L3EN^CVW)-$q;p1$^&cis{@dhl7K3X_o zQ_Us-0)+zk`=rvm;8OU34=Au(-S Et-2)z22ntO4AN0@vyTD-q>t{Zbr1#I0)O)N=ZD8=|NHXr5&Qek zhp)1}8qg2XV*d;>){ES91IQ%y3jp80JUnC1_u*@_yAVEL&(Gme)>i}iAzJJo`U_+7 z0v`IZXf!&^)C~|soa_~fN$eK@k~C5xmkKa>0S|o%Fh_vJ9FPbFB2FeKTn_dcPAy@n zQKoenW`JCPA%7^W`?-64z!F!L?#^U5&>Rqfk QxiaFG>y-5MXArI08hS%GMG?3 zw!bPM%mlzeqdhiOKKWIE3DqMc)c~P!%mjkN?;!N kVV_NF^sfqw$^{DTP zN-S64*nc_MkMwF`5g=MUdUe-%>+LluX9Lp9(en-swHyU{P0Cq-07oxJ5lMD#1$u1Q zvj91F_o(%~73i^H&jO_P>T!1$zG2THe7buI?_~xWyy%SH(Zb38B?Cfu)k7PAh#>s_ zpC9kBfB*60 ;=%t{6X$JQmQdk5ho7 3Z>Yco$;*3IEvtOG50Am%-zFffePH!y zU5Co=pg`kL%j#{1O+Z?cs@0>z;5Dd{RixwOSFMGcfK;pLN Nd z{;w+_T0I6IJsa+`inMy{YxSsi6A-IdZ+}B;-5ykdr|0n3psr7DZvrx u_J5vgns;S9EPTVQls3F%NQ0AW;;4@WbwWG z4k)a~Ohn#&ZROvPfH1Q$+qDu! 6d+gp*Cj&*M*s8K5~+p)Wb{A2Dd`~P>8rp{fFMk8@@KXp@@5vknkSZN{phAw`6ea O z^^UGLR{%(`_(m_QL^Q7T1S2+HfJ7zq+EoEomAQ3wW>&cXnTer8DSxn3K!7Y2(RoJ& z{8cSL{Pl@Ea-@I&anu=d#h(HK#9yDtBS#7d5J#OMSNtg;K>YQIJZhmpVVT1N!Z(gj z*5N1E_z@qzFBmJ-U)h{1Ff<^5!LLkB*5N1E_}vVC761bl{BhpjaxYVXVF6)40!C(g zn =gOCB)MX`-ar`6>1!{bIW-5x}N;Q#>+2BBwtSxG$mcNX6W zd83uKIR%i?vYX`d4o7S>Az(b#tBnE?2DJbF<>8r$DjMfZuDPBJ2S{!MmHyZYOi;W& z!Hh7hh2KoBfI^;BRfYnjWClnTqISBqPO4qc8OvjUU#t?DPk%50i84~O8w!w=26;-8 z+6kU~_UH>bPWG}=umUi^cTYfxzqdFPAfx>R8-D=galnn>(*(rJ(?C{=35fgfbvG2V zhEo=G%r0F$> =bpnsbRL@4H=6SMnf z#tI4U@4~ySVt|W1V;!H6faMmto9QnV o^HzXi5idmX37xMxNet!`DrHGFIN3aP9C;N$9J?XEM zJi`JK8y7)g=BCk>Mx7X-;z#u9$gguKM%z!6^vm#o#6~l7Ge|9sI Arj1Y>aX*pUB`F^-nU^U*=4u?| zcmhKEiL1St6JAk(06_&mR_w_fiZkseas I zi%@7kk>6=4A5L7BDnOQsI6I$!(0-yyuatc1L4SZ$k-lyrb11Z*sH1JpyXW&71;|{D zj>i)eP4^QW8#i#(0;FT-MJTkNXx|CBk9VU-0wgM7{K}W$P2tmX*!*UVpntm*C=IWu zRDhs@u>l8PgK1o?%j)9a)9e| `cY{BtM6yCH0j`(DW5QuBP?$-T3WtWyH zKz~Y=Q@(!`$UFjsYk!{H;_ug~E7QG; %Fjq{Rs&*$|D zkhvO-k9lg U3ar7wq|pkFz2Oy&6(Fb}YpMX7 z@wJ(pN8PO|-y2@xmjFQpBa2ULjH>Hi4SzE@aICePZ(ZDSa?kye4<|0`6Cg`P8lMwt zG_Jx$@xZ}md<_ov9W9<(%^SZ~_dLzku>jdpsPcV64F*r;VqF!-Bmf+1P60=&eMhVl zAL8+zR{^p|z0$lt!>6M{!oXw_Sd+#Aj 1T#zFzqbLRd)6pUVq@Y z @*ilv! z;K1K48Q7G!ew;h^ffa3jzV}#w?0;3TL4F1vF@5dMuH|YD9IYScF56V&-Sc^w0%Wd+ zqhn%v!WRakBew$J0`QhktQ^*G;8Tikq)W9jKvGLry4?!U;U2;+Rx|tn+^t4gKC#;J zW$%3fvR6T){D9JHHKATsv(%>cdSZp2sXnHr6CkNdIY PoGLeTU@}tEFEl;omaP*0})LQpo9j25!sM zBy}?$ e$`BxH$_#X! z!OSLl?<@)<X!`&G+)eihqeB)#sda-2i#I5Bf&IQ1>5$q%`aTF5t-V2snB@v6}md z@ALDT$K3#_*$9<&sQ{ql3>wms=dzT9v){spgj7Q(=?2LCU3fRNa?YJ+z;CT4gjDP| zNSoUn_8mQ+Sk3({@qeEG)^RsLI*5Bqhr`}u@I+8pDKMbG2&r=R8-GzG;OP0pD*C}I zkn`HgHUX*q;jei^h+*gFI&P-`phN=-tfV$iaNvK-@k#lcfRLz}ogjv7rd@}Ey}^M5 zK+kI{+XSS=+xM|C3bUdT{$E+`y@XYkYHb42+L@l8-D%ynBbD#raqd!2_EXDiwa>c) z!Yab-RJ&oe `){l2%i;@7bi1ngFK*H~a3zSzyI=y&)aDQSIULk!FASAR1v#2K; zpa6;Ij*7nO^|%To17a0s&7}qsp1-q!2bTFg9iLYLtMCeilL4^|vv6!~#KOQr=!F3c z1~er$FI&gg6`;SZqlW9ATwb;IDH#ylw04d poGQ2{cEI<&<@(BVCS{VBrttKl Vs~;J3=qUSvg`gHDPot(`6x143>>ts_FBFSVn0-&)T} zk+JsHqxM&J0fKut-gD{2huWr(d9N$lqrZDj!n*-MN}h5Y4HDWVTT$Rdp;i?@knu>6 zSbv-W{eMO>>rjhT>mPk=kE#KJ+d$HDIm8E i>Se(j$4XV1%!$aZgfa`ydi~l z! r1Ie}Aa}6XE5RI%kZVIwd8RawS<)Kw^Ci zx)C<;_!xcGYq|nVgiJ2!Inq*k*bABf66FAt_*)e%1da9NzT!)(Suod^QPa1WTmY}P z9;SfA#sUh0Mp$|-rNDtN9y%lHGwN&2eymy69zDANGItnQusJLYT5O)K_A%wNY5+&= zvVYH79{q@}M{0j}K;~j1Fvg(8fCghA*EGtce61SjKs%fO008z$L_t(@^(!4$dT)er zP|2fR#nb|1mlIo=8OSwlt3KT?SAc%n8y@Y=U+(?eoI?Qe)@@z!tN^qBQ9>;N;(4Tv z?Awk|3&6ZIU4VG$iG%r38ftk8ujmp1f`1CKCJL|; WV%6No>t`H!o zATv<_2mobnTr;V>uo3}MD4epLLxFPxa*jS$D|aX$Kz4|ytjAYCfE>S%)xsSL2t$w^ z;wkI#6%ZiD?_;%ahXMj*hj_QL>fSLF_&)#u0RR72^ginV000I_L_t&o0PRoBMUhh^ QY5)KL07*qoM6N<$g1>Dp?f?J) diff --git a/mobile-h5/static/menu-icons/oa-pending.png b/mobile-h5/static/menu-icons/oa-pending.png index 7c1c215aae557b3fd814324411290ab091edfe63..8c39929f6b51d729043cfdb3790a7904b8b95217 100644 GIT binary patch literal 4203 zcmX9?c{o(>7oWLi#@Lz0lC81TShH`TYp0NX$u2vUgc#99*2L75EK$a;L3UqKl&!K; zwjxxL?6Q>QcYA(+-22|=d_L#C&pqcn_k7NqY;I=A!pO^rKp ;kpI~059UW{f8@%?4TUw6f1o2p8dv4x|&x;|EtgU7Gk@NVq(3?R!X0c(hxv`db z_ANnn! 9)RFRMok6EKo2Uo_-26yIAmpaK(lIM3 zAH>a>X$MZGHstQ{n5KKuiITLVRW<&j{9R$~K686 MN`0kLK=Y#C%+(JOQdUpm> zEW!#AZppEF#TU6gn_)!#w+Q@POE0rctI75n%Q?(OsqZArP4v1ZDu7AM^Fybt!D+vl z5HKzA)uX7e8SeDWFRF|hPY##*CPF~cX6AOK6~X7%{JOYLn9_#&Np76I)8b&Z6IOvo zCkAx%&(~HbNYlKtoFxY5{i1+jFROx~dOU$p|G-<#87_imT0<1i=QwUuVd6#V-98xU zEA(mCgsX&9DmFQ80;kr5#Pul-_&*_lvxn;m igi>7iRi>*Y*%h z4;v;E;#%x_1hr-=&CY}a*CD-Dl*ih+sg;+lJ}(>pTAnIW10QdNg*y3&TN7xIHpu!} zvynez!id?-!Ol+42DEkTMn!O{s=ajgE}~+PYR_?YwjO~YFF_I8va{>G$XNQn>+(yb zV>XBDaWmiXZSN-)`B%SFgN|MR-x2G@)J8fYbMn>b?)R^i_P hDc z4!sQ+$;D)@kHf`Xz4T<79{yZpOn7)88rw7e`@$+6Y==M%jRpWEYJZd}TLYjxzfP8{ zYQs@57dGH=Kmzi?%Og8aVVuYzl1f7${T%*EO}zk69XC0L+A?7OjGwiEn~d!2n>KoM zj&M>gmJihQNrGUn-H KQ$a#@gS2_1e} pQv{L$+wtZS% Vw;|4^ F8?@R_1n^cYrcg&A`ekJH2VE5)@W0r)TfP!=ay!kAww#v=#JrW zAoaEIQ@2Um=AOrU$H -7?2K*Z*x1xx`+XEiFuz=mVuNL z7PL%7A9`e#mACsXwnPMmSBMl?yB&sLM9NK(8u$`A8~tRbTQKIHQ5(^X@iV9n9cj;+ z*@259*K%WgEX`J0v?y^4mM(F(w%S?`KhA3jHi$ t`SPqMe>+j zsDJ!OzED8nY-_G%JZ|)?)?0>H F5nub(ikiKMED)n2KA!q=@y#orr-t0zN1frwLkc@xL_G zS2!--za1_;oGVIL G&pB1#Uu7gbTebv&A zk@+RK`bEmMfiz1iNwvP8o`+S)m(&;lf9sOawihE~@-D8wvfn`(z*Qy}%i&r5$U-6^ z`FtsLvrQRib1F?lY+QAgIFJopL> Kzyh31OEE#WVpGOrURggm5eFoWmcV0(&q zxn3pmmbT? UNi1mP_ki>%xir&gS _zOEE~y!o2O4nqV|lq{ z<}Pl-UB!T!h$4P}^T_oEC1GEMfh66;iO#!l^mbwY$h<`UN$`4-1IShJU0cH37ztP! z`*KlA+t!=*JKTRze|F8K^Nq+k7^8I_3iwNjUFMToy$ms*#C;a9LjoSvD|Foar!*pb zhE`&g(NV0v4IdPN8XL7@KAnGPHr>MhB^l9=!RJ>!%%b>(=B~v&9YFRq{L}^;B)UWP z@TyIb=!!Oll`?~DI?)e8#j6f6@j0xz+<-1OPUW2rsLW`m=uldtd$*|c+9fYDu&aFa z_cT}bl&ezVU{>ifFZ~r!!aW_EyIjreJk4bL596uv$6qi|AWzzizk|)P-;!oD#AofJ z^dNr!mmEJfR3fQXC>7O%iI@~+aKRs|jV;j>GfO*qj=o{d9l4LNQf1jpXVTM*cKR_V zj(j_ma_(!4L2c&h>*G&4L#9}%H|U8Iaat0PAqFSNO;lA9Axur4kGGB~GyULai@xzF z1#4QBF?>=`gpdqmoJ%V+C9Yl^p^*i|(hW_k&b8J#@{16JV<(QfiXBddGWtL8Rzez& ztSW_;nTBWAFIeaqrVnmOgjgt5`(ur$&@yGrnbx?oQ-M~ESPQ!_?TQku%5%6r5^Chj zD0JtyW}2`?fnj^C-AiGHB)iwYlx6!YTW+YP+%C5Ld1H?auymO(#8D0JCHY9)XD-XM zH%vE=kS9IJb7@Bb0H+jvy|f4Zp5P5OE9rRMn--1STK;V@a|~E(S-}w4uHgH9aj)9P zXmlH^n(}!&Sl e8kg@O`wenV2zyDMDcxWCs-GWaHLTw)t+ zAd~5sifK2Q6JaNZS7djO<|%|sa@(HM9l<273ZT&H!Tv?O)?3MtHU5mD#Ry!MG8mj+ zkZ-tp)f4fi-&e*le7OjLI{llKEcAiG1oQkB_G`9GTKTi?vsc#evR{Hca^mhjSK<+l zV*Oq#10Wqr9wm<-6J%BIJ?pmBZj^d5fiSdq;>)hvk6u=X8>IsZiRV{N62v}8XErMH z_^A%*BXBRiR0t7yltRvlHRw%AYc*tEjQER9vZKDKQ0DgopP4-BN*3gIw`soJ<0C8U zuXmxW5QKl{52`8-x#>}Jb-`C|2iGHwbuWH<2F{5haJOyz=7j^KMqAT(0@^|Ub>pZv zI|)Jp>}oB8gV9{ljJ~?}F=DP`2i!*Z2V-S+to9oC@Q0;S07irS`{AG4t9NzP2}1O{ zTy10>hqQm)=vzaWy`39UmRC^geP{Q;!da<5K>K?wO_?R$RJ^e{h#r^G`tgVH70c}n z=+|#CAB@CmD}%57u}VtdaZ?$E$oS5^iZs+fIs!54 xg?Njw5*OF z5Nh>#dBnn!KLyz}HbXzo`=sGYuO~R_bX+jBWlP&AV^lnh`R)Ke(f71{0RE=)1sUyH zgnTD!IwU%OoZ=*$N@fFxhV)3w-iIXF!d4SGg>>(PLvd9mLiT6gSu|b>QT=5~pIob2 z9<$B{Qnibf7@2qj{c ev!-QaI~{o;`W^K&+~k=L@!f% z?qJ+90yLVw2(u}-&E@ZO*CK(1lZ!$L@hG6F>C~KJc|Kdb{ztlI+j|KW1x(PoHsAj2 zVqneDT{t-FW`@a3#Qycjz2MG%8ua4pt=+?#Z$9aaCc`67Vvvg1;dN82?>=^Sg)U8m zkb7G&%B4o_41togHGIr@OZ7b0uf ;)vafKTL1yKW>wxq RNDs7>FVKWXfNlF{TjDve@Xz^H;JgDL3E=;o1w82WO@~Q3 s_3r|A^4pGJ^U;w)M2H0Zfcb~hA;NMcmFrZ-qF@WcSl>*qQpYX!e?g*-IsgCw literal 3865 zcmW-kdpy(c7r^)VY||`ew7FXg)m&RQmcq!rXmh7;DCE+OLPcsuwnn2;`9{Jtx7-aS zY`LZzVMYnnH}_PSTk%`JKc3rpo##2vc|GTSUeCEfak7;~sv;o}h^)Pxm9u2*_}dUt zlD@>VGz$Vjy|uTpaJ>XfKXi=FBq?2wi)-?^-h|s$%xtJ6=~cyGUlM=nD#)>f)T4nc z5PQ3H?MPM!jqLHhJNBspx3h l9=&3Kubt3C3 z*X+i076Q#Gw5}SxbQuyPu{;48y5k6WdWH0GDB;CR`fBSb&yNP>3621G!ewk^AGB?s zv%3EFSQWpWRO`X0GBLt#q{E+eM=d#03DM~-zwQryE*#nyD%0$7WK(yNd|KEI=?;fx zEyktWuHL=nJhg26`+?HYr)S`ZjvB*^r`tluw>xKeq-99k&95Xh9SK*}2G3Ir`Bax) z(Ujr}Ke#ggZKN6SRQOeQ0}9^$%!C>ul`FmC8ZvjsD1-JfRgDc}JPY@V% F&A^4Y$Y9pw6nX#ray^*V*d zd0W_*yJ<`P+!ON-?1@}nB`jcP?y=^drO tSK7fko;u{ev~T*Z@X+L-n*9K-ZngCM#o3@E=8S<=qFOOqpbryx=itz z-ZT3NO4A32UGz0f#ed?1(!hpOy^$~##(8tY;wx3m^{#@ke#$d=-r|1F##qxGqIwuC zY~=0uXYFIYY9Rujc UM$gWH$x%TbQV#t`MO)-Neea=2}G-7ni1&`n)#^#@)9p{!+ zQ-7aPI0bMR>1p+e-j71}ZbXdmHO^iPxNK kryW-S0;by23Ca3TUSiSmvj0t759Q4xarW=2$6*;bE_cbcRs#1nrG)B#y~{{bq4J zC-ziIYzCOnt<}+FjjT253zb6i I_HF6`Ij;J!Q^hQ)uWnfqER2z zdFCOKa=7P9et+%Ho-*^4N4~>ZLg_J?J!Yr}^)hW-aeJd1)cHS+P8vYCx_0&He=Sm~ zwDVJg3h(+G{mK;oUdr`KKKhA;AcxZm5QRJtvxzDkW0|$l8$P!;_JPiN>N#&^C{l3m zf`@7UonmXcf%NfP=V@CfEx)FgL)8Y|9aHfv*A-E%135Gaw^JxLN4g5t=j9Eyy&m`0 z!1Ju-_&NF3HsLulK~MZcS(-(|d#~#GyU`$Q?^&x(^V0PV-+C3Te{884#I3r+?Xt}S zb#PkI>FjaB36$=Du*R=UDpi+b%hI8+OteRv=?%G(YeAg9^oC}QUDJ*va{keM=W& zF(2HzFK?B)HG!#l_kg$rOjYGD_8>~d4ox_JZ^^bxWMxx_i;?T%K4PD)>R-oiuA|EX zx{-cGZcFrrU~*gdZ|8YPRk#3|hO=hDVcpOsPb3adB^-@=!Lh5Lg@w93@l7&5ec)kM z>rJGJz5-gqG{MAfcO-!_nXV))c`gkng8_%+%QsSDlc0IM`)}m!?h@93TMb1?pacx3 zN`uW8GCZ>R@E9r$&Hg4|*DW|sFkoSzh}?Eba+ZWp_F^>)Na&6~tqgbgbzKv3e4bb; zD4}L!9(AA)xS6{V?L=tH86Wt_rXM$-mnbJr(`52{4xW|wy!J1WX(%$SPsgGYy2F(l zqiY_vdV4@NieH~wJqb?;tNuPZ`sbB~btOO_mp9yOu%`@?YuDD^I3O_*{E63UlHTJ{ z33)NT<=g%t<<5nYWLt>528@4ej*TBwQ9YCo;d-kmPQL`~^9iRy9pltDit{9FRe!6z zv3h3 -^NTFx*zJ;lsH(mrN{0tBHKjMNZi5EwkIr+yzrf3eT+!)^@wWeK zQ(*9F@?cS+djuJ>fw|+5PYpL3PV95|Au=|>|Bh;zJXRq> 5&}nRwG^j(7mW2S zFgK8P!a}z{&F^sP6uh{0mkrd)HU+Bjb*n4hH7>nTQ5J2J(sev&nS otPSmPk7TQ9NKlf>v1m$yL$Cb0CV-;JH;Ps3j?&?T-6bY${XJf`*UoxLB-_bfwRH z&Qp^GGZV}HO&3+rf=THd1;H=#UfTxX_ {#wYj(LG%Y2FYZWs8JBb+!{o!*l{SGi`XjHV_++UY5V?r- zB9xw)3a1$LFAuO!6?%qnc^87qHsO 1X?5rxHZ<+Wp{}=qf~(4Ck6*tZ z3`gn6pwvGG(vmd^@s+<-w{n>4!oZ?Pgakan!a0RQSy;*~n6Deu@!jQn8c?ZDG%AT= znBS{R?$@$L0WaXA@;XDM0@< J(6O=ua#*?(*U z7wb{wnLQKp$+0C*pY<$zoz8cy&LW&ivAUH(8yB#I4ys&m8PnChY_s4_j+n1IPRlPO zzd?Td6|N`oVXvI&hpSe=Qr(#%-o_4tO1A6UQw3yMq)2f(g9bsRx*Z%7+31cG@@;p% zqQ`DRzxbJ>vA9C<+rj!rf>Jj_dwMI@lTg0Nx>OR?p3JtPQjCbDsU(3T;y=0RY45n3 zg!7V2-tJvt)&6B^*Yo_#%8jzKt2aV}_HKj=sb6K7F7uwsUrX~rB>nOO+%2;|D|5l` z$NFoxSFKMhoPiPTvUug`#b7bvyi`jcs%+79L_>!BV|i>=NjqaJBpzm$db b0gd;w&_wHfp^x{9 1>5Auc$Z9N8 zud9LZtSqUuHe-rq%+GXcLU(g%LyMPFg|=(;0A(s(nJtr%j58W-emCkkF(IrCP4GCl zF)V;oou*I@&u|t82l>XWYciuVdDo=h*%2U&M1RI0T~>tTHUEl&zuwTj2Y=<*py9n< zFH+4i=V7T)g{c2p?}gOW=xzN*^OqW=^4i&B({l -%ny zDLKzx+IS=)->XY21SBjSyv@|5jc5)HzacTKh__L%{J0(kZcw_0Q&qNQTV7UF2>P{= zzl-Mr0}LWZV3s?^aM*EoV0Qx@5=0K;D=G1izvWBGJjHuGdJ&&Nv{Myc+T|TmpR*yN z4q|nrs?L*PcvwTXoQ+Ez0nq_O78%aPVLff-g2Uj5+zv(iy7U{!>LPyDJ6`|<_Sk2J zS|GWfG0YzP%$yq67!X8CB$6!{Q4(%^)etXP;kZI9L_MY(8aoV!ZI85Y;^E;gNl3!5 z(Cq9)1{R(6#dV`DkypUKWloORgf{Jaz-?EApLn$52D$cVt!PnA#Tc+qu>`T{-c)kg ze#z%&-}^@gY5dg00Oh5N1iX|B4;f7I8O~xyjS%rfCR|pRZ?*|r;0PQp9%(k5i2`AX zR6zH|Uzs(qq<_+)bS6>?hRxP=B^9&>kWS`;t-9G)FpbDZ3n3gOd;tRcdFQ}t+D5O# zuGs|mNX8H9Qqj5Q=fF hr(tPSeyAqwA0meIQ8Qxy-y9Vh?#3wXufgPvk&a)~xK z13y?pc1lUJsPqrL$Y5fxqpBIftCoQ09uL;mVo~Ei6d(~!`89(oaI{Oe0tS8d*HF## z2goOwOAOHX_{)jjBE?u`Ec#gd3P4Hi+CrnZ*tR$*ubFdcAhG#QS=7w{ diff --git a/mobile-h5/styles/app.scss b/mobile-h5/styles/app.scss index 3fd5ba30..3ff1a041 100644 --- a/mobile-h5/styles/app.scss +++ b/mobile-h5/styles/app.scss @@ -1,4 +1,5 @@ @import './tokens.scss'; +@import './components/btn-loading.scss'; page { @include token-css-vars; diff --git a/mobile-h5/styles/components/btn-loading.scss b/mobile-h5/styles/components/btn-loading.scss new file mode 100644 index 00000000..9c0e91aa --- /dev/null +++ b/mobile-h5/styles/components/btn-loading.scss @@ -0,0 +1,40 @@ +/* 按钮点击加载:文案淡化 + 居中自绘转圈(对齐 mobile-oa-h5 发起页) */ +.oa-btn-loading { + position: relative; + overflow: hidden; +} + +.oa-btn-loading.is-loading { + opacity: 1 !important; + pointer-events: none; +} + +.oa-btn-loading.is-loading .oa-btn-loading__label { + opacity: 0.25; +} + +.oa-btn-loading__spin { + position: absolute; + inset: 0; + display: flex; + align-items: center; + justify-content: center; + background: rgba(0, 0, 0, 0.06); + pointer-events: none; +} + +.oa-btn-loading__spin::before { + content: ''; + width: 16px; + height: 16px; + border: 2px solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: oa-btn-loading-spin 0.7s linear infinite; +} + +@keyframes oa-btn-loading-spin { + to { + transform: rotate(360deg); + } +} diff --git a/mobile-h5/styles/components/login.scss b/mobile-h5/styles/components/login.scss index ecce24bb..35e74959 100644 --- a/mobile-h5/styles/components/login.scss +++ b/mobile-h5/styles/components/login.scss @@ -93,9 +93,6 @@ justify-content: center; } -.login-submit.is-disabled { - opacity: 0.55; -} .login-agree { display: flex; @@ -179,9 +176,11 @@ button.login-wechat::after { border: none; } -.login-wechat.is-disabled { - opacity: 0.45; - pointer-events: none; +.login-wechat__inner { + display: flex; + align-items: center; + justify-content: center; + gap: 16rpx; } .login-wechat__icon { diff --git a/mobile-h5/utils/config.js b/mobile-h5/utils/config.js index bce7a405..145d08d6 100644 --- a/mobile-h5/utils/config.js +++ b/mobile-h5/utils/config.js @@ -4,7 +4,7 @@ * * 微信公众平台须配置 request / 业务域名:www.chengyantek.cn(HTTPS,安全组放行 443) */ -const USE_REMOTE_TEST = true +const USE_REMOTE_TEST = false /** 本机联调 */ const LOCAL_API_BASE_URL = 'http://127.0.0.1:8000/api' diff --git a/mobile-h5/utils/oa-api.js b/mobile-h5/utils/oa-api.js index 38af3fd8..acfafae4 100644 --- a/mobile-h5/utils/oa-api.js +++ b/mobile-h5/utils/oa-api.js @@ -86,6 +86,7 @@ export function fetchSubmitOaInstanceDraft(id, data) { export function fetchOaTasks(kind, params) { const p = params || {} + const keyword = (p.keyword || '').trim() const appName = (p.appName || '').trim() const initiatorName = (p.initiatorName || '').trim() const query = { @@ -95,6 +96,7 @@ export function fetchOaTasks(kind, params) { if (kind === 'cc') { query.readStatus = p.readStatus != null && p.readStatus !== '' ? p.readStatus : 'unread' } + if (keyword) query.keyword = keyword if (appName) query.appName = appName if (initiatorName) query.initiatorName = initiatorName return get( @@ -126,3 +128,19 @@ export function fetchBatchMarkOaCcTasksRead(ids) { authHeader() ) } + +export function fetchApproveOaTask(taskId, comment) { + return post( + '/web/admin/oa-approval/tasks/' + encodeURIComponent(taskId) + '/approve', + { comment: comment || undefined }, + authHeader() + ) +} + +export function fetchReturnOaTask(taskId, comment) { + return post( + '/web/admin/oa-approval/tasks/' + encodeURIComponent(taskId) + '/return', + { comment: comment || undefined }, + authHeader() + ) +} diff --git a/mobile-h5/utils/oa-navigate-back.js b/mobile-h5/utils/oa-navigate-back.js new file mode 100644 index 00000000..622b79b9 --- /dev/null +++ b/mobile-h5/utils/oa-navigate-back.js @@ -0,0 +1,78 @@ +/** + * H5 上 uni.navigateBack 偶发既不成功也不进 fail;离开 OA web-view 时做兜底。 + * @param {{ fallbackUrl?: string, onStuck?: () => void }} [opts] + */ +export function navigateBackFromOaHost(opts) { + const onStuck = opts && opts.onStuck + + const currentRoute = () => { + try { + const pages = getCurrentPages() + const cur = pages && pages[pages.length - 1] + return String((cur && (cur.route || (cur.$page && cur.$page.fullPath))) || '') + } catch (_) { + return '' + } + } + + const stillOnWebview = () => { + const route = currentRoute() + return ( + route.indexOf('oa/start/webview') !== -1 || + route.indexOf('oa/webview/') !== -1 + ) + } + + const resolveFallbackUrl = () => { + const explicit = String((opts && opts.fallbackUrl) || '').trim() + if (explicit) return explicit + try { + const pages = getCurrentPages() + if (pages && pages.length >= 2) { + const prev = pages[pages.length - 2] + const route = prev && prev.route + if (route) return '/' + String(route).replace(/^\//, '') + } + } catch (_) { + /* ignore */ + } + return '/pages/oa/start/index' + } + + const fallback = () => { + const fallbackUrl = resolveFallbackUrl() + if (!fallbackUrl) { + if (onStuck) onStuck() + return + } + uni.redirectTo({ + url: fallbackUrl, + fail: () => { + uni.reLaunch({ + url: fallbackUrl, + fail: () => { + if (onStuck) onStuck() + } + }) + } + }) + } + + try { + const pages = getCurrentPages() + if (pages && pages.length > 1) { + uni.navigateBack({ + delta: 1, + fail: () => fallback() + }) + // H5:navigateBack 偶发静默失败 + setTimeout(() => { + if (stillOnWebview()) fallback() + }, 280) + return + } + } catch (_) { + /* fall through */ + } + fallback() +} diff --git a/mobile-oa-h5/src/api/oa.js b/mobile-oa-h5/src/api/oa.js index 2e538138..477cf872 100644 --- a/mobile-oa-h5/src/api/oa.js +++ b/mobile-oa-h5/src/api/oa.js @@ -38,6 +38,14 @@ export function uploadAttachment(file) { }) } +/** 获取带 Content-Disposition 的下载地址(保留原始文件名) */ +export function fetchAttachmentDownloadUrl({ fileUrl, fileName } = {}) { + return post('/web/admin/attachment/download-url', { + fileUrl, + fileName: fileName || undefined + }) +} + // —— 发起审批运行时(对齐 web-admin oaApproval.ts)—— export function fetchOaGroupList() { diff --git a/mobile-oa-h5/src/main.js b/mobile-oa-h5/src/main.js index 1c3df33b..f377d13b 100644 --- a/mobile-oa-h5/src/main.js +++ b/mobile-oa-h5/src/main.js @@ -6,6 +6,7 @@ import App from './App.vue' import router from './router' import './styles/tokens.css' import './styles/oa-form.css' +import './styles/oa-btn-loading.css' import { registerOaComponents } from './oa/register-components' import { captureTokenFromUrl } from './utils/auth' diff --git a/mobile-oa-h5/src/oa/close-to-host.js b/mobile-oa-h5/src/oa/close-to-host.js new file mode 100644 index 00000000..848a50eb --- /dev/null +++ b/mobile-oa-h5/src/oa/close-to-host.js @@ -0,0 +1,60 @@ +/** + * 通知宿主(小程序 web-view / uni-app H5 iframe)关闭并返回上一页。 + * @param {object} payload + * @param {{ wx?: any, uni?: any, window?: any, showToast?: (msg: string) => void, fallbackMessage?: string }} [deps] + * @returns {'wx' | 'iframe' | 'uni' | 'toast' | 'none'} + */ +export function closeToHost(payload, deps = {}) { + const data = payload || { action: 'oa-close' } + const wxApi = deps.wx !== undefined ? deps.wx : typeof wx !== 'undefined' ? wx : undefined + const uniApi = deps.uni !== undefined ? deps.uni : typeof uni !== 'undefined' ? uni : undefined + const win = deps.window !== undefined ? deps.window : typeof window !== 'undefined' ? window : undefined + const toast = + deps.showToast || + ((msg) => { + /* no-op without toast */ + void msg + }) + const fallbackMessage = deps.fallbackMessage || '已完成(非小程序环境)' + + try { + if (wxApi?.miniProgram?.navigateBack) { + // 小程序宿主不展示 payload.message,须在 web-view 内提示 + if (data && data.message) toast(String(data.message)) + wxApi.miniProgram.postMessage?.({ data }) + wxApi.miniProgram.navigateBack() + return 'wx' + } + } catch (_) { + /* ignore */ + } + + // H5 嵌入:优先 parent postMessage,避免 uni.webView.navigateBack 空操作后提前 return + // 成功文案由宿主 uni.showToast 展示,此处不再 toast + const inIframe = !!(win && win.parent && win.parent !== win) + if (inIframe) { + try { + win.parent.postMessage({ source: 'zkxw-oa-h5', ...data }, '*') + return 'iframe' + } catch (_) { + /* fall through */ + } + } + + try { + const uniWv = uniApi?.webView || null + if (uniWv?.postMessage) { + uniWv.postMessage({ data }) + } + if (uniWv?.navigateBack) { + if (data && data.message) toast(String(data.message)) + uniWv.navigateBack() + return 'uni' + } + } catch (_) { + /* ignore */ + } + + toast((data && data.message) || fallbackMessage) + return 'toast' +} diff --git a/mobile-oa-h5/src/oa/close-to-host.test.js b/mobile-oa-h5/src/oa/close-to-host.test.js new file mode 100644 index 00000000..8d133363 --- /dev/null +++ b/mobile-oa-h5/src/oa/close-to-host.test.js @@ -0,0 +1,104 @@ +import assert from 'node:assert/strict' +import { closeToHost } from './close-to-host.js' + +// 微信小程序:走 wx,不碰 iframe / uni +{ + const calls = [] + const result = closeToHost( + { action: 'oa-start-submitted', message: '提交成功' }, + { + wx: { + miniProgram: { + postMessage: (p) => calls.push(['post', p]), + navigateBack: () => calls.push(['back']) + } + }, + window: { parent: {} }, + uni: { webView: { navigateBack: () => calls.push(['uni-back']) } }, + showToast: (m) => calls.push(['toast', m]) + } + ) + assert.equal(result, 'wx') + assert.deepEqual( + calls.map((c) => c[0]), + ['toast', 'post', 'back'] + ) + assert.equal(calls[0][1], '提交成功') +} + +// H5 iframe:即使存在 uni.webView.navigateBack,也必须走 parent postMessage(修复空操作提前 return) +{ + const calls = [] + const parent = { + postMessage: (payload, origin) => calls.push(['parent', payload, origin]) + } + const win = { parent } + const result = closeToHost( + { action: 'oa-start-submitted', message: '提交成功' }, + { + wx: undefined, + window: win, + uni: { + webView: { + postMessage: () => calls.push(['uni-post']), + navigateBack: () => calls.push(['uni-back']) + } + }, + showToast: (m) => calls.push(['toast', m]) + } + ) + assert.equal(result, 'iframe') + assert.equal(calls.length, 1) + assert.equal(calls[0][0], 'parent') + assert.equal(calls[0][1].source, 'zkxw-oa-h5') + assert.equal(calls[0][1].action, 'oa-start-submitted') + assert.equal(calls[0][1].message, '提交成功') + assert.equal(calls[0][2], '*') +} + +// 非 iframe:走 uni.webView +{ + const calls = [] + const win = {} + win.parent = win + const result = closeToHost( + { action: 'oa-start-draft', message: '草稿已保存' }, + { + wx: undefined, + window: win, + uni: { + webView: { + postMessage: (p) => calls.push(['uni-post', p]), + navigateBack: () => calls.push(['uni-back']) + } + }, + showToast: (m) => calls.push(['toast', m]) + } + ) + assert.equal(result, 'uni') + assert.deepEqual( + calls.map((c) => c[0]), + ['uni-post', 'toast', 'uni-back'] + ) + assert.equal(calls[1][1], '草稿已保存') +} + +// 无宿主:toast 兜底,优先用 payload.message +{ + const calls = [] + const win = {} + win.parent = win + const result = closeToHost( + { action: 'oa-start-submitted', message: '提交成功' }, + { + wx: undefined, + window: win, + uni: undefined, + showToast: (m) => calls.push(m) + } + ) + assert.equal(result, 'toast') + assert.deepEqual(calls, ['提交成功']) +} + +console.log('close-to-host.test.js: ok') diff --git a/mobile-oa-h5/src/oa/components/OaBtnLoadingInner.vue b/mobile-oa-h5/src/oa/components/OaBtnLoadingInner.vue new file mode 100644 index 00000000..9c87d262 --- /dev/null +++ b/mobile-oa-h5/src/oa/components/OaBtnLoadingInner.vue @@ -0,0 +1,10 @@ + + + + + + diff --git a/mobile-oa-h5/src/oa/components/OaDatePicker.vue b/mobile-oa-h5/src/oa/components/OaDatePicker.vue index 90eefeb0..4bf105c7 100644 --- a/mobile-oa-h5/src/oa/components/OaDatePicker.vue +++ b/mobile-oa-h5/src/oa/components/OaDatePicker.vue @@ -4,13 +4,13 @@ ref="fieldRef" :model-value="displayValue" :placeholder="placeholderText" - :disabled="disabled" + :disabled="isReadonly" readonly :border="false" - is-link + :is-link="!isReadonly" @click="open" > - + @@ -48,7 +48,7 @@ + + diff --git a/mobile-oa-h5/src/oa/components/OaProgressTimeline.vue b/mobile-oa-h5/src/oa/components/OaProgressTimeline.vue index 26b90123..422c5a26 100644 --- a/mobile-oa-h5/src/oa/components/OaProgressTimeline.vue +++ b/mobile-oa-h5/src/oa/components/OaProgressTimeline.vue @@ -14,18 +14,99 @@ - {{ statusText(item.status) }} + {{ nodeStatusText(item) }} + + {{ signBadgeText(item) }} + + 抄送 + 结束 -