feat: sync rule management and review ui fixes

This commit is contained in:
wren
2026-05-07 17:27:42 +08:00
parent 87e82d1caa
commit c00e5feff0
13 changed files with 565 additions and 161 deletions
+33 -8
View File
@@ -25,7 +25,7 @@
* @author 中国烟草AI合同及卷宗审核系统开发团队
*/
import { type MetaFunction, type LoaderFunctionArgs, type ActionFunctionArgs } from "@remix-run/node";
import { type MetaFunction, type LoaderFunctionArgs, type ActionFunctionArgs, redirect } from "@remix-run/node";
import { useState, useEffect, useRef } from "react";
import { useNavigate, useLoaderData, useFetcher } from "@remix-run/react";
import reviewsStyles from "~/styles/reviews.css?url";
@@ -345,17 +345,24 @@ export const handle = {
};
export async function loader({ request }: LoaderFunctionArgs): Promise<Response> {
try {
const url = new URL(request.url);
const id = url.searchParams.get('id') || '';
const previousRoute = url.searchParams.get('previousRoute') || '';
const url = new URL(request.url);
const id = url.searchParams.get('id') || '';
const previousRoute = url.searchParams.get('previousRoute') || '';
try {
if (!id) {
return Response.json({ result: false, message: '文件ID不能为空', previousRoute });
}
const { getUserSession } = await import("~/api/login/auth.server");
const { userInfo, frontendJWT } = await getUserSession(request);
if (!frontendJWT || !userInfo?.role) {
throw redirect('/login');
}
const { requireRoutePermission } = await import("~/api/auth/check-route-permission.server");
await requireRoutePermission('/reviewsTest', userInfo.role, frontendJWT);
const reviewData = await getReviewPoints_fromApi(id, request);
if ('error' in reviewData && reviewData.error) {
@@ -382,11 +389,25 @@ export async function loader({ request }: LoaderFunctionArgs): Promise<Response>
detailMode: 'leaudit',
});
} catch (error) {
if (error instanceof Response) {
if (error.status === 401) {
throw redirect('/login');
}
if (error.status === 403) {
return Response.json({
result: false,
message: '当前账号没有评查详情访问权限,请联系管理员开通文档查看权限。',
previousRoute,
}, { status: 403 });
}
}
console.error('[reviewsTest loader] Failed to load review data:', error);
return Response.json({
result: false,
message: `获取评查数据失败: ${error instanceof Error ? error.message : '未知错误'}`,
previousRoute: '',
previousRoute,
});
}
}
@@ -621,6 +642,11 @@ export default function ReviewDetails() {
};
const handleDownloadFile = async () => {
if (!previewPath) {
toastService.warning('当前文档暂无可下载原文件');
return;
}
try {
const downloadUrl = `/api/pdf-proxy?path=${encodeURIComponent(previewPath)}`;
const response = await axios.get(downloadUrl, { responseType: 'blob' });
@@ -828,8 +854,7 @@ export default function ReviewDetails() {
if (result.success) {
toastService.success('评查结果已确认,文档审核状态已更新');
// 导航到文档列表页
navigate('/documents/list');
navigate(getReturnUrl());
} else {
console.error('确认评查结果失败:', result.error);
toastService.error(`确认评查结果失败: ${result.error || '未知错误'}`);