index.vue 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <wd-navbar :title="titleArr[type]" fixed placeholder safeAreaInsetTop :bordered="false" leftArrow
  3. @click-left="router.back()"></wd-navbar>
  4. <view class="px32rpx py-24rpx" v-if="data">
  5. <course disabled :item="courseItem"></course>
  6. <view class="mt24rpx flex items-center" v-if="todayClass.length">
  7. <image src="@/subPack/static/nz.png" class="w-30rpx h30rpx"></image>
  8. <view class="text-32rpx ml-3 font-semibold">今日上课</view>
  9. </view>
  10. <view class="mt24rpx">
  11. <template v-for="item in todayClass" :key="item.id">
  12. <view class="mb24rpx">
  13. <ClassItem :type="type" :item="item" showBtn></ClassItem>
  14. </view>
  15. </template>
  16. </view>
  17. <view class="title">
  18. <view class="mt24rpx mb24rpx flex text-32rpx items-center" v-if="NormalClass.length">
  19. <view class="mr28rpx" :class="[tab == 0 ? 'text-#0074FF' : 'text-[rgb(0,0,0,0.3)]']" @click="tab = 0">正常课({{
  20. NormalClass?.length }})</view>
  21. <view :class="[tab == 1 ? 'text-#0074FF' : 'text-[rgb(0,0,0,0.3)]']" @click="handleGoView">补课({{
  22. MakeUpCasses?.length }})</view>
  23. </view>
  24. <view v-for="item in NormalClass" class="mb24rpx" :key="item.id">
  25. <ClassItem :type="type" :item="item" :showBtn="false"></ClassItem>
  26. </view>
  27. <view v-if="MakeUpCasses?.length" class="text-#0074FF mt24rpx mb24rpx view">补课({{ MakeUpCasses?.length }})</view>
  28. <view v-for="item in MakeUpCasses" class="mb24rpx" :key="item.id">
  29. <ClassItem :type="type" :item="item" :showBtn="false"></ClassItem>
  30. </view>
  31. </view>
  32. </view>
  33. </template>
  34. <script setup lang="ts">
  35. import router from "@/router";
  36. const tab = ref(0);
  37. const type = ref(0);
  38. const titleArr = ["拍照验课", "选择课程", "选择延期课时"];
  39. const { courseItem } = storeToRefs(useCourseStore());
  40. const queryId = ref();
  41. onLoad((query: any) => {
  42. type.value = query.type;
  43. queryId.value = query.id;
  44. console.log(query, '拍照');
  45. });
  46. const NormalClass = computed(() => {
  47. return data.value.filter((it) => it.coursesType == 0 && !it.orToday);
  48. });
  49. const MakeUpCasses = computed(() => {
  50. return data.value.filter((it) => it.coursesType == 1 && !it.orToday);
  51. });
  52. const todayClass = computed(() => {
  53. return data.value.filter((it) => it.orToday);
  54. });
  55. onShow(() => {
  56. getData(queryId.value);
  57. });
  58. const { send: getData, data } = useRequest(
  59. (courseId: string) =>
  60. Apis.app.getCourseInfo({
  61. pathParams: {
  62. courseId,
  63. },
  64. }),
  65. {
  66. immediate: false,
  67. },
  68. ).onSuccess(() => {
  69. setTimeout(() => {
  70. uni
  71. .createIntersectionObserver(getCurrentInstance())
  72. .relativeToViewport(".title")
  73. .observe(".view", (res) => {
  74. console.log(res, "监听");
  75. if (res.intersectionRatio == 0) {
  76. tab.value = 0;
  77. }
  78. });
  79. }, 10);
  80. });
  81. function handleGoView() {
  82. tab.value = 1;
  83. uni.pageScrollTo({ selector: ".view" });
  84. }
  85. </script>
  86. <style scoped></style>
  87. <route lang="json">{
  88. "name": "classInspectionDetaile",
  89. "style": {
  90. "navigationBarTitleText": "拍照验课",
  91. "navigationStyle": "custom"
  92. }
  93. }</route>