项目-登录
1.启动后台项目
进入 vue-api-server 目录,运行如下命令,进行恢复安装
npm install
创建导入数据库后运行以下命令启动项目后台
node app.js
2.项目初始化
2.1码云创建仓库
创建仓库 shop-vue
并且把项目上传到仓库 以免电脑出问题丢失项目
2.2 本地创建项目
执行如下命令,在本地创建项目(建议目录中不要有中文),按照提示一步步操作
vue create vue-shop
2.3 将本地项目推送到远程仓库
按照上面说明,进行本地操作
- 本地 vue-shop 目录下新建 README.md ,可以使用 touch 命令,或者手动创建
- 添加 README.md 到暂存区 git add README.md
- 提交更改 git commit -m 'first commit
- 添加对应的远程仓库 git remote add origin … ,注意要使用自己的地址,别用我的地址
- 推送本地仓库到远程仓库 git push -u origin master
3.配置element-ui
先安装
npm i element-ui -S
在main.js中引入:
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
Vue.use(Element)
4.实现登录功能
创建新分支login,在新分支上进行开发
git checkout -b login
git branch
安装less-loader
npm install less less-loader --save-dev
5.页面代码
登录主页面代码:
<template>
<div class="login-container">
<div class="login-box">
<!-- 网站logo -->
<div class="logo-box">
<img src="./image/22.jpg" alt />
</div>
<!-- 表单 -->
<el-form ref="form" :model="loginForm" class="loginForm" :rules="rules">
<el-form-item prop="username">
<el-input
v-model="loginForm.username"
placeholder="输入用户名"
prefix-icon="el-icon-user-solid"
></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
v-model="loginForm.password"
placeholder="输入密码"
prefix-icon="el-icon-view"
></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">登录</el-button>
<el-button type="info">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
export default {
data () {
return {
loginForm: {
username: '',
password: ''
},
rules: {
username: [
{ required: true, message: '用户名不能为空', trigger: 'blur' },
{ min: 3, max: 6, message: '长度在 3 到 6 个字符', trigger: 'blur' }
],
password: [
{ required: true, message: '密码不能为空', trigger: 'blur' },
{ min: 6, max: 12, message: '长度在 6 到 12 个字符', trigger: 'blur' }
]
}
}
},
methods: {
async submitForm (form) {
try {
await this.$refs.form.validate()
// 验证通过继续执行登录逻辑
const res = await this.$http.post('login', this.loginForm)
const { status, msg } = res.data.meta
if (status === 400) {
console.log(msg)
return false
}
localStorage.setItem('token', res.data.data.token)
this.$router.push('home')
} catch (err) {
console.log(err)
}
// this.$refs.form.validate(valid => {
// console.log(valid)
// if (valid === false) {
// console.log('验证失败')
// return false
// }
// // console.log(this.$http)
// this.$http.post('login', this.loginForm).then(res => {
// const status = res.data.meta.status
// if (status === 400) {
// // 登陆失败 显示错误
// console.log(res.data.meta.msg)
// } else {
// localStorage.setItem('token', res.data.data.token)
// }
// })
// })
}
}
}
</script>
<style lang="less" scoped>
.login-container {
background-color: #303133;
height: 100%;
.login-box {
width: 450px;
height: 310px;
background-color: #fff;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
border-radius: 5px;
.logo-box {
position: absolute;
width: 150px;
height: 150px;
left: 50%;
transform: translate(-50%, -50%);
border-radius: 50%;
background: #fff;
padding: 5px;
box-shadow: 0 0 10px #eee;
img {
width: 100%;
height: 100%;
border-radius: 50%;
}
}
.loginForm {
position: absolute;
top: 120px;
width: 100%;
padding: 0 20px;
box-sizing: border-box;
text-align: center;
}
}
}
</style>
登录成功页面:
<template>
<div class="home">
this is home
<el-button type="info" @click="logout"> 退出 </el-button>
</div>
</template>
<script>
export default {
methods: {
logout () {
window.sessionStorage.clear()
this.$router.push('/login')
}
}
}
</script>
<style lang="less" scoped>
</style>
路由:
import Vue from 'vue'
import VueRouter from 'vue-router'
// 下面导入的是login目录下的index.vue 可省略
import Login from '../views/login/index.vue'
import Home from '..//views/Home/index.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/login',
name: 'Login',
component: Login
},
{
path: '/home',
name: 'Home',
component: Home
}
]
const router = new VueRouter({
routes
})
export default router
6.运行截图
登陆页面:
登陆成功: