|
|
@@ -1437,16 +1437,47 @@ export class WorkDayStatisticsService {
|
|
|
const kw = `%${keyword.trim()}%`;
|
|
|
qb.andWhere('w.title LIKE :kw', { kw });
|
|
|
}
|
|
|
-
|
|
|
- // 排序:统一按发布时间倒序(最新的在前)
|
|
|
+ // SQL 里只按发布时间倒序,具体排序口径在内存中根据 sortBy 再处理
|
|
|
qb.orderBy('w.publish_time', 'DESC');
|
|
|
|
|
|
// 先获取全部满足条件的作品聚合行,再在内存中做分页和汇总
|
|
|
const allRows = await qb.getRawMany();
|
|
|
|
|
|
- const total = allRows.length;
|
|
|
+ // 根据 sortBy 对结果进行排序
|
|
|
+ const sortedRows = [...allRows];
|
|
|
+ sortedRows.sort((a, b) => {
|
|
|
+ const getNum = (v: unknown) => Number(v) || 0;
|
|
|
+ if (sortBy === 'views_desc') {
|
|
|
+ return getNum(b.viewsCount) - getNum(a.viewsCount);
|
|
|
+ }
|
|
|
+ if (sortBy === 'likes_desc') {
|
|
|
+ return getNum(b.likesCount) - getNum(a.likesCount);
|
|
|
+ }
|
|
|
+ if (sortBy === 'comments_desc') {
|
|
|
+ return getNum(b.commentsCount) - getNum(a.commentsCount);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 发布时间排序(默认 publish_desc)
|
|
|
+ const toTime = (v: unknown) => {
|
|
|
+ if (!v) return 0;
|
|
|
+ if (v instanceof Date) return v.getTime();
|
|
|
+ const t = new Date(String(v)).getTime();
|
|
|
+ return Number.isNaN(t) ? 0 : t;
|
|
|
+ };
|
|
|
+
|
|
|
+ const ta = toTime(a.publishTime);
|
|
|
+ const tb = toTime(b.publishTime);
|
|
|
+
|
|
|
+ if (sortBy === 'publish_asc') {
|
|
|
+ return ta - tb;
|
|
|
+ }
|
|
|
+ // publish_desc
|
|
|
+ return tb - ta;
|
|
|
+ });
|
|
|
+
|
|
|
+ const total = sortedRows.length;
|
|
|
const offset = (page - 1) * pageSize;
|
|
|
- const pagedRows = allRows.slice(offset, offset + pageSize);
|
|
|
+ const pagedRows = sortedRows.slice(offset, offset + pageSize);
|
|
|
|
|
|
let totalViews = 0;
|
|
|
let totalComments = 0;
|
|
|
@@ -1455,7 +1486,7 @@ export class WorkDayStatisticsService {
|
|
|
let totalLikes = 0;
|
|
|
|
|
|
// 汇总统计使用所有作品(而不是当前页),确保顶部统计口径统一
|
|
|
- for (const row of allRows) {
|
|
|
+ for (const row of sortedRows) {
|
|
|
const views = Number(row.viewsCount) || 0;
|
|
|
const comments = Number(row.commentsCount) || 0;
|
|
|
const shares = Number(row.sharesCount) || 0;
|