소스 검색

1、常住人脸表单查询和编辑切换option

slowslo 4 년 전
부모
커밋
3349352113
2개의 변경된 파일829개의 추가작업 그리고 6개의 파일을 삭제
  1. 17 6
      src/views/smartaccess/comps/face-card.vue
  2. 812 0
      src/views/smartaccess/form/houseuser.vue

+ 17 - 6
src/views/smartaccess/comps/face-card.vue

@@ -153,7 +153,8 @@
       </el-pagination>
     </div>
 
-    <staff-form v-if="$isEmpty(menuObj.index)" ref="formRef" @reloadData="fetchData"></staff-form>
+    <houseuser-form v-if="$isEmpty(menuObj.index) && tenantType == 0" ref="formRef" @reloadData="fetchData"></houseuser-form>
+    <staff-form v-else ref="formRef" @reloadData="fetchData"></staff-form>
     <guest-form v-if="menuObj.index==1" ref="formRef" @reloadData="fetchData"></guest-form>
     <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>
@@ -171,6 +172,8 @@
   } from '@/util/auth';
   //常驻人员
   import staffForm from "../form/staff.vue"
+  //常住人员
+  import houseuserForm from "../form/houseuser.vue"
   import {
     getList as getStaffList,
     getStaffXFList
@@ -215,6 +218,7 @@
       deviceDoor,
       deviceDoorPermissionsCrud,
       staffForm,
+      houseuserForm,
       guestForm,
       serverForm,
       snapForm,
@@ -492,9 +496,15 @@
         if (index == 0) {
           //常驻人员
           item.targetType = 1 //人脸入库(设备库)类型 1:白名单 2:访客 3:黑名单
-          item.userType = 'QYYG_'; //用户类型,QYYG_:企业员工,FWY_:服务员,FK_:访客。ADMIN_:管理员
-          item.userFace = item.face;
-          item.userName = item.realName;
+          item.userFace = item.faceUrl;
+          if(this.tenantType == 0){
+            item.userType = 'ZH_'; //用户类型,QYYG_:企业员工,FWY_:服务员,FK_:访客。ADMIN_:管理员
+            item.userName = item.name;
+          }else{
+            item.userName = item.realName;
+            item.userType = 'QYYG_'; //用户类型,QYYG_:企业员工,FWY_:服务员,FK_:访客。ADMIN_:管理员
+          }
+
         } else if (index == 1) {
           //来访人员
           item.targetType = 2;
@@ -520,7 +530,7 @@
         this.loading = true;
         let index = this.menuObj.index || 0;
         //获取统计数据
-        this.getStatistics(index);
+        this.getStatistics(this.tenantType, index);
         //获取列表数据
         if (index == 0) {
           //常驻人员
@@ -550,8 +560,9 @@
         this.fetchData();
       },
       //获取数据统计
-      async getStatistics(type) {
+      async getStatistics(tenantType, type) {
         let params = {
+          tenantType,
           type
         }
         let data = (await statistics(params)).data.data

+ 812 - 0
src/views/smartaccess/form/houseuser.vue

@@ -0,0 +1,812 @@
+<template>
+  <div>
+    <el-dialog :modal-append-to-body="true" :append-to-body="true" :title="title" center :visible.sync="dialogShow"
+      width="45%" :close-on-click-modal="false" top="4%">
+      <avue-form ref="avueForm" :option="option" v-model="model" @submit="submit"></avue-form>
+      <div v-if="model&&model.auditStatus==0">
+        <el-row>
+          <el-col span="24" align="right">
+            <el-button type="success" icon="el-icon-check" size="small" @click="audit(1)">通过</el-button>
+            <el-button type="danger" icon="el-icon-delete" size="small" @click="audit(2)">不通过</el-button>
+          </el-col>
+        </el-row>
+      </div>
+    </el-dialog>
+
+
+    <el-dialog title="审核意见" :visible.sync="auditDialogShow" width="30%" :modal-append-to-body="true"
+      :append-to-body="true" center>
+      <el-input v-model="auditOpinion" placeholder="请输入审核意见(选填)"></el-input>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="auditObj.auditStatus==1" type="success" @click="doAudit" style="background-color:#19be6b">
+          确定审核通过</el-button>
+        <el-button v-if="auditObj.auditStatus==2" type="danger" @click="doAudit">
+          确定审核不通过</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+<script>
+  import {
+    remove,
+    update,
+    pushUserFace,
+  } from "@/api/enterprise/staff";
+  import {
+    pushFace,
+    deleteFace,
+  } from "@/api/estate/useraccesspermissions";
+  import {deepClone} from "@/util/util.js";
+  export default {
+    data() {
+      return {
+        isAdd: false,
+        //审核意见
+        auditObj: {},
+        auditDialogShow: false,
+        auditOpinion: '',
+
+        dialogShow: false,
+        type: 0,
+        model: {},
+        editForm: {
+          detail: true,
+          labelWidth: 110,
+
+          column: [
+            {
+              label: "",
+              prop: "faceUrl",
+              labelWidth: '43.5%',
+              row: true,
+              span: 24,
+              type: "upload",
+              listType: 'picture-img',
+              rules: [{
+                required: true,
+                message: "请上传人脸信息",
+                trigger: "blur"
+              }],
+              propsHttp: {
+                res: "data",
+                url: "link"
+              },
+              action: "/api/blade-resource/oss/endpoint/put-file",
+            }],
+          group: [
+            {
+              label: '基本信息',
+              prop: 'group1',
+              column: [
+                {
+                  label: '姓名',
+                  prop: 'name',
+                  gutter:10,
+                  rules: [{
+                    required: true,
+                    message: "请输入真实姓名",
+                    trigger: "blur"
+                  }],
+                  span: 12
+                }, {
+                  label: '性别',
+                  prop: 'sex',
+                  type: 'select',
+                  dicData: [{
+                    label: '男',
+                    value: 1
+                  },
+                    {
+                      label: '女',
+                      value: 2
+                    },
+                    {
+                      label: '未知',
+                      value: -1
+                    }
+                  ],
+                  span: 12
+                }, {
+                  label: '手机号',
+                  prop: 'phone',
+                  span: 12,
+                  rules: [{
+                    required: true,
+                    message: "请输入手机号",
+                    trigger: "blur"
+                  }],
+                },
+                {
+                  label: '身份证号',
+                  prop: 'idCard',
+                  span: 12,
+
+                },
+                {
+                  label: '登记来源',
+                  prop: 'createType',
+                  type: 'select',
+                  dicData: [{
+                    label: '后台录入',
+                    value: 0
+                  },
+                    {
+                      label: '小程序录入',
+                      value: 1
+                    },
+                  ],
+                  span: 12
+                },
+              ]
+            }, {
+              label: '房屋信息',
+              prop: 'group2',
+              column: [
+                {
+                  label: "所属社区",
+                  prop: "agencyId",
+                  type: "select",
+                  overHidden: true,
+                  remote: true,
+                  dataType: "string",
+                  cascaderItem: ['residentialId'],
+                  dicUrl: '/api/cyzh-community/agency/list?size=100&name={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "name",
+                    value: "id"
+                  },
+                  rules: [{
+                    required: true,
+                    message: "请选择所属社区",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属小区",
+                  prop: "residentialId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/residential/list?size=100&agencyId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "residentialName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属小区",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属楼栋",
+                  prop: "buildingId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/building/list?size=100&residentialId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "buildingName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属楼栋",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属单元",
+                  prop: "unitId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/unit/list?size=100&buildingId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "unitName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属单元",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属楼层",
+                  prop: "floorId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/floor/list?size=100&unitId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "floorName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属楼层",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属房间",
+                  prop: "roomId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/floor/list?size=100&floorId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "roomName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属房间",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                }
+              ]
+            }, {
+              label: '其他信息',
+              prop: 'group1',
+              column: [{
+                size: 'mini',
+                gutter: 10,
+                label: '备注信息',
+                prop: 'remark',
+                span: 12
+              }, {
+                readonly: true,
+                size: 'mini',
+                gutter: 10,
+                label: '审核意见',
+                prop: 'auditOpinion',
+                span: 12
+              }]
+            }]
+        },
+        viewForm: {
+          detail: true,
+          labelWidth: 110,
+
+          column: [
+            {
+              label: "",
+              prop: "faceUrl",
+              labelWidth: '43.5%',
+              row: true,
+              span: 24,
+              type: "upload",
+              listType: 'picture-img',
+              rules: [{
+                required: true,
+                message: "请上传人脸信息",
+                trigger: "blur"
+              }],
+              propsHttp: {
+                res: "data",
+                url: "link"
+              },
+              action: "/api/blade-resource/oss/endpoint/put-file",
+            }],
+          group: [
+            {
+              label: '基本信息',
+              prop: 'group1',
+              column: [
+                {
+                  label: '姓名',
+                  prop: 'name',
+                  gutter:10,
+                  rules: [{
+                    required: true,
+                    message: "请输入真实姓名",
+                    trigger: "blur"
+                  }],
+                  span: 12
+                }, {
+                  label: '性别',
+                  prop: 'sex',
+                  type: 'select',
+                  dicData: [{
+                    label: '男',
+                    value: 1
+                  },
+                    {
+                      label: '女',
+                      value: 2
+                    },
+                    {
+                      label: '未知',
+                      value: -1
+                    }
+                  ],
+                  span: 12
+                }, {
+                  label: '手机号',
+                  prop: 'phone',
+                  span: 12,
+                  rules: [{
+                    required: true,
+                    message: "请输入手机号",
+                    trigger: "blur"
+                  }],
+                },
+                {
+                  label: '身份证号',
+                  prop: 'idCard',
+                  span: 12,
+
+                },
+                {
+                  label: '登记来源',
+                  prop: 'createType',
+                  type: 'select',
+                  dicData: [{
+                    label: '后台录入',
+                    value: 0
+                  },
+                    {
+                      label: '小程序录入',
+                      value: 1
+                    },
+                  ],
+                  span: 12
+                },
+              ]
+            }, {
+              label: '房屋信息',
+              prop: 'group2',
+              column: [
+                {
+                  label: "所属社区",
+                  prop: "agencyName",
+                },
+                {
+                  label: "所属小区",
+                  prop: "residentialName",
+                },
+                {
+                  label: "所属楼栋",
+                  prop: "buildingName",
+                },
+                {
+                  label: "所属单元",
+                  prop: "unitName",
+                },
+                {
+                  label: "所属楼层",
+                  prop: "floorName",
+                },
+                {
+                  label: "所属房间",
+                  prop: "roomName",
+                }
+              ]
+            }, {
+              label: '其他信息',
+              prop: 'group1',
+              column: [{
+                size: 'mini',
+                gutter: 10,
+                label: '备注信息',
+                prop: 'remark',
+                span: 12
+              }, {
+                readonly: true,
+                size: 'mini',
+                gutter: 10,
+                label: '审核意见',
+                prop: 'auditOpinion',
+                span: 12
+              }]
+            }]
+        },
+        option: {
+          detail: true,
+          labelWidth: 110,
+
+          column: [
+            {
+              label: "",
+              prop: "faceUrl",
+              labelWidth: '43.5%',
+              row: true,
+              span: 24,
+              type: "upload",
+              listType: 'picture-img',
+              rules: [{
+                required: true,
+                message: "请上传人脸信息",
+                trigger: "blur"
+              }],
+              propsHttp: {
+                res: "data",
+                url: "link"
+              },
+              action: "/api/blade-resource/oss/endpoint/put-file",
+            }],
+          group: [
+            {
+              label: '基本信息',
+              prop: 'group1',
+              column: [
+                {
+                  label: '姓名',
+                  prop: 'name',
+                  gutter:10,
+                  rules: [{
+                    required: true,
+                    message: "请输入真实姓名",
+                    trigger: "blur"
+                  }],
+                  span: 12
+                }, {
+                  label: '性别',
+                  prop: 'sex',
+                  type: 'select',
+                  dicData: [{
+                    label: '男',
+                    value: 1
+                  },
+                    {
+                      label: '女',
+                      value: 2
+                    },
+                    {
+                      label: '未知',
+                      value: -1
+                    }
+                  ],
+                  span: 12
+                }, {
+                  label: '手机号',
+                  prop: 'phone',
+                  span: 12,
+                  rules: [{
+                    required: true,
+                    message: "请输入手机号",
+                    trigger: "blur"
+                  }],
+                },
+                {
+                  label: '身份证号',
+                  prop: 'idCard',
+                  span: 12,
+
+                },
+                {
+                  label: '登记来源',
+                  prop: 'createType',
+                  type: 'select',
+                  dicData: [{
+                    label: '后台录入',
+                    value: 0
+                  },
+                    {
+                      label: '小程序录入',
+                      value: 1
+                    },
+                  ],
+                  span: 12
+                },
+              ]
+            }, {
+              label: '房屋信息',
+              prop: 'group2',
+              column: [
+                {
+                  label: "所属社区",
+                  prop: "agencyId",
+                  type: "select",
+                  overHidden: true,
+                  remote: true,
+                  dataType: "string",
+                  cascaderItem: ['residentialId'],
+                  dicUrl: '/api/cyzh-community/agency/list?size=100&name={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "name",
+                    value: "id"
+                  },
+                  rules: [{
+                    required: true,
+                    message: "请选择所属社区",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属小区",
+                  prop: "residentialId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/residential/list?size=100&agencyId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "residentialName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属小区",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属楼栋",
+                  prop: "buildingId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/building/list?size=100&residentialId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "buildingName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属楼栋",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属单元",
+                  prop: "unitId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/unit/list?size=100&buildingId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "unitName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属单元",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属楼层",
+                  prop: "floorId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/floor/list?size=100&unitId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "floorName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属楼层",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                },
+                {
+                  label: "所属房间",
+                  prop: "roomId",
+                  type: "select",
+                  overHidden: true,
+                  dicUrl: '/api/cyzh-community/floor/list?size=100&floorId={{key}}',
+                  dicFormatter: (res) => {
+                    return res.data.records;
+                  },
+                  props: {
+                    label: "roomName",
+                    value: "id"
+                  },
+                  dataType: "string",
+                  rules: [{
+                    required: true,
+                    message: "请选择所属房间",
+                    trigger: "blur"
+                  }],
+                  viewDisplay: false
+                }
+              ]
+            }, {
+              label: '其他信息',
+              prop: 'group1',
+              column: [{
+                size: 'mini',
+                gutter: 10,
+                label: '备注信息',
+                prop: 'remark',
+                span: 12
+              }, {
+                readonly: true,
+                size: 'mini',
+                gutter: 10,
+                label: '审核意见',
+                prop: 'auditOpinion',
+                span: 12
+              }]
+            }]
+        },
+      }
+    },
+    computed: {
+      title() {
+        if (this.isAdd) {
+          return '添加常住人员'
+        }
+        if (this.option.detail) {
+          return '常住人员信息'
+        } else {
+          return '编辑常住人员'
+        }
+      }
+    },
+    methods: {
+      //下发人脸
+      pushUserFaceToDevice(id, userName, deviceIdList) {
+        let params ={
+          userId: id,
+          userName: userName,
+          userType: "ZH_",
+          targetType: 1,
+          deviceIds: deviceIdList.join(","),
+        }
+        pushFace(params).then(res => {
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+        })
+      },
+      //禁用人脸
+      deleteUserFaceFromDevice(id, deviceIdList) {
+        this.$confirm("确定禁用人脸吗?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          })
+          .then(() => {
+            let params={
+              deviceIds:deviceIdList.join(','),
+              userId:id,
+              userType:"ZH_"
+            };
+            return deleteFace(params);
+          })
+          .then(() => {
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+          });
+      },
+      showDialog(model, detail = true) {
+        this.isAdd = false
+        this.model = model
+        if(detail){
+          this.option = this.viewForm;
+        }else{
+          this.option = this.editForm;
+        }
+        this.option.detail = detail
+        this.dialogShow = true
+      },
+      showAddForm() {
+        this.isAdd = true
+        this.dialogShow = true
+        this.option = this.editForm
+        this.option.detail = false
+        this.$refs.avueForm.resetForm()
+        this.model = {}
+      },
+      submit(form, done) {
+        let data = deepClone(form)
+        if (this.isAdd) {
+          data.id = ''
+        }
+        update(data).then(() => {
+          done();
+          this.dialogShow = false;
+          this.$refs.avueForm.resetForm();
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          this.$emit('reloadData')
+        }, error => {
+          window.console.log(error);
+        });
+      },
+      rowDel(id) {
+        this.$confirm("确定删除该条数据?", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          })
+          .then(() => {
+            return remove(id);
+          })
+          .then(() => {
+            this.$message({
+              type: "success",
+              message: "操作成功!"
+            });
+            this.$emit('reloadData')
+          });
+      },
+      audit(auditStatus) {
+        this.auditObj = deepClone(this.model)
+        this.auditObj.auditStatus = auditStatus;
+        this.dialogShow = false;
+        setTimeout(() => {
+          this.auditDialogShow = true
+        }, 300)
+      },
+      //给外部调用的审核
+      auditref(obj, status) {
+        this.auditObj = deepClone(obj)
+        this.auditObj.auditStatus = status
+        this.auditDialogShow = true
+      },
+      doAudit() {
+        this.auditObj.auditOpinion = this.auditOpinion
+        update(this.auditObj).then(() => {
+          this.auditDialogShow = false;
+          this.$message({
+            type: "success",
+            message: "操作成功!"
+          });
+          this.auditOpinion = ''
+          this.$emit('reloadData')
+        }, error => {
+          this.$message({
+            type: "error",
+            message: "操作失败!"
+          })
+          loading();
+        });
+      }
+    }
+  }
+</script>