|
@@ -31,8 +31,8 @@ const setIntervalRefs = ref<InstanceType<typeof SetInterval>[]>([]);
|
|
const equipmentControlRefs = ref<InstanceType<typeof EquipmentControl>[]>([]);
|
|
const equipmentControlRefs = ref<InstanceType<typeof EquipmentControl>[]>([]);
|
|
|
|
|
|
const { handleRequest } = useRequest();
|
|
const { handleRequest } = useRequest();
|
|
-const activeKey = ref<string[]>(['1', '2', '3']);
|
|
|
|
-const customStyle = 'border-radius: 4px;;border: 0;background: #F5F6F7;';
|
|
|
|
|
|
+const activeKey = ref<string[]>(['intelligentControl', 'functionSettings']);
|
|
|
|
+const customStyle = 'border-radius: 4px;;border: 0;background: #F5F6F7;margin-bottom: 4px';
|
|
const analysisOpen = ref<boolean>(false);
|
|
const analysisOpen = ref<boolean>(false);
|
|
const setOpen = ref<boolean>(false);
|
|
const setOpen = ref<boolean>(false);
|
|
const temperatureSettingValue = ref<string>('');
|
|
const temperatureSettingValue = ref<string>('');
|
|
@@ -285,15 +285,15 @@ onMounted(() => {
|
|
<template>
|
|
<template>
|
|
<div>
|
|
<div>
|
|
<AFlex justify="space-between">
|
|
<AFlex justify="space-between">
|
|
- <div class="title-text">算法配置</div>
|
|
|
|
|
|
+ <div class="title-text">{{ $t('algorithmManage.algorithmConfiguration') }}</div>
|
|
<DeviceGroupSelect @change="handleDevGroupChange" />
|
|
<DeviceGroupSelect @change="handleDevGroupChange" />
|
|
</AFlex>
|
|
</AFlex>
|
|
<div class="algorithm-content">
|
|
<div class="algorithm-content">
|
|
<ACollapse v-model:active-key="activeKey" style="border: 0" collapsible="icon">
|
|
<ACollapse v-model:active-key="activeKey" style="border: 0" collapsible="icon">
|
|
- <ACollapsePanel key="1" :style="customStyle">
|
|
|
|
|
|
+ <ACollapsePanel key="intelligentControl" :style="customStyle">
|
|
<template #header>
|
|
<template #header>
|
|
<AFlex align="center" class="header-heigth">
|
|
<AFlex align="center" class="header-heigth">
|
|
- <span class="header-text">主机冷冻水智控</span>
|
|
|
|
|
|
+ <span class="header-text">{{ $t('algorithmManage.intelligentControlChilledWater') }}</span>
|
|
<ASwitch v-model:checked="algorithmForm.enabled" />
|
|
<ASwitch v-model:checked="algorithmForm.enabled" />
|
|
</AFlex>
|
|
</AFlex>
|
|
</template>
|
|
</template>
|
|
@@ -307,37 +307,39 @@ onMounted(() => {
|
|
:rules="rules"
|
|
:rules="rules"
|
|
>
|
|
>
|
|
<AFlex class="flex-bottom" :gap="40">
|
|
<AFlex class="flex-bottom" :gap="40">
|
|
- <AFormItem label="是否下发控制指令" name="sendCtrlCmd">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.controlInstruction')" name="sendCtrlCmd">
|
|
<ARadioGroup v-model:value="algorithmForm.sendCtrlCmd">
|
|
<ARadioGroup v-model:value="algorithmForm.sendCtrlCmd">
|
|
- <ARadio class="radio-right" :value="true">是</ARadio>
|
|
|
|
- <ARadio :value="false">否</ARadio>
|
|
|
|
|
|
+ <ARadio class="radio-right" :value="true">{{ $t('common.yes') }}</ARadio>
|
|
|
|
+ <ARadio :value="false">{{ $t('common.no') }}</ARadio>
|
|
</ARadioGroup>
|
|
</ARadioGroup>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="是否弹窗提醒" name="msgBox">
|
|
|
|
|
|
+ <AFormItem :label="$t('algorithmManage.popupReminder')" name="msgBox">
|
|
<ARadioGroup v-model:value="algorithmForm.msgBox">
|
|
<ARadioGroup v-model:value="algorithmForm.msgBox">
|
|
- <ARadio class="radio-right" :value="true">是</ARadio>
|
|
|
|
- <ARadio :value="false">否</ARadio>
|
|
|
|
|
|
+ <ARadio class="radio-right" :value="true">{{ $t('common.yes') }}</ARadio>
|
|
|
|
+ <ARadio :value="false">{{ $t('common.no') }}</ARadio>
|
|
</ARadioGroup>
|
|
</ARadioGroup>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="智控策略升温调控周期" name="tempRiseCtrlPeriod">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.regulationCycle')" name="tempRiseCtrlPeriod">
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="algorithmForm.tempRiseCtrlPeriod"
|
|
v-model:value="algorithmForm.tempRiseCtrlPeriod"
|
|
class="input-width"
|
|
class="input-width"
|
|
addon-after="min"
|
|
addon-after="min"
|
|
:min="1"
|
|
:min="1"
|
|
:max="99999"
|
|
:max="99999"
|
|
|
|
+ :placeholder="t('common.pleaseEnter')"
|
|
/>
|
|
/>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="智控策略降温调控周期" name="tempReductionCtrlPeriod">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.coolingOffPeriod')" name="tempReductionCtrlPeriod">
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="algorithmForm.tempReductionCtrlPeriod"
|
|
v-model:value="algorithmForm.tempReductionCtrlPeriod"
|
|
class="input-width"
|
|
class="input-width"
|
|
addon-after="min"
|
|
addon-after="min"
|
|
:min="1"
|
|
:min="1"
|
|
:max="99999"
|
|
:max="99999"
|
|
|
|
+ :placeholder="t('common.pleaseEnter')"
|
|
/>
|
|
/>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem class="input-width" label="最小控制步长(℃)" name="minCtrlStep">
|
|
|
|
|
|
+ <AFormItem class="input-width" :label="t('algorithmManage.controlStepSize')" name="minCtrlStep">
|
|
<ASelect
|
|
<ASelect
|
|
v-model:value="algorithmForm.minCtrlStep"
|
|
v-model:value="algorithmForm.minCtrlStep"
|
|
:options="algTempCtrlMinStep"
|
|
:options="algTempCtrlMinStep"
|
|
@@ -346,7 +348,9 @@ onMounted(() => {
|
|
/>
|
|
/>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
</AFlex>
|
|
</AFlex>
|
|
- <div class="analysis-style interval-style"><span>* </span>冷冻水出水温度设定区间</div>
|
|
|
|
|
|
+ <div class="analysis-style interval-style">
|
|
|
|
+ <span>* </span>{{ $t('algorithmManage.effluentInterval') }}
|
|
|
|
+ </div>
|
|
|
|
|
|
<div v-for="(item, index) in temperatureRangeList" :key="index">
|
|
<div v-for="(item, index) in temperatureRangeList" :key="index">
|
|
<SetInterval
|
|
<SetInterval
|
|
@@ -358,47 +362,61 @@ onMounted(() => {
|
|
/>
|
|
/>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
- <div class="analysis-style"><span>* </span>初始冷冻水出水温度设定值</div>
|
|
|
|
|
|
+ <div class="analysis-style"><span>* </span>{{ $t('algorithmManage.waterOutletSetting') }}</div>
|
|
<MonthSetting ref="monthSetting" :temperature-setting-value="temperatureSettingValue" />
|
|
<MonthSetting ref="monthSetting" :temperature-setting-value="temperatureSettingValue" />
|
|
<AFlex class="flex-bottom" wrap="wrap" :gap="40">
|
|
<AFlex class="flex-bottom" wrap="wrap" :gap="40">
|
|
- <AFormItem label="智能模式" name="intelligentMode">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.intelligentMode')" name="intelligentMode">
|
|
<ARadioGroup v-model:value="algorithmForm.intelligentMode">
|
|
<ARadioGroup v-model:value="algorithmForm.intelligentMode">
|
|
<ARadio class="radio-right" :value="0">
|
|
<ARadio class="radio-right" :value="0">
|
|
<AFlex align="center">
|
|
<AFlex align="center">
|
|
- <div>智能节能</div>
|
|
|
|
|
|
+ <div>{{ $t('algorithmManage.intelligentEnergyConservation') }}</div>
|
|
<SvgIcon class="icon-style" name="question-circle-o" />
|
|
<SvgIcon class="icon-style" name="question-circle-o" />
|
|
</AFlex>
|
|
</AFlex>
|
|
</ARadio>
|
|
</ARadio>
|
|
<ARadio :value="1">
|
|
<ARadio :value="1">
|
|
<AFlex align="center">
|
|
<AFlex align="center">
|
|
- <div>需求优先</div>
|
|
|
|
|
|
+ <div>{{ $t('algorithmManage.prioritizeRequirements') }}</div>
|
|
<SvgIcon class="icon-style" name="question-circle-o" />
|
|
<SvgIcon class="icon-style" name="question-circle-o" />
|
|
</AFlex>
|
|
</AFlex>
|
|
</ARadio>
|
|
</ARadio>
|
|
</ARadioGroup>
|
|
</ARadioGroup>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="控制依据" name="controlBasis">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.controlBasis')" name="controlBasis">
|
|
<ARadioGroup v-model:value="algorithmForm.controlBasis">
|
|
<ARadioGroup v-model:value="algorithmForm.controlBasis">
|
|
- <ARadio class="radio-right" :value="0">温度</ARadio>
|
|
|
|
- <ARadio class="radio-right" :value="1">湿度</ARadio>
|
|
|
|
- <ARadio :value="2">温湿度</ARadio>
|
|
|
|
|
|
+ <ARadio class="radio-right" :value="0">{{ $t('envMonitor.temperature') }}</ARadio>
|
|
|
|
+ <ARadio class="radio-right" :value="1">{{ $t('envMonitor.humidity') }}</ARadio>
|
|
|
|
+ <ARadio :value="2">{{ $t('algorithmManage.temperatureHumidity') }}</ARadio>
|
|
</ARadioGroup>
|
|
</ARadioGroup>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="计算周期" name="period">
|
|
|
|
- <AInputNumber v-model:value="algorithmForm.period" class="input-width" addon-after="min" />
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.computingCycle')" name="period">
|
|
|
|
+ <AInputNumber
|
|
|
|
+ :placeholder="t('common.pleaseEnter')"
|
|
|
|
+ v-model:value="algorithmForm.period"
|
|
|
|
+ class="input-width"
|
|
|
|
+ addon-after="min"
|
|
|
|
+ />
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="温度安全余量" name="tempSafetyMargin">
|
|
|
|
- <AInputNumber v-model:value="algorithmForm.tempSafetyMargin" class="input-width" addon-after="℃" />
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.temperatureSafetyMargin')" name="tempSafetyMargin">
|
|
|
|
+ <AInputNumber
|
|
|
|
+ :placeholder="t('common.pleaseEnter')"
|
|
|
|
+ v-model:value="algorithmForm.tempSafetyMargin"
|
|
|
|
+ class="input-width"
|
|
|
|
+ addon-after="℃"
|
|
|
|
+ />
|
|
</AFormItem>
|
|
</AFormItem>
|
|
|
|
|
|
- <AFormItem label="湿度安全余量" name="humiditySafetyMargin">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.humiditySafetyMargin')" name="humiditySafetyMargin">
|
|
<AInputNumber
|
|
<AInputNumber
|
|
v-model:value="algorithmForm.humiditySafetyMargin"
|
|
v-model:value="algorithmForm.humiditySafetyMargin"
|
|
class="input-width"
|
|
class="input-width"
|
|
addon-after="%"
|
|
addon-after="%"
|
|
|
|
+ :placeholder="t('common.pleaseEnter')"
|
|
/>
|
|
/>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="温湿度采集周期(min)" name="tempHumidityCollectPeriod">
|
|
|
|
|
|
+ <AFormItem
|
|
|
|
+ :label="t('algorithmManage.temperatureHumidityAcquisitionCycle')"
|
|
|
|
+ name="tempHumidityCollectPeriod"
|
|
|
|
+ >
|
|
<ASelect
|
|
<ASelect
|
|
class="input-width"
|
|
class="input-width"
|
|
v-model:value="algorithmForm.tempHumidityCollectPeriod"
|
|
v-model:value="algorithmForm.tempHumidityCollectPeriod"
|
|
@@ -407,10 +425,10 @@ onMounted(() => {
|
|
:placeholder="$t('common.plzSelect')"
|
|
:placeholder="$t('common.plzSelect')"
|
|
/>
|
|
/>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
- <AFormItem label="供水温度来源" name="waterSupplyTempSource">
|
|
|
|
|
|
+ <AFormItem :label="t('algorithmManage.sourceTemperature')" name="waterSupplyTempSource">
|
|
<ARadioGroup v-model:value="algorithmForm.waterSupplyTempSource">
|
|
<ARadioGroup v-model:value="algorithmForm.waterSupplyTempSource">
|
|
- <ARadio class="radio-right" :value="0">加权 </ARadio>
|
|
|
|
- <ARadio :value="1"> 读取 </ARadio>
|
|
|
|
|
|
+ <ARadio class="radio-right" :value="0">{{ $t('algorithmManage.weighted') }} </ARadio>
|
|
|
|
+ <ARadio :value="1"> {{ $t('algorithmManage.read') }} </ARadio>
|
|
</ARadioGroup>
|
|
</ARadioGroup>
|
|
</AFormItem>
|
|
</AFormItem>
|
|
</AFlex>
|
|
</AFlex>
|
|
@@ -438,59 +456,76 @@ onMounted(() => {
|
|
/>
|
|
/>
|
|
</ACollapsePanel>
|
|
</ACollapsePanel>
|
|
|
|
|
|
- <ACollapsePanel key="3" :style="customStyle">
|
|
|
|
|
|
+ <ACollapsePanel key="functionSettings" :style="customStyle">
|
|
<template #header>
|
|
<template #header>
|
|
<AFlex align="center" class="header-heigth">
|
|
<AFlex align="center" class="header-heigth">
|
|
- <span class="header-text">系统功能设置</span>
|
|
|
|
|
|
+ <span class="header-text">{{ $t('algorithmManage.systemFunctionSettings') }}</span>
|
|
</AFlex>
|
|
</AFlex>
|
|
</template>
|
|
</template>
|
|
<div>
|
|
<div>
|
|
<AFlex align="center" class="analysis-bottom">
|
|
<AFlex align="center" class="analysis-bottom">
|
|
- <div class="text">能效分析</div>
|
|
|
|
|
|
+ <div class="text">{{ $t('energyAnalysis.energyEfficiencyAnalysis') }}</div>
|
|
<ASwitch class="analysis-margin" v-model:checked="algorithmForm.analysis" />
|
|
<ASwitch class="analysis-margin" v-model:checked="algorithmForm.analysis" />
|
|
- <div @click="analysisEditor" class="editor-style">编辑</div>
|
|
|
|
|
|
+ <div @click="analysisEditor" class="editor-style">{{ $t('common.editor') }}</div>
|
|
</AFlex>
|
|
</AFlex>
|
|
<AFlex align="center">
|
|
<AFlex align="center">
|
|
- <div class="div-width">动态调整</div>
|
|
|
|
|
|
+ <div class="div-width">{{ $t('algorithmManage.dynamicAdjustment') }}</div>
|
|
<AFlex align="center" class="adjustment-div">
|
|
<AFlex align="center" class="adjustment-div">
|
|
- <div class="adjustment-text">动态调整冷冻总管出水温度设定值</div>
|
|
|
|
|
|
+ <div class="adjustment-text">{{ $t('algorithmManage.freezingSetValue') }}</div>
|
|
<ASwitch v-model:checked="algorithmForm.enableRefrigerationPipeDynamicSet" />
|
|
<ASwitch v-model:checked="algorithmForm.enableRefrigerationPipeDynamicSet" />
|
|
- <div class="adjustment-text adjustment-left">动态调整冷却总管回水温度设定值</div>
|
|
|
|
|
|
+ <div class="adjustment-text adjustment-left">{{ $t('algorithmManage.coolingSetValue') }}</div>
|
|
<ASwitch v-model:checked="algorithmForm.enableCoolingPipeDynamicSet" />
|
|
<ASwitch v-model:checked="algorithmForm.enableCoolingPipeDynamicSet" />
|
|
- <div @click="setEditor" class="editor-style editor-left">编辑</div>
|
|
|
|
|
|
+ <div @click="setEditor" class="editor-style editor-left">{{ $t('common.editor') }}</div>
|
|
</AFlex>
|
|
</AFlex>
|
|
</AFlex>
|
|
</AFlex>
|
|
</div>
|
|
</div>
|
|
</ACollapsePanel>
|
|
</ACollapsePanel>
|
|
</ACollapse>
|
|
</ACollapse>
|
|
<AFlex justify="space-between" class="bottom-style">
|
|
<AFlex justify="space-between" class="bottom-style">
|
|
- <AButton type="text">取消</AButton>
|
|
|
|
- <AButton type="primary" class="button-width" @click="addAlgorithm">确定</AButton>
|
|
|
|
|
|
+ <AButton type="text">{{ $t('common.cancel') }}</AButton>
|
|
|
|
+ <AButton type="primary" class="button-width" @click="addAlgorithm">{{ $t('common.certain') }}</AButton>
|
|
</AFlex>
|
|
</AFlex>
|
|
</div>
|
|
</div>
|
|
- <AModal v-model:open="analysisOpen" title="能效分析设置" width="460px" :mask-closable="false" @ok="okConfirm">
|
|
|
|
- <div class="analysis-style"><span>* </span>能效分析计算方式</div>
|
|
|
|
|
|
+ <AModal
|
|
|
|
+ v-model:open="analysisOpen"
|
|
|
|
+ :title="t('algorithmManage.energyEfficiencyAnalysisSettings')"
|
|
|
|
+ width="460px"
|
|
|
|
+ :mask-closable="false"
|
|
|
|
+ @ok="okConfirm"
|
|
|
|
+ >
|
|
|
|
+ <div class="analysis-style">
|
|
|
|
+ <span>* </span>{{ $t('algorithmManage.energyEfficiencyAnalysisCalculationMethod') }}
|
|
|
|
+ </div>
|
|
<ARadioGroup v-model:value="analysisTypeDisplay">
|
|
<ARadioGroup v-model:value="analysisTypeDisplay">
|
|
- <ARadio class="radio-right" :value="0">冷量表</ARadio>
|
|
|
|
- <ARadio class="radio-right" :value="1">流量表</ARadio>
|
|
|
|
- <ARadio :value="2">COP算法</ARadio>
|
|
|
|
|
|
+ <ARadio class="radio-right" :value="0">{{ $t('algorithmManage.thermometer') }}</ARadio>
|
|
|
|
+ <ARadio class="radio-right" :value="1">{{ $t('algorithmManage.flowChart') }}</ARadio>
|
|
|
|
+ <ARadio :value="2">{{ $t('algorithmManage.copAlgorithm') }}</ARadio>
|
|
</ARadioGroup>
|
|
</ARadioGroup>
|
|
</AModal>
|
|
</AModal>
|
|
- <AModal v-model:open="setOpen" title="设置" width="460px" :mask-closable="false" @ok="okSetConfirm">
|
|
|
|
|
|
+ <AModal
|
|
|
|
+ v-model:open="setOpen"
|
|
|
|
+ :title="t('common.settings')"
|
|
|
|
+ width="460px"
|
|
|
|
+ :mask-closable="false"
|
|
|
|
+ @ok="okSetConfirm"
|
|
|
|
+ >
|
|
<AFlex align="center" class="set-top set-bottom">
|
|
<AFlex align="center" class="set-top set-bottom">
|
|
- <div class="text">冷却总管回水温度设定值(℃) = 室外湿球温度 +</div>
|
|
|
|
|
|
+ <div class="text">
|
|
|
|
+ {{ $t('algorithmManage.backwaterTemperatureSettingValue') }} =
|
|
|
|
+ {{ $t('algorithmManage.outdoorWetBulbTemperature') }} +
|
|
|
|
+ </div>
|
|
|
|
|
|
<AInputNumber v-model:value="coolingPipeDynamicOffsetDisplay" :min="-99999.99999" :max="99999" />
|
|
<AInputNumber v-model:value="coolingPipeDynamicOffsetDisplay" :min="-99999.99999" :max="99999" />
|
|
</AFlex>
|
|
</AFlex>
|
|
<AFlex align="center" class="set-bottom">
|
|
<AFlex align="center" class="set-bottom">
|
|
- <div class="text set-text">初始值(℃)</div>
|
|
|
|
|
|
+ <div class="text set-text">{{ $t('algorithmManage.initialValue') }}(℃)</div>
|
|
<AInputNumber
|
|
<AInputNumber
|
|
class="set-input-width set-input-right"
|
|
class="set-input-width set-input-right"
|
|
v-model:value="coolingPipeDynamicSetDisplay"
|
|
v-model:value="coolingPipeDynamicSetDisplay"
|
|
:min="-99999.99999"
|
|
:min="-99999.99999"
|
|
:max="99999"
|
|
:max="99999"
|
|
/>
|
|
/>
|
|
- <div class="set-text text">死区(℃)</div>
|
|
|
|
|
|
+ <div class="set-text text">{{ $t('algorithmManage.deadZone') }}(℃)</div>
|
|
<AInputNumber
|
|
<AInputNumber
|
|
class="set-input-width"
|
|
class="set-input-width"
|
|
v-model:value="coolingPipeDynamicDeadZoneDisplay"
|
|
v-model:value="coolingPipeDynamicDeadZoneDisplay"
|
|
@@ -500,14 +535,14 @@ onMounted(() => {
|
|
</AFlex>
|
|
</AFlex>
|
|
|
|
|
|
<AFlex align="center" class="set-bottom">
|
|
<AFlex align="center" class="set-bottom">
|
|
- <div class="text lower-limit">下限(℃)</div>
|
|
|
|
|
|
+ <div class="text lower-limit">{{ $t('algorithmManage.lowerLimit') }}(℃)</div>
|
|
<AInputNumber
|
|
<AInputNumber
|
|
class="set-input-width set-input-right"
|
|
class="set-input-width set-input-right"
|
|
v-model:value="coolingPipeDynamicLowerDisplay"
|
|
v-model:value="coolingPipeDynamicLowerDisplay"
|
|
:min="-99999.99999"
|
|
:min="-99999.99999"
|
|
:max="99999"
|
|
:max="99999"
|
|
/>
|
|
/>
|
|
- <div class="set-text text">上限(℃)</div>
|
|
|
|
|
|
+ <div class="set-text text">{{ $t('algorithmManage.upperLimit') }}(℃)</div>
|
|
<AInputNumber
|
|
<AInputNumber
|
|
class="set-input-width"
|
|
class="set-input-width"
|
|
v-model:value="coolingPipeDynamicUpperDisplay"
|
|
v-model:value="coolingPipeDynamicUpperDisplay"
|