input("filters.{$key}.value", request()->input("tableFilters.{$key}.value")); } private function getActiveKeyword(array $filters): ?string { $keyword = $this->pickFilterValue($filters, 'keyword'); if (filled($keyword)) { return trim((string) $keyword); } if (filled($this->tableSearch)) { return trim((string) $this->tableSearch); } $search = request()->input('search'); return filled($search) ? trim((string) $search) : null; } protected function getHeaderActions(): array { return [ Actions\CreateAction::make() ->label('新建教材'), ]; } protected function paginateTableQuery(\Illuminate\Database\Eloquent\Builder $query): Paginator { return $this->getTableRecords(); } public function getTableRecords(): Paginator { $apiService = app(TextbookApiService::class); $page = max(1, (int) $this->getTablePage()); $perPageOption = $this->getTableRecordsPerPage(); $perPage = is_numeric($perPageOption) ? (int) $perPageOption : 10; $perPage = min(max($perPage, 10), 50); $filters = $this->tableFilters ?? []; $seriesId = $this->pickFilterValue($filters, 'series_id'); $stage = $this->pickFilterValue($filters, 'stage'); $grade = $this->pickFilterValue($filters, 'grade'); $semester = $this->pickFilterValue($filters, 'semester'); $namingScheme = $this->pickFilterValue($filters, 'naming_scheme'); $status = $this->pickFilterValue($filters, 'status'); $keyword = $this->getActiveKeyword($filters); $params = [ 'page' => $page, 'per_page' => $perPage, 'series_id' => $seriesId, 'stage' => $stage, 'grade' => $grade, 'semester' => $semester, 'naming_scheme' => $namingScheme, 'status' => $status, 'keyword' => $keyword, ]; $params = array_filter($params, fn ($value) => $value !== null && $value !== ''); \Log::info('ManageTextbooks::getTableRecords called', [ 'page' => $page, 'perPage' => $perPage, 'series_id' => $seriesId, 'tableFilters' => $filters, 'tableSearch' => $this->tableSearch, 'resolved_params' => $params, ]); $result = $apiService->getTextbooks($params); \Log::info('API result', [ 'total' => $result['meta']['total'] ?? 0, 'count' => count($result['data'] ?? []) ]); $records = collect($result['data'] ?? [])->map(function ($item) { $model = new \App\Models\Textbook(); // 直接设置属性 foreach ($item as $key => $value) { $model->setAttribute($key, $value); } $model->exists = true; // 确保ID被正确设置 if (isset($item['id'])) { $model->id = $item['id']; } // 设置关联 if (isset($item['series'])) { $seriesModel = new \App\Models\TextbookSeries(); foreach ($item['series'] as $key => $value) { $seriesModel->setAttribute($key, $value); } $seriesModel->exists = true; $model->setRelation('series', $seriesModel); } return $model; }); return new LengthAwarePaginator( $records, $result['meta']['total'] ?? 0, $perPage, $page, ['path' => request()->url()] ); } }