index.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  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,title:'模拟考试' }"></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. //打印环境变量
  36. console.log(import.meta.env.MODE,"环境变量");
  37. nextTick(() => {
  38. carTypeRef.value.scrollTo(store.state.carType);
  39. });
  40. const carTypeChange = (e: string) => {
  41. store.commit("setCatType", e);
  42. };
  43. onBeforeMount(() => {
  44. // const router = useRouter();
  45. // console.log(router.currentRoute.value);
  46. });
  47. const carTypeList = ref([
  48. {
  49. name: "轿车",
  50. cert: "C1/C2/C3",
  51. icon: "jiaoche",
  52. query: { liceCar: 1 },
  53. sujectList: [
  54. {
  55. name: "科目一",
  56. query: {
  57. name: "科目一",
  58. cert: "C1/C2/C3",
  59. vehicle: "小车",
  60. subject: 1,
  61. },
  62. },
  63. {
  64. name: "科目四",
  65. query: {
  66. name: "科目四",
  67. cert: "C1/C2/C3",
  68. vehicle: "小车",
  69. subject: 4,
  70. },
  71. },
  72. ],
  73. },
  74. {
  75. name: "客车",
  76. cert: "A1/A3/B1",
  77. icon: "keche",
  78. query: { liceBus: 1 },
  79. sujectList: [
  80. {
  81. name: "科目一",
  82. query: {
  83. name: "科目一",
  84. cert: "A1/A3/B1",
  85. vehicle: "客车",
  86. subject: 1,
  87. },
  88. },
  89. {
  90. name: "科目四",
  91. query: {
  92. name: "科目四",
  93. cert: "A1/A3/B1",
  94. vehicle: "客车",
  95. subject: 4,
  96. },
  97. },
  98. ],
  99. },
  100. {
  101. name: "货车",
  102. cert: "A2/B2",
  103. icon: "huoche",
  104. query: { liceTruck: 1 },
  105. sujectList: [
  106. {
  107. name: "科目一",
  108. query: {
  109. name: "科目一",
  110. cert: "A2/B2",
  111. vehicle: "货车",
  112. subject: 1,
  113. },
  114. },
  115. {
  116. name: "科目四",
  117. query: {
  118. name: "科目四",
  119. cert: "A2/B2",
  120. vehicle: "货车",
  121. subject: 4,
  122. },
  123. },
  124. ],
  125. },
  126. {
  127. name: "摩托车",
  128. cert: "D/E/F",
  129. icon: "motuoche",
  130. query: { liceMoto: 1 },
  131. sujectList: [
  132. {
  133. name: "科目一",
  134. query: {
  135. name: "科目一",
  136. cert: "D/E/F",
  137. vehicle: "摩托车",
  138. subject: 1,
  139. },
  140. },
  141. {
  142. name: "科目四",
  143. query: {
  144. name: "科目四",
  145. cert: "D/E/F",
  146. vehicle: "摩托车",
  147. subject: 4,
  148. },
  149. },
  150. ],
  151. },
  152. ]);
  153. </script>
  154. <style lang="scss">
  155. .car-type {
  156. margin: 21px 15px;
  157. --van-tabs-line-height: 88px;
  158. .van-tab--active {
  159. .car-choose {
  160. &::after {
  161. content: "";
  162. width: 100%;
  163. height: 78px;
  164. background-color: royalblue;
  165. position: absolute;
  166. top: 0;
  167. left: 0;
  168. opacity: 0.2;
  169. }
  170. &::before {
  171. content: "";
  172. width: 0px;
  173. height: 0px;
  174. border: 10px solid #000;
  175. border-top-color: royalblue;
  176. border-bottom-color: transparent;
  177. border-left-color: transparent;
  178. border-right-color: transparent;
  179. position: absolute;
  180. bottom: 0;
  181. transform: translateY(50%);
  182. opacity: 0.2;
  183. }
  184. }
  185. }
  186. .test-type {
  187. --van-tabs-line-height: 44px;
  188. }
  189. .car-choose {
  190. display: flex;
  191. justify-content: center;
  192. align-items: center;
  193. flex-direction: column;
  194. .img {
  195. width: 66px;
  196. height: 22px;
  197. }
  198. }
  199. }
  200. </style>