Compare commits
1 Commits
439db8117a
...
5cab15422d
| Author | SHA1 | Date | |
|---|---|---|---|
| 5cab15422d |
+22
-6
@@ -132,6 +132,7 @@
|
|||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, onMounted } from 'vue'
|
import { ref, computed, onMounted } from 'vue'
|
||||||
import { useDocuments } from '~/composables/useDocuments'
|
import { useDocuments } from '~/composables/useDocuments'
|
||||||
|
import { useApi } from '~/composables/useApi'
|
||||||
import { useUrlState } from '~/composables/useUrlState'
|
import { useUrlState } from '~/composables/useUrlState'
|
||||||
import { getFileIcon } from '~/utils/fileIcons'
|
import { getFileIcon } from '~/utils/fileIcons'
|
||||||
import { canPreviewDocument } from '~/utils/documentPreview'
|
import { canPreviewDocument } from '~/utils/documentPreview'
|
||||||
@@ -140,6 +141,7 @@ import DocumentPreviewModal from '~/components/DocumentPreviewModal.vue'
|
|||||||
import IconLucideFileSearch from '~icons/lucide/file-search'
|
import IconLucideFileSearch from '~icons/lucide/file-search'
|
||||||
|
|
||||||
const { documents, loading, loadDocuments } = useDocuments()
|
const { documents, loading, loadDocuments } = useDocuments()
|
||||||
|
const { get } = useApi()
|
||||||
|
|
||||||
const { q: searchTerm, filter: attachmentFilter } = useUrlState({
|
const { q: searchTerm, filter: attachmentFilter } = useUrlState({
|
||||||
q: { default: '', debounce: 300 },
|
q: { default: '', debounce: 300 },
|
||||||
@@ -195,22 +197,36 @@ const formatSize = (size) => {
|
|||||||
|
|
||||||
const documentIcon = doc => getFileIcon({ name: doc.filename || doc.name, mime: doc.mimeType })
|
const documentIcon = doc => getFileIcon({ name: doc.filename || doc.name, mime: doc.mimeType })
|
||||||
|
|
||||||
const downloadDocument = (doc) => {
|
/** Fetch the full document (with path) from the API on demand. */
|
||||||
if (!doc?.path) { return }
|
const fetchDocumentPath = async (doc) => {
|
||||||
|
if (doc?.path) { return doc.path }
|
||||||
|
if (!doc?.id) { return null }
|
||||||
|
const result = await get(`/documents/${doc.id}`)
|
||||||
|
if (result.success && result.data?.path) {
|
||||||
|
doc.path = result.data.path
|
||||||
|
return result.data.path
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
if (doc.path.startsWith('data:')) {
|
const downloadDocument = async (doc) => {
|
||||||
|
const path = await fetchDocumentPath(doc)
|
||||||
|
if (!path) { return }
|
||||||
|
|
||||||
|
if (path.startsWith('data:')) {
|
||||||
const link = document.createElement('a')
|
const link = document.createElement('a')
|
||||||
link.href = doc.path
|
link.href = path
|
||||||
link.download = doc.filename || doc.name || 'document'
|
link.download = doc.filename || doc.name || 'document'
|
||||||
link.click()
|
link.click()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
window.open(doc.path, '_blank')
|
window.open(path, '_blank')
|
||||||
}
|
}
|
||||||
|
|
||||||
const openPreview = (doc) => {
|
const openPreview = async (doc) => {
|
||||||
if (!canPreviewDocument(doc)) { return }
|
if (!canPreviewDocument(doc)) { return }
|
||||||
|
await fetchDocumentPath(doc)
|
||||||
previewDocument.value = doc
|
previewDocument.value = doc
|
||||||
previewVisible.value = true
|
previewVisible.value = true
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user