From 1b4b01956de5d072e3281176ff5e219bd5e2b511 Mon Sep 17 00:00:00 2001
From: hch <305670599@qq.com>
Date: 星期二, 30 九月 2025 15:26:58 +0800
Subject: [PATCH] Merge branch 'master' of http://mobile.secondworld.net.cn:10010/r/Project_SG_scripts

---
 Main/System/Mail/MailInfoWin.cs            |  106 +++++++------
 /dev/null                                  |   12 -
 Main/System/Mail/MailInfoAwardCell.cs      |   26 +++
 Main/System/Main/HomeWin.cs                |    6 
 Main/System/Mail/MailInfoAwardCell.cs.meta |    2 
 Main/System/Mail/MailWin.cs                |  167 +++++++++-----------
 Main/System/Mail/MailCell.cs               |   23 +-
 Main/System/Mail/MailManager.cs            |   93 ++++++++++-
 Main/System/Mail/MailCell.cs.meta          |    2 
 9 files changed, 263 insertions(+), 174 deletions(-)

diff --git a/Main/System/Mail/MailGlobalCell.cs b/Main/System/Mail/MailCell.cs
similarity index 63%
rename from Main/System/Mail/MailGlobalCell.cs
rename to Main/System/Mail/MailCell.cs
index 3cf95c8..bbfdd6e 100644
--- a/Main/System/Mail/MailGlobalCell.cs
+++ b/Main/System/Mail/MailCell.cs
@@ -1,9 +1,11 @@
-锘縰sing UnityEngine;
+锘縰sing System;
+using UnityEngine;
+using UnityEngine.UI;
 
-public class MailGlobalCell : CellView
+public class MailCell : CellView
 {
-    [SerializeField] ButtonEx btnMail;
-    [SerializeField] ImageEx imgState;
+    [SerializeField] Button btnMail;
+    [SerializeField] ImageEx imgMask;
     [SerializeField] ImageEx imgRed;
     [SerializeField] TextEx txtTitle;
     [SerializeField] TextEx txtDate;
@@ -18,18 +20,19 @@
         uuid = list[index];
         if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
             return;
+        //mailData.MailState 閭欢鐘舵�侊細 0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
         imgRed.SetActive(mailData.MailState == 1);
-        txtTitle.text = mailData.Title;
-        imgState.SetSprite(mailData.MailState == 2 || mailData.MailState == 3 ? "MailRead" : "MailNoRead");
-        if (mailData.Items != null)
+        imgMask.SetActive(mailData.MailState == 2 || mailData.MailState == 3);
+        if (mailData.IsTemplateMail() && MailConfig.HasKey(mailData.GetTemplateKey()))
         {
-            txtDate.text = model.FormatCreateMailTime(mailData.CreateDateTime);
+            txtTitle.text = MailConfig.Get(mailData.GetTemplateKey()).Title;
         }
         else
         {
-            int expiryDay = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays);
-            txtDate.text = expiryDay > 0 ? Language.Get("Mail07", expiryDay) : model.FormatCreateMailTime(mailData.CreateDateTime);
+            txtTitle.text = mailData.Title;
         }
+
+        txtDate.text = model.FormatMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays);
         btnMail.SetListener(OnClickButtonMail);
     }
 
diff --git a/Main/System/Mail/MailGlobalCell.cs.meta b/Main/System/Mail/MailCell.cs.meta
similarity index 83%
copy from Main/System/Mail/MailGlobalCell.cs.meta
copy to Main/System/Mail/MailCell.cs.meta
index 12c2cfe..38ff877 100644
--- a/Main/System/Mail/MailGlobalCell.cs.meta
+++ b/Main/System/Mail/MailCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: baaef1e2dac4e30499722be1d4c60bb4
+guid: 540496bd35ab2f44fa3c043f3b748969
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Mail/MailInfoAwardCell.cs b/Main/System/Mail/MailInfoAwardCell.cs
new file mode 100644
index 0000000..41e17ef
--- /dev/null
+++ b/Main/System/Mail/MailInfoAwardCell.cs
@@ -0,0 +1,26 @@
+锘縰sing System;
+using UnityEngine;
+using UnityEngine.UI;
+
+public class MailInfoAwardCell : CellView
+{
+    [SerializeField] ItemCell itemCell;
+    [SerializeField] ImageEx imgHave;
+    [SerializeField] ImageEx imgMask;
+    MailManager model { get { return MailManager.Instance; } }
+    public void Display(int index, CellView cellView)
+    {
+        string uuid = cellView.info.Value.infoStr1;
+        if (!model.TryGetMailData(uuid, out MailData mailData) || mailData == null || mailData.Items == null)
+            return;
+        if (index < 0 || index >= mailData.Items.Count)
+            return;
+        int mailState = mailData.MailState;//0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
+        MailItemData data = mailData.Items[index];
+        itemCell.Init(new ItemCellModel((int)data.ItemID, true, data.Count));
+        itemCell.button.SetListener(() => ItemTipUtility.Show((int)data.ItemID, true));
+        float expiryDays = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays);
+        imgHave.SetActive(mailState == 3);
+        imgMask.SetActive(mailState == 3 || expiryDays <= 0);
+    }
+}
diff --git a/Main/System/Mail/MailGlobalCell.cs.meta b/Main/System/Mail/MailInfoAwardCell.cs.meta
similarity index 83%
rename from Main/System/Mail/MailGlobalCell.cs.meta
rename to Main/System/Mail/MailInfoAwardCell.cs.meta
index 12c2cfe..5a9130d 100644
--- a/Main/System/Mail/MailGlobalCell.cs.meta
+++ b/Main/System/Mail/MailInfoAwardCell.cs.meta
@@ -1,5 +1,5 @@
 fileFormatVersion: 2
-guid: baaef1e2dac4e30499722be1d4c60bb4
+guid: c60bb6aac93423e46b3dfa2c1c457d0d
 MonoImporter:
   externalObjects: {}
   serializedVersion: 2
diff --git a/Main/System/Mail/MailInfoAwardItemCell.cs b/Main/System/Mail/MailInfoAwardItemCell.cs
deleted file mode 100644
index dfbec30..0000000
--- a/Main/System/Mail/MailInfoAwardItemCell.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-锘縰sing UnityEngine;
-
-public class MailInfoAwardItemCell : CellView
-{
-    [SerializeField] ItemCell itemCell;
-    [SerializeField] ImageEx imgHave;
-    MailManager model { get { return MailManager.Instance; } }
-    public void Display(int index, CellView cellView)
-    {
-        int mailState = cellView.info.Value.infoInt1;//0-鏈煡锛�1-鏈锛�2-宸茶锛�3-宸查锛�
-        if (!model.TryGetMailData(model.nowUuid, out MailData mailData) || mailData == null || mailData.Items == null)
-            return;
-        if (index < 0 || index >= mailData.Items.Count)
-            return;
-        MailItemData data = mailData.Items[index];
-        itemCell.Init(new ItemCellModel((int)data.ItemID, true, data.Count));
-        itemCell.button.SetListener(() => ItemTipUtility.Show((int)data.ItemID));
-        imgHave.SetActive(mailState == 3);
-
-        MailCategory mailCategory = (MailCategory)cellView.info.Value.infoInt1;
-        var list = model.GetSortMailScrList(mailCategory);
-    }
-}
diff --git a/Main/System/Mail/MailInfoAwardItemCell.cs.meta b/Main/System/Mail/MailInfoAwardItemCell.cs.meta
deleted file mode 100644
index 51e1539..0000000
--- a/Main/System/Mail/MailInfoAwardItemCell.cs.meta
+++ /dev/null
@@ -1,11 +0,0 @@
-fileFormatVersion: 2
-guid: 2b475cf66abe5c94fb8aa8664ef46141
-MonoImporter:
-  externalObjects: {}
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/System/Mail/MailInfoWin.cs b/Main/System/Mail/MailInfoWin.cs
index f746ba8..d4887f0 100644
--- a/Main/System/Mail/MailInfoWin.cs
+++ b/Main/System/Mail/MailInfoWin.cs
@@ -1,4 +1,5 @@
-锘縰sing UnityEngine;
+锘縰sing System;
+using UnityEngine;
 public class MailInfoWin : UIBase
 {
     [SerializeField] TextEx txtDate;
@@ -7,7 +8,7 @@
     [SerializeField] RichText txtNoAwardInfo;
     [SerializeField] Transform transAward;
     [SerializeField] RichText txtAwardInfo;
-    [SerializeField] ScrollerController scrAwardItem;
+    [SerializeField] ScrollerController scrAward;
     [SerializeField] TextEx txtExpiryDate;
     [SerializeField] ButtonEx btnHave;
     [SerializeField] ButtonEx btnDelete;
@@ -24,23 +25,28 @@
 
     protected override void OnPreOpen()
     {
-        scrAwardItem.OnRefreshCell += OnRefreshLowRewardCell;
+        base.OnPreOpen();
+        scrAward.OnRefreshCell += OnRefreshLowRewardCell;
         model.OnUpdateMailListEvent += OnUpdateMailListEvent;
         model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent;
-    }
-
-    protected override void OnOpen()
-    {
-        UpdateDataInfo();
+        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
         Display();
-        CreateScrAward();
     }
 
     protected override void OnPreClose()
     {
-        scrAwardItem.OnRefreshCell -= OnRefreshLowRewardCell;
+        base.OnPreClose();
+        scrAward.OnRefreshCell -= OnRefreshLowRewardCell;
         model.OnUpdateMailListEvent -= OnUpdateMailListEvent;
         model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent;
+        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
+    }
+
+    private void OnSecondEvent()
+    {
+        txtDate.text = model.FormatCreateMailTime(nowMailData.CreateDateTime);
+        txtExpiryDate.text = model.FormatMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays);
+        txtExpiryDate.color = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays) >= 0 ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.Red);
     }
 
     private void OnClickHaveButton()
@@ -67,64 +73,65 @@
 
     private void OnUpdateMailStateChangeEvent()
     {
-        UpdateDataInfo();
         Display();
-        CreateScrAward();
     }
 
     private void OnUpdateMailListEvent()
     {
-        UpdateDataInfo();
         Display();
-        CreateScrAward();
     }
 
     private void OnRefreshLowRewardCell(ScrollerDataType type, CellView cell)
     {
-        var _cell = cell.GetComponent<MailInfoAwardItemCell>();
+        var _cell = cell.GetComponent<MailInfoAwardCell>();
         _cell?.Display(cell.index, cell);
     }
 
-    private void CreateScrAward()
-    {
-        scrAwardItem.Refresh();
-        if (isHasAward)
-        {
-            for (int i = 0; i < nowMailData.Items.Count; i++)
-            {
-                CellInfo cellInfo = new CellInfo();
-                cellInfo.infoInt1 = nowMailData.MailState;
-                scrAwardItem.AddCell(ScrollerDataType.Header, i);
-            }
-        }
-        scrAwardItem.Restart();
-    }
 
     private void Display()
     {
-        if (nowMailData == null)
+        if (!model.TryGetMailData(model.nowUuid, out nowMailData))
+        {
+            UIManager.Instance.CloseWindow<MailInfoWin>();
             return;
+        }
+        isHasAward = nowMailData != null && nowMailData.HasAward();
         transNoAward.SetActive(!isHasAward);
         transAward.SetActive(isHasAward);
+        btnHave.SetActive(isHasAward && nowMailData.MailState != 3);
         txtDate.text = model.FormatCreateMailTime(nowMailData.CreateDateTime);
-            
-        if (nowMailData.IsTemplateMail())
+
+        string key = nowMailData.GetTemplateKey();
+        if (nowMailData.IsTemplateMail() && MailConfig.HasKey(key))
         {
-            string key = nowMailData.GetTemplateKey();
-            if (MailConfig.HasKey(key))
+            MailConfig config = MailConfig.Get(key);
+            var templateParams = nowMailData.GetTemplateParams();
+
+            // 鎵撳嵃鍑哄嵆灏嗙敤浜庢牸寮忓寲鐨勬墍鏈変俊鎭�
+            //         Debug.Log($"[閭欢璋冭瘯] GUID: {nowMailData.GUID}");
+            // Debug.Log($"[閭欢璋冭瘯] 鍘熷鍙傛暟JSON (nowMailData.Text): '{nowMailData.Text}'");
+            // Debug.Log($"[閭欢璋冭瘯] 瑙f瀽鍚庣殑鍙傛暟鏁伴噺: {templateParams.Count}");
+            // if (templateParams.Count > 0)
+            // {
+            //     for(int i = 0; i < templateParams.Count; i++)
+            //     {
+            //         Debug.Log($"[閭欢璋冭瘯] 鍙傛暟[{i}]: {templateParams[i]}");
+            //     }
+            // }
+            try
             {
-                MailConfig config = MailConfig.Get(key);
-                var templateParams = nowMailData.GetTemplateParams();
                 string content = string.Format(config.Content, templateParams.ToArray());
-                txtTitle.text = config.Title;
                 txtNoAwardInfo.text = content;
                 txtAwardInfo.text = content;
+                txtTitle.text = config.Title;
             }
-            else
+            catch (System.Exception ex)
             {
                 txtTitle.text = nowMailData.Title;
                 txtNoAwardInfo.text = nowMailData.Text;
                 txtAwardInfo.text = nowMailData.Text;
+                Debug.LogError($"MailInfoWin 瑙f瀽閭欢鍙傛暟澶辫触! GUID: {nowMailData.GUID}, " +
+                                 $"鍘熷鍙傛暟JSON: '{nowMailData.Text}', 閿欒: {ex.Message}");
             }
         }
         else
@@ -133,19 +140,20 @@
             txtNoAwardInfo.text = nowMailData.Text;
             txtAwardInfo.text = nowMailData.Text;
         }
-
-        int expiryDays = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays);
-        txtExpiryDate.text = expiryDays > 0 ? Language.Get("Mail07", expiryDays) : string.Empty;
-
-    }
-
-    private void UpdateDataInfo()
-    {
-        if (!model.TryGetMailData(model.nowUuid, out nowMailData))
+        txtExpiryDate.text = model.FormatMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays);
+        txtExpiryDate.color = model.GetMailExpiryDays(nowMailData.CreateDateTime, nowMailData.LimitDays) >= 0 ? UIHelper.GetUIColor(TextColType.DarkGreen) : UIHelper.GetUIColor(TextColType.Red);
+        scrAward.Refresh();
+        if (isHasAward)
         {
-            UIManager.Instance.CloseWindow<MailInfoWin>();
+            for (int i = 0; i < nowMailData.Items.Count; i++)
+            {
+                CellInfo cellInfo = new CellInfo();
+                cellInfo.infoStr1 = nowMailData.GUID;
+                scrAward.AddCell(ScrollerDataType.Header, i, cellInfo);
+            }
         }
-        isHasAward = nowMailData != null && nowMailData.Items != null;
+        scrAward.Restart();
     }
+
 }
 
diff --git a/Main/System/Mail/MailManager.cs b/Main/System/Mail/MailManager.cs
index 39a03f0..85cb78c 100644
--- a/Main/System/Mail/MailManager.cs
+++ b/Main/System/Mail/MailManager.cs
@@ -2,6 +2,8 @@
 using System.Collections.Generic;
 using System.Linq;
 using UnityEngine;
+using LitJson;
+
 
 public class MailManager : GameSystemManager<MailManager>
 {
@@ -17,13 +19,15 @@
     public Redpoint tabRedpoint1;
     public event Action OnUpdateMailListEvent;// 鏇存柊閭欢鍒楄〃鏁版嵁
     public event Action OnUpdateMailStateChangeEvent;// 鏇存柊閭欢鐘舵�佸彉鏇�
-    public readonly string dateFormat = "yyyy-MM-dd";
+    public readonly string dateFormat = "yyyy.MM.dd";
     public string nowUuid = string.Empty;
+    public int personalMailMaxLimitCount;
     public override void Init()
     {
         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()
@@ -103,11 +107,50 @@
         }
     }
 
-    //杩斿洖鏈夋晥鏈熷ぉ鏁�(姝f暟=宸茶繃鏈熷ぉ鏁帮紝璐熸暟=鍓╀綑澶╂暟)
-    public int GetMailExpiryDays(DateTime createDateTime, int limitDays)
+    //杩斿洖鏈夋晥鏈熷ぉ鏁�(姝f暟=鍓╀綑澶╂暟锛岃礋鏁�=宸茶繃鏈熷ぉ鏁�)
+    public float GetMailExpiryDays(DateTime createDateTime, int limitDays)
     {
         DateTime expiryDate = createDateTime.AddDays(limitDays);
-        return (int)(TimeUtility.ServerNow - expiryDate).TotalDays;
+        TimeSpan remainingTime = expiryDate - TimeUtility.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;
+        }
+
+        if (days > 1.0f)
+        {
+            // 澶т簬1澶╋細鎸夊悜涓婂彇鏁寸殑澶╂暟鏄剧ず銆�
+            // MathF.Ceiling(1.01f) -> 2.0f
+            int daysRounded = (int)MathF.Ceiling(days);
+            result = Language.Get("Mail07", (int)MathF.Ceiling(days));
+        }
+        else if (days > 0.0f)
+        {
+            // 灏忎簬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;
     }
 
 
@@ -123,6 +166,20 @@
         }
         return result;
     }
+
+    public int GetMailCount(MailCategory mailCategory)
+    {
+        var result = new List<string>();
+        foreach (var kvp in mailDataDict)
+        {
+            if (kvp.Value.Category == mailCategory)
+            {
+                result.Add(kvp.Key);
+            }
+        }
+        return result.Count;
+    }
+
 
     public List<string> GetSortMailScrList(MailCategory mailCategory)
     {
@@ -161,6 +218,16 @@
                 IsBind = i.IsBind,
                 UserData = i.UserData
             }).ToList();
+
+            if (!mailData.Items.IsNullOrEmpty())
+            {
+                mailData.Items = mailData.Items
+                    .Where(item => ItemConfig.HasKey((int)item.ItemID)) // 闃叉姢锛岀‘淇濈墿鍝佸瓨鍦�
+                    .OrderByDescending(item => ItemConfig.Get((int)item.ItemID).ItemColor) // 鎸夊搧璐ㄩ檷搴�
+                    .ThenBy(item => item.Count) // 鍝佽川鐩稿悓鎸夋暟閲忓崌搴�
+                    .ToList();
+            }
+
             mailDataDict[mail.GUID] = mailData;
         }
 
@@ -239,7 +306,7 @@
         pack.ReqType = ReqType;
         GameNetSystem.Instance.SendInfo(pack);
     }
-        
+
     //娌℃湁涓�涓彲棰嗗彇鐨勪釜浜洪偖浠�
     public bool IsCanHaveMail()
     {
@@ -273,12 +340,17 @@
     public string GUID;        //閭欢GUID
     public byte Type;        //閭欢绫诲瀷锛屾殏鏃堕粯璁�0
     public string CreateTime;        //鍒涘缓鏃堕棿
-    public DateTime CreateDateTime;
+    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>
     /// 鍒ゆ柇鏄惁涓烘ā鏉跨被鍨嬮偖浠�
@@ -320,12 +392,15 @@
 
         try
         {
-            // 鍙傛暟鏍煎紡涓篔SON鏁扮粍锛歔鍙傛暟1, 鍙傛暟2, ...]
-            return JsonUtility.FromJson<List<string>>(Text);
+            List<string> result = JsonMapper.ToObject<List<string>>(Text);
+            // 濡傛灉瑙f瀽缁撴灉涓簄ull锛堜緥濡俆ext鐨勫唴瀹规槸 "null" 瀛楃涓诧級锛屽垯杩斿洖涓�涓┖鍒楄〃浠ラ槻鍚庣画鍑洪敊
+            return result ?? new List<string>();
         }
-        catch
+        catch (Exception ex)
         {
+            Debug.LogError($"浣跨敤 LitJson 瑙f瀽閭欢鍙傛暟澶辫触銆� Text: {Text}, 閿欒: {ex.Message}");
             return new List<string>();
         }
     }
 }
+
diff --git a/Main/System/Mail/MailPersonalCell.cs b/Main/System/Mail/MailPersonalCell.cs
deleted file mode 100644
index abcd8f8..0000000
--- a/Main/System/Mail/MailPersonalCell.cs
+++ /dev/null
@@ -1,47 +0,0 @@
-锘縰sing UnityEngine;
-
-public class MailPersonalCell : CellView
-{
-    [SerializeField] ButtonEx btnMail;
-    [SerializeField] ImageEx imgState;
-    [SerializeField] ImageEx imgRed;
-    [SerializeField] TextEx txtTitle;
-    [SerializeField] TextEx txtDate;
-    MailManager model { get { return MailManager.Instance; } }
-    string uuid = string.Empty;
-    public void Display(int index, CellView cellView)
-    {
-        MailCategory mailCategory = (MailCategory)cellView.info.Value.infoInt1;
-        var list = model.GetSortMailScrList(mailCategory);
-        if (list == null || index < 0 || index >= list.Count)
-            return;
-        uuid = list[index];
-        if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
-            return;
-        imgRed.SetActive(mailData.MailState == 1);
-        txtTitle.text = mailData.Title;
-        imgState.SetSprite(mailData.MailState == 2 || mailData.MailState == 3 ? "MailRead" : "MailNoRead");
-        if (mailData.Items != null)
-        {
-            txtDate.text = model.FormatCreateMailTime(mailData.CreateDateTime);
-        }
-        else
-        {
-            int expiryDay = model.GetMailExpiryDays(mailData.CreateDateTime, mailData.LimitDays);
-            txtDate.text = expiryDay > 0 ? Language.Get("Mail07", expiryDay) : model.FormatCreateMailTime(mailData.CreateDateTime);
-        }
-        btnMail.SetListener(OnClickButtonMail);
-    }
-
-    private void OnClickButtonMail()
-    {
-        model.nowUuid = uuid;
-        if (!model.TryGetMailData(uuid, out var mailData) || mailData == null)
-            return;
-        if (mailData.MailState == 1)
-        {
-            model.ReadMail(uuid);
-        }
-        UIManager.Instance.OpenWindow<MailInfoWin>();
-    }
-}
diff --git a/Main/System/Mail/MailPersonalCell.cs.meta b/Main/System/Mail/MailPersonalCell.cs.meta
deleted file mode 100644
index 2d0f7ba..0000000
--- a/Main/System/Mail/MailPersonalCell.cs.meta
+++ /dev/null
@@ -1,12 +0,0 @@
-fileFormatVersion: 2
-guid: 9b2f93157b0f88549b156091e0a828d8
-timeCreated: 1508570733
-licenseType: Pro
-MonoImporter:
-  serializedVersion: 2
-  defaultReferences: []
-  executionOrder: 0
-  icon: {instanceID: 0}
-  userData: 
-  assetBundleName: 
-  assetBundleVariant: 
diff --git a/Main/System/Mail/MailWin.cs b/Main/System/Mail/MailWin.cs
index 865aefd..411f7a5 100644
--- a/Main/System/Mail/MailWin.cs
+++ b/Main/System/Mail/MailWin.cs
@@ -1,89 +1,87 @@
 锘縰sing System;
 using UnityEngine;
-
-
-public class MailWin : UIBase
+public class MailWin : FunctionsBaseWin
 {
-    [SerializeField] Transform transPersonal;
-    [SerializeField] Transform transGlobal;
-    [SerializeField] ScrollerController scrPersonal;
-    [SerializeField] ScrollerController scrGlobal;
-    [SerializeField] ButtonEx btnDeleteRead;
+    [SerializeField] ScrollerController scrMail;
+    [SerializeField] ButtonEx btnDeleteAllRead;
     [SerializeField] ButtonEx btnClaimAll;
-    [SerializeField] ToggleEx togTab0;
     [SerializeField] RedpointBehaviour rpTab0;
-    [SerializeField] ToggleEx togTab1;
     [SerializeField] RedpointBehaviour rpTab1;
     [SerializeField] Transform transNoMail;
+    [SerializeField] Transform transCurrentMailCount;
+    [SerializeField] TextEx txtCurrentMailCount;
     MailManager model { get { return MailManager.Instance; } }
     protected override void InitComponent()
     {
         base.InitComponent();
-        btnDeleteRead.SetListener(OnDeleteRead);
+        btnDeleteAllRead.SetListener(OnDeleteRead);
         btnClaimAll.SetListener(OnClaimAll);
-        togTab0.SetListener(OnTab0);
-        togTab1.SetListener(OnTab1);
     }
 
     protected override void OnPreOpen()
     {
-        model.OnUpdateMailListEvent += OnUpdateMailListEvent;
-        model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent;
-        scrPersonal.OnRefreshCell += OnRefreshPersonalCell;
-        scrGlobal.OnRefreshCell += OnRefreshGlobalCell;
-            
+        base.OnPreOpen();
+        tabButtons[functionOrder].SelectBtn(true);
+        model.nowMailCategory = MailCategory.Personal;
         rpTab0.redpointId = model.GetTabRedpointId(MailCategory.Personal);
         rpTab1.redpointId = model.GetTabRedpointId(MailCategory.Global);
-        transNoMail.SetActive(false);
+        transNoMail.SetActive(true);
+        btnDeleteAllRead.SetActive(true);
+        btnClaimAll.SetActive(true);
+        transCurrentMailCount.SetActive(true);
+        model.OnUpdateMailListEvent += OnUpdateMailListEvent;
+        model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent;
+        scrMail.OnRefreshCell += OnRefreshCell;
+        GlobalTimeEvent.Instance.secondEvent += OnSecondEvent;
+        DisPlay();
+
     }
 
     protected override void OnPreClose()
     {
+        base.OnPreClose();
         model.OnUpdateMailListEvent -= OnUpdateMailListEvent;
         model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent;
-        scrPersonal.OnRefreshCell -= OnRefreshPersonalCell;
-        scrGlobal.OnRefreshCell -= OnRefreshGlobalCell;
+        scrMail.OnRefreshCell -= OnRefreshCell;
+        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
     }
 
-    private void OnTab0(bool value)
+    private void OnSecondEvent()
     {
-        if (value)
+        scrMail.m_Scorller.RefreshActiveCellViews();
+        int personalMailCount = MailManager.Instance.GetMailCount(MailCategory.Personal);
+        txtCurrentMailCount.text = StringUtility.Contact(personalMailCount, "/", MailManager.Instance.personalMailMaxLimitCount);
+    }
+
+    protected override void OpenSubUIByTabIndex()
+    {
+        switch (functionOrder)
         {
-            transPersonal.SetActive(true);
-            transGlobal.SetActive(false);
-            model.nowMailCategory = MailCategory.Personal;
-            CreatePersonalScr(model.nowMailCategory);
+            case 0:
+                model.nowMailCategory = MailCategory.Personal;
+                btnDeleteAllRead.SetActive(true);
+                btnClaimAll.SetActive(true);
+                transCurrentMailCount.SetActive(true);
+                int personalMailCount = MailManager.Instance.GetMailCount(MailCategory.Personal);
+                txtCurrentMailCount.text = StringUtility.Contact(personalMailCount, "/", MailManager.Instance.personalMailMaxLimitCount);
+                DisPlay();
+                break;
+            case 1:
+                model.nowMailCategory = MailCategory.Global;
+                btnDeleteAllRead.SetActive(false);
+                btnClaimAll.SetActive(false);
+                transCurrentMailCount.SetActive(false);
+                DisPlay();
+                break;
+            default:
+                Debug.LogWarning("鏈煡鐨勬爣绛剧储寮�: " + functionOrder);
+                break;
         }
     }
 
-    private void OnTab1(bool value)
+    private void OnRefreshCell(ScrollerDataType type, CellView cell)
     {
-        if (value)
-        {
-            transPersonal.SetActive(false);
-            transGlobal.SetActive(true);
-            model.nowMailCategory = MailCategory.Global;
-            CreateGlobalScr(model.nowMailCategory);
-        }
-    }
-
-    protected override void OnOpen()
-    {
-        togTab0.isOn = true;
-        togTab1.isOn = false;
-        model.nowMailCategory = MailCategory.Personal;
-        CreatePersonalScr(model.nowMailCategory);
-    }
-
-    private void OnRefreshPersonalCell(ScrollerDataType type, CellView cell)
-    {
-        var _cell = cell.GetComponent<MailPersonalCell>();
-        _cell?.Display(cell.index, cell);
-    }
-
-    private void OnRefreshGlobalCell(ScrollerDataType type, CellView cell)
-    {
-        var _cell = cell.GetComponent<MailGlobalCell>();
+        var _cell = cell.GetComponent<MailCell>();
         _cell?.Display(cell.index, cell);
     }
 
@@ -113,50 +111,24 @@
         model.ClaimMail();
     }
 
-    public void CreatePersonalScr(MailCategory mailCategory)
-    {
-        scrPersonal.Refresh();
-        var list = model.GetSortMailScrList(mailCategory);
-        if (list != null)
-        {
-            for (int i = 0; i < list.Count; i++)
-            {
-                CellInfo cellInfo = new CellInfo();
-                cellInfo.infoInt1 = (int)mailCategory;
-                scrPersonal.AddCell(ScrollerDataType.Header, i, cellInfo);
-            }
-        }
-        scrPersonal.Restart();
-    }
-    public void CreateGlobalScr(MailCategory mailCategory)
-    {
-        scrGlobal.Refresh();
-        var list = model.GetSortMailScrList(mailCategory);
-        if (list != null)
-        {
-            for (int i = 0; i < list.Count; i++)
-            {
-                CellInfo cellInfo = new CellInfo();
-                cellInfo.infoInt1 = (int)mailCategory;
-                scrGlobal.AddCell(ScrollerDataType.Header, i, cellInfo);
-            }
-        }
-        scrGlobal.Restart();
-    }
-
     private void OnUpdateMailStateChangeEvent()
     {
-        RefreshScr();
+        DisPlay();
     }
 
     private void OnUpdateMailListEvent()
     {
-        RefreshScr();
+        DisPlay();
     }
 
-    private void RefreshScr()
-    { 
-        var list = model.GetSortMailScrList(model.nowMailCategory);
+
+    private void DisPlay()
+    {
+        scrMail.Refresh();
+        scrMail.Restart();
+
+        MailCategory mailCategory = model.nowMailCategory;
+        var list = model.GetSortMailScrList(mailCategory);
         if (list.IsNullOrEmpty())
         {
             transNoMail.SetActive(true);
@@ -164,9 +136,20 @@
         else
         {
             transNoMail.SetActive(false);
-            scrPersonal.m_Scorller.RefreshActiveCellViews();
-            scrGlobal.m_Scorller.RefreshActiveCellViews();
+            scrMail.Refresh();
+            for (int i = 0; i < list.Count; i++)
+            {
+                CellInfo cellInfo = new CellInfo();
+                cellInfo.infoInt1 = (int)mailCategory;
+                scrMail.AddCell(ScrollerDataType.Header, i, cellInfo);
+            }
+
+            scrMail.Restart();
         }
+        int personalMailCount = MailManager.Instance.GetMailCount(MailCategory.Personal);
+        txtCurrentMailCount.text = StringUtility.Contact(personalMailCount, "/", MailManager.Instance.personalMailMaxLimitCount);
     }
+
+
 }
 
diff --git a/Main/System/Main/HomeWin.cs b/Main/System/Main/HomeWin.cs
index fef4eaa..20c62b6 100644
--- a/Main/System/Main/HomeWin.cs
+++ b/Main/System/Main/HomeWin.cs
@@ -49,6 +49,7 @@
     [SerializeField] UIEffectPlayer autoOpenEffect;
     [SerializeField] Button blessLVBtn;
     [SerializeField] Text blessLVText;
+    [SerializeField] Button mailBtn;
 
     //鍏朵粬鍔熻兘鍏ュ彛
     [SerializeField] Button monthCardBtn;
@@ -87,6 +88,11 @@
             UIManager.Instance.OpenWindow<BlessLVWin>();
         });
 
+        mailBtn.AddListener(() =>
+        {
+            UIManager.Instance.OpenWindow<MailWin>();
+        });
+        
         officialUpBtn.AddListener(() =>
         {
             if (RealmConfig.GetKeys().Count <= PlayerDatas.Instance.baseData.realmLevel)

--
Gitblit v1.8.0