flaschengeist-frontend/src/pages/Login.vue

160 lines
4.6 KiB
Vue
Raw Normal View History

<template>
2021-02-10 17:09:37 +00:00
<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">
2021-02-10 17:09:37 +00:00
<q-toolbar-title> Login </q-toolbar-title>
</q-toolbar>
<q-card-section>
2021-01-18 15:05:05 +00:00
<q-form ref="LoginForm" @submit="doLogin" class="q-gutter-md">
<q-input
filled
2020-10-15 01:36:25 +00:00
v-model="userid"
label="Benutzername oder E-Mail"
:rules="rules"
2021-01-18 15:05:05 +00:00
tabindex="1"
/>
<q-input
filled
v-model="password"
type="password"
label="Password"
:rules="rules"
2021-01-18 15:05:05 +00:00
tabindex="2"
/>
2021-01-18 15:05:05 +00:00
<div class="row justify-between">
<q-btn
2021-01-18 15:05:05 +00:00
label="Passwort vergessen"
type="a"
@click="doReset"
color="secondary"
tabindex="4"
/>
2021-01-18 15:05:05 +00:00
<q-btn label="Login" type="submit" color="primary" tabindex="3" />
</div>
</q-form>
</q-card-section>
<div class="row justify-end">
<q-btn flat round icon="mdi-menu-down" class="cordova-only" @click="openServerSettings" />
</div>
<q-slide-transition class="cordova-only">
<div v-show="visible">
<q-separator />
<q-card-section>
<q-form ref="ServerSettingsForm" @submit="changeUrl" class="q-gutter-md">
<div class="text-h6">Servereinstellung</div>
<q-input filled label="Server" dense v-model="server" />
<q-btn size="xs" dense color="primary" label="Speichern" type="submit" />
</q-form>
</q-card-section>
</div>
</q-slide-transition>
</q-card>
</q-page>
</template>
<script lang="ts">
import { defineComponent, ref } from '@vue/composition-api';
import { Loading, Notify } from 'quasar';
2021-01-29 10:51:56 +00:00
import { setBaseUrl } from 'boot/axios';
export default defineComponent({
// name: 'PageName'
2020-11-06 00:12:03 +00:00
setup(_, { root }) {
const mainRoute = { name: 'dashboard' };
/* Stuff for the real login page */
2020-10-15 01:36:25 +00:00
const userid = ref('');
const password = ref('');
2021-01-18 15:05:05 +00:00
const rules = [(val: string) => (val && val.length > 0) || 'Feld darf nicht leer sein!'];
const server = ref<string | undefined>(root.$axios.defaults.baseURL);
const visible = ref(false);
function openServerSettings() {
visible.value = !visible.value;
}
2021-01-29 10:51:56 +00:00
function changeUrl() {
if (server.value) {
setBaseUrl(server.value);
2021-01-29 10:51:56 +00:00
}
}
function doLogin() {
Loading.show({
2021-01-18 15:05:05 +00:00
message: 'Du wirst angemeldet'
});
2020-11-06 00:12:03 +00:00
root.$store
.dispatch('session/login', {
2020-10-28 23:10:45 +00:00
userid: userid.value,
2021-01-18 15:05:05 +00:00
password: password.value
2020-10-28 23:10:45 +00:00
})
2021-02-10 17:09:37 +00:00
.then(async finished => {
await finished;
const x = root.$route.query['redirect'];
2021-01-18 15:05:05 +00:00
void root.$router.push(typeof x === 'string' ? { path: x } : mainRoute);
})
.catch((error: { status: number } | undefined) => {
if (error && error.status === 401) {
password.value = '';
Notify.create({
group: false,
type: 'negative',
message: 'Benutzername oder Passwort sind falsch.',
timeout: 10000,
progress: true,
2021-01-18 15:05:05 +00:00
actions: [{ icon: 'mdi-close', color: 'white' }]
});
}
})
.finally(() => {
Loading.hide();
2020-10-28 23:10:45 +00:00
});
}
2021-01-18 15:05:05 +00:00
function doReset() {
if (userid.value == '') {
Notify.create({
group: false,
type: 'negative',
message: 'Der Benutzername darf nicht leer sein.',
timeout: 10000,
progress: true,
actions: [{ icon: 'mdi-close', color: 'white' }]
});
return;
}
2021-01-21 15:23:40 +00:00
void root.$store
2021-01-18 15:05:05 +00:00
.dispatch('session/requestPasswordReset', {
userid: userid.value
})
.then(() => {
userid.value = '';
password.value = '';
Notify.create({
group: false,
type: 'ongoing',
message:
'Sollte der Benutzername korrekt und vorhanden sein, erhälst du jetzt eine E-Mail.',
timeout: 10000,
progress: true,
actions: [{ icon: 'mdi-close', color: 'white' }]
});
});
}
return {
userid,
password,
doLogin,
doReset,
rules,
server,
changeUrl,
visible,
openServerSettings
};
2021-01-18 15:05:05 +00:00
}
});
</script>