Compare commits

...

2 Commits

View File

@@ -52,9 +52,7 @@
.user-message-text { background: #f0f0f0; padding: 12px 16px; border-radius: 12px; font-size: 15px; }
/* 消息操作按钮 */
.message-actions { display: flex; gap: 8px; margin-top: 8px; opacity: 0; transition: opacity 0.2s; }
.message-content:hover + .message-actions,
.message-actions:hover { opacity: 1; }
.message-actions { display: flex; gap: 8px; margin-top: 8px; }
.action-btn { padding: 6px 12px; background: #f5f5f5; border: 1px solid #e0e0e0; border-radius: 6px; cursor: pointer; font-size: 12px; color: #666; display: flex; align-items: center; gap: 4px; transition: all 0.2s; }
.action-btn:hover { background: #e8e8e8; border-color: #ccc; }
.action-btn.copied { color: #10a37f; border-color: #10a37f; background: #e8f5e9; }
@@ -173,6 +171,7 @@
let agents = [];
let quickPhrases = [];
let lastUserMessage = null; // 存储最后一条用户消息,用于重新生成
let isRegenerating = false; // 标志:正在重新生成,跳过用户消息显示
document.addEventListener('DOMContentLoaded', () => {
loadAgents();
@@ -242,7 +241,10 @@
case 'stream_end': document.getElementById('sendBtn').disabled = false; break;
case 'user_message':
lastUserMessage = data.message.content; // 存储最后一条用户消息
appendMessage('user', data.message.content);
if (!isRegenerating) {
appendMessage('user', data.message.content);
}
isRegenerating = false; // 重置标志
break;
case 'assistant_message': appendMessage('assistant', data.message.content, data.message.thinking_content, data.message.agent_name); document.getElementById('sendBtn').disabled = false; break;
case 'error': showError(data.message); document.getElementById('sendBtn').disabled = false; break;
@@ -315,24 +317,44 @@
function copyMessage(btn) {
// 从隐藏input获取原始内容
const hiddenInput = btn.closest('.message-body').querySelector('.copy-source');
const actionsDiv = btn.parentElement;
const messageBody = actionsDiv.parentElement;
const hiddenInput = messageBody.querySelector('.copy-source');
if (!hiddenInput) {
console.error('找不到复制源');
btn.innerHTML = '<i class="ri-error-line"></i> 失败';
return;
}
const text = hiddenInput.value;
navigator.clipboard.writeText(text).then(() => {
btn.innerHTML = '<i class="ri-check-line"></i> 已复制';
btn.classList.add('copied');
setTimeout(() => {
btn.innerHTML = '<i class="ri-file-copy-line"></i> 复制';
btn.classList.remove('copied');
}, 2000);
}).catch(err => {
// 使用传统复制方法(兼容性更好)
const textarea = document.createElement('textarea');
textarea.value = text;
textarea.style.position = 'fixed';
textarea.style.left = '-9999px';
textarea.style.top = '0';
document.body.appendChild(textarea);
textarea.focus();
textarea.select();
try {
const success = document.execCommand('copy');
if (success) {
btn.innerHTML = '<i class="ri-check-line"></i> 已复制';
btn.classList.add('copied');
setTimeout(() => {
btn.innerHTML = '<i class="ri-file-copy-line"></i> 复制';
btn.classList.remove('copied');
}, 2000);
} else {
btn.innerHTML = '<i class="ri-error-line"></i> 失败';
}
} catch (err) {
console.error('复制失败:', err);
btn.innerHTML = '<i class="ri-error-line"></i> 失败';
});
}
document.body.removeChild(textarea);
}
function regenerateMessage() {
@@ -340,6 +362,8 @@
alert('没有可重新生成的消息');
return;
}
// 设置重新生成标志,避免再次显示用户消息
isRegenerating = true;
// 移除最后一条助手消息
const container = document.getElementById('messagesContainer');
const messages = container.querySelectorAll('.message.assistant');