xm
2020-05-07 c1de48884fa145a16a0f8bcee93274dcfaa0ff82
ZigbeeApp/Shared/Phone/UserCenter/Member/MemberManagementForm.cs
New file
@@ -0,0 +1,474 @@
using System;
using System.Collections.Generic;
namespace Shared.Phone.UserCenter.Member
{
    /// <summary>
    /// 成员信息管理
    /// </summary>
    public class MemberManagementForm : EditorCommonForm
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 成员的信息
        /// </summary>
        private MemberInfoRes memberInfo = null;
        /// <summary>
        /// 管理员权限图标控件
        /// </summary>
        private MostRightIconControl btnTopIcon = null;
        /// <summary>
        /// 权限的翻译名控件
        /// </summary>
        private NormalViewControl btnAuthority = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 画面显示(底层会固定调用此方法,借以完成画面创建)
        /// </summary>
        /// <param name="info">成员信息</param>
        public void ShowForm(MemberInfoRes info)
        {
            this.memberInfo = info;
            //设置标题信息
            string title = string.IsNullOrEmpty(info.UserName) == true ? info.Account : info.UserName;
            base.SetTitleText(title);
            //初始化右上角的图标
            this.InitTopRightIcon();
            //初始化中部控件
            this.InitMiddleFrame();
        }
        /// <summary>
        /// 初始化右上角的图标
        /// </summary>
        private void InitTopRightIcon()
        {
            if (UserCenterResourse.UserInfo.AuthorityNo != 1)
            {
                return;
            }
            //管理员权限图标
            btnTopIcon = new MostRightIconControl(69, 69);
            if (memberInfo.AccountType == 1)
            {
                btnTopIcon.UnSelectedImagePath = "Item/HadAuthority.png";
            }
            else
            {
                btnTopIcon.UnSelectedImagePath = "Item/NotAuthority.png";
            }
            topFrameLayout.AddChidren(btnTopIcon);
            btnTopIcon.InitControl();
            btnTopIcon.ButtonClickEvent += (sender, e) =>
            {
                //确定取消「{0}」管理员权限?
                string msg = Language.StringByID(R.MyInternationalizationString.uDownSubAccountLevel);
                if (memberInfo.AccountType != 1)
                {
                    //确定授权「{0}」成为管理员?
                    msg = Language.StringByID(R.MyInternationalizationString.uUpSubAccountLevel);
                }
                msg = msg.Replace("{0}", string.IsNullOrEmpty(memberInfo.UserName) == true ? memberInfo.Account : memberInfo.UserName);
                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
                 {
                     //二次安全验证,如果没有设置有,直接跳过验证
                     HdlCheckLogic.Current.CheckSecondarySecurity(
                         () => { this.UpOrDownSubAccountLevel(); },
                         () => { this.UpOrDownSubAccountLevel(); });
                 });
            };
        }
        /// <summary>
        /// 初始化中部控件
        /// </summary>
        private void InitMiddleFrame()
        {
            //清空bodyFrame
            this.ClearBodyFrame();
            //初始化用户图标
            this.InitMenberIconControl();
            //初始化信息列表
            this.InitInfoList();
        }
        /// <summary>
        /// 初始化用户图标
        /// </summary>
        private void InitMenberIconControl()
        {
            var frame = new FrameLayout();
            frame.Height = Application.GetRealHeight(372);
            frame.BackgroundColor = UserCenterColor.Current.White;
            bodyFrameLayout.AddChidren(frame);
            //用户图标
            string iconPath = System.IO.Path.Combine(UserCenterResourse.AccountOption.UserPictruePath, memberInfo.DistributedMark + ".png");
            var btnUserIcon = new ImageView();
            btnUserIcon.Height = this.GetPictrueRealSize(207);
            btnUserIcon.Width = this.GetPictrueRealSize(207);
            btnUserIcon.Radius = (uint)this.GetPictrueRealSize(207) / 2;
            if (System.IO.File.Exists(iconPath) == true)
            {
                btnUserIcon.ImageBytes = Shared.IO.FileUtils.ReadFile(iconPath);
            }
            else
            {
                btnUserIcon.ImagePath = "Center/Admin.png";
            }
            btnUserIcon.Y = Application.GetRealHeight(45);
            btnUserIcon.Gravity = Gravity.CenterHorizontal;
            frame.AddChidren(btnUserIcon);
            //获取成员头像
            this.GetMemberIcon(btnUserIcon);
            //权限
            btnAuthority = new NormalViewControl(800, 50, true);
            btnAuthority.TextAlignment = TextAlignment.Center;
            btnAuthority.TextSize = 12;
            btnAuthority.Y = btnUserIcon.Bottom + Application.GetRealHeight(23);
            btnAuthority.Gravity = Gravity.CenterHorizontal;
            btnAuthority.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnAuthority.TextID = R.MyInternationalizationString.uMember;
            if (memberInfo.AccountType == 1)
            {
                //拥有管理员权限
                btnAuthority.TextID = R.MyInternationalizationString.uMemberHadActionAuthority;
            }
            frame.AddChidren(btnAuthority);
        }
        #endregion
        #region ■ 初始化信息列表_____________________
        /// <summary>
        /// 初始化信息列表
        /// </summary>
        private void InitInfoList()
        {
            //标题:成员权限
            var btnMenberTile = new NormalViewControl(800, 60, true);
            btnMenberTile.X = ControlCommonResourse.XXLeft;
            btnMenberTile.Y = Application.GetRealHeight(418);
            btnMenberTile.TextColor = UserCenterColor.Current.TextColor2;
            btnMenberTile.TextID = R.MyInternationalizationString.MenberAuthority;
            btnMenberTile.TextSize = 15;
            bodyFrameLayout.AddChidren(btnMenberTile);
            var frame = new FrameListControl();
            frame.Height = Application.GetRealHeight(311);
            frame.BackgroundColor = UserCenterColor.Current.White;
            frame.Y = Application.GetRealHeight(501);
            bodyFrameLayout.AddChidren(frame);
            //塞一个空白的进去占空间
            var rowTemp = new FrameRowControl();
            rowTemp.UseClickStatu = false;
            rowTemp.Height = Application.GetRealHeight(23) - frame.rowSpace;
            frame.AddChidren(rowTemp);
            //添加远程操作行
            var rowRemote = new FrameRowControl(frame.rowSpace / 2);
            rowRemote.UseClickStatu = false;
            frame.AddChidren(rowRemote);
            this.AddRemoteRow(rowRemote);
            //添加已共享内容行
            var rowShard = new FrameRowControl(frame.rowSpace / 2);
            frame.AddChidren(rowShard);
            this.AddShardContentRow(rowShard);
            //一旦移除该家庭成员,他/她将无法使用该网关下所绑定的设备
            var btnNote1 = new NormalViewControl(613, 100, true);
            btnNote1.X = Application.GetRealWidth(248);
            btnNote1.Y = Application.GetRealHeight(1327);
            btnNote1.TextSize = 12;
            btnNote1.TextID = R.MyInternationalizationString.RemoveMenberAndDonotUserBindGatewayDevice;
            btnNote1.IsMoreLines = true;
            btnNote1.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnNote1.TextAlignment = TextAlignment.Center;
            bodyFrameLayout.AddChidren(btnNote1);
            var btnIcon = new IconViewControl(58);
            btnIcon.X = Application.GetRealWidth(167);
            btnIcon.Y = btnNote1.Y;
            btnIcon.UnSelectedImagePath = "Item/Tips.png";
            bodyFrameLayout.AddChidren(btnIcon);
            //添加移除按钮
            var btnDelete = new BottomClickButton();
            btnDelete.TextID = R.MyInternationalizationString.RemoveBotton;
            btnDelete.BackgroundColor = 0xfff75858;
            bodyFrameLayout.AddChidren(btnDelete);
            btnDelete.ButtonClickEvent += (sender, e) =>
            {
                //确定要移除该家庭成员吗?
                string msg = Language.StringByID(R.MyInternationalizationString.uConfirmRemoveMember);
                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
                {
                    //删除子账号
                    this.DeleteSubAccount();
                });
            };
        }
        #endregion
        #region ■ 远程操作行_________________________
        /// <summary>
        /// 添加远程操作行
        /// </summary>
        /// <param name="row">Row.</param>
        private void AddRemoteRow(FrameRowControl row)
        {
            //图标
            var btnIcon = row.AddLeftIcon(81);
            btnIcon.UnSelectedImagePath = "Item/Remote.png";
            //文字:远程操作
            var btnName = row.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.RemoteManipulation), 500);
            btnName.TextID = R.MyInternationalizationString.RemoteManipulation;
            btnName.TextSize = 15;
            //开关
            var btnSwitch = row.AddMostRightSwitchIcon();
            if (this.memberInfo.IsAllowRemoteCtrl == true)
            {
                btnSwitch.IsSelected = true;
            }
            btnSwitch.ButtonClickEvent += (sender, e) =>
            {
                HdlThreadLogic.Current.RunThread(async () =>
                {
                    var pra = new
                    {
                        HouseDistributedMark = Common.Config.Instance.Home.Id,
                        DistributedMark = this.memberInfo.DistributedMark,
                        IsAllowRemoteCtrl = !btnSwitch.IsSelected
                    };
                    //打开进度条
                    this.ShowProgressBar();
                    var result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/ChangeSubAccountIsAllowRemoteCtrl", false, pra);
                    //关闭进度条
                    this.CloseProgressBar();
                    if (result == false)
                    {
                        return;
                    }
                    this.memberInfo.IsAllowRemoteCtrl = !btnSwitch.IsSelected;
                    Application.RunOnMainThread(() =>
                    {
                        btnSwitch.IsSelected = !btnSwitch.IsSelected;
                    });
                });
            };
            //底线
            row.AddBottomLine();
        }
        #endregion
        #region ■ 已共享内容行_______________________
        /// <summary>
        /// 添加已共享内容行
        /// </summary>
        /// <param name="row">Row.</param>
        private void AddShardContentRow(FrameRowControl row)
        {
            //图标
            var btnIcon = row.AddLeftIcon(81);
            btnIcon.UnSelectedImagePath = "Item/ShardMenu.png";
            //共享
            var btnName = row.AddLeftCaption(Language.StringByID(R.MyInternationalizationString.uShared2), 500);
            btnName.TextID = R.MyInternationalizationString.uShared2;
            btnName.TextSize = 15;
            //右图标
            row.AddRightArrow();
            var memberShardInfo = new MemberShardInfoData();
            row.ButtonClickEvent += (sender, e) =>
            {
                var form = new SharedContent.LookSharedListRoomForm();
                form.AddForm(memberInfo, memberShardInfo);
            };
        }
        #endregion
        #region ■ 升级或者降级子账号_________________
        /// <summary>
        /// 升级或者降级子账号
        /// </summary>
        public async void UpOrDownSubAccountLevel()
        {
            //开启进度条
            this.ShowProgressBar();
            var pra = new UpOrDownLevelPra();
            pra.DistributedMark = memberInfo.DistributedMark;
            bool result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/UpSubAccount", false, pra);
            if (result == false)
            {
                this.CloseProgressBar();
                return;
            }
            this.CloseProgressBar();
            //变更权限
            memberInfo.AccountType = memberInfo.AccountType == 1 ? 0 : 1;
            Application.RunOnMainThread(() =>
            {
                if (this.Parent == null)
                {
                    return;
                }
                //变更权限图标
                if (memberInfo.AccountType == 1)
                {
                    btnTopIcon.UnSelectedImagePath = "Item/HadAuthority.png";
                }
                else
                {
                    btnTopIcon.UnSelectedImagePath = "Item/NotAuthority.png";
                }
                //变更权限文字
                btnAuthority.TextID = memberInfo.AccountType == 1 ? R.MyInternationalizationString.uMemberHadActionAuthority : R.MyInternationalizationString.uMember;
                //打开显示成功的画面
                var form = new SubAccountLevelUpSuccessForm();
                form.AddForm(memberInfo);
            });
        }
        #endregion
        #region ■ 删除子账号_________________________
        /// <summary>
        /// 删除子账号
        /// </summary>
        private async void DeleteSubAccount()
        {
            //开启进度条
            this.ShowProgressBar();
            var pra = new DeleteSubAccountPra();
            pra.SubAccount = memberInfo.SubAccountDistributedMark;
            bool result = await UserCenterLogic.GetResultStatuByRequestHttps("ZigbeeUsers/DeletedSubAccount", false, pra);
            //关闭进度条
            this.CloseProgressBar();
            if (result == false)
            {
                return;
            }
            //移除缓存
            UserCenterResourse.ListMemberInfo.RemoveAll((obj) =>
            {
                if (obj.SubAccountDistributedMark == memberInfo.SubAccountDistributedMark)
                {
                    return true;
                }
                return false;
            });
            UserCenterLogic.SaveLocalMemberListInfo();
            //从成员一览画面移除
            this.LoadFormMethodByName("MemberListForm", "DeleteRowByAccount", memberInfo.Account);
            //自身关闭
            this.CloseForm();
        }
        #endregion
        #region ■ 获取成员头像_______________________
        /// <summary>
        /// 获取成员头像
        /// </summary>
        private void GetMemberIcon(ImageView btnUserIcon)
        {
            HdlThreadLogic.Current.RunThread(async () =>
            {
                var pra = new AccountInfoPra();
                pra.Account = memberInfo.Account;
                var result = await UserCenterLogic.GetByteResponseDataByRequestHttps("ZigbeeUsers/GetSubAccountInfo", false, pra, new List<string>() { "NotSetAgain" });
                if (result == null)
                {
                    return;
                }
                var revertObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.ResponseEntity.ResponsePack>(System.Text.Encoding.UTF8.GetString(result));
                if (revertObj == null || revertObj.ResponseData == null)
                {
                    return;
                }
                var infoResult = Newtonsoft.Json.JsonConvert.DeserializeObject<AccountInfoResult>(revertObj.ResponseData.ToString());
                if (infoResult.HeadImage != null)
                {
                    //写入头像内容
                    string iconPath = System.IO.Path.Combine(UserCenterResourse.AccountOption.UserPictruePath, memberInfo.DistributedMark + ".png");
                    Shared.IO.FileUtils.WriteFileByBytes(iconPath, infoResult.HeadImage);
                    HdlThreadLogic.Current.RunMain(() =>
                    {
                        btnUserIcon.ImageBytes = Shared.IO.FileUtils.ReadFile(iconPath);
                    });
                }
            });
        }
        #endregion
        #region ■ 结构体_____________________________
        /// <summary>
        /// 升级或者降级子账号的启动参数
        /// </summary>
        private class UpOrDownLevelPra : IfacePraCommon
        {
            /// <summary>
            /// 通过《住宅的Guid查询住宅下面的子账号》接口时,返回的DistributedMark字段
            /// </summary>
            public string DistributedMark = string.Empty;
        }
        /// <summary>
        /// 删除子账号的启动参数
        /// </summary>
        private class DeleteSubAccountPra : IfacePraCommon
        {
            /// <summary>
            /// 通过《住宅的Guid查询住宅下面的子账号》接口时,返回的DistributedMark字段
            /// </summary>
            public string SubAccount = string.Empty;
            /// <summary>
            /// HouseDistributedMark
            /// </summary>
            public string HouseDistributedMark = Common.Config.Instance.HomeId;
        }
        #endregion
    }
}