2 lines
9.4 KiB
JavaScript
2 lines
9.4 KiB
JavaScript
import{d as e,u as a,r as l,G as s,b as t,K as u,L as n,j as o,f as i,az as v,h as c,n as r,a8 as _,a0 as d,e as m,c as f,w as p,k as g,P as h,o as b,l as y,m as w,p as k,q as x,t as z,v as C,S as I,D as T,R as F,x as j,F as D,y as N,z as R,ao as q,aA as A,a6 as M,aB as V,a7 as B,aq as P,_ as S}from"./index-CXWaumcQ.js";import{o as U,a as G,s as K}from"./chat.UZ-ucher.js";import{t as L}from"./community.CNZNZsqY.js";import"./aiRequest.br0QglYY.js";const O="/static/images/avatar.png",$="对方未添加互关",E=S(e({__name:"room",setup(e){const S=a(),E=l(0),H=l(0),J=l(0),Q=l(null),W=l([]),X=l(""),Y=l(!1),Z=l(!1),ee=l(!1),ae=l(!1),le=l(!1),se=l(!1),te=l(!1),ue=l(0),ne=l(!1),oe=l("");let ie=null,ve=null,ce=0;const re=s(()=>{var e;return(null==(e=Q.value)?void 0:e.target_user)||null}),_e=s(()=>{var e;const a=null==(e=Q.value)?void 0:e.relationship;return!!((null==a?void 0:a.is_mutual)||(null==a?void 0:a.is_followed_by_me)&&(null==a?void 0:a.is_following_me))}),de=s(()=>{var e;return(null==(e=S.userInfo)?void 0:e.avatar)||O}),me=s(()=>{var e;const a=null==(e=Q.value)?void 0:e.relationship;return!a||a.is_mutual?"":a.is_followed_by_me?$:a.is_following_me?"对方已关注":"对方未添加好友"}),fe=s(()=>{var e;return!!Q.value&&!_e.value&&!(null==(e=Q.value.relationship)?void 0:e.is_followed_by_me)}),pe=s(()=>{var e,a;return(null==(a=null==(e=Q.value)?void 0:e.relationship)?void 0:a.is_following_me)?"添加互关":"添加好友"}),ge=s(()=>Z.value||se.value||te.value||!H.value),he=s(()=>X.value.trim().length>0&&!ge.value),be=s(()=>se.value?"正在录音":te.value?"语音识别中":"输入消息"),ye=s(()=>te.value?"正在识别语音":se.value?"松开发起识别":"按住说话"),we=s(()=>`${Math.min(ue.value,60)}s / 60s`);t(async e=>{var a;u(),E.value=0,n()&&!(null==(a=S.userInfo)?void 0:a.id)&&S.getUser().catch(()=>{}),H.value=Number((null==e?void 0:e.session_id)||0),J.value=Number((null==e?void 0:e.target_user_id)||0),!H.value&&J.value&&await ke(),H.value?(await xe(0,!0),ze()):(o({title:"会话参数错误",icon:"none"}),setTimeout(()=>Be(),1200))}),i(()=>{H.value&&ze()}),v(()=>{Ce(),Re()}),c(()=>{Ce(),Re()});const ke=async()=>{try{const e=await U({target_user_id:J.value});Q.value=e,H.value=(null==e?void 0:e.id)||0}catch(e){H.value=0}},xe=async(e=0,a=!1)=>{if(H.value&&!(e>0&&ee.value)){a&&(Y.value=!0),e>0&&(ee.value=!0);try{const a=await G({session_id:H.value,after_id:e,page_no:1,page_size:e>0?100:50});Q.value=(null==a?void 0:a.session)||Q.value;const l=(null==a?void 0:a.lists)||[];if(e>0){const e=new Set(W.value.map(e=>e.id)),a=l.filter(a=>!e.has(a.id));a.length&&(W.value.push(...a),Ve())}else W.value=l,Ve()}catch(l){a&&o({title:"消息加载失败",icon:"none"})}finally{a&&(Y.value=!1),e>0&&(ee.value=!1)}}},ze=()=>{!ie&&H.value&&(ie=setInterval(()=>{const e=W.value.length?Number(W.value[W.value.length-1].id||0):0;xe(e>0?e:0)},3e3))},Ce=()=>{ie&&(clearInterval(ie),ie=null)},Ie=async()=>{var e,a;if(ne.value||!fe.value)return;const l=Number((null==(e=re.value)?void 0:e.id)||(null==(a=Q.value)?void 0:a.target_user_id)||J.value||0);if(l){ne.value=!0;try{const e=await L({follow_user_id:l});if(!!!(null==e?void 0:e.is_followed))return void o({title:"添加失败,请重试",icon:"none"});if(Q.value){const e=Q.value.relationship||{},a=!!e.is_following_me,l={...e,is_followed_by_me:!0,is_following_me:a,is_mutual:a,relationship_text:a?"互相关注":$};Q.value={...Q.value,relationship:l}}o({title:"已添加好友",icon:"success"})}catch(s){o({title:"添加失败,请重试",icon:"none"})}finally{ne.value=!1}}else o({title:"用户信息异常",icon:"none"})},Te=async()=>{const e=X.value.trim();if(e&&he.value)if(e.length>1e3)o({title:"文字消息最多1000字",icon:"none"});else{Z.value=!0;try{const a=await K({session_id:H.value,message_type:"text",content:e});X.value="",Me(a)}catch(a){o({title:"发送失败",icon:"none"})}finally{Z.value=!1}}},Fe=()=>{ge.value||A({count:9,sizeType:["compressed"],sourceType:["album","camera"],success:async e=>{const a=e.tempFilePaths||[];if(a.length){Z.value=!0,M({title:"发送中..."});try{for(const e of a){const a=await V(e,n()||""),l=(null==a?void 0:a.uri)||(null==a?void 0:a.url)||"";if(!l)continue;const s=await K({session_id:H.value,message_type:"image",content:l});Me(s)}}catch(l){o({title:"图片发送失败",icon:"none"})}finally{B(),Z.value=!1}}}})},je=()=>{se.value||te.value||Z.value||!H.value||(le.value?ae.value=!ae.value:o({title:"请在App中使用语音输入",icon:"none"}))},De=()=>{if(!le.value||se.value||te.value||Z.value)return;const e=null;e?(se.value=!0,ue.value=0,ce=Date.now(),qe(),e.start({duration:6e4,sampleRate:16e3,numberOfChannels:1,encodeBitRate:48e3,format:"mp3"})):o({title:"请在App中使用语音输入",icon:"none"})},Ne=()=>{if(!se.value)return;Date.now()-ce<800&&o({title:"说话时间太短",icon:"none"}),se.value=!1,Ae()},Re=()=>{se.value&&(se.value=!1,Ae())},qe=()=>{Ae(),ve=setInterval(()=>{ue.value=Math.min(60,Math.floor((Date.now()-ce)/1e3))},200)},Ae=()=>{ve&&(clearInterval(ve),ve=null)},Me=e=>{(null==e?void 0:e.id)&&(W.value.some(a=>a.id===e.id)||(W.value.push(e),Ve()))},Ve=()=>{r(()=>{const e=W.value[W.value.length-1];(null==e?void 0:e.id)&&(oe.value="msg-"+e.id)})},Be=()=>{_().length>1?d():m({url:"/pages/private_chat/list"})};return(e,a)=>{const l=h("u-icon"),s=g,t=k,u=x,n=h("u-loading"),o=I,i=q;return b(),f(s,{class:"chat-room-page"},{default:p(()=>[y(s,{class:"room-nav",style:w({paddingTop:E.value+"px"})},{default:p(()=>[y(s,{class:"room-nav__btn",onClick:Be},{default:p(()=>[y(l,{name:"arrow-left",size:"34",color:"#111827"})]),_:1}),y(s,{class:"room-nav__profile"},{default:p(()=>{var e;return[y(t,{class:"room-nav__avatar",src:(null==(e=re.value)?void 0:e.avatar)||O,mode:"aspectFill"},null,8,["src"]),y(s,{class:"room-nav__text"},{default:p(()=>[y(u,{class:"room-nav__name"},{default:p(()=>{var e;return[z(C((null==(e=re.value)?void 0:e.nickname)||"私聊"),1)]}),_:1})]),_:1})]}),_:1}),y(s,{class:"room-nav__btn"})]),_:1},8,["style"]),y(o,{"scroll-y":"",class:"message-list","scroll-into-view":oe.value,"scroll-with-animation":""},{default:p(()=>[Y.value&&0===W.value.length?(b(),f(s,{key:0,class:"message-state"},{default:p(()=>[y(n,{mode:"circle"})]),_:1})):T("",!0),me.value?(b(),f(s,{key:1,class:"relationship-notice"},{default:p(()=>[y(s,{class:"relationship-notice__inner"},{default:p(()=>[y(u,{class:"relationship-notice__text"},{default:p(()=>[z(C(me.value),1)]),_:1}),fe.value?(b(),f(u,{key:0,class:"relationship-notice__action",onClick:F(Ie,["stop"])},{default:p(()=>[z(C(ne.value?"添加中":pe.value),1)]),_:1})):T("",!0)]),_:1})]),_:1})):T("",!0),(b(!0),j(D,null,N(W.value,e=>(b(),f(s,{id:"msg-"+e.id,key:e.id,class:R(["message-row",{"message-row--self":e.is_self}])},{default:p(()=>{var a;return[e.is_self?T("",!0):(b(),f(t,{key:0,class:"message-row__avatar",src:(null==(a=re.value)?void 0:a.avatar)||O,mode:"aspectFill"},null,8,["src"])),y(s,{class:"message-row__body"},{default:p(()=>[e.is_self?T("",!0):(b(),f(u,{key:0,class:"message-row__name"},{default:p(()=>{var e;return[z(C((null==(e=re.value)?void 0:e.nickname)||"对方"),1)]}),_:1})),y(s,{class:R(["message-bubble",{"message-bubble--image":"image"===e.message_type}])},{default:p(()=>["text"===e.message_type?(b(),f(u,{key:0,class:"message-bubble__text"},{default:p(()=>[z(C(e.content),1)]),_:2},1024)):(b(),f(t,{key:1,class:"message-bubble__image",src:e.content,mode:"widthFix",onClick:a=>(e=>{if(!e)return;const a=W.value.filter(e=>"image"===e.message_type&&e.content).map(e=>e.content);P({current:e,urls:a.length?a:[e]})})(e.content)},null,8,["src","onClick"]))]),_:2},1032,["class"])]),_:2},1024),e.is_self?(b(),f(t,{key:1,class:"message-row__avatar message-row__avatar--self",src:de.value,mode:"aspectFill"},null,8,["src"])):T("",!0)]}),_:2},1032,["id","class"]))),128)),Y.value||0!==W.value.length?T("",!0):(b(),f(s,{key:2,class:"message-empty"},{default:p(()=>[y(u,null,{default:p(()=>[z("开始私聊吧")]),_:1})]),_:1}))]),_:1},8,["scroll-into-view"]),y(s,{class:"input-panel"},{default:p(()=>[ae.value?(b(),f(s,{key:0,class:"voice-panel"},{default:p(()=>[y(s,{class:"voice-panel__status"},{default:p(()=>[y(s,{class:R(["voice-panel__dot",{"voice-panel__dot--active":se.value}])},null,8,["class"]),y(u,null,{default:p(()=>[z(C(ye.value),1)]),_:1})]),_:1}),y(s,{class:R(["voice-panel__button",{"voice-panel__button--recording":se.value,"voice-panel__button--disabled":te.value}]),onTouchstart:De,onTouchend:Ne,onTouchcancel:Re},{default:p(()=>[y(l,{name:"mic",size:"42",color:se.value?"#fff":"#185dff"},null,8,["color"])]),_:1},8,["class"]),y(s,{class:"voice-panel__meta"},{default:p(()=>[y(u,null,{default:p(()=>[z(C(we.value),1)]),_:1})]),_:1})]),_:1})):T("",!0),y(s,{class:"input-bar"},{default:p(()=>[y(s,{class:R(["input-bar__tool",{"input-bar__tool--disabled":ge.value,"input-bar__tool--active":ae.value}]),onClick:je},{default:p(()=>[y(l,{name:"mic",size:"34",color:"#185dff"})]),_:1},8,["class"]),y(s,{class:R(["input-bar__tool",{"input-bar__tool--disabled":ge.value}]),onClick:Fe},{default:p(()=>[y(l,{name:"photo",size:"34",color:"#185dff"})]),_:1},8,["class"]),y(i,{modelValue:X.value,"onUpdate:modelValue":a[0]||(a[0]=e=>X.value=e),class:"input-bar__textarea",maxlength:"1000",disabled:Z.value||se.value||te.value,placeholder:be.value,"disable-default-padding":"","confirm-type":"send",onConfirm:Te},null,8,["modelValue","disabled","placeholder"]),y(s,{class:R(["input-bar__send",{"input-bar__send--disabled":!he.value}]),onClick:Te},{default:p(()=>[y(l,{name:"arrow-upward",size:"30",color:"#fff"})]),_:1},8,["class"])]),_:1})]),_:1})]),_:1})}}}),[["__scopeId","data-v-48e74a08"]]);export{E as default};
|