scroll-list-card.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <template>
  2. <view class="scroll-list-card mobile-card-box">
  3. <!-- title -->
  4. <text class="mobile-card-title">{{
  5. data.ksName === null ? "" : data.ksName
  6. }}</text>
  7. <!-- content -->
  8. <view class="mobile-card-row" style="font-size: 28rpx">
  9. 时间:{{ data.ksStartTime === null ? "" : data.ksStartTime }}-{{
  10. data.ksEndTime === null ? "" : data.ksEndTime
  11. }}
  12. </view>
  13. <view class="mobile-card-row">
  14. <text>总分:{{ data.ksScore === null ? "" : data.ksScore }}</text>
  15. <text class="card-score-box"
  16. >学分:{{ data.credit === null ? "" : data.credit }}</text
  17. >
  18. </view>
  19. <view class="mobile-card-row">
  20. <text>及格分:{{ data.okScore === null ? "" : data.okScore }}</text>
  21. <text class="card-score-box"
  22. >考试时长:{{ data.totalTm === null ? "" : data.totalTm }}分钟</text
  23. >
  24. </view>
  25. <!-- button -->
  26. <template v-for="item in btns" :key="item.status">
  27. <button
  28. class="lli-btn"
  29. @click="btnClick(item)"
  30. v-if="item.show"
  31. :key="item.status"
  32. :disabled="data.disabled"
  33. >
  34. {{ item.text }}
  35. </button>
  36. </template>
  37. </view>
  38. </template>
  39. <script setup>
  40. import { toRefs, ref, computed } from "vue";
  41. const props = defineProps({
  42. data: {
  43. type: Object,
  44. },
  45. });
  46. const { data } = toRefs(props);
  47. const btns = computed(() => [
  48. {
  49. status: 0,
  50. btnType: "kaoshi",
  51. text: "未开始",
  52. show: data.value.status === 0,
  53. },
  54. {
  55. status: 1,
  56. btnType: "kaoshi",
  57. text: "开始考试",
  58. show: data.value.status === 1,
  59. },
  60. {
  61. status: 3,
  62. btnType: "kaoshi",
  63. text: "考试中",
  64. show: data.value.status === 3,
  65. },
  66. {
  67. status: 2,
  68. btnType: "kaoshi",
  69. text: "再次考试",
  70. show: data.value.status === 2,
  71. },
  72. {
  73. status: 4,
  74. btnType: "kaoshi",
  75. text: "已结束",
  76. show: data.value.status === 4,
  77. },
  78. {
  79. status: 5,
  80. btnType: "kaoshi",
  81. text: "报名",
  82. show: data.value.status === 5,
  83. },
  84. {
  85. status: 6,
  86. btnType: "kaoshi",
  87. text: "报名审核中",
  88. show: data.value.status === 6,
  89. },
  90. {
  91. status: 7,
  92. btnType: "kaoshi",
  93. text: "审核未通过",
  94. show: data.value.status === 7,
  95. },
  96. {
  97. status: 8,
  98. btnType: "kaoshi",
  99. text: "等待人工评分",
  100. show: data.value.status === 8,
  101. },
  102. ]);
  103. </script>
  104. <style lang="scss" scoped>
  105. .mobile-card-box {
  106. box-sizing: border-box;
  107. margin: 0 30rpx 10rpx;
  108. border-bottom: 2rpx solid #f2f1f2;
  109. padding-bottom: 30rpx;
  110. }
  111. .mobile-card-title {
  112. color: #333;
  113. font-size: 32rpx;
  114. font-weight: 500;
  115. margin: 24rpx 0 24rpx 0;
  116. text-overflow: ellipsis;
  117. -o-text-overflow: ellipsis;
  118. overflow: hidden;
  119. word-wrap: break-word;
  120. display: -webkit-box;
  121. white-space: normal;
  122. -webkit-box-orient: vertical;
  123. text-align: justify;
  124. -webkit-line-clamp: 2;
  125. line-clamp: 2;
  126. line-height: 48rpx;
  127. }
  128. // 行
  129. .mobile-card-row {
  130. margin-bottom: 32rpx;
  131. display: flex;
  132. justify-content: space-between;
  133. align-items: flex-end;
  134. text {
  135. font-size: 28rpx;
  136. line-height: 40rpx;
  137. }
  138. // 得分
  139. .mobile-card-score {
  140. font-size: 40rpx;
  141. color: #f10a0a;
  142. }
  143. // 分数(有最小宽度)
  144. .card-score-box {
  145. min-width: 240rpx;
  146. text-align: left;
  147. }
  148. }
  149. // 按钮
  150. .mobile-card-btn {
  151. width: 60%;
  152. height: 80rpx;
  153. line-height: 80rpx;
  154. margin: 50rpx auto;
  155. background: linear-gradient(0deg, #436aff 0%, #234ff7 100%);
  156. border-radius: 80rpx;
  157. display: block;
  158. }
  159. </style>