Skip to content

Commit 49d4b8e

Browse files
committed
refactor: 增加 Region 组件
1 parent f05a4a3 commit 49d4b8e

4 files changed

Lines changed: 94 additions & 3 deletions

File tree

src/components/BootstrapBlazor.Region/Components/Region.razor

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,35 @@
77
<BootstrapLabel required="@Required" for="@InputId" ShowLabelTooltip="ShowLabelTooltip" Value="@DisplayText" />
88
}
99
<div @attributes="AdditionalAttributes" id="@Id" class="@ClassString">
10-
<div data-bs-toggle="bb.dropdown" data-bs-placement="@PlacementString" data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString">
10+
<div class="dropdown-toggle" data-bs-toggle="bb.dropdown" data-bs-placement="@PlacementString" data-bs-offset="@OffsetString" data-bs-custom-class="@CustomClassString">
1111
<input type="text" id="@InputId" disabled="@Disabled" readonly placeholder="@PlaceHolder" class="@InputClassString" value="@CurrentValue" />
1212
<span class="@AppendClassString"><i class="@DropdownIcon"></i></span>
1313
</div>
1414
@if (GetClearable())
1515
{
1616
<span class="@ClearClassString" @onclick="OnClearValue"><i class="@ClearIcon"></i></span>
1717
}
18+
<div class="dropdown-menu">
19+
<div class="bb-region-header">
20+
<ul>
21+
<li>省/直辖市</li>
22+
<li>市</li>
23+
<li>区/县</li>
24+
<li>乡/镇/街道</li>
25+
</ul>
26+
</div>
27+
<div class="bb-region-body">
28+
@RenderProvinces()
29+
</div>
30+
</div>
1831
</div>
32+
33+
@code {
34+
RenderFragment RenderProvinces() =>
35+
@<ul class="bb-region-province">
36+
@foreach(var item in RegionService.GetProvinces())
37+
{
38+
<li>@item</li>
39+
}
40+
</ul>;
41+
}

src/components/BootstrapBlazor.Region/Components/Region.razor.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,11 @@ public partial class Region
5454
/// </summary>
5555
[Inject]
5656
[NotNull]
57-
protected IIconTheme? IconTheme { get; set; }
57+
private IIconTheme? IconTheme { get; set; }
58+
59+
[Inject]
60+
[NotNull]
61+
private IRegionService? RegionService { get; set; }
5862

5963
private string? ClassString => CssBuilder.Default("select bb-region")
6064
.AddClassFromAttributes(AdditionalAttributes)
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,51 @@
11
.bb-region {
22
position: relative;
33
}
4+
5+
.bb-region-province {
6+
display: flex;
7+
flex-wrap: wrap;
8+
gap: 5px;
9+
}
10+
11+
.bb-region-province > li {
12+
padding: 3px 12px;
13+
border-radius: var(--bs-border-radius);
14+
cursor: pointer;
15+
}
16+
17+
.bb-region-province > li:hover {
18+
background-color: var(--bs-secondary-bg-subtle);
19+
}
20+
21+
.popover-region ul {
22+
margin: 0;
23+
padding: 0;
24+
}
25+
26+
.popover-region li {
27+
list-style: none;
28+
}
29+
30+
.bb-region-header ul {
31+
display: flex;
32+
justify-content: space-between;
33+
flex-wrap: nowrap;
34+
padding: .5rem;
35+
font-weight: bold;
36+
}
37+
38+
.bb-region-header ul li {
39+
cursor: pointer;
40+
padding: 3px 12px;
41+
border-radius: var(--bs-border-radius);
42+
}
43+
44+
.bb-region-header ul li:hover {
45+
background-color: var(--bs-secondary-bg-subtle);
46+
}
47+
48+
.bb-region-body {
49+
padding: .5rem;
50+
max-width: 400px;
51+
}
Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,23 @@
1-
export function init(id) {
1+
import Data from "../../BootstrapBlazor/modules/data.js"
2+
import Popover from "../../BootstrapBlazor/modules/base-popover.js"
23

4+
export function init(id) {
5+
const el = document.getElementById(id)
6+
if (el === null) {
7+
return
8+
}
9+
const input = el.querySelector(`#${id}_input`);
10+
const popover = Popover.init(el);
11+
12+
Data.set(id, { el, popover });
313
}
414

515
export function dispose(id) {
16+
const region = Data.get(id)
17+
Data.remove(id)
618

19+
const { el, popover } = region;
20+
if (popover) {
21+
Popover.dispose(select.popover);
22+
}
723
}

0 commit comments

Comments
 (0)