baseCRUD() ->filterTogglable(false) ->columnsTogglable(false) ->alwaysShowPagination() ->headerToolbar([ $this->createButton(true), $this->exportAction(), ]) ->filter($this->baseFilter()->actions()->body([ amisMake()->TextControl()->name('keyword')->label(__('user.keyword'))->size('md')->placeholder(__('user.phone') . '或' . __('user.name'))->clearable(), // amisMake()->Button()->label(__('admin.reset'))->actionType('clear-and-submit'), amisMake()->Component()->setType('submit')->label(__('admin.search'))->level('primary'), ])) ->columns([ amisMake()->TableColumn()->name('id')->label(__('user.id')), amisMake()->TableColumn()->name('phone')->label(__('user.phone')), amisMake()->TableColumn()->name('name')->label(__('user.name')), amisMake()->TableColumn()->name('sex_text')->label(__('user.sex')), amisMake()->TableColumn()->name('age')->label(__('user.age')), amisMake()->TableColumn()->name('address')->label(__('user.address')), amisMake()->TableColumn()->name('created_at')->label(__('user.created_at')), $this->rowActions(true), ]); return $this->baseList($crud); } public function form($isEdit): Form { return $this->baseForm()->body([ amisMake()->TextControl()->name('phone')->label(__('user.phone'))->required(), amisMake()->TextControl()->set('type', 'input-password')->name('password')->label(__('user.password'))->required(!$isEdit), amisMake()->TextControl()->name('name')->label(__('user.name')), amisMake()->SelectControl()->options(Gender::options())->name('sex')->label(__('user.sex')), amisMake()->TextControl()->name('address')->label(__('user.address')), amisMake()->DateControl()->name('birthday')->label(__('user.birthday')), ]); } public function detail() { return $this->baseDetail()->body([ amisMake()->TextControl()->name('id')->label(__('user.id'))->static(), amisMake()->TextControl()->name('phone')->label(__('user.phone'))->static(), amisMake()->TextControl()->name('name')->label(__('user.name'))->static(), amisMake()->TextControl()->name('sex_text')->label(__('user.sex'))->static(), amisMake()->TextControl()->name('age')->label(__('user.age'))->static(), amisMake()->DateControl()->name('birthday')->label(__('user.birthday'))->static(), amisMake()->TextControl()->name('address')->label(__('user.address'))->static(), amisMake()->DateTimeControl()->name('created_at')->label(__('user.created_at'))->static(), ]); } public function getList(Request $request) { $list = $this->service->listQuery()->get(); return $this->response()->success($list); } protected function exportAction($disableSelectedItem = false) { $event = fn($script) => ['click' => ['actions' => [['actionType' => 'custom', 'script' => $script]]]]; $downloadPath = '/' . admin_url('_download_export', true); $exportPath = $this->getExportPath(); $doAction = <<onEvent( $event(<<DropdownButton() ->label(__('admin.export.title')) ->set('icon', 'fa-solid fa-download') ->buttons($buttons) ->align('right') ->closeOnClick(); } protected function export() { // 默认在 storage/app/ 下 $path = sprintf('%s-%s.xlsx', $this->exportFileName(), date('YmdHis')); // 导出本页和导出选中项都是通过 _ids 查询 $ids = request()->input('_ids'); // listQuery() 为列表查询条件,与获取列表数据一致 $query = $this->service->listQuery() ->when($ids, fn($query) => $query->whereIn($this->service->primaryKey(), explode(',', $ids))); // 此处使用 laravel-excel 导出,可自行修改 AdminExport::make($query) ->setHeadings([ __('user.id'), __('user.phone'), __('user.name'), __('user.sex'), __('user.age'), __('user.birthday'), __('user.address'), __('user.created_at'), ]) ->setMap(function ($item) { return [ $item->id, $item->phone, $item->name, $item->sex_text, $item->age, $item->birthday_format, $item->address, $item->created_at, ]; }) ->store($path); return $this->response()->success(compact('path')); } }