master
lion 2 months ago
parent 6744d456a7
commit 42f2826d47

@ -4,3 +4,4 @@ VITE_API_PROXY_TARGET=http://127.0.0.1:8000
# 微信小程序默认连线上HBuilder 直接运行无需本机后端)
# 若需连本机后端,改为 http://127.0.0.1:8000/api/miniapp/v1 并启动 php artisan serve
VITE_MP_API_BASE=https://slake.ali251.langye.net/api/miniapp/v1
#VITE_MP_API_BASE=http://127.0.0.1:8000/api/miniapp/v1

@ -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)

@ -84,7 +84,7 @@ export interface ApiBanner {
status_label?: string | null
seats_text?: string | null
datetime_text?: string | null
target_type: 'course' | 'activity' | 'custom'
target_type: 'course' | 'activity' | 'news' | 'custom'
target_id?: number | null
}

Loading…
Cancel
Save