This commit is contained in:
Tivibra
2025-09-27 16:28:38 +08:00
parent 86cfcc5af1
commit 4b8498203d
21 changed files with 3997 additions and 343 deletions

View File

@@ -48,10 +48,10 @@ export const useUserStore = defineStore('user', () => {
// 4. 保存用户信息
setUserInfo({
token: loginData.token,
token: loginData.data.token,
nickName: userProfileRes.userInfo.nickName,
avatarUrl: userProfileRes.userInfo.avatarUrl,
openid: loginData.openid
openid: loginData.data.openid
});
return Promise.resolve(loginData);
@@ -63,20 +63,6 @@ export const useUserStore = defineStore('user', () => {
// 获取用户信息
function getUserProfile() {
// H5环境下模拟用户信息
// #ifdef H5
return new Promise((resolve) => {
resolve({
userInfo: {
nickName: 'H5测试用户',
avatarUrl: '/static/default-avatar.png'
}
});
});
// #endif
// 非H5环境下获取真实用户信息
// #ifndef H5
return new Promise((resolve, reject) => {
uni.getUserProfile({
desc: '用于完善用户资料',
@@ -84,77 +70,61 @@ export const useUserStore = defineStore('user', () => {
resolve(res);
},
fail: (err) => {
console.error('获取用户信息失败:', err);
reject(err);
}
});
});
// #endif
}
// 获取微信登录凭证
function getWxLogin() {
// H5环境下模拟登录凭证
// #ifdef H5
return new Promise((resolve) => {
resolve({ code: 'mock-code-for-h5' });
});
// #endif
// 非H5环境下获取真实登录凭证
// #ifndef H5
return new Promise((resolve, reject) => {
uni.login({
provider: 'weixin',
success: (res) => {
resolve(res);
if (res.code) {
resolve(res);
} else {
reject(new Error('获取登录凭证失败'));
}
},
fail: (err) => {
console.error('微信登录失败:', err);
reject(err);
}
});
});
// #endif
}
// 调用后端登录接口
function wxLogin(code, userInfo) {
// H5环境下模拟登录避免API超时
// #ifdef H5
return new Promise((resolve) => {
setTimeout(() => {
resolve({
token: 'mock-token-for-h5',
openid: 'mock-openid-for-h5'
});
}, 300);
});
// #endif
// 非H5环境下调用实际接口
// #ifndef H5
return new Promise((resolve, reject) => {
uni.request({
url: 'https://your-api.com/api/login/wechat',
url: 'http://8.145.52.111:8091/app/login',
method: 'POST',
data: {
code,
userInfo
code
},
header: {
'Content-Type': 'application/json'
},
success: (res) => {
if (res.statusCode === 200 && res.data.token) {
resolve(res.data);
console.log('登录响应:', res);
const resData = res.data;
if (resData.code === 200 && resData.data && resData.data.token) {
resolve(resData);
} else {
reject(new Error('Login failed: ' + JSON.stringify(res.data)));
reject(new Error('登录失败: ' + (resData.message || JSON.stringify(resData))));
}
},
fail: (err) => {
console.error('登录请求失败:', err);
reject(err);
},
// 设置超时时间
timeout: 5000
timeout: 10000 // 增加超时时间到10秒
});
});
// #endif
}
// 保存用户信息
@@ -171,6 +141,53 @@ export const useUserStore = defineStore('user', () => {
// 退出登录
function logout() {
return new Promise((resolve, reject) => {
try {
// 获取token
const currentToken = token.value;
// 尝试调用登出接口
uni.request({
url: 'http://8.145.52.111:8091/app/logout',
method: 'POST',
header: {
'Content-Type': 'application/json',
'Authorization': currentToken || ''
},
data: {
token: currentToken || ''
},
success: (res) => {
console.log('登出成功:', res);
uni.showToast({
title: '登出成功',
icon: 'success'
});
},
fail: (err) => {
console.error('登出失败:', err);
uni.showToast({
title: '登出接口调用失败',
icon: 'none'
});
},
complete: () => {
// 无论成功失败,都清除本地数据
clearUserData();
resolve();
}
});
} catch (error) {
console.error('登出过程发生异常:', error);
// 发生异常时也要清除本地数据
clearUserData();
resolve(); // 用resolve而不是reject确保登出操作总是成功
}
});
}
// 清除用户数据的辅助函数
function clearUserData() {
token.value = '';
nickName.value = '';
avatarUrl.value = '';
@@ -179,6 +196,43 @@ export const useUserStore = defineStore('user', () => {
// 清除本地存储
uni.removeStorageSync('userInfo');
uni.removeStorageSync('custom_token');
uni.removeStorageSync('user_token');
}
// 清理假登录数据
function clearFakeLoginData() {
console.log('清理假登录数据...');
// 检查是否有无效的登录数据
const userInfo = uni.getStorageSync('userInfo');
if (userInfo) {
try {
const parsedInfo = JSON.parse(userInfo);
// 如果没有token或token为空清除数据
if (!parsedInfo.token || parsedInfo.token.trim() === '') {
console.log('发现无效的userInfo清除中...');
uni.removeStorageSync('userInfo');
}
} catch (e) {
console.log('userInfo格式错误清除中...');
uni.removeStorageSync('userInfo');
}
}
// 清除其他可能的假token
const customToken = uni.getStorageSync('custom_token');
if (customToken && customToken.trim() === '') {
uni.removeStorageSync('custom_token');
}
const userToken = uni.getStorageSync('user_token');
if (userToken && userToken.trim() === '') {
uni.removeStorageSync('user_token');
}
// 重新初始化状态
init();
}
// 新增:设置用户同意须知状态
@@ -209,6 +263,7 @@ export const useUserStore = defineStore('user', () => {
setUserInfo,
logout,
setAgreedToTerms,
setVisitedMinePage
setVisitedMinePage,
clearFakeLoginData
};
});