otp/pages/mine/mine.js
“xHuPo” 2b8870a40e init
2025-06-09 13:35:15 +08:00

217 lines
No EOL
4.9 KiB
JavaScript

// 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'
};
}
});