- EquipmentPhotoService: GCS 기반 사진 업로드/삭제/조회 (최대 10장) - EquipmentImportService: 엑셀 파싱 → 설비 일괄 등록 (한글 헤더 자동 매핑) - API: 사진 업로드/목록/삭제, Import 미리보기/실행 엔드포인트 - 뷰: create/edit에 드래그앤드롭 사진 업로드, show에 갤러리 표시 - import.blade.php: 3단계 Import UI (파일선택 → 미리보기 → 결과) - phpoffice/phpspreadsheet 패키지 추가
128 lines
5.6 KiB
PHP
128 lines
5.6 KiB
PHP
<!-- 기본정보 탭 -->
|
|
<div class="bg-white rounded-lg shadow-sm p-6 mb-6">
|
|
<h2 class="text-lg font-semibold text-gray-800 mb-4 pb-2 border-b">기본정보</h2>
|
|
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">설비코드</label>
|
|
<p class="text-gray-900 font-mono font-medium">{{ $equipment->equipment_code }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">설비명</label>
|
|
<p class="text-gray-900 font-medium">{{ $equipment->name }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">설비유형</label>
|
|
<p class="text-gray-900">{{ $equipment->equipment_type ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">규격</label>
|
|
<p class="text-gray-900">{{ $equipment->specification ?? '-' }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-white rounded-lg shadow-sm p-6 mb-6">
|
|
<h2 class="text-lg font-semibold text-gray-800 mb-4 pb-2 border-b">제조사 정보</h2>
|
|
<div class="grid grid-cols-2 md:grid-cols-3 gap-4">
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">제조사</label>
|
|
<p class="text-gray-900">{{ $equipment->manufacturer ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">모델명</label>
|
|
<p class="text-gray-900">{{ $equipment->model_name ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">제조번호</label>
|
|
<p class="text-gray-900 font-mono">{{ $equipment->serial_no ?? '-' }}</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="bg-white rounded-lg shadow-sm p-6 mb-6">
|
|
<h2 class="text-lg font-semibold text-gray-800 mb-4 pb-2 border-b">설치 정보</h2>
|
|
<div class="grid grid-cols-2 md:grid-cols-4 gap-4">
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">위치</label>
|
|
<p class="text-gray-900">{{ $equipment->location ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">생산라인</label>
|
|
<p class="text-gray-900">{{ $equipment->production_line ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">구입일</label>
|
|
<p class="text-gray-900">{{ $equipment->purchase_date?->format('Y-m-d') ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">설치일</label>
|
|
<p class="text-gray-900">{{ $equipment->install_date?->format('Y-m-d') ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">구입가격</label>
|
|
<p class="text-gray-900">{{ $equipment->purchase_price ? number_format($equipment->purchase_price) . '원' : '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">내용연수</label>
|
|
<p class="text-gray-900">{{ $equipment->useful_life ? $equipment->useful_life . '년' : '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">담당자</label>
|
|
<p class="text-gray-900">{{ $equipment->manager?->name ?? '-' }}</p>
|
|
</div>
|
|
<div>
|
|
<label class="block text-sm text-gray-500 mb-1">상태</label>
|
|
<span class="inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium {{ $equipment->status_color }}">
|
|
{{ $equipment->status_label }}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
@if($equipment->memo)
|
|
<div class="mt-4">
|
|
<label class="block text-sm text-gray-500 mb-1">비고</label>
|
|
<p class="text-gray-900 whitespace-pre-wrap">{{ $equipment->memo }}</p>
|
|
</div>
|
|
@endif
|
|
</div>
|
|
|
|
@if($equipment->photos->isNotEmpty())
|
|
<div class="bg-white rounded-lg shadow-sm p-6 mb-6">
|
|
<h2 class="text-lg font-semibold text-gray-800 mb-4 pb-2 border-b">설비 사진</h2>
|
|
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-3">
|
|
@foreach($equipment->photos as $photo)
|
|
@php
|
|
$bucket = config('services.google.storage_bucket');
|
|
$url = $photo->gcs_object_name && $bucket
|
|
? "https://storage.googleapis.com/{$bucket}/{$photo->gcs_object_name}"
|
|
: null;
|
|
@endphp
|
|
@if($url)
|
|
<div>
|
|
<a href="{{ $url }}" target="_blank">
|
|
<img src="{{ $url }}" alt="{{ $photo->original_name }}"
|
|
class="w-full h-32 object-cover rounded-lg border hover:opacity-80 transition">
|
|
</a>
|
|
<p class="text-xs text-gray-500 mt-1 truncate">{{ $photo->original_name }}</p>
|
|
</div>
|
|
@endif
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@endif
|
|
|
|
@if($equipment->processes->isNotEmpty())
|
|
<div class="bg-white rounded-lg shadow-sm p-6">
|
|
<h2 class="text-lg font-semibold text-gray-800 mb-4 pb-2 border-b">연결된 공정</h2>
|
|
<div class="flex flex-wrap gap-2">
|
|
@foreach($equipment->processes as $process)
|
|
<span class="inline-flex items-center px-3 py-1 rounded-full text-sm font-medium bg-blue-100 text-blue-800">
|
|
{{ $process->process_name }}
|
|
@if($process->pivot->is_primary)
|
|
<span class="ml-1 text-xs text-blue-600">(주)</span>
|
|
@endif
|
|
</span>
|
|
@endforeach
|
|
</div>
|
|
</div>
|
|
@endif
|