接近完美版本

This commit is contained in:
2025-04-10 10:16:15 +08:00
parent 80a6764ba0
commit 8be2fd5d67
2 changed files with 279 additions and 240 deletions
+131 -61
View File
@@ -135,6 +135,7 @@ export default function RuleNew() {
const location = useLocation();
const [isEditMode, setIsEditMode] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const [instanceKey, setInstanceKey] = useState<string>('new');
const [formData, setFormData] = useState<EvaluationPoint>({});
const [evaluationPointGroups, setEvaluationPointGroups] = useState<EvaluationPointGroup[]>([]);
@@ -174,6 +175,57 @@ export default function RuleNew() {
return fields;
}, []);
/**
* 重置表单数据到默认状态
*/
const resetFormData = useCallback(() => {
console.log("重置表单数据到默认状态");
setFormData({
name: '',
code: '',
risk: 'low',
is_enabled: true,
description: '',
references_laws: { name: '', articles: [], content: '' },
evaluation_point_groups_pid: null,
evaluation_point_groups_id: null,
extraction_config: {
llm: {
fields: [],
prompt_setting: {
type: 'system',
template: ''
}
},
vlm: {
fields: [],
prompt_setting: {
type: 'system',
template: ''
}
},
regex: {
fields: []
}
},
evaluation_config: {
logicType: 'and',
customLogic: '',
rules: []
},
pass_message: '文档检查通过,符合规范要求。',
fail_message: '文档存在以下问题,请修改后重新提交。',
suggestion_message: '',
suggestion_message_type: 'warning',
post_action: 'none',
action_config: '',
score: 0
});
setExtractionFields([]);
// 生成新的实例键,强制所有子组件重新渲染
setInstanceKey(`new_${Date.now()}`);
}, []);
/**
* 获取评查点数据
* 编辑模式下从API获取指定ID的评查点数据
@@ -193,23 +245,34 @@ export default function RuleNew() {
console.log(response);
if (response.ok) {
const data = await response.json();
setFormData(data.data[0]);
// 初始化extractionFields
if (data.data[0]) {
if (data.data && data.data[0]) {
setFormData(data.data[0]);
// 初始化extractionFields
const extractedFields = extractFieldsFromFormData(data.data[0]);
setExtractionFields(extractedFields);
// 设置编辑模式的实例键
setInstanceKey(`edit_${id}_${Date.now()}`);
} else {
console.error('获取数据失败: 返回数据为空');
alert('获取数据失败: 返回数据为空');
resetFormData();
navigate('/rules');
}
} else {
throw new Error(`响应状态: ${response.status}`);
}
} catch (error) {
console.error('获取评查点数据失败:', error);
alert(`获取评查点数据失败: ${error instanceof Error ? error.message : '未知错误'}`);
// 获取数据失败时返回上一页
navigate(-1);
resetFormData();
navigate('/rules');
} finally {
setIsLoading(false);
}
}, [navigate, extractFieldsFromFormData]);
}, [navigate, extractFieldsFromFormData, resetFormData]);
/**
* 获取评查点组数据
@@ -604,15 +667,20 @@ export default function RuleNew() {
const id = searchParams.get('id');
// 设置编辑模式
setIsEditMode(!!id);
const newIsEditMode = !!id;
setIsEditMode(newIsEditMode);
if (id) {
// 编辑模式:获取数据
fetchEvaluationPoint(parseInt(id));
} else {
// 新建模式:重置表单数据
resetFormData();
}
// 获取评查点组数据
fetchEvaluationPointGroups();
}, [location.search, fetchEvaluationPoint, fetchEvaluationPointGroups]);
}, [location.search, fetchEvaluationPoint, fetchEvaluationPointGroups, resetFormData]);
// 渲染页面内容
return (
@@ -634,61 +702,63 @@ export default function RuleNew() {
extractionFields,
updateFields: setExtractionFields
}}>
{/* 评查点基本信息设置 */}
<div className="mb-8">
<BasicInfo
onChange={handleBasicInfoChange}
initialData={formData}
evaluationPointGroups={evaluationPointGroups}
riskOptions={EVALUATION_OPTIONS.riskLevelOptions}
{/* 使用key属性强制在模式切换时重新渲染所有组件 */}
<div key={instanceKey}>
{/* 评查点基本信息设置 */}
<div className="mb-8">
<BasicInfo
onChange={handleBasicInfoChange}
initialData={formData}
evaluationPointGroups={evaluationPointGroups}
riskOptions={EVALUATION_OPTIONS.riskLevelOptions}
/>
</div>
{/* 抽取设置 - 配置从文档中提取的字段 */}
<div className="mb-8">
<ExtractionSettings
onChange={handleExtractionSettingsChange}
initialData={formData}
promptTypeOptions={EVALUATION_OPTIONS.promptTypeOptions}
vlmFieldTypeOptions={EVALUATION_OPTIONS.vlmFieldTypeOptions}
/>
</div>
{/* 评查设置 - 配置评查规则、消息等 */}
<div className="mb-8">
<ReviewSettings
onChange={handleReviewSettingsChange}
initialData={{
rules: formData.evaluation_config?.rules || [],
combinationLogic: formData.evaluation_config?.logicType || 'and',
customLogic: formData.evaluation_config?.customLogic || '',
pass_message: formData.pass_message || '文档检查通过,符合规范要求。',
fail_message: formData.fail_message || '文档存在以下问题,请修改后重新提交。',
suggestion_message: formData.suggestion_message || '',
suggestion_message_type: formData.suggestion_message_type || 'warning',
post_action: formData.post_action || 'none',
action_config: formData.action_config || '',
score: formData.score !== undefined ? formData.score : 0
}}
ruleTypeOptions={EVALUATION_OPTIONS.ruleTypeOptions}
logicTypeOptions={EVALUATION_OPTIONS.logicTypeOptions}
logicOperatorOptions={EVALUATION_OPTIONS.logicOperatorOptions}
compareMethodOptions={EVALUATION_OPTIONS.compareMethodOptions}
formatTypeOptions={EVALUATION_OPTIONS.formatTypeOptions}
comparisonOperatorOptions={EVALUATION_OPTIONS.comparisonOperatorOptions}
matchTypeOptions={EVALUATION_OPTIONS.matchTypeOptions}
suggestionMessageTypeOptions={EVALUATION_OPTIONS.suggestionMessageTypeOptions}
postActionOptions={EVALUATION_OPTIONS.postActionOptions}
/>
</div>
{/* 底部操作按钮区域 */}
<ActionButtons
onSave={handleSave}
onSaveDraft={handleSaveDraft}
isEditMode={isEditMode}
/>
</div>
{/* 抽取设置 - 配置从文档中提取的字段 */}
<div className="mb-8">
<ExtractionSettings
onChange={handleExtractionSettingsChange}
initialData={formData}
promptTypeOptions={EVALUATION_OPTIONS.promptTypeOptions}
vlmFieldTypeOptions={EVALUATION_OPTIONS.vlmFieldTypeOptions}
/>
</div>
{/* 评查设置 - 配置评查规则、消息等 */}
<div className="mb-8">
<ReviewSettings
key={`review-settings-${extractionFields.length}-${isEditMode ? formData.id : 'new'}`}
onChange={handleReviewSettingsChange}
initialData={{
rules: formData.evaluation_config?.rules || [],
combinationLogic: formData.evaluation_config?.logicType || 'and',
customLogic: formData.evaluation_config?.customLogic || '',
pass_message: formData.pass_message || '',
fail_message: formData.fail_message || '',
suggestion_message: formData.suggestion_message || '',
suggestion_message_type: formData.suggestion_message_type || 'warning',
post_action: formData.post_action || 'none',
action_config: formData.action_config || '',
score: formData.score || 0
}}
ruleTypeOptions={EVALUATION_OPTIONS.ruleTypeOptions}
logicTypeOptions={EVALUATION_OPTIONS.logicTypeOptions}
logicOperatorOptions={EVALUATION_OPTIONS.logicOperatorOptions}
compareMethodOptions={EVALUATION_OPTIONS.compareMethodOptions}
formatTypeOptions={EVALUATION_OPTIONS.formatTypeOptions}
comparisonOperatorOptions={EVALUATION_OPTIONS.comparisonOperatorOptions}
matchTypeOptions={EVALUATION_OPTIONS.matchTypeOptions}
suggestionMessageTypeOptions={EVALUATION_OPTIONS.suggestionMessageTypeOptions}
postActionOptions={EVALUATION_OPTIONS.postActionOptions}
/>
</div>
{/* 底部操作按钮区域 */}
<ActionButtons
onSave={handleSave}
onSaveDraft={handleSaveDraft}
isEditMode={isEditMode}
/>
</RuleContext.Provider>
)}
</div>