cyywl_server/yudao-ui-app/pages/member_renew/index.vue

488 lines
12 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="box">
<view class="box-phone">
<u--form :model="form" :rules="rules" ref="uForm" labelWidth="100">
<u-form-item label="姓名" prop="userName" >
<u--input v-model="form.userName" maxlength="11" placeholder="请输入您的姓名"></u--input>
</u-form-item>
<u-form-item label="手机号" prop="phone" >
<u--input v-model="form.userPhone" maxlength="11" disabled placeholder="请输入您的手机号"></u--input>
</u-form-item>
</u--form>
</view>
<view class="box-member">
<view class="box-title">
<image src='../../static/images/memberTitle.png'></image>
</view>
<view class="member-list">
<view
:class="[activeIndex.includes(index) && 'member-active',!!parseInt(item.isExist) && 'member-disbled', 'member-item']"
v-for="(item,index) in memberData" :key="index" @click="handleMember(item,index)">
<view class="member-image">
<image v-show="!!!parseInt(item.isExist)" src='../../static/images/success.png'></image>
<image v-show="!!parseInt(item.isExist)" src='../../static/images/disbled.png'></image>
</view>
<view class="member-text">
<view class="text-title">
<text>{{item.name.split('得')[0]}}得<text>{{item.name.split('得')[1]}}</text></text>
<view></view>
</view>
<text class="text-content">{{item.gearRemarks}}</text>
</view>
</view>
<view class="member-prompt">
* 办理三个项目即可升级会员2会员2享XX权益。
</view>
</view>
</view>
<paymentMember :payMode='payMode' :pay_close="pay_close" @onChangeFun='onChangeFun' :payInfo="payInfo"></paymentMember>
<button class="box-submit" @click="goPay"></button>
</view>
</template>
<script>
import {
memberGradeInfo
} from '@/api/member.js';
import paymentMember from '@/components/paymentMember';
import store from '@/store/index';
export default {
name: "member_renew",
components: {
paymentMember
},
data() {
return {
memberData:[],
payInfo:{
userPhone: '',
confirmPhone: '',
orderInfos: []
},
payMode: [{
name: "微信支付",
icon: "icon-weixinzhifu",
value: 'WXPAY',
title: '微信快捷支付'
},
{
name: "支付宝",
icon: "icon-zhifubao",
value: 'ALIPAY',
title: '支付宝快捷支付'
}
],
pay_close: false,
activeIndex:[],
form: {
userPhone:''
},
rules: {
userName: [{
required: true,
message: '姓名不能为空',
// 触发器可以同时用blur和change
trigger: ['change', 'blur']
}],
userPhone: [
{
required: true,
message: '手机号不能为空',
// 触发器可以同时用blur和change
trigger: ['change', 'blur']
},
{
pattern: /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[1-25-9])\d{8}$/g,
// 正则检验前先将值转为字符串
transform(value) {
return String(value);
},
message: '手机号不正确190.193号段不可充值)',
trigger: ['change', 'blur']
},
]
}
};
},
async onLoad() {
uni.showLoading({
title: '加载中',
mask: true
});
try{
const res = await memberGradeInfo()
this.memberData = res.data
this.form.userPhone = store.state.app.userInfo.mobile
this.form.userName = store.state.app.userInfo.nickName
} finally{
uni.hideLoading();
}
},
methods: {
handleMember(value,index){
if(!!parseInt(value.isExist)) return
if(this.activeIndex.includes(index)){
this.activeIndex = this.activeIndex.filter(item => item !== index)
}else{
this.activeIndex.push(index)
}
},
/**
* 打开支付组件
*
*/
goPay() {
if(this.activeIndex.length){
this.$set(this, 'pay_close', true);
const orderInfos = this.activeIndex.map((item) => {
return {
...this.memberData[item],
gearId:this.memberData[item].id
}
})
this.payInfo = {
userPhone: store.state.app.userInfo.mobile,
userName: this.form.userName,
orderInfos
}
}else{
this.$util.Tips({
title: '请选择档次套餐'
})
}
},
/**
* 事件回调
*
*/
onChangeFun: function(e) {
let opt = e;
let action = opt.action || null;
let value = opt.value != undefined ? opt.value : null;
(action && this[action]) && this[action](value);
},
/**
* 关闭支付组件
*
*/
payClose: function() {
this.pay_close = false;
},
/**
* 支付成功回调
*
*/
pay_complete: function() {
this.status = false;
this.page = 1;
this.$set(this, 'bargain', []);
this.$set(this, 'pay_close', false);
this.getBargainUserList();
},
/**
* 支付失败回调
*
*/
pay_fail: function() {
this.pay_close = false;
},
onChangeFun: function(e) {
let opt = e;
let action = opt.action || null;
let value = opt.value != undefined ? opt.value : null;
(action && this[action]) && this[action](value);
},
}
};
</script>
<style lang="scss" scoped>
.box {
position: relative;
padding: 8% 40rpx 30rpx 40rpx;
min-height: 100vh;
background: url(../../static/images/bg.png);
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
.box-phone {
.u-form-item {
margin-bottom: 32rpx;
}
::v-deep .u-form-item__body,.u-input {
height: 100rpx;
border-radius: 20rpx;
padding: 0 30rpx;
background: #fff !important;
}
}
.phone-money {
width: 604rpx;
height: 140rpx;
position: absolute;
top: 2%;
left: 15%;
}
.box-member {
margin-top: 10%;
box-shadow: 0px 0px 15px -5px #000;
width: 100%;
border-radius: 20px;
box-sizing: border-box;
border: 1px solid transparent;
background-image: linear-gradient(#FFD55D, #FD752F),
linear-gradient(to bottom, #FFD55D, #FDCB3B);
background-origin: border-box;
background-clip: content-box, border-box;
border-radius: 20px;
position: relative;
.box-title {
position: absolute;
top: -37rpx;
left: -203rpx;
margin-left: 50%;
image {
width: 406rpx;
height: 88rpx;
position: relative;
display: flex;
align-items: center;
justify-content: center;
&::before {
content: '会员详情介绍';
position: absolute;
font-size: 34rpx;
font-family: Adobe Heiti Std;
font-weight: normal;
color: #FF4B47;
text-shadow: 1px 5px 5px rgba(255, 195, 30, 0.78);
}
}
}
.member-list {
margin: 53rpx 30rpx 20rpx 30rpx;
position: relative;
.member-item {
padding: 30rpx 20rpx 27rpx 20rpx;
display: flex;
justify-content: space-between;
background: #fff;
margin-bottom: 20rpx;
border-radius: 20rpx;
.member-image {
width: 100rpx;
height: 100rpx;
border-radius: 35rpx;
background: linear-gradient(#FFEBB2, #FDCB3B);
padding: 6rpx 13rpx;
image {
width: 100%;
height: 100%;
}
}
.member-text {
display: flex;
flex-direction: column;
justify-content: space-between;
flex: .9;
.text-title {
margin-top: -14rpx;
font-size: 32rpx;
font-weight: bolder;
transform: skew(-6deg, 0);
display: flex;
justify-content: space-between;
text {
text {
color: #C80D00;
}
}
view {
width: 18rpx;
height: 6rpx;
background: #FEAC49;
border-radius: 3rpx;
}
}
.text-content {
font-size: 24rpx;
color: #747474;
}
}
}
.member-active {
transition: .3s;
background: linear-gradient(#FF995F, #DA0E00);
.member-image {
background: linear-gradient(#FF995F, #DA0E00);
}
.member-text {
.text-title {
text {
color: #fff;
text {
color: rgb(223, 208, 42);
}
}
view {
background: #fff;
}
}
.text-content {
color: #fff;
}
}
}
.member-disbled {
transition: .3s;
background: linear-gradient(#EFEFEF, #BCBCBC);
.member-image {
background: linear-gradient(#EFEFEF, #AAAAAA);
}
.member-text {
.text-title {
text {
color: #868585;
text {
color: #868585;
}
}
view {
background: #fff;
}
}
.text-content {
color: #5C5C5C;
}
}
}
.member-prompt {
display: flex;
justify-content: center;
font-size: 24rpx;
color: #fff;
}
}
}
.box-privilege {
box-shadow: 0px 0px 15px -5px #000;
border-radius: 36rpx;
width: 100%;
margin-top: 12%;
border-radius: 20px;
box-sizing: border-box;
border: 1px solid transparent;
background-image: linear-gradient(#FFD55D, #FD752F),
linear-gradient(to bottom, #FFEBB2, #FDCB3B);
background-origin: border-box;
background-clip: content-box, border-box;
border-radius: 20px;
display: flex;
flex: 1;
position: relative;
.box-title {
position: absolute;
top: -9%;
left: -203rpx;
margin-left: 50%;
image {
width: 406rpx;
height: 87rpx;
position: relative;
display: flex;
align-items: center;
justify-content: center;
&::before {
content: '特权详情';
position: absolute;
font-size: 34rpx;
font-family: Adobe Heiti Std;
font-weight: normal;
color: #FF4B47;
text-shadow: 1px 5px 5px rgba(255, 195, 30, 0.78);
}
}
}
.privilege-list {
margin: 84rpx 10rpx 40rpx 10rpx;
display: flex;
justify-content: space-between;
.privilege-item {
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
background: #fff;
padding: 16rpx 16rpx;
border-radius: 20rpx;
margin: 0 10rpx;
image {
width: 96rpx;
height: 96rpx;
border-radius: 50%;
margin-bottom: 15rpx;
}
.privilege-text {
color: #000000;
line-height: 36rpx;
text-align: center;
font-size: 26rpx;
}
}
}
}
.box-submit {
background: linear-gradient(#FFC82B, #FD7A32);
margin-top: 9%;
display: flex;
justify-content: center;
align-items: center;
height: 87rpx;
border-radius: 44rpx;
color: #fff;
font-size: 32rpx;
}
}
</style>