From 581a1506f3817fd7f4d93ca04eba8a40fff10ed3 Mon Sep 17 00:00:00 2001
From: Cyan <920354583@qq.com>
Date: Sat, 28 Dec 2024 21:54:17 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E8=B0=83=E6=95=B4?=
=?UTF-8?q?=E9=83=A8=E5=88=86=E6=A0=B7=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/components/Header/DropdownUser.tsx | 2 +-
src/pages/File/index.tsx | 264 +++++--------------------
2 files changed, 50 insertions(+), 216 deletions(-)
diff --git a/src/components/Header/DropdownUser.tsx b/src/components/Header/DropdownUser.tsx
index 1828579..fd0736d 100644
--- a/src/components/Header/DropdownUser.tsx
+++ b/src/components/Header/DropdownUser.tsx
@@ -48,7 +48,7 @@ const DropdownUser = () => {
-
+
{/* -
{
+import { Editor } from '@bytemd/react';
+
+import plugins from './plugins';
+
+import 'bytemd/dist/index.css';
+import zh from 'bytemd/lib/locales/zh_Hans.json';
+
+import './index.scss';
+
+interface Props {
+ value: string;
+ onChange: (value: string) => void;
+}
+
+const EditorMD = ({ value, onChange }: Props) => {
+ const store = useUserStore();
const [loading, setLoading] = useState(false)
- const [openUploadModalOpen, setOpenUploadModalOpen] = useState(false);
- const [openFileInfoDrawer, setOpenFileInfoDrawer] = useState(false);
- const [openFilePreviewDrawer, setOpenFilePreviewDrawer] = useState(false);
+ const uploadImages = async (files: File[]) => {
+ setLoading(true);
- const [dirList, setDirList] = useState([])
- const [fileList, setFileList] = useState([])
+ // 处理成后端需要的格式
+ const formData = new FormData();
+ formData.append("dir", "article");
+ for (let i = 0; i < files.length; i++) formData.append('files', files[i])
- const [dirName, setDirName] = useState("")
- const [file, setFile] = useState({} as File)
+ const { data: { code, data } } = await axios.post(`${baseURL}/file`, formData, {
+ headers: {
+ "Authorization": `Bearer ${store.token}`,
+ "Content-Type": "multipart/form-data"
+ }
+ });
- // 获取目录列表
- const getDirList = async () => {
- setLoading(true)
- const { data } = await getDirListAPI()
- setDirList(data)
- setLoading(false)
- }
+ setLoading(false);
- // 获取指定目录的文件列表
- const getFileList = async (dir: string) => {
- const { data } = await getFileListAPI({ dir })
-
- if (!fileList.length && !(data as File[]).length) message.error("该目录中没有文件")
-
- setFileList(data as File[])
- setLoading(false)
- }
-
- // 删除图片
- const onDeleteImage = async (data: File) => {
- setLoading(true)
- await delFileDataAPI(`${dirName}/${data.name}`)
- message.success("🎉 删除图片成功")
- getFileList(dirName)
- setFile({} as File)
-
- setOpenFileInfoDrawer(false)
- setOpenFilePreviewDrawer(false)
- }
-
- // 下载图片
- const onDownloadImage = (data: File) => {
- fetch(data.url)
- .then((response) => response.blob())
- .then((blob) => {
- const url = URL.createObjectURL(new Blob([blob]));
- const link = document.createElement<'a'>('a');
- link.href = url;
- link.download = data.name;
- document.body.appendChild(link);
- link.click();
- URL.revokeObjectURL(url);
- link.remove();
- });
- };
-
- // 打开目录
- const openDir = (dir: string) => {
- setDirName(dir)
- getFileList(dir)
- }
-
- useEffect(() => {
- setLoading(true)
- getDirList()
- }, [])
-
- // 查看文件信息
- const viewOpenFileInfo = (item: File) => {
- setOpenFileInfoDrawer(true)
- setFile(item)
+ // 返回图片信息数组
+ return data.map((url: string) => ({ url }));
}
return (
<>
-
-
-
-
- {
- !fileList.length
- ?
- :
setFileList([])} />
- }
-
-
-
-
- {/* 文件列表 */}
-
-
- {
- fileList.length
- ? (
- fileList.map((item, index) =>
-
viewOpenFileInfo(item)}>
-

-
- )
- )
- : dirList.map((dir, index) => (
-
openDir(dir)}>
-

-
{dir}
-
- ))
- }
-
-
-
-
- {/* 文件上传 */}
- getFileList(dirName)}
- onCancel={() => setOpenUploadModalOpen(false)}
- />
-
- {/* 文件信息 */}
- { setOpenFileInfoDrawer(false); setFile({} as File) }}
- >
-
-
- 文件名称
- {file.name}
-
-
-
- 文件类型
- {file.type}
-
-
-
- 文件大小
- {(file.size / 1048576).toFixed(2)}MB
-
-
-
- 文件链接
- {
- await navigator.clipboard.writeText(file.url)
- message.success("🎉 复制成功")
- }}>{file.url}
-
-
-
- 图片预览
- setOpenFilePreviewDrawer(visible),
- visible: openFilePreviewDrawer,
- toolbarRender: (
- _,
- {
- transform: { scale },
- actions: { onFlipY, onFlipX, onRotateLeft, onRotateRight, onZoomOut, onZoomIn, onReset },
- },
- ) => (
-
-
-
onDeleteImage(file)}
- okText="删除"
- cancelText="取消"
- >
-
-
-
-
onDownloadImage(file)} />
-
-
-
-
-
-
-
-
-
- ),
- }} />
-
- 图片操作
-
- onDeleteImage(file)}
- okText="删除"
- cancelText="取消"
- >
-
-
-
+
+
+
>
- )
-}
\ No newline at end of file
+ );
+};
+
+export default EditorMD;