修改模拟分析添加Keff预警阈值,设备算法配置映射

This commit is contained in:
limengnan 2026-03-12 16:32:27 +08:00
parent 9ed22058b6
commit 099486cfc1
2 changed files with 139 additions and 5 deletions

View File

@ -11,7 +11,7 @@ import { getDictItemById } from '@/api/dict';
import { eventsBatchSave } from '@/api/business/event';
import ConditionModels from '@/views/component/scenario/condition.vue'
import { addScenarios,updateScenarios,getActiveAlgorithms } from "@/api/business/scenario";
import { topologyDevicesLsit } from '@/api/business/project';
const emit = defineEmits([ 'closeCreatescenario']);
const props = defineProps({ //
projectInfo: {
@ -53,12 +53,25 @@ function confirmClick(formEl: any) {
if (valid) {
if (!info.value.scenarioId) {
const params = {
const params:any = {
projectId: props.projectInfo.projectId,
name: info.value.name,
algorithmType: info.value.algorithmType,
description: info.value.description,
keffThreshold: info.value.keffThreshold,
};
let device_algo_config:any = {}
let isTrue:any = false
deviceData.value.forEach((item: any) => {
if(item.algorithmType !=null && item.algorithmType != ''){
device_algo_config[item.deviceId] = item.algorithmType
isTrue = true
}
})
if(isTrue == true){
params.deviceAlgoConfig = JSON.stringify(device_algo_config)
}
if(isSwitch.value == true){
return ;
}
@ -82,13 +95,26 @@ function confirmClick(formEl: any) {
isSwitch.value = false;
})
} else if (info.value.scenarioId) {
const params = {
const params:any = {
scenarioId: info.value.scenarioId,
projectId: info.value.projectId,
name: info.value.name,
algorithmType: info.value.algorithmType,
description: info.value.description,
keffThreshold: info.value.keffThreshold,
};
let device_algo_config:any = {}
let isTrue:any = false
deviceData.value.forEach((item: any) => {
if(item.algorithmType !=null && item.algorithmType != ''){
device_algo_config[item.deviceId] = item.algorithmType
isTrue = true
}
})
if(isTrue == true){
params.deviceAlgoConfig = JSON.stringify(device_algo_config)
}
updateScenarios(params).then((res) => {
});
@ -121,8 +147,26 @@ function submitClick(){
})
}
const deviceData: any = ref([]); //
function initDeviceData(){
deviceData.value = []
topologyDevicesLsit({
id: props.projectInfo.projectId
}).then((res:any) => {
if (res.code == 0) {
res.data.forEach((item: any) => {
deviceData.value.push({
deviceId: item.deviceId,
deviceName: item.deviceName,
algorithmType: ''
})
})
}
})
}
onMounted(() => {
initDeviceData()
getAlgorithmType()
});
</script>
@ -138,7 +182,7 @@ onMounted(() => {
</el-steps>
</div>
<div class="scenario-setting-bottombox">
<el-form ref="infoForm" :model="info" :rules="rules" label-width="140px" style="width:600px"
<el-form ref="infoForm" :model="info" :rules="rules" label-width="160px" style="width:600px"
v-if="stepsActive == 0">
<el-form-item label="事故情景名称:" prop="name">
<el-input v-model="info.name" style="width: 100%" placeholder="输入事故情景名称" ></el-input>
@ -148,6 +192,26 @@ onMounted(() => {
<el-option v-for="item in algorithmTypeData" :key="item.algorithmType" :label="item.name" :value="item.algorithmType" />
</el-select>
</el-form-item>
<el-form-item label="设备算法配置映射:">
<div style="width: 100%;padding-top: 40px;">
<div v-for="item in deviceData" :key="item.deviceId" style="display: flex;align-items: center;margin-bottom: 10px;">
<div style="width: 150px;text-align: right;padding-right: 10px;">{{item.deviceName}}</div>
<el-select v-model="item.algorithmType" placeholder="请选择" style="width:100%;" clearable>
<el-option v-for="item in algorithmTypeData" :key="item.algorithmType" :label="item.name" :value="item.algorithmType" />
</el-select>
</div>
</div>
</el-form-item>
<el-form-item label="Keff预警阈值" prop="keffThreshold">
<el-input v-model="info.keffThreshold" style="width: 100%" placeholder="输入Keff预警阈值" ></el-input>
</el-form-item>
<el-form-item label="事故情景描述:">
<el-input type="textarea" v-model="info.description" :rows="6" style="width: 100%" placeholder="请输入事故情景描述"></el-input>
</el-form-item>

View File

@ -86,7 +86,12 @@ function addClick() {
description: "",
};
stepsActive.value = 0;
deviceData.value.forEach((item: any) => {
item.algorithmType = ''
})
dialogVisible.value = true;
}
const isSwitch = ref(false); // id
@ -105,6 +110,23 @@ const rules = ref({
function editClick(row: any,type: string) {
title.value =type + "事故情景";
info.value = JSON.parse(JSON.stringify(row));
if(info.value.deviceAlgoConfig !=null && info.value.deviceAlgoConfig != ''){
let device_algo_config = JSON.parse(info.value.deviceAlgoConfig)
for(let key in device_algo_config){
for(let i = 0;i<deviceData.value.length;i++){
if(deviceData.value[i].deviceId == key){
deviceData.value[i].algorithmType = device_algo_config[key]
}
}
}
}
dialogEditVisible.value = true;
}
@ -191,12 +213,27 @@ const getAlgorithmType = async () => {
}
function submitClick(){
let data = {
let data:any = {
scenarioId: info.value.scenarioId,
algorithm_type: info.value.algorithmType,
name: info.value.name,
description: info.value.description,
keffThreshold: info.value.keffThreshold,
}
let device_algo_config:any = {}
let isTrue:any = false
deviceData.value.forEach((item: any) => {
if(item.algorithmType !=null && item.algorithmType != ''){
device_algo_config[item.deviceId] = item.algorithmType
isTrue = true
}
})
if(isTrue == true){
data.deviceAlgoConfig = JSON.stringify(device_algo_config)
}
updateScenarios(data).then((res:any) => {
if (res == true) {
ElMessage({
@ -213,6 +250,7 @@ function submitClick(){
onMounted(() => {
getAlgorithmType()
gettableData();
initDeviceData()
});
function closeCreatescenario(){
dialogVisible.value = false;
@ -347,6 +385,24 @@ function changeShowResult(isShow:any){ // 切换显示结果模型
},
200);
}
const deviceData: any = ref([]); //
function initDeviceData(){
deviceData.value = []
topologyDevicesLsit({
id: props.projectInfo.projectId
}).then((res:any) => {
if (res.code == 0) {
res.data.forEach((item: any) => {
deviceData.value.push({
deviceId: item.deviceId,
deviceName: item.deviceName,
algorithmType: ''
})
})
}
})
}
</script>
<template>
@ -436,6 +492,20 @@ function changeShowResult(isShow:any){ // 切换显示结果模型
<el-option v-for="item in algorithmTypeData" :key="item.algorithmType" :label="item.name" :value="item.algorithmType" />
</el-select>
</el-form-item>
<el-form-item label="Keff预警阈值" prop="keffThreshold">
<el-input v-model="info.keffThreshold" style="width: 100%" placeholder="输入Keff预警阈值" :disabled="title == '查看事故情景'"></el-input>
</el-form-item>
<el-form-item label="设备算法配置映射:">
<div style="width: 100%;padding-top: 40px;">
<div v-for="item in deviceData" :key="item.deviceType" style="display: flex;align-items: center;margin-bottom: 10px;">
<div style="width: 150px;text-align: right;padding-right: 10px;">{{item.deviceName}}</div>
<el-select v-model="item.algorithmType" placeholder="请选择" style="width:100%;" clearable :disabled="title == '查看事故情景'">
<el-option v-for="item in algorithmTypeData" :key="item.algorithmType" :label="item.name" :value="item.algorithmType" />
</el-select>
</div>
</div>
</el-form-item>
<el-form-item label="事故情景描述:" :disabled="title == '查看事故情景'">
<el-input type="textarea" v-model="info.description" :rows="6" style="width: 100%" placeholder="请输入事故情景描述" :disabled="title == '查看事故情景'"></el-input>
</el-form-item>