Pārlūkot izejas kodu

1、人脸权限禁用清单

slowslo 4 gadi atpakaļ
vecāks
revīzija
d4ec91ef0d

+ 337 - 0
src/components/device-door/comps/device-door-simple-crud.vue

@@ -0,0 +1,337 @@
+<template>
+  <div>
+    <div style="display:flex;margin:6px;flex-wrap: wrap;overflow: hidden;">
+      <el-tag size="mini" type="info" style="margin:4px" class="animate__animated animate__fadeInDown animate__faster" @close="close(item)" closable v-for="(item,index) in selectionList" :key="index">{{item.name}}</el-tag>
+    </div>
+    <avue-crud :option="option" :table-loading="loading" :data="data" :page="page" :permission="permissionList"
+      :before-open="beforeOpen" v-model="form" ref="crud"
+      @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+      @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+      <template slot="menuLeft">
+        <el-button @click="pushFace" size="mini" type="primary" v-if="$isNotEmpty(selectionList)">确认下发</el-button>
+      </template>
+      <template slot="deviceStatus" slot-scope="{row}">
+        <el-tag v-if="row.deviceStatus === 0" type="danger">离线</el-tag>
+        <el-tag v-if="row.deviceStatus === 1" type="success">在线</el-tag>
+      </template>
+    </avue-crud>
+  </div>
+</template>
+
+<script>
+  import {
+    getList,
+    getDetail,
+    add,
+    update,
+    remove,
+    remoteOpenDoor
+  } from "@/api/device/doordevice.js";
+  import {
+    mapGetters
+  } from "vuex";
+  import customAvueMap from "@/components/residential/customAvueMap.vue"
+  import editPolygonMap from "@/components/residential/editPolygonMap.vue";
+  import SelectDialogResidential from "@/components/select-dialog/select-dialog-residential";
+  import {deepClone} from "@/util/util.js"
+  export default {
+    components: {
+      SelectDialogResidential,
+      customAvueMap,
+      editPolygonMap
+    },
+    data() {
+      return {
+        mapVisible: false,
+        form: {},
+        query: {},
+        loading: true,
+        page: {
+          pageSize: 10,
+          currentPage: 1,
+          total: 0
+        },
+        selectionList: [],
+        option: {
+          height: 'auto',
+          calcHeight: 60,
+          tip: false,
+          searchShow: true,
+          searchMenuSpan: 6,
+          border: true,
+          index: true,
+          viewBtn: false,
+          delBtn: false,
+          editBtn: false,
+          selection: true,
+          reserveSelection: true,
+          menu: false,
+          addBtn: false,
+          align: 'center',
+          dialogClickModal: false,
+          column: [
+            {
+              label: "设备名称",
+              prop: "name",
+              search: true,
+              overHidden: true,
+              rules: [{
+                required: true,
+                message: "请输入名称",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "设备序列号",
+              prop: "macAddress",
+              hide: true,
+              width: 200,
+              rules: [{
+                required: true,
+                message: "请输入Mac编码",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "所属区域",
+              prop: "residentialName",
+              width: 160,
+              editDisplay: false,
+              addDisplay: false
+            },
+            {
+              label: "所属楼栋",
+              prop: "buildingName",
+              width: 100,
+              editDisplay: false,
+              addDisplay: false
+            },
+            {
+              label: "所属单元",
+              prop: "unitName",
+              width: 100,
+              editDisplay: false,
+              addDisplay: false
+            },
+            {
+              label: "所属楼层",
+              width: 100,
+              prop: "floorName",
+              editDisplay: false,
+              addDisplay: false
+            },
+            {
+              label: "安装位置",
+              prop: "address",
+              width: 160,
+              overHidden: true,
+              rules: [{
+                required: true,
+                message: "请输入安装位置",
+                trigger: "blur"
+              }]
+            },
+            {
+              label: "最近心跳",
+              width: 130,
+              prop: "heartbeatTime"
+            },
+            {
+              label: "设备状态",
+              prop: "deviceStatus",
+              type: "select",
+              width: 100,
+              dicUrl: "/api/blade-system/dict-biz/dictionary?code=face_device_status",
+              props: {
+                label: 'dictValue',
+                value: 'dictKey'
+              },
+              dataType: "number",
+              display: false,
+              slot: true
+            }
+
+          ]
+        },
+        data: []
+      };
+    },
+    computed: {
+      ...mapGetters(["permission"]),
+      permissionList() {
+        return {
+          addBtn: this.vaildData(this.permission.doordevice_add, false),
+          viewBtn: this.vaildData(this.permission.doordevice_view, false),
+          delBtn: this.vaildData(this.permission.doordevice_delete, false),
+          editBtn: this.vaildData(this.permission.doordevice_edit, false)
+        };
+      },
+      ids() {
+        let ids = [];
+        this.selectionList.forEach(ele => {
+          ids.push(ele.id);
+        });
+        return ids.join(",");
+      }
+    },
+
+    watch: {
+      'form.mapSelect': {
+        handler: function(value) {
+          if (!value) {
+            return
+          } else {
+            this.form.longitude = this.form.mapSelect.longitude;
+            this.form.latitude = this.form.mapSelect.latitude;
+          }
+        },
+      }
+    },
+    methods: {
+      pushFace(){
+        let deviceIds=this.selectionList.map(item=>item.id)
+        this.$emit("pushFace",deviceIds)
+      },
+      openDoor(row) {
+        remoteOpenDoor(row.id, true).then(res => {
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        });
+      },
+      selectCallback(row) {
+        this.form.latitude = row.latitude;
+        this.form.longitude = row.longitude;
+        this.form.address = row.address;
+        this.form.residentialId = row.id;
+        this.form.residentialName = row.name;
+      },
+      rowSave(row, done, loading) {
+        add(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          window.console.log(error);
+        });
+      },
+      rowUpdate(row, index, done, loading) {
+        update(row).then(() => {
+          this.onLoad(this.page);
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          done();
+        }, error => {
+          loading();
+          console.log(error);
+        });
+      },
+      rowDel(row) {
+        this.$confirm("确定将选择数据删除?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          })
+          .then(() => {
+            return remove(row.id);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      handleDelete() {
+        if (this.selectionList.length === 0) {
+          this.$message.warning("请选择至少一条数据");
+          return;
+        }
+        this.$confirm("确定将选择数据删除?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          })
+          .then(() => {
+            return remove(this.ids);
+          })
+          .then(() => {
+            this.onLoad(this.page);
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$refs.crud.toggleSelection();
+          });
+      },
+      beforeOpen(done, type) {
+        if (["edit", "view"].includes(type)) {
+          getDetail(this.form.id).then(res => {
+            this.form = res.data.data;
+          });
+        }
+        done();
+      },
+      searchReset() {
+        this.query = {};
+        this.onLoad(this.page);
+      },
+      searchChange(params, done) {
+        this.query = params;
+        this.page.currentPage = 1;
+        this.onLoad(this.page, params);
+        done();
+      },
+      selectionChange(list) {
+        this.selectionList = list;
+      },
+      selectionClear() {
+        this.selectionList = [];
+        this.$refs.crud.toggleSelection();
+      },
+      close(data){
+        let arr=[]
+        this.selectionList.forEach((item,index)=>{
+          if (data.id==item.id) {
+            arr.push(item)
+            this.selectionList.splice(index,1)
+          }
+        })
+        console.log(this.selectionList);
+        this.$refs.crud.toggleSelection(arr);
+      },
+      currentChange(currentPage) {
+        this.page.currentPage = currentPage;
+      },
+      sizeChange(pageSize) {
+        this.page.pageSize = pageSize;
+      },
+      refreshChange() {
+        this.onLoad(this.page, this.query);
+      },
+      fetchList(page, params) {
+        this.loading = true;
+        getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+          const data = res.data.data;
+          this.page.total = data.total;
+          this.data = data.records;
+          this.loading = false;
+        })
+      },
+      onLoad(page, params = {}) {
+        this.fetchList(page, params)
+      }
+    }
+  };
+</script>
+
+<style>
+</style>

+ 77 - 41
src/views/smartaccess/comps/face-card.vue

@@ -158,10 +158,14 @@
     <server-form v-if="menuObj.index==2" ref="formRef" @reloadData="fetchData"></server-form>
     <snap-form v-if="menuObj.index==3" ref="formRef" @reloadData="fetchData"></snap-form>
     <device-door ref="deviceDoor"></device-door>
+    <el-dialog title="请选择要下发的设备" :visible.sync="deviceShow" :destroy-on-close="true" center :append-to-body="true" :modal-append-to-body="true" width="55%">
+      <device-door-simple-crud ref="deviceDoorSimpleCrud" @deleteFace="deleteFace"></device-door-simple-crud>
+    </el-dialog>
   </div>
 </template>
 <script>
   import deviceDoor from "@/components/device-door/device-door.vue"
+  import deviceDoorSimpleCrud from "@/components/device-door/comps/device-door-simple-crud.vue"
   import {
     getToken
   } from '@/util/auth';
@@ -186,6 +190,7 @@
   } from "@/api/estate/serveruser.js";
   //抓拍记录
   import snapForm from "../form/snap.vue"
+  //
   import {
     getList2 as getSnapList,
     exportExcel
@@ -197,10 +202,12 @@
     statistics
   } from "@/api/estate/useraccesspermissions";
   import dateTime from "@/util/dateTime.js"
+  import {deleteFace} from "@/api/estate/useraccesspermissions.js"
   export default {
     name: "face-card",
     components: {
       deviceDoor,
+      deviceDoorSimpleCrud,
       staffForm,
       guestForm,
       serverForm,
@@ -216,13 +223,16 @@
           name: '',
           index: 0
         },
-        statuObj: {},
+        statusObj: {},
+        deviceShow: false,
+        selectedUser: null,
 
         current: 1,
         size: 17,
         pageCount: 0,
         list: [],
-        dataList: [{
+        dataList: [
+          {
             label: '待审核',
             value: 0,
           },
@@ -235,7 +245,8 @@
             value: 0,
           }
         ],
-        operationList: [{
+        operationList: [
+          {
             icon: 'el-icon-view',
             name: '详情'
           },
@@ -352,6 +363,34 @@
       this.fetchData()
     },
     methods: {
+      deleteFace(deviceIds) {
+        if (this.$isEmpty(deviceIds)) {
+          this.$message.error('请选择要下发的设备')
+          return
+        }
+        let params = {
+          deviceIds: deviceIds.join(','),
+          userId: this.selectedUser.id,
+        };
+        let index = this.menuObj.index || 0
+        if (index == 0) {
+          //常驻人员
+          params.targetType = 1 //人脸入库(设备库)类型 1:白名单 2:访客 3:黑名单
+          params.userType = 'QYYG_'  //用户类型,QYYG_:企业员工,FWY_:服务员,FK_:访客。ADMIN_:管理员
+        } else if (index == 1) {
+          //来访人员
+          params.targetType = 2
+          params.userType = 'FK_'
+        } else if (index == 2) {
+          //服务人员
+          params.targetType = 1
+          params.userType = 'FWY_'
+
+          deleteFace(params).then(res => {
+            console.log(res);
+          })
+        }
+      },
       handleExcel(type) {
         window.open(`/api/cyzh-estate/snaprecord/exportExcel?${this.website.tokenHeader}=${getToken()}&type=${type}`);
       },
@@ -376,13 +415,14 @@
       },
       dropdownClick(item, name) {
         if (name == '详情') {
-          this.$refs.formRef.showDialog(item)
+          this.$refs.formRef.showDialog(item);
         } else if (name == '编辑') {
-          this.$refs.formRef.showDialog(item, false)
+          this.$refs.formRef.showDialog(item, false);
         } else if (name == '删除') {
-          this.$refs.formRef.rowDel(item.id)
+          this.$refs.formRef.rowDel(item.id);
         } else if (name == '禁用') {
-          this.deleteUserFaceFromDevice(item.id)
+          this.deviceShow = true;
+          this.selectedUser = item;
         }
       },
       //下发人脸
@@ -401,45 +441,41 @@
           item.targetType=1
           item.userType='FWY_'
         }
-        this.$refs.deviceDoor.showDialog(item)
-      },
-      //禁用人脸
-      deleteUserFaceFromDevice(id, deviceIds) {
-        this.$refs.formRef.deleteUserFaceFromDevice(id, deviceIds)
+        this.$refs.deviceDoor.showDialog(item, true, true);
       },
       actived(e) {
-        this.resetPageParams()
-        this.menuObj = e.menuObj
-        this.statuObj = e.statusObj
-        this.fetchData()
+        this.resetPageParams();
+        this.menuObj = e.menuObj;
+        this.statusObj = e.statusObj;
+        this.fetchData();
       },
       fetchData(params = {}) {
-        this.loading = true
-        let index = this.menuObj.index || 0
+        this.loading = true;
+        let index = this.menuObj.index || 0;
         //获取统计数据
-        this.getStatistics(index)
+        this.getStatistics(index);
         //获取列表数据
         if (index == 0) {
           //常驻人员
-          this.size = 17
-          this.getStaffList(params)
+          this.size = 17;
+          this.getStaffList(params);
         } else if (index == 1) {
           //来访人员
-          this.size = 17
-          this.getGuestList(params)
+          this.size = 17;
+          this.getGuestList(params);
         } else if (index == 2) {
           //服务人员
-          this.size = 17
-          this.getServerList(params)
+          this.size = 17;
+          this.getServerList(params);
         } else if (index == 3) {
           //体温异常
-          this.size = 23
-          this.getSnapList(params)
+          this.size = 23;
+          this.getSnapList(params);
         }
       },
       currentChange(current) {
-        this.current = current
-        this.fetchData()
+        this.current = current;
+        this.fetchData();
       },
       //获取数据统计
       async getStatistics(type) {
@@ -474,7 +510,7 @@
       async getSnapList(params) {
         params.isHigh = false
         let data = {}
-        let index = this.statuObj.index
+        let index = this.statusObj.index
         if (index == 1) {
           //温度异常
           params.isHigh = true
@@ -487,13 +523,13 @@
       //获取服务人员列表
       async getServerList(params) {
         let data = {}
-        let index = this.statuObj.index
+        let index = this.statusObj.index
         if (index == 1 || index == 2) {
-          params.type = this.statuObj.value
+          params.type = this.statusObj.value
           data = (await getServerXFList(this.current, this.size, params)).data.data
           data.records.forEach(item => {
             //下发状态
-            item.pushStatus = this.statuObj.value
+            item.pushStatus = this.statusObj.value
           })
         } else {
           data = (await getServerList(this.current, this.size, params)).data.data
@@ -505,16 +541,16 @@
       //获取访客人员列表
       async getGuestList(params) {
         let data = {}
-        let index = this.statuObj.index
+        let index = this.statusObj.index
         if (index == 4 || index == 5) {
-          params.type = this.statuObj.value
+          params.type = this.statusObj.value
           data = (await getGuestXFList(this.current, this.size, params)).data.data
           data.records.forEach(item => {
             //下发状态
-            item.pushStatus = this.statuObj.value
+            item.pushStatus = this.statusObj.value
           })
         } else {
-          params.checkState = this.statuObj.value
+          params.checkState = this.statusObj.value
           data = (await getGuestList(this.current, this.size, params)).data.data
         }
         this.list = data.records
@@ -524,16 +560,16 @@
       //获取常驻人员数据列表
       async getStaffList(params) {
         let data = {}
-        let index = this.statuObj.index
+        let index = this.statusObj.index
         if (index == 4 || index == 5) {
-          params.type = this.statuObj.value
+          params.type = this.statusObj.value
           data = (await getStaffXFList(this.current, this.size, params)).data.data
           data.records.forEach(item => {
             //下发状态
-            item.pushStatus = this.statuObj.value
+            item.pushStatus = this.statusObj.value
           })
         } else {
-          params.auditStatus = this.statuObj.value
+          params.auditStatus = this.statusObj.value
           data = (await getStaffList(this.current, this.size, params)).data.data
         }
         this.list = data.records