更新:增加“我的书单”功能

This commit is contained in:
2025-11-10 09:16:28 +08:00
parent 33f861fa14
commit 577e782cd8
25 changed files with 4515 additions and 37 deletions

88
stores/book.ts Normal file
View File

@@ -0,0 +1,88 @@
// stores/book.ts
import { defineStore } from 'pinia'
import type { IBookDetail, IBook, IReaderSettings, IReadProgress } from '@/types/book'
interface BookState {
currentBook: IBookDetail | null
myBooks: IBook[]
readerSettings: IReaderSettings
readProgressCache: Record<number, IReadProgress>
}
export const useBookStore = defineStore('book', {
state: (): BookState => ({
// 当前查看的书籍
currentBook: null,
// 书单列表
myBooks: [],
// 阅读器设置
readerSettings: {
fontSize: 1,
lineHeight: 34,
theme: 'default',
readMode: 'scroll'
},
// 阅读进度缓存
readProgressCache: {}
}),
getters: {
/**
* 获取指定书籍的阅读进度
*/
getReadProgress: (state) => (bookId: number) => {
return state.readProgressCache[bookId]
}
},
actions: {
/**
* 设置当前书籍
*/
setCurrentBook(book: IBookDetail) {
this.currentBook = book
},
/**
* 更新阅读设置
*/
updateReaderSettings(settings: Partial<IReaderSettings>) {
Object.assign(this.readerSettings, settings)
// 持久化到本地存储
uni.setStorageSync('readerSettings', this.readerSettings)
},
/**
* 缓存阅读进度
*/
cacheReadProgress(bookId: number, progress: IReadProgress) {
this.readProgressCache[bookId] = progress
},
/**
* 从本地存储恢复设置
*/
restoreSettings() {
try {
const settings = uni.getStorageSync('readerSettings')
if (settings) {
this.readerSettings = settings
}
} catch (e) {
console.error('Failed to restore reader settings:', e)
}
},
/**
* 重置store
*/
reset() {
this.currentBook = null
this.myBooks = []
this.readProgressCache = {}
}
}
})

22
stores/sys.ts Normal file
View File

@@ -0,0 +1,22 @@
// stores/user.ts
import { defineStore } from 'pinia'
import { setAuthToken, clearAuthToken } from '@/utils/auth'
import type { IUserInfo } from '@/types/user'
export const useSysStore = defineStore('sys', {
state: (): IUserInfo => ({
language: uni.getStorageSync('appLanguage') || 'zh-CN',
}),
getters: {
},
actions: {
/** 设置语言 */
setLanguage(language: string) {
this.language = language
uni.setStorageSync('appLanguage', language)
}
},
})

View File

@@ -36,6 +36,12 @@ export const useUserStore = defineStore('user', {
uni.setStorageSync('userInfo', userInfo)
},
/** 设置语言 */
setLanguage(language: string) {
this.language = language
uni.setStorageSync('appLanguage', language)
},
/** 登出 */
logout() {
try {