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.
1279 lines
37 KiB
1279 lines
37 KiB
<template>
|
|
<!-- 提交订单 -->
|
|
<div class="order_confirm wrapper_1200">
|
|
<div class="header">
|
|
<span class="home">
|
|
<nuxt-link to="/">首页 ></nuxt-link>
|
|
<span v-if="!news">购物车 ></span>
|
|
</span>提交订单
|
|
</div>
|
|
<div class="address" v-if="!product_type">
|
|
<div class="title">收货地址</div>
|
|
<div class="lines">
|
|
<img src="../assets/images/line.png" />
|
|
</div>
|
|
<div class="list acea-row row-middle" :class="isShow ? 'on' : ''">
|
|
<div
|
|
class="item"
|
|
:class="current === index ? 'on' : ''"
|
|
v-for="(item, index) in addressList"
|
|
:key="index"
|
|
@click="tapCurrent(index, item)"
|
|
>
|
|
<div class="default bg-color" v-if="item.is_default">默认</div>
|
|
<div class="name line1">{{ item.real_name }}</div>
|
|
<div class="phone">{{ item.phone }}</div>
|
|
<div class="details line4">
|
|
{{ item.province }}{{ item.city }}{{ item.district
|
|
}}{{item.street}}{{ item.detail }}
|
|
</div>
|
|
<div class="iconfont icon-xuanzhong4 font-color" v-if="current === index"></div>
|
|
</div>
|
|
<div class="item add" @click="addAddress">
|
|
<div class="iconfont icon-dizhi-tianjia"></div>
|
|
<div class="tip">添加新地址</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="isShow" @click="open" v-if="!isShow && addressList.length > 3">
|
|
显示更多收货地址
|
|
<span class="iconfont icon-xiangxia"></span>
|
|
</div>
|
|
<div style="margin-top: 10px" v-if="addressList.length <= 3"></div>
|
|
<div class="isShow" @click="close" v-if="isShow && addressList.length > 3">
|
|
隐藏更多收货地址
|
|
<span class="iconfont icon-xiangshang"></span>
|
|
</div>
|
|
<div class="wrapper wrapper_1200">
|
|
<div class="title">订单信息</div>
|
|
<div class="order">
|
|
<div class="list">
|
|
<div
|
|
class="item acea-row row-between-wrapper"
|
|
v-for="(item, index) in cartObj"
|
|
:key="index"
|
|
>
|
|
<div class="txtPic acea-row row-middle">
|
|
<div class="pictrue">
|
|
<img :src="item.productInfo.attrInfo.image" v-if="item.productInfo.attrInfo" />
|
|
<img :src="item.productInfo.image" v-else />
|
|
</div>
|
|
<div class="text">
|
|
<div class="name line2">{{ item.productInfo.store_name }}</div>
|
|
<div
|
|
class="info"
|
|
v-if="item.productInfo.attrInfo"
|
|
>{{ item.productInfo.attrInfo.suk }}</div>
|
|
<div class="info" v-else>默认</div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<span
|
|
class="money"
|
|
v-if="item.productInfo.attrInfo"
|
|
>¥{{ item.productInfo.attrInfo.price }}</span>
|
|
<span class="money" v-else>{{ item.productInfo.price }}</span>
|
|
<span class="num">x{{ item.cart_num }}</span>
|
|
<span class="font-color">{{ item.priceCon }}</span>
|
|
<!--<span class="font-color" v-if="item.productInfo.attrInfo">¥{{comsys.Mul(item.productInfo.attrInfo.price,item.cart_num)}}</span>-->
|
|
<!--<span class="font-color" v-else>¥{{comsys.Mul(item.productInfo.price,item.cart_num)}}</span>-->
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="giveGoods acea-row">
|
|
<div class="item acea-row row-middle" v-for="(item,index) in giftObj" :key="index">
|
|
<div class="pictrue">
|
|
<img :src="item.productInfo.attrInfo.image" />
|
|
</div>
|
|
<div class="text line2">
|
|
<span class="lable">赠品</span>
|
|
{{item.productInfo.store_name}}
|
|
</div>
|
|
</div>
|
|
<div
|
|
class="item acea-row row-middle"
|
|
v-for="(item,index) in give_coupon"
|
|
:key="index"
|
|
v-if="give_coupon.length"
|
|
>
|
|
<div class="pictrue">
|
|
<img src="../assets/images/coupon.png" />
|
|
</div>
|
|
<div class="text line2">
|
|
<span class="lable">赠品</span>
|
|
{{item.coupon_title}}
|
|
</div>
|
|
</div>
|
|
<div class="item acea-row row-middle" v-if="give_integral>0">
|
|
<div class="pictrue">
|
|
<img src="../assets/images/integral.png" />
|
|
</div>
|
|
<div class="text line2">
|
|
<span class="lable">赠品</span>
|
|
{{give_integral}}积分
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="coupon" v-if="!deduction">
|
|
<div class="couponTitle acea-row row-between-wrapper">
|
|
<div>使用优惠券</div>
|
|
<div class="couponPrice font-color" v-if="couponList.length">-¥{{ couponPrice }}</div>
|
|
<div class="couponPriceNo font-color" v-else>无可使用优惠券</div>
|
|
</div>
|
|
<div class="couponList acea-row row-middle">
|
|
<div
|
|
class="item acea-row row-middle"
|
|
:class="item.receive_type === 4 ? 'svip' : ''"
|
|
v-for="(item, index) in couponList"
|
|
:key="index"
|
|
@click="getCouponUser(index, item)"
|
|
>
|
|
<div class="name" v-if="item.type === 0">通用券</div>
|
|
<div class="name" v-else-if="item.type === 1">品类券</div>
|
|
<div class="name" v-else>商品券</div>
|
|
<div class="money">满{{ item.use_min_price }}减{{ item.coupon_price }}</div>
|
|
<div
|
|
class="iconfont icon-xuanzhong4"
|
|
:class="item.receive_type === 4 ? '' : 'font-color'"
|
|
v-if="couponCurrent === index"
|
|
></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="coupon" v-if="!deduction">
|
|
<div class="couponTitle acea-row row-between-wrapper">
|
|
<div>积分抵扣</div>
|
|
<div
|
|
class="couponPrice font-color"
|
|
v-if="parseFloat(userInfo.integral)"
|
|
>-¥{{ computeData.deduction_price || 0 }}</div>
|
|
<div class="couponPriceNo font-color" v-else>无可使用积分</div>
|
|
</div>
|
|
<div class="acea-row row-middle" v-if="parseFloat(userInfo.integral)">
|
|
<div class="checkbox-wrapper">
|
|
<label class="well-check">
|
|
<input type="checkbox" name v-model="useIntegral" />
|
|
<i class="icon"></i>
|
|
</label>
|
|
</div>
|
|
<div class="integralCurrent">
|
|
当前积分
|
|
<span class="num font-color">
|
|
{{
|
|
useIntegral ? computeData.SurplusIntegral : userInfo.integral
|
|
}}
|
|
</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div v-if="confirm.length">
|
|
<div class="coupon message acea-row" v-for="(item, index) in confirm" :key="index">
|
|
<div class="msgTitle">
|
|
<span v-if="item.status" class="asterisk">*</span>
|
|
<span class="confirmtit">{{ item.title }}</span>
|
|
</div>
|
|
<!-- text -->
|
|
<div v-if="item.label == 'text'" class="confirm">
|
|
<el-input v-model="item.value" :placeholder="'请填写' + item.title"></el-input>
|
|
</div>
|
|
<!-- number -->
|
|
<div v-if="item.label == 'number'" class="number confirm">
|
|
<el-input type="number" v-model="item.value" :placeholder="'请填写' + item.title"></el-input>
|
|
</div>
|
|
<!-- email -->
|
|
<div v-if="item.label == 'email'" class="confirm">
|
|
<el-input v-model="item.value" :placeholder="'请填写' + item.title"></el-input>
|
|
</div>
|
|
<!-- data -->
|
|
<div v-if="item.label == 'data'">
|
|
<el-date-picker
|
|
class="confirm"
|
|
v-model="item.value"
|
|
type="date"
|
|
value-format="yyyy-MM-dd"
|
|
placeholder="选择日期"
|
|
></el-date-picker>
|
|
</div>
|
|
<!-- time -->
|
|
<div v-if="item.label == 'time'">
|
|
<el-time-select
|
|
v-model="item.value"
|
|
class="confirm"
|
|
:picker-options="{
|
|
start: '00:00',
|
|
step: '00:01',
|
|
end: '23:59',
|
|
}"
|
|
placeholder="选择时间"
|
|
></el-time-select>
|
|
</div>
|
|
<!-- id -->
|
|
<div v-if="item.label == 'id'" class="confirm">
|
|
<el-input type="idcard" v-model="item.value" :placeholder="'请填写' + item.title"></el-input>
|
|
</div>
|
|
<!-- phone -->
|
|
<div v-if="item.label == 'phone'" class="confirm">
|
|
<el-input maxlength="11" v-model="item.value" :placeholder="'请填写' + item.title"></el-input>
|
|
</div>
|
|
<!-- img -->
|
|
<div v-if="item.label == 'img'">
|
|
<el-upload
|
|
class="upload"
|
|
list-type="picture-card"
|
|
:action="upLoadUrl"
|
|
:headers="myHeaders"
|
|
:limit="8"
|
|
:on-remove="handleRemove"
|
|
:on-success="handleSuccess"
|
|
:on-exceed="handleExceed"
|
|
:before-upload="beforeUpload"
|
|
>
|
|
<i class="el-icon-plus"></i>
|
|
</el-upload>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="coupon message acea-row">
|
|
<div class="msgTitle">买家留言</div>
|
|
<textarea
|
|
class="textarea"
|
|
placeholder="填写内容与商家协商并确认,限150字内~"
|
|
v-model="mark"
|
|
maxlength="150"
|
|
></textarea>
|
|
</div>
|
|
</div>
|
|
<div class="totalCon">
|
|
<div class="total acea-row row-middle row-right">
|
|
<div>
|
|
<span class="font-color">{{ totalNmu }}</span>件商品,总商品金额:
|
|
</div>
|
|
<div class="money">
|
|
¥{{
|
|
(parseFloat(priceGroup.totalPrice) +
|
|
parseFloat(priceGroup.vipPrice) || 0).toFixed(2)
|
|
}}
|
|
</div>
|
|
</div>
|
|
<div class="total acea-row row-middle row-right">
|
|
<div>运费:</div>
|
|
<div class="money">¥{{ freight || 0 }}</div>
|
|
</div>
|
|
<div class="total acea-row row-middle row-right" v-if="priceGroup.storePostageDiscount">
|
|
<div>运费折扣:</div>
|
|
<div class="money">- ¥{{ priceGroup.storePostageDiscount || 0 }}</div>
|
|
</div>
|
|
<div class="total acea-row row-middle row-right" v-if="priceGroup.vipPrice">
|
|
<div>会员折扣:</div>
|
|
<div class="money">- ¥{{ priceGroup.vipPrice || 0 }}</div>
|
|
</div>
|
|
<div
|
|
class="total acea-row row-middle"
|
|
v-for="(item,index) in promotions_detail"
|
|
:key="index"
|
|
v-if="parseFloat(item.promotions_price)"
|
|
>
|
|
<div>{{item.title}}:</div>
|
|
<div>-¥{{parseFloat(item.promotions_price).toFixed(2)}}</div>
|
|
</div>
|
|
</div>
|
|
<div class="totalAmount">
|
|
应付总额:
|
|
<span class="money font-color">¥{{ totalPrice }}</span>
|
|
</div>
|
|
<div class="bnt acea-row row-right">
|
|
<div class="submit bg-color" @click="SubOrder">提交订单</div>
|
|
</div>
|
|
</div>
|
|
<!-- 添加地址弹窗 -->
|
|
<el-dialog
|
|
:title="upgradeAddr?'更换收货地址成功':'添加收货地址'"
|
|
:visible.sync="dialogVisible"
|
|
width="700"
|
|
:show-close="upgradeAddr?false:true"
|
|
:before-close="handleClose"
|
|
>
|
|
<div class="form-box">
|
|
<div class="input-item" style="width: 48%; display: inline-block">
|
|
<el-input v-model="formData.name" maxlength="25" placeholder="姓名"></el-input>
|
|
</div>
|
|
<div class="input-item" style="width: 48%; display: inline-block; margin-left: 3%">
|
|
<el-input v-model="formData.phone" placeholder="手机号"></el-input>
|
|
</div>
|
|
<div class="input-item text-wrapper">
|
|
<p @click="bindAdd" v-if="!cityData.province.id">请选择省/市/区/街道</p>
|
|
<p @click="bindAdd" v-if="cityData.province.id" style="color: #333">
|
|
<span v-if="cityData.province.label">{{ cityData.province.label }}/</span>
|
|
<span v-if="cityData.city.label">{{ cityData.city.label }}/</span>
|
|
<span v-if="cityData.district.label">{{ cityData.district.label }}</span>
|
|
<span v-if="cityData.street.label">/{{ cityData.street.label }}</span>
|
|
</p>
|
|
<div class="select-wrapper" v-if="isShowSelect">
|
|
<div class="title-box" v-if="!cityData.province.id">选择省/自治区</div>
|
|
<div class="title-box" v-if="cityData.step == 2">
|
|
<span>{{ cityData.province.label }}</span>选择区县
|
|
</div>
|
|
<div class="title-box" v-if="cityData.step == 3">
|
|
<span>{{ cityData.province.label }}</span>
|
|
<span>{{ cityData.city.label }}</span>请选择配送区域
|
|
</div>
|
|
<div class="title-box" v-if="cityData.step == 4 && isChildren">
|
|
<span>{{ cityData.province.label }}</span>
|
|
<span>{{ cityData.city.label }}</span>
|
|
<span>{{ cityData.district.label }}</span>
|
|
请选择配送街道
|
|
</div>
|
|
<div class="label-txt">
|
|
<span
|
|
v-for="(item, index) in cityData.list"
|
|
:key="index"
|
|
@click="bindCity(item)"
|
|
:class="{ on: cityData.pid == item.id }"
|
|
>{{ item.label }}</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="input-item">
|
|
<el-input type="textarea" rows="3" v-model="formData.con" placeholder="详细地址"></el-input>
|
|
</div>
|
|
<div class="input-item">
|
|
<el-checkbox v-model="formData.checked" :disabled="upgradeAddr?true:false">设为默认</el-checkbox>
|
|
</div>
|
|
</div>
|
|
<span slot="footer" class="dialog-footer">
|
|
<el-button @click="handleClose" v-if="!upgradeAddr">取 消</el-button>
|
|
<el-button type="primary" @click="bindSubmit">确 定</el-button>
|
|
</span>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
// import {MessageBox } from 'element-ui';
|
|
import setting from "~/setting";
|
|
export default {
|
|
name: "order_confirm",
|
|
auth: "guest",
|
|
data() {
|
|
return {
|
|
product_type: 1,
|
|
upLoadUrl: setting.apiBaseURL + "/upload/image",
|
|
myHeaders: {},
|
|
pics: [],
|
|
dialogVisible: false,
|
|
isShowSelect: false,
|
|
formData: {
|
|
name: "",
|
|
phone: "",
|
|
con: "",
|
|
checked: false
|
|
},
|
|
cityData: {
|
|
pid: 0,
|
|
step: 1,
|
|
list: [],
|
|
con: "",
|
|
province: {},
|
|
city: {},
|
|
district: {},
|
|
street: {}
|
|
},
|
|
addressList: [],
|
|
current: 0,
|
|
// cartId:"",//购物车id
|
|
news: 1,
|
|
cartInfo: [],
|
|
couponList: [],
|
|
couponCurrent: -1,
|
|
couponPrice: 0,
|
|
userInfo: {},
|
|
deduction: false, //判断是否为
|
|
orderKey: "",
|
|
addressId: 0,
|
|
useIntegral: false, //是否使用积分
|
|
couponId: 0,
|
|
computeData: {},
|
|
mark: "", //备注信息
|
|
totalNmu: 0,
|
|
priceGroup: {},
|
|
totalPrice: 0, //最终商品金额;
|
|
seckillId: 0,
|
|
isShow: false,
|
|
freight: 0,
|
|
isChildren: true,
|
|
cartObj: [],
|
|
giftObj: []
|
|
};
|
|
},
|
|
watch: {
|
|
couponCurrent(n) {
|
|
if (n == -1) {
|
|
this.couponPrice = 0;
|
|
this.couponId = 0;
|
|
} else {
|
|
this.couponPrice = this.couponList[n].coupon_price;
|
|
this.couponId = this.couponList[n].id;
|
|
}
|
|
this.getInfo();
|
|
},
|
|
useIntegral() {
|
|
this.computedPrice();
|
|
}
|
|
},
|
|
async asyncData({ app, query }) {
|
|
let [addressMsg, confirmMsg, couponListMsg] = await Promise.all([
|
|
app.$axios.get("/address/list", {
|
|
page: 1,
|
|
limit: 50
|
|
}),
|
|
app.$axios.post("/order/confirm", {
|
|
cartId: query.cartId,
|
|
new: query.new ? 1 : 0,
|
|
couponId: 0
|
|
}),
|
|
app.$axios.get("/coupons/order/" + 0, {
|
|
params: {
|
|
cartId: query.cartId,
|
|
new: query.new ? 1 : 0
|
|
}
|
|
})
|
|
]);
|
|
return {
|
|
addressList: addressMsg.data,
|
|
cartId: query.cartId,
|
|
refundNum: query.refundNum,
|
|
give_coupon: confirmMsg.data.give_coupon,
|
|
give_integral: confirmMsg.data.give_integral,
|
|
promotions_detail: confirmMsg.data.promotions_detail,
|
|
addressInfo: confirmMsg.data.addressInfo,
|
|
upgradeAddr: confirmMsg.data.upgrade_addr,
|
|
cartInfo: confirmMsg.data.cartInfo,
|
|
confirm: confirmMsg.data.custom_form,
|
|
product_type: confirmMsg.data.product_type,
|
|
userInfo: confirmMsg.data.userInfo,
|
|
deduction: confirmMsg.data.deduction,
|
|
orderKey: confirmMsg.data.orderKey,
|
|
priceGroup: confirmMsg.data.priceGroup,
|
|
totalPrice: confirmMsg.data.priceGroup.totalPrice,
|
|
seckillId: confirmMsg.data.seckill_id,
|
|
yue_pay_status: confirmMsg.data.yue_pay_status,
|
|
pay_weixin_open: confirmMsg.data.pay_weixin_open,
|
|
ali_pay_status: confirmMsg.data.ali_pay_status,
|
|
couponList: couponListMsg.data,
|
|
freight: confirmMsg.data.priceGroup.storePostage,
|
|
news: query.new ? 1 : 0
|
|
};
|
|
},
|
|
fetch({ store }) {
|
|
store.commit("isHeader", true);
|
|
store.commit("isFooter", true);
|
|
},
|
|
head() {
|
|
return {
|
|
title: "确认订单-" + this.$store.state.titleCon
|
|
};
|
|
},
|
|
created() {
|
|
//计算数量的;
|
|
let that = this,
|
|
cartObj = [],
|
|
giftObj = [],
|
|
num = 0;
|
|
that.cartInfo.forEach((item, index) => {
|
|
num += item.cart_num;
|
|
if (item.is_gift == 1) {
|
|
giftObj.push(item);
|
|
} else {
|
|
cartObj.push(item);
|
|
}
|
|
});
|
|
that.totalNmu = num;
|
|
that.giftObj = giftObj;
|
|
that.cartObj = cartObj;
|
|
that.addressList.forEach((item, index) => {
|
|
if (item.is_default) {
|
|
that.addressId = item.id;
|
|
that.current = index;
|
|
} else {
|
|
that.addressId = that.addressList[0].id;
|
|
that.current = 0;
|
|
}
|
|
});
|
|
let local = this.$cookies.get("auth.strategy");
|
|
this.myHeaders = {
|
|
Authorization: this.$cookies.get(`auth._token.${local}`)
|
|
};
|
|
// this.computedPrice();
|
|
// that.getCouponList();
|
|
if (that.upgradeAddr == 1) {
|
|
that.addressId = that.addressInfo.id;
|
|
that.formData.checked = true;
|
|
// MessageBox.alert('当前地址功能已更新,请重新修改', '更新地址', {
|
|
// confirmButtonText: '确定',
|
|
// showClose:false,
|
|
// callback: action => {
|
|
// this.dialogVisible = true;
|
|
// }
|
|
// });
|
|
}
|
|
this.computedPrice();
|
|
},
|
|
mounted() {
|
|
//计算商品价格;
|
|
let that = this;
|
|
let tempArr = that.cartInfo.map((item, index) => {
|
|
if (item.productInfo.attrInfo) {
|
|
item.priceCon = that.comsys.Mul(
|
|
item.productInfo.attrInfo.price,
|
|
item.cart_num
|
|
);
|
|
} else {
|
|
item.priceCon = that.comsys.Mul(item.productInfo.price, item.cart_num);
|
|
}
|
|
return {
|
|
...item
|
|
};
|
|
});
|
|
this.cartInfo = tempArr;
|
|
},
|
|
methods: {
|
|
getInfo() {
|
|
this.$axios
|
|
.post("/order/confirm", {
|
|
cartId: this.cartId,
|
|
new: this.news,
|
|
couponId: this.couponId
|
|
})
|
|
.then(res => {
|
|
let data = res.data;
|
|
this.give_coupon = data.give_coupon;
|
|
this.give_integral = data.give_integral;
|
|
this.promotions_detail = data.promotions_detail;
|
|
this.addressInfo = data.addressInfo;
|
|
this.upgradeAddr = data.upgrade_addr;
|
|
this.cartInfo = data.cartInfo;
|
|
this.product_type = data.product_type;
|
|
this.userInfo = data.userInfo;
|
|
this.deduction = data.deduction;
|
|
this.orderKey = data.orderKey;
|
|
this.priceGroup = data.priceGroup;
|
|
this.totalPrice = data.priceGroup.totalPrice;
|
|
this.seckillId = data.seckill_id;
|
|
this.yue_pay_status = data.yue_pay_status;
|
|
this.pay_weixin_open = data.pay_weixin_open;
|
|
this.ali_pay_status = data.ali_pay_status;
|
|
this.freight = data.priceGroup.storePostage;
|
|
this.computedPrice();
|
|
})
|
|
.catch(err => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
handleSuccess(response) {
|
|
if (response.status === 200) {
|
|
this.pics.push(response.data.url);
|
|
} else if (response.status === 400) {
|
|
this.$message.error(response.msg);
|
|
}
|
|
},
|
|
beforeUpload(file) {
|
|
const isImage = file.type === "image/jpeg" || file.type === "image/png";
|
|
const isLt2M = file.size / 1024 / 1024 < 2;
|
|
if (!isImage) {
|
|
this.$message.error("上传图片只能是 JPG、PNG 格式!");
|
|
}
|
|
if (!isLt2M) {
|
|
this.$message.error("上传头像图片大小不能超过 2MB!");
|
|
}
|
|
return isImage && isLt2M;
|
|
},
|
|
handleRemove(file, fileList) {
|
|
this.pics = [];
|
|
fileList.forEach(item => {
|
|
this.pics.push(item.response.data.url);
|
|
});
|
|
},
|
|
handleExceed() {
|
|
this.$message.warning("最多上传8张图片");
|
|
},
|
|
// 表单重置
|
|
formReset() {
|
|
this.formData.name = "";
|
|
this.formData.phone = "";
|
|
this.formData.con = "";
|
|
this.formData.checked = false;
|
|
this.cityData.province = {};
|
|
this.cityData.city = {};
|
|
this.cityData.district = {};
|
|
this.cityData.street = {};
|
|
this.cityData.step = 1;
|
|
this.cityData.pid = 0;
|
|
},
|
|
handleClose() {
|
|
this.isShowSelect = false;
|
|
this.formReset();
|
|
this.dialogVisible = false;
|
|
this.isChildren = true;
|
|
},
|
|
getList() {
|
|
this.$axios
|
|
.get("address/list")
|
|
.then(res => {
|
|
this.addressList = res.data;
|
|
this.addressId = res.data[0].id;
|
|
this.computedPrice();
|
|
})
|
|
.catch(err => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
bindAdd() {
|
|
this.isShowSelect = !this.isShowSelect;
|
|
if (!this.isChildren) {
|
|
return;
|
|
} else {
|
|
this.cityData.city = {};
|
|
this.cityData.district = {};
|
|
this.cityData.street = {};
|
|
this.getCityList();
|
|
}
|
|
},
|
|
getCityList() {
|
|
this.$axios.get(`pc/get_city/${this.cityData.pid}`).then(res => {
|
|
this.cityData.list = res.data;
|
|
});
|
|
},
|
|
addAddress() {
|
|
this.addressId = 0;
|
|
this.dialogVisible = true;
|
|
},
|
|
// 选择城市
|
|
bindCity(item) {
|
|
this.isChildren = item.hasOwnProperty("children");
|
|
if (!this.isChildren) {
|
|
this.isShowSelect = false;
|
|
if (this.cityData.step == 3) {
|
|
this.cityData.district = item;
|
|
this.cityData.pid = item.id;
|
|
}
|
|
if (this.cityData.step == 4) {
|
|
this.cityData.street = item;
|
|
this.cityData.pid = item.id;
|
|
}
|
|
} else {
|
|
if (this.cityData.step == 1) {
|
|
this.cityData.province = item;
|
|
}
|
|
if (this.cityData.step == 2) {
|
|
this.cityData.city = item;
|
|
}
|
|
if (this.cityData.step == 3) {
|
|
this.cityData.district = item;
|
|
}
|
|
this.cityData.pid = item.id;
|
|
this.cityData.step++;
|
|
this.getCityList();
|
|
}
|
|
},
|
|
bindSubmit() {
|
|
if (!this.formData.name) {
|
|
return this.$message.error("请填写姓名");
|
|
}
|
|
if (
|
|
!this.formData.phone ||
|
|
!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(this.formData.phone)
|
|
) {
|
|
return this.$message.error("请填写正确的手机号码");
|
|
}
|
|
let district = this.cityData.district.hasOwnProperty("children");
|
|
if (
|
|
(!district && !this.cityData.district.label) ||
|
|
(district && !this.cityData.street.label)
|
|
) {
|
|
return this.$message.error("请选择省市区");
|
|
}
|
|
if (!this.formData.con) {
|
|
return this.$message.error("请填写详细地址");
|
|
}
|
|
this.$axios
|
|
.post("address/edit", {
|
|
address: {
|
|
province: this.cityData.province.label,
|
|
city: this.cityData.city.label,
|
|
district: this.cityData.district.label,
|
|
street: this.cityData.street.label || "",
|
|
city_id: this.cityData.city.id
|
|
},
|
|
is_default: this.formData.checked ? 1 : 0,
|
|
real_name: this.formData.name,
|
|
phone: this.formData.phone,
|
|
detail: this.formData.con,
|
|
id: this.addressId
|
|
})
|
|
.then(res => {
|
|
if (!this.addressId) {
|
|
this.addressId = res.data.id;
|
|
}
|
|
this.dialogVisible = false;
|
|
this.getList();
|
|
this.formReset();
|
|
this.isChildren = true;
|
|
this.isShowSelect = false;
|
|
this.upgradeAddr = 0;
|
|
return this.$message.success(
|
|
this.upgradeAddr ? "更换地址成功" : "添加成功"
|
|
);
|
|
})
|
|
.catch(err => {
|
|
return this.$message.error(err);
|
|
});
|
|
},
|
|
SubOrder() {
|
|
let that = this;
|
|
if (!that.product_type && !that.addressId)
|
|
return this.$message.error("请添加收货地址");
|
|
for (var i = 0; i < that.confirm.length; i++) {
|
|
let data = that.confirm[i];
|
|
if (data.label === "img") {
|
|
data.value = that.pics;
|
|
}
|
|
if (data.status || (data.label !== "img" && data.value.trim())) {
|
|
if (
|
|
data.label === "text" ||
|
|
data.label === "data" ||
|
|
data.label === "time"
|
|
) {
|
|
if (!data.value.trim())
|
|
return this.$message.error(`请填写${data.title}`);
|
|
}
|
|
if (data.label === "number") {
|
|
if (data.value <= 0) {
|
|
return this.$message.error(`请填写大于0的${data.title}`);
|
|
}
|
|
}
|
|
if (data.label === "email") {
|
|
if (
|
|
!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(data.value)
|
|
) {
|
|
return this.$message.error(`请填写正确的${data.title}`);
|
|
}
|
|
}
|
|
if (data.label === "phone") {
|
|
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(data.value)) {
|
|
return this.$message.error(`请填写正确的${data.title}`);
|
|
}
|
|
}
|
|
if (data.label === "id") {
|
|
if (
|
|
!/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/i.test(
|
|
data.value
|
|
)
|
|
) {
|
|
return this.$message.error(`请填写正确的${data.title}`);
|
|
}
|
|
}
|
|
if (data.label === "img") {
|
|
data.value = that.pics;
|
|
if (!data.value.length) {
|
|
return this.$message.error(`请上传${data.title}`);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
let data = {
|
|
custom_form: that.confirm,
|
|
addressId: that.addressId,
|
|
formId: "",
|
|
couponId: that.couponId,
|
|
useIntegral: that.useIntegral,
|
|
seckill_id: that.seckillId,
|
|
mark: that.mark,
|
|
from: "pc",
|
|
new: that.news
|
|
};
|
|
that.$axios
|
|
.post("/order/create/" + that.orderKey, data)
|
|
.then(res => {
|
|
if (that.totalPrice <= 0) {
|
|
that.goPay(res.data.result.orderId);
|
|
} else {
|
|
that.$router.replace({
|
|
path: "/payment",
|
|
query: {
|
|
result: res.data.result.orderId,
|
|
cartId: this.$route.query.cartId,
|
|
new: this.$route.query.new ? 1 : 0,
|
|
y: this.yue_pay_status,
|
|
w: this.pay_weixin_open,
|
|
a: this.ali_pay_status ? 1 : 0
|
|
}
|
|
});
|
|
}
|
|
if (!that.news) {
|
|
that.$store.commit(
|
|
"cartNum",
|
|
this.$store.state.cartnumber - this.refundNum
|
|
);
|
|
}
|
|
})
|
|
.catch(err => {
|
|
return this.$message.error(err);
|
|
});
|
|
},
|
|
goPay(orderId) {
|
|
let that = this;
|
|
that.$axios
|
|
.post("/order/pay", {
|
|
uni: orderId,
|
|
paytype: "yue",
|
|
from: "pc"
|
|
})
|
|
.then(res => {
|
|
this.$message.success(res.msg);
|
|
that.$store.commit("cartNum", 0);
|
|
that.getOrderCoupon(orderId);
|
|
setTimeout(function() {
|
|
that.$router.push({
|
|
path: "/order_detail",
|
|
query: { orderId: orderId }
|
|
});
|
|
}, 1000);
|
|
})
|
|
.catch(err => {
|
|
this.$message.error(err.msg);
|
|
});
|
|
},
|
|
//支付成功发送优惠券;
|
|
getOrderCoupon(orderId) {
|
|
let that = this;
|
|
that.$axios.post("/v2/order/product_coupon/" + orderId).then(res => {});
|
|
},
|
|
computedPrice() {
|
|
this.$axios
|
|
.post("/order/computed/" + this.orderKey, {
|
|
addressId: this.addressId,
|
|
useIntegral: this.useIntegral ? 1 : 0,
|
|
couponId: this.couponId
|
|
})
|
|
.then(res => {
|
|
this.computeData = res.data.result;
|
|
this.totalPrice = res.data.result.pay_price;
|
|
this.freight = res.data.result.total_postage;
|
|
this.priceGroup.storePostageDiscount =
|
|
res.data.result.storePostageDiscount;
|
|
})
|
|
.catch(err => {
|
|
this.$message.error(err);
|
|
});
|
|
},
|
|
getCouponUser(index) {
|
|
if (this.couponCurrent !== index) {
|
|
this.couponCurrent = index;
|
|
} else {
|
|
this.couponCurrent = -1;
|
|
}
|
|
},
|
|
tapCurrent(index, item) {
|
|
this.current = index;
|
|
this.addressId = item.id;
|
|
this.getInfo();
|
|
},
|
|
open() {
|
|
this.isShow = true;
|
|
},
|
|
close() {
|
|
this.isShow = false;
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style scoped lang="scss">
|
|
.input-item {
|
|
margin-bottom: 20px;
|
|
}
|
|
.giveGoods {
|
|
border-top: 1px solid #efefef;
|
|
.item {
|
|
height: 76px;
|
|
margin-right: 40px;
|
|
.pictrue {
|
|
width: 44px;
|
|
height: 44px;
|
|
border-radius: 4px;
|
|
margin-right: 6px;
|
|
img {
|
|
width: 100%;
|
|
height: 100%;
|
|
border-radius: 4px;
|
|
}
|
|
}
|
|
.text {
|
|
font-size: 14rpx;
|
|
width: 160px;
|
|
.lable {
|
|
font-size: 12px;
|
|
color: #e93323;
|
|
border: 1px solid #e93323;
|
|
padding: 0 2px;
|
|
border-radius: 2px;
|
|
display: inline-block;
|
|
margin-right: 4px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.text-wrapper {
|
|
position: relative;
|
|
height: 40px;
|
|
line-height: 40px;
|
|
border: 1px solid #dcdfe6;
|
|
padding: 0 15px;
|
|
box-sizing: border-box;
|
|
border-radius: 4px;
|
|
color: #cfcfcf;
|
|
.select-wrapper {
|
|
z-index: 10;
|
|
position: absolute;
|
|
left: 0;
|
|
top: 45px;
|
|
width: 100%;
|
|
padding: 0 15px;
|
|
background: #fff;
|
|
border: 1px solid #e93323;
|
|
border-radius: 4px;
|
|
line-height: 2;
|
|
.title-box {
|
|
height: 40px;
|
|
line-height: 40px;
|
|
border-bottom: 1px solid #efefef;
|
|
color: #e93323;
|
|
font-size: 14px;
|
|
span {
|
|
margin-right: 8px;
|
|
color: #666666;
|
|
}
|
|
}
|
|
.label-txt {
|
|
margin: 8px 0 18px;
|
|
color: #666666;
|
|
font-size: 14px;
|
|
span {
|
|
margin-right: 10px;
|
|
cursor: pointer;
|
|
&.on {
|
|
color: #e93323;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.order_confirm {
|
|
.header {
|
|
height: 60px;
|
|
line-height: 60px;
|
|
color: #999999;
|
|
.home {
|
|
color: #282828;
|
|
}
|
|
}
|
|
.address {
|
|
background-color: #fff;
|
|
.title {
|
|
height: 64px;
|
|
font-size: 18px;
|
|
padding: 0 28px;
|
|
line-height: 64px;
|
|
}
|
|
.lines {
|
|
width: 100%;
|
|
height: 4px;
|
|
img {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
}
|
|
.list {
|
|
padding: 0 25px 26px 25px;
|
|
height: 217px;
|
|
overflow: hidden;
|
|
&.on {
|
|
height: auto;
|
|
}
|
|
.item {
|
|
width: 250px;
|
|
height: 170px;
|
|
border: 1px solid #eaeaea;
|
|
padding: 22px 27px;
|
|
overflow: hidden;
|
|
margin: 30px 0 0 30px;
|
|
position: relative;
|
|
cursor: pointer;
|
|
&.on {
|
|
border-color: #e93323;
|
|
}
|
|
.icon-xuanzhong4 {
|
|
position: absolute;
|
|
right: -4px;
|
|
bottom: -4px;
|
|
font-size: 27px;
|
|
}
|
|
.default {
|
|
position: absolute;
|
|
width: 56px;
|
|
height: 23px;
|
|
font-size: 12px;
|
|
color: #fff;
|
|
text-align: center;
|
|
line-height: 23px;
|
|
top: 0;
|
|
right: 0;
|
|
}
|
|
&.add {
|
|
text-align: center;
|
|
.iconfont {
|
|
font-size: 35px;
|
|
color: #bfbfbf;
|
|
margin-top: 25px;
|
|
}
|
|
.tip {
|
|
color: #c8c8c8;
|
|
margin-top: 8px;
|
|
}
|
|
}
|
|
.name {
|
|
font-size: 16px;
|
|
}
|
|
.phone {
|
|
margin-top: 9px;
|
|
}
|
|
.details {
|
|
color: #999;
|
|
margin-top: 4px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.isShow {
|
|
width: 100%;
|
|
height: 46px;
|
|
line-height: 46px;
|
|
text-align: center;
|
|
color: #707070;
|
|
cursor: pointer;
|
|
.iconfont {
|
|
margin-left: 8px;
|
|
font-size: 12px;
|
|
}
|
|
}
|
|
.wrapper {
|
|
background-color: #fff;
|
|
padding-bottom: 56px;
|
|
.title {
|
|
height: 64px;
|
|
line-height: 64px;
|
|
padding: 0 28px;
|
|
font-size: 18px;
|
|
}
|
|
.order {
|
|
width: 1160px;
|
|
margin: 0 auto;
|
|
border: 1px solid #efefef;
|
|
padding: 26px 32px;
|
|
.list {
|
|
.item {
|
|
margin-bottom: 26px;
|
|
.txtPic {
|
|
.pictrue {
|
|
width: 62px;
|
|
height: 62px;
|
|
img {
|
|
width: 100%;
|
|
height: 100%;
|
|
}
|
|
}
|
|
.text {
|
|
width: 342px;
|
|
margin-left: 10px;
|
|
.name {
|
|
width: 100%;
|
|
height: 38px;
|
|
}
|
|
.info {
|
|
margin-top: 4px;
|
|
color: #919191;
|
|
}
|
|
}
|
|
}
|
|
.font-color {
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
display: inline-block;
|
|
width: 130px;
|
|
text-align: right;
|
|
}
|
|
.money {
|
|
font-size: 16px;
|
|
}
|
|
.num {
|
|
margin-left: 6px;
|
|
}
|
|
}
|
|
}
|
|
.coupon {
|
|
border-top: 1px solid #efefef;
|
|
.couponTitle {
|
|
font-size: 18px;
|
|
margin: 20px 0;
|
|
.couponPrice {
|
|
font-size: 16px;
|
|
font-weight: bold;
|
|
}
|
|
.couponPriceNo {
|
|
font-size: 14px;
|
|
}
|
|
}
|
|
.couponList {
|
|
.item {
|
|
height: 40px;
|
|
width: 176px;
|
|
border: 1px solid #e93323;
|
|
margin: 0 15px 15px 0;
|
|
position: relative;
|
|
cursor: pointer;
|
|
&.grey {
|
|
border-color: #b4b4b4;
|
|
}
|
|
.iconfont {
|
|
position: absolute;
|
|
right: -2px;
|
|
bottom: -4px;
|
|
font-size: 20px;
|
|
}
|
|
.name {
|
|
width: 70px;
|
|
height: 100%;
|
|
color: #fff;
|
|
text-align: center;
|
|
line-height: 40px;
|
|
background-color: #e93323;
|
|
&.grey {
|
|
background-color: #b4b4b4;
|
|
}
|
|
}
|
|
.money {
|
|
width: 103px;
|
|
text-align: center;
|
|
color: #e93323;
|
|
&.grey {
|
|
color: #b4b4b4;
|
|
}
|
|
}
|
|
&.svip {
|
|
border-color: #333;
|
|
.name {
|
|
background-color: #333;
|
|
color: #fdd7b4;
|
|
}
|
|
.money {
|
|
color: #333;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.integralCurrent {
|
|
margin-left: 33px;
|
|
.num {
|
|
margin-left: 6px;
|
|
}
|
|
}
|
|
.msgTitle {
|
|
font-size: 18px;
|
|
width: 123px;
|
|
text-align: left;
|
|
position: relative;
|
|
word-wrap: break-word;
|
|
.asterisk {
|
|
position: absolute;
|
|
left: -13px;
|
|
top: 2px;
|
|
color: red;
|
|
}
|
|
}
|
|
}
|
|
.message {
|
|
padding-top: 26px;
|
|
margin-top: 26px;
|
|
.number {
|
|
/deep/.el-input__inner {
|
|
line-height: unset !important;
|
|
}
|
|
}
|
|
.confirm {
|
|
margin-left: 26px;
|
|
width: 300px;
|
|
}
|
|
.upload {
|
|
margin-left: 26px;
|
|
width: 800px;
|
|
}
|
|
.textarea {
|
|
width: 820px;
|
|
height: 120px;
|
|
background-color: #f7f7f7;
|
|
border: 0;
|
|
outline: none;
|
|
resize: none;
|
|
padding: 12px 14px;
|
|
margin-left: 26px;
|
|
}
|
|
}
|
|
.integral {
|
|
padding: 26px 0;
|
|
}
|
|
}
|
|
.totalCon {
|
|
padding: 27px 46px;
|
|
.total {
|
|
& ~ .total {
|
|
margin-top: 12px;
|
|
}
|
|
.money {
|
|
width: 120px;
|
|
text-align: right;
|
|
font-size: 16px;
|
|
}
|
|
}
|
|
}
|
|
.totalAmount {
|
|
width: 1160px;
|
|
height: 70px;
|
|
line-height: 70px;
|
|
background: #f7f7f7;
|
|
text-align: right;
|
|
padding-right: 22px;
|
|
margin: 0 auto;
|
|
.money {
|
|
font-size: 20px;
|
|
font-weight: bold;
|
|
margin-left: 4px;
|
|
width: 120px;
|
|
display: inline-block;
|
|
}
|
|
}
|
|
.bnt {
|
|
margin: 38px 20px 0 0;
|
|
cursor: pointer;
|
|
.submit {
|
|
width: 180px;
|
|
height: 46px;
|
|
border-radius: 4px;
|
|
font-size: 16px;
|
|
color: #fff;
|
|
text-align: center;
|
|
line-height: 46px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|