hyx_brand
hyx 1 month ago
parent d4b3ce78ae
commit 7533450cc6

@ -252,28 +252,22 @@ export default createStore({
// 查询个人借书记录 - 符合接口文档1.6
async fetchBorrowRecords() {
const response = await service.get('/user/findone')
return response.data
// 根据接口文档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('获取借阅记录失败')
}
},
// 获取当前用户已借书籍 - 符合接口文档2.5
async fetchBorrowedBooks({ commit }) {
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 }
// 按照接口文档处理响应
if (response.data.code === 200) {
commit('setBorrowedBooks', response.data.data || [])
} else {
throw new Error('获取已借书籍失败')
throw new Error(response.data.message || '获取已借书籍失败')
}
return response.data
},
// 租借书籍 - 符合接口文档3.1
@ -319,7 +313,8 @@ async returnBook({ dispatch }, { title }) {
}
},
// 查询全部书籍 - 符合接口文档2.2
// 查询全部书籍 - 符合接口文档
async fetchBooks(_, params = {}) {
const config = {
params: {
@ -330,22 +325,24 @@ async returnBook({ dispatch }, { title }) {
}
const response = await service.get('/api/select', config)
// 根据接口文档2.2,直接返回数组
console.log('请求书籍:', route.params.title)
console.log('API响应:', response)
// 处理不同响应格式
let list = []
let total = 0
// 检查响应格式
if (response.data && Array.isArray(response.data)) {
list = response.data
total = response.data.length
if (Array.isArray(response)) {
list = response
total = response.length
} else if (Array.isArray(response.data)) {
list = response.data
total = response.data.length
} else {
console.warn('API返回格式不符合预期:', response)
list = []
total = 0
} else if (response.data && Array.isArray(response.data.data)) {
list = response.data.data
total = response.data.total || response.data.data.length
} else if (response.data && Array.isArray(response.data.list)) {
list = response.data.list
total = response.data.total || response.data.list.length
}
return {
@ -395,19 +392,20 @@ async returnBook({ dispatch }, { title }) {
// 管理员删除书籍 - 符合接口文档2.4
async deleteBook(_, { title }) {
const response = await service.post('/user/delete',
`title=${encodeURIComponent(title)}`,
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
)
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('删除书籍失败')
}
},
const response = await service.post('/user/delete',
`title=${encodeURIComponent(title)}`,
{ headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }
)
// 根据接口文档修改响应处理
if (response.data && response.data.code === 200) {
return response.data
} else {
// 统一处理错误消息
const errorMsg = response.data?.message || '删除书籍失败'
throw new Error(errorMsg)
}
},
// 本周热租榜 - 符合接口文档4.1
async fetchWeeklyRank() {
@ -431,6 +429,11 @@ async returnBook({ dispatch }, { title }) {
} else {
return { data: [] }
}
}
},
}
})

@ -24,49 +24,21 @@ service.interceptors.request.use(
// 响应拦截器
service.interceptors.response.use(
response => {
// 处理成功响应
const res = response.data
// 处理业务错误 (code !== 200)
if (res && typeof res === 'object' && res.code !== undefined && res.code !== 200) {
// 检查是否为静默请求
if (!response.config.silent) {
ElMessage.error(res.message || '请求失败')
}
return Promise.reject(new Error(res.message || 'Error'))
// 统一处理成功响应
if (response.data && response.data.code === 200) {
return response.data
} else {
// 处理业务逻辑错误
const errorMsg = response.data?.message || '请求处理失败'
return Promise.reject(new Error(errorMsg))
}
// 返回整个响应对象,确保组件可以访问响应头等信息
return response
},
error => {
// 处理HTTP错误
if (error.response) {
switch (error.response.status) {
case 401:
// 只有在非静默请求时才显示错误信息
if (!error.config?.silent) {
store.dispatch('logout')
router.push('/login')
ElMessage.error('请先登录')
}
break
case 403:
if (!error.config?.silent) {
ElMessage.error('没有操作权限')
}
break
default:
if (!error.config?.silent) {
ElMessage.error(error.response.data?.message || '请求失败')
}
}
} else {
if (!error.config?.silent) {
ElMessage.error('网络错误,请检查连接')
}
}
return Promise.reject(error)
const errorMsg = error.response?.data?.message ||
error.message ||
'网络请求失败'
return Promise.reject(new Error(errorMsg))
}
)

@ -103,41 +103,21 @@
})
const fetchAllRecords = async () => {
try {
loading.value = true
// 1.6/user/findone
const response = await store.dispatch('fetchBorrowRecords')
if (response.code === 200) {
//
if (Array.isArray(response.data)) {
records.value = response.data
total.value = response.data.length
} else {
// 使
records.value = presetRecords
total.value = presetRecords.length
}
} else if (response.code === 1) {
// 使
records.value = presetRecords
total.value = presetRecords.length
} else {
// 使
records.value = presetRecords
total.value = presetRecords.length
}
} catch (error) {
console.error('获取借阅记录失败:', error)
ElMessage.error('获取借阅记录失败,使用预设数据')
records.value = presetRecords
total.value = presetRecords.length
} finally {
loading.value = false
}
try {
loading.value = true
//
const recordsData = await store.dispatch('fetchBorrowRecords')
} catch (error) {
console.error('获取借阅记录失败:', error)
ElMessage.error('获取借阅记录失败,使用预设数据')
records.value = presetRecords
total.value = presetRecords.length
} finally {
loading.value = false
}
}
const handlePageChange = (page) => {
currentPage.value = page

@ -117,31 +117,65 @@
// }
const fetchBooks = async () => {
try {
loading.value = true
const params = {
page: currentPage.value,
pageSize: pageSize.value,
keyword: searchKeyword.value
}
const response = await store.dispatch('fetchBooks', params)
try {
loading.value = true
const params = {
page: currentPage.value,
pageSize: pageSize.value,
title: searchKeyword.value // 使 title keyword
}
// Vuex action
const response = await store.dispatch('fetchBooks', params)
//
if (response.data && Array.isArray(response.data.list)) {
books.value = response.data.list
total.value = response.data.total
} catch (error) {
console.error('获取书籍列表失败:', error)
ElMessage.error('获取书籍列表失败,使用预设数据')
books.value = [
{ id: 1, title: '三体', url: 'https://picsum.photos/id/24/200/300', money: 5, number: 12, state: '正常', content: '科幻' },
{ id: 2, title: '人类简史', url: 'https://picsum.photos/id/25/200/300', money: 4, number: 10, state: '正常', content: '历史' },
{ id: 3, title: '百年孤独', url: 'https://picsum.photos/id/26/200/300', money: 6, number: 0, state: '维护中', content: '文学' },
]
} else {
//
console.warn('非标准响应格式:', response)
books.value = response.data || []
total.value = books.value.length
} finally {
loading.value = false
}
} catch (error) {
console.error('获取书籍列表失败:', error)
ElMessage.error('获取书籍列表失败')
// 使退
books.value = [
{
id: 1,
title: '三体',
url: 'https://picsum.photos/id/24/200/300',
money: 5,
number: 12,
state: '正常',
content: '科幻'
},
{
id: 2,
title: '人类简史',
url: 'https://picsum.photos/id/25/200/300',
money: 4,
number: 10,
state: '正常',
content: '历史'
},
{
id: 3,
title: '百年孤独',
url: 'https://picsum.photos/id/26/200/300',
money: 6,
number: 0,
state: '维护中',
content: '文学'
},
]
total.value = books.value.length
} finally {
loading.value = false
}
}
const handlePageChange = (page) => {
currentPage.value = page
fetchBooks()

Loading…
Cancel
Save