Files
2026-03-08 20:07:52 +08:00

335 lines
6.8 KiB
Vue

<template>
<view :data-theme="theme">
<view class="seckill_header w-full">
<view :style="{ height: `${navH}rpx` }"></view>
<view class="scroll_box" :style='{width: mainWidth+"px"}'>
<scroll-view scroll-x="true" scroll-with-animation style="white-space: nowrap; vertical-align: middle;"
show-scrollbar="false" :scroll-left="tabLeft">
<!-- #ifdef APP-PLUS -->
<!-- <view class="" :style="'width:100%;' + 'height:'+sysHeight"></view> -->
<!-- #endif -->
<view class="scroll_box_item">
<view class="scroll_item" v-for="(item,index) in timeLine" :key="index"
@click="checkSeckill(index,item)">
<view class="acea-row row-column row-center row-middle" :style='"width:"+isWidth+"px;"'
:id='"sort"+index'>
<text class="header_time f-w-700"
:class="active == index ? 'active' : ''">{{item.startTime}}</text>
<text class="header_day f-w-700"
:class="active == index ? 'active_day' : ''">{{item.status | timeStatusFilter}}</text>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
<view class="seckill_box" :style='{ marginTop: listMarTop + "rpx"}'>
<view class="seckill_desc acea-row row-between row-middle">
<view class="acea-row row-column">
<text class="seckill_name"></text>
</view>
<view v-if="seckillStatus>0" class="acea-row datatimeBox">
<text class="f-s-24 text-right mr10">{{desc}}</text>
<view class="count_down">
<countDown :is-day="true" :tip-text="' '" :day-text="' '" :hour-text="' : '"
:minute-text="' : '" :second-text="' '" :datatime="datatime" :isCol="false"
:bgColor="bgColor"></countDown>
</view>
</view>
</view>
<!-- 秒杀商品列表 -->
<seckill-list :seckillList="seckillList" :loading="loading" :loadTitle="loadTitle" :seckillStatus="seckillStatus"
:datatime="datatime"></seckill-list>
</view>
</view>
</template>
<script>
import {
mapGetters
} from "vuex";
import SeckillList from "../components/SeckillList";
import countDown from "@/components/countDown";
import emptyPage from '@/components/emptyPage.vue'
import {
setThemeColor
} from '@/utils/setTheme.js'
let app = getApp();
export default {
name: 'PageStyle',
components: {
countDown,
emptyPage,
SeckillList,
},
props: {
//秒杀商品列表
seckillList: {
type: Array,
default: function() {
return [];
}
},
loading: {
type: Boolean,
default: false
},
loadTitle: {
type: String,
default: ''
},
seckillStatus: {
type: Number,
default: 1
},
// 倒计时时间
datatime: {
type: Number,
default: 0
},
active: {
type: Number,
default: 0
},
mainWidth: {
type: Number,
default: 0
},
tabLeft: {
type: Number,
default: 0
},
timeLine: {
type: Array,
default: function() {
return [];
}
},
marTop: {
type: Number,
default: 0
},
// 倒计时文字
desc: {
type: String,
default: ''
},
isWidth: {
type: Number,
default: 0
},
},
computed: mapGetters(['globalData']),
data() {
return {
theme: this.$Cache.get("theme"),
bgColor: {
'bgColor': '',
'Color': '#fff',
'width': '36rpx',
'timeTxtwidth': '16rpx',
'isDay': true
},
listMarTop: 0,
navH: '',
}
},
mounted() {
this.bgColor.bgColor = setThemeColor();
// #ifdef MP || APP-PLUS
// 获取导航高度;
//this.navH = this.globalData.navHeight;
// 获取页面高度
uni.getSystemInfo({
success:(res) => {
// 获取导航高度;
this.navH = res.statusBarHeight * (750 / res.windowWidth) + 91;
}
});
// #endif
this.$nextTick(function() {
const query = uni.createSelectorQuery().in(this);
query.select('.scroll_box_item').boundingClientRect(data => {
// #ifdef MP
this.listMarTop = this.navH + data.height * 2 + 30 + 20
// #endif
// #ifdef APP-PLUS
this.listMarTop = this.marTop + data.height * 2 + 30 + 20
// #endif
}).exec();
});
},
methods: {
checkSeckill(index, item) {
this.$emit('getCheckSeckill', index, item)
},
}
}
</script>
<style lang="scss" scoped>
/deep/.dialog_nav {
z-index: 9999;
}
.mts {
margin-top: -56rpx;
}
.datatimeBox {
height: 36rpx;
line-height: 36rpx;
}
.friceIcon {
font-size: 28rpx;
}
.futura {
margin-top: -6rpx;
}
.seckill_header {
background-image: url('../static/images/seckill_bg.jpg');
background-size: cover;
top: 0;
left: 0;
/* #ifdef H5 */
height: 210rpx;
padding-top: 32rpx;
/* #endif */
/* #ifndef H5*/
height: 380rpx;
/* #endif */
position: fixed;
z-index: 2;
}
.head-menu {
display: flex;
align-items: center;
height: 54rpx;
width: 140rpx;
background: transparent;
border: 1px solid rgba(151, 151, 151, 0.2);
border-radius: 27rpx;
position: relative;
&:after {
content: '';
position: absolute;
width: 1px;
height: 26rpx;
background-color: #EAEAEA;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.iconfont {
flex: 1;
text-align: center;
color: #fff;
box-sizing: border-box;
}
}
.scroll_box_item {
width: 100%;
height: 92rpx;
}
.scroll_box {
height: 104rpx;
}
.scroll_item {
display: inline-block;
height: 92rpx;
}
.header_time {
font-size: 36rpx;
color: rgba(255, 255, 255, .4);
display: inline-block;
margin-bottom: 10rpx;
transition: all .3s ease;
font-family: PingFang SC-中黑体, PingFang SC;
}
.active {
color: #fff;
}
.active_day {
width: 108rpx;
height: 30rpx;
line-height: 30rpx;
text-align: center;
font-size: 22rpx;
color: #fff !important;
@include linear-gradient(theme);
background-size: contain;
background-repeat: no-repeat;
}
.header_day {
font-size: 24rpx;
color: rgba(255, 255, 255, .4);
font-family: PingFang SC-中黑体, PingFang SC;
}
.seckill_box {
width: 100%;
background-color: #fff;
left: 0;
position: relative;
/* #ifdef H5 */
margin-top: 172rpx !important;
/* #endif */
/* #ifndef H5 */
//margin-top: -120rpx;
/* #endif */
}
.seckill_desc {
background: linear-gradient(360deg, #FFFFFF 0%, #F4F4F4 100%);
border-radius: 24rpx 24rpx 0px 0px;
padding: 0 24rpx;
width: 100%;
height: 117rpx;
position: fixed;
z-index: 2;
}
.seckill_name {
width: 222rpx;
height: 57rpx;
background-image: url('../static/images/miaos.png');
background-size: contain;
background-repeat: no-repeat;
padding-bottom: 10rpx;
}
.seckill_discount {
font-size: 32rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #AC6926;
}
.text-right {
text-align: right;
}
.count_down {}
/deep/ .is_day {
font-size: 24rpx;
font-weight: 500;
color: #1B1B1B;
}
</style>