From a8513120e5b6068c69f2c93b5ff7d99353333806 Mon Sep 17 00:00:00 2001 From: LanQin Date: Sat, 20 Jun 2026 23:52:59 +0800 Subject: [PATCH] =?UTF-8?q?refactor(web):=20=E4=BC=98=E5=8C=96=E4=BE=A7?= =?UTF-8?q?=E8=BE=B9=E6=A0=8F=E4=B8=8E=E9=82=AE=E4=BB=B6=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E4=BA=A4=E4=BA=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 关闭移动端侧边栏在路由切换后的残留打开状态。 - 补充 `SheetContent` 的可访问性描述配置,避免无效告警。 - 统一邮件收件人渲染的空值处理,防止数组为空时异常。 - 渲染纯文本邮件内容时转义 HTML,提升展示安全性。 --- apps/web/src/components/protected-layout.tsx | 10 ++++++++++ apps/web/src/components/ui/sidebar.tsx | 1 + apps/web/src/pages/admin.tsx | 6 +++--- apps/web/src/pages/mail.tsx | 4 ++-- apps/web/src/pages/profile.tsx | 2 +- 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/apps/web/src/components/protected-layout.tsx b/apps/web/src/components/protected-layout.tsx index 5468321..11ccc66 100644 --- a/apps/web/src/components/protected-layout.tsx +++ b/apps/web/src/components/protected-layout.tsx @@ -133,6 +133,16 @@ function ProtectedContent() { function AdminSectionItems({ activeSection }: { activeSection: string }) { const { isMobile, setOpenMobile } = useSidebar() + const location = useLocation() + const locationKey = `${location.pathname}${location.search}` + const previousLocationKey = React.useRef(locationKey) + + React.useEffect(() => { + const previous = previousLocationKey.current + previousLocationKey.current = locationKey + if (isMobile && previous !== locationKey) setOpenMobile(false) + }, [isMobile, locationKey, setOpenMobile]) + function closeMobile() { if (isMobile) setOpenMobile(false) } diff --git a/apps/web/src/components/ui/sidebar.tsx b/apps/web/src/components/ui/sidebar.tsx index d084769..b3ebdca 100644 --- a/apps/web/src/components/ui/sidebar.tsx +++ b/apps/web/src/components/ui/sidebar.tsx @@ -208,6 +208,7 @@ const Sidebar = React.forwardRef< } as React.CSSProperties } side={side} + aria-describedby={undefined} > 导航 diff --git a/apps/web/src/pages/admin.tsx b/apps/web/src/pages/admin.tsx index 5d25f5c..36acd85 100644 --- a/apps/web/src/pages/admin.tsx +++ b/apps/web/src/pages/admin.tsx @@ -472,7 +472,7 @@ function AdminMessagesSection({ mailboxes }: { mailboxes: MailboxType[] }) {
邮箱:{message.mailboxAddress || message.recipientAddress || "-"}
发件人:{adminSenderDisplayName(message)}
-
收件人:{message.recipientAddress || message.to.join(", ")}
+
收件人:{message.recipientAddress || message.to?.join(", ") || ""}
{folderName(message.folder)} @@ -506,7 +506,7 @@ function AdminMessagesSection({ mailboxes }: { mailboxes: MailboxType[] }) { {message.ownerEmail &&
{message.ownerEmail}
} {adminSenderDisplayName(message)} - {message.recipientAddress || message.to.join(", ")} + {message.recipientAddress || message.to?.join(", ") || ""} {folderName(message.folder)} {formatDate(message.receivedAt)} @@ -848,7 +848,7 @@ function AdminMessageDialog({ message, loading, open, onOpenChange }: { message? - +
diff --git a/apps/web/src/pages/mail.tsx b/apps/web/src/pages/mail.tsx index bb07857..485074d 100644 --- a/apps/web/src/pages/mail.tsx +++ b/apps/web/src/pages/mail.tsx @@ -737,7 +737,7 @@ export function MailPage() {
-
${selected.bodyText || ""}`) }} /> +
${escapeHtml(selected.bodyText || "")}`) }} /> {selected.attachments && selected.attachments.length > 0 &&
附件
{selected.attachments.map((a) => {a.filename}{formatBytes(a.sizeBytes)})}
}
@@ -758,7 +758,7 @@ export function MailPage() { - + 邮箱导航
{sidebarContent}
diff --git a/apps/web/src/pages/profile.tsx b/apps/web/src/pages/profile.tsx index 8c200f7..f25e60b 100644 --- a/apps/web/src/pages/profile.tsx +++ b/apps/web/src/pages/profile.tsx @@ -234,7 +234,7 @@ export function ProfilePage() { - + 个人中心导航
{sidebarContent}