Преглед изворни кода

照片采集查询导出与显示字段扩展优化

扩展了导出 CSV 字段至13项,并实现了字段内容的转义处理,防止特殊字符导致格式错误。同步增强了界面 DataGrid 显示,新增多项字段并本地化列名,“是否成功”列改为彩色高亮显示 OK/NG,提升数据可读性和用户体验。
徐孝锋 пре 7 месеци
родитељ
комит
aef3813af2

+ 26 - 2
TeamAAS-VM/ViewModels/Statistics/PhotoCaptureQueryViewModel.cs

@@ -150,10 +150,24 @@ namespace TeamAAS_VP.ViewModels.Statistics
                 var path = dlg.FileName;
                 using (var sw = new StreamWriter(path, false, Encoding.UTF8))
                 {
-                    sw.WriteLine("CaptureTime,RecipeName,CameraName,ProductSN,Result,ImagePath");
+                    sw.WriteLine("Id,CaptureTime,RecipeName,ProcessName,CameraName,ProductSN,IsSuccess,RobotPosition,PixelPosition,AbsolutePosition,ImagePath,OperatorName,Remarks");
                     foreach (var r in all)
                     {
-                        sw.WriteLine($"{r.CaptureTime:yyyy-MM-dd HH:mm:ss},{r.RecipeName},{r.CameraName},{r.ProductSN},{r.IsSuccess},{r.ImagePath}");
+                        sw.WriteLine(string.Join(",",
+                            EscapeCsv(r.Id.ToString()),
+                            EscapeCsv(r.CaptureTime.ToString("yyyy-MM-dd HH:mm:ss")),
+                            EscapeCsv(r.RecipeName),
+                            EscapeCsv(r.ProcessName),
+                            EscapeCsv(r.CameraName),
+                            EscapeCsv(r.ProductSN),
+                            EscapeCsv(r.IsSuccess ? "1" : "0"),
+                            EscapeCsv(r.RobotPosition),
+                            EscapeCsv(r.PixelPosition),
+                            EscapeCsv(r.AbsolutePosition),
+                            EscapeCsv(r.ImagePath),
+                            EscapeCsv(r.OperatorName),
+                            EscapeCsv(r.Remarks)
+                        ));
                     }
                 }
             }
@@ -162,5 +176,15 @@ namespace TeamAAS_VP.ViewModels.Statistics
                 MessageBox.Show(ex.Message, "´íÎó", MessageBoxButton.OK, MessageBoxImage.Error);
             }
         }
+
+        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;
+        }
     }
 }

+ 56 - 7
TeamAAS-VM/Views/Statistics/PhotoCaptureQuery.xaml

@@ -83,18 +83,67 @@
                   CanUserAddRows="False"
                   IsReadOnly="True">
             <DataGrid.Columns>
+                <DataGridTextColumn Header="Id"
+                                    Binding="{Binding Id}"
+                                    Width="50" />
                 <DataGridTextColumn Header="CaptureTime"
-                                    Binding="{Binding CaptureTime, StringFormat=yyyy-MM-dd HH:mm:ss}" />
-                <DataGridTextColumn Header="RecipeName"
+                                    Binding="{Binding CaptureTime, StringFormat=yyyy-MM-dd HH:mm:ss}"/>
+                <DataGridTextColumn Header="配方名"
                                     Binding="{Binding RecipeName}" />
-                <DataGridTextColumn Header="CameraName"
+                <DataGridTextColumn Header="流程名"
+                                    Binding="{Binding ProcessName}" />
+                <DataGridTextColumn Header="相机名"
                                     Binding="{Binding CameraName}" />
-                <DataGridTextColumn Header="ProductSN"
+                <DataGridTextColumn Header="产品SN"
                                     Binding="{Binding ProductSN}" />
-                <DataGridTextColumn Header="Result"
-                                    Binding="{Binding Result}" />
-                <DataGridTextColumn Header="ImagePath"
+                <!-- Changed to TemplateColumn to show OK/NG with color -->
+                <DataGridTemplateColumn Header="是否成功"
+                                        Width="85">
+                    <DataGridTemplateColumn.CellTemplate>
+                        <DataTemplate>
+                            <Border CornerRadius="4"
+                                    Padding="2"
+                                    HorizontalAlignment="Center"
+                                    VerticalAlignment="Center">
+                                <TextBlock HorizontalAlignment="Center"
+                                           VerticalAlignment="Center"
+                                           Foreground="White"
+                                           FontWeight="Bold"
+                                           TextAlignment="Center">
+                                    <TextBlock.Style>
+                                        <Style TargetType="TextBlock">
+                                            <Setter Property="Text"
+                                                    Value="OK" />
+                                            <Setter Property="Background"
+                                                    Value="Green" />
+                                            <Style.Triggers>
+                                                <DataTrigger Binding="{Binding IsSuccess}"
+                                                             Value="False">
+                                                    <Setter Property="Text"
+                                                            Value="NG" />
+                                                    <Setter Property="Background"
+                                                            Value="Red" />
+                                                </DataTrigger>
+                                            </Style.Triggers>
+                                        </Style>
+                                    </TextBlock.Style>
+                                </TextBlock>
+                            </Border>
+                        </DataTemplate>
+                    </DataGridTemplateColumn.CellTemplate>
+                </DataGridTemplateColumn>
+                <DataGridTextColumn Header="机器人位置"
+                                    Binding="{Binding RobotPosition}" />
+                <DataGridTextColumn Header="像素坐标"
+                                    Binding="{Binding PixelPosition}"/>
+                <DataGridTextColumn Header="绝对坐标"
+                                    Binding="{Binding AbsolutePosition}" />
+                <DataGridTextColumn Header="图片路径"
                                     Binding="{Binding ImagePath}" />
+                <DataGridTextColumn Header="操作员"
+                                    Binding="{Binding OperatorName}"/>
+                <DataGridTextColumn Header="备注"
+                                    Binding="{Binding Remarks}" />
             </DataGrid.Columns>
         </DataGrid>
         <StackPanel Grid.Row="3"