Files
sbnews/server/public/mobile/assets/pages-ai_assistant-ai_assistant.CJkec8eH.js
T

2 lines
7.7 KiB
JavaScript

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 b,F as w,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 S,a0 as $,_ as j}from"./index-DtAmsop1.js";import{w as V,A as N}from"./aiRequest.br0QglYY.js";const T="sbnews_assistant_client_id",B=j(s({__name:"ai_assistant",setup(s){const j=e(0),B=e(""),F=e(0),G=e(""),K=e(!1),P=e(!1),R=e(""),U=e([]),X=e([]),E=e(0);let H=null;const J=["今天有什么值得关注的赛事?","帮我总结最新世界杯资讯","旧澳六合最近有什么分析线索?","BTC 今天行情怎么样?"],L=l(()=>G.value.trim().length>0&&!K.value),O=l(()=>{const a=Math.max(0,Number(E.value||0));return`${Math.floor(a/60)}m${a%60}s`});t(async()=>{n(),j.value=0,B.value=Q(),await W()});const Q=()=>{const a=i(T);if(a)return String(a);const s=`c_${Date.now()}_${Math.random().toString(16).slice(2)}`;return u(T,s),s},W=async()=>{try{X.value=await(s={client_id:B.value},a.get({url:"/assistant/sessions",data:s}))}catch(e){X.value=[]}var s},Y=async s=>{var e,l;try{const t=await(l={client_id:B.value,session_id:s.id},a.get({url:"/assistant/messages",data:l}));F.value=(null==(e=t.session)?void 0:e.id)||s.id,U.value=t.messages||[],P.value=!1,ia()}catch(t){A({title:"会话加载失败",icon:"none"})}},Z=()=>{F.value=0,U.value=[],P.value=!1,G.value=""},aa=async()=>{P.value=!P.value,P.value&&await W()},sa=async()=>{var s;const e=G.value.trim();if(!e||K.value)return;const l={id:Date.now(),session_id:F.value,role:"user",content:e},t={id:Date.now()+1,session_id:F.value,role:"assistant",content:"",pending:!0};U.value.push(l,t),G.value="",K.value=!0,la(),ia();try{const l=await(n={message:e,client_id:B.value,session_id:F.value||void 0},a.post(V({url:"/assistant/chat",data:n}),{...N,retryCount:0}));F.value=(null==(s=l.session)?void 0:s.id)||F.value;const t=l.message||{role:"assistant",content:"我暂时没有生成成功,请稍后再试。",sources:l.sources||[]};U.value.splice(U.value.length-1,1,t),await W()}catch(i){console.error("[ai_assistant] chat failed:",i),U.value.splice(U.value.length-1,1,{id:Date.now()+2,session_id:F.value,role:"assistant",content:ea(i),sources:[]})}finally{ta(),K.value=!1,ia()}var n},ea=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)?"AI助手请求失败,请检查网络后重试。":s||"AI助手请求失败,请稍后重试。"},la=()=>{ta(),E.value=0;const a=Date.now();H=setInterval(()=>{E.value=Math.floor((Date.now()-a)/1e3)},1e3)},ta=()=>{H&&(clearInterval(H),H=null)},na=()=>{D({title:"清空历史",content:"确定清空所有助手会话?",success:async s=>{var e;if(s.confirm)try{await(e={client_id:B.value},a.post({url:"/assistant/clear",data:e})),X.value=[],Z()}catch(l){A({title:"清空失败",icon:"none"})}}})},ia=()=>{M(()=>{R.value="msg-"+Math.max(U.value.length-1,0)})},ua=()=>{S().length>1?$():q({url:"/pages/index/index"})};return o(()=>{ta()}),(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:ua},{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"]),P.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:na},{default:r(()=>[p("清空")]),_:1})]),_:1}),m(n,{"scroll-y":"",class:"history-panel__list"},{default:r(()=>[X.value.length?h("",!0):(v(),c(l,{key:0,class:"history-panel__empty"},{default:r(()=>[p("暂无历史会话")]),_:1})),(v(!0),b(w,null,k(X.value,a=>(v(),c(l,{key:a.id,class:"history-item",onClick:s=>Y(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":R.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(),b(w,null,k(J,a=>m(l,{key:a,class:"quick-list__item",onClick:s=>{return e=a,G.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),b(w,null,k(U.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(O.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),b(w,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:G.value,"onUpdate:modelValue":s[0]||(s[0]=a=>G.value=a),class:"input-bar__textarea","disable-default-padding":"",maxlength:"500","cursor-spacing":18,"show-confirm-bar":!1,disabled:K.value,placeholder:"问问世博头条里的内容","confirm-type":"send",onConfirm:sa},null,8,["modelValue","disabled"]),m(l,{class:x(["input-bar__send",{"input-bar__send--disabled":!L.value}]),onClick:sa},{default:r(()=>[m(e,{name:"arrow-upward",size:"32",color:"#fff"})]),_:1},8,["class"])]),_:1})]),_:1})]),_:1})}}}),[["__scopeId","data-v-6565d513"]]);export{B as default};