123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- using Newtonsoft.Json;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UIElements;
- /* 本文件控制Reset UI document
- * 1. 显示和关闭Reset UI
- * 2. 显示和隐藏输入框
- * 3. 提交数据到服务器
- * 4. 显示错误信息
- */
- public class ResetUIController : MonoBehaviour
- {
- // Start is called once before the first execution of Update after the MonoBehaviour is created
- private Label message, errMsg;
- private TextField email, mobile, verification, password;
- private Button submit, cancel;
- private SceneCondition sceneCondition = SceneCondition.ChineseInitial;
- private Dictionary<string, string> errorMessageDict = new();
- private string errorText = string.Empty; // 错误信息汇总
- void OnEnable()
- {
- var root = GetComponent<UIDocument>().rootVisualElement;
- message = root.Q<Label>("message");
- email = root.Q<TextField>("email");
- mobile = root.Q<TextField>("mobile");
- verification = root.Q<TextField>("verification");
- password = root.Q<TextField>("password");
- submit = root.Q<Button>("submit");
- cancel = root.Q<Button>("cancel");
- errMsg = root.Q<Label>("error_msg");
- InitSetting();
- }
- // Update is called once per frame
- void Update()
- {
- FormatCheck();
- errMsg.text = errorText;
- }
- // 初始化语言和显示设定
- void InitSetting()
- {
- // 设置 reset UI界面里面label和按键的语言显示
- string textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "button", "submit", EnviromentSetting.languageCode });
- submit.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "button", "cancel", EnviromentSetting.languageCode });
- cancel.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "text_field", "mobile", EnviromentSetting.languageCode });
- mobile.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "text_field", "email", EnviromentSetting.languageCode });
- email.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "text_field", "verification", EnviromentSetting.languageCode });
- verification.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "text_field", "password", EnviromentSetting.languageCode });
- password.label = textValue;
- errorMessageDict.Clear();
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "error_msg", "password_too_short", EnviromentSetting.languageCode });
- errorMessageDict.Add("password_too_short", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "error_msg", "cannot_find_account", EnviromentSetting.languageCode });
- errorMessageDict.Add("cannot_find_account", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "error_msg", "wrong_verification_code", EnviromentSetting.languageCode });
- errorMessageDict.Add("wrong_verification_code", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "error_msg", "email_format_wrong", EnviromentSetting.languageCode });
- errorMessageDict.Add("email_format_wrong", textValue);
- cancel.clicked += CancelClick;
- submit.clicked += SubmitClick;
- if (EnviromentSetting.languageCode == "zh-cn")
- {
- sceneCondition = SceneCondition.ChineseInitial;
- }
- else
- {
- sceneCondition = SceneCondition.OtherLanguageInitial;
- }
- ConditionSetting(sceneCondition.GetHashCode());
- }
- // 根据condition的值来显示不同的UI
- void ConditionSetting(int conditionValue)
- {
- switch (conditionValue)
- {
- case 0:
- string textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "label", "message 0", EnviromentSetting.languageCode });
- message.text = textValue;
- email.style.display = DisplayStyle.None;
- mobile.style.display = DisplayStyle.Flex;
- verification.style.display = DisplayStyle.None;
- password.style.display = DisplayStyle.None;
- submit.SetEnabled(false);
- break;
- case 1:
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "label", "message 1", EnviromentSetting.languageCode });
- message.text = textValue;
- email.style.display = DisplayStyle.Flex;
- mobile.style.display = DisplayStyle.None;
- verification.style.display = DisplayStyle.None;
- password.style.display = DisplayStyle.None;
- submit.SetEnabled(false);
- break;
- case 2:
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "label", "message 2", EnviromentSetting.languageCode });
- message.text = textValue;
- email.SetEnabled(false);
- mobile.SetEnabled(false);
- verification.style.display = DisplayStyle.Flex;
- password.style.display = DisplayStyle.Flex;
- submit.SetEnabled(false);
- break;
- //case 3:
- // textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "label", "message 3", EnviromentSetting.languageCode });
- // message.text = textValue;
- // email.SetEnabled(false);
- // mobile.SetEnabled(false);
- // verification.style.display = DisplayStyle.Flex;
- // password.style.display = DisplayStyle.None;
- // submit.SetEnabled(false);
- // break;
- //case 4:
- // textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "label", "message 4", EnviromentSetting.languageCode });
- // message.text = textValue;
- // email.SetEnabled(false);
- // mobile.SetEnabled(false);
- // verification.style.display = DisplayStyle.None;
- // password.style.display = DisplayStyle.Flex;
- // submit.SetEnabled(false);
- // break;
- }
- }
- void SubmitClick()
- {
- if (sceneCondition.GetHashCode() <= 1)
- {
- // 申请验证码阶段
- RequestVerificationCodePost();
- }
- else if (sceneCondition.GetHashCode() == 2)
- {
- // 输入验证码阶段和输入新密码阶段
- NewPassowrdRequest();
- }
- }
- void RequestVerificationCodePost()
- {
- // 申请验证码
- // POST数据到服务器
- string url = "/api/reset/password/step1/";
- Dictionary<string, string> formData = new();
- WWWForm form = new();
- form.AddField("UUID", EnviromentSetting.UUID);
- if (EnviromentSetting.languageCode == "zh-cn")
- {
- form.AddField("mobile", mobile.text);
- }
- else
- {
- form.AddField("email", email.text);
- }
- form.AddField("UUID", EnviromentSetting.UUID);
- form.AddField("language_code", EnviromentSetting.languageCode);
- StartCoroutine(WebController.PostRequest(url, form, callback: RequestVerificationCodeCallback));
- errorText = string.Empty;
- }
- void RequestVerificationCodeCallback(string json)
- {
- var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
- if (data != null && data["status"] == "success")
- {
- if (data["message"] == "verification sent")
- {
- // 发送验证码成功
- sceneCondition = SceneCondition.InputVerificationCodeAndNewPassword;
- ConditionSetting(sceneCondition.GetHashCode());
- }
- }
- else if (data != null && data["status"] == "error")
- {
- // 找不到对应的账户
- if (data["message"] == "cannot find account")
- {
- errorText += errorMessageDict["cannot_find_account"];
- }
- }
- }
- void NewPassowrdRequest()
- {
- // 检查验证码
- string url = "/api/reset/password/step2/";
- Dictionary<string, string> formData = new();
- WWWForm form = new();
- form.AddField("UUID", EnviromentSetting.UUID);
- if (EnviromentSetting.languageCode == "zh-cn")
- {
- form.AddField("mobile", mobile.text);
- }
- else
- {
- form.AddField("email", email.text);
- }
- form.AddField("UUID", EnviromentSetting.UUID);
- form.AddField("language_code", EnviromentSetting.languageCode);
- form.AddField("verification_code", verification.text);
- form.AddField("password", password.text);
- StartCoroutine(WebController.PostRequest(url, form, callback: NewPasswordCallback));
- errorText = string.Empty;
- }
- void NewPasswordCallback(string json)
- {
- var data = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
- if (data != null && data["status"] == "success")
- {
- string msg = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "resetUI", "label", "new_password_success", EnviromentSetting.languageCode });
- MessageBoxController.ShowMessage(msg, () => MaskTransitions.TransitionManager.Instance.LoadLevel("Home"));
- }
- else if (data != null && data["status"] == "error")
- {
- // 验证码错误
- if (data["message"] == "wrong verification code")
- {
- errorText += errorMessageDict["wrong_verification_code"];
- }
- }
- }
- void CancelClick()
- {
- var uiPlaceholder = GameObject.Find("Canvas Placeholder");
- if (uiPlaceholder != null)
- {
- var resetUI = uiPlaceholder.transform.Find("Reset Pasword").gameObject;
- var loginCanvas = uiPlaceholder.transform.Find("Login Canvas").gameObject;
- resetUI.SetActive(false);
- loginCanvas.SetActive(true);
- }
- }
- // 检查输入的内容是否为空,输入不为空的时候Submit按钮可用
- void FormatCheck()
- {
- switch (sceneCondition.GetHashCode())
- {
- case 0:
- {
- if (mobile.value != "")
- {
- submit.SetEnabled(true);
- }
- else
- {
- submit.SetEnabled(false);
- }
- break;
- }
- case 1:
- {
- if (email.value != "" && GameTool.IsValidEmail(email.text))
- {
- submit.SetEnabled(true);
- }
- else
- {
- submit.SetEnabled(false);
- }
- break;
- }
- case 2:
- {
- if (verification.value != "" && password.text.Length >= 8)
- {
- submit.SetEnabled(true);
- }
- else
- {
- submit.SetEnabled(false);
- }
- break;
- }
- }
- }
- }
- public enum SceneCondition
- {
- // 0: 中文初始, 1: 其他语言初始, 2: 输入验证码和新的密码
- ChineseInitial = 0,
- OtherLanguageInitial = 1,
- InputVerificationCodeAndNewPassword = 2,
- }
|