Files
6098/Cowain.Bake.UI/FactoryMaintenance/ViewModels/DeviceManagementViewModel.cs

190 lines
5.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using Cowain.Bake.Common;
using Cowain.Bake.Model;
using Prism.Regions;
using System.Collections.ObjectModel;
using Unity;
using Cowain.Bake.BLL;
using Prism.Commands;
using JSON = Newtonsoft.Json.JsonConvert;
using System;
using Cowain.Bake.Common.Core;
using HandyControl.Controls;
using System.Windows;
using System.Threading.Tasks;
namespace Cowain.Bake.UI.FactoryMaintenance.ViewModels
{
public class DeviceManagementViewModel : ViewModelBase, INavigationAware
{
private bool _autoRefresh;
public bool AutoRefresh
{
get { return _autoRefresh; }
set { SetProperty(ref _autoRefresh, value); }
}
private TDeviceConfig _editDevice;
public TDeviceConfig EditDevice
{
get => _editDevice ?? (_editDevice = new TDeviceConfig());
set
{
SetProperty(ref _editDevice, value);
}
}
private TDeviceConfig selectDevice;
public TDeviceConfig SelectDevice
{
get => selectDevice ?? (selectDevice = new TDeviceConfig());
set
{
SetProperty(ref selectDevice, value);
}
}
private ObservableCollection<TDeviceConfig> _deviceList;
public ObservableCollection<TDeviceConfig> DeviceList
{
//get { return _taskList; }
get => _deviceList ?? (_deviceList = new ObservableCollection<TDeviceConfig>());
set { SetProperty(ref _deviceList, value); }
}
public DeviceManagementViewModel(IUnityContainer unityContainer, IRegionManager regionManager) : base(unityContainer, regionManager)
{
AutoRefresh = true;
this.PageTitle = "设备管理";
_unityContainer = unityContainer;
Task.Run(() => AsyncRefreshTask());
}
public DelegateCommand SelectCommand => new DelegateCommand(() =>
{
if (SelectDevice != null && SelectDevice.Id > 0)
{
var json = PrettifyJson(SelectDevice.Json);
if (json.Item1)
{
SelectDevice.Json = json.Item2;
//深拷贝
EditDevice = JSON.DeserializeObject<TDeviceConfig>(JSON.SerializeObject(SelectDevice));
}
}
});
public DelegateCommand VerifyCommand => new DelegateCommand(() =>
{
IsVerify(true);
});
bool IsVerify(bool b = false)
{
if (PrettifyJson(EditDevice.Json).Item1)
{
if (b)
{
Growl.Success("有效的JSON格式");
}
return true;
}
Growl.Error("不是有效的JSON格式, 请重新输入!");
return false;
}
public DelegateCommand EditCommand => new DelegateCommand(() =>
{
if (!IsVerify())
{
return;
}
var result = HandyControl.Controls.MessageBox.Ask($@"是否确定要修改设备信息?", "操作提示");
if (result == System.Windows.MessageBoxResult.Cancel)
{
return;
}
var res = _unityContainer.Resolve<DeviceConfigService>().Update(EditDevice);
if (res > 0)
{
Growl.Success("设备信息修改完成!");
Refresh();
}
else
{
Growl.Error("设备信息修改失败!");
}
if (!EditDevice.Enable)
{
CommonCoreHelper.Instance.BlockStatusColor.Add(EditDevice); //刷新主界面的PLC状态
}
});
public async void AsyncRefreshTask()
{
while(true)
{
if (AutoRefresh)
{
Application.Current?.Dispatcher?.Invoke(new Action(() =>
{
Refresh();
}));
}
await Task.Delay(2000);
}
}
private (bool, string) PrettifyJson(string raw)
{
(bool, string) result = (true, "");
try
{
result.Item2 = Newtonsoft.Json.Linq.JToken.Parse(raw).ToString(Newtonsoft.Json.Formatting.Indented);
// 如果已经是 JSON 字符串,先解析再序列化即可
//var doc = System.Text.Json.JsonDocument.Parse(raw);
//return System.Text.Json.JsonSerializer.Serialize(doc.RootElement,
// new System.Text.Json.JsonSerializerOptions
// {
// WriteIndented = true
// });
}
catch(Exception ex)
{
// 万一不是合法 JSON直接原样返回
LogHelper.Instance.GetCurrentClassWarn($"{raw},{ex.Message}");
result.Item1 = false;
}
return result;
}
public override void Refresh()
{
DeviceList.Clear();
var models = _unityContainer.Resolve<DeviceConfigService>().GetAll();
models.ForEach(x => DeviceList.Add(x));
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
}
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return false;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
}
}
}