WuYongJie e9ef4a9eef feat: 新增送货未定价/退货未定价/其他扣款补款/代发快递 4个子页面 + 嵌套子菜单
新增4个子功能页面:
- 送货未定价 (delivery-unpriced): pm_unOrderDetails, 265452行
- 退货未定价 (return-unpriced): finance_purchaseReturn WHERE priceB=0, 35928行
- 其他扣款补款 (other-adjustments): fys_supplierPaymentSummary WHERE other!=0, 460行
- 代发快递 (dropshipping-express): fys_express_courier_settlement, 765行

嵌套子菜单改造:
- 未定价明细下新增children嵌套结构(送货未定价+退货未定价)
- ShowInAdmin监听器支持page级dropdown嵌套
- Business\Pages控制器支持父级page跳转到第一个子页面
- SidebarPermissions支持children权限key
2026-07-21 19:17:06 +08:00

171 lines
5.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace App\Http\Controllers\Business;
use App\Models\Banking\MarketingAccountBill;
use App\Models\Banking\MarketingTaobaoAlipayBill;
use App\Models\Banking\MarketingPinduoduoBill;
use App\Utilities\SidebarPermissions;
use Illuminate\Routing\Controller;
class Pages extends Controller
{
/**
* 支持的营销账户平台列表
*/
protected const MARKETING_PLATFORMS = [
'taobao-alipay', 'taobao-wechat', 'pinduoduo',
'jd-wallet', 'douyin', 'dewu', 'vipshop',
];
public function home()
{
$section = collect(SidebarPermissions::navigationFor(user()))->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);
}
}