feat: 新增评论导出接口
This commit is contained in:
@@ -4,6 +4,8 @@ declare (strict_types = 1);
|
|||||||
namespace app\admin\controller\v1;
|
namespace app\admin\controller\v1;
|
||||||
|
|
||||||
use app\admin\model\v1\ArticleLeaveMessageModel;
|
use app\admin\model\v1\ArticleLeaveMessageModel;
|
||||||
|
use PhpOffice\PhpSpreadsheet\IOFactory;
|
||||||
|
use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
||||||
|
|
||||||
class ArticleLeaveMessage
|
class ArticleLeaveMessage
|
||||||
{
|
{
|
||||||
@@ -30,10 +32,10 @@ class ArticleLeaveMessage
|
|||||||
}
|
}
|
||||||
}])
|
}])
|
||||||
->isAudited($param['is_audited']??null)
|
->isAudited($param['is_audited']??null)
|
||||||
->withSearch(['created_at'], [
|
->withSearch(['article_leave_message_model.created_at'], [
|
||||||
'created_at' => $param['created_at']??'',
|
'article_leave_message_model.created_at' => $param['created_at']??'',
|
||||||
])
|
])
|
||||||
->order(['id' => 'desc'])
|
->order(['article_leave_message_model.id' => 'desc'])
|
||||||
->hidden(['article_id', 'article'])
|
->hidden(['article_id', 'article'])
|
||||||
->paginate([
|
->paginate([
|
||||||
'page' => $param['page'],
|
'page' => $param['page'],
|
||||||
@@ -80,4 +82,80 @@ class ArticleLeaveMessage
|
|||||||
|
|
||||||
return success('操作成功');
|
return success('操作成功');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
public function export()
|
||||||
|
{
|
||||||
|
$schema = [
|
||||||
|
'id' => 'ID',
|
||||||
|
'article_title' => '文章标题',
|
||||||
|
'name' => '姓名',
|
||||||
|
'email' => '邮箱',
|
||||||
|
'content' => '评论内容',
|
||||||
|
'ip' => 'IP',
|
||||||
|
'is_audited' => '是否审核',
|
||||||
|
'created_at' => '评论时间',
|
||||||
|
];
|
||||||
|
|
||||||
|
// 获取导出数据
|
||||||
|
$data = $this->getExportMessageData();
|
||||||
|
|
||||||
|
// 获取Spreadsheet对象
|
||||||
|
$spreadsheet = new Spreadsheet();
|
||||||
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
|
||||||
|
// 写入表头
|
||||||
|
$title = array_values($schema);
|
||||||
|
$title_col = 'A';
|
||||||
|
foreach ($title as $value) {
|
||||||
|
// 单元格内容写入
|
||||||
|
$sheet->setCellValue($title_col . '1', $value);
|
||||||
|
$title_col++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 写入数据
|
||||||
|
$row = 2;
|
||||||
|
$keys = array_keys($schema);
|
||||||
|
foreach ($data as $item) {
|
||||||
|
$data_col = 'A';
|
||||||
|
foreach ($keys as $key) {
|
||||||
|
$sheet->setCellValue($data_col . $row, $item[$key]);
|
||||||
|
$data_col++;
|
||||||
|
}
|
||||||
|
$row++;
|
||||||
|
}
|
||||||
|
|
||||||
|
flush();
|
||||||
|
ob_flush();
|
||||||
|
$filename = date('YmdHms');
|
||||||
|
header('Access-Control-Expose-Headers: Content-Disposition');
|
||||||
|
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; Charset=UTF-8');
|
||||||
|
header('Content-Disposition: attachment;filename=' . $filename . '.xlsx');
|
||||||
|
header('Cache-Control: max-age=0');
|
||||||
|
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
|
||||||
|
$writer->save('php://output');
|
||||||
|
}
|
||||||
|
private function getExportMessageData()
|
||||||
|
{
|
||||||
|
$param = request()->param(['title', 'is_audited', 'created_at']);
|
||||||
|
$data = ArticleLeaveMessageModel::field([
|
||||||
|
'*',
|
||||||
|
'CASE WHEN is_audited = 1 THEN "已审核" ELSE "未审核" END' => 'is_audited'
|
||||||
|
])
|
||||||
|
->withJoin(['article' => function($query) use($param) {
|
||||||
|
if (!empty($param['title'])) {
|
||||||
|
$query->where('article.title', 'like', '%' . $param['title'] . '%');
|
||||||
|
}
|
||||||
|
}])
|
||||||
|
->isAudited($param['is_audited']??null)
|
||||||
|
->withSearch(['article_leave_message_model.created_at'], [
|
||||||
|
'article_leave_message_model.created_at' => $param['created_at']??'',
|
||||||
|
])
|
||||||
|
->order(['article_leave_message_model.id' => 'desc'])
|
||||||
|
->hidden(['article_id', 'article'])
|
||||||
|
->select()
|
||||||
|
->bindAttr('article', ['article_title' => 'title']);
|
||||||
|
|
||||||
|
return $data->toArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,6 +83,9 @@ Route::group('v1', function () {
|
|||||||
|
|
||||||
// 删除
|
// 删除
|
||||||
Route::delete('delete/:id', 'ArticleLeaveMessage/delete');
|
Route::delete('delete/:id', 'ArticleLeaveMessage/delete');
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
Route::get('export', 'ArticleLeaveMessage/export');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
})->prefix('v1.');
|
})->prefix('v1.');
|
||||||
|
|||||||
Reference in New Issue
Block a user