瀏覽代碼

人员数据同步,设备编号加载等

xiao547607 5 年之前
父節點
當前提交
cdcd459cea

+ 15 - 11
src/api/base/deviceInfo.js

@@ -1,46 +1,50 @@
 import request from '@/utils/request'
 import constant from '@/constant'
 
-function pageList(formData){
+function pageList(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/pageList", formData);
 }
 
-function create(){
+function create() {
   return request.get(constant.serverUrl + "/base/deviceInfo/create");
 }
 
-function edit(id){
+function edit(id) {
   return request.get(constant.serverUrl + "/base/deviceInfo/edit/" + id);
 }
 
-function add(formModel){
-  return request.post(constant.serverUrl + "/base/deviceInfo/add", formModel,{
+function add(formModel) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/add", formModel, {
     headers: {
       "Content-Type": "application/json"
     }
   });
 }
 
-function update(formModel){  
-  return request.post(constant.serverUrl + "/base/deviceInfo/update", formModel,{
+function update(formModel) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/update", formModel, {
     headers: {
       "Content-Type": "application/json"
     }
   });
 }
 
-function remove(id){
+function remove(id) {
   return request.post(constant.serverUrl + "/base/deviceInfo/delete/" + id);
 }
 
-function batchRemove(idList){
-  return request.post(constant.serverUrl + "/base/deviceInfo/batchDelete",idList,{
+function batchRemove(idList) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/batchDelete", idList, {
     headers: {
       "Content-Type": "application/json"
     }
   });
 }
 
+function getByIpAddressAndPort(formData) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/getByIpAddressAndPort", formData);
+}
+
 export default {
-  create,edit,add,update,remove,batchRemove,pageList
+  create, edit, add, update, remove, batchRemove, pageList, getByIpAddressAndPort
 }

+ 6 - 1
src/api/base/personDeviceLog.js

@@ -5,6 +5,11 @@ function pageList(formData){
   return request.post(constant.serverUrl + "/personDeviceLog/pageList", formData);
 }
 
+function exportXls(formData) {
+  //导出xls
+  return request.post(constant.serverUrl + "/personDeviceLog/exportXls", formData);
+}
+
 export default {
-  pageList
+  pageList,exportXls
 }

+ 4 - 3
src/api/base/personDeviceRelation.js

@@ -41,7 +41,6 @@ function batchRemove(idList) {
   });
 }
 
-
 function isUnbindDeviceList(formData) {
   return request.post(constant.serverUrl + "/personDeviceRelation/isUnbindDeviceList", formData);
 }
@@ -51,9 +50,11 @@ function batchBindDevice(formData) {
 }
 
 function unbindDevice(formData) {
-  return request.post(constant.serverUrl + "/personDeviceRelation/unbindDevice",formData);
+  return request.post(constant.serverUrl + "/personDeviceRelation/unbindDevice", formData);
 }
 
+
+
 export default {
-  create, edit, add, update, remove, batchRemove, pageList,isUnbindDeviceList,batchBindDevice,unbindDevice
+  create, edit, add, update, remove, batchRemove, pageList, isUnbindDeviceList, batchBindDevice, unbindDevice
 }

+ 12 - 3
src/api/base/personInfo.js

@@ -42,9 +42,9 @@ function batchRemove(idList) {
   });
 }
 
-function exportXls(exportXls) {
+function exportXls(formData) {
   //导出xls
-  return request.post(constant.serverUrl + "/base/personInfo/exportXls",exportXls);
+  return request.post(constant.serverUrl + "/base/personInfo/exportXls", formData);
   //window.open(constant.serverUrl + "/base/personInfo/exportXls?token=" + getToken());
 }
 
@@ -68,7 +68,16 @@ function enabledGuest(formData) {
   return request.post(constant.serverUrl + "/base/personInfo/EnabledGuest", formData);
 }
 
+function dataSync(idList){
+  //数据同步
+  return request.post(constant.serverUrl + "/base/personInfo/dataSync", idList, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
 export default {
   pageList, create, edit, add, update, remove, batchRemove, exportXls,
-  enabledFace,enabledCard,enabledApp,enabledGuest
+  enabledFace, enabledCard, enabledApp, enabledGuest,dataSync
 }

+ 4 - 4
src/views/base/companyInfo-list.vue

@@ -55,11 +55,11 @@
     >
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column prop="sortNo" label="序号" width="80"></el-table-column>
-      <el-table-column prop="logo" label="公司logo" width="=80">
+      <el-table-column prop="logo" label="公司logo" width="120">
         <template slot-scope="{row}">
           <a :href="row.logo" target="_blank">
             <el-avatar
-              size="small"
+              :size="80"
               :src="row.logo+'?x-oss-process=image/resize,m_lfit,h_100,w_100'"
               :key="row.id"
             ></el-avatar>
@@ -67,11 +67,11 @@
         </template>
       </el-table-column>
       <el-table-column prop="name" label="公司名称" width="180"></el-table-column>
-      <el-table-column prop="position1Name" label="一级位置" width="180"></el-table-column>
+      <!-- <el-table-column prop="position1Name" label="一级位置" width="180"></el-table-column>
       <el-table-column prop="position2Name" label="二级位置" width="180"></el-table-column>
       <el-table-column prop="position3Name" label="三级位置" width="180"></el-table-column>
       <el-table-column prop="position4Name" label="四级位置" width="180"></el-table-column>
-      <el-table-column prop="position5Name" label="五级位置" width="180"></el-table-column>
+      <el-table-column prop="position5Name" label="五级位置" width="180"></el-table-column> -->
       <el-table-column prop="remark" sort-by="remark_" label="备注" width="350"></el-table-column>
       <el-table-column label="操作" width="150" fixed="right">
         <template slot-scope="{row}">

+ 41 - 8
src/views/base/deviceInfo-detail.vue

@@ -42,19 +42,24 @@
               ></el-input>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="二维码地址" prop="codeAddress">
-              <el-input v-model="formModel.codeAddress" placeholder="请输入二维码地址" style="width:200px"></el-input>
-            </el-form-item>
-          </el-col>
           <el-col :span="12">
             <el-form-item label="ip地址" prop="ipAddress">
-              <el-input v-model="formModel.ipAddress" placeholder="请输入ip地址" style="width:200px"></el-input>
+              <el-input
+                v-model="formModel.ipAddress"
+                @blur="queryDeviceNo"
+                placeholder="请输入ip地址"
+                style="width:200px"
+              ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item label="端口" prop="port">
-              <el-input v-model="formModel.port" placeholder="请输入端口" style="width:200px"></el-input>
+              <el-input
+                v-model="formModel.port"
+                @blur="queryDeviceNo"
+                placeholder="请输入端口"
+                style="width:200px"
+              ></el-input>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -69,6 +74,11 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="二维码地址" prop="codeAddress">
+              <el-input v-model="formModel.codeAddress" placeholder="请输入二维码地址" style="width:200px"></el-input>
+            </el-form-item>
+          </el-col>
         </el-row>
       </el-form>
     </div>
@@ -112,7 +122,8 @@ export default {
       },
       showDialog: true,
       loading: false,
-      submitting: false
+      submitting: false,
+      canQuery: true
     };
   },
   methods: {
@@ -153,6 +164,28 @@ export default {
           });
         }
       });
+    },
+    queryDeviceNo() {
+      var self = this;
+      if (self.canQuery) {
+        self.canQuery = false;
+        var formData = new FormData();
+        formData.append("ipAddress", self.formModel.ipAddress);
+        formData.append("port", self.formModel.port);
+        deviceInfoApi.getByIpAddressAndPort(formData).then(function(response) {
+          var jsonData = response.data;
+          setTimeout(() => {
+            self.canQuery = true;
+            //延迟1秒
+          }, 1000);
+          if (jsonData.result) {
+            if (jsonData.data != null) {
+              let deviceNo = jsonData.data.deviceNo;
+              self.formModel.deviceNo = deviceNo;
+            }
+          }
+        });
+      }
     }
   },
   mounted: function() {

+ 106 - 44
src/views/base/personDeviceLog-list.vue

@@ -14,45 +14,68 @@
       要resetFields起作用,必须配置:model和prop
     -->
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
-      <el-form-item label="检测时间" prop="beginTime">
-        <el-date-picker
-          v-model="queryModel.timeRanges"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          value-format="yyyy-MM-dd"
-          format="yyyy 年 MM 月 dd 日"
-          size="mini" 
-        ></el-date-picker>
-      </el-form-item>
-      <el-form-item label="人员姓名" prop="personName">
-        <el-input type="text" size="mini" v-model="queryModel.personName"></el-input>
-      </el-form-item>
-      <el-form-item label="设备编号" prop="deviceNo">
-        <el-input type="text" size="mini" v-model="queryModel.deviceNo"></el-input>
-      </el-form-item>
-      <el-form-item label="设备别称" prop="aliasName">
-        <el-input type="text" size="mini" v-model="queryModel.aliasName"></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          size="mini"
-          icon="ios-search"
-          @click="changePage(1)"
-          :loading="loading"
-        >查询</el-button>&nbsp;
-        <el-button
-          type="info"
-          size="mini"
-          style="margin-left: 8px"
-          @click="handleReset('queryForm')"
-        >重置</el-button>&nbsp;
-      </el-form-item>
+      <div>
+        <el-form-item label="记录时间" prop="timeRanges">
+          <el-date-picker
+            v-model="queryModel.timeRanges"
+            type="daterange"
+            range-separator="至"
+            start-placeholder="开始日期"
+            end-placeholder="结束日期"
+            value-format="yyyy-MM-dd"
+            format="yyyy 年 MM 月 dd 日"
+            size="mini"
+          ></el-date-picker>
+        </el-form-item>
+
+        <el-form-item label="人员姓名" prop="personName">
+          <el-input type="text" size="mini" v-model="queryModel.personName"></el-input>
+        </el-form-item>
+
+        <el-form-item label="温度区间" prop="temperatureBegin">
+          <el-input
+            type="text"
+            size="mini"
+            style="width:50px;"
+            v-model="queryModel.temperatureBegin"
+          ></el-input>-
+          <el-input type="text" size="mini" style="width:50px;" v-model="queryModel.temperatureEnd"></el-input>
+        </el-form-item>
+      </div>
+      <div>
+        <el-form-item label="设备编号" prop="deviceNo">
+          <el-input type="text" size="mini" v-model="queryModel.deviceNo"></el-input>
+        </el-form-item>
+        <el-form-item label="设备别称" prop="aliasName">
+          <el-input type="text" size="mini" v-model="queryModel.aliasName"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            type="primary"
+            size="mini"
+            icon="ios-search"
+            @click="changePage(1)"
+            :loading="loading"
+          >查询</el-button>&nbsp;
+          <el-button
+            type="info"
+            size="mini"
+            style="margin-left: 8px"
+            @click="handleReset('queryForm')"
+          >重置</el-button>&nbsp;
+        </el-form-item>
+      </div>
     </el-form>
     <el-divider></el-divider>
-    <el-row class="button-group"></el-row>
+    <el-row class="button-group">
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-circle-plus"
+        @click="downloadXls"
+      >导出数据</el-button>
+    </el-row>
     <el-table
       :data="tableData"
       style="min-height:400px;"
@@ -62,11 +85,11 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column prop="recordTime" label="记录时间" width="180"></el-table-column>
-      <el-table-column prop="faceImage" width="80">
+      <el-table-column prop="faceImage" width="120">
         <template slot-scope="{row}">
           <a :href="row.faceImage" target="_blank">
             <el-avatar
-              size="small"
+              :size="80"
               :src="row.faceImage+'?x-oss-process=image/resize,m_lfit,h_100,w_100'"
               :key="row.id"
             ></el-avatar>
@@ -78,13 +101,13 @@
       </el-table-column>
       <el-table-column prop="temperature" label="测温度数" width="120"></el-table-column>
       <!-- <el-table-column prop="matchStatus" label="匹配状态" width="180"></el-table-column> -->
-      <el-table-column prop="matchMsg" label="开门类型" width="150"></el-table-column>
+      <el-table-column prop="matchMsg" label="匹配状态" width="250"></el-table-column>
       <!-- <el-table-column prop="matchFaceId" label="匹配的人脸id" width="180"></el-table-column> -->
-      <el-table-column prop="position1" label="一级位置" width="150"></el-table-column>
+      <!-- <el-table-column prop="position1" label="一级位置" width="150"></el-table-column>
       <el-table-column prop="position2" label="二级位置" width="150"></el-table-column>
       <el-table-column prop="position3" label="三级位置" width="150"></el-table-column>
       <el-table-column prop="position4" label="四级位置" width="150"></el-table-column>
-      <el-table-column prop="position5" label="五级位置" width="150"></el-table-column>
+      <el-table-column prop="position5" label="五级位置" width="150"></el-table-column>-->
       <el-table-column prop="deviceNo" label="设备编号" width="220"></el-table-column>
       <el-table-column prop="device" label="设备别称" width="220">
         <template slot-scope="{row}">{{row.device == null ? "" : row.device.aliasName}}</template>
@@ -119,7 +142,10 @@ export default {
         matchStatus: "",
         timeRanges: "",
         faceImage: "",
-        position:""
+        position: "",
+        temperatureBegin: "",
+        temperatureEnd: "",
+        temperatureRanges: ""
       },
       loading: false,
       tableData: [],
@@ -157,6 +183,11 @@ export default {
       formData.append("companyId", self.queryModel.companyId);
       formData.append("position", self.queryModel.position);
 
+      formData.append(
+        "temperatureRanges",
+        self.queryModel.temperatureBegin + "," + self.queryModel.temperatureEnd
+      );
+
       if (this.field != null) {
         formData.append("field", this.field);
       }
@@ -195,7 +226,9 @@ export default {
     },
     handleReset(name) {
       this.$refs[name].resetFields();
-      this.queryModel.timeRanges="";
+      //this.queryModel.timeRanges = "";
+      this.queryModel.temperatureBegin = "";
+      this.queryModel.temperatureEnd = "";
     },
     onDetailModalClose(refreshed) {
       //保存成功后回调
@@ -204,6 +237,35 @@ export default {
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
+    },
+    downloadXls() {
+      //导出
+      var self = this;
+      var formData = new FormData();
+
+      formData.append("faceImage", self.queryModel.faceImage);
+      formData.append("timeRanges", self.queryModel.timeRanges);
+      formData.append("matchStatus", self.queryModel.matchStatus);
+      formData.append("personName", self.queryModel.personName);
+      formData.append("deviceNo", self.queryModel.deviceNo);
+      formData.append("aliasName", self.queryModel.aliasName);
+      formData.append("companyId", self.queryModel.companyId);
+      formData.append("position", self.queryModel.position);
+
+      personDeviceLogApi.exportXls(formData).then(function(response) {
+        var jsonData = response.data;
+        if (jsonData.result) {
+          if (jsonData.data != null) {
+            //下载有错误信息提示的报表
+            self.$message({
+              showClose: true,
+              dangerouslyUseHTMLString: true,
+              message: `<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
+              duration: 30000
+            });
+          }
+        }
+      });
     }
   },
   mounted: function() {

+ 93 - 51
src/views/base/personInfo-list.vue

@@ -14,46 +14,50 @@
       要resetFields起作用,必须配置:model和prop
     -->
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
-      <el-form-item label="所属企业" prop="companyId">
-        <el-select
-          v-model="queryModel.companyId"
-          size="mini"
-          filterable
-          placeholder="请选择"
-          style="width:300px"
-        >
-          <el-option
-            v-for="company in companyResult"
-            :key="company.id"
-            :label="company.name"
-            :value="company.id"
-          ></el-option>
-        </el-select>
-      </el-form-item>
-      <el-form-item label="姓名" prop="name">
-        <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
-      </el-form-item>
-      <el-form-item label="手机号" prop="phone">
-        <el-input type="text" size="mini" v-model="queryModel.phone"></el-input>
-      </el-form-item>
-      <el-form-item label="身份证" prop="idCard">
-        <el-input type="text" size="mini" v-model="queryModel.idCard"></el-input>
-      </el-form-item>
-      <el-form-item>
-        <el-button
-          type="primary"
-          size="mini"
-          icon="ios-search"
-          @click="changePage(1)"
-          :loading="loading"
-        >查询</el-button>&nbsp;
-        <el-button
-          type="info"
-          size="mini"
-          style="margin-left: 8px"
-          @click="handleReset('queryForm')"
-        >重置</el-button>&nbsp;
-      </el-form-item>
+      <div>
+        <el-form-item label="姓名" prop="name">
+          <el-input type="text" size="mini" v-model="queryModel.name"></el-input>
+        </el-form-item>
+        <el-form-item label="手机号" prop="phone">
+          <el-input type="text" size="mini" v-model="queryModel.phone"></el-input>
+        </el-form-item>
+        <el-form-item label="身份证" prop="idCard">
+          <el-input type="text" size="mini" v-model="queryModel.idCard"></el-input>
+        </el-form-item>
+        <el-form-item>
+          <el-button
+            type="primary"
+            size="mini"
+            icon="ios-search"
+            @click="changePage(1)"
+            :loading="loading"
+          >查询</el-button>&nbsp;
+          <el-button
+            type="info"
+            size="mini"
+            style="margin-left: 8px"
+            @click="handleReset('queryForm')"
+          >重置</el-button>&nbsp;
+        </el-form-item>
+      </div>
+      <div>
+        <el-form-item label="所属企业" prop="companyId">
+          <el-select
+            v-model="queryModel.companyId"
+            size="mini"
+            filterable
+            placeholder="请选择"
+            style="width:300px"
+          >
+            <el-option
+              v-for="company in companyResult"
+              :key="company.id"
+              :label="company.name"
+              :value="company.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+      </div>
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
@@ -79,7 +83,15 @@
         plain
         icon="el-icon-circle-plus"
         @click="downloadAll"
-      >导出全部数据</el-button>
+      >导出数据</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-circle-plus"
+        :disabled="multipleSelection.length==0"
+        @click="dataSync"
+      >数据同步</el-button>
     </el-row>
     <el-table
       :data="tableData"
@@ -91,11 +103,11 @@
     >
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column prop="companyName" label="企业" width="180"></el-table-column>
-      <el-table-column prop="faceImageUrl" label="人员照片" width="80">
+      <el-table-column prop="faceImageUrl" label="人员照片" width="110">
         <template slot-scope="{row}">
           <a :href="row.faceImageUrl" target="_blank">
             <el-avatar
-              size="small"
+              :size="80"
               :src="row.faceImageUrl+'?x-oss-process=image/resize,m_lfit,h_100,w_100'"
               :key="row.id"
             ></el-avatar>
@@ -157,11 +169,11 @@
           ></el-switch>
         </template>
       </el-table-column>
-      <el-table-column prop="position1" :label="position1" width="180"></el-table-column>
+      <!-- <el-table-column prop="position1" :label="position1" width="180"></el-table-column>
       <el-table-column prop="position2" :label="position2" width="180"></el-table-column>
       <el-table-column prop="position3" :label="position3" width="180"></el-table-column>
       <el-table-column prop="position4" :label="position4" width="180"></el-table-column>
-      <el-table-column prop="position5" :label="position5" width="180"></el-table-column>
+      <el-table-column prop="position5" :label="position5" width="180"></el-table-column>-->
       <el-table-column label="操作" width="450" fixed="right">
         <template slot-scope="{row}">
           <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
@@ -533,25 +545,24 @@ export default {
     },
     downloadAll() {
       //导出
+      var self = this;
       var formData = new FormData();
       formData.append("companyId", self.queryModel.companyId);
       formData.append("name", self.queryModel.name);
       formData.append("phone", self.queryModel.phone);
       formData.append("idCard", self.queryModel.idCard);
 
+      this.changePage(1);
+
       personInfoApi.exportXls(formData).then(function(response) {
         var jsonData = response.data;
         if (jsonData.result) {
-          console.log(jsonData);
           if (jsonData.data != null) {
             //下载有错误信息提示的报表
-            //window.open(response.data);
-            this.$message({
+            self.$message({
               showClose: true,
               dangerouslyUseHTMLString: true,
-              message:
-                response.message +
-                `,<a href="${response.data}" target="_blank">点击下载未导入的数据报表</a>&nbsp;`,
+              message: `<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
               duration: 30000
             });
           }
@@ -583,6 +594,37 @@ export default {
           message: "操作过快!"
         });
       }
+    },
+    dataSync() {
+      var self = this;
+
+      var idList = this.multipleSelection.map(record => {
+        return record.id;
+      });
+
+      this.$confirm("是否确认同步选中项?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        personInfoApi.dataSync(idList).then(function(response) {
+          var jsonData = response.data;
+
+          if (jsonData.result) {
+            self.changePage(self.pageIndex);
+
+            self.$message({
+              type: "success",
+              message: "同步成功!"
+            });
+          } else {
+            self.$message({
+              type: "warning",
+              message: jsonData.message
+            });
+          }
+        });
+      });
     }
   },
   async mounted() {