/// <summary>
        /// 绑定指静脉
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void onBindingVein(object sender, EventArgs e)
        {
            Dispatcher.BeginInvoke(new Action(() => {
                WarnInfo.Content = "";
            }));

            BaseSinglePostData <UserToken> bdUserToken = GetUserToken(out string warningString, out BitmapImage bi);

            HttpHelper.GetInstance().ResultCheck(bdUserToken, out bool isSuccess);

            if (!isSuccess)
            {
                Dispatcher.BeginInvoke(new Action(() => {
                    WarnInfo.Content = warningString;
                    if (bi != null)
                    {
                        lbInputAuth.Visibility = Visibility.Visible;
                        tbInputAuth.Visibility = Visibility.Visible;
                        imageAuth.Visibility   = Visibility.Visible;
                        imageAuth.Source       = bi;
                    }
                }));
                return;
            }

            SetTokens(bdUserToken.body.access_token, bdUserToken.body.refresh_token);

            loginView.Visibility    = Visibility.Collapsed;
            bindingView.Visibility  = Visibility.Visible;
            rebindingBtn.Visibility = Visibility.Hidden;

            Task task = Task.Factory.StartNew(a => {
                Binding();
            }, true);
        }
        /// <summary>
        /// 获取token,根据用户参数
        /// </summary>
        /// <param name="account"></param>
        /// <returns></returns>
        public BaseSinglePostData <UserToken> GetUserToken(SignInParam siParam)
        {
            BaseSinglePostData <Token> dataSignIn = HttpHelper.GetInstance().Post <Token, SignInParam>(HttpHelper.GetSignInUrl(), siParam, true);

            //根据账户获取用户数据
            BaseSinglePostData <UserToken> dataUserToken = HttpHelper.GetInstance().ResultCheck((HttpHelper hh) => {
                UserSignInParam bodyPara = new UserSignInParam();
                IDictionary <string, string> headerParam = new Dictionary <string, string>();
                headerParam.Add("Authorization", dataSignIn.body.token);

                return(hh.Post <UserToken, UserSignInParam>(HttpHelper.GetUserSignInUrl(), bodyPara, headerParam, true));
            }, dataSignIn);

            return(dataUserToken);
        }
        /// <summary>
        /// 用户名密码登录
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void onPswLogin(object sender, EventArgs e)
        {
            Dispatcher.BeginInvoke(new Action(() => {
                WarnInfo.Content = "";
            }));

            BaseSinglePostData <UserToken> bdUserToken = GetUserToken(out string warningString, out BitmapImage bi);

            HttpHelper.GetInstance().ResultCheck(bdUserToken, out bool isSuccess);

            if (!isSuccess)
            {
                Dispatcher.BeginInvoke(new Action(() => {
                    WarnInfo.Content = warningString;
                    if (bi != null)
                    {
                        lbInputAuth.Visibility = Visibility.Visible;
                        tbInputAuth.Visibility = Visibility.Visible;
                        imageAuth.Visibility   = Visibility.Visible;
                        imageAuth.Source       = bi;
                    }
                }));
                return;
            }

            SetTokens(bdUserToken.body.access_token, bdUserToken.body.refresh_token);

            LoadingDataEvent(this, true);
            BaseData <User> bdUser = UserLoginBll.GetInstance().GetUserInfo(("+86 " + tbInputName.Text));

            LoadingDataEvent(this, false);
            HttpHelper.GetInstance().ResultCheck(bdUser, out bool isSuccess2);

            if (!isSuccess2)
            {
                WarnInfo.Content = "获取用户信息失败!";
            }
            else
            {
                UserPwDLoginEvent(this, bdUser.body.objects[0]);
            }
        }
        private BaseSinglePostData <UserToken> GetUserToken(out string warningString, out BitmapImage bi)
        {
            BaseSinglePostData <UserToken> bdUserToken = new BaseSinglePostData <UserToken>();

            if (tbInputName.Text == "" || tbInputPsw.Password.ToString() == "")
            {
                //Dispatcher.BeginInvoke(new Action(() => {
                if (tbInputName.Text == "")
                {
                    warningString = "请输入用户名!";
                }
                else
                {
                    warningString = "请输入密码!";
                }
                //}));
                bi = null;
                HttpHelper.GetInstance().ResultCheck(bdUserToken, out bool isSuccess);
                return(bdUserToken);
            }

            SignInParam siParam = new SignInParam();

            if (tbInputAuth.Visibility == Visibility.Visible)
            {
                siParam.captcha_token = CaptchaToken;
                siParam.captcha_value = tbInputAuth.Text;
            }
            siParam.password = tbInputPsw.Password.ToString();
            siParam.phone    = "+86 " + tbInputName.Text;
            siParam.source   = "app";

            //获取用户Token
            LoadingDataEvent(this, true);
            bdUserToken = UserLoginBll.GetInstance().GetUserToken(siParam);
            LoadingDataEvent(this, false);
            //获得用户Token后,返回true, 进入绑定指静脉或者用户名密码登录的下一步
            HttpHelper.GetInstance().ResultCheck(bdUserToken, out bool isSuccess1);
            if (isSuccess1)
            {
                warningString = "";
                bi            = null;
                return(bdUserToken);
            }


            //获得用户Token失败,首先获取图形验证的Toke
            LoadingDataEvent(this, true);
            var bdCaptchaToken = UserLoginBll.GetInstance().GetCaptchaImageToken();

            LoadingDataEvent(this, false);
            HttpHelper.GetInstance().ResultCheck(bdCaptchaToken, out bool isSuccess2);
            if (!isSuccess2)
            {
                //Dispatcher.BeginInvoke(new Action(() => {
                warningString = "获取验证码Token失败,请重试!";
                //}));
                bi = null;
                bdUserToken.code    = bdCaptchaToken.code;
                bdUserToken.message = bdCaptchaToken.message;
                return(bdUserToken);
            }

            //赋值给全局变量,下一次使用
            CaptchaToken = bdCaptchaToken.body.captcha_token;

            // 联网异步获取验证码图片
            LoadingDataEvent(this, true);
            //Task<System.Drawing.Image> result = ImageUtils.GetBitmapFromWebServerAsync(url);
            System.Drawing.Image image = ImageUtils.GetBitmapFromWebServer(HttpHelper.GetCaptchaImageUrl() + "?captcha_token=" + bdCaptchaToken.body.captcha_token);
            LoadingDataEvent(this, false);

            //转型:Image --> Bitmap --> BitmapImage
            Bitmap bitmap = new Bitmap(image);

            //BitmapImage bitmapImage = ImageUtils.BitmapToBitmapImage(bitmap);
            bi = ImageUtils.BitmapToBitmapImage(bitmap);

            //Dispatcher.BeginInvoke(new Action(() => {
            //lbInputAuth.Visibility = Visibility.Visible;
            //tbInputAuth.Visibility = Visibility.Visible;
            //imageAuth.Visibility = Visibility.Visible;

            //imageAuth.Source = bitmapImage;
            warningString = "获取账号信息失败,请输入用户信息、密码和验证码,重新尝试!";
            //}));
            bdUserToken.code    = (int)ResultCode.Result_Exception;
            bdUserToken.message = ResultCode.Result_Exception.ToString();
            return(bdUserToken);
        }