Files
Ubuntu 32b43f85bd a
2026-07-03 16:58:28 +08:00

99 lines
2.5 KiB
JavaScript

/**
* 项目模块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
}