MainVM.cs 4.71 KB
using HHECS.Application.Enums;
using HHECS.Executor;
using HHECS.Infrastructure.Enums;
using HHECS.Infrastructure.Notice;
using HHECS.Model.Entities;
using HHECS.WinClient.View.UserPermission;
using HHECS.WinCommon.ViewModel;
using MySqlX.XDevAPI.Common;
using NLog;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Data;
using MessageBox = HandyControl.Controls.MessageBox;

namespace HHECS.WinClient.View.Main
{
    public class MainVM : VMBase
    {
        /// <summary>
        /// 当前用户的所有权限
        /// </summary>
        public List<Permission> UserPermissions { get; set; }

        public string StatusText { get; set; } = $"用户:{App.User.UserName} 登录时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}";

        public string LicenseText { get; set; } = App.LicenseModel.ToString();

        public Dictionary<string, Window> ChildrenWin { get; set; } = new Dictionary<string, Window>();

        public EquipmentExecutor EquipmentExecutor { get; set; }

        public WinMain Owner { get; set; }

        public MainVM()
        {
            App.PermissionService.Combine(App.UserPermissions.Where(t => t.Parent?.PermissionCode == App.Module && t.PermissionType == PermissionType.Catalog.ToString()).ToList(), App.PermissionService.GetAllPermission("WCS").Data.Where(t => (t.PermissionType == PermissionType.Catalog.ToString()
            || t.PermissionType == PermissionType.Menu.ToString()) && App.UserPermissions.Count(a => a.Id == t.Id) > 0).ToList());
            UserPermissions = App.UserPermissions.Where(t => t.PermissionType == PermissionType.Catalog.ToString()).OrderBy(t => t.OrderNum).ToList();
        }

        /// <summary>
        /// 菜单单击
        /// </summary>
        /// <param name="permission"></param>
        public void MenuClick(Permission permission)
        {
            try
            {

                var win = ChildrenWin.FirstOrDefault(t => t.Key == permission.Url).Value;
                if (String.IsNullOrWhiteSpace(permission?.Url) || permission.Url == "#" || permission.Url == "/" || permission.Url == "\\")
                {
                    return;
                }
                if (win == null)
                {
                    win = (Window)Activator.CreateInstance(null, permission.Url).Unwrap();
                    win.Owner = Owner;
                    win.WindowStartupLocation = WindowStartupLocation.CenterScreen;
                    ChildrenWin.Add(permission.Url, win);
                }
                win.Show();
                if (win.WindowState == WindowState.Minimized)
                    win.WindowState = WindowState.Normal;
                win.Activate();
            }
            catch (Exception ex)
            {
                MessageBox.Show($"打开菜单出现异常:{ex.Message}");
            }
        }

        internal void Init()
        {
            EquipmentExecutor = new EquipmentExecutor() { User = App.User, DestinationArea = App.DestinationArea };
            var result = EquipmentExecutor.Init();
            if (!result.Success)
            {
                MessageBox.Show(result.ErrorCode + ":" + result.Msg);
                Owner.Btn_BeginExcute.IsEnabled = false;
                Owner.Btn_EndExecute.IsEnabled = false;
                return;
            }
            NoticeBus.NoticeEvent += NoticeBus_NoticeEvent;
        }

        /// <summary>
        /// 授权单击
        /// </summary>
        public void LicensesClick()
        {
            WinLicense winLicense = new WinLicense();
            var result = winLicense.ShowDialog();
            if (result == true)
            {
                App.LicenseModel = App.PermissionService.GetLicense().Data;
                LicenseText = App.LicenseModel.ToString();
            }
        }


        private void NoticeBus_NoticeEvent(object sender, NoticeEventArgs args)
        {
            App.Current.Dispatcher.Invoke(() =>
            {
                App.Logger.Log(args.NoticeLevel switch
                {
                    Level.Exception => LogLevel.Error,
                    _ => LogLevel.Info
                }, args.Exception, args.Content);
                Owner.LogInfo.AddLogs(args.Content, args.NoticeLevel);
            });
        }

        internal void BeginExecute()
        {
            EquipmentExecutor.StartExcute();
            Owner.Btn_BeginExcute.IsEnabled = false;
            Owner.Btn_EndExecute.IsEnabled = true;
        }

        internal void EndExecute()
        {
            EquipmentExecutor.StopExcute();
            Owner.Btn_BeginExcute.IsEnabled = true;
            Owner.Btn_EndExecute.IsEnabled = false;
        }
    }
}