diff --git a/src/router/routeLoaders.ts b/src/router/routeLoaders.ts index ca864bb..bbcc005 100644 --- a/src/router/routeLoaders.ts +++ b/src/router/routeLoaders.ts @@ -28,5 +28,6 @@ export const routeLoaders: Record Promise<{ default: unknown }>> = '/settings/notifications': () => import('../views/settings/Notifications.vue'), '/settings/system-logs': () => import('../views/settings/SystemLogs.vue'), '/settings/dictionaries': () => import('../views/settings/Dictionaries.vue'), + '/settings/visit-stats': () => import('../views/settings/VisitStats.vue'), '/wechat-users': () => import('../views/users/WechatUsers.vue'), } diff --git a/src/views/settings/VisitStats.vue b/src/views/settings/VisitStats.vue new file mode 100644 index 0000000..927c1e6 --- /dev/null +++ b/src/views/settings/VisitStats.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/study-tours/StudyTourList.vue b/src/views/study-tours/StudyTourList.vue index 19eac20..12d584d 100644 --- a/src/views/study-tours/StudyTourList.vue +++ b/src/views/study-tours/StudyTourList.vue @@ -8,7 +8,7 @@ import { listTableRowIndex } from '../../utils/listTableRowIndex' import { resolvePublicMediaUrl } from '../../utils/mediaUrl' import { adminUploadImageTooLargeMessage, ADMIN_IMAGE_RECOMMEND_LABEL } from '../../utils/adminMediaLimits' -const STUDY_TOUR_LIST_SCROLL_X = 1100 +const STUDY_TOUR_LIST_SCROLL_X = 1180 type DictOption = { id: number; item_value: string; item_label: string } @@ -44,6 +44,7 @@ type StudyTour = { implementation_html?: string sort: number is_on_shelf: boolean + view_count?: number } const loading = ref(false) @@ -822,6 +823,15 @@ function venueCount(row: StudyTour) { return (row.venue_ids || []).length } +function statNum(n: unknown): string { + const v = Number(n) + return Number.isFinite(v) ? String(v) : '0' +} + +function formatStudyTourStatsCell(record: StudyTour) { + return '浏览 ' + statNum(record.view_count) +} + onMounted(async () => { await loadMe().catch(() => undefined) await loadDicts().catch(() => undefined) @@ -922,6 +932,9 @@ onMounted(async () => { + + +