@extends('layouts.admin') @section('title', '儀表板') @push('breadcrumb') @endpush @push('styles') @endpush @section('content')

儀表板總覽

歡迎回來,{{ auth()->user()->name ?? '系統管理員' }}

{{ now()->format('Y-m-d H:i') }}
宿舍空位總覽
總床位 / 剩餘空位
{{ $vacancies['total_available'] }}
總床位 {{ $vacancies['total_capacity'] }}|已住 {{ $vacancies['total_occupied'] }}
男宿剩餘空位
{{ $vacancies['male_available'] }}
男宿總床 {{ $vacancies['male_capacity'] }}
女宿剩餘空位
{{ $vacancies['female_available'] }}
女宿總床 {{ $vacancies['female_capacity'] }}
不限性別剩餘
{{ $vacancies['any_available'] }}
不限總床 {{ $vacancies['any_capacity'] }}
@php $urgencyLabels = [ 'urgent' => ['label' => '明天', 'badge' => 'urg-badge-urgent'], 'soon' => ['label' => '3天內', 'badge' => 'urg-badge-soon'], 'warn' => ['label' => '7天內', 'badge' => 'urg-badge-warn'], 'normal' => ['label' => '', 'badge' => ''], ]; // 每張大卡內部依緊急程度分三個小卡片(明天 / 3天內 / 7天內 + 其他) $urgBuckets = fn ($items) => [ 'urgent' => $items->filter(fn ($i) => ($i->urgency ?? 'normal') === 'urgent')->values(), 'soon' => $items->filter(fn ($i) => ($i->urgency ?? 'normal') === 'soon')->values(), 'warn' => $items->filter(fn ($i) => ($i->urgency ?? 'normal') === 'warn')->values(), 'normal' => $items->filter(fn ($i) => ! in_array($i->urgency ?? 'normal', ['urgent', 'soon', 'warn']))->values(), ]; $briefingBuckets = $urgBuckets($reminders['briefing']); $idApplyBuckets = $urgBuckets($reminders['id_apply']); $permitBuckets = $urgBuckets($reminders['permit']); @endphp
@php $bigCards = [ ['key' => 'briefing', 'icon' => 'bi-calendar-check', 'iconColor' => 'text-primary', 'badge' => 'bg-primary', 'title' => '參加勞工簡介會', 'subtitle' => '', 'buckets' => $briefingBuckets, 'url' => route('labor_application_steps.index')], ['key' => 'id_apply', 'icon' => 'bi-credit-card-2-front', 'iconColor' => 'text-success', 'badge' => 'bg-success', 'title' => '申請身份證', 'subtitle' => '', 'buckets' => $idApplyBuckets, 'url' => route('labor_application_steps.index')], ['key' => 'permit', 'icon' => 'bi-file-earmark-check', 'iconColor' => 'text-danger', 'badge' => 'bg-danger', 'title' => '批文結束日期', 'subtitle' => '', 'buckets' => $permitBuckets, 'url' => route('application_progresses.index')], ]; $urgSubTitles = ['urgent' => '明天', 'soon' => '3天內', 'warn' => '7天內', 'normal' => '其他']; @endphp @foreach($bigCards as $card)
{{ $card['title'] }} {{ $card['buckets']['urgent']->count() + $card['buckets']['soon']->count() + $card['buckets']['warn']->count() + $card['buckets']['normal']->count() }} 明天 3天內 7天內
@if($card['subtitle'])
{{ $card['subtitle'] }}
@endif
@foreach(['urgent', 'soon', 'warn', 'normal'] as $bucketKey) @php $bucket = $card['buckets'][$bucketKey]; @endphp @continue($bucket->isEmpty())
{{ $urgSubTitles[$bucketKey] }} {{ $bucket->count() }}
@foreach($bucket as $item)
@if($card['key'] === 'briefing')
{{ $item->company_name }} @if($item->location){{ $item->location }}@endif {{ $item->date?->format('Y-m-d') }}
@foreach($item->people as $person){{ $person->name }}{{ ! $loop->last ? '、' : '' }}@endforeach
@elseif($card['key'] === 'id_apply')
{{ $item->place ?? '地點未填' }} {{ $item->date?->format('Y-m-d H:i') }}
@foreach($item->people as $person){{ $person->name }}{{ ! $loop->last ? '、' : '' }}@endforeach
@else
@if(($item->source_type ?? '') === 'progress') {{ $item->display_labor_no ?? '勞工處編號未填' }} @elseif(($item->source_type ?? '') === 'worker') {{ $item->display_labor_no ?? '勞工處編號未填' }} @else {{ $item->display_labor_no ?? '勞工處編號未填' }} @endif {{ $item->display_company }} {{ $item->permit_end_date?->format('Y-m-d') }} @if($item->is_overdue ?? false)已過期@endif
@if(!empty($item->zh_name))
{{ $item->zh_name }}
@endif @endif
@endforeach
@endforeach @if($card['buckets']['urgent']->isEmpty() && $card['buckets']['soon']->isEmpty() && $card['buckets']['warn']->isEmpty() && $card['buckets']['normal']->isEmpty())
目前沒有安排
@endif
@endforeach
合約到期預警 {{ $expiringWorkers->count() }}
@if($expiringWorkers->count() > 0)
@foreach($expiringWorkers->take(4) as $worker)
{{ $worker->zh_name }}
{{ $worker->branch->name ?? '未分配' }}
{{ $worker->contract_end_date?->format('Y-m-d') }}
查看
@endforeach @if($expiringWorkers->count() > 4) @endif
@else
太棒了!

目前沒有即將到期的合約

@endif
@endsection