index.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <view class="grades-terms-container">
  3. <view class="content-container">
  4. <view class="content-title">请选择年级和学期</view>
  5. <text class="content-desc">我们会根据您选择,为您匹配对应的学习内容</text>
  6. <view class="grade-label">
  7. 年级
  8. </view>
  9. <view class="grade-container">
  10. <view v-for="item in nianji_list" :key="item.id" @click="handleSelectGrade(item)"
  11. :class="['grade-item', {active: item.id == activeNianji}]">{{item.label}}</view>
  12. </view>
  13. <view class="term-label">
  14. 学期
  15. </view>
  16. <view class="term-container">
  17. <view v-for="item in xueqi_list" :key="item.id" @click="handleSelectTerm(item)"
  18. :class="['term-item',{active: item.id == activeXueqi}]">{{item.label}}</view>
  19. </view>
  20. <view class="under-line"></view>
  21. <button class="confirm-btn" @click="handleConfirm">确定</button>
  22. </view>
  23. </view>
  24. </template>
  25. <script setup>
  26. import {
  27. useSelectGrade
  28. } from './useSelectGrade';
  29. // 页面路由参数需要 年级Id+学期Id
  30. const {
  31. nianji_list,
  32. xueqi_list,
  33. activeNianji,
  34. activeXueqi,
  35. handleConfirm
  36. } = useSelectGrade()
  37. function handleSelectGrade(item) {
  38. activeNianji.value = item.id;
  39. }
  40. function handleSelectTerm(item) {
  41. activeXueqi.value = item.id;
  42. }
  43. </script>
  44. <style lang="scss" scoped>
  45. .active {
  46. // 选中状态
  47. color: red
  48. }
  49. .grade-container {
  50. display: flex;
  51. flex-wrap: wrap;
  52. }
  53. .grade-item {
  54. flex: 1;
  55. min-width: 50%;
  56. text-align: center;
  57. padding: 10px;
  58. }
  59. .grade-label {
  60. text-align: center;
  61. padding: 10px;
  62. }
  63. .term-container {
  64. display: flex;
  65. flex-wrap: wrap;
  66. }
  67. .term-item {
  68. flex: 1;
  69. min-width: 50%;
  70. text-align: center;
  71. padding: 10px;
  72. }
  73. .term-label {
  74. text-align: center;
  75. padding: 10px;
  76. }
  77. </style>