新增提示Toast组件

This commit is contained in:
2025-04-21 09:22:13 +08:00
parent 01d93522b8
commit 5c2c367856
36 changed files with 2609 additions and 478 deletions
+81 -7
View File
@@ -29,7 +29,7 @@ import { type MetaFunction, type LoaderFunctionArgs } from "@remix-run/node";
import { useState, useEffect } from "react";
import { useNavigate, useLoaderData } from "@remix-run/react";
import reviewsStyles from "~/styles/reviews.css?url";
import { getReviewPoints, updateReviewResult } from "~/api/evaluation_points/reviews";
import { getReviewPoints, updateReviewResult, confirmReviewResults } from "~/api/evaluation_points/reviews";
// 导入评查详情页面组件
import {
@@ -44,6 +44,7 @@ import {
// 从ReviewPointsList组件中导入ReviewPoint类型
import { type ReviewPoint } from '~/components/reviews';
/**
* 文件信息组件
* 显示文件名称、状态信息以及操作按钮(下载原文件、导出评查报告、确认评查结果)
@@ -148,6 +149,9 @@ interface ReviewData {
aiAnalysis: AnalysisData;
}
interface LoaderData {
previousRoute: string;
}
export const meta: MetaFunction = () => {
return [
{ title: "评查详情 - 中国烟草AI合同及卷宗审核系统" },
@@ -163,13 +167,38 @@ export function links() {
}
export const handle = {
breadcrumb: "评查详情"
breadcrumb: "评查详情",
// 添加一个previousRoute属性用于支持自定义的面包屑导航
previousRoute: (data:LoaderData)=>{
if(data.previousRoute){
if(data.previousRoute === 'filesUpload'){
return {
title: "文件上传",
to: "/files/upload"
}
}
if(data.previousRoute === 'documents'){
return {
title: "文档列表",
to: "/documents"
}
}
if(data.previousRoute === 'rulesFiles'){
return {
title: "评查文件列表",
to: "/rules-files"
}
}
}
}
};
export async function loader({ request }: LoaderFunctionArgs) {
try {
const url = new URL(request.url);
const id = url.searchParams.get('id') || undefined;
const previousRoute = url.searchParams.get('previousRoute') || '';
// console.log("id-------",id);
if (!id) {
return Response.json({ error: '评查ID不能为空' }, { status: 400 });
@@ -188,6 +217,7 @@ export async function loader({ request }: LoaderFunctionArgs) {
// 确保reviewData有效且具有预期的属性
if ('document' in reviewData && 'data' in reviewData && 'reviewInfo' in reviewData && 'stats' in reviewData) {
return Response.json({
previousRoute: previousRoute,
document: reviewData.document,
reviewPoints: reviewData.data,
reviewInfo: reviewData.reviewInfo,
@@ -219,6 +249,7 @@ export default function ReviewDetails() {
// 构建文件信息对象
const fileInfo = {
fileName: document.name || "未知文件名",
path: document.path || "未知路径",
contractNumber: document.documentNumber || "未知编号",
fileSize: document.size ? formatFileSize(document.size) : "未知大小",
fileFormat: document.fileType ? document.fileType.toUpperCase() : "未知格式",
@@ -252,8 +283,19 @@ export default function ReviewDetails() {
};
const handleReviewPointSelect = (reviewPointId: string, page?: number) => {
setActiveReviewPointId(reviewPointId);
setTargetPage(page);
// 如果点击的是相同的评查点,但有page参数,先重置targetPage以确保useEffect能够触发
if (reviewPointId === activeReviewPointId && page) {
setTargetPage(undefined);
// 使用setTimeout确保状态更新后再设置新的targetPage
setTimeout(() => {
setActiveReviewPointId(reviewPointId);
setTargetPage(page);
}, 0);
} else {
// 正常设置activeReviewPointId和targetPage
setActiveReviewPointId(reviewPointId);
setTargetPage(page);
}
};
// 刷新评审数据
@@ -378,9 +420,36 @@ export default function ReviewDetails() {
}
};
const handleConfirmResults = () => {
alert('评查结果已确认');
navigate('/reviews'); // 假设评查列表页面路径为 /reviews
const handleConfirmResults = async () => {
if (!document || !document.id) {
alert('文档数据不完整,无法确认评查结果');
return;
}
try {
// 显示加载状态
setIsLoading(true);
// 调用API确认评查结果
const response = await confirmReviewResults(document.id.toString());
if (response.error) {
console.error('确认评查结果失败:', response.error);
alert(`确认评查结果失败: ${response.error}`);
return;
}
// 显示成功消息
alert('评查结果已确认,文档审核状态已更新');
// 导航到文档列表页
navigate('/documents');
} catch (error) {
console.error('确认评查结果出错:', error);
alert(`确认评查结果失败: ${error instanceof Error ? error.message : '未知错误'}`);
} finally {
setIsLoading(false);
}
};
return (
@@ -529,6 +598,7 @@ function getMockReviewData(): ReviewData {
reviewPoints: [
{
id: "1",
pointName: "付款条款",
title: "付款条件描述不明确",
groupName: "付款条款清晰性",
// location: "交货与付款条款",
@@ -540,6 +610,7 @@ function getMockReviewData(): ReviewData {
},
{
id: "2",
pointName: "违约责任",
title: "违约责任条款缺失",
groupName: "合同权利义务对等性",
status: "warning",
@@ -550,6 +621,7 @@ function getMockReviewData(): ReviewData {
},
{
id: "3",
pointName: "签章审核",
title: "签章不完整",
groupName: "合同签署规范性",
status: "warning",
@@ -562,6 +634,7 @@ function getMockReviewData(): ReviewData {
},
{
id: "9",
pointName: "交货方式",
title: "交货方式描述模糊",
groupName: "履行条款明确性",
status: "success",
@@ -576,6 +649,7 @@ function getMockReviewData(): ReviewData {
},
{
id: "10",
pointName: "法律适用",
title: "法律适用条款缺失",
groupName: "争议解决条款完整性",
status: "error",