Forráskód Böngészése

短期调控一键调控弹出页增加中心模型数据选择及展示应用

xusl 8 hónapja
szülő
commit
c816b23a4e

+ 65 - 30
cpp-admin/src/main/java/com/cpp/web/controller/regulation/DqRegulationController.java

@@ -13,6 +13,7 @@ import com.cpp.common.utils.SecurityUtils;
 import com.cpp.system.service.ISysConfigService;
 import com.cpp.system.service.ISysConfigService;
 import com.cpp.system.service.ISysUserService;
 import com.cpp.system.service.ISysUserService;
 import com.cpp.web.domain.accuracy.AccuracyPassRate;
 import com.cpp.web.domain.accuracy.AccuracyPassRate;
+import com.cpp.web.domain.cloud.ForecastPowerShortTermCloud;
 import com.cpp.web.domain.enums.DataSourcesEnum;
 import com.cpp.web.domain.enums.DataSourcesEnum;
 import com.cpp.web.domain.enums.ForecastTypeEnum;
 import com.cpp.web.domain.enums.ForecastTypeEnum;
 import com.cpp.web.domain.enums.RegulationStatusEnum;
 import com.cpp.web.domain.enums.RegulationStatusEnum;
@@ -27,6 +28,7 @@ import com.cpp.web.domain.station.ForecastPowerShortTermStation;
 import com.cpp.web.domain.station.InverterStatusData;
 import com.cpp.web.domain.station.InverterStatusData;
 import com.cpp.web.dto.TempShortRegulationDto;
 import com.cpp.web.dto.TempShortRegulationDto;
 import com.cpp.web.service.accuracy.AccuracyPassRateService;
 import com.cpp.web.service.accuracy.AccuracyPassRateService;
+import com.cpp.web.service.cloud.ForecastPowerShortTermCloudService;
 import com.cpp.web.service.regulation.TempShortRegulationDetailService;
 import com.cpp.web.service.regulation.TempShortRegulationDetailService;
 import com.cpp.web.service.regulation.TempShortRegulationService;
 import com.cpp.web.service.regulation.TempShortRegulationService;
 import com.cpp.web.service.regulation.TempShortUsualDetailService;
 import com.cpp.web.service.regulation.TempShortUsualDetailService;
@@ -74,6 +76,8 @@ public class DqRegulationController {
     ISysUserService iSysUserService;
     ISysUserService iSysUserService;
     @Autowired
     @Autowired
     ForecastPowerShortTermRegulationService forecastPowerShortTermRegulationService;
     ForecastPowerShortTermRegulationService forecastPowerShortTermRegulationService;
+    @Autowired
+    ForecastPowerShortTermCloudService forecastPowerShortTermCloudService;
 
 
 
 
 
 
@@ -277,45 +281,76 @@ public class DqRegulationController {
      */
      */
 
 
     @GetMapping("/trialData")
     @GetMapping("/trialData")
-    public R trialData(String stationCode, Long time,String usualName) {
-        // 先获取常规策略
-        QueryWrapper<TempShortUsual> tempShortUsualQueryWrapper = new QueryWrapper<>();
-        tempShortUsualQueryWrapper.eq("usual_name", usualName);
-        TempShortUsual tempShortUsual = tempShortUsualService.getOne(tempShortUsualQueryWrapper);
-        QueryWrapper<TempShortUsualDetail> tempShortUsualDetailQueryWrapper = new QueryWrapper<>();
-        tempShortUsualDetailQueryWrapper.eq("usual_id", tempShortUsual.getId());
-        List<TempShortUsualDetail> tempShortUsualDetailList = tempShortUsualDetailService.list(tempShortUsualDetailQueryWrapper);
-        Map<String,TempShortUsualDetail> usualDetailMap = new HashMap<>();
-        for (TempShortUsualDetail tempShortUsualDetail:tempShortUsualDetailList){
-            usualDetailMap.put(tempShortUsualDetail.getTimePoint(),tempShortUsualDetail);
-        }
+    public R trialData(String stationCode, Long time,String usualName,String selectRadio) {
         int howLongAgo = DateTimeUtil.getDaysBetweenTwoDate(System.currentTimeMillis(),time);
         int howLongAgo = DateTimeUtil.getDaysBetweenTwoDate(System.currentTimeMillis(),time);
         // 获取要调整的短期那天的最后时间
         // 获取要调整的短期那天的最后时间
         long endTime = DateTimeUtil.getDayLastTime(time).getTime();
         long endTime = DateTimeUtil.getDayLastTime(time).getTime();
+        List<TempShortRegulationDto> trialList = new ArrayList<>();
+        Map<Long, BigDecimal> ysShortMap = new HashMap<>();
+
         // 获取短期上报数据(原始数据)
         // 获取短期上报数据(原始数据)
         List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = forecastPowerShortTermStationService.findByForecastTimeBetweenAndForecastHowLongAgoAndStationCode(new Date(time), new Date(endTime), howLongAgo, stationCode);
         List<ForecastPowerShortTermStation> forecastPowerShortTermStationList = forecastPowerShortTermStationService.findByForecastTimeBetweenAndForecastHowLongAgoAndStationCode(new Date(time), new Date(endTime), howLongAgo, stationCode);
-        Map<Long, BigDecimal> ysShortMap = new HashMap<>();
         for (ForecastPowerShortTermStation forecastPowerShortTermStation:forecastPowerShortTermStationList) {
         for (ForecastPowerShortTermStation forecastPowerShortTermStation:forecastPowerShortTermStationList) {
             ysShortMap.putIfAbsent(forecastPowerShortTermStation.getTime().getTime(), forecastPowerShortTermStation.getFpValue());
             ysShortMap.putIfAbsent(forecastPowerShortTermStation.getTime().getTime(), forecastPowerShortTermStation.getFpValue());
         }
         }
-        Long momentTime = 15 * 60 * 1000L;
-        List<TempShortRegulationDto> trialList = new ArrayList<>();
-        for (Long tempTime = time; tempTime <= endTime; tempTime = tempTime + momentTime) {
-            String timeHHmm = DateUtils.parseDateToStr("HH:mm",new Date(tempTime));
-            TempShortRegulationDto tempShortRegulationDto = new TempShortRegulationDto();
-            tempShortRegulationDto.setTime(timeHHmm);
-            tempShortRegulationDto.setForecastDate(new Date(time));
-            tempShortRegulationDto.setTkDate(new Date());
-            tempShortRegulationDto.setYsValue(ysShortMap.get(tempTime));
-            TempShortUsualDetail tempShortUsualDetail = usualDetailMap.get(timeHHmm);
-            tempShortRegulationDto.setSz(tempShortUsualDetail.getSz());
-            tempShortRegulationDto.setXs(tempShortUsualDetail.getXs());
-            // 计算调控值,调控值=原始值*系数+数值
-            BigDecimal tkValue = ysShortMap.get(tempTime).multiply(tempShortUsualDetail.getXs()).add(tempShortUsualDetail.getSz()).setScale(2, BigDecimal.ROUND_HALF_UP);
-            tempShortRegulationDto.setTkValue(tkValue);
-            tempShortRegulationDto.setStationCode(stationCode);
-            trialList.add(tempShortRegulationDto);
+
+        // 判断前端选择的策略是常用还是中心模型
+        if ("3".equals(selectRadio)){
+            Map<Long, BigDecimal> forecastPowerShortCloudMap = new HashMap();
+            // 获取中心模型数据
+            List<ForecastPowerShortTermCloud> forecastPowerShortTermCloudList = forecastPowerShortTermCloudService.findByForecastTimeBetweenAndHowLongAgoAndStationCode(new Date(time), new Date(endTime), howLongAgo, stationCode);
+            if (forecastPowerShortTermCloudList.size()>0){
+                for (ForecastPowerShortTermCloud forecastPowerShortTermCloud:forecastPowerShortTermCloudList) {
+                    forecastPowerShortCloudMap.putIfAbsent(forecastPowerShortTermCloud.getTime().getTime(), forecastPowerShortTermCloud.getFpValue());
+                }
+                Long momentTime = 15 * 60 * 1000L;
+                for (Long tempTime = time; tempTime <= endTime; tempTime = tempTime + momentTime) {
+                    String timeHHmm = DateUtils.parseDateToStr("HH:mm",new Date(tempTime));
+                    TempShortRegulationDto tempShortRegulationDto = new TempShortRegulationDto();
+                    tempShortRegulationDto.setTime(timeHHmm);
+                    tempShortRegulationDto.setForecastDate(new Date(time));
+                    tempShortRegulationDto.setTkDate(new Date());
+                    tempShortRegulationDto.setYsValue(ysShortMap.get(tempTime));
+                    tempShortRegulationDto.setSz(new BigDecimal("0"));
+                    tempShortRegulationDto.setXs(new BigDecimal("1"));
+                    tempShortRegulationDto.setTkValue(forecastPowerShortCloudMap.get(tempTime));
+                    tempShortRegulationDto.setStationCode(stationCode);
+                    trialList.add(tempShortRegulationDto);
+                }
+            }
         }
         }
+        else{
+            // 先获取常规策略
+            QueryWrapper<TempShortUsual> tempShortUsualQueryWrapper = new QueryWrapper<>();
+            tempShortUsualQueryWrapper.eq("usual_name", usualName);
+            TempShortUsual tempShortUsual = tempShortUsualService.getOne(tempShortUsualQueryWrapper);
+            QueryWrapper<TempShortUsualDetail> tempShortUsualDetailQueryWrapper = new QueryWrapper<>();
+            tempShortUsualDetailQueryWrapper.eq("usual_id", tempShortUsual.getId());
+            List<TempShortUsualDetail> tempShortUsualDetailList = tempShortUsualDetailService.list(tempShortUsualDetailQueryWrapper);
+            Map<String,TempShortUsualDetail> usualDetailMap = new HashMap<>();
+            for (TempShortUsualDetail tempShortUsualDetail:tempShortUsualDetailList){
+                usualDetailMap.put(tempShortUsualDetail.getTimePoint(),tempShortUsualDetail);
+            }
+
+            Long momentTime = 15 * 60 * 1000L;
+            for (Long tempTime = time; tempTime <= endTime; tempTime = tempTime + momentTime) {
+                String timeHHmm = DateUtils.parseDateToStr("HH:mm",new Date(tempTime));
+                TempShortRegulationDto tempShortRegulationDto = new TempShortRegulationDto();
+                tempShortRegulationDto.setTime(timeHHmm);
+                tempShortRegulationDto.setForecastDate(new Date(time));
+                tempShortRegulationDto.setTkDate(new Date());
+                tempShortRegulationDto.setYsValue(ysShortMap.get(tempTime));
+                TempShortUsualDetail tempShortUsualDetail = usualDetailMap.get(timeHHmm);
+                tempShortRegulationDto.setSz(tempShortUsualDetail.getSz());
+                tempShortRegulationDto.setXs(tempShortUsualDetail.getXs());
+                // 计算调控值,调控值=原始值*系数+数值
+                BigDecimal tkValue = ysShortMap.get(tempTime).multiply(tempShortUsualDetail.getXs()).add(tempShortUsualDetail.getSz()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                tempShortRegulationDto.setTkValue(tkValue);
+                tempShortRegulationDto.setStationCode(stationCode);
+                trialList.add(tempShortRegulationDto);
+            }
+        }
+
         return R.ok(trialList);
         return R.ok(trialList);
     }
     }
     /**
     /**

+ 17 - 3
cpp-admin/src/main/java/com/cpp/web/controller/regulation/DqUsualController.java

@@ -3,8 +3,10 @@ package com.cpp.web.controller.regulation;
 
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.cpp.common.core.domain.R;
 import com.cpp.common.core.domain.R;
+import com.cpp.common.core.domain.entity.SysDictData;
 import com.cpp.common.core.domain.model.LoginUser;
 import com.cpp.common.core.domain.model.LoginUser;
 import com.cpp.common.utils.SecurityUtils;
 import com.cpp.common.utils.SecurityUtils;
+import com.cpp.system.service.ISysDictDataService;
 import com.cpp.web.domain.regulation.TempShortRegulation;
 import com.cpp.web.domain.regulation.TempShortRegulation;
 import com.cpp.web.domain.regulation.TempShortUsual;
 import com.cpp.web.domain.regulation.TempShortUsual;
 import com.cpp.web.domain.regulation.TempShortUsualDetail;
 import com.cpp.web.domain.regulation.TempShortUsualDetail;
@@ -34,6 +36,8 @@ public class DqUsualController {
     TempShortUsualService tempShortUsualService;
     TempShortUsualService tempShortUsualService;
     @Autowired
     @Autowired
     TempShortUsualDetailService tempShortUsualDetailService;
     TempShortUsualDetailService tempShortUsualDetailService;
+    @Autowired
+    ISysDictDataService iSysDictDataService;
 
 
     /**
     /**
      * 保存常用策略
      * 保存常用策略
@@ -93,9 +97,19 @@ public class DqUsualController {
      */
      */
     @GetMapping("/getUsualList")
     @GetMapping("/getUsualList")
     public R getUsualList() {
     public R getUsualList() {
-        List<TempShortUsual> list = tempShortUsualService.list();
+        Map map = new HashMap();
+        List<TempShortUsual> tempShortUsualList = tempShortUsualService.list();
         // 创建时间倒排序
         // 创建时间倒排序
-        list.sort(Comparator.comparing(TempShortUsual::getCreateTime).reversed());
-        return R.ok(list);
+        tempShortUsualList.sort(Comparator.comparing(TempShortUsual::getCreateTime).reversed());
+        map.put("tempShortUsualList",tempShortUsualList);
+        // 获取中心侧模型算法
+        SysDictData sysDictData = new SysDictData();
+        sysDictData.setDictType("forecast_model");
+        List<SysDictData> forecastModelList = iSysDictDataService.selectDictDataList(sysDictData);
+        // 排序
+        forecastModelList.sort(Comparator.comparing(SysDictData::getDictSort));
+        map.put("forecastModelList",forecastModelList);
+
+        return R.ok(map);
     }
     }
 }
 }

+ 100 - 28
cpp-ui/src/views/regulation/dqRegulation/index.vue

@@ -175,7 +175,7 @@
               </div>
               </div>
               <div>
               <div>
                 <el-select ref="selectUsualName" v-model="usualId" placeholder="请选择" popper-class="cpp-popper"
                 <el-select ref="selectUsualName" v-model="usualId" placeholder="请选择" popper-class="cpp-popper"
-                           :disabled="disabled" @change="changeUsualName">
+                           :disabled="usualDisabled" @change="changeUsualName">
                   <el-option
                   <el-option
                       v-for="item in usualList"
                       v-for="item in usualList"
                       :key="item.id"
                       :key="item.id"
@@ -185,14 +185,31 @@
                 </el-select>
                 </el-select>
               </div>
               </div>
             </div>
             </div>
-            <div id="currentSelectFunction" style="display: none;margin-top: 30px;margin-left: 24px;" class="reg-config flex items-center">
+            <div class="reg-config flex items-center" style="margin-top: 18px">
+              <div class="reg-config-radio">
+                <el-radio v-model="vradio" label="3" @click.native.prevent="radioChange('3')">选择中心侧模型:</el-radio>
+              </div>
+              <div>
+                <el-select v-model="modelId" placeholder="请选择" popper-class="cpp-popper"
+                           :disabled="modelDisabled" @change="changeForecastModel">
+                  <el-option
+                      v-for="item in forecastModelList"
+                      :key="item.dictValue"
+                      :label="item.dictLabel"
+                      :value="item.dictValue">
+                  </el-option>
+                </el-select>
+              </div>
+            </div>
+            <div id="currentSelectFunction" style="display: none;margin-top: 30px;margin-left: 24px;"
+                 class="reg-config flex items-center">
               <div>当前选择策略:</div>
               <div>当前选择策略:</div>
               <div style="width: 215px">
               <div style="width: 215px">
                 {{ this.currentStrategy }}
                 {{ this.currentStrategy }}
               </div>
               </div>
               <div>
               <div>
                 <el-button @click="trialPreview">预览</el-button>
                 <el-button @click="trialPreview">预览</el-button>
-                <el-button @click="trialDelete">删除</el-button>
+                <el-button id="trialDeleteBtnId" @click="trialDelete" v-if="showDeleteButton">删除</el-button>
               </div>
               </div>
             </div>
             </div>
             <div slot="footer" class="reg-dialog-footer">
             <div slot="footer" class="reg-dialog-footer">
@@ -263,15 +280,19 @@ export default {
   name: 'inverterinfo',
   name: 'inverterinfo',
   data() {
   data() {
     return {
     return {
+      showDeleteButton:true,
       dqEndTime: '',
       dqEndTime: '',
       markLineData: new Array(),
       markLineData: new Array(),
       visualMapPieces: new Array(),
       visualMapPieces: new Array(),
       trialData: [],
       trialData: [],
-      disabled: true,
+      usualDisabled: true,
+      modelDisabled: true,
       vradio: '1',
       vradio: '1',
       buttons: new Array(),
       buttons: new Array(),
       usualId: '',
       usualId: '',
+      modelId: '',
       usualList: [],
       usualList: [],
+      forecastModelList: [],
       currentStrategy: '',
       currentStrategy: '',
       stationName: '',
       stationName: '',
       tkrq: '',
       tkrq: '',
@@ -487,6 +508,13 @@ export default {
   },
   },
   computed: {},
   computed: {},
   methods: {
   methods: {
+    // 中心侧预测模型选择
+    changeForecastModel(dictValue){
+      const item = this.forecastModelList.find(item => item.dictValue == dictValue)
+      let dictLabel = item ? item.dictLabel : ''
+      this.currentStrategy = dictLabel
+      document.getElementById("currentSelectFunction").style.display = ''
+    },
     // 策略名称下拉框选择
     // 策略名称下拉框选择
     changeUsualName(id) {
     changeUsualName(id) {
       const item = this.usualList.find(item => item.id == id)
       const item = this.usualList.find(item => item.id == id)
@@ -499,13 +527,37 @@ export default {
       this.currentStrategy = ''
       this.currentStrategy = ''
       this.trialData = []
       this.trialData = []
       if (radioValue == '1') {
       if (radioValue == '1') {
+        // 显示删除按钮
+        this.showDeleteButton = true
         this.vradio = '1'
         this.vradio = '1'
+        // 常用策略下拉框名称清空
         this.usualId = ''
         this.usualId = ''
-        this.disabled = true
-      } else {
+        // 常用策略下拉框不可用
+        this.usualDisabled = true
+        // 中心模型下拉框名称清空
+        this.modelId = ''
+        // 中心模型下拉框不可用
+        this.modelDisabled = true
+      }
+      else if (radioValue == '2') {
+        // 显示删除按钮
+        this.showDeleteButton = true
         this.vradio = '2'
         this.vradio = '2'
-        this.disabled = false
-
+        // 常用策略下拉框可用
+        this.usualDisabled = false
+        this.modelId = ''
+        // 中心模型下拉框不可用
+        this.modelDisabled = true
+      }
+      else if (radioValue == '3') {
+        // 隐藏删除按钮
+        this.showDeleteButton = false
+        this.vradio = '3'
+        this.usualId = ''
+        // 常用策略下拉框不可用
+        this.usualDisabled = true
+        // 中心模型下拉框可用
+        this.modelDisabled = false
       }
       }
     },
     },
     // 默认常用按钮事件
     // 默认常用按钮事件
@@ -518,6 +570,7 @@ export default {
     },
     },
     async executeTrial() {
     async executeTrial() {
       const param = {
       const param = {
+        "selectRadio": this.vradio,
         "usualName": this.currentStrategy,
         "usualName": this.currentStrategy,
         "stationCode": this.tableData[0].stationCode,
         "stationCode": this.tableData[0].stationCode,
         "time": new Date(this.tableData[0].forecastDate).getTime()
         "time": new Date(this.tableData[0].forecastDate).getTime()
@@ -570,22 +623,28 @@ export default {
         return
         return
       }
       }
       await this.executeTrial()
       await this.executeTrial()
-      // 将列表数据赋值给底层列表
-      this.tableData = this.trialData
-      // 将预算的调控曲线赋值给底层曲线上
-      let tkArray = new Array()
-      for (var i = 0; i < this.tableData.length; i++) {
-        let array = new Array()
-        array.push(this.tableData[i].time)
-        array.push(this.tableData[i].tkValue)
-        tkArray.push(array)
+      if (this.trialData.length==0){
+        this.$message.warning("此策略无数据,不能一键应用!")
+        return
+      }
+      else{
+        // 将列表数据赋值给底层列表
+        this.tableData = this.trialData
+        // 将预算的调控曲线赋值给底层曲线上
+        let tkArray = new Array()
+        for (var i = 0; i < this.tableData.length; i++) {
+          let array = new Array()
+          array.push(this.tableData[i].time)
+          array.push(this.tableData[i].tkValue)
+          tkArray.push(array)
+        }
+        this.tkData = tkArray
+        this.chartOption.series[1].data = this.tkData
+        this.chart.setOption(this.chartOption)
+        //再调用updatePosition
+        this.updatePosition()
+        this.cancelQuickUse()
       }
       }
-      this.tkData = tkArray
-      this.chartOption.series[1].data = this.tkData
-      this.chart.setOption(this.chartOption)
-      //再调用updatePosition
-      this.updatePosition()
-      this.cancelQuickUse()
     },
     },
     // 一键应用中取消按钮
     // 一键应用中取消按钮
     cancelQuickUse() {
     cancelQuickUse() {
@@ -594,7 +653,10 @@ export default {
       this.currentStrategy = ''
       this.currentStrategy = ''
       this.buttons = []
       this.buttons = []
       this.vradio = '1'
       this.vradio = '1'
-      this.disabled = true
+      this.usualDisabled = true
+      this.modelDisabled = true
+      this.usualId=''
+      this.modelId=''
       document.getElementById("currentSelectFunction").style.display = 'none'
       document.getElementById("currentSelectFunction").style.display = 'none'
     },
     },
     renderUsual() {
     renderUsual() {
@@ -603,7 +665,7 @@ export default {
       this.currentStrategy = ''
       this.currentStrategy = ''
       // 先获取常用下拉框
       // 先获取常用下拉框
       this.$axios.get('/dqUsualController/getUsualList').then(response => {
       this.$axios.get('/dqUsualController/getUsualList').then(response => {
-        this.usualList = response.data
+        this.usualList = response.data.tempShortUsualList
         if (this.usualList.length > 0) {
         if (this.usualList.length > 0) {
           // 循环list,将前5个给默认常用,将第1个默认选中下拉框
           // 循环list,将前5个给默认常用,将第1个默认选中下拉框
           for (let i = 0; i < this.usualList.length; i++) {
           for (let i = 0; i < this.usualList.length; i++) {
@@ -612,6 +674,7 @@ export default {
             }
             }
           }
           }
         }
         }
+        this.forecastModelList = response.data.forecastModelList
       })
       })
     },
     },
     quickUse() {
     quickUse() {
@@ -679,9 +742,16 @@ export default {
       }
       }
 
 
       if (this.tableData.length == 0) {
       if (this.tableData.length == 0) {
-        this.$message.warning("调控列表为空,不能操作!")
+        this.$message.warning("调控列表为空,不能调控!")
         return
         return
       }
       }
+      for (let i=0; i<this.tableData.length;i++){
+        if (this.tableData[i].tkValue>this.capacity){
+          this.$message.warning("列表中调控值存在超装机容量现象,不能调控!")
+          return
+        }
+      }
+
       const date = new Date(this.dateTime); // 如果long是毫秒
       const date = new Date(this.dateTime); // 如果long是毫秒
       const year = date.getFullYear();
       const year = date.getFullYear();
       const month = (date.getMonth() + 1).toString().padStart(2, '0');
       const month = (date.getMonth() + 1).toString().padStart(2, '0');
@@ -952,8 +1022,7 @@ export default {
 
 
 .reg-config-btu {
 .reg-config-btu {
   width: 215px;
   width: 215px;
-  //height: 190px;
-  margin-top: 5px;
+//height: 190px; margin-top: 5px;
 }
 }
 
 
 .reg-dialog-footer {
 .reg-dialog-footer {
@@ -966,12 +1035,15 @@ export default {
 /deep/ .reg-config-btu .el-button:first-child {
 /deep/ .reg-config-btu .el-button:first-child {
   margin-top: 5px;
   margin-top: 5px;
 }
 }
+
 /deep/ .reg-config-btu .el-button {
 /deep/ .reg-config-btu .el-button {
   margin-top: 10px;
   margin-top: 10px;
 }
 }
+
 /deep/ .reg-config-btu .el-button:last-child {
 /deep/ .reg-config-btu .el-button:last-child {
   margin-bottom: 10px;
   margin-bottom: 10px;
 }
 }
+
 /deep/ .reg-config-btu .el-button + .el-button {
 /deep/ .reg-config-btu .el-button + .el-button {
   margin-left: 0px;
   margin-left: 0px;
 }
 }