From 3aaf030b89ef7d6ec38c56ca5bb3a356b8c97a56 Mon Sep 17 00:00:00 2001 From: wolfcode <37436228+wolf-leo@users.noreply.github.com> Date: Fri, 28 Mar 2025 12:22:05 +0800 Subject: [PATCH] feat(export): replace php-excel with PhpSpreadsheet for Excel export-Remove php-excel package and related usage - Add PhpSpreadsheet package and update to latest version - Implement new exportExcel function using PhpSpreadsheet - Update admin controller to use new exportExcel function - Remove redundant code and improve error handling --- app/admin/controller/system/Log.php | 8 ++--- app/admin/traits/Curd.php | 12 ++++---- app/common.php | 46 ++++++++++++++++++++++++++++- composer.json | 3 +- public/static/admin/js/index.js | 1 + 5 files changed, 57 insertions(+), 13 deletions(-) diff --git a/app/admin/controller/system/Log.php b/app/admin/controller/system/Log.php index 5cfd384..1e54eb4 100644 --- a/app/admin/controller/system/Log.php +++ b/app/admin/controller/system/Log.php @@ -54,7 +54,7 @@ class Log extends AdminController } #[NodeAnnotation(title: '导出', auth: true)] - public function export(): bool + public function export() { if (env('EASYADMIN.IS_DEMO', false)) { $this->error('演示环境下不允许操作'); @@ -75,7 +75,6 @@ class Log extends AdminController $model = (new self::$model)->setSuffix("_$month")->with('admin')->where($where); try { $list = $model - ->where($where) ->limit(10000) ->order('id', 'desc') ->select() @@ -84,11 +83,10 @@ class Log extends AdminController $vo['content'] = json_encode($vo['content'], JSON_UNESCAPED_UNICODE); $vo['response'] = json_encode($vo['response'], JSON_UNESCAPED_UNICODE); } - }catch (PDOException|DbException $exception) { + exportExcel($header, $list, '操作日志'); + }catch (\Throwable $exception) { $this->error($exception->getMessage()); } - $fileName = time(); - return Excel::exportData($list, $header, $fileName, 'xlsx'); } diff --git a/app/admin/traits/Curd.php b/app/admin/traits/Curd.php index 6d4436e..dab79d4 100644 --- a/app/admin/traits/Curd.php +++ b/app/admin/traits/Curd.php @@ -5,7 +5,6 @@ namespace app\admin\traits; use app\admin\service\annotation\NodeAnnotation; use app\admin\service\tool\CommonTool; use app\Request; -use jianyan\excel\Excel; use think\facade\Db; use think\response\Json; @@ -113,13 +112,16 @@ trait Curd $header[] = [$comment, $vo['Field']]; } } - $list = self::$model::where($where) + $list = self::$model::where($where) ->limit(100000) - ->order('id', 'desc') + ->order($this->sort) ->select() ->toArray(); - $fileName = time(); - return Excel::exportData($list, $header, $fileName, 'xlsx'); + try { + exportExcel($header, $list); + }catch (\Throwable $exception) { + $this->error('导出失败: ' . $exception->getMessage() . PHP_EOL . $exception->getFile() . PHP_EOL . $exception->getLine()); + } } #[NodeAnnotation(title: '属性修改', auth: true)] diff --git a/app/common.php b/app/common.php index b382fc3..8abf212 100644 --- a/app/common.php +++ b/app/common.php @@ -2,6 +2,8 @@ // 应用公共文件 use app\common\service\AuthService; +use PhpOffice\PhpSpreadsheet\Spreadsheet; +use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use think\db\exception\DataNotFoundException; use think\db\exception\DbException; use think\db\exception\ModelNotFoundException; @@ -115,6 +117,48 @@ function editor_textarea(?string $detail, string $name = 'desc', string $placeho 'ckeditor' => "", 'ueditor' => "", 'EasyMDE' => "", - default => "