供应商应付(终版)页签 */ private const SUPPLIER_TITLES = [ 'product-prices' => '商品价格', 'payment-reconciliation' => '货款对账', 'return-reconciliation' => '退货对账', 'invoice-deductions' => '发票扣款', 'board-deductions' => '板材扣款', 'compensation-details' => '赔偿明细', 'advance-details' => '借支明细', 'sample-deductions' => '样品扣款', 'other-adjustments' => '其他扣款补款', 'delivery-unpriced' => '送货未定价', 'return-unpriced' => '退货未定价', 'dropshipping-express' => '代发快递', 'supplier-payables-report' => '供应商应付表', ]; /** 所有终版导入模板都带“月份”列,方便按月导入和查看。 */ private const MONTH_FIELD = ['summary_month' => ['label' => '月份', 'type' => 'month']]; public function __construct( private readonly SupplierPayableMaintenanceRegistry $supplier, private readonly ProductPriceWorkbookImporter $productPrices, private readonly CourierPayableFinalRegistry $courier, ) { } public function supports(string $section, string $dataset): bool { return array_key_exists($dataset, $this->titles($section)); } /** @return array */ public function titles(string $section): array { return match ($section) { self::SECTION_SUPPLIER => self::SUPPLIER_TITLES, self::SECTION_COURIER => $this->courier->titles(), default => [], }; } public function title(string $section, string $dataset): string { $titles = $this->titles($section); if (! array_key_exists($dataset, $titles)) { throw ValidationException::withMessages(['dataset' => '不支持该终版目录页面。']); } return $titles[$dataset]; } /** @return array */ public function fields(string $section, string $dataset): array { $this->title($section, $dataset); $fields = $section === self::SECTION_COURIER ? $this->courier->fields($dataset) : ($dataset === 'product-prices' ? $this->productPrices->templateFields() : $this->supplier->fields($dataset)); return self::MONTH_FIELD + $fields; } }