ソースを参照

Merge branch 'feature-1021' into feature/shengmu

Shan9312 1 年間 前
コミット
9da0dd6886

BIN
dist-tmr-20240802-发版本.zip


BIN
dist-tmr-20240826.zip


BIN
dist-tmr-圣牧-20240809.zip


BIN
dist-tmr-正式-20241121.zip


BIN
dist-tmr-测试-1107.zip


BIN
dist-tmr-测试-20241030.zip


+ 17 - 0
src/api/common.js

@@ -481,3 +481,20 @@ export function whichWeek(year) {
         data
       })
     }
+
+
+export function editWeightHL(data) {
+  return request({
+    url: '/authdata/planexec/edit',
+    method: 'POST',
+    data
+  })
+}
+
+export function editWeightSL(data) {
+  return request({
+    url: '/authdata/plan2/edit',
+    method: 'POST',
+    data
+  })
+}

BIN
src/assets/dot.jpeg


+ 6 - 6
src/router/index.js

@@ -67,14 +67,14 @@ export const constantRoutes = [
     }]
   },
   // {
-  //   path: '/leftoverManagement',
+  //   path: '/drawDot',
   //   component: Layout,
-  //   redirect: '/leftoverManagement',
+  //   redirect: '/drawDot',
   //   children: [{
-  //     path: 'leftoverManagement',
-  //     name: 'leftoverManagement',
-  //     component: () => import('@/views/leftoverManagement/index.vue'),
-  //     meta: { title: '剩料配置',icon: '撒料计划'}
+  //     path: 'drawDot',
+  //     name: 'drawDot',
+  //     component: () => import('@/views/drawDot/index.vue'),
+  //     meta: { title: '画点图',icon: '撒料计划'}
   //   }]
   // },
 ]

+ 271 - 0
src/views/drawDot/index.vue

@@ -0,0 +1,271 @@
+<template>
+    <div id="app">
+
+      <!-- 图片区域 -->
+    <div class="box">
+        <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"
+            :key="`shape-${shape.type}-point-${index}`"
+            :style="getPointStyle(point)"
+            class="point-marker"
+          ></div>
+          <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"/>
+        </template>
+        </div>
+
+      <!--  -->
+      <div>
+        <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-form-item>
+           <!-- 卧床 -->
+          <el-form-item
+            label="卧床(1):"
+            required
+             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>
+          </el-form-item>
+          <el-form-item
+            label="卧床(2):"
+            required
+            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>
+          </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>
+            </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>
+            </div>
+          </el-form-item>
+
+          <el-form-item>
+            <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(' ');
+      },
+  // 重置
+  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>
+  

+ 25 - 10
src/views/formulationPlan/dailyExecutionPlan/index.vue

@@ -57,6 +57,7 @@
         <el-button v-if="isRoleEdit" class="success" icon="el-icon-circle-check" @click="handleQuickcompletion">快速完成</el-button>
         <el-button v-if="isRoleEdit && ispalyUdYyn" class="success" icon="el-icon-plus" @click="handleGetUd4">云养牛搅拌数据上传</el-button>
         <el-button v-if="isRoleEdit && ispalyUdYyn" class="success" icon="el-icon-plus" @click="handleGetUd5">云养牛撒料上传</el-button>
+        <!--  v-if="isRoleEdit && ispalyUdYyn" -->
       </div>
       <!-- 日执行计划 -->
       <div class="table">
@@ -883,15 +884,15 @@
               <el-form-item label="时间:" prop="date">
                 <el-date-picker v-if="sapUpload.dialogStatus != 'udload5' &&  sapUpload.dialogStatus != 'udload4'"  v-model="sapUpload.temp.date" :clearable="false" class="filter-item" type="date" />
                 <el-date-picker v-else  start-placeholder="开始日期"
-                                        end-placeholder="结束日期" 
+                                        end-placeholder="结束日期"
                                         format="yyyy-MM-dd"
                                         value-format="yyyy-MM-dd"
                                         v-model="dateRange"
-                                        :clearable="false" 
+                                        :clearable="false"
                                         :picker-options="pickerOptionsT"
                                         @change="handleDateChange"
                                         class="filter-item" type="daterange" />
-                
+
               </el-form-item>
             </el-col>
           </el-row>
@@ -948,7 +949,7 @@ export default {
 	      disabledDate: this.disabledDateT
       },
       pickDateT:'',
-  
+
       myheight: document.documentElement.clientHeight - 280,
       // myheight: 500,
       enlargeHeight: document.documentElement.clientHeight - 85 - 165 + 50,
@@ -1303,13 +1304,27 @@ export default {
       oneMonthAgo.setDate(today.getDate()  - 15)
 
       console.log( today.getTime(),oneMonthAgo.getTime(),'选择日期----2')
-      return time.getTime() > today.getTime() || time.getTime() < oneMonthAgo.getTime();
-   
+      // return time.getTime() > today.getTime() || time.getTime() < oneMonthAgo.getTime();
+      return time.getTime() > today.getTime()
+
+    },
+    checkDateDifference(date1, date2) {
+      const dateObj1 = new Date(date1);
+      const dateObj2 = new Date(date2);
+      const differenceInMs = Math.abs(dateObj2 - dateObj1);
+      const differenceInDays = differenceInMs / (1000 * 60 * 60 * 24);
+
+      if (differenceInDays > 7) {
+          this.$message.warning('日期范围相隔大于7天,请重新选择!');
+        return false;
+      } else {
+        this.dateRange = [date1, date2]
+      }
     },
     handleDateChange(value){
       console.log(value,'arr')
       if (value.length === 2) {
-        this.dateRange = [value[0], value[1]]
+        this.checkDateDifference(value[0], value[1])
       }
     },
     udData5() {
@@ -1332,7 +1347,7 @@ export default {
     const requests = [];
 
     for (let d = start; d <= end; d.setDate(d.getDate() + 1)) {
-      const dateStr = `${d.getFullYear()}-${d.getMonth() + 1}-${d.getDate()}`;
+      const dateStr = `${d.getFullYear()}-${(d.getMonth() + 1).toString().padStart(2, '0')}-${(d.getDate()).toString().padStart(2, '0')}`;
       console.log(dateStr,'dateStr');
       let datas = {
             pastureId: Cookies.get('pastureid'),
@@ -3710,12 +3725,12 @@ export default {
       this.sapUpload.dialogStatus = 'udload4'
       this.sapUpload.dialogFormVisible = true
     },
-   
+
     handleGetUd5() {
       this.sapUpload.dialogStatus = 'udload5'
       this.sapUpload.dialogFormVisible = true
     },
-   
+
     udData1() {
       this.$refs['sapUpload'].validate((valid) => {
         if (valid) {

+ 41 - 13
src/views/formulationPlan/dhedFormula/index.vue

@@ -273,12 +273,13 @@
       <div class="app-history">
         <div class="search">
           <el-date-picker v-model="history.getdataListParm.parammaps.date" type="date" placeholder="请选择历史记录时间" :clearable="false" style="width: 180px;" format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change="changeDate" />
-          <!-- <el-select v-model="history.getdataListParm.parammaps.barid" clearable filterable placeholder="请选择栏舍" style="width: 180px;" class="filter-item">
-            <el-option v-for="item in barList" :key="item.id" :label="item.bname" :value="item.id" />
+          <el-select v-model="history.getdataListParm.parammaps.barName" clearable filterable placeholder="请选择栏舍" style="width: 180px;" class="filter-item">
+            <el-option v-for="item in barList" :key="item.id" :label="item.bname" :value="item.bname" />
           </el-select>
-          <el-input v-model="history.getdataListParm.parammaps.tname" placeholder="请输入配方名称" style="width: 180px;" class="filter-item" />
-          <el-button class="successBorder" @click="handleHistorySearch">查询</el-button> -->
-          <!-- <el-button class="successBorder" @click="handleApplication">应用</el-button> -->
+          <!-- <el-input v-model="history.getdataListParm.parammaps.tname" placeholder="请输入配方名称" style="width: 180px;" class="filter-item" /> -->
+          <el-button class="successBorder" @click="handleHistorySearch">查询</el-button>
+          <el-button class="export" icon="el-icon-upload2"  @click="handleExport(3)">导出</el-button>
+
         </div>
         <div class="table">
           <u-table
@@ -1146,6 +1147,10 @@ export default {
   },
 
   methods: {
+    handleHistorySearch(){
+      this.table
+      this.getDateList()
+    },
     getButtons() {
       const Edit = 'DhedFormula'
       const isRoleEdit = checkButtons(JSON.parse(sessionStorage.getItem('buttons')), Edit)
@@ -1681,9 +1686,10 @@ export default {
     // ratio系数
     // ccountratio系数牛头数
     blurCcount(row) { // 实际牛头数
+       console.log(row,'洗漱---')
       if (row.ftid !== '-1' && row.ftid !== '') {
-        row.Sfweight = this.recipeTemplateList.find(obj => obj.id == row.ftid).Sfweight
-        row.SfweightLock = this.recipeTemplateList.find(obj => obj.id == row.ftid).SfweightLock
+        row.Sfweight = this.recipeTemplateList.find(obj => obj.id == row.ftid)?.Sfweight || 0
+        row.SfweightLock = this.recipeTemplateList.find(obj => obj.id == row.ftid)?.SfweightLock || 0
       }
       if (row.w1 == '' || row.w1 == undefined || isNaN(row.w1)) { row.w1 = 0 }
       if (row.w2 == '' || row.w2 == undefined || isNaN(row.w2)) { row.w2 = 0 }
@@ -3182,7 +3188,22 @@ export default {
           ]
           json2excel(excelDatas, '栏舍配方导入模板', true, 'xlsx')
         })
-      } else {
+      } else if (item == 3){
+        GetDataByName(this.history.getdataDateParm).then(response => {
+        console.log('历史数据', this.history.list)
+        if (response.data.list !== null) {
+          var excelDatas = [
+              {
+                tHeader: ['栏舍名称','班次', '软件牛头数', '实际牛头数', '系数(%)', '系数头数', '配方模板', '班次比例', '班次重量',  '配方重量', '配方干物质', '饲喂干物质量','采样干物质量','日投喂量'],
+                filterVal: ['barname', 'times','softccount', 'ccount', 'ratio', 'ccountratio', 'ptname', 'tratio', 'weight', 'pweight', 'dryweight', 'swdryw', 'cydryw','sumweight'],
+                tableDatas: this.history.list,
+                sheetName: 'Sheet1'
+              }
+            ]
+          json2excel(excelDatas, '历史记录栏舍配方', true, 'xlsx')
+        }
+      })
+      }else {
         console.log('点击了导出数据')
         this.download.getdataListParm.parammaps = this.table.getdataListParm.parammaps
         GetDataByName(this.download.getdataListParm).then(response => {
@@ -3293,6 +3314,8 @@ export default {
           json2excel(excelDatas, '栏舍配方', true, 'xlsx')
         })
       }
+
+
     },
 
     beforeImport(file) {
@@ -3371,19 +3394,23 @@ export default {
       // row.Edit
     },
     focusData(row){
-      console.log(row,'row')
+      // console.log(row,'row')
       this.oldList.forEach((item,key)=>{
         if(row.id == item.id){
-          this.oldRowList = {...item}
+          this.oldRowList = { ...item }
+          // item = {...row}
         }
       })
-      console.log(this.oldRowList,'row')
+      // console.log(this.oldRowList,'row')
     },
     handle_batchEdit_save(){
+      console.log(this.oldList, 'oldList')
+      console.log(this.table.list, 'this.table.list')
       const arr = this.table.list.filter(item2 => {
-        console.log(item2,'item2')
-          return !this.oldList.some(item1 => item1.r1 === item2.r1 && item1.r2 === item2.r2 && item1.r3 === item2.r3 && item1.r4 === item2.r4 && item1.r5 === item2.r5 && item1.r6 === item2.r6);
+        // console.log(item2,'item2')
+          return !this.oldList.some(item1 => item1.ccount == item2.ccount && item1.r1 === item2.r1 && item1.r2 === item2.r2 && item1.r3 === item2.r3 && item1.r4 === item2.r4 && item1.r5 === item2.r5 && item1.r6 === item2.r6);
       });
+      console.log(arr,'arr')
       const barList = []
       arr.forEach((item)=>{
         let obj = {}
@@ -3400,6 +3427,7 @@ export default {
         obj.times6 = item.r6
         barList.push(obj)
       })
+      console.log(barList,'barList')
       const url = 'authdata/fpdetail/batch/edit'
       let data = {
         pastureId:Cookies.get('pastureid'),

+ 8 - 5
src/views/statisticalAnalysis/errorAnalysis/pasture/index.vue

@@ -845,10 +845,10 @@
       </el-tab-pane>
     </el-tabs>
     <!-- 导出 -->
-    <el-dialog :title="textMap[exportList.dialogStatus]" :visible.sync="exportList.dialogFormVisible" :close-on-click-modal="false" width="20%">
+    <el-dialog :title="textMap[exportList.dialogStatus]" :visible.sync="exportList.dialogFormVisible" :close-on-click-modal="false" width="40%">
     <div>
       <span>导出时间范围:</span>
-      <el-date-picker v-model="exportList.inputDatetime" :clearable="false" style="width: 230px;" class="inputDatetime filter-item" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions2" />
+      <el-date-picker v-model="exportList.inputDatetime" :clearable="false" style="width: 280px;" class="inputDatetime filter-item" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" :picker-options="pickerOptions2" />
     </div>
     <div slot="footer" class="dialog-footer" style="margin-bottom: 10px;">
       <el-button class="cancelClose" @click="exportList.dialogFormVisible = false">关闭</el-button>
@@ -1419,7 +1419,7 @@ export default {
               pastureid: Cookies.get('pastureid'),
               startTime: parseTime(new Date(), '{y}-{m}-{d}'),
               stopTime: parseTime(new Date(), '{y}-{m}-{d}'),
-              inputDatetime: [new Date(), new Date()],
+              inputDatetime:  [new Date(), new Date()],
               inputDate:null,
               fname: '',
               sort: '',
@@ -1811,7 +1811,7 @@ export default {
       cellStyle: { padding: 0 + 'px' },
       exportList:{
         dialogFormVisible:false,
-        inputDatetime: [new Date(), new Date()]
+        inputDatetime:  [new Date(), new Date()],
       },
       textMap: {
         exportList: '导出',
@@ -4732,6 +4732,8 @@ export default {
     handleExport3() {
       this.exportList.dialogFormVisible = true
       this.exportList.dialogStatus = 'exportList'
+      console.log(this.tab3.table.getdataListParm.parammaps.inputDatetime,'999')
+      this.exportList.inputDatetime = this.tab3.table.getdataListParm.parammaps.inputDatetime ||  [new Date(), new Date()]
       // var excelDatasTab3 = [
       //   {
       //     tHeader: ['日期', 'TMR名称', '车次', '班次', '配方名称', '栏舍', '理论重量', '实际重量', '误差值', '准确率', '开始时间', '结束时间', '跳转方式', '开始重量', '结束重量', '搅拌时间'],
@@ -4758,8 +4760,9 @@ export default {
       data.parammaps.buttontype = this.tab3.table.getdataListParm.parammaps.buttontype
       data.parammaps.templetname = this.tab3.table.getdataListParm.parammaps.templetname
       data.parammaps.isuse = this.tab3.table.getdataListParm.parammaps.isuse
+      data.parammaps.fname = this.tab3.table.getdataListParm.parammaps.fname
       postJson(url,data).then(response => {
-        console.log('混料统计table数据', response.data.list)
+        console.log('hss-撒料', response.data.list)
         var exportList = []
         if (response.data.list !== null) {
           exportList = response.data.list

+ 262 - 259
src/views/statisticalAnalysis/inventoryManagement/pasture/index.vue

@@ -57,9 +57,10 @@
             <el-option v-for="item in statisticalTypeList2" :key="item.id" :label="item.name" :value="item.id" />
           </el-select>
           <el-checkbox v-model="tab2.table.getdataListParm.checked" :true-label="1" :false-label="0" style="margin-right:10px;" @change="changeChecked">误差</el-checkbox>
-          <el-select v-model="tab2.table.getdataListParm.parammaps.ftType" placeholder="是否拆分小料" class="filter-item" style="width: 130px;">
-            <el-option v-for="item in isSplitsmallmaterialsList" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
+
+          <el-select v-model="tab2.table.getdataListParm.parammaps.ftType" placeholder="是否拆分小料" class="filter-item" style="width: 130px;">
+            <el-option v-for="item in isSplitsmallmaterialsList" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
           <el-input v-if="tab2.isRadio1" v-model="tab2.table.getdataListParm.parammaps.fname" class="filter-item filter-item1" style="width: 200px;" placeholder="牲畜类别" />
           <el-input v-if="tab2.isRadio2" v-model="tab2.table.getdataListParm.parammaps.fname" class="filter-item filter-item1" style="width: 200px;" placeholder="栏舍名称" />
           <el-input v-if="tab2.isRadio3" v-model="tab2.table.getdataListParm.parammaps.fname" class="filter-item filter-item1" style="width: 200px;" placeholder="日期" />
@@ -68,27 +69,28 @@
           <el-input v-if="tab2.isRadio6" v-model="tab2.table.getdataListParm.parammaps.fname" class="filter-item filter-item1" style="width: 200px;" placeholder="车次" />
           <el-select v-model="tab2.table.getdataListParm.parammaps.typea" clearable placeholder="列表显示" class="filter-item" style="width: 120px;">
             <el-option v-for="item in displayList" :key="item.id" :label="item.name" :value="item.id" />
-          </el-select>
-          <el-select v-model="tab2.table.getdataListParm.parammaps.times" clearable filterable placeholder="班次" class="filter-item" style="width: 120px;">
-            <el-option v-for="item in frequencyList" :key="item.id" :label="item.name" :value="item.id" />
           </el-select>
-          <el-button class="successBorder" @click="form_search('second')">查询</el-button>
+          <el-select v-model="tab2.table.getdataListParm.parammaps.times" clearable filterable placeholder="班次" class="filter-item" style="width: 120px;">
+            <el-option v-for="item in frequencyList" :key="item.id" :label="item.name" :value="item.id" />
+          </el-select>
+          <el-checkbox v-model="tab2.table.getdataListParm.premix" :true-label="1" :false-label="0" style="margin-right:10px;" @change="changeChecked">去除预混配方</el-checkbox>
+          <el-button class="successBorder" style="margin-top: 10px;"  @click="form_search('second')">查询</el-button>
           <el-button class="export" style="float: right;margin-right: 5px;margin-top:10px;" icon="el-icon-upload2" @click="handleExport('tab2')">导出</el-button>
           <el-button class="export" style="float: right;margin-right: 5px;margin-top:10px;" icon="el-icon-upload2" @click="handlesWitch()">切换展示</el-button>
-        </div>
-
+        </div>
+
         <div v-if="isTable1">
-        <div v-if="tab2.table.tableConfig.length > 8">
-          <u-table v-if="isDispayTable2" ref="plTable2" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
-            <!-- 第一个表头 -->
-            <u-table-column v-for="(header1, index1) in tab2.table.tableConfig" :key="'header1-' + index1" :label="header1.label" align="center" :fixed="index1==0" :show-overflow-tooltip="header1.showOverflow" >
-              <!-- 第二个表头 -->
-              <u-table-column v-for="(header2, index2) in header1.children" :key="'header2-' + index2" :label="header2.label" align="center" :fixed="index2==0" :show-overflow-tooltip="header2.showOverflow">
-                <!-- 第三个表头 -->
-                <u-table-column v-for="(header3, index3) in header2.children" :key="'header3-' + index3" :label="header3.label" :prop="header3.prop" align="center">
-                </u-table-column>
-              </u-table-column>
-            </u-table-column>
+        <div v-if="tab2.table.tableConfig.length > 8">
+          <u-table v-if="isDispayTable2" ref="plTable2" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
+            <!-- 第一个表头 -->
+            <u-table-column v-for="(header1, index1) in tab2.table.tableConfig" :key="'header1-' + index1" :label="header1.label" align="center" :fixed="index1==0" :show-overflow-tooltip="header1.showOverflow" >
+              <!-- 第二个表头 -->
+              <u-table-column v-for="(header2, index2) in header1.children" :key="'header2-' + index2" :label="header2.label" align="center" :fixed="index2==0" :show-overflow-tooltip="header2.showOverflow">
+                <!-- 第三个表头 -->
+                <u-table-column v-for="(header3, index3) in header2.children" :key="'header3-' + index3" :label="header3.label" :prop="header3.prop" align="center">
+                </u-table-column>
+              </u-table-column>
+            </u-table-column>
           </u-table>
           <!-- <u-table v-if="isDispayTable2" ref="plTable2" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
             <u-table-column v-for="(item,index) in tab2.table.tableConfig" :key="index" :label="item.label" :show-overflow-tooltip="item.showOverflow"  :prop="item.prop" align="center" :fixed="index==0">
@@ -98,17 +100,17 @@
             </u-table-column>
           </u-table> -->
         </div>
-        <div v-else>
-          <u-table v-if="isDispayTable2" ref="plTable2" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
-            <!-- 第一个表头 -->
-            <u-table-column v-for="(header1, index1) in tab2.table.tableConfig" :key="'header1-' + index1" :label="header1.label" align="center" :fixed="index1==0" :show-overflow-tooltip="header1.showOverflow">
-              <!-- 第二个表头 -->
-              <u-table-column v-for="(header2, index2) in header1.children" :key="'header2-' + index2" :label="header2.label" align="center" :fixed="index2==0" :show-overflow-tooltip="header2.showOverflow">
-                <!-- 第三个表头 -->
-                <u-table-column v-for="(header3, index3) in header2.children" :key="'header3-' + index3" :label="header3.label" :prop="header3.prop" align="center">
-                </u-table-column>
-              </u-table-column>
-            </u-table-column>
+        <div v-else>
+          <u-table v-if="isDispayTable2" ref="plTable2" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
+            <!-- 第一个表头 -->
+            <u-table-column v-for="(header1, index1) in tab2.table.tableConfig" :key="'header1-' + index1" :label="header1.label" align="center" :fixed="index1==0" :show-overflow-tooltip="header1.showOverflow">
+              <!-- 第二个表头 -->
+              <u-table-column v-for="(header2, index2) in header1.children" :key="'header2-' + index2" :label="header2.label" align="center" :fixed="index2==0" :show-overflow-tooltip="header2.showOverflow">
+                <!-- 第三个表头 -->
+                <u-table-column v-for="(header3, index3) in header2.children" :key="'header3-' + index3" :label="header3.label" :prop="header3.prop" align="center">
+                </u-table-column>
+              </u-table-column>
+            </u-table-column>
           </u-table>
           <!-- <u-table v-if="isDispayTable2" ref="plTable2" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
             <u-table-column v-for="(item,index) in tab2.table.tableConfig" :key="index" :label="item.label" :show-overflow-tooltip="item.showOverflow"  :prop="item.prop" align="center">
@@ -120,13 +122,13 @@
         </div>
 
         <span v-if="tab2.table.listLoading == false && tab2.table.list.length>0" style="margin-right: 30px;margin-top: 10px;font-size: 14px;">共{{ tab2.table.total }}条</span>
-        </div>
-        <div v-else>
-          <!-- 新展示 -->
-          <u-table :span-method="objectSpanMethod" ref="plTable22" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
-            <u-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.prop" :label="column.label" align="center"></u-table-column>
-          </u-table>
-        </div>
+        </div>
+        <div v-else>
+          <!-- 新展示 -->
+          <u-table :span-method="objectSpanMethod" ref="plTable22" v-loading="tab2.table.listLoading" :row-style="rowStyle" :cell-style="cellStyle" :max-height="myHeight2" use-virtual :row-height="rowHeight" border class="elTable table-fixed plTable2">
+            <u-table-column v-for="(column, index) in tableColumns" :key="index" :prop="column.prop" :label="column.label" align="center"></u-table-column>
+          </u-table>
+        </div>
       </el-tab-pane>
       <el-tab-pane label="价格分析" name="third">
         <div class="search">
@@ -212,30 +214,30 @@ export default {
           }
           return time.getTime() > Date.now()
         }
-      },
-      pickerOptions2: {
-        onPick: ({ maxDate, minDate }) => {
-          this.pickerMinDate = minDate.getTime()
-          if (maxDate) {
-            this.pickerMinDate = ''
-          }
-        },
-        // 限制不能选择今天之后的日期
-        disabledDate: (time) => {
-          if (this.pickerMinDate !== '') {
-            const one = 31 * 24 * 3600 * 1000
-            const minTime = this.pickerMinDate - one
-            let maxTime = this.pickerMinDate + one
-            // if (maxTime > new Date()) {
-            //   maxTime = new Date()
-            // }
-            return time.getTime() < minTime || time.getTime() > maxTime
-          }
-          // return time.getTime() > Date.now()
-        }
+      },
+      pickerOptions2: {
+        onPick: ({ maxDate, minDate }) => {
+          this.pickerMinDate = minDate.getTime()
+          if (maxDate) {
+            this.pickerMinDate = ''
+          }
+        },
+        // 限制不能选择今天之后的日期
+        disabledDate: (time) => {
+          if (this.pickerMinDate !== '') {
+            const one = 31 * 24 * 3600 * 1000
+            const minTime = this.pickerMinDate - one
+            let maxTime = this.pickerMinDate + one
+            // if (maxTime > new Date()) {
+            //   maxTime = new Date()
+            // }
+            return time.getTime() < minTime || time.getTime() > maxTime
+          }
+          // return time.getTime() > Date.now()
+        }
       },
       fileComment: [{ 'label': '商务文件评分', 'children': [{ 'label': '1' }, { 'label': '2' }, { 'label': '管理员' }] }],
-      displayList:[{id:'1',name:'理论'},{id:'2',name:'实际'}],//列表显示
+      displayList:[{id:'1',name:'理论'},{id:'2',name:'实际'}],//列表显示
       isSplitsmallmaterialsList:[{id:'0',name:'拆分'},{id:'1',name:'不拆分'}],
       activeName: 'first',
       tab: {
@@ -279,8 +281,8 @@ export default {
               stopTime: parseTime(new Date(), '{y}-{m}-{d}'),
               inputDatetime: [new Date(), new Date()],
               fname: '',
-              typea:'',
-              times:'',
+              typea:'',
+              times:'',
               ftType:'1'
             }
           },
@@ -337,22 +339,22 @@ export default {
       isDispayTable3:false,
       statisticalTypeList2: [{ id: '1', name: '牲畜类别' }, { id: '2', name: '栏舍名称' }, { id: '3', name: '日期' }, { id: '4', name: 'TMR设备编号' }, { id: '5', name: 'TMR班次' }, { id: '6', name: '车次' }],
       statisticalTypeList3: [{ id: '1', name: '牲畜类别' }, { id: '2', name: '栏舍名称' }, { id: '3', name: '日期' }, { id: '4', name: 'TMR设备编号' }],
-      frequencyList: [], // 班次
-      isTable1:true,
-      spanObj: {},
-      mergekeys: ['A', 'B'],
-      tableColumns:[],
-      myData:{},
-      columnsToTotal: ['10-配种']
+      frequencyList: [], // 班次
+      isTable1:true,
+      spanObj: {},
+      mergekeys: ['A', 'B'],
+      tableColumns:[],
+      myData:{},
+      columnsToTotal: ['10-配种']
     }
   },
   created() {
-    this.getTimeFn()
+    this.getTimeFn()
     this.getIsDisplay()
   },
-  methods: {
-    getIsDisplay() {
-      const url = 'authdata/GetDataByName'
+  methods: {
+    getIsDisplay() {
+      const url = 'authdata/GetDataByName'
       const data = {
         name: 'getSysoptEnable',
         page: 1,
@@ -363,33 +365,33 @@ export default {
           pastureid: Cookies.get('pastureid'),
           inforname: 'times'
         }
-      }
-      postJson(url, data).then(response => {
-        console.log(response.data.list[0].inforvalue)
-        if (response.data.list[0].inforvalue == 1) {
-          this.frequencyList = [{ id: 1, name: '第一班' }]
-        } else if (response.data.list[0].inforvalue == 2) {
-          this.frequencyList = [
-            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }
-          ]
-        } else if (response.data.list[0].inforvalue == 3) {
-          this.frequencyList = [
-            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }
-          ]
-        } else if (response.data.list[0].inforvalue == 4) {
-          this.frequencyList = [
-            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }, { id: 4, name: '第四班' }
-          ]
-        }else if (response.data.list[0].inforvalue == 5) {
-          this.frequencyList = [
-            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }, { id: 4, name: '第四班' }, { id: 5, name: '第五班' }
-          ]
-        }else if (response.data.list[0].inforvalue == 6) {
-          this.frequencyList = [
-            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }, { id: 4, name: '第四班' }, { id: 5, name: '第五班' }, { id: 6, name: '第六班' },
-          ]
-        }
-      })
+      }
+      postJson(url, data).then(response => {
+        console.log(response.data.list[0].inforvalue)
+        if (response.data.list[0].inforvalue == 1) {
+          this.frequencyList = [{ id: 1, name: '第一班' }]
+        } else if (response.data.list[0].inforvalue == 2) {
+          this.frequencyList = [
+            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }
+          ]
+        } else if (response.data.list[0].inforvalue == 3) {
+          this.frequencyList = [
+            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }
+          ]
+        } else if (response.data.list[0].inforvalue == 4) {
+          this.frequencyList = [
+            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }, { id: 4, name: '第四班' }
+          ]
+        }else if (response.data.list[0].inforvalue == 5) {
+          this.frequencyList = [
+            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }, { id: 4, name: '第四班' }, { id: 5, name: '第五班' }
+          ]
+        }else if (response.data.list[0].inforvalue == 6) {
+          this.frequencyList = [
+            { id: 1, name: '第一班' }, { id: 2, name: '第二班' }, { id: 3, name: '第三班' }, { id: 4, name: '第四班' }, { id: 5, name: '第五班' }, { id: 6, name: '第六班' },
+          ]
+        }
+      })
     },
     getTimeFn() {
       const that = this
@@ -497,78 +499,78 @@ export default {
       setTimeout(()=>{
         this.isDispayTable2 = true
         this.$nextTick(() => {
-          let myList = []
-          if(this.isTable1){
-            this.tab2.table.getdataListParm.parammaps.mode = 0
-          }else{
-            this.tab2.table.getdataListParm.parammaps.mode = 1
+          let myList = []
+          if(this.isTable1){
+            this.tab2.table.getdataListParm.parammaps.mode = 0
+          }else{
+            this.tab2.table.getdataListParm.parammaps.mode = 1
           }
-          GetReportform(this.tab2.table.getdataListParm).then(response => {
-            if(this.isTable1){
-              if (response.data !== null && response.data.data !== null && response.data.data1 !== null) {
-                this.tab2.table.data = response.data.data
-                response.data.feedcode.push('')
-                response.data.feedcode.unshift('饲料编码')
-                for (let i = 0; i < response.data.list.data2.length; i++) {
-                  // console.log(response.data.list.data2[i],'===label')
-                  for (let j = 0; j < response.data.list.data1.length; j++) {
-                    for (let a = 0; a < response.data.list.data2[i].children.length; a++) {
-                      if (response.data.list.data1[j][response.data.list.data2[i].children[a].prop] == undefined || response.data.list.data1[j][response.data.list.data2[i].children[a].prop] == null || response.data.list.data1[j][response.data.list.data2[i].children[a].prop] == '') {
-                        response.data.list.data1[j][response.data.list.data2[i].children[a].prop] = 0
-                      }
-                    }
-                  }
-                  if (response.data.list.data2[i].children.length > 1) {
-                    for (let j = 0; j < response.data.list.data2[i].children.length; j++) {
-                      if (response.data.list.data2[i].children[j].label == '理论' || response.data.list.data2[i].children[j].label == '实际') {
-                        this.$set(response.data.list.data2[i].children[j], 'width', '80px')
-                      } else {
-                        this.$set(response.data.list.data2[i].children[j], 'width', '80px')
-                      }
-                    }
-                  } else {
-                    this.$set(response.data.list.data2[i].children[0], 'width', '80px')
-                  }
-                }
-                let list = response.data.list.data2
-                let code = response.data.feedcode
-                const headers = []
-                for(let i=0;i<list.length;i++){
-                  for(let j=0;j<code.length;j++){
-                    if(i== j){
-                      let obj = {
-                        label:code[j],
-                        children:[
-                          list[i]
-                        ]
-                      }
-                      headers.push(obj)
-                    }
-                  }
-                }
-                myList = response.data.list.data1
-                this.tab2.table.list = response.data.list.data1
-                this.tab2.table.tableConfig = headers
-                this.tab2.table.total = response.data.list.data1.length
-
-                console.log('库存统计-用料分析this.tab2.table.data', response.data.data)
-                console.log('库存统计-用料分析this.tab2.table.feedcode', response.data.feedcode)
-                console.log('库存统计-用料分析this.tab2.table.list', response.data.list.data1)
-                console.log('库存统计-用料分析this.tab2.table.tableConfig',response.data.list.data2)
-              } else {
-                myList = []
-                this.tab2.table.list = []
-                this.tab2.table.tableConfig = []
-              }
-
-              console.log(this.tab2.table.list.length)
-              this.$refs.plTable2.reloadData(myList)
-            }else{
-              this.myData = response.data
-              this.tableColumns = response.data.columns;
-              this.tableData = response.data.data;
-              this.$refs.plTable22.reloadData(this.tableData)
-              this.handleSpan()
+          GetReportform(this.tab2.table.getdataListParm).then(response => {
+            if(this.isTable1){
+              if (response.data !== null && response.data.data !== null && response.data.data1 !== null) {
+                this.tab2.table.data = response.data.data
+                response.data.feedcode.push('')
+                response.data.feedcode.unshift('饲料编码')
+                for (let i = 0; i < response.data.list.data2.length; i++) {
+                  // console.log(response.data.list.data2[i],'===label')
+                  for (let j = 0; j < response.data.list.data1.length; j++) {
+                    for (let a = 0; a < response.data.list.data2[i].children.length; a++) {
+                      if (response.data.list.data1[j][response.data.list.data2[i].children[a].prop] == undefined || response.data.list.data1[j][response.data.list.data2[i].children[a].prop] == null || response.data.list.data1[j][response.data.list.data2[i].children[a].prop] == '') {
+                        response.data.list.data1[j][response.data.list.data2[i].children[a].prop] = 0
+                      }
+                    }
+                  }
+                  if (response.data.list.data2[i].children.length > 1) {
+                    for (let j = 0; j < response.data.list.data2[i].children.length; j++) {
+                      if (response.data.list.data2[i].children[j].label == '理论' || response.data.list.data2[i].children[j].label == '实际') {
+                        this.$set(response.data.list.data2[i].children[j], 'width', '80px')
+                      } else {
+                        this.$set(response.data.list.data2[i].children[j], 'width', '80px')
+                      }
+                    }
+                  } else {
+                    this.$set(response.data.list.data2[i].children[0], 'width', '80px')
+                  }
+                }
+                let list = response.data.list.data2
+                let code = response.data.feedcode
+                const headers = []
+                for(let i=0;i<list.length;i++){
+                  for(let j=0;j<code.length;j++){
+                    if(i== j){
+                      let obj = {
+                        label:code[j],
+                        children:[
+                          list[i]
+                        ]
+                      }
+                      headers.push(obj)
+                    }
+                  }
+                }
+                myList = response.data.list.data1
+                this.tab2.table.list = response.data.list.data1
+                this.tab2.table.tableConfig = headers
+                this.tab2.table.total = response.data.list.data1.length
+
+                console.log('库存统计-用料分析this.tab2.table.data', response.data.data)
+                console.log('库存统计-用料分析this.tab2.table.feedcode', response.data.feedcode)
+                console.log('库存统计-用料分析this.tab2.table.list', response.data.list.data1)
+                console.log('库存统计-用料分析this.tab2.table.tableConfig',response.data.list.data2)
+              } else {
+                myList = []
+                this.tab2.table.list = []
+                this.tab2.table.tableConfig = []
+              }
+
+              console.log(this.tab2.table.list.length)
+              this.$refs.plTable2.reloadData(myList)
+            }else{
+              this.myData = response.data
+              this.tableColumns = response.data.columns;
+              this.tableData = response.data.data;
+              this.$refs.plTable22.reloadData(this.tableData)
+              this.handleSpan()
             }
             setTimeout(() => {
               this.tab2.table.listLoading = false
@@ -576,7 +578,7 @@ export default {
           })
         })
       })
-    },
+    },
 
     changeRadio2() {
       console.log(this.tab2.radio)
@@ -862,53 +864,53 @@ export default {
     },
     changeChecked(item) {
       this.form_search('second')
-    },
-    handlesWitch(item){
-      this.isTable1 = !this.isTable1
-        this.getTab2List()
-    },
-    handleSpan() {
-      this.mergekeys.forEach(key => {
-        this.spanObj[key] = []
-        let position = 0
-        this.tableData.forEach((item, index) => {
-          if (index === 0) {
-            this.spanObj[key].push(1)
-            position = 0
-          } else {
-            if (key == 'B') {
-              if (this.tableData[index][key] === this.tableData[index - 1][key] && this.tableData[index]['A'] === this.tableData[index - 1]['A']) {
-                this.spanObj[key][position] += 1
-                this.spanObj[key].push(0)
-              } else {
-                this.spanObj[key].push(1)
-                position = index
-              }
-            } else {
-              if (this.tableData[index][key] === this.tableData[index - 1][key]) {
-                this.spanObj[key][position] += 1
-                this.spanObj[key].push(0)
-              } else {
-                this.spanObj[key].push(1)
-                position = index
-              }
-            }
-          }
-        })
-      })
-    },
-    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
-      for (let i = 0; i < this.mergekeys.length; i++) {
-        if (column.property === this.mergekeys[i]) {
-          let _row = this.spanObj[this.mergekeys[i]][rowIndex]
-          let _col = _row > 0 ? 1 : 0
-          console.log(_row,'_row1')
-          return {
-            rowspan: _row,
-            colspan: _col
-          }
-        }
-      }
+    },
+    handlesWitch(item){
+      this.isTable1 = !this.isTable1
+        this.getTab2List()
+    },
+    handleSpan() {
+      this.mergekeys.forEach(key => {
+        this.spanObj[key] = []
+        let position = 0
+        this.tableData.forEach((item, index) => {
+          if (index === 0) {
+            this.spanObj[key].push(1)
+            position = 0
+          } else {
+            if (key == 'B') {
+              if (this.tableData[index][key] === this.tableData[index - 1][key] && this.tableData[index]['A'] === this.tableData[index - 1]['A']) {
+                this.spanObj[key][position] += 1
+                this.spanObj[key].push(0)
+              } else {
+                this.spanObj[key].push(1)
+                position = index
+              }
+            } else {
+              if (this.tableData[index][key] === this.tableData[index - 1][key]) {
+                this.spanObj[key][position] += 1
+                this.spanObj[key].push(0)
+              } else {
+                this.spanObj[key].push(1)
+                position = index
+              }
+            }
+          }
+        })
+      })
+    },
+    objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+      for (let i = 0; i < this.mergekeys.length; i++) {
+        if (column.property === this.mergekeys[i]) {
+          let _row = this.spanObj[this.mergekeys[i]][rowIndex]
+          let _col = _row > 0 ? 1 : 0
+          console.log(_row,'_row1')
+          return {
+            rowspan: _row,
+            colspan: _col
+          }
+        }
+      }
     },
     handleExport(item) {
       if (item == 'tab1') {
@@ -934,7 +936,7 @@ export default {
             excel.export_json_to_excel({ multiHeader, multiHeader2, data, filename: '库存统计', merges })
           })
         })
-      } else if (item == 'tab2') {
+      } else if (item == 'tab2') {
         if(this.isTable1){
           console.log('用料分析导出数据', this.tab2.table.list)
           console.log('用料分析导出表头', this.tab2.table.tableConfig)
@@ -951,10 +953,10 @@ export default {
           for (let i = 0; i < this.tab2.table.tableConfig.length; i++) {
             exportTitle1.push(this.tab2.table.tableConfig[i].label)
             for (let j = 0; j < this.tab2.table.tableConfig[i].children.length; j++) {
-              exportTitle2.push(this.tab2.table.tableConfig[i].children[j].label)
-              for(let a = 0;a<this.tab2.table.tableConfig[i].children[j].children.length;a++){
-                exportTitle3.push(this.tab2.table.tableConfig[i].children[j].children[a].label)
-                filterValArr.push(this.tab2.table.tableConfig[i].children[j].children[a].prop)
+              exportTitle2.push(this.tab2.table.tableConfig[i].children[j].label)
+              for(let a = 0;a<this.tab2.table.tableConfig[i].children[j].children.length;a++){
+                exportTitle3.push(this.tab2.table.tableConfig[i].children[j].children[a].label)
+                filterValArr.push(this.tab2.table.tableConfig[i].children[j].children[a].prop)
               }
               // filterValArr.push(this.tab2.table.tableConfig[i].children[j].prop)
             }
@@ -971,11 +973,11 @@ export default {
                 headerArr.push(exportTitle1[i], '', '', '')
               } else {
                 headerArr.push(exportTitle1[i])
-              }
-              if (i > 0) {
-                headerArr2.push(exportTitle2[i], '', '', '')
-              } else {
-                headerArr2.push(exportTitle2[i])
+              }
+              if (i > 0) {
+                headerArr2.push(exportTitle2[i], '', '', '')
+              } else {
+                headerArr2.push(exportTitle2[i])
               }
             }
           } else {
@@ -985,11 +987,11 @@ export default {
                   headerArr.push(exportTitle1[i], '')
                 } else {
                   headerArr.push(exportTitle1[i])
-                }
-                if (i > 0) {
-                  headerArr2.push(exportTitle2[i], '')
-                } else {
-                  headerArr2.push(exportTitle2[i])
+                }
+                if (i > 0) {
+                  headerArr2.push(exportTitle2[i], '')
+                } else {
+                  headerArr2.push(exportTitle2[i])
                 }
               }
             }else{
@@ -1005,8 +1007,8 @@ export default {
               const multiHeader = [
                 headerArr
               ]
-              const multiHeader2 = [
-                headerArr2
+              const multiHeader2 = [
+                headerArr2
               ]
               const tHeader = exportTitle3
               const filterVal = filterValArr
@@ -1029,26 +1031,26 @@ export default {
               const merges = []
               excel.export_json_to_excel({ multiHeader, multiHeader2, header: tHeader, data, filename: '用料分析', merges })
             })
-          }
-        }else{
-          var startTime = this.tab2.table.getdataListParm.parammaps.startTime
-          var stopTime = this.tab2.table.getdataListParm.parammaps.stopTime
-          var title = '用料分析-'+startTime+'-' +stopTime
-          var tHeader = []
-          var filterVal = []
-          for (let i = 0; i < this.tableColumns.length; i++) {
-            tHeader.push(this.tableColumns[i].label)
-            filterVal.push(this.tableColumns[i].prop)
-          }
-          var excelDatas = [
-            {
-              tHeader: tHeader,
-              filterVal: filterVal,
-              tableDatas: this.tableData,
-              sheetName: 'Sheet'
-            }
-          ]
-          json2excel(excelDatas, title, true, 'xlsx')
+          }
+        }else{
+          var startTime = this.tab2.table.getdataListParm.parammaps.startTime
+          var stopTime = this.tab2.table.getdataListParm.parammaps.stopTime
+          var title = '用料分析-'+startTime+'-' +stopTime
+          var tHeader = []
+          var filterVal = []
+          for (let i = 0; i < this.tableColumns.length; i++) {
+            tHeader.push(this.tableColumns[i].label)
+            filterVal.push(this.tableColumns[i].prop)
+          }
+          var excelDatas = [
+            {
+              tHeader: tHeader,
+              filterVal: filterVal,
+              tableDatas: this.tableData,
+              sheetName: 'Sheet'
+            }
+          ]
+          json2excel(excelDatas, title, true, 'xlsx')
         }
       } else if (item == 'tab3') {
         console.log('价格分析导出')
@@ -1122,6 +1124,7 @@ export default {
 }
 </script>
 <style lang="scss" scoped>
+
   .search{
     margin-bottom:10px;
     .el-radio{margin-right: 10px;}
@@ -1143,8 +1146,8 @@ export default {
   }
   .plTableBox .el-table td.is-hidden>*, .plTableBox .el-table th.is-hidden>*{
     visibility:inherit;
-  }
-  .plTableBox .el-table th>.cell{
-    white-space: pre-wrap;
+  }
+  .plTableBox .el-table th>.cell{
+    white-space: pre-wrap;
   }
 </style>

+ 9 - 1
src/views/statisticalAnalysis/processAnalysis/group/index.vue

@@ -75,7 +75,7 @@
           </div>
         </div>
         <div class="Mixture">
-          <h4>混料详情</h4>
+          <h4>混料详情11</h4>
           <el-table
             :key="table3.tableKey"
             v-loading="table3.listLoading"
@@ -101,6 +101,14 @@
             <el-table-column label="跳转方式" min-width="70px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="70px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="70px" align="center" prop="actualweight" />
+            <el-table-column
+              fixed="right"
+              label="操作"
+              width="100">
+              <template slot-scope="scope">
+                <el-button @click="handleClick(scope.row)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
       </el-col>

+ 142 - 19
src/views/statisticalAnalysis/processAnalysis/pasture/index.vue

@@ -138,10 +138,18 @@
             <el-table-column label="跳转方式" min-width="60px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="60px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="60px" align="center" prop="actualweight" />
+            <el-table-column
+              fixed="right"
+              label="操作"
+              width="80px">
+              <template slot-scope="scope">
+                <el-button @click="handleClick(scope.row)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
       </el-col>
-      <!-- 撒料计划 -->
+      <!-- 撒料计划 3-->
       <el-col v-if="isSpreadingPlan" :span="16">
         <div class="title">
           <b>过程详情</b>
@@ -178,7 +186,7 @@
           </div>
         </div>
         <div class="Mixture">
-          <h4>混料详情</h4>
+          <h4>混料详情3</h4>
           <el-table
             :key="table3.tableKey"
             v-loading="table3.listLoading"
@@ -209,11 +217,18 @@
             <el-table-column label="跳转方式" min-width="70px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="70px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="70px" align="center" prop="actualweight" />
+            <el-table-column
+              label="操作"
+              width="90px">
+              <template slot-scope="scope"  >
+                <el-button v-if="scope.row.sort != '合计'"   @click="handleClick(scope.row,1)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
 
         <div class="SpreadingMaterials">
-          <h4>撒料详情</h4>
+          <h4>撒料详情3</h4>
           <el-table
             :key="table4.tableKey"
             v-loading="table4.listLoading"
@@ -244,6 +259,13 @@
             <el-table-column label="跳转方式" min-width="70px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="70px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="70px" align="center" prop="actualweight" />
+            <el-table-column
+              label="操作"
+              width="90px">
+              <template slot-scope="scope"  >
+                <el-button v-if="scope.row.sort != '合计'"   @click="handleClick(scope.row,2)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
         <div class="ControlChart">
@@ -251,7 +273,7 @@
           <div id="chartLine" style="width: 100%;height:300px;" />
         </div>
       </el-col>
-      <!-- 剩料计划 -->
+      <!-- 剩料计划 2-->
       <el-col v-if="isResidualMaterialPlan" :span="16">
         <div class="title">
           <b>过程详情</b>
@@ -326,7 +348,7 @@
           </el-table>
         </div>
       </el-col>
-      <!-- 撒料计划-混料 -->
+      <!-- 撒料计划-混料 1-->
       <el-col v-if="isSpreadingPlanSH" :span="16">
         <div class="title">
           <b>过程详情</b>
@@ -363,7 +385,7 @@
           </div>
         </div>
         <div class="Mixture">
-          <h4>混料详情</h4>
+          <h4>混料详情1</h4>
           <el-table
             :key="table3.tableKey"
             v-loading="table3.listLoading"
@@ -379,8 +401,8 @@
             max-height="270px"
 
           >
-            <el-table-column label="操作编号" min-width="60px" align="center" prop="sort" />
-            <el-table-column label="饲料名称" min-width="60px" align="center" prop="fname" />
+            <el-table-column  label="操作编号" min-width="60px" align="center" prop="sort" />
+            <el-table-column label="饲料名称" min-width="80px" align="center" prop="fname" />
             <el-table-column label="计划重量" min-width="60px" align="center" prop="lweight" />
             <el-table-column label="实际重量" min-width="60px" align="center" prop="actualweightminus">
               <template slot-scope="{row}">
@@ -395,11 +417,18 @@
             <el-table-column label="跳转方式" min-width="60px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="60px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="60px" align="center" prop="actualweight" />
+            <el-table-column
+              label="操作"
+              width="90">
+              <template slot-scope="scope"  >
+                <el-button v-if="scope.row.sort != '合计'"   @click="handleClick(scope.row,1)" type="text" size="small">编辑1</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
 
         <div class="SpreadingMaterials">
-          <h4>撒料详情</h4>
+          <h4>撒料详情1</h4>
           <el-table
             :key="table4.tableKey"
             v-loading="table4.listLoading"
@@ -414,10 +443,10 @@
             class="elTable table-fixed"
             max-height="260px"
           >
-            <el-table-column label="操作编号" min-width="60px" align="center" prop="sort" />
-            <el-table-column label="撒料车辆" min-width="60px" align="center" prop="fname" />
+            <el-table-column label="操作编号"  min-width="60px" align="center" prop="sort" />
+            <el-table-column label="撒料车辆" min-width="80px" align="center" prop="fname" />
             <el-table-column label="计划重量" min-width="60px" align="center" prop="lweight" />
-            <el-table-column label="实际重量" min-width="60px" align="center" prop="actualweightminus">
+            <el-table-column label="实际重量" min-width="70px" align="center" prop="actualweightminus">
               <template slot-scope="{row}">
                 <a v-if="row.actualweightminus == 0" style="color: red;">{{ row.actualweightminus }}</a>
                 <a v-else>{{ row.actualweightminus }}</a>
@@ -430,6 +459,13 @@
             <el-table-column label="跳转方式" min-width="60px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="60px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="60px" align="center" prop="actualweight" />
+            <el-table-column
+              label="操作"
+              width="90">
+              <template slot-scope="scope"  >
+                <el-button v-if="scope.row.sort != '合计'"   @click="handleClick(scope.row,2)" type="text" size="small">编辑1</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
         <div class="ControlChart">
@@ -474,7 +510,7 @@
           </div>
         </div>
         <div class="Mixture">
-          <h4>混料详情</h4>
+          <h4>混料详情2</h4>
           <el-table
             :key="table3.tableKey"
             v-loading="table3.listLoading"
@@ -505,11 +541,18 @@
             <el-table-column label="跳转方式" min-width="60px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="60px" align="center" prop="lastactualweight" />
             <el-table-column label="结束重量" min-width="60px" align="center" prop="actualweight" />
+            <el-table-column
+              label="操作"
+              width="90px">
+              <template slot-scope="scope"  >
+                <el-button v-if="scope.row.sort != '合计'"   @click="handleClick(scope.row,1)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
 
         <div class="SpreadingMaterials">
-          <h4>撒料详情</h4>
+          <h4>撒料详情2</h4>
           <el-table
             :key="table4.tableKey"
             v-loading="table4.listLoading"
@@ -527,7 +570,7 @@
             <el-table-column label="操作编号" min-width="70px" align="center" prop="sort" />
             <el-table-column label="撒料车辆" min-width="70px" align="center" prop="fname" />
             <el-table-column label="计划重量" min-width="70px" align="center" prop="lweight" />
-            <el-table-column label="实际重量" min-width="60px" align="center" prop="actualweightminus">
+            <el-table-column label="实际重量" min-width="80px" align="center" prop="actualweightminus">
               <template slot-scope="{row}">
                 <a v-if="row.actualweightminus == 0" style="color: red;">{{ row.actualweightminus }}</a>
                 <a v-else>{{ row.actualweightminus }}</a>
@@ -539,7 +582,14 @@
             <el-table-column label="过程时间" min-width="70px" align="center" prop="proesstime" />
             <el-table-column label="跳转方式" min-width="70px" align="center" prop="buttontype" />
             <el-table-column label="开始重量" min-width="70px" align="center" prop="lastactualweight" />
-            <el-table-column label="结束重量" min-width="70px" align="center" prop="actualweight" />
+            <el-table-column label="结束重量" min-width="80px" align="center" prop="actualweight" />
+            <el-table-column
+              label="操作"
+              width="90px">
+              <template slot-scope="scope"  >
+                <el-button v-if="scope.row.sort != '合计'"   @click="handleClick(scope.row,2)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
         </div>
         <div class="ControlChart">
@@ -549,6 +599,22 @@
       </el-col>
     </el-row>
 
+    <!-- 修改实际重量 -->
+    <el-dialog title="修改实际重量" :visible.sync="dialogFormVisible" width="40%">
+  <el-form :model="form">
+    <el-form-item label="原实际重量"  label-width="120px">
+      <el-input v-model="form.weightOld" disabled  type="number"></el-input>
+    </el-form-item>
+    <el-form-item label="现实际重量"  label-width="120px">
+      <el-input v-model="form.weight"  type="number"></el-input>
+    </el-form-item>
+  </el-form>
+  <div slot="footer" class="dialog-footer">
+    <el-button style="padding:10px"  @click="dialogFormVisible = false">取 消</el-button>
+    <el-button  style="padding:10px"   type="primary" @click="handleUpdateWg">确 定</el-button>
+  </div>
+</el-dialog>
+
   </div>
 
 </template>
@@ -557,13 +623,18 @@
 import echarts from 'echarts'
 
 require('echarts/theme/macarons')
-import { GetDataByName, GetReportform, formatNum,processAnalysist } from '@/api/common'
+import { GetDataByName, GetReportform, formatNum,processAnalysist,editWeightHL,editWeightSL } from '@/api/common'
 import Cookies from 'js-cookie'
 import { parseTime } from '@/utils/index.js'
 export default {
   name: 'PastureProcessAnalysis',
   data() {
     return {
+      dialogFormVisible:false,
+      form:{
+        weightOld:'',
+        weight:""
+      },
       hlwc1:undefined ,
       hlwc2:undefined ,
       hlzq1:undefined ,
@@ -633,7 +704,7 @@ export default {
             pastureid: Cookies.get('pastureid'),
             startTime: parseTime(new Date(), '{y}-{m}-{d}'),
             stopTime: parseTime(new Date(), '{y}-{m}-{d}'),
-            inputDatetime: [new Date(), new Date()],
+            inputDatetime:  [new Date(), new Date()], //['2023-06-05','2023-06-15'],
             iscompleted: '',
             tmrtname: '',
             lpplantype: '',
@@ -741,6 +812,58 @@ export default {
     this.getList()
   },
   methods: {
+    // 编辑实际重量
+    handleClick(row,type){
+      this.dialogFormVisible = true;
+      this.form.weight = row.actualweightminus;
+      this.form.weightOld = row.actualweightminus;
+      this.form.pid =  this.table3.getdataListParm.parammaps.pid;
+      this.form.sort = row.sort;
+      this.form.userId = Cookies.get('employeid')
+      this.form.type = type;
+      console.log(row,'实际重量');
+      
+
+    },
+    // 点击确认修改
+    handleUpdateWg(){
+      if(this.form.weight == this.form.weightOld ){
+        this.dialogFormVisible = false
+        return
+      }
+      // 1:混料 2:撒料
+     if(this.form.type == 1){
+       this.handleEditWgHL(this.form)
+     } else{
+      this.handleEditWgSL(this.form)
+     }
+    },
+   
+    // 混料
+    async handleEditWgHL(obj){
+      const {data} =await editWeightHL(obj);
+      console.log(data,'=====混hss')
+      if(data == true){
+        this.$message({ type: 'success', message: '混料实际重量修改成功', duration: 2000 })
+      } else{
+        this.$message({ type: 'error', message: '修改失败,请重新修改', duration: 2000 })
+      }
+      this.getList3()
+      this.dialogFormVisible = false
+    },
+    // 撒料
+    async handleEditWgSL(obj){
+      const {data} =await editWeightSL(obj);
+      console.log(data,'=====撒hss')
+      if(data == true){
+        this.$message({ type: 'success', message: '撒料实际重量修改成功', duration: 2000 })
+      } else{
+        this.$message({ type: 'error', message: data, duration: 2000 })
+      }
+      this.getList4()
+      this.dialogFormVisible = false
+   
+    },
     change_date(e){
       console.log(e)
       this.getDownList()
@@ -1373,7 +1496,7 @@ export default {
       }
     },
     rowStyle({ row, rowIndex }) {
-        console.log(row, rowIndex,'777777');
+        // console.log(row, rowIndex,'777777');s
         let stylejson = {};
         if (row.abnormal == 1) {
             stylejson.background = "#fb8072";// 背景颜色

+ 13 - 13
vue.config.js

@@ -1,6 +1,6 @@
 'use strict'
 const path = require('path')
-const defaultSettings = require('./src/settings.js')
+const defaultSettings = require('./src/settings.js')
 // const TerserPlugin = require('terser-webpack-plugin')
 
 function resolve(dir) {
@@ -47,18 +47,18 @@ module.exports = {
     },
     after: require('./mock/mock-server.js')
   },
-
-  configureWebpack: {
-    // provide the app's title in webpack's name field, so that
-    // it can be accessed in index.html to inject the correct title.
-
-    devtool: 'source-map',
-    name: name,
-    resolve: {
-      alias: {
-        '@': resolve('src')
-      }
-    }
+
+  configureWebpack: {
+    // provide the app's title in webpack's name field, so that
+    // it can be accessed in index.html to inject the correct title.
+
+    devtool: 'source-map',
+    name: name,
+    resolve: {
+      alias: {
+        '@': resolve('src')
+      }
+    }
   },
   chainWebpack(config) {
     config.plugins.delete('preload') // TODO: need test