Commit c399aa0d authored by 姜春辉's avatar 姜春辉

完成度75%

parent b0057a76
Design @ d818dd2a
Subproject commit 23b4e1552047da6689d94e81b225bc6a85983f0f
Subproject commit d818dd2a50f8e4676ceb1e747fe55f9f84d28ad1
......@@ -31,6 +31,12 @@
</Style>
<!-- 系统名称-->
<Style x:Key="MainShell_LogoText" TargetType="TextBlock">
</Style>
<Style x:Key="MainShell_HeadLeft" TargetType="Grid">
<Setter Property="Width" Value="900"/>
</Style>
<Style x:Key="MainShell_HeadRight" TargetType="Grid">
<Setter Property="Grid.Column" Value="1"/>
</Style>
</ResourceDictionary>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
<appSettings>
<add key="WebPath" value="http://192.168.1.112:5000/"/>
<add key="tCode" value="LCFK"/>
</appSettings>
</configuration>
\ No newline at end of file
......@@ -15,6 +15,7 @@
</Declare>
<Datas>
<Data Description="获取人员有效预约单" Key="VisitorAvailableAppointment" ServiceUri="/api/GS.Sub.Vistor/VisitorSelfServiceTerminal/VisitorAvailableAppointment" />
<Data Description="提交预约单到访" Key="SubmitVisitInfo" ServiceUri="/api/GS.Sub.Vistor/VisitorSelfServiceTerminal/SubmitVisitInfo" />
</Datas>
</Structure>
</Structures>
......
using GS.Terminal.LogicShell.Interface;
using GS.Terminal.VisitorSelfService.Logic.Remote;
using GS.Terminal.VisitorSelfService.Logic.Remote.Models;
using GS.Terminal.VisitorSelfService.Logic.ThirdAddon;
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
......@@ -22,7 +25,48 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
private void VM_OnSubmitClick(AppointmentItem info)
{
var photoContent = "";
using (var photo = FaceRecognization.GetCurrentVideoFrame())
{
using (MemoryStream ms = new MemoryStream())
{
photo.Save(ms, ImageFormat.Jpeg);
photoContent = Convert.ToBase64String(ms.ToArray());
}
}
MainShell.ShowLoading("提交中...");
Submit(info.id, photoContent).ContinueWith(task =>
{
MainShell.HideLoading();
if (task.Result)
{
Handlers.GetHandler<SubmitVisitInfoResultHandler>()?.ShowView();
}
});
}
private async Task<bool> Submit(Guid appointmentId, string photo)
{
var serviceUrl = LocalSetting.ServiceList.GetSerivceUri("SubmitVisitInfo");
var result = await WebApi.PostAsync<WebApiResponseBody>(serviceUrl, new
{
LocalSetting.AppConfig.tCode,
appointmentId,
livePhoto = photo
});
if (result == null)
{
MainShell.ShowPrompt("通讯异常.请重试");
return false;
}
if (result.Status) return result.Status;
if (!result.Status && !string.IsNullOrEmpty(result.Message))
{
MainShell.ShowPrompt(result.Message);
return false;
}
MainShell.ShowPrompt("数据提交失败");
return false;
}
private void VM_OnExitClick()
......@@ -43,12 +87,13 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
VM.Datas = datas.Select(ss =>
{
var item = new AppointmentItem();
item.id = ss.id;
item.areaName = ss.visitArea;
item.beVisitPerson = ss.visitPerson;
item.endDate = ss.endDate;
item.idCardNum = ss.visitorIdNum;
item.phoneNum = ss.visitorPhone;
item.photoUrl = ss.photo;
item.photoUrl = productPhotoUrl(ss.photo);
item.startDate = ss.startDate;
item.visitorName = ss.visitorName;
item.visitPeople = ss.numberOfPeople;
......@@ -61,7 +106,7 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
items = g.Select(content => new ViewModels.Pages.AppointmentDetailPage.AppointmentExtendInfo
{
title = content.title,
content = content.content,
content = content.type == "image" ? productPhotoUrl(content.content) : content.content,
infotype = content.type
}).ToList()
}).ToList();
......@@ -72,5 +117,10 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
VM.Appointment = VM.Datas[0];
ShowView();
}
private string productPhotoUrl(string origin)
{
return $"{LocalSetting.AppConfig.WebPath.TrimEnd('/')}/FileStore/Image/{origin}?q=H";
}
}
}
using GalaSoft.MvvmLight.Threading;
using GS.Terminal.LogicShell.Interface;
using GS.Terminal.VisitorSelfService.Logic.ThirdAddon;
using Newtonsoft.Json;
using OpenCvSharp;
using OpenCvSharp.Extensions;
......@@ -33,13 +34,15 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
/*读取二代证任务*/
private WebSocket _faceWebSocket;
private bool _faceValidating = false;
private string _fid = "";
private byte[] _currentFeature = null;
public override void Init()
{
VM.OnExitClick += VM_OnExitClick;
VM.OnNavigateInto += VM_OnNavigateInto;
VM.OnNavigateOut += VM_OnNavigateOut;
VM.OnAuthModeChanged += VM_OnAuthModeChanged;
_FaceEngineId = ThirdAddon.FastRecognization.CreateFastFaceRecognized(null, null, null, 0.85f);
_FaceEngineId = ThirdAddon.FastRecognization.CreateFastFaceRecognized(null, FaceAlivness, null, 0.85f);
ThirdAddon.FastRecognization.Pause(_FaceEngineId);
ThirdAddon.FastRecognization.RegistFeatureExtracted(_FaceEngineId, FaceFeatureExtracted);
_secondCardReader = Task.Factory.StartNew(_SecondCardRead);
......@@ -59,7 +62,8 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
try
{
var result = JsonConvert.DeserializeObject<FaceValidateResult>(e.Message);
if (result?.result != null)
if (result?.result != null &&
result.score >= LocalSetting.AddonDefaultConfig.FaceMinValue)
{
_faceValidating = true;
if (_AuthSuccessCallback != null)
......@@ -72,10 +76,11 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
}
}
}
catch (Exception)
catch (Exception ex)
{
throw;
Program._Context.Logger.Error($"查询有效预约单异常", ex);
MainShell.ShowPrompt($"通讯异常");
_faceValidating = false;
}
}
......@@ -101,6 +106,7 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
_faceWebSocket.Open();
ThirdAddon.FaceRecognization.RegistOutPutMatEvent(VideoOut);
ThirdAddon.FastRecognization.Restart(_FaceEngineId);
_faceValidating = false;
}
else
{
......@@ -122,9 +128,21 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
private void FaceFeatureExtracted(byte[] feature, string fid)
{
if (!_faceValidating)
_faceWebSocket.Send(feature, 0, feature.Length);
{
_currentFeature = feature;
_fid = fid;
}
}
private void FaceAlivness(string fid, int result)
{
if (!_faceValidating)
{
if (fid == _fid && result == 1)
_faceWebSocket.Send(_currentFeature, 0, _currentFeature.Length);
}
}
/// <summary>
/// 开始进行身份认证
/// </summary>
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GS.Terminal.VisitorSelfService.Logic.Core
{
public class FootHandler : Corebase<ViewModels.Foot>
{
public override void Init()
{
VM.TCODE = LocalSetting.AppConfig.tCode;
}
}
}
......@@ -11,14 +11,14 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
{
public partial class MenuPageHandler
{
private async Task<List<Appointment>> Find(string key, AuthenticationMode mode)
private async Task<List<Appointment>> Find(string keyvalue, AuthenticationMode mode)
{
var type = "idnum";
if (mode == AuthenticationMode.QRCode)
type = "qrcode";
var serviceUrl = LocalSetting.ServiceList.GetSerivceUri("VisitorAvailableAppointment");
var result = await WebApi.GetTAsync<List<Appointment>>($"{serviceUrl}{(serviceUrl.Contains("?") ? "&" : "?")}searchkey={key}&searchvalue={type}");
return result;
var result = await WebApi.GetTAsync<WebApiCollectionResponseBody<Appointment>>($"{serviceUrl}{(serviceUrl.Contains("?") ? "&" : "?")}searchkey={type}&searchvalue={keyvalue}");
return result?.records;
}
}
}
......@@ -35,14 +35,18 @@ namespace GS.Terminal.VisitorSelfService.Logic.Core
private async Task<bool> AuthSuccess(AuthenticationMode mode, object data)
{
//((dynamic)data).cardid 身份证芯片号
MainShell.ShowLoading("正在查找");
var findResult = await Find(data.ToString(), mode);
MainShell.ShowPrompt($"查找完成");
var findResult = await Find(mode == AuthenticationMode.IdCard ? ((dynamic)data).number : data.ToString(), mode);
MainShell.HideLoading();
if (findResult?.Count > 0)
{
Handlers.GetHandler<AppointmentDetailPageHandler>()?.ShowDetail(findResult);
}
else
{
MainShell.ShowPrompt($"没有找到有效的预约单");
}
return findResult?.Count > 0;
}
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GS.Terminal.VisitorSelfService.Logic.Core
{
public class SubmitVisitInfoResultHandler : Corebase<ViewModels.Pages.SubmitVisitInfoResult.ViewModel>
{
public override void Init()
{
}
}
}
......@@ -109,16 +109,21 @@
<Compile Include="Core\AuthenticationPageHandler.cs" />
<Compile Include="Core\Corebase.cs" />
<Compile Include="Core\FeatureCompareHandler.cs" />
<Compile Include="Core\FootHandler.cs" />
<Compile Include="Core\HistoryAppointmentPageHandler.cs" />
<Compile Include="Core\HistoryMenuPageHandler.cs" />
<Compile Include="Core\HistoryVisitPageHandler.cs" />
<Compile Include="Core\MenuPageHandler.cs" />
<Compile Include="Core\MenuPageHandler.FindAppointment.cs" />
<Compile Include="Core\SubmitVisitInfoResultHandler.cs" />
<Compile Include="Handlers.cs" />
<Compile Include="LocalSetting.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Remote\Models\Appointment.cs" />
<Compile Include="Remote\Models\WebApiCollectionResponseBody.cs" />
<Compile Include="Remote\Models\WebApiPagingResponseBody.cs" />
<Compile Include="Remote\Models\WebApiResponseBody.cs" />
<Compile Include="Remote\WebApi.cs" />
<Compile Include="ThirdAddon\DeviceManager.cs" />
<Compile Include="ThirdAddon\FaceRecognization.cs" />
......
......@@ -31,7 +31,7 @@ namespace GS.Terminal.VisitorSelfService.Logic
{
public string WebPath { get; set; }
public string ServerIP { get; set; }
public string dCode { get; set; }
public string tCode { get; set; }
}
public class ServiceList : IStructureSetting<ServiceListItem>
......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GS.Terminal.VisitorSelfService.Logic.Remote.Models
{
public class WebApiCollectionResponseBody<RECORDT> : WebApiResponseBody
{
public List<RECORDT> records { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GS.Terminal.VisitorSelfService.Logic.Remote.Models
{
public class WebApiPagingResponseBody<RECORDT> : WebApiCollectionResponseBody<RECORDT>
{
public Paging paging { get; set; }
}
public class Paging
{
public int currentIndex { get; set; }
public int totalPage { get; set; }
public int totalRecord { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GS.Terminal.VisitorSelfService.Logic.Remote.Models
{
public class WebApiResponseBody
{
public bool Status { get; set; }
public string Message { get; set; }
}
}
......@@ -60,5 +60,13 @@ namespace GS.Terminal.VisitorSelfService.Logic.ThirdAddon
{
return _Service?.MathFaceData(origin, toMatch);
}
/// <summary>
/// 拍照
/// </summary>
/// <returns></returns>
public static Bitmap GetCurrentVideoFrame()
{
return _Service?.GetCurrentVideoFrame();
}
}
}
......@@ -12,6 +12,14 @@ namespace ViewModels
{
public string ViewID => "7ba312aa-b0a2-4136-badc-52e362ddedad";
private string _TCODE;
public string TCODE
{
get { return _TCODE; }
set { _TCODE = value; RaisePropertyChanged("TCODE"); }
}
public void Reset()
{
......
using GalaSoft.MvvmLight;
using GS.Terminal.LogicShell.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ViewModels
{
public class Head : ViewModelBase, IViewModel
{
public string ViewID => "e6e8e46f-c8e6-4f34-b088-bba5b9276276";
public void Reset()
{
}
}
}
......@@ -18,6 +18,7 @@ namespace ViewModels
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
CheckRegistVM<Foot>();
CheckRegistVM<Head>();
CheckRegistVM<Pages.MenuPage.ViewModel>();
CheckRegistVM<Pages.AuthenticationPage.ViewModel>();
CheckRegistVM<Pages.AppointmentDetailPage.ViewModel>();
......@@ -25,6 +26,7 @@ namespace ViewModels
CheckRegistVM<Pages.HistoryAppointmentPage.ViewModel>();
CheckRegistVM<Pages.HistoryMenuPage.ViewModel>();
CheckRegistVM<PopWindows.FeatureCompare.ViewModel>();
CheckRegistVM<Pages.SubmitVisitInfoResult.ViewModel>();
}
private void CheckRegistVM<T>() where T : class
......@@ -46,6 +48,13 @@ namespace ViewModels
}
}
public Head Head
{
get
{
return SimpleIoc.Default.GetInstance<Head>();
}
}
public Pages.MenuPage.ViewModel MenuPage
{
get
......@@ -101,5 +110,13 @@ namespace ViewModels
return SimpleIoc.Default.GetInstance<PopWindows.FeatureCompare.ViewModel>();
}
}
public Pages.SubmitVisitInfoResult.ViewModel SubmitVisitInfoResult
{
get
{
return SimpleIoc.Default.GetInstance<Pages.SubmitVisitInfoResult.ViewModel>();
}
}
}
}
......@@ -27,11 +27,20 @@ namespace ViewModels.Pages.AppointmentDetailPage
RaisePropertyChanged("Appointment");
RaisePropertyChanged(nameof(ShowLeftBtn));
RaisePropertyChanged(nameof(ShowRightBtn));
RaisePropertyChanged(nameof(HasExtendInfo));
ShowExtendInfo = Visibility.Collapsed;
}
}
private Visibility ShowLeftBtn
public bool HasExtendInfo
{
get
{
return Appointment?.extends?.Count > 0;
}
}
public Visibility ShowLeftBtn
{
get
{
......@@ -48,7 +57,7 @@ namespace ViewModels.Pages.AppointmentDetailPage
}
}
private Visibility ShowRightBtn
public Visibility ShowRightBtn
{
get
{
......@@ -73,6 +82,14 @@ namespace ViewModels.Pages.AppointmentDetailPage
set { _ShowExtendInfo = value; RaisePropertyChanged("ShowExtendInfo"); }
}
private bool _ShowConfirm;
public bool ShowConfirm
{
get { return _ShowConfirm; }
set { _ShowConfirm = value; RaisePropertyChanged("ShowConfirm"); }
}
public RelayCommand ShowExtendInfoCommand => new RelayCommand(() =>
{
......@@ -103,9 +120,21 @@ namespace ViewModels.Pages.AppointmentDetailPage
});
public event Action<AppointmentItem> OnSubmitClick;
public RelayCommand<AppointmentItem> SubmitCommand => new RelayCommand<AppointmentItem>(info =>
public RelayCommand SubmitCommand => new RelayCommand(() =>
{
ShowConfirm = true;
//OnSubmitClick?.Invoke(info);
});
public RelayCommand ConfirmClose => new RelayCommand(() =>
{
ShowConfirm = false;
});
public RelayCommand ConfirmYes => new RelayCommand(() =>
{
OnSubmitClick?.Invoke(info);
ShowConfirm = false;
OnSubmitClick?.Invoke(Appointment);
});
public void Reset()
......@@ -117,6 +146,7 @@ namespace ViewModels.Pages.AppointmentDetailPage
public class AppointmentItem
{
public Guid id { get; set; }
public string visitorName { get; set; }
public string photoUrl { get; set; }
public string idCardNum { get; set; }
......
using GalaSoft.MvvmLight;
using GS.Terminal.LogicShell.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ViewModels.Pages.SubmitVisitInfoResult
{
public class ViewModel : ViewModelBase, IViewModel
{
public string ViewID => "cc808936-9d19-4e9c-86b7-3620cedd72fe";
public void Reset()
{
}
}
}
......@@ -65,6 +65,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Foot.cs" />
<Compile Include="Head.cs" />
<Compile Include="Locator.cs" />
<Compile Include="Pages\AppointmentDetailPage\ViewModel.cs" />
<Compile Include="Pages\AuthenticationPage\ViewModel.cs" />
......@@ -72,6 +73,7 @@
<Compile Include="Pages\HistoryMenuPage\ViewModel.cs" />
<Compile Include="Pages\HistoryVisitPage\ViewModel.cs" />
<Compile Include="Pages\MenuPage\ViewModel.cs" />
<Compile Include="Pages\SubmitVisitInfoResult\ViewModel.cs" />
<Compile Include="PopWindows\FeatureCompare\ViewModel.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
......
......@@ -8,7 +8,7 @@
d:DesignHeight="45" d:DesignWidth="1080"
Title="Foot">
<Grid>
<TextBlock Text="设备编号: SYL106" Foreground="White" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="24"/>
<TextBlock Text="{Binding TCODE,StringFormat={}设备编号: {0}}" Foreground="White" HorizontalAlignment="Right" VerticalAlignment="Center" FontSize="24"/>
<TextBlock Text="青岛通软网络科技有限公司" Foreground="White" HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="24"/>
</Grid>
</Page>
<Page x:Class="Views.Head"
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"
mc:Ignorable="d"
d:DesignHeight="180" d:DesignWidth="800"
Title="Head">
<Grid>
<Border Width="100" Height="100" CornerRadius="50"
HorizontalAlignment="Right" Margin="0,0,30,0"
BorderThickness="4" BorderBrush="#4070ff">
<TextBlock Foreground="#4070ff" HorizontalAlignment="Center" VerticalAlignment="Center"
FontSize="60"
Text="59">
</TextBlock>
</Border>
</Grid>
</Page>
using GS.Terminal.LogicShell.Attributes;
using GS.Terminal.LogicShell.Interface;
using GS.Unitive.Framework.Security.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
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
{
/// <summary>
/// Head.xaml 的交互逻辑
/// </summary>
[MainShellPartView(PartType.HEAD)]
[Export(typeof(IView))]
[UnitiveView("头部", "", "e6e8e46f-c8e6-4f34-b088-bba5b9276276", null)]
public partial class Head : Page, IView
{
public Head()
{
InitializeComponent();
}
public void BindDataContext(IViewModel vm)
{
DataContext = vm;
}
public object Clone()
{
throw new NotImplementedException();
}
public void GoBack()
{
throw new NotImplementedException();
}
public void GoForward()
{
throw new NotImplementedException();
}
public void NavigateToContent(object content)
{
throw new NotImplementedException();
}
public void Reset()
{
throw new NotImplementedException();
}
}
}
......@@ -13,8 +13,34 @@
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Style.xaml"/>
</ResourceDictionary.MergedDictionaries>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
<Storyboard x:Key="SB_ConfirmIn">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="confirm">
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0">
<EasingDoubleKeyFrame.EasingFunction>
<BackEase EasingMode="EaseOut" Amplitude="1"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="SB_ConfirmOut">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="confirm">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.1" Value="475"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</ResourceDictionary>
</Page.Resources>
<Page.Triggers>
<EventTrigger RoutedEvent="ToggleButton.Checked" SourceName="chk_showconfirm">
<BeginStoryboard Storyboard="{StaticResource SB_ConfirmIn}"/>
</EventTrigger>
<EventTrigger RoutedEvent="ToggleButton.Unchecked" SourceName="chk_showconfirm">
<BeginStoryboard x:Name="SB_ConfirmOut_BeginStoryboard" Storyboard="{StaticResource SB_ConfirmOut}"/>
</EventTrigger>
</Page.Triggers>
<Grid>
<Grid Margin="0,110,0,0">
<Grid.RowDefinitions>
......@@ -34,22 +60,19 @@
<Border Grid.Column="1" CornerRadius="5"
Padding="31,31,31,0" BorderThickness="4" BorderBrush="#e5e4e6">
<StackPanel>
<Image Source="{Binding Appointment.photoUrl}" Width="260" Height="370"/>
<Image Source="{Binding Appointment.photoUrl}" Stretch="Fill" Width="260" Height="370"/>
<TextBlock Text="{Binding Appointment.visitorName}" FontSize="42" HorizontalAlignment="Center" Margin="0,5,0,0"/>
</StackPanel>
</Border>
<Button Width="100" Height="100" HorizontalAlignment="Left"
Command="{Binding ShowExtendInfoCommand}"
Visibility="{Binding HasExtendInfo, Converter={StaticResource BooleanToVisibilityConverter}}"
VerticalAlignment="Bottom" Margin="20,0,0,0" Grid.Column="2">
<Button.Template>
<ControlTemplate TargetType="Button">
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="PART_bg" BorderThickness="1" BorderBrush="#e1e0df" CornerRadius="5">
<TextBlock FontSize="26"
HorizontalAlignment="Center" VerticalAlignment="Center">
<Run Text="附加"/>
<LineBreak/>
<Run Text="信息"/>
</TextBlock>
HorizontalAlignment="Center" VerticalAlignment="Center"><Run Text="附加"/><LineBreak/><Run Text="信息"/></TextBlock>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
......@@ -89,37 +112,41 @@
<ContentControl Grid.Row="2" Template="{StaticResource AppointmentDetailPage_Line}" Grid.ColumnSpan="2"/>
<TextBlock Text="来访日期" Grid.Row="3" Style="{StaticResource AppointmentDetailPage_Title}"/>
<TextBlock Grid.Row="3" Style="{StaticResource AppointmentDetailPage_Value}">
<Run Text="{Binding Appointment.startDate,StringFormat={}{0:yyyy-MM-dd}}"/>
<Run Text=" 到 "/>
<Run Text="{Binding Appointment.endDate,StringFormat={}{0:yyyy-MM-dd}}"/>
</TextBlock>
<TextBlock Grid.Row="3" Style="{StaticResource AppointmentDetailPage_Value}"><Run Text="{Binding Appointment.startDate, StringFormat=\{0:yyyy-MM-dd\}}"/><Run Text=" "/><Run Text=" 到 "/><Run Text=" "/><Run Text="{Binding Appointment.endDate, StringFormat=\{0:yyyy-MM-dd\}}"/></TextBlock>
<TextBlock Text="来访区域" Grid.Row="4" Style="{StaticResource AppointmentDetailPage_Title}"/>
<TextBlock Text="{Binding Appointment.photoUrl}" Grid.Row="4" Style="{StaticResource AppointmentDetailPage_Value}"/>
<TextBlock Text="{Binding Appointment.areaName}" Grid.Row="4" Style="{StaticResource AppointmentDetailPage_Value}"/>
<TextBlock Text="来访人数" Grid.Row="5" Style="{StaticResource AppointmentDetailPage_Title}"/>
<TextBlock Text="{Binding Appointment.photoUrl,StringFormat={}{0}人}" Grid.Row="5" Style="{StaticResource AppointmentDetailPage_Value}"/>
<TextBlock Text="{Binding Appointment.visitPeople, StringFormat=\{0\}人}" Grid.Row="5" Style="{StaticResource AppointmentDetailPage_Value}"/>
<ContentControl Grid.Row="6" Template="{StaticResource AppointmentDetailPage_Line}" Grid.ColumnSpan="2"/>
<TextBlock Text="被访人" Grid.Row="7" Style="{StaticResource AppointmentDetailPage_Title}"/>
<TextBlock Text="{Binding Appointment.photoUrl}" TextWrapping="WrapWithOverflow" Grid.Row="7" Style="{StaticResource AppointmentDetailPage_Value}"/>
<TextBlock Text="{Binding Appointment.beVisitPerson}" TextWrapping="WrapWithOverflow" Grid.Row="7" Style="{StaticResource AppointmentDetailPage_Value}"/>
</Grid>
<!--按钮-->
<StackPanel Grid.Row="2">
<gs:ImageButtonFix Width="1010" Height="230" Image="/Views;component/Resources/detail_submit.png"/>
<gs:ImageButtonFix Command="{Binding SubmitCommand}" Width="1010" Height="230" Image="/Views;component/Resources/detail_submit.png"/>
<gs:ImageButtonFix Command="{Binding ExitCommand}" Width="1010" Height="190" Image="/Views;component/Resources/detail_cancel.png"/>
</StackPanel>
</Grid>
<!--附加信息-->
<Grid Background="Transparent" Grid.RowSpan="3">
<Border Width="920" Height="1630" BorderThickness="6"
CornerRadius="10"
Background="#ffffff" BorderBrush="#f1f1f1">
<ContentControl d:IsHidden="True" Template="{StaticResource AppointmentDetailPage_ExtendInfo}" Visibility="{Binding ShowExtendInfo}"/>
<ContentControl Template="{StaticResource AppointmentDetailPage_Confirm}"
x:Name="confirm"
RenderTransformOrigin="0.5,0.5">
<ContentControl.RenderTransform>
<TransformGroup>
<ScaleTransform/>
<SkewTransform/>
<RotateTransform/>
<TranslateTransform Y="475"/>
</TransformGroup>
</ContentControl.RenderTransform>
</Border>
</Grid>
</ContentControl>
<CheckBox x:Name="chk_showconfirm" IsChecked="{Binding ShowConfirm}" Visibility="Collapsed"/>
</Grid>
</Page>
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:gs="clr-namespace:Develop.Extension.Wpf;assembly=Develop.Extension.Wpf"
xmlns:local="clr-namespace:Views.Pages.AppointmentDetailPage">
<ControlTemplate x:Key="AppointmentDetailPage_Line" TargetType="ContentControl">
<StackPanel VerticalAlignment="Center">
......@@ -24,4 +25,144 @@
<Setter Property="TextTrimming" Value="CharacterEllipsis"/>
<Setter Property="Foreground" Value="#2a2b2d"/>
</Style>
<ControlTemplate x:Key="AppointmentDetailPage_ExtendInfoListTemplate" TargetType="ListView">
<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto"
Style="{DynamicResource scrollviewerStyle}">
<ItemsPresenter/>
</ScrollViewer>
</ControlTemplate>
<ItemsPanelTemplate x:Key="AppointmentDetailPage_ExtendInfoListItemsPanel">
<StackPanel/>
</ItemsPanelTemplate>
<Style x:Key="AppointmentDetailPage_ExtendInfoListItemStyle" TargetType="ListViewItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Border VerticalAlignment="Top" Margin="0,60,0,0"
BorderThickness="0,0,0,2" BorderBrush="#e1e2e3">
<Border BorderThickness="0,0,0,2" BorderBrush="#f4f4f4"
Padding="0,0,0,20">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding groupName}" FontSize="40"/>
<ListView Grid.Row="1" ItemsSource="{Binding items}">
<ListView.Template>
<ControlTemplate TargetType="ListView">
<ItemsPresenter/>
</ControlTemplate>
</ListView.Template>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Style.Triggers>
<DataTrigger Binding="{Binding infotype}" Value="text">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid Margin="0,20,0,20" Height="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding title}" Foreground="#787f8e" FontSize="36"
TextWrapping="Wrap"
HorizontalAlignment="Left"/>
<TextBlock Text="{Binding content}"
TextWrapping="NoWrap" TextTrimming="CharacterEllipsis"
Foreground="#2a2b2d" FontSize="36"
Grid.Column="1" HorizontalAlignment="Right"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding infotype}" Value="image">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid Margin="0,20,0,20" Height="auto">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding title}"
TextWrapping="Wrap" VerticalAlignment="Center"
Foreground="#787f8e" FontSize="36"
HorizontalAlignment="Left"/>
<Image Grid.Column="1" Margin="80,0,0,0"
HorizontalAlignment="Right" Stretch="Fill"
Source="{Binding content}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Grid>
</Border>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<ControlTemplate x:Key="AppointmentDetailPage_ExtendInfo" TargetType="ContentControl">
<Grid Background="Transparent" >
<Border Width="920" Height="1630" BorderThickness="6"
CornerRadius="15" Padding="45,25,45,25"
Background="#ffffff" BorderBrush="#f1f1f1">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock Text="附加信息" Foreground="#2a2b2d" HorizontalAlignment="Left" VerticalAlignment="Center" FontSize="48"/>
<gs:IconButton Icon="圆圈叉号" HorizontalAlignment="Right"
Command="{Binding CloseExtendInfoCommand}"
VerticalAlignment="Center" FontSize="100"/>
<ListView Grid.Row="1" Template="{StaticResource AppointmentDetailPage_ExtendInfoListTemplate}"
ItemsSource="{Binding Appointment.extends}"
ItemsPanel="{StaticResource AppointmentDetailPage_ExtendInfoListItemsPanel}"
ItemContainerStyle="{StaticResource AppointmentDetailPage_ExtendInfoListItemStyle}"/>
</Grid>
</Border>
</Grid>
</ControlTemplate>
<ControlTemplate x:Key="AppointmentDetailPage_Confirm" TargetType="ContentControl">
<Border Grid.Row="2" Height="420" Background="White"
BorderThickness="6" CornerRadius="15" BorderBrush="#f1f1f1"
Margin="50,0,50,50" Padding="50"
VerticalAlignment="Bottom" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="160"/>
</Grid.RowDefinitions>
<TextBlock Text="确定提交到访信息?" FontSize="48"
HorizontalAlignment="Center" VerticalAlignment="Center"
TextWrapping="Wrap"/>
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Center">
<gs:ImageButtonFix Command="{Binding ConfirmClose}" Width="360" Height="160" Image="/Views;component/Resources/confirm-no.png"/>
<gs:ImageButtonFix Command="{Binding ConfirmYes}" Width="360" Height="160" Image="/Views;component/Resources/confirm-yes.png"/>
</StackPanel>
</Grid>
</Border>
</ControlTemplate>
</ResourceDictionary>
\ No newline at end of file
<Page x:Class="Views.Pages.SubmitVisitInfoResult.Index"
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.Pages.SubmitVisitInfoResult"
mc:Ignorable="d"
d:DesignHeight="1695" d:DesignWidth="1080"
Title="Index">
<Page.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Style.xaml"/>
<ResourceDictionary Source="../../Resources/CommonDictionary.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Page.Resources>
<Grid>
<StackPanel VerticalAlignment="Center">
<Image Source="/Views;component/Resources/result_correct.png"
Width="330" Height="330"
HorizontalAlignment="Center" VerticalAlignment="Center"/>
<TextBlock Text="登记成功!" Foreground="#62ba67" FontSize="72" Margin="0,50,0,0"/>
<TextBlock Text="欢迎来访,您已获得通行权限可以在来访区域通行了!" FontSize="36" Margin="0,70,0,0"/>
<TextBlock Text="5秒后自动跳转至首页" Margin="0,216,0,0" FontSize="24"/>
<Button Width="460" Height="80" Margin="0,70,0,0" Template="{StaticResource CommonButton}" Content="返回首页" FontSize="36"/>
</StackPanel>
</Grid>
</Page>
using GS.Terminal.LogicShell.Interface;
using GS.Unitive.Framework.Security.Core;
using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
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.Pages.SubmitVisitInfoResult
{
/// <summary>
/// Index.xaml 的交互逻辑
/// </summary>
[Export(typeof(IView))]
[UnitiveView("登记结果显示", "", "cc808936-9d19-4e9c-86b7-3620cedd72fe", null)]
public partial class Index : Page, IView
{
public Index()
{
InitializeComponent();
}
public void BindDataContext(IViewModel vm)
{
DataContext = vm;
}
public object Clone()
{
throw new NotImplementedException();
}
public void GoBack()
{
throw new NotImplementedException();
}
public void GoForward()
{
throw new NotImplementedException();
}
public void NavigateToContent(object content)
{
throw new NotImplementedException();
}
public void Reset()
{
throw new NotImplementedException();
}
}
}
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Views.Pages.SubmitVisitInfoResult">
<Style TargetType="TextBlock">
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="Foreground" Value="#2a2b2d"/>
</Style>
</ResourceDictionary>
\ No newline at end of file
......@@ -67,6 +67,9 @@
<Compile Include="Foot.xaml.cs">
<DependentUpon>Foot.xaml</DependentUpon>
</Compile>
<Compile Include="Head.xaml.cs">
<DependentUpon>Head.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\AppointmentDetailPage\Index.xaml.cs">
<DependentUpon>Index.xaml</DependentUpon>
</Compile>
......@@ -85,6 +88,9 @@
<Compile Include="Pages\MenuPage\Index.xaml.cs">
<DependentUpon>Index.xaml</DependentUpon>
</Compile>
<Compile Include="Pages\SubmitVisitInfoResult\Index.xaml.cs">
<DependentUpon>Index.xaml</DependentUpon>
</Compile>
<Compile Include="PopWindows\FeatureCompare\Index.xaml.cs">
<DependentUpon>Index.xaml</DependentUpon>
</Compile>
......@@ -116,6 +122,10 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Head.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\AppointmentDetailPage\Index.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
......@@ -152,6 +162,14 @@
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\SubmitVisitInfoResult\Index.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="Pages\SubmitVisitInfoResult\Style.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Include="PopWindows\FeatureCompare\Index.xaml">
<SubType>Designer</SubType>
<Generator>MSBuild:Compile</Generator>
......@@ -165,7 +183,10 @@
<Generator>MSBuild:Compile</Generator>
</Page>
</ItemGroup>
<ItemGroup />
<ItemGroup>
<Resource Include="Resources\confirm-no.png" />
<Resource Include="Resources\confirm-yes.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\menu_btn_has.png" />
<Resource Include="Resources\menu_btn_no.png" />
......@@ -194,5 +215,8 @@
<Resource Include="Resources\detail_left.png" />
<Resource Include="Resources\detail_right.png" />
</ItemGroup>
<ItemGroup>
<Resource Include="Resources\result_correct.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment