diff --git a/client/src/components/admin/AdminLayout.vue b/client/src/components/admin/AdminLayout.vue index 8a8b8e1..0e26e6f 100644 --- a/client/src/components/admin/AdminLayout.vue +++ b/client/src/components/admin/AdminLayout.vue @@ -183,8 +183,8 @@ const handleChangePassword = () => { } const refreshCurrentPage = () => { - // 刷新当前路由页面,不刷新整个浏览器 - router.replace(router.currentRoute.value.fullPath) + // 强制刷新当前路由页面 + router.go(0) } interface MenuItem { diff --git a/client/src/pages/admin/About.vue b/client/src/pages/admin/About.vue index 8cad8f0..2f1bdb4 100644 --- a/client/src/pages/admin/About.vue +++ b/client/src/pages/admin/About.vue @@ -1,204 +1,405 @@ \ No newline at end of file + diff --git a/client/src/router.ts b/client/src/router.ts index 8654592..83ce538 100644 --- a/client/src/router.ts +++ b/client/src/router.ts @@ -68,8 +68,6 @@ const routes = [ // 关于页面管理 { path: 'about', name: 'admin-about', component: () => import('./pages/admin/About.vue') }, - { path: 'about/create', name: 'admin-about-create', component: () => import('./pages/admin/AboutForm.vue') }, - { path: 'about/edit/:id', name: 'admin-about-edit', component: () => import('./pages/admin/AboutForm.vue') }, // 合作咨询管理 { path: 'inquiries', name: 'admin-inquiries', component: () => import('./pages/admin/Inquiries.vue') }, diff --git a/server/repositories/log_repository.go b/server/repositories/log_repository.go index 5fb3631..dbaaf63 100644 --- a/server/repositories/log_repository.go +++ b/server/repositories/log_repository.go @@ -51,23 +51,30 @@ type UVTrendData struct { // GetDailyUV 获取UV趋势 func GetDailyUV(startDate, endDate string) ([]UVTrendData, error) { - query := config.DB.Model(&models.UserAccessLog{}). - Select("FROM_UNIXTIME(access_time, '%Y-%m-%d') as date, COUNT(DISTINCT user_ip) as count") - + // 确定日期范围 + var startTime, endTime time.Time if startDate != "" { startUnix := parseDateToUnix(startDate, false) - query = query.Where("access_time >= ?", startUnix) + startTime = time.Unix(startUnix, 0) } else { - // 默认最近7天 - startUnix := time.Now().AddDate(0, 0, -6).Unix() - query = query.Where("access_time >= ?", startUnix) + startTime = time.Now().AddDate(0, 0, -6) + startTime = time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local) } if endDate != "" { endUnix := parseDateToUnix(endDate, true) - query = query.Where("access_time <= ?", endUnix) + endTime = time.Unix(endUnix, 0) + } else { + endTime = time.Now() + endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 23, 59, 59, 0, time.Local) } + // 查询数据库 + query := config.DB.Model(&models.UserAccessLog{}). + Select("FROM_UNIXTIME(access_time, '%Y-%m-%d') as date, COUNT(DISTINCT user_ip) as count"). + Where("access_time >= ?", startTime.Unix()). + Where("access_time <= ?", endTime.Unix()) + var results []UVTrendData err := query.Group("date"). Order("date ASC"). @@ -77,13 +84,36 @@ func GetDailyUV(startDate, endDate string) ([]UVTrendData, error) { return nil, err } - // 暂未实现真实的同比环比计算逻辑,设为0 - for i := range results { - results[i].YoY = 0 - results[i].MoM = 0 + // 创建日期到数据的映射 + resultMap := make(map[string]UVTrendData) + for _, r := range results { + resultMap[r.Date] = r } - return results, nil + // 生成完整日期列表 + var fullResults []UVTrendData + current := time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local) + endDay := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, time.Local) + + for !current.After(endDay) { + dateStr := current.Format("2006-01-02") + if data, exists := resultMap[dateStr]; exists { + data.YoY = 0 + data.MoM = 0 + fullResults = append(fullResults, data) + } else { + // 填充0值 + fullResults = append(fullResults, UVTrendData{ + Date: dateStr, + Count: 0, + YoY: 0, + MoM: 0, + }) + } + current = current.AddDate(0, 0, 1) + } + + return fullResults, nil } // GetUserRegions 获取用户地域分布 diff --git a/server/repositories/post_repository.go b/server/repositories/post_repository.go index 20005f7..1a76f26 100644 --- a/server/repositories/post_repository.go +++ b/server/repositories/post_repository.go @@ -352,23 +352,31 @@ func GetTopPosts(limit int) ([]models.Post, error) { // GetNewPostsTrend 获取新增文章趋势 func GetNewPostsTrend(startDate, endDate string) ([]TrendData, error) { - query := config.DB.Model(&models.Post{}). - Select("FROM_UNIXTIME(created_at, '%Y-%m-%d') as date, COUNT(*) as count"). - Where("deleted_at = ?", 0) - + // 确定日期范围 + var startTime, endTime time.Time if startDate != "" { startUnix := parseDateToUnix(startDate, false) - query = query.Where("created_at >= ?", startUnix) + startTime = time.Unix(startUnix, 0) } else { - startUnix := time.Now().AddDate(0, 0, -6).Unix() - query = query.Where("created_at >= ?", startUnix) + startTime = time.Now().AddDate(0, 0, -6) + startTime = time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local) } if endDate != "" { endUnix := parseDateToUnix(endDate, true) - query = query.Where("created_at <= ?", endUnix) + endTime = time.Unix(endUnix, 0) + } else { + endTime = time.Now() + endTime = time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 23, 59, 59, 0, time.Local) } + // 查询数据库 + query := config.DB.Model(&models.Post{}). + Select("FROM_UNIXTIME(created_at, '%Y-%m-%d') as date, COUNT(*) as count"). + Where("deleted_at = ?", 0). + Where("created_at >= ?", startTime.Unix()). + Where("created_at <= ?", endTime.Unix()) + var results []TrendData err := query.Group("date"). Order("date ASC"). @@ -378,13 +386,36 @@ func GetNewPostsTrend(startDate, endDate string) ([]TrendData, error) { return nil, err } - // Set YoY and MoM to 0 - for i := range results { - results[i].YoY = 0 - results[i].MoM = 0 + // 创建日期到数据的映射 + resultMap := make(map[string]TrendData) + for _, r := range results { + resultMap[r.Date] = r } - return results, nil + // 生成完整日期列表 + var fullResults []TrendData + current := time.Date(startTime.Year(), startTime.Month(), startTime.Day(), 0, 0, 0, 0, time.Local) + endDay := time.Date(endTime.Year(), endTime.Month(), endTime.Day(), 0, 0, 0, 0, time.Local) + + for !current.After(endDay) { + dateStr := current.Format("2006-01-02") + if data, exists := resultMap[dateStr]; exists { + data.YoY = 0 + data.MoM = 0 + fullResults = append(fullResults, data) + } else { + // 填充0值 + fullResults = append(fullResults, TrendData{ + Date: dateStr, + Count: 0, + YoY: 0, + MoM: 0, + }) + } + current = current.AddDate(0, 0, 1) + } + + return fullResults, nil } // GetPostHistory 获取文章修改历史