217 lines
No EOL
4.9 KiB
JavaScript
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'
|
|
};
|
|
}
|
|
}); |