Răsfoiți Sursa

feat(gameEvent): 排行榜页面优化成绩显示格式并添加单位标识

- 统一个人赛和个人团队赛的成绩显示逻辑,简化条件判断
- 添加项目单位自动识别功能,支持计时类(秒)和距离/远度/高度类(米)
- 新增个人项目和团队项目的单位计算属性
- 为成绩显示添加数字字体样式和单位标签样式
- 移除冗余的成绩分类判断逻辑,统一使用score字段显示
zhou 2 săptămâni în urmă
părinte
comite
d5661ef162
1 a modificat fișierele cu 50 adăugiri și 4 ștergeri
  1. 50 4
      src/views/system/gameEvent/RankingBoardPage.vue

+ 50 - 4
src/views/system/gameEvent/RankingBoardPage.vue

@@ -107,8 +107,10 @@
                 <span class="item-name">{{ item.name || item.athleteName }}</span>
                 <span class="item-team">{{ item.teamName }}</span>
                 <span class="item-project-name">{{ selectedProjectName }}</span>
-                <span class="item-score" v-if="item.classification=='0'">{{item.individualPerformance || item.score || item.totalScore }}</span>
-                <span class="item-score" v-else-if="item.classification=='1'">{{item.teamPerformance || item.score || item.totalScore }}</span>
+                <span class="item-score">
+                  {{ item.score || '-' }}
+                  <span v-if="item.score && item.score !== '-' && item.score !== '无成绩'" class="score-unit">{{ personalUnit }}</span>
+                </span>
               </div>
             </div>
           </div>
@@ -220,8 +222,10 @@
                 <span class="item-project-name">{{ selectedTeamProjectName }}</span>
                 <span class="item-team-name">{{ item.name || item.teamName }}</span>
                 <span class="item-group">{{ item.rgName || '-' }}</span>
-                <span class="item-score" v-if="item.classification=='1'">{{ item.teamPerformance || item.score || item.totalScore }}</span>
-                <span class="item-score" v-else>{{ item.score || item.totalScore }}</span>
+                <span class="item-score">
+                  {{ item.score || '-' }}
+                  <span v-if="item.score && item.score !== '-' && item.score !== '无成绩'" class="score-unit">{{ teamUnit }}</span>
+                </span>
               </div>
             </div>
           </div>
@@ -275,6 +279,33 @@ const projectProgress = ref<ProjectProgressVo[]>([]);
 const teamScores = ref<TeamScore[]>([]);
 const filteredTeamScores = ref<any[]>([]); // 用于显示筛选后的队伍积分
 
+// 获取当前项目的单位
+const getProjectUnit = (project: any) => {
+  if (!project) return '';
+  if (project.countUnit) return project.countUnit;
+  
+  // 自动兜底逻辑
+  const rule = String(project.scoreRule);
+  if (rule === '1') return '秒'; // 计时类
+  if (rule === '2' || rule === '3' || rule === '6') return '米'; // 距离/远度/高度类
+  
+  // 备选方案:按项目名称关键字识别
+  if (project.projectName?.includes('计时')) return '秒';
+  if (project.projectName?.includes('米') || project.projectName?.includes('远') || project.projectName?.includes('高')) return '米';
+  
+  return '';
+};
+
+const personalUnit = computed(() => {
+  const project = personalProjectOptions.value.find(p => p.projectId == selectedProjectId.value);
+  return getProjectUnit(project);
+});
+
+const teamUnit = computed(() => {
+  const project = teamProjectOptions.value.find(p => p.projectId == selectedTeamProjectId.value);
+  return getProjectUnit(project);
+});
+
 const ALL_GROUPS_VALUE = 'all';
 // 分组相关数据
 const rankGroupOptions = ref<RankGroupVO[]>([]);
@@ -1093,6 +1124,21 @@ onMounted(async () => {
 }
 
 /* 标题样式 */
+.item-score {
+  width: 120px;
+  /* text-align: right; */
+  font-weight: bold;
+  color: green;
+  font-family: 'Digital-7', 'Courier New', Courier, monospace;
+}
+
+.score-unit {
+  font-size: 0.8em;
+  /* margin-left: 4px; */
+  color: green;
+  font-family: 'Inter', sans-serif;
+}
+
 .header-title {
   text-align: center;
   font-weight: bold;