refactoring, logout
This commit is contained in:
parent
b9886c3775
commit
914e412a51
149
client/src/components/PlayButton.vue
Normal file
149
client/src/components/PlayButton.vue
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<div v-if="!$fetchState.pending" class="playbutton">
|
||||||
|
<template v-if="user && user.name">
|
||||||
|
<NuxtLink class="playbutton__playbutton" to="/play">
|
||||||
|
Play!
|
||||||
|
</NuxtLink>
|
||||||
|
<div class="playbutton__logout" @click="logout">
|
||||||
|
Logout
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<form v-else v-on:submit="login">
|
||||||
|
<input
|
||||||
|
v-model="authCode"
|
||||||
|
class="playbutton__authinput"
|
||||||
|
type="text"
|
||||||
|
size="6"
|
||||||
|
maxlength="6"
|
||||||
|
placeholder="code"
|
||||||
|
/>
|
||||||
|
<input
|
||||||
|
type="submit"
|
||||||
|
value="Go"
|
||||||
|
:class="[ 'playbutton__authbutton', { disabled: loginDisabled }]"
|
||||||
|
/>
|
||||||
|
<div class="playbutton__errormessage" v-if="errorMessage">
|
||||||
|
{{ errorMessage }}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export default {
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
user: {},
|
||||||
|
authCode: '',
|
||||||
|
errorMessage: '',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async fetch() {
|
||||||
|
try {
|
||||||
|
this.user = await this.$axios.$get('/api/userinfo')
|
||||||
|
} catch(e) {
|
||||||
|
// nop
|
||||||
|
}
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
loginDisabled() {
|
||||||
|
return this.authCode.length < 6
|
||||||
|
},
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
async login(e) {
|
||||||
|
e.preventDefault()
|
||||||
|
try {
|
||||||
|
await this.$axios.$get(`/api/login?code=${this.authCode}`)
|
||||||
|
this.$fetch()
|
||||||
|
} catch(e) {
|
||||||
|
this.errorMessage = 'login failed'
|
||||||
|
}
|
||||||
|
this.authCode = ''
|
||||||
|
},
|
||||||
|
async logout() {
|
||||||
|
this.authCode = ''
|
||||||
|
try {
|
||||||
|
await this.$axios.$get('/api/logout')
|
||||||
|
window.location.reload()
|
||||||
|
} catch(e) {
|
||||||
|
this.errorMessage = 'logout failed'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss">
|
||||||
|
.playbutton {
|
||||||
|
font-family: Dosis;
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 36px;
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
&__playbutton {
|
||||||
|
width: 200px;
|
||||||
|
height: 48px;
|
||||||
|
padding: 16px 24px;
|
||||||
|
border: 4px solid #c0c060;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #40a020;
|
||||||
|
color: #ffff80;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border-color: #ffffc0;
|
||||||
|
background-color: #60c040;
|
||||||
|
color: #ffffc0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__logout {
|
||||||
|
margin-top: 36px;
|
||||||
|
font-size: 24px;
|
||||||
|
cursor: pointer;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: #c0c080;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__authinput {
|
||||||
|
display: inline;
|
||||||
|
height: 36px;
|
||||||
|
border: 4px solid #c0c060;
|
||||||
|
border-radius: 8px;
|
||||||
|
font-family: Dosis;
|
||||||
|
font-weight: 800;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
&__authbutton {
|
||||||
|
display: inline;
|
||||||
|
width: 80px;
|
||||||
|
height: 48px;
|
||||||
|
border: 4px solid #c0c060;
|
||||||
|
border-radius: 8px;
|
||||||
|
background-color: #40a020;
|
||||||
|
color: #ffff80;
|
||||||
|
font-size: 24px;
|
||||||
|
|
||||||
|
&.disabled,
|
||||||
|
&:hover.disabled {
|
||||||
|
border-color: #808030;
|
||||||
|
background-color: #406020;
|
||||||
|
color: #808060;
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
background-color: #60c040;
|
||||||
|
color: #ffffc0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&__errormessage {
|
||||||
|
padding: 8px;
|
||||||
|
color: #ff8080;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
@ -38,4 +38,8 @@ html, body {
|
|||||||
body {
|
body {
|
||||||
background-color: #402080;
|
background-color: #402080;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -2,32 +2,7 @@
|
|||||||
<div class="startpage">
|
<div class="startpage">
|
||||||
<TitleBox />
|
<TitleBox />
|
||||||
<div class="startpage__buttonline">
|
<div class="startpage__buttonline">
|
||||||
<template v-if="!$fetchState.pending">
|
<PlayButton />
|
||||||
<template v-if="user && user.name">
|
|
||||||
<NuxtLink class="startpage__playbutton" to="/play">
|
|
||||||
Play!
|
|
||||||
</NuxtLink>
|
|
||||||
</template>
|
|
||||||
<form v-else v-on:submit="login">
|
|
||||||
<input
|
|
||||||
v-model="authCode"
|
|
||||||
class="startpage__authinput"
|
|
||||||
type="text"
|
|
||||||
value=""
|
|
||||||
size="6"
|
|
||||||
maxlength="6"
|
|
||||||
placeholder="code"
|
|
||||||
/>
|
|
||||||
<input
|
|
||||||
type="submit"
|
|
||||||
value="Go"
|
|
||||||
:class="[ 'startpage__authbutton', { disabled: loginDisabled }]"
|
|
||||||
/>
|
|
||||||
<div class="startpage__errormessage" v-if="errorMessage">
|
|
||||||
{{ errorMessage }}
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</template>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="startpage__copyright">
|
<div class="startpage__copyright">
|
||||||
© 2021, Settel
|
© 2021, Settel
|
||||||
@ -35,111 +10,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
|
||||||
export default {
|
|
||||||
data() {
|
|
||||||
return {
|
|
||||||
user: {},
|
|
||||||
authCode: '',
|
|
||||||
errorMessage: '',
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async fetch() {
|
|
||||||
try {
|
|
||||||
this.user = await this.$axios.$get('/api/userinfo')
|
|
||||||
} catch(e) {
|
|
||||||
// nop
|
|
||||||
}
|
|
||||||
},
|
|
||||||
computed: {
|
|
||||||
loginDisabled() {
|
|
||||||
return this.authCode.length < 6
|
|
||||||
},
|
|
||||||
},
|
|
||||||
methods: {
|
|
||||||
async login(e) {
|
|
||||||
e.preventDefault()
|
|
||||||
try {
|
|
||||||
await this.$axios.$get(`/api/login?code=${this.authCode}`)
|
|
||||||
this.$fetch()
|
|
||||||
} catch(e) {
|
|
||||||
this.authCode = ''
|
|
||||||
this.errorMessage = 'login failed'
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.startpage {
|
.startpage {
|
||||||
&__buttonline {
|
&__buttonline {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
&__playbutton {
|
|
||||||
width: 200px;
|
|
||||||
height: 48px;
|
|
||||||
padding: 16px 24px;
|
|
||||||
border: 4px solid #c0c060;
|
|
||||||
border-radius: 8px;
|
|
||||||
background-color: #40a020;
|
|
||||||
color: #ffff80;
|
|
||||||
font-family: Dosis;
|
|
||||||
font-weight: 800;
|
|
||||||
font-size: 36px;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
|
|
||||||
&:hover {
|
|
||||||
border-color: #ffffc0;
|
|
||||||
background-color: #60c040;
|
|
||||||
color: #ffffc0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&__authinput {
|
|
||||||
display: inline;
|
|
||||||
height: 36px;
|
|
||||||
border: 4px solid #c0c060;
|
|
||||||
border-radius: 8px;
|
|
||||||
font-family: Dosis;
|
|
||||||
font-weight: 800;
|
|
||||||
font-size: 24px;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__authbutton {
|
|
||||||
display: inline;
|
|
||||||
width: 80px;
|
|
||||||
height: 48px;
|
|
||||||
border: 4px solid #c0c060;
|
|
||||||
border-radius: 8px;
|
|
||||||
background-color: #40a020;
|
|
||||||
color: #ffff80;
|
|
||||||
font-family: Dosis;
|
|
||||||
font-weight: 800;
|
|
||||||
font-size: 24px;
|
|
||||||
text-align: center;
|
|
||||||
text-decoration: none;
|
|
||||||
&.disabled,
|
|
||||||
&:hover.disabled {
|
|
||||||
border-color: #808030;
|
|
||||||
background-color: #406020;
|
|
||||||
color: #808060;
|
|
||||||
}
|
|
||||||
&:hover {
|
|
||||||
background-color: #60c040;
|
|
||||||
color: #ffffc0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
&__errormessage {
|
|
||||||
padding: 8px;
|
|
||||||
font-family: Dosis;
|
|
||||||
font-weight: 800;
|
|
||||||
color: #ff8080;
|
|
||||||
}
|
|
||||||
|
|
||||||
&__copyright {
|
&__copyright {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 1em;
|
right: 1em;
|
||||||
|
Loading…
Reference in New Issue
Block a user