xsh 3 gadi atpakaļ
vecāks
revīzija
c481e68c21

+ 17 - 0
src/utils/apis/device-admin/deviceAdmin.js

@@ -6,3 +6,20 @@ export function getDeviceList(data) {
     params: data
   })
 }
+// 添加
+export function addDeviceList(data) {
+  return axios({
+    url: 'eartag/collectorRegister/add',
+    method: 'post',
+    data: data
+  })
+}
+
+// 删除
+export function delDeviceList(data) {
+  return axios({
+    url: 'eartag/collectorRegister/delete',
+    method: 'post',
+    data: data
+  })
+}

+ 16 - 0
src/utils/index.js

@@ -60,3 +60,19 @@ export const Throttle = (fn, t) => {
     }
   }
 };
+
+/* 新增递归拿到子节点 */
+export function getFilter(list, target) {
+  let childrenList = []
+  const targetList = list.filter((item) => {
+    if (item.id === target) {
+      return true
+    } else if (item.children && item.children.length) {
+      childrenList = childrenList.concat(getFilter(item.children, target))
+      return false
+    } else {
+      return false
+    }
+  })
+  return targetList.concat(childrenList)
+}

+ 1 - 1
src/views/SystemAdmin/UserAdmin.vue

@@ -69,7 +69,7 @@
           <el-table-column label="操作">
             <template slot-scope="scope">
               <el-button type="primary" v-if="hasPerm('user:edit')" size="mini" @click="edit(scope.row)">编辑</el-button>
-              <el-button type="success" style="margin-right: 5px" @click="handleFarm(scope.row)" size="mini" >分配牧场</el-button>
+<!--              <el-button type="success" style="margin-right: 5px" @click="handleFarm(scope.row)" size="mini" >分配牧场</el-button>-->
               <el-popconfirm
                   title=" 确定要删除这个用户吗?"
                   @confirm="del(scope.row)"

+ 180 - 10
src/views/basic-data/device-admin/DeviceAdmin.vue

@@ -37,7 +37,7 @@
         :listData="list"
         :tableItems="tableItems">
         <template #right>
-          <el-button type="primary" size="mini">新增设备</el-button>
+          <el-button type="primary" size="mini" @click="add">新增设备</el-button>
         </template>
         <template #stage="scope">
           <span>{{ getStage(scope.row.stage) }}</span>
@@ -50,9 +50,15 @@
           <span v-else style="color: red">异常</span>
         </template>
         <template #handler="scope">
-          <el-button type="text" @click="edit(scope.row)">编辑</el-button>
-          <el-divider direction="vertical"></el-divider>
-          <el-button type="text" style="color: red">删除</el-button>
+<!--          <el-button type="text" @click="edit(scope.row)">编辑</el-button>-->
+<!--          <el-divider direction="vertical"></el-divider>-->
+          <el-popconfirm
+            title=" 确定要删除这个区域吗?"
+            @confirm="del(scope.row)"
+          >
+            <el-button type="text" size="mini" slot="reference" style="color: red">删除</el-button>
+            >
+          </el-popconfirm>
         </template>
       </new-table>
       <table-footer
@@ -62,13 +68,57 @@
         @pageChange="pageChange"
       ></table-footer>
     </div>
+    <el-dialog
+      width="30%"
+      v-loading="formLoading"
+      element-loading-text="提交中,请稍后"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
+      :title="showType ? '编辑设备': '新增设备'"
+      :visible.sync="dialogVisible">
+      <el-form  :rules="rules" ref="ruleForm" label-width="100px" :model="devForm" size="mini">
+        <el-form-item label="设备编码" prop="deviceCode">
+          <el-input v-model="devForm.deviceCode"></el-input>
+        </el-form-item>
+        <el-form-item label="芯片编码" prop="registeCode">
+          <el-input v-model="devForm.registeCode"></el-input>
+        </el-form-item>
+        <el-form-item label="栋舍" prop="pigpenId">
+          <el-select v-model="devForm.pigpenId" @change="getUnitList">
+            <el-option v-for="item in penList" :key="item.id" :value="item.id" :label="item.pigpenName"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="单元" prop="unitId">
+          <el-select :disabled="selectUnit" v-model="devForm.unitId" @change="getUnitName">
+            <el-option v-for="item in unitList.children" :key="item.id" :value="item.id" :label="item.pigpenName"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="ip地址" prop="serverIp">
+          <el-input v-model="devForm.serverIp"></el-input>
+        </el-form-item>
+        <el-form-item label="端口号" prop="port">
+          <el-input v-model="devForm.port"></el-input>
+        </el-form-item>
+        <el-form-item label="阶段" prop="stage">
+          <el-select v-model="devForm.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>
+          <el-button @click="resetForm('ruleForm')">重置</el-button>
+          <el-button type="primary" @click="submitForm('ruleForm')">确定</el-button>
+        </el-form-item>
+      </el-form>
+    </el-dialog>
   </div>
 </template>
 <script>
 import { mapState, mapActions } from "vuex";
-import { getDeviceList } from "@/utils/apis/device-admin/deviceAdmin";
+import { getDeviceList, addDeviceList, delDeviceList } from "@/utils/apis/device-admin/deviceAdmin";
 import NewTable from "@/components/newTable/NewTable";
 import TableFooter from "@/components/TableFooter";
+import { basePigpenList } from "@/utils/apis/basic-data/houseAdmin";
+import { getFilter } from "@/utils";
 
 export default {
   name: 'DeviceAdmin',
@@ -100,13 +150,19 @@ export default {
         },
         {
           prop: "registerTime",
-          label: "注册时间",
+          label: "芯片编码",
           minWidth: "100",
           slotName: "registerTime",
         },
         {
+          prop: 'deviceCode',
+          label: '设备编码',
+          minWidth: "100",
+          slotName: "deviceCode",
+        },
+        {
           prop: "registeCode",
-          label: "设备编码",
+          label: "注册编码",
           minWidth: "100",
           slotName: "registeCode",
         },
@@ -148,7 +204,33 @@ export default {
           minWidth: "50",
           slotName: "handler",
         }
-      ]
+      ],
+      formLoading: false,
+      dialogVisible: false,
+      showType: false,
+      devForm: {
+        deviceCode: '',
+        pigpenId: '',
+        unitId: '',
+        serverIp: '',
+        port: '',
+        stage: '',
+        registeCode: '',
+      },
+      penList: [],
+      unitList: {},
+      selectUnit: true,
+      penName: '',
+      unitName: '',
+      rules: {
+        deviceCode: [{  required: true, message: '请输入设备编码', trigger: 'blur' }],
+        registeCode: [{  required: true, message: '请输入注册编码', trigger: 'blur' }],
+        pigpenId: [{  required: true, message: '请选择栋舍', trigger: 'change' }],
+        unitId: [{  required: true, message: '请选择单元', trigger: 'change' }],
+        serverIp: [{  required: true, message: '请输入ip', trigger: 'blur' }],
+        port: [{  required: true, message: '请输入端口号', trigger: 'blur' }],
+        stage: [{  required: true, message: '请选择阶段', trigger: 'change' }],
+      }
     }
   },
   methods: {
@@ -187,15 +269,103 @@ export default {
       });
       return data.label;
     },
-    edit() {}
+    add() {
+      this.dialogVisible = true;
+      this.showType = false;
+    },
+    edit() {},
+    // 拿到所有栋舍
+    initPen() {
+      let params = {
+        farmId: this.form.farm
+      }
+      basePigpenList(params).then(res => {
+        console.log(res)
+        if(res.code === 10000) {
+          this.penList = res.data.records;
+        }
+      })
+    },
+    getUnitList(val) {
+      this.unitList = getFilter(this.penList,val)[0];
+      let selectPlanClass = {};
+      selectPlanClass = this.penList.find((item) => {
+        return item.id === val
+      })
+      this.penName = selectPlanClass.pigpenName;
+      if(this.unitList.children.length < 0) {
+        this.$message.error('该栋舍下暂无单元!')
+        this.selectUnit = true;
+      } else {
+        this.selectUnit = false;
+      }
+    },
+    getUnitName(val) {
+      let selectPlanClass = {};
+      selectPlanClass = this.unitList.children.find((item) => {
+        return item.id === val
+      })
+      this.unitName = selectPlanClass.pigpenName;
+    },
+    submitForm(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          if(this.showType) {
+            return
+          } else {
+            this.formLoading = true;
+            let obj = {
+              penName: this.penName,
+              unitName: this.unitName,
+              farmId: this.form.farm
+            }
+            let params = Object.assign(this.devForm, obj);
+            addDeviceList(params).then(res => {
+              this.formLoading = false;
+              if(res.code === 10000) {
+                this.dialogVisible = false;
+                this.init();
+                this.$message.success(res.message);
+              } else {
+                this.$message.error(res.message);
+              }
+            }).catch(() => {
+              this.formLoading = false;
+            })
+          }
+        } else {
+          console.log('error submit!!');
+          return false;
+        }
+      });
+    },
+    resetForm(formName) {
+      this.$refs[formName].resetFields();
+    },
+    del(item) {
+      let ids = [item.id];
+      delDeviceList(ids).then(res => {
+        if(res.code === 10000) {
+          this.init()
+          this.$message.success('删除成功!');
+        } else {
+          this.message.error(res.message)
+        }
+      })
+    }
   },
   created() {
     this.userItem = JSON.parse(localStorage.getItem("gold_UserItem"));
     this.GetFarm()
   },
   mounted() {
-    this.form.farm = this.farmList[0].id;
+    if(this.userItem.type === 0) {
+      this.form.farm = this.farmList[0].id;
+    } else {
+      this.form.farm = parseInt(this.userItem.farmId);
+    }
     this.init();
+    this.initPen();
   },
 };
 </script>

+ 5 - 0
src/views/basic-data/house-admin/HouseAdmin.vue

@@ -151,6 +151,11 @@ export default {
       this.searchForm.farmId = this.farmList[0]?.id;
       this.modalForm2.farmId = this.farmList[0]?.id;
     }
+    // } else {
+    //   this.searchForm2.farmId = parseInt(this.form.farm);
+    //   this.searchForm.farmId = parseInt(this.form.farm);
+    //   this.modalForm2.farmId = parseInt(this.form.farm);
+    // }
     this.searchConfig = {
       formItemProp,
       searchForm: { ...this.searchForm1 },

+ 193 - 5
src/views/eartag-admin/device-status/DeviceStatus.vue

@@ -7,11 +7,199 @@
  * @FilePath: \goldenPig\src\views\eartag-admin\device-status\DeviceStatus.vue
 -->
 <template>
-  <div>
-    设备查看
-  </div>
+  <div class="device">
+      <el-card>
+        <el-form :inline="true" label-width="100px" size="mini" :model="form">
+          <el-form-item label="采集牧场" v-if="userItem.type !== 2">
+            <el-select v-model="form.farm">
+              <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="设备编码">
+            <el-input v-model="form.registeCode"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary">搜索</el-button>
+          </el-form-item>
+        </el-form>
+      </el-card>
+      <br>
+      <div>
+        <new-table
+          v-loading="loading"
+          :height="600"
+          :title="devTitle"
+          :listData="list"
+          :tableItems="tableItems">
+          <template #stage="scope">
+            <span>{{ getStage(scope.row.stage) }}</span>
+          </template>
+          <template #dong="scope">
+            <span>{{ scope.row.penName }}{{ scope.row.unitName }}</span>
+          </template>
+          <template #canStatus="scope">
+            <span v-if="scope.row.canStatus === 0" style="color: #52c41a">正常</span>
+            <span v-else style="color: red">异常</span>
+          </template>
+        </new-table>
+        <table-footer
+          :totals="total"
+          :size="pageSize"
+          @sizeChange="sizeChange"
+          @pageChange="pageChange"
+        ></table-footer>
+      </div>
+    </div>
 </template>
 <script>
-export default {};
+import { mapState, mapActions } from "vuex";
+import { getDeviceList } from "@/utils/apis/device-admin/deviceAdmin";
+import NewTable from "@/components/newTable/NewTable";
+import TableFooter from "@/components/TableFooter";
+export default {
+  components: {
+    NewTable,
+    TableFooter
+  },
+  computed: {
+    ...mapState(["stageList", "farmList"]),
+  },
+  data() {
+    return {
+      form: {
+        farm: '',
+        registeCode: '',
+      },
+      devTitle: '设备列表',
+      pageNum: 1,
+      pageSize: 20,
+      total: 0,
+      loading: true,
+      list: [],
+      tableItems: [
+        {
+          prop: "id",
+          label: "注册id",
+          minWidth: "50",
+          slotName: "id",
+        },
+        {
+          prop: "registerTime",
+          label: "芯片编码",
+          minWidth: "100",
+          slotName: "registerTime",
+        },
+        {
+          prop: 'deviceCode',
+          label: '设备编码',
+          minWidth: "100",
+          slotName: "deviceCode",
+        },
+        {
+          prop: "registeCode",
+          label: "注册编码",
+          minWidth: "100",
+          slotName: "registeCode",
+        },
+        {
+          prop: "farmName",
+          label: "牧场名",
+          minWidth: "100",
+          slotName: "farmName",
+        },
+        {
+          prop: "farmCode",
+          label: "牧场编码",
+          minWidth: "100",
+          slotName: "farmCode",
+        },
+        {
+          label: "牧场编码",
+          minWidth: "50",
+          slotName: "stage",
+        },
+        {
+          label: "栋舍",
+          minWidth: "100",
+          slotName: "dong",
+        },
+        {
+          prop: 'lastTime',
+          label: "最后上传时间",
+          minWidth: "100",
+          slotName: "lastTime",
+        },
+        {
+          label: "设备状态",
+          minWidth: "50",
+          slotName: "canStatus",
+        },
+      ],
+    }
+  },
+  methods: {
+    ...mapActions(["GetFarm"]),
+    // 修改size
+    sizeChange(val) {
+      this.size = val;
+      this.init();
+    },
+    // 修改页数
+    pageChange(val) {
+      this.pageSize = val;
+      this.init();
+    },
+    init() {
+      let params = {
+        farmId: this.form.farm,
+        pageNo: this.pageNum,
+        pageSize: this.pageSize
+      }
+      if(this.form.registeCode !== '') {
+        params.registeCode = this.form.registeCode
+      }
+      getDeviceList(params).then(res => {
+        this.loading = false
+        console.log(res)
+        if(res.code === 10000) {
+          this.list = res.data.records;
+          this.total = res.data.total;
+        }
+      })
+    },
+    getStage(id) {
+      let data = this.stageList.find((item) => {
+        return item.value == id;
+      });
+      return data.label;
+    },
+  },
+  created() {
+    this.userItem = JSON.parse(localStorage.getItem("gold_UserItem"));
+    this.GetFarm()
+    console.log(this.userItem)
+  },
+  mounted() {
+    if(this.userItem.type === 0) {
+      this.form.farm = this.farmList[0].id;
+    } else {
+      this.form.farm = parseInt(this.userItem.farmId);
+    }
+    this.init();
+  },
+};
 </script>
-<style scoped></style>
+<style scoped>
+.device{
+  box-sizing: border-box;
+  padding: 20px;
+}
+.x-from {
+  box-sizing: border-box;
+}
+</style>