|
@@ -27,15 +27,23 @@ import { useRouter } from '../../../core/utils/router'
|
|
import PageHelper from '@/components/page-helper.vue'
|
|
import PageHelper from '@/components/page-helper.vue'
|
|
import RegisterCard from './components/register-card.vue'
|
|
import RegisterCard from './components/register-card.vue'
|
|
import { ComponentExposed } from 'vue-component-type-helpers'
|
|
import { ComponentExposed } from 'vue-component-type-helpers'
|
|
|
|
+import ShareActionSheet from './components/share-action-sheet.vue'
|
|
|
|
+import { useShare } from '@/composables/share'
|
|
|
|
+import { getByDictType } from '@/core/libs/requests'
|
|
|
|
+import { DictType } from '@/core/libs/models'
|
|
const pageHelperRef = ref<ComponentExposed<typeof PageHelper>>()
|
|
const pageHelperRef = ref<ComponentExposed<typeof PageHelper>>()
|
|
const currentBanner = ref(0)
|
|
const currentBanner = ref(0)
|
|
|
|
+const dictMemberDesignStyle = ref<any[]>()
|
|
|
|
+const dictCircleSpaceType = ref<any[]>()
|
|
const handleSwiperChange = ({ detail: { current } }) => {
|
|
const handleSwiperChange = ({ detail: { current } }) => {
|
|
currentBanner.value = current
|
|
currentBanner.value = current
|
|
}
|
|
}
|
|
const userStore = useUserStore()
|
|
const userStore = useUserStore()
|
|
const { userInfo } = storeToRefs(userStore)
|
|
const { userInfo } = storeToRefs(userStore)
|
|
const shareOptions = ref()
|
|
const shareOptions = ref()
|
|
|
|
+const shareActionState = ref(false)
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
|
+const { shareAppMessage } = useShare()
|
|
const { data: studyTours, run: setStudyTours } = useRequest(() =>
|
|
const { data: studyTours, run: setStudyTours } = useRequest(() =>
|
|
getStudyTours({ headRecommend: 1 }),
|
|
getStudyTours({ headRecommend: 1 }),
|
|
)
|
|
)
|
|
@@ -58,6 +66,10 @@ const handleLike = async (options) => {
|
|
})
|
|
})
|
|
await pageHelperRef.value?.refresh()
|
|
await pageHelperRef.value?.refresh()
|
|
}
|
|
}
|
|
|
|
+const handleShare = (options: any) => {
|
|
|
|
+ shareOptions.value = options
|
|
|
|
+ shareActionState.value = true
|
|
|
|
+}
|
|
const levelsByMemberLevel = computed(() =>
|
|
const levelsByMemberLevel = computed(() =>
|
|
levels.value.reduce((acc, item) => {
|
|
levels.value.reduce((acc, item) => {
|
|
acc[item.memberLevel] = item
|
|
acc[item.memberLevel] = item
|
|
@@ -66,10 +78,15 @@ const levelsByMemberLevel = computed(() =>
|
|
)
|
|
)
|
|
onMounted(async () => {
|
|
onMounted(async () => {
|
|
await Promise.all([setLevels(), setStudyTours(), setClassmates(), setBanners()])
|
|
await Promise.all([setLevels(), setStudyTours(), setClassmates(), setBanners()])
|
|
|
|
+ let value1 = await getByDictType(DictType.circleSpaceType)
|
|
|
|
+ dictCircleSpaceType.value = value1.data
|
|
|
|
+ let value2 = await getByDictType(DictType.memberDesignStyle)
|
|
|
|
+ dictMemberDesignStyle.value = value2.data
|
|
})
|
|
})
|
|
onShow(async () => {
|
|
onShow(async () => {
|
|
await pageHelperRef.value?.reload()
|
|
await pageHelperRef.value?.reload()
|
|
})
|
|
})
|
|
|
|
+onShareAppMessage(shareAppMessage)
|
|
</script>
|
|
</script>
|
|
<template>
|
|
<template>
|
|
<view class="flex-grow flex flex-col gap-6 p-3.5">
|
|
<view class="flex-grow flex flex-col gap-6 p-3.5">
|
|
@@ -111,67 +128,6 @@ onShow(async () => {
|
|
</template>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
- <!-- </template>
|
|
|
|
- </PageHelper> -->
|
|
|
|
- <!-- <card custom-class="p-0!">
|
|
|
|
- <view class="relative">
|
|
|
|
- <wd-img
|
|
|
|
- custom-class="vertical-bottom"
|
|
|
|
- width="100%"
|
|
|
|
- height="275"
|
|
|
|
- src="https://via.placeholder.com/347x464"
|
|
|
|
- ></wd-img>
|
|
|
|
- <div
|
|
|
|
- class="w-[63px] h-[29px] bg-black/60 rounded-[20px] backdrop-blur-[15px] absolute top-5 right-3.5 flex items-center justify-center"
|
|
|
|
- >
|
|
|
|
- <div class="text-white text-sm font-normal font-['PingFang_SC'] leading-relaxed">
|
|
|
|
- 报名中
|
|
|
|
- </div>
|
|
|
|
- </div>
|
|
|
|
- <view class="absolute left-3.5 bottom-2.5 flex items-center">
|
|
|
|
- <avatar-group-casual
|
|
|
|
- :show-number="3"
|
|
|
|
- :urls="[
|
|
|
|
- 'https://via.placeholder.com/20x20',
|
|
|
|
- 'https://via.placeholder.com/20x20',
|
|
|
|
- 'https://via.placeholder.com/20x20',
|
|
|
|
- ]"
|
|
|
|
- ></avatar-group-casual>
|
|
|
|
- <div
|
|
|
|
- class="ml-1 text-white/60 text-sm font-normal font-['PingFang_SC'] leading-[10.18px]"
|
|
|
|
- >
|
|
|
|
- 40人已报名
|
|
|
|
- </div>
|
|
|
|
- </view>
|
|
|
|
- </view>
|
|
|
|
- <div class="bg-[#27130d]/50 rounded-bl-2xl rounded-br-2xl backdrop-blur-[20px] p-3.5">
|
|
|
|
- <div class="w-[293px] text-white text-xl font-normal font-['PingFang_SC'] leading-relaxed">
|
|
|
|
- 日本研学·东京艺术大学设计游学
|
|
|
|
- </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]">
|
|
|
|
- 07.15 08.10
|
|
|
|
- </div>
|
|
|
|
- </view>
|
|
|
|
- <div
|
|
|
|
- class="text-justify text-white/60 text-sm font-normal font-['PingFang_SC'] leading-relaxed"
|
|
|
|
- >
|
|
|
|
- 等级限制:黄金会员以上
|
|
|
|
- </div>
|
|
|
|
- <view class="flex items-center justify-between">
|
|
|
|
- <view class="flex items-end">
|
|
|
|
- <div class="text-white text-3xl font-bold font-['D-DIN_Exp'] leading-normal">16000</div>
|
|
|
|
- <div class="ml-1 text-white/60 text-sm font-normal font-['PingFang_SC'] leading-[34px]">
|
|
|
|
- 积分
|
|
|
|
- </div>
|
|
|
|
- </view>
|
|
|
|
- <tilted-button custom-class="" size="large" color="white">立即报名</tilted-button>
|
|
|
|
- </view>
|
|
|
|
- </div>
|
|
|
|
- </card> -->
|
|
|
|
<card custom-class="">
|
|
<card custom-class="">
|
|
<div class="my-10px text-black text-xl fw-500 font-['PingFang_SC'] leading-[10.18px]">
|
|
<div class="my-10px text-black text-xl fw-500 font-['PingFang_SC'] leading-[10.18px]">
|
|
筑巢荟-设计游学
|
|
筑巢荟-设计游学
|
|
@@ -207,7 +163,12 @@ onShow(async () => {
|
|
<template #default="{ source }">
|
|
<template #default="{ source }">
|
|
<div class="flex-grow flex flex-col gap-6">
|
|
<div class="flex-grow flex flex-col gap-6">
|
|
<template v-for="(it, i) in source.list" :key="i">
|
|
<template v-for="(it, i) in source.list" :key="i">
|
|
- <MomentItem :options="it" @like="handleLike"></MomentItem>
|
|
|
|
|
|
+ <MomentItem
|
|
|
|
+ :dict="{ spaceType: dictCircleSpaceType, designStyle: dictMemberDesignStyle }"
|
|
|
|
+ :options="it"
|
|
|
|
+ @like="handleLike"
|
|
|
|
+ @share="handleShare"
|
|
|
|
+ ></MomentItem>
|
|
</template>
|
|
</template>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</template>
|