Переглянути джерело

fix: 修复排行榜前端显示问题

- 修复前三名展示条件,从 >= 3 改为 > 0,支持数据不足3条时也能正常显示
- 为每个排名位置添加独立的 v-if 判断
- 修复 API 参数名 period -> timeType
- 修复 myRank 返回类型
urbanu 1 місяць тому
батько
коміт
6387aab65f
2 змінених файлів з 8 додано та 10 видалено
  1. 4 6
      src/api/team.ts
  2. 4 4
      src/views/rank/index.vue

+ 4 - 6
src/api/team.ts

@@ -45,11 +45,10 @@ export function requestTeamCommissions(data: {
 // 获取排行榜
 export function requestGetLeaderboard(data: {
   type: 'task' | 'invite';
-  period: 'daily' | 'weekly' | 'monthly';
+  timeType: 'daily' | 'weekly' | 'monthly';
 }): Promise<CommonResponse<{
   list: LeaderboardItem[];
-  myRank: number;
-  myCount: number;
+  myRank: LeaderboardItem | null;
 }>> {
   return http.request({
     url: "/api/v1/dt/rank/list",
@@ -80,11 +79,10 @@ export function requestBindTeam(data: { code: string }): Promise<CommonResponse>
 // 获取排行榜(别名,兼容旧代码)
 export function requestLeaderboard(data: {
   type: 'task' | 'invite';
-  period: 'daily' | 'weekly' | 'monthly';
+  timeType: 'daily' | 'weekly' | 'monthly';
 }): Promise<CommonResponse<{
   list: LeaderboardItem[];
-  myRank: number;
-  myCount: number;
+  myRank: LeaderboardItem | null;
 }>> {
   return requestGetLeaderboard(data);
 }

+ 4 - 4
src/views/rank/index.vue

@@ -46,8 +46,8 @@
     <!-- 排行榜列表 -->
     <div class="rank-list">
       <!-- 前三名 -->
-      <div class="top-three" v-if="rankList.length >= 3">
-        <div class="top-item second">
+      <div class="top-three" v-if="rankList.length > 0">
+        <div class="top-item second" v-if="rankList[1]">
           <div class="avatar-wrap">
             <img :src="rankList[1]?.avatar || defaultAvatar" class="avatar" />
             <div class="rank-badge">2</div>
@@ -55,7 +55,7 @@
           <div class="nickname">{{ rankList[1]?.nickname || 'User' }}</div>
           <div class="value">{{ formatValue(rankList[1]) }}</div>
         </div>
-        <div class="top-item first">
+        <div class="top-item first" v-if="rankList[0]">
           <div class="crown">👑</div>
           <div class="avatar-wrap">
             <img :src="rankList[0]?.avatar || defaultAvatar" class="avatar" />
@@ -64,7 +64,7 @@
           <div class="nickname">{{ rankList[0]?.nickname || 'User' }}</div>
           <div class="value">{{ formatValue(rankList[0]) }}</div>
         </div>
-        <div class="top-item third">
+        <div class="top-item third" v-if="rankList[2]">
           <div class="avatar-wrap">
             <img :src="rankList[2]?.avatar || defaultAvatar" class="avatar" />
             <div class="rank-badge">3</div>