Procházet zdrojové kódy

feat(home): 优化注册卡组件,更新活动时间显示,添加会员等级支持;重构离线活动页面数据请求逻辑

EvilDragon před 5 měsíci
rodič
revize
d4d63ba003

+ 2 - 0
packages/app/src/components/page-helper-evo.vue

@@ -0,0 +1,2 @@
+<script setup lang="ts"></script>
+<template><div></div></template>

+ 7 - 4
packages/app/src/pages/home/components/register-card.vue

@@ -3,7 +3,7 @@ import Card from '@/components/card.vue'
 import { Activity, DictType, StudyTour } from '../../../core/libs/models'
 import dayjs from 'dayjs'
 import TiltedButton from '@/components/tilted-button.vue'
-import { getActivitySignups, getByDictType } from '../../../core/libs/requests'
+import { getActivitySignups } from '../../../core/libs/requests'
 import { NetImages } from '../../../core/libs/net-images'
 import { useRouter } from '../../../core/utils/router'
 import { getActivityStatusButtonText, getActivityStatusText } from '../../../core/utils/common'
@@ -17,7 +17,6 @@ const { data: signups, run: setSignups } = useRequest(
   () => getActivitySignups({ activityId: props.options!.id.toString() }),
   { initialData: { list: [], total: 0 } },
 )
-// const {} = useRequest(() => getByDictType(DictType))
 onMounted(async () => {
   await setSignups()
 })
@@ -60,7 +59,7 @@ onMounted(async () => {
           </div>
           <view class="flex items-center">
             <div class="text-white/60 text-sm font-normal font-['PingFang_SC'] leading-[34px]">
-              游学时间:
+              活动时间:
             </div>
             <div
               class="text-white/60 text-base font-normal font-['PingFang_SC'] leading-[34px] flex items-center gap-1"
@@ -77,7 +76,11 @@ onMounted(async () => {
           <div
             class="text-justify text-white/60 text-sm font-normal font-['PingFang_SC'] leading-relaxed"
           >
-            等级限制:{{ options?.memberLevel }}
+            等级限制:{{
+              options?.memberLevel
+                ?.map((it) => options?.levelsByMemberLevel[String(it)]?.memberLevelName)
+                ?.join('、')
+            }}
           </div>
           <view class="flex items-center justify-between">
             <view class="flex items-end">

+ 28 - 12
packages/app/src/pages/home/offline-activity/index.vue

@@ -11,7 +11,12 @@
 import SectionHeading from '@/components/section-heading.vue'
 import Card from '@/components/card.vue'
 import OfflineActivityItem from '../components/offline-activity-item.vue'
-import { getAllCategories, getContents, getActivities } from '../../../core/libs/requests'
+import {
+  getAllCategories,
+  getContents,
+  getActivities,
+  getAppMemberLevelConfigs,
+} from '../../../core/libs/requests'
 import { strip, leaderboardText } from '@designer-hub/assets/src/assets/svgs'
 import { NetImages } from '../../../core/libs/net-images'
 import RegisterCard from '../components/register-card.vue'
@@ -32,6 +37,21 @@ const { data, run: setData } = useRequest(
     initialData: { list: [] },
   },
 )
+const { data: activities, run: setActivities } = useRequest(
+  () => getActivities({ headRecommend: 1 }),
+  {
+    initialData: { list: [] },
+  },
+)
+const { data: levels, run: setLevels } = useRequest(() => getAppMemberLevelConfigs(), {
+  initialData: [],
+})
+const levelsByMemberLevel = computed(() =>
+  levels.value.reduce((acc, item) => {
+    acc[item.memberLevel] = item
+    return acc
+  }, {}),
+)
 const setContentCategory = (index) => {
   contentCategory.value = categories.value.find(({ id }) => id === 2)?.children[index].id.toString()
 }
@@ -42,7 +62,7 @@ const handleTabChange = ({ index }) => {
 onMounted(async () => {
   await setCategories()
   setContentCategory(tab.value)
-  await setData()
+  await Promise.all([setActivities(), setData(), setLevels()])
 })
 </script>
 
@@ -54,17 +74,13 @@ onMounted(async () => {
       path="/pages/home/offline-activity/list/index"
       end-text="查看全部"
     ></section-heading>
-    <PageHelper :request="getActivities" :query="{ headRecommend: 1 }">
-      <template #default="{ source }">
-        <swiper class="aspect-[0.75/1] rounded-[20px] overflow-hidden">
-          <template v-for="(it, i) in source.list" :key="i">
-            <swiper-item>
-              <RegisterCard :options="it"></RegisterCard>
-            </swiper-item>
-          </template>
-        </swiper>
+    <swiper class="aspect-[0.75/1] rounded-[20px] overflow-hidden">
+      <template v-for="(it, i) in activities.list" :key="i">
+        <swiper-item>
+          <RegisterCard :options="{ ...it, levelsByMemberLevel }"></RegisterCard>
+        </swiper-item>
       </template>
-    </PageHelper>
+    </swiper>
     <card custom-class="">
       <div class="my-7.5 text-black text-xl font-normal font-['PingFang_SC'] leading-[10.18px]">
         筑巢荟-活动营

+ 1 - 2
packages/app/src/pages/home/study-tour/index.vue

@@ -66,8 +66,7 @@ onMounted(async () => {
         </div>
       </template>
     </div>
-    <!-- <PageHelper :request="getActivities" :query="{ headRecommend: 1 }">
-      <template #default="{ source }"> -->
+
     <template v-if="studyTours.list.length">
       <swiper class="aspect-[0.75/1] rounded-[20px] overflow-hidden">
         <template v-for="(it, i) in studyTours.list" :key="i">