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