Prechádzať zdrojové kódy

优化生产记录导出与界面字段显示

优化导出功能,支持导出当前页所有生产记录及全部字段(含Id、产品编码、设备信息等),并完善CSV转义处理。界面DataGrid同步新增相关字段显示,提升数据明细的可读性和导出完整性。
徐孝锋 7 mesiacov pred
rodič
commit
894e76418d

+ 28 - 8
TeamAAS-VM/ViewModels/Statistics/ProductionRecordQueryViewModel.cs

@@ -2,6 +2,7 @@ using Prism.Commands;
 using Prism.Mvvm;
 using System;
 using System.Collections.ObjectModel;
+using System.Globalization;
 using System.IO;
 using System.Linq;
 using System.Text;
@@ -108,19 +109,27 @@ namespace TeamAAS_VP.ViewModels.Statistics
         {
             try
             {
-                var start = StartDate.HasValue ? StartDate.Value.Date : DateTime.MinValue;
-                var end = EndDate.HasValue ? EndDate.Value.Date.AddDays(1) : DateTime.MaxValue;
-                string productName = SelectedProduct?.Name;
-                var resAll = await _systemDatabaseService.GetProductionStatsAsync(new ProductionStatQuery { ProductName = productName, Start = start, End = end, GroupBy = "total" });
-                var saveFileDialog = new Microsoft.Win32.SaveFileDialog { FileName = $"Production_{DateTime.Now:yyyyMMddHHmmss}.csv", DefaultExt = ".csv", Filter = "CSV Files (*.csv)|*.csv" };
+                // Export current page Results (paged) to CSV including all ProductionRecord fields
+                var saveFileDialog = new Microsoft.Win32.SaveFileDialog { FileName = $"ProductionRecords_{DateTime.Now:yyyyMMddHHmmss}.csv", DefaultExt = ".csv", Filter = "CSV Files (*.csv)|*.csv" };
                 if (saveFileDialog.ShowDialog() != true) return;
                 var path = saveFileDialog.FileName;
                 using (var sw = new StreamWriter(path, false, Encoding.UTF8))
                 {
-                    sw.WriteLine("PeriodStart,PeriodEnd,Quantity,ProductName");
-                    foreach (var r in resAll)
+                    sw.WriteLine("Id,Timestamp,ProductName,ProductCode,DeviceId,DeviceName,Category,Quantity,UserName,Remark");
+                    foreach (var r in Results)
                     {
-                        sw.WriteLine($"{r.PeriodStart:yyyy-MM-dd HH:mm:ss},{r.PeriodEnd:yyyy-MM-dd HH:mm:ss},{r.Quantity},{r.ProductName}");
+                        sw.WriteLine(string.Join(",",
+                            EscapeCsv(r.Id.ToString()),
+                            EscapeCsv(r.Timestamp.ToString("yyyy-MM-dd HH:mm:ss")),
+                            EscapeCsv(r.ProductName),
+                            EscapeCsv(r.ProductCode),
+                            EscapeCsv(r.DeviceId.ToString()),
+                            EscapeCsv(r.DeviceName),
+                            EscapeCsv(r.Category),
+                            EscapeCsv(r.Quantity.ToString()),
+                            EscapeCsv(r.UserName),
+                            EscapeCsv(r.Remark)
+                        ));
                     }
                 }
             }
@@ -128,6 +137,7 @@ namespace TeamAAS_VP.ViewModels.Statistics
             {
                 MessageBox.Show(ex.Message, "´íÎó", MessageBoxButton.OK, MessageBoxImage.Error);
             }
+            await Task.CompletedTask;
         }
 
         private async void LoadCategoriesForProduct(string productName)
@@ -143,5 +153,15 @@ namespace TeamAAS_VP.ViewModels.Statistics
             }
             catch { }
         }
+
+        private string EscapeCsv(string s)
+        {
+            if (s == null) return "";
+            if (s.Contains(",") || s.Contains("\"") || s.Contains("\r") || s.Contains("\n"))
+            {
+                return "\"" + s.Replace("\"", "\"\"") + "\"";
+            }
+            return s;
+        }
     }
 }

+ 9 - 0
TeamAAS-VM/Views/Statistics/ProductionRecordQuery.xaml

@@ -79,8 +79,17 @@
             <DataGrid.Columns>
                 <DataGridTextColumn Header="时间"
                                     Binding="{Binding Timestamp, StringFormat=yyyy-MM-dd HH:mm:ss}" />
+                <DataGridTextColumn Header="Id"
+                                    Binding="{Binding Id}"
+                                    Width="50" />
                 <DataGridTextColumn Header="产品"
                                     Binding="{Binding ProductName}" />
+                <DataGridTextColumn Header="产品编码"
+                                    Binding="{Binding ProductCode}" />
+                <DataGridTextColumn Header="设备Id"
+                                    Binding="{Binding DeviceId}" />
+                <DataGridTextColumn Header="设备名称"
+                                    Binding="{Binding DeviceName}" />
                 <DataGridTextColumn Header="类别"
                                     Binding="{Binding Category}" />
                 <DataGridTextColumn Header="数量"