2 lines
5.4 KiB
JavaScript
2 lines
5.4 KiB
JavaScript
import{u as e,f as a,$ as t,aR as s,ai as o,aS as l,o as r,c as n,w as u,aa as i,O as c,i as v,b as d,q as m,s as p,F as _,j as f,k as g,m as b,az as y,r as k,a as h,aT as w,p as S,aU as j,t as I}from"./index-8146d74e.js";import{_ as x}from"./u-icon.58b55f5a.js";import{_ as z}from"./u-navbar.938f0656.js";import{_ as $}from"./u-action-sheet.b1cdb0b4.js";import{_ as O}from"./u-avatar.52524306.js";import{_ as T}from"./u-input.3d21ba1d.js";import{_ as W}from"./u-button.88325869.js";import{a as C,b as D,c as V}from"./chat.e38d6e09.js";import{_ as N}from"./_plugin-vue_export-helper.1b428a4d.js";import"./u-popup.5aaa2bdd.js";const U=N({__name:"index",setup(N){const U=i(),q=e(),J=a([]),E=a(""),F=a(0),H=a(!1),M=a(0),P=a(null),R=a({avatar:"/static/default-avatar.png",nickname:"用户"}),X=a({avatar:q.userInfo.avatar,nickname:q.userInfo.nickname}),A=a("在线聊天"),B=a(!1),G=a([{name:"查看用户信息"},{name:"清除聊天记录"},{name:"投诉用户"}]),K=e=>{if(!e)return"";const a=new Date(e);return`${a.getHours()}:${a.getMinutes().toString().padStart(2,"0")}`},L=async()=>{H.value=!0;try{const e=await D({conversation_id:F.value,page:1,page_size:20});J.value=e.list,Y()}catch(e){console.error("加载聊天历史失败",e)}finally{H.value=!1}},Q=async()=>{if(!E.value.trim())return;const e=E.value.trim();try{ae(e);const a={id:Date.now(),conversation_id:F.value,sender_id:q.userInfo.id,sender_type:2,receiver_id:R.value.id,receiver_type:1,content:e,message_type:1,read_status:0,create_time:(new Date).toISOString(),user:{avatar:X.value.avatar},isTemp:!0};J.value.push(a),E.value="",Y()}catch(a){console.error("发送消息失败",a)}},Y=()=>{c(()=>{M.value=M.value+1,setTimeout(()=>{M.value=999999},100)})},Z=()=>{const e=q.token;q.userInfo.id;P.value=new WebSocket(`ws://laowoanmo.heibaokeji.com:9501?token=${e}&type=2`),P.value.onopen=()=>{console.log("WebSocket连接成功")},P.value.onmessage=e=>{const a=JSON.parse(e.data);"new"===a.action&&ee(a.data)},P.value.onerror=e=>{console.error("WebSocket错误",e)},P.value.onclose=()=>{console.log("WebSocket连接关闭"),setTimeout(Z,3e3)}},ee=e=>{if(e.conversation_id===F.value){if(2===e.sender_type){const a=J.value.findIndex(a=>a.isTemp&&a.content===e.content);-1!==a?J.value.splice(a,1,{...e,user:{avatar:X.value.avatar}}):J.value.push({...e,user:{avatar:X.value.avatar}})}else J.value.push({...e,user:{avatar:R.value.avatar}});Y()}},ae=e=>{if(!P.value||P.value.readyState!==WebSocket.OPEN)return;const a={action:"send",conversation_id:F.value,sender_id:q.userInfo.id,sender_type:2,receiver_id:R.value.id,receiver_type:1,content:e};P.value.send(JSON.stringify(a))},te=e=>{switch(B.value=!1,e.name){case"查看用户信息":b({url:`/pages/user/detail?id=${R.value.id}`});break;case"清除聊天记录":y({title:"提示",content:"确定要清除聊天记录吗?",success:e=>{e.confirm&&(J.value=[])}});break;case"投诉用户":b({url:"/pages/complaint/create?target_id="+R.value.id})}};return t(async()=>{if(F.value=parseInt(U.query.conversation_id),!F.value)return s({title:"会话ID无效",icon:"error"}),void o();await(async()=>{try{const e=await C(F.value);200===e.code&&(R.value=e.data.user_info,X.value=e.data.tech_info,A.value=R.value.nickname)}catch(e){console.error("加载会话信息失败",e)}})(),await L(),await(async()=>{if(F.value)try{await V({conversation_id:F.value,user_id:q.userInfo.id})}catch(e){console.error("标记已读失败",e)}})(),Z()}),l(()=>{P.value&&(P.value.close(),P.value=null)}),(e,a)=>{const t=k(h("u-icon"),x),s=k(h("u-navbar"),z),o=k(h("u-action-sheet"),$),l=k(h("u-avatar"),O),i=v,c=w("u-loading-icon"),b=S,y=j,C=k(h("u-input"),T),D=k(h("u-button"),W);return r(),n(i,{class:"chat-container"},{default:u(()=>[d(s,{title:A.value,"is-back":!0,"border-bottom":!1,"title-color":"#000","back-icon-color":"#000"},{right:u(()=>[d(t,{name:"more-dot-fill",size:"22",color:"#000",onClick:a[0]||(a[0]=e=>B.value=!0)})]),_:1},8,["title"]),d(o,{show:B.value,actions:G.value,onClose:a[1]||(a[1]=e=>B.value=!1),onSelect:te},null,8,["show","actions"]),d(y,{"scroll-y":"true",class:"chat-messages","scroll-top":M.value,onScrolltolower:L},{default:u(()=>[(r(!0),m(_,null,p(J.value,(e,a)=>(r(),n(i,{key:a,class:"message-item"},{default:u(()=>[1===e.sender_type?(r(),n(i,{key:0,class:"message-other"},{default:u(()=>[d(l,{src:R.value.avatar,size:"40"},null,8,["src"]),d(i,{class:"message-content"},{default:u(()=>[d(i,{class:"message-bubble"},{default:u(()=>[f(I(e.content),1)]),_:2},1024),d(i,{class:"message-time"},{default:u(()=>[f(I(K(e.create_time)),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)):(r(),n(i,{key:1,class:"message-me"},{default:u(()=>[d(i,{class:"message-content"},{default:u(()=>[d(i,{class:"message-bubble"},{default:u(()=>[f(I(e.content),1)]),_:2},1024),d(i,{class:"message-time"},{default:u(()=>[f(I(K(e.create_time)),1)]),_:2},1024)]),_:2},1024),d(l,{src:X.value.avatar,size:"40"},null,8,["src"])]),_:2},1024))]),_:2},1024))),128)),H.value?(r(),n(i,{key:0,class:"loading-more"},{default:u(()=>[d(c),d(b,{class:"ml-2"},{default:u(()=>[f("加载中...")]),_:1})]),_:1})):g("",!0)]),_:1},8,["scroll-top"]),d(i,{class:"input-area"},{default:u(()=>[d(C,{modelValue:E.value,"onUpdate:modelValue":a[2]||(a[2]=e=>E.value=e),placeholder:"输入消息...",border:"none",class:"input-box",onConfirm:Q},null,8,["modelValue"]),d(D,{type:"primary",size:"mini",disabled:!E.value.trim(),onClick:Q},{default:u(()=>[f(" 发送 ")]),_:1},8,["disabled"])]),_:1})]),_:1})}}},[["__scopeId","data-v-f3f3d1a7"]]);export{U as default};
|