|
@@ -4,26 +4,38 @@
|
|
<div class="login-body">
|
|
<div class="login-body">
|
|
<div class="body-top">后台管理系统</div>
|
|
<div class="body-top">后台管理系统</div>
|
|
<div class="body-main">
|
|
<div class="body-main">
|
|
- <el-form ref="ruleForm" label-width="80px" class="demo-ruleForm">
|
|
|
|
- <el-form-item label="账号" prop="name">
|
|
|
|
|
|
+ <!-- 在你想获取的组件上 通过绑定ref来获取该组件实例 -->
|
|
|
|
+ <!-- ref="userForm" -->
|
|
|
|
+ <el-form
|
|
|
|
+ ref="userForm"
|
|
|
|
+ label-width="80px"
|
|
|
|
+ :model="userForm"
|
|
|
|
+ :rules="rules"
|
|
|
|
+ >
|
|
|
|
+ <el-form-item label="账号" prop="username">
|
|
<el-input
|
|
<el-input
|
|
prefix-icon="el-icon-user"
|
|
prefix-icon="el-icon-user"
|
|
placeholder="请输入账号..."
|
|
placeholder="请输入账号..."
|
|
size="mini"
|
|
size="mini"
|
|
|
|
+ autofocus
|
|
|
|
+ v-model="userForm.username"
|
|
></el-input>
|
|
></el-input>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
- <el-form-item label="密码" prop="region">
|
|
|
|
|
|
+ <el-form-item label="密码" prop="password">
|
|
<el-input
|
|
<el-input
|
|
prefix-icon="el-icon-key"
|
|
prefix-icon="el-icon-key"
|
|
type="password"
|
|
type="password"
|
|
show-password
|
|
show-password
|
|
placeholder="请输入密码..."
|
|
placeholder="请输入密码..."
|
|
size="mini"
|
|
size="mini"
|
|
|
|
+ v-model="userForm.password"
|
|
></el-input>
|
|
></el-input>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
<el-form-item :style="{ textAlign: 'right' }">
|
|
<el-form-item :style="{ textAlign: 'right' }">
|
|
- <el-button type="primary" round size="mini">登录</el-button>
|
|
|
|
|
|
+ <el-button type="primary" round size="mini" @click="onLogin"
|
|
|
|
+ >登录</el-button
|
|
|
|
+ >
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-form>
|
|
</el-form>
|
|
</div>
|
|
</div>
|
|
@@ -33,8 +45,59 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
|
|
+import { login } from '../api/system';
|
|
export default {
|
|
export default {
|
|
name: 'Login',
|
|
name: 'Login',
|
|
|
|
+ data() {
|
|
|
|
+ return {
|
|
|
|
+ // 添加表单数据对象
|
|
|
|
+ userForm: {
|
|
|
|
+ // 下面的属性名称 尽量和后台接口对应上
|
|
|
|
+ username: '',
|
|
|
|
+ password: '',
|
|
|
|
+ },
|
|
|
|
+ rules: {
|
|
|
|
+ username: [
|
|
|
|
+ { required: true, message: '必须输入账号!', trigger: 'blur' },
|
|
|
|
+ ],
|
|
|
|
+ password: [
|
|
|
|
+ { required: true, message: '必须输入密码!', trigger: 'blur' },
|
|
|
|
+ {
|
|
|
|
+ min: 3,
|
|
|
|
+ max: 16,
|
|
|
|
+ message: '录入的密码长度在3-16之间!',
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ },
|
|
|
|
+ ],
|
|
|
|
+ },
|
|
|
|
+ };
|
|
|
|
+ },
|
|
|
|
+ methods: {
|
|
|
|
+ async onLogin() {
|
|
|
|
+ // $refs属性 存储所有 当前组件通过ref绑定dom对象或者组件实例
|
|
|
|
+ // console.log(this.$refs);
|
|
|
|
+ // 1 首先验证表单 通过才可以将用户名和密码提交给服务器
|
|
|
|
+ let valid = await this.$refs.userForm.validate().catch((err) => false);
|
|
|
|
+ console.log(valid);
|
|
|
|
+ if (valid) {
|
|
|
|
+ // 如果valid == true 表示表单验证通过,然后 发起http请求将账号和密码提交给服务器
|
|
|
|
+ let result = await login(this.userForm);
|
|
|
|
+ // 如果服务器返回的数据中code属性值为 200 表示登录成功
|
|
|
|
+ let { code, msg, data } = result.data;
|
|
|
|
+ alert(msg);
|
|
|
|
+ if (code === 200) {
|
|
|
|
+ // localStorage只能存储字符串类型
|
|
|
|
+ localStorage.setItem('token', data.token);
|
|
|
|
+ localStorage.setItem('userInfo', JSON.stringify(data.userInfo));
|
|
|
|
+
|
|
|
|
+ // 将页面导航到主页
|
|
|
|
+ this.$router.push('/');
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ console.log(result);
|
|
|
|
+ }
|
|
|
|
+ },
|
|
|
|
+ },
|
|
};
|
|
};
|
|
</script>
|
|
</script>
|
|
<style lang="css" scoped>
|
|
<style lang="css" scoped>
|
|
@@ -53,13 +116,12 @@ export default {
|
|
|
|
|
|
.login .login-body {
|
|
.login .login-body {
|
|
width: 400px;
|
|
width: 400px;
|
|
- height: 300px;
|
|
|
|
|
|
+ height: 255px;
|
|
box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
|
|
|
|
background-color: #ccc;
|
|
background-color: #ccc;
|
|
border-radius: 10px;
|
|
border-radius: 10px;
|
|
padding-top: 20px;
|
|
padding-top: 20px;
|
|
- padding-right: 56px;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
.login .login-body .body-top {
|
|
.login .login-body .body-top {
|
|
@@ -70,12 +132,16 @@ export default {
|
|
margin-bottom: 20px;
|
|
margin-bottom: 20px;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+.login .login-body .body-main {
|
|
|
|
+ padding-right: 36px;
|
|
|
|
+}
|
|
|
|
+
|
|
.fade-down-enter-active {
|
|
.fade-down-enter-active {
|
|
- animation: fade-down 1s;
|
|
|
|
|
|
+ animation: fade-down 0.5s ease-in-out;
|
|
}
|
|
}
|
|
|
|
|
|
@keyframes fade-down {
|
|
@keyframes fade-down {
|
|
- 0% {
|
|
|
|
|
|
+ from {
|
|
transform: translateY(-100px);
|
|
transform: translateY(-100px);
|
|
opacity: 0;
|
|
opacity: 0;
|
|
}
|
|
}
|
|
@@ -84,7 +150,7 @@ export default {
|
|
transform: scale(1.1);
|
|
transform: scale(1.1);
|
|
}
|
|
}
|
|
|
|
|
|
- 100% {
|
|
|
|
|
|
+ to {
|
|
transform: translateY(0px);
|
|
transform: translateY(0px);
|
|
opacity: 1;
|
|
opacity: 1;
|
|
}
|
|
}
|