后台导入excel功能,结合前端导入组件,支持导入错误信息提示、导入示例查询和导入进度查询等功能。
导入功能调用框架核心ImportExcelService的方法封装,文件位置:tmcore/services/ImportExcelService.php。
导入函数
获取导入数据
/**
* 获取导入excel数据
* @param string $name 上传文件名称
* @param bool $is_delete 是否删除上传文件
* @return array
*/
public static function importExcel($name = "", $is_delete = true)遍历导入数据并检验
/**
* 导入列表循环
* @param array $list 循环数据
* @param array $key_column_arr 字段对应数组
* @param callable $callColumnFn 回调函数
* @param callable $calFn 回调函数
*/
public static function listForeach($list, $key_column_arr = [], $callColumnFn = null, $calFn = null)调用示例
以后台admin模块的ArticleService为例,导入文章列表
<?php
namespace app\admin\service\cms;
use tmcore\base\BaseService;
use app\common\model\article\Article;
use tmcore\services\ImportExcelService;
class ArticleService extends BaseService
{
/**
* 导入文章
* @param array $params
* @param array $adminInfo
* @return array|bool
*/
public static function import(array $params, array $adminInfo)
{
$list = ImportExcelService::importExcel('file');
$key_arr = [
'title' => 0,
'cate_id' => 1,
'image' => 2,
'desc' => 3,
'summary' => 4,
'author' => 5,
'content' => 6,
'init_hits' => 7,
'sort' => 8,
'is_recommend' => 9,
'status' => 10,
];
ImportExcelService::listForeach($list['data'], $key_arr, function ($value, $key, $column_name, $row_count) use ($params) {
// 检查结果抛出异常
if (!$value && $column_name == 'title') ImportExcelService::setError($key, $column_name, $row_count, $key . '不可为空');
if (!$value && $column_name == 'cate_id') ImportExcelService::setError($key, $column_name, $row_count, $key . '不可为空');
if (!$value && $column_name == 'image') ImportExcelService::setError($key, $column_name, $row_count, $key . '不可为空');
}, function ($value, $key) use ($params) {
$data = [
'title' => $value[0] ?? '',
'cate_id' => $value[1] ?? 0,
'image' => $value[2] ?? '',
'desc' => $value[3] ?? '',
'summary' => $value[4] ?? '',
'author' => $value[5] ?? '',
'content' => $value[6] ?? '',
'init_hits' => $value[7] ?? 0,
'sort' => $value[8] ?? 0,
'is_recommend' => $value[9] ?? 0,
'status' => $value[10] ?? 1,
];
ImportExcelService::setSuccess($data); // 循环数据处理
});
// 批量增加数据
(new Article)->saveAll(ImportExcelService::$createData); // 获取导入数据
return ImportExcelService::getImportResult(); // 返回导入结果
}
}