Browse Source

feat(my-study-tour): 添加 MyStudyTour 接口及获取已报名游学的请求

EvilDragon 3 months ago
parent
commit
7ae2b07174

+ 50 - 0
packages/app/src/core/libs/models.ts

@@ -347,6 +347,56 @@ export interface StudyTour {
     clockExplainUrl: string
   }[]
 }
+export interface MyStudyTour {
+  id: number
+  name: string
+  studyType: string
+  planApplyStartTime: number
+  planApplyEndTime?: number
+  planStudyStartTime: number
+  planStudyEndTime?: number
+  planStudyAllowType?: string
+  planStudyAllowCount?: number
+  studyYear: string
+  memberLevel: number[]
+  needPointsType: string
+  needPointsCount?: number
+  badgeId?: number
+  applyStartTime: number
+  applyEndTime: number
+  applyStatus?: number
+  studyStartTime: number
+  studyEndTime: number
+  studyAllowType: string
+  studyAllowCount: number
+  bannerUrl: string
+  thumbnailUrl: string
+  backgroundUrl: string
+  studyDesc: string
+  isTravelPlan: number
+  showStatus: number
+  headRecommend: number
+  signUpCount: any
+  viewCount: number
+  createTime: number
+  ifSingnUp: boolean
+  studyTravelDOList: {
+    createTime: any
+    updateTime: any
+    creator: any
+    updater: any
+    deleted: any
+    id: any
+    studyId: number
+    travelDate: any
+    travelTime: number
+    title: string
+    travelDesc: string
+    clockExplainDesc: string
+    clockExplainUrl: string
+  }[]
+}
+
 export interface Banner {
   id: number
   name: string

+ 6 - 0
packages/app/src/core/libs/requests.ts

@@ -18,6 +18,7 @@ import {
   ResPageData,
   Message,
   Coupon,
+  MyStudyTour,
 } from './models'
 import dayjs from 'dayjs'
 import { pointsCancel } from '../../../../merchant/node_modules/@designer-hub/app/src/core/libs/requests'
@@ -865,6 +866,11 @@ export const getProductCoupons = (query) =>
  */
 export const getPointsCoupons = (query) =>
   httpGet<Coupon[]>('/app-api/member/coupon-user/coupon-user-by-point-ids-page', query)
+/**
+ * 获取已报名的游学
+ */
+export const getMyStudyTours = (query = {}) =>
+  httpGet<MyStudyTour[]>('/app-api/member/app-study-abroad/getSignUpStudyAbroad', query)
 export const refreshToken = (refreshToken: string) =>
   httpPost<any>('/app-api/member/auth/refresh-token', {}, { refreshToken })
 export const httpGetMock = <T>(data: T) =>

+ 27 - 23
packages/app/src/pages/home/components/schedule-card.vue

@@ -1,29 +1,26 @@
 <script setup lang="ts">
 import SectionHeading from '@/components/section-heading.vue'
-import { scheduleCardBg } from '@/core/libs/pngs'
+import { scheduleCardBg } from '../../../core/libs/pngs'
+import { MyStudyTour, StudyTour } from '../../../core/libs/models'
+import { group } from 'radash'
+import dayjs from 'dayjs'
 
-const props = defineProps({
-  customClass: {
-    type: String,
-    default: () => '',
-  },
-  options: {
-    type: Object,
-    default: () => ({
-      items: [
-        { date: '9:00', title: '早稻田大学课程', desc: '学习灯光设计师课程' },
-        { date: '11:00', title: '早稻田大学博物馆参观', desc: '了解博物馆历史' },
-        { date: '15:00', title: '早稻田大学设计交流会', desc: '交流学习设计心得' },
-      ],
-    }),
-  },
+const props = withDefaults(defineProps<{ customClass?: string; items?: MyStudyTour[] }>(), {
+  items: () => [],
 })
 const data = ref()
+const dates = computed(() => {
+  const a = props.items.at(0)?.studyTravelDOList
+  // 使用radash将studyTravelDOList 中的travelTime字段按天分组
+  const b = group(a, (it) => dayjs(it.travelTime).format('YYYY-MM-DD'))
+  console.log(b)
+  return b
+})
 const pull = () => {
-  data.value = props.options.items.slice(0, 3)
+  data.value = props.items.at(0)?.studyTravelDOList.slice(0, 3)
 }
 const push = () => {
-  data.value = props.options.items.slice(0, 2)
+  data.value = props.items.at(0)?.studyTravelDOList.slice(0, 2)
 }
 const handleClick = async () => {
   uni.navigateTo({ url: '/pages/home/schedule/index' })
@@ -38,12 +35,16 @@ onMounted(() => {
     <div
       class="w-full my-3.5 text-[#acacac] text-sm font-normal font-['PingFang_SC'] leading-normal"
     >
-      6月26日 第二天
+      <!-- 6月26日 第二天 -->
+      <!-- {{ dates }} -->
+      <!-- {{ items?.at(0)?.studyTravelDOList?.at(0)?.travelTime }} -->
+      {{ Object.keys(dates).at(0) }}
+      第{{ 1 }}天
     </div>
     <div
       class="w-80 bg-gradient-to-r from-[#141414] to-[#4b4949] rounded-tl-2xl rounded-tr-2xl p-6 box-border"
     >
-      <template v-for="(it, index) in data" :key="index">
+      <template v-for="(it, index) in Object.values(dates)" :key="index">
         <view class="relative mb-4">
           <view class="flex items-center">
             <div class="w-2 h-2 left-0 top-0 rounded-full border-2 border-solid border-white"></div>
@@ -51,14 +52,17 @@ onMounted(() => {
             <div
               class="w-12 ml-3.5 text-white text-base font-normal font-['PingFang_SC'] leading-normal"
             >
-              9:00
+              <!-- 9:00 -->
+              {{ dayjs(it.at(0)?.travelTime).format('HH:mm') }}
             </div>
             <div class="text-white text-base font-normal font-['PingFang_SC'] leading-normal">
-              早稻田大学课程
+              <!-- 早稻田大学课程 -->
+              {{ it.at(0)?.title }}
             </div>
           </view>
           <div class="ml-6.5 text-white/40 text-sm font-normal font-['PingFang_SC'] leading-normal">
-            学习灯光设计师课程
+            <!-- 学习灯光设计师课程 -->
+            {{ it.at(0)?.travelDesc }}
           </div>
           <div
             v-if="index !== data?.length - 1"

+ 14 - 2
packages/app/src/pages/home/index.vue

@@ -16,7 +16,12 @@ import MomentItem from '@/components/moment-item.vue'
 import HomeBanner from './components/home-banner.vue'
 import useRequest from '../../hooks/useRequest'
 import Menus from './components/menus.vue'
-import { getCircles, getSetIndexConfigs, shareCircle } from '../../core/libs/requests'
+import {
+  getCircles,
+  getMyStudyTours,
+  getSetIndexConfigs,
+  shareCircle,
+} from '../../core/libs/requests'
 import { logo } from '../../core/libs/svgs'
 import PageHelper from '@/components/page-helper.vue'
 import { ComponentExposed } from 'vue-component-type-helpers'
@@ -25,6 +30,7 @@ import { storeToRefs } from 'pinia'
 import { messages } from '../../core/libs/messages'
 import { handleUpvoteClick, handleShareClick } from '../../core/libs/actions'
 import { useUserStore } from '../../store'
+import ScheduleCard from './components/schedule-card.vue'
 
 defineOptions({
   name: 'Home',
@@ -37,6 +43,9 @@ const { data: indexConfigsData, run: setIndexConfigsData } = useRequest(
   () => getSetIndexConfigs(),
   { initialData: { list: [] } },
 )
+const { data: studyTours, run: setStudyTours } = useRequest(() => getMyStudyTours(), {
+  initialData: [],
+})
 const swiperData = ref<{ data: any }[]>()
 const swiperCurrent = ref(0)
 
@@ -45,6 +54,7 @@ onShow(async () => {
 })
 onLoad(async () => {
   await setIndexConfigsData()
+  await setStudyTours()
   swiperData.value = indexConfigsData.value.list.map((it) => ({
     data: it,
   }))
@@ -124,7 +134,9 @@ onShareAppMessage(async ({ from, target }) => {
       </swiper>
     </view>
     <view class="bg-[#f6f6f6] relative bottom-4 rounded-t-2xl py-1">
-      <!-- <ScheduleCard custom-class="my-6 mx-3.5"></ScheduleCard> -->
+      <template v-if="studyTours?.length">
+        <ScheduleCard custom-class="my-6 mx-3.5" :items="studyTours"></ScheduleCard>
+      </template>
       <menus></menus>
       <!-- <view class="my-6 mx-3.5">
         <HotActivity></HotActivity>