yyl
2025-11-20 9e89e605d5429babb4b33df2e47ea86dff9d2ba7
Main/System/Mail/MailWin.cs
@@ -1,173 +1,154 @@
using System;
using UnityEngine;
namespace vnxbqy.UI
public class MailWin : FunctionsBaseWin
{
    public class MailWin : UIBase
    [SerializeField] ScrollerController scrMail;
    [SerializeField] ButtonEx btnDeleteAllRead;
    [SerializeField] ButtonEx btnClaimAll;
    [SerializeField] RedpointBehaviour rpTab0;
    [SerializeField] RedpointBehaviour rpTab1;
    [SerializeField] Transform transNoMail;
    [SerializeField] Transform transCurrentMailCount;
    [SerializeField] TextEx txtCurrentMailCount;
    MailManager model { get { return MailManager.Instance; } }
    protected override void InitComponent()
    {
        [SerializeField] Transform transPersonal;
        [SerializeField] Transform transGlobal;
        [SerializeField] ScrollerController scrPersonal;
        [SerializeField] ScrollerController scrGlobal;
        [SerializeField] ButtonEx btnDeleteRead;
        [SerializeField] ButtonEx btnClaimAll;
        [SerializeField] ToggleEx togTab0;
        [SerializeField] RedpointBehaviour rpTab0;
        [SerializeField] ToggleEx togTab1;
        [SerializeField] RedpointBehaviour rpTab1;
        [SerializeField] Transform transNoMail;
        MailManager model { get { return MailManager.Instance; } }
        protected override void InitComponent()
        {
            base.InitComponent();
            btnDeleteRead.SetListener(OnDeleteRead);
            btnClaimAll.SetListener(OnClaimAll);
            togTab0.SetListener(OnTab0);
            togTab1.SetListener(OnTab1);
        }
        base.InitComponent();
        btnDeleteAllRead.SetListener(OnDeleteRead);
        btnClaimAll.SetListener(OnClaimAll);
    }
        protected override void OnPreOpen()
        {
            model.OnUpdateMailListEvent += OnUpdateMailListEvent;
            model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent;
            scrPersonal.OnRefreshCell += OnRefreshPersonalCell;
            scrGlobal.OnRefreshCell += OnRefreshGlobalCell;
            rpTab0.redpointId = model.GetTabRedpointId(MailCategory.Personal);
            rpTab1.redpointId = model.GetTabRedpointId(MailCategory.Global);
            transNoMail.SetActive(false);
        }
    protected override void OnPreOpen()
    {
        base.OnPreOpen();
        model.nowMailCategory = MailCategory.Personal;
        rpTab0.redpointId = model.GetTabRedpointId(MailCategory.Personal);
        rpTab1.redpointId = model.GetTabRedpointId(MailCategory.Global);
        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()
        {
            model.OnUpdateMailListEvent -= OnUpdateMailListEvent;
            model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent;
            scrPersonal.OnRefreshCell -= OnRefreshPersonalCell;
            scrGlobal.OnRefreshCell -= OnRefreshGlobalCell;
        }
    }
        private void OnTab0(bool value)
    protected override void OnPreClose()
    {
        base.OnPreClose();
        model.OnUpdateMailListEvent -= OnUpdateMailListEvent;
        model.OnUpdateMailStateChangeEvent -= OnUpdateMailStateChangeEvent;
        scrMail.OnRefreshCell -= OnRefreshCell;
        GlobalTimeEvent.Instance.secondEvent -= OnSecondEvent;
    }
    private void OnSecondEvent()
    {
        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)
        {
            if (value)
            {
                transPersonal.SetActive(true);
                transGlobal.SetActive(false);
            case 0:
                model.nowMailCategory = MailCategory.Personal;
                CreatePersonalScr(model.nowMailCategory);
            }
        }
        private void OnTab1(bool value)
        {
            if (value)
            {
                transPersonal.SetActive(false);
                transGlobal.SetActive(true);
                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;
                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>();
            _cell?.Display(cell.index, cell);
        }
        private void OnDeleteRead()
        {
            ConfirmCancel.ShowPopConfirm(
                Language.Get("Mail101"),
                Language.Get("Mail10"),
                (bool isOk) =>
                {
                    if (isOk)
                    {
                        model.DeleteMail();
                        //邮件删除成功
                        SysNotifyMgr.Instance.ShowTip("Mail01");
                    }
                });
        }
        private void OnClaimAll()
        {
            if (!model.IsCanHaveMail())
            {
                SysNotifyMgr.Instance.ShowTip("Mail02");
                return;
            }
            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();
        }
        private void OnUpdateMailListEvent()
        {
            RefreshScr();
        }
        private void RefreshScr()
        {
            var list = model.GetSortMailScrList(model.nowMailCategory);
            if (list.IsNullOrEmpty())
            {
                transNoMail.SetActive(true);
            }
            else
            {
                transNoMail.SetActive(false);
                scrPersonal.m_Scorller.RefreshActiveCellViews();
                scrGlobal.m_Scorller.RefreshActiveCellViews();
            }
                btnDeleteAllRead.SetActive(false);
                btnClaimAll.SetActive(false);
                transCurrentMailCount.SetActive(false);
                DisPlay();
                break;
            default:
                Debug.LogWarning("未知的标签索引: " + functionOrder);
                break;
        }
    }
    private void OnRefreshCell(ScrollerDataType type, CellView cell)
    {
        var _cell = cell.GetComponent<MailCell>();
        _cell?.Display(cell.index, cell);
    }
    private void OnDeleteRead()
    {
        ConfirmCancel.ShowPopConfirm(
            Language.Get("Mail101"),
            Language.Get("Mail10"),
            (bool isOk) =>
            {
                if (isOk)
                {
                    model.DeleteMail();
                    //邮件删除成功
                    SysNotifyMgr.Instance.ShowTip("Mail01");
                }
            });
    }
    private void OnClaimAll()
    {
        if (!model.IsCanHaveMail())
        {
            SysNotifyMgr.Instance.ShowTip("Mail02");
            return;
        }
        model.ClaimMail();
    }
    private void OnUpdateMailStateChangeEvent()
    {
        DisPlay();
    }
    private void OnUpdateMailListEvent()
    {
        DisPlay();
    }
    private void DisPlay()
    {
        scrMail.Refresh();
        scrMail.Restart();
        MailCategory mailCategory = model.nowMailCategory;
        var list = model.GetSortMailScrList(mailCategory);
        if (list.IsNullOrEmpty())
        {
            transNoMail.SetActive(true);
        }
        else
        {
            transNoMail.SetActive(false);
            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);
    }
}