<!--由代码生成工具生成-->
<UserControl x:Class="MES.Client.Tooling.UserControls.ModifyMeasuringFaliureTracing"
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:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:MES.Client.Tooling.UserControls" xmlns:hc1="clr-namespace:Minio.DataModel;assembly=Minio" d:DataContext="{d:DesignInstance Type=local:ModifyMeasuringFaliureTracingViewModel}"
mc:Ignorable="d"
d:DesignHeight="350" d:DesignWidth="600">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MES.Client.UICommon;component/Styles/CommStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<hc:DialogContainer>
<Border CornerRadius="3" Background="{DynamicResource DialogPrimaryBrush}">
<Grid TextBlock.Foreground="{DynamicResource DefaultFontColorBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<!--标题-->
<Border CornerRadius="4 4 0 0" Background="{DynamicResource DialogTitleBrush}" BorderThickness="0"
TextBlock.Foreground="{DynamicResource DefaultFontColorBrush}">
<Grid Margin="0 10">
<TextBlock Text="{Binding Title,FallbackValue=量具失效追溯管理}" FontWeight="SemiBold" FontSize="14" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20 0 0 0"/>
<Button Style="{StaticResource CloseButtonStyle}"/>
</Grid>
</Border>
<!--表单-->
<Grid Grid.Row="1" Margin="0 10">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<!-- 允许垂直滚动 -->
<UniformGrid Columns="1">
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[ToolCode],FallbackValue=ToolCode}" VerticalAlignment="Center"
Text="{Binding SelectData.ToolCode}" hc:InfoElement.Necessary="True"/>
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[DeviceName],FallbackValue=DeviceName}" VerticalAlignment="Center"
Text="{Binding SelectData.DeviceName}" hc:InfoElement.Necessary="True"/>
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[Manufacturer],FallbackValue=Manufacturer}" VerticalAlignment="Center"
Text="{Binding SelectData.Manufacturer}"/>
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[ModelSpec],FallbackValue=ModelSpec}" VerticalAlignment="Center"
Text="{Binding SelectData.ModelSpec}"/>
<hc:DateTimePicker
hc:InfoElement.TitlePlacement="Left"
hc:InfoElement.TitleWidth="100"
hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}"
Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[FailureDate],FallbackValue=FailureDate}"
VerticalAlignment="Center"
SelectedDateTime="{Binding SelectData.FailureDate}" hc:InfoElement.Necessary="True"/>
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[FailurePhenomenon],FallbackValue=FailurePhenomenon}" VerticalAlignment="Center"
Text="{Binding SelectData.FailurePhenomenon}" />
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[IsInvolveProduct],FallbackValue=IsInvolveProduct}" VerticalAlignment="Center"
Text="{Binding SelectData.IsInvolveProduct}" />
<hc:TextBox hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}" Margin="10 0 10 10"
hc:InfoElement.Title="{Binding Langs[Remark],FallbackValue=Remark}" VerticalAlignment="Center"
Text="{Binding SelectData.Remark}"/>
<hc:Upload hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Title="{Binding Langs[ProcessingRecords],FallbackValue=失效产品处理记录}"
FileType="*" MaxCount="5" UploadUrl="{Binding UploadUrl}" Files="{Binding SelectData.ProcessingRecords, Mode=TwoWay}"
hc:InfoElement.Placeholder="{Binding Langs[UploadTip],FallbackValue=处理记录请自行上传}"/>
</UniformGrid>
</ScrollViewer>
</Grid>
<DockPanel Grid.Row="2" Margin="13 0">
<Button Margin="10" Width="130" Background="{DynamicResource AddBtnBrush}" Foreground="White"
BorderBrush="{DynamicResource AddBtnBrush}" Content="{Binding Langs[Confirm]}" DockPanel.Dock="Right"
HorizontalAlignment="Right" Command="{Binding SaveCommand}"/>
<Button Margin="10" Width="130" Content="{Binding Langs[Cancel]}" DockPanel.Dock="Right" HorizontalAlignment="Right"
Command="hc:ControlCommands.Close"/>
</DockPanel>
</Grid>
</Border>
</hc:DialogContainer>
</UserControl>
<UserControl x:Class="MES.Client.Tooling.UserControls.MeasuringFaliureTracing"
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:hc="https://handyorg.github.io/handycontrol"
xmlns:control="clr-namespace:MES.Client.UICommon.Controls;assembly=MES.Client.UICommon"
hc:Dialog.Token="{Binding DialogToken}"
d:DataContext="{d:DesignInstance Type=usercontrols:MeasuringFaliureTracingViewModel,IsDesignTimeCreatable=True}"
xmlns:enum="clr-namespace:MES.Client.Toolkit.Enums;assembly=MES.Client.Toolkit"
xmlns:usercontrols="clr-namespace:MES.Client.Tooling.UserControls" xmlns:sync="http://schemas.syncfusion.com/wpf"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MES.Client.UICommon;component/Styles/CommStyle.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>
<hc:DialogContainer>
<Grid Background="{DynamicResource MESPrimaryBrush}">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Orientation="Horizontal" Margin="10">
<TextBlock Text="量具失效追溯管理" FontWeight="DemiBold" VerticalAlignment="Center" FontSize="16" Margin="21 0 0 0"/>
<Border BorderThickness="1 0 0 0" BorderBrush="{DynamicResource MESBorderBrush}" Margin="20 0" Height="24"/>
<control:IconButton Visibility="{Binding MenuID,Converter={StaticResource getPermissonToVisibilityConverter},ConverterParameter={x:Static enum:PermissonEnum.Add }}"
IBForeground="{DynamicResource PaginationSelectedBrush}" Background="{DynamicResource AddBtnBrush}" StrText="{Binding Langs[Add]}"
Icon="" BorderThickness="0" FontSize="14" Margin="0 0 10 0" Command="{Binding ModifyCommand}"/>
</StackPanel>
<hc:Card Grid.Row="1" Margin="10 0 10 10" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<DockPanel TextBlock.FontSize="14">
<hc:TextBox Margin="13" hc:InfoElement.Title="{Binding Langs[ToolCode],FallbackValue=ToolCode}"
Text="{Binding SearchData.ToolCode}" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}"
hc:InfoElement.TitlePlacement="Left" HorizontalAlignment="Left" Width="150"/>
<hc:TextBox Margin="13" hc:InfoElement.Title="{Binding Langs[DeviceName],FallbackValue=DeviceName}" hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}"
hc:InfoElement.TitlePlacement="Left" Width="150" Text="{Binding SearchData.DeviceName}"/>
<hc:DateTimePicker Margin="13"
SelectedDateTime ="{Binding SearchData.StartFailureDate}"
Style="{StaticResource DateTimePickerPlus}"
hc:InfoElement.Title="{Binding Langs[StartFailureDate],FallbackValue=StartFailureDate}"
hc:InfoElement.TitlePlacement="Left"
hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}"/>
<hc:DateTimePicker Margin="13"
SelectedDateTime="{Binding SearchData.EndFailureDate}"
Style="{StaticResource DateTimePickerPlus}"
hc:InfoElement.Title="{Binding Langs[EndFailureDate],FallbackValue=EndFailureDate}"
hc:InfoElement.TitlePlacement="Left"
hc:InfoElement.Placeholder="{Binding Langs[PleaseEnter]}"/>
<control:IconButton Visibility="{Binding MenuID,Converter={StaticResource getPermissonToVisibilityConverter},ConverterParameter={x:Static enum:PermissonEnum.Query }}"
StrText="{Binding Langs[Search]}" Icon="" FontSize="14" HorizontalAlignment="Left" Margin="32 0 0 0"
Command="{Binding SearchCommand}"/>
</DockPanel>
<control:MESSfDataGrid SelectedItems="{Binding SelectedItems,Mode=TwoWay}" SelectionMode="Extended" IsShowChooseBtn="True"
MenuID="{Binding MenuID}"
Token="{Binding DialogToken}"
Margin="10 0 10 5" ItemsSource="{Binding DataList}" Grid.Row="1"
Langs="{Binding Langs}"
EditCommand="{Binding ModifyCommand}"
DeleteCommand="{Binding DeleteCommand}"
ImportCommand="{Binding SearchCommand}" SolTypeName="VENDOR" IsImport="{Binding MenuID,Converter={StaticResource getPermissonToBoolConverter},ConverterParameter={x:Static enum:PermissonEnum.Import }}"
IsDel="{Binding MenuID,Converter={StaticResource getPermissonToBoolConverter},ConverterParameter={x:Static enum:PermissonEnum.Delete }}"
IsEdit="{Binding MenuID,Converter={StaticResource getPermissonToBoolConverter},ConverterParameter={x:Static enum:PermissonEnum.Modify }}"
IsDetail="False">
<control:MESSfDataGrid.Columns>
<sync:GridTextColumn MappingName="Id" HeaderText="{Binding Langs[Id],FallbackValue=Id}" IsHidden="True"/>
<sync:GridTextColumn MappingName="ItemNo" HeaderText="{Binding Langs[ItemNo],FallbackValue=ItemNo}" IsHidden="True"/>
<sync:GridTextColumn MappingName="ToolCode" HeaderText="{Binding Langs[ToolCode],FallbackValue=ToolCode}" IsHidden="False"/>
<sync:GridTextColumn MappingName="DeviceName" HeaderText="{Binding Langs[DeviceName],FallbackValue=DeviceName}" IsHidden="False"/>
<sync:GridTextColumn MappingName="Manufacturer" HeaderText="{Binding Langs[Manufacturer],FallbackValue=Manufacturer}" IsHidden="False"/>
<sync:GridTextColumn MappingName="ModelSpec" HeaderText="{Binding Langs[ModelSpec],FallbackValue=ModelSpec}" IsHidden="False"/>
<sync:GridDateTimeColumn CustomPattern="yyyy-MM-dd HH:mm:ss"
Pattern="CustomPattern"
MappingName="FailureDate"
HeaderText="{Binding Langs[FailureDate],FallbackValue=FailureDate}"
IsHidden="False"/>
<sync:GridTextColumn MappingName="FailurePhenomenon" HeaderText="{Binding Langs[FailurePhenomenon],FallbackValue=FailurePhenomenon}" IsHidden="False"/>
<sync:GridTextColumn MappingName="IsInvolveProduct" HeaderText="{Binding Langs[IsInvolveProduct],FallbackValue=IsInvolveProduct}" IsHidden="False"/>
<!--失效产品处理记录-->
<!-- 在现有列后追加 -->
<sync:GridTextColumn
MappingName="ProcessingRecords" HeaderText="{Binding Langs[ProcessingRecords],FallbackValue=失效产品处理记录}" IsHidden="False"/>
<sync:GridTextColumn MappingName="Remark" HeaderText="{Binding Langs[Remark],FallbackValue=Remark}" IsHidden="False"/>
<!--
<sync:GridDateTimeColumn CustomPattern="yyyy-MM-dd HH:mm:ss"
Pattern="CustomPattern"
MappingName="CreateTime"
HeaderText="{Binding Langs[CreateTime],FallbackValue=CreateTime}"
IsHidden="True"/>
<sync:GridTextColumn MappingName="CreateUser" HeaderText="{Binding Langs[CreateUser],FallbackValue=CreateUser}" IsHidden="False"/>
<sync:GridDateTimeColumn CustomPattern="yyyy-MM-dd HH:mm:ss"
Pattern="CustomPattern"
MappingName="UpdateTime"
HeaderText="{Binding Langs[UpdateTime],FallbackValue=UpdateTime}"
IsHidden="True"/>
<sync:GridTextColumn MappingName="UpdateUser" HeaderText="{Binding Langs[UpdateUser],FallbackValue=UpdateUser}" IsHidden="True"/>-->
</control:MESSfDataGrid.Columns>
</control:MESSfDataGrid>
<control:YLHPagination Margin="10 5" Grid.Row="2" PageIndex="{Binding PageIndex,Mode=TwoWay}"
TotalCount="{Binding TotalCount}" PageSize="{Binding PageSize,Mode=TwoWay}"
TotalPages="{Binding TotalPages,Mode=TwoWay}"/>
</Grid>
</hc:Card>
</Grid>
</hc:DialogContainer>
</UserControl>修改里面的上传文件那块代码 <hc:Upload hc:InfoElement.TitlePlacement="Left" hc:InfoElement.TitleWidth="100" hc:InfoElement.Title="{Binding Langs[ProcessingRecords],FallbackValue=失效产品处理记录}"
FileType="*" MaxCount="5" UploadUrl="{Binding UploadUrl}" Files="{Binding SelectData.ProcessingRecords, Mode=TwoWay}"
hc:InfoElement.Placeholder="{Binding Langs[UploadTip],FallbackValue=处理记录请自行上传}"/>using HandyControl.Tools.Extension;
using MES.Client.Tooling.Models.MeasuringFaliureTracing;
using MES.Client.Toolkit.Comm;
using MES.Client.Toolkit.Enums;
using MES.Client.Toolkit.HTTP;
using MES.Client.UICommon.Controls;
using MES.Common.Toolkit.Helper;
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows.Input;
namespace MES.Client.Tooling.UserControls
{
/// <summary>
/// ModifyMeasuringFaliureTracing.xaml 的交互逻辑
/// </summary>
public partial class ModifyMeasuringFaliureTracing : UserControl
{
public ModifyMeasuringFaliureTracing(MeasuringFailureTracingModel masModel, Dictionary<string, string> langs, OperateStateEmun stateEmun)
{
InitializeComponent();
DataContext = new ModifyMeasuringFaliureTracingViewModel(masModel, langs, stateEmun);
}
}
public class ModifyMeasuringFaliureTracingViewModel : ViewModelBase, IDialogResultable<bool>
{
private MeasuringFailureTracingModel selectData = new();
private Dictionary<string, string> langs = new();
private string title = string.Empty;
public string UploadUrl { get; set; } = "api/Tooling/MeasuringFaliureTracing/UnLoad";
public string ProcessingRecords { get; set; } = string.Empty;
public MeasuringFailureTracingModel SelectData { get => selectData; set { selectData = value; PCEH(); } }
public Dictionary<string, string> Langs { get => langs; set { langs = value; PCEH(); } }
public bool Result { get; set; } = false;
public Action? CloseAction { get; set; }
/// <summary>
/// 保存
/// </summary>
public ICommand SaveCommand { get; set; }
public string Title { get => title; set { title = value; PCEH(); } }
/// <summary>
/// 操作类型
/// </summary>
public OperateStateEmun StateEmun { get; set; }
public ModifyMeasuringFaliureTracingViewModel(MeasuringFailureTracingModel itemtModel, Dictionary<string, string> langs, OperateStateEmun stateEmun)
{
StateEmun = stateEmun;
SelectData = itemtModel.Clone();
//if (stateEmun == OperateStateEmun.Add)
//{
// SelectData.LastAnalysisDate ??= DateTime.Today.AddDays(-30);
// SelectData.NextRemindDate ??= DateTime.Today.AddDays(30);
//}
Langs = langs;
Initialize();
SaveCommand = new CommandBase(async l =>
{
if (!Check()) return;
string ret = string.Empty;
int toolCodeLength = getStringLength(SelectData.ToolCode);
if (toolCodeLength > 40)
{
Message.Warnning(Langs.LangGetValue("ToolCode") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
int deviceNameLength = getStringLength(SelectData.DeviceName);
if (deviceNameLength > 40)
{
Message.Warnning(Langs.LangGetValue("DeviceName") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
if (!string.IsNullOrEmpty(SelectData.Manufacturer))
{
int manufacturerLength = getStringLength(SelectData.Manufacturer);
if (manufacturerLength > 40)
{
Message.Warnning(Langs.LangGetValue("Manufacturer") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
}
if (!string.IsNullOrEmpty(SelectData.ModelSpec))
{
int modelSpecLength = getStringLength(SelectData.ModelSpec);
if (modelSpecLength > 100)
{
Message.Warnning(Langs.LangGetValue("ModelSpec") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
}
if (!string.IsNullOrEmpty(SelectData.FailurePhenomenon))
{
int failurePhenomenonLength = getStringLength(SelectData.FailurePhenomenon);
if (failurePhenomenonLength > 200)
{
Message.Warnning(Langs.LangGetValue("FailurePhenomenon") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
}
if (!string.IsNullOrEmpty(SelectData.IsInvolveProduct))
{
int isInvolveProductLength = getStringLength(SelectData.IsInvolveProduct);
if (isInvolveProductLength > 1)
{
Message.Warnning(Langs.LangGetValue("IsInvolveProduct") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
}
if (!string.IsNullOrEmpty(SelectData.Remark))
{
int remarkLength = getStringLength(SelectData.Remark);
if (remarkLength > 300)
{
Message.Warnning(Langs.LangGetValue("Remark") + Langs.LangGetValue("CharacterLengthIsLong"));
return;
}
}
ret = await APIHelper.PostSendAsync(ApiRoutes.SaveMeasuringFaliureTracing, SelectData);
if (ret is not null)
{
string successMsg = StateEmun == OperateStateEmun.Add
? Langs.LangGetValue("添加成功")
: Langs.LangGetValue("修改成功");
MESGrowl.MESSuccess(successMsg);
Result = true;
CloseAction?.Invoke();
}
});
}
public int getStringLength(string str)
{
if (str.Equals(string.Empty))
return 0;
int strlen = 0;
ASCIIEncoding strData = new ASCIIEncoding();
// 将字符串转换为ASCII编码的字节数字
byte[] strBytes = strData.GetBytes(str);
for (int i = 0; i <= strBytes.Length - 1; i++)
{
if (strBytes[i] == 63) // 中文都将编码为ASCII编码63,即"?"号
strlen += 2;
strlen++;
}
return strlen;
}
private bool Check()
{
if (string.IsNullOrEmpty(SelectData.ToolCode))
{
Message.Warnning(Langs.LangGetValue("ToolCode") + Langs.LangGetValue("IsInvalid"));
return false;
}
// 检查DeviceName(设备名称)是否为空
if (string.IsNullOrEmpty(SelectData.DeviceName))
{
Message.Warnning(Langs.LangGetValue("DeviceName") + Langs.LangGetValue("IsNull"));
return false;
}
//// 检查LastAnalysisDate(上次分析日期)是否有值
//if (!SelectData.LastAnalysisDate.HasValue)
//{
// Message.Warnning(Langs.LangGetValue("LastAnalysisDate") + Langs.LangGetValue("IsNull"));
// return false;
//}
// 检查TestItem(测试项目)是否为空
if (!SelectData.FailureDate.HasValue)
{
Message.Warnning(Langs.LangGetValue("FailureDate") + Langs.LangGetValue("IsNull"));
return false;
}
return true;
}
private void Initialize()
{
switch (StateEmun)
{
case OperateStateEmun.Add:
Title = Langs.LangGetValue("新增");
break;
case OperateStateEmun.Edit:
Title = Langs.LangGetValue("修改");
break;
case OperateStateEmun.Detail:
break;
default:
break;
}
}
}
}using HandyControl.Controls;
using HandyControl.Tools.Extension;
using MES.Client.Models.Dtos;
using MES.Client.Models.Models;
using MES.Client.Tooling.Dto.MeasuringFaliureTracing;
using MES.Client.Tooling.Models.MeasuringFaliureTracing;
using MES.Client.Toolkit.Comm;
using MES.Client.Toolkit.Enums;
using MES.Client.Toolkit.HTTP;
using MES.Client.UICommon.Comm;
using MES.Client.UICommon.Controls;
using MES.Client.UICommon.Helper;
using MES.Common.Toolkit.Helper;
using Microsoft.Win32;
using Newtonsoft.Json;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
namespace MES.Client.Tooling.UserControls
{
/// <summary>
/// MeasuringFaliureTracing.xaml 的交互逻辑
/// </summary>
public partial class MeasuringFaliureTracing : UserControl
{
private MeasuringFaliureTracingViewModel model;
public MeasuringFaliureTracing()
{
InitializeComponent();
DataContext = model = new MeasuringFaliureTracingViewModel();
Loaded += MeasuringFaliureTracing_Loaded;
}
//}
private void MeasuringFaliureTracing_Loaded(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrEmpty(model.MenuID)) return;
model.MenuID = string.IsNullOrEmpty(Uid) ? "" : Uid;
}
}
public class MeasuringFaliureTracingViewModel : CommonListViewModel<MeasuringFaliureTracingInDto, MeasuringFailureTracingModel>
{
private MeasuringFailureTracingModel selectedModel = new();
/// <summary>
/// 选中的MSA测量记录
/// </summary>
public MeasuringFailureTracingModel SelectedModel
{
get => selectedModel;
set
{
selectedModel = value;
PCEH();
}
}
//private ObservableCollection<MeasuringFailureTracingModel> selectedItems = new();
//public ObservableCollection<MeasuringFailureTracingModel> SelectedItems
//{
// get => selectedItems;
// set
// {
// SetProperty(ref selectedItems, value);
// SelectedIds = value.Select(item => item.Id).ToList();
// }
//}
//// 2. 选中的 ID 列表(传给后端)
//private List<string> selectedIds = new();
//public List<string> SelectedIds
//{
// get => selectedIds;
// set => SetProperty(ref selectedIds, value);
//}
/// <summary>
/// 查询条件
/// </summary>
private MeasuringFaliureTracingInDto searchData = new();
public MeasuringFaliureTracingInDto SearchData { get => searchData; set { searchData = value; PCEH(); } }
public MeasuringFaliureTracingViewModel()
{
PageIndex = 1;
PageSize = 20;
/// <summary>
/// 查询
/// </summary>
SearchCommand = new CommandBase(async l =>
{
var loading = Dialog.Show(new UICommon.Controls.LoadingCircle(), DialogToken);
try
{
SearchParameter = new MeasuringFaliureTracingInDto
{
Id = SearchData.Id,
ToolCode = SearchData.ToolCode,
FailureDate = SearchData.FailureDate,
DeviceName = SearchData.DeviceName
};
SearchParameter.PageIndex = PageIndex;
SearchParameter.PageSize = PageSize;
SearchParameter.StartFailureDate = SearchData.StartFailureDate;
SearchParameter.EndFailureDate = SearchData.EndFailureDate;
var ret = await APIHelper.PostSendDtoAsync<PaginationData>(
ApiRoutes.GetMeasuringFaliureTracingList,
SearchParameter
);
if (ret != null)
{
TotalCount = ret.TotalCount;
TotalPages = ret.TotalPages;
var dataListJson = ret?.DataList?.ToJson() ?? "[]";
DataList = JsonConvert.DeserializeObject<ObservableCollection<MeasuringFailureTracingModel>>(dataListJson) ?? new();
if (l != null && !string.IsNullOrEmpty(l.ToString()))
SelectedItem = DataList.FirstOrDefault(f => f.ToolCode == l.ToString());
}
}
catch (Exception ex)
{
Message.Error($"查询失败:{ex.Message}");
}
finally
{
loading.Close();
}
});
ModifyCommand = new CommandBase(async l =>
{
bool flag = false;
if (l != null)
{
flag = await Dialog.Show(new ModifyMeasuringFaliureTracing((MeasuringFailureTracingModel)l, Langs, OperateStateEmun.Edit), DialogToken).GetResultAsync<bool>();
}
else
{
flag = await Dialog.Show(new ModifyMeasuringFaliureTracing(new MeasuringFailureTracingModel(), Langs, OperateStateEmun.Add), DialogToken).GetResultAsync<bool>();
}
if (flag)
{
SearchCommand?.Execute(null);
}
});
DeleteCommand = new CommandBase(async l =>
{
if (l is MeasuringFailureTracingModel deleteItem)
{
if (Message.Ask(Langs.LangGetValue("DeleteConfirm")))
{
List<IdInDto> inDto = new();
inDto.Add(new IdInDto { Id = deleteItem.Id });
var ret = await APIHelper.PostSendAsync(ApiRoutes.DeleteMeasuringFaliureTracing, inDto);
if (ret != null)
{
DataList.Remove(deleteItem);
TotalCount -= 1;
}
}
}
});
ExportCommand = new CommandBase(async l =>
{
try
{
var exportParam = new MeasuringFaliureTracingInDto
{
ToolCode = SearchData.ToolCode,
DeviceName = SearchData.DeviceName,
StartFailureDate = SearchData.StartFailureDate,
EndFailureDate = SearchData.EndFailureDate,
IsExport = true
};
var exportData = await APIHelper.PostSendDtoAsync<List<MeasuringFailureTracingModel>>(
ApiRoutes.ExportMeasuringFaliureTracingPageData,
exportParam
);
if (exportData == null || !exportData.Any())
{
Message.Warnning(Langs.LangGetValue("NoDataToExport"));
return;
}
DataTable ConvertToDataTable<T>(IEnumerable<T> dataList)
{
var dt = new DataTable();
if (dataList == null || !dataList.Any()) return dt;
var props = typeof(T).GetProperties(BindingFlags.Public | BindingFlags.Instance);
foreach (var prop in props)
{
dt.Columns.Add(prop.Name, typeof(string));
}
foreach (var item in dataList)
{
var row = dt.NewRow();
foreach (var prop in props)
{
object value = prop.GetValue(item);
if (value == null)
{
value = string.Empty;
}
else if (value is DateTime date)
{
value = date.ToString("yyyy-MM-dd HH:mm:ss");
}
else if (value is IEnumerable<string> stringList)
{
value = string.Join(", ", stringList);
}
else
{
value = value.ToString();
}
row[prop.Name] = value;
}
dt.Rows.Add(row);
}
return dt;
}
var dataTable = ConvertToDataTable(exportData);
bool DataTableToExcel(DataTable dt, string filePath)
{
try
{
IWorkbook workbook = filePath.EndsWith(".xlsx", StringComparison.OrdinalIgnoreCase)
? (IWorkbook)new XSSFWorkbook()
: new HSSFWorkbook();
ISheet sheet = workbook.CreateSheet("ExportData");
int rowIndex = 0;
var headerRow = sheet.CreateRow(rowIndex++);
for (int i = 0; i < dt.Columns.Count; i++)
{
headerRow.CreateCell(i).SetCellValue(dt.Columns[i].ColumnName);
}
foreach (DataRow dataRow in dt.Rows)
{
var row = sheet.CreateRow(rowIndex++);
for (int i = 0; i < dt.Columns.Count; i++)
{
object cellValue = dataRow[i] is DBNull ? string.Empty : dataRow[i];
if (cellValue is DateTime date)
{
row.CreateCell(i).SetCellValue(date.ToString("yyyy-MM-dd HH:mm:ss"));
}
else
{
row.CreateCell(i).SetCellValue(cellValue?.ToString());
}
}
}
for (int i = 0; i < dt.Columns.Count; i++)
{
sheet.AutoSizeColumn(i);
}
using (var fs = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
workbook.Write(fs,false);
}
return true;
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"Excel导出失败: {ex.Message}");
return false;
}
}
var saveDialog = new SaveFileDialog
{
Title = Langs.LangGetValue("SelectExportPath"),
Filter = "Excel文件|*.xls;*.xlsx",
FileName = $"{DateTime.Now:yyyyMMdd}_MeasuringFailureExport.xlsx",
RestoreDirectory = true,
DefaultExt = "xlsx",
OverwritePrompt = true
};
if (saveDialog.ShowDialog() == true)
{
bool exportSuccess = DataTableToExcel(dataTable, saveDialog.FileName);
if (exportSuccess)
{
Message.Info(Langs.LangGetValue("ExportSuccess"));
}
else
{
Message.Error(Langs.LangGetValue("ExportFailed_FileWrite"));
}
}
}
catch (Exception ex)
{
Message.Error($"{Langs.LangGetValue("ExportFailed")}: {ex.Message}");
}
});
}
public override void CommViewModelLoad()
{
SearchCommand?.Execute(null);
}
}
}