fix: restrict dynamic rule operators
This commit is contained in:
@@ -64,8 +64,8 @@
|
||||
<a-option value="<"><</a-option>
|
||||
<a-option value=">=">≥</a-option>
|
||||
<a-option value="<=">≤</a-option>
|
||||
<a-option value="==">=</a-option>
|
||||
<a-option value="!=">≠</a-option>
|
||||
<a-option v-if="formData.rule_type !== 'dynamic'" value="==">=</a-option>
|
||||
<a-option v-if="formData.rule_type !== 'dynamic'" value="!=">≠</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
@@ -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') {
|
||||
|
||||
@@ -85,7 +85,7 @@
|
||||
<a-col :xs="24" :sm="12" :md="6">
|
||||
<a-form-item label="比较运算符" :field="`rules[${index}].compare_op`" :rules="getRuleFieldRules('compare_op')">
|
||||
<a-select v-model="rule.compare_op" placeholder="请选择" @change="syncUpdate(index)">
|
||||
<a-option v-for="item in COMPARE_OPERATORS" :key="item.value" :value="item.value">
|
||||
<a-option v-for="item in availableCompareOperators(rule.rule_type)" :key="item.value" :value="item.value">
|
||||
{{ item.label }}
|
||||
</a-option>
|
||||
</a-select>
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user