feat: [bending] 절곡품 관리 MNG 화면

- 기초관리: 목록(13컬럼) + 폼(기본정보 + 케이스전용 + 절곡테이블 + 이미지)
- 절곡품: 가이드레일/케이스/하단마감재 타입별 목록 + 폼
- 부품 추가(기초관리 검색 모달) + 삭제 + 수량/품명/재질 편집
- 절곡테이블 inline 편집 + 재질별 폭합 자동계산
- 작업지시서 레거시 포맷 인쇄 모달
- 원본수정 버튼 sam_item_id 직접 링크
- DB 메뉴 등록 (기초관리 + 절곡품 + 케이스 + 하단마감재)
This commit is contained in:
강영보
2026-03-19 20:05:38 +09:00
committed by 권혁성
parent 71c5e21ba0
commit d03c7ed870
23 changed files with 4809 additions and 0 deletions

View File

@@ -0,0 +1,41 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Http;
/**
* R2 파일 프록시 (MNG 세션 인증으로 API 파일 스트리밍)
*
* MNG는 Blade(서버사이드)이므로 API의 /files/{id}/view를 직접 호출 시
* sanctum 인증 문제가 발생. MNG 세션 인증으로 API를 프록시하여 파일 스트리밍.
*/
class FileViewController extends Controller
{
public function show(int $id)
{
$baseUrl = config('services.api.base_url', 'https://api.sam.kr');
$apiKey = config('services.api.key') ?: '42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a';
$token = session('api_access_token', '');
$response = Http::baseUrl($baseUrl)
->withoutVerifying()
->withHeaders([
'X-API-KEY' => $apiKey,
'X-TENANT-ID' => 287, // TODO: session('selected_tenant_id', 1) 로 복원
])
->withToken($token)
->timeout(15)
->get("/api/v1/files/{$id}/view");
if (! $response->successful()) {
abort(404);
}
return response($response->body(), 200, [
'Content-Type' => $response->header('Content-Type', 'image/png'),
'Content-Disposition' => 'inline',
'Cache-Control' => 'private, max-age=3600',
]);
}
}