“虞渠成” 10ad83d6b0 refactor: 优化密码校验与第三方登录逻辑,新增未设密码引导流程
1. 移除MainScene和UIManager中的首次启动标记逻辑
2. 新增DataManager的HasAnyPassword方法检测用户是否设置过密码
3. 完善HomePage的CheckPasswordPage,新增未设密码引导弹窗
4. 调整SelfVerificationCodePanel支持自定义返回回调
5. 适配苹果第三方登录无需强制设置密码的审核要求
6. 新增多语言词条支持密码引导文案
7. 移除HomePageCtrl在应用暂停时自动锁定按钮的逻辑
2026-09-20 14:04:59 +08:00

168 lines
5.8 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Kill.Managers;
using UnityEngine.UI;
using Kill.Network;
using System.Threading.Tasks;
using Kill.UI.Components;
namespace Kill.UI.Pages
{
public class SelfInfoPage : MonoBehaviour
{
UserInfo userInfo;
public RawImage avatarImage;
public Text nicknameText;
public RenamePage renamePagePrefab;
public Button renameButton;
public Button backButton;
public SelfVerificationCodePanel verificationCodePanelPrefab;
public SelfSetPasswordPanel setPasswordPanelPrefab;
public SelectCountry selectCountryPrefab;
public Text countryText;
public Button selectCountryButton;
List<string> passwordSetKeys = new List<string> { "100200", "100201" };
public Button signoutButton;
/// <summary>
/// 0设置 1修改
/// </summary>
List<string> passwordSet;
/// <summary>
/// <summary>
/// 0简单密码 1复杂密码
/// </summary>
public Button resetPassword;
public async Task Init(UserInfo userInfo)
{
this.userInfo = userInfo;
UIManager.Instance.RegisterBackAction(OnBack);
backButton.onClick.RemoveAllListeners();
backButton.onClick.AddListener(OnBack);
resetPassword.onClick.RemoveAllListeners();
resetPassword.onClick.AddListener(OnSetPassword);
renameButton.onClick.RemoveAllListeners();
renameButton.onClick.AddListener(() =>
{
RenamePage renamePage = Instantiate(renamePagePrefab, transform);
renamePage.Init(userInfo.username, CloseRenamePage, 1);
});
signoutButton.onClick.RemoveAllListeners();
signoutButton.onClick.AddListener(ClickSignOut);
// 在这里初始化个人信息页面,显示用户信息
if (avatarImage != null)
{
// 设置头像
if (userInfo.avatar != null)
{
avatarImage.gameObject.SetActive(true);
await NetworkCtrl.Instance.LoadImageToUIRawImageAsync(userInfo.avatar, avatarImage);
avatarImage.transform.parent.GetComponent<Mask>().showMaskGraphic = false;
}
}
if (nicknameText != null)
{
nicknameText.text = userInfo.username;
}
// 国家展示与选择
if (countryText != null)
UpdateCountryDisplay(userInfo.country_code);
if (selectCountryButton != null)
{
selectCountryButton.onClick.RemoveAllListeners();
selectCountryButton.onClick.AddListener(OnSelectCountry);
}
}
/// <summary>
/// 更新国家显示文本
/// </summary>
private void UpdateCountryDisplay(string code)
{
if (string.IsNullOrEmpty(code))
{
countryText.text = "";
return;
}
var country = LanguageManager.Instance.countryList.Find(c => c.code == code);
bool isZh = LanguageManager.Instance.languageType == LanguageManager.LanguageType.Chinese;
countryText.text = country.code != null ? (isZh ? country.name_zh : country.name_en) : code;
}
/// <summary>
/// 选择国家
/// </summary>
private void OnSelectCountry()
{
var selectCountry = Instantiate(selectCountryPrefab, transform);
selectCountry.Init(userInfo.country_code);
selectCountry.onConfirm = (code) =>
{
if (code != null)
{
userInfo.country_code = code;
UpdateCountryDisplay(code);
}
Destroy(selectCountry.gameObject);
UIManager.Instance.RegisterBackAction(OnBack);
};
}
public void InitLanguageText()
{
passwordSet = new List<string>();
}
public void CloseRenamePage(string newNickname)
{
if (nicknameText != null)
{
nicknameText.text = newNickname;
}
DataManager.Instance.userInfo.username = newNickname;
UIManager.Instance.RegisterBackAction(OnBack);
}
SelfVerificationCodePanel verificationCodePanel;
public void OnSetPassword()
{
verificationCodePanel = Instantiate(verificationCodePanelPrefab, transform);
verificationCodePanel.Init(OnSureVerificationCode, OnBack);
}
SelfSetPasswordPanel setPasswordPanel;
public void OnSureVerificationCode()
{
Destroy(verificationCodePanel.gameObject);
setPasswordPanel = Instantiate(setPasswordPanelPrefab, transform);
setPasswordPanel.Init(OnSetPasswordSuccess);
}
public void OnSetPasswordSuccess()
{
Destroy(setPasswordPanel.gameObject);
OnSignOut();
}
public void OnBack()
{
UIManager.Instance.RegisterBackAction(GetComponentInParent<SelfPage>().OnBack);
GetComponentInParent<SelfPage>().RefreshAsync();
Destroy(gameObject);
}
public WindowTipCtrl signoutTip;
public void ClickSignOut()
{
signoutTip.gameObject.SetActive(true);
signoutTip.Init(OnSignOut,()=>{signoutTip.gameObject.SetActive(false);});
}
public void OnSignOut()
{
// 清除用户数据
DataManager.Instance.ClearInfo();
// 返回登录页面
UIManager.Instance.OpenMainPage(UIManager.PageName.loginPage);
}
}
}