Skip to content

Instantly share code, notes, and snippets.

@andreas-it-dev
Last active November 8, 2020 11:08
Show Gist options
  • Select an option

  • Save andreas-it-dev/5ea26d7b7c6b1e3cf29ab265070478cb to your computer and use it in GitHub Desktop.

Select an option

Save andreas-it-dev/5ea26d7b7c6b1e3cf29ab265070478cb to your computer and use it in GitHub Desktop.
vuetify made sign up form - inspired by https://www.youtube.com/watch?v=jWoy_LQydvk
<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

Copy link
Copy Markdown
Author

2020-05-20_13-48

2020-05-20_13-48_1

2020-05-20_13-48_2

@BorisTravi

Copy link
Copy Markdown

Bien hechooo esta hermoso.

@frankMagoba

Copy link
Copy Markdown

vuebug
Looks like this on m end. Any ideas why will really be helpful

@frankMagoba

Copy link
Copy Markdown

Ooops I realize I didnt have v-app. Thanks you this template was really useful for me at work today

@andreas-it-dev

Copy link
Copy Markdown
Author

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

@andreas-it-dev

Copy link
Copy Markdown
Author

fwiw, nowadays the icons need a prepended mdi- or it wont show up

@frankMagoba

Copy link
Copy Markdown

Yeah. I noticed that in the new theme I was using. Thanks!

@blackcat68

Copy link
Copy Markdown

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/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">
but the page is still not good :
image

any ideas ?

@chtheiss

chtheiss commented Nov 7, 2020

Copy link
Copy Markdown

Would you mind sharing the Notification component as well? :D

@andreas-it-dev

Copy link
Copy Markdown
Author

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment