2 lines
9.8 KiB
JavaScript
2 lines
9.8 KiB
JavaScript
import{_ as H}from"./index-BalIyGSx.js";import{o as E,be as $,q as c,r as U,v as o,D as i,bg as L,bh as T,s as r,L as _,b6 as Z,I as G,u as n,T as f,b7 as R,F as j,G as q,bm as K,bn as X,O as v,P as J,ac as C,K as Q,b9 as Y,a8 as ee,ba as ae}from"./.pnpm-BSw4l71J.js";import{r as W,i as te}from"./index-0obBWZiZ.js";import{U as se}from"./index-BqGqHzpB.js";import"./file-DBDqscMe.js";function le(){return W.get({url:"/setting.desktop_workstation/getConfig"})}function oe(b){return W.post({url:"/setting.desktop_workstation/setConfig",params:b})}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=E({name:"desktopWorkstation"}),Ue=E({...xe,setup(b){const g=(t="archive")=>({url:"",sha256:"",size:0,filename:"",type:t}),x=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()}}),z=[{key:"windows_x64",label:"Windows 64 位安装包"},{key:"macos_arm64",label:"macOS Apple 芯片安装包"},{key:"macos_x64",label:"macOS Intel 安装包"}],B={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"]}]},D=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"},y=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)},M=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("")},N=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 M(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)},F=async()=>{var t;await((t=x.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 y()};return y(),(t,e)=>{const s=T,u=G,d=Z,m=R,V=L,h=X,I=K,w=Q,P=Y,O=H,S=$("perms");return c(),U("div",ne,[o(P,{ref_key:"formRef",ref:x,class:"ls-form",model:n(a),rules:B,"label-width":"140px","scroll-to-error":""},{default:i(()=>[o(V,{shadow:"never",class:"!border-none"},{default:i(()=>[o(s,{type:"info",closable:!1,"show-icon":"",class:"mb-5"},{title:i(()=>[...e[6]||(e[6]=[_("医生工作站升级包",-1)])]),default:i(()=>[e[7]||(e[7]=r("div",{class:"leading-6"},[_(" 桌面端启动后会检测本页发布的版本。请上传或填写与 "),r("code",null,"一键打包"),_(" 产物一致的安装包,并填入打包目录中的 SHA-256。Windows 推荐使用 Setup.exe,用户点击“立即更新”后会自动安装并重启;macOS 继续使用 ZIP。 安装包通常超过 200MB,本页上传按钮会直传到已配置的腾讯云 COS;也可以 自行上传到其他对象存储 / 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,f(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,f(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}),(c(),U(j,null,q(z,l=>o(V,{key:l.key,shadow:"never",class:"!border-none mt-4"},{default:i(()=>[r("div",ce,f(l.label),1),o(d,{label:"安装包类型"},{default:i(()=>[o(I,{modelValue:n(a).packages[l.key].type,"onUpdate:modelValue":p=>n(a).packages[l.key].type=p,class:"w-80"},{default:i(()=>[o(h,{label:"便携压缩包(ZIP)",value:"archive"}),l.key==="windows_x64"?(c(),v(h,{key:0,label:"Windows 安装程序(Inno Setup EXE)",value:"inno_setup"})):J("",!0)]),_:2},1032,["modelValue","onUpdate:modelValue"]),r("div",_e,f(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,[C((c(),v(se,{type:"desktop_package",direct:"",limit:1,multiple:!1,"show-progress":!0,data:{cid:0},onSuccess:p=>A(l.key,p),onChange:p=>N(l.key,p)},{default:i(()=>[o(w,{type:"primary",plain:""},{default:i(()=>[...e[11]||(e[11]=[_("选择安装包并上传",-1)])]),_:1})]),_:1},8,["onSuccess","onChange"])),[[S,["setting.desktop_workstation/setConfig"]]]),e[12]||(e[12]=r("div",{class:"form-tips"}," 安装包将分片直传腾讯云 COS,不经过业务服务器(支持 EXE / ZIP,最大 2GB)。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,f(D(n(a).packages[l.key].size)),1)])]),_:2},1024)]),_:2},1024)),64))]),_:1},8,["model"]),C((c(),v(O,null,{default:i(()=>[o(w,{type:"primary",onClick:F},{default:i(()=>[...e[13]||(e[13]=[_("保存",-1)])]),_:1})]),_:1})),[[S,["setting.desktop_workstation/setConfig"]]])])}}});export{Ue as default};
|