1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
import{D as e,E as t,On as n,_ as r,b as i,bt as a,ct as o,g as s,gn as c,k as ee,mt as l,o as u,qt as d,tr as f,v as p,vn as m,y as h}from"./runtime-core.esm-bundler-DkysjgTd.js";import{t as g}from"./objectSpread2-BmonrgTA.js";import{n as _}from"./objectWithoutProperties-BjoYlK0I.js";import{t as te}from"./use-access-ObRBpYsT.js";import{t as ne}from"./table-EWhwMmEC.js";import{n as v,t as re}from"./form-CZK1ilUa.js";import{n as y,t as b}from"./select-DyNDAEL2.js";import{t as ie}from"./upload-VFOuMjmy.js";import{T as x,g as ae,h as oe,j as se}from"./console-CQVAqHCG.js";import{a as S}from"./config-provider-D1kcLCP5.js";import{t as ce}from"./alert-CkUknOsQ.js";import{t as C}from"./button-B2y2NpJm.js";import{t as w}from"./card-ZuLu6CvW.js";import{t as T}from"./tag-BFecLZmQ.js";import{n as E,t as le}from"./descriptions-BP4B3brJ.js";import{r as ue,t as D}from"./input-DgEff0DC.js";import{t as O}from"./input-number-B39v8Wj_.js";import{t as k}from"./progress-Br8rQILc.js";import{t as A}from"./switch-CtSw_Hgg.js";var de={class:`p-5`},fe={class:`break-all text-xs`},pe={key:0,class:`mt-3 whitespace-pre-wrap rounded bg-gray-50 p-3 text-xs dark:bg-gray-800`},me={class:`flex flex-wrap items-center gap-3`},he={key:1,class:`text-xs text-gray-400`},ge={class:`grid grid-cols-1 gap-x-6 md:grid-cols-3`},j={class:`grid grid-cols-1 gap-5 md:grid-cols-2`},M={class:`flex flex-wrap gap-5 pt-1`},N={class:`mb-3 flex flex-wrap gap-2`},P={key:0,class:`mt-1 max-w-80 text-xs text-red-500`},F={key:0,class:`text-sm text-gray-400`},I={class:`text-sm`},_e={class:`ml-auto text-xs text-gray-400`},L=ee({__name:`release`,setup(ee){let{hasAccessByCodes:L}=te(),R=s(()=>L([`release:write`])),z=m(!1),B=m(!1),V=m(!1),H=m(0),U=m([]),W=c({counts:{},items:[]}),G=c({latest_version:``,download_url:``,release_notes:``,force_upgrade:!1,auto_install:!1,package_sha256:``,package_size:0,signature_required:!1,release_channel:`stable`,rollout_percent:100,status:`published`,updated_at:``,updated_by:``}),K=c({latest_version:``,download_url:``,release_notes:``,force_upgrade:!1,auto_install:!0,package_sha256:``,package_size:0,signature_required:!1,release_channel:`stable`,rollout_percent:100,status:`published`}),q=s(()=>/^v?\d+\.\d+\.\d+$/.test(K.latest_version.trim())),ve=s(()=>{let e=K.download_url.trim();return!e||/^https?:\/\/.+/.test(e)||e.startsWith(`/api/v2/desktop/update/packages/`)||e.startsWith(`/api/v2/desktop/update/cos-packages/`)}),J=s(()=>!!(K.download_url&&K.package_sha256&&K.package_size));function Y(e){return e?e>=1048576?`${(e/1024/1024).toFixed(1)} MB`:e>=1024?`${(e/1024).toFixed(1)} KB`:`${e} B`:`—`}function ye(e){return{available:`发现更新`,downloading:`下载中`,downloaded:`待安装`,installing:`安装中`,installed:`已完成`,failed:`失败`,deferred:`已推迟`}[e]||e}function X(){return Z.apply(this,arguments)}function Z(){return Z=_(function*(){z.value=!0;try{let[e,t]=yield Promise.all([oe(),ae()]);Object.assign(G,e),Object.assign(K,{latest_version:e.latest_version,download_url:e.download_url,release_notes:e.release_notes,force_upgrade:e.force_upgrade,auto_install:e.auto_install,package_sha256:e.package_sha256,package_size:e.package_size,signature_required:e.signature_required,release_channel:e.release_channel,rollout_percent:e.rollout_percent,status:e.status}),U.value=t.history,Object.assign(W,t.reports)}finally{z.value=!1}}),Z.apply(this,arguments)}function be(e){return Q.apply(this,arguments)}function Q(){return Q=_(function*(e){V.value=!0,H.value=0;try{let t=yield se(e,e=>{H.value=e});K.download_url=t.download_url,K.package_sha256=t.package_sha256,K.package_size=t.package_size,H.value=100,S.success(`安装包已直传腾讯 COS,并完成 SHA256 校验`)}catch(e){S.error(e instanceof Error?e.message:`安装包上传失败`)}finally{V.value=!1}return!1}),Q.apply(this,arguments)}function xe(){return $.apply(this,arguments)}function $(){return $=_(function*(){if(!q.value){S.warning(`版本号格式应为 1.0.0`);return}if(!ve.value){S.warning(`下载地址必须是完整的 HTTP/HTTPS 地址`);return}if(K.force_upgrade&&!K.download_url){S.warning(`开启强制升级前必须上传安装包`);return}if(K.auto_install&&!J.value){S.warning(`自动安装必须先上传安装包并生成 SHA256`);return}B.value=!0;try{let e=yield x(g({},K));S.success(`已发布 v${e.latest_version}`),yield X()}finally{B.value=!1}}),$.apply(this,arguments)}let Se=[{title:`账号/设备`,dataIndex:`device`,key:`device`},{title:`版本`,dataIndex:`version`,key:`version`},{title:`状态`,dataIndex:`status`,key:`status`},{title:`进度`,dataIndex:`progress`,key:`progress`},{title:`更新时间`,dataIndex:`updated_at`,key:`updated_at`}],Ce=s(()=>W.items.map((e,t)=>g(g({},e),{},{key:`${e.device_id}-${e.target_version}-${t}`,device:`${e.nickname||e.zyt_sn||`客户端`} / ${e.device_id}`,version:`${e.current_version||`—`} → ${e.target_version}`})));return o(X),(o,s)=>(l(),i(`div`,de,[e(n(ce),{class:`mb-4`,type:`success`,"show-icon":``,message:`安装包直传腾讯 COS`,description:`浏览器先在本机计算 SHA256,再分块直传 COS;安装包不经过管理端服务器。COS 校验完成后,客户端会按发布策略安全下载和安装。`}),e(n(w),{title:`当前版本策略`,class:`mb-4`,loading:z.value},{default:d(()=>[e(n(le),{column:3,size:`small`,bordered:``},{default:d(()=>[e(n(E),{label:`最新版本`},{default:d(()=>[e(n(T),{color:`blue`},{default:d(()=>[t(`v`+f(G.latest_version||`—`),1)]),_:1})]),_:1}),e(n(E),{label:`发布状态`},{default:d(()=>[e(n(T),{color:G.status===`published`?`green`:`orange`},{default:d(()=>[t(f(G.status===`published`?`发布中`:`已暂停`),1)]),_:1},8,[`color`])]),_:1}),e(n(E),{label:`升级方式`},{default:d(()=>[e(n(T),{color:G.force_upgrade?`red`:G.auto_install?`purple`:`default`},{default:d(()=>[t(f(G.force_upgrade?`强制升级`:G.auto_install?`自动升级`:`提示升级`),1)]),_:1},8,[`color`])]),_:1}),e(n(E),{label:`发布渠道`},{default:d(()=>[t(f(G.release_channel),1)]),_:1}),e(n(E),{label:`灰度比例`},{default:d(()=>[t(f(G.rollout_percent)+`%`,1)]),_:1}),e(n(E),{label:`安装包`},{default:d(()=>[t(f(Y(G.package_size)),1)]),_:1}),e(n(E),{label:`SHA256`,span:3},{default:d(()=>[r(`code`,fe,f(G.package_sha256||`未配置`),1)]),_:1}),e(n(E),{label:`最后修改`},{default:d(()=>[t(f(G.updated_by||`—`),1)]),_:1}),e(n(E),{label:`时间`,span:2},{default:d(()=>[t(f(G.updated_at||`—`),1)]),_:1})]),_:1}),G.release_notes?(l(),i(`p`,pe,f(G.release_notes),1)):h(``,!0)]),_:1},8,[`loading`]),e(n(w),{title:`发布新版本`,class:`mb-4`},{default:d(()=>[e(n(re),{model:K,layout:`vertical`},{default:d(()=>[e(n(v),{label:`Windows 安装包`},{default:d(()=>[r(`div`,me,[e(n(ie),{accept:`.exe`,"before-upload":be,disabled:!R.value||V.value,"show-upload-list":!1},{default:d(()=>[e(n(C),{loading:V.value,disabled:!R.value},{default:d(()=>[t(f(V.value?`正在直传 COS`:`选择并直传 COS`),1)]),_:1},8,[`loading`,`disabled`])]),_:1},8,[`disabled`]),J.value?(l(),p(n(T),{key:0,color:`green`},{default:d(()=>[t(` 已就绪 · `+f(Y(K.package_size)),1)]),_:1})):(l(),i(`span`,he,`上传后自动填写下载地址、大小和 SHA256`))]),V.value?(l(),p(n(k),{key:0,class:`mt-2`,percent:H.value},null,8,[`percent`])):h(``,!0)]),_:1}),r(`div`,ge,[e(n(v),{label:`版本号`,"validate-status":K.latest_version&&!q.value?`error`:void 0,help:K.latest_version&&!q.value?`格式应为 1.0.0`:``},{default:d(()=>[e(n(D),{value:K.latest_version,"onUpdate:value":s[0]||(s[0]=e=>K.latest_version=e),disabled:!R.value,placeholder:`1.4.0`},null,8,[`value`,`disabled`])]),_:1},8,[`validate-status`,`help`]),e(n(v),{label:`发布渠道`},{default:d(()=>[e(n(b),{value:K.release_channel,"onUpdate:value":s[1]||(s[1]=e=>K.release_channel=e),disabled:!R.value},{default:d(()=>[e(n(y),{value:`stable`},{default:d(()=>[...s[10]||(s[10]=[t(`正式版 stable`,-1)])]),_:1}),e(n(y),{value:`beta`},{default:d(()=>[...s[11]||(s[11]=[t(`测试版 beta`,-1)])]),_:1})]),_:1},8,[`value`,`disabled`])]),_:1}),e(n(v),{label:`灰度比例`},{default:d(()=>[e(n(O),{value:K.rollout_percent,"onUpdate:value":s[2]||(s[2]=e=>K.rollout_percent=e),min:1,max:100,disabled:!R.value,class:`w-full`,"addon-after":`%`},null,8,[`value`,`disabled`])]),_:1})]),e(n(v),{label:`下载地址`},{default:d(()=>[e(n(D),{value:K.download_url,"onUpdate:value":s[3]||(s[3]=e=>K.download_url=e),disabled:!R.value,placeholder:`上传安装包后自动填写,也可以填写 HTTPS 地址`},null,8,[`value`,`disabled`])]),_:1}),e(n(v),{label:`SHA256`},{default:d(()=>[e(n(D),{value:K.package_sha256,"onUpdate:value":s[4]||(s[4]=e=>K.package_sha256=e),disabled:!R.value,placeholder:`上传安装包后自动计算`},null,8,[`value`,`disabled`])]),_:1}),r(`div`,j,[e(n(v),{label:`发布状态`},{default:d(()=>[e(n(b),{value:K.status,"onUpdate:value":s[5]||(s[5]=e=>K.status=e),disabled:!R.value},{default:d(()=>[e(n(y),{value:`published`},{default:d(()=>[...s[12]||(s[12]=[t(`立即发布`,-1)])]),_:1}),e(n(y),{value:`paused`},{default:d(()=>[...s[13]||(s[13]=[t(`暂停分发`,-1)])]),_:1})]),_:1},8,[`value`,`disabled`])]),_:1}),e(n(v),{label:`安全与安装策略`},{default:d(()=>[r(`div`,M,[e(n(A),{checked:K.auto_install,"onUpdate:checked":s[6]||(s[6]=e=>K.auto_install=e),disabled:!R.value,"checked-children":`自动`,"un-checked-children":`提示`},null,8,[`checked`,`disabled`]),e(n(A),{checked:K.force_upgrade,"onUpdate:checked":s[7]||(s[7]=e=>K.force_upgrade=e),disabled:!R.value,"checked-children":`强制`,"un-checked-children":`非强制`},null,8,[`checked`,`disabled`]),e(n(A),{checked:K.signature_required,"onUpdate:checked":s[8]||(s[8]=e=>K.signature_required=e),disabled:!R.value,"checked-children":`验签`,"un-checked-children":`仅哈希`},null,8,[`checked`,`disabled`])])]),_:1})]),e(n(v),{label:`更新说明(不超过 4000 字)`},{default:d(()=>[e(n(ue),{value:K.release_notes,"onUpdate:value":s[9]||(s[9]=e=>K.release_notes=e),rows:5,disabled:!R.value,maxlength:4e3,"show-count":``},null,8,[`value`,`disabled`])]),_:1}),R.value?(l(),p(n(C),{key:0,type:`primary`,size:`large`,loading:B.value,onClick:xe},{default:d(()=>[...s[14]||(s[14]=[t(` 发布版本 `,-1)])]),_:1},8,[`loading`])):h(``,!0)]),_:1},8,[`model`])]),_:1}),e(n(w),{title:`客户端升级进度`,class:`mb-4`},{default:d(()=>[r(`div`,N,[e(n(T),{color:`blue`},{default:d(()=>[t(`下载中 `+f(W.counts.downloading||0),1)]),_:1}),e(n(T),{color:`orange`},{default:d(()=>[t(`待安装 `+f(W.counts.downloaded||0),1)]),_:1}),e(n(T),{color:`purple`},{default:d(()=>[t(`安装中 `+f(W.counts.installing||0),1)]),_:1}),e(n(T),{color:`green`},{default:d(()=>[t(`已完成 `+f(W.counts.installed||0),1)]),_:1}),e(n(T),{color:`red`},{default:d(()=>[t(`失败 `+f(W.counts.failed||0),1)]),_:1})]),e(n(ne),{columns:Se,"data-source":Ce.value,size:`small`,pagination:{pageSize:8}},{bodyCell:d(({column:r,record:a})=>[r.key===`status`?(l(),i(u,{key:0},[e(n(T),{color:a.status===`installed`?`green`:a.status===`failed`?`red`:`blue`},{default:d(()=>[t(f(ye(a.status)),1)]),_:2},1032,[`color`]),a.error?(l(),i(`div`,P,f(a.error),1)):h(``,!0)],64)):r.key===`progress`?(l(),p(n(k),{key:1,percent:a.progress,size:`small`},null,8,[`percent`])):h(``,!0)]),_:1},8,[`data-source`])]),_:1}),e(n(w),{title:`最近发布记录`},{default:d(()=>[U.value.length?h(``,!0):(l(),i(`div`,F,`暂无发布记录`)),(l(!0),i(u,null,a(U.value,(a,o)=>(l(),i(`div`,{key:`${a.latest_version}-${o}`,class:`mb-2 flex flex-wrap items-center gap-3 rounded border border-gray-200 p-3 last:mb-0 dark:border-gray-700`},[e(n(T),{color:`blue`},{default:d(()=>[t(`v`+f(a.latest_version),1)]),_:2},1024),r(`span`,I,f(a.release_notes||`没有更新说明`),1),r(`span`,_e,f(a.updated_by)+` · `+f(a.updated_at),1)]))),128))]),_:1})]))}});export{L as default}; |