feat: füge Importfunktion für Spielpläne von myTischtennis hinzu und verbessere den Ladevorgang
This commit is contained in:
@@ -6,6 +6,13 @@
|
||||
Spielpläne bearbeiten
|
||||
</h2>
|
||||
<div class="space-x-3">
|
||||
<button
|
||||
:disabled="isImporting"
|
||||
class="inline-flex items-center px-3 py-1.5 sm:px-4 sm:py-2 rounded-lg bg-blue-600 text-white hover:bg-blue-700 text-sm sm:text-base disabled:bg-blue-300"
|
||||
@click="importFromMyTischtennis"
|
||||
>
|
||||
{{ isImporting ? 'Importiert...' : 'Von myTischtennis importieren' }}
|
||||
</button>
|
||||
<button
|
||||
class="inline-flex items-center px-3 py-1.5 sm:px-4 sm:py-2 rounded-lg bg-green-600 text-white hover:bg-green-700 text-sm sm:text-base"
|
||||
@click="showUploadModal = true"
|
||||
@@ -343,6 +350,7 @@ const fileInput = ref(null)
|
||||
const modalFileInput = ref(null)
|
||||
const showUploadModal = ref(false)
|
||||
const isProcessing = ref(false)
|
||||
const isImporting = ref(false)
|
||||
const processingMessage = ref('')
|
||||
const isDragOver = ref(false)
|
||||
const currentFile = ref(null)
|
||||
@@ -410,18 +418,37 @@ const save = async () => {
|
||||
} catch (error) { console.error('Fehler:', error); alert('Fehler beim Speichern!') }
|
||||
}
|
||||
|
||||
const loadCurrentSpielplan = async () => {
|
||||
try {
|
||||
const response = await fetch('/api/spielplan')
|
||||
if (!response.ok) return
|
||||
const result = await response.json()
|
||||
if (!result.success || !Array.isArray(result.headers) || !Array.isArray(result.data)) return
|
||||
csvHeaders.value = result.headers
|
||||
csvData.value = result.data.map(row => csvHeaders.value.map(header => row[header] || ''))
|
||||
selectedColumns.value = new Array(csvHeaders.value.length).fill(true)
|
||||
currentFile.value = { name: result.season ? `spielplan-${result.season}.json` : 'spielplan.csv', entries: csvData.value.length, lastModified: null }
|
||||
} catch { /* ignore */ }
|
||||
}
|
||||
|
||||
const importFromMyTischtennis = async () => {
|
||||
if (!confirm('Spielplan jetzt direkt von myTischtennis aktualisieren?')) return
|
||||
isImporting.value = true
|
||||
try {
|
||||
const response = await fetch('/api/cms/import-spielplan', { method: 'POST' })
|
||||
const result = await response.json()
|
||||
if (!response.ok || !result.success) throw new Error(result.statusMessage || result.message || 'Import fehlgeschlagen')
|
||||
await loadCurrentSpielplan()
|
||||
alert(result.message || 'Spielplan erfolgreich aktualisiert.')
|
||||
} catch (error) {
|
||||
console.error('Spielplan-Import fehlgeschlagen:', error)
|
||||
alert(`Fehler beim Import: ${error.message || 'Unbekannter Fehler'}`)
|
||||
} finally {
|
||||
isImporting.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const closeUploadModal = () => { showUploadModal.value = false; selectedFile.value = null; if (modalFileInput.value) modalFileInput.value.value = '' }
|
||||
|
||||
onMounted(() => {
|
||||
(async () => {
|
||||
try {
|
||||
const response = await fetch('/api/spielplan'); if (!response.ok) return
|
||||
const result = await response.json(); if (!result.success || !Array.isArray(result.headers) || !Array.isArray(result.data)) return
|
||||
csvHeaders.value = result.headers
|
||||
csvData.value = result.data.map(row => csvHeaders.value.map(header => row[header] || ''))
|
||||
selectedColumns.value = new Array(csvHeaders.value.length).fill(true)
|
||||
currentFile.value = { name: result.season ? `spielplan-${result.season}.json` : 'spielplan.csv', entries: csvData.value.length, lastModified: null }
|
||||
} catch { /* ignore */ }
|
||||
})()
|
||||
})
|
||||
onMounted(loadCurrentSpielplan)
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user