File: /www/server/panel/BTPanel/static/js/index395.js
import{c as pe,aC as Fe,r as y,e,x as m,g as et,aB as ge,o as fe,n as tt,j as V,k as B,v as n,p as l,C as X,q as r,y as G,F as Z,ad as ye,H as Ce,Q as me,J as Be,B as re,s as z,am as De,an as ke,ab as Se,bf as Ge,w as Je,L as Le,K as lt,aF as be,aV as at}from"./base-lib.js?v=1777008528";import{c as ve,X as st,cO as ue,B as ot,fc as nt,cN as $e,M as qe,k as we,Q as rt,W as ut,b as pt,a as it,cP as Pe,cZ as he,I as je,a2 as Me,du as de,w as Ke,c7 as He,f as Ie,e as ze,_ as Qe,d8 as dt,K as mt,dp as ct}from"./utils-lib.js?v=1777008528";import{addSiteGit as ft,getBranchList as vt,checkAutoInstall as Ne,createAsync as Oe,getSwooleCorrespondencePhp as _t,getSystemUserListAsync as Te,GetPHPVersion as Re,checkInstallAsync as bt,getPluginInfo as wt,addPhpSite as gt,setDeploymentInfo as yt,getDeploymentList as ht,createWebsiteMultiple as xt,getIgnoreAd as Vt,getFtpMysqlStatus as Ft,ignoreAd as Ct}from"./site.js?v=1777008528";import{u as Dt}from"./hooks.js?v=1777008528";import kt from"./index256.js?v=1777008528";import{e as St}from"./form-item.js?v=1777008528";import{w as xe,p as Ee,o as We}from"./index3.js?v=1777008528";import{u as _e}from"./useStore2.js?v=1777008528";import{s as ce,v as Pt,w as It}from"./useController19.js?v=1777008528";import{l as Ve,o as Et}from"./useController13.js?v=1777008528";import{_ as Ae}from"./index116.js?v=1777008528";import"./__commonjsHelpers__.js?v=1777008528";import"./index119.js?v=1777008528";import"./useMethod12.js?v=1777008528";import"./index192.js?v=1777008528";const At={class:"flex flex-col gap-8px"},Ut={class:"flex items-center gap-10px"},Lt=["data-clipboard-text"],$t={class:"flex items-center custom-refresh-select"},qt={class:"el-input-group__append !h-3rem !flex items-center"},Bt=pe({__name:"index",setup(se,{expose:te}){const le=Fe("popupClose"),{panel:J}=ve(),{isRefreshList:R}=_e();let M="/www/wwwroot/";const T=y(!1),H=y([]),a=y(!1),i=[{content:e("span",null,[m("Git部署教程可参考:"),e("a",{href:"https://docs.bt.cn/practical-tutorials/create-from-git-website",class:"bt-link",target:"_blank"},[m("https://docs.bt.cn/practical-tutorials/create-from-git-website")])])}],L=async u=>Pt(u,A),C=async(u=!1)=>{try{if(!D.value.repo){qe.error("请先填写仓库地址");return}we({loading:"正在获取分支列表,请稍后...",request:vt({repo:D.value.repo,force:u?1:0}),success:b=>{var k,P;H.value=Array.isArray((k=b.data)==null?void 0:k.data)?b.data.data.map(q=>({label:q,value:q})):[],(!D.value.branch||!H.value.some(q=>q.value===D.value.branch))&&(D.value.branch=((P=H.value[0])==null?void 0:P.value)||""),u&&b.status&&qe.success("分支列表已刷新")}})}catch(b){}},A=async()=>{try{const u=await It();D.value.ssh_key=u.ssh_key.msg,a.value=u.webhook_install}catch(u){}},c=()=>{let u={deploy_type:"git",deploy_script:"",ftp:!1,sql:!1,type_id:0,add_dns_record:!1,version:"00",type:"PHP"};const b=J.value.sitePath;return b&&(u.path=b,M=(b+"/").replace(/\/\//g,"/")),u},{BtForm:I,submit:F,param:D}=st({data:c,options:u=>et(()=>[{type:"custom",rules:{webname:ce.webname},render:b=>(b.value.hasOwnProperty("webname")||(b.value.webname=""),e(ot,{label:"域名",prop:"webname"},{default:()=>[e(ge,{ref:"popover",placement:"top-start","popper-class":"green-tips-popover !p-0",title:"",width:"400",visible:T.value,"onUpdate:visible":k=>T.value=k,"trigger-keys":[],trigger:"focus"},{default:()=>e("div",{class:"!p-[12px] bg-primary text-white"},[m("如需填写多个域名,请换行填写,每行一个域名,默认为80端口"),e("br",null,null),m("IP地址格式:192.168.1.199"),e("br",null,null),m("泛解析添加方法 *.domain.com"),e("br",null,null),m("如另加端口格式为 www.domain.com:88"),e("br",null,null),m("IPv6格式:[2001:db8:85a3::8a2e:370:7334]:88")]),reference:()=>e(ue,{rows:5,resize:"none",width:"52rem",modelValue:u.value.webname,"onUpdate:modelValue":k=>u.value.webname=k,onFocus:()=>{T.value=!0},type:"textarea",placeholder:"如需填写多个域名,请换行填写,每行一个域名,默认为80端口\nIP地址格式:192.168.1.199\n泛解析添加方法 *.domain.com\n如另加端口格式为 www.domain.com:88\nIPv6格式:[2001:db8:85a3::8a2e:370:7334]:88",onInput:k=>{var P,q;u.value.ps=k.split("\n")[0],u.value.path=(M==null?void 0:M.replace(/\/\//g,"/"))+((q=(P=k.split("\n")[0])==null?void 0:P.replace(/:/g,"_"))==null?void 0:q.trim())}},null)})]}))},St("网站路径","path",{attrs:{class:"!w-[52rem]",placeholder:"请输入根目录"},rules:[nt()]},()=>{xe({type:"dir",path:"/www/wwwroot",change:b=>{u.value.path=b}})}),{type:"slots",key:"gitconf",rules:{ssh_key:[$e({message:"请输入SSH Key",trigger:["blur","input"]})],repo:[$e({message:"请输入SSH仓库地址",trigger:["blur","input"]})],branch:[$e({message:"请输入SSH分支名称",trigger:["blur","input"]})]}}]),submit:async(u,b,k)=>{try{if(await b(),!a.value){qe.error("Webhook 未安装,无法保存配置");return}let P=Object.assign({},u.value);const K=P.webname.split("\n")[0].trim().match(/:(\d+)$/);K?P.port=parseInt(K[1],10):P.port=80,P.webname.includes("[")&&await Ve();let Q=P.webname.split("\n");Q.shift(),P.webname=JSON.stringify({domain:P.webname.split("\n")[0],domainlist:Q,count:Q.length});const ee=await we({loading:"正在添加git部署,请稍后...",request:ft(P),data:{status:Boolean},message:!0,success:d=>{R.value=!0}});return ee.status&&le(),ee.status}catch(P){}}});return fe(()=>{tt(()=>{A()})}),te({onConfirm:F}),(u,b)=>{const k=ye,P=ue,q=ut,K=pt,Q=it,ee=Pe;return V(),B(Z,null,[e(l(I),null,{gitconf:n(()=>[l(a)?G("",!0):(V(),X(k,{key:0,label:"Webhook"},{default:n(()=>[r("span",{class:"bt-danger text-small",onClick:b[0]||(b[0]=d=>L("webhook"))}," 未安装Webhook,点击安装 ")]),_:1})),e(k,{label:"SSH Key",prop:"ssh_key"},{default:n(()=>[r("div",At,[r("div",Ut,[e(P,{type:"textarea",disabled:"",rows:3,class:"!w-52rem",resize:"none",placeholder:"请输入SSH Key",modelValue:l(D).ssh_key,"onUpdate:modelValue":b[1]||(b[1]=d=>l(D).ssh_key=d),width:"24rem"},null,8,["modelValue"]),r("i",{id:"ssh_key","data-clipboard-text":l(D).ssh_key,class:"svgtofont-el-document-copy cursor-pointer text-default text-medium copy svgtofont-icon-copy !text-16px",title:"复制SSH KEY",onClick:b[2]||(b[2]=()=>l(rt)({value:l(D).ssh_key}))},null,8,Lt)]),b[7]||(b[7]=r("div",{class:"text-small"},"* 请确保在 Git 提供商的 Git 账号下添加此 SSH 密钥",-1))])]),_:1}),e(k,{label:"仓库",prop:"repo"},{default:n(()=>[e(P,{placeholder:"请输入GIT仓库地址,例:git@github.com:username/repo.git",class:"!w-52rem",modelValue:l(D).repo,"onUpdate:modelValue":b[3]||(b[3]=d=>l(D).repo=d),onBlur:b[4]||(b[4]=d=>C())},null,8,["modelValue"])]),_:1}),e(k,{label:"分支",prop:"branch"},{default:n(()=>[r("div",$t,[e(q,{modelValue:l(D).branch,"onUpdate:modelValue":b[5]||(b[5]=d=>l(D).branch=d),options:l(H),class:"!w-[30rem]",placeholder:"请选择分支"},null,8,["modelValue","options"]),r("div",qt,[e(Q,{title:"刷新分支",class:"!flex",onClick:b[6]||(b[6]=d=>C(!0))},{default:n(()=>[e(K,{icon:"el-refresh",class:"!text-base"})]),_:1})])])]),_:1})]),_:1}),e(ee,{options:i})],64)}}}),jt=he(Bt,[["__scopeId","data-v-aaa30fdf"]]),Mt={class:"flex"},Ht={class:"flex items-center h-3.2rem"},Nt=["onClick"],Ot={key:0,class:"text-small ml-[8px] flex items-center"},Tt={key:1,class:"text-small ml-[8px] flex items-center"},Rt={class:"flex items-center"},zt={class:"flex items-center mb-[4px]"},Qt=pe({__name:"index",props:{compData:{default:{}}},setup(se,{expose:te}){const le=se,{panel:J}=ve(),{isRefreshList:R}=_e(),M=Ce({database:!1}),T=y(),H=y(!1),a=y({site_path:"/www/wwwroot",project_cmd:"",install_dependence:0,php_version:"",swoole_version:4,domains:"",sql:!1,project_ps:"",project_port:"",codeing:"utf8mb4",open_proxy:!1,project_proxy_path:"",datauser:"",datapassword:"",run_user:"www",composer_version:""}),i=y(!1),L=y([]),C=y([]);y({});const A=y(!1),c=y({});let I="/www/wwwroot/";const F=[{content:"当前仅支持nginx服务器使用"},{content:"【swoole版本】开启自动安装依赖时会给对应版本的php安装swoole"},{content:e(Z,null,[m("【自动安装项目依赖】只尝试"),e("span",{class:"text-danger"},[m("composer install")]),m("进行安装依赖,最终安装结果请前往 项目-日志-安装依赖日志 进行确认,若安装依赖不成功,项目会"),e("span",{class:"text-danger"},[m("启动失败")])])},{content:"安装依赖不成功,可能和composer版本有关,可尝试切换composer版本"}],D=async o=>{const t=o==="mysql"?o:"php-"+(Number(o)/10).toFixed(1),{data:f}=await je({sName:t});Ee({name:f.name,type:"i",pluginInfo:f})},u=()=>{xe({type:"dir",path:a.value.site_path.replace(/\/$/,""),change:o=>{Me(o,"string",""),a.value.site_path=o,A.value=!0,b()}})},b=async()=>{try{const o=await Ne({path:a.value.site_path});a.value.composer_version=o.data?"2.7.3":"",a.value.install_dependence=o.data?1:0}catch(o){}},k=async()=>{try{const o="php-"+(Number(a.value.php_version)/10).toFixed(1);o&&We({name:o})}catch(o){}},P=async o=>{var t;a.value.php_version=o,c.value=(t=L.value.find(f=>f.php_version===o))!=null?t:{}},q=(o,t)=>{if(!o)return"";const{randomLength:f=1}={},E=g=>g.charCodeAt(0)<=127,x=g=>{const _="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let s="";for(let S=0;S<g;S++){const j=Math.floor(Math.random()*_.length);s+=_[j]}return s},v=g=>g===":"||g==="."?"_":E(g)?g:x(f);return Array.from(o).map(v).join("")},K=o=>{var t,f,E;typeof o=="string"&&((!a.value.site_path||a.value.site_path===I.replace(/\/$/,""))&&(A.value=!1),A.value||(a.value.site_path=(I==null?void 0:I.replace(/\/\//g,"/"))+((f=(t=o.split("\n")[0])==null?void 0:t.replace(/:/g,"_"))==null?void 0:f.trim())),a.value.datauser=(E=q(o.split("\n")[0]))==null?void 0:E.substr(0,16),a.value.datapassword=de(16),a.value.project_ps=o.split("\n")[0])},Q=o=>{a.value.composer_version=o,a.value.install_dependence=o?1:0},ee=o=>{var E;let t={...o,sql_user:o.datauser,sql_pwd:o.datapassword,sql_codeing:o.codeing,install_dependence:o.install_dependence,open_proxy:o.open_proxy?1:0,webname:{domain:"",domainlist:[],count:0}},f=(E=o.domains)==null?void 0:E.split("\n");return f.forEach((x,v)=>{v===0?t.webname.domain=x:t.webname.domainlist.push(f[v])}),t.webname.count=t.webname.domainlist.length,t.webname=JSON.stringify(t.webname),delete t.domains,delete t.datauser,delete t.datapassword,delete t.codeing,t},d=async o=>{var E;await T.value.validate(),(E=c.value)!=null&&E.swoole_status||await Ke({width:50,title:"提示",isHtml:!0,content:"当前版本PHP-安装扩展未安装swoole,可能导致项目无法启动,是否继续操作?",icon:"warning-filled"}),a.value.domains.includes("[")&&await Ve();const t=ee(a.value),f=await we({loading:"正在添加swoole站点,请稍后...",request:Oe(t),message:!0});f!=null&&f.status&&(R.value=!0,o())},p=async()=>{try{const o=await Te();C.value=o.data}catch(o){}},N=async o=>{a.value.swoole_version=o,await W()},W=async()=>{var o,t,f;try{const E=await _t({swoole_version:a.value.swoole_version});if(E.status){L.value=E.data;const x=(o=L.value)==null?void 0:o.filter(v=>v.setup_status);a.value.php_version=(t=x[0])==null?void 0:t.php_version,c.value=(f=x[0])!=null?f:{}}}catch(E){}},O=async()=>{const o=await le.compData.getStatus();M.database=o.mysql;const t=J.value.sitePath;t&&(a.value.site_path=t,I=(t+"/").replace(/\/\//g,"/")),W(),p()};return fe(O),te({init:O,onConfirm:d}),(o,t)=>{const f=ue,E=ge,x=ye,v=Ae,g=De,_=ke,s=He,S=Se,j=Pe,h=Ge;return V(),B("div",null,[e(S,{ref_key:"addSwooleSiteFormRef",ref:T,disabled:l(H),model:l(a),rules:l(ce)},{default:n(()=>[e(x,{label:"绑定域名",prop:"domains"},{default:n(()=>[e(E,{ref:"popover",placement:"top-start","popper-class":"green-tips-popover !p-0",title:"",width:"400",visible:l(i),"onUpdate:visible":t[2]||(t[2]=w=>me(i)?i.value=w:null),"trigger-keys":[],trigger:"focus"},{reference:n(()=>[Be(e(f,{onInput:K,modelValue:l(a).domains,"onUpdate:modelValue":t[0]||(t[0]=w=>l(a).domains=w),type:"textarea",width:"52rem",rows:5,resize:"none",onFocus:t[1]||(t[1]=w=>i.value=!0),placeholder:"如需填写多个域名,请换行填写,每行一个域名,默认为80端口\nIP地址格式:192.168.1.199\n泛解析添加方法 *.domain.com\n如另加端口格式为 www.domain.com:88\nIPv6格式:[2001:db8:85a3::8a2e:370:7334]:88"},null,8,["modelValue"]),[[h,void 0,"popover"]])]),default:n(()=>[t[16]||(t[16]=r("div",{class:"!p-[12px] bg-primary text-white"},[m(" 如需填写多个域名,请换行填写,每行一个域名,默认为80端口 "),r("br"),m(" IP地址格式:192.168.1.199 "),r("br"),m(" 泛解析添加方法 *.domain.com "),r("br"),m(" 如另加端口格式为 www.domain.com:88 "),r("br"),m(" IPv6格式:[2001:db8:85a3::8a2e:370:7334]:88 ")],-1))]),_:1},8,["visible"])]),_:1}),e(x,{label:"项目目录",prop:"site_path"},{default:n(()=>[e(v,{modelValue:l(a).site_path,"onUpdate:modelValue":t[3]||(t[3]=w=>l(a).site_path=w),placeholder:"请输入项目目录",icon:"el-folder-opened",width:"52rem",onFocus:t[4]||(t[4]=w=>A.value=!0),onBlur:b,onIconClick:u},null,8,["modelValue"])]),_:1}),e(x,{label:"swoole版本"},{default:n(()=>[r("div",Mt,[r("div",null,[e(_,{modelValue:l(a).swoole_version,"onUpdate:modelValue":t[5]||(t[5]=w=>l(a).swoole_version=w),class:"!w-[8rem]",onChange:N},{default:n(()=>[e(g,{label:"2.x",value:2}),e(g,{label:"4.x",value:4}),e(g,{label:"5.x",value:5})]),_:1},8,["modelValue"])]),e(x,{label:"PHP版本",prop:"php_version"},{default:n(()=>{var w,U,ne;return[r("div",Ht,[e(_,{modelValue:l(a).php_version,"onUpdate:modelValue":t[6]||(t[6]=Y=>l(a).php_version=Y),placeholder:"请选择PHP版本",class:"!w-[14rem]",onChange:P},{default:n(()=>[(V(!0),B(Z,null,re(l(L),(Y,oe)=>(V(),X(g,{key:oe,disabled:!Y.setup_status,label:"PHP-".concat(Y.php_version),value:Y.php_version},{default:n(()=>[r("span",null,"PHP-"+z(Y.php_version),1),Y.setup_status?G("",!0):(V(),B(Z,{key:0},[t[17]||(t[17]=m(" [ ",-1)),r("span",{class:"mx-[4px] bt-link",onClick:ie=>D(Y.php_version)},"未安装",8,Nt),t[18]||(t[18]=m(" ] ",-1))],64))]),_:2},1032,["disabled","label","value"]))),128))]),_:1},8,["modelValue"]),l(a).php_version?(V(),B(Z,{key:0},[(w=l(c))!=null&&w.swoole_status?!((U=l(c))!=null&&U.setup_swoole_isactive)&&((ne=l(c))!=null&&ne.swoole_version)?(V(),B("span",Tt,[m(" 当前php未安装swoole"+z(l(a).swoole_version)+"扩展 ",1),e(s,{class:"ml-[4px]",onClick:k},{default:n(()=>[...t[21]||(t[21]=[m(">>立即安装",-1)])]),_:1})])):G("",!0):(V(),B("span",Ot,[t[20]||(t[20]=m(" 当前php未安装swoole扩展 ",-1)),e(s,{class:"ml-[4px]",onClick:k},{default:n(()=>[...t[19]||(t[19]=[m(">>立即安装",-1)])]),_:1})]))],64)):G("",!0)])]}),_:1})])]),_:1}),e(x,{label:"数据库"},{default:n(()=>[r("div",Rt,[e(_,{class:"!w-[16rem]",modelValue:l(a).sql,"onUpdate:modelValue":t[7]||(t[7]=w=>l(a).sql=w),disabled:!l(M).database},{default:n(()=>[e(g,{label:"不创建",value:!1}),e(g,{label:"MySQL",value:"MYSQL"})]),_:1},8,["modelValue","disabled"]),l(M).database?G("",!0):(V(),B("span",{key:0,onClick:t[8]||(t[8]=w=>D("mysql")),class:"ml-[4px] text-danger cursor-pointer !text-small"},"未安装数据库,点击安装")),l(a).sql?(V(),X(_,{key:1,class:"!w-[16rem] ml-[8px]",modelValue:l(a).codeing,"onUpdate:modelValue":t[9]||(t[9]=w=>l(a).codeing=w)},{default:n(()=>[e(g,{label:"utf8mb4",value:"utf8mb4"}),e(g,{label:"utf8",value:"utf8"}),e(g,{label:"gbk",value:"gbk"}),e(g,{label:"big5",value:"big5"})]),_:1},8,["modelValue"])):G("",!0)])]),_:1}),l(a).sql?(V(),X(x,{key:0,label:"数据库账号"},{default:n(()=>[r("div",zt,[e(x,{prop:"datauser"},{default:n(()=>[e(f,{placeholder:"创建数据库账号",class:"w-[24rem]",modelValue:l(a).datauser,"onUpdate:modelValue":t[10]||(t[10]=w=>l(a).datauser=w)},null,8,["modelValue"])]),_:1}),e(x,{label:"密码",class:"!mt-0"},{default:n(()=>[e(f,{placeholder:"数据库密码",class:"w-[24rem]",modelValue:l(a).datapassword,"onUpdate:modelValue":t[11]||(t[11]=w=>l(a).datapassword=w)},null,8,["modelValue"])]),_:1})]),t[22]||(t[22]=r("span",{class:"text-tertiary text-small"},"创建站点的同时,为站点创建一个对应的数据库帐户,方便不同站点使用不同数据库。",-1))]),_:1})):G("",!0),e(x,{label:"运行用户"},{default:n(()=>[e(_,{class:"!w-[16rem]",modelValue:l(a).run_user,"onUpdate:modelValue":t[12]||(t[12]=w=>l(a).run_user=w)},{default:n(()=>[(V(!0),B(Z,null,re(l(C),w=>(V(),X(g,{key:w,label:w,value:w},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),t[23]||(t[23]=r("span",{class:"text-tertiary text-small ml-[.4rem]"},"* 无特殊需求请选择www用户",-1))]),_:1}),e(x,{label:"启动命令",prop:"project_cmd"},{default:n(()=>[e(f,{modelValue:l(a).project_cmd,"onUpdate:modelValue":t[13]||(t[13]=w=>l(a).project_cmd=w),width:"52rem",placeholder:"请输入项目的启动命令,例:php serve.php"},null,8,["modelValue"])]),_:1}),e(x,{label:"依赖安装"},{default:n(()=>[e(_,{class:"!w-[16rem]",modelValue:l(a).composer_version,"onUpdate:modelValue":t[14]||(t[14]=w=>l(a).composer_version=w),"empty-values":[null,void 0],onChange:Q},{default:n(()=>[e(g,{label:"不安装",value:""}),e(g,{label:"用composer2.7.3安装",value:"2.7.3"}),e(g,{label:"用composer1.10.27安装",value:"1.10.27"})]),_:1},8,["modelValue"])]),_:1}),e(x,{label:"备注"},{default:n(()=>[e(f,{modelValue:l(a).project_ps,"onUpdate:modelValue":t[15]||(t[15]=w=>l(a).project_ps=w),placeholder:"请输入备注,可为空",width:"52rem"},null,8,["modelValue"])]),_:1})]),_:1},8,["disabled","model","rules"]),e(j,{class:"mt-2rem pl-1rem",options:F})])}}}),Gt=he(Qt,[["__scopeId","data-v-e54823e3"]]),Jt={class:"flex"},Kt={class:"mr-2rem"},Wt={key:1,class:"!text-small"},Yt={class:"flex items-center"},Xt={class:"flex items-center mb-[4px]"},Zt=pe({__name:"index",props:{compData:{default:{}}},setup(se,{expose:te}){const le=se,{panel:J}=ve(),{isRefreshList:R}=_e(),M=Ie(),T=Ce({database:!1}),H=y(),a=y(!1),i=y({site_path:"/www/wwwroot",project_cmd:"php think run",install_dependence:0,php_version:"",thinkphp_version:!0,domains:"",sql:!1,project_ps:"",project_port:"",codeing:"utf8mb4",open_proxy:!1,project_proxy_path:"",datauser:"",datapassword:"",run_user:"www",composer_version:""}),L=y(!1),C=y([]),A=y([]),c=y({}),I=y(!1);let F="/www/wwwroot/";const D=[{content:"当前仅支持nginx服务器使用"},{content:"【fileinfo版本】若未安装,项目会启动失败"},{content:e(Z,null,[m("【自动安装项目依赖】只尝试"),e("span",{class:"text-danger"},[m("composer install")]),m("进行安装依赖,最终安装结果请前往 项目-日志-安装依赖日志 进行确认,若安装依赖不成功,项目会"),e("span",{class:"text-danger"},[m("启动失败")])])},{content:"安装依赖不成功,可能和composer版本有关,可尝试切换composer版本"}],u=()=>{xe({type:"dir",path:i.value.site_path.replace(/\/$/,""),change:o=>{Me(o,"string",""),i.value.site_path=o,I.value=!0,b()}})},b=async()=>{try{const o=await Ne({path:i.value.site_path});i.value.composer_version=o.data?"2.7.3":"",i.value.install_dependence=o.data?1:0}catch(o){}},k=async o=>{const{data:t}=await je({sName:o});Ee({name:t.name,type:"i",pluginInfo:t})},P=async()=>{var o;try{const t=await Re();C.value=t.data.filter(f=>f.name!=="纯静态"),C.value=C.value.reverse(),i.value.php_version=(o=C.value)!=null&&o.length?C.value[0].version:""}catch(t){}},q=async(o=!1)=>{try{let t;o&&(t=M.load("正在检查安装信息,请稍后..."));const f=await bt({name:"fileinfo",php_version:i.value.php_version});o&&t.close(),c.value=f}catch(t){}},K=async()=>{try{const o="php-"+(Number(i.value.php_version)/10).toFixed(1);We({name:o})}catch(o){}},Q=async o=>{i.value.php_version=o,q(!0)},ee=(o,t)=>{if(!o)return"";const{randomLength:f=1}={},E=g=>g.charCodeAt(0)<=127,x=g=>{const _="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let s="";for(let S=0;S<g;S++){const j=Math.floor(Math.random()*_.length);s+=_[j]}return s},v=g=>g===":"||g==="."?"_":E(g)?g:x(f);return Array.from(o).map(v).join("")},d=o=>{var t,f,E;typeof o=="string"&&((!i.value.site_path||i.value.site_path===F.replace(/\/$/,""))&&(I.value=!1),I.value||(i.value.site_path=(F==null?void 0:F.replace(/\/\//g,"/"))+((f=(t=o.split("\n")[0])==null?void 0:t.replace(/:/g,"_"))==null?void 0:f.trim())),i.value.datauser=(E=ee(o.split("\n")[0]))==null?void 0:E.substr(0,16),i.value.datapassword=de(16),i.value.project_ps=o.split("\n")[0])},p=o=>{var E;let t={...o,sql_user:o.datauser,sql_pwd:o.datapassword,sql_codeing:o.codeing,install_dependence:o.install_dependence?1:0,open_proxy:o.open_proxy?1:0,webname:{domain:"",domainlist:[],count:0}},f=(E=o.domains)==null?void 0:E.split("\n");return f.forEach((x,v)=>{v===0?t.webname.domain=x:t.webname.domainlist.push(f[v])}),t.webname.count=t.webname.domainlist.length,t.webname=JSON.stringify(t.webname),delete t.domains,delete t.datauser,delete t.datapassword,delete t.codeing,t},N=async o=>{await H.value.validate(),c.value.status||await Ke({width:50,title:"提示",isHtml:!0,content:"当前版本PHP-安装扩展未安装fileinfo,可能导致项目无法启动,是否继续操作?",icon:"warning-filled"}),i.value.domains.includes("[")&&await Ve();const t=p(i.value);a.value=!0;const f=await we({loading:"正在添加thinkphp站点,请稍后...",request:Oe(t),message:!0});a.value=!1,f.status&&(R.value=!0,o())},W=async()=>{try{const o=await Te();A.value=o.data}catch(o){}},O=async()=>{const o=await le.compData.getStatus();T.database=o.mysql;const t=J.value.sitePath;t&&(i.value.site_path=t,F=(t+"/").replace(/\/\//g,"/")),await P(),await q(),W()};return fe(O),te({init:O,onConfirm:N}),(o,t)=>{const f=ue,E=ge,x=ye,v=Ae,g=De,_=ke,s=He,S=Se,j=Pe;return V(),B("div",null,[e(S,{ref_key:"addThinkphpSiteFormRef",ref:H,disabled:l(a),model:l(i),rules:l(ce)},{default:n(()=>[e(x,{label:"绑定域名",prop:"domains"},{default:n(()=>[e(E,{ref:"popover",placement:"top-start","popper-class":"green-tips-popover !p-0",title:"",width:"400",visible:l(L),"onUpdate:visible":t[2]||(t[2]=h=>me(L)?L.value=h:null),"trigger-keys":[],trigger:"focus"},{reference:n(()=>[e(f,{onInput:d,modelValue:l(i).domains,"onUpdate:modelValue":t[0]||(t[0]=h=>l(i).domains=h),type:"textarea",width:"52rem",rows:5,resize:"none",onFocus:t[1]||(t[1]=h=>L.value=!0),placeholder:"如需填写多个域名,请换行填写,每行一个域名,默认为80端口\nIP地址格式:192.168.1.199\n泛解析添加方法 *.domain.com\n如另加端口格式为 www.domain.com:88\nIPv6格式:[2001:db8:85a3::8a2e:370:7334]:88"},null,8,["modelValue"])]),default:n(()=>[t[15]||(t[15]=r("div",{class:"!p-[12px] bg-primary text-white"},[m(" 如需填写多个域名,请换行填写,每行一个域名,默认为80端口 "),r("br"),m(" IP地址格式:192.168.1.199 "),r("br"),m(" 泛解析添加方法 *.domain.com "),r("br"),m(" 如另加端口格式为 www.domain.com:88 "),r("br"),m(" IPv6格式:[2001:db8:85a3::8a2e:370:7334]:88 ")],-1))]),_:1},8,["visible"])]),_:1}),e(x,{label:"项目目录",prop:"site_path"},{default:n(()=>[e(v,{modelValue:l(i).site_path,"onUpdate:modelValue":t[3]||(t[3]=h=>l(i).site_path=h),placeholder:"请输入项目目录",icon:"el-folder-opened",width:"52rem",onFocus:t[4]||(t[4]=h=>I.value=!0),onIconClick:u},null,8,["modelValue"])]),_:1}),e(x,{label:"PHP版本"},{default:n(()=>[r("div",Jt,[r("div",Kt,[e(_,{class:"!w-[16rem]",modelValue:l(i).php_version,"onUpdate:modelValue":t[5]||(t[5]=h=>l(i).php_version=h),onChange:Q},{default:n(()=>[(V(!0),B(Z,null,re(l(C),h=>(V(),X(g,{key:h.value,label:h.name,value:h.version},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),e(x,{label:"fileinfo版本"},{default:n(()=>[l(c).status?(V(),B("span",Wt,"当前php已安装fileinfo扩展")):(V(),X(s,{key:0,onClick:K},{default:n(()=>[...t[16]||(t[16]=[m("当前php未安装fileinfo扩展 >>立即安装",-1)])]),_:1}))]),_:1})])]),_:1}),e(x,{label:"数据库"},{default:n(()=>[r("div",Yt,[e(_,{class:"!w-[16rem]",modelValue:l(i).sql,"onUpdate:modelValue":t[6]||(t[6]=h=>l(i).sql=h),disabled:!l(T).database},{default:n(()=>[e(g,{label:"不创建",value:!1}),e(g,{label:"MySQL",value:"MYSQL"})]),_:1},8,["modelValue","disabled"]),l(T).database?G("",!0):(V(),B("span",{key:0,onClick:t[7]||(t[7]=h=>k("mysql")),class:"ml-[4px] text-danger cursor-pointer !text-small"},"未安装数据库,点击安装")),l(i).sql?(V(),X(_,{key:1,class:"ml-[8px] !w-[16rem]",modelValue:l(i).codeing,"onUpdate:modelValue":t[8]||(t[8]=h=>l(i).codeing=h)},{default:n(()=>[e(g,{label:"utf8mb4",value:"utf8mb4"}),e(g,{label:"utf8",value:"utf8"}),e(g,{label:"gbk",value:"gbk"}),e(g,{label:"big5",value:"big5"})]),_:1},8,["modelValue"])):G("",!0)])]),_:1}),l(i).sql?(V(),X(x,{key:0,label:"数据库账号"},{default:n(()=>[r("div",Xt,[e(x,{prop:"datauser"},{default:n(()=>[e(f,{placeholder:"创建数据库账号",class:"w-[24rem]",modelValue:l(i).datauser,"onUpdate:modelValue":t[9]||(t[9]=h=>l(i).datauser=h)},null,8,["modelValue"])]),_:1}),e(x,{label:"密码",class:"!mt-0"},{default:n(()=>[e(f,{placeholder:"数据库密码",class:"w-[24rem]",modelValue:l(i).datapassword,"onUpdate:modelValue":t[10]||(t[10]=h=>l(i).datapassword=h)},null,8,["modelValue"])]),_:1})]),t[17]||(t[17]=r("span",{class:"text-tertiary text-small"},"创建站点的同时,为站点创建一个对应的数据库帐户,方便不同站点使用不同数据库。",-1))]),_:1})):G("",!0),e(x,{label:"运行用户"},{default:n(()=>[e(_,{class:"!w-[16rem]",modelValue:l(i).run_user,"onUpdate:modelValue":t[11]||(t[11]=h=>l(i).run_user=h)},{default:n(()=>[(V(!0),B(Z,null,re(l(A),h=>(V(),X(g,{key:h,label:h,value:h},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),t[18]||(t[18]=r("span",{class:"text-tertiary text-small ml-[.4rem]"},"* 无特殊需求请选择www用户",-1))]),_:1}),e(x,{label:"启动命令",prop:"project_cmd"},{default:n(()=>[e(f,{modelValue:l(i).project_cmd,"onUpdate:modelValue":t[12]||(t[12]=h=>l(i).project_cmd=h),width:"52rem",placeholder:"请输入项目的启动命令,例:php serve.php"},null,8,["modelValue"])]),_:1}),e(x,{label:"依赖安装"},{default:n(()=>[e(_,{class:"!w-[16rem]",modelValue:l(i).composer_version,"onUpdate:modelValue":t[13]||(t[13]=h=>l(i).composer_version=h),"empty-values":[null,void 0]},{default:n(()=>[e(g,{label:"不安装",value:""}),e(g,{label:"用composer2.7.3安装",value:"2.7.3"}),e(g,{label:"用1.10.27安装",value:"1.10.27"})]),_:1},8,["modelValue"])]),_:1}),e(x,{label:"备注"},{default:n(()=>[e(f,{modelValue:l(i).project_ps,"onUpdate:modelValue":t[14]||(t[14]=h=>l(i).project_ps=h),placeholder:"请输入备注,可为空",width:"52rem"},null,8,["modelValue"])]),_:1})]),_:1},8,["disabled","model","rules"]),e(j,{class:"mt-2rem pl-1rem",options:D})])}}}),el=he(Zt,[["__scopeId","data-v-51cb38fd"]]),tl={class:"flex items-center"},ll={class:"flex items-center mb-[4px]"},al=pe({__name:"index",props:{compData:{default:{}}},setup(se,{expose:te}){const le=se,{panel:J}=ve(),{isRefreshList:R}=_e(),M=Ce({database:!1}),T=y(),H=y(!1),a=y({site_path:"/www/wwwroot",project_cmd:"",install_dependence:0,php_version:"",domains:"",sql:!1,project_ps:"",project_port:"",codeing:"utf8mb4",open_proxy:!1,project_proxy_path:"",datauser:"",datapassword:"",run_user:"www",composer_version:""}),i=y(!1),L=y([]),C=y([]),A=y(!1);let c="/www/wwwroot/";const I=[{content:"当前仅支持nginx服务器使用"},{content:e(Z,null,[m("【自动安装项目依赖】只尝试"),e("span",{class:"text-danger"},[m("composer install")]),m("进行安装依赖,最终安装结果请前往 项目-日志-安装依赖日志 进行确认,若安装依赖不成功,项目会"),e("span",{class:"text-danger"},[m("启动失败")])])},{content:"安装依赖不成功,可能和composer版本有关,可尝试切换composer版本"}],F=()=>{xe({type:"dir",path:a.value.site_path.replace(/\/$/,""),change:d=>{Me(d,"string",""),a.value.site_path=d,A.value=!0,D()}})},D=async()=>{try{const d=await Ne({path:a.value.site_path});a.value.composer_version=d.data?"2.7.3":"",a.value.install_dependence=d.data?1:0}catch(d){}},u=async d=>{const{data:p}=await je({sName:d});Ee({name:p.name,type:"i",pluginInfo:p})},b=async()=>{var d;try{const p=await Re();L.value=p.data.filter(N=>N.name!=="纯静态"),L.value=L.value.reverse(),a.value.php_version=(d=L.value)!=null&&d.length?L.value[0].version:""}catch(p){}},k=(d,p)=>{if(!d)return"";const{randomLength:N=1}={},W=t=>t.charCodeAt(0)<=127,O=t=>{const f="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let E="";for(let x=0;x<t;x++){const v=Math.floor(Math.random()*f.length);E+=f[v]}return E},o=t=>t===":"||t==="."?"_":W(t)?t:O(N);return Array.from(d).map(o).join("")},P=d=>{var p,N,W;typeof d=="string"&&((!a.value.site_path||a.value.site_path===c.replace(/\/$/,""))&&(A.value=!1),A.value||(a.value.site_path=(c==null?void 0:c.replace(/\/\//g,"/"))+((N=(p=d.split("\n")[0])==null?void 0:p.replace(/:/g,"_"))==null?void 0:N.trim())),a.value.datauser=(W=k(d.split("\n")[0]))==null?void 0:W.substr(0,16),a.value.datapassword=de(16),a.value.project_ps=d.split("\n")[0])},q=d=>{var W;let p={...d,sql_user:d.datauser,sql_pwd:d.datapassword,sql_codeing:d.codeing,install_dependence:d.install_dependence?1:0,open_proxy:d.open_proxy?1:0,webname:{domain:"",domainlist:[],count:0}},N=(W=d.domains)==null?void 0:W.split("\n");return N.forEach((O,o)=>{o===0?p.webname.domain=O:p.webname.domainlist.push(N[o])}),p.webname.count=p.webname.domainlist.length,p.webname=JSON.stringify(p.webname),delete p.domains,delete p.datauser,delete p.datapassword,delete p.codeing,p},K=async d=>{await T.value.validate();const p=q(a.value);a.value.domains.includes("[")&&await Ve(),H.value=!0;const N=await we({loading:"正在添加异步站点,请稍后...",request:Oe(p),message:!0});H.value=!1,N.status&&(R.value=!0,d())},Q=async()=>{try{const d=await Te();C.value=d.data}catch(d){}},ee=async()=>{const d=await le.compData.getStatus();M.database=d.mysql;const p=J.value.sitePath;p&&(a.value.site_path=p,c=(p+"/").replace(/\/\//g,"/")),b(),Q()};return fe(ee),te({init:ee,onConfirm:K}),(d,p)=>{const N=ue,W=ge,O=ye,o=Ae,t=De,f=ke,E=Se,x=Pe;return V(),B("div",null,[e(E,{ref_key:"addUniversalSiteFormRef",ref:T,disabled:l(H),model:l(a),rules:l(ce)},{default:n(()=>[e(O,{label:"绑定域名",prop:"domains"},{default:n(()=>[e(W,{ref:"popover",placement:"top-start","popper-class":"green-tips-popover !p-0",title:"",width:"400",visible:l(i),"onUpdate:visible":p[2]||(p[2]=v=>me(i)?i.value=v:null),"trigger-keys":[],trigger:"focus"},{reference:n(()=>[e(N,{onInput:P,modelValue:l(a).domains,"onUpdate:modelValue":p[0]||(p[0]=v=>l(a).domains=v),type:"textarea",width:"52rem",rows:5,resize:"none",onFocus:p[1]||(p[1]=v=>i.value=!0),placeholder:"如需填写多个域名,请换行填写,每行一个域名,默认为80端口\nIP地址格式:192.168.1.199\n泛解析添加方法 *.domain.com\n如另加端口格式为 www.domain.com:88\nIPv6格式:[2001:db8:85a3::8a2e:370:7334]:88"},null,8,["modelValue"])]),default:n(()=>[p[15]||(p[15]=r("div",{class:"!p-[12px] bg-primary text-white"},[m(" 如需填写多个域名,请换行填写,每行一个域名,默认为80端口 "),r("br"),m(" IP地址格式:192.168.1.199 "),r("br"),m(" 泛解析添加方法 *.domain.com "),r("br"),m(" 如另加端口格式为 www.domain.com:88 "),r("br"),m(" IPv6格式:[2001:db8:85a3::8a2e:370:7334]:88 ")],-1))]),_:1},8,["visible"])]),_:1}),e(O,{label:"项目目录",prop:"site_path"},{default:n(()=>[e(o,{modelValue:l(a).site_path,"onUpdate:modelValue":p[3]||(p[3]=v=>l(a).site_path=v),placeholder:"请输入项目目录",icon:"el-folder-opened",width:"52rem",onFocus:p[4]||(p[4]=v=>A.value=!0),onIconClick:F},null,8,["modelValue"])]),_:1}),e(O,{label:"PHP版本"},{default:n(()=>[e(f,{class:"!w-[16rem]",modelValue:l(a).php_version,"onUpdate:modelValue":p[5]||(p[5]=v=>l(a).php_version=v)},{default:n(()=>[(V(!0),B(Z,null,re(l(L),v=>(V(),X(t,{key:v.value,label:v.name,value:v.version},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),_:1}),e(O,{label:"数据库"},{default:n(()=>[r("div",tl,[e(f,{class:"!w-[16rem]",modelValue:l(a).sql,"onUpdate:modelValue":p[6]||(p[6]=v=>l(a).sql=v),disabled:!l(M).database},{default:n(()=>[e(t,{label:"不创建",value:!1}),e(t,{label:"MySQL",value:"MYSQL"})]),_:1},8,["modelValue","disabled"]),l(M).database?G("",!0):(V(),B("span",{key:0,onClick:p[7]||(p[7]=v=>u("mysql")),class:"ml-[4px] text-danger cursor-pointer !text-small"},"未安装数据库,点击安装")),l(a).sql?(V(),X(f,{key:1,class:"ml-[8px] !w-[16rem]",modelValue:l(a).codeing,"onUpdate:modelValue":p[8]||(p[8]=v=>l(a).codeing=v)},{default:n(()=>[e(t,{label:"utf8mb4",value:"utf8mb4"}),e(t,{label:"utf8",value:"utf8"}),e(t,{label:"gbk",value:"gbk"}),e(t,{label:"big5",value:"big5"})]),_:1},8,["modelValue"])):G("",!0)])]),_:1}),l(a).sql?(V(),X(O,{key:0,label:"数据库账号"},{default:n(()=>[r("div",ll,[e(O,{prop:"datauser"},{default:n(()=>[e(N,{placeholder:"创建数据库账号",class:"w-[24rem]",modelValue:l(a).datauser,"onUpdate:modelValue":p[9]||(p[9]=v=>l(a).datauser=v)},null,8,["modelValue"])]),_:1}),e(O,{label:"密码",class:"!mt-0"},{default:n(()=>[e(N,{placeholder:"数据库密码",class:"w-[24rem]",modelValue:l(a).datapassword,"onUpdate:modelValue":p[10]||(p[10]=v=>l(a).datapassword=v)},null,8,["modelValue"])]),_:1})]),p[16]||(p[16]=r("span",{class:"text-tertiary text-small"},"创建站点的同时,为站点创建一个对应的数据库帐户,方便不同站点使用不同数据库。",-1))]),_:1})):G("",!0),e(O,{label:"运行用户"},{default:n(()=>[e(f,{class:"!w-[16rem]",modelValue:l(a).run_user,"onUpdate:modelValue":p[11]||(p[11]=v=>l(a).run_user=v)},{default:n(()=>[(V(!0),B(Z,null,re(l(C),v=>(V(),X(t,{key:v,label:v,value:v},null,8,["label","value"]))),128))]),_:1},8,["modelValue"]),p[17]||(p[17]=r("span",{class:"text-tertiary text-small ml-[.4rem]"},"* 无特殊需求请选择www用户",-1))]),_:1}),e(O,{label:"启动命令",prop:"project_cmd"},{default:n(()=>[e(N,{modelValue:l(a).project_cmd,"onUpdate:modelValue":p[12]||(p[12]=v=>l(a).project_cmd=v),width:"52rem",placeholder:"请输入项目的启动命令,例:php serve.php"},null,8,["modelValue"])]),_:1}),e(O,{label:"依赖安装"},{default:n(()=>[e(f,{class:"!w-[16rem]",modelValue:l(a).composer_version,"onUpdate:modelValue":p[13]||(p[13]=v=>l(a).composer_version=v),"empty-values":[null,void 0]},{default:n(()=>[e(t,{label:"不安装",value:""}),e(t,{label:"用2.7.3安装",value:"2.7.3"}),e(t,{label:"用1.10.27安装",value:"1.10.27"})]),_:1},8,["modelValue"])]),_:1}),e(O,{label:"备注"},{default:n(()=>[e(N,{modelValue:l(a).project_ps,"onUpdate:modelValue":p[14]||(p[14]=v=>l(a).project_ps=v),placeholder:"请输入备注,可为空",width:"52rem"},null,8,["modelValue"])]),_:1})]),_:1},8,["disabled","model","rules"]),e(x,{class:"mt-2rem pl-1rem",options:I})])}}}),sl=he(al,[["__scopeId","data-v-72265d7e"]]),ol={class:"pb-0 w-full"},nl={class:"py-[8px] px-[12px] text-secondary bg-[var(--el-color-success-light-9)] !w-full block flex items-center"},rl={class:"inline-grid grid-cols-3 text-small gap-x-6 gap-y-2 !w-[60rem] !h-[12.3rem]"},ul=["onClick"],pl={class:"flex flex-col text-secondary"},il={class:"w-full flex items-center"},dl={class:"flex flex-col items-start leading-9 w-full"},ml={class:"truncate font-bold"},cl={class:"w-[14rem] truncate"},fl={class:"flex items-center"},vl={key:0,class:"svgtofont-el-success-filled text-iconLarge mr-[8px]"},_l={class:"flex flex-col items-start leading-9 w-full"},bl={key:0,class:"truncate font-bold"},wl={class:"flex flex-col bg-light p-[12px] px-[16px] text-small w-full"},gl={class:"flex items-center justify-between"},yl={class:"text-tertiary flex items-center text-small p-[12px] px-[16px]"},hl={class:"p-[20px]"},xl={class:"flex items-center mb-[4px]"},Vl=pe({__name:"index",props:{compData:{default:{}}},setup(se,{expose:te}){const le=se,{panel:J}=ve(),{isRefreshList:R}=_e(),M=Ie(),T=y([]),H=y(0),a=y(!1),i=y(),L=y(!1),C=Fe("popupClose");let A="/www/wwwroot/";const c=y({menuType:"addDeployment",path:"/www/wwwroot",ftp:!1,type:"PHP",type_id:0,ps:"",port:"",version:"",need_index:0,need_404:0,sql:!1,codeing:"utf8mb4",webname:"",ftp_username:"",ftp_password:"",datauser:"",datapassword:""}),I=y({ftp:!0,ftpData:{username:"",password:""},sql:!0,databaseStatus:!0,sqlData:{username:"",password:""},siteStatus:!1,site:{name:""}}),F=y({isSetup:!1,versions:[],version:"",code:"utf8mb4"}),D=y({title:"111",version:"222"}),u=Ce({datauser:"",datapassword:"",type:"MySQL",code:"utf8mb4",version:""}),b=y(null),k=y([]),P=y(!1),q=y(!1),K=y([]),Q=()=>{xe({type:"dir",path:c.value.path,change:_=>{c.value.path=_}})},ee=(_,s)=>{if(!_)return"";const{randomLength:S=1}={},j=U=>U.charCodeAt(0)<=127,h=U=>{const ne="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";let Y="";for(let oe=0;oe<U;oe++){const ie=Math.floor(Math.random()*ne.length);Y+=ne[ie]}return Y},w=U=>U===":"||U==="."?"_":j(U)?U:h(S);return Array.from(_).map(w).join("")},d=_=>{var s,S,j;typeof _=="string"&&(c.value.ps=_.split("\n")[0],c.value.path=(A==null?void 0:A.replace(/\/\//g,"/"))+((S=(s=_.split("\n")[0])==null?void 0:s.replace(/:/g,"_"))==null?void 0:S.trim()),c.value.datapassword=de(),c.value.datauser=(j=ee(_.split("\n")[0]))==null?void 0:j.substring(0,16))},p=async _=>{try{const s="php-"+(Number(_)/10).toFixed(1),{data:S}=await wt({sName:s});Ee({name:s,type:"i",pluginInfo:S})}catch(s){}},N=async()=>{try{const{data:_}=await ht();T.value=_.list,k.value=_.list,b.value=_}catch(_){}},W=_=>{H.value=_.id,v(_.id)},O=()=>{ze({isAsync:!0,title:"模板",area:84,component:()=>Qe(()=>import("./other-template.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{templateData:b.value,templateId:H.value,selectTemplate:v}})},o=()=>{P.value=!0,u.datauser=c.value.datauser,u.datapassword=c.value.datapassword,u.version=F.value.version},t=async _=>{const s=_==null?void 0:_.php.split(","),S=F.value.versions.filter(j=>s.includes(j.version)).map(j=>j.version);K.value=s.map(j=>({name:"PHP-"+j,version:j,status:S.includes(j)})),F.value.version=S[S.length-1],u.version=F.value.version,c.value.version=F.value.version},f=async()=>{try{const _=await le.compData.getStatus(),s=await Re();F.value.isSetup=_.mysql,F.value.versions=s.data.filter(S=>S.version!=="00")}catch(_){}},E=async()=>{P.value=!1,c.value.datauser=u.datauser,c.value.datapassword=u.datapassword,c.value.codeing=u.code,F.value.version=u.version,F.value.code=u.code,c.value.version=F.value.version},x=async _=>{let s=Object.assign({},c.value);s.ftp?(I.value.ftpData.username=s.ftp_username,I.value.ftpData.password=s.ftp_password):(delete s.ftp_username,delete s.ftp_password,I.value.ftp=!1),s.sql?(I.value.sqlData.username=s.user,I.value.sqlData.password=s.password):(delete s.datauser,delete s.datapassword,I.value.sql=!1);const j=s.webname.split("\n")[0].trim().match(/:(\d+)$/);j?s.port=parseInt(j[1],10):s.port=80,s.webname.includes("[")&&await Ve();let h=s.webname.split("\n");h.shift(),s.webname=JSON.stringify({domain:s.webname.split("\n")[0],domainlist:h,count:h.length}),delete s.menuType;let w=null;await i.value.validate();try{a.value=!0,w=M.load("正在部署中...");const U=await gt(s);if(U.data.status===!1)return M.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:U.status?"添加网站成功":U.msg,type:U.status?"success":"error",duration:U.status?3e3:0,showClose:!U.status});U.status&&C();const{data:ne}=await yt({source:1,site_name:JSON.parse(s.webname).domain,php_version:s.version,dname:T.value.find(Y=>Y.id===H.value).name});w.close(),U.data.siteStatus&&(I.value.siteStatus=!0,I.value.site.name=JSON.parse(s.webname).domain+ne.msg.success_url),s.ftp||s.sql?(I.value.sqlData.username=s.datauser,I.value.sqlData.password=s.datapassword,I.value.databaseStatus=U.data.databaseStatus,ze({isAsync:!0,title:"网站添加结果",area:46,component:()=>Qe(()=>import("./add-result.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:I.value})):M.msg({customClass:"bt-message-error-html",dangerouslyUseHTMLString:!0,message:U.data.status?"添加网站成功":U.data.msg,type:U.data.status?"success":"error",duration:U.data.status?3e3:0,showClose:!U.data.status}),R.value=!0}catch(U){}finally{w==null||w.close(),a.value=!1}},v=_=>{H.value=_;const s=k.value.findIndex(S=>S.id===_);s<5?(D.value={},t(k.value[s])):(D.value=k.value.find(S=>S.id===_),t(D.value)),c.value.datauser="sql"+de(6),c.value.datapassword=de(6,"password")};Je(()=>F.value.version,()=>{c.value.version=F.value.version});const g=async()=>{var _,s;try{q.value=!0,await f(),await N(),H.value=(_=k.value[0])==null?void 0:_.id,await t(k.value[0]),v((s=k.value[0])==null?void 0:s.id),q.value=!1,c.value.sql="MySQL",D.value={};const S=J.value.sitePath;S&&(c.value.path=S,A=(S+"/").replace(/\/\//g,"/"))}catch(S){q.value=!1}};return fe(g),te({init:g,onConfirm:x}),(_,s)=>{const S=He,j=dt,h=ge,w=ye,U=ue,ne=Ae,Y=Se,oe=De,ie=ke,Ye=mt,Xe=Ge;return V(),B("div",ol,[r("span",nl,[s[12]||(s[12]=m(" 快速的部署网站程序,商城、论坛、博客、框架等程序, ",-1)),e(S,{href:"https://www.bt.cn/bbs/thread-33063-1-1.html"},{default:n(()=>[...s[11]||(s[11]=[m(" 免费入驻平台 ",-1)])]),_:1})]),e(Y,{model:l(c),rules:l(ce),class:"pt-[12px]",ref_key:"addDeploySiteFormRef",ref:i},{default:n(()=>[e(w,{label:"模板部署",class:""},{default:n(()=>{var $,Ue;return[r("div",rl,[(V(!0),B(Z,null,re(l(k),(ae,Ze)=>Be((V(),B("div",{key:ae.id,class:Le([{"template-focus":l(H)===ae.id},"mb-[4px] w-full flex items-center border border-darker py-[4px] px-[8px] rounded-base cursor-pointer template-hover"]),onClick:Sl=>W(ae)},[e(h,{ref_for:!0,ref:"popover",placement:"top-start",width:"200","popper-class":"white-tips-popover",trigger:"hover"},{reference:n(()=>[r("div",il,[e(j,{src:"/site_dep_ico/".concat(ae.name.toLowerCase(),".png"),class:"w-[3.6rem] mr-[4px]"},null,8,["src"]),r("div",dl,[r("span",ml,z(ae.title)+" "+z(ae.version),1),r("span",cl,z(ae.ps.split("<")[0]),1)])])]),default:n(()=>[r("div",pl,[r("span",null,"名称:"+z(ae.title),1),r("span",null,"版本:"+z(ae.version),1),r("span",null,"简介:"+z(ae.ps.split("<")[0]),1),r("span",null,[s[13]||(s[13]=m("官网:",-1)),e(S,{href:ae.official,target:"_blank"},{default:n(()=>[m(z(ae.official),1)]),_:2},1032,["href"])]),r("span",null,"评价:"+z(ae.score),1)])]),_:2},1536)],10,ul)),[[lt,Ze<5]])),128)),r("div",{onClick:O,class:Le([{"justify-center":!l(D).id,"template-focus":l(D).id},"mb-[4px] w-full flex items-center border border-darker py-[4px] px-[12px] rounded-base cursor-pointer template-hover"])},[r("div",fl,[($=l(D))!=null&&$.id?(V(),B("i",vl)):G("",!0),r("div",_l,[(Ue=l(D))!=null&&Ue.id?(V(),B("span",bl,z(l(D).title)+" "+z(l(D).version),1)):G("",!0),e(S,null,{default:n(()=>[...s[14]||(s[14]=[m("更多模板 >>",-1)])]),_:1})])])],2)])]}),_:1}),e(w,{label:"域名",prop:"webname"},{default:n(()=>[e(h,{ref:"popover",placement:"top-start","popper-class":"green-tips-popover !p-0",title:"",width:"400",visible:l(L),"onUpdate:visible":s[2]||(s[2]=$=>me(L)?L.value=$:null),"trigger-keys":[],trigger:"focus"},{reference:n(()=>[Be(e(U,{onInput:d,modelValue:l(c).webname,"onUpdate:modelValue":s[0]||(s[0]=$=>l(c).webname=$),type:"textarea",width:"52rem",rows:4,resize:"none",onFocus:s[1]||(s[1]=$=>L.value=!0),placeholder:"如需填写多个域名,请换行填写,每行一个域名,默认为80端口\nIP地址格式:192.168.1.199\n泛解析添加方法 *.domain.com\n如另加端口格式为 www.domain.com:88\nIPv6格式:[2001:db8:85a3::8a2e:370:7334]:88"},null,8,["modelValue"]),[[Xe,void 0,"popover"]])]),default:n(()=>[s[15]||(s[15]=r("div",{class:"!p-[12px] bg-primary text-white"},[m(" 如需填写多个域名,请换行填写,每行一个域名,默认为80端口 "),r("br"),m(" IP地址格式:192.168.1.199 "),r("br"),m(" 泛解析添加方法 *.domain.com "),r("br"),m(" 如另加端口格式为 www.domain.com:88 "),r("br"),m(" IPv6格式:[2001:db8:85a3::8a2e:370:7334]:88 ")],-1))]),_:1},8,["visible"])]),_:1}),e(w,{label:"备注"},{default:n(()=>[e(U,{modelValue:l(c).ps,"onUpdate:modelValue":s[3]||(s[3]=$=>l(c).ps=$),placeholder:"请输入备注,可为空",width:"52rem"},null,8,["modelValue"])]),_:1}),e(w,{label:"根目录",prop:"path"},{default:n(()=>[e(ne,{modelValue:l(c).path,"onUpdate:modelValue":s[4]||(s[4]=$=>l(c).path=$),placeholder:"请输入根目录",icon:"el-folder-opened",width:"52rem",onIconClick:Q},null,8,["modelValue"])]),_:1}),e(w,{label:"其他配置",prop:"other"},{default:n(()=>[r("div",wl,[r("div",gl,[r("span",{class:Le({"text-danger":!l(F).isSetup})}," 数据库:"+z(l(F).isSetup?"MySQL数据库":"数据库未安装!"),3),r("span",null,"编码:"+z(l(F).code),1),r("span",null,"账号:"+z(l(c).datauser),1),r("span",null,"密码:"+z(l(c).datapassword),1),r("span",null,"PHP版本:"+z(l(F).version),1)])]),r("span",yl,[s[17]||(s[17]=m(" 其他配置初始状态为默认选择的配置项,如需修改请点击 ",-1)),e(S,{onClick:o},{default:n(()=>[...s[16]||(s[16]=[m("编辑配置",-1)])]),_:1})])]),_:1})]),_:1},8,["model","rules"]),e(Ye,{title:"编辑配置",modelValue:l(P),"onUpdate:modelValue":s[10]||(s[10]=$=>me(P)?P.value=$:null),showFooter:"",area:62,onConfirm:E},{default:n(()=>[r("div",hl,[e(Y,{model:l(u),rules:l(ce),ref:"editFormRef"},{default:n(()=>[e(w,{label:"数据库"},{default:n(()=>[e(ie,{class:"!w-[16rem]",modelValue:l(c).sql,"onUpdate:modelValue":s[5]||(s[5]=$=>l(c).sql=$)},{default:n(()=>[e(oe,{label:"MySQL",value:"MySQL"})]),_:1},8,["modelValue"]),e(ie,{modelValue:l(u).code,"onUpdate:modelValue":s[6]||(s[6]=$=>l(u).code=$),class:"ml-[8px] !w-[16rem]"},{default:n(()=>[e(oe,{label:"utf8mb4",value:"utf8mb4"}),e(oe,{label:"utf8",value:"utf8"}),e(oe,{label:"gbk",value:"gbk"}),e(oe,{label:"big5",value:"big5"})]),_:1},8,["modelValue"])]),_:1}),e(w,{label:"数据库账号"},{default:n(()=>[r("div",xl,[e(w,{prop:"datauser",label:""},{default:n(()=>[e(U,{placeholder:"创建数据库账号",modelValue:l(u).datauser,"onUpdate:modelValue":s[7]||(s[7]=$=>l(u).datauser=$),width:"17rem"},null,8,["modelValue"])]),_:1}),e(w,{label:"",class:"!mt-0"},{default:n(()=>[e(U,{class:"ml-[8px]",width:"16rem",placeholder:"数据库密码",modelValue:l(u).datapassword,"onUpdate:modelValue":s[8]||(s[8]=$=>l(u).datapassword=$)},null,8,["modelValue"])]),_:1})]),s[18]||(s[18]=r("span",{class:"text-tertiary text-small"}," 创建站点的同时,为站点创建一个对应的数据库帐户,方便不同站点使用不同数据库。 ",-1))]),_:1}),e(w,{label:"PHP版本"},{default:n(()=>[e(ie,{class:"!w-[16rem]",modelValue:l(u).version,"onUpdate:modelValue":s[9]||(s[9]=$=>l(u).version=$)},{default:n(()=>[(V(!0),B(Z,null,re(l(K),$=>(V(),X(oe,{key:$.value,label:$.name,disabled:!$.status,value:$.version},{default:n(()=>[r("span",null,z($.name),1),$.status?G("",!0):(V(),B(Z,{key:0},[s[20]||(s[20]=m(" [ ",-1)),e(S,{class:"my-4px",onClick:Ue=>p($.version)},{default:n(()=>[...s[19]||(s[19]=[m("未安装",-1)])]),_:1},8,["onClick"]),s[21]||(s[21]=m(" ] ",-1))],64))]),_:2},1032,["label","disabled","value"]))),128))]),_:1},8,["modelValue"]),s[22]||(s[22]=r("span",{class:"text-tertiary text-small ml-1rem"},"* 仅显示选中模板所支持的PHP版本",-1))]),_:1})]),_:1},8,["model","rules"])])]),_:1},8,["modelValue"])])}}}),Fl=he(Vl,[["__scopeId","data-v-df2b7de8"]]),Cl=pe({__name:"index",setup(se,{expose:te}){const{isRefreshList:le}=_e(),J=Ie(),R=y("域名|1|0|0|0\n域名|1|0|0|0\n域名|1|0|0|0"),M=Fe("popupClose"),T=C=>C.replace(/\s+/g,""),H=C=>/^([\w\u4e00-\u9fa5\-\*]{1,100}\.){1,10}([\w\u4e00-\u9fa5\-]{1,24}|[\w\u4e00-\u9fa5\-]{1,24}\.[\w\u4e00-\u9fa5\-]{1,24})$/.test(T(C)),a=C=>/^([1-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/.test(C),i=[{label:"名称",prop:"name"},{label:"FTP",prop:"db_status",render:C=>typeof C.db_status=="boolean"?be("span",{class:C.db_status?"text-primary":""},C.db_status?"已配置":"未配置"):be("span",C.db_status)},{label:"数据库",prop:"ftp_status",render:C=>typeof C.ftp_status=="boolean"?be("span",{class:C.ftp_status?"text-primary":""},C.ftp_status?"已配置":"未配置"):be("span",C.ftp_status)},{label:"结果",render:C=>be("span",{class:C.status?"text-primary":"text-danger truncate !w-[9.6rem] inline-block"},C.status?"操作成功":C.msg)}];return te({onConfirm:async C=>{let A=R.value.split("\n"),c=[];for(let F=0;F<A.length;F++){let D=A[F],u=D.split("|"),b=[];if(D!==""){for(let k=0;k<u.length;k++){let P=F+1,q=T(u[k]);switch(b.push(q),k){case 0:let K=q.split(",");for(let Q=0;Q<K.length;Q++){let d=K[Q].trim().split(":");if(!H(d[0]))return J.error("第"+P+"行,域名格式错误【"+d[0]+"】"),!1;if(typeof d[1]<"u"&&!a(d[1]))return J.error("第"+P+"行,端口格式错误【"+d[1]+"】"),!1}break;case 1:if(q!=="1"&&q.indexOf("/")<-1)return J.error("第"+P+"行,站点目录格式错误【"+q+"】"),!1;break}}c.push(b.join("|").replace(/\r|\n/,""))}}let I=J.load("正在批量添加站点,请稍后...");try{const{data:F}=await xt({create_type:"txt",websites_content:JSON.stringify(c)});let D=[];Object.keys(F.success).forEach(u=>{D.push({name:u,status:!0,ftp_status:F.success[u].ftp_status,db_status:F.success[u].db_status})}),Object.keys(F.error).forEach(u=>{D.push({name:u,status:!1,ftp_status:"--",db_status:"--",msg:F.error[u]})}),le.value=!0,M(),Et({resultColumn:i,resultData:D,resultTitle:"添加站点"},46),R.value="域名|1|0|0|0\n域名|1|0|0|0\n域名|1|0|0|0"}catch(F){}finally{I.close()}}}),(C,A)=>{const c=ue;return V(),B("div",null,[e(c,{type:"textarea",modelValue:l(R),"onUpdate:modelValue":A[0]||(A[0]=I=>me(R)?R.value=I:null),rows:12,resize:"none",width:"72rem"},null,8,["modelValue"]),A[1]||(A[1]=r("ul",{class:"mt-[8px] text-tertiary leading-10"},[r("li",null,"批量格式:域名|根目录|FTP|数据库|PHP版本"),r("li",null,"域名参数:多个域名用 , 分割"),r("li",null,"根目录参数:填写 1 为自动创建,或输入具体目录"),r("li",null,"FTP参数:填写 1 为自动创建,填写 0 为不创建"),r("li",null,"数据库参数:填写 1 为自动创建,填写 0 为不创建"),r("li",null,"PHP版本参数:填写 0 为静态,或输入PHP具体版本号列如:56、71、74"),r("li",null,"如需添加多个站点,请换行填写"),r("li",null,[m(" 案例: "),r("span",null,"bt.cn,test.cn:8081|/www/wwwroot/bt.cn|1|1|56")])],-1))])}}}),Dl={class:"p-[20px]"},kl=["innerHTML"],Rl=pe({__name:"index",props:{compData:{default:{}}},setup(se,{expose:te}){const le=se,{plugin:J}=ve(),R=y(!0),M=y(!1),T=y(""),H=Ie(),a=y("addSiteDefault");y(null);const i=Fe("popupSetFooter",u=>{}),L=async()=>{try{const{data:u}=await Ft();return{ftp:u.ftp,mysql:u.mysql}}catch(u){}},{typeList:C,refresh:A}=le.compData,{BtTabs:c,tabsRefs:I}=ct({type:"card",value:a,options:[{label:"站点",name:"addSiteDefault",lazy:!0,render:e(kt,{compData:{getStatus:L,typeList:C,refresh:A}},null)},{label:"一键部署",name:"addDeployment",lazy:!0,render:e(Fl,{compData:{getStatus:L}},null)},{label:"Git部署",name:"addGit",lazy:!0,render:e(jt,null,null)},{label:"swoole异步项目",name:"addSwoole",lazy:!0,render:e(Gt,{compData:{getStatus:L}},null)},{label:"thinkphp异步项目",name:"addThinkphp",lazy:!0,render:e(el,{compData:{getStatus:L}},null)},{label:"异步项目",name:"addUniversal",lazy:!0,render:e(sl,{compData:{getStatus:L}},null)},{label:"批量创建",name:"batchAddSite",lazy:!0,render:e(Cl,null,null)}]});Je(()=>a.value,u=>{i(u!=="addPack")});const F=async u=>{if((a.value==="addSwoole"||a.value==="addThinkphp"||a.value==="addUniversal")&&J.value.webserver!=="nginx")return H.error("当前仅支持nginx服务器使用");I()[a.value].onConfirm(u)},D=async()=>{Ct(),R.value=!0};return fe(async()=>{a.value==="addPack"&&i(!1);const{data:u}=await Vt(),b=!(u!=null&&u.status);T.value=(u==null?void 0:u.msg)||"";const k=await Dt({});R.value=!b&&!k}),te({onConfirm:F,getStatus:L}),(u,b)=>{const k=at;return V(),B("div",Dl,[l(R)?G("",!0):(V(),X(k,{key:0,class:"!mb-[1rem]",type:"info",closable:l(M),"close-text":"不再显示","show-icon":"",onMouseenter:b[0]||(b[0]=P=>M.value=!0),onMouseleave:b[1]||(b[1]=P=>M.value=!1),onClose:D},{default:n(()=>[r("div",{class:"flex text-small",innerHTML:l(T)},null,8,kl)]),_:1},8,["closable"])),e(l(c))])}}});export{Rl as default};
function __vite__mapDeps(indexes) {
if (!__vite__mapDeps.viteFileDeps) {
__vite__mapDeps.viteFileDeps = []
}
return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}