change - 产品信息配置界面、产品信息展示界面

master
wenjy 1 week ago
parent 171882cd17
commit 20b64c7611

@ -48,36 +48,39 @@ namespace SlnMesnac.Model.domain
public string productName {get;set;}
/// <summary>
/// Desc:产品特点
/// Desc:产品图像
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="product_feature")]
public string productFeature {get;set;}
[SugarColumn(ColumnName= "product_image")]
public string productImage { get;set;}
/// <summary>
/// Desc:产品描述
/// Desc:特点图像
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="product_describe")]
public string productDescribe {get;set;}
[SugarColumn(ColumnName= "feature_image")]
public string featureImage { get;set;}
[SugarColumn(ColumnName= "analyze_image")]
public string analyzeImage { get;set;}
/// <summary>
/// Desc:产品参数
/// Desc:产品尺寸图像-左
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="product_param")]
public string productParam {get;set;}
[SugarColumn(ColumnName= "size_left_image")]
public string sizeLeftImage { get;set;}
/// <summary>
/// Desc:产品尺寸
/// Desc:产品尺寸图像-右
/// Default:
/// Nullable:True
/// </summary>
[SugarColumn(ColumnName="product_size")]
public string productSize {get;set;}
[SugarColumn(ColumnName= "size_right_image")]
public string sizeRightImage { get;set;}
/// <summary>
/// Desc:创建人

@ -11,6 +11,8 @@ using System.Reflection;
using TouchSocket.Sockets;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Page.Login;
using Prism.Events;
using SlnMesnac.WPF.Event;
namespace SlnMesnac.WPF
{
@ -108,6 +110,10 @@ namespace SlnMesnac.WPF
.FromAssemblyOf<LoginWindow>()
.AddClasses(classes => classes.WithAttribute<RegisterAsTransientAttribute>()).AsSelf().WithTransientLifetime());
services.AddSingleton<IEventAggregator, EventAggregator>();
services.AddSingleton(typeof(ProductInfoEvent));
// 注册ORM
services.AddSqlSugarSetup();

@ -0,0 +1,14 @@
using Prism.Events;
using SlnMesnac.Model.domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.WPF.Event
{
public class ProductCodeEvent : PubSubEvent<string>
{
}
}

@ -0,0 +1,14 @@
using Prism.Events;
using SlnMesnac.Model.domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.WPF.Event
{
public class ProductInfoEvent : PubSubEvent<base_product_info>
{
}
}

@ -113,13 +113,13 @@
</StackPanel>
</Border>
<!--<Border Grid.Row="1" Grid.Column="1">
<Border Grid.Row="1" Grid.Column="1">
<Button Background="Transparent" BorderBrush="Transparent" Width="90" Height="80" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="45,-5,10,10"
Command="{Binding LoadProductInfoCommand}" CommandParameter="414C7E0B-3DCE-47D2-86A7-31032A110EA4"/>
Command="{Binding LoadProductInfoCommand}" CommandParameter="414C7E0B-3DCE-47D2-86A7-31032A110EA4" Cursor="Hand"/>
</Border>
<Border Grid.Row="1" Grid.Column="3">
<Button Background="Transparent" BorderBrush="Transparent" Width="90" Height="80" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="40,15,10,10"
Command="{Binding LoadProductInfoCommand}" CommandParameter="414C7E0B-3DCE-47D2-86A7-31032A110EA4"/>
Command="{Binding LoadProductInfoCommand}" CommandParameter="A1589CA1-2DCC-4205-8422-20DBEF5AE173"/>
</Border>
<Border Grid.Row="0" Grid.Column="5">
<Button Background="Transparent" BorderBrush="Transparent" Width="100" Height="85" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="40,80,10,10"
@ -136,6 +136,6 @@
<Border Grid.Row="3" Grid.Column="5">
<Button Background="Transparent" BorderBrush="Transparent" Width="100" Height="95" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="40,50,10,10"
Command="{Binding LoadProductInfoCommand}" CommandParameter="414C7E0B-3DCE-47D2-86A7-31032A110EA4"/>
</Border>-->
</Border>
</Grid>
</UserControl>

@ -25,16 +25,21 @@
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>
<!--<Border Grid.Column="0" Background="Red" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>-->
<Border Grid.Column="0" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10" MouseLeftButtonDown="ProductImage_MouseLeftButtonDown">
<Image Source="{Binding ProductImage}" Stretch="Uniform"/>
</Border>
<Border Grid.Column="1" Background="Transparent" CornerRadius="3" Margin="10,10">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,10,0,0">
<Border Background="#1052AE" CornerRadius="5,5,5,0" Width="400" Height="40">
<TextBox Text="无线射频识别RFID HW-RFR-050系列" Foreground="White" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBox Text="{Binding ProductInfo.productSeries}" Foreground="White" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"/>
</Border>
<TextBox Text="HW-RFR-050-B-003-1204S" Foreground="Black" FontSize="24" Margin="0,20"/>
<TextBox Text="{Binding ProductInfo.productName}" Foreground="Black" FontSize="24" Margin="0,20"/>
<Border Background="#E6EDF6" CornerRadius="5" Width="150" Height="40" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,30,0,0"/>
<Border Background="Transparent" CornerRadius="5" Width="150" Height="40" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,30,0,0">
<Image Source="/Templates/image/certification.jpg" Stretch="Uniform"/>
</Border>
</StackPanel>
</Border>
@ -42,8 +47,6 @@
<Border Grid.Column="2" Background="Transparent" CornerRadius="3" Margin="10,10">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,10,0,0">
<Button Content="保存" Command="{Binding SavePrdouctInfoCommand }"/>
<Button Content="添加" Margin="0,10,0,0"/>
</StackPanel>
</Border>
</Grid>
@ -54,7 +57,6 @@
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>
<StackPanel Grid.Column="0" Width="600" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10,10,0,0">
<Border Background="#E6EDF6" CornerRadius="18" Height="40" Margin="0,10">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
@ -70,6 +72,10 @@
</StackPanel>
</Border>
</StackPanel>
<Border Grid.Column="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10" MouseLeftButtonDown="FeatureImage_MouseLeftButtonDown">
<Image Source="{Binding FeatureImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="2" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10">
@ -149,7 +155,25 @@
<RowDefinition Height="6*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>
<Border Grid.Row="0" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10">
<Grid Margin="10,0,10,0">
<Grid.RowDefinitions>
<RowDefinition Height="2*"/>
<RowDefinition Height="9*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2">
<Border Grid.Row="0" BorderBrush="#1352B2" BorderThickness="10,0,0,0">
<TextBlock Text="测试数据" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
</Border>
</Border>
<Border Grid.Row="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10" MouseLeftButtonDown="AnalyzeImage_MouseLeftButtonDown">
<Image Source="{Binding AnalyzeImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="1" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10" >
<Grid Margin="10,0,10,0">
<Grid.RowDefinitions>
@ -196,7 +220,7 @@
<Border Grid.Row="1" Grid.Column="1">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" x:Name="ParameterStackPanelRight">
<TextBox Text="{Binding ProductParams[9].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="{Binding ProductParams[10].paramContent}" Width="380" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="{Binding ProductParams[10].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="{Binding ProductParams[11].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="{Binding ProductParams[12].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
@ -230,6 +254,10 @@
</Border>
</Border>
<Border Grid.Row="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10" MouseLeftButtonDown="SizeLeftImage_MouseLeftButtonDown">
<Image Source="{Binding SizeLeftImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
<Border Grid.Column="1" Background="White" BorderBrush="White" BorderThickness="2" Margin="5,0,0,0">
@ -245,6 +273,10 @@
</Border>
</Border>
<Border Grid.Row="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10" MouseLeftButtonDown="SizeRightImage_MouseLeftButtonDown">
<Image Source="{Binding SizeRightImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
</Grid>

@ -1,4 +1,5 @@
using SlnMesnac.WPF.Attribute;
using Microsoft.Win32;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel.ProductDetails;
using System;
using System.Collections.Generic;
@ -24,14 +25,63 @@ namespace SlnMesnac.WPF.Page.ProductDetails
[RegisterAsSingletonAttribute]
public partial class DetailsEditControl : UserControl
{
private readonly ProductDetailsEditViewModel viewModel;
public DetailsEditControl(ProductDetailsEditViewModel productDetailsEditViewModel)
{
InitializeComponent();
this.DataContext = productDetailsEditViewModel;
viewModel = productDetailsEditViewModel;
this.DataContext = viewModel;
}
private void ProductImage_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image files (*.png;*.jpeg;*.jpg)|*.png;*.jpeg;*.jpg";
if (openFileDialog.ShowDialog() == true)
{
viewModel.ProductImage = openFileDialog.FileName;
}
}
private void FeatureImage_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image files (*.png;*.jpeg;*.jpg)|*.png;*.jpeg;*.jpg";
if (openFileDialog.ShowDialog() == true)
{
viewModel.FeatureImage = openFileDialog.FileName;
}
}
private void AnalyzeImage_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image files (*.png;*.jpeg;*.jpg)|*.png;*.jpeg;*.jpg";
if (openFileDialog.ShowDialog() == true)
{
viewModel.AnalyzeImage = openFileDialog.FileName;
}
}
private void SizeLeftImage_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image files (*.png;*.jpeg;*.jpg)|*.png;*.jpeg;*.jpg";
if (openFileDialog.ShowDialog() == true)
{
viewModel.SizeLeftImage = openFileDialog.FileName;
}
}
private void SizeRightImage_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Image files (*.png;*.jpeg;*.jpg)|*.png;*.jpeg;*.jpg";
if (openFileDialog.ShowDialog() == true)
{
viewModel.SizeRightImage = openFileDialog.FileName;
}
}
}

@ -24,18 +24,24 @@
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="7*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>
<Border Grid.Column="0" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="0" CornerRadius="3" Margin="10,10">
<Image Source="{Binding ProductInfo.productImage}" Stretch="Uniform"/>
</Border>
<Border Grid.Column="1" Background="Transparent" CornerRadius="3" Margin="10,10">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="0,10,0,0">
<Border Background="#1052AE" CornerRadius="5,5,5,0" Width="400" Height="40">
<TextBlock Text="无线射频识别RFID HW-RFR-050系列" Foreground="White" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"/>
<TextBlock Text="{Binding ProductInfo.productSeries}" Foreground="White" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0"/>
</Border>
<TextBlock Text="{Binding ProductInfo.productName}" Foreground="Black" FontSize="24" Margin="0,20"/>
<Border Background="Transparent" CornerRadius="5" Width="150" Height="40" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,30,0,0">
<Image Source="/Templates/image/certification.jpg" Stretch="Uniform"/>
</Border>
<TextBlock Text="HW-RFR-050-B-003-1204S" Foreground="Black" FontSize="24" Margin="0,20"/>
<Border Background="#E6EDF6" CornerRadius="5" Width="150" Height="40" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="0,30,0,0"/>
</StackPanel>
</Border>
</Grid>
</Border>
<Border Grid.Row="1" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10">
@ -44,22 +50,26 @@
<ColumnDefinition Width="7*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>
<StackPanel Grid.Column="0" Width="600" Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Left" Margin="10,10,0,0">
<Border Background="#E6EDF6" CornerRadius="18" Height="40" Margin="0,10">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock FontFamily="/Templates/fonts/font_5w2octy6l1q/#iconfont" Text="&#xe61d;" Foreground="#1550B7" FontSize="22" VerticalAlignment="Center" Margin="5,0,0,0"/>
<TextBlock Text="体积小,三防性能优。" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" />
<TextBlock Text="{Binding ProductFeature[0].productFeature}" Width="500" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" />
</StackPanel>
</Border>
<Border Background="#E6EDF6" CornerRadius="18" Height="40" Margin="0,10">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock FontFamily="/Templates/fonts/font_5w2octy6l1q/#iconfont" Text="&#xe61d;" Foreground="#1550B7" FontSize="22" VerticalAlignment="Center" Margin="5,0,0,0"/>
<TextBlock Text="远距稳定识别。" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" />
<TextBlock Text="{Binding ProductFeature[1].productFeature}" Width="500" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" />
</StackPanel>
</Border>
</StackPanel>
<Border Grid.Column="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="0" CornerRadius="3" Margin="10,10">
<Image Source="{Binding ProductInfo.featureImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
<Border Grid.Row="2" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10">
@ -82,10 +92,9 @@
<GradientStop Color="#FFFFFF" Offset="1.0"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="小尺寸" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
<TextBlock Text="{Binding ProductDescribe[0].describeTitle}" Width="300" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
</Border>
<TextBlock Grid.Row="1" Text=" HW-RFR-050-B-XX高频读写器的尺寸为39.8*72*13mm其可以固定在设计尺寸小的位
置。如辊轴输送线的辊轴与辊轴的中间缝隙,可以用来识别底部托盘标签。" TextWrapping="Wrap" FontSize="18" LineHeight="10"/>
<TextBlock Grid.Row="1" Text="{Binding ProductDescribe[0].describeContent}" Width="800" TextWrapping="Wrap" FontSize="18"/>
</Grid>
</Border>
@ -102,9 +111,9 @@
<GradientStop Color="#FFFFFF" Offset="1.0"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="三防性能优" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
<TextBlock Text="{Binding ProductDescribe[1].describeTitle}" Width="300" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
</Border>
<TextBlock Grid.Row="1" Text=" 高频读写器具备IP67的防护等级。可以满足恶劣的工业环境的应用。" TextWrapping="Wrap" FontSize="18" LineHeight="10"/>
<TextBlock Grid.Row="1" Text="{Binding ProductDescribe[1].describeContent}" Width="800" TextWrapping="Wrap" FontSize="18" />
</Grid>
</Border>
@ -121,9 +130,9 @@
<GradientStop Color="#FFFFFF" Offset="1.0"/>
</LinearGradientBrush>
</Border.Background>
<TextBlock Text="远距离识别" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
<TextBlock Text="{Binding ProductDescribe[2].describeTitle}" Width="300" Foreground="#1550B7" FontSize="20" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0,0,0"/>
</Border>
<TextBlock Grid.Row="1" Text=" HW-RFR-050高频读写器可以稳定识别距离为0-45mm最大识别距离为65mm-70mm根据标签的选型以及天线的尺寸有所变化。" TextWrapping="Wrap" FontSize="18" LineHeight="10"/>
<TextBlock Grid.Row="1" Text="{Binding ProductDescribe[2].describeContent}" Width="800" TextWrapping="Wrap" FontSize="18"/>
</Grid>
</Border>
</Grid>
@ -140,8 +149,10 @@
<RowDefinition Height="6*"/>
<RowDefinition Height="4*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10"></Border>
<Border Grid.Row="1" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10">
<Border Grid.Row="0" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10">
<Image Source="{Binding ProductInfo.analyzeImage}" Stretch="Uniform"/>
</Border>
<Border Grid.Row="1" Background="White" BorderBrush="White" BorderThickness="2" CornerRadius="3" Margin="10,10" >
<Grid Margin="10,0,10,0">
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
@ -158,33 +169,46 @@
</Border>
</Border>
<Border Grid.Row="1" Grid.Column="0">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left">
<TextBlock Text="RFID特性" Foreground="#1550B7" FontSize="16" TextWrapping="Wrap" Margin="0,10,0,0"/>
<TextBlock Text="射频协议符合ISO/IEC 15693" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="协议工作频率13.56MHz士7KHz" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="识别距离小于等于50mm" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="盘点速度20ms/次" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<!--<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" x:Name="ParameterStackPanelLeft">
<TextBox Text="射频协议符合ISO/IEC 15693" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="协议工作频率13.56MHz士7KHz" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="识别距离小于等于50mm" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="盘点速度20ms/次" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="输入电压12-24VDC" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="发射功率:0.2W" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="最大功率1W" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="通讯协议Modbus RTU" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="通讯接口RS485M12-5针-B型-公头航空头)" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="搭配网关支持通讯协议Profinet、EtherNet/IP、EtherCAT、CCLinkIE、ModbusTCP" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="输入电压12-24VDC" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="发射功率:0.2W" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="最大功率1W" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="通讯协议Modbus RTU" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBox Text="通讯接口RS485M12-5针-B型-公头航空头)" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
</StackPanel>-->
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" x:Name="ParameterStackPanelLeft">
<TextBlock Text="RFID特性" Foreground="#1550B7" FontSize="16" TextWrapping="Wrap" Margin="0,10,0,0"/>
<TextBlock Text="{Binding ProductParams[0].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[1].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[2].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[3].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[4].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[5].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[6].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[7].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[8].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
</StackPanel>
</Border>
<Border Grid.Row="1" Grid.Column="1">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left">
<StackPanel Orientation="Vertical" VerticalAlignment="Top" HorizontalAlignment="Left" x:Name="ParameterStackPanelRight">
<TextBlock Text="RFID特性" Foreground="#1550B7" FontSize="16" TextWrapping="Wrap" Margin="0,10,0,0"/>
<TextBlock Text="尺寸40W *72 L*13Hmm" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="外壳材质:ABS+PC" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="安装环境安装需要1cm厚的无金属缓冲区如垫一块10mm厚pom板" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="尾部出线长度300mm" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[9].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[10].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[11].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[12].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="工作温度:-10℃+65℃" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="防护等级IP67" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="一致性认证CE、Rohs" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="功能显示通讯正常Link指示灯常亮。有通讯Mod指示灯闪烁" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[13].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[14].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[15].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[16].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
<TextBlock Text="{Binding ProductParams[17].paramContent}" Width="380" Foreground="Gray" FontSize="14" TextWrapping="Wrap" Margin="0,5,0,0"/>
</StackPanel>
</Border>
@ -210,6 +234,10 @@
</Border>
</Border>
<Border Grid.Row="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="0" CornerRadius="3" Margin="10,10">
<Image Source="{Binding ProductInfo.sizeLeftImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
<Border Grid.Column="1" Background="White" BorderBrush="White" BorderThickness="2" Margin="5,0,0,0">
@ -225,6 +253,10 @@
</Border>
</Border>
<Border Grid.Row="1" Background="Transparent" BorderBrush="#5B93EA" BorderThickness="0" CornerRadius="3" Margin="10,10">
<Image Source="{Binding ProductInfo.sizeRightImage}" Stretch="Uniform"/>
</Border>
</Grid>
</Border>
</Grid>
@ -233,3 +265,4 @@
</Border>
</Grid>
</UserControl>

@ -1,4 +1,6 @@
using System;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel.ProductDetails;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -18,11 +20,13 @@ namespace SlnMesnac.WPF.Page.ProductDetails
/// <summary>
/// ProductDetailsControl.xaml 的交互逻辑
/// </summary>
[RegisterAsSingletonAttribute]
public partial class ProductDetailsControl : UserControl
{
public ProductDetailsControl()
public ProductDetailsControl(ProductDetailsViewModel productDetailsViewModel)
{
InitializeComponent();
this.DataContext = productDetailsViewModel;
}
}
}

@ -0,0 +1,58 @@
<UserControl x:Class="SlnMesnac.WPF.Page.ProductInfo.ProductInfoControl"
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:SlnMesnac.WPF.Page.ProductInfo"
xmlns:local1="clr-namespace:SlnMesnac.WPF.Converter.Generate"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" Background="Transparent">
<Control.Resources>
<local1:RowToIndexConverter x:Key="RowToIndexConverter" />
</Control.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="8*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" BorderBrush="Green" BorderThickness="2" CornerRadius="5" Margin="0,0,0,10">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center">
<TextBlock Text="产品编号:" FontSize="20" Foreground="Black" VerticalAlignment="Center" Margin="10,0,10,0"/>
<TextBox Text="{Binding ProductCodeStr}" Foreground="Black" FontSize="18" Width="200" Height="35"/>
<TextBlock Text="产品名称:" FontSize="20" Foreground="Black" VerticalAlignment="Center" Margin="30,0,10,0"/>
<TextBox Text="{Binding ProductNameStr}" Foreground="Black" FontSize="18" Width="200" Height="35"/>
<Button Content="查 询" FontSize="16" Width="120" Height="35" Background="#007DFA" BorderBrush="#007DFA" Margin="20,0,10,0" Command="{Binding QueryProductInfoCommand}" />
</StackPanel>
</Border>
<Border Grid.Row="1" BorderBrush="Green" BorderThickness="2" CornerRadius="5" Margin="0,0,0,10">
<DataGrid x:Name="datagrid" Grid.Row="0" ItemsSource="{Binding ProductInfoItems}" Background="Transparent"
FontSize="15" ColumnHeaderHeight="50"
RowHeight="50" AutoGenerateColumns="False" RowHeaderWidth="0"
GridLinesVisibility="None" ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Hidden" BorderThickness="0" CanUserAddRows="False" HorizontalAlignment="Center"
Foreground="Black" >
<!--resourceStyle 399行修改选中字体颜色-->
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding productCode}" Header="产品编号" Width="3*" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding productSeries}" Header="产品系列" Width="3*" IsReadOnly="True"/>
<DataGridTextColumn Binding="{Binding productName}" Header="产品名称" Width="3*" IsReadOnly="True"/>
<DataGridTemplateColumn Header="操作" Width="2*">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="产品信息" CommandParameter="{Binding productCode}" Background="#009999" Foreground="White" Margin="10,0,0,0" Height="25" BorderBrush="#009999" BorderThickness="0" Width="100" Command="{Binding DataContext.EditProductInfoCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGrid }}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
</UserControl>

@ -0,0 +1,33 @@
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.ViewModel;
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 SlnMesnac.WPF.Page.ProductInfo
{
/// <summary>
/// ProductInfoControl.xaml 的交互逻辑
/// </summary>
[RegisterAsSingletonAttribute]
public partial class ProductInfoControl : UserControl
{
public ProductInfoControl(ProductInfoViewModel productInfoViewModel)
{
InitializeComponent();
this.DataContext = productInfoViewModel;
}
}
}

@ -13,6 +13,7 @@
<None Remove="Templates\fonts\font_5w2octy6l1q\iconfont.ttf" />
<None Remove="Templates\gif\loading.gif" />
<None Remove="Templates\image\background.jpg" />
<None Remove="Templates\image\certification.jpg" />
<None Remove="Templates\image\login-background.jpg" />
</ItemGroup>
@ -43,6 +44,7 @@
<PackageReference Include="Lierda.WPFHelper" Version="1.0.3" />
<PackageReference Include="MaterialDesignThemes" Version="5.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.0" />
<PackageReference Include="Prism.Wpf" Version="9.0.537" />
<PackageReference Include="Rougamo.Fody" Version="5.0.0" />
<PackageReference Include="Scrutor" Version="6.0.1" />
<PackageReference Include="WindowsAPICodePack-Shell" Version="1.1.1" />
@ -55,6 +57,7 @@
</Resource>
<Resource Include="Templates\gif\loading.gif" />
<Resource Include="Templates\image\background.jpg" />
<Resource Include="Templates\image\certification.jpg" />
<Resource Include="Templates\image\login-background.jpg" />
</ItemGroup>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

@ -1,7 +1,11 @@
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualBasic;
using NVelocity.Util.Introspection;
using Prism.Events;
using SlnMesnac.Serilog;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Event;
using SlnMesnac.WPF.ViewModel.Base;
using System;
using System.Collections.Generic;
@ -16,9 +20,12 @@ namespace SlnMesnac.WPF.ViewModel.Index
{
public readonly SerilogHelper _logger;
public IndexViewModel(SerilogHelper logger)
private readonly IEventAggregator _eventAggregator;
public IndexViewModel(SerilogHelper logger, IEventAggregator eventAggregator)
{
_logger = logger;
_eventAggregator = eventAggregator;
}
/// <summary>
@ -29,6 +36,11 @@ namespace SlnMesnac.WPF.ViewModel.Index
private void LoadProductInfo(string deviceCode)
{
string code = deviceCode as string;
_eventAggregator.GetEvent<ProductCodeEvent>().Publish(code);
var mainWindow = App.ServiceProvider.GetService<MainWindowViewModel>();
mainWindow.ControlOnClick("ProductInfo");
}
}
}

@ -7,6 +7,7 @@ using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Page;
using SlnMesnac.WPF.Page.Generate;
using SlnMesnac.WPF.Page.ProductDetails;
using SlnMesnac.WPF.Page.ProductInfo;
using SlnMesnac.WPF.ViewModel.Base;
using System;
using System.Windows;
@ -20,6 +21,9 @@ namespace SlnMesnac.WPF.ViewModel
private readonly GenerateControl _generateControl;
private readonly IndexControl _indexControl;
private readonly DetailsEditControl _detailsEditControl;
private readonly ProductInfoControl _productInfoControl;
private readonly ProductDetailsControl _productDetailsControl;
#region 参数定义
/// <summary>
/// PLC设备状态
@ -57,13 +61,18 @@ namespace SlnMesnac.WPF.ViewModel
#endregion
public MainWindowViewModel(SerilogHelper logger,GenerateControl generateControl,IndexControl indexControl, DetailsEditControl detailsEditControl)
public MainWindowViewModel(SerilogHelper logger,GenerateControl generateControl,IndexControl indexControl, DetailsEditControl detailsEditControl,
ProductInfoControl productInfoControl,ProductDetailsControl productDetailsControl)
{
_logger = logger;
_generateControl = generateControl;
_indexControl = indexControl;
_detailsEditControl = detailsEditControl;
_productInfoControl = productInfoControl;
_productDetailsControl = productDetailsControl;
this.UserContent = _generateControl;
}
@ -120,7 +129,7 @@ namespace SlnMesnac.WPF.ViewModel
/// 界面跳转
/// </summary>
[RelayCommand]
private void ControlOnClick(object obj)
public void ControlOnClick(object obj)
{
try
{
@ -131,10 +140,16 @@ namespace SlnMesnac.WPF.ViewModel
UserContent = _indexControl;
break;
case "Set":
UserContent = _productInfoControl;
break;
case "EditDetails":
UserContent = _detailsEditControl;
break;
case "ProductInfo":
UserContent = _productDetailsControl;
break;
default:
UserContent = _indexControl;
UserContent = _detailsEditControl;
break;
}
}

@ -1,7 +1,10 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Prism.Events;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Event;
using SlnMesnac.WPF.ViewModel.Base;
using System;
using System.Collections.Generic;
@ -9,13 +12,24 @@ using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static MaterialDesignThemes.Wpf.Theme.ToolBar;
namespace SlnMesnac.WPF.ViewModel.ProductDetails
{
[RegisterAsSingletonAttribute]
public partial class ProductDetailsEditViewModel : BaseViewModel
public partial class ProductDetailsEditViewModel : ObservableObject
{
private readonly Ibase_product_infoServices _product_infoServices;
private readonly Ibase_product_featureServices _product_featureServices;
private readonly Ibase_product_describeServices _product_describeServices;
private readonly Ibase_product_paramServices _product_paramServices;
private readonly IEventAggregator _eventAggregator;
[ObservableProperty]
public ObservableCollection<base_product_feature> productFeature = new ObservableCollection<base_product_feature>();
@ -25,48 +39,177 @@ namespace SlnMesnac.WPF.ViewModel.ProductDetails
[ObservableProperty]
public ObservableCollection<base_product_param> productParams = new ObservableCollection<base_product_param>();
[ObservableProperty]
public base_product_info productInfo = new base_product_info();
public ProductDetailsEditViewModel()
[ObservableProperty]
public string productImage = string.Empty;
[ObservableProperty]
public string featureImage = string.Empty;
[ObservableProperty]
public string analyzeImage = string.Empty;
[ObservableProperty]
public string sizeLeftImage = string.Empty;
[ObservableProperty]
public string sizeRightImage = string.Empty;
public ProductDetailsEditViewModel(Ibase_product_infoServices product_InfoServices,Ibase_product_featureServices product_featureServices, Ibase_product_describeServices product_describeServices,
Ibase_product_paramServices product_paramServices, IEventAggregator eventAggregator)
{
_product_infoServices = product_InfoServices;
_product_featureServices = product_featureServices;
_product_describeServices = product_describeServices;
_product_paramServices = product_paramServices;
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<ProductInfoEvent>().Subscribe(OnProductSelected);
}
private void OnProductSelected(base_product_info product)
{
ProductInfo = _product_infoServices.Query(x => x.productCode == product.productCode).First(); ;
Init();
}
private void Init()
{
for(int i = 0; i < 2; i++)
{
ProductFeature.Add(new base_product_feature()
{
productFeature = string.Empty
});
}
ProductFeature.Clear();
ProductDescribe.Clear();
ProductParams.Clear();
var info = ProductInfo;
for (int i = 0; i < 3; i++)
if (info != null)
{
ProductDescribe.Add(new base_product_describe()
ProductImage = info.productImage;
FeatureImage = info.featureImage;
AnalyzeImage = info.analyzeImage;
SizeLeftImage = info.sizeLeftImage;
SizeRightImage = info.sizeRightImage;
var productFeatureInfo = _product_featureServices.Query(x => x.productCode == info.productCode);
if (productFeatureInfo.Count == 0)
{
describeTitle = string.Empty,
describeContent = string.Empty
});
}
for (int i = 0; i < 19; i++)
{
ProductParams.Add(new base_product_param()
for (int i = 0; i < 2; i++)
{
ProductFeature.Add(new base_product_feature()
{
productFeature = string.Empty
});
}
}
else
{
paramContent = string.Empty,
});
ProductFeature = new ObservableCollection<base_product_feature>(productFeatureInfo);
}
var productDescribeInfo = _product_describeServices.Query(x => x.productCode == info.productCode);
if (productDescribeInfo.Count == 0)
{
for (int i = 0; i < 3; i++)
{
ProductDescribe.Add(new base_product_describe()
{
describeTitle = string.Empty,
describeContent = string.Empty
});
}
}
else
{
ProductDescribe = new ObservableCollection<base_product_describe>(productDescribeInfo);
}
var productParamsInfo = _product_paramServices.Query(x => x.productCode == info.productCode);
if (productParamsInfo.Count == 0)
{
for (int i = 0; i < 19; i++)
{
ProductParams.Add(new base_product_param()
{
paramContent = string.Empty,
});
}
}
else
{
ProductParams = new ObservableCollection<base_product_param>(productParamsInfo);
}
}
}
[RelayCommand]
private void SavePrdouctInfo()
{
var productFeatureInfo = ProductFeature;
var info = ProductInfo;
if(info != null)
{
info.productImage = productImage;
info.featureImage = featureImage;
info.analyzeImage = analyzeImage;
info.sizeLeftImage = sizeLeftImage;
info.sizeRightImage = sizeRightImage;
_product_infoServices.Update(info);
var productFeatureInfo = ProductFeature.ToList();
//productFeatureInfo.ToList().ForEach(x => x.productCode = info.productCode);
foreach(var item in productFeatureInfo)
{
item.productCode = info.productCode;
if (item.objid != 0)
{
_product_featureServices.Update(item);
}
else
{
_product_featureServices.Insert(item);
}
}
var productDescribeInfo = ProductDescribe.ToList();
//productDescribeInfo.ToList().ForEach(x => x.productCode = info.productCode);
foreach (var item in productDescribeInfo)
{
item.productCode = info.productCode;
if (item.objid != 0)
{
_product_describeServices.Update(item);
}
else
{
_product_describeServices.Insert(item);
}
}
var productParamsInfo = ProductParams.ToList();
//productParamsInfo.ToList().ForEach(x => x.productCode = info.productCode);
foreach (var item in productParamsInfo)
{
item.productCode = info.productCode;
if (item.objid != 0)
{
_product_paramServices.Update(item);
}
else
{
_product_paramServices.Insert(item);
}
}
}
var productDescribeInfo = ProductDescribe;
var productParamsInfo = ProductParams;
}
}
}

@ -0,0 +1,122 @@
using CommunityToolkit.Mvvm.ComponentModel;
using Prism.Events;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.Attribute;
using SlnMesnac.WPF.Event;
using SlnMesnac.WPF.ViewModel.Base;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SlnMesnac.WPF.ViewModel.ProductDetails
{
[RegisterAsSingletonAttribute]
public partial class ProductDetailsViewModel : BaseViewModel
{
private readonly Ibase_product_infoServices _product_infoServices;
private readonly Ibase_product_featureServices _product_featureServices;
private readonly Ibase_product_describeServices _product_describeServices;
private readonly Ibase_product_paramServices _product_paramServices;
private readonly IEventAggregator _eventAggregator;
[ObservableProperty]
public ObservableCollection<base_product_feature> productFeature = new ObservableCollection<base_product_feature>();
[ObservableProperty]
public ObservableCollection<base_product_describe> productDescribe = new ObservableCollection<base_product_describe>();
[ObservableProperty]
public ObservableCollection<base_product_param> productParams = new ObservableCollection<base_product_param>();
[ObservableProperty]
public base_product_info productInfo = new base_product_info();
public ProductDetailsViewModel(Ibase_product_infoServices product_infoServices, Ibase_product_featureServices product_featureServices, Ibase_product_describeServices product_describeServices,
Ibase_product_paramServices product_paramServices, IEventAggregator eventAggregator)
{
_product_featureServices = product_featureServices;
_product_describeServices = product_describeServices;
_product_paramServices = product_paramServices;
_product_infoServices = product_infoServices;
_eventAggregator = eventAggregator;
_eventAggregator.GetEvent<ProductCodeEvent>().Subscribe(OnProductSelected);
}
private void OnProductSelected(string productCode)
{
Init(productCode);
}
private void Init(string productCode)
{
ProductFeature.Clear();
ProductDescribe.Clear();
ProductParams.Clear();
ProductInfo = _product_infoServices.Query(x => x.productCode == productCode).First();
var productFeatureInfo = _product_featureServices.Query(x => x.productCode == productCode);
if (productFeatureInfo.Count == 0)
{
for (int i = 0; i < 2; i++)
{
ProductFeature.Add(new base_product_feature()
{
productFeature = string.Empty
});
}
}
else
{
ProductFeature = new ObservableCollection<base_product_feature>(productFeatureInfo);
}
var productDescribeInfo = _product_describeServices.Query(x => x.productCode == productCode);
if (productDescribeInfo.Count == 0)
{
for (int i = 0; i < 3; i++)
{
ProductDescribe.Add(new base_product_describe()
{
describeTitle = string.Empty,
describeContent = string.Empty
});
}
}
else
{
ProductDescribe = new ObservableCollection<base_product_describe>(productDescribeInfo);
}
var productParamsInfo = _product_paramServices.Query(x => x.productCode == productCode);
if (productParamsInfo.Count == 0)
{
for (int i = 0; i < 19; i++)
{
ProductParams.Add(new base_product_param()
{
paramContent = string.Empty,
});
}
}
else
{
ProductParams = new ObservableCollection<base_product_param>(productParamsInfo);
}
}
}
}

@ -0,0 +1,79 @@
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service;
using SlnMesnac.WPF.ViewModel.Base;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Threading.Tasks;
using SlnMesnac.Common;
using SlnMesnac.WPF.Attribute;
using Prism.Events;
using SlnMesnac.WPF.Event;
using Microsoft.Extensions.DependencyInjection;
namespace SlnMesnac.WPF.ViewModel
{
[RegisterAsSingletonAttribute]
public partial class ProductInfoViewModel : BaseViewModel
{
private readonly Ibase_product_infoServices _services;
private readonly IEventAggregator _eventAggregator;
[ObservableProperty]
public string productCodeStr = string.Empty;
[ObservableProperty]
public string productNameStr = string.Empty;
[ObservableProperty]
public ObservableCollection<base_product_info> productInfoItems = new ObservableCollection<base_product_info>();
public ProductInfoViewModel(Ibase_product_infoServices services, IEventAggregator eventAggregator)
{
_services = services;
_eventAggregator = eventAggregator;
QueryProductInfo();
}
[RelayCommand]
private void QueryProductInfo()
{
Expression<Func<base_product_info, bool>> exp = s1 => true;
if(!string.IsNullOrEmpty(productCodeStr))
{
exp = exp.And(x => x.productCode == productCodeStr);
}
if (!string.IsNullOrEmpty(productNameStr))
{
exp = exp.And(x=>x.productName == productNameStr);
}
var infos = _services.Query(exp);
ProductInfoItems = new ObservableCollection<base_product_info>(infos);
}
[RelayCommand]
private void EditProductInfo(string productCode)
{
var info = _services.Query(x=>x.productCode == productCode).First();
_eventAggregator.GetEvent<ProductInfoEvent>().Publish(info);
var mainWindow = App.ServiceProvider.GetService<MainWindowViewModel>();
mainWindow.ControlOnClick("EditDetails");
}
}
}
Loading…
Cancel
Save