hyx_brand
hyx 1 month ago
parent d4b3ce78ae
commit 7533450cc6

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

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

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

@ -117,31 +117,65 @@
// } // }
const fetchBooks = async () => { const fetchBooks = async () => {
try { try {
loading.value = true loading.value = true
const params = { const params = {
page: currentPage.value, page: currentPage.value,
pageSize: pageSize.value, pageSize: pageSize.value,
keyword: searchKeyword.value title: searchKeyword.value // 使 title keyword
} }
const response = await store.dispatch('fetchBooks', params) // Vuex action
const response = await store.dispatch('fetchBooks', params)
//
if (response.data && Array.isArray(response.data.list)) {
books.value = response.data.list books.value = response.data.list
total.value = response.data.total total.value = response.data.total
} catch (error) { } else {
console.error('获取书籍列表失败:', error) //
ElMessage.error('获取书籍列表失败,使用预设数据') console.warn('非标准响应格式:', response)
books.value = [ books.value = response.data || []
{ 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 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) => { const handlePageChange = (page) => {
currentPage.value = page currentPage.value = page
fetchBooks() fetchBooks()

Loading…
Cancel
Save