fix: 1. 重新对齐交叉评查的接口。

2. 确认评查结果的接口对接。 3. 新增评查点适配省级创建的响应数据和其他用户创建的单条响应数据。  4. 文档列表的文档类型通过通用的查询接口查询文档类型。优化加载状态的时机。
This commit is contained in:
2025-12-11 11:16:50 +08:00
parent ba517d7b9c
commit d8bba607fc
18 changed files with 3435 additions and 1086 deletions
+64 -30
View File
@@ -136,7 +136,7 @@ export async function submitCrossCheckingOpinion(
evaluation_result_id: opinionData.reviewPointResultId
};
const response = await axios.post(`${API_BASE_URL}/admin/cross_review/proposals`, requestData, {
const response = await axios.post(`${API_BASE_URL}/api/v2/cross_review/proposals`, requestData, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
@@ -196,8 +196,8 @@ export async function getCrossCheckingOpinions(
// 如果没传userId,默认用1
const realUserId = userId ?? 1;
// 实际后端API调用,拼接API_BASE_URL
const response = await axios.post(`${API_BASE_URL}/admin/cross_review/proposals/document`, {
user_id: realUserId,
const response = await axios.post(`${API_BASE_URL}/api/v2/cross_review/proposals/document`, {
// user_id: realUserId,
document_id: documentId, // 如果后端需要document_id可以加上
page,
page_size: pageSize
@@ -209,7 +209,7 @@ export async function getCrossCheckingOpinions(
});
const data = response.data;
console.log('最原始的返回data', data);
// console.log('最原始的返回data', data);
// 处理新的数据结构,支持分页
const responseData = data.data || data;
const pagination = data.pagination;
@@ -318,24 +318,24 @@ export async function performOpinionAction(
switch (actionData.action) {
case 'agree':
message = '已赞同该意见';
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/votes`;
endpoint = `${API_BASE_URL}/api/v2/cross_review/proposals/${actionData.opinionId}/votes`;
requestBody = { vote_type: 'agree', voter_id: userInfo?.user_id };
break;
case 'disagree':
message = '已反对该意见';
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/votes`;
endpoint = `${API_BASE_URL}/api/v2/cross_review/proposals/${actionData.opinionId}/votes`;
requestBody = { vote_type: 'disagree', voter_id: userInfo?.user_id };
break;
case 'withdraw_vote':
message = '已撤销投票';
// 撤销投票的接口,根据实际API调整
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}/votes`;
endpoint = `${API_BASE_URL}/api/v2/cross_review/proposals/${actionData.opinionId}/votes`;
requestBody = { vote_type: 'cancel', voter_id: userInfo?.user_id };
break;
case 'withdraw_opinion':
message = '已撤销意见';
// 撤销意见的接口,根据实际API调整
endpoint = `${API_BASE_URL}/admin/cross_review/proposals/${actionData.opinionId}`;
endpoint = `${API_BASE_URL}/api/v2/cross_review/proposals/${actionData.opinionId}`;
requestBody = {};
break;
default:
@@ -389,43 +389,77 @@ export async function performOpinionAction(
/**
* 完成评查
* 完成评查(确认文档审核完成)
* @param taskId 任务ID
* @param documentId 文档ID
* @param frontendJWT JWT token
* @returns 完成评查结果
*
* 🔥 接口文档: auth_doc/交叉评查接口文档(1).md 接口10
* 📍 API地址: POST /admin/v2/cross_review/tasks/{task_id}/documents/{document_id}/complete
*/
export async function confirmReviewResults(
taskId: string | number,
documentId: string | number,
frontendJWT?: string
): Promise<{data?: unknown, error?: string, status?: number}> {
try {
// 通过postgrest的post请求去documents表中进行查找id等于documentId的数据,更新documents表的audit_status为1
const response = await postgrestPut(`/api/postgrest/proxy/documents`, {
audit_status: 1
}, {
id: documentId
}, frontendJWT);
if(response.error) {
if (!taskId) {
return { error: '任务ID不能为空', status: 400 };
}
if (!documentId) {
return { error: '文档ID不能为空', status: 400 };
}
// 调用后端API确认文档审核完成
// 接口: POST /admin/v2/cross_review/tasks/{task_id}/documents/{document_id}/complete
const response = await axios.post(
`${API_BASE_URL}/admin/v2/cross_review/tasks/${taskId}/documents/${documentId}/complete`,
{}, // 无需请求体
{
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${frontendJWT}`
}
}
);
const data = response.data;
// 检查响应是否成功
if (data?.success || data?.code === 0) {
return {
error: response.error,
status: response.status
};
}
const extractedData = extractApiData<unknown>(response.data);
if(!extractedData) {
return {
error: '更新文档状态失败',
status: 500
data: {
task_id: data.task_id || taskId,
document_id: data.document_id || documentId,
message: data.message || '文档评查已完成'
}
};
}
// 数据为空或格式不正确
console.error('❌ [confirmReviewResults] API响应数据异常:', data);
return {
data: extractedData
error: data?.message || '确认文档审核失败',
status: 500
};
} catch (error) {
console.error('完成评查失败:', error);
// 正确处理 axios 错误响应
let errorMessage = '完成评查失败';
if (axios.isAxiosError(error) && error.response?.data) {
// 从 axios 错误响应中提取 detail 或 msg 字段
errorMessage = error.response.data.detail || error.response.data.msg || errorMessage;
} else if (error instanceof Error) {
errorMessage = error.message || errorMessage;
}
return {
error: error instanceof Error ? error.message : '完成评查失败',
status: 500
error: errorMessage,
status: axios.isAxiosError(error) ? error.response?.status || 500 : 500
};
}
}
@@ -444,7 +478,7 @@ export async function checkProposalVotes(
document_id: documentId
};
const response = await axios.post(`${API_BASE_URL}/admin/cross_review/proposals/document/check_pending_votes`, requestData, {
const response = await axios.post(`${API_BASE_URL}/api/v2/cross_review/proposals/document/check_pending_votes`, requestData, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`
+2 -2
View File
@@ -403,7 +403,7 @@ export async function getUserTaskDocuments(page: number = 1, pageSize: number =
try {
// 拼接绝对路径,去除多余斜杠
const base = API_BASE_URL.endsWith('/') ? API_BASE_URL.slice(0, -1) : API_BASE_URL;
const url = `${base}/admin/cross_review/tasks/user_tasks`;
const url = `${base}/admin/v2/cross_review/tasks/user_tasks`;
const response = await axios.post(url, {
page: page,
@@ -445,7 +445,7 @@ export async function getTaskDocuments(taskId: number, page: number = 1, pageSiz
try {
// 拼接绝对路径,去除多余斜杠
const base = API_BASE_URL.endsWith('/') ? API_BASE_URL.slice(0, -1) : API_BASE_URL;
const url = `${base}/admin/cross_review/tasks/${taskId}/documents`;
const url = `${base}/admin/v2/cross_review/tasks/${taskId}/documents`;
// console.log('最终请求URL:', url);
const response = await axios.post(url, {