2 lines
6.1 KiB
JavaScript
2 lines
6.1 KiB
JavaScript
import{_ as Z,g as ee,p as te,h as L,q as ae,c as n,a,b as P,v as se,k as ne,F as y,j as b,t as o,d as p,f as le,r as i,e as oe,l as ie,o as l,n as R}from"./index-z4tF8s-R.js";const ue={class:"conv-page"},ce={class:"conv-layout"},de={class:"conv-list-panel panel"},re={class:"list-toolbar"},ve=["value"],me={key:0,class:"conv-list"},_e=["onClick"],pe={class:"conv-item-title"},ye={class:"conv-item-meta"},he={key:0},fe={class:"conv-item-time"},ge={key:1,class:"empty"},ke={key:2,class:"empty"},be={key:3,class:"list-pagination"},we=["disabled"],Ce=["disabled"],Ie={class:"conv-detail-panel panel"},xe={class:"detail-header"},De={class:"detail-meta"},Ve={key:0},qe={key:1},Le=["disabled"],Te={key:0,class:"empty"},Ae={key:1,class:"empty"},Ee={key:2,class:"messages"},Me={class:"message-avatar"},Ne={class:"message-body"},Se={key:0,class:"attachments"},$e=["src","alt","onClick"],je=["href"],Be={key:1,class:"message-content"},Fe={class:"message-time"},We={key:1,class:"detail-empty"},T=20,ze={__name:"ConversationsView",setup(Pe){const w=le(),A=oe(),d=i([]),u=i(null),c=i(null),_=i([]),C=i(!1),h=i(!1),I=i(""),x=i(null),D=i([]),r=i(1),V=i(0),U=i(null),E=i(null);let M=null;const N=ie(()=>Math.max(1,Math.ceil(V.value/T)));ee(async()=>{await O(),await g();const e=Number(w.query.id);e&&d.value.some(t=>t.id===e)?await k(e):d.value.length&&await k(d.value[0].id)}),te(()=>w.query.id,async e=>{const t=Number(e);t&&t!==u.value&&await k(t)});async function O(){try{const e=await L.get("/admin/department-options");D.value=e.data.data||[]}catch{D.value=[]}}async function g(){C.value=!0;try{const t=(await L.get("/admin/conversations",{params:{page:r.value,limit:T,keyword:I.value.trim()||void 0,department_id:x.value||void 0}})).data.data||{};d.value=t.list||[],V.value=t.total??d.value.length}finally{C.value=!1}}async function k(e){u.value===e&&_.value.length&&!h.value||(u.value=e,A.replace({query:{...w.query,id:String(e)}}),await q(e))}async function q(e){h.value=!0;try{const v=(await L.get(`/admin/conversations/${e}`)).data.data||{};c.value=v.conversation||null,_.value=v.messages||[],await K()}catch(t){c.value=null,_.value=[],console.error(t)}finally{h.value=!1}}function G(){u.value&&q(u.value)}async function H(){r.value=1,await g()}function J(){clearTimeout(M),M=setTimeout(async()=>{var e;r.value=1,await g(),u.value&&!d.value.some(t=>t.id===u.value)&&(u.value=((e=d.value[0])==null?void 0:e.id)??null,u.value?await q(u.value):(c.value=null,_.value=[],A.replace({query:{}})))},300)}async function S(e){r.value=e,await g()}async function K(){var e;await ae(),(e=E.value)==null||e.scrollIntoView({behavior:"auto"})}function $(e){const t=e.attachments;return(Array.isArray(t)?t:t&&typeof t=="object"?Object.values(t):[]).filter(f=>f&&typeof f=="object")}function Q(e){const t=((e==null?void 0:e.name)||"").toLowerCase(),v=(e==null?void 0:e.mime)||"";return t.endsWith(".pdf")||v.includes("pdf")?"📕":t.endsWith(".doc")||t.endsWith(".docx")||v.includes("word")?"📘":"📄"}function X(e){window.open(e,"_blank")}function j(e){return e?new Date(e).toLocaleString("zh-CN"):"-"}return(e,t)=>{var v,f,B,F,W,z;return l(),n("div",ue,[t[6]||(t[6]=a("div",{class:"page-header"},[a("h2",null,"会话管理"),a("p",null,"选择左侧会话,查看用户与 AI 的完整对话")],-1)),a("div",ce,[a("aside",de,[a("div",re,[P(a("input",{"onUpdate:modelValue":t[0]||(t[0]=s=>I.value=s),class:"form-input search-input",placeholder:"搜索标题 / 用户名 / 邮箱",onInput:J},null,544),[[se,I.value]]),P(a("select",{"onUpdate:modelValue":t[1]||(t[1]=s=>x.value=s),class:"form-select dept-filter",onChange:H},[t[4]||(t[4]=a("option",{value:null},"全部部门",-1)),(l(!0),n(y,null,b(D.value,s=>(l(),n("option",{key:s.id,value:s.id},o(s.label||s.name),9,ve))),128))],544),[[ne,x.value]])]),d.value.length?(l(),n("div",me,[(l(!0),n(y,null,b(d.value,s=>(l(),n("button",{key:s.id,type:"button",class:R(["conv-item",{active:u.value===s.id}]),onClick:m=>k(s.id)},[a("div",pe,o(s.title||"未命名会话"),1),a("div",ye,[a("span",null,o(s.username),1),s.department_name?(l(),n("span",he,o(s.department_name),1)):p("",!0),a("span",null,o(s.message_count)+" 条",1)]),a("div",fe,o(j(s.updated_at)),1)],10,_e))),128))])):C.value?(l(),n("p",ke,"加载中...")):(l(),n("p",ge,"暂无会话")),V.value>T?(l(),n("div",be,[a("button",{class:"btn btn-ghost",disabled:r.value<=1,onClick:t[2]||(t[2]=s=>S(r.value-1))},"上一页",8,we),a("span",null,o(r.value)+" / "+o(N.value),1),a("button",{class:"btn btn-ghost",disabled:r.value>=N.value,onClick:t[3]||(t[3]=s=>S(r.value+1))},"下一页",8,Ce)])):p("",!0)]),a("section",Ie,[u.value?(l(),n(y,{key:0},[a("div",xe,[a("div",null,[a("h3",null,o(((v=c.value)==null?void 0:v.title)||"未命名会话"),1),a("p",De,[a("span",null,o((f=c.value)==null?void 0:f.username)+" ("+o((B=c.value)==null?void 0:B.email)+")",1),(F=c.value)!=null&&F.department_name?(l(),n("span",Ve,"· "+o(c.value.department_name),1)):p("",!0),(W=c.value)!=null&&W.model_name?(l(),n("span",qe,"· "+o(c.value.model_name),1)):p("",!0),a("span",null,"· "+o(((z=c.value)==null?void 0:z.message_count)??0)+" 条消息",1)])]),a("button",{class:"btn btn-ghost",disabled:h.value,onClick:G},"刷新",8,Le)]),a("div",{ref_key:"messagesEl",ref:U,class:"messages-scroll"},[h.value&&!_.value.length?(l(),n("div",Te,"加载对话中...")):_.value.length?(l(),n("div",Ee,[(l(!0),n(y,null,b(_.value,s=>(l(),n("div",{key:s.id,class:R(["message",s.role])},[a("div",Me,o(s.role==="user"?"用户":"AI"),1),a("div",Ne,[$(s).length?(l(),n("div",Se,[(l(!0),n(y,null,b($(s),(m,Y)=>(l(),n(y,{key:Y},[m.type==="image"?(l(),n("img",{key:0,src:m.url,alt:m.name,class:"att-image",onClick:Re=>X(m.url)},null,8,$e)):m.url?(l(),n("a",{key:1,href:m.url,target:"_blank",rel:"noopener",class:"att-link"},o(Q(m))+" "+o(m.name||"附件"),9,je)):p("",!0)],64))),128))])):p("",!0),s.content?(l(),n("div",Be,o(s.content),1)):p("",!0),a("time",Fe,o(j(s.created_at)),1)])],2))),128))])):(l(),n("div",Ae,"该会话暂无消息")),a("div",{ref_key:"messagesEnd",ref:E},null,512)],512)],64)):(l(),n("div",We,[...t[5]||(t[5]=[a("p",null,"← 请从左侧选择一条会话",-1)])]))])])])}}},Oe=Z(ze,[["__scopeId","data-v-f8276717"]]);export{Oe as default};
|