支付頁面 account。vue

<template>
    <div>
        <flexbox orient="vertical" :gutter="0">
            <flexbox-item>
                <div class="flex-demo">
                    <div>
                        <div class="meal_box">
                            <flexbox :gutter="0" class="select_title">
                                <flexbox-item :span="6">
                                    <button @click="selfMeal" class="selfMeal" :class="{selectSelf:addressType==1}" :disabled="self_mention==0">自助取餐</button>
                                </flexbox-item>
                                <flexbox-item :span="6">
                                    <button @click="deliveryMeal" class="deliveryMeal" :class="{selectDelivery:addressType==2}" :disabled="delivery==0">送貨上門</button>
                                </flexbox-item>
                            </flexbox>
                            <flexbox :gutter="0" class="selfDetail" v-if="addressType==1">
                                <flexbox-item :span="1">
                                    <icon name="address" scale="2"></icon>
                                </flexbox-item>
                                <flexbox-item :span="10">
                                    <div>
                                        <p>{{storeName.name}}</p>
                                        <div class="detailAddress">地址:{{storeName.address}}<span class="my_remark">{{storeName.address_detail}}</span></div>
                                    </div>
                                </flexbox-item>
                            </flexbox>

                            <flexbox :gutter="0" class="deliveryDetail" v-if="addressType==2" @click.native="selectAddress">
                                <flexbox-item :span="1">
                                    <icon name="address" scale="2"></icon>
                                </flexbox-item>
                                <flexbox-item :span="10">
                                    <div v-if="addressItem">
                                        <p><span class="my_remark">收貨人:{{addressItem.name}}</span></p>
                                        <p><span class="my_remark">手機號:{{addressItem.phone}}</span></p>
                                        <div class="detailAddress">
                                            <span class="my_remark"> 收貨地址:{{addressItem.address}}{{addressItem.address_detail}} </span>
                                        </div>
                                    </div>
                                    <div v-else="!addressItem"> 請選擇地址 </div>
                                </flexbox-item>
                                <flexbox-item :span="1">
                                    <icon name="rightIcon" scale="3"></icon>
                                </flexbox-item>
                            </flexbox>

                        </div>
                    </div>
                </div>
            </flexbox-item>
            <flexbox-item>
                <scroller lock-x height="-295px">
                    <div class="">
                        <div v-for="list of shopCart.items">
                            <shopcart-item :good=item v-for="item of list"></shopcart-item>
                        </div>
                    </div>
                </scroller>
            </flexbox-item>
            <flexbox-item>
                <div class="choose_box">
                    <div class="my_card" @click="selectWechat">
                        <flexbox :gutter="0">
                            <flexbox-item :span="2" class="card_icon">
                                <p class="middle_icon"><icon name="wechatPay" scale="3"></icon></p>
                            </flexbox-item>
                            <flexbox-item :span="8">
                                <p>微信支付</p>
                            </flexbox-item>
                            <flexbox-item :span="2">
                                <p class="middle_icon" v-if="wechatCircle"><x-icon type="ios-circle-outline" size="26"></x-icon></p>
                                <p class="middle_icon" v-if="wechatCheck"><x-icon type="ios-checkmark-outline" size="26"></x-icon></p>
                            </flexbox-item>
                        </flexbox>
                    </div>
                    <div class="my_card" @click="selectMyCard">
                        <flexbox :gutter="0">
                            <flexbox-item :span="2" class="card_icon">
                                <p class="middle_icon"><icon name="cardPay" scale="3"></icon></p>
                            </flexbox-item>
                            <flexbox-item :span="8">
                                <p>消費卡</p>
                            </flexbox-item>
                            <flexbox-item :span="2">
                                <p class="middle_icon" v-if="cardCircle"><x-icon type="ios-circle-outline" size="26"></x-icon></p>
                                <p class="middle_icon" v-if="cardCheck"><x-icon type="ios-checkmark-outline" size="26"></x-icon></p>
                            </flexbox-item>
                        </flexbox>
                    </div>

                    <div class="blank_box"></div>
                </div>
                <popup v-model="chooseThisCard" position="bottom" max-height="50%">
                    <h4 class="card_title">請選擇卡片</h4>
                    <div v-for="(item,index) in cardInfo" class="card_item" @click="cardSelected(index,item)">
                        <flexbox :gutter="0">
                            <flexbox-item :span="2">
                                <div class="card_one_item">
                                    <icon name="cardPay" scale="3"></icon>
                                </div>
                            </flexbox-item>
                            <flexbox-item :span="8">
                                <p>{{item.name}} <span>({{item.card_code}})</span></p>
                            </flexbox-item>
                            <flexbox-item :span="2">
                                <p class="selected" v-if="showIcon(index)"><x-icon type="ios-checkmark-outline" size="30"></x-icon></p>
                                <p v-if="otherCard(index)"><x-icon type="ios-circle-outline" size="30"></x-icon></p>
                            </flexbox-item>
                        </flexbox>
                    </div>
                </popup>
            </flexbox-item>
            <flexbox-item>
                <div class="flex-demo menu-bottom" >
                    <flexbox :gutter="0" class="bottom_order">
                        <flexbox-item :span="9">
                            <div class="money_box"> 合計:<span class="order_money">¥{{shopCart.totalMoney}}</span>
                            </div>
                        </flexbox-item>
                        <flexbox-item :span="3">
                            <div class="payOrder" @click="payOrder">去支付</div>
                        </flexbox-item>
                    </flexbox>
                </div>
            </flexbox-item>
        </flexbox>
    </div>

</template>

<script> import { mapGetters } from 'vuex' import {Shopcart,ShopcartItem} from "../shopcart" import { Cell, Group,Popup,Flexbox, FlexboxItem, Scroller,XButton,XHeader,Selector} from 'vux' export default { data() { return { wechatCheck:true, wechatCircle:false, cardCheck:false, cardCircle:true, chooseThisCard:false, orderNo:'', addressItem:'', payType:1, } }, computed: { ...mapGetters([ 'shopCart', "storeCardInfo", "storeName", "addressType", "delivery", "self_mention", ]), }, created(){ this.getStorage() this.wechatConfig() this.getDefaultAddress() if(!this.storeCardInfo){ this.getCardInfo() }else{ this.cardInfo=this.storeCardInfo } if(!_global.customerId){ let $this=this setTimeout(()=>{ this.$vux.toast.show({ text: "新用戶請綁定手機號", type:'cancel', onHide(){ $this.$router.push({path:"/binding"}) } },1000) }) } }, methods: { getStorage(){ let cartStorage = JSON.parse(window.sessionStorage.getItem('shopCart')) let storeStorage = JSON.parse(window.sessionStorage.getItem('storeName')) let deliveryStorage = JSON.parse(window.sessionStorage.getItem('delivery')) let selfStorage = JSON.parse(window.sessionStorage.getItem('self_mention')) let addressTypeStorage = JSON.parse(window.sessionStorage.getItem('addressType')) if(cartStorage){ this.$store.commit("saveShopCart",cartStorage) } if(storeStorage){ this.$store.commit("storageStore",storeStorage) } if(deliveryStorage){ this.$store.commit("delivery",deliveryStorage) } if(selfStorage){ this.$store.commit("selfMention",selfStorage) } if(addressTypeStorage){ this.$store.commit("saveAddressType",addressTypeStorage) } }, getDefaultAddress(){ this.$http.get('/shop/api/get-default-address',{ params:{ customerId:_global.customerId } }).then((response) => { if(response.data.status){ this.addressItem=response.data.data } }).catch((error)=>{ this.$vux.toast.show({ text: "網絡異常", type: 'cancel' }) }) }, getCardInfo(){ this.$http.get('/shop/api/get-wx-user-customer',{ params:{ customerId:_global.customerId } }).then((response) => { if(response.data.status){ this.cardInfo=response.data.data; this.$store.commit('saveMyCard',this.cardInfo); }else{ this.$store.commit('saveMyCard',{}); } }).catch((error)=>{ this.$vux.toast.show({ text: "網絡異常", type: 'cancel' }) }) }, selfMeal(){ this.$store.commit('saveAddressType',1); }, deliveryMeal(){ this.$store.commit('saveAddressType',2); }, selectAddress(){ this.$router.push({ name: 'addressList', params: {clickStatus: 1}}) }, /**選擇微信&&消費卡的function */ selectMyCard(){ this.wechatCheck=false; this.wechatCircle=true; this.chooseThisCard=true; }, selectWechat(){ this.wechatCheck=true; this.wechatCircle=false; this.cardCheck=false; this.cardCircle=true; this.payType=1; }, /** 選擇消費卡的function */ cardSelected(index,item){ this.cardIndex=index; this.chooseThisCard=false; this.cardCheck=true; this.cardCircle=false; this.currentItem=item; this.payType=2; }, showIcon(index){ if(index === this.cardIndex){ return true }else { return false; } }, otherCard(index){ if(index === this.cardIndex){ return false }else { return true; } }, /** 下面是跟支付有關的function*/ wechatConfig() { let urls = location.href.split('#')[0] let postData={ url:urls, mallId:_global.mallId } this.$http.post('/shop/api/js-sdk-config', postData).then((response) => { if (response.status === 200 && response.data.status === 1) { this.$wechat.config(JSON.parse(response.data.data)) } else { this.$vux.toast.show({ text: '微信參數錯誤', type: 'cancel' }) } }).catch(() => { this.$vux.toast.show({ text: "網絡異常", type: 'cancel' }) }) }, validate(){ if(this.shopCart.num ==0 ){ return { code : 'error', msg: '您尚未購買商品~'} } if(!this.addressItem&&this.addressType=='2'){ return { code : 'error', msg: '請選擇收貨地址'} } if(!this.storeName&&this.addressType=='1'){ return { code : 'error', msg: '請選擇收貨地址'} } return {code :'success'} }, payOrder(){ let validResult=this.validate() if(validResult.code ==='error'){ this.$vux.toast.show({ text: validResult.msg, type: 'cancel' }) return false } var postAddress if(this.addressType==1){ postAddress=this.storeName }else{ postAddress=this.addressItem } let orderInfo={ shopCart:this.shopCart, address:postAddress.id, mallId:_global.mallId, customerId:_global.customerId, type:this.addressType, } this.$http.post('/shop/api/create-order',orderInfo).then((response) => { if(response.data.status){ this.orderNo=response.data.data if(this.payType==2){ this.cardPay() }else{ this.getWxApi() } }else{ this.$vux.toast.show({ text: response.data.message, type:'cancel' }) } }).catch((error)=>{ this.$vux.toast.show({ text: "網絡異常", type: 'cancel' }) }) }, cardPay(){ let postCard={ type:1, orderNo:this.orderNo, cardCode:this.currentItem.card_code, customerId:_global.customerId, totalAmount:this.shopCart.totalMoney, } this.$http.post('/shop/api/pay-order',postCard).then((response) => { if(response.data.status){ this.$store.dispatch("emptyCart") this.$store.commit("saveItemIndex",'2') this.$store.commit("savePayType",'2') let $this=this
                        this.$vux.toast.show({ text: '支付成功', type: 'success', onHide(){ $this.$router.push({path:'/orderList'}) } }) }else{ this.$vux.toast.show({ text: response.data.message, }) } }).catch((error)=>{ this.$vux.toast.show({ text: "網絡異常", type:'cancel' }) }) }, wechatPay(config) { let $this= this
                this.$wechat.chooseWXPay({ timestamp: config.timestamp, // 支付簽名時間戳,注意微信jssdk中的全部使用timestamp字段均爲小寫。但最新版的支付後臺生成簽名使用的timeStamp字段名需大寫其中的S字符
 nonceStr: config.nonceStr, // 支付簽名隨機串,不長於 32 位
 package: config.package, // 統一支付接口返回的prepay_id參數值,提交格式如:prepay_id=***)
 signType: config.signType, // 簽名方式,默認爲'SHA1',使用新版支付需傳入'MD5'
 paySign: config.paySign, // 支付簽名
 appId:config.appId, success: function (response) { // 支付成功後的回調函數
 $this.$store.dispatch("emptyCart") $this.$store.commit("saveItemIndex",'2') $this.$store.commit("savePayType",'1') $this.$vux.toast.show({ text: '支付成功', type: 'success', onHide(){ $this.$router.push({path:'/orderList'}) } }) }, cancel: function (re) { $this.$vux.toast.show({ text: '支付已取消', type: 'cancel' }) } }); }, getWxApi(){ this.$http.post('/shop/api/wx-pay',{orderNo:this.orderNo}).then((response) => { if(response.data.status){ this.wechatPay(response.data.data) }else{ this.$vux.toast.show({ text: response.data.message, type:'cancel' }) } }).catch((error)=>{ this.$vux.toast.show({ text: "網絡異常", type:'cancel' }) }) }, }, components: { Group, Cell, Flexbox, FlexboxItem, Scroller, XHeader, Popup, XButton, Selector, Shopcart,ShopcartItem }, } </script>
<style lang="less"> body,html{ background: #F2F2F2; font-size: 14px;
    } .bottom_order{ line-height: 60px; height: 60px; box-sizing: border-box; font-size:18px; background: #fff; .money_box{ margin-left: 10px; height:60px;
        } .order_money{ color:#EB3D3D; font-size: 22px;
        } .payOrder{ text-align: center; background:#0c6; color:#fff;
        } } .my_remark{ display: inline-block; padding-left:10px;
    } .meal_box{ padding: 5px 10px; height:120px; background: #fff;
    } .selfDetail{ margin-top: 15px; .detailAddress{ color: #999;
        } } .deliveryDetail{ margin-top: 15px; .detailAddress{ color: #999;
        } } .select_title{ text-align: center; button{ padding: 2px 10px; min-width: 120px; text-align: center; line-height: 30px; display: inline-block; border: 1px solid #E4E4E4; color: #A1A1A1; background: #fff;
        } .selectSelf{ background: #EB3D3D; color: #fff; border:none;
        } .selectDelivery{ background: #EB3D3D; color: #fff; border:none;
        } .selfMeal{ float: right;
        } .deliveryMeal{ float: left;
        } } .vux-x-icon { fill: #09BB07;
    } .choose_box{ height: 105px; .middle_icon{ margin:12px 0 6px 0;
        } .card_icon{ text-align: center;
        } .my_card{ background: #fff; border-top: 1px solid #F2F2F2;
        } } .card_title{ line-height: 40px; text-align: center; background:#fff; font-weight:300;
    } .card_item{ background: #fff; border:1px solid #f2f2f2; padding:5px 10px; .card_one_item{ margin-top: 8px;
        } } </style>

相關文章
相關標籤/搜索