删除所有console.log输出,优化评查结果的表格的显示,添加新的页码获取逻辑

This commit is contained in:
2025-06-02 18:55:00 +08:00
parent 820baa5b22
commit b02978508d
71 changed files with 862 additions and 572 deletions
+119 -39
View File
@@ -131,13 +131,6 @@ interface Statistics {
score: number;
}
// 统一规则的类型
// interface pointRule {
// id: string;
// type: string;
// config: Record<string, unknown>;
// }
interface ReviewPointsListProps {
reviewPoints: ReviewPoint[];
statistics: Statistics;
@@ -240,11 +233,14 @@ const ReactTableTooltip = ({ content }: { content: string }) => {
const [showTooltip, setShowTooltip] = useState(false);
const textRef = useRef<HTMLDivElement>(null);
const isTableLike = content.includes('\t') && content.includes('\n');
useEffect(() => {
const checkTextOverflow = () => {
const element = textRef.current;
if (element) {
setShowTooltip(element.scrollHeight > element.clientHeight);
// 如果是表格格式,总是显示tooltip;否则只在文本溢出时显示
setShowTooltip(isTableLike || element.scrollHeight > element.clientHeight);
}
};
@@ -253,7 +249,7 @@ const ReactTableTooltip = ({ content }: { content: string }) => {
return () => {
window.removeEventListener('resize', checkTextOverflow);
};
}, [content]);
}, [content, isTableLike]);
// 解析表格数据
const parseTableData = (text: string) => {
@@ -268,7 +264,7 @@ const ReactTableTooltip = ({ content }: { content: string }) => {
const hasHeader = tableData.length > 0;
return (
<div className="overflow-auto max-h-[400px]">
<div>
<table className="min-w-full border-collapse border border-gray-300">
{hasHeader && (
<thead>
@@ -307,8 +303,7 @@ const ReactTableTooltip = ({ content }: { content: string }) => {
}
};
// 检测内容是否像表格
const isTableLike = content.includes('\t') && content.includes('\n');
return (
<div className="text-xs p-1 rounded cursor-text w-full text-left">
@@ -321,6 +316,8 @@ const ReactTableTooltip = ({ content }: { content: string }) => {
showArrow={true}
className="tooltip-custom-offset"
// fixedPlacement={true}
// scrollable={true}
maxHeight={400}
>
<div className="text-gray-800 break-all overflow-hidden line-clamp-2" ref={textRef}>
{content}
@@ -352,8 +349,8 @@ export function ReviewPointsList({
// 添加重新审核意见的状态/ 用户输入的修改内容 / 用户提前写好的修改内容
const [manualReviewNotes, setManualReviewNotes] = useState<Record<string, string>>({});
// 存放属于有无判断,格式判断,逻辑判断,正则表达式这一类的评查点规则设置
// const [otherRule, setOtherRule] = useState<Record<string, unknown>[]>([]);
// 存放评查点ID与有效页码的映射
const [effectivePages, setEffectivePages] = useState<Record<string, number>>({});
// 初始化建议文本
useEffect(() => {
@@ -874,6 +871,35 @@ export function ReviewPointsList({
// 处理配对数据
const pairs = config.pairs;
// 获取第一个有效页码
if (reviewPoint.id && !effectivePages[reviewPoint.id]) {
for (const pair of pairs) {
// 检查sourceField中是否有有效页码
const sourceFieldKey = Object.keys(pair.sourceField)[0];
if (sourceFieldKey && pair.sourceField[sourceFieldKey].page &&
Number(pair.sourceField[sourceFieldKey].page) > 0) {
// 保存页码
setEffectivePages(prev => ({
...prev,
[reviewPoint.id || '']: Number(pair.sourceField[sourceFieldKey].page)
}));
break;
}
// 如果sourceField没有有效页码,检查targetField
const targetFieldKey = Object.keys(pair.targetField)[0];
if (targetFieldKey && pair.targetField[targetFieldKey].page &&
Number(pair.targetField[targetFieldKey].page) > 0) {
// 保存页码
setEffectivePages(prev => ({
...prev,
[reviewPoint.id || '']: Number(pair.targetField[targetFieldKey].page)
}));
break;
}
}
}
// 查找链条关系
const findChains = () => {
type ChainItem = {
@@ -1169,7 +1195,11 @@ export function ReviewPointsList({
if (reviewPointId && typeof onReviewPointSelect === 'function') {
onReviewPointSelect(reviewPointId, Number(item.data.page));
}
}else{
}
else if(reviewPoint.contentPage && reviewPoint.contentPage[item.field]){
onReviewPointSelect(reviewPoint.id, Number(reviewPoint.contentPage[item.field]));
}
else{
toastService.error(`没有找到${item.field}对应的索引内容`);
}
}}
@@ -1177,7 +1207,7 @@ export function ReviewPointsList({
>
<div className="flex justify-between w-full">
<ReactTableTooltip content={item.data.value?.toString() || ''} />
{!item.data.page && !item.data.value && (
{!item.data.page && (reviewPoint.contentPage && !reviewPoint.contentPage[item.field]) && (
<i className="ri-information-line text-red-500 text-xs" title="没有找到对应的文书内容"></i>
)}
</div>
@@ -1248,14 +1278,18 @@ export function ReviewPointsList({
if (reviewPointId && typeof onReviewPointSelect === 'function') {
onReviewPointSelect(reviewPointId, chain[0].data.page);
}
}else{
}
else if(reviewPoint.contentPage && reviewPoint.contentPage[chain[0].field]){
onReviewPointSelect(reviewPoint.id, Number(reviewPoint.contentPage[chain[0].field]));
}
else{
toastService.error(`没有找到${chain[0].field}对应的索引内容`);
}
}}
aria-label={`查看${chain[0].field}内容详情`}
>
<div className="value-source text-xs text-gray-500 mb-1">{chain[0].field}
{!chain[0].data.page && !chain[0].data.value && (
{!chain[0].data.page && (reviewPoint.contentPage && !reviewPoint.contentPage[chain[0].field]) && (
<i className="ri-information-line text-red-500 text-xs ml-1" title="没有找到对应的文书内容"></i>
)}
</div>
@@ -1270,14 +1304,18 @@ export function ReviewPointsList({
if (reviewPointId && typeof onReviewPointSelect === 'function') {
onReviewPointSelect(reviewPointId, chain[1].data.page);
}
}else{
}
else if(reviewPoint.contentPage && reviewPoint.contentPage[chain[1].field]){
onReviewPointSelect(reviewPoint.id, Number(reviewPoint.contentPage[chain[1].field]));
}
else{
toastService.error(`没有找到${chain[1].field}对应的索引内容`);
}
}}
aria-label={`查看${chain[1].field}内容详情`}
>
<div className="value-source text-xs text-gray-500 mb-1">{chain[1].field}
{!chain[1].data.page && !chain[1].data.value && (
{!chain[1].data.page && (reviewPoint.contentPage && !reviewPoint.contentPage[chain[1].field]) && (
<i className="ri-information-line text-red-500 text-xs ml-1" title="没有找到对应的文书内容"></i>
)}
</div>
@@ -1404,6 +1442,8 @@ export function ReviewPointsList({
e.stopPropagation();
if (mainTypeValue.page && typeof onReviewPointSelect === 'function') {
onReviewPointSelect(reviewPoint.id, Number(mainTypeValue.page));
}else if(reviewPoint.contentPage && reviewPoint.contentPage[fieldKey]){
onReviewPointSelect(reviewPoint.id, Number(reviewPoint.contentPage[fieldKey]));
}else{
toastService.error(`没有找到${fieldKey}对应的索引内容`);
}
@@ -1425,7 +1465,7 @@ export function ReviewPointsList({
{/* 字段名称 */}
<div className="text-xs text-gray-500 mb-1">
{fieldKey}
{!mainTypeValue.page && !mainTypeValue.value && (
{!mainTypeValue.page && (reviewPoint.contentPage && !reviewPoint.contentPage[fieldKey]) && (
<i className="ri-information-line text-red-500 text-xs ml-1" title="没有找到对应的文书内容"></i>
)}
{/* 缺失显示 */}
@@ -1492,6 +1532,19 @@ export function ReviewPointsList({
// 如果配置不存在,不渲染任何内容
if (!config) return null;
// 获取第一个有效页码
if (reviewPoint.id && !effectivePages[reviewPoint.id] && config.fields) {
for (const field of Object.values(config.fields || {})) {
if (field.page && Number(field.page) > 0) {
setEffectivePages(prev => ({
...prev,
[reviewPoint.id || '']: Number(field.page)
}));
break;
}
}
}
// 创建一个数组来存储需要渲染的JSX元素
const fieldElements: JSX.Element[] = [];
@@ -1510,6 +1563,8 @@ export function ReviewPointsList({
e.stopPropagation();
if (value.page && typeof onReviewPointSelect === 'function') {
onReviewPointSelect(reviewPoint.id, Number(value.page));
}else if(reviewPoint.contentPage && reviewPoint.contentPage[key]){
onReviewPointSelect(reviewPoint.id, Number(reviewPoint.contentPage[key]));
}else{
toastService.error(`没有找到${key}对应的索引内容`);
}
@@ -1520,6 +1575,8 @@ export function ReviewPointsList({
e.preventDefault();
if (value.page && typeof onReviewPointSelect === 'function') {
onReviewPointSelect(reviewPoint.id, Number(value.page));
}else if(reviewPoint.contentPage && reviewPoint.contentPage[key]){
onReviewPointSelect(reviewPoint.id, Number(reviewPoint.contentPage[key]));
}else{
toastService.error(`没有找到${key}对应的索引内容`);
}
@@ -1533,7 +1590,7 @@ export function ReviewPointsList({
<div className="text-xs text-left text-gray-500 mb-1">
{key}
{/* 没有抽取到目录内容,page和value都为空 */}
{!value.page && !value.value && (
{!value.page && (reviewPoint.contentPage && !reviewPoint.contentPage[key]) && (
<i className="ri-information-line text-red-500 text-xs ml-1" title="没有找到对应的文书内容"></i>
)}
{/* 缺失显示 */}
@@ -1851,6 +1908,34 @@ export function ReviewPointsList({
for (const key in fieldKeyMap) {
mergedRules.push(fieldKeyMap[key]);
}
// 获取第一个有效页码
if (reviewPoint.id && !effectivePages[reviewPoint.id]) {
// 遍历合并后的规则数组,查找第一个有效页码
for (const rule of mergedRules) {
// 遍历字段类型对象
const typeEntries = Object.entries(rule.fieldValue.type);
// 遍历每种类型规则
for (const [, typeValue] of typeEntries) {
// 检查是否有有效页码
if (typeValue.page && Number(typeValue.page) > 0) {
// 找到有效页码,设置状态并跳出循环
setEffectivePages(prev => ({
...prev,
[reviewPoint.id || '']: Number(typeValue.page)
}));
// 使用break跳出当前循环
break;
}
}
// 如果已经找到有效页码,跳出外层循环
if (reviewPoint.id && effectivePages[reviewPoint.id]) {
break;
}
}
}
// 返回合并后的规则数组
return mergedRules;
@@ -2148,24 +2233,19 @@ export function ReviewPointsList({
const reviewPoint = reviewPoints.find(result => result.id === id);
// 如果评查点存在
if (reviewPoint) {
// // 使用checkContentPage方法获取页码和key
// const { pageIndex, key } = checkContentPage(reviewPoint);
// // 如果有有效页码,传递ID和页码
// if (pageIndex > 0) {
// console.log(`跳转到页面 ${pageIndex},对应内容 ${key || '未知'}`);
// onReviewPointSelect(id, pageIndex);
// return;
// }
// // 没有有效页码,只传递ID
onReviewPointSelect(id);
// console.log(`没有有效页码---评查点ID${reviewPoint.pointId},评查点结果ID${id}`);
if (reviewPoint) {
// 如果effectivePages有值,使用它
if (reviewPoint.id && effectivePages[reviewPoint.id]) {
// console.log('effectivePages', effectivePages[reviewPoint.id]);
onReviewPointSelect(id, effectivePages[reviewPoint.id]);
// return;
} else {
// 没有有效页码,只传递ID
onReviewPointSelect(id);
}
} else {
// // 没有找到评查点,只传递ID
// 没有找到评查点,只传递ID
onReviewPointSelect(id);
// console.log(`没有找到评查点---评查点结果ID${id}`);
}
};
@@ -2225,7 +2305,7 @@ export function ReviewPointsList({
tabIndex={0}
style={{ userSelect: 'text' }}
onClick={() => {
console.log('reviewPoint', reviewPoint);
// console.log('reviewPoint', reviewPoint);
handleReviewPointClick(reviewPoint.id);
}}
onKeyDown={(e) => {