2 lines
9.7 KiB
JavaScript
2 lines
9.7 KiB
JavaScript
import{_ as P}from"./index-vPnbVvzH.js";import{o as U,be as $,q as f,r as w,v as o,D as i,bg as O,bh as L,s as r,L as c,b6 as T,I as R,u as n,T as _,b7 as Z,F as j,G as q,bm as G,bn as K,O as S,P as X,K as J,b9 as Q,ac as Y,a8 as ee,ba as ae}from"./.pnpm-Dwh6tNxD.js";import{r as W,i as te}from"./index-C9ilrjDr.js";import{U as se}from"./index-DBhmZUba.js";import"./file-CNQVkxcM.js";function le(){return W.get({url:"/setting.desktop_workstation/getConfig"})}function oe(v){return W.post({url:"/setting.desktop_workstation/setConfig",params:v})}const ne={class:"desktop-workstation"},ie={class:"ml-2"},re={class:"w-80"},de={class:"ml-2"},pe={class:"w-80"},ue={class:"w-[480px]"},me={class:"w-[640px]"},ce={class:"text-xl font-medium mb-[20px]"},_e={class:"form-tips ml-3"},fe={class:"w-[640px]"},ge={class:"w-[640px]"},ke={class:"w-[480px]"},ve={class:"flex items-center gap-3"},be={class:"text-tx-secondary text-sm"},xe=U({name:"desktopWorkstation"}),Ue=U({...xe,setup(v){const g=(t="archive")=>({url:"",sha256:"",size:0,filename:"",type:t}),b=ee(),a=ae({enabled:1,latest_version:"",min_version:"",force_update:0,title:"",notes:"",packages:{windows_x64:g("inno_setup"),macos_arm64:g(),macos_x64:g()}}),C=[{key:"windows_x64",label:"Windows 64 位安装包"},{key:"macos_arm64",label:"macOS Apple 芯片安装包"},{key:"macos_x64",label:"macOS Intel 安装包"}],E={latest_version:[{validator:(t,e,s)=>{if(a.enabled===1&&!String(e||"").trim()){s(new Error("启用自动检测时请填写最新版本号"));return}if(e&&!/^\d+(?:\.\d+){0,3}$/.test(e.trim())){s(new Error("版本号须为 x.y.z 数字格式"));return}s()},trigger:["blur","change"]}],min_version:[{validator:(t,e,s)=>{if(e&&!/^\d+(?:\.\d+){0,3}$/.test(e.trim())){s(new Error("版本号须为 x.y.z 数字格式"));return}s()},trigger:["blur"]}]},z=t=>{const e=Number(t)||0;return e<=0?"未填写":e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:e<1024*1024*1024?`${(e/1024/1024).toFixed(1)} MB`:`${(e/1024/1024/1024).toFixed(2)} GB`},k=(t,e)=>{const s=a.packages[t];s.url=String((e==null?void 0:e.url)||""),s.sha256=String((e==null?void 0:e.sha256)||""),s.size=Number((e==null?void 0:e.size)||0),s.filename=String((e==null?void 0:e.filename)||""),s.type=(e==null?void 0:e.type)==="inno_setup"||t==="windows_x64"&&!(e!=null&&e.url)&&!(e!=null&&e.filename)?"inno_setup":"archive"},x=async()=>{var e,s,u;const t=await le();a.enabled=Number(t.enabled??0)?1:0,a.latest_version=t.latest_version||"",a.min_version=t.min_version||"",a.force_update=Number(t.force_update??0)?1:0,a.title=t.title||"",a.notes=t.notes||"",k("windows_x64",(e=t.packages)==null?void 0:e.windows_x64),k("macos_arm64",(s=t.packages)==null?void 0:s.macos_arm64),k("macos_x64",(u=t.packages)==null?void 0:u.macos_x64)},D=async t=>{const e=await t.arrayBuffer(),s=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(s)).map(u=>u.toString(16).padStart(2,"0")).join("")},B=async(t,e)=>{var u,d;const s=e==null?void 0:e.raw;if(s){a.packages[t].filename=s.name||a.packages[t].filename,a.packages[t].size=Number(s.size||0),t==="windows_x64"&&((u=s.name)!=null&&u.toLowerCase().endsWith(".exe"))?a.packages[t].type="inno_setup":(d=s.name)!=null&&d.toLowerCase().endsWith(".zip")&&(a.packages[t].type="archive");try{a.packages[t].sha256=await D(s)}catch(m){console.warn(m),te.msgWarning("浏览器计算 SHA-256 失败,请手动填写校验值")}}},A=(t,e)=>{const s=(e==null?void 0:e.data)||{};s.uri?a.packages[t].url=s.uri:s.url&&(a.packages[t].url=s.url),s.name&&!a.packages[t].filename&&(a.packages[t].filename=s.name)},M=async()=>{var t;await((t=b.value)==null?void 0:t.validate()),await oe({enabled:a.enabled,latest_version:a.latest_version,min_version:a.min_version,force_update:a.force_update,title:a.title,notes:a.notes,packages:{windows_x64:{...a.packages.windows_x64},macos_arm64:{...a.packages.macos_arm64},macos_x64:{...a.packages.macos_x64}}}),await x()};return x(),(t,e)=>{const s=L,u=R,d=T,m=Z,y=O,V=K,N=G,h=J,F=Q,I=P,H=$("perms");return f(),w("div",ne,[o(F,{ref_key:"formRef",ref:b,class:"ls-form",model:n(a),rules:E,"label-width":"140px","scroll-to-error":""},{default:i(()=>[o(y,{shadow:"never",class:"!border-none"},{default:i(()=>[o(s,{type:"info",closable:!1,"show-icon":"",class:"mb-5"},{title:i(()=>[...e[6]||(e[6]=[c("医生工作站升级包",-1)])]),default:i(()=>[e[7]||(e[7]=r("div",{class:"leading-6"},[c(" 桌面端启动后会检测本页发布的版本。请上传或填写与 "),r("code",null,"一键打包"),c(" 产物一致的安装包,并填入打包目录中的 SHA-256。Windows 推荐使用 Setup.exe,用户点击“立即更新”后会自动安装并重启;macOS 继续使用 ZIP。 安装包通常超过 200MB,优先传到对象存储 / CDN 后粘贴地址。 ")],-1))]),_:1}),e[10]||(e[10]=r("div",{class:"text-xl font-medium mb-[20px]"},"升级策略",-1)),o(d,{label:"自动检测",prop:"enabled"},{default:i(()=>[r("div",null,[o(u,{modelValue:n(a).enabled,"onUpdate:modelValue":e[0]||(e[0]=l=>n(a).enabled=l),"active-value":1,"inactive-value":0},null,8,["modelValue"]),r("span",ie,_(n(a).enabled?"开启":"关闭"),1),e[8]||(e[8]=r("div",{class:"form-tips"},"关闭后,桌面端不会提示或强制升级。",-1))])]),_:1}),o(d,{label:"最新版本号",prop:"latest_version"},{default:i(()=>[r("div",re,[o(m,{modelValue:n(a).latest_version,"onUpdate:modelValue":e[1]||(e[1]=l=>n(a).latest_version=l),modelModifiers:{trim:!0},placeholder:"须与 pyproject.toml / 客户端版本一致,例如 0.2.0",maxlength:"20"},null,8,["modelValue"])])]),_:1}),o(d,{label:"强制升级",prop:"force_update"},{default:i(()=>[r("div",null,[o(u,{modelValue:n(a).force_update,"onUpdate:modelValue":e[2]||(e[2]=l=>n(a).force_update=l),"active-value":1,"inactive-value":0},null,8,["modelValue"]),r("span",de,_(n(a).force_update?"开启":"关闭"),1),e[9]||(e[9]=r("div",{class:"form-tips"}," 开启后,低于最新版本且已配置对应平台安装包的客户端必须升级后才能继续使用。 ",-1))])]),_:1}),o(d,{label:"最低可用版本",prop:"min_version"},{default:i(()=>[r("div",pe,[o(m,{modelValue:n(a).min_version,"onUpdate:modelValue":e[3]||(e[3]=l=>n(a).min_version=l),modelModifiers:{trim:!0},placeholder:"可选,例如 0.1.0;低于该版本也会强制升级",maxlength:"20"},null,8,["modelValue"])])]),_:1}),o(d,{label:"更新标题",prop:"title"},{default:i(()=>[r("div",ue,[o(m,{modelValue:n(a).title,"onUpdate:modelValue":e[4]||(e[4]=l=>n(a).title=l),modelModifiers:{trim:!0},placeholder:"例如:医生工作站 0.2.0",maxlength:"80","show-word-limit":""},null,8,["modelValue"])])]),_:1}),o(d,{label:"更新说明",prop:"notes"},{default:i(()=>[r("div",me,[o(m,{modelValue:n(a).notes,"onUpdate:modelValue":e[5]||(e[5]=l=>n(a).notes=l),type:"textarea",rows:6,maxlength:"4000","show-word-limit":"",placeholder:"医生端弹窗中展示的更新说明"},null,8,["modelValue"])])]),_:1})]),_:1}),(f(),w(j,null,q(C,l=>o(y,{key:l.key,shadow:"never",class:"!border-none mt-4"},{default:i(()=>[r("div",ce,_(l.label),1),o(d,{label:"安装包类型"},{default:i(()=>[o(N,{modelValue:n(a).packages[l.key].type,"onUpdate:modelValue":p=>n(a).packages[l.key].type=p,class:"w-80"},{default:i(()=>[o(V,{label:"便携压缩包(ZIP)",value:"archive"}),l.key==="windows_x64"?(f(),S(V,{key:0,label:"Windows 安装程序(Inno Setup EXE)",value:"inno_setup"})):X("",!0)]),_:2},1032,["modelValue","onUpdate:modelValue"]),r("div",_e,_(n(a).packages[l.key].type==="inno_setup"?"推荐:退出客户端后静默安装,必要时显示 Windows 权限确认。":"兼容旧版客户端的 ZIP 覆盖更新。"),1)]),_:2},1024),o(d,{label:"安装包地址"},{default:i(()=>[r("div",fe,[o(m,{modelValue:n(a).packages[l.key].url,"onUpdate:modelValue":p=>n(a).packages[l.key].url=p,modelModifiers:{trim:!0},placeholder:n(a).packages[l.key].type==="inno_setup"?"https://.../DoctorWorkstation-Setup-....exe":"https://...zip 或站内 uploads/file/... 路径"},null,8,["modelValue","onUpdate:modelValue","placeholder"])])]),_:2},1024),o(d,{label:"上传安装包"},{default:i(()=>[r("div",null,[o(se,{type:"file",limit:1,multiple:!1,"show-progress":!0,data:{cid:0},onSuccess:p=>A(l.key,p),onChange:p=>B(l.key,p)},{default:i(()=>[o(h,{type:"primary",plain:""},{default:i(()=>[...e[11]||(e[11]=[c("选择安装包并上传",-1)])]),_:1})]),_:1},8,["onSuccess","onChange"]),e[12]||(e[12]=r("div",{class:"form-tips"}," 仅建议上传较小的包。大文件请先传到对象存储,再把地址和 SHA-256 填到上方。Windows 自动安装程序必须使用 HTTPS 地址并开启证书校验。 ",-1))])]),_:2},1024),o(d,{label:"SHA-256"},{default:i(()=>[r("div",ge,[o(m,{modelValue:n(a).packages[l.key].sha256,"onUpdate:modelValue":p=>n(a).packages[l.key].sha256=p,modelModifiers:{trim:!0},placeholder:"64 位十六进制,来自 SHA256SUMS.txt 或打包生成的 .sha256"},null,8,["modelValue","onUpdate:modelValue"])])]),_:2},1024),o(d,{label:"文件名"},{default:i(()=>[r("div",ke,[o(m,{modelValue:n(a).packages[l.key].filename,"onUpdate:modelValue":p=>n(a).packages[l.key].filename=p,modelModifiers:{trim:!0},placeholder:n(a).packages[l.key].type==="inno_setup"?"DoctorWorkstation-Setup-Windows-x64-0.2.0.exe":"DoctorWorkstation-Windows-x64-0.2.0.zip"},null,8,["modelValue","onUpdate:modelValue","placeholder"])])]),_:2},1024),o(d,{label:"文件大小"},{default:i(()=>[r("div",ve,[o(m,{modelValue:n(a).packages[l.key].size,"onUpdate:modelValue":p=>n(a).packages[l.key].size=p,modelModifiers:{number:!0},class:"w-48",placeholder:"字节"},null,8,["modelValue","onUpdate:modelValue"]),r("span",be,_(z(n(a).packages[l.key].size)),1)])]),_:2},1024)]),_:2},1024)),64))]),_:1},8,["model"]),Y((f(),S(I,null,{default:i(()=>[o(h,{type:"primary",onClick:M},{default:i(()=>[...e[13]||(e[13]=[c("保存",-1)])]),_:1})]),_:1})),[[H,["setting.desktop_workstation/setConfig"]]])])}}});export{Ue as default};
|