| | |
| | | @size-change="sizeChange" |
| | | @refresh-change="refreshChange" |
| | | @on-load="onLoad" |
| | | :defaults.sync="defaults" |
| | | :before-close="beforeClose" |
| | | > |
| | | <!-- @row-update="rowUpdate" --> |
| | | <template slot="menuLeft"> |
| | |
| | | icon="el-icon-upload2" |
| | | v-if="permission.securityGuard_import" |
| | | @click="handleImport1" |
| | | >保安员批量导入 |
| | | >保安员批量导入 |
| | | </el-button> |
| | | <el-button |
| | | type="success" |
| | |
| | | icon="el-icon-upload2" |
| | | v-if="permission.securityGuard_import" |
| | | @click="handleImport2" |
| | | >个人照片批量上传 |
| | | >个人照片批量上传 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | |
| | | v-if="permission.securityGuard_security_apply" |
| | | icon="el-icon-s-promotion" |
| | | @click="handleSecurityApply" |
| | | >上岗证制证申请 |
| | | >上岗证制证申请 |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | |
| | | v-if="permission.securityGuard_security_paper_apply" |
| | | icon="el-icon-collection-tag" |
| | | @click="handleSecurityPaperApply" |
| | | >证书制证申请 |
| | | >证书制证申请 |
| | | </el-button> |
| | | <el-button |
| | | type="warning" |
| | |
| | | plain |
| | | icon="el-icon-delete" |
| | | @click="handleDelete" |
| | | >注 销 |
| | | >注 销 |
| | | </el-button> |
| | | <el-button |
| | | type="info" |
| | |
| | | v-if="permission.user_role" |
| | | icon="el-icon-user" |
| | | @click="handleGrant" |
| | | >角色配置 |
| | | >角色配置 |
| | | </el-button> |
| | | <el-button |
| | | type="info" |
| | |
| | | v-if="permission.user_reset" |
| | | icon="el-icon-refresh" |
| | | @click="handleReset" |
| | | >密码重置 |
| | | >密码重置 |
| | | </el-button> |
| | | <el-button |
| | | type="info" |
| | |
| | | v-if="userInfo.role_name.includes('admin')" |
| | | icon="el-icon-setting" |
| | | @click="handlePlatform" |
| | | >平台配置 |
| | | >平台配置 |
| | | </el-button> |
| | | <el-button |
| | | type="success" |
| | |
| | | v-if="userInfo.role_name.includes('admin')" |
| | | icon="el-icon-upload2" |
| | | @click="handleImport" |
| | | >导入 |
| | | >导入 |
| | | </el-button> |
| | | <el-button |
| | | type="warning" |
| | |
| | | v-if="userInfo.role_name.includes('admin')" |
| | | icon="el-icon-download" |
| | | @click="handleExport" |
| | | >导出 |
| | | >导出 |
| | | </el-button> |
| | | </template> |
| | | |
| | |
| | | :size="size" |
| | | :type="type" |
| | | @click.stop="rowClick(row)" |
| | | >查看 |
| | | >查看 |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-edit" |
| | |
| | | :type="type" |
| | | v-if="permission.securityGuard_delete && row.status != 2" |
| | | @click.stop="rowStatus(row)" |
| | | >离职登记 |
| | | >离职登记 |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-edit" |
| | |
| | | :type="type" |
| | | v-if="row.status == 2" |
| | | @click.stop="rowDellook(row)" |
| | | >离职查询 |
| | | >离职查询 |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-edit" |
| | |
| | | :type="type" |
| | | v-if="permission.securityGuard_check" |
| | | @click.stop="rowCheck(row)" |
| | | >异常 |
| | | >异常 |
| | | </el-button> |
| | | <el-button |
| | | icon="el-icon-edit" |
| | | style="display:none" |
| | | style="display: none" |
| | | :size="size" |
| | | :type="type" |
| | | v-if="permission.securityGuard_paper" |
| | | @click.stop="certificateClick(row)" |
| | | >纸质证书制作 |
| | | >纸质证书制作 |
| | | </el-button> |
| | | </template> |
| | | |
| | |
| | | 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> |
| | |
| | | {{ |
| | | certificateObj.cardid |
| | | ? certificateObj.cardid.slice(6, 10) + |
| | | "." + |
| | | certificateObj.cardid.slice(10, 12) + |
| | | "." + |
| | | certificateObj.cardid.slice(12, 14) |
| | | "." + |
| | | certificateObj.cardid.slice(10, 12) + |
| | | "." + |
| | | certificateObj.cardid.slice(12, 14) |
| | | : "" |
| | | }} |
| | | </div> |
| | |
| | | </template> |
| | | |
| | | <script> |
| | | // 身份证引入 |
| | | import CertCtl from "./sfzJS"; |
| | | import { |
| | | getUser, |
| | | getUserPlatform, |
| | |
| | | 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 { 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 { getToken } from "@/util/auth"; |
| | | import { securityFormPageColumn } from "./data"; |
| | | import { mapState } from "vuex"; |
| | | import Qs from "qs"; |
| | | |
| | | //加载指纹类 |
| | |
| | | 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: {}, |
| | | // 身份证设备数据 |
| | | 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, |
| | |
| | | userInfo: (state) => state.user.userInfo, |
| | | }), |
| | | }, |
| | | beforeCreate() { |
| | | }, |
| | | beforeCreate() {}, |
| | | created() { |
| | | // console.log(this.userInfo, 9999); |
| | | if (this.userInfo.role_name == "办证管理员") { |
| | |
| | | this.search["hold"] = "1"; |
| | | } |
| | | |
| | | if (this.userInfo.account == "南昌市保安服务总公司" || this.userInfo.account == "押运分公司") { |
| | | if ( |
| | | this.userInfo.account == "南昌市保安服务总公司" || |
| | | this.userInfo.account == "押运分公司" |
| | | ) { |
| | | this.option.column.push({ |
| | | label: "持枪证编号", |
| | | prop: "guncode", |
| | | width: 90, |
| | | addDisplay: false, |
| | | editDisplay: 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 |
| | | |
| | | this.excelOption1.column[0].action = |
| | | "/api/blade-user/import-securityYy?deptId=" + this.userInfo.dept_id; |
| | | } |
| | | |
| | | }, |
| | | mounted() { |
| | | // this.option.column[0].hide = true |
| | |
| | | done(); |
| | | }, |
| | | handleTemplate1() { |
| | | if (this.userInfo.account == "南昌市保安服务总公司" || this.userInfo.account == "押运分公司") { |
| | | if ( |
| | | this.userInfo.account == "南昌市保安服务总公司" || |
| | | this.userInfo.account == "押运分公司" |
| | | ) { |
| | | window.open(`/api/blade-user/export-template-securityYy`); |
| | | return |
| | | return; |
| | | } |
| | | window.open(`/api/blade-user/export-template-security`); |
| | | }, |
| | |
| | | rowClick(row) { |
| | | this.$router.push({ |
| | | path: "/securityGuardDetail", |
| | | query: {row: JSON.stringify(row)}, |
| | | query: { row: JSON.stringify(row) }, |
| | | }); |
| | | }, |
| | | //行点击事件 |
| | |
| | | this.certificateObj.registered == "" || |
| | | this.certificateObj.registered == null |
| | | ) { |
| | | this.$message({message: "请完善身份证住址信息", type: "warning"}); |
| | | this.$message({ message: "请完善身份证住址信息", type: "warning" }); |
| | | return; |
| | | } |
| | | //更新发证时间 |
| | |
| | | rowClickSelf(row) { |
| | | this.$router.push({ |
| | | path: "/securityUnitChild", |
| | | query: {fromSecunityGuardId: row}, |
| | | query: { fromSecunityGuardId: row }, |
| | | }); |
| | | }, |
| | | nodeClick(data) { |
| | |
| | | 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); |
| | | }) |
| | |
| | | // this.search["endTime"] = releaseTimeRange[1]; |
| | | // } |
| | | var data = { |
| | | cardid:this.search.cardid, |
| | | deptId:this.search.deptId, |
| | | hold:this.search.hold, |
| | | cardid: this.search.cardid, |
| | | deptId: this.search.deptId, |
| | | hold: this.search.hold, |
| | | realName: this.search.realName, |
| | | securitynumber: this.search.securitynumber, |
| | | status: this.search.status, |
| | |
| | | } |
| | | //序列号url形式,用&拼接 |
| | | data = Qs.stringify(data); |
| | | window.open(`/api/blade-user/export-security-info?${this.website.tokenHeader}=${getToken()}&`+data); |
| | | window.open( |
| | | `/api/blade-user/export-security-info?${ |
| | | this.website.tokenHeader |
| | | }=${getToken()}&` + data |
| | | ); |
| | | }); |
| | | }, |
| | | rowSave(row, done, loading) { |
| | |
| | | "离职原因", |
| | | { |
| | | confirmButtonText: "确定", |
| | | callback: (action) => { |
| | | }, |
| | | callback: (action) => {}, |
| | | } |
| | | ); |
| | | }, |
| | |
| | | cancelButtonText: "取消", |
| | | inputErrorMessage: "", |
| | | }) |
| | | .then(({value}) => { |
| | | .then(({ value }) => { |
| | | row.reasonForLeav = value; |
| | | row.status = "2"; |
| | | // return; |
| | |
| | | }); |
| | | this.refreshChange(); |
| | | }) |
| | | .catch(() => { |
| | | }); |
| | | .catch(() => {}); |
| | | }, |
| | | rowDel(row) { |
| | | this.$confirm("确定注销当前用户?", { |
| | |
| | | }=${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; |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | setIntervals: function () { |
| | | let that = this; |
| | | this.intTime = setInterval(function () { |
| | | if (!that.haveCardid) { |
| | | //定时读卡 |
| | | let result = CertCtl.readCert(); |
| | | if (result == "") { |
| | | console.log("未启动读卡插件!"); |
| | | } 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("读卡器未连接"); |
| | | } else { |
| | | // console.log(resultObj.errorMsg); |
| | | //无卡片提醒 |
| | | } |
| | | } else if (resultObj.resultFlag == "-2") { |
| | | console.log(resultObj.errorMsg); |
| | | } |
| | | } |
| | | } else { |
| | | // console.log("停止获取"); |
| | | } |
| | | }, 2000); |
| | | }, |
| | | beginSFZ() { |
| | | 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() { |
| | | if (this.intTime) { |
| | | clearInterval(this.intTime); |
| | | // this.setIntervals(); |
| | | } else { |
| | | // this.setIntervals(); |
| | | } |
| | | 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(); |
| | | done(); |
| | | }, |
| | | currentChange(currentPage) { |
| | | this.page.currentPage = currentPage; |
| | | }, |
| | | //行样式调整 |
| | | rowStyle({row, column, rowIndex}) { |
| | | rowStyle({ row, column, rowIndex }) { |
| | | if (row.examinationType == "1") { |
| | | return { |
| | | color: "#ff2727", |
| | |
| | | roleIds.forEach((roleId) => { |
| | | getRoleDetail(roleId).then((res) => { |
| | | var roleAlias = res.data.data.roleAlias; |
| | | if (roleAlias == "保安公司管理员" || 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 == "公安管理员" || roleAlias == "administrator") { |
| | | } else if ( |
| | | roleAlias == "公安管理员" || |
| | | roleAlias == "administrator" |
| | | ) { |
| | | params["jurisdiction"] = that.userInfo.jurisdiction; |
| | | var columnDept = that.findObject(that.option.column, "deptId"); |
| | | columnDept.dicUrl = |
| | |
| | | that.userInfo.jurisdiction; |
| | | |
| | | //审查状态查询开启 |
| | | var columnExaminationType = that.findObject(that.option.column, "examinationType"); |
| | | var columnExaminationType = that.findObject( |
| | | that.option.column, |
| | | "examinationType" |
| | | ); |
| | | columnExaminationType.search = true; |
| | | columnExaminationType.hide = false; |
| | | } else if (roleAlias == "培训公司管理员") { |
| | |
| | | ColumnDeptUpdate1.dicUrl = |
| | | "/api/blade-system/dept/security_lazy-tree?parentId=1413470343230877697"; |
| | | } |
| | | |
| | | |
| | | let values = { |
| | | ...params, |