293 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			293 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								using log4net;
							 | 
						|||
| 
								 | 
							
								using Prism.Commands;
							 | 
						|||
| 
								 | 
							
								using Prism.Events;
							 | 
						|||
| 
								 | 
							
								using Prism.Mvvm;
							 | 
						|||
| 
								 | 
							
								using Prism.Regions;
							 | 
						|||
| 
								 | 
							
								using Prism.Services.Dialogs;
							 | 
						|||
| 
								 | 
							
								using SqlSugar;
							 | 
						|||
| 
								 | 
							
								using System;
							 | 
						|||
| 
								 | 
							
								using System.Collections.Generic;
							 | 
						|||
| 
								 | 
							
								using System.Configuration;
							 | 
						|||
| 
								 | 
							
								using System.Linq;
							 | 
						|||
| 
								 | 
							
								using System.Text;
							 | 
						|||
| 
								 | 
							
								using System.Threading.Tasks;
							 | 
						|||
| 
								 | 
							
								using System.Windows;
							 | 
						|||
| 
								 | 
							
								using System.Windows.Controls;
							 | 
						|||
| 
								 | 
							
								using DM_Weight.Models;
							 | 
						|||
| 
								 | 
							
								using DM_Weight.util;
							 | 
						|||
| 
								 | 
							
								using DM_Weight.Views;
							 | 
						|||
| 
								 | 
							
								using System.Timers;
							 | 
						|||
| 
								 | 
							
								using Unity;
							 | 
						|||
| 
								 | 
							
								using System.Windows.Threading;
							 | 
						|||
| 
								 | 
							
								using Newtonsoft.Json.Linq;
							 | 
						|||
| 
								 | 
							
								using DM_Weight.msg;
							 | 
						|||
| 
								 | 
							
								using DM_Weight.HIKVISION;
							 | 
						|||
| 
								 | 
							
								using System.Threading;
							 | 
						|||
| 
								 | 
							
								using MaterialDesignThemes.Wpf;
							 | 
						|||
| 
								 | 
							
								using System.Windows.Media;
							 | 
						|||
| 
								 | 
							
								using System.Collections.ObjectModel;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								namespace DM_Weight.ViewModels
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public class HomeWindowViewModel : BindableBase, IConfirmNavigationRequest, IRegionMemberLifetime
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private readonly ILog logger = LogManager.GetLogger(typeof(HomeWindowViewModel));
							 | 
						|||
| 
								 | 
							
								        private readonly IDialogService _dialogService;
							 | 
						|||
| 
								 | 
							
								        private UserList? _userList;
							 | 
						|||
| 
								 | 
							
								        private UserList? _userList2;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private SolidColorBrush _colorBrush;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public SolidColorBrush SnackbarBackground
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => _colorBrush;
							 | 
						|||
| 
								 | 
							
								            set => SetProperty(ref _colorBrush, value);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private ISnackbarMessageQueue _snackbarMessageQueue = new SnackbarMessageQueue(TimeSpan.FromSeconds(3));
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public ISnackbarMessageQueue SnackbarMessageQueue
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => _snackbarMessageQueue;
							 | 
						|||
| 
								 | 
							
								            set => SetProperty(ref _snackbarMessageQueue, value);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private int loginMode = Convert.ToInt32(ConfigurationManager.AppSettings["loginMode"]?.ToString() ?? "1");
							 | 
						|||
| 
								 | 
							
								        public bool MultiLogin
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => loginMode == 2;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private PremissionDm? _selectedMenu;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private PremissionDm? _selectedChildMenu;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private List<PremissionDm>? _premissionDmList;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public PremissionDm? SelectedChildMenu
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get { return _selectedChildMenu; }
							 | 
						|||
| 
								 | 
							
								            set
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                SetProperty(ref _selectedChildMenu, value);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public PremissionDm? SelectedMenu
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get { return _selectedMenu; }
							 | 
						|||
| 
								 | 
							
								            set
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                SetProperty(ref _selectedMenu, value);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private DelegateCommand _selectionCommon;
							 | 
						|||
| 
								 | 
							
								        public DelegateCommand SelectionCommon
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => _selectionCommon ?? (_selectionCommon = new DelegateCommand(SelectionMethod));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private void SelectionMethod()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            logger.Info("开始进入父菜单");
							 | 
						|||
| 
								 | 
							
								            if (SelectedMenu != null && SelectedMenu.PremissionName == "退出")
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                logger.Info($"用户【{Operator?.Nickname}】退出登录");
							 | 
						|||
| 
								 | 
							
								                Operator = null;
							 | 
						|||
| 
								 | 
							
								                Reviewer = null;
							 | 
						|||
| 
								 | 
							
								                System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() =>
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    _regionManager.RequestNavigate("MainRegion", "LoginWindow");
							 | 
						|||
| 
								 | 
							
								                }));
							 | 
						|||
| 
								 | 
							
								                //_regionManager.RequestNavigate("MainRegion", "BeforeLogin");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            else
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                //SelectedMenu.Children = SelectedMenu.Children;
							 | 
						|||
| 
								 | 
							
								                //SelectedChildMenu = SelectedMenu.Children[0];
							 | 
						|||
| 
								 | 
							
								                //_regionManager.RequestNavigate("ContentRegion", SelectedMenu.Children[0].PremissionPath);
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            logger.Info("结束父菜单");
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        #region
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								        public List<PremissionDm> PremissionDmList { get { return _premissionDmList; } set { SetProperty(ref _premissionDmList, value); } }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public UserList UserList { get { return _userList; } set { SetProperty(ref _userList, value); } }
							 | 
						|||
| 
								 | 
							
								        public UserList UserList2 { get { return _userList2; } set { SetProperty(ref _userList2, value); } }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public static UserList? Operator;
							 | 
						|||
| 
								 | 
							
								        public static UserList? Reviewer;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        IRegionManager _regionManager;
							 | 
						|||
| 
								 | 
							
								        IUnityContainer _container;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        private bool _is16Drawer;
							 | 
						|||
| 
								 | 
							
								        public bool Is16Drawer { get => _is16Drawer; set => SetProperty(ref _is16Drawer, value); }
							 | 
						|||
| 
								 | 
							
								        public bool KeepAlive => false;
							 | 
						|||
| 
								 | 
							
								        //private CHKFunction _chkFunction;
							 | 
						|||
| 
								 | 
							
								        IEventAggregator _eventAggregator;
							 | 
						|||
| 
								 | 
							
								        public HomeWindowViewModel(IRegionManager iRegionManager, IDialogService dialogService, IUnityContainer container, IEventAggregator eventAggregator)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            _regionManager = iRegionManager;
							 | 
						|||
| 
								 | 
							
								            _dialogService = dialogService;
							 | 
						|||
| 
								 | 
							
								            _container = container;
							 | 
						|||
| 
								 | 
							
								            this._eventAggregator = eventAggregator;
							 | 
						|||
| 
								 | 
							
								            //_chkFunction = cHKFunction;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        public DelegateCommand<string> OpenFingerDialog
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => new DelegateCommand<string>((string Type) =>
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                DialogParameters dialogParameters = new DialogParameters();
							 | 
						|||
| 
								 | 
							
								                dialogParameters.Add("User", Type.Equals("Operator") ? Operator : Reviewer);
							 | 
						|||
| 
								 | 
							
								                DialogServiceExtensions.ShowDialogHost(_dialogService, "FingerprintDialog", dialogParameters, DoDialogResult, "RootDialog");
							 | 
						|||
| 
								 | 
							
								            });
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //public DelegateCommand<string> OpenEditPasswordDialog
							 | 
						|||
| 
								 | 
							
								        //{
							 | 
						|||
| 
								 | 
							
								        //    get => new DelegateCommand<string>((string Type) =>
							 | 
						|||
| 
								 | 
							
								        //    {
							 | 
						|||
| 
								 | 
							
								        //        DialogParameters dialogParameters = new DialogParameters();
							 | 
						|||
| 
								 | 
							
								        //        dialogParameters.Add("EditPass", true);
							 | 
						|||
| 
								 | 
							
								        //        dialogParameters.Add("User", Type.Equals("Operator") ? Operator : Reviewer);
							 | 
						|||
| 
								 | 
							
								        //        DialogServiceExtensions.ShowDialogHost(_dialogService, "EditUserDialog", dialogParameters, DoDialogResult, "RootDialog");
							 | 
						|||
| 
								 | 
							
								        //    });
							 | 
						|||
| 
								 | 
							
								        //}
							 | 
						|||
| 
								 | 
							
								        private void DoDialogResult(IDialogResult dialogResult)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            // 委托   被动执行     被子窗口执行
							 | 
						|||
| 
								 | 
							
								            // dialogResult  第一方面可以拿到任意参数   第二方面   可判断关闭状态
							 | 
						|||
| 
								 | 
							
								            if (dialogResult.Result == ButtonResult.OK)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 查看冰箱温度
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        //public DelegateCommand CheckWDCommand { get => new DelegateCommand(CheckAction); }
							 | 
						|||
| 
								 | 
							
								        //private void CheckAction()
							 | 
						|||
| 
								 | 
							
								        //{
							 | 
						|||
| 
								 | 
							
								        //GetWD();
							 | 
						|||
| 
								 | 
							
								        //}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        #region 子菜单点击
							 | 
						|||
| 
								 | 
							
								        private DelegateCommand _selectionChildCommon;
							 | 
						|||
| 
								 | 
							
								        public DelegateCommand SelectionChildCommon
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            get => _selectionChildCommon ?? (_selectionChildCommon = new DelegateCommand(SelectionChildMethod));
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private void SelectionChildMethod()
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            SelectChildNavigate(SelectedChildMenu);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        private void SelectChildNavigate(PremissionDm SelectedChildMenu)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (SelectedChildMenu != null)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                _regionManager.RequestNavigate("ContentRegion", SelectedChildMenu.PremissionPath);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        #endregion
							 | 
						|||
| 
								 | 
							
								        //这个方法用于拦截请求,continuationCallback(true)就是不拦截,continuationCallback(false)拦截本次操作
							 | 
						|||
| 
								 | 
							
								        public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            continuationCallback(true);
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //接收导航传过来的参数
							 | 
						|||
| 
								 | 
							
								        public void OnNavigatedTo(NavigationContext navigationContext)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            //取出user
							 | 
						|||
| 
								 | 
							
								            UserList = navigationContext.Parameters.GetValue<UserList>("operator");
							 | 
						|||
| 
								 | 
							
								            Operator = UserList;
							 | 
						|||
| 
								 | 
							
								            logger.Info($"发药人【{Operator.Nickname}】登录");
							 | 
						|||
| 
								 | 
							
								            if (navigationContext.Parameters.ContainsKey("reviewer"))
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                UserList2 = navigationContext.Parameters.GetValue<UserList>("reviewer");
							 | 
						|||
| 
								 | 
							
								                Reviewer = UserList2;
							 | 
						|||
| 
								 | 
							
								                logger.Info($"审核人【{Reviewer.Nickname}】登录");
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            PremissionDm child = new PremissionDm { Id = 46, PremissionName = "账册", PremissionPath = "AccountWindow" };
							 | 
						|||
| 
								 | 
							
								            PremissionDm child2 = new PremissionDm { Id = 47, PremissionName = "药品专用账本", PremissionPath = "AccountWindowForDrug" };
							 | 
						|||
| 
								 | 
							
								            ObservableCollection<PremissionDm> childrenList = new ObservableCollection<PremissionDm>();
							 | 
						|||
| 
								 | 
							
								            childrenList.Add(child);
							 | 
						|||
| 
								 | 
							
								            childrenList.Add(child2);
							 | 
						|||
| 
								 | 
							
								            List<PremissionDm> premissions = new List<PremissionDm>()
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                new PremissionDm{Id=1,PremissionName="使用账册",PremissionPath="",PremissionImage="/Images/TbKuc.png",Children=childrenList},
							 | 
						|||
| 
								 | 
							
								                new PremissionDm{Id=1,PremissionName="退出",PremissionPath="",PremissionImage="/Images/TbExit.png",Children=childrenList}
							 | 
						|||
| 
								 | 
							
								            };
							 | 
						|||
| 
								 | 
							
								            if (premissions.Count <= 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                Operator = null;
							 | 
						|||
| 
								 | 
							
								                Reviewer = null;
							 | 
						|||
| 
								 | 
							
								                Application.Current.Dispatcher.Invoke(() =>
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    _regionManager.RequestNavigate("MainRegion", "LoginWindow");
							 | 
						|||
| 
								 | 
							
								                });
							 | 
						|||
| 
								 | 
							
								                AlertMsg alertMsg = new AlertMsg
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    Message = $"用户{UserList.Nickname}或还未设置权限,请联系管理员",
							 | 
						|||
| 
								 | 
							
								                    Type = MsgType.ERROR
							 | 
						|||
| 
								 | 
							
								                };
							 | 
						|||
| 
								 | 
							
								                _eventAggregator.GetEvent<SnackbarEvent>().Publish(alertMsg);
							 | 
						|||
| 
								 | 
							
								                return;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								            //SqlSugarHelper.Db.SqlQueryable<PremissionDm>(sql)
							 | 
						|||
| 
								 | 
							
								            //.ToTree(pd => pd.Children, pd => pd.ParentId, 0);
							 | 
						|||
| 
								 | 
							
								            PremissionDmList = premissions;
							 | 
						|||
| 
								 | 
							
								            SelectedMenu = premissions[0];
							 | 
						|||
| 
								 | 
							
								            SelectedChildMenu = premissions[0].Children[0];
							 | 
						|||
| 
								 | 
							
								            _regionManager.RequestNavigate("ContentRegion", "AccountWindow");
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            int autoExit = Convert.ToInt32(ConfigurationManager.AppSettings["autoExit"] ?? "0");
							 | 
						|||
| 
								 | 
							
								            int stopRecord = Convert.ToInt32(ConfigurationManager.AppSettings["stopRecord"] ?? "0");
							 | 
						|||
| 
								 | 
							
								            if (autoExit > 0)
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                System.Timers.Timer timer = new System.Timers.Timer();
							 | 
						|||
| 
								 | 
							
								                timer.Interval = 1000;
							 | 
						|||
| 
								 | 
							
								                timer.Elapsed += (sender, e) =>
							 | 
						|||
| 
								 | 
							
								                {
							 | 
						|||
| 
								 | 
							
								                    // 30秒内无人操作鼠标键盘
							 | 
						|||
| 
								 | 
							
								                    if (CheckComputerFreeState.GetLastInputTime() > autoExit)
							 | 
						|||
| 
								 | 
							
								                    {
							 | 
						|||
| 
								 | 
							
								                        logger.Info($"设备30秒内无人操作,用户【{Operator?.Nickname}】自动退出登录");
							 | 
						|||
| 
								 | 
							
								                        //_chkFunction.HIKStopDVRRecord();
							 | 
						|||
| 
								 | 
							
								                        Operator = null;
							 | 
						|||
| 
								 | 
							
								                        Reviewer = null;
							 | 
						|||
| 
								 | 
							
								                        Application.Current.Dispatcher.Invoke(() =>
							 | 
						|||
| 
								 | 
							
								                        {
							 | 
						|||
| 
								 | 
							
								                            _regionManager.RequestNavigate("MainRegion", "LoginWindow");
							 | 
						|||
| 
								 | 
							
								                            timer.Stop();
							 | 
						|||
| 
								 | 
							
								                        });
							 | 
						|||
| 
								 | 
							
								                    }
							 | 
						|||
| 
								 | 
							
								                };
							 | 
						|||
| 
								 | 
							
								                timer.Start();
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //每次导航的时候,该实列用不用重新创建,true是不重新创建,false是重新创建
							 | 
						|||
| 
								 | 
							
								        public bool IsNavigationTarget(NavigationContext navigationContext)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            return true;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        //这个方法用于拦截请求
							 | 
						|||
| 
								 | 
							
								        public void OnNavigatedFrom(NavigationContext navigationContext)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |