2026-06-18 09:38:23 +08:00

111 lines
3.4 KiB
C#

using Kill.Managers;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Serialization;
using Kill.Utils;
using Kill.UI.Components;
using Kill.Network;
namespace Kill.UI.Pages
{
/// <summary>
/// 登录页面
/// </summary>
public class LoginPanel : LoginSubPageBase
{
[Header("输入组件")]
public InputField emailInput;
public Toggle privacyToggle;
[Header("显示组件")]
public Text errorText;
[Header("按钮")]
public Button loginBtn;
public Button toRegisterBtn;
[FormerlySerializedAs("thirdPartyLoginBtn")]
public Button googleLoginBtn;
public Button appleLoginBtn;
public Button privacyLinkBtn;
protected override void OnInitialize()
{
// 绑定按钮事件
if (loginBtn != null)
loginBtn.onClick.AddListener(OnLoginClick);
if (toRegisterBtn != null)
toRegisterBtn.onClick.AddListener(() => ShowPage(LoginPageCtrl.SubPageType.Register));
if (googleLoginBtn != null)
{
googleLoginBtn.onClick.AddListener(() => LoginPageCtrl.Instance.OnGoogleLogin());
#if UNITY_ANDROID
googleLoginBtn.gameObject.SetActive(true);
#else
googleLoginBtn.gameObject.SetActive(false);
#endif
}
if (appleLoginBtn != null)
{
appleLoginBtn.onClick.AddListener(() => LoginPageCtrl.Instance.OnAppleLogin());
#if UNITY_IOS
appleLoginBtn.gameObject.SetActive(true);
#else
appleLoginBtn.gameObject.SetActive(false);
#endif
}
if (privacyLinkBtn != null)
privacyLinkBtn.onClick.AddListener(() => LoginPageCtrl.Instance.ShowPrivacyAgreementPlane());
}
protected override void OnShow()
{
// 页面显示时初始化隐私协议链接的显示状态
privacyToggle.isOn = true;
errorText.text = "";
emailInput.text = "";
}
private async void OnLoginClick()
{
string email = emailInput != null ? emailInput.text : "";
if (string.IsNullOrEmpty(email) || !ValidationUtils.IsValidEmailStrict(email))
{
errorText.text = LanguageManager.Instance.GetLanguage("100006");
return;
}
if (!privacyToggle.isOn)
{
LoginPageCtrl.Instance.ShowPrivacyAgreementTip(() =>
{
privacyToggle.isOn = true;
OnLoginClick();
});
return;
}
// 保存邮箱到登录控制器
LoginPageCtrl.Instance.SetCurrentEmail(email);
// 验证邮箱是否已注册
await LoginPageCtrl.Instance.CheckEmailRegistered(email,
onSuccess: (data) =>
{
if (data)
{
ShowPage(LoginPageCtrl.SubPageType.LoginPassword);
}
else
{
errorText.text = LanguageManager.Instance.GetLanguage("100035");
}
},
onError: (code, message) =>
{
errorText.text = message;
}
);
}
}
}