$this->selectedKpCode, 'difficulty' => $this->selectedDifficulty, 'type' => $this->selectedType, 'search' => $this->search, ], fn ($value) => filled($value)); $response = $service->listQuestions($this->currentPage, $this->perPage, $filters); return $response['data'] ?? []; } #[Computed(cache: false)] public function meta(): array { $service = app(QuestionServiceApi::class); $filters = array_filter([ 'kp_code' => $this->selectedKpCode, 'difficulty' => $this->selectedDifficulty, 'type' => $this->selectedType, 'search' => $this->search, ], fn ($value) => filled($value)); $response = $service->listQuestions($this->currentPage, $this->perPage, $filters); return $response['meta'] ?? ['page' => 1, 'per_page' => 25, 'total' => 0, 'total_pages' => 0]; } #[Computed(cache: false)] public function statistics(): array { return app(QuestionServiceApi::class)->getStatistics(); } #[Computed(cache: false)] public function knowledgePointOptions(): array { return app(QuestionServiceApi::class)->getKnowledgePointOptions(); } public function deleteQuestion(string $questionCode): void { try { $service = app(QuestionBankService::class); $result = $service->deleteQuestion($questionCode); if ($result) { Notification::make()->title('删除成功')->body("题目 {$questionCode} 已删除")->success()->send(); $this->dispatch('refresh-page'); } else { Notification::make()->title('删除失败')->body("题目 {$questionCode} 不存在或已被删除")->warning()->send(); } } catch (\Exception $e) { Notification::make()->title('删除异常')->body($e->getMessage())->danger()->send(); } } public function updatedSearch(): void { $this->currentPage = 1; } public function updatedSelectedKpCode(): void { $this->currentPage = 1; } public function updatedSelectedDifficulty(): void { $this->currentPage = 1; } public function updatedSelectedType(): void { $this->currentPage = 1; } public function updatedPerPage(): void { $this->currentPage = 1; } public function gotoPage(int $page): void { $this->currentPage = $page; } public function previousPage(): void { if ($this->currentPage > 1) { $this->currentPage--; } } public function nextPage(): void { if ($this->currentPage < ($this->meta['total_pages'] ?? 1)) { $this->currentPage++; } } public function getPages(): array { $totalPages = $this->meta['total_pages'] ?? 1; $currentPage = $this->currentPage; $pages = []; $start = max(1, $currentPage - 2); $end = min($totalPages, $currentPage + 2); for ($i = $start; $i <= $end; $i++) { $pages[] = $i; } return $pages; } }