其他方式登录:

wxml:

<phonemodal id='phonemodal' bind:myevent="onMyEvent"></phonemodal>

<!-- 未登录 -->
<view wx:if="{{nologin}}" class="viewbody">
    <image src="{{bg}}" mode="widthFix" class="nologinpersonbg">
        <image src="{{defaultImg}}" class="personImg"></image>
    </image>
    <view class="nologintxt">
        <view>未登录</view>
        <view class="nologincontent">登录可查看更多试用详情</view>
    </view>
    <!-- <view class="loginbtn" bindtap="login">马上登录</view> -->
    <!-- <button open-type="getPhoneNumber" class="loginbtn" bindgetuserinfo="bindGetUserInfo" >马上登录</button> -->
    <button open-type="getUserInfo" class="loginbtn" bindgetuserinfo="bindGetUserInfo">马上登录</button>
    <view class="nav" hover-class="none" bindtap="jumphome">
        <view class="index ">
            <image class="navbottomicon" src="{{src}}" ></image>
            <text class="nav-tex">放心试</text>
        </view>
        <view class="index active" >
            
                <image  class="navbottomicon" src="{{islogin ? Headimg :ownactive}}" style="border-radius: 50%;overflow: hidden;" ></image>
            
            

            <text class="nav-tex">我的</text>
        </view>
    </view>
</view>

  

 

 父组件的js

  onLoad: function() {
        if (wx.getStorageSync('receiver') && wx.getStorageSync('mobile') && wx.getStorageSync('address')) {
            this.setData({
                user_address_flag:true,
                receiver:wx.getStorageSync('receiver'),
                mobile: wx.getStorageSync('mobile'),
                address: wx.getStorageSync('address')
            })
        }
        var that = this
        that.getuserInfo()   
    },
    onShow: function() {
        var that = this;
        that.getuserheadImgstatus();
    },

  

 bindGetUserInfo: function(e) {
        var that = this;   
        that.selectComponent('#phonemodal').getlogincode(function() {
            console.log("登录成功后的操作")
            that.getuserInfo()
            that.getuserheadImgstatus();
            // that.selectComponent('#winmodal').showwinmodal();
        }, function() {
            console.log("登录失败后的操作")
        });
    },

  

 getuserInfo: function() {
        var that = this;
        // 初始化或清空数组
        that.setData({
            isLoading: false,
            loadText: '数据加载中',
            login: false,
            nologin: false
        })
        wx.request({
            url: 'https://product.fishqc.com/User/Profile/getInfo', //请求接口地址
            header: {
                'content-type': 'application/json', // 默认值
                'skey': wx.getStorageSync('getstoreskey')
            },
            success: function(res) {
                that.setData({
                    isLoading: true,
                    loadText: '数据加载中'

                })
                if (res.data.code == 200) {
                    that.setData({
                        UserInfodata: res.data.data,
                        login: true

                    })
                    that.checkwinstatus();
                    // that.getlistcount();
                } else if (res.data.code == 401) {
                    // 未登录
                    that.setData({
                        nologin: true

                    })


                } else {
                    app.toasttips(res.data.message, 'none')
                }
                // that.selectComponent('#winmodal').showwinmodal();
                if (this.userInfoReadyCallback) {
                    this.userInfoReadyCallback(res)
                }
            }
        })
    },

  

 getuserheadImgstatus:function(){
        var that = this
        wx.request({
            url: 'https://product.fishqc.com/User/Profile/getAvatarInfo', //请求接口地址
            header: {
                'content-type': 'application/json', // 默认值
                'skey': wx.getStorageSync('getstoreskey')
            },
            success: function(res) {
                if(res.data.code == 200){
                    that.setData({
                        islogin:true,
                        verified:res.data.data.verified,
                        Headimg:res.data.data.image
                    })
                    
                    
                }else if(res.data.code == 401){
                    that.setData({
                        islogin:false
                    })
                } 
            }
        })
    },

  子组件里面的wxml

<view name="phonemodal">
     <!-- wx:if="{{isShowPhoneModal}}" -->
    <view class="drawer_screen" wx:if="{{isShowPhoneModal}}" >
        <view class="drawer_box fishqccenter phonechoosebox" style="padding:20px 0 0;">
            <view class="weChatAuth">微信授权</view>
            <view class="phonechoosetxt">当前网络环境安全,建议使用微信绑定手机号登录,是否允许?</view>
            <view class="phonechoosebtncontain">
               <view class="getPhoneContain">
                    <button class="phonemodalbtn" bindtap="showPhoneLogin" style="border-radius: 1rpx">其他号码登录</button>
                    <button class="phonemodalbtn" open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber" style="border-radius: 1rpx">允许</button>
               </view>
            </view>
            <!-- <i class="colse" bindtap="closespplymodal" data-statu="close"></i> -->
        </view>
    </view>
    <view class="drawer_screen" wx:if="{{isShowPhoneLogin}}">
        <view class="drawer_box fishqccenter" style="width: 80%;padding:20px;box-sizing: border-box;">
        <view class="inputVerifiedCode">输入验证码</view>
        <input type="text" placeholder="请输入手机号码" class="phone"  bindinput="phoneinput"  placeholder-style="color:#dcdcdc;" style="border:1px solid #dcdcdc"/>
        <view class="applyintroduct" style="height: 40px;margin-bottom: 24px;">
                <input type="text" placeholder="请输入验证码" class="code"  bindinput="verificationcodeinput" placeholder-style="color:#dcdcdc;" style="border:1px solid #dcdcdc"/>
                <view catchtap="sendcode" style="width:38%;font-size:12px;display:inline-block;height:40px;line-height:40px;vertical-align:top;">{{sendtxt}}</view>
            </view>
            <view class="phoneinput">
                <button class="phonebtn" catchtap="showPhoneModal">取消</button>
                <button class="phonebtn" bindtap="phonelogin">确认</button>
            </view>    
        </view>
    </view>
</view>

子组件里面的js

var app = getApp()
Component({
    properties: {
        // 这里定义了innerText属性,属性值可以在组件使用时指定
        // isShowPhoneLogin: {
        //     type: Boolean,
        //     value: false,
        // },
        // isShowPhoneModal: {
        //     type: Boolean,
        //     value: false
        // }
    },
    data: {
        phone: '',
        verificationcode: '',
        isShowPhoneLogin: false,
        isShowPhoneModal: false,
        sendtxt: '发送验证码',
        gettingCode: true,
        successCallback: null
    },
    methods: {
        // 显示微信登录方式选择
        showPhoneLogin: function () {
            var that = this;
            that.setData({
                isShowPhoneLogin: true,
                isShowPhoneModal: false
            })
        },
        // 显示微信登录方式选择
        showPhoneModal: function () {
            var that = this;
            console.log('获取回调函数')
            that.setData({
                isShowPhoneLogin: false,
                isShowPhoneModal: true,
                sendtxt: '发送验证码',
                gettingCode: true,
                phone: '',
                verificationcode: ''
            })
        },
        closeModal: function () {
            this.setData({
                isShowPhoneLogin: false,
                isShowPhoneModal: false
            })
        },
        toasttips: function (text, icon, time) {
            wx.showToast({
                title: text == null ? '' : text,
                icon: icon,
                duration: time == null ? '1000' : time
            })
        },
        getPhoneNumber: function (e) {
            var that = this;
            if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
                app.toasttips('手机号授权失败', 'none')
            } else {
                app.toasttips('手机号授权成功', 'none')
                that.setData({
                    isShowPhoneModal: false
                })
                that.weiXinMiniBingPhone(e.detail.iv, e.detail.encryptedData, that.data.successCallback)
            }
        },
        weiXinMiniBingPhone: function (iv, encryptedData, successCallback) {
            var that = this
            wx.login({
                success: function (res) {
                    if (res.code) {
                        var logincode = res.code;
                        wx.request({
                            url: 'https://product.fishqc.com/Api/WeixinLogin/weiXinMiniBindPhone',
                            data: {
                                code: logincode,
                                iv: iv,
                                encryptedData: encryptedData
                            },
                            header: {
                                'content-type': 'application/x-www-form-urlencoded'
                            },
                            method: 'POST',
                            success: function (res) {
                                if (res.data.code == 200) {
                                    var skey = res.data.skey
                                    wx.setStorageSync('getstoreskey', skey)
                                    // 成功登录的回调,待写
                                    // app.global.login.data.login_getPhoneNumberSuccessCall();
                                    if (successCallback != null) {
                                        successCallback()
                                    }
                                } else {
                                    app.toasttips(res.data.message, 'none')
                                }
                            }
                        })
                    } else {
                        console.log('登录失败!' + res.errMsg)
                    }
                }
            })

        },
        phoneinput: function (event) {
            var that = this
            that.setData({
                phone: event.detail.value
            })
        },
        verificationcodeinput: function (event) {
            var that = this
            that.setData({
                verificationcode: event.detail.value
            })
        },
        phonelogin: function () {
            wx.showLoading({
                title: '正在登陆中',
            })
            var that = this;
            if (that.data.phone == '' || !/^1\d{10}$/.test(that.data.phone)) {

                app.toasttips('请输入正确的手机号', 'none')
                return;
            }
            if (that.data.verificationcode == '') {

                app.toasttips('请输入验证码', 'none')
                return;
            }
            wx.login({
                success: function (res) {

                    if (res.code) {
                        var logincode = res.code
                        wx.request({
                            url: 'https://product.fishqc.com/Api/WeixinLogin/weixinminiBindMobile',
                            data: {
                                code: logincode,
                                mobile: that.data.phone,
                                verificationcode: that.data.verificationcode
                            },
                            header: {
                                'content-type': 'application/x-www-form-urlencoded'
                            },
                            method: 'POST',
                            success: function (res) {
                                if (res.data.code == 200) {
                                    // 成功登录的回调,待写
                                    wx.hideLoading()
                                    var skey = res.data.skey
                                    wx.setStorageSync('getstoreskey', skey)
                                    console.log(1111,that.data.successCallback)
                                    if (that.data.successCallback != null) {
                                        that.data.successCallback()
                                    }
                                    console.log(2222,that.data.successCallback)
                                    that.setData({
                                        isShowPhoneLogin: false,
                                        isShowPhoneModal: false
                                    })
                                    app.toasttips(res.data.message, 'none')
                                } else {
                                    app.toasttips(res.data.message, 'none')
                                }
                            }
                        })
                    } else {
                        console.log('登录失败!' + res.errMsg)

                    }
                }
            });

        },
        getlogincode: function (successCallback, failCallback) {
            var that = this;
            wx.login({
                success: function (res) {

                    if (res.code) {
                        var logincode = res.code
                        // 弹窗授权
                        wx.getUserInfo({
                            success: function (res) {

                                if (res.errMsg == 'getUserInfo:ok') {
                                    var encryptedData = res.encryptedData
                                    var iv = res.iv;
                                    that.WeixinLogin(logincode, encryptedData, iv, successCallback, failCallback);
                                }

                            },
                            fail: function (res) {

                                that.checkauthorize();
                            }
                        })
                    } else {
                        console.log('登录失败!' + res.errMsg)
                        if (failCallback != null) {
                            failCallback();
                        }
                    }
                }
            });

        },
        // 检查是否授权过
        checkauthorize: function () {
            var that = this;
            wx.getSetting({
                success(res) {
                    console.log(res)
                    // 没有授权过的,进入如下
                    if (!res.authSetting['scope.userInfo']) {
                        that.authorizemodal();
                    }
                }
            })
        },
        // 授权失败,弹窗
        authorizemodal: function () {
            var that = this;
            wx.showModal({
                title: '获取用户信息授权',
                content: '当前功能需授权获取用户信息',
                confirmText: '继续授权',
                confirmColor: '#64c8bc',
                success: function (res) {

                    if (res.confirm) {
                        console.log("点击去设置")
                        that.authorize();
                    } else if (res.cancel) {
                        console.log("点击取消")
                        console.log(res)
                    }



                }
            })
        },
        authorize: function () {
            var that = this;
            wx.openSetting({
                success: function () {
                    console.log("授权成功")
                    // 调接口,获取请求接口头部参数
                },
                fail: function () {
                    console.log("授权失败")
                    that.checkauthorize();
                }
            })
        },
        WeixinLogin: function (logincode, encryptedData, iv, successCallback, failCallback) {
            var that = this;
            wx.request({
                url: 'https://product.fishqc.com/Api/WeixinLogin/weiXinMini',
                data: {
                    code: logincode,
                    iv: iv,
                    encryptedData: encryptedData

                },
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded' // 默认值
                },
                success: function (res) {
                    if (res.data.code == 200) {
                        var skey = res.data.skey

                        wx.setStorageSync('getstoreskey', skey)

                        if (successCallback != null) {
                            successCallback(res);
                        }
                    } else if (res.data.code == 201) {
                        console.log('要跳去绑定手机页面')
                        console.log(successCallback)
                        that.setData({
                            successCallback: successCallback
                        })
                        that.showPhoneModal()
                    } else {
                        app.toasttips(res.data.message, 'none')
                        if (failCallback != null) {
                            failCallback(res);
                        }
                    }
                }
            })
        },
        sendcode: function () {
            var that = this;
            console.log('打印手机号')
            console.log(that.data.phone)
            if (!that.data.gettingCode) {
                return;
            }
            if (that.data.phone == '' || !/^1\d{10}$/.test(that.data.phone)) {

                app.toasttips('请输入正确的手机号', 'none')
                return;
            }
            // console.log('触发发验证码')
            wx.request({
                url: 'https://product.fishqc.com/Api/WeixinLogin/weixinminiMobileVerificationCode',
                data: {
                    mobile: that.data.phone

                },
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded' // 默认值
                },
                success: function (res) {
                    console.log(res)
                    if (res.data.code == 200) {
                        app.toasttips('验证码发送成功', 'none')
                        that.countDown()
                    } else {
                        app.toasttips(res.data.message, 'none')

                    }
                }
            })
        },
        // 倒数
        countDown: function () {
            var that = this;
            that.data.gettingCode = false;
            var seconds = 59;
            var countTimer = setInterval(function () {
                that.setData({
                    sendtxt: seconds + "s"
                })
                seconds--;
                if (seconds <= 0) {
                    countTimer = clearInterval(countTimer);
                    that.setData({
                        sendtxt: '获取验证码'
                    })
                    that.data.gettingCode = true;
                }
            }, 1000);
        },

    }
})

  存储sky值是很重要的,还有这里的一个successCallback的一个初始化很重要.

posted on 2018-07-17 10:44  周小姐你好  阅读(1193)  评论(0编辑  收藏  举报