scroll-list-card.vue 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  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. const Emits = defineEmits(['btnClick'])
  104. function btnClick(data) {
  105. Emits('btnClick',data)
  106. }
  107. </script>
  108. <style lang="scss" scoped>
  109. .mobile-card-box {
  110. box-sizing: border-box;
  111. margin: 0 30rpx 10rpx;
  112. border-bottom: 2rpx solid #f2f1f2;
  113. padding-bottom: 30rpx;
  114. }
  115. .mobile-card-title {
  116. color: #333;
  117. font-size: 32rpx;
  118. font-weight: 500;
  119. margin: 24rpx 0 24rpx 0;
  120. text-overflow: ellipsis;
  121. -o-text-overflow: ellipsis;
  122. overflow: hidden;
  123. word-wrap: break-word;
  124. display: -webkit-box;
  125. white-space: normal;
  126. -webkit-box-orient: vertical;
  127. text-align: justify;
  128. -webkit-line-clamp: 2;
  129. line-clamp: 2;
  130. line-height: 48rpx;
  131. }
  132. // 行
  133. .mobile-card-row {
  134. margin-bottom: 32rpx;
  135. display: flex;
  136. justify-content: space-between;
  137. align-items: flex-end;
  138. text {
  139. font-size: 28rpx;
  140. line-height: 40rpx;
  141. }
  142. // 得分
  143. .mobile-card-score {
  144. font-size: 40rpx;
  145. color: #f10a0a;
  146. }
  147. // 分数(有最小宽度)
  148. .card-score-box {
  149. min-width: 240rpx;
  150. text-align: left;
  151. }
  152. }
  153. // 按钮
  154. .mobile-card-btn {
  155. width: 60%;
  156. height: 80rpx;
  157. line-height: 80rpx;
  158. margin: 50rpx auto;
  159. background: linear-gradient(0deg, #436aff 0%, #234ff7 100%);
  160. border-radius: 80rpx;
  161. display: block;
  162. }
  163. </style>