uniapp/pages_rush/futures/details.vue

478 lines
13 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>
<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 class="detail-content-item">
<view class="goods-details" v-if="info.goods_content">
<rich-text :nodes="info.goods_content" @click="showImg($event)" :data-nodes="info.goods_content"></rich-text>
</view>
<view class="goods-details active" v-else>该商家暂无上传相关详情哦</view>
</view>
</uni-transition>
</view>
</view>
<!--按钮-->
<view class="bottom-buttons">
<view class="button-item" @click="editRemark">添加备注</view>
<view class="button-item" @click="payOpen">立即采购</view>
</view>
<!--添加备注内容-->
<uni-popup ref="orderRemarks" type="dialog" class="order-remarks-content">
<uni-popup-dialog ref="inputClose" mode="input" placeholder="请输入订单备注"
:value="order_remarks"
@close="$refs.orderRemarks.close()"
@confirm="confirmRemarks">
</uni-popup-dialog>
</uni-popup>
</view>
<view v-else>
<ns-empty :isIndex="false" text="未到秒杀时间"></ns-empty>
</view>
<pay-pop txt="支付密码" :pwdlength="6" ref="payPop" @pwd_e="pwdEvend" />
<!--登录弹框-->
<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';
import payPop from '@/pages_rush/components/pay-pop/pay-pop.vue';
import payment from './payment.js';
export default {
components: {
uniTransition,
uniPopup,
payPop,
uniPopupDialog
},
mixins: [payment],
data() {
return {
api: {
payment: '/futures/api/ordercreate/payment',
calculate: '/futures/api/ordercreate/calculate',
create: '/futures/api/ordercreate/create'
},
createDataKey:'futuresOrderCreateData',
id: 0,
// 倒计时
end_time: 1680170346,// 结束时间 时间戳
diff_time: 0,
h: '00',
i: '00',
s: '00',
interval: '',
// 商品详情是否显示
details_show: true,
info: {},
order_remarks: '',
userInfo:''
};
},
onLoad(option) {
this.id = option.id;
this.orderCreateData.futures_id=this.id;
this.getDetail(option.id);
},
onShow() {
this.getMemberInfo();
},
onReady(){
// 判断是否登录
if (!uni.getStorageSync('token')) this.$refs.login.open('/pages_rush/futures/seckill');
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
},
methods: {
async getMemberInfo() {
this.userInfo = uni.getStorageSync('userInfo');
if(this.userInfo) return;
let res = await this.$api.sendRequest({
url: '/api/member/info',
async: false
});
if (res.code >= 0 && res.data) {
this.token = uni.getStorageSync('token');
this.userInfo = res.data;
uni.setStorageSync('userInfo', this.userInfo);
}
},
payOpen() {
if (!uni.getStorageSync('token')) {
this.$util.redirectTo('/pages_tool/login/login');
}
this.$refs.payPop.Open()
},
pwdEvend(pass){
console.log('密码是:', pass)
this.orderCreateData.payPassword=pass;
this.orderCreate(); //创建订单
},
// 获取商品列表
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){
console.log(value)
this.order_remarks = value || '';
this.orderCreateData.buyer_message=this.order_remarks;
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');
}
});
},
showImg(e) {
//拿到图片的路径里面的内容放在我们数组中
let contentimg = e.target.dataset.nodes || e.currentTarget.dataset.nodes;
let arrImg = [];
for (var i = 0; i < contentimg.length; i++) {
var img = contentimg[i].children;
if (Array.isArray(img)) {
for (var j = 0; j < img.length; j++) {
if (img[j].attrs && img[j].name == "img") {
if (img[j].attrs.src) {
arrImg.push(img[j].attrs.src)
}
}
}
}
}
//最后一步就是把我们的所有图片放在预览的api中就可以了
uni.previewImage({
current: arrImg,
urls: arrImg,
})
}
},
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{
// padding: 5px 10px 10px;
margin-bottom: 52px;
overflow: hidden;
}
.goods-details{
// padding: 5px 10px 10px;
margin-bottom: 52px;
overflow: hidden;
}
.goods-details.active {
min-height: 150rpx;
width: 100%;
display: flex;
justify-content: center;
align-items: center;
color: $color-tip;
}
}
.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>