| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371 | 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 Venus_MainPages.Unity;using Venus_MainPages.Views;//using  Venus_MainPages.Unity.SystemConfig;namespace Venus_MainPages.ViewModels{    public class SystemConfigViewModel : BindableBase    {        #region 私有字段        private List<ConfigNode> _ConfigNodes = new List<ConfigNode>();        private List<ConfigItem> _configItems = null;        private List<String> _SearchResultCollection = null;        string _CurrentNodeName = string.Empty;        private Visibility _Visibility = new Visibility();        private string[] _InstalledModules = null;        private string _SearchText;        List<string> searchResultListHistory = new List<string>();        public string SearchText        {            get { return _SearchText; }            set { _SearchText = value; RaisePropertyChanged("SearchText"); }        }        #endregion        #region 属性        public List<ConfigNode> ConfigNodes        {            get { return _ConfigNodes; }            set { _ConfigNodes = value; RaisePropertyChanged("ConfigNodes"); }        }        public List<String> SearchResultCollection        {            get { return _SearchResultCollection; }            set { _SearchResultCollection = value; RaisePropertyChanged("SearchResultCollection"); }        }        public List<ConfigItem> ConfigItems        {            get { return _configItems; }            set { _configItems = value; RaisePropertyChanged("ConfigItems"); }        }        public Visibility SearchListBoxShow        {            get { return _Visibility; }            set { _Visibility = value; RaisePropertyChanged("SearchListBoxShow"); }        }        #region 命令        private DelegateCommand<object> _TreeViewSelectedItemChangedCmd;        public DelegateCommand<object> TreeViewSelectedItemChangedCmd =>            _TreeViewSelectedItemChangedCmd ?? (_TreeViewSelectedItemChangedCmd = new DelegateCommand<object>(TreeViewSelectedItemChanged));        #endregion        #endregion        #region 命令        private DelegateCommand<object> _SetValueCommand;        public DelegateCommand<object> SetValueCommand =>            _SetValueCommand ?? (_SetValueCommand = new DelegateCommand<object>(SetValue));        private DelegateCommand<object> _SearchTextChangedCommand;        public DelegateCommand<object> SearchTextChangedCommand =>            _SearchTextChangedCommand ?? (_SearchTextChangedCommand = new DelegateCommand<object>(SearchTextChanged));        private DelegateCommand<object> _ListBoxSelectSearchResultCommand;        public DelegateCommand<object> ListBoxSelectSearchResultCommand =>            _ListBoxSelectSearchResultCommand ?? (_ListBoxSelectSearchResultCommand = new DelegateCommand<object>(SelectSearchResult));        #endregion        public SystemConfigViewModel()        {            SearchListBoxShow = Visibility.Hidden;            ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes;        }        //protected override void OnInitialize()        //{        //    base.OnInitialize();        //    ConfigNodes = SystemConfigProvider.Instance.GetConfigTree().SubNodes;        //}        //输入关键字        private void SearchTextChanged(object searchConfigItem)        {            List<string> searchResultList = new List<string>();            //如果输入框为空,不显示提示词,并展开左侧栏            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> ConfigItem = new List<ConfigItem>();                //根节点下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));        }    }}
 |