Files

2 lines
12 KiB
JavaScript

import{u as pe}from"./system.js";import{c as t,I as G,k as me,r as y,s as j,o as ve,b as B,d as x,w as n,g as o,f as i,h as c,u as _,P as R,e as ge,j as D,p as ye,F as _e,t as b,D as I,v as U,m as v,x as be,L as xe,C as he}from"./index.js";var we={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"defs",attrs:{},children:[{tag:"style",attrs:{}}]},{tag:"path",attrs:{d:"M521.7 82c-152.5-.4-286.7 78.5-363.4 197.7-3.4 5.3.4 12.3 6.7 12.3h70.3c4.8 0 9.3-2.1 12.3-5.8 7-8.5 14.5-16.7 22.4-24.5 32.6-32.5 70.5-58.1 112.7-75.9 43.6-18.4 90-27.8 137.9-27.8 47.9 0 94.3 9.3 137.9 27.8 42.2 17.8 80.1 43.4 112.7 75.9 32.6 32.5 58.1 70.4 76 112.5C865.7 417.8 875 464.1 875 512c0 47.9-9.4 94.2-27.8 137.8-17.8 42.1-43.4 80-76 112.5s-70.5 58.1-112.7 75.9A352.8 352.8 0 01520.6 866c-47.9 0-94.3-9.4-137.9-27.8A353.84 353.84 0 01270 762.3c-7.9-7.9-15.3-16.1-22.4-24.5-3-3.7-7.6-5.8-12.3-5.8H165c-6.3 0-10.2 7-6.7 12.3C234.9 863.2 368.5 942 520.6 942c236.2 0 428-190.1 430.4-425.6C953.4 277.1 761.3 82.6 521.7 82zM395.02 624v-76h-314c-4.4 0-8-3.6-8-8v-56c0-4.4 3.6-8 8-8h314v-76c0-6.7 7.8-10.5 13-6.3l141.9 112a8 8 0 010 12.6l-141.9 112c-5.2 4.1-13 .4-13-6.3z"}}]},name:"login",theme:"outlined"};function J(u){for(var a=1;a<arguments.length;a++){var l=arguments[a]!=null?Object(arguments[a]):{},d=Object.keys(l);typeof Object.getOwnPropertySymbols=="function"&&(d=d.concat(Object.getOwnPropertySymbols(l).filter(function(f){return Object.getOwnPropertyDescriptor(l,f).enumerable}))),d.forEach(function(f){ke(u,f,l[f])})}return u}function ke(u,a,l){return a in u?Object.defineProperty(u,a,{value:l,enumerable:!0,configurable:!0,writable:!0}):u[a]=l,u}var N=function(a,l){var d=J({},a,l.attrs);return t(G,J({},d,{icon:we}),null)};N.displayName="LoginOutlined";N.inheritAttrs=!1;var Oe={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M512 64C264.6 64 64 264.6 64 512s200.6 448 448 448 448-200.6 448-448S759.4 64 512 64zm0 820c-205.4 0-372-166.6-372-372 0-89 31.3-170.8 83.5-234.8l523.3 523.3C682.8 852.7 601 884 512 884zm288.5-137.2L277.2 223.5C341.2 171.3 423 140 512 140c205.4 0 372 166.6 372 372 0 89-31.3 170.8-83.5 234.8z"}}]},name:"stop",theme:"outlined"};function q(u){for(var a=1;a<arguments.length;a++){var l=arguments[a]!=null?Object(arguments[a]):{},d=Object.keys(l);typeof Object.getOwnPropertySymbols=="function"&&(d=d.concat(Object.getOwnPropertySymbols(l).filter(function(f){return Object.getOwnPropertyDescriptor(l,f).enumerable}))),d.forEach(function(f){Ce(u,f,l[f])})}return u}function Ce(u,a,l){return a in u?Object.defineProperty(u,a,{value:l,enumerable:!0,configurable:!0,writable:!0}):u[a]=l,u}var V=function(a,l){var d=q({},a,l.attrs);return t(G,q({},d,{icon:Oe}),null)};V.displayName="StopOutlined";V.inheritAttrs=!1;const Se={style:{display:"flex","align-items":"center","justify-content":"space-between"}},ze={style:{padding:"12px 0"}},Pe={key:0},je={key:1},De={style:{color:"#1890ff"}},Ne={key:2},$e={style:{padding:"24px 0"}},Le={style:{flex:"1"}},Me={style:{display:"flex","align-items":"center","margin-bottom":"12px"}},Fe={style:{flex:"1"}},Be={style:{display:"flex","align-items":"center","margin-bottom":"12px"}},Re={style:{"margin-bottom":"16px"}},Ve={style:{"font-size":"12px","margin-top":"4px"}},He={style:{display:"flex","justify-content":"space-between","align-items":"center"}},Te={style:{"font-size":"12px",color:"#8c8c8c"}},We={style:{"white-space":"nowrap"}},Ie={__name:"cache",setup(u){const a=pe(),l=me(),d=y(0),f=y(!1),g=y([{title:"准备重启",status:"wait",icon:j(be)},{title:"发送指令",status:"wait",icon:j(R)},{title:"等待重启",status:"wait",icon:j(xe)},{title:"重启完成",status:"wait",icon:j(he)}]),k=y(!1),p=y([]),H=y([]),O=y(!1),$=y([]),C=y(!1),h=y({}),Q=async()=>{try{const s=await fetch("/admin/config/instances",{headers:l.getHeaders()});if(s.ok){const e=await s.json(),m=[];for(const z of e)for(const M of z.workers||[])m.push({name:M.name,instance:z.name});$.value=m}}catch(s){console.error("获取 Workers 列表失败",s)}},S=(s={})=>{h.value=s,C.value=!0},X=()=>{C.value=!1,Y(h.value)};ve(()=>{Q()});const L=s=>new Promise(e=>setTimeout(e,s)),Y=async(s={})=>{O.value=!0,f.value=!0,d.value=0,g.value[0].status="process",await L(500),g.value[0].status="finish",d.value=1,g.value[1].status="process";try{await a.restartService(s),g.value[1].status="finish",d.value=2}catch{g.value[1].status="error",v.error("无法连接到服务器");return}g.value[2].status="process",await L(3e3);let e=20;for(;e>0;){try{if(await a.fetchStatus(),a.status)break}catch{}await L(2e3),e--}g.value[2].status="finish",d.value=3,g.value[3].status="finish",v.success("服务重启成功"),setTimeout(()=>{O.value=!1,f.value=!1,g.value.forEach(m=>m.status="wait"),d.value=0},1500)},Z=async()=>{try{await a.stopService()&&v.success("服务已停止")}catch(s){v.error("停止服务失败: "+s.message)}},K=async()=>{try{(await fetch("/admin/cache/clear",{method:"POST",headers:l.getHeaders()})).ok?v.success("缓存文件夹已清理"):v.error("清理失败")}catch(s){v.error("请求失败: "+s.message)}},T=async()=>{p.value=[],k.value=!0;try{const s=await fetch("/admin/data-folders",{headers:l.getHeaders()});s.ok&&(H.value=await s.json())}catch{v.error("获取文件夹列表失败")}},ee=(s,e)=>{e?p.value.includes(s)||p.value.push(s):p.value=p.value.filter(m=>m!==s)},te=async()=>{if(p.value.length===0){v.warning("请先选择要删除的文件夹");return}try{(await fetch("/admin/data-folders/delete",{method:"POST",headers:l.getHeaders(),body:JSON.stringify({folders:p.value})})).ok?(v.success(`已删除 ${p.value.length} 个实例数据文件夹`),await T()):v.error("删除失败")}catch{v.error("删除请求失败")}};return(s,e)=>{const m=i("a-menu-item"),z=i("a-menu-divider"),M=i("a-sub-menu"),ne=i("a-menu"),oe=i("a-dropdown-button"),w=i("a-button"),F=i("a-popconfirm"),se=i("a-space"),P=i("a-card"),W=i("a-modal"),ae=i("a-steps"),A=i("a-col"),le=i("a-row"),re=i("a-checkbox"),ie=i("a-list-item-meta"),ue=i("a-list-item"),de=i("a-list"),ce=i("a-drawer"),fe=i("a-layout");return x(),B(fe,{style:{background:"transparent"}},{default:n(()=>[t(P,{title:"项目管理",bordered:!1,style:{width:"100%","margin-bottom":"10px"}},{default:n(()=>[o("div",Se,[e[12]||(e[12]=o("div",{style:{display:"flex","align-items":"center"}},[o("div",{style:{"margin-right":"16px"}},[o("div",{style:{"font-weight":"600","margin-bottom":"4px"}},"系统服务控制"),o("div",{style:{"font-size":"12px",color:"#8c8c8c"}}," 控制后端服务的运行状态 (重启或停止) ")])],-1)),o("div",null,[t(se,null,{default:n(()=>[t(oe,{type:"primary",size:"large",onClick:e[2]||(e[2]=r=>S())},{overlay:n(()=>[t(ne,null,{default:n(()=>[t(m,{key:"normal",onClick:e[0]||(e[0]=r=>S())},{default:n(()=>[t(_(R)),e[7]||(e[7]=c(" 普通重启 ",-1))]),_:1}),t(z),t(m,{key:"login",onClick:e[1]||(e[1]=r=>S({loginMode:!0}))},{default:n(()=>[t(_(N)),e[8]||(e[8]=c(" 登录模式重启 ",-1))]),_:1}),$.value.length>1?(x(),B(M,{key:"login-worker",title:"指定 Worker 登录"},{icon:n(()=>[t(_(N))]),default:n(()=>[(x(!0),D(_e,null,ye($.value,r=>(x(),B(m,{key:r.name,onClick:E=>S({loginMode:!0,workerName:r.name})},{default:n(()=>[c(b(r.name),1)]),_:2},1032,["onClick"]))),128))]),_:1})):ge("",!0)]),_:1})]),default:n(()=>[t(_(R)),e[9]||(e[9]=c(" 重启 ",-1))]),_:1}),t(F,{"ok-text":"确定","cancel-text":"取消",onConfirm:Z,placement:"topRight"},{title:n(()=>[...e[10]||(e[10]=[o("div",{style:{width:"240px"}},[o("div",{style:{"font-weight":"500","margin-bottom":"4px"}},"确定要停止服务吗?"),o("div",{style:{"font-size":"12px",color:"#f5222d"}},"停止后服务将完全终止,需要手动重新启动。")],-1)])]),default:n(()=>[t(w,{type:"primary",danger:"",size:"large"},{icon:n(()=>[t(_(V))]),default:n(()=>[e[11]||(e[11]=c(" 停止 ",-1))]),_:1})]),_:1})]),_:1})])])]),_:1}),t(W,{open:C.value,"onUpdate:open":e[3]||(e[3]=r=>C.value=r),title:"确认重启",onOk:X,"ok-text":"确定","cancel-text":"取消",width:400},{default:n(()=>[o("div",ze,[h.value.loginMode?h.value.workerName?(x(),D("p",je,[e[13]||(e[13]=c(" 确定要以",-1)),e[14]||(e[14]=o("b",null,"登录模式",-1)),e[15]||(e[15]=c("重启服务吗?",-1)),e[16]||(e[16]=o("br",null,null,-1)),o("span",De,"仅初始化 Worker: "+b(h.value.workerName),1)])):(x(),D("p",Ne,[...e[17]||(e[17]=[c("确定要以",-1),o("b",null,"登录模式",-1),c("重启服务吗?",-1)])])):(x(),D("p",Pe,"确定要重启服务吗?"))])]),_:1},8,["open"]),t(W,{open:O.value,"onUpdate:open":e[4]||(e[4]=r=>O.value=r),title:"系统服务重启中",footer:null,closable:!1,maskClosable:!1,width:"500px"},{default:n(()=>[o("div",$e,[t(ae,{current:d.value,items:g.value},null,8,["current","items"]),e[18]||(e[18]=o("div",{style:{"text-align":"center","margin-top":"24px",color:"#8c8c8c"}}," 请稍候,系统正在执行重启操作... ",-1))])]),_:1},8,["open"]),t(P,{title:"缓存管理",bordered:!1,style:{width:"100%"}},{default:n(()=>[t(le,{gutter:[16,16]},{default:n(()=>[t(A,{xs:24,md:12},{default:n(()=>[t(P,{style:{height:"100%"},"body-style":{display:"flex",flexDirection:"column",height:"100%"}},{default:n(()=>[o("div",Le,[o("div",Me,[t(_(I),{style:{"font-size":"24px",color:"#1890ff","margin-right":"8px"}}),e[19]||(e[19]=o("div",{style:{"font-weight":"600","font-size":"16px"}},"清理缓存文件夹",-1))]),e[20]||(e[20]=o("div",{style:{"font-size":"12px",color:"#8c8c8c","margin-bottom":"16px"}},[c(" 清理项目运行过程中可能会遗留的临时缓存文件(如遇到错误时遗留的图片),"),o("br"),c(" 不会影响用户数据和配置"),o("strong",{style:{color:"#ff4d4f"}},"有任务运行时请勿执行")],-1))]),t(F,{title:"确定要清理缓存文件夹吗?","ok-text":"确定","cancel-text":"取消",onConfirm:K},{default:n(()=>[t(w,{type:"primary",block:""},{icon:n(()=>[t(_(I))]),default:n(()=>[e[21]||(e[21]=c(" 清理缓存 ",-1))]),_:1})]),_:1})]),_:1})]),_:1}),t(A,{xs:24,md:12},{default:n(()=>[t(P,{style:{height:"100%"},"body-style":{display:"flex",flexDirection:"column",height:"100%"}},{default:n(()=>[o("div",Fe,[o("div",Be,[t(_(U),{style:{"font-size":"24px",color:"#ff4d4f","margin-right":"8px"}}),e[22]||(e[22]=o("div",{style:{"font-weight":"600","font-size":"16px"}},"删除实例数据文件夹",-1))]),e[23]||(e[23]=o("div",{style:{"font-size":"12px",color:"#8c8c8c","margin-bottom":"16px"}},[c(" 删除所有浏览器实例的用户数据文件夹,"),o("br"),c(" 包括 Cookie、本地存储等,"),o("strong",{style:{color:"#ff4d4f"}},"请谨慎操作")],-1))]),t(w,{danger:"",block:"",onClick:T},{icon:n(()=>[t(_(U))]),default:n(()=>[e[24]||(e[24]=c(" 管理实例数据 ",-1))]),_:1})]),_:1})]),_:1})]),_:1})]),_:1}),t(ce,{open:k.value,"onUpdate:open":e[6]||(e[6]=r=>k.value=r),title:"管理实例数据文件夹",placement:"right",width:"500"},{footer:n(()=>[o("div",He,[o("div",Te," 已选择 "+b(p.value.length)+" 个文件夹 ",1),o("div",null,[t(w,{style:{"margin-right":"8px"},onClick:e[5]||(e[5]=r=>k.value=!1)},{default:n(()=>[...e[26]||(e[26]=[c(" 取消 ",-1)])]),_:1}),t(F,{placement:"topRight","ok-text":"确定删除","cancel-text":"取消",onConfirm:te},{title:n(()=>[o("div",We," 确定要删除选中的 "+b(p.value.length)+" 个文件夹吗? ",1)]),default:n(()=>[t(w,{type:"primary",danger:"",disabled:p.value.length===0},{default:n(()=>[...e[27]||(e[27]=[c(" 删除选中项 ",-1)])]),_:1},8,["disabled"])]),_:1})])])]),default:n(()=>[o("div",Re,[e[25]||(e[25]=o("div",{style:{"font-size":"12px",color:"#8c8c8c","margin-bottom":"12px"}}," 选择要删除的实例数据文件夹,删除后无法恢复,请谨慎操作 ",-1)),t(de,{"data-source":H.value,bordered:""},{renderItem:n(({item:r})=>[t(ue,null,{default:n(()=>[t(ie,null,{title:n(()=>[t(re,{checked:p.value.includes(r.name),onChange:E=>ee(r.name,E.target.checked)},{default:n(()=>[c(b(r.name),1)]),_:2},1032,["checked","onChange"])]),description:n(()=>[o("div",Ve,[o("div",null,"路径: "+b(r.path),1),o("div",null,"关联实例: "+b(r.instance),1),o("div",null,"大小: "+b(r.size),1)])]),_:2},1024)]),_:2},1024)]),_:1},8,["data-source"])])]),_:1},8,["open"])]),_:1})}}};export{Ie as default};