From 8fa87489492c4f2861e16dc3a4261aa1e78b6c2c Mon Sep 17 00:00:00 2001 From: anghunk Date: Wed, 21 Jan 2026 13:37:55 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E6=B7=BB=E5=8A=A0=E8=AF=84?= =?UTF-8?q?=E8=AE=BA=E6=8C=89=E5=9F=9F=E5=90=8D=E7=AD=9B=E9=80=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=B9=B6=E8=B0=83=E6=95=B4=E7=BB=9F=E8=AE=A1=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E5=B8=83=E5=B1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在评论管理页面添加域名筛选功能 - 调整统计页面中卡片顺序,将图表移至概览下方 - 更新文档添加版本更新警告提示 - 修改评论列表API支持域名参数查询 --- cwd-admin/src/api/admin.ts | 9 ++++++-- cwd-admin/src/views/CommentsView.vue | 31 ++++++++++++++++++++++++++- cwd-admin/src/views/StatsView.vue | 26 ++++++++++++---------- cwd-api/src/api/admin/listComments.ts | 21 ++++++++++++++---- docs/guide/update-version.md | 3 +++ 5 files changed, 72 insertions(+), 18 deletions(-) diff --git a/cwd-admin/src/api/admin.ts b/cwd-admin/src/api/admin.ts index 5d86a8c..826f8ac 100644 --- a/cwd-admin/src/api/admin.ts +++ b/cwd-admin/src/api/admin.ts @@ -93,8 +93,13 @@ export function logoutAdmin(): void { localStorage.removeItem('cwd_admin_token'); } -export function fetchComments(page: number): Promise { - return get(`/admin/comments/list?page=${page}`); +export function fetchComments(page: number, domain?: string): Promise { + const searchParams = new URLSearchParams(); + searchParams.set('page', String(page)); + if (domain) { + searchParams.set('domain', domain); + } + return get(`/admin/comments/list?${searchParams.toString()}`); } export function deleteComment(id: number): Promise<{ message: string }> { diff --git a/cwd-admin/src/views/CommentsView.vue b/cwd-admin/src/views/CommentsView.vue index 273b0a2..05f6255 100644 --- a/cwd-admin/src/views/CommentsView.vue +++ b/cwd-admin/src/views/CommentsView.vue @@ -9,6 +9,12 @@ +
@@ -191,6 +197,7 @@ import { CommentItem, CommentListResponse, fetchComments, + fetchCommentStats, deleteComment, updateCommentStatus, blockIp, @@ -205,8 +212,11 @@ const pagination = ref<{ page: number; total: number }>({ page: 1, total: 1 }); const loading = ref(false); const error = ref(""); const statusFilter = ref(""); +const domainFilter = ref(""); const jumpPageInput = ref(""); +const domainOptions = ref([]); + const filteredComments = computed(() => { if (!statusFilter.value) { return comments.value; @@ -263,7 +273,7 @@ async function loadComments(page?: number) { loading.value = true; error.value = ""; try { - const res = await fetchComments(targetPage); + const res = await fetchComments(targetPage, domainFilter.value || undefined); comments.value = res.data; pagination.value = { page: res.pagination.page, total: res.pagination.total }; } catch (e: any) { @@ -280,6 +290,11 @@ function updateRoutePage(page: number) { } else { query.p = String(page); } + if (domainFilter.value) { + query.domain = domainFilter.value; + } else { + delete query.domain; + } router.push({ query }); } @@ -370,6 +385,20 @@ onMounted(() => { initialPage = Math.floor(value); } } + const d = route.query.domain; + if (typeof d === "string" && d.trim()) { + domainFilter.value = d.trim(); + } + + fetchCommentStats() + .then((res: CommentListResponse | any) => { + const domains = Array.isArray(res.domains) ? res.domains.map((item: any) => item.domain) : []; + domainOptions.value = Array.from(new Set(domains)); + }) + .catch(() => { + domainOptions.value = []; + }); + loadComments(initialPage); }); diff --git a/cwd-admin/src/views/StatsView.vue b/cwd-admin/src/views/StatsView.vue index fdc076a..b09eb16 100644 --- a/cwd-admin/src/views/StatsView.vue +++ b/cwd-admin/src/views/StatsView.vue @@ -9,15 +9,6 @@ {{ toastMessage }}
-
-

最近 7 天评论数趋势

-
加载中...
-
{{ statsError }}
-
-
-
-
-

整体概览

加载中...
@@ -30,7 +21,9 @@
已通过
-
{{ statsSummary.approved }}
+
+ {{ statsSummary.approved }} +
待审核
@@ -38,12 +31,23 @@
已拒绝
-
{{ statsSummary.rejected }}
+
+ {{ statsSummary.rejected }} +
+
+

最近 7 天评论数趋势

+
加载中...
+
{{ statsError }}
+
+
+
+
+

按域名统计

加载中...
diff --git a/cwd-api/src/api/admin/listComments.ts b/cwd-api/src/api/admin/listComments.ts index 53b3a35..1186477 100644 --- a/cwd-api/src/api/admin/listComments.ts +++ b/cwd-api/src/api/admin/listComments.ts @@ -9,14 +9,27 @@ export const listComments = async (c: Context<{ Bindings: Bindings }>) => { const limit = 10; const offset = (page - 1) * limit; + const rawDomain = c.req.query('domain') || ''; + const domain = rawDomain.trim(); + + let whereSql = ''; + const params: (string | number)[] = []; + if (domain) { + const pattern = `%://${domain}/%`; + whereSql = 'WHERE post_slug LIKE ? OR url LIKE ?'; + params.push(pattern, pattern); + } + const totalCount = await c.env.CWD_DB.prepare( - 'SELECT COUNT(*) as count FROM Comment' - ).first<{ count: number }>(); + `SELECT COUNT(*) as count FROM Comment ${whereSql}` + ) + .bind(...params) + .first<{ count: number }>(); const { results } = await c.env.CWD_DB.prepare( - 'SELECT * FROM Comment ORDER BY created DESC LIMIT ? OFFSET ?' + `SELECT * FROM Comment ${whereSql} ORDER BY created DESC LIMIT ? OFFSET ?` ) - .bind(limit, offset) + .bind(...params, limit, offset) .all(); await c.env.CWD_DB.prepare( diff --git a/docs/guide/update-version.md b/docs/guide/update-version.md index 2729ae6..5dc9427 100644 --- a/docs/guide/update-version.md +++ b/docs/guide/update-version.md @@ -20,6 +20,9 @@ npm run deploy 如果使用官方后台不需要更新。 +> [!WARNING] +> 存在一个弊端,如果官方后台版本有了大更新,而你部署的 api 端没有及时更新部署,可能会导致管理后台无法正常使用(无法获取到最新的接口),正常情况下无需担心。 + ``` cd cwd-admin npm install