killapp/Assets/Scripts/UI/Pages/HomePage/CheckPasswordPage.cs
“虞渠成” ad92df903f fix: 恢复出厂设置时增加密码校验逻辑
1.  修复恢复出厂设置未校验密码的问题,未设置密码时直接弹出密码校验页
2.  修复密码校验页返回逻辑,正确恢复上一级返回动作
3.  调整设备信息页面UI布局并添加密码校验页面预制体
2026-09-22 09:09:24 +08:00

158 lines
6.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using Kill.Managers;
using Kill.Network;
using Kill.UI.Components;
using UnityEngine;
using UnityEngine.UI;
namespace Kill.UI.Pages
{
public class CheckPasswordPage : MonoBehaviour
{
class PasswordRequest
{
public string password;
}
public InputField passwordInput;
public Text errorText;
public GameObject plane;
// 未设置密码时的引导分支(仅在 passwordInput 等组件未挂时强制进入;正常面板同时具备输入与引导能力)
[Header("未设密码引导")]
public GameObject passwordCheckPanel; // 密码输入区域容器(含 InputField / 确认按钮等)
public GameObject passwordGuidePanel; // "引导去设置密码"提示区域容器
public Button setupPasswordBtn; // "立即设置密码" 按钮
public Button remindLaterBtn; // "稍后再说" 按钮
private void Awake()
{
if (setupPasswordBtn != null)
{
setupPasswordBtn.onClick.RemoveAllListeners();
setupPasswordBtn.onClick.AddListener(OnSetupPasswordClick);
}
if (remindLaterBtn != null)
{
remindLaterBtn.onClick.RemoveAllListeners();
remindLaterBtn.onClick.AddListener(OnRemindLaterClick);
}
}
Action lastBackAction;
public void OnEnable()
{
lastBackAction=UIManager.Instance.GetBackAction();
UIManager.Instance.RegisterBackAction(OnBack);
errorText.text="";
// 检测当前账号是否已设置过密码,决定显示密码输入面板还是引导面板
RefreshByPasswordState();
}
/// <summary>
/// 根据 userInfo 的密码标记切换显示:
/// 未设密码 → 始终显示引导面板(不显示密码输入框,避免用户输什么都是错的)
/// 已设密码 → 显示密码输入面板
/// 简单策略:未设密码时,每次 LockButtonPlane 激活都弹引导,不再用本地日期去重
/// </summary>
private void RefreshByPasswordState()
{
bool hasPassword = DataManager.Instance != null && DataManager.Instance.HasAnyPassword();
if (passwordGuidePanel != null) passwordGuidePanel.SetActive(!hasPassword);
if (passwordCheckPanel != null) passwordCheckPanel.SetActive(hasPassword);
}
public async void OnConfirm()
{
errorText.text="";
LoadingUI.Show();
try
{
string password = passwordInput != null ? passwordInput.text : "";
if (string.IsNullOrEmpty(password))
{
errorText.text = LanguageManager.Instance.GetLanguage("home_password_check_failed");
return;
}
PasswordRequest requestData=new PasswordRequest
{
password=passwordInput.text
};
var response = await NetworkCtrl.Instance.Post<LoginResponse>("/api/v1/auth/password/verify", requestData);
if (response != null && response.Data != null && response.Data.code == 200)
{
plane.SetActive(false);
gameObject.SetActive(false);
errorText.text="";
passwordInput.text="";
// 解锁成功,记录解锁时间(自动锁定倒计时起点)
DataManager.Instance.RecordUnlock();
}
else
{
errorText.text = LanguageManager.Instance.GetLanguage("home_password_check_failed");
passwordInput.text="";
}
}
catch (System.Exception ex)
{
Debug.LogError($"[CheckPasswordPage] 校验密码异常: {ex.Message}");
errorText.text = LanguageManager.Instance.GetLanguage("home_password_check_failed");
if (passwordInput != null) passwordInput.text = "";
}
finally
{
// 无论成功/失败/异常都关闭 Loading避免一直挂着
LoadingUI.Hide();
}
}
/// <summary>
/// 引导面板 - 立即设置密码
/// 关闭当前 LockButtonPlane 并打开个人中心的 设置密码 流程
/// </summary>
public void OnSetupPasswordClick()
{
OnSetPassword();
}
public SelfVerificationCodePanel verificationCodePanelPrefab;
public SelfSetPasswordPanel setPasswordPanelPrefab;
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);
plane.SetActive(false);
gameObject.SetActive(false);
// 解锁成功,记录解锁时间(自动锁定倒计时起点)
DataManager.Instance.RecordUnlock();
}
/// <summary>
/// 引导面板 - 稍后再说
/// 仅关闭 LockButtonPlane下次再激活时仍会再次弹出引导面板未设密码时每次都提示
/// </summary>
public void OnRemindLaterClick()
{
gameObject.SetActive(false);
}
public void OnBack()
{
UIManager.Instance.RegisterBackAction(lastBackAction);
gameObject.SetActive(false);
}
}
}