Compare commits

..

6 Commits

6 changed files with 40 additions and 21 deletions

View File

@@ -69,6 +69,13 @@ namespace ExportModule.ViewModels
get => _totalCount; get => _totalCount;
set => SetProperty(ref _totalCount, value); set => SetProperty(ref _totalCount, value);
} }
private TestReportModel? _selectedTestReport;
public TestReportModel? SelectedTestReport
{
get => _selectedTestReport;
set => SetProperty(ref _selectedTestReport, value);
}
#endregion #endregion
#region #region
@@ -144,24 +151,21 @@ namespace ExportModule.ViewModels
} }
/// <summary> /// <summary>
/// 导出 Excel根据当前筛选条件导出完整实体数据 /// 导出 Excel根据用户在表格中选中的 TestReportModel.TestRoundId 查询并导出完整步骤数据
/// </summary> /// </summary>
private async Task OnExport() private async Task OnExport()
{ {
DateTime? queryEnd = EndTime; if (SelectedTestReport == null)
if (queryEnd.HasValue)
{ {
queryEnd = queryEnd.Value.Date.AddDays(1).AddSeconds(-1); ShowErrorMessageBox("请先在列表中选择一条测试记录。", () => { });
return;
} }
string? scope = SelectedScope == "全部" ? null : SelectedScope;
// 查询全量实体数据
StatusMessage = "正在查询导出数据..."; StatusMessage = "正在查询导出数据...";
var entityResult = await _testReportService.GetEntitiesByFilter(StartTime, queryEnd, scope); var entityResult = await _testReportService.GetByTestRoundIdAsync(SelectedTestReport.TestRoundId);
if (!entityResult.IsSuccess || entityResult.Data == null || entityResult.Data.Count == 0) if (!entityResult.IsSuccess || entityResult.Data == null || entityResult.Data.Count == 0)
{ {
ShowErrorMessageBox("没有数据可导出,请先查询或调整筛选条件。", () => { }); ShowErrorMessageBox("未找到该测试记录的详细步骤数据。", () => { });
return; return;
} }
@@ -169,15 +173,15 @@ namespace ExportModule.ViewModels
{ {
Filter = "Excel 工作簿 (*.xlsx)|*.xlsx|所有文件 (*.*)|*.*", Filter = "Excel 工作簿 (*.xlsx)|*.xlsx|所有文件 (*.*)|*.*",
DefaultExt = ".xlsx", DefaultExt = ".xlsx",
FileName = $"测试报告_{DateTime.Now:yyyyMMdd_HHmmss}.xlsx" FileName = $"测试报告_{SelectedTestReport.Scope}_{SelectedTestReport.StartTime:yyyyMMdd_HHmmss}.xlsx"
}; };
if (dialog.ShowDialog() != true) return; if (dialog.ShowDialog() != true) return;
var entities = entityResult.Data; var entities = entityResult.Data;
StatusMessage = $"正在导出 {entities.Count} 条记录..."; StatusMessage = $"正在导出 {entities.Count} 条步骤记录...";
await Task.Run(() => ExportToExcel(dialog.FileName, entities)); await Task.Run(() => ExportToExcel(dialog.FileName, entities));
ShowInfoMessageBox($"导出完成,共 {entities.Count} 条记录,已保存至:{dialog.FileName}", () => { }); ShowInfoMessageBox($"导出完成,共 {entities.Count} 条步骤记录,已保存至:{dialog.FileName}", () => { });
} }
#endregion #endregion

View File

@@ -135,6 +135,7 @@
Background="White" Background="White"
AlternatingRowBackground="#F5F7FA" AlternatingRowBackground="#F5F7FA"
SelectionMode="Single" SelectionMode="Single"
SelectedItem="{Binding SelectedTestReport}"
Margin="8"> Margin="8">
<DataGrid.Columns> <DataGrid.Columns>
<DataGridTextColumn Header="TestRoundId" <DataGridTextColumn Header="TestRoundId"

View File

@@ -93,7 +93,20 @@ namespace TestingModule.ViewModels.Dialogs
var index = Program.Parameters var index = Program.Parameters
.Select((x, i) => new { x, i }) .Select((x, i) => new { x, i })
.FirstOrDefault(p => p.x.ID == _ScopedContext.SelectedParameter.ID)?.i; .FirstOrDefault(p => p.x.ID == _ScopedContext.SelectedParameter.ID)?.i;
if (!_ScopedContext.SelectedParameter.IsEditable)
{
//公共变量只允许更改ParameterCategory为Input,Temp
if (Program.Parameters[index.Value].Value != Parameter.Value
|| Program.Parameters[index.Value].UpperLimit != Parameter.UpperLimit
|| Program.Parameters[index.Value].LowerLimit != Parameter.LowerLimit
|| Program.Parameters[index.Value].Name != Parameter.Name
|| Parameter.Category == ParameterCategory.Output
|| Program.Parameters[index.Value].Type != Parameter.Type)
{
RequestClose.Invoke(ButtonResult.Yes);
return;
}
}
if (index.HasValue) if (index.HasValue)
{ {
Program.Parameters[index.Value] = Parameter; Program.Parameters[index.Value] = Parameter;

View File

@@ -190,13 +190,13 @@ namespace TestingModule.ViewModels
private void ParameterDelete() private void ParameterDelete()
{ {
if (!_globalInfo.IsAdmin) return; if (!_globalInfo.IsAdmin || !SelectedParameter.IsEditable) return;
Program.Parameters.Remove(SelectedParameter); Program.Parameters.Remove(SelectedParameter);
} }
private void ParameterEdit() private void ParameterEdit()
{ {
if (!_globalInfo.IsAdmin||!SelectedParameter.IsEditable) return; if (!_globalInfo.IsAdmin) return;
var param = new DialogParameters var param = new DialogParameters
{ {
{ "Mode",SelectedParameter==null?"ADD":"Edit" }, { "Mode",SelectedParameter==null?"ADD":"Edit" },
@@ -207,10 +207,11 @@ namespace TestingModule.ViewModels
if (r.Result == ButtonResult.OK) if (r.Result == ButtonResult.OK)
{ {
_eventAggregator.GetEvent<ParamsChangedEvent>().Publish(); _eventAggregator.GetEvent<ParamsChangedEvent>().Publish();
ShowInfoMessageBox("保存成功", () => { });
} }
else else if (r.Result == ButtonResult.Yes)
{ {
ShowErrorMessageBox("公共变量只能设置变量类型Input,Temp", ()=>{ });
} }
}); });

View File

@@ -44,7 +44,7 @@ namespace UIShare.ViewModelBase
var dialogParams = new DialogParameters(); var dialogParams = new DialogParameters();
dialogParams.Add("Title", "错误"); dialogParams.Add("Title", "错误");
dialogParams.Add("Message", Message); dialogParams.Add("Message", Message);
dialogParams.Add("Icon", "info"); dialogParams.Add("Icon", "error");
dialogParams.Add("ShowOk", true); dialogParams.Add("ShowOk", true);
_dialogService.ShowDialog("MessageBox", dialogParams, result => _dialogService.ShowDialog("MessageBox", dialogParams, result =>
{ {

View File

@@ -21,7 +21,7 @@ namespace ZLGUSBCANFD
// 每个通道分配独立的 DBC 引擎句柄与锁彻底解决台架间DBC冲突与锁竞争 // 每个通道分配独立的 DBC 引擎句柄与锁彻底解决台架间DBC冲突与锁竞争
private readonly uint[] _dbcHandles; private readonly uint[] _dbcHandles;
private readonly bool[] _isDbcLoadedArray; private readonly bool[] _isDbcLoadedArray;
private readonly object[] _channelLocks; // 通道级细粒度锁 private readonly object[] _channelLocks; // 通道级细粒度锁
// 异步高性能接收线程控制 // 异步高性能接收线程控制
private volatile bool _isRunning = false; private volatile bool _isRunning = false;
@@ -619,7 +619,7 @@ namespace ZLGUSBCANFD
/// <param name="物理值">要写入的实际物理数值</param> /// <param name="物理值">要写入的实际物理数值</param>
/// <param name="循环发送间隔毫秒">0 = 单次发送;>0 = 周期循环发送(单位毫秒)</param> /// <param name="循环发送间隔毫秒">0 = 单次发送;>0 = 周期循环发送(单位毫秒)</param>
/// <returns>操作是否成功</returns> /// <returns>操作是否成功</returns>
public virtual bool (uint , string IDStr, string , double , int = 0, bool =false) public virtual bool (uint , string IDStr, string , double , int = 0, bool = false)
{ {
if (!TryParseFrameId(IDStr, out uint ID)) if (!TryParseFrameId(IDStr, out uint ID))
{ {
@@ -877,7 +877,7 @@ namespace ZLGUSBCANFD
} }
finally finally
{ {
Marshal.FreeHGlobal(ptrDbcMsg); Marshal.FreeHGlobal(ptrDbcMsg);
} }
} }