diff --git a/resources/js/chat-room/bank-modal.js b/resources/js/chat-room/bank-modal.js
index 47e7753..17d4356 100644
--- a/resources/js/chat-room/bank-modal.js
+++ b/resources/js/chat-room/bank-modal.js
@@ -94,6 +94,7 @@ export async function bankAction(type) {
return;
}
+ // 提交期间禁用按钮,避免连续点击重复发起同一笔存取款请求。
btnEl.disabled = true;
try {
const response = await fetch(`/bank/${type}`, {
@@ -112,6 +113,7 @@ export async function bankAction(type) {
inputEl.value = "";
await bankLoadInfo();
+ // 如果用户正停留在排行榜页,存取款成功后同步刷新当前页余额排名。
if (document.getElementById("bank-view-ranking")?.style.display !== "none") {
await fetchBankRanking(bankRankPage);
}
@@ -311,6 +313,7 @@ function syncRankingButtons(lastPage) {
* @returns {string}
*/
function renderRankingRow(user, index) {
+ // 排行榜接口每页 20 条,这里用当前页和页内索引还原全局名次。
const absoluteRank = (bankRankPage - 1) * 20 + index + 1;
let rankClass = "";
if (bankRankSort === "desc" && bankRankPage === 1) {
diff --git a/resources/js/chat-room/mobile-drawer.js b/resources/js/chat-room/mobile-drawer.js
index ddfdc1f..2543079 100644
--- a/resources/js/chat-room/mobile-drawer.js
+++ b/resources/js/chat-room/mobile-drawer.js
@@ -347,6 +347,7 @@ export function bindMobileDrawerControls() {
scheduleRenderMobileUserList();
});
+ // 只有名单抽屉打开时才立即重渲染,关闭状态下等下次打开再读取最新 onlineUsers。
window.addEventListener("chatroom:users-updated", () => {
if (mobileDrawerOpen === "users") {
renderMobileUserList();
diff --git a/resources/js/chat-room/preferences-status.js b/resources/js/chat-room/preferences-status.js
index 70b0e5d..d2d31e7 100644
--- a/resources/js/chat-room/preferences-status.js
+++ b/resources/js/chat-room/preferences-status.js
@@ -15,6 +15,7 @@ let blockMenuEventsBound = false;
* @returns {{blocked_system_senders:string[],sound_muted:boolean}}
*/
export function normalizeChatPreferences(raw, blockableSystemSenders = BLOCKABLE_SYSTEM_SENDERS) {
+ // 服务端或旧本地缓存可能包含已下架发送者,规整时只保留当前白名单。
const blocked = Array.isArray(raw?.blocked_system_senders)
? raw.blocked_system_senders.filter((sender) => blockableSystemSenders.includes(sender))
: [];
@@ -317,6 +318,7 @@ export function bindBlockMenuControls() {
* @returns {boolean}
*/
export function shouldMigrateLocalChatPreferences(serverPreferences, localBlockedSenders, localMuted) {
+ // 只有服务端尚无偏好时才迁移旧本地设置,避免覆盖已同步的账号配置。
const hasServerPreferences = (serverPreferences?.blocked_system_senders || []).length > 0
|| Boolean(serverPreferences?.sound_muted);
diff --git a/resources/js/chat-room/rooms.js b/resources/js/chat-room/rooms.js
index e25d939..584bc87 100644
--- a/resources/js/chat-room/rooms.js
+++ b/resources/js/chat-room/rooms.js
@@ -72,6 +72,7 @@ export function renderRoomStatusRow(room, options = {}) {
? '当前'
: '当前')
: "";
+ // 当前房间不生成跳转事件,避免重复进入同一房间触发无意义刷新。
const clickHandler = isCurrent ? "" : buildRoomClickHandler(room.id, options.roomUrlResolver);
const badge = room.online > 0
? `${room.online}${variant === "mobile" ? "" : " "}人`