feat(AddFeatureFastProduct) , fix(CheckUserDiscount) , fix(SideBar)
- Add feature in fast product create dialog box - Fix user fist use discount check user - Fix sidebarsubProduct
parent
82ace9a4dd
commit
edf22ff1ca
|
@ -5,7 +5,7 @@
|
|||
|
||||
<MudStack class="bg-[--mud-palette-background] h-screen w-full pt-4">
|
||||
|
||||
<MudNavMenu Rounded="true" Margin="Margin.Dense" Color="Color.Warning" Class="pa-2" Bordered="true">
|
||||
<MudNavMenu Rounded="true" Margin="Margin.Dense" Color="Color.Warning" Bordered="true">
|
||||
<MudNavLink Href="home" Match="NavLinkMatch.Prefix" Icon="@Icons.Material.Filled.Dashboard">داشبورد</MudNavLink>
|
||||
@if (isShop)
|
||||
{
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
|
||||
<MudDialog class="mx-auto h-screen overflow-y-auto p-0">
|
||||
<DialogContent>
|
||||
<MudContainer class="p-0 text-black">
|
||||
<MudContainer class="p-0">
|
||||
<MudStack Row="true">
|
||||
<MudText Typo="Typo.h6" class="my-auto">افزودن سریع محصول</MudText>
|
||||
<MudSpacer />
|
||||
|
@ -35,7 +35,7 @@
|
|||
</MudItem>
|
||||
<MudItem xs="12" md="6">
|
||||
<MudAutocomplete Disabled="@ViewModel.FormEnable.Not()"
|
||||
Required="true"
|
||||
Required="true"
|
||||
ToStringFunc="dto => dto.PersianName"
|
||||
Strict="true"
|
||||
@bind-Value="@ViewModel.SelectedBrand"
|
||||
|
@ -92,6 +92,52 @@
|
|||
<MudTextField Disabled="@ViewModel.FormEnable.Not()" @bind-Value="@ViewModel.PageDto.Cost" Format="N0" Variant="Variant.Outlined" T="double" Label="قیمت ( تومان )" />
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
<MudExpansionPanels>
|
||||
<MudExpansionPanel Text="ویژگی ها ( اختیاری )">
|
||||
<MudGrid>
|
||||
|
||||
|
||||
<MudItem xs="12" lg="6" md="6">
|
||||
<MudTextField @bind-Value="@ViewModel.SpecificationTitle" T="string" Label="عنوان" Variant="Variant.Outlined"></MudTextField>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12" lg="6" md="6">
|
||||
<MudStack Row="true">
|
||||
|
||||
<MudTextField @bind-Value="@ViewModel.SpecificationValue" T="string" Label="مقدار" Variant="Variant.Outlined"></MudTextField>
|
||||
|
||||
<MudButton Variant="Variant.Filled"
|
||||
Size="Size.Large"
|
||||
Color="Color.Info"
|
||||
class="mt-2 py-2"
|
||||
OnClick="ViewModel.AddSpecification"
|
||||
StartIcon="@Icons.Material.Outlined.Add">افزودن</MudButton>
|
||||
</MudStack>
|
||||
</MudItem>
|
||||
|
||||
<MudItem xs="12">
|
||||
<MudDataGrid Items="@ViewModel.Specifications" Elevation="0" Outlined="true" Bordered="true" Striped="true" Filterable="false" SortMode="@SortMode.None" Groupable="false">
|
||||
<Columns>
|
||||
<PropertyColumn Property="x => x.Title" Title="عنوان" />
|
||||
<PropertyColumn Property="x => x.Value" Title="مقدار" />
|
||||
<TemplateColumn T="SpecificationSDto" CellClass="d-flex justify-end">
|
||||
<CellTemplate>
|
||||
<MudStack Row>
|
||||
<MudButton DisableElevation="true"
|
||||
Size="@Size.Small"
|
||||
Variant="@Variant.Filled"
|
||||
OnClick="()=>ViewModel.RemoveSpecification(context.Item)"
|
||||
Color="@Color.Error"
|
||||
StartIcon="@Icons.Material.Outlined.Delete">حذف</MudButton>
|
||||
</MudStack>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
</Columns>
|
||||
</MudDataGrid>
|
||||
</MudItem>
|
||||
</MudGrid>
|
||||
</MudExpansionPanel>
|
||||
</MudExpansionPanels>
|
||||
<MudFileUpload T="IReadOnlyList<IBrowserFile>"
|
||||
AppendMultipleFiles
|
||||
OnFilesChanged="@ViewModel.OnInputFileChanged"
|
||||
|
@ -118,7 +164,7 @@
|
|||
</MudPaper>
|
||||
</ButtonTemplate>
|
||||
</MudFileUpload>
|
||||
|
||||
|
||||
<MudButton Disabled="@ViewModel.FormEnable.Not()" Color="Color.Success" StartIcon="@Icons.Material.Filled.Check" OnClick="@ViewModel.SubmitCreateProduct">ثبت محصول</MudButton>
|
||||
</MudStack>
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ public class FastProductCreateDialogBoxViewModel(ISnackbar snackbar, IRestWrappe
|
|||
{
|
||||
var categories = await restWrapper.ProductCategoryRestApi.ReadAll(true);
|
||||
categories.ForEach(c => Categories.Add(c));
|
||||
PageDto.Stock = 1;
|
||||
PageDto.Stock = 10;
|
||||
await base.InitializeAsync();
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ public class FastProductCreateDialogBoxViewModel(ISnackbar snackbar, IRestWrappe
|
|||
var token = await userUtility.GetBearerTokenAsync();
|
||||
if (token == null)
|
||||
return;
|
||||
var command = brand.Adapt<CreateBrandCommand>() with {Files = new()};
|
||||
var command = brand.Adapt<CreateBrandCommand>() with { Files = new() };
|
||||
var response = await restWrapper.CrudApiRest<Brand, Guid>(Address.BrandController)
|
||||
.Create(command, token);
|
||||
brand.Id = response;
|
||||
|
@ -110,6 +110,7 @@ public class FastProductCreateDialogBoxViewModel(ISnackbar snackbar, IRestWrappe
|
|||
var product = PageDto.Clone();
|
||||
var brand = SelectedBrand.Clone();
|
||||
var browserFiles = Files.ToList();
|
||||
var specifications = Specifications.ToList();
|
||||
Task.Run(async () =>
|
||||
{
|
||||
var token = await userUtility.GetBearerTokenAsync();
|
||||
|
@ -136,19 +137,23 @@ public class FastProductCreateDialogBoxViewModel(ISnackbar snackbar, IRestWrappe
|
|||
FileType = StorageFileType.Image
|
||||
});
|
||||
}
|
||||
|
||||
product.Cost *= 10;
|
||||
var command = product.Adapt<CreateProductCommand>() with
|
||||
{
|
||||
BeDisplayed = true,
|
||||
BrandId = brand.Id,
|
||||
CategoryId = SelectedCategory.Id,
|
||||
Files = files
|
||||
Files = files,
|
||||
Specifications = specifications
|
||||
};
|
||||
await restWrapper.CrudApiRest<Product, Guid>(Address.ProductController)
|
||||
.Create(command, token);
|
||||
|
||||
|
||||
});
|
||||
PageDto = new ProductLDto{Stock = 1};
|
||||
PageDto = new ProductLDto { Stock = 1 };
|
||||
FileNames.Clear();
|
||||
//Specifications.Clear();
|
||||
Files.Clear();
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -156,4 +161,35 @@ public class FastProductCreateDialogBoxViewModel(ISnackbar snackbar, IRestWrappe
|
|||
snackbar.Add(e.Message, Severity.Error);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public string SpecificationTitle = string.Empty;
|
||||
public string SpecificationValue = string.Empty;
|
||||
public readonly ObservableCollection<SpecificationSDto> Specifications = new ObservableCollection<SpecificationSDto>();
|
||||
|
||||
public void AddSpecification()
|
||||
{
|
||||
try
|
||||
{
|
||||
if (SpecificationTitle.IsNullOrEmpty())
|
||||
throw new AppException("عنوان ویژگی مورد نظر را وارد کنید");
|
||||
if (SpecificationValue.IsNullOrEmpty())
|
||||
throw new AppException("مقدار ویژگی مورد نظر را وارد کنید");
|
||||
Specifications.Add(new SpecificationSDto { Title = SpecificationTitle.ToString(), Value = SpecificationValue.ToString() });
|
||||
|
||||
SpecificationTitle = string.Empty;
|
||||
SpecificationValue = string.Empty;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
snackbar.Add(e.Message, Severity.Error);
|
||||
}
|
||||
}
|
||||
|
||||
public void RemoveSpecification(SpecificationSDto specification)
|
||||
{
|
||||
var spec = Specifications.FirstOrDefault(s => s.Value == specification.Value && s.Title == specification.Title);
|
||||
if (spec != null)
|
||||
Specifications.Remove(spec);
|
||||
}
|
||||
}
|
|
@ -5,8 +5,8 @@
|
|||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<ServiceWorkerAssetsManifest>service-worker-assets.js</ServiceWorkerAssetsManifest>
|
||||
<AssemblyVersion>1.0.3.4</AssemblyVersion>
|
||||
<FileVersion>1.0.3.4</FileVersion>
|
||||
<AssemblyVersion>1.1.8.11</AssemblyVersion>
|
||||
<FileVersion>1.1.8.11</FileVersion>
|
||||
<AssemblyName>$(MSBuildProjectName)</AssemblyName>
|
||||
</PropertyGroup>
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
background-color: var(--mud-palette-background-grey);
|
||||
}
|
||||
</style> *@
|
||||
<MudPaper class="h-full w-full p-3 md:p-8">
|
||||
<MudStack class="h-full w-full p-3 md:p-8">
|
||||
<MudStack Row="true" class="overflow-x-auto pb-3">
|
||||
<MudStack Spacing="1" class="min-w-[340px]">
|
||||
<MudStack Row="true" class="mb-5">
|
||||
|
@ -105,7 +105,7 @@
|
|||
|
||||
|
||||
</MudStack>
|
||||
</MudPaper>
|
||||
</MudStack>
|
||||
|
||||
@code
|
||||
{
|
||||
|
|
|
@ -1784,10 +1784,6 @@ input:checked + .toggle-bg {
|
|||
--tw-text-opacity: 1;
|
||||
color: rgb(217 119 6 / var(--tw-text-opacity));
|
||||
}
|
||||
.text-black {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(0 0 0 / var(--tw-text-opacity));
|
||||
}
|
||||
.text-blue-600 {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(28 100 242 / var(--tw-text-opacity));
|
||||
|
|
|
@ -1259,10 +1259,6 @@ input:checked + .toggle-bg {
|
|||
margin-top: -0.75rem;
|
||||
}
|
||||
|
||||
.-mt-\[3px\] {
|
||||
margin-top: -3px;
|
||||
}
|
||||
|
||||
.mb-1 {
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
@ -1339,22 +1335,6 @@ input:checked + .toggle-bg {
|
|||
margin-top: 2rem;
|
||||
}
|
||||
|
||||
.-mt-\[4px\] {
|
||||
margin-top: -4px;
|
||||
}
|
||||
|
||||
.-mt-\[2px\] {
|
||||
margin-top: -2px;
|
||||
}
|
||||
|
||||
.-mt-\[5px\] {
|
||||
margin-top: -5px;
|
||||
}
|
||||
|
||||
.-mt-\[0\.15rem\] {
|
||||
margin-top: -0.15rem;
|
||||
}
|
||||
|
||||
.block {
|
||||
display: block;
|
||||
}
|
||||
|
@ -2095,11 +2075,6 @@ input:checked + .toggle-bg {
|
|||
color: rgb(217 119 6 / var(--tw-text-opacity));
|
||||
}
|
||||
|
||||
.text-black {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(0 0 0 / var(--tw-text-opacity));
|
||||
}
|
||||
|
||||
.text-blue-600 {
|
||||
--tw-text-opacity: 1;
|
||||
color: rgb(28 100 242 / var(--tw-text-opacity));
|
||||
|
|
Loading…
Reference in New Issue