import{_ as te,r as n,o as se,c as le,a as m,b as v,d as t,e as V,w as u,f as A,n as L,v as N,g as x,t as r,F as ae,h as ne,i as ie,j as W,T as oe,k as de,l as ue,m as re,p as U,q as ce,s as ve}from"./index-OjjizwQb.js";import{a as w}from"./client-CSdq-1hH.js";const pe="/assets/images/nodata/task-guide.svg",fe={class:"content"},me={class:"filter"},ge={class:"filter-left"},be={class:"search-section"},ye=["disabled"],xe={class:"guide-section"},we={class:"cards"},he=["onClick"],_e={style:{display:"flex","align-items":"center","justify-content":"space-between",gap:"8px"}},ke={style:{"font-weight":"700",overflow:"hidden","text-overflow":"ellipsis","white-space":"nowrap","max-width":"70%"}},Ce={style:{color:"#6b7280","margin-top":"4px","font-size":"12px"}},$e={style:{color:"#374151","margin-top":"8px",flex:"1",overflow:"auto","font-size":"13px"}},Te={style:{color:"#6b7280","margin-top":"6px","font-size":"12px"}},Ie=["disabled","onClick"],Se=["onClick"],Ve=["onClick"],De={key:0,class:"modal-backdrop"},ze={class:"panel modal-panel"},je={class:"modal-header"},Ee={class:"title"},Le={class:"row",style:{"margin-top":"10px"}},Ne={class:"row single",style:{"margin-top":"8px"}},Ue={style:{"margin-top":"12px"}},Me={class:"schedule-buttons"},Be={key:0,class:"row single"},Re={key:1,class:"row single"},qe={class:"row actions-row"},Fe={class:"limit-field"},Pe={class:"parsing"},Ae={class:"switch"},We={class:"actions"},Ge=["disabled"],He={key:0,class:"form-error"},Je={__name:"Tasks",setup(Ke){const D=n(!1),h=n(""),_=n(""),k=n(""),o=n(""),c=n(""),g=n(""),C=n(!0),b=n(""),z=n(!1),T=n(null),j=n(!1),M=n(null),E=n([]),I=n(""),p=n(null),y=n(new Set),S=n(localStorage.getItem("showTaskList")==="true");function B(s){return s==="done"}function G(s){return s==="idle"}function H(s){if(s.execution_type==="predefined"&&s.execution_time){const e=String(s.execution_time).replace("T"," "),a=e.match(/^(\d{4}-\d{2}-\d{2})[ T](\d{2}:\d{2})/);return a?`预定时间:${a[1]} ${a[2]}`:`预定时间:${e}`}return s.execution_type==="scheduled"&&s.scheduled_time?`定期时间:${String(s.scheduled_time).slice(0,5)}`:"-"}function J(s){const e={running:"#dbeafe",pending:"#f1f5f9",completed:"#dcfce7",done:"#dcfce7",success:"#dcfce7",failed:"#fee2e2",error:"#fee2e2"},a={running:"#1d4ed8",pending:"#6b7280",completed:"#16a34a",done:"#16a34a",success:"#16a34a",failed:"#dc2626",error:"#dc2626"},l=e[s]||"#f1f5f9",i=a[s]||"#6b7280";return{background:l,color:i,padding:"4px 10px",borderRadius:"999px",fontWeight:"600",fontSize:"12px"}}function K(s){return{running:"运行中",idle:"空闲中",done:"完成",failed:"失败",pending:"等待中",completed:"已完成",success:"成功",error:"错误"}[s]||s||"未知"}async function $(){var s,e;j.value=!0,M.value=null;try{const a={page:1,page_size:100};I.value.trim()&&(a.search=I.value.trim());const{data:l}=await w.get("/api/tasks/",{params:a}),i=l.results||[];E.value=i.slice().sort((d,f)=>(d.id||0)-(f.id||0))}catch(a){M.value=((e=(s=a==null?void 0:a.response)==null?void 0:s.data)==null?void 0:e.message)||a.message||"获取任务失败"}finally{j.value=!1}}function R(){p.value=null,h.value="",_.value="",k.value="",c.value="",g.value="",C.value=!0,o.value="",b.value="",D.value=!0}function q(){D.value=!1,p.value=null}async function O(){var s,e;if(T.value=null,!h.value.trim()||!_.value.trim()||!k.value.trim()){T.value="请填写任务ID、名称与描述";return}z.value=!0;try{const a={task_id:h.value,name:_.value,description:k.value,execution_type:o.value||null,parse_flag:!!C.value,status:"idle"};if(b.value&&b.value>0&&(a.limit=parseInt(b.value)),o.value==="predefined"){if(!c.value)throw new Error("请选择预定执行时间");const l=new Date(c.value);if(isNaN(l.getTime())||l.getTime()<=Date.now())throw new Error("预定时间必须大于当前时间");a.execution_time=c.value,delete a.scheduled_time}else if(o.value==="scheduled"){if(!g.value)throw new Error("请选择定期执行时间");a.scheduled_time=g.value,delete a.execution_time}else delete a.scheduled_time,delete a.execution_time;p.value?await w.put(`/api/tasks/${p.value.id}/`,a):await w.post("/api/tasks/",a),q(),await $()}catch(a){T.value=((e=(s=a==null?void 0:a.response)==null?void 0:s.data)==null?void 0:e.message)||a.message||(p.value?"更新失败":"创建失败")}finally{z.value=!1}}async function Q(s){var e,a,l;if(!y.value.has(s.id)){y.value.add(s.id),s.status="running";try{console.log("触发任务请求:",`/api/tasks/${s.id}/trigger/`),console.log("任务ID:",s.id),console.log("任务对象:",s);let i;try{i=await w.post(`/api/tasks/${s.id}/trigger/`)}catch{console.log("trigger/路径失败,尝试run/路径"),i=await w.post(`/api/tasks/${s.id}/run/`)}if(console.log("触发任务响应:",i.data),!i.data.success)throw new Error("触发失败");console.log(`开始轮询任务 ${s.id},每3秒检查一次状态`);const d=setInterval(async()=>{try{console.log(`轮询检查任务 ${s.id} 状态`),await $();const f=E.value.find(P=>P.id===s.id);f?(console.log(`任务 ${s.id}: 最新状态=${f.status}`),["done","failed","completed","success","error","idle"].includes(f.status)&&(console.log(`任务 ${s.id} 达到终止状态: ${f.status},停止轮询`),clearInterval(d),y.value.delete(s.id))):(console.error(`轮询中未找到任务 ${s.id}`),clearInterval(d),y.value.delete(s.id))}catch(f){console.error("轮询状态失败:",f),clearInterval(d),y.value.delete(s.id)}},3e3)}catch(i){console.error("任务执行失败:",i),console.error("错误详情:",{message:i.message,status:(e=i.response)==null?void 0:e.status,statusText:(a=i.response)==null?void 0:a.statusText,data:(l=i.response)==null?void 0:l.data,config:i.config}),s.status="failed";try{await w.patch(`/api/tasks/${s.id}/`,{status:"failed"})}catch(d){console.error("更新后端状态失败:",d)}await $(),y.value.delete(s.id)}}}function X(s){if(p.value=s,h.value=s.task_id,_.value=s.name,k.value=s.description,C.value=s.parse_flag,o.value=s.execution_type||"",b.value=s.limit||"",o.value==="predefined"){if(s.execution_time){const a=String(s.execution_time).replace("T"," ").match(/^(\d{4}-\d{2}-\d{2})[ T](\d{2}:\d{2})/);c.value=a?`${a[1]}T${a[2]}`:""}else c.value="";g.value=""}else o.value==="scheduled"?(g.value=s.scheduled_time?String(s.scheduled_time).slice(0,5):"",c.value=""):(c.value="",g.value="");D.value=!0}async function Y(s){var e,a;if(confirm(`确定要删除任务 "${s.name}" 吗?`))try{await w.delete(`/api/tasks/${s.id}/`),await $()}catch(l){alert("删除失败:"+(((a=(e=l==null?void 0:l.response)==null?void 0:e.data)==null?void 0:a.message)||l.message))}}function Z(){S.value=!0,localStorage.setItem("showTaskList","true")}se($);const ee=le(()=>{const s=I.value.trim().toLowerCase();return s?E.value.filter(e=>[e.task_id,e.name,e.status].map(l=>(l||"").toString().toLowerCase()).some(l=>l.includes(s))):E.value});function F(s){return y.value.has(s)}return(s,e)=>{const a=ue("RouterLink");return v(),m("div",null,[t("div",fe,[t("div",{class:"content-header"},[e[15]||(e[15]=A('