| | |
| | | <template> |
| | | <div class="register"> |
| | | <div class="top" @click="$router.go(-1)"><img :src="require(`../../assets/theme/${theme}/image/Union.png`)" alt=""> |
| | | </div> |
| | | <Step :step="1"></Step> |
| | | <div class="title textColor">{{ $t('注册') }}</div> |
| | | <div class="flex re-tab"> |
| | | <!-- <div class="textColor1" :class="activeIndex == 0 ? 'active' : ''" @click="changeIndex(0)">{{ $t('账号') }}</div>--> |
| | | <div class="textColor1" :class="activeIndex == 1 ? 'active' : ''" @click="changeIndex(1)">{{ $t('邮箱') }}</div> |
| | | <div class="textColor1" :class="activeIndex == 2 ? 'active' : ''" @click="changeIndex(2)">{{ $t('手机号') }}</div> |
| | | </div> |
| | | <ExInput :label="getRegType(activeIndex, true)" :placeholderText="getRegType(activeIndex, false)" v-model.trim="username" |
| | | :area="isArea" :dialCode="dialCode" @selectArea="onSelectArea" :icon="icon" /> |
| | | |
| | | <ExInput :label="$t('设置密码')" :placeholderText="$t('密码(6-12个字符)')" v-model="password" typeText="password" /> |
| | | <ExInput :label="$t('确认密码')" :placeholderText="$t('请确认密码')" v-model="repassword" typeText="password" /> |
| | | <ExInput :label="$t('邀请码')" :placeholderText="$t('请输入邀请码')" v-model="invitCode" :clearBtn="false" /> |
| | | <div class="protocol textColor"> |
| | | <i @click="agreeProt"> |
| | | <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" /> |
| | | <img v-show="!agree" src="../../assets/image/login/prot1.png" alt="" /> |
| | | </i> |
| | | {{ $t('我已阅读并同意') }}<span class="colorMain" @click="$router.push('/TermsOfService?serviceTerm=1')">{{ $t('服务条款') |
| | | }}</span> |
| | | </div> |
| | | <div class="btn btnMain" @click="register">{{ $t('注册') }}</div> |
| | | <div class="noTips textColor">{{ $t('已有账号') }}<span class="colorMain" @click="$router.push('/login')"> |
| | | {{ $t('去登录') }}</span> |
| | | </div> |
| | | <nationality-list ref='controlChild' :title="$t('选择区域码')" @getName="getName(arguments)"></nationality-list> |
| | | |
| | | <Vcode :imgs="[img1, img2]" :show="show" @success="onSuccess" :canvasHeight="200" @fail="onFail" |
| | | @close="show = false;" sliderText='' :successText="$t('验证通过!')" :failText="$t('验证失败,请重试')" /> |
| | | |
| | | <div>{{ msg }}</div> |
| | | <div class="register"> |
| | | <div class="top" @click="$router.go(-1)"> |
| | | <img |
| | | :src="require(`../../assets/theme/${theme}/image/Union.png`)" |
| | | alt="" |
| | | /> |
| | | </div> |
| | | <Step :step="1"></Step> |
| | | <div class="title textColor">{{ $t("注册") }}</div> |
| | | |
| | | <ExInput :placeholderText="$t('请输入姓名')" v-model="form.username" /> |
| | | <ExInput :placeholderText="$t('请输入邮箱地址')" v-model="form.email" /> |
| | | <div class="code-box"> |
| | | <div |
| | | class="btn btnMain code-but" |
| | | :class="`${codeButTexst === '发送验证码' ? '' : ' S-but'}`" |
| | | @click="sendCode" |
| | | > |
| | | {{ $t(codeButTexst) }}{{ codeButTexst === "发送验证码" ? "" : " S " }} |
| | | </div> |
| | | |
| | | <ExInput :placeholderText="$t('请输入邮箱验证码')" v-model="form.code" /> |
| | | </div> |
| | | <ExInput :placeholderText="$t('请输入手机号码')" v-model="form.phone" /> |
| | | <ExInput |
| | | :placeholderText="$t('密码(6-12个字符)')" |
| | | v-model="form.password" |
| | | typeText="password" |
| | | /> |
| | | <ExInput |
| | | :placeholderText="$t('请确认密码')" |
| | | v-model="form.rePassword" |
| | | typeText="password" |
| | | /> |
| | | <ExInput |
| | | :placeholderText="$t('请输入邀请码')" |
| | | v-model="form.usercode" |
| | | :clearBtn="false" |
| | | /> |
| | | <div class="protocol textColor"> |
| | | <i @click="agreeProt"> |
| | | <img v-show="agree" src="../../assets/image/login/prot2.png" alt="" /> |
| | | <img v-show="!agree" src="../../assets/image/login/prot1.png" alt="" /> |
| | | </i> |
| | | {{ $t("我已阅读并同意") |
| | | }}<span |
| | | class="colorMain" |
| | | @click="$router.push('/TermsOfService?serviceTerm=1')" |
| | | >{{ $t("服务条款") }}</span |
| | | > |
| | | </div> |
| | | <div class="btn btnMain" @click="register">{{ $t("注册") }}</div> |
| | | <div class="noTips textColor"> |
| | | {{ $t("已有账号") |
| | | }}<span class="colorMain" @click="$router.push('/login')"> |
| | | {{ $t("去登录") }}</span |
| | | > |
| | | </div> |
| | | <nationality-list |
| | | ref="controlChild" |
| | | :title="$t('选择区域码')" |
| | | @getName="getName(arguments)" |
| | | ></nationality-list> |
| | | |
| | | <Vcode |
| | | :imgs="[img1, img2]" |
| | | :show="show" |
| | | @success="onSuccess" |
| | | :canvasHeight="200" |
| | | @fail="onFail" |
| | | @close="show = false" |
| | | sliderText="" |
| | | :successText="$t('验证通过!')" |
| | | :failText="$t('验证失败,请重试')" |
| | | /> |
| | | |
| | | <div>{{ msg }}</div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | |
| | | import ExInput from "@/components/ex-input"; |
| | | import Step from "./step.vue"; |
| | | import Axios from "@/API/login.js"; |
| | | import { mapActions, mapGetters } from 'vuex'; |
| | | import { GET_USERINFO } from '@/store/const.store'; |
| | | import nationalityList from '../authentication/components/nationalityList.vue' |
| | | import AxiosuserCenter from "@/API/userCenter.js"; |
| | | |
| | | import { mapActions, mapGetters } from "vuex"; |
| | | import { GET_USERINFO } from "@/store/const.store"; |
| | | import nationalityList from "../authentication/components/nationalityList.vue"; |
| | | import Vcode from "vue-puzzle-vcode"; |
| | | import img1 from "../../assets/image/slider/1.png"; |
| | | import img2 from "../../assets/image/slider/2.png"; |
| | | import { getStorage } from '@/utils/utis' |
| | | import { getStorage } from "@/utils/utis"; |
| | | import { log } from "qrcode/lib/core/galois-field"; |
| | | // /sendVerifyCode |
| | | export default { |
| | | props: { |
| | | |
| | | }, |
| | | components: { |
| | | [Popup.name]: Popup, |
| | | ExInput, |
| | | Step, |
| | | nationalityList, |
| | | Vcode |
| | | }, |
| | | data() { |
| | | return { |
| | | show: false, |
| | | msg: '', |
| | | type: 3,// 1手机 2 邮箱 3账号 |
| | | agree: false, |
| | | username: '', |
| | | password: "", |
| | | repassword: '', |
| | | invitCode: '',//邀请码 |
| | | activeIndex: 1, |
| | | typeText: "password", |
| | | isArea: false, |
| | | dialCode: 0, //电话号前缀 |
| | | icon: '', |
| | | img1, |
| | | img2, |
| | | } |
| | | }, |
| | | mounted() { |
| | | let usercode = getStorage('usercode') |
| | | if (usercode) { |
| | | this.invitCode = usercode; |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters({ |
| | | theme: 'home/theme' |
| | | }), |
| | | }, |
| | | methods: { |
| | | ...mapActions('user', [GET_USERINFO]), |
| | | getRegType(activeIndex, bFlag) { |
| | | switch (activeIndex) { |
| | | case 0: |
| | | return bFlag ? this.$t('账号') : this.$t('请输入账号'); |
| | | case 1: |
| | | return bFlag ? this.$t('邮箱') : this.$t('请输入邮箱'); |
| | | case 2: |
| | | return bFlag ? this.$t('手机号') : this.$t('请输入手机号'); |
| | | } |
| | | }, |
| | | onClose() { |
| | | console.log('onClose') |
| | | }, |
| | | onSuccess() { |
| | | console.log('onSuccess') |
| | | this.registerApi(); |
| | | this.show = false; |
| | | }, |
| | | onFail() { |
| | | this.msg = '' |
| | | }, |
| | | onRefresh() { |
| | | this.msg = '' |
| | | }, |
| | | onSelectArea() { |
| | | this.openBtn(); |
| | | }, |
| | | //打开国家列表底部弹窗 |
| | | openBtn() { |
| | | this.$refs.controlChild.open(); |
| | | }, |
| | | //获取到当前选中国家的code值 |
| | | getName(params) { |
| | | this.icon = params[1]; |
| | | this.dialCode = params[2]; |
| | | }, |
| | | agreeProt() { |
| | | this.agree = !this.agree |
| | | }, |
| | | register() { |
| | | // if (this.activeIndex == 0){ |
| | | // let match = this.username.search(/@/); |
| | | // if (this.username == '' || match == -1) { |
| | | // this.$toast(this.$t('请输入正确的邮箱地址')); |
| | | // return |
| | | // } |
| | | // }else{ |
| | | // if (this.username == '' ) { |
| | | // this.$toast(this.$t('请输入手机号')); |
| | | // return |
| | | // } |
| | | // } |
| | | switch (this.activeIndex) { |
| | | case 0: |
| | | { |
| | | if (this.username == '') { |
| | | this.$toast(this.$t('请输入账号')); |
| | | return; |
| | | } |
| | | if (this.username.length < 6 || this.username.length > 30) { |
| | | this.$toast(this.$t('账号长度必须6-30位')); |
| | | return; |
| | | } |
| | | break; |
| | | } |
| | | case 1: |
| | | { |
| | | let match = this.username.search(/@/); |
| | | if (this.username == '' || match == -1) { |
| | | this.$toast(this.$t('请输入正确的邮箱地址')); |
| | | return; |
| | | } |
| | | break; |
| | | } |
| | | case 2: |
| | | { |
| | | if (this.username == '') { |
| | | this.$toast(this.$t('请输入手机号')); |
| | | return; |
| | | } |
| | | break; |
| | | } |
| | | } |
| | | if (this.password == '') { |
| | | this.$toast(this.$t('请输入密码')); |
| | | return |
| | | }`` |
| | | |
| | | if (this.password.length < 6) { |
| | | this.$toast(this.$t('密码(6-12个字符)')); |
| | | return |
| | | } |
| | | if (this.repassword !== this.password) { |
| | | this.$toast(this.$t('密码不一致')); |
| | | return |
| | | } |
| | | // if (this.invitCode == '') { |
| | | // this.$toast(this.$t('请输入邀请码')); |
| | | // return |
| | | // } |
| | | if (!this.agree) { |
| | | this.$toast(this.$t('请同意服务条款')); |
| | | return |
| | | } |
| | | this.show = true |
| | | }, |
| | | changeIndex(index) { |
| | | this.activeIndex = index; |
| | | switch (index) { |
| | | case 0: |
| | | case 1: { |
| | | this.isArea = false; |
| | | break; |
| | | } |
| | | case 2: { |
| | | this.isArea = true; |
| | | break; |
| | | } |
| | | } |
| | | }, |
| | | registerApi() { |
| | | switch (this.activeIndex) { |
| | | case 0: |
| | | { |
| | | this.type = 3; |
| | | break; |
| | | } |
| | | case 1: |
| | | { |
| | | this.type = 2; |
| | | break; |
| | | } |
| | | case 2: |
| | | { |
| | | this.type = 1; |
| | | break; |
| | | } |
| | | } |
| | | Axios.registerUser({ |
| | | username: (this.activeIndex == 0 || this.activeIndex == 1) ? this.username : `${this.username}`, |
| | | password: this.password, |
| | | re_password: this.repassword, |
| | | type: this.type, |
| | | usercode: this.invitCode, |
| | | }).then((res) => { |
| | | this.GET_USERINFO(res.data) |
| | | if (this.activeIndex == 0||this.activeIndex == 2) { |
| | | this.$router.push('/setFond') |
| | | } |
| | | else { |
| | | this.$router.push({ name: 'verify', query: { type: this.activeIndex, account: this.activeIndex == 1 ? this.username : `${this.username}` } }) |
| | | } |
| | | }).catch((error) => { |
| | | if (error.code === 'ECONNABORTED') { this.$toast(this.$t('网络超时!')); } |
| | | else if (error.msg !== undefined) { this.$toast(this.$t(error.msg)); } |
| | | }); |
| | | } |
| | | props: {}, |
| | | components: { |
| | | [Popup.name]: Popup, |
| | | ExInput, |
| | | Step, |
| | | nationalityList, |
| | | Vcode, |
| | | }, |
| | | data() { |
| | | return { |
| | | // 发送验证码倒计时定时器 |
| | | tiem: null, |
| | | codeButTexst: "发送验证码", |
| | | form: { |
| | | phone: "", |
| | | email: "", |
| | | code: "", |
| | | username: "", |
| | | password: "", |
| | | rePassword: "", |
| | | usercode: "", |
| | | }, |
| | | show: false, |
| | | msg: "", |
| | | type: 3, // 1手机 2 邮箱 3账号 |
| | | agree: false, |
| | | username: "", |
| | | password: "", |
| | | repassword: "", |
| | | invitCode: "", //邀请码 |
| | | activeIndex: 1, |
| | | typeText: "password", |
| | | isArea: false, |
| | | dialCode: 0, //电话号前缀 |
| | | icon: "", |
| | | img1, |
| | | img2, |
| | | }; |
| | | }, |
| | | beforeDestroy() { |
| | | if (this.tiem) { |
| | | clearInterval(this.tiem); |
| | | this.tiem = null; |
| | | } |
| | | } |
| | | }, |
| | | |
| | | mounted() { |
| | | let usercode = getStorage("usercode"); |
| | | if (usercode) { |
| | | this.invitCode = usercode; |
| | | } |
| | | }, |
| | | computed: { |
| | | ...mapGetters({ |
| | | theme: "home/theme", |
| | | }), |
| | | }, |
| | | methods: { |
| | | async bindEmail() { |
| | | await AxiosuserCenter.bindEmail({ |
| | | email: this.form.email, |
| | | verifcode: this.form.code, |
| | | }); |
| | | return true; |
| | | }, |
| | | ...mapActions("user", [GET_USERINFO]), |
| | | async sendCode() { |
| | | // codeButTexst === '发送验证码' ? '' : ' S-but' |
| | | if (this.codeButTexst !== "发送验证码") { |
| | | return; |
| | | } |
| | | if (this.form.email) { |
| | | await Axios.sendVerifyCode({ |
| | | target: this.form.email, |
| | | }); |
| | | this.codeButTexst = 60; |
| | | this.tiem = setInterval(() => { |
| | | this.codeButTexst = this.codeButTexst - 1; |
| | | if (this.codeButTexst === 0) { |
| | | this.codeButTexst = "发送验证码"; |
| | | clearInterval(this.tiem); |
| | | } |
| | | }, 1000); |
| | | } |
| | | }, |
| | | getRegType(activeIndex, bFlag) { |
| | | switch (activeIndex) { |
| | | case 0: |
| | | return bFlag ? this.$t("账号") : this.$t("请输入账号"); |
| | | case 1: |
| | | return bFlag ? this.$t("邮箱") : this.$t("请输入邮箱"); |
| | | case 2: |
| | | return bFlag ? this.$t("手机号") : this.$t("请输入手机号"); |
| | | } |
| | | }, |
| | | onClose() { |
| | | console.log("onClose"); |
| | | }, |
| | | onSuccess() { |
| | | console.log("onSuccess"); |
| | | this.registerApi(); |
| | | this.show = false; |
| | | }, |
| | | onFail() { |
| | | this.msg = ""; |
| | | }, |
| | | onRefresh() { |
| | | this.msg = ""; |
| | | }, |
| | | onSelectArea() { |
| | | this.openBtn(); |
| | | }, |
| | | //打开国家列表底部弹窗 |
| | | openBtn() { |
| | | this.$refs.controlChild.open(); |
| | | }, |
| | | //获取到当前选中国家的code值 |
| | | getName(params) { |
| | | this.icon = params[1]; |
| | | this.dialCode = params[2]; |
| | | }, |
| | | agreeProt() { |
| | | this.agree = !this.agree; |
| | | }, |
| | | register() { |
| | | if (this.form.username == "") { |
| | | return this.$toast(this.$t("请输入姓名")); |
| | | } |
| | | let match = this.form.email.search(/@/); |
| | | if (this.form.email == "" || match == -1) { |
| | | return this.$toast(this.$t("请输入正确的邮箱地址")); |
| | | } |
| | | if (this.form.phone == "") { |
| | | this.$toast(this.$t("请输入手机号")); |
| | | return; |
| | | } |
| | | if (this.form.password == "") { |
| | | this.$toast(this.$t("请输入密码")); |
| | | return; |
| | | } |
| | | if (this.form.password !== this.form.rePassword) { |
| | | this.$toast(this.$t("密码不一致")); |
| | | return; |
| | | } |
| | | |
| | | if (!this.agree) { |
| | | this.$toast(this.$t("请同意服务条款")); |
| | | return; |
| | | } |
| | | this.show = true; |
| | | }, |
| | | changeIndex(index) { |
| | | this.activeIndex = index; |
| | | switch (index) { |
| | | case 0: |
| | | case 1: { |
| | | this.isArea = false; |
| | | break; |
| | | } |
| | | case 2: { |
| | | this.isArea = true; |
| | | break; |
| | | } |
| | | } |
| | | }, |
| | | async registerApi() { |
| | | this.$store.state.user.userInfo.token = undefined; |
| | | Axios.registerUser({ |
| | | username: this.form.email, |
| | | password: this.form.password, |
| | | re_password: this.form.rePassword, |
| | | type: 2, |
| | | usercode: this.form.usercode, |
| | | }) |
| | | .then((res) => { |
| | | this.GET_USERINFO(res.data); |
| | | this.bindEmail(res.data.token) |
| | | .then((val) => { |
| | | // console.log(val); |
| | | Axios.registerTest({ |
| | | username: this.form.username, |
| | | phone: this.form.phone, |
| | | email: this.form.email, |
| | | tokne: res.data.token, |
| | | }) |
| | | .then((data) => { |
| | | this.$toast(this.$t("注册成功")); |
| | | setTimeout(() => { |
| | | this.$router.push("login"); |
| | | }, 1000); |
| | | }) |
| | | .catch((error) => { |
| | | this.codeButTexst = "发送验证码"; |
| | | clearInterval(this.tiem); |
| | | if (error.code === "ECONNABORTED") { |
| | | this.$toast(this.$t("网络超时!")); |
| | | } else if (error.msg !== undefined) { |
| | | this.$toast(this.$t(error.msg)); |
| | | } |
| | | }); |
| | | }) |
| | | .catch((error) => { |
| | | this.codeButTexst = "发送验证码"; |
| | | clearInterval(this.tiem); |
| | | if (error.code === "ECONNABORTED") { |
| | | this.$toast(this.$t("网络超时!")); |
| | | } else if (error.msg !== undefined) { |
| | | this.$toast(this.$t(error.msg)); |
| | | } |
| | | }); |
| | | }) |
| | | .catch((error) => { |
| | | this.codeButTexst = "发送验证码"; |
| | | clearInterval(this.tiem); |
| | | if (error.code === "ECONNABORTED") { |
| | | this.$toast(this.$t("网络超时!")); |
| | | } else if (error.msg !== undefined) { |
| | | this.$toast(this.$t(error.msg)); |
| | | } |
| | | }); |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |
| | | |
| | | <style lang="scss" scoped> |
| | | .register { |
| | | width: 100%; |
| | | box-sizing: border-box; |
| | | padding: 32px; |
| | | font-size: 26px; |
| | | width: 100%; |
| | | box-sizing: border-box; |
| | | padding: 32px; |
| | | font-size: 26px; |
| | | } |
| | | |
| | | .top { |
| | | padding-left: 18px; |
| | | padding-top: 18px; |
| | | padding-left: 18px; |
| | | padding-top: 18px; |
| | | |
| | | img { |
| | | width: 37px; |
| | | height: 37px; |
| | | } |
| | | img { |
| | | width: 37px; |
| | | height: 37px; |
| | | } |
| | | } |
| | | |
| | | .title { |
| | | font-weight: 700; |
| | | font-size: 52px; |
| | | margin-top: 54px; |
| | | margin-bottom: 66px; |
| | | font-weight: 700; |
| | | font-size: 52px; |
| | | margin-top: 54px; |
| | | margin-bottom: 66px; |
| | | } |
| | | |
| | | .re-tab { |
| | | margin-bottom: 44px; |
| | | margin-bottom: 44px; |
| | | |
| | | div { |
| | | padding: 0 36px; |
| | | height: 68px; |
| | | line-height: 68px; |
| | | text-align: center; |
| | | border-radius: 8px; |
| | | margin-right: 20px; |
| | | div { |
| | | padding: 0 36px; |
| | | height: 68px; |
| | | line-height: 68px; |
| | | text-align: center; |
| | | border-radius: 8px; |
| | | margin-right: 20px; |
| | | } |
| | | |
| | | .active { |
| | | @include themify() { |
| | | background: themed("tab_background"); |
| | | } |
| | | |
| | | .active { |
| | | @include themify() { |
| | | background: themed("tab_background"); |
| | | } |
| | | |
| | | |
| | | @include themify() { |
| | | color: themed("text_color"); |
| | | } |
| | | @include themify() { |
| | | color: themed("text_color"); |
| | | } |
| | | } |
| | | } |
| | | |
| | | .forget { |
| | | color: #1D91FF; |
| | | font-size: 24px; |
| | | line-height: 28px; |
| | | color: #1d91ff; |
| | | font-size: 24px; |
| | | line-height: 28px; |
| | | } |
| | | |
| | | .btn { |
| | | color: #fff; |
| | | height: 88px; |
| | | line-height: 88px; |
| | | text-align: center; |
| | | font-size: 32px; |
| | | margin-top: 40px; |
| | | border-radius: 10px; |
| | | color: #fff; |
| | | height: 88px; |
| | | line-height: 88px; |
| | | text-align: center; |
| | | font-size: 32px; |
| | | margin-top: 40px; |
| | | border-radius: 10px; |
| | | } |
| | | |
| | | .noTips { |
| | | margin-top: 48px; |
| | | margin-top: 48px; |
| | | } |
| | | |
| | | .protocol { |
| | | display: flex; |
| | | align-items: center; |
| | | display: flex; |
| | | align-items: center; |
| | | height: 30px; |
| | | |
| | | i { |
| | | width: 30px; |
| | | height: 30px; |
| | | margin-right: 18px; |
| | | |
| | | i { |
| | | width: 30px; |
| | | height: 30px; |
| | | margin-right: 18px; |
| | | |
| | | img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | img { |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .code-box { |
| | | width: 100%; |
| | | display: flex; |
| | | align-items: center; |
| | | // justify-content: space-between; |
| | | |
| | | .code-but { |
| | | width: 200px; |
| | | font-size: 23px; |
| | | text-align: center; |
| | | background-color: #6ff; |
| | | margin-right: 20px; |
| | | margin-top: 0; |
| | | } |
| | | } |
| | | ::v-deep .inputCom { |
| | | width: 100%; |
| | | padding-bottom: 10px; |
| | | } |
| | | .S-but { |
| | | // background-color:; |
| | | opacity: 0.5 !important; |
| | | } |
| | | </style> |