From be0a78460c4417d71f218a3455af8f25ba041944 Mon Sep 17 00:00:00 2001 From: utilcore <8907060@qq.com> Date: Sun, 10 Mar 2024 19:33:39 +0800 Subject: [PATCH] =?UTF-8?q?1.=20=E6=97=A5=E6=9C=9F=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=20=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=20for-begin=E5=92=8C=20for-end=E5=B1=9E=E6=80=A7,=E7=94=A8?= =?UTF-8?q?=E4=BA=8E=E7=BB=91=E5=AE=9A=E8=B5=B7=E5=A7=8B=E5=92=8C=E7=BB=93?= =?UTF-8?q?=E6=9D=9F=E6=97=A5=E6=9C=9F.=202.=20=E8=A1=A8=E6=A0=BC=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=96=B0=E5=A2=9E=20Key=20=E5=B1=9E?= =?UTF-8?q?=E6=80=A7,=E7=94=A8=E4=BA=8E=E4=BF=9D=E5=AD=98=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E8=AE=BE=E7=BD=AE=E6=97=B6=E4=BD=9C=E4=B8=BA=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E9=94=AE.=203.=20=E8=A1=A8=E6=A0=BC=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20EnableTableSettings=20?= =?UTF-8?q?=E5=B1=9E=E6=80=A7,=20=E5=BC=80=E5=90=AF=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8A=9F=E8=83=BD,=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=88=97,=E6=8B=96=E5=8A=A8?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=88=97=E5=AE=BD,=E5=9B=BA=E5=AE=9A?= =?UTF-8?q?=E5=88=97=E7=AD=89=E5=8A=9F=E8=83=BD.=204.=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=8A=BD=E5=B1=89=E5=86=85=E5=AE=B9=E5=AE=B9=E5=99=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6,=E7=94=A8=E4=BA=8E=E6=8B=96?= =?UTF-8?q?=E5=8A=A8=E8=B0=83=E6=95=B4=E6=8A=BD=E5=B1=89=E5=B0=BA=E5=AF=B8?= =?UTF-8?q?.=205.=20=E6=96=B0=E5=A2=9E=E5=AF=B9=E8=AF=9D=E6=A1=86=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E5=AE=B9=E5=99=A8=E7=BB=84=E4=BB=B6,=E7=94=A8=E4=BA=8E=E6=8B=96=E5=8A=A8=E8=B0=83=E6=95=B4?= =?UTF-8?q?=E5=AF=B9=E8=AF=9D=E6=A1=86=E5=B0=BA=E5=AF=B8.=206.=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=88=86=E6=AE=B5=E6=8E=A7=E5=88=B6=E5=99=A8=E7=BB=84?= =?UTF-8?q?=E4=BB=B6,=E5=B7=B2=E6=89=A9=E5=B1=95=E4=B8=BA?= =?UTF-8?q?=E5=8D=95=E9=80=89=E6=8C=89=E9=92=AE=E7=9A=84=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E6=96=B9=E5=BC=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/version.props | 2 +- src/Util.AspNetCore/08-Util.AspNetCore.csproj | 2 +- src/Util.Core/01-Util.Core.csproj | 2 +- src/Util.Core/Item.cs | 10 +- src/Util.Data.Core/01-Util.Data.Core.csproj | 2 +- .../01-Util.Data.Dapper.Core.csproj | 2 +- .../03-Util.Data.Dapper.PostgreSql.csproj | 2 +- .../02-Util.Data.Dapper.SqlServer.csproj | 2 +- .../Metadata/SqlServerMetadataService.cs | 2 +- ...Util.Data.EntityFrameworkCore.MySql.csproj | 2 +- ...Data.EntityFrameworkCore.PostgreSql.csproj | 2 +- ....Data.EntityFrameworkCore.SqlServer.csproj | 2 +- ...til.Data.EntityFrameworkCore.Sqlite.csproj | 2 +- .../01-Util.Data.EntityFrameworkCore.csproj | 4 +- .../03-Util.FileStorage.Minio.csproj | 2 +- .../Contexts/GeneratorContextBuilder.cs | 7 +- src/Util.Http/07-Util.Http.csproj | 2 +- .../01-Util.Images.ImageSharp.csproj | 4 +- .../09-Util.Localization.csproj | 2 +- .../02-Util.Logging.Serilog.csproj | 2 +- .../03-Util.Microservices.Dapr.csproj | 4 +- .../04-Util.Microservices.HealthChecks.csproj | 2 +- .../02-Util.Microservices.Polly.csproj | 2 +- .../02-Util.ObjectMapping.AutoMapper.csproj | 2 +- .../03-Util.Scheduling.Hangfire.csproj | 2 +- .../02-Util.Scheduling.Quartz.csproj | 4 +- .../02-Util.Templates.Razor.csproj | 4 +- src/Util.Ui.Angular/Configs/AngularConst.cs | 12 + src/Util.Ui.NgZorro/03-Util.Ui.NgZorro.csproj | 2 +- .../Alerts/Builders/AlertBuilder.cs | 1 - .../Builders/RangePickerBuilder.cs | 69 +- .../Helpers/RangePickerExpressionLoader.cs | 61 + .../DatePickers/Helpers/RangePickerService.cs | 35 + .../DatePickers/RangePickerTagHelper.cs | 23 +- .../Builders/DrawerContainerBuilder.cs | 48 + .../Drawers/DrawerContainerTagHelper.cs | 35 + .../Drawers/Renders/DrawerContainerRender.cs | 37 + .../Inputs/Helpers/InputExpressionLoader.cs | 1 - .../Modals/Builders/DialogContainerBuilder.cs | 48 + .../Modals/DialogContainerTagHelper.cs | 35 + .../Modals/Renders/DialogContainerRender.cs | 37 + .../Resizable/Builders/ResizeHandleBuilder.cs | 53 + .../Segments/Builders/SegmentedBuilder.cs | 197 ++ .../Helpers/SegmentedExpressionLoader.cs | 19 + .../Segments/Helpers/SegmentedService.cs | 55 + .../Segments/Renders/SegmentedRender.cs | 44 + .../Components/Segments/SegmentedTagHelper.cs | 96 + .../Selects/Helpers/SelectExpressionLoader.cs | 1 - .../Contents/TableColumnContentService.cs | 3 +- .../Tables/Builders/TableBodyRowBuilder.cs | 3 - .../Tables/Builders/TableBuilder.cs | 25 +- .../Tables/Builders/TableColumnBuilder.cs | 140 +- .../Builders/TableColumnRadioBuilder.cs | 1 - .../Tables/Builders/TableHeadColumnBuilder.cs | 222 ++- .../Tables/Builders/TableRowBuilder.cs | 1 - .../Tables/Builders/TableSettingsBuilder.cs | 113 +- .../Tables/Configs/TableColumnShareConfig.cs | 89 +- .../Configs/TableHeadColumnShareConfig.cs | 113 +- .../Tables/Configs/TableShareConfig.cs | 74 +- .../Components/Tables/Helpers/ColumnInfo.cs | 28 +- .../Components/Tables/Helpers/CustomColumn.cs | 79 +- .../Tables/Helpers/HeadColumnInfo.cs | 27 +- .../Tables/Helpers/TableColumnService.cs | 18 +- .../Tables/Helpers/TableHeadColumnService.cs | 24 +- .../Components/Tables/Helpers/TableService.cs | 43 +- .../Components/Tables/Renders/TableRender.cs | 6 +- .../Tables/Renders/TableRowRender.cs | 1 - .../Components/Tables/TableColumnTagHelper.cs | 17 +- .../Tables/TableHeadColumnTagHelper.cs | 24 +- .../Components/Tables/TableHeadTagHelper.cs | 1 - .../Components/Tables/TableRowTagHelper.cs | 1 - .../Components/Tables/TableTagHelper.cs | 32 +- .../Builders/TreeTableBodyBuilder.cs | 1 - .../Builders/TreeTableBodyRowBuilder.cs | 1 - .../Builders/TreeTableColumnBuilder.cs | 3 +- .../Builders/TreeTableHeadBuilder.cs | 1 - .../Builders/TreeTableHeadColumnBuilder.cs | 48 +- .../Builders/TreeTableHeadRowBuilder.cs | 1 - src/Util.Ui.NgZorro/Enums/CursorType.cs | 17 + src/Util.Ui.NgZorro/Enums/ResizeDirection.cs | 47 + .../NgZorroExpressionLoaderBase.cs | 3 +- src/Util.Ui.NgZorro/NgZorroOptions.cs | 20 +- src/Util.Ui/01-Util.Ui.csproj | 2 +- src/Util.Ui/Configs/UiConst.cs | 44 + .../Expressions/ExpressionLoaderBase.cs | 1 + .../Expressions/ModelExpressionInfo.cs | 4 + .../Util.Aop.AspectCore.Tests.csproj | 8 +- ...ameworkCore.MySql.Tests.Integration.csproj | 8 +- ...rkCore.PostgreSql.Tests.Integration.csproj | 8 +- ...orkCore.SqlServer.Tests.Integration.csproj | 8 +- .../Util.Application.Tests.csproj | 8 +- ...tion.WebApi.MySql.Tests.Integration.csproj | 10 +- ...WebApi.PostgreSql.Tests.Integration.csproj | 10 +- ....WebApi.SqlServer.Tests.Integration.csproj | 10 +- ...pplication.WebApi.Tests.Integration.csproj | 10 +- .../Util.AspNetCore.Tests.Integration.csproj | 10 +- ...ching.EasyCaching.Tests.Integration.csproj | 8 +- .../Util.Core.Tests.Integration.csproj | 8 +- test/Util.Core.Tests/Util.Core.Tests.csproj | 8 +- ...Data.Dapper.MySql.Tests.Integration.csproj | 10 +- ...ata.Dapper.Oracle.Tests.Integration.csproj | 10 +- ...Dapper.PostgreSql.Tests.Integration.csproj | 10 +- ....Dapper.SqlServer.Tests.Integration.csproj | 10 +- ...ameworkCore.MySql.Tests.Integration.csproj | 8 +- ...meworkCore.Oracle.Tests.Integration.csproj | 8 +- ...rkCore.PostgreSql.Tests.Integration.csproj | 8 +- ...orkCore.SqlServer.Tests.Integration.csproj | 10 +- ...meworkCore.Sqlite.Tests.Integration.csproj | 8 +- .../Util.Data.Sql.Tests.csproj | 8 +- test/Util.Data.Tests/Util.Data.Tests.csproj | 8 +- .../Util.Domain.Tests.csproj | 8 +- ...il.Events.MediatR.Tests.Integration.csproj | 8 +- .../Util.Events.Tests.Integration.csproj | 8 +- ...ileStorage.Aliyun.Tests.Integration.csproj | 10 +- ...FileStorage.Minio.Tests.Integration.csproj | 10 +- .../Util.FileStorage.Tests.Integration.csproj | 10 +- ....Generators.Razor.Tests.Integration.csproj | 8 +- .../Util.Generators.Tests.csproj | 8 +- .../Util.IdGenerator.Tests.csproj | 8 +- ...til.Images.Avatar.Tests.Integration.csproj | 8 +- ...Images.ImageSharp.Tests.Integration.csproj | 8 +- ...Util.Localization.Tests.Integration.csproj | 10 +- .../Util.Localization.Tests.csproj | 8 +- ...log.Exceptionless.Tests.Integration.csproj | 8 +- ...l.Logging.Serilog.Tests.Integration.csproj | 8 +- .../Util.Logging.Tests.csproj | 8 +- ...icroservices.Dapr.Tests.Integration.csproj | 10 +- .../Util.Microservices.Dapr.Tests.csproj | 8 +- ...croservices.Polly.Tests.Integration.csproj | 8 +- ...Util.ObjectMapping.AutoMapper.Tests.csproj | 8 +- ...heduling.Hangfire.Tests.Integration.csproj | 12 +- ...Scheduling.Quartz.Tests.Integration.csproj | 10 +- .../Util.Security.Tests.csproj | 8 +- ...plates.Handlebars.Tests.Integration.csproj | 8 +- ...l.Templates.Razor.Tests.Integration.csproj | 8 +- .../Util.Tenants.Tests.Integration.csproj | 10 +- .../Util.Tenants.Tests.csproj | 8 +- .../Util.Ui.NgAlain.Tests.csproj | 8 +- .../RangePickerTagHelperTest.Expression.cs | 24 + .../DatePickers/RangePickerTagHelperTest.cs | 40 + .../Drawers/DrawerContainerTagHelperTest.cs | 105 ++ .../Modals/DialogContainerTagHelperTest.cs | 105 ++ .../Modals/ModalFooterTagHelperTest.cs | 90 +- .../Modals/ModalTagHelperTest.cs | 1268 ++++++------- .../Util.Ui.NgZorro.Tests/Samples/Customer.cs | 11 + .../SegmentedTagHelperTest.Expression.cs | 29 + .../Segments/SegmentedTagHelperTest.Extend.cs | 151 ++ .../Segments/SegmentedTagHelperTest.cs | 184 ++ .../Tables/TableColumnTagHelperTest.Extend.cs | 12 +- .../Tables/TableColumnTagHelperTest.cs | 8 +- .../TableHeadColumnTagHelperTest.Extend.cs | 28 + .../Tables/TableHeadColumnTagHelperTest.cs | 8 +- .../Tables/TableTagHelperTest.Checkbox.cs | 560 +++++- .../Tables/TableTagHelperTest.CustomColumn.cs | 353 ++-- .../TableTagHelperTest.EnableFixedColumn.cs | 297 +++ .../Tables/TableTagHelperTest.LineNumber.cs | 510 ++++- .../Tables/TableTagHelperTest.Radio.cs | 508 ++++- .../Tables/TableTagHelperTest.Resizable.cs | 642 +++++++ .../TableTagHelperTest.TableSettings.cs | 326 ++++ .../TreeTableColumnTagHelperTest.cs | 12 +- .../TreeTableHeadColumnTagHelperTest.cs | 8 +- .../TreeTableTagHelperTest.TableSettings.cs | 1667 +++++++++++++++++ .../TreeTables/TreeTableTagHelperTest.cs | 10 +- .../Util.Ui.NgZorro.Tests.csproj | 8 +- .../Razor/GenerateHtmlFilterTest.cs | 6 +- test/Util.Ui.Tests/Util.Ui.Tests.csproj | 8 +- .../Util.Validation.Tests.csproj | 8 +- 167 files changed, 8307 insertions(+), 1397 deletions(-) create mode 100644 src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerExpressionLoader.cs create mode 100644 src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerService.cs create mode 100644 src/Util.Ui.NgZorro/Components/Drawers/Builders/DrawerContainerBuilder.cs create mode 100644 src/Util.Ui.NgZorro/Components/Drawers/DrawerContainerTagHelper.cs create mode 100644 src/Util.Ui.NgZorro/Components/Drawers/Renders/DrawerContainerRender.cs create mode 100644 src/Util.Ui.NgZorro/Components/Modals/Builders/DialogContainerBuilder.cs create mode 100644 src/Util.Ui.NgZorro/Components/Modals/DialogContainerTagHelper.cs create mode 100644 src/Util.Ui.NgZorro/Components/Modals/Renders/DialogContainerRender.cs create mode 100644 src/Util.Ui.NgZorro/Components/Resizable/Builders/ResizeHandleBuilder.cs create mode 100644 src/Util.Ui.NgZorro/Components/Segments/Builders/SegmentedBuilder.cs create mode 100644 src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedExpressionLoader.cs create mode 100644 src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedService.cs create mode 100644 src/Util.Ui.NgZorro/Components/Segments/Renders/SegmentedRender.cs create mode 100644 src/Util.Ui.NgZorro/Components/Segments/SegmentedTagHelper.cs create mode 100644 src/Util.Ui.NgZorro/Enums/CursorType.cs create mode 100644 src/Util.Ui.NgZorro/Enums/ResizeDirection.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Drawers/DrawerContainerTagHelperTest.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Modals/DialogContainerTagHelperTest.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Expression.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Extend.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.EnableFixedColumn.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Resizable.cs create mode 100644 test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.TableSettings.cs create mode 100644 test/Util.Ui.NgZorro.Tests/TreeTables/TreeTableTagHelperTest.TableSettings.cs diff --git a/build/version.props b/build/version.props index 202a3baf8..161310135 100644 --- a/build/version.props +++ b/build/version.props @@ -2,7 +2,7 @@ 8 0 - 1 + 4 $(VersionMajor).$(VersionMinor).$(VersionPatch) diff --git a/src/Util.AspNetCore/08-Util.AspNetCore.csproj b/src/Util.AspNetCore/08-Util.AspNetCore.csproj index 19384da25..47a79087b 100644 --- a/src/Util.AspNetCore/08-Util.AspNetCore.csproj +++ b/src/Util.AspNetCore/08-Util.AspNetCore.csproj @@ -31,7 +31,7 @@ - + diff --git a/src/Util.Core/01-Util.Core.csproj b/src/Util.Core/01-Util.Core.csproj index 278cf799e..53355a58e 100644 --- a/src/Util.Core/01-Util.Core.csproj +++ b/src/Util.Core/01-Util.Core.csproj @@ -35,7 +35,7 @@ - + diff --git a/src/Util.Core/Item.cs b/src/Util.Core/Item.cs index ac5f217b1..46986e8f7 100644 --- a/src/Util.Core/Item.cs +++ b/src/Util.Core/Item.cs @@ -13,13 +13,15 @@ public class Item : IComparable { /// 组 /// 禁用 /// 选中 - public Item( string text, object value, int? sortId = null, string group = null, bool? disabled = null, bool? selected = null ) { + /// 图标 + public Item( string text, object value, int? sortId = null, string group = null, bool? disabled = null, bool? selected = null,string icon = null ) { Text = text; Value = value; SortId = sortId; Group = group; Disabled = disabled; Selected = selected; + Icon = icon; } /// @@ -58,6 +60,12 @@ public Item( string text, object value, int? sortId = null, string group = null, [JsonPropertyName( "selected" )] public bool? Selected { get; } + /// + /// 图标 + /// + [JsonPropertyName( "icon" )] + public string Icon { get; } + /// /// 比较 /// diff --git a/src/Util.Data.Core/01-Util.Data.Core.csproj b/src/Util.Data.Core/01-Util.Data.Core.csproj index 9def18053..2c9674203 100644 --- a/src/Util.Data.Core/01-Util.Data.Core.csproj +++ b/src/Util.Data.Core/01-Util.Data.Core.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.Dapper.Core/01-Util.Data.Dapper.Core.csproj b/src/Util.Data.Dapper.Core/01-Util.Data.Dapper.Core.csproj index e83073e3c..eccde77a2 100644 --- a/src/Util.Data.Dapper.Core/01-Util.Data.Dapper.Core.csproj +++ b/src/Util.Data.Dapper.Core/01-Util.Data.Dapper.Core.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.Dapper.PostgreSql/03-Util.Data.Dapper.PostgreSql.csproj b/src/Util.Data.Dapper.PostgreSql/03-Util.Data.Dapper.PostgreSql.csproj index 92bbb28b8..7dc7a195f 100644 --- a/src/Util.Data.Dapper.PostgreSql/03-Util.Data.Dapper.PostgreSql.csproj +++ b/src/Util.Data.Dapper.PostgreSql/03-Util.Data.Dapper.PostgreSql.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.Dapper.SqlServer/02-Util.Data.Dapper.SqlServer.csproj b/src/Util.Data.Dapper.SqlServer/02-Util.Data.Dapper.SqlServer.csproj index f7eba09f5..44d9aecf4 100644 --- a/src/Util.Data.Dapper.SqlServer/02-Util.Data.Dapper.SqlServer.csproj +++ b/src/Util.Data.Dapper.SqlServer/02-Util.Data.Dapper.SqlServer.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.Dapper.SqlServer/Metadata/SqlServerMetadataService.cs b/src/Util.Data.Dapper.SqlServer/Metadata/SqlServerMetadataService.cs index 0460c3f2e..4e5e84867 100644 --- a/src/Util.Data.Dapper.SqlServer/Metadata/SqlServerMetadataService.cs +++ b/src/Util.Data.Dapper.SqlServer/Metadata/SqlServerMetadataService.cs @@ -73,7 +73,7 @@ private void SetGetTablesSql() { .LeftJoin( "sys.Schemas s" ).On( "o.schema_id", "s.schema_id" ) .LeftJoin( "sys.Extended_Properties ep" ).On( "o.object_id", "ep.major_id" ).On( "ep.minor_id", 0 ) .Join( GetColumnsSql(), "c" ).On( "c.object_id", "o.object_id" ) - .In( "o.type", new[] { 'U', 'V' } ); + .In( "o.type", new[] { 'U' } ); } /// diff --git a/src/Util.Data.EntityFrameworkCore.MySql/04-Util.Data.EntityFrameworkCore.MySql.csproj b/src/Util.Data.EntityFrameworkCore.MySql/04-Util.Data.EntityFrameworkCore.MySql.csproj index 75b0b92f1..ab874413f 100644 --- a/src/Util.Data.EntityFrameworkCore.MySql/04-Util.Data.EntityFrameworkCore.MySql.csproj +++ b/src/Util.Data.EntityFrameworkCore.MySql/04-Util.Data.EntityFrameworkCore.MySql.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.EntityFrameworkCore.PostgreSql/03-Util.Data.EntityFrameworkCore.PostgreSql.csproj b/src/Util.Data.EntityFrameworkCore.PostgreSql/03-Util.Data.EntityFrameworkCore.PostgreSql.csproj index 97500e239..931c23a8b 100644 --- a/src/Util.Data.EntityFrameworkCore.PostgreSql/03-Util.Data.EntityFrameworkCore.PostgreSql.csproj +++ b/src/Util.Data.EntityFrameworkCore.PostgreSql/03-Util.Data.EntityFrameworkCore.PostgreSql.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.EntityFrameworkCore.SqlServer/02-Util.Data.EntityFrameworkCore.SqlServer.csproj b/src/Util.Data.EntityFrameworkCore.SqlServer/02-Util.Data.EntityFrameworkCore.SqlServer.csproj index b3babd45c..cfb44de56 100644 --- a/src/Util.Data.EntityFrameworkCore.SqlServer/02-Util.Data.EntityFrameworkCore.SqlServer.csproj +++ b/src/Util.Data.EntityFrameworkCore.SqlServer/02-Util.Data.EntityFrameworkCore.SqlServer.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.EntityFrameworkCore.Sqlite/05-Util.Data.EntityFrameworkCore.Sqlite.csproj b/src/Util.Data.EntityFrameworkCore.Sqlite/05-Util.Data.EntityFrameworkCore.Sqlite.csproj index 4fedce6d6..7bdbd57a8 100644 --- a/src/Util.Data.EntityFrameworkCore.Sqlite/05-Util.Data.EntityFrameworkCore.Sqlite.csproj +++ b/src/Util.Data.EntityFrameworkCore.Sqlite/05-Util.Data.EntityFrameworkCore.Sqlite.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Data.EntityFrameworkCore/01-Util.Data.EntityFrameworkCore.csproj b/src/Util.Data.EntityFrameworkCore/01-Util.Data.EntityFrameworkCore.csproj index e2929b15d..c237fbc25 100644 --- a/src/Util.Data.EntityFrameworkCore/01-Util.Data.EntityFrameworkCore.csproj +++ b/src/Util.Data.EntityFrameworkCore/01-Util.Data.EntityFrameworkCore.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/src/Util.FileStorage.Minio/03-Util.FileStorage.Minio.csproj b/src/Util.FileStorage.Minio/03-Util.FileStorage.Minio.csproj index 18c956652..2a652f1ce 100644 --- a/src/Util.FileStorage.Minio/03-Util.FileStorage.Minio.csproj +++ b/src/Util.FileStorage.Minio/03-Util.FileStorage.Minio.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Generators/Contexts/GeneratorContextBuilder.cs b/src/Util.Generators/Contexts/GeneratorContextBuilder.cs index 945bccc1e..56ab0d520 100644 --- a/src/Util.Generators/Contexts/GeneratorContextBuilder.cs +++ b/src/Util.Generators/Contexts/GeneratorContextBuilder.cs @@ -1,8 +1,9 @@ using Util.Data.Metadata; using Util.Generators.Configuration; using Util.Generators.Logs; +using Util.Helpers; -namespace Util.Generators.Contexts; +namespace Util.Generators.Contexts; /// /// 生成器上下文构建器 @@ -76,7 +77,9 @@ protected virtual string GetPhysicalPath( string path ) { /// /// 是否绝对路径 /// - protected virtual bool IsAbsolutePath( string path ) { + protected virtual bool IsAbsolutePath( string path ) { + if ( Common.IsWindows == false && path.StartsWith( "/" ) ) + return true; if ( path.Contains( @":\" ) ) return true; if ( path.Contains( ":/" ) ) diff --git a/src/Util.Http/07-Util.Http.csproj b/src/Util.Http/07-Util.Http.csproj index f7f0ed4f3..34b139bfa 100644 --- a/src/Util.Http/07-Util.Http.csproj +++ b/src/Util.Http/07-Util.Http.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Images.ImageSharp/01-Util.Images.ImageSharp.csproj b/src/Util.Images.ImageSharp/01-Util.Images.ImageSharp.csproj index 179927e5f..71158f128 100644 --- a/src/Util.Images.ImageSharp/01-Util.Images.ImageSharp.csproj +++ b/src/Util.Images.ImageSharp/01-Util.Images.ImageSharp.csproj @@ -31,8 +31,8 @@ - - + + diff --git a/src/Util.Localization/09-Util.Localization.csproj b/src/Util.Localization/09-Util.Localization.csproj index fd9d3ec67..a226d1731 100644 --- a/src/Util.Localization/09-Util.Localization.csproj +++ b/src/Util.Localization/09-Util.Localization.csproj @@ -28,7 +28,7 @@ - + diff --git a/src/Util.Logging.Serilog/02-Util.Logging.Serilog.csproj b/src/Util.Logging.Serilog/02-Util.Logging.Serilog.csproj index 644463ca9..94c3d9478 100644 --- a/src/Util.Logging.Serilog/02-Util.Logging.Serilog.csproj +++ b/src/Util.Logging.Serilog/02-Util.Logging.Serilog.csproj @@ -30,7 +30,7 @@ - + diff --git a/src/Util.Microservices.Dapr/03-Util.Microservices.Dapr.csproj b/src/Util.Microservices.Dapr/03-Util.Microservices.Dapr.csproj index 28f47623e..a1c5a23e1 100644 --- a/src/Util.Microservices.Dapr/03-Util.Microservices.Dapr.csproj +++ b/src/Util.Microservices.Dapr/03-Util.Microservices.Dapr.csproj @@ -26,8 +26,8 @@ - - + + diff --git a/src/Util.Microservices.HealthChecks/04-Util.Microservices.HealthChecks.csproj b/src/Util.Microservices.HealthChecks/04-Util.Microservices.HealthChecks.csproj index 2603d6fad..7ce32429d 100644 --- a/src/Util.Microservices.HealthChecks/04-Util.Microservices.HealthChecks.csproj +++ b/src/Util.Microservices.HealthChecks/04-Util.Microservices.HealthChecks.csproj @@ -29,7 +29,7 @@ - + diff --git a/src/Util.Microservices.Polly/02-Util.Microservices.Polly.csproj b/src/Util.Microservices.Polly/02-Util.Microservices.Polly.csproj index e93427983..78b48efde 100644 --- a/src/Util.Microservices.Polly/02-Util.Microservices.Polly.csproj +++ b/src/Util.Microservices.Polly/02-Util.Microservices.Polly.csproj @@ -26,7 +26,7 @@ - + diff --git a/src/Util.ObjectMapping.AutoMapper/02-Util.ObjectMapping.AutoMapper.csproj b/src/Util.ObjectMapping.AutoMapper/02-Util.ObjectMapping.AutoMapper.csproj index d889482e2..b862159bb 100644 --- a/src/Util.ObjectMapping.AutoMapper/02-Util.ObjectMapping.AutoMapper.csproj +++ b/src/Util.ObjectMapping.AutoMapper/02-Util.ObjectMapping.AutoMapper.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Scheduling.Hangfire/03-Util.Scheduling.Hangfire.csproj b/src/Util.Scheduling.Hangfire/03-Util.Scheduling.Hangfire.csproj index 6395f67c8..43b64637e 100644 --- a/src/Util.Scheduling.Hangfire/03-Util.Scheduling.Hangfire.csproj +++ b/src/Util.Scheduling.Hangfire/03-Util.Scheduling.Hangfire.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Scheduling.Quartz/02-Util.Scheduling.Quartz.csproj b/src/Util.Scheduling.Quartz/02-Util.Scheduling.Quartz.csproj index a10fd388f..9e41b62de 100644 --- a/src/Util.Scheduling.Quartz/02-Util.Scheduling.Quartz.csproj +++ b/src/Util.Scheduling.Quartz/02-Util.Scheduling.Quartz.csproj @@ -27,8 +27,8 @@ - - + + diff --git a/src/Util.Templates.Razor/02-Util.Templates.Razor.csproj b/src/Util.Templates.Razor/02-Util.Templates.Razor.csproj index 389b84385..d4876f22e 100644 --- a/src/Util.Templates.Razor/02-Util.Templates.Razor.csproj +++ b/src/Util.Templates.Razor/02-Util.Templates.Razor.csproj @@ -37,7 +37,7 @@ - - + + diff --git a/src/Util.Ui.Angular/Configs/AngularConst.cs b/src/Util.Ui.Angular/Configs/AngularConst.cs index 7b91f2114..06aa0a86b 100644 --- a/src/Util.Ui.Angular/Configs/AngularConst.cs +++ b/src/Util.Ui.Angular/Configs/AngularConst.cs @@ -313,6 +313,10 @@ public static class AngularConst { /// public const string BindAlign = "bind-align"; /// + /// 标题对齐 + /// + public const string BindTitleAlign = "bind-title-align"; + /// /// 序号 /// public const string BindOrder = "bind-order"; @@ -325,6 +329,14 @@ public static class AngularConst { /// public const string BindWidth = "bind-width"; /// + /// 最小宽度 + /// + public const string BindMinWidth = "bind-min-width"; + /// + /// 最大宽度 + /// + public const string BindMaxWidth = "bind-max-width"; + /// /// 高度 /// public const string BindHeight = "bind-height"; diff --git a/src/Util.Ui.NgZorro/03-Util.Ui.NgZorro.csproj b/src/Util.Ui.NgZorro/03-Util.Ui.NgZorro.csproj index 9f8399155..8cfae5546 100644 --- a/src/Util.Ui.NgZorro/03-Util.Ui.NgZorro.csproj +++ b/src/Util.Ui.NgZorro/03-Util.Ui.NgZorro.csproj @@ -27,7 +27,7 @@ - + diff --git a/src/Util.Ui.NgZorro/Components/Alerts/Builders/AlertBuilder.cs b/src/Util.Ui.NgZorro/Components/Alerts/Builders/AlertBuilder.cs index 2e27acf58..94a6754c5 100644 --- a/src/Util.Ui.NgZorro/Components/Alerts/Builders/AlertBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Alerts/Builders/AlertBuilder.cs @@ -1,6 +1,5 @@ using Util.Ui.Angular.Builders; using Util.Ui.Angular.Configs; -using Util.Ui.Configs; using Util.Ui.NgZorro.Enums; namespace Util.Ui.NgZorro.Components.Alerts.Builders; diff --git a/src/Util.Ui.NgZorro/Components/DatePickers/Builders/RangePickerBuilder.cs b/src/Util.Ui.NgZorro/Components/DatePickers/Builders/RangePickerBuilder.cs index 0deb0de2a..9aa44c5b3 100644 --- a/src/Util.Ui.NgZorro/Components/DatePickers/Builders/RangePickerBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/DatePickers/Builders/RangePickerBuilder.cs @@ -1,9 +1,11 @@ -using Util.Ui.Angular.Configs; -using Util.Ui.Configs; +using System; +using Util.Helpers; +using Util.Ui.Angular.Configs; using Util.Ui.NgZorro.Components.Base; using Util.Ui.NgZorro.Enums; +using Config = Util.Ui.Configs.Config; -namespace Util.Ui.NgZorro.Components.DatePickers.Builders; +namespace Util.Ui.NgZorro.Components.DatePickers.Builders; /// /// 日期范围选择标签生成器 @@ -13,6 +15,10 @@ public class RangePickerBuilder : FormControlBuilderBase { /// 配置 /// private readonly Config _config; + /// + /// 标识 + /// + private string _id; /// /// 初始化日期范围选择标签生成器 @@ -21,7 +27,7 @@ public class RangePickerBuilder : FormControlBuilderBase { public RangePickerBuilder( Config config ) : base( config, "nz-range-picker" ) { _config = config; } - + /// /// 配置允许清除 /// @@ -219,5 +225,60 @@ public override void Config() { .Format().InputReadonly().Locale().Mode() .Placeholder().RenderExtraFooter().Size().SuffixIcon().Borderless() .Ranges().Separator().ShowTime().Events(); + EnableExtend(); + } + + /// + /// 启用扩展 + /// + private void EnableExtend() { + if ( IsEnableExtend() == false ) + return; + Attribute( "x-range-picker-extend" ); + Attribute( $"#{ExtendId}", "xRangePickerExtend" ); + Attribute( "[(ngModel)]", $"{ExtendId}.rangeDates", true ); + var onCalendarChange = _config.GetValue( UiConst.OnCalendarChange ); + onCalendarChange = onCalendarChange.IsEmpty() ? "" : ";" + onCalendarChange; + Attribute( "(nzOnCalendarChange)", $"{ExtendId}.handleRangeDateChange($event){onCalendarChange}", true ); + BeginDate(); + EndDate(); + } + + /// + /// 扩展标识 + /// + private string ExtendId { + get { + if ( _id.IsEmpty() ) + _id = _config.GetValue( UiConst.Id ); + if ( _id.IsEmpty() ) + _id = Id.Create(); + return $"x_{_id}"; + } + } + + /// + /// 是否启用扩展 + /// + private bool IsEnableExtend() { + if ( _config.Contains( UiConst.BeginDate ) ) + return true; + if ( _config.Contains( UiConst.EndDate ) ) + return true; + return false; + } + + /// + /// 配置起始日期 + /// + private void BeginDate() { + AttributeIfNotEmpty( "[(beginDate)]", _config.GetValue( UiConst.BeginDate ) ); + } + + /// + /// 配置结束日期 + /// + private void EndDate() { + AttributeIfNotEmpty( "[(endDate)]", _config.GetValue( UiConst.EndDate ) ); } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerExpressionLoader.cs b/src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerExpressionLoader.cs new file mode 100644 index 000000000..557fdf336 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerExpressionLoader.cs @@ -0,0 +1,61 @@ +using Util.Ui.Angular.Configs; +using Util.Ui.Expressions; +using Util.Ui.NgZorro.Expressions; + +namespace Util.Ui.NgZorro.Components.DatePickers.Helpers; + +/// +/// 日期范围选择表达式加载器 +/// +public class RangePickerExpressionLoader : NgZorroExpressionLoaderBase { + /// + /// 加载模型信息 + /// + /// 配置 + /// 模型表达式信息 + protected override void Load( Config config, ModelExpressionInfo info ) { + LoadLabel( config, info ); + LoadName( config, info ); + LoadDate( config, info ); + LoadRequired( config, info ); + } + + /// + /// 加载标签 + /// + protected virtual void LoadLabel( Config config, ModelExpressionInfo info ) { + config.SetAttribute( UiConst.LabelText, info.DisplayName, false ); + } + + /// + /// 加载名称 + /// + protected virtual void LoadName( Config config, ModelExpressionInfo info ) { + config.SetAttribute( UiConst.Name, info.LastPropertyName, false ); + } + + /// + /// 加载日期 + /// + protected virtual void LoadDate( Config config, ModelExpressionInfo info ) { + config.SetAttribute( AngularConst.NgModel, info.SafePropertyName ); + if (info.ExpressionPropertyName == UiConst.ForBegin) { + config.SetAttribute( UiConst.BeginDate, info.SafePropertyName ); + return; + } + if ( info.ExpressionPropertyName == UiConst.ForEnd ) { + config.SetAttribute( UiConst.EndDate, info.SafePropertyName ); + return; + } + } + + /// + /// 加载必填项验证 + /// + protected virtual void LoadRequired( Config config, ModelExpressionInfo info ) { + if ( info.IsRequired == false ) + return; + config.SetAttribute( UiConst.Required, "true", false ); + config.SetAttribute( UiConst.RequiredMessage, info.RequiredMessage, false ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerService.cs b/src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerService.cs new file mode 100644 index 000000000..8739cf573 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/DatePickers/Helpers/RangePickerService.cs @@ -0,0 +1,35 @@ +namespace Util.Ui.NgZorro.Components.DatePickers.Helpers; + +/// +/// 日期范围选择服务 +/// +public class RangePickerService { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化日期范围选择服务 + /// + /// 配置 + public RangePickerService( Config config ) { + _config = config; + } + + /// + /// 初始化 + /// + public void Init() { + LoadExpression(); + } + + /// + /// 加载表达式 + /// + private void LoadExpression() { + var loader = new RangePickerExpressionLoader(); + loader.Load( _config, UiConst.ForBegin ); + loader.Load( _config, UiConst.ForEnd ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/DatePickers/RangePickerTagHelper.cs b/src/Util.Ui.NgZorro/Components/DatePickers/RangePickerTagHelper.cs index 3f6d06425..15ab35973 100644 --- a/src/Util.Ui.NgZorro/Components/DatePickers/RangePickerTagHelper.cs +++ b/src/Util.Ui.NgZorro/Components/DatePickers/RangePickerTagHelper.cs @@ -1,6 +1,7 @@ -using Microsoft.AspNetCore.Razor.TagHelpers; -using Util.Ui.Configs; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; using Util.Ui.NgZorro.Components.Base; +using Util.Ui.NgZorro.Components.DatePickers.Helpers; using Util.Ui.NgZorro.Components.DatePickers.Renders; using Util.Ui.NgZorro.Components.Inputs.Helpers; using Util.Ui.NgZorro.Enums; @@ -180,6 +181,22 @@ public class RangePickerTagHelper : FormControlTagHelperBase { /// public bool SpaceItem { get; set; } /// + /// [(beginDate)],扩展属性, 双向绑定起始日期 + /// + public string BeginDate { get; set; } + /// + /// [(endDate)],扩展属性, 双向绑定结束日期 + /// + public string EndDate { get; set; } + /// + /// 起始日期属性表达式 + /// + public ModelExpression ForBegin { get; set; } + /// + /// 结束日期属性表达式 + /// + public ModelExpression ForEnd { get; set; } + /// /// (nzOnOpenChange),弹出关闭日历事件 /// public string OnOpenChange { get; set; } @@ -195,6 +212,8 @@ public class RangePickerTagHelper : FormControlTagHelperBase { /// protected override void ProcessBefore( TagHelperContext context, TagHelperOutput output ) { _config = new Config( context, output ); + var rangePickerService = new RangePickerService( _config ); + rangePickerService.Init(); var service = new InputService( _config ); service.Init(); } diff --git a/src/Util.Ui.NgZorro/Components/Drawers/Builders/DrawerContainerBuilder.cs b/src/Util.Ui.NgZorro/Components/Drawers/Builders/DrawerContainerBuilder.cs new file mode 100644 index 000000000..21a1a808a --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Drawers/Builders/DrawerContainerBuilder.cs @@ -0,0 +1,48 @@ +using Util.Ui.Angular.Builders; +using Util.Ui.Angular.Configs; + +namespace Util.Ui.NgZorro.Components.Drawers.Builders; + +/// +/// 抽屉内容容器标签生成器 +/// +public class DrawerContainerBuilder : AngularTagBuilder { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化抽屉内容容器标签生成器 + /// + /// 配置 + public DrawerContainerBuilder( Config config ) : base( config, "x-drawer-container" ) { + _config = config; + } + + /// + /// 配置最小宽度 + /// + public DrawerContainerBuilder MinWidth() { + AttributeIfNotEmpty( "minWidth", _config.GetValue( UiConst.MinWidth ) ); + AttributeIfNotEmpty( "[minWidth]", _config.GetValue( AngularConst.BindMinWidth ) ); + return this; + } + + /// + /// 配置最大宽度 + /// + public DrawerContainerBuilder MaxWidth() { + AttributeIfNotEmpty( "maxWidth", _config.GetValue( UiConst.MaxWidth ) ); + AttributeIfNotEmpty( "[maxWidth]", _config.GetValue( AngularConst.BindMaxWidth ) ); + return this; + } + + /// + /// 配置 + /// + public override void Config() { + base.Config(); + MinWidth().MaxWidth(); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Drawers/DrawerContainerTagHelper.cs b/src/Util.Ui.NgZorro/Components/Drawers/DrawerContainerTagHelper.cs new file mode 100644 index 000000000..d57faad96 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Drawers/DrawerContainerTagHelper.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Razor.TagHelpers; +using Util.Ui.Angular.TagHelpers; +using Util.Ui.NgZorro.Components.Drawers.Renders; +using Util.Ui.Renders; + +namespace Util.Ui.NgZorro.Components.Drawers; + +/// +/// 抽屉内容容器,用于调整宽度,生成的标签为<x-drawer-container></x-drawer-container> +/// +[HtmlTargetElement( "util-drawer-container" )] +public class DrawerContainerTagHelper : AngularTagHelperBase { + /// + /// minWidth,抽屉的最小宽度, 默认值: 380 + /// + public double MinWidth { get; set; } + /// + /// [minWidth],抽屉的最小宽度, 默认值: 380 + /// + public string BindMinWidth { get; set; } + /// + /// maxWidth,抽屉的最大宽度 + /// + public double MaxWidth { get; set; } + /// + /// [maxWidth],抽屉的最大宽度 + /// + public string BindMaxWidth { get; set; } + + /// + protected override IRender GetRender( TagHelperContext context, TagHelperOutput output, TagHelperContent content ) { + var config = new Config( context, output, content ); + return new DrawerContainerRender( config ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Drawers/Renders/DrawerContainerRender.cs b/src/Util.Ui.NgZorro/Components/Drawers/Renders/DrawerContainerRender.cs new file mode 100644 index 000000000..9fd8abf29 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Drawers/Renders/DrawerContainerRender.cs @@ -0,0 +1,37 @@ +using Util.Ui.Builders; +using Util.Ui.NgZorro.Components.Drawers.Builders; +using Util.Ui.Renders; + +namespace Util.Ui.NgZorro.Components.Drawers.Renders; + +/// +/// 抽屉内容容器渲染器 +/// +public class DrawerContainerRender : RenderBase { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化抽屉内容容器渲染器 + /// + /// 配置 + public DrawerContainerRender( Config config ) { + _config = config; + } + + /// + /// 获取标签生成器 + /// + protected override TagBuilder GetTagBuilder() { + var builder = new DrawerContainerBuilder( _config ); + builder.Config(); + return builder; + } + + /// + public override IHtmlContent Clone() { + return new DrawerContainerRender( _config.Copy() ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Inputs/Helpers/InputExpressionLoader.cs b/src/Util.Ui.NgZorro/Components/Inputs/Helpers/InputExpressionLoader.cs index 2ff211a33..0b4bec914 100644 --- a/src/Util.Ui.NgZorro/Components/Inputs/Helpers/InputExpressionLoader.cs +++ b/src/Util.Ui.NgZorro/Components/Inputs/Helpers/InputExpressionLoader.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Configs; -using Util.Ui.Configs; using Util.Ui.Expressions; using Util.Ui.NgZorro.Enums; using Util.Ui.NgZorro.Expressions; diff --git a/src/Util.Ui.NgZorro/Components/Modals/Builders/DialogContainerBuilder.cs b/src/Util.Ui.NgZorro/Components/Modals/Builders/DialogContainerBuilder.cs new file mode 100644 index 000000000..712e4422f --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Modals/Builders/DialogContainerBuilder.cs @@ -0,0 +1,48 @@ +using Util.Ui.Angular.Builders; +using Util.Ui.Angular.Configs; + +namespace Util.Ui.NgZorro.Components.Modals.Builders; + +/// +/// 对话框内容容器标签生成器 +/// +public class DialogContainerBuilder : AngularTagBuilder { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化对话框内容容器标签生成器 + /// + /// 配置 + public DialogContainerBuilder( Config config ) : base( config, "x-dialog-container" ) { + _config = config; + } + + /// + /// 配置最小宽度 + /// + public DialogContainerBuilder MinWidth() { + AttributeIfNotEmpty( "minWidth", _config.GetValue( UiConst.MinWidth ) ); + AttributeIfNotEmpty( "[minWidth]", _config.GetValue( AngularConst.BindMinWidth ) ); + return this; + } + + /// + /// 配置最大宽度 + /// + public DialogContainerBuilder MaxWidth() { + AttributeIfNotEmpty( "maxWidth", _config.GetValue( UiConst.MaxWidth ) ); + AttributeIfNotEmpty( "[maxWidth]", _config.GetValue( AngularConst.BindMaxWidth ) ); + return this; + } + + /// + /// 配置 + /// + public override void Config() { + base.Config(); + MinWidth().MaxWidth(); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Modals/DialogContainerTagHelper.cs b/src/Util.Ui.NgZorro/Components/Modals/DialogContainerTagHelper.cs new file mode 100644 index 000000000..0963c4b5d --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Modals/DialogContainerTagHelper.cs @@ -0,0 +1,35 @@ +using Microsoft.AspNetCore.Razor.TagHelpers; +using Util.Ui.Angular.TagHelpers; +using Util.Ui.NgZorro.Components.Modals.Renders; +using Util.Ui.Renders; + +namespace Util.Ui.NgZorro.Components.Modals; + +/// +/// 对话框内容容器,用于调整宽度,生成的标签为<x-dialog-container></x-dialog-container> +/// +[HtmlTargetElement( "util-dialog-container" )] +public class DialogContainerTagHelper : AngularTagHelperBase { + /// + /// minWidth,抽屉的最小宽度, 默认值: 600 + /// + public double MinWidth { get; set; } + /// + /// [minWidth],抽屉的最小宽度, 默认值: 600 + /// + public string BindMinWidth { get; set; } + /// + /// maxWidth,抽屉的最大宽度 + /// + public double MaxWidth { get; set; } + /// + /// [maxWidth],抽屉的最大宽度 + /// + public string BindMaxWidth { get; set; } + + /// + protected override IRender GetRender( TagHelperContext context, TagHelperOutput output, TagHelperContent content ) { + var config = new Config( context, output, content ); + return new DialogContainerRender( config ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Modals/Renders/DialogContainerRender.cs b/src/Util.Ui.NgZorro/Components/Modals/Renders/DialogContainerRender.cs new file mode 100644 index 000000000..20d006554 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Modals/Renders/DialogContainerRender.cs @@ -0,0 +1,37 @@ +using Util.Ui.Builders; +using Util.Ui.NgZorro.Components.Modals.Builders; +using Util.Ui.Renders; + +namespace Util.Ui.NgZorro.Components.Modals.Renders; + +/// +/// 对话框内容容器渲染器 +/// +public class DialogContainerRender : RenderBase { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化对话框内容容器渲染器 + /// + /// 配置 + public DialogContainerRender( Config config ) { + _config = config; + } + + /// + /// 获取标签生成器 + /// + protected override TagBuilder GetTagBuilder() { + var builder = new DialogContainerBuilder( _config ); + builder.Config(); + return builder; + } + + /// + public override IHtmlContent Clone() { + return new DialogContainerRender( _config.Copy() ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Resizable/Builders/ResizeHandleBuilder.cs b/src/Util.Ui.NgZorro/Components/Resizable/Builders/ResizeHandleBuilder.cs new file mode 100644 index 000000000..636044405 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Resizable/Builders/ResizeHandleBuilder.cs @@ -0,0 +1,53 @@ +using Util.Ui.Angular.Builders; +using Util.Ui.NgZorro.Enums; + +namespace Util.Ui.NgZorro.Components.Resizable.Builders; + +/// +/// 调整尺寸手柄标签生成器 +/// +public class ResizeHandleBuilder : AngularTagBuilder { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化调整尺寸手柄标签生成器 + /// + public ResizeHandleBuilder( Config config ) : base( config, "nz-resize-handle" ) { + _config = config; + } + + /// + /// 配置调整方向 + /// + public ResizeHandleBuilder Direction( ResizeDirection direction ) { + AttributeIfNotEmpty( "nzDirection", direction.Description() ); + return this; + } + + /// + /// 配置调整方向 + /// + public ResizeHandleBuilder BindDirection( string direction ) { + AttributeIfNotEmpty( "[nzDirection]", direction ); + return this; + } + + /// + /// 配置光标类型 + /// + public ResizeHandleBuilder CursorType( CursorType cursor ) { + AttributeIfNotEmpty( "nzCursorType", cursor.Description() ); + return this; + } + + /// + /// 配置光标类型 + /// + public ResizeHandleBuilder BindCursorType( string cursor ) { + AttributeIfNotEmpty( "[nzCursorType]", cursor ); + return this; + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Segments/Builders/SegmentedBuilder.cs b/src/Util.Ui.NgZorro/Components/Segments/Builders/SegmentedBuilder.cs new file mode 100644 index 000000000..85cb9fdf4 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Segments/Builders/SegmentedBuilder.cs @@ -0,0 +1,197 @@ +using Util.Ui.Angular.Configs; +using Util.Ui.NgZorro.Components.Base; +using Util.Ui.NgZorro.Enums; + +namespace Util.Ui.NgZorro.Components.Segments.Builders; + +/// +/// 分段控制器标签生成器 +/// +public class SegmentedBuilder : FormControlBuilderBase { + /// + /// 配置 + /// + private readonly Config _config; + /// + /// 标识 + /// + private string _id; + + /// + /// 初始化分段控制器标签生成器 + /// + /// 配置 + public SegmentedBuilder( Config config ) : base( config, "nz-segmented" ) { + _config = config; + } + + /// + /// 扩展标识 + /// + protected string ExtendId => $"x_{GetId()}"; + + /// + /// 获取标识 + /// + private string GetId() { + if ( _id.IsEmpty() == false ) + return _id; + _id = _config.GetValue( UiConst.Id ); + if ( _id.IsEmpty() ) + _id = Util.Helpers.Id.Create(); + return _id; + } + + /// + /// 配置将宽度调整为父元素宽度 + /// + public SegmentedBuilder Block() { + AttributeIfNotEmpty( "[nzBlock]", _config.GetBoolValue( UiConst.Block ) ); + AttributeIfNotEmpty( "[nzBlock]", _config.GetValue( AngularConst.BindBlock ) ); + return this; + } + + /// + /// 配置禁用 + /// + public SegmentedBuilder Disabled() { + AttributeIfNotEmpty( "[nzDisabled]", _config.GetBoolValue( UiConst.Disabled ) ); + AttributeIfNotEmpty( "[nzDisabled]", _config.GetValue( AngularConst.BindDisabled ) ); + return this; + } + + /// + /// 配置选择框大小 + /// + public SegmentedBuilder Size() { + AttributeIfNotEmpty( "nzSize", _config.GetValue( UiConst.Size )?.Description() ); + AttributeIfNotEmpty( "[nzSize]", _config.GetValue( AngularConst.BindSize ) ); + return this; + } + + /// + /// 配置选项列表 + /// + public SegmentedBuilder Options() { + AttributeIfNotEmpty( "[nzOptions]", _config.GetValue( UiConst.Options ) ); + return this; + } + + /// + /// 配置自动加载 + /// + private SegmentedBuilder AutoLoad() { + AttributeIfNotEmpty( "[autoLoad]", _config.GetBoolValue( UiConst.AutoLoad ) ); + return this; + } + + /// + /// 配置查询参数 + /// + private SegmentedBuilder QueryParam() { + AttributeIfNotEmpty( "[(queryParam)]", _config.GetValue( UiConst.QueryParam ) ); + return this; + } + + /// + /// 配置Api地址 + /// + private SegmentedBuilder Url() { + AttributeIfNotEmpty( "url", _config.GetValue( UiConst.Url ) ); + AttributeIfNotEmpty( "[url]", _config.GetValue( AngularConst.BindUrl ) ); + return this; + } + + /// + /// 配置数据源 + /// + private SegmentedBuilder Data() { + AttributeIfNotEmpty( "[data]", _config.GetValue( UiConst.Data ) ); + return this; + } + + /// + /// 配置值绑定 + /// + private SegmentedBuilder Value() { + AttributeIfNotEmpty( "[(value)]", _config.GetValue( UiConst.Value ) ); + return this; + } + + /// + /// 配置事件 + /// + public SegmentedBuilder Events() { + AttributeIfNotEmpty( "(valueChange)", _config.GetValue( UiConst.OnValueChange ) ); + AttributeIfNotEmpty( "(onLoad)", _config.GetValue( UiConst.OnLoad ) ); + return this; + } + + /// + /// 配置 + /// + public override void Config() { + base.Config(); + ConfigForm().Name() + .Block().Disabled().Size() + .Options().AutoLoad().QueryParam() + .Url().Data().Value() + .Events(); + EnableExtend(); + } + + /// + /// 启用扩展 + /// + public SegmentedBuilder EnableExtend() { + if ( IsEnableExtend() == false ) + return this; + Attribute( $"#{ExtendId}", "xSegmentedExtend" ); + Attribute( "x-segmented-extend" ); + Attribute( "[nzOptions]", $"{ExtendId}.options" ); + Attribute( "[(ngModel)]", $"{ExtendId}.index", true ); + Attribute( "(nzValueChange)", $"{ExtendId}.handleValueChange($event)" ); + return this; + } + + /// + /// 是否启用基础扩展 + /// + public bool IsEnableExtend() { + if ( GetEnableExtend() == false ) { + return false; + } + return GetEnableExtend() == true || + GetUrl().IsEmpty() == false || + GetBindUrl().IsEmpty() == false || + GetData().IsEmpty() == false; + } + + /// + /// 获取启用扩展属性 + /// + private bool? GetEnableExtend() { + return _config.GetValue( UiConst.EnableExtend ); + } + + /// + /// 获取地址 + /// + private string GetUrl() { + return _config.GetValue( UiConst.Url ); + } + + /// + /// 获取地址 + /// + private string GetBindUrl() { + return _config.GetValue( AngularConst.BindUrl ); + } + + /// + /// 获取数据源 + /// + private string GetData() { + return _config.GetValue( UiConst.Data ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedExpressionLoader.cs b/src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedExpressionLoader.cs new file mode 100644 index 000000000..d77815755 --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedExpressionLoader.cs @@ -0,0 +1,19 @@ +using Util.Ui.Expressions; +using Util.Ui.NgZorro.Components.Selects.Helpers; + +namespace Util.Ui.NgZorro.Components.Segments.Helpers; + +/// +/// 分段控制器表达式加载器 +/// +public class SegmentedExpressionLoader : SelectExpressionLoader { + /// + /// 加载模型信息 + /// + /// 配置 + /// 模型表达式信息 + protected override void Load( Config config, ModelExpressionInfo info ) { + base.Load( config, info ); + config.SetAttribute( UiConst.Value, info.SafePropertyName, false ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedService.cs b/src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedService.cs new file mode 100644 index 000000000..726216cbd --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Segments/Helpers/SegmentedService.cs @@ -0,0 +1,55 @@ +using Util.Ui.NgZorro.Components.Forms.Helpers; + +namespace Util.Ui.NgZorro.Components.Segments.Helpers; + +/// +/// 分段控制器服务 +/// +public class SegmentedService { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化分段控制器服务 + /// + /// 配置 + public SegmentedService( Config config ) { + _config = config; + } + + /// + /// 初始化 + /// + public void Init() { + LoadExpression(); + InitFormShareService(); + InitFormItemShareService(); + } + + /// + /// 加载表达式 + /// + private void LoadExpression() { + var loader = new SegmentedExpressionLoader(); + loader.Load( _config ); + } + + /// + /// 初始化表单共享服务 + /// + private void InitFormShareService() { + var service = new FormShareService( _config ); + service.Init(); + } + + /// + /// 初始化表单项共享服务 + /// + private void InitFormItemShareService() { + var service = new FormItemShareService( _config ); + service.Init(); + service.InitId(); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Segments/Renders/SegmentedRender.cs b/src/Util.Ui.NgZorro/Components/Segments/Renders/SegmentedRender.cs new file mode 100644 index 000000000..074fbf01c --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Segments/Renders/SegmentedRender.cs @@ -0,0 +1,44 @@ +using Util.Ui.Builders; +using Util.Ui.NgZorro.Components.Base; +using Util.Ui.NgZorro.Components.Segments.Builders; + +namespace Util.Ui.NgZorro.Components.Segments.Renders; + +/// +/// 分段控制器渲染器 +/// +public class SegmentedRender : FormControlRenderBase { + /// + /// 配置 + /// + private readonly Config _config; + + /// + /// 初始化分段控制器渲染器 + /// + /// 配置 + public SegmentedRender( Config config ) : base( config ) { + _config = config; + } + + /// + /// 初始化 + /// + protected override void Init() { + SetControlId(); + } + + /// + /// 添加表单控件 + /// + protected override void AppendControl( TagBuilder formControlBuilder ) { + var builder = new SegmentedBuilder( _config ); + builder.Config(); + formControlBuilder.AppendContent( builder ); + } + + /// + public override IHtmlContent Clone() { + return new SegmentedRender( _config.Copy() ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Segments/SegmentedTagHelper.cs b/src/Util.Ui.NgZorro/Components/Segments/SegmentedTagHelper.cs new file mode 100644 index 000000000..297ca108c --- /dev/null +++ b/src/Util.Ui.NgZorro/Components/Segments/SegmentedTagHelper.cs @@ -0,0 +1,96 @@ +using Microsoft.AspNetCore.Razor.TagHelpers; +using Util.Ui.NgZorro.Components.Base; +using Util.Ui.NgZorro.Components.Segments.Helpers; +using Util.Ui.NgZorro.Components.Segments.Renders; +using Util.Ui.NgZorro.Enums; +using Util.Ui.Renders; + +namespace Util.Ui.NgZorro.Components.Segments; + +/// +/// 分段控制器,生成的标签为<nz-segmented></nz-segmented> +/// +[HtmlTargetElement( "util-segmented" )] +public class SegmentedTagHelper : FormControlTagHelperBase { + /// + /// 配置 + /// + private Config _config; + /// + /// 扩展属性,是否启用扩展指令,当设置Url或Data属性时自动启用,默认为 false + /// + public bool EnableExtend { get; set; } + /// + /// 扩展属性 [autoLoad],初始化时是否自动加载数据,默认为true,设置成false则手工加载 + /// + public bool AutoLoad { get; set; } + /// + /// 扩展属性 [(queryParam)],查询参数 + /// + public string QueryParam { get; set; } + /// + /// 扩展属性 url,Api地址 + /// + public string Url { get; set; } + /// + /// 扩展属性 [url],Api地址 + /// + public string BindUrl { get; set; } + /// + /// 扩展属性 [data],数据源 + /// + public string Data { get; set; } + /// + /// 扩展属性 [(value)],双向绑定值 + /// + public string Value { get; set; } + /// + /// [nzDisabled],是否禁用 + /// + public bool Disabled { get; set; } + /// + /// [nzDisabled],是否禁用 + /// + public string BindDisabled { get; set; } + /// + /// nzSize,组件尺寸,可选值: 'large'|'small'|'default' + /// + public InputSize Size { get; set; } + /// + /// [nzSize],组件尺寸,可选值: 'large'|'small'|'default' + /// + public string BindSize { get; set; } + /// + /// [nzOptions],选项列表,类型: string[] | number[] | Array<{ label: string; value: string | number; icon: string; disabled?: boolean; useTemplate?: boolean }> + /// + public string Options { get; set; } + /// + /// [nzBlock],是否将宽度调整为父元素宽度, 默认值: false + /// + public bool Block { get; set; } + /// + /// [nzBlock],是否将宽度调整为父元素宽度, 默认值: false + /// + public string BindBlock { get; set; } + /// + /// (valueChange),扩展事件, 选中值变更事件 + /// + public string OnValueChange { get; set; } + /// + /// 扩展事件 (onLoad),数据加载完成事件,类型: EventEmitter<any>,参数为服务端返回结果 + /// + public string OnLoad { get; set; } + + /// + protected override void ProcessBefore( TagHelperContext context, TagHelperOutput output ) { + _config = new Config( context, output ); + var service = new SegmentedService( _config ); + service.Init(); + } + + /// + protected override IRender GetRender( TagHelperContext context, TagHelperOutput output, TagHelperContent content ) { + _config.Content = content; + return new SegmentedRender( _config ); + } +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Selects/Helpers/SelectExpressionLoader.cs b/src/Util.Ui.NgZorro/Components/Selects/Helpers/SelectExpressionLoader.cs index 54a658638..a46134fba 100644 --- a/src/Util.Ui.NgZorro/Components/Selects/Helpers/SelectExpressionLoader.cs +++ b/src/Util.Ui.NgZorro/Components/Selects/Helpers/SelectExpressionLoader.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Configs; -using Util.Ui.Configs; using Util.Ui.Expressions; using Util.Ui.NgZorro.Configs; using Util.Ui.NgZorro.Expressions; diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/Contents/TableColumnContentService.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/Contents/TableColumnContentService.cs index 45a86c57e..744dd0998 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/Contents/TableColumnContentService.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/Contents/TableColumnContentService.cs @@ -1,5 +1,4 @@ -using Util.Ui.Configs; -using Util.Ui.NgZorro.Components.Tables.Configs; +using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.NgZorro.Enums; namespace Util.Ui.NgZorro.Components.Tables.Builders.Contents; diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBodyRowBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBodyRowBuilder.cs index 98846dd27..07064ae32 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBodyRowBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBodyRowBuilder.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Extensions; -using Util.Ui.Configs; using Util.Ui.Extensions; using Util.Ui.NgZorro.Components.Tables.Configs; @@ -62,8 +61,6 @@ public override void Config() { /// 配置表格主体行基础扩展属性 /// protected void ConfigTableExtend() { - if ( TableShareConfig.IsAutoCreateBodyRow == false ) - return; if ( TableShareConfig.IsEnableExtend == false ) return; ConfigDefault(); diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBuilder.cs index 619e67fd6..82c496b4b 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableBuilder.cs @@ -6,7 +6,7 @@ using Util.Ui.NgZorro.Components.Tables.Helpers; using Util.Ui.NgZorro.Enums; -namespace Util.Ui.NgZorro.Components.Tables.Builders; +namespace Util.Ui.NgZorro.Components.Tables.Builders; /// /// 表格标签生成器 @@ -195,6 +195,8 @@ public TableBuilder PaginationType() { /// 配置是否显示边框 /// public TableBuilder Bordered() { + if ( _shareConfig.IsEnableTableSettings ) + return this; AttributeIfNotEmpty( "[nzBordered]", _config.GetBoolValue( UiConst.Bordered ) ); AttributeIfNotEmpty( "[nzBordered]", _config.GetValue( AngularConst.BindBordered ) ); return this; @@ -218,9 +220,11 @@ public TableBuilder WidthConfig() { } /// - /// 配置表格大小 + /// 配置表格尺寸 /// public TableBuilder Size() { + if ( _shareConfig.IsEnableTableSettings ) + return this; AttributeIfNotEmpty( "nzSize", _config.GetValue( UiConst.Size )?.Description() ); AttributeIfNotEmpty( "[nzSize]", _config.GetValue( AngularConst.BindSize ) ); return this; @@ -262,6 +266,10 @@ public TableBuilder LoadingDelay() { /// 配置滚动 /// public TableBuilder Scroll() { + if ( _shareConfig.IsEnableTableSettings ) { + Scroll( $"{_shareConfig.TableSettingsId}.scroll" ); + return this; + } Scroll( _config.GetValue( UiConst.Scroll ) ); var scroll = new ScrollInfo( _config.GetValue( UiConst.ScrollWidth ), _config.GetValue( UiConst.ScrollHeight ) ); if ( scroll.IsNull == false ) @@ -518,7 +526,7 @@ public TableBuilder CustomColumn( string value ) { /// 配置启用自定义列 /// public TableBuilder EnableCustomColumn() { - if (_shareConfig.IsEnableCustomColumn == false) + if ( _shareConfig.IsEnableCustomColumn == false ) return this; CustomColumn( $"{_shareConfig.TableSettingsId}.columns" ); return this; @@ -597,6 +605,7 @@ public override void Config() { if ( _shareConfig.IsEnableExtend ) ConfigExtend(); ConfigEdit(); + ConfigTableSettingsExtend(); ConfigContent(); } @@ -644,6 +653,16 @@ private void ConfigEdit() { Attribute( $"#{EditId}", "xEditTable" ); } + /// + /// 配置表格设置扩展 + /// + private void ConfigTableSettingsExtend() { + if ( _shareConfig.IsEnableTableSettings == false ) + return; + Attribute( "[nzSize]", $"{_shareConfig.TableSettingsId}.size" ); + Attribute( "[nzBordered]", $"{_shareConfig.TableSettingsId}.bordered" ); + } + /// /// 配置内容 /// diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnBuilder.cs index fe4d8937c..20a553c3c 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnBuilder.cs @@ -3,9 +3,8 @@ using Util.Ui.Builders; using Util.Ui.NgZorro.Components.Tables.Builders.Contents; using Util.Ui.NgZorro.Components.Tables.Configs; -using Util.Ui.NgZorro.Enums; -namespace Util.Ui.NgZorro.Components.Tables.Builders; +namespace Util.Ui.NgZorro.Components.Tables.Builders; /// /// 表格单元格标签生成器 @@ -101,8 +100,24 @@ public TableColumnBuilder Expand() { /// 配置左侧距离 /// public TableColumnBuilder Left() { - Left( _config.GetBoolValue( UiConst.Left ) ); - Left( _config.GetValue( AngularConst.BindLeft ) ); + if ( _shareConfig.IsEnableFixedColumn ) { + BindLeft( $"{_shareConfig.TableSettingsId}.isLeft('{_shareConfig.Title}')" ); + return this; + } + Left( _shareConfig.IsLeft ); + BindLeft( _config.GetValue( AngularConst.BindLeft ) ); + return this; + } + + /// + /// 配置左侧距离 + /// + public TableColumnBuilder Left( string value, string title ) { + if ( _shareConfig.IsEnableFixedColumn ) { + BindLeft( $"{_shareConfig.TableSettingsId}.isLeft('{title}')" ); + return this; + } + Left( value ); return this; } @@ -110,6 +125,14 @@ public TableColumnBuilder Left() { /// 配置左侧距离 /// public TableColumnBuilder Left( string value ) { + AttributeIfNotEmpty( "nzLeft", value ); + return this; + } + + /// + /// 配置左侧距离 + /// + public TableColumnBuilder BindLeft( string value ) { AttributeIfNotEmpty( "[nzLeft]", value ); return this; } @@ -118,8 +141,40 @@ public TableColumnBuilder Left( string value ) { /// 配置右侧距离 /// public TableColumnBuilder Right() { - AttributeIfNotEmpty( "[nzRight]", _config.GetBoolValue( UiConst.Right ) ); - AttributeIfNotEmpty( "[nzRight]", _config.GetValue( AngularConst.BindRight ) ); + if ( _shareConfig.IsEnableFixedColumn ) { + BindRight( $"{_shareConfig.TableSettingsId}.isRight('{_shareConfig.Title}')" ); + return this; + } + Right( _shareConfig.IsRight ); + BindRight( _config.GetValue( AngularConst.BindRight ) ); + return this; + } + + /// + /// 配置右侧距离 + /// + public TableColumnBuilder Right( string value, string title ) { + if ( _shareConfig.IsEnableFixedColumn ) { + BindRight( $"{_shareConfig.TableSettingsId}.isRight('{title}')" ); + return this; + } + Right( value ); + return this; + } + + /// + /// 配置右侧距离 + /// + public TableColumnBuilder Right( string value ) { + AttributeIfNotEmpty( "nzRight", value ); + return this; + } + + /// + /// 配置右侧距离 + /// + public TableColumnBuilder BindRight( string value ) { + AttributeIfNotEmpty( "[nzRight]", value ); return this; } @@ -127,8 +182,29 @@ public TableColumnBuilder Right() { /// 配置对齐方式 /// public TableColumnBuilder Align() { - AttributeIfNotEmpty( "nzAlign", _config.GetValue( UiConst.Align )?.Description() ); - AttributeIfNotEmpty( "[nzAlign]", _config.GetValue( AngularConst.BindAlign ) ); + if ( _shareConfig.IsEnableTableSettings ) { + BindAlign( $"{_shareConfig.TableSettingsId}.getAlign('{_shareConfig.Title}')" ); + return this; + } + AttributeIfNotEmpty( "nzAlign", _shareConfig.Align ); + BindAlign( _config.GetValue( AngularConst.BindAlign ) ); + return this; + } + + /// + /// 配置对齐方式 + /// + public TableColumnBuilder Align( string title ) { + if ( _shareConfig.IsEnableTableSettings ) + BindAlign( $"{_shareConfig.TableSettingsId}.getAlign('{title}')" ); + return this; + } + + /// + /// 配置对齐方式 + /// + public TableColumnBuilder BindAlign( string value ) { + AttributeIfNotEmpty( "[nzAlign]", value ); return this; } @@ -145,8 +221,20 @@ public TableColumnBuilder BreakWord() { /// 配置自动省略 /// public TableColumnBuilder Ellipsis() { - AttributeIfNotEmpty( "[nzEllipsis]", _config.GetBoolValue( UiConst.Ellipsis ) ); - AttributeIfNotEmpty( "[nzEllipsis]", _config.GetValue( AngularConst.BindEllipsis ) ); + if ( _shareConfig.IsEnableTableSettings ) { + BindEllipsis( $"{_shareConfig.TableSettingsId}.getEllipsis('{_shareConfig.Title}')" ); + return this; + } + BindEllipsis( _config.GetBoolValue( UiConst.Ellipsis ) ); + BindEllipsis( _config.GetValue( AngularConst.BindEllipsis ) ); + return this; + } + + /// + /// 配置自动省略 + /// + public TableColumnBuilder BindEllipsis( string value ) { + AttributeIfNotEmpty( "[nzEllipsis]", value ); return this; } @@ -213,7 +301,7 @@ public override void Config() { /// 配置内容 /// protected virtual void ConfigContent() { - var service = new TableColumnContentService( this,new TableSelectCreateService() ); + var service = new TableColumnContentService( this, new TableSelectCreateService() ); service.Config(); } @@ -221,12 +309,17 @@ protected virtual void ConfigContent() { /// 添加复选框 /// public virtual void AddCheckbox() { + var title = "util.checkbox"; Attribute( "[nzShowCheckbox]", "true" ); Attribute( "(click)", "$event.stopPropagation()" ); Attribute( "(nzCheckedChange)", $"{_shareConfig.TableExtendId}.toggle(row)" ); Attribute( "[nzChecked]", $"{_shareConfig.TableExtendId}.isChecked(row)" ); - if ( _shareConfig.IsCheckboxLeft ) - Left( "true" ); + if ( _shareConfig.IsEnableCustomColumn ) + Attribute( "nzCellControl", title ); + Left( _shareConfig.IsCheckboxLeft, title ); + if ( _shareConfig.IsEnableFixedColumn ) + Right( _shareConfig.IsCheckboxLeft, title ); + Align( title ); } /// @@ -235,8 +328,7 @@ public virtual void AddCheckbox() { /// 复选框生成器 public virtual void AddCheckbox( TagBuilder checkBoxBuilder ) { AppendContent( checkBoxBuilder ); - if ( _shareConfig.IsCheckboxLeft ) - Left( "true" ); + Left( _shareConfig.IsCheckboxLeft ); } /// @@ -251,17 +343,27 @@ public virtual void AddRadio() { /// 添加单选框 /// public virtual void AddRadio( TagBuilder radioBuilder ) { + var title = "util.radio"; AppendContent( radioBuilder ); - if ( _shareConfig.IsRadioLeft ) - Left( "true" ); + if ( _shareConfig.IsEnableCustomColumn ) + Attribute( "nzCellControl", title ); + Left( _shareConfig.IsRadioLeft, title ); + if ( _shareConfig.IsEnableFixedColumn ) + Right( _shareConfig.IsRadioLeft, title ); + Align( title ); } /// /// 添加序号 /// public void AddLineNumber() { + var title = "util.lineNumber"; AppendContent( "{{row.lineNumber}}" ); - if ( _shareConfig.IsLineNumberLeft ) - Left( "true" ); + if ( _shareConfig.IsEnableCustomColumn ) + Attribute( "nzCellControl", title ); + Left( _shareConfig.IsLineNumberLeft, title ); + if ( _shareConfig.IsEnableFixedColumn ) + Right( _shareConfig.IsLineNumberLeft, title ); + Align( title ); } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnRadioBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnRadioBuilder.cs index 8b2d460dc..877be2c37 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnRadioBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableColumnRadioBuilder.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Builders; -using Util.Ui.Configs; namespace Util.Ui.NgZorro.Components.Tables.Builders; diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableHeadColumnBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableHeadColumnBuilder.cs index 3f95248a1..65db42e32 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableHeadColumnBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableHeadColumnBuilder.cs @@ -1,6 +1,7 @@ using Util.Ui.Angular.Builders; using Util.Ui.Angular.Configs; using Util.Ui.Angular.Extensions; +using Util.Ui.NgZorro.Components.Resizable.Builders; using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.NgZorro.Components.Tables.Helpers; using Util.Ui.NgZorro.Configs; @@ -195,7 +196,13 @@ public TableHeadColumnBuilder FilterMultiple() { public TableHeadColumnBuilder Width() { if ( _shareConfig.IsEnableCustomColumn ) return this; - this.Width( _config.GetValue( UiConst.Width ) ); + var width = _config.GetValue( UiConst.Width ); + if ( _shareConfig.IsEnableResizable ) { + var title = _config.GetValue( UiConst.Title ); + Attribute( "[nzWidth]", GetWidthByTableSettings( title, width ) ); + return this; + } + this.Width( width ); BindWidth( _config.GetValue( AngularConst.BindWidth ) ); return this; } @@ -212,8 +219,13 @@ public TableHeadColumnBuilder BindWidth( string value ) { /// 配置左侧距离 /// public TableHeadColumnBuilder Left() { - Left( _config.GetBoolValue( UiConst.Left ) ); - Left( _config.GetValue( AngularConst.BindLeft ) ); + if ( _shareConfig.IsEnableFixedColumn ) { + var title = _config.GetValue( UiConst.Title ); + BindLeft( $"{_shareConfig.TableSettingsId}.isLeft('{title}')" ); + return this; + } + Left( _config.GetValue( UiConst.Left ) ); + BindLeft( _config.GetValue( AngularConst.BindLeft ) ); return this; } @@ -221,6 +233,14 @@ public TableHeadColumnBuilder Left() { /// 配置左侧距离 /// public TableHeadColumnBuilder Left( string value ) { + AttributeIfNotEmpty( "nzLeft", value ); + return this; + } + + /// + /// 配置左侧距离 + /// + public TableHeadColumnBuilder BindLeft( string value ) { AttributeIfNotEmpty( "[nzLeft]", value ); return this; } @@ -228,9 +248,12 @@ public TableHeadColumnBuilder Left( string value ) { /// /// 配置左侧距离 /// - public TableHeadColumnBuilder Left( bool value ) { - if ( value ) - Left( "true" ); + public TableHeadColumnBuilder Left( string value, string title ) { + if ( _shareConfig.IsEnableFixedColumn ) { + BindLeft( $"{_shareConfig.TableSettingsId}.isLeft('{title}')" ); + return this; + } + Left( value ); return this; } @@ -238,8 +261,13 @@ public TableHeadColumnBuilder Left( bool value ) { /// 配置右侧距离 /// public TableHeadColumnBuilder Right() { - Right( _config.GetBoolValue( UiConst.Right ) ); - Right( _config.GetValue( AngularConst.BindRight ) ); + if ( _shareConfig.IsEnableFixedColumn ) { + var title = _config.GetValue( UiConst.Title ); + BindRight( $"{_shareConfig.TableSettingsId}.isRight('{title}')" ); + return this; + } + Right( _config.GetValue( UiConst.Right ) ); + BindRight( _config.GetValue( AngularConst.BindRight ) ); return this; } @@ -247,6 +275,14 @@ public TableHeadColumnBuilder Right() { /// 配置右侧距离 /// public TableHeadColumnBuilder Right( string value ) { + AttributeIfNotEmpty( "nzRight", value ); + return this; + } + + /// + /// 配置右侧距离 + /// + public TableHeadColumnBuilder BindRight( string value ) { AttributeIfNotEmpty( "[nzRight]", value ); return this; } @@ -254,9 +290,12 @@ public TableHeadColumnBuilder Right( string value ) { /// /// 配置右侧距离 /// - public TableHeadColumnBuilder Right( bool value ) { - if ( value ) - Right( "true" ); + public TableHeadColumnBuilder Right( string value, string title ) { + if ( _shareConfig.IsEnableFixedColumn ) { + BindRight( $"{_shareConfig.TableSettingsId}.isRight('{title}')" ); + return this; + } + Right( value ); return this; } @@ -264,8 +303,49 @@ public TableHeadColumnBuilder Right( bool value ) { /// 配置对齐方式 /// public TableHeadColumnBuilder Align() { + if ( _shareConfig.IsEnableTableSettings ) + return this; AttributeIfNotEmpty( "nzAlign", _config.GetValue( UiConst.Align )?.Description() ); - AttributeIfNotEmpty( "[nzAlign]", _config.GetValue( AngularConst.BindAlign ) ); + BindAlign( _config.GetValue( AngularConst.BindAlign ) ); + return this; + } + + /// + /// 配置对齐方式 + /// + public TableHeadColumnBuilder BindAlign( string value ) { + AttributeIfNotEmpty( "[nzAlign]", value ); + return this; + } + + /// + /// 配置标题对齐方式 + /// + public TableHeadColumnBuilder TitleAlign() { + if ( _shareConfig.IsEnableTableSettings ) { + var title = _config.GetValue( UiConst.Title ); + BindTitleAlign( $"{_shareConfig.TableSettingsId}.getTitleAlign('{title}')" ); + return this; + } + AttributeIfNotEmpty( "titleAlign", _shareConfig.TitleAlign ); + BindTitleAlign( _config.GetValue( AngularConst.BindTitleAlign ) ); + return this; + } + + /// + /// 配置标题对齐方式 + /// + public TableHeadColumnBuilder TitleAlign( string title ) { + if ( _shareConfig.IsEnableTableSettings ) + BindTitleAlign( $"{_shareConfig.TableSettingsId}.getTitleAlign('{title}')" ); + return this; + } + + /// + /// 配置标题对齐方式 + /// + public TableHeadColumnBuilder BindTitleAlign( string value ) { + AttributeIfNotEmpty( "[titleAlign]", value ); return this; } @@ -282,6 +362,8 @@ public TableHeadColumnBuilder BreakWord() { /// 配置自动省略 /// public TableHeadColumnBuilder Ellipsis() { + if ( _shareConfig.IsEnableTableSettings ) + return this; AttributeIfNotEmpty( "[nzEllipsis]", _config.GetBoolValue( UiConst.Ellipsis ) ); AttributeIfNotEmpty( "[nzEllipsis]", _config.GetValue( AngularConst.BindEllipsis ) ); return this; @@ -388,6 +470,36 @@ public TableHeadColumnBuilder EnableCustomColumn( string cellControl ) { return this; } + /// + /// 配置启用拖动调整列宽 + /// + public TableHeadColumnBuilder EnableResizable() { + if ( _shareConfig.IsEnableResizable == false ) + return this; + return Resizable( _config.GetValue( UiConst.Title ) ); + } + + /// + /// 配置拖动调整列宽 + /// + public virtual TableHeadColumnBuilder Resizable( string title ) { + Attribute( "nz-resizable" ); + Attribute( "nzPreview" ); + Attribute( "nzBounds", "window" ); + Attribute( "(nzResizeEnd)", $"{_shareConfig.TableSettingsId}.handleResize($event,'{title}')" ); + AppendHandleBuilder(); + return this; + } + + /// + /// 添加拖动手柄生成器 + /// + protected void AppendHandleBuilder() { + var handleBuilder = new ResizeHandleBuilder( _config ); + handleBuilder.Direction( ResizeDirection.Right ); + AppendContent( handleBuilder ); + } + /// /// 配置事件 /// @@ -417,8 +529,8 @@ public override void Config() { .ShowFilter().FilterFn().Filters().FilterMultiple() .Width().Left().Right().Align().BreakWord().Ellipsis() .Colspan().Rowspan().ColumnKey() - .TitleOperation().Title() - .CellControl().EnableCustomColumn() + .TitleOperation().Title().TitleAlign() + .CellControl().EnableCustomColumn().EnableResizable() .Events() .CheckBox().Radio().LineNumber(); } @@ -448,14 +560,19 @@ protected virtual void AddCheckBox( string title = null ) { /// 配置复选框 /// public void ConfigCheckBox() { + var title = "util.checkbox"; Attribute( "[nzShowCheckbox]", "true" ); Attribute( "(nzCheckedChange)", $"{_shareConfig.TableExtendId}.masterToggle()" ); Attribute( "[nzChecked]", $"{_shareConfig.TableExtendId}.isMasterChecked()" ); Attribute( "[nzDisabled]", $"!{_shareConfig.TableExtendId}.dataSource.length" ); Attribute( "[nzIndeterminate]", $"{_shareConfig.TableExtendId}.isMasterIndeterminate()" ); - BindWidth( $"{_shareConfig.TableExtendId}.config.table.checkboxWidth" ); - if ( _shareConfig.IsCheckboxLeft ) - Left( true ); + EnableCustomColumn( title ); + if ( _shareConfig.IsEnableCustomColumn == false ) + BindWidth( $"{_shareConfig.TableExtendId}.config.table.checkboxWidth" ); + Left( _shareConfig.IsCheckboxLeft, title ); + if ( _shareConfig.IsEnableFixedColumn ) + Right( _shareConfig.IsCheckboxLeft, title ); + TitleAlign( title ); } /// @@ -476,10 +593,15 @@ public TableHeadColumnBuilder Radio() { /// 添加单选框列头 /// protected virtual void AddRadio( string title = null ) { + var radioTitle = "util.radio"; var radioBuilder = new TableHeadColumnBuilder( _config, _shareConfig ); - if ( _shareConfig.IsRadioLeft ) - radioBuilder.Left( true ); - radioBuilder.BindWidth( $"{_shareConfig.TableExtendId}.config.table.radioWidth" ); + radioBuilder.EnableCustomColumn( radioTitle ); + radioBuilder.TitleAlign( radioTitle ); + radioBuilder.Left( _shareConfig.IsRadioLeft, radioTitle ); + if ( _shareConfig.IsEnableFixedColumn ) + radioBuilder.Right( _shareConfig.IsRadioLeft, radioTitle ); + if ( _shareConfig.IsEnableCustomColumn == false ) + radioBuilder.BindWidth( $"{_shareConfig.TableExtendId}.config.table.radioWidth" ); PreBuilder = radioBuilder; } @@ -499,8 +621,11 @@ public TableHeadColumnBuilder LineNumber() { /// 添加序号 /// protected virtual void AddLineNumber() { + var title = "util.lineNumber"; var lineNumberBuilder = new TableHeadColumnBuilder( _config, _shareConfig ); lineNumberBuilder.ConfigLineNumber(); + lineNumberBuilder.EnableCustomColumn( title ); + lineNumberBuilder.TitleAlign( title ); if ( PreBuilder == null ) { PreBuilder = lineNumberBuilder; return; @@ -514,9 +639,11 @@ protected virtual void AddLineNumber() { public void ConfigLineNumber() { var options = NgZorroOptionsService.GetOptions(); Title( options.EnableI18n ? "util.lineNumber" : "序号" ); - BindWidth( $"{_shareConfig.TableExtendId}.config.table.lineNumberWidth" ); - if ( _shareConfig.IsLineNumberLeft ) - Left( true ); + if ( _shareConfig.IsEnableCustomColumn == false ) + BindWidth( $"{_shareConfig.TableExtendId}.config.table.lineNumberWidth" ); + Left( _shareConfig.IsLineNumberLeft, "util.lineNumber" ); + if ( _shareConfig.IsEnableFixedColumn ) + Right( _shareConfig.IsLineNumberLeft, "util.lineNumber" ); } /// @@ -535,12 +662,35 @@ public virtual void AddColumn( ColumnInfo column ) { if ( column.IsSort ) Sort( column.Column ); Title( column.Title ); - if ( _shareConfig.IsEnableCustomColumn == false ) - this.Width( column.Width ); - Left( column.IsLeft ); - Right( column.IsRight ); + SetColumnWidth( column ); + Left( column.IsLeft, column.Title ); + Right( column.IsRight, column.Title ); SetAcl( column.Acl, column.AclElseTemplateId ); EnableCustomColumn( column.GetCellControl() ); + EnableResizable( column ); + TitleAlign( column.Title ); + } + + /// + /// 设置列宽 + /// + protected void SetColumnWidth( ColumnInfo column ) { + if ( _shareConfig.IsEnableCustomColumn ) + return; + if ( IsEnableResizable( column ) ) { + Attribute( "[nzWidth]", GetWidthByTableSettings( column.Title, column.Width ) ); + return; + } + this.Width( column.Width ); + } + + /// + /// 从表格设置获取宽度 + /// + protected string GetWidthByTableSettings( string title, string width ) { + if ( width.IsEmpty() ) + return $"{_shareConfig.TableSettingsId}.getWidth('{title}')"; + return $"{_shareConfig.TableSettingsId}.getWidth('{title}','{width}')"; } /// @@ -552,4 +702,22 @@ public TableHeadColumnBuilder SetAcl( string acl, string aclElseTemplateId ) { this.Acl( _config ); return this; } + + /// + /// 配置启用拖动调整列宽 + /// + protected void EnableResizable( ColumnInfo column ) { + if ( IsEnableResizable( column ) == false ) + return; + Resizable( column.Title ); + } + + /// + /// 是否启用拖动调整列宽 + /// + protected bool IsEnableResizable( ColumnInfo column ) { + if ( column.IsEnableResizable ) + return true; + return _shareConfig.IsEnableResizable; + } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableRowBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableRowBuilder.cs index 69cbc668b..91334d911 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableRowBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableRowBuilder.cs @@ -1,6 +1,5 @@ using Util.Ui.Angular.Builders; using Util.Ui.Angular.Extensions; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Configs; namespace Util.Ui.NgZorro.Components.Tables.Builders; diff --git a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableSettingsBuilder.cs b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableSettingsBuilder.cs index 5a0324274..783c7cd4b 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Builders/TableSettingsBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Builders/TableSettingsBuilder.cs @@ -1,5 +1,8 @@ using Util.Ui.Angular.Builders; using Util.Ui.NgZorro.Components.Tables.Configs; +using Util.Ui.NgZorro.Components.Tables.Helpers; +using Util.Ui.NgZorro.Configs; +using Util.Ui.NgZorro.Enums; namespace Util.Ui.NgZorro.Components.Tables.Builders; @@ -20,7 +23,7 @@ public class TableSettingsBuilder : AngularTagBuilder { /// 初始化表格设置标签生成器 /// /// 配置 - public TableSettingsBuilder( Config config ) : base( config, "x-table-settings" ) { + public TableSettingsBuilder( Config config ) : base( config, NgZorroOptionsService.GetOptions().TableSettingsTag ) { _config = config; _tableShareConfig = GetTableShareConfig(); } @@ -32,6 +35,41 @@ public TableShareConfig GetTableShareConfig() { return _tableShareConfig ??= _config.GetValueFromItems() ?? new TableShareConfig(); } + /// + /// 设置表格尺寸 + /// + public TableSettingsBuilder Size() { + AttributeIfNotEmpty( "initSize", _config.GetValue( UiConst.Size )?.Description() ); + return this; + } + + /// + /// 设置表格边框 + /// + public TableSettingsBuilder Bordered() { + AttributeIfNotEmpty( "[initBordered]", _config.GetBoolValue( UiConst.Bordered ) ); + return this; + } + + /// + /// 设置滚动宽高 + /// + public TableSettingsBuilder Scroll() { + AttributeIfNotEmpty( "scrollHeight", _tableShareConfig.ScrollHeight ); + AttributeIfNotEmpty( "scrollWidth", _tableShareConfig.ScrollWidth ); + AttributeIfNotEmpty( "[initScroll]", _config.GetValue( UiConst.Scroll ) ); + return this; + } + + /// + /// 配置是否启用固定列 + /// + public TableSettingsBuilder EnableFixedColumn() { + if( _tableShareConfig.IsEnableFixedColumn ) + Attribute( "[enableFixedColumn]","true" ); + return this; + } + /// /// 配置初始设置的列集合 /// @@ -46,16 +84,83 @@ public TableSettingsBuilder InitColumns() { /// 获取自定义列Json /// private string GetColumnsJson() { - var customColumns = _tableShareConfig.Columns.Select( column => column.ToCustomColumn() ); - return Util.Helpers.Json.ToJson( customColumns, new JsonOptions { ToSingleQuotes = true, IgnoreNullValues = true } ); + var result = new List(); + AddRadioColumn( result ); + AddCheckboxColumn( result ); + AddLineNumberColumn( result ); + result.AddRange( _tableShareConfig.Columns.Select( column => column.ToCustomColumn() ) ); + var json = Util.Helpers.Json.ToJson( result, new JsonOptions { ToSingleQuotes = true, IgnoreNullValues = true } ); + return json.Replace($"'{GetCheckboxWidth()}'", GetCheckboxWidth() ) + .Replace( $"'{GetRadioWidth()}'", GetRadioWidth() ) + .Replace( $"'{GetLineNumberWidth()}'", GetLineNumberWidth() ); + } + + /// + /// 获取表格复选框宽度 + /// + private string GetCheckboxWidth() { + return $"{_tableShareConfig.TableExtendId}.config.table.checkboxWidth"; + } + + /// + /// 获取表格单选框宽度 + /// + private string GetRadioWidth() { + return $"{_tableShareConfig.TableExtendId}.config.table.radioWidth"; + } + + /// + /// 获取表格序号宽度 + /// + private string GetLineNumberWidth() { + return $"{_tableShareConfig.TableExtendId}.config.table.lineNumberWidth"; + } + + /// + /// 添加单选列信息 + /// + private void AddRadioColumn( List result ) { + if ( _tableShareConfig.IsTreeTable ) + return; + if ( _tableShareConfig.IsShowRadio == false ) + return; + var options = NgZorroOptionsService.GetOptions(); + result.Add( new CustomColumn( "util.radio", GetRadioWidth(), _tableShareConfig.GetRadioLeft(), align: options.TableRadioAlign.Description() ) ); + } + + /// + /// 添加复选列信息 + /// + private void AddCheckboxColumn( List result ) { + if ( _tableShareConfig.IsTreeTable ) + return; + if ( _tableShareConfig.IsShowCheckbox == false ) + return; + var options = NgZorroOptionsService.GetOptions(); + result.Add( new CustomColumn( "util.checkbox", GetCheckboxWidth(), _tableShareConfig.GetCheckboxLeft(), align: options.TableCheckboxAlign.Description() ) ); + } + + /// + /// 添加序号信息 + /// + private void AddLineNumberColumn( List result ) { + if ( _tableShareConfig.IsTreeTable ) + return; + if ( _tableShareConfig.IsShowLineNumber == false ) + return; + var options = NgZorroOptionsService.GetOptions(); + result.Add( new CustomColumn( "util.lineNumber", GetLineNumberWidth(), _tableShareConfig.GetLineNumberLeft(), align: options.TableLineNumberAlign.Description() ) ); } /// /// 配置 /// public override void Config() { + if ( _tableShareConfig.Key.IsEmpty() ) + throw new ArgumentNullException( "表格存储标识属性 Key 必须设置!" ); Attribute( $"#{_tableShareConfig.TableSettingsId}" ); - Attribute( "customColumnKey", _tableShareConfig.CustomColumnKey ); + Attribute( "key", _tableShareConfig.Key ); + Size().Bordered().Scroll().EnableFixedColumn(); InitColumns(); } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Tables/Configs/TableColumnShareConfig.cs b/src/Util.Ui.NgZorro/Components/Tables/Configs/TableColumnShareConfig.cs index 7d947d25b..bfae8726c 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Configs/TableColumnShareConfig.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Configs/TableColumnShareConfig.cs @@ -28,6 +28,11 @@ public TableColumnShareConfig( TableShareConfig tableShareConfig ) { Column = Id.Create(); } + /// + /// 表格设置组件标识 + /// + public string TableSettingsId => _tableShareConfig.TableSettingsId; + /// /// 是否树形表格 /// @@ -43,11 +48,21 @@ public TableColumnShareConfig( TableShareConfig tableShareConfig ) { /// public bool IsEnableEdit => _tableShareConfig.IsEnableEdit; + /// + /// 是否启用表格设置 + /// + public bool IsEnableTableSettings => _tableShareConfig.IsEnableTableSettings; + /// /// 是否启用自定义列 /// public bool IsEnableCustomColumn => _tableShareConfig.IsEnableCustomColumn; + /// + /// 表格设置是否启用固定列 + /// + public bool IsEnableFixedColumn => _tableShareConfig.IsEnableFixedColumn; + /// /// 表格扩展标识 /// @@ -63,6 +78,16 @@ public TableColumnShareConfig( TableShareConfig tableShareConfig ) { /// public string RowId => _tableShareConfig.RowId; + /// + /// 标题 + /// + public string Title { + get { + var column = _tableShareConfig.GetColumn( Index ); + return column.Title; + } + } + /// /// 列名 /// @@ -83,6 +108,36 @@ public string CellControl { } } + /// + /// 对齐方式 + /// + public string Align { + get { + var column = _tableShareConfig.GetColumn( Index ); + return column.Align; + } + } + + /// + /// 固定左侧 + /// + public string IsLeft { + get { + var column = _tableShareConfig.GetColumn( Index ); + return column.IsLeft; + } + } + + /// + /// 固定右侧 + /// + public string IsRight { + get { + var column = _tableShareConfig.GetColumn( Index ); + return column.IsRight; + } + } + /// /// 编辑控件模板标识 /// @@ -114,32 +169,24 @@ public string CellControl { public bool IsShowLineNumber => _tableShareConfig.IsShowLineNumber; /// - /// 是否固定复选框到左侧 + /// 固定复选框到左侧 /// - public bool IsCheckboxLeft => _tableShareConfig.IsCheckboxLeft; + public string IsCheckboxLeft => _tableShareConfig.IsCheckboxLeft; /// - /// 是否固定单选框到左侧 + /// 固定单选框到左侧 /// - public bool IsRadioLeft => _tableShareConfig.IsRadioLeft; + public string IsRadioLeft => _tableShareConfig.IsRadioLeft; /// - /// 是否固定序号到左侧 + /// 固定序号到左侧 /// - public bool IsLineNumberLeft => _tableShareConfig.IsLineNumberLeft; + public string IsLineNumberLeft => _tableShareConfig.IsLineNumberLeft; /// /// 是否第一列 /// - public bool IsFirst { get; set; } - - /// - /// 设置第一列 - /// - public void SetIsFirst() { - if ( _tableShareConfig.Columns.Count == 0 ) - IsFirst = true; - } + public bool IsFirst => Index == 0; /// /// 设置编辑控件模板标识 @@ -164,10 +211,22 @@ public void AddColumn( ColumnInfo column ) { column.Title = headColumn.Title; if ( headColumn.CellControl.IsEmpty() == false ) column.CellControl = headColumn.CellControl; + if ( headColumn.Align.IsEmpty() == false ) + column.Align = headColumn.Align; + if ( headColumn.TitleAlign.IsEmpty() == false ) + column.TitleAlign = headColumn.TitleAlign; if ( headColumn.Width.IsEmpty() == false ) column.Width = headColumn.Width; + if ( headColumn.Ellipsis != null ) + column.Ellipsis = headColumn.Ellipsis; + if ( headColumn.IsLeft != null ) + column.IsLeft = headColumn.IsLeft; + if ( headColumn.IsRight != null ) + column.IsRight = headColumn.IsRight; } _tableShareConfig.Columns.Add( column ); + if ( column.IsEnableResizable ) + _tableShareConfig.IsEnableResizable = true; } /// diff --git a/src/Util.Ui.NgZorro/Components/Tables/Configs/TableHeadColumnShareConfig.cs b/src/Util.Ui.NgZorro/Components/Tables/Configs/TableHeadColumnShareConfig.cs index 509ee4658..1433c5430 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Configs/TableHeadColumnShareConfig.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Configs/TableHeadColumnShareConfig.cs @@ -36,11 +36,6 @@ public TableHeadColumnShareConfig( TableShareConfig tableShareConfig ) { /// public string TableEditId => _tableShareConfig.TableEditId; - /// - /// 是否启用自定义列 - /// - public bool IsEnableCustomColumn => _tableShareConfig.IsEnableCustomColumn; - /// /// 是否显示复选框 /// @@ -57,19 +52,19 @@ public TableHeadColumnShareConfig( TableShareConfig tableShareConfig ) { public bool IsShowLineNumber => _tableShareConfig.IsShowLineNumber; /// - /// 是否固定复选框到左侧 + /// 固定复选框到左侧 /// - public bool IsCheckboxLeft => _tableShareConfig.IsCheckboxLeft; + public string IsCheckboxLeft => _tableShareConfig.IsCheckboxLeft; /// - /// 是否固定单选框到左侧 + /// 固定单选框到左侧 /// - public bool IsRadioLeft => _tableShareConfig.IsRadioLeft; + public string IsRadioLeft => _tableShareConfig.IsRadioLeft; /// - /// 是否固定序号到左侧 + /// 固定序号到左侧 /// - public bool IsLineNumberLeft => _tableShareConfig.IsLineNumberLeft; + public string IsLineNumberLeft => _tableShareConfig.IsLineNumberLeft; /// /// 是否自动创建表头单元格th @@ -79,15 +74,64 @@ public bool IsAutoCreateHeadColumn { set => _tableShareConfig.IsAutoCreateHeadColumn = value; } + /// + /// 索引 + /// + public int Index { get; set; } + /// /// 是否第一列 /// - public bool IsFirst { get; set; } + public bool IsFirst => Index == 0; /// - /// 索引 + /// 是否最后一列 /// - public int Index { get; set; } + public bool IsLast => _tableShareConfig.Columns.Count == Index + 1; + + /// + /// 是否启用自定义列 + /// + public bool IsEnableCustomColumn => _tableShareConfig.IsEnableCustomColumn; + + /// + /// 表格设置是否启用固定列 + /// + public bool IsEnableFixedColumn => _tableShareConfig.IsEnableFixedColumn; + + /// + /// 是否启用拖动调整列宽 + /// + public bool IsEnableResizable { + get { + var headColumn = _tableShareConfig.GetHeadColumn( Index ); + if ( headColumn is { IsEnableResizable: true } ) + return true; + if ( _tableShareConfig.IsEnableResizable == false ) + return false; + if ( _tableShareConfig.IsEnableCustomColumn ) + return true; + return _tableShareConfig.Columns.Count <= 1 || IsLast == false; + } + } + + /// + /// 是否启用表格设置 + /// + public bool IsEnableTableSettings { + get { + if ( _tableShareConfig.ColumnNumber == 0 ) + return false; + if ( IsEnableCustomColumn ) + return true; + if ( IsEnableFixedColumn ) + return true; + var headColumn = _tableShareConfig.GetHeadColumn( Index ); + if ( headColumn is { IsEnableResizable: true } ) + return true; + return _tableShareConfig.IsEnableResizable; + } + } /// /// 自定义列标识 @@ -95,20 +139,45 @@ public bool IsAutoCreateHeadColumn { public string CellControl { get { var column = _tableShareConfig.GetColumn( Index ); - if (column == null) - return null; - return column.GetCellControl(); + return column?.GetCellControl(); } } /// - /// 设置第一列 + /// 标题 /// - public void SetIsFirst() { - if ( Index == 0 ) - IsFirst = true; + public string Title { + get { + var column = _tableShareConfig.GetColumn( Index ); + return column?.Title; + } } + /// + /// 对齐方式 + /// + public string Align { + get { + var column = _tableShareConfig.GetColumn( Index ); + return column?.Align; + } + } + + /// + /// 标题对齐方式 + /// + public string TitleAlign { + get { + var column = _tableShareConfig.GetHeadColumn( Index ); + return column?.TitleAlign; + } + } + + /// + /// 表格设置组件标识 + /// + public string TableSettingsId => _tableShareConfig.TableSettingsId; + /// /// 添加列 /// @@ -118,5 +187,7 @@ public void AddColumn( HeadColumnInfo column ) { return; column.Index = Index; _tableShareConfig.HeadColumns.Add( column ); + if ( column.IsEnableResizable == true ) + _tableShareConfig.IsEnableResizable = true; } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Tables/Configs/TableShareConfig.cs b/src/Util.Ui.NgZorro/Components/Tables/Configs/TableShareConfig.cs index ce20dc7bf..6b150202d 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Configs/TableShareConfig.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Configs/TableShareConfig.cs @@ -31,6 +31,11 @@ public TableShareConfig( string id = null ) { /// public string Id { get; } + /// + /// 表格存储标识 - 保存表格设置参数时作为存储键 + /// + public string Key { get; set; } + /// /// 表格扩展标识 /// @@ -149,11 +154,38 @@ public void SetRowId( string rowId ) { /// public bool IsEnableEdit { get; set; } + /// + /// 是否启用表格设置 + /// + public bool IsEnableTableSettings { + get { + if ( ColumnNumber == 0 ) + return false; + if ( IsEnableCustomColumn ) + return true; + if ( IsEnableResizable ) + return true; + if ( IsEnableFixedColumn ) + return true; + return false; + } + } + /// /// 是否启用自定义列 /// public bool IsEnableCustomColumn { get; set; } + /// + /// 是否启用拖动调整列宽 + /// + public bool IsEnableResizable { get; set; } + + /// + /// 表格设置是否启用固定列 + /// + public bool IsEnableFixedColumn { get; set; } + /// /// 是否显示复选框 /// @@ -170,19 +202,19 @@ public void SetRowId( string rowId ) { public bool IsShowLineNumber { get; set; } /// - /// 是否固定复选框到左侧 + /// 固定复选框到左侧 /// - public bool IsCheckboxLeft { get; set; } + public string IsCheckboxLeft { get; set; } /// - /// 是否固定单选框到左侧 + /// 固定单选框到左侧 /// - public bool IsRadioLeft { get; set; } + public string IsRadioLeft { get; set; } /// - /// 是否固定序号到左侧 + /// 固定序号到左侧 /// - public bool IsLineNumberLeft { get; set; } + public string IsLineNumberLeft { get; set; } /// /// 是否树形表格 @@ -210,9 +242,14 @@ public void SetRowId( string rowId ) { public bool SelectOnlyOnClickRow { get; set; } /// - /// 自定义列标识 + /// 滚动宽度 /// - public string CustomColumnKey { get; set; } + public string ScrollWidth { get; set; } + + /// + /// 滚动高度 + /// + public string ScrollHeight { get; set; } /// /// 获取列信息 @@ -229,4 +266,25 @@ public ColumnInfo GetColumn( int index ) { public HeadColumnInfo GetHeadColumn( int index ) { return HeadColumns.Find( t => t.Index == index ); } + + /// + /// 固定复选框到左侧 + /// + public bool? GetCheckboxLeft() { + return IsCheckboxLeft.IsEmpty() ? null : true; + } + + /// + /// 固定单选框到左侧 + /// + public bool? GetRadioLeft() { + return IsRadioLeft.IsEmpty() ? null : true; + } + + /// + /// 固定序号到左侧 + /// + public bool? GetLineNumberLeft() { + return IsLineNumberLeft.IsEmpty() ? null : true; + } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Tables/Helpers/ColumnInfo.cs b/src/Util.Ui.NgZorro/Components/Tables/Helpers/ColumnInfo.cs index d5ded3c72..93238b3bf 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Helpers/ColumnInfo.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Helpers/ColumnInfo.cs @@ -21,6 +21,18 @@ public class ColumnInfo { /// public string CellControl { get; set; } /// + /// 对齐方式 + /// + public string Align { get; set; } + /// + /// 标题对齐方式 + /// + public string TitleAlign { get; set; } + /// + /// 是否自动省略 + /// + public bool? Ellipsis { get; set; } + /// /// 是否排序 /// public bool IsSort { get; set; } @@ -33,13 +45,13 @@ public class ColumnInfo { /// public bool IsFirst { get; set; } /// - /// 是否左侧固定 + /// 左侧固定 /// - public bool IsLeft { get; set; } + public string IsLeft { get; set; } /// - /// 是否右侧固定 + /// 右侧固定 /// - public bool IsRight { get; set; } + public string IsRight { get; set; } /// /// 访问控制列表 /// @@ -48,12 +60,18 @@ public class ColumnInfo { /// 访问控制列表模板标识 /// public string AclElseTemplateId { get; set; } + /// + /// 是否启用拖动调整列宽 + /// + public bool IsEnableResizable { get; set; } /// /// 转换为自定义列 /// public CustomColumn ToCustomColumn() { - return new CustomColumn( GetCellControl(), Width, Acl ); + bool? isLeft = IsLeft.IsEmpty() ? null : true; + bool? isRight = IsRight.IsEmpty() ? null : true; + return new CustomColumn( GetCellControl(), Width, isLeft, isRight, TitleAlign, Align, Ellipsis, Acl ); } /// diff --git a/src/Util.Ui.NgZorro/Components/Tables/Helpers/CustomColumn.cs b/src/Util.Ui.NgZorro/Components/Tables/Helpers/CustomColumn.cs index b8cca2912..467b2ddac 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Helpers/CustomColumn.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Helpers/CustomColumn.cs @@ -1,6 +1,4 @@ -using Util.Ui.NgZorro.Configs; - -namespace Util.Ui.NgZorro.Components.Tables.Helpers; +namespace Util.Ui.NgZorro.Components.Tables.Helpers; /// /// 自定义列信息 @@ -9,50 +7,71 @@ public class CustomColumn { /// /// 初始化自定义列信息 /// - /// 值 + /// 标题 /// 宽度 + /// 固定到左侧 + /// 固定到右侧 + /// 标题对齐方式 + /// 内容对齐方式 + /// 是否自动省略 /// 访问控制 - public CustomColumn( string value, string width, string acl ) { - Value = value; - Default = true; - Width = GetWidth( width ); + public CustomColumn( string title, string width, bool? left = null, bool? right = null, + string titleAlign = null,string align = null, bool? ellipsis = null, string acl = null ) { + Title = title; + if ( width.IsEmpty() == false ) + Width = width; + Left = left; + Right = right; + if ( titleAlign.IsEmpty() == false ) + TitleAlign = titleAlign; + if ( align.IsEmpty() == false ) + Align = align; + Ellipsis = ellipsis; if ( acl.IsEmpty() == false ) Acl = acl; } /// - /// 获取宽度 + /// 标题 /// - private double GetWidth( string value ) { - var defaultWidth = NgZorroOptionsService.GetOptions().TableColumnDefaultWidth; - if ( value.IsEmpty() ) - return defaultWidth; - if ( Util.Helpers.Validation.IsNumber( value ) ) - return Util.Helpers.Convert.ToDouble( value ); - if ( value.EndsWith( "px" ) ) - return Util.Helpers.Convert.ToDouble( value.RemoveEnd( "px" ) ); - if ( value.EndsWith( "%" ) ) - return 10 * Util.Helpers.Convert.ToDouble( value.RemoveEnd( "%" ) ); - return defaultWidth; - } + [JsonPropertyName( "title" )] + public string Title { get; } /// - /// 值 + /// 宽度 /// - [JsonPropertyName( "value" )] - public string Value { get; } + [JsonPropertyName( "width" )] + public string Width { get; } /// - /// 默认 + /// 固定到左侧 /// - [JsonPropertyName( "default" )] - public bool Default { get; } + [JsonPropertyName( "left" )] + public bool? Left { get; } /// - /// 宽度 + /// 固定到右侧 /// - [JsonPropertyName( "width" )] - public double Width { get; } + [JsonPropertyName( "right" )] + public bool? Right { get; } + + /// + /// 标题对齐方式 + /// + [JsonPropertyName( "titleAlign" )] + public string TitleAlign { get; } + + /// + /// 内容对齐方式 + /// + [JsonPropertyName( "align" )] + public string Align { get; } + + /// + /// 是否自动省略 + /// + [JsonPropertyName( "ellipsis" )] + public bool? Ellipsis { get; } /// /// 访问控制 diff --git a/src/Util.Ui.NgZorro/Components/Tables/Helpers/HeadColumnInfo.cs b/src/Util.Ui.NgZorro/Components/Tables/Helpers/HeadColumnInfo.cs index e85cf8850..88bcc894c 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Helpers/HeadColumnInfo.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Helpers/HeadColumnInfo.cs @@ -20,11 +20,28 @@ public class HeadColumnInfo { /// 自定义列标识 /// public string CellControl { get; set; } - /// - /// 获取自定义列标识 + /// 对齐方式 + /// + public string Align { get; set; } + /// + /// 标题对齐方式 + /// + public string TitleAlign { get; set; } + /// + /// 是否自动省略 + /// + public bool? Ellipsis { get; set; } + /// + /// 左侧固定 + /// + public string IsLeft { get; set; } + /// + /// 右侧固定 + /// + public string IsRight { get; set; } + /// + /// 是否启用拖动调整列宽 /// - public string GetCellControl() { - return CellControl.IsEmpty() ? Title : CellControl; - } + public bool? IsEnableResizable { get; set; } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableColumnService.cs b/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableColumnService.cs index b4d9bbc8b..3de69a03f 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableColumnService.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableColumnService.cs @@ -1,5 +1,6 @@ using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.NgZorro.Configs; +using Util.Ui.NgZorro.Enums; namespace Util.Ui.NgZorro.Components.Tables.Helpers; @@ -29,7 +30,6 @@ public TableColumnService( Config config ) { /// public void Init() { CreateTableColumnShareConfig(); - SetIsFirst(); EnableEdit(); EnableEllipsis(); LoadExpression(); @@ -51,13 +51,6 @@ private TableShareConfig GetTableShareConfig() { return _config.GetValueFromItems() ?? new TableShareConfig(); } - /// - /// 设置第一列标识 - /// - public void SetIsFirst() { - _shareConfig.SetIsFirst(); - } - /// /// 启用编辑模式 /// @@ -99,13 +92,16 @@ private ColumnInfo GetColumnInfo() { Title = GetTitle(), Column = _config.GetValue( UiConst.Column ), CellControl = _config.GetValue( UiConst.CellControl ), + Align = _config.GetValue( UiConst.Align )?.Description(), Width = _config.GetValue( UiConst.Width ), + Ellipsis = _config.GetValue( UiConst.Ellipsis ), IsSort = _config.GetValue( UiConst.Sort ), IsFirst = _shareConfig.IsFirst, - IsLeft = _config.GetValue( UiConst.Left ), - IsRight = _config.GetValue( UiConst.Right ), + IsLeft = _config.GetValue( UiConst.Left ), + IsRight = _config.GetValue( UiConst.Right ), Acl = _config.GetValue( UiConst.Acl ), - AclElseTemplateId = _config.GetValue( UiConst.AclElseTemplateId ) + AclElseTemplateId = _config.GetValue( UiConst.AclElseTemplateId ), + IsEnableResizable = _config.GetValue( UiConst.EnableResizable ) }; return result; } diff --git a/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableHeadColumnService.cs b/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableHeadColumnService.cs index d64000b6d..9392e24ab 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableHeadColumnService.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableHeadColumnService.cs @@ -1,5 +1,6 @@ using Util.Ui.Expressions; using Util.Ui.NgZorro.Components.Tables.Configs; +using Util.Ui.NgZorro.Enums; namespace Util.Ui.NgZorro.Components.Tables.Helpers; @@ -30,7 +31,6 @@ public TableHeadColumnService( Config config ) { public void Init() { CreateTableHeadColumnShareConfig(); CancelAutoCreateHeadColumn(); - SetIsFirst(); SetColumn(); LoadExpression(); } @@ -57,21 +57,21 @@ private void CancelAutoCreateHeadColumn() { _shareConfig.IsAutoCreateHeadColumn = false; } - /// - /// 设置第一列标识 - /// - public void SetIsFirst() { - _shareConfig.SetIsFirst(); - } - /// /// 设置表头列 /// public void SetColumn() { - var title = _config.GetValue( UiConst.Title ); - var width = _config.GetValue( UiConst.Width ); - var cellControl = _config.GetValue( UiConst.CellControl ); - _shareConfig.AddColumn( new HeadColumnInfo { Title = title, Width = width, CellControl = cellControl } ); + _shareConfig.AddColumn( new HeadColumnInfo { + Title = _config.GetValue( UiConst.Title ), + Width = _config.GetValue( UiConst.Width ), + Align = _config.GetValue( UiConst.Align )?.Description(), + TitleAlign = _config.GetValue( UiConst.TitleAlign )?.Description(), + Ellipsis = _config.GetValue( UiConst.Ellipsis ), + IsLeft = _config.GetValue( UiConst.Left ), + IsRight = _config.GetValue( UiConst.Right ), + CellControl = _config.GetValue( UiConst.CellControl ), + IsEnableResizable = _config.GetValue( UiConst.EnableResizable ) + } ); } /// diff --git a/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableService.cs b/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableService.cs index 0a7be752c..5c6b330c3 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableService.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Helpers/TableService.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Configs; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Configs; namespace Util.Ui.NgZorro.Components.Tables.Helpers; @@ -44,7 +43,8 @@ public void InitTreeTable() { /// public void Init() { CreateShareConfig(); - SetEnableCustomColumn(); + SetTableSettings(); + SetScroll(); SetIsShowCheckbox(); SetIsShowRadio(); SetIsCheckLeafOnly(); @@ -69,14 +69,35 @@ private string GetTableId() { } /// - /// 设置启用自定义列 + /// 设置表格设置参数 /// - private void SetEnableCustomColumn() { - var key = _config.GetValue( UiConst.EnableCustomColumn ); - if ( key.IsEmpty() || key.ToLower() == "true" ) + private void SetTableSettings() { + _shareConfig.Key = GetKey(); + if ( _config.GetValue( UiConst.EnableTableSettings ) ) { + _shareConfig.IsEnableCustomColumn = true; + _shareConfig.IsEnableResizable = true; + _shareConfig.IsEnableFixedColumn = true; return; - _shareConfig.IsEnableCustomColumn = true; - _shareConfig.CustomColumnKey = key; + } + _shareConfig.IsEnableCustomColumn = _config.GetValue( UiConst.EnableCustomColumn ); + _shareConfig.IsEnableResizable = _config.GetValue( UiConst.EnableResizable ); + _shareConfig.IsEnableFixedColumn = _config.GetValue( UiConst.EnableFixedColumn ); + } + + /// + /// 获取表格参数存储标识 + /// + private string GetKey() { + var result = _config.GetValue( UiConst.Key ); + return result.IsEmpty() ? _config.GetValue( UiConst.Id ) : result; + } + + /// + /// 设置表格滚动参数 + /// + private void SetScroll() { + _shareConfig.ScrollWidth = _config.GetValue( UiConst.ScrollWidth ); + _shareConfig.ScrollHeight = _config.GetValue( UiConst.ScrollHeight ); } /// @@ -84,7 +105,7 @@ private void SetEnableCustomColumn() { /// private void SetIsShowCheckbox() { _shareConfig.IsShowCheckbox = _config.GetValue( UiConst.ShowCheckbox ); - _shareConfig.IsCheckboxLeft = _config.GetValue( UiConst.CheckboxLeft ); + _shareConfig.IsCheckboxLeft = _config.GetValue( UiConst.CheckboxLeft ); } /// @@ -92,7 +113,7 @@ private void SetIsShowCheckbox() { /// private void SetIsShowRadio() { _shareConfig.IsShowRadio = _config.GetValue( UiConst.ShowRadio ); - _shareConfig.IsRadioLeft = _config.GetValue( UiConst.RadioLeft ); + _shareConfig.IsRadioLeft = _config.GetValue( UiConst.RadioLeft ); } /// @@ -107,7 +128,7 @@ private void SetIsCheckLeafOnly() { /// private void SetIsShowLineNumber() { _shareConfig.IsShowLineNumber = _config.GetValue( UiConst.ShowLineNumber ); - _shareConfig.IsLineNumberLeft = _config.GetValue( UiConst.LineNumberLeft ); + _shareConfig.IsLineNumberLeft = _config.GetValue( UiConst.LineNumberLeft ); } /// diff --git a/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRender.cs b/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRender.cs index acd30df36..dacb05ee6 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRender.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRender.cs @@ -4,7 +4,7 @@ using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.Renders; -namespace Util.Ui.NgZorro.Components.Tables.Renders; +namespace Util.Ui.NgZorro.Components.Tables.Renders; /// /// 表格渲染器 @@ -67,9 +67,7 @@ protected void RenderTotalTemplate( TextWriter writer, HtmlEncoder encoder ) { /// 渲染表格设置组件 /// protected void RenderTableSettings( TextWriter writer, HtmlEncoder encoder ) { - if ( _shareConfig.IsEnableCustomColumn == false ) - return; - if ( _shareConfig.ColumnNumber == 0 ) + if ( _shareConfig.IsEnableTableSettings == false ) return; var builder = new TableSettingsBuilder( _config ); builder.Config(); diff --git a/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRowRender.cs b/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRowRender.cs index 1aef97b01..6a1370da8 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRowRender.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/Renders/TableRowRender.cs @@ -1,5 +1,4 @@ using Util.Ui.Builders; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Builders; using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.Renders; diff --git a/src/Util.Ui.NgZorro/Components/Tables/TableColumnTagHelper.cs b/src/Util.Ui.NgZorro/Components/Tables/TableColumnTagHelper.cs index 4e6ebb0cd..28ce813ad 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/TableColumnTagHelper.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/TableColumnTagHelper.cs @@ -1,7 +1,6 @@ using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using Util.Ui.Angular.TagHelpers; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Helpers; using Util.Ui.NgZorro.Components.Tables.Renders; using Util.Ui.NgZorro.Enums; @@ -118,19 +117,19 @@ public class TableColumnTagHelper : AngularTagHelperBase { /// public string BindonExpand { get; set; } /// - /// [nzLeft],左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// nzLeft,左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// - public bool Left { get; set; } + public string Left { get; set; } /// - /// [nzLeft],左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// [nzLeft],左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// public string BindLeft { get; set; } /// - /// [nzRight],右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// nzRight,右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// - public bool Right { get; set; } + public string Right { get; set; } /// - /// [nzRight],右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// [nzRight],右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// public string BindRight { get; set; } /// @@ -174,6 +173,10 @@ public class TableColumnTagHelper : AngularTagHelperBase { /// public string BindCellControl { get; set; } /// + /// 扩展属性,是否启用拖动调整列宽 + /// + public bool EnableResizable { get; set; } + /// /// (nzCheckedChange),复选框选中状态变化事件,类型: EventEmitter<boolean> /// public string OnCheckedChange { get; set; } diff --git a/src/Util.Ui.NgZorro/Components/Tables/TableHeadColumnTagHelper.cs b/src/Util.Ui.NgZorro/Components/Tables/TableHeadColumnTagHelper.cs index 811daa458..bd1a7f48f 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/TableHeadColumnTagHelper.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/TableHeadColumnTagHelper.cs @@ -138,19 +138,19 @@ public class TableHeadColumnTagHelper : AngularTagHelperBase { /// public string BindWidth { get; set; } /// - /// [nzLeft],左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// nzLeft,左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// - public bool Left { get; set; } + public string Left { get; set; } /// - /// [nzLeft],左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// [nzLeft],左侧距离,用于固定左侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// public string BindLeft { get; set; } /// - /// [nzRight],右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// nzRight,右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// - public bool Right { get; set; } + public string Right { get; set; } /// - /// [nzRight],右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean,默认值: false + /// [nzRight],右侧距离,用于固定右侧列,当为 true 时自动计算,为 false 时停止固定,类型: string | boolean /// public string BindRight { get; set; } /// @@ -162,6 +162,14 @@ public class TableHeadColumnTagHelper : AngularTagHelperBase { /// public string BindAlign { get; set; } /// + /// titleAlign,扩展属性,设置列标题的对齐方式,可选值: 'left' | 'right' | 'center' + /// + public TableHeadColumnAlign TitleAlign { get; set; } + /// + /// [titleAlign],扩展属性,设置列标题的对齐方式,可选值: 'left' | 'right' | 'center' + /// + public string BindTitleAlign { get; set; } + /// /// [nzBreakWord],是否折行显示,默认值: false /// public bool BreakWord { get; set; } @@ -210,6 +218,10 @@ public class TableHeadColumnTagHelper : AngularTagHelperBase { /// public string BindCellControl { get; set; } /// + /// 扩展属性,是否启用拖动调整列宽 + /// + public bool EnableResizable { get; set; } + /// /// (nzCheckedChange),复选框选中状态变化事件,类型: EventEmitter<boolean> /// public string OnCheckedChange { get; set; } diff --git a/src/Util.Ui.NgZorro/Components/Tables/TableHeadTagHelper.cs b/src/Util.Ui.NgZorro/Components/Tables/TableHeadTagHelper.cs index e2b15aec1..449205b98 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/TableHeadTagHelper.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/TableHeadTagHelper.cs @@ -1,6 +1,5 @@ using Microsoft.AspNetCore.Razor.TagHelpers; using Util.Ui.Angular.TagHelpers; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Helpers; using Util.Ui.NgZorro.Components.Tables.Renders; using Util.Ui.Renders; diff --git a/src/Util.Ui.NgZorro/Components/Tables/TableRowTagHelper.cs b/src/Util.Ui.NgZorro/Components/Tables/TableRowTagHelper.cs index 4969f94f0..82c2da8cb 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/TableRowTagHelper.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/TableRowTagHelper.cs @@ -1,6 +1,5 @@ using Microsoft.AspNetCore.Razor.TagHelpers; using Util.Ui.Angular.TagHelpers; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Helpers; using Util.Ui.NgZorro.Components.Tables.Renders; using Util.Ui.Renders; diff --git a/src/Util.Ui.NgZorro/Components/Tables/TableTagHelper.cs b/src/Util.Ui.NgZorro/Components/Tables/TableTagHelper.cs index 728c97725..868c53c60 100644 --- a/src/Util.Ui.NgZorro/Components/Tables/TableTagHelper.cs +++ b/src/Util.Ui.NgZorro/Components/Tables/TableTagHelper.cs @@ -17,6 +17,10 @@ public class TableTagHelper : AngularTagHelperBase { /// private Config _config; /// + /// 扩展属性,表格标识,保存表格设置参数时作为存储键, 必须全局唯一 + /// + public string Key { get; set; } + /// /// 扩展属性,是否启用自动创建嵌套结构,默认为 true /// public bool EnableAutoCreate { get; set; } @@ -61,17 +65,17 @@ public class TableTagHelper : AngularTagHelperBase { /// public bool ShowLineNumber { get; set; } /// - /// 扩展属性,是否固定左侧复选框列,当设置ShowCheckbox为true有效 + /// 扩展属性,固定左侧复选框列,当设置ShowCheckbox为true有效 /// - public bool CheckboxLeft { get; set; } + public string CheckboxLeft { get; set; } /// - /// 扩展属性,是否固定左侧单选框列,当设置ShowRadio为true有效 + /// 扩展属性,固定左侧单选框列,当设置ShowRadio为true有效 /// - public bool RadioLeft { get; set; } + public string RadioLeft { get; set; } /// - /// 扩展属性,是否固定左侧序号列,当设置ShowLineNumber为true有效 + /// 扩展属性,固定左侧序号列,当设置ShowLineNumber为true有效 /// - public bool LineNumberLeft { get; set; } + public string LineNumberLeft { get; set; } /// /// 扩展属性 [checkedKeys],选中的标识列表,用于还原选中的复选框或单选框,可以是单个Id或Id数组,范例:'1' 或 ['1','2'] /// @@ -329,9 +333,21 @@ public class TableTagHelper : AngularTagHelperBase { /// public string CustomColumn { get; set; } /// - /// 扩展属性,启用自定义列, 参数值为自定义列标识 Key,用于将自定义列数据存储到浏览器本地, 必须全局唯一 + /// 扩展属性,是否启用表格设置,将启用表格设置的全部功能, 默认值: false + /// + public bool EnableTableSettings { get; set; } + /// + /// 扩展属性,是否启用自定义列,默认值: false + /// + public bool EnableCustomColumn { get; set; } + /// + /// 扩展属性,是否启用拖动调整列宽,默认值: false + /// + public bool EnableResizable { get; set; } + /// + /// 扩展属性,是否启用固定列,默认值: false /// - public string EnableCustomColumn { get; set; } + public bool EnableFixedColumn { get; set; } /// /// (nzPageIndexChange),页码变化事件,类型: EventEmitter<number> /// diff --git a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyBuilder.cs b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyBuilder.cs index a2c7dde92..8b022e8e2 100644 --- a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyBuilder.cs @@ -1,6 +1,5 @@ using Util.Ui.Angular.Extensions; using Util.Ui.Builders; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Builders; namespace Util.Ui.NgZorro.Components.TreeTables.Builders; diff --git a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyRowBuilder.cs b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyRowBuilder.cs index 9c277c5d3..66b0793b4 100644 --- a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyRowBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableBodyRowBuilder.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Extensions; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Builders; namespace Util.Ui.NgZorro.Components.TreeTables.Builders; diff --git a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableColumnBuilder.cs b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableColumnBuilder.cs index 3d765579c..4cc9d4624 100644 --- a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableColumnBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableColumnBuilder.cs @@ -1,5 +1,4 @@ -using Util.Ui.Configs; -using Util.Ui.NgZorro.Components.Tables.Builders; +using Util.Ui.NgZorro.Components.Tables.Builders; using Util.Ui.NgZorro.Components.Tables.Builders.Contents; using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.NgZorro.Components.TreeTables.Builders.Contents; diff --git a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadBuilder.cs b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadBuilder.cs index d658eb5c1..774fd3287 100644 --- a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadBuilder.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Extensions; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Builders; namespace Util.Ui.NgZorro.Components.TreeTables.Builders; diff --git a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadColumnBuilder.cs b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadColumnBuilder.cs index 7ee8acc9f..ef2d1d48f 100644 --- a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadColumnBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadColumnBuilder.cs @@ -1,11 +1,8 @@ -using Util.Ui.Configs; -using Util.Ui.NgZorro.Components.Tables.Builders; +using Util.Ui.NgZorro.Components.Tables.Builders; using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.NgZorro.Components.Tables.Helpers; using Util.Ui.NgZorro.Configs; -using Util.Ui.NgZorro.Extensions; - -namespace Util.Ui.NgZorro.Components.TreeTables.Builders; +namespace Util.Ui.NgZorro.Components.TreeTables.Builders; /// /// 树形表头单元格标签生成器 @@ -42,13 +39,16 @@ protected override void ConfigContent( Config config ) { /// /// 列 public override void AddColumn( ColumnInfo column ) { - if ( column.IsFirst ) { + if ( column.IsFirst ) AddFirstColumn( column ); - } - else { + else Title( column.Title ); - } - this.Width( column.Width ); + SetColumnWidth( column ); + Left( column.IsLeft, column.Title ); + Right( column.IsRight, column.Title ); + SetAcl( column.Acl, column.AclElseTemplateId ); + EnableCustomColumn( column.GetCellControl() ); + EnableResizable( column ); } /// @@ -70,6 +70,24 @@ private void AddFirstColumn( ColumnInfo column ) { Title( column.Title ); } + /// + /// 配置拖动调整列宽 + /// + public override TableHeadColumnBuilder Resizable( string title ) { + Attribute( "nz-resizable" ); + Attribute( "nzPreview" ); + Attribute( "nzBounds", "window" ); + Attribute( "(nzResizeEnd)", $"{_shareConfig.TableSettingsId}.handleResize($event,'{title}')" ); + if (_shareConfig.IsFirst) { + if( _shareConfig.IsShowCheckbox ) + return this; + if ( _shareConfig.IsShowRadio ) + return this; + } + AppendHandleBuilder(); + return this; + } + /// protected override void AddCheckBox( string title = null ) { title = GetTitle( title ); @@ -77,8 +95,9 @@ protected override void AddCheckBox( string title = null ) { title = _config.Content?.GetContent(); var checkboxBuilder = new TreeTableMasterCheckBoxBuilder( _shareConfig.TableExtendId, title ); SetContent( checkboxBuilder ); - if ( _shareConfig.IsCheckboxLeft ) - Left( "true" ); + if ( _shareConfig.IsEnableResizable ) + AppendHandleBuilder(); + Left( _shareConfig.IsCheckboxLeft ); } /// @@ -99,7 +118,8 @@ protected override void AddRadio( string title = null ) { if ( title.IsEmpty() ) title = _config.Content?.GetContent(); SetContent( title ); - if ( _shareConfig.IsRadioLeft ) - Left( "true" ); + if ( _shareConfig.IsEnableResizable ) + AppendHandleBuilder(); + Left( _shareConfig.IsRadioLeft ); } } \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadRowBuilder.cs b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadRowBuilder.cs index 6da5d9941..29894cdb6 100644 --- a/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadRowBuilder.cs +++ b/src/Util.Ui.NgZorro/Components/TreeTables/Builders/TreeTableHeadRowBuilder.cs @@ -1,5 +1,4 @@ using Util.Ui.Angular.Extensions; -using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Builders; namespace Util.Ui.NgZorro.Components.TreeTables.Builders; diff --git a/src/Util.Ui.NgZorro/Enums/CursorType.cs b/src/Util.Ui.NgZorro/Enums/CursorType.cs new file mode 100644 index 000000000..82ae742c1 --- /dev/null +++ b/src/Util.Ui.NgZorro/Enums/CursorType.cs @@ -0,0 +1,17 @@ +namespace Util.Ui.NgZorro.Enums; + +/// +/// 光标类型 +/// +public enum CursorType { + /// + /// window + /// + [Description( "window" )] + Window, + /// + /// grid + /// + [Description( "grid" )] + Grid +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Enums/ResizeDirection.cs b/src/Util.Ui.NgZorro/Enums/ResizeDirection.cs new file mode 100644 index 000000000..c4fb13510 --- /dev/null +++ b/src/Util.Ui.NgZorro/Enums/ResizeDirection.cs @@ -0,0 +1,47 @@ +namespace Util.Ui.NgZorro.Enums; + +/// +/// 调整尺寸手柄方向 +/// +public enum ResizeDirection { + /// + /// 上方 + /// + [Description( "top" )] + Top, + /// + /// 右方 + /// + [Description( "right" )] + Right, + /// + /// 下方 + /// + [Description( "bottom" )] + Bottom, + /// + /// 左方 + /// + [Description( "left" )] + Left, + /// + /// 右上方 + /// + [Description( "topRight" )] + TopRight, + /// + /// 右下方 + /// + [Description( "bottomRight" )] + BottomRight, + /// + /// 左下方 + /// + [Description( "bottomLeft" )] + BottomLeft, + /// + /// 左上方 + /// + [Description( "topLeft" )] + TopLeft +} \ No newline at end of file diff --git a/src/Util.Ui.NgZorro/Expressions/NgZorroExpressionLoaderBase.cs b/src/Util.Ui.NgZorro/Expressions/NgZorroExpressionLoaderBase.cs index 21631215c..37200c8f7 100644 --- a/src/Util.Ui.NgZorro/Expressions/NgZorroExpressionLoaderBase.cs +++ b/src/Util.Ui.NgZorro/Expressions/NgZorroExpressionLoaderBase.cs @@ -1,5 +1,4 @@ -using Util.Ui.Configs; -using Util.Ui.Expressions; +using Util.Ui.Expressions; namespace Util.Ui.NgZorro.Expressions; diff --git a/src/Util.Ui.NgZorro/NgZorroOptions.cs b/src/Util.Ui.NgZorro/NgZorroOptions.cs index 6e8adaaa5..e387ce83a 100644 --- a/src/Util.Ui.NgZorro/NgZorroOptions.cs +++ b/src/Util.Ui.NgZorro/NgZorroOptions.cs @@ -1,4 +1,6 @@ -namespace Util.Ui.NgZorro; +using Util.Ui.NgZorro.Enums; + +namespace Util.Ui.NgZorro; /// /// NgZorro配置 @@ -45,7 +47,19 @@ public class NgZorroOptions { /// public Func GetTableColumnBoolContentAction { get; set; } /// - /// 表格列默认宽度,单位: px, 默认值:180, 自定义列使用 + /// 表格设置组件标签名,默认值:x-table-settings + /// + public string TableSettingsTag { get; set; } = "x-table-settings"; + /// + /// 表格复选框对齐方式,默认值:居中对齐 + /// + public TableHeadColumnAlign TableCheckboxAlign { get; set; } = TableHeadColumnAlign.Center; + /// + /// 表格单选按钮对齐方式,默认值:居中对齐 + /// + public TableHeadColumnAlign TableRadioAlign { get; set; } = TableHeadColumnAlign.Center; + /// + /// 表格序号对齐方式,默认值:居中对齐 /// - public double TableColumnDefaultWidth { get; set; } = 180; + public TableHeadColumnAlign TableLineNumberAlign { get; set; } = TableHeadColumnAlign.Center; } \ No newline at end of file diff --git a/src/Util.Ui/01-Util.Ui.csproj b/src/Util.Ui/01-Util.Ui.csproj index d675e3dea..aae61dd58 100644 --- a/src/Util.Ui/01-Util.Ui.csproj +++ b/src/Util.Ui/01-Util.Ui.csproj @@ -28,7 +28,7 @@ - + diff --git a/src/Util.Ui/Configs/UiConst.cs b/src/Util.Ui/Configs/UiConst.cs index df331b152..417b6a2bb 100644 --- a/src/Util.Ui/Configs/UiConst.cs +++ b/src/Util.Ui/Configs/UiConst.cs @@ -29,6 +29,46 @@ public static class UiConst { /// public const string CellControl = "cell-control"; /// + /// 启用拖动调整尺寸 + /// + public const string EnableResizable = "enable-resizable"; + /// + /// 启用表格设置 + /// + public const string EnableTableSettings = "enable-table-settings"; + /// + /// 启用固定列 + /// + public const string EnableFixedColumn = "enable-fixed-column"; + /// + /// 起始日期 + /// + public const string BeginDate = "begin-date"; + /// + /// 结束日期 + /// + public const string EndDate = "end-date"; + /// + /// 值变更事件 + /// + public const string OnValueChange = "on-value-change"; + /// + /// 起始 + /// + public const string ForBegin = "for-begin"; + /// + /// 结束 + /// + public const string ForEnd = "for-end"; + /// + /// 最小宽度 + /// + public const string MinWidth = "min-width"; + /// + /// 最大宽度 + /// + public const string MaxWidth = "max-width"; + /// /// 是否启用自定义列 /// public const string EnableCustomColumn = "enable-custom-column"; @@ -717,6 +757,10 @@ public static class UiConst { /// public const string Title = "title"; /// + /// 标题对齐 + /// + public const string TitleAlign = "title-align"; + /// /// 错误收集 /// public const string ErrorCollect = "error-collect"; diff --git a/src/Util.Ui/Expressions/ExpressionLoaderBase.cs b/src/Util.Ui/Expressions/ExpressionLoaderBase.cs index e2df52750..e55ec1394 100644 --- a/src/Util.Ui/Expressions/ExpressionLoaderBase.cs +++ b/src/Util.Ui/Expressions/ExpressionLoaderBase.cs @@ -13,6 +13,7 @@ public virtual void Load( Config config, string expressionPropertyName = "for" ) if ( config.Contains( expressionPropertyName ) == false ) return; var info = ResolveModelExpression( config, expressionPropertyName ); + info.ExpressionPropertyName = expressionPropertyName; Load( config, info ); } diff --git a/src/Util.Ui/Expressions/ModelExpressionInfo.cs b/src/Util.Ui/Expressions/ModelExpressionInfo.cs index 21bf0c284..e5bcede2f 100644 --- a/src/Util.Ui/Expressions/ModelExpressionInfo.cs +++ b/src/Util.Ui/Expressions/ModelExpressionInfo.cs @@ -4,6 +4,10 @@ /// 模型表达式信息 /// public class ModelExpressionInfo { + /// + /// 表达式属性名 + /// + public string ExpressionPropertyName { get; set; } /// /// 模型类型 /// diff --git a/test/Util.Aop.AspectCore.Tests/Util.Aop.AspectCore.Tests.csproj b/test/Util.Aop.AspectCore.Tests/Util.Aop.AspectCore.Tests.csproj index c76f903d5..f25e21028 100644 --- a/test/Util.Aop.AspectCore.Tests/Util.Aop.AspectCore.Tests.csproj +++ b/test/Util.Aop.AspectCore.Tests/Util.Aop.AspectCore.Tests.csproj @@ -7,15 +7,15 @@ - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.EntityFrameworkCore.MySql.Tests.Integration/Util.Application.EntityFrameworkCore.MySql.Tests.Integration.csproj b/test/Util.Application.EntityFrameworkCore.MySql.Tests.Integration/Util.Application.EntityFrameworkCore.MySql.Tests.Integration.csproj index 675b85aac..dfbccc664 100644 --- a/test/Util.Application.EntityFrameworkCore.MySql.Tests.Integration/Util.Application.EntityFrameworkCore.MySql.Tests.Integration.csproj +++ b/test/Util.Application.EntityFrameworkCore.MySql.Tests.Integration/Util.Application.EntityFrameworkCore.MySql.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj b/test/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj index 7ac35a229..5c7c5f3c7 100644 --- a/test/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj +++ b/test/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Application.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration.csproj b/test/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration.csproj index 99a633ab6..ddd342f77 100644 --- a/test/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration.csproj +++ b/test/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Application.EntityFrameworkCore.SqlServer.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.Tests/Util.Application.Tests.csproj b/test/Util.Application.Tests/Util.Application.Tests.csproj index c501b64e3..375b48936 100644 --- a/test/Util.Application.Tests/Util.Application.Tests.csproj +++ b/test/Util.Application.Tests/Util.Application.Tests.csproj @@ -14,14 +14,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.WebApi.MySql.Tests.Integration/Util.Application.WebApi.MySql.Tests.Integration.csproj b/test/Util.Application.WebApi.MySql.Tests.Integration/Util.Application.WebApi.MySql.Tests.Integration.csproj index 81f3139b7..5541371c6 100644 --- a/test/Util.Application.WebApi.MySql.Tests.Integration/Util.Application.WebApi.MySql.Tests.Integration.csproj +++ b/test/Util.Application.WebApi.MySql.Tests.Integration/Util.Application.WebApi.MySql.Tests.Integration.csproj @@ -12,14 +12,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.WebApi.PostgreSql.Tests.Integration/Util.Application.WebApi.PostgreSql.Tests.Integration.csproj b/test/Util.Application.WebApi.PostgreSql.Tests.Integration/Util.Application.WebApi.PostgreSql.Tests.Integration.csproj index fe6056653..209204eac 100644 --- a/test/Util.Application.WebApi.PostgreSql.Tests.Integration/Util.Application.WebApi.PostgreSql.Tests.Integration.csproj +++ b/test/Util.Application.WebApi.PostgreSql.Tests.Integration/Util.Application.WebApi.PostgreSql.Tests.Integration.csproj @@ -12,14 +12,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.WebApi.SqlServer.Tests.Integration/Util.Application.WebApi.SqlServer.Tests.Integration.csproj b/test/Util.Application.WebApi.SqlServer.Tests.Integration/Util.Application.WebApi.SqlServer.Tests.Integration.csproj index 6436ad899..40085b0d7 100644 --- a/test/Util.Application.WebApi.SqlServer.Tests.Integration/Util.Application.WebApi.SqlServer.Tests.Integration.csproj +++ b/test/Util.Application.WebApi.SqlServer.Tests.Integration/Util.Application.WebApi.SqlServer.Tests.Integration.csproj @@ -12,14 +12,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Application.WebApi.Tests.Integration/Util.Application.WebApi.Tests.Integration.csproj b/test/Util.Application.WebApi.Tests.Integration/Util.Application.WebApi.Tests.Integration.csproj index 514333bfd..2768ac8ea 100644 --- a/test/Util.Application.WebApi.Tests.Integration/Util.Application.WebApi.Tests.Integration.csproj +++ b/test/Util.Application.WebApi.Tests.Integration/Util.Application.WebApi.Tests.Integration.csproj @@ -8,18 +8,18 @@ - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.AspNetCore.Tests.Integration/Util.AspNetCore.Tests.Integration.csproj b/test/Util.AspNetCore.Tests.Integration/Util.AspNetCore.Tests.Integration.csproj index 133d066d2..5ee9b68de 100644 --- a/test/Util.AspNetCore.Tests.Integration/Util.AspNetCore.Tests.Integration.csproj +++ b/test/Util.AspNetCore.Tests.Integration/Util.AspNetCore.Tests.Integration.csproj @@ -8,17 +8,17 @@ - + - - + + - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Caching.EasyCaching.Tests.Integration/Util.Caching.EasyCaching.Tests.Integration.csproj b/test/Util.Caching.EasyCaching.Tests.Integration/Util.Caching.EasyCaching.Tests.Integration.csproj index decc0ede9..19eb6569f 100644 --- a/test/Util.Caching.EasyCaching.Tests.Integration/Util.Caching.EasyCaching.Tests.Integration.csproj +++ b/test/Util.Caching.EasyCaching.Tests.Integration/Util.Caching.EasyCaching.Tests.Integration.csproj @@ -25,13 +25,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Core.Tests.Integration/Util.Core.Tests.Integration.csproj b/test/Util.Core.Tests.Integration/Util.Core.Tests.Integration.csproj index 26e35cd6d..4ffc57ad2 100644 --- a/test/Util.Core.Tests.Integration/Util.Core.Tests.Integration.csproj +++ b/test/Util.Core.Tests.Integration/Util.Core.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Core.Tests/Util.Core.Tests.csproj b/test/Util.Core.Tests/Util.Core.Tests.csproj index 0d87ebac1..b1be51529 100644 --- a/test/Util.Core.Tests/Util.Core.Tests.csproj +++ b/test/Util.Core.Tests/Util.Core.Tests.csproj @@ -7,14 +7,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.Dapper.MySql.Tests.Integration/Util.Data.Dapper.MySql.Tests.Integration.csproj b/test/Util.Data.Dapper.MySql.Tests.Integration/Util.Data.Dapper.MySql.Tests.Integration.csproj index 1f5109020..de54b6422 100644 --- a/test/Util.Data.Dapper.MySql.Tests.Integration/Util.Data.Dapper.MySql.Tests.Integration.csproj +++ b/test/Util.Data.Dapper.MySql.Tests.Integration/Util.Data.Dapper.MySql.Tests.Integration.csproj @@ -19,17 +19,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.Dapper.Oracle.Tests.Integration/Util.Data.Dapper.Oracle.Tests.Integration.csproj b/test/Util.Data.Dapper.Oracle.Tests.Integration/Util.Data.Dapper.Oracle.Tests.Integration.csproj index 2d021c2b6..486b66737 100644 --- a/test/Util.Data.Dapper.Oracle.Tests.Integration/Util.Data.Dapper.Oracle.Tests.Integration.csproj +++ b/test/Util.Data.Dapper.Oracle.Tests.Integration/Util.Data.Dapper.Oracle.Tests.Integration.csproj @@ -25,17 +25,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.Dapper.PostgreSql.Tests.Integration/Util.Data.Dapper.PostgreSql.Tests.Integration.csproj b/test/Util.Data.Dapper.PostgreSql.Tests.Integration/Util.Data.Dapper.PostgreSql.Tests.Integration.csproj index 82cdccade..d66bd3bab 100644 --- a/test/Util.Data.Dapper.PostgreSql.Tests.Integration/Util.Data.Dapper.PostgreSql.Tests.Integration.csproj +++ b/test/Util.Data.Dapper.PostgreSql.Tests.Integration/Util.Data.Dapper.PostgreSql.Tests.Integration.csproj @@ -19,17 +19,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.Dapper.SqlServer.Tests.Integration/Util.Data.Dapper.SqlServer.Tests.Integration.csproj b/test/Util.Data.Dapper.SqlServer.Tests.Integration/Util.Data.Dapper.SqlServer.Tests.Integration.csproj index 56b5bd752..a31e9656a 100644 --- a/test/Util.Data.Dapper.SqlServer.Tests.Integration/Util.Data.Dapper.SqlServer.Tests.Integration.csproj +++ b/test/Util.Data.Dapper.SqlServer.Tests.Integration/Util.Data.Dapper.SqlServer.Tests.Integration.csproj @@ -19,17 +19,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.EntityFrameworkCore.MySql.Tests.Integration/Util.Data.EntityFrameworkCore.MySql.Tests.Integration.csproj b/test/Util.Data.EntityFrameworkCore.MySql.Tests.Integration/Util.Data.EntityFrameworkCore.MySql.Tests.Integration.csproj index 21f65c84e..c9f5913a4 100644 --- a/test/Util.Data.EntityFrameworkCore.MySql.Tests.Integration/Util.Data.EntityFrameworkCore.MySql.Tests.Integration.csproj +++ b/test/Util.Data.EntityFrameworkCore.MySql.Tests.Integration/Util.Data.EntityFrameworkCore.MySql.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration.csproj b/test/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration.csproj index 35a53fb8f..22ed906e1 100644 --- a/test/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration.csproj +++ b/test/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration/Util.Data.EntityFrameworkCore.Oracle.Tests.Integration.csproj @@ -21,13 +21,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj b/test/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj index 8ac3805fe..b96d7abd1 100644 --- a/test/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj +++ b/test/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration/Util.Data.EntityFrameworkCore.PostgreSql.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration.csproj b/test/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration.csproj index b50096266..b873c535c 100644 --- a/test/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration.csproj +++ b/test/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration/Util.Data.EntityFrameworkCore.SqlServer.Tests.Integration.csproj @@ -30,17 +30,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration.csproj b/test/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration.csproj index 06c8473d4..3ad72e492 100644 --- a/test/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration.csproj +++ b/test/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration/Util.Data.EntityFrameworkCore.Sqlite.Tests.Integration.csproj @@ -20,13 +20,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.Sql.Tests/Util.Data.Sql.Tests.csproj b/test/Util.Data.Sql.Tests/Util.Data.Sql.Tests.csproj index 2172bc447..5de318091 100644 --- a/test/Util.Data.Sql.Tests/Util.Data.Sql.Tests.csproj +++ b/test/Util.Data.Sql.Tests/Util.Data.Sql.Tests.csproj @@ -6,13 +6,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Data.Tests/Util.Data.Tests.csproj b/test/Util.Data.Tests/Util.Data.Tests.csproj index 54ec41ef0..c985381d3 100644 --- a/test/Util.Data.Tests/Util.Data.Tests.csproj +++ b/test/Util.Data.Tests/Util.Data.Tests.csproj @@ -6,13 +6,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Domain.Tests/Util.Domain.Tests.csproj b/test/Util.Domain.Tests/Util.Domain.Tests.csproj index 67559403a..c80d5ff15 100644 --- a/test/Util.Domain.Tests/Util.Domain.Tests.csproj +++ b/test/Util.Domain.Tests/Util.Domain.Tests.csproj @@ -6,14 +6,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Events.MediatR.Tests.Integration/Util.Events.MediatR.Tests.Integration.csproj b/test/Util.Events.MediatR.Tests.Integration/Util.Events.MediatR.Tests.Integration.csproj index 31516cc9b..72e494fdb 100644 --- a/test/Util.Events.MediatR.Tests.Integration/Util.Events.MediatR.Tests.Integration.csproj +++ b/test/Util.Events.MediatR.Tests.Integration/Util.Events.MediatR.Tests.Integration.csproj @@ -11,13 +11,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Events.Tests.Integration/Util.Events.Tests.Integration.csproj b/test/Util.Events.Tests.Integration/Util.Events.Tests.Integration.csproj index 085a4b7e4..82a12708e 100644 --- a/test/Util.Events.Tests.Integration/Util.Events.Tests.Integration.csproj +++ b/test/Util.Events.Tests.Integration/Util.Events.Tests.Integration.csproj @@ -11,13 +11,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.FileStorage.Aliyun.Tests.Integration/Util.FileStorage.Aliyun.Tests.Integration.csproj b/test/Util.FileStorage.Aliyun.Tests.Integration/Util.FileStorage.Aliyun.Tests.Integration.csproj index 47cd4667c..1b810a19e 100644 --- a/test/Util.FileStorage.Aliyun.Tests.Integration/Util.FileStorage.Aliyun.Tests.Integration.csproj +++ b/test/Util.FileStorage.Aliyun.Tests.Integration/Util.FileStorage.Aliyun.Tests.Integration.csproj @@ -22,17 +22,17 @@ - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.FileStorage.Minio.Tests.Integration/Util.FileStorage.Minio.Tests.Integration.csproj b/test/Util.FileStorage.Minio.Tests.Integration/Util.FileStorage.Minio.Tests.Integration.csproj index b9323424e..366a4b550 100644 --- a/test/Util.FileStorage.Minio.Tests.Integration/Util.FileStorage.Minio.Tests.Integration.csproj +++ b/test/Util.FileStorage.Minio.Tests.Integration/Util.FileStorage.Minio.Tests.Integration.csproj @@ -22,17 +22,17 @@ - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.FileStorage.Tests.Integration/Util.FileStorage.Tests.Integration.csproj b/test/Util.FileStorage.Tests.Integration/Util.FileStorage.Tests.Integration.csproj index 04a5e637d..ec50eba71 100644 --- a/test/Util.FileStorage.Tests.Integration/Util.FileStorage.Tests.Integration.csproj +++ b/test/Util.FileStorage.Tests.Integration/Util.FileStorage.Tests.Integration.csproj @@ -22,17 +22,17 @@ - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Generators.Razor.Tests.Integration/Util.Generators.Razor.Tests.Integration.csproj b/test/Util.Generators.Razor.Tests.Integration/Util.Generators.Razor.Tests.Integration.csproj index 756ae5bda..967e88412 100644 --- a/test/Util.Generators.Razor.Tests.Integration/Util.Generators.Razor.Tests.Integration.csproj +++ b/test/Util.Generators.Razor.Tests.Integration/Util.Generators.Razor.Tests.Integration.csproj @@ -17,13 +17,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Generators.Tests/Util.Generators.Tests.csproj b/test/Util.Generators.Tests/Util.Generators.Tests.csproj index cce5becc1..be998eab5 100644 --- a/test/Util.Generators.Tests/Util.Generators.Tests.csproj +++ b/test/Util.Generators.Tests/Util.Generators.Tests.csproj @@ -18,14 +18,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.IdGenerator.Tests/Util.IdGenerator.Tests.csproj b/test/Util.IdGenerator.Tests/Util.IdGenerator.Tests.csproj index 6c02876a7..be76d16f7 100644 --- a/test/Util.IdGenerator.Tests/Util.IdGenerator.Tests.csproj +++ b/test/Util.IdGenerator.Tests/Util.IdGenerator.Tests.csproj @@ -8,13 +8,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Images.Avatar.Tests.Integration/Util.Images.Avatar.Tests.Integration.csproj b/test/Util.Images.Avatar.Tests.Integration/Util.Images.Avatar.Tests.Integration.csproj index a6d8a38e0..d2f743ed5 100644 --- a/test/Util.Images.Avatar.Tests.Integration/Util.Images.Avatar.Tests.Integration.csproj +++ b/test/Util.Images.Avatar.Tests.Integration/Util.Images.Avatar.Tests.Integration.csproj @@ -8,16 +8,16 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Images.ImageSharp.Tests.Integration/Util.Images.ImageSharp.Tests.Integration.csproj b/test/Util.Images.ImageSharp.Tests.Integration/Util.Images.ImageSharp.Tests.Integration.csproj index 3c9fdd123..546e18271 100644 --- a/test/Util.Images.ImageSharp.Tests.Integration/Util.Images.ImageSharp.Tests.Integration.csproj +++ b/test/Util.Images.ImageSharp.Tests.Integration/Util.Images.ImageSharp.Tests.Integration.csproj @@ -8,15 +8,15 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Localization.Tests.Integration/Util.Localization.Tests.Integration.csproj b/test/Util.Localization.Tests.Integration/Util.Localization.Tests.Integration.csproj index f4e3d8988..bb07a090b 100644 --- a/test/Util.Localization.Tests.Integration/Util.Localization.Tests.Integration.csproj +++ b/test/Util.Localization.Tests.Integration/Util.Localization.Tests.Integration.csproj @@ -11,14 +11,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Localization.Tests/Util.Localization.Tests.csproj b/test/Util.Localization.Tests/Util.Localization.Tests.csproj index 7a1a170ef..e706bab6e 100644 --- a/test/Util.Localization.Tests/Util.Localization.Tests.csproj +++ b/test/Util.Localization.Tests/Util.Localization.Tests.csproj @@ -7,14 +7,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Logging.Serilog.Exceptionless.Tests.Integration/Util.Logging.Serilog.Exceptionless.Tests.Integration.csproj b/test/Util.Logging.Serilog.Exceptionless.Tests.Integration/Util.Logging.Serilog.Exceptionless.Tests.Integration.csproj index cffeab7fe..5c736c752 100644 --- a/test/Util.Logging.Serilog.Exceptionless.Tests.Integration/Util.Logging.Serilog.Exceptionless.Tests.Integration.csproj +++ b/test/Util.Logging.Serilog.Exceptionless.Tests.Integration/Util.Logging.Serilog.Exceptionless.Tests.Integration.csproj @@ -11,13 +11,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Logging.Serilog.Tests.Integration/Util.Logging.Serilog.Tests.Integration.csproj b/test/Util.Logging.Serilog.Tests.Integration/Util.Logging.Serilog.Tests.Integration.csproj index c1a3bd6a3..c803eb818 100644 --- a/test/Util.Logging.Serilog.Tests.Integration/Util.Logging.Serilog.Tests.Integration.csproj +++ b/test/Util.Logging.Serilog.Tests.Integration/Util.Logging.Serilog.Tests.Integration.csproj @@ -11,13 +11,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Logging.Tests/Util.Logging.Tests.csproj b/test/Util.Logging.Tests/Util.Logging.Tests.csproj index 8a3b43eb0..d507b3173 100644 --- a/test/Util.Logging.Tests/Util.Logging.Tests.csproj +++ b/test/Util.Logging.Tests/Util.Logging.Tests.csproj @@ -6,14 +6,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Microservices.Dapr.Tests.Integration/Util.Microservices.Dapr.Tests.Integration.csproj b/test/Util.Microservices.Dapr.Tests.Integration/Util.Microservices.Dapr.Tests.Integration.csproj index 24e4ea9ef..1c5bd1fde 100644 --- a/test/Util.Microservices.Dapr.Tests.Integration/Util.Microservices.Dapr.Tests.Integration.csproj +++ b/test/Util.Microservices.Dapr.Tests.Integration/Util.Microservices.Dapr.Tests.Integration.csproj @@ -25,18 +25,18 @@ - + - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Microservices.Dapr.Tests/Util.Microservices.Dapr.Tests.csproj b/test/Util.Microservices.Dapr.Tests/Util.Microservices.Dapr.Tests.csproj index e77eee1db..c7b2fef85 100644 --- a/test/Util.Microservices.Dapr.Tests/Util.Microservices.Dapr.Tests.csproj +++ b/test/Util.Microservices.Dapr.Tests/Util.Microservices.Dapr.Tests.csproj @@ -7,14 +7,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Microservices.Polly.Tests.Integration/Util.Microservices.Polly.Tests.Integration.csproj b/test/Util.Microservices.Polly.Tests.Integration/Util.Microservices.Polly.Tests.Integration.csproj index 46a976ace..3b2557ffb 100644 --- a/test/Util.Microservices.Polly.Tests.Integration/Util.Microservices.Polly.Tests.Integration.csproj +++ b/test/Util.Microservices.Polly.Tests.Integration/Util.Microservices.Polly.Tests.Integration.csproj @@ -8,15 +8,15 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.ObjectMapping.AutoMapper.Tests/Util.ObjectMapping.AutoMapper.Tests.csproj b/test/Util.ObjectMapping.AutoMapper.Tests/Util.ObjectMapping.AutoMapper.Tests.csproj index 72f6b07f0..0d2e98802 100644 --- a/test/Util.ObjectMapping.AutoMapper.Tests/Util.ObjectMapping.AutoMapper.Tests.csproj +++ b/test/Util.ObjectMapping.AutoMapper.Tests/Util.ObjectMapping.AutoMapper.Tests.csproj @@ -6,16 +6,16 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Scheduling.Hangfire.Tests.Integration/Util.Scheduling.Hangfire.Tests.Integration.csproj b/test/Util.Scheduling.Hangfire.Tests.Integration/Util.Scheduling.Hangfire.Tests.Integration.csproj index 9557c913a..60ac4ce10 100644 --- a/test/Util.Scheduling.Hangfire.Tests.Integration/Util.Scheduling.Hangfire.Tests.Integration.csproj +++ b/test/Util.Scheduling.Hangfire.Tests.Integration/Util.Scheduling.Hangfire.Tests.Integration.csproj @@ -10,24 +10,24 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all - + diff --git a/test/Util.Scheduling.Quartz.Tests.Integration/Util.Scheduling.Quartz.Tests.Integration.csproj b/test/Util.Scheduling.Quartz.Tests.Integration/Util.Scheduling.Quartz.Tests.Integration.csproj index 3561da612..de4889802 100644 --- a/test/Util.Scheduling.Quartz.Tests.Integration/Util.Scheduling.Quartz.Tests.Integration.csproj +++ b/test/Util.Scheduling.Quartz.Tests.Integration/Util.Scheduling.Quartz.Tests.Integration.csproj @@ -24,17 +24,17 @@ - + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Security.Tests/Util.Security.Tests.csproj b/test/Util.Security.Tests/Util.Security.Tests.csproj index 910403e8c..1094b1f14 100644 --- a/test/Util.Security.Tests/Util.Security.Tests.csproj +++ b/test/Util.Security.Tests/Util.Security.Tests.csproj @@ -6,13 +6,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Templates.Handlebars.Tests.Integration/Util.Templates.Handlebars.Tests.Integration.csproj b/test/Util.Templates.Handlebars.Tests.Integration/Util.Templates.Handlebars.Tests.Integration.csproj index e0fe18a0d..a9a8ce130 100644 --- a/test/Util.Templates.Handlebars.Tests.Integration/Util.Templates.Handlebars.Tests.Integration.csproj +++ b/test/Util.Templates.Handlebars.Tests.Integration/Util.Templates.Handlebars.Tests.Integration.csproj @@ -9,13 +9,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Templates.Razor.Tests.Integration/Util.Templates.Razor.Tests.Integration.csproj b/test/Util.Templates.Razor.Tests.Integration/Util.Templates.Razor.Tests.Integration.csproj index 889289104..686495fa8 100644 --- a/test/Util.Templates.Razor.Tests.Integration/Util.Templates.Razor.Tests.Integration.csproj +++ b/test/Util.Templates.Razor.Tests.Integration/Util.Templates.Razor.Tests.Integration.csproj @@ -9,13 +9,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Tenants.Tests.Integration/Util.Tenants.Tests.Integration.csproj b/test/Util.Tenants.Tests.Integration/Util.Tenants.Tests.Integration.csproj index 2022b7617..91869eb7f 100644 --- a/test/Util.Tenants.Tests.Integration/Util.Tenants.Tests.Integration.csproj +++ b/test/Util.Tenants.Tests.Integration/Util.Tenants.Tests.Integration.csproj @@ -12,14 +12,14 @@ - - - - + + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Tenants.Tests/Util.Tenants.Tests.csproj b/test/Util.Tenants.Tests/Util.Tenants.Tests.csproj index 6a2921694..3c9b2593e 100644 --- a/test/Util.Tenants.Tests/Util.Tenants.Tests.csproj +++ b/test/Util.Tenants.Tests/Util.Tenants.Tests.csproj @@ -6,14 +6,14 @@ - + - - + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Ui.NgAlain.Tests/Util.Ui.NgAlain.Tests.csproj b/test/Util.Ui.NgAlain.Tests/Util.Ui.NgAlain.Tests.csproj index ce32488cb..f97dd2a55 100644 --- a/test/Util.Ui.NgAlain.Tests/Util.Ui.NgAlain.Tests.csproj +++ b/test/Util.Ui.NgAlain.Tests/Util.Ui.NgAlain.Tests.csproj @@ -9,13 +9,13 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive all - + runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.Expression.cs b/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.Expression.cs index 85c0dd4b0..80a5ef340 100644 --- a/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.Expression.cs +++ b/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.Expression.cs @@ -1,4 +1,5 @@ using System.Text; +using Util.Ui.Configs; using Xunit; namespace Util.Ui.NgZorro.Tests.DatePickers { @@ -26,5 +27,28 @@ public void TestFor_1() { result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } + + /// + /// 测试解析表达式属性for-begin,for-end + /// + [Fact] + public void TestForBegin_ForEnd_1() { + _wrapper.SetExpression( UiConst.ForBegin, t => t.BeginBirthday ); + _wrapper.SetExpression( UiConst.ForEnd, t => t.EndBirthday ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "出生日期" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{v_id.getErrorMessage()}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.cs index f467e984c..65e31803b 100644 --- a/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.cs +++ b/test/Util.Ui.NgZorro.Tests/DatePickers/RangePickerTagHelperTest.cs @@ -490,5 +490,45 @@ public void TestSpaceItem() { result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } + + /// + /// 测试起始日期 + /// + [Fact] + public void TestBeginDate_1() { + _wrapper.SetContextAttribute( UiConst.BeginDate, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试起始日期 - 设置日期变更事件 + /// + [Fact] + public void TestBeginDate_2() { + _wrapper.SetContextAttribute( UiConst.BeginDate, "a" ); + _wrapper.SetContextAttribute( UiConst.OnCalendarChange, "b" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试结束日期 + /// + [Fact] + public void TestEndDate() { + _wrapper.SetContextAttribute( UiConst.EndDate, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Drawers/DrawerContainerTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Drawers/DrawerContainerTagHelperTest.cs new file mode 100644 index 000000000..b01ed7af8 --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Drawers/DrawerContainerTagHelperTest.cs @@ -0,0 +1,105 @@ +using System.Text; +using Util.Ui.Angular.Configs; +using Util.Ui.Configs; +using Util.Ui.NgZorro.Components.Drawers; +using Util.Ui.TagHelpers; +using Xunit; +using Xunit.Abstractions; + +namespace Util.Ui.NgZorro.Tests.Drawers { + /// + /// 抽屉容器测试 + /// + public class DrawerContainerTagHelperTest { + /// + /// 输出工具 + /// + private readonly ITestOutputHelper _output; + /// + /// TagHelper包装器 + /// + private readonly TagHelperWrapper _wrapper; + + /// + /// 测试初始化 + /// + public DrawerContainerTagHelperTest( ITestOutputHelper output ) { + _output = output; + _wrapper = new DrawerContainerTagHelper().ToWrapper(); + } + + /// + /// 获取结果 + /// + private string GetResult() { + var result = _wrapper.GetResult(); + _output.WriteLine( result ); + return result; + } + + /// + /// 测试默认输出 + /// + [Fact] + public void TestDefault() { + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最小宽度 + /// + [Fact] + public void TestMinWidth() { + _wrapper.SetContextAttribute( UiConst.MinWidth, 1 ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最小宽度 + /// + [Fact] + public void TestBindMinWidth() { + _wrapper.SetContextAttribute( AngularConst.BindMinWidth, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最大宽度 + /// + [Fact] + public void TestMaxWidth() { + _wrapper.SetContextAttribute( UiConst.MaxWidth, 1 ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最大宽度 + /// + [Fact] + public void TestBindMaxWidth() { + _wrapper.SetContextAttribute( AngularConst.BindMaxWidth, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试内容 + /// + [Fact] + public void TestContent() { + _wrapper.AppendContent( "a" ); + var result = new StringBuilder(); + result.Append( "a" ); + Assert.Equal( result.ToString(), GetResult() ); + } + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Modals/DialogContainerTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Modals/DialogContainerTagHelperTest.cs new file mode 100644 index 000000000..34bc0cae1 --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Modals/DialogContainerTagHelperTest.cs @@ -0,0 +1,105 @@ +using System.Text; +using Util.Ui.Angular.Configs; +using Util.Ui.Configs; +using Util.Ui.NgZorro.Components.Modals; +using Util.Ui.TagHelpers; +using Xunit; +using Xunit.Abstractions; + +namespace Util.Ui.NgZorro.Tests.Modals; + +/// +/// 对话框容器测试 +/// +public class DialogContainerTagHelperTest { + /// + /// 输出工具 + /// + private readonly ITestOutputHelper _output; + /// + /// TagHelper包装器 + /// + private readonly TagHelperWrapper _wrapper; + + /// + /// 测试初始化 + /// + public DialogContainerTagHelperTest( ITestOutputHelper output ) { + _output = output; + _wrapper = new DialogContainerTagHelper().ToWrapper(); + } + + /// + /// 获取结果 + /// + private string GetResult() { + var result = _wrapper.GetResult(); + _output.WriteLine( result ); + return result; + } + + /// + /// 测试默认输出 + /// + [Fact] + public void TestDefault() { + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最小宽度 + /// + [Fact] + public void TestMinWidth() { + _wrapper.SetContextAttribute( UiConst.MinWidth, 1 ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最小宽度 + /// + [Fact] + public void TestBindMinWidth() { + _wrapper.SetContextAttribute( AngularConst.BindMinWidth, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最大宽度 + /// + [Fact] + public void TestMaxWidth() { + _wrapper.SetContextAttribute( UiConst.MaxWidth, 1 ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试最大宽度 + /// + [Fact] + public void TestBindMaxWidth() { + _wrapper.SetContextAttribute( AngularConst.BindMaxWidth, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试内容 + /// + [Fact] + public void TestContent() { + _wrapper.AppendContent( "a" ); + var result = new StringBuilder(); + result.Append( "a" ); + Assert.Equal( result.ToString(), GetResult() ); + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Modals/ModalFooterTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Modals/ModalFooterTagHelperTest.cs index 01978ba3a..6e98b76d3 100644 --- a/test/Util.Ui.NgZorro.Tests/Modals/ModalFooterTagHelperTest.cs +++ b/test/Util.Ui.NgZorro.Tests/Modals/ModalFooterTagHelperTest.cs @@ -4,56 +4,56 @@ using Xunit; using Xunit.Abstractions; -namespace Util.Ui.NgZorro.Tests.Modals { +namespace Util.Ui.NgZorro.Tests.Modals; + +/// +/// 对话框页脚测试 +/// +public class ModalFooterTagHelperTest { + /// + /// 输出工具 + /// + private readonly ITestOutputHelper _output; /// - /// 对话框页脚测试 + /// TagHelper包装器 /// - public class ModalFooterTagHelperTest { - /// - /// 输出工具 - /// - private readonly ITestOutputHelper _output; - /// - /// TagHelper包装器 - /// - private readonly TagHelperWrapper _wrapper; + private readonly TagHelperWrapper _wrapper; - /// - /// 测试初始化 - /// - public ModalFooterTagHelperTest( ITestOutputHelper output ) { - _output = output; - _wrapper = new ModalFooterTagHelper().ToWrapper(); - } + /// + /// 测试初始化 + /// + public ModalFooterTagHelperTest( ITestOutputHelper output ) { + _output = output; + _wrapper = new ModalFooterTagHelper().ToWrapper(); + } - /// - /// 获取结果 - /// - private string GetResult() { - var result = _wrapper.GetResult(); - _output.WriteLine( result ); - return result; - } + /// + /// 获取结果 + /// + private string GetResult() { + var result = _wrapper.GetResult(); + _output.WriteLine( result ); + return result; + } - /// - /// 测试默认输出 - /// - [Fact] - public void TestDefault() { - var result = new StringBuilder(); - result.Append( "
" ); - Assert.Equal( result.ToString(), GetResult() ); - } + /// + /// 测试默认输出 + /// + [Fact] + public void TestDefault() { + var result = new StringBuilder(); + result.Append( "
" ); + Assert.Equal( result.ToString(), GetResult() ); + } - /// - /// 测试内容 - /// - [Fact] - public void TestAppendContent() { - _wrapper.AppendContent( "a" ); - var result = new StringBuilder(); - result.Append( "
a
" ); - Assert.Equal( result.ToString(), GetResult() ); - } + /// + /// 测试内容 + /// + [Fact] + public void TestAppendContent() { + _wrapper.AppendContent( "a" ); + var result = new StringBuilder(); + result.Append( "
a
" ); + Assert.Equal( result.ToString(), GetResult() ); } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Modals/ModalTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Modals/ModalTagHelperTest.cs index 5702ea8c9..d482f2afd 100644 --- a/test/Util.Ui.NgZorro.Tests/Modals/ModalTagHelperTest.cs +++ b/test/Util.Ui.NgZorro.Tests/Modals/ModalTagHelperTest.cs @@ -7,639 +7,639 @@ using Xunit; using Xunit.Abstractions; -namespace Util.Ui.NgZorro.Tests.Modals { - /// - /// 对话框测试 - /// - public class ModalTagHelperTest { - /// - /// 输出工具 - /// - private readonly ITestOutputHelper _output; - /// - /// TagHelper包装器 - /// - private readonly TagHelperWrapper _wrapper; - - /// - /// 测试初始化 - /// - public ModalTagHelperTest( ITestOutputHelper output ) { - _output = output; - _wrapper = new ModalTagHelper().ToWrapper(); - } - - /// - /// 获取结果 - /// - private string GetResult() { - var result = _wrapper.GetResult(); - _output.WriteLine( result ); - return result; - } - - /// - /// 测试默认输出 - /// - [Fact] - public void TestDefault() { - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否显示遮罩 - /// - [Fact] - public void TestMask() { - _wrapper.SetContextAttribute( UiConst.Mask, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否显示遮罩 - /// - [Fact] - public void TestBindMask() { - _wrapper.SetContextAttribute( AngularConst.BindMask, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试点击遮罩是否允许关闭 - /// - [Fact] - public void TestMaskClosable() { - _wrapper.SetContextAttribute( UiConst.MaskClosable, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试点击遮罩是否允许关闭 - /// - [Fact] - public void TestBindMaskClosable() { - _wrapper.SetContextAttribute( AngularConst.BindMaskClosable, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试导航时是否关闭 - /// - [Fact] - public void TestCloseOnNavigation() { - _wrapper.SetContextAttribute( UiConst.CloseOnNavigation, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试导航时是否关闭 - /// - [Fact] - public void TestBindCloseOnNavigation() { - _wrapper.SetContextAttribute( AngularConst.BindCloseOnNavigation, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否可见 - /// - [Fact] - public void TestVisible() { - _wrapper.SetContextAttribute( UiConst.Visible, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否可关闭 - /// - [Fact] - public void TestClosable() { - _wrapper.SetContextAttribute( UiConst.Closable, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否可关闭 - /// - [Fact] - public void TestBindClosable() { - _wrapper.SetContextAttribute( AngularConst.BindClosable, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确定按钮是否加载状态 - /// - [Fact] - public void TestOkLoading() { - _wrapper.SetContextAttribute( UiConst.OkLoading, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否禁用确定按钮 - /// - [Fact] - public void TestOkDisabled() { - _wrapper.SetContextAttribute( UiConst.OkDisabled, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否禁用确定按钮 - /// - [Fact] - public void TestBindOkDisabled() { - _wrapper.SetContextAttribute( AngularConst.BindOkDisabled, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试取消按钮是否加载状态 - /// - [Fact] - public void TestCancelLoading() { - _wrapper.SetContextAttribute( UiConst.CancelLoading, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否禁用取消按钮 - /// - [Fact] - public void TestCancelDisabled() { - _wrapper.SetContextAttribute( UiConst.CancelDisabled, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否禁用取消按钮 - /// - [Fact] - public void TestBindCancelDisabled() { - _wrapper.SetContextAttribute( AngularConst.BindCancelDisabled, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否支持键盘ESC键关闭 - /// - [Fact] - public void TestKeyboard() { - _wrapper.SetContextAttribute( UiConst.Keyboard, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否支持键盘ESC键关闭 - /// - [Fact] - public void TestBindKeyboard() { - _wrapper.SetContextAttribute( AngularConst.BindKeyboard, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否垂直居中显示 - /// - [Fact] - public void TestCentered() { - _wrapper.SetContextAttribute( UiConst.Centered, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试是否垂直居中显示 - /// - [Fact] - public void TestBindCentered() { - _wrapper.SetContextAttribute( AngularConst.BindCentered, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试内容 - /// - [Fact] - public void TestContent() { - _wrapper.SetContextAttribute( UiConst.Content, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试组件参数 - /// - [Fact] - public void TestComponentParams() { - _wrapper.SetContextAttribute( UiConst.ComponentParams, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试底部内容 - /// - [Fact] - public void TestFooter() { - _wrapper.SetContextAttribute( UiConst.Footer, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试z-index - /// - [Fact] - public void TestZIndex() { - _wrapper.SetContextAttribute( UiConst.ZIndex, 1 ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试z-index - /// - [Fact] - public void TestBindZIndex() { - _wrapper.SetContextAttribute( AngularConst.BindZIndex, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试宽度 - /// - [Fact] - public void TestWidth() { - _wrapper.SetContextAttribute( UiConst.Width, 1 ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试宽度 - /// - [Fact] - public void TestBindWidth() { - _wrapper.SetContextAttribute( AngularConst.BindWidth, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试对话框外层容器样式类名 - /// - [Fact] - public void TestWrapClassName() { - _wrapper.SetContextAttribute( UiConst.WrapClassName, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试对话框外层容器样式类名 - /// - [Fact] - public void TestBindWrapClassName() { - _wrapper.SetContextAttribute( AngularConst.BindWrapClassName, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试对话框样式类名 - /// - [Fact] - public void TestClassName() { - _wrapper.SetContextAttribute( UiConst.ClassName, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试对话框样式类名 - /// - [Fact] - public void TestBindClassName() { - _wrapper.SetContextAttribute( AngularConst.BindClassName, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试浮层样式 - /// - [Fact] - public void TestModalStyle() { - _wrapper.SetContextAttribute( UiConst.ModalStyle, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试标题 - /// - [Fact] - public void TestTitle() { - _wrapper.SetContextAttribute( UiConst.Title, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试标题 - /// - [Fact] - public void TestBindTitle() { - _wrapper.SetContextAttribute( AngularConst.BindTitle, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试关闭图标 - /// - [Fact] - public void TestCloseIcon() { - _wrapper.SetContextAttribute( UiConst.CloseIcon, AntDesignIcon.AccountBook ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试关闭图标 - /// - [Fact] - public void TestBindCloseIcon() { - _wrapper.SetContextAttribute( AngularConst.BindCloseIcon, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试遮罩样式 - /// - [Fact] - public void TestMaskStyle() { - _wrapper.SetContextAttribute( UiConst.MaskStyle, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试主体样式 - /// - [Fact] - public void TestBodyStyle() { - _wrapper.SetContextAttribute( UiConst.BodyStyle, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确认按钮文字 - /// - [Fact] - public void TestOkText() { - _wrapper.SetContextAttribute( UiConst.OkText, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确认按钮文字 - /// - [Fact] - public void TestBindOkText() { - _wrapper.SetContextAttribute( AngularConst.BindOkText, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试取消按钮文字 - /// - [Fact] - public void TestCancelText() { - _wrapper.SetContextAttribute( UiConst.CancelText, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试取消按钮文字 - /// - [Fact] - public void TestBindCancelText() { - _wrapper.SetContextAttribute( AngularConst.BindCancelText, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确认按钮类型 - /// - [Fact] - public void TestOkType() { - _wrapper.SetContextAttribute( UiConst.OkType, ButtonType.Primary ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确认按钮类型 - /// - [Fact] - public void TestBindOkType() { - _wrapper.SetContextAttribute( AngularConst.BindOkType, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确认按钮是否为危险按钮 - /// - [Fact] - public void TestOkDanger() { - _wrapper.SetContextAttribute( UiConst.OkDanger, true ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确认按钮是否为危险按钮 - /// - [Fact] - public void TestBindOkDanger() { - _wrapper.SetContextAttribute( AngularConst.BindOkDanger, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试图标类型 - /// - [Fact] - public void TestIconType() { - _wrapper.SetContextAttribute( UiConst.IconType, AntDesignIcon.AccountBook ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试图标类型 - /// - [Fact] - public void TestBindIconType() { - _wrapper.SetContextAttribute( AngularConst.BindIconType, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试自动聚焦 - /// - [Fact] - public void TestAutofocus() { - _wrapper.SetContextAttribute( UiConst.Autofocus, ModalAutofocus.Cancel ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试自动聚焦 - /// - [Fact] - public void TestBindAutofocus() { - _wrapper.SetContextAttribute( AngularConst.BindAutofocus, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试子内容 - /// - [Fact] - public void TestAppendContent() { - _wrapper.AppendContent( "a" ); - var result = new StringBuilder(); - result.Append( "a" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试确定事件 - /// - [Fact] - public void TestOnOk() { - _wrapper.SetContextAttribute( UiConst.OnOk, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试取消事件 - /// - [Fact] - public void TestOnCancel() { - _wrapper.SetContextAttribute( UiConst.OnCancel, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试打开后事件 - /// - [Fact] - public void TestOnAfterOpen() { - _wrapper.SetContextAttribute( UiConst.OnAfterOpen, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试关闭后事件 - /// - [Fact] - public void TestOnAfterClose() { - _wrapper.SetContextAttribute( UiConst.OnAfterClose, "a" ); - var result = new StringBuilder(); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } +namespace Util.Ui.NgZorro.Tests.Modals; + +/// +/// 对话框测试 +/// +public class ModalTagHelperTest { + /// + /// 输出工具 + /// + private readonly ITestOutputHelper _output; + /// + /// TagHelper包装器 + /// + private readonly TagHelperWrapper _wrapper; + + /// + /// 测试初始化 + /// + public ModalTagHelperTest( ITestOutputHelper output ) { + _output = output; + _wrapper = new ModalTagHelper().ToWrapper(); + } + + /// + /// 获取结果 + /// + private string GetResult() { + var result = _wrapper.GetResult(); + _output.WriteLine( result ); + return result; + } + + /// + /// 测试默认输出 + /// + [Fact] + public void TestDefault() { + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否显示遮罩 + /// + [Fact] + public void TestMask() { + _wrapper.SetContextAttribute( UiConst.Mask, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否显示遮罩 + /// + [Fact] + public void TestBindMask() { + _wrapper.SetContextAttribute( AngularConst.BindMask, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试点击遮罩是否允许关闭 + /// + [Fact] + public void TestMaskClosable() { + _wrapper.SetContextAttribute( UiConst.MaskClosable, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试点击遮罩是否允许关闭 + /// + [Fact] + public void TestBindMaskClosable() { + _wrapper.SetContextAttribute( AngularConst.BindMaskClosable, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试导航时是否关闭 + /// + [Fact] + public void TestCloseOnNavigation() { + _wrapper.SetContextAttribute( UiConst.CloseOnNavigation, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试导航时是否关闭 + /// + [Fact] + public void TestBindCloseOnNavigation() { + _wrapper.SetContextAttribute( AngularConst.BindCloseOnNavigation, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否可见 + /// + [Fact] + public void TestVisible() { + _wrapper.SetContextAttribute( UiConst.Visible, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否可关闭 + /// + [Fact] + public void TestClosable() { + _wrapper.SetContextAttribute( UiConst.Closable, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否可关闭 + /// + [Fact] + public void TestBindClosable() { + _wrapper.SetContextAttribute( AngularConst.BindClosable, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确定按钮是否加载状态 + /// + [Fact] + public void TestOkLoading() { + _wrapper.SetContextAttribute( UiConst.OkLoading, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否禁用确定按钮 + /// + [Fact] + public void TestOkDisabled() { + _wrapper.SetContextAttribute( UiConst.OkDisabled, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否禁用确定按钮 + /// + [Fact] + public void TestBindOkDisabled() { + _wrapper.SetContextAttribute( AngularConst.BindOkDisabled, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试取消按钮是否加载状态 + /// + [Fact] + public void TestCancelLoading() { + _wrapper.SetContextAttribute( UiConst.CancelLoading, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否禁用取消按钮 + /// + [Fact] + public void TestCancelDisabled() { + _wrapper.SetContextAttribute( UiConst.CancelDisabled, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否禁用取消按钮 + /// + [Fact] + public void TestBindCancelDisabled() { + _wrapper.SetContextAttribute( AngularConst.BindCancelDisabled, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否支持键盘ESC键关闭 + /// + [Fact] + public void TestKeyboard() { + _wrapper.SetContextAttribute( UiConst.Keyboard, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否支持键盘ESC键关闭 + /// + [Fact] + public void TestBindKeyboard() { + _wrapper.SetContextAttribute( AngularConst.BindKeyboard, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否垂直居中显示 + /// + [Fact] + public void TestCentered() { + _wrapper.SetContextAttribute( UiConst.Centered, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试是否垂直居中显示 + /// + [Fact] + public void TestBindCentered() { + _wrapper.SetContextAttribute( AngularConst.BindCentered, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试内容 + /// + [Fact] + public void TestContent() { + _wrapper.SetContextAttribute( UiConst.Content, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试组件参数 + /// + [Fact] + public void TestComponentParams() { + _wrapper.SetContextAttribute( UiConst.ComponentParams, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试底部内容 + /// + [Fact] + public void TestFooter() { + _wrapper.SetContextAttribute( UiConst.Footer, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试z-index + /// + [Fact] + public void TestZIndex() { + _wrapper.SetContextAttribute( UiConst.ZIndex, 1 ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试z-index + /// + [Fact] + public void TestBindZIndex() { + _wrapper.SetContextAttribute( AngularConst.BindZIndex, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试宽度 + /// + [Fact] + public void TestWidth() { + _wrapper.SetContextAttribute( UiConst.Width, 1 ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试宽度 + /// + [Fact] + public void TestBindWidth() { + _wrapper.SetContextAttribute( AngularConst.BindWidth, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试对话框外层容器样式类名 + /// + [Fact] + public void TestWrapClassName() { + _wrapper.SetContextAttribute( UiConst.WrapClassName, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试对话框外层容器样式类名 + /// + [Fact] + public void TestBindWrapClassName() { + _wrapper.SetContextAttribute( AngularConst.BindWrapClassName, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试对话框样式类名 + /// + [Fact] + public void TestClassName() { + _wrapper.SetContextAttribute( UiConst.ClassName, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试对话框样式类名 + /// + [Fact] + public void TestBindClassName() { + _wrapper.SetContextAttribute( AngularConst.BindClassName, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试浮层样式 + /// + [Fact] + public void TestModalStyle() { + _wrapper.SetContextAttribute( UiConst.ModalStyle, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试标题 + /// + [Fact] + public void TestTitle() { + _wrapper.SetContextAttribute( UiConst.Title, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试标题 + /// + [Fact] + public void TestBindTitle() { + _wrapper.SetContextAttribute( AngularConst.BindTitle, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试关闭图标 + /// + [Fact] + public void TestCloseIcon() { + _wrapper.SetContextAttribute( UiConst.CloseIcon, AntDesignIcon.AccountBook ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试关闭图标 + /// + [Fact] + public void TestBindCloseIcon() { + _wrapper.SetContextAttribute( AngularConst.BindCloseIcon, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试遮罩样式 + /// + [Fact] + public void TestMaskStyle() { + _wrapper.SetContextAttribute( UiConst.MaskStyle, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试主体样式 + /// + [Fact] + public void TestBodyStyle() { + _wrapper.SetContextAttribute( UiConst.BodyStyle, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确认按钮文字 + /// + [Fact] + public void TestOkText() { + _wrapper.SetContextAttribute( UiConst.OkText, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确认按钮文字 + /// + [Fact] + public void TestBindOkText() { + _wrapper.SetContextAttribute( AngularConst.BindOkText, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试取消按钮文字 + /// + [Fact] + public void TestCancelText() { + _wrapper.SetContextAttribute( UiConst.CancelText, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试取消按钮文字 + /// + [Fact] + public void TestBindCancelText() { + _wrapper.SetContextAttribute( AngularConst.BindCancelText, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确认按钮类型 + /// + [Fact] + public void TestOkType() { + _wrapper.SetContextAttribute( UiConst.OkType, ButtonType.Primary ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确认按钮类型 + /// + [Fact] + public void TestBindOkType() { + _wrapper.SetContextAttribute( AngularConst.BindOkType, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确认按钮是否为危险按钮 + /// + [Fact] + public void TestOkDanger() { + _wrapper.SetContextAttribute( UiConst.OkDanger, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确认按钮是否为危险按钮 + /// + [Fact] + public void TestBindOkDanger() { + _wrapper.SetContextAttribute( AngularConst.BindOkDanger, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试图标类型 + /// + [Fact] + public void TestIconType() { + _wrapper.SetContextAttribute( UiConst.IconType, AntDesignIcon.AccountBook ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试图标类型 + /// + [Fact] + public void TestBindIconType() { + _wrapper.SetContextAttribute( AngularConst.BindIconType, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试自动聚焦 + /// + [Fact] + public void TestAutofocus() { + _wrapper.SetContextAttribute( UiConst.Autofocus, ModalAutofocus.Cancel ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试自动聚焦 + /// + [Fact] + public void TestBindAutofocus() { + _wrapper.SetContextAttribute( AngularConst.BindAutofocus, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试子内容 + /// + [Fact] + public void TestAppendContent() { + _wrapper.AppendContent( "a" ); + var result = new StringBuilder(); + result.Append( "a" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试确定事件 + /// + [Fact] + public void TestOnOk() { + _wrapper.SetContextAttribute( UiConst.OnOk, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试取消事件 + /// + [Fact] + public void TestOnCancel() { + _wrapper.SetContextAttribute( UiConst.OnCancel, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试打开后事件 + /// + [Fact] + public void TestOnAfterOpen() { + _wrapper.SetContextAttribute( UiConst.OnAfterOpen, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试关闭后事件 + /// + [Fact] + public void TestOnAfterClose() { + _wrapper.SetContextAttribute( UiConst.OnAfterClose, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Samples/Customer.cs b/test/Util.Ui.NgZorro.Tests/Samples/Customer.cs index 7de79f3c2..5c32e93a5 100644 --- a/test/Util.Ui.NgZorro.Tests/Samples/Customer.cs +++ b/test/Util.Ui.NgZorro.Tests/Samples/Customer.cs @@ -92,5 +92,16 @@ public class Customer { [Description( "正则表达式" )] [RegularExpression( "a", ErrorMessage = "正则表达式错误" )] public string Regex { get; set; } + /// + /// 起始出生日期 + /// + [Description( "出生日期" )] + [Required] + public DateTime? BeginBirthday { get; set; } + /// + /// 结束出生日期 + /// + [Description( "结束出生日期" )] + public DateTime? EndBirthday { get; set; } } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Expression.cs b/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Expression.cs new file mode 100644 index 000000000..6859f561f --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Expression.cs @@ -0,0 +1,29 @@ +using System.Text; +using Xunit; + +namespace Util.Ui.NgZorro.Tests.Segments { + /// + /// 分段控制器测试 - 表达式解析测试 + /// + public partial class SegmentedTagHelperTest { + /// + /// 测试解析表达式属性for - 布尔 + /// + [Fact] + public void TestFor_Bool() { + _wrapper.SetExpression( t => t.Enabled ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "启用" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Extend.cs b/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Extend.cs new file mode 100644 index 000000000..79a2e51af --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.Extend.cs @@ -0,0 +1,151 @@ +using System.Text; +using Util.Ui.Angular.Configs; +using Util.Ui.Configs; +using Xunit; + +namespace Util.Ui.NgZorro.Tests.Segments { + /// + /// 分段控制器测试 - 指令扩展 + /// + public partial class SegmentedTagHelperTest { + + #region EnableExtend + + /// + /// 测试启用扩展指令 + /// + [Fact] + public void TestEnableExtend_1() { + _wrapper.SetContextAttribute( UiConst.EnableExtend, true ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用扩展指令 - 不启用 + /// + [Fact] + public void TestEnableExtend_2() { + _wrapper.SetContextAttribute( UiConst.EnableExtend, false ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + + #region AutoLoad + + /// + /// 测试初始化时是否自动加载数据 + /// + [Fact] + public void TestAutoLoad() { + _wrapper.SetContextAttribute( UiConst.AutoLoad, false ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + + #region Value + + /// + /// 测试值绑定 + /// + [Fact] + public void TestValue() { + _wrapper.SetContextAttribute( UiConst.Value, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + + #region QueryParam + + /// + /// 测试查询参数 + /// + [Fact] + public void TestQueryParam() { + _wrapper.SetContextAttribute( UiConst.QueryParam, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + + #region Url + + /// + /// 测试Api地址 + /// + [Fact] + public void TestUrl_1() { + _wrapper.SetContextAttribute( UiConst.Url, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试Api地址 + /// + [Fact] + public void TestBindUrl() { + _wrapper.SetContextAttribute( AngularConst.BindUrl, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + + #region Data + + /// + /// 测试数据源 + /// + [Fact] + public void TestData() { + _wrapper.SetContextAttribute( UiConst.Data, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + + #region OnLoad + + /// + /// 测试数据加载完成事件 + /// + [Fact] + public void TestOnLoad() { + _wrapper.SetContextAttribute( UiConst.OnLoad, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.cs new file mode 100644 index 000000000..a4f8d5a80 --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Segments/SegmentedTagHelperTest.cs @@ -0,0 +1,184 @@ +using System; +using System.Text; +using Util.Helpers; +using Util.Ui.Angular.Configs; +using Util.Ui.Configs; +using Util.Ui.NgZorro.Components.Segments; +using Util.Ui.NgZorro.Configs; +using Util.Ui.NgZorro.Enums; +using Util.Ui.NgZorro.Tests.Samples; +using Util.Ui.TagHelpers; +using Xunit; +using Xunit.Abstractions; + +namespace Util.Ui.NgZorro.Tests.Segments { + /// + /// 分段控制器测试 + /// + public partial class SegmentedTagHelperTest : IDisposable { + /// + /// 输出工具 + /// + private readonly ITestOutputHelper _output; + /// + /// TagHelper包装器 + /// + private readonly TagHelperWrapper _wrapper; + + /// + /// 测试初始化 + /// + public SegmentedTagHelperTest( ITestOutputHelper output ) { + _output = output; + _wrapper = new SegmentedTagHelper().ToWrapper(); + Id.SetId( "id" ); + } + + /// + /// 测试清理 + /// + public void Dispose() { + NgZorroOptionsService.ClearOptions(); + } + + /// + /// 获取结果 + /// + private string GetResult() { + var result = _wrapper.GetResult(); + _output.WriteLine( result ); + return result; + } + + /// + /// 测试默认输出 + /// + [Fact] + public void TestDefault() { + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试模型绑定 + /// + [Fact] + public void TestNgModel() { + _wrapper.SetContextAttribute( AngularConst.NgModel, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试禁用 + /// + [Fact] + public void TestDisabled() { + _wrapper.SetContextAttribute( UiConst.Disabled, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试禁用 + /// + [Fact] + public void TestBindDisabled() { + _wrapper.SetContextAttribute( AngularConst.BindDisabled, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试大小 + /// + [Fact] + public void TestSize() { + _wrapper.SetContextAttribute( UiConst.Size, InputSize.Large ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试大小 + /// + [Fact] + public void TestBindSize() { + _wrapper.SetContextAttribute( AngularConst.BindSize, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试选项列表 + /// + [Fact] + public void TestOptions() { + _wrapper.SetContextAttribute( UiConst.Options, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试将宽度调整为父元素宽度 + /// + [Fact] + public void TestBlock() { + _wrapper.SetContextAttribute( UiConst.Block, true ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试将宽度调整为父元素宽度 + /// + [Fact] + public void TestBindBlock() { + _wrapper.SetContextAttribute( AngularConst.BindBlock, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试内容 + /// + [Fact] + public void TestContent() { + _wrapper.AppendContent( "a" ); + var result = new StringBuilder(); + result.Append( "a" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试模型变更事件 + /// + [Fact] + public void TestOnModelChange() { + _wrapper.SetContextAttribute( UiConst.OnModelChange, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试值变更事件 + /// + [Fact] + public void TestOnValueChange() { + _wrapper.SetContextAttribute( UiConst.OnValueChange, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.Extend.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.Extend.cs index 912892024..3514b9166 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.Extend.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.Extend.cs @@ -157,19 +157,19 @@ public void TestTitle_Left() { _wrapper.AppendContent( "b" ); //固定到左侧 - _wrapper.SetContextAttribute( UiConst.Left, true ); + _wrapper.SetContextAttribute( UiConst.Left, "10px" ); //结果 var result = new StringBuilder(); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "b" ); + result.Append( "b" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); @@ -269,19 +269,19 @@ public void TestTitleOperation_Right() { _wrapper.AppendContent( "b" ); //固定到右侧 - _wrapper.SetContextAttribute( UiConst.Right, true ); + _wrapper.SetContextAttribute( UiConst.Right, "10px" ); //结果 var result = new StringBuilder(); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "Operation" ); + result.Append( "Operation" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "b" ); + result.Append( "b" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.cs index cbfc4e30f..e068d87b4 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableColumnTagHelperTest.cs @@ -200,9 +200,9 @@ public void TestBindonExpand() { /// [Fact] public void TestLeft() { - _wrapper.SetContextAttribute( UiConst.Left, true ); + _wrapper.SetContextAttribute( UiConst.Left, "a" ); var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -222,9 +222,9 @@ public void TestBindLeft() { /// [Fact] public void TestRight() { - _wrapper.SetContextAttribute( UiConst.Right, true ); + _wrapper.SetContextAttribute( UiConst.Right, "10px" ); var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.Extend.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.Extend.cs index bb320055c..068ea7df3 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.Extend.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.Extend.cs @@ -1,7 +1,9 @@ using System.Text; +using Util.Ui.Angular.Configs; using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables.Configs; using Util.Ui.NgZorro.Configs; +using Util.Ui.NgZorro.Enums; using Xunit; namespace Util.Ui.NgZorro.Tests.Tables; @@ -65,6 +67,32 @@ public void TestTitleOperation_I18n() { #endregion + #region TitleAlign + + /// + /// 测试标题对齐方式 + /// + [Fact] + public void TestTitleAlign() { + _wrapper.SetContextAttribute( UiConst.TitleAlign, TableHeadColumnAlign.Center ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试标题对齐方式 + /// + [Fact] + public void TestBindTitleAlign() { + _wrapper.SetContextAttribute( AngularConst.BindTitleAlign, "a" ); + var result = new StringBuilder(); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + #endregion + #region Checkbox /// diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.cs index a6eaa3aa1..389abb14d 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableHeadColumnTagHelperTest.cs @@ -354,9 +354,9 @@ public void TestBindWidth() { /// [Fact] public void TestLeft() { - _wrapper.SetContextAttribute( UiConst.Left, true ); + _wrapper.SetContextAttribute( UiConst.Left, "a" ); var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -376,9 +376,9 @@ public void TestBindLeft() { /// [Fact] public void TestRight() { - _wrapper.SetContextAttribute( UiConst.Right, true ); + _wrapper.SetContextAttribute( UiConst.Right, "true" ); var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Checkbox.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Checkbox.cs index 39726283e..858278672 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Checkbox.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Checkbox.cs @@ -3,7 +3,7 @@ using Util.Ui.NgZorro.Components.Tables; using Xunit; -namespace Util.Ui.NgZorro.Tests.Tables; +namespace Util.Ui.NgZorro.Tests.Tables; /// /// 表格测试 - 复选框 @@ -57,7 +57,7 @@ public void TestShowCheckbox_1() { } /// - /// 测试设置复选框 - 手工创建完整结构 + /// 测试设置复选框 - 创建完整结构 /// [Fact] public void TestShowCheckbox_2() { @@ -108,7 +108,7 @@ public void TestShowCheckbox_2() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); @@ -171,7 +171,7 @@ public void TestShowCheckbox_3() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); @@ -230,7 +230,7 @@ public void TestShowCheckbox_4() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); @@ -458,7 +458,7 @@ public void TestShowCheckbox_8() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); @@ -473,13 +473,277 @@ public void TestShowCheckbox_8() { Assert.Equal( result.ToString(), GetResult() ); } + /// + /// 测试设置复选框 - 启用自定义列 + /// + [Fact] + public void TestShowCheckbox_9() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置复选框 - 启用自定义列 - 创建完整结构 + /// + [Fact] + public void TestShowCheckbox_10() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置复选框 - 启用自定义列 - 表格设置启用固定列 + /// + [Fact] + public void TestShowCheckbox_11() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置复选框 - 启用自定义列 - 表格设置启用固定列 - 创建完整结构 + /// + [Fact] + public void TestShowCheckbox_12() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + /// /// 测试固定复选框 /// [Fact] public void TestCheckboxLeft_1() { _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); - _wrapper.SetContextAttribute( UiConst.CheckboxLeft, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -497,9 +761,9 @@ public void TestCheckboxLeft_1() { result.Append( "[nzShowSizeChanger]=\"true\" [nzShowTotal]=\"total_id\" [nzTotal]=\"x_id.total\">" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); result.Append( "" ); result.Append( "a" ); @@ -508,7 +772,7 @@ public void TestCheckboxLeft_1() { result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "b" ); @@ -527,7 +791,7 @@ public void TestCheckboxLeft_1() { [Fact] public void TestCheckboxLeft_2() { _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); - _wrapper.SetContextAttribute( UiConst.CheckboxLeft, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -565,18 +829,18 @@ public void TestCheckboxLeft_2() { result.Append( "[nzShowSizeChanger]=\"true\" [nzShowTotal]=\"total_id\" [nzTotal]=\"x_id.total\">" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); result.Append( "" ); result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "b" ); @@ -588,4 +852,270 @@ public void TestCheckboxLeft_2() { //验证 Assert.Equal( result.ToString(), GetResult() ); } + + /// + /// 测试固定复选框 - 启用自定义列 + /// + [Fact] + public void TestCheckboxLeft_3() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定复选框 - 启用自定义列 - 表格设置启用固定列 + /// + [Fact] + public void TestCheckboxLeft_4() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定复选框 - 启用自定义列 - 创建完整结构 + /// + [Fact] + public void TestCheckboxLeft_5() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定复选框 - 启用自定义列 - 表格设置启用固定列 - 创建完整结构 + /// + [Fact] + public void TestCheckboxLeft_6() { + _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.CustomColumn.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.CustomColumn.cs index 67fa02da9..c2f5e6441 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.CustomColumn.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.CustomColumn.cs @@ -14,7 +14,7 @@ public partial class TableTagHelperTest { /// [Fact] public void TestEnableCustomColumn_1() { - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); var result = new StringBuilder(); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); @@ -26,7 +26,8 @@ public void TestEnableCustomColumn_1() { [Fact] public void TestEnableCustomColumn_2() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -36,20 +37,20 @@ public void TestEnableCustomColumn_2() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -60,7 +61,8 @@ public void TestEnableCustomColumn_2() { [Fact] public void TestEnableCustomColumn_3() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -71,20 +73,20 @@ public void TestEnableCustomColumn_3() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -95,42 +97,8 @@ public void TestEnableCustomColumn_3() { [Fact] public void TestEnableCustomColumn_4() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); - - //创建列 - var column = new TableColumnTagHelper().ToWrapper(); - column.SetContextAttribute( UiConst.Title, "a" ); - column.SetContextAttribute( UiConst.Column, "b" ); - column.SetContextAttribute( UiConst.Width, "100" ); - _wrapper.AppendContent( column ); - - //结果 - var result = new StringBuilder(); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "a" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "{{row.b}}" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试启用自定义列 - 添加1列,自动创建表头 - 设置宽度 - px - /// - [Fact] - public void TestEnableCustomColumn_5() { - //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -141,55 +109,20 @@ public void TestEnableCustomColumn_5() { //结果 var result = new StringBuilder(); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "a" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "{{row.b}}" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - result.Append( "" ); - Assert.Equal( result.ToString(), GetResult() ); - } - - /// - /// 测试启用自定义列 - 添加1列,自动创建表头 - 设置宽度 - % - /// - [Fact] - public void TestEnableCustomColumn_6() { - //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); - - //创建列 - var column = new TableColumnTagHelper().ToWrapper(); - column.SetContextAttribute( UiConst.Title, "a" ); - column.SetContextAttribute( UiConst.Column, "b" ); - column.SetContextAttribute( UiConst.Width, "10%" ); - _wrapper.AppendContent( column ); - - //结果 - var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -198,9 +131,10 @@ public void TestEnableCustomColumn_6() { /// 测试启用自定义列 - 添加1列,设置完整结构 /// [Fact] - public void TestEnableCustomColumn_7() { + public void TestEnableCustomColumn_5() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -230,20 +164,20 @@ public void TestEnableCustomColumn_7() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -252,9 +186,10 @@ public void TestEnableCustomColumn_7() { /// 测试启用自定义列 - 添加1列,设置完整结构 - th设置CellControl /// [Fact] - public void TestEnableCustomColumn_8() { + public void TestEnableCustomColumn_6() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -285,20 +220,20 @@ public void TestEnableCustomColumn_8() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -307,9 +242,11 @@ public void TestEnableCustomColumn_8() { /// 测试启用自定义列 - 添加1列,设置完整结构 - td设置宽度 /// [Fact] - public void TestEnableCustomColumn_9() { + public void TestEnableCustomColumn_7() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -340,20 +277,20 @@ public void TestEnableCustomColumn_9() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -362,9 +299,10 @@ public void TestEnableCustomColumn_9() { /// 测试启用自定义列 - 添加1列,设置完整结构 - th设置宽度 /// [Fact] - public void TestEnableCustomColumn_10() { + public void TestEnableCustomColumn_8() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -395,20 +333,20 @@ public void TestEnableCustomColumn_10() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -417,9 +355,10 @@ public void TestEnableCustomColumn_10() { /// 测试启用自定义列 - 添加2列,自动创建表头 /// [Fact] - public void TestEnableCustomColumn_11() { + public void TestEnableCustomColumn_9() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建列1 var column = new TableColumnTagHelper().ToWrapper(); @@ -435,22 +374,22 @@ public void TestEnableCustomColumn_11() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); - result.Append( "c" ); + result.Append( "a" ); + result.Append( "c" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); - result.Append( "{{row.d}}" ); + result.Append( "{{row.b}}" ); + result.Append( "{{row.d}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } @@ -459,9 +398,10 @@ public void TestEnableCustomColumn_11() { /// 测试启用自定义列 - 添加1列,自动创建表头 - 设置acl /// [Fact] - public void TestEnableCustomColumn_12() { + public void TestEnableCustomColumn_10() { //启用自定义列 - _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, "a" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -472,20 +412,167 @@ public void TestEnableCustomColumn_12() { //结果 var result = new StringBuilder(); - result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 未设置key,使用id作为key + /// + [Fact] + public void TestEnableCustomColumn_11() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Id, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 固定到左侧 - 设置完整结构 + /// + [Fact] + public void TestEnableCustomColumn_12() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.Left, "10px" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 固定到右侧 - 设置完整结构 + /// + [Fact] + public void TestEnableCustomColumn_13() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.Right, "10px" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "a" ); + result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.b}}" ); + result.Append( "{{row.b}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); Assert.Equal( result.ToString(), GetResult() ); } diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.EnableFixedColumn.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.EnableFixedColumn.cs new file mode 100644 index 000000000..580985214 --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.EnableFixedColumn.cs @@ -0,0 +1,297 @@ +using System.Text; +using Util.Ui.Configs; +using Util.Ui.NgZorro.Components.Tables; +using Xunit; + +namespace Util.Ui.NgZorro.Tests.Tables; + +/// +/// 表格测试 - 表格设置启用固定列扩展 +/// +public partial class TableTagHelperTest { + /// + /// 测试启用固定列 + /// + [Fact] + public void TestEnableFixedColumn_1() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用固定列 - 设置完整结构 + /// + [Fact] + public void TestEnableFixedColumn_2() { + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用固定列 - 固定到左侧 + /// + [Fact] + public void TestEnableFixedColumn_3() { + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + column.SetContextAttribute( UiConst.Left, "true" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用固定列 - 固定到左侧 - 设置完整结构 + /// + [Fact] + public void TestEnableFixedColumn_4() { + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.Left, true ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用固定列 - 固定到右侧 + /// + [Fact] + public void TestEnableFixedColumn_5() { + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + column.SetContextAttribute( UiConst.Right, true ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用固定列 - 固定到右侧 - 设置完整结构 + /// + [Fact] + public void TestEnableFixedColumn_6() { + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.Right, true ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.LineNumber.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.LineNumber.cs index 3a975df16..d80ad0ff8 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.LineNumber.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.LineNumber.cs @@ -1,10 +1,11 @@ using System.Text; +using Util.Ui.Angular.Configs; using Util.Ui.Configs; using Util.Ui.NgZorro.Components.Tables; using Util.Ui.NgZorro.Configs; using Xunit; -namespace Util.Ui.NgZorro.Tests.Tables; +namespace Util.Ui.NgZorro.Tests.Tables; /// /// 表格测试 - 序号 @@ -151,7 +152,7 @@ public void TestShowLineNumber_3() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "{{row.lineNumber}}" ); result.Append( "b" ); result.Append( "" ); @@ -218,7 +219,7 @@ public void TestShowLineNumber_4() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); @@ -234,6 +235,244 @@ public void TestShowLineNumber_4() { Assert.Equal( result.ToString(), GetResult() ); } + /// + /// 测试设置序号 - 启用自定义列 + /// + [Fact] + public void TestShowLineNumber_5() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置序号 - 启用自定义列 - 创建完整结构 + /// + [Fact] + public void TestShowLineNumber_6() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置序号 - 启用自定义列 - 表格设置启用固定列 + /// + [Fact] + public void TestShowLineNumber_7() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置序号 - 启用自定义列 - 表格设置启用固定列 - 创建完整结构 + /// + [Fact] + public void TestShowLineNumber_8() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + /// /// 测试固定序号 /// @@ -241,7 +480,7 @@ public void TestShowLineNumber_4() { public void TestLineNumberLeft_1() { NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); - _wrapper.SetContextAttribute( UiConst.LineNumberLeft, true ); + _wrapper.SetContextAttribute( UiConst.LineNumberLeft, "10px" ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -259,13 +498,13 @@ public void TestLineNumberLeft_1() { result.Append( "[nzShowSizeChanger]=\"true\" [nzShowTotal]=\"total_id\" [nzTotal]=\"x_id.total\">" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); result.Append( "{{'a'|i18n}}" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.lineNumber}}" ); + result.Append( "{{row.lineNumber}}" ); result.Append( "b" ); result.Append( "" ); result.Append( "" ); @@ -284,8 +523,8 @@ public void TestLineNumberLeft_2() { NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); _wrapper.SetContextAttribute( UiConst.ShowCheckbox, true ); _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); - _wrapper.SetContextAttribute( UiConst.CheckboxLeft, true ); - _wrapper.SetContextAttribute( UiConst.LineNumberLeft, true ); + _wrapper.SetContextAttribute( UiConst.CheckboxLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.LineNumberLeft, "10px" ); //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -306,6 +545,7 @@ public void TestLineNumberLeft_2() { //创建表格主体行 var row = new TableRowTagHelper().ToWrapper(); + row.SetContextAttribute( AngularConst.NgFor, "let row of x_id.dataSource" ); body.AppendContent( row ); //创建列 @@ -323,22 +563,22 @@ public void TestLineNumberLeft_2() { result.Append( "[nzShowSizeChanger]=\"true\" [nzShowTotal]=\"total_id\" [nzTotal]=\"x_id.total\">" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); result.Append( "" ); - result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "{{row.lineNumber}}" ); + result.Append( "{{row.lineNumber}}" ); result.Append( "b" ); result.Append( "" ); result.Append( "" ); @@ -348,4 +588,246 @@ public void TestLineNumberLeft_2() { //验证 Assert.Equal( result.ToString(), GetResult() ); } + + /// + /// 测试固定序号 - 启用自定义列 + /// + [Fact] + public void TestLineNumberLeft_3() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.LineNumberLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定序号 - 启用自定义列 - 表格设置启用固定列 + /// + [Fact] + public void TestLineNumberLeft_4() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.LineNumberLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定序号 - 启用自定义列 - 创建完整结构 + /// + [Fact] + public void TestLineNumberLeft_5() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.LineNumberLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定序号 - 启用自定义列 - 表格设置启用固定列 - 创建完整结构 + /// + [Fact] + public void TestLineNumberLeft_6() { + NgZorroOptionsService.SetOptions( new NgZorroOptions { EnableI18n = true } ); + _wrapper.SetContextAttribute( UiConst.ShowLineNumber, true ); + _wrapper.SetContextAttribute( UiConst.LineNumberLeft, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{'util.lineNumber'|i18n}}" ); + result.Append( "{{'a'|i18n}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.lineNumber}}" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Radio.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Radio.cs index 95bf7f3dc..fefa20ebc 100644 --- a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Radio.cs +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Radio.cs @@ -101,7 +101,7 @@ public void TestShowRadio_2() { } /// - /// 测试设置复选框 - 手工创建完整结构 + /// 测试设置复选框 - 创建完整结构 /// [Fact] public void TestShowRadio_3() { @@ -148,7 +148,7 @@ public void TestShowRadio_3() { result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); @@ -163,13 +163,255 @@ public void TestShowRadio_3() { Assert.Equal( result.ToString(), GetResult() ); } + /// + /// 测试设置单选框 - 启用自定义列 + /// + [Fact] + public void TestShowRadio_4() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置单选框 - 启用自定义列 - 创建完整结构 + /// + [Fact] + public void TestShowRadio_5() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置单选框 - 启用自定义列 - 表格设置启用固定列 + /// + [Fact] + public void TestShowRadio_6() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试设置单选框 - 启用自定义列 - 表格设置启用固定列 - 创建完整结构 + /// + [Fact] + public void TestShowRadio_7() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + /// /// 测试固定单选框 /// [Fact] public void TestRadioLeft_1() { _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); - _wrapper.SetContextAttribute( UiConst.RadioLeft, true ); + _wrapper.SetContextAttribute( UiConst.RadioLeft, "10px" ); //创建列 var column = new TableColumnTagHelper().ToWrapper(); @@ -187,13 +429,13 @@ public void TestRadioLeft_1() { result.Append( "[nzShowSizeChanger]=\"true\" [nzShowTotal]=\"total_id\" [nzTotal]=\"x_id.total\">" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); @@ -208,12 +450,12 @@ public void TestRadioLeft_1() { } /// - /// 测试固定单选框 - 手工创建完整结构 + /// 测试固定单选框 - 创建完整结构 /// [Fact] public void TestRadioLeft_2() { _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); - _wrapper.SetContextAttribute( UiConst.RadioLeft, true ); + _wrapper.SetContextAttribute( UiConst.RadioLeft, "10px" ); //创建表头 var head = new TableHeadTagHelper().ToWrapper(); @@ -251,13 +493,13 @@ public void TestRadioLeft_2() { result.Append( "[nzShowSizeChanger]=\"true\" [nzShowTotal]=\"total_id\" [nzTotal]=\"x_id.total\">" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); + result.Append( "" ); result.Append( "a" ); result.Append( "" ); result.Append( "" ); result.Append( "" ); - result.Append( "" ); - result.Append( "" ); + result.Append( "" ); + result.Append( "" ); result.Append( "" ); result.Append( "" ); @@ -270,4 +512,250 @@ public void TestRadioLeft_2() { //验证 Assert.Equal( result.ToString(), GetResult() ); } + + /// + /// 测试固定单选框 - 启用自定义列 + /// + [Fact] + public void TestRadioLeft_3() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.RadioLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定单选框 - 启用自定义列 - 表格设置启用固定列 + /// + [Fact] + public void TestRadioLeft_4() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.RadioLeft, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.AppendContent( "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定单选框 - 启用自定义列 - 创建完整结构 + /// + [Fact] + public void TestRadioLeft_5() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.RadioLeft, "10px" ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试固定单选框 - 启用自定义列 - 表格设置启用固定列 - 创建完整结构 + /// + [Fact] + public void TestRadioLeft_6() { + _wrapper.SetContextAttribute( UiConst.ShowRadio, true ); + _wrapper.SetContextAttribute( UiConst.RadioLeft, true ); + _wrapper.SetContextAttribute( UiConst.Key, "a" ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + _wrapper.SetContextAttribute( UiConst.EnableFixedColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.AppendContent( "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "b" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + AppendTotalTemplate( result ); + result.Append( "" ); + result.Append( "" ); + + //验证 + Assert.Equal( result.ToString(), GetResult() ); + } } \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Resizable.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Resizable.cs new file mode 100644 index 000000000..902143358 --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.Resizable.cs @@ -0,0 +1,642 @@ +using System.Text; +using Util.Ui.Configs; +using Util.Ui.NgZorro.Components.Tables; +using Util.Ui.NgZorro.Configs; +using Xunit; + +namespace Util.Ui.NgZorro.Tests.Tables; + +/// +/// 表格测试 - 拖动调整列宽 +/// +public partial class TableTagHelperTest { + /// + /// 测试启用拖动调整列宽 - 在单元格启用 + /// + [Fact] + public void TestEnableResizable_1() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + column.SetContextAttribute( UiConst.EnableResizable, true ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用拖动调整列宽 - 在单元格启用 - 设置初始宽度 + /// + [Fact] + public void TestEnableResizable_2() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + column.SetContextAttribute( UiConst.Width, "100px" ); + column.SetContextAttribute( UiConst.EnableResizable, true ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 在表头单元格启用 + /// + [Fact] + public void TestEnableResizable_3() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.EnableResizable, true ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 在表头单元格启用 - 设置初始宽度 + /// + [Fact] + public void TestEnableResizable_4() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.Width, "100px" ); + th.SetContextAttribute( UiConst.EnableResizable, true ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用拖动调整列宽 - 在表格启用 + /// + [Fact] + public void TestEnableResizable_5() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableResizable, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用拖动调整列宽 - 在表格启用 - 多个列时最后一列不设置调整宽度手柄 + /// + [Fact] + public void TestEnableResizable_6() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableResizable, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //创建列2 + var column2 = new TableColumnTagHelper().ToWrapper(); + column2.SetContextAttribute( UiConst.Title, "c" ); + column2.SetContextAttribute( UiConst.Column, "d" ); + _wrapper.AppendContent( column2 ); + + //创建列3 + var column3 = new TableColumnTagHelper().ToWrapper(); + column3.SetContextAttribute( UiConst.Title, "e" ); + column3.SetContextAttribute( UiConst.Column, "f" ); + _wrapper.AppendContent( column3 ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "c" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "e" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "{{row.d}}" ); + result.Append( "{{row.f}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 在表格启用 - 手工创建表头单元格 + /// + [Fact] + public void TestEnableResizable_7() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableResizable, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 在表格启用 - 手工创建表头单元格 - 多个列时最后一列不设置调整宽度手柄 + /// + [Fact] + public void TestEnableResizable_8() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableResizable, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表头单元格2 + var th2 = new TableHeadColumnTagHelper().ToWrapper(); + th2.SetContextAttribute( UiConst.Title, "c" ); + headRow.AppendContent( th2 ); + + //创建表头单元格3 + var th3 = new TableHeadColumnTagHelper().ToWrapper(); + th3.SetContextAttribute( UiConst.Title, "e" ); + headRow.AppendContent( th3 ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //创建列2 + var column2 = new TableColumnTagHelper().ToWrapper(); + column2.SetContextAttribute( UiConst.Column, "d" ); + row.AppendContent( column2 ); + + //创建列3 + var column3 = new TableColumnTagHelper().ToWrapper(); + column3.SetContextAttribute( UiConst.Column, "f" ); + row.AppendContent( column3 ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "c" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "e" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "{{row.d}}" ); + result.Append( "{{row.f}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用拖动调整列宽 - 在表格启用 - 同时启用自定义列 + /// + [Fact] + public void TestEnableResizable_9() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableResizable, true ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //创建列2 + var column2 = new TableColumnTagHelper().ToWrapper(); + column2.SetContextAttribute( UiConst.Title, "c" ); + column2.SetContextAttribute( UiConst.Column, "d" ); + _wrapper.AppendContent( column2 ); + + //创建列3 + var column3 = new TableColumnTagHelper().ToWrapper(); + column3.SetContextAttribute( UiConst.Title, "e" ); + column3.SetContextAttribute( UiConst.Column, "f" ); + _wrapper.AppendContent( column3 ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "c" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "e" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "{{row.d}}" ); + result.Append( "{{row.f}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用自定义列 - 在表格启用 - 手工创建表头单元格 - 同时启用自定义列 + /// + [Fact] + public void TestEnableResizable_10() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableResizable, true ); + _wrapper.SetContextAttribute( UiConst.EnableCustomColumn, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + headRow.AppendContent( th ); + + //创建表头单元格2 + var th2 = new TableHeadColumnTagHelper().ToWrapper(); + th2.SetContextAttribute( UiConst.Title, "c" ); + headRow.AppendContent( th2 ); + + //创建表头单元格3 + var th3 = new TableHeadColumnTagHelper().ToWrapper(); + th3.SetContextAttribute( UiConst.Title, "e" ); + headRow.AppendContent( th3 ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + row.AppendContent( column ); + + //创建列2 + var column2 = new TableColumnTagHelper().ToWrapper(); + column2.SetContextAttribute( UiConst.Column, "d" ); + row.AppendContent( column2 ); + + //创建列3 + var column3 = new TableColumnTagHelper().ToWrapper(); + column3.SetContextAttribute( UiConst.Column, "f" ); + row.AppendContent( column3 ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "c" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "e" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "{{row.d}}" ); + result.Append( "{{row.f}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用拖动调整列宽 - 修改表格设置组件名称 + /// + [Fact] + public void TestEnableResizable_11() { + //配置表格设置组件标签 + NgZorroOptionsService.SetOptions( new NgZorroOptions { TableSettingsTag = "table-set" } ); + + //设置存储键 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + column.SetContextAttribute( UiConst.EnableResizable, true ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.TableSettings.cs b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.TableSettings.cs new file mode 100644 index 000000000..706f6744f --- /dev/null +++ b/test/Util.Ui.NgZorro.Tests/Tables/TableTagHelperTest.TableSettings.cs @@ -0,0 +1,326 @@ +using System.Text; +using Util.Ui.Configs; +using Util.Ui.NgZorro.Components.Tables; +using Util.Ui.NgZorro.Enums; +using Xunit; + +namespace Util.Ui.NgZorro.Tests.Tables; + +/// +/// 表格测试 - 表格设置 +/// +public partial class TableTagHelperTest { + /// + /// 测试启用表格设置 + /// + [Fact] + public void TestEnableTableSettings_1() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用表格设置 - 设置初始表格尺寸 + /// + [Fact] + public void TestEnableTableSettings_2() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + _wrapper.SetContextAttribute( UiConst.Size, TableSize.Small ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用表格设置 - 设置滚动高度 + /// + [Fact] + public void TestEnableTableSettings_3() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + _wrapper.SetContextAttribute( UiConst.ScrollHeight, "1" ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用表格设置 - 设置滚动宽度 + /// + [Fact] + public void TestEnableTableSettings_4() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + _wrapper.SetContextAttribute( UiConst.ScrollWidth, "1" ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用表格设置 - 设置滚动宽高 + /// + [Fact] + public void TestEnableTableSettings_5() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + _wrapper.SetContextAttribute( UiConst.Scroll, "{x:'1px',y:'1px'}" ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用表格设置 - 设置初始表格边框 + /// + [Fact] + public void TestEnableTableSettings_6() { + //启用自定义列 + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + _wrapper.SetContextAttribute( UiConst.Bordered, true ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Title, "a" ); + column.SetContextAttribute( UiConst.Column, "b" ); + _wrapper.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } + + /// + /// 测试启用表格设置 - 设置完整结构 + /// + [Fact] + public void TestEnableTableSettings_7() { + _wrapper.SetContextAttribute( UiConst.Key, "k" ); + _wrapper.SetContextAttribute( UiConst.EnableTableSettings, true ); + + //创建表头 + var head = new TableHeadTagHelper().ToWrapper(); + _wrapper.AppendContent( head ); + + //创建表头行 + var headRow = new TableRowTagHelper().ToWrapper(); + head.AppendContent( headRow ); + + //创建表头单元格 + var th = new TableHeadColumnTagHelper().ToWrapper(); + th.SetContextAttribute( UiConst.Title, "a" ); + th.SetContextAttribute( UiConst.TitleAlign, TableHeadColumnAlign.Center ); + headRow.AppendContent( th ); + + //创建表格主体 + var body = new TableBodyTagHelper().ToWrapper(); + _wrapper.AppendContent( body ); + + //创建表格主体行 + var row = new TableRowTagHelper().ToWrapper(); + body.AppendContent( row ); + + //创建列 + var column = new TableColumnTagHelper().ToWrapper(); + column.SetContextAttribute( UiConst.Column, "b" ); + column.SetContextAttribute( UiConst.Align, TableHeadColumnAlign.Right ); + column.SetContextAttribute( UiConst.Ellipsis, true ); + row.AppendContent( column ); + + //结果 + var result = new StringBuilder(); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "a" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "{{row.b}}" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + result.Append( "" ); + Assert.Equal( result.ToString(), GetResult() ); + } +} \ No newline at end of file diff --git a/test/Util.Ui.NgZorro.Tests/TreeTables/TreeTableColumnTagHelperTest.cs b/test/Util.Ui.NgZorro.Tests/TreeTables/TreeTableColumnTagHelperTest.cs index 6c6df6bfe..730064d6d 100644 --- a/test/Util.Ui.NgZorro.Tests/TreeTables/TreeTableColumnTagHelperTest.cs +++ b/test/Util.Ui.NgZorro.Tests/TreeTables/TreeTableColumnTagHelperTest.cs @@ -159,13 +159,13 @@ public void TestRadio_2() { /// [Fact] public void TestCheckboxLeft() { - _wrapper.SetItem( new TableShareConfig( "id" ) { IsEnableExtend = true, IsShowCheckbox = true, IsCheckboxLeft = true, IsTreeTable = true } ); + _wrapper.SetItem( new TableShareConfig( "id" ) { IsEnableExtend = true, IsShowCheckbox = true, IsCheckboxLeft = "a", IsTreeTable = true } ); _wrapper.SetContextAttribute( UiConst.Column, "a" ); var result = new StringBuilder(); result.Append( "" ); result.Append( "