Chr
2024-08-23 12acdf14fcddae8d16e00b7b981559da67ce60ea
PdmAlert/Util.cs
@@ -7,10 +7,158 @@
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows;
using Newtonsoft.Json;
namespace PdmAlert.Util
{
    public class MaskAdorner : Adorner
    {
        private UIElement child;
        private TextBox textBox;
        public static readonly Dictionary<Visual, MaskAdorner> cache = new Dictionary<Visual, MaskAdorner>();
        public MaskAdorner(UIElement adornedElement, string message = null) : base(adornedElement)
        {
            textBox = new TextBox
            {
                TextAlignment = TextAlignment.Center,
                Background = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0)),
                Text = message,
                BorderThickness = new Thickness(0),
                BorderBrush = new SolidColorBrush(Color.FromArgb(0, 0, 0, 0))
            };
            StackPanel stackPanel = new StackPanel()
            {
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
                Background = new SolidColorBrush(Color.FromArgb(0, 255, 255, 255)),
            };
            stackPanel.Children.Add(new ProgressBar
            {
                Width = 100,
                Height = 20,
                IsIndeterminate = true
            });
            stackPanel.Children.Add(textBox);
            Child = new Border
            {
                Background = new SolidColorBrush(Color.FromArgb(100, 0, 0, 0)),
                HorizontalAlignment = HorizontalAlignment.Stretch,
                VerticalAlignment = VerticalAlignment.Stretch,
                Child = stackPanel
            };
        }
        //Adorner 直接继承自 FrameworkElement,
        //没有Content和Child属性,
        //自己添加一个,方便向其中添加我们的控件
        public UIElement Child
        {
            get => child;
            set
            {
                if (value == null)
                {
                    RemoveVisualChild(child);
                }
                else
                {
                    AddVisualChild(value);
                }
                child = value;
            }
        }
        //重写VisualChildrenCount 表示此控件只有一个子控件
        protected override int VisualChildrenCount => 1;
        //控件计算大小的时候,我们在装饰层上添加的控件也计算一下大小
        protected override Size ArrangeOverride(Size finalSize)
        {
            child?.Arrange(new Rect(finalSize));
            return finalSize;
        }
        //重写GetVisualChild,返回我们添加的控件
        protected override Visual GetVisualChild(int index)
        {
            if (index == 0 && child != null) return child;
            return base.GetVisualChild(index);
        }
        public void ShowMessage(string message)
        {
            this.textBox.Text = message;
        }
        public static void ShowMask(Visual visual, string message = null)
        {
            var sb = cache;
            if (cache.ContainsKey(visual))
            {
                return;
            }
            visual.Dispatcher.Invoke(() =>
            {
                AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(visual);
                if (adornerLayer == null) return;
                Adorner[] ads = adornerLayer.GetAdorners(adornerLayer);
                if (ads != null)
                {
                    foreach (Adorner ad in ads)
                    {
                        if (ad is MaskAdorner adorner)
                        {
                            return;
                        }
                    }
                }
                //创建我们定义的Adorner
                MaskAdorner _adorner = new MaskAdorner(adornerLayer, message);
                //添加到adornerLayer装饰层上
                adornerLayer.Add(_adorner);
                cache.Add(visual, _adorner);
            });
        }
        public static void ShowMessage(Visual visual, string message)
        {
            if (!cache.ContainsKey(visual))
            {
                return;
            }
            visual.Dispatcher.Invoke(() =>
            {
                AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(visual);
                MaskAdorner mask = cache[visual];
                if (mask == null)
                {
                    return;
                }
                mask.ShowMessage(message);
            });
        }
        public static void HideMask(Visual visual)
        {
            if (!cache.ContainsKey(visual))
            {
                return;
            }
            visual.Dispatcher.Invoke(() =>
            {
                if (cache.ContainsKey(visual))
                {
                    AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(visual);
                    adornerLayer.Remove(cache[visual]);
                    cache.Remove(visual);
                }
            });
        }
    }
    [Serializable]
    public class Result<T>
    {
@@ -37,6 +185,16 @@
        {
            get; set;
        }
    }
    public class Page<T>
    {
        public int pageNo { get; set; }
        public int pageSize { get; set; }
        public int total { get; set; }
        public int current { get; set; }
        public int size { get; set; }
        public List<T> records { get; set; }
    }
    public static class ResultHandler
@@ -236,6 +394,27 @@
            return task2.Result;
        }
        public static Result<T> PutSyncAction<T>(this HttpClient client, string url, object data = null)
        {
            StringContent content;
            if (data != null)
            {
                string dataStr = JsonUtil.Serialize(data);
                content = new StringContent(dataStr, Encoding.UTF8, "application/json");
            }
            else
            {
                content = new StringContent("");
            }
            Task<HttpResponseMessage> task = client.PutAsync(url, content);
            task.Wait();
            HttpResponseMessage response = task.Result;
            response.EnsureSuccessStatusCode();
            Task<string> task2 = response.Content.ReadAsStringAsync();
            task2.Wait();
            return JsonUtil.Deserialize<Result<T>>(task2.Result);
        }
        public static async Task<T> PostAsyncAction<T>(this HttpClient client, string url, string data)
        {
            StringContent content = new StringContent(data, Encoding.UTF8, "application/json");