<template> <q-page padding class="fit row justify-center items-center content-center"> <q-card class="col-xs-11 col-sm-8 col-md-6 col-lg-4 justify-center items-center content-center" > <q-toolbar class="bg-primary text-white"> <q-toolbar-title> Login </q-toolbar-title> </q-toolbar> <q-card-section> <q-form ref="LoginForm" @submit="doLogin" class="q-gutter-md"> <q-input filled v-model="userid" label="Benutzername oder E-Mail" :rules="rules" /> <q-input filled v-model="password" type="password" label="Password" :rules="rules" /> <div class="row justify-end"> <q-btn label="Login" type="submit" color="primary" /> </div> </q-form> </q-card-section> </q-card> </q-page> </template> <script lang="ts"> import { defineComponent, ref } from '@vue/composition-api'; import { Loading } from 'quasar'; export default defineComponent({ // name: 'PageName' setup(_, { root }) { const mainRoute = { name: 'user-main' }; /* Stuff for the real login page */ const userid = ref(''); const password = ref(''); const rules = [ (val: string) => (val && val.length > 0) || 'Feld darf nicht leer sein!' ]; function doLogin() { Loading.show({ message: 'Du wirst angemeldet' }); root.$store .dispatch('session/login', { userid: userid.value, password: password.value }) .then(() => { const x = root.$route.query['redirect']; void root.$router.replace( typeof x === 'string' ? { path: x } : mainRoute ); }) .finally(() => { Loading.hide(); }); } return { userid, password, doLogin, rules }; } }); </script>