Files
zyt/server/public/admin/assets/index-ChHpnJTA.js
T
2026-09-03 18:05:32 +08:00

2 lines
9.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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};