794 lines
45 KiB
PHP
794 lines
45 KiB
PHP
<?php
|
||
|
||
use function Livewire\Volt\{state, mount};
|
||
|
||
state([
|
||
'product' => [],
|
||
'activeTab' => 'basis'
|
||
]);
|
||
|
||
mount(function () {
|
||
// Initialisierung der Dummy-Daten
|
||
});
|
||
|
||
?>
|
||
|
||
|
||
|
||
<div class="space-y-6">
|
||
{{-- Header --}}
|
||
<div class="flex items-center justify-between">
|
||
<div>
|
||
<flux:heading size="xl">{{ __('Produkte') }} (in Entwicklung)</flux:heading>
|
||
<flux:subheading>{{ __('Erstellen Sie ein neues Produkt') }}</flux:subheading>
|
||
</div>
|
||
<div class="flex items-center gap-2">
|
||
@svg('heroicon-o-cube', 'w-6 h-6 text-accent-600 dark:text-accent-400')
|
||
<span class="text-sm font-medium text-zinc-700 dark:text-zinc-300">{{ __('Neues Produkt anlegen') }}</span>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<form wire:submit="save" class="space-y-6">
|
||
|
||
{{-- Tab Navigation --}}
|
||
<flux:tabs wire:model.live="activeTab" variant="segmented">
|
||
<flux:tab name="basis" icon="identification">{{ __('Basis') }}</flux:tab>
|
||
<flux:tab name="bilder" icon="photo">{{ __('Bilder') }}</flux:tab>
|
||
<flux:tab name="physisch" icon="cube">{{ __('Physisch') }}</flux:tab>
|
||
<flux:tab name="material" icon="beaker">{{ __('Material & Herkunft') }}</flux:tab>
|
||
<flux:tab name="kommerziell" icon="currency-euro">{{ __('Kommerziell') }}</flux:tab>
|
||
<flux:tab name="verwaltung" icon="cog">{{ __('Zuordnung & Verwaltung') }}</flux:tab>
|
||
</flux:tabs>
|
||
|
||
{{-- TAB 1: BASIS - Identität & Varianten --}}
|
||
@if($activeTab === 'basis')
|
||
<div class="space-y-8">
|
||
|
||
{{-- 1. Identität & Katalog --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('1. Identität & Katalog') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('B2in-Artikelnummer (intern)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.b2in_article_number" placeholder="B2IN-000471" />
|
||
<flux:description>{{ __('Fortlaufende Nummer (vom System vergeben)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Lieferanten-Artikelnummer') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.supplier_article_number" placeholder="SOFA-ALBA-3S-ANTHR" />
|
||
<flux:description>{{ __('Originalnummer des Herstellers') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Produktname') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.product_name" placeholder="Sofa ALBA 3-Sitzer" />
|
||
<flux:description>{{ __('Anzeigename auf Website') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Marke / Hersteller') }}</flux:label>
|
||
<flux:input wire:model="product.brand" placeholder="Möbelwerk Nord" />
|
||
<flux:description>{{ __('Produzent oder Label') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Kategorie') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.category" placeholder="{{ __('Bitte wählen...') }}">
|
||
<option value="sofas">{{ __('Wohnzimmer > Sofas') }}</option>
|
||
<option value="chairs">{{ __('Esszimmer > Stühle') }}</option>
|
||
<option value="beds">{{ __('Schlafzimmer > Betten') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Kurzbeschreibung') }}</flux:label>
|
||
<flux:textarea wire:model="product.short_description" rows="3" placeholder="Modernes Sofa mit Holzrahmen und Stoff"></flux:textarea>
|
||
<flux:description>{{ __('Max. 180 Zeichen für Snippets') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Langbeschreibung') }}</flux:label>
|
||
<flux:textarea wire:model="product.long_description" rows="6" placeholder="Das Sofa ALBA verbindet zeitloses Design..."></flux:textarea>
|
||
<flux:description>{{ __('Detaillierter Text für Produktseite') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Status') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.status">
|
||
<option value="active">{{ __('Aktiv') }}</option>
|
||
<option value="draft">{{ __('Entwurf') }}</option>
|
||
<option value="inactive">{{ __('Inaktiv') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Erstelldatum / Änderungsdatum') }}</flux:label>
|
||
<flux:input type="date" wire:model="product.created_at" value="2025-11-04" />
|
||
<flux:description>{{ __('ISO-Datum') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 2. Varianten & Attribute --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('2. Varianten & Attribute') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Variantenattribute (Stammdaten)') }}</flux:label>
|
||
<flux:input wire:model="product.variant_attributes" placeholder="Farbe, Bezug, Gestellfarbe" />
|
||
<flux:description>{{ __('Merkmale, die die SKUs definieren') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Varianten (Kombinationen)') }}</flux:label>
|
||
<flux:input wire:model="product.variants" placeholder="Anthrazit / Stoff A / Eiche hell" />
|
||
<flux:description>{{ __('Konkrete Ausprägungen') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Weitere Attribute') }}</flux:label>
|
||
<flux:input wire:model="product.additional_attributes" placeholder="Sitzhärte: mittel" />
|
||
<flux:description>{{ __('Zusatzinfos (z. B. Sitzhärte, Stil)') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
</div>
|
||
@endif
|
||
|
||
{{-- TAB 2: BILDER - Upload & Verwaltung --}}
|
||
@if($activeTab === 'bilder')
|
||
<div class="space-y-8">
|
||
|
||
{{-- Hauptbild & Galerie --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('Produktbilder') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Hauptbild') }} <span class="text-red-500">*</span></flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.main_image" accept="image/*" /> --}}
|
||
<flux:description>{{ __('Hauptansicht des Produkts (min. 1200x1200px, max. 5MB)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||
<div class="border-2 border-dashed border-zinc-300 dark:border-zinc-600 rounded-lg p-4 flex items-center justify-center h-40">
|
||
<div class="text-center">
|
||
<flux:icon.photo class="h-12 w-12 mx-auto text-zinc-400 mb-2" />
|
||
<span class="text-sm text-zinc-500">{{ __('Hauptbild Vorschau') }}</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<flux:separator />
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Produktgalerie') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.gallery_images" accept="image/*" multiple /> --}}
|
||
<flux:description>{{ __('Mehrere Bilder hochladen (max. 10 Bilder, je max. 5MB)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
||
@for($i = 1; $i <= 8; $i++)
|
||
<div class="border-2 border-dashed border-zinc-300 dark:border-zinc-600 rounded-lg p-4 flex items-center justify-center h-40">
|
||
<div class="text-center">
|
||
<flux:icon.photo class="h-8 w-8 mx-auto text-zinc-400 mb-1" />
|
||
<span class="text-xs text-zinc-500">{{ __('Bild') }} {{ $i }}</span>
|
||
</div>
|
||
</div>
|
||
@endfor
|
||
</div>
|
||
</flux:card>
|
||
|
||
{{-- Detailbilder & Ansichten --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('Detailansichten & Perspektiven') }}</flux:heading>
|
||
|
||
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
|
||
<flux:field>
|
||
<flux:label>{{ __('Vorderansicht') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.view_front" accept="image/*" /> --}}
|
||
<flux:description>{{ __('Frontale Produktansicht') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Rückansicht') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.view_back" accept="image/*" /> --}}
|
||
<flux:description>{{ __('Rückseite des Produkts') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Seitenansicht (links)') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.view_left" accept="image/*" /> --}}
|
||
<flux:description>{{ __('Linke Seite') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Seitenansicht (rechts)') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.view_right" accept="image/*" /> --}}
|
||
<flux:description>{{ __('Rechte Seite') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Detailaufnahme 1') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.detail_1" accept="image/*" /> --}}
|
||
<flux:description>{{ __('z.B. Material-Nahaufnahme') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Detailaufnahme 2') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.detail_2" accept="image/*" /> --}}
|
||
<flux:description>{{ __('z.B. Verarbeitung, Nähte') }}</flux:description>
|
||
</flux:field>
|
||
</div>
|
||
</flux:card>
|
||
|
||
{{-- Ambiente & Lifestyle --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('Ambiente & Lifestyle-Bilder') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Ambiente-Bilder') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.lifestyle_images" accept="image/*" multiple /> --}}
|
||
<flux:description>{{ __('Produkt in Wohnsituation (max. 5 Bilder)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
|
||
@for($i = 1; $i <= 3; $i++)
|
||
<div class="border-2 border-dashed border-zinc-300 dark:border-zinc-600 rounded-lg p-4 flex items-center justify-center h-48">
|
||
<div class="text-center">
|
||
<flux:icon.home class="h-10 w-10 mx-auto text-zinc-400 mb-2" />
|
||
<span class="text-sm text-zinc-500">{{ __('Ambiente') }} {{ $i }}</span>
|
||
</div>
|
||
</div>
|
||
@endfor
|
||
</div>
|
||
</flux:card>
|
||
|
||
{{-- 360° Ansicht & Video --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('360° Ansicht & Produktvideo') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('360° Bilder') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.rotation_images" accept="image/*" multiple /> --}}
|
||
<flux:description>{{ __('Bilder für 360° Rotation (min. 24 Bilder empfohlen)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:separator />
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Produktvideo') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.product_video" accept="video/*" /> --}}
|
||
<flux:description>{{ __('Kurzes Produktvideo (max. 50MB, MP4/WebM)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Video-URL (alternativ)') }}</flux:label>
|
||
<flux:input wire:model="product.video_url" placeholder="https://youtube.com/watch?v=..." />
|
||
<flux:description>{{ __('YouTube, Vimeo oder andere Video-URL') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- Technische Zeichnungen & Dokumente --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('Technische Zeichnungen & Dokumente') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Maßzeichnung') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.dimension_drawing" accept="image/*,application/pdf" /> --}}
|
||
<flux:description>{{ __('Technische Zeichnung mit Maßen (PNG, JPG oder PDF)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Montageanleitung') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.assembly_manual" accept="application/pdf" /> --}}
|
||
<flux:description>{{ __('PDF mit Montageanleitung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Datenblatt / Broschüre') }}</flux:label>
|
||
{{-- <flux:input type="file" wire:model="product.datasheet" accept="application/pdf" /> --}}
|
||
<flux:description>{{ __('Produktdatenblatt als PDF') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- Bild-Metadaten & Alt-Texte --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('Bild-Metadaten & SEO') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Alt-Text (Hauptbild)') }}</flux:label>
|
||
<flux:input wire:model="product.main_image_alt" placeholder="Sofa ALBA 3-Sitzer in Anthrazit" />
|
||
<flux:description>{{ __('Beschreibung für Suchmaschinen und Barrierefreiheit') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Bildnachweis / Copyright') }}</flux:label>
|
||
<flux:input wire:model="product.image_credits" placeholder="© Möbelwerk Nord 2024" />
|
||
<flux:description>{{ __('Fotografen-Nennung oder Copyright-Hinweis') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Bildoptimierung') }}</flux:label>
|
||
<flux:checkbox wire:model="product.auto_optimize_images">
|
||
{{ __('Bilder automatisch für Web optimieren (Komprimierung & Skalierung)') }}
|
||
</flux:checkbox>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Wasserzeichen') }}</flux:label>
|
||
<flux:checkbox wire:model="product.add_watermark">
|
||
{{ __('B2in-Wasserzeichen auf Bilder anwenden') }}
|
||
</flux:checkbox>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
</div>
|
||
@endif
|
||
|
||
{{-- TAB 3: PHYSISCH - Maße & Verpackung --}}
|
||
@if($activeTab === 'physisch')
|
||
<div class="space-y-8">
|
||
|
||
{{-- 3. Maße & Gewicht (Produkt) --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('3. Maße & Gewicht (Produkt)') }}</flux:heading>
|
||
|
||
<div class="grid grid-cols-1 md:grid-cols-3 gap-6">
|
||
<flux:field>
|
||
<flux:label>{{ __('Breite (mm)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" wire:model="product.width" placeholder="2200" />
|
||
<flux:description>{{ __('Gesamtbreite') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Tiefe (mm)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" wire:model="product.depth" placeholder="950" />
|
||
<flux:description>{{ __('Gesamttiefe') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Höhe (mm)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" wire:model="product.height" placeholder="830" />
|
||
<flux:description>{{ __('Gesamthöhe') }}</flux:description>
|
||
</flux:field>
|
||
</div>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Gewicht netto (kg)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" step="0.1" wire:model="product.weight" placeholder="68" />
|
||
<flux:description>{{ __('Möbel ohne Verpackung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Aufbauart') }}</flux:label>
|
||
<flux:select wire:model="product.assembly_type">
|
||
<option value="assembled">{{ __('montiert') }}</option>
|
||
<option value="partially">{{ __('teilmontiert') }}</option>
|
||
<option value="disassembled">{{ __('zerlegt') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Montagezeit (min)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" wire:model="product.assembly_time" placeholder="45" />
|
||
<flux:description>{{ __('Aufbauzeit') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Traglast (kg)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.load_capacity" placeholder="120" />
|
||
<flux:description>{{ __('Belastbarkeit') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 4. Verpackung & Logistik --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('4. Verpackung & Logistik') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Anzahl Packstücke') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.package_count" placeholder="2" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Gesamtgewicht brutto (kg)') }}</flux:label>
|
||
<flux:input type="number" step="0.1" wire:model="product.gross_weight" placeholder="75" />
|
||
<flux:description>{{ __('inkl. Verpackung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Verpackungsart') }}</flux:label>
|
||
<flux:input wire:model="product.packaging_type" placeholder="Karton mit Kantenschutz" />
|
||
<flux:description>{{ __('Karton, Holzrahmen usw.') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Verpackung recyclingfähig (%)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.packaging_recyclable" placeholder="85" />
|
||
<flux:description>{{ __('Anteil recycelbarer Materialien der Verpackung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Kolli 1 Maße (mm)') }}</flux:label>
|
||
<flux:input wire:model="product.package_1_dimensions" placeholder="L × B × H: 1500 × 950 × 600" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Kolli 1 Gewicht (kg)') }}</flux:label>
|
||
<flux:input type="number" step="0.1" wire:model="product.package_1_weight" placeholder="45" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Palettenfähig') }}</flux:label>
|
||
<flux:select wire:model="product.palletizable">
|
||
<option value="yes">{{ __('Ja') }}</option>
|
||
<option value="no">{{ __('Nein') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('HS-Code (Zolltarifnummer)') }}</flux:label>
|
||
<flux:input wire:model="product.hs_code" placeholder="94016100" />
|
||
</flux:field>
|
||
</flux:card>
|
||
</div>
|
||
@endif
|
||
|
||
{{-- TAB 4: MATERIAL & HERKUNFT - Materialien & Holzherkunft --}}
|
||
@if($activeTab === 'material')
|
||
<div class="space-y-8">
|
||
|
||
{{-- 5. Materialien & Qualität --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('5. Materialien & Qualität') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Hauptmaterial') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.main_material" placeholder="Massivholz Buche" />
|
||
<flux:description>{{ __('Tragende Struktur') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Oberflächenmaterial') }}</flux:label>
|
||
<flux:input wire:model="product.surface_material" placeholder="Furnier Eiche geölt" />
|
||
<flux:description>{{ __('Sichtflächen') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Bezugsmaterial') }}</flux:label>
|
||
<flux:input wire:model="product.upholstery_material" placeholder="Stoff (Polyester)" />
|
||
<flux:description>{{ __('Stoff / Leder / Synthetik') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Farbton / Dekor') }}</flux:label>
|
||
<flux:input wire:model="product.color" placeholder="Eiche natur / Anthrazit" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Herkunftsland (Produktion)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.country_of_origin">
|
||
<option value="DE">{{ __('Deutschland') }}</option>
|
||
<option value="PL">{{ __('Polen') }}</option>
|
||
<option value="IT">{{ __('Italien') }}</option>
|
||
<option value="AT">{{ __('Österreich') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('ISO-Land') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Pflegehinweise') }}</flux:label>
|
||
<flux:textarea wire:model="product.care_instructions" rows="3" placeholder="Reinigung & Pflege"></flux:textarea>
|
||
<flux:description>{{ __('Mit feuchtem Tuch abwischen.') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Zertifikate / Labels') }}</flux:label>
|
||
<flux:input wire:model="product.certificates" placeholder="FSC, OEKO-TEX, Blauer Engel etc." />
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 6. Holzherkunft & EUDR --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('6. Holzherkunft & EUDR') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Holzart(en)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.wood_type" placeholder="Quercus robur (Eiche)" />
|
||
<flux:description>{{ __('Botanische Bezeichnung (falls Holz enthalten)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Herkunftsland des Holzes') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.wood_origin_country">
|
||
<option value="PL">{{ __('Polen') }}</option>
|
||
<option value="DE">{{ __('Deutschland') }}</option>
|
||
<option value="RO">{{ __('Rumänien') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('ISO-Code (falls Holz enthalten)') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Region / Provinz') }}</flux:label>
|
||
<flux:input wire:model="product.wood_region" placeholder="Masowien" />
|
||
<flux:description>{{ __('falls erforderlich für EUDR') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Erntejahr') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.harvest_year" placeholder="2024" />
|
||
<flux:description>{{ __('Jahr der Holzgewinnung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Forstbetrieb / Lieferant') }}</flux:label>
|
||
<flux:input wire:model="product.forest_operator" placeholder="ForestPol Sp. z o.o." />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Nachhaltigkeitszertifikat') }}</flux:label>
|
||
<flux:input wire:model="product.sustainability_certificate" placeholder="FSC C123456" />
|
||
<flux:description>{{ __('FSC / PEFC') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Sorgfaltserklärung (EUDR-DD-Referenz)') }}</flux:label>
|
||
<flux:input wire:model="product.eudr_reference" placeholder="EUDR-DD-2025-PL-03421" />
|
||
<flux:description>{{ __('offiziell Referenz') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Nachweisdatei (Upload)') }}</flux:label>
|
||
<flux:input type="file" wire:model="product.eudr_document" />
|
||
<flux:description>{{ __('PDF / Link zum Statement') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
</div>
|
||
@endif
|
||
|
||
{{-- TAB 5: KOMMERZIELL - Preise, Verfügbarkeit & Lieferung --}}
|
||
@if($activeTab === 'kommerziell')
|
||
<div class="space-y-8">
|
||
|
||
{{-- 7. Preise & Konditionen --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('7. Preise & Konditionen') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Einkaufspreis (net)') }}</flux:label>
|
||
<flux:input type="number" step="0.01" wire:model="product.purchase_price" placeholder="680.00" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Verkaufspreis (net)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" step="0.01" wire:model="product.selling_price" placeholder="1,250.00" />
|
||
<flux:description>{{ __('Für B2in-Plattform') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Währung') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.currency">
|
||
<option value="EUR">{{ __('EUR') }}</option>
|
||
<option value="USD">{{ __('USD') }}</option>
|
||
<option value="CHF">{{ __('CHF') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Steuersatz (%)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" wire:model="product.tax_rate" placeholder="19" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('UVP (Brutto)') }}</flux:label>
|
||
<flux:input type="number" step="0.01" wire:model="product.rrp" placeholder="1,499.00" />
|
||
<flux:description>{{ __('Unverbindliche Preisempfehlung') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 8. Verfügbarkeit & Lieferzeit --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('8. Verfügbarkeit & Lieferzeit') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Lagerstatus') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.stock_status">
|
||
<option value="in_stock">{{ __('Auf Lager') }}</option>
|
||
<option value="on_order">{{ __('Auf Bestellung') }}</option>
|
||
<option value="out_of_stock">{{ __('Nicht verfügbar') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('Auf Lager / Auf Bestellung / Nicht verfügbar') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Lieferzeit (Wochen)') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input type="number" wire:model="product.delivery_time" placeholder="4-6" />
|
||
<flux:description>{{ __('Min–Max-Spanne') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Produktionszeit (Tage)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.production_time" placeholder="21" />
|
||
<flux:description>{{ __('falls relevant') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 9. Lieferung, Montage & Service --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('9. Lieferung, Montage & Service') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Lieferart') }}</flux:label>
|
||
<flux:select wire:model="product.delivery_type">
|
||
<option value="pickup">{{ __('Abholung') }}</option>
|
||
<option value="delivery">{{ __('Lieferung') }}</option>
|
||
<option value="expedition">{{ __('Spedition') }}</option>
|
||
<option value="parcel">{{ __('Paket') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('Abholung / Lieferung / Spedition / Paket') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Montageservice') }}</flux:label>
|
||
<flux:select wire:model="product.assembly_service">
|
||
<option value="yes">{{ __('Ja') }}</option>
|
||
<option value="no">{{ __('Nein') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Service-Radius (km)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.service_radius" placeholder="50" />
|
||
<flux:description>{{ __('Für Montageservice') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Garantie (Monate)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.warranty" placeholder="24" />
|
||
</flux:field>
|
||
</flux:card>
|
||
</div>
|
||
@endif
|
||
|
||
{{-- TAB 6: VERWALTUNG - Händler, Nachhaltigkeit, Scoring & Verwaltung --}}
|
||
@if($activeTab === 'verwaltung')
|
||
<div class="space-y-8">
|
||
|
||
{{-- 10. Händler- / Herstellerzuordnung --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('10. Händler- / Herstellerzuordnung') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Verkäufertyp') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:select wire:model="product.seller_type">
|
||
<option value="retailer">{{ __('Händler') }}</option>
|
||
<option value="manufacturer">{{ __('Hersteller') }}</option>
|
||
<option value="broker">{{ __('Makler') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('Hersteller / Makler') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Verkäufername') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.seller_name" placeholder="WohnDesign Bielefeld" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Verkäufer-ID') }}</flux:label>
|
||
<flux:input wire:model="product.seller_id" placeholder="SELLER_xyz" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Region / Hub') }} <span class="text-red-500">*</span></flux:label>
|
||
<flux:input wire:model="product.region" placeholder="OWL" />
|
||
<flux:description>{{ __('Logistische Zuordnung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Ort / PLZ') }}</flux:label>
|
||
<flux:input wire:model="product.location" placeholder="33602 Bielefeld" />
|
||
<flux:description>{{ __('Standort des Verkäufers/Lagers') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 11. Nachhaltigkeit & Umwelt --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('11. Nachhaltigkeit & Umwelt') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('CO₂-Fußabdruck (kg CO₂e) pro Stück') }}</flux:label>
|
||
<flux:input type="number" step="0.1" wire:model="product.co2_footprint" placeholder="35" />
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Recyclinganteil (%)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.recycling_rate" placeholder="40" />
|
||
<flux:description>{{ __('Anteil recycelter Materialien im Produkt') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Regionale Produktion') }}</flux:label>
|
||
<flux:select wire:model="product.regional_production">
|
||
<option value="yes">{{ __('Ja') }}</option>
|
||
<option value="no">{{ __('Nein') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('Ja / Nein (Umkreis z. B. < 500 km)') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 12. Scoring-System (B2in Internal) --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('12. Scoring-System (B2in Internal)') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Stauraumvolumen (L)') }}</flux:label>
|
||
<flux:input type="number" wire:model="product.storage_volume" placeholder="280" />
|
||
<flux:description>{{ __('Innenvolumen') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Aufbauaufwand (1–5)') }}</flux:label>
|
||
<flux:select wire:model="product.assembly_effort">
|
||
<option value="1">1 - {{ __('Sehr einfach') }}</option>
|
||
<option value="2">2 - {{ __('Einfach') }}</option>
|
||
<option value="3">3 - {{ __('Mittel') }}</option>
|
||
<option value="4">4 - {{ __('Anspruchsvoll') }}</option>
|
||
<option value="5">5 - {{ __('Sehr anspruchsvoll') }}</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('gering = 1') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Designpunkte (1–5)') }}</flux:label>
|
||
<flux:select wire:model="product.design_score">
|
||
<option value="1">1</option>
|
||
<option value="2">2</option>
|
||
<option value="3">3</option>
|
||
<option value="4">4</option>
|
||
<option value="5">5</option>
|
||
</flux:select>
|
||
<flux:description>{{ __('interne Bewertung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Gesamt-Score') }}</flux:label>
|
||
<flux:input type="number" step="0.1" wire:model="product.total_score" placeholder="4.2" disabled />
|
||
<flux:description>{{ __('automatisch berechnet') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
|
||
{{-- 13. Verwaltung & Lebenszyklus --}}
|
||
<flux:card class="space-y-6">
|
||
<flux:heading size="lg" class="border-b pb-3">{{ __('13. Verwaltung & Lebenszyklus') }}</flux:heading>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Sichtbar ab / bis (Datum)') }}</flux:label>
|
||
<flux:input type="date" wire:model="product.visible_from" placeholder="2025-01-01 / 2026-01-01" />
|
||
<flux:description>{{ __('Steuerung der Veröffentlichung') }}</flux:description>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Freigabe durch B2in erforderlich') }}</flux:label>
|
||
<flux:select wire:model="product.requires_approval">
|
||
<option value="yes">{{ __('Ja') }}</option>
|
||
<option value="no">{{ __('Nein') }}</option>
|
||
</flux:select>
|
||
</flux:field>
|
||
|
||
<flux:field>
|
||
<flux:label>{{ __('Letzte Änderung') }}</flux:label>
|
||
<flux:input type="date" wire:model="product.last_modified" value="2025-11-04" disabled />
|
||
<flux:description>{{ __('Datum der letzten Aktualisierung') }}</flux:description>
|
||
</flux:field>
|
||
</flux:card>
|
||
</div>
|
||
@endif
|
||
|
||
{{-- Submit Button (außerhalb der Tabs, immer sichtbar) --}}
|
||
<div class="flex justify-end gap-4 pt-6 border-t">
|
||
<flux:button variant="ghost" href="{{ route('dashboard') }}">{{ __('Abbrechen') }}</flux:button>
|
||
<flux:button type="submit" variant="primary" icon="check">{{ __('Produkt speichern') }}</flux:button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|