index.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <!-- 用户信息展示 -->
  3. <userData />
  4. <!-- 轮播图 -->
  5. <!-- <swiper /> -->
  6. <!-- 用户做题预选界面 -->
  7. <van-tabs
  8. class="car-type"
  9. line-width="0"
  10. animated
  11. ref="carTypeRef"
  12. @click="carTypeChange"
  13. >
  14. <van-tab
  15. v-for="(carTypeItem, index) in carTypeList"
  16. :key="index"
  17. :name="carTypeItem.name"
  18. >
  19. <template #title>
  20. <div class="car-choose">
  21. <m-icon :type="carTypeItem.icon" class="img" />
  22. <span>{{ carTypeItem.cert }}</span>
  23. <span>{{ carTypeItem.name }}</span>
  24. </div>
  25. </template>
  26. <van-tabs class="test-type" animated>
  27. <van-tab
  28. :title="sujectItem.name"
  29. v-for="(sujectItem, index) in carTypeItem.sujectList"
  30. :key="index"
  31. :name="sujectItem.name"
  32. >
  33. <component
  34. :is="sujectOne"
  35. :query="{ ...carTypeItem.query, ...sujectItem.query }"
  36. ></component>
  37. </van-tab>
  38. </van-tabs>
  39. </van-tab>
  40. </van-tabs>
  41. </template>
  42. <script lang="ts" setup>
  43. import sujectOne from "./components/sujectOne.vue";
  44. import userData from "./components/userData.vue";
  45. import { ref, nextTick, onBeforeMount } from "vue";
  46. import { useStore } from "vuex";
  47. const store = useStore();
  48. const carTypeRef = ref<any>(null);
  49. nextTick(() => {
  50. carTypeRef.value.scrollTo(store.state.carType);
  51. });
  52. const carTypeChange = (e: string) => {
  53. store.commit("setCatType", e);
  54. };
  55. const carTypeList = ref([
  56. {
  57. name: "轿车",
  58. cert: "C1/C2/C3",
  59. icon: "jiaoche",
  60. query: { liceCar: 1 },
  61. sujectList: [
  62. {
  63. name: "科目一",
  64. query: {
  65. name: "科目一",
  66. cert: "C1/C2/C3",
  67. vehicle: "小车",
  68. subject: 1,
  69. },
  70. },
  71. {
  72. name: "科目四",
  73. query: {
  74. name: "科目四",
  75. cert: "C1/C2/C3",
  76. vehicle: "小车",
  77. subject: 4,
  78. },
  79. },
  80. ],
  81. },
  82. {
  83. name: "客车",
  84. cert: "A1/A3/B1",
  85. icon: "keche",
  86. query: { liceBus: 1 },
  87. sujectList: [
  88. {
  89. name: "科目一",
  90. query: {
  91. name: "科目一",
  92. cert: "A1/A3/B1",
  93. vehicle: "客车",
  94. subject: 1,
  95. },
  96. },
  97. {
  98. name: "科目四",
  99. query: {
  100. name: "科目四",
  101. cert: "A1/A3/B1",
  102. vehicle: "客车",
  103. subject: 4,
  104. },
  105. },
  106. ],
  107. },
  108. {
  109. name: "货车",
  110. cert: "A2/B2",
  111. icon: "huoche",
  112. query: { liceTruck: 1 },
  113. sujectList: [
  114. {
  115. name: "科目一",
  116. query: {
  117. name: "科目一",
  118. cert: "A2/B2",
  119. vehicle: "货车",
  120. subject: 1,
  121. },
  122. },
  123. {
  124. name: "科目四",
  125. query: {
  126. name: "科目四",
  127. cert: "A2/B2",
  128. vehicle: "货车",
  129. subject: 4,
  130. },
  131. },
  132. ],
  133. },
  134. {
  135. name: "摩托车",
  136. cert: "D/E/F",
  137. icon: "motuoche",
  138. query: { liceMoto: 1 },
  139. sujectList: [
  140. {
  141. name: "科目一",
  142. query: {
  143. name: "科目一",
  144. cert: "D/E/F",
  145. vehicle: "摩托车",
  146. subject: 1,
  147. },
  148. },
  149. {
  150. name: "科目四",
  151. query: {
  152. name: "科目四",
  153. cert: "D/E/F",
  154. vehicle: "摩托车",
  155. subject: 4,
  156. },
  157. },
  158. ],
  159. },
  160. ]);
  161. </script>
  162. <style lang="scss">
  163. .car-type {
  164. margin: 21px 15px;
  165. --van-tabs-line-height: 88px;
  166. .van-tab--active {
  167. .car-choose {
  168. &::after {
  169. content: "";
  170. width: 100%;
  171. height: 78px;
  172. background-color: royalblue;
  173. position: absolute;
  174. top: 0;
  175. left: 0;
  176. opacity: 0.2;
  177. }
  178. &::before {
  179. content: "";
  180. width: 0px;
  181. height: 0px;
  182. border: 10px solid #000;
  183. border-top-color: royalblue;
  184. border-bottom-color: transparent;
  185. border-left-color: transparent;
  186. border-right-color: transparent;
  187. position: absolute;
  188. bottom: 0;
  189. transform: translateY(50%);
  190. opacity: 0.2;
  191. }
  192. }
  193. }
  194. .test-type {
  195. --van-tabs-line-height: 44px;
  196. }
  197. .car-choose {
  198. display: flex;
  199. justify-content: center;
  200. align-items: center;
  201. flex-direction: column;
  202. .img {
  203. width: 66px;
  204. height: 22px;
  205. }
  206. }
  207. }
  208. </style>