1 line
8.3 KiB
JavaScript
1 line
8.3 KiB
JavaScript
import{Ar as e,Dr as t,Er as n,I as r,L as i,Nr as a,Or as o,Tr as s,Wr as c,b as l,br as u,jr as d,li as f,qr as p,ri as m,ui as h,v as g,wr as _,xi as v}from"./index-a0fi5f-0.js";import{i as y,n as b,o as x,t as S}from"./VCard-BwwttBcf.js";import{t as C}from"./VTextField-GUQr1tUN.js";import{t as w}from"./VDialog-BFQGuuXw.js";import{t as T}from"./VForm-CAvEgM-c.js";import{t as E}from"./VSwitch-CIruBPax.js";import{C as D,D as O,E as k,T as A,n as j,t as M,w as N}from"./btpanel-BsL25ffd.js";import{n as P,t as F}from"./useBtPanelPageLoad-CV_unS2-.js";var ee={key:0,class:`text-caption text-medium-emphasis mb-3`},te={class:`d-flex flex-wrap align-center ga-2 mb-3`},ne={key:0,class:`text-caption text-error mb-2`},I={key:1,class:`text-caption text-medium-emphasis mb-3`},L=a({name:`BtPanelSettingsPage`,__name:`BtPanelSettingsPage`,setup(a){let L=h(!1),R=h(!1),z=h(!1),B=h(!1),V=h(!1),H=h(!1),U=h(!1),W=h(null),G=h(null),K=h([]),q=f({base_url:``,api_key:``,verify_ssl:!1,auto_bootstrap:!0}),J=f({bt_panel_source_ip:``,bt_panel_auto_bootstrap_enabled:!0}),Y=h(!1),X={pending:`等待获取`,installing:`宝塔安装中`,ready:`已完成`,failed:`SSH 失败(已停止)`,disabled:`已关闭自动获取`},re=_(()=>{let e=W.value?.bootstrap_state;return e?X[e]??e:`未启用`}),ie=_(()=>{let e=W.value?.bt_installed;return e===!0?`已安装宝塔`:e===!1?`未检测到宝塔目录`:`未检测(引导中或手动配置)`}),ae=_(()=>{let e=W.value?.bt_installed;return e===!0?`success`:e===!1?`warning`:`default`}),oe=_(()=>{let e=W.value?.bootstrap_state;return e===`ready`||W.value?.configured?`success`:e===`failed`?`error`:e===`installing`?`warning`:`default`}),Z=_(()=>K.value.filter(e=>!e.configured).map(e=>e.id));async function Q(e,t=!1){L.value=!0;try{W.value=await D(e,{refreshBtInstalled:t}),q.base_url=W.value.base_url??``,q.verify_ssl=W.value.verify_ssl,q.auto_bootstrap=W.value.auto_bootstrap===!0,q.api_key=``}catch(e){window.$snackbar?.(e instanceof Error?e.message:`加载失败`,`error`)}finally{L.value=!1}}F(async e=>{await Q(e)});async function $(e){B.value=!0;try{W.value=await D(e,{refreshBtInstalled:!0})}catch(e){window.$snackbar?.(e instanceof Error?e.message:`检测失败`,`error`)}finally{B.value=!1}}async function se(){try{G.value=await N(),J.bt_panel_source_ip=G.value.bt_panel_source_ip??``,J.bt_panel_auto_bootstrap_enabled=G.value.bt_panel_auto_bootstrap_enabled,K.value=await A()}catch(e){window.$snackbar?.(e instanceof Error?e.message:`加载全局设置失败`,`error`)}finally{Y.value=!0}}c(()=>{se()});async function ce(e){R.value=!0;try{let t={base_url:q.base_url,verify_ssl:q.verify_ssl,auto_bootstrap:q.auto_bootstrap};q.api_key.trim()&&(t.api_key=q.api_key.trim()),W.value=await k(e,t),q.api_key=``,window.$snackbar?.(`已保存`,`success`)}catch(e){window.$snackbar?.(e instanceof Error?e.message:`保存失败`,`error`)}finally{R.value=!1}}async function le(){V.value=!0;try{G.value=await O({bt_panel_source_ip:J.bt_panel_source_ip,bt_panel_auto_bootstrap_enabled:J.bt_panel_auto_bootstrap_enabled}),window.$snackbar?.(`全局设置已保存`,`success`)}catch(e){window.$snackbar?.(e instanceof Error?e.message:`保存失败`,`error`)}finally{V.value=!1}}async function ue(e){z.value=!0;try{W.value=await j(e),W.value.ok?(q.base_url=W.value.base_url??``,window.$snackbar?.(`宝塔 API 已自动配置`,`success`)):window.$snackbar?.(W.value.error??W.value.bootstrap_last_error??`获取失败`,`warning`),await Q(e)}catch(e){window.$snackbar?.(e instanceof Error?e.message:`获取失败`,`error`)}finally{z.value=!1}}async function de(){if(Z.value.length){H.value=!0;try{let e=await M([],{allUnconfigured:!0});U.value=!1,window.$snackbar?.(`已启动批量任务 #${e.job_id}`,`success`)}catch(e){window.$snackbar?.(e instanceof Error?e.message:`批量任务启动失败`,`error`)}finally{H.value=!1}}}return(a,c)=>(p(),n(P,{title:`宝塔 · 连接配置`,subtitle:`SSH 自动获取 API 或手动填写面板地址与密钥`,"require-server":!1},{default:m(({serverId:a})=>[d(S,{"max-width":`720`,variant:`outlined`,rounded:`lg`,class:`mb-4`},{default:m(()=>[d(y,{class:`text-subtitle-1`},{default:m(()=>[...c[9]||=[e(`全局`,-1)]]),_:1}),d(b,null,{default:m(()=>[d(C,{modelValue:J.bt_panel_source_ip,"onUpdate:modelValue":c[0]||=e=>J.bt_panel_source_ip=e,label:`中心调用 IP(API 白名单)`,hint:`留空则解析系统 api_base_url DNS`,"persistent-hint":``,class:`mb-2`},null,8,[`modelValue`]),d(E,{modelValue:J.bt_panel_auto_bootstrap_enabled,"onUpdate:modelValue":c[1]||=e=>J.bt_panel_auto_bootstrap_enabled=e,label:`新服务器自动 SSH 获取(每 5 分钟重试)`,color:`primary`,"hide-details":``,class:`mb-2`},null,8,[`modelValue`]),G.value?.resolved_center_ip?(p(),o(`div`,ee,` 当前生效白名单 IP:`+v(G.value.resolved_center_ip),1)):t(``,!0),d(i,{color:`primary`,variant:`tonal`,loading:V.value,onClick:le},{default:m(()=>[...c[10]||=[e(` 保存全局设置 `,-1)]]),_:1},8,[`loading`]),d(i,{class:`ml-2`,color:`secondary`,variant:`outlined`,disabled:!Z.value.length,onClick:c[2]||=e=>U.value=!0},{default:m(()=>[e(` 批量初始化未配置(`+v(Z.value.length)+`) `,1)]),_:1},8,[`disabled`]),Y.value&&!K.value.length?(p(),n(r,{key:1,type:`warning`,variant:`tonal`,class:`mt-4`,title:`暂无服务器`,text:`请先在「服务器」页添加子机,再回到此处配置宝塔连接。`})):t(``,!0)]),_:1})]),_:1}),a?(p(),n(S,{key:1,"max-width":`720`,variant:`outlined`,rounded:`lg`,loading:L.value},{default:m(()=>[d(y,{class:`text-subtitle-1`},{default:m(()=>[...c[11]||=[e(`当前服务器`,-1)]]),_:1}),d(b,null,{default:m(()=>[s(`div`,te,[d(l,{color:ae.value,size:`small`,variant:`tonal`},{default:m(()=>[e(` SSH 检测:`+v(ie.value),1)]),_:1},8,[`color`]),d(i,{icon:`mdi-refresh`,size:`x-small`,variant:`text`,loading:B.value,title:`重新 SSH 检测宝塔`,onClick:e=>$(a)},null,8,[`loading`,`onClick`]),d(l,{color:oe.value,size:`small`,variant:`tonal`},{default:m(()=>[e(` 引导:`+v(re.value),1)]),_:1},8,[`color`])]),W.value?.bootstrap_last_error?(p(),o(`div`,ne,` 上次错误:`+v(W.value.bootstrap_last_error),1)):t(``,!0),W.value?.bootstrap_next_attempt_at?(p(),o(`div`,I,` 下次重试:`+v(W.value.bootstrap_next_attempt_at),1)):t(``,!0),d(i,{color:`primary`,variant:`tonal`,class:`mb-4`,loading:z.value,onClick:e=>ue(a)},{default:m(()=>[...c[12]||=[e(` 立即 SSH 获取 `,-1)]]),_:1},8,[`loading`,`onClick`]),d(T,{onSubmit:u(e=>ce(a),[`prevent`])},{default:m(()=>[d(E,{modelValue:q.auto_bootstrap,"onUpdate:modelValue":c[3]||=e=>q.auto_bootstrap=e,label:`自动获取(每 5 分钟重试,直至成功)`,color:`primary`,"hide-details":``,class:`mb-3`},null,8,[`modelValue`]),d(C,{modelValue:q.base_url,"onUpdate:modelValue":c[4]||=e=>q.base_url=e,label:`面板地址`,hint:`含协议、端口与安全入口,如 https://1.2.3.4:8888/abc123`,"persistent-hint":``,class:`mb-2`},null,8,[`modelValue`]),d(C,{modelValue:q.api_key,"onUpdate:modelValue":c[5]||=e=>q.api_key=e,label:`API 密钥`,type:`password`,placeholder:W.value?.api_key_set?`已设置,留空不修改`:`在面板设置-API接口获取`,class:`mb-2`},null,8,[`modelValue`,`placeholder`]),d(E,{modelValue:q.verify_ssl,"onUpdate:modelValue":c[6]||=e=>q.verify_ssl=e,label:`校验 SSL 证书`,color:`primary`,"hide-details":``,class:`mb-4`},null,8,[`modelValue`]),d(i,{type:`submit`,color:`primary`,loading:R.value},{default:m(()=>[...c[13]||=[e(`保存`,-1)]]),_:1},8,[`loading`])]),_:1},8,[`onSubmit`])]),_:2},1024)]),_:2},1032,[`loading`])):(p(),n(r,{key:0,type:`info`,variant:`tonal`,class:`mb-4`,title:`单机配置`,text:`请在右上角选择服务器,或从「服务器列表」点击「连接配置」进入。`})),d(w,{modelValue:U.value,"onUpdate:modelValue":c[8]||=e=>U.value=e,"max-width":`480`},{default:m(()=>[d(S,{title:`批量 SSH 获取宝塔 API`},{default:m(()=>[d(b,null,{default:m(()=>[c[14]||=e(` 将对 `,-1),s(`strong`,null,v(Z.value.length),1),c[15]||=e(` 台未配置服务器发起 SSH 引导(写入子机 `,-1),c[16]||=s(`code`,null,`api.json`,-1),c[17]||=e(` 并加密保存到 Nexus)。此操作会占用 SSH 连接,建议在低峰执行。 `,-1)]),_:1}),d(x,null,{default:m(()=>[d(g),d(i,{variant:`text`,onClick:c[7]||=e=>U.value=!1},{default:m(()=>[...c[18]||=[e(`取消`,-1)]]),_:1}),d(i,{color:`primary`,loading:H.value,onClick:de},{default:m(()=>[...c[19]||=[e(`确认开始`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{L as default}; |