diff --git a/src/views/CharacterDetailView.vue b/src/views/CharacterDetailView.vue index 5a78ce5..e92947b 100644 --- a/src/views/CharacterDetailView.vue +++ b/src/views/CharacterDetailView.vue @@ -64,6 +64,34 @@ const handleUseInGeneration = () => { bulkSelectedAssetIds.value = [] } +const downloadImage = (url, name) => { + fetch(url) + .then(response => response.blob()) + .then(blob => { + const blobUrl = window.URL.createObjectURL(blob); + const link = document.createElement('a'); + link.href = blobUrl; + link.download = name || 'image.webp'; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + window.URL.revokeObjectURL(blobUrl); + }) + .catch(e => console.error('Download failed', e)); +} + +const handleDownloadResults = () => { + if (!generatedResult.value) return + + if (generatedResult.value.type === 'assets') { + generatedResult.value.assets.forEach(asset => { + downloadImage(API_URL + asset.url, asset.name + '.webp') + }) + } else if (generatedResult.value.type === 'image') { + downloadImage(generatedResult.value.url, 'generated_image.webp') + } +} + const loadData = async () => { loading.value = true const charId = route.params.id @@ -570,7 +598,8 @@ const handleLogout = () => {

Result

-
@@ -578,12 +607,14 @@ const handleLogout = () => {
+ @click="openModal(asset)" + class="h-80 rounded-xl overflow-hidden border border-white/10 shadow-xl aspect-[9/16] bg-black/20 cursor-pointer hover:border-violet-500/50 hover:scale-[1.01] transition-all duration-300">
+ @click="openModal({ url: generatedResult.url, name: 'Generated Image', type: 'IMAGE' })" + class="flex-1 rounded-xl overflow-hidden border border-white/10 shadow-xl cursor-pointer hover:border-violet-500/50 transition-all duration-300">