feat(project): 实现任务和里程碑管理功能
Some checks failed
Lint Code / Lint Code (push) Failing after 2m14s

- 新增项目里程碑相关API接口,包括增删改查和状态进度更新
- 新增项目任务相关API接口,支持任务列表查询及增删改查
- 在项目详情页增加任务与里程碑权限控制及操作按钮展示
- 实现任务和里程碑的新增、编辑和删除模态框及表单校验
- 支持任务优先级、状态、进度、负责人等字段的管理和展示
- 里程碑支持关键标记、计划与实际日期、交付物等信息编辑
- 任务列表以表格形式展示,支持按状态展示颜色和标签
- 里程碑时间线增加操作按钮,支持权限校验后编辑和删除
- 任务状态显示对应颜色和文本,提升用户体验
- 优化项目详情页布局,新增任务列表分区和样式调整
This commit is contained in:
2026-03-31 17:03:07 +08:00
parent df6970b71c
commit e10aa07367
3 changed files with 2745 additions and 850 deletions

View File

@@ -441,3 +441,167 @@ export const getTaskStatus = (taskId: string) => {
`/api/v1/project-init/task/${taskId}`
);
};
// ==================== 里程碑管理 API ====================
/** 里程碑查询参数 */
export type MilestoneQueryParams = {
pageNum?: number;
pageSize?: number;
projectId?: string;
status?: string;
};
/** 分页查询里程碑列表 */
export const getMilestoneList = (params?: MilestoneQueryParams) => {
return http.request<Result<TableDataInfo<ProjectMilestone>>>(
"get",
"/api/v1/milestone/list",
{ params }
);
};
/** 根据ID查询里程碑详情 */
export const getMilestoneById = (id: string) => {
return http.request<Result<ProjectMilestone>>(
"get",
`/api/v1/milestone/${id}`
);
};
/** 新增里程碑 */
export const createMilestone = (data: ProjectMilestone) => {
return http.request<Result<string>>("post", "/api/v1/milestone", { data });
};
/** 修改里程碑 */
export const updateMilestone = (data: ProjectMilestone) => {
return http.request<Result<void>>("put", "/api/v1/milestone", { data });
};
/** 删除里程碑 */
export const deleteMilestone = (id: string) => {
return http.request<Result<void>>("delete", `/api/v1/milestone/${id}`);
};
/** 更新里程碑进度 */
export const updateMilestoneProgress = (id: string, progress: number) => {
return http.request<Result<void>>("put", `/api/v1/milestone/${id}/progress`, {
params: { progress }
});
};
/** 更新里程碑状态 */
export const updateMilestoneStatus = (id: string, status: string) => {
return http.request<Result<void>>("put", `/api/v1/milestone/${id}/status`, {
params: { status }
});
};
/** 查询已延期的关键里程碑 */
export const getDelayedKeyMilestones = (projectId: string) => {
return http.request<Result<ProjectMilestone[]>>(
"get",
"/api/v1/milestone/delayed-key",
{ params: { projectId } }
);
};
/** 查询即将到期的里程碑 */
export const getUpcomingMilestones = (projectId: string, days: number = 7) => {
return http.request<Result<ProjectMilestone[]>>(
"get",
"/api/v1/milestone/upcoming",
{ params: { projectId, days } }
);
};
/** 查询里程碑完成进度统计 */
export const getMilestoneProgressStats = (projectId: string) => {
return http.request<Result<Record<string, any>>>(
"get",
"/api/v1/milestone/stats/progress",
{ params: { projectId } }
);
};
// ==================== 任务管理 API ====================
/** 任务查询参数 */
export type TaskQueryParams = {
pageNum?: number;
pageSize?: number;
projectId?: string;
milestoneId?: string;
assigneeId?: string;
status?: string;
priority?: string;
keyword?: string;
};
/** 分页查询任务列表 */
export const getTaskList = (params?: TaskQueryParams) => {
return http.request<Result<TableDataInfo<ProjectTask>>>(
"get",
"/api/v1/task/list",
{ params }
);
};
/** 根据ID查询任务详情 */
export const getTaskById = (id: string) => {
return http.request<Result<ProjectTask>>("get", `/api/v1/task/${id}`);
};
/** 新增任务 */
export const createTask = (data: ProjectTask) => {
return http.request<Result<string>>("post", "/api/v1/task", { data });
};
/** 修改任务 */
export const updateTask = (data: ProjectTask) => {
return http.request<Result<void>>("put", "/api/v1/task", { data });
};
/** 删除任务 */
export const deleteTask = (id: string) => {
return http.request<Result<void>>("delete", `/api/v1/task/${id}`);
};
/** 查询我的待办任务 */
export const getMyTodoTasks = (userId: string, projectId?: string) => {
return http.request<Result<ProjectTask[]>>("get", "/api/v1/task/my-tasks", {
params: { userId, projectId }
});
};
/** 更新任务进度 */
export const updateTaskProgress = (id: string, progress: number) => {
return http.request<Result<void>>("put", `/api/v1/task/${id}/progress`, {
params: { progress }
});
};
/** 更新任务状态 */
export const updateTaskStatus = (id: string, status: string) => {
return http.request<Result<void>>("put", `/api/v1/task/${id}/status`, {
params: { status }
});
};
/** 查询任务依赖关系 */
export const getTaskDependencies = (id: string) => {
return http.request<Result<Record<string, any>[]>>(
"get",
`/api/v1/task/${id}/dependencies`
);
};
/** 统计项目任务状态分布 */
export const getTaskStatusStats = (projectId: string) => {
return http.request<Result<Record<string, any>[]>>(
"get",
"/api/v1/task/stats/status",
{ params: { projectId } }
);
};

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff