Laravel-admin自定义导出报表

App\Admin\Extensions 增加 CustomExporter.php;

filename = $filename;
        $this->head = $head;
        $this->body = $body;
        parent::__construct($grid);
    }

    /**
     * {@inheritdoc}
     */
    public function export()
    {
        $titles = [];
        $filename = $this->filename.'.csv';
        $data = $this->getData();
        if (!empty($data)) {
            $columns = array_dot($this->sanitize($data[0]));
            $titles = array_keys($columns);
        }
        $output = self::putcsv(($this->head == []) ? array_keys($columns) : $this->head);
        if($this->body == []) {
            foreach ($data as $row) {
                $row = array_only($row, $titles);
                $output .= self::putcsv(array_dot($row));
            }
        }else {
            foreach ($this->body as $row) {
                $output .= self::putcsv(array_dot($row));
            }
        }
        $headers = [
            'Content-Encoding'    => 'UTF-8',
            'Content-Type'        => 'text/csv;charset=UTF-8',
            'Content-Disposition' => "attachment; filename=\"$filename\"",
        ];
        response(rtrim($output, "\n"), 200, $headers)->send();
        exit;
    }

    /**
     * Remove indexed array.
     *
     * @param array $row
     *
     * @return array
     */
    protected function sanitize(array $row)
    {
        return collect($row)->reject(function ($val) {
            return is_array($val) && !Arr::isAssoc($val);
        })->toArray();
    }

    /**
     * @param $row
     * @param string $fd
     * @param string $quot
     *
     * @return string
     */
    protected static function putcsv($row, $fd = ',', $quot = '"')
    {
        $str = '';
        foreach ($row as $cell) {
            $cell = str_replace([$quot, "\n"], [$quot.$quot, ''], $cell);
            if (strstr($cell, $fd) !== false || strstr($cell, $quot) !== false) {
                $str .= $quot.$cell.$quot.$fd;
            } else {
                $str .= $cell.$fd;
            }
        }
        return substr($str, 0, -1)."\n";
    }
}

代码调用:

  //自定义报表导出格式
        $cards = Card::with('product', 'site')
            ->whereIn('state', [3,4])
            ->get() ;
        $head = ['序号', '卡号', '产品名称', '所属网点', '类别', '创建时间', '更新时间'];
        $body = [];
        foreach ($cards as $card) {
            $body[] = [
                $card['id'],
                $card['number'],
                $card['product']['name'],
                $card['site']['name'],
                $card['state']==3 ? '作废' : '退卡',
                $card['created_at'],
                $card['updated_at']
            ];
        }
        $grid->exporter(new CustomExporter('退废卡报表', $head, $body));

你可能感兴趣的:(Laravel-admin自定义导出报表)