feat(FastProductCreateDialog),refactor(Pages),refactor(Commands)

-ADD FAST PRODUCT CREATE DIALOG
-Refactor page and layout and fix some responsive issues
-Refactor brand and product command and return Guid in response create
subProduct
Amir Hossein Khademi 2024-06-08 22:51:09 +03:30
parent 55931702a9
commit 314d4ff56c
27 changed files with 605 additions and 330 deletions

View File

@ -30,9 +30,9 @@
<ProgressIndicatorInPopoverTemplate> <ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false"> <MudList Clickable="false">
<MudListItem> <MudListItem>
<div class="flex flex-row w-full mx-auto"> <div class="mx-auto flex w-full flex-row">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" /> <MudProgressCircular class="my-auto -ml-4 mr-1" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p> <p class="text-md mx-auto my-1 font-bold">منتظر بمانید</p>
</div> </div>
</MudListItem> </MudListItem>
</MudList> </MudList>
@ -63,7 +63,6 @@
<div class="min-h-[33rem]"> <div class="min-h-[33rem]">
<MudStack class="mt-4" Spacing="0"> <MudStack class="mt-4" Spacing="0">
<MudText Typo="Typo.h6">متن بلاگ</MudText> <MudText Typo="Typo.h6">متن بلاگ</MudText>
<MudText Typo="Typo.caption">می توانید کتن کامل بلاگــــ خود را کامل وارد کنید</MudText> <MudText Typo="Typo.caption">می توانید کتن کامل بلاگــــ خود را کامل وارد کنید</MudText>
</MudStack> </MudStack>
@ -79,7 +78,7 @@
<MudTabPanel Text="تـــــصاویر" Icon="@Icons.Material.Outlined.ImageSearch"> <MudTabPanel Text="تـــــصاویر" Icon="@Icons.Material.Outlined.ImageSearch">
<div class="min-h-[33rem]"> <div class="min-h-[33rem]">
<MudStack class="mt-4 mb-2" Spacing="0"> <MudStack class="mb-2 mt-4" Spacing="0">
<MudText Typo="Typo.h6">تصاویر محصول</MudText> <MudText Typo="Typo.h6">تصاویر محصول</MudText>
<MudText Typo="Typo.caption">می توانید برای محصول چند تصویر اپلود کنید</MudText> <MudText Typo="Typo.caption">می توانید برای محصول چند تصویر اپلود کنید</MudText>
@ -88,15 +87,15 @@
<MudIconButton HtmlTag="label" <MudIconButton HtmlTag="label"
Color="Color.Info" Color="Color.Info"
Variant="Variant.Outlined" Variant="Variant.Outlined"
class="w-28 h-28" class="h-28 w-28"
Size="Size.Large" Size="Size.Large"
Icon="@Icons.Material.Outlined.Wallpaper" Icon="@Icons.Material.Outlined.Wallpaper"
OnClick="async () => await ViewModel.SelectFileAsync()"> OnClick="async () => await ViewModel.SelectFileAsync()">
</MudIconButton> </MudIconButton>
@foreach (var item in ViewModel.Files) @foreach (var item in ViewModel.Files)
{ {
<div class="w-28 h-28"> <div class="h-28 w-28">
<MudImage Src="@item.GetLink()" Elevation="25" Class="rounded-lg w-28 h-28 absolute" /> <MudImage Src="@item.GetLink()" Elevation="25" Class="absolute h-28 w-28 rounded-lg" />
<MudIconButton DisableElevation="true" <MudIconButton DisableElevation="true"
class="absolute m-1.5" class="absolute m-1.5"
@ -107,11 +106,11 @@
Icon="@Icons.Material.Outlined.Delete" /> Icon="@Icons.Material.Outlined.Delete" />
@if (item.IsHeader) @if (item.IsHeader)
{ {
<p class="bg-pink-500 px-1.5 py-0.5 absolute bottom-0 mr-2 rounded-lg text-white">هدر</p> <p class="absolute bottom-0 mr-2 rounded-lg bg-pink-500 px-1.5 py-0.5 text-white">هدر</p>
} }
@if (item.IsPrimary) @if (item.IsPrimary)
{ {
<p class="bg-blue-500 px-1.5 py-0.5 absolute bottom-0 mr-2 rounded-lg text-white">اصلی</p> <p class="absolute bottom-0 mr-2 rounded-lg bg-blue-500 px-1.5 py-0.5 text-white">اصلی</p>
} }
</div> </div>
} }
@ -124,7 +123,7 @@
</MudContainer> </MudContainer>
</DialogContent> </DialogContent>
<DialogActions> <DialogActions>
<MudStack Row="true" class="w-full h-fit mx-4 bottom-0"> <MudStack Row="true" class="bottom-0 mx-4 h-fit w-full">
@if (ViewModel.IsEditing) @if (ViewModel.IsEditing)
{ {

View File

@ -0,0 +1,142 @@
@inject ISnackbar Snackbar
@inject IRestWrapper RestWrapper
@inject IUserUtility UserUtility
@inject IDialogService DialogService
<MudDialog class="mx-auto h-screen overflow-y-auto p-0">
<DialogContent>
<MudContainer class="p-0">
<MudStack Row="true">
<MudText Typo="Typo.h6" class="my-auto">افزودن سریع محصول</MudText>
<MudSpacer />
<MudIconButton Icon="@Icons.Material.Filled.Close" OnClick="()=>MudDialog.Close()"></MudIconButton>
</MudStack>
<MudAlert Dense="true" NoIcon="true" Variant="Variant.Outlined" ContentAlignment="HorizontalAlignment.Center" class="mb-4 mt-2" Severity="Severity.Warning">در این صفحه تنها اطلاعات اولیه ثبت میشوند و باید برای تکمیل اطلاعات محصول به صحفه اصلی تغییرات محصول بروید</MudAlert>
<MudStack Row="true" class="no-scrollbar h-full w-full overflow-x-auto">
<MudStack class="min-w-[310px]">
<MudText Typo="Typo.h6"><b>1. انتخاب دسته بندی</b></MudText>
<MudTextField class="-mt-3 flex-none" T="string" Label="جست جو دسته" />
<MudTreeView MultiSelection="false" @bind-SelectedValue="@ViewModel.SelectedCategory" T="ProductCategorySDto" ServerData="ViewModel.LoadCategories" Items="ViewModel.Categories">
<ItemTemplate>
<MudTreeViewItem class="my-1" Value="@context" LoadingIconColor="Color.Info"
Text="@context.Name"
EndTextTypo="@Typo.caption" />
</ItemTemplate>
</MudTreeView>
</MudStack>
<MudDivider Vertical="true" FlexItem="true" class="mx-1" />
<MudStack class="min-w-[310px] sm:w-full">
<MudText Typo="Typo.h6">1. افزودن محصول به <b> @ViewModel.SelectedCategory?.Name</b></MudText>
<MudGrid Spacing="1" class="-ml-1 w-full">
<MudItem xs="12" md="6">
<MudTextField Disabled="@ViewModel.FormEnable.Not()" @bind-Value="@ViewModel.PageDto.PersianName" Variant="Variant.Outlined" T="string" Label="نام فارسی کالا" />
</MudItem>
<MudItem xs="12" md="6">
<MudAutocomplete Disabled="@ViewModel.FormEnable.Not()" Required="true" ToStringFunc="dto => dto.PersianName" @bind-Value="@ViewModel.SelectedBrand"
SearchFunc="ViewModel.SearchBrand"
@bind-Text="@brandAutocompleteText"
T="BrandSDto"
Label="برند"
Variant="Variant.Outlined">
<NoItemsTemplate>
<MudStack Row="true" class="p-1">
<MudChip Variant="Variant.Text" class="my-auto"
Color="Color.Info">@brandAutocompleteText</MudChip>
<MudSpacer />
<MudIconButton Icon="@Icons.Material.Filled.Add"
Size="@Size.Small"
Variant="@Variant.Outlined"
OnClick="()=>ViewModel.AddBrand(brandAutocompleteText)"
Color="@Color.Secondary" />
</MudStack>
</NoItemsTemplate>
<BeforeItemsTemplate>
@if (!brandAutocompleteText.IsNullOrEmpty())
{
<MudStack Row="true">
<MudChip Variant="Variant.Text" class="my-auto"
Color="Color.Info">@brandAutocompleteText</MudChip>
<MudSpacer />
<MudIconButton Icon="@Icons.Material.Filled.Add"
Size="@Size.Small"
Variant="@Variant.Outlined"
Color="@Color.Secondary" />
</MudStack>
}
</BeforeItemsTemplate>
<ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false">
<MudListItem>
<div class="mx-auto flex w-full flex-row">
<MudProgressCircular class="my-auto -ml-4 mr-1" Size="Size.Small" Indeterminate="true" />
<p class="text-md mx-auto my-1 font-bold">منتظر بمانید</p>
</div>
</MudListItem>
</MudList>
</ProgressIndicatorInPopoverTemplate>
<ItemTemplate Context="e">
<p>@e.PersianName</p>
</ItemTemplate>
</MudAutocomplete>
</MudItem>
<MudItem xs="12" md="6">
<MudTextField Disabled="@ViewModel.FormEnable.Not()" @bind-Value="@ViewModel.PageDto.Stock" Variant="Variant.Outlined" T="int" Label="تعداد موجودی" />
</MudItem>
<MudItem xs="12" md="6">
<MudTextField Disabled="@ViewModel.FormEnable.Not()" @bind-Value="@ViewModel.PageDto.Cost" Format="N0" Variant="Variant.Outlined" T="double" Label="قیمت ( تومان )" />
</MudItem>
</MudGrid>
<MudFileUpload T="IReadOnlyList<IBrowserFile>"
AppendMultipleFiles
OnFilesChanged="@ViewModel.OnInputFileChanged"
Hidden="@false"
Disabled="@ViewModel.FormEnable.Not()"
InputClass="absolute mud-width-full mud-height-full overflow-hidden z-20"
InputStyle="opacity:0"
class="flex-none"
Accept=".png, .jpg"
@ondragenter="@ViewModel.SetDragClass"
@ondragleave="@ViewModel.ClearDragClass"
@ondragend="@ViewModel.ClearDragClass">
<ButtonTemplate>
<MudPaper Height="300px"
Outlined="true"
Class="@ViewModel.DragClass">
<MudText Typo="Typo.h6">
فایل های خود را داخل کادر بکشید یا با کلیک روی کادر انتخاب کنید
</MudText>
@foreach (var file in ViewModel.FileNames)
{
<MudChip Color="Color.Dark" Text="@file" />
}
</MudPaper>
</ButtonTemplate>
</MudFileUpload>
<MudButton Disabled="@ViewModel.FormEnable.Not()" Color="Color.Success" StartIcon="@Icons.Material.Filled.Check" OnClick="@ViewModel.SubmitCreateProduct">ثبت محصول</MudButton>
</MudStack>
</MudStack>
</MudContainer>
</DialogContent>
</MudDialog>
@code
{
[CascadingParameter]
MudDialogInstance MudDialog { get; set; }
string brandAutocompleteText = string.Empty;
public FastProductCreateDialogBoxViewModel ViewModel { get; set; }
protected override async Task OnInitializedAsync()
{
ViewModel = new FastProductCreateDialogBoxViewModel(Snackbar, RestWrapper, UserUtility, DialogService, MudDialog);
await ViewModel.InitializeAsync();
await base.OnInitializedAsync();
}
}

View File

@ -0,0 +1,159 @@
using Microsoft.AspNetCore.Components.Forms;
using Netina.Common.Models.Api;
using Netina.Domain.Entities.Brands;
namespace Netina.AdminPanel.PWA.Dialogs;
public class FastProductCreateDialogBoxViewModel(ISnackbar snackbar, IRestWrapper restWrapper, IUserUtility userUtility, IDialogService dialogService, MudDialogInstance dialogInstance)
: BaseViewModel<ProductLDto>(userUtility)
{
public HashSet<ProductCategorySDto> Categories { get; set; } = new();
public bool FormEnable = false;
private ProductCategorySDto? _selectedCategory;
public ProductCategorySDto? SelectedCategory
{
get => _selectedCategory;
set
{
_selectedCategory = value;
FormEnable = _selectedCategory != null;
}
}
public BrandSDto? SelectedBrand { get; set; }
public override async Task InitializeAsync()
{
var categories = await restWrapper.ProductCategoryRestApi.ReadAll(true);
categories.ForEach(c => Categories.Add(c));
PageDto.Stock = 1;
await base.InitializeAsync();
}
public async Task<HashSet<ProductCategorySDto>> LoadCategories(ProductCategorySDto arg)
{
return arg.Children.ToHashSet();
}
private readonly List<IBrowserFile> Files = new();
public readonly List<string> FileNames = new();
private const string DefaultDragClass = "relative rounded-lg border-2 border-dashed pa-4 mt-4 mud-width-full mud-height-full z-10";
public string DragClass = DefaultDragClass;
public void SetDragClass()
=> DragClass = $"{DefaultDragClass} mud-border-primary";
public void ClearDragClass()
=> DragClass = DefaultDragClass;
public void OnInputFileChanged(InputFileChangeEventArgs e)
{
ClearDragClass();
var files = e.GetMultipleFiles();
foreach (var file in files)
{
FileNames.Add(file.Name);
Files.Add(file);
}
}
private List<BrandSDto> brands = new();
public async Task<IEnumerable<BrandSDto>> SearchBrand(string brand)
{
try
{
if (brands.Count == 0)
brands = await restWrapper.BrandRestApi.ReadAll();
if (brand.IsNullOrEmpty().Not())
return brands.Where(b => b.PersianName.Trim().ToUpper().Contains(brand.Trim().ToUpper()));
return brands;
}
catch (ApiException ex)
{
var exe = await ex.GetContentAsAsync<ApiResult>();
snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
return brands;
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
return brands;
}
}
public void AddBrand(string brandName)
{
if (brandName.IsNullOrEmpty())
return;
Task.Run(async () =>
{
var token = await userUtility.GetBearerTokenAsync();
if (token == null)
return;
var brand = new BrandSDto { PersianName = brandName };
brands.Add(brand);
var command = brand.Adapt<CreateBrandCommand>() with {Files = new()};
var response = await restWrapper.CrudApiRest<Brand, Guid>(Address.BrandController)
.Create(command, token);
brand.Id = response;
SelectedBrand = brand;
});
}
public void SubmitCreateProduct()
{
try
{
if (SelectedCategory == null)
throw new Exception("دسته بندی انتخاب نشده است");
if (SelectedBrand == null || SelectedBrand.Id == default)
throw new Exception("برند انتخاب نشده است");
if (PageDto.PersianName.IsNullOrEmpty())
throw new Exception("نام فارسی را وارد کنید");
var product = PageDto.Clone();
var brand = SelectedBrand.Clone();
var browserFiles = Files.ToList();
Task.Run(async () =>
{
var token = await userUtility.GetBearerTokenAsync();
if (token == null)
return;
var files = new List<StorageFileSDto>();
foreach (var file in browserFiles)
{
using var memoryStream = new MemoryStream();
var stream = file.OpenReadStream();
await stream.CopyToAsync(memoryStream);
var fileUpload = new FileUploadRequest
{
ContentType = file.ContentType,
FileName = file.Name,
FileUploadType = FileUploadType.Image,
StringBaseFile = Convert.ToBase64String(memoryStream.ToArray())
};
var rest = await restWrapper.FileRestApi.UploadFileAsync(fileUpload, token);
files.Add(new StorageFileSDto
{
FileLocation = rest.FileLocation,
FileName = rest.FileName,
FileType = StorageFileType.Image
});
}
var command = product.Adapt<CreateProductCommand>() with
{
BeDisplayed = true,
BrandId = brand.Id,
CategoryId = SelectedCategory.Id,
Files = files
};
await restWrapper.CrudApiRest<Product, Guid>(Address.ProductController)
.Create(command, token);
});
PageDto = new ProductLDto{Stock = 1};
FileNames.Clear();
Files.Clear();
}
catch (Exception e)
{
snackbar.Add(e.Message, Severity.Error);
}
}
}

View File

@ -5,7 +5,7 @@
@inherits LayoutComponentBase @inherits LayoutComponentBase
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IBrowserViewportService BrowserViewportService
<style> <style>
body .pwa-updater[b-pwa-updater] { body .pwa-updater[b-pwa-updater] {
@ -34,7 +34,40 @@
<AuthorizeView> <AuthorizeView>
<Authorized> <Authorized>
<MudRTLProvider RightToLeft="true"> <MudRTLProvider RightToLeft="true">
<MudThemeProvider IsDarkMode="@MainTheme.IsDarkMode" Theme="@MainTheme.MyCustomTheme" />
<MudDialogProvider />
<MudSnackbarProvider />
<MudLayout>
<MudAppBar Elevation="1" class="py-2">
<MudHidden Breakpoint="Breakpoint.MdAndUp">
<MudIconButton Icon="@Icons.Material.Filled.Menu" Color="Color.Inherit" OnClick="@ToggleDrawer" Edge="Edge.Start"/>
</MudHidden>
<RadzenGravatar class="h-14 w-14" Email="@_user?.Email"/>
<MudStack class="mr-2" Spacing="0">
<MudText Color="Color.Inherit" Typo="Typo.body1"><b>@_user?.FullName</b></MudText>
<MudText Color="Color.Inherit" Typo="Typo.caption">@_user?.PhoneNumber</MudText>
</MudStack>
<MudSpacer/>
<MudToggleIconButton @bind-Toggled="@MainTheme.IsDarkMode"
Icon="@Icons.Material.Outlined.DarkMode" Color="@Color.Default" Title="تاریک"
ToggledIcon="@Icons.Material.Filled.LightMode" ToggledColor="@Color.Default" ToggledTitle="روشن"/>
<MudIconButton Size="Size.Medium" Color="Color.Error" OnClick="LogoutAsync" Icon="@Icons.Material.Outlined.ExitToApp"/>
</MudAppBar>
<MudDrawer @bind-Open="open" ClipMode="DrawerClipMode.Always" Elevation="2">
<SideBarUi />
</MudDrawer>
<MudMainContent class="bg-[--mud-palette-background-grey] h-screen overflow-y-auto">
@Body
</MudMainContent>
</MudLayout>
</MudRTLProvider>
@* <MudRTLProvider RightToLeft="true">
<MudThemeProvider IsDarkMode="@MainTheme.IsDarkMode" Theme="@MainTheme.MyCustomTheme"/> <MudThemeProvider IsDarkMode="@MainTheme.IsDarkMode" Theme="@MainTheme.MyCustomTheme"/>
<MudDialogProvider/> <MudDialogProvider/>
<MudSnackbarProvider/> <MudSnackbarProvider/>
@ -57,42 +90,31 @@
<MudIconButton Size="Size.Medium" Color="Color.Error" OnClick="LogoutAsync" Icon="@Icons.Material.Outlined.ExitToApp"/> <MudIconButton Size="Size.Medium" Color="Color.Error" OnClick="LogoutAsync" Icon="@Icons.Material.Outlined.ExitToApp"/>
</MudAppBar> </MudAppBar>
<MudDrawer @bind-Open="@open" Breakpoint="Breakpoint.MdAndUp" Elevation="1" Variant="@DrawerVariant.Responsive"> <MudDrawer @bind-Open="@open" ClipMode="DrawerClipMode.Always" Breakpoint="Breakpoint.MdAndUp" Elevation="1" Variant="@DrawerVariant.Responsive">
<SideBarUi/> <SideBarUi/>
</MudDrawer> </MudDrawer>
<MudGrid Spacing="0"> <MudMainContent class="h-screen">
<MudItem xs="0" md="3" lg="2">
<MudHidden Breakpoint="Breakpoint.SmAndDown">
<SideBarUi/>
</MudHidden>
</MudItem>
<MudItem xs="12" sm="12" md="9" lg="10">
<div>
@Body @Body
</div> </MudMainContent>
</MudItem>
</MudGrid>
</MudLayout> </MudLayout>
<div dir="ltr"> <div dir="ltr">
<PWAUpdater Align="PWAUpdater.Aligns.Buttom" Text="@_updateText" ButtonCaption="اپدیت کنید"/> <PWAUpdater Align="PWAUpdater.Aligns.Buttom" Text="@_updateText" ButtonCaption="اپدیت کنید"/>
</div> </div>
</MudRTLProvider> </MudRTLProvider> *@
</Authorized> </Authorized>
<NotAuthorized> <NotAuthorized>
<MudRTLProvider RightToLeft="true"> <MudRTLProvider RightToLeft="true">
<MudThemeProvider Theme="@MainTheme.MyCustomTheme"/> <MudThemeProvider Theme="@MainTheme.MyCustomTheme" />
<MudDialogProvider/> <MudDialogProvider />
<MudSnackbarProvider/> <MudSnackbarProvider />
<MudLayout> <MudLayout>
<div> <div>
<LoginPage/> <LoginPage />
<div dir="ltr"> <div dir="ltr">
<PWAUpdater Text="@_updateText" ButtonCaption="اپدیت کنید"/> <PWAUpdater Text="@_updateText" ButtonCaption="اپدیت کنید" />
</div> </div>
</div> </div>
</MudLayout> </MudLayout>
@ -125,6 +147,9 @@
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
var screen = await BrowserViewportService.GetCurrentBreakpointAsync();
if (screen > Breakpoint.Md)
open = true;
_user = await UserUtility.GetUserAsync(); _user = await UserUtility.GetUserAsync();
await base.OnInitializedAsync(); await base.OnInitializedAsync();
} }

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -58,7 +58,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -9,7 +9,7 @@
@inject IConfiguration Configuration @inject IConfiguration Configuration
@inject IJSRuntime JsRuntime @inject IJSRuntime JsRuntime
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -67,7 +67,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -72,7 +72,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -11,7 +11,6 @@
} }
</style> *@ </style> *@
<MudPaper class="bg-[--mud-palette-background-grey] h-screen w-full p-3 md:p-8"> <MudPaper class="bg-[--mud-palette-background-grey] h-screen w-full p-3 md:p-8">
<MudStack Row="true" class="overflow-x-auto pb-3"> <MudStack Row="true" class="overflow-x-auto pb-3">
<MudStack Spacing="1" class="min-w-[340px]"> <MudStack Spacing="1" class="min-w-[340px]">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -119,80 +118,3 @@
} }
} }
@* <MudPaper class="!max-h-[80vh] overflow-auto">
<MudDataGrid FixedFooter="true" FixedHeader="true" Striped="true"
T="ProductCategorySDto" Items="@ViewModel.PageDto" CurrentPage="@ViewModel.CurrentPage"
RowsPerPage="15" Filterable="false" Loading="@ViewModel.IsProcessing"
SortMode="@SortMode.None" Groupable="false">
<ToolBarContent>
<MudTextField T="string" Placeholder="جست جو بر اساس نام" Adornment="Adornment.Start" Immediate="true"
AdornmentIcon="@Icons.Material.Filled.Search" IconSize="Size.Medium" class="my-auto"
@bind-Value="@ViewModel.Search"
OnAdornmentClick="@ViewModel.SearchAsync"></MudTextField>
</ToolBarContent>
<Columns>
<HierarchyColumn T="ProductCategorySDto" ButtonDisabledFunc="@(x => x.Description.IsNullOrEmpty())" />
<PropertyColumn Title="نام دسته" Resizable="false" Property="arg => arg.Name"/>
<TemplateColumn Title="توضیحاتــ" Resizable="false" T="ProductCategorySDto">
<CellTemplate>
<p class="line-clamp-1">@context.Item.Description</p>
</CellTemplate>
</TemplateColumn>
<TemplateColumn Resizable="false" Title="دسته اصلی" T="ProductCategorySDto">
<CellTemplate>
@if (@context.Item.IsMain)
{
<p>بلی</p>
}
else
{
<p>خیر</p>
}
</CellTemplate>
</TemplateColumn>
<PropertyColumn Title="دسته پدر" Resizable="false" Property="arg => arg.ParentName" />
<TemplateColumn CellClass="d-flex justify-end">
<CellTemplate>
<MudStack Row="true">
<MudIconButton Icon="@Icons.Material.Filled.Edit"
Size="@Size.Small"
Variant="@Variant.Outlined"
OnClick="async () => await ViewModel.EditProductCategoryClicked(context.Item)"
Color="@Color.Info"/>
<MudIconButton Icon="@Icons.Material.Filled.Delete"
Size="@Size.Small"
Variant="@Variant.Outlined"
OnClick="async () => await ViewModel.DeleteProductCategoryAsync(context.Item.Id)"
Color="@Color.Error"/>
</MudStack>
</CellTemplate>
</TemplateColumn>
</Columns>
<ChildRowContent>
<MudCard>
<MudCardHeader>
<CardHeaderContent>
<MudText Typo="Typo.h6">توضیحاتــ</MudText>
</CardHeaderContent>
</MudCardHeader>
<MudCardContent>
<MudText>@context.Item.Description</MudText>
</MudCardContent>
</MudCard>
</ChildRowContent>
<PagerContent>
<MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4"/>
</MudStack>
</PagerContent>
</MudDataGrid>
</MudPaper> *@

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -125,7 +125,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-8"> <MudStack Row="true" class="mb-8">
@ -23,7 +23,7 @@
<MudTextField T="string" Label="پاسخ" @bind-Value="@ViewModel.Answer" Variant="Variant.Outlined"></MudTextField> <MudTextField T="string" Label="پاسخ" @bind-Value="@ViewModel.Answer" Variant="Variant.Outlined"></MudTextField>
</MudItem> </MudItem>
<MudItem> <MudItem>
<MudButton class="py-3 mt-2" EndIcon="@Icons.Material.Outlined.Add" <MudButton class="mt-2 py-3" EndIcon="@Icons.Material.Outlined.Add"
Variant="Variant.Outlined" Size="Size.Large" Color="Color.Info" OnClick="@ViewModel.AddNewQuestion">افزودن</MudButton> Variant="Variant.Outlined" Size="Size.Large" Color="Color.Info" OnClick="@ViewModel.AddNewQuestion">افزودن</MudButton>
</MudItem> </MudItem>
</MudGrid> </MudGrid>

View File

@ -8,72 +8,72 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="px-0 md:p-5 lg:p-8 w-full h-screen overflow-x-hidden overflow-y-scroll bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full overflow-x-hidden px-0 md:p-5 lg:p-8">
<MudHidden Breakpoint="Breakpoint.Xs"> <MudHidden Breakpoint="Breakpoint.Xs">
<MudGrid> <MudGrid>
<MudItem xs="12" sm="4" lg="2"> <MudItem xs="12" sm="4" lg="2">
<MudPaper class="p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 rounded-md p-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-4">تعداد محصولاتــ</MudText> <MudText Typo="Typo.body1" class="mb-4">تعداد محصولاتــ</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>@ViewModel.PageDto.ProductsCount</b></MudText> <MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>@ViewModel.PageDto.ProductsCount</b></MudText>
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1 mb-4"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="12" sm="4" lg="2"> <MudItem xs="12" sm="4" lg="2">
<MudPaper class="p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 rounded-md p-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-4">تعداد بلاگــ ها</MudText> <MudText Typo="Typo.body1" class="mb-4">تعداد بلاگــ ها</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-blue-600"><b>@ViewModel.PageDto.BlogsCount</b></MudText> <MudText Typo="Typo.h3" Align="Align.Center" class="text-blue-600"><b>@ViewModel.PageDto.BlogsCount</b></MudText>
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1 mb-4"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="12" sm="4" lg="2"> <MudItem xs="12" sm="4" lg="2">
<MudPaper class="p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 rounded-md p-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-4">فروش های امروز</MudText> <MudText Typo="Typo.body1" class="mb-4">فروش های امروز</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-lime-600"><b>@ViewModel.PageDto.TodayOrdersCount</b></MudText> <MudText Typo="Typo.h3" Align="Align.Center" class="text-lime-600"><b>@ViewModel.PageDto.TodayOrdersCount</b></MudText>
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1 mb-4"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="12" sm="4" lg="2"> <MudItem xs="12" sm="4" lg="2">
<MudPaper class="p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 rounded-md p-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-4">تایید نشده</MudText> <MudText Typo="Typo.body1" class="mb-4">تایید نشده</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-rose-600"><b>@ViewModel.PageDto.UnSubmittedOrdersCount</b></MudText> <MudText Typo="Typo.h3" Align="Align.Center" class="text-rose-600"><b>@ViewModel.PageDto.UnSubmittedOrdersCount</b></MudText>
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1 mb-4"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="12" sm="4" lg="2"> <MudItem xs="12" sm="4" lg="2">
<MudPaper class="p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 rounded-md p-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-4">تعداد برنـــدها</MudText> <MudText Typo="Typo.body1" class="mb-4">تعداد برنـــدها</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-gray-600"><b>@ViewModel.PageDto.BrandsCount</b></MudText> <MudText Typo="Typo.h3" Align="Align.Center" class="text-gray-600"><b>@ViewModel.PageDto.BrandsCount</b></MudText>
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>عدد</b></MudText> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1 mb-4"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
</MudItem> </MudItem>
<MudItem xs="12" sm="4" lg="2"> <MudItem xs="12" sm="4" lg="2">
<MudPaper class="p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 rounded-md p-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-4">تعداد مشترکین</MudText> <MudText Typo="Typo.body1" class="mb-4">تعداد مشترکین</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-purple-600"><b>@ViewModel.PageDto.SubscribersCount</b></MudText> <MudText Typo="Typo.h3" Align="Align.Center" class="text-purple-600"><b>@ViewModel.PageDto.SubscribersCount</b></MudText>
<MudText Typo="Typo.h6" Align="Align.Center" class="mb-4 -mt-1"><b>نفر</b></MudText> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1 mb-4"><b>نفر</b></MudText>
</MudPaper> </MudPaper>
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudHidden> </MudHidden>
<MudHidden Breakpoint="Breakpoint.SmAndUp"> <MudHidden Breakpoint="Breakpoint.SmAndUp">
<MudStack Row="true" class="whitespace-nowrap overflow-x-scroll w-screen no-scrollbar"> <MudStack Row="true" class="no-scrollbar w-screen overflow-x-scroll whitespace-nowrap">
<MudPaper class="w-fit p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 w-fit rounded-md px-3 pb-5 pt-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-6 ml-16">تعداد محصولاتــ</MudText> <MudText Typo="Typo.body1" class="mb-6 ml-16">تعداد محصولاتــ</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></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> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
<MudPaper class="w-fit p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 w-fit rounded-md px-3 pb-5 pt-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-6 ml-16">تعداد محصولاتــ</MudText> <MudText Typo="Typo.body1" class="mb-6 ml-16">تعداد محصولاتــ</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></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> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
<MudPaper class="w-fit p-3 m-2 rounded-md" Elevation="2"> <MudPaper class="m-2 w-fit rounded-md px-3 pb-5 pt-3" Elevation="2">
<MudText Typo="Typo.body1" class="mb-6 ml-16">تعداد محصولاتــ</MudText> <MudText Typo="Typo.body1" class="mb-6 ml-16">تعداد محصولاتــ</MudText>
<MudText Typo="Typo.h3" Align="Align.Center" class="text-amber-600"><b>1124</b></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> <MudText Typo="Typo.h6" Align="Align.Center" class="-mt-1"><b>عدد</b></MudText>
</MudPaper> </MudPaper>
</MudStack> </MudStack>
</MudHidden> </MudHidden>
@ -85,7 +85,7 @@
Icon="@Icons.Material.Outlined.AddCard" Icon="@Icons.Material.Outlined.AddCard"
Variant="Variant.Outlined" Color="Color.Default" Variant="Variant.Outlined" Color="Color.Default"
OnClickCallback="@ViewModel.AddProductClicked" OnClickCallback="@ViewModel.AddProductClicked"
Content="محصول جدید" /> Content="افزودن سریع محصولات" />
</MudStack> </MudStack>
</MudItem> </MudItem>
@ -96,7 +96,7 @@
Icon="@Icons.Material.Outlined.AddLink" Icon="@Icons.Material.Outlined.AddLink"
Variant="Variant.Outlined" Color="Color.Default" Variant="Variant.Outlined" Color="Color.Default"
OnClickCallback="@ViewModel.AddBlogClicked" OnClickCallback="@ViewModel.AddBlogClicked"
Content="بلاگ جدید" /> Content="دسته بندی های محصولات" />
</MudStack> </MudStack>
</MudItem> </MudItem>
@ -143,7 +143,7 @@
<PagerContent> <PagerContent>
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" class="my-4 mx-auto" /> <MudPagination Rectangular="true" Variant="Variant.Filled" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -7,19 +7,19 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudPaper class="px-5 py-5"> <MudPaper class="px-5 py-5">
<MudStack Row="true"> <MudStack Row="true">
<MudStack class="mb-5 mx-2"> <MudStack class="mx-2 mb-5">
<MudText Typo="Typo.h4">jتنظیماتـــ بازاریاب ها</MudText> <MudText Typo="Typo.h4">jتنظیماتـــ بازاریاب ها</MudText>
<MudText Typo="Typo.caption">شما می توانید تنظیمات بازاریاب های خود را ویرایش نمایید</MudText> <MudText Typo="Typo.caption">شما می توانید تنظیمات بازاریاب های خود را ویرایش نمایید</MudText>
</MudStack> </MudStack>
<MudSpacer /> <MudSpacer />
<BaseButtonUi Size="Size.Large" <BaseButtonUi Size="Size.Large"
OnClickCallback="ViewModel.SubmitSettingAsync" OnClickCallback="ViewModel.SubmitSettingAsync"
class="mt-2 mb-8 w-64 rounded-md" class="mb-8 mt-2 w-64 rounded-md"
IsProcessing="@ViewModel.IsProcessing" IsProcessing="@ViewModel.IsProcessing"
Icon="@Icons.Material.Outlined.Check" Icon="@Icons.Material.Outlined.Check"
Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" /> Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" />

View File

@ -6,7 +6,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -27,7 +27,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -3,12 +3,12 @@
@page "/notfound" @page "/notfound"
@inject NavigationManager NavigationManager @inject NavigationManager NavigationManager
<div class="w-screen h-screen p-0 overflow-hidden bg-[--mud-palette-background]"> <div class="h-full w-screen overflow-hidden p-0">
<div class="h-full w-fulll"> <div class="w-fulll h-full">
<MudStack class="mx-auto my-auto"> <MudStack class="mx-auto my-auto">
<dotlottie-player src="https://lottie.host/4b415b83-5315-4e7f-b174-d036d9f8612f/4qKuHHyOxk.json" <dotlottie-player src="https://lottie.host/4b415b83-5315-4e7f-b174-d036d9f8612f/4qKuHHyOxk.json"
background="transparent" speed="1" class="mx-auto w-96 h-96 lg:w-[38rem] lg:h-[38rem]" loop autoplay /> background="transparent" speed="1" class="mx-auto h-96 w-96 lg:w-[38rem] lg:h-[38rem]" loop autoplay />
<MudText Typo="Typo.h2" Align="Align.Center"><b>صفحه مورد نظر پیدا نشد</b></MudText> <MudText Typo="Typo.h2" Align="Align.Center"><b>صفحه مورد نظر پیدا نشد</b></MudText>
<MudText Typo="Typo.h5" Align="Align.Center">صفحه مورد نظر شما پیدا نشد یا از بین رفته است ، سریع کام بک بزن به جای قبلی جیگر </MudText> <MudText Typo="Typo.h5" Align="Align.Center">صفحه مورد نظر شما پیدا نشد یا از بین رفته است ، سریع کام بک بزن به جای قبلی جیگر </MudText>
@ -17,7 +17,7 @@
Icon="@Icons.Material.Outlined.Login" Icon="@Icons.Material.Outlined.Login"
OnClickCallback="NavigateToHomeAsync" OnClickCallback="NavigateToHomeAsync"
Color="Color.Default" Color="Color.Default"
class="w-64 rounded-full mt-6 mx-auto" class="mx-auto mt-6 w-64 rounded-full"
Content="کام بکــــ"></BaseButtonUi> Content="کام بکــــ"></BaseButtonUi>
</MudStack> </MudStack>

View File

@ -8,7 +8,7 @@
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
@inject IBrowserViewportService BrowserViewportService @inject IBrowserViewportService BrowserViewportService
<MudStack class="bg-[--mud-palette-background-grey] h-screen w-full overflow-x-hidden overflow-y-scroll md:p-5 lg:px-8"> <MudStack class="no-scrollbar h-full w-full overflow-x-hidden overflow-y-scroll md:p-5 lg:px-8">
<MudHidden Breakpoint="Breakpoint.Xs"> <MudHidden Breakpoint="Breakpoint.Xs">
<MudGrid> <MudGrid>

View File

@ -7,11 +7,11 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="h-full w-full p-8">
<MudPaper class="px-5 py-5"> <MudPaper class="px-5 py-5">
<MudStack> <MudStack>
<MudStack Row="true"> <MudStack Row="true">
<MudStack class="mb-5 mx-2"> <MudStack class="mx-2 mb-5">
<MudText Typo="Typo.h4">تنظیمات برگه ها</MudText> <MudText Typo="Typo.h4">تنظیمات برگه ها</MudText>
<MudText Typo="Typo.caption">برگه های وب سایت خود را ویرایش نمایید</MudText> <MudText Typo="Typo.caption">برگه های وب سایت خود را ویرایش نمایید</MudText>
</MudStack> </MudStack>
@ -19,7 +19,7 @@
<MudSpacer /> <MudSpacer />
@* <BaseButtonUi Size="Size.Large" @* <BaseButtonUi Size="Size.Large"
OnClickCallback="ViewModel.SubmitPagesSettingAsync" OnClickCallback="ViewModel.SubmitPagesSettingAsync"
class="mt-2 mb-8 w-64 rounded-md" class="mb-8 mt-2 w-64 rounded-md"
IsProcessing="@ViewModel.IsProcessing" IsProcessing="@ViewModel.IsProcessing"
Icon="@Icons.Material.Outlined.Check" Icon="@Icons.Material.Outlined.Check"
Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" /> *@ Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" /> *@
@ -28,13 +28,13 @@
<MudItem xs="6"> <MudItem xs="6">
<MudDivider /> <MudDivider />
<MudText class="mt-4 mb-5" Typo="Typo.h6">افزودن برگه جدید</MudText> <MudText class="mb-5 mt-4" Typo="Typo.h6">افزودن برگه جدید</MudText>
<MudTextField @bind-Value="@ViewModel.NewPageDto.Title" T="string" Label="عنوان" Variant="Variant.Outlined" /> <MudTextField @bind-Value="@ViewModel.NewPageDto.Title" T="string" Label="عنوان" Variant="Variant.Outlined" />
<MudTextField class="my-3" @bind-Value="@ViewModel.NewPageDto.Slug" T="string" Label="اسلاگ" Variant="Variant.Outlined" /> <MudTextField class="my-3" @bind-Value="@ViewModel.NewPageDto.Slug" T="string" Label="اسلاگ" Variant="Variant.Outlined" />
<MudButton class="w-full py-3 mt-1" Variant="Variant.Outlined" Color="Color.Secondary" OnClick="ViewModel.AddPageAsync">افزودن +</MudButton> <MudButton class="mt-1 w-full py-3" Variant="Variant.Outlined" Color="Color.Secondary" OnClick="ViewModel.AddPageAsync">افزودن +</MudButton>
</MudItem> </MudItem>
<MudItem xs="6"> <MudItem xs="6">

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudStack Row="true" class="mb-5"> <MudStack Row="true" class="mb-5">
@ -73,7 +73,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -8,31 +8,39 @@
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
@inject IBrowserViewportService BrowserViewportService @inject IBrowserViewportService BrowserViewportService
<MudStack class="bg-[--mud-palette-background-grey] h-screen w-full p-8"> <MudStack class="no-scrollbar h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudGrid Row="true" class="mb-5"> <MudStack Row="@ViewModel.IsXs.Not()" class="mb-5">
<MudItem xs="12" sm="6" md="8">
<MudStack Row="true"> <MudStack Row="true">
<MudText Typo="Typo.h4">محصولاتــــ</MudText> <MudText Typo="Typo.h4">محصولاتــــ</MudText>
<MudChip Color="Color.Info" Variant="Variant.Outlined">@ViewModel.TotalItems عدد</MudChip> <MudChip Color="Color.Info" Variant="Variant.Outlined">@ViewModel.TotalItems عدد</MudChip>
</MudStack> </MudStack>
</MudItem> @if (@ViewModel.IsXs.Not())
<MudItem xs="12" sm="6" md="4"> {
<MudSpacer />
}
<MudStack Row="@ViewModel.IsXs.Not()">
<MudButton Variant="Variant.Filled" <MudButton Variant="Variant.Filled"
DisableElevation="true" DisableElevation="true"
StartIcon="@Icons.Material.Outlined.Add" StartIcon="@Icons.Material.Outlined.Add"
Color="Color.Secondary" Color="Color.Secondary"
OnClick="@ViewModel.AddProductClicked" OnClick="@ViewModel.AddProductClicked"
class="w-full md:my-auto md:w-auto">افزودن محصول</MudButton> class="w-full md:my-auto md:w-auto">افزودن محصول</MudButton>
<MudButton Variant="Variant.Filled" <MudButton Variant="Variant.Outlined"
DisableElevation="true"
StartIcon="@Icons.Material.Outlined.Add"
Color="Color.Info"
OnClick="@ViewModel.AddFastProductClicked"
class="w-full md:my-auto md:w-auto">افزودن سریع محصول</MudButton>
<MudButton Variant="Variant.Outlined"
DisableElevation="true" DisableElevation="true"
StartIcon="@Icons.Material.Outlined.Add" StartIcon="@Icons.Material.Outlined.Add"
Color="Color.Error" Color="Color.Error"
OnClick="@ViewModel.AddDigikalaProductClicked" OnClick="@ViewModel.AddDigikalaProductClicked"
class="w-full md:my-auto md:w-auto">افزودن محصول از دیجیکالا</MudButton> class="w-full md:my-auto md:w-auto">افزودن محصول از دیجیکالا</MudButton>
</MudItem> </MudStack>
</MudGrid> </MudStack>
<MudHidden Breakpoint="Breakpoint.SmAndUp"> <MudHidden Breakpoint="Breakpoint.SmAndUp">
<MudGrid class="mb-3" Row="true"> <MudGrid class="mb-3" Row="true">
@ -69,12 +77,10 @@
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudHidden> </MudHidden>
<MudPaper class="!max-h-[80vh] overflow-auto"> <MudPaper>
<MudDataGrid FixedFooter="true" FixedHeader="true" Striped="true" <MudDataGrid FixedFooter="true" FixedHeader="true" Striped="true"
T="ProductSDto" Items="@ViewModel.PageDto" CurrentPage="@ViewModel.CurrentPage" T="ProductSDto" Items="@ViewModel.PageDto" CurrentPage="@ViewModel.CurrentPage"
RowsPerPage="20" Filterable="false" Loading="@ViewModel.IsProcessing" RowsPerPage="20" Filterable="false" Loading="@ViewModel.IsProcessing"
SortMode="@SortMode.None" Groupable="false"> SortMode="@SortMode.None" Groupable="false">
<ToolBarContent> <ToolBarContent>
@ -120,8 +126,8 @@
<MudCheckBox ValueChanged="delegate(bool flag) { context.Item.BeDisplayed = flag; ViewModel.DisplayedChanged(context.Item); }" Color="Color.Secondary" Value="@context.Item.BeDisplayed"></MudCheckBox> <MudCheckBox ValueChanged="delegate(bool flag) { context.Item.BeDisplayed = flag; ViewModel.DisplayedChanged(context.Item); }" Color="Color.Secondary" Value="@context.Item.BeDisplayed"></MudCheckBox>
</CellTemplate> </CellTemplate>
</TemplateColumn> </TemplateColumn>
<PropertyColumn Title="نام محصول" Property="arg => arg.PersianName"/> <PropertyColumn Title="نام محصول" Property="arg => arg.PersianName" />
<PropertyColumn Title="دسته بندی" Property="arg => arg.CategoryName"/> <PropertyColumn Title="دسته بندی" Property="arg => arg.CategoryName" />
<PropertyColumn Title="برند" Property="arg => arg.BrandName" /> <PropertyColumn Title="برند" Property="arg => arg.BrandName" />
<TemplateColumn T="ProductSDto" Title="پیشنهاد ویژه است"> <TemplateColumn T="ProductSDto" Title="پیشنهاد ویژه است">
<CellTemplate> <CellTemplate>
@ -148,12 +154,12 @@
Size="@Size.Small" Size="@Size.Small"
Variant="@Variant.Outlined" Variant="@Variant.Outlined"
Color="@Color.Info" Color="@Color.Info"
OnClick="async()=>await ViewModel.EditProductClicked(context.Item)"/> OnClick="async()=>await ViewModel.EditProductClicked(context.Item)" />
<MudIconButton Icon="@Icons.Material.Filled.Delete" <MudIconButton Icon="@Icons.Material.Filled.Delete"
Size="@Size.Small" Size="@Size.Small"
Variant="@Variant.Outlined" Variant="@Variant.Outlined"
OnClick="async () => await ViewModel.DeleteProductAsync(context.Item.Id)" OnClick="async () => await ViewModel.DeleteProductAsync(context.Item.Id)"
Color="@Color.Error"/> Color="@Color.Error" />
</MudStack> </MudStack>
</CellTemplate> </CellTemplate>
</TemplateColumn> </TemplateColumn>
@ -162,7 +168,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4"/> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -15,6 +15,7 @@ public class ProductsPageViewModel : BaseViewModel<ObservableCollection<ProductS
public int CurrentPage = 0; public int CurrentPage = 0;
public int PageCount = 1; public int PageCount = 1;
public int TotalItems = 0; public int TotalItems = 0;
public bool IsXs = false;
public ProductsPageViewModel(NavigationManager navigationManager, public ProductsPageViewModel(NavigationManager navigationManager,
ISnackbar snackbar, ISnackbar snackbar,
@ -29,6 +30,7 @@ public class ProductsPageViewModel : BaseViewModel<ObservableCollection<ProductS
_restWrapper = restWrapper; _restWrapper = restWrapper;
_dialogService = dialogService; _dialogService = dialogService;
_browserViewportService = browserViewportService; _browserViewportService = browserViewportService;
} }
public override async Task InitializeAsync() public override async Task InitializeAsync()
@ -45,6 +47,7 @@ public class ProductsPageViewModel : BaseViewModel<ObservableCollection<ProductS
if (PageDto.Count == 20) if (PageDto.Count == 20)
PageCount = 2; PageCount = 2;
TotalItems = dto.Pager.TotalItems; TotalItems = dto.Pager.TotalItems;
IsXs = (await _browserViewportService.GetCurrentBreakpointAsync()) == Breakpoint.Xs;
} }
catch (ApiException ex) catch (ApiException ex)
{ {
@ -122,6 +125,20 @@ public class ProductsPageViewModel : BaseViewModel<ObservableCollection<ProductS
} }
} }
public async Task AddFastProductClicked()
{
DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Large, FullWidth = true, NoHeader = true, DisableBackdropClick = true , CloseButton = true };
var breakPoint = await _browserViewportService.GetCurrentBreakpointAsync();
if (breakPoint == Breakpoint.Xs)
maxWidth = new DialogOptions { FullScreen = true, NoHeader = true, CloseButton = true };
var dialogResult = await _dialogService.ShowAsync<FastProductCreateDialogBox>("افزودن محصول جدید", maxWidth);
var result = await dialogResult.Result;
if (!result.Canceled && result.Data is bool and true)
{
await InitializeAsync();
}
}
public async Task AddDigikalaProductClicked() public async Task AddDigikalaProductClicked()
{ {
@ -137,6 +154,9 @@ public class ProductsPageViewModel : BaseViewModel<ObservableCollection<ProductS
public async Task EditProductClicked(ProductSDto product) public async Task EditProductClicked(ProductSDto product)
{ {
DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Large, FullWidth = true, DisableBackdropClick = true }; DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Large, FullWidth = true, DisableBackdropClick = true };
var breakPoint = await _browserViewportService.GetCurrentBreakpointAsync();
if (breakPoint == Breakpoint.Xs)
maxWidth = new DialogOptions { FullScreen = true, CloseButton = true };
var parameters = new DialogParameters<ProductActionDialogBox>(); var parameters = new DialogParameters<ProductActionDialogBox>();
parameters.Add(x => x.Product, product); parameters.Add(x => x.Product, product);
var dialogResult = await _dialogService.ShowAsync<ProductActionDialogBox>($"ویرایش محصول {product.PersianName}", parameters, maxWidth); var dialogResult = await _dialogService.ShowAsync<ProductActionDialogBox>($"ویرایش محصول {product.PersianName}", parameters, maxWidth);

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudGrid Row="true" class="mb-5"> <MudGrid Row="true" class="mb-5">
@ -87,7 +87,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.PageCount"
SelectedChanged="@ViewModel.ChangePageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangePageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -7,19 +7,19 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12"> <MudItem xs="12">
<MudPaper class="px-5 py-5"> <MudPaper class="px-5 py-5">
<MudStack Row="true"> <MudStack Row="true">
<MudStack class="mb-5 mx-2"> <MudStack class="mx-2 mb-5">
<MudText Typo="Typo.h4">فروشـــــگاه من</MudText> <MudText Typo="Typo.h4">فروشـــــگاه من</MudText>
<MudText Typo="Typo.caption">شما می توانید اطلاعات فروشگاه خود را ویرایش نمایید</MudText> <MudText Typo="Typo.caption">شما می توانید اطلاعات فروشگاه خود را ویرایش نمایید</MudText>
</MudStack> </MudStack>
<MudSpacer/> <MudSpacer/>
<BaseButtonUi Size="Size.Large" <BaseButtonUi Size="Size.Large"
OnClickCallback="ViewModel.SubmitShopSettingAsync" OnClickCallback="ViewModel.SubmitShopSettingAsync"
class="mt-2 mb-8 w-64 rounded-md" class="mb-8 mt-2 w-64 rounded-md"
IsProcessing="@ViewModel.IsProcessing" IsProcessing="@ViewModel.IsProcessing"
Icon="@Icons.Material.Outlined.Check" Icon="@Icons.Material.Outlined.Check"
Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" /> Content="ثبتـــ اطلاعات" Variant="Variant.Filled" Color="Color.Success" />
@ -62,9 +62,9 @@
<ProgressIndicatorInPopoverTemplate> <ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false"> <MudList Clickable="false">
<MudListItem> <MudListItem>
<div class="flex flex-row w-full mx-auto"> <div class="mx-auto flex w-full flex-row">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" /> <MudProgressCircular class="my-auto -ml-4 mr-1" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p> <p class="text-md mx-auto my-1 font-bold">منتظر بمانید</p>
</div> </div>
</MudListItem> </MudListItem>
</MudList> </MudList>
@ -84,9 +84,9 @@
<ProgressIndicatorInPopoverTemplate> <ProgressIndicatorInPopoverTemplate>
<MudList Clickable="false"> <MudList Clickable="false">
<MudListItem> <MudListItem>
<div class="flex flex-row w-full mx-auto"> <div class="mx-auto flex w-full flex-row">
<MudProgressCircular class="my-auto mr-1 -ml-4" Size="Size.Small" Indeterminate="true" /> <MudProgressCircular class="my-auto -ml-4 mr-1" Size="Size.Small" Indeterminate="true" />
<p class="font-bold my-1 mx-auto text-md">منتظر بمانید</p> <p class="text-md mx-auto my-1 font-bold">منتظر بمانید</p>
</div> </div>
</MudListItem> </MudListItem>
</MudList> </MudList>
@ -111,20 +111,20 @@
<MudText Typo="Typo.body1">سایز لوگو شما باید 512 * 512 باشد و به شکل مربع ، تا جایگیری مناسبی داشته باشد</MudText> <MudText Typo="Typo.body1">سایز لوگو شما باید 512 * 512 باشد و به شکل مربع ، تا جایگیری مناسبی داشته باشد</MudText>
<BaseButtonUi Variant="Variant.Outlined" Content="اپلود و تغییر لوگو" OnClickCallback="async () => await ViewModel.SelectFileAsync()" /> <BaseButtonUi Variant="Variant.Outlined" Content="اپلود و تغییر لوگو" OnClickCallback="async () => await ViewModel.SelectFileAsync()" />
</MudStack> </MudStack>
<MudImage Src="@ViewModel.ShopSetting.LogoUrl" Width="150" Height="150" Elevation="25" Class="rounded-lg ma-4" /> <MudImage Src="@ViewModel.ShopSetting.LogoUrl" Width="150" Height="150" Elevation="25" Class="ma-4 rounded-lg" />
</MudStack> </MudStack>
</MudItem> </MudItem>
</MudGrid> </MudGrid>
</MudPaper> </MudPaper>
<MudPaper class="px-5 mt-8 py-5"> <MudPaper class="mt-8 px-5 py-5">
<MudStack Row="true"> <MudStack Row="true">
<MudStack class="mb-5 mx-2"> <MudStack class="mx-2 mb-5">
<MudText Typo="Typo.h4">تنظیمات درگاه پرداخت</MudText> <MudText Typo="Typo.h4">تنظیمات درگاه پرداخت</MudText>
<MudText Typo="Typo.caption">شما می توانید اطلاعات درگاه پرداخت خود را ویرایش نمایید</MudText> <MudText Typo="Typo.caption">شما می توانید اطلاعات درگاه پرداخت خود را ویرایش نمایید</MudText>
</MudStack> </MudStack>
<MudSpacer /> <MudSpacer />
<BaseButtonUi Size="Size.Large" class="mt-2 mb-8 w-64 rounded-md" <BaseButtonUi Size="Size.Large" class="mb-8 mt-2 w-64 rounded-md"
OnClickCallback="ViewModel.SubmitPaymentSettingAsync" OnClickCallback="ViewModel.SubmitPaymentSettingAsync"
IsProcessing="@ViewModel.IsProcessing" IsProcessing="@ViewModel.IsProcessing"
Icon="@Icons.Material.Outlined.Check" Content="ثبتـــ اطلاعات" Icon="@Icons.Material.Outlined.Check" Content="ثبتـــ اطلاعات"

View File

@ -7,7 +7,7 @@
@inject IUserUtility UserUtility @inject IUserUtility UserUtility
@inject IRestWrapper RestWrapper @inject IRestWrapper RestWrapper
<MudStack class="w-full p-8 h-screen bg-[--mud-palette-background-grey]"> <MudStack class="h-full w-full p-8">
<MudGrid> <MudGrid>
<MudItem xs="12" md="6"> <MudItem xs="12" md="6">
@ -60,7 +60,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.UsersPageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.UsersPageCount"
SelectedChanged="@ViewModel.ChangeUserPageAsync" class="my-4 mx-auto" /> SelectedChanged="@ViewModel.ChangeUserPageAsync" class="mx-auto my-4" />
</MudStack> </MudStack>
</PagerContent> </PagerContent>
@ -110,7 +110,7 @@
<MudStack Row="true" class="w-full"> <MudStack Row="true" class="w-full">
<MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.RolesPageCount" <MudPagination Rectangular="true" Variant="Variant.Filled" Count="@ViewModel.RolesPageCount"
SelectedChanged="@ViewModel.ChangeRolePageAsync" class="my-4 mx-auto"/> SelectedChanged="@ViewModel.ChangeRolePageAsync" class="mx-auto my-4"/>
</MudStack> </MudStack>
</PagerContent> </PagerContent>

View File

@ -35,7 +35,7 @@
"flowbite": "^2.2.1", "flowbite": "^2.2.1",
"postcss": "^8.4.33", "postcss": "^8.4.33",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.0",
"tailwindcss": "^3.4.3" "tailwindcss": "^3.4.4"
} }
}, },
"node_modules/@alloc/quick-lru": { "node_modules/@alloc/quick-lru": {
@ -1812,9 +1812,9 @@
} }
}, },
"node_modules/tailwindcss": { "node_modules/tailwindcss": {
"version": "3.4.3", "version": "3.4.4",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.3.tgz", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz",
"integrity": "sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==", "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==",
"dependencies": { "dependencies": {
"@alloc/quick-lru": "^5.2.0", "@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2", "arg": "^5.0.2",

View File

@ -26,7 +26,7 @@
"flowbite": "^2.2.1", "flowbite": "^2.2.1",
"postcss": "^8.4.33", "postcss": "^8.4.33",
"postcss-cli": "^11.0.0", "postcss-cli": "^11.0.0",
"tailwindcss": "^3.4.3" "tailwindcss": "^3.4.4"
}, },
"name": "netina.admin.pwa", "name": "netina.admin.pwa",
"version": "1.0.0", "version": "1.0.0",

View File

@ -8,14 +8,6 @@ module.exports = {
"./node_modules/flowbite/**/*.js" "./node_modules/flowbite/**/*.js"
], ],
theme: { theme: {
screens: {
'xs': '380px',
'sm': '600px',
'md': '960px',
'lg': '1280px',
'xl': '1920px',
'2xl': '2560px',
},
fontSize: { fontSize: {
xs: '.75rem', xs: '.75rem',
sm: '.875rem', sm: '.875rem',

View File

@ -1,5 +1,5 @@
/* /*
! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com ! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com
*//* *//*
1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4) 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116) 2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)
@ -977,22 +977,22 @@ input:checked + .toggle-bg {
.container { .container {
width: 100%; width: 100%;
} }
@media (min-width: 380px) { @media (min-width: 640px) {
.container { .container {
max-width: 380px; max-width: 640px;
} }
} }
@media (min-width: 600px) { @media (min-width: 768px) {
.container { .container {
max-width: 600px; max-width: 768px;
} }
} }
@media (min-width: 960px) { @media (min-width: 1024px) {
.container { .container {
max-width: 960px; max-width: 1024px;
} }
} }
@media (min-width: 1280px) { @media (min-width: 1280px) {
@ -1001,16 +1001,10 @@ input:checked + .toggle-bg {
max-width: 1280px; max-width: 1280px;
} }
} }
@media (min-width: 1920px) { @media (min-width: 1536px) {
.container { .container {
max-width: 1920px; max-width: 1536px;
}
}
@media (min-width: 2560px) {
.container {
max-width: 2560px;
} }
} }
.visible { .visible {
@ -1138,6 +1132,9 @@ input:checked + .toggle-bg {
.-mb-4 { .-mb-4 {
margin-bottom: -1rem; margin-bottom: -1rem;
} }
.-ml-1 {
margin-left: -0.25rem;
}
.-ml-4 { .-ml-4 {
margin-left: -1rem; margin-left: -1rem;
} }
@ -1219,12 +1216,6 @@ input:checked + .toggle-bg {
.mt-8 { .mt-8 {
margin-top: 2rem; margin-top: 2rem;
} }
.line-clamp-1 {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.block { .block {
display: block; display: block;
} }
@ -1362,6 +1353,9 @@ input:checked + .toggle-bg {
.w-screen { .w-screen {
width: 100vw; width: 100vw;
} }
.min-w-\[310px\] {
min-width: 310px;
}
.min-w-\[340px\] { .min-w-\[340px\] {
min-width: 340px; min-width: 340px;
} }
@ -1481,6 +1475,9 @@ input:checked + .toggle-bg {
.overflow-x-auto { .overflow-x-auto {
overflow-x: auto; overflow-x: auto;
} }
.overflow-y-auto {
overflow-y: auto;
}
.overflow-x-hidden { .overflow-x-hidden {
overflow-x: hidden; overflow-x: hidden;
} }
@ -1548,6 +1545,10 @@ input:checked + .toggle-bg {
.border-dashed { .border-dashed {
border-style: dashed; border-style: dashed;
} }
.border-blue-400 {
--tw-border-opacity: 1;
border-color: rgb(118 169 250 / var(--tw-border-opacity));
}
.border-blue-500 { .border-blue-500 {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(63 131 248 / var(--tw-border-opacity)); border-color: rgb(63 131 248 / var(--tw-border-opacity));
@ -1580,10 +1581,6 @@ input:checked + .toggle-bg {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(167 139 250 / var(--tw-border-opacity)); border-color: rgb(167 139 250 / var(--tw-border-opacity));
} }
.border-yellow-400 {
--tw-border-opacity: 1;
border-color: rgb(227 160 8 / var(--tw-border-opacity));
}
.bg-\[\#000000\] { .bg-\[\#000000\] {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(0 0 0 / var(--tw-bg-opacity)); background-color: rgb(0 0 0 / var(--tw-bg-opacity));
@ -1726,9 +1723,15 @@ input:checked + .toggle-bg {
.pb-3 { .pb-3 {
padding-bottom: 0.75rem; padding-bottom: 0.75rem;
} }
.pb-5 {
padding-bottom: 1.25rem;
}
.pt-2 { .pt-2 {
padding-top: 0.5rem; padding-top: 0.5rem;
} }
.pt-3 {
padding-top: 0.75rem;
}
.pt-4 { .pt-4 {
padding-top: 1rem; padding-top: 1rem;
} }
@ -2240,7 +2243,7 @@ code {
color: rgb(255 255 255 / var(--tw-text-opacity)); color: rgb(255 255 255 / var(--tw-text-opacity));
} }
@media (min-width: 600px) { @media (min-width: 640px) {
.sm\:mr-3 { .sm\:mr-3 {
margin-right: 0.75rem; margin-right: 0.75rem;
@ -2254,13 +2257,17 @@ code {
width: 16rem; width: 16rem;
} }
.sm\:w-full {
width: 100%;
}
.sm\:py-3 { .sm\:py-3 {
padding-top: 0.75rem; padding-top: 0.75rem;
padding-bottom: 0.75rem; padding-bottom: 0.75rem;
} }
} }
@media (min-width: 960px) { @media (min-width: 768px) {
.md\:visible { .md\:visible {
visibility: visible; visibility: visible;
@ -2309,7 +2316,7 @@ code {
} }
} }
@media (min-width: 1280px) { @media (min-width: 1024px) {
.lg\:h-60 { .lg\:h-60 {
height: 15rem; height: 15rem;

View File

@ -1,5 +1,5 @@
/* /*
! tailwindcss v3.4.3 | MIT License | https://tailwindcss.com ! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com
*/ */
/* /*
@ -1031,21 +1031,21 @@ input:checked + .toggle-bg {
width: 100%; width: 100%;
} }
@media (min-width: 380px) { @media (min-width: 640px) {
.container { .container {
max-width: 380px; max-width: 640px;
} }
} }
@media (min-width: 600px) { @media (min-width: 768px) {
.container { .container {
max-width: 600px; max-width: 768px;
} }
} }
@media (min-width: 960px) { @media (min-width: 1024px) {
.container { .container {
max-width: 960px; max-width: 1024px;
} }
} }
@ -1055,15 +1055,9 @@ input:checked + .toggle-bg {
} }
} }
@media (min-width: 1920px) { @media (min-width: 1536px) {
.container { .container {
max-width: 1920px; max-width: 1536px;
}
}
@media (min-width: 2560px) {
.container {
max-width: 2560px;
} }
} }
@ -1229,6 +1223,10 @@ input:checked + .toggle-bg {
margin-bottom: -1rem; margin-bottom: -1rem;
} }
.-ml-1 {
margin-left: -0.25rem;
}
.-ml-4 { .-ml-4 {
margin-left: -1rem; margin-left: -1rem;
} }
@ -1337,13 +1335,6 @@ input:checked + .toggle-bg {
margin-top: 2rem; margin-top: 2rem;
} }
.line-clamp-1 {
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.block { .block {
display: block; display: block;
} }
@ -1461,14 +1452,6 @@ input:checked + .toggle-bg {
min-height: 33rem; min-height: 33rem;
} }
.min-h-full {
min-height: 100%;
}
.\!min-h-full {
min-height: 100% !important;
}
.w-1\/2 { .w-1\/2 {
width: 50%; width: 50%;
} }
@ -1534,6 +1517,10 @@ input:checked + .toggle-bg {
width: 100vw; width: 100vw;
} }
.min-w-\[310px\] {
min-width: 310px;
}
.min-w-\[340px\] { .min-w-\[340px\] {
min-width: 340px; min-width: 340px;
} }
@ -1688,6 +1675,10 @@ input:checked + .toggle-bg {
overflow-x: auto; overflow-x: auto;
} }
.overflow-y-auto {
overflow-y: auto;
}
.overflow-x-hidden { .overflow-x-hidden {
overflow-x: hidden; overflow-x: hidden;
} }
@ -1776,6 +1767,11 @@ input:checked + .toggle-bg {
border-style: dashed; border-style: dashed;
} }
.border-blue-400 {
--tw-border-opacity: 1;
border-color: rgb(118 169 250 / var(--tw-border-opacity));
}
.border-blue-500 { .border-blue-500 {
--tw-border-opacity: 1; --tw-border-opacity: 1;
border-color: rgb(63 131 248 / var(--tw-border-opacity)); border-color: rgb(63 131 248 / var(--tw-border-opacity));
@ -1816,11 +1812,6 @@ input:checked + .toggle-bg {
border-color: rgb(167 139 250 / var(--tw-border-opacity)); border-color: rgb(167 139 250 / var(--tw-border-opacity));
} }
.border-yellow-400 {
--tw-border-opacity: 1;
border-color: rgb(227 160 8 / var(--tw-border-opacity));
}
.bg-\[\#000000\] { .bg-\[\#000000\] {
--tw-bg-opacity: 1; --tw-bg-opacity: 1;
background-color: rgb(0 0 0 / var(--tw-bg-opacity)); background-color: rgb(0 0 0 / var(--tw-bg-opacity));
@ -1998,10 +1989,22 @@ input:checked + .toggle-bg {
padding-bottom: 2rem; padding-bottom: 2rem;
} }
.pb-3 {
padding-bottom: 0.75rem;
}
.pb-5 {
padding-bottom: 1.25rem;
}
.pt-2 { .pt-2 {
padding-top: 0.5rem; padding-top: 0.5rem;
} }
.pt-3 {
padding-top: 0.75rem;
}
.pt-4 { .pt-4 {
padding-top: 1rem; padding-top: 1rem;
} }
@ -2010,10 +2013,6 @@ input:checked + .toggle-bg {
padding-top: 2rem; padding-top: 2rem;
} }
.pb-3 {
padding-bottom: 0.75rem;
}
.text-center { .text-center {
text-align: center; text-align: center;
} }
@ -2592,7 +2591,7 @@ code {
color: rgb(255 255 255 / var(--tw-text-opacity)); color: rgb(255 255 255 / var(--tw-text-opacity));
} }
@media (min-width: 600px) { @media (min-width: 640px) {
.sm\:mr-3 { .sm\:mr-3 {
margin-right: 0.75rem; margin-right: 0.75rem;
} }
@ -2605,13 +2604,17 @@ code {
width: 16rem; width: 16rem;
} }
.sm\:w-full {
width: 100%;
}
.sm\:py-3 { .sm\:py-3 {
padding-top: 0.75rem; padding-top: 0.75rem;
padding-bottom: 0.75rem; padding-bottom: 0.75rem;
} }
} }
@media (min-width: 960px) { @media (min-width: 768px) {
.md\:visible { .md\:visible {
visibility: visible; visibility: visible;
} }
@ -2659,7 +2662,7 @@ code {
} }
} }
@media (min-width: 1280px) { @media (min-width: 1024px) {
.lg\:h-60 { .lg\:h-60 {
height: 15rem; height: 15rem;
} }