From 3008f0fcb87992077af811f9842793610fc52239 Mon Sep 17 00:00:00 2001
From: zuoxiao <zuoxiao>
Date: 星期二, 29 四月 2025 16:07:00 +0800
Subject: [PATCH] 优化首页项目切换逻辑,添加确认弹窗以提升用户体验;更新样式以增强项目选择的可视化效果。

---
 pages/login/login.js |  509 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 461 insertions(+), 48 deletions(-)

diff --git a/pages/login/login.js b/pages/login/login.js
index a957679..f5c4db2 100644
--- a/pages/login/login.js
+++ b/pages/login/login.js
@@ -1,4 +1,8 @@
 const app = getApp();
+const storage = require('../../utils/storage.js');
+const {
+  post
+} = require('../../api/request.js');
 
 Page({
 
@@ -6,79 +10,216 @@
    * 椤甸潰鐨勫垵濮嬫暟鎹�
    */
   data: {
-    mobile: '',
-    code: '',
-    codeSent: false,
-    countdown: 60,
+    phone: '',
+    verificationCode: '',
+    codeText: '鑾峰彇楠岃瘉鐮�',
+    counting: false,
+    countDown: 60,
+    projectName: '鍢夊唱鍏抽」鐩�', // 榛樿椤圭洰鍚嶇О
+    selectedProject: 'JYG', // 榛樿椤圭洰浠g爜
+    showErrorDialog: false,
+    fromBack: false,  // 鏍囪鏄惁鏄粠杩斿洖鎸夐挳杩斿洖鐨�
+    manualNavigate: false // 鏍囪鏄惁鏄�氳繃缂栫▼鏂瑰紡瀵艰埅鐨�
   },
 
-  bindMobileInput: function (e) {
+  /**
+   * 缁戝畾鎵嬫満鍙疯緭鍏�
+   */
+  bindPhoneInput: function (e) {
     this.setData({
-      mobile: e.detail.value,
+      phone: e.detail.value
     });
   },
-  sendCode: function () {
-    if (!this.data.mobile) {
+
+  /**
+   * 缁戝畾楠岃瘉鐮佽緭鍏�
+   */
+  bindCodeInput: function (e) {
+    this.setData({
+      verificationCode: e.detail.value
+    });
+  },
+
+  /**
+   * 鍙戦�侀獙璇佺爜
+   */
+  sendVerificationCode: function () {
+    const {
+      phone,
+      counting
+    } = this.data;
+
+    // 濡傛灉姝e湪鍊掕鏃讹紝鍒欎笉鍏佽鍐嶆鍙戦��
+    if (counting) {
+      return;
+    }
+
+    // 楠岃瘉鎵嬫満鍙锋牸寮�
+    if (!/^1\d{10}$/.test(phone)) {
       wx.showToast({
-        title: '璇疯緭鍏ユ墜鏈哄彿',
-        icon: 'none',
-        duration: 2000,
+        title: '璇疯緭鍏ユ纭殑鎵嬫満鍙�',
+        icon: 'none'
       });
       return;
     }
 
-    // 鍦ㄨ繖閲屽鐞嗗彂閫侀獙璇佺爜鐨勯�昏緫锛屽彲浠ヨ皟鐢ㄥ悗鍙版帴鍙e疄鐜�
-    // 浠ヤ笅鏄竴涓畝鍗曠殑绀轰緥锛屼粎浣滃弬鑰�
-    wx.showToast({
-      title: '楠岃瘉鐮佸凡鍙戦��',
-      icon: 'success',
-      duration: 2000,
-    });
 
-    this.setData({
-      codeSent: true,
-    });
 
-    // 鍚姩鍊掕鏃�
-    this.startCountdown();
+    // 鍙戦�侀獙璇佺爜璇锋眰
+    this.postCode();
   },
-  //鍊掕鏃�
-  startCountdown: function () {
-    let that = this;
-    let timer = setInterval(function () {
-      let countdown = that.data.countdown - 1;
-      that.setData({
-        countdown: countdown,
-      });
 
-      if (countdown <= 0) {
+  /**
+   * 寮�濮嬪�掕鏃�
+   */
+  startCountDown: function () {
+    this.setData({
+      counting: true,
+      countDown: 60
+    });
+
+    const timer = setInterval(() => {
+      if (this.data.countDown <= 1) {
         clearInterval(timer);
-        that.setData({
-          codeSent: false,
-          countdown: 60,
+        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 (e) {
-    console.log("login")
-    let userName = "寮犱笁"
-    wx.navigateTo({
-      url: '/pages/wxbind/wxbind'
-    })
+  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('鐧诲綍鎸夐挳鐐瑰嚮锛岃缃甿anualNavigate=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
+    });
+  },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍔犺浇
    */
-  onLoad(options) {
-
+  onLoad: function (options) {
+    console.log('login椤甸潰鍔犺浇锛宱ptions:', options);
+    
+    // 璁剧疆椤甸潰鏁版嵁
+    this.setData({
+      fromBack: false,  // 鏍囪鏄惁鏄粠杩斿洖鎸夐挳杩斿洖鐨�
+      manualNavigate: false // 鏍囪鏄惁鏄�氳繃缂栫▼鏂瑰紡瀵艰埅鐨�
+    });
+    
+    // 浠嶶RL鍙傛暟鑾峰彇椤圭洰淇℃伅
+    if (options && options.project) {
+      const project = options.project;
+      // 鐩存帴浣跨敤浼犲叆鐨勯」鐩悕绉帮紝涓嶅啀鎵嬪姩杞崲
+      const projectName = options.projectName || '榛樿椤圭洰';
+      
+      console.log(`浠嶶RL鍙傛暟鑾峰彇椤圭洰淇℃伅: ${project} (${projectName})`);
+      
+      this.setData({
+        selectedProject: project,
+        projectName: projectName
+      });
+      
+      // 鍚屾鏇存柊鍏ㄥ眬椤圭洰璁剧疆
+      if (getApp().globalData) {
+        getApp().globalData.selectedProject = project;
+        
+        // 璁剧疆瀵瑰簲鐨則ag
+        if (project === 'JYG') {
+          getApp().globalData.tag = 'ym';
+        } else if (project === 'MQ') {
+          getApp().globalData.tag = 'mq';
+        }
+        
+        // 鏇存柊 BASEURL
+        try {
+          const { PROJECT_URLS } = require('../../api/config.js');
+          getApp().globalData.baseUrl = PROJECT_URLS[project];
+        } catch (e) {
+          console.error('璁剧疆baseUrl澶辫触:', e);
+        }
+      }
+    } else {
+      console.log('鏈粠URL鑾峰彇鍒伴」鐩俊鎭紝浣跨敤榛樿鍊�');
+    }
   },
 
   /**
@@ -99,15 +240,75 @@
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰闅愯棌
    */
   onHide() {
-
+    // 濡傛灉涓嶆槸閫氳繃缂栫▼鏂瑰紡瀵艰埅锛屽垯鍙兘鏄偣鍑讳簡杩斿洖鎸夐挳
+    // 娉ㄦ剰锛氬湪鏌愪簺鎯呭喌涓嬶紝寰俊鍙兘浼氱洿鎺ヨ皟鐢╫nUnload鑰岃烦杩噊nHide
+    if (!this.data.manualNavigate) {
+      console.log('椤甸潰闅愯棌锛屽彲鑳芥槸鐐瑰嚮浜嗚繑鍥炴寜閽�');
+      this.setData({
+        fromBack: true
+      });
+      
+      // 濡傛灉椤甸潰闅愯棌浣嗘湭鐧诲綍锛岃褰曚竴涓椂闂存埑锛屽府鍔╄瘑鍒槸鍚︽槸杩斿洖鎿嶄綔
+      if (!getApp().globalData.isLoggedIn) {
+        this.hideTimestamp = Date.now();
+      }
+    } else {
+      console.log('椤甸潰闅愯棌锛屾槸閫氳繃浠g爜瀵艰埅鐨�');
+    }
   },
 
   /**
    * 鐢熷懡鍛ㄦ湡鍑芥暟--鐩戝惉椤甸潰鍗歌浇
    */
   onUnload() {
-
+    // 娓呴櫎楠岃瘉鐮佸�掕鏃跺畾鏃跺櫒
+    if (this.countDownTimer) {
+      clearInterval(this.countDownTimer);
+      this.countDownTimer = null;
+    }
+    
+    // 璁板綍閫�鍑虹櫥褰曢〉闈㈢殑鎯呭喌
+    console.log('鐧诲綍椤甸潰鍗歌浇锛宖romBack:', 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('閫氳繃缂栫▼鏂瑰紡绂诲紑鐧诲綍椤甸潰');
+    }
   },
+  
+  
+    
+
 
   /**
    * 椤甸潰鐩稿叧浜嬩欢澶勭悊鍑芥暟--鐩戝惉鐢ㄦ埛涓嬫媺鍔ㄤ綔
@@ -129,7 +330,219 @@
   onShareAppMessage() {
 
   },
-
-
-
+  //鑾峰彇楠岃瘉鐮�
+  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璋冪敤锛岃缃甿anualNavigate=true');
+    this.setData({
+      manualNavigate: true
+    });
+    
+    wx.login({
+      success: res => {
+        if (res.code) {
+          console.log('寰俊鐧诲綍鎴愬姛锛岃幏鍙栧埌鐨刢ode:', 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璋冪敤锛岀‘璁anualNavigate=', 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淇℃伅锛屽寘鍚玸essionId鍜宼ag
+            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('楠岃瘉澶辫触锛岄噸缃甿anualNavigate=false');
+        this.setData({
+          manualNavigate: false
+        });
+        
+        wx.showToast({
+          title: error.msg || '楠岃瘉澶辫触',
+          icon: 'error',
+          duration: 3000,
+        });
+      });
+  },
+  bindSuccess: function () {
+    // 璁剧疆鏍囪锛岃〃绀洪�氳繃缂栫▼鏂瑰紡瀵艰埅
+    console.log('缁戝畾鎴愬姛锛屾渶缁堢‘璁anualNavigate=true');
+    this.setData({
+      manualNavigate: true,
+      fromBack: false // 纭繚涓嶄細琚瘑鍒负杩斿洖鎿嶄綔
+    });
+    
+    // 璁剧疆鍏ㄥ眬鐧诲綍鐘舵��
+    getApp().globalData.isLoggedIn = true;
+    
+    
+    wx.showToast({
+      title: '缁戝畾鎴愬姛',
+      icon: 'success',
+      duration: 1500,
+      mask: true,
+      success: () => {
+        // 寤惰繜璺宠浆锛岀‘淇漈oast鏄剧ず瀹屾垚
+        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';
+                  
+                  // 濡傛灉椤甸潰鏈塷nLoad鏂规硶锛屽垯鍙兘闇�瑕佷紶閫掑弬鏁�
+                  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);
+      }
+    });
+  },
 })
\ No newline at end of file

--
Gitblit v1.8.0