uniapp/pages_rush/futures/details.vue

398 lines
11 KiB
Vue

<template>
<page-meta :page-style="themeColor"></page-meta>
<view class="details">
<view v-if="Object.keys(info).length > 0">
<!--顶部内容-->
<view class="top">
<image class="top-image" :src="$util.img(info.goods_image)" mode="widthFix"></image>
<view class="top-count-down">
<image class="top-down-image" :src="$util.img('public/static/img/futures/details_down_bg.png')" mode="widthFix"></image>
<view class="top-down-text">
<image class="top-down-text-image" :src="$util.img('public/static/img/futures/details_down_icon.png')" mode="widthFix"></image>
正在销售
</view>
<view class="top-count-down-time" v-if="h > 0 || i > 0 || s > 0">
<text class="count-down-time">{{ h }}</text>:
<text class="count-down-time">{{ i }}</text>:
<text class="count-down-time">{{ s }}</text>
</view>
</view>
</view>
<!--参数信息-->
<view class="params-info">
<view class="title">{{ info.goods_name }}</view>
<view class="info-item">
售卖价格:<text class="info-num"><text class="unit">¥</text>{{ info.market_price }}/{{ info.unit || '件' }}</text>
</view>
<view class="info-item">
采购价格:<text class="buy-price"><text class="unit">¥</text>{{ info.price }}</text>
</view>
<view class="info-item">
<view class="info-block">
采购数量:<text class="info-num">{{ info.total }}{{ info.unit || '件' }}</text>
</view>
<view class="info-block">
销售商:<text class="info-num">{{ info.seller_nickname }}</text>
</view>
</view>
</view>
<!--商品详情富文本-->
<view class="goods-detail">
<view class="detail-top">
<view class="left">采购商品详情</view>
<view class="right" @click="details_show = !details_show">
展开
<i v-if="details_show" class="icondiy icon-system-jiantoushang"></i>
<i v-else class="icondiy icon-system-jiantouxia"></i>
</view>
</view>
<view class="goods-detail-content">
<uni-transition
id="goodsDetailContent"
ref="detail"
:show="details_show"
mode-class="slide-top"
:duration="2000"
>
<view v-html="info.goods_content"></view>
</uni-transition>
</view>
</view>
<!--按钮-->
<view class="bottom-buttons">
<view class="button-item" @click="editRemark">添加备注</view>
<view class="button-item" @click="buy">立即采购</view>
</view>
<!--添加备注内容-->
<uni-popup ref="orderRemarks" type="dialog" class="order-remarks-content">
<uni-popup-dialog ref="inputClose" mode="input" placeholder="请输入订单备注" @close="$refs.orderRemarks.close()" @confirm="confirmRemarks"></uni-popup-dialog>
</uni-popup>
</view>
<view v-else>
<ns-empty :isIndex="false" text="未到秒杀时间"></ns-empty>
</view>
<!--登录弹框-->
<ns-login ref="login"></ns-login>
<!--加载动画-->
<loading-cover ref="loadingCover"></loading-cover>
</view>
</template>
<script>
import uniTransition from '@/pages_rush/components/uni-transition/uni-transition.vue';
import uniPopup from '@/pages_rush/components/uni-popup-new/uni-popup.vue';
import uniPopupDialog from '@/pages_rush/components/uni-popup-dialog/uni-popup-dialog.vue';
export default {
components: {
uniTransition,
uniPopup,
uniPopupDialog
},
data() {
return {
id: 0,
// 倒计时
end_time: 1680170346,// 结束时间 时间戳
diff_time: 0,
h: '00',
i: '00',
s: '00',
interval: '',
// 商品详情是否显示
details_show: true,
info: {},
order_remarks: '',
};
},
mixins: [],
onLoad(option) {
this.id = option.id;
this.getDetail(option.id);
},
onShow() {},
onReady(){
// 判断是否登录
if (!uni.getStorageSync('token')) this.$refs.login.open('/pages_rush/futures/seckill');
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
},
methods: {
// 获取商品列表
getDetail(id) {
this.$api.sendRequest({
url: '/futures/api/futures/detail',
data: {
id: id
},
success: res => {
if(parseInt(res.code) === 0){
this.info = res.data;
this.end_time = parseInt(res.data.end_time);
// 开启倒计时
this.countDown();
}
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
},
fail: res => {
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
});
},
// 倒计时
countDown(){
this.interval = setInterval(() => {
// 获取距离结束时间的毫秒数
let nowTime = Math.ceil((new Date()).getTime() / 1000);
this.diff_time = this.end_time - nowTime;
// 计算时间
let result = this.$util.countDown(this.diff_time);
this.h = (parseInt(result.d) * 24) + parseInt(result.h);
this.i = parseInt(result.i);
this.s = parseInt(result.s);
}, 1000)
},
// 点击添加备注
editRemark(){
this.$refs.orderRemarks.open('center')
},
// 添加备注
confirmRemarks(value){
this.order_remarks = value || '';
this.$refs.orderRemarks.close();
},
// 立即采购
buy(){
uni.setStorage({
key: 'futuresOrderCreateData',
data: {
futures_id: this.id,
order_remarks: this.order_remarks
},
success: () => {
this.isSub = false;//防抖
this.$util.redirectTo('/pages_rush/futures/payment');
}
});
}
},
onBackPress(options) {
if (options.from === 'navigateBack') return false;
this.$util.redirectTo('/pages/member/index');
return true;
}
};
</script>
<style lang="scss" scoped>
.details{
background: #f5f5f5;// #f5f5f5
min-height: calc(100vh - 110rpx);
width: 100vw;
padding-bottom: 110rpx;
.top{
height: 100vw;
position: relative;
.top-image{
width: 100vw;
max-height: 100%;
}
.top-count-down{
--count-down-size--: 96rpx;
--top-count-down-time-width--: 230rpx;
height: var(--count-down-size--);
position: absolute;
bottom: 0;
left: 0;
overflow: hidden;
width: 100%;
.top-down-image{
width: 100%;
height: 100%;
}
.top-down-text{
position: absolute;
bottom: 0;
right: var(--top-count-down-time-width--);
height: var(--count-down-size--);
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: flex-end;
padding-right: 55rpx;
font-size: 30rpx;
font-weight: bold;
color: #fe6276;
.top-down-text-image{
width: 36rpx!important;
margin-right: 15rpx;
}
}
.top-count-down-time{
position: absolute;
bottom: 0;
right: 0;
height: var(--count-down-size--);
width: var(--top-count-down-time-width--);
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
justify-content: flex-start;
align-items: center;
.count-down-time{
--size--: 50rpx;
background: #313131;
color: #c6c7ca;
min-width: calc(var(--size--) - 20rpx);
height: var(--size--);
border-radius: 10rpx;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
align-items: center;
margin: 0 6rpx;
font-size: 26rpx;
padding: 0 10rpx;
}
}
}
}
.params-info{
padding: 20rpx;
background: #FFFFFF;
.title{
width: 100%;
height: 60rpx;
line-height: 50rpx;
font-size: 34rpx;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.info-item{
height: 50rpx;
line-height: 40rpx;
font-size: 28rpx;
color: #747474;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
width: 100%;
.unit{
font-size: 24rpx;
display: inline-block;
width: 22rpx;
}
.info-num{
font-weight: bold;
color: #040404;
}
.buy-price{
font-size: 34rpx;
font-weight: bold;
color: #fe5572;
}
.info-block{
width: 50%;
float: left;
font-size: 28rpx;
color: #747474;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
.goods-detail{
background: #fcfcfc;
margin-top: 20rpx;
padding: 20rpx;
.detail-top{
width: 100%;
height: 70rpx;
margin-bottom: 20rpx;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: space-between;
.left{
font-size: 30rpx;
font-weight: bold;
color: #3e3e3e;
}
.right{
font-size: 13px;
color: #838383;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
height: 70rpx;
i{
margin-left: 20rpx;
color: #838383;
}
}
}
.goods-detail-content{
overflow: hidden;
}
}
.bottom-buttons{
position: fixed;
bottom: 0;
left: 0;
width: 100%;
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-items: center;
justify-content: space-around;
height: 100rpx;
background: #FFFFFF;
.button-item{
height: 80rpx;
line-height: 80rpx;
font-size: 30rpx;
width: 240rpx;
border-radius: 100vw;
text-align: center;
}
.button-item:nth-of-type(1){
background: #FFFFFF;
border: 2rpx solid #dfdfdf;
color: #838383;
}
.button-item:nth-of-type(2){
background: #ff4546;
color: #fee6e6;
}
}
}
/deep/ .order-remarks-content{
display: inline-flex;
flex-direction: row;
flex-wrap: nowrap;
align-content: center;
justify-content: center;
align-items: center;
background-color: rgba(0,0,0,0.6);
.uni-dialog-input{
min-height: 80rpx;
height: auto!important;
}
}
</style>