Files
Nexus/web/app/assets/FilesPage-U-VHCJoO.js
T
Your Name 51948469c2 build(frontend): track Vite output in Git for Gitea deploy
- Stop ignoring web/app/index.html and web/app/assets/
- Bundle index-DBKIQT7H.js from current vite build (~101MB assets)

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-03 00:52:44 +08:00

2 lines
45 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/FileEditorWorkbench-CH3IYpQf.js","assets/_plugin-vue_export-helper-BDNMzG2s.js","assets/editor.api2-CLbMfXfG.js","assets/editor-DX2BVZF3.css","assets/index-DCgkoZ5A.js","assets/index-DBjsRXm1.css","assets/workers-DM14Vrt9.js","assets/monaco.contribution-B_Pe3ZJm.js","assets/VSelect-SmO5Ea9z.js","assets/VChip-DzyDetMC.js","assets/VChip-DNKJRTa0.css","assets/VSelectionControl-BTw0L__E.js","assets/VSelectionControl-CH0_Bcm2.css","assets/VSelect-ALpjlDrA.css","assets/VDialog-BdRhEZl7.js","assets/VDialog-DP-kc9Gx.css","assets/VSpacer-4v9NXhhp.js","assets/VSpacer-DfbUir7X.css","assets/VTabs-BH1AryLv.js","assets/VTabs-DjRHpLZ2.css","assets/useSnackbar-D7YOfKok.js","assets/remotePath-BY9H9-d2.js","assets/FileEditorWorkbench-Dy_4PwXT.css"])))=>i.map(i=>d[i]);
import{t as e}from"./VDataTable-DVZ4OtwH.js";import{$n as t,$t as n,Ar as r,B as i,Ct as a,Dr as o,F as s,Hn as c,Jn as l,Kn as u,L as d,Lt as f,M as p,Mn as ee,N as m,Nn as h,Nt as te,O as g,P as _,Qn as v,Qt as ne,Rt as re,St as ie,Tt as ae,Un as y,V as oe,Wn as se,Xn as ce,Xt as le,Y as ue,Yn as b,_ as de,_r as x,an as S,ar as fe,b as C,bt as pe,cn as w,cr as me,er as he,fr as T,hr as ge,ir as _e,j as ve,jr as E,jt as D,k as O,kr as ye,ln as k,mr as be,on as xe,or as Se,ot as Ce,q as we,qn as A,st as Te,t as j,tr as M,ur as N,v as Ee,w as De,wr as P,wt as F,x as Oe,xr as I,xt as ke,y as Ae,yt as je,zt as Me}from"./index-DCgkoZ5A.js";import{t as Ne}from"./fileBrowse-D87Kx7nu.js";import{a as Pe,i as L,n as Fe,o as Ie,r as R,t as Le}from"./remotePath-BY9H9-d2.js";import{a as Re}from"./VSelectionControl-BTw0L__E.js";import{n as ze,t as Be}from"./VRow-CALeTrnD.js";import{t as z}from"./VSpacer-4v9NXhhp.js";import{t as Ve}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as He}from"./useSnackbar-D7YOfKok.js";import{t as Ue}from"./VChip-DzyDetMC.js";import{t as B}from"./VDialog-BdRhEZl7.js";import{t as We}from"./VSelect-SmO5Ea9z.js";import{t as Ge}from"./VCheckbox-CdimOvk6.js";import{t as Ke}from"./useServerList-Cl0-U956.js";import{i as qe}from"./validation-DMwOxx4a.js";import{t as Je}from"./VAlert-BPYw_LkC.js";import{t as Ye}from"./VFileInput-JT7axaVP.js";function Xe(e){if(!(e instanceof HTMLElement))return!1;let t=e.tagName;return t===`INPUT`||t===`TEXTAREA`||e.isContentEditable}function Ze(e,t){function n(n){if(!Xe(n.target)){if(n.key===`F5`){n.preventDefault(),e.refresh();return}if(n.key===`Backspace`){n.preventDefault(),e.goUp();return}if(n.key===`F2`&&t.value.length===1){n.preventDefault(),e.renameSelection();return}if(n.key===`Delete`&&t.value.length>0&&(n.preventDefault(),e.deleteSelection()),(n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`a`){n.preventDefault(),e.selectAll();return}if((n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`c`){n.preventDefault(),e.copySelection();return}if((n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`x`){n.preventDefault(),e.cutSelection();return}(n.ctrlKey||n.metaKey)&&n.key.toLowerCase()===`v`&&(n.preventDefault(),e.pasteClipboard())}}me(()=>window.addEventListener(`keydown`,n)),Se(()=>window.removeEventListener(`keydown`,n))}var V=I(null);function Qe(){let e=u(()=>V.value!==null),t=u(()=>V.value?`${V.value.mode===`cut`?`已剪切`:`已复制`} ${V.value.paths.length} 项`:``);function n(e,t,n){if(!n.length)return!1;let r=[...new Set(n.map(e=>L(e)))];return V.value={mode:e,serverId:t,paths:r,label:r.map(e=>e.split(`/`).pop()||e).join(`, `)},!0}function r(){V.value=null}function i(e){return!!(V.value&&e&&V.value.serverId===e)}function a(e,t){let n=L(t);for(let t of e){let e=L(t);if(n===e)return`「${e.split(`/`).pop()||e}」与目标路径相同,无需粘贴`;if(n.startsWith(`${e}/`))return`不能粘贴到源目录「${e}」的内部`}return null}async function o(e){let t=V.value;if(!t)throw Error(`剪贴板为空`);let n=L(e),i=a(t.paths,n);if(i)throw Error(i);let o=t.mode===`cut`?`move`:`copy`;await f.post(`/sync/file-clipboard`,{server_id:t.serverId,mode:o,sources:t.paths,dest_dir:n}),t.mode===`cut`&&r()}return{clipboard:V,hasClipboard:e,clipboardSummary:t,setFromSelection:n,clear:r,canPasteOnServer:i,validatePasteTarget:a,pasteToDirectory:o}}var H={directory:0,symlink:1,file:2};function $e(e,t,n){let r=n===`asc`?1:-1;return[...e].sort((e,n)=>{let i=H[e.type]??9,a=H[n.type]??9;if(i!==a)return i-a;let o=0;return o=t===`name`?e.name.localeCompare(n.name):t===`size`?(e.size??0)-(n.size??0):(e.modified??``).localeCompare(n.modified??``),o*r})}var et=[{title:`全部`,value:``},{title:`.conf / .ini`,value:`conf,ini`},{title:`.log`,value:`log`},{title:`.sh`,value:`sh`},{title:`.py`,value:`py`},{title:`.json`,value:`json`},{title:`.yml / .yaml`,value:`yml,yaml`},{title:`.txt`,value:`txt`},{title:`.php`,value:`php`},{title:`.js / .ts`,value:`js,ts`}];function tt(e,t){if(!t)return!0;let n=e.toLowerCase();return t.split(`,`).some(e=>n.endsWith(`.${e.trim()}`))}function nt(e){let t=e.toLowerCase();return t.endsWith(`.tar.gz`)||t.endsWith(`.tgz`)||t.endsWith(`.zip`)}function rt(e){if(e.type===`symlink`)return`—`;let t=(e.owner??``).trim(),n=(e.group??``).trim();return t?!n||n===t?t:`${t}:${n}`:`—`}function it(e){if(e===`root`)return`warning`}function at(e){let t=[];e.permissions&&t.push(e.permissions),e.mode_octal&&t.push(e.mode_octal);let n=(e.owner??``).trim(),r=(e.group??``).trim();return n&&t.push(r&&r!==n?`${n}:${r}`:n),t.join(` · `)||`—`}var U=[{label:`文件 644`,mode:`644`,for:`file`},{label:`目录 755`,mode:`755`,for:`directory`},{label:`私密 600`,mode:`600`,for:`file`},{label:`协作 775`,mode:`775`,for:`directory`},{label:`可执行 755`,mode:`755`,for:`file`}],ot=`docs/deploy/nexus-files-sudoers.example`;function st(e){let t=e.toLowerCase();return t.includes(`permission denied`)||t.includes(`operation not permitted`)||t.includes(`无法访问`)||t.includes(`无权限`)||t.includes(`无写入权限`)||t.includes(`读取失败`)||t.includes(`chmod 失败`)}function ct(e,t){if(!t||t===`root`||e.type!==`file`)return!1;let n=e.permissions??``;if(n.length<10)return!1;let r=(e.owner??``).trim(),i=(e.group??``).trim(),a=n.slice(1,4),o=n.slice(4,7),s=n.slice(7,10);return r===t?!a.includes(`r`):(i&&i===t||!s.includes(`r`))&&!o.includes(`r`)}function lt(e){let t=[];e.lastReadDeniedPath&&t.push(`无法读取「${e.lastReadDeniedPath}」:当前 SSH 用户可能无读权限。`);let n=e.unreadableCount??0;return n>0&&e.sshUser&&t.push(`当前目录约 ${n} 个文件对 SSH 用户「${e.sshUser}」可能不可读(根据 ls 权限推断)。`),!e.isRootSsh&&!e.canSudo?t.push(`写权限、chmod、读取 root 属主文件等可能失败。请在目标机配置免密 sudo,或改用 root SSH。`):!e.isRootSsh&&e.canSudo&&t.push(`部分操作将自动尝试 sudo -n(需白名单含 chmod/chown/cat 等)。`),t.length?{type:!e.isRootSsh&&!e.canSudo?`error`:`warning`,text:`${t.join(` `)} 示例:${ot}`}:null}var ut={key:0,class:`text-body-2 mb-3 text-medium-emphasis`},dt={key:1,class:`text-caption mb-4`},ft={class:`d-flex flex-wrap ga-2 mb-4`},pt={class:`d-flex align-center flex-wrap ga-2 mb-2`},mt={class:`text-body-2`},ht={key:0,class:`text-caption mt-1`},gt={class:`text-caption text-medium-emphasis mb-0`},_t=M({__name:`FilePermissionDialog`,props:{modelValue:{type:Boolean},file:{},serverId:{},loading:{type:Boolean}},emits:[`update:modelValue`,`apply`],setup(e,{emit:n}){let r=e,i=n,a=I(``),o=I(``),ee=I(``),h=I(null),te=I(!1),g=I(!1),ne=u(()=>r.file?.type===`directory`),re=u(()=>h.value?.docs_path??`docs/deploy/nexus-files-sudoers.example`),ie=u(()=>r.file?.name??``),ae=u(()=>r.file?at(r.file):``),y=u(()=>{let e=r.file?.type===`directory`?`directory`:`file`;return U.filter(t=>t.for===e||t.for===`file`)}),oe=u(()=>h.value?h.value.is_root||h.value.can_sudo_nopasswd&&h.value.whitelist_ok?`success`:h.value.can_sudo_nopasswd?`warning`:`error`:`info`);ge(()=>[r.modelValue,r.file],([e,t])=>{!e||!t||(a.value=t.mode_octal||``,o.value=t.owner||``,ee.value=t.group&&t.group!==t.owner?t.group:``,g.value=!1,h.value=null,r.serverId&&ue())});function le(e){return e===`off`?`关闭提权`:e===`always_sudo`?`始终 sudo`:`自动 sudo`}async function ue(){if(r.serverId){te.value=!0;try{h.value=await f.get(`/servers/${r.serverId}/files-capability`)}catch(e){h.value={ssh_user:``,is_root:!1,files_elevation:`auto_sudo`,can_sudo_nopasswd:!1,whitelist_ok:!1,message:e instanceof Error?e.message:`检测失败`,docs_path:`docs/deploy/nexus-files-sudoers.example`}}finally{te.value=!1}}}function de(e){return t=>!!String(t||``).trim()||`${e}不能为空`}function S(e){return/^[0-7]{3,4}$/.test(String(e||``).trim())||`格式: 34 位八进制`}let fe=/^[a-zA-Z0-9_.-]+$/;function C(e){let t=String(e||``).trim();return t?fe.test(t)||`仅允许字母、数字、._-`:!0}function pe(e){let t=String(e||``).trim();return t?o.value.trim()?fe.test(t)||`仅允许字母、数字、._-`:`请先填写属主`:!0}function w(e){a.value=e}function me(){let e=a.value.trim();if(!/^[0-7]{3,4}$/.test(e))return;let t=o.value.trim(),n=ee.value.trim(),s=ne.value&&g.value;if(s){let t=r.file?.name??`该目录`;if(!window.confirm(`确认对目录「${t}」及其全部子项递归应用权限 ${e}?此操作影响范围大且不可自动撤销。`))return}i(`apply`,{mode:e,owner:t||void 0,group:n||void 0,recursive:s||void 0})}return(n,r)=>(N(),l(B,{"model-value":e.modelValue,"max-width":`520`,"onUpdate:modelValue":r[5]||=e=>i(`update:modelValue`,e)},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...r[6]||=[v(`修改权限`,-1)]]),_:1}),t(m,null,{default:x(()=>[ie.value?(N(),ce(`p`,ut,E(ie.value),1)):b(``,!0),ae.value?(N(),ce(`p`,dt,` 当前:`+E(ae.value),1)):b(``,!0),A(`div`,ft,[(N(!0),ce(se,null,T(y.value,e=>(N(),l(Ue,{key:e.mode+e.label,size:`small`,variant:`tonal`,color:`primary`,onClick:t=>w(e.mode)},{default:x(()=>[v(E(e.label),1)]),_:2},1032,[`onClick`]))),128))]),t(j,{modelValue:a.value,"onUpdate:modelValue":r[0]||=e=>a.value=e,label:`八进制权限`,variant:`outlined`,density:`compact`,placeholder:`644 / 755`,rules:[de(`权限`),S],class:`mb-2`,onKeydown:c(me,[`enter`])},null,8,[`modelValue`,`rules`]),t(j,{modelValue:o.value,"onUpdate:modelValue":r[1]||=e=>o.value=e,label:`属主(可选)`,variant:`outlined`,density:`compact`,placeholder:`www`,rules:[C],class:`mb-2`},null,8,[`modelValue`,`rules`]),t(j,{modelValue:ee.value,"onUpdate:modelValue":r[2]||=e=>ee.value=e,label:`属组(可选)`,variant:`outlined`,density:`compact`,placeholder:`www`,rules:[pe],class:`mb-2`},null,8,[`modelValue`,`rules`]),ne.value?(N(),l(Ge,{key:2,modelValue:g.value,"onUpdate:modelValue":r[3]||=e=>g.value=e,label:`同时修改子项(递归 chmod/chown`,density:`compact`,"hide-details":``,color:`warning`,class:`mb-2`},null,8,[`modelValue`])):b(``,!0),t(ve,{class:`my-4`}),A(`div`,pt,[r[8]||=A(`span`,{class:`text-caption text-medium-emphasis`},`提权能力`,-1),t(d,{size:`small`,variant:`tonal`,loading:te.value,disabled:!e.serverId,onClick:ue},{default:x(()=>[...r[7]||=[v(` 检测提权能力 `,-1)]]),_:1},8,[`loading`,`disabled`])]),h.value?(N(),l(Je,{key:3,type:oe.value,variant:`tonal`,density:`compact`,class:`mb-2`},{default:x(()=>[A(`div`,mt,E(h.value.message),1),h.value.ssh_user?(N(),ce(`div`,ht,` SSH 用户:`+E(h.value.ssh_user)+` · 策略:`+E(le(h.value.files_elevation)),1)):b(``,!0)]),_:1},8,[`type`])):b(``,!0),A(`p`,gt,[r[9]||=v(` 非 root 用户写/chmod 失败时将按服务器策略尝试 `,-1),r[10]||=A(`code`,null,`sudo -n`,-1),r[11]||=v(`。 示例配置见仓库 `,-1),A(`code`,null,E(re.value),1),r[12]||=v(`(由运维审阅后安装到目标机)。 `,-1)])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:r[4]||=e=>i(`update:modelValue`,!1)},{default:x(()=>[...r[13]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,loading:e.loading,onClick:me},{default:x(()=>[...r[14]||=[v(`应用`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`model-value`]))}});function vt(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.rel=`noopener`,document.body.appendChild(r),r.click(),r.remove(),URL.revokeObjectURL(n)}var yt=300*1024,bt=40,W=4,G=new Map;function K(e,t){return`${e}:${L(t)}`}function q(e){let t=L(e),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)||`/`}function xt(){G.clear()}function St(e,t){let n=L(t);for(let t of[...G.keys()]){if(!t.startsWith(`${e}:`)){G.delete(t);continue}q(t.slice(`${e}:`.length))!==n&&G.delete(t)}}function Ct(e,t){G.delete(K(e,t))}function wt(e){if(e.type!==`file`)return!1;let t=e.size??0;return t>0&&t<=307200}function Tt(e){return e!=null&&e>0&&e>307200}function Et(e){return typeof e==`string`?e:e.content??JSON.stringify(e,null,2)}async function Dt(e,t,n=yt){let r=K(e,t),i=G.get(r);if(i!==void 0)return i;let a=Et(await f.post(`/sync/read-file`,{server_id:e,path:L(t),max_size:n}));return G.set(r,a),a}function Ot(e,t,n){let r=n.filter(wt).sort((e,t)=>(e.size??0)-(t.size??0)).slice(0,bt);if(!r.length)return;let i=0,a=async()=>{for(;i<r.length;){let n=r[i++],a=R(t,n.name),o=K(e,a);if(!G.has(o))try{await Dt(e,a)}catch{}}},o=Math.min(W,r.length);Promise.all(Array.from({length:o},()=>a()))}var J=k({divider:[Number,String],...w()},`VBreadcrumbsDivider`),kt=S()({name:`VBreadcrumbsDivider`,props:J(),setup(e,{slots:t}){return n(()=>A(`li`,{"aria-hidden":`true`,class:ye([`v-breadcrumbs-divider`,e.class]),style:r(e.style)},[t?.default?.()??e.divider])),{}}}),At=k({active:Boolean,activeClass:String,activeColor:String,color:String,disabled:Boolean,title:String,...w(),...h(a(),[`width`,`maxWidth`]),...i(),...D({tag:`li`})},`VBreadcrumbsItem`),jt=S()({name:`VBreadcrumbsItem`,props:At(),setup(e,{slots:i,attrs:a}){let o=oe(e,a),s=u(()=>e.active||o.isActive?.value),{dimensionStyles:c}=F(e),{textColorClasses:l,textColorStyles:d}=ie(()=>s.value?e.activeColor:e.color);return n(()=>t(e.tag,{class:ye([`v-breadcrumbs-item`,{"v-breadcrumbs-item--active":s.value,"v-breadcrumbs-item--disabled":e.disabled,[`${e.activeClass}`]:s.value&&e.activeClass},l.value,e.class]),style:r([d.value,c.value,e.style]),"aria-current":s.value?`page`:void 0},{default:()=>[o.isLink.value?A(`a`,_e({class:`v-breadcrumbs-item--link`,onClick:o.navigate.value},o.linkProps),[i.default?.()??e.title]):i.default?.()??e.title]})),{}}}),Mt=k({activeClass:String,activeColor:String,bgColor:String,color:String,disabled:Boolean,divider:{type:String,default:`/`},icon:ne,items:{type:Array,default:()=>[]},...w(),...Ce(),...je(),...D({tag:`ul`})},`VBreadcrumbs`),Nt=S()({name:`VBreadcrumbs`,props:Mt(),setup(e,{slots:i}){let{backgroundColorClasses:a,backgroundColorStyles:o}=ke(()=>e.bgColor),{densityClasses:s}=Te(e),{roundedClasses:c}=pe(e);xe({VBreadcrumbsDivider:{divider:P(()=>e.divider)},VBreadcrumbsItem:{activeClass:P(()=>e.activeClass),activeColor:P(()=>e.activeColor),color:P(()=>e.color),disabled:P(()=>e.disabled)}});let l=u(()=>e.items.map(e=>typeof e==`string`?{item:{title:e},raw:e}:{item:e,raw:e}));return n(()=>{let n=!!(i.prepend||e.icon);return t(e.tag,{class:ye([`v-breadcrumbs`,a.value,s.value,c.value,e.class]),style:r([o.value,e.style])},{default:()=>[n&&A(`li`,{key:`prepend`,class:`v-breadcrumbs__prepend`},[i.prepend?t(ae,{key:`prepend-defaults`,disabled:!e.icon,defaults:{VIcon:{icon:e.icon,start:!0}}},i.prepend):t(ue,{key:`prepend-icon`,start:!0,icon:e.icon},null)]),l.value.map(({item:e,raw:n},r,a)=>A(se,null,[i.item?.({item:e,index:r})??t(jt,_e({key:r,disabled:r>=a.length-1},typeof e==`string`?{title:e}:e),{default:i.title?()=>i.title?.({item:e,index:r}):void 0}),r<a.length-1&&t(kt,null,{default:i.divider?()=>i.divider?.({item:n,index:r}):void 0})])),i.default?.()]})}),{}}}),Pt=k({id:String,interactive:Boolean,text:String,...ee(C({closeOnBack:!1,location:`end`,locationStrategy:`connected`,eager:!0,minWidth:0,offset:10,openOnClick:!1,openOnHover:!0,origin:`auto`,scrim:!1,scrollStrategy:`reposition`,transition:null}),[`absolute`,`retainFocus`,`captureFocus`,`disableInitialFocus`])},`VTooltip`),Ft=S()({name:`VTooltip`,props:Pt(),emits:{"update:modelValue":e=>!0},setup(e,{slots:r}){let i=le(e,`modelValue`),{scopeId:a}=Oe(),o=be(),s=P(()=>e.id||`v-tooltip-${o}`),c=I(),l=u(()=>e.location.split(` `).length>1?e.location:e.location+` center`),d=u(()=>e.origin===`auto`||e.origin===`overlap`||e.origin.split(` `).length>1||e.location.split(` `).length>1?e.origin:e.origin+` center`),f=P(()=>e.transition==null?i.value?`scale-transition`:`fade-transition`:e.transition),p=u(()=>_e({"aria-describedby":s.value},e.activatorProps));return n(()=>{let n=Ae.filterProps(e);return t(Ae,_e({ref:c,class:[`v-tooltip`,{"v-tooltip--interactive":e.interactive},e.class],style:e.style,id:s.value},n,{modelValue:i.value,"onUpdate:modelValue":e=>i.value=e,transition:f.value,absolute:!0,location:l.value,origin:d.value,role:`tooltip`,activatorProps:p.value,_disableGlobalStack:!0},a),{activator:r.activator,default:(...t)=>r.default?.(...t)??e.text})}),Ee({},c)}}),It={class:`text-caption text-medium-emphasis mb-2 d-flex flex-wrap align-center ga-2`},Lt={class:`text-body-2 mr-4`},Rt={class:`d-flex align-center ga-2 min-w-0`},zt={class:`min-w-0`},Bt={key:0,class:`text-caption text-medium-emphasis text-truncate`},Vt={class:`text-medium-emphasis`},Ht={class:`text-medium-emphasis`},Ut={class:`d-flex ga-1`},Wt={class:`text-center text-medium-emphasis py-8`},Gt={class:`text-body-2 mb-3`},Kt={class:`text-body-2 mb-2 text-truncate`},qt={class:`text-truncate`},Jt={key:1,class:`files-preview-body text-body-2`},Yt=`nexus:files:last_server_id`,Xt=Ve(M({__name:`FilesPage`,setup(n){let r=he(()=>te(()=>import(`./FileEditorWorkbench-CH3IYpQf.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22]))),i=He(),{servers:a,loadServers:ee}=Ke(),{hasClipboard:h,clipboardSummary:ne,setFromSelection:ie,canPasteOnServer:ae,pasteToDirectory:oe}=Qe(),se=u(()=>ae(w.value));function le(e){if(e)return L(e);let t=X.value.filter(e=>e.type===`directory`);return t.length===1&&X.value.length===1?R(T.value,t[0].name):L(T.value)}let S=u(()=>{let e=le();return e===L(T.value)?`当前目录`:e}),C=re(),pe=Me(),w=I(null),T=I(Le),D=I([]),k=I(!1),be=I(``),xe=I(``),Se=I(``),Ce=I(`name`),Te=[{title:`名称`,value:`name`},{title:`大小`,value:`size`},{title:`修改时间`,value:`modified`}],M=I(!1),Ee=I(null),P=I(null),F=I(!1),Oe=u(()=>Ee.value?.ssh_user??null),ke=u(()=>{let e=Oe.value;return e?D.value.filter(t=>ct(t,e)).length:0}),Ae=u(()=>{if(F.value||!w.value)return null;let e=Ee.value;return lt({sshUser:e?.ssh_user,canSudo:e?.can_sudo_nopasswd??!1,isRootSsh:e?.is_root??!1,lastReadDeniedPath:P.value,unreadableCount:ke.value})}),je=I(!1),Ve=I(``),Ge=I(``),Xe=I(!1),V=I(!1),H=I(!1),U=I(``),ot=I(!1),ut=I(!1),dt=I(``),ft=I(`tar.gz`),pt=I([]),mt=I(!1),ht=I(``),gt=I(`.`),bt=I(!1),W=I([]),G=I(!1),K=I(``),q=I(!1),Et=I(null),J=I(!1),kt=I(``),At=I(null),Mt=I(!1),Pt=I(!1),Xt=I(null),Zt=I(!1),Qt=I(0),$t=I(0),Y=I(null),X=I([]),en=u(()=>X.value.length),tn=I(null),nn=[{title:`名称`,key:`name`},{title:`归属`,key:`owner`,width:110,sortable:!1},{title:`大小`,key:`size`,width:120},{title:`修改时间`,key:`modified`,width:180},{title:`操作`,key:`actions`,width:200,align:`end`}],rn=u(()=>Fe(T.value)),an=u(()=>Pe(T.value)!==null),on=u(()=>{let e=$e(D.value,Ce.value,`asc`),t=Se.value;t&&(e=e.filter(e=>tt(e.name,t)));let n=xe.value.trim().toLowerCase();return n&&(e=e.filter(e=>e.name.toLowerCase().includes(n))),e});function sn(e){return nt(e)}let cn=u(()=>{let e=D.value.filter(e=>e.type===`directory`).length,t=D.value.filter(e=>e.type===`file`).length,n=D.value.filter(e=>e.type===`symlink`).length,r=D.value.filter(wt).length,i=[`${e} 个目录`,`${t} 个文件`];return n&&i.push(`${n} 个链接`),r&&i.push(`${r} 个 ≤300KB 可预加载`),`${i.join(``)} · ${T.value}`}),ln=u(()=>w.value?xe.value.trim()?`无匹配文件`:`暂无文件`:`请先选择服务器`);function un(e){return e.type===`directory`?`mdi-folder`:e.type===`symlink`?`mdi-link-variant`:`mdi-file-outline`}function dn(e){return e.type===`directory`?`amber`:e.type===`symlink`?`teal`:`blue`}function Z(e){return e.type===`file`}function fn(){let e={...C.query};w.value?(e.server_id=String(w.value),e.path=T.value===`/www/wwwroot`?void 0:T.value):(delete e.server_id,delete e.path),pe.replace({query:e})}function pn(e){if(e.type===`directory`){mn(R(T.value,e.name));return}if(e.type===`symlink`){let t=e.link_target?.trim();t?.startsWith(`/`)?mn(t):i(t?`符号链接 → ${t}`:`相对符号链接(请在终端中打开)`,`info`)}}function mn(e){if(!w.value){i(`请先选择服务器`,`warning`);return}T.value=L(e),X.value=[],Q()}function hn(){if(!w.value){i(`请先选择服务器`,`warning`);return}T.value=L(T.value),Q()}function gn(){let e=Pe(T.value);e!=null&&mn(e)}function _n(e){let t=rn.value[e];t&&!t.disabled&&mn(t.path)}function vn(){w.value&&pe.push({path:`/terminal`,query:{server_id:String(w.value),path:T.value||`/`}})}async function Q(){if(!w.value)return;k.value=!0;let e=L(T.value);T.value=e;try{let{items:t,error:n}=Ne(await f.post(`/sync/browse`,{server_id:w.value,path:e}));be.value=n||``,n&&i(n,`warning`),D.value=t,w.value&&t.length&&(St(w.value,e),Ot(w.value,e,t))}catch{D.value=[],i(`浏览目录失败`,`error`)}finally{k.value=!1,fn()}}async function yn(){if(!w.value){Ee.value=null;return}try{Ee.value=await f.get(`/servers/${w.value}/files-capability`)}catch{Ee.value=null}}function bn(){w.value&&sessionStorage.setItem(Yt,String(w.value)),xt(),T.value=Le,xe.value=``,X.value=[],P.value=null,F.value=!1,yn(),Q()}function xn(){let e=C.query.server_id;if(e){let t=Number(e);if(Number.isFinite(t)&&a.value.some(e=>e.id===t))return t}let t=sessionStorage.getItem(Yt);if(t){let e=Number(t);if(Number.isFinite(e)&&a.value.some(t=>t.id===e))return e}return a.value[0]?.id??null}function Sn(e){w.value&&e&&Ct(w.value,e),Q()}function Cn(e,t){return Tt(e.size)?(i(`文件超过 300KB${Qn(e.size)}),无法${t},请下载或使用终端`,`warning`),!0):!1}function wn(e){return!!(e instanceof Element?e:null)?.closest(`.v-selection-control, .v-btn, .v-checkbox, button, a`)}function Tn(e){let t=e.item;return{class:t.type===`directory`?`files-row--dir`:void 0,style:{cursor:t.type===`directory`||t.type===`symlink`?`pointer`:`default`},onClick:e=>{wn(e.target)||En(e,{item:t})},onDblclick:e=>{wn(e.target)||Dn(e,{item:t})},onContextmenu:e=>{wn(e.target)||kn(e,{item:t})}}}function En(e,{item:t}){(t.type===`directory`||t.type===`symlink`)&&pn(t)}function Dn(e,{item:t}){Z(t)&&Kn(t)}async function On(e){if(M.value=!1,!w.value){i(`请先选择服务器`,`warning`);return}let t=e.dataTransfer?.files;t?.length&&(W.value=Array.from(t),await Zn())}function kn(e,{item:t}){e.preventDefault(),Y.value=t,Qt.value=e.clientX,$t.value=e.clientY,Zt.value=!0}function An(e){return(e?.length?e:X.value).map(e=>R(T.value,e.name))}function jn(e){if(!w.value)return;let t=An(e);if(!t.length){i(`请先选择文件或目录`,`warning`);return}ie(`copy`,w.value,t)&&i(`已复制 ${t.length} 项`)}function Mn(e){if(!w.value)return;let t=An(e);if(!t.length){i(`请先选择文件或目录`,`warning`);return}ie(`cut`,w.value,t)&&i(`已剪切 ${t.length} 项`)}async function Nn(e){if(!w.value){i(`请先选择服务器`,`warning`);return}if(!ae(w.value)){i(`剪贴板为空或服务器不一致`,`warning`);return}let t=le(e);q.value=!0;try{await oe(t),X.value=[],xt(),await Q(),i(`已粘贴到 ${t}`)}catch(e){i(e instanceof Error?e.message:`粘贴失败`,`error`)}finally{q.value=!1}}function $(e){if(Zt.value=!1,!Y.value)return;let t=Y.value;switch(e){case`open`:pn(t);break;case`copy`:jn([t]);break;case`cut`:Mn([t]);break;case`paste`:Nn();break;case`pasteInto`:t.type===`directory`&&Nn(R(T.value,t.name));break;case`edit`:Kn(t);break;case`preview`:Gn(t);break;case`download`:qn(t);break;case`copyPath`:Pn(t);break;case`terminal`:vn();break;case`compress`:Fn([t]);break;case`decompress`:In(t);break;case`rename`:Bn(t);break;case`chmod`:Hn(t);break;case`delete`:Jn(t);break}}async function Pn(e){let t=R(T.value,e.name);try{await navigator.clipboard.writeText(t),i(`路径已复制`)}catch{i(`复制失败`,`error`)}}function Fn(e){if(!w.value)return;let t=e?.length?e:X.value.length?X.value:[];if(!t.length){i(`请选择要压缩的文件或目录`,`warning`);return}pt.value=t.map(e=>R(T.value,e.name));let n=t.length===1?t[0].name.replace(/\.[^.]+$/,``):`archive`;dt.value=R(T.value,`${n}.tar.gz`),ft.value=`tar.gz`,ut.value=!0}function In(e){if(w.value){if(!nt(e.name)){i(`仅支持 .tar.gz / .tgz / .zip`,`warning`);return}ht.value=R(T.value,e.name),gt.value=T.value,mt.value=!0}}async function Ln(){if(!(!w.value||!pt.value.length||!dt.value)){q.value=!0;try{let e=dt.value;ft.value===`zip`&&!e.endsWith(`.zip`)&&(e=e.replace(/\.tar\.gz$/i,`.zip`),e.endsWith(`.zip`)||(e+=`.zip`)),await f.post(`/sync/compress`,{server_id:w.value,paths:pt.value,dest:e,format:ft.value}),ut.value=!1,X.value=[],Q(),i(`压缩完成`)}catch(e){i(e instanceof Error?e.message:`压缩失败`,`error`)}finally{q.value=!1}}}async function Rn(){if(!(!w.value||!ht.value)){q.value=!0;try{await f.post(`/sync/decompress`,{server_id:w.value,path:ht.value,dest:gt.value||`.`}),mt.value=!1,Q(),i(`解压完成`)}catch(e){i(e instanceof Error?e.message:`解压失败`,`error`)}finally{q.value=!1}}}async function zn(){if(!w.value||!U.value)return;let e=Ie(U.value);if(e!==!0){i(e,`warning`);return}let t=U.value,n=R(T.value,t);q.value=!0;try{await f.post(`/sync/write-file`,{server_id:w.value,path:n,content:``}),H.value=!1,U.value=``,Ct(w.value,n),await Q(),i(`文件已创建`),await fe(),tn.value?.openFile({path:n,name:t,content:``})}catch(e){i(e instanceof Error?e.message:`创建失败`,`error`)}finally{q.value=!1}}function Bn(e){At.value=e,kt.value=e.name,J.value=!0}async function Vn(){if(!(!w.value||!At.value||!kt.value))try{await f.post(`/sync/file-ops`,{server_id:w.value,operation:`rename`,path:R(T.value,At.value.name),new_path:R(T.value,kt.value)}),J.value=!1,Q(),i(`重命名成功`)}catch(e){i(e instanceof Error?e.message:`重命名失败`,`error`)}}function Hn(e){Xt.value=e,Mt.value=!0}async function Un(e){if(!(!w.value||!Xt.value)){Pt.value=!0;try{await f.post(`/sync/chmod`,{server_id:w.value,path:R(T.value,Xt.value.name),mode:e.mode,owner:e.owner,group:e.group,recursive:e.recursive??!1}),Mt.value=!1,Q(),i(`权限已修改`)}catch(e){i(e instanceof Error?e.message:`修改权限失败`,`error`)}finally{Pt.value=!1}}}async function Wn(){if(!w.value||!X.value.length||!confirm(`确定删除 ${X.value.length} 个文件?`))return;let e=0,t=0;for(let n of X.value)try{await f.post(`/sync/file-ops`,{server_id:w.value,operation:`delete`,path:R(T.value,n.name)}),e++}catch{t++}X.value=[],Q(),t===0?i(`已删除 ${e} 项`):i(`删除完成:成功 ${e},失败 ${t}`,t>0?`warning`:`success`)}async function Gn(e){if(!w.value||Cn(e,`查看`))return;let t=R(T.value,e.name);Ve.value=e.name,Ge.value=``,Xe.value=!0,je.value=!0;try{Ge.value=await Dt(w.value,t,307200)||`(空文件)`}catch(t){let n=t instanceof Error?t.message:`读取失败`;Ge.value=n,st(n)&&(P.value=e.name,F.value=!1),i(n,`error`)}finally{Xe.value=!1}}async function Kn(e){if(w.value&&!Cn(e,`编辑`)){q.value=!0;try{let t=R(T.value,e.name),n=await Dt(w.value,t,yt);await fe(),tn.value?.openFile({path:t,name:e.name,content:n})}catch(t){let n=t instanceof Error?t.message:`读取失败`;st(n)&&(P.value=e.name,F.value=!1),i(n,`error`)}finally{q.value=!1}}}async function qn(e){if(w.value)try{let t=R(T.value,e.name),{blob:n,filename:r}=await f.download(`/sync/download`,{server_id:w.value,path:t});vt(n,r),i(`已下载 ${r}`)}catch(e){i(e instanceof Error?e.message:`下载失败`,`error`)}}async function Jn(e){Et.value=e,bt.value=!0}async function Yn(){if(!(!w.value||!Et.value)){q.value=!0;try{await f.post(`/sync/file-ops`,{server_id:w.value,operation:`delete`,path:R(T.value,Et.value.name)}),bt.value=!1,Q(),i(`已删除`)}catch(e){i(e.message||`删除失败`,`error`)}finally{q.value=!1}}}async function Xn(){if(!w.value||!K.value)return;let e=Ie(K.value);if(e!==!0){i(e,`warning`);return}q.value=!0;try{await f.post(`/sync/file-ops`,{server_id:w.value,operation:`mkdir`,path:R(T.value,K.value)}),ot.value=!1,K.value=``,Q(),i(`目录已创建`)}catch(e){i(e.message||`创建失败`,`error`)}finally{q.value=!1}}async function Zn(){if(!(!w.value||!W.value.length)){G.value=!0;try{let e=new FormData;for(let t of W.value)e.append(`files`,t);e.append(`server_id`,String(w.value)),e.append(`remote_path`,T.value),await f.upload(`/sync/upload`,e),V.value=!1,W.value=[],Q(),i(`上传成功`)}catch(e){i(e.message||`上传失败`,`error`)}finally{G.value=!1}}}function Qn(e){return e?e<1024?e+` B`:e<1024*1024?(e/1024).toFixed(1)+` KB`:(e/1024/1024).toFixed(1)+` MB`:`—`}return me(async()=>{if(await ee(),!a.value.length){i(`暂无可用服务器,请先在「服务器」页添加`,`warning`);return}let e=xn();if(e==null)return;w.value=e;let t=C.query.path;typeof t==`string`&&t&&(T.value=L(t)),await yn(),Q()}),ge(()=>C.query.server_id,e=>{if(e&&Number(e)!==w.value){w.value=Number(e);let t=C.query.path;T.value=typeof t==`string`&&t?L(t):Le,P.value=null,F.value=!1,yn(),Q()}}),Ze({refresh:hn,goUp:gn,renameSelection:()=>{X.value.length===1&&Bn(X.value[0])},deleteSelection:()=>{X.value.length>0&&Wn()},selectAll:()=>{X.value=[...on.value]},copySelection:()=>jn(),cutSelection:()=>Mn(),pasteClipboard:()=>{Nn()}},X),(n,i)=>(N(),l(Re,{fluid:``,class:`pa-6`},{default:x(()=>[t(p,{elevation:`0`,border:``,rounded:`lg`,class:`mb-4 pa-4`},{default:x(()=>[t(Be,{align:`center`,dense:``},{default:x(()=>[t(ze,{cols:`12`,sm:`4`},{default:x(()=>[t(We,{modelValue:w.value,"onUpdate:modelValue":[i[0]||=e=>w.value=e,bn],items:o(a),"item-title":`name`,"item-value":`id`,label:`选择服务器`,variant:`outlined`,density:`compact`,"prepend-inner-icon":`mdi-server`},null,8,[`modelValue`,`items`])]),_:1}),t(ze,{cols:`12`,sm:`4`},{default:x(()=>[t(j,{modelValue:T.value,"onUpdate:modelValue":i[1]||=e=>T.value=e,label:`路径`,variant:`outlined`,density:`compact`,"prepend-inner-icon":`mdi-folder`,"append-inner-icon":`mdi-arrow-right`,"onClick:appendInner":hn,onKeydown:c(hn,[`enter`])},null,8,[`modelValue`])]),_:1}),t(ze,{cols:`12`,sm:`3`},{default:x(()=>[t(j,{modelValue:xe.value,"onUpdate:modelValue":i[2]||=e=>xe.value=e,label:`筛选文件名`,variant:`outlined`,density:`compact`,"prepend-inner-icon":`mdi-magnify`,clearable:``,"hide-details":``},null,8,[`modelValue`])]),_:1}),t(ze,{cols:`12`,sm:`3`},{default:x(()=>[t(We,{modelValue:Se.value,"onUpdate:modelValue":i[3]||=e=>Se.value=e,items:o(et),"item-title":`title`,"item-value":`value`,label:`类型`,variant:`outlined`,density:`compact`,"hide-details":``,clearable:``},null,8,[`modelValue`,`items`])]),_:1}),t(ze,{cols:`12`,sm:`2`},{default:x(()=>[t(We,{modelValue:Ce.value,"onUpdate:modelValue":i[4]||=e=>Ce.value=e,items:Te,"item-title":`title`,"item-value":`value`,label:`排序`,variant:`outlined`,density:`compact`,"hide-details":``},null,8,[`modelValue`])]),_:1}),t(ze,{cols:`12`,class:`d-flex ga-2 flex-wrap justify-end`},{default:x(()=>[t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-upload`,onClick:i[5]||=e=>V.value=!0},{default:x(()=>[...i[59]||=[v(`上传`,-1)]]),_:1}),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-file-plus`,disabled:!w.value,onClick:i[6]||=e=>H.value=!0},{default:x(()=>[...i[60]||=[v(`新建文件`,-1)]]),_:1},8,[`disabled`]),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-folder-plus`,onClick:i[7]||=e=>ot.value=!0},{default:x(()=>[...i[61]||=[v(`新建目录`,-1)]]),_:1}),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-zip-box`,disabled:!w.value||!en.value,onClick:i[8]||=e=>Fn()},{default:x(()=>[...i[62]||=[v(` 压缩 `,-1)]]),_:1},8,[`disabled`]),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-content-paste`,disabled:!se.value,onClick:i[9]||=()=>Nn()},{default:x(()=>[...i[63]||=[v(` 粘贴 `,-1)]]),_:1},8,[`disabled`]),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-arrow-up`,disabled:!an.value,onClick:gn},{default:x(()=>[...i[64]||=[v(` 上级 `,-1)]]),_:1},8,[`disabled`]),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-refresh`,onClick:hn},{default:x(()=>[...i[65]||=[v(`刷新`,-1)]]),_:1}),t(d,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-console`,disabled:!w.value,onClick:vn},{default:x(()=>[...i[66]||=[v(` 终端 `,-1)]]),_:1},8,[`disabled`])]),_:1})]),_:1})]),_:1}),Ae.value?(N(),l(Je,{key:0,type:Ae.value.type,variant:`tonal`,closable:``,prominent:``,density:`comfortable`,class:`mb-4`,icon:`mdi-shield-lock-outline`,"onClick:close":i[10]||=e=>F.value=!0},{default:x(()=>[v(E(Ae.value.text),1)]),_:1},8,[`type`])):b(``,!0),A(`div`,It,[A(`span`,null,E(cn.value),1),be.value?(N(),l(Ue,{key:0,size:`x-small`,color:`warning`,variant:`tonal`},{default:x(()=>[v(E(be.value),1)]),_:1})):b(``,!0),o(h)?(N(),l(Ue,{key:1,size:`x-small`,color:`info`,variant:`tonal`,class:`cursor-pointer`,onClick:i[11]||=()=>Nn()},{default:x(()=>[v(E(o(ne))+` → `+E(S.value)+` · Ctrl+V 粘贴 `,1)]),_:1})):b(``,!0)]),t(Nt,{items:rn.value,class:`pa-0 mb-2`},{item:x(({item:e,index:n})=>[t(jt,{disabled:e.disabled,class:ye({"text-primary":!e.disabled,"cursor-pointer":!e.disabled}),onClick:e=>_n(n)},{default:x(()=>[v(E(e.title),1)]),_:2},1032,[`disabled`,`class`,`onClick`])]),divider:x(()=>[...i[67]||=[v(`/`,-1)]]),_:1},8,[`items`]),en.value>0?(N(),l(p,{key:1,class:`mb-4`,color:`primary`,variant:`tonal`,rounded:`lg`},{default:x(()=>[t(m,{class:`d-flex align-center py-2`},{default:x(()=>[A(`span`,Lt,`已选择 `+E(en.value)+` 个文件`,1),t(z),t(d,{size:`small`,variant:`text`,color:`error`,onClick:Wn},{default:x(()=>[...i[68]||=[v(`批量删除`,-1)]]),_:1}),t(d,{size:`small`,variant:`text`,onClick:i[12]||=e=>X.value=[]},{default:x(()=>[...i[69]||=[v(`取消选择`,-1)]]),_:1})]),_:1})]),_:1})):b(``,!0),t(p,{elevation:`0`,border:``,rounded:`lg`,class:ye({"files-drop-active":M.value}),onDragenter:i[14]||=y(e=>M.value=!0,[`prevent`]),onDragover:i[15]||=y(e=>M.value=!0,[`prevent`]),onDragleave:i[16]||=y(e=>M.value=!1,[`prevent`]),onDrop:y(On,[`prevent`])},{default:x(()=>[t(e,{modelValue:X.value,"onUpdate:modelValue":i[13]||=e=>X.value=e,items:on.value,headers:nn,loading:k.value,"show-select":``,"return-object":``,hover:``,density:`comfortable`,"item-value":`name`,"row-props":Tn},{"item.name":x(({item:e})=>[A(`div`,Rt,[t(ue,{color:dn(e),size:`20`},{default:x(()=>[v(E(un(e)),1)]),_:2},1032,[`color`]),o(ct)(e,Oe.value)?(N(),l(ue,{key:0,size:`18`,color:`warning`,title:`当前 SSH 用户可能无法读取`},{default:x(()=>[...i[70]||=[v(` mdi-shield-lock `,-1)]]),_:1})):b(``,!0),A(`div`,zt,[A(`span`,{class:ye({"font-weight-medium":e.type===`directory`})},E(e.name),3),e.type===`symlink`&&e.link_target?(N(),ce(`div`,Bt,` → `+E(e.link_target),1)):b(``,!0)])])]),"item.owner":x(({item:e})=>[t(Ft,{text:o(at)(e),location:`top`},{activator:x(({props:n})=>[t(Ue,_e(n,{size:`small`,variant:`tonal`,color:o(it)(e.owner||``),class:`text-none`}),{default:x(()=>[v(E(o(rt)(e)),1)]),_:2},1040,[`color`])]),_:2},1032,[`text`])]),"item.size":x(({item:e})=>[A(`span`,Vt,E(e.type===`directory`?`—`:Qn(e.size)),1)]),"item.modified":x(({item:e})=>[A(`span`,Ht,E(e.modified||`—`),1)]),"item.actions":x(({item:e})=>[A(`div`,Ut,[Z(e)?(N(),l(d,{key:0,variant:`text`,size:`x-small`,density:`compact`,color:`primary`,onClick:y(t=>Kn(e),[`stop`])},{default:x(()=>[...i[71]||=[v(`编辑`,-1)]]),_:1},8,[`onClick`])):b(``,!0),Z(e)?(N(),l(d,{key:1,variant:`text`,size:`x-small`,density:`compact`,onClick:y(t=>Gn(e),[`stop`])},{default:x(()=>[...i[72]||=[v(`查看`,-1)]]),_:1},8,[`onClick`])):b(``,!0),Z(e)?(N(),l(d,{key:2,variant:`text`,size:`x-small`,density:`compact`,onClick:y(t=>qn(e),[`stop`])},{default:x(()=>[...i[73]||=[v(`下载`,-1)]]),_:1},8,[`onClick`])):b(``,!0),t(d,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:y(t=>Jn(e),[`stop`])},{default:x(()=>[...i[74]||=[v(`删除`,-1)]]),_:1},8,[`onClick`])])]),"no-data":x(()=>[A(`div`,Wt,[t(ue,{size:`40`,class:`mb-2`},{default:x(()=>[...i[75]||=[v(`mdi-folder-open-outline`,-1)]]),_:1}),A(`div`,null,E(ln.value),1),i[76]||=A(`div`,{class:`text-caption mt-2`},` 单击进入目录 · 编辑文件将打开浮动编辑器(含目录树)· 复制/剪切后可在其他目录或选中文件夹粘贴 `,-1)])]),_:1},8,[`modelValue`,`items`,`loading`])]),_:1},8,[`class`]),t(B,{modelValue:V.value,"onUpdate:modelValue":i[19]||=e=>V.value=e,"max-width":`500`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[77]||=[v(`上传文件`,-1)]]),_:1}),t(m,null,{default:x(()=>[t(Ye,{modelValue:W.value,"onUpdate:modelValue":i[17]||=e=>W.value=e,label:`选择文件`,variant:`outlined`,multiple:``,"show-size":``},null,8,[`modelValue`])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[18]||=e=>V.value=!1},{default:x(()=>[...i[78]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,onClick:Zn,loading:G.value},{default:x(()=>[...i[79]||=[v(`上传`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(B,{modelValue:H.value,"onUpdate:modelValue":i[22]||=e=>H.value=e,"max-width":`400`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[80]||=[v(`新建文件`,-1)]]),_:1}),t(m,null,{default:x(()=>[t(j,{modelValue:U.value,"onUpdate:modelValue":i[20]||=e=>U.value=e,label:`文件名`,variant:`outlined`,density:`compact`,rules:[o(Ie)],placeholder:`example.conf`,autofocus:``,onKeydown:c(zn,[`enter`])},null,8,[`modelValue`,`rules`])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[21]||=e=>H.value=!1},{default:x(()=>[...i[81]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,loading:q.value,onClick:zn},{default:x(()=>[...i[82]||=[v(`创建`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(B,{modelValue:ot.value,"onUpdate:modelValue":i[25]||=e=>ot.value=e,"max-width":`400`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[83]||=[v(`新建目录`,-1)]]),_:1}),t(m,null,{default:x(()=>[t(j,{modelValue:K.value,"onUpdate:modelValue":i[23]||=e=>K.value=e,label:`目录名`,variant:`outlined`,density:`compact`,rules:[o(Ie)],onKeydown:c(Xn,[`enter`])},null,8,[`modelValue`,`rules`])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[24]||=e=>ot.value=!1},{default:x(()=>[...i[84]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,onClick:Xn},{default:x(()=>[...i[85]||=[v(`创建`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(B,{modelValue:bt.value,"onUpdate:modelValue":i[27]||=e=>bt.value=e,"max-width":`400`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[86]||=[v(`确认删除`,-1)]]),_:1}),t(m,null,{default:x(()=>[i[87]||=v(`确定要删除 `,-1),A(`strong`,null,E(Et.value?.name),1),i[88]||=v(` 吗?`,-1)]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[26]||=e=>bt.value=!1},{default:x(()=>[...i[89]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`error`,variant:`flat`,onClick:Yn},{default:x(()=>[...i[90]||=[v(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(B,{modelValue:J.value,"onUpdate:modelValue":i[30]||=e=>J.value=e,"max-width":`400`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[91]||=[v(`重命名`,-1)]]),_:1}),t(m,null,{default:x(()=>[t(j,{modelValue:kt.value,"onUpdate:modelValue":i[28]||=e=>kt.value=e,label:`新名称`,variant:`outlined`,density:`compact`,rules:[o(qe)(`名称`)],autofocus:``,onKeydown:c(Vn,[`enter`])},null,8,[`modelValue`,`rules`])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[29]||=e=>J.value=!1},{default:x(()=>[...i[92]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,onClick:Vn},{default:x(()=>[...i[93]||=[v(`确定`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(_t,{modelValue:Mt.value,"onUpdate:modelValue":i[31]||=e=>Mt.value=e,file:Xt.value,"server-id":w.value,loading:Pt.value,onApply:Un},null,8,[`modelValue`,`file`,`server-id`,`loading`]),t(B,{modelValue:ut.value,"onUpdate:modelValue":i[35]||=e=>ut.value=e,"max-width":`440`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[94]||=[v(`压缩`,-1)]]),_:1}),t(m,null,{default:x(()=>[A(`p`,Gt,`将压缩 `+E(pt.value.length)+` 项到当前目录`,1),t(j,{modelValue:dt.value,"onUpdate:modelValue":i[32]||=e=>dt.value=e,label:`压缩包路径`,variant:`outlined`,density:`compact`},null,8,[`modelValue`]),t(We,{modelValue:ft.value,"onUpdate:modelValue":i[33]||=e=>ft.value=e,items:[{title:`tar.gz`,value:`tar.gz`},{title:`zip`,value:`zip`}],"item-title":`title`,"item-value":`value`,label:`格式`,variant:`outlined`,density:`compact`},null,8,[`modelValue`])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[34]||=e=>ut.value=!1},{default:x(()=>[...i[95]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,loading:q.value,onClick:Ln},{default:x(()=>[...i[96]||=[v(`压缩`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(B,{modelValue:mt.value,"onUpdate:modelValue":i[38]||=e=>mt.value=e,"max-width":`440`},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,null,{default:x(()=>[...i[97]||=[v(`解压`,-1)]]),_:1}),t(m,null,{default:x(()=>[A(`p`,Kt,E(ht.value),1),t(j,{modelValue:gt.value,"onUpdate:modelValue":i[36]||=e=>gt.value=e,label:`解压到目录`,variant:`outlined`,density:`compact`},null,8,[`modelValue`])]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[37]||=e=>mt.value=!1},{default:x(()=>[...i[98]||=[v(`取消`,-1)]]),_:1}),t(d,{color:`primary`,variant:`flat`,loading:q.value,onClick:Rn},{default:x(()=>[...i[99]||=[v(`解压`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(de,{modelValue:Zt.value,"onUpdate:modelValue":i[54]||=e=>Zt.value=e,target:[Qt.value,$t.value],location:`bottom start`},{default:x(()=>[t(De,{density:`compact`,nav:``},{default:x(()=>[Y.value&&Y.value.type===`directory`?(N(),l(g,{key:0,"prepend-icon":`mdi-folder-open`,onClick:i[39]||=e=>$(`open`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[100]||=[v(`打开`,-1)]]),_:1})]),_:1})):b(``,!0),Y.value&&Z(Y.value)?(N(),l(g,{key:1,"prepend-icon":`mdi-pencil`,onClick:i[40]||=e=>$(`edit`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[101]||=[v(`编辑`,-1)]]),_:1})]),_:1})):b(``,!0),Y.value&&Z(Y.value)?(N(),l(g,{key:2,"prepend-icon":`mdi-eye`,onClick:i[41]||=e=>$(`preview`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[102]||=[v(`查看`,-1)]]),_:1})]),_:1})):b(``,!0),Y.value&&Z(Y.value)?(N(),l(g,{key:3,"prepend-icon":`mdi-download`,onClick:i[42]||=e=>$(`download`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[103]||=[v(`下载`,-1)]]),_:1})]),_:1})):b(``,!0),Y.value?(N(),l(g,{key:4,"prepend-icon":`mdi-content-copy`,onClick:i[43]||=e=>$(`copy`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[104]||=[v(`复制 (Ctrl+C)`,-1)]]),_:1})]),_:1})):b(``,!0),Y.value?(N(),l(g,{key:5,"prepend-icon":`mdi-content-cut`,onClick:i[44]||=e=>$(`cut`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[105]||=[v(`剪切 (Ctrl+X)`,-1)]]),_:1})]),_:1})):b(``,!0),t(g,{"prepend-icon":`mdi-content-paste`,disabled:!se.value,onClick:i[45]||=e=>$(`paste`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[106]||=[v(`粘贴到当前目录 (Ctrl+V)`,-1)]]),_:1})]),_:1},8,[`disabled`]),Y.value?.type===`directory`&&se.value?(N(),l(g,{key:6,"prepend-icon":`mdi-folder-arrow-down`,onClick:i[46]||=e=>$(`pasteInto`)},{default:x(()=>[t(O,null,{default:x(()=>[v(`粘贴到「`+E(Y.value.name)+`」`,1)]),_:1})]),_:1})):b(``,!0),t(g,{"prepend-icon":`mdi-link-variant`,onClick:i[47]||=e=>$(`copyPath`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[107]||=[v(`复制路径`,-1)]]),_:1})]),_:1}),t(g,{"prepend-icon":`mdi-console`,onClick:i[48]||=e=>$(`terminal`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[108]||=[v(`终端`,-1)]]),_:1})]),_:1}),t(ve),Y.value&&(Z(Y.value)||Y.value.type===`directory`)?(N(),l(g,{key:7,"prepend-icon":`mdi-zip-box`,onClick:i[49]||=e=>$(`compress`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[109]||=[v(`压缩`,-1)]]),_:1})]),_:1})):b(``,!0),Y.value&&sn(Y.value.name)?(N(),l(g,{key:8,"prepend-icon":`mdi-package-up`,onClick:i[50]||=e=>$(`decompress`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[110]||=[v(`解压`,-1)]]),_:1})]),_:1})):b(``,!0),t(ve),t(g,{"prepend-icon":`mdi-file-rename-box`,onClick:i[51]||=e=>$(`rename`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[111]||=[v(`重命名`,-1)]]),_:1})]),_:1}),t(g,{"prepend-icon":`mdi-lock`,onClick:i[52]||=e=>$(`chmod`)},{default:x(()=>[t(O,null,{default:x(()=>[...i[112]||=[v(`修改权限`,-1)]]),_:1})]),_:1}),t(ve),t(g,{"prepend-icon":`mdi-delete`,onClick:i[53]||=e=>$(`delete`)},{default:x(()=>[t(O,{class:`text-error`},{default:x(()=>[...i[113]||=[v(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`,`target`]),t(B,{modelValue:je.value,"onUpdate:modelValue":i[57]||=e=>je.value=e,"max-width":`900`,scrollable:``},{default:x(()=>[t(p,{border:``},{default:x(()=>[t(_,{class:`d-flex align-center`},{default:x(()=>[A(`span`,qt,E(Ve.value),1),t(z),t(d,{icon:`mdi-close`,variant:`text`,onClick:i[55]||=e=>je.value=!1})]),_:1}),t(ve),t(m,{style:{"max-height":`70vh`}},{default:x(()=>[Xe.value?(N(),l(we,{key:0,indeterminate:``,class:`mb-2`})):(N(),ce(`pre`,Jt,E(Ge.value),1))]),_:1}),t(s,null,{default:x(()=>[t(z),t(d,{variant:`text`,onClick:i[56]||=e=>je.value=!1},{default:x(()=>[...i[114]||=[v(`关闭`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(o(r),{ref_key:`editorWorkbench`,ref:tn,"server-id":w.value??0,"current-path":T.value,onSaved:i[58]||=e=>Sn(e),onPathChange:mn,onPasteTarget:Nn},null,8,[`server-id`,`current-path`])]),_:1}))}}),[[`__scopeId`,`data-v-1cf45b78`]]);export{Xt as default};