完善文档预览的效果修改

This commit is contained in:
2025-04-21 23:02:29 +08:00
parent 5c2c367856
commit cd2f060d87
15 changed files with 718 additions and 565 deletions
+127 -43
View File
@@ -1,21 +1,6 @@
import { postgrestGet, type PostgrestParams, postgrestPut } from "../postgrest-client";
import { postgrestGet, type PostgrestParams, postgrestPut, postgrestPost } from "../postgrest-client";
import {getDocument} from "~/api/files/documents";
import dayjs from 'dayjs';
/**
* 格式化日期
* @param dateString 日期字符串
* @returns 格式化后的日期字符串
*/
function formatDate(dateString: string): string {
if (!dateString) return '';
try {
return dayjs(dateString).format('YYYY-MM-DD HH:mm:ss');
} catch (error) {
console.error('日期格式化失败:', error);
return dateString;
}
}
import { formatDate } from "~/utils";
/**
* 从不同格式的 API 响应中提取数据
@@ -62,6 +47,15 @@ interface EvaluationPoint {
[key: string]: unknown;
}
// 定义审核状态类型
interface AuditStatus {
id: string | number;
document_id: string | number;
evaluation_point_id: string | number;
edit_audit_status: number;
[key: string]: unknown;
}
// 定义评查点组类型
interface EvaluationPointGroup {
id: string | number;
@@ -185,6 +179,47 @@ export async function getReviewPoints(fileId: string) {
return { data: [], stats: { total: 0, success: 0, warning: 0, error: 0, score: 0 } };
}
// 从audit_status表中 获取 需人工审核 的那些评查点的数据
// console.log('evaluationPointsData1112------', evaluationPointsData.find(point => point.post_action === 'manual'));
const manualReviewPoints = evaluationPointsData.filter(point => point.post_action === 'manual');
const manualReviewPointsIds = manualReviewPoints.map(point => point.id);
const manualReviewPointsParams: PostgrestParams = {
select: '*',
filter: {
'document_id': `eq.${fileId}`,
'evaluation_point_id': `in.(${manualReviewPointsIds.join(',')})`
}
};
const manualReviewPointsResponse = await postgrestGet('audit_status', manualReviewPointsParams);
if (manualReviewPointsResponse.error) {
return { error: manualReviewPointsResponse.error, status: manualReviewPointsResponse.status };
}
const manualReviewPointsData = extractApiData<AuditStatus[]>(manualReviewPointsResponse.data);
// 构建评查点ID到editAuditStatus的映射
const editAuditStatusMap = new Map<string | number, {id: string | number, status: number}>();
// 如果有查询结果,则根据evaluation_point_id索引到对应数据
if (manualReviewPointsData && Array.isArray(manualReviewPointsData)) {
manualReviewPointsData.forEach(auditStatus => {
if (auditStatus.evaluation_point_id && auditStatus.edit_audit_status !== undefined) {
editAuditStatusMap.set(auditStatus.evaluation_point_id, {id: auditStatus.id, status: auditStatus.edit_audit_status});
}
});
}
// 为没有对应audit_status记录的manual类型评查点设置默认值0
if (manualReviewPointsIds.length > 0) {
manualReviewPointsIds.forEach(pointId => {
if (!editAuditStatusMap.has(pointId)) {
editAuditStatusMap.set(pointId, {id: '', status: 0});
}
});
}
// console.log('manualReviewPoints-------', manualReviewPoints);
// 创建映射关系以便快速查找
const pointsMap = new Map<string | number, EvaluationPoint>();
evaluationPointsData.forEach(point => {
@@ -204,6 +239,7 @@ export async function getReviewPoints(fileId: string) {
const resultData: ReviewPointResult[] = evaluationResultsData.map(result => {
const point = pointsMap.get(result.evaluation_point_id) || {} as EvaluationPoint;
const group = groupsMap.get(point.evaluation_point_groups_id || 0) || {} as EvaluationPointGroup;
const editAuditStatus = editAuditStatusMap.get(result.evaluation_point_id) || {id: '', status: 0};
// 从 evaluated_results 中提取数据
let message = '';
@@ -268,6 +304,10 @@ export async function getReviewPoints(fileId: string) {
return {
id: result.id,
documentId: fileId,
pointId: point.id,
editAuditStatusId: editAuditStatus.id,
editAuditStatus: editAuditStatus.status,
title: message,
pointName: point.name || '',
groupName: group.name || '',
@@ -356,18 +396,19 @@ export async function getReviewPoints(fileId: string) {
issueCount: issueCount
};
// console.log("reviewInfo-------",JSON.stringify(reviewInfo,null,2));
// data->reviewPoints stats->statistics reviewInfo->reviewInfo document->document
return { data: resultData, stats, reviewInfo, document: documentData.data };
}
/**
* 更新评查结果
* @param resultId 评查结果ID
* @param editAuditStatusId 审核状态ID
* @param result 评查结果 (true/false)
* @param message 评查意见
* @returns 更新后的评查结果
*/
export async function updateReviewResult(resultId: string, result: boolean, message: string): Promise<{
export async function updateReviewResult(resultId: string, editAuditStatusId: string | number, result: string, message: string): Promise<{
data?: unknown;
error?: string;
status?: number;
@@ -396,29 +437,72 @@ export async function updateReviewResult(resultId: string, result: boolean, mess
const currentResult = currentResultData[0];
const currentEvaluatedResults = currentResult.evaluated_results || {};
// 构建要更新的数据,保留原有字段,只更新result和message
// 判断是否是重新审核操作
const isReview = result === 'review';
console.log('isReview-------', result);
// 构建要更新的数据,保留原有字段
const updatedEvaluatedResults = {
...currentEvaluatedResults,
result: result,
message: message
// 如果是重新审核操作,不更新result,只更新message
...(isReview ? { message } : { result: result === 'true' ? true : false, message }),
};
const updatedData = {
evaluated_results: updatedEvaluatedResults
};
// 调用 API 更新数据
const response = await postgrestPut<unknown, typeof updatedData>(
// 调用 API 更新评查点结果数据
const resultResponse = await postgrestPut<unknown, typeof updatedData>(
'evaluation_results',
updatedData,
{ id: resultId }
);
if (response.error) {
return { error: response.error, status: response.status };
if (resultResponse.error) {
return { error: resultResponse.error, status: resultResponse.status };
}
const extractedData = extractApiData<unknown>(response.data);
// 处理audit_status表的更新或新增
// 确定edit_audit_status的值:
// 如果是重新审核操作,值为0;否则值为1
const editAuditStatusValue = isReview ? 0 : 1;
console.log('editAuditStatusValue-------', editAuditStatusValue);
console.log('editAuditStatusId-------', editAuditStatusId);
if (editAuditStatusId && editAuditStatusId !== '') {
// 更新现有审核状态记录
const auditStatusResponse = await postgrestPut(
'audit_status',
{ edit_audit_status: editAuditStatusValue },
{ id: editAuditStatusId }
);
if (auditStatusResponse.error) {
return { error: auditStatusResponse.error, status: auditStatusResponse.status || 500 };
}
} else {
// 如果没有editAuditStatusId,则创建新记录
// 首先获取文档ID和评查点ID
const documentId = currentResult.document_id;
const evaluationPointId = currentResult.evaluation_point_id;
// 创建新的审核状态记录
const newAuditStatus = {
document_id: documentId,
evaluation_point_id: evaluationPointId,
evaluation_result_id: resultId,
edit_audit_status: editAuditStatusValue
};
// 使用postgrestPost创建新记录
const postResponse = await postgrestPost('audit_status', newAuditStatus);
if (postResponse.error) {
return { error: postResponse.error, status: postResponse.status || 500 };
}
}
const extractedData = extractApiData<unknown>(resultResponse.data);
if (!extractedData) {
return { error: '更新评查结果失败', status: 500 };
@@ -435,12 +519,12 @@ export async function updateReviewResult(resultId: string, result: boolean, mess
}
/**
* 确认评查结果并更新文档审核状态
* 确认评查结果并更新文档审核状态 只更新文档的审核状态为通过
* @param documentId 文档ID
* @returns 更新结果
*/
export async function confirmReviewResults(documentId: string): Promise<{
data?: { auditStatus: number; score: number };
data?: { auditStatus: number; };
error?: string;
status?: number;
}> {
@@ -450,26 +534,26 @@ export async function confirmReviewResults(documentId: string): Promise<{
}
// 获取该文档的所有评查点结果
const reviewPointsResponse = await getReviewPoints(documentId);
// const reviewPointsResponse = await getReviewPoints(documentId);
if ('error' in reviewPointsResponse && reviewPointsResponse.error) {
return { error: reviewPointsResponse.error, status: reviewPointsResponse.status };
}
// if ('error' in reviewPointsResponse && reviewPointsResponse.error) {
// return { error: reviewPointsResponse.error, status: reviewPointsResponse.status };
// }
if (!('data' in reviewPointsResponse) || !reviewPointsResponse.data || !Array.isArray(reviewPointsResponse.data)) {
return { error: '获取评查点数据失败', status: 500 };
}
// if (!('data' in reviewPointsResponse) || !reviewPointsResponse.data || !Array.isArray(reviewPointsResponse.data)) {
// return { error: '获取评查点数据失败', status: 500 };
// }
// 计算总分数
const totalScore = reviewPointsResponse.stats?.score || 0;
// // 计算总分数
// const totalScore = reviewPointsResponse.stats?.score || 0;
// 根据总分确定审核状态
// <80分:不通过(-1),>=80分:通过(1)
const auditStatus = totalScore < 80 ? -1 : 1;
// // 根据总分确定审核状态
// // <80分:不通过(-1),>=80分:通过(1)
// const auditStatus = totalScore < 80 ? -1 : 1;
// 更新文档的审核状态
const updateDocumentParams = {
audit_status: auditStatus
audit_status: 1
};
// 调用API更新文档审核状态
@@ -483,7 +567,7 @@ export async function confirmReviewResults(documentId: string): Promise<{
return { error: response.error, status: response.status };
}
return { data: { auditStatus, score: totalScore } };
return { data: { auditStatus: 1} };
} catch (error) {
console.error('确认评查结果失败:', error);
return {