2 lines
5.5 KiB
JavaScript
2 lines
5.5 KiB
JavaScript
import{r as g,c as m,m as R,U as x,z as n,A as i,B as s,P as o,M as c,K as G,aE as F,aD as z,Q as B,a4 as V,D as T,E as K}from"./vue-vendor-164775a6.js";import{a as k,_ as Q,u as j}from"./index-2fb4354b.js";import{E as l}from"./element-plus-4a19e5e8.js";import"./utils-edfcd65b.js";const h={getTaskStatus(r){return k.get(`/task-status/${r}`)},getUserTaskStatuses(r){return k.get(`/task-status/user/${r}`)},cancelTask(r){return k.post(`/task-status/${r}/cancel`)},triggerPolling(){return k.post("/task-status/poll")}};const q={class:"task-status-page"},H={class:"page-header"},J={class:"header-actions"},W=["disabled"],X={class:"stats-cards"},Y={class:"stat-card"},Z={class:"stat-content"},ss={class:"stat-number"},ts={class:"stat-card"},es={class:"stat-content"},as={class:"stat-number"},os={class:"stat-card"},ns={class:"stat-content"},is={class:"stat-number"},ls={class:"stat-card"},rs={class:"stat-content"},cs={class:"stat-number"},ds={class:"task-list"},us={class:"list-header"},vs={class:"filter-controls"},ps={class:"task-items"},_s={class:"task-main"},fs={class:"task-info"},gs={class:"task-id"},ks={class:"task-type"},ms={class:"task-time"},hs={class:"task-status"},ys={key:0,class:"progress-info"},bs={class:"progress-bar"},Cs={class:"progress-text"},Es={class:"task-actions"},Ts=["onClick"],Ss=["onClick"],Is=["onClick"],Ds={key:0,class:"empty-state"},ws={__name:"TaskStatusPage",setup(r){const y=j(),d=g([]),u=g(!1),v=g(""),p=g(null),S=m(()=>y.isAdmin),_=m(()=>{const e={pending:0,processing:0,completed:0,failed:0};return d.value.forEach(t=>{switch(t.status){case"PENDING":e.pending++;break;case"PROCESSING":e.processing++;break;case"COMPLETED":e.completed++;break;case"FAILED":case"CANCELLED":case"TIMEOUT":e.failed++;break}}),e}),b=m(()=>v.value?d.value.filter(e=>e.status===v.value):d.value),f=async()=>{var e;try{u.value=!0;const t=await h.getUserTaskStatuses((e=y.user)==null?void 0:e.username);d.value=t.data}catch(t){console.error("获取任务列表失败:",t),l.error("获取任务列表失败")}finally{u.value=!1}},I=async()=>{await f(),l.success("任务列表已刷新")},D=()=>{},w=async e=>{try{const t=await h.cancelTask(e);t.data.success?(l.success("任务已取消"),await f()):l.error(t.data.message)}catch(t){console.error("取消任务失败:",t),l.error("取消任务失败")}},P=e=>{window.open(e,"_blank")},N=e=>{l.info("重试功能开发中")},A=async()=>{try{(await h.triggerPolling()).data.success&&l.success("轮询已触发")}catch(e){console.error("触发轮询失败:",e),l.error("触发轮询失败")}},L=e=>`task-item-${e.toLowerCase()}`,U=e=>`status-${e.toLowerCase()}`,M=e=>e?new Date(e).toLocaleString("zh-CN"):"-",O=()=>{p.value=setInterval(f,3e4)},$=()=>{p.value&&(clearInterval(p.value),p.value=null)};return R(()=>{f(),O()}),x(()=>{$()}),(e,t)=>(n(),i("div",q,[s("div",H,[t[1]||(t[1]=s("h1",null,"任务状态监控",-1)),s("div",J,[s("button",{onClick:I,class:"btn-refresh",disabled:u.value},o(u.value?"刷新中...":"刷新全部"),9,W),S.value?(n(),i("button",{key:0,onClick:A,class:"btn-poll"}," 手动轮询 ")):c("",!0)])]),s("div",X,[s("div",Y,[t[3]||(t[3]=s("div",{class:"stat-icon pending"},"⏳",-1)),s("div",Z,[s("div",ss,o(_.value.pending),1),t[2]||(t[2]=s("div",{class:"stat-label"},"待处理",-1))])]),s("div",ts,[t[5]||(t[5]=s("div",{class:"stat-icon processing"},"🔄",-1)),s("div",es,[s("div",as,o(_.value.processing),1),t[4]||(t[4]=s("div",{class:"stat-label"},"处理中",-1))])]),s("div",os,[t[7]||(t[7]=s("div",{class:"stat-icon completed"},"✅",-1)),s("div",ns,[s("div",is,o(_.value.completed),1),t[6]||(t[6]=s("div",{class:"stat-label"},"已完成",-1))])]),s("div",ls,[t[9]||(t[9]=s("div",{class:"stat-icon failed"},"❌",-1)),s("div",rs,[s("div",cs,o(_.value.failed),1),t[8]||(t[8]=s("div",{class:"stat-label"},"失败",-1))])])]),s("div",ds,[s("div",us,[t[11]||(t[11]=s("h2",null,"任务列表",-1)),s("div",vs,[G(s("select",{"onUpdate:modelValue":t[0]||(t[0]=a=>v.value=a),onChange:D},[...t[10]||(t[10]=[z('<option value="" data-v-5e35f196>全部状态</option><option value="PENDING" data-v-5e35f196>待处理</option><option value="PROCESSING" data-v-5e35f196>处理中</option><option value="COMPLETED" data-v-5e35f196>已完成</option><option value="FAILED" data-v-5e35f196>失败</option><option value="CANCELLED" data-v-5e35f196>已取消</option><option value="TIMEOUT" data-v-5e35f196>超时</option>',7)])],544),[[F,v.value]])])]),s("div",ps,[(n(!0),i(B,null,V(b.value,a=>{var C;return n(),i("div",{key:a.taskId,class:T(["task-item",L(a.status)])},[s("div",_s,[s("div",fs,[s("div",gs,o(a.taskId),1),s("div",ks,o(((C=a.taskType)==null?void 0:C.description)||a.taskType),1),s("div",ms,o(M(a.createdAt)),1)]),s("div",hs,[s("div",{class:T(["status-badge",U(a.status)])},o(a.statusDescription||a.status),3),a.status==="PROCESSING"?(n(),i("div",ys,[s("div",bs,[s("div",{class:"progress-fill",style:K({width:a.progress+"%"})},null,4)]),s("span",Cs,o(a.progress)+"%",1)])):c("",!0)])]),s("div",Es,[a.status==="PROCESSING"?(n(),i("button",{key:0,onClick:E=>w(a.taskId),class:"btn-cancel"}," 取消 ",8,Ts)):c("",!0),a.resultUrl?(n(),i("button",{key:1,onClick:E=>P(a.resultUrl),class:"btn-view"}," 查看结果 ",8,Ss)):c("",!0),["FAILED","TIMEOUT"].includes(a.status)?(n(),i("button",{key:2,onClick:E=>N(a.taskId),class:"btn-retry"}," 重试 ",8,Is)):c("",!0)])],2)}),128))]),b.value.length===0?(n(),i("div",Ds,[...t[12]||(t[12]=[s("div",{class:"empty-icon"},"📋",-1),s("div",{class:"empty-text"},"暂无任务",-1)])])):c("",!0)])]))}},Us=Q(ws,[["__scopeId","data-v-5e35f196"]]);export{Us as default};
|