<template> <div class="app-container"> <el-dialog v-if="visible" :visible.sync="visible" :before-close="handleClose" :append-to-body="true" title="申请详情" width="60%"> <div class="level-title mt-20" style="display: flex;justify-content: space-between;"> <h1>申请信息</h1> </div> <table class="table-ui" style="margin-bottom: 20px;"> <tr> <th style="width: 17%">申请人</th> <td style="width: 17%">{{ pd.CREATOR }}</td> <th style="width: 17%">申请时间</th> <td style="width: 17%">{{ pd.CREATTIME }}</td> <th style="width: 17%">备注</th> <td style="width: 15%">{{ pd.DESCR }}</td> </tr> <tr> <th style="width: 30px">安监部门</th> <td style="width: 50px">{{ pd.SUPERVISION_DEPARTMENT_NAME }}</td> <th style="width: 30px">审核人</th> <td style="width: 50px">{{ pd.SUPERVISION_USER_NAME }}</td> <th style="width: 30px">审核时间</th> <td style="width: 50px">{{ pd.SUPERVISION_TIME }}</td> </tr> <tr> <th>主管部门</th> <td>{{ pd.MANAGER_DEPT_NAME }}</td> <th>审核人</th> <td>{{ pd.MANAGER_USER_NAME }}</td> <th>审核时间</th> <td>{{ pd.MANAGER_TIME }}</td> </tr> <tr> <th>属地管理部门</th> <td>{{ pd.TERRITORIALITY_DEPARTMENT_NAME }}</td> <th>审核人</th> <td>{{ pd.TERRITORIALITY_USER_NAME }}</td> <th>审核时间</th> <td>{{ pd.TERRITORIALITY_TIME }}</td> </tr> <tr v-if="pd.AUDIT_DESCR"> <th>股份公司意见</th> <td colspan="5">{{ pd.AUDIT_DESCR }}</td> </tr> <tr v-if="pd.CORP_AUDIT_DESCR"> <th>分公司意见</th> <td colspan="5">{{ pd.CORP_AUDIT_DESCR }}</td> </tr> </table> <div class="level-title"> <h1>申请人员列表</h1> </div> <el-table ref="multipleTable" :data="userList" :header-cell-style="{'font-weight': 'bold','color': '#000'}" tooltip-effect="dark" border fit highlight-current-row> <el-table-column type="selection" width="55" align="center" /> <el-table-column type="index" label="序号" width="50" align="center" /> <el-table-column prop="USERNAME" label="用户名" align="center" /> <el-table-column prop="NAME" label="姓名" align="center" /> <el-table-column prop="DEPARTMENT_NAME" label="部门" align="center" /> <el-table-column prop="STATE" label="审核状态" align="center" > <template slot-scope="{row}"> <el-tag v-if="row.MANAGER_STATE === 0 || row.SUPERVISION_STATE === 0 || row.TERRITORIALITY_STATE === 0" type="danger">审核不通过</el-tag> <el-tag v-else-if="row.MANAGER_STATE === 1 && row.SUPERVISION_STATE === 1 && row.TERRITORIALITY_STATE === 1" type="success">审核通过</el-tag> <el-tag v-else type="success">待审核</el-tag> </template> </el-table-column> <el-table-column label="操作" align="center" width="200" > <template slot-scope="{row}"> <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row.USER_ID)">查看</el-button> </template> </el-table-column> </el-table> <div class="page-btn-group"> <div/> <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getUserList" /> </div> <div slot="footer" class="dialog-footer"> <el-button @click="closeWindow">关 闭</el-button> </div> </el-dialog> <el-dialog v-if="userInfoDialog" :visible.sync="userInfoDialog" :append-to-body="true" title="查看" width="60%"> <table class="table-ui" style="margin-bottom: 20px;"> <div class="level-title"> <h1>人员信息</h1> </div> <tr> <th>照片</th> <td> <span v-if="imgUrl != ''"> <div class="img-flex"> <viewer> <img :src="imgUrl" width="40" height="40" style="object-fit: cover;"> </viewer> </div> </span> <span v-else/> </td> <th>姓名</th> <td>{{ userDetailForm.NAME }}</td> <th>性别</th> <td>{{ userDetailForm.SEX === '0' ? '男' : '女' }}</td> </tr> <tr> <th>出生年月</th> <td>{{ userDetailForm.DATE_OF_BIRTH }}</td> <th>年龄</th> <td>{{ userDetailForm.AGE }}</td> <th>手机号</th> <td>{{ userDetailForm.PHONE }}</td> </tr> <tr> <th>身份证</th> <td>{{ userDetailForm.CARD_ID }}</td> <th>身份证照片</th> <!--if条件不可删除--> <td v-if="userCardIDPhotoFile.length>0" colspan="3"> <span> <div class="img-flex"> <viewer> <img v-for="item in userCardIDPhotoFile" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="40" height="40" style="object-fit: cover;"> </viewer> </div> </span> </td> </tr> <tr> <th>民族</th> <td>{{ userDetailForm.minzuName ? userDetailForm.minzuName : '暂无信息' }}</td> <th>婚姻状况</th> <td>{{ userDetailForm.MARITALSTATUS === '0' ? '未婚' : '已婚' }}</td> <th>政治面貌</th> <td>{{ userDetailForm.zzName }} {{ userDetailForm.zzName == '中共党员' ? '入党时间' + userDetailForm.POLITICAL_TIME : '' }} </td> </tr> <tr> <th>户口所在地</th> <td>{{ userDetailForm.HKLOCAL ? userDetailForm.HKLOCAL : '暂无信息' }}</td> <th>现住址</th> <td>{{ userDetailForm.ADDRESS ? userDetailForm.ADDRESS : '暂无信息' }}</td> <th>联系电话</th> <td>{{ userDetailForm.PHONE }}</td> </tr> <tr> <th>文化程度</th> <td>{{ userDetailForm.DEGREE_OF_EDUCATION_NAME }}</td> <th>岗位名称(工种)</th> <td colspan="5">{{ userDetailForm.POST_ID }}</td> </tr> <tr> <th>是否缴纳社保</th> <td :colspan="userDetailForm.IS_SOCIAL === '1' ? '':5">{{ formatLabel(userDetailForm.IS_SOCIAL) }}</td> <th v-if="userDetailForm.IS_SOCIAL === '1'">社会保障号码</th> <td v-if="userDetailForm.IS_SOCIAL === '1'">{{ userDetailForm.SOCIAL_NUMBER }}</td> <th v-if="userDetailForm.IS_SOCIAL === '1'">社保卡照片</th> <td v-if="userDetailForm.IS_SOCIAL === '1'&& socialPhotoFile.length>0" colspan="3"> <span> <div class="img-flex"> <viewer> <img v-for="item in socialPhotoFile" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="40" height="40" style="object-fit: cover;"> </viewer> </div> </span> </td> </tr> <tr> <th>是否参加三级安全培训</th> <td>{{ formatLabel(userDetailForm.IS_LEVEL_THREE) }}</td> <th v-if="userDetailForm.IS_LEVEL_THREE == 1">三级安全培训照片</th> <td v-if="userDetailForm.IS_LEVEL_THREE == 1 && photosOfLevel.length>0" colspan="5"> <span> <div class="img-flex"> <viewer> <img v-for="item in photosOfLevel" :src="config.fileUrl + item.FILEPATH" :key="item.IMGFILES_ID" width="40" height="40" style="object-fit: cover;"> </viewer> </div> </span> </td> </tr> <tr> <th>是否缴纳保险</th> <td>{{ formatLabel(userDetailForm.IS_BF) }}</td> <th>是否特殊工种</th> <td>{{ formatLabel(userDetailForm.IS_SPECIAL_JOB) }}</td> <th>是否流动人员</th> <td>{{ formatLabel(userDetailForm.ISFLOW) }}</td> </tr> </table> <div class="level-title"> <h1>培训记录</h1> </div> <el-table :data="trainRecordList" :header-cell-style="{'font-weight': 'bold','color': '#000'}" tooltip-effect="dark" border fit highlight-current-row> <el-table-column type="selection" width="55" align="center"/> <el-table-column type="index" label="序号" width="50" align="center"/> <el-table-column prop="CLASS_NAME" label="班级名称" align="center"/> <el-table-column prop="OPENING_TIME" label="开班时间" align="center"/> <el-table-column prop="TRAINING_TYPE_NAME" label="培训类型" align="center"/> <el-table-column prop="PLACE_NAME" label="培训地点" align="center"/> <el-table-column label="培训有效期" align="center"> <template slot-scope="{row}"> <span>{{ formatDate(row.VALIDITY_PERIOD_START) }} 至 {{ formatDate(row.VALIDITY_PERIOD_END) }}</span> </template> </el-table-column> </el-table> <div v-if="userDetailForm.IS_SPECIAL_JOB == '1'" class="level-title"> <h1>特种作业人员信息</h1> </div> <table v-for="(item,index) in specialUsersList" :key="index" class="table-ui" style="margin-bottom: 20px;"> <tr> <th style="width: 150px">证书名称</th> <td style="width: 150px">{{ item.CERTIFICATE }}</td> <th style="width: 150px">作业类别</th> <td style="width: 180px">{{ item.SPECIAL_TYPE_NAME }}</td> <th style="width: 150px">操作项目</th> <td>{{ item.OPERATION_TYPE_NAME }}</td> </tr> <tr> <th>特种作业证书编号</th> <td>{{ item.SPECIAL_NUMBER }}</td> <th>发证机关</th> <td colspan="3">{{ item.ISSUING_AUTHORITY }}</td> </tr> <tr> <th>复审时间</th> <td>{{ item.REVIEW_TIME }}</td> <th>有效期</th> <td colspan="3">{{ item.VALIDITY_TIME_START }} 至 {{ item.VALIDITY_TIME_END }}</td> </tr> </table> <div v-if="detailForm.SUPERVISION_STATE === 0 || detailForm.MANAGER_STATE === 0 || detailForm.TERRITORIALITY_STATE === 0" class="level-title mt-20"> <h1>打回信息</h1> </div> <table v-if="detailForm.SUPERVISION_STATE === 0 || detailForm.MANAGER_STATE === 0 || detailForm.TERRITORIALITY_STATE === 0" class="table-ui" style="margin-bottom: 20px;"> <tr> <th>打回人</th> <td v-if="detailForm.SUPERVISION_STATE === 0">{{ detailForm.SUPERVISION_USER_NAME }}</td> <td v-if="detailForm.MANAGER_STATE === 0">{{ detailForm.MANAGER_USER_NAME }}</td> <td v-if="detailForm.TERRITORIALITY_STATE === 0 && detailForm.MANAGER_USER_NAME !== detailForm.TERRITORIALITY_USER_NAME"> {{ detailForm.TERRITORIALITY_USER_NAME }} </td> <th>打回原由</th> <td v-if="detailForm.SUPERVISION_STATE === 0">{{ detailForm.SUPERVISION_OPINION }}</td> <td v-if="detailForm.MANAGER_STATE === 0">{{ detailForm.MANAGER_OPINION }}</td> <td v-if="detailForm.TERRITORIALITY_STATE === 0 && detailForm.MANAGER_USER_NAME !== detailForm.TERRITORIALITY_USER_NAME"> {{ detailForm.TERRITORIALITY_OPINION }} </td> </tr> </table> <div slot="footer" class="dialog-footer"> <el-button @click="userInfoDialog = false">关 闭</el-button> </div> </el-dialog> <el-dialog :visible.sync="QRCodeDialog" title="查看二维码" width="680px" class="top-dialog"> <div class="table-qrcode" style="text-align: center;padding-top: 30px;"> <vue-qr :text="qrcodeStr" :margin="0" :size="300" color-dark="#000" color-light="#fff" /> </div> <div slot="footer" class="dialog-footer"> <el-button @click="QRCodeDialog = false">关 闭</el-button> </div> </el-dialog> </div> </template> <script> import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 import { requestFN } from '@/utils/request' import vueQr from 'vue-qr' import dateformat from '@/utils/dateformat' import '@riophae/vue-treeselect/dist/vue-treeselect.css' export default { components: { Pagination, vueQr }, data() { return { config: config, contractFileList: [], // 合同文件 insuranceFileList: [], // 保险文件 userInfoDialog: false, QRCodeDialog: false, qrcodeStr: '', userDetailForm: {}, userEntryForm: {}, specialUsersList: {}, imgUrl: '', wenhuachengduList: [], // 文化程度 userCardIDPhotoFile: [], // 身份证照片 postList: [], // 岗位名称 trainRecordList: [], // 培训记录 visible: false, pd: {}, userList: [], listQuery: { page: 1, limit: 10 }, total: 0, photosOfLevel: [] } }, methods: { formatDate(date, column) { if (date) { return dateformat(date, 'YYYY-MM-DD') } else { return '' } }, init(e) { if (e) { this.pd = e } this.visible = true this.userList = [] this.getDict() this.getUserList() }, // 获取数据字典数据 getDict: function() { requestFN( '/dictionaries/getLevels', { DICTIONARIES_ID: '1144b16d85f14b108ea7859e2be9d001' } ).then((data) => { this.flowAreaList = data.list }).catch((e) => { }) requestFN( 'dictionaries/getLevels', { DICTIONARIES_ID: 'd7d80f08d73a4accbccf4fd3d8d1d867' } ).then((data) => { this.wenhuachengduList = data.list }).catch((e) => { this.listLoading = false }) requestFN( 'dictionaries/getLevels', { DICTIONARIES_ID: '09e36ac01e9540f8bc84eab1c1a78754' } ).then((data) => { this.postList = data.list }).catch((e) => { this.listLoading = false }) }, // 人员 getUserList() { requestFN( '/trainingbatch/batchUserList?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, { TRAININGBATCH_ID: this.pd.TRAININGBATCH_ID } ).then((data) => { this.userList = data.varList this.total = data.page.totalResult }).catch((e) => { }) }, // 二维码 showQRCode(id) { this.QRCodeDialog = true const arr = [{ USER_ID: id, CODE_TYPE: '1' }] this.qrcodeStr = JSON.stringify(arr) }, // 查看 async handleShow(USER_ID) { await this.getUserInfoById(USER_ID) await this.getOtherUserInfoById(USER_ID) this.userInfoDialog = true }, getUserInfoById(id) { return new Promise((resolve, reject) => { requestFN( '/user/getFloatPersonDetailById', { USER_ID: id, TRAININGBATCH_ID: this.pd.TRAININGBATCH_ID, CORPINFO_ID: JSON.parse(sessionStorage.getItem('user')).CORPINFO_ID } ).then((data) => { this.userDetailForm = Object.assign(this.userDetailForm, data.userDetail) this.userEntryForm = Object.assign(this.userEntryForm, data.eCard) if (this.userDetailForm.PHOTO) { this.imgUrl = config.fileUrl + this.userDetailForm.PHOTO } this.trainRecordList = data.recordList // this.insuranceFileList = data.insuranceFile // this.contractFileList = data.contractFile resolve() }).catch((e) => { reject() }) }) }, getOtherUserInfoById(id) { return new Promise((resolve, reject) => { requestFN( 'user/getDetailByUserIdAndCorpInfoId', { USER_ID: id, CORPINFO_ID: JSON.parse(sessionStorage.getItem('user')).CORPINFO_ID, CER_TYPE: '7498057c4c1f4a11b9a960e66ea04a7a' } ).then((data) => { Object.assign(this.userDetailForm, data.pd) this.userPhotoFile = data.userPhotoFile if (this.userPhotoFile.length > 0) { this.imgUrl = config.fileUrl + this.userPhotoFile[0].FILEPATH } this.insuranceFileList = data.insuranceFile this.specialUsersList = data.specialUsers this.contractFileList = data.contractFile this.userCardIDPhotoFile = data.userCardIDPhotoFile this.socialPhotoFile = data.socialPhotoFile this.gongshangbaoxianFile = data.gongshangbaoxianFile resolve() }).catch((e) => { reject() }) }) }, // 转换是否 formatLabel(value) { if (value == '1') { return '是' } else if (value == '0') { return '否' } else { return '' } }, // 转换字典数据 formatDictioariesLabel(value, type) { var list = [] if (type == '0') { list = this.wenhuachengduList } else if (type == '1') { list = this.postList } if (value) { if (list.length > 0) { var data = '' for (let i = 0; i < list.length; i++) { const obj = list[i] if (value == obj.BIANMA) { data = obj.NAME break } } return data } else { return value } } else { return '' } }, handleClose() { this.visible = false }, closeWindow() { this.handleClose() } } } </script>