This commit is contained in:
team3
2026-07-24 10:45:42 +02:00
parent 09f9ea74a6
commit 084b07ff50
7 changed files with 87 additions and 74 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

64
frontend/dist/assets/index-Yruju_eh.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -13,8 +13,8 @@
if (dark) document.documentElement.classList.add('dark') if (dark) document.documentElement.classList.add('dark')
})() })()
</script> </script>
<script type="module" crossorigin src="/assets/index-PAbaEjVj.js"></script> <script type="module" crossorigin src="/assets/index-Yruju_eh.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-CzKrDvqu.css"> <link rel="stylesheet" crossorigin href="/assets/index-Dm2vsYsS.css">
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>

View File

@@ -57,8 +57,9 @@ function toggleDark() {
Übersicht Übersicht
</a> </a>
<a v-for="p in projekte" :key="p.name" href="#" <a v-for="p in projekte" :key="p.name" href="#"
:class="{ aktiv: aktivesProjekt === p.name, gestoert: p.fehler || !p.hat_planer }" :class="{ aktiv: aktivesProjekt === p.name,
@click.prevent="p.hat_planer && oeffne(p.name)"> gestoert: p.fehler || (!p.hat_planer && !p.scan_laeuft) }"
@click.prevent="(p.hat_planer || p.scan_laeuft) && oeffne(p.name)">
{{ p.name }} {{ p.name }}
<span v-if="p.scan_laeuft" class="punkt gelb" title="Scan läuft"></span> <span v-if="p.scan_laeuft" class="punkt gelb" title="Scan läuft"></span>
<span v-else-if="p.drift?.length" class="punkt gelb" title="Drift"></span> <span v-else-if="p.drift?.length" class="punkt gelb" title="Drift"></span>

View File

@@ -38,19 +38,28 @@ async function statusTick() {
} }
const poll = usePolling(statusTick, () => scanLaeuft.value, 2000) const poll = usePolling(statusTick, () => scanLaeuft.value, 2000)
onMounted(async () => { async function init() {
await laden() projekt.value = null
fehler.value = ''
await statusTick() await statusTick()
await laden()
if (scanLaeuft.value) poll.start() if (scanLaeuft.value) poll.start()
}) }
watch(() => props.name, async () => { projekt.value = null; await laden() }) onMounted(init)
watch(() => props.name, init)
const kernHtml = computed(() => const kernHtml = computed(() =>
projekt.value ? marked.parse(projekt.value.kern.text || '') : '') projekt.value ? marked.parse(projekt.value.kern.text || '') : '')
</script> </script>
<template> <template>
<p v-if="fehler" class="fehler">{{ fehler }}</p> <!-- Erst-Scan: noch kein .planer/, aber Lauf aktiv nur Fortschritt zeigen -->
<div v-if="!projekt && scanLaeuft" class="erstscan">
<h2>{{ name }}</h2>
<p class="laden">Erster Scan läuft die Ansicht lädt automatisch, sobald er fertig ist.</p>
<ScanSeitenleiste :name="name" />
</div>
<p v-else-if="fehler" class="fehler">{{ fehler }}</p>
<div v-else-if="projekt" class="rahmen" :class="{ mitLeiste: scanLaeuft }"> <div v-else-if="projekt" class="rahmen" :class="{ mitLeiste: scanLaeuft }">
<div> <div>
<section class="kern karte"> <section class="kern karte">
@@ -73,6 +82,9 @@ const kernHtml = computed(() =>
<style scoped> <style scoped>
.rahmen.mitLeiste { display: grid; grid-template-columns: 1fr 300px; gap: 1.2rem; } .rahmen.mitLeiste { display: grid; grid-template-columns: 1fr 300px; gap: 1.2rem; }
.erstscan { max-width: 420px; }
.erstscan h2 { margin: 0 0 0.4rem; font-size: 1.2rem; }
.erstscan .laden { margin-bottom: 1rem; }
.kern { margin-bottom: 1.2rem; } .kern { margin-bottom: 1.2rem; }
.kern h2 { margin: 0 0 0.4rem; font-size: 1.2rem; } .kern h2 { margin: 0 0 0.4rem; font-size: 1.2rem; }
.kern-text :deep(p) { margin: 0.3rem 0; color: var(--dezent); } .kern-text :deep(p) { margin: 0.3rem 0; color: var(--dezent); }