陶杰
2024-12-31 d77c11e64afea02c5de52e13bb8df374bfb389fb
1.微信登录
已修改1个文件
232 ■■■■ 文件已修改
pages/login/supplier-login.vue 232 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/supplier-login.vue
@@ -127,16 +127,32 @@
        <view class="flex" style="justify-content: center; margin-top: 150px;">
            <u--image :showLoading="true" v-if="false"
                src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/6e/6e74997e6d4c4a29be3903b35bc1f38fwechat.png"
                width="40rpx" height="40rpx" @click="handleWechatClick">
                width="40rpx" height="40rpx">
            </u--image>
            <u-grid :border="false" :col="1">
                <u-grid-item @click="handleWechatClick">
                <u-grid-item v-if="wxUser.user" @click="handleWechatClick">
                    <u--image :showLoading="true"
                        src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/6e/6e74997e6d4c4a29be3903b35bc1f38fwechat.png"
                        width="40rpx" height="40rpx" @click="handleWechatClick">
                        width="60rpx" height="60rpx" >
                    </u--image>
                    <text class="third-login-text" @click="handleWechatClick">微信登录</text>
                </u-grid-item>
                    <u-grid-item v-else>
                        <button class="component-button-contact" style="font-size: 18rpx; margin: auto;" open-type="getPhoneNumber" @getphonenumber="handleGetPhoneNumber" >
                            <view style="display: flex; align-items: center;">
                                <u--image :showLoading="true"
                                    src="https://hmy-flower.oss-cn-shanghai.aliyuncs.com/6e/6e74997e6d4c4a29be3903b35bc1f38fwechat.png"
                                    width="60rpx" height="60rpx" >
                                </u--image>
                            </view>
                        </button>
                    </u-grid-item>
            </u-grid>
        </view>
        <!-- #endif -->
@@ -146,6 +162,10 @@
<script>
export default {
    async onLoad(options) {
        // this.getOpenId();
        this.source = options.source || ''
        this.sharePartnerUserId = options.sharePartnerUserId || ''
        // #ifdef PUB_CUSTOMER
@@ -365,6 +385,10 @@
        // #endif
    },
    onShow() {
        this.getOpenId();
    },
    onShareAppMessage() {
        let that = this;
        var name = that.currentInfo.customerDTO && that.currentInfo.customerDTO.name || that.currentInfo.supplierDTO &&
@@ -419,10 +443,168 @@
            apitype: 'loginCustomer',
            // #endif
            // return 'loginPartner'
            wxUser:{
                openId:'',
                sessionKey:'',
                unionId:'',
                user:{},
                phoneNumber:'',
                purePhoneNumber:'',
            },
        };
    },
    methods: {
        getOpenId(){
            let that=this
            uni.login({
                "provider": "weixin",
                "onlyAuthorize": true, // 微信登录仅请求授权认证
                success: async function (event) {
                    console.log("aaaa")
                    console.log(event)
                    const { code } = event
                    await that.getExistUserByOpenId(code);
                    that.wxLoginCode=code
                    console.log("wxUser")
                    console.log(that.wxUser)
                },
                fail: function (err) {
                    // 登录授权失败
                    // err.code是错误码
                }
            })
        },
        async handleGetPhoneNumber(e){
            let that = this
            console.log(e)
            console.log(e.detail.code)  // 动态令牌
            console.log(e.detail.errMsg) // 回调信息(成功失败都会返回)
            console.log(e.detail.errno)  // 错误码(失败时返回)
            if (e.detail.errMsg == 'getPhoneNumber:ok') {
                console.log('获取成功')
                const {
                    code,data
                } = await that.$http.request('post', '/api/wx/getuserphonenumber', {
                    data: {
                        code: e.detail.code,
                        userType: that.apitype.replace("login", "").toLowerCase()
                    }
                })
                if (code == 0) {
                    // 获取手机号码后,实现微信登录
                    console.log(data)
                    const phoneNumber=data.phone_info.phoneNumber;
                    const purePhoneNumber=data.phone_info.purePhoneNumber;
                    that.wxUser.phoneNumber=phoneNumber
                    that.wxUser.purePhoneNumber=purePhoneNumber
                    that.handleWechatClick()
                } else {
                }
            }else{
                this.$message.showToast('获取授权失败,无法登录!')
            }
        },
        async getExistUserByOpenId(accessCode){
            let that=this;
            const {
                    code,data
                } = await that.$http.request('post', '/api/wx/getExistUserByOpenId', {
                    data: {
                        code: accessCode,
                        userType: that.apitype.replace("login", "").toLowerCase()
                    }
                })
                if (code == 0) {
                    console.log("查看当前用户是否已经绑定过")
                    console.log(data)
                    that.wxUser=data
                    if(that.wxUser&&that.wxUser.user){
                        return true
                    }
                    return false
                } else {
                    this.$message.showToast('系统异常,无法获取当前微信是否已经绑定过账号')
                }
        },
        handleWechatClick22() {
            uni.login({
                provider: 'univerify',
                univerifyStyle: {
                    fullScreen: true
                }
            })
        },
        handleWechatClick_new() {
            let that = this
            // 微信登录
            uni.login({
                "provider": "weixin",
                "onlyAuthorize": true, // 微信登录仅请求授权认证
                success: async function (event) {
                    const { code } = event
                    that.$message.showLoading();
                    // 1.解析当前code,查看当前的openid是否已经绑定过用户,
                    // 2.如果没有的话,则获取当前手机号,并注册信息用户绑定再登录
                    // 3.如果已经绑定过用户,则直接登录
                    console.log("查看当前用户是否已经绑定过")
                    const resp = await that.getExistUserByOpenId(code)
                    if(resp){
                        // 已经绑定过用户,则直接登录
                        const resp = await that.$store.dispatch('loginwx', { code })
                        if (resp && resp.data) {
                            that.$forceUpdate()
                            uni.reLaunch({
                                url: '/pages/home/home'
                            })
                        }
                    }else{
                        // 没有绑定过用户,则获取当前手机号,并注册信息用户绑定再登录
                        // let el = uni.createSelectorQuery().in(this).select('#phoneButton');
                        // console.log(el)
                        // 使用 uni.createSelectorQuery 获取按钮元素
                        uni.createSelectorQuery().select('#phoneButton').boundingClientRect((rect) => {
                            if (rect) {
                            // 获取到按钮后,模拟点击
                            uni.createSelectorQuery().select('#phoneButton').node((res) => {
                                if (res.node) {
                                res.node.click(); // 模拟点击
                                }
                            }).exec();
                            }
                        }).exec();
                    }
                    // const resp = await that.$store.dispatch('loginwx', { code })
                    // if (resp && resp.data) {
                    //     that.$forceUpdate()
                    //     uni.reLaunch({
                    //         url: '/pages/home/home'
                    //     })
                    // }
                    that.$message.hideLoading();
                },
                fail: function (err) {
                    // 登录授权失败
                    // err.code是错误码
                }
            })
        },
        handleWechatClick() {
            let that = this
            // 微信登录
@@ -430,55 +612,16 @@
                "provider": "weixin",
                "onlyAuthorize": true, // 微信登录仅请求授权认证
                success: async function (event) {
                    console.log("客户端成功获取授权临时票据(code),向业务服务器发起登录请求。")
                    console.log(event)
                    const { code } = event
                    console.log('code', code)
                    that.$message.showLoading();
                    const resp = await that.$store.dispatch('loginwx', { code })
                    const resp = await that.$store.dispatch('loginwx', { code,phoneNumber:that.wxUser.phoneNumber,purePhoneNumber:that.wxUser.purePhoneNumber })
                    if (resp && resp.data) {
                        that.$forceUpdate()
                        uni.reLaunch({
                            url: '/pages/home/home'
                        })
                    }
                    // const resp = await that.$http.request('get', '/api/wx/jscode2session', {
                    //     params: {
                    //         jsCode: code,
                    //         userType: that.apitype.replace("login", "").toLowerCase()
                    //     }
                    // });
                    that.$message.hideLoading();
                    // console.log('resp', resp)
                    // if (resp && resp.data) {
                    //     var cts = resp.data;
                    //     var openid = cts.openid; //openid 用户唯一标识
                    //     if (cts && cts.openid) {
                    //         that.$storage.setItem('openid', cts.openid);
                    //     }
                    //     var session_key = cts.session_key; //session_key  会话密钥
                    //     if (true) {
                    //         if (!!cts.errmsg) {
                    //             that.$message.showToast('获取失败' + cts.errmsg);
                    //         } else {
                    //             //成功了,再调用
                    //             uni.getUserInfo({
                    //             provider: 'weixin',
                    //             success: function (infoRes) {
                    //                 console.log("uni.getUserInfo")
                    //                 console.log(infoRes)
                    //                 console.log('用户信息:', infoRes.userInfo);
                    //             },
                    //             fail: function (err) {
                    //                 console.error('获取用户信息失败:', err);
                    //             },
                    //             });
                    //         }
                    //     }
                    // }
                },
                fail: function (err) {
                    // 登录授权失败
@@ -893,4 +1036,5 @@
    font-size: 18rpx;
    margin-top:5rpx;
}
</style>