2025-07-11 20:37:28 +03:30
|
|
|
|
@inherits LayoutComponentBase
|
2025-07-12 21:33:44 +03:30
|
|
|
|
@using Common.Dtos.Exper
|
2025-07-11 20:37:28 +03:30
|
|
|
|
@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"
|
2025-08-18 19:34:34 +03:30
|
|
|
|
Href="/"
|
|
|
|
|
IconName="IconName.BootstrapFill"
|
|
|
|
|
Title="هوشــیان"
|
|
|
|
|
BadgeText="v1.3.1"
|
|
|
|
|
ImageSrc="/before/assets/images/logofilehushian.png"
|
|
|
|
|
DataProvider="SidebarDataProvider"
|
|
|
|
|
Width="200"
|
|
|
|
|
WidthUnit="Unit.Px" />
|
2025-07-11 20:37:28 +03:30
|
|
|
|
<main>
|
|
|
|
|
<div class="d-flex align-items-center justify-content-end">
|
2025-08-18 20:01:07 +03:30
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
<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" />
|
2025-08-18 20:01:07 +03:30
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
<Icon Name="IconName.People" Size="IconSize.x3" Style="height: 30px;cursor:pointer;margin-left:10px" @onclick="EditCurrentUser" />
|
|
|
|
|
}
|
2025-08-18 20:01:07 +03:30
|
|
|
|
|
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
<Button Color="ButtonColor.Danger" Size="ButtonSize.Small"
|
|
|
|
|
@onclick=OnCliclLogout Style="margin-left:10px">
|
|
|
|
|
<Icon Name="IconName.DoorOpen" /> خروج
|
|
|
|
|
</Button>
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
</div>
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
<div class="align-items-center justify-content-start" style="margin-right:10px">
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
<Badge Color="BadgeColor.Primary" Style="margin-left:20px">
|
|
|
|
|
<NavLink href="@{hrefuserpanel}">لینک گفتگو کاربر با شما</NavLink>
|
|
|
|
|
</Badge>
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
<Badge Color="BadgeColor.Info" Style="margin-left:20px">
|
|
|
|
|
<NavLink href="@{hrefai}">لینک گفتگو کاربر با دستیار هوش مصنوعی</NavLink>
|
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
|
|
<Badge Color="BadgeColor.Light" Style="margin-left:20px">
|
|
|
|
|
<p>شناسه شرکت : @CompanyID</p>
|
|
|
|
|
</Badge>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
2025-08-18 20:45:58 +03:30
|
|
|
|
<article class="content px-4">
|
2025-07-11 20:37:28 +03:30
|
|
|
|
<div class="py-2">
|
|
|
|
|
@if (isonline)
|
|
|
|
|
{
|
|
|
|
|
@if (isAuthorizedCompanyUser)
|
|
|
|
|
{
|
|
|
|
|
@Body
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
<p>دسترسی به شرکت برای شما یافت نشد</p>
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</article>
|
|
|
|
|
</main>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
@code {
|
2025-08-18 19:34:34 +03:30
|
|
|
|
public string hrefuserpanel { get { return $"UserCP/{CompanyID}"; } }
|
|
|
|
|
public string hrefai { get { return $"aichat/{CompanyID}"; } }
|
2025-07-11 20:37:28 +03:30
|
|
|
|
private Modal modal = default!;
|
|
|
|
|
public string Info { get; set; } = "";
|
|
|
|
|
private string SelectedMenu = "page2";
|
|
|
|
|
public string Username { get; set; }
|
|
|
|
|
public string Fullname { get; set; }
|
2025-08-18 19:34:34 +03:30
|
|
|
|
public int CompanyID { get; set; } = 0;
|
2025-07-11 20:37:28 +03:30
|
|
|
|
public byte[]? img { get; set; }
|
2025-07-25 21:29:57 +03:30
|
|
|
|
public string Role { get; set; }
|
2025-07-11 20:37:28 +03:30
|
|
|
|
bool isonline = false;
|
|
|
|
|
bool isAuthorizedCompanyUser = false;
|
|
|
|
|
public string TitleRole { get; set; } = "";
|
|
|
|
|
protected override async Task OnInitializedAsync()
|
|
|
|
|
{
|
2025-07-26 11:47:32 +03:30
|
|
|
|
Role = await localStorageService.GetItem<string>("C/Role");
|
2025-07-11 20:37:28 +03:30
|
|
|
|
await CheckOnline();
|
|
|
|
|
if (isonline)
|
|
|
|
|
{
|
|
|
|
|
//Roles = await localStorageService.GetItem<List<string>>("Role");
|
2025-07-26 11:47:32 +03:30
|
|
|
|
Username = await localStorageService.GetItem<string>("C/Username");
|
|
|
|
|
Fullname = await localStorageService.GetItem<string>("C/Fullname");
|
2025-08-18 19:34:34 +03:30
|
|
|
|
CompanyID = await localStorageService.GetItem<int>("C/CompanyId");
|
2025-07-26 11:47:32 +03:30
|
|
|
|
string UserID = await localStorageService.GetItem<string>("C/UserID");
|
|
|
|
|
img = await localStorageService.GetItem<byte[]?>("C/img");
|
2025-07-11 20:37:28 +03:30
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-07-25 21:29:57 +03:30
|
|
|
|
TitleRole = Role == "Company" ? "مدیر" : "کارشناس";
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
2025-07-26 11:47:32 +03:30
|
|
|
|
isAuthorizedCompanyUser = Role == "Company" || Role == "Exper" && await userService.CheckAvailableExperInCompany();
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
|
|
|
|
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 Settings()
|
|
|
|
|
{
|
|
|
|
|
var parameters = new Dictionary<string, object>();
|
|
|
|
|
await modal.ShowAsync<Settings>(title: "تنظیمات شرکت", parameters: parameters);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private async Task EditCurrentUser()
|
|
|
|
|
{
|
2025-07-26 11:47:32 +03:30
|
|
|
|
if (Role == "Exper")
|
|
|
|
|
{
|
|
|
|
|
var parameters = new Dictionary<string, object>();
|
|
|
|
|
parameters.Add("OnMultipleOfThree", EventCallback.Factory.Create<Update_ExperDto>(this, CallBack));
|
|
|
|
|
|
|
|
|
|
await modal.ShowAsync<EditUserYourselfComponent>(title: $"ویرایش کاربر {Username}", parameters: parameters);
|
|
|
|
|
}
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
2025-07-12 21:33:44 +03:30
|
|
|
|
async Task CallBack(Update_ExperDto edit)
|
2025-07-11 20:37:28 +03:30
|
|
|
|
{
|
|
|
|
|
await modal.HideAsync();
|
2025-07-12 21:33:44 +03:30
|
|
|
|
// await localStorageService.RemoveItem("img");
|
|
|
|
|
// await localStorageService.SetItem("img", img);
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
|
|
|
|
Fullname = edit.FullName;
|
2025-07-26 11:47:32 +03:30
|
|
|
|
await localStorageService.RemoveItem("C/Fullname");
|
|
|
|
|
await localStorageService.SetItem("C/Fullname", Fullname);
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
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()
|
|
|
|
|
{
|
2025-07-25 21:29:57 +03:30
|
|
|
|
var token = await localStorageService.GetItem<string>("C/key");
|
2025-07-11 20:37:28 +03:30
|
|
|
|
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
|
|
|
|
|
{
|
2025-07-25 21:29:57 +03:30
|
|
|
|
Role = await localStorageService.GetItem<string>("C/Role");
|
2025-07-26 11:47:32 +03:30
|
|
|
|
if (Role == "User")
|
2025-07-11 20:37:28 +03:30
|
|
|
|
{
|
|
|
|
|
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()
|
|
|
|
|
{
|
2025-07-26 11:47:32 +03:30
|
|
|
|
if (Role == "Exper")
|
|
|
|
|
navItems = new List<NavItem>
|
|
|
|
|
{
|
|
|
|
|
new NavItem { Href = "/", IconName = IconName.ChatText, Text = " گفتگو ها"},
|
|
|
|
|
new NavItem { Href = "/Settings", IconName = IconName.Hammer, Text = " تنظیمات"},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
else if (Role == "Company")
|
|
|
|
|
navItems = new List<NavItem>{
|
2025-07-11 20:37:28 +03:30
|
|
|
|
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 = " تنظیمات"},
|
2025-07-26 11:47:32 +03:30
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
else navItems = new List<NavItem>();
|
|
|
|
|
|
2025-07-11 20:37:28 +03:30
|
|
|
|
|
|
|
|
|
return navItems;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void ToggleSidebar() => sidebar.ToggleSidebar();
|
|
|
|
|
}
|