WealthSubScores.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <view class="wealth-sub-scores">
  3. <view class="section-title">
  4. <text class="title">{{ isParent ? '财富维度构成' : '富能量构成' }}</text>
  5. </view>
  6. <!-- 家长三子维度 -->
  7. <view class="sub-grid" v-if="isParent">
  8. <view class="sub-item">
  9. <view class="sub-label">金钱收入</view>
  10. <view class="sub-value" :class="incomeClass">{{ income }}</view>
  11. <view class="sub-weight">权重 50%</view>
  12. </view>
  13. <view class="sub-item">
  14. <view class="sub-label">社会成就</view>
  15. <view class="sub-value" :class="achievementClass">{{ achievement }}</view>
  16. <view class="sub-weight">权重 30%</view>
  17. </view>
  18. <view class="sub-item">
  19. <view class="sub-label">资源网络</view>
  20. <view class="sub-value" :class="networkClass">{{ network }}</view>
  21. <view class="sub-weight">权重 20%</view>
  22. </view>
  23. </view>
  24. <!-- 孩子三子维度 -->
  25. <view class="sub-grid" v-else>
  26. <view class="sub-item">
  27. <view class="sub-label">学业成绩</view>
  28. <view class="sub-value" :class="educationClass">{{ education }}</view>
  29. <view class="sub-weight">权重 30%</view>
  30. </view>
  31. <view class="sub-item">
  32. <view class="sub-label">社交筹码</view>
  33. <view class="sub-value" :class="socialClass">{{ social }}</view>
  34. <view class="sub-weight">权重 20%</view>
  35. </view>
  36. <view class="sub-item">
  37. <view class="sub-label">规则博弈</view>
  38. <view class="sub-value" :class="pointsClass">{{ points }}</view>
  39. <view class="sub-weight">权重 50%</view>
  40. </view>
  41. </view>
  42. </view>
  43. </template>
  44. <script>
  45. export default {
  46. name: 'WealthSubScores',
  47. props: {
  48. role: {
  49. type: String,
  50. default: 'parent'
  51. },
  52. income: {
  53. type: Number,
  54. default: 0
  55. },
  56. achievement: {
  57. type: Number,
  58. default: 0
  59. },
  60. network: {
  61. type: Number,
  62. default: 0
  63. },
  64. education: {
  65. type: Number,
  66. default: 0
  67. },
  68. social: {
  69. type: Number,
  70. default: 0
  71. },
  72. points: {
  73. type: Number,
  74. default: 0
  75. }
  76. },
  77. computed: {
  78. isParent() {
  79. return this.role === 'parent'
  80. },
  81. incomeClass() {
  82. return this.getScoreClass(this.income)
  83. },
  84. achievementClass() {
  85. return this.getScoreClass(this.achievement)
  86. },
  87. networkClass() {
  88. return this.getScoreClass(this.network)
  89. },
  90. educationClass() {
  91. return this.getScoreClass(this.education)
  92. },
  93. socialClass() {
  94. return this.getScoreClass(this.social)
  95. },
  96. pointsClass() {
  97. return this.getScoreClass(this.points)
  98. }
  99. },
  100. methods: {
  101. getScoreClass(score) {
  102. if (score >= 80) return 'score-excellent'
  103. if (score >= 60) return 'score-good'
  104. if (score >= 40) return 'score-average'
  105. return 'score-poor'
  106. }
  107. }
  108. }
  109. </script>
  110. <style scoped>
  111. .wealth-sub-scores {
  112. margin: 20rpx;
  113. padding: 24rpx;
  114. background: #fff;
  115. border-radius: 12rpx;
  116. box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.08);
  117. }
  118. .section-title {
  119. margin-bottom: 20rpx;
  120. }
  121. .section-title .title {
  122. font-size: 30rpx;
  123. font-weight: bold;
  124. color: #333;
  125. }
  126. .sub-grid {
  127. display: flex;
  128. flex-direction: row;
  129. justify-content: space-between;
  130. }
  131. .sub-item {
  132. flex: 1;
  133. text-align: center;
  134. padding: 20rpx;
  135. background: #f9f9f9;
  136. border-radius: 8rpx;
  137. margin: 0 8rpx;
  138. }
  139. .sub-item:first-child {
  140. margin-left: 0;
  141. }
  142. .sub-item:last-child {
  143. margin-right: 0;
  144. }
  145. .sub-label {
  146. font-size: 24rpx;
  147. color: #666;
  148. margin-bottom: 12rpx;
  149. }
  150. .sub-value {
  151. font-size: 40rpx;
  152. font-weight: bold;
  153. margin-bottom: 8rpx;
  154. }
  155. .score-excellent {
  156. color: #52c41a;
  157. }
  158. .score-good {
  159. color: #1890ff;
  160. }
  161. .score-average {
  162. color: #faad14;
  163. }
  164. .score-poor {
  165. color: #ff4d4f;
  166. }
  167. .sub-weight {
  168. font-size: 20rpx;
  169. color: #999;
  170. }
  171. </style>