Procházet zdrojové kódy

台账管理页面+地图修改

rui.jiang před 1 rokem
rodič
revize
125649ea3c

+ 218 - 22
src/api/ledger.js

@@ -2,26 +2,222 @@ import request from "@/utils/request";
 
 // 查询
 export function getAllWindCompany(data) {
-    return request({
-      url: "/energy-manage-service/api/wind/company/getAllWindCompany",
-      method: "post",
-      data,
-    });
-  }
+  return request({
+    url: "/energy-manage-service/api/wind/company/getAllWindCompany",
+    method: "post",
+    data,
+  });
+}
 // 新增
-  export function addCompany(data) {
-    return request({
-      url: "/energy-manage-service/api/wind/company/addCompany",
-      method: "post",
-      data,
-    });
-  }
-
-  // 更改状态
-  export function updateStateCompany(data) {
-    return request({
-      url: "/energy-manage-service/api/wind/company/updateStateCompany",
-      method: "post",
-      data,
-    });
-  }
+export function addCompany(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/company/addCompany",
+    method: "post",
+    data,
+  });
+}
+// 编辑
+export function updateCompany(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/company/updateCompany",
+    method: "post",
+    data,
+  });
+}
+// 更改状态
+export function updateStateCompany(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/company/updateStateCompany",
+    method: "post",
+    data,
+  });
+}
+
+
+// 省
+export function findAllProvince(data) {
+  return request({
+    url: "/energy-manage-service/api/area/findAllProvince",
+    method: "post",
+    data,
+  });
+}
+
+
+// 省
+export function getCitiesByPId(data) {
+  return request({
+    url: "/energy-manage-service/api/area/getCitiesByPId",
+    method: "get",
+    data,
+  });
+}
+
+//编辑回显
+export function getWindCompany(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/company/getWindCompany",
+    method: "post",
+    data,
+  });
+}
+
+//删除
+export function delCompany(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/company/delCompany",
+    method: "post",
+    data,
+  });
+}
+// .........................测风塔页面
+// 查询
+export function getAnemometerTowerPage(data) {
+  return request({
+    url: "/energy-manage-service/api/anemometer/tower/getAnemometerTowerPage",
+    method: "post",
+    data,
+  });
+}
+// 创建测风塔
+export function createAnemometerTower(data) {
+  return request({
+    url: "/energy-manage-service/api/anemometer/tower/createAnemometerTower",
+    method: "post",
+    data,
+  });
+}
+
+// 更新测风塔
+export function updateAnemometerTower(data) {
+  return request({
+    url: "/energy-manage-service/api/anemometer/tower/updateAnemometerTower",
+    method: "post",
+    data,
+  });
+}
+
+// 查看详情
+export function getAnemometerTower(data) {
+  return request({
+    url: "/energy-manage-service/api/anemometer/tower/getAnemometerTower",
+    method: "post",
+    data,
+  });
+}
+
+// 测风塔状态
+export function updateAnemometerTowerState(data) {
+  return request({
+    url: "/energy-manage-service/api/anemometer/tower/updateAnemometerTowerState",
+    method: "post",
+    data,
+  });
+}
+
+// 删除测风塔
+export function delAnemometerTower(data) {
+  return request({
+    url: "/energy-manage-service/api/anemometer/tower/delAnemometerTower",
+    method: "post",
+    data,
+  });
+}
+
+// .....................机型信息
+// 查询
+export function windEngineMillPage(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/mill/windEngineMillPage",
+    method: "post",
+    data,
+  });
+}
+
+// 更改状态/修改
+export function updateWindEngineMill(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/mill/updateWindEngineMill",
+    method: "post",
+    data,
+  });
+}
+
+// 获取机型类型
+export function getDictList(data) {
+  return request({
+    url: "/energy-manage-service/dict/getDictList",
+    method: "post",
+    data,
+  });
+}
+// 创建机型
+export function createEngineMill(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/mill/createEngineMill",
+    method: "post",
+    data,
+  });
+}
+
+// 删除机型
+export function delWindEngineMill(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/mill/delWindEngineMill",
+    method: "post",
+    data,
+  });
+}
+
+// 机型详情
+export function getWindEngineMillPageVo(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/mill/getWindEngineMillPageVo",
+    method: "post",
+    data,
+  });
+}
+// 
+// 风机查询
+export function windEngineGrouPage(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/group/windEngineGrouPage",
+    method: "post",
+    data,
+  });
+}
+// 风机状态
+export function updateStateWindEngineGroup(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/group/updateStateWindEngineGroup",
+    method: "post",
+    data,
+  });
+}
+
+// 风机详情
+export function getWindEngineGroup(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/group/getWindEngineGroup",
+    method: "post",
+    data,
+  });
+}
+
+// 获取风场
+export function WindFieldListPage(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/field/WindFieldListPage",
+    method: "post",
+    data,
+  });
+}
+
+// 删除风机
+export function delWindEngineGroup(data) {
+  return request({
+    url: "/energy-manage-service/api/wind/engine/group/delWindEngineGroup",
+    method: "post",
+    data,
+  });
+}

+ 5 - 3
src/components/map/index.vue

@@ -21,6 +21,7 @@ import { Icon, Style } from "ol/style";
 import ZoomSlider from 'ol/control/ZoomSlider.js';
 import {defaults as defaultControls} from 'ol/control.js';
 import icon from "../../assets/location.png";
+import icon2 from "../../assets/location.png"; //这只是一个演示  具体图片自己去定义
 export default {
     name: "T-map",
     mounted() {
@@ -70,14 +71,15 @@ export default {
             // });
 
             const feature= new Feature ({
-                geometry: new Point(fromLonLat(data.point),'EPSG:4326'),
+                geometry: new Point(fromLonLat(data.point,'EPSG:4326')),
                 name:"marker",
                 data,
             })
             feature.setStyle(
                 new Style({
                     image: new Icon({
-                        src: icon,
+                        // src: this.$route.name === 'Index' ? icon : icon2,    //昨天说的不同图标可以在这里加判断,这里也只是一个演示 根据路由加载不同图标
+                        src:icon,
                         scale: [0.3, 0.3],
                         anchor: [0.5, 1],
                         opacity: 1,
@@ -113,7 +115,7 @@ export default {
          */
         moveAndZoom(data = { point: [120.2, 30.35], zoom: 10 }) {
             this.map.getView().animate({
-                center: fromLonLat(data.point),
+                center: fromLonLat(data.point,'EPSG:4326'),
                 zoom: data.zoom,
                 duration: 2000,
             });

+ 11 - 0
src/main.js

@@ -29,6 +29,17 @@ if (store.state.auth.userInfo.permission !== undefined) {
     router,
   });
 }
+
+// 时间转换
+Vue.prototype.$formatDate = function(date) {
+  const year = date.getFullYear();
+  const month = (date.getMonth() + 1).toString().padStart(2, '0'); // Adding 1 to month since it's zero-based
+  const day = date.getDate().toString().padStart(2, '0');
+
+  
+  return `${year}-${month}-${day}`;
+};
+
 new Vue({
   router,
   store,

+ 12 - 13
src/views/admin/cockpitManage/Index.vue

@@ -1,14 +1,10 @@
 <template>
   <div class="map-ditu">
-    <Tmap ref="map"></Tmap>
+    <Tmap ref="map" @feature-click="featureClick"></Tmap>
     <div class="ledata">
       <el-input v-model="treeval" @focus="showTree = true"></el-input>
       <div class="Showtree">
-        <el-tree
-          v-if="showTree"
-          :data="treeData"
-          @node-click="handleNodeClick"
-        ></el-tree>
+        <el-tree v-if="showTree" :data="treeData" @node-click="handleNodeClick"></el-tree>
       </div>
 
       <p><span class="SpText">风场总数:</span>20 个</p>
@@ -21,12 +17,7 @@
         <span class="yellow"></span>
         <span class="green"></span>
       </p>
-      <el-switch
-        v-model="value1"
-        active-text="显示"
-        inactive-text="隐藏"
-        @change="handleSwitchChange"
-      >
+      <el-switch v-model="value1" active-text="显示" inactive-text="隐藏" @change="handleSwitchChange">
       </el-switch>
     </div>
     <Rightdata v-show="ShowRi" class="ridata"></Rightdata>
@@ -72,7 +63,7 @@ export default {
 
   mounted() {
     //模拟地图上的点位
-    const data = [{ point: [120.2, 30.35] }, { point: [121.2, 30.35] }];
+    const data = [{ point: [120.2, 30.35] }];
     data.forEach((element) => {
       console.log(element);
       this.$refs.map.addMarker(element);
@@ -94,6 +85,10 @@ export default {
       // 隐藏树列表
       this.showTree = false;
     },
+    featureClick() {
+      this.$router.push('cockpitManage/electronic-map');
+      //点击事件  跳转B页面
+    }
   },
 };
 </script>
@@ -140,17 +135,21 @@ export default {
       height: 12px;
       margin-right: 5px;
     }
+
     .red {
       background-color: #e16757;
     }
+
     .yellow {
       background-color: #eecb5f;
     }
+
     .green {
       background-color: #7ecf51;
     }
   }
 }
+
 .Showtree {
   position: absolute;
   top: 55px;

+ 13 - 4
src/views/admin/cockpitManage/electronicMap.vue

@@ -13,10 +13,21 @@ export default {
     Tmap,
   },
   data() {
-    return { };
+    return {};
   },
 
-  mounted() { },
+  mounted() {
+        //模拟地图上的点位
+    const data = [{ point: [120.2, 30.35] }, { point: [120.21, 30.35] }];
+    data.forEach((element) => {
+      console.log(element);
+      this.$refs.map.addMarker(element);
+    });
+    this.$nextTick(() => {
+      //模拟需求中的B页面 跳转缩放定位
+      this.$refs.map.moveAndZoom({ point: [120.2, 30.35], zoom: 15 });
+    });
+  },
 
   methods: {
 
@@ -31,6 +42,4 @@ export default {
   height: 93.4vh;
   position: relative;
 }
-
-
 </style>

+ 270 - 216
src/views/ledger/anemometer.vue

@@ -3,108 +3,60 @@
     <div class="condition">
       <el-form :inline="true" :model="formInline" class="demo-form-inline">
         <el-form-item label="测风塔名称:">
-          <el-input
-            v-model="formInline.user"
-            placeholder="请输入批次编号"
-            size="small"
-          ></el-input>
+          <el-input v-model="formInline.anemometerName" placeholder="请输入测风塔名称" size="small"></el-input>
         </el-form-item>
         <el-form-item label="选择日期:" size="small">
-          <el-date-picker
-            v-model="formInline.timeQuantum"
-            type="daterange"
-            range-separator="至"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-          >
+          <el-date-picker v-model="formInline.timeQuantum" type="daterange" range-separator="至" start-placeholder="开始日期"
+            end-placeholder="结束日期" @change="onDateChange">
           </el-date-picker>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="onSubmit" size="small"
-            >查询</el-button
-          >
+          <el-button type="primary" @click="onSubmit" size="small">查询</el-button>
           <el-button @click="reset" size="small">重置</el-button>
         </el-form-item>
       </el-form>
     </div>
     <div class="list-page">
       <div class="newly">
-        <el-button type="primary" @click="newnuedialog" size="small"
-          >新增</el-button
-        >
+        <el-button type="primary" @click="newnuedialog" size="small">新增</el-button>
       </div>
 
-      <el-table
-        class="center-align-table"
-        :data="tableData"
-        border
-        :cell-style="rowStyle"
-      >
-        <el-table-column align="center" fixed prop="" label="测风塔名称">
+      <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle">
+        <el-table-column align="center" fixed prop="anemometerName" label="测风塔名称">
           <template slot-scope="scope">
-            <el-button @click="particulars(scope.row)" type="text" size="small"
-              >泗洪风场</el-button
-            >
+            <el-button @click="particulars(scope.row)" type="text" size="small">{{ scope.row.anemometerName
+              }}</el-button>
           </template>
         </el-table-column>
 
-        <el-table-column align="center" label="测风塔编号"> </el-table-column>
-
-        <el-table-column prop="" align="center" label="机型类型">
+        <el-table-column prop="anemometerCode" align="center" label="测风塔编号">
         </el-table-column>
-        <el-table-column prop="" align="center" label="经度" width="100">
+
+        <el-table-column prop="longitude" align="center" label="经度" width="200">
         </el-table-column>
 
-        <el-table-column prop="" align="center" label="纬度" width="100">
+        <el-table-column prop="latitude" align="center" label="纬度" width="200">
         </el-table-column>
-        <el-table-column prop="" align="center" label="状态" width="100">
+        <el-table-column prop="state" align="center" label="状态" width="100">
+          <template slot-scope="{ row }">
+            {{ row.state == 1 ? "启用" : "停用" }}
+          </template>
         </el-table-column>
-        <el-table-column prop="" align="center" label="创建时间">
+        <el-table-column prop="createTime" align="center" label="创建时间">
         </el-table-column>
-        <el-table-column
-          prop="transition"
-          align="center"
-          fixed="right"
-          label="操作"
-          width="200"
-        >
+        <el-table-column prop="transition" align="center" fixed="right" label="操作" width="200">
           <template slot-scope="scope">
-            <el-button @click="compile(scope.row)" type="text" size="small"
-              >编辑</el-button
-            >
-
-            <el-button
-              v-if="scope.row.transition == 1"
-              @click="start(scope.row)"
-              type="text"
-              size="small"
-              >启用</el-button
-            >
-            <el-button
-              v-else
-              style="color: #666"
-              @click="stop(scope.row)"
-              type="text"
-              size="small"
-              >停用</el-button
-            >
-            <el-button
-              style="color: #f00"
-              @click="deleted(scope.row)"
-              type="text"
-              size="small"
-              >删除</el-button
-            >
+            <el-button @click="compile(scope.row)" type="text" size="small">编辑</el-button>
+
+            <el-button v-if="scope.row.state == 0" @click="start(scope.row, 1)" type="text" size="small">启用</el-button>
+            <el-button v-else style="color: #666" @click="start(scope.row, 0)" type="text" size="small">停用</el-button>
+            <el-button style="color: #f00" @click="deleted(scope.row)" type="text" size="small">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
       <div class="pagination-container">
-        <el-pagination
-          :page-size="10"
-          :pager-count="11"
-          layout="total, prev, pager, next"
-          :total="35"
-        >
+        <el-pagination @current-change="handleCurrentChange" :current-page.sync="formInline.pageNum"
+          layout="total, prev, pager, next" :page-size="formInline.pageSize" :total="formInline.totalSize">
         </el-pagination>
       </div>
     </div>
@@ -112,52 +64,34 @@
     <!-- 弹出层 -->
 
     <!-- 新增 -->
-    <el-dialog :title="title" :visible.sync="nuedialog" width="800px">
+    <el-dialog :title="title" :visible.sync="nuedialog" width="860px" @close="resetForm">
       <div class="addition">
         <span @click="addition">
-          <SvgIcons
-            name="jia"
-            class="jia"
-            width="20px"
-            height="22px"
-            color="#222"
-          ></SvgIcons>
+          <SvgIcons name="jia" class="jia" width="20px" height="22px" color="#222"></SvgIcons>
         </span>
         <span @click="subtraction">
-          <SvgIcons
-            name="jian"
-            class="jian"
-            width="20px"
-            height="22px"
-            color="#222"
-          ></SvgIcons>
+          <SvgIcons name="jian" class="jian" width="20px" height="22px" color="#222"></SvgIcons>
         </span>
       </div>
       <div class="general">
         <div class="condition">
-          <p>测风塔名称:</p>
-          <el-input v-model="windsiteName"></el-input>
+          <p>测风塔名称:</p>
+          <el-input v-model="anemometerName"></el-input>
         </div>
         <div class="condition">
-          <p>经度:</p>
-          <el-input v-model="airdensity"></el-input>
+          <p>经度</p>
+          <el-input v-model="latitude"></el-input>
         </div>
 
         <div class="condition">
-          <p>纬度:</p>
-          <el-input v-model="altitude"></el-input>
+          <p>纬度</p>
+          <el-input v-model="longitude"></el-input>
         </div>
-
-        <div
-          v-for="(input, index) in heightInputs"
-          :key="index"
-          class="condition"
-        >
-          <p>测风塔高度:</p>
-          <el-input
-            v-model="input.value"
-            placeholder="请输入测风塔高度"
-          ></el-input>
+        <div v-for="(tower, index) in anemometerTowerHeightDtoList || [
+          { anemometerHeight: '' },
+        ]" :key="index" class="condition">
+          <p>测风塔高度{{ index + 1 }}:</p>
+          <el-input v-model="tower.anemometerHeight" placeholder="请输入测风塔高度"></el-input>
         </div>
       </div>
 
@@ -167,171 +101,277 @@
       </span>
     </el-dialog>
 
-    <!-- 风场详情 -->
+    <!-- 测风塔详情 -->
     <el-dialog title="详情" :visible.sync="unusualdialog" width="800px">
+      <p>测风塔名称:{{ hightower.anemometerName }}</p>
+      <p>测风塔编号:{{ hightower.anemometerCode }}</p>
+      <p>经度:{{ hightower.longitude }}</p>
+      <p>维度:{{ hightower.latitude }}</p>
+      <p>状态: {{ hightower.state === 1 ? "启用" : "停用" }}</p>
+      <p v-for="(item, index) in cftList" :key="index">
+        测风塔高度:{{ item.anemometerHeight }}米
+      </p>
     </el-dialog>
   </div>
 </template>
 
 <script>
+import {
+  getAnemometerTowerPage,
+  createAnemometerTower,
+  updateAnemometerTower,
+  getAnemometerTower,
+  updateAnemometerTowerState,
+  delAnemometerTower,
+} from "@/api/ledger.js";
+import { create } from "ol/transform";
 export default {
   data() {
     return {
-      // 新增信息
-      windsiteName: "",
-      airdensity: "",
-      superior: "",
-      superiorOptions: [],
-      altitude: "",
-      sheng: "",
-      shengOptions: [],
-      shi: "",
-      shiOptions: [],
-      longitude: "",
-      dimensionality: "",
-      anemometer: "",
-      anemometerOptions: [],
-
-      fileList: [
-        {
-          name: "food.jpeg",
-          url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
-        },
-      ],
+      tableData: [],
       formInline: {
-        user: "",
-        region: "",
-        timeQuantum: "",
+        anemometerName: "",
+        timeQuantum: [],
+        pageNum: 1,
+        pageSize: 10,
+        totalSize: 0,
       },
-      tableData: [
-        {
-          id: 1,
-          name: "王小虎",
-          transition: "1",
-        },
+      startDate: "",
+      endDate: "",
+      // 新增测风塔信息
+      anemometerName: "",
+      latitude: "",
+      longitude: "",
+      anemometerTowerHeightDtoList: [
         {
-          id: 3,
-          name: "王小虎",
-          abnormal: "1",
-          transition: "0",
-          children: [
-            {
-              id: 31,
-
-              name: "王小虎",
-
-              abnormal: "1",
-            },
-          ],
+          anemometerHeight: "",
         },
-      ],
+      ], errors: [],
+      hightower: [],
+      cftList: [],
+      // 新增信息
       nuedialog: false,
       unusualdialog: false,
-
-      newform: {
-        unit: "",
-        province: "",
-        city: "",
-        descr: "",
-      },
       title: "",
-      heightInputs: [{ value: "" }],
+      isEdit: false,
+      detail: {},
     };
   },
+  created() {
+    this.onSubmit();
+  },
   methods: {
+
     rowStyle() {
       return "text-align:center";
     },
+    onDateChange(date) {
+      if (Array.isArray(date)) {
+        this.startDate = this.$formatDate(date[0]);
+        this.endDate = this.$formatDate(date[1]);
+        if (this.endDate < this.startDate) {
+          this.endDate = this.startDate;
+        }
+      } else {
+        this.startDate = null;
+        this.endDate = null;
+      }
+    },
 
     // 查询
     onSubmit() {
-      console.log("submit!");
+      let paramsData = {
+        anemometerName: this.formInline.anemometerName || undefined,
+        beginTime: this.startDate || undefined,
+        endTime: this.endDate || undefined,
+        pageNum: this.formInline.pageNum,
+        pageSize: this.formInline.pageSize,
+      };
+      getAnemometerTowerPage(paramsData).then((res) => {
+        this.tableData = res.data.list;
+        this.formInline.totalSize = res.data.totalSize;
+      });
     },
     // 重置
-    reset() {},
-
-    // 新增
+    reset() {
+      this.formInline.anemometerName = "";
+      this.formInline.timeQuantum = [];
+      this.endDate = "";
+      this.startDate = "";
+    },
+    // 重置
+    resetForm() {
+      this.anemometerName = "";
+      this.latitude = "";
+      this.longitude = "";
+      this.anemometerTowerHeightDtoList = [{
+        anemometerHeight: "",
+      },];
+    },
+    //打开新增
+    newnuedialog() {
+      this.nuedialog = true;
+      this.title = "新增";
+    },
+    // 新增提交
     newly() {
-      this.heightInputs.forEach((value, index) => {
-        console.log(`测风塔高度 ${index + 1}:`, value);
-      });
+      // Check if tower.anemometerHeight is empty for any tower
+      const isEmptyAnemometerHeight = this.anemometerTowerHeightDtoList.some(
+        (tower) => !tower.anemometerHeight.trim()
+      );
+
+      // If any tower has an empty anemometerHeight, show a warning message and prevent submission
+      if (isEmptyAnemometerHeight) {
+        this.$message({
+          message: "测风塔高度不能为空",
+          type: "warning",
+        });
+        return;
+      }
+
+      // Other validation checks
+      if (!this.anemometerName) {
+        this.$message({
+          message: "请填写测风塔名称",
+          type: "warning",
+        });
+        return;
+      }
+      if (!this.latitude) {
+        this.$message({
+          message: "请填写纬度",
+          type: "warning",
+        });
+        return;
+      }
+      if (!this.longitude) {
+        this.$message({
+          message: "请填写经度",
+          type: "warning",
+        });
+        return;
+      }
 
-      this.nuedialog = false;
-      this.heightInputs = [{ value: "" }];
+      // Proceed with submission if all validations pass
+      let paramsData = {
+        anemometerName: this.anemometerName,
+        latitude: this.latitude,
+        longitude: this.longitude,
+        anemometerTowerHeightDtoList: this.anemometerTowerHeightDtoList,
+      };
+
+      if (!this.isEdit) {
+        createAnemometerTower(paramsData).then((res) => {
+          this.nuedialog = false;
+          this.$message.success("新增成功");
+          this.onSubmit();
+        });
+      } else {
+        paramsData.anemometerCode = this.detail.anemometerCode;
+        // delete objectval.parentCode
+        updateAnemometerTower(paramsData).then((res) => {
+          this.isEdit = false;
+          this.nuedialog = false;
+          this.onSubmit();
+          this.$message.success("编辑成功");
+        });
+      }
+      this.resetForm();
     },
 
-    //异常详情
+    // 查看详情
     particulars(row) {
+      getAnemometerTower({ anemometerCode: row.anemometerCode }).then((res) => {
+        this.hightower = res.data;
+        this.cftList = res.data.list;
+      });
       this.unusualdialog = true;
     },
-
-    // 编辑
-    compile(row) {
-      this.nuedialog = true;
-      this.title = "编辑";
+    // 启用/停用
+    start(row, type) {
+      let objectval = {
+        anemometerCode: row.anemometerCode,
+        state: type === 0 ? 0 : 1,
+      };
+      updateAnemometerTowerState(objectval).then((res) => {
+        this.$message({
+          message: "状态已更新成功",
+          type: "success",
+        });
+        // this.$message(`${type === 1 ? '状态已更新成功' : '状态已更新成功'}`);
+        row.state = type === 1 ? 0 : 1;
+        this.onSubmit();
+      });
     },
-
-    // 启用
-    start(row) {},
-    // 停用
-    stop(row) {},
     // 删除
     deleted(row) {
-      this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          this.$message({
-            type: "success",
-            message: "删除成功!",
-          });
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
+      console.log(row, "row");
+      if (row.state == "1") {
+        this.$message({
+          type: "error",
+          message: "该项处于启用状态,无法删除!",
         });
-    },
-    // 删除附件
-    deleteRow(row) {
-      this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
+        return;
+      }
+      this.$confirm("此操作将永久删除该文件,是否继续?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning",
       })
         .then(() => {
-          this.$message({
-            type: "success",
-            message: "删除成功!",
-          });
+          delAnemometerTower({ anemometerCode: row.anemometerCode }).then(
+            (res) => {
+              this.onSubmit();
+              // 执行删除操作
+              this.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+            }
+          );
         })
         .catch(() => {
+          // 取消删除
           this.$message({
             type: "info",
             message: "已取消删除",
           });
         });
     },
-    addition() {
-      this.heightInputs.push({ value: "" }); // Add a new object with an empty string property
+
+    // 编辑
+    compile(row) {
+      this.title = "编辑";
+      this.isEdit = true;
+      getAnemometerTower({ anemometerCode: row.anemometerCode }).then((res) => {
+        this.hightower = res.data;
+        this.cftList = res.data.list;
+        const item = JSON.parse(JSON.stringify(res.data));
+        this.detail = item;
+        this.anemometerName = item.anemometerName;
+        this.latitude = item.latitude;
+        this.longitude = item.longitude;
+        this.anemometerTowerHeightDtoList = this.cftList;
+        this.nuedialog = true;
+      });
+    },
+
+    //分页数据切换
+    handleCurrentChange(val) {
+      this.formInline.pageNum = val;
+      this.onSubmit();
     },
 
-    // Method to remove the last input for "测风塔高度"
+    // 测风塔高度
+    addition() {
+      this.anemometerTowerHeightDtoList.push({ anemometerHeight: "" });
+    },
     subtraction() {
-      if (this.heightInputs.length > 1) {
+      if (this.anemometerTowerHeightDtoList.length > 1) {
         // Ensure at least one input remains
-        this.heightInputs.pop();
+        this.anemometerTowerHeightDtoList.pop();
       }
     },
-
-    // 新增
-    newnuedialog() {
-      this.nuedialog = true;
-      this.title = "新增";
-    },
   },
 };
 </script>
@@ -346,14 +386,14 @@ export default {
     display: flex;
 
     p {
-      width: 100px;
+      width: 130px;
       text-align: right;
       line-height: 40px;
     }
 
     span {
       line-height: 40px;
-
+      margin-right: 5px;
       padding-left: 20px;
     }
 
@@ -383,4 +423,18 @@ export default {
   justify-content: flex-end;
   margin-bottom: 10px;
 }
+
+.error {
+  color: red;
+  position: absolute;
+  bottom: 85px;
+  left: 91px;
+  width: 213px !important;
+  font-size: 12px;
+}
+
+
+.forinput {
+  position: relative;
+}
 </style>

+ 297 - 141
src/views/ledger/draught.vue

@@ -2,12 +2,12 @@
     <div class="global-variable">
         <div class="condition">
             <el-form :inline="true" :model="formInline" class="demo-form-inline">
-                <el-form-item label="单位名称:">
-                    <el-input v-model="formInline.user" placeholder="请输入批次编号" size="small"></el-input>
+                <el-form-item label="风机名称:">
+                    <el-input v-model="formInline.engineName" placeholder="请输入风机名称" size="small"></el-input>
                 </el-form-item>
                 <el-form-item label="选择日期:" size="small">
                     <el-date-picker v-model="formInline.timeQuantum" type="daterange" range-separator="至"
-                        start-placeholder="开始日期" end-placeholder="结束日期" >
+                        start-placeholder="开始日期" end-placeholder="结束日期" @change="onDateChange">
                     </el-date-picker>
                 </el-form-item>
                 <el-form-item>
@@ -16,6 +16,7 @@
                 </el-form-item>
             </el-form>
         </div>
+
         <div class="list-page">
             <div class="newly">
                 <el-button @click="upfile" size="small">导入</el-button>
@@ -23,32 +24,33 @@
             </div>
 
             <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle">
-                <el-table-column align="center" fixed prop="" label="风机编号">
+                <el-table-column align="center" fixed prop="engineCode" label="系统编号">
                     <template slot-scope="scope">
-                        <el-button @click="particulars(scope.row)" type="text" size="small">泗洪风场</el-button>
+                        <el-button @click="particulars(scope.row)" type="text" size="small">{{ scope.row.engineCode
+                            }}</el-button>
                     </template>
                 </el-table-column>
+                <el-table-column prop="engineName" align="center" label="风机名称"> </el-table-column>
 
-                <el-table-column align="center" label="关联风场"> </el-table-column>
-
-
-                <el-table-column prop="" align="center" label="主机厂商" width="100">
+                <el-table-column prop="fieldName" align="center" label="关联风场"> </el-table-column>
+                <el-table-column prop="longitude" align="center" label="经度" width="100">
                 </el-table-column>
-                <el-table-column prop="" align="center" label="机型信号" width="100">
+                <el-table-column prop="latitude" align="center" label="纬度" width="100">
                 </el-table-column>
 
-                <el-table-column prop="" align="center" label="经纬度" width="100">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="经纬度" width="100">
+                <el-table-column prop="elevationHeight" align="center" label="海拔高度/米" width="100">
                 </el-table-column>
-
-                <el-table-column prop="" align="center" label="海拔高度/米" width="100">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="是否标杆" width="100">
+                <el-table-column prop="sightcing" align="center" label="是否标杆" width="100">
+                    <template slot-scope="{ row }">
+                        {{ row.sightcing == 1 ? "是" : "否" }}
+                    </template>
                 </el-table-column>
-                <el-table-column prop="" align="center" label="状态" width="100">
+                <el-table-column prop="state" align="center" label="状态" width="100">
+                    <template slot-scope="{ row }">
+                        {{ row.state == 1 ? "启用" : "停用" }}
+                    </template>
                 </el-table-column>
-                <el-table-column prop="" align="center" label="创建时间">
+                <el-table-column prop="createTime" align="center" label="创建时间">
                 </el-table-column>
 
 
@@ -56,9 +58,9 @@
                     <template slot-scope="scope">
                         <el-button @click="compile(scope.row)" type="text" size="small">编辑</el-button>
 
-                        <el-button v-if="scope.row.transition == 1" @click="start(scope.row)" type="text"
+                        <el-button v-if="scope.row.state == 0" @click="start(scope.row, 1)" type="text"
                             size="small">启用</el-button>
-                        <el-button v-else style="color: #666" @click="stop(scope.row)" type="text"
+                        <el-button v-else style="color: #666" @click="start(scope.row, 0)" type="text"
                             size="small">停用</el-button>
                         <el-button style="color: #f00" @click="deleted(scope.row)" type="text"
                             size="small">删除</el-button>
@@ -66,7 +68,8 @@
                 </el-table-column>
             </el-table>
             <div class="pagination-container">
-                <el-pagination :page-size="10" :pager-count="11" layout="total, prev, pager, next" :total="35">
+                <el-pagination @current-change="handleCurrentChange" :current-page.sync="formInline.pageNum"
+                    layout="total, prev, pager, next" :page-size="formInline.pageSize" :total="formInline.totalSize">
                 </el-pagination>
             </div>
         </div>
@@ -76,8 +79,8 @@
         <el-dialog title="导入文件" :visible.sync="tolead" width="400px">
             <div class="UPcondition">
                 <p>所属风场:</p>
-                <el-select v-model="superior" placeholder="请选择">
-                    <el-option v-for="item in superiorOptions" :key="item.value" :label="item.label"
+                <el-select v-model="fieldCode" placeholder="请选择">
+                    <el-option v-for="item in fieldCodeOptions" :key="item.value" :label="item.label"
                         :value="item.value">
                     </el-option>
                 </el-select>
@@ -97,109 +100,111 @@
         </el-dialog>
         <!-- 新增 -->
         <el-dialog :title="title" :visible.sync="nuedialog" width="800px">
-            <div class="general">
-                <div class="condition">
-                    <p>关联风场:</p>
-                    <el-select v-model="superior" placeholder="请选择">
-                        <el-option v-for="item in superiorOptions" :key="item.value" :label="item.label"
-                            :value="item.value">
-                        </el-option>
-                    </el-select>
-                </div>
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+                <div class="form-row">
+                    <el-form-item label="风机名称:" prop="engineName">
+                        <el-input v-model="ruleForm.engineName" size="small"></el-input>
+                    </el-form-item>
+                    <el-form-item label="关联风场:" prop="fieldCode">
+                        <el-select v-model="ruleForm.fieldCode" filterable placeholder="请选择" size="small">
+                            <el-option v-for="item in fieldCodeOptions" :key="item.value" :label="item.label"
+                                :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
 
-                <div class="condition">
-                    <p>风机编号:</p>
-                    <el-input v-model="windsiteName"></el-input>
-                </div>
-                <div class="condition">
-                    <p>风机名称:</p>
-                    <el-input v-model="airdensity"></el-input>
                 </div>
-
-
-                <div class="condition">
-                    <p>机型编号:</p>
-                    <el-input v-model="altitude"></el-input>
+                <div class="form-row">
+                    <el-form-item label="机型编号:" prop="millTypeCode">
+                        <el-input v-model="ruleForm.millTypeCode" size="small"></el-input>
+                    </el-form-item>
+                    <el-form-item label="额定容量:" prop="ratedCapacity">
+                        <el-input v-model="ruleForm.ratedCapacity" size="small"></el-input>
+                    </el-form-item>
                 </div>
-                <div class="condition">
-                    <p>额定容量:</p>
-                    <el-input v-model="altitude"></el-input>
+                <div class="form-row">
+                    <el-form-item label="海拔高度:" prop="elevationHeight">
+                        <el-input v-model="ruleForm.elevationHeight" size="small"></el-input>
+                    </el-form-item>
+                    <el-form-item label="经度:" prop="longitude">
+                        <el-input v-model="ruleForm.longitude" size="small"></el-input>
+                    </el-form-item>
                 </div>
-
-
-
-                <div class="condition">
-                    <p>海拔高度:</p>
-                    <el-input v-model="longitude"></el-input>
+                <div class="form-row">
+                    <el-form-item label="纬度:" prop="latitude">
+                        <el-input v-model="ruleForm.latitude" size="small"></el-input>
+                    </el-form-item>
+                    <el-form-item label="轮廓高度:" prop="hubHeight">
+                        <el-input v-model="ruleForm.hubHeight" size="small"></el-input>
+                    </el-form-item>
                 </div>
-
-
-                <div class="condition">
-                    <p>经度:</p>
-                    <el-input v-model="dimensionality"></el-input>
+                <div class="form-row">
+                    <el-form-item label="是否标杆:" prop="sightcing">
+                        <el-select v-model="ruleForm.sightcing" placeholder="请选择" size="small">
+                            <el-option v-for="item in sightcingOptions" :key="item.value" :label="item.label"
+                                :value="item.value">
+                            </el-option>
+                        </el-select>
+                    </el-form-item>
+                    <el-form-item label="额定风速:" prop="hubHeight">
+                        <el-input v-model="ruleForm.hubHeight" size="small"></el-input>
+                    </el-form-item>
                 </div>
-                <div class="condition">
-                    <p>纬度:</p>
-                    <el-input v-model="dimensionality"></el-input>
+                <div class="form-row">
+                    <el-form-item label="切入风速:" prop="latitude">
+                        <el-input v-model="ruleForm.latitude" size="small"></el-input>
+                    </el-form-item>
+                    <el-form-item label="切出风速:" prop="hubHeight">
+                        <el-input v-model="ruleForm.hubHeight" size="small"></el-input>
+                    </el-form-item>
                 </div>
-                <div class="condition">
-                    <p>轮廓高度:</p>
-                    <el-input v-model="dimensionality"></el-input>
-                </div>
-
-                <div class="condition">
-                    <p>是否标杆:</p>
-                    <el-select v-model="anemometer" placeholder="请选择">
-                        <el-option v-for="item in anemometerOptions" :key="item.value" :label="item.label"
-                            :value="item.value">
-                        </el-option>
-                    </el-select>
-                </div>
-            </div>
-
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="nuedialog = false" size="small">取 消</el-button>
-                <el-button type="primary" @click="newly" size="small">确 定</el-button>
-            </span>
+                <el-form-item class="form-buttons">
+                    <el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
+                    <el-button @click="resetForm('ruleForm')">取消</el-button>
+                </el-form-item>
+            </el-form>
         </el-dialog>
 
         <!-- 风机详情 -->
         <el-dialog title="风机详情" :visible.sync="unusualdialog" width="800px">
             <div class="general">
                 <div class="condition">
-                    <p>关联风场:</p>
+                    <p>关联风场:</p><span>{{ particularsdata.fieldCode }}</span>
                 </div>
                 <div class="condition">
-                    <p>风机编号:</p>
+                    <p>风机名称:</p><span>{{ particularsdata.engineCode }}</span>
                 </div>
 
                 <div class="condition">
-                    <p>风机名称:</p>
+                    <p>风机名称:</p><span>{{ particularsdata.engineName }}</span>
                 </div>
                 <div class="condition">
-                    <p>机型编号:</p>
+                    <p>机型编号:</p><span>{{ particularsdata.millTypeCode }}</span>
                 </div>
                 <div class="condition">
-                    <p>额定容量:</p>
+                    <p>额定容量:</p><span>{{ particularsdata.ratedCapacity }}</span> <span>/MW</span>
                 </div>
 
                 <div class="condition">
-                    <p>海拔高度:</p>
+                    <p>海拔高度:</p><span>{{ particularsdata.elevationHeight }}</span> <span>/米</span>
                 </div>
                 <div class="condition">
-                    <p>经度:</p>
+                    <p>经度:</p><span>{{ particularsdata.longitude }}</span>
                 </div>
 
 
                 <div class="condition">
-                    <p>纬度:</p>
+                    <p>纬度:</p><span>{{ particularsdata.latitude }}</span>
                 </div>
 
                 <div class="condition">
-                    <p>轮廓高度:</p>
+                    <p>轮廓高度:</p><span>{{ particularsdata.hubHeight }}</span> <span>/米</span>
+                </div>
+                <div class="condition">
+                    <p>是否标杆:</p><span>{{ particularsdata.sightcing == 1 ? '是' : '否' }}</span>
                 </div>
                 <div class="condition">
-                    <p>是否标杆:</p>
+                    <p>状态:</p><span>{{ particularsdata.state == 1 ? '启用' : '停用' }}</span>
                 </div>
             </div>
 
@@ -214,23 +219,77 @@
 </template>
 
 <script>
+import { windEngineGrouPage, updateStateWindEngineGroup, getWindEngineGroup, WindFieldListPage, delWindEngineGroup } from "@/api/ledger.js";
 export default {
     data() {
         return {
+            formInline: {
+                fieldCode: "",
+                timeQuantum: [],
+                pageNum: 1,
+                pageSize: 10,
+                totalSize: 0,
+            },
+            startDate: "",
+            endDate: "",
+            tableData: [
+            ],
+            particularsdata: [],
+            ruleForm: {
+                fieldCode: '',
+                engineName: '',
+                airdensity: '',
+                millTypeCode: '',
+                ratedCapacity: '',
+                elevationHeight: '',
+                longitude: '',
+                latitude: '',
+                hubHeight: '',
+                sightcing: ''
+            },
+            fieldCodeOptions: [],
+            sightcingOptions: [],
+            rules: {
+                fieldCode: [{ required: true, message: '请选择关联风场', trigger: 'change' }],
+                engineName: [{ required: true, message: '请输入风机名称', trigger: 'blur' }],
+                millTypeCode: [{ required: true, message: '请输入机型编号', trigger: 'blur' }],
+                ratedCapacity: [
+                    { required: true, message: '请输入额定容量', trigger: 'blur' },
+                    { validator: this.validateNumber, trigger: 'blur' }
+                ],
+                elevationHeight: [
+                    { required: true, message: '请输入海拔高度', trigger: 'blur' },
+                    { validator: this.validateNumber, trigger: 'blur' }
+                ],
+                longitude: [
+                    { required: true, message: '请输入经度', trigger: 'blur' },
+                    { validator: this.validateNumber, trigger: 'blur' }
+                ],
+                latitude: [
+                    { required: true, message: '请输入纬度', trigger: 'blur' },
+                    { validator: this.validateNumber, trigger: 'blur' }
+                ],
+                hubHeight: [
+                    { required: true, message: '请输入轮廓高度', trigger: 'blur' },
+                    { validator: this.validateNumber, trigger: 'blur' }
+                ],
+                sightcing: [{ required: true, message: '请选择是否标杆', trigger: 'change' }]
+            },
+
             // 新增信息
-            windsiteName: "",
+            engineName: "",
             airdensity: "",
-            superior: "",
-            superiorOptions: [],
-            altitude: "",
+            fieldCode: "",
+
+            millTypeCode: "",
             sheng: "",
             shengOptions: [],
             shi: "",
             shiOptions: [],
-            longitude: "",
-            dimensionality: "",
-            anemometer: "",
-            anemometerOptions: [],
+            elevationHeight: "",
+            latitude: "",
+            sightcing: "",
+
 
             fileList: [
                 {
@@ -239,33 +298,7 @@ export default {
                 },
 
             ],
-            formInline: {
-                user: "",
-                region: "",
-                timeQuantum: "",
-            },
-            tableData: [
-                {
-                    id: 1,
-                    name: "王小虎",
-                    transition: "1",
-                },
-                {
-                    id: 3,
-                    name: "王小虎",
-                    abnormal: "1",
-                    transition: "0",
-                    children: [
-                        {
-                            id: 31,
-
-                            name: "王小虎",
-
-                            abnormal: "1",
-                        },
-                    ],
-                },
-            ],
+
             nuedialog: false,
             unusualdialog: false,
             tolead: false,
@@ -275,14 +308,93 @@ export default {
             title: "",
         };
     },
+    created() {
+        this.onSubmit()
+        this.windsite()
+    },
     methods: {
         rowStyle() {
             return "text-align:center";
         },
-
+        onDateChange(date) {
+            if (Array.isArray(date)) {
+                this.startDate = this.$formatDate(date[0]);
+                this.endDate = this.$formatDate(date[1]);
+                if (this.endDate < this.startDate) {
+                    this.endDate = this.startDate;
+                }
+            } else {
+                this.startDate = null;
+                this.endDate = null;
+            }
+        },
         // 查询
         onSubmit() {
-            console.log("submit!");
+            let paramsData = {
+                engineName: this.formInline.engineName || undefined,
+                beginTime: this.startDate || undefined,
+                endTime: this.endDate || undefined,
+                pageNum: 1,
+                pageSize: 10,
+            };
+            windEngineGrouPage(paramsData).then((res) => {
+                this.tableData = res.data.list;
+                this.formInline.totalSize = res.data.totalSize;
+            });
+        },
+
+        // 停用
+        start(row, type) {
+            let objectval = {
+                engineCode: row.engineCode,
+                state: type === 0 ? 0 : 1,
+            };
+            updateStateWindEngineGroup(objectval).then((res) => {
+                this.$message({
+                    message: "状态已更新成功",
+                    type: "success",
+                });
+                // this.$message(`${type === 1 ? '状态已更新成功' : '状态已更新成功'}`);
+                row.state = type === 1 ? 0 : 1;
+                this.onSubmit();
+            });
+        },
+        //详情
+        particulars(row) {
+            this.unusualdialog = true;
+            getWindEngineGroup({ engineCode: row.engineCode }).then((res) => {
+                this.particularsdata = res.data
+            })
+        },
+        // 确认
+        submitForm(formName) {
+            this.$refs[formName].validate((valid) => {
+                if (valid) {
+                    alert('提交成功!');
+                } else {
+                    console.log('表单验证失败');
+                    return false;
+                }
+            });
+        },
+        // 取消
+        resetForm(formName) {
+            this.$refs[formName].resetFields();
+        },
+        // 获取风场
+        windsite() {
+            WindFieldListPage({
+                pageNum: 1,
+                pageSize: 999
+            }).then((res) => {
+                console.log(res.data.list);
+            })
+        },
+
+        //分页数据切换
+        handleCurrentChange(val) {
+            this.formInline.pageNum = val;
+            this.onSubmit();
         },
         // 重置
         reset() { },
@@ -295,38 +407,54 @@ export default {
             this.nuedialog = false;
         },
 
-        //异常详情
-        particulars(row) {
-            this.unusualdialog = true;
-        },
 
 
 
         // 编辑
         compile(row) {
+            getWindEngineGroup({ engineCode: row.engineCode }).then((res) => {
+                const item = JSON.parse(JSON.stringify(res.data))
+                this.detail = item
+                Object.keys(this.ruleForm).forEach(
+                    key => {
+                        this.ruleForm[key] = item[key]
+                    }
+                )
+            })
             this.nuedialog = true;
             this.title = "编辑";
+            this.isEdit = true;
         },
 
 
-        // 启用
-        start(row) { },
-        // 停用
-        stop(row) { },
+
         // 删除
         deleted(row) {
-            this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
+            console.log(row, "row");
+            if (row.state == "1") {
+                this.$message({
+                    type: "error",
+                    message: "该项处于启用状态,无法删除!",
+                });
+                return;
+            }
+            this.$confirm("此操作将永久删除该文件,是否继续?", "提示", {
                 confirmButtonText: "确定",
                 cancelButtonText: "取消",
                 type: "warning",
             })
                 .then(() => {
-                    this.$message({
-                        type: "success",
-                        message: "删除成功!",
+                    delWindEngineGroup({ engineCode: row.engineCode }).then((res) => {
+                        this.onSubmit();
+                        // 执行删除操作
+                        this.$message({
+                            type: "success",
+                            message: "删除成功!",
+                        });
                     });
                 })
                 .catch(() => {
+                    // 取消删除
                     this.$message({
                         type: "info",
                         message: "已取消删除",
@@ -334,6 +462,7 @@ export default {
                 });
         },
 
+
         // 导入
         upfile() {
             this.tolead = true;
@@ -360,12 +489,13 @@ export default {
             width: 100px;
             text-align: right;
             line-height: 40px;
+            margin-right: 10px;
         }
 
         span {
             line-height: 40px;
 
-            padding-left: 20px;
+
         }
 
         .el-select {
@@ -414,4 +544,30 @@ export default {
     height: 40px;
     font-size: 14px;
 }
+
+.demo-ruleForm {
+    .el-input {
+        width: 215px;
+    }
+
+    .el-form-item {
+        margin-bottom: 20px;
+
+    }
+
+    .form-row {
+        display: flex;
+        justify-content: space-between;
+    }
+
+    .el-form-item {
+        width: 48%;
+    }
+
+    .form-buttons {
+        display: flex;
+        justify-content: center;
+        width: 100%;
+    }
+}
 </style>

+ 210 - 92
src/views/ledger/enterprise.vue

@@ -12,7 +12,7 @@
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="onSubmit" size="small">查询</el-button>
+          <el-button type="primary" @click="getTableList" size="small">查询</el-button>
           <el-button @click="reset" size="small">重置</el-button>
         </el-form-item>
       </el-form>
@@ -20,70 +20,68 @@
     <div class="list-page">
       <div class="newly">
         <el-button type="primary" @click="newnuedialog" size="small">新增</el-button>
+        <el-button type="primary" @click="toggleExpandAll" size="small">{{
+          defaultExpandAll ? "收起" : "展开"
+        }}</el-button>
       </div>
 
-      <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle" stripe row-key="id"
-        default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
+      <el-table class="center-align-table" ref="table" :data="tableData" border :cell-style="rowStyle" stripe
+        row-key="id" default-expand-all :tree-props="{ children: 'children', hasChildren: 'hasChildren' }">
         <!-- Table Columns -->
         <el-table-column fixed prop="codeName" align="center" label="单位名称">
         </el-table-column>
-        <el-table-column prop="cityId" align="center" label="单位ID">
+        <el-table-column prop="companyCode" align="center" label="单位ID">
         </el-table-column>
 
-        <el-table-column prop="" label="风场数量" width="80">
+        <el-table-column prop="fieldCount" label="风场数量" width="200">
           <template slot-scope="scope">
             <el-button @click="particulars(scope.row)" type="text" size="small"></el-button>
-
           </template>
         </el-table-column>
 
-        <el-table-column prop="state" align="center" label="状态" width="100">
+        <el-table-column prop="state" align="center" label="状态" width="200">
           <template slot-scope="{ row }">
-            {{ row.state === 0 ? '启用' : '停用' }}
+            {{ row.state == 1 ? "启用" : "停用" }}
           </template>
         </el-table-column>
-        <el-table-column prop="" align="center" label="转换时间">
+        <el-table-column prop="createTime" align="center" label="创建时间">
         </el-table-column>
         <el-table-column prop="state" align="center" fixed="right" label="操作" width="200">
           <template slot-scope="scope">
             <el-button @click="compile(scope.row)" type="text" size="small">编辑</el-button>
-            <el-button @click="newcomer(scope.row)" type="text" size="small">新增</el-button>
-            <el-button v-if="scope.row.state == 1" @click="start(scope.row, 1)" type="text" size="small">启用</el-button>
+            <el-button @click="newcomer(scope.row, 'addChild')" type="text" size="small">新增</el-button>
+            <el-button v-if="scope.row.state == 0" @click="start(scope.row, 1)" type="text" size="small">启用</el-button>
             <el-button v-else style="color: #666" @click="start(scope.row, 0)" type="text" size="small">停用</el-button>
             <el-button style="color: #f00" @click="deleted(scope.row)" type="text" size="small">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
-      <div class="pagination-container">
-        <el-pagination :page-size="10" :pager-count="11" layout="total, prev, pager, next" :total="35">
-        </el-pagination>
-      </div>
     </div>
 
     <!-- 弹出层 -->
     <!-- 新增 -->
     <el-dialog :title="title" :visible.sync="nuedialog" width="380px">
-      <el-form ref="newform" :rules="rules" :model="newform" label-width="90px">
-        <el-form-item label="单位名称:" prop="unit">
+      <el-form ref="newform" :rules="rules" :model="newform" label-width="90px" class="form-margin">
+        <el-form-item label="单位名称:" prop="companyName">
           <el-input v-model="newform.companyName" size="small"></el-input>
         </el-form-item>
         <el-form-item label="所属省:" prop="province">
-          <el-select v-model="newform.province" placeholder="请选择" size="small">
-            <el-option label="区域一" value="shanghai"></el-option>
+          <el-select v-model="newform.province" placeholder="请选择" size="small" value-key="areaId" @change="fetchCities">
+            <el-option v-for="item in shengdata" :key="item.areaId" :label="item.province" :value="item"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="所属市:" prop="city">
-          <el-select v-model="newform.city" placeholder="请选择" size="small">
-            <el-option label="区域一" value="shanghai"></el-option>
+          <el-select v-model="newform.city" placeholder="请选择" size="small" value-key="areaId" @change="$forceUpdate()">
+            <el-option v-for="item in shidata" :key="item.areaId" :label="item.city" :value="item"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="备注:">
-          <el-input v-model="newform.name" size="small" type="textarea"></el-input>
+          <el-input v-model="newform.described" size="small" type="textarea"></el-input>
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
         <el-button @click="nuedialog = false" size="small">取 消</el-button>
-        <el-button type="primary" @click="newly" size="small">确 定</el-button>
+        <el-button type="primary" @click="newly('newform')" size="small">确 定</el-button>
       </span>
     </el-dialog>
 
@@ -116,7 +114,17 @@
 </template>
 
 <script>
-import { getAllWindCompany, addCompany, updateStateCompany } from "@/api/ledger.js";
+import Vue from "vue";
+import {
+  getAllWindCompany,
+  addCompany,
+  updateCompany,
+  updateStateCompany,
+  findAllProvince,
+  getCitiesByPId,
+  getWindCompany,
+  delCompany
+} from "@/api/ledger.js";
 export default {
   data() {
     return {
@@ -127,33 +135,47 @@ export default {
       },
       // 新增
       newform: {
+        parentCode: "",
+        companyName: "",
+        provinceId: "",
+        provinceName: "",
         cityId: "",
         cityName: "",
-        companyName: "",
         described: "",
-        parentCode: "",
-        provinceId: "",
-        provinceName: ""
       },
+      shengdata: [],
+      shidata: [],
+      defaultExpandAll: true,
 
       rules: {
-        unit: [{ required: true, message: "请填写单位名称", trigger: "blur" }],
+        companyName: [{ required: true, message: "请填写单位名称", trigger: "blur,change" }],
         province: [{ required: true, message: "请选择省", trigger: "change" }],
-        city: [{ required: true, message: "请选择", trigger: "change" }],
+        city: [{ required: true, message: "请选择", trigger: "change" }],
       },
-
-      tableData: [
-
-      ],
+      tableData: [],
+      detail: {},
       nuedialog: false,
       unusualdialog: false,
-
+      isEdit: false,
       title: "新增",
       warningShown: false,
+      addPrarentCompanyCode: null
     };
   },
   created() {
-    this.onSubmit()
+    this.getTableList();
+    this.postsheng();
+  },
+  watch: {
+    tableData: {
+      handler(newData) {
+        this.$nextTick(() => {
+          this.setExpandAll(this.defaultExpandAll);
+        });
+      },
+      immediate: true,
+      deep: true,
+    },
   },
   methods: {
     rowStyle() {
@@ -161,24 +183,29 @@ export default {
     },
 
     // 查询
-    onSubmit() {
+    getTableList() {
       let objectval = {
         companyName: this.formInline.companyName,
         state: this.formInline.state,
-      }
+      };
       getAllWindCompany(objectval).then((res) => {
-        this.tableData = res.data
+        this.tableData = res.data;
       });
     },
     // 重置
     reset() {
-      this.formInline.companyName = ""
-      this.formInline.state = ""
+      this.formInline.companyName = "";
+      this.formInline.state = "";
+      this.newform.companyName = ""
+      this.newform.province = ""
+      this.newform.city = ""
+      this.newform.described = ""
+
       getAllWindCompany({
         companyName: "",
-        state: ""
+        state: "",
       }).then((res) => {
-        this.tableData = res.data
+        this.tableData = res.data;
       });
     },
 
@@ -186,81 +213,115 @@ export default {
     start(row, type) {
       let objectval = {
         companyCode: row.companyCode,
-        state: type === 1 ? 0 : 1,
-      }
+        state: type === 0 ? 0 : 1,
+      };
       updateStateCompany(objectval).then((res) => {
         this.$message({
-          message: '状态已更新成功',
-          type: 'success'
+          message: "状态已更新成功",
+          type: "success",
         });
         // this.$message(`${type === 1 ? '状态已更新成功' : '状态已更新成功'}`);
-        row.state = type === 1 ? 0 : 1
-        this.onSubmit()
-      })
+        row.state = type === 1 ? 0 : 1;
+        this.getTableList();
+      });
     },
 
-    // 新增触发
-    newnuedialog() {
-      this.nuedialog = true;
-      this.title = "新增";
+
+    // 省份
+    postsheng() {
+      findAllProvince().then((res) => {
+        this.shengdata = res.data;
+      });
     },
-    // 新增提交
-    newly() {
-      let objectval = {
-        cityId: this.formInline.companyName,
-        cityName: this.formInline.state,
-        companyName: this.a,
-        described: this.a,
-        parentCode: this.a,
-        provinceId: this.a,
-        provinceName: this.a,
+    // 市
+    fetchCities(item, city) {
+      console.log(item, this.newform.province);
+      this.newform.province = item
+      let data = {
+        provinceId: item.areaId,
+      };
+      getCitiesByPId(data).then((res) => {
+        this.shidata = res.data;
+      });
+      if (city) {
+        this.newform.city = Object.assign({}, { areaId: city.areaId, city: city.city });
       }
-      addCompany(objectval).then((res) => {
-
-      })
-      this.nuedialog = false;
     },
+    // 新增提交
+    newly(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          let objectval = {
+            parentCode: this.addPrarentCompanyCode || 0, // 一级单位默认传0
+            companyName: this.newform?.companyName, //企业名称
+            provinceId: this.newform.province?.areaId, //省
+            provinceName: this.newform.province?.province,
+            cityId: this.newform.city?.areaId, //市
+            cityName: this.newform.city?.city,
+            described: this.newform?.described, //备注
+          };
+          if (!this.isEdit) {
+            addCompany(objectval).then((res) => {
+              this.addPrarentCompanyCode = null
+            })
+          } else {
+            objectval.companyCode = this.detail.companyCode
+            delete objectval.parentCode
+            updateCompany(objectval).then((res) => {
+              this.addPrarentCompanyCode = null
+              this.isEdit = false
+            })
+          }
+          console.log(objectval);
+          this.nuedialog = false;
+          this.getTableList()
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+
 
-    //异常详情
-    particulars(row) {
-      this.unusualdialog = true;
-    },
-    // 编辑
-    compile(row) {
-      this.nuedialog = true;
-      this.title = "编辑";
     },
-    // 新增子级
-    newcomer(row) {
+
+    // 新增触发 一级新增
+    newnuedialog() {
       this.nuedialog = true;
       this.title = "新增";
     },
 
+    // 新增子级 这是二级入口
+    newcomer(row, type) {
+      this.nuedialog = true;
+      this.addPrarentCompanyCode = row.companyCode
+      this.title = "新增子单位";
+    },
 
     // 删除
     deleted(row) {
-      if (row.transition === "0") {
-        if (!this.warningShown) {
-          this.$message({
-            type: "error",
-            message: "该项处于停用状态,无法删除!",
-          });
-          this.warningShown = true; // 设置警告消息已经显示过了的标志位为true
-        }
+      console.log(row, "row");
+      if (row.state == "1") {
+        this.$message({
+          type: "error",
+          message: "该项处于启用状态,无法删除!",
+        });
         return;
       }
-
       this.$confirm("此操作将永久删除该文件,是否继续?", "提示", {
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         type: "warning",
       })
         .then(() => {
-          // 执行删除操作
-          this.$message({
-            type: "success",
-            message: "删除成功!",
-          });
+          delCompany({ companyCode: row.companyCode }).then((res) => {
+            this.getTableList()
+            // 执行删除操作
+            this.$message({
+              type: "success",
+              message: "删除成功!",
+            });
+          })
+
         })
         .catch(() => {
           // 取消删除
@@ -270,6 +331,57 @@ export default {
           });
         });
     },
+    // 展开收起
+    toggleExpandAll() {
+      this.defaultExpandAll = !this.defaultExpandAll;
+      this.$nextTick(() => {
+        this.setExpandAll(this.defaultExpandAll);
+      });
+    },
+
+    setExpandAll(expand) {
+      const table = this.$refs.table;
+      if (table) {
+        this.tableData.forEach((row) => {
+          table.toggleRowExpansion(row, expand);
+          if (row.children) {
+            row.children.forEach((child) => {
+              table.toggleRowExpansion(child, expand);
+            });
+          }
+        });
+      }
+    },
+
+
+    //异常详情
+    particulars(row) {
+      this.unusualdialog = true;
+    },
+    // 编辑回显
+    compile(row) {
+      this.title = "编辑";
+      this.isEdit = true
+      getWindCompany({
+        companyCode: row.companyCode
+      }).then((res) => {
+        const item = JSON.parse(JSON.stringify(res.data))
+        this.detail = item
+        this.newform = Object.assign({}, {
+          companyName: item.companyName,
+          described: item.described,
+        });
+        this.newform.province = Object.assign({}, { areaId: item.provinceId, provice: item.provinceName });
+        let that = this
+        // this.newform.city = Object.assign({}, { areaId: item.cityId, city: item.cityName });
+        this.fetchCities(this.newform.province, { areaId: item.cityId, city: item.cityName })
+        console.log(this.newform, row, item)
+        this.nuedialog = true;
+      })
+
+
+
+    },
 
 
   },
@@ -280,4 +392,10 @@ export default {
 .el-select {
   width: 250px;
 }
+
+.form-margin {
+  .el-form-item {
+    margin-bottom: 22px;
+  }
+}
 </style>

+ 303 - 204
src/views/ledger/milltype.vue

@@ -3,11 +3,11 @@
         <div class="condition">
             <el-form :inline="true" :model="formInline" class="demo-form-inline">
                 <el-form-item label="机型型号:">
-                    <el-input v-model="formInline.user" placeholder="请输入批次编号" size="small"></el-input>
+                    <el-input v-model="formInline.machineTypeCode" placeholder="请输入机型型号" size="small"></el-input>
                 </el-form-item>
                 <el-form-item label="选择日期:" size="small">
                     <el-date-picker v-model="formInline.timeQuantum" type="daterange" range-separator="至"
-                        start-placeholder="开始日期" end-placeholder="结束日期">
+                        start-placeholder="开始日期" end-placeholder="结束日期" @change="onDateChange">
                     </el-date-picker>
                 </el-form-item>
                 <el-form-item>
@@ -18,38 +18,47 @@
         </div>
         <div class="list-page">
             <div class="newly">
-
                 <el-button type="primary" @click="newnuedialog" size="small">新增</el-button>
             </div>
 
             <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle">
-                <el-table-column align="center" fixed prop="" label="机型型号">
+                <el-table-column align="center" fixed prop="machineTypeCode" label="机型型号">
                     <template slot-scope="scope">
-                        <el-button @click="particulars(scope.row)" type="text" size="small">泗洪风场</el-button>
+                        <el-button @click="particulars(scope.row)" type="text" size="small">{{ scope.row.machineTypeCode
+                            }}</el-button>
                     </template>
                 </el-table-column>
 
-                <el-table-column align="center" label="厂商编号"> </el-table-column>
-
+                <el-table-column prop="manufacturerCode" align="center" label="厂商编号">
+                </el-table-column>
 
-                <el-table-column prop="" align="center" label="机型类型" width="100">
+                <el-table-column prop="curvedMotionType" align="center" label="机型类型" width="120">
+                    <template v-slot="scope">
+                        <!-- 假设 type 为 123 时显示特殊内容 -->
+                        <span v-if="scope.row.curvedMotionType == '1'">双馈</span>
+                        <span v-else-if="scope.row.curvedMotionType == '2'">半驱</span>
+                        <span v-else-if="scope.row.curvedMotionType == '3'">半直曲</span>
+                    </template>
                 </el-table-column>
-                <el-table-column prop="" align="center" label="厂商名称" width="100">
+                <el-table-column prop="manufacturerName" align="center" label="厂商名称" width="200">
                 </el-table-column>
 
-                <el-table-column prop="" align="center" label="品牌名称" width="100">
+                <el-table-column prop="brand" align="center" label="品牌名称" width="200">
                 </el-table-column>
-                <el-table-column prop="" align="center" label="状态" width="100">
+                <el-table-column prop="state" align="center" label="状态" width="100">
+                    <template slot-scope="{ row }">
+                        {{ row.state == 1 ? "启用" : "停用" }}
+                    </template>
                 </el-table-column>
-                <el-table-column prop="" align="center" label="创建时间">
+                <el-table-column prop="createTime" align="center" label="创建时间">
                 </el-table-column>
                 <el-table-column prop="transition" align="center" fixed="right" label="操作" width="200">
                     <template slot-scope="scope">
                         <el-button @click="compile(scope.row)" type="text" size="small">编辑</el-button>
                         <el-button @click="uploading(scope.row)" type="text" size="small">上传</el-button>
-                        <el-button v-if="scope.row.transition == 1" @click="start(scope.row)" type="text"
+                        <el-button v-if="scope.row.state == 0" @click="start(scope.row, 1)" type="text"
                             size="small">启用</el-button>
-                        <el-button v-else style="color: #666" @click="stop(scope.row)" type="text"
+                        <el-button v-else style="color: #666" @click="start(scope.row, 0)" type="text"
                             size="small">停用</el-button>
                         <el-button style="color: #f00" @click="deleted(scope.row)" type="text"
                             size="small">删除</el-button>
@@ -57,152 +66,95 @@
                 </el-table-column>
             </el-table>
             <div class="pagination-container">
-                <el-pagination :page-size="10" :pager-count="11" layout="total, prev, pager, next" :total="35">
+                <el-pagination @current-change="handleCurrentChange" :current-page.sync="formInline.pageNum"
+                    layout="total, prev, pager, next" :page-size="formInline.pageSize" :total="formInline.totalSize">
                 </el-pagination>
             </div>
         </div>
 
-        <!-- 弹出层 -->
-
-        <!-- 新增 -->
-        <el-dialog :title="title" :visible.sync="nuedialog" width="800px">
-            <div class="general">
-
-                <div class="condition">
-                    <p>机型型号:</p>
-                    <el-input v-model="windsiteName"></el-input>
-                </div>
-                <div class="condition">
-                    <p>厂商名称:</p>
-                    <el-input v-model="airdensity"></el-input>
-                </div>
-
 
-                <div class="condition">
-                    <p>品牌名称:</p>
-                    <el-input v-model="altitude"></el-input>
-                </div>
 
-                <div class="condition">
-                    <p>驱动方式:</p>
-                    <el-select v-model="sheng" placeholder="请选择">
-                        <el-option v-for="item in shengOptions" :key="item.value" :label="item.label"
-                            :value="item.value">
-                        </el-option>
+        <!-- 新增 -->
+        <el-dialog :title="title" :visible.sync="nuedialog" width="400px">
+            <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
+                <el-form-item label="机型型号:" prop="machineTypeCode">
+                    <el-input v-model="ruleForm.machineTypeCode" size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="厂商名称:" prop="manufacturerName">
+                    <el-input v-model="ruleForm.manufacturerName" size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="厂商编号:" prop="manufacturerCode">
+                    <el-input v-model="ruleForm.manufacturerCode" size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="品牌名称:" prop="brand">
+                    <el-input v-model="ruleForm.brand" size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="驱动方式:" prop="curvedMotionType">
+                    <el-select v-model="ruleForm.curvedMotionType" placeholder="请选择" value-key="contentsValue"
+                        size="small">
+                        <el-option v-for="item in curvedMotionTypeOptions" :key="item.contentsValue"
+                            :label="item.contentsName" :value="item.contentsValue"></el-option>
                     </el-select>
-                </div>
-
-                <div class="condition">
-                    <p>塔筒高度:</p>
-                    <el-input v-model="longitude"></el-input>
-                </div>
-
-                <div class="condition">
-                    <p>叶片长度:</p>
-                    <el-input v-model="dimensionality"></el-input>
-                </div>
-
-
-            </div>
-
-            <span slot="footer" class="dialog-footer">
-                <el-button @click="nuedialog = false" size="small">取 消</el-button>
-                <el-button type="primary" @click="newly" size="small">确 定</el-button>
-            </span>
+                </el-form-item>
+                <el-form-item label="塔筒高度:" prop="towerHeight">
+                    <el-input v-model="ruleForm.towerHeight" size="small"></el-input>
+                </el-form-item>
+                <el-form-item label="叶片长度:" prop="vaneLong">
+                    <el-input v-model="ruleForm.vaneLong" size="small"></el-input>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="submitForm('ruleForm')" size="small">提交</el-button>
+                    <el-button @click="resetForm('ruleForm')" size="small">取消</el-button>
+                </el-form-item>
+            </el-form>
         </el-dialog>
 
-        <!-- 风场详情 -->
-        <el-dialog title="机器详情" :visible.sync="unusualdialog" width="800px">
+        <!-- 机型详情 -->
+        <el-dialog title="机型详情" :visible.sync="unusualdialog" width="600px">
             <div class="general">
                 <div class="condition">
                     <p>机型型号:</p>
+                    <span>{{ particularsdata.machineTypeCode }}</span>
                 </div>
                 <div class="condition">
                     <p>厂商名称:</p>
+                    <span>{{ particularsdata.manufacturerName }}</span>
                 </div>
 
                 <div class="condition">
                     <p>厂商编号:</p>
+                    <span>{{ particularsdata.manufacturerCode }}</span>
                 </div>
                 <div class="condition">
                     <p>品牌名称:</p>
+                    <span>{{ particularsdata.brand }}</span>
                 </div>
 
                 <div class="condition">
                     <p>驱动方式:</p>
+                    <span>
+                        <span v-if="particularsdata.curvedMotionType === 1">双馈</span>
+                        <span v-else-if="particularsdata.curvedMotionType === 2">半驱</span>
+                        <span v-else-if="particularsdata.curvedMotionType === 3">半直曲</span></span>
                 </div>
                 <div class="condition">
                     <p>状态:</p>
+                    <span>{{ particularsdata.state == 1 ? "启用" : "停用" }}</span>
                 </div>
                 <div class="condition">
                     <p>塔筒高度:</p>
+                    <span>{{ particularsdata.towerHeight }}米</span>
                 </div>
 
                 <div class="condition">
                     <p>叶片长度:</p>
+                    <span>{{ particularsdata.vaneLong }}米</span>
                 </div>
-
-
             </div>
             <div class="attachment">
                 <p>下载标准功率曲线附件</p>
-
-            </div>
-        </el-dialog>
-
-        <!-- 风机数量 -->
-        <el-dialog title="风机信息" :visible.sync="draught" width="1000px">
-            <el-table class="center-align-table" :data="tableData" border :cell-style="rowStyle" stripe>
-                <!-- Table Columns -->
-                <el-table-column fixed prop="name" align="center" label="风机名称">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="风机编号">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="风机机型">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="主机厂商">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="是否标杆">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="海拔高度/米" width="80">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="经度" width="80">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="纬度" width="80">
-                </el-table-column>
-                <el-table-column prop="" align="center" label="额定容量">
-                </el-table-column>
-            </el-table>
-
-            <div class="pagination-container">
-                <el-pagination :page-size="10" :pager-count="11" layout="total, prev, pager, next" :total="35">
-                </el-pagination>
             </div>
         </el-dialog>
-        <!-- 测风塔 -->
-        <el-dialog title="测风塔信息" :visible.sync="anemometerdialog" width="800px">
-            <H3 class="centeredH3">测风塔名称</H3>
-            <div class="general">
-                <div class="condition">
-                    <p>测风塔编号:</p>
-                </div>
-                <div class="condition">
-                    <p>测风塔名称:</p>
-                </div>
-
-                <div class="condition">
-                    <p>经度:</p>
-                </div>
-                <div class="condition">
-                    <p>维度:</p>
-                </div>
-
-                <div class="condition">
-                    <p>测风塔高度:</p>
-                </div>
-            </div>
-        </el-dialog>
-
 
         <!-- 上传 -->
         <el-dialog title="上传文件" :visible.sync="uploadingPOP" width="400px">
@@ -233,138 +185,272 @@
 </template>
 
 <script>
+import {
+    windEngineMillPage,
+    updateWindEngineMill,
+    getDictList,
+    createEngineMill,
+    delWindEngineMill,
+    getWindEngineMillPageVo,
+    
+} from "@/api/ledger.js";
+
 export default {
     data() {
         return {
+            tableData: [],
+            formInline: {
+                machineTypeCode: "",
+                timeQuantum: [],
+                pageNum: 1,
+                pageSize: 10,
+                totalSize: 0,
+            },
+            startDate: "",
+            endDate: "",
+            //新增
+            ruleForm: {
+                machineTypeCode: "",
+                manufacturerName: "",
+                brand: "",
+                curvedMotionType: "",
+                towerHeight: "",
+                manufacturerCode: "",
+                vaneLong: "",
+            },
+            curvedMotionTypeOptions: [],
+            rules: {
+                machineTypeCode: [
+                    { required: true, message: "请输入机型型号", trigger: "blur" },
+                ],
+                manufacturerName: [
+                    { required: true, message: "请输入厂商名称", trigger: "blur" },
+                ],
+                manufacturerCode: [
+                    { required: true, message: "请输入厂商编号", trigger: "blur" },
+                ],
+                brand: [{ required: true, message: "请输入品牌名称", trigger: "blur" }],
+                curvedMotionType: [
+                    { required: true, message: "请选择驱动方式", trigger: "change" },
+                ],
+                towerHeight: [
+                    { required: true, message: "请输入塔筒高度", trigger: "blur" },
+                    { validator: this.validateNumber, trigger: ["blur", "change"] },
+                ],
+                vaneLong: [
+                    { required: true, message: "请输入叶片长度", trigger: "blur" },
+                    { validator: this.validateNumber, trigger: ["blur", "change"] },
+                ],
+            },
+            particularsdata: [],
             // 新增信息
-            windsiteName: "",
-            airdensity: "",
             superior: "",
             superiorOptions: [],
             altitude: "",
-            sheng: "",
-            shengOptions: [],
-            shi: "",
-            shiOptions: [],
-            longitude: "",
-            dimensionality: "",
-            anemometer: "",
-            anemometerOptions: [],
-
             fileList: [
                 {
                     name: "food.jpeg",
                     url: "https://fuss10.elemecdn.com/3/63/4e7f3a15429bfda99bce42a18cdd1jpeg.jpeg?imageMogr2/thumbnail/360x360/format/webp/quality/100",
                 },
-
-            ],
-            formInline: {
-                user: "",
-                region: "",
-                timeQuantum: "",
-            },
-            tableData: [
-                {
-                    id: 1,
-                    name: "王小虎",
-                    transition: "1",
-                },
-                {
-                    id: 3,
-                    name: "王小虎",
-                    abnormal: "1",
-                    transition: "0",
-                    children: [
-                        {
-                            id: 31,
-
-                            name: "王小虎",
-
-                            abnormal: "1",
-                        },
-                    ],
-                },
             ],
             nuedialog: false,
             unusualdialog: false,
-
             draught: false,
-            anemometerdialog: false,
             uploadingPOP: false,
-            newform: {
-                unit: "",
-                province: "",
-                city: "",
-                descr: "",
-            },
             title: "新增",
+            detail: {},
+            isEdit: false
         };
     },
+    created() {
+        this.onSubmit();
+        this.Modeltype();
+    },
     methods: {
         rowStyle() {
             return "text-align:center";
         },
+        onDateChange(date) {
+            if (Array.isArray(date)) {
+                this.startDate = this.$formatDate(date[0]);
+                this.endDate = this.$formatDate(date[1]);
+                if (this.endDate < this.startDate) {
+                    this.endDate = this.startDate;
+                }
+            } else {
+                this.startDate = null;
+                this.endDate = null;
+            }
+        },
 
         // 查询
         onSubmit() {
-            console.log("submit!");
-        },
-        // 重置
-        reset() { },
-
-        // 新增
-        newly() {
-            this.nuedialog = false;
+            let paramsData = {
+                machineTypeCode: this.formInline?.machineTypeCode || undefined,
+                beginTime: this.startDate || undefined,
+                endTime: this.endDate || undefined,
+                pageNum: 1,
+                pageSize: 10,
+            };
+            windEngineMillPage(paramsData).then((res) => {
+                this.tableData = res.data.list;
+                this.formInline.totalSize = res.data.totalSize;
+            });
         },
-
-        //异常详情
-        particulars(row) {
-            this.unusualdialog = true;
-        },
-        //风机信息
-        ONdraught(row) {
-            this.draught = true;
+        // 停用
+        start(row, type) {
+            let objectval = {
+                millTypeCode: row.millTypeCode,
+                state: type === 0 ? 0 : 1,
+            };
+            updateWindEngineMill(objectval).then((res) => {
+                this.$message({
+                    message: "状态已更新成功",
+                    type: "success",
+                });
+                // this.$message(`${type === 1 ? '状态已更新成功' : '状态已更新成功'}`);
+                row.state = type === 1 ? 0 : 1;
+                this.onSubmit();
+            });
         },
-        ONanemometer(row) {
-            this.anemometerdialog = true;
+        Modeltype() {
+            getDictList({
+                dictType: 1,
+            }).then((res) => {
+                this.curvedMotionTypeOptions = res.data;
+            });
         },
-        // 编辑
-        compile(row) {
-            this.nuedialog = true;
-            this.title = "编辑";
+        // 新增提交
+        submitForm(formName) {
+            this.$refs[formName].validate((valid) => {
+                if (valid) {
+                    let objectdata = {
+                        machineTypeCode: this.ruleForm.machineTypeCode,
+                        manufacturerName: this.ruleForm.manufacturerName,
+                        manufacturerCode: this.ruleForm.manufacturerCode,
+                        brand: this.ruleForm.brand,
+                        curvedMotionType: this.ruleForm.curvedMotionType.contentsValue,
+                        towerHeight: this.ruleForm.towerHeight,
+                        vaneLong: this.ruleForm.vaneLong,
+                    };
+                    if (this.isEdit) {
+                        objectdata.millTypeCode = this.detail.millTypeCode
+                    }
+                    const API = !this.isEdit ? createEngineMill(objectdata) : updateWindEngineMill(objectdata)
+                    API.then((res) => {
+                        this.nuedialog = false;
+                        this.onSubmit();
+                        this.isEdit = false
+                        this.$message.success(this.isEdit ? "新增成功" : "编辑成功");
+                    });
+                } else {
+                    return false;
+                }
+            });
         },
-        // 上传附件
-        uploading(row) {
-            this.uploadingPOP = true;
+        resetForm(formName) {
+            this.$refs[formName].resetFields();
+            this.nuedialog = false;
         },
-        // 附件提交
-        filesubmit() {
-            this.uploadingPOP = false;
+        // 数字验证
+        validateNumber(rule, value, callback) {
+            const numberRegex = /^\d{1,4}(\.\d{1,2})?$/; // 匹配不超过四位数且小数点后不超过二位数的数字
+            if (!value) {
+                callback(new Error("该项不能为空"));
+            } else if (!numberRegex.test(value)) {
+                callback(
+                    new Error("该项必须为不超过四位数且小数点后不超过三位数的数字")
+                );
+            } else {
+                callback();
+            }
         },
-        // 启用
-        start(row) { },
-        // 停用
-        stop(row) { },
+
         // 删除
         deleted(row) {
-            this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
+            console.log(row, "row");
+            if (row.state == "1") {
+                this.$message({
+                    type: "error",
+                    message: "该项处于启用状态,无法删除!",
+                });
+                return;
+            }
+            this.$confirm("此操作将永久删除该文件,是否继续?", "提示", {
                 confirmButtonText: "确定",
                 cancelButtonText: "取消",
                 type: "warning",
             })
                 .then(() => {
-                    this.$message({
-                        type: "success",
-                        message: "删除成功!",
+                    delWindEngineMill({ millTypeCode: row.millTypeCode }).then((res) => {
+                        this.onSubmit();
+                        // 执行删除操作
+                        this.$message({
+                            type: "success",
+                            message: "删除成功!",
+                        });
                     });
                 })
                 .catch(() => {
+                    // 取消删除
                     this.$message({
                         type: "info",
                         message: "已取消删除",
                     });
                 });
         },
+
+        //机型详情
+        particulars(row) {
+            getWindEngineMillPageVo({ millTypeCode: row.millTypeCode }).then(
+                (res) => {
+                    this.unusualdialog = true;
+                    this.particularsdata = res.data;
+                }
+            );
+        },
+        //分页数据切换
+        handleCurrentChange(val) {
+            this.formInline.pageNum = val;
+            this.onSubmit();
+        },
+
+        // 重置
+        reset() { },
+
+        // 新增
+        newly() {
+            this.nuedialog = false;
+        },
+
+        // 编辑
+        compile(row) {
+            getWindEngineMillPageVo({ millTypeCode: row.millTypeCode }).then(
+                (res) => {
+                    const item = JSON.parse(JSON.stringify(res.data))
+                    this.detail = item
+                    Object.keys(this.ruleForm).forEach(
+                        key => {
+                            this.ruleForm[key] = item[key]
+                        }
+                    )
+                    console.log(res);
+                }
+            );
+            this.title = "编辑";
+            this.nuedialog = true;
+            this.isEdit = true;
+
+        },
+        // 上传附件
+        uploading(row) {
+            this.uploadingPOP = true;
+        },
+        // 附件提交
+        filesubmit() {
+            this.uploadingPOP = false;
+        },
+
         // 删除附件
         deleteRow(row) {
             this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
@@ -386,7 +472,6 @@ export default {
                 });
         },
 
-
         // 新增
         newnuedialog() {
             this.nuedialog = true;
@@ -409,12 +494,11 @@ export default {
             width: 100px;
             text-align: right;
             line-height: 40px;
+            margin-right: 10px;
         }
 
         span {
             line-height: 40px;
-
-            padding-left: 20px;
         }
 
         .el-select {
@@ -463,4 +547,19 @@ export default {
     height: 40px;
     font-size: 14px;
 }
+
+// ......................
+.demo-ruleForm {
+    .el-form-item {
+        margin-bottom: 20px;
+    }
+
+    .el-form-item__error {
+        padding-top: 0;
+    }
+
+    .el-select {
+        width: 260px;
+    }
+}
 </style>

+ 46 - 183
src/views/system/userMag/index.vue

@@ -1,61 +1,27 @@
 <template>
   <div class="global-variable">
     <div class="condition">
-      <el-form
-        :inline="true"
-        ref="ruleForm"
-        :model="formInline"
-        class="demo-form-inline"
-        :rules="rules"
-      >
+      <el-form :inline="true" ref="ruleForm" :model="formInline" class="demo-form-inline" :rules="rules">
         <el-form-item label="用户名称:" prop="userName">
-          <el-input
-            size="small"
-            v-model="formInline.userName"
-            placeholder="请输入用户名称"
-          ></el-input>
+          <el-input size="small" v-model="formInline.userName" placeholder="请输入用户名称"></el-input>
         </el-form-item>
         <el-form-item label="角色名称:" prop="roleId">
-          <el-select
-            v-model="formInline.roleId"
-            placeholder="请选择角色"
-            size="small"
-          >
-            <el-option
-              :label="item.roleDescription"
-              v-for="item in roleList"
-              :value="item.id + ''"
-            ></el-option>
+          <el-select v-model="formInline.roleId" placeholder="请选择角色" size="small">
+            <el-option :label="item.roleDescription" v-for="item in roleList" :value="item.id + ''"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="onSubmit" size="small"
-            >查询</el-button
-          >
+          <el-button type="primary" @click="onSubmit" size="small">查询</el-button>
           <el-button @click="reset('ruleForm')" size="small">重置</el-button>
         </el-form-item>
       </el-form>
     </div>
     <div class="list-page">
       <div class="newly">
-        <el-button type="primary" @click="newnuedialog" size="small"
-          >新增</el-button
-        >
+        <el-button type="primary" @click="newnuedialog" size="small">新增</el-button>
       </div>
-      <el-table
-        v-loading="loading"
-        class="center-align-table"
-        :data="tableData"
-        border
-        :cell-style="rowStyle"
-      >
-        <el-table-column
-          align="center"
-          fixed
-          prop="userId"
-          label="员工ID"
-          width="100"
-        >
+      <el-table v-loading="loading" class="center-align-table" :data="tableData" border :cell-style="rowStyle">
+        <el-table-column align="center" fixed prop="userId" label="员工ID" width="100">
         </el-table-column>
 
         <el-table-column align="center" label="员工名称" prop="userName">
@@ -75,64 +41,27 @@
                 scope.row.state == 0
                   ? "未启用"
                   : scope.row.state == 1
-                  ? "启用"
-                  : "禁用"
-              }}</span
-            >
+                    ? "启用"
+                    : "禁用"
+              }}</span>
           </template>
         </el-table-column>
 
-        <el-table-column
-          prop="transition"
-          align="center"
-          fixed="right"
-          label="操作"
-          width="200"
-        >
+        <el-table-column prop="transition" align="center" fixed="right" label="操作" width="200">
           <template slot-scope="scope">
-            <el-button @click="compile(scope.row)" type="text" size="small"
-              >编辑</el-button
-            >
-            <el-button
-              v-if="scope.row.state == 0 || scope.row.state == 2"
-              @click="setState(1, scope.row.userId)"
-              type="text"
-              size="small"
-              >启用</el-button
-            >
-            <el-button
-              v-else
-              style="color: #666"
-              @click="setState(2, scope.row.userId)"
-              type="text"
-              size="small"
-              >停用</el-button
-            >
-            <el-button
-              style="color: #f90"
-              @click="editPwd(scope.row)"
-              type="text"
-              size="small"
-              >修改密码</el-button
-            >
-            <el-button
-              style="color: #f00"
-              @click="deleted(scope.row)"
-              type="text"
-              size="small"
-              >删除</el-button
-            >
+            <el-button @click="compile(scope.row)" type="text" size="small">编辑</el-button>
+            <el-button v-if="scope.row.state == 0 || scope.row.state == 2" @click="setState(1, scope.row.userId)"
+              type="text" size="small">启用</el-button>
+            <el-button v-else style="color: #666" @click="setState(2, scope.row.userId)" type="text"
+              size="small">停用</el-button>
+            <el-button style="color: #f90" @click="editPwd(scope.row)" type="text" size="small">修改密码</el-button>
+            <el-button style="color: #f00" @click="deleted(scope.row)" type="text" size="small">删除</el-button>
           </template>
         </el-table-column>
       </el-table>
       <div class="pagination-container">
-        <el-pagination
-          @current-change="handleCurrentChange"
-          :current-page.sync="formInline.pageNum"
-          layout="total, prev, pager, next"
-          :page-size="formInline.pageSize"
-          :total="formInline.totalSize"
-        >
+        <el-pagination @current-change="handleCurrentChange" :current-page.sync="formInline.pageNum"
+          layout="total, prev, pager, next" :page-size="formInline.pageSize" :total="formInline.totalSize">
         </el-pagination>
       </div>
     </div>
@@ -141,117 +70,50 @@
     <!-- 新增 /编辑-->
     <el-dialog :title="title" :visible.sync="nuedialog" width="500px">
       <div v-loading="loadingView" class="views">
-        <el-form
-          :model="ruleForm"
-          :rules="addUserRules"
-          ref="addUserForm"
-          label-width="100px"
-          class="demo-ruleForm"
-        >
+        <el-form :model="ruleForm" :rules="addUserRules" ref="addUserForm" label-width="100px" class="demo-ruleForm">
           <el-form-item label="员工名称" prop="userName">
-            <el-input
-              v-model="ruleForm.userName"
-              placeholder="请输入员工名称"
-            ></el-input>
+            <el-input v-model="ruleForm.userName" placeholder="请输入员工名称"></el-input>
           </el-form-item>
           <el-form-item label="电话号码" prop="phone">
-            <el-input
-              v-model="ruleForm.phone"
-              placeholder="请输入电话号码"
-            ></el-input>
+            <el-input v-model="ruleForm.phone" placeholder="请输入电话号码"></el-input>
           </el-form-item>
           <el-form-item label="账号名称" prop="loginName">
-            <el-input
-              v-model="ruleForm.loginName"
-              placeholder="请输入账号名称"
-              autocomplete="off"
-            ></el-input>
+            <el-input v-model="ruleForm.loginName" placeholder="请输入账号名称" autocomplete="off"></el-input>
           </el-form-item>
           <el-form-item label="密码" prop="pwd" v-if="title === '新增'">
-            <el-input
-              v-model="ruleForm.pwd"
-              autocomplete="new-password"
-              show-password
-              placeholder="请输入密码"
-            ></el-input>
+            <el-input v-model="ruleForm.pwd" autocomplete="new-password" show-password placeholder="请输入密码"></el-input>
           </el-form-item>
           <el-form-item label="角色名称:" prop="roleId">
-            <el-select
-              v-model="ruleForm.roleId"
-              placeholder="请选择角色"
-              style="width: 100%"
-            >
-              <el-option
-                :label="item.roleDescription"
-                v-for="item in roleList"
-                :value="item.id + ''"
-              ></el-option>
+            <el-select v-model="ruleForm.roleId" placeholder="请选择角色" style="width: 100%">
+              <el-option :label="item.roleDescription" v-for="item in roleList" :value="item.id + ''"></el-option>
             </el-select>
           </el-form-item>
         </el-form>
         <span slot="footer" class="dialog-footer">
-          <el-button @click="cancel('addUserForm')" size="small"
-            >取 消</el-button
-          >
-          <el-button
-            type="primary"
-            @click="submitForm('addUserForm')"
-            size="small"
-            >确 定</el-button
-          >
+          <el-button @click="cancel('addUserForm')" size="small">取 消</el-button>
+          <el-button type="primary" @click="submitForm('addUserForm')" size="small">确 定</el-button>
         </span>
       </div>
     </el-dialog>
     <!-- 风场详情 -->
     <el-dialog title="修改密码" :visible.sync="unusualdialog" width="500px">
       <div v-loading="loadingView" class="views">
-        <el-form
-          :model="editUserPassword"
-          ref="editUserPassword"
-          label-width="100px"
-          class="demo-ruleForm"
-        >
-          <el-form-item
-            label="旧密码"
-            prop="oldPWD"
-            :rules="[{ required: true, message: '旧密码不能为空' }]"
-          >
-            <el-input
-              v-model.number="editUserPassword.oldPWD"
-              autocomplete="off"
-              show-password
-            ></el-input>
+        <el-form :model="editUserPassword" ref="editUserPassword" label-width="100px" class="demo-ruleForm">
+          <el-form-item label="旧密码" prop="oldPWD" :rules="[{ required: true, message: '旧密码不能为空' }]">
+            <el-input v-model.number="editUserPassword.oldPWD" autocomplete="off" show-password></el-input>
           </el-form-item>
-          <el-form-item
-            label="新密码"
-            prop="newPWD"
-            :rules="[{ required: true, message: '新密码不能为空' }]"
-          >
-            <el-input
-              v-model.number="editUserPassword.newPWD"
-              autocomplete="off"
-              show-password
-            ></el-input>
+          <el-form-item label="新密码" prop="newPWD" :rules="[{ required: true, message: '新密码不能为空' }]">
+            <el-input v-model.number="editUserPassword.newPWD" autocomplete="off" show-password></el-input>
           </el-form-item>
         </el-form>
         <span slot="footer" class="dialog-footer">
-          <el-button
-            @click="
-              () => {
-                this.$refs['editUserPassword'].resetFields();
-                this.unusualdialog = false;
-                this.loadingView = false;
-              }
-            "
-            size="small"
-            >取 消</el-button
-          >
-          <el-button
-            type="primary"
-            @click="editUserPwd('editUserPassword')"
-            size="small"
-            >确 定</el-button
-          >
+          <el-button @click="() => {
+              this.$refs['editUserPassword'].resetFields();
+              this.unusualdialog = false;
+              this.loadingView = false;
+            }
+            " size="small">取 消</el-button>
+          <el-button type="primary" @click="editUserPwd('editUserPassword')" size="small">确 定</el-button>
         </span>
       </div>
     </el-dialog>
@@ -390,7 +252,7 @@ export default {
               });
               this.getTableList();
             })
-            .catch((error) => {});
+            .catch((error) => { });
           break;
         case 2:
           //禁用接口
@@ -402,7 +264,7 @@ export default {
               });
               this.getTableList();
             })
-            .catch((error) => {});
+            .catch((error) => { });
           break;
         default:
           return;
@@ -549,7 +411,7 @@ export default {
               });
               this.getTableList();
             })
-            .catch(() => {});
+            .catch(() => { });
         })
         .catch(() => {
           this.$message({
@@ -624,6 +486,7 @@ export default {
   justify-content: flex-end;
   margin-bottom: 10px;
 }
+
 .demo-ruleForm {
   .el-form-item {
     margin-bottom: 25px;