From 036e346f2c6fda2eb9ba50876d61879d520c6db0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sat, 21 Mar 2026 11:49:07 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[bending]=20=EA=B8=B0=EC=B4=88=EC=9E=90?= =?UTF-8?q?=EB=A3=8C=20=EB=B3=B5=EC=82=AC=20=EB=B2=84=ED=8A=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=E2=80=94=20=EB=B3=B5=EC=82=AC=20=ED=9B=84=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=ED=99=94=EB=A9=B4=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Http/Controllers/BendingBaseController.php | 15 +++++++++++++++ resources/views/bending/base/form.blade.php | 12 ++++++++++++ routes/web.php | 1 + 3 files changed, 28 insertions(+) diff --git a/app/Http/Controllers/BendingBaseController.php b/app/Http/Controllers/BendingBaseController.php index 457e9ccd..54af8899 100644 --- a/app/Http/Controllers/BendingBaseController.php +++ b/app/Http/Controllers/BendingBaseController.php @@ -203,6 +203,21 @@ public function update(Request $request, int $id) return redirect()->route('bending.base.show', $id)->with('success', '절곡품이 수정되었습니다.'); } + public function duplicate(int $id) + { + $response = $this->api()->post("/api/v1/bending-items/{$id}/duplicate"); + + if (! $response->successful()) { + return back()->withErrors(['api' => $response->json('message', '복사 실패')]); + } + + $newId = $response->json('data.id'); + $newCode = $response->json('data.code'); + + return redirect()->route('bending.base.edit', $newId) + ->with('success', "복사 완료 — 새 코드: {$newCode}"); + } + public function destroy(int $id) { $this->api()->delete("/api/v1/bending-items/{$id}"); diff --git a/resources/views/bending/base/form.blade.php b/resources/views/bending/base/form.blade.php index 2e05ac53..9fc87775 100644 --- a/resources/views/bending/base/form.blade.php +++ b/resources/views/bending/base/form.blade.php @@ -34,6 +34,7 @@ 수정 @endif @if(!$isCreate) +
@csrf @method('DELETE') @@ -482,6 +483,17 @@ function serializeBendingData() { document.getElementById('bendingDataInput').value = JSON.stringify(data); } +// 복사 +function duplicateItem() { + if (!confirm('이 절곡품을 복사하시겠습니까?\n같은 분류의 다음 번호가 자동 채번됩니다.')) return; + const form = document.createElement('form'); + form.method = 'POST'; + form.action = '{{ !$isCreate ? route("bending.base.duplicate", $itemId) : "" }}'; + form.innerHTML = '@csrf'; + document.body.appendChild(form); + form.submit(); +} + // 이미지 미리보기 function previewImage(input) { const file = input.files[0]; diff --git a/routes/web.php b/routes/web.php index 051cb8bd..d1f50f5b 100644 --- a/routes/web.php +++ b/routes/web.php @@ -508,6 +508,7 @@ Route::get('/base/{id}', [\App\Http\Controllers\BendingBaseController::class, 'show'])->whereNumber('id')->name('base.show'); Route::get('/base/{id}/edit', [\App\Http\Controllers\BendingBaseController::class, 'edit'])->whereNumber('id')->name('base.edit'); Route::put('/base/{id}', [\App\Http\Controllers\BendingBaseController::class, 'update'])->whereNumber('id')->name('base.update'); + Route::post('/base/{id}/duplicate', [\App\Http\Controllers\BendingBaseController::class, 'duplicate'])->whereNumber('id')->name('base.duplicate'); Route::delete('/base/{id}', [\App\Http\Controllers\BendingBaseController::class, 'destroy'])->whereNumber('id')->name('base.destroy'); // 기초관리 부품 검색 (모달용 AJAX)