From 12e606635c42ea20f4b7c2bdda5204237a4b4c96 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 02 三月 2026 16:14:49 +0800
Subject: [PATCH] 优化

---
 WPFProject/PanuonWindow.xaml.cs |  118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 113 insertions(+), 5 deletions(-)

diff --git a/WPFProject/PanuonWindow.xaml.cs b/WPFProject/PanuonWindow.xaml.cs
index 71de9ee..3ed72b3 100644
--- a/WPFProject/PanuonWindow.xaml.cs
+++ b/WPFProject/PanuonWindow.xaml.cs
@@ -4,20 +4,34 @@
 using HMI.Core.Setting;
 using HMI.Core.Util;
 using HMI.UI.Util;
+using HMI.Util.Alarm;
 using Panuon.WPF.UI;
 using System;
+using System.Collections.ObjectModel;
 using System.ComponentModel;
 using System.IO;
+using System.Linq;
 using System.Windows;
 using System.Windows.Controls;
 using System.Windows.Media.Imaging;
 
 namespace WPFProject
 {
+    public class SimpleAlarm
+    {
+        public string Id { get; set; }
+        public string Time { get; set; }
+        public string Message { get; set; }
+        public override string ToString()
+        {
+            return $"{Time} {Message}";
+        }
+    }
+
     /// <summary>
     /// PanuonWindow.xaml 鐨勪氦浜掗�昏緫
     /// </summary>
-    public partial class PanuonWindow : WindowX, IPluginContainer
+    public partial class PanuonWindow : WindowX, IPluginContainer, IAlarmShow
     {
         public PanuonWindow()
         {
@@ -34,12 +48,46 @@
             }
         }
 
+        private string welcomeTitle;
+        public string WelcomeTitle
+        {
+            get => welcomeTitle;
+            set
+            {
+                Set(ref welcomeTitle, value);
+            }
+        }
+
+        private ObservableCollection<SimpleAlarm> alarms = new ObservableCollection<SimpleAlarm>();
+        public ObservableCollection<SimpleAlarm> Alarms
+        {
+            get => alarms;
+            set
+            {
+                Set(ref alarms, value);
+            }
+        }
+
+        public int AlarmCount
+        {
+            get => Alarms?.Count ?? 0;
+        }
+
+        public ListBox sb
+        {
+            get; set;
+        }
+
         private void PanuonWindow_Loaded(object sender, RoutedEventArgs e)
         {
             DataContext = this;
             RefrshConfig();
             InitializeComponent();
-            userMenu.Header = this.lang("App.Welcome", UserInfo.User.Name);
+            AlarmShowHelper.Register(this);
+            var sb = WindowXCaption.GetHeaderTemplate(this);
+            //sb.FindName("list",this.Con);
+
+            WelcomeTitle = this.lang("App.Welcome", UserInfo.User.Name);
             ShowMenu = false;
             Application.Current.MainWindow = this;
             SystemSetting.SystemSettingChanged += SystemSetting_SystemSettingChanged;
@@ -124,6 +172,8 @@
             }
         }
 
+        private bool logoutAdded = false;
+
         private void Logout()
         {
             if (MsgBoxHelper.WarnMessage(this, this.lang("App.MakeSureLogout")) == MessageBoxResult.OK)
@@ -134,11 +184,25 @@
                     File.Delete(path);
                 }
                 this.Closed -= window_Closed;
+                if (!logoutAdded)
+                {
+                    this.Closed += Logout_PanuonWindow_Closed;
+                    logoutAdded = true;
+                }
                 this.Close();
-                PluginLoader.Reset();
-                Login login = new Login();
-                login.Show();
             }
+        }
+
+        private void Logout_PanuonWindow_Closed(object sender, EventArgs e)
+        {
+            AlarmUtil.Release();
+            PluginLoader.Reset();
+            UserInfo.Logout();
+            AlarmShowHelper.UnRegister(this);
+            Login login = new Login();
+            login.Show();
+            this.Closed -= Logout_PanuonWindow_Closed;
+            logoutAdded = false;
         }
 
         private void RestartApp()
@@ -157,6 +221,17 @@
 
         private void window_Closed(object sender, EventArgs e)
         {
+            try
+            {
+                AlarmUtil.Release();
+                PluginLoader.Reset();
+                UserInfo.Logout();
+                AlarmShowHelper.UnRegister(this);
+            }
+            catch (Exception ex)
+            {
+
+            }
             Application.Current.Shutdown();
         }
 
@@ -172,6 +247,7 @@
                     this.Maximize();
                     break;
                 case "closeBtn":
+                    this.Closed -= Logout_PanuonWindow_Closed;
                     this.Close();
                     break;
                 case "BtnSwitchTheme":
@@ -188,6 +264,38 @@
             }
         }
 
+        public bool ShowAlarm(AlarmText alarm)
+        {
+            bool res = false;
+            Dispatcher.Invoke(() =>
+            {
+                if (Alarms.FirstOrDefault(e => e.Id == alarm.VirtualId) == null)
+                {
+                    var data = new SimpleAlarm
+                    {
+                        Id = alarm.VirtualId,
+                        Time = alarm.Time,
+                        Message = alarm.AlarmInfo
+                    };
+                    Alarms.Add(data);
+                    sb?.ScrollIntoView(data);
+                    res = true;
+                }
+            });
+            return res;
+        }
+
+        private void list_Loaded(object sender, RoutedEventArgs e)
+        {
+            sb = sender as ListBox;
+            sb.Loaded -= list_Loaded;
+        }
+
+        private void Clear_AllAlarm_Click(object sender, RoutedEventArgs e)
+        {
+            Alarms?.Clear();
+        }
+
         //private void BaseWindow_Loaded(object sender, RoutedEventArgs e)
         //{
         //    var s = (Style)this.Resources["WindowButton"];

--
Gitblit v1.9.1