修改房间列表不刷新的bug

This commit is contained in:
shuaiplus committed 2025-05-24 02:45:25 +08:00
1 parent e1d6b6da18
commit 9ad7577e35
3 files changed
+36 -15

No files matched your search

+2 -1
View File
@@ -50,7 +50,8 @@ import {
* debug: 是否开启调试模式
*/
window.config = {
wsAddress: '/ws',
wsAddress: 'ws://127.0.0.1:8088',
//wsAddress: '/ws',
debug: true
};
+16 -6
View File
@@ -48,8 +48,10 @@ export function switchRoom(index) {
setSidebarAvatar(rd.myUserName);
renderRooms(index);
// 先渲染头部信息
renderMainHeader();
renderUserList(); // 确保用户列表反映私聊状态
// 再渲染用户列表,不再重复更新头部
renderUserList(false);
renderChatArea();
updateChatInputStyle(); // 根据新房间更新输入框样式
}
@@ -185,9 +187,12 @@ export function handleClientList(idx, list, selfId) {
list.forEach(u => { rd.userMap[u.clientId] = u; });
rd.myId = selfId;
// 确保当前活动房间的界面刷新
if (activeRoomIndex === idx) {
renderUserList();
renderMainHeader(); // 刷新顶部信息栏
// 先渲染用户列表,不同时更新头部信息
renderUserList(false);
// 然后单独渲染头部信息
renderMainHeader();
}
// 初始化计数
@@ -225,8 +230,10 @@ export function handleClientSecured(idx, user) {
// 无论初始化状态如何,始终刷新当前房间UI
if (activeRoomIndex === idx) {
renderUserList();
renderMainHeader(); // 也刷新顶部信息栏
// 先渲染用户列表,不同时更新头部信息
renderUserList(false);
// 然后单独渲染头部信息
renderMainHeader();
}
// 仅在初始化完成后才处理加入提示
@@ -281,7 +288,10 @@ export function handleClientLeft(idx, clientId) {
delete rd.userMap[clientId];
if (activeRoomIndex === idx) {
renderUserList();
// 先渲染用户列表,不同时更新头部信息
renderUserList(false);
// 然后单独渲染头部信息
renderMainHeader();
}
}
+18 -8
View File
@@ -133,8 +133,9 @@ export function setupMobileUIHandlers() {
/**
* 渲染在线用户列表
* @param {boolean} updateHeader 是否同时更新房间信息头部
*/
export function renderUserList() {
export function renderUserList(updateHeader = false) {
const userListEl = $id('member-list');
userListEl.innerHTML = '';
@@ -147,7 +148,10 @@ export function renderUserList() {
if (me) userListEl.appendChild(createUserItem(me, true));
others.forEach(u => userListEl.appendChild(createUserItem(u, false)));
renderMainHeader(); // 在线用户变化时刷新
// 只在需要时更新房间头部信息,避免循环调用
if (updateHeader) {
renderMainHeader();
}
}
/**
@@ -165,13 +169,8 @@ export function createUserItem(user, isMe) {
// 兼容 userName/username/name
const rawName = user.userName || user.username || user.name || '';
const safeUserName = escapeHTML(rawName);
// 头像 SVG
const svg = createAvatarSVG(rawName);
// svg内容已经通过createAvatarSVG生成,通常是安全的
// 但为确保安全,仍应当清理任何可能的脚本内容
const cleanSvg = svg.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');
div.querySelector('.avatar').innerHTML = cleanSvg;
// 先设置 HTML 内容
div.innerHTML = `
<span class="avatar"></span>
<div class="member-info">
@@ -179,6 +178,17 @@ export function createUserItem(user, isMe) {
</div>
`;
// 然后找到头像元素并设置其内容
const avatarEl = div.querySelector('.avatar');
if (avatarEl) {
// 头像 SVG
const svg = createAvatarSVG(rawName);
// svg内容已经通过createAvatarSVG生成,通常是安全的
// 但为确保安全,仍应当清理任何可能的脚本内容
const cleanSvg = svg.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, '');
avatarEl.innerHTML = cleanSvg;
}
if (!isMe) {
div.onclick = () => togglePrivateChat(user.clientId, safeUserName);
}