diff --git a/begushiybashkir/bbvue/src/components/AvatarUpload.vue b/begushiybashkir/bbvue/src/components/AvatarUpload.vue
new file mode 100644
index 0000000..8579a08
--- /dev/null
+++ b/begushiybashkir/bbvue/src/components/AvatarUpload.vue
@@ -0,0 +1,232 @@
+
+
+
+
+
![Avatar]()
+
+ 📷
+ Добавить фото
+
+
+ ✏️
+
+
+
+
+
+
+ Загрузка...
+
+
+
+ {{ error }}
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/begushiybashkir/bbvue/src/stores/auth.js b/begushiybashkir/bbvue/src/stores/auth.js
index 63ace0d..dd4d74a 100644
--- a/begushiybashkir/bbvue/src/stores/auth.js
+++ b/begushiybashkir/bbvue/src/stores/auth.js
@@ -2,6 +2,7 @@
import { defineStore } from 'pinia'
import { ref, computed } from 'vue'
import { apiClient, withLoading } from './helpers/api'
+import { handleApiError } from './helpers/api';
export const useAuthStore = defineStore('auth', () => {
// State
@@ -13,7 +14,7 @@ export const useAuthStore = defineStore('auth', () => {
// Getters
const isAuthenticated = computed(() => !!token.value && !!user.value)
- const userFullName = computed(() =>
+ const userFullName = computed(() =>
user.value ? `${user.value.firstName} ${user.value.lastName}` : ''
)
@@ -37,7 +38,7 @@ export const useAuthStore = defineStore('auth', () => {
// Передаем store объект с loading и error
return withLoading({ loading, error }, async () => {
await apiClient.post('/auth/register', userData)
-
+
// Auto-login after registration
const loginResponse = await apiClient.post('/auth/login', {
email: userData.email,
@@ -95,7 +96,7 @@ export const useAuthStore = defineStore('auth', () => {
const initializeAuth = async () => {
if (initialized.value || !token.value) return
-
+
initialized.value = true
try {
@@ -107,6 +108,47 @@ export const useAuthStore = defineStore('auth', () => {
}
}
+ const updateAvatar = async (avatarFile) => {
+ const formData = new FormData()
+ formData.append('avatar', avatarFile)
+
+ try {
+ const response = await apiClient.post('/user/avatar/upload', formData, {
+ headers: {
+ 'Content-Type': 'multipart/form-data'
+ }
+ })
+
+ if (response.data.success) {
+ // Обновляем аватар в сторе
+ if (user.value) {
+ user.value.avatar = response.data.avatar
+ }
+ return { success: true, avatar: response.data.avatar }
+ }
+ } catch (error) {
+ const result = handleApiError(error)
+ return result
+ }
+}
+
+const deleteAvatar = async () => {
+ try {
+ const response = await apiClient.delete('/user/avatar/deleteg')
+
+ if (response.data.success) {
+ // Удаляем аватар из стора
+ if (user.value) {
+ user.value.avatar = null
+ }
+ return { success: true }
+ }
+ } catch (error) {
+ const result = handleApiError(error)
+ return result
+ }
+}
+
return {
// State
user,
@@ -126,6 +168,8 @@ export const useAuthStore = defineStore('auth', () => {
fetchProfile,
updateProfile,
initializeAuth,
- clearAuth
+ clearAuth,
+ updateAvatar,
+ deleteAvatar
}
})
\ No newline at end of file
diff --git a/begushiybashkir/bbvue/src/views/Profile.vue b/begushiybashkir/bbvue/src/views/Profile.vue
index b183c89..aee541c 100644
--- a/begushiybashkir/bbvue/src/views/Profile.vue
+++ b/begushiybashkir/bbvue/src/views/Profile.vue
@@ -6,7 +6,7 @@