куча говна
All checks were successful
Deploy / deploy (push) Successful in 4m32s

This commit is contained in:
Никита Круглицкий
2025-10-20 00:10:13 +06:00
parent 31460598ba
commit ec67be8aa6
50 changed files with 1616 additions and 1011 deletions

View File

@@ -1,13 +1,30 @@
<template>
<PrimeCard class="w-2/5">
<PrimeCard>
<template #content>
<form class="flex flex-col gap-3" @submit.prevent="submit">
<PrimeFloatLabel variant="on">
<PrimeInputText id="username" v-model="localUsername" size="large" class="w-full" />
<label for="username">Username</label>
</PrimeFloatLabel>
<form @submit.prevent="submit">
<div class="flex flex-col gap-3">
<PrimeFloatLabel variant="on">
<PrimeInputText id="username" v-model="username" size="large" autocomplete="off" fluid autofocus />
<label for="username">Username</label>
</PrimeFloatLabel>
<PrimeButton size="large" icon="pi pi-arrow-right" icon-pos="right" label="Let's go" :disabled="!localUsername" type="submit" />
<PrimeFloatLabel variant="on">
<PrimePassword id="password" v-model="password" size="large" autocomplete="off" toggle-mask fluid :feedback="false" />
<label for="password">Password</label>
</PrimeFloatLabel>
</div>
<PrimeButton
class="mt-6"
size="large"
icon="pi pi-arrow-right"
icon-pos="right"
label="Let's go"
:loading="submitting"
:disabled="!valid"
type="submit"
fluid
/>
</form>
</template>
</PrimeCard>
@@ -17,18 +34,34 @@
definePageMeta({
name: 'Login',
layout: 'auth',
auth: 'guest',
})
const { username } = usePreferences()
const { login } = useAuth()
const localUsername = ref<typeof username.value>()
const submitting = ref(false)
const username = ref<string>()
const password = ref<string>()
const valid = computed(() => {
if (!username.value)
return false
if (!password.value)
return false
return true
})
async function submit() {
if (!localUsername.value)
if (!valid.value)
return
username.value = localUsername.value
submitting.value = true
await navigateTo('/')
await login(username.value!, password.value!)
submitting.value = false
}
</script>

View File

@@ -4,12 +4,16 @@
<form class="flex flex-col gap-3 p-3" @submit.prevent="save">
<PrimeFloatLabel variant="on">
<PrimeInputText id="username" v-model="localUsername" size="large" class="w-full" />
<PrimeInputText id="username" v-model="displayName" size="large" fluid autocomplete="off" />
<label for="username">Username</label>
</PrimeFloatLabel>
<PrimeButton label="Save" type="submit" :disabled="!localUsername || localUsername === username" />
<PrimeButton label="Save" type="submit" :disabled="!valid" />
</form>
<div class="p-3">
<PrimeButton label="Logout" fluid severity="danger" @click="logout" />
</div>
</div>
</template>
@@ -18,22 +22,33 @@ definePageMeta({
name: 'Preferences',
})
const { me, setMe, logout } = useAuth()
const signaling = useSignaling()
const { username } = usePreferences()
const toast = useToast()
const localUsername = ref(username.value)
const displayName = ref(me.value?.displayName || '')
const valid = computed(() => {
if (!displayName.value || !me.value)
return false
if (displayName.value === me.value.displayName)
return false
return true
})
async function save() {
if (!localUsername.value || localUsername.value === username.value)
if (!valid.value)
return
username.value = localUsername.value
await signaling.socket.value?.emitWithAck('updateClient', {
username: username.value,
const updatedMe = await signaling.socket.value?.emitWithAck('updateClient', {
displayName: displayName.value,
})
setMe({ ...me.value, displayName: updatedMe.displayName })
toast.add({ severity: 'success', summary: 'Saved', life: 1000, closable: false })
}
</script>

View File

@@ -0,0 +1,74 @@
<template>
<PrimeCard>
<template #content>
<form @submit.prevent="submit">
<div class="flex flex-col gap-3">
<PrimeFloatLabel variant="on">
<PrimeInputText id="username" v-model="username" size="large" autocomplete="off" fluid autofocus />
<label for="username">Username</label>
</PrimeFloatLabel>
<PrimeFloatLabel variant="on">
<PrimePassword id="password" v-model="password" size="large" autocomplete="off" toggle-mask fluid :feedback="false" />
<label for="password">Password</label>
</PrimeFloatLabel>
<PrimeFloatLabel variant="on">
<PrimePassword id="repeatPassword" v-model="repeatPassword" size="large" autocomplete="off" toggle-mask fluid :feedback="false" />
<label for="repeatPassword">Repeat password</label>
</PrimeFloatLabel>
</div>
<PrimeButton
class="mt-6"
size="large"
label="Register"
:loading="submitting"
:disabled="!valid"
type="submit"
fluid
/>
</form>
</template>
</PrimeCard>
</template>
<script lang="ts" setup>
definePageMeta({
name: 'Register',
layout: 'auth',
auth: 'guest',
})
const { register } = useAuth()
const submitting = ref(false)
const username = ref<string>()
const password = ref<string>()
const repeatPassword = ref<string>()
const valid = computed(() => {
if (!username.value)
return false
if (!password.value)
return false
if (repeatPassword.value !== password.value)
return false
return true
})
async function submit() {
if (!valid.value)
return
submitting.value = true
await register(username.value!, password.value!)
submitting.value = false
}
</script>