@@ -123,6 +123,52 @@ | |||||
</Setter.Value> | </Setter.Value> | ||||
</Setter> | </Setter> | ||||
</Style> | </Style> | ||||
<SolidColorBrush x:Key="TextBox.Static.Border" Color="#FFABAdB3"/> | |||||
<SolidColorBrush x:Key="TextBox.MouseOver.Border" Color="#FF7EB4EA"/> | |||||
<SolidColorBrush x:Key="TextBox.Focus.Border" Color="#FF569DE5"/> | |||||
<Style TargetType="{x:Type PasswordBox}"> | |||||
<Setter Property="PasswordChar" Value="●"/> | |||||
<Setter Property="Background" Value="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"/> | |||||
<Setter Property="BorderBrush" Value="{StaticResource TextBox.Static.Border}"/> | |||||
<Setter Property="Foreground" Value="#FF02C9FD"/> | |||||
<Setter Property="BorderThickness" Value="1"/> | |||||
<Setter Property="KeyboardNavigation.TabNavigation" Value="None"/> | |||||
<Setter Property="HorizontalContentAlignment" Value="Left"/> | |||||
<Setter Property="FocusVisualStyle" Value="{x:Null}"/> | |||||
<Setter Property="AllowDrop" Value="true"/> | |||||
<Setter Property="ScrollViewer.PanningMode" Value="VerticalFirst"/> | |||||
<Setter Property="Stylus.IsFlicksEnabled" Value="False"/> | |||||
<Setter Property="CaretBrush" Value="White" /> | |||||
<Setter Property="Template"> | |||||
<Setter.Value> | |||||
<ControlTemplate TargetType="{x:Type PasswordBox}"> | |||||
<Border x:Name="border" BorderThickness="{TemplateBinding BorderThickness}" SnapsToDevicePixels="True" BorderBrush="#FF08335F"> | |||||
<ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden"/> | |||||
</Border> | |||||
<ControlTemplate.Triggers> | |||||
<Trigger Property="IsEnabled" Value="false"> | |||||
<Setter Property="Opacity" TargetName="border" Value="0.56"/> | |||||
</Trigger> | |||||
<Trigger Property="IsMouseOver" Value="true"> | |||||
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.MouseOver.Border}"/> | |||||
</Trigger> | |||||
<Trigger Property="IsKeyboardFocused" Value="true"> | |||||
<Setter Property="BorderBrush" TargetName="border" Value="{StaticResource TextBox.Focus.Border}"/> | |||||
</Trigger> | |||||
</ControlTemplate.Triggers> | |||||
</ControlTemplate> | |||||
</Setter.Value> | |||||
</Setter> | |||||
<Style.Triggers> | |||||
<MultiTrigger> | |||||
<MultiTrigger.Conditions> | |||||
<Condition Property="IsInactiveSelectionHighlightEnabled" Value="true"/> | |||||
<Condition Property="IsSelectionActive" Value="false"/> | |||||
</MultiTrigger.Conditions> | |||||
<Setter Property="SelectionBrush" Value="{DynamicResource {x:Static SystemColors.InactiveSelectionHighlightBrushKey}}"/> | |||||
</MultiTrigger> | |||||
</Style.Triggers> | |||||
</Style> | |||||
<Style x:Key="ExpanderUpHeaderStyle" TargetType="{x:Type ToggleButton}"> | <Style x:Key="ExpanderUpHeaderStyle" TargetType="{x:Type ToggleButton}"> | ||||
<Setter Property="Template"> | <Setter Property="Template"> | ||||
<Setter.Value> | <Setter.Value> | ||||
@@ -0,0 +1,80 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Linq; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
namespace BPASmartClient.Helper | |||||
{ | |||||
/// <summary> | |||||
/// 创建AES加密解密 add fyf 20211122 | |||||
/// </summary> | |||||
public class AESHelper | |||||
{ | |||||
/// <summary> | |||||
/// 默认密钥-密钥的长度必须是32 | |||||
/// </summary> | |||||
private const string PublicKey = "9848461354184618"; | |||||
/// <summary> | |||||
/// 默认向量 | |||||
/// </summary> | |||||
private const string Iv = "dfkladnasldnfdcv"; | |||||
/// <summary> | |||||
/// AES加密 | |||||
/// </summary> | |||||
/// <param name="str">需要加密字符串</param> | |||||
/// <returns>加密后字符串</returns> | |||||
public static String Encrypt(string str) | |||||
{ | |||||
return Encrypt(str, PublicKey); | |||||
} | |||||
/// <summary> | |||||
/// AES解密 | |||||
/// </summary> | |||||
/// <param name="str">需要解密字符串</param> | |||||
/// <returns>解密后字符串</returns> | |||||
public static String Decrypt(string str) | |||||
{ | |||||
return Decrypt(str, PublicKey); | |||||
} | |||||
/// <summary> | |||||
/// AES加密 | |||||
/// </summary> | |||||
/// <param name="str">需要加密的字符串</param> | |||||
/// <param name="key">32位密钥</param> | |||||
/// <returns>加密后的字符串</returns> | |||||
public static string Encrypt(string str, string key) | |||||
{ | |||||
Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); | |||||
Byte[] toEncryptArray = System.Text.Encoding.UTF8.GetBytes(str); | |||||
var rijndael = new System.Security.Cryptography.RijndaelManaged(); | |||||
rijndael.Key = keyArray; | |||||
rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; | |||||
rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; | |||||
rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv); | |||||
System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateEncryptor(); | |||||
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); | |||||
return Convert.ToBase64String(resultArray, 0, resultArray.Length); | |||||
} | |||||
/// <summary> | |||||
/// AES解密 | |||||
/// </summary> | |||||
/// <param name="str">需要解密的字符串</param> | |||||
/// <param name="key">32位密钥</param> | |||||
/// <returns>解密后的字符串</returns> | |||||
public static string Decrypt(string str, string key) | |||||
{ | |||||
Byte[] keyArray = System.Text.Encoding.UTF8.GetBytes(key); | |||||
Byte[] toEncryptArray = Convert.FromBase64String(str); | |||||
var rijndael = new System.Security.Cryptography.RijndaelManaged(); | |||||
rijndael.Key = keyArray; | |||||
rijndael.Mode = System.Security.Cryptography.CipherMode.ECB; | |||||
rijndael.Padding = System.Security.Cryptography.PaddingMode.PKCS7; | |||||
rijndael.IV = System.Text.Encoding.UTF8.GetBytes(Iv); | |||||
System.Security.Cryptography.ICryptoTransform cTransform = rijndael.CreateDecryptor(); | |||||
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length); | |||||
return System.Text.Encoding.UTF8.GetString(resultArray); | |||||
} | |||||
} | |||||
} |
@@ -3,7 +3,7 @@ | |||||
<appSettings> | <appSettings> | ||||
<!--通用配置--> | <!--通用配置--> | ||||
<!--1:且时且多冰淇淋咖啡机,2:且时且多煮面机,3:海科煮面机测试店铺--> | <!--1:且时且多冰淇淋咖啡机,2:且时且多煮面机,3:海科煮面机测试店铺--> | ||||
<add key="ClientId" value="46"/> | |||||
<add key="ClientId" value="46232"/> | |||||
<!--<add key="ApolloUri" value="http://10.2.1.21:28080"/> | <!--<add key="ApolloUri" value="http://10.2.1.21:28080"/> | ||||
<add key="OrderServiceUri" value="http://10.2.1.26:21527/order/"/> | <add key="OrderServiceUri" value="http://10.2.1.26:21527/order/"/> | ||||
<add key="StockServiceUri" value="http://10.2.1.26:21527/stock/"/>--> | <add key="StockServiceUri" value="http://10.2.1.26:21527/stock/"/>--> | ||||
@@ -47,9 +47,10 @@ | |||||
<add key="ProductKey" value="grgpECHSL7q"/> | <add key="ProductKey" value="grgpECHSL7q"/> | ||||
<add key="DeviceName" value="qsqd"/> | <add key="DeviceName" value="qsqd"/> | ||||
<add key="DeviceSecret" value="3c0f2390943bff4fece523af22655196"/> | <add key="DeviceSecret" value="3c0f2390943bff4fece523af22655196"/> | ||||
<add key="PasswordBox" value="6WrKhYmTIhLV7g24jIH/lg=="/> | |||||
<!--外设配置--> | |||||
<!--外设配置--> | |||||
<add key="COM_Coffee" value="COM3"/> | <add key="COM_Coffee" value="COM3"/> | ||||
<add key="BAUD_Coffee" value="115200"/> | <add key="BAUD_Coffee" value="115200"/> | ||||
<add key="COM_IceCream" value="COM12"/> | <add key="COM_IceCream" value="COM12"/> | ||||
@@ -16,9 +16,11 @@ | |||||
</UserControl.Resources> | </UserControl.Resources> | ||||
<Grid> | <Grid> | ||||
<Grid.ColumnDefinitions> | <Grid.ColumnDefinitions> | ||||
<ColumnDefinition Width="*"></ColumnDefinition> | |||||
<ColumnDefinition Width="0.8*"></ColumnDefinition> | |||||
<ColumnDefinition Width="2*"></ColumnDefinition> | <ColumnDefinition Width="2*"></ColumnDefinition> | ||||
</Grid.ColumnDefinitions> | </Grid.ColumnDefinitions> | ||||
<StackPanel Grid.Column="0" Margin="10"> | <StackPanel Grid.Column="0" Margin="10"> | ||||
<StackPanel Orientation="Horizontal" Margin="0,10,0,0"> | <StackPanel Orientation="Horizontal" Margin="0,10,0,0"> | ||||
<TextBlock Width="80" FontSize="12">API查询地址:</TextBlock> | <TextBlock Width="80" FontSize="12">API查询地址:</TextBlock> | ||||
@@ -149,5 +151,13 @@ | |||||
</DataGrid> | </DataGrid> | ||||
</Grid> | </Grid> | ||||
<Grid x:Name="Pass" Grid.ColumnSpan="2" Background="#99020202"> | |||||
<StackPanel Orientation="Vertical" HorizontalAlignment="Center" VerticalAlignment="Center"> | |||||
<TextBlock Width="80" FontSize="16" Margin="0,0,0,5">密码解锁:</TextBlock> | |||||
<PasswordBox x:Name="passbox" Width="180" Height="22" ></PasswordBox> | |||||
<Button HorizontalAlignment="Right" Margin="0,5,0,0" Tag="OkPass" Click="Button_Click" Style="{DynamicResource CommonBtn_返回}" Width="45" IsDefault="True">确定</Button> | |||||
</StackPanel> | |||||
</Grid> | |||||
</Grid> | </Grid> | ||||
</UserControl> | </UserControl> |
@@ -1,5 +1,6 @@ | |||||
using BPASmartClient.CustomResource.UserControls; | using BPASmartClient.CustomResource.UserControls; | ||||
using BPASmartClient.CustomResource.UserControls.MessageShow; | using BPASmartClient.CustomResource.UserControls.MessageShow; | ||||
using BPASmartClient.Helper; | |||||
using BPASmartClient.IoT; | using BPASmartClient.IoT; | ||||
using BPASmartClient.ViewModel; | using BPASmartClient.ViewModel; | ||||
using DataVAPI.Tool.IOT; | using DataVAPI.Tool.IOT; | ||||
@@ -18,6 +19,7 @@ using System.Windows.Media; | |||||
using System.Windows.Media.Imaging; | using System.Windows.Media.Imaging; | ||||
using System.Windows.Navigation; | using System.Windows.Navigation; | ||||
using System.Windows.Shapes; | using System.Windows.Shapes; | ||||
using System.Windows.Threading; | |||||
namespace BPASmartClient.Control | namespace BPASmartClient.Control | ||||
{ | { | ||||
@@ -26,10 +28,24 @@ namespace BPASmartClient.Control | |||||
/// </summary> | /// </summary> | ||||
public partial class DataVView : UserControl | public partial class DataVView : UserControl | ||||
{ | { | ||||
string OnPass=string.Empty; | |||||
public DispatcherTimer dispatcherTimer; | |||||
public DataVView() | public DataVView() | ||||
{ | { | ||||
InitializeComponent(); | InitializeComponent(); | ||||
OnPass = AESHelper.Decrypt(System.Configuration.ConfigurationManager.AppSettings["PasswordBox"].ToString()); | |||||
this.DataContext = DataVViewModel.GetInstance(); | this.DataContext = DataVViewModel.GetInstance(); | ||||
dispatcherTimer = new DispatcherTimer(); | |||||
dispatcherTimer.Tick += delegate | |||||
{ | |||||
System.Windows.Application.Current?.Dispatcher.Invoke((Action)(() => | |||||
{ | |||||
Pass.Visibility = Visibility.Visible; | |||||
dispatcherTimer.Stop(); | |||||
})); | |||||
}; | |||||
dispatcherTimer.Interval = TimeSpan.FromSeconds(20); | |||||
} | } | ||||
private void Button_Click(object sender, RoutedEventArgs e) | private void Button_Click(object sender, RoutedEventArgs e) | ||||
@@ -107,7 +123,16 @@ namespace BPASmartClient.Control | |||||
DataVViewModel.GetInstance().Refresh(); | DataVViewModel.GetInstance().Refresh(); | ||||
} | } | ||||
} | } | ||||
break; | |||||
case "OkPass": | |||||
if (passbox.Password == OnPass) | |||||
{ | |||||
Pass.Visibility = Visibility.Collapsed; | |||||
passbox.Password = ""; | |||||
dispatcherTimer.Start(); | |||||
} | |||||
else | |||||
NoticeDemoViewModel.OpenMsg(EnumPromptType.Warn, MainViewModel.GetInstance().window, "提示", $"密码输入错误!"); | |||||
break; | break; | ||||
} | } | ||||
} | } | ||||