|
@@ -1,5 +1,5 @@
|
|
|
<script setup>
|
|
|
-import { ref, onMounted, computed, unref, watch } from 'vue';
|
|
|
+import { ref, onMounted, computed, unref, watch, h } from 'vue';
|
|
|
import { NScrollbar, useMessage, NTabs, NTabPane, NSwitch, useNotification, NButton } from 'naive-ui';
|
|
|
import { TheChatView } from '@/components';
|
|
|
import { controlApi } from "@/api/control";
|
|
@@ -16,6 +16,7 @@ const message = useMessage();
|
|
|
const isVisibleBtn = ref(true);
|
|
|
const isVisibleUpdateInfo = ref(false);
|
|
|
const systemStatus = ref(0);
|
|
|
+const zuTaiStatus = ref({});
|
|
|
const minAndMaxValue = ref({});
|
|
|
const resultNumberSet = ref({
|
|
|
flowNum1: 0,
|
|
@@ -271,11 +272,11 @@ const handleMedicateAmount = () => {
|
|
|
isVisibleUpdateInfo.value = true;
|
|
|
// message.warning("北池有新的投放方案, 请查看");
|
|
|
} else {
|
|
|
- resultNumberSet.value.updateNum1 = dataSourceParams.value.medicineAmountOne;
|
|
|
+ // resultNumberSet.value.updateNum1 = dataSourceParams.value.medicineAmountOne;
|
|
|
// isVisibleUpdateInfo.value = true;
|
|
|
}
|
|
|
// r1 != updateNum1 &&
|
|
|
- } else if ( dataSourceParams.value.typeOne) {
|
|
|
+ } else if ( r1 != updateNum1 && dataSourceParams.value.typeOne ) {
|
|
|
resultNumberSet.value.updateNum1 = r1;
|
|
|
isVisibleUpdateInfo.value = true;
|
|
|
dataSourceParams.value.tdbOne = tdb;
|
|
@@ -292,11 +293,11 @@ const handleMedicateAmount = () => {
|
|
|
isVisibleUpdateInfo.value = true;
|
|
|
// message.warning("南池有新的投放方案, 请查看");
|
|
|
} else {
|
|
|
- resultNumberSet.value.updateNum2 = dataSourceParams.value.medicineAmountTwo;
|
|
|
+ // resultNumberSet.value.updateNum2 = dataSourceParams.value.medicineAmountTwo;
|
|
|
// isVisibleUpdateInfo.value = true;
|
|
|
}
|
|
|
- // r2 != updateNum2 &&
|
|
|
- } else if ( dataSourceParams.value.typeTwo) {
|
|
|
+ //
|
|
|
+ } else if ( r2 != updateNum2 && dataSourceParams.value.typeTwo) {
|
|
|
resultNumberSet.value.updateNum2 = r2;
|
|
|
isVisibleUpdateInfo.value = true;
|
|
|
dataSourceParams.value.tdbTwo = tdb;
|
|
@@ -332,36 +333,53 @@ const waringTips = () => {
|
|
|
const tipsEnum = {
|
|
|
oneTips: {
|
|
|
title: '反硝化异常报警',
|
|
|
- content: '排查现场工况/调整控制参数,非碳源量的问题,请切手动控制',
|
|
|
+ content: '请排查现场工况/调整控制参数,非碳源量的问题,建议切换手动控制',
|
|
|
},
|
|
|
twoTips: {
|
|
|
title: '硝化异常报警',
|
|
|
- content: '排查进水水质、曝气系统、活性污泥系统等,请切手动运行',
|
|
|
+ content: '请排查进水水质、曝气系统、活性污泥系统等,请切手动运行',
|
|
|
},
|
|
|
threeTips: {
|
|
|
title: '加药量偏移报警',
|
|
|
- content: '排查现场碳源储罐液位、加药泵和流量计等,确保运行正常',
|
|
|
+ content: () => h('ul', [
|
|
|
+ h('li', {style: { fontWeight: 'bold' }}, '• 系统计算加药与现场实际流量计偏移过大'),
|
|
|
+ h('li', '请排查现场碳源储罐液位、加药泵和流量计等,确保运行正常'),
|
|
|
+ ])
|
|
|
}
|
|
|
}
|
|
|
|
|
|
const result = {
|
|
|
- oneTips: [],
|
|
|
twoTips: [],
|
|
|
+ oneTips: [],
|
|
|
threeTips: []
|
|
|
}
|
|
|
+
|
|
|
+ const qEnum = ['• 好氧池硝酸盐超管控值', '• 好氧池硝酸盐控制目标偏移过大']
|
|
|
|
|
|
+ const questionCollect = {
|
|
|
+ firstItem: [],
|
|
|
+ secondItem: [],
|
|
|
+ }
|
|
|
+
|
|
|
if ( isEmpty(hycXsyOne) && isEmpty(htfksdOne) && isEmpty(kzmbplbjz) ) {
|
|
|
- if ( (hycXsyOne - htfksdOne) > kzmbplbjz || hycXsyOne > hycxsygkz) {
|
|
|
- result.oneTips.push('北池');
|
|
|
+ if (( hycXsyOne - htfksdOne ) > kzmbplbjz ) {
|
|
|
+ questionCollect.firstItem.push('北池');
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( hycXsyOne > hycxsygkz ) {
|
|
|
+ questionCollect.secondItem.push('北池');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if ( isEmpty(hycXsyTwo) && isEmpty(htfksdTwo) && isEmpty(kzmbplbjz) ) {
|
|
|
- if ( (hycXsyTwo - htfksdTwo) > kzmbplbjz || hycXsyTwo > hycxsygkz) {
|
|
|
- result.oneTips.push('南池');
|
|
|
+ if ( (hycXsyTwo - htfksdTwo) > kzmbplbjz ) {
|
|
|
+ questionCollect.firstItem.push('南池');
|
|
|
+ }
|
|
|
+ if ( hycXsyTwo > hycxsygkz ) {
|
|
|
+ questionCollect.secondItem.push('南池');
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if ( isEmpty(hycXsyOne) && isEmpty(qycYxyOne) && isEmpty(qycAdOne) ) {
|
|
|
if (qycYxyOne + qycAdOne - hycXsyOne > xhycbjz) {
|
|
|
result.twoTips.push('北池');
|
|
@@ -386,7 +404,27 @@ const waringTips = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ const r = Object.entries(questionCollect).map(([ key, value ], index) => {
|
|
|
+ if ( !value.length ) return;
|
|
|
+ return qEnum[index] + "(" + value.join(' | ') + ")";
|
|
|
+ }).filter(Boolean);
|
|
|
+
|
|
|
+
|
|
|
warningList.value = Object.entries(result).map(([key, value]) => {
|
|
|
+ if ( key === 'oneTips' ) {
|
|
|
+ if ( !r.length ) return;
|
|
|
+ const renderDomArr = r.map(text => h('li', {style: { fontWeight: 'bold' }}, text));
|
|
|
+ return {
|
|
|
+ title: tipsEnum[key].title,
|
|
|
+ content: () => h('ul', renderDomArr.concat(h('li', tipsEnum[key].content))),
|
|
|
+ duration: 30 * 1000,
|
|
|
+ keepAliveOnHover: true,
|
|
|
+ 'container-style': {
|
|
|
+ width: '500px'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if ( value.length ) {
|
|
|
return {
|
|
|
...tipsEnum[key],
|
|
@@ -397,10 +435,11 @@ const waringTips = () => {
|
|
|
}
|
|
|
}).filter(Boolean);
|
|
|
|
|
|
+ console.log("warningList", warningList);
|
|
|
}
|
|
|
|
|
|
onMounted(async () => {
|
|
|
-
|
|
|
+
|
|
|
const { data: valSet } = await controlApi.getMinMaxVal();
|
|
|
|
|
|
minAndMaxValue.value = valSet;
|
|
@@ -424,8 +463,9 @@ onMounted(async () => {
|
|
|
addDifferenceOne,
|
|
|
addDifferenceTwo
|
|
|
} = data;
|
|
|
-
|
|
|
- systemStatus.value = { activeTwo: addTypeOne, activeTwo: addTypeTwo };
|
|
|
+
|
|
|
+ // 0 不可以 组态投放 1 可以 系统投放
|
|
|
+ zuTaiStatus.value = { activeTwo: addTypeOne, activeTwo: addTypeTwo };
|
|
|
|
|
|
// 系数
|
|
|
baseSourceParams.value = {
|
|
@@ -491,8 +531,9 @@ onMounted(async () => {
|
|
|
|
|
|
// 获取是否允许投药开关 - 锡林浩特
|
|
|
// controlApi.getSystemStatus().then(({ data }) => {
|
|
|
- // // 0不允许 1允许
|
|
|
- // systemStatus.value = { ...data };
|
|
|
+ // 0不允许 1允许
|
|
|
+ // 系统 未投放 系统 投放中
|
|
|
+ // systemStatus.value = { ...data };
|
|
|
// });
|
|
|
})
|
|
|
|
|
@@ -557,7 +598,8 @@ onMounted(async () => {
|
|
|
v-model:value1="dataSourceParams.hycXsyOne"
|
|
|
:btn-group="[
|
|
|
{ label: '手动', value1: '', value2: '' },
|
|
|
- { label: '化验', value1: waterConfigParams.hyXsyHYOne }
|
|
|
+ { label: '化验', value1: waterConfigParams.hyXsyHYOne },
|
|
|
+ { label: '预测', value1: '', disabled: true }
|
|
|
]"></BaseChooseItem>
|
|
|
<BaseChooseItem
|
|
|
tab-key="south"
|
|
@@ -640,9 +682,9 @@ onMounted(async () => {
|
|
|
|
|
|
<div class="w-full flex items-center justify-between" v-show="!dataSourceParams.typeOne">
|
|
|
<span>人工投放:</span>
|
|
|
- <div class="w-[200px]">
|
|
|
+ <div class="w-[200px] flex items-center space-x-[8px]">
|
|
|
<BaseInput :isCloseIcon="false" v-model="dataSourceParams.medicineAmountOne"
|
|
|
- @on-blur="handleMedicateAmount">
|
|
|
+ @on-blur="handleMedicateAmount" unit="L/h">
|
|
|
</BaseInput>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -697,7 +739,8 @@ onMounted(async () => {
|
|
|
v-model:value1="dataSourceParams.hycXsyTwo"
|
|
|
:btn-group="[
|
|
|
{ label: '手动', value1: '', value2: '' },
|
|
|
- { label: '化验', value1: waterConfigParams.hyXsyHYTwo }
|
|
|
+ { label: '化验', value1: waterConfigParams.hyXsyHYTwo },
|
|
|
+ { label: '预测', value1: '', disabled: true }
|
|
|
]"></BaseChooseItem>
|
|
|
<BaseChooseItem
|
|
|
tab-key="south"
|
|
@@ -780,9 +823,9 @@ onMounted(async () => {
|
|
|
|
|
|
<div class="w-full flex items-center justify-between" v-show="!dataSourceParams.typeTwo">
|
|
|
<span>人工投放:</span>
|
|
|
- <div class="w-[200px]">
|
|
|
+ <div class="w-[200px] flex items-center space-x-[8px ]">
|
|
|
<BaseInput :isCloseIcon="false" v-model="dataSourceParams.medicineAmountTwo"
|
|
|
- @on-blur="handleMedicateAmount">
|
|
|
+ @on-blur="handleMedicateAmount" unit="L/h">
|
|
|
</BaseInput>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -795,20 +838,19 @@ onMounted(async () => {
|
|
|
<div class="right-section">
|
|
|
<BaseTitle title="智能投加计算结果" type="second">
|
|
|
<template #right>
|
|
|
- <NButton strong secondary type="warning" @click="onSystemWarning" v-show="warningList.length">查看系统警报</NButton>
|
|
|
+ <div class="warning-btn" @click="onSystemWarning" v-show="warningList.length">查看系统警报</div>
|
|
|
</template>
|
|
|
</BaseTitle>
|
|
|
<div class="right-section-content">
|
|
|
<TheResultPanel
|
|
|
:nums="resultNumberSet"
|
|
|
:minAndMaxNum="minAndMaxValue"
|
|
|
- v-model:system="systemStatus"
|
|
|
+ v-model:system="zuTaiStatus"
|
|
|
v-model="isVisibleUpdateInfo"
|
|
|
- @on-click="onFinalResult"
|
|
|
@on-update="onConfirmUpdate"
|
|
|
>
|
|
|
</TheResultPanel>
|
|
|
- <TheEchartPanel v-model:change="isVisibleUpdateInfo"></TheEchartPanel>
|
|
|
+ <TheEchartPanel v-model:change="isVisibleUpdateInfo" :setVal="dataSourceParams.htfksdOne"></TheEchartPanel>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
@@ -921,6 +963,17 @@ onMounted(async () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+.warning-btn {
|
|
|
+ width: 116px;
|
|
|
+ height: 32px;
|
|
|
+ border-radius: 8px;
|
|
|
+ background: #FFF7F7;
|
|
|
+ line-height: 32px;
|
|
|
+ font-size: 14px;
|
|
|
+ text-align: center;
|
|
|
+ color: #FD5D4D;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
|
|
|
// 通用区域的样式
|
|
|
.btn {
|