diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue index a5089e8a..5e328ee7 100644 --- a/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue @@ -130,6 +130,49 @@ function handleRemove(file: UploadFile) { fileList.value.splice(index, 1); } +// Handle paste event for reference images +function handlePaste(event: ClipboardEvent) { + const items = event.clipboardData?.items; + if (!items) return; + + for (const item of items) { + if (item.type.startsWith('image/')) { + event.preventDefault(); + + if (fileList.value.length >= 2) { + ElMessage.warning('最多只能上传2张参考图'); + return; + } + + const file = item.getAsFile(); + if (!file) return; + + // Check file size + const isLt5M = file.size / 1024 / 1024 < 5; + if (!isLt5M) { + ElMessage.error('图片大小不能超过 5MB!'); + return; + } + + // Create object URL for preview + const url = URL.createObjectURL(file); + const filename = `pasted-image-${Date.now()}.${file.type.split('/')[1] || 'png'}`; + + const uploadFile: UploadUserFile = { + name: filename, + url, + raw: file, + uid: Date.now(), + status: 'ready', + }; + + fileList.value.push(uploadFile); + ElMessage.success('已粘贴图片'); + break; // Only handle the first image + } + } +} + function fileToBase64(file: File): Promise { return new Promise((resolve, reject) => { const reader = new FileReader(); @@ -356,10 +399,14 @@ defineExpose({ onMounted(() => { fetchTokens(); fetchModels(); + // Add paste event listener for reference images + document.addEventListener('paste', handlePaste); }); onUnmounted(() => { stopPolling(); + // Remove paste event listener + document.removeEventListener('paste', handlePaste); }); @@ -474,7 +521,7 @@ onUnmounted(() => {
- 最多2张,< 5MB (支持 JPG/PNG/WEBP) + 最多2张,< 5MB (支持 JPG/PNG/WEBP,可粘贴)