diff --git a/app/Http/Controllers/ESign/EsignController.php b/app/Http/Controllers/ESign/EsignController.php new file mode 100644 index 00000000..ac13e0c3 --- /dev/null +++ b/app/Http/Controllers/ESign/EsignController.php @@ -0,0 +1,56 @@ +header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('esign.dashboard')); + } + + return view('esign.dashboard'); + } + + public function create(Request $request): View|Response + { + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('esign.create')); + } + + return view('esign.create'); + } + + public function detail(Request $request, int $id): View|Response + { + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('esign.detail', $id)); + } + + return view('esign.detail', ['contractId' => $id]); + } + + public function fields(Request $request, int $id): View|Response + { + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('esign.fields', $id)); + } + + return view('esign.fields', ['contractId' => $id]); + } + + public function send(Request $request, int $id): View|Response + { + if ($request->header('HX-Request')) { + return response('', 200)->header('HX-Redirect', route('esign.send', $id)); + } + + return view('esign.send', ['contractId' => $id]); + } +} diff --git a/app/Http/Controllers/ESign/EsignPublicController.php b/app/Http/Controllers/ESign/EsignPublicController.php new file mode 100644 index 00000000..8415ca00 --- /dev/null +++ b/app/Http/Controllers/ESign/EsignPublicController.php @@ -0,0 +1,25 @@ + $token]); + } + + public function sign(string $token): View + { + return view('esign.sign.sign', ['token' => $token]); + } + + public function done(string $token): View + { + return view('esign.sign.done', ['token' => $token]); + } +} diff --git a/resources/views/esign/create.blade.php b/resources/views/esign/create.blade.php new file mode 100644 index 00000000..6ff96c0a --- /dev/null +++ b/resources/views/esign/create.blade.php @@ -0,0 +1,157 @@ +@extends('layouts.app') + +@section('title', '새 전자계약 생성') + +@section('content') + +
+@endsection + +@push('scripts') + + + +@verbatim + +@endverbatim +@endpush diff --git a/resources/views/esign/dashboard.blade.php b/resources/views/esign/dashboard.blade.php new file mode 100644 index 00000000..496941a1 --- /dev/null +++ b/resources/views/esign/dashboard.blade.php @@ -0,0 +1,183 @@ +@extends('layouts.app') + +@section('title', '전자계약 대시보드') + +@section('content') + +
+@endsection + +@push('scripts') + + + + +@verbatim + +@endverbatim +@endpush diff --git a/resources/views/esign/detail.blade.php b/resources/views/esign/detail.blade.php new file mode 100644 index 00000000..780f04ca --- /dev/null +++ b/resources/views/esign/detail.blade.php @@ -0,0 +1,211 @@ +@extends('layouts.app') + +@section('title', '전자계약 상세') + +@section('content') + +
+@endsection + +@push('scripts') + + + +@verbatim + +@endverbatim +@endpush diff --git a/resources/views/esign/fields.blade.php b/resources/views/esign/fields.blade.php new file mode 100644 index 00000000..b5c358c0 --- /dev/null +++ b/resources/views/esign/fields.blade.php @@ -0,0 +1,258 @@ +@extends('layouts.app') + +@section('title', '서명 위치 설정') + +@section('content') + +
+@endsection + +@push('scripts') + + + + + +@verbatim + +@endverbatim +@endpush diff --git a/resources/views/esign/send.blade.php b/resources/views/esign/send.blade.php new file mode 100644 index 00000000..568b5034 --- /dev/null +++ b/resources/views/esign/send.blade.php @@ -0,0 +1,133 @@ +@extends('layouts.app') + +@section('title', '서명 요청 발송') + +@section('content') + +
+@endsection + +@push('scripts') + + + +@verbatim + +@endverbatim +@endpush diff --git a/resources/views/esign/sign/auth.blade.php b/resources/views/esign/sign/auth.blade.php new file mode 100644 index 00000000..a21a1879 --- /dev/null +++ b/resources/views/esign/sign/auth.blade.php @@ -0,0 +1,164 @@ + + + + + + 전자계약 본인인증 - SAM E-Sign + @vite(['resources/css/app.css']) + + +
+ + + + + + + diff --git a/resources/views/esign/sign/done.blade.php b/resources/views/esign/sign/done.blade.php new file mode 100644 index 00000000..91bcc3e9 --- /dev/null +++ b/resources/views/esign/sign/done.blade.php @@ -0,0 +1,127 @@ + + + + + + 서명 완료 - SAM E-Sign + @vite(['resources/css/app.css']) + + +
+ + + + + + + diff --git a/resources/views/esign/sign/sign.blade.php b/resources/views/esign/sign/sign.blade.php new file mode 100644 index 00000000..4aaacd64 --- /dev/null +++ b/resources/views/esign/sign/sign.blade.php @@ -0,0 +1,228 @@ + + + + + + 전자서명 - SAM E-Sign + @vite(['resources/css/app.css']) + + +
+ + + + + + + + diff --git a/routes/web.php b/routes/web.php index 359f039a..79f36b28 100644 --- a/routes/web.php +++ b/routes/web.php @@ -3,6 +3,8 @@ use App\Http\Controllers\Api\BusinessCardOcrController; use App\Http\Controllers\ApiLogController; use App\Http\Controllers\AppVersionController; +use App\Http\Controllers\ESign\EsignController; +use App\Http\Controllers\ESign\EsignPublicController; use App\Http\Controllers\ArchivedRecordController; use App\Http\Controllers\AuditLogController; use App\Http\Controllers\Auth\LoginController; @@ -1386,4 +1388,24 @@ Route::post('/{id}/diarize', [MeetingMinuteController::class, 'diarize'])->name('diarize'); Route::get('/{id}/download-audio', [MeetingMinuteController::class, 'downloadAudio'])->name('download-audio'); }); + + // 전자계약 (E-Sign) - 인증 필요 + Route::prefix('esign')->name('esign.')->group(function () { + Route::get('/', [EsignController::class, 'dashboard'])->name('dashboard'); + Route::get('/create', [EsignController::class, 'create'])->name('create'); + Route::get('/{id}', [EsignController::class, 'detail'])->whereNumber('id')->name('detail'); + Route::get('/{id}/fields', [EsignController::class, 'fields'])->whereNumber('id')->name('fields'); + Route::get('/{id}/send', [EsignController::class, 'send'])->whereNumber('id')->name('send'); + }); +}); + +/* +|-------------------------------------------------------------------------- +| Public E-Sign Routes (인증 불필요 - 서명자용) +|-------------------------------------------------------------------------- +*/ +Route::prefix('esign/sign')->group(function () { + Route::get('/{token}', [EsignPublicController::class, 'auth'])->name('esign.sign.auth'); + Route::get('/{token}/sign', [EsignPublicController::class, 'sign'])->name('esign.sign.do'); + Route::get('/{token}/done', [EsignPublicController::class, 'done'])->name('esign.sign.done'); });