aifeilong 00d5558fe2 Align frontend API calls with app-prefixed backend routes.
Update service URLs and the Vite proxy rewrite so requests match /content/, /cms/, and /common/ mounts after /api is stripped.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-15 08:42:37 +08:00

211 lines
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { get, post, patch, remove, upload } from "./utils";
const unwrap = (data) => {
if (data && Array.isArray(data.results)) return data;
if (Array.isArray(data)) return { count: data.length, results: data };
return data;
};
export const listArticles = (params) => get("/api/content/articles/", params).then(unwrap);
export const getArticle = (id) => get(`/api/content/articles/${id}/`);
/** 前台详情阅读上报(与 GET 详情分离,避免重复计数) */
export const recordArticleRead = (id) => post(`/api/content/articles/${id}/record-read/`);
/** 会员点赞/取消点赞(需登录) */
export const toggleArticleLike = (id) => post(`/api/content/articles/${id}/toggle-like/`);
/** 会员收藏/取消收藏(需登录) */
export const toggleArticleCollect = (id) =>
post(`/api/content/articles/${id}/toggle-collect/`);
/** 分享计数(同人同文献只计一次;传 visitorKey 便于未登录去重) */
export const recordArticleShare = (id, visitorKey) =>
post(`/api/content/articles/${id}/record-share/`, {
visitor_key: visitorKey || undefined,
});
/** 当前会员收藏列表 */
export const myArticleCollections = (params) =>
get("/api/content/articles/my-collections/", params).then(unwrap);
/** 批量查询点赞/收藏状态,ids 为文献 id 数组 */
export const myArticleEngagement = (ids) =>
get("/api/content/articles/my-engagement/", {
ids: Array.isArray(ids) ? ids.join(",") : ids,
});
export const homeArticles = () => get("/api/content/articles/home/");
export const articleFacets = (params) => get("/api/content/articles/facets/", params);
export const articleRanking = (params) =>
get("/api/content/articles/ranking/", params).then(unwrap);
export const createArticle = (data) => post("/api/content/articles/", data);
export const updateArticle = (id, data) => patch(`/api/content/articles/${id}/`, data);
export const deleteArticle = (id) => remove(`/api/content/articles/${id}/`);
export const listOrganizes = (params) => get("/api/content/organizes/", params).then(unwrap);
export const getOrganize = (id) => get(`/api/content/organizes/${id}/`);
export const organizeRanking = (params) =>
get("/api/content/organizes/ranking/", params).then(unwrap);
export const createOrganize = (data) => post("/api/content/organizes/", data);
export const updateOrganize = (id, data) => patch(`/api/content/organizes/${id}/`, data);
export const deleteOrganize = (id) => remove(`/api/content/organizes/${id}/`);
export const listMagazines = (params) => get("/api/content/magazines/", params).then(unwrap);
export const magazineRanking = (params) =>
get("/api/content/magazines/ranking/", params).then(unwrap);
export const createMagazine = (data) => post("/api/content/magazines/", data);
export const updateMagazine = (id, data) => patch(`/api/content/magazines/${id}/`, data);
export const deleteMagazine = (id) => remove(`/api/content/magazines/${id}/`);
export const listWorkGroups = (params) =>
get("/api/content/work-groups/", params).then(unwrap);
export const createWorkGroup = (data) => post("/api/content/work-groups/", data);
export const updateWorkGroup = (id, data) => patch(`/api/content/work-groups/${id}/`, data);
export const deleteWorkGroup = (id) => remove(`/api/content/work-groups/${id}/`);
export const listWorkGroupTerms = (params) =>
get("/api/content/work-group-terms/", params).then(unwrap);
export const createWorkGroupTerm = (data) => post("/api/content/work-group-terms/", data);
export const updateWorkGroupTerm = (id, data) =>
patch(`/api/content/work-group-terms/${id}/`, data);
export const deleteWorkGroupTerm = (id) => remove(`/api/content/work-group-terms/${id}/`);
export const listWorkGroupMemberships = (params) =>
get("/api/content/work-group-memberships/", params).then(unwrap);
export const createWorkGroupMembership = (data) =>
post("/api/content/work-group-memberships/", data);
export const updateWorkGroupMembership = (id, data) =>
patch(`/api/content/work-group-memberships/${id}/`, data);
export const deleteWorkGroupMembership = (id) =>
remove(`/api/content/work-group-memberships/${id}/`);
export const listProfessors = (params) =>
get("/api/content/professors/", params).then(unwrap);
export const getProfessor = (id) => get(`/api/content/professors/${id}/`);
export const createProfessor = (data) => post("/api/content/professors/", data);
export const updateProfessor = (id, data) => patch(`/api/content/professors/${id}/`, data);
export const deleteProfessor = (id) => remove(`/api/content/professors/${id}/`);
export const listColumns = (params) => get("/api/content/columns/", params).then(unwrap);
export const navColumns = (params) => get("/api/content/columns/nav/", params);
export const createColumn = (data) => post("/api/content/columns/", data);
export const updateColumn = (id, data) => patch(`/api/content/columns/${id}/`, data);
export const deleteColumn = (id) => remove(`/api/content/columns/${id}/`);
export const listSubjects = (params) =>
get("/api/content/subjects/", params).then(unwrap);
export const createSubject = (data) => post("/api/content/subjects/", data);
export const updateSubject = (id, data) => patch(`/api/content/subjects/${id}/`, data);
export const deleteSubject = (id) => remove(`/api/content/subjects/${id}/`);
export const listArticleTypes = (params) =>
get("/api/content/article-types/", params).then(unwrap);
export const createArticleType = (data) => post("/api/content/article-types/", data);
export const updateArticleType = (id, data) =>
patch(`/api/content/article-types/${id}/`, data);
export const deleteArticleType = (id) => remove(`/api/content/article-types/${id}/`);
export const listOrganizeCategories = (params) =>
get("/api/content/organize-categories/", params).then(unwrap);
export const createOrganizeCategory = (data) =>
post("/api/content/organize-categories/", data);
export const updateOrganizeCategory = (id, data) =>
patch(`/api/content/organize-categories/${id}/`, data);
export const deleteOrganizeCategory = (id) =>
remove(`/api/content/organize-categories/${id}/`);
export const listMagazineCategories = (params) =>
get("/api/content/magazine-categories/", params).then(unwrap);
export const createMagazineCategory = (data) =>
post("/api/content/magazine-categories/", data);
export const updateMagazineCategory = (id, data) =>
patch(`/api/content/magazine-categories/${id}/`, data);
export const deleteMagazineCategory = (id) =>
remove(`/api/content/magazine-categories/${id}/`);
/** @deprecated 使用 listSubjects / listOrganizeCategories */
export const listCategories = (params) => {
const type = params?.type;
if (type === 1) return listOrganizeCategories({ ...params, type: undefined });
if (type === 2) return listSubjects({ ...params, type: undefined });
if (type === 3) return listMagazineCategories({ ...params, type: undefined });
return listSubjects(params);
};
export const listNews = (params) => get("/api/cms/news/", params).then(unwrap);
export const getNews = (id) => get(`/api/cms/news/${id}/`);
export const createNews = (data) => post("/api/cms/news/", data);
export const updateNews = (id, data) => patch(`/api/cms/news/${id}/`, data);
export const deleteNews = (id) => remove(`/api/cms/news/${id}/`);
export const listPublications = (params) =>
get("/api/cms/publications/", params).then(unwrap);
export const getPublication = (id) => get(`/api/cms/publications/${id}/`);
export const createPublication = (data) => post("/api/cms/publications/", data);
export const updatePublication = (id, data) =>
patch(`/api/cms/publications/${id}/`, data);
export const deletePublication = (id) => remove(`/api/cms/publications/${id}/`);
export const listReports = (params) => get("/api/cms/reports/", params).then(unwrap);
export const getReport = (id) => get(`/api/cms/reports/${id}/`);
export const createReport = (data) => post("/api/cms/reports/", data);
export const updateReport = (id, data) => patch(`/api/cms/reports/${id}/`, data);
export const deleteReport = (id) => remove(`/api/cms/reports/${id}/`);
export const getAbout = () => get("/api/cms/about/current/");
export const listAbout = (params) => get("/api/cms/about/", params).then(unwrap);
export const createAbout = (data) => post("/api/cms/about/", data);
export const updateAbout = (id, data) => patch(`/api/cms/about/${id}/`, data);
export const getCopyright = () => get("/api/cms/copyright/current/");
export const listCopyright = (params) =>
get("/api/cms/copyright/", params).then(unwrap);
export const createCopyright = (data) => post("/api/cms/copyright/", data);
export const updateCopyright = (id, data) => patch(`/api/cms/copyright/${id}/`, data);
export const getContact = () => get("/api/cms/contact/current/");
export const listContact = (params) => get("/api/cms/contact/", params).then(unwrap);
export const createContact = (data) => post("/api/cms/contact/", data);
export const updateContact = (id, data) => patch(`/api/cms/contact/${id}/`, data);
export const listLinks = (params) => get("/api/cms/links/", params).then(unwrap);
export const createLink = (data) => post("/api/cms/links/", data);
export const updateLink = (id, data) => patch(`/api/cms/links/${id}/`, data);
export const deleteLink = (id) => remove(`/api/cms/links/${id}/`);
export const listBanners = () => get("/api/cms/banners/");
export const createBanner = (data) => post("/api/cms/banners/", data);
export const updateBanner = (id, data) => patch(`/api/cms/banners/${id}/`, data);
export const deleteBanner = (id) => remove(`/api/cms/banners/${id}/`);
export const uploadBannerImage = (formData) =>
upload("/api/cms/banners/upload/", formData);
/** 通用媒体上传;formData 可含 file / category / kind */
export const uploadMedia = (formData) => upload("/api/common/uploads/", formData);
export const listKeywords = (params) => get("/api/cms/keywords/", params).then(unwrap);
export const createKeyword = (data) => post("/api/cms/keywords/", data);
export const updateKeyword = (id, data) => patch(`/api/cms/keywords/${id}/`, data);
export const deleteKeyword = (id) => remove(`/api/cms/keywords/${id}/`);
export const listSpecialties = (params) =>
get("/api/content/specialties/", params).then(unwrap);
export const createSpecialty = (data) => post("/api/content/specialties/", data);
export const updateSpecialty = (id, data) => patch(`/api/content/specialties/${id}/`, data);
export const deleteSpecialty = (id) => remove(`/api/content/specialties/${id}/`);
export const listStarRules = (params) =>
get("/api/content/star-rules/", params).then(unwrap);
export const getStarRule = (id) => get(`/api/content/star-rules/${id}/`);
export const createStarRule = (data) => post("/api/content/star-rules/", data);
export const updateStarRule = (id, data) => patch(`/api/content/star-rules/${id}/`, data);
export const deleteStarRule = (id) => remove(`/api/content/star-rules/${id}/`);
export const listRuleBands = (params) =>
get("/api/content/rule-bands/", params).then(unwrap);
export const createRuleBand = (data) => post("/api/content/rule-bands/", data);
export const updateRuleBand = (id, data) => patch(`/api/content/rule-bands/${id}/`, data);
export const deleteRuleBand = (id) => remove(`/api/content/rule-bands/${id}/`);
export const listArticleComments = (params) =>
get("/api/content/article-comments/", params).then(unwrap);
export const createArticleComment = (data) => post("/api/content/article-comments/", data);
export const updateArticleComment = (id, data) =>
patch(`/api/content/article-comments/${id}/`, data);
export const deleteArticleComment = (id) => remove(`/api/content/article-comments/${id}/`);
export const searchAll = (params) => get("/api/cms/search/", params);