!提交代码

This commit is contained in:
hehaibing-1996
2024-04-15 18:43:28 +08:00
commit e89b64ea3a
232 changed files with 22292 additions and 0 deletions

View File

@ -0,0 +1,57 @@
<pi:UserControlBase x:Class="货架标准上位机.DataChartView"
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:货架标准上位机"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="loadFirst">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<!--筛选栏-->
<Grid Margin="5,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="2">
<ComboBox Margin="5" ItemsSource="{Binding Year}" SelectedIndex="{Binding YearIndex}" Style="{StaticResource ComboBoxExtend}" hc:InfoElement.Placeholder="请选择年份" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="年份"></ComboBox>
<ComboBox Margin="5" ItemsSource="{Binding Month}" SelectedIndex="{Binding MonthIndex}" Style="{StaticResource ComboBoxExtend}" hc:InfoElement.Placeholder="请选择月份" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="月份"></ComboBox>
</UniformGrid>
<hc:UniformSpacingPanel Grid.Column="1" Spacing="5">
<Button Command="{Binding ButStatChartCommand}" Style="{StaticResource ButtonDefault}" Width="70" >刷新</Button>
</hc:UniformSpacingPanel>
</Grid>
<hc:LoadingLine VerticalAlignment="Top" IsRunning="{Binding IsLoad}" Visibility="{Binding IsLoad,Converter={StaticResource Boolean2VisibilityConverter}}"/>
<!--图表栏-->
<lvc:CartesianChart Grid.Row="1" Grid.ColumnSpan="3" LegendLocation="Top" >
<!--内容-->
<lvc:CartesianChart.Series>
<lvc:LineSeries LineSmoothness="0.3" Stroke="DeepSkyBlue" Title="总数量" Values="{Binding ChartValues1}" DataLabels="True"></lvc:LineSeries>
<lvc:LineSeries LineSmoothness="0.3" Stroke="LimeGreen" Title="合格数量" Values="{Binding ChartValues2}" DataLabels="False"></lvc:LineSeries>
<lvc:LineSeries LineSmoothness="0.3" Stroke="OrangeRed" Title="不合格数量" Values="{Binding ChartValues3}" DataLabels="False"></lvc:LineSeries>
</lvc:CartesianChart.Series>
<!--x轴-->
<lvc:CartesianChart.AxisX>
<!--<lvc:Axis Title="日期" LabelFormatter="{Binding LabelFormatterX}"></lvc:Axis>-->
<lvc:Axis Title="日期" Labels="{Binding ChartLabelsX}">
<!--显示所有的列-->
<lvc:Axis.Separator>
<lvc:Separator Step="1"></lvc:Separator>
</lvc:Axis.Separator>
</lvc:Axis>
</lvc:CartesianChart.AxisX>
<!--y轴-->
<lvc:CartesianChart.AxisY>
<!--<lvc:Axis Title="数量" LabelFormatter="{Binding LabelFormatterY}"></lvc:Axis>-->
<lvc:Axis Title="数量" MinValue="0"></lvc:Axis>
</lvc:CartesianChart.AxisY>
</lvc:CartesianChart>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,44 @@
using .ViewModel;
using HandyControl.Controls;
using Ping9719.WpfEx;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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
{
/// <summary>
/// 数据图表
/// </summary>
public partial class DataChartView : UserControlBase
{
DataChartViewModel viewModel = new DataChartViewModel();
public DataChartView()
{
InitializeComponent();
this.DataContext = viewModel;
}
//第一次加载
private void loadFirst(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
viewModel.UpdataYear();
}
}
}

View File

@ -0,0 +1,62 @@
<pi:UserControlBase x:Class="货架标准上位机.DataListView"
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:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="loadFirst">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<!--条件区-->
<Grid Margin="5,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="4">
<hc:DateTimePicker SelectedDateTime="{Binding TimeGo}" Margin="5" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="开始时间" VerticalAlignment="Center"/>
<hc:DateTimePicker SelectedDateTime="{Binding TimeTo}" Margin="5" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="结束时间" VerticalAlignment="Center"/>
<hc:TextBox Text="{Binding Info1}" Margin="5" Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="信息1" hc:InfoElement.Placeholder="模糊匹配" VerticalAlignment="Center"/>
<hc:TextBox Text="{Binding Info2}" Margin="5" Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="信息2" hc:InfoElement.Placeholder="模糊匹配" VerticalAlignment="Center"/>
</UniformGrid>
<hc:UniformSpacingPanel Grid.Column="1" Spacing="5">
<Button Content="导出Excel" Command="{Binding ExportExcelCommand}" Style="{StaticResource ButtonSuccess}" Width="80"></Button>
<Button Content="查询" Command="{Binding UpdateListCommand}" Style="{StaticResource ButtonPrimary}" Width="70"></Button>
</hc:UniformSpacingPanel>
</Grid>
<hc:LoadingLine VerticalAlignment="Top" IsRunning="{Binding IsLoad}" Visibility="{Binding IsLoad,Converter={StaticResource Boolean2VisibilityConverter}}"/>
<!--内容区-->
<Border Grid.Row="1" Style="{StaticResource BorderRegion}" BorderThickness="1" Background="#EEEEEE" Margin="3,0,3,3" Padding="0" >
<DataGrid RowHeaderWidth="50" HeadersVisibility="All" AutoGenerateColumns="False" ItemsSource="{Binding DataList}" hc:DataGridAttach.CanUnselectAllWithBlankArea="False" hc:DataGridAttach.ShowSelectAllButton="False" hc:DataGridAttach.ShowRowNumber="True">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Info1}" Header="信息1" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Info2}" Header="信息2" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Status}" Header="状态结果" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Time,StringFormat=yyyy-MM-dd HH:mm}" Header="测试时间" CanUserSort="False"/>
<DataGridTemplateColumn CanUserResize="False" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Style="{StaticResource ButtonSuccess}" IsEnabled="True" Content="详情" Width="70" Command="{Binding DataContext.SeeCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
<!--页码区-->
<hc:Pagination Grid.Row="2" AutoHiding="True" MaxPageCount="{Binding MaxPageCount}" PageIndex="{Binding PageIndex}" DataCountPerPage="{Binding DataCountPerPage}" IsJumpEnabled="False" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,3" FontSize="16" >
<hc:Interaction.Triggers>
<hc:EventTrigger EventName="PageUpdated">
<hc:EventToCommand Command="{Binding PageUpdateCommand}" PassEventArgsToCommand="True" />
</hc:EventTrigger>
</hc:Interaction.Triggers>
</hc:Pagination>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,45 @@
using .ViewModel;
using HandyControl.Controls;
using Microsoft.Win32;
using MiniExcelLibs;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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
{
/// <summary>
/// 数据列表
/// </summary>
public partial class DataListView : UserControlBase
{
DataListViewModel viewModel = new DataListViewModel();
public DataListView()
{
InitializeComponent();
this.DataContext = viewModel;
}
//第一次加载
private void loadFirst(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
viewModel.UpdateList();
}
}
}

View File

@ -0,0 +1,64 @@
<pi:UserControlBase x:Class="货架标准上位机.DataListWarnInfoView"
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:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="loadFirst">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<!--条件区-->
<Grid Margin="5,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="4">
<hc:DateTimePicker SelectedDateTime="{Binding TimeGo}" Margin="5" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="开始时间" VerticalAlignment="Center"/>
<hc:DateTimePicker SelectedDateTime="{Binding TimeTo}" Margin="5" Style="{StaticResource DateTimePickerExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="结束时间" VerticalAlignment="Center"/>
<hc:TextBox Text="{Binding Info1}" Margin="5" Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="来源" hc:InfoElement.Placeholder="模糊匹配" VerticalAlignment="Center"/>
<hc:TextBox Text="{Binding Info2}" Margin="5" Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="级别" hc:InfoElement.Placeholder="模糊匹配" VerticalAlignment="Center"/>
</UniformGrid>
<hc:UniformSpacingPanel Grid.Column="1" Spacing="5">
<ToggleButton Content="导出Excel" Command="{Binding ExportExcelCommand}" Style="{StaticResource ToggleButtonLoadingSuccess}" IsChecked="{Binding IsLoad1}" Width="80"></ToggleButton>
<ToggleButton Content="查询" Command="{Binding UpdateListCommand}" Style="{StaticResource ToggleButtonLoadingPrimary}" IsChecked="{Binding IsLoad2}" Width="70"></ToggleButton>
</hc:UniformSpacingPanel>
</Grid>
<!--内容区-->
<Border Grid.Row="1" Style="{StaticResource BorderRegion}" BorderThickness="1" Background="#EEEEEE" Margin="3,0,3,3" Padding="0" >
<DataGrid RowHeaderWidth="50" HeadersVisibility="All" AutoGenerateColumns="False" ItemsSource="{Binding DataList}" hc:DataGridAttach.CanUnselectAllWithBlankArea="False" hc:DataGridAttach.ShowSelectAllButton="False" hc:DataGridAttach.ShowRowNumber="True">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Width="100" Binding="{Binding Source}" Header="来源" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Text}" Header="信息" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="100" Binding="{Binding Level}" Header="级别" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Solution}" Header="解决方案" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="100" Binding="{Binding WarnType}" Header="警告类型" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding TimeGo,StringFormat=yyyy-MM-dd HH:mm}" Header="开始时间" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="160" Binding="{Binding DuraTime}" Header="持续时间" CanUserSort="False"/>
<!--<DataGridTemplateColumn CanUserResize="False" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Style="{StaticResource ButtonSuccess}" IsEnabled="True" Content="详情" Width="70" Command="{Binding DataContext.SeeCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>-->
</DataGrid.Columns>
</DataGrid>
</Border>
<!--页码区-->
<hc:Pagination Grid.Row="2" AutoHiding="True" MaxPageCount="{Binding MaxPageCount}" PageIndex="{Binding PageIndex}" DataCountPerPage="{Binding DataCountPerPage}" IsJumpEnabled="False" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,0,0,3" FontSize="16" >
<hc:Interaction.Triggers>
<hc:EventTrigger EventName="PageUpdated">
<hc:EventToCommand Command="{Binding PageUpdateCommand}" PassEventArgsToCommand="True" />
</hc:EventTrigger>
</hc:Interaction.Triggers>
</hc:Pagination>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,45 @@
using .ViewModel;
using HandyControl.Controls;
using Microsoft.Win32;
using MiniExcelLibs;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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
{
/// <summary>
/// 数据列表
/// </summary>
public partial class DataListWarnInfoView : UserControlBase
{
DataListWarnInfoViewModel viewModel = new DataListWarnInfoViewModel();
public DataListWarnInfoView()
{
InitializeComponent();
this.DataContext = viewModel;
}
//第一次加载
private void loadFirst(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
viewModel.UpdateList();
}
}
}

View File

@ -0,0 +1,138 @@
<pi:UserControlBase x:Class="货架标准上位机.DeviceView"
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:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="visfir" IsVisibleChanged="vis">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<GroupBox Header="模式选择" Margin="3" Style="{StaticResource GroupBoxTab}">
<StackPanel Orientation="Horizontal">
<Button Margin="5,3" Padding="30,0" Content="初始化"></Button>
</StackPanel>
</GroupBox>
<hc:ScrollViewer Grid.Row="1" Margin="3,3" IsInertiaEnabled="True" hc:ScrollViewerAttach.AutoHide="True">
<StackPanel Margin="0" Orientation="Vertical">
<!--监听-->
<Border Style="{StaticResource BorderRegion}" Effect="{StaticResource EffectShadow1}" Visibility="{Binding IsVisRead,Converter={StaticResource Boolean2VisibilityConverter}}">
<Expander Style="{StaticResource BaseStyle}" Margin="0" Header="监听" IsExpanded="{Binding IsVisExpRead}">
<hc:TransitioningContentControl TransitionMode="Top2BottomWithFade">
<!--<local:IotReadListView Margin="0,10,0,0" Data="{Binding DataRead}"/>-->
<StackPanel x:Name="stackPanel1">
<StackPanel.Resources>
<ResourceDictionary>
<Style TargetType="pi:IotStateInfo" BasedOn="{StaticResource IotStateInfoStyle}">
<Setter Property="Width" Value="150"></Setter>
<Setter Property="Margin" Value="3,1"></Setter>
<!--<Setter Property="BorderThickness" Value="1"></Setter>-->
<Setter Property="Opacity" Value="0.8"></Setter>
<Setter Property="OkBrush" Value="DarkTurquoise"></Setter>
</Style>
</ResourceDictionary>
</StackPanel.Resources>
<WrapPanel>
<pi:IotStateInfo Header="传感器1" Value="false"></pi:IotStateInfo>
<pi:IotStateInfo Header="传感器2" Value="True"></pi:IotStateInfo>
</WrapPanel>
<Expander Header="分组1" IsExpanded="True" BorderThickness="0" Background="{StaticResource DefaultBrush}">
<WrapPanel>
<pi:IotStateInfo Header="温度1" Value="1.23"></pi:IotStateInfo>
</WrapPanel>
</Expander>
</StackPanel>
</hc:TransitioningContentControl>
</Expander>
</Border>
<!--控制-->
<Border Margin="0,10,0,0" Style="{StaticResource BorderRegion}" Effect="{StaticResource EffectShadow1}" Visibility="{Binding IsVisWrite,Converter={StaticResource Boolean2VisibilityConverter}}">
<Expander Style="{StaticResource BaseStyle}" Margin="0" Header="控制" IsExpanded="{Binding IsVisExpWrite}">
<hc:TransitioningContentControl TransitionMode="Top2BottomWithFade">
<!--<local:IotWriteListView Margin="0,10,0,0" Data="{Binding DataWrite}"/>-->
<StackPanel x:Name="stackPanel2">
<StackPanel.Resources>
<ResourceDictionary>
<Style TargetType="pi:IotStateInfo" BasedOn="{StaticResource IotStateInfoStyle}">
<Setter Property="Width" Value="150"></Setter>
<Setter Property="Margin" Value="3,1"></Setter>
</Style>
</ResourceDictionary>
</StackPanel.Resources>
<WrapPanel>
<pi:IotStateInfo Header="传感器1" Value="false"></pi:IotStateInfo>
<pi:IotStateInfo Header="传感器2" Value="True"></pi:IotStateInfo>
</WrapPanel>
<Expander Header="分组1" IsExpanded="True" BorderThickness="0" Background="{StaticResource DefaultBrush}">
<WrapPanel>
<pi:IotStateInfo Header="温度1" Value="1.23"></pi:IotStateInfo>
</WrapPanel>
</Expander>
</StackPanel>
</hc:TransitioningContentControl>
</Expander>
</Border>
<!--气缸-->
<Border Margin="0,10,0,0" Style="{StaticResource BorderRegion}" Effect="{StaticResource EffectShadow1}" Visibility="{Binding IsVisUrn,Converter={StaticResource Boolean2VisibilityConverter}}">
<Expander Style="{StaticResource BaseStyle}" Margin="0" Header="气缸" IsExpanded="{Binding IsVisExpUrn}">
<hc:TransitioningContentControl TransitionMode="Top2BottomWithFade">
<!--<local:IotUrnListView Margin="0,10,0,0" Data="{Binding DataUrn}"/>-->
<StackPanel x:Name="stackPanel3">
<StackPanel.Resources>
<ResourceDictionary>
<Style TargetType="pi:IotUrnMode" BasedOn="{StaticResource IotUrnModeStyle}">
<Setter Property="Margin" Value="3,1"></Setter>
</Style>
</ResourceDictionary>
</StackPanel.Resources>
<WrapPanel>
<pi:IotUrnMode Text="气缸1"></pi:IotUrnMode>
<pi:IotUrnMode Text="气缸1" IsButBadge1="True"></pi:IotUrnMode>
</WrapPanel>
<Expander Header="分组1" IsExpanded="True" BorderThickness="0" Background="{StaticResource DefaultBrush}">
<WrapPanel>
<pi:IotUrnMode Text="气缸1"></pi:IotUrnMode>
</WrapPanel>
</Expander>
</StackPanel>
</hc:TransitioningContentControl>
</Expander>
</Border>
<!--伺服-->
<Border Margin="0,10,0,0" Style="{StaticResource BorderRegion}" Effect="{StaticResource EffectShadow1}" Visibility="{Binding IsVisServo,Converter={StaticResource Boolean2VisibilityConverter}}">
<Expander Style="{StaticResource BaseStyle}" Margin="0" Header="伺服" IsExpanded="{Binding IsVisExpServo}">
<hc:TransitioningContentControl TransitionMode="Top2BottomWithFade">
<!--<local:IotServoListView Margin="0,10,0,0" Data="{Binding DataServo}"/>-->
<StackPanel x:Name="stackPanel4">
<StackPanel.Resources>
<ResourceDictionary>
<Style TargetType="pi:IotServoMode" BasedOn="{StaticResource IotServoModeStyle}">
<Setter Property="Margin" Value="3,1"></Setter>
<Setter Property="VerticalAlignment" Value="Top"></Setter>
</Style>
</ResourceDictionary>
</StackPanel.Resources>
<WrapPanel>
<pi:IotServoMode Text="伺服1"/>
<pi:IotServoMode Text="伺服1"/>
</WrapPanel>
<Expander Header="分组1" IsExpanded="True" BorderThickness="0" Background="{StaticResource DefaultBrush}">
<WrapPanel>
<pi:IotServoMode Text="伺服1"/>
<pi:IotServoMode Text="伺服1"/>
</WrapPanel>
</Expander>
</StackPanel>
</hc:TransitioningContentControl>
</Expander>
</Border>
</StackPanel>
</hc:ScrollViewer>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,390 @@
using .ViewModel;
using HandyControl.Controls;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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
{
/// <summary>
/// 设备手动信息
/// </summary>
public partial class DeviceView : UserControlBase
{
DeviceViewModel viewModel = new DeviceViewModel();
public DeviceView()
{
InitializeComponent();
//viewModel.plc = LocalStatic.Plc;
this.DataContext = viewModel;
}
//第一次显示渲染Ui
private void visfir(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
if (!System.IO.File.Exists(LocalFile.PlcDotPath))
{
Growl.Info($"没有找到文档[{LocalFile.PlcDotPath}],请联系管理员。");
return;
}
//读Excel
viewModel.DataReads = ExcelDeviceReadModel.GetDatas();
viewModel.DataWrites = ExcelDeviceWriteModel.GetDatas();
viewModel.DataUrns = ExcelDeviceUrnModel.GetDatas();
viewModel.DataServos = ExcelDeviceServoModel.GetDatas();
//加载页面
ReadUi(viewModel.DataReads);
WriteUi(viewModel.DataWrites);
UrnUi(viewModel.DataUrns);
ServoUi(viewModel.DataServos);
//展示限制
viewModel.IsVisRead = viewModel.DataReads.Any();
viewModel.IsVisWrite = viewModel.DataWrites.Any();
viewModel.IsVisUrn = viewModel.DataUrns.Any();
viewModel.IsVisServo = viewModel.DataServos.Any();
Task.Run(viewModel.WhileRead);
}
private void vis(object sender, DependencyPropertyChangedEventArgs e)
{
if (IsInDesignMode)
return;
viewModel.IsVis = (bool)e.NewValue;
}
#region
void ReadUi(IEnumerable<DeviceReadModel> data)
{
stackPanel1.Children.Clear();
if (data == null || !data.Any())
return;
var moren = data.Where(o => string.IsNullOrWhiteSpace(o.ExcelTag.));
var group = data.Where(o => !string.IsNullOrWhiteSpace(o.ExcelTag.)).GroupBy(o => o.ExcelTag.);
if (moren.Any())
{
WrapPanel wrapPanel = new WrapPanel();
foreach (var item in moren)
{
item.Value = item.ExcelTag..Trim().ToLower() == "bool" ? false : "-";
item.IsExpanded = true;
IotStateInfo iotState = new IotStateInfo();
iotState.DataContext = item;
iotState.SetBinding(IotStateInfo.HeaderProperty, nameof(item.Name));
iotState.SetBinding(IotStateInfo.ValueProperty, nameof(item.Value));
iotState.SetBinding(IotStateInfo.PostfixProperty, $"{nameof(item.ExcelTag)}.{nameof(item.ExcelTag.单位)}");
wrapPanel.Children.Add(iotState);
}
stackPanel1.Children.Add(wrapPanel);
}
if (group.Any())
{
foreach (var item in group)
{
Expander expander = new Expander();
expander.Header = item.Key;
expander.Tag = item;
expander.Expanded += (s, e) =>
{
var c = (IGrouping<string, DeviceReadModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = true;
}
};
expander.Collapsed += (s, e) =>
{
var c = (IGrouping<string, DeviceReadModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = false;
}
};
WrapPanel wrapPanel = new WrapPanel();
foreach (var item2 in item)
{
item2.Value = item2.ExcelTag..Trim().ToLower() == "bool" ? false : "-";
IotStateInfo iotState = new IotStateInfo();
iotState.DataContext = item2;
iotState.SetBinding(IotStateInfo.HeaderProperty, nameof(item2.Name));
iotState.SetBinding(IotStateInfo.ValueProperty, nameof(item2.Value));
iotState.SetBinding(IotStateInfo.PostfixProperty, $"{nameof(item2.ExcelTag)}.{nameof(item2.ExcelTag.单位)}");
wrapPanel.Children.Add(iotState);
}
expander.Content = wrapPanel;
stackPanel1.Children.Add(expander);
}
}
}
void WriteUi(IEnumerable<DeviceWriteModel> data)
{
if (true)
{
stackPanel2.Children.Clear();
if (data == null || !data.Any())
return;
var moren = data.Where(o => string.IsNullOrWhiteSpace(o.ExcelTag.));
var group = data.Where(o => !string.IsNullOrWhiteSpace(o.ExcelTag.)).GroupBy(o => o.ExcelTag.);
if (moren.Any())
{
WrapPanel wrapPanel = new WrapPanel();
foreach (var item in moren)
{
item.Value = item.ExcelTag..Trim().ToLower() == "bool" ? false : "-";
item.IsExpanded = true;
IotStateInfo iotState = new IotStateInfo();
iotState.DataContext = item;
iotState.Click += viewModel.WriteClick;
iotState.PreviewMouseLeftButtonDown += viewModel.LeftDown;
iotState.PreviewMouseLeftButtonUp += viewModel.LeftUp;
iotState.SetBinding(IotStateInfo.HeaderProperty, nameof(item.Name));
iotState.SetBinding(IotStateInfo.ValueProperty, nameof(item.Value));
iotState.SetBinding(IotStateInfo.PostfixProperty, $"{nameof(item.ExcelTag)}.{nameof(item.ExcelTag.单位)}");
wrapPanel.Children.Add(iotState);
}
stackPanel2.Children.Add(wrapPanel);
}
if (group.Any())
{
foreach (var item in group)
{
Expander expander = new Expander();
expander.Header = item.Key;
expander.Tag = item;
expander.Expanded += (s, e) =>
{
var c = (IGrouping<string, DeviceWriteModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = true;
}
};
expander.Collapsed += (s, e) =>
{
var c = (IGrouping<string, DeviceWriteModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = false;
}
};
WrapPanel wrapPanel = new WrapPanel();
foreach (var item2 in item)
{
item2.Value = item2.ExcelTag..Trim().ToLower() == "bool" ? false : "-";
IotStateInfo iotState = new IotStateInfo();
iotState.DataContext = item2;
iotState.Click += viewModel.WriteClick;
iotState.PreviewMouseLeftButtonDown += viewModel.LeftDown;
iotState.PreviewMouseLeftButtonUp += viewModel.LeftUp;
iotState.SetBinding(IotStateInfo.HeaderProperty, nameof(item2.Name));
iotState.SetBinding(IotStateInfo.ValueProperty, nameof(item2.Value));
iotState.SetBinding(IotStateInfo.PostfixProperty, $"{nameof(item2.ExcelTag)}.{nameof(item2.ExcelTag.单位)}");
wrapPanel.Children.Add(iotState);
}
expander.Content = wrapPanel;
stackPanel2.Children.Add(expander);
}
}
}
}
void UrnUi(IEnumerable<DeviceUrnModel> data)
{
if (true)
{
stackPanel3.Children.Clear();
if (data == null || !data.Any())
return;
var moren = data.Where(o => string.IsNullOrWhiteSpace(o.ExcelTag.));
var group = data.Where(o => !string.IsNullOrWhiteSpace(o.ExcelTag.)).GroupBy(o => o.ExcelTag.);
if (moren.Any())
{
WrapPanel wrapPanel = new WrapPanel();
foreach (var item in moren)
{
item.IsExpanded = true;
IotUrnMode iotUrn = new IotUrnMode();
iotUrn.DataContext = item;
iotUrn.SetBinding(IotUrnMode.TextProperty, nameof(item.Name));
iotUrn.SetBinding(IotUrnMode.IsButBadge1Property, nameof(item.IsGoTo));
iotUrn.SetBinding(IotUrnMode.IsButBadge2Property, nameof(item.IsRetTo));
iotUrn.Button1.Click += viewModel.Button1_Click;
iotUrn.Button1.PreviewMouseLeftButtonDown += viewModel.But1ClickDown;
iotUrn.Button1.PreviewMouseLeftButtonUp += viewModel.But1ClickUp;
iotUrn.Button2.Click += viewModel.Button2_Click;
iotUrn.Button2.PreviewMouseLeftButtonDown += viewModel.But2ClickDown;
iotUrn.Button2.PreviewMouseLeftButtonUp += viewModel.But2ClickUp;
wrapPanel.Children.Add(iotUrn);
}
stackPanel3.Children.Add(wrapPanel);
}
if (group.Any())
{
foreach (var item in group)
{
Expander expander = new Expander();
expander.Header = item.Key;
expander.Tag = item;
expander.Expanded += (s, e) =>
{
var c = (IGrouping<string, DeviceUrnModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = true;
}
};
expander.Collapsed += (s, e) =>
{
var c = (IGrouping<string, DeviceUrnModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = false;
}
};
WrapPanel wrapPanel = new WrapPanel();
foreach (var item2 in item)
{
IotUrnMode iotUrn = new IotUrnMode();
iotUrn.DataContext = item2;
iotUrn.SetBinding(IotUrnMode.TextProperty, nameof(item2.Name));
iotUrn.SetBinding(IotUrnMode.IsButBadge1Property, nameof(item2.IsGoTo));
iotUrn.SetBinding(IotUrnMode.IsButBadge2Property, nameof(item2.IsRetTo));
iotUrn.Button1.Click += viewModel.Button1_Click;
iotUrn.Button1.PreviewMouseLeftButtonDown += viewModel.But1ClickDown;
iotUrn.Button1.PreviewMouseLeftButtonUp += viewModel.But1ClickUp;
iotUrn.Button2.Click += viewModel.Button2_Click;
iotUrn.Button2.PreviewMouseLeftButtonDown += viewModel.But2ClickDown;
iotUrn.Button2.PreviewMouseLeftButtonUp += viewModel.But2ClickUp;
wrapPanel.Children.Add(iotUrn);
}
expander.Content = wrapPanel;
stackPanel3.Children.Add(expander);
}
}
}
}
void ServoUi(IEnumerable<DeviceServoModel> data)
{
if (true)
{
stackPanel4.Children.Clear();
if (data == null || !data.Any())
return;
var moren = data.Where(o => string.IsNullOrWhiteSpace(o.ExcelTag.));
var group = data.Where(o => !string.IsNullOrWhiteSpace(o.ExcelTag.)).GroupBy(o => o.ExcelTag.);
if (moren.Any())
{
WrapPanel wrapPanel = new WrapPanel();
foreach (var item in moren)
{
item.IsExpanded = true;
IotServoMode iotServo = new IotServoMode();
iotServo.DataContext = item;
iotServo.SetBinding(IotServoMode.TextProperty, nameof(item.Name));
iotServo.SetBinding(IotServoMode.Speed1Property, nameof(item.JogSpeed));
iotServo.SetBinding(IotServoMode.Speed2Property, nameof(item.AutoSpeed));
iotServo.SetBinding(IotServoMode.LocationProperty, nameof(item.Location));
iotServo.SetBinding(IotServoMode.IsVis1Property, new Binding(nameof(item.IsJog)) { Mode = BindingMode.TwoWay });
iotServo.SetBinding(IotServoMode.IsFoldProperty, new Binding(nameof(item.IsFold)) { Mode = BindingMode.TwoWay });
iotServo.LocationChange += viewModel.LocationChange;
iotServo.SpeedChange += viewModel.SpeedChange;
wrapPanel.Children.Add(iotServo);
}
stackPanel4.Children.Add(wrapPanel);
}
if (group.Any())
{
foreach (var item in group)
{
Expander expander = new Expander();
expander.Header = item.Key;
expander.Tag = item;
expander.Expanded += (s, e) =>
{
var c = (IGrouping<string, DeviceServoModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = true;
}
};
expander.Collapsed += (s, e) =>
{
var c = (IGrouping<string, DeviceServoModel>)((Expander)s).Tag;
foreach (var item in c)
{
item.IsExpanded = false;
}
};
WrapPanel wrapPanel = new WrapPanel();
foreach (var item2 in item)
{
IotServoMode iotServo = new IotServoMode();
iotServo.DataContext = item2;
iotServo.SetBinding(IotServoMode.TextProperty, nameof(item2.Name));
iotServo.SetBinding(IotServoMode.Speed1Property, nameof(item2.JogSpeed));
iotServo.SetBinding(IotServoMode.Speed2Property, nameof(item2.AutoSpeed));
iotServo.SetBinding(IotServoMode.LocationProperty, nameof(item2.Location));
iotServo.SetBinding(IotServoMode.IsVis1Property, new Binding(nameof(item2.IsJog)) { Mode = BindingMode.TwoWay });
iotServo.SetBinding(IotServoMode.IsFoldProperty, new Binding(nameof(item2.IsFold)) { Mode = BindingMode.TwoWay });
iotServo.LocationChange += viewModel.LocationChange;
iotServo.SpeedChange += viewModel.SpeedChange;
wrapPanel.Children.Add(iotServo);
}
expander.Content = wrapPanel;
stackPanel4.Children.Add(expander);
}
}
}
}
#endregion
}
}

View File

@ -0,0 +1,26 @@
<UserControl xmlns:hc="https://handyorg.github.io/handycontrol" x:Class="货架标准上位机.ImageListenerView"
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:货架标准上位机"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<Border Style="{StaticResource BorderRegion}" BorderThickness="1" Background="{DynamicResource SecondaryRegionBrush}" Padding="0" ClipToBounds="True">
<Border.Resources>
<TransformGroup x:Key="Imageview">
<ScaleTransform ScaleX="{Binding ScaleXY}" ScaleY="{Binding ScaleXY}" CenterX="{Binding CenterX}" CenterY="{Binding CenterY}"/>
<TranslateTransform X="{Binding TranslateX}" Y="{Binding TranslateY}"/>
</TransformGroup>
</Border.Resources>
<Image x:Name="img" RenderTransform="{StaticResource Imageview}" Source="{Binding ImageSource}" PreviewMouseLeftButtonDown="previewMouseDoubleClick">
<Image.ContextMenu>
<ContextMenu>
<MenuItem Header="预览图片" Click="ckyt"></MenuItem>
<MenuItem Header="适应窗口" Click="syck"></MenuItem>
<MenuItem Header="原图大小" Click="ytdx"></MenuItem>
</ContextMenu>
</Image.ContextMenu>
</Image>
</Border>
</UserControl>

View File

@ -0,0 +1,236 @@
using .ViewModel;
using HandyControl.Controls;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
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;
using Path = System.IO.Path;
namespace
{
/// <summary>
/// 图像监听。可针对文件夹文件进行监听显示
/// </summary>
public partial class ImageListenerView : UserControl
{
ImageListenerViewModel viewModel = new ImageListenerViewModel();
public FileSystemWatcher FileWatcher = new FileSystemWatcher();
/// <summary>
/// 当前加载的图像路径
/// </summary>
public string FullPath { get; private set; }
public ImageListenerView()
{
InitializeComponent();
this.DataContext = viewModel;
//拖动
img.MouseLeftButtonDown += Img_MouseLeftButtonDown;
img.MouseLeftButtonUp += Img_MouseLeftButtonUp;
img.MouseMove += Img_MouseMove;
//鼠标滚轮
this.MouseWheel += Img_MouseWheel;
//监听
FileWatcher.Changed += FileSystemWatcher;
}
/// <summary>
/// 如果在选项卡中是否自动切换到当前变化的项来。默认为false
/// </summary>
public bool IsAutoActiveTabItem
{
get { return (bool)GetValue(IsAutoActiveTabItemProperty); }
set { SetValue(IsAutoActiveTabItemProperty, value); }
}
public static readonly DependencyProperty IsAutoActiveTabItemProperty =
DependencyProperty.Register("IsAutoActiveTabItem", typeof(bool), typeof(ImageListenerView), new PropertyMetadata(false));
/// <summary>
/// 开始监听
/// </summary>
/// <param name="path">监听的目录或文件</param>
/// <param name="filter">对目录的筛选值(文件无效)</param>
public void StartListener(string path, string filter = "*.jpg")
{
FileWatcher.EnableRaisingEvents = false;
path = (path ?? "").Trim();
if (string.IsNullOrEmpty(path))
return;
if (Path.HasExtension(path))
{
var ext = Path.GetFileName(path);
if (!string.IsNullOrEmpty(ext))
filter = ext;
path = Path.GetDirectoryName(path);
}
Directory.CreateDirectory(path);
FileWatcher.Path = path;
FileWatcher.Filter = filter;
FileWatcher.NotifyFilter = NotifyFilters.Size | NotifyFilters.LastWrite | NotifyFilters.CreationTime | NotifyFilters.LastAccess;
FileWatcher.IncludeSubdirectories = false;
FileWatcher.EnableRaisingEvents = true;
}
/// <summary>
/// 停止监听
/// </summary>
public void StopListener()
{
FileWatcher.EnableRaisingEvents = false;
}
string FullPathTop = string.Empty;
private void FileSystemWatcher(object sender, FileSystemEventArgs e)
{
if (FullPathTop == e.FullPath)
return;
FullPathTop = e.FullPath;
Thread.Sleep(400);//确保大图片的成功
this.Dispatcher.BeginInvoke(new Action(() =>
{
try
{
viewModel.ImageSource = null;
viewModel.ImageSource = BitmapFrame.Create(new Uri(e.FullPath), BitmapCreateOptions.IgnoreImageCache, BitmapCacheOption.OnLoad);
viewModel.ImageHeight = viewModel.ImageSource.Height;
viewModel.ImageWidth = viewModel.ImageSource.Width;
FullPath = e.FullPath;
viewModel.ImgAutoSize();
if (IsAutoActiveTabItem)
{
if (this.Parent is System.Windows.Controls.TabItem tabItem)
{
if (tabItem.Parent is System.Windows.Controls.TabControl tabControl)
{
tabControl.SelectedItem = tabItem;
}
}
}
}
catch (Exception)
{
}
finally
{
FullPathTop = string.Empty;
}
}));
}
#region
private bool mouseLeftDown = false;
private Point mouseLeftXY;
private void Img_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
mouseLeftDown = true;
mouseLeftXY = e.GetPosition((FrameworkElement)this);
}
private void Img_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
mouseLeftDown = false;
}
private void Img_MouseMove(object sender, MouseEventArgs e)
{
if (mouseLeftDown && e.LeftButton == MouseButtonState.Pressed)
{
var position = e.GetPosition((FrameworkElement)this);
viewModel.TranslateX -= mouseLeftXY.X - position.X;
viewModel.TranslateY -= mouseLeftXY.Y - position.Y;
mouseLeftXY = position;
}
}
private void Img_MouseWheel(object sender, MouseWheelEventArgs e)
{
var delta = e.Delta * 0.001;
var scaleXY = viewModel.ScaleXY + delta;
if (scaleXY < 0.05 || scaleXY > 5)
return;
viewModel.CenterX = img.ActualWidth / 2;
viewModel.CenterY = img.ActualHeight / 2;
//校正
var point = Mouse.GetPosition(img);
//图片外
if (point.X < 0 || point.Y < 0 || point.X > img.ActualWidth || point.Y > img.ActualHeight)
{
//不需要校正
}
else
{
var lx = img.ActualWidth / 2.00 - point.X;
var ly = img.ActualHeight / 2.00 - point.Y;
var pyx = lx * scaleXY - lx * viewModel.ScaleXY;
var pyy = ly * scaleXY - ly * viewModel.ScaleXY;
viewModel.TranslateX += pyx;
viewModel.TranslateY += pyy;
}
viewModel.ScaleXY = scaleXY;
}
#endregion
#region
DateTime dtsj = DateTime.Now;
private void previewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if ((DateTime.Now - dtsj).TotalMilliseconds <= 300)
{
if (e.ChangedButton == MouseButton.Left && !string.IsNullOrEmpty(FullPath))
if (File.Exists(FullPath))
new ImageBrowser(new Uri(FullPath)).Show();
}
dtsj = DateTime.Now;
}
private void ckyt(object sender, RoutedEventArgs e)
{
if (File.Exists(FullPath))
new ImageBrowser(new Uri(FullPath)).Show();
}
private void syck(object sender, RoutedEventArgs e)
{
viewModel.ImgAutoSize();
}
private void ytdx(object sender, RoutedEventArgs e)
{
viewModel.ScaleXY = viewModel.ImageWidth / this.ActualWidth;
viewModel.CenterX = img.ActualWidth / 2;
viewModel.CenterY = img.ActualHeight / 2;
viewModel.TranslateX = 0;
viewModel.TranslateY = 0;
}
#endregion
}
}

View File

@ -0,0 +1,35 @@
<pi:UserControlBase x:Class="货架标准上位机.OutputStatChartView"
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:货架标准上位机"
xmlns:pi="https://github.com/ping9719/wpfex"
xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="loadFir">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Text="{Binding Title,FallbackValue=当日生产统计}" HorizontalAlignment="Center" VerticalAlignment="Center" Style="{StaticResource TextBlockDefaultSecLight}"></TextBlock>
<StackPanel Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding IsZero,Converter={StaticResource Boolean2VisibilityConverter}}">
<TextBlock FontSize="40" FontFamily="{StaticResource IconFont}" Text="&#xeb91;">
<TextBlock.Foreground>
<LinearGradientBrush EndPoint="0.5,1">
<GradientStop Color="White"/>
<GradientStop Color="Gray" Offset="1"/>
</LinearGradientBrush>
</TextBlock.Foreground>
</TextBlock>
<TextBlock Foreground="Gray" HorizontalAlignment="Center">无数据</TextBlock>
</StackPanel>
<lvc:PieChart Grid.Row="1" LegendLocation="Bottom">
<lvc:PieChart.Series>
<lvc:PieSeries Title="合格" Fill="LimeGreen" Values="{Binding Values1}" DataLabels="True" LabelPoint="{Binding PointLabel}"/>
<lvc:PieSeries Title="不合格" Fill="OrangeRed" Values="{Binding Values2}" DataLabels="True" LabelPoint="{Binding PointLabel}"/>
</lvc:PieChart.Series>
</lvc:PieChart>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,44 @@
using LiveCharts.Wpf;
using LiveCharts;
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;
using .ViewModel;
using System.Runtime.InteropServices.ComTypes;
using Ping9719.WpfEx;
namespace
{
/// <summary>
/// 日产量统计扇形图
/// </summary>
public partial class OutputStatChartView : UserControlBase
{
public static OutputStatChartViewModel viewModel = new OutputStatChartViewModel();
public OutputStatChartView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void loadFir(object sender, EventArgs e)
{
if (this.IsInDesignMode)
return;
viewModel.UpdataData();
}
}
}

View File

@ -0,0 +1,52 @@
<pi:UserControlBase x:Class="货架标准上位机.RoleView"
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:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="loadFirst">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!--条件区-->
<Grid Margin="5,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="1">
<hc:TextBox Text="{Binding Info1}" Margin="5" Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="角色名称" hc:InfoElement.Placeholder="模糊匹配" VerticalAlignment="Center"/>
</UniformGrid>
<hc:UniformSpacingPanel Grid.Column="1" Spacing="5">
<Button Content="新增" Command="{Binding AddCommand}" Style="{StaticResource ButtonSuccess}" Width="70" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.权限},Converter={StaticResource AuthVisConverter}}"></Button>
<Button Content="查询" Command="{Binding UpdateListCommand}" Style="{StaticResource ButtonPrimary}" Width="70"></Button>
</hc:UniformSpacingPanel>
</Grid>
<!--内容区-->
<Border Grid.Row="1" Grid.Column="0" Style="{StaticResource BorderRegion}" BorderThickness="1" Background="#EEEEEE" Margin="3,0,3,3" Padding="0" >
<DataGrid RowHeaderWidth="50" HeadersVisibility="All" AutoGenerateColumns="False" ItemsSource="{Binding DataList}" hc:DataGridAttach.CanUnselectAllWithBlankArea="False" hc:DataGridAttach.ShowSelectAllButton="False" hc:DataGridAttach.ShowRowNumber="True">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Width="3*" Binding="{Binding Name}" Header="角色名称" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="7*" Binding="{Binding AuthNames,Converter={StaticResource List2StrConverter}}" Header="认证模块" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Time,StringFormat=yyyy-MM-dd HH:mm}" Header="创建时间" CanUserSort="False"/>
<DataGridTemplateColumn CanUserResize="False" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" IsEnabled="{Binding IsAdmin,Converter={StaticResource Boolean2BooleanReConverter}}">
<Button Style="{StaticResource ButtonInfo}" Margin="0,0,5,0" IsEnabled="True" Content="查看" Width="60" Command="{Binding DataContext.SeeCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }"/>
<Button Style="{StaticResource ButtonWarning}" Margin="0,0,5,0" IsEnabled="True" Content="修改" Width="60" Command="{Binding DataContext.UpdateCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.权限},Converter={StaticResource AuthVisConverter}}"/>
<Button Style="{StaticResource ButtonDanger}" Margin="0,0,0,0" IsEnabled="True" Content="删除" Width="60" Command="{Binding DataContext.DelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.权限},Converter={StaticResource AuthVisConverter}}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,42 @@
using .ViewModel;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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
{
/// <summary>
/// 角色
/// </summary>
public partial class RoleView : UserControlBase
{
RoleViewModel viewModel = new RoleViewModel();
public RoleView()
{
InitializeComponent();
this.DataContext = viewModel;
}
//第一次加载
private void loadFirst(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
viewModel.UpdateList();
}
}
}

View File

@ -0,0 +1,20 @@
<UserControl x:Class="货架标准上位机.Views.Controls.ScannerDisplayControl"
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:货架标准上位机.Views.Controls"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="150">
<Border Name="border" Grid.Column="0" Margin="5" BorderThickness="1" Background="LightSkyBlue" BorderBrush="Black" CornerRadius="3">
<StackPanel Margin="3">
<TextBlock HorizontalAlignment="Center">串口号</TextBlock>
<TextBlock Name="txtCom" HorizontalAlignment="Center"></TextBlock>
<TextBlock HorizontalAlignment="Center">当前入库货架</TextBlock>
<TextBlock Name="txtCurrentShelf" HorizontalAlignment="Center"></TextBlock>
<TextBlock HorizontalAlignment="Center">当前入库物料</TextBlock>
<TextBlock Name="txtCurrentMat" HorizontalAlignment="Center"></TextBlock>
</StackPanel>
</Border>
</UserControl>

View File

@ -0,0 +1,40 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
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 .Views.Controls
{
/// <summary>
/// ShelfStatusControl.xaml 的交互逻辑
/// </summary>
public partial class ScannerDisplayControl : UserControl
{
public ScannerDisplayControl(string COM)
{
InitializeComponent();
txtCom.Text = COM;
}
public void RefreshValues(string shelfCode, string matSn)
{
Dispatcher.BeginInvoke(new Action(() =>
{
txtCurrentShelf.Text = shelfCode;
txtCurrentMat.Text = matSn;
}));
}
}
}

View File

@ -0,0 +1,17 @@
<UserControl x:Class="货架标准上位机.Views.Controls.ShelfStatusControl"
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:货架标准上位机.Views.Controls"
mc:Ignorable="d"
d:DesignHeight="200" d:DesignWidth="150">
<Border Name="border" Grid.Column="0" Margin="5" BorderThickness="1" Background="LightSkyBlue" BorderBrush="Black" CornerRadius="3">
<StackPanel Margin="3">
<TextBlock Name="txtShelfCode" HorizontalAlignment="Center"></TextBlock>
<TextBlock Name="txtCurrentMode" HorizontalAlignment="Center"></TextBlock>
<TextBlock Name="txtGroupName" HorizontalAlignment="Center"></TextBlock>
</StackPanel>
</Border>
</UserControl>

View File

@ -0,0 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
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 .Views.Controls
{
/// <summary>
/// ShelfStatusControl.xaml 的交互逻辑
/// </summary>
public partial class ShelfStatusControl : UserControl
{
public ShelfStatusControl(string shelfCode, int currentMode, string groupName)
{
InitializeComponent();
txtShelfCode.Text = shelfCode;
txtGroupName.Text = groupName;
//待机模式 = 0,
//入库模式 = 1,
//出库模式 = 2,
//盘点模式 = 3
switch (currentMode)
{
case 0:
txtCurrentMode.Text = "待机模式";
border.Background = Brushes.White;
break;
case 1:
txtCurrentMode.Text = "入库模式";
border.Background = Brushes.LightSkyBlue;
break;
case 2:
txtCurrentMode.Text = "出库模式";
border.Background = Brushes.Green;
break;
case 3:
txtCurrentMode.Text = "盘点模式";
border.Background = Brushes.Pink;
break;
default:
txtCurrentMode.Text = "未知";
border.Background = Brushes.White;
break;
}
}
}
}

View File

@ -0,0 +1,16 @@
<Border x:Class="货架标准上位机.Views.Controls.TextDialog"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:hc="https://handyorg.github.io/handycontrol"
CornerRadius="10"
Width="300"
Height="186"
Background="{DynamicResource RegionBrush}">
<hc:SimplePanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
<hc:LoadingCircle Height="25"/>
<TextBlock Style="{StaticResource TextBlockLargeBold}" Text="请稍候..."/>
</StackPanel>
<Button Width="22" Height="22" Command="hc:ControlCommands.Close" Style="{StaticResource ButtonIcon}" Foreground="{DynamicResource PrimaryBrush}" hc:IconElement.Geometry="{StaticResource ErrorGeometry}" Padding="0" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,4,4,0"/>
</hc:SimplePanel>
</Border>

View File

@ -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 .Views.Controls
{
/// <summary>
/// TextDialog.xaml 的交互逻辑
/// </summary>
public partial class TextDialog
{
public TextDialog()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,52 @@
<pi:UserControlBase x:Class="货架标准上位机.UserView"
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:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="450" d:DesignWidth="800" LoadedVisibleFirst="loadFirst">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<!--条件区-->
<Grid Margin="5,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<UniformGrid Grid.Column="0" Columns="1">
<hc:TextBox Text="{Binding Info1}" Margin="5" Style="{StaticResource TextBoxExtend}" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="用户名称" hc:InfoElement.Placeholder="模糊匹配" VerticalAlignment="Center"/>
</UniformGrid>
<hc:UniformSpacingPanel Grid.Column="1" Spacing="5">
<Button Content="新增" Command="{Binding AddCommand}" Style="{StaticResource ButtonSuccess}" Width="70" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.权限},Converter={StaticResource AuthVisConverter}}"></Button>
<Button Content="查询" Command="{Binding UpdateListCommand}" Style="{StaticResource ButtonPrimary}" Width="70"></Button>
</hc:UniformSpacingPanel>
</Grid>
<!--内容区-->
<Border Grid.Row="1" Grid.Column="0" Style="{StaticResource BorderRegion}" BorderThickness="1" Background="#EEEEEE" Margin="3,0,3,3" Padding="0" >
<DataGrid RowHeaderWidth="50" HeadersVisibility="All" AutoGenerateColumns="False" ItemsSource="{Binding DataList}" hc:DataGridAttach.CanUnselectAllWithBlankArea="False" hc:DataGridAttach.ShowSelectAllButton="False" hc:DataGridAttach.ShowRowNumber="True">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Width="5*" Binding="{Binding LoginName}" Header="用户名称" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="5*" Binding="{Binding RoleNames,Converter={StaticResource List2StrConverter}}" Header="角色" CanUserSort="False"/>
<DataGridTextColumn IsReadOnly="True" Width="200" Binding="{Binding Time,StringFormat=yyyy-MM-dd HH:mm}" Header="创建时间" CanUserSort="False"/>
<DataGridTemplateColumn CanUserResize="False" Width="auto">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" IsEnabled="{Binding IsAdmin,Converter={StaticResource Boolean2BooleanReConverter}}">
<Button Style="{StaticResource ButtonInfo}" Margin="0,0,5,0" IsEnabled="True" Content="查看" Width="60" Command="{Binding DataContext.SeeCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }"/>
<Button Style="{StaticResource ButtonWarning}" Margin="0,0,5,0" IsEnabled="True" Content="修改" Width="60" Command="{Binding DataContext.UpdateCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.权限},Converter={StaticResource AuthVisConverter}}"/>
<Button Style="{StaticResource ButtonDanger}" Margin="0,0,0,0" IsEnabled="True" Content="删除" Width="60" Command="{Binding DataContext.DelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=DataGrid}}" CommandParameter="{Binding }" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.权限},Converter={StaticResource AuthVisConverter}}"/>
</StackPanel>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,42 @@
using .ViewModel;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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
{
/// <summary>
/// 用户
/// </summary>
public partial class UserView : UserControlBase
{
UserViewModel viewModel = new UserViewModel();
public UserView()
{
InitializeComponent();
this.DataContext = viewModel;
}
//第一次加载
private void loadFirst(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
viewModel.UpdateList();
}
}
}

View File

@ -0,0 +1,62 @@
<pi:UserControlBase x:Class="货架标准上位机.HomeView"
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:货架标准上位机"
xmlns:controls="clr-namespace:货架标准上位机.Views.Controls"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="737" d:DesignWidth="1192" LoadedVisibleFirst="loadFir">
<Border Margin="0" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="7*"/>
<RowDefinition Height="3*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<!--内容区-->
<!--<Grid Grid.Row="0" Margin="5,5,5,0">-->
<!--货架状态显示区-->
<Border Grid.Row="0" Margin="5,5,5,0" BorderThickness="1" Background="White" BorderBrush="DodgerBlue" CornerRadius="3">
<hc:ScrollViewer IsInertiaEnabled="True" hc:ScrollViewerAttach.AutoHide="False">
<WrapPanel Name="shelfsWrapPanel">
</WrapPanel>
</hc:ScrollViewer>
</Border>
<!--</Grid>-->
<!--消息区-->
<Border Grid.Row="1" Margin="5,5,5,5" BorderThickness="1" Background="White" BorderBrush="DodgerBlue" CornerRadius="3">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*"/>
<ColumnDefinition Width="6*"/>
</Grid.ColumnDefinitions>
<!--报警-->
<GroupBox Grid.Column="0" Background="White" Padding="0" Style="{StaticResource GroupBoxTab}" Margin="5,5,5,5">
<GroupBox.Header>
<Grid Width="{Binding ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}}">
<TextBlock Margin="5,0" HorizontalAlignment="Left" VerticalAlignment="Center">报警</TextBlock>
<Button HorizontalAlignment="Right" Height="25" Margin="10,0" Padding="10,0" FontFamily="{StaticResource IconFont}" Command="{Binding ClearTextErrCommand}">&#xeb45; 清除</Button>
</Grid>
</GroupBox.Header>
<TextBox Style="{StaticResource TextBoxExtend.Multi}" IsReadOnly="True" Margin="-1" Text="{Binding TextErr}" Foreground="Tomato" hc:InfoElement.Placeholder="没有报警信息"></TextBox>
</GroupBox>
<!--日志-->
<GroupBox Grid.Column="1" Background="White" Padding="0" Style="{StaticResource GroupBoxTab}" Margin="0,5,5,5" >
<GroupBox.Header>
<Grid Width="{Binding ActualWidth,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type GroupBox}}}">
<TextBlock Margin="5,0" HorizontalAlignment="Left" VerticalAlignment="Center">日志</TextBlock>
<Button HorizontalAlignment="Right" Height="25" Margin="10,0" Padding="10,0" FontFamily="{StaticResource IconFont}" Command="{Binding ClearTextInfoCommand}">&#xe62c; 清空</Button>
</Grid>
</GroupBox.Header>
<pi:TextBoxLog Style="{StaticResource TextBoxExtend.Multi}" Margin="-1" hc:InfoElement.Placeholder="没有日志信息" Foreground="CornflowerBlue"></pi:TextBoxLog>
</GroupBox>
</Grid>
</Border>
<Button Grid.Row="2" Command="{Binding AddUserControlCommand}" Content="点击添加控件"></Button>
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,44 @@
using .ViewModel;
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
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;
using .Views.Controls;
namespace
{
/// <summary>
/// 主页
/// </summary>
public partial class HomeView : UserControlBase
{
HomeViewModel viewModel = new HomeViewModel();
public HomeView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void loadFir(object sender, EventArgs e)
{
viewModel.wrapPanel = shelfsWrapPanel;
if (this.IsInDesignMode)
return;
viewModel.LoadTask();
}
}
}

View File

@ -0,0 +1,140 @@
<pi:UserControlBase
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.InInventoryView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
d:DesignHeight="737" d:DesignWidth="1192" LoadedVisible="UserControlBase_LoadedVisible" Loaded="UserControlBase_Loaded" LoadedVisibleFirst="UserControlBase_LoadedVisibleFirst">
<Border Margin="0" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="10*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="0" Background="AliceBlue" CornerRadius="0" Padding="0" MouseUp="Border_MouseUp">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.5*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Style="{StaticResource ButtonDanger}" Margin="10" hc:BorderElement.CornerRadius="15"
MinHeight="40" FontSize="20" Content="&#xe61b;结束入库" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnEndCommand}">
</Button>
</StackPanel>
</Grid>
</Border>
<Border Grid.Row="1" Margin="1" Background="AliceBlue" Padding="0">
<WrapPanel Name="scannersWrapPanel">
</WrapPanel>
<!--<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
<RowDefinition Height="1.2*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0"
Text="最小包装条码:" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBlock Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="3"
Text="{Binding MatSN}" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Left"
></TextBlock>
<TextBlock Grid.Row="1" Grid.Column="0"
Text="物料编码:" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBlock Grid.Row="1" Grid.Column="1"
Text="{Binding MatCode}" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Left"
></TextBlock>
<TextBlock Grid.Row="2" Grid.Column="0"
Text="物料名称:" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBlock Grid.Row="2" Grid.Column="1"
Text="{Binding MatName}" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Left"
></TextBlock>
<TextBlock Grid.Row="3" Grid.Column="0"
Text="物料规格:" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBlock Grid.Row="3" Grid.Column="1" Grid.ColumnSpan="3"
Text="{Binding MatSpec}" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Left"
>
</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="0"
Text="物料批次:" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Right">
</TextBlock>
<TextBlock Grid.Row="4" Grid.Column="1"
Text="{Binding MatBatch}" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Left">
</TextBlock>
<TextBlock Grid.Row="5" Grid.Column="0"
Text="物料数量:" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBlock Grid.Row="5" Grid.Column="1"
Text="{Binding MatQty}" FontSize="20"
VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
<TextBlock Grid.Row="4" Grid.Column="2"
Text="当前入库货架:" FontSize="20" FontWeight="Bold"
VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBlock Grid.Row="4" Grid.Column="3" Grid.RowSpan="2"
Text="{Binding ShelfCode}" FontSize="5" FontWeight="Bold"
VerticalAlignment="Center" HorizontalAlignment="Left">
</TextBlock>
</Grid>
<DataGrid Grid.Row="1" SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="39" Margin="5"
AutoGenerateColumns="False" FontSize="18" CanUserSortColumns="False">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料名称" Binding="{Binding MatName}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="数量" Binding="{Binding MatQty}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="入库位置" Binding="{Binding StoreCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="入库人" Binding="{Binding InstoreUser}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="入库时间" Binding="{Binding InstoreTime ,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="最小包装条码" Binding="{Binding MatSN}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>-->
</Border>
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,69 @@
using Ping9719.WpfEx;
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.Shapes;
using .ViewModel;
using .Views.Controls;
namespace
{
/// <summary>
/// InInventoryView.xaml 的交互逻辑
/// </summary>
public partial class InInventoryView : UserControlBase
{
public InInventoryViewModel viewModel = new InInventoryViewModel();
public InInventoryView()
{
InitializeComponent();
this.DataContext = viewModel;
var scanners = ScannerManager.Scanners.Select(t => t).ToList();
scanners.ForEach(t =>
{
var control = new ScannerDisplayControl(t.COM);
t.ScannerDisplayControl = control;
scannersWrapPanel.Children.Add(control);
});
}
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
DataGrid datagrid = sender as DataGrid;
datagrid.UnselectAllCells();
}
private void UserControlBase_Loaded(object sender, RoutedEventArgs e)
{
}
private void Border_MouseUp(object sender, MouseButtonEventArgs e)
{
}
private void UserControlBase_LoadedVisibleFirst(object sender, EventArgs e)
{
if (IsInDesignMode)
return;
//viewModel.NewMethod();
}
private void UserControlBase_LoadedVisible(object sender, EventArgs e)
{
}
}
}

View File

@ -0,0 +1,185 @@
<pi:UserControlBase
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.InterfaceRecordView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
d:DesignHeight="737" d:DesignWidth="1192" LoadedVisibleFirst="LoadedVisible">
<Border Margin="0" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1.5*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="3" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.6*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
<ColumnDefinition Width="0.7*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Left"
Text="接口地址:" FontSize="18" ></TextBlock>
<TextBox Grid.Row="0" Grid.Column="1" Text="{Binding RequestUrl}"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120"></TextBox>
<TextBlock Grid.Row="0" Grid.Column="2" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="请求参数:" FontSize="18" ></TextBlock>
<TextBox Grid.Row="0" Grid.Column="3" Text="{Binding RequestBody}"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120"></TextBox>
<TextBlock Grid.Row="2" Grid.Column="0" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Left"
Text="调用类型:" FontSize="18" ></TextBlock>
<ComboBox Grid.Row="2" Grid.Column="1"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120" SelectedIndex="0" Text="{Binding RequestType}">
<ComboBoxItem Content="调用"></ComboBoxItem>
<ComboBoxItem Content="被调用"></ComboBoxItem>
</ComboBox>
<StackPanel Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="6" Orientation="Horizontal"
VerticalAlignment="Center" HorizontalAlignment="Left" >
<TextBlock Grid.Row="1" Grid.Column="0" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="时间:" FontSize="18" ></TextBlock>
<ComboBox Grid.Row="1" Grid.Column="1"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120"
ItemsSource="{Binding TimeTypes}"
SelectedValue="{Binding TimeType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
SelectedIndex="0"
>
</ComboBox>
<TextBlock FontSize="18" VerticalAlignment="Center" Text=" "></TextBlock>
<hc:DateTimePicker FontSize="18" Height="24" MinWidth="180" Style="{StaticResource DateTimePickerExtend}" SelectedDateTime="{Binding StartTime}"></hc:DateTimePicker>
<TextBlock FontSize="18" VerticalAlignment="Center" Text=" 到 "></TextBlock>
<hc:DateTimePicker FontSize="18" Height="24" MinWidth="180" Style="{StaticResource DateTimePickerExtend}" SelectedDateTime="{Binding EndTime}"></hc:DateTimePicker>
</StackPanel>
<Button Style="{StaticResource ButtonSuccess}"
Command="{Binding BtnSearchCommand}"
hc:BorderElement.CornerRadius="5"
Grid.Column="5" Grid.Row="0" MinHeight="36" FontSize="16" Content="&#xe8b9; 搜索" FontFamily="{StaticResource IconFont}" Margin="0,0,0,-5" >
</Button>
<Button Style="{StaticResource ButtonWarning}"
Command="{Binding BtnResetCommand}"
hc:BorderElement.CornerRadius="5"
Grid.Column="6" Grid.Row="0" MinHeight="36" FontSize="16" Content="&#xe652; 重置" FontFamily="{StaticResource IconFont}" Margin="0,0,0,-5" >
</Button>
</Grid>
</Border>
<Border Grid.Row="1" Margin="3" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="0.7*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button MinHeight="40" FontSize="18" Margin="5" Command="{Binding BtnExportCommand}"
Content="&#xe866; 导 出" FontFamily="{StaticResource IconFont}"
Style="{StaticResource ButtonWarning}" Background="DarkOrange">
</Button>
</StackPanel>
<DataGrid Grid.Row="1"
SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="39"
AutoGenerateColumns="False"
FontSize="13">
<DataGrid.Columns>
<DataGridTextColumn Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn Header="接口地址" Binding="{Binding RequestUrl}"></DataGridTextColumn>
<DataGridTextColumn Header="设备IP" Binding="{Binding DeviceIp}"></DataGridTextColumn>
<DataGridTextColumn Header="请求参数" Binding="{Binding RequestBody}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="QueryString" Binding="{Binding QueryString}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="请求时间" Binding="{Binding RequestTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="返回参数" Binding="{Binding ResponseJson}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="返回时间" Binding="{Binding ResponseTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="耗时(ms)" Binding="{Binding ExecutionTime}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Width="Auto" MinHeight="26">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="14" Text="共"></TextBlock>
<TextBlock FontSize="14" Text="{Binding TotalCount ,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="条记录 "></TextBlock>
<TextBlock FontSize="14" Text="第"></TextBlock>
<TextBlock FontSize="14" Text="{Binding CurrentPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="/"></TextBlock>
<TextBlock FontSize="14" Text="{Binding MaxPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="页"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="0" Name="btnFirst" Content="首页" Foreground="Black" FontSize="14"
Command="{Binding BtnFirstPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="1" Name="btnPrev" Content="上一页" FontSize="14"
Command="{Binding BtnPrePageCommand}"/>
<TextBox BorderBrush="Transparent" Grid.Column="2" FontSize="14" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="IBeam" IsEnabled="False"
Text ="{Binding CurrentPage}" TextAlignment="Center"
/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="3" Name="btnNext" Content="下一页" FontSize="14"
Command="{Binding BtnNextPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="4" Name="btnLast" Content="末页" FontSize="14"
Command="{Binding BtnLastPageCommand}"/>
</Grid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,46 @@
using Ping9719.WpfEx;
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.Shapes;
using .ViewModel;
namespace
{
public partial class InterfaceRecordView : UserControlBase
{
public InterfaceRecordViewModel viewModel { get; set; } = new InterfaceRecordViewModel();
public InterfaceRecordView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
//try
//{
// DataGrid datagrid = sender as DataGrid;
// datagrid.UnselectAllCells();
//}
//catch
//{
//}
}
private void LoadedVisible(object sender, EventArgs e)
{
viewModel.BtnReset();
}
}
}

View File

@ -0,0 +1,78 @@
<hc:Window xmlns:View="clr-namespace:货架标准上位机" x:Class="货架标准上位机.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
Title="{Binding Title}" Height="800" Width="1280" Icon="/Resources/Logo.ico"
WindowStartupLocation="CenterScreen" Loaded="load">
<!--标题栏-->
<hc:Window.NonClientAreaContent>
<StackPanel HorizontalAlignment="Right">
<Menu Height="29">
<MenuItem Height="29" Command="{Binding OpenUserCommand}">
<MenuItem.Header>
<TextBlock Text="{Binding LoginName,Source={x:Static local:UserInfoView.viewModel},TargetNullValue=登录}" Foreground="DimGray" Margin="-5,0"></TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<TextBlock Text="&#xe61a;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<!--<MenuItem Height="29" Width="35" Header="">
<MenuItem.Icon>
<TextBlock Text="&#xe62b;" FontSize="15" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
<MenuItem Width="120" Header="蓝色">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Blue" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="紫色">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Purple" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="黑夜">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Black" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
</MenuItem>-->
<MenuItem Height="29" Width="35" Header="">
<MenuItem.Icon>
<TextBlock Text="&#xe61b;" FontSize="15" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
<MenuItem Width="120" Header="日志" Command="{Binding OpenLogCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe61b;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="帮助" Command="{Binding OpenHelpCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe61b;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="关于" Command="{Binding OpenWeCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe61b;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>
</StackPanel>
</hc:Window.NonClientAreaContent>
<Grid>
<!--内容-->
<Grid>
</Grid>
<!--全局提示-->
<ScrollViewer Background="{x:Null}" Grid.Row="0" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" VerticalAlignment="Top">
<StackPanel Background="{x:Null}" hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,10" HorizontalAlignment="Right"/>
</ScrollViewer>
</Grid>
</hc:Window>

View File

@ -0,0 +1,43 @@
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.Controls.Primitives;
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;
using System.Windows.Threading;
using .ViewModel;
namespace
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : HandyControl.Controls.Window
{
public static MainViewModel viewModel = new MainViewModel();
public MainWindow()
{
if (!viewModel.InitAgo())
this.Close();
InitializeComponent();
viewModel.Init(this);
this.DataContext = viewModel;
}
private void load(object sender, RoutedEventArgs e)
{
}
}
}

View File

@ -0,0 +1,283 @@
<hc:Window xmlns:View="clr-namespace:货架标准上位机" x:Class="货架标准上位机.MainWindow1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
mc:Ignorable="d"
Title="{Binding Title}" NonClientAreaBackground="#FFDCEEFF" Height="800" Width="1280" Icon="/Resources/Logo.ico"
Background="#FFDCEEFF" WindowStartupLocation="CenterScreen" Loaded="load">
<!--标题栏-->
<hc:Window.NonClientAreaContent>
<StackPanel HorizontalAlignment="Right">
<Menu Height="29" Background="#FFDCEEFF">
<!--<MenuItem Height="29" Command="{Binding OpenUserCommand}" Visibility="{Binding IsLogin,Converter={StaticResource Boolean2VisibilityConverter}}">-->
<MenuItem Height="29" Command="{Binding OpenUserCommand}">
<MenuItem.Header>
<TextBlock Text="{Binding LoginName,Source={x:Static local:UserInfoView.viewModel},TargetNullValue=登录}" Foreground="DimGray" Margin="-5,0"></TextBlock>
</MenuItem.Header>
<MenuItem.Icon>
<TextBlock Text="&#xe61a;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<!--<MenuItem Height="29" Width="35" Header="">
<MenuItem.Icon>
<TextBlock Text="&#xe62b;" FontSize="15" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
<MenuItem Width="120" Header="蓝色">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Blue" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="紫色">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Purple" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="黑夜">
<MenuItem.Icon>
<TextBlock Text="&#xe604;" Foreground="Black" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
</MenuItem>-->
<MenuItem Height="29" Width="35">
<MenuItem.Icon>
<TextBlock Text="&#xe617;" FontSize="15" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
<MenuItem Width="120" Header="本地日志" Command="{Binding OpenLogCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe69d;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="操作说明" Command="{Binding OpenHelpCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe617;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
<MenuItem Width="120" Header="关 于" Command="{Binding OpenWeCommand}">
<MenuItem.Icon>
<TextBlock Text="&#xe6b3;" FontSize="16" FontFamily="{StaticResource IconFont}"></TextBlock>
</MenuItem.Icon>
</MenuItem>
</MenuItem>
</Menu>
</StackPanel>
</hc:Window.NonClientAreaContent>
<!--内容-->
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="3"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<!--内容-->
<TabControl Grid.Row="1" TabStripPlacement="Left" Margin="5,0,5,2" Padding="0,0,3,0" BorderThickness="0" Style="{StaticResource TabControlRectangle}" PreviewKeyDown="tabControl_PreviewKeyDown">
<TabItem Padding="10,10,40,10" IsSelected="True">
<TabItem.Header>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="&#xe603;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">主页</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:HomeView />
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe681;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料入库</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:InInventoryView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe67d;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料出库</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatBaseInfoView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe65f;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料盘点</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatBaseInfoView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe63a;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">库存查询</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatInventoryDetailView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe60b;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">出入记录</TextBlock>
</StackPanel>
</TabItem.Header>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe63a;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">库位管理</TextBlock>
</StackPanel>
</TabItem.Header>
<TabControl Style="{StaticResource TabControlBaseStyle.MouseOver}">
<TabItem Header="货架管理" >
<hc:TransitioningContentControl TransitionMode="Fade">
<View:ShelfInfoView />
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="模组管理">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:RoleView />
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="库位管理">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:RoleView />
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe662;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">物料管理</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatBaseInfoView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe662;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">条码打印</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:MatBaseInfoView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.查询},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe600;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">接口记录</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:InterfaceRecordView/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Padding="10,10,40,10" >
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xe63f;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">权限</TextBlock>
</StackPanel>
</TabItem.Header>
<TabControl Margin="5" Style="{StaticResource TabControlBaseStyle.MouseOver}">
<TabItem Header="用户管理" >
<hc:TransitioningContentControl TransitionMode="Fade">
<View:UserView Margin="0,5"/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="角色管理">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:RoleView Margin="0,5"/>
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.调试},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<TextBlock Text="&#xe601;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">调试</TextBlock>
</StackPanel>
</TabItem.Header>
<TabControl Margin="5" Style="{StaticResource TabControlBaseStyle.MouseOver}">
<TabItem Header="PLC">
<hc:TransitioningContentControl TransitionMode="Fade">
<View:DeviceView Margin="0,5"/>
</hc:TransitioningContentControl>
</TabItem>
<TabItem Header="扫码枪">
<hc:TransitioningContentControl TransitionMode="Fade">
<pi:TextBoxScanner Style="{StaticResource TextBoxExtend.Multi}" hc:InfoElement.Placeholder="鼠标点击此处激活" hc:InfoElement.Title="码信息" hc:InfoElement.TitlePlacement="Top" AutoClear="NextClear" IsAutoFocus="True"></pi:TextBoxScanner>
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
</TabItem>
<TabItem Padding="10,10,40,10" Visibility="{Binding Auth,Source={x:Static local:UserInfoView.viewModel},ConverterParameter={x:Static local:AuthEnum.设置},Converter={StaticResource AuthVisConverter}}">
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Text="&#xeb8d;" FontSize="20" FontFamily="{StaticResource IconFont}"></TextBlock>
<TextBlock Margin="10,0,0,0" FontSize="16">设置</TextBlock>
</StackPanel>
</TabItem.Header>
<hc:TransitioningContentControl TransitionMode="Fade">
<View:SetView />
</hc:TransitioningContentControl>
</TabItem>
</TabControl>
<!--状态栏-->
<Border Margin="5,3" Grid.Row="2" Grid.ColumnSpan="2" Background="AliceBlue" CornerRadius="3">
<Grid>
<StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Left">
<pi:IotState Content="状态内容待定" IsOk="False" Height="auto" Width="auto" InteriorHeight="13" Foreground="Gray" Background="{x:Null}"></pi:IotState>
</StackPanel>
<StackPanel Margin="5" Orientation="Horizontal" HorizontalAlignment="Right">
<TextBlock Margin="0,0" Text="{Binding Time,StringFormat=yyyy-MM-dd HH:mm:ss,FallbackValue=2000-01-01 00:00:00}" Foreground="#FF3A90C1" VerticalAlignment="Center"></TextBlock>
</StackPanel>
</Grid>
</Border>
<!--全局提示-->
<ScrollViewer Background="{x:Null}" Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalAlignment="Right" VerticalAlignment="Bottom">
<StackPanel Background="{x:Null}" hc:Growl.GrowlParent="True" VerticalAlignment="Top" Margin="0,10,10,10" HorizontalAlignment="Right"/>
</ScrollViewer>
</Grid>
</hc:Window>

View File

@ -0,0 +1,50 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
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;
using System.Windows.Threading;
using .ViewModel;
using HandyControl.Controls;
namespace
{
/// <summary>
/// MainWindow1.xaml 的交互逻辑
/// </summary>
public partial class MainWindow1 : HandyControl.Controls.Window
{
public static MainViewModel viewModel = MainWindow.viewModel;
public MainWindow1()
{
if (!viewModel.InitAgo())
this.Close();
InitializeComponent();
this.DataContext = viewModel;
}
private void load(object sender, RoutedEventArgs e)
{
viewModel.Init(this);
}
private void tabControl_PreviewKeyDown(object sender, KeyEventArgs e)
{
//取消tabControl快捷键切换
if (e.Key == Key.LeftCtrl || e.Key == Key.LeftCtrl || e.Key == Key.Tab)
e.Handled = true;
}
}
}

View File

@ -0,0 +1,92 @@
<Window
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.MatBaseInfoAddOrUpdateView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
Height="320" Width="320" WindowStyle="None" BorderThickness="0" Background="{x:Null}" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Opacity="1">
<Border BorderBrush="Gray" Background="WhiteSmoke" CornerRadius="5" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock FontSize="18" Name="Title" Text="{Binding Title, FallbackValue=新增物料}" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Margin="-5,-1"
Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityConverter}}"
Style="{StaticResource ButtonIcon}"
hc:IconElement.Geometry="{StaticResource CloseGeometry}" HorizontalAlignment="Right"
VerticalAlignment="Top" Click="closeClick"/>
<StackPanel Margin="5,0" Grid.Row="1" >
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="物料编码:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="MatCode" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
hc:InfoElement.Placeholder="此项必填"
></TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="物料名称:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="MatName" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
hc:InfoElement.Placeholder="此项必填"
></TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="物料规格:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="MatSpec" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}">
</TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="物料单位:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="MatUnit" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}">
</TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="物料客户:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="MatCustomer" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}">
</TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="状 态:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<ComboBox Name="IsEnable" MinWidth="100" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
SelectedValuePath="Tag" SelectedValue="{Binding IsEnable}">
<ComboBoxItem IsSelected="True" Tag="True">启用</ComboBoxItem>
<ComboBoxItem Tag="False">禁用</ComboBoxItem>
</ComboBox>
</StackPanel>
</StackPanel>
<StackPanel Margin="5" x:Name="spacingPanel" Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Margin="5" MinHeight="30" FontSize="15" Content="确认" Name="btnOk" Click="btnOk_Click"/>
<Button Margin="5" MinHeight="30" FontSize="15" Content="取消" Click="closeClick"/>
</StackPanel>
</Grid>
</Border>
</Window>

View File

@ -0,0 +1,94 @@
using HandyControl.Controls;
using SqlSugar;
using System;
using System.Windows;
using WCS.BLL.DbModels;
using .ViewModel;
namespace
{
public partial class MatBaseInfoAddOrUpdateView : System.Windows.Window
{
public MatBaseInfoAddOrUpdateViewModel ViewModel = new MatBaseInfoAddOrUpdateViewModel();
public MatBaseInfoModel matBaseInfo = null;
public MatBaseInfoAddOrUpdateView(string _titleText, MatBaseInfoModel _matBaseInfo = null)
{
InitializeComponent();
this.DataContext = ViewModel;
if (_matBaseInfo != null)
{
matBaseInfo = _matBaseInfo;
//绑定数据
MatCode.Text = matBaseInfo.MatCode;
MatName.Text = matBaseInfo.MatName;
MatSpec.Text = matBaseInfo.MatSpec;
MatUnit.Text = matBaseInfo.MatUnit;
MatCustomer.Text = matBaseInfo.MatCustomer;
ViewModel.IsEnable = matBaseInfo.IsEnable;
MatCode.IsEnabled = false;
}
else
{
matBaseInfo = new MatBaseInfoModel();
ViewModel.IsEnable = true;
}
//绑定标题
if (!string.IsNullOrEmpty(_titleText))
{
Title.Text = _titleText;
}
}
private void btnOk_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrEmpty(MatCode.Text))
{
Growl.Warning($"物料编码必填!");
MatCode.Focus();
return;
}
else if (string.IsNullOrEmpty(MatName.Text))
{
Growl.Warning($"物料名称必填!");
MatName.Focus();
return;
}
try
{
matBaseInfo.MatCode = MatCode.Text;
matBaseInfo.MatName = MatName.Text;
matBaseInfo.MatSpec = MatSpec.Text;
matBaseInfo.MatUnit = MatUnit.Text;
matBaseInfo.MatCustomer = MatCustomer.Text;
matBaseInfo.IsEnable = ViewModel.IsEnable;
}
//绑定数据
catch (Exception ex)
{
Growl.Error($"发生异常:{ex.Message}");
return;
}
this.DialogResult = true;
this.Close();
}
private void closeClick(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
this.Close();
}
}
}

View File

@ -0,0 +1,320 @@
<pi:UserControlBase
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.MatBaseInfoView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
d:DesignHeight="737" d:DesignWidth="1192" LoadedVisibleFirst="LoadedVisible">
<Border Margin="0" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="10*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="5 5 5 0" Background="AliceBlue" CornerRadius="5" Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.9*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1.9*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1.9*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1.9*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料编码:" FontSize="18" ></TextBlock>
<TextBox Grid.Column="1"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
FontSize="18" MinWidth="90" Text="{Binding MatCode}"></TextBox>
<TextBlock Grid.Column="2"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料名称:" FontSize="18" ></TextBlock>
<TextBox Grid.Column="3"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
FontSize="18" MinWidth="90" Text="{Binding MatName}"></TextBox>
<TextBlock Grid.Column="4"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料规格:" FontSize="18" ></TextBlock>
<TextBox Grid.Column="5"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
FontSize="18" MinWidth="90" Text="{Binding MatSpec}"></TextBox>
<TextBlock Grid.Column="6"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料状态:" FontSize="18" ></TextBlock>
<ComboBox Grid.Column="7"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
FontSize="18" MinWidth="90"
SelectedValuePath="Tag" SelectedValue="{Binding IsEnable}"
>
<ComboBoxItem IsSelected="True" Tag="{x:Null}" >全部</ComboBoxItem>
<ComboBoxItem Tag="True">启用</ComboBoxItem>
<ComboBoxItem Tag="False">禁用</ComboBoxItem>
</ComboBox>
<Button Style="{StaticResource ButtonSuccess}" hc:BorderElement.CornerRadius="15"
Grid.Column="9" MinHeight="40" FontSize="18" Content="&#xe8b9; 搜索" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnSearchCommand}">
</Button>
<Button Style="{StaticResource ButtonWarning}" hc:BorderElement.CornerRadius="15"
Grid.Column="10" MinHeight="40" FontSize="18" Content="&#xe652; 重置" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnResetCommand}">
</Button>
</Grid>
</Border>
<Border Grid.Row="1" Margin="5" Background="AliceBlue" CornerRadius="5" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="9*"></RowDefinition>
<RowDefinition Height="0.8*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe604;新 增" FontFamily="{StaticResource IconFont}"
Foreground="WhiteSmoke"
Background="HotPink"
Command="{Binding BtnAddCommand}"
>
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe612;修 改" FontFamily="{StaticResource IconFont}"
Foreground="WhiteSmoke"
Background="CadetBlue"
Command="{Binding BtnEditCommand}"
>
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe8c1;删 除" FontFamily="{StaticResource IconFont}"
Foreground="WhiteSmoke"
Command="{Binding BtnDeleteCommand}"
Style="{StaticResource ButtonDanger}"
>
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe866;导 入" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnImportCommand}"
Foreground="WhiteSmoke"
Background="Green"
>
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe866;导 出" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnExportCommand}"
Foreground="WhiteSmoke"
Background="DarkOrange"
>
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe866;打 印" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnPrintCommand}"
Foreground="WhiteSmoke"
Background="DarkOrange"
>
</Button>
</StackPanel>
<DataGrid Grid.Row="1"
SelectionChanged="DataGrid_SelectionChanged"
SelectedItem="{Binding SelectedataGridItem}"
Name="dataGrid"
SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="39"
AutoGenerateColumns="False" FontSize="13">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Width="30" Height="30" IsHitTestVisible="False" IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Width="30" Height="30" Unchecked="allChecked_Unchecked" Checked="allChecked_Checked" Name="allChecked"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="名称" Binding="{Binding MatName}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="单位" Binding="{Binding MatUnit}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="客户" Binding="{Binding MatCustomer}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="状态" Binding="{Binding IsEnableStr}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="更新人" Binding="{Binding ModifyUser}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="更新时间" Binding="{Binding ModifyTime ,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Width="Auto" MinHeight="26">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="14" Text="共"></TextBlock>
<TextBlock FontSize="14" Text="{Binding TotalCount ,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="条记录 "></TextBlock>
<TextBlock FontSize="14" Text="第"></TextBlock>
<TextBlock FontSize="14" Text="{Binding CurrentPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="/"></TextBlock>
<TextBlock FontSize="14" Text="{Binding MaxPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="页"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="0" Name="btnFirst" Content="首页" Foreground="Black" FontSize="14"
Command="{Binding BtnFirstPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="1" Name="btnPrev" Content="上一页" FontSize="14"
Command="{Binding BtnPrePageCommand}"/>
<TextBox BorderBrush="Transparent" Grid.Column="2" FontSize="14" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="IBeam" IsEnabled="False"
Text ="{Binding CurrentPage}" TextAlignment="Center"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="3" Name="btnNext" Content="下一页" FontSize="14"
Command="{Binding BtnNextPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="4" Name="btnLast" Content="末页" FontSize="14"
Command="{Binding BtnLastPageCommand}"/>
</Grid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>
<!--<Border Grid.Row="1" Margin="3" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="0.7*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button MinHeight="40" FontSize="18" Margin="5" Command="{Binding BtnExportCommand}"
Content="&#xe866; 导 出" FontFamily="{StaticResource IconFont}"
Style="{StaticResource ButtonWarning}" Background="DarkOrange">
</Button>
</StackPanel>
<DataGrid Grid.Row="1"
SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="39"
AutoGenerateColumns="False"
FontSize="13">
<DataGrid.Columns>
<DataGridTextColumn Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn Header="接口地址" Binding="{Binding RequestUrl}"></DataGridTextColumn>
<DataGridTextColumn Header="设备IP" Binding="{Binding DeviceIp}"></DataGridTextColumn>
<DataGridTextColumn Header="请求参数" Binding="{Binding RequestBody}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="QueryString" Binding="{Binding QueryString}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="请求时间" Binding="{Binding RequestTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="返回参数" Binding="{Binding ResponseJson}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="返回时间" Binding="{Binding ResponseTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="耗时(ms)" Binding="{Binding ExecutionTime}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Width="Auto" MinHeight="26">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="14" Text="共"></TextBlock>
<TextBlock FontSize="14" Text="{Binding TotalCount ,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="条记录 "></TextBlock>
<TextBlock FontSize="14" Text="第"></TextBlock>
<TextBlock FontSize="14" Text="{Binding CurrentPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="/"></TextBlock>
<TextBlock FontSize="14" Text="{Binding MaxPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="页"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="0" Name="btnFirst" Content="首页" Foreground="Black" FontSize="14"
Command="{Binding BtnFirstPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="1" Name="btnPrev" Content="上一页" FontSize="14"
Command="{Binding BtnPrePageCommand}"/>
<TextBox BorderBrush="Transparent" Grid.Column="2" FontSize="14" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="IBeam" IsEnabled="False"
Text ="{Binding CurrentPage}" TextAlignment="Center"
/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="3" Name="btnNext" Content="下一页" FontSize="14"
Command="{Binding BtnNextPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="4" Name="btnLast" Content="末页" FontSize="14"
Command="{Binding BtnLastPageCommand}"/>
</Grid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>-->
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,88 @@
using Ping9719.WpfEx;
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.Shapes;
using .ViewModel;
namespace
{
public partial class MatBaseInfoView : UserControlBase
{
public MatBaseInfoViewModel viewModel { get; set; } = new MatBaseInfoViewModel();
public MatBaseInfoView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void LoadedVisible(object sender, EventArgs e)
{
viewModel.BtnReset();
}
private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
if (viewModel.SelectedataGridItem != null)
{
viewModel.SelectedataGridItem.IsSelected = !viewModel.SelectedataGridItem.IsSelected;
dataGrid.UnselectAllCells();//取消选中 避免手动点击check选项时反选失败 和重新点击该项时反选失败
}
}
catch
{
}
}
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
//try
//{
// if (viewModel.SelectedataGridItem != null)
// {
// viewModel.SelectedataGridItem.IsSelected = !viewModel.SelectedataGridItem.IsSelected;
// }
//}
//catch
//{
//}
}
private void allChecked_Checked(object sender, RoutedEventArgs e)
{
if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
{
foreach (var item in viewModel.DataGridItemSource)
{
item.IsSelected = true;
}
}
}
private void allChecked_Unchecked(object sender, RoutedEventArgs e)
{
if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
{
foreach (var item in viewModel.DataGridItemSource)
{
item.IsSelected = false;
}
}
}
}
}

View File

@ -0,0 +1,194 @@
<pi:UserControlBase
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.MatInventoryDetailView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
d:DesignHeight="737" d:DesignWidth="1192" LoadedVisibleFirst="LoadedVisible">
<Border Margin="0" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1.4*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="3" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="货架类型:" FontSize="18" ></TextBlock>
<ComboBox Grid.Row="0" Grid.Column="1"
DisplayMemberPath="ShelfTypeName"
ItemsSource="{Binding ShelfTypeItems}"
SelectedItem="{Binding SelectedShelfTypeItem}"
FontSize="18"
IsEditable="True"/>
<TextBlock Grid.Row="1" Grid.Column="0" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料编码:" FontSize="18" ></TextBlock>
<hc:AutoCompleteTextBox Grid.Row="1" Grid.Column="1" MinWidth="120" FontSize="18" IsEditable="True"
IsTextSearchEnabled="True"
Name="cbxMatCode" Margin="1"
ItemsSource="{Binding Items}"
Text="{Binding MatCode}"
DisplayMemberPath="MatCode"/>
<TextBlock Grid.Row="1" Grid.Column="2" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料名称:" FontSize="18" ></TextBlock>
<TextBox Grid.Row="1" Grid.Column="3" Text="{Binding MatName}"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120" ></TextBox>
<TextBlock Grid.Row="1" Grid.Column="4" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料批次:" FontSize="18" ></TextBlock>
<TextBox Grid.Row="1" Grid.Column="5" Text="{Binding MatBatch}"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120" ></TextBox>
<TextBlock Grid.Row="2" Grid.Column="2" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="物料条码:" FontSize="18" ></TextBlock>
<TextBox Grid.Row="2" Grid.Column="3" Text="{Binding MatSN}"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="120" ></TextBox>
<TextBlock Grid.Row="2" Grid.Column="0" Margin="5"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text=" 库 位 " FontSize="18" ></TextBlock>
<TextBox Grid.Row="2" Grid.Column="1" Text="{Binding StoreCode}"
VerticalAlignment="Center" HorizontalAlignment="Left"
FontSize="18" MinWidth="160" ></TextBox>
<Button Style="{StaticResource ButtonSuccess}"
Command="{Binding BtnSearchCommand}"
hc:BorderElement.CornerRadius="8"
Grid.Column="6" MinHeight="40" FontSize="18" Content="&#xe8b9; 搜索" FontFamily="{StaticResource IconFont}" Margin="0,0,0,0" >
</Button>
<Button Style="{StaticResource ButtonWarning}"
Command="{Binding BtnResetCommand}"
hc:BorderElement.CornerRadius="8"
Grid.Column="7" MinHeight="40" FontSize="18" Content="&#xe652; 重置" FontFamily="{StaticResource IconFont}" Margin="0,0,0,0" >
</Button>
</Grid>
</Border>
<Border Grid.Row="1" Margin="3" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="0.7*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button MinHeight="40" FontSize="18" Margin="5" Command="{Binding BtnExportCommand}"
Content="&#xe866; 导 出" FontFamily="{StaticResource IconFont}"
Style="{StaticResource ButtonWarning}" Background="DarkOrange">
</Button>
</StackPanel>
<DataGrid Grid.Row="1"
SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="39"
AutoGenerateColumns="False" FontSize="13">
<DataGrid.Columns>
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="物料编码" Binding="{Binding MatCode}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="物料名称" Binding="{Binding MatName}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="150" Header="规格" Binding="{Binding MatSpec}"></DataGridTextColumn>
<DataGridTextColumn MaxWidth="100" Header="批次" Binding="{Binding MatBatch}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="数量" Binding="{Binding MatQty}"></DataGridTextColumn>
<DataGridTextColumn Header="库位" Binding="{Binding StoreCode}"></DataGridTextColumn>
<!--<DataGridTextColumn IsReadOnly="True" Header="R" Binding="{Binding R}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="C" Binding="{Binding C}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="位" Binding="{Binding Wei}"></DataGridTextColumn>-->
<DataGridTextColumn IsReadOnly="True" Header="入库时间" Binding="{Binding InstoreTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="物料SN" Binding="{Binding MatSN}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Width="Auto" MinHeight="26">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="14" Text="共"></TextBlock>
<TextBlock FontSize="14" Text="{Binding TotalCount ,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="条记录 "></TextBlock>
<TextBlock FontSize="14" Text="第"></TextBlock>
<TextBlock FontSize="14" Text="{Binding CurrentPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="/"></TextBlock>
<TextBlock FontSize="14" Text="{Binding MaxPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="页"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="0" Name="btnFirst" Content="首页" Foreground="Black" FontSize="14"
Command="{Binding BtnFirstPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="1" Name="btnPrev" Content="上一页" FontSize="14"
Command="{Binding BtnPrePageCommand}"/>
<TextBox BorderBrush="Transparent" Grid.Column="2" FontSize="14" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="IBeam" IsEnabled="False"
Text ="{Binding CurrentPage}" TextAlignment="Center"
/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="3" Name="btnNext" Content="下一页" FontSize="14"
Command="{Binding BtnNextPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="4" Name="btnLast" Content="末页" FontSize="14"
Command="{Binding BtnLastPageCommand}"/>
</Grid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,47 @@
using Ping9719.WpfEx;
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.Shapes;
using .ViewModel;
namespace
{
public partial class MatInventoryDetailView : UserControlBase
{
public MatInventoryDetailViewModel viewModel { get; set; } = new MatInventoryDetailViewModel();
public MatInventoryDetailView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void DataGrid_SelectedCellsChanged(object sender, SelectedCellsChangedEventArgs e)
{
//try
//{
// DataGrid datagrid = sender as DataGrid;
// datagrid.UnselectAllCells();
//}
//catch
//{
//}
}
private void LoadedVisible(object sender, EventArgs e)
{
viewModel.InitMatCode();
viewModel.BtnReset();
}
}
}

View File

@ -0,0 +1,110 @@
<pi:UserControlBase x:Class="货架标准上位机.SetView"
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:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
xmlns:pi="https://github.com/ping9719/wpfex"
d:DesignHeight="550" d:DesignWidth="800" LoadedVisible="loadedVisible">
<!--资源-->
<pi:UserControlBase.Resources>
<ResourceDictionary>
<Style TargetType="ToggleButton" BasedOn="{StaticResource ToggleButtonSwitch.Small}">
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
<Setter Property="Margin" Value="0,5"></Setter>
<Setter Property="Height" Value="20"></Setter>
</Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource TextBlockSubTitle}">
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxExtend}">
<Setter Property="Margin" Value="0,5"></Setter>
</Style>
<Style TargetType="ComboBox" BasedOn="{StaticResource ComboBoxExtend}">
<Setter Property="Margin" Value="0,5"></Setter>
</Style>
<Style TargetType="TextBlock" x:Key="TextBlockHint" BasedOn="{StaticResource TextBlockDefaultThiLight}">
<Setter Property="HorizontalAlignment" Value="Left"></Setter>
</Style>
</ResourceDictionary>
</pi:UserControlBase.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<!--滚动条-->
<hc:ScrollViewer Grid.Row="0" IsInertiaEnabled="True" hc:ScrollViewerAttach.AutoHide="False">
<!--瀑布流-->
<hc:WaterfallPanel VerticalAlignment="Top" Groups="2" hc:PanelElement.FluidMoveBehavior="{StaticResource BehaviorXY200}">
<GroupBox Header="扫码枪串口号配置" Margin="5" Padding="5" Style="{StaticResource GroupBoxTab}" Background="{x:Null}">
<StackPanel>
<StackPanel Orientation="Horizontal">
<Button Margin="5" Command="{Binding RefreshCOMListCommand}">选择串口号</Button>
<ComboBox Margin="5" Name="cbxComs"
ItemsSource="{Binding COMList}"
SelectedItem="{Binding SelectedCOM}"
IsEditable="False">
</ComboBox>
<Button Margin="5" Content="添加" Command="{Binding AddCOMCommand}"></Button>
<Button Margin="5" Content="删除" Command="{Binding DeleteCOMCommand}"></Button>
</StackPanel>
<ListBox ItemsSource="{Binding ScannerComList}"
SelectedItem="{Binding SelectedScannerCom}"
>
</ListBox>
</StackPanel>
</GroupBox>
<GroupBox Header="软件" Margin="5" Padding="5" Style="{StaticResource GroupBoxTab}" Background="{x:Null}">
<StackPanel>
<TextBlock>开机启动</TextBlock>
<ToggleButton IsChecked="{Binding Powerboot}"/>
<TextBlock>启动全屏</TextBlock>
<ToggleButton IsChecked="{Binding StartupFull}"/>
</StackPanel>
</GroupBox>
<GroupBox Header="用户" Margin="5" Padding="5" Style="{StaticResource GroupBoxTab}" Background="{x:Null}">
<StackPanel>
<TextBlock>登录记忆</TextBlock>
<TextBlock Style="{StaticResource TextBlockHint}">在登录成功后会记住账号</TextBlock>
<ToggleButton IsChecked="{Binding IsSaveLogin}"/>
<TextBlock>记忆数量</TextBlock>
<TextBlock Style="{StaticResource TextBlockHint}">在登录成功后记住的账号数量</TextBlock>
<ComboBox IsEnabled="{Binding IsSaveLogin}" ItemsSource="{Binding SaveLoginCountData}" SelectedItem="{Binding SaveLoginCount}" hc:InfoElement.Placeholder="登录记忆最大数量" hc:InfoElement.Title=""></ComboBox>
</StackPanel>
</GroupBox>
<GroupBox Header="缓存" Margin="5" Padding="5" Style="{StaticResource GroupBoxTab}" Background="{x:Null}">
<StackPanel>
<TextBlock>日志缓存时间</TextBlock>
<TextBlock Style="{StaticResource TextBlockHint}">在软件每次打开的时候会执行清理缓存</TextBlock>
<ComboBox ItemsSource="{Binding LogTimeData}" SelectedValue="{Binding SaveLogDay}" SelectedValuePath="Key" DisplayMemberPath="Value" hc:InfoElement.Placeholder="日志缓存保存时间" hc:InfoElement.Title=""/>
</StackPanel>
</GroupBox>
<GroupBox Header="其他列子" Margin="5" Padding="5" Style="{StaticResource GroupBoxTab}" Background="{x:Null}">
<StackPanel>
<TextBlock>文本框</TextBlock>
<TextBox hc:InfoElement.Placeholder="请输入值" hc:InfoElement.Title="" hc:InfoElement.TitlePlacement="Left"></TextBox>
<TextBlock>文本框(带描述)</TextBlock>
<TextBlock Style="{StaticResource TextBlockHint}">我是描述</TextBlock>
<TextBox hc:InfoElement.Placeholder="请输入值" hc:InfoElement.Title="" hc:InfoElement.TitlePlacement="Left"></TextBox>
<TextBlock>范围文本框</TextBlock>
<TextBlock Style="{StaticResource TextBlockHint}">我是描述</TextBlock>
<UniformGrid Columns="2">
<TextBox hc:InfoElement.Placeholder="请输入值" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="" Margin="0,5,10,5"></TextBox>
<TextBox hc:InfoElement.Placeholder="请输入值" hc:InfoElement.TitlePlacement="Left" hc:InfoElement.Title="-" Margin="-5,5,0,5"></TextBox>
</UniformGrid>
</StackPanel>
</GroupBox>
</hc:WaterfallPanel>
</hc:ScrollViewer>
<Button Grid.Row="1" Margin="3" Content="保存" FontSize="16" Height="36" Padding="0" hc:IconElement.Geometry="{StaticResource SaveGeometry}" hc:IconElement.Height="16" Command="{Binding SaveCommand}" Style="{StaticResource ButtonPrimary}" HorizontalAlignment="Stretch"/>
</Grid>
</pi:UserControlBase>

View File

@ -0,0 +1,40 @@
using .ViewModel;
using Ping9719.WpfEx;
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
{
/// <summary>
/// 设置
/// </summary>
public partial class SetView : UserControlBase
{
SetViewModel viewModel = new SetViewModel();
public SetView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void loadedVisible(object sender, EventArgs e)
{
if (this.IsInDesignMode)
return;
viewModel.Update();
}
}
}

View File

@ -0,0 +1,138 @@
<Window
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.ShelfInfoAddOrUpdateView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
Height="440" Width="320" WindowStyle="None" BorderThickness="0" Background="{x:Null}" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Opacity="1">
<Border BorderBrush="Gray" Background="WhiteSmoke" CornerRadius="5" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock FontSize="18" Name="Title" Text="{Binding Title, FallbackValue=新增货架}" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Button Margin="-5,-1"
Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityConverter}}"
Style="{StaticResource ButtonIcon}"
hc:IconElement.Geometry="{StaticResource CloseGeometry}" HorizontalAlignment="Right"
VerticalAlignment="Top" Click="closeClick"/>
<StackPanel Margin="5,0" Grid.Row="1" >
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="货架类型:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<ComboBox Grid.Row="0" Grid.Column="1"
DisplayMemberPath="ShelfTypeName"
ItemsSource="{Binding ShelfTypeItems}"
SelectedItem="{Binding SelectedShelfTypeItem}"
IsEditable="False"
MinWidth="200"
FontSize="18" />
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="货架编码:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtShelfCode" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
Text="{Binding ShelfCode}"
hc:InfoElement.Placeholder="此项必填">
</TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="货架行数:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtRowCounts" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
Text="{Binding RowCounts}"
hc:InfoElement.Placeholder="此项必填">
</TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="货架列数:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtColumnCounts" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
Text="{Binding ColumnCounts}"
hc:InfoElement.Placeholder="此项必填">
</TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="报警灯ID" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtLightId" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
hc:InfoElement.Placeholder="此项必填"
Text="{Binding LightId}">
</TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="TCP信息" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtClientIp" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
hc:InfoElement.Placeholder="此项必填"
Text="{Binding ClientIp}">
</TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="货架区域:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtGroupName" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Style="{StaticResource TextBoxExtend}"
hc:InfoElement.Placeholder="此项必填"
Text="{Binding GroupName}">
</TextBox>
<TextBlock Text="*" Foreground="Red" VerticalAlignment="Center">
</TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="是否绑定: " FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<ComboBox Name="IsBind" MinWidth="100" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
SelectedValuePath="Tag" SelectedValue="{Binding IsBind}">
<ComboBoxItem Tag="True">启用</ComboBoxItem>
<ComboBoxItem Tag="False" IsSelected="True">禁用</ComboBoxItem>
</ComboBox>
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock Text="绑定后货架编码:" FontSize="15" VerticalAlignment="Center" HorizontalAlignment="Right"></TextBlock>
<TextBox Name="txtBindShelfCode" MinWidth="200" Grid.Row="0" Grid.Column="1" FontSize="15"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
Text="{Binding BindShelfCode}"
Style="{StaticResource TextBoxExtend}">
</TextBox>
</StackPanel>
</StackPanel>
<StackPanel Margin="5" x:Name="spacingPanel" Grid.Row="2" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Margin="5" MinHeight="30" FontSize="15" Content="确认" Name="btnOk" Click="btnOk_Click"/>
<Button Margin="5" MinHeight="30" FontSize="15" Content="取消" Click="closeClick"/>
</StackPanel>
</Grid>
</Border>
</Window>

View File

@ -0,0 +1,119 @@
using HandyControl.Controls;
using SqlSugar;
using System;
using System.Windows;
using WCS.BLL.DbModels;
using WCS.Model;
using WCS.Model.ApiModel.StoreInfo;
using WCS.Model.ApiModel.User;
using .Api;
using .ViewModel;
namespace
{
public partial class ShelfInfoAddOrUpdateView : System.Windows.Window
{
public ShelfInfoAddOrUpdateViewModel ViewModel = new ShelfInfoAddOrUpdateViewModel();
public ShelfInfoAddOrUpdateView(string _titleText, ShelfInfoModel _shelfInfoModel = null)
{
InitializeComponent();
this.DataContext = ViewModel;
//绑定标题
if (!string.IsNullOrEmpty(_titleText))
{
Title.Text = _titleText;
}
ViewModel.SetValues(_shelfInfoModel);
}
private void btnOk_Click(object sender, RoutedEventArgs e)
{
try
{
#region
if (string.IsNullOrEmpty(ViewModel.ShelfCode))
{
Growl.Warning("请输入货架编码!");
txtShelfCode.Focus();
return;
}
if (ViewModel.RowCounts == 0)
{
Growl.Warning("请输入货架行数!");
txtRowCounts.Focus();
return;
}
if (ViewModel.ColumnCounts == 0)
{
Growl.Warning("请输入货架列数!");
txtColumnCounts.Focus();
return;
}
if (ViewModel.LightId == 0)
{
Growl.Warning("请输入报警灯Id");
txtLightId.Focus();
return;
}
if (string.IsNullOrEmpty(ViewModel.ClientIp))
{
Growl.Warning("请输入TCP信息");
txtClientIp.Focus();
return;
}
if (string.IsNullOrEmpty(ViewModel.GroupName))
{
Growl.Warning("请输入货架区域!");
txtGroupName.Focus();
return;
}
if (ViewModel.IsBind && string.IsNullOrEmpty(ViewModel.BindShelfCode))
{
Growl.Warning("需要绑定的货架需要输入绑定后货架编码!");
txtBindShelfCode.Focus();
return;
}
#endregion
#region /
var IsAdd = Title.Text == "新增货架";
var body = new AddShelfInfoRequest<ShelfInfoModel>()
{
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
ShelfInfo = ViewModel.GetValues(),
AddOrUpdate = IsAdd ? AddOrUpdate.Add : AddOrUpdate.Update
};
var Result = ApiHelp.GetDataFromHttp<ResponseBase<object>>(LocalFile.Config.ApiIpHost + "storeInfo/addOrUpdateShelfInfo", body, "POST");
if (Result != null && Result.Code == 200)
{
if (IsAdd)
Growl.Success("添加成功!");
else
Growl.Success("修改成功!");
this.DialogResult = true;
this.Close();
}
else
{
Growl.Error($"{Result?.Message?.ToString()}");
}
#endregion
}
//绑定数据
catch (Exception ex)
{
Growl.Error($"操作异常:{ex.Message}");
return;
}
}
private void closeClick(object sender, RoutedEventArgs e)
{
this.DialogResult = false;
this.Close();
}
}
}

View File

@ -0,0 +1,272 @@
<pi:UserControlBase
xmlns:pi="https://github.com/ping9719/wpfex"
x:Class="货架标准上位机.ShelfInfoView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:hc="https://handyorg.github.io/handycontrol"
mc:Ignorable="d"
d:DesignHeight="737" d:DesignWidth="1192" LoadedVisibleFirst="LoadedVisible">
<Border Margin="0" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="1*"></RowDefinition>
<RowDefinition Height="10*"></RowDefinition>
</Grid.RowDefinitions>
<Border Grid.Row="0" Margin="0" Background="AliceBlue" CornerRadius="5" Padding="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="3*"></ColumnDefinition>
<ColumnDefinition Width="1.9*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="1.9*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
<ColumnDefinition Width="2*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="货架类型:" FontSize="18" ></TextBlock>
<ComboBox Grid.Row="0" Grid.Column="1"
DisplayMemberPath="ShelfTypeName"
ItemsSource="{Binding ShelfTypeItems}"
SelectedItem="{Binding SelectedShelfTypeItem}"
Height="30"
FontSize="18"
IsEditable="False"/>
<TextBlock Grid.Column="2"
VerticalAlignment="Center" HorizontalAlignment="Right"
Text="货架编码:" FontSize="18" ></TextBlock>
<TextBox Grid.Column="3"
VerticalAlignment="Center" HorizontalAlignment="Stretch"
FontSize="18" MinWidth="90" Text="{Binding ShelfCode}"></TextBox>
<Button Style="{StaticResource ButtonSuccess}" hc:BorderElement.CornerRadius="15"
Grid.Column="9" MinHeight="40" FontSize="18" Content="&#xe8b9; 搜索" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnSearchCommand}">
</Button>
<Button Style="{StaticResource ButtonWarning}" hc:BorderElement.CornerRadius="15"
Grid.Column="10" MinHeight="40" FontSize="18" Content="&#xe652; 重置" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnResetCommand}">
</Button>
</Grid>
</Border>
<Border Grid.Row="1" Margin="5" Background="AliceBlue" CornerRadius="5" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="9*"></RowDefinition>
<RowDefinition Height="0.8*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe604;新 增" FontFamily="{StaticResource IconFont}"
Foreground="WhiteSmoke"
Background="HotPink"
Command="{Binding BtnAddCommand}">
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe612;修 改" FontFamily="{StaticResource IconFont}"
Foreground="WhiteSmoke"
Background="CadetBlue"
Command="{Binding BtnEditCommand}">
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe8c1;删 除" FontFamily="{StaticResource IconFont}"
Foreground="WhiteSmoke"
Command="{Binding BtnDeleteCommand}"
Style="{StaticResource ButtonDanger}">
</Button>
<Button MinHeight="40" FontSize="18" Margin="5"
Content="&#xe866;生成模组" FontFamily="{StaticResource IconFont}"
Command="{Binding BtnImportCommand}"
Foreground="WhiteSmoke"
Background="Green">
</Button>
</StackPanel>
<DataGrid Grid.Row="1"
SelectedItem="{Binding SelectedataGridItem}"
Name="dataGrid"
ItemsSource="{Binding DataGridItemSource}"
SelectionChanged="dataGrid_SelectionChanged"
RowHeight="39"
AutoGenerateColumns="False" FontSize="13">
<DataGrid.Columns>
<DataGridTemplateColumn CanUserResize="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox Width="30" Height="30" IsHitTestVisible="False" IsChecked="{Binding IsSelected}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<CheckBox Width="30" Height="30" Unchecked="allChecked_Unchecked" Checked="allChecked_Checked" Name="allChecked"/>
</DataTemplate>
</DataGridTemplateColumn.HeaderTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn IsReadOnly="True" Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="货架类型" Binding="{Binding ShelfTypeName}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="货架编码" Binding="{Binding ShelfCode}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="货架行数" Binding="{Binding Rowcounts}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="货架列数" Binding="{Binding Columncounts}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="报警灯ID" Binding="{Binding LightId}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="TCP连接信息" Binding="{Binding ClientIp}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="货架区域(组别)" Binding="{Binding GroupName}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="是否绑定" Binding="{Binding IsBind}"></DataGridTextColumn>
<DataGridTextColumn IsReadOnly="True" Header="绑定后货架编码" Binding="{Binding BindShelfCode}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Width="Auto" MinHeight="26">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="14" Text="共"></TextBlock>
<TextBlock FontSize="14" Text="{Binding TotalCount ,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="条记录 "></TextBlock>
<TextBlock FontSize="14" Text="第"></TextBlock>
<TextBlock FontSize="14" Text="{Binding CurrentPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="/"></TextBlock>
<TextBlock FontSize="14" Text="{Binding MaxPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="页"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="0" Name="btnFirst" Content="首页" Foreground="Black" FontSize="14"
Command="{Binding BtnFirstPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="1" Name="btnPrev" Content="上一页" FontSize="14"
Command="{Binding BtnPrePageCommand}"/>
<TextBox BorderBrush="Transparent" Grid.Column="2" FontSize="14" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="IBeam" IsEnabled="False"
Text ="{Binding CurrentPage}" TextAlignment="Center"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="3" Name="btnNext" Content="下一页" FontSize="14"
Command="{Binding BtnNextPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="4" Name="btnLast" Content="末页" FontSize="14"
Command="{Binding BtnLastPageCommand}"/>
</Grid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>
<!--<Border Grid.Row="1" Margin="3" Background="AliceBlue" CornerRadius="3" Padding="0">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="0.8*"></RowDefinition>
<RowDefinition Height="8*"></RowDefinition>
<RowDefinition Height="0.7*"></RowDefinition>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Orientation="Horizontal">
<Button MinHeight="40" FontSize="18" Margin="5" Command="{Binding BtnExportCommand}"
Content="&#xe866; 导 出" FontFamily="{StaticResource IconFont}"
Style="{StaticResource ButtonWarning}" Background="DarkOrange">
</Button>
</StackPanel>
<DataGrid Grid.Row="1"
SelectedCellsChanged="DataGrid_SelectedCellsChanged"
ItemsSource="{Binding DataGridItemSource}"
RowHeight="39"
AutoGenerateColumns="False"
FontSize="13">
<DataGrid.Columns>
<DataGridTextColumn Header="序号" Binding="{Binding RowNumber}"></DataGridTextColumn>
<DataGridTextColumn Header="接口地址" Binding="{Binding RequestUrl}"></DataGridTextColumn>
<DataGridTextColumn Header="设备IP" Binding="{Binding DeviceIp}"></DataGridTextColumn>
<DataGridTextColumn Header="请求参数" Binding="{Binding RequestBody}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="QueryString" Binding="{Binding QueryString}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="请求时间" Binding="{Binding RequestTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="返回参数" Binding="{Binding ResponseJson}" MaxWidth="100"></DataGridTextColumn>
<DataGridTextColumn Header="返回时间" Binding="{Binding ResponseTime,StringFormat='yyyy-MM-dd HH:mm:ss'}"></DataGridTextColumn>
<DataGridTextColumn Header="耗时(ms)" Binding="{Binding ExecutionTime}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="2">
<Border CornerRadius="3" Background="Transparent" VerticalAlignment="Center" >
<Grid HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Top" Width="Auto" MinHeight="26">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
<ColumnDefinition Width="5*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Horizontal" Margin="5">
<TextBlock FontSize="14" Text="共"></TextBlock>
<TextBlock FontSize="14" Text="{Binding TotalCount ,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="条记录 "></TextBlock>
<TextBlock FontSize="14" Text="第"></TextBlock>
<TextBlock FontSize="14" Text="{Binding CurrentPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="/"></TextBlock>
<TextBlock FontSize="14" Text="{Binding MaxPage,FallbackValue=0}"></TextBlock>
<TextBlock FontSize="14" Text="页"></TextBlock>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
<Grid>
<Grid.RowDefinitions >
<RowDefinition Height="30"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="0" Name="btnFirst" Content="首页" Foreground="Black" FontSize="14"
Command="{Binding BtnFirstPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="1" Name="btnPrev" Content="上一页" FontSize="14"
Command="{Binding BtnPrePageCommand}"/>
<TextBox BorderBrush="Transparent" Grid.Column="2" FontSize="14" MinWidth="50" HorizontalAlignment="Center" VerticalAlignment="Center" Cursor="IBeam" IsEnabled="False"
Text ="{Binding CurrentPage}" TextAlignment="Center"
/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="3" Name="btnNext" Content="下一页" FontSize="14"
Command="{Binding BtnNextPageCommand}"/>
<Button BorderBrush="Transparent" Background="Transparent" Grid.Column="4" Name="btnLast" Content="末页" FontSize="14"
Command="{Binding BtnLastPageCommand}"/>
</Grid>
</StackPanel>
</Grid>
</Border>
</Grid>
</Grid>
</Border>-->
</Grid>
</Border>
</pi:UserControlBase>

View File

@ -0,0 +1,90 @@
using Ping9719.WpfEx;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
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.Shapes;
using .ViewModel;
namespace
{
public partial class ShelfInfoView : UserControlBase
{
public ShelfInfoViewModel viewModel { get; set; } = new ShelfInfoViewModel();
public ShelfInfoView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void LoadedVisible(object sender, EventArgs e)
{
viewModel.BtnReset();
viewModel.InitShelfTypeItems();
}
private void allChecked_Checked(object sender, RoutedEventArgs e)
{
if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
{
foreach (var item in viewModel.DataGridItemSource)
{
item.IsSelected = true;
}
}
}
private void allChecked_Unchecked(object sender, RoutedEventArgs e)
{
if (viewModel != null && viewModel.DataGridItemSource != null && viewModel.DataGridItemSource.Count() > 0)
{
foreach (var item in viewModel.DataGridItemSource)
{
item.IsSelected = false;
}
}
}
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
try
{
// 更新选中项的状态
if (dataGrid.SelectedCells.Count > 0 && viewModel.SelectedataGridItem != null)
{
viewModel.SelectedataGridItem.IsSelected = !viewModel.SelectedataGridItem.IsSelected;
dataGrid.UnselectAllCells(); // 取消选中所有单元格
}
}
catch(Exception ex)
{
Debug.WriteLine("SelectionChanged event handler failed: " + ex.Message);
}
}
private void CheckBox_Checked(object sender, RoutedEventArgs e)
{
;
}
private void CheckBox_Unchecked(object sender, RoutedEventArgs e)
{
;
}
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
;
}
}
}

View File

@ -0,0 +1,31 @@
<Window xmlns:hc="https://handyorg.github.io/handycontrol" x:Class="货架标准上位机.AboutView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
Title="关于" Height="300" Width="400" ResizeMode="NoResize" FontSize="18"
Icon="/Resources/Logo.ico"
WindowStartupLocation="CenterScreen">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="130"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="StackPanelInfo" Orientation="Horizontal">
<Image Margin="60,15,10,15" HorizontalAlignment="Left" Width="80" Height="80" Source="/Resources/Logo.png"></Image>
<!--盟讯-->
<TextBlock Margin="0,30" Text="{StaticResource AboutInfo1}" FontSize="28" FontFamily="YouYuan" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
<TextBlock Margin="-58,30" Text="{StaticResource AboutInfo2}" FontSize="28" FontFamily="YouYuan" VerticalAlignment="Bottom" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
<!--智能制造-->
<!--<TextBlock Margin="0,30" Text="智能制造" FontSize="28" FontFamily="YouYuan" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
<TextBlock Margin="-58,30" Text="引领未来" FontSize="28" FontFamily="YouYuan" VerticalAlignment="Bottom" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>-->
</StackPanel>
<StackPanel Grid.Row="1">
<TextBlock Margin="5" Text="{Binding Name,FallbackValue=xxx程序}" FontSize="32" Foreground="DodgerBlue" HorizontalAlignment="Center"></TextBlock>
<TextBlock Margin="5" Text="{Binding Company,FallbackValue=重庆盟讯电子科技有限公司 @2030}" Grid.Row="1" FontSize="14" HorizontalAlignment="Center"></TextBlock>
<TextBlock Margin="5" Text="{Binding Ver,FallbackValue=v 1.0.0}" FontSize="14" Foreground="Orange" HorizontalAlignment="Center"></TextBlock>
</StackPanel>
</Grid>
</Window>

View File

@ -0,0 +1,30 @@
using .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.Shapes;
namespace
{
/// <summary>
/// 关于
/// </summary>
public partial class AboutView : Window
{
AboutViewModel viewModel = new AboutViewModel();
public AboutView()
{
InitializeComponent();
this.DataContext = viewModel;
}
}
}

View File

@ -0,0 +1,40 @@
<Window xmlns:hc="https://handyorg.github.io/handycontrol" x:Class="货架标准上位机.RoleEditView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
Title="权限信息" Height="540" Width="450" ResizeMode="CanResize" Icon="/Resources/Logo.ico" WindowStartupLocation="CenterScreen">
<Grid Background="White" Margin="10,5">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<TextBox Grid.Row="0" x:Name="textBox" Style="{StaticResource TextBoxExtend}" hc:InfoElement.Placeholder="请输入角色名" hc:InfoElement.Title="角色名" hc:InfoElement.Necessary="True"></TextBox>
<TextBlock Grid.Row="1" Text="认证项" Margin="8,5"/>
<TreeView Grid.Row="2" x:Name="treeView" ItemsSource="{Binding DataList}">
<!--默认展开所有节点-->
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="True"/>
</Style>
</TreeView.ItemContainerStyle>
<!--绑定数据源-->
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<CheckBox Margin="1" IsChecked="{Binding IsSelect}" Content="{Binding Name}"/>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
<StackPanel Grid.Row="3" Margin="10" Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="qr" Margin="0,0,10,0" Padding="25,0" Style="{StaticResource ButtonPrimary}">确认</Button>
<Button Margin="0,0,10,0" Padding="25,0" Click="qx">取消</Button>
</StackPanel>
</Grid>
</Window>

View File

@ -0,0 +1,176 @@
using .ViewModel;
using HandyControl.Controls;
using HandyControl.Tools.Extension;
using Ping9719.WpfEx.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MessageBox = HandyControl.Controls.MessageBox;
using Window = System.Windows.Window;
using WCS.Model.ApiModel;
using WCS.Model.ApiModel.User;
using .Api;
using WCS.Model;
namespace
{
/// <summary>
/// 角色信息
/// </summary>
public partial class RoleEditView : Window
{
public RoleEditView()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <returns>true:成功false:取消</returns>
public static bool Show(RoleModel roleBase, CrudEnum crudEnum)
{
bool isOk = false;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
var view = new RoleEditView();
List<RoleEditTreeViewModel> dataList = new List<RoleEditTreeViewModel>();
try
{
if (crudEnum == CrudEnum.Read)
view.qr.IsEnabled = false;
view.textBox.Text = roleBase.Name;
dataList = RoleEditTreeViewModel.GetTreeViewModel(roleBase.Auths);
view.treeView.ItemsSource = dataList;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
view = null;
return;
}
view.qr.Click += (s, e) =>
{
try
{
var treeNode = dataList.ToTreeNode();
RoleModel newRole = new RoleModel()
{
Id = roleBase.Id,
IsAdmin = roleBase.IsAdmin,
Name = view.textBox.Text.Trim(),
Auths = treeNode.Where(o => o.IsSelect).Select(o => (int)o.Id).ToList(),
Time = roleBase.Time,
};
if (crudEnum == CrudEnum.Update)
{
if (string.IsNullOrEmpty(newRole.Name))
{
MessageBox.Show("请输入名称");
return;
}
try
{
var body = new AddRoleRequest<RoleModel>()
{
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
Role = newRole,
AddOrUpdate = AddOrUpdate.Update
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<object>>(LocalFile.Config.ApiIpHost + "user/addRole", body, "POST");
if (Result != null && Result.Code == 200)
{
isOk = true;
view.Close();
}
else
{
Growl.Error(Result?.Message);
}
}
catch (Exception ex)
{
Growl.Error("修改角色失败:" + ex.Message);
}
}
else if (crudEnum == CrudEnum.Create)
{
newRole.Id = 0;
newRole.Time = DateTime.Now;
if (string.IsNullOrEmpty(newRole.Name))
{
MessageBox.Show("请输入名称");
return;
}
try
{
var body = new AddRoleRequest<RoleModel>()
{
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
Role = newRole,
AddOrUpdate = AddOrUpdate.Add,
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<object>>(LocalFile.Config.ApiIpHost + "user/addRole", body, "POST");
if (Result != null && Result.Code == 200)
{
isOk = true;
view.Close();
}
else
{
Growl.Error(Result?.Message);
}
}
catch (Exception ex)
{
Growl.Error("新增角色失败:" + ex.Message);
}
}
else
{
MessageBox.Show("不支持此操作");
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
//isOk = true;
//view.Close();
};
view.ShowDialog();
view = null;
}));
return isOk;
}
private void qx(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}

View File

@ -0,0 +1,46 @@
<hc:Window x:Class="货架标准上位机.TipInputView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
Height="220" Width="360" WindowStyle="None" BorderThickness="0" Background="{x:Null}" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Opacity="0.95">
<hc:Window.Resources>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource ButtonDefault}">
<Setter Property="Padding" Value="25,0"></Setter>
</Style>
</ResourceDictionary>
</hc:Window.Resources>
<Border BorderBrush="Gray" Background="WhiteSmoke" CornerRadius="5" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid PreviewMouseLeftButtonDown="previewMouseLeftButtonDown" Background="Transparent">
</Grid>
<TextBlock Margin="5,0" Text="{Binding Title, FallbackValue=标题}" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<Button Grid.Column="1" Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityHiddenConverter}}" Style="{StaticResource ButtonIcon}" hc:IconElement.Geometry="{StaticResource CloseGeometry}" Click="closeClick"/>
</Grid>
<StackPanel Grid.Row="1" VerticalAlignment="Center">
<TextBox x:Name="tb1" Style="{StaticResource TextBoxExtend}" Margin="10,0" Grid.Row="1" hc:InfoElement.Placeholder="{Binding ContentHint, FallbackValue=请输入值}" hc:InfoElement.Title="{Binding Content, FallbackValue=我是内容}" hc:InfoElement.TitlePlacement="Top" VerticalAlignment="Center"/>
<hc:TransitioningContentControl x:Name="transit" TransitionMode="Bottom2TopWithFade" Visibility="Hidden">
<TextBlock x:Name="textBlock" Style="{StaticResource TextBlockDefaultDanger}" Margin="10,0" TextWrapping="Wrap" Text="{Binding ContentHint, FallbackValue=请输入内容}"></TextBlock>
</hc:TransitioningContentControl>
</StackPanel>
<hc:UniformSpacingPanel x:Name="spacingPanel" Grid.Row="2" Margin="5,0,5,10" Spacing="10" Width="auto" ChildWrapping="Wrap" HorizontalAlignment="Center">
<Button Content="确认" Name="qr"/>
</hc:UniformSpacingPanel>
</Grid>
</Border>
</hc:Window>

View File

@ -0,0 +1,194 @@
using .ViewModel;
using HandyControl.Controls;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Media;
using System.Runtime.CompilerServices;
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.Shapes;
using Window = System.Windows.Window;
namespace
{
/// <summary>
/// 提示框
/// </summary>
public partial class TipInputView : HandyControl.Controls.Window
{
public TipInputView()
{
InitializeComponent();
}
private void closeClick(object sender, RoutedEventArgs e)
{
this.Close();
}
/// <summary>
/// 显示输入提示框并尝试转为指定类型
/// </summary>
/// <typeparam name="T">目标类型</typeparam>
/// <param name="content">内容</param>
/// <param name="verify">验证委托</param>
/// <param name="isVisCloseBut">是否显示关闭按钮</param>
/// <param name="owner">窗体所有者</param>
/// <returns>输入的内容关闭为null</returns>
public static T? Show<T>(string content, Func<T, string> verify = null, bool isVisCloseBut = true, Window owner = null) where T : struct
{
return Show<T>(content, string.Empty, "请输入值", verify, isVisCloseBut, owner);
}
/// <summary>
/// 显示输入提示框并尝试转为指定类型
/// </summary>
/// <typeparam name="T">目标类型</typeparam>
/// <param name="content">内容</param>
/// <param name="title">标题</param>
/// <param name="contentHint">内部内容</param>
/// <param name="verify">验证委托</param>
/// <param name="isVisCloseBut">是否显示关闭按钮</param>
/// <param name="owner">窗体所有者</param>
/// <returns>输入的内容关闭为null</returns>
public static T? Show<T>(string content, string title, string contentHint = "请输入值", Func<T, string> verify = null, bool isVisCloseBut = true, Window owner = null) where T : struct
{
TipInputView? tipView;
T? rval = null;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
tipView = new TipInputView();
tipView.tb1.KeyDown += (s, e) =>
{
if (e.Key == Key.Enter)
{
e.Handled = true;
tipView.qr.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
};
tipView.qr.Click += (sender, e) =>
{
if (string.IsNullOrWhiteSpace(tipView.tb1.Text))
{
tipView.TsTxtx("请填写文本。");
return;
}
T val;
try
{
val = (T)Convert.ChangeType(tipView.tb1.Text, typeof(T));
}
catch (Exception)
{
tipView.TsTxtx($"无法将值{tipView.tb1.Text}换为{typeof(T).Name}。");
return;
}
var ts = verify?.Invoke(val);
if (!string.IsNullOrEmpty(ts))
{
tipView.TsTxtx(ts);
return;
}
rval = val;
tipView.Close();
};
tipView.DataContext = new { Title = title, Content = content, ContentHint = contentHint, IsClose = isVisCloseBut };
tipView.Owner = owner == null ? System.Windows.Application.Current.MainWindow : owner;
tipView.tb1.Focus();
tipView.ShowDialog();
tipView = null;
}));
return rval;
}
/// <summary>
/// 显示输入提示框
/// </summary>
/// <param name="content">内容</param>
/// <param name="verify">验证委托</param>
/// <param name="isVisCloseBut">是否显示关闭按钮</param>
/// <param name="owner">窗体所有者</param>
/// <returns>输入的文本关闭为null</returns>
public static string Show(string content, Func<string, string> verify = null, bool isVisCloseBut = true, Window owner = null)
{
return Show(content, string.Empty, "请输入值", verify, isVisCloseBut, owner);
}
/// <summary>
/// 显示输入提示框
/// </summary>
/// <param name="content">内容</param>
/// <param name="title">标题</param>
/// <param name="contentHint">内部内容</param>
/// <param name="verify">验证委托</param>
/// <param name="isVisCloseBut">是否显示关闭按钮</param>
/// <param name="owner">窗体所有者</param>
/// <returns>输入的文本关闭为null</returns>
public static string Show(string content, string title, string contentHint = "请输入值", Func<string, string> verify = null, bool isVisCloseBut = true, Window owner = null)
{
TipInputView? tipView;
string? rval = null;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
tipView = new TipInputView();
tipView.tb1.KeyDown += (s, e) =>
{
if (e.Key == Key.Enter)
{
e.Handled = true;
tipView.qr.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
}
};
tipView.qr.Click += (sender, e) =>
{
if (string.IsNullOrWhiteSpace(tipView.tb1.Text))
{
tipView.TsTxtx("请填写文本。");
return;
}
var ts = verify?.Invoke(tipView.tb1.Text);
if (!string.IsNullOrEmpty(ts))
{
tipView.TsTxtx(ts);
return;
}
rval = tipView.tb1.Text;
tipView.Close();
};
tipView.DataContext = new { Title = title, Content = content, ContentHint = contentHint, IsClose = isVisCloseBut };
tipView.Owner = owner == null ? System.Windows.Application.Current.MainWindow : owner;
tipView.tb1.Focus();
tipView.ShowDialog();
tipView = null;
}));
return rval!;
}
private void TsTxtx(string text)
{
transit.Visibility = Visibility.Hidden;
textBlock.Text = text;
transit.Visibility = Visibility.Visible;
}
private void previewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DragMove();
}
}
}

View File

@ -0,0 +1,42 @@
<hc:Window x:Class="货架标准上位机.TipView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
xmlns:hc="https://handyorg.github.io/handycontrol"
Height="300" Width="520" WindowStyle="None" BorderThickness="0" Background="{x:Null}" AllowsTransparency="True" WindowStartupLocation="CenterScreen" Opacity="0.95">
<hc:Window.Resources>
<ResourceDictionary>
<Style TargetType="Button" BasedOn="{StaticResource ButtonDefault}">
<Setter Property="Padding" Value="25,0"></Setter>
</Style>
</ResourceDictionary>
</hc:Window.Resources>
<Border BorderBrush="Gray" Background="WhiteSmoke" CornerRadius="5" BorderThickness="1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid VerticalAlignment="Top">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"></ColumnDefinition>
<ColumnDefinition Width="auto"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid PreviewMouseLeftButtonDown="previewMouseLeftButtonDown" Background="Transparent">
</Grid>
<TextBlock Margin="5,0" Text="{Binding Title, FallbackValue=标题}" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<Button Grid.Column="1" Visibility="{Binding IsClose,Converter={StaticResource Boolean2VisibilityHiddenConverter}}" Style="{StaticResource ButtonIcon}" hc:IconElement.Geometry="{StaticResource CloseGeometry}" Click="closeClick"/>
</Grid>
<TextBlock Margin="5,0" Grid.Row="1" Text="{Binding Content, FallbackValue=我是内容}" FontSize="18" TextWrapping="Wrap" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<hc:UniformSpacingPanel x:Name="spacingPanel" Grid.Row="2" Margin="5,0,5,10" Spacing="10" Width="auto" ChildWrapping="Wrap" HorizontalAlignment="Center">
<Button Content="确认"/>
<Button Content="取消"/>
</hc:UniformSpacingPanel>
</Grid>
</Border>
</hc:Window>

View File

@ -0,0 +1,116 @@
using .ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Media;
using System.Runtime.CompilerServices;
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.Shapes;
namespace
{
/// <summary>
/// 提示框
/// </summary>
public partial class TipView : HandyControl.Controls.Window
{
public TipView()
{
InitializeComponent();
}
private void closeClick(object sender, RoutedEventArgs e)
{
this.Close();
}
/// <summary>
/// 显示提示框
/// </summary>
/// <param name="content">内容</param>
/// <param name="isVisCloseBut">界面右上角是否显示关闭按钮</param>
/// <returns>点击的按钮文本</returns>
public static string Show(string content, bool isVisCloseBut = true, Window owner = null)
{
return Show(content, string.Empty, isVisCloseBut);
}
/// <summary>
/// 显示提示框
/// </summary>
/// <param name="content">内容</param>
/// <param name="title">标题</param>
/// <param name="isVisCloseBut">界面右上角是否显示关闭按钮</param>
/// <returns>点击的按钮文本</returns>
public static string Show(string content, string title, bool isVisCloseBut = true, Window owner = null)
{
return Show(content, title, new string[] { "确认" }, isVisCloseBut);
}
/// <summary>
/// 显示提示框
/// </summary>
/// <param name="content">内容</param>
/// <param name="buttons">按钮内容</param>
/// <param name="isVisCloseBut">界面右上角是否显示关闭按钮</param>
/// <returns>点击的按钮文本</returns>
public static string Show(string content, IEnumerable<string> buttons, bool isVisCloseBut = true, Window owner = null)
{
return Show(content, string.Empty, buttons, isVisCloseBut);
}
/// <summary>
/// 显示提示框
/// </summary>
/// <param name="content">内容</param>
/// <param name="title">标题</param>
/// <param name="buttons">按钮内容</param>
/// <param name="isVisCloseBut">界面右上角是否显示关闭按钮</param>
/// <returns>点击的按钮文本</returns>
public static string Show(string content, string title, IEnumerable<string> buttons, bool isVisCloseBut = true, Window owner = null)
{
TipView? tipView;
string clikename = string.Empty;
Application.Current.Dispatcher.Invoke(new Action(() =>
{
tipView = new TipView();
tipView.DataContext = new { Title = title, Content = content, IsClose = isVisCloseBut };
tipView.spacingPanel.Children.Clear();
foreach (var item in buttons)
{
Button button = new Button()
{
Content = item,
};
button.Click += (s, e) =>
{
clikename = ((Button)s).Content.ToString();
tipView.Close();
};
tipView.spacingPanel.Children.Add(button);
}
tipView.Owner = owner == null ? System.Windows.Application.Current.MainWindow : owner;
tipView.ShowDialog();
tipView = null;
}));
return clikename;
}
private void previewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DragMove();
}
}
}

View File

@ -0,0 +1,28 @@
<Window xmlns:hc="https://handyorg.github.io/handycontrol" x:Class="货架标准上位机.UserEditView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
Title="用户管理信息" Height="300" Width="550" ResizeMode="NoResize" Icon="/Resources/Logo.ico" WindowStartupLocation="CenterScreen">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<hc:ScrollViewer IsInertiaEnabled="True" hc:ScrollViewerAttach.AutoHide="False">
<hc:UniformSpacingPanel Margin="20,10" Spacing="10" Orientation="Vertical">
<TextBox x:Name="textBox" Style="{StaticResource TextBoxExtend}" hc:InfoElement.Placeholder="请输入用户名" hc:InfoElement.Title="用户名" hc:InfoElement.Necessary="True"></TextBox>
<PasswordBox x:Name="passwordBox" Style="{StaticResource PasswordBoxExtend}" hc:InfoElement.Placeholder="请输入密码" hc:InfoElement.Title="密码"></PasswordBox>
<hc:CheckComboBox x:Name="checkComboBox" Style="{StaticResource CheckComboBoxPlus}" ShowSelectAllButton="True" hc:InfoElement.Placeholder="请选择角色" hc:InfoElement.Title="角色"/>
</hc:UniformSpacingPanel>
</hc:ScrollViewer>
<StackPanel Grid.Row="1" Margin="10" Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Name="qr" Margin="0,0,10,0" Padding="25,0" Style="{StaticResource ButtonPrimary}">确认</Button>
<Button Margin="0,0,10,0" Padding="25,0" Click="qx">取消</Button>
</StackPanel>
</Grid>
</Window>

View File

@ -0,0 +1,219 @@
using .ViewModel;
using HandyControl.Controls;
using HandyControl.Tools.Extension;
using Ping9719.WpfEx.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using MessageBox = HandyControl.Controls.MessageBox;
using Window = System.Windows.Window;
using .Views.Controls;
using WCS.Model.ApiModel.User;
using WCS.Model;
using .Api;
using WCS.Model.ApiModel;
namespace
{
/// <summary>
/// 用户信息
/// </summary>
public partial class UserEditView : Window
{
public UserEditView()
{
InitializeComponent();
}
/// <summary>
///
/// </summary>
/// <returns>true:成功false:取消</returns>
public static bool Show(UserModel userBase, CrudEnum crudEnum)
{
bool isOk = false;
var roleList = new List<RoleModel>();
//调用接口获取权限列表
var dia = Dialog.Show(new TextDialog());
try
{
var body = new GetUsersRequest()
{
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
Info = string.Empty,
};
var Result = ApiHelp.GetDataFromHttp<ResponseBase<List<RoleModel>>>(LocalFile.Config.ApiIpHost + "user/getRoles", body, "POST");
if (Result != null && Result.Data != null)
{
roleList = Result.Data;
}
}
catch (Exception ex)
{
Growl.Error("加载数据失败:" + ex.Message);
}
finally
{
dia.Close();
}
Application.Current.Dispatcher.Invoke(new Action(() =>
{
var view = new UserEditView();
try
{
if (crudEnum == CrudEnum.Read)
view.qr.IsEnabled = false;
var rs = roleList.Where(o => !o.IsAdmin).ToList();
view.textBox.Text = userBase.LoginName;
view.passwordBox.Password = userBase.Password;
view.checkComboBox.ItemsSource = rs;
view.checkComboBox.DisplayMemberPath = nameof(RoleModel.Name);
view.checkComboBox.SelectedValuePath = nameof(RoleModel.Id);
//var aaa = rs.Where(o => userBase.RoleIds.Contains(o.Id)).ToList();
//ListBoxAttach.SetSelectedItems(view.checkComboBox, aaa);
foreach (var item in userBase.RoleIds)
{
var aaa = rs.FirstOrDefault(o => o.Id == item);
if (aaa != null)
view.checkComboBox.SelectedItems.Add(aaa);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
view = null;
return;
}
view.qr.Click += (s, e) =>
{
try
{
UserModel newuser = new UserModel()
{
Id = userBase.Id,
IsAdmin = userBase.IsAdmin,
LoginName = view.textBox.Text.Trim(),
Password = view.passwordBox.Password,
RoleIds = view.checkComboBox.SelectedItems.Cast<RoleModel>().Select(o => o.Id).ToList(),
Time = userBase.Time,
};
if (crudEnum == CrudEnum.Update)
{
if (string.IsNullOrEmpty(newuser.LoginName))
{
MessageBox.Show("请输入名称");
return;
}
try
{
var body = new AddUserRequest<UserModel>()
{
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
User = newuser,
AddOrUpdate = AddOrUpdate.Update
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<object>>(LocalFile.Config.ApiIpHost + "user/addUser", body, "POST");
if (Result != null && Result.Code == 200)
{
isOk = true;
view.Close();
}
else
{
Growl.Error(Result.Message);
}
}
catch (Exception ex)
{
Growl.Error("更新数据失败:" + ex.Message);
}
}
else if (crudEnum == CrudEnum.Create)
{
newuser.Id = 0;
newuser.Time = DateTime.Now;
if (string.IsNullOrEmpty(newuser.LoginName))
{
MessageBox.Show("请输入名称");
return;
}
//调用接口获取权限列表
try
{
var body = new AddUserRequest<UserModel>()
{
UserName = LocalStatic.CurrentUser,
DeviceType = LocalFile.Config.DeviceType,
User = newuser,
AddOrUpdate = AddOrUpdate.Add
};
var Result = ApiHelp.GetDataFromHttp<ResponseCommon<object>>(LocalFile.Config.ApiIpHost + "user/addUser", body, "POST");
if (Result != null && Result.Code == 200)
{
isOk = true;
view.Close();
}
else
{
Growl.Error(Result.Message);
}
}
catch (Exception ex)
{
Growl.Error("新增用户失败:" + ex.Message);
}
}
else
{
MessageBox.Show("不支持此操作");
return;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return;
}
//isOk = true;
//view.Close();
};
view.ShowDialog();
view = null;
}));
return isOk;
}
private void qx(object sender, RoutedEventArgs e)
{
this.Close();
}
}
}

View File

@ -0,0 +1,30 @@
<Window xmlns:hc="https://handyorg.github.io/handycontrol" x:Class="货架标准上位机.UserInfoView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
Title="用户信息" Height="380" Width="400" ResizeMode="NoResize" FontSize="18" Icon="/Resources/Logo.ico" WindowStartupLocation="CenterScreen">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="StackPanelInfo" Orientation="Horizontal">
<Image Margin="60,15,10,15" HorizontalAlignment="Left" Width="80" Height="80" Source="/Resources/Logo.png"></Image>
<!--盟讯-->
<TextBlock Margin="10,30,10,0" Text="{StaticResource AboutInfo1}" FontSize="28" FontFamily="YouYuan" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
<TextBlock Margin="-55,30,-55,10" Text="{StaticResource AboutInfo2}" FontSize="28" FontFamily="YouYuan" VerticalAlignment="Bottom" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
</StackPanel>
<!--使用此方式布局可以注释掉退出登录也不影响-->
<StackPanel Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">
<hc:Gravatar Margin="0,0,0,10" Grid.Row="1" Style="{StaticResource GravatarCircleImg}">
<TextBlock Text="&#xe649;" TextAlignment="Center" FontSize="65" Foreground="Gray" FontFamily="{StaticResource IconFont}"></TextBlock>
</hc:Gravatar>
<TextBlock Margin="0,10,0,20" HorizontalAlignment="Center" Text="{Binding LoginName,FallbackValue=admin}"></TextBlock>
<Button Margin="0,0,0,10" Background="SteelBlue" Content="退出登录" Width="220" Height="55" Foreground="WhiteSmoke" FontSize="22" HorizontalAlignment="Stretch" Click="tcdl"></Button>
</StackPanel>
</Grid>
</Window>

View File

@ -0,0 +1,45 @@
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.Shapes;
using WCS.Model.ApiModel;
namespace
{
/// <summary>
/// 用户信息
/// </summary>
public partial class UserInfoView : Window
{
public static UserInfoViewModel viewModel = new UserInfoViewModel();
/// <summary>
/// 点击退出登录
/// </summary>
public bool IsExitLogin = false;
public UserInfoView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void tcdl(object sender, RoutedEventArgs e)
{
IsExitLogin = true;
viewModel.IsLogin = false;
viewModel.User = null;
viewModel.Roles = new List<RoleModel>();
this.Close();
}
}
}

View File

@ -0,0 +1,27 @@
<Window xmlns:hc="https://handyorg.github.io/handycontrol" x:Class="货架标准上位机.UserLoginView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:货架标准上位机"
mc:Ignorable="d"
Title="登录" Height="440" Width="400" ResizeMode="NoResize" FontSize="18"
PreviewKeyDown="Window_PreviewKeyDown" Icon="/Resources/Logo.ico" WindowStartupLocation="CenterScreen" Loaded="load">
<Grid Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="130"/>
<RowDefinition Height="80"/>
<RowDefinition Height="80"/>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<StackPanel x:Name="StackPanelInfo" Orientation="Horizontal">
<Image Margin="60,15,10,15" HorizontalAlignment="Left" Width="80" Height="80" Source="/Resources/Logo.png"></Image>
<!--盟讯-->
<TextBlock Margin="0,30" Text="{StaticResource AboutInfo1}" FontSize="28" FontFamily="YouYuan" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
<TextBlock Margin="-58,30" Text="{StaticResource AboutInfo2}" FontSize="28" FontFamily="YouYuan" VerticalAlignment="Bottom" Foreground="SteelBlue" FontWeight="UltraBold"></TextBlock>
</StackPanel>
<ComboBox x:Name="ComboBoxId" Grid.Row="1" Margin="20,10" Height="50" Width="220" Text="admin" IsEditable="True" hc:InfoElement.Placeholder="输入账号" Style="{StaticResource ComboBoxExtend}" hc:InfoElement.ContentHeight="50"></ComboBox>
<PasswordBox x:Name="PasswordBoxPass" Grid.Row="2" Height="50" Width="220" Margin="20,10" hc:InfoElement.Placeholder="输入密码" Style="{StaticResource PasswordBoxExtend}"></PasswordBox>
<Button Background="SteelBlue" Content="登录" Width="220" Foreground="WhiteSmoke" FontSize="22" Height="55" Grid.Row="3" HorizontalAlignment="Stretch" Click="Button_Click"></Button>
</Grid>
</Window>

View File

@ -0,0 +1,173 @@
using .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.Shapes;
using HandyControl.Controls;
using .Views.Controls;
using WCS.Model.ApiModel.User;
using .Api;
using WCS.Model;
using Newtonsoft.Json;
using SqlSugar;
using WCS.Model.ApiModel;
namespace
{
/// <summary>
/// 用户登录
/// </summary>
public partial class UserLoginView : System.Windows.Window
{
UserInfoViewModel viewModel = UserInfoView.viewModel;
public UserLoginView()
{
InitializeComponent();
this.DataContext = viewModel;
}
private void load(object sender, RoutedEventArgs e)
{
//登录记忆
if (LocalFile.Config.Sys.IsSaveLogin && LocalFile.Config.Sys.SaveLogin.Any())
{
ComboBoxId.ItemsSource = LocalFile.Config.Sys.SaveLogin;
ComboBoxId.SelectedIndex = 0;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var loginName = ComboBoxId.Text.Trim();
var pass = PasswordBoxPass.Password.ToString();
if (string.IsNullOrEmpty(loginName))
{
HandyControl.Controls.MessageBox.Warning("请输入账号!", "提示");
return;
}
if (string.IsNullOrEmpty(pass))
{
HandyControl.Controls.MessageBox.Warning("请输入密码!", "提示");
return;
}
try
{
try
{
var body = new UserLoginRequest()
{
UserName = loginName,
DeviceType = LocalFile.Config.DeviceType,
PassWord = pass,
IsNoLogin = false,
};
var Result = ApiHelp.GetDataFromHttp<ResponseBase<UserModel>>(LocalFile.Config.ApiIpHost + "user/userLogin",
body, "POST");
if (Result.Code != 200 || Result.Data == null)
{
HandyControl.Controls.MessageBox.Warning(Result.Message, "提示");
return;
}
else
{
viewModel.User = Result.Data;
}
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Warning($"登录发生异常:{ex.Message}", "提示");
return;
}
//登录记忆
if (LocalFile.Config.Sys.IsSaveLogin)
{
LocalFile.Config.Sys.SaveLogin.RemoveAll(t => t == loginName);
LocalFile.Config.Sys.SaveLogin.Insert(0, loginName);
LocalFile.Config.Sys.SaveLogin = LocalFile.Config.Sys.SaveLogin.Take(LocalFile.Config.Sys.SaveLoginCount).ToList();
LocalFile.SaveConfig();
}
viewModel.Roles = viewModel.User?.GetRoles;
viewModel.IsLogin = true;
LocalStatic.CurrentUser = loginName;
this.DialogResult = true;
this.Close();
}
catch (Exception ex)
{
HandyControl.Controls.MessageBox.Error(ex.Message, "错误");
return;
}
}
private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
Button_Click(null, null);
}
else if (e.Key == Key.Escape)
{
this.Close();
}
}
/// <summary>
/// 不登录,直接使用最高权限
/// </summary>
public static void NotLogin()
{
try
{
var body = new GetUsersRequest()
{
UserName = "未登录",
DeviceType = "WCS前端",
Info = "admin",
};
var Result = ApiHelp.Post<ResponseCommon<List<UserModel>>>([LocalFile.Config.ApiIpHost, "user/getUsers"], body).Result;
if (Result != null && Result.Data.Any())
{
UserInfoView.viewModel.User = Result.Data.First();
}
var bodyRole = new GetUsersRequest()
{
UserName = "未登录",
DeviceType = "WCS前端",
Info = string.Empty,
};
var ResultRole = ApiHelp.Post<ResponseCommon<List<RoleModel>>>([LocalFile.Config.ApiIpHost, "user/getRoles"], body).Result;
if (ResultRole != null && ResultRole.Data.Any())
{
UserInfoView.viewModel.Roles = ResultRole.Data;
}
UserInfoView.viewModel.IsLogin = true;
}
catch (Exception ex)
{
Growl.Error("加载数据失败:" + ex.Message);
}
finally
{
//dia.Close();
}
}
//接口获取User对象
}
}