fix: Neubewertungs-Button im Explorer hinzugefügt
This commit is contained in:
parent
a3e4dab633
commit
9615ddd51f
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { fetchKetten, fetchKette, fetchVorlage, type KetteKurz, type KetteDetail, type VorlageDetail, type Paginated } from '$lib/api';
|
import { fetchKetten, fetchKette, fetchVorlage, reevalVorlage, fetchJobStatus, type KetteKurz, type KetteDetail, type VorlageDetail, type Paginated } from '$lib/api';
|
||||||
import { formatDate, typLabel } from '$lib/status';
|
import { formatDate, typLabel } from '$lib/status';
|
||||||
import { filters, mergeFilterParams, filterVersion } from '$lib/filters.svelte';
|
import { filters, mergeFilterParams, filterVersion } from '$lib/filters.svelte';
|
||||||
import Ampel from '$lib/components/Ampel.svelte';
|
import Ampel from '$lib/components/Ampel.svelte';
|
||||||
@ -31,6 +31,40 @@
|
|||||||
let mobileTab = $state<'liste' | 'kette' | 'detail'>('liste');
|
let mobileTab = $state<'liste' | 'kette' | 'detail'>('liste');
|
||||||
let showVolltext = $state(false);
|
let showVolltext = $state(false);
|
||||||
let showVersionen = $state(false);
|
let showVersionen = $state(false);
|
||||||
|
let showReeval = $state(false);
|
||||||
|
let reevalAnmerkung = $state('');
|
||||||
|
let reevalStatus = $state<'idle' | 'running' | 'done' | 'error'>('idle');
|
||||||
|
let reevalError = $state('');
|
||||||
|
|
||||||
|
async function triggerReeval() {
|
||||||
|
if (!selectedVorlage) return;
|
||||||
|
reevalStatus = 'running';
|
||||||
|
reevalError = '';
|
||||||
|
try {
|
||||||
|
const { job_id } = await reevalVorlage(selectedVorlage.id, reevalAnmerkung);
|
||||||
|
for (let i = 0; i < 60; i++) {
|
||||||
|
await new Promise(r => setTimeout(r, 3000));
|
||||||
|
const status = await fetchJobStatus(job_id);
|
||||||
|
if (status.status === 'done') {
|
||||||
|
reevalStatus = 'done';
|
||||||
|
selectedVorlage = await fetchVorlage(selectedVorlage!.id);
|
||||||
|
showReeval = false;
|
||||||
|
reevalAnmerkung = '';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (status.status === 'error') {
|
||||||
|
reevalStatus = 'error';
|
||||||
|
reevalError = status.error || 'Unbekannter Fehler';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reevalStatus = 'error';
|
||||||
|
reevalError = 'Timeout nach 3 Minuten';
|
||||||
|
} catch (e) {
|
||||||
|
reevalStatus = 'error';
|
||||||
|
reevalError = e instanceof Error ? e.message : 'Fehler';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const STRANG_TABS = [
|
const STRANG_TABS = [
|
||||||
{ value: '', label: 'Alle' },
|
{ value: '', label: 'Alle' },
|
||||||
@ -489,6 +523,44 @@
|
|||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
|
<!-- Neu bewerten -->
|
||||||
|
<div class="rounded-xl border border-gray-200 p-4">
|
||||||
|
{#if !showReeval}
|
||||||
|
<button onclick={() => showReeval = true}
|
||||||
|
class="text-sm text-green-600 hover:text-green-800 font-medium flex items-center gap-1.5">
|
||||||
|
<span>🔄</span> Neu bewerten lassen
|
||||||
|
</button>
|
||||||
|
{:else}
|
||||||
|
<h3 class="text-sm font-semibold text-gray-900 mb-2">KI-Neubewertung anstoßen</h3>
|
||||||
|
<textarea bind:value={reevalAnmerkung} placeholder="Anmerkungen für die KI (optional)"
|
||||||
|
class="w-full border border-gray-300 rounded-lg px-3 py-2 text-sm mb-3 h-20 resize-y focus:ring-2 focus:ring-green-500"
|
||||||
|
disabled={reevalStatus === 'running'}></textarea>
|
||||||
|
<div class="flex gap-2 items-center">
|
||||||
|
<button onclick={triggerReeval} disabled={reevalStatus === 'running'}
|
||||||
|
class="bg-green-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:bg-green-700 disabled:opacity-50 transition-colors">
|
||||||
|
{#if reevalStatus === 'running'}
|
||||||
|
<span class="inline-flex items-center gap-2">
|
||||||
|
<span class="animate-spin h-4 w-4 border-2 border-white border-t-transparent rounded-full"></span>
|
||||||
|
KI bewertet…
|
||||||
|
</span>
|
||||||
|
{:else}
|
||||||
|
Bewertung starten
|
||||||
|
{/if}
|
||||||
|
</button>
|
||||||
|
{#if reevalStatus !== 'running'}
|
||||||
|
<button onclick={() => { showReeval = false; reevalStatus = 'idle'; }}
|
||||||
|
class="text-sm text-gray-500 hover:text-gray-700">Abbrechen</button>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
{#if reevalStatus === 'done'}
|
||||||
|
<p class="mt-2 text-sm text-green-700 font-medium">✅ Bewertung aktualisiert!</p>
|
||||||
|
{/if}
|
||||||
|
{#if reevalStatus === 'error'}
|
||||||
|
<p class="mt-2 text-sm text-red-600">❌ {reevalError}</p>
|
||||||
|
{/if}
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Volltext -->
|
<!-- Volltext -->
|
||||||
{#if selectedVorlage.volltext_clean}
|
{#if selectedVorlage.volltext_clean}
|
||||||
<div class="rounded-xl border border-gray-200 p-5">
|
<div class="rounded-xl border border-gray-200 p-5">
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user