This commit is contained in:
xyy
2026-02-01 19:14:07 +08:00
parent 84f78d2bc5
commit abcf9da1db
6 changed files with 1278 additions and 204 deletions

View File

@@ -876,6 +876,121 @@
</Grid>
</Border>
<!-- 新增:最终平衡判断状态卡片 -->
<Border Background="#FFECB3" Style="{StaticResource CardStyle}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<!-- 左侧图标 -->
<TextBlock Text="🔥"
FontSize="24"
VerticalAlignment="Center"
Margin="0,0,15,0"/>
<!-- 中间:状态信息 -->
<StackPanel Grid.Column="1">
<TextBlock Text="最终平衡判断"
FontSize="13"
Foreground="#666666"
FontWeight="SemiBold"/>
<!-- 第一行:状态和计时 -->
<StackPanel Orientation="Horizontal" Margin="0,2,0,0">
<TextBlock x:Name="txtFinalBalanceState"
Text="未开始"
FontSize="16"
FontWeight="Bold"
Foreground="#2C3E50"
Margin="0,0,15,0"/>
<TextBlock Text="计时:"
FontSize="14"
Foreground="#666666"
Margin="0,0,5,0"/>
<TextBlock x:Name="txtFinalBalanceTimer"
Text="00:00"
FontSize="14"
FontWeight="SemiBold"
Foreground="#E74C3C"/>
</StackPanel>
<!-- 第二行:温度数据 -->
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<TextBlock Text="初始:"
FontSize="12"
Foreground="#666666"/>
<TextBlock x:Name="txtFinalBalanceInitialTemp"
Text="0.0°C"
FontSize="12"
FontWeight="SemiBold"
Foreground="#2C3E50"
Margin="0,0,10,0"/>
<TextBlock Text="最高:"
FontSize="12"
Foreground="#666666"/>
<TextBlock x:Name="txtFinalBalanceMaxTemp"
Text="0.0°C"
FontSize="12"
FontWeight="SemiBold"
Foreground="#E74C3C"
Margin="0,0,10,0"/>
<TextBlock Text="当前:"
FontSize="12"
Foreground="#666666"/>
<TextBlock x:Name="txtFinalBalanceCurrentTemp"
Text="0.0°C"
FontSize="12"
FontWeight="SemiBold"
Foreground="#2C3E50"/>
</StackPanel>
<!-- 第三行:数据统计 -->
<StackPanel Orientation="Horizontal" Margin="0,3,0,0">
<TextBlock Text="数据点:"
FontSize="12"
Foreground="#666666"/>
<TextBlock x:Name="txtFinalBalanceDataCount"
Text="0"
FontSize="12"
FontWeight="SemiBold"
Foreground="#2C3E50"
Margin="0,0,10,0"/>
<TextBlock Text="漂移:"
FontSize="12"
Foreground="#666666"/>
<TextBlock x:Name="txtFinalBalanceDrift"
Text="0.0°C"
FontSize="12"
FontWeight="SemiBold"
Foreground="#2C3E50"/>
</StackPanel>
</StackPanel>
<!-- 右侧:状态指示 -->
<Border Grid.Column="2"
x:Name="finalBalanceStatusBorder"
Background="#BDC3C7"
CornerRadius="4"
Padding="8,4"
Margin="10,0,0,0"
VerticalAlignment="Center">
<TextBlock x:Name="txtFinalBalanceStatusText"
Text="等待开始"
Foreground="White"
FontSize="12"
FontWeight="SemiBold"/>
</Border>
</Grid>
</Border>
<!-- 5. 合并时间状态、燃烧状态和试验进度 -->
<Border Background="#FFF8E1" Style="{StaticResource CardStyle}">
<Grid>
@@ -966,6 +1081,15 @@
VerticalAlignment="Center"/>
</StackPanel>
<!-- 进度条 -->
<Border Height="8"
Background="#E0E0E0"

File diff suppressed because it is too large Load Diff

View File

@@ -84,51 +84,25 @@
ColumnHeaderStyle="{StaticResource DataGridHeaderStyle}">
<DataGrid.Columns>
<DataGridTextColumn Header="试样编号"
Binding="{Binding SampleCode}"
Width="100"/>
<DataGridTextColumn Header="试样名称"
Binding="{Binding SampleName}"
Width="100"/>
<DataGridTextColumn Header="试样规格"
Binding="{Binding SampleSpec}"
Width="100"/>
<DataGridTextColumn Header="炉内初始温度(℃)"
Binding="{Binding MaxTemp, StringFormat=\{0:0.0\}}"
Width="150"/>
<DataGridTextColumn Header="炉内最高温度(℃)"
Binding="{Binding MaxTemp, StringFormat=\{0:0.0\}}"
Width="150"/>
<DataGridTextColumn Header="炉内最终温度(℃)"
Binding="{Binding FinalTemp, StringFormat=\{0:0.0\}}"
Width="150"/>
<DataGridTextColumn Header="温升(℃)"
Binding="{Binding TempRise, StringFormat=\{0:0.0\}}"
Width="100"/>
<DataGridTextColumn Header="试样中心最高温度(℃)"
Binding="{Binding MaxTemp, StringFormat=\{0:0.0\}}"
Width="160"/>
<DataGridTextColumn Header="试样中心最终温度(℃)"
Binding="{Binding FinalTemp, StringFormat=\{0:0.0\}}"
Width="160"/>
<DataGridTextColumn Header="试样表面最高温度(℃)"
Binding="{Binding MaxTemp, StringFormat=\{0:0.0\}}"
Width="160"/>
<DataGridTextColumn Header="试样表面最终温度(℃)"
Binding="{Binding FinalTemp, StringFormat=\{0:0.0\}}"
Width="160"/>
<DataGridTextColumn Header="试样初始质量(g)"
Binding="{Binding InitialWeight, StringFormat=\{0:0.00\}}"
Width="150"/>
<DataGridTextColumn Header="试样结束质量(g)"
Binding="{Binding FinalWeight, StringFormat=\{0:0.00\}}"
Width="150"/>
<DataGridTextColumn Header="质量损失(%)"
Binding="{Binding LossPercent, StringFormat=\{0:0.00\}%}"
Width="120"/>
<DataGridTextColumn Header="火焰持续时间(s)"
Binding="{Binding FlameDuration}"
Width="140"/>
<DataGridTextColumn Header="试样编号" Binding="{Binding SampleCode}" Width="80"/>
<DataGridTextColumn Header="试样名称" Binding="{Binding SampleName}" Width="100"/>
<DataGridTextColumn Header="试样规格" Binding="{Binding SampleSpec}" Width="80"/>
<DataGridTextColumn Header="初始温度(℃)" Binding="{Binding InitialTemp, StringFormat=\{0:F1\}}" Width="90"/>
<DataGridTextColumn Header="最高温度(℃)" Binding="{Binding MaxTemp, StringFormat=\{0:F1\}}" Width="90"/>
<DataGridTextColumn Header="最终温度(℃)" Binding="{Binding FinalTemp, StringFormat=\{0:F1\}}" Width="90"/>
<DataGridTextColumn Header="温升(℃)" Binding="{Binding TempRise, StringFormat=\{0:F1\}}" Width="80"/>
<DataGridTextColumn Header="中心最高温(℃)" Binding="{Binding CenterMaxTemp, StringFormat=\{0:F1\}}" Width="100"/>
<DataGridTextColumn Header="中心最终温(℃)" Binding="{Binding CenterFinalTemp, StringFormat=\{0:F1\}}" Width="100"/>
<DataGridTextColumn Header="表面最高温(℃)" Binding="{Binding SurfaceMaxTemp, StringFormat=\{0:F1\}}" Width="100"/>
<DataGridTextColumn Header="表面最终温(℃)" Binding="{Binding SurfaceFinalTemp, StringFormat=\{0:F1\}}" Width="100"/>
<DataGridTextColumn Header="初始质量(g)" Binding="{Binding InitialWeight, StringFormat=\{0:F2\}}" Width="90"/>
<DataGridTextColumn Header="结束质量(g)" Binding="{Binding FinalWeight, StringFormat=\{0:F2\}}" Width="90"/>
<DataGridTextColumn Header="质量损失(%)" Binding="{Binding LossPercent, StringFormat=\{0:F2\}}" Width="90"/>
<DataGridTextColumn Header="火焰时间(s)" Binding="{Binding FlameDuration}" Width="90"/>
<DataGridTextColumn Header="试验日期" Binding="{Binding TestDate}" Width="100"/>
<DataGridTextColumn Header="持续时间" Binding="{Binding TestDuration}" Width="80"/>
<DataGridTextColumn Header="平衡状态" Binding="{Binding BalanceStatus}" Width="80"/>
<DataGridTextColumn Header="备注" Binding="{Binding Remarks}" Width="150"/>
</DataGrid.Columns>
<DataGrid.CellStyle>
@@ -141,10 +115,10 @@
</Style>
</DataGrid.CellStyle>
<dxmvvm:Interaction.Behaviors>
<dxmvvm:EnumItemsSourceBehavior/>
<!--<dxmvvm:Interaction.Behaviors>
<dxmvvm:EnumItemsSourceBehavior/>
<dxmvvm:UIObjectService/>
</dxmvvm:Interaction.Behaviors>
</dxmvvm:Interaction.Behaviors>-->
</DataGrid>
</ScrollViewer>
@@ -188,7 +162,7 @@
Height="40"
Style="{StaticResource OperationButtonStyle}"
Background="#3498DB"
BorderBrush="#3498DB" Click="btnReturn_Click">
BorderBrush="#3498DB" >
<Button.ToolTip>
<TextBlock Text="返回试验主界面" FontSize="14"/>
</Button.ToolTip>

View File

@@ -1,5 +1,10 @@
using System;
using jiancaiburanxing.data;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -12,6 +17,7 @@ using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using ;
using Path = System.IO.Path;
namespace jiancaiburanxing
{
@@ -20,13 +26,239 @@ namespace jiancaiburanxing
/// </summary>
public partial class TestReportWindow : Window
{
private ObservableCollection<TestReportData> _testData;
private ICollectionView _testDataView;
#region
public TestReportWindow()
{
InitializeComponent();
InitializeDataGrid();
LoadTestData();
}
#endregion
private void InitializeDataGrid()
{
_testData = new ObservableCollection<TestReportData>();
_testDataView = CollectionViewSource.GetDefaultView(_testData);
dgTestReport.ItemsSource = _testDataView;
// 设置按钮事件
btnClearData.Click += BtnClearData_Click;
btnExportReport.Click += BtnExportReport_Click;
btnReturn.Click += btnReturn_Click;
}
// 加载试验数据
private void LoadTestData()
{
try
{
LoadTempDataFromFile();
//AddSampleData();
}
catch (Exception ex)
{
MessageBox.Show($"加载数据失败: {ex.Message}", "错误",
MessageBoxButton.OK, MessageBoxImage.Error);
}
}
// 可选:从临时文件加载数据
private void LoadTempDataFromFile()
{
try
{
string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TempReportData.txt");
if (!File.Exists(filePath)) return;
var lines = File.ReadAllLines(filePath, Encoding.UTF8);
foreach (var line in lines)
{
var parts = line.Split('|');
if (parts.Length >= 14)
{
var reportData = new TestReportData
{
SampleCode = parts[0],
SampleName = parts[1],
SampleSpec = parts[2],
InitialTemp = double.Parse(parts[3]),
MaxTemp = double.Parse(parts[4]),
FinalTemp = double.Parse(parts[5]),
TempRise = double.Parse(parts[6]),
InitialWeight = double.Parse(parts[7]),
FinalWeight = double.Parse(parts[8]),
LossPercent = double.Parse(parts[9]),
FlameDuration = int.Parse(parts[10]),
TestDate = parts[11],
TestDuration = parts[12],
BalanceStatus = parts[13],
Remarks = parts.Length > 14 ? parts[14] : ""
};
_testData.Add(reportData);
}
}
Debug.WriteLine($"从临时文件加载了 {_testData.Count} 条数据");
}
catch (Exception ex)
{
Debug.WriteLine($"加载临时数据失败: {ex.Message}");
}
}
//// 添加示例数据
//private void AddSampleData()
//{
// _testData.Add(new TestReportData
// {
// SampleCode = "TEST001",
// SampleName = "岩棉板",
// SampleSpec = "50mm",
// InitialTemp = 750.0,
// MaxTemp = 877.8,
// FinalTemp = 802.3,
// TempRise = 75.5,
// CenterMaxTemp = 850.0,
// CenterFinalTemp = 800.0,
// SurfaceMaxTemp = 900.0,
// SurfaceFinalTemp = 820.0,
// InitialWeight = 45.32,
// FinalWeight = 44.78,
// LossPercent = 1.19,
// FlameDuration = 0,
// TestDate = DateTime.Now.ToString("yyyy-MM-dd"),
// TestDuration = "30:00",
// BalanceStatus = "达到平衡",
// Remarks = "符合标准GB/T 5464-2010"
// });
//}
// 导出报表
private void BtnExportReport_Click(object sender, RoutedEventArgs e)
{
try
{
var saveDialog = new Microsoft.Win32.SaveFileDialog
{
Filter = "Excel文件 (*.xlsx)|*.xlsx|CSV文件 (*.csv)|*.csv|所有文件 (*.*)|*.*",
FileName = $"不燃性试验报告_{DateTime.Now:yyyyMMdd_HHmmss}",
DefaultExt = ".xlsx"
};
if (saveDialog.ShowDialog() == true)
{
ExportToExcel(saveDialog.FileName);
MessageBox.Show($"报表已导出到:\n{saveDialog.FileName}", "导出成功",
MessageBoxButton.OK, MessageBoxImage.Information);
}
}
catch (Exception ex)
{
MessageBox.Show($"导出失败: {ex.Message}", "错误",
MessageBoxButton.OK, MessageBoxImage.Error);
}
}
// 导出到Excel简化版本
private void ExportToExcel(string filePath)
{
using (var writer = new StreamWriter(filePath, false, Encoding.UTF8))
{
// 写入标题
writer.WriteLine("建材不燃性试验数据报表");
writer.WriteLine($"生成时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
writer.WriteLine("符合标准: GB/T 5464-2010");
writer.WriteLine();
// 写入表头
writer.WriteLine("试样编号,试样名称,试样规格,炉内初始温度(℃),炉内最高温度(℃),炉内最终温度(℃),温升(℃)," +
"试样中心最高温度(℃),试样中心最终温度(℃),试样表面最高温度(℃),试样表面最终温度(℃)," +
"试样初始质量(g),试样结束质量(g),质量损失(%),火焰持续时间(s),试验日期,试验持续时间,平衡状态,备注");
// 写入数据
foreach (var item in _testData)
{
writer.WriteLine($"{item.SampleCode},{item.SampleName},{item.SampleSpec}," +
$"{item.InitialTemp:F1},{item.MaxTemp:F1},{item.FinalTemp:F1},{item.TempRise:F1}," +
$"{item.CenterMaxTemp:F1},{item.CenterFinalTemp:F1},{item.SurfaceMaxTemp:F1},{item.SurfaceFinalTemp:F1}," +
$"{item.InitialWeight:F2},{item.FinalWeight:F2},{item.LossPercent:F2}," +
$"{item.FlameDuration},{item.TestDate},{item.TestDuration},{item.BalanceStatus},{item.Remarks}");
}
}
}
// 添加新的试验数据(由主窗口调用)
public void AddTestReportData(TestReportData data)
{
Dispatcher.Invoke(() =>
{
_testData.Insert(0, data); // 插入到开头
});
}
// 清空数据
private void BtnClearData_Click(object sender, RoutedEventArgs e)
{
var result = MessageBox.Show("确定要清空所有报表数据吗?此操作不可恢复。",
"确认清空", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.Yes)
{
_testData.Clear();
DeleteJsonDataFile();
MessageBox.Show("数据已清空", "提示",
MessageBoxButton.OK, MessageBoxImage.Information);
}
}
// 删除JSON数据文件
private void DeleteJsonDataFile()
{
try
{
// 假设你的JSON文件路径根据你的实际情况调整
string jsonFilePath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"TestReportData.json");
// 如果文件存在,就删除
if (File.Exists(jsonFilePath))
{
File.Delete(jsonFilePath);
Debug.WriteLine($"JSON数据文件已删除: {jsonFilePath}");
}
else
{
Debug.WriteLine($"JSON数据文件不存在: {jsonFilePath}");
}
string tempFilePath = Path.Combine(
AppDomain.CurrentDomain.BaseDirectory,
"TempReportData.txt");
if (File.Exists(tempFilePath))
{
File.Delete(tempFilePath);
Debug.WriteLine($"临时数据文件已删除: {tempFilePath}");
}
}
catch (Exception ex)
{
// 记录错误但不影响主流程
Debug.WriteLine($"删除JSON数据文件失败: {ex.Message}");
}
}
#region
private MainWindow _mainWindow;
@@ -63,6 +295,6 @@ namespace jiancaiburanxing
#endregion
}
}

View File

@@ -10,13 +10,13 @@ namespace jiancaiburanxing.data
{
#region
public string Num { get; set; } //试验编号
public string Num { get; set; } //试验编号
public string Name { get; set; }//试验名称
public string Specs { get; set; }//试验规格
public float InitialFurnaceTemperature { get; set; }//炉内初始温度
public float InitialFurnaceTemperature { get; set; }//炉内初始温度
public float HighFurnaceTemperature { get; set; }//炉内最高温度
@@ -42,4 +42,29 @@ namespace jiancaiburanxing.data
#endregion
}
#region
public class TestReportData
{
public string SampleCode { get; set; } // 试样编号
public string SampleName { get; set; } // 试样名称
public string SampleSpec { get; set; } // 试样规格
public double InitialTemp { get; set; } // 炉内初始温度
public double MaxTemp { get; set; } // 炉内最高温度
public double FinalTemp { get; set; } // 炉内最终温度
public double TempRise { get; set; } // 温升
public double CenterMaxTemp { get; set; } // 试样中心最高温度
public double CenterFinalTemp { get; set; } // 试样中心最终温度
public double SurfaceMaxTemp { get; set; } // 试样表面最高温度
public double SurfaceFinalTemp { get; set; } // 试样表面最终温度
public double InitialWeight { get; set; } // 试样初始质量
public double FinalWeight { get; set; } // 试样结束质量
public double LossPercent { get; set; } // 质量损失百分比
public int FlameDuration { get; set; } // 火焰持续时间
public string TestDate { get; set; } // 试验日期
public string TestDuration { get; set; } // 试验持续时间
public string BalanceStatus { get; set; } // 平衡状态
public string Remarks { get; set; } // 备注
}
#endregion
}

View File

@@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net7.0-windows</TargetFramework>
<TargetFramework>net8.0-windows7.0</TargetFramework>
<UseWPF>true</UseWPF>
<AssemblyName>jiancaiburanxing</AssemblyName>
<RootNamespace>jiancaiburanxing</RootNamespace>
@@ -12,19 +12,20 @@
<PackageReference Include="DevExpress.Wpf.Core" Version="22.2.*-*" />
<PackageReference Include="devexpress.wpf.layoutcontrol" Version="22.2.3" />
<PackageReference Include="DevExpress.Wpf.Themes.All" Version="22.2.*-*" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="NModbus" Version="3.0.81" />
<PackageReference Include="SunnyUI" Version="3.9.1" />
</ItemGroup>
<ItemGroup>
<Reference Include="DevExpress.Charts.v22.2.Core">
<HintPath>..\..\..\..\..\..\Program Files\腾讯电脑管家软件搬家\软件搬家\DevExpress Components 22.2\Bin\Framework\DevExpress.Charts.v22.2.Core.dll</HintPath>
<HintPath>bin\Debug\net8.0-windows7.0\DevExpress.Charts.v22.2.Core.dll</HintPath>
</Reference>
<Reference Include="DevExpress.Data.v22.2">
<HintPath>..\..\..\..\..\..\Program Files\腾讯电脑管家软件搬家\软件搬家\DevExpress Components 22.2\Bin\Framework\DevExpress.Data.v22.2.dll</HintPath>
</Reference>
<Reference Include="DevExpress.Xpf.Charts.v22.2">
<HintPath>..\..\..\..\..\..\Program Files\腾讯电脑管家软件搬家\软件搬家\DevExpress Components 22.2\Bin\Framework\DevExpress.Xpf.Charts.v22.2.dll</HintPath>
<HintPath>bin\Debug\net8.0-windows7.0\DevExpress.Xpf.Charts.v22.2.dll</HintPath>
</Reference>
<Reference Include="DevExpress.Xpf.Core.v22.2">
<HintPath>..\..\..\..\..\..\Program Files\腾讯电脑管家软件搬家\软件搬家\DevExpress Components 22.2\Bin\Framework\DevExpress.Xpf.Core.v22.2.dll</HintPath>