feat(项目需求): 开发项目需求的功能。

This commit is contained in:
dk
2026-05-13 21:13:21 +08:00
parent 28c47b14a3
commit 60debcda8a
19 changed files with 3562 additions and 92 deletions

View File

@@ -542,3 +542,256 @@ export function fetchChangeProjectTaskStatus(
data: payload.data
});
}
// ========== 项目需求 API ==========
const PROJECT_REQUIREMENT_PREFIX = `${WEB_SERVICE_PREFIX}/project/project/requirement`;
type ProjectRequirementResponse = Omit<
Api.Project.ProjectRequirement,
'id' | 'projectId' | 'parentId' | 'moduleId' | 'proposerId' | 'currentHandlerUserId' | 'sourceBizId'
> & {
id: string | number;
projectId: string | number;
parentId: string | number;
moduleId: string | number;
proposerId: string | number;
currentHandlerUserId?: string | number | null;
sourceBizId?: string | number | null;
children?: ProjectRequirementResponse[];
};
type ProjectRequirementPageResponse = Api.Project.PageResult<ProjectRequirementResponse>;
type ProjectRequirementModuleResponse = Omit<Api.Project.ProjectRequirementModule, 'id' | 'parentId' | 'projectId'> & {
id: string | number;
parentId: string | number;
projectId: string | number;
children?: ProjectRequirementModuleResponse[];
};
function normalizeProjectRequirement(requirement: ProjectRequirementResponse): Api.Project.ProjectRequirement {
return {
...requirement,
id: normalizeStringId(requirement.id),
projectId: normalizeStringId(requirement.projectId),
parentId: normalizeStringId(requirement.parentId),
moduleId: normalizeStringId(requirement.moduleId),
proposerId: normalizeStringId(requirement.proposerId),
currentHandlerUserId: normalizeNullableStringId(requirement.currentHandlerUserId),
sourceBizId: normalizeNullableStringId(requirement.sourceBizId),
children: requirement.children?.map(normalizeProjectRequirement)
};
}
function normalizeProjectRequirementModule(
module: ProjectRequirementModuleResponse
): Api.Project.ProjectRequirementModule {
return {
...module,
id: normalizeStringId(module.id),
parentId: normalizeStringId(module.parentId),
projectId: normalizeStringId(module.projectId),
children: module.children?.map(normalizeProjectRequirementModule)
};
}
/** 获取项目需求分页列表 */
export async function fetchGetProjectRequirementPage(params?: Api.Project.ProjectRequirementSearchParams) {
const result = await request<ProjectRequirementPageResponse>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/page`,
method: 'get',
params
});
return mapServiceResult(result as ServiceRequestResult<ProjectRequirementPageResponse>, data => ({
...data,
list: data.list.map(normalizeProjectRequirement)
}));
}
/** 获取项目需求树形列表 */
export async function fetchGetProjectRequirementTree(params?: Api.Project.ProjectRequirementSearchParams) {
const result = await request<ProjectRequirementPageResponse>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/tree`,
method: 'get',
params
});
return mapServiceResult(result as ServiceRequestResult<ProjectRequirementPageResponse>, data => ({
...data,
list: data.list.map(normalizeProjectRequirement)
}));
}
/** 获取项目需求详情 */
export async function fetchGetProjectRequirement(id: string, projectId: string) {
const result = await request<ProjectRequirementResponse>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/get`,
method: 'get',
params: { id, projectId }
});
return mapServiceResult(result as ServiceRequestResult<ProjectRequirementResponse>, normalizeProjectRequirement);
}
/** 创建项目需求 */
export async function fetchCreateProjectRequirement(data: Api.Project.SaveProjectRequirementParams) {
const result = await request<string | number>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/create`,
method: 'post',
data
});
return mapServiceResult(result as ServiceRequestResult<string | number>, normalizeStringId);
}
/** 更新项目需求 */
export function fetchUpdateProjectRequirement(data: Api.Project.UpdateProjectRequirementParams) {
return request<boolean>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/update`,
method: 'put',
data
});
}
/** 变更项目需求状态 */
export function fetchChangeProjectRequirementStatus(data: Api.Project.ChangeProjectRequirementStatusParams) {
return request<boolean>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/change-status`,
method: 'post',
data
});
}
/** 删除项目需求 */
export function fetchDeleteProjectRequirement(data: Api.Project.DeleteProjectRequirementParams) {
return request<boolean>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/delete`,
method: 'post',
data
});
}
/** 拆分项目需求 */
export async function fetchSplitProjectRequirement(data: Api.Project.SplitProjectRequirementParams) {
const result = await request<string | number>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/split`,
method: 'post',
data
});
return mapServiceResult(result as ServiceRequestResult<string | number>, normalizeStringId);
}
/** 关闭项目需求 */
export function fetchCloseProjectRequirement(data: Api.Project.CloseProjectRequirementParams) {
return request<boolean>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/close`,
method: 'post',
data
});
}
/** 获取项目需求可执行状态动作列表 */
export async function fetchGetProjectRequirementAllowedTransitions(requirementId: string, projectId: string) {
const result = await request<Api.Project.ProjectRequirementLifecycleAction[]>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/allowed-transitions`,
method: 'get',
params: { requirementId, projectId }
});
return mapServiceResult(
result as ServiceRequestResult<Api.Project.ProjectRequirementLifecycleAction[]>,
data => data
);
}
/** 获取项目需求生命周期信息 */
export async function fetchGetProjectRequirementLifecycle(requirementId: string, projectId: string) {
const result = await request<Api.Project.ProjectRequirementLifecycleInfo>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/lifecycle`,
method: 'get',
params: { requirementId, projectId }
});
return mapServiceResult(result as ServiceRequestResult<Api.Project.ProjectRequirementLifecycleInfo>, data => data);
}
/** 获取项目需求状态字典 */
export async function fetchGetProjectRequirementStatusDict() {
const result = await request<Api.Project.ProjectRequirementStatusDict[]>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/status/dict`,
method: 'get'
});
return mapServiceResult(result as ServiceRequestResult<Api.Project.ProjectRequirementStatusDict[]>, data => data);
}
/** 获取项目需求终态状态字典 */
export async function fetchGetProjectRequirementTerminalStatusDict() {
const result = await request<Api.Project.ProjectRequirementStatusDict[]>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/status/dict/terminal`,
method: 'get'
});
return mapServiceResult(result as ServiceRequestResult<Api.Project.ProjectRequirementStatusDict[]>, data => data);
}
/** 获取项目需求模块树 */
export async function fetchGetProjectRequirementModuleTree(projectId: string) {
const result = await request<ProjectRequirementModuleResponse[]>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/module/tree`,
method: 'get',
params: { projectId }
});
return mapServiceResult(result as ServiceRequestResult<ProjectRequirementModuleResponse[]>, data =>
data.map(normalizeProjectRequirementModule)
);
}
/** 创建项目需求模块 */
export async function fetchCreateProjectRequirementModule(data: Api.Project.SaveProjectRequirementModuleParams) {
const result = await request<string | number>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/module/create`,
method: 'post',
data
});
return mapServiceResult(result as ServiceRequestResult<string | number>, normalizeStringId);
}
/** 更新项目需求模块 */
export function fetchUpdateProjectRequirementModule(data: Api.Project.SaveProjectRequirementModuleParams) {
return request<boolean>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/module/update`,
method: 'put',
data
});
}
/** 删除项目需求模块 */
export function fetchDeleteProjectRequirementModule(data: Api.Project.DeleteProjectRequirementModuleParams) {
return request<boolean>({
...safeJsonRequestConfig,
url: `${PROJECT_REQUIREMENT_PREFIX}/module/delete`,
method: 'post',
data
});
}