feat : add newsletter and newsletter members , add version 0.8.15.22
add needed controller and models , fix sidebar in responsiverelease
parent
a168d26dfc
commit
1342dd86f3
|
@ -3,17 +3,7 @@
|
|||
|
||||
<MudStack class="w-full pt-4 h-screen bg-[--mud-palette-background]">
|
||||
<MudImage class="mx-15 mt-5" Src="https://vesmeh.com/wp-content/uploads/2023/02/logo-web.png.webp"></MudImage>
|
||||
@* <MudTreeView T="TreeItemData" Items="@TreeItems" Hover="true" MultiSelection="false" SelectedValueChanged="SelectedChange">
|
||||
<ItemTemplate Context="item">
|
||||
<MudTreeViewItem Value="@item" Items="@item.TreeItems" Icon="@item.Icon">
|
||||
<BodyContent>
|
||||
<div class="py-3">
|
||||
<MudText>@item.Text</MudText>
|
||||
</div>
|
||||
</BodyContent>
|
||||
</MudTreeViewItem>
|
||||
</ItemTemplate>
|
||||
</MudTreeView> *@
|
||||
|
||||
<MudNavMenu Rounded="true" Margin="Margin.Dense" Color="Color.Warning" Class="pa-2" Bordered="true">
|
||||
<MudNavLink Href="home" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.Dashboard">داشبورد</MudNavLink>
|
||||
|
||||
|
@ -59,6 +49,8 @@
|
|||
Icon="@Icons.Material.Outlined.PeopleAlt">مشترکین</MudNavLink>
|
||||
<MudNavLink Href="smspanel"
|
||||
Icon="@Icons.Material.Outlined.Sms">پنل پیامکی</MudNavLink>
|
||||
<MudNavLink Href="newsletler"
|
||||
Icon="@Icons.Material.Outlined.Newspaper">خبرنامه</MudNavLink>
|
||||
</MudNavGroup>
|
||||
|
||||
<MudNavGroup Title="وبلاگــــ" Expanded="false"
|
||||
|
|
|
@ -63,8 +63,8 @@
|
|||
|
||||
<MudGrid Spacing="0">
|
||||
|
||||
<MudItem sm="0" md="3" lg="2">
|
||||
<MudHidden Breakpoint="Breakpoint.MdAndDown">
|
||||
<MudItem md="3" lg="2">
|
||||
<MudHidden Breakpoint="Breakpoint.SmAndDown">
|
||||
<SideBarUi/>
|
||||
</MudHidden>
|
||||
</MudItem>
|
||||
|
|
|
@ -23,4 +23,5 @@ public static class Address
|
|||
public static string PaymentController => $"{BaseAddress}/accounting/pay";
|
||||
public static string PageController => $"{BaseAddress}/page";
|
||||
public static string ScraperController => $"{BaseAddress}/scraper";
|
||||
public static string NewsletterMemberController => $"{BaseAddress}/newsletter/member";
|
||||
}
|
|
@ -5,8 +5,8 @@
|
|||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
|
||||
<AssemblyVersion>0.7.14.22</AssemblyVersion>
|
||||
<FileVersion>0.7.14.22</FileVersion>
|
||||
<AssemblyVersion>0.8.15.22</AssemblyVersion>
|
||||
<FileVersion>0.8.15.22</FileVersion>
|
||||
<AssemblyName>$(MSBuildProjectName)</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -2,53 +2,77 @@
|
|||
@page "/home"
|
||||
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
|
||||
|
||||
<MudStack class="p-8 w-full h-screen bg-[--mud-palette-background-grey]">
|
||||
<MudGrid>
|
||||
<MudItem sm="4" lg="2">
|
||||
<MudStack class="p-8 w-full h-screen overflow-y-scroll bg-[--mud-palette-background-grey]">
|
||||
<MudHidden Breakpoint="Breakpoint.SmAndDown">
|
||||
<MudGrid>
|
||||
<MudItem xs="12" sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد محصولاتــ</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="12" sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد بلاگــ ها</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-blue-600"><b>845</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="12" sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">فروش های امروز</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-lime-600"><b>125</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="12" sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">فروش های تایید نشده</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-rose-600"><b>10</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="12" sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد برنـــدها</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-gray-600"><b>125</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem xs="12" sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد مشترکین</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-purple-600"><b>5632</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudHidden>
|
||||
<MudHidden Breakpoint="Breakpoint.SmAndUp">
|
||||
<MudStack Row="true" class="h-60 w-screen overflow-x-scroll">
|
||||
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد محصولاتــ</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem sm="4" lg="2">
|
||||
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد بلاگــ ها</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-blue-600"><b>845</b></MudText>
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد محصولاتــ</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem sm="4" lg="2">
|
||||
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">فروش های امروز</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-lime-600"><b>125</b></MudText>
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد محصولاتــ</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">فروش های تایید نشده</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-rose-600"><b>10</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد برنـــدها</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-gray-600"><b>125</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
<MudItem sm="4" lg="2">
|
||||
<MudPaper class="p-3 m-2 rounded-md" Elevation="2">
|
||||
<MudText Typo="Typo.body1" class="mb-4">تعداد مشترکین</MudText>
|
||||
<MudText Typo="Typo.h3" Align="Align.Center" class="text-purple-600"><b>5632</b></MudText>
|
||||
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
</MudHidden>
|
||||
<MudGrid>
|
||||
<MudItem md="4">
|
||||
<MudItem xs="12" sm="4" md="4">
|
||||
<MudStack class="p-2">
|
||||
|
||||
<BaseButtonUi class="w-full rounded-md"
|
||||
|
@ -58,7 +82,7 @@
|
|||
</MudStack>
|
||||
</MudItem>
|
||||
|
||||
<MudItem md="4">
|
||||
<MudItem xs="12" sm="4" md="4">
|
||||
<MudStack class="p-2">
|
||||
|
||||
<BaseButtonUi class="w-full rounded-md"
|
||||
|
@ -68,7 +92,7 @@
|
|||
</MudStack>
|
||||
</MudItem>
|
||||
|
||||
<MudItem md="4">
|
||||
<MudItem xs="12" sm="4" md="4">
|
||||
<MudStack class="p-2">
|
||||
|
||||
<BaseButtonUi class="w-full rounded-md"
|
||||
|
@ -80,7 +104,7 @@
|
|||
</MudGrid>
|
||||
|
||||
<MudGrid class="mt-3">
|
||||
<MudItem sm="12" md="6">
|
||||
<MudItem xs="12" md="6">
|
||||
<MudStack class="m-2">
|
||||
<MudText Typo="Typo.h5"><b>سفارشاتــ تایید نشده</b></MudText>
|
||||
<MudPaper class="rounded-md p-3" Elevation="2">
|
||||
|
@ -119,7 +143,7 @@
|
|||
</MudStack>
|
||||
</MudItem>
|
||||
|
||||
<MudItem sm="12" md="6">
|
||||
<MudItem xs="12" md="6">
|
||||
<MudStack class="m-2">
|
||||
<MudText Typo="Typo.h5"><b>سفارشاتــ ارسال نشده</b></MudText>
|
||||
<MudPaper class="rounded-md p-3" Elevation="2">
|
||||
|
|
|
@ -0,0 +1,49 @@
|
|||
@page "/newsletler"
|
||||
@attribute [Microsoft.AspNetCore.Authorization.Authorize]
|
||||
|
||||
@inject IDialogService DialogService
|
||||
@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">
|
||||
<MudStack Row="true" class="mb-5">
|
||||
<MudText Typo="Typo.h4">اعضا خبرنامه</MudText>
|
||||
<MudChip Color="Color.Info" Variant="Variant.Outlined">124 عدد</MudChip>
|
||||
<MudSpacer />
|
||||
</MudStack>
|
||||
<MudPaper>
|
||||
<MudDataGrid FixedFooter="true" FixedHeader="true" Striped="true"
|
||||
T="NewsletterMemberSDto" Items="@ViewModel.Members" CurrentPage="@ViewModel.CurrentPage"
|
||||
RowsPerPage="20" Filterable="false" Loading="@ViewModel.IsProcessing"
|
||||
SortMode="@SortMode.None" Groupable="false">
|
||||
<Columns>
|
||||
<PropertyColumn Title="شماره تماس" Property="arg => arg.PhoneNumber" />
|
||||
<PropertyColumn Title="ایمیل" Property="arg => arg.Email" />
|
||||
</Columns>
|
||||
<PagerContent>
|
||||
<MudStack Row="true" class="w-full">
|
||||
|
||||
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
|
||||
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" />
|
||||
</MudStack>
|
||||
|
||||
</PagerContent>
|
||||
</MudDataGrid>
|
||||
</MudPaper>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudStack>
|
||||
|
||||
@code
|
||||
{
|
||||
public NewsletterManagementPageViewModel ViewModel { get; set; }
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
ViewModel = new NewsletterManagementPageViewModel(Snackbar, UserUtility, RestWrapper, DialogService);
|
||||
await ViewModel.InitializeAsync();
|
||||
await base.OnInitializedAsync();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
using NetinaShop.Domain.Entities.Users;
|
||||
|
||||
namespace NetinaShop.AdminPanel.PWA.Pages;
|
||||
|
||||
public class NewsletterManagementPageViewModel : BaseViewModel
|
||||
{
|
||||
|
||||
|
||||
private readonly ISnackbar _snackbar;
|
||||
private readonly IUserUtility _userUtility;
|
||||
private readonly IDialogService _dialogService;
|
||||
private readonly IRestWrapper _restWrapper;
|
||||
|
||||
public ObservableCollection<NewsletterMemberSDto> Members { get; set; } = new ObservableCollection<NewsletterMemberSDto>();
|
||||
|
||||
public int CurrentPage = 0;
|
||||
public int PageCount = 1;
|
||||
|
||||
public NewsletterManagementPageViewModel(ISnackbar snackbar, IUserUtility userUtility, IRestWrapper restWrapper, IDialogService dialogService)
|
||||
{
|
||||
_snackbar = snackbar;
|
||||
_userUtility = userUtility;
|
||||
_restWrapper = restWrapper;
|
||||
_dialogService = dialogService;
|
||||
}
|
||||
|
||||
public override async Task InitializeAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
var token = await _userUtility.GetBearerTokenAsync();
|
||||
if (token == null)
|
||||
throw new Exception("Token is null");
|
||||
IsProcessing = true;
|
||||
Members.Clear();
|
||||
var dto = await _restWrapper.CrudDtoApiRest<NewsletterMember, NewsletterMemberSDto, Guid>(Address.NewsletterMemberController)
|
||||
.ReadAll(CurrentPage, token);
|
||||
dto.ForEach(d => Members.Add(d));
|
||||
if (Members.Count == 20)
|
||||
PageCount = 2;
|
||||
}
|
||||
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;
|
||||
}
|
||||
await base.InitializeAsync();
|
||||
}
|
||||
|
||||
public async Task ChangePageAsync(int page)
|
||||
{
|
||||
CurrentPage = page - 1;
|
||||
if (CurrentPage > PageCount - 2)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
IsProcessing = true;
|
||||
|
||||
var token = await _userUtility.GetBearerTokenAsync();
|
||||
if (token == null)
|
||||
throw new Exception("Token is null");
|
||||
List<NewsletterMemberSDto> dto = await _restWrapper.CrudDtoApiRest<NewsletterMember, NewsletterMemberSDto, Guid>(Address.NewsletterMemberController)
|
||||
.ReadAll(CurrentPage, token);
|
||||
|
||||
|
||||
dto.ForEach(d => Members.Add(d));
|
||||
if (Members.Count % 20 == 0)
|
||||
PageCount = CurrentPage + 2;
|
||||
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -1222,6 +1222,9 @@ input:checked + .toggle-bg {
|
|||
.h-6 {
|
||||
height: 1.5rem;
|
||||
}
|
||||
.h-60 {
|
||||
height: 15rem;
|
||||
}
|
||||
.h-64 {
|
||||
height: 16rem;
|
||||
}
|
||||
|
@ -1417,6 +1420,9 @@ input:checked + .toggle-bg {
|
|||
.overflow-hidden {
|
||||
overflow: hidden;
|
||||
}
|
||||
.overflow-x-scroll {
|
||||
overflow-x: scroll;
|
||||
}
|
||||
.overflow-y-scroll {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
|
|
@ -1347,6 +1347,10 @@ input:checked + .toggle-bg {
|
|||
height: 1.5rem;
|
||||
}
|
||||
|
||||
.h-60 {
|
||||
height: 15rem;
|
||||
}
|
||||
|
||||
.h-64 {
|
||||
height: 16rem;
|
||||
}
|
||||
|
@ -1396,10 +1400,6 @@ input:checked + .toggle-bg {
|
|||
max-height: 40rem;
|
||||
}
|
||||
|
||||
.min-h-\[28rem\] {
|
||||
min-height: 28rem;
|
||||
}
|
||||
|
||||
.min-h-\[33rem\] {
|
||||
min-height: 33rem;
|
||||
}
|
||||
|
@ -1606,6 +1606,10 @@ input:checked + .toggle-bg {
|
|||
overflow: hidden;
|
||||
}
|
||||
|
||||
.overflow-x-scroll {
|
||||
overflow-x: scroll;
|
||||
}
|
||||
|
||||
.overflow-y-scroll {
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue