This commit is contained in:
mmrbnjd
2024-05-04 02:53:36 +03:30
parent dd12564a81
commit 4c57996b35
7 changed files with 140 additions and 41 deletions

View File

@@ -99,10 +99,14 @@ namespace Back.Controllers
var Ticket = await _servTicket.GetTicketorgbyTicketID(user.RolUsers.First().CompanyID,TicketID); var Ticket = await _servTicket.GetTicketorgbyTicketID(user.RolUsers.First().CompanyID,TicketID);
if (Ticket == null) if (Ticket == null)
return NotFound(new List<string>() { "تیکت یافت نشد" }); return NotFound(new List<string>() { "تیکت یافت نشد" });
if (!string.IsNullOrEmpty(Ticket.EndDate)) return BadRequest("این تیکت قبلا بسته شده"); // if (!string.IsNullOrEmpty(Ticket.EndDate)) return BadRequest("این تیکت قبلا بسته شده");
if (Ticket.Status == StatusTicket.Awaitingreview || Ticket.Status == StatusTicket.Read_Checking
Ticket.Status = StatusTicket.optout; || Ticket.Status == StatusTicket.hasbeenanswered)
return Ok(await _servTicket.UpdateTicket(Ticket)); {
Ticket.Status = StatusTicket.optout;
return Ok(await _servTicket.UpdateTicket(Ticket));
}
return Ok();
} }
[HttpPost("NewTicketNoAuthentication")] [HttpPost("NewTicketNoAuthentication")]
[AllowAnonymous] [AllowAnonymous]

View File

@@ -65,7 +65,7 @@ namespace Back.Services
#endregion #endregion
//----------------------- //-----------------------
return await invok.OrderByDescending(o => o.ID).Select(s => new SubTicketDTO() return await invok.OrderBy(o => o.ID).Select(s => new SubTicketDTO()
{ {
Date = s.Date.ShamciToFormatShamci(), Date = s.Date.ShamciToFormatShamci(),
Text = s.Text, Text = s.Text,

View File

@@ -5,7 +5,7 @@ namespace Shared.DTOs
public enum StatusTicket public enum StatusTicket
{ {
[Display(Name = "فرد ناشناس")] [Display(Name = "فرد ناشناس")]//
unknownPerson, unknownPerson,
[Display(Name = "در انتظار بررسی")] [Display(Name = "در انتظار بررسی")]
Awaitingreview, Awaitingreview,
@@ -13,9 +13,9 @@ namespace Shared.DTOs
Read_Checking, Read_Checking,
[Display(Name = "پاسخ داده شده")] [Display(Name = "پاسخ داده شده")]
hasbeenanswered, hasbeenanswered,
[Display(Name = "پاِیان")] [Display(Name = "پاِیان")]//
End, End,
[Display(Name = "انصراف")] [Display(Name = "انصراف")]//
optout, optout,
} }
} }

View File

@@ -1,18 +1,25 @@
@using Shared.DTOs @using Front.Services
@using Shared.DTOs
@inject HttpClientController hc;
<Modal @ref="modal" title=@Ticket.Title IsVerticallyCentered="true"> <Modal @ref="modal" title=@Ticket.Title IsVerticallyCentered="true">
<BodyTemplate> <BodyTemplate>
<Lchat/> <Badge Color="@badgeColor" IndicatorType="BadgeIndicatorType.RoundedPill">@Ticket.MsgStatus</Badge>
<Lchat Ticket="Ticket" />
</BodyTemplate> </BodyTemplate>
<FooterTemplate> <FooterTemplate>
<Button Color="ButtonColor.Secondary" @onclick="OnHideModalClick">Close</Button> <Button Color="ButtonColor.Secondary" @onclick="OnHideModalClick">Close</Button>
<Button Color="ButtonColor.Danger" @onclick="OnHideModalClick">بستن</Button> @if (Ticket.Status == StatusTicket.Awaitingreview || Ticket.Status == StatusTicket.Read_Checking
|| Ticket.Status == StatusTicket.hasbeenanswered)
{
<Button Color="ButtonColor.Danger" @onclick="OnCloseTicket">بستن</Button>
}
</FooterTemplate> </FooterTemplate>
</Modal> </Modal>
<li class="list-group-item" data-toggle="modal" data-target="#issue"> <li class="list-group-item" data-toggle="modal" data-target="#issue">
<div class="row"> <div class="row">
<div class="col-md-1"> <div class="col-md-2">
<a style="cursor:pointer" @onclick="OnShowModalClick"><br />#@Ticket.TicketID</a> <a style="cursor:pointer" @onclick="OnShowModalClick"><br />#@Ticket.TicketID</a>
</div> </div>
<div class="col-md-5"> <div class="col-md-5">
@@ -47,6 +54,8 @@
@code { @code {
[Parameter] [Parameter]
public TicketDTO Ticket { get; set; } public TicketDTO Ticket { get; set; }
[Parameter]
public EventCallback<int> OnMultipleOfThree { get; set; }
public BadgeColor badgeColor = BadgeColor.Light; public BadgeColor badgeColor = BadgeColor.Light;
protected override async Task OnParametersSetAsync() protected override async Task OnParametersSetAsync()
@@ -80,7 +89,19 @@
{ {
await modal.ShowAsync(); await modal.ShowAsync();
} }
private async Task OnCloseTicket()
{
var rsp = await hc.Put($"Ticket/CancelTicket/{Ticket.TicketID}");
if (rsp.IsSuccessStatusCode)
{
// await Search(1);
await modal.HideAsync();
await OnMultipleOfThree.InvokeAsync(1);
}
}
private async Task OnHideModalClick() private async Task OnHideModalClick()
{ {
await modal.HideAsync(); await modal.HideAsync();

View File

@@ -1,32 +1,85 @@
<div dir="ltr" class="chat"> @using Front.Services
@using Shared.DTOs
@inject HttpClientController hc;
<div class="row">
<Alert hidden="@Hidealert" Color="@alertColor" Dismissable="false">
<Icon Name="@alertIconName" class="me-2"></Icon>
@alertMessage
</Alert>
</div>
<div dir="ltr" class="chat">
<div class="messages" id="chat"> <div class="messages" id="chat">
<div class="time">
Today at 11:41
</div>
<div class="message parker">
Hey, man! What's up, Mr Stark?&nbsp;👋
</div>
<div class="message stark"> @for (int i = 0; i < subTickets?.Count; i++)
Kid, where'd you come from? {
if (i == 0 || subTickets[i - 1].Date != @subTickets[i].Date)
{
<div class="time"> @subTickets[i].Date </div>
}
string type = subTickets[i].Type == SideType.Customer ? "parker" : "stark";
<div class="message @type">
@subTickets[i].Text
</div> </div>
}
<div class="message parker">
Field trip! 🤣
</div>
<div class="message parker">
حل شد 🤣
</div>
<div class="message stark">
مشکل ما چی شد
</div>
</div>
<div class="input">
<input placeholder="Type your message here!" type="text">
</div> </div>
@if (Ticket.Status == StatusTicket.Awaitingreview || Ticket.Status == StatusTicket.Read_Checking
|| Ticket.Status == StatusTicket.hasbeenanswered)
{
<div class="input">
<input placeholder="Type your message here!" type="text">
</div>
}
</div> </div>
@code{
// alert
AlertColor alertColor = AlertColor.Primary;
IconName alertIconName = IconName.CheckCircleFill;
bool Hidealert = true;
string alertMessage = "";
[Parameter]
public TicketDTO Ticket { get; set; }
public List<SubTicketDTO>? subTickets { get; set; } = new List<SubTicketDTO>();
protected override async Task OnParametersSetAsync()
{
var rsp = await hc.Get($"Ticket/GetSubTicket/{Ticket.TicketID}");
if (rsp.IsSuccessStatusCode)
{
var res = await rsp.Content.ReadFromJsonAsync<ICollection<SubTicketDTO>>();
subTickets = res?.ToList();
}
else
{
ShowDangerAlert("خطایی در اجرای عملیات رخ داده");
}
await base.OnParametersSetAsync();
}
}
@functions {
private void ShowSuccessAlert(string msg)
{
Hidealert = false;
alertColor = AlertColor.Success;
alertIconName = IconName.CheckCircleFill;
alertMessage = msg;
}
private void ShowDangerAlert(string msg)
{
Hidealert = false;
alertColor = AlertColor.Danger;
alertIconName = IconName.ExclamationTriangleFill;
alertMessage = msg;
}
}

View File

@@ -77,7 +77,8 @@
<ul class="list-group fa-padding"> <ul class="list-group fa-padding">
@for (int i = 0; i < request?.list.Count; i++) @for (int i = 0; i < request?.list.Count; i++)
{ {
<LTicket Ticket="request?.list[i]" />
<LTicket OnMultipleOfThree=@Search Ticket="request?.list[i]" />
} }
</ul> </ul>
<nav aria-label="Page navigation"> <nav aria-label="Page navigation">
@@ -111,6 +112,8 @@
@code { @code {
LTicket child;
private Modal modal = default!; private Modal modal = default!;
// alert // alert
AlertColor alertColor = AlertColor.Primary; AlertColor alertColor = AlertColor.Primary;
@@ -157,12 +160,13 @@
alertIconName = IconName.ExclamationTriangleFill; alertIconName = IconName.ExclamationTriangleFill;
alertMessage = msg; alertMessage = msg;
} }
private async Task Search(int pi) public async Task Search(int pi)
{ {
var rsp = await hc.Post<ItemSerchGetTicket>("Ticket/GetAll", new ItemSerchGetTicket var rsp = await hc.Post<ItemSerchGetTicket>("Ticket/GetAll", new ItemSerchGetTicket
{ {
PageIndex = pi, PageIndex = pi,
PageSize = 10, PageSize = 5,
TicketID = string.IsNullOrEmpty(TicketID) ? null : Convert.ToInt32(TicketID), TicketID = string.IsNullOrEmpty(TicketID) ? null : Convert.ToInt32(TicketID),
Title = Title Title = Title

View File

@@ -1,5 +1,10 @@
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
using System.Net.Http.Headers;
using System.Net.Http;
using System.Net.Http.Json; using System.Net.Http.Json;
using BlazorBootstrap;
using System.Net;
using System.Text;
namespace Front.Services namespace Front.Services
{ {
@@ -32,6 +37,18 @@ namespace Front.Services
if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized) if (request.StatusCode == System.Net.HttpStatusCode.Unauthorized)
_nav.NavigateTo("/Sign-in/unon"); _nav.NavigateTo("/Sign-in/unon");
return request; return request;
}
public async Task<HttpResponseMessage> Put(string route)
{
var jsonString = "{\"appid\":1,\"platformid\":1,\"rating\":3}";
var httpContent = new StringContent(jsonString, Encoding.UTF8, "application/json");
var response = await _hc.PutAsync(route, httpContent);
if (response.StatusCode == System.Net.HttpStatusCode.Unauthorized)
_nav.NavigateTo("/Sign-in/unon");
return response;
} }
} }
} }