Browse Source

增加查看设备中照片接口。

zhengqiang 5 năm trước cách đây
mục cha
commit
67fcc3e2bf

+ 5 - 1
src/api/base/deviceInfo.js

@@ -60,8 +60,12 @@ function query(formData) {
   return request.post(constant.serverUrl + "/base/deviceInfo/query", formData);
   return request.post(constant.serverUrl + "/base/deviceInfo/query", formData);
 }
 }
 
 
+function reboot(formData) {
+  return request.post(constant.serverUrl + "/base/deviceInfo/reboot", formData);
+}
+
 
 
 export default {
 export default {
   create, edit, add, update, remove, batchRemove, pageList, getByIpAddressAndPort, list,
   create, edit, add, update, remove, batchRemove, pageList, getByIpAddressAndPort, list,
-  getDeviceRule, saveDeviceRule, query
+  getDeviceRule, saveDeviceRule, query, reboot
 }
 }

+ 22 - 5
src/api/base/personDeviceRelation.js

@@ -50,12 +50,12 @@ function batchBindDevice(formData) {
   return request.post(constant.serverUrl + "/personDeviceRelation/batchBindDevice", formData);
   return request.post(constant.serverUrl + "/personDeviceRelation/batchBindDevice", formData);
 }
 }
 
 
-function batchBindPerson(formData){
+function batchBindPerson(formData) {
   //多人员绑定设备
   //多人员绑定设备
   return request.post(constant.serverUrl + "/personDeviceRelation/batchBindPerson", formData);
   return request.post(constant.serverUrl + "/personDeviceRelation/batchBindPerson", formData);
 }
 }
 
 
-function batchUnBindPerson(formData){
+function batchUnBindPerson(formData) {
   //多人员绑定设备
   //多人员绑定设备
   return request.post(constant.serverUrl + "/personDeviceRelation/batchUnBindPerson", formData);
   return request.post(constant.serverUrl + "/personDeviceRelation/batchUnBindPerson", formData);
 }
 }
@@ -80,9 +80,26 @@ function devicePersonsSync(formData) {
   return request.post(constant.serverUrl + "/personDeviceRelation/devicePersonsSync", formData);
   return request.post(constant.serverUrl + "/personDeviceRelation/devicePersonsSync", formData);
 }
 }
 
 
+function updateIsWrite(formData) {
+  //更新用户图片是否保存在设备上
+  return request.post(constant.serverUrl + "/personDeviceRelation/updateIsWrite", formData);
+}
+
+
+function updatePersonIsWrite(formData) {
+  //更新单个用户图片状态
+  return request.post(constant.serverUrl + "/personDeviceRelation/updatePersonIsWrite", formData);
+}
+
+function devicesPersonSync(formData) {
+  //数据同步-多设备单用户
+  return request.post(constant.serverUrl + "/personDeviceRelation/devicesPersonSync", formData);
+}
+
 
 
 export default {
 export default {
-  create, edit, add, update, remove, batchRemove, pageList, 
-  isUnbindDeviceList, batchBindDevice, unbindDevice,batchBindPerson,batchUnBindPerson,
-  devicePersonList,devicePersonSync,devicePersonsSync
+  create, edit, add, update, remove, batchRemove, pageList,
+  isUnbindDeviceList, batchBindDevice, unbindDevice, batchBindPerson, batchUnBindPerson,
+  devicePersonList, devicePersonSync, devicePersonsSync, updateIsWrite, updatePersonIsWrite,
+  devicesPersonSync
 }
 }

+ 42 - 2
src/api/base/personInfo.js

@@ -91,12 +91,52 @@ function dataSync(idList) {
   });
   });
 }
 }
 
 
-function lifeRecordList(formData){
+function unbindWechat(id) {
+  return request.post(constant.serverUrl + "/base/personInfo/unbindWechat", id, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function lifeRecordList(formData) {
   return request.post(constant.serverUrl + "/base/personInfo/lifeRecordList", formData);
   return request.post(constant.serverUrl + "/base/personInfo/lifeRecordList", formData);
 }
 }
 
 
+function clearFaceImg(id) {
+  return request.post(constant.serverUrl + "/base/personInfo/clearFaceImg", id, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function batchClearFaceImg(idList) {
+  return request.post(constant.serverUrl + "/base/personInfo/batchClearFaceImg", idList, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+
+function enabledSync(formData) {
+  //开启自动同步
+  return request.post(constant.serverUrl + "/base/personInfo/enabledSync", formData);
+}
+
+function enabledSyncList(ids) {
+  //开启自动同步
+  return request.post(constant.serverUrl + "/base/personInfo/enabledSyncList", ids, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
 export default {
 export default {
   pageList, create, edit, add, update, remove, batchRemove, exportXls,
   pageList, create, edit, add, update, remove, batchRemove, exportXls,
   enabledFace, enabledCard, enabledApp, enabledGuest, dataSync, enabledFaceList,
   enabledFace, enabledCard, enabledApp, enabledGuest, dataSync, enabledFaceList,
-  enabledWechatNotice,lifeRecordList
+  enabledWechatNotice, unbindWechat, lifeRecordList, clearFaceImg, batchClearFaceImg,
+  enabledSync, enabledSyncList
 }
 }

+ 39 - 15
src/views/base/deviceInfo-list.vue

@@ -110,21 +110,26 @@
       <el-table-column label="操作" width="250">
       <el-table-column label="操作" width="250">
         <template slot-scope="{row}">
         <template slot-scope="{row}">
           <el-row>
           <el-row>
-            <el-col :span="6">
+            <el-col :span="8">
               <el-link type="primary" @click="handleEdit(row)">编辑</el-link>
               <el-link type="primary" @click="handleEdit(row)">编辑</el-link>
             </el-col>
             </el-col>
-            <el-col :span="6">
-              <!-- <el-button size="mini" type="primary" @click="handleRestart(row)">重启</el-button>
-          <el-button size="mini" type="primary" @click="handleClear(row)">清除人脸数据</el-button>
-              <el-button size="mini" type="primary" @click="handleQRcode(row)">二维码地址</el-button>-->
+            <el-col :span="8">
               <el-link type="danger" @click="handleDelete(row)">删除</el-link>
               <el-link type="danger" @click="handleDelete(row)">删除</el-link>
             </el-col>
             </el-col>
             <el-col :span="8">
             <el-col :span="8">
               <el-link type="primary" @click="handlePoint(row)">定位</el-link>
               <el-link type="primary" @click="handlePoint(row)">定位</el-link>
             </el-col>
             </el-col>
-            <el-col :span="6">
+          </el-row>
+          <el-row>
+            <el-col :span="8">
+              <el-link type="primary" @click="handleBindPerson(row)">用户关联</el-link>
+            </el-col>
+            <el-col :span="8">
               <el-link type="primary" @click="handleEditRule(row)">验证规则</el-link>
               <el-link type="primary" @click="handleEditRule(row)">验证规则</el-link>
             </el-col>
             </el-col>
+            <el-col :span="8">
+              <el-link type="primary" @click="handleReboot(row)">重启设备</el-link>
+            </el-col>
           </el-row>
           </el-row>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
@@ -547,15 +552,6 @@ export default {
         this.changePage(this.pageIndex);
         this.changePage(this.pageIndex);
       }
       }
     },
     },
-    handleRestart(record) {
-      //重启
-    },
-    handleClear(record) {
-      //清楚人脸数据
-    },
-    handleQRcode(record) {
-      //二维码地址
-    },
     handleEditRule(record) {
     handleEditRule(record) {
       var self = this;
       var self = this;
       self.loading = true;
       self.loading = true;
@@ -633,6 +629,34 @@ export default {
       this.businessKey = record.id;
       this.businessKey = record.id;
       this.showMapModal = true;
       this.showMapModal = true;
     },
     },
+    handleReboot(record) {
+      var self = this;
+
+      this.$confirm("是否确定将" + record.aliasName + "重启?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        self.loading = true;
+        self.loadingText = "重启中...";
+
+        var formData = new FormData();
+        formData.append("deviceId", record.id);
+
+        deviceInfoApi.reboot(formData).then(function(response) {
+          var jsonData = response.data;
+
+          self.loading = false;
+          self.loadingText = "";
+
+          if (jsonData.result) {
+            self.$message.success(jsonData.message + "");
+          } else {
+            self.$message.warning(jsonData.message + "");
+          }
+        });
+      });
+    },
     handleViewPersonLib (device){
     handleViewPersonLib (device){
       this.selectedDevice = device;
       this.selectedDevice = device;
       this.showPhotoListModal = true;
       this.showPhotoListModal = true;

+ 104 - 10
src/views/base/personDeviceRelation-BoundList.vue

@@ -1,14 +1,14 @@
 <template>
 <template>
   <el-dialog
   <el-dialog
     :visible.sync="showDialog"
     :visible.sync="showDialog"
-    title="查看绑定设备"
+    title="查看关联设备"
     :modal-append-to-body="false"
     :modal-append-to-body="false"
     append-to-body
     append-to-body
     :modal="true"
     :modal="true"
     style="text-align:left;"
     style="text-align:left;"
     @close="closeDialog"
     @close="closeDialog"
     :close-on-click-modal="false"
     :close-on-click-modal="false"
-    width="60%"
+    width="970px"
   >
   >
     <div>
     <div>
       <!--
       <!--
@@ -23,6 +23,21 @@
           icon="el-icon-remove"
           icon="el-icon-remove"
           @click="handleRemoveAll"
           @click="handleRemoveAll"
         >解绑所有设备</el-button>
         >解绑所有设备</el-button>
+        <el-button
+          type="primary"
+          size="small"
+          plain
+          icon="el-icon-refresh"
+          @click="handleUpdateIsWrite"
+        >更新图片状态</el-button>
+        <el-button
+          type="primary"
+          size="small"
+          plain
+          icon="el-icon-refresh"
+          :disabled="multipleSelection.length==0"
+          @click="dataSync"
+        >数据同步</el-button>
       </el-row>
       </el-row>
       <el-table
       <el-table
         :data="tableData"
         :data="tableData"
@@ -47,26 +62,26 @@
             ></div>
             ></div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="isWrite" label="照片是否存在" width="120">
+        <el-table-column prop="isBound" label="照片是否存在" width="120">
           <template slot-scope="{row}">
           <template slot-scope="{row}">
             <div
             <div
               v-if="!row.deviceInfo.isOnline"
               v-if="!row.deviceInfo.isOnline"
               style="border-radius: 30px;background-color:#767676;width:20px;height:20px;"
               style="border-radius: 30px;background-color:#767676;width:20px;height:20px;"
             ></div>
             ></div>
             <div
             <div
-              v-if="row.deviceInfo.isOnline && row.isWrite"
+              v-if="row.deviceInfo.isOnline && row.isBound"
               style="border-radius: 30px;background-color:#67C23A;width:20px;height:20px;"
               style="border-radius: 30px;background-color:#67C23A;width:20px;height:20px;"
             ></div>
             ></div>
             <div
             <div
-              v-if="row.deviceInfo.isOnline &&!row.isWrite"
+              v-if="row.deviceInfo.isOnline &&!row.isBound"
               style="border-radius: 30px;background-color:#F56C6C;width:20px;height:20px;"
               style="border-radius: 30px;background-color:#F56C6C;width:20px;height:20px;"
             ></div>
             ></div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="createTime" label="绑定时间" width="150"></el-table-column>
+        <el-table-column prop="createTime" label="关联时间" width="150"></el-table-column>
         <el-table-column label="操作">
         <el-table-column label="操作">
           <template slot-scope="{row}">
           <template slot-scope="{row}">
-            <el-button size="mini" type="danger" @click="handleDelete(row)">解除绑定</el-button>
+            <el-button size="mini" type="danger" @click="handleDelete(row)">解除关联</el-button>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
       </el-table>
       </el-table>
@@ -95,7 +110,7 @@ import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 import "nprogress/nprogress.css"; // progress bar style
 
 
 export default {
 export default {
-  props: ["personId"],
+  props: ["personId","delFlag"],
   data() {
   data() {
     var self = this;
     var self = this;
 
 
@@ -136,6 +151,10 @@ export default {
 
 
       formData.append("deviceId", self.queryModel.deviceId);
       formData.append("deviceId", self.queryModel.deviceId);
       formData.append("personId", self.personId);
       formData.append("personId", self.personId);
+      if(self.delFlag == null){
+        self.delFlag = false;
+      }
+      formData.append("delFlag", self.delFlag);
 
 
       if (this.field != null) {
       if (this.field != null) {
         formData.append("field", this.field);
         formData.append("field", this.field);
@@ -178,7 +197,7 @@ export default {
     },
     },
     handleDelete(record) {
     handleDelete(record) {
       var self = this;
       var self = this;
-      this.$confirm("是否解除绑定?", "提示", {
+      this.$confirm("是否解除关联?", "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         cancelButtonText: "取消",
         type: "warning",
         type: "warning",
@@ -210,7 +229,7 @@ export default {
     handleRemoveAll() {
     handleRemoveAll() {
       var self = this;
       var self = this;
 
 
-      this.$confirm("是否解除绑定?", "提示", {
+      this.$confirm("是否解除关联?", "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         cancelButtonText: "取消",
         type: "warning",
         type: "warning",
@@ -253,6 +272,81 @@ export default {
       if (refreshed) {
       if (refreshed) {
         this.changePage(this.pageIndex);
         this.changePage(this.pageIndex);
       }
       }
+    },
+    handleUpdateIsWrite() {
+      var self = this;
+      self.loading = true;
+      var formData = new FormData();
+      formData.append("personId", self.personId);
+      personDeviceRelationApi
+        .updatePersonIsWrite(formData)
+        .then(function(response) {
+          var jsonData = response.data;
+          self.loading = false;
+          if (jsonData.result) {
+            self.changePage(self.pageIndex);
+            self.$message({
+              type: "success",
+              message: "更新成功!"
+            });
+          }
+        });
+    },
+    dataSync() {
+      //批量同步人脸
+      var self = this;
+      var deviceIdList = this.multipleSelection.map(record => {
+        return record.deviceId;
+      });
+
+      this.$confirm("是否确认同步选中项?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      })
+        .then(() => {
+          self.loading = true;
+          var formData = new FormData();
+          formData.append("personId", self.personId);
+          formData.append("deviceIds", deviceIdList);
+
+          personDeviceRelationApi
+            .devicesPersonSync(formData)
+            .then(function(response) {
+              var jsonData = response.data;
+              self.loading = false;
+              if (jsonData.result) {
+                if (jsonData.data) {
+                  self.changePage(self.pageIndex);
+                  self.$message({
+                    type: "success",
+                    message: "同步成功!"
+                  });
+                } else {
+                  if (jsonData.message != null) {
+                    //下载有错误信息提示的报表
+                    //window.open(response.data);
+                    self.$message({
+                      showClose: true,
+                      dangerouslyUseHTMLString: true,
+                      message:
+                        "错误" +
+                        `,<a href="${jsonData.message}" target="_blank">点击下载错误报表</a>&nbsp;`,
+                      duration: 30000
+                    });
+                  }
+                }
+              } else {
+                self.$message({
+                  type: "warning",
+                  message: jsonData.message
+                });
+              }
+            });
+        })
+        .catch(() => {
+          self.loading = false;
+        });
     }
     }
   },
   },
   mounted: function() {
   mounted: function() {

+ 73 - 21
src/views/base/personDeviceRelation-list.vue

@@ -8,7 +8,7 @@
     style="text-align:left;"
     style="text-align:left;"
     @close="closeDialog"
     @close="closeDialog"
     :close-on-click-modal="false"
     :close-on-click-modal="false"
-    width="60%"
+    width="970px"
   >
   >
     <div>
     <div>
       <!--
       <!--
@@ -25,7 +25,7 @@
           <el-input type="text" size="mini" v-model="queryModel.deviceNo"></el-input>
           <el-input type="text" size="mini" v-model="queryModel.deviceNo"></el-input>
         </el-form-item>
         </el-form-item>
         <el-form-item label="设备名称" prop="deviceName">
         <el-form-item label="设备名称" prop="deviceName">
-          <el-input type="text" size="mini" v-model="queryModel.deviceName" ></el-input>
+          <el-input type="text" size="mini" v-model="queryModel.deviceName"></el-input>
         </el-form-item>
         </el-form-item>
         <el-form-item>
         <el-form-item>
           <el-button
           <el-button
@@ -46,7 +46,7 @@
           icon="el-icon-circle-plus"
           icon="el-icon-circle-plus"
           :disabled="multipleSelection.length==0"
           :disabled="multipleSelection.length==0"
           @click="handleBatchBound"
           @click="handleBatchBound"
-        >批量绑定</el-button>
+        >批量关联</el-button>
         <!-- <el-button
         <!-- <el-button
           type="primary"
           type="primary"
           size="small"
           size="small"
@@ -78,16 +78,16 @@
             ></div>
             ></div>
           </template>
           </template>
         </el-table-column>
         </el-table-column>
-        <el-table-column prop="isBindPerson" label="绑定状态" width="120">
-          <template slot-scope="{row}">{{row.isBind == 0? "未绑定" : "已绑定"}}</template>
+        <el-table-column prop="isBindPerson" label="关联状态" width="120">
+          <template slot-scope="{row}">{{row.isBind == 0? "未关联" : "已关联"}}</template>
         </el-table-column>
         </el-table-column>
         <el-table-column label="操作">
         <el-table-column label="操作">
           <template slot-scope="{row}">
           <template slot-scope="{row}">
             <span v-if="row.isBind == 0">
             <span v-if="row.isBind == 0">
-              <el-button size="mini" type="success" @click="handleBound(row)">绑定设备</el-button>
+              <el-button size="mini" type="success" @click="handleBound(row)">关联设备</el-button>
             </span>
             </span>
             <!-- <span v-else>
             <!-- <span v-else>
-              <el-button size="mini" type="danger" @click="handleDelete(row)">解除绑定</el-button>
+              <el-button size="mini" type="danger" @click="handleDelete(row)">解除关联</el-button>
             </span>-->
             </span>-->
           </template>
           </template>
         </el-table-column>
         </el-table-column>
@@ -213,15 +213,16 @@ export default {
     handleBound(record) {
     handleBound(record) {
       var self = this;
       var self = this;
       self
       self
-        .$confirm("是否绑定?", "提示", {
-          confirmButtonText: "确定",
-          cancelButtonText: "取消",
+        .$confirm("是否立刻同步照片到设备?", "提示", {
+          confirmButtonText: "同步到设备",
+          cancelButtonText: "只绑定不同步",
           type: "warning",
           type: "warning",
           distinguishCancelAndClose: true
           distinguishCancelAndClose: true
         })
         })
         .then(() => {
         .then(() => {
           self.formModel.personId = self.personId;
           self.formModel.personId = self.personId;
           self.formModel.deviceId = record.id;
           self.formModel.deviceId = record.id;
+          self.formModel.isWrite = true;
 
 
           self.loading = true;
           self.loading = true;
 
 
@@ -234,7 +235,7 @@ export default {
               self.changePage(self.pageIndex);
               self.changePage(self.pageIndex);
               if (jsonData.result) {
               if (jsonData.result) {
                 self.$message({
                 self.$message({
-                  message: "绑定成功!",
+                  message: "关联成功!",
                   type: "success"
                   type: "success"
                 });
                 });
               } else {
               } else {
@@ -246,8 +247,33 @@ export default {
             });
             });
         })
         })
         .catch(error => {
         .catch(error => {
-          self.loading = false;
+          //self.loading = false;
           // self.$message.error(error + "");
           // self.$message.error(error + "");
+          if (error === "cancel") {
+            self.formModel.personId = self.personId;
+            self.formModel.deviceId = record.id;
+            self.formModel.isWrite = false;
+            self.loading = true;
+            return personDeviceRelationApi
+              .add(self.formModel)
+              .then(function(response) {
+                self.loading = false;
+
+                var jsonData = response.data;
+                self.changePage(self.pageIndex);
+                if (jsonData.result) {
+                  self.$message({
+                    message: "关联成功!",
+                    type: "success"
+                  });
+                } else {
+                  self.$message({
+                    message: jsonData.message + "",
+                    type: "warning"
+                  });
+                }
+              });
+          }
         });
         });
     },
     },
     handleBatchBound() {
     handleBatchBound() {
@@ -256,9 +282,9 @@ export default {
         return record.id;
         return record.id;
       });
       });
 
 
-      this.$confirm("是否绑定选中项?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
+      this.$confirm("是否立刻同步照片到设备?", "提示", {
+        confirmButtonText: "同步到设备",
+        cancelButtonText: "只绑定不同步",
         type: "warning",
         type: "warning",
         distinguishCancelAndClose: true
         distinguishCancelAndClose: true
       })
       })
@@ -268,6 +294,7 @@ export default {
 
 
           formData.append("personId", self.personId);
           formData.append("personId", self.personId);
           formData.append("devices", idList);
           formData.append("devices", idList);
+          formData.append("isWrite", true);
 
 
           personDeviceRelationApi
           personDeviceRelationApi
             .batchBindDevice(formData)
             .batchBindDevice(formData)
@@ -277,26 +304,51 @@ export default {
               if (jsonData.result) {
               if (jsonData.result) {
                 self.$message({
                 self.$message({
                   type: "success",
                   type: "success",
-                  message: "绑定成功!"
+                  message: "关联成功!"
                 });
                 });
               } else {
               } else {
                 self.$message({
                 self.$message({
                   showClose: true,
                   showClose: true,
                   dangerouslyUseHTMLString: true,
                   dangerouslyUseHTMLString: true,
-                  message: `有部分人员绑定失败,<a href="${jsonData.message}" target="_blank">点击下载错误信息报表</a>&nbsp;`,
+                  message: `有部分人员关联失败,<a href="${jsonData.message}" target="_blank">点击下载错误信息报表</a>&nbsp;`,
                   duration: 30000
                   duration: 30000
                 });
                 });
               }
               }
             });
             });
         })
         })
         .catch(error => {
         .catch(error => {
-          self.loading = false;
-          // self.$message.error(error + "");
+          //self.loading = false;
+          if (error === "cancel") {
+            self.loading = true;
+            var formData = new FormData();
+            formData.append("personId", self.personId);
+            formData.append("devices", idList);
+            formData.append("isWrite", false);
+            personDeviceRelationApi
+              .batchBindDevice(formData)
+              .then(function(response) {
+                var jsonData = response.data;
+                self.changePage(self.pageIndex);
+                if (jsonData.result) {
+                  self.$message({
+                    type: "success",
+                    message: "关联成功!"
+                  });
+                } else {
+                  self.$message({
+                    showClose: true,
+                    dangerouslyUseHTMLString: true,
+                    message: `有部分人员关联失败,<a href="${jsonData.message}" target="_blank">点击下载错误信息报表</a>&nbsp;`,
+                    duration: 30000
+                  });
+                }
+              });
+          }
         });
         });
     },
     },
     handleDelete(record) {
     handleDelete(record) {
       var self = this;
       var self = this;
-      this.$confirm("是否解除绑定?", "提示", {
+      this.$confirm("是否解除关联?", "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         cancelButtonText: "取消",
         type: "warning",
         type: "warning",
@@ -328,7 +380,7 @@ export default {
     handleRemoveAll() {
     handleRemoveAll() {
       var self = this;
       var self = this;
 
 
-      this.$confirm("是否解除绑定?", "提示", {
+      this.$confirm("是否解除关联?", "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         cancelButtonText: "取消",
         cancelButtonText: "取消",
         type: "warning",
         type: "warning",

+ 315 - 185
src/views/base/personInfo-list.vue

@@ -1,48 +1,51 @@
 <template>
 <template>
   <div style="position:relative;">
   <div style="position:relative;">
-      <el-breadcrumb separator=">">
-        <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
-        <el-breadcrumb-item>
-          <a href="#">系统管理</a>
-        </el-breadcrumb-item>
-        <el-breadcrumb-item>
-          <a href="/personInfo">人员管理</a>
-        </el-breadcrumb-item>
-      </el-breadcrumb>
-      <el-divider></el-divider>
-      <!--
+    <el-breadcrumb separator=">">
+      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="#">系统管理</a>
+      </el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="/personInfo">人员管理</a>
+      </el-breadcrumb-item>
+    </el-breadcrumb>
+    <el-divider></el-divider>
+    <!--
         要resetFields起作用,必须配置:model和prop
         要resetFields起作用,必须配置:model和prop
-      -->
-      <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
-        <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="companyCode">
-            <!-- <el-select
+    -->
+    <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
+      <div>
+        <el-form-item label="编号" prop="id">
+          <el-input type="text" size="mini" v-model="queryModel.id"></el-input>
+        </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>
+      <div>
+        <el-form-item label="单位" prop="companyCode">
+          <!-- <el-select
               v-model="queryModel.companyCode"
               v-model="queryModel.companyCode"
               size="mini"
               size="mini"
               filterable
               filterable
@@ -55,124 +58,140 @@
                 :label="company.name"
                 :label="company.name"
                 :value="company.code"
                 :value="company.code"
               ></el-option>
               ></el-option>
-            </el-select>-->
-            <el-select-tree
-              size="mini"
-              :props="props"
-              :options="companyResult"
-              :value="queryModel.parentId"
-              @getValue="getSelectedValue($event)"
-              height="200"
-            ></el-select-tree>&nbsp;
-            <el-checkbox v-model="queryModel.subordinate">是否包含下级单位</el-checkbox>
-          </el-form-item>
-          <el-form-item label="是否上传照片" prop="isUploadPhoto">
-            <el-select
-              v-model="queryModel.isUploadPhoto"
-              size="mini"
-              filterable
-              placeholder="请选择"
-              style="width:120px"
-            >
-              <el-option value label="全部"></el-option>
-              <el-option value="1" label="已上传"></el-option>
-              <el-option value="0" label="未上传"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="是否同步" prop="faceBound">
-            <el-select
-              v-model="queryModel.faceBound"
-              size="mini"
-              filterable
-              placeholder="请选择"
-              style="width:120px"
-            >
-              <el-option value label="全部"></el-option>
-              <el-option value="1" label="已同步"></el-option>
-              <el-option value="0" label="未同步"></el-option>
-            </el-select>
-          </el-form-item>
-          <el-form-item label="绑定设备名称" prop="derviceName">
-            <el-input type="text" size="mini" v-model="queryModel.derviceName"></el-input>
-          </el-form-item>
-        </div>
-        <div>
-          <el-form-item v-if="position1Show" :label="position1" prop="position1">
-            <el-input type="text" size="mini" v-model="queryModel.position1"></el-input>
-          </el-form-item>
-          <el-form-item v-if="position2Show" :label="position2" prop="position2">
-            <el-input type="text" size="mini" v-model="queryModel.position2"></el-input>
-          </el-form-item>
-          <el-form-item v-if="position3Show" :label="position3" prop="position3">
-            <el-input type="text" size="mini" v-model="queryModel.position3"></el-input>
-          </el-form-item>
-          <el-form-item v-if="position4Show" :label="position4" prop="position4">
-            <el-input type="text" size="mini" v-model="queryModel.position4"></el-input>
-          </el-form-item>
-          <el-form-item v-if="position5Show" :label="position5" prop="position5">
-            <el-input type="text" size="mini" v-model="queryModel.position5"></el-input>
-          </el-form-item>
-        </div>
-      </el-form>
-      <el-divider></el-divider>
-      <el-row class="button-group">
-        <el-button type="primary" size="small" plain icon="el-icon-remove" @click="handleAdd">新增</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-remove"
-          :disabled="multipleSelection.length==0"
-          @click="handleBatchDelete"
-        >删除选中项</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-upload2"
-          @click="batchImportVisible = true"
-        >导入</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-download"
-          :loading="xlsLoading"
-          @click="downloadAll"
-        >导出数据</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-refresh"
-          :disabled="multipleSelection.length==0"
-          @click="dataSync"
-        >数据同步</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-refresh"
-          :disabled="multipleSelection.length==0"
-          @click="handleBatchEnabledFace"
-        >人脸授权</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-refresh"
-          :disabled="multipleSelection.length==0"
-          @click="batchBoundDevice = true"
-        >绑定设备</el-button>
-        <el-button
-          type="primary"
-          size="small"
-          plain
-          icon="el-icon-refresh"
-          :disabled="multipleSelection.length==0"
-          @click="batchUnBoundDevice = true"
-        >解绑设备</el-button>
-      </el-row>
+          </el-select>-->
+          <el-select-tree
+            size="mini"
+            :props="props"
+            :options="companyResult"
+            :value="queryModel.parentId"
+            @getValue="getSelectedValue($event)"
+            height="200"
+          ></el-select-tree>&nbsp;
+          <el-checkbox v-model="queryModel.subordinate">是否包含下级单位</el-checkbox>
+        </el-form-item>
+        <el-form-item label="是否上传照片" prop="isUploadPhoto">
+          <el-select
+            v-model="queryModel.isUploadPhoto"
+            size="mini"
+            filterable
+            placeholder="请选择"
+            style="width:120px"
+          >
+            <el-option value label="全部"></el-option>
+            <el-option value="1" label="已上传"></el-option>
+            <el-option value="0" label="未上传"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否同步" prop="faceBound">
+          <el-select
+            v-model="queryModel.faceBound"
+            size="mini"
+            filterable
+            placeholder="请选择"
+            style="width:120px"
+          >
+            <el-option value label="全部"></el-option>
+            <el-option value="1" label="已同步"></el-option>
+            <el-option value="0" label="未同步"></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="绑定设备名称" prop="derviceName">
+          <el-input type="text" size="mini" v-model="queryModel.derviceName"></el-input>
+        </el-form-item>
+      </div>
+      <div>
+        <el-form-item v-if="position1Show" :label="position1" prop="position1">
+          <el-input type="text" size="mini" v-model="queryModel.position1"></el-input>
+        </el-form-item>
+        <el-form-item v-if="position2Show" :label="position2" prop="position2">
+          <el-input type="text" size="mini" v-model="queryModel.position2"></el-input>
+        </el-form-item>
+        <el-form-item v-if="position3Show" :label="position3" prop="position3">
+          <el-input type="text" size="mini" v-model="queryModel.position3"></el-input>
+        </el-form-item>
+        <el-form-item v-if="position4Show" :label="position4" prop="position4">
+          <el-input type="text" size="mini" v-model="queryModel.position4"></el-input>
+        </el-form-item>
+        <el-form-item v-if="position5Show" :label="position5" prop="position5">
+          <el-input type="text" size="mini" v-model="queryModel.position5"></el-input>
+        </el-form-item>
+      </div>
+    </el-form>
+    <el-divider></el-divider>
+    <el-row class="button-group">
+      <el-button type="primary" size="small" plain icon="el-icon-remove" @click="handleAdd">新增</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-remove"
+        :disabled="multipleSelection.length==0"
+        @click="handleBatchDelete"
+      >删除选中项</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-remove"
+        :disabled="multipleSelection.length==0"
+        @click="handleBatchClearFaceImg"
+      >清除设备照片</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-upload2"
+        @click="batchImportVisible = true"
+      >导入</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-download"
+        :loading="xlsLoading"
+        @click="downloadAll"
+      >导出数据</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-refresh"
+        :disabled="multipleSelection.length==0"
+        @click="dataSync"
+      >数据同步</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-refresh"
+        :disabled="multipleSelection.length==0"
+        @click="handleBatchEnabledFace"
+      >开启自动同步</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-refresh"
+        :disabled="multipleSelection.length==0"
+        @click="handleBatchEnabledFace"
+      >人脸授权</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-refresh"
+        :disabled="multipleSelection.length==0"
+        @click="batchBoundDevice = true"
+      >关联设备</el-button>
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-refresh"
+        :disabled="multipleSelection.length==0"
+        @click="batchUnBoundDevice = true"
+      >解绑设备</el-button>
+    </el-row>
     <el-table
     <el-table
       ref="formTable"
       ref="formTable"
       :data="tableData"
       :data="tableData"
@@ -220,7 +239,18 @@
             <el-col :span="10" v-if="row.popedom.indexOf('2')!= -1 && row.companyType == 2">班主任</el-col>
             <el-col :span="10" v-if="row.popedom.indexOf('2')!= -1 && row.companyType == 2">班主任</el-col>
             <el-col :span="10" v-if="row.popedom.indexOf('3')!= -1">监管专员</el-col>
             <el-col :span="10" v-if="row.popedom.indexOf('3')!= -1">监管专员</el-col>
           </el-row>
           </el-row>
-        </template> 
+        </template>
+      </el-table-column>
+      <el-table-column label="是否自动同步" width="120">
+        <template slot-scope="{row}">
+          <el-switch
+            v-model="row.isSync"
+            @change="enabledTo(row,'sync',row.faceEnabled)"
+            active-color="#13ce66"
+            inactive-color="#ff4949"
+            :disabled="disabled"
+          ></el-switch>
+        </template>
       </el-table-column>
       </el-table-column>
       <el-table-column label="人脸授权">
       <el-table-column label="人脸授权">
         <template slot-scope="{row}">
         <template slot-scope="{row}">
@@ -287,22 +317,28 @@
         <template slot-scope="{row}">
         <template slot-scope="{row}">
           <el-row>
           <el-row>
             <el-col>
             <el-col>
-              <el-link type="primary" :underline="false" @click="handleEdit(row)">编辑</el-link>-
-              <el-link type="danger" :underline="false" @click="handleDelete(row)">删除</el-link>-
-              <el-link type="primary" :underline="false" @click="bindDevice(row)">绑定设备</el-link>-
-              <span v-if="row.faceBound">
-                <el-link
-                  type="primary"
-                  :underline="false"
-                  :disabled="true"
-                  @click="uploadData(row)"
-                >数据同步</el-link>-
+              <span v-if="row.delFlag">
+                <el-link type="danger" :underline="false" @click="handleClearFaceImg(row)">清除图片</el-link>-
               </span>
               </span>
-              <span v-if="!row.faceBound">
-                <el-link type="primary" :underline="false" @click="uploadData(row)">数据同步</el-link>-
+              <span v-else>
+                <el-link type="primary" :underline="false" @click="handleEdit(row)">编辑</el-link>-
+                <el-link type="danger" :underline="false" @click="handleDelete(row)">删除</el-link>-
+                <span v-if="row.faceBound">
+                  <el-link
+                    type="primary"
+                    :underline="false"
+                    :disabled="true"
+                    @click="uploadData(row)"
+                  >数据同步</el-link>-
+                </span>
+                <span v-if="!row.faceBound">
+                  <el-link type="primary" :underline="false" @click="uploadData(row)">数据同步</el-link>-
+                </span>
               </span>
               </span>
-              <el-link type="primary" :underline="false" @click="showBound(row)">已绑定设备</el-link>-
-              <el-link type="primary" :underline="false" @click="showLifeRecord(row)">生活记录</el-link>
+              <el-link type="primary" :underline="false" @click="bindDevice(row)">关联设备</el-link>-
+              <el-link type="primary" :underline="false" @click="showBound(row)">已关联设备</el-link>-
+              <el-link type="primary" :underline="false" @click="showLifeRecord(row)">生活记录</el-link>-
+              <el-link type="primary" :underline="false" @click="unbindWechat(row)">微信解绑</el-link>
             </el-col>
             </el-col>
           </el-row>
           </el-row>
         </template>
         </template>
@@ -340,11 +376,7 @@
     ></personDeviceRelation-BoundList>
     ></personDeviceRelation-BoundList>
     <!--批量导入S-->
     <!--批量导入S-->
     <!--生活记录 start-->
     <!--生活记录 start-->
-    <lifeRecord-list
-      v-if="showRecordModal"
-      :personId="businessKey"
-      @close="recordModalClose"
-    ></lifeRecord-list>
+    <lifeRecord-list v-if="showRecordModal" :personId="businessKey" @close="recordModalClose"></lifeRecord-list>
     <!--生活记录 end-->
     <!--生活记录 end-->
     <el-dialog
     <el-dialog
       title="批量导入人员"
       title="批量导入人员"
@@ -490,6 +522,7 @@ export default {
 
 
     return {
     return {
       queryModel: {
       queryModel: {
+        id: "",
         companyCode: "",
         companyCode: "",
         parentId: "",
         parentId: "",
         name: "",
         name: "",
@@ -559,7 +592,7 @@ export default {
         label: "name",
         label: "name",
         children: "children"
         children: "children"
       },
       },
-      showRecordModal:false
+      showRecordModal: false
     };
     };
   },
   },
   created() {
   created() {
@@ -661,6 +694,7 @@ export default {
 
 
       formData.append("subordinate", self.queryModel.subordinate);
       formData.append("subordinate", self.queryModel.subordinate);
 
 
+      formData.append("id", self.queryModel.id);
       formData.append("name", self.queryModel.name);
       formData.append("name", self.queryModel.name);
       formData.append("phone", self.queryModel.phone);
       formData.append("phone", self.queryModel.phone);
       formData.append("idCard", self.queryModel.idCard);
       formData.append("idCard", self.queryModel.idCard);
@@ -696,7 +730,8 @@ export default {
 
 
           //页面高度-列表上面的高度-分页栏高度
           //页面高度-列表上面的高度-分页栏高度
           //45为分页栏的高度
           //45为分页栏的高度
-          self.tableHeight = window.innerHeight - self.$refs.formTable.$el.offsetTop - 110;
+          self.tableHeight =
+            window.innerHeight - self.$refs.formTable.$el.offsetTop - 110;
         })
         })
         .catch(error => {
         .catch(error => {
           self.loading = false;
           self.loading = false;
@@ -891,6 +926,7 @@ export default {
       formData.append("parentId", self.queryModel.parentId);
       formData.append("parentId", self.queryModel.parentId);
       formData.append("subordinate", self.queryModel.subordinate);
       formData.append("subordinate", self.queryModel.subordinate);
 
 
+      formData.append("id", self.queryModel.id);
       formData.append("name", self.queryModel.name);
       formData.append("name", self.queryModel.name);
       formData.append("phone", self.queryModel.phone);
       formData.append("phone", self.queryModel.phone);
       formData.append("idCard", self.queryModel.idCard);
       formData.append("idCard", self.queryModel.idCard);
@@ -950,6 +986,8 @@ export default {
                 personInfoApi.enabledGuest(formData);
                 personInfoApi.enabledGuest(formData);
               } else if ("wechatNotice" == type) {
               } else if ("wechatNotice" == type) {
                 personInfoApi.enabledWechatNotice(formData);
                 personInfoApi.enabledWechatNotice(formData);
+              } else if ("sync" == type) {
+                personInfoApi.enabledSync(formData);
               }
               }
 
 
               //关闭开关,是自动同步到服务器
               //关闭开关,是自动同步到服务器
@@ -1181,6 +1219,33 @@ export default {
         }
         }
       });
       });
     },
     },
+    unbindWechat(record) {
+      var self = this;
+      this.$confirm("是否确认微信解绑?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        self.loading = true;
+        personInfoApi
+          .unbindWechat(record.id)
+          .then(function(response) {
+            var jsonData = response.data;
+            self.loading = false;
+            if (jsonData.result) {
+              self.changePage(self.pageIndex);
+
+              self.$message({
+                type: "success",
+                message: "解绑成功!"
+              });
+            }
+          })
+          .catch(() => {
+            self.loading = false;
+          });
+      });
+    },
     showLifeRecord(record) {
     showLifeRecord(record) {
       this.showRecordModal = true;
       this.showRecordModal = true;
       this.businessKey = record.id;
       this.businessKey = record.id;
@@ -1188,6 +1253,71 @@ export default {
     recordModalClose(refreshed) {
     recordModalClose(refreshed) {
       this.showRecordModal = false;
       this.showRecordModal = false;
     },
     },
+    handleClearFaceImg(record) {
+      var self = this;
+      self
+        .$confirm("是否确认清除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning"
+        })
+        .then(() => {
+          self.loading = true;
+          personInfoApi.clearFaceImg(record.id).then(function(response) {
+            var jsonData = response.data;
+            self.loading = false;
+            if (jsonData.result) {
+              self.$message({
+                type: "success",
+                message: "清除成功!"
+              });
+            } else {
+              self.$message({
+                showClose: true,
+                dangerouslyUseHTMLString: true,
+                message:
+                  "发生错误" +
+                  `,<a href="${jsonData.message}" target="_blank">点击下载错误信息</a>&nbsp;`,
+                duration: 30000
+              });
+            }
+          });
+        })
+        .catch(() => {
+          self.loading = false;
+        });
+    },
+    handleBatchClearFaceImg() {
+      var self = this;
+      var idList = this.multipleSelection.map(record => {
+        return record.id;
+      });
+
+      this.$confirm("是否确认清除设备上的照片?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(() => {
+        self.loading = true;
+        personInfoApi
+          .batchClearFaceImg(idList)
+          .then(function(response) {
+            var jsonData = response.data;
+            self.loading = false;
+            if (jsonData.result) {
+              self.changePage(self.pageIndex);
+
+              self.$message({
+                type: "success",
+                message: "清除成功!"
+              });
+            }
+          })
+          .catch(() => {
+            self.loading = false;
+          });
+      });
+    }
   },
   },
   async mounted() {
   async mounted() {
     var self = this;
     var self = this;
@@ -1217,7 +1347,7 @@ export default {
 .demo-form-inline {
 .demo-form-inline {
   margin-left: 10px;
   margin-left: 10px;
   text-align: left;
   text-align: left;
-  background-color:white;
+  background-color: white;
 }
 }
 
 
 .button-group {
 .button-group {
@@ -1225,7 +1355,7 @@ export default {
   text-align: left;
   text-align: left;
 }
 }
 
 
-.sticky-panel{
-  background-color:#fff;
+.sticky-panel {
+  background-color: #fff;
 }
 }
 </style>
 </style>