Files
kopalnia_2026/resources/views/catalog/pumps/show.blade.php
T
2026-09-03 12:21:17 +02:00

153 lines
11 KiB
PHP

<x-app-layout :active="'pumps.index'" title="SoftSPM 2 - {{ $pump->PUP_NAME }}">
@php
$fmt = fn ($v, $d = 3) => $v === null ? '-' : number_format(round((float) $v, $d), $d, ',', ' ');
@endphp
<div class="space-y-stack-gap">
@if (session('status'))
<div class="status-chip-ok px-3 py-2 rounded-lg font-body-sm text-body-sm">{{ session('status') }}</div>
@endif
{{-- Nagłówek + akcje --}}
<div class="flex flex-wrap items-center justify-between gap-3">
<div class="flex items-center gap-2">
<a href="{{ route('pumps.index') }}" class="font-body-sm text-body-sm text-on-surface-variant hover:text-primary">← Katalog pomp</a>
<h1 class="font-headline-lg text-headline-lg text-on-surface">{{ $pump->PUP_NAME }}</h1>
</div>
<div class="flex items-center gap-2">
<a href="{{ route('pumps.edit', $pump) }}"
class="bg-secondary text-on-secondary px-4 py-2 rounded-full font-title-sm text-title-sm hover:opacity-90 transition-all active:scale-95">Edytuj</a>
<x-confirm-delete :action="route('pumps.destroy', $pump)"
message="Czy na pewno usunąć pompę „{{ $pump->PUP_NAME }}”? Tej operacji nie można cofnąć." />
</div>
</div>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-stack-gap">
{{-- LEWA: dane techniczne --}}
<div class="bg-surface-container-lowest border border-outline-variant/40 rounded-lg shadow-card p-card-inner-padding">
<h2 class="font-title-sm text-title-sm text-tertiary mb-3">Dane techniczne pompy</h2>
<dl class="grid grid-cols-2 gap-x-4 gap-y-2 font-body-md text-body-md">
<dt class="text-on-surface-variant">Typ pompy</dt><dd class="font-semibold">{{ $pump->PUP_NAME }}</dd>
<dt class="text-on-surface-variant">Producent</dt><dd>{{ $pump->manufacturer?->MCF_NAME ?? '-' }}</dd>
<dt class="col-span-2 border-t border-outline-variant/30 mt-1 pt-1"></dt>
<dt class="text-on-surface-variant">Q<sub>n</sub> [m³/h]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_Q_N) }}</dd>
<dt class="text-on-surface-variant">Q<sub>min</sub> [m³/h]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_Q_MIN) }}</dd>
<dt class="text-on-surface-variant">Q<sub>max</sub> [m³/h]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_Q_MAX) }}</dd>
<dt class="text-on-surface-variant">H<sub>p</sub> [m]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_H_P, 2) }}</dd>
<dt class="text-on-surface-variant">H<sub>min</sub> [m]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_H_MIN, 2) }}</dd>
<dt class="text-on-surface-variant">H<sub>max</sub> [m]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_H_MAX, 2) }}</dd>
<dt class="text-on-surface-variant">η<sub>max</sub> [-]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_ETA_MAX, 2) }}</dd>
<dt class="col-span-2 border-t border-outline-variant/30 mt-1 pt-1"></dt>
<dt class="text-on-surface-variant">Długość [mm]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_PUMP_LENGTH, 2) }}</dd>
<dt class="text-on-surface-variant">Średnica [mm]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_DIAMETER, 2) }}</dd>
<dt class="text-on-surface-variant">Masa [kg]</dt><dd class="font-data-label">{{ $fmt($pump->PUP_WEIGHT, 2) }}</dd>
</dl>
</div>
{{-- PRAWA: wykresy --}}
<div class="space-y-stack-gap">
<div class="bg-surface-container-lowest border border-outline-variant/40 rounded-lg shadow-card p-card-inner-padding">
<h2 class="font-title-sm text-title-sm text-tertiary mb-2">Wysokość podnoszenia &nbsp;<span class="font-body-sm text-on-surface-variant">H = f(Q)</span></h2>
@if ($hDrawable)
<x-pump-curve :plot="$hPlot" id="hchart" :interactive="true" :initial-q="$q"
:eta-coeffs="data_get($etaPlot, 'coeffs', [])"
q-input="#q" h-output="#rv-h" eta-output="#rv-eta"
x-label="Q [m³/h]" y-label="H [m]" />
@else
<p class="font-body-sm text-body-sm text-on-surface-variant py-6 text-center">Brak parametrów energetycznych dla pompy.</p>
@endif
</div>
<div class="bg-surface-container-lowest border border-outline-variant/40 rounded-lg shadow-card p-card-inner-padding">
<h2 class="font-title-sm text-title-sm text-tertiary mb-2">Sprawność &nbsp;<span class="font-body-sm text-on-surface-variant">η = f(Q)</span></h2>
@if ($etaDrawable)
<x-pump-curve :plot="$etaPlot" x-label="Q [m³/h]" y-label="η [-]" />
@else
<p class="font-body-sm text-body-sm text-on-surface-variant py-6 text-center">Brak parametrów energetycznych dla pompy.</p>
@endif
</div>
</div>
</div>
<div class="grid grid-cols-1 lg:grid-cols-2 gap-stack-gap">
{{-- Parametry energetyczne (punkty krzywych) --}}
<div class="bg-surface-container-lowest border border-outline-variant/40 rounded-lg shadow-card overflow-hidden">
<div class="px-card-inner-padding pt-card-inner-padding">
<h2 class="font-title-sm text-title-sm text-tertiary mb-2">Parametry energetyczne</h2>
</div>
<table class="w-full text-left">
<thead class="bg-secondary/10 border-y border-outline-variant/40">
<tr class="font-data-label text-data-label text-on-surface-variant tracking-wide">
<th class="px-4 py-2 w-10">Lp.</th>
<th class="px-4 py-2 text-right">Q [m³/h]</th>
<th class="px-4 py-2 text-right">H [m]</th>
<th class="px-4 py-2 text-right">η [-]</th>
</tr>
</thead>
<tbody class="divide-y divide-outline-variant/30 font-data-label">
@foreach ($h as $i => $pt)
<tr>
<td class="px-4 py-1.5 text-on-surface-variant">{{ $i + 1 }}.</td>
<td class="px-4 py-1.5 text-right">{{ $pt->x }}</td>
<td class="px-4 py-1.5 text-right">{{ $pt->y }}</td>
<td class="px-4 py-1.5 text-right">{{ $eta[$i]->y ?? '-' }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
{{-- Przelicz dla zadanego Q + lista silników --}}
<div class="space-y-stack-gap">
<div class="bg-surface-container-lowest border border-outline-variant/40 rounded-lg shadow-card p-card-inner-padding">
<h2 class="font-title-sm text-title-sm text-tertiary mb-3">Parametry energetyczne na zadane Q</h2>
<form method="GET" action="{{ route('pumps.show', $pump) }}" class="flex flex-wrap items-end gap-4">
<div class="space-y-1">
<label for="q" class="font-data-label text-data-label text-on-surface-variant tracking-wide">Dla Q [m³/h]</label>
<input id="q" name="q" type="text" value="{{ number_format($q, 3, ',', '') }}"
class="w-32 bg-surface-container-low border border-outline-variant px-3 py-2 rounded font-data-label text-on-surface">
</div>
<button type="submit" class="bg-secondary text-on-secondary px-4 py-2 rounded-full font-title-sm text-title-sm hover:opacity-90 active:scale-95">Przelicz</button>
@if ($outOfRange)
<span class="font-body-sm text-body-sm text-error">poza zakresem</span>
@endif
</form>
<dl class="grid grid-cols-2 gap-2 mt-3 font-body-md text-body-md">
<dt class="text-on-surface-variant">Wartość H [m]</dt><dd id="rv-h" class="font-data-label font-semibold">{{ $hAtQ === null ? '-' : number_format(round($hAtQ, 2), 2, ',', ' ') }}</dd>
<dt class="text-on-surface-variant">Wartość η [-]</dt><dd id="rv-eta" class="font-data-label font-semibold">{{ $etaAtQ === null ? '-' : number_format(round($etaAtQ, 2), 2, ',', ' ') }}</dd>
</dl>
</div>
<div class="bg-surface-container-lowest border border-outline-variant/40 rounded-lg shadow-card overflow-hidden">
<div class="px-card-inner-padding pt-card-inner-padding">
<h2 class="font-title-sm text-title-sm text-tertiary mb-2">Lista silników dla pompy</h2>
</div>
<table class="w-full text-left">
<thead class="bg-secondary/10 border-y border-outline-variant/40">
<tr class="font-data-label text-data-label text-on-surface-variant tracking-wide">
<th class="px-4 py-2">Typ silnika</th>
<th class="px-4 py-2 text-right">Napięcie [V]</th>
<th class="px-4 py-2 text-right">Moc [kW]</th>
<th class="px-4 py-2">Producent</th>
</tr>
</thead>
<tbody class="divide-y divide-outline-variant/30 font-body-md text-body-md">
@forelse ($relatedEngines as $e)
<tr>
<td class="px-4 py-1.5">{{ $e->ENG_NAME }}</td>
<td class="px-4 py-1.5 text-right font-data-label">{{ $e->ENG_VOLTAGE }}</td>
<td class="px-4 py-1.5 text-right font-data-label">{{ $e->ENG_POWER }}</td>
<td class="px-4 py-1.5">{{ $e->MCF_NAME }}</td>
</tr>
@empty
<tr><td colspan="4" class="px-4 py-4 text-center font-body-sm text-on-surface-variant">Brak powiązanych silników.</td></tr>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</x-app-layout>