corp-app/CORP-MAUI/Pages/MenuPage.xaml.cs

169 lines
6.5 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Diagnostics;
namespace CORP_MAUI.Pages;
public partial class MenuPage : ContentPage
{
// Сохраняем индекс вкладки, с которой открыли меню
private static int _previousTabIndex = 2; // По умолчанию - Лента
public static void SetPreviousTabIndex(int index)
{
if (index != 0) // 0 - это меню, не сохраняем
{
_previousTabIndex = index;
}
}
public MenuPage()
{
InitializeComponent();
}
private async void OnCloseClicked(object? sender, EventArgs e)
{
// Сначала переключаемся на предыдущую вкладку
if (Shell.Current?.CurrentItem is TabBar tabBar && tabBar.Items.Count > _previousTabIndex)
{
Shell.Current.CurrentItem = tabBar.Items[_previousTabIndex];
}
await Navigation.PopModalAsync(animated: false);
}
private async Task NavigateToTabAsync(int tabIndex)
{
// Переключаем на нужную вкладку
if (Shell.Current?.CurrentItem is TabBar tabBar && tabBar.Items.Count > tabIndex)
{
Shell.Current.CurrentItem = tabBar.Items[tabIndex];
}
await Navigation.PopModalAsync(animated: false);
}
private async void OnNewsClicked(object? sender, EventArgs e)
{
await NavigateToTabAsync(2); // Лента - третья вкладка (индекс 2)
}
private async void OnDepartmentsClicked(object? sender, EventArgs e)
{
await Navigation.PopModalAsync(animated: false);
// Отделы нет в нижней панели - переходим через Shell navigation
try
{
await Shell.Current.GoToAsync(nameof(DepartmentsPage));
}
catch
{
// Fallback - показываем сообщение
if (Application.Current?.Windows.FirstOrDefault()?.Page is Page page)
{
await page.DisplayAlert("Отделы", "Перейдите в раздел 'Отделы' через меню", "OK");
}
}
}
private async void OnEmployeesClicked(object? sender, EventArgs e)
{
await NavigateToTabAsync(4); // Сотрудники - пятая вкладка (индекс 4)
}
private async void OnRequestsClicked(object? sender, EventArgs e)
{
await NavigateToTabAsync(3); // Заявления - четвёртая вкладка (индекс 3)
}
private async void OnChatsClicked(object? sender, EventArgs e)
{
await NavigateToTabAsync(1); // Сообщения - вторая вкладка (индекс 1)
}
private async void OnDocumentsClicked(object? sender, EventArgs e)
{
await Navigation.PopModalAsync(animated: false);
// Переходим на страницу документов
try
{
await Shell.Current.GoToAsync(nameof(DocumentsPage));
}
catch
{
// Fallback - показываем сообщение
if (Application.Current?.Windows.FirstOrDefault()?.Page is Page page)
{
await page.DisplayAlert("Документы", "Не удалось открыть раздел документов", "OK");
}
}
}
private async void OnFinancesClicked(object? sender, EventArgs e)
{
await Navigation.PopModalAsync(animated: false);
// Финансы пока не реализованы
if (Application.Current?.Windows.FirstOrDefault()?.Page is Page page)
{
await page.DisplayAlert("Финансы", "Раздел финансов находится в разработке", "OK");
}
}
private async void OnProfileClicked(object? sender, EventArgs e)
{
await Navigation.PopModalAsync(animated: false);
// Профиль нет в нижней панели - переходим через Shell navigation
try
{
await Shell.Current.GoToAsync(nameof(ProfilePage));
}
catch
{
// Fallback - показываем сообщение
if (Application.Current?.Windows.FirstOrDefault()?.Page is Page page)
{
await page.DisplayAlert("Профиль", "Перейдите в раздел 'Профиль' через меню", "OK");
}
}
}
private async void OnSettingsClicked(object? sender, EventArgs e)
{
await Navigation.PopModalAsync(animated: false);
// Настройки пока не реализованы
if (Application.Current?.Windows.FirstOrDefault()?.Page is Page page)
{
await page.DisplayAlert("Настройки", "Раздел настроек находится в разработке", "OK");
}
}
private void OnLightThemeClicked(object? sender, EventArgs e)
{
// Активируем светлую тему - белый ползунок слева
LightThemeButton.BackgroundColor = Colors.White;
DarkThemeButton.BackgroundColor = Colors.Transparent;
// Иконка на белом фоне - акцентный цвет
LightThemeIconTint.TintColor = Color.FromArgb("#0D6EFD");
// Иконка на прозрачном (синем) фоне - белая
DarkThemeIconTint.TintColor = Colors.White;
// TODO: Применить светлую тему к приложению
Trace.WriteLine("[MenuPage] Светлая тема выбрана");
}
private void OnDarkThemeClicked(object? sender, EventArgs e)
{
// Активируем тёмную тему - белый ползунок справа
DarkThemeButton.BackgroundColor = Colors.White;
LightThemeButton.BackgroundColor = Colors.Transparent;
// Иконка на белом фоне - акцентный цвет
DarkThemeIconTint.TintColor = Color.FromArgb("#0D6EFD");
// Иконка на прозрачном (синем) фоне - белая
LightThemeIconTint.TintColor = Colors.White;
// TODO: Применить тёмную тему к приложению
Trace.WriteLine("[MenuPage] Тёмная тема выбрана");
}
}