using System; using Shared; using HDL_ON.Entity; using HDL_ON.UI.CSS; using System.Collections.Generic; using System.Threading; using HDL_ON.DAL.Server; namespace HDL_ON.UI { /// /// 成员管理 成员列表页面 /// public partial class MemberManagementPage : FrameLayout { MemberManagementPage bodyView; Loading waitPage; VerticalScrolViewLayout contentView; List residenceMemberInfos; Action action; public MemberManagementPage() { bodyView = this; residenceMemberInfos = new List(); } public void LoadPage() { bodyView.BackgroundColor = CSS_Color.BackgroundColor; //创建读取成员账号线程 var thread = LoadThread_GetResidenceMemberAccount(); waitPage = new Loading(); new PublicAssmebly().LoadPage_WaitPage(thread, bodyView, waitPage); Action backAction = () => { }; Action backAction_AddMember = () => { LoadThread_GetResidenceMemberAccount().Start(); }; Action refreshAction = () => { var mmp = new AddMemberScanPage(backAction_AddMember); MainPage.BasePageView.AddChidren(mmp); mmp.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; new TopViewDiv(bodyView, Language.StringByID(StringId.MemberManagement)).LoadTopView_MemberTopView(refreshAction, backAction); contentView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64), Height = Application.GetRealHeight(590), }; bodyView.AddChidren(contentView); LoadMemberRow(); } /// /// 加载成员列表区域 /// void LoadMemberRow() { contentView.RemoveAll(); foreach (var memberInfo in residenceMemberInfos) { contentView.AddChidren(new Button() { Height = Application.GetRealWidth(12), }); var sView = new VerticalScrolViewLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), //Height = Application.GetRealWidth(230), Height = Application.GetRealWidth(180), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), BorderColor = 0x00000000, BorderWidth = 0, ScrollEnabled = false, VerticalScrollBarEnabled = false,//隐藏滚动条 }; if (Entity.DB_ResidenceData.Instance.SupportFacePass) { sView.Height = Application.GetRealWidth(180 + 50); } contentView.AddChidren(sView); #region 头像信息 var view1 = new FrameLayout() { Height = Application.GetRealWidth(79), }; sView.AddChidren(view1); var userTypeView = new FrameLayout() { Width = Application.GetRealWidth(122), Height = Application.GetRealHeight(58), X = Application.GetRealWidth(270), Y = Application.GetRealHeight(16), BackgroundImagePath = "PersonalCenter/UserTypebg.png", }; view1.AddChidren(userTypeView); var btnUserTypeName = new Button() { X = Application.GetRealWidth(28), Width = Application.GetRealWidth(80), Height = Application.GetRealHeight(17 * 3), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.MainBackgroundColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextID = StringId.Member }; userTypeView.AddChidren(btnUserTypeName); if (Language.CurrentLanguage == "English") { userTypeView.X = Application.GetRealWidth(260); } var memberHeadImageView = new ImageView() { X = Application.GetRealWidth(16), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(48), Height = Application.GetMinRealAverage(48), Radius = (uint)Application.GetMinRealAverage(24), ImagePath = memberInfo.headImagePagePath, }; view1.AddChidren(memberHeadImageView); var btnMemberName = new Button() { X = Application.GetRealWidth(88), Y = Application.GetRealWidth(20), Width = Application.GetRealWidth(200), Height = Application.GetRealWidth(24), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, IsBold = true, //Text = memberInfo.UserName, Text = HDLCommon.Current.GetUserName(memberInfo.memberName) }; view1.AddChidren(btnMemberName); var btnMemberEmail = new Button() { X = Application.GetRealWidth(88), Y = btnMemberName.Bottom, Width = Application.GetRealWidth(200), Height = Application.GetRealWidth(17), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.TextualColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = memberInfo.Account, }; view1.AddChidren(btnMemberEmail); sView.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealWidth(1), Width = Application.GetRealWidth(311), BackgroundColor = CSS_Color.DividingLineColor, }); #endregion #region 昵称信息 var view2 = new FrameLayout() { Height = Application.GetRealWidth(49), }; sView.AddChidren(view2); var btnNicknameTitle = new Button() { X = Application.GetRealWidth(16), Width = Application.GetRealWidth(200), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.Nickname, }; view2.AddChidren(btnNicknameTitle); var btnNickname = new Button() { Width = Application.GetRealWidth(295), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.PromptingColor1, TextSize = CSS_FontSize.TextFontSize, Text = memberInfo.nickName }; view2.AddChidren(btnNickname); var btnNicknameRight = new Button() { X = Application.GetRealWidth(311), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; view2.AddChidren(btnNicknameRight); sView.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealWidth(1), Width = Application.GetRealWidth(311), BackgroundColor = CSS_Color.DividingLineColor, }); LoadView_EidtNickname(btnNickname, btnNicknameRight, memberInfo); #endregion #region 使用权限 var view3 = new FrameLayout() { Height = Application.GetRealWidth(49), }; sView.AddChidren(view3); var btnPermissionTitle = new Button() { X = Application.GetRealWidth(16), Width = Application.GetRealWidth(330), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.PermissionToUse, }; view3.AddChidren(btnPermissionTitle); var btnPermissionRight = new Button() { X = Application.GetRealWidth(311), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; view3.AddChidren(btnPermissionRight); sView.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealWidth(1), Width = Application.GetRealWidth(311), BackgroundColor = CSS_Color.DividingLineColor, }); EventHandler eHandler = (sender, e) => { action = () => { residenceMemberInfos.Remove(memberInfo); LoadMemberRow(); }; var mmp = new MemberPermissionPage(memberInfo, action); MainPage.BasePageView.AddChidren(mmp); mmp.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; view3.MouseUpEventHandler = eHandler; btnPermissionTitle.MouseUpEventHandler = eHandler; btnPermissionRight.MouseUpEventHandler = eHandler; #endregion #region 人脸管理 if (Entity.DB_ResidenceData.Instance.SupportFacePass) { var view4 = new FrameLayout() { Height = Application.GetRealWidth(49), }; sView.AddChidren(view4); var btnFaceManagementTitle = new Button() { X = Application.GetRealWidth(16), Width = Application.GetRealWidth(330), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.FirstLevelTitleColor, TextSize = CSS_FontSize.TextFontSize, TextID = StringId.FaceManagemant, }; view4.AddChidren(btnFaceManagementTitle); var btnFaceManagementRight = new Button() { X = Application.GetRealWidth(311), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", }; view4.AddChidren(btnFaceManagementRight); //sView.AddChidren(new Button() //{ // Gravity = Gravity.CenterHorizontal, // Height = Application.GetRealWidth(1), // Width = Application.GetRealWidth(311), // BackgroundColor = CSS_Color.DividingLineColor, //}); EventHandler eFaceHandler = (sender, e) => { if (OnAppConfig.Instance.FaceManagementTip) { LoadPictureOptionView(); return; } Dialog dialog = new Dialog() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; FrameLayout contentView = new FrameLayout() { Gravity = Gravity.Center, Width = Application.GetRealWidth(270), Height = Application.GetRealHeight(192), BackgroundColor = CSS.CSS_Color.MainBackgroundColor, BorderColor = 0x00000000, BorderWidth = 0, Radius = (uint)Application.GetMinRealAverage(10), }; dialog.AddChidren(contentView); Button btnTitle = new Button() { Y = Application.GetRealHeight(16), Height = Application.GetRealHeight(30), TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextAlignment = TextAlignment.Center, IsBold = true, TextID = StringId.FaceProtocolPrompt, }; contentView.AddChidren(btnTitle); Button btnMsg = new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealHeight(35), Y = btnTitle.Bottom, Width = Application.GetRealHeight(200), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.TextualColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = " 为保护您的个人隐私权益,特向您通知并申请明确同意授权。请你仔细阅读", IsMoreLines = true, }; contentView.AddChidren(btnMsg); Button btnMsg1 = new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealHeight(15), Y = btnMsg.Bottom, Width = Application.GetRealHeight(200), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = " 《On Pro人脸信息采集协议》", IsMoreLines = true, }; contentView.AddChidren(btnMsg1); Button btnMsg2 = new Button() { Gravity = Gravity.CenterHorizontal, Height = Application.GetRealHeight(35), Y = btnMsg1.Bottom, Width = Application.GetRealHeight(200), TextAlignment = TextAlignment.CenterLeft, TextColor = CSS_Color.TextualColor, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, Text = " 若同意该协议,请点击【同意】按键,表示您已经理解并同意人脸信息采集协议。", IsMoreLines = true, }; contentView.AddChidren(btnMsg2); Button btnLine = new Button() { Y = Application.GetRealHeight(149), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(270 / 2), BackgroundColor = CSS.CSS_Color.DividingLineColor, }; contentView.AddChidren(btnLine); Button btnCancel = new Button() { Y = btnLine.Bottom, Width = Application.GetRealWidth(135), Height = Application.GetRealHeight(43), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, TextSize = CSS_FontSize.SubheadingFontSize, //SelectedTextColor = CSS_Color.MainBackgroundColor, //SelectedBackgroundColor = CSS_Color.MainColor, TextID = StringId.Disagree, }; contentView.AddChidren(btnCancel); Button btnConfirm = new Button() { X = btnCancel.Right, Y = btnLine.Y, Width = Application.GetRealWidth(135), Height = Application.GetRealHeight(45), TextAlignment = TextAlignment.Center, //TextColor = CSS_Color.TextualColor, TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.MainBackgroundColor, BackgroundColor = CSS_Color.MainColor, TextID = StringId.Agree, }; contentView.AddChidren(btnConfirm); //例:右下圆角 大小为50 int mRectCornerID = HDLUtils.RectCornerBottomRight; btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), mRectCornerID); dialog.Show(); btnCancel.MouseUpEventHandler += (sender, e) => { dialog.Close(); }; btnMsg1.MouseUpEventHandler += (sender, e) => { string url = "https://developer.hdlcontrol.com/人脸信息采集协议.html"; if (Language.CurrentLanguage != "Chinese") { url = "https://developer.hdlcontrol.com/Face information collection protocol.html"; } new WebViewDialog().LoadPage("人脸信息采集协议", url); dialog.Close(); }; btnConfirm.MouseUpEventHandler = (sender, e) => { dialog.Close(); OnAppConfig.Instance.FaceManagementTip = true; OnAppConfig.Instance.SaveConfig(); LoadPictureOptionView(); }; }; view4.MouseUpEventHandler = eHandler; btnFaceManagementTitle.MouseUpEventHandler = eFaceHandler; btnFaceManagementRight.MouseUpEventHandler = eFaceHandler; } #endregion //#region 创建场景 2020-12-23 隐藏创建场景按钮 //var view4 = new FrameLayout() //{ // Height = Application.GetRealWidth(50), //}; //sView.AddChidren(view4); //var btnCreateSceneTitle = new Button() //{ // X = Application.GetRealWidth(16), // Width = Application.GetRealWidth(200), // TextAlignment = TextAlignment.CenterLeft, // TextColor = CSS_Color.FirstLevelTitleColor, // TextSize = CSS_FontSize.TextFontSize, // TextID = StringId.CreateScene, //}; //view4.AddChidren(btnCreateSceneTitle); //var btnCreateSceneRight = new Button() //{ // X = Application.GetRealWidth(287), // Y = Application.GetRealHeight(4), // Width = Application.GetMinRealAverage(38), // Height = Application.GetMinRealAverage(38), // UnSelectedImagePath = "Public/Switch_2.png", // SelectedImagePath = "Public/SwitchOn_2.png", // IsSelected = memberInfo.isAllowCreateScene //}; //view4.AddChidren(btnCreateSceneRight); //LoadView_ChangeCreateSceneState(btnCreateSceneRight, btnCreateSceneTitle, memberInfo); //#endregion } } const int imageHeight = 400; /// /// 加载图标选择选项 /// void LoadPictureOptionView() { var pView = new FrameLayout() { BackgroundColor = CSS_Color.DialogTransparentColor1, }; bodyView.AddChidren(pView); var pictureOptionView = new FrameLayout() { Y = Application.GetRealHeight(445 + 50), Height = Application.GetRealHeight(250), AnimateSpeed = 0.3f, Animate = Animate.DownToUp, }; pView.AddChidren(pictureOptionView); var optionView = new VerticalScrolViewLayout() { Gravity = Gravity.CenterHorizontal, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(100), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), }; pictureOptionView.AddChidren(optionView); var btnTakePicture = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.TakePicture, }; optionView.AddChidren(btnTakePicture); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); var btnAlbum = new Button() { Height = Application.GetRealHeight(50), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.TextualColor, SelectedTextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.SubheadingFontSize, TextID = StringId.Album, }; optionView.AddChidren(btnAlbum); optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor }); var btnCancel = new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(8) + optionView.Bottom, Width = Application.GetRealWidth(343), Height = Application.GetRealHeight(50), BackgroundColor = CSS_Color.MainBackgroundColor, Radius = (uint)Application.GetRealWidth(12), TextID = StringId.Cancel, TextColor = CSS_Color.WarningColor, TextSize = CSS_FontSize.SubheadingFontSize, }; pictureOptionView.AddChidren(btnCancel); pictureOptionView.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); }; pView.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); }; btnCancel.MouseUpEventHandler = (sender, e) => { pictureOptionView.Parent.RemoveFromParent(); }; btnTakePicture.MouseDownEventHandler = (sender, e) => { btnTakePicture.IsSelected = true; }; btnTakePicture.MouseUpEventHandler = (sender, e) => { btnTakePicture.IsSelected = false; var imageName = Guid.NewGuid().ToString(); CropImage.TakePicture((imagePath) => { CropImageCallBack(imagePath, 1, imageName); }, imageName, 4, 6, imageHeight); pictureOptionView.Parent.RemoveFromParent(); }; btnAlbum.MouseDownEventHandler = (sender, e) => { btnAlbum.IsSelected = true; }; btnAlbum.MouseUpEventHandler = (sender, e) => { btnAlbum.IsSelected = false; //从相册选择图片裁剪 var imageName = Guid.NewGuid().ToString(); //var imageName = scene.sid; CropImage.SelectPicture((imagePath) => { CropImageCallBack(imagePath, 2, imageName); }, imageName, 4, 6, imageHeight); pictureOptionView.Parent.RemoveFromParent(); }; } /// /// 裁剪完照片回调,统一处理 /// /// 裁剪后的真实路径 /// 照片来源;1:拍照;2:图库 void CropImageCallBack(string selectImagePath, int imageSource, string imageName) { if (string.IsNullOrEmpty(selectImagePath) == true) { return; } //上传成功到回调 Action uploadSuccessAction = (isSuccess) => { //点击重新录入事件 Action action = () => { if (!isSuccess) { if (imageSource == 1) { CropImage.TakePicture((imagePath) => { CropImageCallBack(imagePath, 2, imageName); }, imageName, 4, 6, imageHeight); } else { CropImage.SelectPicture((imagePath) => { CropImageCallBack(imagePath, 1, imageName); }, imageName, 4, 6, imageHeight); } } }; if (isSuccess) { //ReadFaceInfo(false); } Application.RunOnMainThread(() => { var page = new FaceSettingResultPage(action); MainPage.BasePageView.AddChidren(page); page.LoadPage(isSuccess); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }); }; //上传图片到云端 UploadImage(selectImagePath, uploadSuccessAction); } /// /// 上传图片方法 /// /// 裁剪后的图片路径 /// /// void UploadImage(string selectImagePath, Action uploadResultAction) { try { //1.读取裁剪后的图片,然后删除 var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath); System.IO.File.Delete(selectImagePath); var waitPage = new Loading(); bodyView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); //开始上传 new Thread(() => { try { string base64string = Convert.ToBase64String(imageBytes); //Utlis.WriteLine("上传图片Length:" + imageBytes.Length + " base64:" + base64string); var pack = new HttpServerRequest().FaceSetting(base64string); if (pack != null) { Utlis.WriteLine("上传结果:" + pack.message); uploadResultAction?.Invoke(pack.Code == StateCode.SUCCESS); } } catch (Exception ex) { } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true }.Start(); } catch (Exception ex) { MainPage.Log(ex.Message); } } } }