resultMap修正

This commit is contained in:
2025-11-25 13:08:23 +08:00
parent 61d63be941
commit 5d14957eba
8 changed files with 116 additions and 16 deletions

View File

@@ -18,6 +18,13 @@ export interface BaseDTO {
deleteTime?: string;
/** 是否删除 */
deleted?: boolean;
orderTypes?: OrderType[];
}
export interface OrderType {
field: string;
order: 'ASC' | 'DESC';
}
/**

View File

@@ -40,6 +40,11 @@
<p class="section-desc">查看和分析热门文章的访问统计数据</p>
</div>
<div class="filter-controls">
<el-select v-model="sortOrder" @change="loadHotArticles" placeholder="排序规则" style="width: 150px; margin-right: 10px;">
<el-option label="默认排序" value="default" />
<el-option label="浏览量排序" value="viewCount" />
<el-option label="发布时间排序" value="publishTime" />
</el-select>
<el-select v-model="hotArticleLimit" @change="loadHotArticles" placeholder="显示数量">
<el-option label="前10名" :value="10" />
<el-option label="前20名" :value="20" />
@@ -381,6 +386,7 @@ const ideologicalRecommends = ref<ResourceRecommendVO[]>([]);
// 热门文章列表
const hotArticles = ref<ResourceVO[]>([]);
const hotArticleLimit = ref<number>(20);
const sortOrder = ref<string>('default'); // 排序规则default-默认, viewCount-浏览量, publishTime-发布时间
// 添加至TOP的加载状态
const addingToTop = ref<Set<string>>(new Set());
@@ -473,21 +479,31 @@ async function loadTabData(tab: string) {
async function loadHotArticles() {
loading.value = true;
try {
// 获取已发布的文章,按浏览量排序
// 构建过滤条件
const filter: any = {
status: 1 // 只显示已发布的
};
// 根据排序规则设置orderTypes
if (sortOrder.value === 'viewCount') {
filter.orderTypes = [{ field: 'view_count', order: 'DESC' }];
} else if (sortOrder.value === 'publishTime') {
filter.orderTypes = [{ field: 'publish_time', order: 'DESC' }];
}
// default情况下orderTypes为空使用SQL中的默认排序
// 获取已发布的文章
const result = await resourceApi.getResourcePageOrderByViewCount(
{
pageNumber: 1,
pageSize: hotArticleLimit.value
},
{
status: 1 // 只显示已发布的
}
filter
);
if (result.success && result.pageDomain?.dataList) {
// 按浏览量降序排序
hotArticles.value = result.pageDomain.dataList
.sort((a, b) => (b.resource?.viewCount || 0) - (a.resource?.viewCount || 0));
// 直接使用后端返回的排序结果
hotArticles.value = result.pageDomain.dataList;
}
} catch (error) {
console.error('加载热门文章失败:', error);
@@ -542,7 +558,7 @@ async function searchResources() {
const result = await resourceApi.getResourcePageOrderByViewCount(
{ pageNumber: 1, pageSize: 50 },
{
keyword: searchKeyword.value,
title: searchKeyword.value,
status: 1 // 只显示已发布的
}
);
@@ -1055,6 +1071,11 @@ async function addToIdeologicalRecommends(resourceID?: string) {
align-items: center;
}
.stat-title {
min-width: 0; /* 允许flex子元素缩小到内容以下 */
overflow: hidden; /* 隐藏溢出内容 */
}
.stat-actions {
display: flex;
align-items: center;