@@ -46,6 +46,19 @@ public partial class SelectObject<TItem>
4646 [ NotNull ]
4747 public string ? DropdownIcon { get ; set ; }
4848
49+ /// <summary>
50+ /// 获得/设置 是否可清除 默认 false
51+ /// </summary>
52+ [ Parameter ]
53+ public bool IsClearable { get ; set ; }
54+
55+ /// <summary>
56+ /// 获得/设置 右侧清除图标 默认 fa-solid fa-angle-up
57+ /// </summary>
58+ [ Parameter ]
59+ [ NotNull ]
60+ public string ? ClearIcon { get ; set ; }
61+
4962 /// <summary>
5063 /// 获得/设置 下拉列表内容模板
5164 /// </summary>
@@ -66,6 +79,7 @@ public partial class SelectObject<TItem>
6679 /// </summary>
6780 private string ? ClassName => CssBuilder . Default ( "select select-object dropdown" )
6881 . AddClass ( "disabled" , IsDisabled )
82+ . AddClass ( "cls" , IsClearable )
6983 . AddClassFromAttributes ( AdditionalAttributes )
7084 . Build ( ) ;
7185
@@ -89,6 +103,12 @@ public partial class SelectObject<TItem>
89103 . AddClass ( $ "text-danger", IsValid . HasValue && ! IsValid . Value )
90104 . Build ( ) ;
91105
106+ private string ? ClearClassString => CssBuilder . Default ( "clear-icon" )
107+ . AddClass ( $ "text-{ Color . ToDescriptionString ( ) } ", Color != Color . None )
108+ . AddClass ( $ "text-success", IsValid . HasValue && IsValid . Value )
109+ . AddClass ( $ "text-danger", IsValid . HasValue && ! IsValid . Value )
110+ . Build ( ) ;
111+
92112 /// <summary>
93113 /// 获得 PlaceHolder 属性
94114 /// </summary>
@@ -107,6 +127,12 @@ public partial class SelectObject<TItem>
107127 [ Parameter ]
108128 public RenderFragment < TItem > ? Template { get ; set ; }
109129
130+ /// <summary>
131+ /// 获得/设置 清除文本内容 OnClear 回调方法 默认 null
132+ /// </summary>
133+ [ Parameter ]
134+ public Func < Task > ? OnClearAsync { get ; set ; }
135+
110136 [ Inject ]
111137 [ NotNull ]
112138 private IStringLocalizer < Select < TItem > > ? Localizer { get ; set ; }
@@ -151,6 +177,7 @@ protected override void OnParametersSet()
151177
152178 PlaceHolder ??= Localizer [ nameof ( PlaceHolder ) ] ;
153179 DropdownIcon ??= IconTheme . GetIconByKey ( ComponentIcons . SelectDropdownIcon ) ;
180+ ClearIcon ??= IconTheme . GetIconByKey ( ComponentIcons . SelectClearIcon ) ;
154181 }
155182
156183 /// <summary>
@@ -159,6 +186,8 @@ protected override void OnParametersSet()
159186 /// <returns></returns>
160187 protected override bool IsRequired ( ) => ValidateForm != null ;
161188
189+ private bool GetClearable ( ) => IsClearable && ! IsDisabled ;
190+
162191 /// <summary>
163192 /// 获得 Text 显示文字
164193 /// </summary>
@@ -170,4 +199,15 @@ protected override void OnParametersSet()
170199 /// </summary>
171200 /// <returns></returns>
172201 public Task CloseAsync ( ) => InvokeVoidAsync ( "close" , Id ) ;
202+
203+ private async Task OnClearValue ( )
204+ {
205+ if ( OnClearAsync != null )
206+ {
207+ await OnClearAsync ( ) ;
208+ }
209+
210+ Value = default ;
211+ await CloseAsync ( ) ;
212+ }
173213}
0 commit comments