sposchedule
106 строк · 2.8 Кб
1<script setup lang="ts">
2import { useAuthStore } from '@/stores/auth';
3import { storeToRefs } from 'pinia';
4import InputText from 'primevue/inputtext';
5import Button from 'primevue/button';
6import Password from 'primevue/password';
7import { useUserUpdate } from '@/queries/users';
8import { reactive } from 'vue';
9import { useToast } from 'primevue/usetoast';
10
11const toast = useToast();
12const authStore = useAuthStore();
13const { user } = storeToRefs(authStore);
14
15const { mutateAsync: updateUser } = useUserUpdate();
16
17const password = reactive({
18password: '',
19password_confirmation: '',
20});
21
22async function updateProfile() {
23try {
24await updateUser({
25name: user.value?.name,
26email: user.value?.email,
27});
28toast.add({
29severity: 'success',
30summary: 'Успешно',
31detail: 'Информация обновлена',
32life: 3000,
33closable: true,
34});
35} catch (e) {
36toast.add({
37severity: 'error',
38summary: 'Ошибка',
39detail: e?.response.data.message,
40life: 3000,
41closable: true,
42});
43return;
44}
45}
46
47async function updatePassword() {
48try {
49await updateUser({
50...password,
51});
52toast.add({
53severity: 'success',
54summary: 'Успешно',
55detail: 'Пароль обновлен',
56life: 3000,
57closable: true,
58});
59} catch (e) {
60toast.add({
61severity: 'error',
62summary: 'Ошибка',
63detail: e?.response.data.message,
64life: 3000,
65closable: true,
66});
67return;
68}
69password.password = '';
70password.password_confirmation = '';
71}
72</script>
73<template>
74<div class="flex flex-col items-start gap-4">
75<div class="">
76<h1 class="text-lg mb-2">Профиль</h1>
77<div class="flex flex-col items-start gap-4">
78<InputText v-model="user.name" class="" @change="updateProfile" />
79<InputText v-model="user.email" class="" @change="updateProfile" />
80</div>
81</div>
82
83<div class="">
84<h1 class="text-lg mb-2">Смена пароля</h1>
85<div class="flex flex-col items-start gap-4">
86<Password
87v-model="password.password"
88placeholder="Новый пароль"
89:feedback="false"
90toggle-mask
91/>
92<Password
93v-model="password.password_confirmation"
94placeholder="Подтверждение пароля"
95:feedback="false"
96toggle-mask
97/>
98<Button
99:disabled="!password.password_confirmation || !password.password"
100label="Сохранить"
101@click="updatePassword"
102/>
103</div>
104</div>
105</div>
106</template>
107