103 lines
3.1 KiB
TypeScript
103 lines
3.1 KiB
TypeScript
import { type MetaFunction, LinksFunction } from "@remix-run/node";
|
|
import { useState } from "react";
|
|
import { BasicInfo } from "~/components/rules/new/BasicInfo";
|
|
import { ExtractionSettings } from "~/components/rules/new/ExtractionSettings";
|
|
import { ReviewSettings, RuleContext } from "~/components/rules/new/ReviewSettings";
|
|
import { ActionButtons } from "~/components/rules/new/ActionButtons";
|
|
import { PageHeader } from "~/components/rules/new/PageHeader";
|
|
import rulesStyles from "~/styles/rules.css";
|
|
|
|
export const meta: MetaFunction = () => {
|
|
return [
|
|
{ title: "新增评查点 - 中国烟草AI合同及卷宗审核系统" },
|
|
{
|
|
name: "description",
|
|
content: "创建新的评查点,设置规则参数"
|
|
}
|
|
];
|
|
};
|
|
|
|
export const links: LinksFunction = () => [
|
|
{ rel: "stylesheet", href: rulesStyles }
|
|
];
|
|
|
|
export const handle = {
|
|
breadcrumb: "新增评查点"
|
|
};
|
|
|
|
export default function RuleNew() {
|
|
// 用于保存抽取字段的状态,在抽取设置和评查设置组件之间共享
|
|
const [extractionFields, setExtractionFields] = useState<string[]>([]);
|
|
|
|
const updateExtractionFields = (fields: string[]) => {
|
|
setExtractionFields(fields);
|
|
};
|
|
|
|
const handleSave = () => {
|
|
// 实现保存逻辑
|
|
console.log('保存评查点');
|
|
};
|
|
|
|
const handleSaveDraft = () => {
|
|
// 实现保存草稿逻辑
|
|
console.log('保存为草稿');
|
|
};
|
|
|
|
const handleExtractionChange = (data: Record<string, unknown>) => {
|
|
// 使用合并后的所有字段列表
|
|
if (data.allFields && Array.isArray(data.allFields)) {
|
|
updateExtractionFields(data.allFields);
|
|
return;
|
|
}
|
|
|
|
// 旧版本兼容逻辑
|
|
if (data.fields) {
|
|
// 尝试获取合并的字段列表
|
|
if (Array.isArray(data.fields)) {
|
|
updateExtractionFields(data.fields);
|
|
} else {
|
|
const fieldData = data.fields as Record<string, string[]>;
|
|
const currentMethod = data.extractionMethod as string;
|
|
|
|
// 提取当前抽取方法的字段
|
|
if (fieldData[currentMethod]) {
|
|
updateExtractionFields(fieldData[currentMethod]);
|
|
}
|
|
}
|
|
} else if (data.regexFields) {
|
|
// 处理正则字段情况
|
|
const regexFields = data.regexFields as { id: string; fieldName: string; regex: string }[];
|
|
const fieldNames = regexFields
|
|
.map(field => field.fieldName)
|
|
.filter(name => name.trim() !== '');
|
|
|
|
updateExtractionFields(fieldNames);
|
|
}
|
|
};
|
|
|
|
return (
|
|
<RuleContext.Provider value={{ extractionFields, updateExtractionFields }}>
|
|
<div className="px-4 py-6 bg-white border-b border-gray-200 shadow-sm">
|
|
<PageHeader
|
|
title="新增评查点"
|
|
onSave={handleSave}
|
|
/>
|
|
</div>
|
|
|
|
<div className="container py-6">
|
|
<div className="px-4">
|
|
<BasicInfo />
|
|
|
|
<ExtractionSettings onChange={handleExtractionChange} />
|
|
|
|
<ReviewSettings />
|
|
|
|
<ActionButtons
|
|
onSave={handleSave}
|
|
onSaveDraft={handleSaveDraft}
|
|
/>
|
|
</div>
|
|
</div>
|
|
</RuleContext.Provider>
|
|
);
|
|
}
|