alielie
2025-11-21 3a471ae651b228231bebb3a2d438baa1d4ac0261
HMI.AlermInfoManage/AlarmSettingList.xaml.cs
@@ -1,7 +1,10 @@
using HMI.AlarmInfoManage.Entity;
using HMI.Core.Util;
using HMI.UI.Util;
using HMI.Util;
using log4net;
using Microsoft.Win32;
using NPOI.SS.Formula.Functions;
using Panuon.WPF.UI;
using System;
using System.Collections.ObjectModel;
@@ -18,10 +21,14 @@
    public partial class AlarmSettingList : WindowX
    {
        private ILog log;
        public AlarmSettingList(string blockFile, string markFile, ILog log)
        public AlarmSettingList(string blockFile, string markFile, ObservableCollection<AlarmSetting> datasource,
            ObservableCollection<AlarmSetting> markDatasource,
            ILog log)
        {
            this.blockFile = blockFile;
            this.markFile = markFile;
            Datasource = datasource;
            MarkDatasource = markDatasource;
            this.log = log;
            DataContext = this;
            InitializeComponent();
@@ -47,7 +54,7 @@
        }
        private ObservableCollection<string> items =
            new ObservableCollection<string> { "DB块报警", "标志位报警" };
            new ObservableCollection<string> { LangUtil.Get("Alm.DbBlockAlarm"), LangUtil.Get("Alm.TagAlarm") };
        public ObservableCollection<string> Items
        {
@@ -55,14 +62,13 @@
            set { Set(ref items, value); }
        }
        private string selectedValue;
        public string SelectedValue
        private int itemIndex;
        public int ItemIndex
        {
            get { return selectedValue; }
            get => itemIndex;
            set
            {
                Set(ref selectedValue, value);
                Set(ref itemIndex, value);
                LoadData();
            }
        }
@@ -70,7 +76,7 @@
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Button btn = sender as Button;
            DataGridRow row = btn?.Tag as DataGridRow;
            AlarmSetting data = btn?.Tag as AlarmSetting;
            switch (btn.Name)
            {
                case "refreshBtn":
@@ -83,37 +89,58 @@
                    DeleteBatchData();
                    break;
                case "editBtn":
                    EditData(row.GetIndex(), btn.DataContext as AlarmSetting);
                    EditData(ItemIndex == 0 ? Datasource.IndexOf(data) : MarkDatasource.IndexOf(data), data);
                    break;
                case "exportBtn":
                    ExportData();
                    break;
                case "importBtn":
                    ImportData();
                    break;
                case "delBtn":
                    DeleteData(row.GetIndex());
                    DeleteData(ItemIndex == 0 ? Datasource.IndexOf(data) : MarkDatasource.IndexOf(data));
                    break;
                default:
                    break;
            }
        }
        private void LoadData()
        {
            try
            {
                ObservableCollection<AlarmSetting> datasource = new ObservableCollection<AlarmSetting>();
                if (SelectedValue == "DB块报警" && File.Exists(blockFile))
                if (File.Exists(blockFile))
                {
                    datasource =
                    Datasource =
                        XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(blockFile);
                }
                else if (SelectedValue == "标志位报警" && File.Exists(markFile))
                else
                {
                    datasource =
                        XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(markFile);
                    Datasource = new ObservableCollection<AlarmSetting>();
                }
                Datasource = datasource;
            }
            catch (Exception ex)
            {
                ToastHelper.Error(this, $"加载错误!{ex.Message}");
                Datasource = new ObservableCollection<AlarmSetting>();
                ToastHelper.Error(this, $"{this.lang("App.LoadFailed")}: {ex.Message}");
            }
            try
            {
                if (File.Exists(markFile))
                {
                    MarkDatasource =
                        XmlHelper.DeserializeFromXml<ObservableCollection<AlarmSetting>>(markFile);
                }
                else
                {
                    MarkDatasource = new ObservableCollection<AlarmSetting>();
                }
            }
            catch (Exception ex)
            {
                MarkDatasource = new ObservableCollection<AlarmSetting>();
                ToastHelper.Error(this, $"{this.lang("App.LoadFailed")}: {ex.Message}");
            }
        }
@@ -121,13 +148,14 @@
        {
            try
            {
                var file = SelectedValue == "DB块报警" ? blockFile : markFile;
                var file = ItemIndex == 0 ? blockFile : markFile;
                var temp = ItemIndex == 0 ? this.lang("Alm.DbBlockAlarm") : this.lang("Alm.TagAlarm");
                var modal = new AlarmSettingModal(log)
                {
                    Title = $"新增{SelectedValue}",
                    Title = $"{this.lang("App.Add")}{temp}",
                    Owner = Window.GetWindow(this),
                };
                if (modal.Open(-1, data, Datasource, file) == true)
                if (modal.Open(-1, data, ItemIndex == 0 ? Datasource : MarkDatasource, file, ItemIndex != 0) == true)
                {
                    LoadData();
                }
@@ -135,7 +163,7 @@
            catch (Exception ex)
            {
                log.Error("Add AlarmSetting Failed.", ex);
                ToastHelper.Error(this, $"新增失败!{ex.Message}");
                ToastHelper.Error(this, $"{this.lang("App.AddFailed")}: {ex.Message}");
            }
        }
@@ -143,13 +171,14 @@
        {
            try
            {
                var file = SelectedValue == "DB块报警" ? blockFile : markFile;
                var file = ItemIndex == 0 ? blockFile : markFile;
                var temp = ItemIndex == 0 ? this.lang("Alm.DbBlockAlarm") : this.lang("Alm.TagAlarm");
                var modal = new AlarmSettingModal(log)
                {
                    Title = $"编辑{SelectedValue}",
                    Title = $"{this.lang("App.Edit")}{temp}",
                    Owner = Window.GetWindow(this),
                };
                if (modal.Open(index, data, Datasource, file) == true)
                if (modal.Open(index, data, ItemIndex == 0 ? Datasource : MarkDatasource, file, ItemIndex != 0) == true)
                {
                    LoadData();
                }
@@ -157,17 +186,72 @@
            catch (Exception ex)
            {
                log.Error("Edit AlarmSetting Failed.", ex);
                ToastHelper.Error(this, $"编辑失败!{ex.Message}");
                ToastHelper.Error(this, $"{this.lang("App.EditFailed")}: {ex.Message}");
            }
        }
        private void ExportData()
        {
            try
            {
                SaveFileDialog sfd = new SaveFileDialog
                {
                    FileName = ItemIndex == 0 ? "DB块报警.xls" : "标志位报警.xls",
                    Filter = "Excel|*.xls"
                };
                if (sfd.ShowDialog() == true)
                {
                    ExcelHelper.ExportExcel(sfd.FileName, ItemIndex == 0 ? Datasource : MarkDatasource);
                }
            }
            catch (Exception ex)
            {
                log.Error("Export Failed.", ex);
                ToastHelper.Error(this, $"{this.lang("App.ExportFailed")}: {ex.Message}");
            }
        }
        private void ImportData()
        {
            try
            {
                OpenFileDialog ofd = new OpenFileDialog
                {
                    Filter = "Excel|*.xls"
                };
                if (ofd.ShowDialog() == true)
                {
                    var datasource = new ObservableCollection<AlarmSetting>(
                        ExcelHelper.ReadFromExcel<AlarmSetting>(ofd.FileName));
                    if (ItemIndex == 0)
                    {
                        Datasource = datasource;
                    }
                    else
                    {
                        MarkDatasource = datasource;
                    }
                    var file = ItemIndex == 0 ? blockFile : markFile;
                    var temp = ItemIndex == 0 ? Datasource : MarkDatasource;
                    XmlHelper.SerializeToXml(file, temp);
                    LoadData();
                }
            }
            catch (Exception ex)
            {
                log.Error("Import Failed.", ex);
                ToastHelper.Error(this, $"{this.lang("App.ImportFailed")}: {ex.Message}");
            }
        }
        private void DeleteData(int index)
        {
            try
            {
                if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), "确定要删除该项吗?该操作不可逆") == MessageBoxResult.OK)
                if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), this.lang("HMI.MakeSureDeleteThis")) == MessageBoxResult.OK)
                {
                    var file = SelectedValue == "DB块报警" ? blockFile : markFile;
                    var temp = XmlHelper.DeepClone(Datasource);
                    var file = ItemIndex == 0 ? blockFile : markFile;
                    var temp = XmlHelper.DeepClone(ItemIndex == 0 ? Datasource : MarkDatasource);
                    temp.RemoveAt(index);
                    XmlHelper.SerializeToXml(file, temp);
@@ -177,24 +261,25 @@
            catch (Exception ex)
            {
                log.Error("Delete AlarmSetting Failed.", ex);
                ToastHelper.Error(this, $"删除失败!{ex.Message}");
                ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}");
            }
        }
        private void DeleteBatchData()
        {
            try
            {
                var temp = Datasource.Where(e => e.IsSelected).ToList();
                var temp = (ItemIndex == 0 ? Datasource : MarkDatasource).Where(e => e.IsSelected).ToList();
                if (temp == null || temp.Count <= 0)
                {
                    ToastHelper.Warning(Window.GetWindow(this), "请选择要删除的数据");
                    ToastHelper.Warning(Window.GetWindow(this), this.lang("HMI.NoDeleteData"));
                    return;
                }
                if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), $"确定要删除{temp.Count}项数据吗?该操作不可逆") == MessageBoxResult.OK)
                if (MsgBoxHelper.WarnMessage(Window.GetWindow(this), this.lang("HMI.MakeSureDeletes", temp.Count))
                    == MessageBoxResult.OK)
                {
                    var file = SelectedValue == "DB块报警" ? blockFile : markFile;
                    temp = Datasource.Where(e => !e.IsSelected).ToList();
                    var file = ItemIndex == 0 ? blockFile : markFile;
                    temp = (ItemIndex == 0 ? Datasource : MarkDatasource).Where(e => !e.IsSelected).ToList();
                    XmlHelper.SerializeToXml(file, temp);
                    LoadData();
                }
@@ -202,13 +287,13 @@
            catch (Exception ex)
            {
                log.Error("Delete Batch AlarmSetting Failed.", ex);
                ToastHelper.Error(this, $"删除失败!{ex.Message}");
                ToastHelper.Error(this, $"{this.lang("App.DeleteFailed")}: {ex.Message}");
            }
        }
        private void WindowX_Loaded(object sender, RoutedEventArgs e)
        {
            SelectedValue = "DB块报警";
            ItemIndex = 0;
            Loaded -= WindowX_Loaded;
        }
    }