|
|
@@ -64,8 +64,9 @@
|
|
64
|
64
|
<!-- 成员卡片 -->
|
|
65
|
65
|
<div
|
|
66
|
66
|
v-for="member in memberList" :key="member.personName"
|
|
67
|
|
- class="member-card"
|
|
68
|
|
- :class="getMemberBorderClass(member.totalScore)">
|
|
|
67
|
+ class="member-card clickable-card"
|
|
|
68
|
+ :class="getMemberBorderClass(member.totalScore)"
|
|
|
69
|
+ @click="goToPortrait(member.personName)">
|
|
69
|
70
|
<div class="card-name" :class="getNameClass(member.totalScore)">
|
|
70
|
71
|
{{ member.personName }}({{ member.totalScore }}分)
|
|
71
|
72
|
</div>
|
|
|
@@ -81,10 +82,17 @@
|
|
81
|
82
|
import { ref, reactive, onMounted, onBeforeUnmount, nextTick, computed, watch } from 'vue'
|
|
82
|
83
|
import { ElMessage } from 'element-plus'
|
|
83
|
84
|
import * as echarts from 'echarts'
|
|
|
85
|
+import { useRouter } from 'vue-router'
|
|
84
|
86
|
import { radarTeamList, radarMemberScores, syncLedgerAll } from '@/api/score/index'
|
|
85
|
87
|
|
|
86
|
88
|
defineOptions({ name: 'ScoreRadar' })
|
|
87
|
89
|
|
|
|
90
|
+const router = useRouter()
|
|
|
91
|
+
|
|
|
92
|
+function goToPortrait(personName) {
|
|
|
93
|
+ router.push({ name: 'EmployeeProfile', query: { personName } })
|
|
|
94
|
+}
|
|
|
95
|
+
|
|
88
|
96
|
// ── 状态 ──────────────────────────────────────────────
|
|
89
|
97
|
const loading = ref(false)
|
|
90
|
98
|
const syncing = ref(false)
|
|
|
@@ -430,4 +438,13 @@ watch(compareNames, () => nextTick(renderCompareChart), { deep: true })
|
|
430
|
438
|
.compare-table .col-person { min-width: 48px; }
|
|
431
|
439
|
.score-green { color: #67C23A; font-weight: bold; }
|
|
432
|
440
|
.score-red { color: #F56C6C; font-weight: bold; }
|
|
|
441
|
+
|
|
|
442
|
+.clickable-card {
|
|
|
443
|
+ cursor: pointer;
|
|
|
444
|
+ transition: box-shadow 0.2s, transform 0.2s;
|
|
|
445
|
+}
|
|
|
446
|
+.clickable-card:hover {
|
|
|
447
|
+ box-shadow: 0 0 12px rgba(26, 106, 255, 0.6);
|
|
|
448
|
+ transform: translateY(-2px);
|
|
|
449
|
+}
|
|
433
|
450
|
</style>
|