#if __Android__
|
|
using System;
|
using HDL_ON.UI.CSS;
|
using Shared;
|
using HDL_ON.DAL.Server;
|
using System.Collections.Generic;
|
using Com.Hdl.Hdllinphonesdk.Utils;
|
using Com.Hdl.Hdllinphonesdk.Dialog;
|
|
namespace HDL_ON.UI.UI2.PersonalCenter.Visitor
|
{
|
public class VisitorQRCodePage : FrameLayout
|
{
|
FrameLayout bodyView;
|
VerticalScrolViewLayout bodyScrolView;
|
private EditText phoneNumberEditText;// 电话号码EditText
|
private EditText pwdEditText;// 密码EditText
|
private Button randomBtn;//随机密码Btn
|
private FrameLayout codeLayout;
|
private ImageView codeIV;// 二维码
|
private Button codeSaveTipBtn;
|
private Button codeTip;//二维码有效期提示
|
private Button visitorVoucherBtn;
|
private VisitorTempPassword tempPassword;
|
|
Action backAction;// 后退按键,刷新UI
|
|
public VisitorQRCodePage()
|
{
|
bodyView = this;
|
}
|
|
public VisitorQRCodePage(Action action,VisitorTempPassword pwd)
|
{
|
bodyView = this;
|
this.tempPassword = pwd;
|
backAction = action;
|
}
|
|
public override void RemoveFromParent()
|
{
|
this.tempPassword = null;
|
backAction?.Invoke();
|
base.RemoveFromParent();
|
}
|
|
public void LoadPage()
|
{
|
#region 顶部导航栏
|
if (tempPassword == null || tempPassword.id == null)
|
{
|
tempPassword = new VisitorTempPassword();
|
|
Action click = () =>
|
{
|
Action action = () =>
|
{
|
LoadPage();
|
};
|
VisitorHistoryPage page = new VisitorHistoryPage(action);
|
MainPage.BasePageView.AddChidren(page);
|
page.LoadPage();
|
MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
|
};
|
|
bodyView.BackgroundColor = CSS_Color.BackgroundColor;
|
new TopViewDiv(bodyView, Language.StringByID(StringId.VisitorInvitation))
|
.LoadTopView_SettingText(click, Language.StringByID(StringId.VisitorRecord));
|
}
|
else
|
{
|
bodyView.BackgroundColor = CSS_Color.BackgroundColor;
|
new TopViewDiv(bodyView, Language.StringByID(StringId.VisitorInvitation)).LoadTopView();
|
}
|
#endregion
|
|
bodyScrolView = new VerticalScrolViewLayout()
|
{
|
Y = Application.GetRealHeight(64),
|
VerticalScrollBarEnabled = false,
|
BackgroundColor = CSS_Color.MainBackgroundColor,
|
};
|
bodyView.AddChidren(bodyScrolView);
|
|
// 提示文字
|
bodyScrolView.AddChidren(new Button()
|
{
|
Text = Language.StringByID(StringId.VisitorTip),
|
IsMoreLines = true,
|
TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
|
TextColor = CSS_Color.PromptingColor1,
|
TextAlignment = TextAlignment.Center,
|
Padding = new Padding(0, Application.GetRealWidth(20), 0, Application.GetRealWidth(20)),
|
Height = Application.GetRealHeight(60),
|
});
|
|
#region 手机号
|
bodyScrolView.AddChidren(new Button()
|
{
|
Text = Language.StringByID(StringId.PhoneNumber),
|
Y = Application.GetRealWidth(10),
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
Height = Application.GetRealHeight(20),
|
Padding = new Padding(0, Application.GetRealWidth(20), 0, Application.GetRealWidth(20)),
|
TextAlignment = TextAlignment.CenterLeft,
|
});
|
|
phoneNumberEditText = new EditText()
|
{
|
Height = Application.GetRealHeight(45),
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(335),
|
TextSize = CSS_FontSize.TextFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
|
PlaceholderText = Language.StringByID(StringId.InputPhoneNumberOfTheVisitor),
|
Text = tempPassword.phone,
|
IsNumberKeyboardType = true,
|
PlaceholderTextColor = CSS_Color.PromptingColor1,
|
};
|
bodyScrolView.AddChidren(phoneNumberEditText);
|
//phoneNumberEditText.Foucs = true;
|
|
// 分割线
|
bodyScrolView.AddChidren(new Button()
|
{
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(335),
|
Height = Application.GetRealHeight(1),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
});
|
#endregion
|
|
#region 动态密码
|
bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(10), });
|
bodyScrolView.AddChidren(new Button()
|
{
|
Text = Language.StringByID(StringId.linshimima),
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
Height = Application.GetRealHeight(20),
|
Padding = new Padding(0, Application.GetRealWidth(20), 0, Application.GetRealWidth(20)),
|
TextAlignment = TextAlignment.CenterLeft,
|
});
|
|
FrameLayout pwdLayout = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(40),
|
};
|
|
// 密码输入框
|
pwdEditText = new EditText()
|
{
|
X = Application.GetRealWidth(20),
|
TextSize = CSS_FontSize.TextFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
Width = Application.GetRealWidth(335),
|
PlaceholderText = Language.StringByID(StringId.Input6_DigitsTemporaryPassword),
|
IsNumberKeyboardType = true,
|
PlaceholderTextColor = CSS_Color.PromptingColor1,
|
};
|
pwdLayout.AddChidren(pwdEditText);
|
|
//随机密码Btn
|
randomBtn = new Button()
|
{
|
X = Application.GetRealWidth(275),
|
Width = Application.GetRealWidth(80),
|
Text = Language.StringByID(StringId.RandomGeneration),
|
TextAlignment = TextAlignment.CenterRight,
|
TextColor = CSS_Color.MainColor,
|
TextSize = CSS_FontSize.TextFontSize,
|
};
|
pwdLayout.AddChidren(randomBtn);
|
bodyScrolView.AddChidren(pwdLayout);
|
|
// 分割线
|
bodyScrolView.AddChidren(new Button()
|
{
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(335),
|
Height = Application.GetRealHeight(1),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
});
|
#endregion
|
|
#region 二维码生效时间
|
FrameLayout startLayout = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(40),
|
Y = Application.GetRealWidth(10),
|
};
|
|
startLayout.AddChidren(new Button()
|
{
|
Text = Language.StringByID(StringId.EffectiveTime),
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(130),
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextAlignment = TextAlignment.CenterLeft,
|
Enable = false,
|
});
|
Button startTimeText = new Button()
|
{
|
X = Application.GetRealWidth(159),
|
Width = Application.GetRealWidth(150),
|
TextAlignment = TextAlignment.CenterRight,
|
TextSize = CSS_FontSize.TextFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
};
|
if (tempPassword.tempPwd == null || tempPassword.tempPwd == "")
|
{
|
startTimeText.Text = "";// System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
}
|
else
|
{
|
startTimeText.Text = tempPassword.validBeginTime;
|
}
|
|
startLayout.AddChidren(startTimeText);
|
startLayout.AddChidren(new Button()
|
{
|
X = Application.GetRealWidth(339),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(16),
|
Height = Application.GetMinRealAverage(16),
|
UnSelectedImagePath = "Public/Right.png",
|
Enable = false,
|
});
|
Button startTimeBtn = new Button();
|
startLayout.AddChidren(startTimeBtn);
|
// dialog回调
|
Action<string> startTimeAction = (str) =>
|
{
|
startTimeText.Text = str + ":00";
|
};
|
startTimeBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
try
|
{
|
new LpTimeDialog(Application.Activity, new LpTimeDialogCallBak(startTimeAction)).Show();
|
}
|
catch (Exception ex)
|
{
|
string error = ex.Message;
|
}
|
};
|
bodyScrolView.AddChidren(startLayout);
|
// 分割线
|
bodyScrolView.AddChidren(new Button()
|
{
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(335),
|
Height = Application.GetRealHeight(1),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
});
|
|
#endregion
|
|
#region 二维码失效时间
|
FrameLayout endLayout = new FrameLayout()
|
{
|
Height = Application.GetRealHeight(40),
|
Y = Application.GetRealWidth(10),
|
};
|
|
endLayout.AddChidren(new Button()
|
{
|
Text = Language.StringByID(StringId.FailureTime),
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(130),
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
TextAlignment = TextAlignment.CenterLeft,
|
Enable = false,
|
});
|
Button endTimeText = new Button()
|
{
|
X = Application.GetRealWidth(159),
|
Width = Application.GetRealWidth(150),
|
TextAlignment = TextAlignment.CenterRight,
|
TextSize = CSS_FontSize.TextFontSize,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
Enable = false,
|
};
|
if (tempPassword.tempPwd == null || tempPassword.tempPwd == "")
|
{
|
endTimeText.Text = "";// System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
}
|
else
|
{
|
endTimeText.Text = tempPassword.validEndTime;
|
}
|
endLayout.AddChidren(endTimeText);
|
endLayout.AddChidren(new Button()
|
{
|
X = Application.GetRealWidth(339),
|
Gravity = Gravity.CenterVertical,
|
Width = Application.GetMinRealAverage(16),
|
Height = Application.GetMinRealAverage(16),
|
UnSelectedImagePath = "Public/Right.png",
|
Enable = false,
|
});
|
Button endTimeBtn = new Button();
|
endLayout.AddChidren(endTimeBtn);
|
bodyScrolView.AddChidren(endLayout);
|
// 分割线
|
bodyScrolView.AddChidren(new Button()
|
{
|
X = Application.GetRealWidth(20),
|
Width = Application.GetRealWidth(335),
|
Height = Application.GetRealHeight(1),
|
BackgroundColor = CSS_Color.DividingLineColor,
|
});
|
// dialog回调
|
Action<string> endTimeAction = (str) =>
|
{
|
endTimeText.Text = str + ":00";
|
};
|
endTimeBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
try
|
{
|
new LpTimeDialog(Application.Activity, new LpTimeDialogCallBak(endTimeAction)).Show();
|
}
|
catch (Exception ex)
|
{
|
string error = ex.Message;
|
}
|
};
|
#endregion
|
|
#region 二维码
|
bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(33), });
|
codeLayout = new FrameLayout()
|
{
|
X = Application.GetRealWidth(117),
|
Width = Application.GetRealWidth(142),
|
Height = Application.GetRealWidth(142),
|
};
|
bodyScrolView.AddChidren(codeLayout);
|
|
// 二维码ImagView
|
codeIV = new ImageView()
|
{
|
BackgroundColor = CSS_Color.BackgroundColor,
|
};
|
codeLayout.AddChidren(codeIV);
|
|
bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(20), });
|
codeSaveTipBtn = new Button()
|
{
|
X = Application.GetRealWidth(16),
|
Width = Application.GetRealWidth(343),
|
Height = Application.GetRealWidth(20),
|
Text = Language.StringByID(StringId.LongPressQRCodeSave),
|
TextAlignment = TextAlignment.Center,
|
TextColor = CSS_Color.FirstLevelTitleColor,
|
Visible = false,
|
};
|
bodyScrolView.AddChidren(codeSaveTipBtn);
|
#endregion
|
|
bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(28), });
|
visitorVoucherBtn = new Button()
|
{
|
X = Application.GetRealWidth(78),
|
Width = Application.GetRealWidth(220),
|
Height = Application.GetRealWidth(44),
|
BackgroundColor = CSS_Color.MainColor,
|
Radius = (uint)Application.GetRealWidth(44),
|
TextSize = CSS_FontSize.SubheadingFontSize,
|
TextAlignment = TextAlignment.Center,
|
TextColor = CSS_Color.textWhiteColor,
|
};
|
bodyScrolView.AddChidren(visitorVoucherBtn);
|
|
Action voucher_action = () =>
|
{
|
if (codeIV.ImageBytes == null)
|
{
|
// 请求服务端,生成临时密码
|
tempPassword.homeId = Entity.DB_ResidenceData.Instance.CurrentRegion.id;
|
tempPassword.phone = phoneNumberEditText.Text;
|
tempPassword.tempPwd = pwdEditText.Text;
|
tempPassword.validBeginTime = startTimeText.Text;
|
tempPassword.validEndTime = endTimeText.Text;
|
tempPassword.useCount = 1000;
|
CreateVisitorPassword(tempPassword);
|
}
|
else
|
{
|
// 删除访客临时密码
|
DelVisitorPassword(tempPassword);
|
}
|
};
|
visitorVoucherBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
if (startTimeText.Text.Trim() == "")
|
{
|
var tip_dialog = new Tip()
|
{
|
Text = Language.StringByID(StringId.VisitorStartTime),
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
return;
|
}
|
|
if (endTimeText.Text.Trim() == "")
|
{
|
var tip_dialog = new Tip()
|
{
|
Text = Language.StringByID(StringId.VisitorEndTime),
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
return;
|
}
|
|
if (phoneNumberEditText.Text.Trim() == "" || phoneNumberEditText.Text.Trim().Length != 11)
|
{
|
var tip_dialog = new Tip()
|
{
|
Text = Language.StringByID(StringId.PhoneNumberErrorTip),
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
phoneNumberEditText.Foucs = true;
|
return;
|
}
|
|
if (pwdEditText.Text.Trim() == "" || pwdEditText.Text.Trim().Length != 6)
|
{
|
var tip_dialog = new Tip()
|
{
|
Text = Language.StringByID(StringId.Input6_DigitsTemporaryPassword),
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
pwdEditText.Foucs = true;
|
return;
|
}
|
|
string tip = "";
|
string message = "";
|
if (codeIV.ImageBytes == null)
|
{
|
tip = Language.StringByID(StringId.tip);
|
message = Language.StringByID(StringId.VisitorTipContent);
|
}
|
else
|
{
|
tip = Language.StringByID(StringId.tip);
|
message = Language.StringByID(StringId.VisitorDelTipContent);
|
}
|
new LpTipDialog(Application.Activity, tip, message, new LpTipDialogCallBack(voucher_action)).Show();
|
};
|
|
//将二维码保存到本地相册
|
codeIV.MouseLongEventHandler += (sender, e) =>
|
{
|
#if __Android__
|
bool bol = HDLImageUtils.SaveImageToGallery(Application.Activity,
|
Scan.BytesFromText(tempPassword.tempPwd, codeIV.Width, codeIV.Height));
|
|
string msg = "";
|
if (bol)
|
{
|
msg = Language.StringByID(StringId.SavedSuccessfully);
|
}
|
else
|
{
|
msg = Language.StringByID(StringId.saveFail);
|
}
|
|
var tip_dialog = new Tip()
|
{
|
Text = msg,
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
#endif
|
};
|
|
if (tempPassword != null && tempPassword.id != null && tempPassword.id != "")
|
{
|
pwdEditText.Text = tempPassword.tempPwd;
|
pwdEditText.PlaceholderText = Language.StringByID(StringId.TemporaryPasswordInvalid);
|
pwdEditText.Enable = false;
|
phoneNumberEditText.Enable = false;
|
randomBtn.Visible = false;
|
startTimeBtn.Enable = false;
|
endTimeBtn.Enable = false;
|
}
|
else
|
{
|
pwdEditText.FoucsChanged = (sender, e) =>
|
{
|
if (!pwdEditText.Foucs)
|
{
|
// 6位密码验证
|
var tip_dialog = new Tip()
|
{
|
Text = Language.StringByID(StringId.Input6_DigitsTemporaryPassword),
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
}
|
};
|
|
randomBtn.MouseUpEventHandler += (sender, e) =>
|
{
|
string tPwd = getRandomPwd();
|
pwdEditText.Text = tPwd;
|
};
|
|
phoneNumberEditText.FoucsChanged = (sender, e) =>
|
{
|
if (!phoneNumberEditText.Foucs)
|
{
|
//手机号码错误提示
|
if (!Utlis.CheckPhoneNumber(phoneNumberEditText.Text.Trim(), "86"))
|
{
|
var tip_dialog = new Tip()
|
{
|
Text = Language.StringByID(StringId.PhoneNumberErrorTip),
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
}
|
}
|
};
|
}
|
|
RefreshVisitorVoucherBtn();
|
}
|
|
/// <summary>
|
/// 刷新VisitorVoucherBtn状态
|
/// </summary>
|
private void RefreshVisitorVoucherBtn()
|
{
|
if (tempPassword == null) return;
|
|
if (tempPassword.tempPwd != null && tempPassword.tempPwd != "")
|
{
|
codeIV.ImageBytes = Scan.BytesFromText(tempPassword.tempPwd, codeIV.Width, codeIV.Height);
|
//判断二维码是否失效
|
DateTime endTime = DateTime.Parse(tempPassword.validEndTime);
|
DateTime currentTime = DateTime.Now;
|
if (currentTime > endTime || !tempPassword.status)
|
{
|
// 二维码有效期提示
|
codeTip = new Button()
|
{
|
TextAlignment = TextAlignment.Center,
|
TextColor = CSS_Color.textWhiteColor,
|
BackgroundColor = CSS_Color.DialogTransparentColor1,
|
Text = Language.StringByID(StringId.QRcodeIsInvalid),
|
};
|
codeLayout.AddChidren(codeTip);
|
visitorVoucherBtn.Visible = false;
|
}
|
visitorVoucherBtn.Text = Language.StringByID(StringId.CancleVisitorCredentials);
|
}
|
else
|
{
|
visitorVoucherBtn.Visible = true;
|
visitorVoucherBtn.Text = Language.StringByID(StringId.GenerateVisitorCredentials);
|
}
|
}
|
|
/// <summary>
|
/// 添加临时密码(访客凭证)
|
/// </summary>
|
/// <param name="homeId">住宅id</param>
|
/// <param name="phone">访客手机号</param>
|
/// <param name="tempPwd">临时密码</param>
|
/// <param name="validBeginTime">开始时间</param>
|
/// <param name="validEndTime">结束时间</param>
|
/// <param name="useCount">使用次数,默认一个数值大一些的</param>
|
/// <returns></returns>
|
private bool CreateVisitorPassword(VisitorTempPassword pwd)
|
{
|
var result = false;
|
Dictionary<string, object> dictionary = new Dictionary<string, object>();
|
dictionary.Add("homeId", pwd.homeId);
|
dictionary.Add("phone", pwd.phone);
|
dictionary.Add("tempPwd", pwd.tempPwd);
|
dictionary.Add("validBeginTime", pwd.validBeginTime);
|
dictionary.Add("validEndTime", pwd.validEndTime);
|
dictionary.Add("useCount", pwd.useCount);
|
|
var requestJson = HttpUtil.GetSignRequestJson(dictionary);
|
var pack = HttpUtil.RequestHttpsPost(NewAPI.API_POST_ADD_TEMP_PASSWORD, requestJson);
|
if (pack != null)
|
{
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
pwd.id = pack.Data.ToString();
|
codeIV.ImageBytes = Scan.BytesFromText(pwdEditText.Text, codeIV.Width, codeIV.Height);
|
codeSaveTipBtn.Visible = true;
|
RefreshVisitorVoucherBtn();
|
}
|
else {
|
var tip_dialog = new Tip()
|
{
|
Text = pack.message,
|
CloseTime = 2,
|
Direction = AMPopTipDirection.None
|
};
|
tip_dialog.Show(MainPage.BaseView);
|
}
|
}
|
return result;
|
}
|
|
/// <summary>
|
/// 删除临时密码(访客凭证)
|
/// </summary>
|
/// <param name="home_id">住宅id</param>
|
/// <param name="pwd_id">临时密码id</param>
|
private bool DelVisitorPassword(VisitorTempPassword pwd)
|
{
|
Dictionary<string, object> dictionary = new Dictionary<string, object>();
|
dictionary.Add("homeId", pwd.homeId);
|
dictionary.Add("id", pwd.id);
|
var result = false;
|
var requestJson = HttpUtil.GetSignRequestJson(dictionary);
|
var pack = HttpUtil.RequestHttpsPost(NewAPI.API_POST_DEL_TEMP_PASSWORD, requestJson);
|
if (pack != null)
|
{
|
if (pack.Code == StateCode.SUCCESS)
|
{
|
// 关闭当前界面
|
RemoveFromParent();
|
}
|
}
|
RefreshVisitorVoucherBtn();
|
return result;
|
}
|
|
/// <summary>
|
/// 生成6位随机密码
|
/// </summary>
|
/// <returns></returns>
|
private string getRandomPwd()
|
{
|
string pwd = "";
|
for (int i = 0; i < 6; i++)
|
{
|
int math = new Random().Next(0, 9);
|
pwd += math;
|
}
|
return pwd;
|
}
|
}
|
}
|
#else
|
using Shared;
|
|
namespace HDL_ON.UI.UI2.PersonalCenter.Visitor
|
{
|
public class VisitorQRCodePage : FrameLayout
|
{ }
|
}
|
#endif
|