diff --git a/app/components/rules/new/ReviewSettings.tsx b/app/components/rules/new/ReviewSettings.tsx index dd4dc3c..4943150 100644 --- a/app/components/rules/new/ReviewSettings.tsx +++ b/app/components/rules/new/ReviewSettings.tsx @@ -792,21 +792,22 @@ export function ReviewSettings({ // 渲染字段标签,确保已选择的字段即使在新的字段列表中不存在也会显示 const renderFieldTags = (ruleId: string, config: Record) => { - // 获取规则的当前已选字段 - // 修复:对于exists类型规则,应该使用fields而不是selectedFields - const selectedFields = Array.isArray(config.fields) ? - config.fields as string[] : - (Array.isArray(config.selectedFields) ? config.selectedFields as string[] : []); - + // 获取规则的当前已选字段(防御性:确保总是数组) + const rawSelected = Array.isArray(config.fields) + ? config.fields + : (Array.isArray(config.selectedFields) ? config.selectedFields : []); + const selectedFields: string[] = Array.isArray(rawSelected) ? rawSelected : []; + // 优先使用配置中存储的可用字段,如果没有则使用当前可用字段 - const fieldsToRender = Array.isArray(config.availableFields) ? - config.availableFields as string[] : - availableFields; - + const rawFieldsToRender = Array.isArray(config.availableFields) + ? config.availableFields + : availableFields; + const fieldsToRender: string[] = Array.isArray(rawFieldsToRender) ? rawFieldsToRender : []; + return (
{fieldsToRender.map((field, index) => { - // 使用includes方法检查选中状态 + // 使用includes方法检查选中状态(selectedFields 总是数组,不会抛错) const isSelected = selectedFields.includes(field); return (