From 71c1a7f0f127718e3769102187b26e0df92422db Mon Sep 17 00:00:00 2001 From: gaoyuan Date: Fri, 11 Mar 2022 00:07:50 +0800 Subject: [PATCH] fix date selection range issue --- Billing.Shared/Views/RankPage.xaml | 10 +-- Billing.Shared/Views/RankPage.xaml.cs | 91 ++++++++++++++++++++++----- 2 files changed, 82 insertions(+), 19 deletions(-) diff --git a/Billing.Shared/Views/RankPage.xaml b/Billing.Shared/Views/RankPage.xaml index d82f46a..3111df6 100644 --- a/Billing.Shared/Views/RankPage.xaml +++ b/Billing.Shared/Views/RankPage.xaml @@ -141,8 +141,8 @@ - - + @@ -151,7 +151,7 @@ - + @@ -166,7 +166,7 @@ - + + \ No newline at end of file diff --git a/Billing.Shared/Views/RankPage.xaml.cs b/Billing.Shared/Views/RankPage.xaml.cs index 025797b..5e91200 100644 --- a/Billing.Shared/Views/RankPage.xaml.cs +++ b/Billing.Shared/Views/RankPage.xaml.cs @@ -14,6 +14,17 @@ using Resource = Billing.Languages.Resource; namespace Billing.Views { + public enum DateType : int + { + Monthly = 0, + Today, + PastMonth, + PastQuarter, + PastSixMonths, + PastYear, + Total + } + public partial class RankPage : BillingPage { private static readonly DateTime today = DateTime.Today; @@ -53,13 +64,13 @@ namespace Billing.Views } private static void OnSegmentDateChanged(RankPage page, int old, int @new) { - page.OnDateTypeCommand(@new); + page.OnDateTypeCommand((DateType)@new); } private static void OnDateChanged(RankPage page, DateTime old = default, DateTime @new = default) { page.isLocked = true; - page.StartPickerDate = page.StartDate; - page.EndPickerDate = page.EndDate; + page.StartPickerDate = page.StartDate.Date; + page.EndPickerDate = page.EndDate.Date; page.isLocked = false; if (!page.isFreezed) { @@ -73,7 +84,7 @@ namespace Billing.Views if (!page.isLocked) { page.SegmentDate = -1; - page.StartDate = @new; + page.StartDate = @new.Date; } } private static void OnPickerEndDateChanged(RankPage page, DateTime _, DateTime @new) @@ -81,7 +92,7 @@ namespace Billing.Views if (!page.isLocked) { page.SegmentDate = -1; - page.EndDate = @new; + page.EndDate = @new.Date.LastMoment(); } } @@ -186,7 +197,7 @@ namespace Billing.Views OnDateChanged(this); } - private void OnDateTypeCommand(int index) + private void OnDateTypeCommand(DateType index) { if (index < 0) { @@ -200,31 +211,31 @@ namespace Billing.Views var today = DateTime.Today; switch (index) { - case 0: // monthly + case DateType.Monthly: StartDate = today.AddDays(1 - today.Day); EndDate = today.AddDays(DateTime.DaysInMonth(today.Year, today.Month) - today.Day).LastMoment(); break; - case 1: // today + case DateType.Today: StartDate = today; EndDate = today.LastMoment(); break; - case 2: // past month + case DateType.PastMonth: StartDate = today.AddMonths(-1).AddDays(1); EndDate = today.LastMoment(); break; - case 3: // past quarter + case DateType.PastQuarter: StartDate = today.AddMonths(-3).AddDays(1); EndDate = today.LastMoment(); break; - case 4: // past six months + case DateType.PastSixMonths: StartDate = today.AddMonths(-6).AddDays(1); EndDate = today.LastMoment(); break; - case 5: // past year + case DateType.PastYear: StartDate = today.AddYears(-1).AddDays(1); EndDate = today.LastMoment(); break; - case 6: // total + case DateType.Total: //StartDate = App.Bills.Min(b => b.CreateTime).Date; //EndDate = App.Bills.Max(b => b.CreateTime).Date.LastMoment(); DateTime min = DateTime.MaxValue; @@ -257,6 +268,11 @@ namespace Billing.Views private void OnLeftCommand() { + var type = (DateType)SegmentDate; + if (type < DateType.Monthly || type >= DateType.Total) + { + return; + } if (scroller.ScrollY > 0) { scroller.ScrollToAsync(0, 0, true); @@ -264,11 +280,31 @@ namespace Billing.Views isFreezed = true; var start = StartDate; var end = EndDate; - if (IsPreset(start, end)) + if (type == DateType.Monthly || IsPreset(start, end)) { start = start.AddMonths(-1); end = start.AddDays(DateTime.DaysInMonth(start.Year, start.Month) - 1).LastMoment(); } + else if (type == DateType.PastMonth) + { + start = start.AddMonths(-1); + end = end.AddMonths(-1); + } + else if (type == DateType.PastQuarter) + { + start = start.AddMonths(-3); + end = end.AddMonths(-3); + } + else if (type == DateType.PastSixMonths) + { + start = start.AddMonths(-6); + end = end.AddMonths(-6); + } + else if (type == DateType.PastYear) + { + start = start.AddYears(-1); + end = end.AddYears(-1); + } else { var days = (end.Date - start.Date).TotalDays + 1; @@ -288,6 +324,11 @@ namespace Billing.Views private void OnRightCommand() { + var type = (DateType)SegmentDate; + if (type < DateType.Monthly || type >= DateType.Total) + { + return; + } if (scroller.ScrollY > 0) { scroller.ScrollToAsync(0, 0, true); @@ -295,11 +336,31 @@ namespace Billing.Views isFreezed = true; var start = StartDate; var end = EndDate; - if (IsPreset(start, end)) + if (type == DateType.Monthly || IsPreset(start, end)) { start = start.AddMonths(1); end = start.AddDays(DateTime.DaysInMonth(start.Year, start.Month) - 1).LastMoment(); } + else if (type == DateType.PastMonth) + { + start = start.AddMonths(1); + end = end.AddMonths(1); + } + else if (type == DateType.PastQuarter) + { + start = start.AddMonths(3); + end = end.AddMonths(3); + } + else if (type == DateType.PastSixMonths) + { + start = start.AddMonths(6); + end = end.AddMonths(6); + } + else if (type == DateType.PastYear) + { + start = start.AddYears(1); + end = end.AddYears(1); + } else { var days = (end.Date - start.Date).TotalDays + 1;