fix: ZIP-Download, Share-Status live aktualisieren, Ordner-ZIP bei Share-Links

ZIP-Download fix:
- window.location.href statt a.download fuer API-Downloads
  (a.download funktioniert nicht mit authentifizierten API-Routen)

Share-Status live:
- Dateiliste wird nach jeder Share-Aenderung automatisch neu geladen
  (Link erstellen, Link loeschen, Benutzer-Freigabe setzen/entfernen)
- Gruenes Share-Icon aktualisiert sich sofort ohne F5

Ordner-ZIP bei Share-Links:
- "Ganzen Ordner als ZIP herunterladen" Button bei read/write Ordner-Shares
- Backend: GET /share/<token>/download-zip mit Passwort + Ablauf-Check
- Benachrichtigung an Ersteller bei ZIP-Download

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Stefan Hacker
2026-04-11 20:35:30 +02:00
parent 1a831bfb04
commit 4b487974c6
3 changed files with 52 additions and 6 deletions
+5 -5
View File
@@ -500,11 +500,7 @@ async function createFolder() {
}
function downloadFile(data) {
const url = filesStore.downloadUrl(data.id)
const a = document.createElement('a')
a.href = url
a.download = data.name
a.click()
window.location.href = filesStore.downloadUrl(data.id)
}
function openRename(data) {
@@ -574,6 +570,7 @@ async function shareWithUser() {
selectedShareUser.value = null
const res = await apiClient.get(`/files/${shareFile.value.id}/permissions`)
filePermissions.value = res.data
await filesStore.loadFiles(currentParentId())
} catch (err) {
toast.add({ severity: 'error', summary: 'Fehler', detail: err.response?.data?.error, life: 5000 })
}
@@ -584,6 +581,7 @@ async function removeUserShare(permId) {
try {
await apiClient.delete(`/files/${shareFile.value.id}/permissions/${permId}`)
filePermissions.value = filePermissions.value.filter(p => p.id !== permId)
await filesStore.loadFiles(currentParentId())
} catch (err) {
toast.add({ severity: 'error', summary: 'Fehler', detail: err.response?.data?.error, life: 5000 })
}
@@ -607,6 +605,7 @@ async function createShare() {
shareExpiry.value = ''
shareLinkPermission.value = 'read'
toast.add({ severity: 'success', summary: 'Link erstellt', life: 3000 })
await filesStore.loadFiles(currentParentId())
} catch (err) {
console.error('createShare error:', err)
toast.add({ severity: 'error', summary: 'Fehler', detail: err.response?.data?.error || String(err), life: 5000 })
@@ -624,6 +623,7 @@ async function removeShare(token) {
try {
await filesStore.deleteShareLink(token)
shareLinks.value = shareLinks.value.filter(l => l.token !== token)
await filesStore.loadFiles(currentParentId())
} catch (err) {
toast.add({ severity: 'error', summary: 'Fehler', detail: err.response?.data?.error, life: 5000 })
}