CircleRanking.vue 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <view class="circle-ranking" v-if="circleName">
  3. <view class="cr-header">
  4. <text class="cr-title">🏅 {{ circleName }}</text>
  5. </view>
  6. <view class="cr-list">
  7. <view class="cr-item" v-for="(item, idx) in rankings" :key="idx">
  8. <text class="cr-rank">{{ '🥇🥈🥉'[idx] || '#' + (idx + 1) }}</text>
  9. <view class="cr-info">
  10. <text class="cr-family">家庭 {{ idx + 1 }}</text>
  11. <text class="cr-members">{{ item.memberCount || 0 }} 位成员</text>
  12. </view>
  13. <text class="cr-score">{{ item.totalScore || 0 }} 分</text>
  14. </view>
  15. </view>
  16. </view>
  17. <view v-else-if="!circleName && !loading" class="cr-empty">
  18. <text class="cr-empty-text">暂无健康圈数据</text>
  19. </view>
  20. </template>
  21. <script>
  22. export default {
  23. props: {
  24. circleName: { type: String, default: '' },
  25. rankings: { type: Array, default: function() { return [] } },
  26. loading: { type: Boolean, default: false }
  27. }
  28. }
  29. </script>
  30. <style scoped>
  31. .circle-ranking {
  32. background: #fff;
  33. border-radius: 20rpx;
  34. margin: 0 20rpx 20rpx 20rpx;
  35. padding: 24rpx;
  36. box-shadow: 0 2rpx 12rpx rgba(0,0,0,0.06);
  37. }
  38. .cr-header {
  39. display: flex;
  40. justify-content: space-between;
  41. align-items: center;
  42. margin-bottom: 16rpx;
  43. }
  44. .cr-title {
  45. font-size: 30rpx;
  46. font-weight: 700;
  47. color: #1E293B;
  48. }
  49. .cr-item {
  50. display: flex;
  51. align-items: center;
  52. gap: 12rpx;
  53. padding: 12rpx 0;
  54. border-bottom: 1rpx solid #F1F5F9;
  55. }
  56. .cr-item:last-child { border-bottom: none; }
  57. .cr-rank { font-size: 32rpx; width: 48rpx; text-align: center; }
  58. .cr-info { flex: 1; min-width: 0; }
  59. .cr-family { font-size: 26rpx; font-weight: 600; color: #334155; display: block; }
  60. .cr-members { font-size: 20rpx; color: #94A3B8; margin-top: 2rpx; display: block; }
  61. .cr-score { font-size: 30rpx; font-weight: 700; color: #6366F1; }
  62. .cr-empty {
  63. padding: 60rpx 20rpx;
  64. display: flex;
  65. justify-content: center;
  66. }
  67. .cr-empty-text { font-size: 26rpx; color: #94A3B8; }
  68. </style>