소스 검색

风机信息管理

xusl 7 달 전
부모
커밋
e3aff68b4b

+ 3 - 3
cpp-admin/src/main/java/com/cpp/web/controller/configManager/InverterInfoController.java

@@ -1,7 +1,6 @@
 package com.cpp.web.controller.configManager;
 
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.IoUtil;
 import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.StrUtil;
@@ -25,7 +24,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 import java.io.InputStream;
-import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -254,9 +252,11 @@ public class InverterInfoController {
                 }
                 inverterInfoService.saveBatch(inverterInfoList);
             }
+            else{
+                return R.fail("文件内容为空");
+            }
         } catch (Exception e) {
             e.printStackTrace();
-//            log.error("导入风机信息文件失败",e);
             return R.fail("导入逆变器信息文件失败");
         }
         return R.ok();

+ 303 - 0
cpp-admin/src/main/java/com/cpp/web/controller/configManager/WindTurbineInfoController.java

@@ -0,0 +1,303 @@
+package com.cpp.web.controller.configManager;
+
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.core.util.NumberUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.poi.excel.ExcelReader;
+import cn.hutool.poi.excel.ExcelUtil;
+import cn.hutool.poi.excel.ExcelWriter;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cpp.common.core.domain.R;
+import com.cpp.web.domain.station.ElectricField;
+import com.cpp.web.domain.station.WindTurbineInfo;
+import com.cpp.web.service.station.ElectricFieldService;
+import com.cpp.web.service.station.WindTurbineInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.URLEncoder;
+import java.util.*;
+import java.util.stream.Collectors;
+
+
+/**
+ * idp_wind_turbine_info
+ *
+ * @author whc
+ * @date 2022-03-18 15:50:00
+ */
+@RestController
+@RequiredArgsConstructor
+@RequestMapping("/windturbineinfo")
+@Slf4j
+@Api(value = "windturbineinfo", tags = "idp_wind_turbine_info管理")
+public class WindTurbineInfoController {
+    @Autowired
+    WindTurbineInfoService windTurbineInfoService;
+    @Autowired
+    ElectricFieldService electricFieldService;
+
+    /**
+     * 分页查询
+     *
+     * @param page            分页对象
+     * @param windTurbineInfo idp_wind_turbine_info
+     * @return
+     */
+    @ApiOperation(value = "分页查询", notes = "分页查询")
+    @GetMapping("/page")
+    public R getWindTurbineInfoPage(Page page, WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.page(page, Wrappers.query(windTurbineInfo)));
+    }
+
+    /**
+     * 根据场站编号分页查询
+     *
+     * @param currentPage
+     * @param pageSize
+     * @param stationCode
+     * @return
+     */
+    @ApiOperation(value = "根据场站编号分页查询", notes = "分页查询")
+    @GetMapping("/getByStationCode")
+    public R getByStationCode(Long currentPage, Long pageSize, String stationCode) {
+        Page page = new Page(currentPage, pageSize);
+        page.setMaxLimit((long) -1);
+        return R.ok(windTurbineInfoService.page(page, windTurbineInfoService.getByStationCode(stationCode)));
+    }
+
+    /**
+     * 通过id查询idp_wind_turbine_info
+     *
+     * @param id id
+     * @return R
+     */
+    @ApiOperation(value = "通过id查询", notes = "通过id查询")
+    @GetMapping("/{id}")
+    public R getById(@PathVariable("id") String id) {
+        return R.ok(windTurbineInfoService.getById(id));
+    }
+
+    /**
+     * 新增idp_wind_turbine_info
+     *
+     * @param windTurbineInfo idp_wind_turbine_info
+     * @return R
+     */
+    @ApiOperation(value = "新增idp_wind_turbine_info", notes = "新增idp_wind_turbine_info")
+    @PostMapping("/save")
+    public R save(@RequestBody WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.save(windTurbineInfo));
+    }
+
+    /**
+     * 修改idp_wind_turbine_info
+     *
+     * @param windTurbineInfo idp_wind_turbine_info
+     * @return R
+     */
+    @ApiOperation(value = "修改idp_wind_turbine_info", notes = "修改idp_wind_turbine_info")
+    @PostMapping("/updateById")
+    public R updateById(@RequestBody WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.updateById(windTurbineInfo));
+    }
+
+    /**
+     * 通过id删除idp_wind_turbine_info
+     *
+     * @param
+     * @return R
+     */
+    @ApiOperation(value = "通过id删除idp_wind_turbine_info", notes = "通过id删除idp_wind_turbine_info")
+    @PostMapping("/remove")
+    public R removeById(@RequestBody WindTurbineInfo windTurbineInfo) {
+        return R.ok(windTurbineInfoService.removeById(windTurbineInfo.getId()));
+    }
+
+    /**
+     * 根据场站编号查询 返回map格式
+     *
+     * @param stationCode
+     * @return
+     */
+    @ApiOperation(value = "根据场站编号查询", notes = "分页查询")
+    @PostMapping("/findByStationCode")
+    public R findByStationCode(String stationCode) {
+        List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.findByStationCode(stationCode);
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (WindTurbineInfo e : windTurbineInfoList) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("label", e.getName());
+            map.put("value", e.getId());
+            list.add(map);
+        }
+        return R.ok(list);
+    }
+
+    @GetMapping("/all")
+    public R findAll() {
+        List<WindTurbineInfo> windTurbineInfoList = windTurbineInfoService.list();
+        List<Map<String, String>> list = new ArrayList<>();
+        for (WindTurbineInfo w : windTurbineInfoList) {
+            Map<String, String> map = new HashMap<>();
+            map.put("label", w.getName());
+            map.put("value", w.getId()+"");
+            list.add(map);
+        }
+        return R.ok(list);
+    }
+
+
+    @GetMapping(value = {"/exportTemplateEvent" })
+    public R exportTemplateEvent(HttpServletResponse response) {
+        try {
+            ExcelWriter writer = ExcelUtil.getWriter(true);
+            writer.renameSheet(0, "风机信息");
+            List<String> headFieldName = Arrays.asList("场站编号","设备名称","制造商","型号","是否样板(1=>是,0=>否)","经度","纬度");
+            List<List<String>> rowHeather = CollUtil.newArrayList();
+            rowHeather.add(headFieldName);
+            writer.write(rowHeather, true);
+            String fileName = "风机信息"+ ".xlsx";
+            response.setContentType("application/x-msdownload;charset=utf-8");
+            response.setHeader("Content-disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
+            ServletOutputStream out = null;
+            out = response.getOutputStream();
+            writer.flush(out, true);
+            // 关闭writer,释放内存
+            writer.close();
+            //此处记得关闭输出Servlet流
+            IoUtil.close(out);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return R.ok();
+    }
+
+    /**
+     * 上传升级文件
+     */
+    @PostMapping(value = "/uploadFjTemplate")
+    public R uploadFjTemplate(@RequestParam(value="file") MultipartFile file){
+        try (InputStream inputStream = file.getInputStream();) {
+            ExcelReader excelReader = ExcelUtil.getReader(inputStream, 0);
+            List<Map<String, Object>> readAll = excelReader.readAll();
+            if (readAll.size() > 0) {
+                List<List<Object>> newList = new ArrayList<>();
+                for (Map<String, Object> row : readAll) {
+                    Iterator<Map.Entry<String, Object>> rowMap = row.entrySet().iterator();
+                    List<Object> tempList = new ArrayList<>();
+                    while (rowMap.hasNext()) {
+                        Map.Entry<String, Object> entry = rowMap.next();
+                        if (entry.getValue() == null) {
+                            tempList.add("");
+                        } else {
+                            tempList.add(entry.getValue());
+                        }
+                    }
+                    newList.add(tempList);
+                }
+                List<ElectricField> electricFieldList = electricFieldService.list();
+                List<WindTurbineInfo> windTurbineInfoList = new ArrayList<>();
+                for (int i = 0; i < newList.size(); i++) {
+                    List<Object> objects = newList.get(i);
+                    WindTurbineInfo windTurbineInfo = new WindTurbineInfo();
+                    // 验证模板内容
+                    if (StrUtil.isBlankIfStr(objects.get(0))) {
+                        return R.fail("第" + (i + 1) + "行,场站编号不能为空!");
+                    } else {
+                        // 判断库中是否存在该编号
+                        List<ElectricField> collect = electricFieldList.stream().filter(t -> t.getStationCode().equals(objects.get(0).toString().trim())).collect(Collectors.toList());
+                        if (collect.isEmpty()) {
+                            return R.fail("第" + (i + 1) + "行,场站编号不存在!");
+                        } else {
+                            windTurbineInfo.setStationCode(objects.get(0).toString().trim());
+                        }
+                    }
+
+                    if (StrUtil.isBlankIfStr(objects.get(1))) {
+                        return R.fail("第" + (i + 1) + "行,设备名称不能为空!");
+                    } else {
+                        windTurbineInfo.setName(objects.get(1).toString().trim());
+                    }
+                    if (StrUtil.isBlankIfStr(objects.get(2))) {
+                        return R.fail("第" + (i + 1) + "行,制造商不能为空!");
+                    } else {
+                        windTurbineInfo.setManufacturer(objects.get(2).toString().trim());
+                    }
+
+                    if (StrUtil.isBlankIfStr(objects.get(3))) {
+                        return R.fail("第" + (i + 1) + "行,型号不能为空!");
+                    } else {
+                        windTurbineInfo.setModelNumber(objects.get(3).toString().trim());
+                    }
+
+                    if (StrUtil.isBlankIfStr(objects.get(4))) {
+                        return R.fail("第" + (i + 1) + "行,是否样板不能为空!");
+                    } else {
+                        if (NumberUtil.isNumber(objects.get(4).toString().trim())) {
+                            windTurbineInfo.setSample(objects.get(4).toString().trim());
+                        } else {
+                            return R.fail("第" + (i + 1) + "行,是否样板不是数值!");
+                        }
+                    }
+
+                    if (StrUtil.isBlankIfStr(objects.get(5))) {
+                        return R.fail("第" + (i + 1) + "行,经度不能为空!");
+                    } else {
+                        String a="^\\d+(\\.\\d{1,6})?$";
+                        String b="^-?((0|1?[0-9]?[0-9]?)(([.][0-9]{1,10})?)|180(([.][0]{1,10})?))$";
+                        if (objects.get(5).toString().trim().matches(a)) {
+                            if (objects.get(5).toString().trim().matches(b)) {
+                                windTurbineInfo.setLongitude(new BigDecimal(objects.get(5).toString().trim()));
+                            }
+                            else{
+                                return R.fail("第" + (i + 1) + "行,请输入正确的经度!");
+                            }
+                        } else {
+                            return R.fail("第" + (i + 1) + "行,经度只能输入正数数字或带小数点6位以内的数字!");
+                        }
+                    }
+
+                    if (StrUtil.isBlankIfStr(objects.get(6))) {
+                        return R.fail("第" + (i + 1) + "行,纬度不能为空!");
+                    } else {
+                        String a="^\\d+(\\.\\d{1,6})?$";
+                        String b="^-?((0|[0-5]?[0-9]?)(([.][0-9]{1,10})?)|90(([.][0]{1,10})?))$";
+                        if (objects.get(6).toString().trim().matches(a)) {
+                            if (objects.get(6).toString().trim().matches(b)) {
+                                windTurbineInfo.setLatitude(new BigDecimal(objects.get(6).toString().trim()));
+                            }
+                            else{
+                                return R.fail("第" + (i + 1) + "行,请输入正确的纬度!");
+                            }
+                        } else {
+                            return R.fail("第" + (i + 1) + "行,经度只能输入正数数字或带小数点6位以内的数字!");
+                        }
+                    }
+                    windTurbineInfoList.add(windTurbineInfo);
+                }
+                windTurbineInfoService.saveBatch(windTurbineInfoList);
+            }
+            else{
+                return R.fail("文件内容为空");
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.fail("导入风机信息文件失败");
+        }
+        return R.ok();
+    }
+}

+ 5 - 186
cpp-admin/src/main/java/com/cpp/web/domain/station/WindTurbineInfo.java

@@ -13,6 +13,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.validation.constraints.Digits;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -28,52 +29,6 @@ import java.util.Date;
 @ApiModel(value = "cpp_wind_turbine_info")
 public class WindTurbineInfo extends BaseCppEntity {
 
-    public WindTurbineInfo() {
-        this.setEquipmentType(EquipmentTypeEnum.WINDTURBINE.getCode());
-    }
-
-    /**
-     * 备用字段A
-     */
-    @ApiModelProperty(value = "备用字段A")
-    private String backupA;
-
-
-    /**
-     * 备用字段B
-     */
-    @ApiModelProperty(value = "备用字段B")
-    private String backupB;
-
-
-    /**
-     * 备用字段C
-     */
-    @ApiModelProperty(value = "备用字段C")
-    private String backupC;
-
-
-    /**
-     * 备用字段D
-     */
-    @ApiModelProperty(value = "备用字段D")
-    private String backupD;
-
-
-    /**
-     * 备用字段E
-     */
-    @ApiModelProperty(value = "备用字段E")
-    private String backupE;
-
-
-    /**
-     * 设备类型
-     */
-    @ApiModelProperty(value = "设备类型")
-    private Integer equipmentType;
-
-
     /**
      * 名称
      */
@@ -94,125 +49,6 @@ public class WindTurbineInfo extends BaseCppEntity {
     @ApiModelProperty(value = "型号")
     private String modelNumber;
 
-
-    /**
-     * 安装时间
-     */
-    @ApiModelProperty(value = "安装时间")
-    private Date installationTime;
-
-
-    /**
-     * 是否上报 1:是 0 否
-     */
-    @ApiModelProperty(value = "是否上报 1:是 0 否")
-    private String report;
-
-
-    /**
-     * 入库时间间隔 单位 s
-     */
-    @ApiModelProperty(value = "入库时间间隔 单位 s")
-    private Integer timeInterval;
-
-    /**
-     * 风机等级
-     */
-    @ApiModelProperty(value = "风机等级")
-    private Integer grade;
-
-
-    /**
-     * 设计空气密度
-     */
-    @ApiModelProperty(value = "设计空气密度")
-    private BigDecimal airDensity = new BigDecimal(-99);
-
-
-    /**
-     * 切入速度
-     */
-    @ApiModelProperty(value = "切入速度")
-    private BigDecimal cutInSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 额定风速
-     */
-    @ApiModelProperty(value = "额定风速")
-    private BigDecimal ratedWindSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 切出速度
-     */
-    @ApiModelProperty(value = "切出速度")
-    private BigDecimal cutOutSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 生存风速
-     */
-    @ApiModelProperty(value = "生存风速")
-    private BigDecimal liveWindSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 叶轮直径(m)
-     */
-    @ApiModelProperty(value = "叶轮直径(m)")
-    private BigDecimal windWheelDiameter = new BigDecimal(-99);
-
-
-    /**
-     * 最大转速(m)
-     */
-    @ApiModelProperty(value = "最大转速(m)")
-    private BigDecimal windWheelMaxSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 最小转速(m)
-     */
-    @ApiModelProperty(value = "最小转速(m)")
-    private BigDecimal windWheelMinSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 额定转速(m)
-     */
-    @ApiModelProperty(value = "额定转速(m)")
-    private BigDecimal windWheelRatedSpeed = new BigDecimal(-99);
-
-
-    /**
-     * 轮毂高度(m)
-     */
-    @ApiModelProperty(value = "轮毂高度(m)")
-    private BigDecimal hubHeight = new BigDecimal(-99);
-
-
-    /**
-     * 并网日期(m)
-     */
-    @ApiModelProperty(value = "并网日期")
-    private Date parallelInDate;
-
-
-    /**
-     * 使用寿命
-     */
-    @ApiModelProperty(value = "使用寿命")
-    private BigDecimal lifeLength = new BigDecimal(-99);
-
-
-    /**
-     * 最大功率
-     */
-    @ApiModelProperty(value = "最大功率")
-    private BigDecimal maxPower = new BigDecimal(-99);
-
-
     /**
      * 风机是否样板机 1:是 0:否
      */
@@ -224,32 +60,15 @@ public class WindTurbineInfo extends BaseCppEntity {
      * 经度
      */
     @ApiModelProperty(value = "经度")
-    private BigDecimal longitude = new BigDecimal(-99);
+    @Digits(integer = 10, fraction = 6)
+    private BigDecimal longitude;
 
 
     /**
      * 纬度
      */
     @ApiModelProperty(value = "纬度")
-    private BigDecimal latitude = new BigDecimal(-99);
-
-
-    /**
-     * 集电线路
-     */
-    @ApiModelProperty(value = "集电线路")
-    private String collectorCircuit;
+    @Digits(integer = 10, fraction = 6)
+    private BigDecimal latitude;
 
-
-    /**
-     * 分期
-     */
-    @ApiModelProperty(value = "分期")
-    private String divideIntoDifferentPeriod;
-
-    /**
-     * 绑定数据采集通道
-     */
-    @ApiModelProperty(value = "绑定数据采集通道")
-    private String bindTunnel;
 }

+ 482 - 0
cpp-ui/src/views/configManager/windturbineinfo/index.vue

@@ -0,0 +1,482 @@
+<template>
+  <div class="app-container">
+    <el-form ref="queryForm" size="small" :inline="true">
+      <el-form-item label="场站名称">
+        <el-select v-model="stationCode" placeholder="请选择" @change="stationChange">
+          <el-option
+            v-for="item in stationList"
+            :key="item.value"
+            :label="item.label"
+            :value="item.value">
+          </el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" size="mini" style="margin-left: 5px" icon="el-icon-search" @click="dataQuery">查询
+        </el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+        >新增
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          @click="handleUpdate"
+        >修改
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          @click="handleDelete"
+        >删除
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="exportTemplateEvent"
+        >风机模板下载
+        </el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-upload
+          :auto-upload="true"
+          ref="uploadFjTemplate"
+          action="/inverterinfo/uploadFjTemplate"
+          :http-request="dataUpload"
+          :on-change="beforeUpload"
+          :on-error="onError"
+          :file-list="fileList"
+          :show-file-list="false"
+        >
+          <el-button type="info" plain size="mini" :loading="loading">风机模板导入</el-button>
+        </el-upload>
+      </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
+        max-height="700"
+        :data="tableData"
+        :radio-config="{trigger: 'row'}">
+        <vxe-column type="radio" width="60"/>
+        <vxe-table-column field="stationCode" title="所属场站" :formatter="stationCodeFormat"></vxe-table-column>
+        <vxe-table-column field="name" title="设备名称"></vxe-table-column>
+        <vxe-table-column field="manufacturer" title="制造商"></vxe-table-column>
+        <vxe-table-column field="modelNumber" title="型号"></vxe-table-column>
+        <vxe-table-column field="sample" title="是否样板机" :formatter="yesNoFormat"></vxe-table-column>
+        <vxe-table-column field="longitude" title="经度"></vxe-table-column>
+        <vxe-table-column field="latitude" title="纬度"></vxe-table-column>
+      </vxe-table>
+      <vxe-pager
+        background
+        :loading="loading"
+        :current-page.sync="currentPage"
+        :page-size.sync="pageSize"
+        :total="total"
+        @page-change="handlePageChange"
+        :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="750px" height="600px">
+      <el-form ref="form" :model="form" :rules="rules" width="730px" label-width="130px">
+        <el-row class="mb4">
+          <el-col :span="12">
+            <el-form-item label="所属场站" prop="stationCode">
+              <el-select
+                v-model="form.stationCode"
+                placeholder="请选择"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in this.stationList"
+                  :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="name">
+              <el-input style="width: 100%" v-model="form.name" maxlength="50"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="mb4">
+          <el-col :span="12">
+            <el-form-item label="制造商" prop="manufacturer">
+              <el-input style="width: 100%" v-model="form.manufacturer" maxlength="50"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="型号" prop="modelNumber">
+              <el-input style="width: 100%" v-model="form.modelNumber" maxlength="50"/>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="mb4">
+          <el-col :span="12">
+            <el-form-item label="是否样板机" prop="sample">
+              <el-select
+                v-model="form.sample"
+                placeholder="请选择"
+                style="width: 100%"
+              >
+                <el-option
+                  v-for="item in this.yesNoOptions"
+                  :key="item.value"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+          </el-col>
+        </el-row>
+        <el-row class="mb4">
+          <el-col :span="12">
+            <el-form-item label="经度:" prop="longitude">
+              <el-input v-model="form.longitude" maxlength="10"/>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="纬度:" prop="latitude">
+              <el-input v-model="form.latitude" maxlength="10"/>
+            </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>
+</template>
+
+
+<script>
+export default {
+  name: 'inverterinfo',
+  data() {
+    return {
+      form: {
+        stationCode: undefined,
+        name: undefined,
+        manufacturer: undefined,
+        modelNumber: undefined,
+        sample: undefined,
+        longitude: undefined,
+        latitude: undefined
+      },
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      edit: false,
+      total: 0,
+      sortOrder: 'asc',
+      pageSize: 10,
+      currentPage: 1,
+      stationList: [],
+      stationCode: [],
+      searchForm: {},
+      tableData: [],
+      loading: false,
+      modId: '',//备用id
+      yesNoOptions: [
+        {value: '0', label: '不是'},
+        {value: '1', label: '是'}
+      ],
+      // 表单校验
+      rules: {
+        stationCode: [
+          {required: true, message: "所属场站不能为空", trigger: "blur"}
+        ],
+        name: [
+          {required: true, message: "设备名称不能为空", trigger: "blur"}
+        ],
+        manufacturer: [
+          {required: true, message: "制造商不能为空", trigger: "blur"}
+        ],
+        modelNumber: [
+          {required: true, message: "型号不能为空", trigger: "blur"}
+        ],
+        sample: [
+          {required: true, message: "是否样板不能为空", trigger: "blur"}
+        ],
+        longitude: [
+          {required: true, message: '经度不能为空'},
+          {pattern: /^\d+(\.\d{1,6})?$/, message: '只能输入正数数字或带小数点6位以内的数字'},
+          {pattern: /^-?((0|1?[0-9]?[0-9]?)(([.][0-9]{1,10})?)|180(([.][0]{1,10})?))$/, message: '请输入正确的经度'},
+          {validator: this.validateCoordinatesLongitude, trigger: "blur"}
+        ],
+        latitude: [
+          {required: true, message: '纬度不能为空'},
+          {pattern: /^\d+(\.\d{1,6})?$/, message: '只能输入正数数字或带小数点6位以内的数字'},
+          {pattern: /^-?((0|[0-5]?[0-9]?)(([.][0-9]{1,10})?)|90(([.][0]{1,10})?))$/, message: '请输入正确的纬度'},
+          {validator: this.validateCoordinatesLatitude, trigger: "blur"}
+        ],
+      },
+      fileList: [],
+    }
+  },
+  mounted() {
+    this.getStationCode()
+  },
+  computed: {},
+  methods: {
+    validateCoordinatesLongitude(rule, value, callback) {
+      // 验证经度范围:73.66 到 135.05
+      if (this.form.longitude < 73.66 || this.form.longitude > 135.05) {
+        callback(new Error("请输入有效的经度"));
+      } else {
+        callback();
+      }
+    },
+    validateCoordinatesLatitude(rule, value, callback) {
+      // 纬度范围:3.86 ~ 53.55
+      if (this.form.latitude < 3.86 || this.form.latitude > 53.55) {
+        callback(new Error("请输入有效的纬度"));
+      } else {
+        callback();
+      }
+    },
+    dataUpload(item) {
+      const formData = new FormData()
+      formData.append('file', item.file)
+
+      this.$axios({
+        url: '/windturbineinfo/uploadFjTemplate',
+        method: 'post',
+        //删除默认的Content-Type
+        transformRequest: [(data, headers) => {
+          delete headers.post['Content-Type']
+          return data
+        }],
+        data: formData
+      }).then((response) => {
+        this.stationChange()
+        this.dataQuery()
+        this.$message.success("导入成功")
+      }).catch((error) => {
+        this.$message.error("导入失败" + error)
+      })
+    },
+    onError(err, file, fileList) {
+      console.log(JSON.parse(err.message).msg)
+      alert('失败')
+    },
+    beforeUpload(file, fileList) {
+      if (fileList.length > 1) {
+        // 移除旧文件
+        this.fileList = [file];
+      } else {
+        this.fileList = fileList;
+      }
+      let index = file.name.lastIndexOf(".");
+      let suffixName = file.name.substr(index + 1);
+      if (suffixName == 'xls' || suffixName == 'xlsx') {
+        return true
+      } else {
+        this.$message({
+          type: 'warning',
+          message: '请导入excel模板文件!'
+        })
+        this.fileList = []
+        return false
+      }
+    },
+    exportTemplateEvent() {
+      this.$axios.get("/windturbineinfo/exportTemplateEvent/", {
+        responseType: 'blob'// 用于解决中文乱码
+      }).then((response) => {
+        this.loading = false
+      }).catch((error) => {
+        this.loading = false
+        this.$message.error('下载模板失败' + error)
+      })
+    },
+    // 表单重置
+    reset() {
+      this.edit = false;
+      this.form = {
+        stationCode: undefined,
+        name: undefined,
+        manufacturer: undefined,
+        modelNumber: undefined,
+        sample: undefined,
+        longitude: undefined,
+        latitude: undefined
+      },
+        this.resetForm("form");
+    },
+    // 取消按钮
+    cancelChannel() {
+      this.open = false;
+      this.reset();
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "新增风机信息";
+      this.edit = false;
+    },
+    /** 修改按钮操作 */
+    handleUpdate() {
+      this.title = "修改风机信息";
+      this.reset();
+      const _selectData = this.$refs.xTable.getRadioRecord(true)
+      if (_selectData == null) {
+        this.$message({
+          type: 'warning',
+          message: '请选择记录!'
+        });
+        return
+      }
+      this.open = true;
+      this.edit = true;
+      this.form = JSON.parse(JSON.stringify(_selectData))
+    },
+    // 提交按钮
+    commitChannel() {
+      this.$refs["form"].validate(async valid => {
+        if (valid) {
+          if (this.form.id != undefined) {
+            // 更新操作
+            this.$axios.post('/windturbineinfo/updateById', this.form).then((res) => {
+              this.$message.success('修改成功')
+              this.open = false;
+              this.stationChange()
+              this.dataQuery()
+            }).catch((error) => {
+            })
+          } else {
+            // 新增操作
+            this.$axios.post('/windturbineinfo/save', this.form).then((res) => {
+              if (res == undefined) {
+                this.$message.success('新增失败')
+              } else {
+                this.$message.success('新增成功')
+                this.stationChange()
+                this.dataQuery()
+                this.open = false;
+              }
+            }).catch((error) => {
+            })
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete() {
+      const _selectData = this.$refs.xTable.getRadioRecord(true)
+      if (_selectData == null) {
+        this.$message({
+          type: 'warning',
+          message: '请选择记录!'
+        });
+        return
+      }
+
+      this.$confirm('是否确认删除?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.doDelete(_selectData)
+      }).catch(() => {
+      });
+    },
+    /**
+     * 删除提交
+     */
+    doDelete(row) {
+      this.$axios.post('/windturbineinfo/remove', row).then((res) => {
+        this.$message.success('删除成功!')
+        this.stationChange()
+        this.dataQuery()
+      }).catch((error) => {
+      })
+      this.loading = false
+    },
+    stationChange() {
+      this.currentPage = 1
+      this.pageSize = 10
+    },
+    stationCodeFormat({cellValue, row, column}) {
+      const item = this.stationList.find(item => item.value === cellValue)
+      return item ? item.label : ''
+    },
+    yesNoFormat({cellValue, row, column}) {
+      if (cellValue == 0) {
+        return '不是'
+      } else {
+        return '是'
+      }
+    },
+    handlePageChange({currentPage, pageSize}) {
+      this.currentPage = currentPage
+      this.pageSize = pageSize
+      this.dataQuery();
+    },
+    dataQuery() {
+      this.loading = true
+      const param = {
+        "currentPage": this.currentPage,
+        "pageSize": this.pageSize,
+        "stationCode": this.stationCode
+      }
+
+      this.$axios.get('/windturbineinfo/getByStationCode', {params: param}).then(response => {
+        this.tableData = response.data.records
+        this.page.total = response.data.total
+        this.loading = false
+      }).catch(() => {
+        this.loading = false
+      })
+    },
+    getStationCode() {
+      this.$axios({url: '/electricfield/all', method: 'get'}).then(response => {
+        this.stationList = response.data
+        if (this.stationList.length > 0) {
+          this.stationCode = this.stationList[0].value
+          this.dataQuery()
+        }
+      })
+    },
+  }
+}
+</script>