需求分析
laravel-admin是自帶導出功能的,但是並不是能夠符合我們的需求,
首先它導出的時候,文件的名字,是以當前列表查詢的主表爲名字
其次,字段也不是中文的,那麼就需要我們通過compose去安裝工具來實現這個功能,
當讓,用原生的php去實現也是可以的!
安裝
composer require maatwebsite/excel:~3.1.0
使用
在Admin文件夾下新建一個文件夾,用來存放導出各個列表的導出文件
以用戶列表的導出爲例子,新建導出類UserExport.php 代碼內容如下:
代碼的註釋會寫在代碼旁邊
<?php
namespace App\Admin\Exports;
use App\Enum\PositionStatus;
use App\Enum\UserEnum;
use Encore\Admin\Grid\Exporters\ExcelExporter;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
class UserExport extends ExcelExporter implements WithMapping, WithHeadings, ShouldAutoSize
{
//這裏是導出來的文件的名字和格式
protected $fileName = '用戶列表.xlsx';
//這裏是excel的標題
public function headings(): array
{
return [
'編號',
'會員賬號',
'會員名稱',
'代理名稱',
'金額',
'來源',
'所屬管理員',
'認證',
'是否允許開倉',
'創建時間'
];
}
public function map($user): array
{ //這裏是字段的值 如果是主表的數據 直接對象的形式就可以寫出來
//如果是關聯的表的數據 可以通過data_get()去渲染
//其他部分是枚舉類字段值的語義化
return [
$user->id,
$user->user_name,
$user->name,
data_get($user, 'agent.name'),
data_get($user, 'agent.money'),
UserEnum::TYPE[$user->type],
data_get($user, 'admin.username'),
UserEnum::REAL_NAME_VERIFY[$user->real_name_verify],
PositionStatus::OPEN_PERMISSION[$user->open_permission],
$user->create_at
];
}
}
那麼導出文件就寫完了,那麼如何在列表頁面如何調用呢
只需要在用戶列表的方法下多加一句話
$grid->exporter(new UserExport());
至此,導出功能就完成了
更多配置請戳官方文檔:
https://docs.laravel-excel.com/3.1/exports/export-formats.html
覺得有用的點個贊加個關注吧!
有問題的歡迎在評論區留言!