diff --git a/pages/Chat/Chat.vue b/pages/Chat/Chat.vue
index 11f1e02..b4d21fd 100644
--- a/pages/Chat/Chat.vue
+++ b/pages/Chat/Chat.vue
@@ -343,12 +343,14 @@
for (let i = 0; i < lines.length; i++) {
const line = lines[i].trim()
- // 检测表格行:以 | 开头和结尾
- const isTableLine = /^\|.+|$/.test(line) && line.includes('|')
+ // 检测表格行:以 | 开头并以 | 结尾
+ // 修复:原正则 /^\|.+|&/ 中 | 未转义,导致匹配所有行
+ const isTableLine = /^\|.+\|$/.test(line)
if (isTableLine) {
- // 分隔行(如 |---|---|)
- if (/^\|[\s\-:]+\|[\s\-:|]+\|$/.test(line)) {
+ // 分隔行(如 |---|---| 或 |:---:|)
+ // 修复:原正则在字符类中包含了 | 导致分隔行误判
+ if (/^\|[\s\-:]+\|[\s\-:]+\|$/.test(line)) {
alignments = line.split('|').filter(c => c.trim()).map(c => {
if (c.trim().startsWith(':') && c.trim().endsWith(':')) return 'center'
if (c.trim().endsWith(':')) return 'right'
@@ -385,8 +387,12 @@
html += '
'
cells.forEach((cell, ci) => {
const align = alignments[ci] ? ` style="text-align:${alignments[ci]}"` : ''
+ // 修复:转义表格单元格中的 _ 和 *,防止 snarkdown 将其解析为斜体/加粗
+ let cellContent = cell.trim()
+ .replace(/_/g, '_')
+ .replace(/\*/g, '*')
html +=
- `<${tag}${align} style="padding:6px 10px;border:1px solid #ddd">${cell.trim()}${tag}>`
+ `<${tag}${align} style="padding:6px 10px;border:1px solid #ddd">${cellContent}${tag}>`
})
html += '
'
})
@@ -394,6 +400,19 @@
return html
}
+ // 转义所有单独的 _,但保护 __(双下划线粗体)
+ // snarkdown 的 [_*] 没有任何单词边界限制,会把单词中的 _ 误解析为斜体标记
+ // 如 watermark_mcp、char_spacing 中的 _ 会打开永不闭合的 ,导致后面全部斜体
+ const escapeLoneUnderscores = (text) => {
+ // 1. 先用占位符保护 __ 双下划线(snarkdown 的粗体语法)
+ text = text.replace(/__/g, '\x00\x00')
+ // 2. 将剩余的单个 _ 转为 HTML 实体,snarkdown 不会处理实体
+ text = text.replace(/_/g, '_')
+ // 3. 还原 __ 占位符
+ text = text.replace(/\x00\x00/g, '__')
+ return text
+ }
+
// Markdown转HTML节点
const pareseMarkdown = (content) => {
if (!content) return ''
@@ -401,14 +420,12 @@
content = sanitizeContent(content)
try {
+ // 转义单词中的单下划线,防止 snarkdown 误解析为斜体
+ content = escapeLoneUnderscores(content)
// 先转换表格,再用 snarkdown 处理其他 Markdown
content = convertMarkdownTable(content)
const html = snarkdown(content)
return html
- // // 过滤掉可能导致问题的 Unicode 属性
- // const safeHtml = html.replace(/\\p\{[LN]\}/g, '')
-
- // return safeHtml
} catch (e) {
console.error('解析失败', e)
return content
@@ -1164,7 +1181,7 @@
const takeConversationMessages = async () => {
try {
allmessages.value = await getConversationMessages(userToken.value, currentSessionId.value) || [];
- // console.log("获取到的所有消息:", JSON.stringify(allmessages.value) );
+ console.log("获取到的所有消息:", JSON.stringify(allmessages.value) );
// currentMessages.value = allmessages.value.slice(-pageInfoNumber);
// 数据获取后执行滚动
scrollToBottom();
@@ -1178,7 +1195,7 @@
const takeFriendMessages = async () => {
try {
allmessages.value = await getFriendMessages(currentSessionId.value) || [];
- console.log("好友消息:", JSON.stringify(allmessages.value));
+ // console.log("好友消息:", JSON.stringify(allmessages.value));
// 数据获取后执行滚动
scrollToBottom();
} catch (error) {
diff --git a/unpackage/dist/build/app-plus/app-service.js b/unpackage/dist/build/app-plus/app-service.js
index e4f3a76..58820c1 100644
--- a/unpackage/dist/build/app-plus/app-service.js
+++ b/unpackage/dist/build/app-plus/app-service.js
@@ -1,7 +1,7 @@
-if("undefined"==typeof Promise||Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then((a=>t.resolve(e()).then((()=>a))),(a=>t.resolve(e()).then((()=>{throw a}))))}),"undefined"!=typeof uni&&uni&&uni.requireGlobal){const e=uni.requireGlobal();ArrayBuffer=e.ArrayBuffer,Int8Array=e.Int8Array,Uint8Array=e.Uint8Array,Uint8ClampedArray=e.Uint8ClampedArray,Int16Array=e.Int16Array,Uint16Array=e.Uint16Array,Int32Array=e.Int32Array,Uint32Array=e.Uint32Array,Float32Array=e.Float32Array,Float64Array=e.Float64Array,BigInt64Array=e.BigInt64Array,BigUint64Array=e.BigUint64Array}uni.restoreGlobal&&uni.restoreGlobal(Vue,weex,plus,setTimeout,clearTimeout,setInterval,clearInterval),function(e){"use strict";function t(e,t,...a){uni.__log__?uni.__log__(e,t,...a):console[e].apply(console,[...a,t])}function a(e,t){return"string"==typeof e?t:e}const n=((t,a=0)=>(a,n=e.getCurrentInstance())=>{!e.isInSSRComponentSetup&&e.injectHook(t,a,n)})("onShow",3),o="https://cloud.yuxindazhineng.com",l=async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${o}/delete_conversation`,method:"POST",data:{access_token:e,conversation_ids:t},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)a(t.message);else{const e=t.failed_ids.error||"删除对话出错啦";n(e)}}else n(`删除对话失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),s=async e=>new Promise(((t,a)=>{uni.request({url:`${o}/get_user_info`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e},success:e=>{var n,o;if(200===e.statusCode){const l=e.data;if(null==l?void 0:l._id)uni.setStorageSync("userId",l._id),t(l);else{const e=(null==(o=null==(n=null==l?void 0:l.detail)?void 0:n[0])?void 0:o.msg)||"获取用户信息出错啦";a(e)}}else a(`获取用户信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),c=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${o}/cloud_api/get_user_avatar`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,user_ids:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"获取用户头像出错啦";n(e)}}else n(`获取用户头像失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),i=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${o}/cloud_api/search_users`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,keyword:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"通过用户名或邮箱来去查询用户出错啦";n(e)}}else n(`通过用户名或邮箱来去查询用户失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),r=(e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${o}/cloud_api/phone/workspace/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,file_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"删除工作区文件出错啦";l(e)}}else l(`删除工作区文件失败:${e.statusCode}`)}})})),u=(e,t,a)=>new Promise(((n,l)=>{uni.request({url:`${o}/cloud_api/phone/workspace/create`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,dir_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"创建工作区文件夹出错啦";l(e)}}else l(`创建工作区文件夹失败:${e.statusCode}`)}})})),d=(e,t,a="/",n="")=>new Promise(((l,s)=>{uni.request({url:`${o}/cloud_api/file/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,path:a,type:t,team_id:n},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)l(t.data);else{const e=(null==t?void 0:t.error)||"获取工作区文件目录出错啦";s(e)}}else s(`获取工作区文件目录失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})),m=async e=>new Promise(((t,a)=>{uni.request({url:`${o}/cloud_api/team/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_name:""},success:e=>{if(200===e.statusCode){const n=e.data;if(n.success){const e=n.teams.slice(1);t(e)}else{const t=e.data.error||"获取用户可访问的团队列表出错啦";a(t)}}else a(`获取用户可访问的团队列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),v=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${o}/cloud_api/team/get_all_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t},success:e=>{var t;if(200===e.statusCode){const o=e.data;if(o.success){const e=(null==(t=o.team)?void 0:t.result)||[];a(e)}else{const e=(null==o?void 0:o.error)||"获取团队全部成员出错啦";n(e)}}else n(`获取团队全部成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),p=(e,t,a,n)=>new Promise(((l,s)=>{const c={access_token:e,database_id:t};"user_id"===a?c.user_id=n:"team_id"===a&&(c.team_id=n),uni.request({url:`${o}/cloud_api/database/permission/info`,method:"POST",data:c,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)l(t.data);else if(Array.isArray(t))l(t);else{const e=(null==t?void 0:t.error)||"查看 个人/团队 数据库权限信息出错啦";s(e)}}else s(`查看 个人/团队 数据库权限信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";s(t)}})})),f=(e,t)=>{const a=e.__vccOpts||e;for(const[n,o]of t)a[n]=o;return a},h=f({__name:"Login",setup(a){const n=e.ref(""),l=e.ref(!1),s=e.ref(!1),c=()=>{l.value=!0,g.value=!1},i=()=>{l.value=!1},r=()=>{},u=e.ref(""),d=e.ref(!1),m=e.ref(!1),v=()=>{d.value=!0,g.value=!1},p=()=>{d.value=!1},f=e.reactive({username:e.computed((()=>n.value)),password:e.computed((()=>u.value)),remember:!0}),h=e.ref(!1),g=e.ref(!1),w=async()=>{if(k(),!g.value){h.value=!0;try{t("log","at pages/Login/Login.vue:119","有返回token:",await(async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${o}/login`,method:"POST",data:{username:e,password:t,login_type:"phone"},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.access_token;if(t)uni.setStorageSync("token",t),a(t);else{const t=e.data.error||"检查用户名和密码";n(t)}}else n(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(n.value,u.value)),y(),uni.reLaunch({url:"/pages/Chat/Chat"})}catch(e){t("log","at pages/Login/Login.vue:125","登录失败",e),uni.showToast({title:e||"失败",icon:"error"})}finally{h.value=!1}}},k=()=>{n.value&&u.value||(g.value=!0)},y=()=>{if(f.remember){const e={username:f.username,password:f.password,remember:!0};uni.setStorageSync("login_info",e),uni.setStorageSync("chatType",0)}else uni.removeStorageSync("login_info")};return e.onMounted((()=>{(()=>{try{const e=uni.getStorageSync("login_info");e&&(n.value=e.username||"",u.value=e.password||"",f.remember=e.remember??!0)}catch(e){t("error","at pages/Login/Login.vue:169","读取登录信息失败",e)}})()})),(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"login-container page-container"},[e.createElementVNode("view",{class:"login-card"},[e.createElementVNode("view",{class:"login-header"},[e.createElementVNode("view",{class:"login-header-logo"},[e.createElementVNode("view",{class:"icon-wrapper"},[e.createElementVNode("view",{class:"iconfont icon-brain-2-fill danao-style"})]),e.createElementVNode("text",null,"YXD")]),e.createElementVNode("view",{class:"sub-title"},"File Handling Chat")]),e.createElementVNode("view",{class:"form-wrapper"},[e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"用户名")]),e.withDirectives(e.createElementVNode("input",{class:e.normalizeClass(["form-input",{focused:l.value,error:s.value}]),"onUpdate:modelValue":a[0]||(a[0]=e=>n.value=e),onFocus:c,onBlur:i,onInput:r,placeholder:"请输入用户名"},null,34),[[e.vModelText,n.value]])]),e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"密码")]),e.withDirectives(e.createElementVNode("input",{type:"password",class:e.normalizeClass(["form-input",{focused:d.value,error:m.value}]),"onUpdate:modelValue":a[1]||(a[1]=e=>u.value=e),onFocus:v,onBlur:p,placeholder:"请输入密码"},null,34),[[e.vModelText,u.value]])]),g.value?(e.openBlock(),e.createElementBlock("text",{key:0,class:"error-info"},"用户名或密码不能为空")):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"form-option"},[e.createElementVNode("view",{class:"checkbox-wrapper",onClick:a[2]||(a[2]=e=>f.remember=!f.remember)},[e.createElementVNode("view",{class:e.normalizeClass(["checkbox",{checked:f.remember}])},[f.remember?(e.openBlock(),e.createElementBlock("text",{key:0},"✓")):e.createCommentVNode("",!0)],2),e.createElementVNode("text",{class:"checkbox-text"},"记住密码")]),e.createElementVNode("text",{class:"forget-pwd"},"忘记密码?")]),e.createElementVNode("button",{class:"login-btn",disabled:h.value,loading:h.value,onClick:w},e.toDisplayString(h.value?"Loading...":"登录"),9,["disabled","loading"])])])])],64))}},[["__scopeId","data-v-a8bd24d4"]]),g=[{font_class:"arrow-down",unicode:""},{font_class:"arrow-left",unicode:""},{font_class:"arrow-right",unicode:""},{font_class:"arrow-up",unicode:""},{font_class:"auth",unicode:""},{font_class:"auth-filled",unicode:""},{font_class:"back",unicode:""},{font_class:"bars",unicode:""},{font_class:"calendar",unicode:""},{font_class:"calendar-filled",unicode:""},{font_class:"camera",unicode:""},{font_class:"camera-filled",unicode:""},{font_class:"cart",unicode:""},{font_class:"cart-filled",unicode:""},{font_class:"chat",unicode:""},{font_class:"chat-filled",unicode:""},{font_class:"chatboxes",unicode:""},{font_class:"chatboxes-filled",unicode:""},{font_class:"chatbubble",unicode:""},{font_class:"chatbubble-filled",unicode:""},{font_class:"checkbox",unicode:""},{font_class:"checkbox-filled",unicode:""},{font_class:"checkmarkempty",unicode:""},{font_class:"circle",unicode:""},{font_class:"circle-filled",unicode:""},{font_class:"clear",unicode:""},{font_class:"close",unicode:""},{font_class:"closeempty",unicode:""},{font_class:"cloud-download",unicode:""},{font_class:"cloud-download-filled",unicode:""},{font_class:"cloud-upload",unicode:""},{font_class:"cloud-upload-filled",unicode:""},{font_class:"color",unicode:""},{font_class:"color-filled",unicode:""},{font_class:"compose",unicode:""},{font_class:"contact",unicode:""},{font_class:"contact-filled",unicode:""},{font_class:"down",unicode:""},{font_class:"bottom",unicode:""},{font_class:"download",unicode:""},{font_class:"download-filled",unicode:""},{font_class:"email",unicode:""},{font_class:"email-filled",unicode:""},{font_class:"eye",unicode:""},{font_class:"eye-filled",unicode:""},{font_class:"eye-slash",unicode:""},{font_class:"eye-slash-filled",unicode:""},{font_class:"fire",unicode:""},{font_class:"fire-filled",unicode:""},{font_class:"flag",unicode:""},{font_class:"flag-filled",unicode:""},{font_class:"folder-add",unicode:""},{font_class:"folder-add-filled",unicode:""},{font_class:"font",unicode:""},{font_class:"forward",unicode:""},{font_class:"gear",unicode:""},{font_class:"gear-filled",unicode:""},{font_class:"gift",unicode:""},{font_class:"gift-filled",unicode:""},{font_class:"hand-down",unicode:""},{font_class:"hand-down-filled",unicode:""},{font_class:"hand-up",unicode:""},{font_class:"hand-up-filled",unicode:""},{font_class:"headphones",unicode:""},{font_class:"heart",unicode:""},{font_class:"heart-filled",unicode:""},{font_class:"help",unicode:""},{font_class:"help-filled",unicode:""},{font_class:"home",unicode:""},{font_class:"home-filled",unicode:""},{font_class:"image",unicode:""},{font_class:"image-filled",unicode:""},{font_class:"images",unicode:""},{font_class:"images-filled",unicode:""},{font_class:"info",unicode:""},{font_class:"info-filled",unicode:""},{font_class:"left",unicode:""},{font_class:"link",unicode:""},{font_class:"list",unicode:""},{font_class:"location",unicode:""},{font_class:"location-filled",unicode:""},{font_class:"locked",unicode:""},{font_class:"locked-filled",unicode:""},{font_class:"loop",unicode:""},{font_class:"mail-open",unicode:""},{font_class:"mail-open-filled",unicode:""},{font_class:"map",unicode:""},{font_class:"map-filled",unicode:""},{font_class:"map-pin",unicode:""},{font_class:"map-pin-ellipse",unicode:""},{font_class:"medal",unicode:""},{font_class:"medal-filled",unicode:""},{font_class:"mic",unicode:""},{font_class:"mic-filled",unicode:""},{font_class:"micoff",unicode:""},{font_class:"micoff-filled",unicode:""},{font_class:"minus",unicode:""},{font_class:"minus-filled",unicode:""},{font_class:"more",unicode:""},{font_class:"more-filled",unicode:""},{font_class:"navigate",unicode:""},{font_class:"navigate-filled",unicode:""},{font_class:"notification",unicode:""},{font_class:"notification-filled",unicode:""},{font_class:"paperclip",unicode:""},{font_class:"paperplane",unicode:""},{font_class:"paperplane-filled",unicode:""},{font_class:"person",unicode:""},{font_class:"person-filled",unicode:""},{font_class:"personadd",unicode:""},{font_class:"personadd-filled",unicode:""},{font_class:"personadd-filled-copy",unicode:""},{font_class:"phone",unicode:""},{font_class:"phone-filled",unicode:""},{font_class:"plus",unicode:""},{font_class:"plus-filled",unicode:""},{font_class:"plusempty",unicode:""},{font_class:"pulldown",unicode:""},{font_class:"pyq",unicode:""},{font_class:"qq",unicode:""},{font_class:"redo",unicode:""},{font_class:"redo-filled",unicode:""},{font_class:"refresh",unicode:""},{font_class:"refresh-filled",unicode:""},{font_class:"refreshempty",unicode:""},{font_class:"reload",unicode:""},{font_class:"right",unicode:""},{font_class:"scan",unicode:""},{font_class:"search",unicode:""},{font_class:"settings",unicode:""},{font_class:"settings-filled",unicode:""},{font_class:"shop",unicode:""},{font_class:"shop-filled",unicode:""},{font_class:"smallcircle",unicode:""},{font_class:"smallcircle-filled",unicode:""},{font_class:"sound",unicode:""},{font_class:"sound-filled",unicode:""},{font_class:"spinner-cycle",unicode:""},{font_class:"staff",unicode:""},{font_class:"staff-filled",unicode:""},{font_class:"star",unicode:""},{font_class:"star-filled",unicode:""},{font_class:"starhalf",unicode:""},{font_class:"trash",unicode:""},{font_class:"trash-filled",unicode:""},{font_class:"tune",unicode:""},{font_class:"tune-filled",unicode:""},{font_class:"undo",unicode:""},{font_class:"undo-filled",unicode:""},{font_class:"up",unicode:""},{font_class:"top",unicode:""},{font_class:"upload",unicode:""},{font_class:"upload-filled",unicode:""},{font_class:"videocam",unicode:""},{font_class:"videocam-filled",unicode:""},{font_class:"vip",unicode:""},{font_class:"vip-filled",unicode:""},{font_class:"wallet",unicode:""},{font_class:"wallet-filled",unicode:""},{font_class:"weibo",unicode:""},{font_class:"weixin",unicode:""}];const w=f({name:"UniIcons",emits:["click"],props:{type:{type:String,default:""},color:{type:String,default:"#333333"},size:{type:[Number,String],default:16},customPrefix:{type:String,default:""},fontFamily:{type:String,default:""}},data:()=>({icons:g}),computed:{unicode(){let e=this.icons.find((e=>e.font_class===this.type));return e?e.unicode:""},iconSize(){return"number"==typeof(e=this.size)||/^[0-9]*$/g.test(e)?e+"px":e;var e},styleObj(){return""!==this.fontFamily?`color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`:`color: ${this.color}; font-size: ${this.iconSize};`}},methods:{_onClick(e){this.$emit("click",e)}}},[["render",function(t,a,n,o,l,s){return e.openBlock(),e.createElementBlock("text",{style:e.normalizeStyle(s.styleObj),class:e.normalizeClass(["uni-icons",["uniui-"+n.type,n.customPrefix,n.customPrefix?n.type:""]]),onClick:a[0]||(a[0]=(...e)=>s._onClick&&s._onClick(...e))},[e.renderSlot(t.$slots,"default",{},void 0,!0)],6)}],["__scopeId","data-v-b25a9929"]]),k=()=>uni.getStorageSync("token"),y=()=>{const e=uni.getStorageSync("currentSessionId");return isNaN(Number(e))?e.replace(/-/g,""):e},E=()=>uni.getStorageSync("taskCallId"),N=()=>(t("log","at utils/user-info.js:50","用户Id(UserId)",uni.getStorageSync("userId")),uni.getStorageSync("userId")),C=f(Object.assign({name:"ChatSidebar"},{__name:"ChatSidebar",props:{chatList:{type:Array,required:!0},showNewChatModal:{type:Boolean,default:!1},currentSessionId:{type:[String,Number],required:!0},chatType:{type:Number,required:!0}},emits:["update:showNewChatModal","update:currentSessionId","refresh-conversations","update:chatType"],setup(n,{emit:o}){const c=n,i=o,r=e.toRef(c,"chatList");e.toRef(c,"showNewChatModal");const u=e.toRef(c,"chatType"),d=()=>{uni.navigateTo({url:"/pages/UserProfileModal/UserProfileModal"})},m=e.ref(!1),v=e.ref([]),p=()=>{0!==v.value.length&&uni.showModal({title:"确认删除",content:`确定要删除全部 ${v.value.length} 个对话吗?此操作不可恢复。`,confirmText:"确认删除",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=k();await l(e,v.value),uni.showToast({title:"删除成功",icon:"success"}),v.value=[],m.value=!1,i("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:209","删除会话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}})},f=()=>{r.value.length?uni.showModal({title:"确认删除",content:`确定要删除全部 ${r.value.length} 个对话吗?此操作不可恢复。`,confirmText:"删除全部",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=k(),t=r.value.map((e=>e._id));await l(e,t),uni.showToast({title:"已删除全部对话",icon:"success"}),i("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:241","清空全部对话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}}):uni.showToast({title:"没有可删除的会话",icon:"none"})},h=e.computed((()=>r.value.length>0&&v.value.length===r.value.length)),g=e.toRef(c,"currentSessionId"),y=(e,a="")=>{t("log","at components/ChatSidebar.vue:259","选择的id是:",e),a&&uni.setStorageSync("receiverId",a),uni.setStorageSync("currentSessionId",e),i("update:currentSessionId",e)},E=()=>{t("log","at components/ChatSidebar.vue:270","点击了新建会话"),i("update:showNewChatModal",!0)},N=()=>{uni.navigateTo({url:"/pages/ContactPages/ContactPages"})},C=e.ref(""),b=e.ref(!1),V=()=>{m.value=!m.value,m.value||(v.value=[])},_=e=>{const t=v.value.indexOf(e);-1===t?v.value.push(e):v.value.splice(t,1)},B=()=>{h.value?v.value=[]:v.value=r.value.map((e=>e._id))},S=e.ref(""),x=e.ref(""),T=e.ref(""),D=(e,t=20)=>e?e.length>t?e.substring(0,t)+"...":e:"";return e.onMounted((async()=>{S.value=k();const e=await s(S.value);x.value=e.avatar||"",T.value=e.username||"",t("log","at components/ChatSidebar.vue:326","菜单收到的会话列表:",r.value)})),(t,n)=>{const o=a(e.resolveDynamicComponent("uni-icons"),w);return e.openBlock(),e.createElementBlock("view",{class:"chat-sidebar-container"},[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"sidebar-header"},[e.createElementVNode("view",{class:"user-profile-card",onClick:d},[e.createElementVNode("view",{class:"left"},[x.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"avatar-preview"},[e.createElementVNode("image",{src:x.value,mode:"aspectFill"},null,8,["src"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"avatar-placeholder"},[e.createVNode(o,{type:"contact-filled",size:"50",color:"#007aff"})]))]),e.createElementVNode("view",{class:"center"},[e.createElementVNode("text",null,"欢迎回来"),e.createElementVNode("text",null,e.toDisplayString(T.value),1)]),e.createElementVNode("view",{class:"right"},[e.createElementVNode("view",{class:"status-dot"}),e.createElementVNode("view",{class:"status-text"},[e.createElementVNode("text",null,"在线")])])]),e.createElementVNode("view",{class:"new-chat-btn",onClick:N},[e.createElementVNode("text",null,"+ 聊天列表")])]),e.createElementVNode("view",{class:"chat-history"},[e.createElementVNode("view",{class:"history-header"},[e.createElementVNode("view",{class:"history-title-section"},[e.createElementVNode("text",null,"历史会话"),e.createElementVNode("text",null,e.toDisplayString(r.value.length)+"个对话",1)]),e.createElementVNode("view",{class:"history-management"},[m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-management-btn iconfont icon-jia icon-jia-style",onClick:E})),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:1,class:"history-management-btn iconfont icon-duoxuan icon-duoxuan-style",onClick:V})),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:2,class:"history-management-btn iconfont icon-saochu icon-saochu-style",onClick:f})),m.value&&v.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:3,class:"history-management-btn iconfont icon-shanchu icon-shanchu-style",onClick:p})):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:e.normalizeClass(["history-management-btn iconfont icon-total_selection icon-total_selection-style",{active:h.value}]),onClick:B},null,2)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("view",{key:5,class:"history-management-btn iconfont icon-quxiao icon-quxiao-style",onClick:V})):e.createCommentVNode("",!0)])]),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-search-wrap"},[e.createElementVNode("view",{class:e.normalizeClass(["history-search-inner",{"has-value":C.value||b.value}])},[e.createVNode(o,{type:"search",class:e.normalizeClass([C.value||b.value?"chat-search-icon":"search-icon"])},null,8,["class"]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[0]||(n[0]=e=>C.value=e),onFocus:n[1]||(n[1]=e=>b.value=!0),onBlur:n[2]||(n[2]=e=>b.value=!1),type:"text",placeholder:"搜索会话..."},null,544),[[e.vModelText,C.value]])],2)])),e.createElementVNode("view",{class:"chat-history-list"},[0===u.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(r.value,(t=>{var a;return e.openBlock(),e.createElementBlock("view",{key:t._id,"data-chat-id":t._id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t._id||v.value.includes(t._id)}]),onClick:e=>m.value?_(t._id):y(t._id)},[m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[v.value.includes(t._id)?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createVNode(o,{type:"chat-filled",size:"26",color:"#007aff"})]),t.agent_id?(e.openBlock(),e.createElementBlock("view",{key:1},e.toDisplayString(D(null==(a=t.agent_data)?void 0:a.title)||"加载中"),1)):(e.openBlock(),e.createElementBlock("view",{key:2},e.toDisplayString(D(t.title)),1))],10,["data-chat-id","onClick"])})),128)):e.createCommentVNode("",!0),1===u.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(r.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.sessionId,"data-chat-id":t.sessionId,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t.sessionId||v.value.includes(t.sessionId)}]),onClick:e=>m.value?_(t.sessionId):y(t.sessionId,t.receiver)},[m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[v.value.includes(t.sessionId)?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("view",null,e.toDisplayString(t.friendNickName),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0),2===u.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(r.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.id,"data-chat-id":t.id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t.id||v.value.includes(t.id)}]),onClick:e=>m.value?_(t.id):y(t.id)},[m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[v.value.includes(t.id)?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createElementVNode("view",{class:"iconfont icon-qunliao",style:{"font-size":"80rpx",color:"#fff"}})]),e.createElementVNode("view",null,e.toDisplayString(t.name),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0)])])])}}}),[["__scopeId","data-v-2a484f8a"]]);var b={"":["",""],_:["",""],"*":["",""],"~":["",""],"\n":["
"]," ":["
"],"-":["
"]};function V(e){return e.replace(RegExp("^"+(e.match(/^(\t| )+/)||"")[0],"gm"),"")}function _(e){return(e+"").replace(/"/g,""").replace(//g,">")}function B(e,t){var a,n,o,l,s,c=/((?:^|\n+)(?:\n---+|\* \*(?: \*)+)\n)|(?:^``` *(\w*)\n([\s\S]*?)\n```$)|((?:(?:^|\n+)(?:\t| {2,}).+)+\n*)|((?:(?:^|\n)([>*+-]|\d+\.)\s+.*)+)|(?:!\[([^\]]*?)\]\(([^)]+?)\))|(\[)|(\](?:\(([^)]+?)\))?)|(?:(?:^|\n+)([^\s].*)\n(-{3,}|={3,})(?:\n+|$))|(?:(?:^|\n+)(#{1,6})\s*(.+)(?:\n+|$))|(?:`([^`].*?)`)|( \n\n*|\n{2,}|__|\*\*|[_*]|~~)/gm,i=[],r="",u=t||{},d=0;function m(e){var t=b[e[1]||""],a=i[i.length-1]==e;return t?t[1]?(a?i.pop():i.push(e),t[0|a]):t[0]:e}function v(){for(var e="";i.length;)e+=m(i[i.length-1]);return e}for(e=e.replace(/^\[(.+?)\]:\s*(.+)$/gm,(function(e,t,a){return u[t.toLowerCase()]=a,""})).replace(/^\n+|\n+$/g,"");o=c.exec(e);)n=e.substring(d,o.index),d=c.lastIndex,a=o[0],n.match(/[^\\](\\\\)*\\$/)||((s=o[3]||o[4])?a='"+V(_(s).replace(/^\n+|\n+$/g,""))+"
":(s=o[6])?(s.match(/\./)&&(o[5]=o[5].replace(/^\d+/gm,"")),l=B(V(o[5].replace(/^\s*[>*+.-]/gm,""))),">"==s?s="blockquote":(s=s.match(/\./)?"ol":"ul",l=l.replace(/^(.*)(\n|$)/gm,"$1")),a="<"+s+">"+l+""+s+">"):o[8]?a='
':o[10]?(r=r.replace("",''),a=v()+""):o[9]?a="":o[12]||o[14]?a="<"+(s="h"+(o[14]?o[14].length:o[13]>"="?1:2))+">"+B(o[12]||o[15],u)+""+s+">":o[16]?a=""+_(o[16])+"":(o[17]||o[1])&&(a=m(o[17]||"--"))),r+=n,r+=a;return(r+e.substring(d)+v()).replace(/^\n+|\n+$/g,"")}
+if("undefined"==typeof Promise||Promise.prototype.finally||(Promise.prototype.finally=function(e){const t=this.constructor;return this.then((a=>t.resolve(e()).then((()=>a))),(a=>t.resolve(e()).then((()=>{throw a}))))}),"undefined"!=typeof uni&&uni&&uni.requireGlobal){const e=uni.requireGlobal();ArrayBuffer=e.ArrayBuffer,Int8Array=e.Int8Array,Uint8Array=e.Uint8Array,Uint8ClampedArray=e.Uint8ClampedArray,Int16Array=e.Int16Array,Uint16Array=e.Uint16Array,Int32Array=e.Int32Array,Uint32Array=e.Uint32Array,Float32Array=e.Float32Array,Float64Array=e.Float64Array,BigInt64Array=e.BigInt64Array,BigUint64Array=e.BigUint64Array}uni.restoreGlobal&&uni.restoreGlobal(Vue,weex,plus,setTimeout,clearTimeout,setInterval,clearInterval),function(e){"use strict";function t(e,t,...a){uni.__log__?uni.__log__(e,t,...a):console[e].apply(console,[...a,t])}function a(e,t){return"string"==typeof e?t:e}const n=(t,a=0)=>(a,n=e.getCurrentInstance())=>{!e.isInSSRComponentSetup&&e.injectHook(t,a,n)},o=n("onShow",3),l=n("onUnload",2),s="https://cloud.yuxindazhineng.com",c=async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/delete_conversation`,method:"POST",data:{access_token:e,conversation_ids:t},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)a(t.message);else{const e=t.failed_ids.error||"删除对话出错啦";n(e)}}else n(`删除对话失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),i=async e=>new Promise(((t,a)=>{uni.request({url:`${s}/get_user_info`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e},success:e=>{var n,o;if(200===e.statusCode){const l=e.data;if(null==l?void 0:l._id)uni.setStorageSync("userId",l._id),t(l);else{const e=(null==(o=null==(n=null==l?void 0:l.detail)?void 0:n[0])?void 0:o.msg)||"获取用户信息出错啦";a(e)}}else a(`获取用户信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),r=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/get_user_avatar`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,user_ids:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"获取用户头像出错啦";n(e)}}else n(`获取用户头像失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),u=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/search_users`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,keyword:t},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)a(t.users);else{const e=(null==t?void 0:t.error)||"通过用户名或邮箱来去查询用户出错啦";n(e)}}else n(`通过用户名或邮箱来去查询用户失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),d=(e,t,a)=>new Promise(((n,o)=>{uni.request({url:`${s}/cloud_api/phone/workspace/delete`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,file_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"删除工作区文件出错啦";o(e)}}else o(`删除工作区文件失败:${e.statusCode}`)}})})),m=(e,t,a)=>new Promise(((n,o)=>{uni.request({url:`${s}/cloud_api/phone/workspace/create`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,workspaces_id:t,dir_path:a},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)n(t.message);else{const e=(null==t?void 0:t.error)||"创建工作区文件夹出错啦";o(e)}}else o(`创建工作区文件夹失败:${e.statusCode}`)}})})),v=(e,t,a="/",n="")=>new Promise(((o,l)=>{uni.request({url:`${s}/cloud_api/file/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,path:a,type:t,team_id:n},success:e=>{if(200===e.statusCode){const t=e.data;if(t.success)o(t.data);else{const e=(null==t?void 0:t.error)||"获取工作区文件目录出错啦";l(e)}}else l(`获取工作区文件目录失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})),p=async e=>new Promise(((t,a)=>{uni.request({url:`${s}/cloud_api/team/list`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_name:""},success:e=>{if(200===e.statusCode){const n=e.data;if(n.success){const e=n.teams.slice(1);t(e)}else{const t=e.data.error||"获取用户可访问的团队列表出错啦";a(t)}}else a(`获取用户可访问的团队列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),f=(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/cloud_api/team/get_all_member`,method:"POST",header:{"Content-Type":"application/json"},data:{access_token:e,team_id:t},success:e=>{var t;if(200===e.statusCode){const o=e.data;if(o.success){const e=(null==(t=o.team)?void 0:t.result)||[];a(e)}else{const e=(null==o?void 0:o.error)||"获取团队全部成员出错啦";n(e)}}else n(`获取团队全部成员失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),h=(e,t,a,n)=>new Promise(((o,l)=>{const c={access_token:e,database_id:t};"user_id"===a?c.user_id=n:"team_id"===a&&(c.team_id=n),uni.request({url:`${s}/cloud_api/database/permission/info`,method:"POST",data:c,header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data;if(null==t?void 0:t.success)o(t.data);else if(Array.isArray(t))o(t);else{const e=(null==t?void 0:t.error)||"查看 个人/团队 数据库权限信息出错啦";l(e)}}else l(`查看 个人/团队 数据库权限信息失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";l(t)}})})),g=(e,t)=>{const a=e.__vccOpts||e;for(const[n,o]of t)a[n]=o;return a},w=g({__name:"Login",setup(a){const n=e.ref(""),o=e.ref(!1),l=e.ref(!1),c=()=>{o.value=!0,g.value=!1},i=()=>{o.value=!1},r=()=>{},u=e.ref(""),d=e.ref(!1),m=e.ref(!1),v=()=>{d.value=!0,g.value=!1},p=()=>{d.value=!1},f=e.reactive({username:e.computed((()=>n.value)),password:e.computed((()=>u.value)),remember:!0}),h=e.ref(!1),g=e.ref(!1),w=async()=>{if(k(),!g.value){h.value=!0;try{t("log","at pages/Login/Login.vue:119","有返回token:",await(async(e,t)=>new Promise(((a,n)=>{uni.request({url:`${s}/login`,method:"POST",data:{username:e,password:t,login_type:"phone"},header:{"Content-Type":"application/json"},success:e=>{if(200===e.statusCode){const t=e.data.access_token;if(t)uni.setStorageSync("token",t),a(t);else{const t=e.data.error||"检查用户名和密码";n(t)}}else String(e.statusCode).startsWith("5")?n({serverError:!0,code:e.statusCode,message:"服务器升级中,请稍后再试"}):n(`请求失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})))(n.value,u.value)),y(),uni.reLaunch({url:"/pages/Chat/Chat"})}catch(e){t("log","at pages/Login/Login.vue:125","登录失败",e),e&&"object"==typeof e&&e.serverError?uni.showModal({title:"提示",content:e.message,showCancel:!1,confirmText:"知道了"}):uni.showToast({title:(null==e?void 0:e.message)||e||"失败",icon:"error"})}finally{h.value=!1}}},k=()=>{n.value&&u.value||(g.value=!0)},y=()=>{if(f.remember){const e={username:f.username,password:f.password,remember:!0};uni.setStorageSync("login_info",e),uni.setStorageSync("chatType",0)}else uni.removeStorageSync("login_info")};return e.onMounted((()=>{(()=>{try{const e=uni.getStorageSync("login_info");e&&(n.value=e.username||"",u.value=e.password||"",f.remember=e.remember??!0)}catch(e){t("error","at pages/Login/Login.vue:178","读取登录信息失败",e)}})()})),(t,a)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"login-container page-container"},[e.createElementVNode("view",{class:"login-card"},[e.createElementVNode("view",{class:"login-header"},[e.createElementVNode("view",{class:"login-header-logo"},[e.createElementVNode("view",{class:"icon-wrapper"},[e.createElementVNode("view",{class:"iconfont icon-brain-2-fill danao-style"})]),e.createElementVNode("text",null,"YXD")]),e.createElementVNode("view",{class:"sub-title"},"File Handling Chat")]),e.createElementVNode("view",{class:"form-wrapper"},[e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"用户名")]),e.withDirectives(e.createElementVNode("input",{class:e.normalizeClass(["form-input",{focused:o.value,error:l.value}]),"onUpdate:modelValue":a[0]||(a[0]=e=>n.value=e),onFocus:c,onBlur:i,onInput:r,placeholder:"请输入用户名"},null,34),[[e.vModelText,n.value]])]),e.createElementVNode("view",{class:"form-item"},[e.createElementVNode("view",{class:"form-label"},[e.createElementVNode("text",null,"密码")]),e.withDirectives(e.createElementVNode("input",{type:"password",class:e.normalizeClass(["form-input",{focused:d.value,error:m.value}]),"onUpdate:modelValue":a[1]||(a[1]=e=>u.value=e),onFocus:v,onBlur:p,placeholder:"请输入密码"},null,34),[[e.vModelText,u.value]])]),g.value?(e.openBlock(),e.createElementBlock("text",{key:0,class:"error-info"},"用户名或密码不能为空")):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"form-option"},[e.createElementVNode("view",{class:"checkbox-wrapper",onClick:a[2]||(a[2]=e=>f.remember=!f.remember)},[e.createElementVNode("view",{class:e.normalizeClass(["checkbox",{checked:f.remember}])},[f.remember?(e.openBlock(),e.createElementBlock("text",{key:0},"✓")):e.createCommentVNode("",!0)],2),e.createElementVNode("text",{class:"checkbox-text"},"记住密码")]),e.createElementVNode("text",{class:"forget-pwd"},"忘记密码?")]),e.createElementVNode("button",{class:"login-btn",disabled:h.value,loading:h.value,onClick:w},e.toDisplayString(h.value?"Loading...":"登录"),9,["disabled","loading"])])])])],64))}},[["__scopeId","data-v-1f1e3d89"]]),k=[{font_class:"arrow-down",unicode:""},{font_class:"arrow-left",unicode:""},{font_class:"arrow-right",unicode:""},{font_class:"arrow-up",unicode:""},{font_class:"auth",unicode:""},{font_class:"auth-filled",unicode:""},{font_class:"back",unicode:""},{font_class:"bars",unicode:""},{font_class:"calendar",unicode:""},{font_class:"calendar-filled",unicode:""},{font_class:"camera",unicode:""},{font_class:"camera-filled",unicode:""},{font_class:"cart",unicode:""},{font_class:"cart-filled",unicode:""},{font_class:"chat",unicode:""},{font_class:"chat-filled",unicode:""},{font_class:"chatboxes",unicode:""},{font_class:"chatboxes-filled",unicode:""},{font_class:"chatbubble",unicode:""},{font_class:"chatbubble-filled",unicode:""},{font_class:"checkbox",unicode:""},{font_class:"checkbox-filled",unicode:""},{font_class:"checkmarkempty",unicode:""},{font_class:"circle",unicode:""},{font_class:"circle-filled",unicode:""},{font_class:"clear",unicode:""},{font_class:"close",unicode:""},{font_class:"closeempty",unicode:""},{font_class:"cloud-download",unicode:""},{font_class:"cloud-download-filled",unicode:""},{font_class:"cloud-upload",unicode:""},{font_class:"cloud-upload-filled",unicode:""},{font_class:"color",unicode:""},{font_class:"color-filled",unicode:""},{font_class:"compose",unicode:""},{font_class:"contact",unicode:""},{font_class:"contact-filled",unicode:""},{font_class:"down",unicode:""},{font_class:"bottom",unicode:""},{font_class:"download",unicode:""},{font_class:"download-filled",unicode:""},{font_class:"email",unicode:""},{font_class:"email-filled",unicode:""},{font_class:"eye",unicode:""},{font_class:"eye-filled",unicode:""},{font_class:"eye-slash",unicode:""},{font_class:"eye-slash-filled",unicode:""},{font_class:"fire",unicode:""},{font_class:"fire-filled",unicode:""},{font_class:"flag",unicode:""},{font_class:"flag-filled",unicode:""},{font_class:"folder-add",unicode:""},{font_class:"folder-add-filled",unicode:""},{font_class:"font",unicode:""},{font_class:"forward",unicode:""},{font_class:"gear",unicode:""},{font_class:"gear-filled",unicode:""},{font_class:"gift",unicode:""},{font_class:"gift-filled",unicode:""},{font_class:"hand-down",unicode:""},{font_class:"hand-down-filled",unicode:""},{font_class:"hand-up",unicode:""},{font_class:"hand-up-filled",unicode:""},{font_class:"headphones",unicode:""},{font_class:"heart",unicode:""},{font_class:"heart-filled",unicode:""},{font_class:"help",unicode:""},{font_class:"help-filled",unicode:""},{font_class:"home",unicode:""},{font_class:"home-filled",unicode:""},{font_class:"image",unicode:""},{font_class:"image-filled",unicode:""},{font_class:"images",unicode:""},{font_class:"images-filled",unicode:""},{font_class:"info",unicode:""},{font_class:"info-filled",unicode:""},{font_class:"left",unicode:""},{font_class:"link",unicode:""},{font_class:"list",unicode:""},{font_class:"location",unicode:""},{font_class:"location-filled",unicode:""},{font_class:"locked",unicode:""},{font_class:"locked-filled",unicode:""},{font_class:"loop",unicode:""},{font_class:"mail-open",unicode:""},{font_class:"mail-open-filled",unicode:""},{font_class:"map",unicode:""},{font_class:"map-filled",unicode:""},{font_class:"map-pin",unicode:""},{font_class:"map-pin-ellipse",unicode:""},{font_class:"medal",unicode:""},{font_class:"medal-filled",unicode:""},{font_class:"mic",unicode:""},{font_class:"mic-filled",unicode:""},{font_class:"micoff",unicode:""},{font_class:"micoff-filled",unicode:""},{font_class:"minus",unicode:""},{font_class:"minus-filled",unicode:""},{font_class:"more",unicode:""},{font_class:"more-filled",unicode:""},{font_class:"navigate",unicode:""},{font_class:"navigate-filled",unicode:""},{font_class:"notification",unicode:""},{font_class:"notification-filled",unicode:""},{font_class:"paperclip",unicode:""},{font_class:"paperplane",unicode:""},{font_class:"paperplane-filled",unicode:""},{font_class:"person",unicode:""},{font_class:"person-filled",unicode:""},{font_class:"personadd",unicode:""},{font_class:"personadd-filled",unicode:""},{font_class:"personadd-filled-copy",unicode:""},{font_class:"phone",unicode:""},{font_class:"phone-filled",unicode:""},{font_class:"plus",unicode:""},{font_class:"plus-filled",unicode:""},{font_class:"plusempty",unicode:""},{font_class:"pulldown",unicode:""},{font_class:"pyq",unicode:""},{font_class:"qq",unicode:""},{font_class:"redo",unicode:""},{font_class:"redo-filled",unicode:""},{font_class:"refresh",unicode:""},{font_class:"refresh-filled",unicode:""},{font_class:"refreshempty",unicode:""},{font_class:"reload",unicode:""},{font_class:"right",unicode:""},{font_class:"scan",unicode:""},{font_class:"search",unicode:""},{font_class:"settings",unicode:""},{font_class:"settings-filled",unicode:""},{font_class:"shop",unicode:""},{font_class:"shop-filled",unicode:""},{font_class:"smallcircle",unicode:""},{font_class:"smallcircle-filled",unicode:""},{font_class:"sound",unicode:""},{font_class:"sound-filled",unicode:""},{font_class:"spinner-cycle",unicode:""},{font_class:"staff",unicode:""},{font_class:"staff-filled",unicode:""},{font_class:"star",unicode:""},{font_class:"star-filled",unicode:""},{font_class:"starhalf",unicode:""},{font_class:"trash",unicode:""},{font_class:"trash-filled",unicode:""},{font_class:"tune",unicode:""},{font_class:"tune-filled",unicode:""},{font_class:"undo",unicode:""},{font_class:"undo-filled",unicode:""},{font_class:"up",unicode:""},{font_class:"top",unicode:""},{font_class:"upload",unicode:""},{font_class:"upload-filled",unicode:""},{font_class:"videocam",unicode:""},{font_class:"videocam-filled",unicode:""},{font_class:"vip",unicode:""},{font_class:"vip-filled",unicode:""},{font_class:"wallet",unicode:""},{font_class:"wallet-filled",unicode:""},{font_class:"weibo",unicode:""},{font_class:"weixin",unicode:""}];const y=g({name:"UniIcons",emits:["click"],props:{type:{type:String,default:""},color:{type:String,default:"#333333"},size:{type:[Number,String],default:16},customPrefix:{type:String,default:""},fontFamily:{type:String,default:""}},data:()=>({icons:k}),computed:{unicode(){let e=this.icons.find((e=>e.font_class===this.type));return e?e.unicode:""},iconSize(){return"number"==typeof(e=this.size)||/^[0-9]*$/g.test(e)?e+"px":e;var e},styleObj(){return""!==this.fontFamily?`color: ${this.color}; font-size: ${this.iconSize}; font-family: ${this.fontFamily};`:`color: ${this.color}; font-size: ${this.iconSize};`}},methods:{_onClick(e){this.$emit("click",e)}}},[["render",function(t,a,n,o,l,s){return e.openBlock(),e.createElementBlock("text",{style:e.normalizeStyle(s.styleObj),class:e.normalizeClass(["uni-icons",["uniui-"+n.type,n.customPrefix,n.customPrefix?n.type:""]]),onClick:a[0]||(a[0]=(...e)=>s._onClick&&s._onClick(...e))},[e.renderSlot(t.$slots,"default",{},void 0,!0)],6)}],["__scopeId","data-v-b25a9929"]]),E=()=>uni.getStorageSync("token"),C=()=>{const e=uni.getStorageSync("currentSessionId");return isNaN(Number(e))?e.replace(/-/g,""):e},N=()=>uni.getStorageSync("taskCallId"),b=()=>(t("log","at utils/user-info.js:50","用户Id(UserId)",uni.getStorageSync("userId")),uni.getStorageSync("userId")),V=g(Object.assign({name:"ChatSidebar"},{__name:"ChatSidebar",props:{chatList:{type:Array,required:!0},showNewChatModal:{type:Boolean,default:!1},currentSessionId:{type:[String,Number],required:!0},chatType:{type:Number,required:!0}},emits:["update:showNewChatModal","update:currentSessionId","refresh-conversations","update:chatType"],setup(n,{emit:o}){const l=n,s=o,r=e.toRef(l,"chatList");e.toRef(l,"showNewChatModal");const u=e.toRef(l,"chatType"),d=()=>{uni.navigateTo({url:"/pages/UserProfileModal/UserProfileModal"})},m=e.ref(!1),v=e.ref([]),p=()=>{0!==v.value.length&&uni.showModal({title:"确认删除",content:`确定要删除全部 ${v.value.length} 个对话吗?此操作不可恢复。`,confirmText:"确认删除",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=E();await c(e,v.value),uni.showToast({title:"删除成功",icon:"success"}),v.value=[],m.value=!1,s("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:209","删除会话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}})},f=()=>{r.value.length?uni.showModal({title:"确认删除",content:`确定要删除全部 ${r.value.length} 个对话吗?此操作不可恢复。`,confirmText:"删除全部",confirmColor:"#ff0000",success:async e=>{if(e.confirm)try{const e=E(),t=r.value.map((e=>e._id));await c(e,t),uni.showToast({title:"已删除全部对话",icon:"success"}),s("refresh-conversations")}catch(a){t("error","at components/ChatSidebar.vue:241","清空全部对话失败:",a),uni.showToast({title:"删除失败,请重试",icon:"none"})}}}):uni.showToast({title:"没有可删除的会话",icon:"none"})},h=e.computed((()=>r.value.length>0&&v.value.length===r.value.length)),g=e.toRef(l,"currentSessionId"),w=(e,a="")=>{t("log","at components/ChatSidebar.vue:259","选择的id是:",e),a&&uni.setStorageSync("receiverId",a),uni.setStorageSync("currentSessionId",e),s("update:currentSessionId",e)},k=()=>{t("log","at components/ChatSidebar.vue:270","点击了新建会话"),s("update:showNewChatModal",!0)},C=()=>{uni.navigateTo({url:"/pages/ContactPages/ContactPages"})},N=e.ref(""),b=e.ref(!1),V=()=>{m.value=!m.value,m.value||(v.value=[])},_=e=>{const t=v.value.indexOf(e);-1===t?v.value.push(e):v.value.splice(t,1)},B=()=>{h.value?v.value=[]:v.value=r.value.map((e=>e._id))},S=e.ref(""),x=e.ref(""),T=e.ref(""),D=(e,t=20)=>e?e.length>t?e.substring(0,t)+"...":e:"";return e.onMounted((async()=>{S.value=E();const e=await i(S.value);x.value=e.avatar||"",T.value=e.username||"",t("log","at components/ChatSidebar.vue:326","菜单收到的会话列表:",r.value)})),(t,n)=>{const o=a(e.resolveDynamicComponent("uni-icons"),y);return e.openBlock(),e.createElementBlock("view",{class:"chat-sidebar-container"},[e.createElementVNode("view",{class:"status-bar"}),e.createElementVNode("view",{class:"sidebar-header"},[e.createElementVNode("view",{class:"user-profile-card",onClick:d},[e.createElementVNode("view",{class:"left"},[x.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"avatar-preview"},[e.createElementVNode("image",{src:x.value,mode:"aspectFill"},null,8,["src"])])):(e.openBlock(),e.createElementBlock("view",{key:1,class:"avatar-placeholder"},[e.createVNode(o,{type:"contact-filled",size:"50",color:"#007aff"})]))]),e.createElementVNode("view",{class:"center"},[e.createElementVNode("text",null,"欢迎回来"),e.createElementVNode("text",null,e.toDisplayString(T.value),1)]),e.createElementVNode("view",{class:"right"},[e.createElementVNode("view",{class:"status-dot"}),e.createElementVNode("view",{class:"status-text"},[e.createElementVNode("text",null,"在线")])])]),e.createElementVNode("view",{class:"new-chat-btn",onClick:C},[e.createElementVNode("text",null,"+ 聊天列表")])]),e.createElementVNode("view",{class:"chat-history"},[e.createElementVNode("view",{class:"history-header"},[e.createElementVNode("view",{class:"history-title-section"},[e.createElementVNode("text",null,"历史会话"),e.createElementVNode("text",null,e.toDisplayString(r.value.length)+"个对话",1)]),e.createElementVNode("view",{class:"history-management"},[m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-management-btn iconfont icon-jia icon-jia-style",onClick:k})),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:1,class:"history-management-btn iconfont icon-duoxuan icon-duoxuan-style",onClick:V})),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:2,class:"history-management-btn iconfont icon-saochu icon-saochu-style",onClick:f})),m.value&&v.value.length>0?(e.openBlock(),e.createElementBlock("view",{key:3,class:"history-management-btn iconfont icon-shanchu icon-shanchu-style",onClick:p})):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("view",{key:4,class:e.normalizeClass(["history-management-btn iconfont icon-total_selection icon-total_selection-style",{active:h.value}]),onClick:B},null,2)):e.createCommentVNode("",!0),m.value?(e.openBlock(),e.createElementBlock("view",{key:5,class:"history-management-btn iconfont icon-quxiao icon-quxiao-style",onClick:V})):e.createCommentVNode("",!0)])]),m.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-search-wrap"},[e.createElementVNode("view",{class:e.normalizeClass(["history-search-inner",{"has-value":N.value||b.value}])},[e.createVNode(o,{type:"search",class:e.normalizeClass([N.value||b.value?"chat-search-icon":"search-icon"])},null,8,["class"]),e.withDirectives(e.createElementVNode("input",{"onUpdate:modelValue":n[0]||(n[0]=e=>N.value=e),onFocus:n[1]||(n[1]=e=>b.value=!0),onBlur:n[2]||(n[2]=e=>b.value=!1),type:"text",placeholder:"搜索会话..."},null,544),[[e.vModelText,N.value]])],2)])),e.createElementVNode("view",{class:"chat-history-list"},[0===u.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:0},e.renderList(r.value,(t=>{var a;return e.openBlock(),e.createElementBlock("view",{key:t._id,"data-chat-id":t._id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t._id||v.value.includes(t._id)}]),onClick:e=>m.value?_(t._id):w(t._id)},[m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[v.value.includes(t._id)?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createVNode(o,{type:"chat-filled",size:"26",color:"#007aff"})]),t.agent_id?(e.openBlock(),e.createElementBlock("view",{key:1},e.toDisplayString(D(null==(a=t.agent_data)?void 0:a.title)||"加载中"),1)):(e.openBlock(),e.createElementBlock("view",{key:2},e.toDisplayString(D(t.title)),1))],10,["data-chat-id","onClick"])})),128)):e.createCommentVNode("",!0),1===u.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:1},e.renderList(r.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.sessionId,"data-chat-id":t.sessionId,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t.sessionId||v.value.includes(t.sessionId)}]),onClick:e=>m.value?_(t.sessionId):w(t.sessionId,t.receiver)},[m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[v.value.includes(t.sessionId)?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[t.avatar?(e.openBlock(),e.createElementBlock("image",{key:0,src:t.avatar,class:"friend-avatar",mode:"aspectFill"},null,8,["src"])):e.createCommentVNode("",!0)]),e.createElementVNode("view",null,e.toDisplayString(t.friendNickName),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0),2===u.value?(e.openBlock(!0),e.createElementBlock(e.Fragment,{key:2},e.renderList(r.value,(t=>(e.openBlock(),e.createElementBlock("view",{key:t.id,"data-chat-id":t.id,class:e.normalizeClass(["chat-history-card",{"is-select-chat":g.value===t.id||v.value.includes(t.id)}]),onClick:e=>m.value?_(t.id):w(t.id)},[m.value?(e.openBlock(),e.createElementBlock("view",{key:0,class:"history-chat-checkbox"},[v.value.includes(t.id)?(e.openBlock(),e.createBlock(o,{key:0,type:"checkmarkempty",size:"20",color:"#007aff"})):e.createCommentVNode("",!0)])):e.createCommentVNode("",!0),e.createElementVNode("view",{class:"history-chat-avatar"},[e.createElementVNode("view",{class:"iconfont icon-qunliao",style:{"font-size":"80rpx",color:"#fff"}})]),e.createElementVNode("view",null,e.toDisplayString(t.name),1)],10,["data-chat-id","onClick"])))),128)):e.createCommentVNode("",!0)])])])}}}),[["__scopeId","data-v-eed4c646"]]);var _={"":["",""],_:["",""],"*":["",""],"~":["",""],"\n":["
"]," ":["
"],"-":["
"]};function B(e){return e.replace(RegExp("^"+(e.match(/^(\t| )+/)||"")[0],"gm"),"")}function S(e){return(e+"").replace(/"/g,""").replace(//g,">")}function x(e,t){var a,n,o,l,s,c=/((?:^|\n+)(?:\n---+|\* \*(?: \*)+)\n)|(?:^``` *(\w*)\n([\s\S]*?)\n```$)|((?:(?:^|\n+)(?:\t| {2,}).+)+\n*)|((?:(?:^|\n)([>*+-]|\d+\.)\s+.*)+)|(?:!\[([^\]]*?)\]\(([^)]+?)\))|(\[)|(\](?:\(([^)]+?)\))?)|(?:(?:^|\n+)([^\s].*)\n(-{3,}|={3,})(?:\n+|$))|(?:(?:^|\n+)(#{1,6})\s*(.+)(?:\n+|$))|(?:`([^`].*?)`)|( \n\n*|\n{2,}|__|\*\*|[_*]|~~)/gm,i=[],r="",u=t||{},d=0;function m(e){var t=_[e[1]||""],a=i[i.length-1]==e;return t?t[1]?(a?i.pop():i.push(e),t[0|a]):t[0]:e}function v(){for(var e="";i.length;)e+=m(i[i.length-1]);return e}for(e=e.replace(/^\[(.+?)\]:\s*(.+)$/gm,(function(e,t,a){return u[t.toLowerCase()]=a,""})).replace(/^\n+|\n+$/g,"");o=c.exec(e);)n=e.substring(d,o.index),d=c.lastIndex,a=o[0],n.match(/[^\\](\\\\)*\\$/)||((s=o[3]||o[4])?a='"+B(S(s).replace(/^\n+|\n+$/g,""))+"
":(s=o[6])?(s.match(/\./)&&(o[5]=o[5].replace(/^\d+/gm,"")),l=x(B(o[5].replace(/^\s*[>*+.-]/gm,""))),">"==s?s="blockquote":(s=s.match(/\./)?"ol":"ul",l=l.replace(/^(.*)(\n|$)/gm,"$1")),a="<"+s+">"+l+""+s+">"):o[8]?a='
':o[10]?(r=r.replace("",''),a=v()+""):o[9]?a="":o[12]||o[14]?a="<"+(s="h"+(o[14]?o[14].length:o[13]>"="?1:2))+">"+x(o[12]||o[15],u)+""+s+">":o[16]?a=""+S(o[16])+"":(o[17]||o[1])&&(a=m(o[17]||"--"))),r+=n,r+=a;return(r+e.substring(d)+v()).replace(/^\n+|\n+$/g,"")}
/*!
* pinia v2.1.7
* (c) 2023 Eduardo San Martin Morote
* @license MIT
*/
-let S;const x=e=>S=e,T=Symbol();function D(e){return e&&"object"==typeof e&&"[object Object]"===Object.prototype.toString.call(e)&&"function"!=typeof e.toJSON}var P,j;(j=P||(P={})).direct="direct",j.patchObject="patch object",j.patchFunction="patch function";const $=()=>{};function L(t,a,n,o=$){t.push(a);const l=()=>{const e=t.indexOf(a);e>-1&&(t.splice(e,1),o())};return!n&&e.getCurrentScope()&&e.onScopeDispose(l),l}function M(e,...t){e.slice().forEach((e=>{e(...t)}))}const I=e=>e();function z(t,a){t instanceof Map&&a instanceof Map&&a.forEach(((e,a)=>t.set(a,e))),t instanceof Set&&a instanceof Set&&a.forEach(t.add,t);for(const n in a){if(!a.hasOwnProperty(n))continue;const o=a[n],l=t[n];D(l)&&D(o)&&t.hasOwnProperty(n)&&!e.isRef(o)&&!e.isReactive(o)?t[n]=z(l,o):t[n]=o}return t}const F=Symbol();const{assign:O}=Object;function A(t,a,n={},o,l,s){let c;const i=O({actions:{}},n),r={deep:!0};let u,d,m,v=[],p=[];const f=o.state.value[t];let h;function g(a){let n;u=d=!1,"function"==typeof a?(a(o.state.value[t]),n={type:P.patchFunction,storeId:t,events:m}):(z(o.state.value[t],a),n={type:P.patchObject,payload:a,storeId:t,events:m});const l=h=Symbol();e.nextTick().then((()=>{h===l&&(u=!0)})),d=!0,M(v,n,o.state.value[t])}s||f||(o.state.value[t]={}),e.ref({});const w=s?function(){const{state:e}=n,t=e?e():{};this.$patch((e=>{O(e,t)}))}:$;function k(e,a){return function(){x(o);const n=Array.from(arguments),l=[],s=[];function c(e){l.push(e)}function i(e){s.push(e)}let r;M(p,{args:n,name:e,store:E,after:c,onError:i});try{r=a.apply(this&&this.$id===t?this:E,n)}catch(u){throw M(s,u),u}return r instanceof Promise?r.then((e=>(M(l,e),e))).catch((e=>(M(s,e),Promise.reject(e)))):(M(l,r),r)}}const y={_p:o,$id:t,$onAction:L.bind(null,p),$patch:g,$reset:w,$subscribe(a,n={}){const l=L(v,a,n.detached,(()=>s())),s=c.run((()=>e.watch((()=>o.state.value[t]),(e=>{("sync"===n.flush?d:u)&&a({storeId:t,type:P.direct,events:m},e)}),O({},r,n))));return l},$dispose:function(){c.stop(),v=[],p=[],o._s.delete(t)}},E=e.reactive(y);o._s.set(t,E);const N=(o._a&&o._a.runWithContext||I)((()=>o._e.run((()=>(c=e.effectScope()).run(a)))));for(const V in N){const a=N[V];if(e.isRef(a)&&(b=a,!e.isRef(b)||!b.effect)||e.isReactive(a))s||(!f||D(C=a)&&C.hasOwnProperty(F)||(e.isRef(a)?a.value=f[V]:z(a,f[V])),o.state.value[t][V]=a);else if("function"==typeof a){const e=k(V,a);N[V]=e,i.actions[V]=a}}var C,b;return O(E,N),O(e.toRaw(E),N),Object.defineProperty(E,"$state",{get:()=>o.state.value[t],set:e=>{g((t=>{O(t,e)}))}}),o._p.forEach((e=>{O(E,c.run((()=>e({store:E,app:o._a,pinia:o,options:i}))))})),f&&s&&n.hydrate&&n.hydrate(E.$state,f),u=!0,d=!0,E}function U(t,a,n){let o,l;const s="function"==typeof a;function c(t,n){const c=e.hasInjectionContext();(t=t||(c?e.inject(T,null):null))&&x(t),(t=S)._s.has(o)||(s?A(o,a,l,t):function(t,a,n,o){const{state:l,actions:s,getters:c}=a,i=n.state.value[t];let r;r=A(t,(function(){i||(n.state.value[t]=l?l():{});const a=e.toRefs(n.state.value[t]);return O(a,s,Object.keys(c||{}).reduce(((a,o)=>(a[o]=e.markRaw(e.computed((()=>{x(n);const e=n._s.get(t);return c[o].call(e,e)}))),a)),{}))}),a,n,0,!0)}(o,l,t));return t._s.get(o)}return"string"==typeof t?(o=t,l=s?n:a):(l=t,o=t.id),c.$id=o,c}const q=new class{constructor(){this.ws=null,this.url="ws://cloud.yuxindazhineng.com/cloud_api/phone/app_ws",this.options={token:"",conversationId:"",onMessage:null,onError:null,onReconnect:null,onOpen:null,onClose:null},this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=3e3,this.reconnectTimer=null,this.heartbeatTimer=null,this.isManualClose=!1}connect(e={}){this.options={...this.options,...e},this.isManualClose=!1,this.ws&&this.close();try{this.ws=uni.connectSocket({url:this.url,success:()=>{t("log","at utils/socket.js:44","WebSocket 连接请求已发送")},fail:e=>{t("error","at utils/socket.js:47","WebSocket 连接失败:",e),this.handleError(e)}}),this.initEventHandlers()}catch(a){this.handleError(a)}}initEventHandlers(){this.ws&&(this.ws.onOpen((e=>{var a,n,o,l;t("log","at utils/socket.js:74","WebSocket 已连接"),this.reconnectAttempts>0&&(null==(n=(a=this.options).onReconnect)||n.call(a)),null==(l=(o=this.options).onOpen)||l.call(o,e),this.reconnectAttempts=0})),this.ws.onMessage((e=>{try{const a=JSON.parse(e.data);t("log","at utils/socket.js:87","收到了返回消息:",a),this.handleMessage(a)}catch(a){t("error","at utils/socket.js:91","消息解析失败:",a),uni.setStorageSync("currentSessionId",e.data.task_call_id)}})),this.ws.onError((e=>{t("error","at utils/socket.js:96","WebSocket 错误:",e),this.handleError(e)})),this.ws.onClose((e=>{var a,n;t("log","at utils/socket.js:100","WebSocket 已关闭:",e.code,e.reason),null==(n=(a=this.options).onClose)||n.call(a,e),this.stopHeartbeat(),!this.isManualClose&&this.reconnectAttempts{if(!this.isConnected())return void n(new Error("WebSocket 未连接"));const o=JSON.stringify(e);t("log","at utils/socket.js:193","发送的消息是:",o),this.ws.send({data:o,success:()=>a(),fail:e=>{t("error","at utils/socket.js:201","发送消息失败:",e),n(e)}})}))}reconnect(){this.reconnectTimer||(this.reconnectAttempts++,t("log","at utils/socket.js:227",`尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),this.reconnectTimer=setTimeout((()=>{this.reconnectTimer=null,this.isManualClose||this.connect(this.options)}),this.reconnectDelay*this.reconnectAttempts))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval((()=>{this.isConnected()?this.send({ws_event:"ping"}).catch((()=>{t("log","at utils/socket.js:249","心跳发送失败,准备重连"),this.reconnectTimer||this.isManualClose||this.reconnect()})):!this.isManualClose&&this.reconnectAttemptst("log","at utils/socket.js:335","连接已关闭"),fail:e=>t("error","at utils/socket.js:336","关闭失败:",e)})}catch(e){t("error","at utils/socket.js:344","关闭连接出错:",e)}this.ws=null}this.reconnectAttempts=0}updateOptions(e){this.options={...this.options,...e}}},W=U("socket",(()=>{const a=e.ref("disconnected"),n=e.ref([]),o=e.ref(""),l=e.ref(!1),s=e.ref({token:"",conversationId:""});e.ref("");const c=e.ref([]),i=e.ref(20),r=e.ref(""),u=e.computed((()=>"connected"===a.value)),d=e.computed((()=>"connecting"===a.value)),m=e.computed((()=>"disconnected"===a.value)),v=e.computed((()=>"error"===a.value)),p=e.computed((()=>n.value[n.value.length-1]));function f(e,a){const n=new Date,o=`${n.getHours().toString().padStart(2,"0")}:${n.getMinutes().toString().padStart(2,"0")}:${n.getSeconds().toString().padStart(2,"0")}`;c.value.push({type:e,connect:a,time:o}),c.value.length>i.value&&(c.value=c.value.slice(-i.value)),t("log","at stores/socket.js:54",`[${e.toUpperCase()}] ${a}`)}function h(){a.value="connected",f("success","连接成功!发送auth"),t("log","at stores/socket.js:117","连接成功!发送auth"),s.value.token,q.send({type:"auth",access_token:s.value.token})}function g(){"disconnected"!==a.value&&(a.value="disconnected",f("warn","连接已断开"))}function w(e){f("error",`Socket错误: ${JSON.stringify(e)}`),a.value="error"}function k(e){a.value="connecting",f("warn",`重连中... (${e}/5)`)}function y(e){f("receive",`收到: ${JSON.stringify(e)}`);const{type:a,conversation_id:n,message_id:s,data:c}=e||{};switch(t("log","at stores/socket.js:162","[handleMessage] type =",a,", data =",JSON.stringify(c)),a){case"auth_ok":f("success","连接成功");break;case"auth_fail":l.value=!1,r.value=(null==c?void 0:c.reason)||(null==e?void 0:e.reason)||"unknown",f("error",`认证失败: ${r.value}`);break;case"chat_ack":f("warn","AI成功收到用户发送的消息");break;case"render":f("warn","AI正在回复信息"),function(e){if("exit"===e)return t("log","at stores/socket.js:220","ai结束思考"),void(l.value=!1);if(!e||"object"!=typeof e)return;const{role:a,chunk:n,message_role:s,meaasge_uuid:c,message_type:i,task_call_id:r}=e;l.value||!n&&"assistant"!==s||(t("log","at stores/socket.js:241","ai开始思考"),o.value="",l.value=!0);n&&(o.value+=n)}(c);break;default:f("info",`未知事件类型: ${a}`)}}return{connectionStatus:a,messageString:o,isThinking:l,logs:c,config:s,authFailReason:r,isConnected:u,isConnecting:d,isDisconnected:m,isError:v,lastMessage:p,connect:function(e={}){n.value=[],o.value="",s.value={...s.value,...e},f("info",`准备连接WebSocket。Token:${s.value.token||"未设置"}。ConversationId: ${s.value.conversationId||"未设置"}`),s.value.token&&s.value.conversationId?(a.value="connecting",q.connect({token:s.value.token,conversationId:s.value.conversationId,onMessage:y,onError:w,onOpen:h,onClose:g,onReconnect:k}),setTimeout((()=>{"connecting"===a.value&&(a.value="error",f("error","连接超时(10s)"))}),1e4)):f("error","Token和ConversationId都不能为空")},disconnect:function(){q.close(),a.value="disconnected",f("warn","已主动断开连接")},send:async function(e){if(t("log","at stores/socket.js:98","检查到要发生消息为:",e),!u.value)throw f("error","发送失败: 连接未建立"),new Error("连接未建立");try{return await q.send(e),f("send","string"==typeof e?e:JSON.stringify(e)),!0}catch(a){throw f("error",`发送失败: ${a.message||a}`),a}},addLog:f,clearLogs:function(){c.value=[]},getStatusText:function(){return{connecting:"连接中",connected:"已连接",disconnected:"未连接",error:"连接错误"}[a.value]||"未知状态"}}})),R="http://chat.yuxindazhineng.com",J=async e=>new Promise(((a,n)=>{uni.request({url:`${R}/api/chatList/getChatFriend`,method:"POST",header:{"Content-Type":"application/json"},data:{size:500,current:1,sendId:e},success:e=>{var o;if(200===e.statusCode){const l=e.data;if(t("log","at utils/friend-api.js:20","获取到的好友列表消息",l),0===(null==l?void 0:l.code)||"成功"===(null==l?void 0:l.msg)){const e=null==(o=l.data)?void 0:o.records;if(e.length>0){const t=e[0].receiver;t&&uni.setStorageSync("receiverId",t)}a(e)}else{const t=e.data.error||"获取好友列表出错啦";n(t)}}else n(`获取好友列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";n(t)}})})),H=async e=>new Promise(((t,a)=>{uni.request({url:`${R}/api/group/getGroup`,method:"POST",header:{"Content-Type":"application/json"},data:{size:500,current:1,contactId:e},success:e=>{var n;if(200===e.statusCode){const o=e.data;if(0===(null==o?void 0:o.code)||"成功"===(null==o?void 0:o.msg)){const e=null==(n=o.data)?void 0:n.records;t(e)}else{const t=e.data.error||"获取群聊列表出错啦";a(t)}}else a(`获取群聊列表失败:${e.statusCode}`)},fail:e=>{const t=e.errMsg||"网络错误";a(t)}})})),G=e=>new Promise(((t,a)=>{uni.uploadFile({url:`${R}/api/file/upload`,filePath:e,name:"file",success:e=>{const n=JSON.parse(e.data);0===n.code?t(n.data):a(n.msg||"上传失败")},fail:e=>{a(e.errMsg||"网络错误")}})}));const X=new class{constructor(){this.ws=null,this.url="wss://wss.yuxindazhineng.com/ws",this.options={token:"",UserId:"",onMessage:null,onError:null,onReconnect:null,onOpen:null,onClose:null},this.reconnectAttempts=0,this.maxReconnectAttempts=5,this.reconnectDelay=3e3,this.reconnectTimer=null,this.heartbeatTimer=null,this.isManualClose=!1}connect(e={}){this.options={...this.options,...e},this.isManualClose=!1,this.ws&&(t("log","at utils/friend-socket.js:37","关闭现有连接"),this.close());try{this.ws=uni.connectSocket({url:this.url,success:()=>{t("log","at utils/friend-socket.js:45","WebSocket 连接请求已发送")},fail:e=>{t("error","at utils/friend-socket.js:48","WebSocket 连接失败:",e),this.handleError(e)}}),this.initEventHandlers()}catch(a){this.handleError(a)}}initEventHandlers(){this.ws&&(this.ws.onOpen((e=>{var a,n,o,l;t("log","at utils/friend-socket.js:75","WebSocket 已连接"),this.reconnectAttempts>0&&(null==(n=(a=this.options).onReconnect)||n.call(a)),null==(l=(o=this.options).onOpen)||l.call(o,e),this.reconnectAttempts=0})),this.ws.onMessage((e=>{try{const a=JSON.parse(e.data);t("log","at utils/friend-socket.js:88","收到了返回消息:",a),this.handleMessage(a)}catch(a){t("error","at utils/friend-socket.js:91","消息解析失败:",a),uni.setStorageSync("currentSessionId",e.data.task_call_id)}})),this.ws.onError((e=>{t("error","at utils/friend-socket.js:96","WebSocket 错误:",JSON.stringify(e)),this.handleError(e)})),this.ws.onClose((e=>{var a,n;t("log","at utils/friend-socket.js:100","WebSocket 已关闭:",e.code,e.reason),null==(n=(a=this.options).onClose)||n.call(a,e),!this.isManualClose&&this.reconnectAttempts{if(!this.isConnected())return void n(new Error("WebSocket 未连接"));const o=JSON.stringify(e);t("log","at utils/friend-socket.js:171","发送的消息是:",o),this.ws.send({data:o,success:()=>a(),fail:e=>{t("error","at utils/friend-socket.js:179","发送消息失败:",e),n(e)}})}))}reconnect(){this.reconnectTimer||(this.reconnectAttempts++,t("log","at utils/friend-socket.js:205",`尝试重连 (${this.reconnectAttempts}/${this.maxReconnectAttempts})...`),this.reconnectTimer=setTimeout((()=>{this.reconnectTimer=null,this.isManualClose||this.connect(this.options)}),this.reconnectDelay*this.reconnectAttempts))}startHeartbeat(){this.stopHeartbeat(),this.heartbeatTimer=setInterval((()=>{this.isConnected()?this.send({ws_event:"ping"}).catch((()=>{t("log","at utils/friend-socket.js:227","心跳发送失败,准备重连"),this.reconnectTimer||this.isManualClose||this.reconnect()})):!this.isManualClose&&this.reconnectAttempts{})),this.ws.onMessage((()=>{})),this.ws.onError((()=>{})),this.ws.onClose((()=>{}));try{this.ws.close({success:()=>t("log","at utils/friend-socket.js:314","连接已关闭"),fail:e=>t("error","at utils/friend-socket.js:315","关闭失败:",e)})}catch(e){t("error","at utils/friend-socket.js:323","关闭连接出错:",e)}this.ws=null}this.reconnectAttempts=0}updateOptions(e){this.options={...this.options,...e}}},K=U("friendSocket",(()=>{const a=e.ref("disconnected"),n=e.ref([]),o=e.ref(""),l=e.ref({token:"",UserId:""});e.ref("");const s=e.ref(null),c=e.ref(null),i=e.ref(!1),r=e.ref([]),u=e.ref(20),d=e.computed((()=>"connected"===a.value)),m=e.computed((()=>"connecting"===a.value)),v=e.computed((()=>"disconnected"===a.value)),p=e.computed((()=>"error"===a.value)),f=e.computed((()=>n.value[n.value.length-1]));function h(e,a){const n=new Date,o=`${n.getHours().toString().padStart(2,"0")}:${n.getMinutes().toString().padStart(2,"0")}:${n.getSeconds().toString().padStart(2,"0")}`;r.value.push({type:e,connect:a,time:o}),r.value.length>u.value&&(r.value=r.value.slice(-u.value)),t("log","at stores/friend-socket.js:57",`[${e.toUpperCase()}] ${a}`)}function g(){a.value="connected",h("success","连接成功!"),async function(){const e={version:"1.1",body:{command:7,sender:N(),avatar:"",sessionId:"",message:"",callBackMessage:!1}};try{await X.send(e),h("send","string"==typeof e?e:JSON.stringify(e))}catch(t){throw h("error",`发送验证失败: ${t.message||t}`),t}}()}function w(){"disconnected"!==a.value&&(a.value="disconnected",h("warn","连接已断开"))}function k(e){h("error",`Socket错误: ${JSON.stringify(e)}`),a.value="error"}function y(e){a.value="connecting",h("warn",`重连中... (${e}/5)`)}function E(e){h("receive",`收到: ${JSON.stringify(e)}`);const a=e.body||e,{callBackMessage:n,groupName:o,command:l,groupId:r}=a||{};switch(l){case 3:s.value=l,c.value=r;break;case 7:s.value=l;break;case 1:t("log","at stores/friend-socket.js:199","有好友消息"),i.value=!0;break;case 9:t("log","at stores/friend-socket.js:204","群消息发送成功/有新群消息"),i.value=!0;break;default:h("info","未知事件类型")}}return{connectionStatus:a,messageString:o,logs:r,config:l,command:s,groupId:c,MessageReceived:i,isConnected:d,isConnecting:m,isDisconnected:v,isError:p,lastMessage:f,connect:function(e={}){n.value=[],o.value="",l.value={...l.value,...e},h("info",`准备连接FriendsWebSocket。Token:${l.value.token||"未设置"}。UserId: ${l.value.UserId||"未设置"}`),l.value.token&&l.value.UserId?(a.value="connecting",X.connect({token:l.value.token,UserId:l.value.UserId,onMessage:E,onError:k,onOpen:g,onClose:w,onReconnect:y}),setTimeout((()=>{"connecting"===a.value&&(a.value="error",h("error","连接超时(10s)"))}),1e4)):h("error","Token和UserId都不能为空")},disconnect:function(){X.close(),a.value="disconnected",h("warn","已主动断开连接")},send:async function(e){if(!d.value)throw h("error","发送失败: 连接未建立"),new Error("连接未建立");try{return await X.send(e),h("send","string"==typeof e?e:JSON.stringify(e)),!0}catch(t){throw h("error",`发送失败: ${t.message||t}`),t}},addLog:h,clearLogs:function(){r.value=[]},getStatusText:function(){return{connecting:"连接中",connected:"已连接",disconnected:"未连接",error:"连接错误"}[a.value]||"未知状态"}}})),{registerUTSInterface:Y,initUTSProxyClass:Q,initUTSProxyFunction:Z,initUTSPackageName:ee,initUTSIndexClassName:te,initUTSClassName:ae}=uni,ne="limeChooseFile",oe=Z(!1,{moduleName:"lime-choose-file 文件选择",moduleType:"",errMsg:"",main:!0,package:ee(ne,true),class:te(ne,true),name:"chooseFileByJs",keepAlive:!1,params:[{name:"options",type:"UTSSDKModulesLimeChooseFileChooseFileOptionJSONObject"}],return:""}),le=f({__name:"Chat",setup(l){const i=K(),r=()=>{i.isConnected||(te.value&&ae.value?i.connect({token:te.value,UserId:ae.value}):t("warn","at pages/Chat/Chat.vue:306","Token或UserId未准备好"))},u=W(),d=e.ref(0),m=(e,t)=>{let a='';return e.forEach(((e,n)=>{const o=0===n?"th":"td",l=e.split("|").filter((e=>""!==e.trim()));a+="",l.forEach(((e,n)=>{const l=t[n]?` style="text-align:${t[n]}"`:"";a+=`<${o}${l} style="padding:6px 10px;border:1px solid #ddd">${e.trim()}${o}>`})),a+="
"})),a+="
",a},v=e=>{if(!e)return"";e=p(e);try{e=(e=>{const t=e.split("\n");let a=[],n=!1,o=[],l=[];for(let s=0;se.trim())).map((e=>e.trim().startsWith(":")&&e.trim().endsWith(":")?"center":e.trim().endsWith(":")?"right":"left"));continue}o.push(e),n=!0}else n&&o.length>0&&(a.push(m(o,l)),o=[],l=[],n=!1),a.push(e)}return n&&o.length>0&&a.push(m(o,l)),a.join("\n")})(e);return B(e)}catch(a){return t("error","at pages/Chat/Chat.vue:404","解析失败",a),e}},p=e=>{const t=/