按 demo/ 的写法把交付包改成「角色由目录决定」:iw/ 拷内网机、ow/ 拷外网机, 各自含镜像 tar、SQL、配置与 install.sh,install.sh 不再收 iw/ow 参数。 前端不再打进镜像,改为静态包放在 <侧>/web/ 只读挂进 nginx:1.27-alpine, 现场临时改页面直接替换文件 + restart web 即可。数据仍全部挂宿主机, 子目录命名与 deploy/offline 一致(pgdata/redis/mq/upload/logs/gate), 默认根改为包内 ./volumes,放数据盘只改 .env 的 SFILE_DATA_ROOT。 后端镜像 sfile-app:1.0.1 含传输优化那一批(实测组包 11.4×、解包 9.9×)。 出包脚本 deployment/scripts/build-package.sh 负责 jar→镜像→前端双包→sql→tar→VERSION。
1 line
9.5 KiB
JavaScript
1 line
9.5 KiB
JavaScript
import{t as e}from"./useQuery-dxbdhNvu.js";import{n as t,t as n}from"./file-category-filter-BIAErrxo.js";import{t as r}from"./file-COj1kCUn.js";import{t as i}from"./folder-input--tEWrMtP.js";import{t as a}from"./folder-Dl7FxCLT.js";import{Dt as o,Et as s,F as c,Ot as l,Qt as u,Vn as d,Zt as f,ct as p,fn as m,ht as h,ln as g,pt as _,qn as v,st as y,t as b,tn as x,yn as S,zn as C}from"./index-BaTxSAlR.js";import{t as w}from"./directory-breadcrumb-u3uCxukv.js";import{n as T,r as E,t as D}from"./data-table-CEq6a930.js";import{t as O}from"./pagination-Bragnnjj.js";import{a as k,i as A,n as j,o as M,r as N,s as P,t as F}from"./dialog-CnxDxMp1.js";var I=m(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),L=v(d(),1);const R=e=>{let{mutateAsync:t,isPending:n}=S({mutationFn:o,...e||{}});return{remove:e=>{g.promise(t(e),{loading:`删除中`,success:`删除成功`})},removeIsPending:n}};var z=v(C(),1);function B({open:e,setOpen:t,data:n,refetch:i}){let{remove:o,removeIsPending:s}=R({onSuccess(){i==null||i(),t(!1)}});return(0,z.jsx)(F,{open:e,onOpenChange:t,children:(0,z.jsxs)(N,{className:`w-[400px]`,children:[(0,z.jsxs)(M,{children:[(0,z.jsxs)(P,{children:[`您确定要彻底删除该`,(n==null?void 0:n.fileType)===p.FILE?`文件`:`目录`,`?`]}),(n==null?void 0:n.fileType)===p.FILE?(0,z.jsx)(A,{children:`彻底删除后文件将被永久删除,无法恢复`}):(0,z.jsx)(A,{children:`彻底删除后目录下的文件也会一并被删除,无法恢复`}),(0,z.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-sm p-2 rounded-md bg-gray-50`,children:[(n==null?void 0:n.fileType)===p.FILE?(0,z.jsx)(r,{size:16,className:`text-primary flex-none`}):(0,z.jsx)(a,{size:16,className:`text-amber-500 flex-none`}),(0,z.jsx)(`span`,{className:`break-all`,children:n==null?void 0:n.fileName})]})]}),(0,z.jsxs)(k,{children:[(0,z.jsx)(j,{asChild:!0,children:(0,z.jsx)(u,{variant:`outline`,children:`取消`})}),(0,z.jsxs)(u,{type:`submit`,variant:`destructive`,disabled:s,onClick:()=>{o(n==null?void 0:n.id)},children:[s&&(0,z.jsx)(f,{}),`确定`]})]})]})})}const V=e=>{let{mutateAsync:t,isPending:n}=S({mutationFn:s,...e||{}});return{recover:e=>{g.promise(t(e),{loading:`恢复中`,success:`恢复成功`})},recoverIsPending:n}};function H({open:e,setOpen:t,data:n,refetch:i}){let{recover:o,recoverIsPending:s}=V({onSuccess(){i==null||i(),t(!1)}});return(0,z.jsx)(F,{open:e,onOpenChange:t,children:(0,z.jsxs)(N,{className:`w-[400px]`,children:[(0,z.jsxs)(M,{children:[(0,z.jsxs)(P,{children:[`您确定要恢复该`,(n==null?void 0:n.fileType)===p.FILE?`文件`:`目录`,`?`]}),(n==null?void 0:n.fileType)===p.FILE?(0,z.jsx)(A,{children:`恢复后文件将被恢复到回收站,可以再次删除`}):(0,z.jsx)(A,{children:`恢复后目录下的文件也会一并被恢复,可以再次删除`}),(0,z.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-sm p-2 rounded-md bg-gray-50`,children:[(n==null?void 0:n.fileType)===p.FILE?(0,z.jsx)(r,{size:16,className:`text-primary flex-none`}):(0,z.jsx)(a,{size:16,className:`text-amber-500 flex-none`}),(0,z.jsx)(`span`,{className:`break-all`,children:n==null?void 0:n.fileName})]})]}),(0,z.jsxs)(k,{children:[(0,z.jsx)(j,{asChild:!0,children:(0,z.jsx)(u,{variant:`outline`,children:`取消`})}),(0,z.jsxs)(u,{type:`submit`,disabled:s,onClick:()=>{o(n==null?void 0:n.id)},children:[s&&(0,z.jsx)(f,{}),`确定`]})]})]})})}const U=({useColumns:t,queryKey:n,params:r})=>{var i,a,o;let[s,c]=(0,L.useState)([]),[l,u]=(0,L.useState)(0),[d,f]=(0,L.useState)({pageIndex:0,pageSize:10}),[p,m]=(0,L.useState)({}),g=e({queryKey:[...n,d,l,r],queryFn:()=>h({parentId:l||void 0,parentNotInvalid:!l,pageSize:d.pageSize,pageNo:d.pageIndex+1,...r}).then(e=>e.data)}),_=e=>{u(e.id),y.setPageIndex(0),c(t=>[...t,e]),y.resetRowSelection()},v=t(_),y=T({data:(g==null||(i=g.data)==null?void 0:i.entityList)||[],columns:v,getCoreRowModel:E(),manualPagination:!1,rowCount:(g==null||(a=g.data)==null?void 0:a.totalCount)||0,pageCount:(g==null||(o=g.data)==null?void 0:o.pageCount)||0,onPaginationChange:f,autoResetPageIndex:!1,onRowSelectionChange:m,state:{pagination:d,rowSelection:p}});return{parentId:l,setParentId:u,handleChangeParentId:_,openDirectorys:s,changeOpenDirectorys:e=>{u(e==null?void 0:e.id),y.setPageIndex(0),c(t=>{let n=t.findIndex(t=>t.id===(e==null?void 0:e.id));return n>-1?[...t.slice(0,n+1)]:[]}),y.resetRowSelection()},pagination:d,table:y,query:g,reset:()=>{u(0),y.setPageIndex(0),c([]),y.resetRowSelection()},rowSelection:p,setRowSelection:m}},W=e=>{let{mutateAsync:t,isPending:n}=S({mutationFn:l,...e||{}});return{batchRemove:e=>{g.promise(t(e),{loading:`删除中`,success:`删除成功`})},batchRemoveIsPending:n}};function G({open:e,setOpen:t,ids:n,refetch:r}){let{batchRemove:i,batchRemoveIsPending:a}=W({onSuccess(){r==null||r(),t(!1)}});return(0,z.jsx)(F,{open:e,onOpenChange:t,children:(0,z.jsxs)(N,{className:`w-[400px]`,children:[(0,z.jsxs)(M,{children:[(0,z.jsx)(P,{children:`您确定要彻底删除选中的文件/目录吗?`}),(0,z.jsxs)(A,{children:[`当前选中`,(0,z.jsx)(`span`,{className:`text-primary px-1`,children:(n==null?void 0:n.length)||0}),`个文件/目录,彻底删除后文件/目录将被永久删除,无法恢复`]})]}),(0,z.jsxs)(k,{children:[(0,z.jsx)(j,{asChild:!0,children:(0,z.jsx)(u,{variant:`outline`,children:`取消`})}),(0,z.jsxs)(u,{type:`submit`,variant:`destructive`,disabled:a,onClick:()=>{if(!(n!=null&&n.length)){g(`请至少选择一个文件/目录`);return}i(n)},children:[a&&(0,z.jsx)(f,{}),`确定`]})]})]})})}function K({handleChangeParentId:e,handleRecover:t,handleRemove:n,handleFilePreview:o}){return[{id:`select`,header:({table:e})=>(0,z.jsx)(b,{checked:e.getIsAllPageRowsSelected()||e.getIsSomePageRowsSelected()&&`indeterminate`,onCheckedChange:t=>e.toggleAllPageRowsSelected(!!t)}),cell:({row:e})=>(0,z.jsx)(b,{checked:e.getIsSelected(),onCheckedChange:t=>e.toggleSelected(!!t)})},{accessorKey:`fileName`,header:`文件名`,cell:({row:t})=>{var n;return(0,z.jsxs)(`div`,{className:`flex items-center gap-1 break-all cursor-pointer hover:underline hover:text-primary group`,onClick:()=>{var n;(t==null||(n=t.original)==null?void 0:n.fileType)===p.DIRECTORY?e(t==null?void 0:t.original):o(t==null?void 0:t.original)},children:[(t==null||(n=t.original)==null?void 0:n.fileType)===p.FILE?(0,z.jsx)(z.Fragment,{children:(0,z.jsx)(r,{size:18,className:`text-primary`})}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(a,{size:18,className:`text-amber-500 group-hover:hidden`}),(0,z.jsx)(i,{size:18,className:`text-amber-500 group-hover:block hidden`})]}),(0,z.jsx)(`span`,{children:t.getValue(`fileName`)})]})}},{accessorKey:`updateTime`,header:`删除日期`,cell:({row:e})=>(0,z.jsx)(`div`,{children:e.getValue(`updateTime`)})},{accessorKey:`fileSize`,header:`文件大小`,cell:({row:e})=>(0,z.jsx)(`div`,{children:x(e.getValue(`fileSize`))})},{accessorKey:`fileCategory`,header:`文件种类`,cell:({row:e})=>(0,z.jsx)(`div`,{children:e.original.fileType===p.FILE?c(e.getValue(`fileCategory`)):`-`})},{id:`actions`,enableHiding:!1,header:`操作`,cell:({row:e})=>{var r;return(0,z.jsxs)(`div`,{className:`space-x-2`,children:[(0,z.jsx)(u,{size:`sm`,variant:`outline`,onClick:()=>t(e==null?void 0:e.original),children:`恢复`}),(0,z.jsx)(u,{size:`sm`,variant:`destructive`,onClick:()=>n(e==null?void 0:e.original),children:`彻底删除`}),((r=e.original)==null?void 0:r.fileType)===p.FILE&&(0,z.jsx)(u,{variant:`outline`,size:`sm`,onClick:()=>{var t;_({code:(t=e.original)==null?void 0:t.fileCode})},children:`下载`})]})}}]}function q(){let[e,r]=(0,L.useState)(null),[i,a]=(0,L.useState)(!1),o=e=>{r(e),a(!0)},[s,c]=(0,L.useState)(!1),l=e=>{r(e),c(!0)},[d,f]=(0,L.useState)(!1),p=e=>{r(e),f(!0)},[m,h]=(0,L.useState)(!1),_=()=>{if(!C.getFilteredSelectedRowModel().rows.length){g.error(`请选择要删除的文件`);return}h(!0)},[v,b]=(0,L.useState)(`all`),{openDirectorys:x,changeOpenDirectorys:S,table:C,query:T,reset:E}=U({useColumns:e=>K({handleChangeParentId:e,handleRecover:o,handleRemove:l,handleFilePreview:p}),queryKey:[`recycleFiles`],params:(0,L.useMemo)(()=>({fileStatus:y.INVALID,fileCategory:v===`all`?void 0:v}),[v])});return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(G,{open:m,setOpen:h,ids:C.getFilteredSelectedRowModel().rows.map(e=>e.original.id),refetch:T.refetch}),(0,z.jsx)(B,{open:s,setOpen:c,data:e,refetch:T.refetch}),(0,z.jsx)(H,{open:i,setOpen:a,data:e,refetch:T.refetch}),(0,z.jsx)(t,{open:d,setOpen:f,data:e}),(0,z.jsxs)(`div`,{className:`p-4 box-border min-h-full space-y-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`text-lg`,children:`回收站`}),(0,z.jsx)(`div`,{className:`text-xs text-black/50`,children:`列表展示当前用户七天之内删除的所有文件,文件删除七天以上系统自动进行彻底删除不再保存。`})]}),(0,z.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,z.jsx)(n,{fileCategory:v,setFileCategory:b,reset:E})}),(0,z.jsxs)(`div`,{className:`p-4 rounded-lg border bg-white space-y-2`,children:[(0,z.jsx)(`div`,{className:`flex items-center gap-2 empty:hidden`,children:(0,z.jsxs)(u,{variant:`destructive`,onClick:_,children:[(0,z.jsx)(I,{}),`批量删除`]})}),(0,z.jsx)(w,{directorys:x,onChangeDirectorys:S}),(0,z.jsxs)(`div`,{className:`relative overflow-hidden`,children:[(0,z.jsx)(D,{table:C,query:T}),(0,z.jsx)(O,{table:C,className:`justify-end p-2 sticky bottom-0 left-0 right-0 z-10 bg-white`})]})]})]})]})}export{q as component,K as useColumns}; |