diff --git a/resources/views/admin/platform_orders/show.blade.php b/resources/views/admin/platform_orders/show.blade.php index a4ae746..2ca5380 100644 --- a/resources/views/admin/platform_orders/show.blade.php +++ b/resources/views/admin/platform_orders/show.blade.php @@ -342,11 +342,31 @@ @php $canMarkActivatedOnly = ($order->payment_status === 'paid') && ($order->status !== 'activated'); + // 安全阀:续费单未绑定订阅时,不允许“仅标记为已生效”(后端 markActivated 也会阻断) + $markActivatedBlockedByMissingSubscriptionOnRenewal = ((string) ($order->order_type ?? '') === 'renewal') + && ((int) ($order->site_subscription_id ?? 0) <= 0); @endphp
@csrf - +
+ + @if($markActivatedBlockedByMissingSubscriptionOnRenewal) +
+
生效治理提示(当前不可直接标记为已生效)
+
+
+ 原因:当前订单类型为「续费」,但未绑定订阅(site_subscription_id 为空)。 + + 请先补齐订阅关联后再处理。 + @if($missingSubscriptionHelpUrl !== '') + + 去订阅管理查找订阅 + @endif +
+
+
+ @endif @if(! $canActivate) diff --git a/tests/Feature/AdminPlatformOrderShowMarkActivatedButtonDisabledWhenRenewalMissingSubscriptionTest.php b/tests/Feature/AdminPlatformOrderShowMarkActivatedButtonDisabledWhenRenewalMissingSubscriptionTest.php new file mode 100644 index 0000000..9243534 --- /dev/null +++ b/tests/Feature/AdminPlatformOrderShowMarkActivatedButtonDisabledWhenRenewalMissingSubscriptionTest.php @@ -0,0 +1,71 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_show_should_disable_mark_activated_button_when_renewal_order_missing_subscription(): void + { + $this->loginAsPlatformAdmin(); + + $merchant = Merchant::query()->firstOrFail(); + $plan = Plan::query()->create([ + 'code' => 'po_show_mark_activated_disable_renewal_no_sub_plan', + 'name' => '订单详情 生效按钮禁用(续费无订阅)测试套餐', + 'billing_cycle' => 'monthly', + 'price' => 30, + 'list_price' => 30, + 'status' => 'active', + 'sort' => 10, + 'published_at' => now(), + ]); + + $order = PlatformOrder::query()->create([ + 'merchant_id' => $merchant->id, + 'plan_id' => $plan->id, + 'order_no' => 'PO_SHOW_MARK_ACTIVATED_DISABLE_RENEW_NO_SUB_0001', + 'order_type' => 'renewal', + 'status' => 'pending', + 'payment_status' => 'paid', + 'plan_name' => $plan->name, + 'billing_cycle' => $plan->billing_cycle, + 'period_months' => 1, + 'quantity' => 1, + 'payable_amount' => 30, + 'paid_amount' => 30, + 'placed_at' => now(), + 'meta' => [], + ]); + + $res = $this->get('/admin/platform-orders/' . $order->id); + $res->assertOk(); + + // 按钮应被禁用(disabled) + $res->assertSee('仅标记为已生效', false); + $res->assertSee('disabled', false); + + // 治理提示应出现,并包含引导入口 + $res->assertSee('生效治理提示', false); + $res->assertSee('续费', false); + $res->assertSee('未绑定订阅', false); + $res->assertSee('去订阅管理查找订阅', false); + } +}