From 3b2a6bb9047cfce9f501593b3669a9c1af6c5df4 Mon Sep 17 00:00:00 2001
From: lcy <1459594991@qq.com>
Date: 星期三, 05 十一月 2025 17:40:23 +0800
Subject: [PATCH] 130 战斗修改回合样式

---
 Main/System/Mail/MailManager.cs |  632 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 353 insertions(+), 279 deletions(-)

diff --git a/Main/System/Mail/MailManager.cs b/Main/System/Mail/MailManager.cs
index 74b5968..cd3365b 100644
--- a/Main/System/Mail/MailManager.cs
+++ b/Main/System/Mail/MailManager.cs
@@ -2,333 +2,407 @@
 using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
+using LitJson;
 
-namespace vnxbqy.UI
+
+public class MailManager : GameSystemManager<MailManager>
 {
-    public class MailManager : GameSystemManager<MailManager>
+    /// <summary>
+    /// 閭欢鏁版嵁瀛楀吀锛屽瓨鍌ㄦ墍鏈夐偖浠惰鎯�
+    /// Key: 閭欢GUID(鍞竴鏍囪瘑)
+    /// Value: 閭欢璇︾粏鏁版嵁(MailData缁撴瀯浣�)
+    /// </summary>
+    Dictionary<string, MailData> mailDataDict = new Dictionary<string, MailData>();
+    public MailCategory nowMailCategory = MailCategory.Personal;
+    public Redpoint parentRedpoint = new Redpoint(MainRedDot.MailRepoint);
+    public Redpoint tabRedpoint0;
+    public Redpoint tabRedpoint1;
+    public event Action OnUpdateMailListEvent;// 鏇存柊閭欢鍒楄〃鏁版嵁
+    public event Action OnUpdateMailStateChangeEvent;// 鏇存柊閭欢鐘舵�佸彉鏇�
+    public readonly string dateFormat = "yyyy.MM.dd";
+    public string nowUuid = string.Empty;
+    public int personalMailMaxLimitCount;
+
+
+    public override void Init()
     {
-        /// <summary>
-        /// 閭欢鏁版嵁瀛楀吀锛屽瓨鍌ㄦ墍鏈夐偖浠惰鎯�
-        /// Key: 閭欢GUID(鍞竴鏍囪瘑)
-        /// Value: 閭欢璇︾粏鏁版嵁(MailData缁撴瀯浣�)
-        /// </summary>
-        Dictionary<string, MailData> mailDataDict = new Dictionary<string, MailData>();
-        public MailCategory nowMailCategory = MailCategory.Personal;
-        public Redpoint parentRedpoint = new Redpoint(MainRedDot.MailRepoint);
-        public Redpoint tabRedpoint0;
-        public Redpoint tabRedpoint1;
-        public event Action OnUpdateMailListEvent;// 鏇存柊閭欢鍒楄〃鏁版嵁
-        public event Action OnUpdateMailStateChangeEvent;// 鏇存柊閭欢鐘舵�佸彉鏇�
-        public readonly string dateFormat = "yyyy-MM-dd";
-        public string nowUuid = string.Empty;
-        public override void Init()
-        {
-            tabRedpoint0 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Personal));
-            tabRedpoint1 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Global));
-            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
-        }
+        tabRedpoint0 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Personal));
+        tabRedpoint1 = new Redpoint(MainRedDot.MailRepoint, GetTabRedpointId(MailCategory.Global));
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitializeEvent;
+        personalMailMaxLimitCount = int.Parse(FuncConfigConfig.Get("PersonalMail").Numerical1);
+    }
 
-        public override void Release()
-        {
-            DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
-        }
+    public override void Release()
+    {
+        DTC0102_tagCDBPlayer.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitializeEvent;
+    }
 
-        public void OnBeforePlayerDataInitializeEvent()
-        {
-            mailDataDict.Clear();
-        }
+    public void OnBeforePlayerDataInitializeEvent()
+    {
+        mailDataDict.Clear();
+    }
 
-        public bool HasNoReadMail(MailCategory category)
-        {
-            var list = GetMailList(category);
-            if (list.IsNullOrEmpty())
-                return false;
-
-            foreach (var guid in list)
-            {
-                if (mailDataDict.TryGetValue(guid, out var mailData) && mailData.MailState == 1)
-                    return true;
-            }
+    public bool HasNoReadMail(MailCategory category)
+    {
+        var list = GetMailList(category);
+        if (list.IsNullOrEmpty())
             return false;
+
+        foreach (var guid in list)
+        {
+            if (mailDataDict.TryGetValue(guid, out var mailData) && mailData.MailState == 1)
+                return true;
+        }
+        return false;
+    }
+
+    public int GetTabRedpointId(MailCategory type)
+    {
+        return MainRedDot.MailRepoint * 10 + (int)type;
+    }
+
+    public void UpdatePersonalRedPoint()
+    {
+        if (tabRedpoint0 == null)
+            return;
+        tabRedpoint0.state = RedPointState.None;
+        if (HasNoReadMail(MailCategory.Personal))
+        {
+            tabRedpoint0.state = RedPointState.Simple;
+        }
+    }
+
+    public void UpdateGlobalRedPoint()
+    {
+        if (tabRedpoint1 == null) return;
+        tabRedpoint1.state = RedPointState.None;
+        if (HasNoReadMail(MailCategory.Global))
+        {
+            tabRedpoint1.state = RedPointState.Simple;
+        }
+    }
+
+    /// <summary>
+    /// 鏇存柊閭欢绾㈢偣鎻愮ず鐘舵��
+    /// </summary>
+    public void UpdateRedPoint()
+    {
+        UpdatePersonalRedPoint();
+        UpdateGlobalRedPoint();
+    }
+
+    public bool TryGetMailData(string uuid, out MailData mailData)
+    {
+        return mailDataDict.TryGetValue(uuid, out mailData);
+    }
+    public string FormatCreateMailTime(DateTime createDateTime)
+    {
+        TimeSpan diff = TimeUtility.ServerNow - createDateTime;
+        if (diff.TotalHours <= 24)
+        {
+            int hours = (int)Math.Floor(diff.TotalHours);
+            return Language.Get("Mail05", hours);
+        }
+        else
+        {
+            return createDateTime.ToString(dateFormat);
+        }
+    }
+
+    // 杩斿洖鏈夋晥鏈熷ぉ鏁�(姝f暟=鍓╀綑澶╂暟锛岃礋鏁�=宸茶繃鏈熷ぉ鏁�)
+    public float GetMailExpiryDays(DateTime createDateTime, int limitDays)
+    {
+        // 璁$畻鍒版湡鏃ュ綋澶╃殑0鐐规椂闂�
+        DateTime expiryDate = createDateTime.Date.AddDays(limitDays);
+        DateTime serverNow = TimeUtility.ServerNow;
+        TimeSpan remainingTime = expiryDate - serverNow;
+        return (float)remainingTime.TotalDays;
+    }
+
+    public string FormatMailExpiryDays(DateTime createDateTime, int limitDays)
+    {
+        string result = string.Empty;
+        float days = GetMailExpiryDays(createDateTime, limitDays);
+        // 闃叉姢锛氬鐞嗗洜瀹㈡埛绔笌鏈嶅姟鍣ㄦ椂闂存埑鐨勫井灏忓樊寮傦紝瀵艰嚧鍓╀綑鏃堕棿鐣ュぇ浜庢湁鏁堟湡涓婇檺鐨勬儏鍐点��
+        // 灏嗚绠楀嚭鐨勫墿浣欏ぉ鏁伴檺鍒跺湪閭欢鐨勬湁鏁堟湡澶╂暟涔嬪唴銆�
+        if (days > limitDays)
+        {
+            days = limitDays;
         }
 
-        public int GetTabRedpointId(MailCategory type)
+        if (days > 1.0f)
         {
-            return MainRedDot.MailRepoint * 10 + (int)type;
+            // 澶т簬1澶╋細鎸夊悜涓婂彇鏁寸殑澶╂暟鏄剧ず銆�
+            int daysRounded = (int)MathF.Ceiling(days);
+            result = Language.Get("Mail07", daysRounded);
         }
-
-        public void UpdatePersonalRedPoint()
+        else if (days > 0.0f)
         {
-            if (tabRedpoint0 == null)
-                return;
-            tabRedpoint0.state = RedPointState.None;
-            if (HasNoReadMail(MailCategory.Personal))
+            // 灏忎簬1澶╋紙浣嗘湭杩囨湡锛夛細鎸夌簿纭殑灏忔椂/鍒嗛挓鏄剧ず銆�
+            TimeSpan t = TimeSpan.FromDays(days);
+            result = Language.Get("Mail12", StringUtility.Contact(" ", Language.Get("Mail13", t.Hours, t.Minutes)));
+        }
+        else
+        {
+            // (棰勭暀)宸茶繃鏈燂細鎸夎礋鏁板悜涓嬪彇鏁达紙鍚戞洿灏忕殑璐熸暟鍙栨暣锛屼互鑾峰緱宸茶繃鏈熷ぉ鏁扮殑鏁存暟缁濆鍊硷級
+            // MathF.Floor(-1.01f) -> -2.0f
+            // MathF.Floor(-0.5f)  -> -1.0f
+            // float expiredDaysFloor = MathF.Floor(days);
+            // int expiredDays = (int)expiredDaysFloor;
+
+            //鐩存帴鏄剧ず宸茶繃鏈�
+            result = Language.Get("Mail11"); ;
+        }
+        return result;
+    }
+
+
+    public List<string> GetMailList(MailCategory mailCategory)
+    {
+        var result = new List<string>();
+        foreach (var kvp in mailDataDict)
+        {
+            if (kvp.Value.Category == mailCategory)
             {
-                tabRedpoint0.state = RedPointState.Simple;
+                result.Add(kvp.Key);
             }
         }
+        return result;
+    }
 
-        public void UpdateGlobalRedPoint()
+    public int GetMailCount(MailCategory mailCategory)
+    {
+        var result = new List<string>();
+        foreach (var kvp in mailDataDict)
         {
-            if (tabRedpoint1 == null) return;
-            tabRedpoint1.state = RedPointState.None;
-            if (HasNoReadMail(MailCategory.Global))
+            if (kvp.Value.Category == mailCategory)
             {
-                tabRedpoint1.state = RedPointState.Simple;
+                result.Add(kvp.Key);
             }
         }
+        return result.Count;
+    }
 
-        /// <summary>
-        /// 鏇存柊閭欢绾㈢偣鎻愮ず鐘舵��
-        /// </summary>
-        public void UpdateRedPoint()
-        {
-            UpdatePersonalRedPoint();
-            UpdateGlobalRedPoint();
-        }
 
-        public bool TryGetMailData(string uuid, out MailData mailData)
+    public List<string> GetSortMailScrList(MailCategory mailCategory)
+    {
+        List<string> resList = GetMailList(mailCategory);
+        return resList.OrderByDescending(guid => mailDataDict[guid].CreateDateTime).ToList();
+    }
+
+    /// <summary>
+    /// 鏇存柊閭欢鍒楄〃鏁版嵁
+    /// </summary>
+    /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠跺垪琛ㄦ暟鎹寘</param>
+    public void UpdateMailList(HA362_tagMCMailList vNetData)
+    {
+        if (vNetData == null) return;
+
+        // 鏇存柊閭欢鏁版嵁瀛楀吀
+        foreach (var mail in vNetData.MailList)
         {
-            return mailDataDict.TryGetValue(uuid, out mailData);
-        }
-        public string FormatCreateMailTime(DateTime createDateTime)
-        {
-            TimeSpan diff = TimeUtility.ServerNow - createDateTime;
-            if (diff.TotalHours <= 24)
+            var category = vNetData.IsServerMail == 1 ? MailCategory.Global : MailCategory.Personal;
+            var mailData = new MailData();
+
+            mailData.Category = category;
+            mailData.GUID = mail.GUID;
+            mailData.Type = mail.Type;
+            mailData.CreateTime = mail.CreateTime;
+            mailData.CreateDateTime = Convert.ToDateTime(UIHelper.GetTime(mail.CreateTime));
+            mailData.LimitDays = mail.LimitDays;
+            mailData.Title = mail.Title;
+            mailData.Text = mail.Text;
+            mailData.MailState = mail.MailState;
+
+            mailData.Items = mail.Items?.Select(i => new MailItemData
             {
-                int hours = (int)Math.Floor(diff.TotalHours);
-                return Language.Get("Mail05", hours);
+                ItemID = i.ItemID,
+                Count = i.Count,
+                IsBind = i.IsBind,
+                UserData = i.UserData
+            }).ToList();
+
+            if (!mailData.Items.IsNullOrEmpty())
+            {
+                mailData.Items = mailData.Items
+                    .OrderByDescending(item => ItemConfig.HasKey((int)item.ItemID) ? ItemConfig.Get((int)item.ItemID).ItemColor : 0) // 鎸夊搧璐ㄩ檷搴忥紝鏈煡鐗╁搧鎺掑湪鏈�鍚�
+                    .ThenBy(item => item.Count) // 鍝佽川鐩稿悓鎸夋暟閲忓崌搴�
+                    .ToList();
             }
-            else
-            {
-                return createDateTime.ToString(dateFormat);
-            }
+
+            mailDataDict[mail.GUID] = mailData;
         }
 
-        //杩斿洖鏈夋晥鏈熷ぉ鏁�(姝f暟=宸茶繃鏈熷ぉ鏁帮紝璐熸暟=鍓╀綑澶╂暟)
-        public int GetMailExpiryDays(DateTime createDateTime, int limitDays)
-        {
-            DateTime expiryDate = createDateTime.AddDays(limitDays);
-            return (int)(TimeUtility.ServerNow - expiryDate).TotalDays;
-        }
+        UpdateRedPoint();
+        OnUpdateMailListEvent?.Invoke();
+    }
 
+    /// <summary>
+    /// 鏇存柊閭欢鐘舵�佸彉鏇�
+    /// </summary>
+    /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠剁姸鎬佸彉鏇存暟鎹寘</param>
+    public void UpdateMailStateChange(HA363_tagMCMailStateChange vNetData)
+    {
+        if (vNetData == null || vNetData.MailList == null) return;
 
-        public List<string> GetMailList(MailCategory mailCategory)
+        foreach (var stateChange in vNetData.MailList)
         {
-            var result = new List<string>();
-            foreach (var kvp in mailDataDict)
+            if (mailDataDict.TryGetValue(stateChange.GUID, out var mailData))
             {
-                if (kvp.Value.Category == mailCategory)
+                if (stateChange.MailState == 4)
                 {
-                    result.Add(kvp.Key);
+                    mailDataDict.Remove(stateChange.GUID);
+                    continue;
                 }
+                mailData.MailState = stateChange.MailState;
+                mailDataDict[stateChange.GUID] = mailData;
             }
-            return result;
         }
 
-        public List<string> GetSortMailScrList(MailCategory mailCategory)
-        {
-            List<string> resList = GetMailList(mailCategory);
-            return resList.OrderByDescending(guid => mailDataDict[guid].CreateDateTime).ToList();
-        }
-
-        /// <summary>
-        /// 鏇存柊閭欢鍒楄〃鏁版嵁
-        /// </summary>
-        /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠跺垪琛ㄦ暟鎹寘</param>
-        public void UpdateMailList(HA362_tagMCMailList vNetData)
-        {
-            if (vNetData == null) return;
-
-            // 鏇存柊閭欢鏁版嵁瀛楀吀
-            foreach (var mail in vNetData.MailList)
-            {
-                var category = vNetData.IsServerMail == 1 ? MailCategory.Global : MailCategory.Personal;
-                var mailData = new MailData();
-
-                mailData.Category = category;
-                mailData.GUID = mail.GUID;
-                mailData.Type = mail.Type;
-                mailData.CreateTime = mail.CreateTime;
-                mailData.CreateDateTime = Convert.ToDateTime(UIHelper.GetTime(mail.CreateTime));
-                mailData.LimitDays = mail.LimitDays;
-                mailData.Title = mail.Title;
-                mailData.Text = mail.Text;
-                mailData.MailState = mail.MailState;
-
-                mailData.Items = mail.Items?.Select(i => new MailItemData
-                {
-                    ItemID = i.ItemID,
-                    Count = i.Count,
-                    IsBind = i.IsBind,
-                    UserData = i.UserData
-                }).ToList();
-                mailDataDict[mail.GUID] = mailData;
-            }
-
-            UpdateRedPoint();
-            OnUpdateMailListEvent?.Invoke();
-        }
-
-        /// <summary>
-        /// 鏇存柊閭欢鐘舵�佸彉鏇�
-        /// </summary>
-        /// <param name="vNetData">浠庢湇鍔″櫒鎺ユ敹鐨勯偖浠剁姸鎬佸彉鏇存暟鎹寘</param>
-        public void UpdateMailStateChange(HA363_tagMCMailStateChange vNetData)
-        {
-            if (vNetData == null || vNetData.MailList == null) return;
-
-            foreach (var stateChange in vNetData.MailList)
-            {
-                if (mailDataDict.TryGetValue(stateChange.GUID, out var mailData))
-                {
-                    if (stateChange.MailState == 4)
-                    {
-                        mailDataDict.Remove(stateChange.GUID);
-                        continue;
-                    }
-                    mailData.MailState = stateChange.MailState;
-                    mailDataDict[stateChange.GUID] = mailData;
-                }
-            }
-
-            UpdateRedPoint();
-            OnUpdateMailStateChangeEvent?.Invoke();
-        }
-
-
-        /// <summary>
-        /// 闃呰閭欢
-        /// </summary>
-        /// <param name="GUID">閭欢GUID</param>
-        public void ReadMail(string GUID)
-        {
-            if (string.IsNullOrEmpty(GUID))
-            {
-                Debug.LogError("闃呰閭欢GUID涓嶈兘涓虹┖");
-                return;
-            }
-            SendRequestMail(GUID, 0);
-        }
-
-        /// <summary>
-        /// 棰嗗彇閭欢
-        /// </summary>
-        /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺棰嗗彇鎵�鏈夐偖浠�</param>
-        public void ClaimMail(string GUID = null)
-        {
-            SendRequestMail(GUID, 1);
-        }
-
-        /// <summary>
-        /// 鍒犻櫎閭欢
-        /// </summary>
-        /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺鍒犻櫎宸查鍙栨垨鏃犵墿鍝佺殑宸茶閭欢</param>
-        public void DeleteMail(string GUID = null)
-        {
-            SendRequestMail(GUID, 2);
-        }
-
-        /// <summary>
-        /// 鍙戦�侀偖浠惰姹傚埌鏈嶅姟鍣�
-        /// </summary>
-        /// <param name="GUID">閭欢GUID</param>
-        /// <param name="ReqType">璇锋眰绫诲瀷 0-璁剧疆宸茶锛�1-棰嗗彇閭欢锛�2-鍒犻櫎閭欢</param>
-        public void SendRequestMail(string GUID, byte ReqType)
-        {
-            CA537_tagCMRequestMail pack = new CA537_tagCMRequestMail();
-            pack.GUID = GUID;
-            pack.ReqType = ReqType;
-            GameNetSystem.Instance.SendInfo(pack);
-        }
-        
-        //娌℃湁涓�涓彲棰嗗彇鐨勪釜浜洪偖浠�
-        public bool IsCanHaveMail()
-        {
-            var personalMails = GetMailList(MailCategory.Personal);
-            return personalMails.Any(guid =>
-                mailDataDict.TryGetValue(guid, out var mail) &&
-                mail.MailState != 3 &&
-                mail.Items != null &&
-                mail.Items.Count > 0
-            );
-        }
+        UpdateRedPoint();
+        OnUpdateMailStateChangeEvent?.Invoke();
     }
 
-    public enum MailCategory
+
+    /// <summary>
+    /// 闃呰閭欢
+    /// </summary>
+    /// <param name="GUID">閭欢GUID</param>
+    public void ReadMail(string GUID)
     {
-        Personal = 0,  // 涓汉閭欢
-        Global = 1     // 鍏ㄦ湇閭欢
+        if (string.IsNullOrEmpty(GUID))
+        {
+            Debug.LogError("闃呰閭欢GUID涓嶈兘涓虹┖");
+            return;
+        }
+        SendRequestMail(GUID, 0);
     }
 
-    public class MailItemData
+    /// <summary>
+    /// 棰嗗彇閭欢
+    /// </summary>
+    /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺棰嗗彇鎵�鏈夐偖浠�</param>
+    public void ClaimMail(string GUID = null)
     {
-        public uint ItemID;        //鐗╁搧ID
-        public uint Count;        //鏁伴噺
-        public byte IsBind;        //鏄惁缁戝畾
-        public string UserData;        //鑷畾涔夋暟鎹�	
+        SendRequestMail(GUID, 1);
     }
 
-    public class MailData
+    /// <summary>
+    /// 鍒犻櫎閭欢
+    /// </summary>
+    /// <param name="GUID">閭欢GUID锛屼负绌烘椂鎵归噺鍒犻櫎宸查鍙栨垨鏃犵墿鍝佺殑宸茶閭欢</param>
+    public void DeleteMail(string GUID = null)
     {
-        public MailCategory Category;
-        public string GUID;        //閭欢GUID
-        public byte Type;        //閭欢绫诲瀷锛屾殏鏃堕粯璁�0
-        public string CreateTime;        //鍒涘缓鏃堕棿
-        public DateTime CreateDateTime;
-        public byte LimitDays;        //鏈夋晥澶╂暟
-        public string Title;        //鏍囬
-        public string Text;        //鍐呭
-        public byte MailState;        //閭欢鐘舵�侊細 0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
-        public List<MailItemData> Items;        //鐗╁搧淇℃伅
+        SendRequestMail(GUID, 2);
+    }
 
-        /// <summary>
-        /// 鍒ゆ柇鏄惁涓烘ā鏉跨被鍨嬮偖浠�
-        /// </summary>
-        /// <returns>true-妯℃澘閭欢, false-鏅�氶偖浠�</returns>
-        public bool IsTemplateMail()
+    /// <summary>
+    /// 鍙戦�侀偖浠惰姹傚埌鏈嶅姟鍣�
+    /// </summary>
+    /// <param name="GUID">閭欢GUID</param>
+    /// <param name="ReqType">璇锋眰绫诲瀷 0-璁剧疆宸茶锛�1-棰嗗彇閭欢锛�2-鍒犻櫎閭欢</param>
+    public void SendRequestMail(string GUID, byte ReqType)
+    {
+        CA537_tagCMRequestMail pack = new CA537_tagCMRequestMail();
+        pack.GUID = GUID;
+        pack.ReqType = ReqType;
+        GameNetSystem.Instance.SendInfo(pack);
+    }
+
+    //娌℃湁涓�涓彲棰嗗彇鐨勪釜浜洪偖浠�
+    public bool IsCanHaveMail()
+    {
+        var personalMails = GetMailList(MailCategory.Personal);
+        return personalMails.Any(guid =>
+            mailDataDict.TryGetValue(guid, out var mail) &&
+            mail.MailState != 3 &&
+            mail.Items != null &&
+            mail.Items.Count > 0
+        );
+    }
+}
+
+public enum MailCategory
+{
+    Personal = 0,  // 涓汉閭欢
+    Global = 1     // 鍏ㄦ湇閭欢
+}
+
+public class MailItemData
+{
+    public uint ItemID;        //鐗╁搧ID
+    public uint Count;        //鏁伴噺
+    public byte IsBind;        //鏄惁缁戝畾
+    public string UserData;        //鑷畾涔夋暟鎹�	
+}
+
+public class MailData
+{
+    public MailCategory Category;
+    public string GUID;        //閭欢GUID
+    public byte Type;        //閭欢绫诲瀷锛屾殏鏃堕粯璁�0
+    public string CreateTime;        //鍒涘缓鏃堕棿
+    public DateTime CreateDateTime;//鍒涘缓鏃堕棿
+    public byte LimitDays;        //鏈夋晥澶╂暟
+    public string Title;        //鏍囬
+    public string Text;        //鍐呭
+    public byte MailState;        //閭欢鐘舵�侊細 0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
+    public List<MailItemData> Items;        //鐗╁搧淇℃伅
+
+    public bool HasAward()
+    {
+        return Items != null && Items.Count > 0;
+    }
+
+    /// <summary>
+    /// 鍒ゆ柇鏄惁涓烘ā鏉跨被鍨嬮偖浠�
+    /// </summary>
+    /// <returns>true-妯℃澘閭欢, false-鏅�氶偖浠�</returns>
+    public bool IsTemplateMail()
+    {
+        if (string.IsNullOrEmpty(Title))
+            return false;
+
+        return Title.StartsWith("<T>") && Title.EndsWith("</T>");
+    }
+
+    /// <summary>
+    /// 鑾峰彇妯℃澘閭欢鐨勬ā鏉縦ey
+    /// </summary>
+    /// <returns>妯℃澘key锛屽鏋滀笉鏄ā鏉块偖浠惰繑鍥炵┖瀛楃涓�</returns>
+    public string GetTemplateKey()
+    {
+        if (!IsTemplateMail())
+            return string.Empty;
+
+        // 妯℃澘鏍煎紡: <T>key</T>
+        // 璺宠繃寮�澶寸殑"<T>" (3瀛楃)
+        // 鍙栦腑闂撮儴鍒嗭紝鎬婚暱搴﹀噺鍘�"<T>"鍜�"</T>"鍏�7瀛楃
+        const int prefixLength = 3; // "<T>"闀垮害
+        const int suffixLength = 4; // "</T>"闀垮害
+        return Title.Substring(prefixLength, Title.Length - (prefixLength + suffixLength));
+    }
+
+    /// <summary>
+    /// 鑾峰彇妯℃澘閭欢鐨勫弬鏁板垪琛�
+    /// </summary>
+    /// <returns>鍙傛暟鍒楄〃锛屽鏋滀笉鏄ā鏉块偖浠舵垨鍙傛暟涓虹┖鍒欒繑鍥炵┖鍒楄〃</returns>
+    public List<string> GetTemplateParams()
+    {
+        if (!IsTemplateMail() || string.IsNullOrEmpty(Text))
+            return new List<string>();
+
+        try
         {
-            if (string.IsNullOrEmpty(Title))
-                return false;
-
-            return Title.StartsWith("<T>") && Title.EndsWith("</T>");
+            List<string> result = JsonMapper.ToObject<List<string>>(Text);
+            // 濡傛灉瑙f瀽缁撴灉涓簄ull锛堜緥濡俆ext鐨勫唴瀹规槸 "null" 瀛楃涓诧級锛屽垯杩斿洖涓�涓┖鍒楄〃浠ラ槻鍚庣画鍑洪敊
+            return result ?? new List<string>();
         }
-
-        /// <summary>
-        /// 鑾峰彇妯℃澘閭欢鐨勬ā鏉縦ey
-        /// </summary>
-        /// <returns>妯℃澘key锛屽鏋滀笉鏄ā鏉块偖浠惰繑鍥炵┖瀛楃涓�</returns>
-        public string GetTemplateKey()
+        catch (Exception ex)
         {
-            if (!IsTemplateMail())
-                return string.Empty;
-
-            // 妯℃澘鏍煎紡: <T>key</T>
-            // 璺宠繃寮�澶寸殑"<T>" (3瀛楃)
-            // 鍙栦腑闂撮儴鍒嗭紝鎬婚暱搴﹀噺鍘�"<T>"鍜�"</T>"鍏�7瀛楃
-            const int prefixLength = 3; // "<T>"闀垮害
-            const int suffixLength = 4; // "</T>"闀垮害
-            return Title.Substring(prefixLength, Title.Length - (prefixLength + suffixLength));
-        }
-
-        /// <summary>
-        /// 鑾峰彇妯℃澘閭欢鐨勫弬鏁板垪琛�
-        /// </summary>
-        /// <returns>鍙傛暟鍒楄〃锛屽鏋滀笉鏄ā鏉块偖浠舵垨鍙傛暟涓虹┖鍒欒繑鍥炵┖鍒楄〃</returns>
-        public List<string> GetTemplateParams()
-        {
-            if (!IsTemplateMail() || string.IsNullOrEmpty(Text))
-                return new List<string>();
-
-            try
-            {
-                // 鍙傛暟鏍煎紡涓篔SON鏁扮粍锛歔鍙傛暟1, 鍙傛暟2, ...]
-                return JsonUtility.FromJson<List<string>>(Text);
-            }
-            catch
-            {
-                return new List<string>();
-            }
+            Debug.LogError($"浣跨敤 LitJson 瑙f瀽閭欢鍙傛暟澶辫触銆� Text: {Text}, 閿欒: {ex.Message}");
+            return new List<string>();
         }
     }
-}
\ No newline at end of file
+}
+

--
Gitblit v1.8.0