2 lines
7.5 KiB
JavaScript
2 lines
7.5 KiB
JavaScript
import{d as a,r as e,G as l,b as s,K as t,j as u,f as n,az as o,h as i,n as v,a8 as c,a0 as r,e as d,c as _,w as m,k as f,P as p,o as g,l as b,m as h,p as y,q as w,t as k,v as x,S as z,D as C,x as T,F as I,y as D,z as F,ao as j,aA as A,a6 as M,aB as N,L as V,a7 as q,aq as B,_ as P}from"./index-BocV7xfP.js";import{o as R,a as S,s as G}from"./chat.DGahEOcp.js";const K=P(a({__name:"room",setup(a){const P=e(0),K=e(0),L=e(0),O=e(null),U=e([]),$=e(""),E=e(!1),H=e(!1),J=e(!1),Q=e(!1),W=e(!1),X=e(!1),Y=e(!1),Z=e(0),aa=e("");let ea=null,la=null,sa=0;const ta=l(()=>{var a;return(null==(a=O.value)?void 0:a.target_user)||null}),ua=l(()=>{var a,e;return!!(null==(e=null==(a=O.value)?void 0:a.relationship)?void 0:e.is_mutual)}),na=l(()=>{var a,e;return(null==(e=null==(a=O.value)?void 0:a.relationship)?void 0:e.relationship_text)||(ua.value?"互相关注":"对方还未添加你为好友")}),oa=l(()=>H.value||X.value||Y.value||!K.value),ia=l(()=>$.value.trim().length>0&&!oa.value),va=l(()=>X.value?"正在录音":Y.value?"语音识别中":"输入消息"),ca=l(()=>Y.value?"正在识别语音":X.value?"松开发起识别":"按住说话"),ra=l(()=>`${Math.min(Z.value,60)}s / 60s`);s(async a=>{t(),P.value=0,K.value=Number((null==a?void 0:a.session_id)||0),L.value=Number((null==a?void 0:a.target_user_id)||0),!K.value&&L.value&&await da(),K.value?(await _a(0,!0),ma()):(u({title:"会话参数错误",icon:"none"}),setTimeout(()=>Ta(),1200))}),n(()=>{K.value&&ma()}),o(()=>{fa(),wa()}),i(()=>{fa(),wa()});const da=async()=>{try{const a=await R({target_user_id:L.value});O.value=a,K.value=(null==a?void 0:a.id)||0}catch(a){K.value=0}},_a=async(a=0,e=!1)=>{if(K.value&&!(a>0&&J.value)){e&&(E.value=!0),a>0&&(J.value=!0);try{const e=await S({session_id:K.value,after_id:a,page_no:1,page_size:a>0?100:50});O.value=(null==e?void 0:e.session)||O.value;const l=(null==e?void 0:e.lists)||[];if(a>0){const a=new Set(U.value.map(a=>a.id)),e=l.filter(e=>!a.has(e.id));e.length&&(U.value.push(...e),Ca())}else U.value=l,Ca()}catch(l){e&&u({title:"消息加载失败",icon:"none"})}finally{e&&(E.value=!1),a>0&&(J.value=!1)}}},ma=()=>{!ea&&K.value&&(ea=setInterval(()=>{const a=U.value.length?Number(U.value[U.value.length-1].id||0):0;_a(a>0?a:0)},3e3))},fa=()=>{ea&&(clearInterval(ea),ea=null)},pa=async()=>{const a=$.value.trim();if(a&&ia.value)if(a.length>1e3)u({title:"文字消息最多1000字",icon:"none"});else{H.value=!0;try{const e=await G({session_id:K.value,message_type:"text",content:a});$.value="",za(e)}catch(e){u({title:"发送失败",icon:"none"})}finally{H.value=!1}}},ga=()=>{oa.value||A({count:9,sizeType:["compressed"],sourceType:["album","camera"],success:async a=>{const e=a.tempFilePaths||[];if(e.length){H.value=!0,M({title:"发送中..."});try{for(const a of e){const e=await N(a,V()||""),l=(null==e?void 0:e.uri)||(null==e?void 0:e.url)||"";if(!l)continue;const s=await G({session_id:K.value,message_type:"image",content:l});za(s)}}catch(l){u({title:"图片发送失败",icon:"none"})}finally{q(),H.value=!1}}}})},ba=()=>{X.value||Y.value||H.value||!K.value||(W.value?Q.value=!Q.value:u({title:"请在App中使用语音输入",icon:"none"}))},ha=()=>{if(!W.value||X.value||Y.value||H.value)return;const a=null;a?(X.value=!0,Z.value=0,sa=Date.now(),ka(),a.start({duration:6e4,sampleRate:16e3,numberOfChannels:1,encodeBitRate:48e3,format:"mp3"})):u({title:"请在App中使用语音输入",icon:"none"})},ya=()=>{if(!X.value)return;Date.now()-sa<800&&u({title:"说话时间太短",icon:"none"}),X.value=!1,xa()},wa=()=>{X.value&&(X.value=!1,xa())},ka=()=>{xa(),la=setInterval(()=>{Z.value=Math.min(60,Math.floor((Date.now()-sa)/1e3))},200)},xa=()=>{la&&(clearInterval(la),la=null)},za=a=>{(null==a?void 0:a.id)&&(U.value.some(e=>e.id===a.id)||(U.value.push(a),Ca()))},Ca=()=>{v(()=>{const a=U.value[U.value.length-1];(null==a?void 0:a.id)&&(aa.value="msg-"+a.id)})},Ta=()=>{c().length>1?r():d({url:"/pages/private_chat/list"})};return(a,e)=>{const l=p("u-icon"),s=f,t=y,u=w,n=p("u-loading"),o=z,i=j;return g(),_(s,{class:"chat-room-page"},{default:m(()=>[b(s,{class:"room-nav",style:h({paddingTop:P.value+"px"})},{default:m(()=>[b(s,{class:"room-nav__btn",onClick:Ta},{default:m(()=>[b(l,{name:"arrow-left",size:"34",color:"#111827"})]),_:1}),b(s,{class:"room-nav__profile"},{default:m(()=>{var a;return[b(t,{class:"room-nav__avatar",src:(null==(a=ta.value)?void 0:a.avatar)||"/static/images/avatar.png",mode:"aspectFill"},null,8,["src"]),b(s,{class:"room-nav__text"},{default:m(()=>[b(u,{class:"room-nav__name"},{default:m(()=>{var a;return[k(x((null==(a=ta.value)?void 0:a.nickname)||"私聊"),1)]}),_:1}),b(u,{class:"room-nav__relation"},{default:m(()=>[k(x(na.value),1)]),_:1})]),_:1})]}),_:1}),b(s,{class:"room-nav__btn"})]),_:1},8,["style"]),b(o,{"scroll-y":"",class:"message-list","scroll-into-view":aa.value,"scroll-with-animation":""},{default:m(()=>[E.value&&0===U.value.length?(g(),_(s,{key:0,class:"message-state"},{default:m(()=>[b(n,{mode:"circle"})]),_:1})):C("",!0),O.value&&!ua.value?(g(),_(s,{key:1,class:"relationship-notice"},{default:m(()=>[b(u,null,{default:m(()=>[k(x(na.value),1)]),_:1})]),_:1})):C("",!0),(g(!0),T(I,null,D(U.value,a=>(g(),_(s,{id:"msg-"+a.id,key:a.id,class:F(["message-row",{"message-row--self":a.is_self}])},{default:m(()=>[b(s,{class:F(["message-bubble",{"message-bubble--image":"image"===a.message_type}])},{default:m(()=>["text"===a.message_type?(g(),_(u,{key:0,class:"message-bubble__text"},{default:m(()=>[k(x(a.content),1)]),_:2},1024)):(g(),_(t,{key:1,class:"message-bubble__image",src:a.content,mode:"widthFix",onClick:e=>(a=>{if(!a)return;const e=U.value.filter(a=>"image"===a.message_type&&a.content).map(a=>a.content);B({current:a,urls:e.length?e:[a]})})(a.content)},null,8,["src","onClick"]))]),_:2},1032,["class"])]),_:2},1032,["id","class"]))),128)),E.value||0!==U.value.length?C("",!0):(g(),_(s,{key:2,class:"message-empty"},{default:m(()=>[b(u,null,{default:m(()=>[k("开始私聊吧")]),_:1})]),_:1}))]),_:1},8,["scroll-into-view"]),b(s,{class:"input-panel"},{default:m(()=>[Q.value?(g(),_(s,{key:0,class:"voice-panel"},{default:m(()=>[b(s,{class:"voice-panel__status"},{default:m(()=>[b(s,{class:F(["voice-panel__dot",{"voice-panel__dot--active":X.value}])},null,8,["class"]),b(u,null,{default:m(()=>[k(x(ca.value),1)]),_:1})]),_:1}),b(s,{class:F(["voice-panel__button",{"voice-panel__button--recording":X.value,"voice-panel__button--disabled":Y.value}]),onTouchstart:ha,onTouchend:ya,onTouchcancel:wa},{default:m(()=>[b(l,{name:"mic",size:"42",color:X.value?"#fff":"#185dff"},null,8,["color"])]),_:1},8,["class"]),b(s,{class:"voice-panel__meta"},{default:m(()=>[b(u,null,{default:m(()=>[k(x(ra.value),1)]),_:1})]),_:1})]),_:1})):C("",!0),b(s,{class:"input-bar"},{default:m(()=>[b(s,{class:F(["input-bar__tool",{"input-bar__tool--disabled":oa.value,"input-bar__tool--active":Q.value}]),onClick:ba},{default:m(()=>[b(l,{name:"mic",size:"34",color:"#185dff"})]),_:1},8,["class"]),b(s,{class:F(["input-bar__tool",{"input-bar__tool--disabled":oa.value}]),onClick:ga},{default:m(()=>[b(l,{name:"photo",size:"34",color:"#185dff"})]),_:1},8,["class"]),b(i,{modelValue:$.value,"onUpdate:modelValue":e[0]||(e[0]=a=>$.value=a),class:"input-bar__textarea",maxlength:"1000",disabled:H.value||X.value||Y.value,placeholder:va.value,"disable-default-padding":"","confirm-type":"send",onConfirm:pa},null,8,["modelValue","disabled","placeholder"]),b(s,{class:F(["input-bar__send",{"input-bar__send--disabled":!ia.value}]),onClick:pa},{default:m(()=>[b(l,{name:"arrow-upward",size:"30",color:"#fff"})]),_:1},8,["class"])]),_:1})]),_:1})]),_:1})}}}),[["__scopeId","data-v-c06fbd7d"]]);export{K as default};
|