diff --git a/frontend/src/api/types.ts b/frontend/src/api/types.ts index 19ebcf4..25a12cb 100644 --- a/frontend/src/api/types.ts +++ b/frontend/src/api/types.ts @@ -224,7 +224,7 @@ export interface FeedSortTab { } export const DEFAULT_FEED_SORT_TABS: FeedSortTab[] = [ - { id: 'reply', label: '新评论', enabled: true }, + { id: 'reply', label: '最新', enabled: true }, { id: 'latest', label: '新帖子', enabled: true }, { id: 'hot', label: '推荐帖', enabled: true }, ]; diff --git a/frontend/src/components/FeedSortBar.tsx b/frontend/src/components/FeedSortBar.tsx index b9527cb..dd20b57 100644 --- a/frontend/src/components/FeedSortBar.tsx +++ b/frontend/src/components/FeedSortBar.tsx @@ -15,7 +15,7 @@ import type { FeedSortTab } from '../api/types'; export type FeedSort = 'latest' | 'reply' | 'hot'; const SORT_META: Record = { - reply: { hint: '最近有人评论', icon: MessageCircle }, + reply: { hint: '按最近活动(发帖或评论)', icon: MessageCircle }, latest: { hint: '按发帖时间', icon: Clock }, hot: { hint: '仅展示推荐帖', icon: BadgeCheck }, }; diff --git a/frontend/src/components/admin/FeedSortTabList.tsx b/frontend/src/components/admin/FeedSortTabList.tsx index 38c8b76..498ebfa 100644 --- a/frontend/src/components/admin/FeedSortTabList.tsx +++ b/frontend/src/components/admin/FeedSortTabList.tsx @@ -5,7 +5,7 @@ import type { FeedSortId, FeedSortTab } from '../../api/types'; import { normalizeFeedSortTabs } from '../../utils/feedSortTabs'; const TAB_META: Record = { - reply: { hint: '按最后评论时间', placeholder: '新评论' }, + reply: { hint: '按最近活动(发帖或评论)', placeholder: '最新' }, latest: { hint: '按发帖时间', placeholder: '新帖子' }, hot: { hint: '仅展示推荐帖', placeholder: '推荐帖' }, }; diff --git a/frontend/src/pages/admin/AdminSettingsPage.tsx b/frontend/src/pages/admin/AdminSettingsPage.tsx index 1d316f7..276d9f3 100644 --- a/frontend/src/pages/admin/AdminSettingsPage.tsx +++ b/frontend/src/pages/admin/AdminSettingsPage.tsx @@ -952,7 +952,7 @@ export default function AdminSettingsPage() {

首页排序标签

- 拖拽调整顺序;在「显示名称」框中改首页文案;右侧开关控制启停。第一个启用项为默认排序 + 拖拽调整顺序;在「显示名称」框中改首页文案;右侧开关控制启停。第一个启用项为默认排序。「最新」按发帖与评论的最近时间混排

= { - reply: '新评论', + reply: '最新', latest: '新帖子', hot: '推荐帖', }; diff --git a/handler/ssr_home.go b/handler/ssr_home.go index 929a03d..7271ca3 100644 --- a/handler/ssr_home.go +++ b/handler/ssr_home.go @@ -553,7 +553,7 @@ func writeSSRFeed(b *strings.Builder, boot homeBootPayload, meta homeSSRMeta) { tabs := boot.Limits.FeedSortTabs if len(tabs) == 0 { tabs = []service.FeedSortTab{ - {ID: service.FeedSortReply, Label: "新评论", Enabled: true}, + {ID: service.FeedSortReply, Label: "最新", Enabled: true}, {ID: service.FeedSortLatest, Label: "新帖子", Enabled: true}, {ID: service.FeedSortHot, Label: "推荐帖", Enabled: true}, } diff --git a/service/post.go b/service/post.go index e7bd22d..52eeb38 100644 --- a/service/post.go +++ b/service/post.go @@ -357,18 +357,12 @@ func (s *PostService) List(q PostListQuery) ([]model.Post, int64, error) { } switch sortKey { case "reply": - // 有回复的帖子优先,按最后回复时间倒序;无回复的帖子沉底(仅计已公开评论) - db = db.Order(`( - SELECT COUNT(*) FROM comments - WHERE comments.post_id = posts.id AND comments.deleted_at IS NULL - AND comments.status = 'published' - ) > 0 DESC`) - db = db.Order(`( + // 最近活动:按最后公开评论时间与发帖时间的较晚者倒序(零回复新帖也能靠前) + db = db.Order(`COALESCE(( SELECT MAX(created_at) FROM comments WHERE comments.post_id = posts.id AND comments.deleted_at IS NULL AND comments.status = 'published' - ) DESC`) - db = db.Order("posts.created_at DESC") + ), posts.created_at) DESC`) case "hot": // 仅推荐帖:按互动再按 id db = db.Order("like_count desc, view_count desc") @@ -384,7 +378,7 @@ func normalizePostSort(sort string) string { case "latest", "hot": return sort default: - // 含空串 / reply:默认新评论 + // 含空串 / reply:默认最近活动 return "reply" } } diff --git a/service/settings.go b/service/settings.go index 4ece551..9db0f24 100644 --- a/service/settings.go +++ b/service/settings.go @@ -206,7 +206,7 @@ var feedSortTabDefaultOrder = []string{ } var feedSortTabDefaultLabels = map[string]string{ - FeedSortReply: "新评论", + FeedSortReply: "最新", FeedSortLatest: "新帖子", FeedSortHot: "推荐帖", } @@ -287,7 +287,7 @@ var forumSettingDefs = []settingDef{ var feedSettingDefaults = map[string]string{ SettingFeedListStyle: "title", - SettingFeedSortTabs: `[{"id":"reply","label":"新评论","enabled":true},{"id":"latest","label":"新帖子","enabled":true},{"id":"hot","label":"推荐帖","enabled":true}]`, + SettingFeedSortTabs: `[{"id":"reply","label":"最新","enabled":true},{"id":"latest","label":"新帖子","enabled":true},{"id":"hot","label":"推荐帖","enabled":true}]`, } var asideSettingDefaults = map[string]string{