fix(modal): restrict confirmText length to 4 chars and safeguard banner null access

这个提交包含在:
xcbyy
2026-10-13 08:50:20 +08:00
父节点 6e78a7e4b7
当前提交 a004584109
共有 3 个文件被更改,包括 72 次插入 和 11 次删除

查看文件

@@ -15,14 +15,14 @@
<view v-else class="index-body-wrapper">
<!-- 精彩活动横幅轮播 (流光投影) -->
<swiper class="banner-swiper" circular autoplay interval="4000" indicator-dots indicator-color="rgba(255,255,255,0.3)" indicator-active-color="#6366F1">
<swiper-item v-for="banner in banners" :key="banner.id" class="banner-item" @click="goToActivity(banner)">
<view class="banner-card" :style="{ background: banner.bg || 'linear-gradient(135deg, #F43F5E 0%, #FB7185 100%)' }">
<image v-if="banner.image" class="banner-bg-img" :src="resolveBannerImage(banner.image)" mode="aspectFill" />
<view v-if="banner.image" class="banner-overlay"></view>
<swiper-item v-for="banner in banners" :key="banner?.id || banner?.title" class="banner-item" @click="goToActivity(banner)">
<view class="banner-card" :style="{ background: banner?.bg || 'linear-gradient(135deg, #F43F5E 0%, #FB7185 100%)' }">
<image v-if="banner?.image" class="banner-bg-img" :src="resolveBannerImage(banner?.image)" mode="aspectFill" />
<view v-if="banner?.image" class="banner-overlay"></view>
<view class="banner-content">
<view class="banner-tag">{{ banner.tag || banner.badge || '热门陪伴' }}</view>
<view class="banner-title">{{ banner.title }}</view>
<view class="banner-sub">{{ banner.subtitle || '点击立即参与' }}</view>
<view class="banner-tag">{{ banner?.tag || banner?.badge || '热门陪伴' }}</view>
<view class="banner-title">{{ banner?.title }}</view>
<view class="banner-sub">{{ banner?.subtitle || '点击立即参与' }}</view>
</view>
</view>
</swiper-item>
@@ -185,7 +185,7 @@ const fetchLiveBanners = async () => {
try {
const list = await getBanners();
if (Array.isArray(list) && list.length > 0) {
banners.value = list;
banners.value = list.filter(b => b && typeof b === 'object');
}
} catch (err) {
console.warn('[Index] 获取Banner配置失败:', err);

查看文件

@@ -756,12 +756,28 @@ const showInvitePoster = () => {
const firstRate = finRules.firstReferralPercent != null ? finRules.firstReferralPercent : 5.0;
const secondRate = finRules.secondReferralPercent != null ? finRules.secondReferralPercent : 2.0;
const totalRate = (Number(firstRate) + Number(secondRate)).toFixed(1);
const inviteCode = `PW${user.value.id || 1001}`;
uni.showModal({
title: '二级分销推广',
content: `您的专属邀请码为:PW${user.value.id}\n已成功邀请 ${user.value.invitedCount} 位好友!\n好友下单享受直推 ${firstRate}% + 间推 ${secondRate}%,全网自动分润最高达 ${totalRate}%!`,
showCancel: false,
confirmText: '保存推广码'
content: `您的专属邀请码为:${inviteCode}\n已成功邀请 ${user.value.invitedCount || 0} 位好友!\n好友下单享受直推 ${firstRate}% + 间推 ${secondRate}%,全网自动分润最高达 ${totalRate}%!`,
showCancel: true,
cancelText: '我知道了',
confirmText: '一键复制',
confirmColor: '#6366F1',
success: (res) => {
if (res.confirm) {
uni.setClipboardData({
data: inviteCode,
success: () => {
uni.showToast({
title: '邀请码已复制',
icon: 'success'
});
}
});
}
}
});
};