Sidebar: Abbrechen/Reset für laufende und pausierte Generierungen immer erreichbar

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
team3
2026-06-12 09:43:32 +02:00
parent bc7c2c8b40
commit cfc666055c

View File

@@ -166,6 +166,9 @@ function handleDelete(format) {
) )
if (running.length) { if (running.length) {
for (const g of running) emit('cancelGuide', g.id) for (const g of running) emit('cancelGuide', g.id)
} else if (abgebrochen(format)) {
// Pausierter Lauf: Teilfortschritt samt Schritt-Dateien löschen (Reset)
emit('deleteGuide', props.latestByFormat[format].id, true)
} else { } else {
emit('deleteGuide', props.latestByFormat[format].id) emit('deleteGuide', props.latestByFormat[format].id)
} }
@@ -234,7 +237,10 @@ function confirmDeleteProject(name) {
<div class="progress-info" v-if="activeGenerations.length"> <div class="progress-info" v-if="activeGenerations.length">
<div v-for="(line, i) in activeGenerations" :key="i">{{ line }}</div> <div v-for="(line, i) in activeGenerations" :key="i">{{ line }}</div>
</div> </div>
<div class="format-row bausteine-row ord-bausteine"> <div
class="format-row bausteine-row ord-bausteine"
:class="{ 'is-active': bausteineState === 'generating' || bausteine.partial }"
>
<div class="format-name bausteine-name"> <div class="format-name bausteine-name">
<span class="format-label">Bausteine</span> <span class="format-label">Bausteine</span>
<span <span
@@ -284,7 +290,7 @@ function confirmDeleteProject(name) {
</div> </div>
<!-- OnePager (unabhängig von Bausteinen) steht per CSS-order vor der Bausteine-Zeile --> <!-- OnePager (unabhängig von Bausteinen) steht per CSS-order vor der Bausteine-Zeile -->
<div v-for="f in formats" :key="f.key" :style="{ order: f.key === 'OnePager' ? 1 : 3 }"> <div v-for="f in formats" :key="f.key" :style="{ order: f.key === 'OnePager' ? 1 : 3 }">
<div :class="['format-row', 'fmt-' + guideStatus(f.key)]"> <div :class="['format-row', 'fmt-' + guideStatus(f.key), { 'fmt-paused': abgebrochen(f.key) }]">
<button class="format-name" @click="handleFormatClick(f.key)"> <button class="format-name" @click="handleFormatClick(f.key)">
<span class="format-label">{{ f.label }}</span> <span class="format-label">{{ f.label }}</span>
<span <span
@@ -302,11 +308,12 @@ function confirmDeleteProject(name) {
></span> ></span>
</span> </span>
<span <span
v-if="guideStatus(f.key) !== 'none'" v-if="guideStatus(f.key) !== 'none' || abgebrochen(f.key)"
class="format-x" class="format-x"
:class="{ armed: pendingConfirm === 'fmt-' + f.key }" :class="{ armed: pendingConfirm === 'fmt-' + f.key }"
@click.stop="handleDelete(f.key)" @click.stop="handleDelete(f.key)"
:title="guideStatus(f.key) === 'generating' || guideStatus(f.key) === 'queued' ? 'Abbrechen' : 'Löschen'" :title="guideStatus(f.key) === 'generating' || guideStatus(f.key) === 'queued' ? 'Abbrechen'
: abgebrochen(f.key) ? 'Fortschritt löschen' : 'Löschen'"
>{{ pendingConfirm === 'fmt-' + f.key ? 'Sicher?' : '×' }}</span> >{{ pendingConfirm === 'fmt-' + f.key ? 'Sicher?' : '×' }}</span>
</button> </button>
<div class="format-actions"> <div class="format-actions">
@@ -730,6 +737,14 @@ function confirmDeleteProject(name) {
display: inline; display: inline;
} }
/* Laufend/pausiert: × immer zeigen — Hover gibt es auf Touch nicht */
.fmt-generating .format-x,
.fmt-queued .format-x,
.fmt-paused .format-x,
.bausteine-row.is-active .format-x {
display: inline;
}
.format-x.armed, .format-x.armed,
.format-error-x.armed, .format-error-x.armed,
.delete-topic.armed { .delete-topic.armed {