2 lines
11 KiB
JavaScript
2 lines
11 KiB
JavaScript
import{_ as O}from"./index-CBSnRU2W.js";import{J as $,K as Z,B as j,g as G,C as L,P as R,Q as T,i as q,D as J}from"./element-plus-CWHdHlgZ.js";import{r as E,j as K}from"./index-MKPKssyT.js";import{U as Q}from"./index-BOOuIgrt.js";import{f as W,as as X,ak as c,I as U,a as l,aN as i,J as r,O as _,F as Y,ap as ee,G as v,H as te,aP as C}from"./@vue/runtime-core-C6bnekPw.js";import{y as n,q as ae,r as oe}from"./@vue/reactivity-DiY1c2vO.js";import{Q as f}from"./@vue/shared-mAAVTE9n.js";import"./@vue/runtime-dom-DDAG46FW.js";import"./lodash-D3kF6u-c.js";import"./@element-plus/icons-vue-CbYn5zW9.js";import"./lodash-es-C2A-Pj28.js";import"./@popperjs/core-C5az9QE8.js";import"./dayjs-DG77mNTn.js";import"./@ctrl/tinycolor-BuyEbX8F.js";import"./async-validator-CFA_igpM.js";import"./normalize-wheel-es-BQoi3Ox2.js";import"./jspdf-BsthCvR5.js";import"./@babel/runtime-BanGtE2-.js";import"./fflate-_ayOYiT1.js";import"./vue-router-QlpZ4wdW.js";import"./pinia-B8cvXbiZ.js";import"./axios-C80V62Fs.js";import"./@vueuse/core-1S4fJlii.js";import"./@vueuse/shared-Cl3lVqjz.js";import"./css-color-function-DI01JAaZ.js";import"./balanced-match-BdS7OldZ.js";import"./color-B2zxaWkI.js";import"./clone-DBZ6_OiU.js";import"./color-convert-OrFsTA_V.js";import"./color-name-Dju3oUBS.js";import"./color-string-pUQDDJII.js";import"./ms-CzQ2E3wO.js";import"./vue-clipboard3-DByT_rEQ.js";import"./clipboard-CHgxszqY.js";import"./echarts-CNLwa9wG.js";import"./tslib-BDyQ-Jie.js";import"./zrender-DRNXw7y3.js";import"./highlight.js-Bxt7hFFy.js";import"./@highlightjs/vue-plugin-C4onkBvW.js";import"./cos-js-sdk-v5-DSMN0LUT.js";import"./file-pgRi9w1O.js";function se(){return E.get({url:"/setting.desktop_workstation/getConfig"})}function le(x){return E.post({url:"/setting.desktop_workstation/setConfig",params:x})}const ne={class:"desktop-workstation"},ie={class:"ml-2"},re={class:"w-80"},de={class:"ml-2"},pe={class:"w-80"},me={class:"w-[480px]"},ue={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"},xe={class:"text-tx-secondary text-sm"},ye=W({name:"desktopWorkstation"}),rt=W({...ye,setup(x){const g=(a="archive")=>({url:"",sha256:"",size:0,filename:"",type:a}),y=ae(),t=oe({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:(a,e,o)=>{if(t.enabled===1&&!String(e||"").trim()){o(new Error("启用自动检测时请填写最新版本号"));return}if(e&&!/^\d+(?:\.\d+){0,3}$/.test(e.trim())){o(new Error("版本号须为 x.y.z 数字格式"));return}o()},trigger:["blur","change"]}],min_version:[{validator:(a,e,o)=>{if(e&&!/^\d+(?:\.\d+){0,3}$/.test(e.trim())){o(new Error("版本号须为 x.y.z 数字格式"));return}o()},trigger:["blur"]}]},D=a=>{const e=Number(a)||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=(a,e)=>{const o=t.packages[a];o.url=String((e==null?void 0:e.url)||""),o.sha256=String((e==null?void 0:e.sha256)||""),o.size=Number((e==null?void 0:e.size)||0),o.filename=String((e==null?void 0:e.filename)||""),o.type=(e==null?void 0:e.type)==="inno_setup"||a==="windows_x64"&&!(e!=null&&e.url)&&!(e!=null&&e.filename)?"inno_setup":"archive"},b=async()=>{var e,o,m;const a=await se();t.enabled=Number(a.enabled??0)?1:0,t.latest_version=a.latest_version||"",t.min_version=a.min_version||"",t.force_update=Number(a.force_update??0)?1:0,t.title=a.title||"",t.notes=a.notes||"",k("windows_x64",(e=a.packages)==null?void 0:e.windows_x64),k("macos_arm64",(o=a.packages)==null?void 0:o.macos_arm64),k("macos_x64",(m=a.packages)==null?void 0:m.macos_x64)},N=async a=>{const e=await a.arrayBuffer(),o=await crypto.subtle.digest("SHA-256",e);return Array.from(new Uint8Array(o)).map(m=>m.toString(16).padStart(2,"0")).join("")},M=async(a,e)=>{var m,d;const o=e==null?void 0:e.raw;if(o){t.packages[a].filename=o.name||t.packages[a].filename,t.packages[a].size=Number(o.size||0),a==="windows_x64"&&((m=o.name)!=null&&m.toLowerCase().endsWith(".exe"))?t.packages[a].type="inno_setup":(d=o.name)!=null&&d.toLowerCase().endsWith(".zip")&&(t.packages[a].type="archive");try{t.packages[a].sha256=await N(o)}catch(u){console.warn(u),K.msgWarning("浏览器计算 SHA-256 失败,请手动填写校验值")}}},A=(a,e)=>{const o=(e==null?void 0:e.data)||{};o.uri?t.packages[a].url=o.uri:o.url&&(t.packages[a].url=o.url),o.name&&!t.packages[a].filename&&(t.packages[a].filename=o.name)},F=async()=>{var a;await((a=y.value)==null?void 0:a.validate()),await le({enabled:t.enabled,latest_version:t.latest_version,min_version:t.min_version,force_update:t.force_update,title:t.title,notes:t.notes,packages:{windows_x64:{...t.packages.windows_x64},macos_arm64:{...t.packages.macos_arm64},macos_x64:{...t.packages.macos_x64}}}),await b()};return b(),(a,e)=>{const o=Z,m=G,d=j,u=L,V=$,h=T,I=R,w=q,P=J,H=O,S=X("perms");return c(),U("div",ne,[l(P,{ref_key:"formRef",ref:y,class:"ls-form",model:n(t),rules:B,"label-width":"140px","scroll-to-error":""},{default:i(()=>[l(V,{shadow:"never",class:"!border-none"},{default:i(()=>[l(o,{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)),l(d,{label:"自动检测",prop:"enabled"},{default:i(()=>[r("div",null,[l(m,{modelValue:n(t).enabled,"onUpdate:modelValue":e[0]||(e[0]=s=>n(t).enabled=s),"active-value":1,"inactive-value":0},null,8,["modelValue"]),r("span",ie,f(n(t).enabled?"开启":"关闭"),1),e[8]||(e[8]=r("div",{class:"form-tips"},"关闭后,桌面端不会提示或强制升级。",-1))])]),_:1}),l(d,{label:"最新版本号",prop:"latest_version"},{default:i(()=>[r("div",re,[l(u,{modelValue:n(t).latest_version,"onUpdate:modelValue":e[1]||(e[1]=s=>n(t).latest_version=s),modelModifiers:{trim:!0},placeholder:"须与 pyproject.toml / 客户端版本一致,例如 0.2.0",maxlength:"20"},null,8,["modelValue"])])]),_:1}),l(d,{label:"强制升级",prop:"force_update"},{default:i(()=>[r("div",null,[l(m,{modelValue:n(t).force_update,"onUpdate:modelValue":e[2]||(e[2]=s=>n(t).force_update=s),"active-value":1,"inactive-value":0},null,8,["modelValue"]),r("span",de,f(n(t).force_update?"开启":"关闭"),1),e[9]||(e[9]=r("div",{class:"form-tips"}," 开启后,低于最新版本且已配置对应平台安装包的客户端必须升级后才能继续使用。 ",-1))])]),_:1}),l(d,{label:"最低可用版本",prop:"min_version"},{default:i(()=>[r("div",pe,[l(u,{modelValue:n(t).min_version,"onUpdate:modelValue":e[3]||(e[3]=s=>n(t).min_version=s),modelModifiers:{trim:!0},placeholder:"可选,例如 0.1.0;低于该版本也会强制升级",maxlength:"20"},null,8,["modelValue"])])]),_:1}),l(d,{label:"更新标题",prop:"title"},{default:i(()=>[r("div",me,[l(u,{modelValue:n(t).title,"onUpdate:modelValue":e[4]||(e[4]=s=>n(t).title=s),modelModifiers:{trim:!0},placeholder:"例如:医生工作站 0.2.0",maxlength:"80","show-word-limit":""},null,8,["modelValue"])])]),_:1}),l(d,{label:"更新说明",prop:"notes"},{default:i(()=>[r("div",ue,[l(u,{modelValue:n(t).notes,"onUpdate:modelValue":e[5]||(e[5]=s=>n(t).notes=s),type:"textarea",rows:6,maxlength:"4000","show-word-limit":"",placeholder:"医生端弹窗中展示的更新说明"},null,8,["modelValue"])])]),_:1})]),_:1}),(c(),U(Y,null,ee(z,s=>l(V,{key:s.key,shadow:"never",class:"!border-none mt-4"},{default:i(()=>[r("div",ce,f(s.label),1),l(d,{label:"安装包类型"},{default:i(()=>[l(I,{modelValue:n(t).packages[s.key].type,"onUpdate:modelValue":p=>n(t).packages[s.key].type=p,class:"w-80"},{default:i(()=>[l(h,{label:"便携压缩包(ZIP)",value:"archive"}),s.key==="windows_x64"?(c(),v(h,{key:0,label:"Windows 安装程序(Inno Setup EXE)",value:"inno_setup"})):te("",!0)]),_:2},1032,["modelValue","onUpdate:modelValue"]),r("div",_e,f(n(t).packages[s.key].type==="inno_setup"?"推荐:退出客户端后静默安装,必要时显示 Windows 权限确认。":"兼容旧版客户端的 ZIP 覆盖更新。"),1)]),_:2},1024),l(d,{label:"安装包地址"},{default:i(()=>[r("div",fe,[l(u,{modelValue:n(t).packages[s.key].url,"onUpdate:modelValue":p=>n(t).packages[s.key].url=p,modelModifiers:{trim:!0},placeholder:n(t).packages[s.key].type==="inno_setup"?"https://.../DoctorWorkstation-Setup-....exe":"https://...zip 或站内 uploads/file/... 路径"},null,8,["modelValue","onUpdate:modelValue","placeholder"])])]),_:2},1024),l(d,{label:"上传安装包"},{default:i(()=>[r("div",null,[C((c(),v(Q,{type:"desktop_package",direct:"",limit:1,multiple:!1,"show-progress":!0,data:{cid:0},onSuccess:p=>A(s.key,p),onChange:p=>M(s.key,p)},{default:i(()=>[l(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),l(d,{label:"SHA-256"},{default:i(()=>[r("div",ge,[l(u,{modelValue:n(t).packages[s.key].sha256,"onUpdate:modelValue":p=>n(t).packages[s.key].sha256=p,modelModifiers:{trim:!0},placeholder:"64 位十六进制,来自 SHA256SUMS.txt 或打包生成的 .sha256"},null,8,["modelValue","onUpdate:modelValue"])])]),_:2},1024),l(d,{label:"文件名"},{default:i(()=>[r("div",ke,[l(u,{modelValue:n(t).packages[s.key].filename,"onUpdate:modelValue":p=>n(t).packages[s.key].filename=p,modelModifiers:{trim:!0},placeholder:n(t).packages[s.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),l(d,{label:"文件大小"},{default:i(()=>[r("div",ve,[l(u,{modelValue:n(t).packages[s.key].size,"onUpdate:modelValue":p=>n(t).packages[s.key].size=p,modelModifiers:{number:!0},class:"w-48",placeholder:"字节"},null,8,["modelValue","onUpdate:modelValue"]),r("span",xe,f(D(n(t).packages[s.key].size)),1)])]),_:2},1024)]),_:2},1024)),64))]),_:1},8,["model"]),C((c(),v(H,null,{default:i(()=>[l(w,{type:"primary",onClick:F},{default:i(()=>[...e[13]||(e[13]=[_("保存",-1)])]),_:1})]),_:1})),[[S,["setting.desktop_workstation/setConfig"]]])])}}});export{rt as default};
|