Ver código fonte

修改提交的

user_lt 1 ano atrás
pai
commit
3abc7a6c46

+ 504 - 0
BlankApp1/BlankApp1/ViewModels/BusinessManageViewModel/TestResultDetailViewModel.cs

@@ -0,0 +1,504 @@
+using AutoMapper;
+using BizService;
+using Microsoft.Extensions.Logging;
+using Model.Dto;
+using Model.Entities;
+using Newtonsoft.Json;
+using PLCTool.Common;
+using Prism.Commands;
+using Prism.Events;
+using Prism.Mvvm;
+using Prism.Services.Dialogs;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using static System.Windows.Forms.VisualStyles.VisualStyleElement.ListView;
+
+namespace PLCTool.ViewModels.BusinessManageViewModel
+{
+   
+    public class TestResultDetailViewModel : BindableBase, IDialogAware
+    {
+        private readonly IDialogService _dialog;
+        private readonly IEventAggregator _aggregator;
+        private readonly IOptionConfigService _optionConfigService;
+        private readonly IBasicPlcTestSchemeService _basicPlcTestSchemeService;
+        private readonly IBasicPlcTestSchemeDtlService _basicPlcTestSchemeDtlService;
+        private readonly IBizTestRecordService _iBizTestRecordService;
+        private readonly IBizTestRecordDtlService _iBizTestRecordDtlService;
+        private readonly IMapper _mapper;
+        private readonly ILogger _logger;
+        private List<OptionConfigDto> _optionConfigs;
+
+        private DateTime startTime = DateTime.Now;
+        private DateTime endTime = DateTime.Now;
+        private int testStatus = 0;  //测试状态 
+        private int testResult = 0; //测试结果
+        private long schDetailId = 0; //测试方案明细ID
+
+
+        public TestResultDetailViewModel(IDialogService dialog, IEventAggregator aggregator, IOptionConfigService optionConfigService, IBasicPlcTestSchemeService basicPlcTestSchemeService, IBasicPlcTestSchemeDtlService basicPlcTestSchemeDtlService, IBizTestRecordService iBizTestRecordService, IBizTestRecordDtlService iBizTestRecordDtlService, IMapper mapper)
+        {
+            _dialog = dialog;
+            _aggregator = aggregator;
+            _optionConfigService = optionConfigService;
+            _basicPlcTestSchemeService = basicPlcTestSchemeService;
+            _basicPlcTestSchemeDtlService = basicPlcTestSchemeDtlService;
+            _iBizTestRecordDtlService = iBizTestRecordDtlService;
+            _iBizTestRecordService = iBizTestRecordService;
+            _mapper = mapper;
+        
+       
+            BeforeConList = new ObservableCollection<BasPlcItemConfigDto>();
+            InConList = new ObservableCollection<BasPlcItemConfigDto>();
+            OutConList = new ObservableCollection<BasPlcItemConfigDto>();
+            GetConfigOption();
+        }
+
+
+
+
+        #region idialog接口实现
+        public string Title { set; get; } = "测试结果查询";
+
+        public event Action<IDialogResult> RequestClose;
+
+        public bool CanCloseDialog()
+        {
+            return true;
+        }
+
+        public void OnDialogClosed()
+        {
+
+        }
+
+        public void OnDialogOpened(IDialogParameters parameters)
+        {
+            //编辑
+            var getMsg = parameters.GetValues<long>("Key");
+            ///值不为空,表示修改
+            if (getMsg != null)
+            {
+                try
+                {
+                    foreach (var item in getMsg)
+                    {
+                        schDetailId = item; //测试方案明细ID
+                        int schDtlId = Convert.ToInt32(item);
+                        //根据 测试方案明细主键ID 查找测试方案id 及方案名和设备名
+                        var findEntity = _basicPlcTestSchemeDtlService.Find(schDtlId);
+                        var findresult = _mapper.Map<bas_plc_test_scheme_dtl, BasicPlcTestSchemeDtlDto>(findEntity);
+                        if (findresult != null)
+                        {
+                            //根据方案id 在方案表中查找方案名 设备名
+                            int schID = Convert.ToInt32(findresult.SchemeId);
+                            var findSch = _basicPlcTestSchemeService.Find(schID);
+                            if (findSch != null)
+                            {
+                                ScheduleName = findSch.scheme_name;
+                                DeviceName = findSch.device_name;
+
+                            }
+                            TestName = findresult.ItemName;
+                            SelectTest = findresult.ItemType;
+
+                            //这里是测试项 结果和 测试记录明细状态
+                            //根据测试方案明细id查找结果
+                            var recordDetail = _iBizTestRecordDtlService.FindRecordDetailBySchDtlID(schDtlId);
+                            if (recordDetail != null)
+                            {       //前置项结果解析
+                                string preconStr = recordDetail.precondition_final?.ToString();
+                                if (!string.IsNullOrEmpty(preconStr))
+                                {
+                                    JsonModel preconditionModel = JsonConvert.DeserializeObject<JsonModel>(preconStr);
+                                    BeforeSelectJudge = preconditionModel.ItemType;
+                                    SelectLogic = preconditionModel.ItemLogical;
+                                    BeforeDetail = preconditionModel.Description;
+                                    BeforeConList.Clear();
+                                    foreach (var detail in preconditionModel.DetailInfo)
+                                    {
+                                        BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
+                                        basPlcItemConfigDto.Id = detail.Id;
+                                        basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
+                                        basPlcItemConfigDto.PlcItem = detail.PlcItem;
+                                        basPlcItemConfigDto.PlcValue = detail.PlcValue;
+                                        basPlcItemConfigDto.Remark = detail.Remark;
+                                        basPlcItemConfigDto.TestTime = detail.TestTime;
+                                        basPlcItemConfigDto.RealValue = detail.RealValue;
+                                        basPlcItemConfigDto.TestResult = detail.TestResult;
+                                        beforeConList.Add(basPlcItemConfigDto);
+                                    }
+                                }
+
+                                //输入项解析
+                                string inStr = recordDetail.action_final?.ToString();
+                                if (!string.IsNullOrEmpty(inStr))
+                                {
+                                    JsonModel inModel = JsonConvert.DeserializeObject<JsonModel>(inStr);
+                                    SelectInJudge = inModel.ItemType;
+                                    InSelectLogic = inModel.ItemLogical;
+                                    InDetail = inModel.Description;
+                                    InConList.Clear();
+                                    foreach (var detail in inModel.DetailInfo)
+                                    {
+                                        BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
+                                        basPlcItemConfigDto.Id = detail.Id;
+                                        basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
+                                        basPlcItemConfigDto.PlcItem = detail.PlcItem;
+                                        basPlcItemConfigDto.PlcValue = detail.PlcValue;
+                                        basPlcItemConfigDto.Remark = detail.Remark;
+                                        basPlcItemConfigDto.TestTime = detail.TestTime;
+                                        basPlcItemConfigDto.RealValue = detail.RealValue;
+                                        basPlcItemConfigDto.TestResult = detail.TestResult;
+                                        InConList.Add(basPlcItemConfigDto);
+                                    }
+                                }
+
+                                //输出项解析
+                                string outStr = recordDetail.judgement_result_final?.ToString();
+                                if (!string.IsNullOrEmpty(outStr))
+                                {
+                                    JsonModel outModel = JsonConvert.DeserializeObject<JsonModel>(outStr);
+                                    SelectOutJudge = outModel.ItemType;
+                                    OutSelectLogic = outModel.ItemLogical;
+                                    OutDetail = outModel.Description;
+                                    OutConList.Clear();
+                                    foreach (var detail in outModel.DetailInfo)
+                                    {
+                                        BasPlcItemConfigDto basPlcItemConfigDto = new BasPlcItemConfigDto();
+                                        basPlcItemConfigDto.Id = detail.Id;
+                                        basPlcItemConfigDto.PlcAddress = detail.PlcAddress;
+                                        basPlcItemConfigDto.PlcItem = detail.PlcItem;
+                                        basPlcItemConfigDto.PlcValue = detail.PlcValue;
+                                        basPlcItemConfigDto.Remark = detail.Remark;
+                                        basPlcItemConfigDto.TestTime = detail.TestTime;
+                                        basPlcItemConfigDto.RealValue = detail.RealValue;
+                                        basPlcItemConfigDto.TestResult = detail.TestResult;
+                                        OutConList.Add(basPlcItemConfigDto);
+                                    }
+                                }
+                            }
+
+
+
+
+                        }
+
+                    }
+                }
+                catch(Exception ex)
+                {
+                    _logger.LogError(ex.ToString());
+                }
+                
+
+            }
+        }
+
+        #endregion
+
+        #region 私有发方法
+
+
+   
+
+      
+        /// <summary>
+        /// 开始检测
+        /// </summary>
+        /// <param name="obj"></param>
+        private void Start(object obj)
+        {
+            //开始时间
+            startTime = DateTime.Now;
+
+        }
+
+        /// <summary>
+        /// 获取配置
+        /// </summary>
+        private void GetConfigOption()
+        {
+            var configList = _optionConfigService.QueryList();
+            _optionConfigs = _mapper.Map<List<OptionConfig>, List<OptionConfigDto>>(configList);
+            var tests = _optionConfigs.FindAll(x => x.TypeID == 1);
+            TestKinds = new List<string>();
+            foreach (var test in tests)
+            {
+                TestKinds.Add(test.ContentOption);
+            }
+
+            //测试项类型
+            var judges = _optionConfigs.FindAll(x => x.TypeID == 2);
+            foreach (var judge in judges)
+            {
+                BeforeJudgeKinds.Add(judge.ContentOption);
+                InJudgeKinds.Add(judge.ContentOption);
+                OutJudgeKinds.Add(judge.ContentOption);
+            }
+
+            //判定逻辑
+            var logics = _optionConfigs.FindAll(x => x.TypeID == 3);
+            foreach (var logic in logics)
+            {
+                JudgeLogicKinds.Add(logic.ContentOption);
+                InJudgeLogicKinds.Add(logic.ContentOption);
+                OutJudgeLogicKinds.Add(logic.ContentOption);
+
+            }
+
+        }
+
+
+
+
+
+
+        /// <summary>
+        /// 关闭按钮
+        /// </summary>
+        private void Close()
+        {
+            RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel));
+        }
+
+
+
+
+
+        /// <summary>
+        /// mode转json
+        /// </summary>
+        /// <param name="itemType"></param>
+        /// <param name="itemLogical"></param>
+        /// <param name="description"></param>
+        /// <param name="conList"></param>
+        /// <returns></returns>
+
+        private string ModelToJsonToStr(string itemType, string itemLogical, string description, ObservableCollection<BasPlcItemConfigDto> conList)
+        {
+            JsonModel prefixJsonModel = new JsonModel();
+            prefixJsonModel.ItemType = itemType;
+            prefixJsonModel.ItemLogical = itemLogical;
+            prefixJsonModel.Description = description;
+            prefixJsonModel.DetailInfo = new List<DetailPLC>();
+            foreach (var item in conList)
+            {
+                DetailPLC plcItem = new DetailPLC();
+                plcItem.Id = item.Id;
+                plcItem.PlcItem = item.PlcItem;
+                plcItem.PlcAddress = item.PlcAddress;
+                plcItem.PlcAddType = item.PlcAddType;
+                plcItem.PlcValue = item.PlcValue;
+                plcItem.Remark = item.Remark;
+                prefixJsonModel.DetailInfo.Add(plcItem);
+
+            }
+            string prefixJsonStr = JsonConvert.SerializeObject(prefixJsonModel);
+            return prefixJsonStr;
+        }
+
+
+        #endregion
+
+
+        #region 命令绑定
+    
+
+        public DelegateCommand<object> StartCommand { set; get; }
+
+    
+
+
+        #endregion
+        #region 变量绑定
+        /// <summary>
+        /// 测试方案编码
+        /// </summary>
+        private string scheduleName;
+        public string ScheduleName
+        {
+            get { return scheduleName; }
+            set { scheduleName = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 设备名称
+        /// </summary>
+        private string deviceName;
+        public string DeviceName
+        {
+            get { return deviceName; }
+            set { deviceName = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 测试项名称
+        /// </summary>
+        private string testName;
+        public string TestName
+        {
+            get { return testName; }
+            set { testName = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 测试项类型
+        /// </summary>
+        private List<string> testKinds = new List<string>();
+        public List<string> TestKinds
+        {
+            get { return testKinds; }
+            set { testKinds = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 
+        /// </summary>
+        private string selectTest;
+        public string SelectTest
+        {
+            get { return selectTest; }
+            set { selectTest = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 判定类型(前置项)
+        /// </summary>
+        private List<string> beforeJudgeKinds = new List<string>();
+        public List<string> BeforeJudgeKinds
+        {
+            get { return beforeJudgeKinds; }
+            set { beforeJudgeKinds = value; RaisePropertyChanged(); }
+        }
+        private string beforeSelectJudge;
+        public string BeforeSelectJudge
+        {
+            get { return beforeSelectJudge; }
+            set { beforeSelectJudge = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 逻辑判断
+        /// </summary>
+        private List<string> judgeLogicKinds = new List<string>();
+        public List<string> JudgeLogicKinds
+        {
+            get { return judgeLogicKinds; }
+            set { judgeLogicKinds = value; RaisePropertyChanged(); }
+        }
+        private string selectLogic;
+        public string SelectLogic
+        {
+            get { return selectLogic; }
+            set { selectLogic = value; RaisePropertyChanged(); }
+        }
+        private string beforeDetail;
+        public string BeforeDetail
+        {
+            get { return beforeDetail; }
+            set { beforeDetail = value; RaisePropertyChanged(); }
+        }
+
+        private ObservableCollection<BasPlcItemConfigDto> beforeConList;
+        public ObservableCollection<BasPlcItemConfigDto> BeforeConList
+        {
+            get { return beforeConList; }
+            set { beforeConList = value; RaisePropertyChanged(); }
+        }
+
+        /// <summary>
+        /// 判定类型(输入项)
+        /// </summary>
+        private List<string> inJudgeKinds = new List<string>();
+        public List<string> InJudgeKinds
+        {
+            get { return inJudgeKinds; }
+            set { inJudgeKinds = value; RaisePropertyChanged(); }
+        }
+        private string selectInJudge;
+        public string SelectInJudge
+        {
+            get { return selectInJudge; }
+            set { selectInJudge = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 逻辑判断
+        /// </summary>
+        private List<string> inJudgeLogicKinds = new List<string>();
+        public List<string> InJudgeLogicKinds
+        {
+            get { return inJudgeLogicKinds; }
+            set { inJudgeLogicKinds = value; RaisePropertyChanged(); }
+        }
+        private string inSelectLogic;
+        public string InSelectLogic
+        {
+            get { return inSelectLogic; }
+            set { inSelectLogic = value; RaisePropertyChanged(); }
+        }
+        private string inDetail;
+        public string InDetail
+        {
+            get { return inDetail; }
+            set { inDetail = value; RaisePropertyChanged(); }
+        }
+
+        private ObservableCollection<BasPlcItemConfigDto> inConList;
+        public ObservableCollection<BasPlcItemConfigDto> InConList
+        {
+            get { return inConList; }
+            set { inConList = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 判定类型(结果项)
+        /// </summary>
+        private List<string> outJudgeKinds = new List<string>();
+        public List<string> OutJudgeKinds
+        {
+            get { return outJudgeKinds; }
+            set { outJudgeKinds = value; RaisePropertyChanged(); }
+        }
+        private string selectOutJudge;
+        public string SelectOutJudge
+        {
+            get { return selectOutJudge; }
+            set { selectOutJudge = value; RaisePropertyChanged(); }
+        }
+        /// <summary>
+        /// 逻辑判断
+        /// </summary>
+        private List<string> outJudgeLogicKinds = new List<string>();
+        public List<string> OutJudgeLogicKinds
+        {
+            get { return outJudgeLogicKinds; }
+            set { outJudgeLogicKinds = value; RaisePropertyChanged(); }
+        }
+        private string outSelectLogic;
+        public string OutSelectLogic
+        {
+            get { return outSelectLogic; }
+            set { outSelectLogic = value; RaisePropertyChanged(); }
+        }
+
+        private string outDetail;
+        public string OutDetail
+        {
+            get { return outDetail; }
+            set { outDetail = value; RaisePropertyChanged(); }
+        }
+        private ObservableCollection<BasPlcItemConfigDto> outConList;
+        public ObservableCollection<BasPlcItemConfigDto> OutConList
+        {
+            get { return outConList; }
+            set { outConList = value; RaisePropertyChanged(); }
+        }
+
+        private int stepIndex = 0;
+        public int StepIndex
+        {
+            get { return stepIndex; }
+            set { stepIndex = value; RaisePropertyChanged(); }
+        }
+        #endregion
+
+    }
+}

+ 264 - 0
BlankApp1/BlankApp1/Views/BusinessManageView/TestResultDetailView.xaml

@@ -0,0 +1,264 @@
+<UserControl x:Class="PLCTool.Views.BusinessManageView.TestResultDetailView"
+             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
+             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
+             xmlns:local="clr-namespace:PLCTool.Views.BusinessManageView"
+             xmlns:prism="http://prismlibrary.com/" 
+             BorderBrush="#CBCBCB" BorderThickness="1"
+             Height="600" Width="1000" >
+
+    <UserControl.Resources>
+        <Style TargetType="TextBlock" x:Key="textBlockStyle">
+            <Setter Property="Width" Value="80"/>
+            <Setter Property="FontSize" Value="12"/>
+            <Setter Property="VerticalAlignment" Value="Center"/>
+            <Setter Property="TextAlignment" Value="Right"/>
+            <Setter Property="Margin" Value="0,0,5,0"/>
+        </Style>
+    </UserControl.Resources>
+
+    <Grid>
+        <Grid.RowDefinitions>
+
+            <RowDefinition Height="50" />
+            <RowDefinition />
+            <RowDefinition />
+            <RowDefinition />
+            
+        </Grid.RowDefinitions>
+
+        <StackPanel Orientation="Horizontal" Grid.Row="0" Margin="10">
+            <StackPanel Orientation="Horizontal">
+                <TextBlock Text="测试方案名称:"  Style="{StaticResource NormalTextBlockStyle}" Margin="10,0,5,0"/>
+                <TextBox  Height="28" Width="120" Text="{Binding ScheduleName}" IsReadOnly="True" />
+            </StackPanel>
+            <StackPanel Orientation="Horizontal">
+                <TextBlock Text="设备名称:"  Style="{StaticResource NormalTextBlockStyle}" Margin="10,0,5,0"/>
+                <TextBox  Height="28" Width="120" Text="{Binding DeviceName}" IsReadOnly="True"/>
+            </StackPanel>
+            <StackPanel Orientation="Horizontal" >
+                <TextBlock Text="测试项类型:"  Style="{StaticResource NormalTextBlockStyle}" Margin="10,0,5,0"/>
+                <TextBox  Height="28" Width="120"  Text="{Binding SelectTest}" IsReadOnly="True"/>
+            </StackPanel>
+            <StackPanel Orientation="Horizontal">
+                <TextBlock Text="测试项名称:"  Style="{StaticResource NormalTextBlockStyle}" Margin="10,0,5,0"/>
+                <TextBox  Height="28" Width="160"  Text="{Binding TestName}" IsReadOnly="True"/>
+            </StackPanel>
+
+        </StackPanel>
+        <Border Grid.Row="0"  BorderBrush="#CBCBCB" BorderThickness="0,1" />
+        <Grid Grid.Row="1">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="80"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="2.2*"/>
+            </Grid.ColumnDefinitions>
+            <TextBlock Grid.Column="0" Text="前置项" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center">
+            </TextBlock>
+            <Border Grid.Column="1"  BorderBrush="#CBCBCB" BorderThickness="1,0" />
+            <Grid Grid.Column="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition Height="2.2*"/>
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0">
+                    <StackPanel Orientation="Horizontal" >
+                        <TextBlock Text="测试项类型:"  Style="{StaticResource textBlockStyle}"/>
+                        <TextBox  Height="28" Width="150"  Text="{Binding BeforeSelectJudge}" IsReadOnly="True" />
+                    </StackPanel>
+                </Grid>
+                <Grid Grid.Row="1"  >
+                    <StackPanel Orientation="Horizontal" >
+                        <TextBlock Text="明细判定逻辑:"  Style="{StaticResource textBlockStyle}"/>
+                        <TextBox   Height="28" Width="150" Text="{Binding SelectLogic}" IsReadOnly="True"/>
+                    </StackPanel>
+                </Grid>
+                <Grid Grid.Row="2">
+                    <DockPanel LastChildFill="True" >
+                        <TextBlock Text="前置项描述:"   Style="{StaticResource textBlockStyle}"  />
+                        <RichTextBox  Margin="0,5,5,5" IsReadOnly="True">
+                            <FlowDocument>
+                                <Paragraph>
+                                    <Run Text="{Binding BeforeDetail,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </Paragraph>
+                            </FlowDocument>
+
+                        </RichTextBox>
+                    </DockPanel>
+                </Grid>
+            </Grid>
+            <Grid Grid.Column="2" >
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="30"/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+                <DockPanel LastChildFill="False">
+                    <TextBlock Text="前置项明细:"   Style="{StaticResource textBlockStyle}" />
+
+                </DockPanel>
+                <DataGrid Grid.Row="1"  ColumnWidth="*" AutoGenerateColumns="False" HeadersVisibility="All" CanUserAddRows="False"  SelectionUnit="FullRow" SelectionMode="Single"   RowHeaderWidth="0" 
+                  ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}" x:Name="DeviceDataGrid" RowHeaderStyle="{StaticResource RowHeaderStyle}" RowStyle="{StaticResource DataGridRowtyle}"  AlternationCount="2"
+                    ItemsSource="{Binding BeforeConList}"  IsReadOnly="True" Padding="0" HorizontalScrollBarVisibility="Hidden">
+                    <DataGrid.Columns >
+
+                        <DataGridTextColumn Header="序号" Width="40" Binding="{Binding Id}" CellStyle="{StaticResource MyDataGridCellStyle}" />
+                        <DataGridTextColumn Header="PLC地址" Binding="{Binding PlcAddress}" CellStyle="{StaticResource MyDataGridCellStyle}" />
+                        <DataGridTextColumn Header="PLC变量名" Binding="{Binding PlcItem}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="判定值" Binding="{Binding PlcValue}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="描述" Binding="{Binding Remark}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="测试时间" Width="160" Binding="{Binding TestTime,StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="实际值" Binding="{Binding RealValue}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="结果" Binding="{Binding TestResult}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+
+                    </DataGrid.Columns>
+
+                </DataGrid>
+
+            </Grid>
+        </Grid>
+        <Grid Grid.Row="2">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="80"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="2.2*"/>
+            </Grid.ColumnDefinitions>
+            <TextBlock Grid.Column="0" Text="输入项" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center">
+            </TextBlock>
+            <Border Grid.Column="1"  BorderBrush="#CBCBCB" BorderThickness="1,0" />
+            <Grid Grid.Column="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition Height="2*"/>
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0">
+                    <StackPanel Orientation="Horizontal" >
+                        <TextBlock Text="测试项类型:"  Style="{StaticResource textBlockStyle}"/>
+                        <TextBox   Height="28" Width="150" Text="{Binding SelectInJudge}" IsReadOnly="True"/>
+                    </StackPanel>
+                </Grid>
+                <Grid Grid.Row="1"  >
+                    <StackPanel Orientation="Horizontal" >
+                        <TextBlock Text="明细判定逻辑:"  Style="{StaticResource textBlockStyle}"/>
+                        <TextBox   Height="28" Width="150" Text="{Binding InSelectLogic}" IsReadOnly="True"/>
+                    </StackPanel>
+                </Grid>
+                <Grid Grid.Row="2">
+                    <DockPanel LastChildFill="True" >
+                        <TextBlock Text="输入项描述:"   Style="{StaticResource textBlockStyle}" />
+                        <RichTextBox  Margin="0,5,5,5" IsReadOnly="True">
+                            <FlowDocument>
+                                <Paragraph>
+                                    <Run Text="{Binding InDetail,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </Paragraph>
+                            </FlowDocument>
+
+                        </RichTextBox>
+                    </DockPanel>
+                </Grid>
+            </Grid>
+            <Grid Grid.Column="2" >
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="30"/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+                <DockPanel LastChildFill="False">
+                    <TextBlock Text="输入项明细:"   Style="{StaticResource textBlockStyle}" />
+
+                </DockPanel>
+                <DataGrid Grid.Row="1"  ColumnWidth="*" AutoGenerateColumns="False" HeadersVisibility="All" CanUserAddRows="False"  SelectionUnit="FullRow" SelectionMode="Single"   RowHeaderWidth="0" 
+       ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}" RowHeaderStyle="{StaticResource RowHeaderStyle}" RowStyle="{StaticResource DataGridRowtyle}"  AlternationCount="2"
+         ItemsSource="{Binding InConList}"  IsReadOnly="True"  Padding="0" HorizontalScrollBarVisibility="Hidden">
+                    <DataGrid.Columns >
+
+                        <DataGridTextColumn Header="序号" Width="40" Binding="{Binding Id}" CellStyle="{StaticResource MyDataGridCellStyle}" />
+                        <DataGridTextColumn Header="PLC地址" Binding="{Binding PlcAddress}" CellStyle="{StaticResource MyDataGridCellStyle}" />
+                        <DataGridTextColumn Header="PLC变量名" Binding="{Binding PlcItem}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="判定值" Binding="{Binding PlcValue}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="描述" Binding="{Binding Remark}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="测试时间" Width="160" Binding="{Binding TestTime,StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="实际值" Binding="{Binding RealValue}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="结果" Binding="{Binding TestResult}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+
+                    </DataGrid.Columns>
+                </DataGrid>
+
+            </Grid>
+        </Grid>
+        <Border Grid.Row="2"  BorderBrush="#CBCBCB" BorderThickness="0,1,0,0" />
+        <Grid Grid.Row="3">
+            <Grid.ColumnDefinitions>
+                <ColumnDefinition Width="80"/>
+                <ColumnDefinition/>
+                <ColumnDefinition Width="2.2*"/>
+            </Grid.ColumnDefinitions>
+            <TextBlock Grid.Column="0" Text="结果项" Style="{StaticResource NormalTextBlockStyle}" TextAlignment="Center">
+            </TextBlock>
+            <Border Grid.Column="1"  BorderBrush="#CBCBCB" BorderThickness="1,0" />
+            <Grid Grid.Column="1">
+                <Grid.RowDefinitions>
+                    <RowDefinition/>
+                    <RowDefinition/>
+                    <RowDefinition Height="2*"/>
+                </Grid.RowDefinitions>
+                <Grid Grid.Row="0">
+                    <StackPanel Orientation="Horizontal" >
+                        <TextBlock Text="测试项类型:"  Style="{StaticResource textBlockStyle}"/>
+                        <TextBox   Height="28" Width="150" Text="{Binding SelectOutJudge}" IsReadOnly="True" />
+                    </StackPanel>
+                </Grid>
+                <Grid Grid.Row="1"  >
+                    <StackPanel Orientation="Horizontal" >
+                        <TextBlock Text="明细判定逻辑:"  Style="{StaticResource textBlockStyle}"/>
+                        <TextBox   Height="28" Width="150" Text="{Binding OutSelectLogic}" IsReadOnly="True"/>
+                    </StackPanel>
+                </Grid>
+                <Grid Grid.Row="2">
+                    <DockPanel LastChildFill="True" >
+                        <TextBlock Text="结果项描述:"   Style="{StaticResource textBlockStyle}" />
+                        <RichTextBox  Margin="0,5,5,5" IsReadOnly="True">
+                            <FlowDocument>
+                                <Paragraph>
+                                    <Run Text="{Binding OutDetail,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/>
+                                </Paragraph>
+                            </FlowDocument>
+
+                        </RichTextBox>
+                    </DockPanel>
+                </Grid>
+            </Grid>
+            <Grid Grid.Column="2" >
+                <Grid.RowDefinitions>
+                    <RowDefinition Height="30"/>
+                    <RowDefinition/>
+                </Grid.RowDefinitions>
+                <DockPanel LastChildFill="False">
+                    <TextBlock Text="结果项明细:"   Style="{StaticResource textBlockStyle}" />
+                </DockPanel>
+                <DataGrid Grid.Row="1"  ColumnWidth="*" AutoGenerateColumns="False" HeadersVisibility="All" CanUserAddRows="False"  SelectionUnit="FullRow" SelectionMode="Single"   RowHeaderWidth="0" 
+       ColumnHeaderStyle="{StaticResource ColumnHeaderStyle}"  RowHeaderStyle="{StaticResource RowHeaderStyle}" RowStyle="{StaticResource DataGridRowtyle}"  AlternationCount="2"
+         ItemsSource="{Binding OutConList}"  IsReadOnly="True" Padding="0" HorizontalScrollBarVisibility="Hidden">
+                    <DataGrid.Columns >
+
+                        <DataGridTextColumn Header="序号" Width="40" Binding="{Binding Id}" CellStyle="{StaticResource MyDataGridCellStyle}" />
+                        <DataGridTextColumn Header="PLC地址" Binding="{Binding PlcAddress}" CellStyle="{StaticResource MyDataGridCellStyle}" />
+                        <DataGridTextColumn Header="PLC变量名" Binding="{Binding PlcItem}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="判定值" Binding="{Binding PlcValue}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="描述" Binding="{Binding Remark}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="测试时间" Width="160" Binding="{Binding TestTime,StringFormat={}{0:yyyy-MM-dd HH:mm:ss}}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="实际值" Binding="{Binding RealValue}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+                        <DataGridTextColumn Header="结果" Binding="{Binding TestResult}" CellStyle="{StaticResource MyDataGridCellStyle}"/>
+
+                    </DataGrid.Columns>
+
+                </DataGrid>
+
+            </Grid>
+        </Grid>
+        <Border Grid.Row="3"  BorderBrush="#CBCBCB" BorderThickness="0,1,0,0" />
+    
+      
+    </Grid>
+</UserControl>

+ 28 - 0
BlankApp1/BlankApp1/Views/BusinessManageView/TestResultDetailView.xaml.cs

@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace PLCTool.Views.BusinessManageView
+{
+    /// <summary>
+    /// TestResultDetailView.xaml 的交互逻辑
+    /// </summary>
+    public partial class TestResultDetailView : UserControl
+    {
+        public TestResultDetailView()
+        {
+            InitializeComponent();
+        }
+    }
+}