feat: js刷新变量表数据

This commit is contained in:
2248356998 qq.com
2025-10-16 15:52:41 +08:00
parent 2e83c19e0c
commit 576c5207b7
7 changed files with 336 additions and 407 deletions

View File

@@ -1,6 +1,7 @@
using ThingsGateway.NewLife.Caching;
using ThingsGateway.NewLife.Json.Extension;
namespace ThingsGateway.NewLife;
namespace ThingsGateway.Gateway.Razor;
public static class VariableModelUtils
{
@@ -25,4 +26,56 @@ public static class VariableModelUtils
return ret;
}
}
public static string GetValue(VariableRuntime row, string fieldName)
{
switch (fieldName)
{
case nameof(VariableRuntime.Value):
return row.Value?.ToSystemTextJsonString() ?? string.Empty;
case nameof(VariableRuntime.RawValue):
return row.RawValue?.ToSystemTextJsonString() ?? string.Empty;
case nameof(VariableRuntime.LastSetValue):
return row.LastSetValue?.ToSystemTextJsonString() ?? string.Empty;
case nameof(VariableRuntime.ChangeTime):
return row.ChangeTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
case nameof(VariableRuntime.CollectTime):
return row.CollectTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
case nameof(VariableRuntime.IsOnline):
return row.IsOnline.ToString();
case nameof(VariableRuntime.LastErrorMessage):
return row.LastErrorMessage;
case nameof(VariableRuntime.RuntimeType):
return row.RuntimeType;
default:
var ret = VariableModelUtils.GetPropertyValue(row, fieldName);
if (ret != null)
{
var t = ret.GetType();
if (t.IsEnum)
{
// 如果是枚举这里返回 枚举的描述信息
var itemName = ret.ToString();
if (!string.IsNullOrEmpty(itemName))
{
ret = Utility.GetDisplayName(t, itemName);
}
}
}
return ret is string str ? str : ret?.ToString() ?? string.Empty;
}
}
internal static Alignment GetAlign(this ITableColumn col) => col.Align ?? Alignment.None;
internal static bool GetTextWrap(this ITableColumn col) => col.TextWrap ?? false;
internal static bool GetShowTips(this ITableColumn col) => col.ShowTips ?? false;
internal static bool GetTextEllipsis(this ITableColumn col) => col.TextEllipsis ?? false;
}

View File

@@ -1,4 +1,4 @@
@* @namespace ThingsGateway.Gateway.Razor
@namespace ThingsGateway.Gateway.Razor
@using System.Text.Json.Nodes
@using Microsoft.Extensions.Hosting
@using ThingsGateway.Admin.Application
@@ -9,12 +9,18 @@
@foreach (var col in RowContent.Columns)
{
<td class="@GetFixedCellClassString(col)" style="@GetFixedCellStyleString(col)">
<DynamicElement TagName="div" TriggerClick="@false"
StopPropagation="false"
class="@GetCellClassString(col, false, false)">
@GetValue(col, RowContent.Row)
</DynamicElement>
<td class="@GetFixedCellClassString(col)" style="@GetFixedCellStyleString(col)" @key=col>
<div class="@GetCellClassString(col, false, false)" @key=col>
@if(col.GetShowTips())
{
<Tooltip @key=col Title="@VariableModelUtils.GetValue(RowContent.Row, col.GetFieldName())" class="text-truncate d-block">
@VariableModelUtils.GetValue(RowContent.Row, col.GetFieldName())
</Tooltip>
}
else
{
@VariableModelUtils.GetValue(RowContent.Row, col.GetFieldName())
}
</div>
</td>
}
*@

View File

@@ -1,279 +1,249 @@
////------------------------------------------------------------------------------
//// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
//// 此代码版权除特别声明外的代码归作者本人Diego所有
//// 源代码使用协议遵循本仓库的开源协议及附加协议
//// Gitee源代码仓库https://gitee.com/diego2098/ThingsGateway
//// Github源代码仓库https://github.com/kimdiego2098/ThingsGateway
//// 使用文档https://thingsgateway.cn/
//// QQ群605534569
////------------------------------------------------------------------------------
//------------------------------------------------------------------------------
// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
// 此代码版权除特别声明外的代码归作者本人Diego所有
// 源代码使用协议遵循本仓库的开源协议及附加协议
// Gitee源代码仓库https://gitee.com/diego2098/ThingsGateway
// Github源代码仓库https://github.com/kimdiego2098/ThingsGateway
// 使用文档https://thingsgateway.cn/
// QQ群605534569
//------------------------------------------------------------------------------
//using System.Collections.Concurrent;
using System.Collections.Concurrent;
//using ThingsGateway.NewLife.Threading;
namespace ThingsGateway.Gateway.Razor;
//using TouchSocket.Core;
public partial class VariableRow
{
[Parameter]
public TableRowContext<VariableRuntime>? RowContent { get; set; }
//private bool Disposed;
//public void Dispose()
//{
// Disposed = true;
// timer?.SafeDispose();
// GC.SuppressFinalize(this);
//}
//TimerX? timer;
//protected override void OnAfterRender(bool firstRender)
//{
// if (firstRender)
// {
// timer = new TimerX(Refresh, null, 1000, 1000, "VariableRow");
// }
// base.OnAfterRender(firstRender);
//}
//namespace ThingsGateway.Gateway.Razor;
//private Task Refresh(object? state)
//{
// if (!Disposed)
// return InvokeAsync(StateHasChanged);
// else
// return Task.CompletedTask;
//}
//public partial class VariableRow : IDisposable
//{
// [Parameter]
// public TableRowContext<VariableRuntime>? RowContent { get; set; }
// private bool Disposed;
// public void Dispose()
// {
// Disposed = true;
// timer?.SafeDispose();
// GC.SuppressFinalize(this);
// }
// TimerX? timer;
// protected override void OnAfterRender(bool firstRender)
// {
// if (firstRender)
// {
// timer = new TimerX(Refresh, null, 1000, 1000, "VariableRow");
// }
// base.OnAfterRender(firstRender);
// }
protected override void OnParametersSet()
{
FixedCellClassStringCache?.Clear();
CellClassStringCache?.Clear();
base.OnParametersSet();
}
// private Task Refresh(object? state)
// {
// if (!Disposed)
// return InvokeAsync(StateHasChanged);
// else
// return Task.CompletedTask;
// }
/// <summary>
/// 获得指定列头固定列样式
/// </summary>
/// <param name="col"></param>
/// <param name="margin"></param>
/// <returns></returns>
protected string? GetFixedCellStyleString(ITableColumn col, int margin = 0)
{
string? ret = null;
if (col.Fixed)
{
ret = IsTail(col) ? GetRightStyle(col, margin) : GetLeftStyle(col);
}
return ret;
}
// protected override void OnParametersSet()
// {
// FixedCellClassStringCache?.Clear();
// CellClassStringCache?.Clear();
// base.OnParametersSet();
// }
// /// <summary>
// /// 获得 指定单元格数据方法
// /// </summary>
// /// <param name="col"></param>
// /// <param name="item"></param>
// /// <returns></returns>
// protected static RenderFragment GetValue(ITableColumn col, VariableRuntime item) => builder =>
// {
// if (col.Template != null)
// {
// builder.AddContent(0, col.Template(item));
// }
// else if (col.ComponentType == typeof(ColorPicker))
// {
// // 自动化处理 ColorPicker 组件
// builder.AddContent(10, col.RenderColor(item));
// }
// else
// {
// builder.AddContent(20, col.RenderValue(item));
// }
// };
private string? GetLeftStyle(ITableColumn col)
{
var columns = RowContent.Columns.ToList();
var defaultWidth = 200;
var width = 0;
var start = 0;
var index = columns.IndexOf(col);
//if (GetFixedDetailRowHeaderColumn)
//{
// width += DetailColumnWidth;
//}
//if (GetFixedMultipleSelectColumn)
//{
// width += MultiColumnWidth;
//}
if (GetFixedLineNoColumn)
{
width += LineNoColumnWidth;
}
while (index > start)
{
var column = columns[start++];
width += column.Width ?? defaultWidth;
}
return $"left: {width}px;";
}
private bool GetFixedLineNoColumn = false;
// // internal static string? GetDoubleClickCellClassString(bool trigger) => CssBuilder.Default()
// //.AddClass("is-dbcell", trigger)
// //.Build();
private string? GetRightStyle(ITableColumn col, int margin)
{
var columns = RowContent.Columns.ToList();
var defaultWidth = 200;
var width = 0;
var index = columns.IndexOf(col);
// /// <summary>
// /// 获得指定列头固定列样式
// /// </summary>
// /// <param name="col"></param>
// /// <param name="margin"></param>
// /// <returns></returns>
// protected string? GetFixedCellStyleString(ITableColumn col, int margin = 0)
// {
// string? ret = null;
// if (col.Fixed)
// {
// ret = IsTail(col) ? GetRightStyle(col, margin) : GetLeftStyle(col);
// }
// return ret;
// }
// after
while (index + 1 < columns.Count)
{
var column = columns[index++];
width += column.Width ?? defaultWidth;
}
//if (ShowExtendButtons && FixedExtendButtonsColumn)
{
width += ExtendButtonColumnWidth;
}
// private string? GetLeftStyle(ITableColumn col)
// {
// var columns = RowContent.Columns.ToList();
// var defaultWidth = 200;
// var width = 0;
// var start = 0;
// var index = columns.IndexOf(col);
// //if (GetFixedDetailRowHeaderColumn)
// //{
// // width += DetailColumnWidth;
// //}
// //if (GetFixedMultipleSelectColumn)
// //{
// // width += MultiColumnWidth;
// //}
// if (GetFixedLineNoColumn)
// {
// width += LineNoColumnWidth;
// }
// while (index > start)
// {
// var column = columns[start++];
// width += column.Width ?? defaultWidth;
// }
// return $"left: {width}px;";
// }
// private bool GetFixedLineNoColumn = false;
// 如果是固定表头时增加滚动条位置
if (IsFixedHeader && (index + 1) == columns.Count)
{
width += margin;
}
return $"right: {width}px;";
}
private bool IsFixedHeader = true;
// private string? GetRightStyle(ITableColumn col, int margin)
// {
// var columns = RowContent.Columns.ToList();
// var defaultWidth = 200;
// var width = 0;
// var index = columns.IndexOf(col);
// // after
// while (index + 1 < columns.Count)
// {
// var column = columns[index++];
// width += column.Width ?? defaultWidth;
// }
// //if (ShowExtendButtons && FixedExtendButtonsColumn)
// {
// width += ExtendButtonColumnWidth;
// }
// // 如果是固定表头时增加滚动条位置
// if (IsFixedHeader && (index + 1) == columns.Count)
// {
// width += margin;
// }
// return $"right: {width}px;";
// }
// private bool IsFixedHeader = true;
// public int LineNoColumnWidth { get; set; } = 60;
// public int ExtendButtonColumnWidth { get; set; } = 220;
public int LineNoColumnWidth { get; set; } = 60;
public int ExtendButtonColumnWidth { get; set; } = 220;
// private bool IsTail(ITableColumn col)
// {
// var middle = Math.Floor(RowContent.Columns.Count() * 1.0 / 2);
// var index = Columns.IndexOf(col);
// return middle < index;
// }
// private NonBlockingDictionary<ITableColumn, string> CellClassStringCache { get; } = new(ReferenceEqualityComparer.Instance);
private bool IsTail(ITableColumn col)
{
var middle = Math.Floor(RowContent.Columns.Count() * 1.0 / 2);
var index = Columns.IndexOf(col);
return middle < index;
}
private NonBlockingDictionary<ITableColumn, string> CellClassStringCache { get; } = new(ReferenceEqualityComparer.Instance);
// /// <summary>
// /// 获得 Cell 文字样式
// /// </summary>
// /// <param name="col"></param>
// /// <param name="hasChildren"></param>
// /// <param name="inCell"></param>
// /// <returns></returns>
// protected string? GetCellClassString(ITableColumn col, bool hasChildren, bool inCell)
// {
// if (CellClassStringCache.TryGetValue(col, out var cached))
// {
// return cached;
// }
// else
// {
// bool trigger = false;
// return CellClassStringCache.GetOrAdd(col, col => CssBuilder.Default("table-cell")
// .AddClass(col.GetAlign().ToDescriptionString(), col.Align == Alignment.Center || col.Align == Alignment.Right)
// .AddClass("is-wrap", col.GetTextWrap())
// .AddClass("is-ellips", col.GetTextEllipsis())
// .AddClass("is-tips", col.GetShowTips())
// .AddClass("is-resizable", AllowResizing)
// .AddClass("is-tree", IsTree && hasChildren)
// .AddClass("is-incell", inCell)
//.AddClass("is-dbcell", trigger)
// .AddClass(col.CssClass)
// .Build());
// }
/// <summary>
/// 获得 Cell 文字样式
/// </summary>
/// <param name="col"></param>
/// <param name="hasChildren"></param>
/// <param name="inCell"></param>
/// <returns></returns>
protected string? GetCellClassString(ITableColumn col, bool hasChildren, bool inCell)
{
if (CellClassStringCache.TryGetValue(col, out var cached))
{
return cached;
}
else
{
bool trigger = false;
return CellClassStringCache.GetOrAdd(col, col => CssBuilder.Default("table-cell")
.AddClass(col.GetAlign().ToDescriptionString(), col.Align == Alignment.Center || col.Align == Alignment.Right)
.AddClass("is-wrap", col.GetTextWrap())
.AddClass("is-ellips", col.GetTextEllipsis())
.AddClass("is-tips", col.GetShowTips())
.AddClass("is-resizable", AllowResizing)
.AddClass("is-tree", IsTree && hasChildren)
.AddClass("is-incell", inCell)
.AddClass("is-dbcell", trigger)
.AddClass(col.CssClass)
.Build());
}
// }
}
// private bool AllowResizing = true;
// private bool IsTree = false;
private bool AllowResizing = true;
private bool IsTree = false;
// private NonBlockingDictionary<ITableColumn, string> FixedCellClassStringCache { get; } = new(ReferenceEqualityComparer.Instance);
// /// <summary>
// /// 获得指定列头固定列样式
// /// </summary>
// /// <param name="col"></param>
// /// <returns></returns>
// protected string? GetFixedCellClassString(ITableColumn col)
// {
// if (FixedCellClassStringCache.TryGetValue(col, out var cached))
// {
// return cached;
// }
// else
// {
// return FixedCellClassStringCache.GetOrAdd(col, col => CssBuilder.Default()
// .AddClass("fixed", col.Fixed)
// .AddClass("fixed-right", col.Fixed && IsTail(col))
// .AddClass("fr", IsLastColumn(col))
// .AddClass("fl", IsFirstColumn(col))
// .Build());
private NonBlockingDictionary<ITableColumn, string> FixedCellClassStringCache { get; } = new(ReferenceEqualityComparer.Instance);
/// <summary>
/// 获得指定列头固定列样式
/// </summary>
/// <param name="col"></param>
/// <returns></returns>
protected string? GetFixedCellClassString(ITableColumn col)
{
if (FixedCellClassStringCache.TryGetValue(col, out var cached))
{
return cached;
}
else
{
return FixedCellClassStringCache.GetOrAdd(col, col => CssBuilder.Default(col.GetFieldName())
.AddClass("fixed", col.Fixed)
.AddClass("fixed-right", col.Fixed && IsTail(col))
.AddClass("fr", IsLastColumn(col))
.AddClass("fl", IsFirstColumn(col))
.Build());
// }
}
// }
}
// [Parameter]
// public Func<List<ITableColumn>> ColumnsFunc { get; set; }
// public List<ITableColumn> Columns => ColumnsFunc();
[Parameter]
public Func<List<ITableColumn>> ColumnsFunc { get; set; }
public List<ITableColumn> Columns => ColumnsFunc();
// private NonBlockingDictionary<ITableColumn, bool> LastFixedColumnCache { get; } = new(ReferenceEqualityComparer.Instance);
// private bool IsLastColumn(ITableColumn col)
// {
// if (LastFixedColumnCache.TryGetValue(col, out var cached))
// {
// return cached;
// }
// else
// {
// return LastFixedColumnCache.GetOrAdd(col, col =>
// {
// var ret = false;
// if (col.Fixed && !IsTail(col))
// {
// var index = Columns.IndexOf(col) + 1;
// ret = index < Columns.Count && Columns[index].Fixed == false;
// }
// return ret;
// });
private NonBlockingDictionary<ITableColumn, bool> LastFixedColumnCache { get; } = new(ReferenceEqualityComparer.Instance);
private bool IsLastColumn(ITableColumn col)
{
if (LastFixedColumnCache.TryGetValue(col, out var cached))
{
return cached;
}
else
{
return LastFixedColumnCache.GetOrAdd(col, col =>
{
var ret = false;
if (col.Fixed && !IsTail(col))
{
var index = Columns.IndexOf(col) + 1;
ret = index < Columns.Count && Columns[index].Fixed == false;
}
return ret;
});
// }
// }
// private NonBlockingDictionary<ITableColumn, bool> FirstFixedColumnCache { get; } = new(ReferenceEqualityComparer.Instance);
// private bool IsFirstColumn(ITableColumn col)
// {
// if (FirstFixedColumnCache.TryGetValue(col, out var cached))
// {
// return cached;
// }
// else
// {
// return FirstFixedColumnCache.GetOrAdd(col, col =>
// {
// var ret = false;
// if (col.Fixed && IsTail(col))
// {
// // 查找前一列是否固定
// var index = Columns.IndexOf(col) - 1;
// if (index > 0)
// {
// ret = !Columns[index].Fixed;
// }
// }
// return ret;
// });
}
}
private NonBlockingDictionary<ITableColumn, bool> FirstFixedColumnCache { get; } = new(ReferenceEqualityComparer.Instance);
private bool IsFirstColumn(ITableColumn col)
{
if (FirstFixedColumnCache.TryGetValue(col, out var cached))
{
return cached;
}
else
{
return FirstFixedColumnCache.GetOrAdd(col, col =>
{
var ret = false;
if (col.Fixed && IsTail(col))
{
// 查找前一列是否固定
var index = Columns.IndexOf(col) - 1;
if (index > 0)
{
ret = !Columns[index].Fixed;
}
}
return ret;
});
// }
// }
}
}
//}
}

View File

@@ -1,60 +0,0 @@
////------------------------------------------------------------------------------
//// 此代码版权声明为全文件覆盖,如有原作者特别声明,会在下方手动补充
//// 此代码版权除特别声明外的代码归作者本人Diego所有
//// 源代码使用协议遵循本仓库的开源协议及附加协议
//// Gitee源代码仓库https://gitee.com/diego2098/ThingsGateway
//// Github源代码仓库https://github.com/kimdiego2098/ThingsGateway
//// 使用文档https://thingsgateway.cn/
//// QQ群605534569
////------------------------------------------------------------------------------
//namespace ThingsGateway.Gateway.Razor;
//internal static class VariableRowHelpers
//{
// internal static Alignment GetAlign(this ITableColumn col) => col.Align ?? Alignment.None;
// internal static bool GetTextWrap(this ITableColumn col) => col.TextWrap ?? false;
// internal static bool GetShowTips(this ITableColumn col) => col.ShowTips ?? false;
// internal static RenderFragment RenderColor<TItem>(this ITableColumn col, TItem item) => builder =>
// {
// var val = GetItemValue(col, item);
// var v = val?.ToString() ?? "#000";
// var style = $"background-color: {v};";
// builder.OpenElement(0, "div");
// builder.AddAttribute(1, "class", "is-color");
// builder.AddAttribute(2, "style", style);
// builder.CloseElement();
// };
// internal static object? GetItemValue<TItem>(this ITableColumn col, TItem item)
// {
// var fieldName = col.GetFieldName();
// object? ret;
// if (item is IDynamicObject dynamicObject)
// {
// ret = dynamicObject.GetValue(fieldName);
// }
// else
// {
// ret = Utility.GetPropertyValue<TItem, object?>(item, fieldName);
// if (ret != null)
// {
// var t = ret.GetType();
// if (t.IsEnum)
// {
// // 如果是枚举这里返回 枚举的描述信息
// var itemName = ret.ToString();
// if (!string.IsNullOrEmpty(itemName))
// {
// ret = Utility.GetDisplayName(t, itemName);
// }
// }
// }
// }
// return ret;
// }
// internal static bool GetTextEllipsis(this ITableColumn col) => col.TextEllipsis ?? false;
//}

View File

@@ -12,6 +12,8 @@
<AdminTable Id=@Id @ref=table BeforeShowEditDialogCallback="BeforeShowEditDialogCallback"
TItem="VariableRuntime"
RenderMode="TableRenderMode.Table"
ShowCardView=false
EditDialogSize="Size.ExtraLarge"
AutoGenerateColumns="true"
ShowAdvancedSearch=false
@@ -89,11 +91,11 @@
<VariableEditComponent Model=@(context) AutoRestartThread="AutoRestartThread"></VariableEditComponent>
</EditTemplate>
@* <RowContentTemplate Context="context">
<RowContentTemplate Context="context">
<VariableRow RowContent="@context" ColumnsFunc="ColumnsFunc"></VariableRow>
</RowContentTemplate> *@
</RowContentTemplate>
<ExportButtonDropdownTemplate Context="ExportContext">
@if ((AuthorizeButton("导出")))

View File

@@ -16,7 +16,6 @@ using ThingsGateway.Admin.Application;
using ThingsGateway.Admin.Razor;
using ThingsGateway.DB;
using ThingsGateway.Extension.Generic;
using ThingsGateway.NewLife;
using ThingsGateway.NewLife.Json.Extension;
namespace ThingsGateway.Gateway.Razor;
@@ -62,7 +61,10 @@ public partial class VariableRuntimeInfo
public ToastService? ToastService { get; set; }
#region js
private List<ITableColumn> ColumnsFunc()
{
return table.Columns;
}
protected override Task InvokeInitAsync() => InvokeVoidAsync("init", Id, Interop, new { Method = nameof(TriggerStateChanged) });
private Task OnColumnVisibleChanged(string name, bool visible)
@@ -97,60 +99,7 @@ public partial class VariableRuntimeInfo
foreach (var col in _cachedFields)
{
var fieldName = col.GetFieldName();
switch (fieldName)
{
case nameof(VariableRuntime.Value):
list.Add(new(fieldName, row.Value?.ToSystemTextJsonString() ?? string.Empty));
break;
case nameof(VariableRuntime.RawValue):
list.Add(new(fieldName, row.RawValue?.ToSystemTextJsonString() ?? string.Empty));
break;
case nameof(VariableRuntime.LastSetValue):
list.Add(new(fieldName, row.LastSetValue?.ToSystemTextJsonString() ?? string.Empty));
break;
case nameof(VariableRuntime.ChangeTime):
list.Add(new(fieldName, row.ChangeTime.ToString("yyyy-MM-dd HH:mm:ss.fff")));
break;
case nameof(VariableRuntime.CollectTime):
list.Add(new(fieldName, row.CollectTime.ToString("yyyy-MM-dd HH:mm:ss.fff")));
break;
case nameof(VariableRuntime.IsOnline):
list.Add(new(fieldName, row.IsOnline.ToString()));
break;
case nameof(VariableRuntime.LastErrorMessage):
list.Add(new(fieldName, row.LastErrorMessage));
break;
case nameof(VariableRuntime.RuntimeType):
list.Add(new(fieldName, row.RuntimeType));
break;
default:
var ret = VariableModelUtils.GetPropertyValue(row, fieldName);
if (ret != null)
{
var t = ret.GetType();
if (t.IsEnum)
{
// 如果是枚举这里返回 枚举的描述信息
var itemName = ret.ToString();
if (!string.IsNullOrEmpty(itemName))
{
ret = Utility.GetDisplayName(t, itemName);
}
}
}
list.Add(new(fieldName, ret is string str ? str : ret?.ToString() ?? string.Empty));
break;
}
list.Add(new(fieldName, VariableModelUtils.GetValue(row,fieldName)));
}
return list;

View File

@@ -41,45 +41,54 @@
if (!cell) continue;
// 查找 tooltip span
var tooltipSpan = cell.querySelector('.bb-tooltip');
if (tooltipSpan) {
tooltipSpan.innerText = cellValue ?? ''; // 更新显示文字
tooltipSpan.setAttribute('data-bs-original-title', cellValue ?? ''); // 同步 tooltip 提示
continue;
}
var cellDiv = cell.querySelector('.table-cell');
if (cellDiv) {
var tooltipSpan = cell.querySelector('.bb-tooltip');
if (tooltipSpan) {
// 查找 switch
var switchDiv = cell.querySelector('.switch');
if (switchDiv) {
if (cellValue === true || cellValue === "on" || cellValue === "True" || cellValue === "true") {
switchDiv.classList.add('is-checked');
switchDiv.classList.add('enable');
switchDiv.classList.remove('is-unchecked');
switchDiv.classList.remove('disabled');
tooltipSpan.innerText = cellValue ?? ''; // 更新显示文字
tooltipSpan.setAttribute('data-bs-original-title', cellValue ?? ''); // 同步 tooltip 提示
continue;
switchDiv.querySelectorAll('span')[0].classList.add('border-success');
switchDiv.querySelectorAll('span')[0].classList.add('bg-success');
} else {
switchDiv.classList.remove('is-checked');
switchDiv.classList.remove('enable');
switchDiv.classList.add('is-unchecked');
switchDiv.classList.add('disabled');
switchDiv.querySelectorAll('span')[0].classList.remove('border-success');
switchDiv.querySelectorAll('span')[0].classList.remove('bg-success');
}
continue;
else {
cellDiv.innerText = cellValue ?? '';
}
}
// 默认情况(普通单元格)
getCellByClass(row, cellName).innerText = cellValue;
//// 查找 switch
//var switchDiv = cell.querySelector('.switch');
//if (switchDiv) {
// if (cellValue === true || cellValue === "on" || cellValue === "True" || cellValue === "true") {
// switchDiv.classList.add('is-checked');
// switchDiv.classList.add('enable');
// switchDiv.classList.remove('is-unchecked');
// switchDiv.classList.remove('disabled');
// switchDiv.querySelectorAll('span')[0].classList.add('border-success');
// switchDiv.querySelectorAll('span')[0].classList.add('bg-success');
// } else {
// switchDiv.classList.remove('is-checked');
// switchDiv.classList.remove('enable');
// switchDiv.classList.add('is-unchecked');
// switchDiv.classList.add('disabled');
// switchDiv.querySelectorAll('span')[0].classList.remove('border-success');
// switchDiv.querySelectorAll('span')[0].classList.remove('bg-success');
// }
// continue;
//}
//// 默认情况(普通单元格)
//getCellByClass(row, cellName).innerText = cellValue;
}
}
}
, 1000) //1000ms刷新一次
, 500) //1000ms刷新一次
}