import{M as a,d as s,r as e,G as l,b as t,K as n,X as i,s as u,ay as o,c,w as r,k as _,P as d,o as v,l as m,m as f,q as y,t as p,S as g,D as h,x as w,F as b,y as k,v as C,z as x,ao as I,j as A,N as D,n as M,at as q,e as z,a8 as $,a0 as S,_ as j}from"./index-CXWaumcQ.js";import{w as V,A as N}from"./aiRequest.br0QglYY.js";function T(s){return a.get({url:"/assistant/messages",data:s})}const B="sbnews_assistant_client_id",F=j(s({__name:"ai_assistant",setup(s){const j=e(0),F=e(""),G=e(0),K=e(""),P=e(!1),R=e(!1),U=e(""),X=e([]),E=e([]),H=e(0);let J=null;const L=["今天有什么值得关注的赛事?","帮我总结最新世界杯资讯","旧澳六合最近有什么分析线索?","BTC 今天行情怎么样?"],O=l(()=>K.value.trim().length>0&&!P.value),Q=l(()=>{const a=Math.max(0,Number(H.value||0));return`${Math.floor(a/60)}m${a%60}s`});t(async()=>{n(),j.value=0,F.value=W(),await Y()});const W=()=>{const a=i(B);if(a)return String(a);const s=`c_${Date.now()}_${Math.random().toString(16).slice(2)}`;return u(B,s),s},Y=async()=>{try{E.value=await(s={client_id:F.value},a.get({url:"/assistant/sessions",data:s}))}catch(e){E.value=[]}var s},Z=()=>{G.value=0,X.value=[],R.value=!1,K.value=""},aa=async()=>{R.value=!R.value,R.value&&await Y()},sa=async()=>{var s;const e=K.value.trim();if(!e||P.value)return;const l={id:Date.now(),session_id:G.value,role:"user",content:e},t={id:Date.now()+1,session_id:G.value,role:"assistant",content:"",pending:!0};X.value.push(l,t),K.value="",P.value=!0,ta(),ua();try{const l=await(n={message:e,client_id:F.value,session_id:G.value||void 0},a.post(V({url:"/assistant/chat",data:n}),{...N,retryCount:0}));G.value=(null==(s=l.session)?void 0:s.id)||G.value;const t=l.message||{role:"assistant",content:"我暂时没有生成成功,请稍后再试。",sources:l.sources||[]};X.value.splice(X.value.length-1,1,t),await Y()}catch(i){console.error("[ai_assistant] chat failed:",i);if(await ea(e))return;X.value.splice(X.value.length-1,1,{id:Date.now()+2,session_id:G.value,role:"assistant",content:la(i),sources:[]})}finally{na(),P.value=!1,ua()}var n},ea=async a=>{var s;try{await Y();const e=E.value.find(s=>s.last_message===a);if(!(null==e?void 0:e.id))return!1;const l=await T({client_id:F.value,session_id:e.id}),t=l.messages||[],n=t.some(s=>"user"===s.role&&s.content===a),i=t.some(a=>"assistant"===a.role&&!a.pending);return!(!n||!i)&&(G.value=(null==(s=l.session)?void 0:s.id)||e.id,X.value=t,await Y(),ua(),!0)}catch(e){return console.error("[ai_assistant] recover latest reply failed:",e),!1}},la=a=>{const s=(a=>{var s;return"string"==typeof a?a:String((null==a?void 0:a.msg)||(null==a?void 0:a.errMsg)||(null==a?void 0:a.message)||(null==(s=null==a?void 0:a.data)?void 0:s.msg)||"")})(a);return/timeout|超时/i.test(s)?"AI助手响应时间较长,请稍后再试;当前请求已超时。":/abort|cancel/i.test(s)?"AI助手请求已取消,请重新发送问题。":/request:fail|network|网络/i.test(s)?s?`AI助手请求失败,请检查网络后重试。错误详情:${s}`:"AI助手请求失败,请检查网络后重试。":s||"AI助手请求失败,请稍后重试。"},ta=()=>{na(),H.value=0;const a=Date.now();J=setInterval(()=>{H.value=Math.floor((Date.now()-a)/1e3)},1e3)},na=()=>{J&&(clearInterval(J),J=null)},ia=()=>{D({title:"清空历史",content:"确定清空所有助手会话?",success:async s=>{var e;if(s.confirm)try{await(e={client_id:F.value},a.post({url:"/assistant/clear",data:e})),E.value=[],Z()}catch(l){A({title:"清空失败",icon:"none"})}}})},ua=()=>{M(()=>{U.value="msg-"+Math.max(X.value.length-1,0)})},oa=()=>{$().length>1?S():q({url:"/pages/index/index"})};return o(()=>{na()}),(a,s)=>{const e=d("u-icon"),l=_,t=y,n=g,i=I;return v(),c(l,{class:"assistant-page"},{default:r(()=>[m(l,{class:"assistant-nav",style:f({paddingTop:j.value+"px"})},{default:r(()=>[m(l,{class:"assistant-nav__btn",onClick:oa},{default:r(()=>[m(e,{name:"arrow-left",size:"34",color:"#1f2937"})]),_:1}),m(t,{class:"assistant-nav__title"},{default:r(()=>[p("世博头条 AI 助手")]),_:1}),m(l,{class:"assistant-nav__actions"},{default:r(()=>[m(l,{class:"assistant-nav__btn",onClick:aa},{default:r(()=>[m(e,{name:"clock",size:"32",color:"#1f2937"})]),_:1}),m(l,{class:"assistant-nav__btn",onClick:Z},{default:r(()=>[m(e,{name:"plus",size:"32",color:"#1f2937"})]),_:1})]),_:1})]),_:1},8,["style"]),R.value?(v(),c(l,{key:0,class:"history-panel"},{default:r(()=>[m(l,{class:"history-panel__header"},{default:r(()=>[m(t,null,{default:r(()=>[p("历史会话")]),_:1}),m(t,{class:"history-panel__clear",onClick:ia},{default:r(()=>[p("清空")]),_:1})]),_:1}),m(n,{"scroll-y":"",class:"history-panel__list"},{default:r(()=>[E.value.length?h("",!0):(v(),c(l,{key:0,class:"history-panel__empty"},{default:r(()=>[p("暂无历史会话")]),_:1})),(v(!0),w(b,null,k(E.value,a=>(v(),c(l,{key:a.id,class:"history-item",onClick:s=>(async a=>{var s;try{const e=await T({client_id:F.value,session_id:a.id});G.value=(null==(s=e.session)?void 0:s.id)||a.id,X.value=e.messages||[],R.value=!1,ua()}catch(e){A({title:"会话加载失败",icon:"none"})}})(a)},{default:r(()=>[m(t,{class:"history-item__title"},{default:r(()=>[p(C(a.title||"新的对话"),1)]),_:2},1024),m(t,{class:"history-item__desc"},{default:r(()=>[p(C(a.last_message||a.last_answer),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:1})]),_:1})):h("",!0),m(n,{"scroll-y":"",class:"message-list","scroll-into-view":U.value,"scroll-with-animation":""},{default:r(()=>[m(l,{class:"welcome"},{default:r(()=>[m(l,{class:"welcome__badge"},{default:r(()=>[p("AI")]),_:1}),m(l,{class:"welcome__body"},{default:r(()=>[m(t,{class:"welcome__title"},{default:r(()=>[p("你好,我可以帮你查站内内容")]),_:1}),m(t,{class:"welcome__desc"},{default:r(()=>[p("可以问资讯、赛事、社区帖子、彩票分析和加密行情。")]),_:1})]),_:1})]),_:1}),m(l,{class:"quick-list"},{default:r(()=>[(v(),w(b,null,k(L,a=>m(l,{key:a,class:"quick-list__item",onClick:s=>{return e=a,K.value=e,void sa();var e}},{default:r(()=>[m(t,{class:"quick-list__text"},{default:r(()=>[p(C(a),1)]),_:2},1024)]),_:2},1032,["onClick"])),64))]),_:1}),(v(!0),w(b,null,k(X.value,(a,s)=>(v(),c(l,{id:"msg-"+s,key:a.id||s,class:x(["message-row","user"===a.role?"message-row--user":"message-row--assistant"])},{default:r(()=>["user"!==a.role?(v(),c(l,{key:0,class:"message-row__avatar"},{default:r(()=>[p("AI")]),_:1})):h("",!0),m(l,{class:"message-row__body"},{default:r(()=>[m(l,{class:"message-bubble"},{default:r(()=>[a.pending?(v(),c(l,{key:0,class:"message-bubble__pending"},{default:r(()=>[m(l,{class:"message-bubble__pulse"}),m(t,{class:"message-bubble__loading"},{default:r(()=>[p("正在整理站内资料...")]),_:1}),m(t,{class:"message-bubble__timer"},{default:r(()=>[p("分析用时 "+C(Q.value),1)]),_:1})]),_:1})):(v(),c(t,{key:1,class:"message-bubble__text"},{default:r(()=>[p(C(a.content),1)]),_:2},1024)),a.sources&&a.sources.length?(v(),c(l,{key:2,class:"source-list"},{default:r(()=>[(v(!0),w(b,null,k(a.sources,a=>(v(),c(l,{key:a.type+a.source_id+a.title,class:"source-item",onClick:s=>(a=>{a.path&&("/pages/crypto/crypto"!==a.path&&"/pages/lottery_analysis/lottery_analysis"!==a.path?z({url:a.path}):q({url:a.path}))})(a)},{default:r(()=>[m(l,{class:"source-item__meta"},{default:r(()=>{return[p(C((s=a.type,{article:"资讯",post:"社区",match:"赛事",lottery:"彩票",crypto:"行情"}[s]||"来源")),1)];var s}),_:2},1024),m(t,{class:"source-item__title"},{default:r(()=>[p(C(a.title),1)]),_:2},1024),m(t,{class:"source-item__summary"},{default:r(()=>[p(C(a.summary),1)]),_:2},1024)]),_:2},1032,["onClick"]))),128))]),_:2},1024)):h("",!0)]),_:2},1024)]),_:2},1024)]),_:2},1032,["id","class"]))),128))]),_:1},8,["scroll-into-view"]),m(l,{class:"input-panel"},{default:r(()=>[m(l,{class:"input-bar"},{default:r(()=>[m(i,{modelValue:K.value,"onUpdate:modelValue":s[0]||(s[0]=a=>K.value=a),class:"input-bar__textarea","disable-default-padding":"",maxlength:"500","cursor-spacing":18,"show-confirm-bar":!1,disabled:P.value,placeholder:"问问世博头条里的内容","confirm-type":"send",onConfirm:sa},null,8,["modelValue","disabled"]),m(l,{class:x(["input-bar__send",{"input-bar__send--disabled":!O.value}]),onClick:sa},{default:r(()=>[m(e,{name:"arrow-upward",size:"32",color:"#fff"})]),_:1},8,["class"])]),_:1})]),_:1})]),_:1})}}}),[["__scopeId","data-v-43972357"]]);export{F as default};