using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using DryIoc;
using Prism.Services.Dialogs;
using SWS.CAD.ViewModels.myViewModelBase;
using SWS.Commons;
using SWS.Model;
using SWS.Service;
using Telerik.Windows.Controls;
using Unity;
namespace SWS.CAD.ViewModels
{
///
/// 电缆连接新建端子排的ViewModel
///
public class DialogCableConnection_NewStripViewModel : DialogBase, IDialogAware
{
#region 页面渲染字段
private ObservableCollection _StripList = new ObservableCollection();
///
/// 端子排集合
///
public ObservableCollection StripList
{
get { return _StripList; }
set
{
_StripList = value;
RaisePropertyChanged(nameof(StripList));
}
}
private ec_PanelStrip _SelectedStrip;
///
/// 当前选择的端子排
///
public ec_PanelStrip SelectedStrip
{
get { return _SelectedStrip; }
set
{
_SelectedStrip = value;
RaisePropertyChanged(nameof(SelectedStrip));
UpdaStrip(_SelectedStrip);
}
}
private ObservableCollection _StripInfos = new ObservableCollection();
///
/// 表格数据源
///
public ObservableCollection StripInfos
{
get { return _StripInfos; }
set
{
_StripInfos = value;
RaisePropertyChanged(nameof(StripInfos));
}
}
private StripInfo _SelectedStripInfo;
///
/// 选中的表格行
///
public StripInfo SelectedStripInfo
{
get { return _SelectedStripInfo; }
set
{
_SelectedStripInfo = value;
RaisePropertyChanged(nameof(SelectedStripInfo));
}
}
private string _NewStripName;
///
/// 新端子排名称
///
public string NewStripName
{
get { return _NewStripName; }
set
{
_NewStripName = value;
RaisePropertyChanged(nameof(NewStripName));
}
}
#endregion
//接口服务
private EnginedataService _enginedataService;
IOModuleService _iOModuleService;
public DialogCableConnection_NewStripViewModel()
{
_enginedataService = GlobalObject.container.Resolve();
_iOModuleService = GlobalObject.container.Resolve();
}
public string Title => "";
public event Action RequestClose;
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
private ec_Panel Panel;
private ec_Cable ResCableEngID;
private string comeFrom;
public async void OnDialogOpened(IDialogParameters parameters)
{
title = "新建端子排";
ResCableEngID = parameters.GetValue(GlobalObject.dialogPar.para1.ToString());
ResCableEngID = await _iOModuleService.GetCableByEngID(ResCableEngID.EngineerDataID);
//先判断是左边或者右边
comeFrom = parameters.GetValue(GlobalObject.dialogPar.info.ToString());
if (comeFrom.Equals("Fo"))
{
//获取左边的设备对象
Panel = ResCableEngID.FromPanel;
}
if (comeFrom.Equals("To"))
{
//获取右边的设备对象
Panel = ResCableEngID.ToPanel;
}
//先做排序在进行赋值
StripList.AddRange(Panel.strips.OrderBy(s => s.Panel_Strip_Seq));
SelectedStrip = StripList.FirstOrDefault();
}
public override void ExecuteOKCommandAsync(object para)
{
IDialogParameters res = new Prism.Services.Dialogs.DialogParameters();
//res.Add(GlobalObject.dialogPar.info.ToString(), $"{TextInfo}");
RequestClose.Invoke(new DialogResult(ButtonResult.Yes, res));
}
public override void ExecuteCloseCommand(object parameter)
{
//if (smInfos.Any(s => s.IsModified == true))
//{
// MessageBoxResult resultMessage = MessageBox.Show("修改未保存,是否取消修改", "KunHengCAD", MessageBoxButton.OKCancel, MessageBoxImage.Question);
// if (resultMessage != MessageBoxResult.OK)
// {
// return;
// }
//}
if (parameter as string == "ClickNo")
{
DialogResult res = new DialogResult(ButtonResult.No);
RequestClose.Invoke(res);
}
else
{
RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
}
this.Dispose();
}
#region 方法
#region 端子排下拉改变
private ec_PanelStrip ResPannelStrip;
public async void UpdaStrip(ec_PanelStrip ec_PanelStrip)
{
IsBusy = true;
try
{
//先清空
StripInfos.Clear();
if (SelectedStrip != null)
{
var ResPanelStrip = await _iOModuleService.GetPanelStrip(SelectedStrip.StripID, false, false);
if (ResPanelStrip == null) return;
int count = ResPanelStrip.Channels.FirstOrDefault().Terms.Count();
count = count > 17 ? count : 17;
for (int i = 0; i < count; i++)
{
StripInfos.Add(new StripInfo() { Index = i });
}
foreach (var item in StripInfos)
{
item.StripName = "";
}
for (int i = 0; i < count; i++)
{
if (i < ResPanelStrip.Channels.FirstOrDefault().Terms.Count())
{
StripInfos[i].StripName = ResPanelStrip.Channels.FirstOrDefault().Terms[i].Term_No;
}
}
}
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
}
finally
{
IsBusy = false;
}
}
#endregion
#region 右侧按钮方法
public ICommand TableButtonCmd => new DelegateCommand(TableButton_Click);
///
/// 右侧按钮点击事件
///
///
public virtual async void TableButton_Click(object parameter)
{
#region 删除
if (parameter.ToString().Equals("删除"))
{
if (SelectedStrip != null)
{
MessageBoxResult result = System.Windows.MessageBox.Show($"确定删除端子排[{SelectedStrip.StripName}]吗?", "KunHengCAD", MessageBoxButton.OKCancel, MessageBoxImage.Question);
if (result == MessageBoxResult.OK)
{
var httpres = await _iOModuleService.DeletePanelStrip(SelectedStrip.StripID);
if (httpres == null)
{
ResCableEngID = await _iOModuleService.GetCableByEngID(ResCableEngID.EngineerDataID);
if (comeFrom.Equals("Fo"))
{
Panel = ResCableEngID.FromPanel;
}
if (comeFrom.Equals("To"))
{
Panel = ResCableEngID.ToPanel;
}
StripList.Clear();
StripList.AddRange(Panel.strips.OrderBy(s => s.Panel_Strip_Seq));
SelectedStrip = StripList.FirstOrDefault();
}
}
}
return;
}
#endregion
#region 更新
if (parameter.ToString().Equals("更新"))
{
var SavePanelStrip = await _iOModuleService.GetPanelStrip(SelectedStrip.StripID, false, false);
if (SavePanelStrip == null) return;
if (SavePanelStrip.Channels.FirstOrDefault().Terms == null)
{
SavePanelStrip.Channels.FirstOrDefault().Terms = new List();
}
foreach (var StripInfo in StripInfos)
{
if (StripInfo.IsModified)
{
if (string.IsNullOrEmpty(StripInfo.StripName))
{
var term = SavePanelStrip.Channels.FirstOrDefault().Terms.Where(t => t.Term_Seq == StripInfo.Index).FirstOrDefault();
if (term != null)
{
term.NeedRemove = true;
}
}
else
{
var term = SavePanelStrip.Channels.FirstOrDefault().Terms.Where(t => t.Term_Seq == StripInfo.Index).FirstOrDefault();
if (term == null)
{
term = new ec_PanelStripTerm();
}
if (term != null)
{
term.ChannelID = SavePanelStrip.Channels.FirstOrDefault().ChannelID;
term.CreateTime = SavePanelStrip.CreateTime;
term.CreateUserID = SavePanelStrip.CreateUserID;
term.NeedRemove = false;
term.StripID = SavePanelStrip.StripID;
term.Term_No = StripInfo.StripName;
term.Term_Seq = StripInfo.Index;
//term.UpdateTime = SavePanelStrip.CreateTime;
//term.UpdateUserID = SavePanelStrip.CreateUserID;
SavePanelStrip.Channels.FirstOrDefault().Terms.Add(term);
}
}
}
}
var res = await _iOModuleService.SavePanelStripNoChannel(SavePanelStrip);
if (res != null)
{
ResCableEngID = await _iOModuleService.GetCableByEngID(ResCableEngID.EngineerDataID);
if (comeFrom.Equals("Fo"))
{
Panel = ResCableEngID.FromPanel;
}
if (comeFrom.Equals("To"))
{
Panel = ResCableEngID.ToPanel;
}
StripList.Clear();
StripList.AddRange(Panel.strips.OrderBy(s => s.Panel_Strip_Seq));
SelectedStrip = StripList.Where(s => s.StripName.Equals(SavePanelStrip.StripName)).FirstOrDefault();
System.Windows.MessageBox.Show("端子更新成功", "KunHengCAD", MessageBoxButton.OK, MessageBoxImage.Warning);
}
return;
}
#endregion
#region 新增
if (parameter.ToString().Equals("新增"))
{
if (!string.IsNullOrEmpty(NewStripName))
{
ec_PanelStrip panelStrip = new ec_PanelStrip()
{
StripName = NewStripName,
PanelID = Panel.PanelID,
CreateUserID = GlobalObject.userInfo.userId,
CreateTime = DateTime.Now,
UpdateUserID = GlobalObject.userInfo.userId,
UpdateTime = DateTime.Now,
Panel_Strip_Seq = Panel.strips.Count(),
};
var res = await _iOModuleService.SavePanelStripNoChannel(panelStrip);
if (res != null)
{
ResCableEngID = await _iOModuleService.GetCableByEngID(ResCableEngID.EngineerDataID);
if (comeFrom.Equals("Fo"))
{
Panel = ResCableEngID.FromPanel;
}
if (comeFrom.Equals("To"))
{
Panel = ResCableEngID.ToPanel;
}
StripList.Clear();
StripList.AddRange(Panel.strips.OrderBy(s => s.Panel_Strip_Seq));
StripList.OrderBy(s=>s.Panel_Strip_Seq);
SelectedStrip = StripList.Where(s => s.StripName.Equals(NewStripName)).FirstOrDefault();
}
}
return;
}
#endregion
#region 清空端子
if (parameter.ToString().Equals("清空端子"))
{
if (StripInfos != null)
{
foreach (var StripInfo in StripInfos)
{
StripInfo.StripName = "";
StripInfo.IsModified = true;
}
}
return;
}
#endregion
#region 添加一页
if (parameter.ToString().Equals("添加一页"))
{
int index = StripInfos.Count();
for (int i = 0; i < 17; i++)
{
index++;
StripInfos.Add(new StripInfo() { Index = index });
}
return;
}
#endregion
}
#endregion
#region 表格编辑结束事件
public ICommand EditEndCmd => new DelegateCommand(EditEnd);
///
/// 编辑结束事件
///
///
public virtual void EditEnd(object parameter)
{
//做个标记表示该项修改过
SelectedStripInfo.IsModified = true;
}
#endregion
#endregion
}
public class StripInfo : DialogBase
{
private int _Index;
///
/// 序号
///
public int Index
{
get { return _Index; }
set
{
_Index = value;
RaisePropertyChanged(nameof(Index));
}
}
private string _StripName;
///
/// 端子名
///
public string StripName
{
get { return _StripName; }
set
{
_StripName = value;
RaisePropertyChanged(nameof(StripName));
}
}
private bool _IsModified;
///
/// 是否修改
///
public bool IsModified
{
get { return _IsModified; }
set { _IsModified = value; RaisePropertyChanged(nameof(IsModified)); }
}
}
}