|
|
|
|
@ -22,14 +22,14 @@
|
|
|
|
|
<image v-if="banner.cover_url" class="banner-cover-bg" :src="banner.cover_url" mode="aspectFill" />
|
|
|
|
|
<view v-if="banner.cover_url" class="banner-cover-overlay" />
|
|
|
|
|
<view class="course-banner-main">
|
|
|
|
|
<text class="course-banner-kicker">{{ banner.kicker || '推荐' }}</text>
|
|
|
|
|
<text v-if="showBannerKicker(banner)" class="course-banner-kicker">{{ banner.kicker }}</text>
|
|
|
|
|
<text class="course-banner-title">{{ banner.title }}</text>
|
|
|
|
|
<view v-if="banner.status_label || banner.seats_text || banner.datetime_text" class="course-banner-meta">
|
|
|
|
|
<view v-if="showBannerMeta(banner)" class="course-banner-meta">
|
|
|
|
|
<text v-if="banner.status_label" class="banner-meta-status">{{ banner.status_label }}</text>
|
|
|
|
|
<view v-if="banner.status_label && banner.seats_text" class="banner-meta-dot" />
|
|
|
|
|
<text v-if="banner.seats_text">{{ banner.seats_text }}</text>
|
|
|
|
|
<view v-if="(banner.status_label || banner.seats_text) && banner.datetime_text" class="banner-meta-dot" />
|
|
|
|
|
<text v-if="banner.datetime_text">{{ banner.datetime_text }}</text>
|
|
|
|
|
<view v-if="(banner.status_label || banner.seats_text) && showBannerDatetime(banner)" class="banner-meta-dot" />
|
|
|
|
|
<text v-if="showBannerDatetime(banner)">{{ banner.datetime_text }}</text>
|
|
|
|
|
</view>
|
|
|
|
|
</view>
|
|
|
|
|
<view v-if="!banner.cover_url" class="course-banner-visual">
|
|
|
|
|
@ -182,6 +182,18 @@ const successVisible = ref(false)
|
|
|
|
|
const successMessage = ref('')
|
|
|
|
|
const { privacyVisible, privacyContractName, onPrivacyConfirm, onPrivacyCancel } = usePrivacyModal()
|
|
|
|
|
|
|
|
|
|
function showBannerKicker(banner: HomeBanner): boolean {
|
|
|
|
|
return banner.type !== 'custom' && !!banner.kicker
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showBannerDatetime(banner: HomeBanner): boolean {
|
|
|
|
|
return banner.type !== 'news' && !!banner.datetime_text
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function showBannerMeta(banner: HomeBanner): boolean {
|
|
|
|
|
return !!(banner.status_label || banner.seats_text || showBannerDatetime(banner))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const displayBanners = computed(() => {
|
|
|
|
|
if (banners.value.length) return banners.value
|
|
|
|
|
const course = hotCourses.value[0]
|
|
|
|
|
@ -212,7 +224,15 @@ async function loadData() {
|
|
|
|
|
])
|
|
|
|
|
banners.value = bannerRes.items.map((item) => ({
|
|
|
|
|
...item,
|
|
|
|
|
kicker: item.kicker || (item.type === 'course' ? '热门课程' : item.type === 'activity' ? '热门活动' : '推荐'),
|
|
|
|
|
kicker:
|
|
|
|
|
item.kicker
|
|
|
|
|
|| (item.type === 'course'
|
|
|
|
|
? '热门课程'
|
|
|
|
|
: item.type === 'activity'
|
|
|
|
|
? '热门活动'
|
|
|
|
|
: item.type === 'news'
|
|
|
|
|
? '资讯'
|
|
|
|
|
: undefined),
|
|
|
|
|
}))
|
|
|
|
|
hotCourses.value = hotRes.items.map(adaptCourse)
|
|
|
|
|
latestCourses.value = latestRes.items.map(adaptCourse)
|
|
|
|
|
|