Files
Hushian/Presentation/HushianWebApp/Layout/MainLayout.razor

243 lines
8.2 KiB
Plaintext
Raw Normal View History

2025-07-11 20:37:28 +03:30
@inherits LayoutComponentBase
@using Common.Dtos.User
@using HushianWebApp.Components
@using HushianWebApp.Pages
@using HushianWebApp.Pages.Manage
@using HushianWebApp.Service
@using HushianWebApp.Services
@inject NavigationManager NavigationManager
@inject ILocalStorageService localStorageService;
@inject AuthService authService;
@inject BaseController baseController;
@inject UserService userService;
<Modal @ref="modal" />
<Toasts class="p-3" AutoHide="true" Delay="4000" Placement="ToastsPlacement.TopRight" />
<div class="bb-page">
<Sidebar @ref="sidebar"
Href="/"
IconName="IconName.BootstrapFill"
Title="هوشــیان"
BadgeText="v1.3.1"
ImageSrc="/before/assets/images/hushian-logo.svg"
DataProvider="SidebarDataProvider"
Width="230"
WidthUnit="Unit.Px" />
<main>
<div class="d-flex align-items-center justify-content-end">
<div class="text-white text-end d-flex flex-column justify-content-center align-items-end mx-2">
<div style="color: black;" class="fw-bold">@Fullname</div>
<h6 style="color: black;">@TitleRole</h6>
</div>
@if (img != null && img.Length > 0)
{
<Image Src=@GetImageSource() Class="rounded" Alt="placeholder" @onclick="EditCurrentUser"
Style="height: 30px;cursor:pointer;margin-left:10px" />
}
else
{
<Icon Name="IconName.People" Size="IconSize.x3" Style="height: 30px;cursor:pointer;margin-left:10px" @onclick="EditCurrentUser" />
}
<Button Color="ButtonColor.Danger" Size="ButtonSize.Small"
@onclick=OnCliclLogout Style="margin-left:10px">
<Icon Name="IconName.DoorOpen" /> خروج
</Button>
</div>
<article class="content px-4">
<div class="py-2">
@if (isonline)
{
@if (isAuthorizedCompanyUser)
{
@Body
}
else
{
<p>دسترسی به شرکت برای شما یافت نشد</p>
}
}
</div>
</article>
</main>
</div>
@code {
private Modal modal = default!;
public string Info { get; set; } = "";
private string SelectedMenu = "page2";
public string Username { get; set; }
public string Fullname { get; set; }
public byte[]? img { get; set; }
public List<string> Roles { get; set; } = new();
bool isonline = false;
bool isAuthorizedCompanyUser = false;
public string TitleRole { get; set; } = "";
protected override async Task OnInitializedAsync()
{
await CheckOnline();
if (isonline)
{
//Roles = await localStorageService.GetItem<List<string>>("Role");
Username = await localStorageService.GetItem<string>("Username");
Fullname = await localStorageService.GetItem<string>("Fullname");
string UserID = await localStorageService.GetItem<string>("UserID");
img = await localStorageService.GetItem<byte[]?>("img");
}
TitleRole = Roles.Any(a => a == "HushianManagerCompany") ? "مدیر" : "کارشناس";
isAuthorizedCompanyUser = Roles.Contains("HushianManagerCompany") || (Roles.Contains("HushianExperCompany") && await userService.CheckAvailableExperInCompany());
string route = NavigationManager.Uri.Replace(NavigationManager.BaseUri, "").ToLower();
if (route.Length > 0)
{
SelectedMenu = route switch
{
"conversation" => "page2",
"usermanagement" => "page3",
"groupmanagement" => "page4",
"settings" => "page5",
_ => "page1"
};
}
else SelectedMenu = "page1";
await base.OnInitializedAsync();
}
async Task OnCliclLogout()
{
await authService.Logout();
NavigationManager.NavigateTo("/login");
}
private async Task ChangePasword()
{
var parameters = new Dictionary<string, object>();
parameters.Add("Username", Username);
await modal.ShowAsync<ChangePassWordComponent>(title: "تغییر رمز عبور", parameters: parameters);
}
private async Task Settings()
{
var parameters = new Dictionary<string, object>();
await modal.ShowAsync<Settings>(title: "تنظیمات شرکت", parameters: parameters);
}
private async Task EditCurrentUser()
{
var parameters = new Dictionary<string, object>();
parameters.Add("OnMultipleOfThree", EventCallback.Factory.Create<EditUserFromUserDto>(this, CallBack));
await modal.ShowAsync<EditUserYourselfComponent>(title: $"ویرایش کاربر {Username}", parameters: parameters);
}
async Task CallBack(EditUserFromUserDto edit)
{
await modal.HideAsync();
img = edit.img;
await localStorageService.RemoveItem("img");
await localStorageService.SetItem("img", img);
Fullname = edit.FullName;
await localStorageService.RemoveItem("Fullname");
await localStorageService.SetItem("Fullname", Fullname);
}
private void SetActiveMenu(string menu)
{
SelectedMenu = menu;
if (menu == "page1") NavigationManager.NavigateTo("/");
else if (menu == "page2") NavigationManager.NavigateTo("/Conversation");
else if (menu == "page3") NavigationManager.NavigateTo("/UserManagement");
else if (menu == "page4") NavigationManager.NavigateTo("/GroupManagement");
else if (menu == "page5") NavigationManager.NavigateTo("/Settings");
}
async Task CheckOnline()
{
var token = await localStorageService.GetItem<string>("key");
if (string.IsNullOrEmpty(token))
{
isonline = false;
NavigationManager.NavigateTo("/login");
}
else
{
await baseController.RemoveToken();
await baseController.SetToken(token);
if (!await authService.IsOnline())
{
await baseController.RemoveToken();
isonline = false;
NavigationManager.NavigateTo("/login");
}
else
{
Roles = await localStorageService.GetItem<List<string>>("Role");
if (Roles.Count == 1 && Roles.Contains("HushianUserCompany"))
{
isonline = false;
NavigationManager.NavigateTo("/NotFound");
}
else
isonline = true;
}
}
}
private string GetImageSource()
{
if (img != null && img.Length > 0)
{
return $"data:image/jpeg;base64,{Convert.ToBase64String(img)}";
}
return "/defprofile.jpg";
}
}
@code {
Sidebar sidebar = default!;
IEnumerable<NavItem>? navItems;
private async Task<SidebarDataProviderResult> SidebarDataProvider(SidebarDataProviderRequest request)
{
if (navItems is null)
navItems = GetNavItems();
return await Task.FromResult(request.ApplyTo(navItems));
}
private IEnumerable<NavItem> GetNavItems()
{
navItems = new List<NavItem>
{
// new NavItem { Href = "/", IconName = IconName.HouseDoorFill, Text = "خانه"},
// new NavItem { Href = "/Conversation", IconName = IconName.ChatText, Text = " گفتگو ها"},
new NavItem { Href = "/", IconName = IconName.ChatText, Text = " گفتگو ها"},
new NavItem { Href = "/UserManagement", IconName = IconName.PersonBoundingBox, Text = " مدیریت کاربران"},
new NavItem { Href = "/GroupManagement", IconName = IconName.Grid1X2, Text = " مدیریت گروه ها"},
new NavItem { Href = "/Settings", IconName = IconName.Hammer, Text = " تنظیمات"},
};
return navItems;
}
private void ToggleSidebar() => sidebar.ToggleSidebar();
}