first(); abort_if(empty($section), 403, '当前账号没有已授权的侧边栏功能。'); $page = collect($section['pages'] ?? [])->first(); $parameters = ['section' => $section['slug']]; if ($page) { $parameters['page'] = $page['slug']; if (! empty($page['tabs'])) { $parameters['tab'] = $page['tabs'][0]['slug']; } } return redirect()->route('business.pages.show', $parameters); } public function show(string $section, ?string $page = null, ?string $tab = null) { $sectionConfig = collect(SidebarPermissions::navigationFor(user()))->firstWhere('slug', $section); abort_if(empty($sectionConfig), 403, '当前账号没有该页面权限。'); $pages = collect($sectionConfig['pages'] ?? []); if ($pages->isEmpty()) { abort_if($page !== null || $tab !== null, 404); return view('business.pages.show', [ 'section' => $sectionConfig, 'page' => null, 'tabs' => collect(), 'activeTab' => null, ]); } if ($page === null) { return $this->redirectToPage($sectionConfig, $pages->first()); } $pageConfig = $pages->firstWhere('slug', $page); abort_if(empty($pageConfig), 404); // 如果该 page 是一个 children-only 的父级分组,访问它时跳到第一个子页面 if (! empty($pageConfig['children']) && empty($pageConfig['tabs'])) { return $this->redirectToPage($sectionConfig, $pageConfig['children'][0]); } $tabs = collect($pageConfig['tabs'] ?? []); if ($tabs->isEmpty()) { abort_if($tab !== null, 404); return view('business.pages.show', [ 'section' => $sectionConfig, 'page' => $pageConfig, 'tabs' => $tabs, 'activeTab' => null, ]); } if ($tab === null) { return $this->redirectToPage($sectionConfig, $pageConfig); } $activeTab = $tabs->firstWhere('slug', $tab); abort_if(empty($activeTab), 404); $content = $this->resolveContent($page, $tab); return view('business.pages.show', [ 'section' => $sectionConfig, 'page' => $pageConfig, 'tabs' => $tabs, 'activeTab' => $activeTab, 'content' => $content, ]); } /** * 根据页面和标签加载对应的业务内容数据 */ protected function resolveContent(string $page, string $tab): ?array { return match ($page) { 'marketing-account-bills' => $this->contentForMarketingAccountBills($tab), default => null, }; } /** * 营销账户账单 - 加载指定平台的数据 * 淘系支付宝、拼多多使用独立的流水账单表,其他平台使用通用汇总账单表 */ protected function contentForMarketingAccountBills(string $tab): ?array { if (!in_array($tab, self::MARKETING_PLATFORMS, true)) { return null; } // 淘系支付宝 - 使用独立的流水账单表(8字段) if ($tab === 'taobao-alipay') { return [ 'view' => 'banking.marketing_taobao_alipay_bills.partials.embedded-table', 'bills' => MarketingTaobaoAlipayBill::orderBy('transaction_date', 'desc') ->orderBy('id', 'desc') ->paginate(setting('default.list_limit', 25)), ]; } // 拼多多 - 使用独立的流水账单表(7字段) if ($tab === 'pinduoduo') { return [ 'view' => 'banking.marketing_pinduoduo_bills.partials.embedded-table', 'bills' => MarketingPinduoduoBill::orderBy('transaction_time', 'desc') ->orderBy('id', 'desc') ->paginate(setting('default.list_limit', 25)), ]; } // 其他平台 - 使用通用汇总账单表(15字段) return [ 'view' => 'banking.marketing_account_bills.partials.embedded-table', 'platform' => $tab, 'accounts' => MarketingAccountBill::platform($tab) ->orderBy('bill_date', 'desc') ->orderBy('id', 'desc') ->paginate(setting('default.list_limit', 25)), ]; } protected function redirectToPage(array $section, array $page) { $parameters = [ 'section' => $section['slug'], 'page' => $page['slug'], ]; if (! empty($page['tabs'])) { $parameters['tab'] = $page['tabs'][0]['slug']; } return redirect()->route('business.pages.show', $parameters); } }