|  |  |  | 
|---|
|  |  |  | // pages/login/login.js | 
|---|
|  |  |  | const app = getApp(); | 
|---|
|  |  |  | const storage = require('../../utils/storage.js'); | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | post | 
|---|
|  |  |  | } = require('../../api/request.js'); | 
|---|
|  |  |  | const { PROJECT_CONFIG } = require('../../utils/projectConfig.js'); | 
|---|
|  |  |  | const { setBaseUrl } = require('../../api/config.js'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Page({ | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 页面的初始数据 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | data: { | 
|---|
|  |  |  | phone: '', | 
|---|
|  |  |  | verificationCode: '', | 
|---|
|  |  |  | codeText: '获取验证码', | 
|---|
|  |  |  | counting: false, | 
|---|
|  |  |  | countDown: 60, | 
|---|
|  |  |  | projectName: '嘉峪关项目', // 默认项目名称 | 
|---|
|  |  |  | selectedProject: 'JYG', // 默认项目代码 | 
|---|
|  |  |  | showErrorDialog: false, | 
|---|
|  |  |  | fromBack: false,  // 标记是否是从返回按钮返回的 | 
|---|
|  |  |  | manualNavigate: false // 标记是否是通过编程方式导航的 | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 绑定手机号输入 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | bindPhoneInput: function (e) { | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | phone: e.detail.value | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 绑定验证码输入 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | bindCodeInput: function (e) { | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | verificationCode: e.detail.value | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 发送验证码 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | sendVerificationCode: function () { | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | phone, | 
|---|
|  |  |  | counting | 
|---|
|  |  |  | } = this.data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果正在倒计时,则不允许再次发送 | 
|---|
|  |  |  | if (counting) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 验证手机号格式 | 
|---|
|  |  |  | if (!/^1\d{10}$/.test(phone)) { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '请输入正确的手机号', | 
|---|
|  |  |  | icon: 'none' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 发送验证码请求 | 
|---|
|  |  |  | this.postCode(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 开始倒计时 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | startCountDown: function () { | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | counting: true, | 
|---|
|  |  |  | countDown: 60 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const timer = setInterval(() => { | 
|---|
|  |  |  | if (this.data.countDown <= 1) { | 
|---|
|  |  |  | clearInterval(timer); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | counting: false, | 
|---|
|  |  |  | codeText: '获取验证码' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | countDown: this.data.countDown - 1, | 
|---|
|  |  |  | codeText: `${this.data.countDown - 1}秒后重发` | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, 1000); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 保存timer引用,以便在页面卸载时清除 | 
|---|
|  |  |  | this.countDownTimer = timer; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 停止倒计时 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | stopCountDown: function () { | 
|---|
|  |  |  | if (this.countDownTimer) { | 
|---|
|  |  |  | clearInterval(this.countDownTimer); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | counting: false, | 
|---|
|  |  |  | codeText: '获取验证码' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 登录 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | login: function () { | 
|---|
|  |  |  | const { | 
|---|
|  |  |  | phone, | 
|---|
|  |  |  | verificationCode | 
|---|
|  |  |  | } = this.data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 验证手机号和验证码 | 
|---|
|  |  |  | if (!/^1\d{10}$/.test(phone)) { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '请输入正确的手机号', | 
|---|
|  |  |  | icon: 'none' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (!/^\d{6}$/.test(verificationCode)) { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '请输入6位验证码', | 
|---|
|  |  |  | icon: 'none' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 显示加载中 | 
|---|
|  |  |  | wx.showLoading({ | 
|---|
|  |  |  | title: '登录中...', | 
|---|
|  |  |  | mask: true | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 标记为手动导航,确保不会触发返回逻辑 | 
|---|
|  |  |  | console.log('登录按钮点击,设置manualNavigate=true'); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | manualNavigate: true | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.wsLogin(); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 跳转到注册页面 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | goToRegister: function () { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '注册功能暂未开放', | 
|---|
|  |  |  | icon: 'none', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 跳转到忘记密码页面 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | goToForgetPassword: function () { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '找回密码功能暂未开放', | 
|---|
|  |  |  | icon: 'none', | 
|---|
|  |  |  | duration: 2000 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 跳转到账号密码登录页面 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | goToAccountLogin: function() { | 
|---|
|  |  |  | // 获取当前项目信息,传递给accountLogin页面 | 
|---|
|  |  |  | const { selectedProject, projectName } = this.data; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 跳转到账号密码登录页面 | 
|---|
|  |  |  | wx.navigateTo({ | 
|---|
|  |  |  | url: `/pages/accountLogin/accountLogin?project=${selectedProject}&projectName=${projectName}` | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 生命周期函数--监听页面加载 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | onLoad(options) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | onLoad: function (options) { | 
|---|
|  |  |  | console.log('login页面加载,options:', options); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置页面数据 | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | fromBack: false,  // 标记是否是从返回按钮返回的 | 
|---|
|  |  |  | manualNavigate: false // 标记是否是通过编程方式导航的 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 从URL参数获取项目信息 | 
|---|
|  |  |  | if (options && options.project) { | 
|---|
|  |  |  | const project = options.project; | 
|---|
|  |  |  | // 直接使用传入的项目名称,不再手动转换 | 
|---|
|  |  |  | const projectName = options.projectName || '默认项目'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | console.log(`从URL参数获取项目信息: ${project} (${projectName})`); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | selectedProject: project, | 
|---|
|  |  |  | projectName: projectName | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 同步更新全局项目设置 | 
|---|
|  |  |  | if (getApp().globalData) { | 
|---|
|  |  |  | getApp().globalData.selectedProject = project; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置对应的tag | 
|---|
|  |  |  | if (project === 'JYG') { | 
|---|
|  |  |  | getApp().globalData.tag = 'ym'; | 
|---|
|  |  |  | } else if (project === 'MQ') { | 
|---|
|  |  |  | getApp().globalData.tag = 'mq'; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 更新 BASEURL | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | // 使用导入的setBaseUrl函数设置baseUrl | 
|---|
|  |  |  | setBaseUrl(project); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 从PROJECT_CONFIG中获取serverUrl | 
|---|
|  |  |  | const serverUrl = PROJECT_CONFIG[project]?.serverUrl; | 
|---|
|  |  |  | if (serverUrl) { | 
|---|
|  |  |  | getApp().globalData.baseUrl = serverUrl; | 
|---|
|  |  |  | console.log('设置baseUrl成功:', serverUrl); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.error('设置baseUrl失败:', e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查项目配置的登录方式是否与当前页面匹配 | 
|---|
|  |  |  | const projectConfig = PROJECT_CONFIG[project]; | 
|---|
|  |  |  | if (projectConfig && projectConfig.loginType === 'account') { | 
|---|
|  |  |  | console.log(`当前项目配置的登录方式为account,自动跳转到账号密码登录页面`); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置手动导航标记,避免触发返回逻辑 | 
|---|
|  |  |  | this.setData({ manualNavigate: true }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 延迟执行跳转,确保页面完全加载 | 
|---|
|  |  |  | setTimeout(() => { | 
|---|
|  |  |  | wx.redirectTo({ | 
|---|
|  |  |  | url: `/pages/accountLogin/accountLogin?project=${project}&projectName=${projectName}` | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, 100); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('未从URL获取到项目信息,使用默认值'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | 
|---|
|  |  |  | * 生命周期函数--监听页面隐藏 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | onHide() { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果不是通过编程方式导航,则可能是点击了返回按钮 | 
|---|
|  |  |  | // 注意:在某些情况下,微信可能会直接调用onUnload而跳过onHide | 
|---|
|  |  |  | if (!this.data.manualNavigate) { | 
|---|
|  |  |  | console.log('页面隐藏,可能是点击了返回按钮'); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | fromBack: true | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果页面隐藏但未登录,记录一个时间戳,帮助识别是否是返回操作 | 
|---|
|  |  |  | if (!getApp().globalData.isLoggedIn) { | 
|---|
|  |  |  | this.hideTimestamp = Date.now(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('页面隐藏,是通过代码导航的'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 生命周期函数--监听页面卸载 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | onUnload() { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 清除验证码倒计时定时器 | 
|---|
|  |  |  | if (this.countDownTimer) { | 
|---|
|  |  |  | clearInterval(this.countDownTimer); | 
|---|
|  |  |  | this.countDownTimer = null; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 记录退出登录页面的情况 | 
|---|
|  |  |  | console.log('登录页面卸载,fromBack:', this.data.fromBack, 'manualNavigate:', this.data.manualNavigate, '登录状态:', !!getApp().globalData.isLoggedIn); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果是登录成功,不执行返回逻辑 | 
|---|
|  |  |  | if (getApp().globalData.isLoggedIn) { | 
|---|
|  |  |  | console.log('用户已登录,无需执行返回逻辑'); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查是否是通过编程方式明确设置了导航 | 
|---|
|  |  |  | // 如果没有明确设置,就假定是返回操作 | 
|---|
|  |  |  | if (!this.data.manualNavigate) { | 
|---|
|  |  |  | console.log('页面卸载时未设置manualNavigate,假定是返回按钮操作'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 尝试使用wx.navigateBack返回上一页(如果可行) | 
|---|
|  |  |  | const pages = getCurrentPages(); | 
|---|
|  |  |  | if (pages.length > 1) { | 
|---|
|  |  |  | console.log('检测到有上一页,使用navigateBack返回'); | 
|---|
|  |  |  | wx.navigateBack({ | 
|---|
|  |  |  | delta: 1, | 
|---|
|  |  |  | success: () => { | 
|---|
|  |  |  | // 通过eventChannel向上一个页面传递数据 | 
|---|
|  |  |  | const eventChannel = pages[pages.length - 2].getOpenerEventChannel(); | 
|---|
|  |  |  | if (eventChannel && eventChannel.emit) { | 
|---|
|  |  |  | eventChannel.emit('fromLogin', { fromLogin: true }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | console.log('已成功返回到上一页面'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('无上一页,使用备用返回方式'); | 
|---|
|  |  |  | // 没有上一页,使用备用方法 | 
|---|
|  |  |  | this.backupReturnToHome(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('通过编程方式离开登录页面'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 页面相关事件处理函数--监听用户下拉动作 | 
|---|
|  |  |  | 
|---|
|  |  |  | onShareAppMessage() { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 登录 | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | login:function(e) { | 
|---|
|  |  |  | console.log("login") | 
|---|
|  |  |  | wx.reLaunch({ | 
|---|
|  |  |  | url: 'pages/home/home', | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //获取验证码 | 
|---|
|  |  |  | postCode: function () { | 
|---|
|  |  |  | const params = { | 
|---|
|  |  |  | url: 'wx/client/send_sms?phoneNumber=' + this.data.phone | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | post(params) | 
|---|
|  |  |  | .then((data) => { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '验证码已发送', | 
|---|
|  |  |  | icon: 'success', | 
|---|
|  |  |  | duration: 2000, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | codeSent: true, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | // 开始倒计时 | 
|---|
|  |  |  | this.startCountDown(); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch((error) => { | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: error.msg, | 
|---|
|  |  |  | icon: 'none' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | console.error('Failed to add item:', error); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | wsLogin() { | 
|---|
|  |  |  | // 标记为手动导航 | 
|---|
|  |  |  | console.log('wsLogin调用,设置manualNavigate=true'); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | manualNavigate: true | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.login({ | 
|---|
|  |  |  | success: res => { | 
|---|
|  |  |  | if (res.code) { | 
|---|
|  |  |  | console.log('微信登录成功,获取到的code:', res.code); | 
|---|
|  |  |  | // 发送 res.code 到后台服务器换取 openId, sessionKey, unionId | 
|---|
|  |  |  | this.verify(res.code) | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | console.log('微信登录失败!' + res.errMsg); | 
|---|
|  |  |  | // 登录失败时重置状态 | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | manualNavigate: false | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: err => { | 
|---|
|  |  |  | console.error('微信登录API调用失败:', err); | 
|---|
|  |  |  | // 登录失败,重置导航标记 | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | manualNavigate: false | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | //用户绑定 | 
|---|
|  |  |  | verify(wxCode) { | 
|---|
|  |  |  | console.log('verify调用,确认manualNavigate=', this.data.manualNavigate); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const params = { | 
|---|
|  |  |  | url: 'wx/client/verify', | 
|---|
|  |  |  | data: { | 
|---|
|  |  |  | phoneNumber: this.data.phone, | 
|---|
|  |  |  | securityCode: this.data.verificationCode, | 
|---|
|  |  |  | code: wxCode | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | post(params) | 
|---|
|  |  |  | .then((data) => { | 
|---|
|  |  |  | wx.hideLoading(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | console.log('验证成功,准备保存用户数据'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 确保全局对象已初始化 | 
|---|
|  |  |  | if (!getApp().globalData) { | 
|---|
|  |  |  | getApp().globalData = {}; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 保存会话ID和客户端ID | 
|---|
|  |  |  | getApp().globalData.sessionId = String(data.content.sessionId); | 
|---|
|  |  |  | storage.setItem("sessionId", String(data.content.sessionId)); | 
|---|
|  |  |  | getApp().globalData.clientId = String(data.content.clientId); | 
|---|
|  |  |  | storage.setItem("clientId", String(data.content.clientId)); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 保存用户信息 | 
|---|
|  |  |  | const userInfo = { | 
|---|
|  |  |  | sessionId: String(data.content.sessionId), | 
|---|
|  |  |  | clientId: String(data.content.clientId), | 
|---|
|  |  |  | phone: this.data.phone, | 
|---|
|  |  |  | token: data.content.token || '', | 
|---|
|  |  |  | project: this.data.selectedProject | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 保存到全局变量 | 
|---|
|  |  |  | getApp().globalData.userInfo = userInfo; | 
|---|
|  |  |  | getApp().globalData.isLoggedIn = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 保存到本地存储 | 
|---|
|  |  |  | storage.setItem("userInfo", JSON.stringify(userInfo)) | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | console.log('用户信息保存成功'); | 
|---|
|  |  |  | return storage.setItem("isLoggedIn", "true"); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | // 保存userData信息,包含sessionId和tag | 
|---|
|  |  |  | const userData = JSON.stringify({ | 
|---|
|  |  |  | sessionId: String(data.content.sessionId), | 
|---|
|  |  |  | tag: this.data.selectedProject === 'JYG' ? 'ym' : (this.data.selectedProject === 'MQ' ? 'mq' : 'ym'), | 
|---|
|  |  |  | project: this.data.selectedProject, | 
|---|
|  |  |  | phone: this.data.phone, | 
|---|
|  |  |  | clientName: data.content.clientName || '', | 
|---|
|  |  |  | clientId: String(data.content.clientId) | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return storage.setItem("userData", userData); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .then(() => { | 
|---|
|  |  |  | console.log('登录状态和项目信息保存成功'); | 
|---|
|  |  |  | this.bindSuccess(); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(err => { | 
|---|
|  |  |  | console.warn('保存用户信息过程中出错,但不影响继续操作:', err); | 
|---|
|  |  |  | this.bindSuccess(); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch((error) => { | 
|---|
|  |  |  | wx.hideLoading(); | 
|---|
|  |  |  | console.error('验证请求失败:', error); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 验证失败,需要重置导航标记 | 
|---|
|  |  |  | console.log('验证失败,重置manualNavigate=false'); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | manualNavigate: false | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: error.msg || '验证失败', | 
|---|
|  |  |  | icon: 'error', | 
|---|
|  |  |  | duration: 3000, | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | bindSuccess: function () { | 
|---|
|  |  |  | // 设置标记,表示通过编程方式导航 | 
|---|
|  |  |  | console.log('绑定成功,最终确认manualNavigate=true'); | 
|---|
|  |  |  | this.setData({ | 
|---|
|  |  |  | manualNavigate: true, | 
|---|
|  |  |  | fromBack: false // 确保不会被识别为返回操作 | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 设置全局登录状态 | 
|---|
|  |  |  | getApp().globalData.isLoggedIn = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | wx.showToast({ | 
|---|
|  |  |  | title: '绑定成功', | 
|---|
|  |  |  | icon: 'success', | 
|---|
|  |  |  | duration: 1500, | 
|---|
|  |  |  | mask: true, | 
|---|
|  |  |  | success: () => { | 
|---|
|  |  |  | // 延迟跳转,确保Toast显示完成 | 
|---|
|  |  |  | setTimeout(() => { | 
|---|
|  |  |  | console.log('登录成功,准备返回到首页'); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 获取当前页面栈 | 
|---|
|  |  |  | const pages = getCurrentPages(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 检查是否有上一个页面可返回 | 
|---|
|  |  |  | if (pages.length > 1) { | 
|---|
|  |  |  | // 应用一个技巧,先设置前一个页面的参数 | 
|---|
|  |  |  | try { | 
|---|
|  |  |  | if (pages.length > 1) { | 
|---|
|  |  |  | const prevPage = pages[pages.length - 2]; | 
|---|
|  |  |  | if (prevPage && prevPage.options) { | 
|---|
|  |  |  | // 设置 fromLogin 参数 | 
|---|
|  |  |  | prevPage.options.fromLogin = 'true'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 如果页面有onLoad方法,则可能需要传递参数 | 
|---|
|  |  |  | if (typeof prevPage.onLoad === 'function') { | 
|---|
|  |  |  | let newOptions = {...prevPage.options}; | 
|---|
|  |  |  | newOptions.fromLogin = 'true'; | 
|---|
|  |  |  | prevPage.onLoad(newOptions); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } catch (e) { | 
|---|
|  |  |  | console.error('设置前一页参数失败:', e); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 返回到上一个页面 | 
|---|
|  |  |  | wx.navigateBack({ | 
|---|
|  |  |  | delta: 1, | 
|---|
|  |  |  | success: () => { | 
|---|
|  |  |  | console.log('已成功返回到上一页面'); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | fail: (err) => { | 
|---|
|  |  |  | console.error('navigateBack失败:', err); | 
|---|
|  |  |  | // 如果返回失败,使用重定向 | 
|---|
|  |  |  | wx.redirectTo({ | 
|---|
|  |  |  | url: '/pages/home/home?fromLogin=true' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | // 如果没有上一个页面,则重新打开home页面 | 
|---|
|  |  |  | wx.redirectTo({ | 
|---|
|  |  |  | url: '/pages/home/home?fromLogin=true' | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, 1500); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | }) | 
|---|