Files
chat/backend/public/admin/assets/ConversationsView-B-64pbX1.js
T
2026-08-03 10:00:05 +08:00

2 lines
5.9 KiB
JavaScript

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