/** * 项目模块API * 统一管理项目相关的所有API调用 */ import { API_CONFIG } from '../config/api.config.js' import { get } from '../utils/request.js' /** * 获取项目分类 * @returns {Promise} 项目分类数据 */ export const getProjectTree = () => { return get(API_CONFIG.PROJECT.TREE) } /** * 获取项目列表 * @param {number} cid 分类ID * @param {number} page 页码,从1开始 * @returns {Promise} 项目列表数据 */ export const getProjectList = (cid, page = 1) => { const url = API_CONFIG.PROJECT.LIST.replace('{page}', page) return get(url, { cid }) } /** * 获取项目详情 * @param {number} id 项目ID * @returns {Promise} 项目详情数据 */ export const getProjectDetail = (id) => { const url = API_CONFIG.PROJECT.DETAIL.replace('{id}', id) return get(url) } /** * 搜索项目 * @param {string} keyword 搜索关键词 * @param {number} cid 分类ID(可选) * @param {number} page 页码 * @returns {Promise} 搜索结果 */ export const searchProjects = (keyword, cid = null, page = 1) => { const url = API_CONFIG.PROJECT.LIST.replace('{page}', page) const params = { k: keyword } if (cid !== null) { params.cid = cid } return get(url, params) } /** * 获取项目模块完整数据(分类 + 默认分类的项目列表) * @param {number} defaultCid 默认分类ID * @returns {Promise} 项目模块完整数据 */ export const getProjectModuleData = async (defaultCid = null) => { try { // 获取项目分类 const treeData = await getProjectTree() const categories = treeData || [] // 如果有默认分类,获取该分类的项目列表 let projectList = [] let selectedCategory = null if (categories.length > 0) { // 如果没有指定默认分类,使用第一个分类 const targetCid = defaultCid || (categories[0]?.id || null) selectedCategory = categories.find(cat => cat.id === targetCid) || categories[0] if (selectedCategory) { projectList = await getProjectList(selectedCategory.id, 1) } } return { categories, projectList: projectList?.datas || [], selectedCategory, total: projectList?.total || 0, pageCount: projectList?.pageCount || 0, currentPage: 1 } } catch (error) { console.error('获取项目模块数据失败:', error) throw error } } export default { getProjectTree, getProjectList, getProjectDetail, searchProjects, getProjectModuleData }