diff --git a/NetinaShop.AdminPanel.PWA/Dialogs/BlogActionDialogBox.razor b/NetinaShop.AdminPanel.PWA/Dialogs/BlogActionDialogBox.razor
index f8ba8a8..cca1243 100644
--- a/NetinaShop.AdminPanel.PWA/Dialogs/BlogActionDialogBox.razor
+++ b/NetinaShop.AdminPanel.PWA/Dialogs/BlogActionDialogBox.razor
@@ -75,29 +75,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/NetinaShop.AdminPanel.PWA/Dialogs/BrandActionDialogBox.razor b/NetinaShop.AdminPanel.PWA/Dialogs/BrandActionDialogBox.razor
index ccc492a..4965115 100644
--- a/NetinaShop.AdminPanel.PWA/Dialogs/BrandActionDialogBox.razor
+++ b/NetinaShop.AdminPanel.PWA/Dialogs/BrandActionDialogBox.razor
@@ -16,16 +16,19 @@
اطلاعات کلی دسته بندی محصول را به دقت وارد کنید
-
-
+
+
-
+
+
+
+
-
+
@@ -64,7 +67,8 @@
void Cancel() => MudDialog.Cancel();
private bool _isProcessing = false;
- private string _name = string.Empty;
+ private string _persianName = string.Empty;
+ private string _englishName = string.Empty;
private string _description = string.Empty;
private bool _hasSpecialPage;
private bool _isEditing;
@@ -77,7 +81,9 @@
_isEditing = true;
_hasSpecialPage = Brand.HasSpecialPage;
_description = Brand.Description;
- _name = Brand.Name;
+ _englishName = Brand.EnglishName;
+ _persianName = Brand.PersianName;
+
}
return base.OnParametersSetAsync();
}
@@ -86,11 +92,11 @@
{
try
{
- if (_name.IsNullOrEmpty())
+ if (_englishName.IsNullOrEmpty())
throw new AppException("لطفا نام برند را وارد کنید");
_isProcessing = true;
var token = await UserUtility.GetBearerTokenAsync();
- var request = new CreateBrandCommand(_name, _description, _hasSpecialPage, string.Empty, new List());
+ var request = new CreateBrandCommand(_persianName,_englishName, _description, _hasSpecialPage, string.Empty, new List());
await RestWrapper.CrudApiRest(Address.BrandController).Create(request, token);
MudDialog.Close(DialogResult.Ok(true));
}
@@ -118,12 +124,12 @@
{
if (Brand == null)
throw new AppException("برند به درستی ارسال نشده است");
- if (_name.IsNullOrEmpty())
+ if (_englishName.IsNullOrEmpty())
throw new AppException("لطفا نام برند را وارد کنید");
_isProcessing = true;
await Task.Delay(1000);
var token = await UserUtility.GetBearerTokenAsync();
- var request = new UpdateBrandCommand(Brand.Id, _name, _description, _hasSpecialPage, string.Empty , new List());
+ var request = new UpdateBrandCommand(Brand.Id, _persianName,_englishName, _description, _hasSpecialPage, string.Empty , new List());
await RestWrapper.CrudApiRest(Address.BrandController).Update(request, token);
MudDialog.Close();
}
diff --git a/NetinaShop.AdminPanel.PWA/Dialogs/DiscountActionDialogBox.razor.cs b/NetinaShop.AdminPanel.PWA/Dialogs/DiscountActionDialogBox.razor.cs
index bd90851..b00650b 100644
--- a/NetinaShop.AdminPanel.PWA/Dialogs/DiscountActionDialogBox.razor.cs
+++ b/NetinaShop.AdminPanel.PWA/Dialogs/DiscountActionDialogBox.razor.cs
@@ -319,7 +319,7 @@ public class DiscountActionDialogBoxViewModel : BaseViewModel
{
GetProductsResponseDto response = new GetProductsResponseDto();
if (product.IsNullOrEmpty())
- response = await _restWrapper.ProductRestApi.ReadAll(0);
+ response = await _restWrapper.ProductRestApi.ReadAll(0,null,null);
else
response = await _restWrapper.ProductRestApi.ReadAll(product);
_products = response.Products;
diff --git a/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor b/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor
index 15954c6..bdc3478 100644
--- a/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor
+++ b/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor
@@ -19,13 +19,13 @@
-
+
-
+
-
+
-
+
-
- @e.Name
+ @e.PersianName
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
diff --git a/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor.cs b/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor.cs
index 6bebad3..3a9dcff 100644
--- a/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor.cs
+++ b/NetinaShop.AdminPanel.PWA/Dialogs/ProductActionDialogBox.razor.cs
@@ -96,7 +96,7 @@ public class ProductActionDialogBoxViewModel : BaseViewModel
productLDto.Specifications.ForEach(s => Specifications.Add(s));
productLDto.Files.ForEach(f => Files.Add(f));
SelectedCategory = new ProductCategorySDto { Id = productLDto.CategoryId, Name = productLDto.CategoryName };
- SelectedBrand = new BrandSDto { Id = productLDto.BrandId, Name = productLDto.BrandName };
+ SelectedBrand = new BrandSDto { Id = productLDto.BrandId, PersianName = productLDto.BrandName };
PageDto.IsSpecialOffer = productLDto.IsSpecialOffer;
IsSpecialOffer = PageDto.IsSpecialOffer;
if (productLDto.SpecialOffer != null)
@@ -177,12 +177,10 @@ public class ProductActionDialogBoxViewModel : BaseViewModel
if (exe != null)
_snackbar.Add(exe.Message, Severity.Error);
_snackbar.Add(ex.Content, Severity.Error);
- _mudDialog.Cancel();
}
catch (Exception e)
{
_snackbar.Add(e.Message, Severity.Error);
- _mudDialog.Cancel();
}
finally
{
@@ -204,6 +202,8 @@ public class ProductActionDialogBoxViewModel : BaseViewModel
throw new Exception("Token is null");
PageDto.Specifications = Specifications.ToList();
PageDto.Files = Files.ToList();
+ PageDto.CategoryId = SelectedCategory?.Id ?? default;
+ PageDto.BrandId = SelectedBrand?.Id ?? default;
if (PageDto.IsSpecialOffer)
{
if (ExpireDate != null)
@@ -216,7 +216,7 @@ public class ProductActionDialogBoxViewModel : BaseViewModel
await _restWrapper.CrudApiRest(Address.ProductController).Create(request, token);
_snackbar.Add($"ساخت محصول {PageDto.PersianName} با موفقیت انجام شد", Severity.Success);
- _mudDialog.Close();
+ _mudDialog.Close(DialogResult.Ok(true));
}
catch (ApiException ex)
{
@@ -224,12 +224,10 @@ public class ProductActionDialogBoxViewModel : BaseViewModel
if (exe != null)
_snackbar.Add(exe.Message, Severity.Error);
_snackbar.Add(ex.Content, Severity.Error);
- _mudDialog.Cancel();
}
catch (Exception e)
{
_snackbar.Add(e.Message, Severity.Error);
- _mudDialog.Cancel();
}
finally
{
diff --git a/NetinaShop.AdminPanel.PWA/Dialogs/ProductCategoryActionDialogBox.razor b/NetinaShop.AdminPanel.PWA/Dialogs/ProductCategoryActionDialogBox.razor
index 7465038..eb4069e 100644
--- a/NetinaShop.AdminPanel.PWA/Dialogs/ProductCategoryActionDialogBox.razor
+++ b/NetinaShop.AdminPanel.PWA/Dialogs/ProductCategoryActionDialogBox.razor
@@ -8,7 +8,7 @@
-
+
@@ -18,16 +18,16 @@
اطلاعات کلی دسته بندی محصول را به دقت وارد کنید
-
+
-
+
-
+
-
-
+
+
+
- توضیحات تکمیلی
- می توانید توضیحاتــ تکمیلی محصول را کامل وارد کنید
-
-
+ توضیحات تکمیلی
+ می توانید توضیحاتــ تکمیلی محصول را کامل وارد کنید
+
+
+
diff --git a/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor b/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor
index 2afdd77..95e8d96 100644
--- a/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor
+++ b/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor
@@ -35,7 +35,8 @@
OnAdornmentClick="@ViewModel.SearchAsync">
-
+
+
diff --git a/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor.cs b/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor.cs
index 5ac0b55..33b76bb 100644
--- a/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor.cs
+++ b/NetinaShop.AdminPanel.PWA/Pages/BrandsPage.razor.cs
@@ -58,7 +58,7 @@ public class BrandsPageViewModel : BaseViewModel>
{
DialogOptions maxWidth = new DialogOptions() { MaxWidth = MaxWidth.Medium, FullWidth = true, DisableBackdropClick = true };
var parameters = new DialogParameters { { x => x.Brand, brand } };
- await _dialogService.ShowAsync($"ویرایش برند {brand.Name}", parameters, maxWidth);
+ await _dialogService.ShowAsync($"ویرایش برند {brand.PersianName}", parameters, maxWidth);
}
public async Task DeleteBrandAsync(Guid selectedCategoryId)
{
diff --git a/NetinaShop.AdminPanel.PWA/Pages/CategoriesPage.razor b/NetinaShop.AdminPanel.PWA/Pages/CategoriesPage.razor
index 2a166f7..68efe37 100644
--- a/NetinaShop.AdminPanel.PWA/Pages/CategoriesPage.razor
+++ b/NetinaShop.AdminPanel.PWA/Pages/CategoriesPage.razor
@@ -14,6 +14,7 @@
دسته بندی ها
124 عدد
+
افزودن دسته بندی
-
+
سوالات متداول فروشگاه من
- ذخیره سوالات
+ ذخیره سوالات
@@ -22,8 +22,8 @@
-
-
+ افزودن
diff --git a/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor b/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor
index 639ec9c..0835b02 100644
--- a/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor
+++ b/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor
@@ -27,8 +27,9 @@
OnClick="@ViewModel.AddDigikalaProductClicked"
class="my-auto">افزودن محصول از دیجیکالا *@
-
+
@@ -68,6 +72,12 @@
+
+
+
+
+
+
diff --git a/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor.cs b/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor.cs
index 017d1b0..de84f2d 100644
--- a/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor.cs
+++ b/NetinaShop.AdminPanel.PWA/Pages/ProductsPage.razor.cs
@@ -30,7 +30,7 @@ public class ProductsPageViewModel : BaseViewModel PageDto.Add(d));
if (PageDto.Count == 20)
PageCount = 2;
@@ -65,11 +65,11 @@ public class ProductsPageViewModel : BaseViewModel PageDto.Add(d));
@@ -184,7 +184,12 @@ public class ProductsPageViewModel : BaseViewModel PageDto.Add(d));
if (PageDto.Count == 20)
PageCount = 2;
@@ -204,4 +209,118 @@ public class ProductsPageViewModel : BaseViewModel _productCategories = new List();
+ public ProductCategorySDto? SelectedCategory;
+ public async Task> SearchProductCategory(string category)
+ {
+ try
+ {
+ if (category.IsNullOrEmpty())
+ _productCategories = await _restWrapper.ProductCategoryRestApi.ReadAll(0);
+ else
+ _productCategories = await _restWrapper.ProductCategoryRestApi.ReadAll(category);
+ return _productCategories;
+ }
+ catch (ApiException ex)
+ {
+ var exe = await ex.GetContentAsAsync();
+ if (exe != null)
+ _snackbar.Add(exe.Message, Severity.Error);
+ _snackbar.Add(ex.Content, Severity.Error);
+ return _productCategories;
+ }
+ catch (Exception e)
+ {
+ _snackbar.Add(e.Message, Severity.Error);
+ return _productCategories;
+ }
+ }
+
+ public async Task ProductCategorySelected(ProductCategorySDto productCategory)
+ {
+ SelectedCategory = productCategory;
+ try
+ {
+ if (SelectedCategory == null)
+ {
+ return;
+ }
+ IsProcessing = true;
+ CurrentPage = 0;
+ PageCount = 1;
+ PageDto.Clear();
+ GetProductsResponseDto dto = await _restWrapper.ProductRestApi.ReadAll(CurrentPage, Search, SelectedCategory.Id);
+
+ dto.Products.ForEach(d => PageDto.Add(d));
+ if (PageDto.Count == 20)
+ PageCount = 2;
+ }
+ catch (ApiException ex)
+ {
+ var exe = await ex.GetContentAsAsync();
+ _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
+ }
+ catch (Exception e)
+ {
+ _snackbar.Add(e.Message, Severity.Error);
+ }
+ finally
+ {
+
+ IsProcessing = false;
+ }
+ }
+
+ public async Task ClearProductCategorySearch()
+ {
+ SelectedCategory = null;
+ try
+ {
+ IsProcessing = true;
+ CurrentPage = 0;
+ PageCount = 1;
+ PageDto.Clear();
+ GetProductsResponseDto dto = await _restWrapper.ProductRestApi.ReadAll(CurrentPage, Search, null);
+
+ dto.Products.ForEach(d => PageDto.Add(d));
+ if (PageDto.Count == 20)
+ PageCount = 2;
+ }
+ catch (ApiException ex)
+ {
+ var exe = await ex.GetContentAsAsync();
+ _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
+ }
+ catch (Exception e)
+ {
+ _snackbar.Add(e.Message, Severity.Error);
+ }
+ finally
+ {
+
+ IsProcessing = false;
+ }
+ }
+
+ public async Task DisplayedChanged(ProductSDto product)
+ {
+ try
+ {
+ var token = await _userUtility.GetBearerTokenAsync();
+ if (token == null)
+ throw new Exception("Token is null");
+ await _restWrapper.ProductRestApi.ChangeDisplayedAsync(product.Id, product.BeDisplayed, token);
+ }
+ catch (ApiException ex)
+ {
+ var exe = await ex.GetContentAsAsync();
+ _snackbar.Add(exe != null ? exe.Message : ex.Content, Severity.Error);
+ }
+ catch (Exception e)
+ {
+ _snackbar.Add(e.Message, Severity.Error);
+ }
+ }
}
\ No newline at end of file
diff --git a/NetinaShop.AdminPanel.PWA/Services/CustomAuthenticationStateProvider.cs b/NetinaShop.AdminPanel.PWA/Services/CustomAuthenticationStateProvider.cs
index 1675b6f..e770c3e 100644
--- a/NetinaShop.AdminPanel.PWA/Services/CustomAuthenticationStateProvider.cs
+++ b/NetinaShop.AdminPanel.PWA/Services/CustomAuthenticationStateProvider.cs
@@ -24,6 +24,7 @@ public class CustomAuthenticationStateProvider : AuthenticationStateProvider
if (user.RoleName == "Customer")
return new AuthenticationState(new());
var permissions = await _userUtility.GetPermissionsAsync();
+
var claims = new List
{
new Claim(ClaimTypes.Name, user.FirstName + " " + user.LastName),
diff --git a/NetinaShop.AdminPanel.PWA/Services/RestServices/IProductRestApi.cs b/NetinaShop.AdminPanel.PWA/Services/RestServices/IProductRestApi.cs
index 07e3d02..0004f6e 100644
--- a/NetinaShop.AdminPanel.PWA/Services/RestServices/IProductRestApi.cs
+++ b/NetinaShop.AdminPanel.PWA/Services/RestServices/IProductRestApi.cs
@@ -4,15 +4,18 @@ namespace NetinaShop.AdminPanel.PWA.Services.RestServices;
public interface IProductRestApi
{
+ [Put("/{productId}")]
+ Task ChangeDisplayedAsync(Guid productId, [Query]bool beDisplayed, [Header("Authorization")]string authorization);
- [Get("")]
- Task ReadAll();
[Get("/{productId}")]
Task ReadOne(Guid productId);
- [Get("")]
- Task ReadAll([Query] int page);
- [Get("")]
- Task ReadAll([Query] int page, [Query] string productName);
+
[Get("")]
Task ReadAll([Query] string productName);
+
+ [Get("")]
+ Task ReadAll([Query] int page, [Query] string? productName, [Query] Guid? categoryId);
+
+ [Get("")]
+ Task ReadAll([Query] string productName, [Query] Guid categoryId);
}
\ No newline at end of file
diff --git a/NetinaShop.AdminPanel.PWA/wwwroot/css/app.min.css b/NetinaShop.AdminPanel.PWA/wwwroot/css/app.min.css
index 88bbd4b..f5aa18e 100644
--- a/NetinaShop.AdminPanel.PWA/wwwroot/css/app.min.css
+++ b/NetinaShop.AdminPanel.PWA/wwwroot/css/app.min.css
@@ -1247,15 +1247,18 @@ input:checked + .toggle-bg {
.h-screen {
height: 100vh;
}
+.\!max-h-\[80vh\] {
+ max-height: 80vh !important;
+}
+.max-h-\[20rem\] {
+ max-height: 20rem;
+}
.max-h-\[30rem\] {
max-height: 30rem;
}
.max-h-\[40rem\] {
max-height: 40rem;
}
-.min-h-\[28rem\] {
- min-height: 28rem;
-}
.min-h-\[33rem\] {
min-height: 33rem;
}
@@ -1408,6 +1411,9 @@ input:checked + .toggle-bg {
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
+.overflow-auto {
+ overflow: auto;
+}
.overflow-hidden {
overflow: hidden;
}
@@ -2077,6 +2083,10 @@ code {
height: 38rem;
}
+ .lg\:max-h-\[25rem\] {
+ max-height: 25rem;
+ }
+
.lg\:max-h-\[35rem\] {
max-height: 35rem;
}
diff --git a/NetinaShop.AdminPanel.PWA/wwwroot/css/app.output.css b/NetinaShop.AdminPanel.PWA/wwwroot/css/app.output.css
index 7536b93..770c365 100644
--- a/NetinaShop.AdminPanel.PWA/wwwroot/css/app.output.css
+++ b/NetinaShop.AdminPanel.PWA/wwwroot/css/app.output.css
@@ -1380,6 +1380,14 @@ input:checked + .toggle-bg {
height: 100vh;
}
+.\!max-h-\[80vh\] {
+ max-height: 80vh !important;
+}
+
+.max-h-\[20rem\] {
+ max-height: 20rem;
+}
+
.max-h-\[30rem\] {
max-height: 30rem;
}
@@ -1590,6 +1598,10 @@ input:checked + .toggle-bg {
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
}
+.overflow-auto {
+ overflow: auto;
+}
+
.overflow-hidden {
overflow: hidden;
}
@@ -2386,6 +2398,10 @@ code {
height: 38rem;
}
+ .lg\:max-h-\[25rem\] {
+ max-height: 25rem;
+ }
+
.lg\:max-h-\[35rem\] {
max-height: 35rem;
}