HEX
Server: nginx/1.28.3
System: Linux ip-172-31-12-242 6.17.0-1007-aws #7~24.04.1-Ubuntu SMP Thu Jan 22 21:04:49 UTC 2026 x86_64
User: root (0)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/server/panel/BTPanel/static/js/useController8.js
import{Q as Me,k as w,cN as ma,Z as fa,e as k,_ as B,a3 as va,M as D,J as vt,$ as ya,c7 as yt,d8 as ht,cZ as ze,cQ as ha,R as ga,cS as gt,cT as We,cP as ye,w as Y,m as Te,f as Le,da as _t,hQ as _a,eP as ts,j as ss,cU as as,db as ba,K as ns,d3 as ls,c as rs,n as os}from"./utils-lib.js?v=1777008528";import{editAgainVerify as Ca,checkSslMethod as Ea,applyCertOrderPay as Da,applyBusSsl as wa,removeCloudCert as Sa,getDockerDeploySiteDomain as Aa,getDeploySiteDomain as xa,uploadCertToCloud as ka,getCertList as Ta,updateSslTask as us,setSslInfo as is,setProxyHttps as Ba,setDockerHttps as La,setSiteHttps as Fa,closeSiteHttps as Ia,downloadCert as $a,ignoreHttpsMode as Na,getLetsEncryptList as Pa,downloadCertToLocal as Va,setDockerCertToSite as Ra,setCertToSite as cs,delLetsEncrypt as Ha,getOrderDetail as Oa,authDomainApi as ps,renewalCert as Ma,validateDomain as ja,getDockerLetsEncryptSite as qa,getLetsEncryptSite as Ua,applyCertApi as ds,applyProxyCertArrange as Ga,getDnsData as Ja,setDomainDNS as za,getComposerLine as Wa,letCertInitApi as Ka,letRenewCert as Xa,reissueCertOrder as Za,closeCertArrange as Qa,batchSetSsl as Ya,setBatchCertToSite as en,getDnsApiList as tn,setDnsApiInfo as sn}from"./site.js?v=1777008528";import{P as ms,_ as an,a4 as fs,e as nn,g as bt,M as ln,ah as rn}from"./ssl.js?v=1777008528";import{_ as he}from"./index118.js?v=1777008528";import{r as y,e as n,x as c,aW as on,aI as Ke,g as $,H as Xe,z as Z,aB as Be,c as ge,j as L,C as le,v as E,N as un,q as f,m as cn,p as m,$ as vs,k as M,F as Fe,B as Ct,L as ys,s as O,n as Et,aF as re,I as pn,Q as oe,J as st,K as Ht,ak as dn,aj as mn,ay as fn,aA as vn,am as hs,an as gs,aC as yn,o as hn,y as Ee,aV as gn,ap as _n,T as bn,a9 as Cn,ar as En,at as Dn,as as wn,i as Sn,t as _s}from"./base-lib.js?v=1777008528";import{u as _e}from"./useStore2.js?v=1777008528";import{aF as bs,e as Dt,b as Cs,g as An,h as Es,H as xn,a as kn,c as Tn,v as Bn}from"./index3.js?v=1777008528";import{_ as K}from"./index119.js?v=1777008528";import{u as J,S as Ie}from"./useStore3.js?v=1777008528";import{a as Ln}from"./useController18.js?v=1777008528";import{r as Ds}from"./useMethod3.js?v=1777008528";import{w as ws,o as Fn}from"./useController13.js?v=1777008528";import{u as Ze,p as In}from"./useController19.js?v=1777008528";import{k as $n}from"./useController20.js?v=1777008528";const{certVerifyInfo:Ae}=J(),{verifyBusCertEvent:Nn}=Ie(),Fu=async e=>{try{const t={oid:Ae.value.oid,dcvMethod:e.value.dcvMethod,pid:Ae.value.pid,cert_ssl_type:Ae.value.certType},s=await w({loading:"正在更改验证方式,请稍后...",request:Ca(t),message:!0});return s!=null&&s.status&&Pn(t.oid,t.cert_ssl_type,t.pid),s.status}catch(t){return!1}},Pn=async(e,t,s)=>{const{data:a}=await Nn(e,t,s);a&&$t({...a,cert_ssl_type:t,certType:t,pid:s})},at=e=>{if(se.value==="CNAME_CSR_HASH")return e.url;const t=se.value==="HTTPS_CSR_HASH"?"https://":"http://";return"".concat(t).concat(e.url,"/.well-known/pki-validation/").concat(e.content)},Iu=y([{label:"URL",prop:"url",showOverflowTooltip:!0,render:e=>n("span",null,[at(e)])},{label:"验证结果",prop:"status",width:100,render:e=>n("span",{class:"".concat(e.status?"text-primary":"text-danger")},[e.status?"成功":"失败"])},{label:"自动设置验证值",prop:"verify_status",width:120,isHide:()=>se.value!=="CNAME_CSR_HASH",render:e=>e.verify_status?n("span",{class:"text-primary"},[c("成功")]):n(on,{placement:"top",content:e.msg,enterable:!1},{default:()=>[n("span",{class:"text-danger"},[c("失败")])]})},{label:"操作",align:"right",width:160,render:(e,t)=>{const s=se.value==="CNAME_CSR_HASH",a=[];return s||a.push(n("span",{class:"cursor-pointer bt-link",onClick:()=>Me({value:at(e)})},[c("复制")]),n(K,null,null),n("a",{class:"bt-link",href:at(e),target:"_blank"},[c("打开")]),n(K,null,null)),a.push(n("span",{class:"cursor-pointer bt-link",onClick:()=>hl(e,t)},[c("重新验证")])),n("div",{class:"flex items-center justify-end"},[a])}}]),Vn=async()=>{var d;Mt.value=!0;const{auto_verify_info:e}=Ae.value,{dcvList:t,DCVdnsValue:s,DCVdnsHost:a,DCVfileContent:l,DCVfileName:o,DCVdnsType:u}=Ae.value.data,r=se.value==="CNAME_CSR_HASH";let i=[];try{const p=b=>{if(!e)return"";if(typeof e.interface=="string")return e.interface;const S=((e==null?void 0:e.interface)||[]).find(A=>(A==null?void 0:A.value)===b);return(S==null?void 0:S.interface)||""};r?i=t==null?void 0:t.map(b=>({record_type:u,sub_domain:a,dns_value:s,dns_id:p(b.domainName),domain:b.domainName})):i=t==null?void 0:t.map(b=>({file_name:"/.well-known/pki-validation/".concat(o),file_value:l,domain:b.domainName}));const{data:g}=await w({request:ms({verify_type:r?"dns":"file",verify_data:JSON.stringify(i),set_verify_value:!!e})});mt.value=(d=g.data)==null?void 0:d.map(b=>({url:b.domain,status:b.rep.local_verify,verify_status:b.rep.status,msg:b.rep.msg,content:o}))}catch(p){}finally{Mt.value=!1}},{siteInfo:Rn,siteType:$u,isRefreshList:Nu}=_e();Ke(Ze());const{orderInfo:H,sslApplicationInfo:it,certVerifyInfo:R,otherPopup:wt,isRefreshSSL:St,sslDnsApiInfo:Hn}=J(),{buyArtificialServiceEvent:On,getCertAdminInfoEvent:Mn,submitCertInfoEvent:jn,setBusSslDeployEvent:Pu,getSslListEvent:qn,verifyBusCertEvent:At,getCertSslListEvent:Un,getDomainListEvent:Gn,jumpSslTabEvent:Vu}=Ie(),Ss=y(!1),Ot=y([]),Mt=y(!1),ct=y([{key:"domain",value:"",interface:""}]),Jn=["企业级证书","极速申请","防劫持/防篡改","提高SEO权重","赔付保证","不成功可退款","官方推荐(宝塔官网bt.cn也在使用)"],zn=y({ov:!1,dv:!1,ev:!1}),Wn=[{content:()=>n("span",{class:"text-danger"},[c("如果您的站点有使用CDN、高防IP、反向代理、301重定向等功能,可能导致验证失败")])},{content:"证书支持购买多年,只能一年签发一次(有效期199天),需在到期前30天内续签(续签暂不需要验证域名)。"},{content:"申请www.bt.cn这种以www为二级域名的证书,需绑定并解析顶级域名(bt.cn),否则将验证失败。"},{content:"商用证书相对于普通证书,具有更高的安全性、赔付保障和支持通配符和多域名等方式。"},{content:"暂不支持.su俄罗斯域名后缀申请证书,详情请联系客服咨询。"}],Kn=e=>{let t="text-green";return e.endDate?(e.endDay<=30&&(t="text-orange"),n("span",{class:e.endDay<=10?"text-danger":t},[e.endDay>0?"剩余".concat(e.endDay," 天"):"已过期"])):n("span",null,[c("--")])},As=async({oid:e})=>{try{const t=await On({pdata:JSON.stringify({oid:e})});H.value=t.data,k({isAsync:!0,title:"购买人工服务",area:60,component:()=>B(()=>import("./pay-ssl-service.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:t.data})}catch(t){}},je=async e=>{const t=await Mn();it.value={...it.value,...t.data},H.value=e,ru({orderInfo:e})},Xn=async e=>{try{const{data:t}=await jn({oid:e.oid});if(t.code===-1&&t.errors)Zn(t.errors),Ss.value=!0;else{let s=t.msg||t.data.msg,a=t.status;D.request({msg:a?s||"提交成功":"资料提交错误,请检查管理员信息是否填写正确,如填写错误请联系客服重置订单",status:a}),a&&xt(e.oid,e.cert_ssl_type,e.pid)}kt()}catch(t){}},Zn=e=>{try{let t=[];return Object.keys(e).forEach(s=>{e[s].forEach(a=>{t.push({field:s,error:a})})}),{data:t,total:t.length,other:{}}}catch(t){return{data:[],total:0,other:{}}}},xs=({oid:e})=>{window.open("/ssl?action=download_cert&oid=".concat(e))},ks=async({oid:e,title:t,domainName:s})=>{try{await k({title:"部署证书",area:50,btn:"确定",component:()=>B(()=>import("./deploy-confirm.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{oid:e,title:t,domainName:s,cert_type:"business"}})}catch(a){}},xt=async(e,t,s)=>{var o;const{data:a,status:l}=await At(e,t,s);l&&$t({...a,cert_ssl_type:t,certType:t,pid:s}),(o=wt.value)==null||o.unmount()},kt=async()=>{try{const e=await qn({siteName:Rn.value.name});return St.value=!1,e}catch(e){return{data:[],total:0,other:{}}}},jt=y(!1),Qn=y(0),Ts=y({}),V={defalutList:[],domianNumList:[],classList:[],brandList:[],typeList:[]},pt=y({addPrice:0,productName:"",price:0,totalPrice:0,originalPrice:0,deploymentPrice:0,pid:0,years:1,yearsPrice:0,number:1,extraNumber:0,extraPrice:0,install:1}),_=y({num:1,certClassAcitve:"OV",certClass:[{name:"OV证书",title:"推荐企业使用",value:"OV",tips:[],data:[]},{name:"DV证书",title:"推荐个人,测试使用",value:"DV",subscript:"热销",tips:[]},{name:"EV证书",title:"推荐大型政企使用,高安全性",value:"EV",tips:[]}],certBrandAcitve:"",certBrand:[{name:"宝塔证书",title:"宝塔证书",value:"宝塔证书",tips:[]},{name:"Positive",title:"Positive",value:"Positive",tips:[]},{name:"锐安信",title:"锐安信",value:"锐安信",tips:[]},{name:"CFCA",title:"CFCA",value:"CFCA",tips:[]},{name:"Digicert",title:"Digicert",value:"Digicert",tips:[]},{name:"GeoTrust",title:"GeoTrust",value:"GeoTrust",tips:[]},{name:"Sectigo",title:"Sectigo",value:"Sectigo",tips:[]},{name:"亚洲诚信",title:"亚洲诚信",value:"亚洲诚信",tips:[]}],certTypeAcitve:"single",certType:[{name:"single",title:"单域名",value:"single",tips:[]},{name:"multiple",title:"多域名",value:"multiple",tips:[]},{name:"wildcard",title:"泛域名",value:"wildcard",tips:[]},{name:"ip",title:"IP证书",value:"ip",tips:[]}],certLifeAcitve:1,certLife:[{name:"1年",title:"1年",value:1,tips:[]},{name:"2年",title:"2年",value:2,tips:[]},{name:"3年",title:"3年",value:3,tips:[]},{name:"4年",title:"4年",value:4,tips:[]},{name:"5年",title:"5年",value:5,tips:[]}],certDeployAcitve:0,certDeploy:[{name:"不需要",title:"不需要",value:0,tips:[]},{name:"部署服务",title:"部署服务",value:1,tips:[]},{name:"部署服务(国密)",title:"部署服务(国密)",value:2,tips:[]}]}),nt={single:["仅支持绑定一个二级域名或者子域名,例如 bt.com、cloud.bt.com、dnspod.cloud.bt.com的其中之一 。","如需要绑定同级的所有子域名,例如*.bt.com,请购买泛域名证书。"],wildcard:["带通配符的域名,例如:*.bt.com、*.cloud.bt.com均为泛域名,包含同一级的全部子域名。","注意泛域名不支持跨级,例如*.bt.com 不包含 *.cloud.bt.com的支持"]},Yn={0:[],1:["宝塔提供9:00 - 24:00的人工部署证书部署服务,帮助客户排查部署证书部署生效问题,快速上线"],2:["宝塔提供9:00 - 24:00的人工部署国密算法证书部署服务,帮助客户排查部署证书部署生效问题,快速上线"]},Ru=$(()=>{const e=_.value.certClass.filter(t=>t.value===_.value.certClassAcitve);return e&&e.length>0?e[0].tips:[]}),Hu=$(()=>{const e=_.value.certBrand.filter(t=>t.value===_.value.certBrandAcitve);return e&&e.length>0?e[0].tips:[]}),Ou=$(()=>{const e=_.value.certType.filter(t=>t.value===_.value.certTypeAcitve);return e&&e.length>0?e[0].tips:[]}),Mu=$(()=>{const e=_.value.certLife.filter(t=>t.value===parseInt(_.value.certLifeAcitve));return e&&e.length>0?e[0].tips:[]}),ju=$(()=>{const e=_.value.certDeploy.filter(t=>t.value===parseInt(_.value.certDeployAcitve));return e&&e.length>0?e[0].tips:[]}),qu=async()=>{try{jt.value=!0;const{data:e,status:t}=await Un();if(jt.value=!1,!t)return D.request({msg:"获取证书列表失败",status:!1}),{status:!1,msg:"获取证书列表失败"};Ts.value=e.info.recommend,el(),tl(e.info),sl(e.data),Tt()}catch(e){return{status:!1,msg:"获取证书列表失败"}}},Uu=(e=_.value.num)=>{let t=e;if(vt(e)&&typeof e!="number"?(e=Number(e.data),t=Number(_.value.num)||1):t=Number(_.value.num+e)||1,t&&(t<1||t>99))return _.value.num=t<1?1:99,D.error("域名数量范围为1-99");_.value.num=t,_.value.certTypeAcitve!=="wildcard"&&(_.value.certTypeAcitve=_.value.num>1?"multiple":"single"),Tt()},Gu=(e,t,s)=>{s||(s=_.value[t].filter(a=>a.value===e)),!s.disable&&("".concat(t,"Acitve")in _.value&&(_.value["".concat(t,"Acitve")]=e),t=="certClass"&&(_.value.certBrandAcitve=qe(),_.value.certDeployAcitve=s&&s.value==="DV"?0:1),Tt())},qe=()=>{var e;return Ts.value[(e=_.value.certClassAcitve)==null?void 0:e.toLowerCase()]},el=()=>{_.value.certClassAcitve="DV",_.value.certBrandAcitve=qe(),_.value.certTypeAcitve="single",_.value.certLifeAcitve=1,_.value.certDeployAcitve=0,zn.value={ov:!1,dv:!1,ev:!1}},De=(e,t,s)=>e.map((a,l)=>{const o=s?s(a,t):t[a.value];return{...a,tips:o}}),tl=({type:e,brand:t,times:s})=>{_.value.certClass=De(_.value.certClass,e,(a,l)=>l["".concat(a.value).toLowerCase()]),nt.multiple=nt.single,_.value.certType=De(_.value.certType,nt),_.value.certDeploy=De(_.value.certDeploy,Yn),_.value.certBrand=De(_.value.certBrand,t,(a,l)=>l[a.value!=="Positive"?"".concat(a.value).toLowerCase():"Positive"]),_.value.certLife=De(_.value.certLife,s,(a,l)=>l[a.value+"_year"])},$e=(e={})=>{let{num:t,classify:s,brand:a,type:l,life:o,deploy:u}=e;const r=_.value;return t||(t=r.num),s||(s=r.certClassAcitve),a||(a=r.certBrandAcitve),l||(l=r.certTypeAcitve),o||(o=r.certLifeAcitve),u||(u=r.certDeployAcitve),{num:t,classify:s,brand:a,type:l,life:o,deploy:u}},sl=e=>{const t=[];e.forEach(s=>{var i;const a=(i=s.type.match(/(OV|DV|EV)/))==null?void 0:i[0],l=s.code.indexOf("wildcard")!==-1,o=s.code.indexOf("ip")!==-1,u=s.add_price>0;let r=l?"wildcard":u?"multiple":"single";s.brand==="Digicert"&&(r=l?"wildcard":"single"),t.push({...s,type:a,certType:r,isMulti:u,isIp:o})}),V.defalutList=t},Tt=()=>{al(V.defalutList),rl(),ol()},al=e=>{let{num:t}=$e();const s=e.filter(a=>t>1?a.isMulti:!0);s.length>0&&(V.domianNumList=s,nl(s))},nl=e=>{const{classify:t}=$e(),s=e.filter(a=>a.type===t);s.length>0&&(V.classList=s,ll(s))},ll=e=>{const{brand:t}=$e(),s=e.filter(a=>a.brand===t);s.length>0&&(V.brandList=s,Bs(s))},Bs=e=>{const{type:t}=$e();e.length===1&&(_.value.certTypeAcitve=e[0].certType);const s=e.filter(a=>{const l=_.value.certTypeAcitve==="multiple"&&a.certType!=="wildcard"&&a.isMulti,o=_.value.certTypeAcitve==="wildcard"&&a.certType==="wildcard"&&a.isMulti,u=_.value.certTypeAcitve==="ip"&&a.isIp;return a.certType===t||l||o||u});s.length>0&&(V.typeList=s)},rl=()=>{const{domianNumList:e,classList:t,brandList:s,typeList:a}=V;_.value.certClass.forEach(l=>{let o=e.some(u=>u.type===l.value);l.value=="EV"&&_.value.certTypeAcitve==="wildcard"&&(o=!1),l.disable=!o}),_.value.certBrand.forEach(l=>{var u,r,i;const o=!t.some(d=>d.brand===l.value);if(l.hidden=o,l.subscript=l.value===qe()?"推荐":"",l.value===_.value.certBrandAcitve&&l.hidden){_.value.certBrandAcitve=qe(),l.value===_.value.certBrandAcitve&&l.hidden&&(_.value.certBrandAcitve=(r=(u=V==null?void 0:V.classList)==null?void 0:u[0])==null?void 0:r.brand);const d=(i=V==null?void 0:V.classList)==null?void 0:i.filter(p=>p.brand===_.value.certBrandAcitve);d.length>0&&(V.brandList=d,Bs(d))}}),_.value.certType.forEach(l=>{let o=!s.some(u=>u.isIp&&l.value==="ip"?!0:u.certType===l.value);l.value==="single"&&_.value.num>1&&(o=!0),l.value==="multiple"&&_.value.num===1&&(o=!0),l.value==="multiple"&&_.value.num>1&&(o=!1),l.value==="ip"&&_.value.num>1&&(o=!0),l.hidden=o}),_.value.certBrandAcitve!=="CFCA"&&_.value.certDeployAcitve===2&&(_.value.certDeployAcitve=1)},ol=()=>{const e=V.typeList[0]||null;if(Qn.value=(e==null?void 0:e.num)||0,e){const{num:t,life:s,deploy:a}=$e(),{price:l,other_price:o,add_price:u,pid:r,num:i,install_price:d,install_price_v2:p}=e,g=t-i<0?0:t-i,C=[0,d,p][a],S=u*g,A=(S+l)*s+C,h=o+S+C;pt.value={addPrice:u||0,productName:e.title,price:l,totalPrice:A,originalPrice:h,deploymentPrice:C,pid:r,years:s,yearsPrice:l*s,number:i,extraNumber:g,extraPrice:S,install:Number(a)}}},qt=y({oid:0,wxcode:"",alicode:"",qq:"",orderInfo:{}}),Ju=async e=>{const{pid:t,install:s,years:a,extraNumber:l}=pt.value,o={pdata:JSON.stringify({pid:t,install:s,years:a,num:l})},{data:u,msg:r}=await w({loading:"正在创建商业证书订单,请稍后...",request:Da(o)}),{status:i}=u;if(!i)return D.error(r);const{oid:d,wxcode:p,alicode:g,qq:b,order_info:C}=u.msg;qt.value={oid:d,wxcode:p,alicode:g,qq:b,orderInfo:C},oa({...qt.value,productInfo:pt.value},e)},ul=[{content:"通配符证书只支持DNS验证"}],il=[{content:"多域名只支持DNS验证"}],Ls=y(!1),Fs=y(!1),zu=y(""),Bt=y(""),ue=y([]),dt=y([]),Ut=y(!1),cl=y(),pl=y({domain:""}),Is=y("CNAME_CSR_HASH"),Wu=y(!0),$s=y("dns"),ne=y(!1),ee=y(!1),Gt=y(!1),lt=y([]),dl=[{content:"https或者http验证,必须保证网站能通过http/https访问"},{content:"暂不支持.su俄罗斯域名后缀,详情请联系客服咨询。"},{content:"域名前缀是www,提醒用户解析上级根域名,如申请www.bt.cn,请确保解析bt.cn"},{content:()=>n("a",{class:"text-primary",href:"https://www.bt.cn/bbs/thread-85379-1-1.html",target:"_blank"},[c("如何验证商用证书?")])}],Ku=[{content:"申请之前,请确保域名已解析,如未解析会导致审核失败(包括根域名)"},{content:"申请www.bt.cn这种以www为二级域名的证书,需绑定并解析顶级域名(bt.cn),否则将验证失败"},{content:"SSL证书可选名称赠送规则:"},{content:"1、申请根域名(如:bt.cn),赠送下一级为www的域名(如:www.bt.cn)"},{content:"2、申请当前host为www的域名(如:www.bt.cn),赠送上一级域名,(如: bt.cn)"},{content:"3、申请其它二级域名,(如:app.bt.cn),赠送下一级为www的域名 (如:www.app.bt.cn)"}],ml=y([{value:"CNAME_CSR_HASH",label:"DNS验证(CNAME解析)",tips:"如网站还未备案完成,可选【DNS验证】",isCheck:"",checkTips:[]},{value:"HTTP_CSR_HASH",label:"文件验证(HTTP)",tips:"如网站未开启301、302、强制HTTPS、反向代理功能,请选择HTTP",isCheck:"",checkTips:[]},{value:"HTTPS_CSR_HASH",label:"文件验证(HTTPS)",tips:"如网站开启【强制HTTPS】,请选【HTTPS验证】",isCheck:"",checkTips:[]}]),Xu=(e,t,s)=>{switch(t&&(Is.value="HTTP_CSR_HASH"),s.value){case"CNAME_CSR_HASH":return!t;case"HTTP_CSR_HASH":return!e;case"HTTPS_CSR_HASH":return!e}},fl=[{content:"OV/EV证书申请流程条件:"},{content:"1、填写网站验证信息(文件验证或DNS验证)"},{content:"2、完成邮箱认证,根据CA发送的邮件完善邮件内容(中文填写即可)"},{content:"3、企查查或者爱企查、百度地图、114best能查询到相关企业信息,且公司名和公司地址完全匹配"},{content:"4、企查查或其他平台留下的电话能保证周一到周五(7:00 - 15:00)能接听到CA的认证电话,电话号码归属地来自美国,请留意接听。"}],Zu=$(()=>{const e=[];return ee.value&&e.push(...ul),ne.value&&e.push(...il),e.push(...dl),H.value.type!=="dv"&&e.push(...fl),e}),Qu=$(()=>{const e=ee.value?"*":"www";return ne.value?"请输入".concat(ee.value?"通配符":"","证书域名,例如:").concat(e,".bt.cn"):"请输入需要申请证书的域名(单域名".concat(ee.value?"通配符":"","证书),例如:").concat(e,".bt.cn")}),te=y({domains:"",interface:"",dcvMethod:"",auth_to:"",Administrator:{address:"",city:"",country:"",email:"",firstName:"",lastName:"",job:"",name:"",mobile:"",organation:"",postCode:"",state:""}}),vl=$(()=>te.value.Administrator.lastName+te.value.Administrator.firstName),Yu=()=>{yl(),te.value.Administrator={...it.value,name:""},te.value.Administrator.name=vl.value;const{pid:e,oid:t,title:s,limit:a,install:l,code:o}=H.value,u=o.indexOf("ev")>-1?"ev":o.indexOf("ov")>-1?"ov":"dv";ne.value=o.indexOf("multi")>-1,ee.value=o.indexOf("wildcard")>-1,Gt.value=o.indexOf("ip")>-1,H.value={pid:e,oid:t,title:s,limit:a,install:l,isMulti:ne.value,isWildcard:ee.value,isIp:Gt.value,type:u}},yl=async()=>{var e,t;try{const{data:s}=await an();lt.value=s.map(l=>({label:l.ps?"".concat(l.dns_name," - ").concat(l.ps):l.dns_name,value:l.id,domains:l.domains,ps:l.ps}));const{limit:a}=H.value;if(!ne.value)return te.value.interface=(t=(e=lt.value)==null?void 0:e[0])==null?void 0:t.value;ct.value=Array.from({length:a},(l,o)=>{var u,r;return{key:"domain_".concat(o+1),value:"",interface:((r=(u=lt.value)==null?void 0:u[0])==null?void 0:r.value)||""}})}catch(s){}},ei=async()=>{var e,t;try{const s=await Gn();ue.value=s.data.map(a=>({label:a.name,value:a.name,...a})),Ls.value=!0,Bt.value=((t=(e=ue.value)==null?void 0:e[0])==null?void 0:t.name)||"",dt.value=ue.value}catch(s){}},ti=e=>{ue.value=[],dt.value.forEach(t=>{t.name.indexOf(e)>-1&&ue.value.push(t)}),ue.value.length||(ue.value=dt.value)},si=async()=>{te.value.domains=Bt.value,Ls.value=!1,ee.value||Ns()},Ns=async()=>{Ut.value=!0;const{data:e}=await Ea(Bt.value);Ut.value=!1,ml.value.forEach(t=>{va(e[t.value])?(t.isCheck=!!e[t.value],t.checkTips=!!e[t.value]):(t.isCheck=!1,t.checkTips=e[t.value])})},ai=Xe({domain:[ma({message:"域名不能为空"}),{validator:(e,t,s)=>{fa(t)?!ee.value&&t.indexOf("*")>-1?s(new Error("当前为单域名证书,不支持通配符申请")):s():s(new Error("域名格式错误,请重新输入"))},trigger:["change"]}]}),ni=()=>{Fs.value=!0},li=async()=>{var e;await((e=cl.value)==null?void 0:e.validate()),te.value.domains=pl.value.domain,Fs.value=!1,ee.value||Ns()},ri=e=>{const t=$s.value;if(t!=="dns"){const s=Hn.value.find(a=>a.value===t);if(s){const a=!s.data;(!e||e&&a)&&sa({title:"设置".concat(s.info.title,"接口"),row:s.info})}}},oi=async(e,t)=>{var a;let s=null;if(!e.value.domains&&!ne.value)return D.error("域名不能为空");if(H.value.isIp&&!ya(e.value.domains))return D.error("IP证书申请域名格式错误,请输入正确的ipv4地址");if(!e.value.Administrator.state&&!e.value.Administrator.city)return D.error("所在地区不能为空");if(!e.value.Administrator.address&&H.value.type!=="dv")return D.error("公司详细地址不能为空");if(!e.value.Administrator.organation)return D.error("公司名称不能为空");if(!e.value.Administrator.name)return D.error("姓名不能为空");if(!e.value.Administrator.email)return D.error("邮箱不能为空");if(!e.value.Administrator.mobile)return D.error("手机不能为空");try{s=D.load("正在提交证书信息,请稍后...");const{job:l,postCode:o,country:u,firstName:r,lastName:i,name:d,state:p,city:g,address:b,organation:C,email:S,mobile:A}=e.value.Administrator,h=await wa(JSON.stringify({pid:H.value.pid,cert_ssl_type:t,oid:H.value.oid,domains:ne.value?ct.value.map(({value:v})=>v==null?void 0:v.trim()):[te.value.domains.trim()],dcvMethod:Is.value,auth_to:$s.value,Administrator:{job:l,postCode:o,country:u,lastName:d,state:p,city:g,address:b,organation:C,email:S,mobile:A}}));if(vt(h.data.msg)&&h.data.msg.hasOwnProperty("code")){let v=h.data.errors;Ot.value=[],Object.keys(v).forEach(x=>{v[x].forEach((I,P)=>{Ot.value.push({field:x,error:I})})}),Ss.value=!0}else{let v=h.msg||h.data.msg,x=h.data.status;D.request(h.data||{msg:x?v||"提交成功":v||"资料提交错误,请检查管理员信息是否填写正确,如填写错误请联系客服重置订单",status:x})}if(h.data.status){St.value=!0;const{data:v,status:x}=await At(H.value.oid,t,H.value.pid);v&&(v.auto_verify_info={interface:ne.value?ct.value:te.value.interface,set_verify_value:!0},$t({...v,cert_ssl_type:t,certType:t,pid:H.value.pid})),(a=wt.value)==null||a.unmount()}}catch(l){}finally{s&&s.close()}},hl=async(e,t)=>{const s=se.value==="CNAME_CSR_HASH",{DCVdnsValue:a,DCVdnsHost:l,DCVfileContent:o,DCVfileName:u,DCVdnsType:r}=R.value.data;try{const i=s?[{record_type:r,sub_domain:l,dns_value:a,dns_id:"",domain:e.url}]:[{file_name:"/.well-known/pki-validation/".concat(u),file_value:o,domain:e.url}],{data:d}=await w({loading:"正在验证商用证书,请稍后...",request:ms({verify_type:s?"dns":"file",verify_data:JSON.stringify(i),set_verify_value:!1})}),{local_verify:p,status:g}=d.data[0].rep;mt.value[t].status=p,mt.value[t].verify_status=g}catch(i){}},ui=async()=>{var t,s;const{data:e}=await At(R.value.oid,R.value.cert_ssl_type,R.value.pid);e&&(R.value=e),await _l(),((t=R.value)==null?void 0:t.certStatus)==="PENDING"&&D.success("验证中,请耐心等待!"),((s=R.value)==null?void 0:s.certStatus)==="COMPLETE"&&D.success("验证成功!"),wt.value.unmount(),St.value=!0},ii=e=>{let t=R.value.res&&R.value.res.verification&&R.value.res.verification.indexOf("dns")==-1;bl({oid:R.value.oid,type:se.value,certType:R.value.certType,pid:R.value.pid,isIp:t})},gl=y([{content:"本次验证结果是由【本服务器验证】,实际验证将由【CA服务器】进行验证,请耐心等候"},{content:"请确保以上列表所有项都验证成功后点击【验证域名】重新提交验证"},{content:"如长时间验证不通过,请通过【修改验证方式】更改为【DNS验证】"},{content:()=>n("span",null,[c("如何添加域名解析,《"),n("a",{href:"https://cloud.tencent.com/document/product/302/3446",class:"text-primary",target:"__blink"},[c("点击查看教程")]),c("》,和咨询服务器运营商")])}]),_l=async()=>{var e;if((e=R.value)!=null&&e.data){const{data:{dcvList:t,DCVdnsHost:s,DCVdnsType:a,DCVdnsValue:l,DCVfileName:o,DCVfileContent:u},paths:r,auto_verify_info:i}=R.value;El.value=t==null?void 0:t.map(p=>p.domainName).join(","),se.value=t[0].dcvMethod;const d={dnsHost:s,dnsType:a,dnsValue:l,fileName:o,fileContent:u,filePath:"/.well-known/pki-validation/"};return Vn(),se.value!=="CNAME_CSR_HASH"&&gl.value.splice(3,1,{content:()=>n("span",null,[c("SSL添加文件验证方式 ->> "),n("a",{href:"https://www.bt.cn/bbs/thread-56802-1-1.html",target:"_blank",class:"text-primary"},[c("查看教程")])])}),d}else return D.error("获取数据失败"),{}},bl=e=>k({title:"验证域名-"+(e.type.indexOf("CNAME_")>-1?"DNS验证":"文件验证"),area:52,showFooter:!0,btn:["更改","取消"],component:()=>B(()=>import("./modify-verify-way.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e}),Cl=e=>{k({title:"多年期证书详情",area:52,compData:e,component:()=>B(()=>import("./mulit-cert-detail.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},se=y(""),mt=y([]),El=y(),Dl=e=>{const t=n(Be,{placement:"bottom-end",width:"400","popper-class":"white-theme",trigger:"click"},{default:()=>n("div",{class:"bus-ssl-popover"},[n("div",{class:"ssl-popover-item"},[n("span",{class:"ssl-popover-title"},[c("自行排查")]),n("p",{class:"text-base my-[1rem]"},[c("以图文的形式,一步步教您验证并部署商业SSL")]),n("a",{class:"bt-link",href:"https://www.bt.cn/bbs/thread-85379-1-1.html",target:"_blank"},[c("如何验证商用证书?")])]),n("div",{class:"ssl-popover-item"},[n("span",{class:"ssl-popover-title"},[c("购买人工")]),n("p",{class:"text-base my-[1rem]"},[c("不会部署?人工客服帮你全程部署,不成功可退款")]),n(Z,{size:"small",type:"primary",onClick:()=>As(e)},{default:()=>[c("购买人工")]})])]),reference:()=>n("span",{class:"bt-link"},[c("排查方法?")])}),s=e.orderStatus,a=[];switch(Number(s)){case-1:a.push(n("span",{class:"text-danger"},[c("已取消")]));break;case 0:a.push(n("span",{class:"text-warning cursor-pointer",onClick:()=>je(e)},[c("待完善资料")])),e.install||a.push(t);break;case 1:a.push(n("span",{class:"text-warning"},[c("待审核")]));break;case 2:a.push(n("span",{class:"text-warning"},[c("正在提交CA")]));break;case 3:a.push(n("span",{class:"text-warning"},[c("待域名验证")]));break;case 4:a.push(n("span",{class:"text-warning"},[c("签发中")]));break;case 5:a.push(n("span",{class:"text-success"},[c("已签发")]));break;case 6:a.push(n("span",{class:"text-warning"},[c("取消确认")]));break;case 7:a.push(n("span",{class:"text-warning"},[c("待续费")]));break;case 8:a.push(n("span",{class:"text-warning"},[c("待吊销确认")]));break;case 9:a.push(n("span",{class:"text-warning"},[c("待重颁发")]));break;case 10:a.push(n("span",{class:"text-warning"},[c("重颁发中")]));break;case 11:a.push(n("span",{class:"text-warning"},[c("吊销中")]));break;case 12:a.push(n("span",{class:"text-danger"},[c("已吊销")]));break;default:a.push(n("span",{class:"text-warning"},[c("待完善资料")]))}const l=[];return a.map((o,u)=>{l.push(o),u<a.length-1&&l.push(n(K,null,null))}),l},wl=e=>{const t=(b,C)=>n("span",{class:"bt-link",onClick:C},[b]),s=t("人工服务",()=>bs()),a=t("详情",()=>Cl(e)),l=t("下载",()=>xs(e)),o=t("部署",()=>ks(e)),u=t("验证",()=>xt(e.oid,e.cert_ssl_type,e.pid)),r=t("续签",()=>Pt(e.oid)),i=t("完善资料",()=>je(e)),d=e.orderStatus,p=[];switch(e.years&&e.years>1&&[5,15].includes(Number(d))&&p.push(a),Number(d)){case 0:e.install&&p.push(s),p.push(i);break;case 3:e.install&&p.push(s),p.push(u);break;case 5:p.push(o),p.push(l);break;case 7:p.push(r);break;case 11:e.install&&p.push(s),p.push(u);break}const g=[];return p.map((b,C)=>{g.push(b),C<p.length-1&&g.push(n(K,null,null))}),g},Sl={id:"wechat-customer",class:"wechat-customer"},Al={class:"w-full h-[46px] flex flex-row items-center justify-center"},xl={class:"qrcode-wechat w-[128px] h-[128px] m-[8px_0_4px_0]"},kl={id:"wechatCustomerQrcode"},Tl=ge({__name:"customer-popover",props:{trigger:{default:"click"},showArrow:{type:Boolean,default:!0},placement:{default:"left"}},setup(e,{expose:t}){const s=e,a=y(null),l=$(()=>s.trigger),o=$(()=>s.showArrow),u=$(()=>s.placement);return t({BtCustomerPopover:()=>a}),(r,i)=>{const d=yt,p=ht,g=Be;return L(),le(g,cn({ref_key:"BtCustomerPopover",ref:a},r.$attrs,{trigger:m(l),placement:m(u),effect:"light","popper-class":"BtCustomerPopover","show-arrow":m(o),"popper-style":{padding:"0",border:"0",background:"0"}}),{reference:E(()=>[un(r.$slots,"default",{},void 0,!0)]),default:E(()=>[f("div",Sl,[f("div",Al,[n(d,{target:"_blank",href:"https://www.bt.cn/new/wechat_customer",class:"text-[16px] flex flex-row flex-nowrap items-center"},{default:E(()=>[...i[0]||(i[0]=[f("div",{class:"flex items-center border-b border-solid border-[var(--el-color-primary-light-9)] pb-4px"},[c(" 点击咨询客服 "),f("i",{class:"svgtofont-el-d-arrow-right ml-4px w-[15px]"})],-1)])]),_:1})]),f("div",xl,[f("div",kl,[n(p,{src:"/customer/customer-qrcode.png"})])]),i[1]||(i[1]=f("div",{class:"wechat-title"},[f("img",{class:"icon",style:{width:"17px",height:"17px"},src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAAAXNSR0IArs4c6QAAATlJREFUSEvtVrFOw0AMfed8AxJsZWGAgQHBXP4DCQa+Ioou7g18BRIg9T/KDGJggIGFbiDxDXGQowSBuGvrFISEmtF+7/nis312RVEMiWgIoMT375aIjpj5KeJrTMy8JSJjAPsRzEhErl1Zlhd1XZ8kRKZEdMjM0xlBBiIyATCIYZxzl857X6uTiHaY+TElZrUz87aIPCjvI0gIwVmF5uG7H1gFmZepxv85XTdqCCEcLMQ0gLz3jbbTOm/rPdkLBt0v0E77xysq2it9T2nhuTzPN4ho10KyYEXkXvvkBcC6hWjEvmqQMwCnANZa8p1RJAbfa41vAM7/0cUzczOiZ43zvunrtPVOntuO3+wrluJ12qspvFBm/+bR+u03nhPrkKZk2ZVINUZO964sy44Ta9FSK5GuQ1VVXb0DLf+sHQ9tLL0AAAAASUVORK5CYII="}),f("div",{class:"scan-title",style:{"font-size":"16px"}},"扫一扫")],-1)),i[2]||(i[2]=f("span",{class:"layui-layer-setwin wechat-close",style:{display:"block"}},[f("a",{href:"javascript:;",class:"layui-layer-ico layui-layer-close layui-layer-close2"})],-1))])]),_:3},16,["trigger","placement","show-arrow"])}}}),Ps=ze(Tl,[["__scopeId","data-v-9064b685"]]),Bl={class:"h-full"},Ll={class:"recommendList"},Fl={class:"text-small ml-[8px] text-stroke-primary"},Il={class:"flex flex-col w-full pt-[16px]"},$l={class:"flex items-center"},Nl={class:"flex items-center"},Pl=ge({__name:"index",setup(e,{expose:t}){const{sslAlertState:s,isRefreshSSL:a}=J(),{BtTable:l,BtRefresh:o,refresh:u}=ha({request:kt,columns:[{label:"域名",prop:"domainName",width:120,render:(i,d)=>n("span",{class:"w-full whitespace-pre-line"},[i.domainName?i.domainName.join("、"):"--"])},{label:"证书类型",prop:"title",showOverflowTooltip:!0},{label:n("span",{class:"whitespace-nowrap"},[c("申请截止时间")]),prop:"endtime",showOverflowTooltip:!0,width:85,render:i=>{if(!i.endtime)return"--";const d=i.endtime*1e3,p=new Date().getTime(),g=p>d,b=p+7*24*60*60*1e3,C=d<b&&!g;return n("span",{class:g?"text-danger":C?"text-warning":""},[ga(i.endtime)])}},{label:"到期时间",width:83,render:Kn,showOverflowTooltip:!0},{label:"状态",prop:"expire",width:160,showOverflowTooltip:!1,render:(i,d)=>{if(i.endtime){const h=i.endtime*1e3;if(new Date().getTime()>h)return"--"}const p=[],g=(h,v)=>n("span",{style:"color: ".concat(h,";")},[v]),b=(h,v)=>n(Be,{trigger:"hover",placement:"left","popper-class":"popover-default",width:"300",enterable:!1,"open-delay":100,"close-delay":0},{default:()=>n("div",{class:"flex items-center p-[2px] whitespace-nowrap"},[c("1、如填写错误,联系人工可重置订单"),n("br",null,null),c("2、如验证方式选择错误,联系人工修改验证方式")]),reference:()=>n("div",{style:"color: ".concat(h,";")},[v])}),C=n(Be,{placement:"bottom-end",width:"400","popper-class":"white-theme",trigger:"click"},{default:()=>n("div",{class:"bus-ssl-popover"},[n("div",{class:"ssl-popover-item"},[n("span",{class:"ssl-popover-title"},[c("自行排查")]),n("p",{class:"text-base my-[1rem]"},[c("以图文的形式,一步步教您验证并部署商业SSL")]),n("a",{class:"bt-link",href:"https://www.bt.cn/bbs/thread-85379-1-1.html",target:"_blank"},[c("如何验证商用证书?")])]),n("div",{class:"ssl-popover-item"},[n("span",{class:"ssl-popover-title"},[c("购买人工")]),n("p",{class:"text-base my-[1rem]"},[c("不会部署?人工客服帮你全程部署,不成功可退款")]),n(Z,{size:"small",type:"primary",onClick:()=>As(i)},{default:()=>[c("购买人工")]})])]),reference:()=>n("span",{class:"bt-link"},[c("排查方法?")])});if(i.cert_ssl_type)return Dl(i);let S=i.domainName&&i.domainName.length>0;if(i.certId==""&&!S)p.push(n("span",{class:"bt-warn",onClick:()=>je(i)},[c("待完善资料")])),p.push(C);else if(i.certId==""&&i.domainName.length!==0)p.push(n("span",{class:"bt-warn"},[c("待提交")]));else if(i.status===1)switch(i.orderStatus){case"COMPLETE":p.push(g("primary","订单完成"));break;case"PENDING":p.push(b("orange","验证中"));break;case"CANCELLED":p.push(g("medium","已取消"));break;case"REISSUED":p.push(g("primary","已重签"));break;case"FAILED":p.push(g("danger","申请失败"));break;case"EXPIRED":p.push(g("medium","已过期"));break;default:p.push(g("orange","待验证"));break}else switch(i.status){case 0:p.push(g("orange","未支付"));break;case-1:p.push(g("medium","已取消"));break}const A=[];return p.map((h,v)=>{A.push(h),v<p.length-1&&A.push(n(K,null,null))}),A}},{label:"操作",prop:"ps",width:170,align:"right",render:(i,d)=>{if(i.endtime){const I=i.endtime*1e3;if(new Date().getTime()>I)return"--"}if(i.cert_ssl_type)return wl(i);const p=(I,P)=>n("span",{class:"bt-link",onClick:P},[I]),g=p("人工服务",()=>bs()),b=p("下载",()=>xs(i)),C=p("部署",()=>ks(i)),S=p("验证",()=>xt(i.oid,i.cert_ssl_type,i.pid)),A=p("续签",()=>Pt(i.oid)),h=[],v=i.domainName&&i.domainName.length>0;if(i.certId==""&&!v)i.install&&h.push(g),h.push(p("完善资料",()=>je(i)));else if(i.certId==""&&i.domainName.length!==0)h.push(p("提交",()=>Xn(i)));else if(i.status===1)switch(i.orderStatus){case"COMPLETE":i.ssl_state===1?h.push(n("span",null,[c("已部署")])):h.push(C),i.endDay<30&&h.push(A),h.push(b);break;case"PENDING":i.install&&h.push(g),h.push(S);break;case"CANCELLED":h.push(n("span",null,[c("无操作")]));break;case"FAILED":h.push(n("span",{class:"bt-danger cursor-default"},[c("申请失败")]));break;case"EXPIRED":h.push(C),h.push(b);break;case"REISSUED":break;default:i.install&&h.push(g),h.push(S);break}else h.push(n("span",null,[c("无操作")]));const x=[];return h.map((I,P)=>{x.push(I),P<h.length-1&&x.push(n(K,null,null))}),x}}],extension:[gt(),We(a)]}),r=vs(()=>{const i=document.querySelector("#pane-busSslList");i&&i.click()},1e3);return t({init:u}),(i,d)=>{const p=Z,g=ht,b=he,C=ye;return L(),M("div",Bl,[f("div",Ll,[(L(!0),M(Fe,null,Ct(m(Jn),(S,A)=>(L(),M("div",{key:A,class:ys("".concat(A===6?"w-[22rem]":"w-[14rem]"," recomItem"))},[d[0]||(d[0]=f("i",{class:"svgtofont-el-check font-bold text-[#ff8d00] text-medium"},null,-1)),f("span",Fl,O(S),1)],2))),128))]),f("div",Il,[n(b,null,{"header-left":E(()=>[f("div",$l,[n(p,{type:"primary",onClick:m(ea),class:"mr-4"},{default:E(()=>[...d[1]||(d[1]=[c(" 申请证书 ",-1)])]),_:1},8,["onClick"]),n(Ps,{placement:"right"},{default:E(()=>[f("div",Nl,[n(g,{src:"/static/icons/we-com.svg",class:"mx-[4px] w-2rem h-2rem",all:!0}),d[2]||(d[2]=f("span",{class:"bt-link"},"售前客服",-1))])]),_:1})])]),"header-right":E(()=>[n(m(o))]),content:E(()=>[n(m(l),{"max-height":m(s)?320:380,onWheel:m(r)},null,8,["max-height","onWheel"])]),_:1})]),n(C,{options:m(Wn),listStyle:"disc"},null,8,["options"])])}}}),Vl=ze(Pl,[["__scopeId","data-v-21c112eb"]]),{siteType:Vs,siteInfo:Jt}=_e(),{isRefreshSSL:Lt}=J(),Rl=[{label:"所有",value:0},{label:"未过期",value:1},{label:"即将过期",value:2},{label:"已过期",value:3}],Rs=y(!1),Hs=y(),fe=y({}),ae=y(!1),N=Xe({typeValue:"全部",btnText:"部署证书",search:"",data:{all:[],site:[]},siteList:[]}),Hl=async(e=Vs.value)=>{if(N.siteList.length===0){D.error("请选择站点");return}const{hash:t,subject:s}=fe.value;if(!await Vt({ssl_hash:t}))return!1;await ou({hash:t,subject:s,list:N.siteList,type:e}),ae.value=!1},Ol=async e=>{await Y({title:"删除证书",content:"删除后该证书将不会显示在证书夹,是否继续操作?",icon:"warning-filled"}),await w({loading:"正在删除证书...",request:Sa({local:e.cloud_id>0?0:1,ssl_hash:e.hash}),message:!0}),ce.value=!0};y([Dt(),{label:"站点名称",prop:"name",render:e=>e.current?e.name+"(当前站点)":e.name}]);const Ml=async e=>{let t={},s=!0;typeof e<"u"&&(t={cert_list:JSON.stringify(e.dns)},s=!1,fe.value=e);const a=await w({request:Vs.value==="docker"?Aa(t):xa(t),data:{all:Array,site:Array}});N.data={all:a.all.map(l=>({name:l})),site:a.site.map(l=>({name:l}))},s||(ae.value=!0,Et(()=>{var l;N.data.all.forEach((o,u)=>{o.name===Jt.value.name&&(o.current=!0,N.data.all.unshift(N.data.all.splice(u,1)[0]))}),(l=Hs.value)==null||l.toggleRowSelection(N.data.all.find(o=>o.name===Jt.value.name),!0)}))},jl=e=>{N.siteList=e,e.length<=0?N.btnText="部署证书":N.btnText="部署证书[已选择".concat(e.length,"项]")},ql=e=>{N.typeValue=e},Ul=async e=>{try{await Y({title:"上传云端证书",content:"将会上传证书信息至云端进行替换,是否继续操作?",icon:"warning-filled",type:"calc"});const t=await w({loading:"正在上传证书至云端...",request:ka({ssl_hash:e.hash}),message:!0});Lt.value=!0}catch(t){}},ce=y(!1),Gl=async()=>{ce.value=!0,Lt.value=!0},Jl=async(e,t=ce.value)=>{try{const s={search_limit:e.search_limit,search_name:e.search,force_refresh:Number(t)};ce.value=!1;const{data:a}=await w({loading:Rs,request:Ta(s)});return Te(a)?t&&D.success("获取成功"):D.request(a),{data:Te(a)?a:(a==null?void 0:a.data)||[],total:0,other:{}}}catch(s){return{data:[],total:0,other:{}}}},zl=async e=>{if(!e)return D.error("请选择部署目标");try{const{hash:t}=fe.value,s=await hu({ssl_hash:t,target_id:e},()=>{ae.value=!1,ce.value=!0,Lt.value=!0});D[s.status?"success":"error"](s.msg)}catch(t){}},Wl=async(e,t,s,a)=>{const{label:l,value:o}=a;let u=[],r=!1;s.value.forEach(i=>{i.hash!==void 0&&i.hash!==null&&u.push(i.hash)}),await k({title:"批量".concat(l,"证书"),area:46,component:()=>B(()=>import("./index127.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{resultTitle:"批量".concat(l,"证书"),resultData:s.value,resultColumn:[{label:"名称",prop:"subject"},Cs()],autoTitle:"批量".concat(l,"证书")},showFooter:!0,onConfirm:async()=>{let i;try{await Y({type:"check",icon:"warning-filled",title:"证书删除确认",content:"批量删除证书,是否继续操作?",check:{content:"批量同步删除云端证书",value:!1,onConfirm:C=>{r=C}}}),i=Le().load("正在批量删除证书,请稍候...");let d={ssl_hash:u.join(","),local:1,cloud:r?1:0};const{data:p}=await fs(d);let g=[],b=[];Te(p.finish_list)&&(p.finish_list.forEach(C=>{g.push({name:C.name,status:C.status,msg:C.status?"删除成功":C.msg})}),b=[{label:"名称",prop:"name"},{label:"结果",render:C=>{let S=C.msg,A="";return C.status?A="text-primary":A="text-danger",re("span",{class:A},S)}}],ce.value=!0),Ds({resultTitle:"批量".concat(l,"证书"),resultData:g,resultColumn:b})}catch(d){}finally{i==null||i.close()}}})},Kl={class:"p-[2rem] pb-0"},Xl={class:"flex flex-col p-[12px] bg-light mb-4"},Zl={class:"mb-[4px]"},Ql={class:"mb-[4px]"},Yl={class:"mb-[4px]"},er={class:"relative h-[34rem]"},tr={class:"p-[20px] pt-0"},sr={class:"flex justify-between mb-[1rem]"},ar={class:"absolute bottom-0 w-full bg-light flex items-center justify-end p-[12px]"},nr={class:"relative pt-4"},lr={class:"px-[2rem] pb-[8rem]"},rr={style:{float:"left"}},or={class:"flex items-center"},ur={class:"absolute bottom-0 w-full bg-light flex items-center justify-end p-[12px]"},ir=ge({__name:"index",setup(e,{expose:t}){J();const s=_a({key:"search_limit",options:Rl,other:{class:"!w-[10rem] mr-1rem",filterable:!0}}),a=y("direct"),l=y(void 0),o=y([]),u=()=>{ts(),ss.push({path:"/ssl/auth"}),Ln()},r=async h=>{a.value=h,!Object.keys(o.value).length&&h==="third"&&await w({loading:"正在获取第三方部署列表,请稍后...",request:nn({p:1,limit:-1}),data:{data:Array,status:[Boolean,"data.length"]},success:v=>{o.value=v.data}})},i=h=>/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(h),d=as([{label:"删除",value:"delete",event:Wl}]),{BtTable:p,BtSearch:g,BtTableSelect:b,refresh:C,BtBatch:S}=_t({request:Jl,columns:[Dt({key:"hash"}),{label:"域名",prop:"subject",render:h=>{var v;return re("div",{class:"whitespace-pre-wrap"},((v=h.dns)==null?void 0:v.join("\n"))||h.subject)}},{label:"到期时间",prop:"not_after"},{label:"品牌",prop:"info.issuer",showOverflowTooltip:!0},{label:"位置",render:h=>h.cloud_id>0?"云端":"本地"},An([{onClick:async h=>{await Ul(h),C()},width:60,title:"上传云端",isHide:h=>h.cloud_id>0||i(h.subject)},{onClick:Ml,title:"部署"},{onClick:Ol,title:"删除"}])],extension:[s,d,We(ce)]}),A=()=>{a.value="direct",l.value=void 0,o.value=[]};return t({init:C}),(h,v)=>{const x=Z,I=dn,P=mn,be=ba,Ce=fn,Ne=vn,T=hs,ia=yt,ca=gs,pa=ns,da=he,Rt=pn("bt-loading");return L(),M("div",null,[n(da,null,{"header-left":E(()=>[n(x,{type:"default",onClick:m(Gl)},{default:E(()=>[...v[8]||(v[8]=[c(" 从云端同步 ",-1)])]),_:1},8,["onClick"])]),"header-right":E(()=>[f("div",null,[n(m(b))]),n(m(g),{class:"w-[30rem]",placeholder:"请输入域名搜索"})]),"footer-left":E(()=>[n(m(S))]),content:E(()=>[n(m(p),{"max-height":490})]),popup:E(()=>[n(pa,{title:"部署当前证书",modelValue:m(ae),"onUpdate:modelValue":v[7]||(v[7]=Pe=>oe(ae)?ae.value=Pe:null),area:52,onClose:A},{default:E(()=>{var Pe;return[f("div",Kl,[f("div",Xl,[f("span",Zl,"认证域名:"+O(m(fe).subject),1),f("span",Ql,"证书类型:"+O((Pe=m(fe).info)==null?void 0:Pe.issuer),1),f("span",Yl,"到期时间:"+O(m(fe).not_after),1)]),n(P,{modelValue:m(a),"onUpdate:modelValue":v[0]||(v[0]=F=>oe(a)?a.value=F:null),onChange:r},{default:E(()=>[n(I,{value:"direct"},{default:E(()=>[...v[9]||(v[9]=[c("批量部署",-1)])]),_:1}),n(I,{value:"third"},{default:E(()=>[...v[10]||(v[10]=[c("第三方部署",-1)])]),_:1})]),_:1},8,["modelValue"])]),st(f("div",er,[f("div",tr,[v[11]||(v[11]=f("span",{class:"!mt-[10px] !mb-[4px] inline-block"},"如下是需要批量部署证书的站点:",-1)),f("div",sr,[n(be,{type:"button",modelValue:m(N).typeValue,"onUpdate:modelValue":v[1]||(v[1]=F=>m(N).typeValue=F),size:"small",options:[{label:"全部",value:"全部"},{label:"匹配站点",value:"匹配站点"}],onChange:m(ql)},null,8,["modelValue","onChange"])]),st((L(),le(Ne,{ref_key:"deploySiteTableRef",ref:Hs,onSelectionChange:m(jl),data:m(N).data[m(N).typeValue==="全部"?"all":"site"],"max-height":180},{default:E(()=>[n(Ce,{type:"selection",width:"55"}),n(Ce,{label:"站点名称",prop:"name"},{default:E(F=>[c(O(String(F.row.name)+(F.row.current?"(当前站点)":"")),1)]),_:1})]),_:1},8,["onSelectionChange","data"])),[[Rt,"正在加载中,请稍后...","title"],[Rt,m(Rs)]])]),f("div",ar,[n(x,{type:"info",onClick:v[2]||(v[2]=F=>ae.value=!1)},{default:E(()=>[...v[12]||(v[12]=[c("取消",-1)])]),_:1}),n(x,{type:"primary",onClick:v[3]||(v[3]=F=>m(Hl)())},{default:E(()=>[c(O(m(N).btnText),1)]),_:1})])],512),[[Ht,m(a)==="direct"]]),st(f("div",nr,[f("div",lr,[v[15]||(v[15]=f("label",{class:"el-form-item__label w-[8rem]"},"部署目标",-1)),n(ca,{modelValue:m(l),"onUpdate:modelValue":v[4]||(v[4]=F=>oe(l)?l.value=F:null),class:"!w-[38rem]",filterable:"","default-first-option":"",size:"default",placeholder:"请选择部署目标"},{default:E(()=>[(L(!0),M(Fe,null,Ct(m(o),F=>(L(),le(T,{key:F.id,label:"".concat(F.name," - ").concat(F.description),value:F.id},{default:E(()=>[f("span",rr,O("".concat(F.name," - ").concat(F.description)),1)]),_:2},1032,["label","value"]))),128)),n(T,{label:"更多类型",value:"none",disabled:""},{default:E(()=>[f("p",or,[v[14]||(v[14]=f("span",null,"更多第三方部署目标",-1)),n(ia,{class:"ml-2 underline",onClick:u},{default:E(()=>[...v[13]||(v[13]=[c("点击前往",-1)])]),_:1})])]),_:1})]),_:1},8,["modelValue"])]),f("div",ur,[n(x,{type:"info",onClick:v[5]||(v[5]=F=>{ae.value=!1,A()})},{default:E(()=>[...v[16]||(v[16]=[c("取消",-1)])]),_:1}),n(x,{type:"primary",onClick:v[6]||(v[6]=F=>m(zl)(m(l)))},{default:E(()=>[...v[17]||(v[17]=[c("提交",-1)])]),_:1})])],512),[[Ht,m(a)==="third"]])]}),_:1},8,["modelValue"])]),_:1})])}}}),{sslInfo:q,sslTabActive:we}=J(),{siteInfo:pe,siteType:Ue,isRefreshList:cr}=_e(),{isRefreshLocalList:pr}=Ke(Ze()),dr=[{content:()=>n("span",null,[c("粘贴您的*.key以及*.pem内容,然后保存即可"),n("a",{href:"http://www.bt.cn/bbs/thread-704-1-1.html",class:"text-primary",target:"_blank"},[c("[帮助]")]),c("。")])},{content:"如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书"},{content:"PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt"},{content:"在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点"},{content:"如开启后无法使用HTTPS访问,请检查安全组是否正确放行443端口"}],mr=e=>{switch(e){case 3:we.value="busSslList";break;case 2:we.value="trustAsiaList";break;case 1:we.value="letsEncryptList";break;case 0:we.value="currentCertInfo";break;default:we.value="certFolderList";break}},xe=y(!1),ke=y(!1),fr=async e=>{e?ws({onCancel:()=>{q.value.pushAlarm=!e}}):(ke.value=q.value.push.task_data.project==="all",xe.value=!0)},vr=()=>{const{id:e,task_data:t,sender:s}=q.value.push;return{template_id:1,task_id:e,status:0,task_data:JSON.stringify({task_data:{status:!1,type:"site_ssl",project:ke.value?"all":pe.value.name,cycle:parseInt(t.cycle),title:"网站SSL到期提醒",interval:600,tid:1},sender:s,time_rule:{send_interval:0,time_range:[0,86399]},number_rule:{day_num:0,total:3}})}},yr=()=>{q.value.pushAlarm=!0},hr=async()=>{xe.value=!1;let e;try{e=D.load("正在关闭证书到期提醒,请稍后...");const t=vr(),s=await us(t);D.request(s),s.status&&Q()}catch(t){}finally{e&&e.close()}},gr=async()=>{let e=!1;const{key:t,csr:s,type:a}=q.value,{name:l}=pe.value;if(!z.value&&!W.value)return D.error("请填写完整的证书内容");(z.value!==t||W.value!==s)&&(e=!0,await Y({title:"证书保存提示",content:"当前证书内容发生改变,证书信息将同步更新,继续操作?"}));const o={proxy:{site_name:l,key:z.value,csr:W.value},docker:{site_name:l,key:z.value,csr:W.value},default:{type:e?0:a,siteName:l,key:z.value,csr:W.value}};if(!await Vt({key:t,cert:s}))return!1;await w({loading:"正在保存证书信息,请稍后...",request:is(o[Ue.value]||o.default,Ue.value),message:!0,success:r=>{r.status&&(cr.value=!0,pr.value=!0,Q())}})},_r=async e=>{try{e||await Y({title:"关闭强制HTTPS",content:"关闭强制HTTPS后需要清空浏览器缓存才能生效,是否继续操作?",icon:"warning-filled"});const{name:t}=pe.value,s=Ue.value,a={proxy:{site_name:t,force_https:e?"1":"0"},docker:{site_name:t,force_https:e?"1":"0"},default:{siteName:t}},l=a[s]||a.default,o={proxy:Ba,docker:La,default:e?Fa:Ia},u=o[s]||o.default;await w({loading:"正在".concat(e?"开启":"关闭","强制HTTPS,请稍后..."),request:u(l),message:!0}),await Q()}catch(t){q.value.https=!e}},z=$({get:()=>q.value.key,set:e=>{q.value.key=e}}),W=$({get:()=>q.value.csr,set:e=>{q.value.csr=e}}),br=async()=>{const e={siteName:pe.value.name,pem:W.value,key:z.value},{status:t,msg:s}=await w({loading:"正在下载证书,请稍后...",request:$a(e),data:{status:Boolean,msg:String}});t&&window.open("/download?filename="+encodeURIComponent(s))};let zt=!0;const Wt=()=>{try{zt?zt=!1:au()}catch(e){}},ci=()=>{var e;try{let t={};const{push:s}=q.value;if(s&&typeof s.status){const{sender:a,module:l,status:o,id:u}=q.value.push,{cycle:r}=s.task_data||{cycle:30};t={cycle:r||30,push:Array.isArray(a)?a:a?a.split(","):[],dueAlarm:s.status,id:u||new Date().getTime(),domainName:pe.value.name}}return((e=s==null?void 0:s.task_data)==null?void 0:e.project)==="all"&&s.status&&(t.allSsl=!0),{data:t,status:!0}}catch(t){return{status:!1,msg:"获取证书到期提醒配置失败"}}},Cr=e=>{const{id:t,allSsl:s,push:a,cycle:l,dueAlarm:o}=e;return{template_id:1,task_id:q.value.push.id,status:o?1:0,task_data:JSON.stringify({task_data:{status:o,type:"site_ssl",project:s?"all":pe.value.name,cycle:parseInt(l),title:"网站SSL到期提醒",interval:600,tid:1},sender:a,time_rule:{send_interval:0,time_range:[0,86399]},number_rule:{day_num:0,total:3}})}},pi=async(e,t)=>{try{await t();const s=Cr(e.value),a=await w({loading:"正在设置到期提醒,请稍后...",request:us(s),message:!0});return Q(),a.status}catch(s){return!1}},Kt=async(e,t)=>{if(!t)try{const s=await navigator.clipboard.readText();if((e==="key"?[/^\s*-----BEGIN PRIVATE KEY-----/,/^\s*-----BEGIN RSA PRIVATE KEY-----/,/^\s*-----BEGIN EC PRIVATE KEY-----/]:[/^\s*-----BEGIN CERTIFICATE-----/,/^\s*-----BEGIN CERTIFICATE REQUEST-----/]).some(r=>r.test(s)))switch(D.success("已从粘贴板检测到".concat(e==="key"?"密钥":"证书")),e){case"key":z.value=s;break;case"cert":W.value=s;break}}catch(s){}},Er=async e=>{try{e(),Ue.value==="docker"?$n("httpsOfficersSite"):In("httpsOfficersSite")}catch(t){}},Dr=async()=>{try{await w({request:Na({siteName:pe.value.name})}),await Q()}catch(e){}},wr={class:"flex flex-col w-full overflow-y-hidden"},Sr={class:"flex items-center justify-between w-full"},Ar={class:"flex"},xr={class:"mr-[32px] text-small"},kr={key:1,class:"ssl-status-info"},Tr={class:"left flex-1"},Br=["title"],Lr={class:"!mb-0"},Fr={class:"right flex-1"},Ir=["title"],$r={key:0},Nr={key:1,class:"text-danger"},Pr={class:"!mb-0"},Vr={class:"flex items-center"},Rr={class:"flex flex-1 justify-start"},Hr={class:"flex-1 mr-[20px]"},Or={class:"flex-1"},Mr={class:"my-[16px]"},jr={class:"p-2rem"},qr={class:"flex"},Ur={class:"ml-4"},Gr={class:"mt-8px flex items-center"},Jr=ge({__name:"index",setup(e,{expose:t}){const{sslInfo:s}=J(),a=["宝塔证书","Let's Encrypt","宝塔SSL","商业证书"],l=$(()=>s.value.type!==-1?a[s.value.type]:a[0]),o=yn("popupClose",()=>{});return hn(Wt),t({init:Wt}),(u,r)=>{var v,x,I,P,be,Ce,Ne;const i=gn,d=yt,p=_n,g=bn,b=Z,C=ye,S=hs,A=gs,h=ns;return L(),M("div",wr,[(v=m(s))!=null&&v.isCertInfo&&!((x=m(s))!=null&&x.httpsMode)&&((I=m(s))!=null&&I.isStart)?(L(),le(i,{key:0,type:"error",class:"!mb-[16px]",onClose:m(Dr)},{default:E(()=>[f("div",Sr,[f("div",Ar,[f("div",xr,[r[13]||(r[13]=c("网站安全:未开启HTTPS防窜站,站点访问可能存在风险。",-1)),f("span",{class:"ml-[1rem] bt-link",onClick:r[0]||(r[0]=T=>m(Er)(m(o)))},">>前往开启")])])])]),_:1},8,["onClose"])):Ee("",!0),(P=m(s))!=null&&P.isCertInfo?(L(),M("div",kr,[f("div",Tr,[f("div",null,[r[14]||(r[14]=f("span",null,"证书分类:",-1)),f("span",null,[n(d,{onClick:r[1]||(r[1]=T=>m(mr)(m(s).type))},{default:E(()=>[c(O(m(l)),1)]),_:1})])]),f("div",null,[r[15]||(r[15]=f("span",null,"认证域名:",-1)),f("span",{class:"truncate max-w-24rem",title:m(s).dns.join("、")},O(m(s).dns.join("、")),9,Br)]),f("div",Lr,[r[16]||(r[16]=f("span",null,"强制HTTPS:",-1)),f("span",null,[n(p,{size:"small",class:"!mb-0",modelValue:m(s).https,"onUpdate:modelValue":r[2]||(r[2]=T=>m(s).https=T),onChange:m(_r)},null,8,["modelValue","onChange"])])])]),f("div",Fr,[f("div",null,[r[17]||(r[17]=f("span",null,"证书品牌:",-1)),f("span",{class:"truncate max-w-24rem",title:m(s).issuer},O(m(s).issuer),9,Ir)]),f("div",null,[r[18]||(r[18]=f("span",null,"到期时间:",-1)),f("span",null,[Number(m(s).endtime)>0?(L(),M("span",$r,O(m(s).notAfter),1)):(L(),M("span",Nr,"证书已过期"))])]),f("div",Pr,[r[20]||(r[20]=f("span",null,"到期提醒:",-1)),f("span",Vr,[n(p,{size:"small",class:"!mb-0",modelValue:m(s).pushAlarm,"onUpdate:modelValue":r[3]||(r[3]=T=>m(s).pushAlarm=T),onChange:m(fr)},null,8,["modelValue","onChange"]),n(d,{class:"ml-[8px]",onClick:r[4]||(r[4]=T=>m(ws)())},{default:E(()=>[...r[19]||(r[19]=[c(" 到期设置提醒 ",-1)])]),_:1})])])])])):Ee("",!0),f("div",Rr,[f("div",Hr,[r[21]||(r[21]=f("div",{class:"mb-[4px]"},"密钥(KEY)",-1)),n(g,{type:"textarea",rows:12,modelValue:m(z),"onUpdate:modelValue":r[5]||(r[5]=T=>oe(z)?z.value=T:null),onFocus:r[6]||(r[6]=T=>m(Kt)("key",m(z)))},null,8,["modelValue"])]),f("div",Or,[r[22]||(r[22]=f("div",{class:"mb-[4px]"},"证书(PEM格式)",-1)),n(g,{type:"textarea",rows:12,modelValue:m(W),"onUpdate:modelValue":r[7]||(r[7]=T=>oe(W)?W.value=T:null),onFocus:r[8]||(r[8]=T=>m(Kt)("cert",m(W)))},null,8,["modelValue"])])]),f("div",Mr,[n(b,{type:"primary",class:"mr-[4px]",onClick:m(gr)},{default:E(()=>{var T;return[c(O((T=m(s))!=null&&T.isStart?"保存":"保存并启用证书"),1)]}),_:1},8,["onClick"]),(be=m(s))!=null&&be.isSupportRenewal||((Ce=m(s))==null?void 0:Ce.type)===1?(L(),le(b,{key:0,type:"primary",class:"mr-[4px]",onClick:r[9]||(r[9]=T=>m(fu)())},{default:E(()=>[...r[23]||(r[23]=[c(" 续签证书 ",-1)])]),_:1})):Ee("",!0),m(s).csr?(L(),le(b,{key:1,type:"default",class:"mr-[4px]",onClick:r[10]||(r[10]=T=>m(br)())},{default:E(()=>[...r[24]||(r[24]=[c(" 下载证书 ",-1)])]),_:1})):Ee("",!0),(Ne=m(s))!=null&&Ne.isStart?(L(),le(b,{key:2,type:"default",onClick:m(yu)},{default:E(()=>[...r[25]||(r[25]=[c(" 关闭SSL ",-1)])]),_:1},8,["onClick"])):Ee("",!0)]),n(C,{options:m(dr),"list-style":"disc",class:"ml-[20px]"},null,8,["options"]),n(h,{title:"关闭证书到期提醒",showFooter:"",modelValue:m(xe),"onUpdate:modelValue":r[12]||(r[12]=T=>oe(xe)?xe.value=T:null),onConfirm:m(hr),onCancel:m(yr),area:["auto"]},{default:E(()=>[f("div",jr,[f("div",qr,[r[28]||(r[28]=f("i",{class:"svgtofont-el-warning-filled !text-[4rem] text-warning"},null,-1)),f("div",Ur,[r[27]||(r[27]=f("div",{class:"py-[.3rem] leading-[2.4rem] text-base"},"关闭证书到期提醒后将不在提醒和证书到期,是否继续操作?",-1)),f("div",Gr,[r[26]||(r[26]=f("div",null,"应用配置",-1)),n(A,{modelValue:m(ke),"onUpdate:modelValue":r[11]||(r[11]=T=>oe(ke)?ke.value=T:null),class:"!w-[20rem] ml-2rem"},{default:E(()=>[n(S,{label:"应用到当前站点",value:!1}),n(S,{label:"应用到所有未设置过的站点",value:!0})]),_:1},8,["modelValue"])])])]),n(C,{options:[{content:"任务优先级:单个站点的任务优先于所有站点的任务。"}],"list-style":"disc",class:"ml-4rem mt-2rem"})])]),_:1},8,["modelValue","onConfirm","onCancel"])])}}}),zr=ze(Jr,[["__scopeId","data-v-ec17f944"]]),{siteInfo:U,siteType:Qe}=_e(),{isRefreshLetSSL:Ye,sslDnsApiInfo:Os,otherPopup:Ms}=J(),{jumpSslTabEvent:js}=Ie(),qs=y(!1),X=Xe({}),He=y([]),Xt=y([]),Ve=y(!1),rt=y(""),Us=y(!1),Oe=y("-1"),Wr=e=>{var o;const t=u=>u<=0||u<=7?"text-danger":u<=15?"text-orange":"text-primary",s=((o=e.domains)==null?void 0:o.length)>0,a=s?t(e.endDay):"text-default",l=s?e.endDay>0?"剩余".concat(e.endDay,"天"):"已过期":"--";return n("span",{class:a},[l])},Kr=e=>{let t="";switch(e.status){case"pending":if(e.expires<new Date().getTime()/1e3)return t=n("span",null,[c("--")]),t;t=n("span",{class:"text-[#e6a23c]"},[c("待验证")]);break;default:t=n("span",{class:"text-primary"},[c("订单完成")])}return t},Xr=[{content:()=>n("span",{class:"text-danger"},[c("注意:请勿将SSL证书用于非法网站")])},{content:()=>n("span",null,[c("Let's Encrypt 证书申请和续签限制"),n("a",{class:"bt-link",href:"https://letsencrypt.org/zh-cn/docs/rate-limits/",target:"_blank"},[c("点击查看")])])},{content:()=>n(Fe,null,[c("Let's Encrypt因更换根证书,部分老旧设备访问时可能提示不可信,考虑购买")," ",n("span",{class:"bt-link",onClick:()=>js("busSslList")},[c("[商业证书]")])])},{content:"申请之前,请确保域名已解析,如未解析会导致审核失败"},{content:"Let's Encrypt免费证书,有效期3个月(IP类型6天),支持多域名。默认会自动续签"},{content:"若您的站点使用了CDN或301重定向会导致续签失败"},{content:"在未指定SSL默认站点时未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点"},{content:"如开启后无法使用HTTPS访问,请检查安全组是否正确放行443端口"}],Se=y([{label:"解析域名",prop:"domain"},{label:"记录值",showOverflowTooltip:!0,prop:"auth_value",render(e,t){const s=X.auth_type==="dns"?e.auth_value:e.file_path;return n("div",{class:"flex items-center"},[n("div",{class:"truncate w-[15rem]"},[s]),n("span",{class:"svgtofont-icon-copy ml-[4px] text-secondary text-medium w-[1.6rem] cursor-pointer",onClick:()=>Me({value:s})},null)])}},{label:"类型",prop:"type",render:(e,t)=>X.auth_type==="dns"?n("span",null,[e.type]):n("div",{class:"flex items-center"},[n("div",{class:"truncate w-[15rem]"},[e.content]),n("span",{class:"svgtofont-icon-copy ml-[4px] text-secondary text-medium w-[1.6rem] cursor-pointer",onClick:()=>Me({value:e.content})},null)])},{label:"必需",prop:"must",width:100}]),Zr=y(!1),Gs=async()=>{try{const e=await w({loading:Zr,request:Pa({siteName:U.value.name,status_id:Oe.value}),data:Array});return{data:e,total:e.length,other:{}}}catch(e){return{data:[],total:0,other:{}}}},Qr=async({index:e})=>{try{const t=await w({loading:"正在获取证书信息,请稍后...",request:Va({index:e}),message:!1,data:{status:Boolean,msg:String}});return t.status?window.open(t.msg):D.request(t),{status:t.status,msg:t.msg}}catch(t){return{status:!1,msg:"下载失败"}}},Ft=async({index:e},t=!1,s=U.value.name)=>{try{const a={index:e,siteName:s};if(!t)return await k({title:"部署证书",area:50,btn:"确定",component:()=>B(()=>import("./deploy-confirm.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{...a,cert_type:"le"}}),!1;if(!await Vt({index:e}))return!1;const o=await w({loading:"正在部署证书,请稍候...",request:Qe.value==="docker"?Ra(a):cs(a),message:!1,data:{status:Boolean,msg:String}});return ta(o,t),o.status&&js("currentCertInfo"),{status:o.status,msg:o.msg}}catch(a){return{status:!1,msg:"部署失败"}}},Yr=async({index:e})=>{try{await Y({title:"删除证书订单",content:"确定删除证书订单吗?"});const t=await w({loading:"正在删除证书,请稍候...",request:Ha({index:e}),message:!0});return Ye.value=!0,{status:t.status,msg:t.msg}}catch(t){return{status:!1,msg:"删除失败"}}},eo=async e=>{var s,a,l;const{data:t}=await w({loading:"正在验证证书申请状态,请稍后...",request:Oa({index:e.index}),message:!1});if(t.hasOwnProperty("status")&&t.hasOwnProperty("msg"))D.request(t);else{Xt.value=t.auths,t.hasOwnProperty("error")?(Ve.value=t.error,rt.value=t.error_msg):(Ve.value=!1,rt.value=""),Object.assign(X,e),He.value=[],(s=t.auths)==null||s.forEach(u=>{He.value.push(u.data)});const o=e.auth_type==="dns";Se.value[1].label=o?"记录值":"文件路径",Se.value[1].prop=o?"auth_value":"file_path",Se.value[2].label=o?"类型":"文件内容",Se.value[2].prop=o?"type":"content",Zt.value[1].content="可通过CMD命令来手动验证域名解析是否生效: nslookup -q=txt _acme-challenge.".concat((l=(a=He.value[0])==null?void 0:a.domain)==null?void 0:l.replace("*.","")),k({title:"手动".concat(X.auth_type==="dns"?"解析TXT记录":"创建验证文件"),area:70,component:()=>n("div",{class:"p-[1.5rem]"},[c("请按以下列表做TXT解析:"),n("span",{class:"ml-[.4rem] text-danger"},{errorMsg:rt}),n(he,null,{content:()=>n("div",{class:"max-h-[38rem] overflow-auto"},[Xt.value.map((u,r)=>u.data.length>0&&n("div",{key:r},[n("span",null,[c("验证域名:"),u.domain]),n(ls,{class:"my-[1rem]",column:Se.value,data:u.data},null),Ve.value&&n("div",{class:"flex justify-end"},[n(Z,{type:"default",onClick:()=>to(u)},{default:()=>[c("验证")]})])]))]),"footer-right":()=>!Ve.value&&n(Z,{type:"default",onClick:Js},{default:()=>[c("验证")]})}),n(ye,{options:Zt.value,listStyle:"disc",class:"ml-[20px]"},null)])}),Ye.value=!0}},to=async e=>{const t=await de(),{data:s}=await ps({index:X.index,domain:e.domain});t._props.onCancel(),s.status==="valid"?D.success("验证成功"):s.status===!0?(qs.value=!1,Ft({...s,index:X.index},!0)):tt(s,e.data,X)},so=async({index:e})=>{const t=await de(),s=await w({request:Ma({index:e}),message:!1,data:{status:Boolean,msg:String}});t._props.onCancel(),D.msg({dangerouslyUseHTMLString:!0,message:s.msg,type:s.status?"success":"error",duration:s.status?2e3:0,showClose:!s.status}),s.status&&Gs()},Js=async()=>{const e=await de(),t=await w({request:ja({index:X.index}),message:!1});e._props.onCancel(),t.status===!0?(qs.value=!1,Ft({...t,index:X.index},!0)):tt({msg:t.data},He.value,X)},ao=()=>{Us.value=!1,ua({})},Zt=y([{content:"解析域名需要一定时间来生效,完成所以上所有解析操作后,请等待1分钟后再点击验证按钮"},{content:""},{content:"若您使用的是宝塔云解析插件,阿里云DNS,DnsPod作为DNS,可使用DNS接口自动解析"}]),It=y([]),me=y("dns"),zs=y(!1),Ws=async(e={id:U.value.id})=>{try{const t=await w({request:Qe.value=="docker"?qa(e):Ua(e),data:{domains:Array}});return G.domain=t.domains.map(s=>s.name),It.value=t.domains,Us.value&&(G.checkAll=!0,no(!0)),{data:t.domains,status:!0,msg:"获取站点数据成功"}}catch(t){return{status:!1,msg:"获取站点数据失败"}}},di=async e=>{try{e=Cn(e.value);const t=Qe.value,s=U.value.name;if(e.checkList.length===0)return D.error("请选择一个域名"),!1;const a=It.value.filter(d=>e.checkList.includes(d.name));if(e.resource==="1"&&io(a)&&!G.auth_to)return D.error("选中的域名存在未设置DNS接口配置"),!1;if(e.resource==="1"&&e.autoWildcard&&e.checkList.some(d=>d.indexOf("*")!==-1))return D.error("开启自动组合泛域名时不能选择泛域名"),!1;let l={domains:JSON.stringify(e.checkList),auth_type:e.resource=="1"?"dns":"http",auth_to:e.resource==="1"&&e.auth_to?"dns":JSON.stringify(e.checkList),auto_wildcard:e.autoWildcard?"1":"0",id:U.value.id,ca:e.ca};const o=await de(),u={proxy:{...l,site_name:s},docker:{...l,site_name:s},default:l},r=await ds(u[t]||u.default,t);o._props.onCancel();const i=await Ms.value;return r.status&&(i==null||i.unmount()),Nt(r.data,e),Ye.value=!0,r.status}catch(t){return D.error("程序发生错误!"),!1}},mi=e=>{k({isAsync:!0,title:"配置DNS接口",area:50,component:()=>B(()=>import("./set-domain-dns.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{row:e,refresh:Ws},showFooter:!0})},fi=e=>{var s;const t=me.value;if(t!=="dns"&&t!=="http"){const a=(s=Os.value)==null?void 0:s.find(l=>l.value===t);if(a){const l=!a.data;(!e||e&&l)&&sa({title:"设置".concat(a.info.title,"接口"),row:a.info})}}},no=e=>{const t=It.value.filter(s=>s.apply_ssl===1);G.checkList=e?t.map(s=>s.name):[],zs.value=!1,Et(()=>{Ks.value&&(G.resource="0")})},vi=e=>{const t=e.length;G.checkAll=t===G.domain.length,zs.value=t>0&&t<G.domain.length,Et(()=>{Ks.value&&(G.resource="0")})},G=Xe({ca:"litessl",resource:"0",auth_to:!1,autoWildcard:!1,checkAll:!1,domain:[],checkList:[]}),Ks=$(()=>G.checkList.some(e=>uo(e))),lo=y([{content:"如开启后无法使用HTTPS访问,请检查安全组是否正确放行443端口"},{content:()=>n("span",null,[c("在DNS验证中,我们提供了多种自动化DNS-API,并提供了手动模式-"),n("span",{class:"bt-link",onClick:()=>{ts(),ss.push({name:"domain"})}},[c("点击添加DNS接口")])])},{content:"使用DNS接口申请证书可自动续期,手动模式下证书到期后需重新申请"}]),ro=[{content:()=>n("span",{class:"text-danger"},[c("注意:请勿将SSL证书用于非法网站")])},{content:"使用【腾讯云DnsPod/阿里云DNS】等接口前您需要先在弹出的窗口中设置对应接口的API"},{content:"申请SSL的域名不要带下划线"},{content:"申请SSL的域名不要带下划线"}],oo=y([{content:()=>n("span",null,[" ",c("Let's Encrypt 证书申请和续签限制")," ",n("a",{class:"bt-link",target:"_blank",href:"https://letsencrypt.org/zh-cn/docs/rate-limits/"},[c("点击查看")])])},{content:"IP类型域名仅支持文件验证"},{content:"申请之前,请确保域名已解析,如未解析会导致审核失败"},{content:"Let's Encrypt免费证书,有效期3个月(IP类型6天),支持多域名。默认会自动续签"},{content:"若您的站点使用了CDN或301重定向会导致续签失败"},{content:"在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点"}]),yi=$(()=>{const e=G.resource==="0"?oo.value:lo.value,t=ro.concat([]);return t.splice(1,0,...e),t}),uo=e=>/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(e),hi=()=>{Object.assign(G,{resource:"0",auth_to:!1,autoWildcard:!1,checkAll:!1,domain:[],checkList:[]})},io=e=>e.some(t=>t.dns_status===0),co=y("正在申请证书..."),Qt=y(),gi=async()=>{Qt.value=setInterval(async()=>{try{await w({request:Wa({filename:"/www/server/panel/logs/letsencrypt.log",num:10}),data:{msg:[String,co]}})}catch(e){clearInterval(Qt.value)}},2e3)},po=y(),ot=y([{title:"文件验证 - HTTP",name:"http",data:!1,config:!1}]),_i=async e=>{const{dns:t,id:s}=e;let a={domains:JSON.stringify(t),auth_type:"http",auth_to:s||"dns",auto_wildcard:"0"};if(me.value==="http"){const r=JSON.stringify(t);if((r==null?void 0:r.indexOf("*."))!==-1)return D.error("包含通配符的域名不能使用文件验证(HTTP)!")}else{if(me.value!=="dns"){const{data:r,info:{data:i}}=Os.value.find(d=>d.value===me.value);if(r)a.auth_to="".concat(me.value,"|").concat(i[0].value,"|").concat(i[1].value);else{D.error("指定dns接口没有设置密钥信息");return}}a.auth_type="dns"}a.id=U.value.id,a.siteName=U.value.name,(await Ms.value).unmount();const o=await de(),{data:u}=U.value.project_type=="proxy"||U.value.project_type=="nginx"||U.value.project_type=="docker"?await Ga({...a,site_name:U.value.name},U.value.project_type=="docker"?"docker":"proxy"):await ds(a,Qe.value);o==null||o.unmount(),Nt(u,a)},bi=async()=>{me.value="http";const{data:e}=await aa();ot.value=[{title:"文件验证 - HTTP",name:"http",data:!1,config:!1}],e&&Array.isArray(e)&&(ot.value=ot.value.concat(e))},mo=y([]),Ci=async()=>{try{await w({request:Ja(),data:{data:[Array,mo]}})}catch(e){return{data:[],total:0,other:{}}}},Ei=async e=>{try{if(!e.dns_id){D.error("请选择验证类型");return}const t={dns_id:e.dns_id,ids:JSON.stringify(e.ids)},s=await w({loading:"正在配置DNS接口,请稍候...",request:za(t),message:!0});return s.status&&(e.dns_id="",e.ids=[],Ws()),s.status}catch(t){return!1}},fo=async(e,t,s,a)=>{const{label:l,value:o}=a;let u=[];s.value.forEach(r=>{r.index!==void 0&&r.index!==null&&u.push(r.index)}),await k({title:"批量".concat(l,"证书"),area:46,component:()=>B(()=>import("./index127.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{resultTitle:"批量".concat(l,"证书"),resultData:s.value,resultColumn:[{label:"名称",prop:"domains"},Cs()],autoTitle:"批量".concat(l,"证书")},showFooter:!0,onConfirm:async()=>{let r;try{await Y({icon:"warning-filled",title:"证书删除确认",content:"批量删除证书,是否继续操作?"}),r=Le().load("正在批量删除证书,请稍候...");let i={index:u.join(","),local:1,cloud:0};const{data:d}=await fs(i);let p=[],g=[];Te(d.finish_list)&&(d.finish_list.forEach(b=>{p.push({name:b.name,status:b.status,msg:b.status?"删除成功":b.msg})}),g=[{label:"名称",prop:"name"},{label:"结果",render:b=>{let C=b.msg,S="";return b.status?S="text-primary":S="text-danger",re("span",{class:S},C)}}],Ye.value=!0),Ds({resultTitle:"批量".concat(l,"证书"),resultData:p,resultColumn:g})}catch(i){}finally{r==null||r.close()}}})};function vo(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Sn(e)}const yo=ge({__name:"index",setup(e,{expose:t}){const{isRefreshLetSSL:s,sslAlertState:a}=J(),l=as([{label:"删除",value:"delete",event:fo}]),{BtTable:o,BtRefresh:u,refresh:r,BtBatch:i}=_t({request:Gs,columns:[Dt({key:"index"}),{label:"域名",prop:"domains",render:(d,p)=>n("span",{class:"w-full whitespace-pre-line"},[d.domains?d.domains.join("\n"):"--"])},{label:"品牌",prop:"ca",width:100,showOverflowTooltip:!0,render:d=>{const p={litessl:"LiteSSL",letsencrypt:"Let's Encrypt"};return n("span",{class:"truncate"},[p[d.ca]||d.ca||p.letsencrypt])}},{label:"到期时间",prop:"expires",width:90,render:Wr},{label:"订单状态",prop:"status",width:130,isCustom:!0,renderHeader(){const d=[{title:"全部",key:"-1"},{title:"验证中",key:"0"},{title:"订单完成",key:"1"},{title:"即将到期",key:"2"},{title:"已到期",key:"3"}];return re("div",{class:"flex items-center flex-nowrap"},["",re(En,{onCommand:p=>{Oe.value=p,r()}},{default:()=>re("span",{class:"text-small flex items-center"},[[n("span",{class:"status-header-text"},[c("订单状态"),Oe.value==="-1"?"(全部)":"(".concat(d.find(p=>p.key===Oe.value).title,")")])],re("i",{class:"svgtofont-el-arrow-down "})]),dropdown:()=>{let p;return n(wn,null,vo(p=d.map(g=>n(Dn,{command:g.key},{default:()=>[g.title]})))?p:{default:()=>[p]})}})])},render:Kr},{label:"验证方式",prop:"auth_type",width:70,render:(d,p)=>n("span",null,[d.auth_type==="dns"?"DNS验证":"文件验证"])},{label:"操作",prop:"ps",width:180,showOverflowTooltip:!1,align:"right",render:(d,p)=>{let g=[];return d.status!=="invalid"&&(d.status!=="pending"?g=[n("span",{class:"cursor-pointer bt-link",onClick:()=>Ft(d,!1)},[c("部署")]),n(K,null,null),n("span",{class:"cursor-pointer bt-link",onClick:()=>Qr(d)},[c("下载")]),n(K,null,null),n("span",{class:"cursor-pointer bt-link",onClick:()=>so(d)},[c("续签")]),n(K,null,null)]:d.expires>=new Date().getTime()/1e3&&d.auth_type!=="http"&&(g=[n("span",{class:"cursor-pointer bt-link",onClick:()=>eo(d)},[c("验证")]),n(K,null,null)])),g.push(n("span",{class:"cursor-pointer bt-link",onClick:()=>Yr(d)},[c("删除")])),g}}],extension:[gt(),l,We(s)]});return t({init:r}),(d,p)=>{const g=Z,b=he,C=ye;return L(),M("div",null,[n(b,null,{"header-left":E(()=>[n(g,{type:"primary",onClick:m(ao)},{default:E(()=>[...p[0]||(p[0]=[c("申请证书",-1)])]),_:1},8,["onClick"])]),"header-right":E(()=>[n(m(u))]),"footer-left":E(()=>[n(m(i))]),content:E(()=>[n(m(o),{"default-sort":{prop:"date",order:"descending"},maxHeight:m(a)?280:320},null,8,["maxHeight"])]),_:1}),n(C,{options:m(Xr),"list-style":"disc",class:"pl-1rem mt-4"},null,8,["options"])])}}});_e();Ke(Ze());const{payment:ho}=rs(),{bindUser:go}=_s(ho.value),{isRefreshSSL:Di,sslTabActive:_o,otherPopup:Xs,isRefreshBtSSL:wi}=J();Ie();const Re=Le(),bo=["企业级证书","极速申请","防劫持/防篡改","提高SEO权重","赔付保证","不成功可退款","官方推荐"],Co=[{content:()=>n("span",{class:"text-danger"},[c("如果您的站点有使用CDN、高防IP、反向代理、301重定向等功能,可能导致验证失败")])},{content:()=>n("span",{class:"text-danger"},[c("原测试证书已经停止服务,如需查看证书列表请前往官网后台。点击"),n("a",{class:"bt-link",href:"https://www.bt.cn/admin/safe"},[" ",c("官网后台")," "]),c("跳转")])},{content:"申请www.bt.cn这种以www为二级域名的证书,需绑定并解析顶级域名(bt.cn),否则将验证失败。"},{content:"商用证书相对于普通证书,具有更高的安全性、赔付保障和支持通配符和多域名等方式。"},{content:"暂不支持.su俄罗斯域名后缀申请证书,详情请联系客服咨询。"}],Eo=async e=>{const{p:t,limit:s}=e;try{const{data:a}=await bt({url:"/api/v1/ssl/get_order_list",p:t,limit:s}),{data:l}=a;return l?{data:l.data,total:l.count}:{data:[],total:0,other:{}}}catch(a){return{data:[],total:0,other:{}}}},Do=e=>{var u;const t=(u=e==null?void 0:e.cert_info)==null?void 0:u.not_after;if(!t)return n("span",null,[c("--")]);let s=0;if(typeof t=="string"){const r=new Date(t).getTime();s=Number.isNaN(r)?0:r}if(!s)return n("span",null,[c("--")]);const a=Math.ceil((s-Date.now())/864e5);if(a>30)return n("span",null,[new Date(s).toLocaleDateString()]);const l=a<=7?"text-danger":"text-warning",o=a>0?"剩余".concat(a," 天"):"已过期";return n("span",{class:l},[o])},wo=()=>{k({isAsync:!0,title:"购买宝塔证书",area:[79],component:()=>B(()=>import("./index165.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},So=()=>{if(!go.value)return Es(),!1;_o.value="btSslList",wo()},Ao=e=>{var l;const t=(o,u)=>n("span",{class:"bt-link",onClick:u},[o]),s=[];if(e.status===0){const o=t("完善资料",()=>ko(e));s.push(o)}else{const o=(l=e.cert_info)==null?void 0:l.status;if(o===0){const u=t("验证",()=>To(e));s.push(u)}else if(o===1){const u=t("部署",()=>Bo(e)),r=t("下载",()=>Fo(e)),i=t("查看",()=>Lo(e));s.push(u),s.push(r),s.push(i)}}const a=[];return s.map((o,u)=>{a.push(o),u<s.length-1&&a.push(n(K,null,null))}),a},Yt=(e,t,s,a=300)=>{const l=typeof e=="string"?n("div",{class:"flex items-center p-[2px] whitespace-pre-line"},[e]):n("div",{class:"flex items-center p-[2px] whitespace-nowrap"},[e]);return n(Be,{trigger:"hover",placement:"left","popper-class":"popover-default",width:a,enterable:!1,"open-delay":100,"close-delay":0},{default:()=>l,reference:()=>n("span",{class:s},[t])})},xo=e=>{var a;const t=[];if(e.status===0)return[n("span",{class:"text-warning"},[c("待完善资料")])];const s=(a=e.cert_info)==null?void 0:a.status;switch(Number(s)){case 0:t.push(Yt("如填写错误,联系人工可重置订单","验证中","text-orange",240));break;case 1:t.push(n("span",{class:"text-primary"},[c("已签发")]));break;case-1:t.push(Yt("该订单存在异常,请联系人工重置订单","异常","text-danger",240));break;default:t.push(n("span",null,[c("--")]))}return t},ko=async e=>{try{Xs.value=await k({title:"完善宝塔证书资料",area:68,component:()=>B(()=>import("./index529.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e})}catch(t){}},To=async e=>{Xs.value=await k({title:"验证域名-"+(e.product_id===3?"文件验证":"DNS验证"),area:64,compData:e,component:()=>B(()=>import("./index447.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},Bo=async e=>{const t=e.cert_info.certificate+"\n"+e.cert_info.ca_certificate,s=e.cert_info.private_key;try{await k({title:"部署证书",area:50,btn:"确定",component:()=>B(()=>import("./deploy-confirm.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{key:s,csr:t,cert_type:"bt",title:e.product_name,domainName:[e.cert_info.domain]}})}catch(a){}},Lo=e=>{k({title:"证书详情",area:64,component:()=>B(()=>import("./index284.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e})},Fo=async e=>{var s;const t=Re.load("正在下载证书,请稍后...");try{const{data:a}=await bt({url:"/api/v1/ssl/cert/download_cert",order_id:e.id});if(!((s=a.data)!=null&&s.base64)){Re.error("获取证书文件失败");return}const l=Io(a.data.base64,"application/zip"),o=URL.createObjectURL(l),u=document.createElement("a");u.href=o,u.download=a.data.file_name,document.body.appendChild(u),u.click(),document.body.removeChild(u),URL.revokeObjectURL(o),Re.success("证书下载成功")}catch(a){Re.error("下载证书失败,请稍后重试")}finally{t&&t.close()}},Io=(e,t="application/octet-stream")=>{const s=e.replace(/^data:[^;]*;base64,/,""),a=atob(s),l=new Array(a.length);for(let u=0;u<a.length;u++)l[u]=a.charCodeAt(u);const o=new Uint8Array(l);return new Blob([o],{type:t})},$o={class:"h-full"},No={class:"flex flex-col w-full"},Po={class:"recommendList"},Vo={class:"text-small ml-[8px] text-stroke-primary"},Ro={class:"flex flex-col w-full pt-[16px]"},Ho={class:"flex items-center"},Oo={class:"flex items-center"},Mo=ge({__name:"index",setup(e,{expose:t}){const{sslAlertState:s,isRefreshBtSSL:a}=J(),{BtTable:l,BtRefresh:o,refresh:u,BtPage:r}=_t({request:Eo,columns:[{label:"域名",prop:"domain",width:120,render:d=>n("span",{class:"w-full whitespace-pre-line"},[d.cert_info?d.cert_info.domain:"--"])},{label:"证书类型",prop:"product_name",showOverflowTooltip:!0},{label:"到期时间",width:100,render:Do,showOverflowTooltip:!0},{label:"状态",prop:"expire",width:160,showOverflowTooltip:!1,render:d=>xo(d)},{label:"操作",prop:"ps",width:170,align:"right",render:d=>Ao(d)}],extension:[gt(),We(a)]}),i=vs(()=>{const d=document.querySelector("#pane-busSslList");d&&d.click()},1e3);return t({init:u}),(d,p)=>{const g=Z,b=ht,C=he,S=ye;return L(),M("div",$o,[f("div",No,[f("div",Po,[(L(!0),M(Fe,null,Ct(m(bo),(A,h)=>(L(),M("div",{key:h,class:ys("".concat(h===6?"w-[22rem]":"w-[14rem]"," recomItem"))},[p[0]||(p[0]=f("i",{class:"svgtofont-el-check font-bold text-[#ff8d00] text-medium"},null,-1)),f("span",Vo,O(A),1)],2))),128))]),f("div",Ro,[n(C,null,{"header-left":E(()=>[f("div",Ho,[n(g,{type:"primary",onClick:m(So),class:"mr-4"},{default:E(()=>[...p[1]||(p[1]=[c(" 申请证书 ",-1)])]),_:1},8,["onClick"]),n(Ps,{placement:"right"},{default:E(()=>[f("div",Oo,[n(b,{src:"/static/icons/we-com.svg",class:"mx-[4px] w-2rem h-2rem",all:!0}),p[2]||(p[2]=f("span",{class:"bt-link"},"售前客服",-1))])]),_:1})])]),"header-right":E(()=>[n(m(o))]),content:E(()=>[n(m(l),{"max-height":300,onWheel:m(i)},null,8,["onWheel"])]),"footer-right":E(()=>[n(m(r),{size:"small"})]),_:1})])]),n(S,{class:"mt-2",options:m(Co),listStyle:"disc"},null,8,["options"])])}}}),jo=ze(Mo,[["__scopeId","data-v-9438a8f6"]]),{payment:qo}=rs(),{bindUser:Uo}=_s(qo.value),{sslInfo:ve,certVerifyInfo:Go,sslTabActive:Zs,letApplyInfo:ie,isRefreshSSL:Jo,pollingPopup:zo,sslDnsApiInfo:Wo,productInfo:Ko,orderInfo:Qs,otherPopup:et}=J(),{siteInfo:j,siteType:Ys,isBindExtranet:ut,isRefreshList:Ge,batchConfig:Xo,activeType:Zo,isSiteMult:es}=_e(),{isRefreshLocalList:Je}=Ke(Ze()),{getSSLInfoEvent:Qo,jumpSslTabEvent:Yo}=Ie(),ft=y(!1),eu=$(()=>{var e,t;return'当前证书 -<span class="'.concat((e=ve.value)!=null&&e.isStart?"text-primary":"text-danger",'">[').concat((t=ve.value)!=null&&t.isStart?"已部署SSL":"未部署SSL","]</span>")}),Si=$(()=>[{label:()=>n("span",{innerHTML:eu.value},null),name:"currentCertInfo",lazy:!0,render:()=>n(zr,null,null)},{label:"商用SSL证书",name:"busSslList",lazy:!0,render:()=>n(Vl,null,null)},{label:"免费证书",name:"letsEncryptList",lazy:!0,render:()=>n(yo,null,null)},{label:"证书夹",name:"certFolderList",lazy:!0,render:()=>n(ir,null,null)},...ft.value?[{label:"活动证书(已过期)",name:"btSslList",lazy:!0,render:()=>n(jo,null,null)}]:[]]),tu=e=>{k({isAsync:!0,title:"购买商业证书",area:[82],compData:{callback:()=>{typeof e=="function"&&e()}},component:()=>B(()=>import("./apply-bus-ssl.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},ea=e=>{if(!Uo.value)return Es(),!1;Zs.value="busSslList",tu(e)},Ai=async e=>{const t=D.load("正在获取证书..."),s=await kt();if(t.close(),s.total){e();return}ea(()=>e())},su=async()=>{const{data:e}=await bt({url:"/api/v1/ssl/get_order_list",p:1,limit:10,search:"",status:"",product_id:""}),{data:t}=e;return!!t.count},au=async()=>{var s,a;let e=(s=j.value.project_type)==null?void 0:s.toLowerCase();Ys.value=e,ut.value=!!((a=j.value.project_config)!=null&&a.bind_extranet),["php","html","phpasync","proxy","docker"].includes(e)&&(ut.value=!0),ut.value&&nu(),Zs.value!=="btSslList"?ft.value=await su():ft.value=!0,xn()},nu=async()=>{const e=D.load("正在获取站点证书部署信息,请稍候...");await Q(),e.close()},Q=async()=>{try{const{data:e}=await Qo({siteName:j.value.name});return lu(e),{data:e,status:!0,msg:"获取证书信息成功"}}catch(e){}},lu=e=>{const{type:t,httpTohttps:s,https_mode:a,index:l,auth_type:o,key:u,csr:r,cert_data:{dns:i=[],subject:d="",issuer:p="",endtime:g="",notAfter:b=""}={},push:C,status:S,oid:A}=e;ve.value={...ve.value,isCertInfo:!!d,https:s,httpsMode:a,type:t,key:u||"",csr:r||"",index:l||"",authType:o||"",oid:A,dns:i||[],subject:d,issuer:p,endtime:g,notAfter:b,push:C,pushAlarm:!!(typeof C=="object"?C.status:C),isSupportRenewal:(()=>{let h=!1;return g<=30&&(h=!0),t===2&&g<0&&(h=!0),(t===0||t===-1)&&(h=!1),h})(),isStart:S}},ru=async e=>{Qs.value=e.orderInfo,et.value=await k({title:"完善商业证书资料",area:64,component:()=>B(()=>import("./bus-cert-verify-info.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e})},$t=async e=>{Go.value=e,et.value=await k({title:"验证域名-"+(e.isCNAME?"DNS验证":"文件验证"),area:64,component:()=>B(()=>import("./bus-cert-verify-way.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})},ou=async e=>{var o;const{hash:t,subject:s,list:a,type:l}=e;if(await Y({title:"部署证书",content:"批量部署证书后,原有证书将被覆盖,是否继续?",icon:"warning-filled"}),es.value){const{enable:u,exclude:r}=Xo.value,i=kn(a,r,u,{params:{certName:s,project_type:Zo.value.toUpperCase(),ssl_hash:t}});await w({loading:"正在部署证书,请稍候...",request:Ya(i),success:async d=>{let{data:p}=Tn(d.data);p=p.map(g=>({...g,name:g.siteName})),Bn(p,{title:"部署证书"})}}),es.value=!1,Ge.value=!0,Je.value=!0}else{const u=a.map(p=>({ssl_hash:t,siteName:p.name,certName:s})),r={proxy:{BatchInfo:JSON.stringify(u),site_name:j.value.name},docker:{BatchInfo:JSON.stringify(u),site_name:j.value.name},default:{BatchInfo:JSON.stringify(u)}},i=r[l]||r.default,d=await w({loading:"正在部署证书,请稍候...",request:en(i,l),data:{faildList:Array,successList:Array}});(o=j.value)!=null&&o.name&&Q(),Ge.value=!0,Je.value=!0,await Fn({title:"批量部署结果",resultTitle:"部署证书操作",resultData:[...d.faildList.map(p=>({name:p.siteName,status:!1,msg:p.msg||p.error_msg})),...d.successList.map(p=>({name:p.siteName,status:!0}))]})}},ta=(e,t)=>{if(e.status)D.request(e),Q(),Ge.value=!0,Jo.value=!0,Je.value=!0;else{const s=t?"当前证书已成功申请!自动部署失败,请尝试手动部署证书!\n":"";D.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:s+e.msg,type:e.status?"success":"error",showClose:!e.status})}},sa=e=>k({isAsync:!0,title:e.title,area:50,component:()=>B(()=>import("./dns-verify-info.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),showFooter:!0,compData:e.row}),aa=async()=>{try{const e=await w({request:tn(),data:Array});return Te(e)&&uu(e),{data:e,status:!0}}catch(e){return{status:!1,msg:"获取DNS接口信息失败"}}},uu=e=>{Wo.value=e.filter(t=>t.name!=="CloudxnsDns").map(t=>({label:t.title,value:t.name,config:!!t.data,data:t.data?t.data[0].value!="":!1,info:t}))},xi=async e=>{try{const t={};e.forEach(l=>{t[l.key]=l.value});const s={pdata:JSON.stringify(t)},a=await w({loading:"正在配置DNS接口,请稍候...",request:sn(s),message:!0});if(await aa(),a.status)return a.status}catch(t){return{status:!1,msg:"验证失败"}}},tt=(e,t,s,a)=>{var u,r,i,d,p,g,b,C;if(e.msg&&os(e.msg)){D.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:e.msg,type:"error",showClose:!0,duration:0});return}let l="",o=e.msg[0];if(((u=e.msg[1])==null?void 0:u.challenges)===void 0)l+="\n			<p><span>响应状态:</span>".concat(e.msg[1].status,"</p>\n			<p><span>错误类型:</span>").concat(e.msg[1].type,"</p>\n			<p><span>错误来源:</span><a href='").concat((a==null?void 0:a.ca)==="litessl"?"https://litessl.cn/":"https://letsencrypt.org/","' style='color:#20a53a'>").concat((a==null?void 0:a.ca)==="litessl"?"LiteSSL":"Let's Encrypt",'官网</a></p>\n			<div class="flex flex-col">\n				错误代码:\n				<pre class="!text-white !bg-[#333] !inline-block !ml-[4px]">\n					').concat(e.msg[1].detail,"\n				</pre>\n			</div>");else if(!((r=e.msg[1])!=null&&r.challenges[1])&&((i=e.msg[1])!=null&&i.challenges[0])&&(e.msg[1].challenges[1]=e.msg[1].challenges[0]),e.msg[1].status==="invalid"){let S="";for(const x of t){const I=x.outerText||x.auth_value;if(I!=null&&I.includes(e.msg[1].identifier.value)){const P=I.split("	");if((P==null?void 0:P.length)>1){S=P[1];break}}}const A=(d=e.msg[1])==null?void 0:d.identifier.value,h=(p=e.msg[1])==null?void 0:p.challenges[1],v=h==null?void 0:h.error.detail;if(l+="\n				<p><span>验证域名:</span>".concat(A,"</p>\n			"),(s==null?void 0:s.type)==="dns"||(s==null?void 0:s.auth_type)==="dns"){const x="_acme-challenge.".concat(A);l+="\n					<p><span>验证解析:</span>".concat(x,"</p>\n					<p><span>验证内容:</span>").concat(S||h.token,'</p>\n					<div class="flex flex-col">\n						错误代码:\n						<pre class="!text-white !bg-[#222] !inline-block !ml-[4px]">\n							').concat(v,"\n						</pre>\n					</div>\n				")}else{const x="http://".concat(A,"/.well-known/acme-challenge/").concat((g=e.msg[1])==null?void 0:g.challenges[0].token);l+='\n					<p><span>验证URL:</span><a class="text-primary" href=\''.concat(x,"' target='_blank'>点击查看</a></p>\n					<p><span>验证内容:</span>").concat((b=e.msg[1])==null?void 0:b.challenges[0].token,'</p>\n					<div class="flex flex-col">\n						错误代码:\n						<pre class="!text-white !bg-[#222] !inline-block !ml-[4px]">\n							').concat((C=e.msg[1])==null?void 0:C.challenges[0].error.detail,"\n						</pre>\n					</div>\n				")}l+="<p><span>验证结果:</span> <a class='text-danger'>验证失败</a></p>"}D.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,icon:"x",message:'\n			<div class="flex items-center justify-center mt-[.8rem] mb-2rem">\n				<i class="svgtofont-el-circle-close-filled mr-[.8rem] text-danger !text-[3rem]"></i>\n				<a style="color: red; font-size:16px">\n					'.concat(o,'\n				</a>\n			</div>\n			<div class="p-[2rem] border border-1 border-color-dark !rounded-base !mb-[12px] !leading-[26px] bg-light">\n				').concat(l,"\n			</div>\n		"),showClose:!0,duration:0})},de=()=>k({area:[50,25],showFooter:!1,component:()=>B(()=>import("./lets-encrypt-progress.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)}),iu=y([{label:"解析域名",prop:"name"},{label:"记录值",prop:"txt",render(e,t){return n("div",{class:"flex items-center"},[n("div",{class:"truncate w-[15rem]"},[e.txt]),n("span",{class:"svgtofont-icon-copy ml-[4px] text-secondary text-medium w-[1.6rem] cursor-pointer",onClick:()=>Me({value:e.txt})},null)])}},{label:"类型",prop:"type"},{label:"必需",prop:"force",width:100}]),na=y(),Nt=(e,t)=>{if(e.status===!1&&e.hasOwnProperty("msg")&&os(e.msg)){D.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:e.msg,type:"error",showClose:!0,duration:0});return}if(e.status===!0||e.status==="pending"||(e==null?void 0:e.save_path)!==void 0){if(e.status==="pending"&&e.auth_type==="dns"){du(e,t);let s=[];e.auths.forEach(o=>{let u=[];const r=o.domain.replace("*.","");u.push({name:"_acme-challenge.".concat(r),type:"TXT",txt:o.auth_value,force:"是"}),t.ca!=="litessl"&&u.push({name:r,type:"CAA",txt:'0 issue "letsencrypt.org"',force:"否"}),s.push({domain:o.domain,data:u})});const a=[{content:"解析域名需要一定时间来生效,完成所以上所有解析操作后,请等待1分钟后再点击验证按钮"},{content:"可通过CMD命令来手动验证域名解析是否生效: nslookup -q=txt _acme-challenge.".concat(e.auths[0].domain.replace("*.",""))},{content:"若您使用的是宝塔云解析插件,阿里云DNS,DnsPod作为DNS,可使用DNS接口自动解析"}],l=e.hasOwnProperty("error")?e.error:!1;Object.assign(X,e),na.value=k({title:"手动解析TXT记录",area:70,component:()=>n("div",{class:"p-[1.5rem]"},[c("请按以下列表做TXT解析:"),n(he,null,{content:()=>n("div",{class:"max-h-[38rem] overflow-auto"},[s.map((o,u)=>n("div",{key:u},[o.data.length>0&&n(Fe,null,[n("span",null,[c("验证域名:"),o.domain]),n(ls,{class:"my-[1rem]",column:iu.value,data:o.data},null),l.value&&n("div",{class:"flex justify-end"},[n(Z,{type:"default",onClick:()=>cu({index:e.index,domain:o.domain},t)},{default:()=>[c("验证")]})])])]))]),"footer-right":()=>!l.value&&n(Z,{type:"default",onClick:Js},{default:()=>[c("验证")]})}),n(ye,{options:a,listStyle:"disc",class:"ml-20x"},null)])});return}mu(e);return}tt(e,ie.value.dnsTable,ie.value.info,t)},cu=async(e,t)=>{const s=await de(),{data:a}=await ps(e);if(s==null||s.unmount(),a.status==="valid")D.success("验证成功");else if(a.status===!0){const l=await na.value;l&&l.unmount(),pu(a,!0)}else tt(a,ie.value.dnsTable,ie.value.info,t)},pu=async({index:e},t=!1,s=j.value.name)=>{const a=await w({loading:"正在部署证书,请稍候...",request:cs({index:e,siteName:s}),message:!1,data:{status:Boolean,msg:String}});ta(a,t)},du=(e,t)=>{ie.value.dnsTable=e.auths,ie.value.info.index=e.index,ie.value.info.type=t.auth_type},mu=async(e,t)=>{if(!e.private_key||!e.cert||!e.root){D.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:"部署失败,请关闭SSL后重新尝试部署!",type:"error",showClose:!0,duration:0});return}const{private_key:s,cert:a,root:l}=e,o=j.value.project_type,u={proxy:{site_name:j.value.name,key:s,csr:a+l},default:{type:1,siteName:j.value.name,key:s,csr:a+l}};await w({loading:"正在保存证书信息,请稍后...",request:is(u[o]||u.default,o),message:!0,success:r=>{if(r.status===!0)Q(),Yo("currentCertInfo");else{let i=r.msg;i="当前证书申请并验证成功,自动部署失败,请尝试手动部署证书!\n"+i,D.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:i,type:"error",showClose:!0,duration:0})}}})},ki=e=>{k({title:"支付成功",area:[60,60],component:()=>B(()=>import("./pay-bus-success.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e})},Ti=async({type:e,oid:t,index:s,authType:a}=ve.value,{name:l}=j.value)=>{if(e===3)ra(t,e);else if((s==null?void 0:s.length)===32&&s.indexOf("/")===-1&&a!=="dns")la(s);else{const{data:o}=await w({request:Ka({siteName:l,pem_file:s})});vu(o)}},fu=async({type:e,oid:t,index:s,authType:a}=ve.value,{name:l}=j.value)=>{e===3?ra(t,e):(s==null?void 0:s.length)===32&&s.indexOf("/")===-1&&a!=="dns"?la(s):ua(null,!0)},vu=async e=>{po.value=e,et.value=k({title:"续签Let's Encrypt证书",area:50,component:()=>B(()=>import("./lets-encrypt-renew.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e})},la=async e=>{const t=await de(),{data:s}=await w({request:Xa({index:e})});t._props.onCancel(),Nt(s,{auth_type:s.auth_type})},ra=(e,t)=>{switch(t){case 3:Pt(e);break}},Pt=async e=>{await Y({title:"商业证书续签",content:"当前证书订单需要重新生成新订单,需要手动续签,和重新部署证书,是否继续操作?"});const t={pdata:JSON.stringify({oid:e})},{data:s}=await w({loading:"正在续签商业证书,可能等待时间较长,请稍后...",request:Za(t)});if(vt(s)&&s.hasOwnProperty("order_info")){let a=s.order_info;oa({oid:s.oid,wxcode:s.wxcode,alicode:s.alicode,orderInfo:a,productInfo:{...a,productName:a.title,totalPrice:s.data.price,isRenew:!0}})}else D.request(s);Q()},oa=async(e,t)=>{Ko.value=e.productInfo,Qs.value=e.orderInfo,zo.value=k({title:"支付商业证书订单",area:[60],component:()=>B(()=>import("./pay-bus-ssl.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e,onCancel:()=>{typeof t=="function"&&t()}})},yu=async()=>{const e=Ys.value,t=j.value.name,s={proxy:{site_name:t},default:{updateOf:1,siteName:t}},a=s[e]||s.default;await w({loading:"正在关闭证书,请稍后...",request:Qa(a,e),message:!0,success:()=>{Ge.value=!0,Je.value=!0}}),Q()},ua=async(e,t)=>{et.value=await k({isAsync:!0,title:t?"续签免费证书":"申请免费证书",area:64,component:()=>B(()=>import("./applay-lest-ssl.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{...e,isRenew:t}})},Bi=()=>{k({component:()=>B(()=>import("./index147.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),area:52,compData:{title:"SSL证书需求反馈收集",type:28,isNoRate:!0,softName:"1",isCard:!1,id:993}})},hu=async(e,t)=>{const s=Le().load("正在进行第三方部署, 请稍后...");try{const{data:a}=await ln(e),l=a.status=="success";return l&&t&&t(),{msg:l?"部署成功":a.message,status:l}}catch(a){}finally{s.close()}},Vt=async e=>{const t=Le().load("正在验证证书完整链,请稍后...");try{const s=await rn(e),{status:a,msg:l}=s;return t.close(),a||await Y({title:"验证证书失败",content:"".concat(l,"<br>是否忽略提示继续操作?"),isHtml:!0})}catch(s){return!1}finally{t.close()}};export{Hu as $,ot as A,_i as B,po as C,Fu as D,ci as E,pi as F,ou as G,Ei as H,Ci as I,mo as J,Iu as K,mt as L,de as M,tt as N,ta as O,Q as P,qu as Q,jt as R,_ as S,Uu as T,Ps as U,Qn as V,pt as W,Gu as X,Ru as Y,qe as Z,zn as _,To as a,Ou as a0,Mu as a1,ju as a2,Ju as a3,G as a4,Ks as a5,yi as a6,di as a7,Us as a8,Ws as a9,ee as aA,Gt as aB,Ut as aC,$s as aD,ri as aE,Ot as aF,Ss as aG,zu as aH,ti as aI,Bt as aJ,ue as aK,Ku as aL,Ls as aM,si as aN,cl as aO,pl as aP,ai as aQ,Fs as aR,li as aS,sa as aT,Do as aU,xo as aV,aa,hi as ab,zs as ac,no as ad,vi as ae,uo as af,mi as ag,It as ah,Ft as ai,Vt as aj,hu as ak,kt as al,te as am,Wu as an,Zu as ao,oi as ap,Yu as aq,ne as ar,ct as as,Is as at,Qu as au,lt as av,ei as aw,ni as ax,ml as ay,Xu as az,ko as b,oa as c,Fo as d,ki as e,ru as f,ea as g,Bi as h,Ai as i,_l as j,El as k,gl as l,au as m,xi as n,Lo as o,gi as p,Qt as q,Ti as r,ii as s,Si as t,co as u,ui as v,se as w,bi as x,me as y,fi as z};
function __vite__mapDeps(indexes) {
  if (!__vite__mapDeps.viteFileDeps) {
    __vite__mapDeps.viteFileDeps = []
  }
  return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}