Kurze Zusammenfassung: Ergänzt Feature-001-Artefakte: QA-Checkliste, Quickstart, Design-Entscheidung, Scheduler-Dokumentation. Ergänzt Projekt-ignores: .dockerignore, .eslintignore, .npmignore. Führte pint aus (Formatierungsfixes). Fügte/aktualisierte Backend-/Frontend-Skizzen und Tests für den Public Grid Viewer (Reservations, Selection mapping, Payment scaffold, Composite job). Branch: 001-public-grid-viewer Wichtige Dateien (Auswahl): Docs & specs: qa.md quickstart.md 001-public-grid-viewer.md SCHEDULER.md Config / infra: pixel_grid.php .dockerignore, .eslintignore, .npmignore compose.yaml Backend (skizzen / implementation): SchedulerServiceProvider.php providers.php ExpireReservations.php Reservation.php 2026_01_03_000002_create_reservations_table.php SelectionMapper.php CompositeImage.php PaymentController.php Frontend (scaffold): Index.vue GridCanvas.vue Tests: PublicGridMetaTest.php ReserveSelectionTest.php PriceCalculationTest.php SelectionMathTest.php Was ich lokal geprüft habe pint ausgeführt (Formatierungsfixes angewendet). Vollständige Test-Suite ausgeführt: 52 passed (164 assertions). Branch gepusht: cloudarix/001-public-grid-viewer. Co-authored-by: Ahmed Darrazi <ahmeddarrazi@adsmac.local> Reviewed-on: #1
40 lines
909 B
Vue
40 lines
909 B
Vue
<template>
|
|
<aside class="selection-sidebar">
|
|
<div class="info">
|
|
<div>Cells selected: <strong>{{ cellCount }}</strong></div>
|
|
<div>Price / cell: <strong>{{ pricePerCell }}</strong></div>
|
|
<div>Total: <strong>{{ total }}</strong></div>
|
|
</div>
|
|
<button class="btn" @click="$emit('open-upload')">Weiter</button>
|
|
</aside>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { computed } from 'vue';
|
|
|
|
const props = defineProps({
|
|
cellCount: { type: Number, default: 0 },
|
|
pricePerCell: { type: Number, default: 0 },
|
|
});
|
|
|
|
const total = computed(() => props.cellCount * props.pricePerCell);
|
|
</script>
|
|
|
|
<style scoped>
|
|
.selection-sidebar {
|
|
width: 300px;
|
|
padding: 1rem;
|
|
border-left: 1px solid rgba(0,0,0,0.06);
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 1rem;
|
|
}
|
|
.btn {
|
|
background: #2563eb;
|
|
color: white;
|
|
padding: 0.5rem 1rem;
|
|
border: none;
|
|
border-radius: 6px;
|
|
}
|
|
</style>
|