xsh 3 tahun lalu
induk
melakukan
f859d5c8ae

+ 31 - 29
src/components/HeaderElement.vue

@@ -9,19 +9,19 @@
       </el-col>
       <el-col :span="10" :offset="9" style="height: 100%">
         <div class="flex">
-          <div class="user" style="width: 180px;">
-            <div>
-              <el-select @change="onChange" size="mini" v-model="farmId">
-                <el-option
-                  v-for="item in getFarmList"
-                  :key="item.id"
-                  :label="item.farmName"
-                  :value="item.id"
-                ></el-option>
-              </el-select>
-            </div>
-          </div>
-          <el-divider direction="vertical"></el-divider>
+<!--          <div class="user" style="width: 180px;">-->
+<!--            <div>-->
+<!--              <el-select @change="onChange" size="mini" v-model="farmId">-->
+<!--                <el-option-->
+<!--                  v-for="item in getFarmList"-->
+<!--                  :key="item.id"-->
+<!--                  :label="item.farmName"-->
+<!--                  :value="item.id"-->
+<!--                ></el-option>-->
+<!--              </el-select>-->
+<!--            </div>-->
+<!--          </div>-->
+<!--          <el-divider direction="vertical"></el-divider>-->
           <div class="user" style="width: 250px;">
             <div>
               <el-switch
@@ -42,22 +42,23 @@
               <i class="el-icon-user-solid" style="font-size: 28px"></i>
             </div>
             <div>
-              <el-popover placement="bottom" width="400" trigger="hover">
-                <div style="padding: 10px">
-                  <div style="width: 100%;">
-                    <span style="color: #BBBBBB;">账户信息</span>
-                    <span class="user-right">账户设置</span>
-                  </div>
-                  <el-divider></el-divider>
-                  <!--                    <ul>-->
-                  <!--                      <li>职位: <span class="user-color">厂长</span></li>-->
-                  <!--                      <li>本次登录: <span class="user-color">厂长</span></li>-->
-                  <!--                      <li>本次登录: <span class="user-color">厂长</span></li>-->
-                  <!--                      <li>上次登录: <span class="user-color">厂长</span></li>-->
-                  <!--                    </ul>-->
-                </div>
-                <span slot="reference">{{ userName }}</span>
-              </el-popover>
+              <span>{{ userName }}</span>
+<!--              <el-popover placement="bottom" width="400" trigger="hover">-->
+<!--                <div style="padding: 10px">-->
+<!--                  <div style="width: 100%;">-->
+<!--                    <span style="color: #BBBBBB;">账户信息</span>-->
+<!--                    <span class="user-right">账户设置</span>-->
+<!--                  </div>-->
+<!--                  <el-divider></el-divider>-->
+<!--                  &lt;!&ndash;                    <ul>&ndash;&gt;-->
+<!--                  &lt;!&ndash;                      <li>职位: <span class="user-color">厂长</span></li>&ndash;&gt;-->
+<!--                  &lt;!&ndash;                      <li>本次登录: <span class="user-color">厂长</span></li>&ndash;&gt;-->
+<!--                  &lt;!&ndash;                      <li>本次登录: <span class="user-color">厂长</span></li>&ndash;&gt;-->
+<!--                  &lt;!&ndash;                      <li>上次登录: <span class="user-color">厂长</span></li>&ndash;&gt;-->
+<!--                  &lt;!&ndash;                    </ul>&ndash;&gt;-->
+<!--                </div>-->
+<!--                <span slot="reference">{{ userName }}</span>-->
+<!--              </el-popover>-->
             </div>
           </div>
           <el-divider direction="vertical"></el-divider>
@@ -161,6 +162,7 @@ export default {
       localStorage.removeItem("gold_accessToken");
       localStorage.removeItem("gold_UserId");
       localStorage.removeItem("gold_lastFarmId");
+      localStorage.removeItem('gold_UserItem');
       this.$router.replace("/login");
     },
     // 拿到farmid

+ 4 - 5
src/components/newTable/NewTable.vue

@@ -78,25 +78,24 @@ export default {
   props: {
     title: {
       type: String,
-      required: true,
     },
     listData: {
       type: Array,
-      required: true,
+      default: () => []
     },
     shows: {
       type: Object,
       // defaultProp =>  需要特定条件的字段
-      default: () => ({ showIndex: true, showSelect: true, defaultProp: null }),
+      default: () => ({ showIndex: false, showSelect: false, defaultProp: null }),
     },
     tableItems: {
       type: Array,
-      required: true,
+      default: () => []
     },
     height: {
       // 表格高度控制
       type: Number,
-      default: 500,
+      default: 600,
     },
   },
   components: {

+ 48 - 2
src/store/index.js

@@ -12,7 +12,7 @@ import {
   getMyButton,
   // getFarm
 } from '../utils/api'
-import { baseFarmAll } from "@/utils/apis/basic-data/archivesAdmin.js";
+import { getEarFarmList } from "../utils/apis/eartag-data/eartagData";
 
 Vue.use(Vuex)
 
@@ -27,6 +27,46 @@ export default new Vuex.Store({
     farmId: '',
     farmList: [],
     userName: '',
+    stageList: [ // 阶段
+      {
+        value: 1,
+        label: '配怀'
+      },
+      {
+        value: 2,
+        label: '分娩'
+      },
+      {
+        value: 3,
+        label: '保育'
+      },
+      {
+        value: 4,
+        label: '育成育肥'
+      },
+      {
+        value: 5,
+        label: '空怀'
+      },
+      {
+        value: 6,
+        label: '后备母猪'
+      },
+      {
+        value: 7,
+        label: '公猪'
+      },
+      {
+        value: 8,
+        label: '病死猪场内收集'
+      },
+      {
+        value: 9,
+        label: '病死猪无害化'
+      }
+    ],
+    // 判断用户类型
+    userType: 0,
   },
   mutations: {
     setColor(state, data) {
@@ -46,6 +86,9 @@ export default new Vuex.Store({
     },
     SET_USERNAME(state, data) {
       state.userName = data;
+    },
+    SET_USERTYPE(state, data) {
+      state.userType = data
     }
   },
   actions: {
@@ -61,6 +104,9 @@ export default new Vuex.Store({
     setUserNameAsync(context, data) {
       context.commit('SET_USERNAME', data)
     },
+    setUserTypeAsync(context, data) {
+      context.commit('SET_USERTYPE', data)
+    },
     // 获取用户按钮权限
     GetButtons({ commit }) {
       return new Promise((resolve, reject) => {
@@ -79,7 +125,7 @@ export default new Vuex.Store({
     // 获取牧场列表
     GetFarm({ commit }){
       return new Promise((resolve, reject) => {
-        baseFarmAll().then(res => {
+        getEarFarmList({type: 2}).then(res => {
           if (res && res.code === 10000) {
             commit('SET_FARMLIST', res.data);
             resolve(res.data);

+ 18 - 0
src/utils/apis/eartag-data/eartagData.js

@@ -0,0 +1,18 @@
+import axios from "../../http";
+
+// 拿到牧场
+export function getEarFarmList(data) {
+  return axios({
+    url: 'eartag/baseFarmInfo/listByType',
+    method: 'get',
+    params: data
+  })
+}
+//
+export function getEarTagList (data) {
+  return axios({
+    url: 'anquisition/manager/eartagdata/listIndex',
+    method: 'post',
+    data: data
+  })
+}

+ 4 - 3
src/utils/http.js

@@ -26,7 +26,7 @@ instance.interceptors.request.use(
     // 后台根据携带的token判断用户的登录情况,并返回给我们对应的状态码
     // 而后我们可以在响应拦截器中,根据状态码进行一些统一的操作。
     const token = localStorage.getItem('gold_accessToken')
-    const lastFarmId = Number(localStorage.getItem('gold_lastFarmId'));
+    // const lastFarmId = Number(localStorage.getItem('gold_lastFarmId'));
     token && (config.headers.accessToken = token)
     removePending(config); //在一个ajax发送前执行一下取消操作
     config.cancelToken = new cancelToken((c)=>{
@@ -34,8 +34,8 @@ instance.interceptors.request.use(
       pending.push({ u: config.url + '&' + config.method, f: c });
     });
 
-    let data = config.data || config.params || {}
-    data.farmId = lastFarmId
+    // let data = config.data || config.params || {}
+    // data.farmId = lastFarmId
     return config
   },
   error => Promise.error(error)
@@ -91,6 +91,7 @@ const errorHandle = (status, other) => {
       localStorage.removeItem('gold_accessToken');
       localStorage.removeItem('gold_UserName');
       localStorage.removeItem('gold_UserId');
+      localStorage.removeItem('gold_UserItem');
       setTimeout(() => {
         toLogin();
       }, 1000);

+ 1 - 0
src/views/Login/Login.vue

@@ -70,6 +70,7 @@ export default {
           localStorage.setItem('gold_accessToken', res.data.token);
           localStorage.setItem('gold_UserName', res.data.accountName);
           localStorage.setItem('gold_UserId', res.data.id);
+          localStorage.setItem('gold_UserItem', JSON.stringify(res.data));
           this.$message.success('登录成功');
           getFarmId().then(res => {
             if(res.code === 10000) {

+ 3 - 1
src/views/MainLayout.vue

@@ -51,16 +51,18 @@ export default {
     ...mapState(['color'])
   },
   methods: {
-    ...mapActions(['setModeAsync', 'setColorAsync', 'GetButtons', 'GetFarm', 'setUserNameAsync']),
+    ...mapActions(['setModeAsync', 'setColorAsync', 'GetButtons', 'GetFarm', 'setUserNameAsync', 'setUserTypeAsync']),
     init() {
       let params = {
         id: localStorage.getItem('gold_UserId'),
       }
       findOne(params).then(res => {
         if(res.code === 10000) {
+          console.log(res);
           this.setModeAsync(res.data.mode);
           this.setColorAsync(res.data.color);
           this.setUserNameAsync(res.data.userName)
+          this.setUserTypeAsync(res.data.type)
         }
       })
     },

+ 267 - 78
src/views/eartag-admin/eartag-data/EartagData.vue

@@ -8,99 +8,288 @@
 -->
 <template>
   <div class="individual-data">
-    <search-cpn v-bind="searchConfig" @handleSearch="handleSearchEvent">
-      <!-- 耳根温度 -->
-      <template #earTemp="scope">
-        <el-input
-          v-model="searchForm2[scope.item.field][0]"
-          :placeholder="scope.item.placeholder[0]"
-          style="width: calc(50% - 16px)"
-        ></el-input>
-        &nbsp;—&nbsp;
-        <el-input
-          v-model="searchForm2[scope.item.field][1]"
-          :placeholder="scope.item.placeholder[1]"
-          style="width: calc(50% - 16px)"
-        ></el-input>
-      </template>
-
-      <!-- 环境温度 -->
-      <template #envTemp="scope">
-        <el-input
-          v-model="searchForm2[scope.item.field][0]"
-          :placeholder="scope.item.placeholder[0]"
-          style="width: calc(50% - 16px)"
-        ></el-input>
-        &nbsp;—&nbsp;
-        <el-input
-          v-model="searchForm2[scope.item.field][1]"
-          :placeholder="scope.item.placeholder[1]"
-          style="width: calc(50% - 16px)"
-        ></el-input>
-      </template>
-
-      <!-- 信号强度 -->
-      <template #signal="scope">
-        <el-input
-          v-model="searchForm2[scope.item.field][0]"
-          :placeholder="scope.item.placeholder[0]"
-          style="width: calc(50% - 16px)"
-        ></el-input>
-        &nbsp;—&nbsp;
-        <el-input
-          v-model="searchForm2[scope.item.field][1]"
-          :placeholder="scope.item.placeholder[1]"
-          style="width: calc(50% - 16px)"
-        ></el-input>
-      </template>
-    </search-cpn>
-
-    <table-cpn v-bind="tableConfig"></table-cpn>
+    <div class="xForm">
+      <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-select>
+        </el-form-item>
+        <el-form-item label="采集时间">
+          <el-date-picker
+            type="datetimerange"
+            v-model="form.date"
+            range-separator="至"
+            :clearable="false"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="yyyy-MM-dd HH:mm:ss"
+            style="width: 100%;">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="耳标号:">
+          <el-input v-model="form.eartagNo"></el-input>
+        </el-form-item>
+        <el-form-item label="阶段:">
+          <el-select v-model="form.stage">
+            <el-option v-for="item in stageList" :key="item.value" :value="item.value" :label="item.label"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="基站编码">
+          <el-input v-model="form.deviceCode"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button @click="search" type="primary">查询</el-button>
+          <el-button @click="reset">重置</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div>
+      <new-table v-loading="loading" :height="600" :title="earTitle" :listData="list" :tableItems="tableItems">
+        <template #earTemp="scope">
+          <el-tag style="width: 65px;">{{scope.row.earTemp}}℃</el-tag>
+        </template>
+        <template #envTemp="scope">
+          <span>{{scope.row.envTemp}}℃</span>
+        </template>
+        <template #rssi="scope">
+          <span>-{{scope.row.rssi}}db</span>
+        </template>
+        <template #stage="scope">
+          <span>{{getStage(scope.row.stage)}}</span>
+        </template>
+        <template #dong="scope">
+          <span>{{scope.row.penName}}{{scope.row.unitName}}</span>
+        </template>
+        <template #hander="scope">
+          <el-button size="mini" type="text" @click="jump(scope.row)">查看详情</el-button>
+        </template>
+      </new-table>
+      <table-footer
+        :totals="total"
+        :size="size"
+        @sizeChange="sizeChange"
+        @pageChange="pageChange"></table-footer>
+    </div>
   </div>
 </template>
 <script>
-// 搜索
-import SearchCpn from "@/components/search-cpn";
-import { formItemProp } from "./config/search.config";
 
-// 表格
-import TableCpn from "@/components/table-cpn";
-import { propList } from "./config/table.config";
+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: {
-    SearchCpn,
-    TableCpn,
+    NewTable,
+    TableFooter
+  },
+  computed: {
+    ...mapState(['stageList', 'farmList'])
   },
   data() {
     return {
-      searchConfig: {},
-      searchForm1: {
-        farmId: "",
-        date: [],
-        eartag: "",
-        deviceCode: "",
+      form: {
+        farm: '',
+        date: [
+          timeDate(new Date()) + ' 00:00:00',
+          timeDate(new Date()) + ' 23:59:59',
+        ],
+        eartagNo: '',
+        stage: '',
+        deviceCode: '',
       },
-      searchForm2: {
-        earTemp: ["", ""],
-        envTemp: ["", ""],
-        signal: ["", ""],
-      },
-      tableConfig: {},
+      total: 0,
+      pageNum: 1,
+      size: 10,
+      earTitle: '耳标数据列表',
+      list: [],
+      loading: false,
+      tableItems: [
+        {
+          prop: 'time',
+          label: '采集时间',
+          minWidth: '100',
+          slotName: 'time'
+        },
+        {
+          prop: 'eartagNo',
+          label: '耳标号',
+          minWidth: '100',
+          slotName: 'eartagNo'
+        },
+        {
+          label: '耳根温度',
+          minWidth: '50',
+          slotName: 'earTemp'
+        },
+        {
+          label: '环境温度',
+          minWidth: '50',
+          slotName: 'envTemp'
+        },
+        {
+          prop: 'exercise',
+          label: '运动量',
+          minWidth: '50',
+          slotName: 'exercise'
+        },
+        {
+          prop: 'bat',
+          label: '电池电量',
+          minWidth: '50',
+          slotName: 'bat'
+        },
+        {
+          label: '信号强度',
+          minWidth: '50',
+          slotName: 'rssi'
+        },
+        {
+          label: '阶段',
+          minWidth: '50',
+          slotName: 'stage'
+        },
+        {
+          label: '栋舍',
+          minWidth: '100',
+          slotName: 'dong'
+        },
+        {
+          prop: 'deviceCode',
+          label: '采集器编码',
+          minWidth: '100',
+          slotName: 'deviceCode'
+        },
+        {
+          prop: 'registeCode',
+          label: '机器编码',
+          minWidth: '100',
+          slotName: 'registeCode'
+        },
+        {
+          prop: 'orgName',
+          label: '牧场名字',
+          minWidth: '100',
+          slotName: 'orgName'
+        },
+        {
+          label: '操作',
+          minWidth: '50',
+          slotName: 'hander'
+        }
+      ],
+      userItem: null,
     };
   },
-  created() {
-    this.searchConfig = { formItemProp, searchForm: this.searchForm1 };
-    this.tableConfig = { propList };
-  },
   methods: {
-    handleSearchEvent(params) {
-      console.log("点击了查询按钮,获得的参数", {
-        ...params,
-        ...this.searchForm2,
-      });
+    // 修改size
+    sizeChange(val) {
+      this.size = val;
+      this.init();
+    },
+    // 修改页数
+    pageChange(val) {
+      this.pageNum= val;
+      this.init();
     },
+    ...mapActions(['GetFarm']),
+    search() {
+      this.loading = true;
+      this.pageNum = 1;
+      let params = {
+        curPage: this.pageNum,
+        limit: this.size,
+      }
+      if(this.form.eartagNo !== '') {
+        params.eartagNo = this.form.eartagNo;
+      }
+      if(this.form.date.length > 0) {
+        params.starTime = this.form.date[0];
+        params.endTime = this.form.date[1]
+      }
+      if(this.form.stage !== '') {
+        params.state = this.form.state;
+      }
+      if(this.form.deviceCode !== '') {
+        params.deviceCode = this.form.deviceCode
+      }
+      getEarTagList(params).then(res => {
+        if(res.code === 0) {
+          this.list = res.page.list;
+          this.total = res.page.totalCount;
+        }
+        this.loading = false;
+      })
+        .catch(() => {
+          this.loading = false;
+        })
+    },
+    init() {
+      this.loading = true;
+      let params = {
+        curPage: 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) {
+          this.list = res.page.list;
+          this.total = res.page.totalCount;
+        }
+        this.loading = false;
+      })
+      .catch(() => {
+        this.loading = false;
+      })
+    },
+    getStage(id) {
+       let data = this.stageList.find(item => {
+         return item.value == id
+      })
+      return data.label
+    },
+    jump() {},
+    reset() {
+      this.form =  {
+        farm: '',
+        date: [
+          timeDate(new Date()) + ' 00:00:00',
+          timeDate(new Date()) + ' 23:59:59',
+        ],
+        eartagNo: '',
+        stage: '',
+        deviceCode: '',
+      }
+    },
+  },
+  created() {
+    this.userItem = JSON.parse(localStorage.getItem('gold_UserItem'))
+  },
+  mounted() {
+    this.init()
+    this.GetFarm();
   },
 };
 </script>
-<style scoped></style>
+<style scoped>
+.individual-data {
+  box-sizing: border-box;
+}
+.xForm {
+  box-sizing: border-box;
+  padding: 20px;
+  background-color: #fff;
+}
+/deep/ .el-table__body-wrapper::-webkit-scrollbar {
+  width: 6px;
+  height: 6px;
+}
+/deep/ .el-table__body-wrapper::-webkit-scrollbar-thumb {
+  background-color: #ddd;
+  border-radius: 3px;
+}
+</style>

+ 0 - 56
src/views/eartag-admin/eartag-data/config/search.config.js

@@ -1,56 +0,0 @@
-/*
- * @Author: your name
- * @Date: 2022-01-06 14:44:20
- * @LastEditTime: 2022-01-06 19:41:06
- * @LastEditors: Please set LastEditors
- * @Description: 搜索组件的配置
- * @FilePath: \goldenPig\src\views\summary-data\individual-data\search.config.js
- */
-export const formItemProp = [
-  {
-    label: '牧场:',
-    type: 'select',
-    field: 'farmId',
-    placeholder: '请选择牧场',
-    options: [],
-  },
-  {
-    label: '采集时间:',
-    type: 'datePicker',
-    field: 'date',
-    placeholder: ['开始日期', '结束日期']
-  },
-  {
-    label: '耳标号:',
-    type: 'input',
-    field: 'eartag',
-    placeholder: '请输入耳标号'
-  },
-  {
-    label: '耳根温度(℃):',
-    type: 'custom',
-    field: 'earTemp',
-    placeholder: ['请输入数字', '请输入数字'],
-    slotName: 'earTemp'
-  },
-  {
-    label: '环境温度(℃):',
-    type: 'custom',
-    field: 'envTemp',
-    placeholder: ['请输入数字', '请输入数字'],
-    slotName: 'envTemp'
-  },
-  {
-    label: '信号强度(-db):',
-    type: 'custom',
-    field: 'signal',
-    placeholder: ['请输入数字', '请输入数字'],
-    slotName: 'signal'
-  },
-  {
-    label: '采集器编码:',
-    type: 'input',
-    field: 'deviceCode',
-    placeholder: '请输入编码'
-  }
-]

+ 0 - 80
src/views/eartag-admin/eartag-data/config/table.config.js

@@ -1,80 +0,0 @@
-/*
- * @Author: your name
- * @Date: 2022-01-07 14:43:27
- * @LastEditTime: 2022-01-07 15:20:25
- * @LastEditors: Please set LastEditors
- * @Description: 个体数据 - 表格数据
- * @FilePath: \goldenPig\src\views\summary-data\individual-data\config\table.config.js
- */
-export const propList = [
-  {
-    label: '采集时间',
-    width: '120px',
-    prop: 'acqTime',
-    slotName: 'acqTime'
-  },
-  {
-    label: '耳标号',
-    prop: 'eartag',
-    slotName: 'eartag'
-  },
-  {
-    label: '配标时间',
-    prop: 'tagTime',
-    slotName: 'tagTime'
-  },
-  {
-    label: '配标日龄',
-    prop: 'tagDays',
-    slotName: 'tagDays'
-  },
-  {
-    label: '日龄',
-    prop: 'days',
-    slotName: 'days'
-  },
-  {
-    label: '耳根温度',
-    prop: 'earTemp',
-    slotName: 'earTemp'
-  },
-  {
-    label: '环境温度',
-    prop: 'envTemp',
-    slotName: 'envTemp'
-  },
-  {
-    label: '运动量',
-    prop: 'sport',
-    slotName: 'sport'
-  },
-  {
-    label: '电池电量',
-    prop: 'electricity',
-    slotName: 'electricity'
-  },
-  {
-    label: '信号强度',
-    prop: 'signal',
-    slotName: 'signal'
-  },
-  {
-    label: '阶段',
-    prop: 'stage',
-    slotName: 'stage'
-  },
-  {
-    label: '栋舍',
-    prop: 'house',
-    slotName: 'house'
-  },
-  {
-    label: '采集器编码',
-    prop: 'deviceCode',
-    slotName: 'deviceCode'
-  },
-  {
-    label: '操作',
-    slotName: 'handler'
-  }
-]