fix: 修复右键菜单功能的多个逻辑漏洞

1. 修复时区硬编码问题 - 使用用户选择的时区而非固定 Asia/Shanghai
2. 修复 openPopup() 失败后数据残留 - 失败时清除 storage 中的待处理数据
3. 统一数据过期时间常量 - 导出 CONTEXT_MENU_DATA_EXPIRY_MS 并统一使用
4. 修复 featureKey 类型断言不安全 - 使用映射表处理非常规菜单 ID
This commit is contained in:
雨霖铃
2026-05-20 21:39:33 +08:00
parent e9a6fa3dd8
commit 0427f16cc9
5 changed files with 62 additions and 45 deletions
+7 -3
View File
@@ -14,7 +14,7 @@ import {
getDefaultPageOrder,
getDefaultVisibleFeatureKeys,
} from '@/config/features';
import { saveContextMenuData } from '@/utils/useContextMenuData';
import { saveContextMenuData, CONTEXT_MENU_DATA_EXPIRY_MS } from '@/utils/useContextMenuData';
/**
* 校验是否为合法的页面类型
@@ -215,7 +215,7 @@ export function RouterProvider({
if (
pendingData &&
isValidPage(pendingData.featureKey) &&
Date.now() - pendingData.timestamp < 5000
Date.now() - pendingData.timestamp < CONTEXT_MENU_DATA_EXPIRY_MS
) {
navigateTo(pendingData.featureKey as PageType);
// 不在这里清除数据,让目标页面的 useContextMenuData 来消费和清除
@@ -292,7 +292,11 @@ export function RouterProvider({
if (changes['contextMenu/pendingData']) {
const newData = changes['contextMenu/pendingData']
.newValue as ContextMenuPendingData | null;
if (newData && isValidPage(newData.featureKey) && Date.now() - newData.timestamp < 5000) {
if (
newData &&
isValidPage(newData.featureKey) &&
Date.now() - newData.timestamp < CONTEXT_MENU_DATA_EXPIRY_MS
) {
setCurrentPage(newData.featureKey as PageType);
}
}