You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
697 lines
18 KiB
697 lines
18 KiB
<template>
|
|
<div class="order-check-whole">
|
|
<back-header :path="'/mall/web/vgoods/detail/'+goodsNo">
|
|
订单确认
|
|
</back-header>
|
|
<div class="top">
|
|
<div class="item-top">
|
|
<div class="item-top-left">
|
|
<img src="../assets/images/order-list/address.png">
|
|
<div class="item-top-address">{{info.merchantName}}</div>
|
|
</div>
|
|
<!-- <div class="item-top-state" :class="'state'+state">{{stateText}}</div> -->
|
|
</div>
|
|
<div class="goods-container">
|
|
<img :src="imghost+info.goodsImgUrl">
|
|
<div class="goods-main-container">
|
|
<div class="title-box">
|
|
<div class="name">{{info.goodsName}}</div>
|
|
<div class="name">¥{{info.totalPrice?info.totalPrice/100:''}}</div>
|
|
</div>
|
|
<div class="box">
|
|
<div class="box-text">{{info.shortDesc}}</div>
|
|
<div class="box-num">
|
|
<el-input-number v-model="num" :min="1" :max="99"></el-input-number>
|
|
</div>
|
|
|
|
<!-- <div class="box-price">¥{{info.totalPrice?info.totalPrice/100:''}}</div> -->
|
|
</div>
|
|
<div class="tag-box">
|
|
<i class="tag" v-for="item in labelList" v-if="item.labelText">{{item.labelText}}</i>
|
|
<!-- <i class="tag">新人优惠</i> -->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="gift-container" v-if="info.gifts&&info.gifts.length>0">
|
|
<div class="gift-item" v-for="item in info.gifts">
|
|
<div class="text">【赠品】</div>
|
|
<div class="name">{{item.name}}</div>
|
|
<div class="num">x{{item.num}}</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="service-area">
|
|
<div class="title">
|
|
<img src="../assets/images/order-list/location.png">
|
|
服务区域:
|
|
</div>
|
|
<div class="area-text">
|
|
{{info.serviceAreaStr}}
|
|
</div>
|
|
</div>
|
|
<div class="coupon-container" @click="go()">
|
|
<div class="coupon-left">
|
|
<div class="left-box">
|
|
<img src="../assets/images/order-list/coupon.png">
|
|
<div class="text">
|
|
优惠券:
|
|
</div>
|
|
<div class="name" v-if="info.primeCoupon">{{info.primeCoupon.couponName}}</div>
|
|
</div>
|
|
<div class="price" v-if="info.primeCoupon">-¥{{info.primeCoupon?info.primeCoupon.amount/100:""}}</div>
|
|
</div>
|
|
<img class="icon" src="../assets/images/order-list/arrow.png">
|
|
</div>
|
|
<div class="message-container">
|
|
<div class="title">
|
|
<img src="../assets/images/order-list/edit.png">
|
|
留言备注:
|
|
</div>
|
|
<textarea v-model="info.text" placeholder="为了更好地为您服务,请简单说明您家的格局面积与保洁史"></textarea>
|
|
</div>
|
|
<div class="pay-container">
|
|
<div class="text">支付方式:</div>
|
|
<div class="pay">
|
|
<img src="../assets/images/order-list/wechat.png">
|
|
微信支付
|
|
</div>
|
|
</div>
|
|
<div class="clause">
|
|
<div class="true-box" @click="agree=!agree">
|
|
<img v-show="agree" src="../assets/images/order-list/true.png">
|
|
</div>
|
|
<div @click="agree=!agree">
|
|
我已阅读并同意
|
|
</div>
|
|
<a class="tips" href="http://www.yihaojiazheng.cn/mall/web/agreement">
|
|
《一号家政服务协议书》
|
|
</a>
|
|
</div>
|
|
<div class="fill"></div>
|
|
<div class="button" role="button">
|
|
<div class="button-text">
|
|
还需支付:
|
|
<div class="num">¥{{price}}</div>
|
|
</div>
|
|
<button :class="{disabled:!agree}" @click="pay()">立即付款</button>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
<script>
|
|
import backHeader from "../components/back-header.vue";
|
|
import orderApi from "../models/order-model.js";
|
|
import { InlineXNumber } from "vux";
|
|
var qs = require("qs");
|
|
import Qs from "qs";
|
|
export default {
|
|
data() {
|
|
return {
|
|
info: {
|
|
text: ""
|
|
},
|
|
agree: false,
|
|
goodsNo: "",
|
|
num: 1
|
|
};
|
|
},
|
|
components: {
|
|
"back-header": backHeader,
|
|
InlineXNumber
|
|
},
|
|
computed: {
|
|
price() {
|
|
let price = this.info.payPrice;
|
|
let discount = this.info.primeCoupon ? this.info.primeCoupon.amount : 0;
|
|
return price*this.num / 100 - discount / 100;
|
|
},
|
|
labelList() {
|
|
let str = this.info.smallLabel;
|
|
return str ? JSON.parse(str) : "";
|
|
}
|
|
},
|
|
methods: {
|
|
getData() {
|
|
let goodsNo = this.getParam("goodsNo");
|
|
let couponNo = this.getParam("couponNo") || "";
|
|
let goodsVersion =
|
|
this.getParam("goodsVersion") || sessionStorage.getItem("goodsVersion");
|
|
orderApi
|
|
.checkOrder(
|
|
qs.stringify({
|
|
goodsNo: goodsNo,
|
|
couponNo: couponNo,
|
|
goodsVersion: goodsVersion
|
|
})
|
|
)
|
|
.then(res => {
|
|
if (res.code == 0) {
|
|
this.agree = true;
|
|
let data = res.response;
|
|
this.info = data;
|
|
this.wechat(data.merchantNo);
|
|
} else if (res.code == 666) {
|
|
this.$vux.toast.text("您还没登录,请先登录!", "middle");
|
|
setTimeout(function() {
|
|
window.location.href = "/mall/web/user/login";
|
|
}, 2000);
|
|
} else {
|
|
if (res.msg == "" || res.msg == undefined || res.msg == null) {
|
|
res.msg = "操作失败,请刷新重试";
|
|
}
|
|
this.$vux.toast.text(res.msg, "middle");
|
|
}
|
|
this.$vux.loading.hide();
|
|
});
|
|
},
|
|
pay() {
|
|
if (!this.agree) {
|
|
this.$vux.toast.text("请先勾选同意《一号家政服务协议书》", "middle");
|
|
return;
|
|
}
|
|
this.addOrder().then(res => {
|
|
this.$vux.loading.show({
|
|
text: "正在调起支付"
|
|
});
|
|
if (this.isWeixin() && res.data.payPrice > 0) {
|
|
//微信内打开,直接调起微信公众号支付
|
|
this.$vux.loading.hide();
|
|
location.href = res.authUrl.replace(
|
|
"state=2",
|
|
"state=2" + "," + res.data.orderNo
|
|
);
|
|
} else {
|
|
var paymentType = res.data.payPrice > 0 ? 7 : 10;
|
|
orderApi
|
|
.payMoney(
|
|
qs.stringify({
|
|
orderNo: res.data.orderNo,
|
|
paymentType: paymentType
|
|
})
|
|
)
|
|
.then(data => {
|
|
this.$vux.loading.hide();
|
|
if (data && data.code === 0) {
|
|
if (paymentType === 7) {
|
|
var transMessageOutput = data.response;
|
|
var transInfo = transMessageOutput.weixinTransParameters;
|
|
if (
|
|
transInfo.prepayid !== "" &&
|
|
transInfo.prepayid !== undefined &&
|
|
transInfo.prepayid != null
|
|
) {
|
|
window.location.href = transInfo.mwebUrl;
|
|
}
|
|
} else {
|
|
setTimeout(function() {
|
|
window.location.href = "/v2/order-list";
|
|
}, 2000);
|
|
}
|
|
} else if (data.code === 666) {
|
|
this.$vux.toast.text("您还没登录,请先登录!", "middle");
|
|
setTimeout(function() {
|
|
window.location.href = "/mall/web/user/login";
|
|
}, 2000);
|
|
} else {
|
|
if (
|
|
data.msg === "" ||
|
|
data.msg === undefined ||
|
|
data.msg == null
|
|
) {
|
|
data.msg = "操作失败,请刷新重试";
|
|
}
|
|
this.$vux.toast.text(data.msg, "middle");
|
|
setTimeout(function() {
|
|
window.location.href = "/v2/order-list";
|
|
}, 2000);
|
|
}
|
|
});
|
|
}
|
|
});
|
|
},
|
|
addOrder() {
|
|
let goodsNo = this.getParam("goodsNo");
|
|
let couponNo = this.info.primeCoupon
|
|
? this.info.primeCoupon.couponNo
|
|
: "";
|
|
console.log(couponNo);
|
|
let goodsVersion =
|
|
this.getParam("goodsVersion") || sessionStorage.getItem("goodsVersion");
|
|
var estateId = "";
|
|
let estateStr = localStorage.getItem("estate") || "";
|
|
if (!estateStr) {
|
|
} else {
|
|
let estateArr = estateStr.split("&");
|
|
estateId = estateArr[0];
|
|
}
|
|
let promise = new Promise((resolve, reject) => {
|
|
orderApi
|
|
.addOrder(
|
|
qs.stringify({
|
|
goodsNo: goodsNo,
|
|
couponNo: couponNo,
|
|
goodsVersion: goodsVersion,
|
|
goodsNum:this.num,
|
|
salesmanUniqueIdentity: this.$cookies.get("1hjz_mall_unique_id"),
|
|
housingEstateId: estateId,
|
|
remark: this.info.text
|
|
})
|
|
)
|
|
.then(res => {
|
|
if (res.code == 0) {
|
|
resolve(res.response);
|
|
} else if (res.code === 666) {
|
|
this.$vux.toast.text("您还没登录,请先登录!", "middle");
|
|
setTimeout(function() {
|
|
window.location.href = "/mall/web/user/login";
|
|
}, 2000);
|
|
} else if (res.code === 200) {
|
|
this.$vux.toast.text(res.msg, "middle");
|
|
setTimeout(function() {
|
|
window.location.href = "/mall/web/order_index";
|
|
}, 2000);
|
|
} else {
|
|
if (res.msg === "" || res.msg === undefined || res.msg == null) {
|
|
res.msg = "操作失败,请刷新重试";
|
|
}
|
|
this.$vux.toast.text(res.msg, "middle");
|
|
}
|
|
});
|
|
});
|
|
return promise;
|
|
},
|
|
wechat(merchantNo) {
|
|
this.wxShare({
|
|
merchantNo: merchantNo,
|
|
source: 0,
|
|
url: encodeURIComponent(location.href),
|
|
shareUrl: encodeURIComponent("http://" + location.host + "/v2/home")
|
|
});
|
|
},
|
|
go() {
|
|
let goodsVersion = this.getParam("goodsVersion") || "";
|
|
if (goodsVersion) {
|
|
sessionStorage.setItem("goodsVersion", goodsVersion);
|
|
}
|
|
location.href =
|
|
"/mall/web/coupon_index?" + this.goodsNo + "&&" + goodsVersion;
|
|
}
|
|
},
|
|
mounted() {
|
|
this.getData();
|
|
this.goodsNo = this.getParam("goodsNo");
|
|
}
|
|
};
|
|
</script>
|
|
<style lang="scss" scoped>
|
|
.top {
|
|
margin-bottom: 0.18rem;
|
|
}
|
|
.el-input-number {
|
|
width: 120px;
|
|
}
|
|
.item-top {
|
|
height: 0.65rem;
|
|
width: 100%;
|
|
background-color: white;
|
|
margin-top: 0.15rem;
|
|
border-bottom: 0.01rem solid #e5e5e5;
|
|
box-sizing: border-box;
|
|
font-size: 0.3rem;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
padding: 0 0.36rem 0 0.3rem;
|
|
line-height: 1;
|
|
align-items: center;
|
|
img {
|
|
width: 0.34rem;
|
|
height: 0.28rem;
|
|
margin-right: 0.2rem;
|
|
}
|
|
.item-top-left {
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
.item-top-address {
|
|
}
|
|
.item-top-state {
|
|
color: #999;
|
|
font-size: 0.28rem;
|
|
}
|
|
.state0 {
|
|
color: #fcac21;
|
|
}
|
|
.state10 {
|
|
color: #00ba86;
|
|
}
|
|
.state11 {
|
|
color: #00ba86;
|
|
}
|
|
.state20 {
|
|
color: #fc4f21;
|
|
}
|
|
}
|
|
.goods-container {
|
|
width: 100%;
|
|
color: #333;
|
|
background-color: white;
|
|
display: flex;
|
|
box-sizing: border-box;
|
|
padding: 0.16rem 0.37rem 0.22rem 0.22rem;
|
|
img {
|
|
width: 1.28rem;
|
|
height: 1.28rem;
|
|
margin-right: 0.33rem;
|
|
}
|
|
.goods-main-container {
|
|
flex-grow: 1;
|
|
display: flex;
|
|
flex-direction: column;
|
|
padding-top: 0.06rem;
|
|
.title-box {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-end;
|
|
.name {
|
|
line-height: 1.2;
|
|
font-size: 0.3rem;
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
display: -webkit-box;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-line-clamp: 1;
|
|
word-wrap: break-word;
|
|
// margin-top: 0.1rem;
|
|
white-space: normal;
|
|
word-break: break-all;
|
|
margin-bottom: 0.15rem;
|
|
}
|
|
}
|
|
|
|
.box {
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: flex-end;
|
|
margin-bottom: 0.15rem;
|
|
.box-text {
|
|
font-size: 0.24rem;
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
display: -webkit-box;
|
|
-webkit-box-orient: vertical;
|
|
word-wrap: break-word;
|
|
white-space: normal;
|
|
word-break: break-all;
|
|
color: #999;
|
|
margin-right: 0.2rem;
|
|
}
|
|
.box-num {
|
|
line-height: 1;
|
|
font-weight: 400;
|
|
font-size: 0.38rem;
|
|
color: #333;
|
|
}
|
|
}
|
|
.tag-box {
|
|
font-size: 0.2rem;
|
|
display: flex;
|
|
height: 0.3rem;
|
|
overflow: hidden;
|
|
.tag {
|
|
flex-shrink: 1;
|
|
height: 100%;
|
|
font-style: normal;
|
|
background: #ffe2c7;
|
|
padding: 0rem 0.1rem;
|
|
line-height: 0.28rem;
|
|
color: #ff8a1d;
|
|
border-radius: 0.15rem;
|
|
// margin-bottom: 0.1rem;
|
|
flex-shrink: 1;
|
|
overflow: hidden;
|
|
display: -webkit-box;
|
|
margin-right: 0.1rem;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-line-clamp: 1;
|
|
line-height: 0.3rem;
|
|
word-wrap: break-word;
|
|
white-space: normal;
|
|
word-break: break-all;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.gift-container {
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
padding: 0.2rem;
|
|
background-color: #fff;
|
|
border-top: 0.01rem solid rgba(243, 243, 243, 1);
|
|
display: flex;
|
|
flex-direction: column;
|
|
color: #666;
|
|
font-size: 0.24rem;
|
|
.gift-item {
|
|
display: flex;
|
|
line-height: 1.2;
|
|
align-items: center;
|
|
.text {
|
|
flex-shrink: 0;
|
|
}
|
|
.name {
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
display: -webkit-box;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-line-clamp: 1;
|
|
word-wrap: break-word;
|
|
white-space: normal;
|
|
margin-right: 0.1rem;
|
|
word-break: break-all;
|
|
}
|
|
.num {
|
|
flex-shrink: 0;
|
|
}
|
|
}
|
|
}
|
|
.service-area {
|
|
padding: 0.36rem 0.2rem;
|
|
background-color: #fff;
|
|
display: flex;
|
|
flex-direction: column;
|
|
color: #666;
|
|
margin-bottom: 0.1rem;
|
|
.title {
|
|
display: flex;
|
|
font-size: 0.3rem;
|
|
align-items: center;
|
|
line-height: 1;
|
|
margin-bottom: 0.2rem;
|
|
font-weight: normal;
|
|
img {
|
|
width: 0.32rem;
|
|
height: 0.3rem;
|
|
margin-right: 0.08rem;
|
|
}
|
|
}
|
|
.area-text {
|
|
padding-left: 0.4rem;
|
|
font-size: 0.26rem;
|
|
}
|
|
}
|
|
.coupon-container {
|
|
width: 100%;
|
|
height: 1rem;
|
|
display: flex;
|
|
align-items: center;
|
|
padding-left: 0.2rem;
|
|
font-size: 0.3rem;
|
|
line-height: 1.1;
|
|
background-color: #fff;
|
|
box-sizing: border-box;
|
|
justify-content: space-between;
|
|
margin-bottom: 0.1rem;
|
|
.coupon-left {
|
|
flex-grow: 1;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
margin-right: 0.43rem;
|
|
img {
|
|
flex-grow: 0;
|
|
width: 0.32rem;
|
|
flex-shrink: 0;
|
|
height: 0.3rem;
|
|
margin-right: 0.08rem;
|
|
}
|
|
.text {
|
|
flex-grow: 0;
|
|
flex-shrink: 0;
|
|
margin-right: 0.5rem;
|
|
}
|
|
.name {
|
|
flex-grow: 1;
|
|
// flex-shrink: 1;
|
|
text-overflow: ellipsis;
|
|
overflow: hidden;
|
|
font-size: 0.28rem;
|
|
display: -webkit-box;
|
|
-webkit-box-orient: vertical;
|
|
-webkit-line-clamp: 1;
|
|
word-wrap: break-word;
|
|
white-space: normal;
|
|
// max-width: 3rem;
|
|
word-break: break-all;
|
|
}
|
|
.price {
|
|
color: #f42525;
|
|
flex-shrink: 0;
|
|
font-size: 0.34rem;
|
|
}
|
|
}
|
|
.left-box {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-grow: 1;
|
|
margin-right: 0.2rem;
|
|
}
|
|
.icon {
|
|
width: 0.16rem;
|
|
margin-right: 0.37rem;
|
|
height: 0.27rem;
|
|
}
|
|
}
|
|
.message-container {
|
|
width: 100%;
|
|
background-color: #fff;
|
|
height: 2.48rem;
|
|
margin-bottom: 0.1rem;
|
|
padding: 0.36rem 0.3rem 0 0.2rem;
|
|
box-sizing: border-box;
|
|
display: flex;
|
|
flex-direction: column;
|
|
color: #666;
|
|
.title {
|
|
display: flex;
|
|
font-size: 0.3rem;
|
|
align-items: center;
|
|
line-height: 1;
|
|
margin-bottom: 0.17rem;
|
|
font-weight: normal;
|
|
img {
|
|
width: 0.32rem;
|
|
height: 0.3rem;
|
|
margin-right: 0.08rem;
|
|
}
|
|
}
|
|
textarea {
|
|
border-style: none;
|
|
text-shadow: none;
|
|
-webkit-appearance: none;
|
|
-webkit-user-select: text;
|
|
outline-color: transparent;
|
|
font-family: "AvantGardGothEF-Book";
|
|
padding-left: 0.4rem;
|
|
height: 1.5rem;
|
|
box-shadow: none;
|
|
outline: none;
|
|
outline-style: none;
|
|
border: none;
|
|
background-color: white;
|
|
}
|
|
}
|
|
.pay-container {
|
|
width: 100%;
|
|
height: 1rem;
|
|
box-sizing: border-box;
|
|
padding: 0 0.3rem 0 0.2rem;
|
|
background-color: white;
|
|
font-size: 0.3rem;
|
|
line-height: 1;
|
|
justify-content: space-between;
|
|
margin-bottom: 0.3rem;
|
|
display: flex;
|
|
align-items: center;
|
|
.pay {
|
|
display: flex;
|
|
align-items: center;
|
|
img {
|
|
width: 0.63rem;
|
|
margin-right: 0.2rem;
|
|
height: 0.52rem;
|
|
}
|
|
}
|
|
}
|
|
.clause {
|
|
// width: 100%;
|
|
padding-left: 0.36rem;
|
|
display: flex;
|
|
font-size: 0.28rem;
|
|
align-items: center;
|
|
margin-bottom: 0.66rem;
|
|
line-height: 1;
|
|
.true-box {
|
|
width: 0.23rem;
|
|
height: 0.23rem;
|
|
margin-right: 0.11rem;
|
|
border: 0.02rem solid #d0d0d0;
|
|
border-radius: 0.03rem;
|
|
position: relative;
|
|
z-index: 1;
|
|
}
|
|
img {
|
|
position: absolute;
|
|
left: 0;
|
|
// right: 0;
|
|
width: 0.31rem;
|
|
bottom: 0;
|
|
z-index: 2;
|
|
// width: 0.29rem;
|
|
// height: 0.23rem;
|
|
}
|
|
.tips {
|
|
color: #00ba86;
|
|
}
|
|
}
|
|
.fill {
|
|
width: 100%;
|
|
height: 1rem;
|
|
background-color: rgba(247, 247, 247, 0);
|
|
}
|
|
.button {
|
|
width: 100%;
|
|
height: 1rem;
|
|
display: flex;
|
|
position: fixed;
|
|
bottom: 0;
|
|
z-index: 1;
|
|
justify-content: space-between;
|
|
background-color: white;
|
|
.button-text {
|
|
flex-grow: 1;
|
|
display: flex;
|
|
font-size: 0.3rem;
|
|
align-items: center;
|
|
line-height: 1;
|
|
padding-left: 0.3rem;
|
|
color: #333;
|
|
.num {
|
|
font-size: 0.36rem;
|
|
color: #f42525;
|
|
}
|
|
}
|
|
button {
|
|
width: 3.5rem;
|
|
height: 1rem;
|
|
background: #00ba86;
|
|
color: #fff;
|
|
border-radius: 0px;
|
|
border: none;
|
|
color: white;
|
|
font-size: 0.36rem;
|
|
}
|
|
.disabled {
|
|
opacity: 0.6;
|
|
}
|
|
}
|
|
</style>
|