Shan9312 9 miesięcy temu
rodzic
commit
7a7067367a

+ 293 - 223
src/views/drawDot/index.vue

@@ -1,14 +1,9 @@
 <template>
-    <div id="app">
-
-      <!-- 图片区域 -->
+  <div id="app">
+    <!-- 图片区域 -->
     <div class="box">
-        <div
-        ref="imageArea"
-        class="image-area"
-        @click="handleClick"
-      >
-        <img src="../../assets/dot.jpeg" alt="图片" class="image">
+      <div ref="imageArea" class="image-area" @click="handleClick">
+        <img src="../../assets/dot.jpeg" alt="图片" class="image" />
         <template v-for="shape in shapes">
           <div
             v-for="(point, index) in shape.points"
@@ -16,256 +11,331 @@
             :style="getPointStyle(point)"
             class="point-marker"
           ></div>
-          <div v-if="shape.type === '1' || shape.type === '2'"
-               :style="getRectangleStyle(shape.points)"
-               class="rectangle"
+          <div
+            v-if="shape.type === '1' || shape.type === '2'"
+            :style="getRectangleStyle(shape.points)"
+            class="rectangle"
           ></div>
-          <polyline v-if="shape.type === '3'"
-                    :points="getLinePoints(shape.points)"
-                    class="3"
-                    fill="none" stroke="red" stroke-width="2"/>
+          <polyline
+            v-if="shape.type === '3'"
+            :points="getLinePoints(shape.points)"
+            class="3"
+            fill="none"
+            stroke="red"
+            stroke-width="2"
+          />
         </template>
-        </div>
+      </div>
 
       <!--  -->
       <div>
-        <h3 style="padding-left: 20px;">鼠标点击获取图形坐标</h3>
-        <el-form :model="formObj" ref="formObj" label-width="120px" class="demo-dynamic">
+        <h3 style="padding-left: 20px">鼠标点击获取图形坐标</h3>
+        <el-form
+          :model="formObj"
+          ref="formObj"
+          label-width="120px"
+          class="demo-dynamic"
+        >
           <el-form-item label="区域类型:">
-              <el-radio-group v-model="currentShapeType" @change="changeType">
-                <el-radio label="1">卧床</el-radio>
-                <el-radio label="2">喷淋</el-radio>
-                <el-radio label="3">水槽</el-radio>
-              </el-radio-group>
+            <el-radio-group v-model="currentShapeType" @change="changeType">
+              <el-radio label="1">卧床</el-radio>
+              <el-radio label="2">喷淋</el-radio>
+              <el-radio label="3">水槽</el-radio>
+            </el-radio-group>
           </el-form-item>
-           <!-- 卧床 -->
+          <!-- 卧床 -->
           <el-form-item
             label="卧床(1):"
             required
-             v-if=" currentShapeType == '1'"
+            v-if="currentShapeType == '1'"
           >
-            <div v-if="formObj.bed.length>0"  key="1">
-              <div><span style="padding-right: 20px;">左上:{{ `X:${formObj.bed[0]?.x || ''}Y:${formObj.bed[0]?.y || ''}`}}</span>  <span>右上:{{ `X:${formObj.bed[1]?.x || ''}Y:${formObj.bed[1]?.y || ''}`}}</span></div>
-              <div><span style="padding-right: 20px;">左下:{{ `X:${formObj.bed[3]?.x || ''}Y:${formObj.bed[3]?.y || ''}`}}</span> <span>右下:{{ `X:${formObj.bed[2]?.x || ''}Y:${formObj.bed[2]?.y || ''}`}}</span></div>
+            <div v-if="formObj.bed.length > 0" key="1">
+              <div>
+                <span style="padding-right: 20px"
+                  >左上:{{
+                    `X:${formObj.bed[0].x || ""}Y:${formObj.bed[0].y || ""}`
+                  }}</span
+                >
+                <span
+                  >右上:{{
+                    `X:${formObj.bed[1].x || ""}Y:${formObj.bed[1].y || ""}`
+                  }}</span
+                >
+              </div>
+              <div>
+                <span style="padding-right: 20px"
+                  >左下:{{
+                    `X:${formObj.bed[3].x || ""}Y:${formObj.bed[3].y || ""}`
+                  }}</span
+                >
+                <span
+                  >右下:{{
+                    `X:${formObj.bed[2].x || ""}Y:${formObj.bed[2].y || ""}`
+                  }}</span
+                >
+              </div>
             </div>
           </el-form-item>
           <el-form-item
             label="卧床(2):"
             required
-            v-if=" currentShapeType == '1'"
+            v-if="currentShapeType == '1'"
           >
-            <div v-if="formObj.bed1.length>0 " key="2">
-              <div><span style="padding-right: 20px;">左上:{{ `X:${formObj.bed1[0]?.x || ''}Y:${formObj.bed1[0]?.y || ''}`}}</span>  <span>右上:{{ `X:${formObj.bed1[1]?.x || ''}Y:${formObj.bed1[1]?.y || ''}`}}</span></div>
-              <div><span style="padding-right: 20px;">左下:{{ `X:${formObj.bed1[3]?.x || ''}Y:${formObj.bed1[3]?.y || ''}`}}</span> <span>右下:{{ `X:${formObj.bed1[2]?.x || ''}Y:${formObj.bed1[2]?.y || ''}`}}</span></div>
+            <div v-if="formObj.bed1.length > 0" key="2">
+              <div>
+                <span style="padding-right: 20px"
+                  >左上:{{
+                    `X:${formObj.bed1[0].x || ""}Y:${formObj.bed1[0].y || ""}`
+                  }}</span
+                >
+                <span
+                  >右上:{{
+                    `X:${formObj.bed1[1].x || ""}Y:${formObj.bed1[1].y || ""}`
+                  }}</span
+                >
+              </div>
+              <div>
+                <span style="padding-right: 20px"
+                  >左下:{{
+                    `X:${formObj.bed1[3].x || ""}Y:${formObj.bed1[3].y || ""}`
+                  }}</span
+                >
+                <span
+                  >右下:{{
+                    `X:${formObj.bed1[2].x || ""}Y:${formObj.bed1[2].y || ""}`
+                  }}</span
+                >
+              </div>
             </div>
           </el-form-item>
           <!--喷淋  -->
-          <el-form-item
-            label="喷淋:"
-            required
-                   v-if=" currentShapeType == '2'"
-          >
-            <div v-if="formObj.spray.length>0 && currentShapeType == '2' " key="1">
-              <div><span style="padding-right: 20px;">左上:{{ `X:${formObj.spray[0]?.x || ''}Y:${formObj.spray[0]?.y || ''}`}}</span>  <span>右上:{{ `X:${formObj.spray[1]?.x || ''}Y:${formObj.spray[1]?.y || ''}`}}</span></div>
-              <div><span style="padding-right: 20px;">左下:{{ `X:${formObj.spray[3]?.x || ''}Y:${formObj.spray[3]?.y || ''}`}}</span> <span>右下:{{ `X:${formObj.spray[2]?.x || ''}Y:${formObj.spray[2]?.y || ''}`}}</span></div>
+          <el-form-item label="喷淋:" required v-if="currentShapeType == '2'">
+            <div
+              v-if="formObj.spray.length > 0 && currentShapeType == '2'"
+              key="1"
+            >
+              <div>
+                <span style="padding-right: 20px"
+                  >左上:{{
+                    `X:${formObj.spray[0].x || ""}Y:${formObj.spray[0].y || ""}`
+                  }}</span
+                >
+                <span
+                  >右上:{{
+                    `X:${formObj.spray[1].x || ""}Y:${formObj.spray[1].y || ""}`
+                  }}</span
+                >
+              </div>
+              <div>
+                <span style="padding-right: 20px"
+                  >左下:{{
+                    `X:${formObj.spray[3].x || ""}Y:${formObj.spray[3].y || ""}`
+                  }}</span
+                >
+                <span
+                  >右下:{{
+                    `X:${formObj.spray[2].x || ""}Y:${formObj.spray[2].y || ""}`
+                  }}</span
+                >
+              </div>
             </div>
           </el-form-item>
           <!--水槽  -->
-          <el-form-item
-            label="水槽:"
-            required
-            v-if=" currentShapeType == '3'"
-          >
-            <div v-if="formObj.sprayList.length>0  " key="1">
-              <div v-for="(item,index) in formObj.sprayList" :key="index"><span style="padding-right: 20px;" >第{{index+1}}点:{{ `X:${item?.x || ''}Y:${item?.y || ''}`}}</span> </div>
+          <el-form-item label="水槽:" required v-if="currentShapeType == '3'">
+            <div v-if="formObj.sprayList.length > 0" key="1">
+              <div v-for="(item, index) in formObj.sprayList" :key="index">
+                <span style="padding-right: 20px"
+                  >第{{ index + 1 }}点:{{
+                    `X:${item.x || ""}Y:${item.y || ""}`
+                  }}</span
+                >
+              </div>
             </div>
           </el-form-item>
 
           <el-form-item>
-            <el-button type="primary" @click="submitForm('formObj')">确认提交</el-button>
+            <el-button type="primary" @click="submitForm('formObj')"
+              >确认提交</el-button
+            >
             <el-button @click="handleConfirm">重置</el-button>
           </el-form-item>
         </el-form>
       </div>
-  </div>
-     
-  
-      <!-- 显示当前形状的坐标点 -->
-      <pre>{{ shapes }}</pre>
     </div>
-  </template>
-  
-  <script>
-  export default {
-    data() {
-      return {
-        currentShapeType: '1',
-        shapes: [],
-        currentPoints: [],
-        
-        formObj: {
-          type:'1',
-          bed:[],
-          bed1:[],
-          spray:[],
-          sprayList:[]
-        }
-      };
-    },
-    methods: {
-      changeType(val){
-        this.currentShapeType = val;
-        this.currentPoints = [];
-      },
-      resetShape() {
-        this.currentPoints = [];
-      },
-      handleClick(event) {
-        const rect = this.$refs.imageArea.getBoundingClientRect();
-        const x = event.clientX - rect.left;
-        const y = event.clientY - rect.top;
-        this.currentPoints.push({ x, y });
-        if(this.currentShapeType == '1'){
-            if(this.formObj.bed.length < 4){
-              this.formObj.bed.push({ x, y });
-            }else{
-              this.formObj.bed1.push({ x, y });
-            }
-            console.log( this.formObj.bed,'hss')
-          } else if (this.currentShapeType == '2') {
-            this.formObj.spray=[...this.currentPoints]
-          } else if(this.currentShapeType == '3'){
-            this.formObj.sprayList = [...this.currentPoints]
-          }
-        const requiredPoints = this.getRequiredPointsForShape(this.currentShapeType);
-  
-        if (this.currentPoints.length === requiredPoints) {
-          this.shapes.push({
-            type: this.currentShapeType,
-            points: [...this.currentPoints],
-          });
-         
-          this.currentPoints = [];
-        }
-      },
-      getRequiredPointsForShape(shapeType) {
-        switch (shapeType) {
-          case '1':
-            return 4;
-          case '2':
-            return 4;
-          case '3':
-            return 8; // Example: 10 points for the 3
-          default:
-            return 4;
-        }
-      },
-      getPointStyle(point) {
-        return {
-          top: `${point.y}px`,
-          left: `${point.x}px`,
-          position: 'absolute',
-          width: '10px',
-          height: '10px',
-          backgroundColor: 'blue',
-          borderRadius: '50%',
-        };
-      },
-      getRectangleStyle(points) {
-        if (points.length < 4) return {};
-        const [leftup, leftdown, rightup, rightdown] = points;
-        const width = Math.abs(rightup.x - leftup.x);
-        const height = Math.abs(leftdown.y - rightdown.y);
-        return {
-          top: `${leftup.y}px`,
-          left: `${leftup.x}px`,
-          width: `${width}px`,
-          height: `${height}px`,
-          border: '2px solid red',
-          position: 'absolute',
-        };
-      },
-      getLinePoints(points) {
-        return points.map(point => `${point.x},${point.y}`).join(' ');
+
+    <!-- 显示当前形状的坐标点 -->
+    <pre>{{ shapes }}</pre>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      currentShapeType: "1",
+      shapes: [],
+      currentPoints: [],
+
+      formObj: {
+        type: "1",
+        bed: [],
+        bed1: [],
+        spray: [],
+        sprayList: [],
       },
-  // 重置
-  handleConfirm(){
-    this.currentPoints = []
-    this.shapes= []
-    this.currentShapeType = '1';
-    this.formObj ={
-      bed:[],
-      bed1:[],
-      spray:[],
-      sprayList:[]
-    }
-    
+    };
   },
-      // 
-      submitForm(formName) {
-      console.log(this.formObj,'提交')
-        this.$refs[formName].validate((valid) => {
-          if (valid) {
-            alert('submit!');
-          } else {
-            console.log('error submit!!');
-            return false;
-          }
-        });
-      },
-      resetForm(formName) {
-        this.$refs[formName].resetFields();
-      },
-      removeDomain(item) {
-        var index = this.formObj.bedList.indexOf(item)
-        if (index !== -1) {
-          this.formObj.bedList.splice(index, 1)
+  methods: {
+    changeType(val) {
+      this.currentShapeType = val;
+      this.currentPoints = [];
+    },
+    resetShape() {
+      this.currentPoints = [];
+    },
+    handleClick(event) {
+      const rect = this.$refs.imageArea.getBoundingClientRect();
+      const x = event.clientX - rect.left;
+      const y = event.clientY - rect.top;
+      this.currentPoints.push({ x, y });
+      if (this.currentShapeType == "1") {
+        if (this.formObj.bed.length < 4) {
+          this.formObj.bed.push({ x, y });
+        } else {
+          this.formObj.bed1.push({ x, y });
         }
-      },
-      addDomain() {
-        this.formObj.bedList.push({
-          value: '',
-          key: Date.now()
-        });
+        console.log(this.formObj.bed, "hss");
+      } else if (this.currentShapeType == "2") {
+        this.formObj.spray = [...this.currentPoints];
+      } else if (this.currentShapeType == "3") {
+        this.formObj.sprayList = [...this.currentPoints];
       }
+      const requiredPoints = this.getRequiredPointsForShape(
+        this.currentShapeType
+      );
 
+      if (this.currentPoints.length === requiredPoints) {
+        this.shapes.push({
+          type: this.currentShapeType,
+          points: [...this.currentPoints],
+        });
 
+        this.currentPoints = [];
+      }
+    },
+    getRequiredPointsForShape(shapeType) {
+      switch (shapeType) {
+        case "1":
+          return 4;
+        case "2":
+          return 4;
+        case "3":
+          return 8; // Example: 10 points for the 3
+        default:
+          return 4;
+      }
+    },
+    getPointStyle(point) {
+      return {
+        top: `${point.y}px`,
+        left: `${point.x}px`,
+        position: "absolute",
+        width: "10px",
+        height: "10px",
+        backgroundColor: "blue",
+        borderRadius: "50%",
+      };
     },
-  };
-  </script>
-  
-  <style scoped>
-  .el-button {
-    padding:10px;
-  }
-  .box{ 
-    display: flex;
-    
-  }
-    .image-area {
-    position: relative;
-    width: 100%;
-    height: auto;
-    display: inline-block;
-    width:700px;
-    height:600px;
-  }
-  .image {
-    width: 100%;
-    height: auto;
-  }
-  .rectangle {
-    border: 2px solid red;
-    position: absolute;
-  }
-  .point-marker {
-    position: absolute;
-  }
-  .3 {
-    position: absolute;
-    fill: none;
-    stroke: red;
-    stroke-width: 2px;
-  }
-  </style>
-  
+    getRectangleStyle(points) {
+      if (points.length < 4) return {};
+      const [leftup, leftdown, rightup, rightdown] = points;
+      const width = Math.abs(rightup.x - leftup.x);
+      const height = Math.abs(leftdown.y - rightdown.y);
+      return {
+        top: `${leftup.y}px`,
+        left: `${leftup.x}px`,
+        width: `${width}px`,
+        height: `${height}px`,
+        border: "2px solid red",
+        position: "absolute",
+      };
+    },
+    getLinePoints(points) {
+      return points.map((point) => `${point.x},${point.y}`).join(" ");
+    },
+    // 重置
+    handleConfirm() {
+      this.currentPoints = [];
+      this.shapes = [];
+      this.currentShapeType = "1";
+      this.formObj = {
+        bed: [],
+        bed1: [],
+        spray: [],
+        sprayList: [],
+      };
+    },
+    //
+    submitForm(formName) {
+      console.log(this.formObj, "提交");
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          alert("submit!");
+        } else {
+          console.log("error submit!!");
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+    removeDomain(item) {
+      var index = this.formObj.bedList.indexOf(item);
+      if (index !== -1) {
+        this.formObj.bedList.splice(index, 1);
+      }
+    },
+    addDomain() {
+      this.formObj.bedList.push({
+        value: "",
+        key: Date.now(),
+      });
+    },
+  },
+};
+</script>
+
+<style scoped>
+.el-button {
+  padding: 10px;
+}
+.box {
+  display: flex;
+}
+.image-area {
+  position: relative;
+  width: 100%;
+  height: auto;
+  display: inline-block;
+  width: 700px;
+  height: 600px;
+}
+.image {
+  width: 100%;
+  height: auto;
+}
+.rectangle {
+  border: 2px solid red;
+  position: absolute;
+}
+.point-marker {
+  position: absolute;
+}
+.3 {
+  position: absolute;
+  fill: none;
+  stroke: red;
+  stroke-width: 2px;
+}
+</style>

+ 1478 - 0
src/views/shedProduction/leftoverUse/index.vue

@@ -0,0 +1,1478 @@
+<template>
+  <div class="app-container">
+    <div class="search">
+      <el-date-picker
+        v-model="table.getdataListParm.parammaps.inputDatetime"
+        class="inputDatetime filter-item"
+        type="daterange"
+        range-separator="至"
+        start-placeholder="开始日期"
+        end-placeholder="结束日期"
+        style="width: 250px"
+      />
+      <!-- <el-button class="el-icon-arrow-left elIconArrowLeft" @click="handleBefore" />
+      <el-button class="el-icon-arrow-right elIconArrowRight" @click="handleNext" />
+      <el-select v-model="table.getdataListParm.parammaps.ftid" filterable placeholder="栏舍名称" class="filter-item" style="width: 120px;" clearable>
+        <el-option v-for="item in houseNameList" :key="item.id" :label="item.bname" :value="item.id" />
+      </el-select>
+      <el-select v-model="record" filterable placeholder="记录" class="filter-item" style="width: 150px;" @change="changeRecord">
+        <el-option v-for="item in recordList" :key="item.id" :label="item.name" :value="item.id" />
+      </el-select>
+      <el-select v-if="record== '1'" v-model="table.getdataListParm.parammaps.eqcode" filterable placeholder="TMR编号" class="filter-item" style="width: 120px;" clearable>
+        <el-option v-for="item in TMRNumberList" :key="item.id" :label="item.tname" :value="item.eqcode" />
+      </el-select> -->
+      <el-button class="successBorder" @click="form_search">查询</el-button>
+      <!-- <el-button class="successBorder" @click="handleRefresh">重置</el-button> -->
+    </div>
+    <div class="operation" v-if="record == '0'">
+      <el-button
+        v-if="isRoleEdit"
+        icon="el-icon-plus"
+        class="success"
+        @click="handleCreate"
+        >新增</el-button
+      >
+      <el-button
+        v-if="isRoleEdit"
+        icon="el-icon-delete"
+        class="danger"
+        @click="form_delete"
+        >删除</el-button
+      >
+      <el-button
+        v-if="isRoleEdit"
+        class="success"
+        icon="el-icon-upload2"
+        @click="handleSAPUpload"
+        >SAP上传</el-button
+      >
+      <!-- <el-button v-if="dataSynchronization.isDataSynchronization && isRoleEdit" class="success" @click="handleDataUpload">数据上传</el-button>
+      <el-upload v-if="isRoleEdit" style="float: right;" :headers="headers" :data="uploadData" :action="uploadExcelUrl" :show-file-list="false" :before-upload="beforeImport" :on-success="handleImportSuccess">
+        <el-button class="import" icon="el-icon-download" style="float: right;">导入</el-button>
+      </el-upload>
+      <el-dropdown style="float: right;margin-right: 10px;">
+        <el-button class="export" icon="el-icon-upload2">导出</el-button>
+        <el-dropdown-menu slot="dropdown">
+          <el-dropdown-item  @click.native="handleExport(1)">导出模板</el-dropdown-item>
+          <el-dropdown-item @click.native="handleExport(2)">导出数据</el-dropdown-item>
+        </el-dropdown-menu>
+      </el-dropdown> -->
+    </div>
+    <div class="operation" v-else>
+      <el-button
+        v-if="dataSynchronization.isDataSynchronization && isRoleEdit"
+        class="success"
+        @click="handleDataUpload"
+        >数据上传</el-button
+      >
+      <el-button
+        style="float: right; margin-right: 10px"
+        class="export"
+        icon="el-icon-upload2"
+        @click="handleExport(3)"
+        >导出</el-button
+      >
+    </div>
+    <!-- 剩料使用 table -->
+    <div class="table">
+      <el-table
+        :key="table.tableKey"
+        v-loading="table.listLoading"
+        element-loading-text="给我一点时间"
+        :data="table.list"
+        border
+        fit
+        highlight-current-row
+        style="width: 100%"
+        :row-style="rowStyle"
+        :cell-style="cellStyle"
+        class="elTable table-fixed"
+        :header-cell-style="{ 'text-align': 'center' }"
+        @selection-change="handleSelectionChange"
+        :max-height="myHeight"
+      >
+        <el-table-column type="selection" align="left" width="50" />
+        <el-table-column label="序号" align="left" type="index" width="50px">
+          <template slot-scope="scope">
+            <span>{{
+              scope.$index + (table.pageNum - 1) * table.pageSize + 1
+            }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column
+          label="栏舍名称"
+          min-width="120px"
+          align="left"
+          prop="barname"
+        />
+        <el-table-column
+          label="配方名称"
+          min-width="120px"
+          align="left"
+          prop="ftname"
+        />
+        <el-table-column
+          label="剩料使用时间"
+          min-width="150px"
+          align="left"
+          prop="date"
+        />
+        <el-table-column
+          label="班次"
+          min-width="90px"
+          align="left"
+          prop="timesstr"
+        />
+        <el-table-column
+          label="替代方案"
+          min-width="100px"
+          align="left"
+          prop="surplus"
+        />
+        <el-table-column
+          label="替代重量(Kg)"
+          min-width="100px"
+          align="left"
+          prop="weight"
+        />
+        <el-table-column
+          label="操作"
+          align="left"
+          width="100"
+          class-name="small-padding fixed-width"
+          fixed="right"
+        >
+          <template slot-scope="{ row }">
+            <!-- <el-button v-if="isRoleEdit" :disabled="row.emp == '设备采集'" class="miniSuccess" icon="el-icon-edit-outline" @click="handleUpdate(row)" />
+            <span v-if="isRoleEdit" class="centerSpan">|</span> -->
+            <el-button
+              v-if="isRoleEdit"
+              :disabled="row.emp == '设备采集'"
+              class="miniDanger"
+              icon="el-icon-delete"
+              @click="handleRowDelete(row)"
+            />
+          </template>
+        </el-table-column>
+      </el-table>
+      <pagination
+        v-show="table.total >= 0"
+        :total="table.total"
+        :page.sync="table.getdataListParm.offset"
+        :limit.sync="table.getdataListParm.pagecount"
+        @pagination="getList"
+      />
+    </div>
+
+    <!-- 新增/编辑 -->
+    <el-dialog
+      :fullscreen="dialogFull"
+      :visible.sync="create.dialogFormVisible"
+      :close-on-click-modal="false"
+      v-if="create.dialogFormVisible"
+      width="40%"
+    >
+      <template slot="title">
+        <div class="avue-crud__dialog__header">
+          <span class="el-dialog__title">
+            <span
+              style="
+                display: inline-block;
+                width: 3px;
+                height: 20px;
+                margin-right: 5px;
+                float: left;
+                margin-top: 2px;
+              "
+            />
+            {{ textMap[create.dialogStatus] }}
+          </span>
+          <div
+            class="avue-crud__dialog__menu"
+            @click="dialogFull ? (dialogFull = false) : (dialogFull = true)"
+          >
+            <svg-icon v-if="dialogFull" icon-class="exit-fullscreen" />
+            <svg-icon v-else icon-class="fullscreen" />
+          </div>
+        </div>
+      </template>
+      <div class="app-add">
+        <el-form
+          ref="temp"
+          :rules="create.rules"
+          :model="create.temp"
+          label-position="right"
+          label-width="135px"
+          style="width: 90%; margin: 0 auto 50px"
+        >
+          <el-row v-if="create.dialogStatus == 'create'">
+            <el-col :span="20">
+              <el-form-item label="栏舍名称:" prop="barid">
+                <el-select
+                  ref="ftid"
+                  v-model="create.temp.barid"
+                  :disabled="create.dialogStatus == 'update'"
+                  filterable
+                  placeholder="栏舍名称"
+                  class="filter-item"
+                  style="width: 100%"
+                  @change="changeBar"
+                >
+                  <el-option
+                    v-for="item in houseNameList"
+                    :key="item.id"
+                    :label="item.bname"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row v-else>
+            <el-col :span="20">
+              <el-form-item label="栏舍名称:" prop="barname">
+                <el-input
+                  ref="barname"
+                  v-model="create.temp.barname"
+                  disabled
+                  class="filter-item"
+                  placeholder=""
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <!-- TODO: -->
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="配方名称:">
+                <el-input
+                  v-model="create.temp.ftname"
+                  class="filter-item"
+                  placeholder="配方名称"
+                  disabled
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="剩料使用时间:" prop="date">
+                <el-date-picker
+                  v-model="create.temp.date"
+                  type="date"
+                  value-format="yyyy-MM-dd"
+                  style="width: 100%"
+                  :picker-options="pickerOptions"
+                  placeholder="剩料使用时间"
+                >
+                </el-date-picker>
+              </el-form-item>
+            </el-col>
+
+            <el-col :span="20">
+              <el-form-item label="班次:">
+                <el-select
+                  ref="times"
+                  v-model="create.temp.times"
+                  filterable
+                  placeholder="班次"
+                  :disabled="create.dialogStatus == 'update'"
+                  class="filter-item"
+                  style="width: 100%"
+                >
+                  <el-option
+                    v-for="item in frequencyList"
+                    :key="item.id"
+                    :label="item.name"
+                    :value="item.id"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <!--  -->
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="替代方案:" prop="surplus">
+                <el-select
+                  style="width: 100%"
+                  v-model="create.temp.surplus"
+                  filterable
+                  clearable
+                  placeholder="替代方案"
+                  class="filter-item"
+                  @change="handlegetSurplus"
+                >
+                  <el-option
+                    v-for="item in tableData"
+                    :key="item.id"
+                    :label="item.surplus"
+                    :value="item.surplus"
+                  />
+                </el-select>
+              </el-form-item>
+            </el-col>
+          </el-row>
+          <el-row>
+            <el-col :span="20">
+              <el-form-item label="替代重量(Kg):" prop="weight">
+                <el-input
+                  ref="weight"
+                  v-model="create.temp.weight"
+                  class="filter-item"
+                  placeholder="替代重量"
+                  type="number"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer">
+          <el-button
+            class="cancelClose"
+            @click="
+              create.dialogFormVisible = false;
+              getList();
+            "
+            >关闭</el-button
+          >
+          <el-button
+            v-if="
+              create.dialogStatus === 'create' ||
+              create.dialogStatus === 'update'
+            "
+            class="save"
+            :disabled="isokDisable"
+            @click="
+              create.dialogStatus === 'create' ? createData() : updateData()
+            "
+            >确认</el-button
+          >
+        </div>
+      </div>
+    </el-dialog>
+
+    <!-- sap上传 -->
+    <el-dialog
+      title="SAP上传"
+      :destroy-on-close="true"
+      :visible.sync="sapUpload.dialogFormVisible"
+      :close-on-click-modal="false"
+      width="40%"
+    >
+      <div class="sapUpload">
+        <el-form
+          ref="sapUpload"
+          :rules="sapUpload.rules"
+          :model="sapUpload.temp"
+          label-position="right"
+          label-width="100px"
+          style="width: 100%; margin: 0 auto 50px"
+        >
+          <el-row>
+            <el-col :span="24">
+              <el-form-item label="时间:" prop="date">
+                <el-date-picker
+                  v-model="sapUpload.temp.date"
+                  :clearable="false"
+                  class="filter-item"
+                  type="date"
+                />
+              </el-form-item>
+            </el-col>
+          </el-row>
+        </el-form>
+        <div slot="footer" class="dialog-footer" style="bottom: 20px">
+          <el-button
+            class="cancelClose"
+            @click="
+              sapUpload.dialogFormVisible = false;
+              getList();
+            "
+            >取消</el-button
+          >
+          <el-button
+            class="save"
+            :disabled="isokDisable"
+            @click="sapUploadData()"
+            >确认</el-button
+          >
+        </div>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  GetDataByName,
+  PostDataByName,
+  getSurplus,
+  GetDataByNames,
+  checkButtons,
+  postJson2,
+  postJson,
+} from "@/api/common";
+import Cookies from "js-cookie";
+import { parseTime, json2excel } from "@/utils/index.js";
+import Pagination from "@/components/Pagination";
+import { MessageBox } from "element-ui";
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+export default {
+  name: "MaterialRemainingRecord",
+  components: { Pagination },
+  data() {
+    return {
+      pickerOptions: {
+        disabledDate(time) {
+          return time.getTime() > Date.now() - 8.64e6; //如果没有后面的-8.64e6就是不可以选择今天的
+        },
+      },
+      enterTime: "",
+      tableData: [],
+      sapUpload: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        temp: {
+          date: parseTime(new Date(), "{y}-{m}-{d}"),
+        },
+        rules: {
+          date: [
+            { required: true, message: "原剩料所属时间必填", trigger: "blur" },
+          ],
+        },
+        getdataListParm: {
+          name: "getSysoptEnable",
+          page: 1,
+          offset: 1,
+          pagecount: 1,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "sapupload",
+          },
+        },
+        isSap: false,
+      },
+      dialogFull: false,
+      isRoleEdit: [],
+      getParmas: {
+        name: "getFPList",
+        page: 1,
+        offset: 1,
+        pagecount: 0,
+        returntype: "Map",
+        parammaps: {
+          pastureid: Cookies.get("pastureid"),
+          ftname: "",
+        },
+      },
+      requestParams: [
+        {
+          name: "getBarListEnable",
+          offset: 0,
+          pagecount: 0,
+          parammaps: { pastureid: Cookies.get("pastureid") },
+        },
+        {
+          name: "getSysoptEnable",
+          offset: 0,
+          pagecount: 0,
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "times",
+          },
+        },
+        {
+          name: "getTMRListEnableType",
+          offset: 0,
+          pagecount: 0,
+          parammaps: { pastureid: Cookies.get("pastureid"), eqtype: "1" },
+        },
+      ],
+      houseNameList: [], // 栏舍名称
+      frequencyList: [], // 收集
+      recordList: [
+        { id: "0", name: "手动记录" },
+        { id: "1", name: "TMR设备自动记录" },
+      ],
+      record: "0",
+      table: {
+        getdataListParm: {
+          name: "getWasteuse",
+          page: 1,
+          offset: 1,
+          pagecount: parseInt(Cookies.get("pageCount")),
+          returntype: "Map",
+          parammaps: {
+            pastureId: Cookies.get("pastureid"),
+            ftid: "",
+            startdate: "",
+            enddate: "",
+            inputDatetime: "",
+          },
+        },
+        tableKey: 0,
+        list: [],
+        total: 0,
+        listLoading: true,
+        temp: {},
+        tableKey2: 0,
+        listLoading2: false,
+        list2: [],
+      },
+
+      // 新增/编辑
+      create: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        temp: {
+          pastureId: Cookies.get("pastureid"),
+          operatetime: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}"),
+          emp: Cookies.get("employename"),
+          ftid: "",
+          ftname: "",
+          weight: "",
+          times: "1",
+          surplusId: "",
+          surplus: "",
+        },
+        rules: {
+          ftid: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          weight: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          times: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          ftname: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          surplus: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          date: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+          barid: [
+            {
+              type: "string",
+              required: true,
+              message: "必填",
+              trigger: "blur",
+            },
+          ],
+        },
+        getdataListParm: {
+          name: "getBarfeedremainEmpHis",
+          page: 1,
+          offset: 1,
+          pagecount: 10,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+          },
+        },
+        noteTakerList: [], // 记录人
+      },
+      textMap: {
+        create: "新增",
+        update: "编辑",
+      },
+
+      requestParam: {},
+      download: {
+        getdataListParm: {
+          name: "getBarfeedremainList",
+          page: 1,
+          offset: 1,
+          pagecount: 0,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            ftid: "",
+            startdate: "",
+            enddate: "",
+            inputDatetime: "",
+          },
+        },
+        list: [],
+      },
+      dataSynchronization: {
+        dialogFormVisible: false,
+        dialogStatus: "",
+        getdataListParm: {
+          name: "getSysoptEnable",
+          page: 1,
+          offset: 1,
+          pagecount: 1,
+          returntype: "Map",
+          parammaps: {
+            pastureid: Cookies.get("pastureid"),
+            inforname: "wgSap",
+          },
+        },
+        isDataSynchronization: false,
+      },
+      isokDisable: false,
+      selectList: [],
+      rowStyle: { maxHeight: 30 + "px", height: 30 + "px" },
+      cellStyle: { padding: 0 + "px" },
+      myHeight: document.documentElement.clientHeight - 85 - 150 - 45,
+      url: "authdata/ImportExcel",
+    };
+  },
+  computed: {
+    // 设置请求头
+    headers() {
+      return {
+        token: getToken(),
+      };
+    },
+    uploadData() {
+      return {
+        name: "checkbarname,checktimes,insertBarfeedremainUpload",
+        importParams:
+          "栏舍名称,配方名称,原剩料所属时间,剩料量(kg),干物质,班次收集(一天/第一班/第二班/第三班),收集时间,操作人",
+        sheetname: "Sheet1",
+        // 登录牧场
+        pastureid: Cookies.get("pastureid"),
+        // 日期参数
+        dateParams: "原剩料所属时间",
+        // 必填参数
+        requiredParams:
+          "栏舍名称,剩料量(kg),班次收集(一天/第一班/第二班/第三班)",
+        // 为数值的参数
+        numParams: "剩料量(kg)",
+      };
+    },
+    // 设置上传地址
+    uploadExcelUrl() {
+      // return Cookies.get('url') + 'authdata/ImportExcel'
+      return Cookies.get("url") + "authdata/ImportExcel";
+    },
+    // let url = 'authdata/ImportExcel';
+  },
+  created() {
+    console.log(document.querySelector("html").getAttribute("domain"), "7777");
+    this.getDataSynchronization();
+    this.getList();
+    this.getDownList();
+    this.getButtons();
+    this.getLeftTable();
+  },
+  mounted() {
+    this.$nextTick(() => {
+      this.enterTime = Date.now();
+    });
+  },
+  beforeUnmount() {
+    const stayTime = Math.round((Date.now() - this.enterTime) / 1000);
+    window._hmt?.push([
+      "_trackEvent",
+      "PageStay",
+      "Duration",
+      this.$route.path,
+      stayTime,
+    ]);
+  },
+  methods: {
+    // 获取剩料列表
+    async getLeftTable() {
+      const { data } = await getSurplus(Cookies.get("pastureid"));
+      console.log(data, "table");
+      this.tableData = data;
+    },
+    // 获取替代方案的名字
+    handlegetSurplus(val) {
+      const id = this.tableData.find((item) => {
+        return item.surplus == val;
+      }).id;
+      this.create.temp.surplusId = id;
+      console.log(id, "surplus");
+    },
+    // 点击sap上传
+    handleSAPUpload() {
+      this.sapUpload.dialogStatus = "sapUpload";
+      this.sapUpload.dialogFormVisible = true;
+    },
+    sapUploadData() {
+      this.$refs["sapUpload"].validate((valid) => {
+        if (valid) {
+          const url = "authdata/xdmy/sap/wasteuse";
+          const data = {
+            pastureId: Cookies.get("pastureid"),
+            date: parseTime(this.sapUpload.temp.date, "{y}-{m}-{d}"),
+          };
+          const loading = this.$loading({
+            lock: true,
+            text: "Loading",
+            spinner: "el-icon-loading",
+            background: "rgba(0, 0, 0, 0.7)",
+          });
+
+          postJson(url, data).then((response) => {
+            setTimeout(() => {
+              loading.close();
+            }, 1000);
+            if (response.msg == "ok") {
+              this.$notify({
+                title: "",
+                message: "成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.sapUpload.dialogFormVisible = false;
+              this.getList();
+            } else {
+              this.$notify({
+                title: "失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          });
+        }
+      });
+    },
+
+    getDataSynchronization() {
+      GetDataByName(this.dataSynchronization.getdataListParm).then(
+        (response) => {
+          // console.log(response.data.list[0])
+          if (response.data.list && response.data.list[0].inforvalue == 0) {
+            this.dataSynchronization.isDataSynchronization = false;
+          } else {
+            this.dataSynchronization.isDataSynchronization = true;
+          }
+        }
+      );
+    },
+    getButtons() {
+      const Edit = "MaterialRemainingRecord";
+      const isRoleEdit = checkButtons(
+        JSON.parse(sessionStorage.getItem("buttons")),
+        Edit
+      );
+      this.isRoleEdit = isRoleEdit;
+    },
+    getDownList() {
+      GetDataByNames(this.requestParams).then((response) => {
+        this.houseNameList = response.data.getBarListEnable.list;
+        this.TMRNumberList = response.data.getTMRListEnableType.list;
+        if (response.data.getSysoptEnable.list !== null) {
+          for (
+            let i = 1;
+            i <= response.data.getSysoptEnable.list[0].inforvalue;
+            i++
+          ) {
+            const obj = {};
+            obj.id = String(i);
+            if (i == 1) {
+              obj.name = "第一班";
+            } else if (i == 2) {
+              obj.name = "第二班";
+            } else if (i == 3) {
+              obj.name = "第三班";
+            } else if (i == 4) {
+              obj.name = "第四班";
+            } else if (i == 5) {
+              obj.name = "第五班";
+            } else if (i == 6) {
+              obj.name = "第六班";
+            }
+            this.frequencyList.push(obj);
+          }
+          // this.frequencyList.unshift({id:'0',name:"一天"})
+        } else {
+          this.frequencyList = [];
+        }
+      });
+    },
+    handleBefore() {
+      if (
+        this.table.getdataListParm.parammaps.inputDatetime !== "" &&
+        this.table.getdataListParm.parammaps.inputDatetime !== null
+      ) {
+        var start = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[0].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[0].getDate() - 1
+          )
+        );
+        var stop = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[1].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[1].getDate() - 1
+          )
+        );
+        this.table.getdataListParm.parammaps.inputDatetime.length = 0;
+        this.table.getdataListParm.parammaps.inputDatetime.push(start, stop);
+        this.$forceUpdate();
+      }
+    },
+    handleNext() {
+      if (
+        this.table.getdataListParm.parammaps.inputDatetime !== "" &&
+        this.table.getdataListParm.parammaps.inputDatetime !== null
+      ) {
+        var start = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[0].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[0].getDate() + 1
+          )
+        );
+        var stop = new Date(
+          this.table.getdataListParm.parammaps.inputDatetime[1].setDate(
+            this.table.getdataListParm.parammaps.inputDatetime[1].getDate() + 1
+          )
+        );
+        this.table.getdataListParm.parammaps.inputDatetime.length = 0;
+        this.table.getdataListParm.parammaps.inputDatetime.push(start, stop);
+        this.$forceUpdate();
+      }
+    },
+
+    getList() {
+      this.table.listLoading = true;
+      if (
+        this.table.getdataListParm.parammaps.inputDatetime !== "" &&
+        this.table.getdataListParm.parammaps.inputDatetime !== null
+      ) {
+        this.table.getdataListParm.parammaps.startdate = parseTime(
+          this.table.getdataListParm.parammaps.inputDatetime[0],
+          "{y}-{m}-{d}"
+        );
+        this.table.getdataListParm.parammaps.enddate = parseTime(
+          this.table.getdataListParm.parammaps.inputDatetime[1],
+          "{y}-{m}-{d}"
+        );
+      } else {
+        this.table.getdataListParm.parammaps.inputDatetime = "";
+        this.table.getdataListParm.parammaps.startdate = "";
+        this.table.getdataListParm.parammaps.enddate = "";
+      }
+      GetDataByName(this.table.getdataListParm).then((response) => {
+        console.log("table数据", response.data.list);
+        if (response.data.list !== null) {
+          this.table.list = response.data.list;
+          this.table.pageNum = response.data.pageNum;
+          this.table.pageSize = response.data.pageSize;
+          this.table.total = response.data.total;
+        } else {
+          this.table.list = [];
+        }
+        setTimeout(() => {
+          this.table.listLoading = false;
+        }, 100);
+      });
+    },
+    changeRecord(item) {
+      if (item == "0") {
+        this.table.getdataListParm.name = "getBarfeedremainList";
+      } else {
+        this.table.getdataListParm.name = "getRemainplanrecord";
+      }
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+    },
+    form_search() {
+      console.log("点击了查询");
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+    },
+    handleRefresh() {
+      console.log("点击了重置");
+      this.table.getdataListParm.parammaps.ftid = "";
+      this.table.getdataListParm.parammaps.startdate = "";
+      this.table.getdataListParm.parammaps.enddate = "";
+      this.table.getdataListParm.parammaps.inputDatetime = "";
+      this.table.getdataListParm.offset = 1;
+      this.getList();
+    },
+
+    // 新增
+    resetTemp() {
+      this.create.temp = {
+        pastureId: Cookies.get("pastureid"),
+        operatetime: parseTime(new Date(), "{y}-{m}-{d} {h}:{i}"),
+        emp: Cookies.get("employename"),
+        ftid: "",
+        ftname: "",
+        weight: "",
+        times: "1",
+        date: "",
+      };
+    },
+    blurEmp(item) {
+      this.create.temp.emp = item.target.value;
+    },
+    // 栏舍名称
+    changeBar(item) {
+      this.create.temp.ftname = this.houseNameList.find(
+        (obj) => obj.id === item
+      ).bname;
+      this.create.temp.ftid = item;
+      this.getParmas.parammaps.barid = item;
+      this.chooseftname();
+    },
+    // 根据栏舍选择配方名称
+    chooseftname() {
+      GetDataByName(this.getParmas).then((res) => {
+        const { data } = res;
+        const ftname = data.list.length && data.list[0].ftname;
+        this.$set(this.create.temp, "ftname", ftname);
+        // this.create.temp.ftname = ftname;
+        console.log(this.create.temp.ftname, ftname, "配方名字");
+      });
+    },
+
+    getNoteTakerList() {
+      GetDataByName(this.create.getdataListParm).then((response) => {
+        if (response.data.list !== null) {
+          for (let i = 0; i < response.data.list.length; i++) {
+            response.data.list[i].myId = i;
+          }
+          this.create.noteTakerList = response.data.list;
+          console.log("记录人数据", response.data.list);
+          console.log(this.create.noteTakerList);
+        } else {
+          this.create.noteTakerList = [];
+        }
+      });
+    },
+    handleCreate() {
+      console.log("点击了新增", this.create);
+
+      this.dialogFull = false;
+      this.resetTemp();
+      this.getNoteTakerList();
+      this.create.dialogStatus = "create";
+      this.create.dialogFormVisible = true;
+    },
+    createData() {
+      console.log("点击了新增保存");
+      console.log(this.create.temp, "发送数据");
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      this.$refs["temp"].validate((valid) => {
+        if (valid) {
+          this.isokDisable = true;
+          setTimeout(() => {
+            this.isokDisable = false;
+          }, 1000);
+          const weight = /^\d+(\.\d{1,2})?$/;
+          // 剩料量
+          if (!weight.test(parseFloat(this.create.temp.weight))) {
+            this.$message({
+              type: "error",
+              message: "剩料量请输入自然数并保留两位小数",
+              duration: 2000,
+            });
+            return false;
+          }
+          this.requestParam.name = "insertWasteuse";
+          this.requestParam.parammaps = this.create.temp;
+
+          if (this.create.temp.emp == "") {
+            this.create.temp.emp = Cookies.get("employename");
+          }
+          console.log("新增保存发送参数", this.requestParam);
+          PostDataByName(this.requestParam).then((response) => {
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "保存成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.create.dialogFormVisible = false;
+              this.getList();
+            } else {
+              const ftid = new RegExp("key 'ftid'");
+              if (ftid.test(response.data)) {
+                this.$message({
+                  type: "error",
+                  message: "该栏舍该班次收集今日剩料量已存在,不可重复生成",
+                  duration: 2000,
+                });
+              } else {
+                this.$notify({
+                  title: "保存失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              }
+            }
+          });
+        }
+      });
+    },
+
+    // 编辑
+    handleUpdate(row) {
+      console.log("点击了编辑", row);
+      console.log(this.frequencyList, "frequencyList");
+      this.dialogFull = false;
+      row.ftid = String(row.ftid);
+      this.create.temp = Object.assign({}, row);
+      this.create.temp.id = row.id;
+
+      this.getNoteTakerList();
+      this.create.dialogStatus = "update";
+      this.create.dialogFormVisible = true;
+    },
+    updateData() {
+      this.isokDisable = true;
+      setTimeout(() => {
+        this.isokDisable = false;
+      }, 1000);
+      this.$refs["temp"].validate((valid) => {
+        if (valid) {
+          this.isokDisable = true;
+          setTimeout(() => {
+            this.isokDisable = false;
+          }, 1000);
+          const weight = /^\d+(\.\d{1,2})?$/;
+          // 剩料量
+          if (!weight.test(parseFloat(this.create.temp.weight))) {
+            this.$message({
+              type: "error",
+              message: "剩料量请输入自然数并保留两位小数",
+              duration: 2000,
+            });
+            return false;
+          }
+          this.requestParam.name = "editWasteuse";
+          this.requestParam.parammaps = this.create.temp;
+          if (this.create.temp.emp == "") {
+            this.create.temp.emp = Cookies.get("employename");
+          }
+          PostDataByName(this.requestParam).then((response) => {
+            console.log("新增保存发送参数", this.requestParam);
+            if (response.msg !== "fail") {
+              this.$notify({
+                title: "成功",
+                message: "保存成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.create.dialogFormVisible = false;
+              this.getList();
+            } else {
+              this.$notify({
+                title: "保存失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            }
+          });
+        }
+      });
+    },
+
+    // 删除
+    handleRowDelete(row, type) {
+      console.log("点击了行内删除");
+      MessageBox.confirm("是否确认删除此信息?", {
+        confirmButtonText: "确认",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          this.selectList = [];
+          this.requestParam.name = "delWasteuse";
+          this.requestParam.parammaps = {};
+          this.requestParam.parammaps.pastureId = row.pastureid;
+          if (type == 1) {
+            this.requestParam.parammaps.id = row;
+          } else {
+            this.requestParam.parammaps.id = row.id;
+          }
+
+          PostDataByName(this.requestParam).then((response) => {
+            if (response.msg === "fail") {
+              this.$notify({
+                title: "删除失败",
+                message: response.data,
+                type: "warning",
+                duration: 2000,
+              });
+            } else {
+              this.$notify({
+                title: "成功",
+                message: "删除成功",
+                type: "success",
+                duration: 2000,
+              });
+              this.getList();
+            }
+          });
+        })
+        .catch(() => {
+          this.$message({ type: "info", message: "已取消删除" });
+        });
+    },
+    handleSelectionChange(val) {
+      console.log("勾选数据", val);
+      this.selectList = val;
+    },
+    form_delete(type) {
+      console.log("点击了删除++++++++");
+      if (this.selectList.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择栏舍剩料记录",
+          duration: 2000,
+        });
+      } else {
+        const ids = this.selectList.map((item) => {
+          return item.id;
+        });
+        this.handleRowDelete(ids.toString(), 1);
+      }
+    },
+    // 复制
+    handleCopy() {
+      console.log("点击了复制");
+      if (this.selectList.length == 0) {
+        this.$message({
+          type: "error",
+          message: "请选择栏舍剩料记录",
+          duration: 2000,
+        });
+      } else if (this.selectList.length == 1) {
+        MessageBox.confirm("是否确认复制此信息?", {
+          confirmButtonText: "确认",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+          .then(() => {
+            this.requestParam.name = "copybarfeedremain";
+            this.requestParam.parammaps = {};
+            this.requestParam.parammaps.pastureid =
+              this.selectList[0].pastureid;
+            this.requestParam.parammaps.id = this.selectList[0].id;
+            PostDataByName(this.requestParam).then((response) => {
+              if (response.msg === "fail") {
+                const ftid = new RegExp("key 'ftid'");
+                if (ftid.test(response.data)) {
+                  this.$notify({
+                    type: "warning",
+                    message: "该栏舍该班次收集今日剩料量已存在,不可重复生成",
+                    duration: 2000,
+                  });
+                  return;
+                }
+                this.$notify({
+                  title: "保存失败",
+                  message: response.data,
+                  type: "warning",
+                  duration: 2000,
+                });
+              } else {
+                this.$notify({
+                  title: "成功",
+                  message: "保存成功",
+                  type: "success",
+                  duration: 2000,
+                });
+                this.getList();
+              }
+            });
+          })
+          .catch(() => {
+            this.$message({ type: "info", message: "已取消复制" });
+          });
+      } else {
+        this.$message({
+          type: "error",
+          message: "请选择一条栏舍剩料记录",
+          duration: 2000,
+        });
+      }
+    },
+    // 导出
+    handleExport(item) {
+      if (item == 1) {
+        console.log("点击了导出模板");
+        console.log("点击了导出模板");
+        const requestParam = this.requestParam;
+        const url = Cookies.get("url") + "authdata/barfeedremain/excel"; // 请求下载文件的地址
+        console.log(url);
+        axios({
+          method: "POST",
+          url: url,
+          data: requestParam,
+          headers: { token: getToken(), optname: "insertcustomdoc" },
+          responseType: "blob",
+        }).then((res) => {
+          if (!res) return;
+          this.percentage = 99;
+          setTimeout(() => {
+            this.isPercentage = false;
+          }, 2000);
+          const blob = new Blob([res.data], {
+            type: "application/octet-stream;charset=utf-8",
+          });
+          const url = window.URL.createObjectURL(blob);
+          const aLink = document.createElement("a");
+          aLink.style.display = "none";
+          aLink.href = url;
+          const docname = "栏舍剩料记录导入模板.xlsx";
+          aLink.setAttribute("download", docname); // 下载的文件
+          document.body.appendChild(aLink);
+          aLink.click();
+          document.body.removeChild(aLink);
+          window.URL.revokeObjectURL(url);
+        });
+      } else {
+        console.log("点击了导出数据", item, this.record);
+        if (this.record == "0") {
+          this.download.getdataListParm.name = "getBarfeedremainList";
+        } else {
+          this.download.getdataListParm.name = "getRemainplanrecord";
+        }
+        this.download.getdataListParm.parammaps =
+          this.table.getdataListParm.parammaps;
+        if (
+          this.download.getdataListParm.parammaps.inputDatetime !== "" &&
+          this.download.getdataListParm.parammaps.inputDatetime !== null
+        ) {
+          this.download.getdataListParm.parammaps.startdate = parseTime(
+            this.download.getdataListParm.parammaps.inputDatetime[0],
+            "{y}-{m}-{d}"
+          );
+          this.download.getdataListParm.parammaps.enddate = parseTime(
+            this.download.getdataListParm.parammaps.inputDatetime[1],
+            "{y}-{m}-{d}"
+          );
+        } else {
+          this.download.getdataListParm.parammaps.inputDatetime = "";
+          this.download.getdataListParm.parammaps.startdate = "";
+          this.download.getdataListParm.parammaps.enddate = "";
+        }
+        GetDataByName(this.download.getdataListParm).then((response) => {
+          if (response.data.list !== null) {
+            this.download.list = response.data.list;
+          } else {
+            this.download.list = [];
+          }
+          if (item == 2) {
+            var excelDatas1 = [
+              {
+                tHeader: [
+                  "栏舍名称",
+                  "配方名称",
+                  "原剩料所属时间",
+                  "剩料量(kg)",
+                  "班次(收集)",
+                  "收集时间",
+                  "操作人",
+                ],
+                filterVal: [
+                  "ftname",
+                  "ftname",
+                  "date",
+                  "weight",
+                  "timesstr",
+                  "operatetime",
+                  "emp",
+                ],
+                tableDatas: this.download.list,
+                sheetName: "Sheet1",
+              },
+            ];
+            json2excel(excelDatas1, "栏舍剩料记录-手动记录", true, "xlsx");
+          } else {
+            var excelDatas2 = [
+              {
+                tHeader: [
+                  "TMR设备编号",
+                  "TMR设备名称",
+                  "TMR设备类型",
+                  "栏舍名称",
+                  "收集时间",
+                  "剩料重量(kg)",
+                  "开始重量(kg)",
+                  "结束重量(kg)",
+                  "驾驶员",
+                ],
+                filterVal: [
+                  "eqcode",
+                  "eqname",
+                  "tclassname",
+                  "ftname",
+                  "createtime",
+                  "weight",
+                  "beginweight",
+                  "endweight",
+                  "driver",
+                ],
+                tableDatas: this.download.list,
+                sheetName: "Sheet1",
+              },
+            ];
+            json2excel(
+              excelDatas2,
+              "栏舍剩料记录-TMR设备自动记录",
+              true,
+              "xlsx"
+            );
+          }
+        });
+      }
+    },
+
+    beforeImport(file) {
+      const isLt2M = file.size / 1024 / 1024 < 2;
+      if (!isLt2M) {
+        this.$message.error("上传文件大小不能超过 2MB!");
+      }
+      return isLt2M;
+    },
+    handleImportSuccess(res, file) {
+      this.getList();
+      if (res.msg === "ok") {
+        this.$message({
+          title: "成功",
+          message: "导入成功:" + res.data.success + "条!",
+          type: "success",
+          duration: 2000,
+        });
+        if (res.data.err_count > 0) {
+          this.$notify({
+            title: "失败",
+            message: "导入失败:" + res.data.err_count + "条!",
+            type: "danger",
+            duration: 2000,
+          });
+          import("@/vendor/Export2Excel").then((excel) => {
+            const list1 = res.data.result;
+            const tHeader = [
+              "栏舍名称",
+              "配方名称",
+              "原剩料所属时间",
+              "剩料量(kg)",
+              "干物质",
+              "班次(收集)",
+              "收集时间",
+              "操作人",
+              "错误信息",
+            ];
+            const filterVal = [
+              "栏舍名称",
+              "配方名称",
+              "原剩料所属时间",
+              "剩料量(kg)",
+              "干物质",
+              "班次(收集)",
+              "收集时间",
+              "操作人",
+              "error_msg",
+            ];
+            const data1 = this.formatJson(filterVal, list1);
+            excel.export_json_to_excel({
+              header: tHeader,
+              data: data1,
+              filename: "栏舍剩料记录导入报错信息",
+              autoWidth: true,
+              bookType: "xlsx",
+            });
+          });
+        }
+      } else {
+        this.$notify({
+          title: "失败",
+          message: "上传失败",
+          type: "danger",
+          duration: 2000,
+        });
+      }
+    },
+    formatJson(filterVal, jsonData) {
+      return jsonData.map((v) =>
+        filterVal.map((j) => {
+          if (j === "timestamp") {
+            return parseTime(v[j]);
+          } else {
+            return v[j];
+          }
+        })
+      );
+    },
+    handleDataUpload() {
+      let a = Cookies.get("url");
+      let b = a.search(8081);
+      let c = a.substring(0, a.search(8081)) + "8082";
+      let d = a.substring(0, a.lastIndexOf("/"));
+      console.log(d);
+      let url = "";
+      if (b == -1) {
+        url = d + ":8082";
+      } else {
+        url = c;
+      }
+      console.log(url, "url");
+      let _url = url + "/authdata/surplus/push";
+      let data = {
+        date: parseTime(new Date(), "{y}-{m}-{d}"),
+        pastureId: Cookies.get("pastureid"),
+      };
+      console.log(_url, "_url");
+      postJson2(_url, data).then((response) => {
+        if (response.msg == "ok") {
+          this.$notify({
+            title: "",
+            message: response.data,
+            type: "success",
+            duration: 2000,
+          });
+        } else {
+          this.$notify({
+            title: "上传失败",
+            message: response.data,
+            type: "warning",
+            duration: 2000,
+          });
+        }
+      });
+    },
+  },
+};
+</script>

+ 144 - 161
src/views/statisticalAnalysis/pushingplan/index.vue

@@ -1,4 +1,4 @@
- <template>
+<template>
   <div class="app-container">
     <div class="search">
       <el-date-picker
@@ -153,45 +153,29 @@
         </div>
       </template>
       <!-- <div style="margin-bottom: 20px;background-image: url('http://niu305.cn:8091/uploads/image/headphoto1.png');background-position: top right;"> -->
-        <div>
-          <h3>推料计划详情</h3>
-          <div class="run-box-rg">
-            <div>
-              <span>推料车:</span>{{runDate?.tname || '暂无'}}
-            </div>
-            <div>
-              <span>备注:</span>{{runDate?.remark || '暂无'}}
-            </div>
-            <div>
-              <span>计划开始时间:</span>{{runDate?.plandate || '暂无'}}
-            </div>
-            <div>
-              <span>实际开始时间:</span>{{runDate?.startdate || '暂无'}}
-            </div>
-            <div>
-              <span>偏差分钟数:</span>{{runDate?.deviation || '暂无'}}
-            </div>
-            <div>
-              <span>实际结束时间:</span>{{runDate?.enddate || '暂无'}}
-            </div>
-            <div>
-              <span>实际时长:</span>{{runDate?.dates || '暂无'}} 分钟
-            </div>
+      <div>
+        <h3>推料计划详情</h3>
+        <div class="run-box-rg">
+          <div><span>推料车:</span>{{ runDate.tname }}</div>
+          <div><span>备注:</span>{{ runDate.remark }}</div>
+          <div><span>计划开始时间:</span>{{ runDate.plandate }}</div>
+          <div><span>实际开始时间:</span>{{ runDate.startdate }}</div>
+          <div><span>偏差分钟数:</span>{{ runDate.deviation }}</div>
+          <div><span>实际结束时间:</span>{{ runDate.enddate }}</div>
+          <div><span>实际时长:</span>{{ runDate.dates }} 分钟</div>
 
-            <div>
-              <span>推料栏舍顺序:</span>{{ runDate?.bname || '暂无' }}
-            </div>
-          </div>
-          <div ref="map" class="map-container"></div>
+          <div><span>推料栏舍顺序:</span>{{ runDate.bname }}</div>
         </div>
+        <div ref="map" class="map-container"></div>
+      </div>
 
       <!-- </div> -->
       <div slot="footer" class="dialog-footer">
         <el-button
           class="cancelClose1"
           @click="
-            run.dialogFormVisible = false
-            getList()
+            run.dialogFormVisible = false;
+            getList();
           "
           >关闭</el-button
         >
@@ -206,40 +190,40 @@ import {
   postJson,
   getJson,
   formatNum,
-  checkButtons
-} from '@/api/common'
-import { parseTime } from '@/utils/index.js'
-import { MessageBox } from 'element-ui'
-import Cookies from 'js-cookie'
-import axios from 'axios'
-import { getToken } from '@/utils/auth'
-import { createApp } from 'vue'
-import AMapLoader from '@amap/amap-jsapi-loader'
+  checkButtons,
+} from "@/api/common";
+import { parseTime } from "@/utils/index.js";
+import { MessageBox } from "element-ui";
+import Cookies from "js-cookie";
+import axios from "axios";
+import { getToken } from "@/utils/auth";
+import { createApp } from "vue";
+import AMapLoader from "@amap/amap-jsapi-loader";
 // import vLoUrl from '../../../assets/images/tet.png'
-import vLoUrl from '../../../assets/images/guiji2.jpeg'
+import vLoUrl from "../../../assets/images/guiji2.jpeg";
 window._AMapSecurityConfig = {
-  securityJsCode: '0133db0118e961029dc45a2d5039cbb1' // '「申请的安全密钥」',
-}
+  securityJsCode: "0133db0118e961029dc45a2d5039cbb1", // '「申请的安全密钥」',
+};
 export default {
-  name: 'Pushingplan',
+  name: "Pushingplan",
   data() {
     return {
-      runDate:{},
+      runDate: {},
       currentPage: 1,
       table: {
         offset: 1,
-        name: 'getTmrEqipmemtList',
+        name: "getTmrEqipmemtList",
         pagecount: 50,
         parammaps: {
           // pastureid: Cookies.get('pastureid'),
-          tname: '',
-          startdate: '',
-          enddate: '',
-          inputDatetime: null
+          tname: "",
+          startdate: "",
+          enddate: "",
+          inputDatetime: null,
           // startdate: parseTime(new Date(), '{y}-{m}-{d}'),
           // enddate: parseTime(new Date(), '{y}-{m}-{d}'),
           // inputDatetime: [new Date(), new Date()],
-        }
+        },
       },
       tableKey: 0,
       list: [],
@@ -248,14 +232,14 @@ export default {
 
       run: {
         dialogFormVisible: false,
-        dialogStatus: '',
-        temp: {}
+        dialogStatus: "",
+        temp: {},
       },
       dialogFull: false,
       isRoleEdit: [],
       isokDisable: false,
-      rowStyle: { maxHeight: 30 + 'px', height: 30 + 'px' },
-      cellStyle: { padding: 0 + 'px' },
+      rowStyle: { maxHeight: 30 + "px", height: 30 + "px" },
+      cellStyle: { padding: 0 + "px" },
       myHeight: document.documentElement.clientHeight - 85 - 150,
       map: null,
       path: [],
@@ -269,126 +253,126 @@ export default {
       latitude: 40.87873, // 实景图所在位置的纬度
       longitude: 113.216553, // 实景图所在位置的经度
       zoom: 17, // 实景
-      apiKey: 'fb6a0e88dbad4931d96a121bcf7c4442',
-      vLoUrl
-    }
+      apiKey: "fb6a0e88dbad4931d96a121bcf7c4442",
+      vLoUrl,
+    };
   },
 
   mounted() {
     // this.initMap();
   },
   created() {
-    this.getButtons()
-    this.getList()
-    var totalTimeInMinutes = this.timeStringToMinutes('12:20:27');
-     console.log(totalTimeInMinutes);
+    this.getButtons();
+    this.getList();
+    var totalTimeInMinutes = this.timeStringToMinutes("12:20:27");
+    console.log(totalTimeInMinutes);
   },
 
   methods: {
     // 点击查看的时候获取 推车的数据并去获取推料的原计划
     timeStringToMinutes(timeString) {
-    var timeParts = timeString.split(':');
-    var hours = parseInt(timeParts[0]);
-    var minutes = parseInt(timeParts[1]);
-    var seconds = parseInt(timeParts[2]);
-    return (hours * 60 + minutes + seconds / 60).toFixed(2) ;
-},
+      var timeParts = timeString.split(":");
+      var hours = parseInt(timeParts[0]);
+      var minutes = parseInt(timeParts[1]);
+      var seconds = parseInt(timeParts[2]);
+      return (hours * 60 + minutes + seconds / 60).toFixed(2);
+    },
     // 分页
     handleSizeChange(val) {
-      console.log(`每页 ${val} 条`)
-      this.table.pagecount = val
-      this.table.offset = 1
-      this.currentPage = 1
-      this.getList()
+      console.log(`每页 ${val} 条`);
+      this.table.pagecount = val;
+      this.table.offset = 1;
+      this.currentPage = 1;
+      this.getList();
     },
     handleCurrentChange(val) {
-      console.log(`当前页: ${val}`)
-      this.currentPage = val
-      this.table.offset = val
-      this.getList()
+      console.log(`当前页: ${val}`);
+      this.currentPage = val;
+      this.table.offset = val;
+      this.getList();
     },
     getButtons() {
-      const Edit = 'Pushingplan'
+      const Edit = "Pushingplan";
       const isRoleEdit = checkButtons(
-        JSON.parse(sessionStorage.getItem('buttons')),
+        JSON.parse(sessionStorage.getItem("buttons")),
         Edit
-      )
-      this.isRoleEdit = isRoleEdit
+      );
+      this.isRoleEdit = isRoleEdit;
     },
 
     getList() {
-      this.listLoading = true
-      let url = '/authdata/GetDataByName'
-      let data = this.table
+      this.listLoading = true;
+      let url = "/authdata/GetDataByName";
+      let data = this.table;
 
       if (this.table.parammaps.inputDatetime !== null) {
         data.parammaps.startdate = parseTime(
           this.table.parammaps.inputDatetime[0],
-          '{y}-{m}-{d}'
-        )
+          "{y}-{m}-{d}"
+        );
         data.parammaps.enddate = parseTime(
           this.table.parammaps.inputDatetime[1],
-          '{y}-{m}-{d}'
-        )
+          "{y}-{m}-{d}"
+        );
       } else {
-        data.parammaps.startdate = ''
-        data.parammaps.enddate = ''
+        data.parammaps.startdate = "";
+        data.parammaps.enddate = "";
       }
       postJson(url, data).then((response) => {
         if (response.data.list !== null) {
-          let arr = JSON.parse(JSON.stringify(response.data.list))
-          arr.forEach((item)=>{
-             item.dates = this.timeStringToMinutes(item.date) || item.date;
-             item.deviation = this.timeStringToMinutes(item.deviation) || item.deviation;
-          })
-          this.list = arr
-
+          let arr = JSON.parse(JSON.stringify(response.data.list));
+          arr.forEach((item) => {
+            item.dates = this.timeStringToMinutes(item.date) || item.date;
+            item.deviation =
+              this.timeStringToMinutes(item.deviation) || item.deviation;
+          });
+          this.list = arr;
         } else {
-          this.list = []
+          this.list = [];
         }
-        this.total = response.data.total
+        this.total = response.data.total;
         setTimeout(() => {
-          this.listLoading = false
-        }, 100)
-      })
+          this.listLoading = false;
+        }, 100);
+      });
     },
 
     form_search() {
-      console.log('点击了查询')
-      this.getList()
+      console.log("点击了查询");
+      this.getList();
     },
     handleRefresh() {
-      this.table.parammaps.tname = ''
-      this.table.parammaps.inputDatetime = null
-      this.getList()
+      this.table.parammaps.tname = "";
+      this.table.parammaps.inputDatetime = null;
+      this.getList();
     },
     handleRunning_trajectory(row) {
       this.runDate = row;
-      console.log('点击了运行轨迹',this.runDate );
+      console.log("点击了运行轨迹", this.runDate);
 
-      this.run.dialogStatus = 'run'
-      this.run.dialogFormVisible = true
-      this.run.temp = Object.assign({}, row)
-      this.getRuningList()
+      this.run.dialogStatus = "run";
+      this.run.dialogFormVisible = true;
+      this.run.temp = Object.assign({}, row);
+      this.getRuningList();
     },
 
     getRuningList() {
-      let url = '/authdata/equipment/muster'
-      let data = '?id=' + this.run.temp.id
+      let url = "/authdata/equipment/muster";
+      let data = "?id=" + this.run.temp.id;
       getJson(url, data).then((response) => {
         // path
         // console.log('table数据', response.data.list)
         if (response.data !== null) {
-          let arrList = []
+          let arrList = [];
           for (let i = 0; i < response.data.length; i++) {
-            let list = []
+            let list = [];
             // let str= `${parseFloat(response.data[i].N)} ${parseFloat(response.data[i].A)} `
             list.push(
               parseFloat(response.data[i].N),
               parseFloat(response.data[i].A)
-            )
+            );
 
-            arrList.push(list)
+            arrList.push(list);
             ////////
             // let testArr =[];
             // testArr.push(parseFloat(response.data[i].A),parseFloat(response.data[i].N));
@@ -396,7 +380,7 @@ export default {
             //////
           }
 
-          this.path = arrList //真实数据
+          this.path = arrList; //真实数据
           //  console.log(JSON.stringify(arrList),'arrList')
           //  console.log(arrList.join('\n'),'9999999');
           // 测试数据
@@ -426,19 +410,19 @@ export default {
           // this.latitude = this.path[0][1] // 实景图所在位置的纬度
           // zoom: 15, // 实景
         } else {
-          this.path = []
+          this.path = [];
         }
-        this.initMap()
-      })
+        this.initMap();
+      });
     },
     async initMap() {
       await AMapLoader.load({
-        key: 'fb6a0e88dbad4931d96a121bcf7c4442', // 替换为你的高德地图API Key
-        version: '2.0',
-        plugins: []
-      }).then(() => {})
+        key: "fb6a0e88dbad4931d96a121bcf7c4442", // 替换为你的高德地图API Key
+        version: "2.0",
+        plugins: [],
+      }).then(() => {});
       // 后续牧场栏舍图
-      var backgroundImageUrl = this.vLoUrl // 示例图片链接
+      var backgroundImageUrl = this.vLoUrl; // 示例图片链接
       var imageLayer = new AMap.ImageLayer({
         url: backgroundImageUrl,
         bounds: new AMap.Bounds(
@@ -449,74 +433,73 @@ export default {
           [113.21478078, 40.87649131], //左下角;
           [113.23067741, 40.88588863] // 右上角
         ), //图片范围大小的经纬度,传入西南和东北的经纬度坐标
-        zooms: [15, 20]
-      })
+        zooms: [15, 20],
+      });
       this.map = new window.AMap.Map(this.$refs.map, {
         zoom: 18,
         // zIndex:2,
         center: [113.21549472999999, 40.879621060000005],
-        layers: [AMap.createDefaultLayer(), imageLayer]
-      })
+        layers: [AMap.createDefaultLayer(), imageLayer],
+      });
       const startMarker = new window.AMap.Marker({
         position: this.path[this.path.length - 1], // 起始点位置
         map: this.map,
-        icon: 'https://webapi.amap.com/theme/v1.3/markers/n/start.png' // 起始点图标
-      })
+        icon: "https://webapi.amap.com/theme/v1.3/markers/n/start.png", // 起始点图标
+      });
       const endMarker = new window.AMap.Marker({
         position: this.path[0],
         map: this.map,
-        icon: 'https://webapi.amap.com/theme/v1.3/markers/n/end.png' // 终点图标
-      })
+        icon: "https://webapi.amap.com/theme/v1.3/markers/n/end.png", // 终点图标
+      });
 
-      this.drawPath()
+      this.drawPath();
     },
     drawPath() {
       const polyline = new window.AMap.Polyline({
         path: this.path,
-        strokeStyle: 'red',
-        strokeColor: '#F9423A',
+        strokeStyle: "red",
+        strokeColor: "#F9423A",
         strokeOpacity: 1,
         strokeWeight: 3,
         map: this.map,
-        dirArrowStyle: true
-      })
+        dirArrowStyle: true,
+      });
 
       // 调整地图视图以适应轨迹
 
-      this.map.setFitView()
-      this.map.setZoom(18)
-    }
-  }
-}
+      this.map.setFitView();
+      this.map.setZoom(18);
+    },
+  },
+};
 </script>
 <style lang="scss" scoped>
-.run-box{
+.run-box {
   height: 600px;
 }
-.run-box-rg{
+.run-box-rg {
   display: flex;
-  justify-content:left;
+  justify-content: left;
   flex-direction: row;
   flex-wrap: wrap;
-  padding:  0px 20px;
-  font-size:16px;
-  border-bottom:1px dotted #eee;
+  padding: 0px 20px;
+  font-size: 16px;
+  border-bottom: 1px dotted #eee;
 }
-.run-box-rg div{
-  margin-bottom:10px;
-  margin-right:15px;
+.run-box-rg div {
+  margin-bottom: 10px;
+  margin-right: 15px;
+}
+.run-box-rg div > span {
+  font-size: 16px !important;
+  font-weight: 600;
 }
-.run-box-rg div>span{
-    font-size: 16px!important;
-    font-weight: 600;
-
-  }
 
 .map-container {
   height: 600px;
   // width: 840px;
   // border-right:1px dotted #eee;
-  padding:0 10px;
+  padding: 0 10px;
 }
 .search {
   clear: both;