255 lines
8.0 KiB
C#
255 lines
8.0 KiB
C#
using HandyControl.Controls;
|
||
using Newtonsoft.Json;
|
||
using Ping9719.WpfEx;
|
||
using Ping9719.WpfEx.Mvvm;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Diagnostics;
|
||
using System.IO;
|
||
using System.Linq;
|
||
using System.Text;
|
||
using System.Threading;
|
||
using System.Threading.Tasks;
|
||
using System.Windows.Controls.Primitives;
|
||
using System.Windows.Input;
|
||
using System.Windows.Markup;
|
||
|
||
namespace 智能仓储WCS管理系统.ViewModel
|
||
{
|
||
public class MainViewModel : BindableBase
|
||
{
|
||
Mutex mutex;
|
||
private string title = string.Empty;
|
||
/// <summary>
|
||
/// 标题
|
||
/// </summary>
|
||
public string Title { get => title; set { SetProperty(ref title, value); } }
|
||
|
||
|
||
private bool goToOutVentoryView;
|
||
public bool GoToOutVentoryView
|
||
{
|
||
get { return goToOutVentoryView; }
|
||
set
|
||
{
|
||
SetProperty(ref goToOutVentoryView, value);
|
||
}
|
||
}
|
||
|
||
private bool goToStockTakingView;
|
||
public bool GoToStockTakingView
|
||
{
|
||
get { return goToStockTakingView; }
|
||
set
|
||
{
|
||
SetProperty(ref goToStockTakingView, value);
|
||
}
|
||
}
|
||
|
||
|
||
#region 专用_MainWindow2
|
||
//隐藏式选项卡的高度
|
||
public double TabItemHeight { get; set; } = 0;
|
||
|
||
private string SelectedValue_ = "主页";
|
||
public string SelectedValue { get => SelectedValue_; set { SetProperty(ref SelectedValue_, value); } }
|
||
#endregion
|
||
|
||
private DateTime time;
|
||
/// <summary>
|
||
/// 时间
|
||
/// </summary>
|
||
public DateTime Time { get => time; set { SetProperty(ref time, value); } }
|
||
/// <summary>
|
||
/// 在初始化前的相关检查
|
||
/// </summary>
|
||
public bool InitAgo()
|
||
{
|
||
//只允许打开一个
|
||
mutex = new Mutex(true, string.Concat("MengXun智能仓储WCS管理系统", Path.GetFileNameWithoutExtension(LocalFile.AppName)), out bool createdNew);
|
||
if (!createdNew)
|
||
{
|
||
MessageBox.Warning("已有实列在运行!", "提示");
|
||
return false;
|
||
}
|
||
|
||
//初始化
|
||
Tuple<string, string, Action>[] tuples = new Tuple<string, string, Action>[]
|
||
{
|
||
new Tuple<string, string, Action>("检测文件..", "缺少文件,尝试将项目[data/]中的所有文件复制到[bin/data/]中", () =>
|
||
{
|
||
if(!System.IO.File.Exists(LocalFile.ConfigPath))
|
||
throw new Exception("缺少文件,请尝试将项目[data/]中的所有文件复制到[bin/data/]中");
|
||
}),
|
||
new Tuple<string, string, Action>("检测文件..", "配置文件中没有内容,请联系管理员", () =>
|
||
{
|
||
if(string.IsNullOrWhiteSpace(System.IO.File.ReadAllText(LocalFile.ConfigPath, Encoding.UTF8)))
|
||
throw new Exception($"配置文件[{LocalFile.ConfigPath}]中没有内容");
|
||
}),
|
||
new Tuple<string, string, Action>("初始化数据中..", "初始化数据库失败,请联系管理员", () =>
|
||
{
|
||
|
||
}),
|
||
new Tuple<string, string, Action>("初始化扫码枪连接..", "初始化扫码枪连接失败,请联系管理员", () =>
|
||
{
|
||
ScannerManager.InitScanners();
|
||
}),
|
||
new Tuple<string, string, Action>("初始化WebSocket连接..", "初始化WebSocket连接失败,请联系管理员", () =>
|
||
{
|
||
WebSocket.InitWebSocket();
|
||
}),
|
||
};
|
||
|
||
MainLoadWindow.TaskSleepTime = 200;
|
||
if (!MainLoadWindow.Show(tuples))
|
||
return false;
|
||
|
||
//清理日志
|
||
Task.Run(() =>
|
||
{
|
||
if (LocalFile.Config.Sys.SaveLogDay < 0)
|
||
return;
|
||
|
||
Logs.Clear(TimeSpan.FromDays(LocalFile.Config.Sys.SaveLogDay));
|
||
});
|
||
|
||
|
||
//不登录,直接使用最高权限
|
||
//{
|
||
// UserLoginView.NotLogin();
|
||
// return true;
|
||
//}
|
||
//登录
|
||
{
|
||
var userLoginView = new UserLoginView();
|
||
var isok = userLoginView.ShowDialog() == true;
|
||
userLoginView = null;
|
||
return isok;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 初始化并运行时间
|
||
/// </summary>
|
||
public async void Init(System.Windows.Window window)
|
||
{
|
||
//加载 程序名称
|
||
var versionInfo = FileVersionInfo.GetVersionInfo(LocalFile.AppPath);
|
||
Title = versionInfo.ProductName;
|
||
|
||
//加载 窗体模式
|
||
if (LocalFile.Config.Sys.StartupFull)
|
||
window.WindowState = System.Windows.WindowState.Maximized;
|
||
|
||
//注册 设备
|
||
IotDevice.UserChange = ((iot) =>
|
||
{
|
||
if (string.IsNullOrEmpty(iot.Funct))
|
||
Growl.Info($"你点击了[{iot.Name}],尝试改为[{iot.Val}]");
|
||
else
|
||
Growl.Info($"你点击了[{iot.Name}][{iot.Funct}],尝试改为[{iot.Val}]");
|
||
|
||
});
|
||
|
||
//注册 信息
|
||
TextBoxLog.TextBoxLogAdd = ((info) =>
|
||
{
|
||
Logs.Write(info.Text, LogsType.Info, info.Time);
|
||
});
|
||
|
||
//加载 时钟
|
||
while (true)
|
||
{
|
||
Time = DateTime.Now;
|
||
await Task.Delay(1);
|
||
}
|
||
}
|
||
|
||
public ICommand OpenUserCommand { get => new DelegateCommand(OpenUser); }
|
||
/// <summary>
|
||
/// 打开用户
|
||
/// </summary>
|
||
public void OpenUser()
|
||
{
|
||
if (UserInfoView.viewModel.IsLogin)
|
||
{
|
||
var userInfoView = new UserInfoView();
|
||
userInfoView.ShowDialog();
|
||
|
||
if (userInfoView.IsExitLogin)
|
||
{
|
||
Growl.Info("您已退出登录。");
|
||
userInfoView = null;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var userLoginView = new UserLoginView();
|
||
|
||
//登录成功
|
||
if (userLoginView.ShowDialog() == true)
|
||
{
|
||
Growl.Success($"欢迎您:{UserInfoView.viewModel.LoginName}");
|
||
userLoginView = null;
|
||
}
|
||
}
|
||
}
|
||
|
||
public ICommand OpenLogCommand { get => new DelegateCommand(OpenLog); }
|
||
/// <summary>
|
||
/// 打开日记
|
||
/// </summary>
|
||
public void OpenLog()
|
||
{
|
||
if (!System.IO.Directory.Exists(LocalFile.LogDir))
|
||
{
|
||
Growl.Info("暂时没有日志。");
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
Folder.OpenFolder(LocalFile.LogDir);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
Growl.Error("打开日志目录失败。");
|
||
}
|
||
}
|
||
|
||
public ICommand OpenHelpCommand { get => new DelegateCommand(OpenHelp); }
|
||
/// <summary>
|
||
/// 打开帮助
|
||
/// </summary>
|
||
public void OpenHelp()
|
||
{
|
||
if (!System.IO.File.Exists(LocalFile.DocPath))
|
||
{
|
||
Growl.Info("帮助文档正在书写中。");
|
||
return;
|
||
}
|
||
|
||
try
|
||
{
|
||
Folder.OpenFolderAndSelectedFile(LocalFile.DocPath);
|
||
}
|
||
catch (Exception)
|
||
{
|
||
Growl.Error("打开帮助文档失败。");
|
||
}
|
||
}
|
||
|
||
public ICommand OpenWeCommand { get => new DelegateCommand(OpenWe); }
|
||
/// <summary>
|
||
/// 打开关于
|
||
/// </summary>
|
||
public void OpenWe()
|
||
{
|
||
var aboutView = new AboutView();
|
||
aboutView.ShowDialog();
|
||
aboutView = null;
|
||
}
|
||
}
|
||
}
|