Skip to content

Commit b5eae9d

Browse files
committed
2 parents 586170d + 4ea6624 commit b5eae9d

File tree

67 files changed

+282
-4339
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+282
-4339
lines changed

src/BootstrapBlazor.Server/BootstrapBlazor.Server.csproj

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
<PackageReference Include="BootstrapBlazor.SvgEditor" Version="9.0.3" />
7070
<PackageReference Include="BootstrapBlazor.SummerNote" Version="9.0.4" />
7171
<PackageReference Include="BootstrapBlazor.TableExport" Version="9.2.6" />
72+
<PackageReference Include="BootstrapBlazor.TcpSocket" Version="9.0.0-beta01" />
7273
<PackageReference Include="BootstrapBlazor.Topology" Version="9.0.1" />
7374
<PackageReference Include="BootstrapBlazor.UniverIcon" Version="9.0.1" />
7475
<PackageReference Include="BootstrapBlazor.UniverSheet" Version="9.0.5" />
@@ -85,6 +86,10 @@
8586

8687
<ItemGroup>
8788
<Using Include="BootstrapBlazor.Components" />
89+
<Using Include="BootstrapBlazor.DataAdapters" />
90+
<Using Include="BootstrapBlazor.DataHandlers" />
91+
<Using Include="BootstrapBlazor.DataConverters" />
92+
<Using Include="BootstrapBlazor.TcpSocket" />
8893
<Using Include="BootstrapBlazor.Server.Components.Components" />
8994
<Using Include="BootstrapBlazor.Server.Components.Layout" />
9095
<Using Include="BootstrapBlazor.Server.Data" />

src/BootstrapBlazor.Server/Components/Layout/TutorialsLayout.razor

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
<span class="sidebar-text">Bootstrap Blazor</span>
99
</div>
1010
<TutorialsNavMenu></TutorialsNavMenu>
11-
<Wwads IsVertical="true"></Wwads>
1211
<LayoutSplitBar Min="220" Max="330" ContainerSelector=".section"></LayoutSplitBar>
1312
</aside>
1413

src/BootstrapBlazor.Server/Components/Layout/TutorialsNavMenu.razor.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,8 @@ .. _layoutFileList
224224
private readonly string[] _template5 =
225225
[
226226
"Tutorials/LoginAndRegister/Template5.razor",
227+
"Tutorials/LoginAndRegister/Template5.razor.cs",
228+
"Tutorials/LoginAndRegister/Template5.razor.js",
227229
"Tutorials/LoginAndRegister/Template5.razor.css",
228230
"../Layout/TutorialsLayout.razor",
229231
"../Layout/TutorialsLayout.razor.css"

src/BootstrapBlazor.Server/Components/Samples/SocketFactories.razor

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
<h3>Tcp 套接字服务 <code>ITcpSocketFactory</code></h3>
55
<h4>组件库内置了 Socket 套接字通讯服务</h4>
66

7+
<PackageTips Name="BootstrapBlazor.TcpSocket" />
8+
79
<p class="code-label">1. 服务注入</p>
810

911
<Pre>services.AddBootstrapBlazorTcpSocketFactory();</Pre>
@@ -84,26 +86,26 @@ private async Task CreateClient()
8486
<p>数据适配器设计思路如下</p>
8587

8688
<ol class="ul-demo">
87-
<li>使用 <code>SocketDataTypeConverterAttribute</code> 标签约定通讯数据使用那个转换类型进行转换 指定类型需继承 <code>ISocketDataConverter</code>
89+
<li>使用 <code>DataTypeConverterAttribute</code> 标签约定通讯数据使用那个转换类型进行转换 指定类型需继承 <code>IDataConverter</code>
8890
接口
8991
</li>
90-
<li>使用 <code>SocketDataPropertyConverterAttribute</code> 标签约定如何转换数据类型 (Property) 属性值</li>
92+
<li>使用 <code>DataPropertyConverterAttribute</code> 标签约定如何转换数据类型 (Property) 属性值</li>
9193
</ol>
9294

93-
<Pre>[SocketDataTypeConverter(Type = typeof(SocketDataConverter&lt;MockEntity&gt;))]
95+
<Pre>[DataTypeConverter(Type = typeof(DataConverter&lt;MockEntity&gt;))]
9496
class MockEntity
9597
{
96-
[SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)]
98+
[DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)]
9799
public byte[]? Header { get; set; }
98100

99-
[SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)]
101+
[DataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)]
100102
public byte[]? Body { get; set; }
101103

102-
[SocketDataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])]
104+
[DataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])]
103105
public string? Value1 { get; set; }
104106
}</Pre>
105107

106-
<Pre>class FooConverter(string name) : ISocketDataPropertyConverter
108+
<Pre>class FooConverter(string name) : IDataPropertyConverter
107109
{
108110
public object? Convert(ReadOnlyMemory&lt;byte&gt; data)
109111
{
@@ -114,15 +116,15 @@ class MockEntity
114116
<p class="code-label">针对第三方程序集的数据类型解决方案如下:</p>
115117
<p>使用 <code></code></p>
116118

117-
<Pre>builder.Services.ConfigureSocketDataConverters(options =>
119+
<Pre>builder.Services.ConfigureDataConverters(options =>
118120
{
119121
options.AddTypeConverter&lt;MockEntity&gt;();
120-
options.AddPropertyConverter&lt;MockEntity&gt;(entity =&gt; entity.Header, new SocketDataPropertyConverterAttribute()
122+
options.AddPropertyConverter&lt;MockEntity&gt;(entity =&gt; entity.Header, new DataPropertyConverterAttribute()
121123
{
122124
Offset = 0,
123125
Length = 5
124126
});
125-
options.AddPropertyConverter&lt;MockEntity&gt;(entity =&gt; entity.Body, new SocketDataPropertyConverterAttribute()
127+
options.AddPropertyConverter&lt;MockEntity&gt;(entity =&gt; entity.Body, new DataPropertyConverterAttribute()
126128
{
127129
Offset = 5,
128130
Length = 2

src/BootstrapBlazor.Server/Components/Samples/Sockets/DataEntities.razor

Lines changed: 35 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,74 +8,74 @@
88
Introduction="@Localizer["NormalIntro"]"
99
Name="Normal" ShowCode="false">
1010
<p>
11-
通过 <code>SocketDataTypeConverterAttribute</code> 类标签与 <code>SocketDataPropertyConverterAttribute</code>
11+
通过 <code>DataTypeConverterAttribute</code> 类标签与 <code>DataPropertyConverterAttribute</code>
1212
属性标签可以将通讯数据自动转化为我们系统中需要的业务实体类,示例如下:</p>
13-
<Pre>[SocketDataTypeConverter(Type = typeof(SocketDataConverter&lt;MockEntity&gt;))]
13+
<Pre>[DataTypeConverter(Type = typeof(DataConverter&lt;MockEntity&gt;))]
1414
class MockEntity
1515
{
16-
[SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)]
16+
[DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)]
1717
public byte[]? Header { get; set; }
1818

19-
[SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)]
19+
[DataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)]
2020
public byte[]? Body { get; set; }
2121

22-
[SocketDataPropertyConverter(Type = typeof(string), Offset = 7, Length = 1, EncodingName = "utf-8")]
22+
[DataPropertyConverter(Type = typeof(string), Offset = 7, Length = 1, EncodingName = "utf-8")]
2323
public string? Value1 { get; set; }
2424

25-
[SocketDataPropertyConverter(Type = typeof(int), Offset = 8, Length = 1)]
25+
[DataPropertyConverter(Type = typeof(int), Offset = 8, Length = 1)]
2626
public int Value2 { get; set; }
2727
}</Pre>
28-
<p class="code-label">1. <code>SocketDataTypeConverter</code> 参数说明:</p>
28+
<p class="code-label">1. <code>DataTypeConverter</code> 参数说明:</p>
2929
<ul class="ul-demo">
30-
<li><b>Type</b>: 自定义转换器类型,组件库内置了 <code>SocketDataConverter</code> 泛型类,建议看一下源码非常方便扩展出自己的转换器
30+
<li><b>Type</b>: 自定义转换器类型,组件库内置了 <code>DataConverter</code> 泛型类,建议看一下源码非常方便扩展出自己的转换器
3131
</li>
3232
</ul>
33-
<p class="code-label">2. <code>SocketDataPropertyConverterAttribute</code> 参数说明</p>
33+
<p class="code-label">2. <code>DataPropertyConverterAttribute</code> 参数说明</p>
3434
<ul class="ul-demo">
3535
<li><b>Type</b>: 转换目标数据类型</li>
3636
<li><b>Offset</b>: 数据偏移量,即在接收到的数据中起始位置</li>
3737
<li><b>Length</b>: 数据长度,即在接收到的数据中占的长度</li>
3838
<li><b>EncodingName</b>: 转成字符串时需要的编码名称,默认 null 使用 <code>utf-8</code> 编码</li>
39-
<li><b>ConverterType</b>: 自定义转化器类型,继承 <code>ISocketDataPropertyConverter</code> 接口</li>
39+
<li><b>ConverterType</b>: 自定义转化器类型,继承 <code>IDataPropertyConverter</code> 接口</li>
4040
<li><b>ConverterParameters</b>: 自定义转化器类型构造函数所需的参数,默认 null</li>
4141
</ul>
4242
<p>组件库内置了大量数据类型转换器</p>
4343
<ul class="ul-demo">
44-
<li><code>SocketDataByteArrayConverter</code> 转成 byte[] 数组类型</li>
45-
<li><code>SocketDataStringConverter</code> 转成 string 字符串类型</li>
46-
<li><code>SocketDataEnumConverter</code> 转成 enum 枚举类型</li>
47-
<li><code>SocketDataBoolConverter</code> 转成 bool 布尔类型</li>
48-
<li><code>SocketDataInt16BigEndianConverter</code> 转成 short 整形大端读取</li>
49-
<li><code>SocketDataInt32BigEndianConverter</code> 转成 int 整形大端读取</li>
50-
<li><code>SocketDataInt64BigEndianConverter</code> 转成 long 长整形大端读取</li>
51-
<li><code>SocketDataSingleBigEndianConverter</code> 转成 float 单精度浮点数大端读取</li>
52-
<li><code>SocketDataDoubleBigEndianConverter</code> 转成 double 双精度浮点数大端读取</li>
53-
<li><code>SocketDataUInt16BigEndianConverter</code> 转成 ushort 无符号整形大端读取</li>
54-
<li><code>SocketDataUInt32BigEndianConverter</code> 转成 uint 无符号整形大端读取</li>
55-
<li><code>SocketDataUInt64BigEndianConverter</code> 转成 ulong 无符号长整形大端读取</li>
56-
<li><code>SocketDataInt16LittleEndianConverter</code> 转成 short 整形小端读取</li>
57-
<li><code>SocketDataInt32LittleEndianConverter</code> 转成 int 整形小端读取</li>
58-
<li><code>SocketDataInt64LittleEndianConverter</code> 转成 long 长整形小端读取</li>
59-
<li><code>SocketDataSingleLittleEndianConverter</code> 转成 float 单精度浮点数小端读取</li>
60-
<li><code>SocketDataDoubleLittleEndianConverter</code> 转成 double 双精度浮点数小端读取</li>
61-
<li><code>SocketDataUInt16LittleEndianConverter</code> 转成 ushort 无符号整形小端读取</li>
62-
<li><code>SocketDataUInt32LittleEndianConverter</code> 转成 uint 无符号整形小端读取</li>
63-
<li><code>SocketDataUInt64LittleEndianConverter</code> 转成 ulong 无符号整形小端读取</li>
44+
<li><code>DataByteArrayConverter</code> 转成 byte[] 数组类型</li>
45+
<li><code>DataStringConverter</code> 转成 string 字符串类型</li>
46+
<li><code>DataEnumConverter</code> 转成 enum 枚举类型</li>
47+
<li><code>DataBoolConverter</code> 转成 bool 布尔类型</li>
48+
<li><code>DataInt16BigEndianConverter</code> 转成 short 整形大端读取</li>
49+
<li><code>DataInt32BigEndianConverter</code> 转成 int 整形大端读取</li>
50+
<li><code>DataInt64BigEndianConverter</code> 转成 long 长整形大端读取</li>
51+
<li><code>DataSingleBigEndianConverter</code> 转成 float 单精度浮点数大端读取</li>
52+
<li><code>DataDoubleBigEndianConverter</code> 转成 double 双精度浮点数大端读取</li>
53+
<li><code>DataUInt16BigEndianConverter</code> 转成 ushort 无符号整形大端读取</li>
54+
<li><code>DataUInt32BigEndianConverter</code> 转成 uint 无符号整形大端读取</li>
55+
<li><code>DataUInt64BigEndianConverter</code> 转成 ulong 无符号长整形大端读取</li>
56+
<li><code>DataInt16LittleEndianConverter</code> 转成 short 整形小端读取</li>
57+
<li><code>DataInt32LittleEndianConverter</code> 转成 int 整形小端读取</li>
58+
<li><code>DataInt64LittleEndianConverter</code> 转成 long 长整形小端读取</li>
59+
<li><code>DataSingleLittleEndianConverter</code> 转成 float 单精度浮点数小端读取</li>
60+
<li><code>DataDoubleLittleEndianConverter</code> 转成 double 双精度浮点数小端读取</li>
61+
<li><code>DataUInt16LittleEndianConverter</code> 转成 ushort 无符号整形小端读取</li>
62+
<li><code>DataUInt32LittleEndianConverter</code> 转成 uint 无符号整形小端读取</li>
63+
<li><code>DataUInt64LittleEndianConverter</code> 转成 ulong 无符号整形小端读取</li>
6464
</ul>
6565
<p>自定义数据类型转化器示例</p>
66-
<Pre>[SocketTypeDataConverter(Type = typeof(SocketDataConverter&lt;MockEntity&gt;))]
66+
<Pre>[SocketTypeDataConverter(Type = typeof(DataConverter&lt;MockEntity&gt;))]
6767
class MockEntity
6868
{
69-
[SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)]
69+
[DataPropertyConverter(Type = typeof(byte[]), Offset = 0, Length = 5)]
7070
public byte[]? Header { get; set; }
7171

72-
[SocketDataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)]
72+
[DataPropertyConverter(Type = typeof(byte[]), Offset = 5, Length = 2)]
7373
public byte[]? Body { get; set; }
7474

75-
[SocketDataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])]
75+
[DataPropertyConverter(Type = typeof(Foo), Offset = 7, Length = 1, ConverterType = typeof(FooConverter), ConverterParameters = ["test"])]
7676
public string? Value1 { get; set; }
7777
}</Pre>
78-
<Pre>class FooConverter(string name) : ISocketDataPropertyConverter
78+
<Pre>class FooConverter(string name) : IDataPropertyConverter
7979
{
8080
public object? Convert(ReadOnlyMemory&lt;byte&gt; data)
8181
{
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
<Tips>
22
<p><code>ITcpSocketFactory</code> 服务仅在 <code>Server</code> 模式下可用</p>
33
</Tips>
4+
5+
<PackageTips Name="BootstrapBlazor.TcpSocket" />

src/BootstrapBlazor.Server/Components/Samples/TreeViews.razor.cs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
// See the LICENSE file in the project root for more information.
44
// Maintainer: Argo Zhang([email protected]) Website: https://www.blazor.zone
55

6-
using DocumentFormat.OpenXml.Spreadsheet;
7-
86
namespace BootstrapBlazor.Server.Components.Samples;
97

108
/// <summary>
@@ -121,7 +119,20 @@ private Task OnDragItemEndAsync(TreeViewDragContext<TreeFoo> context)
121119
source.ParentId = context.IsChildren ? target.Id : target.ParentId;
122120
}
123121
}
124-
DraggableItems = TreeFoo.CascadingTree(items);
122+
123+
Action<TreeViewItem<TreeFoo>>? cb = null;
124+
if (context.IsChildren)
125+
{
126+
// 自动展开目标节点
127+
cb = item =>
128+
{
129+
if (item.Value.Id == context.Target.Value.Id)
130+
{
131+
item.IsExpand = true;
132+
}
133+
};
134+
}
135+
DraggableItems = TreeFoo.CascadingTree(items, cb);
125136
DraggableItems[0].IsExpand = true;
126137
if (DraggableItems.Count > 1)
127138
{
@@ -184,9 +195,9 @@ private static List<TreeFoo> GetDraggableItems()
184195
new() { Text = "Item D", Id = "4", ParentId = "1", Icon = "fa-solid fa-font-awesome" },
185196
new() { Text = "Item E", Id = "5", ParentId = "1", Icon = "fa-solid fa-font-awesome" },
186197

187-
new() { Text = "Item B (Drop inside blocked)", Id = "2", Icon = "fa-solid fa-font-awesome" },
198+
new() { Text = "Item B", Id = "2", Icon = "fa-solid fa-font-awesome" },
188199
new() { Text = "Item F", Id = "6", ParentId = "2", Icon = "fa-solid fa-font-awesome" },
189-
new() { Text = "Item G (Can not move out)", Id = "9", ParentId = "2", Icon = "fa-solid fa-font-awesome" },
200+
new() { Text = "Item G", Id = "9", ParentId = "2", Icon = "fa-solid fa-font-awesome" },
190201

191202
new() { Text = "Item C", Id = "3", Icon = "fa-solid fa-font-awesome" },
192203
new() { Text = "Item H", Id = "7", ParentId = "3", Icon = "fa-solid fa-font-awesome" },

0 commit comments

Comments
 (0)