From ac8afef9850b4ad0fafe7fbf3f337f2fd7375f86 Mon Sep 17 00:00:00 2001 From: pro Date: Thu, 29 Jan 2026 16:31:59 +0900 Subject: [PATCH] =?UTF-8?q?feat:=EC=83=81=ED=92=88=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=8B=9C=20=EA=B0=9C=EB=B0=9C=EB=B9=84/=EA=B0=80=EC=9E=85?= =?UTF-8?q?=EB=B9=84=20=EB=B6=84=EB=A6=AC=20=EC=9E=85=EB=A0=A5=20=EC=A7=80?= =?UTF-8?q?=EC=9B=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Sales/SalesProductController.php | 2 ++ app/Models/Sales/SalesProduct.php | 11 +++++++ .../views/sales/products/index.blade.php | 30 +++++++++++++++---- .../products/partials/product-list.blade.php | 4 +-- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/Sales/SalesProductController.php b/app/Http/Controllers/Sales/SalesProductController.php index 020f668c..be331146 100644 --- a/app/Http/Controllers/Sales/SalesProductController.php +++ b/app/Http/Controllers/Sales/SalesProductController.php @@ -60,6 +60,7 @@ public function store(Request $request): JsonResponse 'name' => 'required|string|max:100', 'description' => 'nullable|string', 'development_fee' => 'required|numeric|min:0', + 'registration_fee' => 'required|numeric|min:0', 'subscription_fee' => 'required|numeric|min:0', 'partner_commission_rate' => 'nullable|numeric|min:0|max:100', 'manager_commission_rate' => 'nullable|numeric|min:0|max:100', @@ -105,6 +106,7 @@ public function update(Request $request, int $id): JsonResponse 'name' => 'sometimes|string|max:100', 'description' => 'nullable|string', 'development_fee' => 'sometimes|numeric|min:0', + 'registration_fee' => 'sometimes|numeric|min:0', 'subscription_fee' => 'sometimes|numeric|min:0', 'partner_commission_rate' => 'nullable|numeric|min:0|max:100', 'manager_commission_rate' => 'nullable|numeric|min:0|max:100', diff --git a/app/Models/Sales/SalesProduct.php b/app/Models/Sales/SalesProduct.php index f672af04..4e8643bd 100644 --- a/app/Models/Sales/SalesProduct.php +++ b/app/Models/Sales/SalesProduct.php @@ -15,6 +15,7 @@ * @property string $name * @property string|null $description * @property float $development_fee + * @property float $registration_fee * @property float $subscription_fee * @property float $partner_commission_rate * @property float $manager_commission_rate @@ -35,6 +36,7 @@ class SalesProduct extends Model 'name', 'description', 'development_fee', + 'registration_fee', 'subscription_fee', 'partner_commission_rate', 'manager_commission_rate', @@ -47,6 +49,7 @@ class SalesProduct extends Model protected $casts = [ 'category_id' => 'integer', 'development_fee' => 'decimal:2', + 'registration_fee' => 'decimal:2', 'subscription_fee' => 'decimal:2', 'partner_commission_rate' => 'decimal:2', 'manager_commission_rate' => 'decimal:2', @@ -104,6 +107,14 @@ public function getFormattedDevelopmentFeeAttribute(): string return '₩' . number_format($this->development_fee); } + /** + * 포맷된 가입비 + */ + public function getFormattedRegistrationFeeAttribute(): string + { + return '₩' . number_format($this->registration_fee); + } + /** * 포맷된 구독료 */ diff --git a/resources/views/sales/products/index.blade.php b/resources/views/sales/products/index.blade.php index cd25f709..8d4c7eef 100644 --- a/resources/views/sales/products/index.blade.php +++ b/resources/views/sales/products/index.blade.php @@ -117,22 +117,31 @@ class="w-full px-3 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:rin
- +
- + +

기본: 개발비의 25%

+
+ + +
@@ -245,6 +254,7 @@ function productManager() { name: '', description: '', development_fee: 0, + registration_fee: 0, subscription_fee: 0, partner_commission_rate: 20, manager_commission_rate: 5, @@ -280,6 +290,7 @@ function productManager() { name: '', description: '', development_fee: 0, + registration_fee: 0, subscription_fee: 0, partner_commission_rate: 20, manager_commission_rate: 5, @@ -392,6 +403,13 @@ function productManager() { parseNumber(value) { if (!value) return 0; return parseInt(String(value).replace(/[^\d]/g, ''), 10) || 0; + }, + + updateDevelopmentFee(value) { + const fee = this.parseNumber(value); + this.productForm.development_fee = fee; + // 가입비 자동 계산 (개발비의 25%) + this.productForm.registration_fee = Math.floor(fee * 0.25); } }; } diff --git a/resources/views/sales/products/partials/product-list.blade.php b/resources/views/sales/products/partials/product-list.blade.php index 8e5863b6..7477e397 100644 --- a/resources/views/sales/products/partials/product-list.blade.php +++ b/resources/views/sales/products/partials/product-list.blade.php @@ -34,8 +34,8 @@ class="p-1 text-gray-400 hover:text-indigo-600 transition-colors">
가입비
- ₩{{ number_format($product->development_fee) }} - ₩{{ number_format($product->development_fee * 0.25) }} + {{ $product->formatted_development_fee }} + {{ $product->formatted_registration_fee }}