xlcs/xlcs-user/pagesSeckill/seckill/seckill.vue
2024-01-07 01:10:08 +08:00

189 lines
6.0 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>
<block v-if="empty">
<u-navbar :background="{ background: 'rgb(255, 101, 0)' }" :border-bottom="false" :is-back="true"
back-icon-color="#fff">
<view class="u-font-xl u-flex u-row-center u-type-info-light u-flex-1">
<view>限时秒杀</view>
</view>
</u-navbar>
<u-empty mode="data"></u-empty>
</block>
<block v-else>
<view class="gg">
<!-- 利用background-image设置导航的线形渐变色彩 -->
<u-navbar :background="{ background: 'rgb(255, 101, 0)' }" :border-bottom="false" :is-back="true"
back-icon-color="#fff">
<view class="u-font-xl u-flex u-row-center u-type-info-light u-flex-1">
<view>限时秒杀</view>
</view>
</u-navbar>
<view class="gg-content">
<view class="gg-content-header">
<scroll-view :scroll-into-view="`scroll-${navId}`" enable-flex scroll-x>
<view class="u-flex u-flex-nowrap u-p-r-20 u-p-t-20">
<!-- 循环滚动内容 -->
<view
v-for="seckillTime in seckillTimeList"
:id="`scroll-${seckillTime.id}`"
:key="seckillTime.id"
class="u-p-l-20 u-p-r-20"
@click="changeNav(seckillTime.id, seckillTime.name)"
>
<view class="u-text-center" style="width: 140rpx;">
<view class="u-font-xl u-type-info-light">{{ seckillTime.name }}</view>
<!-- 1已开抢 2抢购中 3即将开抢 -->
<block v-if="seckillTime.timeStaus === 1">
<u-tag
:bg-color="seckillTime.id === navId ? '#ff0000' : '#fff'"
:color="seckillTime.id === navId ? '#fff' : '#555'"
mode="dark"
shape="circle"
text="已开抢"
/>
</block>
<block v-if="seckillTime.timeStaus === 2">
<u-tag
:bg-color="seckillTime.id === navId ? '#19be6b' : '#fff'"
:color="seckillTime.id === navId ? '#fff' : '#555'"
mode="dark"
shape="circle"
text="抢购中"
/>
</block>
<block v-if="seckillTime.timeStaus === 3">
<u-tag
:bg-color="seckillTime.id === navId ? '#fc0' : '#fff'"
:color="seckillTime.id === navId ? '#fff' : '#555'"
mode="dark"
shape="circle"
text="即将开抢"
/>
</block>
</view>
</view>
</view>
</scroll-view>
<view class="gg-sv-seckill-container">
<view class="u-m-20 u-flex u-flex-1 gg-sv-list-container">
<scroll-view class="gg-sv-list" scroll-y="true">
<view v-for="seckillSku in seckillSkuList" :key="seckillSku.id" class="gg-sv-item">
<u-image :src="seckillSku.imgUrl" border-radius="10rpx" height="400rpx" width="100%"/>
<view class="u-font-xl u-p-t-10 u-p-b-10">{{ seckillSku.skuName }}</view>
<view>限购数量:{{ seckillSku.seckillLimit }} 销售量:{{ seckillSku.seckillSale }}
库存:{{ seckillSku.seckillStock }}
</view>
<view class="u-flex u-flex-1 u-row-between u-p-t-10 ">
<view>
价格:
<text class="u-font-xl u-type-error">¥{{ seckillSku.seckillPrice }}</text>
</view>
<view>
<u-button shape="circle" size="medium" type="error" @click="gotoProductItem(seckillSku.skuId)">
立即抢购
</u-button>
</view>
</view>
</view>
</scroll-view>
</view>
</view>
</view>
</view>
</view>
</block>
</template>
<script>
export default {
data() {
return {
seckillTimeList: [],
timeName: '',
navId: 0,
seckillSkuList: [],
empty: false
};
},
methods: {
// 秒杀时间段获取
async getSeckillTimeList() {
const result = await this.$u.api.getFindAllSeckillTimeList();
this.seckillTimeList = result;
},
// 秒杀商品列表
async geSeckillSkuList(timeName) {
const result = await this.$u.api.getFindSeckillSkuList({timeName});
this.seckillSkuList = result;
},
// 跳转至商品详情
gotoProductItem(id) {
this.$u.route('/pages/homeItem/homeItem?skuId=' + id);
},
// 秒杀时间段进行导航切换
changeNav(navId, timeName) {
this.navId = navId;
this.geSeckillSkuList(timeName);
},
},
async mounted() {
// 获取秒杀时间段与第一个时间段的商品列表
await this.getSeckillTimeList();
if (this.seckillTimeList.length > 0) {
this.navId = this.seckillTimeList[0].id;
this.timeName = this.seckillTimeList[0].name;
this.geSeckillSkuList(this.timeName);
} else {
this.empty = true;
}
}
};
</script>
<style lang="scss">
body {
background-color: $u-bg-color;
}
.gg {
&-content {
&-header {
background-color: rgb(255, 101, 0);
height: 300rpx;
border-bottom-left-radius: 80rpx;
border-bottom-right-radius: 80rpx;
}
}
&-sv-seckill-container {
position: absolute;
z-index: 1;
top: 280rpx;
width: 100%;
}
&-sv-list-container {
background-color: $u-bg-color;
border-radius: 20rpx;
}
&-sv-list {
height: calc(100vh - 380rpx);
padding: 20rpx;
}
&-sv-item {
padding: 20rpx;
border-bottom: 10rpx solid white;
border-radius: 20rpx;
background-color: white;
margin-bottom: 20rpx;
}
.active {
background-color: red !important;
}
}
</style>