| | |
| | | @row-update="rowUpdate" |
| | | :before-open="beforeOpen" |
| | | :page.sync="page" |
| | | @sort-change="sortChange" |
| | | @search-change="searchChange" |
| | | @search-reset="searchReset" |
| | | @selection-change="selectionChange" |
| | |
| | | @size-change="sizeChange" |
| | | @refresh-change="refreshChange" |
| | | @on-load="onLoad" |
| | | :upload-before="uploadBefore" |
| | | :defaults.sync="defaults" |
| | | :before-close="beforeClose" |
| | | > |
| | |
| | | </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> |
| | |
| | | remove, |
| | | update, |
| | | updatePlatform, |
| | | add, |
| | | securitySave, |
| | | grant, |
| | | resetPassword, |
| | | getUserPractitionersInfo, |
| | | updatePaperTime, |
| | | saveOrUpdateUserPractitionersInfo, |
| | | getzhiwen, //指纹 |
| | | } from "@/api/system/user"; |
| | | import { securityApply } from "@/api/accreditationRecords/accreditationRecords"; |
| | | import { getList } from "@/api/securityGuard/securityGuard"; |
| | | import { getDeptLazyTree } from "@/api/system/dept"; |
| | | import { getRoleTree, getRoleDetail } from "@/api/system/role"; |
| | | import { getPostList } from "@/api/system/post"; |
| | | import { mapGetters } from "vuex"; |
| | | import website from "@/config/website"; |
| | | import { getToken } from "@/util/auth"; |
| | | import { securityFormPageColumn } from "./data"; |
| | | import { mapState } from "vuex"; |
| | | import Qs from "qs"; |
| | | |
| | | import { MessageBox } from 'element-ui'; |
| | | //加载指纹类 |
| | | import Client from "./Client"; |
| | | import doneVue from "../work/done.vue"; |
| | | // import func from "vue-editor-bridge"; |
| | | |
| | | export default { |
| | | data() { |
| | |
| | | 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; |
| | |
| | | // 表格数据 |
| | | defaults: {}, |
| | | // 身份证设备数据 |
| | | SFZloding: false, |
| | | sfzButTitle: "", |
| | | radio: false, //选择状态 |
| | | haveSEL: "", //设备状态 |
| | | cardShebei: "", |
| | | intTime: "", //自动获取身份证; |
| | | haveCardid: true, //读卡开关 |
| | | haveCardid: false, //读卡开关 |
| | | // 指纹数据 |
| | | isopen: false, //识别是否需要传指纹进去(解决异步传递后指纹DOM不存在的问题) |
| | | zhiwenImg: "", |
| | |
| | | align: "center", |
| | | index: true, |
| | | delBtnText: "注销", |
| | | menuWidth: 327, |
| | | menuWidth: 280, |
| | | selection: true, |
| | | viewBtn: true, |
| | | defaultExpandAll: true, |
| | |
| | | }; |
| | | }, |
| | | 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); |
| | |
| | | this.search["userType"] = 7; |
| | | this.search["hold"] = "1"; |
| | | } |
| | | this.userInfo.rname.forEach((roleName) => { |
| | | if ( |
| | | roleName == "保安公司管理员" || |
| | | roleName == "保安" || |
| | | roleName == "分公司管理员" |
| | | ) { |
| | | //查询保安单位信息(包含子级) |
| | | const column = this.findObject(this.option.column, "deptId"); |
| | | // column.search = false; |
| | | //默认全部展开 |
| | | column.defaultExpandAll = true; |
| | | column.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?deptId=" + |
| | | this.userInfo.dept_id; |
| | | } else if (roleName == "公安管理员" || roleName == "administrator") { |
| | | var columnDept = that.findObject(that.option.column, "deptId"); |
| | | columnDept.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?jurisdiction=" + |
| | | that.userInfo.jurisdiction; |
| | | } else { |
| | | //查询保安单位信息(包含子级) |
| | | const column = this.findObject(this.option.column, "deptId"); |
| | | // column.search = false; |
| | | //默认全部展开 |
| | | column.dicUrl = "/api/blade-system/dept/security_lazy-tree"; |
| | | } |
| | | }); |
| | | var roleName = this.userInfo.role_name; |
| | | // console.log(this.userInfo,52252); |
| | | // this.userInfo.rname.forEach((roleName) => { |
| | | if ( |
| | | roleName == "保安公司管理员" || |
| | | roleName == "保安" || |
| | | roleName == "分公司管理员" |
| | | ) { |
| | | //查询保安单位信息(包含子级) |
| | | const column = this.findObject(this.option.column, "deptId"); |
| | | // column.search = false; |
| | | //默认全部展开 |
| | | column.defaultExpandAll = true; |
| | | column.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?deptId=" + |
| | | this.userInfo.dept_id; |
| | | } else if (roleName == "公安管理员" || roleName == "administrator") { |
| | | var columnDept = that.findObject(that.option.column, "deptId"); |
| | | columnDept.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?jurisdiction=" + |
| | | that.userInfo.jurisdiction; |
| | | } else { |
| | | //查询保安单位信息(包含子级) |
| | | const column = this.findObject(this.option.column, "deptId"); |
| | | // column.search = false; |
| | | //默认全部展开 |
| | | column.dicUrl = "/api/blade-system/dept/security_lazy-tree"; |
| | | } |
| | | // }); |
| | | |
| | | if ( |
| | | this.userInfo.account == "南昌市保安服务总公司" || |
| | |
| | | this.deptIds = this.userInfo.dept_id; |
| | | |
| | | // this.beginzhiwen(); |
| | | this.olondSFZ(); //检查身份证设备是否存在 |
| | | // this.olondSFZ(); //检查身份证设备是否存在 |
| | | }, |
| | | methods: { |
| | | openccc() { |
| | |
| | | status: this.search.status, |
| | | userType: this.search.startTime, |
| | | examinationType: this.search.examinationType, |
| | | dispatch: this.search.dispatch, |
| | | isFingerprint: this.search.isFingerprint, |
| | | isAvatar: this.search.isAvatar, |
| | | }; |
| | | // console.log(data,123456); |
| | | //导出 |
| | |
| | | } |
| | | } |
| | | }, |
| | | 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 { |
| | |
| | | } 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); |
| | | } |
| | | }); |
| | | }, |
| | |
| | | }, 2000); |
| | | }, |
| | | beginSFZ() { |
| | | if (this.haveSEL == "connectionSucceeded") { |
| | | if (this.haveSEL == "connectionSucceeded" && this.radio) { |
| | | this.haveCardid = false; |
| | | if (this.intTime) { |
| | | clearInterval(this.intTime); |
| | |
| | | } else { |
| | | this.setIntervals(); |
| | | } |
| | | } else { |
| | | clearInterval(this.intTime); |
| | | } |
| | | }, |
| | | closeSFZ(val) { |
| | |
| | | }, |
| | | refreshChange() { |
| | | this.onLoad(this.page, this.query); |
| | | }, |
| | | //排序 |
| | | sortChange(value) { |
| | | console.log(value, 51151515); |
| | | }, |
| | | onLoad(page, params = {}) { |
| | | params = this.search; |
| | |
| | | this.selectionClear(); |
| | | }); |
| | | }, |
| | | //照片上传拦截 |
| | | uploadBefore(file, done, loading, column) { |
| | | //如果你想修改file文件,由于上传的file是只读文件,必须复制新的file才可以修改名字,完后赋值到done函数里,如果不修改的话直接写done()即可 |
| | | if (file.type.indexOf("image/") == -1) { |
| | | MessageBox.alert("上传图片格式错误,请上传图片类型,如:JPG,PNG后缀的文件。") |
| | | loading(); |
| | | return false; |
| | | } |
| | | let data = window.URL.createObjectURL(new Blob([file])); |
| | | this.filename = file; |
| | | this.option.img = data; |
| | | //判断文件大小 |
| | | const isLt1M = file.size >= 30*1024 && file.size <= 500*1024; |
| | | if (!isLt1M) { |
| | | MessageBox.alert("上传图片大小必须大于30KB,且小于500KB!") |
| | | loading(); |
| | | return false; |
| | | } |
| | | done(); |
| | | return isLt1M; |
| | | }, |
| | | }, |
| | | }; |
| | | </script> |