调整手机端弹窗通知规则

This commit is contained in:
pllx
2026-05-05 21:57:24 +08:00
parent 64945a973e
commit 645fe2a830
4 changed files with 45 additions and 14 deletions
+32
View File
@@ -84,6 +84,34 @@ function shouldSkipToastForCurrentUser(toastNotification) {
return String(toastNotification.actor_username || "") === String(window.chatContext?.username || "");
}
/**
* 判断当前是否为手机浏览器视口。
*
* @returns {boolean}
*/
function isMobileToastViewport() {
return window.matchMedia?.("(max-width: 640px)")?.matches === true;
}
/**
* 手机端只隐藏无本人关联的公屏全局 Toast。
*
* @param {Record<string, any>} message 聊天消息载荷
* @param {Record<string, any>} toastNotification 右下角通知载荷
* @returns {boolean}
*/
function shouldHideGlobalToastOnMobile(message, toastNotification) {
if (!isMobileToastViewport() || message?.to_user !== '大家') {
return false;
}
const currentUsername = String(window.chatContext?.username || "");
const actorUsername = String(toastNotification?.actor_username || "");
const targetUsername = String(toastNotification?.target_username || "");
return actorUsername !== currentUsername && targetUsername !== currentUsername;
}
// ── 禁言逻辑 ──
function handleMutedEvent(e) {
const state = getState();
@@ -435,6 +463,10 @@ export function bindChatEvents() {
return;
}
if (shouldHideGlobalToastOnMobile(msg, t)) {
return;
}
window.chatToast?.show({
title: t.title || "通知",
message: t.message || "",
-13
View File
@@ -16,15 +16,6 @@ function dismissToast(card) {
window.setTimeout(() => card.remove(), 400);
}
/**
* 判断当前是否应在手机视口隐藏 Toast。
*
* @returns {boolean}
*/
function shouldHideToastOnMobile() {
return window.matchMedia?.("(max-width: 640px)")?.matches === true;
}
/**
* 关闭容器内所有 Toast 卡片。
*
@@ -92,10 +83,6 @@ function createChatToast(container) {
duration = 6000,
action = null,
}) {
if (shouldHideToastOnMobile()) {
return;
}
const card = document.createElement("div");
card.className = "chat-toast-card";
card.style.cssText = `
@@ -40,7 +40,16 @@
@media (max-width: 640px) {
#chat-toast-container {
display: none !important;
right: 12px !important;
bottom: calc(88px + env(safe-area-inset-bottom, 0px)) !important;
left: 12px !important;
align-items: stretch;
}
#chat-toast-container .chat-toast-card {
width: 100% !important;
min-width: 0 !important;
max-width: none !important;
}
}
</style>