This commit is contained in:
2026-06-26 17:26:10 +08:00
parent 357b19e5e5
commit e3d13e0e37
80 changed files with 8607 additions and 23459 deletions
@@ -1,4 +1,7 @@
using System.Collections;
using Assets.MyGame.Scripts.Net;
using Assets.MyGame.Scripts.Net.API.UserData_SubClass;
using Assets.MyGame.Scripts.Net.APIRequest.Params;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
@@ -6,37 +9,29 @@ using UnityEngine.UI;
public class UIHome_BY_SafeBoxPanel : SubUIBase
{
public enum SafeBoxPenel {
手机绑定=1,
手机换绑=2,
存取=3,
记录=4,
修复密码=5
public enum SafeBoxPenel
{
设置二级密码 = 1,
存取 = 3,
记录 = 4,
修复密码 = 5
}
//存储面板
[Header("面板")]
public Button btn_Close_Switch; //safeboxpanel 1 2 3 4关闭 5返回保险主页面 这里待定先用简单的直接关
public Dictionary<SafeBoxPenel,GameObject> dic_SafeBoxPanel=new Dictionary<SafeBoxPenel, GameObject> ();
public SafeBoxPenel currPaenl;
public GameObject phoneParent;
public GameObject bxxParent;
public GameObject selectParent;
public GameObject safeBoxPanel_Type1;
public GameObject safeBoxPanel_Type2;
public GameObject safeBoxPanel_Type3;
public GameObject safeBoxPanel_Type4;
public GameObject safeBoxPanel_Type5;
[Header("绑定手机")]
public Button btn_YZM;
public Button btn_EnterYZM;
public TMP_InputField input_PhoneNum;
public TMP_InputField input_YZM;
[Header("绑定手机_设置密码")]
public Button btn_Close_Switch1; // 设置二级密码面板关闭按钮
public Button btn_Close_Switch5; // 修复密码面板关闭按钮
public Dictionary<SafeBoxPenel, GameObject> dic_SafeBoxPanel = new Dictionary<SafeBoxPenel, GameObject>();
public SafeBoxPenel currPanel;
public GameObject selectParent; // 存取和记录面板的父物体
public GameObject safeBoxPanel_Type1; // 设置二级密码面板
public GameObject safeBoxPanel_Type5; // 修复密码面板
[Header("设置密码")]
public Button btn_EnterPassword;
public TMP_InputField input_Password;
public TMP_InputField input_PasswordRes;
[Header("键盘")]
[Header("键盘")] // 只作为输入本次操作金币个数使用
public Button btn_KeyBoard_0;
public Button btn_KeyBoard_1;
public Button btn_KeyBoard_2;
@@ -49,38 +44,358 @@ public class UIHome_BY_SafeBoxPanel : SubUIBase
public Button btn_KeyBoard_9;
public Button btn_KeyBoard_Retype;
public Button btn_KeyBoard_Enter;
[Header("保险箱主页面")]
public Toggle toggle_Save;
public Toggle toggle_Take;
public Toggle toggle_Record;
public Button btn_forgetPassword;
public TextMeshProUGUI txt_CurrCoins;
public TextMeshProUGUI txt_SaveCoins;
public TextMeshProUGUI txt_OpenatrCoins;
public TMP_InputField input_SecondLevelPassword;
public TextMeshProUGUI txt_CurrCoins; // 当前拥有金币
public TextMeshProUGUI txt_SaveCoins; // 保险箱余额
public TextMeshProUGUI txt_OpenatrCoins; // 本次操作金币数
public TMP_InputField input_SecondLevelPassword; // 取款时输入密码
public Button btn_SecondLevelPasswordForget;
[Header("记录")]
public Transform tra_Content;
public GameObject obj_LinePrefab;//这里没有写脚本 child 0时间1类型2数量
public GameObject obj_LinePrefab; // child 0时间 1类型 2数量
public ScrollRect scrollRect_Record; // 记录列表的ScrollRect,用于滚动加载
[Header("修复密码")]
public Button btn_XFMMQR;
public Button btn_XFMMYZM;
public TMP_InputField input_XFMMYZM;
public TMP_InputField input_XFMMNewPassword;
public TMP_InputField input_XFMMNewRetypePassword;
/// <summary>
/// 这里判断是否已经绑定手机号
/// </summary>
protected override void OnInit()
{
base.OnInit();
}
// 运行时
private string inputAmount = "";
private bool isDepositMode = true; // true=存, false=取
// 记录分页
private int recordPage;
private const int RECORD_PAGE_SIZE = 100;
private bool recordLoading;
private bool recordHasMore = true;
public override void Awake()
{
btn_Close_Switch.onClick.AddListener(() =>
{
uIManager.Hide(UIPanel.SafeBoxPanel);
});
base.Awake();
// 注册面板字典
dic_SafeBoxPanel[SafeBoxPenel.设置二级密码] = safeBoxPanel_Type1;
dic_SafeBoxPanel[SafeBoxPenel.修复密码] = safeBoxPanel_Type5;
toggle_Save.onValueChanged.AddListener(OnToggleSave);
toggle_Take.onValueChanged.AddListener(OnToggleTake);
toggle_Record.onValueChanged.AddListener(OnToggleRecord);
// 关闭按钮
btn_Close_Switch1.onClick.AddListener(() => ClosePanel(SafeBoxPenel.设置二级密码));
btn_Close_Switch5.onClick.AddListener(() => ClosePanel(SafeBoxPenel.修复密码));
// 键盘
btn_KeyBoard_0.onClick.AddListener(() => KeyInput("0"));
btn_KeyBoard_1.onClick.AddListener(() => KeyInput("1"));
btn_KeyBoard_2.onClick.AddListener(() => KeyInput("2"));
btn_KeyBoard_3.onClick.AddListener(() => KeyInput("3"));
btn_KeyBoard_4.onClick.AddListener(() => KeyInput("4"));
btn_KeyBoard_5.onClick.AddListener(() => KeyInput("5"));
btn_KeyBoard_6.onClick.AddListener(() => KeyInput("6"));
btn_KeyBoard_7.onClick.AddListener(() => KeyInput("7"));
btn_KeyBoard_8.onClick.AddListener(() => KeyInput("8"));
btn_KeyBoard_9.onClick.AddListener(() => KeyInput("9"));
btn_KeyBoard_Retype.onClick.AddListener(() => { inputAmount = ""; UpdateOperateText(); });
btn_KeyBoard_Enter.onClick.AddListener(OnOperateEnter);
// 设置密码
btn_EnterPassword.onClick.AddListener(OnSetPassword);
// 修复密码
btn_XFMMYZM.onClick.AddListener(OnResetPasswordYZM);
btn_XFMMQR.onClick.AddListener(OnResetPasswordConfirm);
// 忘记密码(跳转修复面板)
btn_forgetPassword.onClick.AddListener(() => ShowPanel(SafeBoxPenel.修复密码));
btn_SecondLevelPasswordForget.onClick.AddListener(() => ShowPanel(SafeBoxPenel.修复密码));
}
protected override void OnShow(object args = null)
{
base.OnShow(args);
RefreshData();
}
private void RefreshData()
{
var userId = GameManager.Instance?.user?.id;
if (string.IsNullOrEmpty(userId)) return;
APIRequestList.GetUser(userId, data =>
{
if (data == null) return;
GameManager.Instance.UpdataUserData(data);
var safe = data.safeBox;
string pwd = safe?.password;
// 判断是否需要设置二级密码
if (string.IsNullOrEmpty(pwd))
{
ShowPanel(SafeBoxPenel.设置二级密码);
}
else
{
ClosePanel(SafeBoxPenel.设置二级密码);
ClosePanel(SafeBoxPenel.修复密码);
txt_SaveCoins.text = safe.amount.ToString();
txt_CurrCoins.text = data.assets.gold.ToString();
inputAmount = "";
UpdateOperateText();
}
});
}
// ==================== 面板切换 ====================
private void ShowPanel(SafeBoxPenel panel)
{
if (dic_SafeBoxPanel.TryGetValue(panel, out var go) && go != null)
go.SetActive(true);
}
private void ClosePanel(SafeBoxPenel panel)
{
if (dic_SafeBoxPanel.TryGetValue(panel, out var go) && go != null)
go.SetActive(false);
}
// ==================== 设置密码 ====================
private void OnSetPassword()
{
string pwd = input_Password.text;
string pwd2 = input_PasswordRes.text;
if (string.IsNullOrEmpty(pwd) || pwd.Length < 6)
{
UIManager.Instance.ShowBoardError("密码长度至少6位");
return;
}
if (pwd != pwd2)
{
UIManager.Instance.ShowBoardError("两次密码不一致");
return;
}
APIRequestList.SetSafeBoxPassword(new SetSafeBoxPasswordParam { password = pwd }, result =>
{
UIManager.Instance.ShowBoardError("密码设置成功");
RefreshData();
});
}
// ==================== 键盘输入(存/取金额) ====================
private void KeyInput(string digit)
{
if (inputAmount.Length >= 9) return; // 限制9位数字
inputAmount += digit;
UpdateOperateText();
}
private void UpdateOperateText()
{
txt_OpenatrCoins.text = string.IsNullOrEmpty(inputAmount) ? "0" : inputAmount;
}
private void OnOperateEnter()
{
if (string.IsNullOrEmpty(inputAmount) || inputAmount == "0")
{
UIManager.Instance.ShowBoardError("请输入有效金额");
return;
}
long amount = long.Parse(inputAmount);
if (isDepositMode)
DoDeposit(amount);
else
DoWithdraw(amount);
}
// ==================== 存取操作 ====================
private void DoDeposit(long gold)
{
if (gold > GameManager.Instance.user.assets.gold)
{
UIManager.Instance.ShowBoardError("余额不足");
return;
}
APIRequestList.SaveSafeBox(new SaveSafeBoxParam { gold = (int)gold }, result =>
{
UIManager.Instance.ShowBoardError($"存入{gold}金币成功");
inputAmount = "";
RefreshData();
});
}
private void DoWithdraw(long gold)
{
string pwd = input_SecondLevelPassword.text;
if (string.IsNullOrEmpty(pwd))
{
UIManager.Instance.ShowBoardError("请输入保险箱密码");
return;
}
APIRequestList.GetSafeBox(new GetSafeBoxInfoParam { gold = gold, password = pwd }, result =>
{
UIManager.Instance.ShowBoardError($"取出{gold}金币成功");
inputAmount = "";
input_SecondLevelPassword.text = "";
RefreshData();
});
}
// ==================== 修复密码 ====================
private void OnResetPasswordYZM()
{
string mobile = GameManager.Instance.user?.BaseInfo?.mobile;
if (string.IsNullOrEmpty(mobile))
{
UIManager.Instance.ShowBoardError("未绑定手机号");
return;
}
APIRequestList.YZM(new YZMParam { mobile = mobile }, msg =>
{
UIManager.Instance.ShowBoardError(msg ?? "验证码已发送");
});
}
private void OnResetPasswordConfirm()
{
string code = input_XFMMYZM.text;
string newPwd = input_XFMMNewPassword.text;
string newPwd2 = input_XFMMNewRetypePassword.text;
if (string.IsNullOrEmpty(code))
{
UIManager.Instance.ShowBoardError("请输入验证码");
return;
}
if (string.IsNullOrEmpty(newPwd) || newPwd.Length < 6)
{
UIManager.Instance.ShowBoardError("密码长度至少6位");
return;
}
if (newPwd != newPwd2)
{
UIManager.Instance.ShowBoardError("两次密码不一致");
return;
}
APIRequestList.ResetSafeBoxPassword(new ResetSafeBoxPasswordParam
{
code = code,
password = newPwd
}, result =>
{
UIManager.Instance.ShowBoardError("密码重置成功");
ClosePanel(SafeBoxPenel.修复密码);
RefreshData();
});
}
// ==================== Toggle点击:存/取模式切换 ====================
public void OnToggleSave(bool value)
{
if (value) { isDepositMode = true; inputAmount = ""; UpdateOperateText(); }
}
public void OnToggleTake(bool value)
{
if (value) { isDepositMode = false; inputAmount = ""; UpdateOperateText(); }
}
public void OnToggleRecord(bool value)
{
if (!value) return;
// 重置分页
recordPage = 0;
recordHasMore = true;
for (int i = tra_Content.childCount - 1; i >= 0; i--)
Destroy(tra_Content.GetChild(i).gameObject);
LoadRecordPage();
// 滚动到底部时触发翻页
if (scrollRect_Record != null)
{
scrollRect_Record.onValueChanged.RemoveAllListeners();
scrollRect_Record.onValueChanged.AddListener(OnRecordScroll);
}
}
private void OnRecordScroll(Vector2 pos)
{
// 滚动到最底部(normalizedPosition.y ≈ 0)
if (!recordHasMore || recordLoading || pos.y > 0.05f) return;
LoadRecordPage();
}
private void LoadRecordPage()
{
if (recordLoading || !recordHasMore) return;
recordLoading = true;
// 第一层封装:保险箱记录专用参数
var req = new GetUserRewardListObj
{
keyWord = "",
pageIndex = recordPage,
pageSize = RECORD_PAGE_SIZE,
userId = GameManager.Instance?.user?.id,
type = 0,
source = 0,
currencyType = 2 // 金币保险箱
};
APIRequestList.GetUserRewardList(req, list =>
{
recordLoading = false;
if (list == null || list.Count == 0)
{
recordHasMore = false;
if (tra_Content.childCount == 0)
{
var emptyLine = Instantiate(obj_LinePrefab, tra_Content);
emptyLine.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = "暂无记录";
}
return;
}
foreach (var item in list)
{
var line = Instantiate(obj_LinePrefab, tra_Content);
var time = new System.DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(item.createTime);
line.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = time.ToString("MM-dd HH:mm");
string typeStr = item.changeCount >= 0 ? "收入" : "支出";
line.transform.GetChild(1).GetComponent<TextMeshProUGUI>().text = typeStr;
line.transform.GetChild(2).GetComponent<TextMeshProUGUI>().text = Mathf.Abs(item.changeCount).ToString();
}
recordPage++;
if (list.Count < RECORD_PAGE_SIZE)
recordHasMore = false;
});
}
}