From d1b058faa19088838b668d6c03dd71c2bcc7d5d3 Mon Sep 17 00:00:00 2001
From: Administrator <admin>
Date: Thu, 09 Dec 2021 10:30:44 +0800
Subject: [PATCH] 用户角色控制修改

---
 src/views/securityGuard/securityGuard.vue |  233 +++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 182 insertions(+), 51 deletions(-)

diff --git a/src/views/securityGuard/securityGuard.vue b/src/views/securityGuard/securityGuard.vue
index 49b09c2..da43590 100644
--- a/src/views/securityGuard/securityGuard.vue
+++ b/src/views/securityGuard/securityGuard.vue
@@ -394,17 +394,26 @@
       </basic-container>
     </el-col>
     <div
-      v-show="haveSEL == 'noDrive'"
       :class="[
         $store.state.control.windowWidth >= 1024
           ? 'downSFZqudong'
           : 'downSFZqudongS',
       ]"
     >
-      <a
-        href="http://223.82.109.183:2081/zhba/upload/20211201/64d8b76f3aecae93e18d015bbca89aba.rar"
-        >未安装身份证驱动,点击下载</a
+      <el-checkbox v-model="radio" :disabled="SFZloding"
+        >使用身份证设备</el-checkbox
       >
+      <el-button
+        type="text"
+        v-show="haveSEL == 'noDrive' || haveSEL == 'noEquipment'"
+        @click="SFZopens"
+        :loading="SFZloding"
+        >{{ sfzButTitle }}</el-button
+      >
+      <!-- <div style="font-size: 14px">连接身份证设备失败</div> -->
+      <!-- v-show="haveSEL == 'noDrive'" -->
+      <!-- href="http://223.82.109.183:2081/zhba/upload/20211201/64d8b76f3aecae93e18d015bbca89aba.rar" -->
+      <!-- <a href="javascript;">未安装身份证驱动,点击下载</a> -->
     </div>
   </el-row>
 </template>
@@ -478,45 +487,114 @@
       oldm,
       oldd,
       ok = false;
-
-    const validatePassCardid = (rule, value, callback) => {
-      // console.log(oldy, oldm, oldd, year - oldy, mouth, day);
-      var test =
-        /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
-      if (!test.test(value)) {
-        callback(new Error("请输入正确身份证号码"));
-      } else {
-        // //加入校验18岁到60岁的
-        // oldy = +value.slice(6, 10);
-        // oldm = +value.slice(10, 12);
-        // oldd = +value.slice(12, 14);
-        // ok =
-        //   year - oldy < 18 || year - oldy > 60
-        //     ? false
-        //     : year - oldy == 18
-        //     ? mouth < oldm
-        //       ? false
-        //       : mouth > oldm
-        //       ? true
-        //       : day < oldd
-        //       ? false
-        //       : true
-        //     : year - oldy == 60
-        //     ? mouth < oldm
-        //       ? true
-        //       : mouth > oldm
-        //       ? false
-        //       : day <= oldd
-        //       ? false
-        //       : true
-        //     : true;
-        // if (ok) {
-        callback();
-        // } else {
-        //   // callback(new Error("根据国家要求,需在18岁至60岁"));
-        //   callback(new Error("年龄不符"));
-        // }
+    var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子
+    var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 身份证验证位值.10代表X
+    /**
+     * 判断身份证号码为18位时最后的验证位是否正确
+     * @param a_idCard 身份证号码数组
+     * @return
+     */
+    function isTrueValidateCodeBy18IdCard(a_idCard) {
+      var sum = 0; // 声明加权求和变量
+      if (a_idCard[17].toLowerCase() == "x") {
+        a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作
       }
+      for (var i = 0; i < 17; i++) {
+        sum += Wi[i] * a_idCard[i]; // 加权求和
+      }
+      let valCodePosition = sum % 11; // 得到验证码所位置
+      if (a_idCard[17] == ValideCode[valCodePosition]) {
+        return true;
+      } else {
+        return false;
+      }
+    }
+    /**
+     * 验证18位数身份证号码中的生日是否是有效生日
+     * @param idCard 18位书身份证字符串
+     * @return
+     */
+    function isValidityBrithBy18IdCard(idCard18) {
+      var year = idCard18.substring(6, 10);
+      var month = idCard18.substring(10, 12);
+      var day = idCard18.substring(12, 14);
+      var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
+      // 这里用getFullYear()获取年份,避免千年虫问题
+      if (
+        temp_date.getFullYear() != parseFloat(year) ||
+        temp_date.getMonth() != parseFloat(month) - 1 ||
+        temp_date.getDate() != parseFloat(day)
+      ) {
+        return false;
+      } else {
+        return true;
+      }
+    }
+    //去掉字符串头尾空格
+    function trim(str) {
+      return str.replace(/(^\s*)|(\s*$)/g, "");
+    }
+    const validatePassCardid = (rule, value, callback) => {
+      let ok = false;
+      if (value.length == 18) {
+        let idCard = trim(value.replace(/ /g, ""));
+        var a_idCard = idCard.split("");
+        if (
+          isValidityBrithBy18IdCard(idCard) &&
+          isTrueValidateCodeBy18IdCard(a_idCard)
+        ) {
+          //进行18位身份证的基本验证和第18位的验证
+          ok = true;
+        } else {
+          ok = false;
+        }
+      } else {
+        ok = false;
+      }
+
+      if (ok) {
+        callback();
+      } else {
+        callback(new Error("身份证错误"));
+      }
+      // console.log(oldy, oldm, oldd, year - oldy, mouth, day);
+      // var test =
+      //   /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
+      // if (!test.test(value)) {
+      //   callback(new Error("请输入正确身份证号码"));
+      // } else {
+      //   // //加入校验18岁到60岁的
+      //   // oldy = +value.slice(6, 10);
+      //   // oldm = +value.slice(10, 12);
+      //   // oldd = +value.slice(12, 14);
+      //   // ok =
+      //   //   year - oldy < 18 || year - oldy > 60
+      //   //     ? false
+      //   //     : year - oldy == 18
+      //   //     ? mouth < oldm
+      //   //       ? false
+      //   //       : mouth > oldm
+      //   //       ? true
+      //   //       : day < oldd
+      //   //       ? false
+      //   //       : true
+      //   //     : year - oldy == 60
+      //   //     ? mouth < oldm
+      //   //       ? true
+      //   //       : mouth > oldm
+      //   //       ? false
+      //   //       : day <= oldd
+      //   //       ? false
+      //   //       : true
+      //   //     : true;
+      //   // if (ok) {
+      //   callback();
+      //   // } else {
+      //   //   // callback(new Error("根据国家要求,需在18岁至60岁"));
+      //   //   callback(new Error("年龄不符"));
+      // }
+
+      // }
     };
     const validatePassPhone = (rule, value, callback) => {
       var test = /^(13[0-9]|14[0-9]|15[0-9]|17[0-9]|18[0-9]|19[0-9])\d{8}$/g;
@@ -531,10 +609,13 @@
       // 表格数据
       defaults: {},
       // 身份证设备数据
+      SFZloding: false,
+      sfzButTitle: "",
+      radio: false, //选择状态
       haveSEL: "", //设备状态
       cardShebei: "",
       intTime: "", //自动获取身份证;
-      haveCardid: true, //读卡开关
+      haveCardid: false, //读卡开关
       // 指纹数据
       isopen: false, //识别是否需要传指纹进去(解决异步传递后指纹DOM不存在的问题)
       zhiwenImg: "",
@@ -1179,6 +1260,19 @@
     };
   },
   watch: {
+    radio() {
+      if (this.radio) {
+        this.SFZloding = true;
+        this.olondSFZ();
+      } else {
+        if (this.haveSEL != "noDrive" && this.haveSEL != "noEquipment") {
+          this.$message({
+            type: "warning",
+            message: "关闭身份证设备识别!",
+          });
+        }
+      }
+    },
     "form.tenantId"() {
       if (this.form.tenantId !== "" && this.initFlag) {
         this.initData(this.form.tenantId);
@@ -1276,7 +1370,9 @@
       this.search["userType"] = 7;
       this.search["hold"] = "1";
     }
-    this.userInfo.rname.forEach((roleName) => {
+    var roleName = this.userInfo.role_name;
+    // console.log(this.userInfo,52252);
+    // this.userInfo.rname.forEach((roleName) => {
       if (
         roleName == "保安公司管理员" ||
         roleName == "保安" ||
@@ -1302,7 +1398,7 @@
         //默认全部展开
         column.dicUrl = "/api/blade-system/dept/security_lazy-tree";
       }
-    });
+    // });
 
     if (
       this.userInfo.account == "南昌市保安服务总公司" ||
@@ -1338,7 +1434,7 @@
     this.deptIds = this.userInfo.dept_id;
 
     // this.beginzhiwen();
-    this.olondSFZ(); //检查身份证设备是否存在
+    // this.olondSFZ(); //检查身份证设备是否存在
   },
   methods: {
     openccc() {
@@ -2097,11 +2193,25 @@
         }
       }
     },
+    SFZopens() {
+      if (this.haveSEL == "noDrive") {
+        let url =
+          "http://223.82.109.183:2081/zhba/upload/20211201/64d8b76f3aecae93e18d015bbca89aba.rar";
+        window.open(url, "_self");
+      } else if (this.haveSEL == "noEquipment") {
+        this.radio = true;
+      }
+    },
     olondSFZ() {
       // console.log(123456);
       var that = this;
       //   // 开始连接设备
       //   //调用对应的连接方法,并赋值给result
+      let lodings = (val) => {
+        setTimeout((res) => {
+          that.SFZloding = val;
+        }, 1000);
+      };
       this.cardShebei = CertCtl.connect((res) => {
         let k = "";
         try {
@@ -2109,18 +2219,37 @@
         } catch (error) {
           k = res;
         }
-        // console.log(k);
+        // console.log(res);
         if (k == "") {
           that.haveSEL = "noDrive";
-          console.log("连接身份证设备失败,请安装驱动");
+          // console.log("连接身份证设备失败,请安装驱动");
+          that.sfzButTitle = "未安装身份证驱动,点击下载";
+          this.$message({
+            type: "warning",
+            message: "连接身份证设备失败,请重新连接设备!",
+          });
+          that.radio = false;
+          lodings(false);
           return;
         }
         if (k.resultFlag == 0) {
           that.haveSEL = "connectionSucceeded";
-          console.log("连接身份证设备成功");
+          // console.log("连接身份证设备成功");
+          this.$message({
+            type: "success",
+            message: "连接身份证设备成功!",
+          });
+          lodings(false);
         } else {
           that.haveSEL = "noEquipment";
-          console.log("连接身份证设备失败,请重新连接设备");
+          that.sfzButTitle = "连接身份证设备失败,请重试";
+          // console.log("连接身份证设备失败,请重新连接设备!");
+          this.$message({
+            type: "warning",
+            message: "连接身份证设备失败,请重新连接设备!",
+          });
+          that.radio = false;
+          lodings(false);
         }
       });
     },
@@ -2176,7 +2305,7 @@
       }, 2000);
     },
     beginSFZ() {
-      if (this.haveSEL == "connectionSucceeded") {
+      if (this.haveSEL == "connectionSucceeded" && this.radio) {
         this.haveCardid = false;
         if (this.intTime) {
           clearInterval(this.intTime);
@@ -2184,6 +2313,8 @@
         } else {
           this.setIntervals();
         }
+      } else {
+        clearInterval(this.intTime);
       }
     },
     closeSFZ(val) {

--
Gitblit v1.9.3