<template> <v-container fill-height> <v-layout align-center justify-center> <v-flex text-xs-center xs8 sm6 md4 lg2> <img src="../assets/brand.png"/> <h3 class="pt-3">Log in</h3> <v-alert outline v-if="msg" color="error" :value="true" transition="fade-transition" >{{ msg }}</v-alert> <p v-else>But I corrected them, sir.</p> <v-form @submit.prevent="submit"> <v-text-field label="Username" v-model="credentials.username" required autofocus /> <v-text-field label="Password" v-model="credentials.password" type="password" required /> <v-btn :loading="loading" type="submit" color="primary">Access</v-btn> </v-form> </v-flex> </v-layout> </v-container> </template> <script> import {mapActions, mapState} from 'vuex' export default { name: 'grady-login', data () { return { credentials: { username: '', password: '' }, loading: false } }, computed: { ...mapState({ msg: state => state.authentication.message, userRole: state => state.authentication.userRole }) }, methods: { ...mapActions([ 'getJWT', 'getUserRole', 'getJWTTimeDelta' ]), submit () { this.loading = true this.getJWT(this.credentials).then(() => { this.getUserRole().then(() => { this.$router.push({name: 'home'}) }) this.getJWTTimeDelta() this.loading = false }).catch(() => { this.loading = false }) } } } </script> <style scoped> </style>