Files
cashier_weapp/pages/member/components/registermember.vue
2024-11-18 14:18:10 +08:00

484 lines
13 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>
<!-- 店铺详情 -->
<u-popup :show="memberOpen" :round="20" overlayOpacity="0.8" mode="bottom" @close="showClose" height="500">
<view class="register-member-wrap">
<view class="register-title">欢迎加入{{shopUserInfo.shopName?shopUserInfo.shopName:'本店'}}</view>
<view class="register-tip">请完善个人信息完成会员注册</view>
<view class="register-content">
<view class="reg-head">
<view class="reg-head-img">
<!-- #ifdef MP-WEIXIN -->
<button class="reg-head-img" type="default" open-type="chooseAvatar" @chooseavatar="onChooseAvatar">
<image class="reg-head-img" :src="userHeadImg || 'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/head_default.png'" mode="aspectFill"></image>
</button>
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<button class="reg-head-img" @click="onChooseAvatar">
<image class="reg-head-img" :src="userHeadImg || 'https://czg-qr-order.oss-cn-beijing.aliyuncs.com/menber/head_default.png'" mode="aspectFill"></image>
</button>
<!-- #endif -->
</view>
</view>
<view class="reg-cell">
<view class="lable">昵称<text style="color: #CD1A1A;">*</text></view>
<u-input class="value" v-model="nickName" fontSize="14px" type="text" input-align="left" placeholder="请输入昵称" :custom-style="{border:'none'}" placeholderStyle="color:#999;font-size: 28rpx"/>
</view>
<view class="reg-cell" @click="calendarShow = true">
<view class="lable">生日</view>
<view class="value" :style="{color: birthDay ? '#333' : '#999'}">{{ birthDay || '请选择日期'}}</view>
<!-- <u-calendar @close="calendarShow = false" monthNum="99" minDate="1945-01-01" maxDate="2055-12-12" :show="calendarShow" mode="single" @confirm="confirmCalendar"></u-calendar> -->
<!-- <u-picker :show="calendarShow" ref="uPicker" :columns="columns" @confirm="confirm" @change="changeHandler"></u-picker> -->
<!-- <picker :show="calendarShow" mode="date"></picker> -->
<u-datetime-picker
mode="date"
@cancel="calendarShow = false"
:show="calendarShow"
:minDate="-2208988800000"
v-model="value1"
itemHeight="66"
visibleItemCount="5"
@confirm="confirmTime"
></u-datetime-picker>
<u-icon name="arrow-down-fill" color="#000" size="23"></u-icon>
</view>
<view class="reg-cell">
<view class="lable">手机号</view>
<u-input class="value" v-model="telephone" fontSize="14px" type="text" input-align="left" readonly placeholder="获取手机号" :custom-style="{border:'none'}" placeholder-style="color:#999;font-size: 28rpx"/>
<!-- #ifdef MP-WEIXIN -->
<button class="getPhone" open-type="getPhoneNumber" @getphonenumber="getPhone">
<!-- #endif -->
<!-- #ifdef MP-ALIPAY -->
<button class="getPhone" open-type="getAuthorize" scope='phoneNumber' @getAuthorize="getPhone" @error="getPhoneError">
<!-- #endif -->
<view class="text">{{'获取手机号'}}</view>
</button>
</view>
<view class="agreement">
<view class="agreement_tip">我已阅读并同意以下内容</view>
<view class="agreement_item" @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 @click.stop="viewProtocol(1)" class="agreement_item_text">用户协议/隐私条款</text>
</view>
<!-- <view class="agreement_item">
<u-checkbox-group>
<u-checkbox shape="circle" activeColor="#E3AD7F" @change="radioChange" size="30"></u-checkbox>
</u-checkbox-group>
<text class="agreement_item_text">隐私条款</text>
</view> -->
</view>
<view class="register_btn" @tap="$u.debounce(registerMember, 500)" >快速注册</view>
</view>
</view>
</u-popup>
</template>
<script>
export default {
props: {
shopId: {
type: String,
default: ''
},
show: {
type: Boolean,
default: false,
},
},
data() {
return {
value1: Number(new Date()),
calendarShow: false,
userId: null,
userHeadImg: "",
nickName: "",
telephone: "",
birthDay: "",
isProtocol: false,
shopUserInfo: null,
memberOpen: false,
}
},
mounted() {
this.shopId = uni.cache.get('shopId')
console.log(this.memberOpen)
this.init()
// console.log(this.userInfo)
// this.userId = this.userInfo.id;
// console.log(this.userInfo, '调试1113');
},
methods: {
async init() {
if ( uni.cache.get('shopUserInfo') && this.shopId == uni.cache.get('shopUserInfo').id ) {
this.shopUserInfo = uni.cache.get('shopUserInfo');
} else {
let res = await this.api.shopUserInfo({
"shopId": this.shopId,
"userId": uni.cache.get('userInfo').id,
})
if (res.code == 0) {
this.shopUserInfo = res.data;
}
}
this.memberOpen = this.shopUserInfo.isVip == 0 ? true : false;
this.userHeadImg = this.shopUserInfo.headImg;
this.nickName = this.shopUserInfo.nickName && this.shopUserInfo.nickName != '微信用户' ? this.shopUserInfo.nickName : '';
this.telephone = this.shopUserInfo.telephone;
this.birthDay = this.shopUserInfo.birthDay
},
showClose (){
console.log(2)
uni.navigateBack()
},
radioChange(n) {
//是否同意
console.log(n);
this.isProtocol = n;
},
/**
* 查看协议
*/
viewProtocol (){
wx.openPrivacyContract({
success: () => {}, // 打开成功
fail: () => {}, // 打开失败
complete: () => {}
})
},
/**
* 上传头像
* @param {Object} e
*/
onChooseAvatar(e) {
let _this = this;
//#ifdef MP-WEIXIN
let avatarUrl = e.detail.avatarUrl
uni.uploadFile({
url: uni.conf.baseUrl + '/common/upload',
// url: uni.conf.baseUrl + '/common/upload',
filePath: avatarUrl,
header: {
environment: 'app',
type: 'android',
version: '1.7.3',
'content-type': 'multipart/form-data'
},
fileType:'image',
name: "file",
formData: {
file: avatarUrl,
},
success: (uploadFileRes) => {
let { data } = JSON.parse(uploadFileRes.data)
this.userHeadImg = data
},
fail: (res) => {
console.log(res)
}
});
// #endif
//#ifdef MP-ALIPAY
uni.chooseImage({
count: 1, // 默认9设置图片的数量
sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有
success: function (res) {
// 成功选择图片后
let avatarUrl = res.tempFilePaths[0]; // 获取文件路径
my.uploadFile({
url: uni.conf.baseUrl + '/common/upload',
// url: uni.conf.baseUrl + '/common/upload',
filePath: avatarUrl,
header: {
environment: 'app',
type: 'android',
version: '1.7.3',
'content-type': 'multipart/form-data'
},
fileType:'image',
name: "file",
formData: {
file: avatarUrl,
},
success: (uploadFileRes) => {
let { data } = JSON.parse(uploadFileRes.data)
_this.userHeadImg = data
},
fail: (res) => {
console.log(res)
}
});
},
fail: (res) => {
console.log(res)
}
});
// #endif
},
/**
* 确定生日
* @param {Object} e
*/
confirmTime(e) {
this.calendarShow = false;
this.birthDay = this.getDate(e.value);
// console.log(this.getDate(e.value))
},
/**
* 获取手机号
* @param {Object} d
*/
async getPhone(d) {
// #ifdef MP-WEIXIN
if (d.detail.iv) {
uni.login({
provider: 'weixin',
success: async (data) => {
let res = await this.api.userwxlogins({
code: data.code,
encryptedData: d.detail.encryptedData,
iv: d.detail.iv,
source: "wechar"
})
this.telephone = res.data
}
})
}
// #endif
// #ifdef MP-ALIPAY
// 支付宝小程序环境
my.getAuthCode({
scopes: 'auth_user',
success: (res) => {
console.log(res)
my.getPhoneNumber({
success: async (data) => {
let res = await this.api.userwxlogins({
encryptedData: JSON.parse(data.response).response,
source: "alipay"
})
this.telephone = res.data
// console.log(this.phonetitle)
}
});
}
});
// #endif
},
getPhoneError (e) {
console.log(e)
},
/**
* 格式化时间戳
* @param {Object} time
*/
getDate(time) {
const date = new Date(time);
// const date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
month = month > 9 ? month : '0' + month;
day = day > 9 ? day : '0' + day;
return `${year}-${month}-${day}`;
},
/**
* 注册会员
*/
async registerMember () {
console.log(this.birthDay)
// if ( this.userHeadImg == "" || this.userHeadImg == null ) {
// uni.showToast({
// title: '请选择会员头像',
// icon: 'none'
// });
// return;
// }
if ( this.nickName == "" || this.nickName == null ) {
uni.showToast({
title: '请输入会员昵称',
icon: 'none'
});
return;
}
// if ( this.birthDay == "" || this.birthDay == null ) {
// uni.showToast({
// title: '请选择日期',
// icon: 'none'
// });
// return;
// }
if ( this.telephone == "" || this.telephone == null ) {
uni.showToast({
title: '请获取手机号',
icon: 'none'
});
return;
}
if ( !this.isProtocol ) {
uni.showToast({
title: '请勾选协议',
icon: 'none'
});
return;
}
let res = await this.api.openMember({
id: uni.cache.get('userInfo').id,
shopId: this.shopId,
nickName: this.nickName,
headImg: this.userHeadImg,
telephone: this.telephone,
birthDay: this.birthDay
})
if ( res.code == 0 ) {
this.$emit('getRegisterMember', false)
this.memberOpen = false;
let res = await this.api.loginwxuserInfo({
userId: uni.cache.get('userInfo').id
})
if (res.code == 0) {
uni.cache.set('userInfo', res.data);
}
}
}
}
}
</script>
<style lang="scss" scoped>
.u-datetime-picker {
height: 300px !important;
}
.register-member-wrap{
padding: 64rpx 24rpx;
display: flex;
flex-direction: column;
.register-title{
font-weight: bold;
font-size: 36rpx;
color: #333333;
margin-bottom: 16rpx;
}
.register-tip{
font-weight: 400;
font-size: 24rpx;
color: #999999;
}
.register-content{
display: flex;
flex-direction: column;
.reg-head{
display: flex;
align-items: center;
justify-content: center;
margin-top: 64rpx;
.reg-head-img{
width: 120rpx;
height: 120rpx;
border-radius: 50%;
padding: 0;
position: relative;
}
.reg-head-edit{
width: 24rpx;
height: 24rpx;
position: absolute;
bottom: 0;
right: 14rpx;
}
}
.reg-cell{
display: flex;
align-items: center;
padding: 20rpx 0;
border-bottom: 2rpx solid #E5E5E5;
.lable{
width: 120rpx;
font-weight: 500;
font-size: 28rpx;
color: #333333;
}
.value{
font-weight: 400;
font-size: 28rpx;
color: #333;
padding: 12rpx 0 12rpx 18rpx;
}
.u-input{
input{
font-size: 28rpx!important;
}
}
.getPhone{
background-color: none;
border: 2rpx solid #E3AD7F;
color: #E3AD7F;
font-size: 28rpx;
padding: 5rpx 10rpx;
// #ifdef MP-ALIPAY
padding-top: 0;
display: initial;
height: 70rpx;
line-height: 70rpx;
box-sizing: border-box;
border-radius: 5rpx;
// #endif
}
}
.agreement{
display: flex;
flex-direction: column;
margin-top: 48rpx;
.agreement_tip{
font-weight: 400;
font-size: 24rpx;
color: #666666;
}
.agreement_item{
display: flex;
padding-top: 32rpx;
padding-bottom: 16rpx;
.agreement_item_text{
font-weight: 500;
font-size: 24rpx;
color: #E3AD7F;
}
}
}
.register_btn{
width: 572rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
background: #E3AD7F;
border-radius: 48rpx 48rpx 48rpx 48rpx;
font-weight: 500;
font-size: 36rpx;
color: #FFFFFF;
margin: 30rpx auto 0 auto;
}
}
}
</style>