From 22921dfa9fda486fbb5ef48cc6eefb1d2ad2e426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 17 Mar 2026 09:59:41 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=F0=9F=90=9B=20=E4=BF=AE=E5=A4=8D=E6=9C=AA?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E7=BD=91=E7=9B=98=E6=97=B6=E4=BB=8D=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E8=A7=A3=E7=BB=91=E6=8C=89=E9=92=AE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit closes #1289 --- .../components/FileSystemParams/index.tsx | 31 +++++++++++++++++-- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/src/pages/components/FileSystemParams/index.tsx b/src/pages/components/FileSystemParams/index.tsx index 8e7549985..f7a58e0ae 100644 --- a/src/pages/components/FileSystemParams/index.tsx +++ b/src/pages/components/FileSystemParams/index.tsx @@ -1,9 +1,11 @@ -import React from "react"; +import React, { useCallback, 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 type { NetDiskType, Token } from "@Packages/filesystem/auth"; +import { LocalStorageDAO } from "@App/app/repo/localStorage"; const FileSystemParams: React.FC<{ headerContent: React.ReactNode | string; @@ -22,6 +24,29 @@ const FileSystemParams: React.FC<{ }) => { const fsParams = FileSystemFactory.params(); const { t } = useTranslation(); + const [hasBoundToken, setHasBoundToken] = useState(false); + + // 检查当前网盘类型是否已绑定 token + const checkTokenBound = useCallback(async (diskType: NetDiskType | undefined) => { + if (!diskType) { + setHasBoundToken(false); + return; + } + const localStorageDAO = new LocalStorageDAO(); + const key = `netdisk:token:${diskType}`; + try { + const token = await localStorageDAO.getValue(key); + setHasBoundToken(!!token?.accessToken); + } catch { + setHasBoundToken(false); + } + }, []); + + const netDiskType = netDiskTypeMap[fileSystemType]; + + useEffect(() => { + checkTokenBound(netDiskType); + }, [netDiskType, checkTokenBound]); const fileSystemList: { key: FileSystemType; @@ -53,7 +78,6 @@ const FileSystemParams: React.FC<{ }, ]; - const netDiskType = netDiskTypeMap[fileSystemType]; const netDiskName = netDiskType ? fileSystemList.find((item) => item.key === fileSystemType)?.name : null; return ( @@ -74,13 +98,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)}`); From 2ad078fbddc95cc3234850d49db6c71f6fea5095 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 17 Mar 2026 11:36:21 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=E5=B0=86=20token=20?= =?UTF-8?q?=E6=A3=80=E6=9F=A5=E9=80=BB=E8=BE=91=E5=86=85=E8=81=9A=E5=88=B0?= =?UTF-8?q?=20auth.ts=EF=BC=8C=E9=99=8D=E4=BD=8E=20UI=20=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E8=80=A6=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/filesystem/auth.ts | 11 +++++++++++ src/pages/components/FileSystemParams/index.tsx | 15 ++++----------- 2 files changed, 15 insertions(+), 11 deletions(-) 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 f7a58e0ae..462536ee1 100644 --- a/src/pages/components/FileSystemParams/index.tsx +++ b/src/pages/components/FileSystemParams/index.tsx @@ -3,9 +3,8 @@ import { Button, Input, Message, Popconfirm, Select, Space } from "@arco-design/ 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 type { NetDiskType, Token } from "@Packages/filesystem/auth"; -import { LocalStorageDAO } from "@App/app/repo/localStorage"; +import { ClearNetDiskToken, HasNetDiskToken, netDiskTypeMap } from "@Packages/filesystem/auth"; +import type { NetDiskType } from "@Packages/filesystem/auth"; const FileSystemParams: React.FC<{ headerContent: React.ReactNode | string; @@ -32,14 +31,8 @@ const FileSystemParams: React.FC<{ setHasBoundToken(false); return; } - const localStorageDAO = new LocalStorageDAO(); - const key = `netdisk:token:${diskType}`; - try { - const token = await localStorageDAO.getValue(key); - setHasBoundToken(!!token?.accessToken); - } catch { - setHasBoundToken(false); - } + const bound = await HasNetDiskToken(diskType); + setHasBoundToken(bound); }, []); const netDiskType = netDiskTypeMap[fileSystemType]; From 14bfdfbd1ae38b1719733d1fb8177dd31a978faa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Tue, 17 Mar 2026 11:43:00 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20=E7=AE=80=E5=8C=96=20F?= =?UTF-8?q?ileSystemParams=20=E4=B8=AD=20token=20=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E7=9A=84=20useCallback?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/FileSystemParams/index.tsx | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/pages/components/FileSystemParams/index.tsx b/src/pages/components/FileSystemParams/index.tsx index 462536ee1..ebf74473a 100644 --- a/src/pages/components/FileSystemParams/index.tsx +++ b/src/pages/components/FileSystemParams/index.tsx @@ -1,10 +1,9 @@ -import React, { useCallback, useEffect, useState } 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, HasNetDiskToken, netDiskTypeMap } from "@Packages/filesystem/auth"; -import type { NetDiskType } from "@Packages/filesystem/auth"; const FileSystemParams: React.FC<{ headerContent: React.ReactNode | string; @@ -25,21 +24,15 @@ const FileSystemParams: React.FC<{ const { t } = useTranslation(); const [hasBoundToken, setHasBoundToken] = useState(false); - // 检查当前网盘类型是否已绑定 token - const checkTokenBound = useCallback(async (diskType: NetDiskType | undefined) => { - if (!diskType) { - setHasBoundToken(false); - return; - } - const bound = await HasNetDiskToken(diskType); - setHasBoundToken(bound); - }, []); - const netDiskType = netDiskTypeMap[fileSystemType]; useEffect(() => { - checkTokenBound(netDiskType); - }, [netDiskType, checkTokenBound]); + if (!netDiskType) { + setHasBoundToken(false); + return; + } + HasNetDiskToken(netDiskType).then(setHasBoundToken); + }, [netDiskType]); const fileSystemList: { key: FileSystemType;