b8425cc059
Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
13 KiB
JavaScript
1 line
13 KiB
JavaScript
import{t as e}from"./VDataTable-B6PKw1TS.js";import{_ as t,v as n}from"./VSelect-Dy1HeCdk.js";import{$r as r,B as i,Dr as a,F as ee,H as o,Ir as s,N as c,P as te,Pr as l,Q as u,R as d,Tr as ne,Ur as f,Yr as p,Zt as m,_r as re,dr as h,fr as g,gr as _,hr as v,pr as ie,pt as ae,sr as oe,t as y,ur as b,z as x}from"./index-C6qJAv49.js";import{n as S,t as se}from"./dataTable-esDY4cOk.js";import{t as C}from"./VDataTableServer-Dh4BHVrk.js";import{t as w}from"./apiError-DukIeo5O.js";import{n as T}from"./paginatedFetch-CPtIdw6B.js";import{i as E}from"./validation-DMwOxx4a.js";import{t as D}from"./VDialog-P-nMQayc.js";import{t as ce}from"./VTextarea-Dnh3HyOO.js";var le={class:`text-caption text-medium-emphasis`},O=re({__name:`CredentialsPage`,setup(re){let O=[...se],k=t();function A(e){I.value=e,P.value=1,M.value===`sshkeys`?X():M.value===`db`&&Z()}function ue(e){if(!e)return`—`;let t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleString(`zh-CN`,{hour12:!1})}let j=f(!1),M=f(`passwords`),N=f(null),P=f(1),F=f(0),I=f(20),L=f([]),R=f(!1),z=f({name:``,username:`root`,password:``}),de=S([{title:`预设名称`,key:`name`},{title:`用户名`,key:`username`,width:120},{title:`创建时间`,key:`created_at`,width:180},{title:`操作`,key:`actions`,width:150,align:`end`}]),B=f([]),V=f(!1),H=f({name:``,username:`root`,public_key:``,private_key:``}),fe=S([{title:`名称`,key:`name`},{title:`用户名`,key:`username`,width:120},{title:`私钥`,key:`private_key_set`,width:120},{title:`操作`,key:`actions`,width:150,align:`end`}]),U=f([]),W=f(!1),G=f({name:``,host:``,port:3306,username:``,password:``,database:``}),pe=S([{title:`名称`,key:`name`},{title:`主机`,key:`host`},{title:`端口`,key:`port`,width:80},{title:`用户名`,key:`username`},{title:`数据库`,key:`database`},{title:`操作`,key:`actions`,width:150,align:`end`}]),K=f(!1),q=f(``),J=f(null);async function Y(){j.value=!0;try{let e=await m.getList(`/presets/`);L.value=e.items,F.value=e.total}catch(e){L.value=[],k(w(e,`加载密码预设失败`),`error`)}finally{j.value=!1}}async function X(){j.value=!0;try{let e=await T(`/ssh-key-presets/`,{},P.value,I.value);B.value=e.items,F.value=e.total,I.value===-1&&(P.value=1)}catch(e){B.value=[],k(w(e,`加载 SSH 密钥失败`),`error`)}finally{j.value=!1}}async function Z(){j.value=!0;try{let e=await T(`/scripts/credentials`,{},P.value,I.value);U.value=e.items,F.value=e.total,I.value===-1&&(P.value=1)}catch(e){U.value=[],k(w(e,`加载数据库凭据失败`),`error`)}finally{j.value=!1}}function Q(){switch(M.value){case`passwords`:Y();break;case`sshkeys`:X();break;case`db`:Z();break}}l(M,()=>{P.value=1,Q()});function me(e){N.value=e.id,z.value={name:e.name,username:e.username||`root`,password:``},R.value=!0}async function he(){let e=z.value.name.trim(),t=z.value.password;if(!e){k(`请填写预设名称`,`error`);return}if(!N.value&&!t){k(`请填写 SSH 密码`,`error`);return}try{let n=z.value.username.trim()||`root`;if(N.value){let r={name:e,username:n};t&&(r.encrypted_pw=t),await m.put(`/presets/${N.value}`,r)}else await m.post(`/presets/`,{name:e,username:n,encrypted_pw:t});R.value=!1,Y(),k(`保存成功`)}catch(e){k(e instanceof Error?e.message:`保存失败`,`error`)}}function ge(e){N.value=e.id,H.value={name:e.name,username:e.username||`root`,public_key:e.public_key||``,private_key:``},V.value=!0}async function _e(){try{N.value?await m.put(`/ssh-key-presets/${N.value}`,H.value):await m.post(`/ssh-key-presets/`,H.value),V.value=!1,X(),k(`保存成功`)}catch(e){k(e.message||`保存失败`,`error`)}}function ve(e){N.value=e.id,G.value={name:e.name,host:e.host||``,port:e.port||3306,username:e.username||``,password:``,database:e.database||``},W.value=!0}async function ye(){try{N.value?await m.put(`/scripts/credentials/${N.value}`,G.value):await m.post(`/scripts/credentials`,G.value),W.value=!1,Z(),k(`保存成功`)}catch(e){k(e.message||`保存失败`,`error`)}}function be(){N.value=null,M.value===`passwords`?(z.value={name:``,username:`root`,password:``},R.value=!0):M.value===`sshkeys`?(H.value={name:``,username:`root`,public_key:``,private_key:``},V.value=!0):(G.value={name:``,host:``,port:3306,username:``,password:``,database:``},W.value=!0)}function $(e,t){q.value=e,J.value=t.id,K.value=!0}async function xe(){try{q.value===`password`?await m.delete(`/presets/${J.value}`):q.value===`sshkey`?await m.delete(`/ssh-key-presets/${J.value}`):await m.delete(`/scripts/credentials/${J.value}`),K.value=!1,Q(),k(`已删除`)}catch(e){k(e.message||`删除失败`,`error`)}}return ne(()=>{Q()}),(t,l)=>(a(),h(n,{fluid:``,class:`pa-6`},{default:s(()=>[_(d,{elevation:`0`,border:``,rounded:`lg`},{default:s(()=>[_(i,{class:`d-flex align-center`},{default:s(()=>[l[28]||=v(` 凭据管理 `,-1),_(c),_(ae,{modelValue:M.value,"onUpdate:modelValue":l[0]||=e=>M.value=e,mandatory:``,density:`compact`,variant:`outlined`,class:`mr-3`},{default:s(()=>[_(u,{size:`small`,value:`passwords`},{default:s(()=>[...l[24]||=[v(`密码预设`,-1)]]),_:1}),_(u,{size:`small`,value:`sshkeys`},{default:s(()=>[...l[25]||=[v(`SSH 密钥`,-1)]]),_:1}),_(u,{size:`small`,value:`db`},{default:s(()=>[...l[26]||=[v(`数据库凭据`,-1)]]),_:1})]),_:1},8,[`modelValue`]),_(u,{color:`primary`,variant:`flat`,size:`small`,"prepend-icon":`mdi-plus`,onClick:be},{default:s(()=>[...l[27]||=[v(`添加`,-1)]]),_:1})]),_:1}),_(te),M.value===`passwords`?(a(),ie(oe,{key:0},[_(x,{class:`text-body-2 text-medium-emphasis pt-0 pb-2`},{default:s(()=>[...l[29]||=[v(` 保存常用 SSH 账号+密码模板;快速添加服务器时将按顺序轮询所有预设尝试登录。 `,-1)]]),_:1}),_(e,{items:L.value,headers:p(de),loading:j.value,hover:``,density:`comfortable`,"items-per-page":20,"items-per-page-options":O},{"item.created_at":s(({item:e})=>[b(`span`,le,r(ue(e.created_at)),1)]),"item.actions":s(({item:e})=>[_(u,{variant:`text`,size:`x-small`,density:`compact`,onClick:t=>me(e)},{default:s(()=>[...l[30]||=[v(`编辑`,-1)]]),_:1},8,[`onClick`]),_(u,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:t=>$(`password`,e)},{default:s(()=>[...l[31]||=[v(`删除`,-1)]]),_:1},8,[`onClick`])]),"no-data":s(()=>[...l[32]||=[b(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无密码预设`,-1)]]),_:1},8,[`items`,`headers`,`loading`])],64)):g(``,!0),M.value===`sshkeys`?(a(),h(C,{key:1,items:B.value,headers:p(fe),"items-length":F.value,loading:j.value,page:P.value,"items-per-page":I.value,"items-per-page-options":O,hover:``,density:`comfortable`,"onUpdate:page":l[1]||=e=>{P.value=e,X()},"onUpdate:itemsPerPage":A},{"item.private_key_set":s(({item:e})=>[_(ee,{color:e.private_key_set?`success`:`grey`,size:`small`,variant:`tonal`,label:``},{default:s(()=>[v(r(e.private_key_set?`已设置`:`未设置`),1)]),_:2},1032,[`color`])]),"item.actions":s(({item:e})=>[_(u,{variant:`text`,size:`x-small`,density:`compact`,onClick:t=>ge(e)},{default:s(()=>[...l[33]||=[v(`编辑`,-1)]]),_:1},8,[`onClick`]),_(u,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:t=>$(`sshkey`,e)},{default:s(()=>[...l[34]||=[v(`删除`,-1)]]),_:1},8,[`onClick`])]),"no-data":s(()=>[...l[35]||=[b(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无凭据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`,`items-per-page`])):g(``,!0),M.value===`db`?(a(),h(C,{key:2,items:U.value,headers:p(pe),"items-length":F.value,loading:j.value,page:P.value,"items-per-page":I.value,"items-per-page-options":O,hover:``,density:`comfortable`,"onUpdate:page":l[2]||=e=>{P.value=e,Z()},"onUpdate:itemsPerPage":A},{"item.actions":s(({item:e})=>[_(u,{variant:`text`,size:`x-small`,density:`compact`,onClick:t=>ve(e)},{default:s(()=>[...l[36]||=[v(`编辑`,-1)]]),_:1},8,[`onClick`]),_(u,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:t=>$(`db`,e)},{default:s(()=>[...l[37]||=[v(`删除`,-1)]]),_:1},8,[`onClick`])]),"no-data":s(()=>[...l[38]||=[b(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无凭据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`,`items-per-page`])):g(``,!0)]),_:1}),_(D,{modelValue:R.value,"onUpdate:modelValue":l[7]||=e=>R.value=e,"max-width":`500`},{default:s(()=>[_(d,{border:``},{default:s(()=>[_(i,null,{default:s(()=>[v(r(N.value?`编辑密码预设`:`新建密码预设`),1)]),_:1}),_(x,null,{default:s(()=>[_(y,{modelValue:z.value.name,"onUpdate:modelValue":l[3]||=e=>z.value.name=e,label:`预设名称`,variant:`outlined`,density:`compact`,class:`mb-2`,placeholder:`如:生产环境 root 密码`,rules:[p(E)(`预设名称`)]},null,8,[`modelValue`,`rules`]),_(y,{modelValue:z.value.username,"onUpdate:modelValue":l[4]||=e=>z.value.username=e,label:`SSH 用户名`,variant:`outlined`,density:`compact`,class:`mb-2`,placeholder:`root`,rules:[p(E)(`SSH 用户名`)]},null,8,[`modelValue`,`rules`]),_(y,{modelValue:z.value.password,"onUpdate:modelValue":l[5]||=e=>z.value.password=e,label:`SSH 密码`,variant:`outlined`,density:`compact`,type:`password`,placeholder:N.value?`留空表示不修改`:`必填`,rules:N.value?[]:[p(E)(`SSH 密码`)]},null,8,[`modelValue`,`placeholder`,`rules`])]),_:1}),_(o,null,{default:s(()=>[_(c),_(u,{variant:`text`,onClick:l[6]||=e=>R.value=!1},{default:s(()=>[...l[39]||=[v(`取消`,-1)]]),_:1}),_(u,{color:`primary`,variant:`flat`,onClick:he},{default:s(()=>[...l[40]||=[v(`保存`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),_(D,{modelValue:V.value,"onUpdate:modelValue":l[13]||=e=>V.value=e,"max-width":`500`},{default:s(()=>[_(d,{border:``},{default:s(()=>[_(i,null,{default:s(()=>[v(r(N.value?`编辑 SSH 密钥`:`新建 SSH 密钥`),1)]),_:1}),_(x,null,{default:s(()=>[_(y,{modelValue:H.value.name,"onUpdate:modelValue":l[8]||=e=>H.value.name=e,label:`名称`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),_(y,{modelValue:H.value.username,"onUpdate:modelValue":l[9]||=e=>H.value.username=e,label:`SSH 用户名`,variant:`outlined`,density:`compact`,class:`mb-2`,placeholder:`root`},null,8,[`modelValue`]),_(ce,{modelValue:H.value.public_key,"onUpdate:modelValue":l[10]||=e=>H.value.public_key=e,label:`公钥`,variant:`outlined`,density:`compact`,rows:`3`,class:`mb-2`},null,8,[`modelValue`]),_(ce,{modelValue:H.value.private_key,"onUpdate:modelValue":l[11]||=e=>H.value.private_key=e,label:`私钥`,variant:`outlined`,density:`compact`,rows:`5`},null,8,[`modelValue`])]),_:1}),_(o,null,{default:s(()=>[_(c),_(u,{variant:`text`,onClick:l[12]||=e=>V.value=!1},{default:s(()=>[...l[41]||=[v(`取消`,-1)]]),_:1}),_(u,{color:`primary`,variant:`flat`,onClick:_e},{default:s(()=>[...l[42]||=[v(`保存`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),_(D,{modelValue:W.value,"onUpdate:modelValue":l[21]||=e=>W.value=e,"max-width":`500`},{default:s(()=>[_(d,{border:``},{default:s(()=>[_(i,null,{default:s(()=>[v(r(N.value?`编辑数据库凭据`:`新建数据库凭据`),1)]),_:1}),_(x,null,{default:s(()=>[_(y,{modelValue:G.value.name,"onUpdate:modelValue":l[14]||=e=>G.value.name=e,label:`名称`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),_(y,{modelValue:G.value.host,"onUpdate:modelValue":l[15]||=e=>G.value.host=e,label:`主机`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),_(y,{modelValue:G.value.port,"onUpdate:modelValue":l[16]||=e=>G.value.port=e,label:`端口`,variant:`outlined`,density:`compact`,type:`number`,class:`mb-2`},null,8,[`modelValue`]),_(y,{modelValue:G.value.username,"onUpdate:modelValue":l[17]||=e=>G.value.username=e,label:`用户名`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),_(y,{modelValue:G.value.password,"onUpdate:modelValue":l[18]||=e=>G.value.password=e,label:`密码`,variant:`outlined`,density:`compact`,type:`password`,class:`mb-2`},null,8,[`modelValue`]),_(y,{modelValue:G.value.database,"onUpdate:modelValue":l[19]||=e=>G.value.database=e,label:`数据库`,variant:`outlined`,density:`compact`},null,8,[`modelValue`])]),_:1}),_(o,null,{default:s(()=>[_(c),_(u,{variant:`text`,onClick:l[20]||=e=>W.value=!1},{default:s(()=>[...l[43]||=[v(`取消`,-1)]]),_:1}),_(u,{color:`primary`,variant:`flat`,onClick:ye},{default:s(()=>[...l[44]||=[v(`保存`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),_(D,{modelValue:K.value,"onUpdate:modelValue":l[23]||=e=>K.value=e,"max-width":`400`},{default:s(()=>[_(d,{border:``},{default:s(()=>[_(i,null,{default:s(()=>[...l[45]||=[v(`确认删除`,-1)]]),_:1}),_(x,null,{default:s(()=>[...l[46]||=[v(`确定要删除此凭据吗?`,-1)]]),_:1}),_(o,null,{default:s(()=>[_(c),_(u,{variant:`text`,onClick:l[22]||=e=>K.value=!1},{default:s(()=>[...l[47]||=[v(`取消`,-1)]]),_:1}),_(u,{color:`error`,variant:`flat`,onClick:xe},{default:s(()=>[...l[48]||=[v(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{O as default}; |