From ff34ff6541edc6bb4f8c23f5a106466e8d424667 Mon Sep 17 00:00:00 2001 From: Professional Date: Fri, 23 May 2025 23:41:30 +0700 Subject: [PATCH] =?UTF-8?q?=D1=84=D0=B8=D0=BA=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/ProfileView.vue | 113 +++++++++++++++++++++++++++++++++++++- 1 file changed, 112 insertions(+), 1 deletion(-) diff --git a/src/views/ProfileView.vue b/src/views/ProfileView.vue index 818afa8..90cc22e 100644 --- a/src/views/ProfileView.vue +++ b/src/views/ProfileView.vue @@ -991,6 +991,116 @@ const checkForChanges = () => { return currentData !== originalProfileData; }; + +// Добавляем отсутствующие функции +const logoutUser = async () => { + try { + await logout(); + // Перенаправляем на страницу входа после выхода + window.location.href = '/login'; + } catch (err) { + console.error('[ProfileView] Ошибка при выходе:', err); + } +}; + +const clearProfileMessages = () => { + profileActionError.value = ''; + profileActionSuccess.value = ''; +}; + +// Функции для работы с городами +const onCitySearch = (event) => { + const query = event.target.value.toLowerCase().trim(); + citySearchQuery.value = event.target.value; + + if (query.length > 0) { + // Простой список российских городов для демонстрации + const allCities = [ + 'Москва', 'Санкт-Петербург', 'Новосибирск', 'Екатеринбург', 'Казань', + 'Нижний Новгород', 'Челябинск', 'Самара', 'Омск', 'Ростов-на-Дону', + 'Уфа', 'Красноярск', 'Воронеж', 'Пермь', 'Волгоград', 'Краснодар', + 'Саратов', 'Тюмень', 'Тольятти', 'Ижевск', 'Барнаул', 'Ульяновск', + 'Иркутск', 'Хабаровск', 'Ярославль', 'Владивосток', 'Махачкала', + 'Томск', 'Оренбург', 'Кемерово', 'Новокузнецк', 'Рязань', 'Пенза', + 'Астрахань', 'Липецк', 'Тула', 'Киров', 'Чебоксары', 'Калининград' + ]; + + filteredCities.value = allCities.filter(city => + city.toLowerCase().includes(query) + ).slice(0, 10); // Ограничиваем до 10 результатов + + showCityList.value = filteredCities.value.length > 0; + } else { + filteredCities.value = []; + showCityList.value = false; + } +}; + +const selectCity = (city) => { + citySearchQuery.value = city; + editableProfileData.value.location.city = city; + showCityList.value = false; +}; + +const clearCitySelection = () => { + citySearchQuery.value = ''; + editableProfileData.value.location.city = ''; + showCityList.value = false; +}; + +// Функции для работы с полом +const onGenderSearch = (event) => { + const query = event.target.value.toLowerCase().trim(); + genderSearchQuery.value = event.target.value; + + if (query.length > 0) { + filteredGenders.value = genderOptions.value.filter(option => + option.text.toLowerCase().includes(query) + ); + showGenderList.value = filteredGenders.value.length > 0; + } else { + filteredGenders.value = genderOptions.value; + showGenderList.value = true; + } +}; + +const selectGender = (option) => { + genderSearchQuery.value = option.text; + editableProfileData.value.gender = option.value; + showGenderList.value = false; +}; + +const clearGenderSelection = () => { + genderSearchQuery.value = ''; + editableProfileData.value.gender = ''; + showGenderList.value = false; +}; + +// Закрытие выпадающих списков при клике вне их +const handleClickOutside = (event) => { + if (!event.target.closest('.city-input-wrapper')) { + showCityList.value = false; + showGenderList.value = false; + } +}; + +// Добавляем onMounted для инициализации компонента +onMounted(async () => { + console.log('[ProfileView] Компонент смонтирован, начинаем загрузку профиля...'); + + // Добавляем обработчик для закрытия выпадающих списков + document.addEventListener('click', handleClickOutside); + + // Загружаем данные профиля + await fetchProfileDataLocal(); +}); + +// Очистка при размонтировании +import { onUnmounted } from 'vue'; + +onUnmounted(() => { + document.removeEventListener('click', handleClickOutside); +});