ManageTextbooks.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace App\Filament\Resources\TextbookResource\Pages;
  3. use App\Filament\Resources\TextbookResource;
  4. use App\Services\TextbookApiService;
  5. use Filament\Actions;
  6. use Filament\Resources\Pages\ListRecords;
  7. use Illuminate\Contracts\Pagination\Paginator;
  8. use Illuminate\Pagination\LengthAwarePaginator;
  9. class ManageTextbooks extends ListRecords
  10. {
  11. protected static string $resource = TextbookResource::class;
  12. protected function getHeaderActions(): array
  13. {
  14. return [
  15. Actions\CreateAction::make()
  16. ->label('新建教材'),
  17. ];
  18. }
  19. protected function paginateTableQuery(\Illuminate\Database\Eloquent\builder $query): Paginator
  20. {
  21. return $this->getTableRecords();
  22. }
  23. public function getTableRecords(): Paginator
  24. {
  25. $apiService = app(TextbookApiService::class);
  26. $page = request()->get('page', 1);
  27. $perPage = $this->getTableRecordsPerPage();
  28. \Log::info('ManageTextbooks::getTableRecords called', [
  29. 'page' => $page,
  30. 'perPage' => $perPage
  31. ]);
  32. $result = $apiService->getTextbooks([
  33. 'page' => $page,
  34. 'per_page' => $perPage,
  35. ]);
  36. \Log::info('API result', [
  37. 'total' => $result['meta']['total'] ?? 0,
  38. 'count' => count($result['data'] ?? [])
  39. ]);
  40. $records = collect($result['data'] ?? [])->map(function ($item) {
  41. $model = new \App\Models\Textbook();
  42. // 直接设置属性
  43. foreach ($item as $key => $value) {
  44. $model->setAttribute($key, $value);
  45. }
  46. $model->exists = true;
  47. // 确保ID被正确设置
  48. if (isset($item['id'])) {
  49. $model->id = $item['id'];
  50. }
  51. // 设置关联
  52. if (isset($item['series'])) {
  53. $seriesModel = new \App\Models\TextbookSeries();
  54. foreach ($item['series'] as $key => $value) {
  55. $seriesModel->setAttribute($key, $value);
  56. }
  57. $seriesModel->exists = true;
  58. $model->setRelation('series', $seriesModel);
  59. }
  60. return $model;
  61. });
  62. return new LengthAwarePaginator(
  63. $records,
  64. $result['meta']['total'] ?? 0,
  65. $perPage,
  66. $page,
  67. ['path' => request()->url()]
  68. );
  69. }
  70. }