From 83c4ae38fc5aa55cd8a5a034b301acbd4ccd8afb Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Wed, 15 Jan 2025 17:56:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E8=AF=84=E8=AE=BA=E5=88=86=E9=A1=B5=E5=88=97=E8=A1=A8=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v1/ArticleLeaveMessage.php | 46 +++++++++++++++++++ .../model/v1/ArticleLeaveMessageModel.php | 42 +++++++++++++++++ app/admin/route/v1.php | 6 +++ .../model/ArticleLeaveMessageBaseModel.php | 31 +++++++++++++ 4 files changed, 125 insertions(+) create mode 100644 app/admin/controller/v1/ArticleLeaveMessage.php create mode 100644 app/admin/model/v1/ArticleLeaveMessageModel.php create mode 100644 app/common/model/ArticleLeaveMessageBaseModel.php diff --git a/app/admin/controller/v1/ArticleLeaveMessage.php b/app/admin/controller/v1/ArticleLeaveMessage.php new file mode 100644 index 00000000..374bf9ec --- /dev/null +++ b/app/admin/controller/v1/ArticleLeaveMessage.php @@ -0,0 +1,46 @@ +param([ + 'title', + 'is_audited', + 'created_at', + 'page/a' => 1, + 'size/d' => 20 + ]); + + // 获取文章留言列表 + $data = ArticleLeaveMessageModel::withoutField([ + 'ip', + 'user_agent' + ]) + ->withJoin(['article' => function($query) use($param) { + if (!empty($param['title'])) { + $query->where('article.title', 'like', '%' . $param['title'] . '%'); + } + }]) + ->isAudited($param['is_audited']??null) + ->withSearch(['created_at'], [ + 'created_at' => $param['created_at']??'', + ]) + ->order(['id' => 'desc']) + ->hidden(['article_id', 'article']) + ->paginate([ + 'page' => $param['page'], + 'list_rows' => $param['size'], + ]) + ->bindAttr('article', ['article_title' => 'title']); + + return success('获取成功', $data); + } +} diff --git a/app/admin/model/v1/ArticleLeaveMessageModel.php b/app/admin/model/v1/ArticleLeaveMessageModel.php new file mode 100644 index 00000000..1b3f08b1 --- /dev/null +++ b/app/admin/model/v1/ArticleLeaveMessageModel.php @@ -0,0 +1,42 @@ +belongsTo(ArticleModel::class, 'article_id', 'id'); + } + + // 审核状态查询 + public function scopeIsAudited($query, $is_audited) + { + if (is_null($is_audited)) { + return; + } + $query->where('is_audited', '=', $is_audited); + } + + // 搜索留言内容 + public function searchCreatedAtAttr($query, $value, $data) + { + if (empty($value)) { + return; + } + + $val = explode(',', $value); + if (count($val) > 1) { + $query->whereBetweenTime('created_at', $val[0], $val[1]); + } else { + $query->whereTime('created_at', '>=', $val[0]); + } + } +} diff --git a/app/admin/route/v1.php b/app/admin/route/v1.php index 824f6509..24f37c49 100644 --- a/app/admin/route/v1.php +++ b/app/admin/route/v1.php @@ -72,6 +72,12 @@ Route::group('v1', function () { // 分类删除 Route::delete('delete/:id', 'ArticleCategory/delete'); }); + + // 文章留言评论 + Route::group('message', function () { + // 留言列表 + Route::get('index', 'ArticleLeaveMessage/index'); + }); }); })->prefix('v1.'); diff --git a/app/common/model/ArticleLeaveMessageBaseModel.php b/app/common/model/ArticleLeaveMessageBaseModel.php new file mode 100644 index 00000000..ced83504 --- /dev/null +++ b/app/common/model/ArticleLeaveMessageBaseModel.php @@ -0,0 +1,31 @@ + 'int', + 'article_id' => 'int', + 'name' => 'string', + 'email' => 'string', + 'content' => 'string', + 'ip' => 'string', + 'user_agent' => 'string', + 'is_audited' => 'int', + 'created_at' => 'datetime', + ]; +}