using System;
|
using System.Collections.Generic;
|
using System.Text;
|
|
namespace Shared.Phone.UserCenter.Password
|
{
|
/// <summary>
|
/// 验证新手机的画面
|
/// </summary>
|
public class CheckNewPhoneForm : EditorCommonForm
|
{
|
#region ■ 变量声明___________________________
|
|
/// <summary>
|
/// 错误信息控件
|
/// </summary>
|
private NormalViewControl btnErrorMsg = null;
|
/// <summary>
|
/// 标记是否能够校验验证码了
|
/// </summary>
|
private bool canCheckCode = false;
|
/// <summary>
|
/// 新手机(防止恶意变更)
|
/// </summary>
|
private string newPhone = string.Empty;
|
|
#endregion
|
|
#region ■ 初始化_____________________________
|
|
/// <summary>
|
/// 画面显示(底层会固定调用此方法,借以完成画面创建)
|
/// </summary>
|
public void ShowForm()
|
{
|
//设置头部信息
|
base.SetTitleText(Language.StringByID(R.MyInternationalizationString.uEditorPhoneNumber));
|
|
//初始化中部信息
|
this.InitMiddleFrame();
|
}
|
|
/// <summary>
|
/// 初始化中部信息
|
/// </summary>
|
private void InitMiddleFrame()
|
{
|
//清空bodyFrame
|
this.ClearBodyFrame();
|
|
var frame = new FrameLayout();
|
frame.Y = Application.GetRealHeight(161);
|
frame.Gravity = Gravity.CenterHorizontal;
|
frame.Width = Application.GetRealWidth(688);
|
frame.Height = Application.GetRealHeight(127);
|
bodyFrameLayout.AddChidren(frame);
|
|
//地区码
|
var btnArea = new NormalViewControl(127, 58, true);
|
btnArea.Text = "+86";
|
btnArea.TextAlignment = TextAlignment.Center;
|
btnArea.TextColor = UserCenterColor.Current.TextGrayColor3;
|
btnArea.Gravity = Gravity.CenterVertical;
|
frame.AddChidren(btnArea);
|
//目前只针对+86
|
//btnArea.ButtonClickEvent += (sender, e) =>
|
//{
|
// var form = new AreaCodeSelectForm();
|
// form.AddForm();
|
// form.FinishSelectEvent += (code) =>
|
// {
|
// btnArea.Text = "+" + code;
|
// };
|
//};
|
|
//输入框
|
var txtValue = new TextInputControl(Application.GetRealWidth(510), frame.Height - ControlCommonResourse.BottomLineHeight, false);
|
txtValue.X = btnArea.Right + Application.GetRealWidth(35);
|
txtValue.PlaceholderText = Language.StringByID(R.MyInternationalizationString.uPleaseInputNewPhoneNumber);
|
frame.AddChidren(txtValue);
|
|
//线
|
var btnLine = new NormalViewControl(frame.Width, ControlCommonResourse.BottomLineHeight, false);
|
btnLine.Y = txtValue.Bottom;
|
btnLine.BackgroundColor = UserCenterColor.Current.ButtomLine;
|
frame.AddChidren(btnLine);
|
//联动线的状态
|
txtValue.btnLine = btnLine;
|
|
if (string.IsNullOrEmpty(UserCenterResourse.UserInfo.Phone) == false)
|
{
|
//确认身份成功,请绑定新手机号码
|
var btnMsg1 = new NormalViewControl(800, 49, false);
|
btnMsg1.X = Application.GetRealWidth(196);
|
btnMsg1.Y = frame.Bottom + Application.GetRealHeight(40);
|
btnMsg1.TextSize = 12;
|
btnMsg1.TextColor = UserCenterColor.Current.TextGrayColor1;
|
btnMsg1.TextID = R.MyInternationalizationString.uAuthenticationSuccessAndBindNewPhone;
|
bodyFrameLayout.AddChidren(btnMsg1);
|
}
|
|
//初始化验证码控件
|
var btnCodeControl = new VerificationCodeControl(6);
|
btnCodeControl.Y = Application.GetRealHeight(475);
|
bodyFrameLayout.AddChidren(btnCodeControl);
|
btnCodeControl.InitControl();
|
btnCodeControl.TxtCodeChangeEvent += (sender, e) =>
|
{
|
if (btnErrorMsg.Visible == true)
|
{
|
btnErrorMsg.Visible = false;
|
}
|
};
|
btnCodeControl.FinishInputEvent += (value) =>
|
{
|
//校验验证码
|
this.CheckVerificationCode(value);
|
};
|
|
//验证码错误,请重新输入
|
this.btnErrorMsg = new NormalViewControl(bodyFrameLayout.Width, Application.GetRealHeight(58), false);
|
btnErrorMsg.Y = Application.GetRealHeight(677);
|
btnErrorMsg.TextAlignment = TextAlignment.Center;
|
btnErrorMsg.TextColor = 0xfff75858;
|
btnErrorMsg.IsBold = true;
|
btnErrorMsg.TextID = R.MyInternationalizationString.uVerificationCodeErrorInputAgain;
|
bodyFrameLayout.AddChidren(btnErrorMsg);
|
btnErrorMsg.Visible = false;
|
|
var btnOk = new BottomClickButton(688);
|
btnOk.Y = Application.GetRealHeight(792);
|
btnOk.TextID = R.MyInternationalizationString.uGetVerificationCode;
|
bodyFrameLayout.AddChidren(btnOk);
|
btnOk.oldBackgroundColor = UserCenterColor.Current.ClickButtonDefultColor;
|
btnOk.CanClick = false;
|
btnOk.ButtonClickEvent += (sender, e) =>
|
{
|
//清空输入的值
|
btnCodeControl.ClearInputValue();
|
|
this.btnErrorMsg.Visible = false;
|
string areaCode = btnArea.Text.Substring(1);
|
//检测手机号码
|
if (this.CheckPhoneNumber(areaCode, txtValue.Text.Trim()) == false)
|
{
|
return;
|
}
|
//发送验证码到手机
|
this.SendCodeToPhone(btnOk, areaCode, txtValue.Text.Trim());
|
};
|
|
txtValue.TextChangeEventHandler += (sender, value) =>
|
{
|
if (value == string.Empty)
|
{
|
//按键不可用
|
btnOk.CanClick = false;
|
}
|
else if (btnOk.CanClick == false)
|
{
|
//按键可用
|
btnOk.CanClick = true;
|
}
|
};
|
}
|
|
#endregion
|
|
#region ■ 发送验证码到手机___________________
|
|
/// <summary>
|
/// 发送验证码到手机
|
/// </summary>
|
private void SendCodeToPhone(BottomClickButton btnNext,string areaCode, string phoneNum)
|
{
|
var sendCodePra = new SendCodePra();
|
sendCodePra.Account = phoneNum;
|
sendCodePra.AreaCode = Convert.ToInt32(areaCode);
|
|
bool flage = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/RegisterSendVerCode", false, sendCodePra);
|
if (flage == false)
|
{
|
return;
|
}
|
|
//可以开始校验验证码了
|
this.canCheckCode = true;
|
//记录起这个手机,防止恶意变更
|
this.newPhone = phoneNum;
|
//控件不能再次按下
|
btnNext.CanClick = false;
|
//?s后重发
|
string repeat = Language.StringByID(R.MyInternationalizationString.RepeatSend1);
|
//有效时间60秒
|
int waitime = 60;
|
btnNext.Text = waitime + "s" + repeat;
|
|
HdlThreadLogic.Current.RunThread(() =>
|
{
|
while (this.Parent != null)
|
{
|
waitime--;
|
System.Threading.Thread.Sleep(1000);
|
if (waitime == 0)
|
{
|
Application.RunOnMainThread(() =>
|
{
|
if (btnNext != null)
|
{
|
//获取验证码
|
btnNext.TextID = R.MyInternationalizationString.uGetVerificationCode;
|
//按键可以按下
|
btnNext.CanClick = true;
|
}
|
});
|
break;
|
}
|
Application.RunOnMainThread(() =>
|
{
|
if (btnNext != null)
|
{
|
btnNext.Text = waitime + "s" + repeat;
|
}
|
});
|
}
|
});
|
}
|
|
#endregion
|
|
#region ■ 校验验证码_________________________
|
|
/// <summary>
|
/// 验证验证码
|
/// </summary>
|
/// <returns></returns>
|
private void CheckVerificationCode(string code)
|
{
|
if (this.canCheckCode == false)
|
{
|
//验证码错误,请重新输入
|
this.btnErrorMsg.Visible = true;
|
this.btnErrorMsg.TextID = R.MyInternationalizationString.uVerificationCodeErrorInputAgain;
|
return;
|
}
|
var checkCodePra = new CheckCodePra();
|
checkCodePra.Code = code;
|
checkCodePra.Account = newPhone;
|
|
bool flage = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/ValidatorCode", false, checkCodePra);
|
if (flage == false)
|
{
|
//验证码错误,请重新输入
|
this.btnErrorMsg.Visible = true;
|
this.btnErrorMsg.TextID = R.MyInternationalizationString.uVerificationCodeErrorInputAgain;
|
return;
|
}
|
|
//变更手机号
|
this.SaveNewPhoneNumber();
|
}
|
|
/// <summary>
|
/// 变更手机号
|
/// </summary>
|
private void SaveNewPhoneNumber()
|
{
|
var pra = new SaveNewPhoneNumPra();
|
pra.Account = newPhone;
|
|
bool flage = UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/BindAccount", false, pra);
|
if (flage == false)
|
{
|
//绑定手机失败
|
this.ShowMassage(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.uBindPhoneFail));
|
return;
|
}
|
|
//成功绑定新手机号
|
string msg = Language.StringByID(R.MyInternationalizationString.uBindPhoneNumberSuccess);
|
this.ShowMassage(ShowMsgType.Normal, msg, () =>
|
{
|
//刷新个人信息画面
|
this.RefreshUserInfoForm();
|
});
|
}
|
|
/// <summary>
|
/// 刷新个人信息画面
|
/// </summary>
|
private void RefreshUserInfoForm()
|
{
|
//如果修改的是账号的话,则重新登录
|
if (UserCenterResourse.UserInfo.Phone == Shared.Common.Config.Instance.Account)
|
{
|
UserCenterLogic.ReLoginAgain(newPhone);
|
return;
|
}
|
UserCenterResourse.UserInfo.Phone = newPhone;
|
this.CloseForm();
|
}
|
|
#endregion
|
|
#region ■ 一般方法___________________________
|
|
/// <summary>
|
/// 检测手机号
|
/// </summary>
|
private bool CheckPhoneNumber(string areaCode, string phoneNum)
|
{
|
//输入为空
|
if (phoneNum == string.Empty)
|
{
|
//请输入新手机号码
|
this.btnErrorMsg.Visible = true;
|
this.btnErrorMsg.TextID = R.MyInternationalizationString.uPleaseInputNewPhoneNumber;
|
return false;
|
}
|
|
//检测手机号格式
|
if (HdlCheckLogic.Current.CheckPhoneNumber(phoneNum, areaCode) == false)
|
{
|
//这不是一个有效的手机号
|
this.btnErrorMsg.Visible = true;
|
this.btnErrorMsg.TextID = R.MyInternationalizationString.uThisIsNotPhoneNumberType;
|
return false;
|
}
|
return true;
|
}
|
|
#endregion
|
|
#region ■ 结构体_____________________________
|
|
/// <summary>
|
/// 发送验证码的启动参数
|
/// </summary>
|
private class SendCodePra
|
{
|
/// <summary>
|
/// 用户账号
|
/// </summary>
|
public string Account = string.Empty;
|
/// <summary>
|
/// 公司编号,国内使用手机短信验证码时,此字段填入0,国外手机短信验证码,此字段填入4
|
/// </summary>
|
public int Company = Common.CommonPage.PhoneZoneStr == "86" ? 0 : 4;
|
/// <summary>
|
/// 语言
|
/// </summary>
|
public string Language = Shared.Language.CurrentLanguage;
|
/// <summary>
|
/// 国家地区代码,手机号发送验证码时使用
|
/// </summary>
|
public int AreaCode = 0;
|
}
|
|
/// <summary>
|
/// 发送验证码的启动参数
|
/// </summary>
|
private class CheckCodePra
|
{
|
/// <summary>
|
/// 用户账号
|
/// </summary>
|
public string Account = string.Empty;
|
/// <summary>
|
/// 验证码
|
/// </summary>
|
public string Code = "0";
|
/// <summary>
|
/// 语言
|
/// </summary>
|
public string Language = Shared.Language.CurrentLanguage;
|
/// <summary>
|
/// 国家地区代码,手机号发送验证码时使用
|
/// </summary>
|
public int AreaCode = 0;
|
}
|
|
/// <summary>
|
/// 保存新手机号的启动参数
|
/// </summary>
|
private class SaveNewPhoneNumPra
|
{
|
/// <summary>
|
/// 新用户账号
|
/// </summary>
|
public string Account = string.Empty;
|
}
|
|
#endregion
|
}
|
}
|