新增店铺违规信息预警子页面 #230

Merged
sumu merged 1 commits from feature/sumu-store-violation-alert into main 2026-09-21 12:56:36 +08:00
5 changed files with 54 additions and 8 deletions

View File

@ -630,7 +630,9 @@ $navigation = [
'slug' => 'financial-risk-control',
'title' => '财务经营风险管控',
'icon' => 'security',
'pages' => [],
'pages' => [
['slug' => 'store-violation-alert', 'title' => '店铺违规信息预警'],
],
],
[
'slug' => 'financial-sw',

View File

@ -1,3 +1,10 @@
@php
$emptyStateId = $emptyStateId ?? 'financial-risk-control-empty-title';
$emptyStateIcon = $emptyStateIcon ?? 'security';
$emptyStateTitle = $emptyStateTitle ?? '暂无风险事项';
$emptyStateDescription = $emptyStateDescription ?? '风险规则和数据接入后,相关事项将在此展示。';
@endphp
<style>
.financial-risk-control-empty {
display: flex;
@ -45,12 +52,12 @@
}
</style>
<section class="financial-risk-control-empty" aria-labelledby="financial-risk-control-empty-title">
<section class="financial-risk-control-empty" aria-labelledby="{{ $emptyStateId }}">
<div>
<span class="financial-risk-control-empty__icon" aria-hidden="true">
<span class="material-icons-outlined">security</span>
<span class="material-icons-outlined">{{ $emptyStateIcon }}</span>
</span>
<h2 class="financial-risk-control-empty__title" id="financial-risk-control-empty-title">暂无风险事项</h2>
<p class="financial-risk-control-empty__description">风险规则和数据接入后,相关事项将在此展示。</p>
<h2 class="financial-risk-control-empty__title" id="{{ $emptyStateId }}">{{ $emptyStateTitle }}</h2>
<p class="financial-risk-control-empty__description">{{ $emptyStateDescription }}</p>
</div>
</section>

View File

@ -0,0 +1,6 @@
@include('business.pages.financial-risk-control.index', [
'emptyStateId' => 'store-violation-alert-empty-title',
'emptyStateIcon' => 'warning_amber',
'emptyStateTitle' => '暂无店铺违规预警',
'emptyStateDescription' => '违规规则和店铺数据接入后,相关预警将在此展示。',
])

View File

@ -54,14 +54,27 @@ class NavigationTest extends FeatureTestCase
$this->assertSame('financial-sw', $slugs[$riskControlIndex + 1]);
$this->assertSame('财务经营风险管控', $navigation[$riskControlIndex]['title']);
$this->assertSame('security', $navigation[$riskControlIndex]['icon']);
$this->assertSame([], $navigation[$riskControlIndex]['pages']);
$this->assertSame([
['slug' => 'store-violation-alert', 'title' => '店铺违规信息预警'],
], $navigation[$riskControlIndex]['pages']);
$this->loginAs()
->get(route('business.pages.show', ['section' => 'financial-risk-control']))
->assertRedirect(route('business.pages.show', [
'section' => 'financial-risk-control',
'page' => 'store-violation-alert',
]));
$this->get(route('business.pages.show', [
'section' => 'financial-risk-control',
'page' => 'store-violation-alert',
]))
->assertOk()
->assertSeeText('财务经营风险管控')
->assertSeeText('暂无风险事项')
->assertSee('/workspace/financial-risk-control', false);
->assertSeeText('店铺违规信息预警')
->assertSeeText('暂无店铺违规预警')
->assertSeeText('违规规则和店铺数据接入后,相关预警将在此展示。')
->assertSee('/workspace/financial-risk-control/store-violation-alert', false);
}
public function testGroupedNavigationKeepsRestrictedPagePermissions(): void

View File

@ -128,6 +128,24 @@ class UserPermissionsTest extends FeatureTestCase
$this->assertSame(['subject-trademark-rules'], $pages->pluck('slug')->all());
}
public function test_financial_risk_control_section_permission_includes_store_violation_alert(): void
{
$regular = $this->account('user');
$subject = 'user_'.$regular->id;
setting()->set('system.sidebar_permissions', [
'configured' => [$subject],
'subjects' => [$subject => ['financial-risk-control']],
]);
$navigation = SidebarPermissions::navigationFor($regular);
$this->assertSame(['financial-risk-control'], array_column($navigation, 'slug'));
$this->assertSame(
['store-violation-alert'],
array_column($navigation[0]['pages'], 'slug')
);
}
public function test_legacy_small_payment_permission_follows_the_page_to_financial_operations(): void
{
$regular = $this->account('user');