特易招,招聘小程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

353 lines
6.9 KiB

<template>
<!-- 会员充值 -->
<view class="page">
<navbar title="会员充值" bgColor="#3796F8" leftClick color="#fff" @leftClick="$utils.navigateBack" />
<view class="head">
<view class="headImage">
<image :src="userInfo.headImage" mode="aspectFill"></image>
</view>
<view class="info">
<view class="name">
{{userInfo.nickName}}
<view>
<uv-icon name="edit-pen" size="40rpx" color="#fff"></uv-icon>
修改资料
</view>
</view>
<view class="tips">
手机号{{userInfo.phone}}
</view>
<!-- <view>
{{UserExtensionInfo.vipType}}
</view> -->
</view>
</view>
<view class="openvip">{{UserExtensionInfo.vipType}}</view>
<view class="options">
<view @click="vipId = item.id"
:class="{option : true, act : vipId == item.id}"
v-for="(item,index) in list"
:key="index">
<view style="font-weight: 600;">{{ item.name }}</view>
<view style="color: #FF2E2E;">
<text style="font-size: 20rpx;"></text>
<text style="font-size: 36rpx;">{{ item.price }}</text>
</view>
<view>{{ item.remark }}</view>
</view>
</view>
<view class="block" v-if="vip.id">
<view class="privilege">{{ vip.name }}</view>
<view class="cells">
<view class="cell"
:key="item.id"
v-for="(item, index) in vip.keys">
<image src="../static/mine/characteristic.png" mode="aspectFill" />
<view class="text">
<view>{{ item[0] }}</view>
<view style="font-size: 24rpx;">{{ item[1] }}</view>
</view>
</view>
<!-- <view class="cell">
<image src="../static/mine/integral.png" mode="aspectFill" />
<view class="text">
<view>特权二</view>
<view style="font-size: 24rpx;">快速发布,优先审核</view>
</view>
</view> -->
</view>
<view class="tail">
<view>
<uv-checkbox-group v-model="checkboxValue">
<uv-checkbox
size="40rpx"
icon-size="30rpx"
activeColor="#3796F8"
:name="1"
></uv-checkbox>
</uv-checkbox-group>
</view>
<!-- 缺失会员服务协议 -->
<view>开通前请阅读<text
style="color: #3796F8;"
@click="$refs.configPopup.open('config_vip_service')"
>《会员服务协议》</text></view>
</view>
</view>
<view class="confirm">
<view class="box">
<view>
总计金额:¥{{ vip.price }}
</view>
<view @click="submit(vipId)">
确认协议并支付
</view>
</view>
</view>
<configPopup ref="configPopup"/>
</view>
</template>
<script>
import mixinList from '@/mixins/list.js'
import {
mapState
} from 'vuex'
export default {
mixins: [mixinList],
data() {
return {
checkboxValue : [],
mixinsListApi: 'commonQueryVipType',
vipId: '',
}
},
onShow() {
this.$store.commit('getUserInfo')
//判断如果是登录状态则获取信息
this.$store.commit('getUserExtensionInfo')
},
computed: {
...mapState(['UserExtensionInfo']),
headImage() {
return '/static/image/center/headImage.png'
},
vip() {
let vip = {}
this.list.forEach(n => {
if (n.id == this.vipId) {
let keys = n.perquisite.split('##')
keys.forEach((s, i) => {
keys[i] = s.split('$$')
})
n.keys = keys
vip = n
}
})
return vip
},
},
methods: {
submit(vipTypeId) {
if(!this.checkboxValue.length){
return uni.showToast({
title: '请先同意会员服务协议',
icon:'none'
})
}
console.log("当前标识:" + vipTypeId)
this.$api('addVIP', {
vipTypeId
}, res => {
if(res.code == 200){
uni.requestPayment({
provider: 'wxpay', // 服务提提供商
timeStamp: res.result.timeStamp, // 时间戳
nonceStr: res.result.nonceStr, // 随机字符串
package: res.result.packageValue,
signType: res.result.signType, // 签名算法
paySign: res.result.paySign, // 签名
success: function(res) {
console.log('支付成功', res);
self.$refs.confirmationPopupUpload.open()
// self.$refs.confirmationPopup.close()
},
fail: function(err) {
console.log('支付失败', err);
self.$refs.confirmationPopup.close()
uni.showToast({
icon: 'none',
title: "支付失败"
})
}
});
}
})
},
getDataThen(list) {
this.vipId = list[0] && list[0].id
},
},
}
</script>
<style scoped lang="scss">
.page {
background-color: #fff;
height: 100vh;
.head {
display: flex;
background-color: $uni-color;
padding: 40rpx 20rpx;
align-items: center;
position: relative;
color: #fff;
padding-bottom: 70rpx;
.headImage {
width: 120rpx;
height: 120rpx;
background-size: 100% 100%;
overflow: hidden;
border-radius: 50%;
margin-right: 40rpx;
image {
height: 100%;
width: 100%;
}
}
.info {
font-size: 28rpx;
.name {
font-size: 32rpx;
display: flex;
padding-bottom: 10rpx;
view {
display: flex;
font-size: 20rpx;
align-items: center;
padding-left: 20rpx;
}
}
.tips {
font-size: 26rpx;
color: #fff;
}
}
}
.openvip {
width: 100%;
text-align: center;
padding: 40rpx 0;
font-size: 36rpx;
font-weight: 500;
}
.options {
display: flex;
flex-wrap: wrap;
.option {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
border: 2rpx solid #3796F8;
width: 220rpx;
height: 240rpx;
border-radius: 16rpx;
box-sizing: border-box;
margin: 12rpx;
view {
margin-top: 15rpx;
font-size: 26rpx;
}
}
.act {
border: 2rpx solid $uni-color;
box-shadow: 0 0 10rpx 10rpx rgba($uni-color, 0.2);
}
}
.block {
width: 90%;
margin-left: 5%;
.privilege {
font-size: 30rpx;
padding: 60rpx 0rpx 40rpx;
}
.cells {
display: flex;
flex-direction: column;
.cell {
display: flex;
align-items: center;
margin: 20rpx 0;
.text {
margin-left: 20rpx;
color: #707070;
font-size: 26rpx;
}
image {
height: 70rpx;
width: 70rpx;
}
}
}
.tail {
display: flex;
align-items: center;
margin-top: 30rpx;
view:nth-child(2) {
margin-left: 10rpx;
color: #707070;
font-size: 24rpx;
}
}
}
.confirm {
display: flex;
position: fixed;
bottom: 0px;
width: 100%;
justify-content: center;
align-items: center;
padding: 8rpx 0;
box-shadow: 0 -2rpx 6rpx 0 #d9d9d9;
.box {
display: flex;
align-items: center;
justify-content: space-between;
width: 92%;
font-size: 28rpx;
view:nth-child(1) {
color: #999999;
}
view:nth-child(2) {
padding: 25rpx 60rpx;
color: #FFFFFF;
background-color: #3796F8;
border-radius: 12rpx;
}
view:nth-child(1) {
color: #999999;
}
}
}
}
</style>