feat: 增强代理结算和账单管理功能
- 在多个控制器中引入 SettlementPartyEnrichment 服务,以优化代理结算和账单的处理逻辑。 - 更新 AgentSettlementBillIndexController 和 AgentSettlementBillShowController,支持根据账单 ID 和关键字进行查询。 - 在 AgentSettlementPeriodCloseController 中添加对站点管理权限的验证,确保只有具备相应权限的管理员能够关闭账期。 - 在 AgentSettlementPeriodIndexController 中更新账期数据的返回格式,提升数据的完整性和可用性。 - 引入对相对占成比例的支持,增强代理资料的管理能力,确保数据一致性。
This commit is contained in:
@@ -129,6 +129,7 @@ final class AdminAuthorizationRegistry
|
||||
* 后台菜单注册表。前端侧栏与面包屑都消费这里派生的结果。
|
||||
*
|
||||
* platform_only:仅超管可见(全局 RBAC、接入站点、赔率规则等);代理账号走代理控制台与子级授权。
|
||||
* agent_hidden:代理账号不可见(如主站钱包流水、对账等仅平台管理员可见的菜单)。
|
||||
*
|
||||
* @return list<array{
|
||||
* segment: string,
|
||||
@@ -136,6 +137,7 @@ final class AdminAuthorizationRegistry
|
||||
* href: string,
|
||||
* nav_group: string,
|
||||
* platform_only?: bool,
|
||||
* agent_hidden?: bool,
|
||||
* activeMatchPrefix?: string,
|
||||
* requiredAny?: list<string>
|
||||
* }>
|
||||
@@ -150,8 +152,8 @@ final class AdminAuthorizationRegistry
|
||||
['segment' => 'tickets', 'label' => 'Tickets', 'href' => '/admin/tickets', 'nav_group' => 'operations', 'requiredAny' => ['prd.tickets.view']],
|
||||
['segment' => 'players', 'label' => 'Players', 'href' => '/admin/players', 'nav_group' => 'operations', 'requiredAny' => ['prd.users.manage', 'prd.users.view_finance', 'prd.users.view_cs', 'prd.player_freeze.manage']],
|
||||
['segment' => 'settlement', 'label' => 'Settlement', 'href' => '/admin/settlement-batches', 'nav_group' => 'operations', 'requiredAny' => ['prd.payout.manage', 'prd.payout.review', 'prd.payout.view']],
|
||||
['segment' => 'wallet', 'label' => 'Wallet', 'href' => '/admin/wallet/transactions', 'nav_group' => 'finance', 'activeMatchPrefix' => '/admin/wallet', 'requiredAny' => ['prd.wallet_reconcile.manage', 'prd.wallet_reconcile.view', 'prd.wallet_reconcile.view_cs', 'prd.wallet_adjust.manage', 'prd.users.manage', 'prd.users.view_finance']],
|
||||
['segment' => 'reconcile', 'label' => 'Reconcile', 'href' => '/admin/reconcile', 'nav_group' => 'finance', 'requiredAny' => ['prd.wallet_reconcile.manage', 'prd.wallet_reconcile.view', 'prd.wallet_reconcile.view_cs']],
|
||||
['segment' => 'wallet', 'label' => 'Wallet', 'href' => '/admin/wallet/transactions', 'nav_group' => 'finance', 'activeMatchPrefix' => '/admin/wallet', 'requiredAny' => ['prd.wallet_reconcile.manage', 'prd.wallet_reconcile.view', 'prd.wallet_reconcile.view_cs', 'prd.wallet_adjust.manage', 'prd.users.manage', 'prd.users.view_finance'], 'agent_hidden' => true],
|
||||
['segment' => 'reconcile', 'label' => 'Reconcile', 'href' => '/admin/reconcile', 'nav_group' => 'finance', 'requiredAny' => ['prd.wallet_reconcile.manage', 'prd.wallet_reconcile.view', 'prd.wallet_reconcile.view_cs'], 'agent_hidden' => true],
|
||||
['segment' => 'reports', 'label' => 'Reports', 'href' => '/admin/reports', 'nav_group' => 'finance', 'requiredAny' => ['prd.report.view']],
|
||||
['segment' => 'rules_plays', 'label' => 'Play rules', 'href' => '/admin/rules/plays', 'nav_group' => 'rules', 'platform_only' => true, 'requiredAny' => ['prd.play_switch.manage', 'prd.odds.manage', 'prd.odds.view']],
|
||||
['segment' => 'rules_odds', 'label' => 'Odds & rebate', 'href' => '/admin/rules/odds', 'nav_group' => 'rules', 'platform_only' => true, 'requiredAny' => ['prd.odds.manage', 'prd.rebate.manage', 'prd.rebate.view']],
|
||||
@@ -273,6 +275,9 @@ final class AdminAuthorizationRegistry
|
||||
* segment: string,
|
||||
* label: string,
|
||||
* href: string,
|
||||
* nav_group: string,
|
||||
* platform_only?: bool,
|
||||
* agent_hidden?: bool,
|
||||
* activeMatchPrefix?: string,
|
||||
* requiredAny?: list<string>
|
||||
* }>
|
||||
@@ -290,6 +295,7 @@ final class AdminAuthorizationRegistry
|
||||
* href: string,
|
||||
* nav_group: string,
|
||||
* platform_only?: bool,
|
||||
* agent_hidden?: bool,
|
||||
* activeMatchPrefix?: string,
|
||||
* requiredAny?: list<string>
|
||||
* }>
|
||||
@@ -298,14 +304,19 @@ final class AdminAuthorizationRegistry
|
||||
{
|
||||
$granted = array_fill_keys($permissionSlugs, true);
|
||||
$isSuperAdmin = $admin === null || $admin->isSuperAdmin();
|
||||
$isAgent = $admin !== null && $admin->isAgentAccount();
|
||||
|
||||
return array_values(array_filter(
|
||||
self::navigationItems(),
|
||||
static function (array $item) use ($granted, $isSuperAdmin): bool {
|
||||
static function (array $item) use ($granted, $isSuperAdmin, $isAgent): bool {
|
||||
if (($item['platform_only'] ?? false) && ! $isSuperAdmin) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (($item['agent_hidden'] ?? false) && $isAgent) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$required = $item['requiredAny'] ?? [];
|
||||
if ($required === []) {
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user