diff --git a/handlers/stats_handler.go b/handlers/stats_handler.go index b982e01..34fe6b3 100644 --- a/handlers/stats_handler.go +++ b/handlers/stats_handler.go @@ -22,16 +22,20 @@ func GetStats(c *gin.Context) { db.DB.Model(&entity.Tag{}).Count(&totalTags) db.DB.Model(&entity.Resource{}).Select("COALESCE(SUM(view_count), 0)").Scan(&totalViews) - // 获取今日数据 - today := utils.GetTodayString() + // 获取今日数据(在UTC+8时区的0点开始统计) + now := utils.GetCurrentTime() + // 使用UTC+8时区的今天0点 + loc, _ := time.LoadLocation("Asia/Shanghai") // UTC+8 + startOfToday := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, loc) + endOfToday := startOfToday.Add(24 * time.Hour) - // 今日新增资源数量 + // 今日新增资源数量(从0点开始) var todayResources int64 - db.DB.Model(&entity.Resource{}).Where("DATE(created_at) = ?", today).Count(&todayResources) + db.DB.Model(&entity.Resource{}).Where("created_at >= ? AND created_at < ?", startOfToday, endOfToday).Count(&todayResources) - // 今日更新资源数量(包括新增和修改) + // 今日更新资源数量(包括新增和修改,从0点开始) var todayUpdates int64 - db.DB.Model(&entity.Resource{}).Where("DATE(updated_at) = ?", today).Count(&todayUpdates) + db.DB.Model(&entity.Resource{}).Where("updated_at >= ? AND updated_at < ?", startOfToday, endOfToday).Count(&todayUpdates) // 今日浏览量 - 使用访问记录表统计今日访问量 var todayViews int64 @@ -41,9 +45,9 @@ func GetStats(c *gin.Context) { todayViews = 0 } - // 今日搜索量 + // 今日搜索量(从0点开始) var todaySearches int64 - db.DB.Model(&entity.SearchStat{}).Where("DATE(date) = ?", today).Count(&todaySearches) + db.DB.Model(&entity.SearchStat{}).Where("date >= ? AND date < ?", startOfToday.Format(utils.TimeFormatDate), endOfToday.Format(utils.TimeFormatDate)).Count(&todaySearches) // 添加调试日志 utils.Info("统计数据 - 总资源: %d, 总分类: %d, 总标签: %d, 总浏览量: %d", diff --git a/web/components/AppFooter.vue b/web/components/AppFooter.vue index 332dcdc..73cc5f3 100644 --- a/web/components/AppFooter.vue +++ b/web/components/AppFooter.vue @@ -28,7 +28,7 @@ import { useSystemConfigStore } from '~/stores/systemConfig' const systemConfigStore = useSystemConfigStore() await systemConfigStore.initConfig(false, false) const systemConfig = computed(() => systemConfigStore.config) -console.log(systemConfig.value) +// console.log(systemConfig.value) // 组件挂载时获取版本信息 onMounted(() => { diff --git a/web/components/QqBotTab.vue b/web/components/QqBotTab.vue index 62db23d..41a3f14 100644 --- a/web/components/QqBotTab.vue +++ b/web/components/QqBotTab.vue @@ -221,7 +221,7 @@ const copyToClipboard = async (text: string) => { // 页面加载时获取配置 onMounted(async () => { fetchApiToken() - console.log('QQ 机器人标签已加载') + // console.log('QQ 机器人标签已加载') }) diff --git a/web/pages/index.vue b/web/pages/index.vue index c3722f4..109e71f 100644 --- a/web/pages/index.vue +++ b/web/pages/index.vue @@ -433,7 +433,7 @@ watch(systemConfigError, (error) => { // 从 SSR 数据中获取值 const safeResources = computed(() => { const data = resourcesData.value as any - console.log('原始API数据结构:', JSON.stringify(data, null, 2)) + // console.log('原始API数据结构:', JSON.stringify(data, null, 2)) // 处理嵌套的data结构:{data: {data: [...], total: ...}} if (data?.data?.data && Array.isArray(data.data.data)) { @@ -444,16 +444,16 @@ const safeResources = computed(() => { // 处理直接的data结构:{data: [...], total: ...} if (data?.data && Array.isArray(data.data)) { const resources = data.data - console.log('第二层嵌套资源:', resources) + // console.log('第二层嵌套资源:', resources) return resources } // 处理直接的数组结构 if (Array.isArray(data)) { - console.log('直接数组结构:', data) + // console.log('直接数组结构:', data) return data } - console.log('未匹配到任何数据结构') + // console.log('未匹配到任何数据结构') return [] }) const safeStats = computed(() => (statsData.value as any) || { total_resources: 0, total_categories: 0, total_tags: 0, total_views: 0, today_resources: 0 })