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 value="<=">≤</a-option>
|
||||||
<a-option value="==">=</a-option>
|
<a-option v-if="formData.rule_type !== 'dynamic'" value="==">=</a-option>
|
||||||
<a-option value="!=">≠</a-option>
|
<a-option v-if="formData.rule_type !== 'dynamic'" value="!=">≠</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
@@ -307,7 +307,10 @@ const loadRuleDetail = async () => {
|
|||||||
formData.metric_name = rule.metric_name || ''
|
formData.metric_name = rule.metric_name || ''
|
||||||
formData.data_source = rule.data_source || 'dc-control'
|
formData.data_source = rule.data_source || 'dc-control'
|
||||||
formData.threshold = rule.threshold
|
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.duration = rule.duration ?? 60
|
||||||
formData.eval_interval = rule.eval_interval ?? 60
|
formData.eval_interval = rule.eval_interval ?? 60
|
||||||
if (rule.rule_type === 'dynamic') {
|
if (rule.rule_type === 'dynamic') {
|
||||||
|
|||||||
@@ -85,7 +85,7 @@
|
|||||||
<a-col :xs="24" :sm="12" :md="6">
|
<a-col :xs="24" :sm="12" :md="6">
|
||||||
<a-form-item label="比较运算符" :field="`rules[${index}].compare_op`" :rules="getRuleFieldRules('compare_op')">
|
<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-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 }}
|
{{ item.label }}
|
||||||
</a-option>
|
</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
@@ -254,6 +254,7 @@ watch(
|
|||||||
const copied: RuleItem[] = JSON.parse(JSON.stringify(val))
|
const copied: RuleItem[] = JSON.parse(JSON.stringify(val))
|
||||||
localRules.value = copied.map((rule) => ({
|
localRules.value = copied.map((rule) => ({
|
||||||
...rule,
|
...rule,
|
||||||
|
compare_op: rule.rule_type === 'dynamic' && ['==', '!='].includes(rule.compare_op) ? '>' : rule.compare_op,
|
||||||
_baseline: parseBaselineConfig(rule.baseline_config),
|
_baseline: parseBaselineConfig(rule.baseline_config),
|
||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
@@ -336,6 +337,9 @@ const getRuleFieldRules = (field: string) => {
|
|||||||
return [{ required: true, message: messages[field] || '该字段为必填项' }]
|
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 () => {
|
const validate = async () => {
|
||||||
return ruleFormRef.value?.validate()
|
return ruleFormRef.value?.validate()
|
||||||
@@ -349,6 +353,9 @@ defineExpose({
|
|||||||
const syncUpdate = (index: number) => {
|
const syncUpdate = (index: number) => {
|
||||||
const newRules = [...props.rules]
|
const newRules = [...props.rules]
|
||||||
const { _metrics, _metricsLoading, _baseline, ...rest } = localRules.value[index]
|
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()) : '{}'
|
const baseline_config = rest.rule_type === 'dynamic' ? JSON.stringify(_baseline || defaultBaselineConfig()) : '{}'
|
||||||
newRules[index] = { ...rest, baseline_config, _metrics, _metricsLoading } as RuleItem
|
newRules[index] = { ...rest, baseline_config, _metrics, _metricsLoading } as RuleItem
|
||||||
emit('update:rules', newRules)
|
emit('update:rules', newRules)
|
||||||
|
|||||||
Reference in New Issue
Block a user