|
|
|
@ -63,19 +63,19 @@ export default createStore({
|
|
|
|
|
try {
|
|
|
|
|
const userData = savedUser
|
|
|
|
|
if (userData && userData.username) {
|
|
|
|
|
// 验证服务器端会话是否仍然有效
|
|
|
|
|
const serverUserData = await service.get('/user/getinfo', {
|
|
|
|
|
silent: true // 避免未登录时显示错误
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (serverUserData && serverUserData.username) {
|
|
|
|
|
// 服务器会话有效,更新用户信息
|
|
|
|
|
const admin = serverUserData.admin === 1;
|
|
|
|
|
commit('setUser', {
|
|
|
|
|
username: serverUserData.username,
|
|
|
|
|
pic: serverUserData.pic || '',
|
|
|
|
|
admin
|
|
|
|
|
})
|
|
|
|
|
// 验证服务器端会话是否仍然有效
|
|
|
|
|
const response = await service.get('/user/getinfo', {
|
|
|
|
|
silent: true // 避免未登录时显示错误
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (response.data && response.data.username) {
|
|
|
|
|
// 服务器会话有效,更新用户信息
|
|
|
|
|
const admin = response.data.admin === 1;
|
|
|
|
|
commit('setUser', {
|
|
|
|
|
username: response.data.username,
|
|
|
|
|
pic: response.data.pic || '',
|
|
|
|
|
admin
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 获取关联信息
|
|
|
|
|
try {
|
|
|
|
@ -99,18 +99,18 @@ export default createStore({
|
|
|
|
|
commit('clearUser')
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// 没有保存的用户信息,尝试静默获取
|
|
|
|
|
const userData = await service.get('/user/getinfo', {
|
|
|
|
|
silent: true
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (userData && userData.username) {
|
|
|
|
|
const admin = userData.admin === 1;
|
|
|
|
|
commit('setUser', {
|
|
|
|
|
username: userData.username,
|
|
|
|
|
pic: userData.pic || '',
|
|
|
|
|
admin
|
|
|
|
|
})
|
|
|
|
|
// 没有保存的用户信息,尝试静默获取
|
|
|
|
|
const response = await service.get('/user/getinfo', {
|
|
|
|
|
silent: true
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
if (response.data && response.data.username) {
|
|
|
|
|
const admin = response.data.admin === 1;
|
|
|
|
|
commit('setUser', {
|
|
|
|
|
username: response.data.username,
|
|
|
|
|
pic: response.data.pic || '',
|
|
|
|
|
admin
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 获取关联信息
|
|
|
|
|
try {
|
|
|
|
@ -161,32 +161,37 @@ export default createStore({
|
|
|
|
|
return response.data
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取当前用户信息 - 符合接口文档
|
|
|
|
|
// 获取当前用户信息 - 符合接口文档1.3
|
|
|
|
|
async fetchUser({ commit, dispatch }) {
|
|
|
|
|
try {
|
|
|
|
|
const userData = await service.get('/user/getinfo')
|
|
|
|
|
const admin = userData.admin === 1;
|
|
|
|
|
// 用户信息接口直接返回用户对象
|
|
|
|
|
commit('setUser', {
|
|
|
|
|
username: userData.username || '',
|
|
|
|
|
pic: userData.pic || '',
|
|
|
|
|
admin
|
|
|
|
|
})
|
|
|
|
|
const response = await service.get('/user/getinfo')
|
|
|
|
|
|
|
|
|
|
// 获取关联信息
|
|
|
|
|
try {
|
|
|
|
|
await dispatch('fetchBalanceAndVip')
|
|
|
|
|
} catch (balanceError) {
|
|
|
|
|
console.error('获取余额信息失败:', balanceError)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await dispatch('fetchBorrowedBooks')
|
|
|
|
|
} catch (booksError) {
|
|
|
|
|
console.error('获取借阅书籍失败:', booksError)
|
|
|
|
|
// 根据接口文档1.3,直接返回用户对象
|
|
|
|
|
if (response.data && response.data.username) {
|
|
|
|
|
const admin = response.data.admin === 1;
|
|
|
|
|
commit('setUser', {
|
|
|
|
|
username: response.data.username || '',
|
|
|
|
|
pic: response.data.pic || '',
|
|
|
|
|
admin
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 获取关联信息
|
|
|
|
|
try {
|
|
|
|
|
await dispatch('fetchBalanceAndVip')
|
|
|
|
|
} catch (balanceError) {
|
|
|
|
|
console.error('获取余额信息失败:', balanceError)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
await dispatch('fetchBorrowedBooks')
|
|
|
|
|
} catch (booksError) {
|
|
|
|
|
console.error('获取借阅书籍失败:', booksError)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('获取用户信息失败')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return userData
|
|
|
|
|
} catch (error) {
|
|
|
|
|
commit('clearUser')
|
|
|
|
|
throw error
|
|
|
|
@ -251,36 +256,44 @@ export default createStore({
|
|
|
|
|
// 根据接口文档1.6,管理员返回数组,普通用户返回单个对象
|
|
|
|
|
if (response.data && response.data.code === 200) {
|
|
|
|
|
return response.data
|
|
|
|
|
} else if (response.data && response.data.code === 1) {
|
|
|
|
|
throw new Error(response.data.message || '获取借阅记录失败')
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(response.data?.message || '获取借阅记录失败')
|
|
|
|
|
throw new Error('获取借阅记录失败')
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 获取当前用户已借书籍
|
|
|
|
|
// 获取当前用户已借书籍 - 符合接口文档2.5
|
|
|
|
|
async fetchBorrowedBooks({ commit }) {
|
|
|
|
|
const response = await service.get('/user/borrow/books')
|
|
|
|
|
|
|
|
|
|
// 按照接口文档处理响应
|
|
|
|
|
if (response.data.code === 200) {
|
|
|
|
|
commit('setBorrowedBooks', response.data.data || [])
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(response.data.message || '获取已借书籍失败')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
},
|
|
|
|
|
const response = await service.get('/user/borrow/books')
|
|
|
|
|
|
|
|
|
|
// 按照接口文档2.5,返回书籍数组
|
|
|
|
|
if (response.data && Array.isArray(response.data)) {
|
|
|
|
|
commit('setBorrowedBooks', response.data)
|
|
|
|
|
return { data: response.data }
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('获取已借书籍失败')
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 租借书籍
|
|
|
|
|
async borrowBook({ dispatch }, { title }) {
|
|
|
|
|
const response = await service.post('/borrow/borrowbook',
|
|
|
|
|
`title=${encodeURIComponent(title)}`,
|
|
|
|
|
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 借书后刷新用户信息
|
|
|
|
|
await dispatch('fetchUser')
|
|
|
|
|
return response.data
|
|
|
|
|
},
|
|
|
|
|
// 租借书籍 - 符合接口文档3.1
|
|
|
|
|
async borrowBook({ dispatch }, { title }) {
|
|
|
|
|
const response = await service.post('/borrow/borrowbook',
|
|
|
|
|
`title=${encodeURIComponent(title)}`,
|
|
|
|
|
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 根据接口文档3.1,检查响应
|
|
|
|
|
if (response.data && response.data.code === 200) {
|
|
|
|
|
// 借书后刷新用户信息
|
|
|
|
|
await dispatch('fetchUser')
|
|
|
|
|
return response.data
|
|
|
|
|
} else if (response.data && response.data.code === 1) {
|
|
|
|
|
throw new Error(response.data.message || '借书失败')
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('借书失败')
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 归还书籍 - 符合接口文档3.2
|
|
|
|
|
async returnBook({ dispatch }, { title }) {
|
|
|
|
@ -290,10 +303,16 @@ async returnBook({ dispatch }, { title }) {
|
|
|
|
|
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// 还书成功后刷新借阅书籍列表
|
|
|
|
|
await dispatch('fetchBorrowedBooks')
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
// 根据接口文档3.2,检查响应
|
|
|
|
|
if (response.data && response.data.code === 200) {
|
|
|
|
|
// 还书成功后刷新借阅书籍列表
|
|
|
|
|
await dispatch('fetchBorrowedBooks')
|
|
|
|
|
return response.data
|
|
|
|
|
} else if (response.data && response.data.code === 1) {
|
|
|
|
|
throw new Error(response.data.message || '还书失败')
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('还书失败')
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('还书失败:', error)
|
|
|
|
|
throw error
|
|
|
|
@ -316,12 +335,13 @@ async returnBook({ dispatch }, { title }) {
|
|
|
|
|
let list = []
|
|
|
|
|
let total = 0
|
|
|
|
|
|
|
|
|
|
if (Array.isArray(response.data)) {
|
|
|
|
|
// 检查响应格式
|
|
|
|
|
if (response.data && Array.isArray(response.data)) {
|
|
|
|
|
list = response.data
|
|
|
|
|
total = response.data.length
|
|
|
|
|
} else if (Array.isArray(response.data)) {
|
|
|
|
|
list = response.data
|
|
|
|
|
total = response.data.length
|
|
|
|
|
} else if (Array.isArray(response)) {
|
|
|
|
|
list = response
|
|
|
|
|
total = response.length
|
|
|
|
|
} else {
|
|
|
|
|
console.warn('API返回格式不符合预期:', response)
|
|
|
|
|
list = []
|
|
|
|
@ -345,11 +365,11 @@ async returnBook({ dispatch }, { title }) {
|
|
|
|
|
params: { title }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
// 根据接口文档处理响应
|
|
|
|
|
if (response.data && response.data.code === 200) {
|
|
|
|
|
return { data: response.data.data }
|
|
|
|
|
// 根据接口文档2.3,返回单条对象
|
|
|
|
|
if (response.data && response.data.title) {
|
|
|
|
|
return { data: response.data }
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(response.data?.message || '获取书籍信息失败')
|
|
|
|
|
throw new Error('获取书籍信息失败')
|
|
|
|
|
}
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('API请求失败:', error)
|
|
|
|
@ -357,16 +377,23 @@ async returnBook({ dispatch }, { title }) {
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 新增书籍
|
|
|
|
|
// 新增书籍 - 符合接口文档2.1
|
|
|
|
|
async addBook(_, bookData) {
|
|
|
|
|
const response = await service.post('/api/add', bookData, {
|
|
|
|
|
headers: { 'Content-Type': 'application/json' }
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
// 根据接口文档2.1,成功返回整本书信息
|
|
|
|
|
if (response.data && response.data.code === 200) {
|
|
|
|
|
return response.data
|
|
|
|
|
} else if (response.data && response.data.code === 1) {
|
|
|
|
|
throw new Error(response.data.message || '添加书籍失败')
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error('添加书籍失败')
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 管理员删除书籍 - 符合接口文档
|
|
|
|
|
// 管理员删除书籍 - 符合接口文档2.4
|
|
|
|
|
async deleteBook(_, { title }) {
|
|
|
|
|
const response = await service.post('/user/delete',
|
|
|
|
|
`title=${encodeURIComponent(title)}`,
|
|
|
|
@ -375,21 +402,35 @@ async returnBook({ dispatch }, { title }) {
|
|
|
|
|
|
|
|
|
|
if (response.data && response.data.code === 200) {
|
|
|
|
|
return response.data
|
|
|
|
|
} else if (response.data && response.data.code === 1) {
|
|
|
|
|
throw new Error(response.data.message || '删除书籍失败')
|
|
|
|
|
} else {
|
|
|
|
|
throw new Error(response.data?.message || '删除书籍失败')
|
|
|
|
|
throw new Error('删除书籍失败')
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 本周热租榜 - 符合接口文档
|
|
|
|
|
// 本周热租榜 - 符合接口文档4.1
|
|
|
|
|
async fetchWeeklyRank() {
|
|
|
|
|
const response = await service.get('/api/rank/weekly')
|
|
|
|
|
return { data: Array.isArray(response) ? response : response.data || [] }
|
|
|
|
|
|
|
|
|
|
// 根据接口文档4.1,直接返回数组
|
|
|
|
|
if (response.data && Array.isArray(response.data)) {
|
|
|
|
|
return { data: response.data }
|
|
|
|
|
} else {
|
|
|
|
|
return { data: [] }
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 本月热租榜 - 符合接口文档
|
|
|
|
|
// 本月热租榜 - 符合接口文档4.2
|
|
|
|
|
async fetchMonthlyRank() {
|
|
|
|
|
const response = await service.get('/api/rank/monthly')
|
|
|
|
|
return { data: Array.isArray(response) ? response : response.data || [] }
|
|
|
|
|
|
|
|
|
|
// 根据接口文档4.2,结构与4.1相同
|
|
|
|
|
if (response.data && Array.isArray(response.data)) {
|
|
|
|
|
return { data: response.data }
|
|
|
|
|
} else {
|
|
|
|
|
return { data: [] }
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
})
|