49 lines
1.5 KiB
Vue
49 lines
1.5 KiB
Vue
<script setup>
|
||
import { ref } from "vue";
|
||
import { onLoad } from "@dcloudio/uni-app";
|
||
import Container from "@/components/Container.vue";
|
||
import CoinHeader from "./components/CoinHeader.vue";
|
||
import { getStoreVipIntroAPI } from "@/apis";
|
||
|
||
const content = ref("");
|
||
const loading = ref(false);
|
||
const failed = ref(false);
|
||
|
||
const loadIntroduction = async () => {
|
||
if (loading.value) return;
|
||
loading.value = true;
|
||
failed.value = false;
|
||
try {
|
||
const result = await getStoreVipIntroAPI();
|
||
if (typeof result?.content !== "string") {
|
||
throw new Error("体验中心 VIP 介绍响应格式异常");
|
||
}
|
||
// 保留服务端原文与换行,空白内容单独展示提示。
|
||
content.value = result.content;
|
||
} catch (error) {
|
||
failed.value = true;
|
||
console.error("加载体验中心 VIP 介绍失败", error);
|
||
} finally {
|
||
loading.value = false;
|
||
}
|
||
};
|
||
|
||
onLoad(loadIntroduction);
|
||
</script>
|
||
|
||
<template>
|
||
<Container :bgType="6" bgColor="#22222e" :isHome="true">
|
||
<template #header><CoinHeader title="体验中心VIP介绍" /></template>
|
||
<view class="vip-intro">
|
||
<text v-if="loading">加载中...</text>
|
||
<text v-else-if="failed" @click="loadIntroduction">加载失败,点击重试</text>
|
||
<text v-else-if="content.trim()">{{ content }}</text>
|
||
<text v-else>暂无介绍内容</text>
|
||
</view>
|
||
</Container>
|
||
</template>
|
||
|
||
<style scoped lang="scss">
|
||
.vip-intro { padding: 32rpx 28rpx; color: #ffffff; font-size: 28rpx; line-height: 44rpx; white-space: pre-wrap; }
|
||
</style>
|