Quellcode durchsuchen

Merge branch 'master' of http://192.168.50.233:3000/rui.jiang/performance-test

liujiejie vor 3 Monaten
Ursprung
Commit
f48aae7d4b

+ 21 - 0
src/main.js

@@ -82,6 +82,27 @@ Vue.prototype.$formatDateTWO = function (timestamp) {
   return `${year}-${month}-${day} ${hours}:${minutes}`;
 };
 
+
+// man.js
+
+// 注册 convertDMSToDecimal 方法
+Vue.prototype.$convertDMSToDecimal = function (dms) {
+  const dmsRegex = /^([+-]?\d{1,3})°(\d{1,2})′(\d{1,2})″$/;
+  const match = dms.match(dmsRegex);
+
+  if (match) {
+    const degrees = parseInt(match[1], 10);
+    const minutes = parseInt(match[2], 10);
+    const seconds = parseInt(match[3], 10);
+
+    // 使用公式进行转换
+    return degrees + minutes / 60 + seconds / 3600;
+  }
+
+  return null; // 如果格式不正确,返回null
+};
+
+
 // 路由导航守卫
 router.beforeEach((to, from, next) => {
   if (from.path === "/home/performance/customAnalysis") {

+ 1 - 1
src/styles/base.css

@@ -272,7 +272,7 @@ body {
 
 .newly {
   display: flex;
-  justify-content: right;
+  /* justify-content: right; */
   margin-bottom: 20px;
 }
 

+ 9 - 9
src/views/admin/cockpitManage/Index.vue

@@ -4,7 +4,7 @@
     <div class="statistics">
       <div class="ledata">
         <selecttree
-          placeholder="请选择上级单位"
+          placeholder="请选择所属公司"
           :list="parentOpt"
           type="1"
           v-model="companyCode"
@@ -17,8 +17,8 @@
         >
         </selecttree>
 
-        <p>
-          <span class="SpText">登录人风场总数:</span>
+        <p  >
+          <span class="SpText">可观察风场数:</span>
           {{ totalList?.fieldSumNumber ? totalList.fieldSumNumber : 0 }}
         </p>
@@ -29,7 +29,7 @@
           }}
         </p>
-        <p>
+        <!-- <p>
           <span class="SpText">未完成分析风场:</span>
           {{
             totalList?.analysisUnFinishedNumber
@@ -37,18 +37,18 @@
               : 0
           }}
-        </p>
+        </p> -->
         <p>
           <span class="SpText">风机数量:</span>
           {{ totalList?.engineGroupNumber ? totalList.engineGroupNumber : 0 }}
         </p>
-        <p>
+        <!-- <p>
           <span class="SpText">风场状态:</span>
           <span class="red"></span>
           <span class="yellow"></span>
           <span class="green"></span>
-        </p>
+        </p> -->
         <el-switch
           v-model="value1"
           active-text="显示"
@@ -265,7 +265,7 @@ export default {
   .ledata {
     font-size: 14px;
     width: 300px;
-    background: #008080;
+    background: rgba(0, 128, 128, 0.8);
     padding: 10px;
     color: #fff;
     border-radius: 5px;
@@ -302,7 +302,7 @@ export default {
   }
 
   .task {
-    background: #f4f4f4;
+    // background: #f4f4f4;
     // padding: 10px;
     color: #333;
     border-radius: 5px;

+ 1 - 1
src/views/admin/cockpitManage/IndexBeiF.vue

@@ -3,7 +3,7 @@
     <Tmap ref="map" :maplist="maplist" @feature-click="featureClick"></Tmap>
     <div class="ledata">
       <selecttree
-        placeholder="请选择上级单位"
+        placeholder="请选择所属公司"
         :list="parentOpt"
         type="1"
         v-model="companyCode"

+ 147 - 80
src/views/admin/cockpitManage/component/leftdata.vue

@@ -1,19 +1,23 @@
 <template>
   <div class="backbone">
-    <div class="BOX">
+    <div class="BOXYI">
       <h3>待办任务</h3>
-      <div style="display: flex">
+      <div class="BOXsan">
         <div class="YC02" @click="getwgl">
           <strong class="texyellow">
-            {{ onrelevance ? onrelevance : 0 }}
-          </strong>
-          <span>未关联任务</span>
+            {{ onrelevance ? onrelevance : 0 }}</strong
+          >
+          <span>分析异常数</span>
         </div>
         <div class="YC02" @click="getwfx">
           <strong class="textred"> {{ abnormal ? abnormal : 0 }}</strong>
-          <span>分析异常数</span>
+          <span>失败分析数</span>
+        </div>
+
+        <div class="YC03">
+          <strong class="textred"> {{ abnormal ? abnormal : 0 }}</strong>
+          <span>排队任务数</span>
         </div>
-        <div class="YC03"></div>
       </div>
 
       <el-dialog title="未关联任务统计表" :visible.sync="glShow" width="40%">
@@ -76,9 +80,24 @@
     <!-- 入库信息 -->
 
     <div class="BOX">
-      <h3 class="centeredh3">入库数据 <span @click="more">更多</span></h3>
+      <h3 class="centeredh3">
+        入库数据
+        <span>
+          <span style="cursor: pointer" @click="importdata">导入数据</span>
+          <span style="cursor: pointer" @click="more">更多</span>
+        </span>
+      </h3>
       <div>
-        <el-table
+        <p class="titleYC"><span>风场名称</span><span>入库时间</span></p>
+        <tabroll
+              :table-data="tableData"
+          :shujuloading="shujuloading"
+          :columns="YCtableColumns"
+          :column-widths="YCcolumnWidths"
+          :max-height="140"
+        ></tabroll>
+
+        <!-- <el-table
           :data="tableData"
           :max-height="maxHeight"
           ref="shujuscroll_Table"
@@ -90,24 +109,18 @@
           <el-table-column
             prop="windFarmName"
             label="风场名称"
-            width="90"
+            width="130"
             show-overflow-tooltip
           >
           </el-table-column>
           <el-table-column
             prop="createTime"
             label="时间"
-            width="90"
+            width="150"
             show-overflow-tooltip
           >
           </el-table-column>
-          <el-table-column
-            prop="transferTypeName"
-            label="数据类型"
-            show-overflow-tooltip
-          >
-          </el-table-column>
-        </el-table>
+        </el-table> -->
       </div>
     </div>
 
@@ -158,7 +171,7 @@ import {
   analysisResultList,
 } from "@/api/ledger.js";
 import axios from "axios";
-
+import Tabroll from "./tabroll.vue";
 export default {
   // props: {
   //   maplistArr: {
@@ -170,7 +183,9 @@ export default {
   //     default: () => ({}),
   //   },
   // },
-
+  components: {
+    Tabroll,
+  },
   data() {
     return {
       onrelevance: "",
@@ -183,6 +198,12 @@ export default {
       tableData: [],
       maxHeight: "200",
       gridData: [],
+      shujuloading: false,
+      YCtableColumns: [{ prop: "windFarmName" }, { prop: "createTime" }],
+      YCcolumnWidths: {
+        windFarmName: 130,
+        createTime: 150,
+      },
     };
   },
   created() {
@@ -320,8 +341,113 @@ export default {
   //   padding: 20px;
 }
 
+.BOXYI {
+  background: rgba(0, 79, 95, 0.8);
+  display: flex;
+  flex-wrap: wrap;
+  padding-left: 10px;
+  padding-right: 10px;
+  padding-bottom: 15px;
+  color: #fff;
+  border-radius: 5px;
+  margin-bottom: 10px;
+  .BOXsan {
+    width: 100%;
+    display: flex;
+    justify-content: space-around;
+
+    .YC01 {
+      width: 154px;
+      height: 60px;
+      background-image: url("../../../../assets/001.png");
+      background-size: 154px 60px;
+      background-repeat: no-repeat;
+      background-position: center;
+
+      margin-top: 15px;
+      text-align: center;
+
+      strong {
+        display: block;
+        font-size: 26px;
+        color: #4bffff;
+      }
+
+      span {
+        display: block;
+        font-size: 12px;
+      }
+    }
+
+    .YC02 {
+      width: 70px;
+      height: 60px;
+      background-image: url("../../../../assets/002.png");
+      background-size: 70px 60px;
+      background-repeat: no-repeat;
+      background-position: center;
+
+      margin-top: 15px;
+      text-align: center;
+      cursor: pointer;
+      .textred {
+        color: #d9001b;
+      }
+
+      .texyellow {
+        color: #facd91;
+      }
+
+      strong {
+        display: block;
+        font-size: 26px;
+        color: #4bffff;
+      }
+
+      span {
+        display: block;
+        font-size: 12px;
+      }
+    }
+
+    .YC03 {
+      width: 70px;
+      height: 60px;
+      background-image: url("../../../../assets/002.png");
+      background-size: 70px 60px;
+      background-repeat: no-repeat;
+      background-position: center;
+
+      margin-top: 15px;
+      text-align: center;
+      cursor: pointer;
+      .textred {
+        color: #d9001b;
+      }
+
+      .texyellow {
+        color: #facd91;
+      }
+
+      strong {
+        display: block;
+        font-size: 26px;
+        color: #4bffff;
+      }
+
+      span {
+        display: block;
+        font-size: 12px;
+      }
+    }
+  }
+  h3 {
+    margin-top: 5px;
+    width: 100%;
+  }
+}
 .BOX {
-  background: #004f5f;
+  background: rgba(0, 79, 95, 0.8);
   display: flex;
   padding-left: 10px;
   flex-wrap: wrap;
@@ -344,65 +470,6 @@ export default {
   }
 }
 
-.YC01 {
-  width: 154px;
-  height: 60px;
-  background-image: url("../../../../assets/001.png");
-  background-size: 154px 60px;
-  background-repeat: no-repeat;
-  background-position: center;
-  margin-right: 15px;
-  margin-top: 15px;
-  text-align: center;
-
-  strong {
-    display: block;
-    font-size: 26px;
-    color: #4bffff;
-  }
-
-  span {
-    display: block;
-    font-size: 12px;
-  }
-}
-
-.YC02 {
-  width: 70px;
-  height: 60px;
-  background-image: url("../../../../assets/002.png");
-  background-size: 70px 60px;
-  background-repeat: no-repeat;
-  background-position: center;
-  margin-right: 15px;
-  margin-top: 15px;
-  text-align: center;
-  cursor: pointer;
-  .textred {
-    color: #d9001b;
-  }
-
-  .texyellow {
-    color: #facd91;
-  }
-
-  strong {
-    display: block;
-    font-size: 26px;
-    color: #4bffff;
-  }
-
-  span {
-    display: block;
-    font-size: 12px;
-  }
-}
-
-.YC03 {
-  width: 70px;
-  height: 60px;
-}
-
 .Tabtab {
   font-size: 12px;
 }

+ 64 - 13
src/views/admin/cockpitManage/component/rightdata.vue

@@ -2,6 +2,17 @@
   <div class="backbone">
     <div>
       <h3>风场分析完成率</h3>
+      <el-date-picker
+        size="mini"
+        v-model="value1"
+        type="datetimerange"
+        format="yyyy-MM-dd"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        @change="onDateChange"
+      >
+      </el-date-picker>
       <div id="main" style="width: 260px; height: 160px"></div>
     </div>
     <div>
@@ -46,17 +57,7 @@
         </div>
       </div>
     </div>
-    <div>
-      <h3 style="margin: 8px 0">异常数据信息</h3>
-      <p class="titleYC"><span>风场名称</span><span>风机信息</span></p>
-      <Tabroll
-        :table-data="YCtableData"
-        :shujuloading="shujuloading"
-        :columns="YCtableColumns"
-        :column-widths="YCcolumnWidths"
-        :max-height="120"
-      ></Tabroll>
-    </div>
+
     <div>
       <h3 style="margin: 8px 0">性能分析操作记录</h3>
       <p class="titleJQ">
@@ -70,6 +71,17 @@
         :column-widths="columnWidths"
       ></Tabroll>
     </div>
+    <div>
+      <h3 style="margin: 8px 0">异常数据信息</h3>
+      <p class="titleYC"><span>风场名称</span><span>风机信息</span></p>
+      <Tabroll
+        :table-data="YCtableData"
+        :shujuloading="shujuloading"
+        :columns="YCtableColumns"
+        :column-widths="YCcolumnWidths"
+        :max-height="120"
+      ></Tabroll>
+    </div>
   </div>
 </template>
 
@@ -131,11 +143,21 @@ export default {
         analysisingCount: 0,
         noAnalysisCount: 0,
       },
+      value1: "",
+      startTime: "",
+      endTime: "",
     };
   },
   created() {},
   mounted() {
     this.initChart();
+    const currentTime = new Date();
+    const halfYearAgo = new Date();
+    halfYearAgo.setMonth(currentTime.getMonth() - 6);
+    this.value1 = [halfYearAgo, currentTime];
+    // 同时更新 startTime 和 endTime
+    this.startTime = this.$formatDate(halfYearAgo);
+    this.endTime = this.$formatDate(currentTime);
   },
   methods: {
     initChart() {
@@ -192,10 +214,21 @@ export default {
       };
       this.myChart.setOption(option);
     },
+
     getStatistics() {
+      const startTime =
+        this.startTime ||
+        this.$formatDate(
+          new Date(new Date().setMonth(new Date().getMonth() - 6))
+        ); // 半年前的时间
+      const endTime = this.endTime || this.$formatDate(new Date()); // 当前时间
+      // halfYearAgo.setMonth(currentTime.getMonth() - 6)
+
       let DataObject = {
         codeNumber: this.maplistArr.codeNumber,
         codeType: this.maplistArr.codeType,
+        startTime: startTime,
+        endTime: endTime,
       };
       queryStatistics(DataObject).then((res) => {
         this.YCtableData = res.data.errList || [];
@@ -212,6 +245,20 @@ export default {
         this.tableData = res.data || [];
       });
     },
+
+    onDateChange(date) {
+      if (Array.isArray(date)) {
+        this.startTime = this.$formatDate(date[0]);
+        this.endTime = this.$formatDate(date[1]);
+        if (this.endDate < this.startTime) {
+          this.endTime = this.startTime;
+        }
+        this.getStatistics();
+      } else {
+        this.startTime = null;
+        this.endTime = null;
+      }
+    },
   },
 };
 </script>
@@ -220,7 +267,7 @@ export default {
 .backbone {
   width: 300px;
   color: #fff;
-  background: #008080;
+  background: rgba(0, 128, 128, 0.8);
   // height: 100%;
   // height: 95%;
   border-radius: 5px;
@@ -228,7 +275,7 @@ export default {
 }
 
 .BOX {
-  background: #004f5f;
+  background: rgba(0, 79, 95, 0.6);
   display: flex;
   padding-left: 10px;
   flex-wrap: wrap;
@@ -333,4 +380,8 @@ export default {
     margin: 0 45px 0 30px;
   }
 }
+.el-date-editor--datetimerange.el-input,
+.el-date-editor--datetimerange.el-input__inner {
+  width: 250px;
+}
 </style>

+ 1 - 1
src/views/health/vibration.vue

@@ -31,7 +31,7 @@
         单位:
         <selecttree
           style="width: 220px"
-          placeholder="请选择上级单位"
+          placeholder="请选择所属公司"
           :list="parentOpt"
           type="1"
           v-model="companyCode"

+ 1 - 1
src/views/laserRangeFinder/index.vue

@@ -26,7 +26,7 @@
                 <el-form-item label="单位">
                   <selecttree
                     style="width: 220px"
-                    placeholder="请选择上级单位"
+                    placeholder="请选择所属公司"
                     :list="parentOpt"
                     type="1"
                     v-model="formInline.companyCode"

+ 99 - 41
src/views/ledger/anemometer.vue

@@ -46,6 +46,7 @@
           fixed
           prop="anemometerName"
           label="测风塔名称"
+          width="200"
         >
           <template slot-scope="scope">
             <el-button
@@ -61,6 +62,7 @@
           prop="anemometerCode"
           align="center"
           label="测风塔编号"
+          width="200"
         >
         </el-table-column>
 
@@ -68,7 +70,7 @@
           prop="longitude"
           align="center"
           label="经度"
-          min-width="200"
+          min-width="150"
         >
         </el-table-column>
 
@@ -76,7 +78,7 @@
           prop="latitude"
           align="center"
           label="纬度"
-          min-width="200"
+          min-width="150"
         >
         </el-table-column>
         <el-table-column
@@ -164,6 +166,21 @@
         <el-form-item prop="anemometerName" label="测风塔名称">
           <el-input v-model="dynamicValidateForm.anemometerName"></el-input>
         </el-form-item>
+        <el-form-item label="经纬度类型:">
+          <el-select
+            v-model="SFMvalue"
+            placeholder="请选择"
+            @change="handleSFMChange"
+          >
+            <el-option
+              v-for="item in SFMoptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
         <el-form-item prop="longitude" label="经度">
           <el-input v-model="dynamicValidateForm.longitude"></el-input>
         </el-form-item>
@@ -223,6 +240,17 @@ import {
 export default {
   data() {
     return {
+      SFMvalue: "",
+      SFMoptions: [
+        {
+          label: "十进制形式",
+          value: "1",
+        },
+        {
+          label: "度分秒形式",
+          value: "2",
+        },
+      ],
       loading: false,
       tableData: [],
       formInline: {
@@ -431,42 +459,55 @@ export default {
 
     // 修改的
     submitForm(formName) {
-      this.$refs[formName].validate((valid) => {
-        if (!valid) {
-          this.$message.error("请填写必填项");
-          return;
-        }
+  this.$refs[formName].validate((valid) => {
+    if (!valid) {
+      this.$message.error("请填写必填项");
+      return;
+    }
 
-        let paramsData = {
-          anemometerName: this.dynamicValidateForm.anemometerName,
-          latitude: this.dynamicValidateForm.latitude,
-          longitude: this.dynamicValidateForm.longitude,
-        };
-
-        let API;
-        if (!this.isEdit) {
-          paramsData.anemometerTowerHeightDtoList =
-            this.dynamicValidateForm.anemometerTowerHeightDtoList;
-          API = createAnemometerTower(paramsData);
-        } else {
-          paramsData.anemometerTowerHeightListDtos =
-            this.dynamicValidateForm.anemometerTowerHeightDtoList;
-          paramsData.anemometerCode = this.detail.anemometerCode;
-          API = updateAnemometerTower(paramsData);
-        }
+    // 处理经纬度格式转换
+    let latitude = this.dynamicValidateForm.latitude;
+    let longitude = this.dynamicValidateForm.longitude;
 
-        API.then((res) => {
-          this.nuedialog = false;
-          if (this.isEdit) {
-            this.isEdit = false;
-            this.$message.success("编辑成功");
-          } else {
-            this.$message.success("新增成功");
-          }
-          this.onSubmit();
-        }).catch((error) => {});
-      });
-    },
+    // 如果 SFMvalue 为 2(表示使用度分秒格式),则转换经纬度
+    if (this.SFMvalue === "2") {
+      latitude = this.$convertDMSToDecimal(latitude);
+      longitude = this.$convertDMSToDecimal(longitude);
+    }
+
+    // 构建提交参数
+    let paramsData = {
+      anemometerName: this.dynamicValidateForm.anemometerName,
+      latitude: latitude,  // 使用转换后的纬度
+      longitude: longitude,  // 使用转换后的经度
+    };
+
+    let API;
+    if (!this.isEdit) {
+      // 新增操作
+      paramsData.anemometerTowerHeightDtoList = this.dynamicValidateForm.anemometerTowerHeightDtoList;
+      API = createAnemometerTower(paramsData);
+    } else {
+      // 编辑操作
+      paramsData.anemometerTowerHeightListDtos = this.dynamicValidateForm.anemometerTowerHeightDtoList;
+      paramsData.anemometerCode = this.detail.anemometerCode;
+      API = updateAnemometerTower(paramsData);
+    }
+
+    API.then((res) => {
+      this.nuedialog = false;
+      if (this.isEdit) {
+        this.isEdit = false;
+        this.$message.success("编辑成功");
+      } else {
+        this.$message.success("新增成功");
+      }
+      this.onSubmit();
+    }).catch((error) => {
+      console.error(error); // 捕获 API 错误
+    });
+  });
+},
     // xz
     addDomain() {
       this.dynamicValidateForm.anemometerTowerHeightDtoList.push({
@@ -480,17 +521,34 @@ export default {
 
     // 数字验证
     validateNumber(rule, value, callback) {
-      const numberRegex = /^\d{1,3}(\.\d{1,8})?$/; // 匹配不超过四位数且小数点后不超过二位数的数字
+      let regex, errorMessage;
+
+      switch (rule.field) {
+        case "longitude":
+        case "latitude":
+          regex = /^[+-]?\d+(\.\d+)?$|^[+-]?\d{1,3}°\d{1,2}′\d{1,2}″$/;
+          errorMessage =
+            "请输入有效的经纬度格式,可以是度分秒格式(如:91°06′00″)或十进制格式(如:116.39138889)";
+          break;
+        default:
+          regex = /^[^\u4e00-\u9fa5]+$/;
+          errorMessage = "请输入有效数字,不能包含汉字或其他非法字符";
+      }
+
       if (!value) {
         callback(new Error("该项不能为空"));
-      } else if (!numberRegex.test(value)) {
-        callback(
-          new Error("该项必须为不超过三位数且小数点后不超过八位数的数字")
-        );
+      } else if (!regex.test(value)) {
+        callback(new Error(errorMessage));
       } else {
         callback();
       }
     },
+
+    handleSFMChange(newValue) {
+      this.dynamicValidateForm.longitude = "";
+      this.dynamicValidateForm.latitude = "";
+    },
+
     validateUniqueHeight(rule, value, callback) {
       const heights = this.dynamicValidateForm.anemometerTowerHeightDtoList.map(
         (tower) => tower.anemometerHeight

+ 1 - 1
src/views/ledger/component/windsiteMessage.vue

@@ -18,7 +18,7 @@
         </div>
 
         <div class="condition">
-          <p>上级单位:</p>
+          <p>所属公司:</p>
           <span>{{ unusualdialogdata.companyName }}</span>
         </div>
         <div class="condition">

+ 3 - 3
src/views/ledger/component/windsitetolead.vue

@@ -10,9 +10,9 @@
       </el-alert>
       <p class="model-center" @click="download">模板下载</p>
       <div class="UPcondition">
-        <p>上级单位:</p>
+        <p>所属公司:</p>
         <selecttree
-          placeholder="请选择上级单位"
+          placeholder="请选择所属公司"
           :list="parentOptdata"
           v-model="companyCode"
           @change="parentChange"
@@ -129,7 +129,7 @@ export default {
         this.companyCode === undefined
       ) {
         this.$message({
-          message: "请选择上级单位",
+          message: "请选择所属公司",
           type: "warning",
         });
         return;

+ 91 - 21
src/views/ledger/draught.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="global-variable" v-loading="loading">
-    <div class="condition">
+    <div class="header-condition">
       <el-form :inline="true" :model="formInline" class="demo-form-inline">
         <el-form-item label="风机名称:">
           <el-input
@@ -27,15 +27,16 @@
           <el-button @click="reset" size="small">重置</el-button>
         </el-form-item>
       </el-form>
-    </div>
-
-    <div class="list-page">
       <div class="newly">
         <el-button @click="upfile" size="small">导入</el-button>
         <el-button type="primary" @click="newnuedialog" size="small"
           >新增</el-button
         >
       </div>
+    </div>
+
+    <div class="list-page">
+   
 
       <el-table
         class="center-align-table"
@@ -278,18 +279,12 @@
               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="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="form-row">
           <el-form-item label="是否标杆:" prop="sightcing">
             <el-select
@@ -306,13 +301,42 @@
               </el-option>
             </el-select>
           </el-form-item>
+
+          <el-form-item label="经纬度类型:">
+            <el-select
+              v-model="SFMvalue"
+              placeholder="请选择"
+              @change="handleSFMChange"
+            >
+              <el-option
+                v-for="item in SFMoptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              >
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </div>
+
+        <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="longitude">
+            <el-input v-model="ruleForm.longitude" size="small"></el-input>
+          </el-form-item>
         </div>
       </el-form>
       <div class="form-buttons">
-        <el-button type="primary" @click="submitForm('ruleForm')"
+        <el-button type="primary" size="small"  @click="submitForm('ruleForm')"
           >确定</el-button
         >
-        <el-button @click="resetForm('ruleForm')">取消</el-button>
+        <el-button size="small"  @click="resetForm('ruleForm')">取消</el-button>
+        <el-button type="primary" size="small" @click="createMachine"
+          >创建机型</el-button
+        >
       </div>
     </el-dialog>
 
@@ -481,6 +505,17 @@ export default {
       tolead: false,
       isEdit: false,
       title: "",
+      SFMvalue: "",
+      SFMoptions: [
+        {
+          label: "十进制形式",
+          value: "1",
+        },
+        {
+          label: "度分秒形式",
+          value: "2",
+        },
+      ],
     };
   },
   created() {
@@ -527,17 +562,29 @@ export default {
     },
     // 数字验证
     validateNumber(rule, value, callback) {
-      const numberRegex = /^\d{1,3}(\.\d{1,8})?$/; // 匹配不超过四位数且小数点后不超过二位数的数字
+      let regex, errorMessage;
+
+      switch (rule.field) {
+        case "longitude":
+        case "latitude":
+          regex = /^[+-]?\d+(\.\d+)?$|^[+-]?\d{1,3}°\d{1,2}′\d{1,2}″$/;
+          errorMessage =
+            "请输入有效的经纬度格式,可以是度分秒格式(如:91°06′00″)或十进制格式(如:116.39138889)";
+          break;
+        default:
+          regex = /^[^\u4e00-\u9fa5]+$/;
+          errorMessage = "请输入有效数字,不能包含汉字或其他非法字符";
+      }
+
       if (!value) {
         callback(new Error("该项不能为空"));
-      } else if (!numberRegex.test(value)) {
-        callback(
-          new Error("该项必须为不超过三位数且小数点后不超过八位数的数字")
-        );
+      } else if (!regex.test(value)) {
+        callback(new Error(errorMessage));
       } else {
         callback();
       }
     },
+
     validateNumbertwo(rule, value, callback) {
       const numberRegex = /^\d{1,4}(\.\d{1,2})?$/; // 匹配不超过四位数且小数点后不超过二位数的数字
       if (!value) {
@@ -594,6 +641,13 @@ export default {
         this.particularsdata = res.data;
       });
     },
+
+
+    handleSFMChange(newValue) {
+      this.ruleForm.longitude = "";
+      this.ruleForm.latitude = "";
+    },
+
     // 确认
     submitForm(formName) {
       this.$refs[formName].validate((valid) => {
@@ -603,12 +657,19 @@ export default {
           millTypeCode: this.ruleForm.millTypeCode,
           ratedCapacity: this.ruleForm.ratedCapacity,
           elevationHeight: this.ruleForm.elevationHeight,
-          longitude: this.ruleForm.longitude,
-          latitude: this.ruleForm.latitude,
+          longitude:
+            this.SFMvalue === "2"
+              ? this.$convertDMSToDecimal(this.ruleForm.longitude)
+              : this.ruleForm.longitude,
+          latitude:
+            this.SFMvalue === "2"
+              ? this.$convertDMSToDecimal(this.ruleForm.latitude)
+              : this.ruleForm.latitude,
           hubHeight: this.ruleForm.hubHeight,
           sightcing: this.ruleForm.sightcing,
           engineCode: this.thisrow,
         };
+     
 
         if (valid) {
           const API = this.isEdit
@@ -791,6 +852,11 @@ export default {
       this.fileList = [];
       this.tolead = false;
     },
+    createMachine() {
+      this.$router.push({
+        path: "/home/Ledger/milltype?id=192",
+      });
+    }
   },
 };
 </script>
@@ -899,4 +965,8 @@ export default {
   height: 40px;
   font-size: 14px;
 }
+.header-condition {
+  display: flex;
+  justify-content: space-between;
+}
 </style>

+ 10 - 2
src/views/ledger/enterprise.vue

@@ -26,8 +26,6 @@
           <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
@@ -36,6 +34,9 @@
           defaultExpandAll ? "收起" : "展开"
         }}</el-button>
       </div>
+    </div>
+    <div class="list-page">
+     
 
       <el-table
         class="center-align-table"
@@ -627,4 +628,11 @@ export default {
     margin-bottom: 22px;
   }
 }
+::v-deep .el-dialog__footer{
+  text-align: center
+}
+.condition {
+display: flex;
+justify-content: space-between;
+}
 </style>

+ 27 - 24
src/views/ledger/milltype.vue

@@ -46,6 +46,7 @@
           fixed
           prop="machineTypeCode"
           label="收资机型型号"
+          width="180"
         >
           <template slot-scope="scope">
             <el-button
@@ -56,19 +57,7 @@
             >
           </template>
         </el-table-column>
-        <el-table-column
-          prop="millTypeCode"
-          align="center"
-          label="系统机型编号"
-        >
-        </el-table-column>
-
-        <el-table-column
-          prop="manufacturerCode"
-          align="center"
-          label="厂商编号"
-        >
-        </el-table-column>
+   
 
         <el-table-column
           prop="curvedMotionType"
@@ -79,8 +68,8 @@
           <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>
+            <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
@@ -91,13 +80,13 @@
         >
         </el-table-column>
 
-        <el-table-column
+        <!-- <el-table-column
           prop="brand"
           align="center"
           label="品牌名称"
           min-width="200"
         >
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column
           prop="state"
           align="center"
@@ -115,6 +104,20 @@
           min-width="150"
         >
         </el-table-column>
+
+        <!-- <el-table-column
+          prop="millTypeCode"
+          align="center"
+          label="系统机型编号"
+        >
+        </el-table-column> -->
+
+        <el-table-column
+          prop="manufacturerCode"
+          align="center"
+          label="厂商编号"
+        >
+        </el-table-column>
         <el-table-column
           prop="transition"
           align="center"
@@ -265,9 +268,9 @@
               size="small"
             ></el-input>
           </el-form-item> -->
-          <el-form-item label="品牌名称:" prop="brand">
+          <!-- <el-form-item label="品牌名称:" prop="brand">
             <el-input v-model="ruleForm.brand" size="small"></el-input>
-          </el-form-item>
+          </el-form-item> -->
         </div>
       </el-form>
       <div class="form-actions">
@@ -294,10 +297,10 @@
           <p>厂商编号:</p>
           <span>{{ particularsdata.manufacturerCode }}</span>
         </div>
-        <div class="condition">
+        <!-- <div class="condition">
           <p>品牌名称:</p>
           <span>{{ particularsdata.brand }}</span>
-        </div>
+        </div> -->
 
         <div class="condition">
           <p>驱动方式:</p>
@@ -445,7 +448,7 @@ export default {
         manufacturerCode: [
           { required: true, message: "请输入厂商编号", trigger: "blur" },
         ],
-        brand: [{ required: true, message: "请输入品牌名称", trigger: "blur" }],
+        // brand: [{ required: true, message: "请输入品牌名称", trigger: "blur" }],
         curvedMotionType: [
           { required: true, message: "请选择驱动方式", trigger: "change" },
         ],
@@ -685,7 +688,7 @@ export default {
           console.log(res);
         }
       );
-      this.title = "编辑";
+      this.title = "编辑机型";
       this.nuedialog = true;
       this.isEdit = true;
     },
@@ -733,7 +736,7 @@ export default {
     // 新增
     newnuedialog() {
       this.nuedialog = true;
-      this.title = "新增";
+      this.title = "新增机型";
     },
     // 下载模板
     download() {

+ 0 - 884
src/views/ledger/windsite copy.vue

@@ -1,884 +0,0 @@
-<template>
-  <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.fieldName"
-            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="结束日期"
-            @change="onDateChange"
-          >
-          </el-date-picker>
-        </el-form-item>
-        <el-form-item>
-          <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 @click="upfile" 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="风场名称">
-          <template slot-scope="scope">
-            <el-button
-              @click="particulars(scope.row)"
-              type="text"
-              size="small"
-              >{{ scope.row.fieldName }}</el-button
-            >
-          </template>
-        </el-table-column>
-
-        <el-table-column prop="windCompany" align="center" label="关联公司">
-        </el-table-column>
-        <el-table-column
-          prop="windCompany"
-          align="center"
-          label="风机数量"
-          min-width="100"
-        >
-          <template slot-scope="scope">
-            <el-button @click="ONdraught(scope.row)" type="text" size="small">{{
-              scope.row.wegNumber
-            }}</el-button>
-          </template>
-        </el-table-column>
-
-        <el-table-column
-          align="center"
-          prop="abnormal"
-          label="测风塔"
-          min-width="70"
-        >
-          <template slot-scope="scope">
-            <el-button
-              @click="ONanemometer(scope.row)"
-              type="text"
-              size="small"
-              >{{ scope.row.atrNumber }}</el-button
-            >
-          </template>
-        </el-table-column>
-
-        <el-table-column
-          prop="provinceName"
-          align="center"
-          min-width="100"
-          label="所在省"
-        >
-        </el-table-column>
-        <el-table-column
-          prop="cityName"
-          align="center"
-          min-width="100"
-          label="所在市"
-        >
-        </el-table-column>
-
-        <el-table-column
-          prop="createTime"
-          align="center"
-          label="创建时间"
-          min-width="160"
-        >
-        </el-table-column>
-
-        <el-table-column
-          prop="state"
-          align="center"
-          label="状态"
-          min-width="80"
-        >
-          <template slot-scope="{ row }">
-            {{ row.state == 1 ? "启用" : "停用" }}
-          </template>
-        </el-table-column>
-        <el-table-column
-          prop="transition"
-          align="center"
-          fixed="right"
-          label="操作"
-          min-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.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
-          @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="1000px"
-      @close="handleClose"
-    >
-      <el-form :model="form" :rules="rules" ref="formRef" label-width="120px">
-        <div class="general">
-          <div class="row">
-            <div class="condition">
-              <el-form-item label="风场名称:" prop="fieldName">
-                <el-input v-model="form.fieldName"></el-input>
-              </el-form-item>
-            </div>
-            <div class="condition">
-              <el-form-item label="空气密度:" prop="density">
-                <el-input v-model="form.density"></el-input>
-              </el-form-item>
-            </div>
-          </div>
-          <div class="row">
-            <div class="condition">
-              <el-form-item label="上级单位:" prop="companyCode">
-                <selecttree
-                  placeholder="请选择上级单位"
-                  :list="parentOpt"
-                  v-model="form.companyCode"
-                  @change="parentChange"
-                >
-                </selecttree>
-              </el-form-item>
-            </div>
-            <div class="condition">
-              <el-form-item label="海拔高度/米:" prop="elevationHeight">
-                <el-input v-model="form.elevationHeight"></el-input>
-              </el-form-item>
-            </div>
-          </div>
-          <div class="row">
-            <div class="condition">
-              <el-form-item label="所在省:" prop="provinceName">
-                <el-select
-                  v-model="form.provinceName"
-                  placeholder="请选择"
-                  value-key="areaId"
-                  @change="fetchCities"
-                >
-                  <el-option
-                    v-for="item in provinceNameOptions"
-                    :key="item.areaId"
-                    :label="item.province"
-                    :value="item"
-                  >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </div>
-            <div class="condition">
-              <el-form-item label="所在市:" prop="cityName">
-                <el-select
-                  v-model="form.cityName"
-                  placeholder="请选择"
-                  value-key="areaId"
-                >
-                  <el-option
-                    v-for="item in cityNameOptions"
-                    :key="item.areaId"
-                    :label="item.city"
-                    :value="item"
-                  >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </div>
-          </div>
-          <div class="row">
-            <div class="condition">
-              <el-form-item label="经度:" prop="longitude">
-                <el-input v-model="form.longitude"></el-input>
-              </el-form-item>
-            </div>
-            <div class="condition">
-              <el-form-item label="纬度:" prop="latitude">
-                <el-input v-model="form.latitude"></el-input>
-              </el-form-item>
-            </div>
-          </div>
-          <div class="row">
-            <div class="condition">
-              <el-form-item label="测风塔:" prop="anemometerTowerRelationDtos">
-                <el-select
-                  v-model="form.anemometerTowerRelationDtos"
-                  multiple
-                  collapse-tags
-                  placeholder="请选择"
-                  value-key="anemometerCode"
-                >
-                  <el-option
-                    v-for="item in options"
-                    :key="item.anemometerCode"
-                    :label="item.anemometerName"
-                    :value="item.anemometerCode"
-                  >
-                  </el-option>
-                </el-select>
-              </el-form-item>
-            </div>
-          </div>
-        </div>
-      </el-form>
-
-      <div class="bianji" v-show="listedfiles">
-        <el-table :data="filetableData" style="width: 100%">
-          <el-table-column prop="fileName" label="文件名"> </el-table-column>
-          <el-table-column prop="type" label="文件类型"> </el-table-column>
-
-          <el-table-column fixed="right" label="操作" width="120">
-            <template slot-scope="scope">
-              <el-button
-                @click.native.prevent="deleteRow(scope.row)"
-                type="text"
-                size="small"
-              >
-                删除
-              </el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="handleClose(false, 'nuedialog')" size="small"
-          >取 消</el-button
-        >
-        <el-button type="primary" @click="newly('formRef')" size="small"
-          >确 定</el-button
-        >
-      </span>
-    </el-dialog>
-
-    <!-- 风场详情 -->
-    <WindsiteMessage
-      :unusualdialog="unusualdialog"
-      :unusualdialogdata="unusualdialogdata"
-      @handleClose="handleClose"
-    >
-    </WindsiteMessage>
-    <!-- 测风塔 -->
-    <windsitemachine
-      :anemometerdialog="anemometerdialog"
-      :anemometerData="anemometerData"
-      @handleClose="handleClose"
-    >
-    </windsitemachine>
-    <!-- 风机数量 -->
-    <windsitetower
-      :draught="draught"
-      :draughtData="draughtData"
-      @handleClose="handleClose"
-    ></windsitetower>
-    <!-- 上传 -->
-    <windsiteup
-      :uploadingPOP="uploadingPOP"
-      :rowdata="rowdata"
-      :AllTemplateurlDR="AllTemplateurlDR"
-      @handleClose="handleClose"
-    ></windsiteup>
-    <!-- 导入 -->
-    <windsitetolead
-      :parentOptdata="parentOptdata"
-      :AllTemplateurl="AllTemplateurl"
-      :tolead="tolead"
-      @handleClose="handleClose"
-      @onSubmit="onSubmit"
-    ></windsitetolead>
-  </div>
-</template>
-
-<script>
-import {
-  WindFieldListPage,
-  createWindField,
-  delWindFieldById,
-  findAllProvince,
-  getAllWindCompany,
-  getAnemometerTowerByField,
-  getAnemometerTowerNameList,
-  getCitiesByPId,
-  getWindFieldVo,
-  updateWindFieldStateById,
-  windEngineGrouPage,
-  windFieldDto,
-  getAllTemplate,
-  delWindFieldResource,
-} from "@/api/ledger.js";
-import selecttree from "../../components/selecttree";
-import WindsiteMessage from "./component/windsiteMessage.vue";
-import windsitemachine from "./component/windsitemachine.vue";
-import windsitetolead from "./component/windsitetolead.vue";
-import windsitetower from "./component/windsitetower.vue";
-import windsiteup from "./component/windsiteup.vue";
-
-export default {
-  components: {
-    WindsiteMessage,
-    windsitemachine,
-    windsitetower,
-    windsiteup,
-    windsitetolead,
-    selecttree,
-  },
-  data() {
-    return {
-      treeval: "",
-      tableData: [],
-      formInline: {
-        fieldName: "",
-        timeQuantum: [],
-        pageNum: 1,
-        pageSize: 10,
-        totalSize: 0,
-      },
-      startDate: "",
-      endDate: "",
-      parentOpt: [],
-      form: {
-        anemometerTowerRelationDtos: [],
-        areaCode: "",
-        cityId: "",
-        cityName: "",
-        density: "",
-        elevationHeight: "",
-        fieldName: "",
-        latitude: "",
-        longitude: "",
-        provinceId: "",
-        provinceName: "",
-        ratedCapacityNumber: "",
-        companyCode: "",
-      },
-      rules: {
-        fieldName: [
-          { required: true, message: "请输入风场名称", trigger: "blur" },
-        ],
-        density: [
-          { required: true, message: "请输入空气密度", trigger: "blur" },
-          { validator: this.validateNumber, trigger: "blur" },
-        ],
-        companyCode: [
-          { required: true, message: "请选择上级单位", trigger: "change" },
-        ],
-        elevationHeight: [
-          { required: true, message: "请输入海拔高度", trigger: "blur" },
-          { validator: this.validateNumberTwo, trigger: "blur" },
-        ],
-        provinceName: [
-          { required: true, message: "请选择所在省", trigger: "change" },
-        ],
-        cityName: [
-          { required: true, message: "请选择所在市", trigger: "change" },
-        ],
-        longitude: [
-          { required: true, message: "请输入经度", trigger: "blur" },
-          { validator: this.validateNumberthree, trigger: "blur" },
-        ],
-        latitude: [
-          { required: true, message: "请输入纬度", trigger: "blur" },
-          { validator: this.validateNumberthree, trigger: "blur" },
-        ],
-        anemometerTowerRelationDtos: [
-          { required: true, message: "请选择测风塔", trigger: "change" },
-        ],
-      },
-      provinceNameOptions: [],
-      cityNameOptions: [],
-      options: [],
-      filetableData: [],
-      anemometerData: [],
-      draughtData: {},
-      unusualdialogdata: {},
-      parentOptdata: [],
-      AllTemplateurl: {},
-      AllTemplateurlDR: {},
-      rowdata: {},
-      listedfiles: false,
-      nuedialog: false,
-      unusualdialog: false,
-      tolead: false,
-      draught: false,
-      anemometerdialog: false,
-      uploadingPOP: false,
-      newform: {
-        unit: "",
-        province: "",
-        city: "",
-        descr: "",
-      },
-      isEdit: false,
-      title: "新增",
-      detail: {},
-    };
-  },
-  created() {
-    this.onSubmit();
-    this.postsheng();
-    this.relevanceunit();
-    this.TowerNameList();
-    this.getAllTemplate();
-  },
-  methods: {
-    handleClose(value, dialogName) {
-      this[dialogName] = value;
-      this.$refs.formRef.resetFields();
-      this.form = Object.assign({}, this.$options.data().form);
-    },
-
-    // 列表居中展示
-    rowStyle() {
-      return "text-align:center";
-    },
-    getAllTemplate() {
-      getAllTemplate().then((res) => {
-        this.AllTemplateurl = res.data;
-        this.AllTemplateurlDR = res.data;
-      });
-    },
-
-    // 时间转换
-    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;
-      }
-    },
-    // 省
-    async postsheng() {
-      try {
-        const res = await findAllProvince();
-        this.provinceNameOptions = res.data;
-      } catch (error) {
-        console.error("Error fetching province data:", error);
-      }
-    },
-
-    // 市
-    fetchCities(item, city) {
-      console.log(item, this.newform.province);
-      this.newform.province = item;
-      this.form.province = item;
-      this.form.cityName = "";
-      let data = {
-        provinceId: item.areaId,
-      };
-      getCitiesByPId(data).then((res) => {
-        this.cityNameOptions = res.data;
-      });
-      if (city) {
-        this.newform.city = Object.assign(
-          {},
-          { areaId: city.areaId, city: city.city }
-        );
-      }
-    },
-    // 测风塔
-    TowerNameList() {
-      getAnemometerTowerNameList().then((res) => {
-        this.options = res.data;
-      });
-    },
-
-    // 关联风场
-    async relevanceunit() {
-      try {
-        const res = await getAllWindCompany();
-        this.parentOpt = res.data;
-        this.parentOptdata = res.data;
-      } catch (error) {
-        console.error("Error fetching wind company data:", error);
-      }
-    },
-
-    parentChange(data) {
-      //data为当前选中对象
-      console.log(data);
-    },
-    // 查询
-    onSubmit() {
-      let paramsData = {
-        fieldName: this.formInline?.fieldName || undefined,
-        beginTime: this.startDate || undefined,
-        endTime: this.endDate || undefined,
-        pageNum: this.formInline.pageNum || 1,
-        pageSize: 10,
-      };
-      WindFieldListPage(paramsData).then((res) => {
-        this.tableData = res.data.list;
-        this.formInline.totalSize = res.data.totalSize;
-      });
-    },
-    //分页数据切换
-    handleCurrentChange(val) {
-      this.formInline.pageNum = val;
-      this.onSubmit();
-    },
-    // 停用
-    start(row, type) {
-      let objectval = {
-        fieldCode: row.fieldCode,
-        state: type === 0 ? 0 : 1,
-      };
-      updateWindFieldStateById(objectval).then((res) => {
-        this.$message({
-          message: "状态已更新成功",
-          type: "success",
-        });
-        // this.$message(`${type === 1 ? '状态已更新成功' : '状态已更新成功'}`);
-        row.state = type === 1 ? 0 : 1;
-        this.onSubmit();
-      });
-    },
-    processData(data) {
-      console.log(data);
-      if (!data) {
-        console.error("Data is undefined");
-        return;
-      }
-      return data.map((code) => ({
-        towerCode: code,
-      }));
-    },
-    // 新增提交
-    newly(formName) {
-      console.log(this.form.anemometerTowerRelationDtos);
-      this.processData(this.form.anemometerTowerRelationDtos);
-      this.$refs[formName].validate((valid) => {
-        if (!valid) {
-          this.$message.error("表单验证失败!");
-          return false;
-        }
-
-        // Prepare the params object
-        const params = JSON.parse(JSON.stringify(this.form));
-        params.anemometerTowerRelationDtos = this.processData(
-          this.form.anemometerTowerRelationDtos
-        );
-        params.cityName = this.form.cityName.city;
-        params.cityId = this.form.cityName.areaId;
-        params.provinceName = this.form.provinceName.province;
-        params.provinceId = this.form.provinceName.areaId;
-        params.areaCode = this.form.cityName.areaCode;
-        if (this.isEdit) {
-          params.fieldCode = this.detail.fieldCode;
-        }
-        console.log(this.form, params);
-
-        // Determine which API to call
-        const API = this.isEdit
-          ? windFieldDto(params)
-          : createWindField(params);
-
-        // Execute the API call
-        API.then((res) => {
-          // Adjust based on your API response
-          this.$message.success(this.isEdit ? "编辑成功" : "新增成功");
-          this.onSubmit();
-          this.isEdit = false;
-          this.nuedialog = false;
-        }).catch((error) => {});
-      });
-    },
-    // 重置
-    reset() {
-      this.formInline.fieldName = "";
-      this.formInline.timeQuantum = "";
-      this.onSubmit();
-    },
-    //导入提交
-    UPsubmit() {
-      this.tolead = false;
-    },
-
-    //查看详情
-    particulars(row) {
-      getWindFieldVo({
-        fieldCode: row.fieldCode,
-      }).then((res) => {
-        this.unusualdialogdata = res.data;
-        this.unusualdialog = true;
-      });
-    },
-    //风机详情
-    ONdraught(row) {
-      this.draughtData = row;
-      this.draught = true;
-    },
-    //测风塔详情
-    ONanemometer(row) {
-      getAnemometerTowerByField({
-        fieldCode: row.fieldCode,
-      }).then((res) => {
-        this.anemometerData = res.data;
-        this.anemometerdialog = true;
-      });
-    },
-
-    // 编辑
-
-    compile(row) {
-      getWindFieldVo({
-        fieldCode: row.fieldCode,
-      })
-        .then((res) => {
-          this.filetableData = res.data.windFieldResourceVos;
-          const item = JSON.parse(JSON.stringify(res.data));
-          this.detail = item;
-
-          Object.keys(this.form).forEach((key) => {
-            this.form[key] = item[key];
-          });
-
-          this.form.anemometerTowerRelationDtos = item.anemometerTowerByFieldVos
-            ? item.anemometerTowerByFieldVos.map(
-                (element) => element.anemometerCode
-              )
-            : [];
-          this.detail = row;
-          this.nuedialog = true;
-          this.listedfiles = true;
-          this.title = "编辑";
-          this.isEdit = true;
-        })
-        .catch((error) => {
-          console.error("Error fetching wind field data:", error);
-        });
-    },
-
-    // 上传附件
-    uploading(row) {
-      this.uploadingPOP = true;
-      this.rowdata = row;
-    },
-
-    // 删除
-    deleted(row) {
-      console.log(row, "row");
-      if (row.state == "1") {
-        this.$message({
-          type: "error",
-          message: "该项处于启用状态,无法删除!",
-        });
-        return;
-      }
-      this.$confirm("此操作将永久删除该文件,是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          delWindFieldById({ fieldCode: row.fieldCode })
-            .then((res) => {
-              if (res.code === -1) {
-                // Assuming -1 indicates success, adjust according to actual API response
-                this.$message({
-                  type: "error",
-                  message: "删除失败!",
-                });
-              } else {
-                this.$message({
-                  type: "success",
-                  message: "删除成功!",
-                });
-                this.onSubmit();
-              }
-            })
-            .catch((error) => {});
-        })
-        .catch(() => {
-          // 取消删除
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
-    },
-    // 删除附件
-    deleteRow(row) {
-      this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning",
-      })
-        .then(() => {
-          delWindFieldResource({ id: row.id }).then((res) => {
-            const index = this.filetableData.indexOf(row);
-            if (index !== -1) {
-              this.filetableData.splice(index, 1);
-            }
-            this.$message({
-              type: "success",
-              message: "删除成功!",
-            });
-          });
-        })
-        .catch(() => {
-          this.$message({
-            type: "info",
-            message: "已取消删除",
-          });
-        });
-    },
-    // 导入
-    upfile() {
-      this.tolead = true;
-    },
-    // 新增
-    newnuedialog() {
-      this.nuedialog = true;
-      this.listedfiles = false;
-      this.title = "新增";
-    },
-    // 数字验证
-    validateNumber(rule, value, callback) {
-      const numberRegex = /^\d{1,3}(\.\d{1,3})?$/;
-      if (!value) {
-        callback(new Error("该项不能为空"));
-      } else if (!numberRegex.test(value)) {
-        callback(
-          new Error("该项必须为不超过三位数且小数点后不超过三位数的数字")
-        );
-      } else {
-        callback();
-      }
-    },
-    validateNumberTwo(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();
-      }
-    },
-    validateNumberthree(rule, value, callback) {
-      const numberRegex = /^\d{1,3}(\.\d{1,5})?$/;
-      if (!value) {
-        callback(new Error("该项不能为空"));
-      } else if (!numberRegex.test(value)) {
-        callback(new Error("该项必须为不超过三位数且小数点后不超五位数的数字"));
-      } else {
-        callback();
-      }
-    },
-  },
-};
-</script>
-
-<style lang="scss" scoped>
-.general {
-  display: flex;
-  flex-direction: column;
-
-  .row {
-    display: flex;
-    justify-content: space-between;
-  }
-
-  .condition {
-    width: 50%;
-
-    .el-select {
-      width: 260px;
-    }
-
-    .el-form-item {
-      margin-bottom: 22px;
-    }
-  }
-}
-
-.UPcondition {
-  display: flex;
-
-  p {
-    width: 74px;
-    text-align: right;
-    line-height: 40px;
-  }
-
-  .el-select {
-    width: 100%;
-    margin-bottom: 20px;
-  }
-
-  .el-input {
-    margin-bottom: 20px;
-  }
-}
-
-.model-center {
-  color: #666;
-  line-height: 40px;
-  height: 40px;
-  font-size: 14px;
-}
-</style>

+ 151 - 30
src/views/ledger/windsite.vue

@@ -20,6 +20,32 @@
           >
           </el-date-picker>
         </el-form-item>
+        <el-form-item label="所属公司:">
+          <el-input
+            v-model="formInline.windCompany"
+            placeholder="所属公司"
+            size="small"
+          ></el-input>
+        </el-form-item>
+
+        <el-form-item label="所在省:">
+          <el-select
+            v-model="form.shengfeng"
+            placeholder="请选择"
+            value-key="areaId"
+            @change="handleProvinceChange"
+              size="small"
+          >
+            <el-option
+              v-for="item in provinceNameOptions"
+              :key="item.areaId"
+              :label="item.province"
+              :value="item.areaId"
+            >
+            </el-option>
+          </el-select>
+        </el-form-item>
+
         <el-form-item>
           <el-button type="primary" @click="onSubmit" size="small"
             >查询</el-button
@@ -53,7 +79,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column prop="windCompany" align="center" label="关联公司">
+        <el-table-column prop="windCompany" align="center" label="所属公司">
         </el-table-column>
         <el-table-column
           prop="windCompany"
@@ -84,7 +110,7 @@
           </template>
         </el-table-column>
 
-        <el-table-column
+        <!-- <el-table-column
           align="center"
           prop="contractNumber"
           label="合同功率曲线数"
@@ -95,13 +121,13 @@
               scope.row.contractNumber
             }}</el-button>
           </template>
-        </el-table-column>
+        </el-table-column> -->
 
         <el-table-column
           prop="provinceName"
           align="center"
           min-width="100"
-          label="所在省"
+          label="所在省/市/自治区"
         >
         </el-table-column>
         <el-table-column
@@ -214,9 +240,9 @@
           </div>
           <div class="row">
             <div class="condition">
-              <el-form-item label="上级单位:" prop="companyCode">
+              <el-form-item label="所属公司:" prop="companyCode">
                 <selecttree
-                  placeholder="请选择上级单位"
+                  placeholder="请选择所属公司"
                   :list="parentOpt"
                   v-model="form.companyCode"
                   @change="parentChange"
@@ -267,18 +293,7 @@
               </el-form-item>
             </div>
           </div>
-          <div class="row">
-            <div class="condition">
-              <el-form-item label="经度:" prop="longitude">
-                <el-input v-model="form.longitude"></el-input>
-              </el-form-item>
-            </div>
-            <div class="condition">
-              <el-form-item label="纬度:" prop="latitude">
-                <el-input v-model="form.latitude"></el-input>
-              </el-form-item>
-            </div>
-          </div>
+
           <div class="row">
             <div class="condition">
               <el-form-item label="测风塔:" prop="anemometerTowerRelationDtos">
@@ -299,6 +314,36 @@
                 </el-select>
               </el-form-item>
             </div>
+            <div class="condition">
+              <el-form-item label="经纬度类型:">
+                <el-select
+                  v-model="SFMvalue"
+                  placeholder="请选择"
+                  @change="handleSFMChange"
+                >
+                  <el-option
+                    v-for="item in SFMoptions"
+                    :key="item.value"
+                    :label="item.label"
+                    :value="item.value"
+                  >
+                  </el-option>
+                </el-select>
+              </el-form-item>
+            </div>
+          </div>
+
+          <div class="row">
+            <div class="condition">
+              <el-form-item label="经度:" prop="longitude">
+                <el-input v-model="form.longitude"></el-input>
+              </el-form-item>
+            </div>
+            <div class="condition">
+              <el-form-item label="纬度:" prop="latitude">
+                <el-input v-model="form.latitude"></el-input>
+              </el-form-item>
+            </div>
           </div>
         </div>
       </el-form>
@@ -328,6 +373,9 @@
         <el-button type="primary" @click="newly('formRef')" size="small"
           >确 定</el-button
         >
+        <el-button type="primary" size="small" @click="createMachine"
+          >创建机型</el-button
+        >
       </span>
     </el-dialog>
 
@@ -473,6 +521,7 @@ import windsitemachine from "./component/windsitemachine.vue";
 import windsitetolead from "./component/windsitetolead.vue";
 import windsitetower from "./component/windsitetower.vue";
 import windsiteup from "./component/windsiteup.vue";
+import { log } from "plotly.js-dist";
 
 export default {
   components: {
@@ -494,6 +543,8 @@ export default {
         pageNum: 1,
         pageSize: 10,
         totalSize: 0,
+        windCompany: "",
+        shengfeng: "",
       },
       startDate: "",
       endDate: "",
@@ -513,6 +564,17 @@ export default {
         ratedCapacityNumber: "",
         companyCode: "",
       },
+      SFMoptions: [
+        {
+          label: "十进制形式",
+          value: "1",
+        },
+        {
+          label: "度分秒形式",
+          value: "2",
+        },
+      ],
+      SFMvalue: "",
       rules: {
         fieldName: [
           { required: true, message: "请输入风场名称", trigger: "blur" },
@@ -522,7 +584,7 @@ export default {
           { validator: this.validateNumber, trigger: "blur" },
         ],
         companyCode: [
-          { required: true, message: "请选择上级单位", trigger: "change" },
+          { required: true, message: "请选择所属公司", trigger: "change" },
         ],
         elevationHeight: [
           { required: true, message: "请输入海拔高度", trigger: "blur" },
@@ -582,6 +644,7 @@ export default {
       batchList: [],
       curve: false,
       curvelist: [],
+      shengID: "",
     };
   },
   created() {
@@ -677,14 +740,21 @@ export default {
       console.log(data);
     },
     // 查询
+    handleProvinceChange(value) {
+      this.shengID = value;
+    },
     onSubmit() {
       let paramsData = {
         fieldName: this.formInline?.fieldName || undefined,
         beginTime: this.startDate || undefined,
         endTime: this.endDate || undefined,
         pageNum: this.formInline.pageNum || 1,
+        companyName: this.formInline.windCompany,
+        provinceId: this.shengID, // 这里就是你获取到的值
         pageSize: 10,
       };
+      console.log(this.formInline.shengfeng, "shengfeng");
+
       this.loading = true;
 
       WindFieldListPage(paramsData)
@@ -729,16 +799,42 @@ export default {
         towerCode: code,
       }));
     },
+
+
+
     // 新增提交
     newly(formName) {
-      console.log(this.form.anemometerTowerRelationDtos);
-      this.processData(this.form.anemometerTowerRelationDtos);
       this.$refs[formName].validate((valid) => {
         if (!valid) {
           this.$message.error("表单验证失败!");
           return false;
         }
 
+        // 判断是否需要转换经纬度
+        if (this.SFMvalue === "2") {
+          // 转换经度和纬度
+          const longitudeDecimal = this.$convertDMSToDecimal(
+            this.form.longitude
+          );
+          const latitudeDecimal = this.$convertDMSToDecimal(this.form.latitude);
+          console.log(longitudeDecimal, latitudeDecimal, "...........");
+
+          // 检查转换是否成功
+          if (longitudeDecimal !== null) {
+            this.form.longitude = longitudeDecimal;
+          } else {
+            this.$message.error("经度格式不正确!");
+            return;
+          }
+
+          if (latitudeDecimal !== null) {
+            this.form.latitude = latitudeDecimal;
+          } else {
+            this.$message.error("纬度格式不正确!");
+            return;
+          }
+        }
+
         // Prepare the params object
         const params = JSON.parse(JSON.stringify(this.form));
         params.anemometerTowerRelationDtos = this.processData(
@@ -753,6 +849,7 @@ export default {
           params.fieldCode = this.detail.fieldCode;
         }
         console.log(this.form, params);
+        return;
 
         // Determine which API to call
         const API = this.isEdit
@@ -769,10 +866,20 @@ export default {
         }).catch((error) => {});
       });
     },
+
+    handleSFMChange(newValue) {
+      this.form.longitude = "";
+      this.form.latitude = "";
+    },
+
     // 重置
     reset() {
       this.formInline.fieldName = "";
       this.formInline.timeQuantum = "";
+      this.shengID = "";
+      this.startDate = "";
+      this.endDate = "";
+      this.form.shengfeng= ""
       this.onSubmit();
     },
     //导入提交
@@ -978,19 +1085,20 @@ export default {
         case "longitude":
         case "latitude":
           return {
-            regex: /^\d{1,3}(\.\d{1,8})?$/,
-            errorMessage: "该项必须为不超过三位数且小数点后不超八位数的数字",
+            regex: /^[+-]?\d+(\.\d+)?$|^[+-]?\d{1,3}°\d{1,2}′\d{1,2}″$/,
+            errorMessage:
+              "请输入有效的经纬度格式,可以是度分秒格式(如:91°06′00″)或十进制格式(如:116.39138889)",
           };
         default:
           return {
-            regex: /^\d+$/,
-            errorMessage: "请输入有效数字",
+            regex: /^[^\u4e00-\u9fa5]+$/,
+            errorMessage: "请输入有效数字,不能包含汉字或其他非法字符",
           };
       }
     },
-    batch(row) {
-   
 
+  
+    batch(row) {
       if (row.wegNumber != 0) {
         getWindEngineGroupListByFieldCode({ fieldCode: row.fieldCode }).then(
           (res) => {
@@ -1023,6 +1131,11 @@ export default {
       this.batchList = [];
       done();
     },
+    createMachine() {
+      this.$router.push({
+        path: "/home/Ledger/milltype?id=192",
+      });
+    }
   },
 };
 </script>
@@ -1085,13 +1198,21 @@ export default {
     }
   }
 }
-.batch-submit {
-  float: right;
-}
+
 .batch-name {
   margin-left: 20px;
   .el-input {
     width: 200px;
   }
 }
+
+::v-deep .el-date-editor--daterange.el-input__inner{
+  width: 260px;
+}
+.bianji{
+  margin-top: 10px;
+}
+::v-deep .el-dialog__footer{
+  text-align: center
+}
 </style>

+ 11 - 0
src/views/overview/components/analysis_information/index.vue

@@ -63,6 +63,17 @@
           </span>
         </div>
+        <div v-if="analysisInfo.dataEndTime || analysisInfo.dataStartTime">
+          分析数据时间跨度为{{ analysisInfo.dataStartTime }}至{{
+            analysisInfo.dataEndTime
+          }}。
+        </div>
+
+        <div v-if="analysisInfo.analysisFinishTime">
+          分析完成时间为{{ analysisInfo.analysisFinishTime }}。数据分析人
+          <span class="headerMessage">{{ analysisInfo.updateByName }}</span
+          >。
+        </div>
       </div>
     </div>
     <div class="content">

+ 6 - 11
src/views/performance/assetssMag.vue

@@ -64,22 +64,17 @@
         :cell-style="rowStyle"
       >
         <el-table-column
-          fixed
           align="center"
           label="分析主题"
           prop="analysisName"
           min-width="200"
+          fixed
         >
-          <template slot-scope="scope">
-            <el-tooltip
-              class="item"
-              effect="dark"
-              :content="scope.row.sketch ? scope.row.sketch : '暂无简述内容'"
-              placement="top"
-            >
-              <span style="color: #4caf50">{{ scope.row.analysisName }}</span>
-            </el-tooltip>
-          </template>
+        <template slot-scope="scope">
+          <el-tooltip class="item" effect="dark" :content="scope.row.sketch || '暂无分析简述'" placement="top">
+      <span>{{ scope.row.analysisName }}</span>
+    </el-tooltip>
+  </template>
         </el-table-column>
         <el-table-column
           align="center"

+ 2 - 1
src/views/performance/components/analysisEvent.vue

@@ -62,6 +62,7 @@
                 </el-select>
               </el-form-item>
             </el-col>
+
             <el-col :xs="24" :sm="24" :md="12" :lg="8" :xl="5">
               <el-form-item
                 label="分析类型"
@@ -996,7 +997,7 @@ export default {
     },
     handleCheckAllChange(val) {
       this.checkedCities = val
-        ? [...this.cities, "SCADA数据过滤", "图像设置"]
+        ? [...this.cities, "数据过滤", "图像设置"]
         : [];
       this.isIndeterminate = false;
     },