diff --git a/ui/static/index.html b/ui/static/index.html index 505199e..c729853 100644 --- a/ui/static/index.html +++ b/ui/static/index.html @@ -194,39 +194,7 @@ body { background: var(--surface-darken); } -.file-info { - display: none; - align-items: center; - gap: 6px; - font-size: 12px; - color: var(--text-muted); - background: var(--surface-darken); - padding: 3px 8px; - border-radius: 4px; -} -.file-info.attached { - display: inline-flex; -} - -.file-info-name { - color: var(--success); - max-width: 200px; - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -.file-info-remove { - cursor: pointer; - color: var(--accent); - font-weight: bold; - padding: 0 4px; -} - -.file-info-remove:hover { - color: var(--warning); -} .btn { padding: 6px 16px; @@ -635,10 +603,7 @@ body {
- - - - +
@@ -758,10 +723,6 @@ const closeHelpBtn = document.getElementById('closeHelp'); // File upload const fileInputEl = document.getElementById('fileInput'); const fileUploadBtn = document.getElementById('fileUploadBtn'); -const fileInfoEl = document.getElementById('fileInfo'); -const fileInfoNameEl = document.getElementById('fileInfoName'); -const fileInfoRemoveEl = document.getElementById('fileInfoRemove'); -let attachedFile = null; // Config inputs const apiKeyEl = document.getElementById('apiKey'); @@ -1036,8 +997,8 @@ function readFileAsText(file) { // Send Message async function sendMessage() { - let message = messageInputEl.value.trim(); - if (!message && !attachedFile) return; + const message = messageInputEl.value.trim(); + if (!message) return; // Check if API is configured if (apiStatusEl.textContent === '未配置') { @@ -1045,19 +1006,6 @@ async function sendMessage() { return; } - // If file is attached, read it and prepend to message - if (attachedFile) { - try { - const fileContent = await readFileAsText(attachedFile); - const fileBlock = `文件名:${attachedFile.name}\n内容:\n\`\`\`\n${fileContent}\n\`\`\``; - message = message ? `${fileBlock}\n\n${message}` : fileBlock; - } catch (e) { - updateLatestMessage(`❌ 文件读取失败: ${e.message}`); - return; - } - clearFile(); - } - // Add user message to UI addMessageToUI('user', message); messageInputEl.value = ''; @@ -1177,27 +1125,30 @@ function closeSidebar() { } // File upload helpers -function attachFile(file) { - attachedFile = file; - fileInfoNameEl.textContent = file.name; - fileInfoEl.classList.add('attached'); - fileUploadBtn.textContent = '📎 更换文件'; -} - -function clearFile() { - attachedFile = null; - fileInputEl.value = ''; - fileInfoEl.classList.remove('attached'); - fileUploadBtn.textContent = '📎 添加文件'; +function insertFileContent(file) { + readFileAsText(file).then(content => { + const block = `文件名:${file.name}\n内容:\n${content}`; + const current = messageInputEl.value; + const cursorPos = messageInputEl.selectionStart; + if (current.length === 0) { + messageInputEl.value = block; + } else { + // 插入到光标位置 + messageInputEl.value = current.slice(0, cursorPos) + block + '\n\n' + current.slice(cursorPos); + } + messageInputEl.focus(); + fileInputEl.value = ''; + }).catch(e => { + alert(`文件读取失败: ${e.message}`); + }); } fileUploadBtn.addEventListener('click', () => fileInputEl.click()); fileInputEl.addEventListener('change', () => { if (fileInputEl.files && fileInputEl.files[0]) { - attachFile(fileInputEl.files[0]); + insertFileContent(fileInputEl.files[0]); } }); -fileInfoRemoveEl.addEventListener('click', clearFile); // Event Listeners sendBtn.addEventListener('click', sendMessage);