|
@@ -40,34 +40,48 @@
|
|
|
<svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
|
|
|
</span>
|
|
|
</el-form-item>
|
|
|
-
|
|
|
+ <el-form-item prop="verify">
|
|
|
+ <el-input
|
|
|
+ ref="verify"
|
|
|
+ v-model="loginForm.verify"
|
|
|
+ placeholder="验证码"
|
|
|
+ name="verify"
|
|
|
+ type="text"
|
|
|
+ tabindex="1"
|
|
|
+ auto-complete="on"
|
|
|
+ style="width: 200px;"
|
|
|
+ />
|
|
|
+ </el-form-item>
|
|
|
+ <el-image class="verify" :src="url" @click="changeVerify()" />
|
|
|
<el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button>
|
|
|
-
|
|
|
- <div class="tips">
|
|
|
- <span style="margin-right:20px;">username: admin</span>
|
|
|
- <span> password: any</span>
|
|
|
- </div>
|
|
|
-
|
|
|
</el-form>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import { validUsername } from '@/utils/validate'
|
|
|
+import { verify } from '@/api/user'
|
|
|
|
|
|
export default {
|
|
|
name: 'Login',
|
|
|
data() {
|
|
|
const validateUsername = (rule, value, callback) => {
|
|
|
if (!validUsername(value)) {
|
|
|
- callback(new Error('Please enter the correct user name'))
|
|
|
+ callback(new Error('请输入正确的用户名'))
|
|
|
} else {
|
|
|
callback()
|
|
|
}
|
|
|
}
|
|
|
const validatePassword = (rule, value, callback) => {
|
|
|
if (value.length < 6) {
|
|
|
- callback(new Error('The password can not be less than 6 digits'))
|
|
|
+ callback(new Error('密码不能少于6位'))
|
|
|
+ } else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const validateVerify = (rule, value, callback) => {
|
|
|
+ if (!value) {
|
|
|
+ callback(new Error('请输出验证码'))
|
|
|
} else {
|
|
|
callback()
|
|
|
}
|
|
@@ -75,17 +89,25 @@ export default {
|
|
|
return {
|
|
|
loginForm: {
|
|
|
username: 'admin',
|
|
|
- password: '111111'
|
|
|
+ password: '',
|
|
|
+ verify: ''
|
|
|
},
|
|
|
loginRules: {
|
|
|
username: [{ required: true, trigger: 'blur', validator: validateUsername }],
|
|
|
- password: [{ required: true, trigger: 'blur', validator: validatePassword }]
|
|
|
+ password: [{ required: true, trigger: 'blur', validator: validatePassword }],
|
|
|
+ verify: [{ required: true, trigger: 'blur', validator: validateVerify }]
|
|
|
},
|
|
|
loading: false,
|
|
|
passwordType: 'password',
|
|
|
- redirect: undefined
|
|
|
+ redirect: undefined,
|
|
|
+ url: ''
|
|
|
}
|
|
|
},
|
|
|
+ created() {
|
|
|
+ verify().then(res => {
|
|
|
+ this.url = 'data:image/png;base64,' + btoa(new Uint8Array(res).reduce((data, byte) => data + String.fromCharCode(byte), ''))
|
|
|
+ })
|
|
|
+ },
|
|
|
watch: {
|
|
|
$route: {
|
|
|
handler: function(route) {
|
|
@@ -95,6 +117,11 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ changeVerify() {
|
|
|
+ verify().then(res => {
|
|
|
+ this.url = 'data:image/png;base64,' + btoa(new Uint8Array(res).reduce((data, byte) => data + String.fromCharCode(byte), ''))
|
|
|
+ })
|
|
|
+ },
|
|
|
showPwd() {
|
|
|
if (this.passwordType === 'password') {
|
|
|
this.passwordType = ''
|
|
@@ -109,10 +136,12 @@ export default {
|
|
|
this.$refs.loginForm.validate(valid => {
|
|
|
if (valid) {
|
|
|
this.loading = true
|
|
|
+ console.log(this.loginForm)
|
|
|
this.$store.dispatch('user/login', this.loginForm).then(() => {
|
|
|
this.$router.push({ path: this.redirect || '/' })
|
|
|
this.loading = false
|
|
|
}).catch(() => {
|
|
|
+ this.changeVerify()
|
|
|
this.loading = false
|
|
|
})
|
|
|
} else {
|
|
@@ -233,5 +262,12 @@ $light_gray:#eee;
|
|
|
cursor: pointer;
|
|
|
user-select: none;
|
|
|
}
|
|
|
+ .verify {
|
|
|
+ width: 150px;
|
|
|
+ height: 45px;
|
|
|
+ position: relative;
|
|
|
+ top: -70px;
|
|
|
+ left: 296px;
|
|
|
+ }
|
|
|
}
|
|
|
</style>
|