feat: 1. 完善交叉评查上传创建任务,改成动态加载文档类型。

2. 重新对齐交叉评查的接口。
This commit is contained in:
2025-12-02 10:10:03 +08:00
parent c9e0d5abba
commit 88466b7a8b
21 changed files with 561 additions and 174 deletions
+80 -2
View File
@@ -1,4 +1,4 @@
import { UPLOAD_URL } from '../../config/api-config';
import { UPLOAD_URL, API_BASE_URL } from '../../config/api-config';
import axios from 'axios';
/**
@@ -208,6 +208,7 @@ export async function uploadCrossCheckingDocument(
* @param assignUserIds 需要分配的用户ID数组
* @param taskName 任务名称
* @param docType 文档类型(如 XZCF、XZXK
* @param taskType 任务类型(如 市局间交叉评查、区局间交叉评查)
* @param token JWT Token
*/
export async function batchUploadAndAssignCrossCheckingFiles(
@@ -220,6 +221,7 @@ export async function batchUploadAndAssignCrossCheckingFiles(
assignUserIds: number[],
taskName: string,
docType: string,
taskType: string = '市局间交叉评查',
token: string | null = null
): Promise<{
successes: Array<{file: CrossCheckingUploadedFile; result: Record<string, unknown>}>;
@@ -229,6 +231,10 @@ export async function batchUploadAndAssignCrossCheckingFiles(
const failures: Array<{file: CrossCheckingUploadedFile; error: string}> = [];
const uploadEndpoint = '/cross_review/documents/upload_and_assign';
const uploadUrl = UPLOAD_URL + uploadEndpoint;
// console.log('[批量上传] 任务类型:', taskType, '文档类型:', docType);
for (const fileInfo of files) {
try {
const formData = new FormData();
@@ -240,15 +246,22 @@ export async function batchUploadAndAssignCrossCheckingFiles(
remark: remark || null,
is_test_document: isTestDocument,
task_name: taskName,
doc_type: typeof docType === 'string' ? docType.toUpperCase() : docType
doc_type: typeof docType === 'string' ? docType.toUpperCase() : docType,
task_type: taskType
};
// console.log('fileInfo', fileInfo)
formData.append('upload_info', JSON.stringify(uploadInfo));
formData.append('assign_user_ids', JSON.stringify(assignUserIds));
const headers: Record<string, string> = {};
if (token) headers['Authorization'] = `Bearer ${token}`;
const response = await axios.post(uploadUrl, formData, {
headers
});
const result = response.data;
if (result && result.success) {
successes.push({ file: fileInfo, result });
@@ -262,6 +275,71 @@ export async function batchUploadAndAssignCrossCheckingFiles(
return { successes, failures };
}
/**
* 创建交叉评查任务
* @param taskData 任务数据
* @param token JWT Token
* @returns 创建结果
*/
export async function createCrossReviewTask(taskData: {
documentIds: number[];
userIds: number[];
assignerId: number;
taskName: string;
docType: string;
taskType?: string;
}, token: string | null = null): Promise<{
success: boolean;
data?: unknown;
error?: string;
}> {
try {
const requestBody = {
document_ids: taskData.documentIds,
user_ids: taskData.userIds,
assigner_id: taskData.assignerId,
task_name: taskData.taskName,
doc_type: taskData.docType,
task_type: taskData.taskType || '市局间交叉评查'
};
// console.log('[创建任务] 请求数据:', requestBody);
const headers: Record<string, string> = {
'Content-Type': 'application/json'
};
if (token) {
headers['Authorization'] = `Bearer ${token}`;
}
const response = await axios.post(
`${API_BASE_URL}/admin/cross_review/tasks/assign`,
requestBody,
{ headers }
);
console.log('[创建任务] 成功:', response.data);
return {
success: true,
data: response.data
};
} catch (error) {
console.error('[创建任务] 失败:', error);
let errorMessage = '创建任务失败';
if (axios.isAxiosError(error) && error.response?.data) {
errorMessage = error.response.data.msg || errorMessage;
} else if (error instanceof Error) {
errorMessage = error.message || errorMessage;
}
return {
success: false,
error: errorMessage
};
}
}
/**
* 生成唯一文件ID
* @returns 唯一ID字符串