'use client'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { Table, TableBody, TableCaption, TableCell, TableHead, TableHeader, TableRow } from '@/components/ui/table'; import { useOssStore } from '@/hooks/admin/web/blog/use-oss-store'; import { ObjectMeta } from 'ali-oss'; import { Delete, Download, Edit, RefreshCcw, Upload } from 'lucide-react'; import { useEffect, useMemo, useState } from 'react'; import { toast } from 'sonner'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { UploadManager } from './components/UploadManager'; import { OssStore } from '@/lib/oss/OssStore'; const formatSizeNumber = (n: number) => { const unit = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB']; for (const [i, u] of unit.entries()) { if (n < 1024 ** (i + 1)) { if (i <= 0) { return `${(n)}${unit[i]}`; } else { return `${(n / 1024 ** i).toFixed(2)}${unit[i]}`; } } } } export default function Page() { const ossStore = new OssStore({ prefix: 'tone-page', prefixAddUserId: true, }); const objectList = ossStore.useObjectList; const handleRefreshFileList = async () => ossStore.loadObjectList().catch(e => toast.error(e.message)); const handleCheckboxChange = ossStore.handleObjectCheckedStateChanged.bind(ossStore); const checkedFileIds = useMemo(() => { return (objectList || []).filter(i => i.isChecked).map(i => i.id); }, [objectList]) const handleDeleteObject = async (id: string) => { await ossStore.deleteObject(id) .then(() => ossStore.loadObjectList()) .catch(e => toast.error(`${e.message}`)) } const handleDeleteCheckedFiles = async () => { const res = await ossStore.deleteCheckedObjects(); if (res.failed > 0) { toast.warning(`删除完成,共有${res.failed}个文件删除失败`) } else { toast.success(`${res.all}个文件删除完成`) } handleRefreshFileList(); } const handleDownloadObject = async (id: string) => { ossStore.downloadObject(id).catch(e => toast.error(`${e.message}`)); } return (
{objectList &&
共有 {objectList.length} 个文件,目前最大支持100个文件
}
{/* {(ossStore.isLoading || ( == null && !error)) &&
加载中...
} {error &&
{`${error}`}
} {fileList && fileList.length === 0 &&
暂无文件
} */}
文件名 文件大小 上次修改时间 { objectList && objectList.map(d => ( handleCheckboxChange(d.id, Boolean(v))} /> {d.name} handleDownloadObject(d.id)}>下载 {/* 编辑 */} handleDeleteObject(d.id)}>删除 {formatSizeNumber(d.size)} {d.lastModified.toLocaleString()} )) }
) }