cashier_weapp/pages/member/index - 副本.vue

723 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view class="content">
<view class="location" @click="openLocation">
<image class="location_icon" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/location.png" mode="aspectFill"></image>
<view>{{ shopUserInfo.shopName }}</view>
<u-icon name="arrow-right" color="#575B66" size="28"></u-icon>
</view>
<view class="card_info flex-colum">
<view class="title">账户余额()</view>
<view class="card_info_con flex-between">
<view class="balance">{{shopUserInfo.amount || '0.00'}}</view>
<view class="card_info_con_right flex-end">
<view class ="card_info_con_right_item flex-colum" @click="handleClick(item)" v-for="(item,index) in cardManageList" :key="index">
<image class="card_info_con_right_item_icon" :src="item.icon" mode="aspectFill"></image>
<text class="card_info_con_right_item_text">{{item.name}}</text>
</view>
</view>
</view>
</view>
<view class="customAmount" v-if="shopUserInfo.isUser == 1">
<view class="customAmount_left">
<text class="customAmount_left_tip">¥</text>
<u-input
type="number"
v-model="amount"
inputAlign="left"
:placeholder="`充${amount}送${giftAmount}`"
:customStyle="{border: '0'}"
@input="amountChange"
></u-input>
</view>
<text class="customAmount_right">自定义金额</text>
</view>
<view class="rechargeList">
<view class="rechargeList_f" @click="clickinput(item,index)" v-for="(item,index) in listdata" :key="index">
<view class="rechargeList_item flex-colum " :class="index === inputshow?'active':''">
<view class="rechargeList_item_title">充值</view>
<view class="flex-colum-start">
<view class="rechargeList_item_amount">¥<text>{{item.amount}}</text></view>
<view class="rechargeList_item_gift" v-show="index === inputshow">
<image class="rechargeList_item_gift_bg" src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/gift_icon.png" mode="aspectFill"></image>
<view class="rechargeList_item_gift_text">
<text>赠{{inputshow}}</text>
<text>¥{{ item.giftAmount }}</text>
</view>
</view>
<view class="rechargeList_item_handsel" v-show="index !== inputshow">赠送{{item.giftAmount}}元</view>
</view>
</view>
</view>
</view>
<view class="gift" v-if="giftList && giftList.length > 0">
<view class="gift_title">您将获得:</view>
<view class="gift_list">
<view class="gift_list_item" v-for="(item,index) in giftList" :key="index">
<text class="icon"></text>
<text class="text"> {{ item }} </text>
</view>
</view>
</view>
<view class="explain">
<view class="explain-top flex-between">
<text class="explain-top_title">适用门店</text>
<text class="shopName">{{ shopUserInfo.shopName }}</text>
</view>
<view class="explain_content">
<text class="explain_content_title">充值说明</text>
<text class="explain_content_text">1.充值金额1家门店可用</text>
<text class="explain_content_text">2.储值完成后不支持自助退款可联系商家处理</text>
<text class="explain_content_text">3.钱包余额不支持转赠不可提现长期有效</text>
</view>
</view>
<view class="rechargeBox">
<view class="agreement" @click="isProtocol = !isProtocol">
<u-checkbox-group >
<u-checkbox :checked="isProtocol" shape="circle" activeColor="#E3AD7F" @change="radioChange" size="35" iconSize="20">
</u-checkbox>
</u-checkbox-group>
<text>已同意</text>
<text class="agreement_text" @click.stop="viewProtocol">用户隐私协议</text>
<!-- <text class="agreement_text" @click="viewProtocol">用户储值协议</text> -->
<!-- <text class="agreement_text" @click="viewProtocol">用户授权协议</text> -->
</view>
<view class="recharge" @tap="$u.debounce(userbalancerechangesub, 500)">立即充值</view>
</view>
<registermember :show="memberOpen" :shopId="shopId" @getRegisterMember="getRegisterMember"></registermember>
</view>
</template>
<script>
import registermember from './components/registermember.vue'
export default {
components: {
registermember
},
data() {
return {
inputshow: 0,
memberOpen: false,
isProtocol: false,
listdata: [],
amount: 0,
giftAmount: 0,
userInfo: {},
shopUserInfo: null,
shopId: '',
giftList: [],
cardManageList: [
{name: "明细", url: "member/billDetails",icon: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/detail.png"},
{name: "管理", url: "member/storedManage",icon: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/manage.png"}
],
type: "",
}
},
async onLoad(options) {
// if ( e.type == 'list' || e.type == 'index') {
// this.shopId = e.shopId;
// this.init();
// }
uni.cache.set('forceUpdate',1)
// #ifdef MP-WEIXIN
if (options.q) {
this.shopId = this.getQueryString(decodeURIComponent(options.q), 'shopId')
uni.cache.set('shopId',this.shopId)
this.tokenShow = false;
}
// #endif
// #ifdef MP-ALIPAY
if (getApp().globalData.shopId) { this.shopId = getApp().globalData.shopId }
uni.cache.set('shopId',this.shopId)
// #endif
if (options.shopId) {
this.shopId = options.shopId
uni.cache.set('shopId',this.shopId)
}
if (options.type) {
this.type = options.type
}
if ( options.amount ) { this.amount = options.amount; }
this.shopInfo();
this.paygetActive()
},
methods: {
/**
* 初始化
*/
async shopInfo() {
let res = await this.api.shopUserInfo({
shopId: this.shopId,
userId: uni.cache.get('userInfo').id,
})
if (res.code == 0) {
this.shopUserInfo = res.data;
uni.cache.remove('memberOpen',this.memberOpen)
if ( this.shopUserInfo.isVip == 0 ) {
this.memberOpen = true;
uni.cache.set('memberOpen',this.memberOpen)
}
} else {
let pages = getCurrentPages()
if ( pages.length > 1) {
uni.navigateBack()
} else {
setTimeout(res => {
uni.exitMiniProgram({
success: function() {
console.log('退出小程序成功');
},
fail: function(err) {
console.log('退出小程序失败', err);
}
})
}, 500)
}
}
this.$forceUpdate();
console.log(this.memberOpen)
},
/**
* 获取充值金额列表
*/
async paygetActive() {
let res = await this.api.paygetActive({
shopId: this.shopId,
page: 1,
pageSize: 99
})
try {
this.listdata = res.data.list;
this.giftList = this.listdata[0].gives;
this.giftAmount = this.listdata[0].giftAmount
if ( this.type == 'topUpActivity') {
this.amountChange()
} else {
this.amount = this.listdata[0].amount;
}
} catch (e) {
//TODO handle the exception
}
},
/**
* 监听金额修改
*/
amountChange () {
let item = this.listdata.filter(item=>this.amount==item.amount)
if ( item.length > 0 ) {
this.listdata.forEach((v,e)=>{
if ( this.amount == v.amount) {
this.inputshow = e;
this.clickinput(v,e)
}
})
} else {
this.inputshow = '';
this.giftList = [];
this.giftAmount = '';
}
},
/**
* 进入明细\管理
* @param {Object} e
*/
handleClick (item) {
uni.navigateTo({
url: `/pages/${item.url}?shopUserInfo=${JSON.stringify(this.shopUserInfo)}`
})
},
/**
* 查看协议
*/
viewProtocol (){
wx.openPrivacyContract({
success: () => {}, // 打开成功
fail: () => {}, // 打开失败
complete: () => {}
})
},
/**
* 是否同意协议
* @param {Object} n
*/
radioChange(n) {
this.isProtocol = n;
},
/**
* 注册会员卡
* @param {Object} e
*/
getRegisterMember (e) {
this.memberOpen = e;
this.shopInfo();
this.paygetActive()
},
/**
* 拉起地图
*/
openLocation () {
console.log('123');
uni.openLocation({
latitude: Number(this.shopUserInfo.lat), // 目的地的纬度,浮点数,范围为-90~90
longitude: Number(this.shopUserInfo.lng), // 目的地的经度,浮点数,范围为-180~180
scale: 18, // 缩放比例范围5~18
name: this.shopUserInfo.shopName, // 位置名
address: this.shopUserInfo.address, // 地址的详细说明
success() {
console.log('导航启动成功');
},
fail(error) {
console.log('导航启动失败', error);
if ( error.errMsg == "openLocation:fail invalid_coordinate") {
uni.showToast({
title: "门店经纬度无效",
icon: 'none'
});
}
}
});
},
/**
* 解析地址传参
* @param {Object} url
* @param {Object} name
*/
getQueryString(url, name) { //解码
var reg = new RegExp('(^|&|/?)' + name + '=([^&|/?]*)(&|/?|$)', 'i')
var r = url.substr(1).match(reg)
if (r != null) {
return r[2]
}
return null;
},
/**
* 充值金额切换
* @param {Object} a
* @param {Object} b
*/
clickinput(a, b) {
this.inputshow = b;
this.giftList = a.gives;
this.amount = a.amount;
this.giftAmount = a.giftAmount;
},
/**
* 充值
*/
async userbalancerechangesub() {
let _this = this;
if (!this.isProtocol) {
uni.showToast({
title: '请勾选协议',
icon: 'none'
});
return false;
}
if (this.amount == null || this.amount == '') {
uni.showToast({
title: '金额不能为空',
icon: 'none'
});
return false;
}
if (this.amount <= 0) {
uni.showToast({
title: '金额必须大于0',
icon: 'none'
});
return false;
}
let res = await this.api.paymemeberIn({
shopId: this.shopId, // 判断显示哪家的作品,
amount: this.amount // 判断显示哪家的作品,
})
if (res.code == 0) {
uni.showLoading({
title: '加载中',
mask: true
})
// #ifdef MP-WEIXIN
uni.requestPayment({
provider: 'wxpay', //支付类型-固定值
partnerid: res.data.appId, // 微信支付商户号
timeStamp: res.data.timeStamp, // 时间戳(单位:秒)
nonceStr: res.data.nonceStr, // 随机字符串
package: res.data.package, // 固定值
signType: res.data.signType, //固定值
paySign: res.data.paySign, //签名
success: (res) => {
uni.showToast({
title: "支付成功"
})
uni.hideLoading()
let pages = getCurrentPages()
uni.requestSubscribeMessage({
tmplIds:["AV-KybUHaK3KtFVLqpy6PHccHBS7XeX__mOM4RbufnQ"],
complete() {
if ( _this.type && _this.type == "topUpActivity") {
uni.pro.navigateBack()
} else {
if ( pages.length > 1) {
_this.shopInfo()
} else {
setTimeout(res => {
uni.switchTab({
url: '/pages/index/index'
})
}, 500)
}
}
},
})
},
fail: (res) => {
uni.hideLoading()
}
});
uni.hideLoading()
// #endif
}
},
}
}
</script>
<style lang="scss">
page {
background: #F9F9F9;
}
.content {
padding: 16rpx 20rpx 245rpx 20rpx;
.location{
display: flex;
align-items: center;
background-color: #fff;
padding: 16rpx 28rpx 18rpx 28rpx;
margin-bottom: 32rpx;
border-radius: 12rpx;
font-weight: 400;
font-size: 28rpx;
color: #333333;
.location_icon{
width: 20rpx;
height: 26rpx;
margin-right: 20rpx;
}
}
.card_info{
width: 100%;
height: 182rpx;
background: linear-gradient( 132deg, #D6B68D 0%, #E6D6BC 100%);
border-radius: 12rpx;
padding: 32rpx 28rpx;
align-items: initial;
margin-bottom: 26rpx;
.title{
font-weight: 500;
font-size: 32rpx;
color: #333333;
}
.card_info_con{
align-items: flex-end;
.balance{
font-weight: 400;
font-size: 48rpx;
color: #333333;
}
.card_info_con_right{
.card_info_con_right_item{
margin-left: 64rpx;
.card_info_con_right_item_icon{
width: 40rpx;
height: 36rpx;
margin-bottom: 5rpx;
}
.card_info_con_right_item_text{
font-weight: 400;
font-size: 24rpx;
color: #333333;
}
}
}
}
}
.customAmount{
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 32rpx;
padding: 14rpx 16rpx;
background-color: #fff;
border-radius: 8rpx;
.customAmount_left{
width: 100%;
display: flex;
align-items: center;
.customAmount_left_tip{
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
input{
width: 100%;
font-weight: 500;
font-size: 24rpx;
color: #333;
padding-left: 16rpx;
}
}
.customAmount_right{
font-weight: 500;
font-size: 28rpx;
color: #666666;
flex-shrink: 0;
}
}
.rechargeList{
width: 100%;
display: flex;
flex-wrap: wrap;
.rechargeList_f{
width: 33.333%;
margin-bottom: 30rpx;
padding-right: 20rpx;
padding-left: 0;
.rechargeList_item{
border-radius: 0rpx 48rpx 0rpx 0rpx;
border: 4rpx solid #E5E5E5;
align-items: initial;
padding: 26rpx 22rpx;
justify-content: space-between;
position: relative;
.rechargeList_item_title{
margin-bottom: 20rpx;
}
.rechargeList_item_title,.rechargeList_item_handsel{
font-weight: 400;
font-size: 20rpx;
color: #999999;
}
.rechargeList_item_amount{
font-weight: bold;
font-size: 28rpx;
color: #666666;
text{
font-size: 44rpx;
font-weight: bold;
color: #666666;
}
}
.rechargeList_item_handsel{
}
.rechargeList_item_gift{
width: 92.52rpx;
height: 88.74rpx;
position: absolute;
top: 12rpx;
right: 12rpx;
.rechargeList_item_gift_bg{
width: 92.52rpx;
height: 88.74rpx;
position: absolute;
}
.rechargeList_item_gift_text{
width: 92.52rpx;
height: 88.74rpx;
position: absolute;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text:nth-child(1){
font-weight: bold;
font-size: 20rpx;
color: #fff;
}
text:nth-child(2){
font-weight: 400;
font-size: 24rpx;
color: #fff;
}
}
}
}
.rechargeList_item.active{
border: 4rpx solid #DCC19E;
background: linear-gradient( 133deg, #F9F6ED 0%, #FFFFFF 100%);
.rechargeList_item_title{
color: #F7664E;
margin-bottom: 47rpx;
}
.rechargeList_item_amount{
font-weight: bold;
font-size: 28rpx;
color: #FB604A;
text{
font-size: 44rpx;
font-weight: bold;
color: #FB604A;
}
}
}
}
.rechargeList_f:nth-child(3n-1){
padding-right: 10rpx;
padding-left: 10rpx;
}
.rechargeList_f:nth-child(3n){
padding-right: 0;
padding-left: 20rpx;
}
}
.gift{
display: flex;
flex-direction: column;
padding: 0 22rpx;
margin-bottom: 48rpx;
.gift_title{
font-weight: bold;
font-size: 32rpx;
color: #333333;
margin-bottom: 16rpx;
}
.gift_list{
display: flex;
flex-direction: column;
.gift_list_item{
display: flex;
align-items: center;
.icon{
width: 24rpx;
height: 24rpx;
border-radius: 50%;
background-color: #F7853D;
margin-right: 8rpx;
flex-shrink: 0;
}
.text{
font-weight: 400;
font-size: 28rpx;
color: #333333;
}
}
}
}
.explain{
background-color: #fff;
border-radius: 12rpx;
display: flex;
flex-direction: column;
padding: 22rpx 24rpx;
margin-bottom: 30rpx;
.explain-top{
// align-items: center;
margin-bottom: 18rpx;
.explain-top_title{
font-weight: bold;
font-size: 32rpx;
color: #333333;
}
.shopName{
font-weight: 400;
font-size: 24rpx;
color: #333333;
}
}
.explain_content{
display: flex;
flex-direction: column;
.explain_content_title{
font-weight: bold;
font-size: 32rpx;
color: #333333;
margin-bottom: 20rpx;
}
.explain_content_text{
font-weight: 400;
font-size: 24rpx;
color: #666666;
margin-bottom: 14rpx;
}
}
}
.rechargeBox{
width: 100%;
padding: 0 28rpx 84rpx 28rpx;
background-color: #fff;
position: fixed;
left: 0;
bottom: 0;
.agreement{
display: flex;
align-items: center;
justify-content: center;
padding-top: 16rpx;
padding-bottom: 20rpx;
text{
font-size: 24rpx;
}
.agreement_text{
color: #E3AD7F;
}
}
.recharge {
width: 100%;
height: 90rpx;
line-height: 90rpx;
text-align: center;
font-weight: bold;
font-size: 36rpx;
color: #FFFFFF;
border-radius: 12rpx;
background: #E3AD7F;
}
}
}
</style>