actionOfGetData()) { $options = $this->getSnOptions(); if (!request()->has('sn') && count($options) > 0) { request()->offsetSet('sn', $options[0]); } return $this->response()->success($this->service->list()); } if ($this->actionOfExport()) { return $this->export(); } return $this->response()->success($this->list()); } public function list(): Page { $options = $this->getSnOptions(); $crud = $this->baseCRUD() ->filterTogglable(false) ->columnsTogglable(false) ->headerToolbar([ $this->exportAction() ]) ->footerToolbar([]) ->loadDataOnce() ->filter($this->baseFilter()->actions()->body([ amisMake()->SelectControl()->name('sn')->label(__('user_rank.sn'))->options($options)->value(count($options) > 0 ? $options[0] : '')->size('md'), amisMake()->Component()->setType('submit')->label(__('admin.search'))->level('primary'), ])) ->columns([ amisMake()->TableColumn()->name('cate.name')->label(__('user_rank.cate_id')), amisMake()->TableColumn()->name('sort')->label(__('user_rank.sort'))->set('type', 'tpl')->tpl('${(start - 1) * size + index + 1}'), amisMake()->TableColumn()->name('score')->label(__('user_rank.score')), ]); return $this->baseList($crud); } public function getSnOptions() { if (!$this->snOptions) { $this->snOptions = CateRank::select('sn')->groupBy('sn')->orderBy('sn', 'desc')->pluck('sn'); } return $this->snOptions; } protected function exportAction($disableSelectedItem = false) { $event = fn($script) => ['click' => ['actions' => [['actionType' => 'custom', 'script' => $script]]]]; $downloadPath = '/' . admin_url('_download_export', true); $exportPath = $this->getExportPath(); $doAction = <<set('icon', 'fa-solid fa-download') ->align('right') ->onEvent($event( <<getSnOptions(), 0)); // 默认在 storage/app/ 下 $path = __('user_rank.cate_rank') . '-' . $sn . '.xlsx'; // 此处使用 laravel-excel 导出,可自行修改 (new \App\Exports\CateRank)->store($path, 'local'); return $this->response()->success(compact('path')); } }