OTAUpgrade-676eff63.js 11 KB

1
  1. import{f as a,A as ee,_ as ae,r as w,c as C,o as te,a as le,b as i,d as U,e as N,i as o,g as t,h as k,j as T,R as se,k as s,t as O,m as re,l as ue,v}from"./index-29b7bbe1.js";var ne={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M518.3 459a8 8 0 00-12.6 0l-112 141.7a7.98 7.98 0 006.3 12.9h73.9V856c0 4.4 3.6 8 8 8h60c4.4 0 8-3.6 8-8V613.7H624c6.7 0 10.4-7.7 6.3-12.9L518.3 459z"}},{tag:"path",attrs:{d:"M811.4 366.7C765.6 245.9 648.9 160 512.2 160S258.8 245.8 213 366.6C127.3 389.1 64 467.2 64 560c0 110.5 89.5 200 199.9 200H304c4.4 0 8-3.6 8-8v-60c0-4.4-3.6-8-8-8h-40.1c-33.7 0-65.4-13.4-89-37.7-23.5-24.2-36-56.8-34.9-90.6.9-26.4 9.9-51.2 26.2-72.1 16.7-21.3 40.1-36.8 66.1-43.7l37.9-9.9 13.9-36.6c8.6-22.8 20.6-44.1 35.7-63.4a245.6 245.6 0 0152.4-49.9c41.1-28.9 89.5-44.2 140-44.2s98.9 15.3 140 44.2c19.9 14 37.5 30.8 52.4 49.9 15.1 19.3 27.1 40.7 35.7 63.4l13.8 36.5 37.8 10C846.1 454.5 884 503.8 884 560c0 33.1-12.9 64.3-36.3 87.7a123.07 123.07 0 01-87.6 36.3H720c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h40.1C870.5 760 960 670.5 960 560c0-92.7-63.1-170.7-148.6-193.3z"}}]},name:"cloud-upload",theme:"outlined"};const oe=ne;function H(m){for(var f=1;f<arguments.length;f++){var u=arguments[f]!=null?Object(arguments[f]):{},_=Object.keys(u);typeof Object.getOwnPropertySymbols=="function"&&(_=_.concat(Object.getOwnPropertySymbols(u).filter(function(g){return Object.getOwnPropertyDescriptor(u,g).enumerable}))),_.forEach(function(g){de(m,g,u[g])})}return m}function de(m,f,u){return f in m?Object.defineProperty(m,f,{value:u,enumerable:!0,configurable:!0,writable:!0}):m[f]=u,m}var z=function(f,u){var _=H({},f,u.attrs);return a(ee,H({},_,{icon:oe}),null)};z.displayName="CloudUploadOutlined";z.inheritAttrs=!1;const ie=z;const fe={class:"ota-upgrade"},ce={class:"status-header"},pe={key:0,class:"error-text"},me={key:1,class:"text-muted"},_e={__name:"OTAUpgrade",setup(m){const f=w(!1),u=w(!1),_=w(!1),g=w(null),A=w(""),n=w({status:"IDLE",progress:0,target_version:null,error_code:null,error_message:null,last_update:null}),l=w({firmware_url:"",firmware_version:"",file_size:null,checksum:"",checksum_type:"MD5",force_upgrade:!1}),R={firmware_url:[{required:!0,message:"请输入固件URL"},{type:"url",message:"请输入有效的URL"}],firmware_version:[{required:!0,message:"请输入目标版本"}],file_size:[{required:!0,message:"请输入文件大小"},{type:"number",min:1,message:"文件大小必须大于0"}],checksum:[{required:!0,message:"请输入校验和"}],checksum_type:[{required:!0,message:"请选择校验和类型"}]},G=C(()=>l.value.firmware_url&&l.value.firmware_version&&l.value.file_size&&l.value.checksum&&!u.value&&(n.value.status==="IDLE"||n.value.status==="SUCCESS"||n.value.status==="FAILED")),V=C(()=>({IDLE:"空闲",DOWNLOADING:"下载中",VERIFYING:"验证中",FLASHING:"烧录中",SUCCESS:"成功",FAILED:"失败"})[n.value.status]||n.value.status),P=C(()=>({IDLE:"default",DOWNLOADING:"processing",VERIFYING:"processing",FLASHING:"processing",SUCCESS:"success",FAILED:"error"})[n.value.status]||"default"),j=C(()=>n.value.status==="FAILED"?"exception":n.value.status==="SUCCESS"||n.value.progress>=100?"success":"normal"),q=C(()=>n.value.status==="FAILED"?"#ff4d4f":n.value.status==="SUCCESS"?"#52c41a":"#1890ff");async function B(){var r,e;if(!l.value.firmware_url){v.warning("请先输入固件URL");return}_.value=!0;try{const c=await k.dtu.detectFirmware(l.value.firmware_url);if(c.data.success){const y=c.data.data;l.value.firmware_version=y.firmware_version,l.value.file_size=y.file_size,l.value.checksum=y.checksum,l.value.checksum_type=y.checksum_type,v.success("已自动获取固件信息")}else v.error(c.data.message||"检测失败")}catch(c){v.error("检测失败: "+(((e=(r=c.response)==null?void 0:r.data)==null?void 0:e.message)||c.message))}finally{_.value=!1}}async function I(){try{const r=await k.dtu.getOtaStatus();if(r.data.success){const e=r.data.data;n.value={status:e.ota_status,progress:e.ota_progress||0,target_version:e.target_version,error_code:e.error_code,error_message:e.error_message,last_update:e.last_update},e.current_firmware&&(A.value=e.current_firmware)}}catch(r){console.error("fetch ota status error:",r)}}async function W(){try{const r=await k.dtu.getStatus();r.data.success&&r.data.status&&(A.value=r.data.status.firmware_version||"")}catch(r){console.error("fetch dtu status error:",r)}}async function F(){f.value=!0;try{await Promise.all([I(),W()])}finally{f.value=!1}}async function Y(){u.value=!0;try{const r=await k.dtu.triggerOtaUpgrade({firmware_url:l.value.firmware_url,firmware_version:l.value.firmware_version,file_size:l.value.file_size,checksum:l.value.checksum,checksum_type:l.value.checksum_type,force_upgrade:l.value.force_upgrade});r.data.success?(v.success("OTA升级已发起"),await I()):v.error(r.data.message||"升级发起失败")}catch(r){console.error("ota upgrade error:",r),v.error("升级发起失败")}finally{u.value=!1}}async function $(){try{await k.dtu.sendControl({command:"OTA_CANCEL"}),v.info("取消命令已发送")}catch(r){console.error("cancel upgrade error:",r),v.error("取消失败")}}return te(async()=>{await F(),g.value=setInterval(I,3e3)}),le(()=>{g.value&&clearInterval(g.value)}),(r,e)=>{const c=i("a-button"),y=i("a-tag"),d=i("a-descriptions-item"),J=i("a-progress"),D=i("a-descriptions"),E=i("a-card"),L=i("a-input"),b=i("a-form-item"),S=i("a-col"),Q=i("a-input-number"),x=i("a-row"),M=i("a-select-option"),X=i("a-select"),Z=i("a-switch"),K=i("a-form"),h=i("a-divider");return U(),N("div",fe,[e[30]||(e[30]=o("div",{class:"page-header"},[o("h2",{class:"page-title"},"OTA升级")],-1)),a(E,{bordered:!1,class:"status-card"},{default:t(()=>[o("div",ce,[e[7]||(e[7]=o("h3",null,"当前状态",-1)),a(c,{onClick:F,loading:f.value},{icon:t(()=>[a(T(se))]),default:t(()=>[e[6]||(e[6]=s(" 刷新 ",-1))]),_:1},8,["loading"])]),a(D,{column:3,bordered:"",size:"small"},{default:t(()=>[a(d,{label:"升级状态"},{default:t(()=>[a(y,{color:P.value},{default:t(()=>[s(O(V.value),1)]),_:1},8,["color"])]),_:1}),a(d,{label:"当前固件版本"},{default:t(()=>[s(O(A.value||"-"),1)]),_:1}),a(d,{label:"目标固件版本"},{default:t(()=>[s(O(n.value.target_version||"-"),1)]),_:1}),a(d,{label:"升级进度"},{default:t(()=>[a(J,{percent:n.value.progress,status:j.value,"stroke-color":q.value,style:{width:"150px"}},null,8,["percent","status","stroke-color"])]),_:1}),a(d,{label:"最后更新"},{default:t(()=>[s(O(n.value.last_update||"-"),1)]),_:1}),a(d,{label:"错误信息"},{default:t(()=>[n.value.error_message?(U(),N("span",pe,O(n.value.error_message),1)):(U(),N("span",me,"-"))]),_:1})]),_:1})]),_:1}),a(E,{bordered:!1,class:"config-card"},{default:t(()=>[e[14]||(e[14]=o("h3",null,"发起OTA升级",-1)),a(K,{model:l.value,rules:R,layout:"vertical",onFinish:Y},{default:t(()=>[a(x,{gutter:16},{default:t(()=>[a(S,{span:12},{default:t(()=>[a(b,{label:"固件URL",name:"firmware_url"},{default:t(()=>[a(L,{value:l.value.firmware_url,"onUpdate:value":e[0]||(e[0]=p=>l.value.firmware_url=p),placeholder:"http://example.com/firmware.tar.gz",disabled:u.value},{suffix:t(()=>[a(c,{size:"small",type:"link",onClick:B,loading:_.value},{default:t(()=>[...e[8]||(e[8]=[s("检测",-1)])]),_:1},8,["loading"])]),_:1},8,["value","disabled"])]),_:1})]),_:1}),a(S,{span:6},{default:t(()=>[a(b,{label:"目标版本",name:"firmware_version"},{default:t(()=>[a(L,{value:l.value.firmware_version,"onUpdate:value":e[1]||(e[1]=p=>l.value.firmware_version=p),placeholder:"v1.2.0",disabled:u.value},null,8,["value","disabled"])]),_:1})]),_:1}),a(S,{span:6},{default:t(()=>[a(b,{label:"文件大小(字节)",name:"file_size"},{default:t(()=>[a(Q,{value:l.value.file_size,"onUpdate:value":e[2]||(e[2]=p=>l.value.file_size=p),min:0,style:{width:"100%"},placeholder:"1048576",disabled:u.value},null,8,["value","disabled"])]),_:1})]),_:1})]),_:1}),a(x,{gutter:16},{default:t(()=>[a(S,{span:8},{default:t(()=>[a(b,{label:"校验和",name:"checksum"},{default:t(()=>[a(L,{value:l.value.checksum,"onUpdate:value":e[3]||(e[3]=p=>l.value.checksum=p),placeholder:"MD5/SHA256值",disabled:u.value},null,8,["value","disabled"])]),_:1})]),_:1}),a(S,{span:8},{default:t(()=>[a(b,{label:"校验和类型",name:"checksum_type"},{default:t(()=>[a(X,{value:l.value.checksum_type,"onUpdate:value":e[4]||(e[4]=p=>l.value.checksum_type=p),disabled:u.value},{default:t(()=>[a(M,{value:"MD5"},{default:t(()=>[...e[9]||(e[9]=[s("MD5",-1)])]),_:1}),a(M,{value:"SHA256"},{default:t(()=>[...e[10]||(e[10]=[s("SHA256",-1)])]),_:1})]),_:1},8,["value","disabled"])]),_:1})]),_:1}),a(S,{span:8},{default:t(()=>[a(b,{label:"强制升级",name:"force_upgrade"},{default:t(()=>[a(Z,{checked:l.value.force_upgrade,"onUpdate:checked":e[5]||(e[5]=p=>l.value.force_upgrade=p),disabled:u.value},null,8,["checked","disabled"]),e[11]||(e[11]=o("span",{class:"switch-hint"},"忽略版本一致性",-1))]),_:1})]),_:1})]),_:1}),a(b,null,{default:t(()=>[a(c,{type:"primary","html-type":"submit",loading:u.value,disabled:!G.value},{icon:t(()=>[a(T(ie))]),default:t(()=>[e[12]||(e[12]=s(" 开始升级 ",-1))]),_:1},8,["loading","disabled"]),n.value.status!=="IDLE"&&n.value.status!=="SUCCESS"&&n.value.status!=="FAILED"?(U(),re(c,{key:0,onClick:$,danger:"",style:{"margin-left":"12px"}},{default:t(()=>[...e[13]||(e[13]=[s(" 取消升级 ",-1)])]),_:1})):ue("",!0)]),_:1})]),_:1},8,["model"])]),_:1}),a(E,{bordered:!1,class:"help-card"},{default:t(()=>[e[26]||(e[26]=o("h3",null,"升级说明",-1)),e[27]||(e[27]=o("ul",null,[o("li",null,[o("strong",null,"固件URL:"),s(" 固件文件的完整下载链接")]),o("li",null,[o("strong",null,"目标版本:"),s(" 升级后的固件版本号(如v1.2.0)")]),o("li",null,[o("strong",null,"文件大小:"),s(" 固件文件的字节数")]),o("li",null,[o("strong",null,"校验和:"),s(" 固件文件的MD5或SHA256值(用于验证完整性)")]),o("li",null,[o("strong",null,"强制升级:"),s(" 即使当前版本与目标版本相同也执行升级")])],-1)),a(h),e[28]||(e[28]=o("h4",null,"OTA状态说明",-1)),a(D,{column:3,bordered:"",size:"small"},{default:t(()=>[a(d,{label:"IDLE"},{default:t(()=>[...e[15]||(e[15]=[s("空闲,未进行升级",-1)])]),_:1}),a(d,{label:"DOWNLOADING"},{default:t(()=>[...e[16]||(e[16]=[s("正在下载固件",-1)])]),_:1}),a(d,{label:"VERIFYING"},{default:t(()=>[...e[17]||(e[17]=[s("正在验证校验和",-1)])]),_:1}),a(d,{label:"FLASHING"},{default:t(()=>[...e[18]||(e[18]=[s("正在写入固件",-1)])]),_:1}),a(d,{label:"SUCCESS"},{default:t(()=>[...e[19]||(e[19]=[s("升级成功",-1)])]),_:1}),a(d,{label:"FAILED"},{default:t(()=>[...e[20]||(e[20]=[s("升级失败",-1)])]),_:1})]),_:1}),a(h),e[29]||(e[29]=o("h4",null,"常见错误码",-1)),a(D,{column:2,bordered:"",size:"small"},{default:t(()=>[a(d,{label:"1021"},{default:t(()=>[...e[21]||(e[21]=[s("已是目标版本",-1)])]),_:1}),a(d,{label:"1022"},{default:t(()=>[...e[22]||(e[22]=[s("校验和验证失败",-1)])]),_:1}),a(d,{label:"1023"},{default:t(()=>[...e[23]||(e[23]=[s("下载失败",-1)])]),_:1}),a(d,{label:"1024"},{default:t(()=>[...e[24]||(e[24]=[s("写入失败",-1)])]),_:1}),a(d,{label:"1025"},{default:t(()=>[...e[25]||(e[25]=[s("存储空间不足",-1)])]),_:1})]),_:1})]),_:1})])}}},ge=ae(_e,[["__scopeId","data-v-9342a8de"]]);export{ge as default};