侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Dcat-admin添加Excel导出功能流程步骤

Laravel  /  管理员 发布于 3年前   2420

这是dcat-admin导出功能,dact-admin导入功能文件之前有记录,有兴趣的可以自行翻阅

1.添加扩展maatwebsite/exce

composer require maatwebsite/excel

2.新增dcatAdmin的GridTool文件

php artisan admin:action
...

//选择[3]

Which type of action would you like to make?:
...
[3] grid-tool
...

//设置grid-tool的文件名

InspectionItemsPostExportTool


InspectionItemsPostExportTool文件

/**
  *  接收参数 * InspectionItemsPost constructor
  * @param null $filename
  * @param $title
  */
 public function __construct($filename = null, $title = '')
 {
     parent::__construct($title);
     $this->title = $title;
 }
 /**
  * @return string
  */
 protected $title = '导出巡检信息';
 /**
  *  按钮的样式 * @var string
  */
 protected $style = 'btn btn-outline-info';
 /**
  *  业务处理 * @param Request $request
  * @return Response
  */
 public function handle(Request $request)
 {
     // 获取文件名
     $filename = $request->get('filename');
     // 这里有一个 admin_route 路由,接下来在 route.php 文件添加
     return $this->response()->download(admin_route('inspection-item-posts.export', [
         'filename' => $filename,
     ]);
 }


3.新增控制器导出方法

 /**
  *  巡检记录数据的导出
  * @param Request $request
  * @return BinaryFileResponse
  */
 public function export(Request $request)
 {
     $filename = $request->get('filename');
     ob_end_clean();
     // 这里面有一个 InspectionItemPostExport 文件,接下来通过 php artisan make:export 命令创建
     return Excel::download(new InspectionItemPostExport(), $filename . '.xlsx');
 }


4.新增控制器路由

 // 记着:单个方法的路由一定要放到 resource 资源路由前面
 $router->get('inspection-item-posts/export', 'InspectionItemPostController@export')->name('inspection-item-posts.export');


5.添加导出按钮

在控制器的grid方法中引入这个tool按钮文件

/**
  * Make a grid builder.
  *
  * @return Grid
  */
 protected function grid()
 {
     return Grid::make(new InspectionItemPost(['productionLine', 'inspectionPoint', 'inspectionItem', 'user']), function (Grid $grid) {
         $grid->column('id')->sortable();
         // 引入导出工具按钮
         $grid->tools(function (Grid\Tools $tools) use ($grid) {
             // 导出
             $tools->append(new InspectionItemsPostExportTool('巡检问题信息', '导出巡检问题信息'));
         });
     });
 }


6.创建导出文件

php artisan make:export InspectionItemPostExport

7.InspectionItemPostExport 文件的方法

// 我这里实现了几个接口
// FromCollection 必须实现 collection() 方法
// ShouldAutoSize 不需要实现接口,自动设定 excel 表格 column 的宽度
// WithDrawings 必须实现 drawings() 方法,可以在 excel 表格中添加图片(图片需是本地地址)
// WithColumnWidths 必须实现 columnWidths() 可以设定对应列的宽,可与 ShouldAutoSize 一起使用,不过本设定优先
class InspectionItemPostExport implements FromCollection, ShouldAutoSize, WithDrawings, WithColumnWidths
{
     // 最总数据
     private $data;
     // 图片数据
     private $imageData;
     /**
     *  构造方法
     * InspectionItemPostExport constructor.
     */
     public function __construct()
     {
         // 表头设定
         $this->data = $this->createData();
     }
     /**
      *  数组转集合 
      * @return Collection
      */
     public function collection()
     {
          return new Collection($this->data);
     }
     /**
      *  业务代码 
      * @return array|string[][]
       */
     public function createData()
     {
         $headTitle = [
             '编号',
             '提交类型',
             '生产线',
             '巡检点',
             '观察项',
             '巡检人',
             '紧急状态',
             '问题图片',
             '问题说明',
             '创建时间',
         ];
         $bodyData = [];
         $data = InspectionItemPost::with('productionLine:id,name')
             ->with('inspectionPoint:id,name')
             ->with('inspectionItem:id,name')
             ->with('user:id,name')
             ->get();
         if (empty($data)) {
             return [$headTitle];
         }
         // 数据循环
         foreach ($data as $k => $item) {
             $arr[0] = $item->id;
             $arr[1] = Arr::get(InspectionItemPostRepositories::TYPE_OPTION, $item->type, '无');
             $arr[2] = $item->productionLine->name ?? '';
             $arr[3] = $item->inspectionPoint->name ?? '';
             $arr[4] = $item->inspectionItem->name ?? '';
             $arr[5] = $item->user->name ?? '';
             $arr[6] = Arr::get(InspectionItemPostRepositories::STATUS_OPTION, $item->status, '无');
             $arr[7] = '';    // 这里设置为空为后续添加图片腾出地方
             $this->imageData[] = $url;
             $arr[8] = $item->remark;
             $arr[9] = $item->created_at;
             $bodyData[] = $arr;
         }
         // 清除掉 $arr
         unset($arr);
         return [$headTitle, $bodyData];
     }
     /**
      *  绘画 * @return array|BaseDrawing|BaseDrawing[]
       */
     public function drawings()
     {
         $result = [];
         foreach ($this->imageData as $k => $v) {
             // 如果存在全连接跳出
             if (strpos($v, 'http') === 0 || strpos($v, 'https') === 0) {
                 continue;
             }
             // 如果图片不存在跳出
             if (!Storage::exists($v)) {
                 continue;
             }
             $k += 2;
             ${'drawing' . $k} = new Drawing();
             ${'drawing' . $k}->setName('问题图片');
             ${'drawing' . $k}->setDescription('问题图片');
             //图片路径
             ${'drawing' . $k}->setPath(Storage::path($v));
             ${'drawing' . $k}->setHeight(50);
             //设置图片列
             ${'drawing' . $k}->setCoordinates('H' . $k);
             $result[] = ${'drawing' . $k};
         }
         return $result;
     }
     /**
      *  列宽限制 * @return int[]
      */
     public function columnWidths(): array
     {
         return [
             'A' => 10,
             'B' => 15,
             'C' => 15,
             'D' => 15,
             'E' => 40,
             'F' => 10,
             'G' => 10,
             'H' => 20,
             'I' => 30,
             'J' => 20,
         ];
     }
}

  • 上一条:
    Laravel 9.9版本发布
    下一条:
    Laravel Redirection扩展包中统一管理配置应用程序重定向
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • Laravel 11.14版本发布 - 新的字符串助手和ServeCommand改进(0个评论)
    • Laravel 11.12版本发布 - Artisan的`make`命令自动剪切`.php `扩展(0个评论)
    • Laravel的轻量型购物车扩展包:binafy/laravel-cart(0个评论)
    • Laravel 11.11版本发布 - 查看模型中的第三方关系:show(0个评论)
    • 近期文章
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-07
    • 2017-08
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2020-10
    • 2020-11
    • 2021-01
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-03
    • 2022-04
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客