修改房间列表不刷新的bug
This commit is contained in:
1 parent
e1d6b6da18
commit
9ad7577e35
3 files changed
+36
-15
No files matched your search
+2
-1
@@ -50,7 +50,8 @@ import {
|
||||
* debug: 是否开启调试模式
|
||||
*/
|
||||
window.config = {
|
||||
wsAddress: '/ws',
|
||||
wsAddress: 'ws://127.0.0.1:8088',
|
||||
//wsAddress: '/ws',
|
||||
debug: true
|
||||
};
|
||||
|
||||
|
||||
+16
-6
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user