fix: 首页默认排序改为最近活动时间线

reply 按发帖与最后评论的较晚时间混排,零回复新帖不再沉底;默认文案改为「最新」。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-01 21:54:44 +08:00
parent ea9e0058d4
commit dff60dde6a
8 changed files with 12 additions and 18 deletions

View File

@@ -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"
}
}

View File

@@ -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{