重构路由配置和API调用逻辑,统一分页处理方式 优化分类和标签模块的交互,提取蒙版组件到主布局 调整样式和布局,增强响应式设计 更新接口字段名以保持前后端一致性 添加网站运行时间显示功能
156 lines
4.9 KiB
JavaScript
156 lines
4.9 KiB
JavaScript
// 文章相关API服务
|
||
import api from './apiService'
|
||
|
||
/**
|
||
* 文章服务类
|
||
*/
|
||
class ArticleService {
|
||
/**
|
||
* 分页查询文章列表
|
||
* @param {import('../types').PaginationParams} params - 分页查询参数
|
||
* @param status 文章状态(0:未发表 1:已发表 2:已删除)
|
||
* @param page 页码,从0开始(可选,默认为0)
|
||
* @param size 每页大小(可选,默认为10,最大为100)
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getPagedArticles(params = {}) {
|
||
return api.get(`/articles/status/page?title=${params.title || ''}&categoryid=${params.categoryid || 0}&attributeid=${params.attributeid || 0}&status=${params.status || 1}&page=${params.page || 0}&size=${params.size || 10}`)
|
||
}
|
||
/**
|
||
* 获取分页文章数量
|
||
* @param {number} status - 文章状态(0:未发表 1:已发表 2:已删除)
|
||
* @returns {Promise<import('../types').ApiResponse<number>>}
|
||
*/
|
||
getArticleCountByStatus(status) {
|
||
return api.get(`/articles/count/status/${status || 1}`)
|
||
}
|
||
/**
|
||
* 获取已发布文章列表
|
||
* @param {import('../types').PaginationParams} params - 查询参数
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getAllArticles(params = {}) {
|
||
return api.get('/articles/published', { params })
|
||
}
|
||
/**
|
||
* 根据状态获取文章列表
|
||
* @param {number} status - 文章状态(0:未发表 1:已发表 2:已删除)
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getArticlesByStatus(status) {
|
||
return api.get(`/articles/status/${status}`)
|
||
}
|
||
/**
|
||
* 获取所有文章列表(包含已删除)
|
||
* @param {import('../types').PaginationParams} params - 查询参数
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getAllArticlesWithDeleted(params = {}) {
|
||
return api.get('/articles', { params })
|
||
}
|
||
/**
|
||
* 根据ID获取文章详情
|
||
* @param {number} articleid - 文章ID
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article>>}
|
||
*/
|
||
getArticleById(articleid) {
|
||
return api.get(`/articles/${articleid}`)
|
||
}
|
||
|
||
/**
|
||
* 根据属性ID获取文章列表
|
||
* @param {number} attributeid - 属性ID
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getArticlesByAttributeId(attributeid) {
|
||
return api.get(`/articles/attribute/${attributeid}`)
|
||
}
|
||
|
||
/**
|
||
* 根据标题查询文章列表
|
||
* @param {string} title - 文章标题
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getArticlesByTitle(title) {
|
||
return api.get(`/articles/title/${title}`)
|
||
}
|
||
|
||
/**
|
||
* 获取热门文章
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getPopularArticles() {
|
||
return api.get('/articles/popular')
|
||
}
|
||
|
||
/**
|
||
* 创建文章
|
||
* @param {import('../types').ArticleDto} articleData - 文章数据
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article>>}
|
||
*/
|
||
createArticle(articleData) {
|
||
return api.post('/articles', articleData)
|
||
}
|
||
|
||
/**
|
||
* 更新文章
|
||
* @param {number} articleid - 文章ID
|
||
* @param {import('../types').ArticleDto} articleData - 文章数据
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article>>}
|
||
*/
|
||
updateArticle(articleid, articleData) {
|
||
return api.put(`/articles/${articleid}`, articleData)
|
||
}
|
||
|
||
/**
|
||
* 删除文章
|
||
* @param {number} articleid - 文章ID
|
||
* @returns {Promise<import('../types').ApiResponse<boolean>>}
|
||
*/
|
||
deleteArticle(articleid) {
|
||
return api.delete(`/articles/${articleid}`)
|
||
}
|
||
|
||
/**
|
||
* 根据分类获取文章
|
||
* @param {number} categoryid - 分类ID
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getArticlesByCategory(categoryid) {
|
||
return api.get(`/articles/category/${categoryid}`)
|
||
}
|
||
|
||
/**
|
||
* 增加文章浏览量
|
||
* @param {number} articleid - 文章ID
|
||
* @returns {Promise<import('../types').ApiResponse<boolean>>}
|
||
*/
|
||
incrementArticleViews(articleid) {
|
||
return api.post(`/articles/view/${articleid}`)
|
||
}
|
||
|
||
/**
|
||
* 根据属性ID获取最新文章
|
||
* @param {number} attributeid - 属性ID
|
||
* @returns {Promise<import('../types').ApiResponse<import('../types').Article[]>>}
|
||
*/
|
||
getLatestArticlesByAttribute(attributeid) {
|
||
return api.get(`/articles/attribute/${attributeid}/latest`)
|
||
}
|
||
|
||
/**
|
||
* 点赞文章
|
||
* @param {number} articleid - 文章ID
|
||
* @returns {Promise<import('../types').ApiResponse<boolean>>}
|
||
*/
|
||
likeArticle(articleid) {
|
||
return api.post(`/articles/like/${articleid}`)
|
||
}
|
||
}
|
||
|
||
// 创建并导出服务实例
|
||
const articleService = new ArticleService()
|
||
export default articleService
|
||
|
||
// 导出服务类供特殊场景使用
|
||
export { ArticleService } |