From 3192f046ed51ad80aa2ce7bc563af60f0b093c2f Mon Sep 17 00:00:00 2001 From: gujiangjiang Date: Fri, 10 Oct 2025 04:46:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4=E5=B7=B2=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=82=AE=E7=AE=B1=E6=97=B6=E5=90=8C=E6=AD=A5=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=90=8E=E7=AB=AF=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/components/MailboxSwitcher.tsx | 40 +++++++++++++++++---- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/frontend/src/components/MailboxSwitcher.tsx b/frontend/src/components/MailboxSwitcher.tsx index 27a665c..58e0e88 100644 --- a/frontend/src/components/MailboxSwitcher.tsx +++ b/frontend/src/components/MailboxSwitcher.tsx @@ -1,5 +1,7 @@ import React, { useState, useRef, useEffect } from 'react'; import { useTranslation } from 'react-i18next'; +// [feat]: 导入 deleteMailbox API 函数 +import { deleteMailbox as apiDeleteMailbox } from '../utils/api'; interface MailboxSwitcherProps { currentMailbox: Mailbox; @@ -103,20 +105,44 @@ const MailboxSwitcher: React.FC = ({ setShowDropdown(false); }; - // 删除单个已保存的邮箱 - const handleDeleteMailbox = (address: string) => { + // 删除单个已保存的邮箱(包括后端) + const handleDeleteMailbox = async (address: string) => { if (window.confirm(t('mailbox.confirmDeleteMailbox'))) { - const updatedMailboxes = savedMailboxes.filter(m => m.address !== address); - setSavedMailboxes(updatedMailboxes); - localStorage.setItem('savedMailboxes', JSON.stringify(updatedMailboxes)); + // 调用API删除后端的邮箱 + const result = await apiDeleteMailbox(address); + if (result.success) { + // 从前端列表和localStorage中移除 + const updatedMailboxes = savedMailboxes.filter(m => m.address !== address); + setSavedMailboxes(updatedMailboxes); + localStorage.setItem('savedMailboxes', JSON.stringify(updatedMailboxes)); + } else { + // 如果删除失败,可以给用户一个提示 + alert(t('mailbox.deleteFailed')); + } } }; - // 清空所有已保存的邮箱 - const handleClearAllMailboxes = () => { + // [feat]: 清空所有已保存的邮箱(包括后端数据) + const handleClearAllMailboxes = async () => { if (window.confirm(t('mailbox.confirmClearAllMailboxes'))) { + // 找出所有需要删除的邮箱(即列表中,非当前正在使用的邮箱) + const mailboxesToDelete = savedMailboxes.filter(m => m.address !== currentMailbox.address); + + // 如果没有需要删除的,直接返回 + if(mailboxesToDelete.length === 0) { + setShowDropdown(false); + return; + } + + // 并行执行所有后端删除请求 + const deletePromises = mailboxesToDelete.map(m => apiDeleteMailbox(m.address)); + await Promise.all(deletePromises); + + // 从前端列表中只保留当前使用的邮箱 const currentMailboxToKeep = savedMailboxes.find(m => m.address === currentMailbox.address); const mailboxesToKeep = currentMailboxToKeep ? [currentMailboxToKeep] : []; + + // 更新UI和localStorage setSavedMailboxes(mailboxesToKeep); localStorage.setItem('savedMailboxes', JSON.stringify(mailboxesToKeep)); setShowDropdown(false);