add marketer management page , fix order sub name issue

release
Amir Hossein Khademi 2024-04-18 19:21:31 +03:30
parent 986e7a3654
commit 73e8de3b0d
8 changed files with 160 additions and 11 deletions

View File

@ -1,5 +1,6 @@
@using Netina.AdminPanel.PWA.Models
@using Netina.AdminPanel.PWA.Layout
@using Netina.AdminPanel.PWA.Pages
@inject NavigationManager NavigationManager
<Router AppAssembly="@typeof(App).Assembly">
<Found Context="routeData">

View File

@ -63,14 +63,13 @@
</MudNavGroup>
<MudNavGroup Title="فروشگاه من" Expanded="false"
Icon="@Icons.Material.Outlined.Settings">
<MudNavGroup Title="فروشگاه من" Expanded="false" Icon="@Icons.Material.Outlined.Settings">
<MudNavLink Href="management/shop" Icon="@Icons.Material.Filled.Shop2">فروشگاه</MudNavLink>
<MudNavLink Href="management/marketer" Icon="@Icons.Material.Filled.Person4">بازاریاب ها</MudNavLink>
<MudNavLink Href="management/faqs" Icon="@Icons.Material.Filled.ManageAccounts">سوالات متداول</MudNavLink>
</MudNavGroup>
<MudNavGroup Title="تنظیماتـــ" Expanded="false"
Icon="@Icons.Material.Outlined.Settings">
<MudNavLink Href="management/shop" Icon="@Icons.Material.Filled.Shop2">فروشگاه</MudNavLink>
<MudNavGroup Title="تنظیماتـــ" Expanded="false" Icon="@Icons.Material.Outlined.Settings">
<MudNavLink Href="setting/users" Icon="@Icons.Material.Filled.ManageAccounts">نقش ها و کاربران</MudNavLink>
</MudNavGroup>
</MudNavMenu>

View File

@ -1,6 +1,4 @@
@using Netina.AdminPanel.PWA.Services.RestServices
@using Netina.AdminPanel.PWA.Utilities
@using Netina.AdminPanel.PWA.Extensions
@using Netina.AdminPanel.PWA.Extensions
@inject ISnackbar Snackbar
@inject IRestWrapper RestWrapper
@inject IUserUtility UserUtility

View File

@ -1,4 +1,5 @@
@using Radzen.Blazor
@using Netina.AdminPanel.PWA.Pages
@using Radzen.Blazor
@using Netina.AdminPanel.PWA.Utilities
@using Netina.AdminPanel.PWA.Models
@inherits LayoutComponentBase

View File

@ -0,0 +1,64 @@
@page "/management/marketer"
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
@inject IDialogService DialogService
@inject NavigationManager NavigationManager
@inject ISnackbar Snackbar
@inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]">
<MudGrid>
<MudItem xs="12">
<MudPaper class="px-5 py-5">
<MudStack Row="true">
<MudStack class="mb-5 mx-2">
<MudText Typo="Typo.h4">jتنظیماتـــ بازاریاب ها</MudText>
<MudText Typo="Typo.caption">شما می توانید تنظیمات بازاریاب های خود را ویرایش نمایید</MudText>
</MudStack>
<MudSpacer />
<BaseButtonUi Size="Size.Large"
OnClickCallback="ViewModel.SubmitSettingAsync"
class="mt-2 mb-8 w-64 rounded-md"
IsProcessing="@ViewModel.IsProcessing"
Icon="@Icons.Material.Outlined.Check"
Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" />
</MudStack>
<MudGrid>
<MudItem xs="12" sm="12">
<MudTextField T="int" @bind-Value="@ViewModel.PageDto.ProfitPercent" Variant="Variant.Outlined" Label="درصد از هر فروش"></MudTextField>
</MudItem>
<MudItem xs="12" sm="12">
<div class="min-h-[33rem] w-full">
<MudStack class="mt-4" Spacing="0">
<MudText Typo="Typo.h6">قرارداد بازاریاب ها</MudText>
<MudText Typo="Typo.caption">قراردادی که بازاریاب ها در مرحله ثبت نام باید با ان موافقت کنند</MudText>
</MudStack>
<MudGrid>
<MudItem sm="12">
<RichTextEditorUi @bind-Text="@ViewModel.PageDto.ContractTerms" />
</MudItem>
</MudGrid>
</div>
</MudItem>
</MudGrid>
</MudPaper>
</MudItem>
</MudGrid>
</MudStack>
@code
{
public MarketerManagementPageViewModel ViewModel { get; set; }
protected override async Task OnInitializedAsync()
{
ViewModel = new MarketerManagementPageViewModel(NavigationManager, Snackbar, UserUtility, RestWrapper, DialogService);
await ViewModel.InitializeAsync();
await base.OnInitializedAsync();
}
}

View File

@ -0,0 +1,78 @@
using Netina.Domain.MartenEntities.Settings;
namespace Netina.AdminPanel.PWA.Pages;
public class MarketerManagementPageViewModel : BaseViewModel<MarketerSetting>
{
private readonly NavigationManager _navigationManager;
private readonly ISnackbar _snackbar;
private readonly IUserUtility _userUtility;
private readonly IDialogService _dialogService;
private readonly IRestWrapper _restWrapper;
public MarketerManagementPageViewModel(NavigationManager navigationManager, ISnackbar snackbar, IUserUtility userUtility, IRestWrapper restWrapper, IDialogService dialogService)
{
_navigationManager = navigationManager;
_snackbar = snackbar;
_userUtility = userUtility;
_restWrapper = restWrapper;
_dialogService = dialogService;
}
public override async Task InitializeAsync()
{
try
{
IsProcessing = true;
var token = await _userUtility.GetBearerTokenAsync();
if (token == null)
throw new Exception("Token is null");
PageDto = await _restWrapper.SettingRestApi.GetSettingAsync<MarketerSetting>("MarketerSetting", token);
}
catch (ApiException e)
{
var exe = await e.GetContentAsAsync<ApiResult>();
_snackbar.Add(exe != null ? exe.Message : e.Content, Severity.Error);
}
catch (Exception ex)
{
_snackbar.Add(ex.Message, Severity.Error);
}
finally
{
IsProcessing = false;
}
await base.InitializeAsync();
}
public async Task SubmitSettingAsync()
{
try
{
var token = await _userUtility.GetBearerTokenAsync();
if (token == null) throw new Exception("Token is null");
await _restWrapper.SettingRestApi.PostSettingAsync("MarketerSetting", PageDto, token);
_snackbar.Add("تنظیمات بازاریاب ها با موفقیت به روز شد", Severity.Success);
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
_snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
}
catch (Exception e)
{
_snackbar.Add(e.Message, Severity.Error);
}
finally
{
IsProcessing = false;
}
}
}

View File

@ -1,6 +1,4 @@
@page "/management/shop"
@using Netina.AdminPanel.PWA.Utilities
@using Netina.AdminPanel.PWA.Services.RestServices
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
@inject IDialogService DialogService

View File

@ -2093,6 +2093,16 @@ input:checked + .toggle-bg {
color: rgb(255 255 255 / var(--tw-text-opacity));
}
.text-black {
--tw-text-opacity: 1;
color: rgb(0 0 0 / var(--tw-text-opacity));
}
.\!text-black {
--tw-text-opacity: 1 !important;
color: rgb(0 0 0 / var(--tw-text-opacity)) !important;
}
.opacity-0 {
opacity: 0;
}