baimacms/pages/index/index.vue

1512 lines
34 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="container">
<!-- 头部搜索与导航 -->
<view class="header">
<view class="search-section">
<view class="search-bar-wrap">
<text class="search-icon">🔍</text>
<input class="search-input" placeholder="输入关键词或粘贴商品标题" placeholder-class="placeholder-style" />
<view class="search-btn-red">搜索</view>
</view>
<image class="search-right-ad" src="https://img.bc.haodanku.com/cms_web/1651735687" mode="aspectFit"></image>
</view>
<scroll-view scroll-x class="nav-scroll" :show-scrollbar="false">
<view class="nav-item" :class="{ 'active': currentTab === index }" v-for="(item, index) in navList" :key="index" @click="switchTab(index)">
<text class="nav-text">{{ item }}</text>
<view class="nav-line" v-if="currentTab === index"></view>
</view>
</scroll-view>
</view>
<scroll-view scroll-y class="main-content" :show-scrollbar="false">
<!-- 轮播图区域 -->
<view class="banner-box">
<swiper class="swiper" circular autoplay indicator-dots indicator-color="rgba(255,255,255,0.5)" indicator-active-color="#ffffff">
<swiper-item v-for="(img, idx) in banners" :key="idx">
<image class="banner-img" :src="img" mode="aspectFill"></image>
</swiper-item>
</swiper>
</view>
<!-- 垂直滚动通知栏 (1:1 还原) -->
<view class="notice-bar">
<view class="notice-icon-box">
<text class="notice-speaker">📢</text>
</view>
<swiper class="notice-swiper" vertical circular autoplay interval="3000">
<swiper-item v-for="(item, idx) in noticeList" :key="idx">
<view class="notice-item">
<image class="notice-avatar" :src="item.img"></image>
<text class="notice-text">{{ item.msg }}</text>
</view>
</swiper-item>
</swiper>
</view>
<!-- 金刚区 / 导航图标 -->
<view class="grid-menu">
<view class="grid-item" v-for="(menu, idx) in menus" :key="idx">
<image class="menu-icon" :src="menu.icon"></image>
<text class="menu-text">{{ menu.name }}</text>
</view>
</view>
<!-- 活动专区 (胶囊形轮播图) -->
<view class="ad-swiper-box">
<swiper class="ad-swiper" circular autoplay indicator-dots indicator-active-color="#ff416c" indicator-color="rgba(255,255,255,0.6)">
<swiper-item v-for="(ad, idx) in adList" :key="idx">
<image class="ad-swiper-img" :src="ad" mode="aspectFill"></image>
</swiper-item>
</swiper>
</view>
<!-- 今日值得买 (1:1 还原) -->
<view class="worth-buy-card">
<view class="worth-header">
<view class="worth-header-left">
<image class="worth-icon" src="https://cdn-icons-png.flaticon.com/512/3594/3594162.png"></image>
<text class="worth-title">今日值得买</text>
</view>
<view class="worth-header-right">
<view class="avatar-list">
<image class="avatar" src="https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=100&q=80"></image>
<image class="avatar" src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?w=100&q=80"></image>
<view class="avatar-more">...</view>
</view>
<text class="搶購人数">2263人正在抢</text>
</view>
</view>
<view class="worth-subtitle-tag">高性价比好物买TA!</view>
<view class="worth-tabs">
<view class="worth-tab-item" :class="{ 'active': worthTabActive === 0 }" @click="worthTabActive = 0">
<text>推荐</text>
<view class="active-arrow" v-if="worthTabActive === 0"></view>
</view>
<view class="worth-tab-item" :class="{ 'active': worthTabActive === 1 }" @click="worthTabActive = 1">
<text>9.9包邮</text>
<view class="active-arrow" v-if="worthTabActive === 1"></view>
</view>
<view class="worth-tab-item" :class="{ 'active': worthTabActive === 2 }" @click="worthTabActive = 2">
<text>19.9超值</text>
<view class="active-arrow" v-if="worthTabActive === 2"></view>
</view>
</view>
<swiper class="worth-swiper" :indicator-dots="true" indicator-active-color="#ff416c">
<swiper-item v-for="(chunk, cIdx) in worthBuyChunks" :key="cIdx">
<view class="worth-goods-item" v-for="(item, idx) in chunk" :key="idx">
<image class="worth-goods-img" :src="item.img" mode="aspectFill"></image>
<view class="worth-goods-info">
<view class="worth-goods-title">
<text :class="item.shopType === '天猫' ? 'tag-tmall' : 'tag-taobao'">{{ item.shopType }}</text>
{{ item.title }}
</view>
<view class="worth-goods-labels">
<text class="worth-label red">{{ item.label1 }}</text>
<text class="worth-label orange" v-if="item.label2">{{ item.label2 }}</text>
</view>
<view class="worth-price-row">
<view class="worth-price-left">
<text class="worth-price-tip">券后</text>
<text class="worth-price-symbol">¥</text>
<text class="worth-price-val">{{ item.price }}</text>
<text class="worth-old-price">¥{{ item.oldPrice }}</text>
</view>
<view class="worth-coupon-tag">券 {{ item.coupon }}元</view>
</view>
<view class="worth-buy-btn-group">
<view class="worth-btn-left">今日已抢 {{ item.todaySale }} 件</view>
<view class="worth-btn-right">马上抢 ></view>
</view>
</view>
</view>
</swiper-item>
</swiper>
</view>
<!-- 品牌特卖区 (1:1 还原) -->
<view class="brand-sale-module">
<view class="brand-header">
<view class="brand-header-left">
<image class="brand-tag-icon" src="https://cdn-icons-png.flaticon.com/512/879/879796.png"></image>
<text class="brand-title">品牌特卖</text>
<text class="brand-subtitle-tag">跟着潮流买 限时抢好货</text>
</view>
<text class="brand-more">更多 ></text>
</view>
<!-- 品牌主推位 -->
<view class="brand-highlight">
<image class="highlight-bg" :src="brandFeature.bg" mode="aspectFill"></image>
<view class="highlight-content">
<view class="brand-logo-white-box">
<image class="brand-logo-img" :src="brandFeature.logo" mode="aspectFit"></image>
</view>
<view class="brand-feature-info">
<view class="brand-name-row">
<text>{{ brandFeature.name }}</text>
<text class="arrow">></text>
</view>
<view class="brand-discount-text">{{ brandFeature.desc }}</view>
<view class="brand-promo-tags">
<text class="p-tag">抢限量大额券</text>
<text class="p-tag">霸榜天猫3大榜单</text>
</view>
</view>
</view>
</view>
<!-- 品牌商品分页轮播 -->
<swiper class="brand-goods-swiper" :indicator-dots="true" indicator-active-color="#ff416c">
<swiper-item v-for="(p, pIdx) in 1" :key="pIdx">
<view class="brand-goods-grid">
<view class="brand-grid-item" v-for="(goods, gIdx) in brandGoods" :key="gIdx">
<view class="b-img-wrap">
<view class="anniversary-tag">
<text class="a-icon">🎂</text>
<text>周年庆</text>
</view>
<image class="b-goods-img" :src="goods.img" mode="aspectFill"></image>
<view class="b-sold-overlay">已售{{ goods.sold }}件</view>
</view>
<view class="b-goods-title">{{ goods.title }}</view>
<view class="b-promo-label">{{ goods.promo }}</view>
<view class="b-price-row">
<view class="b-price-blue">¥{{ goods.price }}</view>
<view class="b-coupon-tag">券 {{ goods.coupon }}元</view>
</view>
</view>
</view>
</swiper-item>
</swiper>
</view>
<!-- 平台切换选项卡 -->
<view class="platform-tabs">
<view class="p-tab-item" :class="{ 'active': platformActive === 0 }" @click="platformActive = 0">
<text>淘宝</text>
<view class="p-active-line" v-if="platformActive === 0"></view>
</view>
<view class="p-tab-item" :class="{ 'active': platformActive === 1 }" @click="platformActive = 1">
<text>京东</text>
<view class="p-active-line" v-if="platformActive === 1"></view>
</view>
<view class="p-tab-item" :class="{ 'active': platformActive === 2 }" @click="platformActive = 2">
<text>拼多多</text>
<view class="p-active-line" v-if="platformActive === 2"></view>
</view>
<view class="p-tab-item" :class="{ 'active': platformActive === 3 }" @click="platformActive = 3">
<text>抖音电商</text>
<view class="p-active-line" v-if="platformActive === 3"></view>
</view>
</view>
<!-- 商品列表 (1:1 还原) -->
<view class="goods-list">
<view class="goods-item" v-for="(goods, idx) in goodsList" :key="idx">
<view class="g-img-wrap">
<view class="g-anniversary-tag">
<text class="a-icon">🎂</text>
<text>周年庆</text>
</view>
<view class="g-brand-tag" v-if="goods.brandTag">{{ goods.brandTag }}</view>
<image class="goods-img" :src="goods.image" mode="aspectFill"></image>
<view class="g-bottom-banner" v-if="goods.bottomTag">{{ goods.bottomTag }}</view>
</view>
<view class="goods-info">
<view class="goods-title">
<text :class="goods.shopType === '天猫' ? 'tag-tmall' : 'tag-taobao'">{{ goods.shopType }}</text>
<text class="title-text">{{ goods.title }}</text>
</view>
<view class="goods-lowest-price" v-if="goods.lowestTag">{{ goods.lowestTag }}</view>
<view class="goods-price-row">
<view class="g-price-left">
<text class="g-price-tip">券后</text>
<text class="g-price-val">{{ goods.finalPrice }}</text>
</view>
<view class="g-coupon-tag"> {{ goods.couponValue }}</view>
</view>
<view class="goods-sales">已售 {{ goods.sales }} </view>
</view>
</view>
</view>
<view class="loading-more">-- 到底啦 --</view>
</scroll-view>
</view>
</template>
<script>
export default {
data() {
return {
currentTab: 0,
navList: ['精选', '女装', '美食', '美妆', '母婴', '鞋包', '居家', '数码'],
banners: [
'https://images.unsplash.com/photo-1483985988355-763728e1935b?w=800&q=80',
'https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=800&q=80',
'https://images.unsplash.com/photo-1607082348824-0a96f2a4b9da?w=800&q=80'
],
menus: [
{ name: '9.9包邮', icon: 'https://cdn-icons-png.flaticon.com/512/879/879859.png' },
{ name: '疯抢榜', icon: 'https://cdn-icons-png.flaticon.com/512/3594/3594363.png' },
{ name: '聚划算', icon: 'https://cdn-icons-png.flaticon.com/512/3594/3594162.png' },
{ name: '品牌特卖', icon: 'https://cdn-icons-png.flaticon.com/512/879/879796.png' },
{ name: '每日半价', icon: 'https://cdn-icons-png.flaticon.com/512/879/879854.png' }
],
noticeList: [
// 初始兜底数据
{ img: 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?w=100&q=80', msg: '正在获取最新订单信息...' }
],
adList: [
'https://images.unsplash.com/photo-1607083206968-13611e3d76db?w=800&q=80',
'https://images.unsplash.com/photo-1607082348824-0a96f2a4b9da?w=800&q=80'
],
worthTabActive: 0,
deserveList: [],
nineList: [],
nineteenList: [],
recommendData: {
left: { title: '今日必抢', sub: '爆款直降', img: 'https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=400&q=80' },
topRight: { title: '百亿补贴', sub: '大牌正品', img: 'https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=400&q=80' },
bottomRight: { title: '热销榜单', sub: '闭眼入', img: 'https://images.unsplash.com/photo-1546868871-7041f2a55e12?w=400&q=80' }
},
brandSaleList: [
{ logo: 'https://cdn-icons-png.flaticon.com/512/732/732229.png', image: 'https://images.unsplash.com/photo-1521572163474-6864f9cf17ab?w=400&q=80', price: '39.9', oldPrice: '99' },
{ logo: 'https://cdn-icons-png.flaticon.com/512/882/882730.png', image: 'https://images.unsplash.com/photo-1618354691373-d851c5c3a990?w=400&q=80', price: '59.0', oldPrice: '159' },
{ logo: 'https://cdn-icons-png.flaticon.com/512/732/732244.png', image: 'https://images.unsplash.com/photo-1583743814966-8936f5b7be1a?w=400&q=80', price: '89.0', oldPrice: '299' },
{ logo: 'https://cdn-icons-png.flaticon.com/512/732/732221.png', image: 'https://images.unsplash.com/photo-1511556532299-8f662fc26c06?w=400&q=80', price: '129', oldPrice: '499' }
],
brandFeature: {
bg: 'https://images.unsplash.com/photo-1556228720-195a672e8a03?w=800&q=80',
logo: 'https://images.unsplash.com/photo-1560155016-bd4879ae8f21?w=200&q=80',
name: '贝德美',
desc: '不只4.1折! 婴童洗护心选'
},
brandGoods: [
{
img: 'https://images.unsplash.com/photo-1556228453-efd6c1ff04f6?w=300&q=80',
sold: '1.0万',
title: '【6月+可用】...',
promo: '官方立减10元',
price: '19.9',
coupon: 30
},
{
img: 'https://images.unsplash.com/photo-1556228515-919086f6f273?w=300&q=80',
sold: '70.0万',
title: '【0岁+可用】...',
promo: '立减10元+领10',
price: '24',
coupon: 10
},
{
img: 'https://images.unsplash.com/photo-1594820878367-0676999d734f?w=300&q=80',
sold: '30.0万',
title: '【贝德美】婴...',
promo: '官方立减10元',
price: '24',
coupon: 10
}
],
platformActive: 0,
goodsList: []
}
},
onLoad() {
this.getNoticeList();
this.getGoodsList();
this.getWorthBuyLists();
this.getBrandSaleList();
},
computed: {
worthBuyGoods() {
if (this.worthTabActive === 0) return this.deserveList;
if (this.worthTabActive === 1) return this.nineList;
if (this.worthTabActive === 2) return this.nineteenList;
return [];
},
// 将商品按 2 个一组进行切分
worthBuyChunks() {
let chunks = [];
for (let i = 0; i < this.worthBuyGoods.length; i += 2) {
chunks.push(this.worthBuyGoods.slice(i, i + 2));
}
return chunks;
}
},
methods: {
getNoticeList() {
uni.request({
url: 'https://api.cmspro.haodanku.com/msg/getMsgs?cid=qOstW90',
success: (res) => {
if (res.data && res.data.code === 200) {
this.noticeList = res.data.data.msgs;
}
}
});
},
getGoodsList() {
uni.request({
url: 'https://api.cmspro.haodanku.com/recommend/getRecommend?page_size=200&page=1&type=2&cid=qOstW90',
success: (res) => {
if (res.data && res.data.code === 200) {
const list = res.data.data.recommends.map(item => {
// 格式化销量
let salesStr = item.itemsale;
if (item.itemsale >= 10000) {
salesStr = (item.itemsale / 10000).toFixed(1) + '万';
}
return {
image: item.itempic,
title: item.itemshorttitle,
finalPrice: item.itemendprice,
couponValue: item.couponmoney,
sales: salesStr,
brandTag: item.brand_name,
lowestTag: item.label && item.label.length > 0 ? item.label[0] : '',
shopType: item.shoptype === 'B' ? '天猫' : '淘宝'
};
});
this.goodsList = list;
}
}
});
},
getWorthBuyLists() {
uni.request({
url: 'https://api.cmspro.haodanku.com/index/deserveLists?cid=qOstW90',
success: (res) => {
if (res.data && res.data.code === 200) {
const formatData = (list) => {
return list.map(item => ({
img: item.itempic,
title: item.itemshorttitle,
label1: item.label && item.label[0] ? item.label[0] : '',
label2: item.label && item.label[1] ? item.label[1] : '',
price: item.itemendprice,
oldPrice: item.itemprice,
coupon: item.couponmoney,
todaySale: item.todaysale >= 10000 ? (item.todaysale / 10000).toFixed(1) + '万' : item.todaysale,
sold: item.itemsale >= 10000 ? (item.itemsale / 10000).toFixed(1) + '万' : item.itemsale,
shopType: item.shoptype === 'B' ? '天猫' : '淘宝'
}));
};
this.deserveList = formatData(res.data.data.deserve_lists);
this.nineList = formatData(res.data.data.nine_lists);
this.nineteenList = formatData(res.data.data.nineteen_lists);
}
}
});
},
getBrandSaleList() {
uni.request({
url: 'https://api.cmspro.haodanku.com/brandItem/choiceness?cid=qOstW90',
success: (res) => {
if (res.data && res.data.code === 200 && res.data.data.deserve_lists.length > 0) {
const firstItem = res.data.data.deserve_lists[0];
const act = firstItem.activity_info || {};
// 映射主推位信息
this.brandFeature = {
bg: act.long_img || 'https://images.unsplash.com/photo-1556228720-195a672e8a03?w=800&q=80',
logo: act.top_icon || firstItem.itempic,
name: act.name || firstItem.shopname,
desc: act.guide_article || '官方直降 爆款秒杀'
};
// 映射下方商品 (取前3个)
this.brandGoods = res.data.data.deserve_lists.slice(0, 3).map(item => ({
img: item.itempic,
title: item.itemshorttitle,
sold: item.itemsale >= 10000 ? (item.itemsale / 10000).toFixed(1) + '万' : item.itemsale,
promo: item.activity_info ? item.activity_info.guide_article : '官方立减',
price: item.itemendprice,
coupon: item.couponmoney
}));
}
}
});
},
switchTab(index) {
this.currentTab = index;
}
}
}
</script>
<style scoped>
.container {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #f5f6f8;
}
/* 头部区域 */
.header {
background: #ffffff;
padding-top: var(--status-bar-height, 44px); /* 适配状态栏 */
padding-bottom: 10rpx;
z-index: 100;
}
.placeholder-style {
color: #999;
}
/* 搜索区域 (1:1 还原) */
.search-section {
display: flex;
align-items: center;
padding: 20rpx 30rpx;
justify-content: space-between;
}
.search-bar-wrap {
flex: 1;
height: 72rpx;
background: #ffffff;
border: 2rpx solid #ff416c;
border-radius: 36rpx;
display: flex;
align-items: center;
padding-left: 30rpx;
padding-right: 4rpx; /* 为内部按钮留出微小边距 */
position: relative;
}
.search-icon {
font-size: 30rpx;
color: #ff416c;
margin-right: 16rpx;
}
.search-input {
flex: 1;
font-size: 26rpx;
color: #333;
}
.search-btn-red {
width: 130rpx;
height: 64rpx;
background: linear-gradient(to right, #ff715a, #ff416c);
color: #ffffff;
font-size: 28rpx;
font-weight: bold;
border-radius: 32rpx;
display: flex;
align-items: center;
justify-content: center;
}
.search-right-ad {
width: 100rpx;
height: 80rpx;
margin-left: 20rpx;
}
.nav-scroll {
white-space: nowrap;
padding: 0 20rpx;
}
.nav-item {
display: inline-block;
padding: 10rpx 30rpx;
position: relative;
}
.nav-text {
font-size: 30rpx;
color: #333;
transition: all 0.3s;
}
.nav-item.active .nav-text {
color: #ff416c;
font-size: 34rpx;
font-weight: bold;
}
.nav-line {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 40rpx;
height: 6rpx;
background-color: #ff416c;
border-radius: 6rpx;
}
/* 主体滚动区域 */
.main-content {
flex: 1;
overflow-y: auto;
}
/* 轮播图 */
.banner-box {
padding: 20rpx 30rpx 10rpx;
}
.swiper {
height: 320rpx;
border-radius: 24rpx;
overflow: hidden;
box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.05);
}
.banner-img {
width: 100%;
height: 100%;
}
/* 修改主轮播指示器 */
.swiper :deep(.uni-swiper-dot) {
width: 12rpx;
height: 12rpx;
background: rgba(255, 255, 255, 0.8) !important;
}
.swiper :deep(.uni-swiper-dot-active) {
width: 30rpx;
height: 12rpx;
border-radius: 6rpx;
background: #ff416c !important;
}
/* 垂直通知栏 */
.notice-bar {
margin: 0 30rpx 16rpx;
background-color: #fff0f3;
height: 64rpx;
border-radius: 32rpx;
display: flex;
align-items: center;
padding: 0 24rpx;
}
.notice-icon-box {
margin-right: 16rpx;
display: flex;
align-items: center;
}
.notice-speaker {
font-size: 28rpx;
color: #ff416c;
}
.notice-swiper {
flex: 1;
height: 100%;
}
.notice-item {
height: 100%;
display: flex;
align-items: center;
}
.notice-avatar {
width: 40rpx;
height: 40rpx;
border-radius: 50%;
margin-right: 12rpx;
}
.notice-text {
font-size: 24rpx;
color: #ff416c;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
/* 金刚区 */
.grid-menu {
display: flex;
flex-wrap: wrap;
padding: 10rpx 20rpx;
background: #ffffff;
margin: 0 30rpx 16rpx;
border-radius: 20rpx;
}
.grid-item {
width: 20%;
display: flex;
flex-direction: column;
align-items: center;
padding: 20rpx 0;
}
.menu-icon {
width: 80rpx;
height: 80rpx;
margin-bottom: 12rpx;
}
.menu-text {
font-size: 24rpx;
color: #333;
}
.ad-img {
width: 100%;
height: 100%;
}
/* 活动专区 - 胶囊轮播图 */
.ad-swiper-box {
margin: 0 30rpx 16rpx;
}
.ad-swiper {
height: 180rpx;
border-radius: 90rpx; /* 高度的一半,形成胶囊形状 */
overflow: hidden;
/* 强制子元素继承圆角 */
transform: translateY(0);
-webkit-mask-image: -webkit-radial-gradient(white, black);
}
.ad-swiper-img {
width: 100%;
height: 100%;
border-radius: 90rpx;
}
/* 修改 swiper 指示点样式 */
.ad-swiper :deep(.uni-swiper-dot) {
width: 12rpx;
height: 6rpx;
border-radius: 4rpx;
}
.ad-swiper :deep(.uni-swiper-dot-active) {
width: 30rpx;
border-radius: 4rpx;
}
/* 今日值得买 (1:1 还原) */
.worth-buy-card {
background-color: #ffffff;
margin: 0 30rpx 16rpx;
border-radius: 24rpx;
padding: 24rpx 24rpx 10rpx;
box-shadow: 0 4rpx 20rpx rgba(0,0,0,0.03);
}
.worth-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12rpx;
}
.worth-header-left {
display: flex;
align-items: center;
}
.worth-icon {
width: 36rpx;
height: 36rpx;
margin-right: 12rpx;
}
.worth-title {
font-size: 34rpx;
font-weight: bold;
color: #333;
}
.worth-header-right {
display: flex;
align-items: center;
}
.avatar-list {
display: flex;
margin-right: 12rpx;
}
.avatar {
width: 40rpx;
height: 40rpx;
border-radius: 50%;
border: 2rpx solid #fff;
margin-right: -12rpx;
}
.avatar-more {
width: 40rpx;
height: 40rpx;
border-radius: 50%;
background: #666;
color: #fff;
font-size: 16rpx;
display: flex;
align-items: center;
justify-content: center;
border: 2rpx solid #fff;
}
.搶購人数 {
font-size: 24rpx;
color: #ff416c;
}
.worth-subtitle-tag {
display: inline-block;
background-color: #f2f2f2;
color: #999;
font-size: 22rpx;
padding: 4rpx 16rpx;
border-radius: 8rpx;
margin-bottom: 24rpx;
}
.worth-tabs {
display: flex;
background-color: #f7f7f7;
border-radius: 12rpx;
height: 80rpx;
margin-bottom: 24rpx;
overflow: visible;
}
.worth-tab-item {
flex: 1;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #666;
position: relative;
}
.worth-tab-item.active {
background: linear-gradient(to right, #ff715a, #ff416c);
color: #fff;
border-radius: 12rpx;
font-weight: bold;
}
.active-arrow {
position: absolute;
bottom: -12rpx;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0;
border-left: 12rpx solid transparent;
border-right: 12rpx solid transparent;
border-top: 12rpx solid #ff416c;
}
.worth-swiper {
height: 700rpx; /* 进一步压缩高度,消除底部留白 */
}
.worth-swiper :deep(.uni-swiper-dots) {
bottom: 0rpx !important; /* 使指示点更贴近底部 */
}
.worth-goods-item {
display: flex;
padding: 20rpx 0;
border-bottom: 1rpx solid #f2f2f2;
}
.worth-goods-item:last-child {
border-bottom: none;
}
.worth-goods-img {
width: 240rpx;
height: 240rpx;
border-radius: 16rpx;
margin-right: 20rpx;
background-color: #f9f9f9;
}
.worth-goods-info {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.worth-goods-title {
font-size: 28rpx;
color: #333;
line-height: 40rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.worth-goods-labels {
margin-top: 8rpx;
}
.worth-label {
font-size: 20rpx;
padding: 2rpx 10rpx;
border-radius: 6rpx;
margin-right: 12rpx;
}
.worth-label.red {
color: #ff416c;
border: 1rpx solid #ff416c;
}
.worth-label.orange {
color: #ff715a;
border: 1rpx solid #ff715a;
}
.worth-price-row {
display: flex;
justify-content: space-between;
align-items: baseline;
margin-top: 12rpx;
}
.worth-price-tip {
font-size: 24rpx;
color: #ff416c;
margin-right: 4rpx;
}
.worth-price-symbol {
font-size: 24rpx;
color: #ff416c;
font-weight: bold;
}
.worth-price-val {
font-size: 40rpx;
color: #ff416c;
font-weight: bold;
margin-right: 12rpx;
}
.worth-old-price {
font-size: 22rpx;
color: #999;
text-decoration: line-through;
}
.worth-coupon-tag {
background-color: #ff416c;
color: #fff;
font-size: 22rpx;
padding: 4rpx 12rpx;
border-radius: 4rpx;
position: relative;
}
.worth-buy-btn-group {
display: flex;
height: 64rpx;
margin-top: 16rpx;
border-radius: 32rpx;
overflow: hidden;
}
.worth-btn-left {
flex: 1.2;
background: #fff3d6;
color: #8b572a;
font-size: 24rpx;
display: flex;
align-items: center;
justify-content: center;
}
.worth-btn-right {
flex: 1;
background: linear-gradient(to right, #ff715a, #ff416c);
color: #fff;
font-size: 26rpx;
font-weight: bold;
display: flex;
align-items: center;
justify-content: center;
}
/* 推荐页面 */
.recommend-zone {
display: flex;
margin: 0 30rpx 20rpx;
height: 320rpx;
justify-content: space-between;
}
.recommend-left {
width: 48%;
background: linear-gradient(135deg, #fff0f0, #ffe4e4);
border-radius: 20rpx;
padding: 20rpx;
position: relative;
}
.recommend-right {
width: 48%;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.rec-box {
height: 47%;
background: #ffffff;
border-radius: 20rpx;
padding: 16rpx;
display: flex;
align-items: center;
justify-content: space-between;
}
.rec-title {
font-size: 30rpx;
font-weight: bold;
color: #333;
margin-bottom: 6rpx;
}
.rec-sub {
font-size: 22rpx;
color: #ff4b2b;
background: rgba(255, 75, 43, 0.1);
padding: 2rpx 10rpx;
border-radius: 10rpx;
display: inline-block;
}
.rec-img-large {
width: 180rpx;
height: 180rpx;
position: absolute;
bottom: 10rpx;
right: 10rpx;
}
.rec-text-wrap {
flex: 1;
}
.rec-img-small {
width: 100rpx;
height: 100rpx;
}
/* 品牌特卖区 */
.brand-zone {
margin: 0 30rpx 20rpx;
background: #ffffff;
border-radius: 20rpx;
padding: 20rpx;
}
.zone-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 20rpx;
}
.zone-title {
font-size: 32rpx;
font-weight: bold;
color: #333;
}
.zone-more {
font-size: 24rpx;
color: #999;
}
.brand-scroll {
white-space: nowrap;
}
.brand-item {
display: inline-block;
width: 180rpx;
margin-right: 20rpx;
text-align: center;
}
.brand-logo {
width: 80rpx;
height: 40rpx;
margin-bottom: 10rpx;
display: block;
margin-left: auto;
margin-right: auto;
}
.brand-goods-img {
width: 180rpx;
height: 180rpx;
border-radius: 12rpx;
background-color: #f5f5f5;
}
.brand-price {
color: #ff416c;
font-size: 28rpx;
font-weight: bold;
margin-top: 10rpx;
}
.brand-old-price {
color: #999;
font-size: 20rpx;
text-decoration: line-through;
}
/* 品牌特卖区 (1:1 还原) */
.brand-sale-module {
margin: 0 30rpx 16rpx;
background: #ffffff;
border-radius: 24rpx;
padding: 24rpx 24rpx 10rpx;
box-shadow: 0 4rpx 20rpx rgba(0,0,0,0.03);
}
.brand-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 24rpx;
}
.brand-header-left {
display: flex;
align-items: center;
}
.brand-tag-icon {
width: 32rpx;
height: 32rpx;
margin-right: 12rpx;
}
.brand-title {
font-size: 34rpx;
font-weight: bold;
color: #333;
margin-right: 16rpx;
}
.brand-subtitle-tag {
background-color: #f2f2f2;
color: #999;
font-size: 22rpx;
padding: 4rpx 12rpx;
border-radius: 6rpx;
}
.brand-more {
font-size: 26rpx;
color: #999;
}
.brand-highlight {
height: 220rpx;
position: relative;
border-radius: 20rpx;
overflow: hidden;
margin-bottom: 30rpx;
}
.highlight-bg {
width: 100%;
height: 100%;
filter: brightness(0.9);
}
.highlight-content {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
display: flex;
align-items: center;
padding: 0 30rpx;
background: rgba(0,0,0,0.1);
}
.brand-logo-white-box {
width: 160rpx;
height: 160rpx;
background: #ffffff;
border-radius: 16rpx;
display: flex;
align-items: center;
justify-content: center;
margin-right: 24rpx;
box-shadow: 0 4rpx 10rpx rgba(0,0,0,0.1);
}
.brand-logo-img {
width: 120rpx;
height: 120rpx;
}
.brand-feature-info {
flex: 1;
}
.brand-name-row {
color: #fff;
font-size: 32rpx;
font-weight: bold;
display: flex;
align-items: center;
margin-bottom: 8rpx;
}
.brand-name-row .arrow {
margin-left: 10rpx;
font-size: 24rpx;
}
.brand-discount-text {
color: #fff;
font-size: 28rpx;
margin-bottom: 12rpx;
font-weight: 500;
}
.brand-promo-tags {
display: flex;
}
.p-tag {
background: rgba(0,0,0,0.3);
color: #fff;
font-size: 20rpx;
padding: 4rpx 16rpx;
border-radius: 20rpx;
margin-right: 12rpx;
}
.brand-goods-swiper {
height: 440rpx;
}
.brand-goods-grid {
display: flex;
justify-content: space-between;
}
.brand-grid-item {
width: 31%;
}
.b-img-wrap {
position: relative;
width: 100%;
height: 210rpx;
border-radius: 12rpx;
overflow: hidden;
background-color: #f9f9f9;
margin-bottom: 12rpx;
}
.anniversary-tag {
position: absolute;
top: 0;
left: 0;
background: linear-gradient(to right, #ff715a, #ff416c);
color: #fff;
font-size: 18rpx;
padding: 4rpx 10rpx;
border-bottom-right-radius: 12rpx;
display: flex;
align-items: center;
z-index: 1;
}
.a-icon {
font-size: 16rpx;
margin-right: 4rpx;
}
.b-goods-img {
width: 100%;
height: 100%;
}
.b-sold-overlay {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
background: rgba(0,0,0,0.4);
color: #fff;
font-size: 20rpx;
text-align: center;
padding: 4rpx 0;
}
.b-goods-title {
font-size: 24rpx;
color: #333;
line-height: 32rpx;
height: 64rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
margin-bottom: 8rpx;
}
.b-promo-label {
font-size: 20rpx;
color: #4a4aff;
border: 1rpx solid #4a4aff;
padding: 0 8rpx;
border-radius: 4rpx;
display: inline-block;
margin-bottom: 12rpx;
}
.b-price-row {
display: flex;
justify-content: space-between;
align-items: center;
}
.b-price-blue {
color: #4a4aff;
font-size: 32rpx;
font-weight: bold;
}
.b-coupon-tag {
background: #ff416c;
color: #fff;
font-size: 18rpx;
padding: 2rpx 8rpx;
border-radius: 4rpx;
}
/* 平台切换选项卡 */
.platform-tabs {
display: flex;
padding: 20rpx 40rpx;
background-color: #f5f6f8;
}
.p-tab-item {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
position: relative;
}
.p-tab-item text {
font-size: 32rpx;
color: #333;
font-weight: 500;
transition: all 0.3s;
}
.p-tab-item.active text {
color: #ff416c;
font-weight: bold;
font-size: 34rpx;
}
.p-active-line {
width: 40rpx;
height: 4rpx;
background-color: #ff416c;
border-radius: 4rpx;
margin-top: 8rpx;
}
/* 商品列表 (1:1 还原) */
.goods-list {
display: flex;
flex-wrap: wrap;
padding: 10rpx 24rpx;
justify-content: space-between;
}
.goods-item {
width: calc(50% - 12rpx);
background: #ffffff;
border-radius: 20rpx;
overflow: hidden;
margin-bottom: 24rpx;
box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.03);
}
.g-img-wrap {
position: relative;
width: 100%;
height: 340rpx;
background-color: #f9f9f9;
}
.g-anniversary-tag {
position: absolute;
top: 0;
left: 0;
background: linear-gradient(to right, #ff715a, #ff416c);
color: #fff;
font-size: 18rpx;
padding: 4rpx 10rpx;
border-bottom-right-radius: 12rpx;
display: flex;
align-items: center;
z-index: 2;
}
.g-brand-tag {
position: absolute;
top: 0;
right: 0;
background: rgba(138, 93, 255, 0.8);
color: #fff;
font-size: 20rpx;
padding: 4rpx 12rpx;
border-bottom-left-radius: 12rpx;
z-index: 2;
}
.g-bottom-banner {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
background: rgba(0, 200, 83, 0.9);
color: #fff;
font-size: 18rpx;
padding: 6rpx 0;
text-align: center;
z-index: 2;
}
.goods-img {
width: 100%;
height: 100%;
}
.goods-info {
padding: 20rpx 16rpx;
}
.goods-title {
font-size: 28rpx;
color: #333;
line-height: 40rpx;
height: 80rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
margin-bottom: 12rpx;
}
.tag-tmall, .tag-taobao {
color: #fff;
font-size: 20rpx;
padding: 2rpx 8rpx;
border-radius: 6rpx;
margin-right: 8rpx;
display: inline-block;
vertical-align: middle;
}
.tag-tmall {
background-color: #ff0036;
}
.tag-taobao {
background-color: #ff5000;
}
.goods-lowest-tag {
display: inline-block;
border: 1rpx solid #ff416c;
color: #ff416c;
font-size: 20rpx;
padding: 0 12rpx;
border-radius: 20rpx;
margin-bottom: 16rpx;
opacity: 0.8;
}
/* 修正最低价标签样式 */
.goods-lowest-price {
display: inline-block;
border: 1rpx solid #ffcdd2;
color: #ff416c;
font-size: 22rpx;
padding: 2rpx 16rpx;
border-radius: 20rpx;
margin-bottom: 16rpx;
background: #fff5f5;
}
.goods-price-row {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12rpx;
}
.g-price-tip {
font-size: 24rpx;
color: #ff416c;
}
.g-price-val {
font-size: 38rpx;
color: #ff416c;
font-weight: bold;
}
.g-coupon-tag {
border: 1rpx solid #ff416c;
color: #ff416c;
font-size: 20rpx;
padding: 0 8rpx;
border-radius: 4rpx;
}
.goods-sales {
font-size: 24rpx;
color: #999;
}
.loading-more {
text-align: center;
color: #999;
font-size: 24rpx;
padding: 30rpx 0 50rpx;
}
</style>