diff --git a/src/api/index.js b/src/api/index.js index 6b6745d..5e65c51 100644 --- a/src/api/index.js +++ b/src/api/index.js @@ -1,8 +1,8 @@ import axios from 'axios'; const api = axios.create({ - // baseURL: 'http://127.0.0.1:8002/novel-admin', - baseURL: 'https://prod-api.budingxiaoshuo.com/novel-admin', + baseURL: 'http://127.0.0.1:8002/novel-admin', + // baseURL: 'https://prod-api.budingxiaoshuo.com/novel-admin', // baseURL: import.meta.env.VITE_API_BASE_URL || 'http://127.0.0.1', timeout: 50000, headers: { diff --git a/src/components/book/InteractiveReward.vue b/src/components/book/InteractiveReward.vue index afeb1c9..8ed1af9 100644 --- a/src/components/book/InteractiveReward.vue +++ b/src/components/book/InteractiveReward.vue @@ -179,7 +179,8 @@ const submitReward = async () => { })) }); - store.getUserInfo(); + // 更新用户积分信息 + await store.fetchLatestUserInfo(); // 重置并关闭弹窗 rewardItems.value.forEach(item => { diff --git a/src/views/author/WorkSetup.vue b/src/views/author/WorkSetup.vue index 60bd62a..e5aa8ae 100644 --- a/src/views/author/WorkSetup.vue +++ b/src/views/author/WorkSetup.vue @@ -75,6 +75,7 @@ import { useRouter, useRoute } from 'vue-router'; import { ElMessage } from 'element-plus'; import { Plus } from '@element-plus/icons-vue'; import { myBookApi } from '@/api/bookshelf'; +import { homeApi } from '@/api/modules.js'; import { useMainStore } from '@/store'; import { ossService } from '@/utils/oss'; @@ -131,18 +132,14 @@ export default defineComponent({ const loadWorkData = async () => { try { loading.value = true; - const response = await myBookApi.getMyShopPage({ - pageNo: 1, - pageSize: 1, - id: workId - }); - - if (response.success && response.result?.records?.length > 0) { - const workData = response.result.records[0]; + const response = await homeApi.getBookDetail({ id: workId }); + + if (response.success && response.result) { + const workData = response.result; Object.assign(workForm, { name: workData.name, image: workData.image, - shopClass: workData.shopClass ? workData.shopClass.split(',').map(id => parseInt(id)) : [], // 将逗号分隔的字符串转换为数组 + shopClass: workData.shopClass ? workData.shopClass.split(',') : [], // 将逗号分隔的字符串转换为数组 details: workData.details, status: workData.status }); @@ -351,4 +348,4 @@ export default defineComponent({ } } } - \ No newline at end of file + \ No newline at end of file diff --git a/src/views/book/chapter.vue b/src/views/book/chapter.vue index b11ae59..a7aebfc 100644 --- a/src/views/book/chapter.vue +++ b/src/views/book/chapter.vue @@ -152,6 +152,7 @@ import { bookshelfApi } from '@/api/bookshelf.js'; import CatalogDialog from '@/components/book/CatalogDialog.vue'; import SubscriptionPopup from '@/components/book/SubscriptionPopup.vue'; import { toggleTheme, getThemeMode, setThemeMode } from '@/utils/theme.js'; +import { useMainStore } from '@/store'; export default { name: 'ChapterDetail', @@ -172,6 +173,7 @@ export default { setup() { const route = useRoute(); const router = useRouter(); + const store = useMainStore(); const bookId = computed(() => route.params.id); const chapterId = computed(() => route.params.chapterId); @@ -439,6 +441,11 @@ export default { updateSubscriptionStatus(); ElMessage.success('订阅成功'); + // 更新用户积分信息 + if (store.isAuthenticated) { + await store.fetchLatestUserInfo(); + } + // 重新获取章节详情 await getBookCatalogDetail(); } catch (err) { @@ -475,6 +482,11 @@ export default { ElMessage.success(`成功订阅${chapterIds.length}章`); + // 更新用户积分信息 + if (store.isAuthenticated) { + await store.fetchLatestUserInfo(); + } + // 刷新章节列表状态 await getBookCatalogList(); isPay.value = false; diff --git a/src/views/book/index.vue b/src/views/book/index.vue index efea3c3..93970c2 100644 --- a/src/views/book/index.vue +++ b/src/views/book/index.vue @@ -378,6 +378,8 @@ export default { fetchBookDetail(); if (store.isAuthenticated) { fetchUserAchievement(); + // 更新用户积分信息 + store.fetchLatestUserInfo(); } }; @@ -389,6 +391,8 @@ export default { fetchBookDetail(); if (store.isAuthenticated) { fetchUserAchievement(); + // 更新用户积分信息 + store.fetchLatestUserInfo(); } }; diff --git a/src/views/home/Bookshelf.vue b/src/views/home/Bookshelf.vue index 1ba40c2..0ad4f23 100644 --- a/src/views/home/Bookshelf.vue +++ b/src/views/home/Bookshelf.vue @@ -67,6 +67,7 @@ import { useRouter } from 'vue-router'; import { ElMessage, ElMessageBox } from 'element-plus'; import bookshelfCard from '@/components/bookshelf/bookshelfCard.vue'; import { bookshelfApi } from '@/api/bookshelf.js'; +import { homeApi } from '@/api/modules.js'; export default { name: 'BookshelfView', @@ -119,24 +120,32 @@ export default { if (deleteMode.value) return; // 删除模式下不跳转 if(book.novelId){ - - router.push({ - name: 'ChapterDetail', - params: { - id: book.shopId, - chapterId: book.novelId + // 先验证章节是否存在 + try { + const chapterResponse = await homeApi.getBookCatalogDetail(book.novelId); + if (chapterResponse && chapterResponse.success && chapterResponse.result) { + // 章节存在,直接跳转 + router.push({ + name: 'ChapterDetail', + params: { + id: book.shopId, + chapterId: book.novelId + } + }); + return; } - }); - - return + } catch (error) { + console.warn('章节不存在或获取失败,将跳转到第一章:', error); + } + // 如果章节不存在,继续执行下面的逻辑获取第一章 } // 获取章节目录 try { const response = await homeApi.getBookCatalogList({ - bookId: bookId, + bookId: book.shopId, pageNo: 1, - pageSize: 1, // 获取所有章节 + pageSize: 1, // 获取第一章 }); if (response.success && response.result) { @@ -157,6 +166,7 @@ export default { } } catch (error) { console.error('获取章节目录失败:', error); + ElMessage.error('获取章节失败,请稍后重试'); } }; @@ -374,4 +384,4 @@ export default { margin-top: 20px; border-top: 1px solid #f0f0f0; } - \ No newline at end of file + \ No newline at end of file diff --git a/src/views/home/Home.vue b/src/views/home/Home.vue index ad4d146..283391d 100644 --- a/src/views/home/Home.vue +++ b/src/views/home/Home.vue @@ -13,7 +13,7 @@
+ @click="goToDetail(banner)">