diff --git a/src/views/chat/index.vue b/src/views/chat/index.vue index 58ad7cc..a1d0f23 100644 --- a/src/views/chat/index.vue +++ b/src/views/chat/index.vue @@ -39,7 +39,7 @@ + @keydown="handleInputKeydown" @paste="handlePaste" />
@@ -684,6 +684,46 @@ const handleImageChange = (e) => { e.target.value = '' } +// 处理粘贴发送图片 +const handlePaste = (e) => { + try { + const clipboard = e.clipboardData || window.clipboardData + if (!clipboard) return + const items = clipboard.items || [] + if (!items || items.length === 0) return + + // 收集剪贴板中的图片文件 + const imageFiles = [] + for (let i = 0; i < items.length; i++) { + const it = items[i] + if (it && it.kind === 'file') { + const file = it.getAsFile && it.getAsFile() + if (file && file.type && file.type.startsWith('image/')) { + imageFiles.push(file) + } + } + } + + if (imageFiles.length === 0) { + // 没有图片,保持默认粘贴文本行为 + return + } + + // 阻止默认插入到文本框,走图片发送逻辑 + e.preventDefault() + + // 如果有多张,只处理第一张并提示 + if (imageFiles.length > 1) { + ElMessage({ type: 'info', message: '一次仅发送第一张图片' }) + } + + // 使用现有上传发送流程 + uploadImageFile(imageFiles[0]) + } catch (err) { + // 失败时不影响默认粘贴行为 + } +} + // 拖拽事件处理 const handleDragEnter = (e) => { e.preventDefault()