|
@@ -1,8 +1,6 @@
|
|
<template>
|
|
<template>
|
|
<div class="login-container" :style="'background-image:' + bgImage">
|
|
<div class="login-container" :style="'background-image:' + bgImage">
|
|
- <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" autocomplete="on"
|
|
|
|
- label-position="left"
|
|
|
|
- >
|
|
|
|
|
|
+ <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" autocomplete="on" label-position="left">
|
|
|
|
|
|
<div class="title-container">
|
|
<div class="title-container">
|
|
<h3 class="title">采美后台登录</h3>
|
|
<h3 class="title">采美后台登录</h3>
|
|
@@ -11,9 +9,7 @@
|
|
<span class="svg-container">
|
|
<span class="svg-container">
|
|
<svg-icon icon-class="user" />
|
|
<svg-icon icon-class="user" />
|
|
</span>
|
|
</span>
|
|
- <el-input ref="username" v-model="loginForm.username" placeholder="Username" name="username" type="text"
|
|
|
|
- tabindex="1" autocomplete="on"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-input ref="username" v-model="loginForm.username" placeholder="Username" name="username" type="text" tabindex="1" autocomplete="on" />
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
|
|
|
<el-tooltip v-model="capsTooltip" content="Caps lock is On" placement="right" manual>
|
|
<el-tooltip v-model="capsTooltip" content="Caps lock is On" placement="right" manual>
|
|
@@ -21,19 +17,14 @@
|
|
<span class="svg-container">
|
|
<span class="svg-container">
|
|
<svg-icon icon-class="password" />
|
|
<svg-icon icon-class="password" />
|
|
</span>
|
|
</span>
|
|
- <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType"
|
|
|
|
- placeholder="Password" name="password" tabindex="2" autocomplete="on" @keyup.native="checkCapslock"
|
|
|
|
- @blur="capsTooltip = false" @keyup.enter.native="handleLogin"
|
|
|
|
- />
|
|
|
|
|
|
+ <el-input :key="passwordType" ref="password" v-model="loginForm.password" :type="passwordType" placeholder="Password" name="password" tabindex="2" autocomplete="on" @keyup.native="checkCapslock" @blur="capsTooltip = false" @keyup.enter.native="handleLogin" />
|
|
<span class="show-pwd" @click="showPwd">
|
|
<span class="show-pwd" @click="showPwd">
|
|
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
|
|
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
|
|
</span>
|
|
</span>
|
|
</el-form-item>
|
|
</el-form-item>
|
|
</el-tooltip>
|
|
</el-tooltip>
|
|
|
|
|
|
- <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;"
|
|
|
|
- @click.native.prevent="handleLogin"
|
|
|
|
- >登录</el-button>
|
|
|
|
|
|
+ <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">登录</el-button>
|
|
</el-form>
|
|
</el-form>
|
|
|
|
|
|
<el-dialog title="Or connect with" :visible.sync="showDialog">
|
|
<el-dialog title="Or connect with" :visible.sync="showDialog">
|
|
@@ -46,9 +37,7 @@
|
|
</template>
|
|
</template>
|
|
|
|
|
|
<script>
|
|
<script>
|
|
-import {
|
|
|
|
- validUsername
|
|
|
|
-} from '@/utils/validate'
|
|
|
|
|
|
+import { validUsername } from '@/utils/validate'
|
|
|
|
|
|
export default {
|
|
export default {
|
|
name: 'Login',
|
|
name: 'Login',
|
|
@@ -69,20 +58,24 @@ export default {
|
|
}
|
|
}
|
|
return {
|
|
return {
|
|
loginForm: {
|
|
loginForm: {
|
|
- username: 'charles',
|
|
|
|
|
|
+ username: 'sysadmin',
|
|
password: '123456'
|
|
password: '123456'
|
|
},
|
|
},
|
|
loginRules: {
|
|
loginRules: {
|
|
- username: [{
|
|
|
|
- required: true,
|
|
|
|
- trigger: 'blur',
|
|
|
|
- validator: validateUsername
|
|
|
|
- }],
|
|
|
|
- password: [{
|
|
|
|
- required: true,
|
|
|
|
- trigger: 'blur',
|
|
|
|
- validator: validatePassword
|
|
|
|
- }]
|
|
|
|
|
|
+ username: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ validator: validateUsername
|
|
|
|
+ }
|
|
|
|
+ ],
|
|
|
|
+ password: [
|
|
|
|
+ {
|
|
|
|
+ required: true,
|
|
|
|
+ trigger: 'blur',
|
|
|
|
+ validator: validatePassword
|
|
|
|
+ }
|
|
|
|
+ ]
|
|
},
|
|
},
|
|
passwordType: 'password',
|
|
passwordType: 'password',
|
|
capsTooltip: false,
|
|
capsTooltip: false,
|
|
@@ -95,7 +88,7 @@ export default {
|
|
},
|
|
},
|
|
watch: {
|
|
watch: {
|
|
$route: {
|
|
$route: {
|
|
- handler: function(route) {
|
|
|
|
|
|
+ handler: function (route) {
|
|
const query = route.query
|
|
const query = route.query
|
|
if (query) {
|
|
if (query) {
|
|
this.redirect = query.redirect
|
|
this.redirect = query.redirect
|
|
@@ -120,10 +113,8 @@ export default {
|
|
},
|
|
},
|
|
methods: {
|
|
methods: {
|
|
checkCapslock(e) {
|
|
checkCapslock(e) {
|
|
- const {
|
|
|
|
- key
|
|
|
|
- } = e
|
|
|
|
- this.capsTooltip = key && key.length === 1 && (key >= 'A' && key <= 'Z')
|
|
|
|
|
|
+ const { key } = e
|
|
|
|
+ this.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z'
|
|
},
|
|
},
|
|
showPwd() {
|
|
showPwd() {
|
|
if (this.passwordType === 'password') {
|
|
if (this.passwordType === 'password') {
|
|
@@ -139,7 +130,8 @@ export default {
|
|
this.$refs.loginForm.validate(valid => {
|
|
this.$refs.loginForm.validate(valid => {
|
|
if (valid) {
|
|
if (valid) {
|
|
this.loading = true
|
|
this.loading = true
|
|
- this.$store.dispatch('user/login', this.loginForm)
|
|
|
|
|
|
+ this.$store
|
|
|
|
+ .dispatch('user/login', this.loginForm)
|
|
.then(() => {
|
|
.then(() => {
|
|
this.$router.push({
|
|
this.$router.push({
|
|
path: this.redirect || '/',
|
|
path: this.redirect || '/',
|
|
@@ -187,127 +179,127 @@ export default {
|
|
</script>
|
|
</script>
|
|
|
|
|
|
<style lang="scss">
|
|
<style lang="scss">
|
|
- /* 修复input 背景不协调 和光标变色 */
|
|
|
|
- /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
|
|
|
|
|
|
+/* 修复input 背景不协调 和光标变色 */
|
|
|
|
+/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
|
|
|
|
|
|
- $bg:#283443;
|
|
|
|
- $light_gray:#fff;
|
|
|
|
- $cursor: #fff;
|
|
|
|
|
|
+$bg: #283443;
|
|
|
|
+$light_gray: #fff;
|
|
|
|
+$cursor: #fff;
|
|
|
|
|
|
- @supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
|
|
|
|
- .login-container .el-input input {
|
|
|
|
- color: $cursor;
|
|
|
|
- }
|
|
|
|
|
|
+@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
|
|
|
|
+ .login-container .el-input input {
|
|
|
|
+ color: $cursor;
|
|
}
|
|
}
|
|
|
|
+}
|
|
|
|
|
|
- /* reset element-ui css */
|
|
|
|
- .login-container {
|
|
|
|
- background-repeat: no-repeat;
|
|
|
|
- background-position: center top;
|
|
|
|
- background-size: cover;
|
|
|
|
- .el-input {
|
|
|
|
- display: inline-block;
|
|
|
|
- height: 47px;
|
|
|
|
- width: 85%;
|
|
|
|
|
|
+/* reset element-ui css */
|
|
|
|
+.login-container {
|
|
|
|
+ background-repeat: no-repeat;
|
|
|
|
+ background-position: center top;
|
|
|
|
+ background-size: cover;
|
|
|
|
+ .el-input {
|
|
|
|
+ display: inline-block;
|
|
|
|
+ height: 47px;
|
|
|
|
+ width: 85%;
|
|
|
|
|
|
- input {
|
|
|
|
- background: transparent;
|
|
|
|
- border: 0px;
|
|
|
|
- -webkit-appearance: none;
|
|
|
|
- border-radius: 0px;
|
|
|
|
- padding: 12px 5px 12px 15px;
|
|
|
|
- color: $light_gray;
|
|
|
|
- height: 47px;
|
|
|
|
- caret-color: $cursor;
|
|
|
|
|
|
+ input {
|
|
|
|
+ background: transparent;
|
|
|
|
+ border: 0px;
|
|
|
|
+ -webkit-appearance: none;
|
|
|
|
+ border-radius: 0px;
|
|
|
|
+ padding: 12px 5px 12px 15px;
|
|
|
|
+ color: $light_gray;
|
|
|
|
+ height: 47px;
|
|
|
|
+ caret-color: $cursor;
|
|
|
|
|
|
- &:-webkit-autofill {
|
|
|
|
- box-shadow: 0 0 0px 1000px $bg inset !important;
|
|
|
|
- -webkit-text-fill-color: $cursor !important;
|
|
|
|
- }
|
|
|
|
|
|
+ &:-webkit-autofill {
|
|
|
|
+ box-shadow: 0 0 0px 1000px $bg inset !important;
|
|
|
|
+ -webkit-text-fill-color: $cursor !important;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- .el-form-item {
|
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
- background: rgba(0, 0, 0, 0.1);
|
|
|
|
- border-radius: 5px;
|
|
|
|
- color: #454545;
|
|
|
|
- }
|
|
|
|
|
|
+ .el-form-item {
|
|
|
|
+ border: 1px solid rgba(255, 255, 255, 0.1);
|
|
|
|
+ background: rgba(0, 0, 0, 0.1);
|
|
|
|
+ border-radius: 5px;
|
|
|
|
+ color: #454545;
|
|
}
|
|
}
|
|
|
|
+}
|
|
</style>
|
|
</style>
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
<style lang="scss" scoped>
|
|
- $bg:#2d3a4b;
|
|
|
|
- $dark_gray:#889aa4;
|
|
|
|
- $light_gray:#eee;
|
|
|
|
|
|
+$bg: #2d3a4b;
|
|
|
|
+$dark_gray: #889aa4;
|
|
|
|
+$light_gray: #eee;
|
|
|
|
|
|
- .login-container {
|
|
|
|
- min-height: 100%;
|
|
|
|
- width: 100%;
|
|
|
|
- background-color: $bg;
|
|
|
|
- overflow: hidden;
|
|
|
|
|
|
+.login-container {
|
|
|
|
+ min-height: 100%;
|
|
|
|
+ width: 100%;
|
|
|
|
+ background-color: $bg;
|
|
|
|
+ overflow: hidden;
|
|
|
|
|
|
- .login-form {
|
|
|
|
- position: relative;
|
|
|
|
- width: 400px;
|
|
|
|
- max-width: 100%;
|
|
|
|
- padding: 160px 35px 0;
|
|
|
|
- margin: 0 auto;
|
|
|
|
- overflow: hidden;
|
|
|
|
- }
|
|
|
|
|
|
+ .login-form {
|
|
|
|
+ position: relative;
|
|
|
|
+ width: 400px;
|
|
|
|
+ max-width: 100%;
|
|
|
|
+ padding: 160px 35px 0;
|
|
|
|
+ margin: 0 auto;
|
|
|
|
+ overflow: hidden;
|
|
|
|
+ }
|
|
|
|
|
|
- .tips {
|
|
|
|
- font-size: 14px;
|
|
|
|
- color: #fff;
|
|
|
|
- margin-bottom: 10px;
|
|
|
|
|
|
+ .tips {
|
|
|
|
+ font-size: 14px;
|
|
|
|
+ color: #fff;
|
|
|
|
+ margin-bottom: 10px;
|
|
|
|
|
|
- span {
|
|
|
|
- &:first-of-type {
|
|
|
|
- margin-right: 16px;
|
|
|
|
- }
|
|
|
|
|
|
+ span {
|
|
|
|
+ &:first-of-type {
|
|
|
|
+ margin-right: 16px;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- .svg-container {
|
|
|
|
- padding: 6px 5px 6px 15px;
|
|
|
|
- color: $dark_gray;
|
|
|
|
- vertical-align: middle;
|
|
|
|
- width: 30px;
|
|
|
|
- display: inline-block;
|
|
|
|
- }
|
|
|
|
|
|
+ .svg-container {
|
|
|
|
+ padding: 6px 5px 6px 15px;
|
|
|
|
+ color: $dark_gray;
|
|
|
|
+ vertical-align: middle;
|
|
|
|
+ width: 30px;
|
|
|
|
+ display: inline-block;
|
|
|
|
+ }
|
|
|
|
|
|
- .title-container {
|
|
|
|
- position: relative;
|
|
|
|
|
|
+ .title-container {
|
|
|
|
+ position: relative;
|
|
|
|
|
|
- .title {
|
|
|
|
- font-size: 26px;
|
|
|
|
- color: $light_gray;
|
|
|
|
- margin: 0px auto 40px auto;
|
|
|
|
- text-align: center;
|
|
|
|
- font-weight: bold;
|
|
|
|
- }
|
|
|
|
|
|
+ .title {
|
|
|
|
+ font-size: 26px;
|
|
|
|
+ color: $light_gray;
|
|
|
|
+ margin: 0px auto 40px auto;
|
|
|
|
+ text-align: center;
|
|
|
|
+ font-weight: bold;
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
|
|
- .show-pwd {
|
|
|
|
- position: absolute;
|
|
|
|
- right: 10px;
|
|
|
|
- top: 7px;
|
|
|
|
- font-size: 16px;
|
|
|
|
- color: $dark_gray;
|
|
|
|
- cursor: pointer;
|
|
|
|
- user-select: none;
|
|
|
|
- }
|
|
|
|
|
|
+ .show-pwd {
|
|
|
|
+ position: absolute;
|
|
|
|
+ right: 10px;
|
|
|
|
+ top: 7px;
|
|
|
|
+ font-size: 16px;
|
|
|
|
+ color: $dark_gray;
|
|
|
|
+ cursor: pointer;
|
|
|
|
+ user-select: none;
|
|
|
|
+ }
|
|
|
|
|
|
- .thirdparty-button {
|
|
|
|
- position: absolute;
|
|
|
|
- right: 0;
|
|
|
|
- bottom: 6px;
|
|
|
|
- }
|
|
|
|
|
|
+ .thirdparty-button {
|
|
|
|
+ position: absolute;
|
|
|
|
+ right: 0;
|
|
|
|
+ bottom: 6px;
|
|
|
|
+ }
|
|
|
|
|
|
- @media only screen and (max-width: 470px) {
|
|
|
|
- .thirdparty-button {
|
|
|
|
- display: none;
|
|
|
|
- }
|
|
|
|
|
|
+ @media only screen and (max-width: 470px) {
|
|
|
|
+ .thirdparty-button {
|
|
|
|
+ display: none;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+}
|
|
</style>
|
|
</style>
|