diff --git a/src/views/ops/pages/alert/setting/components/RuleFormDialog.vue b/src/views/ops/pages/alert/setting/components/RuleFormDialog.vue index 7ac0416..e46b491 100644 --- a/src/views/ops/pages/alert/setting/components/RuleFormDialog.vue +++ b/src/views/ops/pages/alert/setting/components/RuleFormDialog.vue @@ -64,8 +64,8 @@ < - = - + = + @@ -307,7 +307,10 @@ const loadRuleDetail = async () => { formData.metric_name = rule.metric_name || '' formData.data_source = rule.data_source || 'dc-control' formData.threshold = rule.threshold - formData.compare_op = rule.compare_op || '>' + formData.compare_op = rule.compare_op || '>' + if (formData.rule_type === 'dynamic' && ['==', '!='].includes(formData.compare_op)) { + formData.compare_op = '>' + } formData.duration = rule.duration ?? 60 formData.eval_interval = rule.eval_interval ?? 60 if (rule.rule_type === 'dynamic') { diff --git a/src/views/ops/pages/alert/template/components/RuleEditor.vue b/src/views/ops/pages/alert/template/components/RuleEditor.vue index ff5a2db..f3160ee 100644 --- a/src/views/ops/pages/alert/template/components/RuleEditor.vue +++ b/src/views/ops/pages/alert/template/components/RuleEditor.vue @@ -85,7 +85,7 @@ - + {{ item.label }} @@ -254,6 +254,7 @@ watch( const copied: RuleItem[] = JSON.parse(JSON.stringify(val)) localRules.value = copied.map((rule) => ({ ...rule, + compare_op: rule.rule_type === 'dynamic' && ['==', '!='].includes(rule.compare_op) ? '>' : rule.compare_op, _baseline: parseBaselineConfig(rule.baseline_config), })) }, @@ -336,6 +337,9 @@ const getRuleFieldRules = (field: string) => { return [{ required: true, message: messages[field] || '该字段为必填项' }] } +const availableCompareOperators = (ruleType: string) => + ruleType === 'dynamic' ? COMPARE_OPERATORS.filter((item) => item.value !== '==' && item.value !== '!=') : COMPARE_OPERATORS + // 暴露验证方法给父组件 const validate = async () => { return ruleFormRef.value?.validate() @@ -349,6 +353,9 @@ defineExpose({ const syncUpdate = (index: number) => { const newRules = [...props.rules] const { _metrics, _metricsLoading, _baseline, ...rest } = localRules.value[index] + if (rest.rule_type === 'dynamic' && ['==', '!='].includes(rest.compare_op)) { + rest.compare_op = '>' + } const baseline_config = rest.rule_type === 'dynamic' ? JSON.stringify(_baseline || defaultBaselineConfig()) : '{}' newRules[index] = { ...rest, baseline_config, _metrics, _metricsLoading } as RuleItem emit('update:rules', newRules)