index.vue 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <template>
  2. <view class="service-review-page">
  3. <view class="summary-bar">
  4. <text class="avg-score">4.8</text>
  5. <text class="avg-label">综合评分</text>
  6. <text class="total-count">共 {{ reviews.length }} 条评价</text>
  7. </view>
  8. <view class="review-list">
  9. <view class="review-card" v-for="item in reviews" :key="item.id">
  10. <view class="review-header">
  11. <view class="user-info">
  12. <view class="user-avatar"><text>{{ item.userName[0] }}</text></view>
  13. <text class="user-name">{{ item.userName }}</text>
  14. </view>
  15. <text class="stars">{{ '★'.repeat(item.rating) }}{{ '☆'.repeat(5 - item.rating) }}</text>
  16. </view>
  17. <text class="review-content">{{ item.content }}</text>
  18. <text class="review-time">{{ item.time }}</text>
  19. </view>
  20. </view>
  21. </view>
  22. </template>
  23. <script setup>
  24. import { ref } from 'vue'
  25. import reviewMockData from '@/mock/review.json'
  26. const reviews = ref(reviewMockData)
  27. </script>
  28. <style lang="scss" scoped>
  29. .service-review-page {
  30. min-height: 100vh;
  31. background: #f7f8fa;
  32. }
  33. .summary-bar {
  34. background: #fff;
  35. padding: 40rpx;
  36. display: flex;
  37. align-items: baseline;
  38. gap: 16rpx;
  39. border-bottom: 1rpx solid #f5f5f5;
  40. }
  41. .avg-score {
  42. font-size: 56rpx;
  43. font-weight: 900;
  44. color: #ff9500;
  45. }
  46. .avg-label {
  47. font-size: 26rpx;
  48. color: #333;
  49. }
  50. .total-count {
  51. font-size: 24rpx;
  52. color: #999;
  53. margin-left: auto;
  54. }
  55. .review-list {
  56. padding: 24rpx;
  57. }
  58. .review-card {
  59. background: #fff;
  60. border-radius: 20rpx;
  61. padding: 28rpx;
  62. margin-bottom: 20rpx;
  63. }
  64. .review-header {
  65. display: flex;
  66. justify-content: space-between;
  67. align-items: center;
  68. margin-bottom: 16rpx;
  69. }
  70. .user-info {
  71. display: flex;
  72. align-items: center;
  73. gap: 16rpx;
  74. }
  75. .user-avatar {
  76. width: 64rpx;
  77. height: 64rpx;
  78. border-radius: 50%;
  79. background: #e3f2fd;
  80. color: #2196f3;
  81. display: flex;
  82. align-items: center;
  83. justify-content: center;
  84. font-weight: bold;
  85. font-size: 28rpx;
  86. }
  87. .user-name {
  88. font-size: 28rpx;
  89. color: #333;
  90. font-weight: 600;
  91. }
  92. .stars {
  93. color: #f7ca3e;
  94. font-size: 26rpx;
  95. }
  96. .review-content {
  97. display: block;
  98. font-size: 28rpx;
  99. color: #555;
  100. line-height: 1.6;
  101. margin-bottom: 12rpx;
  102. }
  103. .review-time {
  104. display: block;
  105. font-size: 24rpx;
  106. color: #bbb;
  107. }
  108. </style>