From 4be39ca8e7a090b4e57d25bbf480d57d192f5374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=90=9D=E5=8D=9C?= Date: Sun, 15 Mar 2026 00:11:27 +0000 Subject: [PATCH] Platform orders index: expand subscription governance quick links --- .../admin/platform_orders/index.blade.php | 34 +++++-- ...iptionGovernanceQuickLinksExpandedTest.php | 88 +++++++++++++++++++ 2 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 tests/Feature/AdminPlatformOrderIndexSubscriptionGovernanceQuickLinksExpandedTest.php diff --git a/resources/views/admin/platform_orders/index.blade.php b/resources/views/admin/platform_orders/index.blade.php index 28e7b6e..e990714 100644 --- a/resources/views/admin/platform_orders/index.blade.php +++ b/resources/views/admin/platform_orders/index.blade.php @@ -156,23 +156,47 @@
订阅治理入口:
@php - // 锁定订阅场景下的治理快捷入口:保留 site_subscription_id,上下文字段按需覆盖/清空。 - $subSyncableUrl = $safeFullUrlWithQuery([ + // 订阅治理快捷入口:保留订阅上下文(site_subscription_id + 其它业务上下文),但不继承 syncable_only/fail_only/page 等工具型开关。 + $buildSubGovernUrl = function (array $overrides) use ($safeBackForLinks) { + return \App\Support\BackUrl::currentPathQuickFilter( + ['merchant_id', 'plan_id', 'site_subscription_id', 'keyword', 'lead_id'], + $overrides, + $safeBackForLinks + ); + }; + + $subSyncableUrl = $buildSubGovernUrl([ 'syncable_only' => '1', 'sync_status' => null, 'fail_only' => null, - 'page' => null, ]); - $subSyncFailedUrl = $safeFullUrlWithQuery([ + $subSyncFailedUrl = $buildSubGovernUrl([ 'sync_status' => 'failed', 'syncable_only' => null, - 'page' => null, + ]); + + $subUnpaidUrl = $buildSubGovernUrl([ + 'payment_status' => 'unpaid', + 'status' => null, + 'syncable_only' => null, + 'sync_status' => null, + 'fail_only' => null, + ]); + + $subPaidPendingUrl = $buildSubGovernUrl([ + 'payment_status' => 'paid', + 'status' => 'pending', + 'syncable_only' => null, + 'sync_status' => null, + 'fail_only' => null, ]); @endphp
diff --git a/tests/Feature/AdminPlatformOrderIndexSubscriptionGovernanceQuickLinksExpandedTest.php b/tests/Feature/AdminPlatformOrderIndexSubscriptionGovernanceQuickLinksExpandedTest.php new file mode 100644 index 0000000..3904687 --- /dev/null +++ b/tests/Feature/AdminPlatformOrderIndexSubscriptionGovernanceQuickLinksExpandedTest.php @@ -0,0 +1,88 @@ +seed(); + + $this->post('/admin/login', [ + 'email' => 'platform.admin@demo.local', + 'password' => 'Platform@123456', + ])->assertRedirect('/admin'); + } + + public function test_index_should_render_expanded_subscription_governance_quick_links_when_subscription_locked(): void + { + $this->loginAsPlatformAdmin(); + + $merchant = Merchant::query()->firstOrFail(); + $plan = Plan::query()->create([ + 'code' => 'po_index_sub_gov_quick_exp_plan', + 'name' => '平台订单订阅治理快捷入口扩展测试套餐', + 'billing_cycle' => 'monthly', + 'price' => 10, + 'list_price' => 10, + 'status' => 'active', + 'sort' => 10, + 'published_at' => now(), + ]); + + $sub = SiteSubscription::query()->create([ + 'merchant_id' => $merchant->id, + 'plan_id' => $plan->id, + 'status' => 'activated', + 'source' => 'manual', + 'subscription_no' => 'SS_SUB_GOV_QUICK_EXP_0001', + 'plan_name' => $plan->name, + 'billing_cycle' => $plan->billing_cycle, + 'period_months' => 1, + 'amount' => 10, + 'starts_at' => now()->subDay(), + 'ends_at' => now()->addMonth(), + 'activated_at' => now()->subDay(), + ]); + + $res = $this->get('/admin/platform-orders?site_subscription_id=' . $sub->id); + $res->assertOk(); + + $res->assertSee('订阅治理入口:', false); + + $syncableUrl = '/admin/platform-orders?' . Arr::query([ + 'site_subscription_id' => $sub->id, + 'syncable_only' => '1', + ]); + + $failedUrl = '/admin/platform-orders?' . Arr::query([ + 'site_subscription_id' => $sub->id, + 'sync_status' => 'failed', + ]); + + $unpaidUrl = '/admin/platform-orders?' . Arr::query([ + 'site_subscription_id' => $sub->id, + 'payment_status' => 'unpaid', + ]); + + $paidPendingUrl = '/admin/platform-orders?' . Arr::query([ + 'site_subscription_id' => $sub->id, + 'payment_status' => 'paid', + 'status' => 'pending', + ]); + + $res->assertSee($syncableUrl, false); + $res->assertSee($failedUrl, false); + $res->assertSee($unpaidUrl, false); + $res->assertSee($paidPendingUrl, false); + } +}