123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- using Newtonsoft.Json;
- using System.Collections.Generic;
- using System.Net.Mail;
- using UnityEngine;
- using UnityEngine.SceneManagement;
- using UnityEngine.UIElements;
- /* 这个controller用来控制用户修改注册信息代码
- * 本文件大量代码从RegisterUIController.cs复制过来,任何修复需要同时考虑同步
- */
- public class UserInfoController : MonoBehaviour
- {
- private TextField userName, password, mobile, email;
- private Button confirm, cancel, logout, deleteAccount;
- private Label errorMsgLabel;
- private VisualElement feedback;
- private string errorText = null; // 错误信息汇总
- private string deleteAlertMsg;
- private Dictionary<string, string> errorMessageDict = new();
- // Start is called once before the first execution of Update after the MonoBehaviour is created
- void OnEnable()
- {
- var root = GetComponent<UIDocument>().rootVisualElement;
- userName = root.Q<TextField>("name");
- password = root.Q<TextField>("password");
- mobile = root.Q<TextField>("mobile");
- email = root.Q<TextField>("email");
- confirm = root.Q<VisualElement>("confirmArea").Q<Button>("confirm");
- cancel = root.Q<VisualElement>("confirmArea").Q<Button>("cancel");
- errorMsgLabel = root.Q<Label>("error_msg");
- logout = root.Q<Button>("logout");
- deleteAccount = root.Q<Button>("delete_account");
- feedback = root.Q<VisualElement>("feedback");
- logout.clicked += LogoutClick;
- confirm.clicked += ConfirmClick;
- cancel.clicked += CancelClick;
- errorMessageDict.Clear();
- InitSetting();
- UserInfoLoad();
- feedback.RegisterCallback<ClickEvent>(ev => FeedbackClick());
- }
- // Update is called once per frame
- //void Update()
- //{
-
- //}
- // 绑定confirm按键按下事件
- void ConfirmClick()
- {
- Debug.Log("User info update page confirm btn clicked.");
- if (ContentCheckBeforePost())
- {
- // POST数据到服务器
- string url = "/api/user/update/";
- Dictionary<string, string> formData = new();
- WWWForm form = new();
- form.AddField("UUID", EnviromentSetting.UUID);
- form.AddField("mobile_number", mobile.text);
- form.AddField("email", email.text);
- form.AddField("password", password.text);
- form.AddField("user_name", userName.text);
- form.AddField("user_id", UserProperty.userId);
- form.AddField("client_language", EnviromentSetting.languageCode);
- StartCoroutine(WebController.PostRequest(url, form, callback: ConfirmClickCallback));
- }
- }
- void ConfirmClickCallback(string json)
- {
- // TODO 等返回信息确认后,验证逻辑
- var data = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
- if (data != null && data["status"].ToString() == "success")
- {
- var user_info = JsonConvert.DeserializeObject<Dictionary<string, string>>(data["user_info"].ToString());
- UserProperty.name = user_info["user_name"];
- UserProperty.coin = int.Parse(user_info["coin"]);
- UserProperty.mobile = user_info["mobile"];
- UserProperty.email = user_info["email"];
- UserProperty.level = user_info["level"];
- if (UserProperty.level == "pro") { EnviromentSetting.maxDogQty = 3; }
- UserProperty.isRegUser = bool.Parse(user_info["isRegUser"]);
- Debug.Log("Updated user id: " + UserProperty.userId);
- string msg = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "game_message", "update_user_info_success", EnviromentSetting.languageCode });
- MessageBoxController.ShowMessage(msg, CancelClick);
- }
- else if (data != null && data["status"].ToString() == "error")
- {
- // 更新用户信息失败
- errorText = string.Empty; // 清空
- if (data["message"].ToString() == "duplicated mobile phone")
- {
- errorText += errorMessageDict["duplicated_mobile"];
- errorText += "<br>";
- }
- if (data["message"].ToString() == "duplicated email")
- {
- errorText += errorMessageDict["duplicated_email"];
- errorText += "<br>";
- }
- errorMsgLabel.text = errorText;
- }
- else
- {
- }
- }
- // 绑定取消按键,关闭用户信息更新菜单
- void CancelClick()
- {
- var uiPlaceholder = GameObject.Find("UI Placeholder");
- if (uiPlaceholder != null)
- {
- var thisUI = uiPlaceholder.transform.Find("User Info").gameObject;
- var vamUI = uiPlaceholder.transform.Find("VoiceAndMenu").gameObject;
- thisUI.SetActive(false);
- vamUI.SetActive(true);
- }
- }
- void FeedbackClick()
- {
- var uiPlaceholder = GameObject.Find("UI Placeholder");
- if (uiPlaceholder != null)
- {
- var FeedbackUI = uiPlaceholder.transform.Find("Feedback").gameObject;
- var UserInfoUI = uiPlaceholder.transform.Find("User Info").gameObject;
- FeedbackUI.SetActive(true);
- UserInfoUI.SetActive(false);
- }
- }
- // 初始化语言和显示设定
- void InitSetting()
- {
- // 设置 shopping UI界面里面label和按键的语言显示
- string textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "confirm", EnviromentSetting.languageCode });
- confirm.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "cancel", EnviromentSetting.languageCode });
- cancel.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "name", EnviromentSetting.languageCode });
- userName.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "password", EnviromentSetting.languageCode });
- password.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "mobile", EnviromentSetting.languageCode });
- mobile.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "label", "email", EnviromentSetting.languageCode });
- email.label = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "duplicated_mobile", EnviromentSetting.languageCode });
- errorMessageDict.Add("duplicated_mobile", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "user_name_is_empty", EnviromentSetting.languageCode });
- errorMessageDict.Add("user_name_is_empty", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "password_too_short", EnviromentSetting.languageCode });
- errorMessageDict.Add("password_too_short", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "mobile_is_empty", EnviromentSetting.languageCode });
- errorMessageDict.Add("mobile_is_empty", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "email_is_empty", EnviromentSetting.languageCode });
- errorMessageDict.Add("email_is_empty", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "email_format_wrong", EnviromentSetting.languageCode });
- errorMessageDict.Add("email_format_wrong", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "error_msg", "duplicated_email", EnviromentSetting.languageCode });
- errorMessageDict.Add("duplicated_email", textValue);
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "logout", EnviromentSetting.languageCode });
- logout.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "delete_account", EnviromentSetting.languageCode });
- deleteAccount.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "button", "logout", EnviromentSetting.languageCode });
- logout.text = textValue;
- textValue = GameTool.GetValueAtPath(EnviromentSetting.languageData, new string[] { "registerUI", "alert_message", "delete_account", EnviromentSetting.languageCode });
- deleteAlertMsg = textValue;
- }
- // 清空TextField 内容
- void UserInfoLoad()
- {
- userName.value = UserProperty.name;
- //password.value = string.Empty;
- mobile.value = UserProperty.mobile;
- email.value = UserProperty.email;
- errorMsgLabel.text = string.Empty;
- }
- void LogoutClick()
- {
- PlayerPrefs.DeleteAll();
- SceneManager.LoadScene("Login");
- }
- #region 格式检测
- // POST之前的输入内容检测
- private bool ContentCheckBeforePost()
- {
- errorText = string.Empty; // 清空
- if (string.IsNullOrWhiteSpace(userName.value))
- {
- errorText += errorMessageDict["user_name_is_empty"];
- errorText += "<br>";
- }
- if (password.value.Length < 8)
- {
- errorText += errorMessageDict["password_too_short"];
- errorText += "<br>";
- }
- if (EnviromentSetting.languageCode == "zh-cn") // 中文检测内容
- {
- if (string.IsNullOrWhiteSpace(mobile.value))
- {
- errorText += errorMessageDict["mobile_is_empty"];
- errorText += "<br>";
- }
- }
- else // 非中文检测内容
- {
- if (string.IsNullOrWhiteSpace(email.value))
- {
- errorText += errorMessageDict["email_is_empty"];
- errorText += "<br>";
- }
- else if (!IsValidEmail(email.value))
- {
- errorText += errorMessageDict["email_format_wrong"];
- errorText += "<br>";
- }
- }
- if (string.IsNullOrWhiteSpace(errorText))
- {
- return true;
- }
- else
- {
- errorMsgLabel.text = errorText;
- return false;
- }
- }
- // email 格式检测
- private bool IsValidEmail(string email)
- {
- try
- {
- var addr = new MailAddress(email);
- return addr.Address == email;
- }
- catch
- {
- return false;
- }
- }
- #endregion
- }
|