This commit is contained in:
2025-10-16 16:21:56 +08:00
parent dd3936944b
commit 89dbdc63db
12 changed files with 512 additions and 222 deletions

View File

@@ -7,9 +7,10 @@ export const userState = reactive({
token: '',
refreshToken: '',
userInfo: {
userId: '',
id: '',
username: '',
email: '',
nickname: '',
avatar: ''
},
subscription: {
@@ -75,21 +76,23 @@ export const userActions = {
// 登录
async login(credentials) {
const res = await api.auth.login(credentials)
const { token, refreshToken, ...userInfo } = res.data
const { token, refreshToken, user } = res.data
// 保存到本地存储
localStorage.setItem('token', token)
localStorage.setItem('refreshToken', refreshToken)
localStorage.setItem('userInfo', JSON.stringify(userInfo))
localStorage.setItem('userInfo', JSON.stringify(user))
// 更新状态
userState.isLoggedIn = true
userState.token = token
userState.refreshToken = refreshToken
userState.userInfo = userInfo
userState.userInfo = user
// 获取用户订阅信息
await this.getSubscription()
// 获取用户订阅信息(不阻塞登录流程)
this.getSubscription().catch(err => {
console.error('登录后获取订阅信息失败:', err)
})
return res
},
@@ -97,21 +100,24 @@ export const userActions = {
// 注册
async register(userData) {
const res = await api.auth.register(userData)
const { token, refreshToken, ...userInfo } = res.data
// 根据后端实际返回的数据结构提取数据
const { token, refreshToken, user } = res.data
// 保存到本地存储
localStorage.setItem('token', token)
localStorage.setItem('refreshToken', refreshToken)
localStorage.setItem('userInfo', JSON.stringify(userInfo))
localStorage.setItem('userInfo', JSON.stringify(user))
// 更新状态
userState.isLoggedIn = true
userState.token = token
userState.refreshToken = refreshToken
userState.userInfo = userInfo
userState.userInfo = user
// 获取用户订阅信息
await this.getSubscription()
// 获取订阅信息(不阻塞注册流程)
this.getSubscription().catch(err => {
console.error('注册后获取订阅信息失败:', err)
})
return res
},
@@ -132,49 +138,53 @@ export const userActions = {
userState.token = ''
userState.refreshToken = ''
userState.userInfo = {
userId: '',
id: '',
username: '',
email: '',
nickname: '',
avatar: ''
}
},
// 刷新token
async refreshToken() {
try {
const refreshToken = userState.refreshToken || localStorage.getItem('refreshToken')
if (!refreshToken) {
throw new Error('没有刷新令牌')
async refreshToken() {
try {
const refreshToken = userState.refreshToken || localStorage.getItem('refreshToken')
if (!refreshToken) {
throw new Error('没有刷新令牌')
}
const res = await api.auth.refreshToken(refreshToken)
// 根据后端实际返回的数据结构提取数据
const { token: newToken, refreshToken: newRefreshToken } = res.data
// 更新本地存储
localStorage.setItem('token', newToken)
localStorage.setItem('refreshToken', newRefreshToken)
// 更新状态
userState.token = newToken
userState.refreshToken = newRefreshToken
return res
} catch (error) {
// 刷新失败,退出登录
await this.logout()
throw error
}
const res = await api.auth.refreshToken(refreshToken)
const { token: newToken, refreshToken: newRefreshToken } = res.data
// 更新本地存储
localStorage.setItem('token', newToken)
localStorage.setItem('refreshToken', newRefreshToken)
// 更新状态
userState.token = newToken
userState.refreshToken = newRefreshToken
return res
} catch (error) {
// 刷新失败,退出登录
await this.logout()
throw error
}
},
},
// 获取用户订阅信息
async getSubscription() {
try {
const res = await api.user.getSubscription()
userState.subscription = res.data
// 根据后端实际返回的数据结构提取数据
userState.subscription = res.data.data
return res
} catch (error) {
console.error('获取订阅信息失败:', error)
throw error
// 不抛出错误,避免影响登录流程
return null
}
},
@@ -182,11 +192,14 @@ export const userActions = {
async fetchUserInfo() {
if (!userState.token) return;
const response = await api.user.getUserInfo();
if (response.data.code === 200) {
userState.userInfo = response.data.data;
localStorage.setItem('userInfo', JSON.stringify(response.data.data));
const response = await api.user.getUserProfile();
// 根据后端实际返回的数据结构提取数据
if (response.data) {
userState.userInfo = response.data;
localStorage.setItem('userInfo', JSON.stringify(response.data));
return response.data;
}
return null;
},
// 初始化用户状态(从本地存储恢复)
@@ -203,8 +216,10 @@ export const userActions = {
userState.refreshToken = refreshToken || ''
userState.userInfo = userInfo
// 获取订阅信息
this.getSubscription()
// 获取订阅信息(不阻塞初始化流程)
this.getSubscription().catch(err => {
console.error('初始化获取订阅信息失败:', err)
})
} catch (error) {
console.error('解析用户信息失败:', error)
// 清除无效数据
@@ -229,18 +244,30 @@ export const mailActions = {
// 根据类型更新不同的列表
if (type === 'INBOX') {
mailState.inboxList = res.data.list
if (page === 1) {
mailState.inboxList = res.data?.list || []
} else {
mailState.inboxList = [...mailState.inboxList, ...(res.data?.list || [])]
}
} else if (type === 'SENT') {
mailState.sentList = res.data.list
if (page === 1) {
mailState.sentList = res.data?.list || []
} else {
mailState.sentList = [...mailState.sentList, ...(res.data?.list || [])]
}
} else if (type === 'DRAFT') {
mailState.draftList = res.data.list
if (page === 1) {
mailState.draftList = res.data?.list || []
} else {
mailState.draftList = [...mailState.draftList, ...(res.data?.list || [])]
}
}
// 更新分页信息
mailState.pagination = {
page: res.data.page,
size: res.data.size,
total: res.data.total
page: res.data?.page || page,
size: res.data?.size || size,
total: res.data?.total || 0
}
return res
@@ -359,12 +386,26 @@ export const capsuleActions = {
try {
capsuleState.loading = true
const res = await api.capsule.getCapsules()
capsuleState.capsules = res.data.capsules
capsuleState.scene = res.data.scene
capsuleState.background = res.data.background
// 添加空值检查
if (res && res.data) {
capsuleState.capsules = res.data.capsules || []
capsuleState.scene = res.data.scene || 'SPACE'
capsuleState.background = res.data.background || ''
} else {
// 如果没有数据,设置为空数组
capsuleState.capsules = []
capsuleState.scene = 'SPACE'
capsuleState.background = ''
}
return res
} catch (error) {
console.error('获取胶囊列表失败:', error)
// 出错时也要设置为空数组,避免页面出错
capsuleState.capsules = []
capsuleState.scene = 'SPACE'
capsuleState.background = ''
throw error
} finally {
capsuleState.loading = false