From 8446f14126c3347311ecfe15b8218e600daaf4fe Mon Sep 17 00:00:00 2001 From: Tony <6914529@qq.com> Date: Wed, 4 Feb 2026 22:39:49 +0800 Subject: [PATCH 01/25] =?UTF-8?q?BootstrapInputNumber=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E5=8D=83=E5=88=86=E4=BD=8D=E4=B8=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BootstrapInputNumber格式化千分位不显示的问题,给组件添加一个class组件特殊标识,然后通过js回调显示,不知道这个合不合适 --- .../Components/Input/BootstrapInput.razor.js | 26 +++++++++++++++- .../InputNumber/BootstrapInputNumber.razor.cs | 30 +++++++++++++++++++ 2 files changed, 55 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Input/BootstrapInput.razor.js b/src/BootstrapBlazor/Components/Input/BootstrapInput.razor.js index 7e826da835f..57e925f26c8 100644 --- a/src/BootstrapBlazor/Components/Input/BootstrapInput.razor.js +++ b/src/BootstrapBlazor/Components/Input/BootstrapInput.razor.js @@ -1,4 +1,28 @@ -import EventHandler from "../../modules/event-handler.js" +import EventHandler from "../../modules/event-handler.js" + + +export function init(id, invoke, method) { + const el = document.getElementById(id) + EventHandler.on(el, 'focus', e => { + const isString = e.target.getAttribute('type') === 'text'; + const isNumber = e.target.classList('class').contains("input-number") + if (isString && isNumber) { + let value = e.target.value; + e.target.setAttribute('type', 'number'); + e.target.value = value.split(',').join(''); + invoke.invokeMethodAsync(method, true); + } + }); + EventHandler.on(el, 'blur', e => { + const isString = e.target.getAttribute('type') === 'number'; + const isNumber = e.target.classList('class').contains("input-number") + if (isString && isNumber) { + e.target.setAttribute('type', 'text'); + invoke.invokeMethodAsync(method, false); + } + + }); +} export function focus(id) { const el = document.getElementById(id) diff --git a/src/BootstrapBlazor/Components/InputNumber/BootstrapInputNumber.razor.cs b/src/BootstrapBlazor/Components/InputNumber/BootstrapInputNumber.razor.cs index de399f1bba6..337257c24cd 100644 --- a/src/BootstrapBlazor/Components/InputNumber/BootstrapInputNumber.razor.cs +++ b/src/BootstrapBlazor/Components/InputNumber/BootstrapInputNumber.razor.cs @@ -12,6 +12,7 @@ namespace BootstrapBlazor.Components; /// An input component for editing numeric values. Supported numeric 类型s are , , , , , /// An input component for editing numeric values. Supported numeric types are , , , , , /// +[BootstrapModuleAutoLoader("Input/BootstrapInput.razor.js", JSObjectReference = true)] public partial class BootstrapInputNumber { /// @@ -29,6 +30,7 @@ public partial class BootstrapInputNumber /// protected string? InputClassString => CssBuilder.Default("form-control") .AddClass(CssClass).AddClass(ValidCss) + .AddClass("input-number") .AddClass("input-number-fix", ShowButton) .AddClass($"border-{Color.ToDescriptionString()}", Color != Color.None) .AddClassFromAttributes(AdditionalAttributes) @@ -120,6 +122,34 @@ protected override void OnInitialized() { _lastInputValueString ??= Value?.ToString(); } + + + } + + /// + /// + /// + /// + protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, nameof(TriggerFormatValue)); + + /// + /// Trigger value changed event 回调. Trigger by JavaScript + /// Trigger value changed event callback. Trigger by JavaScript + /// + /// + [JSInvokable] + public Task TriggerFormatValue(bool focus) + { + if (focus) + { + CurrentValueAsString = InternalFormat(Value) ?? ""; + } + else + { + CurrentValueAsString = GetFormatString(Value) ?? ""; + } + StateHasChanged(); + return Task.CompletedTask; } /// From 16a3de98f9912cb88c38053a3cf7af071440824a Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 6 Feb 2026 19:13:58 +0800 Subject: [PATCH 02/25] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E9=80=89?= =?UTF-8?q?=E9=A1=B9=E5=85=B3=E9=97=AD=E6=8C=89=E9=92=AE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Select/SelectTable.razor.cs | 16 ++++++++++++++ .../Components/Select/SelectTable.razor.js | 21 ++++++++++++++++--- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs index 60c8f4d5115..afb18b635d6 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor.cs @@ -302,4 +302,20 @@ private async Task OnClearValue() /// Query Method /// public Task QueryAsync() => _table.QueryAsync(); + + /// + /// 触发删除选项方法 由 Javascript 调用 + /// + /// + /// + [JSInvokable] + public void TriggerRemoveItem(int index) + { + if (index >= 0 && index < _selectedItems.Count) + { + var item = _selectedItems[index]; + _selectedItems.Remove(item); + StateHasChanged(); + } + } } diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor.js b/src/BootstrapBlazor/Components/Select/SelectTable.razor.js index 9ba1689f927..003198c1d4d 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor.js +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor.js @@ -1,8 +1,9 @@ -import { getWidth } from "../../modules/utility.js" +import { getWidth } from "../../modules/utility.js" import Data from "../../modules/data.js" +import EventHandler from "../../modules/event-handler.js" import Popover from "../../modules/base-popover.js" -export function init(id) { +export function init(id, invoke) { const el = document.getElementById(id) if (el == null) { return @@ -50,7 +51,20 @@ export function init(id) { observer } - Data.set(id, selectTable) + Data.set(id, selectTable); + + EventHandler.on(el, 'click', '.multi-select-close', e => { + e.preventDefault(); + e.stopPropagation(); + + const index = e.delegateTarget.getAttribute('data-bb-index'); + if (index) { + const value = parseInt(index); + if (value > -1) { + invoke.invokeMethodAsync("TriggerRemoveItem", value); + } + } + }); } export function close(id) { @@ -66,5 +80,6 @@ export function dispose(id) { if (data) { data.observer.disconnect(); Popover.dispose(data.popover) + EventHandler.off(data.el, 'click'); } } From 0a81f3c56c947f3dc251c36bdb3f9ceabff332b3 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Fri, 6 Feb 2026 19:14:28 +0800 Subject: [PATCH 03/25] feat(SelectTable): add IsMultipleSelect parameter --- .../Components/Select/SelectTable.razor | 32 +++++++++++++++++-- .../Components/Select/SelectTable.razor.cs | 20 +++++++++++- 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Select/SelectTable.razor b/src/BootstrapBlazor/Components/Select/SelectTable.razor index 6183da0a84c..8d07b561821 100644 --- a/src/BootstrapBlazor/Components/Select/SelectTable.razor +++ b/src/BootstrapBlazor/Components/Select/SelectTable.razor @@ -1,4 +1,4 @@ -@namespace BootstrapBlazor.Components +@namespace BootstrapBlazor.Components @typeparam TItem @inherits PopoverDropdownBase @attribute [BootstrapModuleAutoLoader("Select/SelectTable.razor.js", JSObjectReference = true)] @@ -8,10 +8,35 @@ }
-