spring-cloud/mobile-web/src/page/shipping/order.vue

339 lines
8.8 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="order">
<headerNav title="确认订单"/>
<van-cell
center
:border="false"
class="contact-card"
is-link
to="/user/address?id=2"
>
<template v-if="type === 'add'">
<strong>选择地址</strong>
</template>
<template v-else>
<strong>{{addressData.name}} {{addressData.mobile}}</strong>
<div>{{addressData.address}}</div>
</template>
</van-cell>
<div style="height:15px;"></div>
<!-- <div class="card" v-for="(product,i) in products" :key="i">-->
<!-- <product-card :product='product'/>-->
<!-- </div>-->
<div v-for="(itemGroup, i) in itemGroups" >
<div class="card" v-for="(item, j) in itemGroup.items" :key="j">
<product-card :product='convertProduct(item)'/>
</div>
<div style="height:15px;"></div>
</div>
<div style="height:15px;"></div>
<van-cell-group>
<van-field
label="留言"
type="textarea"
placeholder="请输入留言"
rows="1"
autosize
/>
</van-cell-group>
<div style="height:15px;"></div>
<!-- 优惠券单元格 -->
<van-coupon-cell
:coupons="coupons"
:chosen-coupon="chosenCoupon"
@click="showCouponPopup = true"
/>
<!-- 优惠券列表 -->
<van-popup v-model="showCouponPopup" position="bottom">
<van-coupon-list
:coupons="coupons"
:chosen-coupon="chosenCoupon"
:disabled-coupons="disabledCoupons"
@change="onCouponChange"
@exchange="onCouponExchange"
/>
</van-popup>
<div style="height:15px;"></div>
<van-cell-group class="total">
<van-cell title="商品总额" :value="fee.buyTotal / 100.0"/>
<van-cell title="运费" :value="+ fee.postageTotal / 100.0"/>
<van-cell title="折扣" :value="- fee.discountTotal / 100.0"/>
<van-cell title="实付金额" :value="fee.presentTotal / 100.0" style="font-weight: 700;"/>
</van-cell-group>
<div style="height:50px;"></div>
<van-submit-bar
:price="fee.presentTotal"
button-text="提交订单"
label='实付金额:'
@submit="onSubmit"
/>
</div>
</template>
<script>
import {
createOrder,
getOrderConfirmCreateOrder,
getCartConfirmCreateOrder,
createOrderFromCart
} from '../../api/order';
import {GetDefaultAddress} from '../../api/user';
import orderStore from '../../store/order';
import { Dialog } from 'vant';
export default {
data() {
return {
from: 'direct_order', // 目前有两个来源。direct_order直接下单; card: 购物车下单。
// 如下两个参数,在直接下单时使用
skuId: this.$route.query.skuId,
quantity: this.$route.query.quantity,
type: "add",
addressData: {
},
// 商品 + 促销相关
itemGroups: [],
fee: {
originalTotal: undefined,
discountTotal: undefined,
postageTotal: undefined,
presentTotal: undefined,
},
// products: [], // 应该没用了
// 优惠劵相关
showCouponPopup: false,
coupons: [],
disabledCoupons: [],
chosenCoupon: -1,
};
},
methods: {
onCouponChange(index) {
this.chosenCoupon = index;
this.showCouponPopup = false;
},
onCouponExchange(a, b, c) {
Dialog.alert({
title: '系统提示',
message: '暂未开发', // TODO 芋艿
});
},
onSubmit() {
const userAddressId = this.addressData.id;
if (!userAddressId) {
Dialog.alert({
title: '系统提示',
message: '请选择收获地址',
});
return;
}
const remark = '';
if (this.from === 'direct_order') {
const { skuId, quantity } = this.$route.query;
const orderItems = [{
skuId,
quantity,
}];
createOrder({
orderItems,
userAddressId,
remark,
}).then(result => {
if (result) {
// const { orderNo } = result;
this.$router.push({ //核心语句
path:`/order/success`, //跳转的路径
query:{ //路由传参时push和query搭配使用 ,作用时传递参数
...result,
}
});
}
});
} else if (this.from === 'cart') {
createOrderFromCart(userAddressId, remark).then(result => {
if (result) {
// const { orderNo } = result;
this.$router.push({ //核心语句
path:`/order/success`, //跳转的路径
query:{ //路由传参时push和query搭配使用 ,作用时传递参数
...result,
}
});
}
});
}
},
convertProduct(item) {
return {
...item.spu,
quantity: item.buyQuantity,
price: item.buyPrice || item.price,
sku: {
...item,
spu: undefined,
}
};
},
convertCouponList(cards) {
let newCards = [];
for (let i in cards) {
let card = cards[i];
newCards.push({
id: card.id,
name: card.title,
condition: '满 ' + card.priceAvailable / 100.0 + ' 元可用',
startAt: card.validStartTime / 1000,
endAt: card.validEndTime / 1000,
// description: '述信息,优惠券可用时展示',
reason: card.unavailableReason,
value: 0, // TODO ,需要服务端算
valueDesc: card.preferentialType === 1 ? card.priceOff / 100 : card.percentOff / 10.0,
unitDesc: card.preferentialType === 1 ? '元' : '折'
})
}
return newCards;
}
},
mounted: function() {
if (this.$store.state.addressData.name) {
this.type = 'add1';
} else {
this.type = 'add';
}
this.addressData = this.$store.state.addressData;
// 加载商品信息
// debugger;
if (this.from === 'direct_order') {
getOrderConfirmCreateOrder(this.skuId, this.quantity).then(data => {
this.itemGroups = data.itemGroups;
this.fee = data.fee;
// 获得优惠劵列表
})
} else if (this.from === 'cart') {
getCartConfirmCreateOrder().then(data => {
this.itemGroups = data.itemGroups;
this.fee = data.fee;
// 获得优惠劵列表
this.coupons = this.convertCouponList(data.couponCards.filter(function (element) {
return element.available;
}));
this.disabledCoupons = this.convertCouponList(data.couponCards.filter(function (element) {
return !element.available;
}));
})
}
},
created() {
// 加载地址
GetDefaultAddress().then((result) => {
if (!this.addressData.name && result) {
this.type = 'add1';
this.addressData = result;
}
})
// 处理来源
if (this.$route.query.from === 'cart') {
this.from = this.$route.query.from;
}
},
store: orderStore,
};
</script>
<style lang="less">
.order {
font-size: 14px;
background: #f7f7f7;
.contact-card::before {
content: "";
left: 0;
right: 0;
bottom: 0;
height: 2px;
position: absolute;
background: -webkit-repeating-linear-gradient(
135deg,
#ff6c6c 0,
#ff6c6c 20%,
transparent 0,
transparent 25%,
#3283fa 0,
#3283fa 45%,
transparent 0,
transparent 50%
);
background: repeating-linear-gradient(
-45deg,
#ff6c6c 0,
#ff6c6c 20%,
transparent 0,
transparent 25%,
#3283fa 0,
#3283fa 45%,
transparent 0,
transparent 50%
);
background-size: 80px;
}
.total {
.van-cell__value {
color: red;
}
}
.van-submit-bar__bar {
border-top: 1px solid #f7f7f7;
}
.additional {
.van-cell {
padding: 0 15px;
font-size: 12px;
}
.van-cell__title {
flex: 11;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.van-tag {
line-height: 12px;
margin-right: 5px;
}
.price {
color: #e93b3d;
font-size: 10px;
span {
font-size: 16px;
}
}
}
}
</style>