完善通过评查点的显示优化

This commit is contained in:
2025-05-27 10:05:12 +08:00
parent ed3ff4c3b3
commit 742a789244
5 changed files with 34 additions and 30 deletions
+1
View File
@@ -121,6 +121,7 @@ export async function getReviewPoints(fileId: string) {
return { error: evaluationResultsResponse.error, status: evaluationResultsResponse.status }; return { error: evaluationResultsResponse.error, status: evaluationResultsResponse.status };
} }
// 评查结果数据
const evaluationResultsData = extractApiData<EvaluationResult[]>(evaluationResultsResponse.data) || []; const evaluationResultsData = extractApiData<EvaluationResult[]>(evaluationResultsResponse.data) || [];
if (Array.isArray(evaluationResultsData) && evaluationResultsData.length <= 0) { if (Array.isArray(evaluationResultsData) && evaluationResultsData.length <= 0) {
+2 -1
View File
@@ -13,6 +13,7 @@ interface FileInfo {
pageCount: number; pageCount: number;
uploadTime: string; uploadTime: string;
uploadUser: string; uploadUser: string;
fileType: string;
} }
// 合同信息 // 合同信息
@@ -133,7 +134,7 @@ export function FileDetails({ fileInfo, contractInfo, reviewInfo }: FileDetailsP
{renderInfoSection('文件基本信息', 'ri-file-info-line', 'blue', ( {renderInfoSection('文件基本信息', 'ri-file-info-line', 'blue', (
<div className="grid grid-cols-1 md:grid-cols-2 gap-4"> <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
{renderInfoRow('文件名称', fileInfo.fileName)} {renderInfoRow('文件名称', fileInfo.fileName)}
{renderInfoRow('合同编号', fileInfo.contractNumber)} {renderInfoRow(fileInfo.fileType != "1" ? '卷宗编号' : '合同编号', fileInfo.contractNumber)}
{renderInfoRow('文件大小', fileInfo.fileSize)} {renderInfoRow('文件大小', fileInfo.fileSize)}
{renderInfoRow('文件格式', fileInfo.fileFormat)} {renderInfoRow('文件格式', fileInfo.fileFormat)}
{renderInfoRow('页数', `${fileInfo.pageCount}`)} {renderInfoRow('页数', `${fileInfo.pageCount}`)}
+11 -24
View File
@@ -443,11 +443,11 @@ export function ReviewPointsList({
* @param reviewPoint 评查点 * @param reviewPoint 评查点
* @returns 评查点主要内容组件 * @returns 评查点主要内容组件
*/ */
const renderContent = (reviewPoint: ReviewPoint) => { const renderContent = (reviewPoint: ReviewPoint, result?: boolean) => {
return ( return (
<> <>
{/* 修改评查结果的结构之后,显示新的结构 */} {/* 修改评查结果的结构之后,显示新的结构 */}
{Object.entries(reviewPoint.content).map(([key, value], index) => ( {Object.entries(reviewPoint.content).map(([key, value], index) => !(result && value.value?.toString().trim() == '') && (
<div <div
key={index} key={index}
className="mb-2 pb-2 border-b border-gray-100 last:border-b-0 last:mb-0 last:pb-0 cursor-pointer hover:bg-gray-100 transition-colors duration-200 rounded p-1 group" className="mb-2 pb-2 border-b border-gray-100 last:border-b-0 last:mb-0 last:pb-0 cursor-pointer hover:bg-gray-100 transition-colors duration-200 rounded p-1 group"
@@ -507,6 +507,7 @@ export function ReviewPointsList({
{value.value?.toString().trim() ? '' : '缺失'} {value.value?.toString().trim() ? '' : '缺失'}
</span> </span>
</div> </div>
<div className="relative text-container max-h-96 group-hover:overflow-auto overflow-hidden"> <div className="relative text-container max-h-96 group-hover:overflow-auto overflow-hidden">
<p <p
className="text-xs text-left select-text block overflow-hidden !line-clamp-2 className="text-xs text-left select-text block overflow-hidden !line-clamp-2
@@ -544,22 +545,7 @@ export function ReviewPointsList({
if (editingReviewPoint !== reviewPoint.id) { if (editingReviewPoint !== reviewPoint.id) {
// 根据result和status决定渲染哪种样式 // 根据result和status决定渲染哪种样式
if (reviewPoint.result === true) { if (reviewPoint.result === true) {
// 已通过的评查点只显示基本信息和人工审核注释 delete TODO // 已通过的评查点只显示基本信息和人工审核注释
// if (reviewPoint.needsHumanReview && reviewPoint.humanReviewNote) {
// return (
// <div className="mt-2">
// <div className="p-2 bg-green-50 rounded border border-green-200 text-xs">
// <p className="text-xs text-success"><i className="ri-check-line mr-1"></i>已处理</p>
// {reviewPoint.suggestion && (
// <div className="border-t border-green-200 mt-1 pt-1">
// <p className="text-xs text-gray-600 select-text">{reviewPoint.suggestion}</p>
// </div>
// )}
// </div>
// </div>
// );
// }
// 处理 result=true 且 postAction=manual 的情况 // 处理 result=true 且 postAction=manual 的情况
if (reviewPoint.postAction === 'manual') { if (reviewPoint.postAction === 'manual') {
const note = manualReviewNotes[reviewPoint.id] || ''; const note = manualReviewNotes[reviewPoint.id] || '';
@@ -591,7 +577,7 @@ export function ReviewPointsList({
{reviewPoint.content && Object.entries(reviewPoint.content).length > 0 && ( {reviewPoint.content && Object.entries(reviewPoint.content).length > 0 && (
<div className="p-2 bg-white rounded border border-gray-200 text-xs mb-3 select-text"> <div className="p-2 bg-white rounded border border-gray-200 text-xs mb-3 select-text">
{/* 修改评查结果的结构之后,显示新的结构 */} {/* 修改评查结果的结构之后,显示新的结构 */}
{renderContent(reviewPoint)} {renderContent(reviewPoint, true)}
</div> </div>
)} )}
@@ -644,12 +630,13 @@ export function ReviewPointsList({
{checkContentPage(reviewPoint).pageIndex === 0 && ( {checkContentPage(reviewPoint).pageIndex === 0 && (
<p className="text-xs text-red-500 select-text text-left"></p> <p className="text-xs text-red-500 select-text text-left"></p>
)} )}
<div className="p-2 bg-white rounded border border-gray-200 text-xs mb-3 select-text"> {/* 评查点内容显示区域 */}
<div> {reviewPoint.content && Object.entries(reviewPoint.content).length > 0 && (
<div className="p-2 bg-white rounded border border-gray-200 text-xs mb-3 select-text">
{/* 修改评查结果的结构之后,显示新的结构 */} {/* 修改评查结果的结构之后,显示新的结构 */}
{renderContent(reviewPoint)} {renderContent(reviewPoint, true)}
</div> </div>
</div> )}
</> </>
); );
} }
@@ -714,7 +701,7 @@ export function ReviewPointsList({
<div className="p-2 bg-white rounded border border-gray-200 text-xs mb-3 select-text"> <div className="p-2 bg-white rounded border border-gray-200 text-xs mb-3 select-text">
<div> <div>
{/* 修改评查结果的结构之后,显示新的结构 */} {/* 修改评查结果的结构之后,显示新的结构 */}
{renderContent(reviewPoint)} {renderContent(reviewPoint,false)}
</div> </div>
</div> </div>
</> </>
+8
View File
@@ -104,6 +104,14 @@ export function ReviewTabs({ activeTab, onTabChange, children, fileInfo, onConfi
> >
<i className="ri-lightbulb-line"></i> AI智能分析 <i className="ri-lightbulb-line"></i> AI智能分析
</button> */} </button> */}
<button
className={`tab-nav-item ${activeTab === 'fileinfo' ? 'active' : ''}`}
onClick={() => onTabChange('fileinfo')}
type="button"
aria-pressed={activeTab === 'fileinfo'}
>
<i className="ri-flip-horizontal-line"></i>
</button>
<button <button
className={`tab-nav-item ${activeTab === 'fileinfo' ? 'active' : ''}`} className={`tab-nav-item ${activeTab === 'fileinfo' ? 'active' : ''}`}
onClick={() => onTabChange('fileinfo')} onClick={() => onTabChange('fileinfo')}
+12 -5
View File
@@ -80,6 +80,7 @@ interface FileInfo {
uploadTime: string; uploadTime: string;
uploadUser: string; uploadUser: string;
auditStatus: number; auditStatus: number;
fileType: string; // 文件类型(1:合同,2:卷宗等)
} }
// 定义合同信息类型 // 定义合同信息类型
@@ -193,6 +194,7 @@ export async function loader({ request }: LoaderFunctionArgs) {
// 确保reviewData有效且具有预期的属性 // 确保reviewData有效且具有预期的属性
if ('document' in reviewData && 'data' in reviewData && 'reviewInfo' in reviewData && 'stats' in reviewData) { if ('document' in reviewData && 'data' in reviewData && 'reviewInfo' in reviewData && 'stats' in reviewData) {
console.log("reviewData-------",JSON.stringify(reviewData.document?.type,null,2));
return Response.json({ return Response.json({
previousRoute: previousRoute, previousRoute: previousRoute,
document: reviewData.document, document: reviewData.document,
@@ -248,12 +250,15 @@ export default function ReviewDetails() {
path: document.path || "未知路径", path: document.path || "未知路径",
contractNumber: document.documentNumber || "未知编号", contractNumber: document.documentNumber || "未知编号",
fileSize: document.size ? formatFileSize(document.size) : "未知大小", fileSize: document.size ? formatFileSize(document.size) : "未知大小",
// 文件格式类型
fileFormat: document.fileType ? document.fileType.toUpperCase() : "未知格式", fileFormat: document.fileType ? document.fileType.toUpperCase() : "未知格式",
pageCount: document.pageCount || 0, pageCount: document.pageCount || 0,
uploadTime: document.uploadTime || "未知时间", uploadTime: document.uploadTime || "未知时间",
uploadUser: document.uploadUser || "未知用户", uploadUser: document.uploadUser || "未知用户",
auditStatus: document.auditStatus || 0, auditStatus: document.auditStatus || 0,
legalBasis: document.legalBasis || {} legalBasis: document.legalBasis || {},
// 文件类型(1:合同,2:卷宗。。。)
fileType: document.type || ""
}; };
// 创建包含真实文档数据的评查数据对象 // 创建包含真实文档数据的评查数据对象
@@ -529,12 +534,13 @@ export default function ReviewDetails() {
{/* 在面包屑右侧显示精简版的FileInfo */} {/* 在面包屑右侧显示精简版的FileInfo */}
<div className=" ml-10 text-left flex-1 flex flex-row flex-wrap"> <div className=" ml-10 text-left flex-1 flex flex-row flex-wrap">
<span className="text-xl font-medium"> <span className="mr-2 text-xl font-medium">
{reviewData.fileInfo.fileName} {reviewData.fileInfo.fileName}
</span> </span>
<div className="ml-2 text-xs text-gray-500 flex items-center"> <div className="text-xs text-gray-500 flex items-center">
{/* 合同编号:{reviewData.fileInfo.contractNumber} */} {/* 合同编号:{reviewData.fileInfo.contractNumber} */}
{reviewData.fileInfo.contractNumber} { reviewData.fileInfo.fileType != "1" ? "卷宗" : "合同" }
{reviewData.fileInfo.contractNumber}
{reviewData.fileInfo.fileSize && ( {reviewData.fileInfo.fileSize && (
<span className="text-xs text-gray-500 ml-2"> <span className="text-xs text-gray-500 ml-2">
| {reviewData.fileInfo.fileSize} | {reviewData.fileInfo.fileFormat} | {reviewData.fileInfo.pageCount}&nbsp; | {reviewData.fileInfo.fileSize} | {reviewData.fileInfo.fileFormat} | {reviewData.fileInfo.pageCount}&nbsp;
@@ -643,7 +649,8 @@ function getMockReviewData(): ReviewData {
pageCount: 5, pageCount: 5,
uploadTime: "2023-10-25 14:30:45", uploadTime: "2023-10-25 14:30:45",
uploadUser: "张三", uploadUser: "张三",
auditStatus: 0 auditStatus: 0,
fileType: "1"
}, },
contractInfo: { contractInfo: {
contractType: "销售合同", contractType: "销售合同",