diff --git a/Html/apps/static/js/chatbox.js b/Html/apps/static/js/chatbox.js index cab3b6b..8e13dbd 100644 --- a/Html/apps/static/js/chatbox.js +++ b/Html/apps/static/js/chatbox.js @@ -112,58 +112,71 @@ document.addEventListener('DOMContentLoaded', function () { // 滚动到最新消息 document.getElementById('chatbox').scrollTop = document.getElementById('chatbox').scrollHeight; }); + // 创建批准消息 + function createApproveMessage(element) { + const funcName = element.data.name; + + // 移除已存在的相同函数批准消息 + if (activeApprovals.hasOwnProperty(funcName)) { + document.querySelectorAll(`.approve-message[data-function="${funcName}"]`).forEach(el => el.remove()); + } + activeApprovals[funcName] = Date.now(); + + const requestMessage = document.createElement('div'); + requestMessage.className = 'chat-message server-message approve-message'; + requestMessage.setAttribute('data-function', funcName); + + const description = document.createElement('div'); + const argsDescription = JSON.stringify(element.data.args); + description.innerHTML = `Function: ${element.data.name}(${argsDescription || ''})`; + + const approveButton = document.createElement('button'); + approveButton.innerHTML = ''; + approveButton.data = element; + approveButton.className = 'approve-button'; + approveButton.onclick = function (event) { + socket.emit('message', JSON.stringify({ type: 'function', data: element })); + event.currentTarget.disabled = true; + event.currentTarget.classList.add('disabled'); + }; + + requestMessage.appendChild(description); + requestMessage.appendChild(approveButton); + + return requestMessage; + } + + // 获取聊天框元素 + function getChatbox() { + return document.getElementById('chatbox'); + } + + // 滚动聊天框到底部 + function scrollChatboxToBottom() { + const chatbox = getChatbox(); + chatbox.scrollTop = chatbox.scrollHeight; + } + socket.on('request_function', function(data){ try { console.log("request_function", data); - if (typeof data === 'string') { - data = JSON.parse(data); - } - if (typeof data === 'object') { - data = [data]; - } + // 统一数据格式为数组 + const requests = typeof data === 'string' ? JSON.parse(data) : data; + const requestArray = Array.isArray(requests) ? requests : [requests]; + cleanupExpiredApprovals();// 先清理一次过期记录 - for (let i = 0; i < data.length; i++) { - const element = data[i]; - const funcName = element.data.name; - - if (activeApprovals.hasOwnProperty(funcName)) { - // 如果存在,找到并移除之前的元素 - const existingElements = document.querySelectorAll(`.approve-message[data-function="${funcName}"]`); - existingElements.forEach(el => el.remove()); - } - activeApprovals[funcName] = Date.now(); - - const requestMessage = document.createElement('div'); - requestMessage.className = 'chat-message server-message approve-message'; - requestMessage.setAttribute('data-function', funcName); - - const description = document.createElement('div'); - const argsDescription = JSON.stringify(element.data.args); - if (argsDescription) { - description.innerHTML = `Function: ${element.data.name}(${argsDescription})`; - }else { - description.innerHTML = `Function: ${element.data.name}()`; - } - - const approveButton = document.createElement('button'); - approveButton.innerHTML = ''; - approveButton.data = element; - approveButton.className = 'approve-button'; - approveButton.onclick = function (event) { - console.log(element); - socket.emit('message', JSON.stringify({ type: 'function', data: element })); - event.currentTarget.disabled = true; - event.currentTarget.classList.add('disabled'); - }; - requestMessage.appendChild(description); - requestMessage.appendChild(approveButton); - - document.getElementById('chatbox').appendChild(requestMessage); - document.getElementById('chatbox').scrollTop = document.getElementById('chatbox').scrollHeight; - } - + + const chatbox = getChatbox(); + + // 批量处理所有请求 + requestArray.forEach(element => { + const approveMessage = createApproveMessage(element); + chatbox.appendChild(approveMessage); + }); + + scrollChatboxToBottom(); } catch (error) { - console.log(error) + console.error("Error handling request_function:", error); } }); socket.on('next_chapter', function (data) {