using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using Aitex.Core.RT.SCCore; using ControlzEx.Standard; using MECF.Framework.Common.DataCenter; using MECF.Framework.Common.Equipment; using MECF.Framework.Common.OperationCenter; using MECF.Framework.Common.Schedulers; using Prism.Commands; using Prism.Mvvm; using CyberX8_MainPages.Unity; using CyberX8_MainPages.Views; //using CyberX8_MainPages.Unity.SystemConfig; namespace CyberX8_MainPages.ViewModels { public class SystemConfigViewModel : BindableBase { #region 私有字段 private List _ConfigNodes = new List(); private List _configItems = null; private List _SearchResultCollection = null; string _CurrentNodeName = string.Empty; private Visibility _Visibility = new Visibility(); private string[] _InstalledModules = null; private string _SearchText; List searchResultListHistory = new List(); public string SearchText { get { return _SearchText; } set { _SearchText = value; RaisePropertyChanged("SearchText"); } } #endregion #region 属性 public List ConfigNodes { get { return _ConfigNodes; } set { _ConfigNodes = value; RaisePropertyChanged("ConfigNodes"); } } public List SearchResultCollection { get { return _SearchResultCollection; } set { _SearchResultCollection = value; RaisePropertyChanged("SearchResultCollection"); } } public List ConfigItems { get { return _configItems; } set { _configItems = value; RaisePropertyChanged("ConfigItems"); } } public Visibility SearchListBoxShow { get { return _Visibility; } set { _Visibility = value; RaisePropertyChanged("SearchListBoxShow"); } } #region 命令 private DelegateCommand _TreeViewSelectedItemChangedCmd; public DelegateCommand TreeViewSelectedItemChangedCmd => _TreeViewSelectedItemChangedCmd ?? (_TreeViewSelectedItemChangedCmd = new DelegateCommand(TreeViewSelectedItemChanged)); #endregion #endregion #region 命令 private DelegateCommand _SetValueCommand; public DelegateCommand SetValueCommand => _SetValueCommand ?? (_SetValueCommand = new DelegateCommand(SetValue)); private DelegateCommand _SearchTextChangedCommand; public DelegateCommand SearchTextChangedCommand => _SearchTextChangedCommand ?? (_SearchTextChangedCommand = new DelegateCommand(SearchTextChanged)); private DelegateCommand _ListBoxSelectSearchResultCommand; public DelegateCommand ListBoxSelectSearchResultCommand => _ListBoxSelectSearchResultCommand ?? (_ListBoxSelectSearchResultCommand = new DelegateCommand(SelectSearchResult)); #endregion public SystemConfigViewModel() { SearchListBoxShow = Visibility.Hidden; } public void LoadData(string systemName) { ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; } /// /// 隐藏 /// public void Hide() { } //protected override void OnInitialize() //{ // base.OnInitialize(); // ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; //} //输入关键字 private void SearchTextChanged(object searchConfigItem) { List searchResultList = new List(); //如果输入框为空,不显示提示词,并展开左侧栏 if (string.IsNullOrEmpty((string)searchConfigItem) || searchConfigItem.ToString().Length<3) { ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; SearchListBoxShow = Visibility.Hidden; } else { ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; var itemslist = ConfigNodes.SelectMany(m => m.Items).ToList(); if (SearchText != null) { SearchListBoxShow = Visibility.Visible; //根节点 string searchResult = null; _InstalledModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(','); foreach (var ConfigNodesItems in ConfigNodes) { if (!_InstalledModules.Contains(ConfigNodesItems.Name) && ConfigNodesItems.Name != "System" && ConfigNodesItems.Name != "Recipe" && ConfigNodesItems.Name != "Scheduler") { ConfigNodesItems.IsShow = false; continue; } //根节点搜索 if (ConfigNodesItems.Name.Contains(SearchText)) { ConfigNodesItems.IsShow = true;//展开根节点 _CurrentNodeName = SearchText;//TreeView节点 searchResult = _CurrentNodeName; GetDataOfConfigItems(); } else { ConfigNodesItems.IsShow = false; //二级节点搜索 foreach (var SubNodesItems in ConfigNodesItems.SubNodes) { if (SubNodesItems.Name.ToLower().Contains(SearchText.ToLower())) { ConfigNodesItems.IsShow = true; SubNodesItems.IsShow = true; _CurrentNodeName = String.Format("{0}{1}{2}", ConfigNodesItems.Name, ".", SubNodesItems.Name); searchResult = _CurrentNodeName; GetDataOfConfigItems(); } else { SubNodesItems.IsShow = false; //叶子节点搜索 foreach (var Items in SubNodesItems.Items) { var searchResult1 = SubNodesItems.Items.FindAll(e => e.Name.ToLower().Contains(SearchText.ToLower())); if (Items.Name.ToLower().Contains(SearchText.ToLower())) { ConfigNodesItems.IsShow = true; SubNodesItems.IsShow = true; _CurrentNodeName = String.Format("{0}{1}{2}{3}{4}", ConfigNodesItems.Name, ".", SubNodesItems.Name, ".", Items.Name); searchResult = _CurrentNodeName; GetDataOfConfigItems(); searchResultList.Add(_CurrentNodeName); } } } } } var searchResult2 = ConfigNodesItems.Items.FindAll(e => e.Name.ToLower().Contains(SearchText.ToLower())); if (searchResult2.Count != 0) { ConfigNodesItems.IsShow = true; _CurrentNodeName = SearchText;//TreeView节点 searchResultList.Add(ConfigNodesItems.Name + "." + searchResult2[0].Name); searchResult = _CurrentNodeName; GetDataOfConfigItems(); } //查询为空 if (searchResult == null) { ConfigItems = null; } } } SearchResultCollection = searchResultList; if (searchResultList.Count > 0) { searchResultListHistory = searchResultList; } } } //选择选中项 private void SelectSearchResult(object slectItem) { SearchResultCollection = searchResultListHistory; ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes; if (slectItem != null) { SearchText = slectItem.ToString(); string[] searchResult = SearchText.Split('.'); List ConfigItem = new List(); //根节点下ConfigItems if (searchResult.Length == 2) { ConfigNodes.ForEach(e => e.IsShow = false); ConfigNode targetmodule = ConfigNodes.Find(e => e.Name.ToLower() == searchResult[0].ToLower()); targetmodule.IsShow = true; targetmodule.SubNodes.ForEach(e => e.IsShow = false); _CurrentNodeName = string.IsNullOrEmpty(targetmodule.Path) ? targetmodule.Name : $"{targetmodule.Path}.{targetmodule.Name}"; ConfigItems = targetmodule.Items.FindAll(e => e.Name.ToLower() == searchResult[1].ToLower()); GetDataOfConfigItems(); } //二级节点下ConfigItems if (searchResult.Length == 3) { ConfigNodes.ForEach(e => e.IsShow = false); ConfigNode targetmodule = ConfigNodes.Find(e => e.Name.ToLower() == searchResult[0].ToLower()); targetmodule.IsShow = true; targetmodule.SubNodes.ForEach(e => e.IsShow = false); ConfigNode submodule = targetmodule.SubNodes.Find(e => e.Name.ToLower() == searchResult[1].ToLower()); submodule.IsShow = true; _CurrentNodeName = string.IsNullOrEmpty(submodule.Path) ? submodule.Name : $"{submodule.Path}.{submodule.Name}"; ConfigItems = submodule.Items.FindAll(e => e.Name.ToLower() == searchResult[2].ToLower()); submodule.Items.FindAll(e => e.Name.ToLower() != searchResult[2].ToLower()).ForEach(e => e.Visible = false); GetDataOfConfigItems(); } } } private void TreeViewSelectedItemChanged(object node) { var node2 = (ConfigNode)node; _CurrentNodeName = string.IsNullOrEmpty(node2.Path) ? node2.Name : $"{node2.Path}.{node2.Name}"; string[] searchResult = null; if (SearchText == "" || SearchText == null) { ConfigItems = node2.Items; } else { searchResult = SearchText.Split('.'); if (searchResult.Length == 2) { ConfigItems = node2.Items.FindAll(e => e.Name.ToLower() == searchResult[1].ToLower()); } if (searchResult.Length == 3) { ConfigItems = node2.Items.FindAll(e => e.Name.ToLower() == searchResult[2].ToLower()); } } GetDataOfConfigItems(); } private void GetDataOfConfigItems() { if (ConfigItems == null) return; for (int i = 0; i < ConfigItems.Count; i++) { string key = String.Format("{0}{1}{2}", _CurrentNodeName, ".", ConfigItems[i].Name); ConfigItems[i].CurrentValue = SystemConfigProvider.Instance.GetValueByName(key); if (ConfigItems[i].Type == DataType.Bool) { bool value; if (bool.TryParse(ConfigItems[i].CurrentValue, out value)) ConfigItems[i].BoolValue = value; } else ConfigItems[i].StringValue = ConfigItems[i].CurrentValue; } } private void SetValue(Object myitem) { //key :System.IsSimulatorMode //value: true or false 都是字符串 //input check var item = (ConfigItem)myitem; string value; if (item.Type == DataType.Bool) { value = item.BoolValue.ToString().ToLower(); } else { if (item.TextSaved) return; if (item.Type == DataType.Int) { int iValue; if (int.TryParse(item.StringValue, out iValue)) { if (!double.IsNaN(item.Max) && !double.IsNaN(item.Min)) { if (iValue > item.Max || iValue < item.Min) { //DialogBox.ShowWarning(string.Format("The value should be between {0} and {1}.", ((int)item.Min).ToString(), ((int)item.Max).ToString())); return; } } } else { //DialogBox.ShowWarning("Please input valid data."); return; } value = item.StringValue; } else if (item.Type == DataType.Double) { double fValue; if (double.TryParse(item.StringValue, out fValue)) { if (!double.IsNaN(item.Max) && !double.IsNaN(item.Min)) { if (fValue > item.Max || fValue < item.Min) { //DialogBox.ShowWarning(string.Format("The value should be between {0} and {1}.", item.Min.ToString(), item.Max.ToString())); return; } } } else { //DialogBox.ShowWarning("Please input valid data."); return; } value = item.StringValue; } else value = item.StringValue; } string key = String.Format("{0}{1}{2}", _CurrentNodeName, ".", item.Name); InvokeClient.Instance.Service.DoOperation("System.SetConfig", key, value); item.TextSaved = true; Reload(); } public void Reload() { GetDataOfConfigItems(); } public void SaveAll() { if (ConfigItems == null) return; ConfigItems.ForEach(item => SetValue(item)); } } }