529 lines
11 KiB
Vue
529 lines
11 KiB
Vue
|
<template>
|
||
|
<view class="container">
|
||
|
<view v-if="!isWeixin" class="v-navbar">
|
||
|
<u-navbar title="提货付款" :safeAreaInsetTop="false" :fixed="false" @leftClick="leftClick" bgColor="transparent"
|
||
|
leftIconColor="#333" :titleStyle="{color:'#333',fontWeight:'bold',fontSize:'32rpx'}">
|
||
|
</u-navbar>
|
||
|
</view>
|
||
|
<view style="height: 50rpx;"></view>
|
||
|
<view class="wrap">
|
||
|
<view class="shop">
|
||
|
<image src="@/static/shop_logo.webp" style="width: 62rpx;height: 54rpx;" />
|
||
|
<text class="shop-name" v-if="mer_name">{{mer_name||''}}</text>
|
||
|
</view>
|
||
|
|
||
|
<!-- 付款金额 -->
|
||
|
<view class="v-con">
|
||
|
<view class="v-con-text">订单金额</view>
|
||
|
<view class="v-con-input" @click="handleOpenKeyboard">
|
||
|
<text style="color: #303133;font-size:32rpx;">¥</text>
|
||
|
<u--input type="text" fontSize="23" height="112rpx" placeholder="请输入金额" border="none" readonly
|
||
|
v-model="cartForm.total_amount" placeholderStyle="color:#999;font-size:32rpx">
|
||
|
</u--input>
|
||
|
<view class="placeholder"></view>
|
||
|
</view>
|
||
|
|
||
|
<view class="v-con-group">
|
||
|
<view class="v-con-group-title">
|
||
|
<view class="v-con-group-title-left">套餐详情</view>
|
||
|
<view class="v-con-group-title-right" @click.stop="handleOpen">
|
||
|
<text>{{isOpen?'折叠':'展开'}}</text>
|
||
|
<u-icon :name="isOpen?'arrow-down' : 'arrow-right'" size="15"></u-icon>
|
||
|
</view>
|
||
|
</view>
|
||
|
<scroll-view scroll-y>
|
||
|
<view class="v-con-group-list" :style="{'max-height':isOpen?'400rpx':'0'}">
|
||
|
<block v-for="(item,indx) in merchantInfo" :key="indx">
|
||
|
<view class="v-con-group-list-item">
|
||
|
<image :src="item.image" :showLoading="true" style="width:86rpx;height:86rpx;" />
|
||
|
<text class="line1">{{item.store_name}}</text>
|
||
|
</view>
|
||
|
</block>
|
||
|
</view>
|
||
|
</scroll-view>
|
||
|
</view>
|
||
|
</view>
|
||
|
|
||
|
<view class="v-btn-wrap" @click="cartForm.total_amount?submitOrder():null">
|
||
|
<view class="v-btn">{{Number(cartForm.total_amount||0).toFixed(2)}}元 确认支付</view>
|
||
|
</view>
|
||
|
|
||
|
<!-- 登陆 -->
|
||
|
<authorize :isAuto="isAuto" :isShowAuth="isShowAuth" @authColse="authColse" @onLoadFun="onLoadFun" />
|
||
|
</view>
|
||
|
|
||
|
<!-- 无商户信息提示 -->
|
||
|
<!-- <view class="empty">
|
||
|
<authorize v-show="!isWeixin" ref="authRef" :isAuto="isAuto" :isGoIndex="false" :isShowAuth="isShowAuth"
|
||
|
@authColse="authColse" @onLoadFun="onLoadFun">
|
||
|
</authorize>
|
||
|
</view> -->
|
||
|
|
||
|
<!-- 键盘 -->
|
||
|
<popups ref="popups" @confirm="handleConfirm" @clear="handleClear" @change="handleChange"></popups>
|
||
|
</view>
|
||
|
</template>
|
||
|
<script>
|
||
|
var that;
|
||
|
|
||
|
import {
|
||
|
getProductInfo1,
|
||
|
addCart,
|
||
|
orderCheck
|
||
|
} from "@/api/payment.js";
|
||
|
import Cache from '@/utils/cache';
|
||
|
import {
|
||
|
mapGetters
|
||
|
} from "vuex";
|
||
|
import authorize from '@/components/Authorize';
|
||
|
import {
|
||
|
Toast
|
||
|
} from "../../libs/uniApi";
|
||
|
import popups from "@/components/popups/index.vue";
|
||
|
export default {
|
||
|
components: {
|
||
|
authorize,
|
||
|
popups
|
||
|
},
|
||
|
computed: {
|
||
|
...mapGetters(['isLogin']),
|
||
|
},
|
||
|
data() {
|
||
|
return {
|
||
|
isEmpty: true,
|
||
|
// isWeixin: this.$wechat.isWeixin(),
|
||
|
isWeixin: false,
|
||
|
cartForm: {
|
||
|
product_id: '',
|
||
|
product_attr_unique: '',
|
||
|
cart_num: 1,
|
||
|
is_new: 1,
|
||
|
product_type: 0,
|
||
|
source: 999,
|
||
|
total_amount: ''
|
||
|
},
|
||
|
merchantInfo: '',
|
||
|
checkForm: {
|
||
|
address_id: '',
|
||
|
cart_id: [],
|
||
|
consumption_id: '',
|
||
|
product_type: 0,
|
||
|
source: 999,
|
||
|
takes: [],
|
||
|
use_coupon: {},
|
||
|
use_integral: false
|
||
|
},
|
||
|
isAuto: false, //没有授权的不会自动授权
|
||
|
isShowAuth: false, //是否隐藏授权
|
||
|
mer_id: '',
|
||
|
changeTxt: '展开',
|
||
|
isOpen: false,
|
||
|
keyBoardShow: false,
|
||
|
mer_name: ''
|
||
|
}
|
||
|
},
|
||
|
|
||
|
onLoad(opt) {
|
||
|
that = this;
|
||
|
this.mer_id = opt.mer_id;
|
||
|
},
|
||
|
|
||
|
onShow() {
|
||
|
if (!this.isLogin) {
|
||
|
Cache.set("login_back_url_weixin", "/" + getCurrentPages()[0].route + "?mer_id=" + this.mer_id);
|
||
|
this.isAuto = true;
|
||
|
this.isShowAuth = true;
|
||
|
if (this.isWeixin) {
|
||
|
this.$nextTick(() => {
|
||
|
this.$refs.authRef.toWecahtAuth();
|
||
|
})
|
||
|
}
|
||
|
} else {
|
||
|
this.checkForm.cart_id = [];
|
||
|
this.getProductInfoByMerid();
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
// 打开键盘
|
||
|
handleOpenKeyboard() {
|
||
|
if (!this.isLogin) {
|
||
|
Cache.set("login_back_url_weixin", "/" + getCurrentPages()[0].route + "?mer_id=" + this.mer_id);
|
||
|
this.isAuto = true;
|
||
|
this.isShowAuth = true;
|
||
|
if (this.isWeixin) {
|
||
|
this.$nextTick(() => {
|
||
|
this.$refs.authRef.toWecahtAuth();
|
||
|
})
|
||
|
}
|
||
|
} else {
|
||
|
this.$refs.popups.handleOpen('money');
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// 键盘提交
|
||
|
handleConfirm(e) {
|
||
|
if (!e) return;
|
||
|
this.cartForm.total_amount = e;
|
||
|
this.submitOrder();
|
||
|
},
|
||
|
|
||
|
// 清空
|
||
|
handleClear() {
|
||
|
this.cartForm.total_amount = '';
|
||
|
this.merchantInfo = [];
|
||
|
},
|
||
|
|
||
|
// 输入数字
|
||
|
handleChange(e) {
|
||
|
this.cartForm.total_amount = e;
|
||
|
uni.$u.debounce(that.getProductInfoByMerid, 200)
|
||
|
},
|
||
|
|
||
|
leftClick(e) {
|
||
|
uni.switchTab({
|
||
|
url: '/pages/index/index'
|
||
|
})
|
||
|
},
|
||
|
|
||
|
// 授权关闭
|
||
|
authColse: function(e) {
|
||
|
this.isShowAuth = e;
|
||
|
},
|
||
|
|
||
|
onLoadFun() {
|
||
|
this.getProductInfoByMerid(this.mer_id);
|
||
|
this.isShowAuth = false;
|
||
|
},
|
||
|
|
||
|
// 提交订单
|
||
|
async submitOrder() {
|
||
|
if (!this.cartForm.total_amount) {
|
||
|
return this.$util.Tips({
|
||
|
title: "请输入付款金额!"
|
||
|
})
|
||
|
}
|
||
|
|
||
|
// 循环加入购物车
|
||
|
for (var i = 0; i < that.merchantInfo.length; i++) {
|
||
|
let info = {
|
||
|
product_id: that.merchantInfo[i].product_id,
|
||
|
product_attr_unique: that.merchantInfo[i].unique,
|
||
|
cart_num: that.merchantInfo[i].num,
|
||
|
is_new: 1,
|
||
|
product_type: 0,
|
||
|
source: 999,
|
||
|
total_amount: that.cartForm.total_amount
|
||
|
};
|
||
|
|
||
|
try {
|
||
|
let res = await addCart(info);
|
||
|
that.checkForm.cart_id.push(res.data.cart_id);
|
||
|
} catch (e) {
|
||
|
return that.$util.Tips({
|
||
|
title: err.message || err.msg || err
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (that.checkForm.cart_id && that.checkForm.cart_id.length > 0) {
|
||
|
orderCheck(that.checkForm).then(res1 => {
|
||
|
uni.navigateTo({
|
||
|
url: "/pages/payment/settlement",
|
||
|
success: (res) => {
|
||
|
uni.setStorageSync('datas', {
|
||
|
platformConsumption: res1.data.platformConsumption ||
|
||
|
[],
|
||
|
productData: that.merchantInfo,
|
||
|
checkForm: that.checkForm,
|
||
|
money: that.cartForm.total_amount,
|
||
|
merName: that.mer_name,
|
||
|
money: that.cartForm.total_amount,
|
||
|
key: res1.data.key
|
||
|
})
|
||
|
},
|
||
|
fail(err) {
|
||
|
console.log(err)
|
||
|
}
|
||
|
})
|
||
|
}).catch(err => {
|
||
|
Toast(err.message || err)
|
||
|
});
|
||
|
}
|
||
|
},
|
||
|
|
||
|
// 折叠商品
|
||
|
handleOpen() {
|
||
|
this.isOpen = !this.isOpen;
|
||
|
},
|
||
|
|
||
|
// 根据店铺获取商品
|
||
|
getProductInfoByMerid(merid, money) {
|
||
|
getProductInfo1({
|
||
|
mer_id: that.mer_id,
|
||
|
money: that.cartForm.total_amount
|
||
|
}).then(res => {
|
||
|
if (!that.cartForm.total_amount) {
|
||
|
this.mer_name = res.data.merchant;
|
||
|
} else {
|
||
|
that.merchantInfo = res.data.list;
|
||
|
}
|
||
|
}).catch((err) => {
|
||
|
that.$util.Tips({
|
||
|
title: err.message || err.msg || err
|
||
|
}, () => {
|
||
|
|
||
|
})
|
||
|
// #ifdef APP
|
||
|
setTimeout(() => {
|
||
|
uni.navigateBack({
|
||
|
delta: 1
|
||
|
})
|
||
|
}, 1500)
|
||
|
// #endif
|
||
|
|
||
|
// #ifndef APP
|
||
|
that.isEmpty = true;
|
||
|
// #endif
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style lang="scss">
|
||
|
page {
|
||
|
background-color: #F9F9F9;
|
||
|
}
|
||
|
|
||
|
.empty {
|
||
|
margin: 0;
|
||
|
text-align: center;
|
||
|
|
||
|
image,
|
||
|
uni-image {
|
||
|
display: inline-block;
|
||
|
width: 414rpx;
|
||
|
height: 305rpx;
|
||
|
}
|
||
|
|
||
|
text {
|
||
|
display: block;
|
||
|
color: #666;
|
||
|
font-size: 26rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.container {
|
||
|
position: relative;
|
||
|
height: 100vh;
|
||
|
// background-image: url("https://lihai001.oss-cn-chengdu.aliyuncs.com/def/c582c202402291601584806.webp");
|
||
|
background-size: 100% auto;
|
||
|
background-repeat: no-repeat;
|
||
|
padding-top: var(--status-bar-height);
|
||
|
|
||
|
.v-desc {
|
||
|
position: absolute;
|
||
|
top: 196rpx;
|
||
|
z-index: 10;
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
align-items: center;
|
||
|
width: 100%;
|
||
|
padding: 0 20rpx;
|
||
|
background: transparent;
|
||
|
|
||
|
.v-desc-main {
|
||
|
margin-bottom: 30rpx;
|
||
|
font-weight: 600;
|
||
|
font-size: 42rpx;
|
||
|
color: #FFFFFF;
|
||
|
}
|
||
|
|
||
|
.v-desc-sub {
|
||
|
font-weight: 500;
|
||
|
font-size: 24rpx;
|
||
|
color: #FFFFFF;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.wrap {
|
||
|
margin: 0 52rpx 0 54rpx;
|
||
|
}
|
||
|
|
||
|
.shop {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
margin-bottom: 54rpx;
|
||
|
|
||
|
text {
|
||
|
margin-left: 32rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.v-con {
|
||
|
margin: 0 auto 150rpx;
|
||
|
|
||
|
.v-con-text {
|
||
|
font-weight: 400;
|
||
|
font-size: 30rpx;
|
||
|
color: #000000;
|
||
|
}
|
||
|
|
||
|
.v-con-input {
|
||
|
position: relative;
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
height: 112rpx;
|
||
|
margin-bottom: 32rpx;
|
||
|
border-bottom: 1rpx solid #D6D6D6;
|
||
|
|
||
|
/deep/.uni-input-input {
|
||
|
height: 112rpx;
|
||
|
font-weight: bold;
|
||
|
font-size: 72rpx;
|
||
|
}
|
||
|
|
||
|
text {
|
||
|
font-weight: 400;
|
||
|
font-size: 32rpx;
|
||
|
color: #000000;
|
||
|
}
|
||
|
|
||
|
.placeholder {
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
left: 0;
|
||
|
width: 100%;
|
||
|
height: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.v-wrap {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
padding-left: 20rpx;
|
||
|
width: 666rpx;
|
||
|
height: 210rpx;
|
||
|
|
||
|
.v-wrap-money {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
color: #FF5E0C;
|
||
|
margin-right: 30rpx;
|
||
|
|
||
|
.icon {
|
||
|
font-size: 34rpx;
|
||
|
}
|
||
|
|
||
|
.num {
|
||
|
font-size: 46rpx;
|
||
|
display: inline-block;
|
||
|
overflow: auto;
|
||
|
width: 180rpx;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.v-wrap-desc {
|
||
|
.v-wrap-desc-main {
|
||
|
margin-bottom: 16rpx;
|
||
|
font-weight: 600;
|
||
|
font-size: 32rpx;
|
||
|
color: #2E2E2E;
|
||
|
}
|
||
|
|
||
|
.v-wrap-desc-sub {
|
||
|
font-weight: 400;
|
||
|
font-size: 24rpx;
|
||
|
color: #2E2E2E;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
.v-con-group {
|
||
|
.v-con-group-title {
|
||
|
display: flex;
|
||
|
justify-content: space-between;
|
||
|
align-items: center;
|
||
|
margin-bottom: 32rpx;
|
||
|
|
||
|
.v-con-group-title-left {
|
||
|
font-weight: 400;
|
||
|
font-size: 30rpx;
|
||
|
color: #000000;
|
||
|
}
|
||
|
|
||
|
.v-con-group-title-right {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
|
||
|
text {
|
||
|
margin-right: 18rpx;
|
||
|
font-weight: 400;
|
||
|
font-size: 30rpx;
|
||
|
color: #000000;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.v-con-group-list {
|
||
|
transition: max-height linear .1s;
|
||
|
|
||
|
.v-con-group-list-item {
|
||
|
display: flex;
|
||
|
align-items: center;
|
||
|
margin-bottom: 14rpx;
|
||
|
|
||
|
text {
|
||
|
margin-left: 30rpx;
|
||
|
font-size: 26rpx;
|
||
|
color: #333333;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.v-btn-wrap {
|
||
|
|
||
|
width: 100%;
|
||
|
height: 90rpx;
|
||
|
line-height: 90rpx;
|
||
|
background: #40AE36;
|
||
|
border-radius: 10rpx;
|
||
|
font-weight: 400;
|
||
|
font-size: 32rpx;
|
||
|
color: #FFFFFF;
|
||
|
text-align: center;
|
||
|
|
||
|
// position: fixed;
|
||
|
// z-index: 11;
|
||
|
// bottom: 0;
|
||
|
// left: 0;
|
||
|
// display: flex;
|
||
|
// justify-content: center;
|
||
|
// align-items: center;
|
||
|
// width: 100%;
|
||
|
// height: 240rpx;
|
||
|
// background-color: #FDD6A6;
|
||
|
|
||
|
// .v-btn {
|
||
|
// width: 650rpx;
|
||
|
// height: 100rpx;
|
||
|
// line-height: 100rpx;
|
||
|
// background: #FF8056;
|
||
|
// box-shadow: 0rpx 3rpx 3rpx 1rpx rgba(255, 94, 12, 0.4);
|
||
|
// border-radius: 55rpx 55rpx 55rpx 55rpx;
|
||
|
// border: 1rpx solid #FF8056;
|
||
|
// font-weight: 600;
|
||
|
// font-size: 32rpx;
|
||
|
// color: #FFFFFF;
|
||
|
// text-align: center;
|
||
|
|
||
|
// &:active {
|
||
|
// opacity: .8;
|
||
|
// }
|
||
|
// }
|
||
|
}
|
||
|
}
|
||
|
</style>
|