import { login, loginByWeChat, setPhone, getUserInfo, updatePushId } from '@/api/user' let univerifyManager = null; let registrationID = uni.getStorageSync("registrationID"); let userPhone = ""; let unionid = ""; let loginType = 3; //1账号密码 2:微信登录 3:手机号一键登录 export async function showLoginPage(provider) { // #ifdef APP-PLUS // if(this.$qconfig.applyLogin){ // return; // } if (registrationID == null || registrationID == "") { try { registrationID = await getRegistrationID(); console.log('推送ID:', registrationID); } catch (err) { registrationID = '' console.error('获取失败:', err); } } // 微信一键登录 if (provider == "weixin") { weixinLogin() } else { // 手机号一键登录 let that = this; univerifyManager = uni.getUniverifyManager(); univerifyLogin(that); const loginCallBack = (res) => { // 获取一键登录弹框协议勾选状态 univerifyManager.getCheckBoxState({ success(res) { // that.$qconfig.applyLogin=false; if (!res.state) { uni.showToast({ title: "请同意服务条款和隐私政策", icon: 'none', position: 'bottom' }); return; } loginType = 2; uni.login({ provider: "weixin", onlyAuthorize: false, success: async (res) => { console.log('login success:成功', JSON.stringify(res)); let that = this; uni.showLoading({ title: "处理中..." }); const params = { code: res.code, jpushId: registrationID }; loginByWeChatAct(111, params); }, fail: (err) => { console.log('login fail:', JSON.stringify(err)); // 未开通 if (err.code == 1000) { uni.showModal({ title: '登录失败', content: `${err.errMsg}\n,错误码:${err.code}`, confirmText: '开通指南', cancelText: '确定', success: (res) => { if (res.confirm) { setTimeout(() => { plus.runtime.openWeb( 'https://ask.dcloud.net.cn/article/37965' ) }, 500) } } }); return; } if (err.code == '-100') { uni.showToast({ title: "授权拒绝", icon: "none" }); return; } // 一键登录预登陆失败 if (err.code == '30005') { uni.showModal({ showCancel: false, title: '预登录失败', content: err.errMsg }); return; } if (err.code == 30006) { uni.showToast({ title: "登录已取消,请重新操作", icon: "none" }); return; } // 一键登录用户关闭验证界面 if (err.code != '30003') { uni.showModal({ showCancel: false, title: '登录失败', content: JSON.stringify(err) }); } }, complete: () => { } }); // 关闭一键登录弹框 univerifyManager.close(); } }); } // 订阅自定义按钮点击事件 univerifyManager.onButtonsClick(loginCallBack); // 取消订阅自定义按钮点击事件 //univerifyManager.offButtonsClick(loginCallBack); // this.$qconfig.applyLogin=true; } // #endif // #ifdef H5 if (String(navigator.userAgent.toLowerCase().match(/MicroMessenger/i)) === "micromessenger") { let url = window.location.href; let urlPaths = url.split("/h5"); uni.setStorageSync('beforLoginPage', urlPaths[1]); uni.navigateTo({ url: "/pages/auth/h5WxLogin" }); } else { uni.navigateTo({ url: "/pages/auth/passwordLogin" }); } // #endif } const univerifyLogin = function(that) { univerifyManager.login({ provider: 'univerify', univerifyStyle: { // 自定义登录框样式 fullScreen: true, icon: { "path": "static/logo.png", // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo "width": "80px", //图标宽度 默认值:60px "height": "80px", //图标高度 默认值:60px }, authButton: { "title": "本机号码一键登录", "normalColor": "#018C39", "highlightColor": "#018C39", }, otherLoginButton: { // "title": "微信快捷登录", "visible": "true", "borderRadius": "24px", "borderColor": "#ECECEC", }, closeIcon: { "path": "static/images/icon_close.png", "width": "160px", //图标宽度 默认值:60px (HBuilderX 4.0支持) "height": "160px" //图标高度 默认值:60px (HBuilderX 4.0支持) }, buttons: { "iconWidth": "55px", // 图标宽度(高度等比例缩放) 默认值:45px "list": [ // { // "provider": "apple", // "iconPath": "/static/apple.png" // 图标路径仅支持本地图片 // }, { "provider": "weixin", "iconPath": "/static/images/wechat.png" // 图标路径仅支持本地图片 } ] }, privacyTerms: { "defaultCheckBoxState": false, // 条款勾选框初始状态 默认值: true "isCenterHint": false, //未勾选服务条款时点击登录按钮的提示是否居中显示 默认值: false (3.7.13+ 版本支持) "uncheckedImage": "/static/icons/radio_default_icon.png", // 可选 条款勾选框未选中状态图片(仅支持本地图片 建议尺寸 24x24px)(3.2.0+ 版本支持) "checkedImage": "/static/icons/radio_choose_icon.png", // 可选 条款勾选框选中状态图片(仅支持本地图片 建议尺寸24x24px)(3.2.0+ 版本支持) "checkBoxSize": 13, // 可选 条款勾选框大小 "textColor": "#BBBBBB", // 文字颜色 默认值:#BBBBBB "termsColor": "#018C39", // 协议文字颜色 默认值: #5496E3 "prefix": "我已阅读并同意", // 条款前的文案 默认值:“我已阅读并同意” "suffix": "并使用本机号码登录", // 条款后的文案 默认值:“并使用本机号码登录” "privacyItems": [ // 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效 { "url": "https://userapp.zhengzefeng.com/h5/userAgreement", // 点击跳转的协议详情页面 "title": "用户服务协议" // 协议名称 }, { "url": "https://userapp.zhengzefeng.com/h5/privacyPolicy", // 点击跳转的协议详情页面 "title": "隐私保护" // 协议名称 } // { // "url": "https://userapp.his.cdwjyyh.com/h5/healthCustomerService", // 点击跳转的协议详情页面 // "title": "健康客服协议" // 协议名称 // } ] }, }, success(res) { // 登录成功 console.log("qxj univerify login:" + JSON.stringify(res .authResult)); // {openid:'登录授权唯一标识',access_token:'接口返回的 token'} //uni.hideLoading(); // that.$qconfig.applyLogin=false; loginType = 3; loginByUniverify(res.authResult, 0); }, fail(res) { //uni.hideLoading(); // that.$qconfig.applyLogin=false; if (res.code == 30002) { // uni.closeAuthView() uni.navigateTo({ url: "/pages/auth/passwordLogin" }) } else if (res.code == 30008) { //用户点击了自定义按钮 uni.getCheckBoxState({ success(res) { console.log(res.state) // Boolean 用户是否勾选了选框 console.log(res.errMsg) if (!res.state) { uni.showToast({ title: "请同意服务条款和隐私政策", icon: 'none', position: 'bottom' }); return; } loginType = 2; uni.login({ provider: "weixin", onlyAuthorize: false, success: async (res) => { console.log('login success:', JSON.stringify(res)); let that = this; uni.showLoading({ title: "处理中..." }); const params = { code: res.code }; console.log('微信', params) loginByWeChatAct(params); }, fail: (err) => { console.log('login fail:', JSON.stringify(err)); // 未开通 if (err.code == 1000) { uni.showModal({ title: '登录失败', content: `${err.errMsg}\n,错误码:${err.code}`, confirmText: '开通指南', cancelText: '确定', success: (res) => { if (res.confirm) { setTimeout(() => { plus.runtime .openWeb( 'https://ask.dcloud.net.cn/article/37965' ) }, 500) } } }); return; } if (err.code == '-100') { uni.showToast({ title: "授权拒绝", icon: "none" }); return; } // 一键登录预登陆失败 if (err.code == '30005') { uni.showModal({ showCancel: false, title: '预登录失败', content: err.errMsg }); return; } // 一键登录用户关闭验证界面 if (err.code != '30003') { uni.showModal({ showCancel: false, title: '登录失败', content: JSON.stringify(err) }); } }, complete: () => { } }); }, fail(res) { console.log(res.errCode) console.log(res.errMsg) } }); console.log("----qxj 一键登录调用2-----"); } else if (res.code == 30003) { //关闭验证界面 return false; } else if (res.code == 30005) { //预登录失败 //uni.showToast({title: "一键登录失败请检查网络和SIM卡是否可用",icon: 'none',position:'bottom'}); setTimeout(function() { uni.navigateTo({ url: "/pages/auth/passwordLogin" }); }, 1800); } else { } //登录失败 console.log("微信一键登录failRes:" + JSON.stringify(res)); } }); }; export function loginByWeChatAct(params) { loginByWeChat(params).then(res => { if (res.code == 200) { if (res.user != null) { uni.hideLoading(); uni.setStorageSync('AppToken', res.token); uni.setStorageSync('userInfo', JSON.stringify(res.user)); uni.closeAuthView(); uni.$emit('refreshUserInfo', {}); // // #ifdef APP-PLUS // const jyJPush = uni.requireNativePlugin('JY-JPush'); // jyJPush.setJYJPushAlias({userAlias: registrationID}, result=> { // // 设置成功或者失败,都会通过这个result回调返回数据;数据格式保持极光返回的安卓/iOS数据一致 // // 注:若没有返回任何数据,考虑是否初始化完成 // console.log("qxj userAlias "+JSON.stringify(result)); // }); // // #endif uni.reLaunch({ url: "/pages/home/index" }) } else { unionid = res.unionid; if (res.isNew) { bindMobile(); } } } else { uni.hideLoading(); console.log(res) uni.showToast({ title: res.msg, icon: 'none' }); } }, rej => {} ); } export function bindMobile() { // #ifdef APP-PLUS //uni.showLoading({title:""}); uni.login({ provider: 'univerify', univerifyStyle: { // 自定义登录框样式 fullScreen: false, authButton: { "title": "绑定手机号", "normalColor": "#018C39", "highlightColor": "#018C39", }, privacyTerms: { "defaultCheckBoxState": true, // 条款勾选框初始状态 默认值: true "isCenterHint": false, //未勾选服务条款时点击登录按钮的提示是否居中显示 默认值: false (3.7.13+ 版本支持) "uncheckedImage": "", // 可选 条款勾选框未选中状态图片(仅支持本地图片 建议尺寸 24x24px)(3.2.0+ 版本支持) "checkedImage": "", // 可选 条款勾选框选中状态图片(仅支持本地图片 建议尺寸24x24px)(3.2.0+ 版本支持) "checkBoxSize": 18, // 可选 条款勾选框大小 "textColor": "#BBBBBB", // 文字颜色 默认值:#BBBBBB "termsColor": "#018C39", // 协议文字颜色 默认值: #5496E3 "prefix": "我已阅读并同意", // 条款前的文案 默认值:“我已阅读并同意” "suffix": "并使用本机号码登录", // 条款后的文案 默认值:“并使用本机号码登录” "privacyItems": [ // 自定义协议条款,最大支持2个,需要同时设置url和title. 否则不生效 ] }, }, success(res) { // console.log("qxj univerify login:" + JSON.stringify(res .authResult)); // {openid:'登录授权唯一标识',access_token:'接口返回的 token'} loginByUniverify(res.authResult, 1); }, fail(res) { uni.hideLoading(); uni.closeAuthView(); if (res.errCode == 30005) { //预登录失败 //uni.showToast({title: "一键登录失败请检查网络和SIM卡是否可用",icon: 'none',position:'bottom'}); //setTimeout(function() { uni.navigateTo({ url: "/pages/auth/passwordLogin" }); //}, 1800); } console.log("qxj failRes:" + JSON.stringify(res)); } }); console.log("----qxj 一键登录调用3-----"); // #endif // #ifdef H5 uni.navigateTo({ url: "/pages/auth/passwordLogin" }); // #endif }; export function loginByUniverify(authResult, type) { uniCloud.callFunction({ name: 'loginByMobile', // 你的云函数名称 data: { access_token: authResult.access_token, // 客户端一键登录接口返回的access_token openid: authResult.openid // 客户端一键登录接口返回的openid } }).then(res => { console.log("qxj doUniverify:", JSON.stringify(res)); if (res.result.errCode == 0) { userPhone = res.result.phoneNumber; console.log("电话:", res.result.phoneNumber); if (type == 0) { loginActionAct(); } else { setPhoneAct(userPhone, unionid); } } else { uni.showToast({ title: res.result.message, icon: 'none' }); } }).catch(err => { // 处理错误 console.error('调用云函数失败:', err); // 详细记录错误信息 console.error('错误信息:', err.errMsg); }) } export function loginActionAct() { if (loginType == 3 && userPhone == null) { uni.showToast({ title: "请授权手机号登录", icon: 'none' }); return } var data = { phone: userPhone, jpushId: registrationID, loginType: loginType }; var that = this; uni.showLoading({ title: "处理中..." }); login(data).then(res => { uni.hideLoading(); if (res.code == 200) { uni.setStorageSync('AppToken', res.token); uni.setStorageSync('userInfo', JSON.stringify(res.user)); uni.closeAuthView(); // // #ifdef APP-PLUS // const jyJPush = uni.requireNativePlugin('JY-JPush'); // jyJPush.setJYJPushAlias({userAlias: registrationID}, result=> { // // 设置成功或者失败,都会通过这个result回调返回数据;数据格式保持极光返回的安卓/iOS数据一致 // // 注:若没有返回任何数据,考虑是否初始化完成 // console.log("qxj userAlias "+JSON.stringify(result)); // }); // // #endif uni.reLaunch({ url: "/pages/home/index" }) } else { console.log("loginActionAct error", res) uni.showToast({ title: res.msg, icon: 'none' }); } }, rej => {} ); } export function setPhoneAct(phone, unionId) { let params = { phone: phone, unionId: unionId }; setPhone(params).then(res => { uni.hideLoading(); if (res.code == 200) { uni.setStorageSync('AppToken', res.token); uni.setStorageSync('userInfo', JSON.stringify(res.user)); uni.closeAuthView(); // // #ifdef APP-PLUS // const jyJPush = uni.requireNativePlugin('JY-JPush'); // jyJPush.setJYJPushAlias({userAlias: registrationID}, result=> { // // 设置成功或者失败,都会通过这个result回调返回数据;数据格式保持极光返回的安卓/iOS数据一致 // // 注:若没有返回任何数据,考虑是否初始化完成 // console.log("qxj userAlias "+JSON.stringify(result)); // }); // // #endif } else { uni.showToast({ title: res.msg, icon: 'none' }); } }, rej => {} ); } export function getRegistrationID() { // #ifdef APP-PLUS return new Promise((resolve, reject) => { if (plus.runtime.isAgreePrivacy()) { uni.getPushClientId({ success: (res) => { resolve(res.cid) uni.setStorageSync("registrationID", res.cid); upPushClientId(res.cid) }, // 返回推送标识 cid fail: (err) => { console.log("getRegistrationID error:", err) reject(err) } }); } else { resolve('') } }); // #endif } export function weixinLogin() { loginType = 2; uni.login({ provider: "weixin", onlyAuthorize: false, success: async (res) => { console.log('login success:', JSON.stringify(res)); let that = this; uni.showLoading({ title: "处理中..." }); const params = { code: res.code, jpushId: registrationID }; console.log('login微信:', params); loginByWeChatAct(params); }, fail: (err) => { console.log('login fail:', JSON.stringify(err)); // 未开通 if (err.code == 1000) { uni.showModal({ title: '登录失败', content: `${err.errMsg}\n,错误码:${err.code}`, confirmText: '开通指南', cancelText: '确定', success: (res) => { if (res.confirm) { setTimeout(() => { plus.runtime.openWeb( 'https://ask.dcloud.net.cn/article/37965') }, 500) } } }); return; } // 授权拒绝 if (err.code == '-100') { uni.showToast({ title: "授权拒绝", icon: "none" }); return; } // 一键登录预登陆失败 if (err.code == '30005') { uni.showModal({ showCancel: false, title: '预登录失败', content: err.errMsg }); return; } if (err.code == 30006) { uni.showToast({ title: "登录已取消,请重新操作", icon: "none" }); return; } // 一键登录用户关闭验证界面 if (err.code != '30003') { uni.showModal({ showCancel: false, title: '登录失败', content: JSON.stringify(err) }); } }, complete: () => { } }); } function upPushClientId(pushId) { updatePushId({ pushId: pushId }) }