// pages/mine/mine.js const { syncTokens, getCloudTokens, showToast, showLoading, hideLoading } = require('../../utils/util'); Page({ /** * 页面的初始数据 */ data: { loading: false, uploading: false, isLoggedIn: false, userInfo: null, currentYear: new Date().getFullYear() }, onShow: function() { // 每次显示页面时检查登录状态 const app = getApp(); this.setData({ isLoggedIn: !!app.globalData.token, userInfo: app.globalData.userInfo }); }, /** * 数据备份 */ uploadData: async function() { // 检查登录状态 if (!this.data.isLoggedIn) { showToast('请先登录'); return; } try { const tokens = wx.getStorageSync('tokens') || []; if (!tokens.length) { showToast('未发现本地数据'); return; } // 显示确认对话框 const confirmed = await new Promise(resolve => { wx.showModal({ title: '数据备份', content: '确定备份本地数据到云端?', confirmText: '确定', confirmColor: '#ff9c10', success: res => resolve(res.confirm) }); }); if (!confirmed) return; this.setData({ uploading: true }); showLoading('正在备份...'); // 同步到云端 await syncTokens(tokens); showToast('数据备份成功', 'success'); } catch (error) { console.error('数据备份失败:', error); showToast('数据备份失败,请重试'); } finally { this.setData({ uploading: false }); hideLoading(); } }, /** * 数据恢复 */ restoreData: async function() { // 检查登录状态 if (!this.data.isLoggedIn) { showToast('请先登录'); return; } try { this.setData({ loading: true }); showLoading('正在获取云端数据...'); // 获取云端数据 const cloudTokens = await getCloudTokens(); if (!cloudTokens || !cloudTokens.length) { showToast('未发现备份数据'); return; } // 显示确认对话框 const confirmed = await new Promise(resolve => { wx.showModal({ title: '云端数据恢复', content: `发现${cloudTokens.length}条数据,确定使用云端数据覆盖本地记录?`, confirmColor: '#ff9c10', success: res => resolve(res.confirm) }); }); if (!confirmed) return; // 保存到本地 await wx.setStorageSync('tokens', cloudTokens); showToast('数据恢复成功', 'success'); } catch (error) { console.error('数据恢复失败:', error); showToast('数据恢复失败,请重试'); } finally { this.setData({ loading: false }); hideLoading(); } }, /** * 用户授权登录 */ goAuth: async function() { if (this.data.isLoggedIn) return; try { showLoading('登录中...'); const app = getApp(); await app.userLogin(); // 更新登录状态,使用默认值 this.setData({ isLoggedIn: !!app.globalData.token, userInfo: { avatarUrl: wx.getStorageSync('userAvatar') || '/images/default-avatar.png', nickName: wx.getStorageSync('userNickName') || '微信用户' } }); showToast('登录成功', 'success'); } catch (error) { console.error('登录失败:', error); showToast('登录失败,请重试'); } finally { hideLoading(); } }, /** * 处理头像选择 */ onChooseAvatar: async function(e) { const { avatarUrl } = e.detail; try { showLoading('更新头像中...'); // 更新头像 this.setData({ 'userInfo.avatarUrl': avatarUrl }); // 保存到本地存储 wx.setStorageSync('userAvatar', avatarUrl); showToast('头像更新成功', 'success'); } catch (error) { console.error('头像更新失败:', error); showToast('头像更新失败,请重试'); } finally { hideLoading(); } }, /** * 处理昵称修改 */ onNicknameChange: function(e) { const nickName = e.detail.value; if (!nickName) return; try { // 更新昵称 this.setData({ 'userInfo.nickName': nickName }); // 保存到本地存储 wx.setStorageSync('userNickName', nickName); } catch (error) { console.error('昵称更新失败:', error); showToast('昵称更新失败,请重试'); } }, /** * 页面相关事件处理函数--监听用户下拉动作 */ onPullDownRefresh: function() { wx.stopPullDownRefresh(); }, /** * 转发 */ onShareAppMessage: function() { return { title: '支持云端备份的动态验证码', path: '/pages/index/index', imageUrl: '/images/share.png' }; } });