feat(subscriptions): make summary cards clickable for governance navigation
This commit is contained in:
@@ -38,6 +38,13 @@
|
||||
// - 拒绝 nested back=(避免 URL 膨胀/绕过)
|
||||
$incomingBack = (string) request()->query('back', '');
|
||||
$safeBackForLinks = \App\Support\BackUrl::sanitizeForLinks($incomingBack);
|
||||
|
||||
// 用于摘要卡等入口:保留当前 query 并覆盖字段,同时安全透传 back。
|
||||
$safeFullUrlWithQuery = function (array $overrides = []) use ($safeBackForLinks) {
|
||||
return \App\Support\BackUrl::currentPathWithQuery($overrides, $safeBackForLinks);
|
||||
};
|
||||
|
||||
$subscriptionIndexUrl = \App\Support\BackUrl::withBack('/admin/site-subscriptions', $safeBackForLinks);
|
||||
@endphp
|
||||
<div class="card mb-20">
|
||||
<p class="muted muted-tight">这里是总台视角的订阅目录页,承接“套餐 -> 订阅 -> 平台订单”的收费主链中间层。</p>
|
||||
@@ -118,27 +125,39 @@
|
||||
<div class="grid-4 mb-20">
|
||||
<div class="card">
|
||||
<h3>订阅总数</h3>
|
||||
<div class="num-md">{{ $summaryStats['total_subscriptions'] ?? 0 }}</div>
|
||||
<div class="num-md">
|
||||
<a class="link" href="{!! $subscriptionIndexUrl !!}">{{ $summaryStats['total_subscriptions'] ?? 0 }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>已生效</h3>
|
||||
<div class="num-md">{{ $summaryStats['activated_subscriptions'] ?? 0 }}</div>
|
||||
<div class="num-md">
|
||||
<a class="link" href="{!! $safeFullUrlWithQuery(['status' => 'activated', 'page' => null]) !!}">{{ $summaryStats['activated_subscriptions'] ?? 0 }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>待生效</h3>
|
||||
<div class="num-md">{{ $summaryStats['pending_subscriptions'] ?? 0 }}</div>
|
||||
<div class="num-md">
|
||||
<a class="link" href="{!! $safeFullUrlWithQuery(['status' => 'pending', 'page' => null]) !!}">{{ $summaryStats['pending_subscriptions'] ?? 0 }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>已取消</h3>
|
||||
<div class="num-md">{{ $summaryStats['cancelled_subscriptions'] ?? 0 }}</div>
|
||||
<div class="num-md">
|
||||
<a class="link" href="{!! $safeFullUrlWithQuery(['status' => 'cancelled', 'page' => null]) !!}">{{ $summaryStats['cancelled_subscriptions'] ?? 0 }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>已过期(按到期时间)</h3>
|
||||
<div class="num-md">{{ $summaryStats['expired_subscriptions'] ?? 0 }}</div>
|
||||
<div class="num-md">
|
||||
<a class="link" href="{!! $safeFullUrlWithQuery(['expiry' => 'expired', 'page' => null]) !!}">{{ $summaryStats['expired_subscriptions'] ?? 0 }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card">
|
||||
<h3>7天内到期</h3>
|
||||
<div class="num-md">{{ $summaryStats['expiring_7d_subscriptions'] ?? 0 }}</div>
|
||||
<div class="num-md">
|
||||
<a class="link" href="{!! $safeFullUrlWithQuery(['expiry' => 'expiring_7d', 'page' => null]) !!}">{{ $summaryStats['expiring_7d_subscriptions'] ?? 0 }}</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Tests\Feature;
|
||||
|
||||
use Illuminate\Foundation\Testing\RefreshDatabase;
|
||||
use Tests\TestCase;
|
||||
|
||||
class AdminSiteSubscriptionIndexSummaryCardsAreClickableTest extends TestCase
|
||||
{
|
||||
use RefreshDatabase;
|
||||
|
||||
protected function loginAsPlatformAdmin(): void
|
||||
{
|
||||
$this->seed();
|
||||
|
||||
$this->post('/admin/login', [
|
||||
'email' => 'platform.admin@demo.local',
|
||||
'password' => 'Platform@123456',
|
||||
])->assertRedirect('/admin');
|
||||
}
|
||||
|
||||
public function test_summary_cards_should_link_to_filtered_sets(): void
|
||||
{
|
||||
$this->loginAsPlatformAdmin();
|
||||
|
||||
$this->get('/admin/site-subscriptions')
|
||||
->assertOk()
|
||||
->assertSee('订阅总数')
|
||||
->assertSee('已生效')
|
||||
->assertSee('待生效')
|
||||
->assertSee('已取消')
|
||||
->assertSee('已过期(按到期时间)')
|
||||
->assertSee('7天内到期')
|
||||
->assertSee('status=activated', false)
|
||||
->assertSee('status=pending', false)
|
||||
->assertSee('status=cancelled', false)
|
||||
->assertSee('expiry=expired', false)
|
||||
->assertSee('expiry=expiring_7d', false);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user