From d5a7a15344dfdd75fe3b5c4c991a5a512aa295da Mon Sep 17 00:00:00 2001 From: anghunk Date: Wed, 21 Jan 2026 21:56:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(analytics):=20=E6=B7=BB=E5=8A=A0=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 实现页面访问统计功能,包括: 1. 前端组件挂载时上报访问数据 2. 后端接口记录访问信息并存储 3. 管理后台新增访问统计视图 4. 相关API文档和设计说明更新 --- cwd-admin/src/api/admin.ts | 25 + cwd-admin/src/router/index.ts | 6 + cwd-admin/src/views/AnalyticsVisitView.vue | 266 ++++++++ cwd-admin/src/views/LayoutView.vue | 12 + cwd-admin/widget/src/core/CWDComments.js | 4 + cwd-admin/widget/src/core/api.js | 20 +- cwd-api/src/api/admin/visitAnalytics.ts | 78 +++ cwd-api/src/api/public/trackVisit.ts | 69 ++ cwd-api/src/index.ts | 5 + docs/api/admin.md | 715 +++++++++++++++------ docs/api/public.md | 178 ++++- docs/function/admin-panel.md | 64 ++ 12 files changed, 1241 insertions(+), 201 deletions(-) create mode 100644 cwd-admin/src/views/AnalyticsVisitView.vue create mode 100644 cwd-api/src/api/admin/visitAnalytics.ts create mode 100644 cwd-api/src/api/public/trackVisit.ts diff --git a/cwd-admin/src/api/admin.ts b/cwd-admin/src/api/admin.ts index 247844e..86b8234 100644 --- a/cwd-admin/src/api/admin.ts +++ b/cwd-admin/src/api/admin.ts @@ -83,6 +83,23 @@ export type CommentStatsResponse = { }[]; }; +export type VisitOverviewResponse = { + totalPv: number; + totalPages: number; +}; + +export type VisitPageItem = { + postSlug: string; + postTitle: string | null; + postUrl: string | null; + pv: number; + lastVisitAt: string | null; +}; + +export type VisitPagesResponse = { + items: VisitPageItem[]; +}; + export async function loginAdmin(name: string, password: string): Promise { const res = await post('/admin/login', { name, password }); const key = res.data.key; @@ -212,3 +229,11 @@ export function importComments(data: any[]): Promise<{ message: string }> { export function fetchCommentStats(): Promise { return get('/admin/stats/comments'); } + +export function fetchVisitOverview(): Promise { + return get('/admin/analytics/overview'); +} + +export function fetchVisitPages(): Promise { + return get('/admin/analytics/pages'); +} diff --git a/cwd-admin/src/router/index.ts b/cwd-admin/src/router/index.ts index 52dc22e..155a8d1 100644 --- a/cwd-admin/src/router/index.ts +++ b/cwd-admin/src/router/index.ts @@ -5,6 +5,7 @@ import CommentsView from '../views/CommentsView.vue'; import SettingsView from '../views/SettingsView.vue'; import DataView from '../views/DataView.vue'; import StatsView from '../views/StatsView.vue'; +import AnalyticsVisitView from '../views/AnalyticsVisitView.vue'; const routes: RouteRecordRaw[] = [ { @@ -30,6 +31,11 @@ const routes: RouteRecordRaw[] = [ name: 'stats', component: StatsView }, + { + path: 'analytics', + name: 'analytics', + component: AnalyticsVisitView + }, { path: 'settings', name: 'settings', diff --git a/cwd-admin/src/views/AnalyticsVisitView.vue b/cwd-admin/src/views/AnalyticsVisitView.vue new file mode 100644 index 0000000..fb7178c --- /dev/null +++ b/cwd-admin/src/views/AnalyticsVisitView.vue @@ -0,0 +1,266 @@ + + + + + + diff --git a/cwd-admin/src/views/LayoutView.vue b/cwd-admin/src/views/LayoutView.vue index 7e87697..0b63bd4 100644 --- a/cwd-admin/src/views/LayoutView.vue +++ b/cwd-admin/src/views/LayoutView.vue @@ -75,6 +75,13 @@ > 数据看板 +