diff --git a/packages/filesystem/auth.ts b/packages/filesystem/auth.ts index 328308457..a15e55fa7 100644 --- a/packages/filesystem/auth.ts +++ b/packages/filesystem/auth.ts @@ -136,6 +136,17 @@ export const netDiskTypeMap: Partial> = { dropbox: "dropbox", }; +export async function HasNetDiskToken(netDiskType: NetDiskType): Promise { + const localStorageDAO = new LocalStorageDAO(); + const key = `netdisk:token:${netDiskType}`; + try { + const token = await localStorageDAO.getValue(key); + return !!token?.accessToken; + } catch { + return false; + } +} + export async function ClearNetDiskToken(netDiskType: NetDiskType) { const localStorageDAO = new LocalStorageDAO(); const key = `netdisk:token:${netDiskType}`; diff --git a/src/pages/components/FileSystemParams/index.tsx b/src/pages/components/FileSystemParams/index.tsx index 8e7549985..ebf74473a 100644 --- a/src/pages/components/FileSystemParams/index.tsx +++ b/src/pages/components/FileSystemParams/index.tsx @@ -1,9 +1,9 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; import { Button, Input, Message, Popconfirm, Select, Space } from "@arco-design/web-react"; import type { FileSystemType } from "@Packages/filesystem/factory"; import FileSystemFactory from "@Packages/filesystem/factory"; import { useTranslation } from "react-i18next"; -import { ClearNetDiskToken, netDiskTypeMap } from "@Packages/filesystem/auth"; +import { ClearNetDiskToken, HasNetDiskToken, netDiskTypeMap } from "@Packages/filesystem/auth"; const FileSystemParams: React.FC<{ headerContent: React.ReactNode | string; @@ -22,6 +22,17 @@ const FileSystemParams: React.FC<{ }) => { const fsParams = FileSystemFactory.params(); const { t } = useTranslation(); + const [hasBoundToken, setHasBoundToken] = useState(false); + + const netDiskType = netDiskTypeMap[fileSystemType]; + + useEffect(() => { + if (!netDiskType) { + setHasBoundToken(false); + return; + } + HasNetDiskToken(netDiskType).then(setHasBoundToken); + }, [netDiskType]); const fileSystemList: { key: FileSystemType; @@ -53,7 +64,6 @@ const FileSystemParams: React.FC<{ }, ]; - const netDiskType = netDiskTypeMap[fileSystemType]; const netDiskName = netDiskType ? fileSystemList.find((item) => item.key === fileSystemType)?.name : null; return ( @@ -74,13 +84,14 @@ const FileSystemParams: React.FC<{ ))} {children} - {netDiskType && netDiskName && ( + {netDiskType && netDiskName && hasBoundToken && ( { try { await ClearNetDiskToken(netDiskType); + setHasBoundToken(false); Message.success(t("netdisk_unbind_success", { provider: netDiskName })!); } catch (error) { Message.error(`${t("netdisk_unbind_error", { provider: netDiskName })}: ${String(error)}`);