2018-03-30 17:08:09 -05:00
|
|
|
<template>
|
|
|
|
<div>
|
|
|
|
|
2018-05-01 10:55:57 -05:00
|
|
|
<button class="button" type="button" @click="openDialog">
|
2018-03-30 17:08:09 -05:00
|
|
|
Login
|
|
|
|
</button>
|
|
|
|
|
|
|
|
<app-modal title="Login" :open="showLogin" @dismiss="showLogin = false">
|
|
|
|
<div>
|
2018-09-06 18:16:13 -05:00
|
|
|
<form @submit.prevent="performLogin">
|
2018-03-30 17:08:09 -05:00
|
|
|
|
2018-09-06 18:16:13 -05:00
|
|
|
<div v-if="loginMessage" class="notification is-danger">
|
|
|
|
{{loginMessage}}
|
2018-03-30 17:08:09 -05:00
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="field">
|
|
|
|
<label class="label">Username</label>
|
|
|
|
<div class="control has-icons-left">
|
2018-05-01 10:55:57 -05:00
|
|
|
<input class="input" type="text" placeholder="username" ref="usernameInput" v-model="username">
|
2018-03-30 17:08:09 -05:00
|
|
|
<app-icon icon="person" size="sm" class="is-left"></app-icon>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="field">
|
|
|
|
<label class="label">Password</label>
|
|
|
|
<div class="control has-icons-left">
|
|
|
|
<input class="input" type="password" placeholder="password" v-model="password">
|
|
|
|
<app-icon icon="lock-locked" size="sm" class="is-left"></app-icon>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div class="field is-grouped">
|
|
|
|
<div class="control">
|
|
|
|
<button type="submit" class="button is-primary" :disabled="!enableSubmit">Login</button>
|
|
|
|
</div>
|
|
|
|
<div class="control">
|
2024-09-28 20:58:25 -05:00
|
|
|
<button type="button" class="button is-secondary" @click="showLogin = false">Cancel</button>
|
2018-03-30 17:08:09 -05:00
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</app-modal>
|
|
|
|
|
|
|
|
</div>
|
|
|
|
</template>
|
|
|
|
|
2024-10-02 14:34:50 -05:00
|
|
|
<script setup>
|
2018-03-30 17:08:09 -05:00
|
|
|
|
2024-10-02 14:34:50 -05:00
|
|
|
import { computed, nextTick, ref, useTemplateRef } from "vue";
|
2024-09-28 20:58:25 -05:00
|
|
|
import { useAppConfigStore } from "../stores/appConfig";
|
2024-10-02 14:34:50 -05:00
|
|
|
import { useLoadResource } from "../lib/useLoadResource";
|
2018-03-30 17:08:09 -05:00
|
|
|
|
2024-10-02 14:34:50 -05:00
|
|
|
const appConfig = useAppConfigStore();
|
|
|
|
const { loadResource } = useLoadResource();
|
|
|
|
|
|
|
|
const userNameElement = useTemplateRef("usernameInput");
|
|
|
|
|
|
|
|
const showLogin = ref(false);
|
|
|
|
const error = ref('');
|
|
|
|
const username = ref("");
|
|
|
|
const password = ref("");
|
|
|
|
|
|
|
|
const loginMessage = computed(() => appConfig.loginMessage);
|
|
|
|
const enableSubmit = computed(() => username.value !== "" && password.value !== "" && !appConfig.isLoading);
|
|
|
|
|
|
|
|
function openDialog() {
|
|
|
|
showLogin.value = true;
|
|
|
|
nextTick(() => {
|
|
|
|
userNameElement.value.focus();
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
function performLogin() {
|
|
|
|
if (username.value !== '' && password.value !== '') {
|
|
|
|
const params = {username: username.value, password: password.value};
|
|
|
|
|
|
|
|
loadResource(
|
|
|
|
appConfig.login(params)
|
2018-09-06 18:16:13 -05:00
|
|
|
.then(data => {
|
|
|
|
if (data.success) {
|
2024-10-02 14:34:50 -05:00
|
|
|
showLogin.value = false;
|
2018-09-06 18:16:13 -05:00
|
|
|
}
|
|
|
|
})
|
2024-10-02 14:34:50 -05:00
|
|
|
);
|
2018-03-30 17:08:09 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
</style>
|