Dashboard:收费工作台快捷入口收敛为治理导向 + 平台定位(运营版)断言护栏

This commit is contained in:
萝卜
2026-03-17 07:18:46 +08:00
parent 8bd838c0b6
commit f50272ffc9
5 changed files with 118 additions and 11 deletions

View File

@@ -354,6 +354,8 @@ class DashboardController extends Controller
'recentPlatformOrders' => $recentPlatformOrders,
'dashboardRangeFrom7d' => $dashboardRangeFrom7d,
'dashboardRangeTo7d' => $dashboardRangeTo7d,
// 注意:旧版的 platformPositioning 已弃用;当前仪表盘使用 platformOpsOverview 作为“平台定位(运营版)”的数据源。
// 这里先移除 platformPositioning避免遗留变量命名不一致导致 /admin 500破坏 Dashboard 回归基线。
'planOrderShare' => $planOrderShare,
'planOrderShareTotal' => (int) $planOrderShareTotal,
'planIdToName' => $planIdToName,

View File

@@ -301,18 +301,24 @@
</div>
<div class="mt-12">
<div class="muted">平台订单快捷筛选:</div>
<div class="muted">平台订单快捷筛选(只保留“点完能做事”的治理入口)</div>
<div class="actions mt-8" data-role="dashboard-po-quick-links">
<a class="btn btn-secondary btn-sm" data-role="dashboard-po-quicklink-bmpa-processable" href="{!! $platformOrdersQuickLinks['unpaid_pending'] !!}">可BMPA处理{{ (int) ($stats['platform_orders_unpaid_pending'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" data-role="dashboard-po-quicklink-syncable" href="{!! $platformOrdersQuickLinks['syncable_only'] !!}">可同步({{ (int) ($stats['platform_orders_syncable'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" data-role="dashboard-po-quicklink-sync-failed" href="{!! $platformOrdersQuickLinks['sync_failed'] !!}">同步失败({{ (int) ($stats['platform_orders_sync_failed'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" data-role="dashboard-po-quicklink-no-receipt" href="{!! $platformOrdersQuickLinks['paid_no_receipt'] !!}">无回执({{ (int) ($stats['platform_orders_paid_no_receipt'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" data-role="dashboard-po-quicklink-reconcile-mismatch" href="{!! $platformOrdersQuickLinks['reconcile_mismatch'] !!}">对账不一致({{ (int) ($stats['platform_orders_reconcile_mismatch'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" data-role="dashboard-po-quicklink-refund-inconsistent" href="{!! $platformOrdersQuickLinks['refund_inconsistent'] !!}">退款不一致({{ (int) ($stats['platform_orders_refund_inconsistent'] ?? 0) }}</a>
</div>
<details class="mt-10" data-role="dashboard-po-advanced-links">
<summary class="muted">高级筛选(少用,默认收起)</summary>
<div class="actions mt-8">
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['unpaid_pending'] !!}">待支付({{ (int) ($stats['platform_orders_unpaid_pending'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['paid_pending'] !!}">待生效({{ (int) ($stats['platform_orders_paid_pending'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['syncable_only'] !!}">可同步({{ (int) ($stats['platform_orders_syncable'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['sync_failed'] !!}">同步失败({{ (int) ($stats['platform_orders_sync_failed'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['renewal_missing_subscription'] !!}">续费缺订阅({{ (int) ($stats['platform_orders_renewal_missing_subscription'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['bmpa_failed'] !!}">BMPA失败{{ (int) ($stats['platform_orders_bmpa_failed'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['paid_no_receipt'] !!}">无回执({{ (int) ($stats['platform_orders_paid_no_receipt'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['reconcile_mismatch'] !!}">对账不一致({{ (int) ($stats['platform_orders_reconcile_mismatch'] ?? 0) }}</a>
<a class="btn btn-secondary btn-sm" href="{!! $platformOrdersQuickLinks['refund_inconsistent'] !!}">退款不一致({{ (int) ($stats['platform_orders_refund_inconsistent'] ?? 0) }}</a>
</div>
</details>
@php
$poTotal = (int) ($stats['platform_orders'] ?? 0);

View File

@@ -0,0 +1,47 @@
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class AdminDashboardBillingWorkbenchQuickLinksShouldBeGovernanceOrientedTest 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_dashboard_billing_workbench_quick_links_should_be_governance_oriented(): void
{
$this->loginAsPlatformAdmin();
$res = $this->get('/admin');
$res->assertOk();
$html = (string) $res->getContent();
// 快捷区:只保留“点完能做事”的治理入口(<=7当前为 6
$this->assertStringContainsString('data-role="dashboard-po-quick-links"', $html);
$this->assertStringContainsString('待支付', $html);
$this->assertStringContainsString('可同步', $html);
$this->assertStringContainsString('同步失败', $html);
$this->assertStringContainsString('无回执', $html);
$this->assertStringContainsString('对账不一致', $html);
$this->assertStringContainsString('退款不一致', $html);
// 高级筛选:默认收起(存在即可),承载“非高频动作入口”
$this->assertStringContainsString('data-role="dashboard-po-advanced-links"', $html);
$this->assertStringContainsString('高级筛选', $html);
$this->assertStringContainsString('待生效', $html);
$this->assertStringContainsString('续费缺订阅', $html);
$this->assertStringContainsString('BMPA失败', $html);
}
}

View File

@@ -30,6 +30,19 @@ class AdminDashboardPlatformOpsOverviewShouldRenderTest extends TestCase
$this->assertStringContainsString('data-role="dashboard-platform-ops-overview"', $html);
$this->assertStringContainsString('平台定位(运营版)', $html);
// 北极星指标
$this->assertStringContainsString('近30天已收款', $html);
$this->assertStringContainsString('活跃付费站点', $html);
$this->assertStringContainsString('续费成功率30天', $html);
// 漏斗近7天
$this->assertStringContainsString('收款漏斗近7天', $html);
$this->assertStringContainsString('待支付', $html);
$this->assertStringContainsString('已支付', $html);
$this->assertStringContainsString('已生效', $html);
// 待处理治理 Top3
$this->assertStringContainsString('待处理治理Top3', $html);
$this->assertStringContainsString('可BMPA', $html);
$this->assertStringContainsString('可同步', $html);

View File

@@ -0,0 +1,39 @@
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class AdminDashboardPlatformPositioningShouldRenderTest 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_platform_positioning_should_render_core_metrics_and_top3_governance_links(): void
{
$this->loginAsPlatformAdmin();
$res = $this->get('/admin');
$res->assertOk();
$html = (string) $res->getContent();
$this->assertStringContainsString('data-role="dashboard-platform-ops-overview"', $html);
$this->assertStringContainsString('平台定位(运营版)', $html);
$this->assertStringContainsString('近30天已收款', $html);
$this->assertStringContainsString('活跃付费站点', $html);
$this->assertStringContainsString('续费成功率30天', $html);
$this->assertStringContainsString('收款漏斗近7天', $html);
$this->assertStringContainsString('待处理治理Top3', $html);
}
}