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; using Prism.Services.Dialogs; using SWS.Commons; using SWS.Model; using SWS.WPF.ViewModels; using SWS.Service; namespace SWS.CAD.ViewModels { public class DialogNewComponentViewModel : DialogBase, IDialogAware { #region 字段 private ObservableCollection _TreeNodes; /// /// 左侧树形结构数据源 /// public ObservableCollection TreeNodes { get { return _TreeNodes; } set { _TreeNodes = value; RaisePropertyChanged(nameof(TreeNodes)); } } private Model.TreeModel _SelectedTreeNode; /// /// 当前选中的树形节点 /// public Model.TreeModel SelectedTreeNode { get { return _SelectedTreeNode; } set { _SelectedTreeNode = value; RaisePropertyChanged(nameof(SelectedTreeNode)); UpdateChannelInfos(); } } private ObservableCollection _listShowProperty; /// /// 显示属性列表 /// public ObservableCollection listShowProperty { get { return _listShowProperty; } set { _listShowProperty = value; RaisePropertyChanged(nameof(listShowProperty)); } } private ObservableCollection _listObjects; /// /// 属性列表 /// public ObservableCollection listObjects { get { return _listObjects; } set { _listObjects = value; RaisePropertyChanged(nameof(listObjects)); } } private PropertyObjectModel _SelectObject; /// /// 选中属性 /// public PropertyObjectModel SelectObject { get { return _SelectObject; } set { _SelectObject = value; RaisePropertyChanged(nameof(SelectObject)); changeProObj(value); } } private bool _isEnabledLock = false; /// /// 属性锁、查看属性历史 功能是否启用 /// public bool isEnabledLock { get { return _isEnabledLock; } set { _isEnabledLock = value; RaisePropertyChanged(nameof(isEnabledLock)); } } private bool _isEnabledHistory = false; /// /// 查看属性历史 功能是否启用 /// public bool isEnabledHistory { get { return _isEnabledHistory; } set { _isEnabledHistory = value; RaisePropertyChanged(nameof(isEnabledHistory)); } } private ImageSource _lockImage; /// /// 属性锁 /// public ImageSource lockImage { get { return _lockImage; } set { _lockImage = value; RaisePropertyChanged(nameof(lockImage)); } } private ImageSource _lock2Image; /// /// 属性锁 Enable为false时灰色 /// public ImageSource lock2Image { get { return _lock2Image; } set { _lock2Image = value; RaisePropertyChanged(nameof(lock2Image)); } } private ImageSource _historyImage; /// /// 历史属性 /// public ImageSource historyImage { get { return _historyImage; } set { _historyImage = value; RaisePropertyChanged(nameof(historyImage)); } } private ImageSource _history2Image; /// /// 历史属性 Enable为false时灰色 /// public ImageSource history2Image { get { return _history2Image; } set { _history2Image = value; RaisePropertyChanged(nameof(history2Image)); } } private ImageSource _qiehuanImage; /// /// 切换属性视图 /// public ImageSource qiehuanImage { get { return _qiehuanImage; } set { _qiehuanImage = value; RaisePropertyChanged(nameof(qiehuanImage)); } } private string _lockTooltip = "属性未锁定"; /// /// 属性锁提示文本 /// public string lockTooltip { get { return _lockTooltip; } set { _lockTooltip = value; RaisePropertyChanged(nameof(lockTooltip)); } } /// /// 下拉框选择不一样的元件类型 /// private void changeProObj(PropertyObjectModel proObj) { if (proObj != null) { listShowProperty = proObj.listBasicTypeP; } } private bool _isBasicGroup = true; /// /// 是否属性常用分组 /// public bool isBasicGroup { get { return _isBasicGroup; } set { _isBasicGroup = value; RaisePropertyChanged(nameof(isBasicGroup)); } } private bool _isLocked; /// /// 是否锁定属性 /// public bool isLocked { get { return _isLocked; } set { isEnabledGridProterty = !value; isEnabledHistory = !value; _isLocked = value; RaisePropertyChanged(nameof(isLocked)); } } private bool _isEnabledGridProterty = true; /// /// Grid是否启用 /// public bool isEnabledGridProterty { get { return _isEnabledGridProterty; } set { _isEnabledGridProterty = value; RaisePropertyChanged(nameof(isEnabledGridProterty)); } } private string _CurrentPropertyName; /// /// 选中的属性名称 /// public string CurrentPropertyName { get { return _CurrentPropertyName; } set { _CurrentPropertyName = value; RaisePropertyChanged(nameof(CurrentPropertyName)); } } private bool _IsEnableChangeEvent = false; /// /// 是否启动下拉选项改变事件 /// 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(); _enginedataService = GlobalObject.container.Resolve(); listShowProperty = new ObservableCollection(); 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(); //_eventAggregator.GetEvent().Subscribe(SelecttionChange, ThreadOption.UIThread, true); //订阅事件 eventAggregator.GetEvent().Subscribe(SelecttionChange, ThreadOption.UIThread, true); eventAggregator.GetEvent().Subscribe(LostFocus, ThreadOption.UIThread, true); } public string Title => ""; public event Action RequestClose; public bool CanCloseDialog() { return true; } public void OnDialogClosed() { } private List CablePreAssigns; public async void OnDialogOpened(IDialogParameters parameters) { //title = parameters.GetValue(GlobalObject.dialogPar.title.ToString()); title = "新增元件"; //获取左侧树形结构数据 TreeNodes = new ObservableCollection(GlobalObject.designTree.Where(t => t.Text.Equals("接线设备"))); IsEnableChangeEvent = parameters.GetValue(GlobalObject.dialogPar.info.ToString()); } public override void ExecuteOKCommandAsync(object para) { //返回结果 IDialogParameters res = new Prism.Services.Dialogs.DialogParameters(); res.Add(GlobalObject.dialogPar.para1.ToString(), listShowProperty); RequestClose.Invoke(new DialogResult(ButtonResult.Yes, res)); } public override void ExecuteCloseCommand(object parameter) { 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 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 entitys = new List(); ec_enginedata ent = new ec_enginedata(); ent.CaseID = TagNumberCaseID; ent.ObjectTypeID = TagNumberObjectTypeID; ent.TagNumber = newTagNumber; ent.EngineDataProperty = new List(); 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; /// /// 左侧树形结构选择节点改变时,更新通道信息列表 /// 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); } } /// /// 左边列表选中元件类型,右边出现对应属性,左下方出现图元列表 /// /// private async void onTypeChange(Model.TreeModel node) { if (node != null) { #region 获取属性,并显示出来 listShowProperty.Clear(); var listBasic = new ObservableCollection(); var res = await _objectTypeService.GetObjectTypePById(node.ID); if (res == null || !res.Any()) { listObjects = new ObservableCollection() { 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 items = new Dictionary(); 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 items = new Dictionary(); 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 itemsMult = new Dictionary(); foreach (var e in dataMult) { itemsMult.Add(e, e); } model.Item = itemsMult; } break; } listBasic.Add(model); } listObjects = new ObservableCollection() { new PropertyObjectModel(){ objectTypeName=node.Text, listBasicTypeP=listBasic, } }; SelectObject = listObjects[0]; isEnabledLock = false; #endregion } } #endregion #region 历史属性 /// /// 历史属性 /// public ICommand Command_History { get; } /// /// 历史属性 /// private void onHistory(object obj) { if (SelectObject == null || string.IsNullOrEmpty(SelectObject.tagNumber)) { return; } if (string.IsNullOrEmpty(CurrentPropertyName)) { return; } IDialogParameters x = new Prism.Services.Dialogs.DialogParameters(); x.Add(GlobalObject.dialogPar.para1.ToString(), SelectObject.tagNumber); x.Add(GlobalObject.dialogPar.para2.ToString(), CurrentPropertyName); var _dialogService = GlobalObject._prismContainer.Resolve(); _dialogService.ShowDialog(nameof(DialogPropertyHistory), x, (RES) => { }); } #endregion #region 属性锁 /// /// 属性锁 /// public ICommand Command_Lock { get; } /// /// 属性锁 /// 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); } } } /// /// 改变属性锁状态 /// /// 是否锁定 /// 锁定属性的用户id private void changeLocked(bool flag, string userId = "") { if (flag) { isLocked = true; lockTooltip = $"属性被({userId})锁定"; lockImage = lockImg; } else { isLocked = false; lockTooltip = "属性未锁定"; lockImage = unlockImg; } } #endregion #region 切换属性视图 /// /// 切换属性视图 /// public ICommand Command_Qiehuan { get; } /// /// 历史属性 /// private void onQiehuan(object obj) { if (listShowProperty.Any()) { isBasicGroup = !isBasicGroup; } } #endregion #region 编辑事件结束 public ICommand EditEndCmd => new DelegateCommand(EditEnd); /// /// 编辑结束事件 /// /// public virtual void EditEnd(object parameter) { //做个标记表示该项修改过 } #endregion #endregion } }