East hace 3 años
padre
commit
49d358db9c

+ 11 - 28
src/router/childrenRouters.js

@@ -49,6 +49,16 @@ const childrenRouters = [
     }
   },
   {
+    path: '/collectFarm',
+    name: 'collectFarm',
+    component: () => import('../views/collectData/collectFarm.vue'),
+    meta: {
+      title: '牧场对比',
+      defaultUrl: false,
+      id: 3,
+    }
+  },
+  {
     path: '/deviceAdmin',
     name: 'deviceAdmin',
     component: () => import('../views/deviceAdmin/deviceAdmin.vue'),
@@ -63,34 +73,7 @@ const childrenRouters = [
     name: 'deviceInfo',
     component: () => import('../views/deviceAdmin/deviceInfo.vue'),
     meta: {
-      title: '设备管理',
-      defaultUrl: false
-    }
-  },
-  {
-    path: '/collectDay',
-    name: 'collectDay',
-    component: () => import('../views/collectData/collectDay.vue'),
-    meta: {
-      title: '牧场概况',
-      defaultUrl: false
-    }
-  },
-  {
-    path: '/eartagData',
-    name: 'eartagData',
-    component: () => import('../views/collectData/eartagData.vue'),
-    meta: {
-      title: '耳标数据',
-      defaultUrl: false
-    }
-  },
-  {
-    path: '/dataInfo',
-    name: 'dataInfo',
-    component: () => import('../views/collectData/dataInfo.vue'),
-    meta: {
-      title: '数据详情',
+      title: '设备详情',
       defaultUrl: false
     }
   }

+ 164 - 40
src/views/collectData/collectData.vue

@@ -80,22 +80,22 @@
         <!-- 查询 -->
         <div class="form_item">
           <el-form :inline="true" size="mini">
-            <el-form-item label="母猪存栏:">
+            <el-form-item label="母猪存栏:" style="width: 270px">
               <el-input style="width: 50px;" v-model="searchForm.pigAllMin"></el-input>
               &nbsp;至&nbsp;
               <el-input style="width: 50px;" v-model="searchForm.pigAllMax"></el-input>
             </el-form-item>
-            <el-form-item label="母猪新增:">
+            <el-form-item label="母猪新增:" style="width: 270px">
               <el-input style="width: 50px;" v-model="searchForm.pigAddMin"></el-input>
               &nbsp;至&nbsp;
               <el-input style="width: 50px;" v-model="searchForm.pigAddMax"></el-input>
             </el-form-item>
-            <el-form-item label="耳标离线:">
+            <el-form-item label="耳标离线:" style="width: 270px">
               <el-input style="width: 50px;" v-model="searchForm.eartagMin"></el-input>
               &nbsp;至&nbsp;
               <el-input style="width: 50px;" v-model="searchForm.eartagMax"></el-input>
             </el-form-item>
-            <el-form-item label="能繁母猪:">
+            <el-form-item label="能繁母猪:" style="width: 270px">
               <el-input style="width: 50px;" v-model="searchForm.bearPigMin"></el-input>
               &nbsp;至&nbsp;
               <el-input style="width: 50px;" v-model="searchForm.bearPigMax"></el-input>
@@ -117,68 +117,105 @@
             default-expand-all
             :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
             style="width: 100%;"
-            @row-click="rowClick">
+            @selection-change="selectFarm"
+            ref="table">
+            <el-table-column
+              type="selection"
+              width="55">
+            </el-table-column>
             <el-table-column
               label="牧场名"
-              prop="name">
-              <template slot-scope="scope">
-                <span style="cursor: pointer;" @click="onSelect(scope.row)">{{scope.row.name}}</span>
-              </template>
+              prop="farmName">
             </el-table-column>
             <el-table-column label="母猪存栏">
               <el-table-column
-                label="存栏量">
+                label="存栏量"
+                prop="sowLivestock">
               </el-table-column>
               <el-table-column
-                label="省排名">
+                label="省排名"
+                prop="sowLivestockRank">
               </el-table-column>
             </el-table-column>
             <el-table-column
-              prop="eartagNew"
               label="母猪存栏月增长">
               <el-table-column
-                label="存栏月环比增长量">
+                label="存栏月环比增长量"
+                prop="sowLivestockInc">
               </el-table-column>
               <el-table-column
-                label="省排名">
+                label="省排名"
+                prop="sowLivestockIncRank">
               </el-table-column>
             </el-table-column>
             <el-table-column
-              prop="eartagNew"
               label="MSY">
               <el-table-column
-                label="MSY">
+                label="MSY"
+                prop="sowMsy">
               </el-table-column>
               <el-table-column
-                label="省排名">
+                label="省排名"
+                prop="sowMsyRank">
               </el-table-column>
             </el-table-column>
             <el-table-column
-              prop="eartagOffone"
+              prop="outStockCount"
               label="今年累计出栏量">
             </el-table-column>
             <el-table-column
-              prop="sowStock"
+              prop="outStockExpected"
               label="预计年出栏量">
             </el-table-column>
             <el-table-column
-              prop="stock1"
+              prop="ainOutStock"
               label="目标年出栏量">
             </el-table-column>
             <el-table-column
-              prop="stock2"
+              prop="finishPercent"
               label="目标完成度">
             </el-table-column>
+            <el-table-column
+              label="操作"
+              width="100">
+              <template slot-scope="scope">
+                <el-button @click="handleEdit(scope.row)" type="text" size="small">编辑</el-button>
+              </template>
+            </el-table-column>
           </el-table>
           <table-footer
             :totals="totalPages"
             :size="pageSize"
             @sizeChange="sizeChange"
-            @pageChange="pageChange"></table-footer>
+            @pageChange="pageChange">
+          </table-footer>
+          <!-- 对比框 -->
+          <div v-show="constrastShow" class="constrast_box">
+            <el-card style="height: 100%">
+              <div class="card_title">
+                <span>对比框({{constrastNum}}/8)</span>
+                <i class="el-icon-circle-close card_icon" @click="closeConstrast"></i>
+              </div>
+              <!-- 被选中的牧场 -->
+              <div class="card_body">
+                <ul class="card_ul">
+                  <li 
+                    v-for="item in cardFarms"
+                    :key="item.id">
+                    {{ item.farmName }}
+                  </li>
+                </ul>
+              </div>
+              <div class="card_footer">
+                <el-button plain size="small" @click="handleClear">清 空</el-button>
+                <el-button type="primary" size="small" @click="handleConstrast">对 比</el-button>
+              </div>
+            </el-card>
+          </div>
         </div>
       </div>
     </div>
-    <el-button @click="toCollectDay">每日汇总</el-button>
+    <update ref="update" @refreshData="init"></update>
   </div>
 </template>
 
@@ -187,7 +224,8 @@ import lineChart from './charts/lineChart.vue'
 import hisChart from './charts/hisChart.vue'
 import areaZz from '../../components/areaZz.vue'
 import TableFooter from "../../components/TableFooter"
-import {mapState, mapMutations} from 'vuex';
+import update from './update.vue'
+import { mapState, mapMutations } from 'vuex';
 export default {
   name: "collectData",
   data () {
@@ -241,7 +279,10 @@ export default {
       ],
       totalPages: 0,
       pageNum: 1,
-      pageSize: 20
+      pageSize: 20,
+      constrastNum: 0, // 对比框中的牧场数量
+      constrastShow: false, // 对比框是否显示
+      cardFarms: []
     }
   },
   computed: {
@@ -251,7 +292,8 @@ export default {
     lineChart,
     hisChart,
     areaZz,
-    TableFooter
+    TableFooter,
+    update
   },
   methods: {
     ...mapMutations(['updateSelected']),
@@ -326,24 +368,57 @@ export default {
     init () {
       this.$http({
         url: this.$http.adornUrl(`http://192.168.1.171:8210/management/sowranktable/list`),
-        method: 'post',
+        method: 'get',
         data: this.$http.adornData({
           'page': this.pageNum,
           'limit': this.pageSize
         })
-      }).then(res => {
-      //   if(data.code === 0) {
-        console.log(res);
-      //     this.tableData = data.
-      //   } else {
-      //     this.hisList = [];
-      //   }
+      }).then(({data}) => {
+        if(data.code === 0) {
+          this.tableData = data.page.list
+        } else {
+          this.hisList = [];
+        }
       })
     },
-    // 点击表格的某一行
-    rowClick (row) {
-      console.log(row);
-      console.log('点击了某一行');
+    // // 点击表格的某一行
+    // rowClick (row) {
+    //   console.log(row);
+    //   console.log('点击了某一行');
+    // },
+    // 牧场对比
+    selectFarm (val) {
+      this.constrastShow = true
+      this.constrastNum = val.length
+      this.cardFarms = val
+      if (this.constrastNum === 0) {
+        this.constrastShow = false
+      }
+    },
+    // 关闭对比框
+    closeConstrast () {
+      this.constrastShow = false
+    },
+    // 清空牧场对比
+    handleClear () {
+      console.log('清空--------------------');
+      this.cardFarms = []
+      this.$refs.table.clearSelection()
+    },
+    // 进入 对比页面
+    handleConstrast () {
+      this.$router.push({
+        name: 'collectFarm',
+        params: {
+          row: this.cardFarms
+        }
+      })
+    },
+    // 表格 - 编辑 - 更新数据
+    handleEdit (row) {
+      this.$nextTick(() => {
+        this.$refs.update.init(row)
+      })
     },
     // 省市县
     getCityCode (val) {
@@ -396,7 +471,7 @@ export default {
   mounted() {
     this.initEchart();
     this.initCom();
-    // this.init()
+    this.init()
   },
 }
 </script>
@@ -429,7 +504,6 @@ export default {
   margin: 10px;
   margin-top: 20px;
   border: 1px solid #ddd;
-  height: 305px;
   background-color: #fff;
 }
 
@@ -487,6 +561,56 @@ export default {
   box-sizing: border-box;
   margin-top: 15px;
   padding-right: 10px;
+  position: relative;
   /*padding: 10px;*/
 }
+
+/** 对比框 */
+.constrast_box {
+  width: 220px;
+  height: 340px;
+  position: absolute;
+  right: 50px;
+  top: 10%;
+  background-color: #fff;
+}
+/* 去除 el-card 自带的 padding */
+/deep/ .el-card__body {
+  padding: 0;
+}
+/* 对比框的 title */
+.card_title {
+  font-weight: 700;
+  font-size: 17px;
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+  background-color: #eee;
+  padding: 15px 20px;
+  border-bottom: 1px solid #ddd;
+}
+.card_icon {
+  cursor: pointer;
+}
+/* 对比框的 body */
+.card_body {
+  border-bottom: 1px solid #ddd;
+  height: 200px;
+}
+.card_ul {
+  text-decoration: none;
+  list-style: none;
+  padding-left: 30px;
+}
+.card_ul li {
+  margin-top: 5px;
+  font-size: 14px;
+}
+/* 对比框的底部按钮 */
+.card_footer {
+  display: flex;
+  flex-direction: row;
+  justify-content: space-around;
+  padding: 15px 20px;
+}
 </style>

+ 136 - 0
src/views/collectData/collectFarm.vue

@@ -0,0 +1,136 @@
+<template>
+  <div class="collect_farm">
+    <div class="chartDiv">
+      <div class="title">
+        <span>牧场对比</span>
+        <div><el-button plain size="mini" @click="close">关闭</el-button></div>
+      </div>
+      <div class="box_table">
+        <el-table
+          :data="tableData"
+          border
+          stripe
+          :header-cell-style="{'text-align':'center', 'background-color': '#F9FAFC', 'padding': '5px 0', 'color': '#666666'}"
+          :cell-style="{'text-align':'center', 'padding': '5px 0'}"
+          height="600"
+          row-key="name"
+          default-expand-all
+          :tree-props="{children: 'children', hasChildren: 'hasChildren'}"
+          style="width: 100%;">
+          <el-table-column
+            type="selection"
+            width="55">
+          </el-table-column>
+          <el-table-column
+            label="牧场名"
+            prop="farmName">
+          </el-table-column>
+          <el-table-column label="母猪存栏">
+            <el-table-column
+              label="存栏量"
+              prop="sowLivestock">
+            </el-table-column>
+            <el-table-column
+              label="省排名"
+              prop="sowLivestockRank">
+            </el-table-column>
+          </el-table-column>
+          <el-table-column
+            label="母猪存栏月增长">
+            <el-table-column
+              label="存栏月环比增长量"
+              prop="sowLivestockInc">
+            </el-table-column>
+            <el-table-column
+              label="省排名"
+              prop="sowLivestockIncRank">
+            </el-table-column>
+          </el-table-column>
+          <el-table-column
+            label="MSY">
+            <el-table-column
+              label="MSY"
+              prop="sowMsy">
+            </el-table-column>
+            <el-table-column
+              label="省排名"
+              prop="sowMsyRank">
+            </el-table-column>
+          </el-table-column>
+          <el-table-column
+            prop="outStockCount"
+            label="今年累计出栏量">
+          </el-table-column>
+          <el-table-column
+            prop="outStockExpected"
+            label="预计年出栏量">
+          </el-table-column>
+          <el-table-column
+            prop="ainOutStock"
+            label="目标年出栏量">
+          </el-table-column>
+          <el-table-column
+            prop="finishPercent"
+            label="目标完成度">
+          </el-table-column>
+        </el-table>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  name: "collectData",
+  data () {
+    return {
+      tableData: []
+    }
+  },
+  methods: {
+    init () {
+      this.tableData = this.$route.params.row
+    },
+    // 回到数据分析页面
+    close () {
+      this.$router.push('/collectData')
+    }
+  },
+  mounted() {
+    this.init()
+  },
+}
+</script>
+
+<style scoped>
+.chartDiv {
+  margin: 10px;
+  margin-top: 20px;
+  border: 1px solid #ddd;
+  background-color: #fff;
+}
+.title {
+  background-color: rgba(243, 243, 243, 1);
+  height: 50px;
+  line-height: 50px;
+  padding: 0 50px;
+  font-size: 14px;
+  border-bottom: 1px solid #ddd;
+  display: flex;
+  flex-direction: row;
+  justify-content: space-between;
+}
+.right {
+  float: right;
+  margin-right: 20px;
+  font-size: 12px;
+}
+.box_table {
+  width: 100%;
+  box-sizing: border-box;
+  margin-top: 15px;
+  padding-right: 10px;
+  position: relative;
+  /*padding: 10px;*/
+}
+</style>

+ 173 - 0
src/views/collectData/update.vue

@@ -0,0 +1,173 @@
+<template>
+  <!-- 编辑牧场弹出框 -->
+  <el-dialog
+    :visible.sync="visible"
+    class="form">
+    <div slot="title" class="dialog-title">
+      编辑牧场
+    </div>
+    <el-form 
+      :model="form" 
+      :rules="formRule"
+      size="mini" 
+      label-position="left" 
+      label-width="135px" 
+      ref="form">
+      <el-form-item label="牧场名:" prop="farmName">
+        <el-input v-model="form.farmName" disabled></el-input>
+      </el-form-item>
+      <el-form-item label="MSY:" prop="sowMsy">
+        <el-input v-model="form.sowMsy"></el-input>
+      </el-form-item>
+      <el-form-item label="今年累计出栏量:" prop="outStockCount">
+        <el-input v-model="form.outStockCount"></el-input>
+      </el-form-item>
+      <el-form-item label="预计年出栏量:" prop="outStockExpected">
+        <el-input v-model="form.outStockExpected"></el-input>
+      </el-form-item>
+      <el-form-item label="目标年出栏量:" prop="ainOutStock">
+        <el-input v-model="form.ainOutStock"></el-input>
+      </el-form-item>
+    </el-form>
+    <div slot="footer" class="dialog-footer">
+      <el-button size="mini" plain @click="visible = false">取 消</el-button>
+      <el-button size="mini" type="success" @click="onSubmit">确 定</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+import {mapState} from 'vuex'
+export default {
+  data() {
+    return {
+      visible: false,
+      form: {
+        id: 0,
+        farmName: '',
+        sowMsy: '',
+        outStockCount: '',
+        outStockExpected: '',
+        ainOutStock: '',
+        create_time: '',
+        farmCode: '',
+        farmId: '',
+        finishPercent: '',
+        rank: '',
+        remark: '',
+        sowLivestock: '',
+        sowLivestockInc: '',
+        sowLivestockIncRank: '',
+        sowLivestockRank: '',
+        sowMsyRank: ''
+      },
+      formRule: {
+        sowMsy: [
+          { required: true, message: 'MSY不能为空', trigger: 'blur' }
+        ],
+        outStockCount: [
+          { required: true, message: '今年预计出栏量不能为空', trigger: 'blur' }
+        ],
+        outStockExpected: [
+          { required: true, message: '预计年出栏量不能为空', trigger: 'blur' }
+        ],
+        ainOutStock: [
+          { required: true, message: '目标年出栏量不能为空', trigger: 'blur' }
+        ]
+      },
+      msgFlag: false
+    }
+  },
+  computed: {
+    ...mapState(['baseUrl'])
+  },
+  methods: {
+    init (row) {
+      this.visible = true
+      for (const key in this.form) {
+        if (Object.hasOwnProperty.call(this.form, key)) {
+          this.form[key] = row[key]
+        }
+      }
+    },
+    // 确定按钮
+    onSubmit () {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.$http({
+            url: this.$http.adornUrl(`http://192.168.1.171:8210/management/sowranktable/update`),
+            method: 'post',
+            data: this.$http.adornData({
+              'id': this.form.id,
+              'sowMsy': parseFloat(this.form.sowMsy),
+              'outStockCount': parseInt(this.form.outStockCount),
+              'outStockExpected': parseInt(this.form.outStockExpected),
+              'ainOutStock': parseInt(this.form.ainOutStock),
+              'create_time': this.form.create_time,
+              'farmCode': this.form.farmCode,
+              'farmId': this.form.farmId,
+              'finishPercent': this.form.finishPercent,
+              'rank': this.form.rank,
+              'remark': this.form.remark,
+              'sowLivestock': this.form.sowLivestock,
+              'sowLivestockInc': this.form.sowLivestockInc,
+              'sowLivestockIncRank': this.form.sowLivestockIncRank,
+              'sowLivestockRank': this.form.sowLivestockRank,
+              'sowMsyRank': this.form.sowMsyRank,
+              'farmName': this.form.farmName
+            })
+          }).then(({data}) => {
+            if (data && data.code === 0) {
+              this.$refs['form'].resetFields()
+              this.visible = false
+              this.$emit('refreshData')
+              this.$message({
+                message: '操作成功',
+                type: 'success',
+                duration: 1500,
+                // onClose: () => {
+                //   this.visible = false
+                //   this.$emit('refreshDataList')
+                // }
+              })
+              // this.resetForm()
+              this.visible = false
+            } else {
+              this.$message.error(data.msg)
+            }
+          })
+        }
+      })
+      // this.visible = false
+    }
+  },
+}
+</script>
+<style>
+  .form {
+    margin-top: 100px;
+  }
+  .form .el-dialog {
+    border-radius: 5px;
+    width: 25%;
+  }
+  .form .el-dialog__header {
+    padding: 0;
+    border-radius: 5px;
+  }
+  .dialog-title {
+    background-color: #f3f3f3;
+    padding: 15px;
+    font-weight: 700;
+    border-bottom: 1px solid #ddd;
+  }
+  .form .el-dialog__body {
+    padding: 20px 60px;
+  }
+  .form .el-dialog__footer {
+    border-top: 1px solid #ddd;
+  }
+  .form .dialog-footer {
+    padding-right: 50px;
+    padding-top: 10px;
+  }
+</style>

+ 18 - 18
src/views/deviceAdmin/deviceAdmin.vue

@@ -9,25 +9,25 @@
     </div>
     <!-- 查询条件 -->
     <div class="conditions">
-      <el-form ref="searchForm" inline :model="searchForm" size="mini">
-        <el-form-item label="注册时间:" prop="registerStartTime">
+      <el-form ref="searchForm" inline :model="searchForm" size="mini" label-width="110px">
+        <el-form-item label="注册时间:" prop="registerStartTime" style="width: 270px">
           <!-- <el-input v-model="searchForm.registerTime" placeholder=""></el-input> -->
           <el-date-picker
             v-model="searchForm.registerStartTime"
             type="date"
             placeholder="选择日期"
-            style="width: 130px">
+            style="width: 150px">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="省市县:" prop="countyName">
+        <el-form-item label="省市县:" prop="countyName" style="width: 270px">
           <!-- 改用组件 -->
           <!-- FIXME: 等待组件,到底是 countName 还是对应的编码不清楚,但一定使用选择下拉框 -->
-          <el-input v-model="searchForm.countyName" placeholder="地县/编码"></el-input>
+          <el-input v-model="searchForm.countyName" placeholder="地县/编码" style="width: 150px"></el-input>
         </el-form-item>
-        <el-form-item label="牧场:" prop="farmCode">
+        <el-form-item label="牧场:" prop="farmCode" style="width: 270px">
           <!-- <el-input v-model="searchForm.farm" placeholder="牧场名/牧场编号"></el-input> -->
           <!-- FIXME: 牧场数据还没有,el-option 的具体内容也没修正  -->
-          <el-select v-model="searchForm.farmCode" style="width: 100px">
+          <el-select v-model="searchForm.farmCode" style="width: 150px">
             <el-option
               v-for="item in farmList"
               :key="item.id"
@@ -36,11 +36,11 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="栋舍:" prop="pigsty">
-          <el-input v-model="searchForm.pigsty" placeholder=""></el-input>
+        <el-form-item label="栋舍:" prop="pigsty" style="width: 270px">
+          <el-input v-model="searchForm.pigsty" placeholder="" style="width: 150px"></el-input>
         </el-form-item>
-        <el-form-item label="网络通信状态:" prop="networkStatus">
-          <el-select v-model="searchForm.networkStatus" style="width: 100px">
+        <el-form-item label="网络通信状态:" prop="networkStatus" style="width: 270px">
+          <el-select v-model="searchForm.networkStatus" style="width: 150px">
             <el-option
               v-for="item in networkList"
               :key="item.value"
@@ -49,8 +49,8 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="采集状态:" prop="acqStatus">
-          <el-select v-model="searchForm.acqStatus" style="width: 100px">
+        <el-form-item label="采集状态:" prop="acqStatus" style="width: 270px">
+          <el-select v-model="searchForm.acqStatus" style="width: 150px">
             <el-option
               v-for="item in acqList"
               :key="item.value"
@@ -59,8 +59,8 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="注销状态:" prop="canStatus">
-          <el-select v-model="searchForm.canStatus" style="width: 100px">
+        <el-form-item label="注销状态:" prop="canStatus" style="width: 270px">
+          <el-select v-model="searchForm.canStatus" style="width: 150px">
             <el-option
               v-for="item in canList"
               :key="item.value"
@@ -69,10 +69,10 @@
             </el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="设备编码:" prop="deviceCode">
-          <el-input v-model="searchForm.deviceCode" placeholder=""></el-input>
+        <el-form-item label="设备编码:" prop="deviceCode" style="width: 270px">
+          <el-input v-model="searchForm.deviceCode" placeholder="" style="width: 150px"></el-input>
         </el-form-item>
-        <el-form-item style="margin-left: 20px">
+        <el-form-item style="margin-left: 55px">
           <el-button plain @click="init">查询</el-button>
           <el-button plain type="info" @click="resetForm('searchForm')">清空</el-button>
         </el-form-item>