upload project source code
This commit is contained in:
3
后端源码/yifan.action-ai.cn/index/js/index.MOWxd2RD.js
Normal file
3
后端源码/yifan.action-ai.cn/index/js/index.MOWxd2RD.js
Normal file
@@ -0,0 +1,3 @@
|
||||
import{W as e,a7 as a,ab as s,i as l,aa as n,ac as t,h as c,ad as o,ae as i,af as r,ag as u,ah as d,K as v,a0 as p,y as g,ai as m,E as h,D as y}from"./element-plus.BfMFfVUv.js";import{J as f,ej as k,ek as b,t as w,ah as _,S as x,_ as C,a1 as A,$ as E,a0 as S,T as F,o as T,a3 as j,aa as z,a9 as H,a8 as W,H as D,ay as P,a_ as I,aw as K,r as L,j as M,n as V,el as $}from"./.pnpm.BudmgPu7.js";import{_ as B}from"./_plugin-vue_export-helper.BCo6x5W8.js";const N={class:"chatgpt-container"},O={class:"main-chat"},R={class:"chat-navbar"},J={class:"navbar-right"},U={class:"connection-status"},Y={class:"status-text"},q={key:0,class:"welcome-screen"},G={class:"welcome-content"},Q={class:"ai-logo"},X={class:"example-prompts"},Z={key:1,class:"messages-list"},ee={class:"message-avatar"},ae={key:0,class:"user-avatar"},se={key:1,class:"ai-avatar"},le={class:"message-content"},ne={class:"message-header"},te={class:"sender-name"},ce={class:"message-body"},oe=["innerHTML"],ie={key:1,class:"typing-indicator"},re={key:0,class:"message-actions"},ue={key:2,class:"error-banner"},de={class:"chat-input"},ve={class:"input-wrapper"},pe={class:"input-container"},ge=B(f({__name:"index",setup(f){const B=new k({html:!0,linkify:!0,typographer:!0,breaks:!0,highlight(e,a){if(a&&$.getLanguage(a))try{return`<pre class="hljs"><code>${$.highlight(e,{language:a,ignoreIllegals:!0}).value}</code></pre>`}catch{}return`<pre class="hljs"><code>${B.utils.escapeHtml(e)}</code></pre>`}}).use(b),ge=B.renderer.rules.link_open||function(e,a,s,l,n){return n.renderToken(e,a,s,l,n)};B.renderer.rules.link_open=function(e,a,s,l,n){return e[a].attrPush(["target","_blank"]),e[a].attrPush(["rel","noopener noreferrer"]),ge(e,a,s,l,n)};const me=L([]),he=L(""),ye=L(!1),fe=L(!1),ke=L("disconnected"),be=L(""),we=L();let _e=null;const xe=M(()=>{switch(ke.value){case"connected":return"已连接";case"connecting":return"连接中...";case"disconnected":return"未连接";default:return"未知状态"}}),Ce=()=>{if((null==_e?void 0:_e.readyState)!==WebSocket.OPEN){ke.value="connecting",be.value="";try{_e=new WebSocket("undefined/api/v1/application/ai/ws"),_e.onopen=()=>{fe.value=!0,ke.value="connected",h.success("连接成功")},_e.onmessage=e=>{Se({content:e.data})},_e.onclose=e=>{fe.value=!1,ke.value="disconnected",me.value.forEach(e=>{"assistant"===e.type&&e.loading&&(e.loading=!1,e.collapsed=e.content.length>200)})},_e.onerror=e=>{fe.value=!1,ke.value="disconnected",h.error("连接失败,请检查服务器状态"),me.value.forEach(e=>{"assistant"===e.type&&e.loading&&(e.loading=!1,e.collapsed=e.content.length>200)})}}catch(e){ke.value="disconnected",be.value="无法创建连接"}}},Ae=()=>{_e&&(_e.close(1e3,"用户主动断开"),_e=null),fe.value=!1,ke.value="disconnected",me.value.forEach(e=>{"assistant"===e.type&&e.loading&&(e.loading=!1)})},Ee=()=>{fe.value?(Ae(),h.info("已断开连接")):Ce()},Se=e=>{const a=me.value[me.value.length-1];a&&"assistant"===a.type&&a.loading?a.content+=e.content||e.message||"":Te("assistant",e.content||e.message||"收到回复"),He()},Fe=async()=>{const e=he.value.trim();if(!e||!fe.value||ye.value)return;const a=me.value[me.value.length-1];a&&"assistant"===a.type&&a.loading&&(a.loading=!1),Te("user",e),he.value="";const s={id:We(),type:"assistant",content:"",timestamp:Date.now(),loading:!0};me.value.push(s),ye.value=!0,He();try{if((null==_e?void 0:_e.readyState)!==WebSocket.OPEN)throw new Error("WebSocket 连接未建立");_e.send(e)}catch(l){me.value.pop(),be.value="发送消息失败,请检查连接状态",h.error("发送失败")}finally{ye.value=!1}},Te=(e,a)=>{const s={id:We(),type:e,content:a,timestamp:Date.now(),
|
||||
// 长消息自动折叠
|
||||
collapsed:a.length>200};me.value.push(s),V(()=>He())},je=async()=>{try{await y.confirm("确定要清空当前对话吗?此操作不可恢复。","确认清空",{confirmButtonText:"确定",cancelButtonText:"取消",type:"warning"}),me.value=[],h.success("对话已清空")}catch{}},ze=e=>{he.value=e},He=()=>{V(()=>{we.value&&(we.value.scrollTop=we.value.scrollHeight)})},We=()=>Date.now().toString(36)+Math.random().toString(36).substr(2);return w(()=>{Ce()}),_(()=>{Ae()}),(y,f)=>{const k=l,b=c,w=p,_=g;return x(),C("div",N,[A("div",O,[A("div",R,[f[8]||(f[8]=A("div",{class:"navbar-left"},[A("h2",null,"FA智能助手")],-1)),A("div",J,[A("div",U,[E(k,{class:j(["status-icon",ke.value])},{default:S(()=>["connected"===ke.value?(x(),F(T(e),{key:0})):"connecting"===ke.value?(x(),F(T(a),{key:1})):(x(),F(T(s),{key:2}))]),_:1},8,["class"]),A("span",Y,z(xe.value),1)]),me.value.length>0?(x(),F(b,{key:0,text:"",icon:T(n),onClick:je},{default:S(()=>[...f[7]||(f[7]=[H(" 清空对话 ",-1)])]),_:1},8,["icon"])):W("",!0),E(b,{text:"",icon:T(t),onClick:Ee},{default:S(()=>[H(z(fe.value?"断开连接":"重新连接"),1)]),_:1},8,["icon"])])]),A("div",{ref_key:"messagesContainer",ref:we,class:"chat-messages"},[0===me.value.length?(x(),C("div",q,[A("div",G,[A("div",Q,[E(k,{size:"64"},{default:S(()=>[E(T(o))]),_:1})]),f[13]||(f[13]=A("h1",null,"FA智能助手",-1)),f[14]||(f[14]=A("p",{class:"welcome-subtitle"}," 我是您的专属AI助手,可以帮您回答问题、处理任务和进行智能对话 ",-1)),A("div",X,[A("div",{class:"prompt-card",onClick:f[0]||(f[0]=e=>ze("请介绍一下FastApiAdmin系统"))},[...f[9]||(f[9]=[A("h4",null,"系统介绍",-1),A("p",null,"请介绍一下FastApiAdmin系统",-1)])]),A("div",{class:"prompt-card",onClick:f[1]||(f[1]=e=>ze("如何在系统中创建新的模块?"))},[...f[10]||(f[10]=[A("h4",null,"开发指导",-1),A("p",null,"如何在系统中创建新的模块?",-1)])]),A("div",{class:"prompt-card",onClick:f[2]||(f[2]=e=>ze("系统的权限管理是如何工作的?"))},[...f[11]||(f[11]=[A("h4",null,"权限管理",-1),A("p",null,"FA系统的权限管理是如何工作的?",-1)])]),A("div",{class:"prompt-card",onClick:f[3]||(f[3]=e=>ze("如何优化FA系统的性能?"))},[...f[12]||(f[12]=[A("h4",null,"性能优化",-1),A("p",null,"如何优化系统的性能?",-1)])])])])])):(x(),C("div",Z,[(x(!0),C(D,null,P(me.value,e=>{return x(),C("div",{key:e.id,class:j(["message-group",e.type])},[A("div",ee,["user"===e.type?(x(),C("div",ae,[E(k,null,{default:S(()=>[E(T(i))]),_:1})])):(x(),C("div",se,[E(k,null,{default:S(()=>[E(T(o))]),_:1})]))]),A("div",le,[A("div",ne,[A("strong",te,z("user"===e.type?"You":"FA助手"),1)]),A("div",ce,[e.content.length>200?(x(),F(b,{key:0,text:"",size:"small",icon:e.collapsed?T(r):T(u),class:"fold-button",onClick:a=>(e=>{e.collapsed=!e.collapsed})(e)},{default:S(()=>[H(z(e.collapsed?"展开":"收起"),1)]),_:2},1032,["icon","onClick"])):W("",!0),A("div",{class:j(["message-text",{collapsed:e.collapsed}]),innerHTML:(a=e.content,a?B.render(a):"")},null,10,oe),"assistant"===e.type&&e.loading&&!e.content?(x(),C("div",ie,[...f[15]||(f[15]=[A("div",{class:"typing-dots"},[A("span"),A("span"),A("span")],-1)])])):W("",!0)]),e.loading?W("",!0):(x(),C("div",re,[E(b,{text:"",size:"small",icon:T(d),onClick:a=>(async e=>{try{await navigator.clipboard.writeText(e),h.success("已复制到剪贴板")}catch{const a=document.createElement("textarea");a.value=e,document.body.appendChild(a),a.select(),document.execCommand("copy"),document.body.removeChild(a),h.success("已复制到剪贴板")}})(e.content)},null,8,["icon","onClick"]),"assistant"===e.type?(x(),F(b,{key:0,text:"",size:"small",icon:T(v)},null,8,["icon"])):W("",!0)]))])],2);var a}),128))])),be.value?(x(),C("div",ue,[E(w,{title:be.value,type:"error",closable:!0,"show-icon":"",onClose:f[4]||(f[4]=e=>be.value="")},null,8,["title"])])):W("",!0)],512),A("div",de,[A("div",ve,[A("div",pe,[E(_,{modelValue:he.value,"onUpdate:modelValue":f[5]||(f[5]=e=>he.value=e),placeholder:fe.value?"向FA助手发送消息...":"请先连接到服务器",disabled:!fe.value||ye.value,type:"textarea",rows:1,autosize:{minRows:1,maxRows:6},resize:"none",class:"message-input",onKeydown:[I(K(Fe,["exact","prevent"]),["enter"]),f[6]||(f[6]=I(K(e=>he.value+="\n",["shift","exact"]),["enter"]))]},null,8,["modelValue","placeholder","disabled","onKeydown"]),E(b,{disabled:!he.value.trim()||!fe.value||ye.value,loading:ye.value,class:"send-button",type:"primary",circle:"",onClick:Fe},{default:S(()=>[E(k,null,{default:S(()=>[E(T(m))]),_:1})]),_:1},8,["disabled","loading"])]),f[16]||(f[16]=A("div",{class:"input-footer"},[A("span",{class:"input-hint"},"按 Enter 发送消息,Shift + Enter 换行")],-1))])])])])}}}),[["__scopeId","data-v-9253047d"]]);export{ge as default};
|
||||
Reference in New Issue
Block a user