2023-04-11 14:17:57 +08:00

124 lines
4.7 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>
<div style="text-align: center;margin: 0 20px">
<div style="margin-top: 100px">
<div style="font-size: 25px;font-weight: bold">注册新用户</div>
<div style="font-size: 14px;color: grey">欢迎注册我们的学习平台请在下方填写相关信息</div>
</div>
<div style="margin-top: 50px">
<el-form :model="form" :rules="rules" @validate="onValidate">
<el-form-item prop="username">
<el-input v-model="form.username" type="text" placeholder="用户名">
<template #prefix>
<el-icon><User /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input v-model="form.password" type="password" placeholder="密码">
<template #prefix>
<el-icon><Lock /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item prop="password_repeat">
<el-input v-model="form.password_repeat" type="password" placeholder="重复密码">
<template #prefix>
<el-icon><Lock /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item prop="email">
<el-input v-model="form.email" type="email" placeholder="电子邮件地址">
<template #prefix>
<el-icon><Message /></el-icon>
</template>
</el-input>
</el-form-item>
<el-form-item>
<el-row :gutter="10" style="width: 100%">
<el-col :span="17">
<el-input v-model="form.code" type="text" placeholder="请输入验证码">
<template #prefix>
<el-icon><EditPen /></el-icon>
</template>
</el-input>
</el-col>
<el-col :span="5">
<el-button type="success" :disabled="!isEmailValid">获取验证码</el-button>
</el-col>
</el-row>
</el-form-item>
</el-form>
</div>
<div style="margin-top: 80px">
<el-button style="width: 270px" type="warning" plain>立即注册</el-button>
</div>
<div style="margin-top: 20px">
<span style="font-size: 14px;line-height: 15px;color: grey">已有账号? </span>
<el-link type="primary" style="translate: 0 -2px" @click="router.push('/')">立即登录</el-link>
</div>
</div>
</template>
<script setup>
import {EditPen, Lock, Message, User} from "@element-plus/icons-vue";
import router from "@/router";
import {reactive, ref} from "vue";
const form = reactive({
username: '',
password: '',
password_repeat: '',
email: '',
code: ''
})
const validateUsername = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入用户名'))
} else if(!/^[a-zA-Z0-9\u4e00-\u9fa5]+$/.test(value)){
callback(new Error('用户名不能包含特殊字符,只能是中文/英文'))
} else {
callback()
}
}
const validatePassword = (rule, value, callback) => {
if (value === '') {
callback(new Error('请再次输入密码'))
} else if (value !== form.password) {
callback(new Error("两次输入的密码不一致"))
} else {
callback()
}
}
const rules = {
username: [
{ validator: validateUsername, trigger: ['blur', 'change'] },
{ min: 2, max: 8, message: '用户名的长度必须在2-8个字符之间', trigger: ['blur', 'change'] },
],
password: [
{ required: true, message: '请输入密码', trigger: 'blur' },
{ min: 6, max: 16, message: '密码的长度必须在6-16个字符之间', trigger: ['blur', 'change'] }
],
password_repeat: [
{ validator: validatePassword, trigger: ['blur', 'change'] },
],
email: [
{ required: true, message: '请输入邮件地址', trigger: 'blur' },
{type: 'email', message: '请输入合法的电子邮件地址', trigger: ['blur', 'change']}
]
}
const isEmailValid = ref(false)
const onValidate = (prop, isValid) => {
if(prop === 'email')
isEmailValid.value = isValid
}
</script>
<style scoped>
</style>