Files
2026-03-20 15:47:17 +05:00

52 lines
4.4 KiB
PHP

<div class="space-y-4">
<div class="card"><div class="card-body">
<div class="grid gap-3 md:grid-cols-2 xl:grid-cols-6">
<input wire:model.live.debounce.400ms="search" type="text" placeholder="Поиск по тикету/заголовку" class="rounded-xl border border-slate-300 px-3 py-2">
<select wire:model.live="statusId" class="rounded-xl border border-slate-300 px-3 py-2"><option value="">Все статусы</option>@foreach($statuses as $s)<option value="{{ $s->id }}">{{ $s->name }}</option>@endforeach</select>
<select wire:model.live="priorityId" class="rounded-xl border border-slate-300 px-3 py-2"><option value="">Все приоритеты</option>@foreach($priorities as $p)<option value="{{ $p->id }}">{{ $p->name }}</option>@endforeach</select>
<select wire:model.live="typeId" class="rounded-xl border border-slate-300 px-3 py-2"><option value="">Все типы</option>@foreach($types as $t)<option value="{{ $t->id }}">{{ $t->name }}</option>@endforeach</select>
<select wire:model.live="technicianId" class="rounded-xl border border-slate-300 px-3 py-2"><option value="">Все техники</option>@foreach($technicians as $t)<option value="{{ $t->id }}">{{ $t->name }}</option>@endforeach</select>
<button wire:click="clearFilters" class="rounded-xl border border-slate-300 px-3 py-2 hover:bg-slate-50">Сброс</button>
<button wire:click="exportCsv" class="rounded-xl border border-slate-300 px-3 py-2 text-sm hover:bg-slate-50">Экспорт CSV</button>
</div>
</div></div>
<div class="card overflow-hidden">
<div class="overflow-x-auto">
<table class="min-w-full text-sm">
<thead class="bg-slate-50 text-slate-600">
<tr>
<th class="px-3 py-2"><input type="checkbox" wire:click="$set('selected', {{ json_encode($requests->pluck('id')->toArray()) }})"></th>
<th class="px-3 py-2 text-left cursor-pointer" wire:click="sortBy('ticket_number')">#Ticket</th>
<th class="px-3 py-2 text-left cursor-pointer" wire:click="sortBy('title')">Заголовок</th>
<th class="px-3 py-2 text-left">Клиент</th>
<th class="px-3 py-2 text-left">Исполнитель</th>
<th class="px-3 py-2 text-left">Приоритет</th>
<th class="px-3 py-2 text-left">Статус</th>
<th class="px-3 py-2 text-left">Дедлайн</th>
<th class="px-3 py-2 text-left">Создана</th>
</tr>
</thead>
<tbody>
@forelse($requests as $request)
<tr class="border-t border-slate-100 {{ $request->isOverdue() ? 'bg-rose-50' : '' }}">
<td class="px-3 py-2"><input type="checkbox" wire:model="selected" value="{{ $request->id }}"></td>
<td class="px-3 py-2"><a class="font-medium text-slate-900 hover:underline" href="{{ route('requests.show', $request) }}">{{ $request->ticket_number }}</a></td>
<td class="px-3 py-2">{{ $request->title }}</td>
<td class="px-3 py-2">{{ $request->client?->name }}</td>
<td class="px-3 py-2">{{ $request->assignee?->name ?? '—' }}</td>
<td class="px-3 py-2"><span class="inline-flex items-center rounded-full px-2 py-1 text-xs text-white" style="background-color: {{ $request->priority?->color_hex }}">{{ $request->priority?->name }}</span></td>
<td class="px-3 py-2"><span class="inline-flex items-center rounded-full px-2 py-1 text-xs text-white" style="background-color: {{ $request->status?->color_hex }}">{{ $request->status?->name }}</span></td>
<td class="px-3 py-2 {{ $request->isOverdue() ? 'text-rose-600 font-medium' : '' }}">{{ $request->deadline_at?->format('d.m.Y H:i') ?? '—' }}</td>
<td class="px-3 py-2">{{ $request->created_at?->format('d.m.Y H:i') }}</td>
</tr>
@empty
<tr><td colspan="9" class="px-3 py-8 text-center text-slate-500">Нет заявок.</td></tr>
@endforelse
</tbody>
</table>
</div>
<div class="p-4">{{ $requests->links() }}</div>
</div>
</div>