-
-
Save andreas-it-dev/5ea26d7b7c6b1e3cf29ab265070478cb to your computer and use it in GitHub Desktop.
<template> | |
<v-container id="signinup-form" class="fill-height"> | |
<Notification | |
:message="snackbarMessage" | |
:snackbar="snackbar" | |
:type="snackbarType" | |
/> | |
<v-row align="center" justify="center" no-gutters> | |
<v-col cols="12" sm="8" md="8" class=""> | |
<v-card class="evelation-12 card"> | |
<v-window v-model="step"> | |
<!--SignIn--> | |
<v-window-item :value="1"> | |
<v-row class=""> | |
<v-col cols="12" md="8" class="pt-6 pb-6"> | |
<v-card-text> | |
<v-form class="signup-form-form" @submit.prevent="signin"> | |
<h1 | |
class="text-center display-1 mb-10" | |
:class="`${bgColor}--text`" | |
> | |
Sign in | |
</h1> | |
<v-text-field | |
id="username" | |
v-model="login" | |
label="Username" | |
name="Username" | |
append-icon="person" | |
type="text" | |
:color="bgColor" | |
/> | |
<v-text-field | |
id="password" | |
v-model="password" | |
label="Password" | |
name="Password" | |
append-icon="lock" | |
type="password" | |
:color="bgColor" | |
/> | |
<div class="text-center"> | |
<a | |
href="#" | |
class="mt-3 overline no-text-decoration" | |
:class="`${bgColor}--text`" | |
@click="step = 3" | |
> | |
Forgot your password? | |
</a> | |
</div> | |
<div class="text-center mt-6"> | |
<v-btn type="submit" large :color="bgColor" dark | |
>Sign In</v-btn | |
> | |
</div> | |
</v-form> | |
</v-card-text> | |
</v-col> | |
<v-col | |
cols="12" | |
md="4" | |
class="darken-2 vcenter" | |
:class="`${bgColor}`" | |
> | |
<div> | |
<v-card-text :class="`${fgColor}--text`"> | |
<h1 class="text-center headline mb-3">No User?</h1> | |
<h5 class="text-center overline mb-3"> | |
Please Sign Up to continue | |
</h5> | |
</v-card-text> | |
<div class="text-center mb-6"> | |
<v-btn dark outlined @click="step = 2">Sign Up</v-btn> | |
</div> | |
</div> | |
</v-col> | |
</v-row> | |
</v-window-item> | |
<!--SignUp--> | |
<v-window-item :value="2"> | |
<v-row class="fill-height"> | |
<v-col | |
cols="12" | |
md="4" | |
class="darken-2 vcenter" | |
:class="`${bgColor}`" | |
> | |
<div> | |
<v-card-text :class="`${fgColor}--text`"> | |
<h1 class="text-center headline mb-3">Already a user?</h1> | |
<h5 class="text-center overline mb-3">Please Sign In</h5> | |
</v-card-text> | |
<div class="text-center mb-6"> | |
<v-btn dark outlined @click="step = 1">Sign In</v-btn> | |
</div> | |
</div> | |
</v-col> | |
<v-col cols="12" md="8" class=" pt-6 pb-6"> | |
<v-card-text> | |
<h1 | |
class="text-center display-1 mb-10" | |
:class="`${bgColor}--text`" | |
> | |
Sign Up | |
</h1> | |
<v-form class="signup-form-form" @submit.prevent="signup"> | |
<v-text-field | |
id="username" | |
v-model="username" | |
label="Username" | |
name="username" | |
append-icon="person" | |
type="text" | |
/> | |
<v-text-field | |
id="email" | |
v-model="email" | |
label="eMail" | |
name="email" | |
append-icon="email" | |
type="email" | |
/> | |
<v-text-field | |
id="password" | |
v-model="password" | |
label="Password" | |
name="password" | |
append-icon="lock" | |
type="password" | |
/> | |
<div class="text-center mt-6"> | |
<v-btn type="submit" large :color="bgColor" dark> | |
Sign Up</v-btn | |
> | |
</div> | |
</v-form> | |
</v-card-text> | |
</v-col> | |
</v-row> | |
</v-window-item> | |
<!--PW Rest--> | |
<v-window-item :value="3"> | |
<v-row class="fill-height"> | |
<v-col | |
cols="12" | |
md="4" | |
class="darken-2 vcenter" | |
:class="`${bgColor}`" | |
> | |
<div> | |
<v-card-text :class="`${fgColor}--text`"> | |
<h1 class="text-center headline mb-3">Already a user?</h1> | |
<h5 class="text-center overline mb-3">Please Sign In</h5> | |
</v-card-text> | |
<div class="text-center mb-6"> | |
<v-btn dark outlined @click="step = 1">Sign In</v-btn> | |
</div> | |
</div> | |
</v-col> | |
<v-col cols="12" md="8" class="pt-6 pb-6"> | |
<v-card-text> | |
<v-form class="signup-form-form"> | |
<h1 | |
class="text-center display-1 mb-10" | |
:class="`${bgColor}--text`" | |
> | |
Reset Password | |
</h1> | |
<v-text-field | |
id="login" | |
v-model="login" | |
label="Username / eMail" | |
name="login" | |
append-icon="person / email" | |
type="text" | |
:color="bgColor" | |
class="v-input__icon--double" | |
/> | |
<div class="text-center mt-6"> | |
<v-btn large :color="bgColor" dark | |
>Reset Password</v-btn | |
> | |
</div> | |
</v-form> | |
</v-card-text> | |
</v-col> | |
</v-row> | |
</v-window-item> | |
</v-window> | |
</v-card> | |
</v-col> | |
</v-row> | |
</v-container> | |
</template> | |
<script> | |
import Notification from './Notification' | |
export default { | |
name: 'Signupform', | |
components: { | |
Notification | |
}, | |
props: { | |
source: { | |
type: String, | |
default: '' | |
}, | |
bgColor: { | |
type: String, | |
default: 'indigo' | |
}, | |
fgColor: { | |
type: String, | |
default: 'white' | |
} | |
}, | |
async fetch({ store, error }, user) { | |
try { | |
await store.dispatch('users/signupUser', user) | |
} catch (e) { | |
error({ | |
statusCode: 503, | |
message: 'Unable to sign up user. Please try again later.' | |
}) | |
} | |
}, | |
data: () => ({ | |
step: 1, | |
username: '', | |
email: '', | |
password: '', | |
login: '', | |
snackbarType: 'success', | |
snackbarMessage: '', | |
snackbar: false | |
}), | |
methods: { | |
signup() { | |
this.$auth | |
.signup({ | |
data: { | |
user: { | |
username: this.username, | |
email: this.email, | |
password: this.password | |
} | |
} | |
}) | |
.catch((e) => { | |
this.error = e + '' | |
}) | |
}, | |
async signin() { | |
try { | |
const response = await this.$auth.loginWith('local', { | |
data: { | |
login: this.login, | |
password: this.password | |
} | |
}) | |
this.snackbarType = response.data.type | |
this.snackbarMessage = response.data.message | |
this.snackbar = true | |
} catch (err) { | |
this.snackbarType = 'error' | |
this.snackbarMessage = 'Error signing you in' | |
this.snackbar = true | |
} | |
} | |
} | |
} | |
</script> | |
<style scoped lang="scss"> | |
.v-input__icon--double .v-input__icon { | |
margin-left: -4.25rem !important; | |
} | |
a.no-text-decoration { | |
text-decoration: none; | |
} | |
#signinup-form { | |
max-width: 75rem; | |
} | |
.signup-form-form { | |
max-width: 23rem; | |
margin: 0 auto; | |
} | |
.card { | |
overflow: hidden; | |
} | |
.vcenter { | |
display: flex; | |
align-items: center; | |
justify-content: center; | |
} | |
</style> |
andreas-it-dev
commented
May 20, 2020
Bien hechooo esta hermoso.
Ooops I realize I didnt have v-app. Thanks you this template was really useful for me at work today
Ooops I realize I didnt have v-app. Thanks you this template was really useful for me at work today
glad you got it sorted and you like it
fwiw, nowadays the icons need a prepended mdi-
or it wont show up
Yeah. I noticed that in the new theme I was using. Thanks!
I think I have a problem with mdi- ,
I have the mdi package in my style via : <link href="https://cdn.jsdelivr.net/npm/@mdi/[email protected]/css/materialdesignicons.min.css" rel="stylesheet">
but the page is still not good :
any ideas ?
Would you mind sharing the Notification component as well? :D
@Crypto2557
Would you mind sharing the Notification component as well? :D
its really nothing special.. just a tiny component.. https://gist.github.com/awunder/909b5a3629034505e24170cb5a3cfe37
be aware that i am using vuex there, as this is imho the best way to do it