后台导出excel功能,结合前端导出组件,支持同步/异步、分页查询、定义导出文件格式等功能。
使用新版phpspreadsheet导出,支持多样化的导出功能,后台导出基于框架核心ExportExcelService封装,文件位置:tmcore\services\ExportExcelService.php
导出函数
admin后台导出函数,文件路径:app/admin/service/ExportService.php
/**
* excel 导出
* @param array $data 数据(支持分页)
* @param string $file_name 文件名称
* @param array $header 导出表头
* @param array $action_info 说明内容 ['name'=>'操作者','time'=>'','mobile'=> '']
* @param array $async_fun 异步调用方法 (可不传,系统自动生成) ['class_name'=>'类','method_name'=>'方法']
* @return array|boolean
*/
public static function exportExcel($data, $file_name, $header, $action_info = [], $async_fun = [])导出分页函数,数据库模型静态调用
/**
* 导出分页函数(支持导出预览)
* @param array $export_params 导出参数
* @param array $where 查询条件
* @param array $page limit-分页条数 page-分页页数
* @param string $field 返回字段
* @param array $order 排序
* @param array $append 关联属性
* @param array $with 关联查询
* @return array
*/
public static function exportPage($export_params, $where, $page = ['limit' => '1000'], $field = '*', $order = ['id'=>'desc'], $append = [], $with = [])调用示例
以后台admin模块的ArticleService为例,导出文章列表
<?php
namespace app\admin\service\cms;
use tmcore\base\BaseService;
use app\common\model\article\Article;
use app\admin\service\ExportService;
use tmcore\services\ImportExcelService;
class ArticleService extends BaseService
{
/**
* 导出文章
* @param array $params
* @param array $adminInfo
* @return array|bool
*/
public static function export(array $params, array $adminInfo)
{
// 搜索条件
$searchParam = [
'=' => ['status'],
'%like%' => ['title']
];
$where = self::getSearchData($searchParam, $extend_where, $params);
$list = Article::exportPage(self::getExportData($params), $where, self::getPageData(), "*", ['sort' => 'desc', 'id' => 'desc'], ['hits', 'status_desc']);
$filename = $params['file_name'] ?? '文章列表';
$header = [
'id' => 'ID',
'title' => '标题',
'cate_name' => '栏目',
'image' => '封面',
'author' => '作者',
'hits' => '点击量',
'init_hits' => '初始点击量',
'sort' => '排序',
'recommend_desc' => '是否推荐',
'status_desc' => '状态',
'create_time' => '创建时间',
];
$res = ExportService::exportExcel($list, $filename, $header, ['name' => $adminInfo['name'], 'id' => $adminInfo['id']]);
if ($res === false) {
return self::setError(ExportService::getError());
} else {
return $res;
}
}
}调用框架核心ExportExcelService示例
<?php
namespace app\admin\service;
use tmcore\base\BaseService;
use tmcore\services\ExportExcelService;
class ExportService extends BaseService
{
/**
* 执行导出操作
* @param $data
* @param $file_name
* @param $file_suffix
* @param $header
* @param array $action_info
* @return array
*/
public static function executeExportExcel($data, $file_name, $file_suffix, $header, $action_info = []) {
$instance = ExportExcelService::instance(); // 实例化导出类
$identifier = $instance->getIdentifier(); // 生成导出唯一标识
$url = $instance
->setHeader($header) // 设置表头
->setTitle($file_name,$action_info) // 设置标题信息
->setData($data) // 设置数据
->exportExcel($file_name,$file_suffix); // 设置名称、文件后缀
$file_name = $instance->getFileName(); // 获取文件名
return ['url' => $url, 'file_key' => $identifier, 'file_name' => $file_name];
}
}