vue.js完成登录注册项目
1.使用 Vue CLI 搭建 Vue 项目
打开 VS code,选择【文件】>【打开文件夹】打开本机的某个文件夹。选择【终端】>【新建终端】新建终端。
终端为 powershell 窗口,点击右侧的下拉框,选择【选择默认 Shell】。
终端
在弹出框中选择【Command Prompt】将终端的默认 Shell 改为 cmd。
选择终端shell
在终端窗口点击“加号图标”新建 cmd 窗口。
新建终端
在终端中执行以下命令新建 Vue 项目。
vue create login
选择【default(babel,eslint)】,按下回车键。
搭建Vue项目1
等待 Vue 项目构建完成,构建成功结果如下。
搭建Vue项目2
在终端中执行以下命令进入“login”文件夹。
cd .\login
2.在终端执行以下命令在改项目中安装 Vue Router 和 Element UI。
npm i element-ui vue-router -S
安装成功结果如下图。

安装Vue Router和Element UI
3.首先利用Element UI layout布局或者容器布局的方式完成页面布局
在入口文件main.js中引入element UI
import ElementUI from 'element-ui';
import "element-ui/lib/theme-chalk/index.css";
Vue.use(ElementUI);
例如以下主要利用row col span24分栏和flex justify,设置好长宽和横向灵活居中对齐的布局
<template>
<div class="register">
<el-form class="form" :rules="rules" :model="form" ref="form" label-width="100px">
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label-width="70px">
<span>
<font color="blue" size="3">注册登录页面</font>
</span>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label="用户名" label-width="80px" prop="name">
<el-input class="item" v-model="form.name"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label="工号" label-width="80px" prop="id">
<el-input class="item" v-model="form.id"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label="身份证号" label-width="80px" prop="idcard">
<el-input class="item" v-model="form.idcard"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label="手机号" label-width="80px" prop="number">
<el-input class="item" v-model="form.number"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label="密码" label-width="80px" prop="password">
<el-input class="item" type="password" v-model="form.password"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label="确认密码" label-width="80px" prop="password2">
<el-input class="item" type="password2" v-model="form.password2"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item>
<el-button type="primary" @click="onSubmit">确定</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
4.设置rules限制输入规则
可以使用表单验证插件vue validator。Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。
rules格式如下
export default {
data() {
return {
form: {},
rules: {
name: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{ min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
],
id: [
{ required: true, message: "请输入工号", trigger: "blur" },
{ min: 5, max: 5, message: "工号输入错误", trigger: "blur" }
],
idcard: [{ required: true, message: "请输身份证号", trigger: "blur" }],
number: [{ required: true, message: "请输手机号", trigger: "blur" }],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
{ min: 6, max: 12, message: "长度在 6 到 12 个字符", trigger: "blur" }
],
password2: [
{ required: true, message: "请再次输入密码", trigger: "blur" }
]
}
};
},
自定义验证规则
首先我们为了方便调用验证规则,新建一个js文件,写上验证方法,然后引入验证方法,例如新建文件为validate.js
import {validatePhone} from '../validate'
然后在export default 中定义rule规则
export default {
data() {
return {
form: {},
rules: {
name: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{ min: 3, max: 5, message: "长度在 2 到 4 个字符", trigger: "blur" }
],
id: [
{ required: true, message: "请输入工号", trigger: "blur" },
{ min: 5, max: 5, message: "工号输入错误", trigger: "blur" }
],
idcard: [
{ required: true, message: "请输身份证号", trigger: "blur" },
{ validator: validateIdNo, trigger: "blur" }
],
number: [
{ required: true, message: "请输手机号", trigger: "blur" },
{ validator: validatePhone, trigger: "blur" }
],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
{ min: 6, max: 12, message: "长度在 6 到 12 个字符", trigger: "blur" }
],
password2: [
{ required: true, message: "请再次输入密码", trigger: "blur" }
]
}
};
},
如以下是几种常用的验证方法
/*是否合法IP地址*/
export function validateIP(rule, value,callback) {
if(value==''||value==undefined||value==null){
callback();
}else {
const reg = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/;
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的IP地址'));
} else {
callback();
}
}
}
/* 是否手机号码或者固话*/
export function validatePhoneTwo(rule, value, callback) {
const reg = /^((0\d{2,3}-\d{7,8})|(1[34578]\d{9}))$/;;
if (value == '' || value == undefined || value == null) {
callback();
} else {
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的电话号码或者固话号码'));
} else {
callback();
}
}
}
/* 是否固话*/
export function validateTelphone(rule, value,callback) {
const reg =/0\d{2}-\d{7,8}/;
if(value==''||value==undefined||value==null){
callback();
}else {
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的固话(格式:区号+号码,如010-1234567)'));
} else {
callback();
}
}
}
/* 是否手机号码*/
export function validatePhone(rule, value,callback) {
const reg =/^[1][3,4,5,7,8][0-9]{9}$/;
if(value==''||value==undefined||value==null){
callback();
}else {
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的电话号码'));
} else {
callback();
}
}
}
/* 是否身份证号码*/
export function validateIdNo(rule, value,callback) {
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if(value==''||value==undefined||value==null){
callback();
}else {
if ((!reg.test(value)) && value != '') {
callback(new Error('请输入正确的身份证号码'));
} else {
callback();
}
}
}
/* 是否邮箱*/
export function validateEMail(rule, value,callback) {
const reg =/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/;
if(value==''||value==undefined||value==null){
callback();
}else{
if (!reg.test(value)){
callback(new Error('请输入正确的邮箱地址'));
} else {
callback();
}
}
}
/* 合法uri*/
export function validateURL(textval) {
const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
return urlregex.test(textval);
}
/*验证内容是否英文数字以及下划线*/
export function isPassword(rule, value, callback) {
const reg =/^[_a-zA-Z0-9]+$/;
if(value==''||value==undefined||value==null){
callback();
} else {
if (!reg.test(value)){
callback(new Error('密码仅由英文字母,数字以及下划线组成'));
} else {
callback();
}
}
}
/*自动检验数值的范围*/
export function checkMax20000(rule, value, callback) {
if (value == '' || value == undefined || value == null) {
callback();
} else if (!Number(value)) {
callback(new Error('请输入[1,20000]之间的数字'));
} else if (value < 1 || value > 20000) {
callback(new Error('请输入[1,20000]之间的数字'));
} else {
callback();
}
}
//验证数字输入框最大数值,32767
export function checkMaxVal(rule, value,callback) {
if (value < 0 || value > 32767) {
callback(new Error('请输入[0,32767]之间的数字'));
} else {
callback();
}
}
//验证是否1-99之间
export function isOneToNinetyNine(rule, value, callback) {
if (!value) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入正整数'));
} else {
const re = /^[1-9][0-9]{0,1}$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入正整数,值为【1,99】'));
} else {
callback();
}
}
}, 0);
}
// 验证是否整数
export function isInteger(rule, value, callback) {
if (!value) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入正整数'));
} else {
const re = /^[0-9]*[1-9][0-9]*$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入正整数'));
} else {
callback();
}
}
}, 0);
}
// 验证是否整数,非必填
export function isIntegerNotMust(rule, value, callback) {
if (!value) {
callback();
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入正整数'));
} else {
const re = /^[0-9]*[1-9][0-9]*$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入正整数'));
} else {
callback();
}
}
}, 1000);
}
// 验证是否是[0-1]的小数
export function isDecimal(rule, value, callback) {
if (!value) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入[0,1]之间的数字'));
} else {
if (value < 0 || value > 1) {
callback(new Error('请输入[0,1]之间的数字'));
} else {
callback();
}
}
}, 100);
}
// 验证是否是[1-10]的小数,即不可以等于0
export function isBtnOneToTen(rule, value, callback) {
if (typeof value == 'undefined') {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入正整数,值为[1,10]'));
} else {
if (!(value == '1' || value == '2' || value == '3' || value == '4' || value == '5' || value == '6' || value == '7' || value == '8' || value == '9' || value == '10')) {
callback(new Error('请输入正整数,值为[1,10]'));
} else {
callback();
}
}
}, 100);
}
// 验证是否是[1-100]的小数,即不可以等于0
export function isBtnOneToHundred(rule, value, callback) {
if (!value) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入整数,值为[1,100]'));
} else {
if (value < 1 || value > 100) {
callback(new Error('请输入整数,值为[1,100]'));
} else {
callback();
}
}
}, 100);
}
// 验证是否是[0-100]的小数
export function isBtnZeroToHundred(rule, value, callback) {
if (!value) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (!Number(value)) {
callback(new Error('请输入[1,100]之间的数字'));
} else {
if (value < 0 || value > 100) {
callback(new Error('请输入[1,100]之间的数字'));
} else {
callback();
}
}
}, 100);
}
// 验证端口是否在[0,65535]之间
export function isPort(rule, value, callback) {
if (!value) {
return callback(new Error('输入不可以为空'));
}
setTimeout(() => {
if (value == '' || typeof(value) == undefined) {
callback(new Error('请输入端口值'));
} else {
const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入在[0-65535]之间的端口值'));
} else {
callback();
}
}
}, 100);
}
// 验证端口是否在[0,65535]之间,非必填,isMust表示是否必填
export function isCheckPort(rule, value, callback) {
if (!value) {
callback();
}
setTimeout(() => {
if (value == '' || typeof(value) == undefined) {
//callback(new Error('请输入端口值'));
} else {
const re = /^([0-9]|[1-9]\d|[1-9]\d{2}|[1-9]\d{3}|[1-5]\d{4}|6[0-4]\d{3}|65[0-4]\d{2}|655[0-2]\d|6553[0-5])$/;
const rsCheck = re.test(value);
if (!rsCheck) {
callback(new Error('请输入在[0-65535]之间的端口值'));
} else {
callback();
}
}
}, 100);
}
/* 小写字母*/
export function validateLowerCase(str) {
const reg = /^[a-z]+$/;
return reg.test(str);
}
/*保留2为小数*/
export function validatetoFixedNew(str) {
return str ;
}
/* 验证key*/
// export function validateKey(str) {
// var reg = /^[a-z_\-:]+$/;
// return reg.test(str);
// }
/* 大写字母*/
export function validateUpperCase(str) {
const reg = /^[A-Z]+$/;
return reg.test(str);
}
/* 大小写字母*/
export function validatAlphabets(str) {
const reg = /^[A-Za-z]+$/;
return reg.test(str);
}
5.设置路由
首先在入口文件main.js中引入router
import VueRouter from "vue-router";//引入路由
Vue.use(VueRouter);//安装插件
新建一个主页面,并留坑,用来显示链接的页面
<template>
<div class="login">
<el-form class="form" :rules="rules" :model="form" ref="form" label-width="100px">
<el-row type="flex" justify="center">
<el-col :span="5">
<el-form-item label-width="70px">
<span>
<font color="blue" size="3">注册登录页面</font>
</span>
</el-form-item>
</el-col>
</el-row>
<el-row type="flex" justify="center">
<el-form-item>
<router-link to="/login">登录</router-link>
</el-form-item>
<el-form-item>
<router-link to="/register">注册</router-link>
</el-form-item>
</el-row>
</el-form>
<router-view></router-view>//留坑,连接的页面在这显示
</div>
</template>
并在主页面引入路由插件,引入链接页面插件,并创建路由对象设置路由规则
<script>
import VueRouter from "vue-router";
import register from "./register.vue";
import login from "./login.vue";
const routes = [
{ path: "/register", component: register },
{ path: "/login", component: login }
];
const router = new VueRouter({
routes // short for `routes: routes`
});
export default {
name: "home",
router,
props: {
msg: String
}
};
</script>
6.添加确定按钮验证格式
export default {
data() {
return {
form: {
name: "",
password: ""
},
rules: {
name: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{ min: 3, max: 5, message: "长度在 2 到 4 个字符", trigger: "blur" }
],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
{ min: 6, max: 12, message: "长度在 6 到 12 个字符", trigger: "blur" }
]
}
};
},
methods: {
onSubmit() {
for (var key in this.form) {
if (this.form[key] === "") {
alert("请按要求填写全部信息");
return;
}
}
//通过循环form表单内容,对应的提示paramTips内容this.Tips为自己写的提示方法
}
}
};
},
rules: {
name: [
{ required: true, message: "请输入用户名", trigger: "blur" },
{ min: 3, max: 5, message: "长度在 2 到 4 个字符", trigger: "blur" }
],
password: [
{ required: true, message: "请输入密码", trigger: "blur" },
{ min: 6, max: 12, message: "长度在 6 到 12 个字符", trigger: "blur" }
]
}
};
},
methods: {
onSubmit() {
for (var key in this.form) {
if (this.form[key] === “”) {
alert(“请按要求填写全部信息”);
return;
}
}
//通过循环form表单内容,对应的提示paramTips内容this.Tips为自己写的提示方法
}
}
};
``
本教程详细介绍了如何使用Vue CLI搭建Vue项目,并结合Vue Router和Element UI实现登录注册功能。首先,通过Vue CLI创建项目并安装必要的依赖。接着,利用Element UI布局组件设计页面结构,并设置自定义验证规则确保用户输入的有效性。然后,配置路由以实现页面间的导航。最后,添加确定按钮并实现表单验证,确保所有字段已填写。
2094

被折叠的 条评论
为什么被折叠?



