repo = new GoodsReconciliationRepository(); } /** * 货款对账列表(分页 + 筛选) */ public function index() { $filters = $this->buildFilters(); $page = max((int) request('page', 1), 1); $limit = $this->limit(); $result = $this->repo->list($filters, $page, $limit); return response()->json([ 'data' => $result['data'], 'total' => $result['total'], 'page' => $page, 'per_page' => $limit, 'last_page' => (int) ceil($result['total'] / $limit), ]); } /** * 汇总统计卡片 */ public function summary() { $filters = $this->buildFilters(); $summary = $this->repo->summary($filters); return response()->json($summary); } /** * 筛选器选项(供应商/仓库下拉列表等) */ public function options() { $options = $this->repo->filterOptions(); return response()->json($options); } // =================================================================== // Helpers // =================================================================== /** * 从请求参数构建筛选条件 */ private function buildFilters(): array { $filters = []; // 记录类型 if ($type = request('record_type')) { $filters['record_type'] = $type; // purchase | sale | all } // 文本筛选 $textFields = ['supplier', 'stock_no', 'purchase_no', 'product_code', 'express_no', 'warehouse']; foreach ($textFields as $field) { if ($val = request($field)) { $filters[$field] = trim($val); } } // 日期范围 $dateFields = ['send_time_from', 'send_time_to', 'create_time_from', 'create_time_to']; foreach ($dateFields as $field) { if ($val = request($field)) { $filters[$field] = $val; } } // 发出状态 if (($sent = request('sent_status')) && $sent !== 'all') { $filters['sent_status'] = $sent; // sent | unsent } // 是否有差异 if (request('has_diff')) { $filters['has_diff'] = true; } return $filters; } private function limit(): int { return min(max((int) request('limit', 25), 1), 100); } }