alielie
2026-06-04 771a0e7b6b1276087515bbe94de28358cb92963b
HMI.ParameterManage/ParameterSetting.xaml.cs
@@ -1,8 +1,14 @@
using HMI.Base;
using HMI.Core.Entity;
using HMI.Core.Manager;
using HMI.Core.Setting;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
@@ -15,9 +21,20 @@
    public partial class ParameterSetting : PluginControl
    {
        private ObservableCollection<ParameterData> datasource;
        public ObservableCollection<ParameterData> Datasource
        {
            get => datasource;
            set
            {
                Set(ref datasource, value);
            }
        }
        public List<string> groups = new List<string>();
        public ParameterSetting()
        {
            this.DataContext = this;
            InitializeComponent();
        }
@@ -25,13 +42,227 @@
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            var btn = ((Button)sender);
            ParameterData data = btn.DataContext as ParameterData;
            switch (btn.Name)
            {
                case "addBtn":
                    OpenDataModal(null, false);
                    break;
                case "editBtn":
                    OpenDataModal(data, true);
                    break;
                case "refreshBtn":
                    LoadData();
                    break;
                case "delBatchBtn":
                    DeleteBatch();
                    break;
                case "exportBtn":
                    ExportData();
                    break;
                case "importBtn":
                    ImportData();
                    break;
                case "delBtn":
                    DeleteData(data);
                    break;
                default:
                    break;
            }
        }
        /// <summary>
        /// 加载数据
        /// </summary>
        public void LoadData()
        {
            try
            {
                Datasource = ParameterManager.GetCommonParameter<ObservableCollection<ParameterData>>()
                ?? new ObservableCollection<ParameterData>();
                groups = Datasource.Where(d => !string.IsNullOrEmpty(d.ShowGroup)).Select(d => d.ShowGroup).Distinct().ToList();
            }
            catch (Exception ex)
            {
                Datasource = new ObservableCollection<ParameterData>();
                groups = new List<string>();
                log.Error("Refresh Data Failed.", ex);
                ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.RefreshFailed")}: {ex.Message}");
            }
        }
        /// <summary>
        /// 打开新增或编辑窗口
        /// </summary>
        /// <param name="data"></param>
        public void OpenDataModal(ParameterData data, bool isUpdate)
        {
            try
            {
                int index = isUpdate ? Datasource.IndexOf(data) : -1;
                string title = isUpdate ? $"{this.lang("App.Edit")}" : $"{this.lang("App.Add")}";
                SettingModal modal = new SettingModal()
                {
                    Title = title,
                    Owner = Window.GetWindow(this)
                };
                if (modal.Open(data ?? new ParameterData(), Datasource, groups) == true)
                {
                    if (index == -1)
                    {
                        Datasource.Add(modal.Data);
                        ParameterManager.SaveCommonParameter(Datasource);
                    }
                    else
                    {
                        ParameterManager.SaveCommonParameter(Datasource);
                    }
                    LoadData();
                }
            }
            catch (Exception ex)
            {
                if (isUpdate)
                {
                    log.Error("Edit Data Failed.", ex);
                    MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.EditFailed")}: {ex.Message}");
                }
                else
                {
                    log.Error("Add Data Failed.", ex);
                    MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.AddFailed")}: {ex.Message}");
                }
            }
        }
        /// <summary>
        /// 批量删除
        /// </summary>
        public void DeleteBatch()
        {
            try
            {
                var count = Datasource.Where(d => d.IsSelected).Count();
                if (count <= 0)
                {
                    ToastHelper.Warning(this, this.lang("HMI.NoDeleteData"));
                    return;
                }
                if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeletes", count))
                    == MessageBoxResult.OK)
                {
                    var temp = Datasource.Where(d => !d.IsSelected).ToList();
                    ParameterManager.SaveCommonParameter(temp);
                    LoadData();
                }
            }
            catch (Exception ex)
            {
                log.Error("Delete Batch Data Failed.", ex);
                ToastHelper.Error(Window.GetWindow(this), $"{this.lang("App.DeleteFailed")}: {ex.Message}");
            }
        }
        /// <summary>
        /// 删除参数
        /// </summary>
        /// <param name="data"></param>
        private void DeleteData(ParameterData data)
        {
            try
            {
                if (MsgBoxHelper.WarnMessage(this, this.lang("HMI.MakeSureDeleteSingle", data.Name))
                    == MessageBoxResult.OK)
                {
                    int index = Datasource.IndexOf(data);
                    if (index < 0)
                    {
                        ToastHelper.Error(this, this.lang("App.ParameterException"));
                        return;
                    }
                    var temp = XmlHelper.DeepClone(Datasource);
                    temp.RemoveAt(index);
                    ParameterManager.SaveCommonParameter(temp);
                    LoadData();
                }
            }
            catch (Exception ex)
            {
                log.Error("Delete Parameter Failed.", ex);
                ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}");
                return;
            }
        }
        /// <summary>
        /// 导出数据
        /// </summary>
        private void ExportData()
        {
            try
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "";
                sfd.DefaultExt = "xls";
                sfd.FileName = this.lang("Pm.Setting.Title");
                if (sfd.ShowDialog() == true)
                {
                    string targetPath = sfd.FileName;
                    ExcelHelper.ExportExcel(targetPath, Datasource);
                    ToastHelper.Success(Window.GetWindow(this), this.lang("App.ExportSuccess"));
                }
            }
            catch (Exception ex)
            {
                log.Error("Export Data Failed.", ex);
                MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
            }
        }
        private void ImportData()
        {
            try
            {
                OpenFileDialog openFileDialog = new OpenFileDialog();
                openFileDialog.Filter = "execl(*.xlsx;*.xls)|*.xlsx;*.xls";
                openFileDialog.Title = this.lang("App.SelectFile");
                openFileDialog.Multiselect = false;
                if (openFileDialog.ShowDialog() == true)
                {
                    List<ParameterData> datas = ExcelHelper.ReadFromExcel<ParameterData>(openFileDialog.FileName);
                    ParameterManager.SaveCommonParameter(datas);
                    LoadData();
                }
            }
            catch (Exception ex)
            {
                log.Error("Export Data Failed.", ex);
                MsgBoxHelper.Error(Window.GetWindow(this), $"{this.lang("App.ExportFailed")}: {ex.Message}");
            }
        }
        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            LoadData();
            Loaded -= UserControl_Loaded;
        }
        public override bool CanActive()
        {
            if (ParamSetting.IsOptRequirePassword)
            {
                var win = new RequirePasswordWindow
                {
                    Owner = Window.GetWindow(this),
                    WindowStartupLocation = WindowStartupLocation.CenterScreen
                };
                return win.ShowDialog() == true;
            }
            else
            {
                return true;
            }
        }
    }
}