优化导出功能,兼容自定义参数、兼容关联查询用法

This commit is contained in:
2022-07-14 09:52:26 +08:00
parent f74349a3c3
commit 065851fcb1
3 changed files with 60 additions and 46 deletions

View File

@@ -12,11 +12,10 @@ use think\console\Output;
class Version extends Command
{
const VERSION = 'v2.0.2';
const VERSION = 'v2.0.3';
const COMMENT = [
'新增查看当前版本命令',
'简单修改了说明文件'
'优化导出功能,兼容自定义参数、兼容关联查询用法',
];
protected function configure()

View File

@@ -23,66 +23,77 @@ class ExcelTools
$runtime_file_list = [];
$model
->where($where)->chunk(100, function ($list) use ($sheet, &$write_line, $fields, $image_fields, &$runtime_file_list, $select_fields, $date_fields) {
foreach ($list as $list_index => $item) {
$write_line++;
$write_col = 1;
$limit = 1000;
foreach ($fields as $field_key => $field_name) {
$col_key = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($write_col);
$page = 0;
$cel = null;
while (true) {
$page++;
$list = $model
->where($where)->page($page, $limit)->select();
foreach ($list as $list_index => $item) {
$write_line++;
$write_col = 1;
$value = \think\helper\Arr::get($item, $field_key);
foreach ($fields as $field_key => $field_name) {
$col_key = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::stringFromColumnIndex($write_col);
if (in_array($field_key, $image_fields)) {
// 是图片
$cel = $value;
$cel = null;
try {
$value = \think\helper\Arr::get($item, $field_key);
if (filter_var($value, FILTER_VALIDATE_URL)) {
if (in_array($field_key, $image_fields)) {
// 是图片
$cel = $value;
$runtime_file = PathTools::tempBuildPath(uniqid());
try {
$runtime_file_list[] = $runtime_file;
if (filter_var($value, FILTER_VALIDATE_URL)) {
file_put_contents($runtime_file, file_get_contents($value));
$runtime_file = PathTools::tempBuildPath(uniqid());
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName($field_name);
$drawing->setDescription($field_key);
$drawing->setPath($runtime_file);
$drawing->setHeight(36);
$runtime_file_list[] = $runtime_file;
$drawing->setCoordinates($col_key . $write_line);
$drawing->setWorksheet($sheet);
}
} catch (\Throwable $th) {
$message = $th->getMessage();
file_put_contents($runtime_file, file_get_contents($value));
$cel .= "\n" . $message;
$drawing = new \PhpOffice\PhpSpreadsheet\Worksheet\Drawing();
$drawing->setName($field_name);
$drawing->setDescription($field_key);
$drawing->setPath($runtime_file);
$drawing->setHeight(36);
$drawing->setCoordinates($col_key . $write_line);
$drawing->setWorksheet($sheet);
}
} else if (array_key_exists($field_key, $select_fields)) {
// 需要设置选项
} catch (\Throwable $th) {
$message = $th->getMessage();
$cel = $select_fields[$field_key][$value];
} else if (in_array($field_key, $date_fields)) {
if (empty($value)) {
$cel = '';
} else {
$cel = date('Y-m-d H:i:s', $value);
}
} else {
$cel = $value;
$cel .= "\n" . $message;
}
} else if (array_key_exists($field_key, $select_fields)) {
// 需要设置选项
$sheet->setCellValueExplicit($col_key . $write_line, $cel, DataType::TYPE_STRING);
$write_col++;
$cel = $select_fields[$field_key][$value];
} else if (in_array($field_key, $date_fields)) {
if (empty($value)) {
$cel = '';
} else {
$cel = date('Y-m-d H:i:s', $value);
}
} else {
$cel = $value;
}
$sheet->setCellValueExplicit($col_key . $write_line, $cel, DataType::TYPE_STRING);
$write_col++;
}
});
}
if (count($list) < $limit) {
break;
}
}
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
@@ -92,7 +103,9 @@ class ExcelTools
ob_clean();
foreach ($runtime_file_list as $runtime_file) {
unlink($runtime_file);
if(file_exists($runtime_file)){
unlink($runtime_file);
}
}
return $content;

View File

@@ -1270,6 +1270,8 @@ define(["jquery", "tableSelect", "ckeditor", 'miniTheme', 'tableData', 'citypick
toUrl = admin.url(url);
if (toUrl.indexOf('?') < 0) {
toUrl += '?';
}else{
toUrl += '&'
}
toUrl += query;