This commit is contained in:
FengHui
2026-05-15 14:16:31 +08:00
parent 5910b19131
commit e857c008b4
5 changed files with 197 additions and 47 deletions

View File

@@ -49,9 +49,12 @@ const useUserStore = defineStore("user", () => {
const userInfo = ref({});
const role = ref({});
const token = ref('')
const refreshToken = ref('')
const loginTime = ref(0)
const resume = ref({})
const Completion = ref('0%')
const seesionId = ref(uni.getStorageSync('seesionId') || '')
const SEVEN_DAYS = 7 * 24 * 60 * 60 * 1000
const login = (value) => {
hasLogin.value = true;
@@ -67,11 +70,15 @@ const useUserStore = defineStore("user", () => {
const logOut = (showLoginModal = true) => {
hasLogin.value = false;
token.value = ''
refreshToken.value = ''
loginTime.value = 0
resume.value = {}
userInfo.value = {}
role.value = {}
uni.removeStorageSync('userInfo')
uni.removeStorageSync('token')
uni.removeStorageSync('refreshToken')
uni.removeStorageSync('loginTime')
uni.removeStorageSync('Padmin-Token')
// 如果需要显示登录弹窗,则通过事件通知页面显示微信登录弹窗
// if (showLoginModal) {
@@ -122,6 +129,73 @@ const useUserStore = defineStore("user", () => {
return getUserResume()
}
const setRefreshToken = (refreshTokenVal) => {
refreshToken.value = refreshTokenVal
uni.setStorageSync('refreshToken', refreshTokenVal)
}
const setLoginTime = (time) => {
loginTime.value = time
uni.setStorageSync('loginTime', time.toString())
}
const isLoginExpired = () => {
if (!loginTime.value) {
const storedTime = uni.getStorageSync('loginTime')
if (storedTime) {
loginTime.value = parseInt(storedTime)
}
}
if (!loginTime.value) return true
return Date.now() - loginTime.value > SEVEN_DAYS
}
const refreshAccessToken = async () => {
if (isLoginExpired()) {
logOut(false)
return Promise.reject(new Error('登录已过期'))
}
const storedRefreshToken = uni.getStorageSync('refreshToken') || refreshToken.value
if (!storedRefreshToken) {
logOut(false)
return Promise.reject(new Error('没有刷新token'))
}
return new Promise((resolve, reject) => {
uni.request({
url: 'http://ks.zhaopinzao8dian.com/api/ks/refreshToken',
method: 'POST',
data: {
refreshToken: storedRefreshToken
},
success: (resData) => {
if (resData.statusCode === 200) {
const { code, msg, token: newToken } = resData.data
if (code === 200 && newToken) {
token.value = newToken
uni.setStorageSync('token', newToken)
resolve(newToken)
} else if (code === 401) {
logOut(false)
reject(new Error(msg || '认证失败'))
} else {
logOut(false)
reject(new Error(msg || '刷新token失败'))
}
} else {
logOut(false)
reject(new Error('网络请求失败'))
}
},
fail: (err) => {
logOut(false)
reject(err)
}
})
})
}
const setUserInfo = (values) => {
userInfo.value = values.data;
resume.value = values.data; // 将用户信息同时存储到resume中
@@ -156,10 +230,14 @@ const useUserStore = defineStore("user", () => {
const restoreUserInfo = () => {
const cachedUserInfo = uni.getStorageSync('userInfo');
const cachedToken = uni.getStorageSync('token');
const cachedRefreshToken = uni.getStorageSync('refreshToken');
const cachedLoginTime = uni.getStorageSync('loginTime');
if (cachedUserInfo && cachedToken) {
userInfo.value = cachedUserInfo;
resume.value = cachedUserInfo;
token.value = cachedToken;
refreshToken.value = cachedRefreshToken || '';
loginTime.value = cachedLoginTime ? parseInt(cachedLoginTime) : 0;
hasLogin.value = true;
Completion.value = getResumeCompletionPercentage(cachedUserInfo);
return true;
@@ -172,10 +250,16 @@ const useUserStore = defineStore("user", () => {
hasLogin,
userInfo,
token,
refreshToken,
loginTime,
resume,
login,
logOut,
loginSetToken,
setRefreshToken,
setLoginTime,
isLoginExpired,
refreshAccessToken,
getUserResume,
initSeesionId,
seesionId,