vue-chat-kit 0.3.9 → 0.3.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/vue-chat-kit.css +1 -1
  2. package/dist/vue-chat-kit.es.js +4420 -2877
  3. package/dist/vue-chat-kit.umd.js +1 -1
  4. package/package.json +1 -1
  5. package/src/components/AvatarCrop.vue +16 -127
  6. package/src/components/ChatPanel.vue +503 -2818
  7. package/src/components/EmojiPicker.vue +2 -73
  8. package/src/components/chat/ChatWindow.vue +177 -0
  9. package/src/components/chat/ContentList.vue +300 -0
  10. package/src/components/chat/ContextMenu.vue +32 -0
  11. package/src/components/chat/GroupSidebar.vue +284 -0
  12. package/src/components/chat/MainArea.vue +87 -0
  13. package/src/components/chat/Sidebar.vue +52 -0
  14. package/src/components/chat/dialogs/AddFriendDialog.vue +62 -0
  15. package/src/components/chat/dialogs/CreateGroupDialog.vue +86 -0
  16. package/src/components/chat/dialogs/GroupDetailDialog.vue +132 -0
  17. package/src/components/ui/Button.vue +190 -0
  18. package/src/components/ui/Dialog.vue +194 -0
  19. package/src/components/ui/Empty.vue +66 -0
  20. package/src/components/ui/Input.vue +166 -0
  21. package/src/components/ui/Message.vue +186 -0
  22. package/src/components/ui/MessageBox.vue +143 -0
  23. package/src/components/ui/MessageManager.vue +92 -0
  24. package/src/components/ui/Switch.vue +65 -0
  25. package/src/components/ui/Tag.vue +68 -0
  26. package/src/components/ui/icons/ArrowDown.vue +5 -0
  27. package/src/components/ui/icons/ArrowRight.vue +5 -0
  28. package/src/components/ui/icons/Bell.vue +6 -0
  29. package/src/components/ui/icons/Camera.vue +6 -0
  30. package/src/components/ui/icons/ChatDotRound.vue +5 -0
  31. package/src/components/ui/icons/Check.vue +5 -0
  32. package/src/components/ui/icons/CircleCheck.vue +6 -0
  33. package/src/components/ui/icons/Clock.vue +6 -0
  34. package/src/components/ui/icons/Close.vue +5 -0
  35. package/src/components/ui/icons/Delete.vue +8 -0
  36. package/src/components/ui/icons/Edit.vue +6 -0
  37. package/src/components/ui/icons/Folder.vue +5 -0
  38. package/src/components/ui/icons/Minus.vue +5 -0
  39. package/src/components/ui/icons/Monitor.vue +7 -0
  40. package/src/components/ui/icons/Moon.vue +5 -0
  41. package/src/components/ui/icons/Picture.vue +7 -0
  42. package/src/components/ui/icons/Plus.vue +5 -0
  43. package/src/components/ui/icons/Search.vue +6 -0
  44. package/src/components/ui/icons/Setting.vue +6 -0
  45. package/src/components/ui/icons/Sunny.vue +6 -0
  46. package/src/components/ui/icons/User.vue +6 -0
  47. package/src/components/ui/icons/UserFilled.vue +6 -0
  48. package/src/components/ui/icons/Warning.vue +5 -0
  49. package/src/components/ui/icons/index.js +24 -0
  50. package/src/components/ui/index.js +10 -0
  51. package/src/composables/useFriendChat.js +10 -14
  52. package/src/composables/useGroupChat.js +140 -48
  53. package/src/composables/useMessage.js +21 -0
  54. package/src/composables/useMessageBox.js +98 -0
  55. package/src/composables/useTheme.js +140 -0
  56. package/src/config/index.js +1 -0
  57. package/src/const/index.js +1 -0
  58. package/src/const/theme.js +19 -0
  59. package/src/core/api.js +13 -2
  60. package/src/index.js +5 -5
  61. package/src/styles/_base.scss +38 -0
  62. package/src/styles/_variables.scss +43 -0
  63. package/src/styles/components/_add-friend-dialog.scss +45 -0
  64. package/src/styles/components/_avatar-crop.scss +120 -0
  65. package/src/styles/components/_chat-panel.scss +546 -0
  66. package/src/styles/components/_chat-window.scss +239 -0
  67. package/src/styles/components/_content-list.scss +260 -0
  68. package/src/styles/components/_context-menu.scss +35 -0
  69. package/src/styles/components/_create-group-dialog.scss +78 -0
  70. package/src/styles/components/_dialogs.scss +226 -0
  71. package/src/styles/components/_emoji-picker.scss +74 -0
  72. package/src/styles/components/_group-detail-dialog.scss +110 -0
  73. package/src/styles/components/_group-sidebar.scss +278 -0
  74. package/src/styles/components/_main-area.scss +94 -0
  75. package/src/styles/components/_sidebar.scss +83 -0
  76. package/src/styles/index.scss +18 -0
  77. package/src/styles/themes/_dark.scss +68 -0
  78. package/src/styles/themes/_index.scss +7 -0
  79. package/src/styles/themes/_light.scss +69 -0
@@ -1 +1 @@
1
- (function(v,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@element-plus/icons-vue"),require("dayjs"),require("element-plus")):typeof define=="function"&&define.amd?define(["exports","vue","@element-plus/icons-vue","dayjs","element-plus"],e):(v=typeof globalThis<"u"?globalThis:v||self,e(v.VueChatKit={},v.Vue,v.ElementPlusIconsVue,v.dayjs,v.ElementPlus))})(this,function(v,e,B,Ke,x){"use strict";class ve{constructor(a,s={}){this.userId=a,this.wsUrl=s.wsUrl||"",this.socket=null,this.reconnectAttempts=0,this.maxReconnectAttempts=s.maxReconnectAttempts||5,this.reconnectDelay=s.reconnectDelay||3e3,this.handlers={message:[],open:[],close:[],error:[]},this.isConnecting=!1,this.manualClose=!1}connect(){if(!(this.isConnecting||this.isConnected())){this.isConnecting=!0,this.manualClose=!1;try{this.socket=new WebSocket(this.wsUrl),this.socket.onopen=()=>{console.log("[VueChatKit] WebSocket 连接成功"),this.isConnecting=!1,this.reconnectAttempts=0,this.emit("open")},this.socket.onmessage=a=>{try{const s=a.data;this.emit("message",s)}catch(s){console.error("[VueChatKit] WebSocket 消息解析失败",s)}},this.socket.onclose=a=>{console.log("[VueChatKit] WebSocket 连接关闭",a.code),this.isConnecting=!1,this.emit("close",a),!this.manualClose&&a.code!==1e3&&this.reconnect()},this.socket.onerror=a=>{console.error("[VueChatKit] WebSocket 连接错误",a),this.isConnecting=!1,this.emit("error",a)}}catch(a){console.error("[VueChatKit] WebSocket 创建连接失败",a),this.isConnecting=!1}}}send(a,s,o="text",f="",T="",S=0,X=!1){if(this.isConnected()){const C=JSON.stringify(X?{toGroupId:a,msg:s,type:o,fileUrl:f,fileName:T,fileSize:S}:{to:a,msg:s,type:o,fileUrl:f,fileName:T,fileSize:S});return this.socket.send(C),!0}return console.warn("[VueChatKit] WebSocket 连接未建立,无法发送消息"),!1}on(a,s){this.handlers[a]&&this.handlers[a].push(s)}off(a,s){if(this.handlers[a]){const o=this.handlers[a].indexOf(s);o>-1&&this.handlers[a].splice(o,1)}}emit(a,...s){this.handlers[a]&&this.handlers[a].forEach(o=>o(...s))}reconnect(){this.reconnectAttempts<this.maxReconnectAttempts?(this.reconnectAttempts++,console.log(`[VueChatKit] 尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),setTimeout(()=>this.connect(),this.reconnectDelay)):console.error("[VueChatKit] 重连次数已达上限")}close(){this.manualClose=!0,this.socket&&(this.socket.close(),this.socket=null,this.handlers={message:[],open:[],close:[],error:[]})}isConnected(){return this.socket&&this.socket.readyState===WebSocket.OPEN}}class Ue extends Error{constructor(a,s,o,f){super(a),this.name="RequestError",this.status=s||0,this.code=o||0,this.data=f}}class et{constructor(a={}){this.baseUrl=a.baseUrl||"",this.timeout=a.timeout||1e4,this.headers=a.headers||{},this.requestInterceptors=[],this.responseInterceptors=[],a.requestInterceptors&&Array.isArray(a.requestInterceptors)&&a.requestInterceptors.forEach(s=>{this.requestInterceptors.push(s)}),this.addRequestInterceptor(s=>(s.body instanceof FormData||(s.headers={"Content-Type":"application/json",...s.headers}),s)),a.responseInterceptors&&Array.isArray(a.responseInterceptors)&&a.responseInterceptors.forEach(s=>{this.responseInterceptors.push(s)})}addRequestInterceptor(a){this.requestInterceptors.push(a)}addResponseInterceptor(a){this.responseInterceptors.push(a)}timeoutPromise(a){return new Promise((s,o)=>{setTimeout(()=>{o(new Ue("请求超时",408,408))},a)})}async request(a,s={}){const{method:o="GET",headers:f={},body:T,params:S}=s;let X=a.startsWith("http")?a:`${this.baseUrl}${a}`,C={method:o,headers:{...this.headers,...f},body:T,params:S};this.requestInterceptors.forEach(V=>{C=V(C)});const d={method:C.method,headers:C.headers,credentials:"include"};if(C.body&&o!=="GET"&&(C.body instanceof FormData?d.body=C.body:typeof C.body=="object"?d.body=JSON.stringify(C.body):d.body=C.body),C.params){const V=new URLSearchParams;for(const $ in C.params)C.params[$]!==void 0&&C.params[$]!==null&&C.params[$]!==""&&V.append($,C.params[$]);const U=V.toString();U&&(X+=(X.includes("?")?"&":"?")+U)}try{let U=await Promise.race([fetch(X,d),this.timeoutPromise(this.timeout)]);if(this.responseInterceptors.forEach(ae=>{U=ae(U)}),!U.ok)throw new Ue(`HTTP ${U.status}: ${U.statusText}`,U.status,U.status);const $=U.headers.get("content-type");let y;return $&&$.includes("application/json")?y=await U.json():y=await U.text(),y}catch(V){throw V instanceof Ue?V:new Ue(V instanceof Error?V.message:"网络错误",0,0)}}get(a,s,o){return this.request(a,{...o,method:"GET",params:s})}post(a,s,o){return this.request(a,{...o,method:"POST",body:s})}put(a,s,o){return this.request(a,{...o,method:"PUT",body:s})}delete(a,s){return this.request(a,{...s,method:"DELETE"})}}class Ge{constructor(a,s=null){this.config=a,this.endpoints=a.api.endpoints,this.customAdapter=a.api.adapter,s?this.http=s:this.http=new et({baseUrl:a.api.baseUrl,headers:a.headers,requestInterceptors:a.requestInterceptors,responseInterceptors:a.responseInterceptors})}async _call(a,...s){return this.customAdapter&&typeof this.customAdapter[a]=="function"?this.customAdapter[a](...s):this[`_${a}`](...s)}async getFriends(a){return this._call("getFriends",a)}async _getFriends(a){return this.http.get(this.endpoints.getFriends,{currentUser:a})}async getAvailableUsers(a){return this._call("getAvailableUsers",a)}async _getAvailableUsers(a){return this.http.get(this.endpoints.getAvailableUsers,{currentUser:a})}async searchUser(a){return this._call("searchUser",a)}async _searchUser(a){return this.http.get(this.endpoints.searchUser,{keyword:a})}async addFriend(a,s){return this._call("addFriend",a,s)}async _addFriend(a,s){return this.http.post(this.endpoints.addFriend,{currentUser:a,friendUser:s})}async getApplyList(a){return this._call("getApplyList",a)}async _getApplyList(a){return this.http.get(this.endpoints.getApplyList,{currentUser:a})}async agreeFriend(a,s){return this._call("agreeFriend",a,s)}async _agreeFriend(a,s){return this.http.post(this.endpoints.agreeFriend,{applyUser:a,friendUser:s})}async setChatStatus(a,s,o=1){return this._call("setChatStatus",a,s,o)}async _setChatStatus(a,s,o){return this.http.post(this.endpoints.setChatStatus,null,{params:{currentUser:a,friendUser:s,status:o}})}async getHistory(a,s){return this._call("getHistory",a,s)}async _getHistory(a,s){return this.http.get(this.endpoints.getHistory,{fromUser:a,toUser:s})}async setRead(a,s){return this._call("setRead",a,s)}async _setRead(a,s){return this.http.post(this.endpoints.setRead,{currentUser:a,friendUser:s})}async uploadFile(a){return this._call("uploadFile",a)}async _uploadFile(a){const s=new FormData;return s.append("file",a),this.http.post(this.endpoints.uploadFile,s)}async updateUserInfo(a,s){return this._call("updateUserInfo",a,s)}async _updateUserInfo(a,s){return this.http.put(this.endpoints.updateUserInfo,{username:a,...s})}async getUserAvatar(a){return this._call("getUserAvatar",a)}async _getUserAvatar(a){return this.http.get(this.endpoints.getUserAvatar,{username:a})}async uploadAvatar(a,s){return this._call("uploadAvatar",a,s)}async _uploadAvatar(a,s){const o=new FormData;return o.append("file",a),o.append("username",s),this.http.post(this.endpoints.uploadAvatar,o)}async createGroup(a){return this._call("createGroup",a)}async _createGroup(a){return this.http.post(this.endpoints.createGroup,a)}async getMyGroups(a){return this._call("getMyGroups",a)}async _getMyGroups(a){return this.http.get(this.endpoints.getMyGroups,{currentUser:a})}async getGroupInfo(a,s){return this._call("getGroupInfo",a,s)}async _getGroupInfo(a,s){return this.http.get(this.endpoints.getGroupInfo,{groupId:a,currentUser:s})}async addGroupMember(a,s,o){return this._call("addGroupMember",a,s,o)}async _addGroupMember(a,s,o){return this.http.post(this.endpoints.addGroupMember,null,{params:{groupId:a,targetUser:s,currentUser:o}})}async inviteGroupMembers(a,s,o){return this._call("inviteGroupMembers",a,s,o)}async _inviteGroupMembers(a,s,o){return this.http.post(this.endpoints.addGroupMember,{groupId:a,currentUser:s,targetUserList:o})}async getGroupMembers(a,s){return this._call("getGroupMembers",a,s)}async _getGroupMembers(a,s){return this.http.get(this.endpoints.getGroupMembers,{groupId:a,currentUser:s})}async quitGroup(a,s){return this._call("quitGroup",a,s)}async _quitGroup(a,s){return this.http.post(this.endpoints.quitGroup,null,{params:{groupId:a,currentUser:s}})}async getGroupHistory(a,s){return this._call("getGroupHistory",a,s)}async _getGroupHistory(a,s){return this.http.get(this.endpoints.getGroupHistory,{groupId:a,currentUser:s})}async getGroupUnreadCount(a,s){return this._call("getGroupUnreadCount",a,s)}async _getGroupUnreadCount(a,s){return this.http.get(this.endpoints.getGroupUnreadCount,{groupId:a,currentUser:s})}async getMsgReadUserList(a,s,o){return this._call("getMsgReadUserList",a,s,o)}async _getMsgReadUserList(a,s,o){return this.http.get(this.endpoints.getMsgReadUserList,{groupId:a,groupMsgId:s,currentUser:o})}async updateGroupInfo(a,s,o,f,T){return this._call("updateGroupInfo",a,s,o,f,T)}async _updateGroupInfo(a,s,o,f,T){return this.http.post(this.endpoints.updateGroupInfo,{groupId:a,currentUser:s,groupNickname:o,remark:f,notice:T})}async updateMemberNick(a,s,o,f){return this._call("updateMemberNick",a,s,o,f)}async _updateMemberNick(a,s,o,f){return this.http.post(this.endpoints.updateMemberNick,{groupId:a,currentUser:s,targetUsername:o,memberNick:f})}async deleteGroup(a,s){return this._call("deleteGroup",a,s)}async _deleteGroup(a,s){return this.http.post(this.endpoints.deleteGroup,{groupId:a,currentUser:s})}async removeGroupMember(a,s,o){return this._call("removeGroupMember",a,s,o)}async _removeGroupMember(a,s,o){return this.http.post(this.endpoints.removeGroupMember,{groupId:a,currentUser:s,targetUsername:o})}async transferGroupOwner(a,s,o){return this._call("transferGroupOwner",a,s,o)}async _transferGroupOwner(a,s,o){return this.http.post(this.endpoints.transferGroupOwner,{groupId:a,currentUser:s,newOwnerUsername:o})}async readSingleGroupMsg(a,s,o){return this._call("readSingleGroupMsg",a,s,o)}async _readSingleGroupMsg(a,s,o){return this.http.post(this.endpoints.readSingleGroupMsg,{groupId:a,currentUser:s,groupMsgId:o})}async readAllGroupMsg(a,s){return this._call("readAllGroupMsg",a,s)}async _readAllGroupMsg(a,s){return this.http.post(this.endpoints.readAllGroupMsg,{groupId:a,currentUser:s})}}const Tt=Object.freeze(Object.defineProperty({__proto__:null,ChatApi:Ge,default:Ge},Symbol.toStringTag,{value:"Module"}));function zt(u,a){const s=new Ge(u);let o=null;const f=u.user.username,T=e.ref(u.user.avatar||`https://api.dicebear.com/7.x/avataaars/svg?seed=${f}`),S=e.ref({username:f,nickname:u.user.nickname||"",email:u.user.email||"",phone:u.user.phone||"",bio:u.user.bio||""}),X=e.ref(!1),C=e.ref(""),d=e.ref(""),V=e.ref(null),U=E=>Ke(E).format("HH:mm"),$=E=>{if(!E)return"";const q=Ke(),k=Ke(E);return q.isSame(k,"day")?k.format("HH:mm"):q.diff(k,"day")===1?"昨天":q.diff(k,"day")<7?["周日","周一","周二","周三","周四","周五","周六"][k.day()]:k.format("MM/DD")},y=E=>{if(!E)return!1;const q=["jpg","jpeg","png","gif","bmp","webp","svg"],k=E.split(".").pop().toLowerCase();return q.includes(k)},ae=E=>{if(!E)return"default";const q=E.split(".").pop().toLowerCase();return["xls","xlsx"].includes(q)?"excel":["pdf"].includes(q)?"pdf":["doc","docx"].includes(q)?"docx":"default"},de=()=>{e.nextTick(()=>{V.value&&(V.value.scrollTop=V.value.scrollHeight)})},z=E=>{try{try{const k=JSON.parse(E);if(k.to||k.toGroupId||k.msg)return{to:k.to,toGroupId:k.toGroupId,from:k.from,content:k.msg,type:k.type||"text",fileUrl:k.fileUrl||"",fileName:k.fileName||"",fileSize:k.fileSize||0}}catch{}const q=E.match(/^\[(.+?)\]:(.+)$/);if(q)return{username:q[1],content:q[2],type:"text"}}catch(q){console.error("[VueChatKit] 解析消息失败",q)}return null},h=E=>{const q=`${u.api.websocketUrl}?userId=${f}`;o=new ve(f,{wsUrl:q,maxReconnectAttempts:u.websocket.maxReconnectAttempts,reconnectDelay:u.websocket.reconnectDelay}),o.on("message",E),o.connect()},oe=()=>{o&&(o.close(),o=null)},se=()=>o,ne=async()=>{try{const E=await s.getUserAvatar(f);E.code===200&&E.data&&(T.value=`${u.api.baseUrl}${E.data}`)}catch(E){console.warn("[VueChatKit] 加载头像失败",E)}},ee=E=>{T.value=E},Q=async E=>{try{return(await s.updateUserInfo(f,E)).code===200?(S.value={...S.value,...E},!0):!1}catch(q){return console.error("[VueChatKit] 更新用户信息失败",q),!1}};return ne(),{api:s,config:u,myUsername:f,myAvatar:T,userInfo:S,loadingUserInfo:X,searchText:C,inputText:d,messagesContainer:V,formatTime:U,formatLastTime:$,isImageFile:y,getFileIconType:ae,scrollToBottom:de,parseWsMessage:z,initWebSocket:h,closeWebSocket:oe,getSocket:se,initUserAvatar:ne,updateMyAvatar:ee,updateUserInfo:Q}}function Ft(u){const{api:a,myUsername:s,myAvatar:o,config:f,scrollToBottom:T,getSocket:S}=u,X=e.ref([]),C=e.ref([]),d=e.ref([]),V=e.ref(""),U=e.ref(!1),$=e.ref(""),y=e.ref([]),ae=e.ref(!1),de=e.ref([]),z=e.ref(!1),h=e.computed(()=>{let i=C.value;if(u.searchText.value){const p=u.searchText.value.toLowerCase();i=i.filter(N=>{var M;return(M=N.username)==null?void 0:M.toLowerCase().includes(p)})}return i.map(p=>({id:p.username,name:p.username,avatar:p.avatar?`${f.api.baseUrl}${p.avatar}`:o.value,online:p.online,lastMsg:p.lastMsg||"暂无消息",lastTime:p.lastTime,unread:p.unReadNum||0}))}),oe=e.computed(()=>{let i=X.value;if(u.searchText.value){const p=u.searchText.value.toLowerCase();i=i.filter(N=>{var M;return(M=N.username)==null?void 0:M.toLowerCase().includes(p)})}return i.map(p=>({id:p.username,name:p.username,avatar:p.avatar?`${f.api.baseUrl}${p.avatar}`:o.value,online:p.online,isChatting:p.isChatting}))}),se=e.computed(()=>y.value),ne=e.computed(()=>h.value.find(i=>i.id===V.value)||null),ee=e.computed(()=>d.value.map(i=>{const p=i.type==="file"||i.fileUrl||i.fileName,N=i.fileName||i.msgContent;let M="";if(i.sendUsername!==s){const A=X.value.find(R=>R.username===i.sendUsername);M=A!=null&&A.avatar?`${f.api.baseUrl}${A.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${i.sendUsername}`}else M=o.value;return{text:i.msgContent,isSelf:i.sendUsername===s,time:i.createTime,sendUsername:i.sendUsername,avatar:M,type:p?"file":"text",fileType:u.isImageFile(N)?"image":u.getFileIconType(N),fileUrl:i.fileUrl||"",fileName:N,fileSize:i.fileSize||0}})),Q=async()=>{try{const p=(await a.getFriends(s)).data||[];X.value=p,C.value=p.filter(N=>N.isChatting===1);for(const N of C.value)try{const A=(await a.getHistory(s,N.username)).data||[];N.unReadNum=A.filter(R=>R.isRead===0&&R.sendUsername===N.username).length}catch{N.unReadNum=0}}catch(i){console.error("[VueChatKit] 获取好友列表失败",i)}},E=async i=>{try{const p=await a.getHistory(s,i);d.value=p.data||[],T()}catch(p){console.error("[VueChatKit] 获取聊天历史失败",p)}},q=async i=>{try{await a.setRead(s,i),Q()}catch(p){console.error("[VueChatKit] 标记已读失败",p)}},k=async i=>{V.value=i.id,await E(i.id),await q(i.id),T()},le=async(i,p=1)=>{try{return await a.setChatStatus(s,i,p),await Q(),!0}catch(N){return console.error("[VueChatKit] 设置聊天状态失败",N),!1}},te=()=>{const i=S();if(!u.inputText.value.trim()||!V.value||!i)return;if(i.send(V.value,u.inputText.value.trim(),"text")){const N={msgContent:u.inputText.value.trim(),sendUsername:s,receiveUsername:V.value,createTime:new Date,isRead:0,type:"text"};d.value.push(N),u.inputText.value="",T(),setTimeout(()=>{E(V.value),Q()},300)}},g=async i=>{const p=S();if(!V.value||!p)return!1;try{const N=await a.uploadFile(i);if(N.code===200&&N.data){const{fileUrl:M,fileName:A}=N.data;if(p.send(V.value,A,"file",M,A,i.size)){const Z={msgContent:A,sendUsername:s,receiveUsername:V.value,createTime:new Date,isRead:0,type:"file",fileUrl:M,fileName:A,fileSize:i.size};return d.value.push(Z),T(),!0}}return!1}catch(N){return console.error("[VueChatKit] 发送文件失败",N),!1}},w=async(i,p)=>{const N=S();if(!(!V.value||!N)){if(p&&p.trim()&&N.send(V.value,p.trim(),"text")){const A={msgContent:p.trim(),sendUsername:s,receiveUsername:V.value,createTime:new Date,isRead:0,type:"text"};d.value.push(A)}for(const M of i){const A=M.file||M;await g(A)}setTimeout(()=>{E(V.value),Q()},300)}},j=i=>{const p={content:i.content,username:i.username||i.from||V.value,type:i.type||"text",fileUrl:i.fileUrl||"",fileName:i.fileName||"",fileSize:i.fileSize||0,timestamp:new Date};if(V.value){try{let N={msgContent:i.content,sendUsername:p.username,receiveUsername:s,createTime:new Date,isRead:0,type:i.type||"text",fileUrl:i.fileUrl||"",fileName:i.fileName||"",fileSize:i.fileSize||0};d.value.push(N),T()}catch(N){console.error("[VueChatKit] 添加临时消息失败",N)}E(V.value)}Q()},_=(i,p)=>{const N=X.value.find(M=>M.username===i);N&&(N.online=p)},F=async()=>{U.value=!0,$.value="",y.value=[]},b=async(i="")=>{ae.value=!0;try{let p;i?p=await a.searchUser(i):p=await a.getAvailableUsers(s),y.value=(p==null?void 0:p.data)||[]}catch(p){console.error("[VueChatKit] 获取可用用户失败",p)}finally{ae.value=!1}},I=async i=>{try{await a.addFriend(s,i.username),await Q(),U.value=!1}catch(p){console.error("[VueChatKit] 添加好友失败",p)}},Y=async()=>{z.value=!0;try{const i=await a.getApplyList(s);de.value=i.data||[]}catch(i){console.error("[VueChatKit] 获取好友申请列表失败",i)}finally{z.value=!1}},O=async i=>{try{await a.agreeFriend(i,s),await Y(),await Q()}catch(p){console.error("[VueChatKit] 同意好友申请失败",p)}},K=()=>{V.value="",d.value=[]};return e.watch($,async i=>{await b(i)}),{friendList:X,chatList:C,chatMsgList:d,currentSelectName:V,filteredUsers:h,filteredFriendList:oe,filteredAvailableUsers:se,currentUser:ne,currentMessages:ee,addFriendDialogVisible:U,addFriendSearchText:$,availableUsers:y,loadingAvailableUsers:ae,friendApplyList:de,loadingFriendApply:z,getFriendList:Q,getChatHistory:E,markAsRead:q,selectUser:k,setFriendToChatStatus:le,sendMessage:te,sendFile:g,sendFilesAndText:w,handleFriendWsMessage:j,handleFriendStatusChange:_,openAddFriendDialog:F,loadAvailableUsers:b,addFriend:I,loadFriendApplyList:Y,agreeFriend:O,resetFriendChat:K}}function It(u){const{api:a,myUsername:s,myAvatar:o,config:f,scrollToBottom:T,getSocket:S}=u,X=e.ref("friends"),C=e.ref([]),d=e.ref(null),V=e.ref([]),U=e.ref([]),$=e.ref({}),y=e.ref(!1),ae=e.ref(!1),de=e.ref(""),z=e.ref(""),h=e.ref([]),oe=e.ref(!1),se=e.ref([]),ne=e.ref(!1),ee=e.ref({groupNickname:"",remark:"",notice:""}),Q=e.ref({targetUsername:"",memberNick:""}),E=e.ref(!1),q=e.ref(!1),k=e.ref({readUserList:[],unreadUserList:[]}),le=e.ref(null),te=e.ref({groupNickname:!1,remark:!1,notice:!1}),g=e.ref({groupNickname:"",remark:"",notice:""}),w=e.computed(()=>{let n=C.value;if(u.searchText.value){const l=u.searchText.value.toLowerCase();n=n.filter(G=>G.groupName&&G.groupName.toLowerCase().includes(l)||G.remark&&G.remark.toLowerCase().includes(l))}return n.map(l=>{const J=($.value[l.groupId]||[]).slice(0,4).map(xe=>({username:xe.username,avatar:xe.avatar?`${f.api.baseUrl}${xe.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${xe.username}`}));let re="暂无消息";l.lastMsg?re=l.lastMsg:l.lastMessage?re=l.lastMessage:l.latestMessage&&(re=l.latestMessage);let ke=0;l.unReadNum!==void 0&&l.unReadNum!==null?ke=l.unReadNum:l.unreadCount!==void 0&&l.unreadCount!==null?ke=l.unreadCount:l.unread!==void 0&&l.unread!==null&&(ke=l.unread);let ue=l.lastTime;return!ue&&l.latestTime?ue=l.latestTime:!ue&&l.lastMsgTime&&(ue=l.lastMsgTime),{id:l.groupId,groupId:l.groupId,name:l.groupName,remark:l.remark,owner:l.ownerUsername,avatar:`https://api.dicebear.com/7.x/avataaars/svg?seed=${l.groupId}`,memberAvatars:J,lastMsg:re,lastTime:ue,unread:ke,memberCount:l.memberCount||0,notice:l.notice,groupNickname:l.groupNickname}})}),j=e.computed(()=>V.value.map(n=>{const l=n.type==="file"||n.fileUrl||n.fileName,G=n.fileName||n.msgContent,J=U.value.find(ue=>ue.username===n.sendUsername),re=(J==null?void 0:J.memberNick)||n.sendUsername,ke=J!=null&&J.avatar?`${f.api.baseUrl}${J.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${n.sendUsername}`;return{text:n.msgContent,isSelf:n.sendUsername===s,time:n.createTime,sendUsername:n.sendUsername,displayName:re,avatar:ke,type:l?"file":"text",fileType:u.isImageFile(G)?"image":u.getFileIconType(G),fileUrl:n.fileUrl||"",fileName:G,fileSize:n.fileSize||0}})),_=async()=>{try{const n=await a.getMyGroups(s);C.value=n.data||[];for(const l of C.value)try{const G=await a.getGroupMembers(l.groupId,s);$.value[l.groupId]=G.data||[]}catch(G){console.error(`[VueChatKit] 获取群 ${l.groupId} 成员失败`,G),$.value[l.groupId]=[]}}catch(n){console.error("[VueChatKit] 获取群聊列表失败",n)}},F=async n=>{try{const l=await a.getGroupHistory(n,s);V.value=l.data||[],T()}catch(l){console.error("[VueChatKit] 获取群聊历史失败",l)}},b=async n=>{try{const l=await a.getGroupMembers(n,s);U.value=l.data||[]}catch(l){console.error("[VueChatKit] 获取群成员失败",l)}},I=async n=>{await Te(n.groupId),await _(),d.value=n,await F(n.groupId),await b(n.groupId),T()},Y=async n=>{try{return(await a.getGroupUnreadCount(n,s)).data||0}catch(l){return console.error("[VueChatKit] 获取群未读数失败",l),0}},O=async(n,l)=>{try{const G=await a.getMsgReadUserList(n,l,s);k.value=G.data||{readUserList:[],unreadUserList:[]},q.value=!0}catch(G){console.error("[VueChatKit] 获取消息已读成员失败",G)}},K=async n=>{try{const l=await a.getGroupInfo(n,s);l.code===200&&l.data&&(le.value=l.data,g.value={groupNickname:l.data.groupNickname||l.data.groupName||"",remark:l.data.remark||"",notice:l.data.notice||""})}catch(l){console.error("[VueChatKit] 获取群详情失败",l)}},i=async n=>{if(!d.value||!le.value)return!1;try{const l={groupId:d.value.groupId,currentUser:s,groupNickname:n==="groupNickname"?g.value.groupNickname:le.value.groupNickname,remark:n==="remark"?g.value.remark:le.value.remark,notice:n==="notice"?g.value.notice:le.value.notice};return(await a._updateGroupInfo(l.groupId,l.currentUser,l.groupNickname,l.remark,l.notice)).code===200?(await K(d.value.groupId),await _(),!0):!1}catch(l){return console.error("[VueChatKit] 修改群信息失败",l),!1}},p=n=>{!le.value&&d.value&&K(d.value.groupId),te.value[n]=!0},N=n=>{te.value[n]=!1,le.value&&(g.value[n]=le.value[n]||"")},M=async n=>{const l=await i(n);return l&&(te.value[n]=!1),l},A=async()=>{if(!d.value)return!1;try{return(await a.updateGroupInfo(d.value.groupId,s,ee.value.groupNickname,ee.value.remark,ee.value.notice)).code===200?(ne.value=!1,await _(),d.value&&await K(d.value.groupId),!0):!1}catch(n){return console.error("[VueChatKit] 修改群信息失败",n),!1}},R=async()=>{if(!d.value)return!1;try{return(await a.updateMemberNick(d.value.groupId,s,Q.value.targetUsername,Q.value.memberNick)).code===200?(E.value=!1,await b(d.value.groupId),!0):!1}catch(n){return console.error("[VueChatKit] 修改群成员昵称失败",n),!1}},Z=async()=>{if(!d.value)return!1;try{return(await a.deleteGroup(d.value.groupId,s)).code===200?(d.value=null,V.value=[],ae.value=!1,await _(),!0):!1}catch(n){return console.error("[VueChatKit] 解散群聊失败",n),!1}},ie=async n=>{if(!d.value)return!1;try{return(await a.removeGroupMember(d.value.groupId,s,n)).code===200?(await b(d.value.groupId),!0):!1}catch(l){return console.error("[VueChatKit] 移除成员失败",l),!1}},me=async n=>{if(!d.value)return!1;try{return(await a.transferGroupOwner(d.value.groupId,s,n)).code===200?(await b(d.value.groupId),!0):!1}catch(l){return console.error("[VueChatKit] 转让群主失败",l),!1}},Ve=async n=>{if(!d.value)return!1;try{return(await a.readSingleGroupMsg(d.value.groupId,s,n)).code===200}catch(l){return console.error("[VueChatKit] 标记消息已读失败",l),!1}},Te=async n=>{var G;const l=n||((G=d.value)==null?void 0:G.groupId);if(!l)return!1;try{return(await a.readAllGroupMsg(l,s)).code===200}catch(J){return console.error("[VueChatKit] 标记全部已读失败",J),!1}},ze=()=>{d.value&&(ee.value={groupNickname:d.value.name||"",remark:d.value.remark||"",notice:d.value.notice||""},ne.value=!0)},ot=n=>{Q.value={targetUsername:n.username,memberNick:n.memberNick||""},E.value=!0},qe=async()=>{if(!de.value.trim())return console.warn("[VueChatKit] 请输入群名称"),!1;try{const n=await a.createGroup({groupName:de.value.trim(),remark:z.value.trim(),ownerUsername:s});if(n.code===200&&n.data){if(h.value.length>0){const l=h.value.map(G=>G.id);await a.inviteGroupMembers(n.data.groupId||n.data,s,l)}return de.value="",z.value="",h.value=[],y.value=!1,await _(),!0}return!1}catch(n){return console.error("[VueChatKit] 创建群聊失败",n),!1}},nt=async()=>{if(!d.value||se.value.length===0)return!1;try{const n=se.value.map(l=>l.id);return await a.inviteGroupMembers(d.value.groupId,s,n),se.value=[],oe.value=!1,await b(d.value.groupId),!0}catch(n){return console.error("[VueChatKit] 邀请成员失败",n),!1}},Fe=async()=>{if(!d.value)return!1;try{return await a.quitGroup(d.value.groupId,s),d.value=null,V.value=[],ae.value=!1,await _(),!0}catch(n){return console.error("[VueChatKit] 退出群聊失败",n),!1}},je=()=>{const n=S();if(!u.inputText.value.trim()||!d.value||!n)return;if(n.send(d.value.groupId,u.inputText.value.trim(),"text","","",0,!0)){const G={msgContent:u.inputText.value.trim(),sendUsername:s,toGroupId:d.value.groupId,createTime:new Date,isRead:0,type:"text"};V.value.push(G),u.inputText.value="",T(),setTimeout(()=>{F(d.value.groupId),_()},300)}},Xe=async n=>{const l=S();if(!d.value||!l)return!1;try{const G=await a.uploadFile(n);if(G.code===200&&G.data){const{fileUrl:J,fileName:re}=G.data;if(l.send(d.value.groupId,re,"file",J,re,n.size,!0)){const ue={msgContent:re,sendUsername:s,toGroupId:d.value.groupId,createTime:new Date,isRead:0,type:"file",fileUrl:J,fileName:re,fileSize:n.size};return V.value.push(ue),T(),!0}}return!1}catch(G){return console.error("[VueChatKit] 发送群聊文件失败",G),!1}};return{activeTab:X,groupList:C,currentSelectGroup:d,groupMsgList:V,groupMemberList:U,groupMembersMap:$,createGroupDialogVisible:y,groupDetailVisible:ae,newGroupName:de,newGroupRemark:z,selectedMembersForCreate:h,inviteMemberDialogVisible:oe,selectedMembersForInvite:se,groupInfoVisible:ne,editingGroupInfo:ee,editingMemberNick:Q,memberNickDialogVisible:E,msgReadUserDialogVisible:q,currentMsgReadList:k,currentGroupInfo:le,editingFields:te,tempEditValues:g,filteredGroupList:w,currentGroupMessages:j,getGroupList:_,getGroupHistory:F,getGroupMembers:b,selectGroup:I,createGroup:qe,inviteGroupMember:nt,quitGroup:Fe,sendGroupMessage:je,sendGroupFile:Xe,sendGroupFilesAndText:async(n,l)=>{const G=S();if(!(!d.value||!G)){if(l&&l.trim()&&G.send(d.value.groupId,l.trim(),"text","","",0,!0)){const re={msgContent:l.trim(),sendUsername:s,toGroupId:d.value.groupId,createTime:new Date,isRead:0,type:"text"};V.value.push(re)}for(const J of n){const re=J.file||J;await Xe(re)}setTimeout(()=>{F(d.value.groupId),_()},300)}},handleGroupWsMessage:n=>{if(d.value&&d.value.groupId===n.toGroupId){try{let l={msgContent:n.content,sendUsername:n.from||"未知用户",toGroupId:n.toGroupId,createTime:new Date,isRead:0,type:n.type||"text",fileUrl:n.fileUrl||"",fileName:n.fileName||"",fileSize:n.fileSize||0};V.value.push(l),T()}catch(l){console.error("[VueChatKit] 添加临时群聊消息失败",l)}F(n.toGroupId)}_()},switchTab:n=>{X.value=n,n==="groups"&&_()},resetGroupChat:()=>{d.value=null,V.value=[]},getGroupUnreadCount:Y,getMsgReadUserList:O,updateGroupInfo:A,updateMemberNick:R,deleteGroup:Z,removeGroupMember:ie,transferGroupOwner:me,readSingleGroupMsg:Ve,readAllGroupMsg:Te,openEditGroupInfo:ze,openEditMemberNick:ot,fetchGroupDetail:K,updateSingleGroupField:i,startEditField:p,cancelEditField:N,saveEditField:M}}function tt(u,a){const s=zt(u),o=Ft(s),f=It(s),T=e.computed(()=>f.currentSelectGroup.value?{type:"group",data:f.currentSelectGroup.value}:o.currentSelectName.value&&o.currentUser.value?{type:"friend",data:o.currentUser.value}:null),S=e.computed(()=>f.currentSelectGroup.value?f.currentGroupMessages.value:o.currentMessages.value),X=z=>{if(z.includes("【状态变更】")){const oe=/【状态变更】(.+?) 已(上线|下线)/,se=z.match(oe);if(se){const ne=se[1],ee=se[2]==="上线";o.handleFriendStatusChange(ne,ee)}return}const h=s.parseWsMessage(z);h&&(h.toGroupId?f.handleGroupWsMessage(h):o.handleFriendWsMessage(h),a&&typeof a=="function"&&a({...h,isGroup:!!h.toGroupId}))};return{...s,initWebSocket:()=>{s.initWebSocket(X)},...o,selectUser:async z=>{f.resetGroupChat(),await o.selectUser(z)},...f,selectGroup:async z=>{o.resetFriendChat(),await f.selectGroup(z)},currentChatTarget:T,currentAllMessages:S,switchTab:z=>{f.switchTab(z),z==="apply"&&o.loadFriendApplyList()},sendMessage:()=>{f.currentSelectGroup.value?f.sendGroupMessage():o.currentSelectName.value&&o.sendMessage()},sendFile:async z=>f.currentSelectGroup.value?await f.sendGroupFile(z):o.currentSelectName.value?await o.sendFile(z):!1,sendFilesAndText:async(z,h)=>{f.currentSelectGroup.value?await f.sendGroupFilesAndText(z,h):o.currentSelectName.value&&await o.sendFilesAndText(z,h)},reset:()=>{o.resetFriendChat(),f.resetGroupChat(),s.inputText.value="",s.searchText.value=""}}}const We=(u,a)=>{const s=u.__vccOpts||u;for(const[o,f]of a)s[o]=f;return s},Dt={class:"avatar-crop-container"},At={key:0,class:"crop-wrapper"},Lt=["src"],Rt=["onMousedown","onTouchstart"],$t={class:"preview-wrapper"},Kt=["width","height"],Wt={class:"dialog-footer"},He=We({__name:"AvatarCrop",props:{modelValue:Boolean,src:{type:String,default:""},dialogWidth:{type:String,default:"520px"},cropAreaHeight:{type:String,default:"288px"},previewSize:{type:Number,default:96},outputSize:{type:Number,default:400},outputType:{type:String,default:"image/jpeg"},outputQuality:{type:Number,default:.9},appendToBody:{type:Boolean,default:!0},aspectRatio:{type:Number,default:1},minSize:{type:Number,default:50}},emits:["update:modelValue","confirm","cancel","closed"],setup(u,{expose:a,emit:s}){const o=u,f=s,T=e.computed({get:()=>o.modelValue,set:g=>f("update:modelValue",g)}),S=e.computed({get:()=>o.src,set:g=>{}}),X=["nw","n","ne","e","se","s","sw","w"],C=e.ref(!1),d=e.ref(null),V=e.ref(null),U=e.ref(null),$=e.ref({naturalWidth:0,naturalHeight:0,displayWidth:0,displayHeight:0,offsetX:0,offsetY:0}),y=e.ref({x:0,y:0,size:150,minSize:o.minSize}),ae=e.computed(()=>({width:`${$.value.displayWidth}px`,height:`${$.value.displayHeight}px`,maxWidth:"none",maxHeight:"none",display:"block"})),de=e.computed(()=>({left:`${y.value.x}px`,top:`${y.value.y}px`,width:`${y.value.size}px`,height:`${y.value.size/o.aspectRatio}px`}));let z=null,h=null;const oe=()=>{e.nextTick(()=>{const g=V.value,w=d.value;if(!g||!w)return;const j=w.clientWidth,_=w.clientHeight,F=g.naturalWidth/g.naturalHeight,b=j/_;let I,Y,O,K;F>b?(I=j,Y=j/F,O=0,K=(_-Y)/2):(Y=_,I=_*F,O=(j-I)/2,K=0),$.value={naturalWidth:g.naturalWidth,naturalHeight:g.naturalHeight,displayWidth:I,displayHeight:Y,offsetX:O,offsetY:K};const i=Math.min(I,Y)*.6;y.value.size=i,y.value.x=O+(I-i)/2,y.value.y=K+(Y-i/o.aspectRatio)/2,se()})},se=()=>{const g=U.value,w=V.value;if(!g||!w)return;const j=g.getContext("2d"),{naturalWidth:_,naturalHeight:F,displayWidth:b,displayHeight:I,offsetX:Y,offsetY:O}=$.value,K=_/b,i=F/I,p=(y.value.x-Y)*K,N=(y.value.y-O)*i,M=y.value.size*K,A=y.value.size/o.aspectRatio*i;j.clearRect(0,0,g.width,g.height),j.drawImage(w,p,N,M,A,0,0,g.width,g.height)},ne=g=>{g.preventDefault();const w=g.clientX||g.touches[0].clientX,j=g.clientY||g.touches[0].clientY;z={startX:w,startY:j,boxX:y.value.x,boxY:y.value.y};const _=b=>{const I=b.clientX||b.touches[0].clientX,Y=b.clientY||b.touches[0].clientY,O=I-z.startX,K=Y-z.startY,{offsetX:i,offsetY:p,displayWidth:N,displayHeight:M}=$.value,A=y.value.size/o.aspectRatio,R=Math.max(i,Math.min(i+N-y.value.size,z.boxX+O)),Z=Math.max(p,Math.min(p+M-A,z.boxY+K));y.value.x=R,y.value.y=Z,se()},F=()=>{z=null,document.removeEventListener("mousemove",_),document.removeEventListener("mouseup",F),document.removeEventListener("touchmove",_),document.removeEventListener("touchend",F)};document.addEventListener("mousemove",_),document.addEventListener("mouseup",F),document.addEventListener("touchmove",_,{passive:!1}),document.addEventListener("touchend",F)},ee=(g,w)=>{w.preventDefault();const j=w.clientX||w.touches[0].clientX,_=w.clientY||w.touches[0].clientY;h={handle:g,startX:j,startY:_,boxX:y.value.x,boxY:y.value.y,boxSize:y.value.size};const F=I=>{const Y=I.clientX||I.touches[0].clientX,O=I.clientY||I.touches[0].clientY,K=Y-h.startX,i=O-h.startY,{offsetX:p,offsetY:N,displayWidth:M,displayHeight:A}=$.value;let R=h.boxSize,Z=h.boxX,ie=h.boxY;const me=h.boxSize/o.aspectRatio;switch(g){case"se":R=Math.max(y.value.minSize,Math.min(M-(h.boxX-p),A-(h.boxY-N),h.boxSize+Math.max(K,i)));break;case"nw":R=Math.max(y.value.minSize,Math.min(h.boxX-p+h.boxSize,h.boxY-N+me,h.boxSize-Math.max(K,i))),Z=h.boxX+(h.boxSize-R),ie=h.boxY+(me-R/o.aspectRatio);break;case"ne":R=Math.max(y.value.minSize,Math.min(p+M-h.boxX,h.boxY-N+me,h.boxSize+Math.max(K,-i))),ie=h.boxY+(me-R/o.aspectRatio);break;case"sw":R=Math.max(y.value.minSize,Math.min(h.boxX-p+h.boxSize,N+A-h.boxY,h.boxSize+Math.max(-K,i))),Z=h.boxX+(h.boxSize-R);break;case"n":R=Math.max(y.value.minSize,Math.min(h.boxY-N+me,h.boxSize-i)),ie=h.boxY+(me-R/o.aspectRatio);break;case"s":R=Math.max(y.value.minSize,Math.min(N+A-h.boxY,h.boxSize+i));break;case"w":R=Math.max(y.value.minSize,Math.min(h.boxX-p+h.boxSize,h.boxSize-K)),Z=h.boxX+(h.boxSize-R);break;case"e":R=Math.max(y.value.minSize,Math.min(p+M-h.boxX,h.boxSize+K));break}y.value.size=R,y.value.x=Z,y.value.y=ie,se()},b=()=>{h=null,document.removeEventListener("mousemove",F),document.removeEventListener("mouseup",b),document.removeEventListener("touchmove",F),document.removeEventListener("touchend",b)};document.addEventListener("mousemove",F),document.addEventListener("mouseup",b),document.addEventListener("touchmove",F,{passive:!1}),document.addEventListener("touchend",b)},Q=()=>{const g=document.createElement("canvas"),w=V.value;if(!w)return null;const{naturalWidth:j,naturalHeight:_,displayWidth:F,displayHeight:b,offsetX:I,offsetY:Y}=$.value,O=j/F,K=_/b,i=(y.value.x-I)*O,p=(y.value.y-Y)*K,N=y.value.size*O,M=y.value.size/o.aspectRatio*K;return g.width=o.outputSize,g.height=o.outputSize/o.aspectRatio,g.getContext("2d").drawImage(w,i,p,N,M,0,0,g.width,g.height),new Promise(R=>{g.toBlob(Z=>{R(new File([Z],"avatar.jpg",{type:o.outputType}))},o.outputType,o.outputQuality)})},E=()=>{const g=document.createElement("canvas"),w=V.value;if(!w)return null;const{naturalWidth:j,naturalHeight:_,displayWidth:F,displayHeight:b,offsetX:I,offsetY:Y}=$.value,O=j/F,K=_/b,i=(y.value.x-I)*O,p=(y.value.y-Y)*K,N=y.value.size*O,M=y.value.size/o.aspectRatio*K;return g.width=o.outputSize,g.height=o.outputSize/o.aspectRatio,g.getContext("2d").drawImage(w,i,p,N,M,0,0,g.width,g.height),g.toDataURL(o.outputType,o.outputQuality)},q=async()=>{if(S.value){C.value=!0;try{const g=await Q(),w=E();g&&f("confirm",{file:g,dataUrl:w})}catch(g){console.error(g),x.ElMessage.error("生成图片失败")}finally{C.value=!1}}},k=()=>{f("cancel"),T.value=!1},le=()=>{te(),f("closed")},te=()=>{y.value={x:0,y:0,size:150,minSize:o.minSize}};return e.watch(()=>o.src,g=>{g&&e.nextTick(()=>{V.value&&V.value.complete&&oe()})}),a({getCroppedImage:Q,getCroppedImageDataUrl:E,reset:te}),(g,w)=>{const j=e.resolveComponent("el-empty"),_=e.resolveComponent("el-button"),F=e.resolveComponent("el-dialog");return e.openBlock(),e.createBlock(F,{modelValue:T.value,"onUpdate:modelValue":w[0]||(w[0]=b=>T.value=b),title:"调整头像",width:u.dialogWidth,"close-on-click-modal":!1,"append-to-body":u.appendToBody,onClosed:le},{footer:e.withCtx(()=>[e.createElementVNode("div",Wt,[e.createVNode(_,{onClick:k},{default:e.withCtx(()=>[...w[2]||(w[2]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(_,{type:"primary",loading:C.value,disabled:!S.value,onClick:q},{default:e.withCtx(()=>[...w[3]||(w[3]=[e.createTextVNode(" 确认 ",-1)])]),_:1},8,["loading","disabled"])])]),default:e.withCtx(()=>[e.createElementVNode("div",Dt,[S.value?(e.openBlock(),e.createElementBlock("div",At,[e.createElementVNode("div",{ref_key:"cropAreaRef",ref:d,class:"crop-area",style:e.normalizeStyle({height:u.cropAreaHeight})},[e.createElementVNode("img",{src:S.value,ref_key:"imageRef",ref:V,onLoad:oe,style:e.normalizeStyle(ae.value)},null,44,Lt),e.createElementVNode("div",{class:"crop-box",style:e.normalizeStyle(de.value),onMousedown:ne,onTouchstart:ne},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(X,b=>e.createElementVNode("div",{key:b,class:e.normalizeClass(["crop-handle",b]),onMousedown:e.withModifiers(I=>ee(b,I),["stop"]),onTouchstart:e.withModifiers(I=>ee(b,I),["stop"])},null,42,Rt)),64))],36)],4),e.createElementVNode("div",$t,[w[1]||(w[1]=e.createElementVNode("div",{class:"preview-label"},"预览",-1)),e.createElementVNode("div",{class:"preview-box",style:e.normalizeStyle({width:u.previewSize+"px",height:u.previewSize+"px"})},[e.createElementVNode("canvas",{ref_key:"previewCanvasRef",ref:U,width:u.previewSize,height:u.previewSize,class:"preview-canvas"},null,8,Kt)],4)])])):(e.openBlock(),e.createBlock(j,{key:1,description:"请上传图片"}))])]),_:1},8,["modelValue","width","append-to-body"])}}},[["__scopeId","data-v-594eeaf3"]]),Ht={class:"emoji-header"},qt=["onClick"],jt={class:"emoji-body"},Xt=["onClick"],Yt=We({__name:"EmojiPicker",props:{visible:{type:Boolean,default:!1}},emits:["select","close"],setup(u,{emit:a}){const s=a,o=e.ref(0),f=[{id:"emoticons",icon:"😀",name:"表情",emojis:["😀","😃","😄","😁","😆","😅","🤣","😂","🙂","🙃","😉","😊","😇","🥰","😍","🤩","😘","😗","😚","😋","😛","😜","🤪","😝","🤑","🤗","🤭","🤫","🤔","🤐","🤨","😐","😑","😶","😏","😒","🙄","😬","🤥","😌","😔","😪","🤤","😴","😷","🤒","🤕","🤢","🤮","🤧","🥵","🥶","🥴","😵","🤯","🤠","🥳","😎","🤓","🧐","😕","😟","🙁","☹️","😮","😯","😲","😳","🥺","😦","😧","😨","😰","😥","😢","😭","😱","😖","😣","😞"]},{id:"gestures",icon:"👋",name:"手势",emojis:["👋","🤚","🖐️","✋","🖖","👌","🤌","🤏","✌️","🤞","🤟","🤘","🤙","👈","👉","👆","🖕","👇","☝️","👍","👎","✊","👊","🤛","🤜","👏","🙌","👐","🤲","🤝","🙏","🤚🏻","🖐🏻","✋🏻","🖖🏻","👌🏻","🤌🏻","🤏🏻","✌🏻","🤞🏻","🤟🏻","🤘🏻","🤙🏻","👈🏻","👉🏻","👆🏻","🖕🏻","👇🏻","☝🏻","👍🏻"]},{id:"animals",icon:"🐶",name:"动物",emojis:["🐶","🐱","🐭","🐹","🐰","🦊","🐻","🐼","🐨","🐯","🦁","🐮","🐷","🐸","🐵","🙈","🙉","🙊","🐒","🐔","🐧","🐦","🐤","🐣","🐥","🦆","🦅","🦉","🦇","🐺","🐗","🐴","🦄","🐝","🐛","🦋","🐌","🐞","🐜","🦟","🦗","🕷️","🦂","🐢","🐍","🦎","🦖","🦕","🐙","🦑"]},{id:"food",icon:"🍎",name:"食物",emojis:["🍎","🍊","🍋","🍌","🍉","🍇","🍓","🍈","🍒","🍑","🥭","🍍","🥥","🥝","🍅","🍆","🥑","🥦","🥬","🥒","🌶️","🌽","🥕","🧄","🧅","🥔","🍠","🥐","🥯","🍞","🥖","🥨","🧀","🥚","🍳","🧈","🥞","🧇","🥓","🥩","🍗","🍖","🌭","🍔","🍟","🍕","🥪","🥙","🧆","🌮"]},{id:"objects",icon:"⌚",name:"物品",emojis:["⌚","📱","📲","💻","⌨️","🖥️","🖨️","🖱️","🖲️","🕹️","🗜️","💽","💾","💿","📀","🧮","🎥","🎞️","📽️","🎬","📺","📷","📸","📹","📼","🔍","🔎","🕯️","💡","🔦","🏮","📔","📕","📖","📗","📘","📙","📚","📓","📒","📃","📜","📄","📰","🗞️","📑","🔖","🏷️","💰","🪙"]},{id:"nature",icon:"☀️",name:"自然",emojis:["☀️","🌤️","⛅","🌥️","☁️","🌦️","🌧️","⛈️","🌩️","🌨️","❄️","☃️","⛄","🌬️","💨","🌪️","🌫️","🌊","💧","💦","☔","☂️","🌱","🌲","🌳","🌴","🌵","🌷","🌹","🥀","🌺","🌸","🌼","🌻","🌞","⭐","🌟","✨","💫","🌙","🌚","🌛","🌜","🌝","🪐","🌍","🌎","🌏","⛱️","🏖️"]}],T=S=>{s("select",S)};return(S,X)=>u.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"emoji-picker",onClick:X[0]||(X[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",Ht,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(f,(C,d)=>e.createElementVNode("div",{key:C.id,class:e.normalizeClass(["emoji-category-tab",{active:o.value===d}]),onClick:V=>o.value=d},e.toDisplayString(C.icon),11,qt)),64))]),e.createElementVNode("div",jt,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(f[o.value].emojis,C=>(e.openBlock(),e.createElementBlock("div",{key:C,class:"emoji-item",onClick:d=>T(C)},e.toDisplayString(C),9,Xt))),128))])])):e.createCommentVNode("",!0)}},[["__scopeId","data-v-6ca53096"]]),Ot={class:"chat-panel"},Jt={class:"chat-sidebar"},Qt=["src"],Zt=["onClick"],Pt={key:0,class:"sidebar-nav-badge"},vt={class:"chat-content-panel"},ea={class:"chat-search-bar"},ta={class:"chat-content-scroll"},aa={key:0},sa=["onClick","onContextmenu"],ra={class:"chat-list-avatar-wrapper"},oa=["src","alt"],na={key:0,class:"chat-list-online-indicator"},la={class:"chat-list-info"},ia={class:"chat-list-header"},ca={class:"chat-list-name"},da={class:"chat-list-time"},pa={class:"chat-list-preview"},ma={class:"chat-list-last-msg"},ua={key:0,class:"chat-list-unread"},fa={key:1},ha={class:"add-friend-section"},ga={class:"add-friend-icon"},ka=["onClick"],ya={class:"chat-list-avatar-wrapper"},Va=["src","alt"],Na={class:"chat-list-info"},Ca={class:"chat-list-name"},wa={key:2},ba={class:"friend-request-info"},Ea=["src","alt"],xa={class:"friend-request-details"},_a={class:"friend-request-username"},Ba={key:3},Ma={class:"add-friend-section"},Sa={class:"add-friend-icon"},Ua=["onClick"],Ga={class:"chat-list-avatar-wrapper"},Ta={key:0,class:"group-avatar-grid"},za=["src","alt"],Fa=["src","alt"],Ia={class:"chat-list-info"},Da={class:"chat-list-header"},Aa={class:"chat-list-name"},La={class:"chat-list-time"},Ra={class:"chat-list-preview"},$a={class:"chat-list-last-msg"},Ka={key:0,class:"chat-list-unread"},Wa={class:"chat-main-area"},Ha={key:0,class:"friend-profile-area"},qa=["src","alt"],ja={class:"profile-name"},Xa={class:"profile-status"},Ya={key:1,class:"chat-window-area"},Oa={class:"chat-window-header"},Ja={class:"chat-window-title"},Qa={class:"chat-window-name"},Za={key:1,class:"chat-window-status"},Pa={class:"chat-window-actions"},va={class:"message-avatar"},es=["src"],ts={key:0,class:"message-sender-name"},as={class:"message-bubble-wrapper"},ss=["onClick"],rs=["src","alt"],os={key:0,class:"message-image-size"},ns=["onClick"],ls={class:"message-file-content"},is={class:"message-file-icon"},cs={class:"message-file-info"},ds={class:"message-file-name"},ps={class:"message-file-meta"},ms={key:0},us={key:0,class:"pending-files-area"},fs={key:0,class:"pending-image-wrapper"},hs=["src","alt"],gs=["onClick"],ks={key:1,class:"pending-file-wrapper"},ys={class:"pending-file-name"},Vs=["onClick"],Ns={key:1,class:"input-toolbar"},Cs={class:"emoji-button-wrapper"},ws={class:"input-textarea-wrapper"},bs=["onKeydown"],Es={class:"input-send-wrapper"},xs={key:2,class:"chat-empty-state"},_s={class:"empty-state-text"},Bs={key:0,class:"group-sidebar"},Ms={class:"group-sidebar-header"},Ss={class:"group-sidebar-content"},Us={class:"group-members-avatar-section"},Gs={class:"group-members-grid"},Ts=["onClick"],zs=["src","alt"],Fs={class:"group-member-nickname"},Is={class:"group-member-add-icon"},Ds={class:"group-member-add-icon"},As={class:"group-settings-section"},Ls={key:0,class:"group-setting-item"},Rs={class:"group-setting-value-wrapper"},$s={key:0,class:"group-edit-wrapper"},Ks={class:"group-edit-buttons"},Ws={key:1,class:"group-setting-item"},Hs={class:"group-setting-value-text"},qs={key:2,class:"group-setting-item"},js={class:"group-setting-value-wrapper"},Xs={key:0,class:"group-edit-wrapper"},Ys={class:"group-edit-buttons"},Os={class:"group-setting-value-text"},Js={key:3,class:"group-setting-item"},Qs={class:"group-setting-value-text"},Zs={key:4,class:"group-setting-item"},Ps={class:"group-setting-value-wrapper"},vs={key:0,class:"group-edit-wrapper"},er={class:"group-edit-buttons"},tr={class:"group-setting-value-text"},ar={key:5,class:"group-setting-item"},sr={class:"group-setting-value-text"},rr={class:"group-setting-value"},or={class:"group-setting-value-text"},nr={class:"group-setting-item"},lr={class:"group-setting-item"},ir={key:0,class:"chat-detail-panel"},cr={class:"chat-detail-content"},dr={class:"chat-detail-profile"},pr=["src","alt"],mr={class:"chat-detail-name"},ur={class:"add-friend-search-wrapper"},fr={class:"add-friend-users-list"},hr={class:"add-friend-user-info"},gr=["src","alt"],kr={class:"add-friend-user-name"},yr={class:"create-group-form"},Vr={class:"form-item"},Nr={class:"form-item"},Cr={class:"form-item"},wr={class:"member-selection"},br={key:1,class:"member-list"},Er=["onClick"],xr=["src","alt"],_r={class:"member-name"},Br={class:"group-detail-content"},Mr={class:"group-info-section"},Sr={class:"group-info-item"},Ur={class:"info-value"},Gr={class:"group-info-item"},Tr={class:"info-value"},zr={class:"group-info-item"},Fr={class:"info-value"},Ir={key:0,class:"group-actions-section"},Dr={class:"group-actions-list"},Ar={class:"group-members-section"},Lr={class:"section-header"},Rr={class:"group-members-list"},$r=["src","alt"],Kr={class:"group-member-info"},Wr={class:"group-member-name"},Hr={key:0,class:"group-member-badge"},qr={key:0,class:"group-member-actions"},jr={key:1,class:"group-member-actions"},Xr={class:"msg-read-users-content"},Yr={class:"read-users-section"},Or={class:"section-title"},Jr={class:"users-list"},Qr={key:1,class:"users-tag-list"},Zr={class:"unread-users-section"},Pr={class:"section-title"},vr={class:"users-list"},eo={key:1,class:"users-tag-list"},to={class:"invite-member-content"},ao={class:"invite-member-list"},so={key:1,class:"member-list"},ro=["onClick"],oo=["src","alt"],no={class:"member-name"},lo={class:"chat-settings-container"},io={class:"chat-settings-avatar-section"},co={class:"chat-settings-avatar-wrapper"},po=["src"],mo={class:"chat-settings-user-display"},uo={class:"chat-settings-nickname"},fo={class:"chat-settings-username"},ho={class:"chat-settings-form-section"},go={class:"chat-settings-form-header"},ko={class:"chat-settings-form-title"},yo={class:"chat-settings-form"},Vo={class:"chat-settings-form-item"},No={key:1,class:"chat-settings-form-value"},Co={class:"chat-settings-form-item"},wo={key:1,class:"chat-settings-form-value"},bo={class:"chat-settings-form-item"},Eo={key:1,class:"chat-settings-form-value"},xo={class:"chat-settings-form-item"},_o={key:1,class:"chat-settings-form-value bio-value"},Bo={key:0,class:"chat-settings-form-actions"},at=We({__name:"ChatPanel",props:{config:{type:Object,required:!0}},emits:["message","send","error","init"],setup(u,{emit:a}){const s=u,o=a,{myUsername:f,myAvatar:T,userInfo:S,loadingUserInfo:X,friendList:C,filteredFriendList:d,searchText:V,inputText:U,messagesContainer:$,filteredUsers:y,filteredAvailableUsers:ae,currentUser:de,currentMessages:z,addFriendDialogVisible:h,addFriendSearchText:oe,availableUsers:se,loadingAvailableUsers:ne,friendApplyList:ee,loadingFriendApply:Q,activeTab:E,groupList:q,currentSelectGroup:k,groupMsgList:le,groupMemberList:te,createGroupDialogVisible:g,groupDetailVisible:w,newGroupName:j,newGroupRemark:_,selectedMembersForCreate:F,inviteMemberDialogVisible:b,selectedMembersForInvite:I,filteredGroupList:Y,currentChatTarget:O,currentGroupMessages:K,currentAllMessages:i,groupInfoVisible:p,editingGroupInfo:N,editingMemberNick:M,memberNickDialogVisible:A,msgReadUserDialogVisible:R,currentMsgReadList:Z,currentGroupInfo:ie,editingFields:me,tempEditValues:Ve,formatTime:Te,formatLastTime:ze,scrollToBottom:ot,getFriendList:qe,getChatHistory:nt,setFriendToChatStatus:Fe,selectUser:je,sendMessage:Xe,sendFile:Uo,sendFilesAndText:lt,initWebSocket:it,closeWebSocket:ct,reset:n,openAddFriendDialog:l,addFriend:G,loadFriendApplyList:J,agreeFriend:re,updateMyAvatar:ke,getGroupList:ue,getGroupHistory:xe,getGroupMembers:xn,selectGroup:Go,createGroup:To,inviteGroupMember:zo,quitGroup:Fo,sendGroupMessage:_n,sendGroupFile:Bn,sendGroupFilesAndText:Io,switchTab:Mn,getGroupUnreadCount:Sn,getMsgReadUserList:Un,updateGroupInfo:Do,updateMemberNick:Ao,deleteGroup:Lo,removeGroupMember:Ro,transferGroupOwner:$o,readSingleGroupMsg:Gn,readAllGroupMsg:Tn,openEditGroupInfo:Ko,openEditMemberNick:Ie,fetchGroupDetail:Wo,updateSingleGroupField:zn,startEditField:Ye,cancelEditField:Oe,saveEditField:Ho}=tt(s.config,c=>{o("message",c)}),qo=e.computed(()=>{var t;const c=[{id:"chat",icon:B.ChatDotRound,badge:0}];return s.config.modules.friends&&c.push({id:"friends",icon:B.UserFilled,badge:0}),s.config.modules.groups&&c.push({id:"groups",icon:B.UserFilled,badge:0}),s.config.modules.apply&&c.push({id:"apply",icon:B.Bell,badge:((t=ee.value)==null?void 0:t.length)||0}),c}),Ne=e.ref("chat"),be=e.ref(null),pe=e.ref(null),ce=e.ref(null),_e=e.ref(!1),ye=e.ref(!1),fe=e.ref({nickname:"",email:"",phone:"",bio:""}),Je=e.ref(!1),De=e.ref(!1),Ae=e.ref(!1),dt=e.ref(!1),Le=e.ref(null),Qe=e.ref(""),Re=e.ref(null),he=e.ref([]),Ce=e.ref({visible:!1,x:0,y:0,chat:null}),Be=e.ref(!1),Ee=e.ref(!1),pt=e.ref(!1);e.ref(null),e.watch(Ee,c=>{c&&k.value&&Wo(k.value.groupId)});const jo=e.computed(()=>{const c=te.value.find(t=>t.username===f);return(c==null?void 0:c.memberNick)||""}),Xo=()=>{const c=te.value.find(t=>t.username===f);c&&Ie(c)},Yo=(c,t)=>{c.preventDefault(),c.stopPropagation(),Ce.value={visible:!0,x:c.clientX,y:c.clientY,chat:t}},Ze=()=>{Ce.value.visible=!1},Oo=async()=>{if(!Ce.value.chat)return;await Fe(Ce.value.chat.id,0)&&be.value===Ce.value.chat.id&&(be.value=null,pe.value=null),Ze()},Pe=c=>{be.value=c.id,pe.value=c,ce.value=null,k.value=null,_e.value=!1,w.value=!1,je({id:c.id,name:c.name,avatar:c.avatar,online:c.online})},Jo=c=>{ce.value=c,be.value=null,pe.value=null,k.value=null},Qo=c=>{k.value=c,be.value=null,pe.value=null,ce.value=null,_e.value=!1,w.value=!1,Go(c)},Zo=async()=>{if(!ce.value)return;if(await Fe(ce.value.id)){Ne.value="chat",await e.nextTick();const t=y.value.find(m=>m.id===ce.value.id);t&&Pe(t),ce.value=null}},Po=()=>{De.value=!0},vo=()=>{var c;(c=Le.value)==null||c.click()},en=()=>{var c;(c=Re.value)==null||c.click()},tn=c=>{const t=Array.from(c.target.files||[]);if(t.length!==0){for(const m of t){if(m.size>50*1024*1024){x.ElMessage.warning(`文件 ${m.name} 超过50MB,已跳过`);continue}const D=URL.createObjectURL(m);he.value.push({id:Date.now()+Math.random(),file:m,name:m.name,size:m.size,type:m.type,previewUrl:D,isImage:m.type.startsWith("image/")})}Re.value&&(Re.value.value="")}},mt=c=>{const t=he.value[c];t.previewUrl&&URL.revokeObjectURL(t.previewUrl),he.value.splice(c,1)},ut=c=>{if(c===0)return"0 B";const t=1024,m=["B","KB","MB","GB"],D=Math.floor(Math.log(c)/Math.log(t));return parseFloat((c/Math.pow(t,D)).toFixed(2))+" "+m[D]},ft=async()=>{if(!U.value.trim()&&he.value.length===0)return;const c=[...he.value],t=U.value;U.value="",he.value.forEach(m=>{m.previewUrl&&URL.revokeObjectURL(m.previewUrl)}),he.value=[],k.value?await Io(c,t):await lt(c,t),o("send",{text:t,files:c})},an=c=>{var m;const t=(m=c.clipboardData)==null?void 0:m.items;if(t){for(const D of t)if(D.kind==="file"){const P=D.getAsFile();if(P){if(P.size>50*1024*1024){x.ElMessage.warning(`文件 ${P.name} 超过50MB,已跳过`);continue}const L=URL.createObjectURL(P);he.value.push({id:Date.now()+Math.random(),file:P,name:P.name,size:P.size,type:P.type,previewUrl:L,isImage:P.type.startsWith("image/")})}}}},ht=c=>{if(!c){x.ElMessage.warning("文件地址无效");return}window.open(c,"_blank")},sn=c=>{console.warn("图片加载失败",c)},rn=c=>{U.value+=c,Be.value=!1},on=(c,t)=>{const m={};return c===1?(m.width="100%",m.height="100%"):c===2?(m.width="50%",m.height="100%"):c===3&&t===0?(m.width="100%",m.height="50%"):(m.width="50%",m.height="50%"),m},nn=c=>{const t=F.value.findIndex(m=>m.id===c.id);t!==-1?F.value.splice(t,1):F.value.push(c)},ln=c=>{const t=I.value.findIndex(m=>m.id===c.id);t!==-1?I.value.splice(t,1):I.value.push(c)},cn=async()=>{await To()?x.ElMessage.success("群聊创建成功"):x.ElMessage.error("群聊创建失败")},dn=async()=>{await zo()?x.ElMessage.success("邀请成功"):x.ElMessage.error("邀请失败")},gt=async()=>{await x.ElMessageBox.confirm("确定要退出群聊吗?","提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).catch(()=>{})&&(await Fo()?x.ElMessage.success("已退出群聊"):x.ElMessage.error("退出失败"))},kt=async()=>{await x.ElMessageBox.confirm("确定要解散该群聊吗?此操作不可恢复!","警告",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).catch(()=>{})&&(await Lo()?(x.ElMessage.success("群聊已解散"),Ee.value=!1):x.ElMessage.error("解散失败"))},Me=async c=>{const t=ElLoading.service({lock:!0,text:"保存中...",background:"rgba(0, 0, 0, 0.7)"});try{await Ho(c)?x.ElMessage.success("保存成功"):x.ElMessage.error("保存失败")}catch(m){console.error("保存失败",m),x.ElMessage.error("保存失败")}finally{t.close()}},pn=async()=>{const c=ElLoading.service({lock:!0,text:"保存中...",background:"rgba(0, 0, 0, 0.7)"});try{await Ao()?(x.ElMessage.success("群昵称修改成功"),A.value=!1):x.ElMessage.error("修改失败")}catch(t){console.error("修改失败",t),x.ElMessage.error("修改失败")}finally{c.close()}},mn=async c=>{if(await x.ElMessageBox.confirm(`确定要移除成员 ${c} 吗?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).catch(()=>{})){const m=ElLoading.service({lock:!0,text:"移除中...",background:"rgba(0, 0, 0, 0.7)"});try{await Ro(c)?x.ElMessage.success("成员已移除"):x.ElMessage.error("移除失败")}catch(D){console.error("移除失败",D),x.ElMessage.error("移除失败")}finally{m.close()}}},un=async c=>{if(await x.ElMessageBox.confirm(`确定要将群主转让给 ${c} 吗?`,"提示",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}).catch(()=>{})){const m=ElLoading.service({lock:!0,text:"转让中...",background:"rgba(0, 0, 0, 0.7)"});try{await $o(c)?x.ElMessage.success("群主已转让"):x.ElMessage.error("转让失败")}catch(D){console.error("转让失败",D),x.ElMessage.error("转让失败")}finally{m.close()}}},fn=async()=>{await Do()?x.ElMessage.success("群信息已更新"):x.ElMessage.error("更新失败")},hn=c=>{const t=c.target.files[0];if(!t)return;if(!t.type.startsWith("image/")){x.ElMessage.error("只能上传图片文件");return}if(t.size>5*1024*1024){x.ElMessage.error("图片大小不能超过 5MB");return}const m=new FileReader;m.onload=D=>{Qe.value=D.target.result,Ae.value=!0},m.readAsDataURL(t)},gn=async({file:c})=>{if(c){dt.value=!0;try{const{ChatApi:t}=await Promise.resolve().then(()=>Tt),D=await new t(s.config).uploadAvatar(c,f);D.code===200?(x.ElMessage.success("头像上传成功"),ke(D.data),kn()):x.ElMessage.error(D.msg||"头像上传失败")}catch(t){console.error(t),x.ElMessage.error("头像上传失败")}finally{dt.value=!1}}},kn=()=>{Qe.value="",Ae.value=!1,Le.value&&(Le.value.value="")},yn=()=>{fe.value={nickname:S.value.nickname||"",email:S.value.email||"",phone:S.value.phone||"",bio:S.value.bio||""},ye.value=!0},Vn=()=>{ye.value=!1,fe.value={nickname:"",email:"",phone:"",bio:""}},Nn=async()=>{Je.value=!0;try{await updateUserInfo(fe.value)?(x.ElMessage.success("保存成功"),ye.value=!1):x.ElMessage.error("保存失败")}catch(c){console.error(c),x.ElMessage.error("保存失败")}finally{Je.value=!1}};return e.onMounted(async()=>{const c=[qe(),J()];s.config.modules.groups&&c.push(ue()),await Promise.all(c),it(),y.value.length>0&&Pe(y.value[0]),o("init"),document.addEventListener("click",Ze)}),e.onUnmounted(()=>{n(),ct(),document.removeEventListener("click",Ze)}),(c,t)=>{var Nt,Ct,wt;const m=e.resolveComponent("el-icon"),D=e.resolveComponent("el-input"),P=e.resolveComponent("el-empty"),L=e.resolveComponent("el-button"),Cn=e.resolveComponent("el-switch"),we=e.resolveComponent("el-dialog"),Se=e.resolveComponent("el-form-item"),yt=e.resolveComponent("el-form"),Vt=e.resolveComponent("el-tag");return e.openBlock(),e.createElementBlock("div",Ot,[e.createElementVNode("div",Jt,[e.createElementVNode("div",{class:"sidebar-avatar",onClick:Po},[e.createElementVNode("img",{src:e.unref(T),alt:"头像",class:"sidebar-avatar-img"},null,8,Qt)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(qo.value,r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:e.normalizeClass(["sidebar-nav-item",Ne.value===r.id?"sidebar-nav-item-active":"sidebar-nav-item-inactive"]),onClick:W=>Ne.value=r.id},[e.createVNode(m,{size:24},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(r.icon)))]),_:2},1024),r.badge?(e.openBlock(),e.createElementBlock("span",Pt,e.toDisplayString(r.badge>99?"99+":r.badge),1)):e.createCommentVNode("",!0)],10,Zt))),128)),t[54]||(t[54]=e.createElementVNode("div",{class:"sidebar-spacer"},null,-1)),u.config.modules.settings?(e.openBlock(),e.createElementBlock("div",{key:0,class:"sidebar-nav-item sidebar-nav-item-inactive",onClick:t[0]||(t[0]=r=>De.value=!0),title:"设置"},[e.createVNode(m,{size:24},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Setting))]),_:1})])):e.createCommentVNode("",!0)]),e.createElementVNode("div",vt,[e.createElementVNode("div",ea,[e.createVNode(D,{modelValue:e.unref(V),"onUpdate:modelValue":t[1]||(t[1]=r=>e.isRef(V)?V.value=r:null),placeholder:"搜索","prefix-icon":e.unref(B.Search),class:"chat-search-input"},null,8,["modelValue","prefix-icon"])]),e.createElementVNode("div",ta,[Ne.value==="chat"?(e.openBlock(),e.createElementBlock("div",aa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(y),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:e.normalizeClass(["chat-list-item",be.value===r.id?"chat-list-item-active":""]),onClick:W=>Pe(r),onContextmenu:e.withModifiers(W=>Yo(W,r),["prevent","stop"])},[e.createElementVNode("div",ra,[e.createElementVNode("img",{src:r.avatar,alt:r.name,class:"chat-list-avatar"},null,8,oa),r.online?(e.openBlock(),e.createElementBlock("span",na)):e.createCommentVNode("",!0)]),e.createElementVNode("div",la,[e.createElementVNode("div",ia,[e.createElementVNode("span",ca,e.toDisplayString(r.name),1),e.createElementVNode("span",da,e.toDisplayString(e.unref(ze)(r.lastTime)),1)]),e.createElementVNode("div",pa,[e.createElementVNode("span",ma,e.toDisplayString(r.lastMsg),1),r.unread>0?(e.openBlock(),e.createElementBlock("span",ua,e.toDisplayString(r.unread>99?"99+":r.unread),1)):e.createCommentVNode("",!0)])])],42,sa))),128))])):e.createCommentVNode("",!0),Ne.value==="friends"&&u.config.modules.friends?(e.openBlock(),e.createElementBlock("div",fa,[e.createElementVNode("div",ha,[e.createElementVNode("div",{class:"add-friend-btn",onClick:t[2]||(t[2]=(...r)=>e.unref(l)&&e.unref(l)(...r))},[e.createElementVNode("div",ga,[e.createVNode(m,{class:"text-white",size:20},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Plus))]),_:1})]),t[55]||(t[55]=e.createElementVNode("span",{class:"add-friend-text"},"添加好友",-1))])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(d),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:"chat-list-item",onClick:W=>Jo(r)},[e.createElementVNode("div",ya,[e.createElementVNode("img",{src:r.avatar,alt:r.name,class:"chat-list-avatar"},null,8,Va),e.createElementVNode("span",{class:e.normalizeClass(["chat-list-online-indicator",r.online?"chat-list-online":"chat-list-offline"])},null,2)]),e.createElementVNode("div",Na,[e.createElementVNode("span",Ca,e.toDisplayString(r.name),1)])],8,ka))),128))])):e.createCommentVNode("",!0),Ne.value==="apply"&&u.config.modules.apply?(e.openBlock(),e.createElementBlock("div",wa,[e.unref(Q)?(e.openBlock(),e.createBlock(P,{key:0,description:"加载中..."})):e.unref(ee).length===0?(e.openBlock(),e.createBlock(P,{key:1,description:"暂无好友申请"})):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(e.unref(ee),r=>(e.openBlock(),e.createElementBlock("div",{key:r.applyUser||r.id,class:"friend-request-item"},[e.createElementVNode("div",ba,[e.createElementVNode("img",{src:`https://api.dicebear.com/7.x/avataaars/svg?seed=${r.applyUser}`,alt:r.applyUser,class:"friend-request-avatar"},null,8,Ea),e.createElementVNode("div",xa,[e.createElementVNode("div",_a,e.toDisplayString(r.applyUser),1),t[56]||(t[56]=e.createElementVNode("div",{class:"friend-request-desc"},"请求添加你为好友",-1))])]),e.createVNode(L,{type:"primary",size:"small",onClick:W=>e.unref(re)(r.applyUser)},{default:e.withCtx(()=>[...t[57]||(t[57]=[e.createTextVNode("同意",-1)])]),_:1},8,["onClick"])]))),128))])):e.createCommentVNode("",!0),Ne.value==="groups"&&u.config.modules.groups?(e.openBlock(),e.createElementBlock("div",Ba,[e.createElementVNode("div",Ma,[e.createElementVNode("div",{class:"add-friend-btn",onClick:t[3]||(t[3]=r=>g.value=!0)},[e.createElementVNode("div",Sa,[e.createVNode(m,{class:"text-white",size:20},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Plus))]),_:1})]),t[58]||(t[58]=e.createElementVNode("span",{class:"add-friend-text"},"创建群聊",-1))])]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Y),r=>{var W;return e.openBlock(),e.createElementBlock("div",{key:r.groupId,class:e.normalizeClass(["chat-list-item",((W=e.unref(k))==null?void 0:W.groupId)===r.groupId?"chat-list-item-active":""]),onClick:ge=>Qo(r)},[e.createElementVNode("div",Ga,[r.memberAvatars&&r.memberAvatars.length>0?(e.openBlock(),e.createElementBlock("div",Ta,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.memberAvatars,(ge,$e)=>(e.openBlock(),e.createElementBlock("div",{key:ge.username,class:"group-avatar-item",style:e.normalizeStyle(on(r.memberAvatars.length,$e))},[e.createElementVNode("img",{src:ge.avatar,alt:ge.username,class:"group-avatar-img"},null,8,za)],4))),128))])):(e.openBlock(),e.createElementBlock("img",{key:1,src:r.avatar,alt:r.name,class:"chat-list-avatar"},null,8,Fa))]),e.createElementVNode("div",Ia,[e.createElementVNode("div",Da,[e.createElementVNode("span",Aa,e.toDisplayString(r.name),1),e.createElementVNode("span",La,e.toDisplayString(e.unref(ze)(r.lastTime)),1)]),e.createElementVNode("div",Ra,[e.createElementVNode("span",$a,e.toDisplayString(r.lastMsg),1),r.unread>0?(e.openBlock(),e.createElementBlock("span",Ka,e.toDisplayString(r.unread>99?"99+":r.unread),1)):e.createCommentVNode("",!0)])])],10,Ua)}),128))])):e.createCommentVNode("",!0)])]),e.createElementVNode("div",Wa,[ce.value&&!pe.value?(e.openBlock(),e.createElementBlock("div",Ha,[e.createElementVNode("img",{src:ce.value.avatar,alt:ce.value.name,class:"profile-avatar"},null,8,qa),e.createElementVNode("div",ja,e.toDisplayString(ce.value.name),1),e.createElementVNode("div",Xa,[e.createElementVNode("span",{class:e.normalizeClass(["profile-status-dot",ce.value.online?"profile-status-online":"profile-status-offline"])},null,2),e.createElementVNode("span",null,e.toDisplayString(ce.value.online?"在线":"离线"),1)]),e.createVNode(L,{type:"primary",size:"large",onClick:Zo,class:"profile-start-chat-btn"},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.ChatDotRound))]),_:1}),t[59]||(t[59]=e.createElementVNode("span",null,"发消息",-1))]),_:1})])):e.createCommentVNode("",!0),pe.value||e.unref(k)?(e.openBlock(),e.createElementBlock("div",Ya,[e.createElementVNode("div",Oa,[e.createElementVNode("div",Ja,[e.createElementVNode("span",Qa,e.toDisplayString(e.unref(k)?e.unref(k).name:pe.value.name),1),e.unref(k)?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["chat-window-status",pe.value.online?"chat-window-status-online":"chat-window-status-offline"])},e.toDisplayString(pe.value.online?"在线":"离线"),3)),e.unref(k)?(e.openBlock(),e.createElementBlock("span",Za,e.toDisplayString(e.unref(te).length)+" 人 ",1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Pa,[e.createVNode(m,{class:"chat-action-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Search))]),_:1}),e.unref(k)?(e.openBlock(),e.createBlock(m,{key:0,class:"chat-action-icon",onClick:t[4]||(t[4]=r=>Ee.value=!Ee.value)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.MoreFilled))]),_:1})):(e.openBlock(),e.createBlock(m,{key:1,class:"chat-action-icon",onClick:t[5]||(t[5]=r=>_e.value=!_e.value)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.MoreFilled))]),_:1}))])]),e.createElementVNode("div",{ref_key:"messagesContainer",ref:$,class:"chat-messages-container"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(k)?e.unref(K):e.unref(z),(r,W)=>(e.openBlock(),e.createElementBlock("div",{key:W,class:e.normalizeClass(["message-wrapper",r.isSelf?"message-self":"message-other"])},[e.createElementVNode("div",va,[e.createElementVNode("img",{src:r.avatar,class:"message-avatar-img"},null,8,es)]),e.createElementVNode("div",{class:e.normalizeClass(["message-content",r.isSelf?"message-content-self":"message-content-other"])},[r.isSelf?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ts,e.toDisplayString(e.unref(k)?r.displayName||r.sendUsername:pe.value.name),1)),e.createElementVNode("div",as,[r.type==="text"?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["message-bubble",r.isSelf?"message-bubble-self":"message-bubble-other"])},e.toDisplayString(r.text),3)):r.type==="file"&&r.fileType==="image"?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["message-bubble","message-image-bubble",r.isSelf?"message-bubble-self":"message-bubble-other"]),onClick:ge=>ht(r.fileUrl)},[e.createElementVNode("img",{src:r.fileUrl,alt:r.fileName,class:"message-image",onError:sn},null,40,rs),r.fileSize?(e.openBlock(),e.createElementBlock("div",os,e.toDisplayString(ut(r.fileSize)),1)):e.createCommentVNode("",!0)],10,ss)):r.type==="file"?(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass(["message-bubble","message-file-bubble",r.isSelf?"message-bubble-self":"message-bubble-other"]),onClick:ge=>ht(r.fileUrl)},[e.createElementVNode("div",ls,[e.createElementVNode("div",is,[e.createVNode(m,{size:28},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Document))]),_:1})]),e.createElementVNode("div",cs,[e.createElementVNode("div",ds,e.toDisplayString(r.fileName||r.text),1),e.createElementVNode("div",ps,[e.createVNode(m,{size:12},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Download))]),_:1}),t[60]||(t[60]=e.createElementVNode("span",null,"点击下载",-1)),r.fileSize?(e.openBlock(),e.createElementBlock("span",ms,"· "+e.toDisplayString(ut(r.fileSize)),1)):e.createCommentVNode("",!0)])])])],10,ns)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["message-time",r.isSelf?"message-time-right":"message-time-left"])},e.toDisplayString(e.unref(Te)(r.time)),3)])],2)],2))),128))],512),e.createElementVNode("div",{class:"chat-input-area",onClick:t[8]||(t[8]=r=>Be.value=!1)},[he.value.length>0?(e.openBlock(),e.createElementBlock("div",us,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(he.value,(r,W)=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:"pending-file-item"},[r.isImage?(e.openBlock(),e.createElementBlock("div",fs,[e.createElementVNode("img",{src:r.previewUrl,alt:r.name,class:"pending-image"},null,8,hs),e.createElementVNode("button",{onClick:ge=>mt(W),class:"pending-file-remove-btn"}," × ",8,gs)])):(e.openBlock(),e.createElementBlock("div",ks,[e.createVNode(m,{class:"pending-file-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Folder))]),_:1}),e.createElementVNode("span",ys,e.toDisplayString(r.name),1),e.createElementVNode("button",{onClick:ge=>mt(W),class:"pending-file-remove-btn"}," × ",8,Vs)]))]))),128))])):e.createCommentVNode("",!0),u.config.modules.fileUpload?(e.openBlock(),e.createElementBlock("div",Ns,[e.createElementVNode("div",Cs,[e.createVNode(m,{class:"input-toolbar-icon",onClick:t[6]||(t[6]=e.withModifiers(r=>Be.value=!Be.value,["stop"]))},{default:e.withCtx(()=>[e.createVNode(e.unref(B.ChatDotRound))]),_:1}),e.createVNode(Yt,{visible:Be.value,onSelect:rn},null,8,["visible"])]),e.createVNode(m,{class:"input-toolbar-icon",onClick:en},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Folder))]),_:1}),e.createVNode(m,{class:"input-toolbar-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Picture))]),_:1})])):e.createCommentVNode("",!0),e.createElementVNode("div",ws,[e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":t[7]||(t[7]=r=>e.isRef(U)?U.value=r:null),onKeydown:e.withKeys(e.withModifiers(ft,["prevent"]),["enter"]),onPaste:an,placeholder:"输入消息或粘贴文件...",class:"message-input-textarea",rows:"3"},null,40,bs),[[e.vModelText,e.unref(U)]])]),e.createElementVNode("div",Es,[e.createVNode(L,{type:"primary",disabled:!e.unref(U).trim()&&he.value.length===0,onClick:ft,class:"send-message-btn"},{default:e.withCtx(()=>[...t[61]||(t[61]=[e.createTextVNode(" 发送 ",-1)])]),_:1},8,["disabled"])]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:Re,type:"file",multiple:"",class:"hidden-file-input",onChange:tn},null,544)])])):ce.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",xs,[e.createVNode(m,{size:64,class:"empty-state-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.ChatLineRound))]),_:1}),e.createElementVNode("div",_s,e.toDisplayString(Ne.value==="apply"?"在左侧选择好友申请":"在左侧选择好友开始聊天"),1)]))]),e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>{var r,W,ge,$e,bt,Et,xt,_t,Bt,Mt,St,Ut,Gt;return[Ee.value&&e.unref(k)?(e.openBlock(),e.createElementBlock("div",Bs,[e.createElementVNode("div",Ms,[t[62]||(t[62]=e.createElementVNode("span",{class:"group-sidebar-title"},"群聊信息",-1)),e.createVNode(m,{class:"group-sidebar-close",onClick:t[9]||(t[9]=H=>Ee.value=!1)},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Close))]),_:1})]),e.createElementVNode("div",Ss,[e.createElementVNode("div",Us,[e.createElementVNode("div",Gs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(te).slice(0,12),H=>(e.openBlock(),e.createElementBlock("div",{key:H.username,class:"group-member-avatar-item",onClick:Fn=>e.unref(Ie)(H)},[e.createElementVNode("img",{src:H.avatar?`${u.config.api.baseUrl}${H.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${H.username}`,alt:H.username,class:"group-member-avatar-small"},null,8,zs),e.createElementVNode("span",Fs,e.toDisplayString(H.memberNick||H.username),1)],8,Ts))),128)),e.unref(te).length>12?(e.openBlock(),e.createElementBlock("div",{key:0,class:"group-member-avatar-item",onClick:t[10]||(t[10]=H=>b.value=!0)},[e.createElementVNode("div",Is,[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Plus))]),_:1})]),t[63]||(t[63]=e.createElementVNode("span",{class:"group-member-nickname"},"邀请",-1))])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-member-avatar-item",onClick:t[11]||(t[11]=H=>b.value=!0)},[e.createElementVNode("div",Ds,[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Plus))]),_:1})]),t[64]||(t[64]=e.createElementVNode("span",{class:"group-member-nickname"},"邀请",-1))]))])]),t[84]||(t[84]=e.createElementVNode("div",{class:"group-divider"},null,-1)),e.createElementVNode("div",As,[((r=e.unref(k))==null?void 0:r.owner)===e.unref(f)?(e.openBlock(),e.createElementBlock("div",Ls,[t[67]||(t[67]=e.createElementVNode("span",{class:"group-setting-label"},"群聊名称",-1)),e.createElementVNode("div",Rs,[e.unref(me).groupNickname?(e.openBlock(),e.createElementBlock("div",$s,[e.createVNode(D,{modelValue:e.unref(Ve).groupNickname,"onUpdate:modelValue":t[12]||(t[12]=H=>e.unref(Ve).groupNickname=H),placeholder:"请输入群聊名称",onKeyup:t[13]||(t[13]=e.withKeys(H=>Me("groupNickname"),["enter"])),class:"group-input-edit"},null,8,["modelValue"]),e.createElementVNode("div",Ks,[e.createVNode(L,{size:"small",onClick:t[14]||(t[14]=H=>e.unref(Oe)("groupNickname"))},{default:e.withCtx(()=>[...t[65]||(t[65]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{size:"small",type:"primary",onClick:t[15]||(t[15]=H=>Me("groupNickname"))},{default:e.withCtx(()=>[...t[66]||(t[66]=[e.createTextVNode("保存",-1)])]),_:1})])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-setting-value",onClick:t[16]||(t[16]=H=>e.unref(Ye)("groupNickname"))},[e.createElementVNode("span",null,e.toDisplayString(((W=e.unref(ie))==null?void 0:W.groupNickname)||((ge=e.unref(ie))==null?void 0:ge.groupName)||(($e=e.unref(k))==null?void 0:$e.name)||""),1),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Edit))]),_:1})]))])])):(e.openBlock(),e.createElementBlock("div",Ws,[t[68]||(t[68]=e.createElementVNode("span",{class:"group-setting-label"},"群聊名称",-1)),e.createElementVNode("span",Hs,e.toDisplayString(((bt=e.unref(ie))==null?void 0:bt.groupNickname)||((Et=e.unref(ie))==null?void 0:Et.groupName)||((xt=e.unref(k))==null?void 0:xt.name)||""),1)])),((_t=e.unref(k))==null?void 0:_t.owner)===e.unref(f)?(e.openBlock(),e.createElementBlock("div",qs,[t[71]||(t[71]=e.createElementVNode("span",{class:"group-setting-label"},"群公告",-1)),e.createElementVNode("div",js,[e.unref(me).notice?(e.openBlock(),e.createElementBlock("div",Xs,[e.createVNode(D,{modelValue:e.unref(Ve).notice,"onUpdate:modelValue":t[17]||(t[17]=H=>e.unref(Ve).notice=H),type:"textarea",rows:3,placeholder:"请输入群公告",class:"group-input-edit"},null,8,["modelValue"]),e.createElementVNode("div",Ys,[e.createVNode(L,{size:"small",onClick:t[18]||(t[18]=H=>e.unref(Oe)("notice"))},{default:e.withCtx(()=>[...t[69]||(t[69]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{size:"small",type:"primary",onClick:t[19]||(t[19]=H=>Me("notice"))},{default:e.withCtx(()=>[...t[70]||(t[70]=[e.createTextVNode("保存",-1)])]),_:1})])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-setting-value",onClick:t[20]||(t[20]=H=>e.unref(Ye)("notice"))},[e.createElementVNode("span",Os,e.toDisplayString(((Bt=e.unref(ie))==null?void 0:Bt.notice)||"暂无公告"),1),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Edit))]),_:1})]))])])):(e.openBlock(),e.createElementBlock("div",Js,[t[72]||(t[72]=e.createElementVNode("span",{class:"group-setting-label"},"群公告",-1)),e.createElementVNode("span",Qs,e.toDisplayString(((Mt=e.unref(ie))==null?void 0:Mt.notice)||"暂无公告"),1)])),((St=e.unref(k))==null?void 0:St.owner)===e.unref(f)?(e.openBlock(),e.createElementBlock("div",Zs,[t[75]||(t[75]=e.createElementVNode("span",{class:"group-setting-label"},"备注",-1)),e.createElementVNode("div",Ps,[e.unref(me).remark?(e.openBlock(),e.createElementBlock("div",vs,[e.createVNode(D,{modelValue:e.unref(Ve).remark,"onUpdate:modelValue":t[21]||(t[21]=H=>e.unref(Ve).remark=H),placeholder:"请输入备注",onKeyup:t[22]||(t[22]=e.withKeys(H=>Me("remark"),["enter"])),class:"group-input-edit"},null,8,["modelValue"]),e.createElementVNode("div",er,[e.createVNode(L,{size:"small",onClick:t[23]||(t[23]=H=>e.unref(Oe)("remark"))},{default:e.withCtx(()=>[...t[73]||(t[73]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{size:"small",type:"primary",onClick:t[24]||(t[24]=H=>Me("remark"))},{default:e.withCtx(()=>[...t[74]||(t[74]=[e.createTextVNode("保存",-1)])]),_:1})])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-setting-value",onClick:t[25]||(t[25]=H=>e.unref(Ye)("remark"))},[e.createElementVNode("span",tr,e.toDisplayString(((Ut=e.unref(ie))==null?void 0:Ut.remark)||"群聊的备注仅自己可见"),1),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Edit))]),_:1})]))])])):(e.openBlock(),e.createElementBlock("div",ar,[t[76]||(t[76]=e.createElementVNode("span",{class:"group-setting-label"},"备注",-1)),e.createElementVNode("span",sr,e.toDisplayString(((Gt=e.unref(ie))==null?void 0:Gt.remark)||"群聊的备注仅自己可见"),1)])),e.createElementVNode("div",{class:"group-setting-item",onClick:Xo},[t[77]||(t[77]=e.createElementVNode("span",{class:"group-setting-label"},"我在本群的昵称",-1)),e.createElementVNode("div",rr,[e.createElementVNode("span",or,e.toDisplayString(jo.value||e.unref(f)),1),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Edit))]),_:1})])]),t[82]||(t[82]=e.createElementVNode("div",{class:"group-divider"},null,-1)),e.createElementVNode("div",nr,[t[78]||(t[78]=e.createElementVNode("span",{class:"group-setting-label"},"查找聊天内容",-1)),e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.ArrowRight))]),_:1})]),e.createElementVNode("div",lr,[t[79]||(t[79]=e.createElementVNode("span",{class:"group-setting-label"},"消息免打扰",-1)),e.createVNode(Cn,{modelValue:pt.value,"onUpdate:modelValue":t[26]||(t[26]=H=>pt.value=H)},null,8,["modelValue"])]),t[83]||(t[83]=e.createElementVNode("div",{class:"group-divider"},null,-1)),e.unref(k).owner===e.unref(f)?(e.openBlock(),e.createElementBlock("div",{key:6,class:"group-setting-item danger",onClick:kt},[...t[80]||(t[80]=[e.createElementVNode("span",{class:"group-setting-label"},"解散群聊",-1)])])):(e.openBlock(),e.createElementBlock("div",{key:7,class:"group-setting-item danger",onClick:gt},[...t[81]||(t[81]=[e.createElementVNode("span",{class:"group-setting-label"},"删除并退出",-1)])]))])])])):e.createCommentVNode("",!0)]}),_:1}),_e.value?(e.openBlock(),e.createElementBlock("div",ir,[t[86]||(t[86]=e.createElementVNode("div",{class:"chat-detail-header"},"聊天详情",-1)),e.createElementVNode("div",cr,[e.createElementVNode("div",dr,[e.createElementVNode("img",{src:(Nt=pe.value)==null?void 0:Nt.avatar,alt:(Ct=pe.value)==null?void 0:Ct.name,class:"chat-detail-avatar"},null,8,pr),e.createElementVNode("div",mr,e.toDisplayString((wt=pe.value)==null?void 0:wt.name),1),t[85]||(t[85]=e.createElementVNode("div",{class:"chat-detail-actions"},[e.createElementVNode("div",{class:"chat-detail-action-item"},"查找聊天记录"),e.createElementVNode("div",{class:"chat-detail-action-item"},"清空聊天记录")],-1))])])])):e.createCommentVNode("",!0),e.createVNode(we,{modelValue:e.unref(h),"onUpdate:modelValue":t[28]||(t[28]=r=>e.isRef(h)?h.value=r:null),title:"添加好友",width:"500px","append-to-body":""},{default:e.withCtx(()=>[e.createElementVNode("div",ur,[e.createVNode(D,{modelValue:e.unref(oe),"onUpdate:modelValue":t[27]||(t[27]=r=>e.isRef(oe)?oe.value=r:null),placeholder:"搜索用户","prefix-icon":e.unref(B.Search),class:"add-friend-search-input"},null,8,["modelValue","prefix-icon"])]),e.createElementVNode("div",fr,[e.unref(ne)?(e.openBlock(),e.createBlock(P,{key:0,description:"加载中..."})):e.unref(ae).length===0?(e.openBlock(),e.createBlock(P,{key:1,description:"暂无用户"})):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(e.unref(ae),r=>(e.openBlock(),e.createElementBlock("div",{key:r.username,class:"add-friend-user-item"},[e.createElementVNode("div",hr,[e.createElementVNode("img",{src:`https://api.dicebear.com/7.x/avataaars/svg?seed=${r.username}`,alt:r.username,class:"add-friend-user-avatar"},null,8,gr),e.createElementVNode("div",kr,e.toDisplayString(r.username),1)]),e.createVNode(L,{type:"primary",size:"small",onClick:W=>e.unref(G)(r)},{default:e.withCtx(()=>[...t[87]||(t[87]=[e.createTextVNode("添加",-1)])]),_:1},8,["onClick"])]))),128))])]),_:1},8,["modelValue"]),e.createVNode(we,{modelValue:e.unref(g),"onUpdate:modelValue":t[32]||(t[32]=r=>e.isRef(g)?g.value=r:null),title:"创建群聊",width:"600px","append-to-body":""},{footer:e.withCtx(()=>[e.createVNode(L,{onClick:t[31]||(t[31]=r=>g.value=!1)},{default:e.withCtx(()=>[...t[91]||(t[91]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{type:"primary",onClick:cn,disabled:!e.unref(j).trim()},{default:e.withCtx(()=>[...t[92]||(t[92]=[e.createTextVNode("创建",-1)])]),_:1},8,["disabled"])]),default:e.withCtx(()=>[e.createElementVNode("div",yr,[e.createElementVNode("div",Vr,[t[88]||(t[88]=e.createElementVNode("label",{class:"form-label"},"群名称",-1)),e.createVNode(D,{modelValue:e.unref(j),"onUpdate:modelValue":t[29]||(t[29]=r=>e.isRef(j)?j.value=r:null),placeholder:"请输入群名称",maxlength:"50"},null,8,["modelValue"])]),e.createElementVNode("div",Nr,[t[89]||(t[89]=e.createElementVNode("label",{class:"form-label"},"群备注",-1)),e.createVNode(D,{modelValue:e.unref(_),"onUpdate:modelValue":t[30]||(t[30]=r=>e.isRef(_)?_.value=r:null),type:"textarea",placeholder:"请输入群备注(可选)",rows:3,maxlength:"200"},null,8,["modelValue"])]),e.createElementVNode("div",Cr,[t[90]||(t[90]=e.createElementVNode("label",{class:"form-label"},"选择成员",-1)),e.createElementVNode("div",wr,[e.unref(d).length===0?(e.openBlock(),e.createBlock(P,{key:0,description:"暂无好友可以添加"})):(e.openBlock(),e.createElementBlock("div",br,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(d),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:e.normalizeClass(["member-item",e.unref(F).some(W=>W.id===r.id)?"member-selected":""]),onClick:W=>nn(r)},[e.createElementVNode("img",{src:r.avatar,alt:r.name,class:"member-avatar"},null,8,xr),e.createElementVNode("span",_r,e.toDisplayString(r.name),1),e.unref(F).some(W=>W.id===r.id)?(e.openBlock(),e.createBlock(m,{key:0,class:"member-check"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.CircleCheck))]),_:1})):e.createCommentVNode("",!0)],10,Er))),128))]))])])])]),_:1},8,["modelValue"]),e.unref(k)?(e.openBlock(),e.createBlock(we,{key:1,modelValue:e.unref(w),"onUpdate:modelValue":t[35]||(t[35]=r=>e.isRef(w)?w.value=r:null),title:e.unref(k).name,width:"500px","append-to-body":""},{footer:e.withCtx(()=>[e.createVNode(L,{onClick:t[34]||(t[34]=r=>w.value=!1)},{default:e.withCtx(()=>[...t[105]||(t[105]=[e.createTextVNode("关闭",-1)])]),_:1}),e.createVNode(L,{type:"danger",onClick:gt},{default:e.withCtx(()=>[...t[106]||(t[106]=[e.createTextVNode("退出群聊",-1)])]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",Br,[e.createElementVNode("div",Mr,[e.createElementVNode("div",Sr,[t[93]||(t[93]=e.createElementVNode("span",{class:"info-label"},"群ID",-1)),e.createElementVNode("span",Ur,e.toDisplayString(e.unref(k).groupId),1)]),e.createElementVNode("div",Gr,[t[94]||(t[94]=e.createElementVNode("span",{class:"info-label"},"群主",-1)),e.createElementVNode("span",Tr,e.toDisplayString(e.unref(k).owner),1)]),e.createElementVNode("div",zr,[t[95]||(t[95]=e.createElementVNode("span",{class:"info-label"},"成员数",-1)),e.createElementVNode("span",Fr,e.toDisplayString(e.unref(te).length),1)])]),e.unref(k).owner===e.unref(f)?(e.openBlock(),e.createElementBlock("div",Ir,[t[98]||(t[98]=e.createElementVNode("div",{class:"section-header"},[e.createElementVNode("span",{class:"section-title"},"群管理")],-1)),e.createElementVNode("div",Dr,[e.createVNode(L,{type:"primary",size:"small",onClick:e.unref(Ko)},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Edit))]),_:1}),t[96]||(t[96]=e.createTextVNode("编辑群信息 ",-1))]),_:1},8,["onClick"]),e.createVNode(L,{type:"danger",size:"small",onClick:kt},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Delete))]),_:1}),t[97]||(t[97]=e.createTextVNode("解散群聊 ",-1))]),_:1})])])):e.createCommentVNode("",!0),e.createElementVNode("div",Ar,[e.createElementVNode("div",Lr,[t[100]||(t[100]=e.createElementVNode("span",{class:"section-title"},"群成员",-1)),e.createVNode(L,{size:"small",onClick:t[33]||(t[33]=r=>b.value=!0)},{default:e.withCtx(()=>[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Plus))]),_:1}),t[99]||(t[99]=e.createTextVNode("邀请成员 ",-1))]),_:1})]),e.createElementVNode("div",Rr,[e.unref(te).length===0?(e.openBlock(),e.createBlock(P,{key:0,description:"暂无成员"})):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(e.unref(te),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id||r.username,class:"group-member-item"},[e.createElementVNode("img",{src:r.avatar?`${s.config.api.baseUrl}${r.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${r.username}`,alt:r.username,class:"group-member-avatar"},null,8,$r),e.createElementVNode("div",Kr,[e.createElementVNode("span",Wr,e.toDisplayString(r.memberNick||r.username),1),r.username===e.unref(k).owner?(e.openBlock(),e.createElementBlock("span",Hr,"群主")):e.createCommentVNode("",!0)]),e.unref(k).owner===e.unref(f)&&r.username!==e.unref(f)?(e.openBlock(),e.createElementBlock("div",qr,[e.createVNode(L,{size:"small",link:"",onClick:W=>e.unref(Ie)(r)},{default:e.withCtx(()=>[...t[101]||(t[101]=[e.createTextVNode(" 改昵称 ",-1)])]),_:1},8,["onClick"]),e.createVNode(L,{size:"small",link:"",type:"danger",onClick:W=>mn(r.username)},{default:e.withCtx(()=>[...t[102]||(t[102]=[e.createTextVNode(" 移除 ",-1)])]),_:1},8,["onClick"]),e.createVNode(L,{size:"small",link:"",type:"warning",onClick:W=>un(r.username)},{default:e.withCtx(()=>[...t[103]||(t[103]=[e.createTextVNode(" 转让 ",-1)])]),_:1},8,["onClick"])])):r.username===e.unref(f)?(e.openBlock(),e.createElementBlock("div",jr,[e.createVNode(L,{size:"small",link:"",onClick:W=>e.unref(Ie)(r)},{default:e.withCtx(()=>[...t[104]||(t[104]=[e.createTextVNode(" 改昵称 ",-1)])]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)]))),128))])])])]),_:1},8,["modelValue","title"])):e.createCommentVNode("",!0),e.unref(k)?(e.openBlock(),e.createBlock(we,{key:2,modelValue:e.unref(p),"onUpdate:modelValue":t[40]||(t[40]=r=>e.isRef(p)?p.value=r:null),title:"编辑群信息",width:"500px","append-to-body":""},{footer:e.withCtx(()=>[e.createVNode(L,{onClick:t[39]||(t[39]=r=>p.value=!1)},{default:e.withCtx(()=>[...t[107]||(t[107]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{type:"primary",onClick:fn},{default:e.withCtx(()=>[...t[108]||(t[108]=[e.createTextVNode("保存",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(yt,{"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(Se,{label:"群名称"},{default:e.withCtx(()=>[e.createVNode(D,{modelValue:e.unref(N).groupNickname,"onUpdate:modelValue":t[36]||(t[36]=r=>e.unref(N).groupNickname=r),placeholder:"请输入群名称"},null,8,["modelValue"])]),_:1}),e.createVNode(Se,{label:"群备注"},{default:e.withCtx(()=>[e.createVNode(D,{modelValue:e.unref(N).remark,"onUpdate:modelValue":t[37]||(t[37]=r=>e.unref(N).remark=r),type:"textarea",rows:3,placeholder:"请输入群备注"},null,8,["modelValue"])]),_:1}),e.createVNode(Se,{label:"群公告"},{default:e.withCtx(()=>[e.createVNode(D,{modelValue:e.unref(N).notice,"onUpdate:modelValue":t[38]||(t[38]=r=>e.unref(N).notice=r),type:"textarea",rows:3,placeholder:"请输入群公告"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])):e.createCommentVNode("",!0),e.unref(k)?(e.openBlock(),e.createBlock(we,{key:3,modelValue:e.unref(A),"onUpdate:modelValue":t[43]||(t[43]=r=>e.isRef(A)?A.value=r:null),title:"编辑群昵称",width:"400px","append-to-body":""},{footer:e.withCtx(()=>[e.createVNode(L,{onClick:t[42]||(t[42]=r=>A.value=!1)},{default:e.withCtx(()=>[...t[109]||(t[109]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{type:"primary",onClick:pn},{default:e.withCtx(()=>[...t[110]||(t[110]=[e.createTextVNode("保存",-1)])]),_:1})]),default:e.withCtx(()=>[e.createVNode(yt,{"label-width":"80px"},{default:e.withCtx(()=>[e.createVNode(Se,{label:"成员"},{default:e.withCtx(()=>[e.createElementVNode("span",null,e.toDisplayString(e.unref(M).targetUsername),1)]),_:1}),e.createVNode(Se,{label:"群昵称"},{default:e.withCtx(()=>[e.createVNode(D,{modelValue:e.unref(M).memberNick,"onUpdate:modelValue":t[41]||(t[41]=r=>e.unref(M).memberNick=r),placeholder:"请输入群昵称"},null,8,["modelValue"])]),_:1})]),_:1})]),_:1},8,["modelValue"])):e.createCommentVNode("",!0),e.unref(k)?(e.openBlock(),e.createBlock(we,{key:4,modelValue:e.unref(R),"onUpdate:modelValue":t[45]||(t[45]=r=>e.isRef(R)?R.value=r:null),title:"消息已读状态",width:"500px","append-to-body":""},{footer:e.withCtx(()=>[e.createVNode(L,{onClick:t[44]||(t[44]=r=>R.value=!1)},{default:e.withCtx(()=>[...t[111]||(t[111]=[e.createTextVNode("关闭",-1)])]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",Xr,[e.createElementVNode("div",Yr,[e.createElementVNode("div",Or,[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Check))]),_:1}),e.createTextVNode("已读 ("+e.toDisplayString(e.unref(Z).readUserList.length)+") ",1)]),e.createElementVNode("div",Jr,[e.unref(Z).readUserList.length===0?(e.openBlock(),e.createBlock(P,{key:0,description:"暂无已读成员"})):(e.openBlock(),e.createElementBlock("div",Qr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Z).readUserList,r=>(e.openBlock(),e.createBlock(Vt,{key:r,class:"user-tag"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r),1)]),_:2},1024))),128))]))])]),e.createElementVNode("div",Zr,[e.createElementVNode("div",Pr,[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.Clock))]),_:1}),e.createTextVNode("未读 ("+e.toDisplayString(e.unref(Z).unreadUserList.length)+") ",1)]),e.createElementVNode("div",vr,[e.unref(Z).unreadUserList.length===0?(e.openBlock(),e.createBlock(P,{key:0,description:"全部已读"})):(e.openBlock(),e.createElementBlock("div",eo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(Z).unreadUserList,r=>(e.openBlock(),e.createBlock(Vt,{key:r,type:"info",class:"user-tag"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(r),1)]),_:2},1024))),128))]))])])])]),_:1},8,["modelValue"])):e.createCommentVNode("",!0),e.unref(k)?(e.openBlock(),e.createBlock(we,{key:5,modelValue:e.unref(b),"onUpdate:modelValue":t[47]||(t[47]=r=>e.isRef(b)?b.value=r:null),title:"邀请成员",width:"500px","append-to-body":""},{footer:e.withCtx(()=>[e.createVNode(L,{onClick:t[46]||(t[46]=r=>b.value=!1)},{default:e.withCtx(()=>[...t[112]||(t[112]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{type:"primary",onClick:dn,disabled:e.unref(I).length===0},{default:e.withCtx(()=>[e.createTextVNode(" 邀请 "+e.toDisplayString(e.unref(I).length)+" 人 ",1)]),_:1},8,["disabled"])]),default:e.withCtx(()=>[e.createElementVNode("div",to,[e.createElementVNode("div",ao,[e.unref(d).length===0?(e.openBlock(),e.createBlock(P,{key:0,description:"暂无好友可以邀请"})):(e.openBlock(),e.createElementBlock("div",so,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(d),r=>(e.openBlock(),e.createElementBlock("div",{key:r.id,class:e.normalizeClass(["member-item",e.unref(I).some(W=>W.id===r.id)?"member-selected":""]),onClick:W=>ln(r)},[e.createElementVNode("img",{src:r.avatar,alt:r.name,class:"member-avatar"},null,8,oo),e.createElementVNode("span",no,e.toDisplayString(r.name),1),e.unref(I).some(W=>W.id===r.id)?(e.openBlock(),e.createBlock(m,{key:0,class:"member-check"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.CircleCheck))]),_:1})):e.createCommentVNode("",!0)],10,ro))),128))]))])])]),_:1},8,["modelValue"])):e.createCommentVNode("",!0),e.createVNode(we,{modelValue:De.value,"onUpdate:modelValue":t[52]||(t[52]=r=>De.value=r),title:"个人设置",width:"560px","close-on-click-modal":!1,"append-to-body":"",class:"chat-settings-dialog"},{default:e.withCtx(()=>[e.createElementVNode("div",lo,[e.createElementVNode("div",io,[e.createElementVNode("div",co,[e.createElementVNode("img",{src:e.unref(T),alt:"头像",class:"chat-settings-avatar"},null,8,po),u.config.modules.avatarCrop?(e.openBlock(),e.createElementBlock("div",{key:0,class:"chat-settings-avatar-edit",onClick:vo},[e.createVNode(m,{size:18,class:"chat-settings-avatar-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(B.Camera))]),_:1})])):e.createCommentVNode("",!0),e.createElementVNode("input",{ref_key:"avatarInputRef",ref:Le,type:"file",accept:"image/*",class:"hidden-avatar-input",onChange:hn},null,544)]),e.createElementVNode("div",mo,[e.createElementVNode("div",uo,e.toDisplayString(e.unref(S).nickname||e.unref(f)),1),e.createElementVNode("div",fo,"@"+e.toDisplayString(e.unref(f)),1)])]),e.createElementVNode("div",ho,[e.createElementVNode("div",go,[e.createElementVNode("div",ko,[e.createVNode(m,null,{default:e.withCtx(()=>[e.createVNode(e.unref(B.UserFilled))]),_:1}),t[113]||(t[113]=e.createTextVNode(" 个人信息 ",-1))]),ye.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(L,{key:0,type:"primary",size:"small",onClick:yn,class:"chat-settings-edit-btn"},{default:e.withCtx(()=>[...t[114]||(t[114]=[e.createTextVNode(" 编辑 ",-1)])]),_:1}))]),e.createElementVNode("div",yo,[e.createElementVNode("div",Vo,[t[115]||(t[115]=e.createElementVNode("label",{class:"chat-settings-form-label"},"昵称",-1)),ye.value?(e.openBlock(),e.createBlock(D,{key:0,modelValue:fe.value.nickname,"onUpdate:modelValue":t[48]||(t[48]=r=>fe.value.nickname=r),placeholder:"请输入昵称",size:"large"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",No,e.toDisplayString(e.unref(S).nickname||"未设置"),1))]),e.createElementVNode("div",Co,[t[116]||(t[116]=e.createElementVNode("label",{class:"chat-settings-form-label"},"邮箱",-1)),ye.value?(e.openBlock(),e.createBlock(D,{key:0,modelValue:fe.value.email,"onUpdate:modelValue":t[49]||(t[49]=r=>fe.value.email=r),placeholder:"请输入邮箱",size:"large"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",wo,e.toDisplayString(e.unref(S).email||"未设置"),1))]),e.createElementVNode("div",bo,[t[117]||(t[117]=e.createElementVNode("label",{class:"chat-settings-form-label"},"手机号",-1)),ye.value?(e.openBlock(),e.createBlock(D,{key:0,modelValue:fe.value.phone,"onUpdate:modelValue":t[50]||(t[50]=r=>fe.value.phone=r),placeholder:"请输入手机号",size:"large"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",Eo,e.toDisplayString(e.unref(S).phone||"未设置"),1))]),e.createElementVNode("div",xo,[t[118]||(t[118]=e.createElementVNode("label",{class:"chat-settings-form-label"},"个人简介",-1)),ye.value?(e.openBlock(),e.createBlock(D,{key:0,modelValue:fe.value.bio,"onUpdate:modelValue":t[51]||(t[51]=r=>fe.value.bio=r),type:"textarea",rows:4,placeholder:"介绍一下自己吧...",size:"large"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",_o,e.toDisplayString(e.unref(S).bio||"这个人很懒,什么都没写~"),1))]),ye.value?(e.openBlock(),e.createElementBlock("div",Bo,[e.createVNode(L,{size:"default",onClick:Vn},{default:e.withCtx(()=>[...t[119]||(t[119]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(L,{type:"primary",size:"default",loading:Je.value,onClick:Nn},{default:e.withCtx(()=>[...t[120]||(t[120]=[e.createTextVNode("保存更改",-1)])]),_:1},8,["loading"])])):e.createCommentVNode("",!0)])])])]),_:1},8,["modelValue"]),e.createVNode(He,{modelValue:Ae.value,"onUpdate:modelValue":t[53]||(t[53]=r=>Ae.value=r),src:Qe.value,onConfirm:gn},null,8,["modelValue","src"]),Ce.value.visible?(e.openBlock(),e.createElementBlock("div",{key:6,class:"chat-context-menu",style:e.normalizeStyle({left:Ce.value.x+"px",top:Ce.value.y+"px"})},[e.createElementVNode("div",{class:"chat-context-menu-item",onClick:Oo},"删除聊天")],4)):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-d3ae5bc1"]]),Mo={api:{baseUrl:"",websocketUrl:"",endpoints:{getFriends:"/chart/friends",getHistory:"/chart/history",setRead:"/chart/read",uploadFile:"/chart/upload/file",addFriend:"/chart/friend/add",getApplyList:"/chart/friend/applyList",agreeFriend:"/chart/friend/agree",setChatStatus:"/chart/friend/chat/status",getAvailableUsers:"/chart/user/canAddFriend",searchUser:"/chart/user/search",getUserAvatar:"/user/getAvatar",uploadAvatar:"/user/uploadAvatar",createGroup:"/chart/group/create",getMyGroups:"/chart/group/my",getGroupInfo:"/chart/group/info",addGroupMember:"/chart/group/member/add",getGroupMembers:"/chart/group/member/list",quitGroup:"/chart/group/member/quit",getGroupHistory:"/chart/group/history",getGroupUnreadCount:"/chart/group/unread/count",getMsgReadUserList:"/chart/group/msg/read/list",updateGroupInfo:"/chart/group/update/info",updateMemberNick:"/chart/group/member/nick/update",deleteGroup:"/chart/group/delete",removeGroupMember:"/chart/group/member/remove",transferGroupOwner:"/chart/group/owner/transfer",readSingleGroupMsg:"/chart/group/msg/read/single",readAllGroupMsg:"/chart/group/msg/read/all"},adapter:null},user:{username:"",avatar:"",nickname:"",email:"",phone:"",bio:""},modules:{friends:!0,apply:!0,settings:!0,fileUpload:!0,avatarCrop:!0,groups:!0,groupMembers:!0},theme:{primaryColor:"#07c160",selfMessageBg:"#95ec69",otherMessageBg:"#ffffff"},headers:{},requestInterceptors:[],responseInterceptors:[],websocket:{maxReconnectAttempts:5,reconnectDelay:3e3},file:{maxSize:50*1024*1024,allowedTypes:["*"]}};function So(u={}){const a=st(Mo,u);return a.api.baseUrl||console.warn("[VueChatKit] 请配置 api.baseUrl"),a.api.websocketUrl||console.warn("[VueChatKit] 请配置 api.websocketUrl"),a.user.username||console.warn("[VueChatKit] 请配置 user.username"),a}function st(u,a){const s={...u};for(const o in a)a[o]&&typeof a[o]=="object"&&!Array.isArray(a[o])?s[o]=st(u[o]||{},a[o]):s[o]=a[o];return s}const rt={install(u){u.component("ChatPanel",at),u.component("AvatarCrop",He)}};v.AvatarCrop=He,v.ChatApi=Ge,v.ChatPanel=at,v.ChatWebSocket=ve,v.HttpClient=et,v.VueChatKit=rt,v.createChatConfig=So,v.default=rt,v.useChat=tt,Object.defineProperties(v,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
1
+ (function(P,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("dayjs"),require("@element-plus/icons-vue")):typeof define=="function"&&define.amd?define(["exports","vue","dayjs","@element-plus/icons-vue"],e):(P=typeof globalThis<"u"?globalThis:P||self,e(P.VueChatKit={},P.Vue,P.dayjs,P.ElementPlusIconsVue))})(this,function(P,e,qe,Ge){"use strict";const M=(n,t)=>{const o=n.__vccOpts||n;for(const[a,r]of t)o[a]=r;return o},Ht={},Kt={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Ot(n,t){return e.openBlock(),e.createElementBlock("svg",Kt,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M11 19C15.4183 19 19 15.4183 19 11C19 6.58172 15.4183 3 11 3C6.58172 3 3 6.58172 3 11C3 15.4183 6.58172 19 11 19Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 21L16.65 16.65",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const pt=M(Ht,[["render",Ot]]),Wt={},qt={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Yt(n,t){return e.openBlock(),e.createElementBlock("svg",qt,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M20 21V19C20 17.9391 19.5786 16.9217 18.8284 16.1716C18.0783 15.4214 17.0609 15 16 15H8C6.93913 15 5.92172 15.4214 5.17157 16.1716C4.42143 16.9217 4 17.9391 4 19V21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M12 11C14.2091 11 16 9.20914 16 7C16 4.79086 14.2091 3 12 3C9.79086 3 8 4.79086 8 7C8 9.20914 9.79086 11 12 11Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Xt=M(Wt,[["render",Yt]]),Pt={},Zt={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Qt(n,t){return e.openBlock(),e.createElementBlock("svg",Zt,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M12 13C14.7614 13 17 10.7614 17 8C17 5.23858 14.7614 3 12 3C9.23858 3 7 5.23858 7 8C7 10.7614 9.23858 13 12 13Z",fill:"currentColor"},null,-1),e.createElementVNode("path",{d:"M20 21V19C20 17.9391 19.5786 16.9217 18.8284 16.1716C18.0783 15.4214 17.0609 15 16 15H8C6.93913 15 5.92172 15.4214 5.17157 16.1716C4.42143 16.9217 4 17.9391 4 19V21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Ye=M(Pt,[["render",Qt]]),Jt={},vt={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function en(n,t){return e.openBlock(),e.createElementBlock("svg",vt,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M6 9L12 15L18 9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const ut=M(Jt,[["render",en]]),tn={},nn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function on(n,t){return e.openBlock(),e.createElementBlock("svg",nn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M9 18L15 12L9 6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const ft=M(tn,[["render",on]]),rn={},an={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function sn(n,t){return e.openBlock(),e.createElementBlock("svg",an,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M3 7V5C3 3.89543 3.89543 3 5 3H8L10 6H19C20.1046 6 21 6.89543 21 8V19C21 20.1046 20.1046 21 19 21H5C3.89543 21 3 20.1046 3 19V7Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const gt=M(rn,[["render",sn]]),ln={},cn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function dn(n,t){return e.openBlock(),e.createElementBlock("svg",cn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M21 15C21 18.866 16.9706 22 12 22C8.141 22 4.8475 19.826 3.5 16.5M21 15C21 6 12 2 12 2C12 2 3 6 3 15C3 16.3958 3.38031 17.6959 4.06703 18.8409M21 15C21 16.3958 20.6197 17.6959 19.933 18.8409M3.5 16.5C3.30485 16.7949 3.15853 17.1078 3.06817 17.4314M4.06703 18.8409L3 22L7 20",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const ht=M(ln,[["render",dn]]),mn={},pn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function un(n,t){return e.openBlock(),e.createElementBlock("svg",pn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M5 13L9 17L19 7",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const kt=M(mn,[["render",un]]),fn={},gn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function hn(n,t){return e.openBlock(),e.createElementBlock("svg",gn,[...t[0]||(t[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"2"},null,-1),e.createElementVNode("path",{d:"M8 12L11 15L16 9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const yt=M(fn,[["render",hn]]),kn={},yn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Cn(n,t){return e.openBlock(),e.createElementBlock("svg",yn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M6 6L18 18M18 6L6 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Ct=M(kn,[["render",Cn]]),wn={},Vn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function bn(n,t){return e.openBlock(),e.createElementBlock("svg",Vn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M3 6H21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1),e.createElementVNode("path",{d:"M19 6V20C19 21.1046 18.1046 22 17 22H7C5.89543 22 5 21.1046 5 20V6M8 6V4C8 2.89543 8.89543 2 10 2H14C15.1046 2 16 2.89543 16 4V6",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M10 11V17",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1),e.createElementVNode("path",{d:"M14 11V17",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"},null,-1)])])}const Nn=M(wn,[["render",bn]]),En={},$n={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Bn(n,t){return e.openBlock(),e.createElementBlock("svg",$n,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M19.4 15C19.1 15.6 18.6 16.1 18 16.4L16.5 13.9C16.2 13.8 15.8 13.8 15.5 13.9L14.5 16.4C13.9 16.8 13 16.9 12.4 16.6L12 14.4C12 14.1 11.8 13.9 11.6 13.9H9.6C9.4 13.9 9.1 14.1 9 14.4L8.6 16.6C8 16.9 7.1 16.8 6.5 16.4L5.5 13.9C5.2 13.8 4.8 13.8 4.5 13.9L3 16.4C2.4 16.1 1.9 15.6 1.6 15L1 13C0.7 12.3 0.9 11.5 1.6 11L4.5 8.5C4.8 8.2 4.8 7.8 4.5 7.5L3 5C3.3 4.4 3.8 3.9 4.4 3.6L7.5 2.5C8.1 2.3 8.8 2.5 9.2 2.9L10.2 5.4C10.5 5.7 10.8 5.8 11.2 5.8H13.2C13.5 5.8 13.8 5.7 14.1 5.4L15.1 2.9C15.5 2.5 16.2 2.3 16.8 2.5L19.9 3.6C20.5 3.9 21 4.4 21.3 5L22.8 7.5C23.1 7.8 23.1 8.2 22.8 8.5L20 11C20.3 11.5 20.4 12.2 20.1 12.8L19.4 15Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const wt=M(En,[["render",Bn]]),xn={},Sn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Mn(n,t){return e.openBlock(),e.createElementBlock("svg",Sn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M23 19V5C23 3.89543 22.1046 3 21 3H17L15 1H9L7 3H3C1.89543 3 1 3.89543 1 5V19C1 20.1046 1.89543 21 3 21H21C22.1046 21 23 20.1046 23 19Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M12 17C14.7614 17 17 14.7614 17 12C17 9.23858 14.7614 7 12 7C9.23858 7 7 9.23858 7 12C7 14.7614 9.23858 17 12 17Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const _n=M(xn,[["render",Mn]]),Gn={},Tn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Un(n,t){return e.openBlock(),e.createElementBlock("svg",Tn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M11 4H4C2.89543 4 2 4.89543 2 6V20C2 21.1046 2.89543 22 4 22H18C19.1046 22 20 21.1046 20 20V13",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M18.5 2.5C18.8978 2.10218 19.4374 1.87869 20 1.87869C20.5626 1.87869 21.1022 2.10218 21.5 2.5C21.8978 2.89782 22.1213 3.43744 22.1213 4C22.1213 4.56256 21.8978 5.10218 21.5 5.5L12 15L8 16L9 12L18.5 2.5Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Te=M(Gn,[["render",Un]]),Ln={},In={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Fn(n,t){return e.openBlock(),e.createElementBlock("svg",In,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M12 5V19M5 12H19",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Vt=M(Ln,[["render",Fn]]),An={},Dn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function zn(n,t){return e.openBlock(),e.createElementBlock("svg",Dn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M5 12H19",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Rn=M(An,[["render",zn]]),jn={},Hn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Kn(n,t){return e.openBlock(),e.createElementBlock("svg",Hn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M12 17C14.7614 17 17 14.7614 17 12C17 9.23858 14.7614 7 12 7C9.23858 7 7 9.23858 7 12C7 14.7614 9.23858 17 12 17Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M12 1V3M12 21V23M4.22 4.22L5.64 5.64M18.36 18.36L19.78 19.78M1 12H3M21 12H23M4.22 19.78L5.64 18.36M18.36 5.64L19.78 4.22",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const On=M(jn,[["render",Kn]]),Wn={},qn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Yn(n,t){return e.openBlock(),e.createElementBlock("svg",qn,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Xn=M(Wn,[["render",Yn]]),Pn={},Zn={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function Qn(n,t){return e.openBlock(),e.createElementBlock("svg",Zn,[...t[0]||(t[0]=[e.createElementVNode("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M8 21H16",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M12 17V21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const Jn=M(Pn,[["render",Qn]]),vn={},eo={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function to(n,t){return e.openBlock(),e.createElementBlock("svg",eo,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M12 9V13M12 17H12.01M21 12C21 16.9706 16.9706 21 12 21 7.02944 21 3 16.9706 3 12 3 7.02944 7.02944 3 12 3 16.9706 3 21 7.02944 21 12 21Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const no=M(vn,[["render",to]]),oo={},ro={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function ao(n,t){return e.openBlock(),e.createElementBlock("svg",ro,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M21 19V5C21 3.89543 20.1046 3 19 3H5C3.89543 3 3 3.89543 3 5V19C3 20.1046 3.89543 21 5 21H19C20.1046 21 21 20.1046 21 19Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M8.5 10C9.88071 10 11 8.88071 11 7.5C11 6.11929 9.88071 5 8.5 5C7.11929 5 6 6.11929 6 7.5C6 8.88071 7.11929 10 8.5 10Z",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M21 15L16 10L5 21",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const so=M(oo,[["render",ao]]),lo={},io={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function co(n,t){return e.openBlock(),e.createElementBlock("svg",io,[...t[0]||(t[0]=[e.createElementVNode("path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1),e.createElementVNode("path",{d:"M13.73 21a2 2 0 0 1-3.46 0",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const mo=M(lo,[["render",co]]),po={},uo={width:"1em",height:"1em",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"};function fo(n,t){return e.openBlock(),e.createElementBlock("svg",uo,[...t[0]||(t[0]=[e.createElementVNode("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"2"},null,-1),e.createElementVNode("path",{d:"M12 6V12L16 14",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},null,-1)])])}const go=M(po,[["render",fo]]);class bt{constructor(t,o={}){this.userId=t,this.wsUrl=o.wsUrl||"",this.socket=null,this.reconnectAttempts=0,this.maxReconnectAttempts=o.maxReconnectAttempts||5,this.reconnectDelay=o.reconnectDelay||3e3,this.handlers={message:[],open:[],close:[],error:[]},this.isConnecting=!1,this.manualClose=!1}connect(){if(!(this.isConnecting||this.isConnected())){this.isConnecting=!0,this.manualClose=!1;try{this.socket=new WebSocket(this.wsUrl),this.socket.onopen=()=>{console.log("[VueChatKit] WebSocket 连接成功"),this.isConnecting=!1,this.reconnectAttempts=0,this.emit("open")},this.socket.onmessage=t=>{try{const o=t.data;this.emit("message",o)}catch(o){console.error("[VueChatKit] WebSocket 消息解析失败",o)}},this.socket.onclose=t=>{console.log("[VueChatKit] WebSocket 连接关闭",t.code),this.isConnecting=!1,this.emit("close",t),!this.manualClose&&t.code!==1e3&&this.reconnect()},this.socket.onerror=t=>{console.error("[VueChatKit] WebSocket 连接错误",t),this.isConnecting=!1,this.emit("error",t)}}catch(t){console.error("[VueChatKit] WebSocket 创建连接失败",t),this.isConnecting=!1}}}send(t,o,a="text",r="",u="",C=0,V=!1){if(this.isConnected()){const f=JSON.stringify(V?{toGroupId:t,msg:o,type:a,fileUrl:r,fileName:u,fileSize:C}:{to:t,msg:o,type:a,fileUrl:r,fileName:u,fileSize:C});return this.socket.send(f),!0}return console.warn("[VueChatKit] WebSocket 连接未建立,无法发送消息"),!1}on(t,o){this.handlers[t]&&this.handlers[t].push(o)}off(t,o){if(this.handlers[t]){const a=this.handlers[t].indexOf(o);a>-1&&this.handlers[t].splice(a,1)}}emit(t,...o){this.handlers[t]&&this.handlers[t].forEach(a=>a(...o))}reconnect(){this.reconnectAttempts<this.maxReconnectAttempts?(this.reconnectAttempts++,console.log(`[VueChatKit] 尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),setTimeout(()=>this.connect(),this.reconnectDelay)):console.error("[VueChatKit] 重连次数已达上限")}close(){this.manualClose=!0,this.socket&&(this.socket.close(),this.socket=null,this.handlers={message:[],open:[],close:[],error:[]})}isConnected(){return this.socket&&this.socket.readyState===WebSocket.OPEN}}class De extends Error{constructor(t,o,a,r){super(t),this.name="RequestError",this.status=o||0,this.code=a||0,this.data=r}}class Nt{constructor(t={}){this.baseUrl=t.baseUrl||"",this.timeout=t.timeout||1e4,this.headers=t.headers||{},this.requestInterceptors=[],this.responseInterceptors=[],t.requestInterceptors&&Array.isArray(t.requestInterceptors)&&t.requestInterceptors.forEach(o=>{this.requestInterceptors.push(o)}),this.addRequestInterceptor(o=>(o.body instanceof FormData||(o.headers={"Content-Type":"application/json",...o.headers}),o)),t.responseInterceptors&&Array.isArray(t.responseInterceptors)&&t.responseInterceptors.forEach(o=>{this.responseInterceptors.push(o)})}addRequestInterceptor(t){this.requestInterceptors.push(t)}addResponseInterceptor(t){this.responseInterceptors.push(t)}timeoutPromise(t){return new Promise((o,a)=>{setTimeout(()=>{a(new De("请求超时",408,408))},t)})}async request(t,o={}){const{method:a="GET",headers:r={},body:u,params:C}=o;let V=t.startsWith("http")?t:`${this.baseUrl}${t}`,f={method:a,headers:{...this.headers,...r},body:u,params:C};this.requestInterceptors.forEach(l=>{f=l(f)});const g={method:f.method,headers:f.headers,credentials:"include"};if(f.body&&a!=="GET"&&(f.body instanceof FormData?g.body=f.body:typeof f.body=="object"?g.body=JSON.stringify(f.body):g.body=f.body),f.params){const l=new URLSearchParams;for(const w in f.params)f.params[w]!==void 0&&f.params[w]!==null&&f.params[w]!==""&&l.append(w,f.params[w]);const c=l.toString();c&&(V+=(V.includes("?")?"&":"?")+c)}try{let c=await Promise.race([fetch(V,g),this.timeoutPromise(this.timeout)]);if(this.responseInterceptors.forEach(y=>{c=y(c)}),!c.ok)throw new De(`HTTP ${c.status}: ${c.statusText}`,c.status,c.status);const w=c.headers.get("content-type");let B;return w&&w.includes("application/json")?B=await c.json():B=await c.text(),B}catch(l){throw l instanceof De?l:new De(l instanceof Error?l.message:"网络错误",0,0)}}get(t,o,a){return this.request(t,{...a,method:"GET",params:o})}post(t,o,a){return this.request(t,{...a,method:"POST",body:o})}put(t,o,a){return this.request(t,{...a,method:"PUT",body:o})}delete(t,o){return this.request(t,{...o,method:"DELETE"})}}class ze{constructor(t,o=null){this.config=t,this.endpoints=t.api.endpoints,this.customAdapter=t.api.adapter,o?this.http=o:this.http=new Nt({baseUrl:t.api.baseUrl,headers:t.headers,requestInterceptors:t.requestInterceptors,responseInterceptors:t.responseInterceptors})}async _call(t,...o){return this.customAdapter&&typeof this.customAdapter[t]=="function"?this.customAdapter[t](...o):this[`_${t}`](...o)}async getFriends(t){return this._call("getFriends",t)}async _getFriends(t){return this.http.get(this.endpoints.getFriends,{currentUser:t})}async getAvailableUsers(t){return this._call("getAvailableUsers",t)}async _getAvailableUsers(t){return this.http.get(this.endpoints.getAvailableUsers,{currentUser:t})}async searchUser(t){return this._call("searchUser",t)}async _searchUser(t){return this.http.get(this.endpoints.searchUser,{keyword:t})}async addFriend(t,o){return this._call("addFriend",t,o)}async _addFriend(t,o){return this.http.post(this.endpoints.addFriend,{applyUser:t,friendUser:o})}async getApplyList(t){return this._call("getApplyList",t)}async _getApplyList(t){return this.http.get(this.endpoints.getApplyList,{currentUser:t})}async agreeFriend(t,o){return this._call("agreeFriend",t,o)}async _agreeFriend(t,o){return this.http.post(this.endpoints.agreeFriend,{applyUser:t,friendUser:o})}async setChatStatus(t,o,a=1){return this._call("setChatStatus",t,o,a)}async _setChatStatus(t,o,a){return this.http.post(this.endpoints.setChatStatus,null,{params:{currentUser:t,friendUser:o,status:a}})}async getHistory(t,o){return this._call("getHistory",t,o)}async _getHistory(t,o){return this.http.get(this.endpoints.getHistory,{fromUser:t,toUser:o})}async setRead(t,o){return this._call("setRead",t,o)}async _setRead(t,o){return this.http.post(this.endpoints.setRead,{currentUser:t,friendUser:o})}async uploadFile(t){return this._call("uploadFile",t)}async _uploadFile(t){const o=new FormData;return o.append("file",t),this.http.post(this.endpoints.uploadFile,o)}async updateUserInfo(t,o){return this._call("updateUserInfo",t,o)}async _updateUserInfo(t,o){return this.http.put(this.endpoints.updateUserInfo,{username:t,...o})}async getUserAvatar(t){return this._call("getUserAvatar",t)}async _getUserAvatar(t){return this.http.get(this.endpoints.getUserAvatar,{username:t})}async uploadAvatar(t,o){return this._call("uploadAvatar",t,o)}async _uploadAvatar(t,o){const a=new FormData;return a.append("file",t),a.append("username",o),this.http.post(this.endpoints.uploadAvatar,a)}async createGroup(t){return this._call("createGroup",t)}async _createGroup(t){return this.http.post(this.endpoints.createGroup,t)}async getMyGroups(t){return this._call("getMyGroups",t)}async _getMyGroups(t){return this.http.get(this.endpoints.getMyGroups,{currentUser:t})}async getGroupInfo(t,o){return this._call("getGroupInfo",t,o)}async _getGroupInfo(t,o){return this.http.get(this.endpoints.getGroupInfo,{groupId:t,currentUser:o})}async addGroupMember(t,o,a){return this._call("addGroupMember",t,o,a)}async _addGroupMember(t,o,a){return this.http.post(this.endpoints.addGroupMember,null,{params:{groupId:t,targetUser:o,currentUser:a}})}async inviteGroupMembers(t,o,a){return this._call("inviteGroupMembers",t,o,a)}async _inviteGroupMembers(t,o,a){return this.http.post(this.endpoints.addGroupMember,{groupId:t,currentUser:o,targetUserList:a})}async getGroupMembers(t,o){return this._call("getGroupMembers",t,o)}async _getGroupMembers(t,o){return this.http.get(this.endpoints.getGroupMembers,{groupId:t,currentUser:o})}async quitGroup(t,o){return this._call("quitGroup",t,o)}async _quitGroup(t,o){return this.http.post(this.endpoints.quitGroup,null,{params:{groupId:t,currentUser:o}})}async getGroupHistory(t,o){return this._call("getGroupHistory",t,o)}async _getGroupHistory(t,o){return this.http.get(this.endpoints.getGroupHistory,{groupId:t,currentUser:o})}async getGroupUnreadCount(t,o){return this._call("getGroupUnreadCount",t,o)}async _getGroupUnreadCount(t,o){return this.http.get(this.endpoints.getGroupUnreadCount,{groupId:t,currentUser:o})}async getMsgReadUserList(t,o,a){return this._call("getMsgReadUserList",t,o,a)}async _getMsgReadUserList(t,o,a){return this.http.get(this.endpoints.getMsgReadUserList,{groupId:t,groupMsgId:o,currentUser:a})}async updateGroupInfo(t,o,a,r,u){return this._call("updateGroupInfo",t,o,a,r,u)}async _updateGroupInfo(t,o,a,r,u){return this.http.post(this.endpoints.updateGroupInfo,{groupId:t,currentUser:o,groupNickname:a,remark:r,notice:u})}async updateMemberNick(t,o,a,r){return this._call("updateMemberNick",t,o,a,r)}async _updateMemberNick(t,o,a,r){return this.http.post(this.endpoints.updateMemberNick,{groupId:t,currentUser:o,targetUsername:a,memberNick:r})}async deleteGroup(t,o){return this._call("deleteGroup",t,o)}async _deleteGroup(t,o){return this.http.post(this.endpoints.deleteGroup,{groupId:t,currentUser:o})}async removeGroupMember(t,o,a){return this._call("removeGroupMember",t,o,a)}async _removeGroupMember(t,o,a){return this.http.post(this.endpoints.removeGroupMember,{groupId:t,currentUser:o,targetUsername:a})}async transferGroupOwner(t,o,a){return this._call("transferGroupOwner",t,o,a)}async _transferGroupOwner(t,o,a){return this.http.post(this.endpoints.transferGroupOwner,{groupId:t,currentUser:o,newOwnerUsername:a})}async readSingleGroupMsg(t,o,a){return this._call("readSingleGroupMsg",t,o,a)}async _readSingleGroupMsg(t,o,a){return this.http.post(this.endpoints.readSingleGroupMsg,{groupId:t,currentUser:o,groupMsgId:a})}async readAllGroupMsg(t,o){return this._call("readAllGroupMsg",t,o)}async _readAllGroupMsg(t,o){return this.http.post(this.endpoints.readAllGroupMsg,{groupId:t,currentUser:o})}async setGroupChatStatus(t,o,a=1){return this._call("setGroupChatStatus",t,o,a)}async _setGroupChatStatus(t,o,a){return this.http.post(this.endpoints.getGroupChatStatus,null,{params:{groupId:t,currentUser:o,status:a}})}}const ho=Object.freeze(Object.defineProperty({__proto__:null,ChatApi:ze,default:ze},Symbol.toStringTag,{value:"Module"}));function ko(n,t){const o=new ze(n);let a=null;const r=n.user.username,u=e.ref(n.user.avatar||`https://api.dicebear.com/7.x/avataaars/svg?seed=${r}`),C=e.ref({username:r,nickname:n.user.nickname||"",email:n.user.email||"",phone:n.user.phone||"",bio:n.user.bio||""}),V=e.ref(!1),f=e.ref(""),g=e.ref(""),l=e.ref(null),c=_=>qe(_).format("HH:mm"),w=_=>{if(!_)return"";const A=qe(),z=qe(_);return A.isSame(z,"day")?z.format("HH:mm"):A.diff(z,"day")===1?"昨天":A.diff(z,"day")<7?["周日","周一","周二","周三","周四","周五","周六"][z.day()]:z.format("MM/DD")},B=_=>{if(!_)return!1;const A=["jpg","jpeg","png","gif","bmp","webp","svg"],z=_.split(".").pop().toLowerCase();return A.includes(z)},y=_=>{if(!_)return"default";const A=_.split(".").pop().toLowerCase();return["xls","xlsx"].includes(A)?"excel":["pdf"].includes(A)?"pdf":["doc","docx"].includes(A)?"docx":"default"},N=()=>{e.nextTick(()=>{l.value&&(l.value.scrollTop=l.value.scrollHeight)})},R=_=>{try{try{const z=JSON.parse(_);if(z.to||z.toGroupId||z.msg)return{to:z.to,toGroupId:z.toGroupId,from:z.from,content:z.msg,type:z.type||"text",fileUrl:z.fileUrl||"",fileName:z.fileName||"",fileSize:z.fileSize||0}}catch{}const A=_.match(/^\[(.+?)\]:(.+)$/);if(A)return{username:A[1],content:A[2],type:"text"}}catch(A){console.error("[VueChatKit] 解析消息失败",A)}return null},j=_=>{const A=`${n.api.websocketUrl}?userId=${r}`;a=new bt(r,{wsUrl:A,maxReconnectAttempts:n.websocket.maxReconnectAttempts,reconnectDelay:n.websocket.reconnectDelay}),a.on("message",_),a.connect()},E=()=>{a&&(a.close(),a=null)},Z=()=>a,ne=async()=>{try{const _=await o.getUserAvatar(r);_.code===200&&_.data&&(u.value=`${n.api.baseUrl}${_.data}`)}catch(_){console.warn("[VueChatKit] 加载头像失败",_)}},ee=_=>{u.value=_},J=async _=>{try{return(await o.updateUserInfo(r,_)).code===200?(C.value={...C.value,..._},!0):!1}catch(A){return console.error("[VueChatKit] 更新用户信息失败",A),!1}};return ne(),{api:o,config:n,myUsername:r,myAvatar:u,userInfo:C,loadingUserInfo:V,searchText:f,inputText:g,messagesContainer:l,formatTime:c,formatLastTime:w,isImageFile:B,getFileIconType:y,scrollToBottom:N,parseWsMessage:R,initWebSocket:j,closeWebSocket:E,getSocket:Z,initUserAvatar:ne,updateMyAvatar:ee,updateUserInfo:J}}function yo(n){const{api:t,myUsername:o,myAvatar:a,config:r,scrollToBottom:u,getSocket:C}=n,V=e.ref([]),f=e.ref([]),g=e.ref([]),l=e.ref(""),c=e.ref(!1),w=e.ref(""),B=e.ref([]),y=e.ref(!1),N=e.ref([]),R=e.ref(!1),j=e.computed(()=>{let m=f.value;if(n.searchText.value){const k=n.searchText.value.toLowerCase();m=m.filter($=>{var G;return(G=$.username)==null?void 0:G.toLowerCase().includes(k)})}return m.map(k=>({id:k.username,name:k.username,avatar:k.avatar?`${r.api.baseUrl}${k.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${k.username}`,online:k.online,lastMsg:k.lastMsg||"暂无消息",lastTime:k.lastTime,unread:k.unReadNum||0}))}),E=e.computed(()=>{let m=V.value;if(n.searchText.value){const k=n.searchText.value.toLowerCase();m=m.filter($=>{var G;return(G=$.username)==null?void 0:G.toLowerCase().includes(k)})}return m.map(k=>({id:k.username,name:k.username,avatar:k.avatar?`${r.api.baseUrl}${k.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${k.username}`,online:k.online,isChatting:k.isChatting}))}),Z=e.computed(()=>B.value),ne=e.computed(()=>j.value.find(m=>m.id===l.value)||null),ee=e.computed(()=>g.value.map(m=>{const k=m.type==="file"||m.fileUrl||m.fileName,$=m.fileName||m.msgContent;let G="";if(m.sendUsername!==o){const D=V.value.find(X=>X.username===m.sendUsername);G=D!=null&&D.avatar?`${r.api.baseUrl}${D.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${m.sendUsername}`}else G=a.value;return{text:m.msgContent,isSelf:m.sendUsername===o,time:m.createTime,sendUsername:m.sendUsername,avatar:G,type:k?"file":"text",fileType:n.isImageFile($)?"image":n.getFileIconType($),fileUrl:m.fileUrl||"",fileName:$,fileSize:m.fileSize||0}})),J=async()=>{try{const k=(await t.getFriends(o)).data||[];V.value=k,console.log("[VueChatKit] 获取到的好友列表:",V.value),console.log("[VueChatKit] 所有好友的 isChatting:",V.value.map($=>({username:$.username,isChatting:$.isChatting}))),f.value=k.filter($=>$.isChatting===1),console.log("[VueChatKit] 正在聊天的好友列表:",f.value)}catch(m){console.error("[VueChatKit] 获取好友列表失败",m)}},_=async m=>{try{const k=await t.getHistory(o,m);g.value=k.data||[],u()}catch(k){console.error("[VueChatKit] 获取聊天历史失败",k)}},A=async m=>{try{await t.setRead(o,m),J()}catch(k){console.error("[VueChatKit] 标记已读失败",k)}},z=async m=>{l.value=m.id,await _(m.id),await A(m.id),u()},le=async(m,k=1)=>{try{return await t.setChatStatus(o,m,k),await J(),!0}catch($){return console.error("[VueChatKit] 设置聊天状态失败",$),!1}},Ve=()=>{const m=C();if(!n.inputText.value.trim()||!l.value||!m)return;if(m.send(l.value,n.inputText.value.trim(),"text")){const $={msgContent:n.inputText.value.trim(),sendUsername:o,receiveUsername:l.value,createTime:new Date,isRead:0,type:"text"};g.value.push($),n.inputText.value="",u(),setTimeout(()=>{_(l.value),J()},300)}},v=async m=>{const k=C();if(!l.value||!k)return!1;try{const $=await t.uploadFile(m);if($.code===200&&$.data){const{fileUrl:G,fileName:D}=$.data;if(k.send(l.value,D,"file",G,D,m.size)){const q={msgContent:D,sendUsername:o,receiveUsername:l.value,createTime:new Date,isRead:0,type:"file",fileUrl:G,fileName:D,fileSize:m.size};return g.value.push(q),u(),!0}}return!1}catch($){return console.error("[VueChatKit] 发送文件失败",$),!1}},b=async(m,k)=>{const $=C();if(!(!l.value||!$)){if(k&&k.trim()&&$.send(l.value,k.trim(),"text")){const D={msgContent:k.trim(),sendUsername:o,receiveUsername:l.value,createTime:new Date,isRead:0,type:"text"};g.value.push(D)}for(const G of m){const D=G.file||G;await v(D)}setTimeout(()=>{_(l.value),J()},300)}},x=m=>{const k={content:m.content,username:m.username||m.from||l.value,type:m.type||"text",fileUrl:m.fileUrl||"",fileName:m.fileName||"",fileSize:m.fileSize||0,timestamp:new Date};if(l.value){try{let $={msgContent:m.content,sendUsername:k.username,receiveUsername:o,createTime:new Date,isRead:0,type:m.type||"text",fileUrl:m.fileUrl||"",fileName:m.fileName||"",fileSize:m.fileSize||0};g.value.push($),u()}catch($){console.error("[VueChatKit] 添加临时消息失败",$)}_(l.value)}J()},H=(m,k)=>{const $=V.value.find(G=>G.username===m);$&&($.online=k)},W=async()=>{c.value=!0,w.value="",B.value=[]},K=async(m="")=>{y.value=!0;try{let k;m?k=await t.searchUser(m):k=await t.getAvailableUsers(o),B.value=(k==null?void 0:k.data)||[]}catch(k){console.error("[VueChatKit] 获取可用用户失败",k)}finally{y.value=!1}},S=async m=>{try{await t.addFriend(o,m.username),await J(),c.value=!1}catch(k){console.error("[VueChatKit] 添加好友失败",k)}},I=async()=>{R.value=!0;try{const m=await t.getApplyList(o);N.value=m.data||[]}catch(m){console.error("[VueChatKit] 获取好友申请列表失败",m)}finally{R.value=!1}},O=async m=>{try{await t.agreeFriend(m,o),await I(),await J()}catch(k){console.error("[VueChatKit] 同意好友申请失败",k)}},Y=()=>{l.value="",g.value=[]};return e.watch(w,async m=>{await K(m)}),{friendList:V,chatList:f,chatMsgList:g,currentSelectName:l,filteredUsers:j,filteredFriendList:E,filteredAvailableUsers:Z,currentUser:ne,currentMessages:ee,addFriendDialogVisible:c,addFriendSearchText:w,availableUsers:B,loadingAvailableUsers:y,friendApplyList:N,loadingFriendApply:R,getFriendList:J,getChatHistory:_,markAsRead:A,selectUser:z,setFriendToChatStatus:le,sendMessage:Ve,sendFile:v,sendFilesAndText:b,handleFriendWsMessage:x,handleFriendStatusChange:H,openAddFriendDialog:W,loadAvailableUsers:K,addFriend:S,loadFriendApplyList:I,agreeFriend:O,resetFriendChat:Y}}function Co(n){const{api:t,myUsername:o,myAvatar:a,config:r,scrollToBottom:u,getSocket:C}=n,V=e.ref("friends"),f=e.ref([]),g=e.ref([]),l=e.ref(null),c=e.ref([]),w=e.ref([]),B=e.ref({}),y=e.ref(!1),N=e.ref(!1),R=e.ref(""),j=e.ref(""),E=e.ref([]),Z=e.ref(!1),ne=e.ref([]),ee=e.ref(!1),J=e.ref(!1),_=e.ref({groupNickname:"",remark:"",notice:""}),A=e.ref({targetUsername:"",memberNick:""}),z=e.ref(!1),le=e.ref(!1),Ve=e.ref({readUserList:[],unreadUserList:[]}),v=e.ref(null),b=e.ref({groupNickname:!1,remark:!1,notice:!1}),x=e.ref({groupNickname:"",remark:"",notice:""}),H=e.computed(()=>{var i;if(console.log("[VueChatKit] 检查是否群主:",{myUsername:o,groupMemberCount:(i=w.value)==null?void 0:i.length}),!l.value)return console.log("[VueChatKit] 没有选择群"),!1;if(w.value&&w.value.length>0){const p=w.value.find(U=>U.username===o);if(console.log("[VueChatKit] 当前用户在群成员:",p),p){if(p.memberType===0)return console.log("[VueChatKit] ✅ 当前用户是群主 (memberType=0)"),!0;console.log("[VueChatKit] 当前用户 memberType:",p.memberType)}}return l.value.ownerUsername===o||l.value.owner===o?(console.log("[VueChatKit] ✅ 通过群 owner 字段判断是群主"),!0):(console.log("[VueChatKit] ❌ 当前用户不是群主"),!1)}),W=e.computed(()=>{if(!l.value)return"";if(l.value.ownerUsername)return l.value.ownerUsername;if(l.value.owner)return l.value.owner;if(w.value.length>0){const i=w.value.find(p=>p.memberType===0);if(i)return i.username}return""}),K=e.computed(()=>{let i=f.value;if(n.searchText.value){const p=n.searchText.value.toLowerCase();i=i.filter(U=>U.groupName&&U.groupName.toLowerCase().includes(p)||U.remark&&U.remark.toLowerCase().includes(p))}return i.map(p=>{const U=(p.groupAvatarList||[]).map((nt,ot)=>({username:`member-${ot}`,avatar:`${r.api.baseUrl}${nt}`})).slice(0,4),Q=p.lastMsgContent||"暂无消息",ae=p.lastMsgSender||"",Se=p.unreadCount||0,be=p.lastMsgTime;return{id:p.groupId,groupId:p.groupId,name:p.groupName,remark:p.remark,owner:p.ownerUsername,avatar:`https://api.dicebear.com/7.x/avataaars/svg?seed=${p.groupId}`,memberAvatars:U,lastMsg:Q,lastMsgSender:ae,lastTime:be,unread:Se,memberCount:p.memberTotal||0,notice:p.notice,groupNickname:p.groupNickname}})}),S=e.computed(()=>c.value.map(i=>{const p=i.type==="file"||i.fileUrl||i.fileName,U=i.fileName||i.msgContent,Q=w.value.find(be=>be.username===i.sendUsername),ae=(Q==null?void 0:Q.memberNick)||i.sendUsername,Se=Q!=null&&Q.avatar?`${r.api.baseUrl}${Q.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${i.sendUsername}`;return{text:i.msgContent,isSelf:i.sendUsername===o,time:i.createTime,sendUsername:i.sendUsername,displayName:ae,avatar:Se,type:p?"file":"text",fileType:n.isImageFile(U)?"image":n.getFileIconType(U),fileUrl:i.fileUrl||"",fileName:U,fileSize:i.fileSize||0}})),I=async()=>{try{const i=await t.getMyGroups(o);f.value=i.data||[],console.log("[VueChatKit] 获取到的群聊列表:",f.value),console.log("[VueChatKit] 所有群聊的 groupChatStatus:",f.value.map(p=>({groupId:p.groupId,groupName:p.groupName,groupChatStatus:p.groupChatStatus}))),g.value=f.value.filter(p=>p.groupChatStatus===1),console.log("[VueChatKit] 正在聊天的群聊列表:",g.value)}catch(i){console.error("[VueChatKit] 获取群聊列表失败",i)}},O=async i=>{if(!B.value[i])try{const p=await t.getGroupMembers(i,o);B.value[i]=p.data||[]}catch(p){console.error(`[VueChatKit] 获取群 ${i} 成员失败`,p),B.value[i]=[]}},Y=async(i,p=1)=>{try{return await t.setGroupChatStatus(i,o,p),await I(),!0}catch(U){return console.error("[VueChatKit] 设置群聊状态失败",U),!1}},m=async i=>{try{const p=await t.getGroupHistory(i,o);c.value=p.data||[],u()}catch(p){console.error("[VueChatKit] 获取群聊历史失败",p)}},k=async i=>{try{const p=await t.getGroupMembers(i,o);w.value=p.data||[]}catch(p){console.error("[VueChatKit] 获取群成员失败",p)}},$=async i=>{await he(i.groupId),await I(),l.value=i,await O(i.groupId),await m(i.groupId),w.value=B.value[i.groupId]||[],u()},G=async i=>{try{return(await t.getGroupUnreadCount(i,o)).data||0}catch(p){return console.error("[VueChatKit] 获取群未读数失败",p),0}},D=async(i,p)=>{try{const U=await t.getMsgReadUserList(i,p,o);Ve.value=U.data||{readUserList:[],unreadUserList:[]},le.value=!0}catch(U){console.error("[VueChatKit] 获取消息已读成员失败",U)}},X=async i=>{try{const p=await t.getGroupInfo(i,o);p.code===200&&p.data&&(v.value=p.data,x.value={groupNickname:p.data.groupNickname||p.data.groupName||"",remark:p.data.remark||"",notice:p.data.notice||""})}catch(p){console.error("[VueChatKit] 获取群详情失败",p)}},q=async i=>{if(!l.value||!v.value)return!1;try{const p={groupId:l.value.groupId,currentUser:o,groupNickname:i==="groupNickname"?x.value.groupNickname:v.value.groupNickname,remark:i==="remark"?x.value.remark:v.value.remark,notice:i==="notice"?x.value.notice:v.value.notice};return(await t._updateGroupInfo(p.groupId,p.currentUser,p.groupNickname,p.remark,p.notice)).code===200?(await X(l.value.groupId),await I(),!0):!1}catch(p){return console.error("[VueChatKit] 修改群信息失败",p),!1}},ie=async i=>{!v.value&&l.value&&await X(l.value.groupId),v.value&&(x.value[i]=v.value[i]||""),b.value[i]=!0},Ce=i=>{b.value[i]=!1,v.value&&(x.value[i]=v.value[i]||"")},ge=async i=>{const p=await q(i);return p&&(b.value[i]=!1),p},Ue=async()=>{if(!l.value)return!1;try{return(await t.updateGroupInfo(l.value.groupId,o,_.value.groupNickname,_.value.remark,_.value.notice)).code===200?(ee.value=!1,await I(),l.value&&await X(l.value.groupId),!0):!1}catch(i){return console.error("[VueChatKit] 修改群信息失败",i),!1}},we=async()=>{if(!l.value)return!1;try{return(await t.updateMemberNick(l.value.groupId,o,A.value.targetUsername,A.value.memberNick)).code===200?(z.value=!1,await k(l.value.groupId),!0):!1}catch(i){return console.error("[VueChatKit] 修改群成员昵称失败",i),!1}},Be=async()=>{if(!l.value)return!1;try{return(await t.deleteGroup(l.value.groupId,o)).code===200?(l.value=null,c.value=[],N.value=!1,await I(),!0):!1}catch(i){return console.error("[VueChatKit] 解散群聊失败",i),!1}},Le=async i=>{if(!l.value)return!1;try{console.log("[VueChatKit] 开始移除成员:",i);const p=await t.removeGroupMember(l.value.groupId,o,i);return p.code===200?(console.log("[VueChatKit] 移除成员成功,刷新成员列表"),await k(l.value.groupId),J.value&&(J.value=!1),!0):(console.warn("[VueChatKit] 移除成员失败,返回结果:",p),!1)}catch(p){return console.error("[VueChatKit] 移除成员异常",p),!1}},xe=async i=>{if(!l.value)return!1;try{return(await t.transferGroupOwner(l.value.groupId,o,i)).code===200?(await k(l.value.groupId),!0):!1}catch(p){return console.error("[VueChatKit] 转让群主失败",p),!1}},Ie=async i=>{if(!l.value)return!1;try{return(await t.readSingleGroupMsg(l.value.groupId,o,i)).code===200}catch(p){return console.error("[VueChatKit] 标记消息已读失败",p),!1}},he=async i=>{var U;const p=i||((U=l.value)==null?void 0:U.groupId);if(!p)return!1;try{return(await t.readAllGroupMsg(p,o)).code===200}catch(Q){return console.error("[VueChatKit] 标记全部已读失败",Q),!1}},Qe=()=>{l.value&&(_.value={groupNickname:l.value.name||"",remark:l.value.remark||"",notice:l.value.notice||""},ee.value=!0)},Je=i=>{A.value={targetUsername:i.username,memberNick:i.memberNick||""},z.value=!0},Re=async()=>{if(!R.value.trim())return console.warn("[VueChatKit] 请输入群名称"),!1;try{const i=await t.createGroup({groupName:R.value.trim(),remark:j.value.trim(),ownerUsername:o});if(i.code===200&&i.data){if(E.value.length>0){const p=E.value.map(U=>U.id);await t.inviteGroupMembers(i.data.groupId||i.data,o,p)}return R.value="",j.value="",E.value=[],y.value=!1,await I(),!0}return!1}catch(i){return console.error("[VueChatKit] 创建群聊失败",i),!1}},ve=async()=>{if(!l.value||ne.value.length===0)return!1;try{const i=ne.value.map(p=>p.id);return await t.inviteGroupMembers(l.value.groupId,o,i),ne.value=[],Z.value=!1,await k(l.value.groupId),!0}catch(i){return console.error("[VueChatKit] 邀请成员失败",i),!1}},et=async()=>{if(!l.value)return!1;try{return await t.quitGroup(l.value.groupId,o),l.value=null,c.value=[],N.value=!1,await I(),!0}catch(i){return console.error("[VueChatKit] 退出群聊失败",i),!1}},Tt=()=>{const i=C();if(!n.inputText.value.trim()||!l.value||!i)return;if(i.send(l.value.groupId,n.inputText.value.trim(),"text","","",0,!0)){const U={msgContent:n.inputText.value.trim(),sendUsername:o,toGroupId:l.value.groupId,createTime:new Date,isRead:0,type:"text"};c.value.push(U),n.inputText.value="",u(),setTimeout(()=>{m(l.value.groupId),I()},300)}},je=async i=>{const p=C();if(!l.value||!p)return!1;try{const U=await t.uploadFile(i);if(U.code===200&&U.data){const{fileUrl:Q,fileName:ae}=U.data;if(p.send(l.value.groupId,ae,"file",Q,ae,i.size,!0)){const be={msgContent:ae,sendUsername:o,toGroupId:l.value.groupId,createTime:new Date,isRead:0,type:"file",fileUrl:Q,fileName:ae,fileSize:i.size};return c.value.push(be),u(),!0}}return!1}catch(U){return console.error("[VueChatKit] 发送群聊文件失败",U),!1}};return{activeTab:V,groupList:f,chatList:g,currentSelectGroup:l,groupMsgList:c,groupMemberList:w,groupMembersMap:B,createGroupDialogVisible:y,groupDetailVisible:N,newGroupName:R,newGroupRemark:j,selectedMembersForCreate:E,inviteMemberDialogVisible:Z,selectedMembersForInvite:ne,groupInfoVisible:ee,isRemoveMemberMode:J,editingGroupInfo:_,editingMemberNick:A,memberNickDialogVisible:z,msgReadUserDialogVisible:le,currentMsgReadList:Ve,currentGroupInfo:v,editingFields:b,tempEditValues:x,filteredGroupList:K,currentGroupMessages:S,isGroupOwner:H,groupOwnerUsername:W,getGroupList:I,getGroupHistory:m,getGroupMembers:k,selectGroup:$,createGroup:Re,inviteGroupMember:ve,quitGroup:et,sendGroupMessage:Tt,sendGroupFile:je,sendGroupFilesAndText:async(i,p)=>{const U=C();if(!(!l.value||!U)){if(p&&p.trim()&&U.send(l.value.groupId,p.trim(),"text","","",0,!0)){const ae={msgContent:p.trim(),sendUsername:o,toGroupId:l.value.groupId,createTime:new Date,isRead:0,type:"text"};c.value.push(ae)}for(const Q of i){const ae=Q.file||Q;await je(ae)}setTimeout(()=>{m(l.value.groupId),I()},300)}},handleGroupWsMessage:i=>{if(l.value&&l.value.groupId===i.toGroupId){try{let p={msgContent:i.content,sendUsername:i.from||"未知用户",toGroupId:i.toGroupId,createTime:new Date,isRead:0,type:i.type||"text",fileUrl:i.fileUrl||"",fileName:i.fileName||"",fileSize:i.fileSize||0};c.value.push(p),u()}catch(p){console.error("[VueChatKit] 添加临时群聊消息失败",p)}m(i.toGroupId)}I()},switchTab:i=>{V.value=i,i==="groups"&&I()},resetGroupChat:()=>{l.value=null,c.value=[]},getGroupUnreadCount:G,getMsgReadUserList:D,updateGroupInfo:Ue,updateMemberNick:we,deleteGroup:Be,removeGroupMember:Le,transferGroupOwner:xe,readSingleGroupMsg:Ie,readAllGroupMsg:he,openEditGroupInfo:Qe,openEditMemberNick:Je,fetchGroupDetail:X,updateSingleGroupField:q,startEditField:ie,cancelEditField:Ce,saveEditField:ge,setGroupToChatStatus:Y,ensureGroupMembers:O}}function Et(n,t){const o=ko(n),a=yo(o),r=Co(o),u=e.computed(()=>r.currentSelectGroup.value?{type:"group",data:r.currentSelectGroup.value}:a.currentSelectName.value&&a.currentUser.value?{type:"friend",data:a.currentUser.value}:null),C=e.computed(()=>r.currentSelectGroup.value?r.currentGroupMessages.value:a.currentMessages.value),V=R=>{if(R.includes("【状态变更】")){const E=/【状态变更】(.+?) 已(上线|下线)/,Z=R.match(E);if(Z){const ne=Z[1],ee=Z[2]==="上线";a.handleFriendStatusChange(ne,ee)}return}const j=o.parseWsMessage(R);j&&(j.toGroupId?r.handleGroupWsMessage(j):a.handleFriendWsMessage(j),t&&typeof t=="function"&&t({...j,isGroup:!!j.toGroupId}))};return{...o,initWebSocket:()=>{o.initWebSocket(V)},...a,selectUser:async R=>{r.resetGroupChat(),await a.selectUser(R)},...r,selectGroup:async R=>{a.resetFriendChat(),await r.selectGroup(R)},currentChatTarget:u,currentAllMessages:C,switchTab:R=>{r.switchTab(R),R==="apply"&&a.loadFriendApplyList()},sendMessage:()=>{r.currentSelectGroup.value?r.sendGroupMessage():a.currentSelectName.value&&a.sendMessage()},sendFile:async R=>r.currentSelectGroup.value?await r.sendGroupFile(R):a.currentSelectName.value?await a.sendFile(R):!1,sendFilesAndText:async(R,j)=>{r.currentSelectGroup.value?await r.sendGroupFilesAndText(R,j):a.currentSelectName.value&&await a.sendFilesAndText(R,j)},reset:()=>{a.resetFriendChat(),r.resetGroupChat(),o.inputText.value="",o.searchText.value=""}}}const oe={LIGHT:"light",DARK:"dark",AUTO:"auto"},$e=oe.LIGHT,$t=[{value:oe.LIGHT,label:"浅色",icon:"sun"},{value:oe.DARK,label:"深色",icon:"moon"},{value:oe.AUTO,label:"跟随系统",icon:"monitor"}],Xe="vck-theme";function wo(){return typeof window<"u"&&window.matchMedia?window.matchMedia("(prefers-color-scheme: dark)").matches?oe.DARK:oe.LIGHT:$e}function Bt(n){typeof document<"u"&&document.documentElement.setAttribute("data-theme",n)}function Vo(n){typeof localStorage<"u"&&localStorage.setItem(Xe,n)}function bo(){return typeof localStorage<"u"?localStorage.getItem(Xe):null}function xt(){const n=e.ref($e),t=e.ref($e),o=e.computed(()=>t.value===oe.LIGHT),a=e.computed(()=>t.value===oe.DARK);let r=null;function u(f){const g=Object.values(oe).includes(f)?f:$e;n.value=g,g===oe.AUTO?t.value=wo():t.value=g,Bt(t.value),Vo(g)}function C(f){n.value===oe.AUTO&&(t.value=f.matches?oe.DARK:oe.LIGHT,Bt(t.value))}function V(){const f=bo();u(f||$e),typeof window<"u"&&window.matchMedia&&(r=window.matchMedia("(prefers-color-scheme: dark)"),r.addEventListener("change",C))}return e.onMounted(()=>{V()}),e.onUnmounted(()=>{r&&r.removeEventListener("change",C)}),{currentTheme:n,appliedTheme:t,isLight:o,isDark:a,setTheme:u,THEMES:oe}}const No={key:0,class:"vc-dialog__header"},Eo={key:0,class:"vc-dialog__title"},$o={key:1,class:"vc-dialog__title"},Bo={class:"vc-dialog__body"},xo={key:1,class:"vc-dialog__footer"},pe=M({__name:"Dialog",props:{modelValue:{type:Boolean,default:!1},title:{type:String,default:""},width:{type:[String,Number],default:"50%"},top:{type:[String,Number],default:"15vh"},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0}},emits:["update:modelValue","close"],setup(n,{emit:t}){const o=n,a=t,r=e.computed({get:()=>o.modelValue,set:f=>a("update:modelValue",f)}),u=e.computed(()=>({width:typeof o.width=="number"?`${o.width}px`:o.width,marginTop:typeof o.top=="number"?`${o.top}px`:o.top})),C=()=>{r.value=!1,a("close")},V=()=>{o.closeOnClickModal&&C()};return(f,g)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[e.createVNode(e.Transition,{name:"vc-dialog-fade"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vc-dialog__wrapper",onClick:e.withModifiers(V,["self"])},[e.createVNode(e.Transition,{name:"vc-dialog-zoom"},{default:e.withCtx(()=>[r.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"vc-dialog",style:e.normalizeStyle(u.value)},[n.showClose||f.$slots.header?(e.openBlock(),e.createElementBlock("div",No,[f.$slots.header?(e.openBlock(),e.createElementBlock("span",Eo,[e.renderSlot(f.$slots,"header",{},()=>[e.createTextVNode(e.toDisplayString(n.title),1)],!0)])):n.title?(e.openBlock(),e.createElementBlock("span",$o,e.toDisplayString(n.title),1)):e.createCommentVNode("",!0),n.showClose?(e.openBlock(),e.createElementBlock("button",{key:2,type:"button",class:"vc-dialog__headerbtn",onClick:C},[...g[0]||(g[0]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",class:"vc-dialog__close"},[e.createElementVNode("path",{d:"M6 6L18 18M18 6L6 18",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"})],-1)])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("div",Bo,[e.renderSlot(f.$slots,"default",{},void 0,!0)]),f.$slots.footer?(e.openBlock(),e.createElementBlock("div",xo,[e.renderSlot(f.$slots,"footer",{},void 0,!0)])):e.createCommentVNode("",!0)],4)):e.createCommentVNode("",!0)]),_:3})])):e.createCommentVNode("",!0)]),_:3})]))}},[["__scopeId","data-v-60c01fa3"]]),So=["disabled"],Mo={key:0,class:"vc-button__loading-icon"},_o={key:1,class:"vc-button__icon"},Go={key:2,class:"vc-button__text"},L=M({__name:"Button",props:{type:{type:String,default:"default",validator:n=>["default","primary","success","warning","danger","link"].includes(n)},size:{type:String,default:"default",validator:n=>["small","default","large"].includes(n)},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["click"],setup(n,{emit:t}){const o=n,a=t,r=u=>{!o.disabled&&!o.loading&&a("click",u)};return(u,C)=>(e.openBlock(),e.createElementBlock("button",{class:e.normalizeClass(["vc-button",`vc-button--${n.type}`,`vc-button--${n.size}`,{"vc-button--disabled":n.disabled||n.loading,"vc-button--loading":n.loading}]),disabled:n.disabled||n.loading,onClick:r},[n.loading?(e.openBlock(),e.createElementBlock("span",Mo,[...C[0]||(C[0]=[e.createElementVNode("svg",{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("path",{d:"M12 2C6.48 2 2 6.48 2 12C2 17.52 6.48 22 12 22C17.52 22 22 17.52 22 12C22 10.84 21.78 9.73 21.37 8.72C21.12 8.14 21.41 7.44 21.99 7.19C22.57 6.94 23.27 7.23 23.52 7.81C24.15 9.26 24.5 10.86 24.5 12.5C24.5 19.07 19.07 24.5 12.5 24.5C5.93 24.5 0.5 19.07 0.5 12.5C0.5 5.93 5.93 0.5 12.5 0.5",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round"})],-1)])])):e.createCommentVNode("",!0),u.$slots.icon?(e.openBlock(),e.createElementBlock("span",_o,[e.renderSlot(u.$slots,"icon",{},void 0,!0)])):e.createCommentVNode("",!0),u.$slots.default?(e.openBlock(),e.createElementBlock("span",Go,[e.renderSlot(u.$slots,"default",{},void 0,!0)])):e.createCommentVNode("",!0)],10,So))}},[["__scopeId","data-v-8093b789"]]),To={class:"vc-message-box"},Uo={key:0,class:"vc-message-box__content"},Lo={key:1,class:"vc-message-box__input"},Io=M({__name:"MessageBox",props:{title:{type:String,default:"提示"},message:{type:String,default:""},showClose:{type:Boolean,default:!0},showCancelButton:{type:Boolean,default:!0},showConfirmButton:{type:Boolean,default:!0},cancelButtonText:{type:String,default:"取消"},confirmButtonText:{type:String,default:"确定"},closeOnClickModal:{type:Boolean,default:!0},width:{type:[String,Number],default:"420px"}},emits:["confirm","cancel","close","update:modelValue"],setup(n,{expose:t,emit:o}){const a=o,r=e.ref(!1),u=e.ref(!1);let C=null,V=null;const f=()=>(r.value=!0,new Promise((y,N)=>{C=y,V=N})),g=()=>{r.value=!1,u.value=!1},l=y=>{r.value=y,y||(a("update:modelValue",y),a("close"))},c=()=>{r.value=!1,a("close"),V&&V("cancel")},w=()=>{r.value=!1,a("cancel"),V&&V("cancel")},B=()=>{u.value=!0,a("confirm"),C&&C("confirm"),setTimeout(()=>{r.value=!1,u.value=!1},300)};return t({open:f,close:g}),(y,N)=>(e.openBlock(),e.createBlock(pe,{"model-value":r.value,title:n.title,width:n.width,"show-close":n.showClose,"close-on-click-modal":n.closeOnClickModal,onClose:c,"onUpdate:modelValue":l},{footer:e.withCtx(()=>[n.showCancelButton?(e.openBlock(),e.createBlock(L,{key:0,onClick:w},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.cancelButtonText),1)]),_:1})):e.createCommentVNode("",!0),n.showConfirmButton?(e.openBlock(),e.createBlock(L,{key:1,type:"primary",onClick:B,loading:u.value},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(n.confirmButtonText),1)]),_:1},8,["loading"])):e.createCommentVNode("",!0)]),default:e.withCtx(()=>[e.createElementVNode("div",To,[y.$slots.default||n.message?(e.openBlock(),e.createElementBlock("div",Uo,[e.renderSlot(y.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(n.message),1)],!0)])):e.createCommentVNode("",!0),y.$slots.input?(e.openBlock(),e.createElementBlock("div",Lo,[e.renderSlot(y.$slots,"input",{},void 0,!0)])):e.createCommentVNode("",!0)])]),_:3},8,["model-value","title","width","show-close","close-on-click-modal"]))}},[["__scopeId","data-v-0f7519a2"]]),Pe=n=>{const{title:t="提示",message:o="",showCancelButton:a=!0,showConfirmButton:r=!0,cancelButtonText:u="取消",confirmButtonText:C="确定",closeOnClickModal:V=!0,width:f="420px"}=n,g=document.createElement("div");document.body.appendChild(g);const l=e.h(Io,{title:t,message:o,showCancelButton:a,showConfirmButton:r,cancelButtonText:u,confirmButtonText:C,closeOnClickModal:V,width:f,modelValue:!1,onConfirm:()=>{},onCancel:()=>{},onClose:()=>{}});e.render(l,g);const c=l.component,w=()=>{c.exposed&&c.exposed.close(),setTimeout(()=>{e.render(null,g),document.body.removeChild(g)},300)};return new Promise((B,y)=>{c.props.onConfirm=()=>{B("confirm"),w()},c.props.onCancel=()=>{y("cancel"),w()},c.props.onClose=()=>{y("close"),w()},e.nextTick(()=>{c.exposed&&c.exposed.open().catch(N=>{N!=="cancel"&&N!=="close"&&console.error(N)})})})},Fo=()=>({alert:(n,t="提示")=>Pe({message:n,title:t,showCancelButton:!1}),confirm:(n,t="提示",o={})=>Pe({message:n,title:t,...o}),prompt:(n,t="提示",o={})=>Pe({message:n,title:t,...o})}),Ao={key:0,class:"vc-input__prefix"},Do=["type","value","placeholder","disabled","maxlength"],zo=["value","placeholder","disabled","maxlength","rows"],Ro={key:3,class:"vc-input__suffix"},re=M({__name:"Input",props:{modelValue:{type:[String,Number],default:""},type:{type:String,default:"text",validator:n=>["text","password","email","number","textarea"].includes(n)},placeholder:{type:String,default:""},disabled:{type:Boolean,default:!1},maxlength:{type:Number,default:null},rows:{type:Number,default:3}},emits:["update:modelValue","input","focus","blur","keyup"],setup(n,{expose:t,emit:o}){const a=o,r=e.ref(null),u=e.ref(null),C=e.ref(!1),V=w=>{const B=w.target.value;a("update:modelValue",B),a("input",B)},f=w=>{C.value=!0,a("focus",w)},g=w=>{C.value=!1,a("blur",w)},l=w=>{a("keyup",w)};return t({focus:()=>{r.value&&r.value.focus(),u.value&&u.value.focus()}}),(w,B)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vc-input",{"vc-input--focus":C.value}])},[w.$slots.prefix?(e.openBlock(),e.createElementBlock("span",Ao,[e.renderSlot(w.$slots,"prefix",{},void 0,!0)])):e.createCommentVNode("",!0),n.type!=="textarea"?(e.openBlock(),e.createElementBlock("input",{key:1,ref_key:"inputRef",ref:r,type:n.type,value:n.modelValue,placeholder:n.placeholder,disabled:n.disabled,maxlength:n.maxlength,onInput:V,onFocus:f,onBlur:g,onKeyup:l,class:"vc-input__inner"},null,40,Do)):(e.openBlock(),e.createElementBlock("textarea",{key:2,ref_key:"textareaRef",ref:u,value:n.modelValue,placeholder:n.placeholder,disabled:n.disabled,maxlength:n.maxlength,rows:n.rows,onInput:V,onFocus:f,onBlur:g,class:"vc-input__inner"},null,40,zo)),w.$slots.suffix?(e.openBlock(),e.createElementBlock("span",Ro,[e.renderSlot(w.$slots,"suffix",{},void 0,!0)])):e.createCommentVNode("",!0)],2))}},[["__scopeId","data-v-588f24d5"]]),jo={class:"vc-empty"},Ho={key:0,class:"vc-empty__image"},Ko={key:1,class:"vc-empty__image"},Oo={key:2,class:"vc-empty__description"},Wo={key:3,class:"vc-empty__description"},qo={key:4,class:"vc-empty__bottom"},ue=M({__name:"Empty",props:{description:{type:String,default:"暂无数据"}},setup(n){return(t,o)=>(e.openBlock(),e.createElementBlock("div",jo,[t.$slots.image?(e.openBlock(),e.createElementBlock("div",Ho,[e.renderSlot(t.$slots,"image",{},void 0,!0)])):(e.openBlock(),e.createElementBlock("div",Ko,[...o[0]||(o[0]=[e.createElementVNode("svg",{viewBox:"0 0 120 120",fill:"none",xmlns:"http://www.w3.org/2000/svg"},[e.createElementVNode("rect",{x:"10",y:"10",width:"100",height:"80",rx:"8",fill:"var(--vck-bg-panel)",stroke:"var(--vck-border)"}),e.createElementVNode("path",{d:"M30 40H90M30 55H70",stroke:"var(--vck-text-muted)","stroke-width":"2","stroke-linecap":"round"})],-1)])])),t.$slots.default?(e.openBlock(),e.createElementBlock("div",Oo,[e.renderSlot(t.$slots,"default",{},()=>[e.createTextVNode(e.toDisplayString(n.description),1)],!0)])):n.description?(e.openBlock(),e.createElementBlock("div",Wo,e.toDisplayString(n.description),1)):e.createCommentVNode("",!0),t.$slots.bottom?(e.openBlock(),e.createElementBlock("div",qo,[e.renderSlot(t.$slots,"bottom",{},void 0,!0)])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-f693485a"]]),Yo=M({__name:"Switch",props:{modelValue:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(n,{emit:t}){const o=n,a=t,r=()=>{o.disabled||a("update:modelValue",!o.modelValue)};return(u,C)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["vc-switch",{"vc-switch-active":n.modelValue,"vc-switch-disabled":n.disabled}]),onClick:r},[...C[0]||(C[0]=[e.createElementVNode("div",{class:"vc-switch-handle"},null,-1)])],2))}},[["__scopeId","data-v-0dafe255"]]),St=M({__name:"Tag",props:{type:{type:String,default:"default",validator:n=>["default","success","warning","danger","info"].includes(n)},disabled:{type:Boolean,default:!1}},setup(n){return(t,o)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["vc-tag",[`vc-tag--${n.type}`,{"vc-tag--disabled":n.disabled}]])},[e.renderSlot(t.$slots,"default",{},void 0,!0)],2))}},[["__scopeId","data-v-10898ef4"]]),Xo={class:"avatar-crop-container"},Po={key:0,class:"crop-wrapper"},Zo=["src"],Qo=["onMousedown","onTouchstart"],Jo={class:"preview-wrapper"},vo=["width","height"],er={class:"dialog-footer"},Ze=M({__name:"AvatarCrop",props:{modelValue:Boolean,src:{type:String,default:""},dialogWidth:{type:String,default:"520px"},cropAreaHeight:{type:String,default:"288px"},previewSize:{type:Number,default:96},outputSize:{type:Number,default:400},outputType:{type:String,default:"image/jpeg"},outputQuality:{type:Number,default:.9},aspectRatio:{type:Number,default:1},minSize:{type:Number,default:50}},emits:["update:modelValue","confirm","cancel","closed"],setup(n,{expose:t,emit:o}){const a=n,r={error:b=>console.error(b)},u=o,C=e.computed({get:()=>a.modelValue,set:b=>u("update:modelValue",b)}),V=e.computed({get:()=>a.src,set:b=>{}}),f=["nw","n","ne","e","se","s","sw","w"],g=e.ref(!1),l=e.ref(null),c=e.ref(null),w=e.ref(null),B=e.ref({naturalWidth:0,naturalHeight:0,displayWidth:0,displayHeight:0,offsetX:0,offsetY:0}),y=e.ref({x:0,y:0,size:150,minSize:a.minSize}),N=e.computed(()=>({width:`${B.value.displayWidth}px`,height:`${B.value.displayHeight}px`,maxWidth:"none",maxHeight:"none",display:"block"})),R=e.computed(()=>({left:`${y.value.x}px`,top:`${y.value.y}px`,width:`${y.value.size}px`,height:`${y.value.size/a.aspectRatio}px`}));let j=null,E=null;const Z=()=>{e.nextTick(()=>{const b=c.value,x=l.value;if(!b||!x)return;const H=x.clientWidth,W=x.clientHeight,K=b.naturalWidth/b.naturalHeight,S=H/W;let I,O,Y,m;K>S?(I=H,O=H/K,Y=0,m=(W-O)/2):(O=W,I=W*K,Y=(H-I)/2,m=0),B.value={naturalWidth:b.naturalWidth,naturalHeight:b.naturalHeight,displayWidth:I,displayHeight:O,offsetX:Y,offsetY:m};const k=Math.min(I,O)*.6;y.value.size=k,y.value.x=Y+(I-k)/2,y.value.y=m+(O-k/a.aspectRatio)/2,ne()})},ne=()=>{const b=w.value,x=c.value;if(!b||!x)return;const H=b.getContext("2d"),{naturalWidth:W,naturalHeight:K,displayWidth:S,displayHeight:I,offsetX:O,offsetY:Y}=B.value,m=W/S,k=K/I,$=(y.value.x-O)*m,G=(y.value.y-Y)*k,D=y.value.size*m,X=y.value.size/a.aspectRatio*k;H.clearRect(0,0,b.width,b.height),H.drawImage(x,$,G,D,X,0,0,b.width,b.height)},ee=b=>{b.preventDefault();const x=b.clientX||b.touches[0].clientX,H=b.clientY||b.touches[0].clientY;j={startX:x,startY:H,boxX:y.value.x,boxY:y.value.y};const W=S=>{const I=S.clientX||S.touches[0].clientX,O=S.clientY||S.touches[0].clientY,Y=I-j.startX,m=O-j.startY,{offsetX:k,offsetY:$,displayWidth:G,displayHeight:D}=B.value,X=y.value.size/a.aspectRatio,q=Math.max(k,Math.min(k+G-y.value.size,j.boxX+Y)),ie=Math.max($,Math.min($+D-X,j.boxY+m));y.value.x=q,y.value.y=ie,ne()},K=()=>{j=null,document.removeEventListener("mousemove",W),document.removeEventListener("mouseup",K),document.removeEventListener("touchmove",W),document.removeEventListener("touchend",K)};document.addEventListener("mousemove",W),document.addEventListener("mouseup",K),document.addEventListener("touchmove",W,{passive:!1}),document.addEventListener("touchend",K)},J=(b,x)=>{x.preventDefault();const H=x.clientX||x.touches[0].clientX,W=x.clientY||x.touches[0].clientY;E={handle:b,startX:H,startY:W,boxX:y.value.x,boxY:y.value.y,boxSize:y.value.size};const K=I=>{const O=I.clientX||I.touches[0].clientX,Y=I.clientY||I.touches[0].clientY,m=O-E.startX,k=Y-E.startY,{offsetX:$,offsetY:G,displayWidth:D,displayHeight:X}=B.value;let q=E.boxSize,ie=E.boxX,Ce=E.boxY;const ge=E.boxSize/a.aspectRatio;switch(b){case"se":q=Math.max(y.value.minSize,Math.min(D-(E.boxX-$),X-(E.boxY-G),E.boxSize+Math.max(m,k)));break;case"nw":q=Math.max(y.value.minSize,Math.min(E.boxX-$+E.boxSize,E.boxY-G+ge,E.boxSize-Math.max(m,k))),ie=E.boxX+(E.boxSize-q),Ce=E.boxY+(ge-q/a.aspectRatio);break;case"ne":q=Math.max(y.value.minSize,Math.min($+D-E.boxX,E.boxY-G+ge,E.boxSize+Math.max(m,-k))),Ce=E.boxY+(ge-q/a.aspectRatio);break;case"sw":q=Math.max(y.value.minSize,Math.min(E.boxX-$+E.boxSize,G+X-E.boxY,E.boxSize+Math.max(-m,k))),ie=E.boxX+(E.boxSize-q);break;case"n":q=Math.max(y.value.minSize,Math.min(E.boxY-G+ge,E.boxSize-k)),Ce=E.boxY+(ge-q/a.aspectRatio);break;case"s":q=Math.max(y.value.minSize,Math.min(G+X-E.boxY,E.boxSize+k));break;case"w":q=Math.max(y.value.minSize,Math.min(E.boxX-$+E.boxSize,E.boxSize-m)),ie=E.boxX+(E.boxSize-q);break;case"e":q=Math.max(y.value.minSize,Math.min($+D-E.boxX,E.boxSize+m));break}y.value.size=q,y.value.x=ie,y.value.y=Ce,ne()},S=()=>{E=null,document.removeEventListener("mousemove",K),document.removeEventListener("mouseup",S),document.removeEventListener("touchmove",K),document.removeEventListener("touchend",S)};document.addEventListener("mousemove",K),document.addEventListener("mouseup",S),document.addEventListener("touchmove",K,{passive:!1}),document.addEventListener("touchend",S)},_=()=>{const b=document.createElement("canvas"),x=c.value;if(!x)return null;const{naturalWidth:H,naturalHeight:W,displayWidth:K,displayHeight:S,offsetX:I,offsetY:O}=B.value,Y=H/K,m=W/S,k=(y.value.x-I)*Y,$=(y.value.y-O)*m,G=y.value.size*Y,D=y.value.size/a.aspectRatio*m;return b.width=a.outputSize,b.height=a.outputSize/a.aspectRatio,b.getContext("2d").drawImage(x,k,$,G,D,0,0,b.width,b.height),new Promise(q=>{b.toBlob(ie=>{q(new File([ie],"avatar.jpg",{type:a.outputType}))},a.outputType,a.outputQuality)})},A=()=>{const b=document.createElement("canvas"),x=c.value;if(!x)return null;const{naturalWidth:H,naturalHeight:W,displayWidth:K,displayHeight:S,offsetX:I,offsetY:O}=B.value,Y=H/K,m=W/S,k=(y.value.x-I)*Y,$=(y.value.y-O)*m,G=y.value.size*Y,D=y.value.size/a.aspectRatio*m;return b.width=a.outputSize,b.height=a.outputSize/a.aspectRatio,b.getContext("2d").drawImage(x,k,$,G,D,0,0,b.width,b.height),b.toDataURL(a.outputType,a.outputQuality)},z=async()=>{if(V.value){g.value=!0;try{const b=await _(),x=A();b&&u("confirm",{file:b,dataUrl:x})}catch(b){console.error(b),r.error("生成图片失败")}finally{g.value=!1}}},le=()=>{u("cancel"),C.value=!1},Ve=()=>{v(),u("closed")},v=()=>{y.value={x:0,y:0,size:150,minSize:a.minSize}};return e.watch(()=>a.src,b=>{b&&e.nextTick(()=>{c.value&&c.value.complete&&Z()})}),t({getCroppedImage:_,getCroppedImageDataUrl:A,reset:v}),(b,x)=>(e.openBlock(),e.createBlock(e.unref(pe),{"model-value":C.value,"onUpdate:modelValue":x[0]||(x[0]=H=>C.value=H),title:"调整头像",width:n.dialogWidth,"close-on-click-modal":!1,onClosed:Ve},{footer:e.withCtx(()=>[e.createElementVNode("div",er,[e.createVNode(e.unref(L),{onClick:le},{default:e.withCtx(()=>[...x[2]||(x[2]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"primary",loading:g.value,disabled:!V.value,onClick:z},{default:e.withCtx(()=>[...x[3]||(x[3]=[e.createTextVNode(" 确认 ",-1)])]),_:1},8,["loading","disabled"])])]),default:e.withCtx(()=>[e.createElementVNode("div",Xo,[V.value?(e.openBlock(),e.createElementBlock("div",Po,[e.createElementVNode("div",{ref_key:"cropAreaRef",ref:l,class:"crop-area",style:e.normalizeStyle({height:n.cropAreaHeight})},[e.createElementVNode("img",{src:V.value,ref_key:"imageRef",ref:c,onLoad:Z,style:e.normalizeStyle(N.value)},null,44,Zo),e.createElementVNode("div",{class:"crop-box",style:e.normalizeStyle(R.value),onMousedown:ee,onTouchstart:ee},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(f,H=>e.createElementVNode("div",{key:H,class:e.normalizeClass(["crop-handle",H]),onMousedown:e.withModifiers(W=>J(H,W),["stop"]),onTouchstart:e.withModifiers(W=>J(H,W),["stop"])},null,42,Qo)),64))],36)],4),e.createElementVNode("div",Jo,[x[1]||(x[1]=e.createElementVNode("div",{class:"preview-label"},"预览",-1)),e.createElementVNode("div",{class:"preview-box",style:e.normalizeStyle({width:n.previewSize+"px",height:n.previewSize+"px"})},[e.createElementVNode("canvas",{ref_key:"previewCanvasRef",ref:w,width:n.previewSize,height:n.previewSize,class:"preview-canvas"},null,8,vo)],4)])])):(e.openBlock(),e.createBlock(e.unref(ue),{key:1,description:"请上传图片"}))])]),_:1},8,["model-value","width"]))}},[["__scopeId","data-v-a3617d84"]]),tr={class:"emoji-header"},nr=["onClick"],or={class:"emoji-body"},rr=["onClick"],ar=M({__name:"EmojiPicker",props:{visible:{type:Boolean,default:!1}},emits:["select","close"],setup(n,{emit:t}){const o=t,a=e.ref(0),r=[{id:"emoticons",icon:"😀",name:"表情",emojis:["😀","😃","😄","😁","😆","😅","🤣","😂","🙂","🙃","😉","😊","😇","🥰","😍","🤩","😘","😗","😚","😋","😛","😜","🤪","😝","🤑","🤗","🤭","🤫","🤔","🤐","🤨","😐","😑","😶","😏","😒","🙄","😬","🤥","😌","😔","😪","🤤","😴","😷","🤒","🤕","🤢","🤮","🤧","🥵","🥶","🥴","😵","🤯","🤠","🥳","😎","🤓","🧐","😕","😟","🙁","☹️","😮","😯","😲","😳","🥺","😦","😧","😨","😰","😥","😢","😭","😱","😖","😣","😞"]},{id:"gestures",icon:"👋",name:"手势",emojis:["👋","🤚","🖐️","✋","🖖","👌","🤌","🤏","✌️","🤞","🤟","🤘","🤙","👈","👉","👆","🖕","👇","☝️","👍","👎","✊","👊","🤛","🤜","👏","🙌","👐","🤲","🤝","🙏","🤚🏻","🖐🏻","✋🏻","🖖🏻","👌🏻","🤌🏻","🤏🏻","✌🏻","🤞🏻","🤟🏻","🤘🏻","🤙🏻","👈🏻","👉🏻","👆🏻","🖕🏻","👇🏻","☝🏻","👍🏻"]},{id:"animals",icon:"🐶",name:"动物",emojis:["🐶","🐱","🐭","🐹","🐰","🦊","🐻","🐼","🐨","🐯","🦁","🐮","🐷","🐸","🐵","🙈","🙉","🙊","🐒","🐔","🐧","🐦","🐤","🐣","🐥","🦆","🦅","🦉","🦇","🐺","🐗","🐴","🦄","🐝","🐛","🦋","🐌","🐞","🐜","🦟","🦗","🕷️","🦂","🐢","🐍","🦎","🦖","🦕","🐙","🦑"]},{id:"food",icon:"🍎",name:"食物",emojis:["🍎","🍊","🍋","🍌","🍉","🍇","🍓","🍈","🍒","🍑","🥭","🍍","🥥","🥝","🍅","🍆","🥑","🥦","🥬","🥒","🌶️","🌽","🥕","🧄","🧅","🥔","🍠","🥐","🥯","🍞","🥖","🥨","🧀","🥚","🍳","🧈","🥞","🧇","🥓","🥩","🍗","🍖","🌭","🍔","🍟","🍕","🥪","🥙","🧆","🌮"]},{id:"objects",icon:"⌚",name:"物品",emojis:["⌚","📱","📲","💻","⌨️","🖥️","🖨️","🖱️","🖲️","🕹️","🗜️","💽","💾","💿","📀","🧮","🎥","🎞️","📽️","🎬","📺","📷","📸","📹","📼","🔍","🔎","🕯️","💡","🔦","🏮","📔","📕","📖","📗","📘","📙","📚","📓","📒","📃","📜","📄","📰","🗞️","📑","🔖","🏷️","💰","🪙"]},{id:"nature",icon:"☀️",name:"自然",emojis:["☀️","🌤️","⛅","🌥️","☁️","🌦️","🌧️","⛈️","🌩️","🌨️","❄️","☃️","⛄","🌬️","💨","🌪️","🌫️","🌊","💧","💦","☔","☂️","🌱","🌲","🌳","🌴","🌵","🌷","🌹","🥀","🌺","🌸","🌼","🌻","🌞","⭐","🌟","✨","💫","🌙","🌚","🌛","🌜","🌝","🪐","🌍","🌎","🌏","⛱️","🏖️"]}],u=C=>{o("select",C)};return(C,V)=>n.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"emoji-picker",onClick:V[0]||(V[0]=e.withModifiers(()=>{},["stop"]))},[e.createElementVNode("div",tr,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(r,(f,g)=>e.createElementVNode("div",{key:f.id,class:e.normalizeClass(["emoji-category-tab",{active:a.value===g}]),onClick:l=>a.value=g},e.toDisplayString(f.icon),11,nr)),64))]),e.createElementVNode("div",or,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r[a.value].emojis,f=>(e.openBlock(),e.createElementBlock("div",{key:f,class:"emoji-item",onClick:g=>u(f)},e.toDisplayString(f),9,rr))),128))])])):e.createCommentVNode("",!0)}},[["__scopeId","data-v-c201c6f3"]]),sr={class:"chat-sidebar"},lr=["src"],ir=["onClick"],cr={class:"sidebar-icon"},dr={key:0,class:"sidebar-nav-badge"},mr={class:"sidebar-icon"},pr=M({__name:"Sidebar",props:{myAvatar:String,navTabs:Array,currentNavTab:String,config:Object},emits:["avatar-click","settings-click","update:currentNavTab"],setup(n){return(t,o)=>(e.openBlock(),e.createElementBlock("div",sr,[e.createElementVNode("div",{class:"sidebar-avatar",onClick:o[0]||(o[0]=a=>t.$emit("avatar-click"))},[e.createElementVNode("img",{src:n.myAvatar,alt:"头像",class:"sidebar-avatar-img"},null,8,lr)]),(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.navTabs,a=>(e.openBlock(),e.createElementBlock("div",{key:a.id,class:e.normalizeClass(["sidebar-nav-item",n.currentNavTab===a.id?"sidebar-nav-item-active":"sidebar-nav-item-inactive"]),onClick:r=>t.$emit("update:currentNavTab",a.id)},[e.createElementVNode("span",cr,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.icon)))]),a.badge?(e.openBlock(),e.createElementBlock("span",dr,e.toDisplayString(a.badge>99?"99+":a.badge),1)):e.createCommentVNode("",!0)],10,ir))),128)),o[2]||(o[2]=e.createElementVNode("div",{class:"sidebar-spacer"},null,-1)),n.config.modules.settings?(e.openBlock(),e.createElementBlock("div",{key:0,class:"sidebar-nav-item sidebar-nav-item-inactive",onClick:o[1]||(o[1]=a=>t.$emit("settings-click")),title:"设置"},[e.createElementVNode("span",mr,[e.createVNode(e.unref(wt))])])):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-3bd773ce"]]),ur={class:"chat-content-panel"},fr={class:"chat-search-bar"},gr={class:"search-actions"},hr={class:"chat-content-scroll"},kr={key:0},yr=["onClick","onContextmenu"],Cr={class:"chat-list-avatar-wrapper"},wr={key:0,class:"group-avatar-grid"},Vr=["src","alt"],br=["src","alt"],Nr={key:2,class:"chat-list-online-indicator"},Er={class:"chat-list-info"},$r={class:"chat-list-header"},Br={class:"chat-list-name"},xr={class:"chat-list-time"},Sr={class:"chat-list-preview"},Mr={class:"chat-list-last-msg"},_r={key:0,class:"chat-list-unread"},Gr={key:1},Tr={key:0},Ur={class:"list-content"},Lr=["onClick"],Ir={class:"chat-list-avatar-wrapper"},Fr=["src","alt"],Ar={class:"chat-list-info"},Dr={class:"chat-list-name"},zr={key:1},Rr={class:"list-content"},jr=["onClick"],Hr={class:"chat-list-avatar-wrapper"},Kr={key:0,class:"group-avatar-grid"},Or=["src","alt"],Wr=["src","alt"],qr={class:"chat-list-info"},Yr={class:"chat-list-header"},Xr={class:"chat-list-name"},Pr={class:"chat-list-time"},Zr={class:"chat-list-preview"},Qr={class:"chat-list-last-msg"},Jr={key:0,class:"chat-list-unread"},vr={key:2},ea={class:"friend-request-info"},ta=["src","alt"],na={class:"friend-request-details"},oa={class:"friend-request-username"},ra=M({__name:"ContentList",props:{searchText:String,currentNavTab:String,config:Object,combinedChatList:Array,filteredFriendList:Array,filteredGroupList:Array,currentChatId:[String,Number],currentSelectGroup:Object,currentSelectedGroup:Object,loadingFriendApply:Boolean,friendApplyList:Array,formatLastTime:Function},emits:["update:searchText","add-friend","create-group","select-chat","select-group-chat","select-friend","select-group","agree-friend","contextmenu"],setup(n,{emit:t}){const o=n,a=t,r=e.ref(!1),u=e.ref(!1),C=g=>{var l;return g.type==="friend"?o.currentChatId===g.id:((l=o.currentSelectGroup)==null?void 0:l.groupId)===g.groupId},V=g=>{g.type==="friend"?a("select-chat",g):a("select-group-chat",g)},f=g=>{const l=g.target;l.style.display="none",l.parentElement.style.backgroundColor="#e0e0e0"};return(g,l)=>(e.openBlock(),e.createElementBlock("div",ur,[e.createElementVNode("div",fr,[e.createVNode(e.unref(re),{"model-value":n.searchText,"onUpdate:modelValue":l[0]||(l[0]=c=>g.$emit("update:searchText",c)),placeholder:"搜索",class:"chat-search-input"},{prefix:e.withCtx(()=>[e.createVNode(e.unref(pt))]),_:1},8,["model-value"]),e.createElementVNode("div",gr,[n.config.modules.friends?(e.openBlock(),e.createBlock(e.unref(L),{key:0,type:"primary",size:"small",onClick:l[1]||(l[1]=c=>g.$emit("add-friend")),title:"添加好友"},{icon:e.withCtx(()=>[e.createVNode(e.unref(Xt))]),_:1})):e.createCommentVNode("",!0),n.config.modules.groups?(e.openBlock(),e.createBlock(e.unref(L),{key:1,type:"primary",size:"small",onClick:l[2]||(l[2]=c=>g.$emit("create-group")),title:"创建群聊"},{icon:e.withCtx(()=>[e.createVNode(e.unref(Ye))]),_:1})):e.createCommentVNode("",!0)])]),e.createElementVNode("div",hr,[n.currentNavTab==="chat"?(e.openBlock(),e.createElementBlock("div",kr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.combinedChatList,c=>(e.openBlock(),e.createElementBlock("div",{key:c.type+"_"+(c.id||c.groupId),class:e.normalizeClass(["chat-list-item",C(c)?"chat-list-item-active":""]),onClick:w=>V(c),onContextmenu:e.withModifiers(w=>g.$emit("contextmenu",w,c),["prevent","stop"])},[e.createElementVNode("div",Cr,[c.type==="group"&&c.memberAvatars&&c.memberAvatars.length>0?(e.openBlock(),e.createElementBlock("div",wr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.memberAvatars.slice(0,4),(w,B)=>(e.openBlock(),e.createElementBlock("div",{key:w.username||B,class:"group-avatar-item"},[e.createElementVNode("img",{src:w.avatar,alt:w.username,class:"group-avatar-img",onError:f},null,40,Vr)]))),128))])):(e.openBlock(),e.createElementBlock("img",{key:1,src:c.avatar,alt:c.name,class:"chat-list-avatar"},null,8,br)),c.type==="friend"&&c.online?(e.openBlock(),e.createElementBlock("span",Nr)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Er,[e.createElementVNode("div",$r,[e.createElementVNode("span",Br,e.toDisplayString(c.name),1),e.createElementVNode("span",xr,e.toDisplayString(n.formatLastTime(c.lastTime)),1)]),e.createElementVNode("div",Sr,[e.createElementVNode("span",Mr,e.toDisplayString(c.type==="group"&&c.lastMsgSender?c.lastMsgSender+": ":"")+e.toDisplayString(c.lastMsg),1),c.unread>0?(e.openBlock(),e.createElementBlock("span",_r,e.toDisplayString(c.unread>99?"99+":c.unread),1)):e.createCommentVNode("",!0)])])],42,yr))),128))])):e.createCommentVNode("",!0),n.currentNavTab==="contacts"?(e.openBlock(),e.createElementBlock("div",Gr,[n.config.modules.friends?(e.openBlock(),e.createElementBlock("div",Tr,[e.createElementVNode("div",{class:"list-section-title",onClick:l[3]||(l[3]=c=>r.value=!r.value)},[e.createElementVNode("span",{class:e.normalizeClass(["collapse-icon",r.value?"collapsed":""])},[e.createVNode(e.unref(ut))],2),l[5]||(l[5]=e.createElementVNode("span",null,"好友",-1))]),e.withDirectives(e.createElementVNode("div",Ur,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.filteredFriendList,c=>(e.openBlock(),e.createElementBlock("div",{key:c.id,class:"chat-list-item",onClick:w=>g.$emit("select-friend",c)},[e.createElementVNode("div",Ir,[e.createElementVNode("img",{src:c.avatar,alt:c.name,class:"chat-list-avatar"},null,8,Fr),e.createElementVNode("span",{class:e.normalizeClass(["chat-list-online-indicator",c.online?"chat-list-online":"chat-list-offline"])},null,2)]),e.createElementVNode("div",Ar,[e.createElementVNode("span",Dr,e.toDisplayString(c.name),1)])],8,Lr))),128))],512),[[e.vShow,!r.value]])])):e.createCommentVNode("",!0),n.config.modules.groups?(e.openBlock(),e.createElementBlock("div",zr,[e.createElementVNode("div",{class:"list-section-title",onClick:l[4]||(l[4]=c=>u.value=!u.value)},[e.createElementVNode("span",{class:e.normalizeClass(["collapse-icon",u.value?"collapsed":""])},[e.createVNode(e.unref(ut))],2),l[6]||(l[6]=e.createElementVNode("span",null,"群聊",-1))]),e.withDirectives(e.createElementVNode("div",Rr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.filteredGroupList,c=>{var w;return e.openBlock(),e.createElementBlock("div",{key:c.groupId,class:e.normalizeClass(["chat-list-item",((w=n.currentSelectedGroup)==null?void 0:w.groupId)===c.groupId?"chat-list-item-active":""]),onClick:B=>g.$emit("select-group",c)},[e.createElementVNode("div",Hr,[c.memberAvatars&&c.memberAvatars.length>0?(e.openBlock(),e.createElementBlock("div",Kr,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(c.memberAvatars.slice(0,4),(B,y)=>(e.openBlock(),e.createElementBlock("div",{key:B.username||y,class:"group-avatar-item"},[e.createElementVNode("img",{src:B.avatar,alt:B.username,class:"group-avatar-img",onError:f},null,40,Or)]))),128))])):(e.openBlock(),e.createElementBlock("img",{key:1,src:c.avatar,alt:c.name,class:"chat-list-avatar"},null,8,Wr))]),e.createElementVNode("div",qr,[e.createElementVNode("div",Yr,[e.createElementVNode("span",Xr,e.toDisplayString(c.name),1),e.createElementVNode("span",Pr,e.toDisplayString(n.formatLastTime(c.lastTime)),1)]),e.createElementVNode("div",Zr,[e.createElementVNode("span",Qr,e.toDisplayString(c.lastMsgSender?c.lastMsgSender+": ":"")+e.toDisplayString(c.lastMsg||"暂无消息"),1),c.unread>0?(e.openBlock(),e.createElementBlock("span",Jr,e.toDisplayString(c.unread>99?"99+":c.unread),1)):e.createCommentVNode("",!0)])])],10,jr)}),128))],512),[[e.vShow,!u.value]])])):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),n.currentNavTab==="apply"&&n.config.modules.apply?(e.openBlock(),e.createElementBlock("div",vr,[n.loadingFriendApply?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"加载中..."})):n.friendApplyList.length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:1,description:"暂无好友申请"})):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(n.friendApplyList,c=>(e.openBlock(),e.createElementBlock("div",{key:c.applyUser||c.id,class:"friend-request-item"},[e.createElementVNode("div",ea,[e.createElementVNode("img",{src:`https://api.dicebear.com/7.x/avataaars/svg?seed=${c.applyUser}`,alt:c.applyUser,class:"friend-request-avatar"},null,8,ta),e.createElementVNode("div",na,[e.createElementVNode("div",oa,e.toDisplayString(c.applyUser),1),l[7]||(l[7]=e.createElementVNode("div",{class:"friend-request-desc"},"请求添加你为好友",-1))])]),e.createVNode(e.unref(L),{type:"primary",size:"small",onClick:w=>g.$emit("agree-friend",c.applyUser)},{default:e.withCtx(()=>[...l[8]||(l[8]=[e.createTextVNode("同意",-1)])]),_:1},8,["onClick"])]))),128))])):e.createCommentVNode("",!0)])]))}},[["__scopeId","data-v-bed5c7cd"]]),aa={class:"chat-main-area"},sa={key:0,class:"friend-profile-area"},la=["src","alt"],ia={class:"profile-name"},ca={class:"profile-status"},da={key:1,class:"friend-profile-area"},ma=["src","alt"],pa={class:"profile-name"},ua={class:"profile-status"},fa={key:2,class:"chat-window-area"},ga={key:3,class:"chat-empty-state"},ha={class:"empty-state-text"},ka=M({__name:"MainArea",props:{currentSelectedFriend:Object,currentSelectedGroup:Object,currentChat:Object,currentSelectGroup:Object,currentNavTab:String},emits:["start-chat","start-group-chat"],setup(n){return(t,o)=>{const a=e.resolveComponent("ChatDotRound"),r=e.resolveComponent("el-icon"),u=e.resolveComponent("el-button"),C=e.resolveComponent("ChatLineRound");return e.openBlock(),e.createElementBlock("div",aa,[n.currentSelectedFriend&&!n.currentChat&&!n.currentSelectGroup?(e.openBlock(),e.createElementBlock("div",sa,[e.createElementVNode("img",{src:n.currentSelectedFriend.avatar,alt:n.currentSelectedFriend.name,class:"profile-avatar"},null,8,la),e.createElementVNode("div",ia,e.toDisplayString(n.currentSelectedFriend.name),1),e.createElementVNode("div",ca,[e.createElementVNode("span",{class:e.normalizeClass(["profile-status-dot",n.currentSelectedFriend.online?"profile-status-online":"profile-status-offline"])},null,2),e.createElementVNode("span",null,e.toDisplayString(n.currentSelectedFriend.online?"在线":"离线"),1)]),e.createVNode(u,{type:"primary",size:"large",onClick:o[0]||(o[0]=V=>t.$emit("start-chat")),class:"profile-start-chat-btn"},{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createVNode(a)]),_:1}),o[2]||(o[2]=e.createElementVNode("span",null,"发消息",-1))]),_:1})])):e.createCommentVNode("",!0),n.currentSelectedGroup&&!n.currentSelectGroup?(e.openBlock(),e.createElementBlock("div",da,[e.createElementVNode("img",{src:n.currentSelectedGroup.avatar,alt:n.currentSelectedGroup.name,class:"profile-avatar"},null,8,ma),e.createElementVNode("div",pa,e.toDisplayString(n.currentSelectedGroup.name),1),e.createElementVNode("div",ua,[o[3]||(o[3]=e.createElementVNode("span",{class:"profile-status-dot profile-status-online"},null,-1)),e.createElementVNode("span",null,e.toDisplayString(n.currentSelectedGroup.memberCount||0)+" 人",1)]),e.createVNode(u,{type:"primary",size:"large",onClick:o[1]||(o[1]=V=>t.$emit("start-group-chat")),class:"profile-start-chat-btn"},{default:e.withCtx(()=>[e.createVNode(r,null,{default:e.withCtx(()=>[e.createVNode(a)]),_:1}),o[4]||(o[4]=e.createElementVNode("span",null,"发消息",-1))]),_:1})])):e.createCommentVNode("",!0),n.currentChat||n.currentSelectGroup?(e.openBlock(),e.createElementBlock("div",fa,[e.renderSlot(t.$slots,"chat-window",{},void 0,!0)])):!n.currentSelectedFriend&&!n.currentSelectedGroup&&!n.currentChat&&!n.currentSelectGroup?(e.openBlock(),e.createElementBlock("div",ga,[e.createVNode(r,{size:64,class:"empty-state-icon"},{default:e.withCtx(()=>[e.createVNode(C)]),_:1}),e.createElementVNode("div",ha,e.toDisplayString(n.currentNavTab==="apply"?"在左侧选择好友申请":"在左侧选择好友开始聊天"),1)])):e.createCommentVNode("",!0)])}}},[["__scopeId","data-v-f95c41c6"]]),ya={class:"chat-window-area"},Ca={class:"chat-window-header"},wa={class:"chat-window-title"},Va={class:"chat-window-name"},ba={key:1,class:"chat-window-status"},Na={class:"chat-window-actions"},Ea={class:"message-avatar"},$a=["src"],Ba={key:0,class:"message-sender-name"},xa={class:"message-bubble-wrapper"},Sa=["onClick"],Ma=["src","alt"],_a={key:0,class:"message-image-size"},Ga=["onClick"],Ta={class:"message-file-content"},Ua={class:"message-file-icon"},La={class:"message-file-info"},Ia={class:"message-file-name"},Fa={class:"message-file-meta"},Aa={key:0},Da=M({__name:"ChatWindow",props:{currentChat:Object,currentSelectGroup:Object,groupMemberList:Array,messages:Array,formatTime:Function,formatFileSize:Function},emits:["toggle-group-sidebar","toggle-chat-detail","open-file","hide-emoji"],setup(n,{expose:t,emit:o}){const a=n,r=e.ref(null),u=()=>{r.value&&(r.value.scrollTop=r.value.scrollHeight)};return e.watch(()=>a.messages,()=>{setTimeout(u,50)},{deep:!0}),e.onMounted(u),t({scrollToBottom:u}),(C,V)=>{const f=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",ya,[e.createElementVNode("div",Ca,[e.createElementVNode("div",wa,[e.createElementVNode("span",Va,e.toDisplayString(n.currentSelectGroup?n.currentSelectGroup.name:n.currentChat.name),1),n.currentSelectGroup?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("span",{key:0,class:e.normalizeClass(["chat-window-status",n.currentChat.online?"chat-window-status-online":"chat-window-status-offline"])},e.toDisplayString(n.currentChat.online?"在线":"离线"),3)),n.currentSelectGroup?(e.openBlock(),e.createElementBlock("span",ba,e.toDisplayString(n.groupMemberList.length)+" 人 ",1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",Na,[e.createVNode(f,{class:"chat-action-icon"},{default:e.withCtx(()=>[e.createVNode(e.unref(Ge.Search))]),_:1}),n.currentSelectGroup?(e.openBlock(),e.createBlock(f,{key:0,class:"chat-action-icon",onClick:V[0]||(V[0]=g=>C.$emit("toggle-group-sidebar"))},{default:e.withCtx(()=>[e.createVNode(e.unref(Ge.MoreFilled))]),_:1})):(e.openBlock(),e.createBlock(f,{key:1,class:"chat-action-icon",onClick:V[1]||(V[1]=g=>C.$emit("toggle-chat-detail"))},{default:e.withCtx(()=>[e.createVNode(e.unref(Ge.MoreFilled))]),_:1}))])]),e.createElementVNode("div",{ref_key:"messagesContainer",ref:r,class:"chat-messages-container"},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.messages,(g,l)=>(e.openBlock(),e.createElementBlock("div",{key:l,class:e.normalizeClass(["message-wrapper",g.isSelf?"message-self":"message-other"])},[e.createElementVNode("div",Ea,[e.createElementVNode("img",{src:g.avatar,class:"message-avatar-img"},null,8,$a)]),e.createElementVNode("div",{class:e.normalizeClass(["message-content",g.isSelf?"message-content-self":"message-content-other"])},[g.isSelf?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Ba,e.toDisplayString(n.currentSelectGroup?g.displayName||g.sendUsername:n.currentChat.name),1)),e.createElementVNode("div",xa,[g.type==="text"?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["message-bubble",g.isSelf?"message-bubble-self":"message-bubble-other"])},e.toDisplayString(g.text),3)):g.type==="file"&&g.fileType==="image"?(e.openBlock(),e.createElementBlock("div",{key:1,class:e.normalizeClass(["message-bubble","message-image-bubble",g.isSelf?"message-bubble-self":"message-bubble-other"]),onClick:c=>C.$emit("open-file",g.fileUrl)},[e.createElementVNode("img",{src:g.fileUrl,alt:g.fileName,class:"message-image"},null,8,Ma),g.fileSize?(e.openBlock(),e.createElementBlock("div",_a,e.toDisplayString(n.formatFileSize(g.fileSize)),1)):e.createCommentVNode("",!0)],10,Sa)):g.type==="file"?(e.openBlock(),e.createElementBlock("div",{key:2,class:e.normalizeClass(["message-bubble","message-file-bubble",g.isSelf?"message-bubble-self":"message-bubble-other"]),onClick:c=>C.$emit("open-file",g.fileUrl)},[e.createElementVNode("div",Ta,[e.createElementVNode("div",Ua,[e.createVNode(f,{size:28},{default:e.withCtx(()=>[e.createVNode(e.unref(Ge.Document))]),_:1})]),e.createElementVNode("div",La,[e.createElementVNode("div",Ia,e.toDisplayString(g.fileName||g.text),1),e.createElementVNode("div",Fa,[e.createVNode(f,{size:12},{default:e.withCtx(()=>[e.createVNode(e.unref(Ge.Download))]),_:1}),V[3]||(V[3]=e.createElementVNode("span",null,"点击下载",-1)),g.fileSize?(e.openBlock(),e.createElementBlock("span",Aa,"· "+e.toDisplayString(n.formatFileSize(g.fileSize)),1)):e.createCommentVNode("",!0)])])])],10,Ga)):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass(["message-time",g.isSelf?"message-time-right":"message-time-left"])},e.toDisplayString(n.formatTime(g.time)),3)])],2)],2))),128))],512),e.createElementVNode("div",{class:"chat-input-area",onClick:V[2]||(V[2]=g=>C.$emit("hide-emoji"))},[e.renderSlot(C.$slots,"input-area",{},void 0,!0)])])}}},[["__scopeId","data-v-6e2f1d35"]]),za={key:0,class:"group-sidebar"},Ra={class:"group-sidebar-header"},ja={class:"group-sidebar-content"},Ha={class:"group-members-avatar-section"},Ka={key:0,class:"group-remove-mode-hint"},Oa={class:"group-members-grid"},Wa=["onClick"],qa={class:"group-member-avatar-wrapper"},Ya=["src","alt"],Xa={key:0,class:"group-member-remove-badge"},Pa={class:"group-member-nickname"},Za={class:"group-member-action-icon"},Qa={class:"group-member-action-icon"},Ja={class:"group-member-nickname"},va={class:"group-settings-section"},es={key:0,class:"group-setting-item"},ts={class:"group-setting-value-wrapper"},ns={key:0,class:"group-edit-wrapper"},os={class:"group-edit-buttons"},rs={class:"group-setting-value-text"},as={class:"group-edit-icon"},ss={key:1,class:"group-setting-item"},ls={class:"group-setting-value-text"},is={key:2,class:"group-setting-item"},cs={class:"group-setting-value-wrapper"},ds={key:0,class:"group-edit-wrapper"},ms={class:"group-edit-buttons"},ps={class:"group-setting-value-text"},us={class:"group-edit-icon"},fs={key:3,class:"group-setting-item"},gs={class:"group-setting-value-text"},hs={key:4,class:"group-setting-item"},ks={class:"group-setting-value-wrapper"},ys={key:0,class:"group-edit-wrapper"},Cs={class:"group-edit-buttons"},ws={class:"group-setting-value-text"},Vs={class:"group-edit-icon"},bs={key:5,class:"group-setting-item"},Ns={class:"group-setting-value-text"},Es={class:"group-setting-value"},$s={class:"group-setting-value-text"},Bs={class:"group-setting-item"},xs={class:"group-setting-item"},Ss=M({__name:"GroupSidebar",props:{visible:Boolean,currentSelectGroup:Object,groupMemberList:Array,isRemoveMemberMode:Boolean,config:Object,myUsername:String,editingFields:Object,tempEditValues:Object,currentGroupInfo:Object,myNicknameInGroup:String,muteGroup:Boolean,groupOwnerUsername:String},emits:["close","remove-member","edit-member-nick","invite-member","toggle-remove-mode","start-edit","cancel-edit","save-field","update:tempEditValue","edit-my-nick","update:muteGroup","show-group-detail","delete-group","quit-group"],setup(n){const t=n,o=e.computed(()=>{var u;if(console.log("[GroupSidebar] 检查群主身份:",{myUsername:t.myUsername,groupMemberCount:(u=t.groupMemberList)==null?void 0:u.length}),!t.groupMemberList||t.groupMemberList.length===0)return console.log("[GroupSidebar] 无成员列表为空"),!1;const a=t.groupMemberList.find(C=>C.username===t.myUsername);console.log("[GroupSidebar] 当前用户在群成员:",a);const r=(a==null?void 0:a.memberType)===0;return console.log("[GroupSidebar] 是否群主:",r),r});return(a,r)=>(e.openBlock(),e.createBlock(e.Transition,{name:"slide"},{default:e.withCtx(()=>{var u,C,V,f,g,l,c,w,B,y;return[n.visible?(e.openBlock(),e.createElementBlock("div",za,[e.createElementVNode("div",Ra,[r[23]||(r[23]=e.createElementVNode("span",{class:"group-sidebar-title"},"群聊信息",-1)),e.createElementVNode("span",{class:"group-sidebar-close",onClick:r[0]||(r[0]=N=>a.$emit("close"))},[e.createVNode(e.unref(Ct))])]),e.createElementVNode("div",ja,[e.createElementVNode("div",Ha,[n.isRemoveMemberMode?(e.openBlock(),e.createElementBlock("div",Ka,[e.createVNode(e.unref(no)),r[24]||(r[24]=e.createElementVNode("span",null,"点击成员头像可移除成员",-1))])):e.createCommentVNode("",!0),e.createElementVNode("div",Oa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.groupMemberList.slice(0,10),N=>(e.openBlock(),e.createElementBlock("div",{key:N.username,class:e.normalizeClass(["group-member-avatar-item",{"is-remove-mode":n.isRemoveMemberMode}]),onClick:R=>n.isRemoveMemberMode?a.$emit("remove-member",N.username):a.$emit("edit-member-nick",N)},[e.createElementVNode("div",qa,[e.createElementVNode("img",{src:N.avatar?`${n.config.api.baseUrl}${N.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${N.username}`,alt:N.username,class:"group-member-avatar-small"},null,8,Ya),n.isRemoveMemberMode&&N.username!==n.currentSelectGroup.owner?(e.openBlock(),e.createElementBlock("div",Xa,[e.createVNode(e.unref(Ct))])):e.createCommentVNode("",!0)]),e.createElementVNode("span",Pa,e.toDisplayString(N.memberNick||N.username),1)],10,Wa))),128)),e.createElementVNode("div",{class:"group-member-avatar-item",onClick:r[1]||(r[1]=N=>a.$emit("invite-member"))},[e.createElementVNode("div",Za,[e.createVNode(e.unref(Vt))]),r[25]||(r[25]=e.createElementVNode("span",{class:"group-member-nickname"},"添加",-1))]),o.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["group-member-avatar-item",{"is-active":n.isRemoveMemberMode}]),onClick:r[2]||(r[2]=N=>a.$emit("toggle-remove-mode"))},[e.createElementVNode("div",Qa,[e.createVNode(e.unref(Rn))]),e.createElementVNode("span",Ja,e.toDisplayString(n.isRemoveMemberMode?"完成":"移出"),1)],2)):e.createCommentVNode("",!0)])]),r[46]||(r[46]=e.createElementVNode("div",{class:"group-divider"},null,-1)),e.createElementVNode("div",va,[o.value?(e.openBlock(),e.createElementBlock("div",es,[r[28]||(r[28]=e.createElementVNode("span",{class:"group-setting-label"},"群聊名称",-1)),e.createElementVNode("div",ts,[n.editingFields.groupNickname?(e.openBlock(),e.createElementBlock("div",ns,[e.createVNode(e.unref(re),{"model-value":n.tempEditValues.groupNickname,"onUpdate:modelValue":r[3]||(r[3]=N=>a.$emit("update:tempEditValue",{field:"groupNickname",value:N})),placeholder:"请输入群聊名称",onKeyup:r[4]||(r[4]=e.withKeys(N=>a.$emit("save-field","groupNickname"),["enter"])),class:"group-input-edit"},null,8,["model-value"]),e.createElementVNode("div",os,[e.createVNode(e.unref(L),{size:"small",onClick:r[5]||(r[5]=N=>a.$emit("cancel-edit","groupNickname"))},{default:e.withCtx(()=>[...r[26]||(r[26]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{size:"small",type:"primary",onClick:r[6]||(r[6]=N=>a.$emit("save-field","groupNickname"))},{default:e.withCtx(()=>[...r[27]||(r[27]=[e.createTextVNode("保存",-1)])]),_:1})])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-setting-value",onClick:r[7]||(r[7]=N=>a.$emit("start-edit","groupNickname"))},[e.createElementVNode("span",rs,e.toDisplayString(((u=n.currentGroupInfo)==null?void 0:u.groupNickname)||((C=n.currentGroupInfo)==null?void 0:C.groupName)||((V=n.currentSelectGroup)==null?void 0:V.name)||""),1),e.createElementVNode("span",as,[e.createVNode(e.unref(Te))])]))])])):(e.openBlock(),e.createElementBlock("div",ss,[r[29]||(r[29]=e.createElementVNode("span",{class:"group-setting-label"},"群聊名称",-1)),e.createElementVNode("span",ls,e.toDisplayString(((f=n.currentGroupInfo)==null?void 0:f.groupNickname)||((g=n.currentGroupInfo)==null?void 0:g.groupName)||((l=n.currentSelectGroup)==null?void 0:l.name)||""),1)])),o.value?(e.openBlock(),e.createElementBlock("div",is,[r[32]||(r[32]=e.createElementVNode("span",{class:"group-setting-label"},"群公告",-1)),e.createElementVNode("div",cs,[n.editingFields.notice?(e.openBlock(),e.createElementBlock("div",ds,[e.createVNode(e.unref(re),{"model-value":n.tempEditValues.notice,"onUpdate:modelValue":r[8]||(r[8]=N=>a.$emit("update:tempEditValue",{field:"notice",value:N})),type:"textarea",rows:3,placeholder:"请输入群公告",onKeyup:r[9]||(r[9]=e.withKeys(e.withModifiers(N=>a.$emit("save-field","notice"),["ctrl"]),["enter"])),class:"group-input-edit"},null,8,["model-value"]),e.createElementVNode("div",ms,[e.createVNode(e.unref(L),{size:"small",onClick:r[10]||(r[10]=N=>a.$emit("cancel-edit","notice"))},{default:e.withCtx(()=>[...r[30]||(r[30]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{size:"small",type:"primary",onClick:r[11]||(r[11]=N=>a.$emit("save-field","notice"))},{default:e.withCtx(()=>[...r[31]||(r[31]=[e.createTextVNode("保存",-1)])]),_:1})])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-setting-value",onClick:r[12]||(r[12]=N=>a.$emit("start-edit","notice"))},[e.createElementVNode("span",ps,e.toDisplayString(((c=n.currentGroupInfo)==null?void 0:c.notice)||"暂无公告"),1),e.createElementVNode("span",us,[e.createVNode(e.unref(Te))])]))])])):(e.openBlock(),e.createElementBlock("div",fs,[r[33]||(r[33]=e.createElementVNode("span",{class:"group-setting-label"},"群公告",-1)),e.createElementVNode("span",gs,e.toDisplayString(((w=n.currentGroupInfo)==null?void 0:w.notice)||"暂无公告"),1)])),o.value?(e.openBlock(),e.createElementBlock("div",hs,[r[36]||(r[36]=e.createElementVNode("span",{class:"group-setting-label"},"备注",-1)),e.createElementVNode("div",ks,[n.editingFields.remark?(e.openBlock(),e.createElementBlock("div",ys,[e.createVNode(e.unref(re),{"model-value":n.tempEditValues.remark,"onUpdate:modelValue":r[13]||(r[13]=N=>a.$emit("update:tempEditValue",{field:"remark",value:N})),placeholder:"请输入备注",onKeyup:r[14]||(r[14]=e.withKeys(N=>a.$emit("save-field","remark"),["enter"])),class:"group-input-edit"},null,8,["model-value"]),e.createElementVNode("div",Cs,[e.createVNode(e.unref(L),{size:"small",onClick:r[15]||(r[15]=N=>a.$emit("cancel-edit","remark"))},{default:e.withCtx(()=>[...r[34]||(r[34]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{size:"small",type:"primary",onClick:r[16]||(r[16]=N=>a.$emit("save-field","remark"))},{default:e.withCtx(()=>[...r[35]||(r[35]=[e.createTextVNode("保存",-1)])]),_:1})])])):(e.openBlock(),e.createElementBlock("div",{key:1,class:"group-setting-value",onClick:r[17]||(r[17]=N=>a.$emit("start-edit","remark"))},[e.createElementVNode("span",ws,e.toDisplayString(((B=n.currentGroupInfo)==null?void 0:B.remark)||"仅自己可见"),1),e.createElementVNode("span",Vs,[e.createVNode(e.unref(Te))])]))])])):(e.openBlock(),e.createElementBlock("div",bs,[r[37]||(r[37]=e.createElementVNode("span",{class:"group-setting-label"},"备注",-1)),e.createElementVNode("span",Ns,e.toDisplayString(((y=n.currentGroupInfo)==null?void 0:y.remark)||"群聊的备注仅自己可见"),1)])),e.createElementVNode("div",{class:"group-setting-item",onClick:r[18]||(r[18]=N=>a.$emit("edit-my-nick"))},[r[38]||(r[38]=e.createElementVNode("span",{class:"group-setting-label"},"我在本群的昵称",-1)),e.createElementVNode("div",Es,[e.createElementVNode("span",$s,e.toDisplayString(n.myNicknameInGroup||n.myUsername),1),e.createVNode(e.unref(Te))])]),r[44]||(r[44]=e.createElementVNode("div",{class:"group-divider"},null,-1)),e.createElementVNode("div",Bs,[r[39]||(r[39]=e.createElementVNode("span",{class:"group-setting-label"},"查找聊天内容",-1)),e.createVNode(e.unref(ft))]),e.createElementVNode("div",xs,[r[40]||(r[40]=e.createElementVNode("span",{class:"group-setting-label"},"消息免打扰",-1)),e.createVNode(e.unref(Yo),{"model-value":n.muteGroup,"onUpdate:modelValue":r[19]||(r[19]=N=>a.$emit("update:muteGroup",N))},null,8,["model-value"])]),r[45]||(r[45]=e.createElementVNode("div",{class:"group-divider"},null,-1)),o.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:6},[e.createElementVNode("div",{class:"group-setting-item",onClick:r[20]||(r[20]=N=>a.$emit("show-group-detail"))},[r[41]||(r[41]=e.createElementVNode("span",{class:"group-setting-label"},"转让群主",-1)),e.createVNode(e.unref(ft))]),e.createElementVNode("div",{class:"group-setting-item danger",onClick:r[21]||(r[21]=N=>a.$emit("delete-group"))},[...r[42]||(r[42]=[e.createElementVNode("span",{class:"group-setting-label"},"解散群聊",-1)])])],64)):(e.openBlock(),e.createElementBlock("div",{key:7,class:"group-setting-item danger",onClick:r[22]||(r[22]=N=>a.$emit("quit-group"))},[...r[43]||(r[43]=[e.createElementVNode("span",{class:"group-setting-label"},"删除并退出",-1)])]))])])])):e.createCommentVNode("",!0)]}),_:1}))}},[["__scopeId","data-v-accb0452"]]),Ms={class:"add-friend-search-wrapper"},_s={class:"add-friend-users-list"},Gs={class:"add-friend-user-info"},Ts=["src","alt"],Us={class:"add-friend-user-name"},Ls=M({__name:"AddFriendDialog",props:{visible:Boolean,searchText:String,loading:Boolean,users:Array},emits:["update:visible","update:searchText","add"],setup(n){return(t,o)=>(e.openBlock(),e.createBlock(e.unref(pe),{"model-value":n.visible,"onUpdate:modelValue":o[1]||(o[1]=a=>t.$emit("update:visible",a)),title:"添加好友",width:"500px"},{default:e.withCtx(()=>[e.createElementVNode("div",Ms,[e.createVNode(e.unref(re),{"model-value":n.searchText,"onUpdate:modelValue":o[0]||(o[0]=a=>t.$emit("update:searchText",a)),placeholder:"搜索用户",class:"add-friend-search-input"},{prefix:e.withCtx(()=>[e.createVNode(e.unref(pt))]),_:1},8,["model-value"])]),e.createElementVNode("div",_s,[n.loading?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"加载中..."})):n.users.length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:1,description:"暂无用户"})):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(n.users,a=>(e.openBlock(),e.createElementBlock("div",{key:a.username,class:"add-friend-user-item"},[e.createElementVNode("div",Gs,[e.createElementVNode("img",{src:`https://api.dicebear.com/7.x/avataaars/svg?seed=${a.username}`,alt:a.username,class:"add-friend-user-avatar"},null,8,Ts),e.createElementVNode("div",Us,e.toDisplayString(a.username),1)]),e.createVNode(e.unref(L),{type:"primary",size:"small",onClick:r=>t.$emit("add",a)},{default:e.withCtx(()=>[...o[2]||(o[2]=[e.createTextVNode("添加",-1)])]),_:1},8,["onClick"])]))),128))])]),_:1},8,["model-value"]))}},[["__scopeId","data-v-94131e2a"]]),Is={class:"create-group-form"},Fs={class:"form-item"},As={class:"form-item"},Ds={class:"form-item"},zs={class:"member-selection"},Rs={key:1,class:"member-list"},js=["onClick"],Hs=["src","alt"],Ks={class:"member-name"},Os=M({__name:"CreateGroupDialog",props:{visible:Boolean,groupName:String,groupRemark:String,friendList:Array,selectedMembers:Array},emits:["update:visible","update:groupName","update:groupRemark","toggle-member","create"],setup(n){const t=n,o=a=>t.selectedMembers.some(r=>r.id===a.id);return(a,r)=>(e.openBlock(),e.createBlock(e.unref(pe),{"model-value":n.visible,"onUpdate:modelValue":r[4]||(r[4]=u=>a.$emit("update:visible",u)),title:"创建群聊",width:"600px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(L),{onClick:r[2]||(r[2]=u=>a.$emit("update:visible",!1))},{default:e.withCtx(()=>[...r[8]||(r[8]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"primary",onClick:r[3]||(r[3]=u=>a.$emit("create")),disabled:!n.groupName.trim()},{default:e.withCtx(()=>[...r[9]||(r[9]=[e.createTextVNode("创建",-1)])]),_:1},8,["disabled"])]),default:e.withCtx(()=>[e.createElementVNode("div",Is,[e.createElementVNode("div",Fs,[r[5]||(r[5]=e.createElementVNode("label",{class:"form-label"},"群名称",-1)),e.createVNode(e.unref(re),{"model-value":n.groupName,"onUpdate:modelValue":r[0]||(r[0]=u=>a.$emit("update:groupName",u)),placeholder:"请输入群名称",maxlength:"50"},null,8,["model-value"])]),e.createElementVNode("div",As,[r[6]||(r[6]=e.createElementVNode("label",{class:"form-label"},"群备注",-1)),e.createVNode(e.unref(re),{"model-value":n.groupRemark,"onUpdate:modelValue":r[1]||(r[1]=u=>a.$emit("update:groupRemark",u)),type:"textarea",placeholder:"请输入群备注(可选)",rows:3,maxlength:"200"},null,8,["model-value"])]),e.createElementVNode("div",Ds,[r[7]||(r[7]=e.createElementVNode("label",{class:"form-label"},"选择成员",-1)),e.createElementVNode("div",zs,[n.friendList.length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"暂无好友可以添加"})):(e.openBlock(),e.createElementBlock("div",Rs,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(n.friendList,u=>(e.openBlock(),e.createElementBlock("div",{key:u.id,class:e.normalizeClass(["member-item",o(u)?"member-selected":""]),onClick:C=>a.$emit("toggle-member",u)},[e.createElementVNode("img",{src:u.avatar,alt:u.name,class:"member-avatar"},null,8,Hs),e.createElementVNode("span",Ks,e.toDisplayString(u.name),1),o(u)?(e.openBlock(),e.createBlock(e.unref(yt),{key:0,class:"member-check"})):e.createCommentVNode("",!0)],10,js))),128))]))])])])]),_:1},8,["model-value"]))}},[["__scopeId","data-v-46fdad2b"]]),Ws={class:"group-detail-content"},qs={class:"group-info-section"},Ys={class:"group-info-item"},Xs={class:"info-value"},Ps={class:"group-info-item"},Zs={class:"info-value"},Qs={class:"group-info-item"},Js={class:"info-value"},vs={key:0,class:"group-actions-section"},el={class:"group-actions-list"},tl={class:"group-members-section"},nl={class:"section-header"},ol={class:"group-members-list"},rl=["src","alt"],al={class:"group-member-info"},sl={class:"group-member-name"},ll={key:0,class:"group-member-badge"},il={key:0,class:"group-member-actions"},cl={key:1,class:"group-member-actions"},dl=M({__name:"GroupDetailDialog",props:{visible:Boolean,currentSelectGroup:Object,groupMemberList:Array,myUsername:String,config:Object,groupOwnerUsername:String},emits:["update:visible","edit-info","delete","invite","edit-member-nick","remove-member","transfer-owner","quit"],setup(n){const t=n,o=e.computed(()=>{var u;if(console.log("[GroupDetailDialog] 检查群主身份:",{myUsername:t.myUsername,groupMemberCount:(u=t.groupMemberList)==null?void 0:u.length}),!t.groupMemberList||t.groupMemberList.length===0)return console.log("[GroupDetailDialog] 无成员列表为空"),!1;const a=t.groupMemberList.find(C=>C.username===t.myUsername);console.log("[GroupDetailDialog] 当前用户在群成员:",a);const r=(a==null?void 0:a.memberType)===0;return console.log("[GroupDetailDialog] 是否群主:",r),r});return(a,r)=>{var u;return e.openBlock(),e.createBlock(e.unref(pe),{"model-value":n.visible,"onUpdate:modelValue":r[5]||(r[5]=C=>a.$emit("update:visible",C)),title:(u=n.currentSelectGroup)==null?void 0:u.name,width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(L),{onClick:r[3]||(r[3]=C=>a.$emit("update:visible",!1))},{default:e.withCtx(()=>[...r[18]||(r[18]=[e.createTextVNode("关闭",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"danger",onClick:r[4]||(r[4]=C=>a.$emit("quit"))},{default:e.withCtx(()=>[...r[19]||(r[19]=[e.createTextVNode("退出群聊",-1)])]),_:1})]),default:e.withCtx(()=>{var C,V;return[e.createElementVNode("div",Ws,[e.createElementVNode("div",qs,[e.createElementVNode("div",Ys,[r[6]||(r[6]=e.createElementVNode("span",{class:"info-label"},"群ID",-1)),e.createElementVNode("span",Xs,e.toDisplayString((C=n.currentSelectGroup)==null?void 0:C.groupId),1)]),e.createElementVNode("div",Ps,[r[7]||(r[7]=e.createElementVNode("span",{class:"info-label"},"群主",-1)),e.createElementVNode("span",Zs,e.toDisplayString(n.groupOwnerUsername||((V=n.currentSelectGroup)==null?void 0:V.owner)),1)]),e.createElementVNode("div",Qs,[r[8]||(r[8]=e.createElementVNode("span",{class:"info-label"},"成员数",-1)),e.createElementVNode("span",Js,e.toDisplayString(n.groupMemberList.length),1)])]),o.value?(e.openBlock(),e.createElementBlock("div",vs,[r[11]||(r[11]=e.createElementVNode("div",{class:"section-header"},[e.createElementVNode("span",{class:"section-title"},"群管理")],-1)),e.createElementVNode("div",el,[e.createVNode(e.unref(L),{type:"primary",size:"small",onClick:r[0]||(r[0]=f=>a.$emit("edit-info"))},{icon:e.withCtx(()=>[e.createVNode(e.unref(Te))]),default:e.withCtx(()=>[r[9]||(r[9]=e.createTextVNode("编辑群信息 ",-1))]),_:1}),e.createVNode(e.unref(L),{type:"danger",size:"small",onClick:r[1]||(r[1]=f=>a.$emit("delete"))},{icon:e.withCtx(()=>[e.createVNode(e.unref(Nn))]),default:e.withCtx(()=>[r[10]||(r[10]=e.createTextVNode("解散群聊 ",-1))]),_:1})])])):e.createCommentVNode("",!0),e.createElementVNode("div",tl,[e.createElementVNode("div",nl,[r[13]||(r[13]=e.createElementVNode("span",{class:"section-title"},"群成员",-1)),e.createVNode(e.unref(L),{size:"small",onClick:r[2]||(r[2]=f=>a.$emit("invite"))},{icon:e.withCtx(()=>[e.createVNode(e.unref(Vt))]),default:e.withCtx(()=>[r[12]||(r[12]=e.createTextVNode("邀请成员 ",-1))]),_:1})]),e.createElementVNode("div",ol,[n.groupMemberList.length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"暂无成员"})):(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(n.groupMemberList,f=>{var g;return e.openBlock(),e.createElementBlock("div",{key:f.id||f.username,class:"group-member-item"},[e.createElementVNode("img",{src:f.avatar?`${n.config.api.baseUrl}${f.avatar}`:`https://api.dicebear.com/7.x/avataaars/svg?seed=${f.username}`,alt:f.username,class:"group-member-avatar"},null,8,rl),e.createElementVNode("div",al,[e.createElementVNode("span",sl,e.toDisplayString(f.memberNick||f.username),1),f.memberType===0||f.username===n.groupOwnerUsername||f.username===((g=n.currentSelectGroup)==null?void 0:g.owner)?(e.openBlock(),e.createElementBlock("span",ll,"群主")):e.createCommentVNode("",!0)]),o.value&&f.username!==n.myUsername?(e.openBlock(),e.createElementBlock("div",il,[e.createVNode(e.unref(L),{size:"small",link:"",onClick:l=>a.$emit("edit-member-nick",f)},{default:e.withCtx(()=>[...r[14]||(r[14]=[e.createTextVNode(" 改昵称 ",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(L),{size:"small",link:"",type:"danger",onClick:l=>a.$emit("remove-member",f.username)},{default:e.withCtx(()=>[...r[15]||(r[15]=[e.createTextVNode(" 移除 ",-1)])]),_:1},8,["onClick"]),e.createVNode(e.unref(L),{size:"small",link:"",type:"warning",onClick:l=>a.$emit("transfer-owner",f.username)},{default:e.withCtx(()=>[...r[16]||(r[16]=[e.createTextVNode(" 转让 ",-1)])]),_:1},8,["onClick"])])):f.username===n.myUsername?(e.openBlock(),e.createElementBlock("div",cl,[e.createVNode(e.unref(L),{size:"small",link:"",onClick:l=>a.$emit("edit-member-nick",f)},{default:e.withCtx(()=>[...r[17]||(r[17]=[e.createTextVNode(" 改昵称 ",-1)])]),_:1},8,["onClick"])])):e.createCommentVNode("",!0)])}),128))])])])]}),_:1},8,["model-value","title"])}}},[["__scopeId","data-v-f04ac2b6"]]),ml=M({__name:"ContextMenu",props:{visible:{type:Boolean,default:!1},x:{type:Number,default:0},y:{type:Number,default:0}},setup(n){return(t,o)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body"},[n.visible?(e.openBlock(),e.createElementBlock("div",{key:0,class:"context-menu",style:e.normalizeStyle({left:n.x+"px",top:n.y+"px"})},[e.renderSlot(t.$slots,"default",{},void 0,!0)],4)):e.createCommentVNode("",!0)]))}},[["__scopeId","data-v-299f018b"]]),pl=["data-theme"],ul={key:0,class:"pending-files-area"},fl={key:0,class:"pending-image-wrapper"},gl=["src","alt"],hl=["onClick"],kl={key:1,class:"pending-file-wrapper"},yl={class:"pending-file-icon"},Cl={class:"pending-file-name"},wl=["onClick"],Vl={key:1,class:"input-toolbar"},bl={class:"emoji-button-wrapper"},Nl={class:"input-toolbar-icon"},El={class:"input-textarea-wrapper"},$l=["onKeydown"],Bl={class:"input-send-wrapper"},xl={key:0,class:"chat-detail-panel"},Sl={class:"chat-detail-content"},Ml={class:"chat-detail-profile"},_l=["src","alt"],Gl={class:"chat-detail-name"},Tl={class:"edit-group-form"},Ul={class:"form-item"},Ll={class:"form-item"},Il={class:"form-item"},Fl={class:"edit-member-nick-form"},Al={class:"form-item"},Dl={class:"form-item"},zl={class:"msg-read-users-content"},Rl={class:"read-users-section"},jl={class:"section-title"},Hl={class:"users-list"},Kl={key:1,class:"users-tag-list"},Ol={class:"unread-users-section"},Wl={class:"section-title"},ql={class:"users-list"},Yl={key:1,class:"users-tag-list"},Xl={class:"invite-member-content"},Pl={class:"invite-member-list"},Zl={class:"member-list"},Ql=["onClick"],Jl=["src","alt"],vl={class:"member-name"},ei={class:"chat-settings-container"},ti={class:"chat-settings-avatar-section"},ni={class:"chat-settings-avatar-wrapper"},oi=["src"],ri={size:18,class:"chat-settings-avatar-icon"},ai={class:"chat-settings-user-display"},si={class:"chat-settings-nickname"},li={class:"chat-settings-username"},ii={class:"chat-settings-form-section"},ci={class:"chat-settings-form-header"},di={class:"chat-settings-form-title"},mi={class:"chat-settings-form"},pi={class:"theme-options"},ui=["onClick"],fi={class:"theme-option-icon"},gi={class:"theme-option-label"},hi={class:"chat-settings-form-section"},ki={class:"chat-settings-form-header"},yi={class:"chat-settings-form-title"},Ci={class:"chat-settings-form"},wi={class:"chat-settings-form-item"},Vi={key:1,class:"chat-settings-form-value"},bi={class:"chat-settings-form-item"},Ni={key:1,class:"chat-settings-form-value"},Ei={class:"chat-settings-form-item"},$i={key:1,class:"chat-settings-form-value"},Bi={class:"chat-settings-form-item"},xi={key:1,class:"chat-settings-form-value bio-value"},Si={key:0,class:"chat-settings-form-actions"},Mt=M({__name:"ChatPanel",props:{config:{type:Object,required:!0},groupOwnerUsername:{type:String,default:""}},emits:["message","send","error","init"],setup(n,{emit:t}){const o={success:d=>console.log("Success:",d),warning:d=>console.warn("Warning:",d),error:d=>console.error("Error:",d),info:d=>console.info("Info:",d)},a=Fo(),r=n,u=t,{currentTheme:C,appliedTheme:V,setTheme:f,THEMES:g}=xt(),l={sun:On,moon:Xn,monitor:Jn},c=$t.map(d=>({...d,iconComponent:l[d.icon]})),{myUsername:w,myAvatar:B,userInfo:y,loadingUserInfo:N,friendList:R,filteredFriendList:j,searchText:E,inputText:Z,messagesContainer:ne,filteredUsers:ee,filteredAvailableUsers:J,currentUser:_,currentMessages:A,addFriendDialogVisible:z,addFriendSearchText:le,availableUsers:Ve,loadingAvailableUsers:v,friendApplyList:b,loadingFriendApply:x,activeTab:H,groupList:W,chatList:K,currentSelectGroup:S,groupMsgList:I,groupMemberList:O,createGroupDialogVisible:Y,groupDetailVisible:m,newGroupName:k,newGroupRemark:$,selectedMembersForCreate:G,inviteMemberDialogVisible:D,selectedMembersForInvite:X,filteredGroupList:q,currentChatTarget:ie,currentGroupMessages:Ce,currentAllMessages:ge,groupInfoVisible:Ue,editingGroupInfo:we,isRemoveMemberMode:Be,editingMemberNick:Le,memberNickDialogVisible:xe,msgReadUserDialogVisible:Ie,currentMsgReadList:he,currentGroupInfo:Qe,editingFields:Je,tempEditValues:Re,formatTime:ve,formatLastTime:et,scrollToBottom:Tt,getFriendList:je,getChatHistory:Gi,setFriendToChatStatus:tt,selectUser:Ut,sendMessage:Ti,sendFile:i,sendFilesAndText:p,initWebSocket:U,closeWebSocket:Q,reset:ae,openAddFriendDialog:Se,addFriend:be,loadFriendApplyList:nt,agreeFriend:ot,updateMyAvatar:Ui,getGroupList:Li,getGroupHistory:Zc,getGroupMembers:Qc,selectGroup:Ii,createGroup:Fi,inviteGroupMember:Ai,quitGroup:Di,sendGroupMessage:Jc,sendGroupFile:vc,sendGroupFilesAndText:zi,switchTab:ed,getGroupUnreadCount:td,getMsgReadUserList:nd,updateGroupInfo:Ri,updateMemberNick:ji,deleteGroup:Hi,removeGroupMember:Ki,transferGroupOwner:Oi,readSingleGroupMsg:od,readAllGroupMsg:rd,openEditGroupInfo:Wi,openEditMemberNick:rt,fetchGroupDetail:qi,updateSingleGroupField:ad,startEditField:Yi,cancelEditField:Xi,saveEditField:Pi,setGroupToChatStatus:at}=Et(r.config,d=>{u("message",d)}),Zi=e.computed(()=>{var s;const d=[{id:"chat",icon:ht,badge:0}];return(r.config.modules.friends||r.config.modules.groups)&&d.push({id:"contacts",icon:Ye,badge:0}),r.config.modules.apply&&d.push({id:"apply",icon:mo,badge:((s=b.value)==null?void 0:s.length)||0}),d}),Me=e.ref("chat"),Ne=e.ref(null),fe=e.ref(null),ke=e.ref(null),ce=e.ref(null),Fe=e.ref(!1),ye=e.ref(!1),de=e.ref({nickname:"",email:"",phone:"",bio:""}),st=e.ref(!1),He=e.ref(!1),Ke=e.ref(!1),Lt=e.ref(!1),Oe=e.ref(null),lt=e.ref(""),We=e.ref(null),me=e.ref([]),Ee=e.ref({visible:!1,x:0,y:0,chat:null}),Ae=e.ref(!1);e.ref(!1),e.ref(!1);const Qi=e.ref(null),It=e.computed(()=>{const d=ee.value.map(F=>({...F,type:"friend"})),s=K.value.map(F=>{const te=(F.groupAvatarList||[]).map((Mc,_c)=>({username:`member-${_c}`,avatar:`${r.config.api.baseUrl}${Mc}`})).slice(0,4),h=F.lastMsgContent||"暂无消息",se=F.lastMsgSender||"",mt=F.unreadCount||0,Sc=F.lastMsgTime;return{id:F.groupId,groupId:F.groupId,name:F.groupName,avatar:`https://api.dicebear.com/7.x/avataaars/svg?seed=${F.groupId}`,memberAvatars:te,lastMsg:h,lastMsgSender:se,lastTime:Sc,unread:mt,type:"group"}});return[...d,...s].sort((F,te)=>F.lastTime?te.lastTime?new Date(te.lastTime)-new Date(F.lastTime):-1:1)}),_e=e.ref(!1),Ft=e.ref(!1);e.ref(null),e.watch(_e,d=>{d&&S.value&&qi(S.value.groupId)});const Ji=e.computed(()=>{const d=O.value.find(s=>s.username===w);return(d==null?void 0:d.memberNick)||""}),vi=()=>{const d=O.value.find(s=>s.username===w);d&&rt(d)},ec=(d,s)=>{d.preventDefault(),d.stopPropagation(),Ee.value={visible:!0,x:d.clientX,y:d.clientY,chat:s}},it=()=>{Ee.value.visible=!1},tc=async()=>{var s;if(!Ee.value.chat)return;const d=Ee.value.chat;try{const T=d.type==="group"?`确定要删除与「${d.name}」的群聊吗?`:`确定要删除与「${d.name}」的聊天吗?`;await a.confirm(T,"删除聊天",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"});let F=!1;d.type==="group"?(F=await at(d.groupId,0),F&&((s=S.value)==null?void 0:s.groupId)===d.groupId&&(S.value=null,ce.value=null)):(F=await tt(d.id,0),F&&Ne.value===d.id&&(Ne.value=null,fe.value=null)),F&&o.success("删除聊天成功")}catch(T){T!=="cancel"&&(console.error("删除聊天失败:",T),o.error("删除聊天失败"))}it()},ct=d=>{Ne.value=d.id,fe.value=d,ke.value=null,S.value=null,Fe.value=!1,m.value=!1,Ut({id:d.id,name:d.name,avatar:d.avatar,online:d.online})},nc=d=>{ke.value=d,ce.value=null,Ne.value=null,fe.value=null,S.value=null},oc=d=>{ce.value=d,ke.value=null,Ne.value=null,fe.value=null,S.value=null},rc=async()=>{if(!ke.value)return;if(await tt(ke.value.id)){Me.value="chat",await e.nextTick();const s=ee.value.find(T=>T.id===ke.value.id);s&&ct(s),ke.value=null}},ac=async()=>{if(!ce.value)return;if(await at(ce.value.groupId,1)){Me.value="chat",await e.nextTick();const s=It.value.find(T=>T.type==="group"&&T.groupId===ce.value.groupId);dt(s||ce.value),ce.value=null}},dt=async d=>{S.value=d,Ne.value=null,fe.value=null,ke.value=null,ce.value=null,Fe.value=!1,m.value=!1,K.value.some(T=>T.groupId===d.groupId)||await at(d.groupId,1),Ii(d)},sc=()=>{He.value=!0},lc=()=>{var d;(d=Oe.value)==null||d.click()},ic=()=>{var d;(d=We.value)==null||d.click()},cc=d=>{const s=Array.from(d.target.files||[]);if(s.length!==0){for(const T of s){if(T.size>50*1024*1024){o.warning(`文件 ${T.name} 超过50MB,已跳过`);continue}const F=URL.createObjectURL(T);me.value.push({id:Date.now()+Math.random(),file:T,name:T.name,size:T.size,type:T.type,previewUrl:F,isImage:T.type.startsWith("image/")})}We.value&&(We.value.value="")}},At=d=>{const s=me.value[d];s.previewUrl&&URL.revokeObjectURL(s.previewUrl),me.value.splice(d,1)},dc=d=>{if(d===0)return"0 B";const s=1024,T=["B","KB","MB","GB"],F=Math.floor(Math.log(d)/Math.log(s));return parseFloat((d/Math.pow(s,F)).toFixed(2))+" "+T[F]},Dt=async()=>{if(!Z.value.trim()&&me.value.length===0)return;const d=[...me.value],s=Z.value;Z.value="",me.value.forEach(T=>{T.previewUrl&&URL.revokeObjectURL(T.previewUrl)}),me.value=[],S.value?await zi(d,s):await p(d,s),u("send",{text:s,files:d})},mc=d=>{var T;const s=(T=d.clipboardData)==null?void 0:T.items;if(s){for(const F of s)if(F.kind==="file"){const te=F.getAsFile();if(te){if(te.size>50*1024*1024){o.warning(`文件 ${te.name} 超过50MB,已跳过`);continue}const h=URL.createObjectURL(te);me.value.push({id:Date.now()+Math.random(),file:te,name:te.name,size:te.size,type:te.type,previewUrl:h,isImage:te.type.startsWith("image/")})}}}},pc=d=>{if(!d){o.warning("文件地址无效");return}window.open(d,"_blank")},uc=d=>{Z.value+=d,Ae.value=!1},fc=d=>{const s=G.value.findIndex(T=>T.id===d.id);s!==-1?G.value.splice(s,1):G.value.push(d)},gc=d=>{const s=X.value.findIndex(T=>T.id===d.id);s!==-1?X.value.splice(s,1):X.value.push(d)},hc=async()=>{await Fi()},kc=async()=>{await Ai()},zt=async()=>{await Di()},Rt=async()=>{await Hi(),_e.value=!1},yc=async d=>{try{await Pi(d)}catch(s){console.error("保存失败",s)}},Cc=async()=>{try{await ji()&&(xe.value=!1)}catch(d){console.error("修改失败",d)}},jt=async d=>{try{await a.confirm(`确定要将成员“${d}”移出群聊吗?`,"移除成员",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),await Ki(d,!1)&&o.success("移除成功")}catch(s){s!=="cancel"&&(console.error("移除失败",s),o.error("移除失败"))}},wc=async d=>{try{await Oi(d)}catch(s){console.error("转让失败",s)}},Vc=async()=>{await Ri()},bc=d=>{const s=d.target.files[0];if(!s)return;if(!s.type.startsWith("image/")){console.error("只能上传图片文件");return}if(s.size>5*1024*1024){console.error("图片大小不能超过 5MB");return}const T=new FileReader;T.onload=F=>{lt.value=F.target.result,Ke.value=!0},T.readAsDataURL(s)},Nc=async({file:d})=>{if(d){Lt.value=!0;try{const{ChatApi:s}=await Promise.resolve().then(()=>ho),F=await new s(r.config).uploadAvatar(d,w);F.code===200&&(Ui(F.data),Ec())}catch(s){console.error(s)}finally{Lt.value=!1}}},Ec=()=>{lt.value="",Ke.value=!1,Oe.value&&(Oe.value.value="")},$c=()=>{de.value={nickname:y.value.nickname||"",email:y.value.email||"",phone:y.value.phone||"",bio:y.value.bio||""},ye.value=!0},Bc=()=>{ye.value=!1,de.value={nickname:"",email:"",phone:"",bio:""}},xc=async()=>{st.value=!0;try{await updateUserInfo(de.value)&&(ye.value=!1)}catch(d){console.error(d)}finally{st.value=!1}};return e.onMounted(async()=>{const d=[je(),nt()];r.config.modules.groups&&d.push(Li()),await Promise.all(d),U(),ee.value.length>0&&ct(ee.value[0]),u("init"),document.addEventListener("click",it)}),e.onUnmounted(()=>{ae(),Q(),document.removeEventListener("click",it)}),(d,s)=>{var T,F,te;return e.openBlock(),e.createElementBlock("div",{class:"chat-panel","data-theme":e.unref(V)},[e.createVNode(pr,{"my-avatar":e.unref(B),"nav-tabs":Zi.value,"current-nav-tab":Me.value,"onUpdate:currentNavTab":s[0]||(s[0]=h=>Me.value=h),config:n.config,onAvatarClick:sc,onSettingsClick:s[1]||(s[1]=h=>He.value=!0)},null,8,["my-avatar","nav-tabs","current-nav-tab","config"]),e.createVNode(ra,{"search-text":e.unref(E),"onUpdate:searchText":s[2]||(s[2]=h=>e.isRef(E)?E.value=h:null),"current-nav-tab":Me.value,config:n.config,"combined-chat-list":It.value,"filtered-friend-list":e.unref(j),"filtered-group-list":e.unref(q),"current-chat-id":Ne.value,"current-select-group":e.unref(S),"current-selected-group":ce.value,"loading-friend-apply":e.unref(x),"friend-apply-list":e.unref(b),"format-last-time":e.unref(et),onAddFriend:e.unref(Se),onCreateGroup:s[3]||(s[3]=h=>Y.value=!0),onSelectChat:ct,onSelectGroupChat:dt,onSelectFriend:nc,onSelectGroup:oc,onAgreeFriend:e.unref(ot),onContextmenu:ec},null,8,["search-text","current-nav-tab","config","combined-chat-list","filtered-friend-list","filtered-group-list","current-chat-id","current-select-group","current-selected-group","loading-friend-apply","friend-apply-list","format-last-time","onAddFriend","onAgreeFriend"]),e.createVNode(ka,{"current-selected-friend":ke.value,"current-selected-group":ce.value,"current-chat":fe.value,"current-select-group":e.unref(S),"current-nav-tab":Me.value,onStartChat:rc,onStartGroupChat:ac},{"chat-window":e.withCtx(()=>[e.createVNode(Da,{ref_key:"chatWindowRef",ref:Qi,"current-chat":fe.value,"current-select-group":e.unref(S),"group-member-list":e.unref(O),messages:e.unref(S)?e.unref(Ce):e.unref(A),"format-time":e.unref(ve),"format-file-size":dc,onToggleGroupSidebar:s[6]||(s[6]=h=>_e.value=!_e.value),onToggleChatDetail:s[7]||(s[7]=h=>Fe.value=!Fe.value),onOpenFile:pc,onHideEmoji:s[8]||(s[8]=h=>Ae.value=!1)},{"input-area":e.withCtx(()=>[me.value.length>0?(e.openBlock(),e.createElementBlock("div",ul,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(me.value,(h,se)=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:"pending-file-item"},[h.isImage?(e.openBlock(),e.createElementBlock("div",fl,[e.createElementVNode("img",{src:h.previewUrl,alt:h.name,class:"pending-image"},null,8,gl),e.createElementVNode("button",{onClick:mt=>At(se),class:"pending-file-remove-btn"},"×",8,hl)])):(e.openBlock(),e.createElementBlock("div",kl,[e.createElementVNode("span",yl,[e.createVNode(e.unref(gt))]),e.createElementVNode("span",Cl,e.toDisplayString(h.name),1),e.createElementVNode("button",{onClick:mt=>At(se),class:"pending-file-remove-btn"},"×",8,wl)]))]))),128))])):e.createCommentVNode("",!0),n.config.modules.fileUpload?(e.openBlock(),e.createElementBlock("div",Vl,[e.createElementVNode("div",bl,[e.createElementVNode("span",{class:"input-toolbar-icon",onClick:s[4]||(s[4]=e.withModifiers(h=>Ae.value=!Ae.value,["stop"]))},[e.createVNode(e.unref(ht))]),e.createVNode(ar,{visible:Ae.value,onSelect:uc},null,8,["visible"])]),e.createElementVNode("span",{class:"input-toolbar-icon",onClick:ic},[e.createVNode(e.unref(gt))]),e.createElementVNode("span",Nl,[e.createVNode(e.unref(so))])])):e.createCommentVNode("",!0),e.createElementVNode("div",El,[e.withDirectives(e.createElementVNode("textarea",{"onUpdate:modelValue":s[5]||(s[5]=h=>e.isRef(Z)?Z.value=h:null),onKeydown:e.withKeys(e.withModifiers(Dt,["prevent"]),["enter"]),onPaste:mc,placeholder:"输入消息或粘贴文件...",class:"message-input-textarea",rows:"3"},null,40,$l),[[e.vModelText,e.unref(Z)]])]),e.createElementVNode("div",Bl,[e.createVNode(e.unref(L),{type:"primary",disabled:!e.unref(Z).trim()&&me.value.length===0,onClick:Dt,class:"send-message-btn"},{default:e.withCtx(()=>[...s[40]||(s[40]=[e.createTextVNode("发送",-1)])]),_:1},8,["disabled"])]),e.createElementVNode("input",{ref_key:"fileInputRef",ref:We,type:"file",multiple:"",class:"hidden-file-input",onChange:cc},null,544)]),_:1},8,["current-chat","current-select-group","group-member-list","messages","format-time"])]),_:1},8,["current-selected-friend","current-selected-group","current-chat","current-select-group","current-nav-tab"]),e.createVNode(Ss,{visible:_e.value&&!!e.unref(S),"current-select-group":e.unref(S),"group-member-list":e.unref(O),"is-remove-member-mode":e.unref(Be),config:n.config,"my-username":e.unref(w),"editing-fields":e.unref(Je),"temp-edit-values":e.unref(Re),"current-group-info":e.unref(Qe),"my-nickname-in-group":Ji.value,"group-owner-username":n.groupOwnerUsername,"mute-group":Ft.value,"onUpdate:muteGroup":s[9]||(s[9]=h=>Ft.value=h),onClose:s[10]||(s[10]=h=>_e.value=!1),onRemoveMember:jt,onEditMemberNick:e.unref(rt),onInviteMember:s[11]||(s[11]=h=>{D.value=!0,Be.value=!1}),onToggleRemoveMode:s[12]||(s[12]=h=>Be.value=!e.unref(Be)),onStartEdit:e.unref(Yi),onCancelEdit:e.unref(Xi),onSaveField:yc,"onUpdate:tempEditValue":s[13]||(s[13]=({field:h,value:se})=>e.unref(Re)[h]=se),onEditMyNick:vi,onShowGroupDetail:s[14]||(s[14]=h=>m.value=!0),onDeleteGroup:Rt,onQuitGroup:zt},null,8,["visible","current-select-group","group-member-list","is-remove-member-mode","config","my-username","editing-fields","temp-edit-values","current-group-info","my-nickname-in-group","group-owner-username","mute-group","onEditMemberNick","onStartEdit","onCancelEdit"]),Fe.value?(e.openBlock(),e.createElementBlock("div",xl,[s[42]||(s[42]=e.createElementVNode("div",{class:"chat-detail-header"},"聊天详情",-1)),e.createElementVNode("div",Sl,[e.createElementVNode("div",Ml,[e.createElementVNode("img",{src:(T=fe.value)==null?void 0:T.avatar,alt:(F=fe.value)==null?void 0:F.name,class:"chat-detail-avatar"},null,8,_l),e.createElementVNode("div",Gl,e.toDisplayString((te=fe.value)==null?void 0:te.name),1),s[41]||(s[41]=e.createElementVNode("div",{class:"chat-detail-actions"},[e.createElementVNode("div",{class:"chat-detail-action-item"},"查找聊天记录"),e.createElementVNode("div",{class:"chat-detail-action-item"},"清空聊天记录")],-1))])])])):e.createCommentVNode("",!0),e.createVNode(Ls,{visible:e.unref(z),"onUpdate:visible":s[15]||(s[15]=h=>e.isRef(z)?z.value=h:null),"search-text":e.unref(le),"onUpdate:searchText":s[16]||(s[16]=h=>e.isRef(le)?le.value=h:null),loading:e.unref(v),users:e.unref(J),onAdd:e.unref(be)},null,8,["visible","search-text","loading","users","onAdd"]),e.createVNode(Os,{visible:e.unref(Y),"onUpdate:visible":s[17]||(s[17]=h=>e.isRef(Y)?Y.value=h:null),"group-name":e.unref(k),"onUpdate:groupName":s[18]||(s[18]=h=>e.isRef(k)?k.value=h:null),"group-remark":e.unref($),"onUpdate:groupRemark":s[19]||(s[19]=h=>e.isRef($)?$.value=h:null),"friend-list":e.unref(j),"selected-members":e.unref(G),onToggleMember:fc,onCreate:hc},null,8,["visible","group-name","group-remark","friend-list","selected-members"]),e.unref(S)?(e.openBlock(),e.createBlock(dl,{key:1,visible:e.unref(m),"onUpdate:visible":s[20]||(s[20]=h=>e.isRef(m)?m.value=h:null),"current-select-group":e.unref(S),"group-member-list":e.unref(O),"my-username":e.unref(w),config:n.config,"group-owner-username":n.groupOwnerUsername,onEditInfo:e.unref(Wi),onDelete:Rt,onInvite:s[21]||(s[21]=h=>D.value=!0),onEditMemberNick:e.unref(rt),onRemoveMember:jt,onTransferOwner:wc,onQuit:zt},null,8,["visible","current-select-group","group-member-list","my-username","config","group-owner-username","onEditInfo","onEditMemberNick"])):e.createCommentVNode("",!0),e.unref(S)?(e.openBlock(),e.createBlock(e.unref(pe),{key:2,"model-value":e.unref(Ue),"onUpdate:modelValue":s[26]||(s[26]=h=>Ue.value=h),title:"编辑群信息",width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(L),{onClick:s[25]||(s[25]=h=>Ue.value=!1)},{default:e.withCtx(()=>[...s[46]||(s[46]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"primary",onClick:Vc},{default:e.withCtx(()=>[...s[47]||(s[47]=[e.createTextVNode("保存",-1)])]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",Tl,[e.createElementVNode("div",Ul,[s[43]||(s[43]=e.createElementVNode("label",{class:"form-label"},"群名称",-1)),e.createVNode(e.unref(re),{modelValue:e.unref(we).groupNickname,"onUpdate:modelValue":s[22]||(s[22]=h=>e.unref(we).groupNickname=h),placeholder:"请输入群名称"},null,8,["modelValue"])]),e.createElementVNode("div",Ll,[s[44]||(s[44]=e.createElementVNode("label",{class:"form-label"},"群备注",-1)),e.createVNode(e.unref(re),{modelValue:e.unref(we).remark,"onUpdate:modelValue":s[23]||(s[23]=h=>e.unref(we).remark=h),type:"textarea",rows:3,placeholder:"请输入群备注"},null,8,["modelValue"])]),e.createElementVNode("div",Il,[s[45]||(s[45]=e.createElementVNode("label",{class:"form-label"},"群公告",-1)),e.createVNode(e.unref(re),{modelValue:e.unref(we).notice,"onUpdate:modelValue":s[24]||(s[24]=h=>e.unref(we).notice=h),type:"textarea",rows:3,placeholder:"请输入群公告"},null,8,["modelValue"])])])]),_:1},8,["model-value"])):e.createCommentVNode("",!0),e.unref(S)?(e.openBlock(),e.createBlock(e.unref(pe),{key:3,"model-value":e.unref(xe),"onUpdate:modelValue":s[29]||(s[29]=h=>xe.value=h),title:"编辑群昵称",width:"400px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(L),{onClick:s[28]||(s[28]=h=>xe.value=!1)},{default:e.withCtx(()=>[...s[50]||(s[50]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"primary",onClick:Cc},{default:e.withCtx(()=>[...s[51]||(s[51]=[e.createTextVNode("保存",-1)])]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",Fl,[e.createElementVNode("div",Al,[s[48]||(s[48]=e.createElementVNode("label",{class:"form-label"},"成员",-1)),e.createElementVNode("span",null,e.toDisplayString(e.unref(Le).targetUsername),1)]),e.createElementVNode("div",Dl,[s[49]||(s[49]=e.createElementVNode("label",{class:"form-label"},"群昵称",-1)),e.createVNode(e.unref(re),{modelValue:e.unref(Le).memberNick,"onUpdate:modelValue":s[27]||(s[27]=h=>e.unref(Le).memberNick=h),placeholder:"请输入群昵称"},null,8,["modelValue"])])])]),_:1},8,["model-value"])):e.createCommentVNode("",!0),e.unref(S)?(e.openBlock(),e.createBlock(e.unref(pe),{key:4,"model-value":e.unref(Ie),"onUpdate:modelValue":s[31]||(s[31]=h=>Ie.value=h),title:"消息已读状态",width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(L),{onClick:s[30]||(s[30]=h=>Ie.value=!1)},{default:e.withCtx(()=>[...s[52]||(s[52]=[e.createTextVNode("关闭",-1)])]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",zl,[e.createElementVNode("div",Rl,[e.createElementVNode("div",jl,[e.createVNode(e.unref(kt)),e.createTextVNode("已读 ("+e.toDisplayString(e.unref(he).readUserList.length)+") ",1)]),e.createElementVNode("div",Hl,[e.unref(he).readUserList.length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"暂无已读成员"})):(e.openBlock(),e.createElementBlock("div",Kl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(he).readUserList,h=>(e.openBlock(),e.createBlock(e.unref(St),{key:h,class:"user-tag"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h),1)]),_:2},1024))),128))]))])]),e.createElementVNode("div",Ol,[e.createElementVNode("div",Wl,[e.createVNode(e.unref(go)),e.createTextVNode("未读 ("+e.toDisplayString(e.unref(he).unreadUserList.length)+") ",1)]),e.createElementVNode("div",ql,[e.unref(he).unreadUserList.length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"全部已读"})):(e.openBlock(),e.createElementBlock("div",Yl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(he).unreadUserList,h=>(e.openBlock(),e.createBlock(e.unref(St),{key:h,type:"info",class:"user-tag"},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(h),1)]),_:2},1024))),128))]))])])])]),_:1},8,["model-value"])):e.createCommentVNode("",!0),e.unref(S)?(e.openBlock(),e.createBlock(e.unref(pe),{key:5,"model-value":e.unref(D),"onUpdate:modelValue":s[33]||(s[33]=h=>D.value=h),title:"邀请成员",width:"500px"},{footer:e.withCtx(()=>[e.createVNode(e.unref(L),{onClick:s[32]||(s[32]=h=>D.value=!1)},{default:e.withCtx(()=>[...s[53]||(s[53]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"primary",onClick:kc,disabled:e.unref(X).length===0},{default:e.withCtx(()=>[e.createTextVNode(" 邀请 "+e.toDisplayString(e.unref(X).length)+" 人 ",1)]),_:1},8,["disabled"])]),default:e.withCtx(()=>[e.createElementVNode("div",Xl,[e.createElementVNode("div",Pl,[e.unref(j).length===0?(e.openBlock(),e.createBlock(e.unref(ue),{key:0,description:"暂无好友可以邀请"})):e.createCommentVNode("",!0),e.createElementVNode("div",Zl,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(j),h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:e.normalizeClass(["member-item",e.unref(X).some(se=>se.id===h.id)?"member-selected":""]),onClick:se=>gc(h)},[e.createElementVNode("img",{src:h.avatar,alt:h.name,class:"member-avatar"},null,8,Jl),e.createElementVNode("span",vl,e.toDisplayString(h.name),1),e.unref(X).some(se=>se.id===h.id)?(e.openBlock(),e.createBlock(e.unref(yt),{key:0,class:"member-check"})):e.createCommentVNode("",!0)],10,Ql))),128))])])])]),_:1},8,["model-value"])):e.createCommentVNode("",!0),e.createVNode(e.unref(pe),{"model-value":He.value,"onUpdate:modelValue":s[38]||(s[38]=h=>He.value=h),title:"个人设置",width:"560px","close-on-click-modal":!1,class:"chat-settings-dialog"},{default:e.withCtx(()=>[e.createElementVNode("div",ei,[e.createElementVNode("div",ti,[e.createElementVNode("div",ni,[e.createElementVNode("img",{src:e.unref(B),alt:"头像",class:"chat-settings-avatar"},null,8,oi),n.config.modules.avatarCrop?(e.openBlock(),e.createElementBlock("div",{key:0,class:"chat-settings-avatar-edit",onClick:lc},[e.createElementVNode("span",ri,[e.createVNode(e.unref(_n))])])):e.createCommentVNode("",!0),e.createElementVNode("input",{ref_key:"avatarInputRef",ref:Oe,type:"file",accept:"image/*",class:"hidden-avatar-input",onChange:bc},null,544)]),e.createElementVNode("div",ai,[e.createElementVNode("div",si,e.toDisplayString(e.unref(y).nickname||e.unref(w)),1),e.createElementVNode("div",li,"@"+e.toDisplayString(e.unref(w)),1)])]),e.createElementVNode("div",ii,[e.createElementVNode("div",ci,[e.createElementVNode("div",di,[e.createVNode(e.unref(wt)),s[54]||(s[54]=e.createTextVNode(" 主题设置 ",-1))])]),e.createElementVNode("div",mi,[e.createElementVNode("div",pi,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(c),h=>(e.openBlock(),e.createElementBlock("div",{key:h.value,class:e.normalizeClass(["theme-option",e.unref(C)===h.value?"theme-option-active":""]),onClick:se=>e.unref(f)(h.value)},[e.createElementVNode("span",fi,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(h.iconComponent)))]),e.createElementVNode("span",gi,e.toDisplayString(h.label),1),e.unref(C)===h.value?(e.openBlock(),e.createBlock(e.unref(kt),{key:0,class:"theme-option-check"})):e.createCommentVNode("",!0)],10,ui))),128))])])]),e.createElementVNode("div",hi,[e.createElementVNode("div",ki,[e.createElementVNode("div",yi,[e.createVNode(e.unref(Ye)),s[55]||(s[55]=e.createTextVNode(" 个人信息 ",-1))]),ye.value?e.createCommentVNode("",!0):(e.openBlock(),e.createBlock(e.unref(L),{key:0,type:"primary",size:"small",onClick:$c,class:"chat-settings-edit-btn"},{default:e.withCtx(()=>[...s[56]||(s[56]=[e.createTextVNode(" 编辑 ",-1)])]),_:1}))]),e.createElementVNode("div",Ci,[e.createElementVNode("div",wi,[s[57]||(s[57]=e.createElementVNode("label",{class:"chat-settings-form-label"},"昵称",-1)),ye.value?(e.openBlock(),e.createBlock(e.unref(re),{key:0,modelValue:de.value.nickname,"onUpdate:modelValue":s[34]||(s[34]=h=>de.value.nickname=h),placeholder:"请输入昵称"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",Vi,e.toDisplayString(e.unref(y).nickname||"未设置"),1))]),e.createElementVNode("div",bi,[s[58]||(s[58]=e.createElementVNode("label",{class:"chat-settings-form-label"},"邮箱",-1)),ye.value?(e.openBlock(),e.createBlock(e.unref(re),{key:0,modelValue:de.value.email,"onUpdate:modelValue":s[35]||(s[35]=h=>de.value.email=h),placeholder:"请输入邮箱"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",Ni,e.toDisplayString(e.unref(y).email||"未设置"),1))]),e.createElementVNode("div",Ei,[s[59]||(s[59]=e.createElementVNode("label",{class:"chat-settings-form-label"},"手机号",-1)),ye.value?(e.openBlock(),e.createBlock(e.unref(re),{key:0,modelValue:de.value.phone,"onUpdate:modelValue":s[36]||(s[36]=h=>de.value.phone=h),placeholder:"请输入手机号"},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",$i,e.toDisplayString(e.unref(y).phone||"未设置"),1))]),e.createElementVNode("div",Bi,[s[60]||(s[60]=e.createElementVNode("label",{class:"chat-settings-form-label"},"个人简介",-1)),ye.value?(e.openBlock(),e.createBlock(e.unref(re),{key:0,modelValue:de.value.bio,"onUpdate:modelValue":s[37]||(s[37]=h=>de.value.bio=h),type:"textarea",rows:4,placeholder:"介绍一下自己吧..."},null,8,["modelValue"])):(e.openBlock(),e.createElementBlock("div",xi,e.toDisplayString(e.unref(y).bio||"这个人很懒,什么都没写~"),1))]),ye.value?(e.openBlock(),e.createElementBlock("div",Si,[e.createVNode(e.unref(L),{onClick:Bc},{default:e.withCtx(()=>[...s[61]||(s[61]=[e.createTextVNode("取消",-1)])]),_:1}),e.createVNode(e.unref(L),{type:"primary",loading:st.value,onClick:xc},{default:e.withCtx(()=>[...s[62]||(s[62]=[e.createTextVNode("保存更改",-1)])]),_:1},8,["loading"])])):e.createCommentVNode("",!0)])])])]),_:1},8,["model-value"]),e.createVNode(Ze,{modelValue:Ke.value,"onUpdate:modelValue":s[39]||(s[39]=h=>Ke.value=h),src:lt.value,onConfirm:Nc},null,8,["modelValue","src"]),e.createVNode(ml,{visible:Ee.value.visible,x:Ee.value.x,y:Ee.value.y},{default:e.withCtx(()=>[e.createElementVNode("div",{class:"context-menu-item danger",onClick:tc},"删除聊天")]),_:1},8,["visible","x","y"])],8,pl)}}},[["__scopeId","data-v-dae3e2cf"]]),Mi={api:{baseUrl:"",websocketUrl:"",endpoints:{getFriends:"/chart/friends",getHistory:"/chart/history",setRead:"/chart/read",uploadFile:"/chart/upload/file",addFriend:"/chart/friend/add",getApplyList:"/chart/friend/applyList",agreeFriend:"/chart/friend/agree",setChatStatus:"/chart/friend/chat/status",getAvailableUsers:"/chart/user/canAddFriend",searchUser:"/chart/user/search",getUserAvatar:"/user/getAvatar",uploadAvatar:"/user/uploadAvatar",createGroup:"/chart/group/create",getMyGroups:"/chart/group/my",getGroupInfo:"/chart/group/info",addGroupMember:"/chart/group/member/add",getGroupMembers:"/chart/group/member/list",quitGroup:"/chart/group/member/quit",getGroupChatStatus:"/chart/group/status",getGroupHistory:"/chart/group/history",getGroupUnreadCount:"/chart/group/unread/count",getMsgReadUserList:"/chart/group/msg/read/list",updateGroupInfo:"/chart/group/update/info",updateMemberNick:"/chart/group/member/nick/update",deleteGroup:"/chart/group/delete",removeGroupMember:"/chart/group/member/remove",transferGroupOwner:"/chart/group/owner/transfer",readSingleGroupMsg:"/chart/group/msg/read/single",readAllGroupMsg:"/chart/group/msg/read/all"},adapter:null},user:{username:"",avatar:"",nickname:"",email:"",phone:"",bio:""},modules:{friends:!0,apply:!0,settings:!0,fileUpload:!0,avatarCrop:!0,groups:!0,groupMembers:!0},theme:{primaryColor:"#07c160",selfMessageBg:"#95ec69",otherMessageBg:"#ffffff"},headers:{},requestInterceptors:[],responseInterceptors:[],websocket:{maxReconnectAttempts:5,reconnectDelay:3e3},file:{maxSize:50*1024*1024,allowedTypes:["*"]}};function _i(n={}){const t=_t(Mi,n);return t.api.baseUrl||console.warn("[VueChatKit] 请配置 api.baseUrl"),t.api.websocketUrl||console.warn("[VueChatKit] 请配置 api.websocketUrl"),t.user.username||console.warn("[VueChatKit] 请配置 user.username"),t}function _t(n,t){const o={...n};for(const a in t)t[a]&&typeof t[a]=="object"&&!Array.isArray(t[a])?o[a]=_t(n[a]||{},t[a]):o[a]=t[a];return o}const Gt={install(n){n.component("ChatPanel",Mt),n.component("AvatarCrop",Ze)}};P.AvatarCrop=Ze,P.ChatApi=ze,P.ChatPanel=Mt,P.ChatWebSocket=bt,P.DEFAULT_THEME=$e,P.HttpClient=Nt,P.THEMES=oe,P.THEME_OPTIONS=$t,P.THEME_STORAGE_KEY=Xe,P.VueChatKit=Gt,P.createChatConfig=_i,P.default=Gt,P.useChat=Et,P.useTheme=xt,Object.defineProperties(P,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});