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

504 lines
13 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="userPhone">
<u--input v-model="form.userPhone" maxlength="11" placeholder="请输入您的手机号"></u--input>
</u-form-item>
<u-form-item label="手机号" prop="confirmPhone">
<u--input v-model="form.confirmPhone" maxlength="11" 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 src='../../static/images/f.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>
<u-navbar autoBack title="为他人充值"></u-navbar>
</view>
</template>
<script>
import {
memberGradeInfo
} from '@/api/member.js';
import paymentMember from '@/components/paymentMember';
import store from '@/store/index';
export default {
name: "member_application",
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: '',
confirmPhone: ''
},
rules: {
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']
},
],
confirmPhone: [{
required: true,
message: '手机号确认不能为空',
// 触发器可以同时用blur和change
trigger: ['change', 'blur']
},
{
validator: (rule, value, callback) => {
return this.form.userPhone == this.form.confirmPhone
},
message: '手机号不一致',
trigger: ['change', 'blur'],
}
]
}
};
},
async onLoad() {
uni.showLoading({
title: '加载中',
mask: true
});
try{
const res = await memberGradeInfo()
this.memberData = res.data
} 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() {
this.$refs.uForm.validate().then(res => {
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: this.form.userPhone,
confirmPhone: this.form.confirmPhone,
orderInfos
}
}else{
this.$util.Tips({
title: '请选择档次套餐'
})
}
}).catch(errors => {
uni.$u.toast('请检查手机号输入')
})
},
/**
* 事件回调
*
*/
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 {
margin-top: 10%;
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 {
height: 100rpx;
border-radius: 20rpx;
padding: 0 30rpx;
background: #fff;
}
}
::v-deep .u-form-item__body__right__message{
margin-top: 10rpx;
color: #fff;
}
.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: 83rpx 30rpx 30rpx 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: 104rpx;
height: 104rpx;
border-radius: 35rpx;
background: linear-gradient(#FFEBB2, #FDCB3B);
padding: 20rpx;
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, #FDCB3B);
}
.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(#AAAAAA, #989898);
}
.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: 127rpx;
display: flex;
justify-content: center;
align-items: center;
height: 87rpx;
border-radius: 44rpx;
color: #fff;
font-size: 32rpx;
}
}
</style>