// app/composables/apiArticles.js // 统一封装“文章相关”接口,基于你已有的 useApi() import { useApi } from './useApi' /** * RealWorld 风格的后端: * - 创建:POST /articles body: { article: {...} } * - 获取明细:GET /articles/:slug * - 更新:PUT /articles/:slug body: { article: {...} } * - 删除:DELETE /articles/:slug * - 列表:GET /articles params: { tag, author, favorited, limit, offset } * - 订阅流:GET /articles/feed params: 同上(需要登录) * - 点赞:POST /articles/:slug/favorite * - 取消赞:DELETE /articles/:slug/favorite * - 标签:GET /tags */ export function useArticlesApi() { const api = useApi() // 表单 -> 后端 article payload const toPayload = (form) => ({ title: form.title?.trim() || '', description: form.description?.trim() || '', body: form.body ?? '', tagList: Array.isArray(form.tagList) ? form.tagList : [] }) // 创建 const create = (formOrArticle) => { const article = formOrArticle && formOrArticle.title !== undefined ? toPayload(formOrArticle) : (formOrArticle || {}) return api.post('/articles', { article }) } // 更新 const update = (slug, formOrArticle) => { const article = formOrArticle && formOrArticle.title !== undefined ? toPayload(formOrArticle) : (formOrArticle || {}) return api.put(`/articles/${encodeURIComponent(slug)}`, { article }) } // 删除 const remove = (slug) => api.del(`/articles/${encodeURIComponent(slug)}`) // 明细 const get = (slug) => api.get(`/articles/${encodeURIComponent(slug)}`) // 列表(公共) const list = (params = {}) => api.get('/articles', params) // 订阅流(需要登录) const feed = (params = {}) => api.get('/articles/feed', params) // 喜欢/取消喜欢 const addFavorite = (slug) => api.post(`/articles/${encodeURIComponent(slug)}/favorite`) const removeFavorite = (slug) => api.del(`/articles/${encodeURIComponent(slug)}/favorite`) // 标签列表 const listTags = () => api.get('/tags') return { // 主要增删改查 create, update, remove, get, list, feed, // 互动 addFavorite, removeFavorite, // 其他 listTags, // 工具(可选导出,发文页也能复用) toPayload } }