|
@@ -24,7 +24,7 @@
|
|
|
<span v-if="editRow.indexOf(scope.row.metricsId) === -1">
|
|
|
{{ scope.row.alarmLow }}
|
|
|
</span>
|
|
|
- <el-input v-model="scope.row.alarmLow" v-else size="small" />
|
|
|
+ <el-input v-model="scope.row.alarmLow" v-else size="small" @change="checkInput"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="告警-中" align="center" width="80">
|
|
@@ -32,7 +32,7 @@
|
|
|
<span v-if="editRow.indexOf(scope.row.metricsId) === -1">
|
|
|
{{ scope.row.alarmMid }}
|
|
|
</span>
|
|
|
- <el-input v-model="scope.row.alarmMid" v-else size="small"/>
|
|
|
+ <el-input v-model="scope.row.alarmMid" v-else size="small" @change="checkInput"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="告警-高" align="center" width="80">
|
|
@@ -40,7 +40,7 @@
|
|
|
<span v-if="editRow.indexOf(scope.row.metricsId) === -1">
|
|
|
{{ scope.row.alarmHigh }}
|
|
|
</span>
|
|
|
- <el-input v-model="scope.row.alarmHigh" v-else size="small"/>
|
|
|
+ <el-input v-model="scope.row.alarmHigh" v-else size="small" @change="checkInput"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="健康事件" align="center" width="80">
|
|
@@ -48,12 +48,13 @@
|
|
|
<span v-if="editRow.indexOf(scope.row.metricsId) === -1">
|
|
|
{{ scope.row.event }}
|
|
|
</span>
|
|
|
- <el-input v-model="scope.row.event" v-else size="small"/>
|
|
|
+ <el-input v-model="scope.row.event" v-else size="small" @change="checkInput"/>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="180">
|
|
|
<template #default="scope">
|
|
|
- <el-button link type="primary" icon="Edit" @click="handleEdit(scope.row)" v-if="editRow.indexOf(scope.row.metricsId) === -1">
|
|
|
+ <el-button link type="primary" icon="Edit" @click="handleEdit(scope.row)"
|
|
|
+ v-if="editRow.indexOf(scope.row.metricsId) === -1">
|
|
|
修改
|
|
|
</el-button>
|
|
|
<el-button link type="primary" icon="Check" @click="handleUpdate(scope.row)" v-else>保存</el-button>
|
|
@@ -78,7 +79,7 @@
|
|
|
<!-- 添加或修改指标模板对话框 -->
|
|
|
<el-dialog title="新增指标" v-model="open" width="1100" append-to-body>
|
|
|
<div>
|
|
|
- <el-form :model="adParams" ref="queryRef" :inline="true" label-width="0" @submit.native.prevent>
|
|
|
+ <el-form :model="adParams" ref="queryRef" :inline="true" label-width="0" @submit.native.prevent>
|
|
|
<el-form-item label="" prop="metricsName" style="margin-right:10px">
|
|
|
<el-input
|
|
|
v-model="adParams.metricsName"
|
|
@@ -125,7 +126,7 @@
|
|
|
|
|
|
</template>
|
|
|
<script setup lang="ts">
|
|
|
-import {addDetailByTplId, listDetail, selectDetails, updateDetail,delDetail} from "@/api/metrics/detail";
|
|
|
+import {addDetailByTplId, delDetail, listDetail, selectDetails, updateDetail} from "@/api/metrics/detail";
|
|
|
|
|
|
const {proxy, emit} = getCurrentInstance();
|
|
|
|
|
@@ -137,7 +138,41 @@ const open = ref(false);
|
|
|
const addListData = ref([]);
|
|
|
const ids = ref([]);
|
|
|
const total = ref(0);
|
|
|
-const adTotal=ref(0);
|
|
|
+const adTotal = ref(0);
|
|
|
+const passValidate = ref(true)
|
|
|
+
|
|
|
+const checkInput = (range) => {
|
|
|
+ passValidate.value = validateRange(range)
|
|
|
+ if (!passValidate.value) {
|
|
|
+ proxy.$message.error("请输入正确的区间格式!")
|
|
|
+ }
|
|
|
+}
|
|
|
+const validateRange = (range) => {
|
|
|
+ // 正则表达式匹配各种区间的格式
|
|
|
+ const regex = /^(\[|\()\s*([0-9]+(\.[0-9]+)?|)\s*,\s*([0-9]+(\.[0-9]+)?|)\s*(\]|\))$/;
|
|
|
+ const match = range.match(regex);
|
|
|
+
|
|
|
+ if (!match) {
|
|
|
+ return false; // 如果格式不正确,则返回false
|
|
|
+ }
|
|
|
+
|
|
|
+ // 提取括号类型和两个数值
|
|
|
+ const openBracket = match[1];// 开始的括号
|
|
|
+ const num1Str = match[2]; // 第一个数
|
|
|
+ const num2Str = match[4]; // 第二个数
|
|
|
+ const closeBracket = match[7]; // 结束的括号
|
|
|
+
|
|
|
+ let num1 = num1Str ? parseFloat(num1Str) : -Infinity;
|
|
|
+ let num2 = num2Str ? parseFloat(num2Str) : Infinity;
|
|
|
+
|
|
|
+ // 检查区间的有效性
|
|
|
+ if (openBracket === '[' && num1 > num2) return false; // [x,y] 要求 x <= y
|
|
|
+ if (openBracket === '(' && num1 >= num2) return false; // (x,y) 要求 x < y
|
|
|
+ if (closeBracket === ']' && num1 > num2) return false; // (x,y] 要求 x < y
|
|
|
+ if (closeBracket === ')' && num1 >= num2) return false; // [x,y) 要求 x < y
|
|
|
+
|
|
|
+ return true;
|
|
|
+}
|
|
|
|
|
|
const adParams = reactive({
|
|
|
pageNum: 1,
|
|
@@ -146,22 +181,23 @@ const adParams = reactive({
|
|
|
});
|
|
|
|
|
|
const queryParams = reactive({
|
|
|
- pageNum: 1,
|
|
|
- pageSize: 10,
|
|
|
- tplId: 0
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ tplId: 0
|
|
|
});
|
|
|
|
|
|
// 选择指标
|
|
|
const getSelectDetails = (tplId: number) => {
|
|
|
loading.value = true;
|
|
|
editRow.value = [];
|
|
|
- if(tplId){
|
|
|
+ if (tplId) {
|
|
|
rowTplId.value = tplId;
|
|
|
queryParams.tplId = tplId
|
|
|
}
|
|
|
listDetail(queryParams).then((response) => {
|
|
|
listData.value = response.rows
|
|
|
- total.value = response.total;
|
|
|
+ passValidate.value = true
|
|
|
+ total.value = response.total
|
|
|
});
|
|
|
loading.value = false;
|
|
|
}
|
|
@@ -200,6 +236,7 @@ const handleDelete = (row) => {
|
|
|
|
|
|
// 更新
|
|
|
const handleUpdate = (row) => {
|
|
|
+ if(!passValidate.value) return proxy.$message.error("区间无效,请检查")
|
|
|
updateDetail({...row}).then(res => {
|
|
|
proxy.$modal.msgSuccess("修改成功");
|
|
|
editRow.value = editRow.value.filter(p => p !== row.metricsId)
|
|
@@ -215,7 +252,7 @@ const handleAdd = () => {
|
|
|
}
|
|
|
|
|
|
const getSelectData = () => {
|
|
|
- selectDetails(rowTplId.value,adParams).then(res => {
|
|
|
+ selectDetails(rowTplId.value, adParams).then(res => {
|
|
|
addListData.value = res.rows
|
|
|
adTotal.value = res.total
|
|
|
})
|