3 lines
30 KiB
JavaScript
3 lines
30 KiB
JavaScript
import{j as t,r as n}from"./vendor-codemirror-B1SGo4xl.js";import{C as lt,a as dt}from"./card-BHSBTtub.js";import{S as mt}from"./stat-strip-CSMyyoYr.js";import{D as X,a as G,b as K,c as U,d as W,e as xt,B as p,t as l,f as pt}from"./index-Bp-M7P_8.js";import{I as P}from"./input-Bnlm--la.js";import{B as C}from"./badge-B00SZHvE.js";import{C as I}from"./checkbox-Bsb-ZRm9.js";import{s as $,c as y,t as ht}from"./automation-BAtbOw0o.js";import{L as k,a as gt,y as ut,aq as Y,r as Z,R as bt,P as vt,S as yt,T as z,aC as Ct,b as jt,o as Jt,z as B,aD as Nt,aE as ft}from"./vendor-icons-BWk-DH7F.js";import{S as O,a as R,b as A,c as V,d as J}from"./select-DbhcBWnH.js";import{T as q}from"./textarea-BvOVhaCD.js";import{L as N}from"./label-NkONM5Mp.js";import{T as Dt,a as Ft,b as L,c as w,d as Mt,e as f}from"./table-u8V9iTZf.js";import"./index-5FEebgvX.js";function tt(i){switch(i){case"success":return t.jsxs(C,{"code-path":"src/components/automation/cronJobHelpers.tsx:9:9",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:[t.jsx(ut,{"code-path":"src/components/automation/cronJobHelpers.tsx:10:11",className:"h-3 w-3 mr-1"}),"成功"]});case"failed":return t.jsxs(C,{"code-path":"src/components/automation/cronJobHelpers.tsx:16:9",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10",children:[t.jsx(gt,{"code-path":"src/components/automation/cronJobHelpers.tsx:17:11",className:"h-3 w-3 mr-1"}),"失败"]});case"running":return t.jsxs(C,{"code-path":"src/components/automation/cronJobHelpers.tsx:23:9",variant:"outline",className:"border-blue-500/30 text-blue-400 bg-blue-500/10 animate-pulse",children:[t.jsx(k,{"code-path":"src/components/automation/cronJobHelpers.tsx:24:11",className:"h-3 w-3 mr-1 animate-spin"}),"执行中"]});default:return t.jsx(C,{"code-path":"src/components/automation/cronJobHelpers.tsx:30:9",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-muted)]",children:"从未执行"})}}function wt(i){return{"0 2 * * *":"每天 02:00","0 3 * * 0":"每周日 03:00","*/5 * * * *":"每 5 分钟","0 * * * *":"每小时","0 9 * * 1":"每周一 09:00"}[i]||i}const Q=[{value:"shell",label:"Shell 脚本",desc:"关联脚本库中的 Shell 脚本"},{value:"python",label:"Python 脚本",desc:"关联脚本库中的 Python 脚本"},{value:"command",label:"自定义命令",desc:"手动输入命令或脚本路径"}];function St({open:i,onOpenChange:g,editJob:s,onSuccess:D}){const[a,d]=n.useState({name:"",description:"",cron_expr:"",type:"shell",content:"",script_id:null}),[h,v]=n.useState([]),[r,m]=n.useState(null),[S,F]=n.useState(!1);n.useEffect(()=>{i&&($.getScripts({page_size:200}).then(e=>{v(e?.list||[])}).catch(()=>v([])),s?(d({name:s.name||"",description:s.description||"",cron_expr:s.cron_expr||"",type:s.type||"shell",content:s.content||"",script_id:s.script_id||null}),s.script_id?$.getScript(s.script_id).then(e=>{m(e)}).catch(()=>m(null)):m(null)):(d({name:"",description:"",cron_expr:"",type:"shell",content:"",script_id:null}),m(null)))},[i,s]);const M=a.type==="shell"||a.type==="python"?h.filter(e=>e.type===a.type):[],E=e=>{const x=h.find(j=>String(j.id)===e);x&&(m(x),d(j=>({...j,script_id:x.id,content:x.content})))},T=e=>{d(x=>({...x,type:e,script_id:null,content:e==="command"?x.content:""})),m(null)},H=async()=>{if(!a.name||!a.cron_expr){l.error("请填写任务名称和 Cron 表达式");return}if((a.type==="shell"||a.type==="python")&&!a.script_id){l.error("请选择关联的脚本");return}try{F(!0);const e={name:a.name,description:a.description,cron_expr:a.cron_expr,type:a.type,content:a.content,script_id:a.script_id};s?(await y.updateJob(s.id,e),l.success("任务更新成功")):(await y.createJob(e),l.success("任务创建成功")),g(!1),D()}catch(e){console.error("Failed to save cron job:",e),l.error(s?"更新失败":"创建失败")}finally{F(!1)}};return t.jsx(X,{"code-path":"src/components/automation/CronJobFormDialog.tsx:149:5",open:i,onOpenChange:g,children:t.jsxs(G,{"code-path":"src/components/automation/CronJobFormDialog.tsx:150:7",className:"max-w-2xl bg-[var(--dg-bg-primary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[t.jsxs(K,{"code-path":"src/components/automation/CronJobFormDialog.tsx:151:9",children:[t.jsx(U,{"code-path":"src/components/automation/CronJobFormDialog.tsx:152:11",children:s?"编辑定时任务":"新建定时任务"}),t.jsx(W,{"code-path":"src/components/automation/CronJobFormDialog.tsx:153:11",className:"text-[var(--dg-text-secondary)]",children:"配置 Cron 定时任务"})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:155:9",className:"space-y-4 py-4 max-h-[60vh] overflow-y-auto pr-1",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:157:11",children:[t.jsx(N,{"code-path":"src/components/automation/CronJobFormDialog.tsx:158:13",className:"text-[var(--dg-text-primary)]",children:"任务名称"}),t.jsx(P,{"code-path":"src/components/automation/CronJobFormDialog.tsx:159:13",value:a.name,onChange:e=>d({...a,name:e.target.value}),placeholder:"例如: 数据库备份",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] mt-1"})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:168:11",children:[t.jsx(N,{"code-path":"src/components/automation/CronJobFormDialog.tsx:169:13",className:"text-[var(--dg-text-primary)]",children:"描述"}),t.jsx(q,{"code-path":"src/components/automation/CronJobFormDialog.tsx:170:13",value:a.description,onChange:e=>d({...a,description:e.target.value}),placeholder:"任务描述...",rows:2,className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] mt-1"})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:180:11",children:[t.jsx(N,{"code-path":"src/components/automation/CronJobFormDialog.tsx:181:13",className:"text-[var(--dg-text-primary)]",children:"Cron 表达式"}),t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:182:13",className:"flex gap-2",children:[t.jsx(P,{"code-path":"src/components/automation/CronJobFormDialog.tsx:183:15",value:a.cron_expr,onChange:e=>d({...a,cron_expr:e.target.value}),placeholder:"0 2 * * *",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] mt-1"}),t.jsxs(O,{"code-path":"src/components/automation/CronJobFormDialog.tsx:189:15",onValueChange:e=>d({...a,cron_expr:e}),children:[t.jsx(R,{"code-path":"src/components/automation/CronJobFormDialog.tsx:190:17",className:"w-48 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] mt-1",children:t.jsx(A,{"code-path":"src/components/automation/CronJobFormDialog.tsx:191:19",placeholder:"快速选择"})}),t.jsxs(V,{"code-path":"src/components/automation/CronJobFormDialog.tsx:193:17",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:[t.jsx(J,{"code-path":"src/components/automation/CronJobFormDialog.tsx:194:19",value:"*/5 * * * *",className:"text-[var(--dg-text-primary)]",children:"每 5 分钟"}),t.jsx(J,{"code-path":"src/components/automation/CronJobFormDialog.tsx:195:19",value:"0 * * * *",className:"text-[var(--dg-text-primary)]",children:"每小时"}),t.jsx(J,{"code-path":"src/components/automation/CronJobFormDialog.tsx:196:19",value:"0 2 * * *",className:"text-[var(--dg-text-primary)]",children:"每天 02:00"}),t.jsx(J,{"code-path":"src/components/automation/CronJobFormDialog.tsx:197:19",value:"0 3 * * 0",className:"text-[var(--dg-text-primary)]",children:"每周日 03:00"}),t.jsx(J,{"code-path":"src/components/automation/CronJobFormDialog.tsx:198:19",value:"0 9 * * 1",className:"text-[var(--dg-text-primary)]",children:"每周一 09:00"})]})]})]}),t.jsx("p",{"code-path":"src/components/automation/CronJobFormDialog.tsx:202:13",className:"text-xs text-[var(--dg-text-muted)] mt-1",children:"格式: 分 时 日 月 周"})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:206:11",children:[t.jsx(N,{"code-path":"src/components/automation/CronJobFormDialog.tsx:207:13",className:"text-[var(--dg-text-primary)]",children:"执行类型"}),t.jsx("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:208:13",className:"grid grid-cols-3 gap-2 mt-1",children:Q.map(e=>t.jsx("button",{"code-path":"src/components/automation/CronJobFormDialog.tsx:210:17",type:"button",onClick:()=>T(e.value),className:`px-3 py-2 rounded-md border text-sm transition-colors text-left ${a.type===e.value?"border-[var(--dg-blue)] bg-[var(--dg-blue)]/10 text-[var(--dg-blue)]":"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)]"}`,children:t.jsx("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:220:19",className:"font-medium",children:e.label})},e.value))}),t.jsx("p",{"code-path":"src/components/automation/CronJobFormDialog.tsx:224:13",className:"text-xs text-[var(--dg-text-muted)] mt-1",children:Q.find(e=>e.value===a.type)?.desc})]}),a.type==="shell"||a.type==="python"?t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:231:13",className:"space-y-3",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:232:15",children:[t.jsxs(N,{"code-path":"src/components/automation/CronJobFormDialog.tsx:233:17",className:"text-[var(--dg-text-primary)]",children:["选择脚本 ",t.jsx("span",{"code-path":"src/components/automation/CronJobFormDialog.tsx:234:24",className:"text-red-400",children:"*"})]}),M.length===0?t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:237:19",className:"mt-1 px-3 py-4 rounded-md border border-dashed border-[var(--dg-border)] text-center",children:[t.jsxs("p",{"code-path":"src/components/automation/CronJobFormDialog.tsx:238:21",className:"text-sm text-[var(--dg-text-muted)]",children:["脚本库中没有 ",a.type==="shell"?"Shell":"Python"," 脚本"]}),t.jsxs("p",{"code-path":"src/components/automation/CronJobFormDialog.tsx:241:21",className:"text-xs text-[var(--dg-text-muted)] mt-1",children:["请先到「脚本库」创建 ",a.type==="shell"?"Shell":"Python"," 脚本"]})]}):t.jsxs(O,{"code-path":"src/components/automation/CronJobFormDialog.tsx:246:19",value:a.script_id?String(a.script_id):"",onValueChange:E,children:[t.jsx(R,{"code-path":"src/components/automation/CronJobFormDialog.tsx:250:21",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] mt-1",children:t.jsx(A,{"code-path":"src/components/automation/CronJobFormDialog.tsx:251:23",placeholder:"选择脚本库中的脚本..."})}),t.jsx(V,{"code-path":"src/components/automation/CronJobFormDialog.tsx:253:21",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:M.map(e=>t.jsxs(J,{"code-path":"src/components/automation/CronJobFormDialog.tsx:255:25",value:String(e.id),className:"text-[var(--dg-text-primary)]",children:[e.name,e.description?` — ${e.description}`:""]},e.id))})]})]}),r&&t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:266:17",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:267:19",className:"flex items-center gap-2 mb-1",children:[t.jsx(C,{"code-path":"src/components/automation/CronJobFormDialog.tsx:268:21",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-muted)]",children:r.type==="shell"?"Shell":"Python"}),t.jsxs("span",{"code-path":"src/components/automation/CronJobFormDialog.tsx:271:21",className:"text-xs text-[var(--dg-text-muted)]",children:[(r.content||"").split(`
|
|
`).length," 行"]})]}),t.jsx("pre",{"code-path":"src/components/automation/CronJobFormDialog.tsx:275:19",className:"max-h-48 overflow-auto rounded-md bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] p-3 text-xs font-mono text-[var(--dg-text-secondary)] whitespace-pre-wrap break-all",children:r.content||"(空脚本)"})]})]}):t.jsxs("div",{"code-path":"src/components/automation/CronJobFormDialog.tsx:282:13",children:[t.jsx(N,{"code-path":"src/components/automation/CronJobFormDialog.tsx:283:15",className:"text-[var(--dg-text-primary)]",children:"执行命令"}),t.jsx(q,{"code-path":"src/components/automation/CronJobFormDialog.tsx:284:15",value:a.content,onChange:e=>d({...a,content:e.target.value}),placeholder:"/scripts/backup.sh arg1 arg2",rows:4,className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] mt-1 font-mono"})]})]}),t.jsxs(xt,{"code-path":"src/components/automation/CronJobFormDialog.tsx:294:9",children:[t.jsx(p,{"code-path":"src/components/automation/CronJobFormDialog.tsx:295:11",variant:"outline",onClick:()=>g(!1),className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),t.jsx(p,{"code-path":"src/components/automation/CronJobFormDialog.tsx:298:11",className:"bg-blue-600 hover:bg-blue-700",onClick:H,disabled:S,children:S?"保存中...":s?"保存修改":"创建任务"})]})]})})}function Et({open:i,onOpenChange:g}){const[s,D]=n.useState([]),[a,d]=n.useState(!1),[h,v]=n.useState(null);return n.useEffect(()=>{if(!i)return;(async()=>{try{d(!0);const m=await ht.getExecutions({task_type:"cron",page_size:50});D(m.list||[])}catch(m){console.error("Failed to load executions:",m)}finally{d(!1)}})()},[i]),t.jsx(X,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:51:5",open:i,onOpenChange:g,children:t.jsxs(G,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:52:7",className:"max-w-4xl bg-[var(--dg-bg-primary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] max-h-[85vh] overflow-y-auto",children:[t.jsxs(K,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:53:9",children:[t.jsx(U,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:54:11",children:"执行历史"}),t.jsx(W,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:55:11",className:"text-[var(--dg-text-secondary)]",children:"定时任务执行记录与输出日志"})]}),t.jsx("div",{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:57:9",className:"mt-4",children:a?t.jsx("div",{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:59:13",className:"flex items-center justify-center py-8",children:t.jsx(k,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:60:15",className:"h-6 w-6 text-[var(--dg-text-secondary)] animate-spin"})}):s.length===0?t.jsxs("div",{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:63:13",className:"flex flex-col items-center justify-center py-12 text-[var(--dg-text-secondary)]",children:[t.jsx(Y,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:64:15",className:"h-10 w-10 mb-3 opacity-40"}),t.jsx("p",{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:65:15",className:"text-sm",children:"暂无执行记录"})]}):t.jsxs(Dt,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:68:13",children:[t.jsx(Ft,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:69:15",children:t.jsxs(L,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:70:17",className:"border-[var(--dg-border)]",children:[t.jsx(w,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:71:19",className:"text-[var(--dg-text-secondary)]",children:"任务"}),t.jsx(w,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:72:19",className:"text-[var(--dg-text-secondary)]",children:"状态"}),t.jsx(w,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:73:19",className:"text-[var(--dg-text-secondary)]",children:"耗时"}),t.jsx(w,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:74:19",className:"text-[var(--dg-text-secondary)]",children:"执行时间"}),t.jsx(w,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:75:19",className:"text-[var(--dg-text-secondary)]",children:"输出"})]})}),t.jsx(Mt,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:78:15",children:s.map(r=>t.jsxs(n.Fragment,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:80:19",children:[t.jsxs(L,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:81:21",className:"border-[var(--dg-border)] cursor-pointer hover:bg-[var(--dg-bg-hover)]/50",onClick:()=>v(h===r.id?null:r.id),children:[t.jsx(f,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:82:23",className:"text-[var(--dg-text-primary)]",children:r.task_name}),t.jsx(f,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:83:23",children:tt(r.status)}),t.jsx(f,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:84:23",className:"text-[var(--dg-text-secondary)]",children:r.duration?`${r.duration}ms`:"--"}),t.jsx(f,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:85:23",className:"text-[var(--dg-text-secondary)]",children:r.started_at?new Date(r.started_at).toLocaleString():"--"}),t.jsx(f,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:88:23",className:"text-[var(--dg-text-secondary)]",children:r.output?t.jsxs("span",{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:90:27",className:"text-blue-400 text-xs flex items-center gap-1",children:[t.jsx(Z,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:91:29",className:"h-3 w-3"}),h===r.id?"收起":"查看"]}):"--"})]}),h===r.id&&r.output&&t.jsx(L,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:100:23",className:"border-[var(--dg-border)]",children:t.jsx(f,{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:101:25",colSpan:5,className:"bg-[var(--dg-bg-tertiary)] p-0",children:t.jsx("pre",{"code-path":"src/components/automation/ExecutionHistoryDialog.tsx:102:27",className:"p-4 text-xs text-[var(--dg-text-primary)] font-mono whitespace-pre-wrap max-h-64 overflow-y-auto",children:r.output})})},`${r.id}-out`)]},r.id))})]})})]})})}function qt(){const[i,g]=n.useState(""),[s,D]=n.useState([]),[a,d]=n.useState(!0),[h,v]=n.useState(!1),[r,m]=n.useState(!1),[S,F]=n.useState(!1),[M,E]=n.useState(null),[T,H]=n.useState(null),[e,x]=n.useState([]),j=pt(),ot=()=>{H(null),m(!0)},et=o=>{H(o),m(!0)},u=n.useCallback(async()=>{v(!0);try{const o=await y.getJobs();D(o.list||[])}catch(o){console.error("Failed to load cron jobs:",o),l.error("加载失败")}finally{v(!1),d(!1)}},[]);n.useEffect(()=>{u()},[u]);const b=s.filter(o=>(o.name||"").toLowerCase().includes(i.toLowerCase())||(o.description||"").toLowerCase().includes(i.toLowerCase())),at=async o=>{try{await y.toggleJob(o),l.success("状态已切换"),u()}catch(c){console.error("Failed to toggle job:",c),l.error("操作失败")}},st=async o=>{E(o);try{const c=await y.executeJob(o);(c?.status||"success")==="success"?l.success("执行成功",{description:`耗时 ${c?.duration||0}ms`}):l.error("执行失败",{description:(c?.output||"").slice(0,100)}),u()}catch(c){console.error("Failed to execute job:",c),l.error("执行失败")}finally{E(null)}},rt=async o=>{if(await j({title:"删除定时任务",description:`确定删除「${o.name}」吗?此操作不可恢复。`,variant:"destructive"}))try{await y.deleteJob(o.id),l.success("任务已删除"),u()}catch(_){console.error("Failed to delete job:",_),l.error("删除失败")}},nt=o=>{x(c=>c.includes(o)?c.filter(_=>_!==o):[...c,o])},ct=()=>{e.length===b.length&&b.length>0?x([]):x(b.map(o=>o.id))},it=async()=>{if(!(e.length===0||!await j({title:"批量删除定时任务",description:`确定删除选中的 ${e.length} 个任务吗?此操作不可恢复。`,confirmText:"批量删除",variant:"destructive"})))try{await y.batchDelete(e),l.success(`已删除 ${e.length} 个任务`),x([]),u()}catch(c){console.error("Failed to batch delete jobs:",c),l.error("批量删除失败")}};return t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:165:5",className:"space-y-6",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:167:7",className:"flex items-center justify-between",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:168:9",children:[t.jsx("h1",{"code-path":"src/components/automation/CronJobManager.tsx:169:11",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:"定时任务"}),t.jsx("p",{"code-path":"src/components/automation/CronJobManager.tsx:170:11",className:"text-sm text-[var(--dg-text-secondary)] mt-1",children:"Cron 任务管理与执行"})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:172:9",className:"flex items-center gap-2",children:[t.jsxs(p,{"code-path":"src/components/automation/CronJobManager.tsx:173:11",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:()=>F(!0),children:[t.jsx(Y,{"code-path":"src/components/automation/CronJobManager.tsx:178:13",className:"h-4 w-4 mr-2"}),"执行历史"]}),t.jsxs(p,{"code-path":"src/components/automation/CronJobManager.tsx:181:11",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:()=>u(),disabled:h,children:[t.jsx(bt,{"code-path":"src/components/automation/CronJobManager.tsx:187:13",className:`h-4 w-4 mr-2 ${h?"animate-spin":""}`}),"刷新"]}),t.jsxs(p,{"code-path":"src/components/automation/CronJobManager.tsx:190:11",className:"bg-blue-600 hover:bg-blue-700",onClick:ot,children:[t.jsx(vt,{"code-path":"src/components/automation/CronJobManager.tsx:191:13",className:"h-4 w-4 mr-2"}),"新建任务"]})]})]}),t.jsx(mt,{"code-path":"src/components/automation/CronJobManager.tsx:198:7",items:[{label:"任务总数",value:s.length,color:"blue"},{label:"已启用",value:s.filter(o=>o.enabled).length,color:"emerald"},{label:"累计成功",value:s.reduce((o,c)=>o+(c.success_count||0),0),color:"emerald"},{label:"累计失败",value:s.reduce((o,c)=>o+(c.fail_count||0),0),color:"red"}]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:208:7",className:"flex items-center justify-between flex-wrap gap-4",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:209:9",className:"flex items-center gap-3 flex-wrap",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:210:11",className:"relative flex-1 max-w-md",children:[t.jsx(yt,{"code-path":"src/components/automation/CronJobManager.tsx:211:13",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--dg-text-secondary)]"}),t.jsx(P,{"code-path":"src/components/automation/CronJobManager.tsx:212:13",placeholder:"搜索任务...",value:i,onChange:o=>g(o.target.value),className:"pl-10 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"})]}),b.length>0&&t.jsxs("label",{"code-path":"src/components/automation/CronJobManager.tsx:220:13",className:"flex items-center gap-2 text-sm text-[var(--dg-text-secondary)] cursor-pointer select-none",children:[t.jsx(I,{"code-path":"src/components/automation/CronJobManager.tsx:221:15",checked:e.length===b.length&&b.length>0,onCheckedChange:ct,className:"border-[var(--dg-border)]"}),"全选"]})]}),e.length>0&&t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:233:11",className:"flex items-center gap-2",children:[t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:234:13",className:"text-sm text-[var(--dg-text-secondary)]",children:["已选择 ",e.length," 项"]}),t.jsxs(p,{"code-path":"src/components/automation/CronJobManager.tsx:235:13",variant:"outline",size:"sm",className:"border-red-500/30 text-red-400 hover:bg-red-500/10",onClick:it,children:[t.jsx(z,{"code-path":"src/components/automation/CronJobManager.tsx:241:15",className:"h-4 w-4 mr-2"}),"批量删除"]})]})]}),a?t.jsx("div",{"code-path":"src/components/automation/CronJobManager.tsx:249:9",className:"flex items-center justify-center py-12",children:t.jsx(k,{"code-path":"src/components/automation/CronJobManager.tsx:250:11",className:"h-6 w-6 text-[var(--dg-text-secondary)] animate-spin"})}):b.length===0?t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:253:9",className:"flex flex-col items-center justify-center py-16 text-[var(--dg-text-secondary)]",children:[t.jsx(Ct,{"code-path":"src/components/automation/CronJobManager.tsx:254:11",className:"h-12 w-12 mb-3 opacity-40"}),t.jsx("p",{"code-path":"src/components/automation/CronJobManager.tsx:255:11",className:"text-sm",children:"暂无定时任务"})]}):null,t.jsx("div",{"code-path":"src/components/automation/CronJobManager.tsx:260:7",className:"space-y-3",children:b.map(o=>t.jsx(lt,{"code-path":"src/components/automation/CronJobManager.tsx:262:11",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:t.jsx(dt,{"code-path":"src/components/automation/CronJobManager.tsx:263:13",className:"p-4",children:t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:264:15",className:"flex items-start justify-between gap-3",children:[t.jsx("div",{"code-path":"src/components/automation/CronJobManager.tsx:265:17",className:"flex items-center pt-1",children:t.jsx(I,{"code-path":"src/components/automation/CronJobManager.tsx:266:19",checked:e.includes(o.id),onCheckedChange:()=>nt(o.id),className:"border-[var(--dg-border)]"})}),t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:272:17",className:"flex-1 min-w-0",children:[t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:273:19",className:"flex items-center gap-3 flex-wrap",children:[t.jsx("h3",{"code-path":"src/components/automation/CronJobManager.tsx:274:21",className:"font-medium text-[var(--dg-text-primary)]",children:o.name}),t.jsx(C,{"code-path":"src/components/automation/CronJobManager.tsx:275:21",variant:"outline",className:o.enabled?"border-emerald-500/30 text-emerald-400 bg-emerald-500/10":"border-[var(--dg-border)] text-[var(--dg-text-muted)]",children:o.enabled?"已启用":"已禁用"}),tt(o.last_status),t.jsx(C,{"code-path":"src/components/automation/CronJobManager.tsx:286:21",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:o.type==="shell"?"Shell":o.type==="python"?"Python":"命令"})]}),t.jsx("p",{"code-path":"src/components/automation/CronJobManager.tsx:290:19",className:"text-sm text-[var(--dg-text-secondary)] mt-1",children:o.description||"—"}),t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:291:19",className:"flex items-center gap-4 mt-2 text-sm",children:[t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:292:21",className:"flex items-center gap-1 text-[var(--dg-text-secondary)]",children:[t.jsx(jt,{"code-path":"src/components/automation/CronJobManager.tsx:293:23",className:"h-3 w-3"}),wt(o.cron_expr)]}),(o.type==="shell"||o.type==="python")&&o.script?.name?t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:297:23",className:"flex items-center gap-1 text-[var(--dg-text-secondary)]",children:[t.jsx(Jt,{"code-path":"src/components/automation/CronJobManager.tsx:298:25",className:"h-3 w-3"}),t.jsx("span",{"code-path":"src/components/automation/CronJobManager.tsx:299:25",className:"text-xs",children:o.script.name})]}):o.content&&t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:302:23",className:"flex items-center gap-1 text-[var(--dg-text-secondary)]",children:[t.jsx(Z,{"code-path":"src/components/automation/CronJobManager.tsx:303:25",className:"h-3 w-3"}),t.jsx("code",{"code-path":"src/components/automation/CronJobManager.tsx:304:25",className:"text-xs bg-[var(--dg-bg-tertiary)] px-2 py-0.5 rounded truncate max-w-xs",children:o.content})]})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:310:19",className:"flex items-center gap-4 mt-2 text-xs text-[var(--dg-text-muted)]",children:[t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:311:21",children:["上次执行: ",o.last_run_at?new Date(o.last_run_at).toLocaleString():"--"]}),t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:312:21",children:["成功: ",o.success_count||0," / 失败: ",o.fail_count||0]}),t.jsxs("span",{"code-path":"src/components/automation/CronJobManager.tsx:313:21",children:["累计: ",o.run_count||0," 次"]})]})]}),t.jsxs("div",{"code-path":"src/components/automation/CronJobManager.tsx:317:17",className:"flex items-center gap-2 shrink-0",children:[t.jsxs(p,{"code-path":"src/components/automation/CronJobManager.tsx:318:19",variant:"outline",size:"sm",className:"border-emerald-600 text-emerald-400 hover:bg-emerald-600/20",disabled:M===o.id,onClick:()=>st(o.id),children:[M===o.id?t.jsx(k,{"code-path":"src/components/automation/CronJobManager.tsx:326:23",className:"h-4 w-4 mr-1 animate-spin"}):t.jsx(B,{"code-path":"src/components/automation/CronJobManager.tsx:328:23",className:"h-4 w-4 mr-1"}),"立即执行"]}),t.jsx(p,{"code-path":"src/components/automation/CronJobManager.tsx:332:19",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-blue-400",title:o.enabled?"禁用":"启用",onClick:()=>at(o.id),children:o.enabled?t.jsx(Nt,{"code-path":"src/components/automation/CronJobManager.tsx:339:36",className:"h-4 w-4"}):t.jsx(B,{"code-path":"src/components/automation/CronJobManager.tsx:339:68",className:"h-4 w-4"})}),t.jsx(p,{"code-path":"src/components/automation/CronJobManager.tsx:341:19",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-blue-400",title:"编辑",onClick:()=>et(o),children:t.jsx(ft,{"code-path":"src/components/automation/CronJobManager.tsx:348:21",className:"h-4 w-4"})}),t.jsx(p,{"code-path":"src/components/automation/CronJobManager.tsx:350:19",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-red-400",title:"删除",onClick:()=>rt(o),children:t.jsx(z,{"code-path":"src/components/automation/CronJobManager.tsx:357:21",className:"h-4 w-4"})})]})]})})},o.id))}),t.jsx(St,{"code-path":"src/components/automation/CronJobManager.tsx:367:7",open:r,onOpenChange:m,editJob:T,onSuccess:u}),t.jsx(Et,{"code-path":"src/components/automation/CronJobManager.tsx:375:7",open:S,onOpenChange:F})]})}export{qt as CronJobManager};
|