Dcat-admin添加Excel导入功能

2023-06-01 00:00:00 dcat

之前我用laravel-admin实现了导入导出功能,有兴趣的可以去看看

https://www.zongscan.com/demo333/174.html

今天看到这篇就收集记录一下,基本大同小异

Dcat Admin 中文文档: 

https://learnku.com/docs/dcat-admin/2.x

DcatAdmin简单实现导入Excel:


前提

安装 dcat/easy-excel

composer require dcat/easy-excel

或者你想用 maatwebsite/excel 之类的其他的工具也可以,差不太多看个人喜好


实现

新建一个工具表单,用来上传 Excel

<?php
namespace App\Admin\Forms;
use Dcat\EasyExcel\Excel;
use Dcat\Admin\Widgets\Form;
class TestImportForm extends Form
{
    /**
     * Handle the form request.
     *
     * @param array $input
     *
     * @return \Dcat\Admin\Http\JsonResponse
     */
    public function handle(array $input)
    {
        // 获取上传的文件路径
        $file_path = storage_path('app/public' . $input['import_file']);
        // 如果用的是maatwebsite/excel或者其他, 把读取数据这一步改改就好了
        // 读取excel文件
        $data = Excel::import($file_path)->toArray();
        // [
        //     "Sheet1" => [
        //         2 => [
        //             "姓名" => "张三",
        //             "电话" => 123456789,
        //         ],
        //         3 => [
        //             "姓名" => "李四",
        //             "电话" => 987654321,
        //         ],
        //     ],
        // ]
        // 处理数据
        //...
        // 入库
        //...
        return $this->response()->success('ok')->refresh();
    }
    /**
     * Build a form here.
     */
    public function form()
    {
        // 禁用重置表单按钮
        $this->disableResetButton();
        // 文件上传
        $this->file('import_file', ' ')
            ->disk('public')
            ->accept('xls,xlsx')
            ->uniqueName()
            ->autoUpload()
            ->move('/import')
            ->help('支持xls,xlsx');
    }
}

新建一个 Action, 用来下载导入模板

<?php
namespace App\Admin\Actions;
use Dcat\Admin\Actions\Action;
use Dcat\Admin\Actions\Response;
/**
 * 下载导入模板
 * Class DownloadTemplate
 *
 * @package App\Admin\Actions
 */
class DownloadTemplate extends Action
{
    /**
     * @return string
     */
    protected $title = '<button class="btn btn-primary"><i class="feather icon-download"></i> 下载导入模板</button>';
    /**
     * Handle the action request.
     *
     * @return Response
     */
    public function handle()
    {
        return $this->response()->download('你的导入模板.xlsx');
    }
}



在列表增加操作按钮

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        return Grid::make(new User(), function (Grid $grid) {
            // 在工具栏添加操作按钮,用于上传Excel文件及下载导入模板
            $grid->tools(function (Grid\Tools $tools) {
                $tools->append(Modal::make()
                    // 大号弹窗
                    ->lg()
                    // 弹窗标题
                    ->title('上传文件')
                    // 按钮
                    ->button('<button class="btn btn-primary"><i class="feather icon-upload"></i> 导入数据</button>')
                    // 弹窗内容
                    ->body(TestImportForm::make()));
                    // 下载导入模板
                    $tools->append(DownloadTemplate::make()->setKey('test_question'));
            });
            $grid->column('id')->sortable();
            $grid->column('name');
            $grid->column('email');
            // ...
        });
    }


转:

https://learnku.com/articles/67058

效果图:

DcatAdmin-Excel.png

相关文章