index.vue 3.9 KB

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