selenium_keyan/selenium_vue/frontend-vite/dist/assets/Tasks-D-FwDMhz.js

6 lines
13 KiB
JavaScript
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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};