| | |
| | | @size-change="sizeChange" |
| | | @refresh-change="refreshChange" |
| | | @on-load="onLoad" |
| | | :defaults.sync="defaults" |
| | | :before-close="beforeClose" |
| | | > |
| | | <!-- @row-update="rowUpdate" --> |
| | | <template slot="menuLeft"> |
| | |
| | | >证书制证申请 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | type="warning" |
| | | size="small" |
| | | plain |
| | | v-if="permission.securityGuard_escort_personnel_import" |
| | | icon="el-icon-collection-tag" |
| | | @click="handleEscortPersonnelImport" |
| | | >押运人员批量导入 |
| | | icon="el-icon-download" |
| | | @click="handleExportSecurityInfo" |
| | | >保安信息导出 |
| | | </el-button> |
| | | |
| | | <el-button |
| | |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-edit" |
| | | style="display: none" |
| | | :size="size" |
| | | :type="type" |
| | | v-if="permission.securityGuard_paper" |
| | |
| | | class="rowClickSelf" |
| | | title="点击查看所属公司情况" |
| | | @click="rowClickSelf(row.deptId)" |
| | | >{{ row.deptName }}</el-tag |
| | | > |
| | | >{{ row.deptName }} |
| | | </el-tag> |
| | | </template> |
| | | <template slot-scope="{ row }" slot="tenantName"> |
| | | <el-tag>{{ row.tenantName }}</el-tag> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | // 身份证引入 |
| | | import CertCtl from "./sfzJS"; |
| | | import { |
| | | getUser, |
| | | getUserPlatform, |
| | |
| | | import { getToken } from "@/util/auth"; |
| | | import { securityFormPageColumn } from "./data"; |
| | | import { mapState } from "vuex"; |
| | | import Qs from "qs"; |
| | | |
| | | //加载指纹类 |
| | | import Client from "./Client"; |
| | |
| | | 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("年龄不符")); |
| | | } |
| | | // //加入校验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) => { |
| | |
| | | } |
| | | }; |
| | | return { |
| | | // 表格数据 |
| | | defaults: {}, |
| | | // 身份证设备数据 |
| | | haveSEL: true, //是否存在设备 |
| | | cardShebei: "", |
| | | intTime: "", //自动获取身份证; |
| | | haveCardid: true, //读卡开关 |
| | | // 指纹数据 |
| | | isopen: false, //识别是否需要传指纹进去(解决异步传递后指纹DOM不存在的问题) |
| | | zhiwenImg: "", |
| | |
| | | searchShow: true, |
| | | reserveSelection: true, |
| | | selectable: (row) => { |
| | | if (row.hold !== "1" || row.securitynumber==null || row.securitynumber=='') { |
| | | if ( |
| | | row.hold !== "1" || |
| | | row.securitynumber == null || |
| | | row.securitynumber == "" |
| | | ) { |
| | | return false; |
| | | } else { |
| | | return true; |
| | |
| | | { |
| | | label: "姓名", |
| | | prop: "realName", |
| | | disabled: false, |
| | | rules: [ |
| | | { |
| | | required: true, |
| | |
| | | if (this.form.fingerprint != undefined) { |
| | | that.isopen = true; |
| | | let isoks = false; |
| | | |
| | | function sets(state, fingerprint, myPicture) { |
| | | isoks = state; |
| | | var winzhiwen = document.getElementById("zhiwen").contentWindow; |
| | |
| | | isoks: isoks, |
| | | }); |
| | | } |
| | | |
| | | setTimeout(() => { |
| | | // if() |
| | | if (!this.form.id) { |
| | |
| | | }, |
| | | beforeCreate() {}, |
| | | created() { |
| | | // console.log(this.userInfo, 9999); |
| | | if (this.userInfo.role_name == "办证管理员") { |
| | | this.search["userType"] = 7; |
| | | this.search["hold"] = "1"; |
| | | } |
| | | |
| | | if ( |
| | | this.userInfo.account == "南昌市保安服务总公司" || |
| | | this.userInfo.account == "押运分公司" |
| | | ) { |
| | | this.option.column.push({ |
| | | label: "持枪证编号", |
| | | prop: "guncode", |
| | | width: 90, |
| | | addDisplay: false, |
| | | editDisplay: false, |
| | | }); |
| | | |
| | | this.option.group[1].column.push({ |
| | | label: "持枪证编号", |
| | | prop: "guncode", |
| | | }); |
| | | |
| | | this.excelOption1.column[0].action = |
| | | "/api/blade-user/import-securityYy?deptId=" + this.userInfo.dept_id; |
| | | } |
| | | }, |
| | | mounted() { |
| | |
| | | this.deptIds = this.userInfo.dept_id; |
| | | |
| | | // this.beginzhiwen(); |
| | | this.olondSFZ(); //检查身份证设备是否存在 |
| | | }, |
| | | methods: { |
| | | openccc() { |
| | |
| | | done(); |
| | | }, |
| | | handleTemplate1() { |
| | | if ( |
| | | this.userInfo.account == "南昌市保安服务总公司" || |
| | | this.userInfo.account == "押运分公司" |
| | | ) { |
| | | window.open(`/api/blade-user/export-template-securityYy`); |
| | | return; |
| | | } |
| | | window.open(`/api/blade-user/export-template-security`); |
| | | }, |
| | | handleImport2() { |
| | |
| | | const data = { |
| | | ids: str, |
| | | createUser: this.userInfo.user_id, |
| | | type:1 |
| | | type: 1, |
| | | }; |
| | | return securityApply(data); |
| | | }) |
| | |
| | | const data = { |
| | | ids: str, |
| | | createUser: this.userInfo.user_id, |
| | | type:2 |
| | | type: 2, |
| | | }; |
| | | return securityApply(data); |
| | | }) |
| | |
| | | message: "操作成功!", |
| | | }); |
| | | }); |
| | | }, |
| | | //保安员信息导出 |
| | | handleExportSecurityInfo() { |
| | | this.$confirm("是否导出保安员信息数据?", "提示", { |
| | | confirmButtonText: "确定", |
| | | cancelButtonText: "取消", |
| | | type: "warning", |
| | | }).then(() => { |
| | | //获取查询条件 |
| | | // const { releaseTimeRange } = this.search; |
| | | // if (releaseTimeRange) { |
| | | // this.search["startTime"] = releaseTimeRange[0]; |
| | | // this.search["endTime"] = releaseTimeRange[1]; |
| | | // } |
| | | var data = { |
| | | cardid: this.search.cardid, |
| | | deptId: this.search.deptId, |
| | | hold: this.search.hold, |
| | | realName: this.search.realName, |
| | | securitynumber: this.search.securitynumber, |
| | | status: this.search.status, |
| | | userType: this.search.startTime, |
| | | }; |
| | | //导出 |
| | | if (this.userInfo.role_name == "保安公司管理员") { |
| | | //如果是保安公司管理员 |
| | | data["deptId"] = this.userInfo.dept_id; |
| | | } |
| | | if (this.userInfo.role_name == "培训公司管理员") { |
| | | //如果是培训公司管理员 |
| | | data["trainingUnitId"] = this.userInfo.Id; |
| | | } |
| | | if (this.userInfo.role_name == "公安管理员") { |
| | | //如果是公安管理员 |
| | | data["jurisdiction"] = this.userInfo.jurisdiction; |
| | | } |
| | | //序列号url形式,用&拼接 |
| | | data = Qs.stringify(data); |
| | | window.open( |
| | | `/api/blade-user/export-security-info?${ |
| | | this.website.tokenHeader |
| | | }=${getToken()}&` + data |
| | | ); |
| | | }); |
| | | }, |
| | | rowSave(row, done, loading) { |
| | | // var dom = document.getElementById("zhiwenOur"); |
| | |
| | | rtime: row.rtime, |
| | | securitynumber: row.securitynumber, |
| | | sex: row.sex, |
| | | guncode: row.guncode, |
| | | }, |
| | | }; |
| | | |
| | |
| | | }=${getToken()}` |
| | | ); |
| | | }, |
| | | openClosegroup(val) { |
| | | let ql = /realName|nation|cardid|registered|sex/; |
| | | for (let k in this.option.group) { |
| | | for (let i in this.option.group[k].column) { |
| | | if (ql.test(this.option.group[k].column[i].prop)) { |
| | | this.option.group[k].column[i]["disabled"] = val; |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | olondSFZ() { |
| | | console.log(123456); |
| | | var that = this; |
| | | try { |
| | | // 开始连接设备 |
| | | //调用对应的连接方法,并赋值给result |
| | | this.cardShebei = CertCtl.connect(); |
| | | //如果result为空,代表读卡插件未启动 |
| | | if (this.cardShebei == "") { |
| | | console.log("未启动读卡插件!1"); |
| | | that.haveSEL = false; |
| | | return; |
| | | } else { |
| | | //result页面回显 |
| | | console.log("ok!"); |
| | | } |
| | | } catch (e) { |
| | | that.haveSEL = false; |
| | | return; |
| | | } |
| | | let result = CertCtl.readCert(); |
| | | if (result == "") { |
| | | console.log("未启动读卡插件!2"); |
| | | that.haveSEL = false; |
| | | return; |
| | | } else { |
| | | var resultObj = eval("(" + result + ")"); |
| | | //resultFlag为0代表读卡成功 |
| | | if (resultObj.resultFlag == "0") { |
| | | //回显相关数据 |
| | | console.log("身份证设备连接成功"); |
| | | that.haveSEL = true; |
| | | } else if (resultObj.resultFlag == "-1") { |
| | | if (resultObj.errorMsg == "端口打开失败") { |
| | | console.log("读卡器未连接"); |
| | | that.haveSEL = false; |
| | | } else { |
| | | console.log(resultObj.errorMsg); |
| | | //无卡片提醒 |
| | | that.haveSEL = true; |
| | | } |
| | | } else if (resultObj.resultFlag == "-2") { |
| | | console.log(resultObj.errorMsg); |
| | | that.haveSEL = false; |
| | | } |
| | | } |
| | | }, |
| | | setIntervals: function () { |
| | | let that = this; |
| | | this.intTime = setInterval(function () { |
| | | if (!that.haveCardid) { |
| | | //定时读卡 |
| | | let result = CertCtl.readCert(); |
| | | if (result == "") { |
| | | console.log("未启动读卡插件!"); |
| | | that.closeSFZ(); |
| | | } else { |
| | | var resultObj = eval("(" + result + ")"); |
| | | //resultFlag为0代表读卡成功 |
| | | if (resultObj.resultFlag == "0") { |
| | | //回显相关数据 |
| | | // console.log(resultObj, 123); |
| | | const data = resultObj.resultContent; |
| | | that.haveCardid = true; |
| | | // console.log(data, 789); |
| | | // that.defaults.cardid.display = true; |
| | | // that.defaults.cardid.value = "123"; |
| | | // console.log(that.defaults); |
| | | that.form.realName = data.partyName; |
| | | that.form.cardid = data.certNumber; |
| | | that.form.nation = data.nation; |
| | | that.form.registered = data.certAddress; |
| | | that.form.sex = data.certType; |
| | | //禁止编辑 |
| | | that.openClosegroup(true); |
| | | //赋值数据 |
| | | // that.obj = { |
| | | // name: data.partyName, |
| | | // national: data.nation, |
| | | // certAddress: data.certAddress, |
| | | // sex: |
| | | // data.certType == 0 |
| | | // ? "未知" |
| | | // : data.certType == 1 |
| | | // ? "男" |
| | | // : data.certType == 2 |
| | | // ? "女" |
| | | // : data.certType == 9 |
| | | // ? "未说明" |
| | | // : "未能识别", |
| | | // imgs: "data:image/bmp;base64," + data.identityPic, |
| | | // yxqend: |
| | | // data.expDate.slice(0, 4) + |
| | | // "-" + |
| | | // data.expDate.slice(4, 6) + |
| | | // "-" + |
| | | // data.expDate.slice(6, 8), |
| | | // yxqstart: |
| | | // data.effDate.slice(0, 4) + |
| | | // "-" + |
| | | // data.effDate.slice(4, 6) + |
| | | // "-" + |
| | | // data.effDate.slice(6, 8), |
| | | // birthday: |
| | | // data.bornDay.slice(0, 4) + |
| | | // "-" + |
| | | // data.bornDay.slice(4, 6) + |
| | | // "-" + |
| | | // data.bornDay.slice(6, 8), |
| | | // id: data.certNumber, |
| | | // qfjg: data.certOrg, |
| | | // }; |
| | | // that.$store.commit("setCardInfor", that.obj); |
| | | // that.$store.commit("setCardidState", true); |
| | | } else if (resultObj.resultFlag == "-1") { |
| | | if (resultObj.errorMsg == "端口打开失败") { |
| | | console.log("读卡器未连接"); |
| | | that.closeSFZ(); |
| | | } else { |
| | | // console.log(resultObj.errorMsg); |
| | | //无卡片提醒 |
| | | that.closeSFZ(); |
| | | } |
| | | } else if (resultObj.resultFlag == "-2") { |
| | | console.log(resultObj.errorMsg); |
| | | that.closeSFZ(); |
| | | } |
| | | } |
| | | } else { |
| | | // console.log("停止获取"); |
| | | } |
| | | }, 2000); |
| | | }, |
| | | beginSFZ() { |
| | | if (this.haveSEL) { |
| | | try { |
| | | // 开始连接设备 |
| | | //调用对应的连接方法,并赋值给result |
| | | this.cardShebei = CertCtl.connect(); |
| | | //如果result为空,代表读卡插件未启动 |
| | | if (this.cardShebei == "") { |
| | | console.log("未启动读卡插件!"); |
| | | } else { |
| | | //result页面回显 |
| | | console.log("ok!"); |
| | | } |
| | | } catch (e) {} |
| | | this.haveCardid = false; |
| | | if (this.intTime) { |
| | | clearInterval(this.intTime); |
| | | this.setIntervals(); |
| | | } else { |
| | | this.setIntervals(); |
| | | } |
| | | } |
| | | }, |
| | | closeSFZ(val) { |
| | | if (this.intTime) { |
| | | clearInterval(this.intTime); |
| | | // this.setIntervals(); |
| | | } else { |
| | | clearInterval(this.intTime); |
| | | // this.setIntervals(); |
| | | } |
| | | if (val) { |
| | | this.haveCardid = true; |
| | | this.cardShebei = ""; |
| | | //可以编辑 |
| | | } |
| | | this.openClosegroup(false); |
| | | }, |
| | | beforeOpen(done, type) { |
| | | var that = this; |
| | | // console.log(type, 123); |
| | | this.beginSFZ(); |
| | | if (["edit", "view"].includes(type)) { |
| | | getUser(this.form.id).then((res) => { |
| | | this.form = res.data.data; |
| | |
| | | this.initFlag = true; |
| | | done(); |
| | | }, |
| | | beforeClose(done, type) { |
| | | this.closeSFZ(112); |
| | | done(); |
| | | }, |
| | | currentChange(currentPage) { |
| | | this.page.currentPage = currentPage; |
| | | }, |
| | |
| | | roleIds.forEach((roleId) => { |
| | | getRoleDetail(roleId).then((res) => { |
| | | var roleAlias = res.data.data.roleAlias; |
| | | if (roleAlias == "保安公司管理员" || roleAlias == "保安") { |
| | | if ( |
| | | roleAlias == "保安公司管理员" || |
| | | roleAlias == "保安" || |
| | | roleAlias == "分公司管理员" |
| | | ) { |
| | | //去除保安公司查询 |
| | | const column = that.findObject(that.option.column, "deptId"); |
| | | column.search = false; |
| | |
| | | ); |
| | | importColumn.action = |
| | | "/api/blade-user/import-security?deptId=" + this.deptIds; |
| | | } else if (roleAlias == "公安管理员") { |
| | | } else if ( |
| | | roleAlias == "公安管理员" || |
| | | roleAlias == "administrator" |
| | | ) { |
| | | params["jurisdiction"] = that.userInfo.jurisdiction; |
| | | var columnDept = that.findObject(that.option.column, "deptId"); |
| | | columnDept.dicUrl = |
| | |
| | | ColumnDeptUpdate.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697&jurisdiction=" + |
| | | that.userInfo.jurisdiction; |
| | | |
| | | //审查状态查询开启 |
| | | var columnExaminationType = that.findObject( |
| | | that.option.column, |
| | | "examinationType" |
| | | ); |
| | | columnExaminationType.search = true; |
| | | columnExaminationType.hide = false; |
| | | } else if (roleAlias == "培训公司管理员") { |
| | | //如果是保安公司管理员 |
| | | params["trainingUnitId"] = that.userInfo.dept_id; |
| | | //如果是培训公司管理员 |
| | | // params["trainingUnitId"] = that.userInfo.dept_id; |
| | | var columnDept2 = that.findObject(that.option.column, "deptId"); |
| | | columnDept2.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697"; |
| | |
| | | .box .el-scrollbar__wrap { |
| | | overflow: scroll; |
| | | } |
| | | |
| | | .rowClickSelf { |
| | | &:hover { |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | //保安证 本子 |
| | | .certificate_box { |
| | | width: 100%; |
| | |
| | | flex-direction: column; |
| | | font: normal 18px "SimSuncss" !important; |
| | | } |
| | | |
| | | .security_main { |
| | | width: 630px; |
| | | height: 512px; |
| | |
| | | // background-repeat: no-repeat; |
| | | position: relative; |
| | | } |
| | | |
| | | // 标题 |
| | | $upTop: 45px; |
| | | $downTop: 265px; //整体高度 |
| | |
| | | line-height: 45px; |
| | | letter-spacing: 3px; |
| | | } |
| | | |
| | | //发证公安机关 (印章) |
| | | .security_m_l_center { |
| | | position: absolute; |
| | |
| | | left: 30px; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | //证件编号 |
| | | .security_m_l_down { |
| | | position: absolute; |
| | |
| | | text-align: justify; |
| | | text-align-last: justify; |
| | | } |
| | | |
| | | //出生年月 |
| | | .security_m_r_b { |
| | | position: absolute; |
| | |
| | | text-align: justify; |
| | | text-align-last: justify; |
| | | } |
| | | |
| | | //地址 |
| | | .security_m_r_c { |
| | | position: absolute; |
| | |
| | | text-align: justify; |
| | | text-align-last: justify; |
| | | } |
| | | |
| | | //公民身份证 |
| | | .security_m_r_d { |
| | | position: absolute; |
| | |
| | | text-align: justify; |
| | | text-align-last: justify; |
| | | } |
| | | |
| | | //照片 |
| | | // width: calc(358px / 22px); |
| | | // height: calc(441px / 22px); |
| | |
| | | position: absolute; |
| | | top: $upTop; |
| | | left: 421px; |
| | | |
| | | img { |
| | | width: 100%; |
| | | height: 100%; |
| | |
| | | line-height: 45px; |
| | | letter-spacing: 3px; |
| | | } |
| | | |
| | | //发证时间 |
| | | $timeTop: 315px; //整体高度 |
| | | //年 |
| | |
| | | left: 109px; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | //月 |
| | | .security_m_l_titlepaperTimeyue { |
| | | position: absolute; |
| | |
| | | left: 168px; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | //日 |
| | | .security_m_l_titlepaperTimeri { |
| | | position: absolute; |
| | |
| | | left: 159px; |
| | | line-height: 40px; |
| | | } |
| | | |
| | | //证件编号 |
| | | .security_m_l_downsecuritynumber { |
| | | position: absolute; |
| | |
| | | left: $centerLeft; |
| | | // width: $rightWidth; |
| | | } |
| | | |
| | | // 生日 |
| | | .security_m_r_o_rightbirthday { |
| | | position: absolute; |
| | |
| | | left: $centerLeft; |
| | | // width: $rightWidth; |
| | | } |
| | | |
| | | // 地址 |
| | | .security_m_r_o_rightaddress { |
| | | position: absolute; |
| | |
| | | left: $centerLeft; |
| | | width: 185px; |
| | | } |
| | | |
| | | // 身份证 |
| | | .security_m_r_o_rightcardid { |
| | | position: absolute; |
| | |
| | | left: $centerLeft; |
| | | // width: $rightWidth; |
| | | } |
| | | |
| | | //背景图 |
| | | .security_main_backImge { |
| | | position: absolute; |
| | |
| | | line-height: 40px; |
| | | letter-spacing: 2px; |
| | | } |
| | | |
| | | .zhiwenMain { |
| | | width: 100%; |
| | | height: 305px; |
| | |
| | | // justify-content: space-around; |
| | | // border: 1px solid red; |
| | | } |
| | | |
| | | // .zhiwenImgs { |
| | | // width: 178px; |
| | | // height: 178px; |