list.vue 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <route lang="json">
  2. {
  3. "style": {
  4. "navigationBarTitleText": "游学计划",
  5. "navigationBarBackgroundColor": "#fff"
  6. }
  7. }
  8. </route>
  9. <script setup lang="ts">
  10. import SectionHeading from '@/components/section-heading.vue'
  11. import { BannerMode } from '../../../core/libs/models'
  12. import { getAppMemberLevelConfigs, getStudyTours, getBanners } from '../../../core/libs/requests'
  13. import StudyTourCard from './components/study-tour-card.vue'
  14. import PageHelper from '@/components/page-helper.vue'
  15. // const title = computed(() => `${dayjs().year()}年游学计划`)
  16. const designStudyAbroadYear = ref('')
  17. const title = ref('')
  18. const studyYear = ref('')
  19. const designDesc = ref('')
  20. const { data: levels, run: setLevels } = useRequest(() => getAppMemberLevelConfigs(), {
  21. initialData: [],
  22. })
  23. const levelsByMemberLevel = computed(() =>
  24. levels.value.reduce((acc, item) => {
  25. acc[item.memberLevel] = item
  26. return acc
  27. }, {}),
  28. )
  29. const { data: banners, run: setBanners } = useRequest(
  30. () => getBanners({ mode: BannerMode.StudyTour }),
  31. { initialData: [] },
  32. )
  33. onLoad(async (query?: Record<string | 'designStudyAbroadYear' | 'designDesc', string>) => {
  34. designStudyAbroadYear.value = query.designStudyAbroadYear
  35. title.value = `${designStudyAbroadYear.value}年游学计划`
  36. if (query.designDesc) {
  37. designDesc.value = decodeURIComponent(query.designDesc)
  38. }
  39. })
  40. onMounted(async () => {
  41. await setLevels()
  42. await setBanners()
  43. console.log(banners)
  44. })
  45. onShareAppMessage(() => ({
  46. title: '游学计划',
  47. imageUrl: banners.value?.length > 0 ? banners.value[0].bannerImgUrl : '',
  48. }))
  49. onShareTimeline(() => ({
  50. title: '游学计划',
  51. imageUrl: banners.value?.length > 0 ? banners.value[0].bannerImgUrl : '',
  52. }))
  53. </script>
  54. <template>
  55. <div class="flex flex-col gap-6 p-3.5">
  56. <SectionHeading custom-class="" :title="title"></SectionHeading>
  57. <div
  58. v-if="designDesc"
  59. class="mx-3.5 relative top--4 text-justify text-black/40 text-sm font-normal font-['PingFang_SC'] leading-relaxed"
  60. >
  61. <!-- *我们为您精心打造了一个独特且极具价值的游学项目。这个项目的核心旨在全方位提升-->
  62. {{ designDesc }}
  63. </div>
  64. <PageHelper
  65. :request="getStudyTours"
  66. :query="{ showStatus: '1', studyYear: designStudyAbroadYear }"
  67. >
  68. <template #default="{ source }">
  69. <div class="py-4 flex flex-col gap-6">
  70. <template v-for="(it, index) in source?.list" :key="index">
  71. <div class="mx--2.5 my--2.5">
  72. <StudyTourCard
  73. custom-class=""
  74. :options="{ ...it, levelsByMemberLevel, index }"
  75. ></StudyTourCard>
  76. </div>
  77. </template>
  78. </div>
  79. </template>
  80. </PageHelper>
  81. </div>
  82. </template>