|
@@ -0,0 +1,189 @@
|
|
|
+<!--
|
|
|
+ * @Description:
|
|
|
+ * @Author: 欧阳承珺
|
|
|
+ * @LastEditors: 欧阳承珺
|
|
|
+ * @Date: 2022-10-20 17:51:51
|
|
|
+ * @LastEditTime: 2022-10-26 10:26:29
|
|
|
+-->
|
|
|
+<!-- <script lang="ts" setup>
|
|
|
+import { ref,reactive, computed } from 'vue'
|
|
|
+import { userApi } from '@/api/user'
|
|
|
+
|
|
|
+const { registerUser } = userApi()
|
|
|
+
|
|
|
+const emit = defineEmits(['login'])
|
|
|
+const showVcode = ref(false) // 展示验证码
|
|
|
+const errMsg = ref('') // 点击注册反馈错误信息
|
|
|
+const form = reactive({
|
|
|
+ username: '',
|
|
|
+ password: '',
|
|
|
+ password_confirm:'',
|
|
|
+ code: ''
|
|
|
+ // phone_zone: '86'
|
|
|
+})
|
|
|
+
|
|
|
+const regPhone = /^1[3456789]\d{9}$/;
|
|
|
+const regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
|
|
|
+
|
|
|
+// 输入账号和密码后才能登录
|
|
|
+const loginBtnDisabled = computed<boolean>(()=> !(form.username && form.password))
|
|
|
+
|
|
|
+// 输入为手机号格式失焦显示验证码校验
|
|
|
+const handlerUsernameBlur = (e:any)=> {
|
|
|
+ showVcode.value = regPhone.test(e.target.value)
|
|
|
+}
|
|
|
+
|
|
|
+// 点击注册前置校验
|
|
|
+const vailidate = ()=> {
|
|
|
+ if(!regPhone.test(form.username) && !regEmail.test(form.username)) {
|
|
|
+ errMsg.value = '手机号/邮箱格式不对'
|
|
|
+ }else if(form.password !== form.password_confirm) {
|
|
|
+ errMsg.value = '两次输入的密码不一致'
|
|
|
+ }else if(form.password.length < 6) {
|
|
|
+ errMsg.value = '密码位数不能少于6位'
|
|
|
+ }else if(form.password.length> 16){
|
|
|
+ errMsg.value = '密码位数不能大于16位'
|
|
|
+ }else {
|
|
|
+ errMsg.value = ''
|
|
|
+ handlerRegisterUser()
|
|
|
+ }
|
|
|
+}
|
|
|
+// 弹窗关闭,初始化注册面板
|
|
|
+const resetInterfaceStatus = () => {
|
|
|
+ errMsg.value = '';
|
|
|
+ form.username = ''
|
|
|
+ form.password = ''
|
|
|
+ form.password_confirm = ''
|
|
|
+ form.code = ''
|
|
|
+ showVcode.value = false
|
|
|
+}
|
|
|
+const handlerRegisterUser = async () => {
|
|
|
+ const res = await registerUser(form)
|
|
|
+}
|
|
|
+const handlerLogin = ()=> {
|
|
|
+ emit('login','login')
|
|
|
+}
|
|
|
+
|
|
|
+defineExpose({
|
|
|
+ resetInterfaceStatus
|
|
|
+});
|
|
|
+</script> -->
|
|
|
+
|
|
|
+<script>
|
|
|
+import qs from 'qs'
|
|
|
+export default {
|
|
|
+ data() {
|
|
|
+ const regPhone = /^1[3456789]\d{9}$/
|
|
|
+ const regEmail = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/
|
|
|
+ return {
|
|
|
+ form: {
|
|
|
+ username: '',
|
|
|
+ password: '',
|
|
|
+ password_confirm:'',
|
|
|
+ code: ''
|
|
|
+ // phone_zone: '86'
|
|
|
+ },
|
|
|
+ errMsg: '',
|
|
|
+ showVcode: false,
|
|
|
+ regEmail,
|
|
|
+ regPhone,
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ loginBtnDisabled() {
|
|
|
+ return !(this.form.username && this.form.password && this.form.password_confirm)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+// 点击注册前置校验
|
|
|
+ vailidate() {
|
|
|
+ if(!this.regPhone.test(this.form.username) && !this.regEmail.test(this.form.username)) {
|
|
|
+ this.errMsg = '手机号/邮箱格式不对'
|
|
|
+ }else if(this.form.password !== this.form.password_confirm) {
|
|
|
+ this.errMsg = '两次输入的密码不一致'
|
|
|
+ }else if(this.form.password.length < 6) {
|
|
|
+ this.errMsg = '密码位数不能少于6位'
|
|
|
+ }else if(this.form.password.length> 16){
|
|
|
+ this.errMsg = '密码位数不能大于16位'
|
|
|
+ }else {
|
|
|
+ this.errMsg = ''
|
|
|
+ this.handlerRegisterUser()
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handlerRegisterUser() {
|
|
|
+ this.$axios.post('members/register',this.form).then((res)=> {
|
|
|
+ if(res.code === 200) {
|
|
|
+ this.handlerLogin(this.form)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ },
|
|
|
+ handlerLogin() {
|
|
|
+ this.$axios.post('login',qs.stringify(this.form)).then((res)=> {
|
|
|
+ this.$store.dispatch('login',res.result).then((token)=> {
|
|
|
+ this.$axios.setToken(token, 'Bearer')
|
|
|
+ this.handlerClose()
|
|
|
+ this.getUserInfo()
|
|
|
+ })
|
|
|
+ })
|
|
|
+ },
|
|
|
+ getUserInfo() {
|
|
|
+ const res = this.$axios.get('members/getMemberInfo')
|
|
|
+ if(res.code === 200) {
|
|
|
+ this.$store.commit('setUser',res.result)
|
|
|
+ // localStorage.setItem('userInfo',res.result)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ handlerUsernameBlur(e) {
|
|
|
+ this.showVcode = this.regPhone.test(e.target.value)
|
|
|
+ },
|
|
|
+ // 弹窗关闭,初始化注册面板
|
|
|
+ resetInterfaceStatus() {
|
|
|
+ this.errMsg = '';
|
|
|
+ this.form.username = ''
|
|
|
+ this.form.password = ''
|
|
|
+ this.form.password_confirm = ''
|
|
|
+ this.form.code = ''
|
|
|
+ this.showVcode = false
|
|
|
+ },
|
|
|
+ handlerChangeLogin() {
|
|
|
+ this.$emit('login','login')
|
|
|
+ },
|
|
|
+ handlerClose() {
|
|
|
+ this.$emit('close')
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+</script>
|
|
|
+
|
|
|
+<template>
|
|
|
+ <div class="user-login">
|
|
|
+ <div class="logo">
|
|
|
+ <h4 id="loginModalLabel" class="logo_PDF"></h4>
|
|
|
+ </div>
|
|
|
+ <div class="login_content">
|
|
|
+ <input id="signup_account" v-model="form.username" class="login_input_user" type="text" placeholder="手机号/邮箱" @blur="handlerUsernameBlur">
|
|
|
+ <br />
|
|
|
+ <input id="signup_pwd1" v-model="form.password" class="login_input_password" type="password" placeholder="密码(6-16个字符,区分大小写)">
|
|
|
+ <br />
|
|
|
+ <input id="signup_pwd2" v-model="form.password_confirm" class="login_input_password" type="password" placeholder="确认密码">
|
|
|
+ <br />
|
|
|
+ <div v-show="showVcode" class="vcode_content">
|
|
|
+ <input class="input_vcode_signup" placeholder="验证码">
|
|
|
+ <span class="sent-vcode sent-vcode-signup"><a>发送验证码</a></span>
|
|
|
+ </div>
|
|
|
+ <div v-show="errMsg !== ''" class="error-mess error-mess-signup">
|
|
|
+ <span id="error-message error-tip">{{errMsg}}</span>
|
|
|
+ </div>
|
|
|
+ <button id="btn-signup" type="submit" class="logging" :class="{'btn-signin': loginBtnDisabled}" :disabled="loginBtnDisabled" @click="vailidate">注册</button>
|
|
|
+ <div class="login-now">
|
|
|
+ <div class="term">
|
|
|
+ <span>轻触上面的“注册”按钮,即表示你同意我们的<a target="_blank" href="/terms">条款</a></span>
|
|
|
+ </div>
|
|
|
+ <div class="switch_login">
|
|
|
+ <span>已经有账号?<a class="cursor-pointer" @click="handlerChangeLogin">登录</a></span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|