mirror of https://github.com/wg-easy/wg-easy
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.1 KiB
121 lines
3.1 KiB
<template>
|
|
<main>
|
|
<Panel>
|
|
<PanelHead>
|
|
<PanelHeadTitle :text="$t('pages.me')" />
|
|
</PanelHead>
|
|
<PanelBody class="dark:text-neutral-200">
|
|
<FormElement @submit.prevent="submit">
|
|
<FormGroup>
|
|
<FormHeading>{{ $t('me.sectionGeneral') }}</FormHeading>
|
|
<FormTextField id="name" v-model="name" :label="$t('name')" />
|
|
<FormNullTextField
|
|
id="email"
|
|
v-model="email"
|
|
:label="$t('email')"
|
|
/>
|
|
<FormActionField type="submit" :label="$t('save')" />
|
|
</FormGroup>
|
|
</FormElement>
|
|
<FormElement @submit.prevent="updatePassword">
|
|
<FormGroup>
|
|
<FormHeading>{{ $t('me.sectionPassword') }}</FormHeading>
|
|
<FormPasswordField
|
|
id="current-password"
|
|
v-model="currentPassword"
|
|
autocomplete="current-password"
|
|
:label="$t('currentPassword')"
|
|
/>
|
|
<FormPasswordField
|
|
id="new-password"
|
|
v-model="newPassword"
|
|
autocomplete="new-password"
|
|
:label="$t('setup.newPassword')"
|
|
/>
|
|
<FormPasswordField
|
|
id="confirm-password"
|
|
v-model="confirmPassword"
|
|
autocomplete="new-password"
|
|
:label="$t('confirmPassword')"
|
|
/>
|
|
<FormActionField type="submit" :label="$t('updatePassword')" />
|
|
</FormGroup>
|
|
</FormElement>
|
|
</PanelBody>
|
|
</Panel>
|
|
</main>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { FetchError } from 'ofetch';
|
|
const authStore = useAuthStore();
|
|
authStore.update();
|
|
const toast = useToast();
|
|
|
|
const name = ref(authStore.userData?.name);
|
|
const email = ref(authStore.userData?.email);
|
|
|
|
async function submit() {
|
|
try {
|
|
const res = await $fetch(`/api/me`, {
|
|
method: 'post',
|
|
body: {
|
|
name: name.value,
|
|
email: email.value,
|
|
},
|
|
});
|
|
toast.showToast({
|
|
type: 'success',
|
|
title: 'Success',
|
|
message: 'Saved',
|
|
});
|
|
if (!res.success) {
|
|
throw new Error('Failed to update general');
|
|
}
|
|
await refreshNuxtData();
|
|
} catch (e) {
|
|
if (e instanceof FetchError) {
|
|
toast.showToast({
|
|
type: 'error',
|
|
title: 'Error',
|
|
message: e.data.message,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
// TODO: handle update password
|
|
const currentPassword = ref('');
|
|
const newPassword = ref('');
|
|
const confirmPassword = ref('');
|
|
|
|
async function updatePassword() {
|
|
try {
|
|
const res = await $fetch(`/api/me/password`, {
|
|
method: 'post',
|
|
body: {
|
|
currentPassword: currentPassword.value,
|
|
newPassword: newPassword.value,
|
|
confirmPassword: confirmPassword.value,
|
|
},
|
|
});
|
|
toast.showToast({
|
|
type: 'success',
|
|
title: 'Success',
|
|
message: 'Saved',
|
|
});
|
|
if (!res.success) {
|
|
throw new Error('Failed to update password');
|
|
}
|
|
await refreshNuxtData();
|
|
} catch (e) {
|
|
if (e instanceof FetchError) {
|
|
toast.showToast({
|
|
type: 'error',
|
|
title: 'Error',
|
|
message: e.data.message,
|
|
});
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|