添加jwt验证,添加交叉评查首页加载对接接口,评查任务文档列表对接接口,意见列表对接接口
This commit is contained in:
@@ -26,13 +26,11 @@ import { Pagination } from '../ui/Pagination';
|
||||
import { Button } from '../ui/Button';
|
||||
import { LoadingIndicator } from '../ui/SkeletonScreen';
|
||||
import {
|
||||
submitCrossCheckingOpinion,
|
||||
getCrossCheckingOpinions,
|
||||
performOpinionAction,
|
||||
type SubmitOpinionRequest,
|
||||
type CrossCheckingOpinion,
|
||||
type OpinionActionType
|
||||
} from '../../api/cross-checking/cross-file-result';
|
||||
import { useFetcher } from '@remix-run/react';
|
||||
// import '../../styles/components/TooltipStyles.css';
|
||||
|
||||
/**
|
||||
@@ -168,6 +166,7 @@ interface ReviewPointsListProps {
|
||||
onReviewPointSelect: (id: string, page?: number) => void;
|
||||
onStatusChange?: (id: string, editAuditStatusId: string | number, status: string, message: string) => void;
|
||||
scoringProposals?: ScoringProposal[];
|
||||
jwtToken?: string; // 添加JWT token参数
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -424,12 +423,14 @@ export function ReviewPointsList({
|
||||
statistics,
|
||||
activeReviewPointResultId,
|
||||
onReviewPointSelect,
|
||||
scoringProposals = []
|
||||
scoringProposals = [],
|
||||
jwtToken
|
||||
}: ReviewPointsListProps) {
|
||||
// 状态管理
|
||||
const [searchText, setSearchText] = useState(''); // 搜索文本
|
||||
const [statusFilter, setStatusFilter] = useState<string | null>(null); // 状态过滤
|
||||
const [evaluationResultIds, setEvaluationResultIds] = useState<number[]>([]); // 评分提案的evaluation_result_id
|
||||
const fetcher = useFetcher();
|
||||
|
||||
// 在组件中使用scoringProposals(这里只是简单使用以避免linter警告)
|
||||
// 将来可以用于显示相关的评分提案信息
|
||||
@@ -467,6 +468,54 @@ export function ReviewPointsList({
|
||||
const [opinionListPageSize, setOpinionListPageSize] = useState(10);
|
||||
const [performingAction, setPerformingAction] = useState<string | null>(null);
|
||||
|
||||
// 监听fetcher状态变化 - 获取意见列表数据
|
||||
useEffect(() => {
|
||||
if (fetcher.data && fetcher.state === 'idle' && opinionListLoading) {
|
||||
const data = fetcher.data as {
|
||||
success?: boolean;
|
||||
data?: {
|
||||
opinions: CrossCheckingOpinion[];
|
||||
total: number;
|
||||
};
|
||||
error?: string;
|
||||
};
|
||||
|
||||
if (data.success && data.data) {
|
||||
console.log('意见列表数据', data.data);
|
||||
setOpinionListData(data.data.opinions || []);
|
||||
setOpinionListTotal(data.data.total || 0);
|
||||
// 使用当前状态值而不是依赖项中的值
|
||||
setOpinionListCurrentPage(prev => prev);
|
||||
setOpinionListPageSize(prev => prev);
|
||||
} else {
|
||||
console.error('加载意见列表失败:', data.error);
|
||||
toastService.error(data.error || '加载意见列表失败');
|
||||
}
|
||||
|
||||
setOpinionListLoading(false);
|
||||
}
|
||||
}, [fetcher.data, fetcher.state, opinionListLoading]);
|
||||
|
||||
// 监听fetcher状态变化 - 提交意见
|
||||
useEffect(() => {
|
||||
if (fetcher.data && fetcher.state === 'idle' && isSubmittingOpinion) {
|
||||
const data = fetcher.data as {
|
||||
success?: boolean;
|
||||
error?: string;
|
||||
};
|
||||
|
||||
if (data.success) {
|
||||
toastService.success('意见提交成功');
|
||||
handleCloseOpinionModal();
|
||||
} else {
|
||||
console.error('提交意见失败:', data.error);
|
||||
toastService.error(data.error || '提交意见失败');
|
||||
}
|
||||
|
||||
setIsSubmittingOpinion(false);
|
||||
}
|
||||
}, [fetcher.data, fetcher.state, isSubmittingOpinion]);
|
||||
|
||||
// 存放评查点ID与有效页码的映射
|
||||
const [effectivePages, setEffectivePages] = useState<Record<string, number>>({});
|
||||
|
||||
@@ -525,22 +574,19 @@ export function ReviewPointsList({
|
||||
setOpinionListLoading(true);
|
||||
try {
|
||||
console.log('加载意见列表数据', targetDocumentId, page, pageSize);
|
||||
const response = await getCrossCheckingOpinions(targetDocumentId, page, pageSize);
|
||||
|
||||
console.log('意见列表数据', response);
|
||||
if (response.error) {
|
||||
toastService.error(response.error);
|
||||
return;
|
||||
}
|
||||
// 使用 fetcher 调用路由的 action
|
||||
const formData = new FormData();
|
||||
formData.append("intent", "getCrossCheckingOpinions");
|
||||
formData.append("documentId", targetDocumentId.toString());
|
||||
formData.append("page", page.toString());
|
||||
formData.append("pageSize", pageSize.toString());
|
||||
|
||||
fetcher.submit(formData, { method: "POST" });
|
||||
|
||||
setOpinionListData(response.data?.opinions || []);
|
||||
setOpinionListTotal(response.data?.total || 0);
|
||||
setOpinionListCurrentPage(page);
|
||||
setOpinionListPageSize(pageSize);
|
||||
} catch (error) {
|
||||
console.error('加载意见列表失败:', error);
|
||||
toastService.error('加载意见列表失败');
|
||||
} finally {
|
||||
setOpinionListLoading(false);
|
||||
}
|
||||
};
|
||||
@@ -580,7 +626,7 @@ export function ReviewPointsList({
|
||||
setPerformingAction(actionKey);
|
||||
|
||||
try {
|
||||
const response = await performOpinionAction({ opinionId, action });
|
||||
const response = await performOpinionAction({ opinionId, action }, jwtToken);
|
||||
|
||||
if (response.error) {
|
||||
toastService.error(response.error);
|
||||
@@ -648,28 +694,21 @@ export function ReviewPointsList({
|
||||
setIsSubmittingOpinion(true);
|
||||
|
||||
try {
|
||||
const opinionData: SubmitOpinionRequest = {
|
||||
reviewPointResultId: selectedReviewPoint.id,
|
||||
documentId: selectedReviewPoint.documentId || '',
|
||||
auditPoint: opinionForm.auditPoint,
|
||||
foundIssue: opinionForm.foundIssue,
|
||||
auditOpinion: opinionForm.auditOpinion,
|
||||
deductionScore: opinionForm.deductionScore
|
||||
};
|
||||
// 使用 fetcher 调用路由的 action
|
||||
const formData = new FormData();
|
||||
formData.append("intent", "submitCrossCheckingOpinion");
|
||||
formData.append("reviewPointResultId", selectedReviewPoint.id);
|
||||
formData.append("documentId", selectedReviewPoint.documentId || '');
|
||||
formData.append("auditPoint", opinionForm.auditPoint);
|
||||
formData.append("foundIssue", opinionForm.foundIssue);
|
||||
formData.append("auditOpinion", opinionForm.auditOpinion);
|
||||
formData.append("deductionScore", opinionForm.deductionScore.toString());
|
||||
|
||||
const response = await submitCrossCheckingOpinion(opinionData);
|
||||
|
||||
if (response.error) {
|
||||
toastService.error(response.error);
|
||||
return;
|
||||
}
|
||||
|
||||
toastService.success('意见提交成功');
|
||||
handleCloseOpinionModal();
|
||||
fetcher.submit(formData, { method: "POST" });
|
||||
|
||||
} catch (error) {
|
||||
console.error('提交意见失败:', error);
|
||||
toastService.error('提交意见失败,请稍后重试');
|
||||
} finally {
|
||||
setIsSubmittingOpinion(false);
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user