|
@@ -19,321 +19,396 @@
|
|
|
<span class="title-text">集 中 功 率 预 测</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="home-main-container">
|
|
|
- <echarts-map/>
|
|
|
- <!-- 上 -->
|
|
|
- <div class="float-container top-1 width-100 height-10r flex ">
|
|
|
- <div v-for="item of digitalDisk" class="width-20 flex-column items-center">
|
|
|
- <div style="width:70%">
|
|
|
- <div class="text-bg text-style">{{ item.name }}</div>
|
|
|
- <div class="flex items-center number-bg-style">
|
|
|
- <div v-for="num of item.num" class="flex items-center justify-center num-style number-bg ">{{ num }}</div>
|
|
|
- <span class="unit-style">MW</span>
|
|
|
+ <div class="home-main-container flex">
|
|
|
+ <!-- 左-->
|
|
|
+ <div class="width-20 ml-0 flex-column justify-between">
|
|
|
+ <div class="border-style">
|
|
|
+ <div class="barTitleBg right-title-style">场站数据统计</div>
|
|
|
+ <div class="flex flex-wrap" style="height: 25vh">
|
|
|
+ <div class="flex width-50">
|
|
|
+ <img src="../../assets/images/dashboard/num3.png" class="left-img"/>
|
|
|
+ <div class="flex-column justify-center items-center">
|
|
|
+ <span>风速(m/s)</span>
|
|
|
+ <span>{{ envData.ws }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="flex width-50">
|
|
|
+ <img src="../../assets/images/dashboard/num2.png" class="left-img"/>
|
|
|
+ <div class="flex-column justify-center items-center">
|
|
|
+ <span>风电开机容量</span>
|
|
|
+ <span>{{ envData.ws }}</span>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
+ <div class="flex width-50">
|
|
|
+ <img src="../../assets/images/dashboard/num4.png" class="left-img"/>
|
|
|
+ <div class="flex-column justify-center items-center">
|
|
|
+ <span>辐照度(W/㎡)</span>
|
|
|
+ <span>{{ envData.radiance }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="flex width-50">
|
|
|
+ <img src="../../assets/images/dashboard/num2.png" class="left-img"/>
|
|
|
+ <div class="flex-column justify-center items-center">
|
|
|
+ <span>光伏开机容量</span>
|
|
|
+ <span>{{ envData.ws }}</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="border-style">
|
|
|
+ <div class="barTitleBg right-title-style">生产数据统计</div>
|
|
|
+ <div class="flex-column justify-center" style="height: 25vh">
|
|
|
+ <left-middle :params="leftMiddleParams"/>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="border-style position-r">
|
|
|
+ <div class="barTitleBg right-title-style">短期偏差统计</div>
|
|
|
+ <div style="height: 30vh">
|
|
|
+ <left-bottom :params="leftBottomParams"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 右 -->
|
|
|
- <div class="float-container right-1 top-default flex-column right-container-style">
|
|
|
- <div class="position-r border-style">
|
|
|
- <div class="position-a width-100 top-2 flex justify-center">
|
|
|
- <div class="right-top-style flex justify-between">
|
|
|
- <span>总场站数:{{ totality.number }}</span>
|
|
|
- <span>总容量:{{ totality.capacity }}MW</span>
|
|
|
- </div>
|
|
|
+ <!-- 中 -->
|
|
|
+ <div class="width-48 mr-0 ml-0">
|
|
|
+ <div class="height-58vh">
|
|
|
+ <div class="position-r height-58vh centerMap">
|
|
|
+ <center-top />
|
|
|
</div>
|
|
|
- <div class="barTitleBg right-title-style">限电情况</div>
|
|
|
- <div id="gauge" class="chartStyle"/>
|
|
|
</div>
|
|
|
- <div class="border-style" style="margin-top: 1%">
|
|
|
- <div class="barTitleBg right-title-style">功率曲线</div>
|
|
|
- <div id="line" class="chartStyle"/>
|
|
|
+ <div class="border-style position-r" style="margin-top: 1%">
|
|
|
+ <div class="barTitleBg right-title-style flex justify-between">
|
|
|
+ 功率曲线
|
|
|
+ <div class="flex position-a" style="right: 2.2vw;">
|
|
|
+ <div class="btu-checked forecastLine btu-checked-style flex items-center justify-center" id="day"
|
|
|
+ @click="changeForecastLine('day')">当日
|
|
|
+ </div>
|
|
|
+ <div class="btu-no-checked forecastLine btu-checked-style flex items-center justify-center" id="tenDay"
|
|
|
+ @click="changeForecastLine('tenDay')">十日
|
|
|
+ </div>
|
|
|
+ <div class="btu-no-checked forecastLine btu-checked-style flex items-center justify-center" id="wind"
|
|
|
+ @click="changeForecastLine('wind')">风电
|
|
|
+ </div>
|
|
|
+ <div class="btu-no-checked forecastLine btu-checked-style flex items-center justify-center"
|
|
|
+ id="photovoltaic" @click="changeForecastLine('photovoltaic')">光伏
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <center-bottom :params="centerBottomParams"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <!-- 左 -->
|
|
|
- <div class="float-container top-default flex-column justify-around left-container-style">
|
|
|
- <div class="flex">
|
|
|
- <img src="../../assets/images/dashboard/num3.png" class="left-img"/>
|
|
|
- <div class="flex-column justify-center items-center">
|
|
|
- <span>风速(m/s)</span>
|
|
|
- <span>{{ envData.ws }}</span>
|
|
|
+ <!-- 右-->
|
|
|
+ <div class="width-20 mr-0 flex-column justify-between">
|
|
|
+ <div class="border-style position-r">
|
|
|
+ <div class="flex position-a" style="right: .3vw;top: .5vh">
|
|
|
+ <div class="btu-checked accuracy btu-checked-style flex items-center justify-center" id="accuracy-day"
|
|
|
+ @click="changeAccuracy('accuracy-day')">日
|
|
|
+ </div>
|
|
|
+ <div class="btu-no-checked accuracy btu-checked-style flex items-center justify-center" id="accuracy-month"
|
|
|
+ @click="changeAccuracy('accuracy-month')">月
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div class="barTitleBg right-title-style ">准确率排名</div>
|
|
|
+ <div style="height: 25vh">
|
|
|
+ <right-top :params="rightTopParams"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="flex">
|
|
|
- <img src="../../assets/images/dashboard/num4.png" class="left-img"/>
|
|
|
- <div class="flex-column justify-center items-center">
|
|
|
- <span>辐照度(W/㎡)</span>
|
|
|
- <span>{{ envData.radiance }}</span>
|
|
|
+ <div class="border-style position-r">
|
|
|
+ <div class="barTitleBg right-title-style flex justify-between">气象预测
|
|
|
+ <div class="flex">
|
|
|
+ <div class="btu-checked weather btu-checked-style flex items-center justify-center" id="weather-wind"
|
|
|
+ @click="changeWeather('weather-wind')">风电
|
|
|
+ </div>
|
|
|
+ <div class="btu-no-checked weather btu-checked-style flex items-center justify-center"
|
|
|
+ id="weather-photovoltaic" @click="changeWeather('weather-photovoltaic')">光伏
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div style="height: 25vh">
|
|
|
+ <right-middle :params="rightMiddleParams"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="flex">
|
|
|
- <img src="../../assets/images/dashboard/num2.png" class="left-img"/>
|
|
|
- <div class="flex-column justify-center items-center">
|
|
|
- <span>限电比(%)</span>
|
|
|
- <span>{{ xdbl }}</span>
|
|
|
+ <div class="border-style position-r">
|
|
|
+ <div class="barTitleBg right-title-style">未来10天预测电量</div>
|
|
|
+ <div style="height: 30vh">
|
|
|
+ <right-bottom :params="rightBottomParams"/>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+
|
|
|
+
|
|
|
</div>
|
|
|
|
|
|
- <div class="app-container">
|
|
|
-
|
|
|
- <div class="dark-el-dialog">
|
|
|
- <el-dialog width="60%" style="top:15%" :visible.sync="outerVisible" :close-on-click-modal="false">
|
|
|
- <div slot="title" class="dialog-title flex justify-between">
|
|
|
- <div class="flex justify-between" style="width: 80%">
|
|
|
- <el-button @click="acknowledgeAll()">全部确认</el-button>
|
|
|
- <div id="btuAll" class="clickAfter" @click="clickBtuClass('btuAll')"><el-button @click="getAbnormalAlarms('')">全部告警</el-button></div>
|
|
|
- <div id="btuE1" class="clickBefore" @click="clickBtuClass('btuE1')"><el-button @click="getAbnormalAlarms('E1')">通道告警</el-button></div>
|
|
|
- <div id="btuE2" class="clickBefore" @click="clickBtuClass('btuE2')"><el-button @click="getAbnormalAlarms('E2')">上报告警</el-button></div>
|
|
|
- <div id="btuE3" class="clickBefore" @click="clickBtuClass('btuE3')"><el-button @click="getAbnormalAlarms('E3')">站端硬件告警</el-button></div>
|
|
|
- <div id="btuE4" class="clickBefore" @click="clickBtuClass('btuE4')"><el-button @click="getAbnormalAlarms('E4')">中心解析告警</el-button></div>
|
|
|
- <div id="btuE5" class="clickBefore" @click="clickBtuClass('btuE5')"><el-button @click="getAbnormalAlarms('E5')">通用告警</el-button></div>
|
|
|
- <el-button @click="getAlarmConfs()">不告警配置</el-button>
|
|
|
+ <div class="dark-el-dialog">
|
|
|
+ <el-dialog width="60%" style="top:15%" :visible.sync="outerVisible" :close-on-click-modal="false">
|
|
|
+ <div slot="title" class="dialog-title flex justify-between">
|
|
|
+ <div class="flex justify-between" style="width: 80%">
|
|
|
+ <el-button @click="acknowledgeAll()">全部确认</el-button>
|
|
|
+ <div id="btuAll" class="clickAfter" @click="clickBtuClass('btuAll')">
|
|
|
+ <el-button @click="getAbnormalAlarms('')">全部告警</el-button>
|
|
|
</div>
|
|
|
- <div class="dialog-title-badge flex justify-between">
|
|
|
- <el-badge :value="this.badgeValue.alarm">
|
|
|
- <img src="../../assets/images/svg/remind.svg" width="20px"/>
|
|
|
- </el-badge>
|
|
|
- <!-- <el-badge :value="badgeValue.confirm">-->
|
|
|
- <!-- <img src="../../assets/images/svg/right.svg" width="20px"/>-->
|
|
|
- <!-- </el-badge>-->
|
|
|
+ <div id="btuE1" class="clickBefore" @click="clickBtuClass('btuE1')">
|
|
|
+ <el-button @click="getAbnormalAlarms('E1')">通道告警</el-button>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <div>
|
|
|
- <el-table
|
|
|
- :data="tableDataAlarm"
|
|
|
- border max-height="300px"
|
|
|
- element-loading-background="rgba(8, 61, 92,1)"
|
|
|
- v-loading="loadingAlarm"
|
|
|
- style="width: 100%">
|
|
|
- <el-table-column label="序号" type="index" align="center" width="60"></el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="stationCode" align="center" :formatter="formatStation" :show-overflow-tooltip="true"
|
|
|
- label="场站名称"
|
|
|
- >
|
|
|
- </el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="startTime" align="center"
|
|
|
- label="报警开始时间" :formatter="formatStartDate"
|
|
|
- >
|
|
|
- </el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="endTime" align="center"
|
|
|
- label="报警结束时间" :formatter="formatEndDate"
|
|
|
- >
|
|
|
- </el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="msg" align="center" :show-overflow-tooltip="true"
|
|
|
- label="报警描述">
|
|
|
- </el-table-column>
|
|
|
- \
|
|
|
- <el-table-column
|
|
|
- prop="alarmType" align="center" :formatter="formatAlarmSource"
|
|
|
- label="报警来源">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column
|
|
|
- prop="operate" align="center"
|
|
|
- label="操作" width="80">
|
|
|
- <template v-slot="{ row }">
|
|
|
- <img src="../../assets/images/svg/remind.svg" @click="acknowledge(row)" width="20px"/>
|
|
|
- <!-- <img src="../../assets/images/svg/right.svg" width="20px"/>-->
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- <div class="block flex" style="justify-content: end">
|
|
|
- <el-pagination
|
|
|
- popper-class="cpp-popper"
|
|
|
- @size-change="handleSizeChangeAlarm"
|
|
|
- @current-change="handleCurrentChangeAlarm"
|
|
|
- :current-page=this.alarmPage.currentPage
|
|
|
- :page-sizes="[10, 15, 30, 50]"
|
|
|
- :page-size=this.alarmPage.pageSize
|
|
|
- layout="total, sizes, prev, pager, next, jumper"
|
|
|
- :total=this.alarmPage.total>
|
|
|
- </el-pagination>
|
|
|
+ <div id="btuE2" class="clickBefore" @click="clickBtuClass('btuE2')">
|
|
|
+ <el-button @click="getAbnormalAlarms('E2')">上报告警</el-button>
|
|
|
+ </div>
|
|
|
+ <div id="btuE3" class="clickBefore" @click="clickBtuClass('btuE3')">
|
|
|
+ <el-button @click="getAbnormalAlarms('E3')">站端硬件告警</el-button>
|
|
|
+ </div>
|
|
|
+ <div id="btuE4" class="clickBefore" @click="clickBtuClass('btuE4')">
|
|
|
+ <el-button @click="getAbnormalAlarms('E4')">中心解析告警</el-button>
|
|
|
</div>
|
|
|
+ <div id="btuE5" class="clickBefore" @click="clickBtuClass('btuE5')">
|
|
|
+ <el-button @click="getAbnormalAlarms('E5')">通用告警</el-button>
|
|
|
+ </div>
|
|
|
+ <el-button @click="getAlarmConfs()">不告警配置</el-button>
|
|
|
+ </div>
|
|
|
+ <div class="dialog-title-badge flex justify-between">
|
|
|
+ <el-badge :value="this.badgeValue.alarm">
|
|
|
+ <img src="../../assets/images/svg/remind.svg" width="20px"/>
|
|
|
+ </el-badge>
|
|
|
+ <!-- <el-badge :value="badgeValue.confirm">-->
|
|
|
+ <!-- <img src="../../assets/images/svg/right.svg" width="20px"/>-->
|
|
|
+ <!-- </el-badge>-->
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div>
|
|
|
+ <el-table
|
|
|
+ :data="tableDataAlarm"
|
|
|
+ border max-height="300px"
|
|
|
+ element-loading-background="rgba(8, 61, 92,1)"
|
|
|
+ v-loading="loadingAlarm"
|
|
|
+ style="width: 100%">
|
|
|
+ <el-table-column label="序号" type="index" align="center" width="60"></el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="stationCode" align="center" :formatter="formatStation" :show-overflow-tooltip="true"
|
|
|
+ label="场站名称"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="startTime" align="center"
|
|
|
+ label="报警开始时间" :formatter="formatStartDate"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="endTime" align="center"
|
|
|
+ label="报警结束时间" :formatter="formatEndDate"
|
|
|
+ >
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="msg" align="center" :show-overflow-tooltip="true"
|
|
|
+ label="报警描述">
|
|
|
+ </el-table-column>
|
|
|
+ \
|
|
|
+ <el-table-column
|
|
|
+ prop="alarmType" align="center" :formatter="formatAlarmSource"
|
|
|
+ label="报警来源">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ prop="operate" align="center"
|
|
|
+ label="操作" width="80">
|
|
|
+ <template v-slot="{ row }">
|
|
|
+ <img src="../../assets/images/svg/remind.svg" @click="acknowledge(row)" width="20px"/>
|
|
|
+ <!-- <img src="../../assets/images/svg/right.svg" width="20px"/>-->
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ <div class="block flex" style="justify-content: end">
|
|
|
+ <el-pagination
|
|
|
+ popper-class="cpp-popper"
|
|
|
+ @size-change="handleSizeChangeAlarm"
|
|
|
+ @current-change="handleCurrentChangeAlarm"
|
|
|
+ :current-page=this.alarmPage.currentPage
|
|
|
+ :page-sizes="[10, 15, 30, 50]"
|
|
|
+ :page-size=this.alarmPage.pageSize
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :total=this.alarmPage.total>
|
|
|
+ </el-pagination>
|
|
|
+ </div>
|
|
|
|
|
|
- <el-dialog
|
|
|
- width="40%" style="top:20%"
|
|
|
- title="不告警配置"
|
|
|
- :visible.sync="innerVisible"
|
|
|
- append-to-body>
|
|
|
- <!-- TODO 移植v3 -->
|
|
|
- <div class="dark-el-dialog" style="margin-top: -20px">
|
|
|
- <el-row>
|
|
|
- <el-col :span="1.5">失效时间:</el-col>
|
|
|
- <el-col :span="10">
|
|
|
- <el-date-picker
|
|
|
- :clearable="false"
|
|
|
- v-model="expireTime"
|
|
|
- type="datetime"
|
|
|
- value-format="timestamp"
|
|
|
- placeholder="选择失效时间"
|
|
|
- popper-class="cpp-popper"
|
|
|
- size="small"
|
|
|
- @change="changeInfo">
|
|
|
- </el-date-picker>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row :gutter="10" class="mb8" style="margin-top: 5px">
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button
|
|
|
- type="primary"
|
|
|
- icon="el-icon-plus"
|
|
|
- size="mini"
|
|
|
- popper-class="cpp-popper"
|
|
|
- @click="handleAdd"
|
|
|
- >新增
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button
|
|
|
- type="success"
|
|
|
- icon="el-icon-edit"
|
|
|
- size="mini"
|
|
|
- popper-class="cpp-popper"
|
|
|
- @click="handleUpdate"
|
|
|
- >修改
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
- <el-col :span="1.5">
|
|
|
- <el-button
|
|
|
- type="danger"
|
|
|
- icon="el-icon-delete"
|
|
|
- size="mini"
|
|
|
- popper-class="cpp-popper"
|
|
|
- @click="handleDelete"
|
|
|
- >删除
|
|
|
- </el-button>
|
|
|
- </el-col>
|
|
|
- <!-- <el-col :span="1.5">-->
|
|
|
- <!-- <el-button-->
|
|
|
- <!-- type="danger"-->
|
|
|
- <!-- plain-->
|
|
|
- <!-- icon="el-icon-select"-->
|
|
|
- <!-- size="mini"-->
|
|
|
- <!-- popper-class="cpp-popper"-->
|
|
|
- <!-- @click="getAlarmConfs"-->
|
|
|
- <!-- >查询-->
|
|
|
- <!-- </el-button>-->
|
|
|
- <!-- </el-col>-->
|
|
|
- </el-row>
|
|
|
-
|
|
|
- <div style="padding-top: 10px">
|
|
|
- <vxe-table
|
|
|
- ref="xTable"
|
|
|
- align="center"
|
|
|
- class="mytable-style"
|
|
|
- auto-resize
|
|
|
- border
|
|
|
- resizable
|
|
|
- export-config
|
|
|
- highlight-current-row
|
|
|
- show-overflow
|
|
|
- :data="tableDataAlarmConf"
|
|
|
- :radio-config="{trigger: 'row',checkMethod: checkRadioMethod}"
|
|
|
- >
|
|
|
- <vxe-column type="radio" width="60"/>
|
|
|
- <vxe-table-column field="stationCode" title="场站名称"
|
|
|
- :formatter="alarmConfTypeStationFormat"></vxe-table-column>
|
|
|
- <vxe-table-column field="keyword" title="关键词"></vxe-table-column>
|
|
|
- <vxe-table-column field="type" title="类型" :formatter="alarmConfTypeFormat"></vxe-table-column>
|
|
|
- <vxe-table-column field="expireTime" title="失效时间"></vxe-table-column>
|
|
|
- </vxe-table>
|
|
|
- <vxe-pager
|
|
|
- background
|
|
|
- :loading="loadingAlarmConf"
|
|
|
- :current-page.sync="alarmConfPage.currentPage"
|
|
|
- :page-size.sync="alarmConfPage.pageSize"
|
|
|
- :total="alarmConfPage.total"
|
|
|
- @page-change="handleSizeChangeAlarmConf"
|
|
|
- :layouts="['PrevJump', 'PrevPage', 'JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']">
|
|
|
- </vxe-pager>
|
|
|
- </div>
|
|
|
+ <el-dialog
|
|
|
+ width="40%" style="top:20%"
|
|
|
+ title="不告警配置"
|
|
|
+ :visible.sync="innerVisible"
|
|
|
+ append-to-body>
|
|
|
+ <!-- TODO 移植v3 -->
|
|
|
+ <div class="dark-el-dialog" style="margin-top: -20px">
|
|
|
+ <el-row>
|
|
|
+ <el-col :span="1.5">失效时间:</el-col>
|
|
|
+ <el-col :span="10">
|
|
|
+ <el-date-picker
|
|
|
+ :clearable="false"
|
|
|
+ v-model="expireTime"
|
|
|
+ type="datetime"
|
|
|
+ value-format="timestamp"
|
|
|
+ placeholder="选择失效时间"
|
|
|
+ popper-class="cpp-popper"
|
|
|
+ size="small"
|
|
|
+ @change="changeInfo">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row :gutter="10" class="mb8" style="margin-top: 5px">
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="primary"
|
|
|
+ icon="el-icon-plus"
|
|
|
+ size="mini"
|
|
|
+ popper-class="cpp-popper"
|
|
|
+ @click="handleAdd"
|
|
|
+ >新增
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="success"
|
|
|
+ icon="el-icon-edit"
|
|
|
+ size="mini"
|
|
|
+ popper-class="cpp-popper"
|
|
|
+ @click="handleUpdate"
|
|
|
+ >修改
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="1.5">
|
|
|
+ <el-button
|
|
|
+ type="danger"
|
|
|
+ icon="el-icon-delete"
|
|
|
+ size="mini"
|
|
|
+ popper-class="cpp-popper"
|
|
|
+ @click="handleDelete"
|
|
|
+ >删除
|
|
|
+ </el-button>
|
|
|
+ </el-col>
|
|
|
+ <!-- <el-col :span="1.5">-->
|
|
|
+ <!-- <el-button-->
|
|
|
+ <!-- type="danger"-->
|
|
|
+ <!-- plain-->
|
|
|
+ <!-- icon="el-icon-select"-->
|
|
|
+ <!-- size="mini"-->
|
|
|
+ <!-- popper-class="cpp-popper"-->
|
|
|
+ <!-- @click="getAlarmConfs"-->
|
|
|
+ <!-- >查询-->
|
|
|
+ <!-- </el-button>-->
|
|
|
+ <!-- </el-col>-->
|
|
|
+ </el-row>
|
|
|
|
|
|
+ <div style="padding-top: 10px">
|
|
|
+ <vxe-table
|
|
|
+ ref="xTable"
|
|
|
+ align="center"
|
|
|
+ class="mytable-style"
|
|
|
+ auto-resize
|
|
|
+ border
|
|
|
+ resizable
|
|
|
+ export-config
|
|
|
+ highlight-current-row
|
|
|
+ show-overflow
|
|
|
+ :data="tableDataAlarmConf"
|
|
|
+ :radio-config="{trigger: 'row',checkMethod: checkRadioMethod}"
|
|
|
+ >
|
|
|
+ <vxe-column type="radio" width="60"/>
|
|
|
+ <vxe-table-column field="stationCode" title="场站名称"
|
|
|
+ :formatter="alarmConfTypeStationFormat"></vxe-table-column>
|
|
|
+ <vxe-table-column field="keyword" title="关键词"></vxe-table-column>
|
|
|
+ <vxe-table-column field="type" title="类型" :formatter="alarmConfTypeFormat"></vxe-table-column>
|
|
|
+ <vxe-table-column field="expireTime" title="失效时间"></vxe-table-column>
|
|
|
+ </vxe-table>
|
|
|
+ <vxe-pager
|
|
|
+ background
|
|
|
+ :loading="loadingAlarmConf"
|
|
|
+ :current-page.sync="alarmConfPage.currentPage"
|
|
|
+ :page-size.sync="alarmConfPage.pageSize"
|
|
|
+ :total="alarmConfPage.total"
|
|
|
+ @page-change="handleSizeChangeAlarmConf"
|
|
|
+ :layouts="['PrevJump', 'PrevPage', 'JumpNumber', 'NextPage', 'NextJump', 'Sizes', 'FullJump', 'Total']">
|
|
|
+ </vxe-pager>
|
|
|
</div>
|
|
|
|
|
|
- <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="850px"
|
|
|
- height="600px" style="top:30%"
|
|
|
- append-to-body>
|
|
|
- <div class="dark-el-dialog">
|
|
|
- <el-form ref="form" :model="form" :rules="rules" width="830px" label-width="150px">
|
|
|
- <el-row class="mb4">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="场站" prop="stationCode">
|
|
|
- <el-select v-model="form.stationCode" placeholder="请选择" style="width: 100%"
|
|
|
- popper-class="cpp-popper">
|
|
|
- <el-option
|
|
|
- v-for="item in this.stationSelect()"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="关键词" prop="keyword">
|
|
|
- <el-input style="width: 100%" v-model="form.keyword" maxlength="50"
|
|
|
- popper-class="cpp-popper"/>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- <el-row class="mb4">
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="类型" prop="type">
|
|
|
- <el-select v-model="form.type" placeholder="请选择" style="width: 100%"
|
|
|
- popper-class="cpp-popper">
|
|
|
- <el-option
|
|
|
- v-for="item in this.alarmConfType"
|
|
|
- :key="item.value"
|
|
|
- :label="item.label"
|
|
|
- :value="item.value"
|
|
|
- />
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- <el-col :span="12">
|
|
|
- <el-form-item label="失效时间" prop="expireTime">
|
|
|
- <el-date-picker
|
|
|
- :clearable="false"
|
|
|
- v-model="form.expireTime"
|
|
|
- type="datetime"
|
|
|
- value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
- placeholder="选择失效时间"
|
|
|
- :picker-options="pickerOptions"
|
|
|
- popper-class="cpp-popper">
|
|
|
- </el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- </el-col>
|
|
|
- </el-row>
|
|
|
- </el-form>
|
|
|
- <div slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="commitChannel">确 定</el-button>
|
|
|
- <el-button @click="cancelChannel">取 消</el-button>
|
|
|
- </div>
|
|
|
+ </div>
|
|
|
+
|
|
|
+ <el-dialog :title="title" :visible.sync="open" :close-on-click-modal="false" width="850px"
|
|
|
+ height="600px" style="top:30%"
|
|
|
+ append-to-body>
|
|
|
+ <div class="dark-el-dialog">
|
|
|
+ <el-form ref="form" :model="form" :rules="rules" width="830px" label-width="150px">
|
|
|
+ <el-row class="mb4">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="场站" prop="stationCode">
|
|
|
+ <el-select v-model="form.stationCode" placeholder="请选择" style="width: 100%"
|
|
|
+ popper-class="cpp-popper">
|
|
|
+ <el-option
|
|
|
+ v-for="item in this.stationSelect()"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="关键词" prop="keyword">
|
|
|
+ <el-input style="width: 100%" v-model="form.keyword" maxlength="50"
|
|
|
+ popper-class="cpp-popper"/>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ <el-row class="mb4">
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="类型" prop="type">
|
|
|
+ <el-select v-model="form.type" placeholder="请选择" style="width: 100%"
|
|
|
+ popper-class="cpp-popper">
|
|
|
+ <el-option
|
|
|
+ v-for="item in this.alarmConfType"
|
|
|
+ :key="item.value"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ <el-col :span="12">
|
|
|
+ <el-form-item label="失效时间" prop="expireTime">
|
|
|
+ <el-date-picker
|
|
|
+ :clearable="false"
|
|
|
+ v-model="form.expireTime"
|
|
|
+ type="datetime"
|
|
|
+ value-format="yyyy-MM-dd HH:mm:ss"
|
|
|
+ placeholder="选择失效时间"
|
|
|
+ :picker-options="pickerOptions"
|
|
|
+ popper-class="cpp-popper">
|
|
|
+ </el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ </el-col>
|
|
|
+ </el-row>
|
|
|
+ </el-form>
|
|
|
+ <div slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="commitChannel">确 定</el-button>
|
|
|
+ <el-button @click="cancelChannel">取 消</el-button>
|
|
|
</div>
|
|
|
- </el-dialog>
|
|
|
+ </div>
|
|
|
</el-dialog>
|
|
|
- </div>
|
|
|
- </el-dialog>
|
|
|
- </div>
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+ </el-dialog>
|
|
|
</div>
|
|
|
+
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
|
|
|
|
import {formatToDateTime} from "../../utils/dateUtil";
|
|
|
-import echartsMap from './echartsMap/index.vue'
|
|
|
-import {gaugeOption, lineOption} from "./echarts-data";
|
|
|
-
|
|
|
+import leftMiddle from './components/left-middle.vue'
|
|
|
+import rightTop from './components/right-top.vue'
|
|
|
+import rightBottom from './components/right-bottom.vue'
|
|
|
+import centerBottom from "./components/center-bottom.vue";
|
|
|
+import rightMiddle from "./components/right-middle.vue";
|
|
|
+import leftBottom from "./components/left-bottom.vue";
|
|
|
+import centerTop from "./components/center-top.vue";
|
|
|
export default {
|
|
|
name: 'largeScreen',
|
|
|
- components: {echartsMap},
|
|
|
+ components: {leftMiddle, rightTop, rightBottom, centerBottom, rightMiddle, leftBottom,centerTop},
|
|
|
data() {
|
|
|
const checkExpireTime = (rule, value, callback) => {
|
|
|
- console.log(value)
|
|
|
if (value == null || value === '') {
|
|
|
callback(new Error('失效时间不能为空'))
|
|
|
}
|
|
@@ -364,22 +439,23 @@ export default {
|
|
|
loadingAlarm: false,
|
|
|
loadingAlarmConf: false,
|
|
|
tableDataAlarmBak: [],
|
|
|
- digitalDisk: [{
|
|
|
- name: '实际功率',
|
|
|
- num: '0'
|
|
|
- }, {
|
|
|
- name: '可用功率',
|
|
|
- num: '0'
|
|
|
- }, {
|
|
|
- name: '理论功率',
|
|
|
- num: '0'
|
|
|
- }, {
|
|
|
- name: '超短期预测功率',
|
|
|
- num: '0'
|
|
|
- }, {
|
|
|
- name: '短期预测功率',
|
|
|
- num: '0'
|
|
|
- }],
|
|
|
+ digitalDisk: [
|
|
|
+ {
|
|
|
+ name: '实际功率',
|
|
|
+ num: '0'
|
|
|
+ }, {
|
|
|
+ name: '可用功率',
|
|
|
+ num: '0'
|
|
|
+ }, {
|
|
|
+ name: '理论功率',
|
|
|
+ num: '0'
|
|
|
+ }, {
|
|
|
+ name: '超短期预测功率',
|
|
|
+ num: '0'
|
|
|
+ }, {
|
|
|
+ name: '短期预测功率',
|
|
|
+ num: '0'
|
|
|
+ }],
|
|
|
totality: {
|
|
|
number: 0,
|
|
|
capacity: 0
|
|
@@ -457,6 +533,13 @@ export default {
|
|
|
}
|
|
|
},
|
|
|
expireTime: new Date().getTime(),
|
|
|
+ leftMiddleParams: {}, //生产数据模块值
|
|
|
+ rightBottomParams: {}, // 未来10天预测电量
|
|
|
+ rightTopParams: [], // 准确率排名
|
|
|
+ centerBottomParams: {},//功率曲线
|
|
|
+ rightMiddleParams: {},//气象预测
|
|
|
+ leftBottomParams: {}//短期偏差统计
|
|
|
+
|
|
|
|
|
|
}
|
|
|
},
|
|
@@ -512,12 +595,14 @@ export default {
|
|
|
this.digitalDisk[4].num = this.formatNumber(sumMap.dqSum) + ''
|
|
|
// 曲线图
|
|
|
let curveMap = response.data.curveMap
|
|
|
- this.realList = curveMap.realList
|
|
|
- this.ableList = curveMap.ableList
|
|
|
- this.theoryList = curveMap.theoryList
|
|
|
- this.cdqList = curveMap.cdqList
|
|
|
- this.dqList = curveMap.dqList
|
|
|
- this.cdqList = curveMap.cdqList
|
|
|
+ this.centerBottomParams = {
|
|
|
+ realList: curveMap.realList,
|
|
|
+ ableList: curveMap.ableList,
|
|
|
+ theoryList: curveMap.theoryList,
|
|
|
+ cdqList: curveMap.cdqList,
|
|
|
+ dqList: curveMap.dqList
|
|
|
+ }
|
|
|
+ this.mockData()
|
|
|
// 限电信息
|
|
|
let xdMap = response.data.xdMap
|
|
|
this.totality.number = xdMap.zczs
|
|
@@ -529,12 +614,111 @@ export default {
|
|
|
let envDataMap = response.data.envDataMap
|
|
|
this.envData.ws = envDataMap.wsAvg
|
|
|
this.envData.radiance = envDataMap.fzdAvg
|
|
|
-
|
|
|
- this.drawChart()
|
|
|
}).catch(err => {
|
|
|
clearInterval(this.sysBizDataTimer);
|
|
|
})
|
|
|
},
|
|
|
+ mockData(){
|
|
|
+ this.rightBottomParams ={
|
|
|
+ xData: [
|
|
|
+ "12-01",
|
|
|
+ "12-02",
|
|
|
+ "12-03",
|
|
|
+ "12-04",
|
|
|
+ "12-05",
|
|
|
+ "12-06",
|
|
|
+ "12-07",
|
|
|
+ "12-08",
|
|
|
+ "12-09",
|
|
|
+ "12-10",
|
|
|
+ "12-11",
|
|
|
+ "12-12",
|
|
|
+ "12-13",
|
|
|
+ "12-14",
|
|
|
+ "12-15",
|
|
|
+ "12-16",
|
|
|
+ "12-17",
|
|
|
+ "12-18",
|
|
|
+ "12-19",
|
|
|
+ "12-20",
|
|
|
+ "12-21",
|
|
|
+ "12-22",
|
|
|
+ "12-23",
|
|
|
+ "12-24",
|
|
|
+ "12-25",
|
|
|
+ "12-26",
|
|
|
+ "12-27",
|
|
|
+ "12-28",
|
|
|
+ "12-29",
|
|
|
+ "12-30",
|
|
|
+ "12-31"
|
|
|
+ ],
|
|
|
+ pData: [
|
|
|
+ 90.69,
|
|
|
+ 121.28,
|
|
|
+ 100.1,
|
|
|
+ 66.02,
|
|
|
+ 151.14,
|
|
|
+ 316.08,
|
|
|
+ 113.21,
|
|
|
+ 100.14,
|
|
|
+ 192.39,
|
|
|
+ 317.92,
|
|
|
+ 275.32,
|
|
|
+ 184.14,
|
|
|
+ 326.11,
|
|
|
+ 473.03,
|
|
|
+ 487.25,
|
|
|
+ 361.38,
|
|
|
+ 465.54,
|
|
|
+ 443.73,
|
|
|
+ 516.83,
|
|
|
+ 369.04,
|
|
|
+ 272.89,
|
|
|
+ 198.42,
|
|
|
+ 596.15,
|
|
|
+ 351.34,
|
|
|
+ 406.07,
|
|
|
+ 582.7,
|
|
|
+ 490.01,
|
|
|
+ 488.05,
|
|
|
+ 370.14,
|
|
|
+ 88.29,
|
|
|
+ 178.89
|
|
|
+ ]}
|
|
|
+ this.rightTopParams = [
|
|
|
+ {sort: 1, name: '新疆光伏电站', accuracy: '99.8%'},
|
|
|
+ {sort: 2, name: '新疆光伏电站', accuracy: '97.8%'},
|
|
|
+ {sort: 3, name: '新疆光伏电站', accuracy: '96.8%'},
|
|
|
+ {sort: 3, name: '新疆光伏电站', accuracy: '96.8%'},
|
|
|
+ {sort: 4, name: '新疆光伏电站', accuracy: '95.8%'},
|
|
|
+ {sort: 4, name: '新疆光伏电站', accuracy: '95.8%'}]
|
|
|
+ this.leftBottomParams = {
|
|
|
+ boxplotData: [
|
|
|
+ [-8.09, -3.11, -2.11, 0.21, 5.19],
|
|
|
+ [-8.65, -2.04, 0.19, 2.36, 8.97],
|
|
|
+ [-6.46, -0.83, 0.52, 2.92, 8.55],
|
|
|
+ [-7.97, -1.55, 0.37, 2.74, 9.16],
|
|
|
+ [-5.56, -0.89, 1.31, 2.23, 6.91],
|
|
|
+ [-6.23, -1.18, 0.28, 2.19, 7.24]
|
|
|
+ ],
|
|
|
+ scatterData: [
|
|
|
+ ["10月26", -8.41],
|
|
|
+ ["10月27", -10.48],
|
|
|
+ ["10月28", 10.61],
|
|
|
+ ["10月29", 10.1],
|
|
|
+ ["10月30", -9.39],
|
|
|
+ ["10月31", 7.88]
|
|
|
+ ],
|
|
|
+ xData: ["10月26", "10月27", "10月28", "10月29", "10月30", "10月31"]
|
|
|
+ }
|
|
|
+ this.leftMiddleParams ={
|
|
|
+ dayValue: 456,
|
|
|
+ daySum: 1000,
|
|
|
+ realValue: 987,
|
|
|
+ realSum: 2000
|
|
|
+ }
|
|
|
+ },
|
|
|
jumpRout() {
|
|
|
this.$router.push({path: "/cloudDataQuery"})
|
|
|
},
|
|
@@ -645,27 +829,28 @@ export default {
|
|
|
clickItem.classList.remove('clickBefore')
|
|
|
clickItem.classList.add('clickAfter')
|
|
|
},
|
|
|
- drawChart() {
|
|
|
- gaugeOption.series[0].data[0].value = this.xdczs
|
|
|
- gaugeOption.series[1].data[0].value = this.xdczs
|
|
|
- gaugeOption.series[0].max = this.zczs
|
|
|
- gaugeOption.series[1].max = this.zczs
|
|
|
- this.myChart0 = this.$echarts.init(document.getElementById('gauge'));
|
|
|
- this.myChart0.setOption(gaugeOption, true)
|
|
|
- lineOption.series[0].data = this.realList
|
|
|
- lineOption.series[1].data = this.ableList
|
|
|
- lineOption.series[2].data = this.theoryList
|
|
|
- lineOption.series[3].data = this.dqList
|
|
|
- lineOption.series[4].data = this.cdqList
|
|
|
-
|
|
|
- this.myChart1 = this.$echarts.init(document.getElementById('line'), 'dark');
|
|
|
- this.myChart1.setOption(lineOption, true)
|
|
|
- const _this = this
|
|
|
- window.addEventListener("resize", function () {
|
|
|
- _this.myChart0.resize();
|
|
|
- _this.myChart1.resize();
|
|
|
- });
|
|
|
+ /**
|
|
|
+ * 切换功率曲线按钮
|
|
|
+ * */
|
|
|
+ changeForecastLine(id) {
|
|
|
+ const activeItem = document.querySelector('.btu-checked.forecastLine')
|
|
|
+ this.checkedClass(id, activeItem)
|
|
|
+ },
|
|
|
+ /**
|
|
|
+ * 切换准确率排行按钮
|
|
|
+ * */
|
|
|
+ changeAccuracy(id) {
|
|
|
+ const activeItem = document.querySelector('.btu-checked.accuracy')
|
|
|
+ this.checkedClass(id, activeItem)
|
|
|
},
|
|
|
+ /**
|
|
|
+ * 切换气象预测按钮
|
|
|
+ * */
|
|
|
+ changeWeather(id) {
|
|
|
+ const activeItem = document.querySelector('.btu-checked.weather')
|
|
|
+ this.checkedClass(id, activeItem)
|
|
|
+ },
|
|
|
+
|
|
|
formatStartDate(row) {
|
|
|
return formatToDateTime(row.startTime)
|
|
|
},
|
|
@@ -875,8 +1060,15 @@ export default {
|
|
|
},
|
|
|
checkRadioMethod({row}) {
|
|
|
return row.expireTime > formatToDateTime(new Date().getTime())
|
|
|
- }
|
|
|
-
|
|
|
+ },
|
|
|
+ checkedClass(id, activeItem) {
|
|
|
+ let clickItem = document.getElementById(id)
|
|
|
+ // let activeItem = document.querySelector('.btu-checked')
|
|
|
+ activeItem.classList.remove('btu-checked')
|
|
|
+ activeItem.classList.add('btu-no-checked')
|
|
|
+ clickItem.classList.remove('btu-no-checked')
|
|
|
+ clickItem.classList.add('btu-checked')
|
|
|
+ },
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -938,7 +1130,7 @@ $top-container-height: 11vh;
|
|
|
|
|
|
.chartStyle {
|
|
|
width: 100%;
|
|
|
- height: 35vh;
|
|
|
+ height: 30vh;
|
|
|
}
|
|
|
|
|
|
.home-main-container {
|
|
@@ -963,7 +1155,7 @@ $top-container-height: 11vh;
|
|
|
}
|
|
|
|
|
|
.left-img {
|
|
|
- width: 5vw;
|
|
|
+ width: 6vw;
|
|
|
}
|
|
|
|
|
|
.badge-img {
|
|
@@ -972,7 +1164,7 @@ $top-container-height: 11vh;
|
|
|
|
|
|
.border-style {
|
|
|
border-radius: 5px;
|
|
|
- box-shadow: inset 0px 1px 8px 5px rgba(29, 128, 218, 0.63);
|
|
|
+ box-shadow: 0px 1px 5px 3px rgba(29, 128, 218, 0.85);
|
|
|
}
|
|
|
|
|
|
.right-top-style {
|
|
@@ -1005,7 +1197,19 @@ $top-container-height: 11vh;
|
|
|
}
|
|
|
|
|
|
.width-20 {
|
|
|
- width: 20%;
|
|
|
+ width: 25vw;
|
|
|
+}
|
|
|
+
|
|
|
+.width-48 {
|
|
|
+ width: 48vw;
|
|
|
+}
|
|
|
+
|
|
|
+.width-50 {
|
|
|
+ width: 50%;
|
|
|
+}
|
|
|
+
|
|
|
+.height-58vh {
|
|
|
+ height: 58vh
|
|
|
}
|
|
|
|
|
|
.text-style {
|
|
@@ -1045,16 +1249,30 @@ $top-container-height: 11vh;
|
|
|
background-repeat: no-repeat;
|
|
|
}
|
|
|
|
|
|
+.centerMap {
|
|
|
+ background-image: url('../../assets/images/dashboard/map.png');
|
|
|
+ background-size: 100% 100%;
|
|
|
+ background-position: center;
|
|
|
+ background-repeat: no-repeat;
|
|
|
+}
|
|
|
+
|
|
|
+.btu-checked-style {
|
|
|
+ width: 4vw;
|
|
|
+ height: 3vh;
|
|
|
+ font-size: .85vw;
|
|
|
+ margin-left: .5vw;
|
|
|
+ cursor: pointer;
|
|
|
+}
|
|
|
|
|
|
-.text-bg {
|
|
|
- background-image: url('../../assets/images/dashboard/numTitle.png');
|
|
|
+.btu-checked {
|
|
|
+ background-image: url('../../assets/images/dashboard/btu-checked.png');
|
|
|
background-size: 100% 100%;
|
|
|
background-position: center;
|
|
|
background-repeat: no-repeat;
|
|
|
}
|
|
|
|
|
|
-.number-bg {
|
|
|
- background-image: url('../../assets/images/dashboard/numBg.png');
|
|
|
+.btu-no-checked {
|
|
|
+ background-image: url('../../assets/images/dashboard/btu-no-checked.png');
|
|
|
background-size: 100% 100%;
|
|
|
background-position: center;
|
|
|
background-repeat: no-repeat;
|