using System; using UnityEngine; public class MailInfoWin : UIBase { [SerializeField] TextEx txtDate; [SerializeField] TextEx txtTitle; [SerializeField] Transform transNoAward; [SerializeField] RichText txtNoAwardInfo; [SerializeField] Transform transAward; [SerializeField] RichText txtAwardInfo; [SerializeField] ScrollerController scrAward; [SerializeField] TextEx txtExpiryDate; [SerializeField] ImageEx imgHasAward; [SerializeField] ButtonEx btnHave; [SerializeField] ButtonEx btnDelete; MailData nowMailData; bool isHasAward = false; MailManager model { get { return MailManager.Instance; } } protected override void InitComponent() { base.InitComponent(); btnHave.SetListener(OnClickHaveButton); btnDelete.SetListener(OnClickDeleteButton); } protected override void OnPreOpen() { base.OnPreOpen(); scrAward.OnRefreshCell += OnRefreshLowRewardCell; model.OnUpdateMailListEvent += OnUpdateMailListEvent; model.OnUpdateMailStateChangeEvent += OnUpdateMailStateChangeEvent; GlobalTimeEvent.Instance.secondEvent += OnSecondEvent; Display(); } protected override void OnPreClose() { 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() { if (model.nowUuid == null || model.nowUuid == string.Empty) { Debug.Log("当前查看的邮件没有UUID"); return; } model.ClaimMail(model.nowUuid); } private void OnClickDeleteButton() { if (model.nowUuid == null || model.nowUuid == string.Empty) { Debug.Log("当前查看的邮件没有UUID"); return; } model.DeleteMail(model.nowUuid); UIManager.Instance.CloseWindow(); //邮件删除成功 SysNotifyMgr.Instance.ShowTip("Mail01"); } private void OnUpdateMailStateChangeEvent() { Display(); } private void OnUpdateMailListEvent() { Display(); } private void OnRefreshLowRewardCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, cell); } private void Display() { if (!model.TryGetMailData(model.nowUuid, out nowMailData)) { UIManager.Instance.CloseWindow(); return; } isHasAward = nowMailData != null && nowMailData.HasAward(); transNoAward.SetActive(!isHasAward); transAward.SetActive(isHasAward); btnHave.SetActive(isHasAward && nowMailData.MailState != 3); imgHasAward.SetActive(nowMailData.MailState != 3 && nowMailData.HasAward()); txtDate.text = model.FormatCreateMailTime(nowMailData.CreateDateTime); string key = nowMailData.GetTemplateKey(); if (nowMailData.IsTemplateMail() && 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($"[邮件调试] 解析后的参数数量: {templateParams.Count}"); // if (templateParams.Count > 0) // { // for(int i = 0; i < templateParams.Count; i++) // { // Debug.Log($"[邮件调试] 参数[{i}]: {templateParams[i]}"); // } // } try { string content = string.Format(config.Content, templateParams.ToArray()); txtNoAwardInfo.text = content; txtAwardInfo.text = content; txtTitle.text = config.Title; } catch (System.Exception ex) { txtTitle.text = nowMailData.Title; txtNoAwardInfo.text = nowMailData.Text; txtAwardInfo.text = nowMailData.Text; Debug.LogError($"MailInfoWin 解析邮件参数失败! GUID: {nowMailData.GUID}, " + $"原始参数JSON: '{nowMailData.Text}', 错误: {ex.Message}"); } } else { txtTitle.text = nowMailData.Title; txtNoAwardInfo.text = nowMailData.Text; txtAwardInfo.text = nowMailData.Text; } 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) { for (int i = 0; i < nowMailData.Items.Count; i++) { CellInfo cellInfo = new CellInfo(); cellInfo.infoStr1 = nowMailData.GUID; scrAward.AddCell(ScrollerDataType.Header, i, cellInfo); } } scrAward.Restart(); } }