2 lines
4.2 KiB
JavaScript
2 lines
4.2 KiB
JavaScript
import{r as E,u as z,o as J,x as K,c as I,w as l,a as k,E as d,y as O,d as i,f as e,z as P,b as j,A as G,B as H,C as R,m as c,F as $,D as q,G as Q,H as W,I as f,j as N,k as g,n as s,h as X,i as Y,J as Z,K as y,L as ee,M as T}from"./index-CtyWzmh7.js";/* empty css *//* empty css *//* empty css *//* empty css */const te={key:0},ae={key:1},le={key:2},ie={__name:"TrainingView",setup(oe){const V=E([]),b=E(!1),r=z({product_id:"",model_type:"mlstm",epochs:50}),w=E([]);let p=null;const C=async()=>{try{const a=await k.get("/api/products");a.data.status==="success"&&(V.value=a.data.data)}catch(a){d.error("获取产品列表失败"),console.error(a)}},v=async()=>{try{const a=await k.get("/api/training");a.data.status==="success"&&(w.value=a.data.data)}catch(a){p||d.error("获取训练任务列表失败"),console.error("获取训练任务列表失败",a)}},B=async()=>{var a,t;if(!r.product_id||!r.model_type){d.warning("请选择产品和模型类型");return}b.value=!0;try{const n=await k.post("/api/training",r);n.data.task_id?(d.success(`训练任务 ${n.data.task_id} 已启动`),v()):d.error(n.data.error||"启动训练失败")}catch(n){const m=((t=(a=n.response)==null?void 0:a.data)==null?void 0:t.error)||"启动训练请求失败";d.error(m),console.error(n)}finally{b.value=!1}},D=a=>a==="completed"?"success":a==="running"?"primary":a==="pending"?"warning":a==="failed"?"danger":"info",L=a=>({pending:"等待中",running:"进行中",completed:"已完成",failed:"失败"})[a]||"未知",M=a=>a?new Date(a).toLocaleString():"N/A";return J(()=>{C(),v(),p=setInterval(v,5e3)}),K(()=>{p&&clearInterval(p)}),(a,t)=>{const n=Q,m=R,_=H,F=W,S=G,x=j,h=P,u=Y,U=X,A=O;return i(),I(A,{gutter:20},{default:l(()=>[e(h,{span:8},{default:l(()=>[e(x,null,{header:l(()=>t[3]||(t[3]=[s("span",null,"启动模型训练",-1)])),default:l(()=>[e(S,{model:r,"label-width":"80px"},{default:l(()=>[e(_,{label:"产品"},{default:l(()=>[e(m,{modelValue:r.product_id,"onUpdate:modelValue":t[0]||(t[0]=o=>r.product_id=o),placeholder:"请选择产品",filterable:""},{default:l(()=>[(i(!0),c($,null,q(V.value,o=>(i(),I(n,{key:o.product_id,label:o.product_name,value:o.product_id},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(_,{label:"模型类型"},{default:l(()=>[e(m,{modelValue:r.model_type,"onUpdate:modelValue":t[1]||(t[1]=o=>r.model_type=o),placeholder:"请选择模型"},{default:l(()=>[e(n,{label:"mLSTM",value:"mlstm"}),e(n,{label:"Transformer",value:"transformer"}),e(n,{label:"KAN",value:"kan"})]),_:1},8,["modelValue"])]),_:1}),e(_,{label:"训练轮次"},{default:l(()=>[e(F,{modelValue:r.epochs,"onUpdate:modelValue":t[2]||(t[2]=o=>r.epochs=o),min:1,max:1e3},null,8,["modelValue"])]),_:1}),e(_,null,{default:l(()=>[e(f(N),{type:"primary",onClick:B,loading:b.value},{default:l(()=>t[4]||(t[4]=[g("启动训练")])),_:1,__:[4]},8,["loading"])]),_:1})]),_:1},8,["model"])]),_:1})]),_:1}),e(h,{span:16},{default:l(()=>[e(x,null,{header:l(()=>t[5]||(t[5]=[s("span",null,"训练任务队列",-1)])),default:l(()=>[e(U,{data:w.value,stripe:""},{default:l(()=>[e(u,{prop:"task_id",label:"任务ID",width:"120","show-overflow-tooltip":""}),e(u,{prop:"product_id",label:"产品ID",width:"100"}),e(u,{prop:"model_type",label:"模型类型",width:"120"}),e(u,{prop:"status",label:"状态",width:"100"},{default:l(({row:o})=>[e(f(Z),{type:D(o.status)},{default:l(()=>[g(y(L(o.status)),1)]),_:2},1032,["type"])]),_:1}),e(u,{prop:"start_time",label:"创建时间"},{default:l(({row:o})=>[g(y(M(o.start_time)),1)]),_:1}),e(u,{label:"详情"},{default:l(({row:o})=>[e(f(ee),{placement:"left",trigger:"hover",width:"400"},{reference:l(()=>[e(f(N),{type:"text",size:"small"},{default:l(()=>t[6]||(t[6]=[g("查看")])),_:1,__:[6]})]),default:l(()=>[o.status==="completed"?(i(),c("div",te,[t[7]||(t[7]=s("h4",null,"评估指标",-1)),s("pre",null,y(JSON.stringify(o.metrics,null,2)),1)])):T("",!0),o.status==="failed"?(i(),c("div",ae,[t[8]||(t[8]=s("h4",null,"错误信息",-1)),s("p",null,y(o.error),1)])):T("",!0),o.status==="running"||o.status==="pending"?(i(),c("div",le,t[9]||(t[9]=[s("p",null,"任务正在进行中...",-1)]))):T("",!0)]),_:2},1024)]),_:1})]),_:1},8,["data"])]),_:1})]),_:1})]),_:1})}}};export{ie as default};
|