700 lines
25 KiB
C#
Raw Normal View History

2025-08-15 16:34:31 +08:00
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Input;
using Telerik.Windows.Controls;
using Unity;
using System.Windows.Media;
using Prism.Ioc;
using SWS.CAD.CADFunc;
using SWS.CAD.Views;
using Prism.Events;
using SWS.CAD.Event;
2025-09-04 18:28:02 +08:00
using Prism.Services.Dialogs;
using SWS.Commons;
using SWS.Model;
using SWS.WPF.ViewModels;
using SWS.Service;
2025-08-15 16:34:31 +08:00
namespace SWS.CAD.ViewModels
{
public class DialogNewComponentViewModel : DialogBase, IDialogAware
{
#region
2025-09-04 18:28:02 +08:00
private ObservableCollection<Model.TreeModel> _TreeNodes;
2025-08-15 16:34:31 +08:00
/// <summary>
/// 左侧树形结构数据源
/// </summary>
2025-09-04 18:28:02 +08:00
public ObservableCollection<Model.TreeModel> TreeNodes
2025-08-15 16:34:31 +08:00
{
get { return _TreeNodes; }
set
{
_TreeNodes = value;
RaisePropertyChanged(nameof(TreeNodes));
}
}
2025-09-04 18:28:02 +08:00
private Model.TreeModel _SelectedTreeNode;
2025-08-15 16:34:31 +08:00
/// <summary>
/// 当前选中的树形节点
/// </summary>
2025-09-04 18:28:02 +08:00
public Model.TreeModel SelectedTreeNode
2025-08-15 16:34:31 +08:00
{
get { return _SelectedTreeNode; }
set
{
_SelectedTreeNode = value;
RaisePropertyChanged(nameof(SelectedTreeNode));
UpdateChannelInfos();
}
}
private ObservableCollection<propertyModel> _listShowProperty;
/// <summary>
/// 显示属性列表
/// </summary>
public ObservableCollection<propertyModel> listShowProperty
{
get { return _listShowProperty; }
set
{
_listShowProperty = value;
RaisePropertyChanged(nameof(listShowProperty));
}
}
private ObservableCollection<PropertyObjectModel> _listObjects;
/// <summary>
/// 属性列表
/// </summary>
public ObservableCollection<PropertyObjectModel> listObjects
{
get { return _listObjects; }
set
{
_listObjects = value;
RaisePropertyChanged(nameof(listObjects));
}
}
private PropertyObjectModel _SelectObject;
/// <summary>
/// 选中属性
/// </summary>
public PropertyObjectModel SelectObject
{
get { return _SelectObject; }
set
{
_SelectObject = value;
RaisePropertyChanged(nameof(SelectObject));
changeProObj(value);
}
}
private bool _isEnabledLock = false;
/// <summary>
/// 属性锁、查看属性历史 功能是否启用
/// </summary>
public bool isEnabledLock
{
get { return _isEnabledLock; }
set
{
_isEnabledLock = value;
RaisePropertyChanged(nameof(isEnabledLock));
}
}
private bool _isEnabledHistory = false;
/// <summary>
/// 查看属性历史 功能是否启用
/// </summary>
public bool isEnabledHistory
{
get { return _isEnabledHistory; }
set
{
_isEnabledHistory = value;
RaisePropertyChanged(nameof(isEnabledHistory));
}
}
private ImageSource _lockImage;
/// <summary>
/// 属性锁
/// </summary>
public ImageSource lockImage
{
get
{
return _lockImage;
}
set { _lockImage = value; RaisePropertyChanged(nameof(lockImage)); }
}
private ImageSource _lock2Image;
/// <summary>
/// 属性锁 Enable为false时灰色
/// </summary>
public ImageSource lock2Image
{
get
{
return _lock2Image;
}
set { _lock2Image = value; RaisePropertyChanged(nameof(lock2Image)); }
}
private ImageSource _historyImage;
/// <summary>
/// 历史属性
/// </summary>
public ImageSource historyImage
{
get
{
return _historyImage;
}
set { _historyImage = value; RaisePropertyChanged(nameof(historyImage)); }
}
private ImageSource _history2Image;
/// <summary>
/// 历史属性 Enable为false时灰色
/// </summary>
public ImageSource history2Image
{
get
{
return _history2Image;
}
set { _history2Image = value; RaisePropertyChanged(nameof(history2Image)); }
}
private ImageSource _qiehuanImage;
/// <summary>
/// 切换属性视图
/// </summary>
public ImageSource qiehuanImage
{
get
{
return _qiehuanImage;
}
set { _qiehuanImage = value; RaisePropertyChanged(nameof(qiehuanImage)); }
}
private string _lockTooltip = "属性未锁定";
/// <summary>
/// 属性锁提示文本
/// </summary>
public string lockTooltip
{
get { return _lockTooltip; }
set
{
_lockTooltip = value;
RaisePropertyChanged(nameof(lockTooltip));
}
}
/// <summary>
/// 下拉框选择不一样的元件类型
/// </summary>
private void changeProObj(PropertyObjectModel proObj)
{
if (proObj != null)
{
listShowProperty = proObj.listBasicTypeP;
}
}
private bool _isBasicGroup = true;
/// <summary>
/// 是否属性常用分组
/// </summary>
public bool isBasicGroup
{
get { return _isBasicGroup; }
set
{
_isBasicGroup = value;
RaisePropertyChanged(nameof(isBasicGroup));
}
}
private bool _isLocked;
/// <summary>
/// 是否锁定属性
/// </summary>
public bool isLocked
{
get { return _isLocked; }
set
{
isEnabledGridProterty = !value;
isEnabledHistory = !value;
_isLocked = value;
RaisePropertyChanged(nameof(isLocked));
}
}
private bool _isEnabledGridProterty = true;
/// <summary>
/// Grid是否启用
/// </summary>
public bool isEnabledGridProterty
{
get { return _isEnabledGridProterty; }
set
{
_isEnabledGridProterty = value;
RaisePropertyChanged(nameof(isEnabledGridProterty));
}
}
private string _CurrentPropertyName;
/// <summary>
/// 选中的属性名称
/// </summary>
public string CurrentPropertyName
{
get { return _CurrentPropertyName; }
set
{
_CurrentPropertyName = value;
RaisePropertyChanged(nameof(CurrentPropertyName));
}
}
private bool _IsEnableChangeEvent = false;
/// <summary>
/// 是否启动下拉选项改变事件
/// </summary>
public bool IsEnableChangeEvent
{
get { return _IsEnableChangeEvent; }
set
{
_IsEnableChangeEvent = value;
RaisePropertyChanged(nameof(IsEnableChangeEvent));
}
}
#endregion
//接口服务
ObjectTypeService _objectTypeService;
private EnginedataService _enginedataService;
private ImageSource lockImg;
private ImageSource unlockImg;
IEventAggregator eventAggregator;
public DialogNewComponentViewModel()
{
_objectTypeService = GlobalObject.container.Resolve<ObjectTypeService>();
_enginedataService = GlobalObject.container.Resolve<EnginedataService>();
listShowProperty = new ObservableCollection<propertyModel>();
qiehuanImage = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.qiehuan.png");
historyImage = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.history.png");
history2Image = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.history2.png");
lockImg = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.Lock.png");
lockImage = lockImg;
lock2Image = GlobalObject.ImageSourceFromEmbeddedResourceStream(@"SWS.CAD.Images.Lock2.png");
Command_History = new DelegateCommand(onHistory);
Command_Lock = new DelegateCommand(onLock);
Command_Qiehuan = new DelegateCommand(onQiehuan);
eventAggregator = GlobalObject.container.Resolve<IEventAggregator>();
//_eventAggregator.GetEvent<SelectonChangeEvent>().Subscribe(SelecttionChange, ThreadOption.UIThread, true);
//订阅事件
eventAggregator.GetEvent<SelectionChangeEvent>().Subscribe(SelecttionChange, ThreadOption.UIThread, true);
eventAggregator.GetEvent<NewComponent_LostFocusEvent>().Subscribe(LostFocus, ThreadOption.UIThread, true);
}
2025-09-04 18:28:02 +08:00
public string Title => "";
public event Action<IDialogResult> RequestClose;
2025-08-15 16:34:31 +08:00
public bool CanCloseDialog()
{
return true;
}
public void OnDialogClosed()
{
}
private List<ec_Cable> CablePreAssigns;
public async void OnDialogOpened(IDialogParameters parameters)
{
//title = parameters.GetValue<string>(GlobalObject.dialogPar.title.ToString());
title = "新增元件";
//获取左侧树形结构数据
2025-09-04 18:28:02 +08:00
TreeNodes = new ObservableCollection<Model.TreeModel>(GlobalObject.designTree.Where(t => t.Text.Equals("接线设备")));
2025-08-15 16:34:31 +08:00
IsEnableChangeEvent = parameters.GetValue<bool>(GlobalObject.dialogPar.info.ToString());
}
public override void ExecuteOKCommandAsync(object para)
{
//返回结果
2025-09-04 18:28:02 +08:00
IDialogParameters res = new Prism.Services.Dialogs.DialogParameters();
2025-08-15 16:34:31 +08:00
res.Add(GlobalObject.dialogPar.para1.ToString(), listShowProperty);
2025-09-04 18:28:02 +08:00
RequestClose.Invoke(new DialogResult(ButtonResult.Yes, res));
2025-08-15 16:34:31 +08:00
}
public override void ExecuteCloseCommand(object parameter)
{
if (parameter as string == "ClickNo")
{
2025-09-04 18:28:02 +08:00
DialogResult res = new DialogResult(ButtonResult.No);
RequestClose.Invoke(res);
2025-08-15 16:34:31 +08:00
}
else
{
2025-09-04 18:28:02 +08:00
RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
2025-08-15 16:34:31 +08:00
}
this.Dispose();
}
#region
#region
private async void SelecttionChange(propertyModel model)
{
if (model.DisplayText.Equals("位号") && !string.IsNullOrEmpty(model.PropertyValue))
{
//获取位号的电缆属性
var TagNumberBys = await _objectTypeService.GetEngineDataListByTags(model.PropertyValue);
foreach (var ShowProperty in listShowProperty)
{
if (TagNumberBys != null && TagNumberBys.Count() > 0)
{
if (TagNumberBys[0].EngineDataProperty.Any(e => e.PropertyName.Equals(ShowProperty.DisplayText)))
{
ShowProperty.PropertyValue = TagNumberBys[0].EngineDataProperty.Where(e => e.PropertyName.Equals(ShowProperty.DisplayText)).Select(e => e.PropertyValue).FirstOrDefault();
}
}
}
string oldTagNumber = model.OldValue;
string newTagNumber = model.PropertyValue;
//var IsRepeatByTagNumber = await _objectTypeService.IsRepeatByTagNumber(oldTagNumber, newTagNumber);
}
}
#endregion
#region
private async void LostFocus(propertyModel model)
{
string oldTagNumber = "";
string newTagNumber = "";
if (model.DisplayText.Equals("位号") && !string.IsNullOrEmpty(model.PropertyValue))
{
oldTagNumber = model.OldValue;
newTagNumber = model.PropertyValue;
}
else
{
oldTagNumber = listShowProperty.Where(e => e.DisplayText.Equals("位号")).FirstOrDefault().OldValue;
newTagNumber = listShowProperty.Where(e => e.DisplayText.Equals("位号")).FirstOrDefault().PropertyValue;
}
var IsRepeatByTagNumber = await _objectTypeService.IsRepeatByTagNumber(oldTagNumber, newTagNumber);
//if (string.IsNullOrEmpty(IsRepeatByTagNumber.TagNumber))
//{
//}
List<ec_enginedata> entitys = new List<ec_enginedata>();
ec_enginedata ent = new ec_enginedata();
ent.CaseID = TagNumberCaseID;
ent.ObjectTypeID = TagNumberObjectTypeID;
ent.TagNumber = newTagNumber;
ent.EngineDataProperty = new List<ec_enginedata_property>();
foreach (var item in listShowProperty)
{
ec_enginedata_property ec_Enginedata_Property = new ec_enginedata_property()
{
MeasuringUnit = item.Unit,
PropertyName = item.DisplayText,
PropertyValue = item.PropertyValue,
};
ent.EngineDataProperty.Add(ec_Enginedata_Property);
}
entitys.Add(ent);
var ResUpdatePixelAndPropBatch = await _objectTypeService.UpdatePixelAndPropBatch(entitys);
if (ResUpdatePixelAndPropBatch != "")
{
System.Windows.MessageBox.Show(ResUpdatePixelAndPropBatch, "KunHengCAD", MessageBoxButton.OK, MessageBoxImage.Warning); return;
}
}
#endregion
#region
private string TagNumberObjectTypeID;
private string TagNumberCaseID;
/// <summary>
/// 左侧树形结构选择节点改变时,更新通道信息列表
/// </summary>
private async void UpdateChannelInfos()
{
if (SelectedTreeNode != null)
{
var a = await _objectTypeService.GetObjectTypePById(SelectedTreeNode.ID);
var b = await _objectTypeService.GetLatestSerialNumber(SelectedTreeNode.ID);
var TagNumberLs = await _objectTypeService.GetTagNumberById(SelectedTreeNode.ID);
if (TagNumberLs != null && TagNumberLs.Count() > 0)
{
TagNumberObjectTypeID = TagNumberLs.FirstOrDefault().ObjectTypeID;
TagNumberCaseID = TagNumberLs.FirstOrDefault().CaseID;
}
onTypeChange(SelectedTreeNode);
}
}
/// <summary>
/// 左边列表选中元件类型,右边出现对应属性,左下方出现图元列表
/// </summary>
/// <param name="node"></param>
2025-09-04 18:28:02 +08:00
private async void onTypeChange(Model.TreeModel node)
2025-08-15 16:34:31 +08:00
{
if (node != null)
{
#region
listShowProperty.Clear();
var listBasic = new ObservableCollection<propertyModel>();
var res = await _objectTypeService.GetObjectTypePById(node.ID);
if (res == null || !res.Any())
{
listObjects = new ObservableCollection<PropertyObjectModel>()
{ new PropertyObjectModel(){
objectTypeName=node.Text,
listBasicTypeP=listBasic,
}
};
SelectObject = listObjects[0];
isEnabledLock = false;
return;
}
#region
//位号下拉列表
var listTag = await _objectTypeService.GetTagNumberById_Brief(node.ID);
var pro = new propertyModel()
{
DisplayText = "位号",
ControlTypeName = PROPERTYType.ComboBox,
IsEnable = true,
IsBasicGroup = true,
GroupName = res[0].PropertyGroupName,
IsReturnChanged = true,
WhichPage = "新增元件"
};
if (listTag.Any())
{
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (var dto in listTag)
{
if (string.IsNullOrEmpty(dto.Text))
{ continue; }
if (items.ContainsKey(dto.Text))
{ continue; }
items.Add(dto.Text, dto.Text);
}
pro.Item = items;
listBasic.Add(pro);
}
#endregion
//添加属性
foreach (var p in res)
{
var model = new propertyModel()
{
Id = p.PropertyID,
DisplayText = p.PropertyNameEN,
PropertyValue = p.DefaultValue,
Unit = p.DefaultUnitName,
UnitId = p.DefaultUnit,
UnitTypeId = p.MeasuringUnitTypeID,
IsBasicGroup = p.BasicGroup,
GroupName = p.PropertyGroupName,
ControlTypeName = PROPERTYType.TextBox,
IsReturnChanged = true,
WhichPage = "新增元件"
};
switch (p.PropertyType)
{
case "00001"://字符
case "00004"://扩展程序
model.ControlTypeName = PROPERTYType.TextBox;
break;
case "00002"://数字(含小数、负数)
model.ControlTypeName = PROPERTYType.Number;
break;
case "00005"://uom 单位类型 10 A
model.UnitTypeId = p.MeasuringUnitTypeID;
model.ControlTypeName = PROPERTYType.Folder;
break;
case "00003"://单选下拉框
model.ControlTypeName = PROPERTYType.ComboBox;
if (!string.IsNullOrEmpty(p.EnumDataCode))
{
var data = p.EnumDataCode.Split(',');
Dictionary<string, string> items = new Dictionary<string, string>();
foreach (var e in data)
{
items.Add(e, e);
}
model.Item = items;
}
break;
case "00006"://多选下拉框
model.ControlTypeName = PROPERTYType.MultiSelectComboBox;
if (!string.IsNullOrEmpty(p.EnumDataCode))
{
var dataMult = p.EnumDataCode.Split(',');
Dictionary<string, string> itemsMult = new Dictionary<string, string>();
foreach (var e in dataMult)
{
itemsMult.Add(e, e);
}
model.Item = itemsMult;
}
break;
}
listBasic.Add(model);
}
listObjects = new ObservableCollection<PropertyObjectModel>()
{ new PropertyObjectModel(){
objectTypeName=node.Text,
listBasicTypeP=listBasic,
}
};
SelectObject = listObjects[0];
isEnabledLock = false;
#endregion
}
}
#endregion
#region
/// <summary>
/// 历史属性
/// </summary>
public ICommand Command_History { get; }
/// <summary>
/// 历史属性
/// </summary>
private void onHistory(object obj)
{
if (SelectObject == null || string.IsNullOrEmpty(SelectObject.tagNumber))
{ return; }
if (string.IsNullOrEmpty(CurrentPropertyName))
{ return; }
2025-09-04 18:28:02 +08:00
IDialogParameters x = new Prism.Services.Dialogs.DialogParameters();
2025-08-15 16:34:31 +08:00
x.Add(GlobalObject.dialogPar.para1.ToString(), SelectObject.tagNumber);
x.Add(GlobalObject.dialogPar.para2.ToString(), CurrentPropertyName);
var _dialogService = GlobalObject._prismContainer.Resolve<IDialogService>();
_dialogService.ShowDialog(nameof(DialogPropertyHistory), x, (RES) =>
{
});
}
#endregion
#region
/// <summary>
/// 属性锁
/// </summary>
public ICommand Command_Lock { get; }
/// <summary>
/// 属性锁
/// </summary>
private async void onLock(object obj)
{
if (SelectObject == null)
{ return; }
if (SelectObject.CreateUserID.ToLower() != GlobalObject.userInfo.userId.ToLower())
{
MessageBox.Show("抱歉,非元件创建者您没有该元件锁定与解锁权限!", "警告", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (isLocked)
{
//进行解锁
var msg = await _enginedataService.LockTag(SelectObject.EngineDataID, "0");
if (string.IsNullOrEmpty(msg))
{
changeLocked(false);
General.SendMessage($"元件:{SelectObject.objectTypeName},已解锁!");
}
else { MessageBox.Show(msg); }
}
else
{
//进行锁定属性
var msg = await _enginedataService.LockTag(SelectObject.EngineDataID, "1");
if (string.IsNullOrEmpty(msg))
{
changeLocked(true, GlobalObject.userInfo.userId);
General.SendMessage($"元件:{SelectObject.objectTypeName},已被【{GlobalObject.userInfo.userId}】锁定!");
}
else { MessageBox.Show(msg); }
}
}
/// <summary>
/// 改变属性锁状态
/// </summary>
/// <param name="flag">是否锁定</param>
/// <param name="userId">锁定属性的用户id</param>
private void changeLocked(bool flag, string userId = "")
{
if (flag)
{
isLocked = true;
lockTooltip = $"属性被({userId})锁定";
lockImage = lockImg;
}
else
{
isLocked = false;
lockTooltip = "属性未锁定";
lockImage = unlockImg;
}
}
#endregion
#region
/// <summary>
/// 切换属性视图
/// </summary>
public ICommand Command_Qiehuan { get; }
/// <summary>
/// 历史属性
/// </summary>
private void onQiehuan(object obj)
{
if (listShowProperty.Any())
{
isBasicGroup = !isBasicGroup;
}
}
#endregion
#region
public ICommand EditEndCmd => new DelegateCommand(EditEnd);
/// <summary>
/// 编辑结束事件
/// </summary>
/// <param name="parameter"></param>
public virtual void EditEnd(object parameter)
{
//做个标记表示该项修改过
}
#endregion
#endregion
}
}