From aab593f2817ae0914b3264e6d8c933ae132f8625 Mon Sep 17 00:00:00 2001 From: caiyx Date: Tue, 19 Nov 2024 13:57:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E5=AD=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages.json | 14 +- src/pages/index/index.vue | 114 +++++++++++++++-- src/plugins/websocket.ts | 163 ++++++++++++++++++++++++ src/static/image/chatList/zu4989@2x.png | Bin 0 -> 6374 bytes src/static/image/chatList/zu4991@2x.png | Bin 0 -> 5692 bytes src/static/image/chatList/zu4992@2x.png | Bin 0 -> 6252 bytes src/static/image/chatList/zu5296@2x.png | Bin 0 -> 6119 bytes src/store/auth/index.js | 28 +++- src/store/chatList/index.js | 20 +++ 9 files changed, 323 insertions(+), 16 deletions(-) create mode 100644 src/plugins/websocket.ts create mode 100644 src/static/image/chatList/zu4989@2x.png create mode 100644 src/static/image/chatList/zu4991@2x.png create mode 100644 src/static/image/chatList/zu4992@2x.png create mode 100644 src/static/image/chatList/zu5296@2x.png create mode 100644 src/store/chatList/index.js diff --git a/src/pages.json b/src/pages.json index 30861c1..72973ae 100644 --- a/src/pages.json +++ b/src/pages.json @@ -8,17 +8,21 @@ "pages": [ { "path": "pages/index/index", - "type": "page" + "type": "page", + "style": { + "navigationStyle": "custom", + "enablePullDownRefresh":false + } }, - - + + { "path": "pages/login/index", "type": "page", "style": {} } - - + + ], "globalStyle": { "backgroundColor": "#FFFFFF", diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 8645e19..b6f3d85 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -1,17 +1,111 @@ + - diff --git a/src/plugins/websocket.ts b/src/plugins/websocket.ts new file mode 100644 index 0000000..66eecbc --- /dev/null +++ b/src/plugins/websocket.ts @@ -0,0 +1,163 @@ +const cache = new Set() + +const maxAttempts = 100 + +const defaultEvent = { + onError: (evt: any) => console.error('WebSocket Error:', evt), + onOpen: (evt: any) => console.log('WebSocket Opened:', evt), + onClose: (evt: any) => console.log('WebSocket Closed:', evt) +} + +class WsSocket { + connect: WebSocket | null = null + + config: any = { + heartbeat: { + setInterval: null, + pingInterval: 20000, + pingTimeout: 60000 + }, + reconnect: { + lockReconnect: false, + setTimeout: null, + interval: [2000, 2500, 3000, 3000, 5000, 8000], // Exponential backoff + attempts: maxAttempts + } + } + + lastTime: number = 0 + + onCallBacks: Record = {} + + defaultEvent: Record = defaultEvent + + constructor( + private urlCallBack: () => string, + private events: Partial + ) { + this.events = { ...this.defaultEvent, ...events } + } + + on(event: string, callback: Function): this { + this.onCallBacks[event] = callback + return this + } + + loadSocket(): void { + this.connect = new WebSocket(this.urlCallBack()) + this.connect.onerror = this.onError.bind(this) + this.connect.onopen = this.onOpen.bind(this) + this.connect.onmessage = this.onMessage.bind(this) + this.connect.onclose = this.onClose.bind(this) + } + + connection(): void { + this.connect === null && this.loadSocket() + } + + reconnect(): void { + if (this.config.reconnect.lockReconnect || this.config.reconnect.attempts <= 0) return + + this.config.reconnect.lockReconnect = true + this.config.reconnect.attempts-- + + const delay = this.config.reconnect.interval.shift() + + this.config.reconnect.setTimeout = setTimeout(() => { + console.log(new Date().toLocaleString(), 'Attempting to reconnect to WebSocket...') + this.connection() + }, delay || 10000) + } + + onParse(evt: MessageEvent): any { + return JSON.parse(evt.data) + } + + onOpen(evt: Event): void { + this.lastTime = Date.now() + + this.events.onOpen?.(evt) + + this.config.reconnect.interval = [1000, 1000, 3000, 5000, 10000] + this.config.reconnect.lockReconnect = false + this.config.reconnect.attempts = maxAttempts + + this.heartbeat() + } + + onClose(evt: CloseEvent): void { + this.events.onClose?.(evt) + this.connect = null + + this.config.heartbeat.setInterval && clearInterval(this.config.heartbeat.setInterval) + + this.config.reconnect.lockReconnect = false + + if (evt.code !== 1000) { + this.reconnect() + } + } + + onError(evt: Event): void { + this.events.onError?.(evt) + } + + onMessage(evt: MessageEvent): void { + this.lastTime = Date.now() + + const data = this.onParse(evt) + + if (data.event === 'pong') { + return + } + + if (data.ackid) { + this.connect?.send(`{"event":"ack","ackid":"${data.ackid}"}`) + + if (cache.has(data.ackid)) return + + cache.add(data.ackid) + } + + if (this.onCallBacks[data.event]) { + this.onCallBacks[data.event](data.payload, evt.data) + } else { + console.warn(`WsSocket message event [${data.event}] not bound...`) + } + } + + heartbeat(): void { + this.config.heartbeat.setInterval && clearInterval(this.config.heartbeat.setInterval) + + this.config.heartbeat.setInterval = setInterval(() => { + this.ping() + }, this.config.heartbeat.pingInterval) + } + + ping(): void { + this.connect?.send(JSON.stringify({ event: 'ping' })) + } + + send(message: any): void { + if (this.connect && this.connect.readyState === WebSocket.OPEN) { + this.connect.send(typeof message === 'string' ? message : JSON.stringify(message)) + } else { + alert('WebSocket 连接已关闭') + } + } + + close(): void { + this.connect?.close() + this.config.heartbeat.setInterval && clearInterval(this.config.heartbeat.setInterval) + } + + emit(event: string, payload: any): void { + if (this.connect && this.connect.readyState === WebSocket.OPEN) { + this.connect.send(JSON.stringify({ event, payload })) + } else { + console.error('WebSocket connection closed...', this.connect) + } + } +} + +export default WsSocket diff --git a/src/static/image/chatList/zu4989@2x.png b/src/static/image/chatList/zu4989@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..36cccdde43235afa31f85fd7d4b772e7993d2233 GIT binary patch literal 6374 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 literal 0 HcmV?d00001 diff --git a/src/static/image/chatList/zu4991@2x.png b/src/static/image/chatList/zu4991@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7e106ea97204c1fdf09864e31fefd385dfff74a9 GIT binary patch literal 5692 zcmV-C7Q^X@P)Px~_DMuRRCr$HU1^w9)tP=z^$IGzxcjJsBE!;jgP^D+8G|!VT<3{D9NgkgB1(oC zTX2m@ML{un1`{(NDAL%_O>7lpiAM7%j3|Nv#)StE5PAV*m!;{Y>Yi^rcRlAWRky0E z8oEKc){)W?LHnal^ri9wQFJR>1|ruNJQA>4D81M z`VkQm_SKCn{*``~{^0%2Jx*-OX(Jexf%9d^(f;qeQDeV79I&j{@N~ z0xly6gB!*+teV{TVhAHK)ZETxe3JJk#+X=w=tBUtN1KnUKKmZY+X=Q zoEyoT$QX?wLXO+`9bvxW6`?iXkRZp#D)aq}ub;D?;X>n}7jok9C(gU;f$uU6M8*MV zSWNmbpmGb=Id$KR1zF z+XKxJVx#)p^I1g&VU(0)>C4>WXRB(?~zLP`KME}rvaMoj2kk8sRaC?qEtGPRWR zRT!@Hgj^i~+l7qO#J|Y$Xtp!Z+}=0fhGf3uA@rNLG@{?V<2Qr>Art`X>Z18YJuX-U!Vr&3$~_c08F9oj zfcX;5JOS7FE?Dyu1zdyqdflNk?2-iBbeZq!-ZIeNV@*dcDT_wilYtNlfTo3W{s)Xz zdYCT-NKc+G2V7SmRr36dXFD=5vNkzEHmU3+C?b3^?>V=9iL*#X19W~9H^Cu?XsEcJO6A)+QvMZONK2EC*WI+HJ6o* zjs{M7CIp~q(cGy7x<9ZrEh+Mdfqs(l98DYE_r6DcCv|)Q5Yvd;7uT#H(52yx?>K*c@hLcU z#J?e@pfJ3#LykQ3%|`57wN#NY$78$_5s@3wwk#Y3jrFuK5s$zy3;{K?yL0xK+$Mq`_MiciEx2Bl^7&DQrIKlgx-B|^3WfoZq*dF;F^Z*Z@-54p#vsQ zv&DRgSXSj69B|F~4%u_$On}z++u1sZMWbB4R1W}6i{^|X!mHto?;OCIXellmhF<+D zQZQ$FLtFNKi=FR^woA5*@0Fk+*>P#U%6zHL;e;E@?t7#z5CAdH(6q364S);XnNLE^ zld_$n{zFhS(AYfNpFOKTz~PNwnTHAL38{<>YNMoE&xpMnGkyNdcUAIh2aI`SSReqR z=mK$La=}$zo3Kj%$&%!xB%KL>7Hh}OrAyGhXJ?kO9W$^7$WC(R%MxUys2ccHgYJ9$ z9Sa0Sf|?f2nMa_T!WiGdM@7D9K<9aYbrJE_7V!2~cZVZ^1IjsUz%X-&)_N3&wrs$m z4WBFIOOg4`iaf%r1Mh$ICJz9c-kRI1M~uEDq8^t1r=xjA11{_|3Cgy_$@@RjxD`9z znQzxK1_31?J&GZJr~KTK8*e|O@3`n8u?yP+nikHzgTQB}ljq9v)N8;H6b~HQnYQV) zV>K+Ehn8L2Rn7OvwadGFdRPp&bHM$Nz2X9(`aL3C;aR5V8xQ=^6~`(X*nI)my=oZ_ ze7QPZ=1Yx5ygP90V^`V$?5>-7Vq5-62LQ@VlSu}5Lw>2IlYxcGb0LCoaas3_0ee?}h`PV>dRur@{&upC&Ru25nUtPxPm(-L*VzIphC^KH3JU3*t z@BRR+aHL%BiTlh?NCWM-;mlPd1{N=6jSF5GPM}rBU`f~0%yab^P^MJdot7qM`#`z` ztzD7uZcXJrghcZe0x;4pVcXuQx+M}}HBS56TE!eBJBgw_P*m2v0oc1nctAjrl}PjL zRT?JA4YJ?L8sD7#TjKb&t!rsA-$Gsl;O^`Jd)IsRK!&>5c@MGMg7=4fAKu z18|em4GbS}odY;CNTLQP9@I@G=+oucyVi&S!S}3rK?$6(18P~rg4wG;G`s`74JFSN z?9T=O#5oRq{UuuW?e<)}+aONr?8G!bvPAOoQ8H*4@_QAB3LkquU9QJ~K;wJVL%y@Y zZ^Z?zWR3Hy))UY_c$I?dB9cV=YylwJ&PN-!dRMx+Rx_kBS1YcJMIz|^A9o|~q@tuC z=m5wPq%11)E)-Bw8krT&&<(6%e${p&I!k6qxI9;$xOUtw8vtnSZP@nb7dvKrDZ`VS zGUB>R248|xFaA-=0H~x@1GDp6(2SjU!~!+2`uSA{KxFt}*z!6-v@a?fijqMWCB2wb z2Jl!rzL_`O)Lv^#^`ZuoD8}UU(*3j9 zq>vZ2y4DRi=g5Fo*6{kQeFQ3X6evWI;lq6EM6%@pN%f%<2JHFd1K4$dYoaAYz;$I$ zx)%!xnza=~y_NfS-RV>a=3B@YmtBOC^32A7POxpLL+o1d9`=9!iEBc}=Df?}65Y9D zOXxOM|N6`82pH(@Ye}y8|+;E4i0`L-4>kaHmAVbrj#$fVD+!P{1Jhi zb&ElHzK`tqRd~7tm0ui+QC(?}7K=f6z`=DU0E+SD$~YABt(1C&0N@n@-EO3zLA?$4 z3V`4W&+vfm2SD4=X6*ZPxdA{R^Ap{_;4t5^9s{ab{Tna;hB!sT8ei&X`)Xcsd3FF0 z#n}G8uSDza9cnXDS;g#xLMu~p^==L0nYPI7(G#VEhok42=OlDSk%6@~AI5>TALHOx zV&R~i9fwjcA&wO8?+f=G!z zDZj1mrO$|Hh>d?>k&!&wX9ECnUb{bj9|zZeEPydY(0?2I4brs)-$~o(F`#02 z!l0JUm%cJRtJ`qyt(0xOzBYpSZ(uE zSt)28%uZ3&fNP~*R_x-Ss|Qz3G!|y9n>n+z=ZV@L*h^D_%IoBLuF(Ik4uJ4B!G4i` z3g){3=m_)88${wch5Jg%#!fSqCK_Jw;(H*vLM<{}nja$C7gt=2(k|`+y6nW`I%zp^ z8;JdDKEiiju5q40p(H#OX@i)r=l$l=P`qDJ`P9D(yE_2X&bR}NW;@{}eDy0YX%X!2 z$^eLf%eA;}^dJEI?n_Ii`SPt%5ytNvR5?jqo-WeS+?@Px2{7(24VC9Qgl++`J0oE2Z-hAax724eA7HO^9{qc9L+m;#--!_q~4&R%h0^(uM#k- zBYCdw0bLLPUH9X0QzjAs@P!eCWs-Uxi6hkm?wbM`;m_scC*ExBLb*q5OU?9a7^A;P zN01!BmEHwJdl7_72Vc^q96%VKv^co6dM(HUR*M*50+1-%@n^nn6RzRPArDP_*B1a0 z6Sme)UrP{0S}8w_-+8KAZ(?fT<-;ajPJyZm``I(u8dup zZ_1VEL9rXlCp;B=qqZ2iG#br4x9@4|0rOD>VFQjiPAp3~Wmt9}RgejN({p>SKK|JX zzPf?+@5M!lU@U3@&6p3cyP)ww;e5*a8oTar{(kz%>u}P!=V!%$9oebQWKFQ%c=)p| zJK|@{@WvnY^b?{KFac=Zz6}C^pzF80{Zdy}veU})2PchS<~yO}YY2Q`)8?9K!x+&g zAmdqazNuDVv}fqmuN*zkI#*wN>3rnFg=?Crqud?PFmQ+rM}wGC5R&6Ls`3X@a`gWU zPY|o}TKDe8;Z5rd$?}&MX{nOC5=I<|Us^GKvem^?PCDTu%eKs&`T~f?*qx!Ej-T&I zCDcR7v1Fr4Jtz;8oN?jiEy8tgWk#zxyW{P?*KdBEg!!V?Fs*$2q|_f-CicH>=9JQc zg8YpDo#MN!&z-8;C*}4Smu%U#>8SCY1G=6{65LjIEj(~~UoPe*N;Tcr=_5O)V(jKe zn)_WC{X^iZPZD~7IL_wkKV89qzZp02xoUuJzz2$>0f--%lizNdXWW zZ>j#{GX(aC8K0c4o*^WzWI+D?7&AY?Qx>z#e8JYI%g0Z8JXw?q1%Rjx&N;7CJSp#o z!B5XU7Md?foy898iW9swN#TsoRAP9|_hyBr8hyCGIdA01X!4iAg#thvX46a0pUv{| zDG{CFqP*z`VVEy_OgaHq)qH1Vo-5!UL*@gt3tIf5!4Ll~)ca*Z1E9x)*?$~Hj4cE4 z6IJzb8DGi}9Ab7f;HoL8yf!cO?yZ-(PI&Xmraa%_R|7ej5H&N#FAqvN{p2Vm0K^Wy zp8edl4D3zu>JsBJ!WiG5`Jvx}DrFhLEAz~=v2g0#Y)4okMm%zz-04iF|Kj_U0nmf; zE6?4{iOtmC_v>Q2RFU}HQ7%E2PM&XeEbR+(>9_w}tvqRz9p;O7@DjtFgCBglI*iff zF=+vy%h9Yq+)Iq6dS6v&YP%;zbu>RT^QFL=aps$vlQ`hYiG?@YGhz^lMML)vp72cP zy~M{taC6mj*Avma@82$0=w-evJ96;!|GQypRp;fozrgA@aNZ*O%m+~m<8({K!_T~# zD)X)JX?uXRgH5xhTrSoW5%Cg>F<&;a%R_=H*~H9uy(31#FEGznnD3qYRsybk zLAC?f2l-Az{HH_5KO6deF&PQMemhw=bIJvIjKn04xhmHinElpdTKnp1%xAB15~NEEu>ybm}kv-0;|%Cap(DAn4c)%hGD+Cy~y?= zV4M?8iS^p^*hTlg80)C<)6Rkt9eC5rQ+~oZuLkIJ$Ai5!Ko`{fT@lW1FPA3Nk4pf= zNo}oquDCrGdlF#xk$3@w6nCAuQ(3U3fN9)0BGo(UI7hBhze8PJ%NeeRML?VZFPspM zJ<;cpXAfq==ov{v!<@*5mwsOX;!^?kL%CW_)H)8%b}}G4cDd_gd^ss_0`3Pa68U9C zCU?{omMhx5S;089fSZi@V$~18mJ_F1#A2^iJUaP6CXJfPzK$sX@`--_LiDs; z%DtQs6Spglgz*$Fhmfu=XHXAEIFL`aBamDV&@v*ntVdpKS>JKbh#OLl`RBL+z-@`m zFGNpk(^xrp&H%Py2CP_p=RCr$PT?v>J<(Yo}>YjTThT$3nlv9L31yKYwQM?dvJ)u!Nq9#6?tQ)hM zjfuG?d7^?o(Ot7@JXWJo(4HPgqw5(3&j3bIlmIdubAZ6WTny9G)7|wge_dTwT~%Gx zT{E!HZaz%_0XF|YP zjA#-ODf1)UG)a=U@-N+={6E$6%zyGLXfr^o7}%;L#P>pDuit$nJo{kx<3gUM8dM66Pj1dVbzKL0HV(U;5=U2T=zYIeh%Q66i-|5 zcp8mZX}%NfWUv&Y=4<|g8w2A|C|1FM27vCmeEf}1Fvj!_$ahTo6o5!$A9dK@pbHGGp`bm0{fZ}}`25OM+_()7}NFbadHr2jNuClrgQN{j1r z*8B`~DEqgA3AL_vQv-wo~P&atyFi&90_n(xBG7?2PN zH;0b7>ayI%p@2v^dt6ns4?M43rRoP-xPvbzVU51VBww z-C2y$YakS*Ijg?beD$eJEeNgwh-{A>hhSh0KxKW# z`DwKp7o2~XHD60MQ=xEMoFz_MGU>;g+<@Q;fbfQJzA!Lv4Tz>4xtg!U_qxKGx!Rc( z=eyB-`NoR8r9VHXWXGwYs_NcMAh-e`(){A@LAb5YgrAN7$f)@qe36T2CnZR8l4+f{ z5a|BUpmvJtjt{shg0*d*LE{U zJN=^hT2w^9-$GOV?KCSZumqsCx$YVw@tOa7obS<+J=CKh(AA5MyW=@C2x$ORQ?)R) z`S{HMCRl5dRUO`qgSM#!**JD*&Ud5v7Ez0-hGU?OtfM#6bJ^6k7--{HlcQ6sS+%GK zAq{{?b6p4|zTm6yEy78?V;8_MviKMbDIA7@c@@YL@}%Lr;+@#nvj@AQO*jy5H?84% zjdq-9$4||-ztYD22B_Y1% zoA4bpza&tK(}vGMS$?^#;LQg_F^LVWpJ8*y7wHeFoop7s;n#ep{k!LGM0Ogq~Eh!o-HdXEZR*(ML7%KLGyzwh;v3H4SqWdg zXwB|-(R8rhq0y@!G+!ISq^!;vel(UJtGs$*btk`E10d2I`3^+<$yxZihjOa_+h{(& z`uOr0IJSIBPQvFG$CJHyvnh<8M0a|NdVgttmg9)Pb&IFo`LqFm+NRofh{UrE^yAgx zI%qyWl+W@pfAm5G1i4u**Waerbtx*+Ox~;JXOZD&r}_Hsz_%7ny>qSxKzMJsROk`f z0KUL(73aIqd`X(-mnV$ZO(>g;69=D?tK7BgV~HNTvO`iNhaOYH;DQktUOXD*g+ovj zEJZZYh4!8nv_yBJrMt;^eWr#ox$@_+8k}~1oLIafR8`$2QBb%ke1Smhb?rgyG(Szi zP6=4LP|g^B9)=ey?L$7n@OEPjI(qk;oV`4+ih@c^8+ryRiiX*a*50!Z>svm+-tI;n zh+eJ8dvZ!inio3pmv2Y_)Hc;DBf?KIX|Of&nKfSpcHXFkD9%$_hPtHnq{s zO&IRbZZBbG5gkc?E%Dgu(DA>R&0cMIbx;rM-j}xGrRPFR&eLnYg~?hBe&OgVvX1@j zKgb+a$$p$bN%2$`-Vt6RFw&JtEovFkL%6H@naxf`o?m`k`H85inC?*| z_NOPr1YX*zHlxY&yLjAm`9)?KDD`MW>zD%PXr>ZVUyoyB{!oLCNR~px= z!nP~r z=j&+f++ahy77UPqrZmpiy#T1N!fF<2czz>*lD^}O%??M8L5R6=cfAD0Ltibr8~ z<#`a8kd?6ZcJIXdJ6}%Aya(hD!rU=eWpz*eMejA#prxBrke*)k^022}H=3_?>@jR& zwGGejB+yZra{v<{D!J(=X~~hM##qI|Mih_6sl(4fP*7eka4EK(2ex7Dp0|^NU~305~}#?Z(CXd_U$?Q5hOgSd;1w6IzK2D*}b zn0qx#f&(yZ$Z4o79-YxK_a=Mr)xI^@rc#3qRaOn2g~>V8o9bKF;qyIzwFyIW)co`} z^jle^VMPo?y7bhX12}2E6-^mAUlqEOg$>Fdg3+bpaa73|6z7#nj3Z-}*RulhKUh80g7Vz;xhzlVe8@i|km= zM^k3&MfggHr6d(joNw8sY@n;`>CLKdX;9&C%sD#b$;a?4_`}8s_I5XT622$Sm*c_| zy)o+H7O)>g6^4bFjI`tIp!FMIaE860=8Mh}}l&40n}gWEg_ zU$p|aoNrNWXyq2L9iTDBFw{Nmxaa)rqAK_EN)Lg#GoCVd7RC&$0<(y?xYjpyZo|>INUijXsReZ=D}8(0Ufx@$5$cJI%fo#dxusIN!+mDIt~y%P@Z6 z6dW_)Sfk)whM@Y>L`q_JR|7WkUZI{nDd#3l(0$(G)x!MId|9T9v5#5p_UE1^(6!cH z-9oc0GU7~}AAo?VgHOc-i3+^c=$)`>>2Ai_Z{C!a7&9i42CHz+*qwZfzPzIOfb6&l!A3VPQ_E8r)wjH_=w)vc$2e#sGyIwVF84*hJ z%Q1QIEQ~HY*40v^)z~}}-m?EwY~KG7lA`_{yOeBX8n({x4USeu(lTS`M?{EMvhcR2 zX9`S6Ey&os{^JWX!tJ-QE@TR%W+v`O2}jPG9NCh9YQV3V=)8;Oi&Fy0YY5ER=Ocy-jM!FCQRljig5 zzEwF7!%If_DSPm+@tuYh=!oqzaQ^I(7h&Xp@xG1K5$!;4q8EI@XM4w5>^$%lm`*V> z`8=cCtRpo3<_zVv4U!k-xBqz^NL1bd)`MWPyP$#djGE7{KDuNAW>(JeO(5!x>f6@i zb7=u4^-!l&&c!hUC;K|q{)79aP?ZDD|Jl;^0rqr#oxaOrM$WfT=oFBvL(}e>Edfxo z{h0?C(T_CbRPNHQw~O^kS6eD=*ahBpM!ezP{}#CE}5tWe)uA)4sWK#)b`6eT+4CXyFf8k%;O(w4IQsY^gYom#1oP*KRv za(_+TGFz%5BtO8g!lUr*kqdkk3cuOT1NAz`%lT5kg7G(^AgF9x;nRq{$zE_Dz=bb? zpjg5FXahFwdpotysAII_r1=UkNpW6i#!|U4E4<-}3RVxh#_*nR_=h?VfY^p~kiRVC;C>?@t90MisR*f>H**@W*;}HTf=$Re1&qJUo`EWE7h4BDr1qYkIyFv|81}U zLx!tE+NKrb{Lzb1Rxrp{$;betEP(g;FPLzXuVZjQbLXoUxC+FfTA2h&G|`DQ&3~51 zb$UZcr6z5LDX>IFbFY}T^esyOxKD^|d-5}qHfHkP4Ztrc%`3x<;b&n;;RxR>A(rUI zEA@XgER;_jdIly9p6S~dT=V0JxD@f3HJ|@~EO8K)+atD&@5|*qfE}S zdYZ#Azl85(MY?0|G~bQGwNOI6Y#6OxbmFqpSgJ)@1HpEEFkJum3YB89Yb)qE>p zy!#ey=DurwdR5n2`J5K5(!r9-&LU=oW-R4dTp_@eoJAp9du z^Cjw|hZj%3*ZY=b{8_>q?yq3^#e9);h*gm;jk`0xSCFYhs|Urz!J6+dS)%^$wIYqN zMZ~;TYoF)n=I7GF3>Im6eg^FALTu9Y)BoM}(64Uo->nODyL->mso z0f%)&$G^5gB0E1cW9hqA)T91gMgaJUku8thb0|^#X&Mz}GIRP8MdV`E(GX zaHd_zX~jjJ0FXfV`oRSPgqPAk;NVsBU7T+fRY|FAsw|*Srrbw6-YqO8Jlo1ZTujo1 zSDbvGR_V;d|BA10bDHs-$d>=S0fZ;yPndXF6E%gQu6=}4czF0VpK(4WcHN?rmZkPu zbtzWQ7NFj@=Ie)U0+J7bAb+$iV~N&-@H6HU#zuj|toi)oZa0Nay0`y6;-i8PssFK% zHk}5W$`YHYii+-##3o$OrtFvdhibbo8I?arG{ek`7=@UxDBoCdDhc>nnT zo&jjMCICC(J87f~$KI!!pY9L#FvhN3q+3uwA_3r&s@wiRd7?Y{TPEQ9L@<8p(5jZB zJ&8G_brbFAHD6u(@=x=n4=^x#gcA5==;UP`eh6KE58o)rYGRQu?>m74cu1}xSy79_ za-R8ooksSb=Hq`B2^PGKAn^O;C#O|pKS#t ze-k?CUZn}B@1)bG7NDPYn8E?tup<;;bSHtPrjDi4j%CSNai@m%$ZULzU4$l2=qqA$ zH#=c#IK=$Dt=DRFD}cM!@UD z#3vV@u)!(#jE}Z&+9Nu=< zM^%hO27ExGxI7*}%~dBX)$LR1i(Fmb(&i?_l WS`SWK_@%M{0000Py1p-DtRRCr$1T?vp?)tUaz>y1qWB#4ovfo{Q&OqoGZi7A(vaf>tJl15rYnV8Q3iLv=ulD}l{l|0HbIv_? zdEKwO@m4i--*@l1=ltLIfB%2B`xwsBqq?%;TShC512aYwCB}eg3^5D?(YcJ_93u2* zz_|tp4D1wu(?mD}&?y4yn8Ch40$-3}d}(C0?Y@0_!Qr#9sqAd2)aw<8&TmO3ucZWC z&A_e!FqVj<`Vp_J`Hygrc*_1z{?EFLup6MwAZ%`9slODJj5>HWw7o|GsC>3|P~Toz zMUK)BK*vuR-lBH7Z)pRVn!>v%H)jIV-W7Z0MpCMZ$SN>o`iYxwb=0;AgjsQ$y} zd8tAD{+T6=Vg}qygglScoTz@5cbNGChH@F!2PPJTRsyPtQAO{s+Ny4zU)b86V00S* zn>JB)(}9Mm#AqQSjCXA#{nEwEcg-%ymIxAICqTa$R5xPPwWTcC9YAzB09?m6u5Oq` zgr9#utx!h`0I+u1 z-T}F}x&H>n?guC<%=oblqA_N0xvIo?njg-5+cGv9)?F+G!qZtfsh{0eGU{Zefyg)j z8_N&eKn!IB8X`!p7-yYU>a(3d<~vP~&UW0KNQk_#ftHLfB?N~P4AX9(J@U0of{-x) zDl03q`n6y6D=;i1&U(R+fdMy;=4Xoey6j3-ch&ex8yNQnh9`_yxBQ~$`Jz-NfXD~{ z)hmw;qeM#ufFF7Zx~;7WaRc*w-*t{Q$J2cG_D*TOK09)8aLOjUmB`8}zGL>Vy3T^o zX#h5^Zn%sLdYM2ML>u1$B}TS$7BOG+W(y2+_@f~Oy5+7p`R{iIgiZmlvAp4CVpK_> zzR||FyP#?hH<0=9G+(+ZvzqVOT}o?hkL2xOtdWR{rre)j-BA!a48Z#G`k9FY`!6EO zj&1yJnC7d@ci1mwQpA!egYKU?H~)V+0z!uXs9tqoHh^cO!7@2HiI?Yx2FCDgr(2jW z1z~~tf~74-U<3pA7d<%gztaUFZ2+n(4owC#o+mP5Fu!{>-xn-xYv?;!N~b%JK=InZ zz>+CY(bNa>*QNtPS^#WZReOzrtZESTjx9S~srjbGg-%weN6Bae_6vNWCz$z?p{)X& zVHh_~nK$~)xFEy^psM1)xGcuD5*huYjUSISZd+Args@S*)QgTn{Pn7rMxGz&J#pfe zT;CH$iY665H0skhAjATovT|o`-{gR;04|9(zMbtT6_4(TrlI*AW*Wz?zStnjUVCGT##i)q69j`4aObd76+#oLq1YmvnfeDEOwwOI#UEC6&HY=}lZS`DKwiBWGLx=aq zh{8U&U_@`;`H|XW7=#bsIf1>OHu_W32;;kc5?Ej1QR<9bglzzpgn@}u=j$hRv;bJs zhzH&#!WChY9zhj1&u7B;0CMvZ$iJvB3dZ+CZZB(;JM7r<`cWL%*X(6GJ;i)yt%l`^ z?-V~YYLc$rS^zebAGimM%6gLdLx=amhyp#^!vJV+GqA2q7$ufG)xI;zd(}X0gDB-* zk*Xk0<`9Sy)9#+1U#`~O2S8~lB_`~S1mx45V17<+0{P=?w&z8&JqU>H zZyv+G&$tu`A;Aqw)-U#ua`gHmx0zm^AFBDvbG%BhU7sDx|88k169SdBqDeY7R5TQU zj5UhqDvgP!`Ce!U&-2e8)(ayF`{IHTy?ojpB{{m!KiPf?yWZ!k6&+*inD5s~?c%Qh z%?~1{*H`hbaLQ$bDa8+ut`zI606=U*`GM^Kz8{+B`_M^W^K)_;@-OO#G2{CoFNU_K z1H>oqpTe%~762X2^Ih4A$9xxT<$*G&?ESmvkD3q&fZ6F{Mzxa53QX!e^LzEq!uU(i z#f78%nM^uH4!hRz03C_68Cx997tqv~>qlGm2D`=vyYcQvM!n+HU-E$J^7>TTS{BOo2dg9E_5!0!SvSKgUC%OvwX2_%L!)8>!1Y;0#r<}cMN zKkrY8J_m_l4K=HoLJZmQX};^mK>qVAE-?WDdmP-I^sHlH~2-jtr`A$V|nRX$vx>$OgXNdrGr{bu`TyJGWtrkzI^{cqU@vUj8~?Z?=-Tf0EpJ+ zju<~6+lj$^A<1da%ROfht6E+=5m}5+xTmo@MHR*9H8zt=^fBPX(N=u2{WK2MwaC$m zq^T6^GyAc8BBt=JX|=s zFAmqYm|4=1hE{cRWe5qacBs2IgO$R*K4=w&)#SU``jz#+B%+^-tq5Owp$1{$PBnQl z|F%v}E*b7KRP7f{*tYptZ038QTDSBcl!NQ<^cH111#tj)98izjXAU=~Gc8sV8fu#H z@w+E+{D{4JL}8OxeIZ(?jPnnV+1ZzV35;M8d_AdG%GR%_Uqv8yY$DFO7tIW$hDjC! z!T@MIlf)~P4FaMXhG{{yfE`}Y7nff*SnB~Q0K8pO9x(R^N(Tp`es2?Ye|Q>44tP6M z<-KLLF@5eHxVJ2L{gGTo1*=+Fw-tnm7Aw@+S%2#$wxvr$nD3N(+YG-4@Xy}+%Q4jK zX|gv+>L{q+G?CjYfvayhALkCri3GrDmkt2&<`YL+OwXzPve|xU2=fC2uD-si_u6*d z!m7&ZcY)EkSjG(eP z3Y)4yOxRwr)jTD+sxwVKbrmDsQ^g1Gb&S$7U8J2d6jyB$Fu| zYdDR!s!ySuqNTYVhGF3K7cBsEsY~c44{aRK#}Wp7 z#9l6|`#%sSIb6v!^PM@_FaV4cA(@mGjD@NdUzeMmlf}F8+Jj3F|B+n)2m^o&!kLpz z;ER0u@2|da49TRZ*EW-5?y&JBI5?0q;B5}Tau7{-Dl1*CXsGq<^q6mzOSpa32(7X9 z?fwee-#QKwSC;F>I+QV&frE2#)lJ_*@4ntc+BtDrqMj_4PNNs(J?FALEDaOPAyURmRe1=(#47{J%% ztvAl%-XL|bdplpe2CPgm-zi52 zKyyHRt)HjkDj00UlWhQ|FEHUCTAUwW-ZCyaj;e z0qZLcfsC$UzC&dqn!r~6;q(6e&gpdm3<`JI;JL2&f(v1b`Kz$?kPp4CI?E!VbQVAZ$f72Ve)! zf?NbF&r&@g*`5Ob;fI<1xBwVfzw)3R1LT^h?Mg@U75i=}Sx|VTwJvB`-R}wXhBN<+3y5dp8Ja)u)h3|<&_y`zMX3Da-S$! zP-rbnS-Y%eGQg~tOxRIBuwNh(-S!!I%tbXm|GWDE;DfyKm{##aRt(@C$AhlZUeoYO z45;D&2>pPJG2e~Ishdg`jI$PI@%_L#2^;}nO_3oAmOIsd)rF(C6`b=e#NUh-hgRBzW4Zx1AmIruD2X31+%r}p0j#6r3z`B(Ot)Ykr zb^w&2{T7P#Vn|5MT2iN)VC;0yCz5(EmN{6Mr?J-!h)$z-K5&Quw>uOi9}+9 zL>yI$Y&7C9f56}zTriUFcw!ho!M}p7s{lB0q!lNQSiM`ZgU4TU!0a@`Ro{RZu={VP z&C$@hFI&*`l@PS;O2=ZpG9zayNeVa2TwM67763jLuy$$P`{Z=WVj5qk`TX3K*AK>p z`F*;|&Y|V<;cY&o;4n4{pd5e|?_LLcWT4{g)sB_I=ib58pBO)0sy+ z=KIzI*l`9^W-clW+o%m}D&3TQeAt*>uwPXmK2?{J>CahbyAuFQZVY++Ml!f2t+OS< z?T86O5sn8)0CYg}E&G}O?x|@m7#sPj0)FL-OKM7pVQHB0!6)1`%Ehbj|c!XW5&XZmZ^0Kd|l0p&(^*T&=o=Y z9>#n};qu4!1>c^kzT3zDh6<}%>1^NTIeJS|${oX(h8=`fdNDu)gR=+00l*xN@P;LL zX7th4GdNVsmrf~1Jk57*+ETKhV3O|JI0DkK!jk<@ z1GwKeA}G~JSUv6QwD?(L-D+1_=$^-mFVcn5nk@#(;D%teJi4KqIfEEWKz zrJJ(HUod(TPwl&s`7XmcXnbWakGeQIa$qf9deo^#WK#!2KpNUy3=A*^ZMS95NU#oxQLy*7wWA2EYu;Pwk(;vap$m z`ibU_mWQ)n^Mlv!xD<=yQH=&At`15$b#jyz044~}?E4WT_7cJR>XKmNr;A=rkc8JN6N-xG9PG%fm_6p&M5tl9Rt*Y);wJ^gE4wm{k~r(NK2`j+No0e3PNLJ zFAx@jg;ZR+sis{{Xc-ZG727u46!*ZkY5VF3T0Naai0{GBX~ zjWu(vX>_s#*Ne`gtQtpt2c_(QUS~02{zEV#U%WDB=EB16`w}1L;cK3$nGAzg0c37* z(lKAhE`h)fftCy@62L!Iy8WBKD%+h!1oXDu$+(^2MU%mbW)o_U6H1|;`CPQasl z1T|WlyIJ#XFH}cKyamZ|vK?lC@VoYbV;-9`hqZUs`27Bicz{@u)lb%3Pn0SH!}-DM zDg%tKGm?3!Ui1C2#1TQw)Kwa@S=#X_!XXf*r<-O*fs}Co_yd>ye(!+19QLaO@PJ|W z7u2-JKWA%6lb@kBSWZh~rJBk0^UqeVqVFjF*`bG=fK;$6ad>S ztm2O~cZ2Uk1C8lc=BLq97iEVr_C<4bO!bVkhx1wyCmFBhGeV+ZwdD(DFX2YfP4?sTZB|aORCrN4=x_5tmN&CNz=Qx zM*$G4TK3yLL$Y!bR}*jz0oO8M93SCwN0!t9)_<{9$~`G%Ap zKh7EeR7;fo_TZ32qVapg*u?-YCK%rVSpL_0t9k**BL*&Ad3NgB$_T9la5-rPu=neC t^zAZ;K1~>Gmyt3)n(^4#VQ{sb{|`J}LSg<8*GvEa002ovPDHLkV1n3txI_Q| literal 0 HcmV?d00001 diff --git a/src/store/auth/index.js b/src/store/auth/index.js index c914b6f..a26ecf5 100644 --- a/src/store/auth/index.js +++ b/src/store/auth/index.js @@ -7,12 +7,38 @@ export const useAuth = createGlobalState(() => { const refreshToken = useStorage('refreshToken', '', uniStorage) const userInfo = useStorage('userInfo', {}, uniStorage) const leaderList = useStorage('leaderList', [], uniStorage) + const myCompany = useStorage('myCompany','', uniStorage) const isLeader=ref(false) // const leaderList=ref([]) + const getUserInfo=async ()=>{ + const data={ + ID:userInfo.value.ID + } + const res= await userInfoApi(data) + if (res.status===0){ + userInfo.value=res.data + } + } + const getUserLeader=async ()=>{ + const data={ + departmentId:userInfo.value.PositionUsers?.map(x=>x.DepartmentId) + } + const res= await userLeaderApi(data) + if (res.status===0){ + isLeader.value=!!res.data.departmentLeaders?.find((x) => { + return x.userID === userInfo.value.ID + }) + leaderList.value=res.data.departmentLeaders + myCompany.value=res.data.company + } + + } return { leaderList, - + myCompany, + getUserLeader, + getUserInfo, userInfo, token, refreshToken, diff --git a/src/store/chatList/index.js b/src/store/chatList/index.js new file mode 100644 index 0000000..ae1744e --- /dev/null +++ b/src/store/chatList/index.js @@ -0,0 +1,20 @@ +import {createGlobalState,useStorage} from '@vueuse/core' +import {uniStorage} from "@/utils/uniStorage.js" + +import {ref} from 'vue' +export const useChatList = createGlobalState(() => { + // const token = useStorage('token', '', uniStorage) + // const refreshToken = useStorage('refreshToken', '', uniStorage) + // const userInfo = useStorage('userInfo', {}, uniStorage) + // const leaderList = useStorage('leaderList', [], uniStorage) + // const isLeader=ref(false) + // const leaderList=ref([]) + + return { + // leaderList, + + // userInfo, + // token, + // refreshToken, + } +})