parsley/app/javascript/components/UserLogin.vue

92 lines
2.6 KiB
Vue
Raw Normal View History

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">
<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";
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>