|
@@ -1,123 +1,595 @@
|
|
|
<template>
|
|
|
- <el-dialog width="70%" @open="opened" @closed="closed" :fullscreen="true" :show-close="true" class="dialogs">
|
|
|
- <template #title>
|
|
|
- <div class="showTitles currentShowTitles">
|
|
|
- <div class="titles">设置</div>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- <div class="body">
|
|
|
- <div class="title">
|
|
|
- <div :class="current === item.id ? 'title-onItem' : 'title-item'" v-for="(item, index) in stationList"
|
|
|
- :key="index" @click="handleChange(item.id)">
|
|
|
- {{ item.name }}
|
|
|
+ <el-dialog width="70%" @open="opened" @closed="closed" :fullscreen="true" :show-close="true" class="dialogs">
|
|
|
+ <template #title>
|
|
|
+ <div class="showTitles currentShowTitles">
|
|
|
+ <div class="titles">设置</div>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ <div class="body">
|
|
|
+ <div class="title">
|
|
|
+ <div :class="stationId === item.id ? 'title-onItem' : 'title-item'" v-for="(item, index) in stationList"
|
|
|
+ :key="index" @click="handleChange(item.id)">
|
|
|
+ {{ item.name }}
|
|
|
+ </div>
|
|
|
+ <div class="models">
|
|
|
+ <div class="models-left">
|
|
|
+ <div class="models-name">机型:</div>
|
|
|
+ <el-select class="inputs" v-model="modelId" placeholder="请选择" @change="getData()">
|
|
|
+ <el-option v-for="item in models" :key="item" :label="item" :value="item">
|
|
|
+ </el-option>
|
|
|
+ </el-select>
|
|
|
+ </div>
|
|
|
+ <div class="returns" @click="handleReturn()">恢复默认设置</div>
|
|
|
+ <div class="returns" style="background:#2574db;color:#b4bdc0;" @click="updateSettings()">保存</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="content">
|
|
|
+ <el-row :gutter="40">
|
|
|
+ <el-col :span="6">
|
|
|
+ <div class="mn">
|
|
|
+ <div class="mn-item" :data-active="actMnIndex === index" v-for="(item, index) in mnList"
|
|
|
+ @click="actMnIndex = index" :key="index">
|
|
|
+ <div class="mn-item-icon">
|
|
|
+ <img :src="item.icon" />
|
|
|
+ </div>
|
|
|
+ <div class="mn-item-fl">
|
|
|
+ <div class="mn-item-fl-tt">{{ item.title }}</div>
|
|
|
+ <div class="mn-item-fl-desc">{{ item.desc }}</div>
|
|
|
</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- <div class="content">
|
|
|
- <div class="models">
|
|
|
- <div class="models-left">
|
|
|
- <div class="models-name">机型:</div>
|
|
|
- <el-select class="inputs" v-model="selectValue" placeholder="请选择" @change="getData()">
|
|
|
- <el-option v-for="item in models" :key="item" :label="item" :value="item">
|
|
|
- </el-option>
|
|
|
- </el-select>
|
|
|
- </div>
|
|
|
- <div class="returns" @click="handleReturn()">恢复默认设置</div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="18">
|
|
|
+ <div class="panel">
|
|
|
+ <div class="pn-item" v-if="actMnIndex === 0">
|
|
|
+ <div class="pn-item-desc">
|
|
|
+ 启动校验:1、系统检测风机状态为无故障、非解缆、非维护模式。2、机舱温度超过10度。3、发电机绕组温度超过机舱温度。4、变浆系统进入准备状态89度。5、变流器切出本地。6、产生手动启动或自启动信号。7、两次启动时间差超过300s(手动模式除外)。
|
|
|
+ </div>
|
|
|
+ <div class="searchTitle">
|
|
|
+ <el-row :gutter="20" style="width: 96%">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">推荐启动</div>
|
|
|
+ <el-switch v-model="autoControl.start" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">推荐停机</div>
|
|
|
+ <el-switch v-model="autoControl.stop" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">推荐维护</div>
|
|
|
+ <el-switch v-model="autoControl.maintain" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">推荐取消维护</div>
|
|
|
+ <el-switch v-model="autoControl.unMaintain" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">超出AGC设定</div>
|
|
|
+ <el-switch v-model="autoControl.exceedAgc" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">限电状态下样板风机不控制</div>
|
|
|
+ <el-switch v-model="autoControl.notControlTemplate" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">限电状况下将健康指数最差的风机停机</div>
|
|
|
+ <el-switch v-model="autoControl.limitedPowerStop" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">推荐启动平均风速</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.startWindSpeed.value" :max="autoControl.startWindSpeed.maxValue" :min="autoControl.startWindSpeed.minValue" v-if="autoControl.startWindSpeed.enable" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ <el-switch v-model="autoControl.startWindSpeed.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">停机或维护平均风速</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.stopAndMaintainWindSpeed.value" :max="autoControl.stopAndMaintainWindSpeed.maxValue" :min="autoControl.stopAndMaintainWindSpeed.minValue" v-if="autoControl.stopAndMaintainWindSpeed.enable" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ <el-switch v-model="autoControl.stopAndMaintainWindSpeed.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">不推荐维护月份开始</div>
|
|
|
+ <el-date-picker type="month" v-model="autoControl.notMaintainStartTs" @change="funTimeStamp(autoControl.notMaintainStartTs, 'autoControl', 'notMaintainStartTs')"></el-date-picker>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">不推荐维护月份结束</div>
|
|
|
+ <el-date-picker type="month" v-model="autoControl.notMaintainEndTs" @change="funTimeStamp(autoControl.notMaintainEndTs, 'autoControl', 'notMaintainEndTs')"></el-date-picker>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">不推荐环境温度</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.notMaintainAmbientTemperature" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">打维护百分比</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.maintainPercentage.value" :max="autoControl.maintainPercentage.maxValue" :min="autoControl.maintainPercentage.minValue" :step="0.1" v-if="autoControl.maintainPercentage.enable" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ <el-switch v-model="autoControl.maintainPercentage.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">暴风风速(暴风状态下停机)</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.stormWindSpeed.value" v-if="autoControl.stormWindSpeed.enable" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ <el-switch v-model="autoControl.stormWindSpeed.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">齿轮箱高温停机</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.stopGearboxesTemperature.value" v-if="autoControl.stopGearboxesTemperature.enable" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ <el-switch v-model="autoControl.stopGearboxesTemperature.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">齿轮箱再启动温度</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.startGearboxesTemperature.value" v-if="autoControl.startGearboxesTemperature.enable" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ <el-switch v-model="autoControl.startGearboxesTemperature.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">重试次数</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoControl.countRetries" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">根据际控制指令推荐</div>
|
|
|
+ <el-switch v-model="autoControl.controlInstructions" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="warningTable" v-if="actMnIndex === 1">
|
|
|
+ <div class="searchTitle">
|
|
|
+ <el-row :gutter="20" style="width: 96%">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">是否启用</div>
|
|
|
+ <el-switch v-model="autoReset.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">复位重置次数</div>
|
|
|
+ <el-input-number :controls="false" v-model="autoReset.resetCount" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
</div>
|
|
|
- <div class="control">
|
|
|
- <div class="control-item">
|
|
|
- <div class="control-title">是否推荐启动:</div>
|
|
|
- <el-switch v-model="settingsControl.start" @change="updateSettings()">
|
|
|
- </el-switch>
|
|
|
- </div>
|
|
|
- <div class="control-item">
|
|
|
- <div class="control-title">是否推荐停机:</div>
|
|
|
- <el-switch v-model="settingsControl.stop" @change="updateSettings()">
|
|
|
- </el-switch>
|
|
|
- </div>
|
|
|
- <div class="control-item">
|
|
|
- <div class="control-title">是否推荐限电停机:</div>
|
|
|
- <el-switch v-model="settingsControl.limitedPowerStop" @change="updateSettings()">
|
|
|
- </el-switch>
|
|
|
- </div>
|
|
|
- <div class="control-item">
|
|
|
- <div class="control-title">是否推荐维护:</div>
|
|
|
- <el-switch v-model="settingsControl.maintain" @change="updateSettings()">
|
|
|
- </el-switch>
|
|
|
- </div>
|
|
|
- <div class="control-item">
|
|
|
- <div class="control-title">是否推荐取消维护:</div>
|
|
|
- <el-switch v-model="settingsControl.unMaintain" @change="updateSettings()">
|
|
|
- </el-switch>
|
|
|
- </div>
|
|
|
- <div class="control-item">
|
|
|
- <div class="control-title">是否推荐复位:</div>
|
|
|
- <el-switch v-model="settingsControl.reset" @change="updateSettings()">
|
|
|
- </el-switch>
|
|
|
- </div>
|
|
|
+ <div class="teble-buttons" v-show="autoReset.enable">
|
|
|
+ <div class="button" @click="toggleRowExpansionAll(true,'dataAutoResetList',alarminfos)">全部展开</div>
|
|
|
+ <div class="button" @click="toggleRowExpansionAll(false,'dataAutoResetList',alarminfos)">全部收回</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div class="warningTable" v-if="settingsControl.reset">
|
|
|
+ <!-- default-expand-all -->
|
|
|
+ <el-table :data="alarminfos" v-show="autoReset.enable" row-key="id" border ref="dataAutoResetList"
|
|
|
+ :tree-props="{ children: 'children', hasChildren: false }" height="70vh"
|
|
|
+ style="background-color: #000000;border: 1px solid #000000;" :header-cell-style="{
|
|
|
+ background: 'rgb(30,30,30)',
|
|
|
+ color: 'rgb(220,220,220)',
|
|
|
+ padding: '4px',
|
|
|
+ fontSize: '14px',
|
|
|
+ 'border-bottom': 'solid 1px rgba(77, 77, 77, 1)',
|
|
|
+ }" :cell-style="{
|
|
|
+ height: '40px',
|
|
|
+ background: 'rgb(30,30,30)',
|
|
|
+ color: 'rgb(220,220,220)',
|
|
|
+ padding: '3px',
|
|
|
+ fontSize: '12px',
|
|
|
+ 'border-bottom': '1px solid #000000',
|
|
|
+}">
|
|
|
+ <el-table-column prop="name" label="名称" sortable width="200" align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column prop="stationId" label="风场" sortable>
|
|
|
+ </el-table-column> -->
|
|
|
+ <!-- <el-table-column prop="modelId" label="机型" sortable>
|
|
|
+ </el-table-column> -->
|
|
|
+ <el-table-column prop="lastUpdateTime" label="故障触发时间" align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column prop="rank" label="故障等级" sortable>
|
|
|
+ </el-table-column> -->
|
|
|
+ <el-table-column prop="alertText" label="故障描述" align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="是否不可复位" width="180" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>
|
|
|
+ <el-switch @change="handleSwitchChange(scope.row)" v-model="scope.row.notResettable">
|
|
|
+ </el-switch>
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <div class="pn-item" v-if="actMnIndex === 2">
|
|
|
+ <!-- <div class="pn-item-desc">
|
|
|
+ 启动校验:1、系统检测风机状态为无故障、非解缆、非维护模式。2、机舱温度超过10度。3、发电机绕组温度超过机舱温度。4、变浆系统进入准备状态89度。5、变流器切出本地。6、产生手动启动或自启动信号。7、两次启动时间差超过300s(手动模式除外)。
|
|
|
+ </div> -->
|
|
|
+ <div class="searchTitle">
|
|
|
+ <el-row :gutter="20" style="width: 96%">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">是否启用</div>
|
|
|
+ <el-switch v-model="optimizeControl.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">风功率预测未来值</div>
|
|
|
+ <el-switch v-model="optimizeControl.powerForecast" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">自动停机挂牌</div>
|
|
|
+ <el-switch v-model="optimizeControl.autoStopAndLock" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">风功率预测换算单台机组</div>
|
|
|
+ <el-switch v-model="optimizeControl.powerForecastSingleUnit" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">灵敏度</div>
|
|
|
+ <el-input-number v-model="optimizeControl.sensitivity" :controls="false" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">实际切入风速</div>
|
|
|
+ <el-switch v-model="optimizeControl.actualInputWindSpeed" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">限电停机(限电情况下,启用健康状态好的风机)</div>
|
|
|
+ <el-switch v-model="optimizeControl.limitedPowerStop" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">单台设备小风区间风速趋势</div>
|
|
|
+ <el-switch v-model="optimizeControl.windSpeedTrendsSingleUnit" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">AGC有功设定与实发功率偏差值设定</div>
|
|
|
+ <el-input-number v-model="optimizeControl.agcDeviationValue" :controls="false" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">提前启动风速</div>
|
|
|
+ <el-input-number v-model="optimizeControl.advanceStartWindSpeed" :controls="false" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">提前停机风速</div>
|
|
|
+ <el-input-number v-model="optimizeControl.advanceStopWindSpeed" :controls="false" class="inputs" placeholder="请输入">
|
|
|
+ </el-input-number>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="warningTable" v-if="actMnIndex === 3">
|
|
|
<div class="teble-buttons">
|
|
|
- <div class="button" @click="toggleRowExpansionAll(true)">全部展开</div>
|
|
|
- <div class="button" @click="toggleRowExpansionAll(false)">全部收回</div>
|
|
|
+ <div class="search" style="color: white;width: 200px;margin-top: 0px; flex: 0 0 200px;">
|
|
|
+ <div class="date">是否启用</div>
|
|
|
+ <el-switch v-model="earlyWarningStop.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ <div class="button" v-show="earlyWarningStop.enable" @click="toggleRowExpansionAll(true,'dataEarlyWarningStopList',alertInfos)">全部展开</div>
|
|
|
+ <div class="button" v-show="earlyWarningStop.enable" @click="toggleRowExpansionAll(false,'dataEarlyWarningStopList',alertInfos)">全部收回</div>
|
|
|
</div>
|
|
|
- <el-table :data="alertInfo" row-key="id" border default-expand-all ref="dataTreeList"
|
|
|
- :tree-props="{ children: 'children', hasChildren: false }" height="70vh"
|
|
|
- style="background-color: #000000;border: 1px solid #000000;" :header-cell-style="{
|
|
|
- background: 'rgb(30,30,30)',
|
|
|
- color: 'rgb(220,220,220)',
|
|
|
- padding: '4px',
|
|
|
- fontSize: '14px',
|
|
|
- 'border-bottom': 'solid 1px rgba(77, 77, 77, 1)',
|
|
|
- }" :cell-style="{
|
|
|
- height: '40px',
|
|
|
- background: 'rgb(30,30,30)',
|
|
|
- color: 'rgb(220,220,220)',
|
|
|
- padding: '3px',
|
|
|
- fontSize: '12px',
|
|
|
- 'border-bottom': '1px solid #000000',
|
|
|
+ <el-table :data="alertInfos" v-show="earlyWarningStop.enable" row-key="id" border ref="dataEarlyWarningStopList"
|
|
|
+ :tree-props="{ children: 'children', hasChildren: false }" height="70vh"
|
|
|
+ style="background-color: #000000;border: 1px solid #000000;" :header-cell-style="{
|
|
|
+ background: 'rgb(30,30,30)',
|
|
|
+ color: 'rgb(220,220,220)',
|
|
|
+ padding: '4px',
|
|
|
+ fontSize: '14px',
|
|
|
+ 'border-bottom': 'solid 1px rgba(77, 77, 77, 1)',
|
|
|
+ }" :cell-style="{
|
|
|
+ height: '40px',
|
|
|
+ background: 'rgb(30,30,30)',
|
|
|
+ color: 'rgb(220,220,220)',
|
|
|
+ padding: '3px',
|
|
|
+ fontSize: '12px',
|
|
|
+ 'border-bottom': '1px solid #000000',
|
|
|
}">
|
|
|
- <el-table-column prop="name" label="名称" sortable width="200" align="center">
|
|
|
- </el-table-column>
|
|
|
- <!-- <el-table-column prop="stationId" label="风场" sortable>
|
|
|
- </el-table-column> -->
|
|
|
- <!-- <el-table-column prop="modelId" label="机型" sortable>
|
|
|
- </el-table-column> -->
|
|
|
- <el-table-column prop="lastUpdateTime" label="故障触发时间" align="center">
|
|
|
- </el-table-column>
|
|
|
- <!-- <el-table-column prop="rank" label="故障等级" sortable>
|
|
|
- </el-table-column> -->
|
|
|
- <el-table-column prop="alertText" label="故障描述" align="center">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column label="是否不可复位" width="180" align="center">
|
|
|
- <template #default="scope">
|
|
|
- <span>
|
|
|
- <el-switch @change="handleSwitchChange(scope.row)" v-model="scope.row.notResettable">
|
|
|
- </el-switch>
|
|
|
- </span>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
+ <el-table-column prop="name" label="名称" sortable width="200" align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column prop="stationId" label="风场" sortable>
|
|
|
+ </el-table-column> -->
|
|
|
+ <!-- <el-table-column prop="modelId" label="机型" sortable>
|
|
|
+ </el-table-column> -->
|
|
|
+ <el-table-column prop="rank" label="报警级别" align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <!-- <el-table-column prop="rank" label="故障等级" sortable>
|
|
|
+ </el-table-column> -->
|
|
|
+ <el-table-column prop="alertText" label="故障描述" align="center">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column label="是否停机" width="180" align="center">
|
|
|
+ <template #default="scope">
|
|
|
+ <span>
|
|
|
+ <el-switch @change="handleSwitchChange(scope.row, 'earlyWarningStop')" v-model="scope.row.stop">
|
|
|
+ </el-switch>
|
|
|
+ </span>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
</el-table>
|
|
|
+ </div>
|
|
|
+ <div class="pn-item" v-if="actMnIndex === 4">
|
|
|
+ <div class="searchTitle">
|
|
|
+ <el-row :gutter="20" style="width: 96%">
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">是否启用</div>
|
|
|
+ <el-switch v-model="artificialIntelligence.enable" placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联启动前10分钟样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联停机前10分钟样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联启动后10分钟样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联停机后10分钟样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联启动失败样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联停机失败样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">关联AGC限电样本</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <div class="search">
|
|
|
+ <div class="date">神经网络模型</div>
|
|
|
+ <el-switch placeholder="请输入">
|
|
|
+ </el-switch>
|
|
|
+ </div>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import api from "api/index";
|
|
|
+import mnIcon1 from '../assets/img/RecommendedArea/background.png'
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
stationList: [],
|
|
|
- current: "",
|
|
|
models: [],
|
|
|
- selectValue: "",
|
|
|
settingsControl: {},
|
|
|
- alertInfo: [],
|
|
|
+ actMnIndex: 0,
|
|
|
+ mnList: [
|
|
|
+ {
|
|
|
+ title: '自动控制',
|
|
|
+ desc: '以AGC有功控制指令为主要素,结合实时风速,风机实时状态,环境温度等,自动调整风电机组控制策略,避免机组小风期间自耗自损,大风时及时切入并网,及时发电。',
|
|
|
+ icon: mnIcon1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '自动复位',
|
|
|
+ desc: '风电机组发生故障后,复位夜市消缺手段之一,利用自动复位功能,筛选可以复位消缺的故障,以达到提高机组可用小时的目的。',
|
|
|
+ icon: mnIcon1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '优化控制',
|
|
|
+ desc: '在自动控制的基础上,考虑提高风能利用率,结合功率预测数据和计划检修安排,提起预判风资源情况下,优化控制,并监测AGC设定于实际出力偏差,超出范围及时调整控制策略,保证AGC曲线运行。',
|
|
|
+ icon: mnIcon1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '预警停机',
|
|
|
+ desc: '根据风机存在的隐患,判断即将发生故障的影响程度,如果危害程度高,控制停机并提醒运行人员,生成缺陷单。',
|
|
|
+ icon: mnIcon1
|
|
|
+ },
|
|
|
+ {
|
|
|
+ title: '人工智能',
|
|
|
+ desc: '利用神经网络算法,调整控制模型,模型调优依据控制策略评价指标。',
|
|
|
+ icon: mnIcon1
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ stationId: 'MHS_FDC',
|
|
|
+ modelId: '',
|
|
|
+ dataId: '', //当前数据id
|
|
|
+ alarminfos: [], //自动复位
|
|
|
+ alertInfos: [], //预警停机
|
|
|
+ autoControl: { //自动控制
|
|
|
+ start: true,
|
|
|
+ stop: true,
|
|
|
+ maintain: true,
|
|
|
+ unMaintain: true,
|
|
|
+ exceedAgc: true,
|
|
|
+ notControlTemplate: true,
|
|
|
+ limitedPowerStop: false,
|
|
|
+ startWindSpeed: {
|
|
|
+ value: 3.5,
|
|
|
+ enable: false,
|
|
|
+ maxValue: 5.0,
|
|
|
+ minValue: 2.5
|
|
|
+ },
|
|
|
+ stopAndMaintainWindSpeed: {
|
|
|
+ value: 2.5,
|
|
|
+ enable: false,
|
|
|
+ maxValue: 3.5,
|
|
|
+ minValue: 1.0
|
|
|
+ },
|
|
|
+ notMaintainStartTs: 1669824000000,
|
|
|
+ notMaintainEndTs: 1678809600000,
|
|
|
+ notMaintainAmbientTemperature: 0.0,
|
|
|
+ maintainPercentage: {
|
|
|
+ value: 0.3,
|
|
|
+ enable: true,
|
|
|
+ maxValue: 1.0,
|
|
|
+ minValue: 0.0
|
|
|
+ },
|
|
|
+ stormWindSpeed: {
|
|
|
+ value: 25.0,
|
|
|
+ enable: false,
|
|
|
+ maxValue: 0.0,
|
|
|
+ minValue: 0.0
|
|
|
+ },
|
|
|
+ stopGearboxesTemperature: {
|
|
|
+ value: 60.0,
|
|
|
+ enable: false,
|
|
|
+ maxValue: 0.0,
|
|
|
+ minValue: 0.0
|
|
|
+ },
|
|
|
+ startGearboxesTemperature: {
|
|
|
+ value: 85.0,
|
|
|
+ enable: false,
|
|
|
+ maxValue: 0.0,
|
|
|
+ minValue: 0.0
|
|
|
+ },
|
|
|
+ countRetries: 2.0,
|
|
|
+ controlInstructions: true,
|
|
|
+ maintainable: false
|
|
|
+ },
|
|
|
+ autoReset: { //自动复位
|
|
|
+ enable: false,
|
|
|
+ resetCount: 1,
|
|
|
+ alertInfo: null,
|
|
|
+ prohibitResetUniformCodes: [],
|
|
|
+ prohibitResetParts: [],
|
|
|
+ possibleReset: false
|
|
|
+ },
|
|
|
+ optimizeControl: { //优化控制
|
|
|
+ enable: true,
|
|
|
+ powerForecast: true,
|
|
|
+ autoStopAndLock: false,
|
|
|
+ powerForecastSingleUnit: false,
|
|
|
+ sensitivity: 3.0,
|
|
|
+ actualInputWindSpeed: true,
|
|
|
+ limitedPowerStop: false,
|
|
|
+ windSpeedTrendsSingleUnit: true,
|
|
|
+ agcDeviationValue: 3.0,
|
|
|
+ advanceStartWindSpeed: 3.0,
|
|
|
+ advanceStopWindSpeed: 2.5
|
|
|
+ },
|
|
|
+ earlyWarningStop: { //预警停机
|
|
|
+ enable: false,
|
|
|
+ alertInfo: null,
|
|
|
+ stopUniformCodes: [],
|
|
|
+ prohibitResetParts: []
|
|
|
+ },
|
|
|
+ artificialIntelligence: { //人工智能
|
|
|
+ enable: false
|
|
|
+ }
|
|
|
};
|
|
|
},
|
|
|
mounted() { },
|
|
|
methods: {
|
|
|
+ //时间change为时间戳
|
|
|
+ funTimeStamp(val, parent, key){
|
|
|
+ this[parent][key] = new Date(val).getTime()
|
|
|
+ },
|
|
|
opened() {
|
|
|
let stationList = [];
|
|
|
let stations = this.$store.state.stationList;
|
|
@@ -127,58 +599,150 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
this.stationList = stationList;
|
|
|
- this.current = stationList[0].id;
|
|
|
+ this.stationId = stationList[0].id;
|
|
|
this.getStationModels(true)
|
|
|
},
|
|
|
handleChange(val) {
|
|
|
- this.current = val;
|
|
|
+ this.stationId = val;
|
|
|
this.tableData = []
|
|
|
this.pagenum = 1
|
|
|
this.getStationModels()
|
|
|
},
|
|
|
- getStationModels(flag) {
|
|
|
+ getStationModels() {
|
|
|
api.getStationModels({
|
|
|
- stationid: this.current
|
|
|
+ stationid: this.stationId
|
|
|
}).then(res => {
|
|
|
if (res.data) {
|
|
|
this.models = res.data
|
|
|
- this.selectValue = res.data[0]
|
|
|
- this.getData(flag);
|
|
|
+ this.modelId = res.data[0]
|
|
|
+ this.getData();
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
- getData(flag) {
|
|
|
- api.getSettings({
|
|
|
- stationId: this.current,
|
|
|
- modelId: this.selectValue,
|
|
|
+ async getData() {
|
|
|
+ await api.getSettings({
|
|
|
+ stationId: this.stationId,
|
|
|
+ modelId: this.modelId,
|
|
|
}).then(res => {
|
|
|
if (res.data) {
|
|
|
- this.alertInfo = []
|
|
|
- this.settingsControl = res.data.settings
|
|
|
- if (flag) {
|
|
|
- this.alertInfo = res.data.alertInfo
|
|
|
- } else {
|
|
|
- console.log(this.alertInfo);
|
|
|
- setTimeout(() => {
|
|
|
- this.alertInfo = res.data.alertInfo
|
|
|
- }, 100);
|
|
|
+ this.autoControl = {...this.autoControl, ...res.data.autoControl}
|
|
|
+ this.autoReset = {...this.autoReset, ...res.data.autoReset}
|
|
|
+ this.optimizeControl = {...this.optimizeControl, ...res.data.optimizeControl}
|
|
|
+ this.earlyWarningStop = {...this.earlyWarningStop, ...res.data.earlyWarningStop}
|
|
|
+ this.artificialIntelligence = {...this.artificialIntelligence, ...res.data.artificialIntelligence}
|
|
|
+ this.dataId = res.data.id
|
|
|
+ }
|
|
|
+ })
|
|
|
+ api.warningSetting({
|
|
|
+ stationId: this.stationId,
|
|
|
+ modelId: this.modelId,
|
|
|
+ }).then(res => {
|
|
|
+ if(res.data){
|
|
|
+ this.alarminfos = res.data
|
|
|
+ if(res.data?.length){
|
|
|
+ this.autoReset.prohibitResetUniformCodes = []
|
|
|
+ this.autoReset.prohibitResetParts = []
|
|
|
+ for(const data of res.data){
|
|
|
+ if(!data.modelId){
|
|
|
+ if (data.notResettable) {
|
|
|
+ data.children.forEach(item => {
|
|
|
+ item.notResettable = true
|
|
|
+ const childrenAutoFindIndex = this.autoReset.prohibitResetUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenAutoFindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetUniformCodes.push(item.uniformCode)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const autoProhibitResetPartsFindIndex = this.autoReset.prohibitResetParts.findIndex(o => o === data.id)
|
|
|
+ if(autoProhibitResetPartsFindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetParts.push(data.id)
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ data.children.forEach(item => {
|
|
|
+ if(item.notResettable){
|
|
|
+ const childrenAutoFindIndex = this.autoReset.prohibitResetUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenAutoFindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetUniformCodes.push(item.uniformCode)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ const autoResetfindIndex = this.autoReset.prohibitResetUniformCodes.findIndex(o => o === data.uniformCode)
|
|
|
+ if (data.notResettable) {
|
|
|
+ if(autoResetfindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetUniformCodes.push(data.uniformCode)
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- // this.toggleRowExpansionAll(this.alertInfo, true)
|
|
|
+ }
|
|
|
}
|
|
|
+ }
|
|
|
+ })
|
|
|
+ api.costumeSetting({
|
|
|
+ stationId: this.stationId,
|
|
|
+ modelId: this.modelId,
|
|
|
+ }).then(res => {
|
|
|
+ if(res.data){
|
|
|
+ this.alertInfos = res.data
|
|
|
+ if(res.data?.length){
|
|
|
+ this.earlyWarningStop.stopUniformCodes = []
|
|
|
+ this.earlyWarningStop.prohibitResetParts = []
|
|
|
+ for(const data of res.data){
|
|
|
+ if(!data.modelId){
|
|
|
+ if (data.stop) {
|
|
|
+ data.children.forEach(item => {
|
|
|
+ item.stop = true
|
|
|
+ const childrenAutoFindIndex = this.earlyWarningStop.stopUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenAutoFindIndex == -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.push(item.uniformCode)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ const autoProhibitResetPartsFindIndex = this.earlyWarningStop.prohibitResetParts.findIndex(o => o === data.id)
|
|
|
+ if(autoProhibitResetPartsFindIndex == -1){
|
|
|
+ this.earlyWarningStop.prohibitResetParts.push(data.id)
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ data.children.forEach(item => {
|
|
|
+ if(item.stop){
|
|
|
+ const childrenAutoFindIndex = this.earlyWarningStop.stopUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenAutoFindIndex == -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.push(item.uniformCode)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ const autoResetfindIndex = this.earlyWarningStop.stopUniformCodes.findIndex(o => o === data.uniformCode)
|
|
|
+ if (data.notResettable) {
|
|
|
+ if(autoResetfindIndex == -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.push(data.uniformCode)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
})
|
|
|
},
|
|
|
- toggleRowExpansionAll(isExpansion) {
|
|
|
- this.alertInfo.forEach((item) => {
|
|
|
- this.$refs.dataTreeList.toggleRowExpansion(item, isExpansion);
|
|
|
+ toggleRowExpansionAll(isExpansion,refKey,data) {
|
|
|
+ data.forEach((item) => {
|
|
|
+ this.$refs[refKey].toggleRowExpansion(item, isExpansion);
|
|
|
});
|
|
|
},
|
|
|
updateSettings() {
|
|
|
- api.updateSettings(this.settingsControl).then(res => {
|
|
|
- if (res.data.message === 'success') {
|
|
|
+ api.updateSettings({
|
|
|
+ stationId: this.stationId,
|
|
|
+ modelId: this.modelId,
|
|
|
+ id: this.dataId,
|
|
|
+ autoControl: this.autoControl,
|
|
|
+ autoReset: this.autoReset,
|
|
|
+ optimizeControl:this.optimizeControl,
|
|
|
+ earlyWarningStop: this.earlyWarningStop,
|
|
|
+ artificialIntelligence:this.artificialIntelligence
|
|
|
+ }).then(res => {
|
|
|
+ if (res.data.code === 200) {
|
|
|
this.$notify({
|
|
|
- title: "控制",
|
|
|
+ title: "设置",
|
|
|
message: '修改成功',
|
|
|
type: "success",
|
|
|
position: "bottom-right",
|
|
@@ -186,36 +750,92 @@ export default {
|
|
|
duration: 3000,
|
|
|
});
|
|
|
this.getData()
|
|
|
+ }else{
|
|
|
+ this.$notify({
|
|
|
+ title: "设置",
|
|
|
+ message: res.data.message,
|
|
|
+ type: "warning",
|
|
|
+ position: "bottom-right",
|
|
|
+ offset: 60,
|
|
|
+ duration: 3000,
|
|
|
+ });
|
|
|
}
|
|
|
})
|
|
|
},
|
|
|
- handleSwitchChange(data) {
|
|
|
+ handleSwitchChange(data, type='autoReset') {
|
|
|
+ if(type==='autoReset'){
|
|
|
if (!data.modelId) {
|
|
|
+ const autoProhibitResetPartsFindIndex = this.autoReset.prohibitResetParts.findIndex(o => o === data.id)
|
|
|
if (data.notResettable) {
|
|
|
data.children.forEach(item => {
|
|
|
item.notResettable = true
|
|
|
- this.settingsControl.prohibitResetUniformCodes.push(item.uniformCode)
|
|
|
+ const childrenAutoFindIndex = this.autoReset.prohibitResetUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenAutoFindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetUniformCodes.push(item.uniformCode)
|
|
|
+ }
|
|
|
})
|
|
|
- this.settingsControl.prohibitResetParts.push(data.id)
|
|
|
+ if(autoProhibitResetPartsFindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetParts.push(data.id)
|
|
|
+ }
|
|
|
} else {
|
|
|
- for (var i = 0; i < this.settingsControl.prohibitResetParts.length; i++) {
|
|
|
- if (this.settingsControl.prohibitResetParts[i] == data.id) {
|
|
|
- this.settingsControl.prohibitResetParts.splice(i, 1);
|
|
|
- }
|
|
|
+ data.children.forEach(item => {
|
|
|
+ item.notResettable = false
|
|
|
+ })
|
|
|
+ if(autoProhibitResetPartsFindIndex != -1){
|
|
|
+ this.autoReset.prohibitResetParts.splice(autoProhibitResetPartsFindIndex, 1)
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
+ const autoResetfindIndex = this.autoReset.prohibitResetUniformCodes.findIndex(o => o === data.uniformCode)
|
|
|
if (data.notResettable) {
|
|
|
- this.settingsControl.prohibitResetUniformCodes.push(data.uniformCode)
|
|
|
+ if(autoResetfindIndex == -1){
|
|
|
+ this.autoReset.prohibitResetUniformCodes.push(data.uniformCode)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if(autoResetfindIndex != -1){
|
|
|
+ this.autoReset.prohibitResetUniformCodes.splice(autoResetfindIndex, 1)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ if (!data.modelId) {
|
|
|
+ const prohibitResetPartsFindIndex = this.earlyWarningStop.prohibitResetParts.findIndex(o => o === data.id)
|
|
|
+ if (data.stop) {
|
|
|
+ data.children.forEach(item => {
|
|
|
+ item.stop = true
|
|
|
+ const childrenFindIndex = this.earlyWarningStop.stopUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenFindIndex == -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.push(item.uniformCode)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if(prohibitResetPartsFindIndex == -1){
|
|
|
+ this.earlyWarningStop.prohibitResetParts.push(data.id)
|
|
|
+ }
|
|
|
} else {
|
|
|
- for (var i = 0; i < this.settingsControl.prohibitResetUniformCodes.length; i++) {
|
|
|
- if (this.settingsControl.prohibitResetUniformCodes[i] == data.uniformCode) {
|
|
|
- this.settingsControl.prohibitResetUniformCodes.splice(i, 1);
|
|
|
+ data.children.forEach(item => {
|
|
|
+ item.stop = false
|
|
|
+ const childrenFindIndex = this.earlyWarningStop.stopUniformCodes.findIndex(o => o === item.uniformCode)
|
|
|
+ if(childrenFindIndex != -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.splice(childrenFindIndex, 1)
|
|
|
}
|
|
|
+ })
|
|
|
+ if(prohibitResetPartsFindIndex != -1){
|
|
|
+ this.earlyWarningStop.prohibitResetParts.splice(prohibitResetPartsFindIndex, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ const findIndex = this.earlyWarningStop.stopUniformCodes.findIndex(o => o === data.uniformCode)
|
|
|
+ if (data.stop) {
|
|
|
+ if(findIndex == -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.push(data.uniformCode)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if(findIndex != -1){
|
|
|
+ this.earlyWarningStop.stopUniformCodes.splice(findIndex, 1)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- this.updateSettings()
|
|
|
+ }
|
|
|
},
|
|
|
handleReturn(){
|
|
|
|
|
@@ -225,11 +845,11 @@ export default {
|
|
|
type: 'warning'
|
|
|
}).then(() => {
|
|
|
api.returnSetting({
|
|
|
- stationId: this.current,
|
|
|
- modelId: this.selectValue,
|
|
|
+ stationId: this.stationId,
|
|
|
+ modelId: this.modelId,
|
|
|
}).then(res =>{
|
|
|
this.$notify({
|
|
|
- title: "控制",
|
|
|
+ title: "设置",
|
|
|
message: '修改成功',
|
|
|
type: "success",
|
|
|
position: "bottom-right",
|
|
@@ -255,127 +875,248 @@ export default {
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|
|
|
.body {
|
|
|
- background-color: #000000;
|
|
|
- height: 89vh;
|
|
|
- width: 102%;
|
|
|
- margin-left: -1%;
|
|
|
- margin-top: -40px;
|
|
|
+ background-color: #000000;
|
|
|
+ height: 89vh;
|
|
|
+ width: 102%;
|
|
|
+ margin-left: -1%;
|
|
|
+ margin-top: -40px;
|
|
|
}
|
|
|
|
|
|
.title {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ margin-left: 3vw;
|
|
|
+ padding-top: 8px;
|
|
|
+ position: absolute;
|
|
|
+ width: 100%;
|
|
|
+ background-color: #000000;
|
|
|
+ padding-bottom: 10px;
|
|
|
+
|
|
|
+ .title-item {
|
|
|
+ background-color: #242424;
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 8px 27px 7px 25px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #b4bdc0;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .title-onItem {
|
|
|
+ background-color: rgba(37, 116, 219, 1);
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 8px 27px 7px 25px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #b4bdc0;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.models {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+
|
|
|
+ .models-left {
|
|
|
display: flex;
|
|
|
flex-direction: row;
|
|
|
align-items: center;
|
|
|
- margin-left: 3vw;
|
|
|
- padding-top: 8px;
|
|
|
- position: absolute;
|
|
|
- width: 100%;
|
|
|
- background-color: #000000;
|
|
|
- padding-bottom: 10px;
|
|
|
-
|
|
|
- .title-item {
|
|
|
- background-color: #242424;
|
|
|
- border-radius: 4px;
|
|
|
- padding: 8px 27px 7px 25px;
|
|
|
- font-size: 14px;
|
|
|
- color: #b4bdc0;
|
|
|
- margin-right: 10px;
|
|
|
- }
|
|
|
|
|
|
- .title-onItem {
|
|
|
- background-color: rgba(37, 116, 219, 1);
|
|
|
- border-radius: 4px;
|
|
|
- padding: 8px 27px 7px 25px;
|
|
|
- font-size: 14px;
|
|
|
- color: #b4bdc0;
|
|
|
- margin-right: 10px;
|
|
|
+ .models-name {
|
|
|
+ margin-right: 10px;
|
|
|
+ color: #ffffff;
|
|
|
+ font-size: 17px;
|
|
|
}
|
|
|
+ }
|
|
|
+
|
|
|
+ .returns {
|
|
|
+ background-color: #666666;
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 8px 15px 7px 15px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #ffffff;
|
|
|
+ cursor: pointer;
|
|
|
+ margin-right: 20px;
|
|
|
+ margin-left: 10px;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.content {
|
|
|
- margin-left: 3vw;
|
|
|
- padding-top: 7vh;
|
|
|
- width: 100%;
|
|
|
-
|
|
|
- .models {
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- align-items: center;
|
|
|
- justify-content: space-between;
|
|
|
- .models-left{
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- align-items: center;
|
|
|
- .models-name {
|
|
|
- margin-right: 10px;
|
|
|
- color: #ffffff;
|
|
|
- font-size: 17px;
|
|
|
- }
|
|
|
- }
|
|
|
- .returns{
|
|
|
- background-color: #666666;
|
|
|
- border-radius: 4px;
|
|
|
- padding: 8px 15px 7px 15px;
|
|
|
- font-size: 14px;
|
|
|
- color: #ffffff;
|
|
|
- margin-right: 50px;
|
|
|
- }
|
|
|
- }
|
|
|
+ margin-left: 3vw;
|
|
|
+ padding-top: 7vh;
|
|
|
+ width: 100%;
|
|
|
}
|
|
|
|
|
|
.control {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ margin-top: 15px;
|
|
|
+
|
|
|
+ .control-item {
|
|
|
display: flex;
|
|
|
flex-direction: row;
|
|
|
align-items: center;
|
|
|
- margin-top: 15px;
|
|
|
-
|
|
|
- .control-item {
|
|
|
- display: flex;
|
|
|
- flex-direction: row;
|
|
|
- align-items: center;
|
|
|
- margin-right: 30px;
|
|
|
-
|
|
|
- .control-title {
|
|
|
- margin-right: 10px;
|
|
|
- color: #ffffff;
|
|
|
- font-size: 17px;
|
|
|
- }
|
|
|
+ margin-right: 30px;
|
|
|
+
|
|
|
+ .control-title {
|
|
|
+ margin-right: 10px;
|
|
|
+ color: #ffffff;
|
|
|
+ font-size: 17px;
|
|
|
}
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.inputs {
|
|
|
- width: 150px !important;
|
|
|
+ width: 150px !important;
|
|
|
}
|
|
|
|
|
|
.el-switch {
|
|
|
- width: 50px !important;
|
|
|
+ width: 50px !important;
|
|
|
}
|
|
|
|
|
|
.warningTable {
|
|
|
- margin-left: 58px;
|
|
|
- margin-top: 20px;
|
|
|
- width: 96%;
|
|
|
+ width: 96%;
|
|
|
}
|
|
|
|
|
|
.el-table--border::after,
|
|
|
.el-table--group::after,
|
|
|
.el-table::before {
|
|
|
- background-color: #000000 !important;
|
|
|
+ background-color: #000000 !important;
|
|
|
}
|
|
|
|
|
|
.teble-buttons {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ margin: 10px 0;
|
|
|
+
|
|
|
+ .button {
|
|
|
+ background-color: rgba(37, 116, 219, 1);
|
|
|
+ border-radius: 4px;
|
|
|
+ padding: 8px 27px 7px 25px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: #b4bdc0;
|
|
|
+ margin-right: 10px;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.mn {
|
|
|
+ overflow-y: auto;
|
|
|
+ height: 82vh;
|
|
|
+ overflow-x: hidden;
|
|
|
+
|
|
|
+ &-item {
|
|
|
+ // width: 100%;
|
|
|
+ min-height: 118px;
|
|
|
+ padding: 20px;
|
|
|
display: flex;
|
|
|
- flex-direction: row;
|
|
|
- align-items: center;
|
|
|
- margin: 10px 0;
|
|
|
-
|
|
|
- .button {
|
|
|
- background-color: rgba(37, 116, 219, 1);
|
|
|
- border-radius: 4px;
|
|
|
- padding: 8px 27px 7px 25px;
|
|
|
- font-size: 14px;
|
|
|
- color: #b4bdc0;
|
|
|
- margin-right: 10px;
|
|
|
+ border-radius: 8px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: all ease .2s;
|
|
|
+ border-bottom: 2px solid black;
|
|
|
+
|
|
|
+ &-icon {
|
|
|
+ height: 60px;
|
|
|
+ width: 60px;
|
|
|
+ border-radius: 50%;
|
|
|
+ overflow: hidden;
|
|
|
+ flex: 0 0 60px;
|
|
|
+
|
|
|
+ img {
|
|
|
+ width: 100%;
|
|
|
+ height: 100%;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &-fl {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+
|
|
|
+ &-tt {
|
|
|
+ padding-top: 10px;
|
|
|
+ font-size: 18px;
|
|
|
+ color: white;
|
|
|
+ }
|
|
|
+
|
|
|
+ &-desc {
|
|
|
+ padding-top: 20px;
|
|
|
+ font-size: 12px;
|
|
|
+ color: grey;
|
|
|
+ white-space: wrap;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &:hover {
|
|
|
+ background: rgba(255, 255, 255, 0.3);
|
|
|
+
|
|
|
+ .mn-item-fl-desc {
|
|
|
+ color: white;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ &[data-active='true'] {
|
|
|
+ background: rgba(255, 255, 255, 0.3);
|
|
|
+
|
|
|
+ .mn-item-fl-desc {
|
|
|
+ color: white;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.panel {
|
|
|
+ height: 82vh;
|
|
|
+ overflow-x: hidden;
|
|
|
+ overflow-y: auto;
|
|
|
+
|
|
|
+ .pn-item {
|
|
|
+ &-desc {
|
|
|
+ width: 96%;
|
|
|
+ line-height: 2;
|
|
|
+ color: rgba(255, 255, 255, 0.75);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+.searchTitle {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ // margin-left: 3vw;
|
|
|
+ flex-wrap: wrap;
|
|
|
+ padding-top: 10px;
|
|
|
+ color: #ffffff;
|
|
|
+}
|
|
|
+
|
|
|
+.search {
|
|
|
+ display: flex;
|
|
|
+ flex-direction: row;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ margin-right: 50px;
|
|
|
+ margin-top: 20px;
|
|
|
+ height: 40px;
|
|
|
+ flex: 1 1 200px;
|
|
|
+ white-space: nowrap;
|
|
|
+}
|
|
|
+
|
|
|
+.date {
|
|
|
+ margin-right: 10px;
|
|
|
+ font-size: 16px;
|
|
|
+}
|
|
|
+
|
|
|
+.inputs {
|
|
|
+ border: none;
|
|
|
+ width: 174px !important;
|
|
|
+ background-color: #292929;
|
|
|
+ height: 40px;
|
|
|
+ color: #ffffff;
|
|
|
+}
|
|
|
+/deep/ .el-input-number__decrease, /deep/ .el-input-number__increase{
|
|
|
+ background: #666666!important;
|
|
|
+ color: white!important;
|
|
|
}
|
|
|
</style>
|