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/index32.js
import{k as T,jl as pt,o as De,f as ve,c as Ie,jm as ct,ca as Te,jn as Ue,jo as mt,e as P,_ as q,w as Ee,jp as ft,c7 as Ae,cZ as ye,L as Ke,jq as vt,df as yt,jr as gt,js as _t,dm as We,n as kt,jt as wt,ju as xt,jv as bt,jw as ht,jx as Ct,Z as $t,jy as Dt,jz as It,a0 as Tt}from"./utils-lib.js?v=1777008528";import{H as le,av as Ge,aI as Et,aJ as At,r as C,V as Y,c as oe,w as U,o as ge,a8 as Je,j as c,k as g,q as p,e as r,p as l,P as St,x as f,v as u,L as j,F as pe,B as ce,s as A,C as I,J as N,K,y as w,z as Qe,at as Vt,as as qt,ar as Lt,aW as Ye,a7 as Rt,n as Ze,U as jt,an as Re,am as je,i as zt,g as he,D as Mt,aB as Ot,G as Xe,aH as et,M as ze,az as Pt,I as Ft}from"./base-lib.js?v=1777008528";import{g as H}from"./useStore5.js?v=1777008528";import{_ as tt}from"./index116.js?v=1777008528";import{k as Nt,N as at,l as Ht}from"./useMethods.js?v=1777008528";import{aF as Bt}from"./index3.js?v=1777008528";import{s as Ut}from"./vue-virtual-scroller.esm.js?v=1777008528";import"./vue-virtual-scroller.js?v=1777008528";import{g as ue,F as Kt,a as Wt}from"./form-item.js?v=1777008528";import{h as Gt}from"./useController20.js?v=1777008528";import{_ as Jt}from"./index.vue_vue_type_style_index_0_lang.js?v=1777008528";import{B as Qt}from"./index130.js?v=1777008528";const Me=ve(),{refs:{deployMenuData:ie}}=H(),y=le({loading:!1,list:[],total:0}),k=le({p:1,row:200,query:"",force:0}),Z=async(e={query:k.query,p:k.p,row:k.row,force:0})=>{const a="docker_app_list_timestamp",t=localStorage.getItem(a),o=Date.now(),i=24*60*60*1e3;let d=!1;(!t||o-parseInt(t)>i)&&(d=!0),T({request:pt({...e,app_type:ie.value.app_type,force:e.force||(d?1:0)}),loading:Ge(y,"loading"),success:s=>{ie.value.app_type!=="installed"&&(s.status?((e.force===1||d)&&(localStorage.setItem(a,o.toString()),!d&&Me.success("刷新成功")),y.list=s.data.data.map(($,n)=>({...$,index:"".concat($.appname||Math.random().toString(36).substring(2,15),"_").concat(n)})),y.total=De(s.data.page),ie.value.maximum_cpu=s.data.maximum_cpu,ie.value.maximum_memory=s.data.maximum_memory+" MB"):Me.error(s.msg))}})},Yt=()=>{y.list=[],y.total=0,k.p=1,k.query=""},Zt=At("DOCKER-APP-STORE-LOCAL",()=>{const e=C("git"),a=C({}),t=C(!1),o=C("https://www.bt.cn/bbs/thread-147864-1-1.html");return{activeTabs:e,apphubGitConfig:a,isSaveGitConfig:t,usingHelpLink:o}}),Xt=()=>Et(Zt()),{apphubGitConfig:ea,isSaveGitConfig:ta}=Xt(),Se=ve(),{refs:{deployMenuData:J}}=H(),{mainWidth:aa}=Ie(),W=Y([]),G=Y(""),Ce=()=>Math.floor((aa.value-420)/140),z=C(),ee=async e=>{if(k.p=1,st(),J.value.app_type==="installed"){await nt("all"),e&&Se.success("刷新成功");return}k.force=e?1:0,e&&await Nt(),await Z(k)},st=async()=>await T({request:ct(),data:[Array,W],success:e=>{z.value=e.slice(Ce(),e.length)}}),_e=async e=>{var a,t;G.value=((t=(a=z.value)==null?void 0:a.find(o=>o.type===e))==null?void 0:t.desc)||"",J.value.app_type=e,k.query="",k.p=1,k.force=0,Te(["/mod/docker/com/get_apps","/mod/docker/com/get_installed_apps"]),await Z(k)},nt=async e=>{var a,t;y.loading=!0,G.value=((t=(a=W.value)==null?void 0:a.find(o=>o.type===e))==null?void 0:t.desc)||"",J.value.app_type="installed",Te(["/mod/docker/com/get_apps","/mod/docker/com/get_installed_apps"]),T({request:Ue({app_type:e,p:1,row:20,query:k.query||""}),loading:Ge(y,"loading"),success:o=>{J.value.app_type==="installed"&&(o.status?(y.list=o.data.data.map((i,d)=>({...i,index:d}))||[],o.data.page?y.total=De(o.data.page):y.total=0):Se.error(o.msg))}})},Oe=()=>{J.value.app_type==="installed"&&nt("all"),J.value.app_type="installed"},sa=()=>{W.value=[],G.value="",z.value=[]},na=async e=>{const a=Se.load("正在获取配置信息...");try{const t=await mt(),o=t.data.git_config||{},{git_url:i="",git_branch:d="",user_config:s={}}=o;ea.value={git_url:i,git_branch:d,name:s.name||"",password:s.password||""},t.status&&(ta.value=!0),P({title:"导入应用",area:70,btn:["导入","取消"],component:()=>q(()=>import("./index544.js?v=1777008528"),__vite__mapDeps([]),import.meta.url)})}catch(t){}finally{a==null||a.close()}},la=async()=>{await Ee({title:"清理应用",content:"该操作将会清除所有外部应用,已安装的应用将会保留至已安装列表,是否继续?"}),await T({request:ft(),message:!0,success:()=>{Z(k)}})},oa={class:"flex flex-1 relative items-center mb-20px"},ia={class:"text-small text-secondary leading-[2rem] mx-[2rem] flex items-center"},ra={class:"w-full flex items-center docker-app-list"},da={class:"flex flex-1 relative flex-wrap"},ua=["onClick"],pa={key:0,class:"flex items-center"},ca=oe({__name:"index",setup(e,{expose:a}){const{refs:{deployMenuData:t}}=H(),{mainWidth:o}=Ie();U(()=>o.value,()=>{var d,s,$;z.value=W.value.slice(Ce(),(d=W.value)==null?void 0:d.length),G.value=(($=(s=z.value)==null?void 0:s.find(n=>n.type===t.value.app_type))==null?void 0:$.desc)||""}),ge(st);const i=C();return Je(sa),a({testRef:i}),(d,s)=>{var B,m;const $=tt,n=Ae,L=Qe,x=Vt,b=qt,X=Lt,D=Ye;return c(),g("div",{ref_key:"testRef",ref:i},[p("div",oa,[s[12]||(s[12]=p("span",{class:"w-[80px] pr-16px text-base flex justify-end flex-shrink-0"},"应用搜索",-1)),r($,{class:"!w-[52rem] docker_appstore_search",ref:"searchRef",icon:"el-search",modelValue:l(k).query,"onUpdate:modelValue":s[0]||(s[0]=v=>l(k).query=v),clearable:"",onClear:s[1]||(s[1]=v=>l(ee)(!1)),onIconClick:s[2]||(s[2]=v=>l(ee)(!1)),placeholder:"支持应用名称、字段模糊搜索",onKeyup:s[3]||(s[3]=St(v=>l(ee)(!1),["enter","native"]))},null,8,["modelValue"]),p("span",ia,[s[10]||(s[10]=f(" 如果您希望添加其它Docker应用,请 ",-1)),p("span",{class:"bt-link",onClick:s[4]||(s[4]=v=>l(Bt)())},"联系客服"),s[11]||(s[11]=f(" ,或进行 ",-1)),p("span",{class:"bt-link",onClick:s[5]||(s[5]=v=>l(at)())},"需求反馈"),r(n,{href:"https://www.bt.cn/bbs/thread-137717-1-1.html",class:"ml-4px"},{default:u(()=>[...s[9]||(s[9]=[f(">>使用帮助",-1)])]),_:1})])]),p("div",ra,[s[19]||(s[19]=p("span",{class:"w-[80px] pr-16px text-base flex justify-end"},"应用分类",-1)),p("div",{class:j(["class-item",{on:l(t).app_type==="all"}]),onClick:s[6]||(s[6]=v=>l(_e)("all"))},"全部",2),p("div",{class:j(["class-item flex-shrink-0",{on:l(t).app_type==="installed"}]),onClick:s[7]||(s[7]=(...v)=>l(Oe)&&l(Oe)(...v))},"已安装",2),p("div",da,[(c(!0),g(pe,null,ce((B=l(W))==null?void 0:B.slice(0,l(Ce)()),(v,R)=>(c(),g("div",{key:R,onClick:ut=>l(_e)(v.type),class:j(["class-item",l(t).app_type===v.type?"on":""])},A(v.desc),11,ua))),128)),(m=l(z))!=null&&m.length?(c(),I(X,{key:0,"show-timeout":200,onCommand:l(_e)},{dropdown:u(()=>[r(b,null,{default:u(()=>[(c(!0),g(pe,null,ce(l(z),(v,R)=>(c(),I(x,{key:R,command:v.type},{default:u(()=>[f(A(v.desc),1)]),_:2},1032,["command"]))),128))]),_:1})]),default:u(()=>[r(L,{type:"default",class:j(["AppClassButton",{on:l(z).some(v=>v.type===l(t).app_type)}])},{default:u(()=>[s[13]||(s[13]=f(" 更多 ",-1)),N(p("span",null,"("+A(l(G))+")",513),[[K,l(G)]]),s[14]||(s[14]=p("i",{class:"svgtofont-el-arrow-down ml-[.5rem]"},null,-1))]),_:1},8,["class"])]),_:1},8,["onCommand"])):w("",!0)]),N(r(L,{title:"更新列表",class:"refresh !mr-[1.2rem]",onClick:s[8]||(s[8]=v=>l(ee)(!0))},{default:u(()=>[...s[15]||(s[15]=[f(" 更新应用列表 ",-1)])]),_:1},512),[[K,l(t).app_type!=="installed"&&l(t).app_type!=="AppHub"]]),l(t).app_type==="AppHub"?(c(),g("div",pa,[r(L,{type:"default",title:"清理应用",class:"ml-[1rem]",onClick:l(la)},{default:u(()=>[...s[16]||(s[16]=[f(" 清理应用 ",-1)])]),_:1},8,["onClick"]),r(D,{content:"支持从Git仓库或本地文件导入应用,自动扫描并识别多个应用,支持选择性导入和批量导入",enterable:!1,placement:"left"},{content:u(()=>[...s[17]||(s[17]=[p("div",{class:"flex flex-col pb-[4px]"},[p("div",null,"支持从Git仓库或本地文件导入应用"),p("div",null,"自动扫描并识别多个应用"),p("div",null,"支持选择性导入和批量导入")],-1)])]),default:u(()=>[r(L,{type:"primary",class:"refresh !mr-[1.2rem] ml-[1rem]",onClick:l(na)},{default:u(()=>[...s[18]||(s[18]=[f(" 导入应用 ",-1)])]),_:1},8,["onClick"])]),_:1})])):w("",!0)])],512)}}}),ma=ye(ca,[["__scopeId","data-v-ce27e3d9"]]),fa=ve(),{refs:{deployMenuData:lt}}=H(),ke=C(!1),$e=C(!1);let te=null;const va=async()=>{ke.value||(ke.value=!0,$e.value=!0,y.list.length<y.total&&(k.p++,lt.value.app_type==="installed"?await se("all"):await Z(k)),ke.value=!1)},se=async(e,a)=>{try{k.p===1&&(y.total=0,y.list=[]),a||(y.loading=!0),lt.value.app_type="installed",await T({request:Ue({app_type:e||"all",p:k.p,row:20,query:k.query||""}),success:t=>{if(t.status){const o=t.data.data.map((i,d)=>({...i,index:d}))||[];y.list=[...y.list,...o],t.data.page?y.total=De(t.data.page):y.total=0}else fa.error(t.msg)}})}catch(t){}finally{y.loading=!1}},ot=()=>{y.list.some(a=>a.status==="initializing")&&(te=setTimeout(()=>{se("all",!0),ot()},3e4))},ya=""+new URL("../img/soft_ico/icon_plug.svg",import.meta.url).href;function Pe(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!zt(e)}const ga=Rt(),ne=ve(),{refs:{deployMenuData:me}}=H(),{refs:{isRefreshInstallList:_a}}=Ke(),ka={mode:"ace/mode/yaml",theme:ga.value?"ace/theme/clouds_midnight":"ace/theme/chrome",wrap:!0,showInvisibles:!1,showFoldWidgets:!1,useSoftTabs:!0,tabSize:2,showPrintMargin:!1,readOnly:!1,fontSize:"12px"},Fe=async(e,a)=>{const{appname:t,appid:o}=e,i=o==-1?"/static/img/soft_ico/apphub":"/static/img/soft_ico/dkapp",d=o==-1?"ico-apphub_":"ico-dkapp_",s=t==null?void 0:t.replace(/-+[{0-9},\.,]+$/,""),$="".concat(i,"/").concat(d).concat(s,".png");a.value=await Ht($)},wa=e=>e.canUpdate&&e.installed,xa=async e=>{await rt({appData:e,openDependInstall:fe}),it(),P({title:"".concat(e.appname,"安装配置"),area:70,component:()=>q(()=>import("./add-app-soft.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{appData:e,openDependInstall:fe},showFooter:!0})},fe=async({name:e,type:a})=>{me.value.app_type=a,k.query="",await Z(),Ze(async()=>{const t=y.list.find(o=>o.appname===e);t&&(await rt({appData:t,openDependInstall:fe}),it(),P({title:"".concat(t.appname,"安装配置"),area:70,component:()=>q(()=>import("./add-app-soft.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:{appData:t,openDependInstall:fe},showFooter:!0}))})},ba=async e=>{P({title:"更新配置",area:42,component:()=>q(()=>import("./app-update.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e,showFooter:!0})},ha=e=>{P({title:"详情展示",area:64,component:()=>q(()=>import("./detail-view.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),compData:e,btns:!1})},Ne=(e,a,t)=>{switch(e){case"ollama":case"ollama_and_openwebui":case"deepseek_r1":P({title:"管理",area:[86,52],component:()=>q(()=>import("./index370.js?v=1777008528").then(o=>o.i),__vite__mapDeps([]),import.meta.url),compData:{...a,...t},btns:!1});break;case"mysql":case"redis":case"postgresql":case"tdengine":$a(e,a);break}},Ca=oe({name:"ContainerTerminalDialog",props:{compData:{type:Object,default:()=>({})}},setup(e,{expose:a}){const t=C(),o=C(e.compData.cmd);let i=C(null);const d=()=>{i.value=t.value.socketInfo(),i.value.send("cd /www/wwwroot\r\n"),i.value.send("clear && ".concat(o.value,"\r\n"))};return ge(()=>{Ze(()=>{d()})}),a({onCancel:()=>{i.value.close()}}),()=>r("div",{class:"p-[1rem] bg-black dark:bg-lighter h-full"},[r(Jt,{id:"dockerTerminal",class:"h-full",active:!0,ref:t,url:"/webssh","host-info":{}},null)])}}),$a=async(e,a)=>{const t=["redis_password","mysql_root_password","postgres_password"];let o="";for(const d of a.appinfo)if(t.includes(d.fieldKey)){o=d.fieldValue;break}const i=await T({request:vt({appname:e,id:a.container_id,password:o}),loading:"正在获取数据库终端命令,请稍后..."});if(!i.status)return ne.error("连接数据库失败");P({component:()=>Ca,title:"宝塔终端",area:[80,50],compData:{cmd:i.msg}})},we=e=>e.host_ip==="0.0.0.0"&&e.apptype!=="Database"&&e.apptype!=="System",re=(e,a,t)=>{if(e.host_ip!=="0.0.0.0"||e.apptype==="Database"||e.apptype==="System"){ne.error("当前应用不支持IP+端口访问");return}window.open("".concat(t,"://").concat(e.server_ip,":").concat(a),"_blank","noopener,noreferrer")},Da=async(e,a)=>{var t;if(e==="path"){const{router:o}=await q(()=>import("./utils-lib.js?v=1777008528").then(s=>s.mi),__vite__mapDeps([]),import.meta.url),i=(t=a.appinfo.filter(s=>s.fieldKey==="app_path")[0])==null?void 0:t.fieldValue;yt("Path",i);let d=ne.load("正在跳转,请稍后...");o.push({path:"/files"}),d.close()}},Ia=async e=>{Gt({id:e.site_id,name:e.site_name,addtime:e.site_addtime})},xe=(e,a,t)=>{if(t&&e.status!=="initializing")return;let o=!1;a==="log"&&e.status==="initializing"&&(o=!0);const i={back:{component:()=>q(()=>import("./backup-view.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),area:82,title:"应用备份",showFooter:!1},log:{component:()=>q(()=>import("./app-log.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),area:88,title:"应用日志",showFooter:!1},password:{component:()=>q(()=>import("./update-password.js?v=1777008528"),__vite__mapDeps([]),import.meta.url),area:42,title:"修改mysql密码",showFooter:!0}};P({title:i[a].title,area:i[a].area,compData:{...e,isInit:o},component:i[a].component,showFooter:i[a].showFooter})},de=async(e,a,t)=>{let o={rebuild:"重建",start:"启动",restart:"重启",stop:"停止"};await Ee({title:"提示",content:"确定要".concat(o[a],"【").concat(t.service_name,"】吗?"),icon:"warning-filled"}),await T({request:gt({service_name:t.service_name,status:a,app_name:t.appname}),loading:"正在操作,请稍后...",message:!0}),e("refresh")},Ta=async(e,a)=>{await Ee({title:"提示",content:"确定要删除【".concat(a.appname,"】吗?"),icon:"warning-filled",type:"check",check:{content:"同时删除此应用的所有数据",onConfirm:async t=>{await T({request:_t({id:a.id,delete_data:Number(t)}),loading:"正在删除,请稍后...",message:!0}),e("refresh")}}})},Ea=e=>window.open("http://"+e,"_blank","noopener,noreferrer"),M=Y({});let h=le({version:"",showCompose:"false",editcompose:""});const Aa=e=>{var a;(a=e.field)==null||a.forEach(t=>{h[t.attr]=t.default,t.type==="checkbox"&&(h[t.attr]=!!t.default)}),h.service_name="".concat(e.appname,"_").concat(We(4))},Ts=(e,a)=>{switch(e.type){case"password":return ue(e.name,()=>r("div",{class:"flex flex-col items-start justify-center w-full"},[r(tt,{placeholder:"请输入".concat(e.name),width:"24rem","is-active":!0,modelValue:a.value[e.attr],"onUpdate:modelValue":t=>a.value[e.attr]=t,icon:"el-refresh",onInput:t=>He(e,t,a),onIconClick:()=>h[e.attr]=We(16)},null)]),e.attr,{rules:{}});case"checkbox":return ue(e.name,()=>r(jt,{modelValue:a.value[e.attr],"onUpdate:modelValue":t=>a.value[e.attr]=t,label:e.name,class:"!my-0"},{default:()=>[r("span",{class:"unit"},[f(" * "),e.suffix,f(" ")])]}),e.attr);case"textarea":return Wt(e.name,e.attr,{attrs:{placeholder:"请输入".concat(e.name),autosize:{minRows:1,maxRows:15},class:"!w-[244px]",onInput:t=>He(e,t,a)},rules:[{required:!1,message:"请输入".concat(e.name),trigger:["change","blur"]}],slots:{unit:()=>Be(e)}});default:if(typeof e.type=="string"&&e.type.startsWith("ace:")){const t=e.type.split(":")[1]||"",o={...ka,mode:t?"ace/mode/".concat(t):"ace/mode/text"};return ue(e.name,()=>r("div",{class:"flex flex-col items-start justify-center w-full"},[r(Qt,{key:"editer1",class:"!w-[500px] h-[30rem]",modelValue:a.value[e.attr],"onUpdate:modelValue":i=>a.value[e.attr]=i,editorOption:o},null),e.suffix?r("span",{class:"text-secondary text-[1.2rem] leading-[1] mt-[1rem]",innerHTML:" * ".concat(e.suffix)},null):r("span",null,null)]),e.attr)}return Kt(e.name,e.attr,{attrs:{class:"!w-[244px] relative;",placeholder:"请输入".concat(e.name)},slots:{unit:()=>Be(e)},rules:[{required:!1,message:"请输入".concat(e.name),trigger:"blur"}]})}},Es=(e,a,t)=>ue(e.appTypeCN,()=>{var d;let o,i;return r("div",null,[((d=_.value[Sa(e)])==null?void 0:d.appname)&&r(Re,{class:"!w-[12rem]",modelValue:_.value.form[e.apptype],"onUpdate:modelValue":s=>_.value.form[e.apptype]=s},Pe(o=e.appname.map(s=>r(je,{label:s,value:s},null)))?o:{default:()=>[o]}),r(Re,{modelValue:_.value[F(e)].service_name,"onUpdate:modelValue":s=>_.value[F(e)].service_name=s,placeholder:_.value[F(e)].option.length==0?"未安装":"请选择",disabled:_.value[F(e)].option.length==0,class:"ml-[0.8rem] !w-[16rem]"},Pe(i=_.value[F(e)].option.map(s=>r(je,{label:s.service_name+" "+s.version,value:s.service_name},null)))?i:{default:()=>[i]}),r("span",{class:"ml-[2rem] text-small leading-[2.2rem] text-tertiary"},[e.appDesc]),_.value[F(e)].option.length==0&&r("div",null,[r("span",{class:"leading-[1] bt-link !text-small",onClick:()=>Va({name:F(e),type:e.apptype},t)},[f("点击安装")])])])}),ae=Y([]),_=C({}),Sa=({appname:e})=>kt(e)?e:e[0],F=e=>_.value.form[e.apptype],He=(e,a,t)=>{e.attr==="domain"&&a!==""&&(t.value.allow_access=!1)},Be=e=>{const a="whitespace-nowrap absolute left-[250px] top-0 text-secondary";return e.attr==="cpus"?r("span",{class:a},[" * ".concat(e.suffix).concat(me.value.maximum_cpu)]):e.attr==="memory_limit"?r("span",{class:a},[" * ".concat(e.suffix).concat(me.value.maximum_memory)]):e.suffix?r("span",{class:a,innerHTML:" * ".concat(e.suffix)},null):r("span",null,null)},Va=(e,a)=>{M.value.openDependInstall(e),a()},be=e=>{if(!(e.indexOf(".")>-1))return!1;const a=e.split(".");return a.length===3?{x:a[0],yz:"".concat(a[1],".").concat(a[2])}:a.length===2?{x:a[0],yz:a[1]}:!1},qa=()=>{try{if(h.domain&&!$t(h.domain)){ne.error("域名格式不正确");return}let e={...h,...M.value.appData.appid==-1?{appid:Number(M.value.appData.appid)}:{},app_name:M.value.appData.appname,disable_domain:+!h.domain,allow_access:Number(h.allow_access),...h.showCompose==="true"?{compose_file:h.editcompose}:{}};return be(h.version)?(e.m_version=be(h.version).x,e.s_version=be(h.version).yz):(e.m_version=h.version,e.s_version=""),M.value.appData.depend&&(e.depend_app=[],Object.keys(_.value.form).forEach(a=>{const t=_.value.form[a];Object.keys(_.value).forEach(o=>{if(t===o){if(!_.value[o].service_name)throw ne.error("未选择必须依赖项"),new Error("未选择必须依赖项");e.depend_app.push({appname:_.value[o].appname,service_name:_.value[o].service_name})}})}),e.depend_app=JSON.stringify(e.depend_app)),delete e.showCompose,e}catch(e){}},As=async e=>{const a=await qa();a&&T({loading:"正在安装...",request:wt(a),message:!0,success:t=>{t.status&&(me.value.app_type="installed",e())}})},it=()=>{var e,a,t;ae.value=[],(a=(e=M.value.appData)==null?void 0:e.appversion)==null||a.forEach(o=>{o.s_version.length?o.s_version.forEach(i=>{ae.value.push({label:o.m_version+"."+i,value:o.m_version+"."+i})}):ae.value.push({label:o.m_version,value:o.m_version})}),h.version=(t=ae.value[0])==null?void 0:t.value},rt=async e=>{var t,o;let a=[];_.value.form={},M.value=e,Aa(e.appData),(t=e.appData.depend)==null||t.forEach(i=>_.value.form[i.apptype]=""),(o=e.appData.depend)==null||o.forEach(i=>{i.appname.forEach((d,s)=>{!s&&(_.value.form[i.apptype]=d),_.value[d]={appname:d,apptype:i.apptype,version:"",service_name:"",option:[]},a.push({app_name:d,app_type:i.apptype})})}),T({request:xt({depend_app:JSON.stringify(a)}),data:{data:Array},success:i=>{var d;(d=i.data)==null||d.forEach((s,$)=>{var n;_.value[s.appname].service_name=(n=s.installed[0])==null?void 0:n.service_name,_.value[s.appname].option=s.installed||[]})}})},Ss=()=>{M.value={},h=le({version:"",showCompose:"false",editcompose:""}),ae.value=[],_.value={}};let E=null,V=[],O={};const Ve=C("run"),Q=Y(""),La=()=>{var e;E=Tt({route:"/sock_shell",onMessage:Ra}),E==null||E.send("tail -f "+((e=O.appinfo.filter(a=>a.fieldKey==="installed_log")[0])==null?void 0:e.fieldValue))},Ra=(e,a)=>{try{const t=a.data;V.push(t),V.length>50?Q.value=V==null?void 0:V.slice(V.length-50).join(" "):Q.value=V==null?void 0:V.join(" "),(t.includes("bt_successful")||t.includes("bt_failed"))&&(E==null||E.close())}catch(t){E==null||E.close()}},Vs=e=>{Q.value="",V=[],e==="run"?qe():Le()},qs=()=>{Ve.value==="run"?qe():Le()},qe=async()=>{T({request:Dt({service_name:O.service_name,app_name:O.appname}),success:e=>{Q.value=e.data.data}})},Ls=e=>{O=e,O.isInit?(Ve.value="install",Le()):qe()},Le=async()=>{if(O.isInit){La();return}T({request:It({service_name:O.service_name}),success:e=>{Q.value=e.data.data||""}})},Rs=()=>{E==null||E.close(),E=null,V=[],O={},Ve.value="run",Q.value=""},S=le({version:"",backup:!1,pull:!1,id:""}),dt=Y([]),js=async e=>{S.id=e.id,await T({request:bt({id:S.id}),data:{data:[Array,dt]},success:a=>{S.version=a.data[0].version}})},zs=async e=>{let a={id:S.id,m_version:S.version.split(".")[0],s_version:"".concat(S.version.split(".")[1],".").concat(S.version.split(".")[2]),backup:S.backup,pull:S.pull};await T({request:ht(a),loading:"正在更新,请稍后...",message:!0}),_a.value=!0,e()},Ms=()=>{S.version="",S.backup=!1,S.pull=!1,S.id="",dt.value=[]},Os=(e,a,t,o)=>{e==="true"&&a.value.editcompose===""&&T({request:Ct({app_name:t,gpu:typeof a.value.gpu=="boolean",appid:o}),success:i=>{a.value.editcompose=i.data.data}})},ja=["src"],za={src:ya,alt:"icon_plug",key:"icon_plug",class:"AppImg"},Ma={class:"AppContent"},Oa={class:"w-full flex items-start justify-between"},Pa={class:"flex-col flex flex-grow-0"},Fa={class:"AppRow"},Na=["title"],Ha={key:0,class:"flex items-center"},Ba={key:0,class:"flex items-center"},Ua={key:1},Ka={class:"mx-8px"},Wa=["innerHTML","title"],Ga={key:1,class:"AppDescribe"},Ja={class:"AppRow"},Qa={class:"-m-[12px]"},Ya=["onClick"],Za=["onClick"],Xa=["title","onClick"],es={class:"flex items-center flex-1"},ts={class:"flex items-center"},as={class:"truncate max-w-[24rem]"},ss={key:0,class:"flex"},ns={key:0,class:"absolute bottom-14px w-[80%]"},ls={key:1,class:"tag-container absolute bottom-6"},os=oe({__name:"index",props:{data:{default:()=>({})}},emits:["refresh"],setup(e,{emit:a}){const t=e,{refs:{deployMenuData:o}}=H(),i=C("");U(t,async()=>{i.value="",await Fe(t.data,i)}),ge(async()=>{await Fe(t.data,i)});const d=a,s=he(()=>{switch(t.data.status){case"running":return["运行中","success"];case"exited":return["已停止","danger"];case"initializing":return["安装中","info"];default:return["异常","warning"]}});return($,n)=>{const L=Ae,x=Mt,b=Ye,X=Ot,D=Qe,B=Xe;return c(),g("div",{class:j(["AppItem relative",{"!h-[12.8rem]":!e.data.installed}])},[l(i)?(c(),g("img",{src:l(i),key:e.data.appname,class:"AppImg"},null,8,ja)):(c(),g("img",za)),p("div",Ma,[p("div",Oa,[p("div",Pa,[p("div",Fa,[p("span",{class:j(["text-medium font-600",{"truncate leading-[22px] !font-normal flex-1 max-w-[20rem]":e.data.installed,"flex items-center":!e.data.installed}]),title:e.data.installed?e.data.service_name:e.data.apptitle},[p("span",null,A(e.data.installed?e.data.service_name:e.data.apptitle),1),e.data.installedCount?(c(),g("span",{key:0,class:"mx-8px bt-link text-small font-normal",onClick:n[0]||(n[0]=m=>l(o).app_type="installed")},"已安装 ("+A(e.data.installedCount)+")",1)):w("",!0),e.data.help?(c(),I(L,{key:1,href:e.data.help,target:"_blank",class:"ml-8px bt-link text-small font-normal"},{default:u(()=>[...n[17]||(n[17]=[f(" >>帮助",-1)])]),_:1},8,["href"])):w("",!0)],10,Na),e.data.installed?(c(),g("div",Ha,[r(x,{type:l(s)[1],class:j(["mx-[0.8rem]",{"cursor-pointer":e.data.status==="initializing"}]),onClick:n[1]||(n[1]=m=>l(xe)(e.data,"log",!0))},{default:u(()=>[e.data.status==="initializing"?(c(),g("span",Ba,[...n[18]||(n[18]=[f("正在安装 ",-1),p("i",{class:"svgtofont-el-loading !text-small animation-spin"},null,-1)])])):(c(),g("span",Ua,A(l(s)[0]),1))]),_:1},8,["type","class"]),r(b,{class:"item",effect:"dark",content:"进入安装目录",placement:"top"},{default:u(()=>[p("i",{class:"svgtofont-folder-open mr-[0.4rem]",onClick:n[2]||(n[2]=m=>l(Da)("path",e.data))})]),_:1}),r(b,{class:"item",effect:"dark",content:"打开日志",placement:"top"},{default:u(()=>[p("i",{class:"svgtofont-left-logs",onClick:n[3]||(n[3]=m=>l(xe)(e.data,"log"))})]),_:1}),p("span",Ka,"已安装:"+A(e.data.createat),1)])):w("",!0)]),p("div",null,[e.data.installed?w("",!0):(c(),g("span",{key:0,innerHTML:e.data.appdesc,title:e.data.appdesc,class:"AppNoSetDes"},null,8,Wa)),e.data.installed?(c(),g("div",Ga,[p("div",Ja,[r(x,{type:"info",class:"mr-[0.8rem]",effect:"plain"},{default:u(()=>[f("版本:"+A(e.data.m_version+(e.data.s_version?".":"")+e.data.s_version),1)]),_:1}),(c(!0),g(pe,null,ce(e.data.port,(m,v)=>(c(),I(X,{key:m,trigger:"hover",placement:"bottom",width:"12.5rem","popper-class":"!min-w-[12.5rem]"},{reference:u(()=>[N(r(x,{type:"info",class:j(["mr-[0.8rem]",l(we)(e.data)?"cursor-pointer":""]),effect:"plain",onClick:R=>l(re)(e.data,m,"http")},{default:u(()=>[f("端口:"+A(m),1)]),_:2},1032,["class","onClick"]),[[K,v<2]])]),default:u(()=>[p("div",Qa,[p("div",{class:"px-[16px] py-[8px] cursor-pointer text-center hover:bg-light",onClick:R=>l(re)(e.data,m,"http")},"HTTP协议访问",8,Ya),p("div",{class:"px-[16px] py-[8px] cursor-pointer text-center hover:bg-light",onClick:R=>l(re)(e.data,m,"https")},"HTTPS协议访问",8,Za)])]),_:2},1024))),128)),r(b,{placement:"top"},{content:u(()=>[p("div",null,[(c(!0),g(pe,null,ce(e.data.port,(m,v)=>{var R;return N((c(),g("span",{key:v,class:j(l(we)(e.data)?"cursor-pointer":""),title:l(we)(e.data)?"点击访问应用":"",onClick:ut=>l(re)(e.data,m)},[f(A(m)+" ",1),N(p("span",null,",",512),[[K,v!==((R=e.data.port)==null?void 0:R.length)-1]])],10,Xa)),[[K,v>1]])}),128))])]),default:u(()=>{var m;return[((m=e.data.port)==null?void 0:m.length)>=3?(c(),I(x,{key:0,type:"info"},{default:u(()=>{var v;return[f(" +"+A(((v=e.data.port)==null?void 0:v.length)-2),1)]}),_:1})):w("",!0)]}),_:1})]),p("div",es,[e.data.domain?(c(),I(x,{key:0,type:"info",class:"mr-[0.8rem] cursor-pointer",effect:"plain",onClick:n[4]||(n[4]=m=>l(Ea)(e.data.domain))},{default:u(()=>[p("div",ts,[n[19]||(n[19]=p("i",{class:"svgtofont-icon-max-black mr-[0.4rem] !text-base"},null,-1)),r(b,{effect:"dark",content:"点击跳转域名:"+e.data.domain,placement:"top-start"},{default:u(()=>[p("span",as,"域名:"+A(e.data.domain),1)]),_:1},8,["content"])])]),_:1})):w("",!0),e.data.domain?(c(),g("span",{key:1,class:"bt-link",onClick:n[5]||(n[5]=m=>l(Ia)(e.data))}," >管理网站")):w("",!0)])])):w("",!0)])]),e.data.installed?(c(),g("div",ss,[e.data.appname==="ollama"||e.data.appname==="ollama_and_openwebui"||e.data.appname==="deepseek_r1"?(c(),I(D,{key:0,size:"small",onClick:n[6]||(n[6]=m=>l(Ne)(e.data.appname,e.data))},{default:u(()=>[...n[20]||(n[20]=[f("模型管理",-1)])]),_:1})):w("",!0),e.data.appname==="mysql"||e.data.appname==="redis"||e.data.appname==="postgresql"||e.data.appname==="tdengine"?(c(),I(D,{key:1,size:"small",onClick:n[7]||(n[7]=m=>l(Ne)(e.data.appname,e.data))},{default:u(()=>[...n[21]||(n[21]=[f("终端",-1)])]),_:1})):w("",!0)])):w("",!0),e.data.installed?w("",!0):(c(),I(D,{key:1,class:"docker_install_app",type:"primary",onClick:n[8]||(n[8]=m=>l(xa)(e.data)),"data-soft":e.data.appname},{default:u(()=>[...n[22]||(n[22]=[f("安装",-1)])]),_:1},8,["data-soft"]))]),e.data.installed?(c(),g("div",ns,[r(B,{class:"!my-[0.8rem] w-full"}),r(D,{size:"small",onClick:n[9]||(n[9]=m=>l(ha)(e.data))},{default:u(()=>[...n[23]||(n[23]=[f("详情 ",-1)])]),_:1}),r(D,{size:"small",onClick:n[10]||(n[10]=m=>l(xe)(e.data,"back"))},{default:u(()=>[...n[24]||(n[24]=[f("备份",-1)])]),_:1}),e.data.status==="exited"?(c(),I(D,{key:0,size:"small",onClick:n[11]||(n[11]=m=>l(de)(d,"start",{service_name:e.data.service_name,appname:e.data.appname}))},{default:u(()=>[...n[25]||(n[25]=[f("启动 ",-1)])]),_:1})):w("",!0),e.data.status!=="exited"?(c(),I(D,{key:1,size:"small",onClick:n[12]||(n[12]=m=>l(de)(d,"stop",{service_name:e.data.service_name,appname:e.data.appname}))},{default:u(()=>[...n[26]||(n[26]=[f("停止 ",-1)])]),_:1})):w("",!0),r(D,{size:"small",onClick:n[13]||(n[13]=m=>l(de)(d,"restart",{service_name:e.data.service_name,appname:e.data.appname}))},{default:u(()=>[...n[27]||(n[27]=[f("重启 ",-1)])]),_:1}),r(D,{type:"default",plain:"",size:"small",class:"danger-button",onClick:n[14]||(n[14]=m=>l(de)(d,"rebuild",{service_name:e.data.service_name,appname:e.data.appname}))},{default:u(()=>[...n[28]||(n[28]=[f("重建 ",-1)])]),_:1}),r(D,{type:"default",plain:"",size:"small",class:"danger-button",onClick:n[15]||(n[15]=m=>l(Ta)(d,{appname:e.data.appname,id:e.data.id}))},{default:u(()=>[...n[29]||(n[29]=[f("卸载",-1)])]),_:1}),l(wa)(e.data)?(c(),I(D,{key:2,size:"small",onClick:n[16]||(n[16]=m=>l(ba)(e.data))},{default:u(()=>[...n[30]||(n[30]=[f("更新",-1)])]),_:1})):w("",!0)])):w("",!0),e.data.installed?w("",!0):(c(),g("div",ls,[r(x,{type:"info"},{default:u(()=>[f(A(e.data.appTypeCN),1)]),_:1}),e.data.appid==-1?(c(),I(x,{key:0,type:"success",class:"ml-4"},{default:u(()=>[...n[31]||(n[31]=[f("外部应用",-1)])]),_:1})):w("",!0)]))])],2)}}}),is=ye(os,[["__scopeId","data-v-f3f8eef2"]]),rs={class:"pr-[1.5rem]"},ds={class:"w-full !h-[4rem] p-2rem inline-block flex justify-center items-center text-small"},us={class:"text-small"},ps=oe({__name:"index",setup(e){const{mainHeight:a,mainWidth:t}=Ie(),{refs:{deployMenuData:o}}=H(),{refs:{isRefreshAppList:i,isRefreshInstallList:d}}=Ke(),s=C(null),$=C(null),n=he(()=>t.value<1125?1:t.value<1632?2:3),L=he(()=>(t.value-35)/n.value);return U(()=>o.value.app_type,async x=>{s.value.scrollTop=0,$e.value=!1,x==="installed"?(clearTimeout(te),await se("all"),ot()):clearTimeout(te)}),U(()=>i.value,x=>{x&&(Z(k),i.value=!1)}),U(()=>d.value,x=>{x&&(clearTimeout(te),se("all"),d.value=!1)}),U(()=>y.list.length,x=>{$.value.scrollToPosition(0),$.value.handleResize()}),ge(()=>{o.value.app_type==="installed"?d.value=!0:i.value=!0}),et(()=>{clearTimeout(te)}),(x,b)=>{const X=Ae,D=Xe,B=Pt;return c(),g("div",{ref_key:"scrollContainerRef",ref:s,style:ze("height:".concat(l(a)-260,"px")),class:"overflow-hidden relative scrollBox"},[N(r(l(Ut),{ref_key:"virtualScrollRef",ref:$,class:"AppList",style:ze("height:".concat(l(a)-280,"px;width: calc(20px + ").concat(l(L),"px * ").concat(l(n),");")),items:l(y).list,"item-size":l(o).app_type==="installed"?175:145,itemSecondarySize:l(L),gridItems:l(n),buffer:290,"key-field":"index",itemClass:"app-item",onScrollEnd:l(va)},{default:u(({item:m})=>[p("div",rs,[r(is,{data:m,onRefresh:l(se)},null,8,["data","onRefresh"])])]),after:u(()=>[l($e)&&l(y).list.length&&l(o).app_type!=="installed"?(c(),I(D,{key:0},{default:u(()=>[p("span",ds,[b[2]||(b[2]=f("没有更多了,如没有想要的应用可",-1)),r(X,{onClick:l(at)},{default:u(()=>[...b[1]||(b[1]=[f("提交需求反馈",-1)])]),_:1},8,["onClick"])])]),_:1})):w("",!0)]),_:1},8,["style","items","item-size","itemSecondarySize","gridItems","onScrollEnd"]),[[K,l(y).list.length]]),l(y).list.length?w("",!0):(c(),I(B,{key:0,class:"w-full"},{description:u(()=>[p("span",us,[b[3]||(b[3]=f("未查询到搜索内容,请尝试",-1)),p("span",{class:"inline-flex bt-link",onClick:b[0]||(b[0]=m=>l(ee)(!0))},"更新应用列表"),b[4]||(b[4]=f("或加入QQ群:767189639反馈",-1))])]),_:1}))],4)}}}),cs=ye(ps,[["__scopeId","data-v-7a8f7a60"]]),ms={class:"w-full"},fs=oe({__name:"index",setup(e){return et(()=>{Te(["/mod/docker/com/get_apps","/mod/docker/com/get_tags","/mod/docker/com/get_installed_apps"])}),Je(()=>{Yt()}),(a,t)=>{const o=Ft("bt-loading");return c(),g("div",ms,[r(ma,{class:"mb-8px"}),N(r(cs,null,null,512),[[o,l(y).loading],[o,"正在加载列表,请稍后...","title"]])])}}}),vs=ye(fs,[["__scopeId","data-v-02f5e14a"]]),Ps=Object.freeze(Object.defineProperty({__proto__:null,default:vs},Symbol.toStringTag,{value:"Module"}));export{zs as a,S as b,dt as c,Ve as d,Q as e,qs as f,js as g,Vs as h,Ls as i,h as j,Ts as k,Rs as l,_ as m,Es as n,Os as o,ka as p,As as q,Ss as r,Xt as s,ee as t,Ms as u,ae as v,Ps as w};
function __vite__mapDeps(indexes) {
  if (!__vite__mapDeps.viteFileDeps) {
    __vite__mapDeps.viteFileDeps = []
  }
  return indexes.map((i) => __vite__mapDeps.viteFileDeps[i])
}