fastbee/yack-app/pagesB/login/register.vue

272 lines
7.8 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>
<page-meta>
<navigation-bar :title="$tt('register.userRegister')" title-align="center" background-color="#007AFF" />
</page-meta>
<view class="container">
<view class="main">
<u--form :model="registerForm" :rules="rules" ref="form">
<u-form-item prop="username" borderBottom>
<u--input v-model="registerForm.username" clearable border="none"
:placeholder="$tt('register.inputUserName')" prefixIcon="account-fill"
prefixIconStyle="font-size: 44rpx; color: #3c9cff; margin-right: 10rpx"></u--input>
</u-form-item>
<u-form-item prop="phonenumber" borderBottom>
<u--input v-model="registerForm.phonenumber" clearable border="none"
:placeholder="$tt('register.inputPhone')" prefixIcon="phone-fill"
prefixIconStyle="font-size: 44rpx; color: #3c9cff; margin-right: 10rpx"></u--input>
</u-form-item>
<u-form-item prop="password" borderBottom>
<u--input v-model="registerForm.password" type="password" clearable border="none"
:placeholder="$tt('register.inputPassword')" prefixIcon="lock-fill"
prefixIconStyle="font-size: 44rpx; color: #3c9cff; margin-right: 10rpx"></u--input>
</u-form-item>
<u-form-item prop="confirmPassword" borderBottom>
<u--input v-model="registerForm.confirmPassword" type="password" clearable border="none"
:placeholder="$tt('register.inputPasswordAgain')" prefixIcon="lock-fill"
prefixIconStyle="font-size: 44rpx; color: #3c9cff; margin-right: 10rpx"></u--input>
</u-form-item>
<u-form-item prop="code" borderBottom>
<!-- 注意:由于兼容性差异,如果需要使用前后插槽,nvue下需使用u--input,非nvue下需使用u-input -->
<u-input :placeholder="$tt('register.inputCode')" v-model="registerForm.code" border="none"
prefixIcon="integral-fill"
prefixIconStyle="font-size: 44rpx; color: #3c9cff; margin-right: 10rpx">
<template slot="suffix">
<u--image :src="codeUrl" width="120px" height="30px" @click="getCode"></u--image>
</template>
</u-input>
</u-form-item>
<view class="clause-wrap">
<view class="clause">
<u-checkbox-group @change="handleClauseCheckbox">
<label>
<u-checkbox :checked="isClause" style="transform:scale(0.8)" />
</label>
<text class="check_text">
<text>{{$tt('bindRegister.policy0')}}</text>
<text class="link" @click="handleGoToPrivacy">{{$tt('bindRegister.policy1')}}</text>
<text class="link" @click="handleGoToService">{{$tt('bindRegister.policy2')}}</text>
<text class="link" @click="handleGoToStatement">{{$tt('bindRegister.policy3')}}</text>
<text class="link" @click="handleGoToCommonBill">{{$tt('bindRegister.policy4')}}</text>
</text>
</u-checkbox-group>
</view>
</view>
<view class="register-btn">
<u-button class="register-btn-item" shape="circle" type="primary"
:text="$tt('register.registration')" @click="handleRegister()"></u-button>
</view>
</u--form>
</view>
<u-modal :show="show" :content="content" @confirm="confirm"></u-modal>
</view>
</template>
<script>
import projectConfig from '@/env.config.js';
import { captchaImage, register } from '@/apis/modules/common.js';
export default {
data () {
return {
isClause: false,
// 提示窗
show: false,
content: '',
resultCode: 500,
codeUrl: '',
registerForm: {
username: '',
phonenumber: '',
password: '',
confirmPassword: '',
code: '',
uuid: '',
bindId: '',
},
rules: {
username: {
type: 'string',
min: 4,
max: 20,
required: true,
message: this.$tt('register.inputUserNameSize'),
trigger: ['blur', 'change']
},
phonenumber: [{
type: 'integer',
min: 11,
max: 11,
required: true,
message: this.$tt('register.inputPhone'),
trigger: ['blur', 'change']
},
{
validator: (rule, value, callback) => {
return uni.$u.test.mobile(value);
},
message: this.$tt('bindRegister.incorrectPhone'),
// 触发器可以同时用blur和change
trigger: ['change', 'blur']
}
],
password: {
type: 'string',
required: true,
min: 5,
max: 20,
message: this.$tt('register.inputPassword'),
trigger: ['blur', 'change']
},
confirmPassword: [{
type: 'string',
required: true,
message: this.$tt('register.inputPasswordAgain'),
trigger: ['blur', 'change']
},
{
validator: (rule, value, callback) => {
if (this.registerForm.password !== value) {
// uni.$u.test.mobile()就是返回true或者false的
return false;
} else {
return true;
}
},
message: this.$tt('bindRegister.enterPasswordsDiffer'),
// 触发器可以同时用blur和change
trigger: ['change', 'blur']
}
],
code: {
type: 'integer',
required: true,
message: this.$tt('register.inputCode'),
trigger: ['blur', 'change']
}
}
};
},
created () {
this.getCode();
},
methods: {
// 用户注册
handleRegister () {
this.$refs.form.validate().then(res => {
if (!this.isClause) {
uni.showToast({
icon: 'none',
title: this.$tt('login.readAndCheckTheAgreement'),
});
return;
}
register(this.registerForm)
.then(res => {
this.innerRegister(res);
}).catch(err => {
console.log("err catch", err);
})
})
},
// 注册
innerRegister (res) {
this.resultCode = res.code;
if (res.code == 200) {
this.content = this.$tt('register.congratulations') + this.registerForm.username + this.$tt(
'register.registeredSuccessfully');
} else {
this.content = res.msg;
}
this.show = true;
},
// 提示框确认
confirm () {
this.show = false;
if (this.resultCode == 200) {
uni.$u.route({
url: '/pages/login/index',
type: 'redirect'
});
} else {
this.getCode();
}
},
// 获取验证码
getCode () {
this.$api.common.captchaImage(true).then(res => {
this.codeUrl = 'data:image/gif;base64,' + res.img;
this.registerForm.uuid = res.uuid;
this.registerForm.code = "";
})
},
// 隐私政策
handleGoToPrivacy () {
let title = this.$tt('login.privacyPolicy');
let url = projectConfig.officialWebUrl + 'privacy-policy.html';
uni.navigateTo({
url: `/pagesA/common/webview/index?title=${title}&url=${url}`
});
},
// 服务协议
handleGoToService () {
let title = this.$tt('login.serviceAgreement');
let url = projectConfig.officialWebUrl + 'service-agreement.html';
uni.navigateTo({
url: `/pagesA/common/webview/index?title=${title}&url=${url}`
});
},
// 儿童隐私保护声明
handleGoToStatement () {
let title = this.$tt('login.childProtectionStatement');
let url = projectConfig.officialWebUrl + 'child-protection-statement.html';
uni.navigateTo({
url: `/pagesA/common/webview/index?title=${title}&url=${url}`
});
},
// 第三方信息共享清单
handleGoToCommonBill () {
let title = this.$tt('login.commonBill');
let url = projectConfig.officialWebUrl + 'common-bill.html';
uni.navigateTo({
url: `/pagesA/common/webview/index?title=${title}&url=${url}`
});
},
// 勾选协议
handleClauseCheckbox (e) {
this.isClause = !this.isClause;
}
}
};
</script>
<style lang="scss" scoped>
.main {
padding: 20px;
background: #ffffff;
border-top-left-radius: 0px;
border-top-right-radius: 0px;
.clause-wrap {
margin: 40rpx 0;
.clause {
font-size: 28rpx;
.check_text {}
.link {
color: #3c9cff;
}
}
}
.register-btn {
margin-top: 40px;
.register-btn-item {
height: 90rpx;
width: 650rpx;
}
}
}
</style>