239 lines
8.4 KiB
Vue
239 lines
8.4 KiB
Vue
<template>
|
|
<view class="container">
|
|
<view class="address">
|
|
<view class="border">
|
|
<image src="http://192.168.0.172:5500/7.15/shop_border.png" mode="widthFix"></image>
|
|
</view>
|
|
<view class="address_Info" @click="choseAddress" v-if="defAddress">
|
|
<view class="address_Info_left">
|
|
<view class="address_Info_left_tit">收货地址</view>
|
|
<view class="address_Info_left_name">{{ defAddress.name }} {{ defAddress.phone }}</view>
|
|
<view class="address_Info_left_addr">{{ defAddress.address }}{{ defAddress.house_number }}</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="address_Info" @click="addAddress" v-if="!defAddress">
|
|
<view class="address_Info_left noneDef">
|
|
<view class="address_Info_btn">添加收货地址</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="border">
|
|
<image src="http://192.168.0.172:5500/7.15/shop_border.png" mode="widthFix"></image>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="goodsCate" v-for="items, indexs in carList" :key="indexs">
|
|
<view class="goodsItem">
|
|
<view class="goodsItem_msg_img">
|
|
<view class="tag tag-img" v-if="items.commodity_goods_info.is_same_day">当日达</view>
|
|
<image :src="picUrl + items.commodity_goods_info.commodity_pic">
|
|
</image>
|
|
</view>
|
|
<view class="goodsItem_msg_right">
|
|
<view class="goodsItem_msg_right_tit" style="display: flex"><view class="tag" style="margin-right: 10rpx" v-if="items.commodity_goods_info.is_same_day">当日达</view><view>{{ items.commodity_goods_info.goods_name }}</view></view>
|
|
<view class="goodsItem_msg_right_subTit">{{ items.commodity_goods_info.goods_intro }}</view>
|
|
<view class="goodsItem_msg_right_msg">
|
|
<view class="goodsItem_msg_right_msg_left">
|
|
<span>¥</span>{{ items.commodity_goods_info.sales_price }}
|
|
<span>/{{ items.commodity_goods_info.goods_unit }}</span>
|
|
</view>
|
|
<view class="goodsItem_msg_right_msg_right">
|
|
<u-number-box v-model="value">
|
|
<view slot="minus" class="minus" @click="minus(items, indexs)">
|
|
<u-icon name="minus" size="32" bold></u-icon>
|
|
</view>
|
|
<text slot="input" style="width: 80rpx;text-align: center;" class="input">
|
|
{{ items.count }}
|
|
</text>
|
|
<view slot="plus" class="plus" @click="add(items, indexs)">
|
|
<u-icon name="plus" color="#FFFFFF" size="32" bold></u-icon>
|
|
</view>
|
|
</u-number-box>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="yf">
|
|
<span>运费</span>¥9.9
|
|
</view>
|
|
<view class="line"></view>
|
|
</view>
|
|
|
|
|
|
<view class="footer">
|
|
<view class="btn">立即支付¥{{ totalMony }}</view>
|
|
</view>
|
|
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import {
|
|
apiArr
|
|
} from '../../../api/shop';
|
|
import {
|
|
picUrl,
|
|
menuButtonInfo,
|
|
request,
|
|
NavgateTo
|
|
} from '../../../utils';
|
|
export default {
|
|
data() {
|
|
return {
|
|
picUrl,
|
|
top: "",
|
|
localHeight: "",
|
|
value: 3,
|
|
type: "error",
|
|
carList: [],
|
|
totalMony: 0,
|
|
defAddress: {},
|
|
|
|
order_id: ""
|
|
}
|
|
},
|
|
methods: {
|
|
choseAddress() {
|
|
NavgateTo('../address/index')
|
|
},
|
|
addAddress() {
|
|
NavgateTo('../addAddress/index')
|
|
},
|
|
calcTotal() {
|
|
let total = 0
|
|
this.carList.forEach(item => {
|
|
total += item.commodity_goods_info.sales_price * item.count
|
|
})
|
|
this.totalMony = total
|
|
},
|
|
|
|
minus(item, index) {
|
|
let that = this
|
|
if (item.count === 1) {
|
|
request(apiArr.deleteCar, "POST", {
|
|
ids: [item.id]
|
|
}).then(res => {
|
|
that.carList.splice(index, 1)
|
|
that.calcTotal()
|
|
})
|
|
}
|
|
this.carList[index].count = this.carList[index].count - 1
|
|
this.calcTotal()
|
|
},
|
|
add(item, index) {
|
|
this.carList[index].count = this.carList[index].count + 1
|
|
this.calcTotal()
|
|
},
|
|
//用户收货地址
|
|
getUserAddress() {
|
|
request(apiArr.getUserDefAddress, "POST", {}).then(res => {
|
|
this.defAddress = res.default_address
|
|
})
|
|
},
|
|
|
|
craeteOrder() {
|
|
uni.showLoading({
|
|
title: '加载中',
|
|
})
|
|
|
|
let goods_list = []
|
|
this.carList.forEach(item => {
|
|
goods_list.push({
|
|
goods_id: item.commodity_goods_info.id,
|
|
count: item.count,
|
|
})
|
|
})
|
|
|
|
request(apiArr.createOrder, "POST", {
|
|
goods_list,
|
|
address_id: this.defAddress.id
|
|
}).then(res => {
|
|
uni.hideLoading()
|
|
this.order_id = res.order_id
|
|
this.payOrder()
|
|
}).catch(err => {
|
|
uni.hideLoading()
|
|
})
|
|
},
|
|
payOrder() {
|
|
request(apiArr.payOrder, "POST", {
|
|
order_id: this.order_id
|
|
}).then(res => {
|
|
let that = this; // 保存组件实例的 this 引用
|
|
let resCopy = JSON.parse(JSON.stringify(res))
|
|
this.WxPay(resCopy)
|
|
|
|
|
|
})
|
|
},
|
|
WxPay(resCopy) {
|
|
let that = this
|
|
uni.requestPayment({
|
|
"provider": "wxpay",
|
|
"orderInfo": {
|
|
"appid": "wx1addb25675dd8e70", //
|
|
"noncestr": resCopy.nonceStr, // 随机字符串
|
|
"package": resCopy.package, // 固定值
|
|
"prepayid":resCopy.prepayId,
|
|
"timestamp": resCopy.timeStamp, // 时间戳(单位:秒)
|
|
"paysign": resCopy.paySign,
|
|
"partnerid":resCopy.partnerId
|
|
},
|
|
timeStamp: resCopy.timeStamp,
|
|
nonceStr: resCopy.nonceStr,
|
|
package: resCopy.package,
|
|
signType: resCopy.signType,
|
|
paySign: resCopy.paySign,
|
|
success(res) {
|
|
console.log(res);
|
|
},
|
|
fail(e) {
|
|
console.log(e.errMsg);
|
|
}
|
|
})
|
|
// uni.requestPayment({
|
|
// provider: 'wxpay',
|
|
// timeStamp: resCopy.timeStamp,
|
|
// nonceStr: resCopy.nonceStr,
|
|
// package: resCopy.package,
|
|
// signType: resCopy.signType,
|
|
// paySign: resCopy.paySign,
|
|
// success: function (res) {
|
|
// console.log('success:' + JSON.stringify(res));
|
|
// that.queryOrder()
|
|
// },
|
|
// fail: function (err) {
|
|
// console.log('fail:' + JSON.stringify(err));
|
|
// }
|
|
// })
|
|
},
|
|
queryOrder() {
|
|
request(apiArr.queryOrder, "POST", {
|
|
order_id: this.order_id
|
|
}).then(res => {
|
|
console.log(res);
|
|
})
|
|
},
|
|
|
|
},
|
|
onShow() {
|
|
this.getUserAddress()
|
|
},
|
|
onLoad(options) {
|
|
const meun = menuButtonInfo();
|
|
this.top = meun.top;
|
|
this.localHeight = meun.height;
|
|
console.log(JSON.parse(options.shopCarList));
|
|
this.carList = JSON.parse(options.shopCarList)
|
|
this.calcTotal()
|
|
},
|
|
onReachBottom() {
|
|
|
|
},
|
|
}
|
|
</script>
|
|
|
|
<style>
|
|
@import url("./index.css");
|
|
</style> |