6 lines
13 KiB
JavaScript
Executable File
6 lines
13 KiB
JavaScript
Executable File
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('<div class="crumb-list-item" data-v-7b067afc><div class="create-menu-cover" data-v-7b067afc><svg class="item-left" aria-hidden="true" data-v-7b067afc><use xlink:href="#icon-gongnengyindao" data-v-7b067afc></use></svg><div class="item-right" data-v-7b067afc><div data-v-7b067afc><div data-v-7b067afc>任务频道</div><div data-v-7b067afc>功能引导</div></div><i class="iconfont icon-tianjia" data-v-7b067afc></i></div></div></div>',1)),t("div",{class:"crumb-list-item",onClick:R},[...e[14]||(e[14]=[A('<div class="create-menu-cover" data-v-7b067afc><svg class="item-left" aria-hidden="true" data-v-7b067afc><use xlink:href="#icon-wenjianjia" data-v-7b067afc></use></svg><div class="item-right" data-v-7b067afc><div data-v-7b067afc><div data-v-7b067afc>新建任务</div></div><i class="iconfont icon-tianjia" data-v-7b067afc></i></div></div>',1)])])]),t("div",me,[t("div",ge,[e[17]||(e[17]=t("span",{class:"filter-icon"},null,-1)),e[18]||(e[18]=t("span",{style:{position:"absolute",top:"0px",left:"0px"}},[t("span",{id:"id-tag-activate-collapse",class:"tag-activate"})],-1)),t("span",{class:L(["tag",{"is-active":S.value}]),onClick:Z},[...e[16]||(e[16]=[t("div",{class:"publicstudycircle-document-lable-nvone"},null,-1),t("div",null,"全部",-1)])],2),e[19]||(e[19]=t("span",{class:"tag add-tag-container"},[t("div",{class:"add-tag"},[t("i",{class:"iconfont icon-tianjia"}),t("div",null,"添加标签")])],-1))])]),u(t("div",be,[u(t("input",{type:"text","onUpdate:modelValue":e[0]||(e[0]=l=>I.value=l),placeholder:"检索任务ID/名称/状态...",class:"search-input"},null,512),[[x,I.value]]),t("button",{class:"search-btn",disabled:j.value,onClick:$},r(j.value?"检索中...":"检索"),9,ye)],512),[[N,S.value]]),u(t("div",xe,[...e[20]||(e[20]=[t("img",{src:pe,alt:"任务管理功能引导"},null,-1)])],512),[[N,!S.value]]),u(t("div",we,[t("div",{class:"panel new-task-card",onClick:R},[...e[21]||(e[21]=[t("div",{style:{display:"flex","align-items":"center","justify-content":"center",height:"100%","flex-direction":"column",gap:"12px"}},[t("div",{style:{"font-size":"48px",color:"var(--wb-primary)"}},"➕"),t("div",{style:{"font-size":"18px","font-weight":"600",color:"var(--wb-text-primary)"}},"新建任务"),t("div",{style:{"font-size":"14px",color:"var(--wb-text-muted)","text-align":"center"}},"点击创建新的任务")],-1)])]),(v(!0),m(ae,null,ne(ee.value,(l,i)=>(v(),m("div",{key:l.id||i,class:"panel",style:{"min-height":"180px",display:"flex","flex-direction":"column",cursor:"pointer"},onClick:d=>B(l.status)?s.$router.push(`/tasks/${l.id}`):null},[t("div",_e,[t("div",ke,r(l.name||"未命名任务"),1),t("span",{style:re(J(l.status))},r(K(l.status)),5)]),t("div",Ce,r(l.task_id||"(无ID)"),1),t("div",$e,r(l.description||"(无描述)"),1),t("div",Te,r(H(l)),1),t("div",{class:"actions",style:{"margin-top":"10px"},onClick:e[1]||(e[1]=U(()=>{},["stop"]))},[G(l.status)&&!l.scheduled_time?(v(),m("button",{key:0,class:"btn",disabled:F(l.id),onClick:d=>Q(l)},r(F(l.id)?"运行中...":"运行"),9,Ie)):V("",!0),t("button",{class:"btn secondary",onClick:d=>X(l)},"编辑",8,Se),t("button",{class:"btn secondary",onClick:d=>Y(l)},"删除",8,Ve),B(l.status)?(v(),ce(a,{key:1,class:"btn secondary",to:`/tasks/${l.id}`},{default:W(()=>[...e[22]||(e[22]=[ve("详情",-1)])]),_:1},8,["to"])):V("",!0)])],8,he))),128))],512),[[N,S.value]])]),D.value?(v(),m("div",De,[t("div",ze,[t("div",je,[t("div",Ee,r(p.value?"编辑任务":"创建任务"),1),t("button",{class:"btn ghost",onClick:q},"关闭")]),t("div",Le,[t("div",null,[e[23]||(e[23]=t("label",null,"任务编号ID",-1)),u(t("input",{type:"text","onUpdate:modelValue":e[2]||(e[2]=l=>h.value=l),placeholder:"输入任务ID"},null,512),[[x,h.value]])]),t("div",null,[e[24]||(e[24]=t("label",null,"任务名称",-1)),u(t("input",{type:"text","onUpdate:modelValue":e[3]||(e[3]=l=>_.value=l),placeholder:"输入任务名称"},null,512),[[x,_.value]])])]),t("div",Ne,[t("div",null,[e[25]||(e[25]=t("label",null,"任务描述",-1)),u(t("textarea",{"onUpdate:modelValue":e[4]||(e[4]=l=>k.value=l),placeholder:`请详细描述任务内容,例如:
|
||
• 任务目标和预期结果
|
||
• 需要处理的数据或内容
|
||
• 执行步骤和注意事项
|
||
• 相关的技术要求和限制`,style:{"min-height":"120px",resize:"vertical"}},null,512),[[x,k.value]])])]),t("div",Ue,[e[28]||(e[28]=t("label",null,"定时策略(可选)",-1)),t("div",Me,[t("button",{class:L(["btn secondary",{active:o.value==="predefined"}]),onClick:e[5]||(e[5]=l=>o.value="predefined")},"预定时间执行",2),t("button",{class:L(["btn secondary",{active:o.value==="scheduled"}]),onClick:e[6]||(e[6]=l=>o.value="scheduled")},"每天定期执行",2),t("button",{class:L(["btn secondary",{active:o.value===""}]),onClick:e[7]||(e[7]=l=>o.value="")},"无定时",2)]),ie(oe,{name:"fade",mode:"out-in"},{default:W(()=>[(v(),m("div",{key:o.value,class:"schedule-content"},[o.value==="predefined"?(v(),m("div",Be,[e[26]||(e[26]=t("label",null,"预定执行时间",-1)),u(t("input",{type:"datetime-local","onUpdate:modelValue":e[8]||(e[8]=l=>c.value=l),class:"custom-datetime",onClick:e[9]||(e[9]=U(()=>{},["stop"]))},null,512),[[x,c.value]])])):o.value==="scheduled"?(v(),m("div",Re,[e[27]||(e[27]=t("label",null,"定期执行时间",-1)),u(t("input",{type:"time","onUpdate:modelValue":e[10]||(e[10]=l=>g.value=l),class:"custom-time",onClick:e[11]||(e[11]=U(()=>{},["stop"]))},null,512),[[x,g.value]])])):V("",!0)]))]),_:1})]),t("div",qe,[t("div",Fe,[e[29]||(e[29]=t("label",null,"获取条数(可选)",-1)),u(t("input",{type:"number","onUpdate:modelValue":e[12]||(e[12]=l=>b.value=l),placeholder:"如:10",min:"1"},null,512),[[x,b.value]])]),t("div",Pe,[e[31]||(e[31]=t("label",null,"解析功能",-1)),t("label",Ae,[u(t("input",{type:"checkbox","onUpdate:modelValue":e[13]||(e[13]=l=>C.value=l)},null,512),[[de,C.value]]),e[30]||(e[30]=t("span",{class:"track"},[t("span",{class:"thumb"})],-1)),t("span",null,r(C.value?"开启":"关闭"),1)])]),t("div",We,[t("button",{class:"btn",disabled:z.value,onClick:O},r(z.value?p.value?"更新中...":"创建中...":p.value?"确认更新":"确认创建"),9,Ge)])]),T.value?(v(),m("div",He,r(T.value),1)):V("",!0)])])):V("",!0)])}}},Xe=te(Je,[["__scopeId","data-v-7b067afc"]]);export{Xe as default};
|