From 4b569c3df687c0e2b45a6f8d3a06dcb64a9c0b35 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 22 Mar 2025 20:17:22 +0800 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E9=87=8D?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/DateTimePicker/DatePickerBody.razor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/DateTimePicker/DatePickerBody.razor.cs b/src/BootstrapBlazor/Components/DateTimePicker/DatePickerBody.razor.cs index 8ec0f992a6c..ce0de10e3f0 100644 --- a/src/BootstrapBlazor/Components/DateTimePicker/DatePickerBody.razor.cs +++ b/src/BootstrapBlazor/Components/DateTimePicker/DatePickerBody.razor.cs @@ -537,7 +537,7 @@ private List GetWeekList() // 调整顺序 var firstDayIndex = (int)FirstDayOfWeek; - return list.Skip(firstDayIndex).Concat(list.Take(firstDayIndex)).ToList(); + return [.. list.Skip(firstDayIndex), .. list.Take(firstDayIndex)]; } private async Task UpdateDisabledDaysCache(bool force) From b07166bcb434a01fedafe438091d80967213c50f Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 22 Mar 2025 20:17:40 +0800 Subject: [PATCH 2/6] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=20FirstDayOfWeek?= =?UTF-8?q?=20=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Calendar/Calendar.razor.cs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/BootstrapBlazor/Components/Calendar/Calendar.razor.cs b/src/BootstrapBlazor/Components/Calendar/Calendar.razor.cs index c4cb7ce2291..7a8a51a365f 100644 --- a/src/BootstrapBlazor/Components/Calendar/Calendar.razor.cs +++ b/src/BootstrapBlazor/Components/Calendar/Calendar.razor.cs @@ -107,7 +107,7 @@ protected override void OnInitialized() PreviousMonth = Localizer[nameof(PreviousMonth)]; NextMonth = Localizer[nameof(NextMonth)]; Today = Localizer[nameof(Today)]; - WeekLists = [.. Localizer[nameof(WeekLists)].Value.Split(',')]; + WeekLists = GetWeekList(); PreviousWeek = Localizer[nameof(PreviousWeek)]; NextWeek = Localizer[nameof(NextWeek)]; WeekText = Localizer[nameof(WeekText)]; @@ -124,7 +124,7 @@ protected DateTime StartDate get { var d = Value.AddDays(1 - Value.Day); - d = d.AddDays(0 - (int)d.DayOfWeek); + d = d.AddDays((int)FirstDayOfWeek - (int)d.DayOfWeek); return d; } } @@ -197,6 +197,12 @@ protected int GetWeekCount() [Parameter] public bool ShowYearButtons { get; set; } = true; + /// + /// 获得/设置 星期第一天 默认 + /// + [Parameter] + public DayOfWeek FirstDayOfWeek { get; set; } = DayOfWeek.Sunday; + /// /// 选中日期时回调此方法 /// @@ -297,4 +303,12 @@ private BodyTemplateContext GetBodyTemplateContext(DateTime week) context.Values.AddRange(Enumerable.Range(0, 7).Select(i => CreateCellValue(week.AddDays(i)))); return context; } + private List GetWeekList() + { + var list = Localizer[nameof(WeekLists)].Value.Split(',', StringSplitOptions.RemoveEmptyEntries).ToList(); + + // 调整顺序 + var firstDayIndex = (int)FirstDayOfWeek; + return [.. list.Skip(firstDayIndex), .. list.Take(firstDayIndex)]; + } } From 74da40093bacd9c445970111280bed7a6c9a59fa Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 22 Mar 2025 20:18:05 +0800 Subject: [PATCH 3/6] =?UTF-8?q?doc:=20=E6=9B=B4=E6=96=B0=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Server/Components/Samples/Calendars.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor b/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor index c2d0fa40645..2ec2ced7c91 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor +++ b/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor @@ -6,7 +6,7 @@

@Localizer["SubTitle"]

- + From 373ef4610de41a10f786898c729bbe96afc44d51 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 22 Mar 2025 20:20:47 +0800 Subject: [PATCH 4/6] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Samples/Calendars.razor.cs | 8 ++++++++ .../Components/Samples/DateTimePickers.razor.cs | 8 ++++++++ src/BootstrapBlazor.Server/Locales/en-US.json | 6 ++++-- src/BootstrapBlazor.Server/Locales/zh-CN.json | 6 ++++-- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs index bde8d96be69..79fa16f239e 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/Calendars.razor.cs @@ -77,6 +77,14 @@ private AttributeItem[] GetAttributes() => Type = "RenderFragment", ValueList = " — ", DefaultValue = " — " + }, + new() + { + Name = nameof(Calendar.FirstDayOfWeek), + Description = Localizer["FirstDayOfWeek"], + Type = "DayOfWeek", + ValueList = " — ", + DefaultValue = "Sunday" } ]; } diff --git a/src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor.cs b/src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor.cs index 2b87c4a60b1..2213d0f260e 100644 --- a/src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor.cs +++ b/src/BootstrapBlazor.Server/Components/Samples/DateTimePickers.razor.cs @@ -221,6 +221,14 @@ private AttributeItem[] GetAttributes() => DefaultValue = " — " }, new() + { + Name = nameof(DateTimePicker.FirstDayOfWeek), + Description = Localizer["AttrFirstDayOfWeek"], + Type = "DayOfWeek", + ValueList = " — ", + DefaultValue = "Sunday" + }, + new() { Name = "ViewMode", Description = Localizer["Att9"], diff --git a/src/BootstrapBlazor.Server/Locales/en-US.json b/src/BootstrapBlazor.Server/Locales/en-US.json index 63fe6cc4810..3685dbb0d70 100644 --- a/src/BootstrapBlazor.Server/Locales/en-US.json +++ b/src/BootstrapBlazor.Server/Locales/en-US.json @@ -2572,7 +2572,8 @@ "FeatureShowHolidaysIntro": "ShowHolidays Whether to display holidays", "OnGetDisabledDaysCallbackEvent": "Disable date callback method", "AttrEnableDisabledDaysCache": "Whether to enable custom disabled date cache", - "AttrDisplayDisabledDayAsEmpty": "Display disabled date as an empty string" + "AttrDisplayDisabledDayAsEmpty": "Display disabled date as an empty string", + "AttrFirstDayOfWeek": "The first day of the week" }, "BootstrapBlazor.Server.Components.Samples.TimePickers": { "Title": "TimePicker", @@ -3768,7 +3769,8 @@ "Chinese": "Chinese", "Math": "Math", "English": "English", - "Study": "Study" + "Study": "Study", + "FirstDayOfWeek": "The first day of the week" }, "BootstrapBlazor.Server.Components.Samples.Cameras": { "Title": "Camera", diff --git a/src/BootstrapBlazor.Server/Locales/zh-CN.json b/src/BootstrapBlazor.Server/Locales/zh-CN.json index 5450fd520d7..606db14d02e 100644 --- a/src/BootstrapBlazor.Server/Locales/zh-CN.json +++ b/src/BootstrapBlazor.Server/Locales/zh-CN.json @@ -2572,7 +2572,8 @@ "FeatureShowHolidaysIntro": "ShowHolidays 是否显示假日", "OnGetDisabledDaysCallbackEvent": "获得自定义禁用日期回调方法", "AttrEnableDisabledDaysCache": "是否启用获得自定义禁用日期缓存", - "AttrDisplayDisabledDayAsEmpty": "显示禁用日期为空字符串" + "AttrDisplayDisabledDayAsEmpty": "显示禁用日期为空字符串", + "AttrFirstDayOfWeek": "设置每周第一天" }, "BootstrapBlazor.Server.Components.Samples.TimePickers": { "Title": "TimePicker 时间选择器", @@ -3768,7 +3769,8 @@ "Chinese": "语文", "Math": "数学", "English": "英语", - "Study": "自习" + "Study": "自习", + "FirstDayOfWeek": "设置每周第一天" }, "BootstrapBlazor.Server.Components.Samples.Cameras": { "Title": "Camera 摄像头拍照组件", From 5dade843cd659d8f50d4d9ed55aeccd4703e0925 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 22 Mar 2025 20:23:08 +0800 Subject: [PATCH 5/6] chore: bump version 9.4.11 --- src/BootstrapBlazor/BootstrapBlazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/BootstrapBlazor.csproj b/src/BootstrapBlazor/BootstrapBlazor.csproj index 9e81c4b15b8..e8410287ff9 100644 --- a/src/BootstrapBlazor/BootstrapBlazor.csproj +++ b/src/BootstrapBlazor/BootstrapBlazor.csproj @@ -1,7 +1,7 @@  - 9.5.0-beta11 + 9.4.11 From ada1e7a34f83392b81f50429422aae3cb2d41982 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 22 Mar 2025 20:28:11 +0800 Subject: [PATCH 6/6] =?UTF-8?q?test:=20=E5=A2=9E=E5=8A=A0=E5=8D=95?= =?UTF-8?q?=E5=85=83=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/UnitTest/Components/CalendarTest.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/UnitTest/Components/CalendarTest.cs b/test/UnitTest/Components/CalendarTest.cs index abce650f4a5..7df7dd431f8 100644 --- a/test/UnitTest/Components/CalendarTest.cs +++ b/test/UnitTest/Components/CalendarTest.cs @@ -233,4 +233,17 @@ await cut.InvokeAsync(() => }); Assert.NotEqual(v, DateTime.MinValue); } + + [Fact] + public void FirstDayOfWeek_Ok() + { + var cut = Context.RenderComponent(pb => + { + pb.Add(a => a.Value, new DateTime(2025, 02, 20)); + pb.Add(a => a.FirstDayOfWeek, DayOfWeek.Monday); + }); + var labels = cut.FindAll(".calendar-table thead > tr > th"); + Assert.Equal("一", labels[0].TextContent); + Assert.Equal("日", labels[6].TextContent); + } }