let currentOffset = 0; const limit = 50; let currentView = 'groups'; let currentGroupId = null; // 页面加载时初始化 document.addEventListener('DOMContentLoaded', function () { loadStatistics(); loadGroupMessages(); loadMessages(); }); // 加载统计信息 async function loadStatistics() { try { const response = await fetch('api/statistics'); const data = await response.json(); if (data) { const stats = data; document.getElementById('userCount').textContent = stats.user_count; document.getElementById('groupCount').textContent = stats.group_count; document.getElementById('messageCount').textContent = stats.message_count; document.getElementById('fileCount').textContent = stats.file_count; } } catch (error) { console.error('加载统计信息失败:', error); } } // 加载按群组分组的消息统计 async function loadGroupMessages() { try { const response = await fetch('api/groups'); const data = await response.json(); const groupList = document.getElementById('groupList'); if (data.success) { const groups = data.groups || []; groupList.innerHTML = ''; if (groups.length === 0) { groupList.innerHTML = '
  • 暂无群组
  • '; return; } else { currentGroupId = groups[0].id; } groups.forEach(group => { const li = document.createElement('li'); li.className = 'group-item'; li.setAttribute('data-group-id', group.id); li.onclick = () => selectGroup(group.id); const groupName = document.createElement('div'); groupName.className = 'group-name'; groupName.textContent = group.name || group.id; const groupInfo = document.createElement('div'); groupInfo.className = 'group-info'; groupInfo.innerHTML = ` 创建者: ${group.owner || '未知'} `; li.appendChild(groupName); li.appendChild(groupInfo); groupList.appendChild(li); }); // 默认选择第一个群组 if (currentView === 'groups' && groups.length > 0) { selectGroup(groups[0].id); } } else { groupList.innerHTML = '
  • 加载失败
  • '; } } catch (error) { console.error('加载群组消息失败:', error); } } // 选择群组 function selectGroup(groupId) { currentGroupId = groupId; currentOffset = 0; // 更新选中状态 document.querySelectorAll('.group-item').forEach(item => { item.classList.remove('active'); }); // 找到对应的群组项并添加选中状态 document.querySelectorAll('.group-item').forEach(item => { // 使用data-group-id属性来准确匹配群组 if (item.getAttribute('data-group-id') === groupId) { item.classList.add('active'); // 更新群组信息 document.getElementById('currentGroup').textContent = item.querySelector('.group-name').textContent; document.getElementById('messageCountDisplay').textContent = '消息数量: 加载中...'; document.getElementById('latestTime').textContent = '最新消息: 加载中...'; } }); // 加载该群组的消息 loadMessages(); // 加载统计信息 loadStatistics(); } // 加载更多消息 async function loadMoreMessages() { await loadMessages(); } // 关闭聊天记录模态框 function closeChatRecordModal() { document.getElementById('chatRecordModal').style.display = 'none'; } // 显示聊天记录模态框 function showChatRecordModal(chatrecordData) { const modal = document.getElementById('chatRecordModal'); const title = document.getElementById('modalTitle'); const content = document.getElementById('chatRecordContent'); // 设置模态框标题 if (chatrecordData.chatrecord && chatrecordData.chatrecord.title) { title.textContent = chatrecordData.chatrecord.title; } else { title.textContent = '聊天记录'; } // 渲染聊天记录内容 renderChatRecordContent(chatrecordData, content); modal.style.display = 'block'; } // 渲染聊天记录内容 function renderChatRecordContent(chatrecordData, contentElement) { try { if (!chatrecordData.chatrecord || !chatrecordData.chatrecord.item) { contentElement.innerHTML = '
    聊天记录数据格式错误
    '; return; } const chatItems = chatrecordData.chatrecord.item; if (!Array.isArray(chatItems) || chatItems.length === 0) { contentElement.innerHTML = '
    暂无聊天记录内容
    '; return; } let html = ''; chatItems.forEach(item => { // 处理不同类型的聊天记录项 let contentHtml = ''; if (item.type === 'ChatRecordText') { // 文本消息 try { const contentData = JSON.parse(item.content); contentHtml = contentData.content || item.content || ''; } catch (e) { contentHtml = item.content || ''; } } else if (item.type === 'ChatRecordImage') { // 图片消息 contentHtml = '
    [图片消息]
    '; } else { // 其他类型消息 contentHtml = `[${item.type}] ${item.content || ''}`; } html += `
    ${item.from_chatroom ? '群聊' : '私聊'}
    ${contentHtml}
    ${new Date(item.msgtime * 1000).toLocaleString()}
    `; }); contentElement.innerHTML = html; } catch (error) { console.error('渲染聊天记录失败:', error); contentElement.innerHTML = '
    渲染聊天记录失败: ' + error.message + '
    '; } } // 加载消息 async function loadMessages() { try { const chatMessages = document.getElementById('chatMessages'); if (!currentGroupId) { chatMessages.innerHTML = '
    暂无消息
    '; return; } let url = `api/group_messages?limit=${limit}&offset=${currentOffset}&group_id=${currentGroupId}`; const response = await fetch(url); const data = await response.json(); if (data.success) { const messages = data.messages || []; if (messages.length === 0) { if (currentOffset === 0) { chatMessages.innerHTML = '
    暂无消息
    '; } document.getElementById('messageCountDisplay').textContent = `消息数量: ${data.total || 0}`; document.getElementById('latestTime').textContent = `最新消息: ${data.lastest_time || '暂无'}`; return; } // 如果是第一次加载(offset=0),清空消息区域 if (currentOffset === 0) { chatMessages.innerHTML = ''; } // 将新消息插入到消息区域的开头(向上加载历史消息) messages.forEach(message => { const messageDiv = createMessageElement(message); chatMessages.insertBefore(messageDiv, chatMessages.firstChild); }); // 更新偏移量,用于下次加载更多 currentOffset += limit; document.getElementById('messageCountDisplay').textContent = `消息数量: ${data.total || 0}`; document.getElementById('latestTime').textContent = `最新消息: ${data.lastest_time || '暂无'}`; } else { chatMessages.innerHTML = '
    加载消息失败
    '; } } catch (error) { console.error('加载消息失败:', error); document.getElementById('chatMessages').innerHTML = '
    加载消息失败: ' + error.message + '
    '; } } // 创建消息元素 function createMessageElement(message) { const messageDiv = document.createElement('div'); messageDiv.className = 'message'; // 判断是否为自己的消息 if (message.is_own) { messageDiv.classList.add('own'); } const avatar = document.createElement('div'); avatar.className = 'avatar'; avatar.textContent = message.sender_name ? message.sender_name.charAt(0).toUpperCase() : 'U'; const contentDiv = document.createElement('div'); contentDiv.className = 'message-content'; const senderDiv = document.createElement('div'); senderDiv.className = 'message-sender'; senderDiv.textContent = message.sender_name || '未知用户'; const textDiv = document.createElement('div'); textDiv.className = 'message-text'; // 处理消息内容 if (message.content) { if (message.type === 'chatrecord' && message.chatrecord_data) { const chatrecordBtn = document.createElement('button'); chatrecordBtn.className = 'chatrecord-btn'; chatrecordBtn.textContent = message.display_content || '[聊天记录]'; chatrecordBtn.onclick = () => showChatRecordModal(message.chatrecord_data); textDiv.appendChild(chatrecordBtn); } else { textDiv.textContent = message.display_content; } } else { textDiv.textContent = '[空消息]'; } const timeDiv = document.createElement('div'); timeDiv.className = 'message-time'; timeDiv.textContent = message.formatted_time; contentDiv.appendChild(senderDiv); contentDiv.appendChild(textDiv); contentDiv.appendChild(timeDiv); messageDiv.appendChild(avatar); messageDiv.appendChild(contentDiv); return messageDiv; } // 点击模态框外部关闭 window.onclick = function (event) { const modal = document.getElementById('chatRecordModal'); if (event.target === modal) { modal.style.display = 'none'; } }