xsh 3 years ago
parent
commit
768dd680ac

+ 19 - 15
src/components/SideMenu.vue

@@ -22,22 +22,24 @@
           @click="jump(item)"
         >
           <template slot="title">
-            <span>{{ item.title }}</span>
+            <span v-if="item.ifShow">{{ item.title }}</span>
           </template>
         </el-menu-item>
       </el-menu>
       <div v-show="isShow && activeName !== '首页'" class="subsidemenu">
         <div class="menu-header">{{ selectItem.title }}</div>
         <ul class="menu-item-children">
-          <li
-            v-for="item in selectItem.children"
-            class="menuChildren"
-            :style="{ color: item.url == activeUrl ? color : '#999' }"
-            @click="go(item)"
-            :key="item.id"
-          >
-            {{ item.title }}
-          </li>
+          <template  v-for="item in selectItem.children">
+            <li
+              v-if="item.ifShow"
+              class="menuChildren"
+              :style="{ color: item.url == activeUrl ? color : '#999' }"
+              @click="go(item)"
+              :key="item.id"
+            >
+              {{ item.title }}
+            </li>
+          </template>
         </ul>
       </div>
     </div>
@@ -57,12 +59,14 @@
             :index="item.url"
           >
             <span slot="title">{{ item.title }}</span>
-            <el-menu-item
-              v-for="list in item.children"
-              :key="list.id"
-              :index="list.url"
+            <template  v-for="list in item.children">
+              <el-menu-item
+                v-if="item.ifShow"
+                :key="list.id"
+                :index="list.url"
               >{{ list.title }}</el-menu-item
-            >
+              >
+            </template>
           </el-submenu>
           <el-menu-item :key="item.id" v-else :index="item.url">{{
             item.title

+ 11 - 1
src/router/ChildrenRouters.js

@@ -64,6 +64,16 @@ const childrenRouters = [
       parentName: '耳标管理'
     }
   },
+  {
+    path: '/earTagDetail',
+    name: 'EartagDetail',
+    component: () => import('@/views/eartag-admin/eartag-detail/EartagDetail.vue'),
+    meta: {
+      title: '耳标数据详情',
+      permission: 'earTagDetail',
+      parentName: '耳标管理'
+    }
+  },
 
   /*
   *
@@ -116,7 +126,7 @@ const childrenRouters = [
       parentName: '基础资料'
     }
   },
-  
+
   /*
   *
   * 系统管理

+ 9 - 0
src/utils/apis/eartag-detail/earTagDetail.js

@@ -0,0 +1,9 @@
+import axios from "../../http";
+
+export function getEarTagDetail(data) {
+  return  axios({
+    url: 'anquisition/manager/eartagdata/listEartagDeatils',
+    method: 'post',
+    data: data
+  })
+}

+ 8 - 24
src/views/SystemAdmin/MenuAdmin.vue

@@ -80,6 +80,9 @@
         <el-form-item size="mini" v-else label="权限标识" :label-width="formLabelWidth" prop="permission">
           <el-input v-model="form.permission" autocomplete="off"></el-input>
         </el-form-item>
+        <el-form-item label="是否显示" v-if="form.weight === 0" :label-width="formLabelWidth">
+          <el-switch v-model="form.ifShow"></el-switch>
+        </el-form-item>
         <el-form-item size="mini" label="排序" :label-width="formLabelWidth">
           <el-input v-model="form.sort" autocomplete="off"></el-input>
         </el-form-item>
@@ -111,6 +114,7 @@ export default {
         sort: '',
         weight: 0,
         permission: '',
+        ifShow: true,
       },
       formLabelWidth: '90px',
       rules: {
@@ -152,6 +156,7 @@ export default {
               sort: this.form.sort,
               weight: this.form.weight,
               permission: this.form.permission,
+              ifShow: this.form.ifShow
             }
             addMenu(params)
                 .then(res => {
@@ -179,6 +184,7 @@ export default {
       this.form.sort = data.sort;
       this.form.permission = data.permission;
       this.form.weight = data.weight;
+      this.form.ifShow = data.ifShow;
     },
     addMenu() {
       this.dialogFormVisible = true;
@@ -201,6 +207,7 @@ export default {
         sort: this.form.sort,
         permission: this.form.permission,
         weight: this.form.weight,
+        ifShow: this.form.ifShow
       };
       editMenu(params)
           .then(res => {
@@ -221,18 +228,11 @@ export default {
       this.form.sort = '';
       this.form.weight = 0;
       this.form.permission = '';
+      this.form.ifShow = true;
       this.showType = false;
       this.dialogFormVisible = false
     },
     init() {
-      // getMenu()
-      //     .then(res => {
-      //       if(res.code === 10000) {
-      //         // this.tableData = res.data;
-      //         // console.log(res.data)
-      //       }
-      //     })
-
       let params = {
         userId: localStorage.getItem('gold_UserId')
       }
@@ -252,22 +252,6 @@ export default {
           ]
         }
       })
-      // getMenuList().then(res => {
-      //   if(res.code === 10000) {
-      //     // this.menuTreeData = [
-      //     //   {
-      //     //     id: -1,
-      //     //     parentId: 0,
-      //     //     title: '顶级',
-      //     //     value: 0,
-      //     //     pid: 0,
-      //     //     weight: 0,
-      //     //     children: res.data,
-      //     //   }
-      //     // ]
-      //     // console.log(res)
-      //   }
-      // })
     }
   },
   mounted() {

+ 16 - 17
src/views/eartag-admin/eartag-data/EartagData.vue

@@ -12,7 +12,7 @@
       <el-form :inline="true" label-width="80px" size="mini" :model="form">
         <el-form-item label="采集牧场" v-if="userItem.type !== 2">
           <el-select v-model="form.farm">
-            <el-option></el-option>
+            <el-option v-for="item in farmList" :key="item.id" :value="item.id" :label="item.farmName"></el-option>
           </el-select>
         </el-form-item>
         <el-form-item label="采集时间">
@@ -79,7 +79,6 @@ import { getEarTagList } from "@/utils/apis/eartag-data/eartagData";
 import { mapState, mapActions } from "vuex";
 import NewTable from "@/components/newTable/NewTable";
 import TableFooter from "@/components/TableFooter";
-import {timeDate} from "@/utils";
 
 export default {
   components: {
@@ -93,10 +92,7 @@ export default {
     return {
       form: {
         farm: '',
-        date: [
-          timeDate(new Date()) + ' 00:00:00',
-          timeDate(new Date()) + ' 23:59:59',
-        ],
+        date: [],
         eartagNo: '',
         stage: '',
         deviceCode: '',
@@ -200,7 +196,7 @@ export default {
       this.loading = true;
       this.pageNum = 1;
       let params = {
-        curPage: this.pageNum,
+        page: this.pageNum,
         limit: this.size,
       }
       if(this.form.eartagNo !== '') {
@@ -230,10 +226,8 @@ export default {
     init() {
       this.loading = true;
       let params = {
-        curPage: this.pageNum,
+        page: this.pageNum,
         limit: this.size,
-        starTime: '2021-01-17 00:00:00',
-        endTime: '2022-01-17 23:59:59'
       }
       getEarTagList(params).then(res => {
         if(res.code === 0) {
@@ -252,14 +246,18 @@ export default {
       })
       return data.label
     },
-    jump() {},
+    jump(item) {
+      this.$router.push({
+        path: '/earTagDetail',
+        query: {
+          id: item.eartagNo
+        }
+      });
+    },
     reset() {
       this.form =  {
-        farm: '',
-        date: [
-          timeDate(new Date()) + ' 00:00:00',
-          timeDate(new Date()) + ' 23:59:59',
-        ],
+        farm: this.farmList[0].id,
+        date: [],
         eartagNo: '',
         stage: '',
         deviceCode: '',
@@ -268,10 +266,11 @@ export default {
   },
   created() {
     this.userItem = JSON.parse(localStorage.getItem('gold_UserItem'))
+    this.GetFarm();
   },
   mounted() {
     this.init()
-    this.GetFarm();
+    this.form.farm = this.farmList[0].id;
   },
 };
 </script>

+ 180 - 0
src/views/eartag-admin/eartag-detail/EartagDetail.vue

@@ -0,0 +1,180 @@
+<template>
+  <div class="eartagdetail">
+    <el-card class="kuang">
+      <div slot="header">
+        <el-row :gutter="20">
+          <el-col :span="16">
+            <span>温度曲线</span>
+          </el-col>
+          <el-col :span="8">
+            <el-date-picker
+              @change="onSelect"
+              size="mini"
+              type="datetimerange"
+              v-model="date"
+              range-separator="至"
+              :clearable="false"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;">
+            </el-date-picker>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="kuang-body">
+        <template v-if="timeList.length > 0">
+          <chart-temp :env-list="envList" :time-list="timeList" :temp-list="tempList" :averange-list="averangeList"></chart-temp>
+        </template>
+        <template v-else>
+          <el-empty style="height: 490px" description="暂无数据"></el-empty>
+        </template>
+      </div>
+    </el-card>
+    <br/>
+    <el-card class="kuang">
+      <div slot="header">
+        <el-row :gutter="20">
+          <el-col :span="16">
+            <span>耳标电量</span>
+          </el-col>
+          <el-col :span="8">
+            <el-date-picker
+              @change="onSelect"
+              size="mini"
+              type="datetimerange"
+              v-model="date"
+              range-separator="至"
+              :clearable="false"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;">
+            </el-date-picker>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="kuang-body">
+        <template v-if="timeList.length > 0">
+          <chart-dls :time-list="timeList" :dl-list="dlList"></chart-dls>
+        </template>
+        <template v-else>
+          <el-empty style="height: 490px" description="暂无数据"></el-empty>
+        </template>
+      </div>
+    </el-card>
+    <br/>
+    <el-card class="kuang">
+      <div slot="header">
+        <el-row :gutter="20">
+          <el-col :span="16">
+            <span>运动量</span>
+          </el-col>
+          <el-col :span="8">
+            <el-date-picker
+              @change="onSelect"
+              size="mini"
+              type="datetimerange"
+              v-model="date"
+              range-separator="至"
+              :clearable="false"
+              start-placeholder="开始日期"
+              end-placeholder="结束日期"
+              value-format="yyyy-MM-dd HH:mm:ss"
+              style="width: 100%;">
+            </el-date-picker>
+          </el-col>
+        </el-row>
+      </div>
+      <div class="kuang-body">
+        <template v-if="timeList.length > 0">
+          <chart-ydl :time-list="timeList" :ydl-list="ydlList"></chart-ydl>
+        </template>
+        <template v-else>
+          <el-empty style="height: 490px" description="暂无数据"></el-empty>
+        </template>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import { getEarTagDetail } from "@/utils/apis/eartag-detail/earTagDetail";
+import ChartTemp from "./chart/ChartTemp";
+import ChartDls from "./chart/ChartDls";
+import ChartYdl from "./chart/ChartYdl";
+export default {
+  name: "EartagDetail",
+  components: {
+    ChartTemp,
+    ChartDls,
+    ChartYdl
+  },
+  data() {
+    return {
+      date: [],
+      tempList: [],
+      timeList: [],
+      envList: [],
+      averangeList: [],
+      dlList: [],
+      ydlList: [],
+      eartagNo: '',
+    }
+  },
+  methods: {
+    init() {
+      let params = {
+        eartagNo: this.eartagNo,
+      }
+      getEarTagDetail(params).then(res => {
+        if(res.code === 0) {
+          this.timeList = res.data.timeList;
+          this.tempList = res.data.earTempList;
+          this.envList = res.data.environmentTempList;
+          this.dlList = res.data.electricList;
+          this.ydlList = res.data.exerciseList;
+        }
+      })
+    },
+    onSelect() {
+      let params = {
+        eartagNo: this.eartagNo,
+        startTime: this.date[0],
+        endTime: this.date[1]
+      }
+      getEarTagDetail(params).then(res => {
+        if(res.code === 0) {
+          this.timeList = res.data.timeList;
+          this.tempList = res.data.earTempList;
+          this.envList = res.data.environmentTempList;
+          this.dlList = res.data.electricList;
+          this.ydlList = res.data.exerciseList;
+        }
+      })
+    }
+  },
+  mounted() {
+    this.eartagNo = this.$route.query.id;
+    this.init()
+  }
+}
+</script>
+
+<style scoped>
+  .eartagdetail {
+    box-sizing: border-box;
+    padding: 20px;
+  }
+  .kuang {
+    width: 100%;
+    height: 600px;
+    background: #fff;
+    border-radius: 2px;
+  }
+  .kuang-body {
+    box-sizing: border-box;
+    width: 100%;
+    height: 490px;
+  }
+</style>

+ 136 - 0
src/views/eartag-admin/eartag-detail/chart/ChartDls.vue

@@ -0,0 +1,136 @@
+<template>
+  <div id="chart-dls" style="width: 100%; height: 100%"></div>
+</template>
+
+<script>
+export default {
+  name: "ChartDls",
+  data() {
+    return {
+      myCharts: null
+    }
+  },
+  props: {
+    dlList: {
+      type: Array,
+      default: () => [],
+    },
+    timeList: {
+      type: Array,
+      default: () => [],
+    }
+  },
+  watch: {
+    timeList: {
+      handler(newVal) {
+        if(newVal) {
+          this.myCharts.clear();
+          this.init();
+        }
+      },
+      deep: true,
+    }
+  },
+  methods: {
+    init() {
+      let that = this;
+      let options = {
+          legend: {
+            data: ['电量'],
+            x: 'center',
+            y: '5%',
+          },
+          tooltip: {
+            trigger: 'axis',
+            // formatter: '{b} <br/>{a0}: {c0}℃',
+            // position(pt) {
+            //   return [pt[0], '10%'];
+            // },
+          },
+          dataZoom: [{
+            type: 'inside',
+            start: 90,
+            end: 100,
+          }, {
+            start: 0,
+            end: 10,
+            handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+            handleSize: '80%',
+            handleStyle: {
+              color: '#fff',
+              shadowBlur: 3,
+              shadowColor: 'rgba(0, 0, 0, 0.6)',
+              shadowOffsetX: 2,
+              shadowOffsetY: 2,
+            },
+          }],
+          grid: {
+            left: '2%',
+            right: '4%',
+            bottom: '12%',
+            containLabel: true,
+          },
+          xAxis: {
+            type: 'category',
+            boundaryGap: false,
+            data: that.timeList,
+            axisLine: {
+              show: true,
+              lineStyle: {
+                color: "#aaa",
+              }
+            },
+            axisLabel: {
+              color: '#aaa'
+            }
+          },
+          yAxis: {
+            type: 'value',
+            name: '单位:%',
+            boundaryGap: [0, '100%'],
+            max: 100,
+            axisLine: {       //y轴
+              show: false
+            },
+            axisTick: {
+              show: false,
+            },
+            splitLine:{
+              show:false
+            },
+            axisLabel: {
+              color: '#aaa'
+            }
+          },
+          series: [
+            {
+              name: '电量',
+              type: 'line',
+              smooth: true,
+              // symbol: 'none',
+              sampling: 'average',
+              itemStyle: {
+                normal: {
+                  color: '#7ED3F4', // 改变折线点的颜色
+                },
+              },
+              data: that.dlList,
+            },
+          ],
+        }
+      this.myCharts.setOption(options);
+    }
+  },
+  mounted() {
+    this.myCharts = this.$echarts.init(document.getElementById('chart-dls'));
+    this.init();
+    window.onresize = () => {
+      this.myCharts.resize();
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 176 - 0
src/views/eartag-admin/eartag-detail/chart/ChartTemp.vue

@@ -0,0 +1,176 @@
+<template>
+  <div id="chart-temp" style="width: 100%; height: 100%"></div>
+</template>
+
+<script>
+export default {
+  name: "ChartTemp",
+  data() {
+    return {
+      myCharts: null
+    }
+  },
+  props: {
+    tempList: {
+      type: Array,
+      default: () => []
+    },
+    timeList: {
+      type: Array,
+      default: () => []
+    },
+    envList: {
+      type: Array,
+      default: () => []
+    },
+    averangeList: {
+      type: Array,
+      default: () => []
+    }
+  },
+  watch: {
+    timeList: {
+      handler(newVal) {
+        if(newVal) {
+          this.myCharts.clear();
+          this.init();
+        }
+      },
+      deep: true,
+    }
+  },
+  methods: {
+    init() {
+      let that = this;
+      let options = {
+        legend: {
+          data: ['耳根温度', '环境温度', '群体平均温度'],
+          x: 'center',
+          y: '5%',
+        },
+        tooltip: {
+          trigger: 'axis',
+          // formatter: '{b} <br/>{a0}: {c0}℃',
+          // position(pt) {
+          //   return [pt[0], '10%'];
+          // },
+        },
+        dataZoom: [{
+          type: 'inside',
+          start: 60,
+          end: 100,
+        }, {
+          start: 0,
+          end: 10,
+          handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+          handleSize: '80%',
+          handleStyle: {
+            color: '#fff',
+            shadowBlur: 3,
+            shadowColor: 'rgba(0, 0, 0, 0.6)',
+            shadowOffsetX: 2,
+            shadowOffsetY: 2,
+          },
+        }],
+        grid: {
+          left: '2%',
+          right: '4%',
+          bottom: '12%',
+          containLabel: true,
+        },
+        xAxis: {
+          type: 'category',
+          boundaryGap: false,
+          data: that.timeList,
+          axisLine: {
+            show: true,
+            lineStyle: {
+              color: "#aaa",
+            }
+          },
+          axisLabel: {
+            color: '#aaa'
+          }
+        },
+        yAxis: {
+          type: 'value',
+          name: '单位:℃',
+          boundaryGap: [0, '100%'],
+          axisLine: {       //y轴
+            show: false
+          },
+          axisTick: {
+            show: false,
+          },
+          splitLine:{
+            show:false
+          },
+          axisLabel: {
+            color: '#aaa'
+          }
+        },
+        series: [
+          {
+            name: '耳根温度',
+            type: 'line',
+            smooth: true,
+            // symbol: 'none',
+            sampling: 'average',
+            itemStyle: {
+              normal: {
+                color: '#7ED3F4', // 改变折线点的颜色
+                // label: { // 显示数值
+                //   show: true
+                // }
+              },
+            },
+            data: that.tempList,
+          },
+          {
+            name: '环境温度',
+            type: 'line',
+            smooth: true,
+            sampling: 'average',
+            itemStyle: {
+              normal: {
+                color: '#7387F3', // 改变折线点的颜色
+                // label: { // 显示数值
+                //   show: true
+                // }
+              },
+            },
+            data: that.envList,
+          },
+          {
+            name: '群体平均温度',
+            type: 'line',
+            smooth: true,
+            sampling: 'average',
+            itemStyle: {
+              normal: {
+                color: '#3CF488', // 改变折线点的颜色
+                // label: { // 显示数值
+                //   show: true
+                // }
+              },
+            },
+            data: that.averangeList,
+          },
+        ],
+      }
+      this.myCharts.setOption(options);
+    }
+  },
+  mounted() {
+    this.myCharts = this.$echarts.init(document.getElementById('chart-temp'));
+    this.init();
+    window.onresize = () => {
+      this.myCharts.resize();
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>

+ 128 - 0
src/views/eartag-admin/eartag-detail/chart/ChartYdl.vue

@@ -0,0 +1,128 @@
+<template>
+  <div id="chart-ydl" style="width: 100%; height: 100%"></div>
+</template>
+
+<script>
+export default {
+  name: "ChartYdl",
+  data() {
+    return {
+      myCharts: null
+    }
+  },
+  props: {
+    ydlList: {
+      type: Array,
+      default: () => []
+    },
+    timeList: {
+      type: Array,
+      default: () => []
+    }
+  },
+  watch: {
+    timeList: {
+      handler(newVal) {
+        if(newVal) {
+          this.myCharts.clear();
+          this.init();
+        }
+      },
+      deep: true,
+    }
+  },
+  methods: {
+    init() {
+      let that = this;
+      let options = {
+        legend: {
+          data: ['运动量'],
+          x: 'center',
+          y: '5%',
+        },
+        tooltip: {
+          trigger: 'axis',
+          // formatter: '{b} <br/>{a0}: {c0}℃',
+          // position(pt) {
+          //   return [pt[0], '10%'];
+          // },
+        },
+        color: ['#7387F3'],
+        dataZoom: [{
+          type: 'inside',
+          start: 60,
+          end: 100,
+        }, {
+          start: 0,
+          end: 10,
+          handleIcon: 'M10.7,11.9v-1.3H9.3v1.3c-4.9,0.3-8.8,4.4-8.8,9.4c0,5,3.9,9.1,8.8,9.4v1.3h1.3v-1.3c4.9-0.3,8.8-4.4,8.8-9.4C19.5,16.3,15.6,12.2,10.7,11.9z M13.3,24.4H6.7V23h6.6V24.4z M13.3,19.6H6.7v-1.4h6.6V19.6z',
+          handleSize: '80%',
+          handleStyle: {
+            color: '#fff',
+            shadowBlur: 3,
+            shadowColor: 'rgba(0, 0, 0, 0.6)',
+            shadowOffsetX: 2,
+            shadowOffsetY: 2,
+          },
+        }],
+        grid: {
+          left: '2%',
+          right: '4%',
+          bottom: '12%',
+          containLabel: true,
+        },
+        xAxis: {
+          type: 'category',
+          boundaryGap: false,
+          data: that.timeList,
+          axisLine: {
+            show: true,
+            lineStyle: {
+              color: "#aaa",
+            }
+          },
+          axisLabel: {
+            color: '#aaa'
+          }
+        },
+        yAxis: {
+          type: 'value',
+          boundaryGap: [0, '100%'],
+          axisLine: {       //y轴
+            show: false
+          },
+          axisTick: {
+            show: false,
+          },
+          splitLine:{
+            show:false
+          },
+          axisLabel: {
+            color: '#aaa'
+          }
+        },
+        series: [
+          {
+            name: '运动量',
+            type: 'bar',
+            // symbol: 'none',
+            data: that.ydlList,
+          },
+        ],
+      }
+      this.myCharts.setOption(options);
+    }
+  },
+  mounted() {
+    this.myCharts = this.$echarts.init(document.getElementById('chart-ydl'));
+    this.init();
+    window.onresize = () => {
+      this.myCharts.resize();
+    }
+  }
+}
+</script>
+
+<style scoped>
+
+</style>