From bab72ac2526af1116e1f3af25b5b635141317699 Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Fri, 19 Jan 2024 20:44:33 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E5=8E=BB=E9=99=A4debugger?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/map/index.vue | 98 ++++++++++++++++++++--------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/src/views/map/index.vue b/src/views/map/index.vue index 96c7677..fa61f10 100644 --- a/src/views/map/index.vue +++ b/src/views/map/index.vue @@ -1108,58 +1108,58 @@ export default { }, keepalive(token) { // 第二套方案 - requestFN( - '/map/loginOrKeepAlive', - { - } - ).then((data) => { - - }) + // requestFN( + // '/map/loginOrKeepAlive', + // { + // } + // ).then((data) => { + // + // }) }, ysVideoInit() { // 第二套方案 - var _this = this - requestFN( - '/map/loginOrKeepAlive', - { - } - ).then((data) => { - const token = data.token - var nbsp = String.fromCharCode(160) - var arr = [] - arr.length = 40 - const str = arr.fill(nbsp).join('') - const voidPath = imosPlayer.getUniqueID() - window.voidPath = voidPath - document.title = document.title + str + new Date().getTime() - _this.keepalive(token) - setInterval(_this.keepalive, 30000, token) - - window.videoWindow = 0 - imosPlayer.setLinkPort('8093') - imosPlayer - .init({ - ip: '172.14.0.54', - token: token, - title: document.title, - voidListenerPath: '\\' + voidPath - }) - .then(async(resr) => { - if (resr.ErrCode === 0) { - // imosPlayer.setLiveNetLinkMode(liveNetProtocol, liveByMS) - // imosPlayer.setReplayNetLinkMode(replayNetProtocol, replayByMS) - - // eslint-disable-next-line no-alert - console.info('登录成功') - } else { - // eslint-disable-next-line no-alert - console.info(resr.ErrMsg) - } - }) - .catch((err) => { - console.error(err) - }) - }) + // var _this = this + // requestFN( + // '/map/loginOrKeepAlive', + // { + // } + // ).then((data) => { + // const token = data.token + // var nbsp = String.fromCharCode(160) + // var arr = [] + // arr.length = 40 + // const str = arr.fill(nbsp).join('') + // const voidPath = imosPlayer.getUniqueID() + // window.voidPath = voidPath + // document.title = document.title + str + new Date().getTime() + // _this.keepalive(token) + // setInterval(_this.keepalive, 30000, token) + // + // window.videoWindow = 0 + // imosPlayer.setLinkPort('8093') + // imosPlayer + // .init({ + // ip: '172.14.0.54', + // token: token, + // title: document.title, + // voidListenerPath: '\\' + voidPath + // }) + // .then(async(resr) => { + // if (resr.ErrCode === 0) { + // // imosPlayer.setLiveNetLinkMode(liveNetProtocol, liveByMS) + // // imosPlayer.setReplayNetLinkMode(replayNetProtocol, replayByMS) + // + // // eslint-disable-next-line no-alert + // console.info('登录成功') + // } else { + // // eslint-disable-next-line no-alert + // console.info(resr.ErrMsg) + // } + // }) + // .catch((err) => { + // console.error(err) + // }) + // }) }, // keepalive(token) { // axios({ From e6d21ace08b7cd5110dc530113b62dc82701312d Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Mon, 22 Jan 2024 16:01:47 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E8=8B=A5=E5=B9=B2bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/QRCode.vue | 36 ++ src/views/xgf/flow/components/apply.vue | 320 +++++++++++++ src/views/xgf/flow/components/list.vue | 241 ++++++++++ src/views/xgf/flow/components/picture.vue | 36 ++ src/views/xgf/flow/components/record.vue | 198 ++++++++ src/views/xgf/flow/components/sendUtil.vue | 238 ++++++++++ src/views/xgf/flow/components/user.vue | 250 ++++++++++ src/views/xgf/flow/components/users.vue | 513 +++++++++++++++++++++ src/views/xgf/flow/index.vue | 23 + 9 files changed, 1855 insertions(+) create mode 100644 src/views/xgf/flow/components/QRCode.vue create mode 100644 src/views/xgf/flow/components/apply.vue create mode 100644 src/views/xgf/flow/components/list.vue create mode 100644 src/views/xgf/flow/components/picture.vue create mode 100644 src/views/xgf/flow/components/record.vue create mode 100644 src/views/xgf/flow/components/sendUtil.vue create mode 100644 src/views/xgf/flow/components/user.vue create mode 100644 src/views/xgf/flow/components/users.vue create mode 100644 src/views/xgf/flow/index.vue diff --git a/src/views/xgf/flow/components/QRCode.vue b/src/views/xgf/flow/components/QRCode.vue new file mode 100644 index 0000000..297e138 --- /dev/null +++ b/src/views/xgf/flow/components/QRCode.vue @@ -0,0 +1,36 @@ +<template> + <div> + <el-dialog :visible.sync="visible" :append-to-body="appendToBody" title="相关方安全告知培训合格证" width="370px" destroy-on-close > + <vue-qr :text="qrCodeStr" :margin="0" :size="320" color-dark="#000" color-light="#fff"/> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' + +export default { + components: { vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + qrCodeStr: '' + } + }, + methods: { + init(e) { + this.visible = true + this.qrCodeStr = e.qrCodeStr + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/flow/components/apply.vue b/src/views/xgf/flow/components/apply.vue new file mode 100644 index 0000000..199811d --- /dev/null +++ b/src/views/xgf/flow/components/apply.vue @@ -0,0 +1,320 @@ +<template> + <el-dialog + v-if="visible" + :visible.sync="visible" + :before-close="handleClose" + :append-to-body="true" + title="培训申请" + width="60%"> + <el-form ref="form" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item + prop="TERRITORIALITY" + label="集团单位 " + > + <Treeselect + :options="jituanDanweiTreeData" + :normalizer="normalizer" + v-model="form.TERRITORIALITY" + placeholder="请选择集团单位 " + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getUserList($event)" + /> + </el-form-item> + </el-col> + + <el-col :span="12"> + <el-form-item + prop="TERRITORIALITY_USER_ID" + label="审核人员" + > + <div style="display:flex;justify-content: space-between;align-items: flex-start;"> + <el-select v-model="form.TERRITORIALITY_USER_ID"> + <el-option + v-for="item in companyUserList" + :key="item.USER_ID" + :label="item.NAME" + :value="item.USER_ID"/> + </el-select> + </div> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="12"> + <el-form-item + prop="MANAGER" + label="主管部门" + > + <Treeselect + :options="treeData" + :normalizer="normalizer" + v-model="form.MANAGER" + :disabled="true" + placeholder="请选择主管部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getmanagerUserList($event)" + /> + </el-form-item> + </el-col> + + <el-col :span="12"> + <el-form-item + prop="MANAGER_USER_ID" + label="审核人员" + > + <div style="display:flex;justify-content: space-between;align-items: flex-start;"> + <el-select v-model="form.MANAGER_USER_ID"> + <el-option + v-for="item in managercompanyUserList" + :key="item.USER_ID" + :label="item.NAME" + :value="item.USER_ID"/> + </el-select> + </div> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item + prop="SUPERVISION" + label="安监部门" + > + <Treeselect + :options="treeData" + :normalizer="normalizer" + v-model="form.SUPERVISION" + :disabled="true" + placeholder="请选择安监部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + /> + </el-form-item> + </el-col> + + <el-col :span="12"> + <el-form-item + prop="SUPERVISION_USER_ID" + label="审核人员" + > + <div style="display:flex;justify-content: space-between;align-items: flex-start;"> + <el-select v-model="form.SUPERVISION_USER_ID"> + <el-option v-for="item in userList" :key="item.USER_ID" :label="item.NAME" :value="item.USER_ID"/> + </el-select> + </div> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="24"> + <el-form-item label="备注"> + <el-input :rows="3" v-model="form.DESCR" type="textarea" placeholder="这里输入备注..."/> + </el-form-item> + </el-col> + </el-row> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button @click="closeWindow">取 消</el-button> + <el-button :loading="loading" type="primary" @click="save">确 定</el-button> + </div> + </el-dialog> +</template> + +<script> +import { requestFN } from '@/utils/request' +import Treeselect from '@riophae/vue-treeselect' +import '@riophae/vue-treeselect/dist/vue-treeselect.css' + +export default { + components: { + Treeselect + }, + props: { + corpInfo: { + type: String, + default: '' + } + }, + data() { + return { + visible: false, + loading: false, + treeData: [], + companyTreeData: [], + corpinfo: {}, + userList: [], + companyUserList: [], + managercompanyUserList: [], + jituanDanwei: '', + jituanDanweiTreeData: [], + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + form: {}, + rules: { + // SUPERVISION: [{ required: true, message: '安监部门不能为空', trigger: 'blur' }], + SUPERVISION_USER_ID: [{ required: true, message: '审核人员不能为空', trigger: 'blur' }], + MANAGER: [{ required: true, message: '主管部门不能为空', trigger: 'blur' }], + MANAGER_USER_ID: [{ required: true, message: '审核人员不能为空', trigger: 'blur' }], + TERRITORIALITY: [{ required: true, message: '属地管理部门不能为空', trigger: 'blur' }], + TERRITORIALITY_USER_ID: [{ required: true, message: '审核人员不能为空', trigger: 'blur' }] + } + } + }, + methods: { + async init(e) { + if (e) { + this.users = e + } + this.visible = true + this.loading = false + this.form = {} + /** + * 获取相关方的 集团单位 corpinfo/getDataForEditByCorpInfoId + * 根据集团单位 找到 对应的 企业id + */ + await this.getCorpinfo() + }, + getCorpinfo() { + requestFN( + '/corpinfo/getDataForEditByCorpInfoId', + { + CORPINFO_ID: JSON.parse(sessionStorage.getItem('user')).CORPINFO_ID, + tm: new Date().getTime() + } + ).then((data) => { + this.corpinfo = data.pd + // 河港机械 jtdw002 1e6dbbe16004402f8d2c0e52afd9a676 + // 河港港工 jtdw003 3a854eefa7894e06aaa1a2611bca80f6 + // 河港检测 jtdw004 020578a4c1f04bc692ee25145c2efbe5 + // 方宇物业 jtdw005 90966974de3c4b83aca6f8fd6432d5c2 + + if (data.pd.CORP_TYPE == 'jtdw002') { + this.jituanDanwei = '1e6dbbe16004402f8d2c0e52afd9a676' + } + if (data.pd.CORP_TYPE == 'jtdw003') { + this.jituanDanwei = '3a854eefa7894e06aaa1a2611bca80f6' + } + if (data.pd.CORP_TYPE == 'jtdw004') { + this.jituanDanwei = '020578a4c1f04bc692ee25145c2efbe5' + } + if (data.pd.CORP_TYPE == 'jtdw005') { + this.jituanDanwei = '90966974de3c4b83aca6f8fd6432d5c2' + } + this.getTreeData() + }) + }, + // 获得部门树 + getTreeData() { + requestFN( + '/regulatoryApi/department/listTree', + {} + ).then((data) => { + this.treeData = JSON.parse(data.zTreeNodes) + // 必须指定【股份-安全监督部】 + this.form.SUPERVISION = 'c31058273a2d40f9b83dd8e5ae3a723c' + this.form.MANAGER = this.corpinfo.MAIN_DEPARTMENT + this.getRegulatoryUserList(this.form.SUPERVISION) + this.getmanagerUserList(this.corpinfo.MAIN_DEPARTMENT) + }).catch((e) => { + console.log(e) + }) + + if (this.jituanDanwei) { + requestFN( + '/companyApi/department/listTree', + { CORPINFO_ID: this.jituanDanwei } + ).then((data) => { + this.jituanDanweiTreeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + }) + } + }, + getRegulatoryUserList(DEPARTMENT_ID) { + requestFN( + '/regulatoryApi/user/listAll', + { + DEPARTMENT_ID: DEPARTMENT_ID, + ISASSESS: '1' + } + ).then((data) => { + this.userList = data.userList + }).catch((e) => { + }) + }, + // 人员 + getUserList({ id: DEPARTMENT_ID }) { + requestFN( + '/companyApi/user/listAll', + { + DEPARTMENT_ID + } + ).then((data) => { + this.companyUserList = data.userList + }).catch((e) => { + }) + }, + getmanagerUserList(DEPARTMENT_ID) { + requestFN( + '/regulatoryApi/user/listAll', + { + DEPARTMENT_ID: DEPARTMENT_ID + } + ).then((data) => { + this.managercompanyUserList = data.userList + }).catch((e) => { + }) + }, + + save() { + this.$refs.form.validate(valid => { + if (valid) { + this.loading = true + this.form.USER_COUNT = this.users.length + this.form.AUDIT_STATUS = 0 + this.form.TYPE = 2 + requestFN( + '/trainingbatch/add', + { + ...this.form, + users: this.users.join(',') + } + ).then((data) => { + this.loading = false + this.$message({ + message: '申请成功', + type: 'success' + }) + this.handleClose() + }).catch((e) => { + this.listLoading = false + }) + } else { + return false + } + }) + }, + handleClose() { + this.visible = false + this.$emit('finish', '') + }, + closeWindow() { + this.handleClose() + } + } +} +</script> diff --git a/src/views/xgf/flow/components/list.vue b/src/views/xgf/flow/components/list.vue new file mode 100644 index 0000000..0c25b19 --- /dev/null +++ b/src/views/xgf/flow/components/list.vue @@ -0,0 +1,241 @@ +<template> + <div class="app-container"> + <el-form label-width="130px"> + <el-row> + <el-col :span="6"> + <el-form-item label="用户名"> + <el-input v-model="KEYWORDS" placeholder="请输入用户名"/> + </el-form-item> + </el-col> + <el-col v-if="false" :span="6"> + <el-form-item label="培训状态"> + <el-select v-model="STATUS" placeholder="请选择培训状态" style="width: 100%;" clearable> + <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label-width="10px"> + <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"> + 搜索 + </el-button> + <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset"> + 重置 + </el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-table + ref="multipleTable" + :data="varList" + :header-cell-style="{'font-weight': 'bold','color': '#000'}" + tooltip-effect="dark" + border + fit + highlight-current-row> + <el-table-column :selectable="handleSelectWithDifferentStatus" 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="BELONG_TO_CORP_NAME" label="外派公司名称" align="center"/> + <el-table-column label="操作" align="center" width="250"> + <template slot-scope="{row}"> + <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row)">详情</el-button> + <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="approve([row])">审批</el-button> + <el-button v-if="false" type="success" icon="el-icon-edit" size="mini" @click="getUserInfo(row)">电子合格证</el-button> + </template> + </el-table-column> + </el-table> + <div class="page-btn-group"> + <div> + <el-button v-if="false" type="primary" icon="el-icon-plus" @click="handleAdd">批量同意</el-button> + </div> + <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/> + </div> + <user ref="userInfo" append-to-body/> + <user-info ref="userInfos" append-to-body/> + <send-util ref="sendUtil" append-to-body @refresh="getList"/> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import vueQr from 'vue-qr' +import apply from './apply' +import user from './user.vue' +import SendUtil from './sendUtil.vue' +import UserInfo from '../../flow_audit/userInfo.vue' + +export default { + components: { UserInfo, SendUtil, Pagination, apply, vueQr, user }, + directives: { waves }, + data() { + return { + config: config, + QRCodeDialog: false, + qrcodeStr: '', + userDetailForm: {}, + specialUsersList: {}, + detailForm: {}, + userEntryForm: {}, + imgUrl: '', + SUPERVISE_CORPINFO_ID: '', + wenhuachengduList: [], // 文化程度 + postList: [], // 岗位名称 + photosOfLevel: [], // 三级教育照片 + trainRecordList: [], // 培训记录 + contractFileList: [], // 合同文件 + insuranceFileList: [], // 保险文件 + gongshangbaoxianFile: [], + userPhotoFile: [], // 头像 + userCardIDPhotoFile: [], // 身份证照片 + socialPhotoFile: [], // 身份证照片 + listQuery: { + page: 1, + limit: 10 + }, + total: 0, + varList: [], + KEYWORDS: '', + statusList: [{ value: 0, label: '未培训' }, { value: 1, label: '培训中' }, { + value: 2, + label: '已培训(合格)' + }, { value: 3, label: '已培训(不合格)' }, { value: 9, label: '申请中' }], + STATUS: '', + add: false, // 新增按钮 + del: false, // 删除按钮 + edit: false // 修改按钮 + } + }, + created() { + this.getDict() + this.getList() + this.hasButton() + }, + methods: { + handleSelectWithDifferentStatus(row, rowIndex) { + if (row.STATUS === 0) { + // 不禁用 + return true + } else { + // 禁用 + return false + } + }, + getQuery() { + if (this.$refs.multipleTable) { + this.$refs.multipleTable.clearSelection() + } + this.listQuery = { + page: 1, + limit: 10 + } + this.getList() + }, + goKeyReset() { + this.KEYWORDS = '' + this.STATUS = '' + this.getQuery() + }, + getList() { + this.listLoading = true + requestFN( + '/xgf/user/getAppointApproveList?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + KEYWORDS: this.KEYWORDS, + STATUS: '1', + EMPLOY_FLAG: '1', + CHECK_STATUS: '1' + } + ).then((data) => { + this.listLoading = false + this.varList = data.list + this.total = data.page.totalResult + }) + .catch((e) => { + this.listLoading = false + }) + }, + handleShow(row) { + this.$refs.userInfos.init(row) + }, + approve(row) { + this.$refs.sendUtil.init(row) + }, + getUserInfo(row) { + this.$refs.userInfo.init(row) + }, + handleAdd() { + const _selectData = this.$refs.multipleTable.selection + if (_selectData == null || _selectData.length == 0) { + this.$message({ + message: '未勾选培训人员...', + type: 'error' + }) + return false + } + + var users = [] + _selectData.map(item => { + if (item.STATUS === 0) { + users.push(item.USER_ID) + } + }) + + if (users == null || users.length == 0) { + this.$message({ + message: '勾选人员暂无法提交申请...', + type: 'error' + }) + return false + } + this.$refs.apply.init(users) + }, + hasButton() { + var keys = 'trainingbatch:add,trainingbatch:del,trainingbatch:edit,fhSms,email,fromExcel,toExcel' + requestFN( + '/head/hasButton', + { + keys: keys, tm: new Date().getTime() + } + ).then((data) => { + if (data.result == 'success') { + this.add = data.trainingbatchfhadminadd // 增 + this.del = data.trainingbatchfhadmindel // 删 + this.edit = data.trainingbatchfhadminedit // 改 + this.fromExcel = data.fromExcel // 从excel导入权限 + this.toExcel = data.toExcel // 导出到excel权限 + } else if (data.result == 'exception') { + // showException('按钮权限', data.exception)// 显示异常 + console.info('按钮权限:', data.exception) + } + }) + .catch((e) => { + this.listLoading = false + }) + }, + getDict: function() { + 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 + }) + } + } +} +</script> + diff --git a/src/views/xgf/flow/components/picture.vue b/src/views/xgf/flow/components/picture.vue new file mode 100644 index 0000000..57e7255 --- /dev/null +++ b/src/views/xgf/flow/components/picture.vue @@ -0,0 +1,36 @@ +<template> + <div> + <el-dialog :visible.sync="visible" :append-to-body="appendToBody" title="头像" width="370px" destroy-on-close > + <el-image :src="src"/> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' + +export default { + components: { vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + src: '' + } + }, + methods: { + init(e) { + this.visible = true + this.src = e.src + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/flow/components/record.vue b/src/views/xgf/flow/components/record.vue new file mode 100644 index 0000000..e82258d --- /dev/null +++ b/src/views/xgf/flow/components/record.vue @@ -0,0 +1,198 @@ +<template> + <div class="app-container"> + <el-page-header content="申请记录" @back="goBack"/> + <el-form label-width="130px"> + <el-row> + <el-col :span="5"> + <el-form-item label="申请人员"> + <el-input v-model="KEYWORDS" placeholder="请输入申请人员"/> + </el-form-item> + </el-col> + <el-col :span="5"> + <el-form-item label="主管部门"> + <Treeselect + :options="companyTreeData" + :normalizer="normalizer" + v-model="MANAGER" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + /> + </el-form-item> + </el-col> + <el-col :span="5"> + <el-form-item label="属地管理部门"> + <Treeselect + :options="companyTreeData" + :normalizer="normalizer" + v-model="TERRITORIALITY" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + /> + </el-form-item> + </el-col> + <el-col :span="5"> + <el-form-item label="申请状态"> + <el-select v-model="AUDIT_STATUS" placeholder="请选择申请状态" style="width: 100%;"> + <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label-width="10px"> + <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"> + 搜索 + </el-button> + <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset"> + 重置 + </el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-table ref="multipleTable" :data="varList" :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="CREATTIME" label="申请时间" align="center" /> + <el-table-column prop="CREATOR" label="申请人员" align="center" /> + <el-table-column prop="SUPERVISION_DEPARTMENT_NAME" label="安监部门" align="center" /> + <el-table-column prop="MANAGER_DEPT_NAME" label="主管部门" align="center" /> + <el-table-column prop="TERRITORIALITY_DEPARTMENT_NAME" label="属地管理部门" align="center" /> + <el-table-column prop="TRAIN_DATE" label="申请年份" align="center" > + <template slot-scope="{row}"> + {{ new Date(row.CREATTIME).getFullYear() }} + </template> + </el-table-column> + <el-table-column prop="AUDIT_STATUS" label="申请状态" align="center" > + <template slot-scope="{row}"> + <span v-if="row.AUDIT_STATUS === 0">待审核</span> + <span v-if="row.AUDIT_STATUS === 1">审核中</span> + <span v-if="row.AUDIT_STATUS === 2">待培训</span> + <span v-if="row.AUDIT_STATUS === 3">已完成</span> + </template> + </el-table-column> + <el-table-column prop="PASS_COUNT" label="审核通过人数" align="center" /> <!-- 已更新为申请状态中的审核通过人员数--> + <el-table-column prop="USER_COUNT" label="申请人数" align="center" /> + <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)">查看</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="getList" /> + </div> + + <users ref="users"/> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import Treeselect from '@riophae/vue-treeselect' +import '@riophae/vue-treeselect/dist/vue-treeselect.css' +import users from './users' +export default { + components: { Pagination, Treeselect, users }, + directives: { waves }, + data() { + return { + listQuery: { + page: 1, + limit: 10 + }, + total: 0, + varList: [], + treeData: [], + companyTreeData: [], + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + MANAGER: null, + TERRITORIALITY: null, + statusList: [{ value: 0, label: '待审核' }, { value: 1, label: '审核中' }, { value: 2, label: '待培训' }, { value: 3, label: '已完成' }], + AUDIT_STATUS: '', + KEYWORDS: '' + } + }, + created() { + this.getList() + this.getTreeData() + }, + methods: { + getQuery() { + this.$refs.multipleTable.clearSelection() + this.listQuery = { + page: 1, + limit: 10 + } + this.getList() + }, + goKeyReset() { + this.MANAGER = null + this.TERRITORIALITY = null + this.AUDIT_STATUS = '' + this.KEYWORDS = '' + this.getQuery() + }, + getList() { + this.listLoading = true + requestFN( + '/trainingbatch/list?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + MANAGER: this.MANAGER, + TERRITORIALITY: this.TERRITORIALITY, + AUDIT_STATUS: this.AUDIT_STATUS, + KEYWORDS: this.KEYWORDS, + TYPE: 2, + USER_ID: JSON.parse(sessionStorage.getItem('user')).USER_ID + } + ).then((data) => { + this.listLoading = false + this.varList = data.varList + console.log(this.varList) + this.total = data.page.totalResult + }) + .catch((e) => { + this.listLoading = false + }) + }, + + // 获得部门树 + getTreeData() { + requestFN( + '/regulatoryApi/department/listTree', + {} + ).then((data) => { + this.treeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + }) + requestFN( + '/companyApi/department/listTree', + { CORPINFO_ID: this.$parent.SUPERVISE_CORPINFO_ID } + ).then((data) => { + this.companyTreeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + }) + }, + + handleShow(row) { + this.$refs.users.init(row) + }, + goBack() { + this.$parent.activeName = 'List' + } + } +} +</script> + diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue new file mode 100644 index 0000000..5cf5078 --- /dev/null +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -0,0 +1,238 @@ +<template> + <div> + <el-dialog v-loading = "loading" :visible.sync="visible" :append-to-body="appendToBody" :before-close="beforeClose" title="审批" width="1200px" destroy-on-close> + <el-form ref="form" :model="form" :rules="rules" label-width="200px" label-position="right" type="flex"> + <el-row :gutter="12"> + <el-col :span="12"> + <el-form-item prop="STATUS" label="是否通过: "> + <el-select v-model="form.STATUS" style="width: 300px" placeholder="请选择"> + <el-option label="是" value="1"/> + <el-option label="否" value="0"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item v-if="form.STATUS === '1' && isShow" prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> + <Treeselect + :options="departmentTree" + :normalizer="normalizer" + v-model="form.APPOINT_DEPARTMENT_ID" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getPeopleList($event)" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col v-if="form.STATUS === '0'" :span="12"> + <el-form-item v-if="form.STATUS === '0'" prop="OPINION" label="打回原因:"> + <el-input v-model="form.OPINION" :rows="2" type="textarea" placeholder="填写审批意见"/> + </el-form-item> + </el-col> + <el-col v-if="form.STATUS === '1' && isShow" :span="12"> + <el-form-item v-if="form.STATUS === '1'" prop="APPOINT_USER_ID" label="指定监管部门审批人:"> + <el-select v-model="form.user" style="width: 300px" placeholder="请选择" @change="chooseUser"> + <el-option v-for="item in peopleList" :key="item.USER_ID" :value="JSON.stringify(item)" :label="item.NAME"/> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button @click="handleClose">关 闭</el-button> + <el-button type="primary" @click="sendMessage('1')">确 定</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' +import Treeselect from '@riophae/vue-treeselect' +import { requestFN } from '@/utils/request' + +export default { + components: { Treeselect, vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + loading: false, + form: { + STATUS: null, + APPOINT_CORP_ID: '', + APPOINT_CORP_NAME: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: null, + APPOINT_USER_NAME: '', + OPINION: '', + user: '', + tm: new Date().getTime(), + list: [], + isShow: true, + info: {} + }, + rules: { + STATUS: [ + { required: true, message: '请选择是否通过', trigger: 'change' } + ], + APPOINT_DEPARTMENT_ID: [ + { required: true, message: '请选择指定监管部门', trigger: 'change' } + ], + APPOINT_USER_ID: [ + { required: true, message: '请选择指定监管部门审批人', trigger: 'change' } + ], + OPINION: [ + { required: true, message: '请填写打回原因', trigger: 'change' } + ] + }, + heirloom: {}, + + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + + departmentTree: [], + peopleList: [] + } + }, + methods: { + async init(e) { + console.log(e) + this.loading = true + this.visible = true + this.heirloom = JSON.stringify(e) + this.form.list = JSON.stringify(e) + this.info = e[0] + if (this.info.FLOWS_TYPE === '0') { + if (this.info.FLOWS_STEP === 0) { + this.isShow = true + await this.getDepartmentTree() + } else { + this.isShow = false + } + } else { + this.isShow = true + await this.getCorpDepartmentTree() + } + this.loading = false + }, + sendMessage(e) { + this.$refs.form.validate((valid) => { + if (!valid) { + this.$message.error('请填写完整信息') + } else { + requestFN('/xgf/user/approve', this.form) + .then((data) => { + this.$message.success('推送成功') + this.visible = false + this.$emit('refresh', '') + }) + .catch((e) => { + console.log(e) + }) + } + }) + }, + getDepartmentTree() { + return new Promise(resolve => { + requestFN( + '/department/listTree', + {} + ).then((data) => { + this.departmentTree = this.removeEmptyChildren(JSON.parse(data.zTreeNodes)) + resolve(true) + }).catch((e) => { + }) + }) + }, + getCorpDepartmentTree() { + return new Promise(resolve => { + requestFN( + '/openApi/corpDepartment/listTree', + {} + ).then((data) => { + this.departmentTree = this.removeEmptyChildren(JSON.parse(data.zTreeNodes)) + resolve(true) + }).catch((e) => { + }) + }) + }, + getPeopleList(e) { + this.form.APPOINT_DEPARTMENT_NAME = e.name + if (this.info.FLOWS_TYPE === '0') { + requestFN( + '/user/listAll', + { + DEPARTMENT_ID: e.id + } + ).then((data) => { + this.peopleList = data.userList + }).catch((e) => { + console.log(e) + }) + } else { + requestFN( + '/user/listAllManageAndCorp', + { + DEPARTMENT_ID: e.id + } + ).then((data) => { + this.peopleList = data.userList + }).catch((e) => { + console.log(e) + }) + } + }, + chooseUser(e) { + const entity = JSON.parse(e) + this.form.APPOINT_USER_ID = entity.USER_ID + this.form.APPOINT_USER_NAME = entity.NAME + }, + + handleClose() { + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + this.visible = false + }, + beforeClose() { + this.visible = false + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/flow/components/user.vue b/src/views/xgf/flow/components/user.vue new file mode 100644 index 0000000..889dc08 --- /dev/null +++ b/src/views/xgf/flow/components/user.vue @@ -0,0 +1,250 @@ +<template> + <div> + <el-dialog :visible.sync="visible" :append-to-body="appendToBody" title="相关方安全告知培训合格证" width="370px"> + <div v-for="item in peopleList" :key="item.CLASS_INFO_ID" style="height: 220px"> + <div class="bg_table"> + <div class="title">相关方安全告知培训合格证</div> + <div class="red">{{ item.CLASS_NO }}</div> + <table class="table"> + <tr> + <td style="width: 120px"> + <div class="text textone name">姓名</div> + </td> + <td style="width: 100px;"> + <div class="text text1 tcenter">{{ item.NAME }}</div> + </td> + <td style="width: 86px"> + <div class="text text2 tcenter">工种</div> + </td> + <td style="width: 148px;"> + <div v-if="item.JOBS_TYPE" class="text tcenter ">{{ item.JOBS_TYPE }}</div> + <div v-else>暂无</div> + </td> + <td rowspan="4" style="width: 134px;"> + <img v-if="!getShowPicture(item)" src="../../../../assets/images/peopleHead.png" alt="" style="width: 116px; height: 146px"> + <img v-if="getShowPicture(item)" :src="config.fileUrl + item.PHOTO" alt="" style="width: 116px; height: 146px" @click="openPicture(config.fileUrl + item.PHOTO)"> + </td> + </tr> + <tr> + <td> + <div class="text textone">资质</div> + </td> + <td colspan="3"> + <div v-if="item.CERTIFICATE" class="text">{{ item.CERTIFICATE }}</div> + <div v-else>暂无</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">培训时间</div> + </td> + <td colspan="3"> + <div class="text">{{ item.OPENING_TIME }}</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">有效期限</div> + </td> + <td colspan="3"> + <div class="text">{{ item.VALIDITY_PERIOD_END }}</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">所在单位</div> + </td> + <td colspan="3"> + <div class="text">{{ item.DEPARTMENT_NAME }}</div> + </td> + <td rowspan="3" style="padding-top: 6px" @click="click(config.messageUrl + '?CLASS_INFO_ID=' + item.CLASS_INFO_ID)"> + <vue-qr :text="config.messageUrl + '?CLASS_INFO_ID=' + item.CLASS_INFO_ID" :margin="0" :size="110" color-dark="#000" color-light="#fff"/> + </td> + </tr> + <tr> + <td> + <div class="text textone">身份证号</div> + </td> + <td colspan="3"> + <div class="text">{{ item.CARD_ID }}</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">手机</div> + </td> + <td colspan="3"> + <div class="text">{{ item.PHONE }}</div> + </td> + </tr> + </table> + </div> + </div> + </el-dialog> + <QRCode ref="QRcode" append-to-body/> + <Picture ref="Picture" append-to-body/> + </div> +</template> + +<script> +import { requestFN } from '@/utils/request' +import vueQr from 'vue-qr' +import QRCode from './QRCode.vue' +import Picture from './picture.vue' + +export default { + components: { QRCode, Picture, vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + config: config, + visible: false, + peopleList: [], + CLASS_MESSAGE_ID: '', + CLASS_INFO_ID: '', + USER_ID: '', + qrCodeStr: '' + } + }, + methods: { + init(e) { + console.info(e) + if (e && e.CLASS_INFO_ID) { + this.CLASS_INFO_ID = e.CLASS_INFO_ID + } + if (e && e.CLASS_MESSAGE_ID) { + this.CLASS_MESSAGE_ID = e.CLASS_MESSAGE_ID + } + if (e && e.USER_ID) { + this.USER_ID = e.USER_ID + } + this.qrCodeStr = config.messageUrl + '?CLASS_INFO_ID=' + this.CLASS_INFO_ID + this.visible = true + this.getInfo() + }, + getInfo() { + requestFN('/trainusers/getUserinfoList', { + CLASS_INFO_ID: this.CLASS_INFO_ID, + CLASS_MESSAGE_ID: this.CLASS_MESSAGE_ID, + USER_ID: this.USER_ID + }) + .then((data) => { + this.peopleList = data.list + }).catch((e) => { + console.log(e) + }) + }, + getShowPicture(row) { + if (row.PHOTO && row.PHOTO !== '' && (row.PHOTO.indexOf('.jpg') >= 0 || row.PHOTO.indexOf('.png') >= 0 || row.PHOTO.indexOf('.jpeg') >= 0)) { + return true + } + }, + click(e) { + this.$refs.QRcode.init({ qrCodeStr: e }) + }, + openPicture(src) { + this.$refs.Picture.init({ src: src }) + } + } +} +</script> + +<style lang="scss" scoped> + +.name{ + width: 120px; + overflow: hidden;//溢出隐藏 + white-space: nowrap; // 强制一行显示 + text-overflow: ellipsis;// 显示。。。省略号 +} +.red { + width: 660px; + color: #ff0000; + margin-left: 34px; + font-size: 24px; +} + +.bg_table { + background: url("../../../../assets/tablebg.jpg") no-repeat bottom center; + background-size: 100%; + width: 660px; + height: 430px; + border: 4px solid #453d3a; + transform: scale(0.5); + transform-origin: top left; + + .title { + font-size: 28px; + text-align: center; + margin-top: 34px; + font-weight: bold; + color: #000000; + } + + .table { + border-collapse: collapse; + width: 590px; + color: #453d3a; + font-size: 20px; + margin: 34px; + text-align: left; + margin-top: 10px; + + .tcenter { + text-align: center + } + + .w60 { + width: 100px; + } + + .w74 { + width: 148px + } + + th, td { + border: 2px solid #453d3a; + text-align: left; + height: 40px; + padding: 0 16px; + + box-sizing: border-box; + + .textone { + width: 80px; + text-align: justify; + text-align-last: justify; + text-justify: distribute-all-lines; + margin: 0 auto; + } + + .text1 { + width: 60px; + text-align: justify; + text-align-last: justify; + text-justify: distribute-all-lines; + margin: 0 auto; + + } + + .text2 { + width: 50px; + text-align: justify; + text-align-last: justify; + text-justify: distribute-all-lines; + margin: 0 auto; + + } + + .text { + + } + } + } +} +</style> diff --git a/src/views/xgf/flow/components/users.vue b/src/views/xgf/flow/components/users.vue new file mode 100644 index 0000000..2d11653 --- /dev/null +++ b/src/views/xgf/flow/components/users.vue @@ -0,0 +1,513 @@ +<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> diff --git a/src/views/xgf/flow/index.vue b/src/views/xgf/flow/index.vue new file mode 100644 index 0000000..70cda6e --- /dev/null +++ b/src/views/xgf/flow/index.vue @@ -0,0 +1,23 @@ +<template> + <component :is="activeName" /> +</template> + +<script> +import List from './components/list' +import Record from './components/record' +export default { + components: { + List: List, + Record: Record + }, + data() { + return { + activeName: 'List', + SUPERVISE_CORPINFO_ID: '' + } + } +} +</script> + +<style scoped> +</style> From cdbeacee285b970e235a5bad0a949636f9033de6 Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Mon, 22 Jan 2024 16:38:42 +0800 Subject: [PATCH 03/11] =?UTF-8?q?=E8=8B=A5=E5=B9=B2bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/entrust.vue | 189 +++++++++++++++++++++ src/views/xgf/flow/components/list.vue | 10 +- src/views/xgf/flow/components/sendUtil.vue | 50 ++---- 3 files changed, 210 insertions(+), 39 deletions(-) create mode 100644 src/views/xgf/flow/components/entrust.vue diff --git a/src/views/xgf/flow/components/entrust.vue b/src/views/xgf/flow/components/entrust.vue new file mode 100644 index 0000000..88f2e0c --- /dev/null +++ b/src/views/xgf/flow/components/entrust.vue @@ -0,0 +1,189 @@ +<template> + <div> + <el-dialog v-loading = "loading" :visible.sync="visible" :append-to-body="appendToBody" :before-close="beforeClose" title="审批" width="1200px" destroy-on-close> + <el-form ref="form" :model="form" :rules="rules" label-width="200px" label-position="right" type="flex"> + <el-row :gutter="12"> + <el-col :span="12"> + <el-form-item prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> + <Treeselect + :options="departmentTree" + :normalizer="normalizer" + v-model="form.APPOINT_DEPARTMENT_ID" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getPeopleList($event)" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item prop="APPOINT_USER_ID" label="指定监管部门审批人:"> + <el-select v-model="form.user" style="width: 300px" placeholder="请选择" @change="chooseUser"> + <el-option v-for="item in peopleList" :key="item.USER_ID" :value="JSON.stringify(item)" :label="item.NAME"/> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button @click="handleClose">关 闭</el-button> + <el-button type="primary" @click="sendMessage('1')">确 定</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' +import Treeselect from '@riophae/vue-treeselect' +import { requestFN } from '@/utils/request' + +export default { + components: { Treeselect, vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + loading: false, + form: { + STATUS: null, + APPOINT_CORP_ID: '', + APPOINT_CORP_NAME: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: null, + APPOINT_USER_NAME: '', + OPINION: '', + user: '', + tm: new Date().getTime(), + list: [], + isShow: true, + info: {} + }, + rules: { + STATUS: [ + { required: true, message: '请选择是否通过', trigger: 'change' } + ], + APPOINT_DEPARTMENT_ID: [ + { required: true, message: '请选择指定监管部门', trigger: 'change' } + ], + APPOINT_USER_ID: [ + { required: true, message: '请选择指定监管部门审批人', trigger: 'change' } + ], + OPINION: [ + { required: true, message: '请填写打回原因', trigger: 'change' } + ] + }, + heirloom: {}, + + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + + departmentTree: [], + peopleList: [] + } + }, + methods: { + async init(e) { + console.log(e) + this.loading = true + this.visible = true + this.heirloom = JSON.stringify(e) + this.form.list = JSON.stringify(e) + this.getDepartmentTree() + this.loading = false + }, + sendMessage(e) { + this.$refs.form.validate((valid) => { + if (!valid) { + this.$message.error('请填写完整信息') + } else { + requestFN('/xgf/user/approve', this.form) + .then((data) => { + this.$message.success('推送成功') + this.visible = false + this.$emit('refresh', '') + }) + .catch((e) => { + console.log(e) + }) + } + }) + }, + getDepartmentTree() { + return new Promise(resolve => { + requestFN( + '/corpDepartment/listTreeManageAndCorpHasOrder', + {} + ).then((data) => { + const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes') + this.departmentTree = this.removeEmptyChildren(treeData) + resolve(true) + }).catch((e) => { + console.log(e) + }) + }) + }, + getPeopleList(e) { + this.form.APPOINT_DEPARTMENT_NAME = e.name + requestFN( + '/user/listAllCorp', + { + DEPARTMENT_ID: e.id + } + ).then((data) => { + this.peopleList = data.userList + }).catch((e) => { + console.log(e) + }) + }, + chooseUser(e) { + const entity = JSON.parse(e) + this.form.APPOINT_USER_ID = entity.USER_ID + this.form.APPOINT_USER_NAME = entity.NAME + }, + + handleClose() { + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + this.visible = false + }, + beforeClose() { + this.visible = false + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/flow/components/list.vue b/src/views/xgf/flow/components/list.vue index 0c25b19..dcf0f3a 100644 --- a/src/views/xgf/flow/components/list.vue +++ b/src/views/xgf/flow/components/list.vue @@ -39,10 +39,11 @@ <el-table-column prop="USERNAME" label="用户名" align="center"/> <el-table-column prop="NAME" label="姓名" align="center"/> <el-table-column prop="BELONG_TO_CORP_NAME" label="外派公司名称" align="center"/> - <el-table-column label="操作" align="center" width="250"> + <el-table-column label="操作" align="center" width="350"> <template slot-scope="{row}"> <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row)">详情</el-button> <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="approve([row])">审批</el-button> + <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="entrust([row])">委托制单单位审批</el-button> <el-button v-if="false" type="success" icon="el-icon-edit" size="mini" @click="getUserInfo(row)">电子合格证</el-button> </template> </el-table-column> @@ -56,6 +57,7 @@ <user ref="userInfo" append-to-body/> <user-info ref="userInfos" append-to-body/> <send-util ref="sendUtil" append-to-body @refresh="getList"/> + <entrust ref="entrust" append-to-body @refresh="getList"/> </div> </template> @@ -68,9 +70,10 @@ import apply from './apply' import user from './user.vue' import SendUtil from './sendUtil.vue' import UserInfo from '../../flow_audit/userInfo.vue' +import Entrust from './entrust.vue' export default { - components: { UserInfo, SendUtil, Pagination, apply, vueQr, user }, + components: { Entrust, UserInfo, SendUtil, Pagination, apply, vueQr, user }, directives: { waves }, data() { return { @@ -165,6 +168,9 @@ export default { approve(row) { this.$refs.sendUtil.init(row) }, + entrust(row) { + this.$refs.entrust.init(row) + }, getUserInfo(row) { this.$refs.userInfo.init(row) }, diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue index 5cf5078..655580d 100644 --- a/src/views/xgf/flow/components/sendUtil.vue +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -12,7 +12,7 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item v-if="form.STATUS === '1' && isShow" prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> + <el-form-item v-if="form.STATUS === '1' " prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> <Treeselect :options="departmentTree" :normalizer="normalizer" @@ -32,7 +32,7 @@ <el-input v-model="form.OPINION" :rows="2" type="textarea" placeholder="填写审批意见"/> </el-form-item> </el-col> - <el-col v-if="form.STATUS === '1' && isShow" :span="12"> + <el-col v-if="form.STATUS === '1' " :span="12"> <el-form-item v-if="form.STATUS === '1'" prop="APPOINT_USER_ID" label="指定监管部门审批人:"> <el-select v-model="form.user" style="width: 300px" placeholder="请选择" @change="chooseUser"> <el-option v-for="item in peopleList" :key="item.USER_ID" :value="JSON.stringify(item)" :label="item.NAME"/> @@ -117,18 +117,7 @@ export default { this.visible = true this.heirloom = JSON.stringify(e) this.form.list = JSON.stringify(e) - this.info = e[0] - if (this.info.FLOWS_TYPE === '0') { - if (this.info.FLOWS_STEP === 0) { - this.isShow = true - await this.getDepartmentTree() - } else { - this.isShow = false - } - } else { - this.isShow = true - await this.getCorpDepartmentTree() - } + this.getDepartmentTree() this.loading = false }, sendMessage(e) { @@ -174,29 +163,16 @@ export default { }, getPeopleList(e) { this.form.APPOINT_DEPARTMENT_NAME = e.name - if (this.info.FLOWS_TYPE === '0') { - requestFN( - '/user/listAll', - { - DEPARTMENT_ID: e.id - } - ).then((data) => { - this.peopleList = data.userList - }).catch((e) => { - console.log(e) - }) - } else { - requestFN( - '/user/listAllManageAndCorp', - { - DEPARTMENT_ID: e.id - } - ).then((data) => { - this.peopleList = data.userList - }).catch((e) => { - console.log(e) - }) - } + requestFN( + '/user/listAll', + { + DEPARTMENT_ID: e.id + } + ).then((data) => { + this.peopleList = data.userList + }).catch((e) => { + console.log(e) + }) }, chooseUser(e) { const entity = JSON.parse(e) From 67358620385f48ce7e60da608a68ca43153bad15 Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Mon, 22 Jan 2024 18:11:55 +0800 Subject: [PATCH 04/11] =?UTF-8?q?=E8=8B=A5=E5=B9=B2bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/list.vue | 2 +- src/views/xgf/flow/components/sendUtil.vue | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/views/xgf/flow/components/list.vue b/src/views/xgf/flow/components/list.vue index dcf0f3a..a96ceb0 100644 --- a/src/views/xgf/flow/components/list.vue +++ b/src/views/xgf/flow/components/list.vue @@ -43,7 +43,7 @@ <template slot-scope="{row}"> <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row)">详情</el-button> <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="approve([row])">审批</el-button> - <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="entrust([row])">委托制单单位审批</el-button> + <el-button v-if="row.power_flag === '1' && row.FLOWS_STEP === 2" type="primary" icon="el-icon-s-claim" size="mini" @click="entrust([row])">委托制单单位审批</el-button> <el-button v-if="false" type="success" icon="el-icon-edit" size="mini" @click="getUserInfo(row)">电子合格证</el-button> </template> </el-table-column> diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue index 655580d..a49a643 100644 --- a/src/views/xgf/flow/components/sendUtil.vue +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -12,7 +12,7 @@ </el-form-item> </el-col> <el-col :span="12"> - <el-form-item v-if="form.STATUS === '1' " prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> + <el-form-item v-if="form.STATUS === '1' && !form.STEP" prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> <Treeselect :options="departmentTree" :normalizer="normalizer" @@ -32,7 +32,7 @@ <el-input v-model="form.OPINION" :rows="2" type="textarea" placeholder="填写审批意见"/> </el-form-item> </el-col> - <el-col v-if="form.STATUS === '1' " :span="12"> + <el-col v-if="form.STATUS === '1' && !form.STEP " :span="12"> <el-form-item v-if="form.STATUS === '1'" prop="APPOINT_USER_ID" label="指定监管部门审批人:"> <el-select v-model="form.user" style="width: 300px" placeholder="请选择" @change="chooseUser"> <el-option v-for="item in peopleList" :key="item.USER_ID" :value="JSON.stringify(item)" :label="item.NAME"/> @@ -76,6 +76,7 @@ export default { APPOINT_USER_ID: null, APPOINT_USER_NAME: '', OPINION: '', + STEP: false, user: '', tm: new Date().getTime(), list: [], @@ -117,6 +118,7 @@ export default { this.visible = true this.heirloom = JSON.stringify(e) this.form.list = JSON.stringify(e) + this.form.STEP = (e[0].FLOWS_STEP === 3) this.getDepartmentTree() this.loading = false }, From 6b7f02e67047256abc460ae1684756b7035356eb Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Mon, 22 Jan 2024 18:47:25 +0800 Subject: [PATCH 05/11] =?UTF-8?q?=E8=8B=A5=E5=B9=B2bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/entrust.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/views/xgf/flow/components/entrust.vue b/src/views/xgf/flow/components/entrust.vue index 88f2e0c..799927c 100644 --- a/src/views/xgf/flow/components/entrust.vue +++ b/src/views/xgf/flow/components/entrust.vue @@ -65,7 +65,8 @@ export default { tm: new Date().getTime(), list: [], isShow: true, - info: {} + info: {}, + entrustFlag: '1' }, rules: { STATUS: [ From 64418d7031225095b6b55968ce248186ce71cd2f Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Tue, 23 Jan 2024 17:22:38 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E8=8B=A5=E5=B9=B2bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xgf/peopleList/components/QRCode.vue | 36 ++ src/views/xgf/peopleList/components/apply.vue | 320 +++++++++++ .../xgf/peopleList/components/entrust.vue | 190 +++++++ src/views/xgf/peopleList/components/list.vue | 247 +++++++++ .../xgf/peopleList/components/picture.vue | 36 ++ .../xgf/peopleList/components/record.vue | 198 +++++++ .../xgf/peopleList/components/sendUtil.vue | 216 ++++++++ src/views/xgf/peopleList/components/user.vue | 250 +++++++++ src/views/xgf/peopleList/components/users.vue | 513 ++++++++++++++++++ src/views/xgf/peopleList/index.vue | 23 + 10 files changed, 2029 insertions(+) create mode 100644 src/views/xgf/peopleList/components/QRCode.vue create mode 100644 src/views/xgf/peopleList/components/apply.vue create mode 100644 src/views/xgf/peopleList/components/entrust.vue create mode 100644 src/views/xgf/peopleList/components/list.vue create mode 100644 src/views/xgf/peopleList/components/picture.vue create mode 100644 src/views/xgf/peopleList/components/record.vue create mode 100644 src/views/xgf/peopleList/components/sendUtil.vue create mode 100644 src/views/xgf/peopleList/components/user.vue create mode 100644 src/views/xgf/peopleList/components/users.vue create mode 100644 src/views/xgf/peopleList/index.vue diff --git a/src/views/xgf/peopleList/components/QRCode.vue b/src/views/xgf/peopleList/components/QRCode.vue new file mode 100644 index 0000000..297e138 --- /dev/null +++ b/src/views/xgf/peopleList/components/QRCode.vue @@ -0,0 +1,36 @@ +<template> + <div> + <el-dialog :visible.sync="visible" :append-to-body="appendToBody" title="相关方安全告知培训合格证" width="370px" destroy-on-close > + <vue-qr :text="qrCodeStr" :margin="0" :size="320" color-dark="#000" color-light="#fff"/> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' + +export default { + components: { vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + qrCodeStr: '' + } + }, + methods: { + init(e) { + this.visible = true + this.qrCodeStr = e.qrCodeStr + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/peopleList/components/apply.vue b/src/views/xgf/peopleList/components/apply.vue new file mode 100644 index 0000000..199811d --- /dev/null +++ b/src/views/xgf/peopleList/components/apply.vue @@ -0,0 +1,320 @@ +<template> + <el-dialog + v-if="visible" + :visible.sync="visible" + :before-close="handleClose" + :append-to-body="true" + title="培训申请" + width="60%"> + <el-form ref="form" :model="form" :rules="rules" label-width="120px"> + <el-row> + <el-col :span="12"> + <el-form-item + prop="TERRITORIALITY" + label="集团单位 " + > + <Treeselect + :options="jituanDanweiTreeData" + :normalizer="normalizer" + v-model="form.TERRITORIALITY" + placeholder="请选择集团单位 " + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getUserList($event)" + /> + </el-form-item> + </el-col> + + <el-col :span="12"> + <el-form-item + prop="TERRITORIALITY_USER_ID" + label="审核人员" + > + <div style="display:flex;justify-content: space-between;align-items: flex-start;"> + <el-select v-model="form.TERRITORIALITY_USER_ID"> + <el-option + v-for="item in companyUserList" + :key="item.USER_ID" + :label="item.NAME" + :value="item.USER_ID"/> + </el-select> + </div> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="12"> + <el-form-item + prop="MANAGER" + label="主管部门" + > + <Treeselect + :options="treeData" + :normalizer="normalizer" + v-model="form.MANAGER" + :disabled="true" + placeholder="请选择主管部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getmanagerUserList($event)" + /> + </el-form-item> + </el-col> + + <el-col :span="12"> + <el-form-item + prop="MANAGER_USER_ID" + label="审核人员" + > + <div style="display:flex;justify-content: space-between;align-items: flex-start;"> + <el-select v-model="form.MANAGER_USER_ID"> + <el-option + v-for="item in managercompanyUserList" + :key="item.USER_ID" + :label="item.NAME" + :value="item.USER_ID"/> + </el-select> + </div> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col :span="12"> + <el-form-item + prop="SUPERVISION" + label="安监部门" + > + <Treeselect + :options="treeData" + :normalizer="normalizer" + v-model="form.SUPERVISION" + :disabled="true" + placeholder="请选择安监部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + /> + </el-form-item> + </el-col> + + <el-col :span="12"> + <el-form-item + prop="SUPERVISION_USER_ID" + label="审核人员" + > + <div style="display:flex;justify-content: space-between;align-items: flex-start;"> + <el-select v-model="form.SUPERVISION_USER_ID"> + <el-option v-for="item in userList" :key="item.USER_ID" :label="item.NAME" :value="item.USER_ID"/> + </el-select> + </div> + </el-form-item> + </el-col> + </el-row> + + <el-row> + <el-col :span="24"> + <el-form-item label="备注"> + <el-input :rows="3" v-model="form.DESCR" type="textarea" placeholder="这里输入备注..."/> + </el-form-item> + </el-col> + </el-row> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button @click="closeWindow">取 消</el-button> + <el-button :loading="loading" type="primary" @click="save">确 定</el-button> + </div> + </el-dialog> +</template> + +<script> +import { requestFN } from '@/utils/request' +import Treeselect from '@riophae/vue-treeselect' +import '@riophae/vue-treeselect/dist/vue-treeselect.css' + +export default { + components: { + Treeselect + }, + props: { + corpInfo: { + type: String, + default: '' + } + }, + data() { + return { + visible: false, + loading: false, + treeData: [], + companyTreeData: [], + corpinfo: {}, + userList: [], + companyUserList: [], + managercompanyUserList: [], + jituanDanwei: '', + jituanDanweiTreeData: [], + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + form: {}, + rules: { + // SUPERVISION: [{ required: true, message: '安监部门不能为空', trigger: 'blur' }], + SUPERVISION_USER_ID: [{ required: true, message: '审核人员不能为空', trigger: 'blur' }], + MANAGER: [{ required: true, message: '主管部门不能为空', trigger: 'blur' }], + MANAGER_USER_ID: [{ required: true, message: '审核人员不能为空', trigger: 'blur' }], + TERRITORIALITY: [{ required: true, message: '属地管理部门不能为空', trigger: 'blur' }], + TERRITORIALITY_USER_ID: [{ required: true, message: '审核人员不能为空', trigger: 'blur' }] + } + } + }, + methods: { + async init(e) { + if (e) { + this.users = e + } + this.visible = true + this.loading = false + this.form = {} + /** + * 获取相关方的 集团单位 corpinfo/getDataForEditByCorpInfoId + * 根据集团单位 找到 对应的 企业id + */ + await this.getCorpinfo() + }, + getCorpinfo() { + requestFN( + '/corpinfo/getDataForEditByCorpInfoId', + { + CORPINFO_ID: JSON.parse(sessionStorage.getItem('user')).CORPINFO_ID, + tm: new Date().getTime() + } + ).then((data) => { + this.corpinfo = data.pd + // 河港机械 jtdw002 1e6dbbe16004402f8d2c0e52afd9a676 + // 河港港工 jtdw003 3a854eefa7894e06aaa1a2611bca80f6 + // 河港检测 jtdw004 020578a4c1f04bc692ee25145c2efbe5 + // 方宇物业 jtdw005 90966974de3c4b83aca6f8fd6432d5c2 + + if (data.pd.CORP_TYPE == 'jtdw002') { + this.jituanDanwei = '1e6dbbe16004402f8d2c0e52afd9a676' + } + if (data.pd.CORP_TYPE == 'jtdw003') { + this.jituanDanwei = '3a854eefa7894e06aaa1a2611bca80f6' + } + if (data.pd.CORP_TYPE == 'jtdw004') { + this.jituanDanwei = '020578a4c1f04bc692ee25145c2efbe5' + } + if (data.pd.CORP_TYPE == 'jtdw005') { + this.jituanDanwei = '90966974de3c4b83aca6f8fd6432d5c2' + } + this.getTreeData() + }) + }, + // 获得部门树 + getTreeData() { + requestFN( + '/regulatoryApi/department/listTree', + {} + ).then((data) => { + this.treeData = JSON.parse(data.zTreeNodes) + // 必须指定【股份-安全监督部】 + this.form.SUPERVISION = 'c31058273a2d40f9b83dd8e5ae3a723c' + this.form.MANAGER = this.corpinfo.MAIN_DEPARTMENT + this.getRegulatoryUserList(this.form.SUPERVISION) + this.getmanagerUserList(this.corpinfo.MAIN_DEPARTMENT) + }).catch((e) => { + console.log(e) + }) + + if (this.jituanDanwei) { + requestFN( + '/companyApi/department/listTree', + { CORPINFO_ID: this.jituanDanwei } + ).then((data) => { + this.jituanDanweiTreeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + }) + } + }, + getRegulatoryUserList(DEPARTMENT_ID) { + requestFN( + '/regulatoryApi/user/listAll', + { + DEPARTMENT_ID: DEPARTMENT_ID, + ISASSESS: '1' + } + ).then((data) => { + this.userList = data.userList + }).catch((e) => { + }) + }, + // 人员 + getUserList({ id: DEPARTMENT_ID }) { + requestFN( + '/companyApi/user/listAll', + { + DEPARTMENT_ID + } + ).then((data) => { + this.companyUserList = data.userList + }).catch((e) => { + }) + }, + getmanagerUserList(DEPARTMENT_ID) { + requestFN( + '/regulatoryApi/user/listAll', + { + DEPARTMENT_ID: DEPARTMENT_ID + } + ).then((data) => { + this.managercompanyUserList = data.userList + }).catch((e) => { + }) + }, + + save() { + this.$refs.form.validate(valid => { + if (valid) { + this.loading = true + this.form.USER_COUNT = this.users.length + this.form.AUDIT_STATUS = 0 + this.form.TYPE = 2 + requestFN( + '/trainingbatch/add', + { + ...this.form, + users: this.users.join(',') + } + ).then((data) => { + this.loading = false + this.$message({ + message: '申请成功', + type: 'success' + }) + this.handleClose() + }).catch((e) => { + this.listLoading = false + }) + } else { + return false + } + }) + }, + handleClose() { + this.visible = false + this.$emit('finish', '') + }, + closeWindow() { + this.handleClose() + } + } +} +</script> diff --git a/src/views/xgf/peopleList/components/entrust.vue b/src/views/xgf/peopleList/components/entrust.vue new file mode 100644 index 0000000..799927c --- /dev/null +++ b/src/views/xgf/peopleList/components/entrust.vue @@ -0,0 +1,190 @@ +<template> + <div> + <el-dialog v-loading = "loading" :visible.sync="visible" :append-to-body="appendToBody" :before-close="beforeClose" title="审批" width="1200px" destroy-on-close> + <el-form ref="form" :model="form" :rules="rules" label-width="200px" label-position="right" type="flex"> + <el-row :gutter="12"> + <el-col :span="12"> + <el-form-item prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> + <Treeselect + :options="departmentTree" + :normalizer="normalizer" + v-model="form.APPOINT_DEPARTMENT_ID" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getPeopleList($event)" + /> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item prop="APPOINT_USER_ID" label="指定监管部门审批人:"> + <el-select v-model="form.user" style="width: 300px" placeholder="请选择" @change="chooseUser"> + <el-option v-for="item in peopleList" :key="item.USER_ID" :value="JSON.stringify(item)" :label="item.NAME"/> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button @click="handleClose">关 闭</el-button> + <el-button type="primary" @click="sendMessage('1')">确 定</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' +import Treeselect from '@riophae/vue-treeselect' +import { requestFN } from '@/utils/request' + +export default { + components: { Treeselect, vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + loading: false, + form: { + STATUS: null, + APPOINT_CORP_ID: '', + APPOINT_CORP_NAME: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: null, + APPOINT_USER_NAME: '', + OPINION: '', + user: '', + tm: new Date().getTime(), + list: [], + isShow: true, + info: {}, + entrustFlag: '1' + }, + rules: { + STATUS: [ + { required: true, message: '请选择是否通过', trigger: 'change' } + ], + APPOINT_DEPARTMENT_ID: [ + { required: true, message: '请选择指定监管部门', trigger: 'change' } + ], + APPOINT_USER_ID: [ + { required: true, message: '请选择指定监管部门审批人', trigger: 'change' } + ], + OPINION: [ + { required: true, message: '请填写打回原因', trigger: 'change' } + ] + }, + heirloom: {}, + + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + + departmentTree: [], + peopleList: [] + } + }, + methods: { + async init(e) { + console.log(e) + this.loading = true + this.visible = true + this.heirloom = JSON.stringify(e) + this.form.list = JSON.stringify(e) + this.getDepartmentTree() + this.loading = false + }, + sendMessage(e) { + this.$refs.form.validate((valid) => { + if (!valid) { + this.$message.error('请填写完整信息') + } else { + requestFN('/xgf/user/approve', this.form) + .then((data) => { + this.$message.success('推送成功') + this.visible = false + this.$emit('refresh', '') + }) + .catch((e) => { + console.log(e) + }) + } + }) + }, + getDepartmentTree() { + return new Promise(resolve => { + requestFN( + '/corpDepartment/listTreeManageAndCorpHasOrder', + {} + ).then((data) => { + const treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes') + this.departmentTree = this.removeEmptyChildren(treeData) + resolve(true) + }).catch((e) => { + console.log(e) + }) + }) + }, + getPeopleList(e) { + this.form.APPOINT_DEPARTMENT_NAME = e.name + requestFN( + '/user/listAllCorp', + { + DEPARTMENT_ID: e.id + } + ).then((data) => { + this.peopleList = data.userList + }).catch((e) => { + console.log(e) + }) + }, + chooseUser(e) { + const entity = JSON.parse(e) + this.form.APPOINT_USER_ID = entity.USER_ID + this.form.APPOINT_USER_NAME = entity.NAME + }, + + handleClose() { + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + this.visible = false + }, + beforeClose() { + this.visible = false + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/peopleList/components/list.vue b/src/views/xgf/peopleList/components/list.vue new file mode 100644 index 0000000..a96ceb0 --- /dev/null +++ b/src/views/xgf/peopleList/components/list.vue @@ -0,0 +1,247 @@ +<template> + <div class="app-container"> + <el-form label-width="130px"> + <el-row> + <el-col :span="6"> + <el-form-item label="用户名"> + <el-input v-model="KEYWORDS" placeholder="请输入用户名"/> + </el-form-item> + </el-col> + <el-col v-if="false" :span="6"> + <el-form-item label="培训状态"> + <el-select v-model="STATUS" placeholder="请选择培训状态" style="width: 100%;" clearable> + <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="6"> + <el-form-item label-width="10px"> + <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"> + 搜索 + </el-button> + <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset"> + 重置 + </el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-table + ref="multipleTable" + :data="varList" + :header-cell-style="{'font-weight': 'bold','color': '#000'}" + tooltip-effect="dark" + border + fit + highlight-current-row> + <el-table-column :selectable="handleSelectWithDifferentStatus" 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="BELONG_TO_CORP_NAME" label="外派公司名称" align="center"/> + <el-table-column label="操作" align="center" width="350"> + <template slot-scope="{row}"> + <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row)">详情</el-button> + <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="approve([row])">审批</el-button> + <el-button v-if="row.power_flag === '1' && row.FLOWS_STEP === 2" type="primary" icon="el-icon-s-claim" size="mini" @click="entrust([row])">委托制单单位审批</el-button> + <el-button v-if="false" type="success" icon="el-icon-edit" size="mini" @click="getUserInfo(row)">电子合格证</el-button> + </template> + </el-table-column> + </el-table> + <div class="page-btn-group"> + <div> + <el-button v-if="false" type="primary" icon="el-icon-plus" @click="handleAdd">批量同意</el-button> + </div> + <pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList"/> + </div> + <user ref="userInfo" append-to-body/> + <user-info ref="userInfos" append-to-body/> + <send-util ref="sendUtil" append-to-body @refresh="getList"/> + <entrust ref="entrust" append-to-body @refresh="getList"/> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import vueQr from 'vue-qr' +import apply from './apply' +import user from './user.vue' +import SendUtil from './sendUtil.vue' +import UserInfo from '../../flow_audit/userInfo.vue' +import Entrust from './entrust.vue' + +export default { + components: { Entrust, UserInfo, SendUtil, Pagination, apply, vueQr, user }, + directives: { waves }, + data() { + return { + config: config, + QRCodeDialog: false, + qrcodeStr: '', + userDetailForm: {}, + specialUsersList: {}, + detailForm: {}, + userEntryForm: {}, + imgUrl: '', + SUPERVISE_CORPINFO_ID: '', + wenhuachengduList: [], // 文化程度 + postList: [], // 岗位名称 + photosOfLevel: [], // 三级教育照片 + trainRecordList: [], // 培训记录 + contractFileList: [], // 合同文件 + insuranceFileList: [], // 保险文件 + gongshangbaoxianFile: [], + userPhotoFile: [], // 头像 + userCardIDPhotoFile: [], // 身份证照片 + socialPhotoFile: [], // 身份证照片 + listQuery: { + page: 1, + limit: 10 + }, + total: 0, + varList: [], + KEYWORDS: '', + statusList: [{ value: 0, label: '未培训' }, { value: 1, label: '培训中' }, { + value: 2, + label: '已培训(合格)' + }, { value: 3, label: '已培训(不合格)' }, { value: 9, label: '申请中' }], + STATUS: '', + add: false, // 新增按钮 + del: false, // 删除按钮 + edit: false // 修改按钮 + } + }, + created() { + this.getDict() + this.getList() + this.hasButton() + }, + methods: { + handleSelectWithDifferentStatus(row, rowIndex) { + if (row.STATUS === 0) { + // 不禁用 + return true + } else { + // 禁用 + return false + } + }, + getQuery() { + if (this.$refs.multipleTable) { + this.$refs.multipleTable.clearSelection() + } + this.listQuery = { + page: 1, + limit: 10 + } + this.getList() + }, + goKeyReset() { + this.KEYWORDS = '' + this.STATUS = '' + this.getQuery() + }, + getList() { + this.listLoading = true + requestFN( + '/xgf/user/getAppointApproveList?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + KEYWORDS: this.KEYWORDS, + STATUS: '1', + EMPLOY_FLAG: '1', + CHECK_STATUS: '1' + } + ).then((data) => { + this.listLoading = false + this.varList = data.list + this.total = data.page.totalResult + }) + .catch((e) => { + this.listLoading = false + }) + }, + handleShow(row) { + this.$refs.userInfos.init(row) + }, + approve(row) { + this.$refs.sendUtil.init(row) + }, + entrust(row) { + this.$refs.entrust.init(row) + }, + getUserInfo(row) { + this.$refs.userInfo.init(row) + }, + handleAdd() { + const _selectData = this.$refs.multipleTable.selection + if (_selectData == null || _selectData.length == 0) { + this.$message({ + message: '未勾选培训人员...', + type: 'error' + }) + return false + } + + var users = [] + _selectData.map(item => { + if (item.STATUS === 0) { + users.push(item.USER_ID) + } + }) + + if (users == null || users.length == 0) { + this.$message({ + message: '勾选人员暂无法提交申请...', + type: 'error' + }) + return false + } + this.$refs.apply.init(users) + }, + hasButton() { + var keys = 'trainingbatch:add,trainingbatch:del,trainingbatch:edit,fhSms,email,fromExcel,toExcel' + requestFN( + '/head/hasButton', + { + keys: keys, tm: new Date().getTime() + } + ).then((data) => { + if (data.result == 'success') { + this.add = data.trainingbatchfhadminadd // 增 + this.del = data.trainingbatchfhadmindel // 删 + this.edit = data.trainingbatchfhadminedit // 改 + this.fromExcel = data.fromExcel // 从excel导入权限 + this.toExcel = data.toExcel // 导出到excel权限 + } else if (data.result == 'exception') { + // showException('按钮权限', data.exception)// 显示异常 + console.info('按钮权限:', data.exception) + } + }) + .catch((e) => { + this.listLoading = false + }) + }, + getDict: function() { + 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 + }) + } + } +} +</script> + diff --git a/src/views/xgf/peopleList/components/picture.vue b/src/views/xgf/peopleList/components/picture.vue new file mode 100644 index 0000000..57e7255 --- /dev/null +++ b/src/views/xgf/peopleList/components/picture.vue @@ -0,0 +1,36 @@ +<template> + <div> + <el-dialog :visible.sync="visible" :append-to-body="appendToBody" title="头像" width="370px" destroy-on-close > + <el-image :src="src"/> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' + +export default { + components: { vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + src: '' + } + }, + methods: { + init(e) { + this.visible = true + this.src = e.src + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/peopleList/components/record.vue b/src/views/xgf/peopleList/components/record.vue new file mode 100644 index 0000000..e82258d --- /dev/null +++ b/src/views/xgf/peopleList/components/record.vue @@ -0,0 +1,198 @@ +<template> + <div class="app-container"> + <el-page-header content="申请记录" @back="goBack"/> + <el-form label-width="130px"> + <el-row> + <el-col :span="5"> + <el-form-item label="申请人员"> + <el-input v-model="KEYWORDS" placeholder="请输入申请人员"/> + </el-form-item> + </el-col> + <el-col :span="5"> + <el-form-item label="主管部门"> + <Treeselect + :options="companyTreeData" + :normalizer="normalizer" + v-model="MANAGER" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + /> + </el-form-item> + </el-col> + <el-col :span="5"> + <el-form-item label="属地管理部门"> + <Treeselect + :options="companyTreeData" + :normalizer="normalizer" + v-model="TERRITORIALITY" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + /> + </el-form-item> + </el-col> + <el-col :span="5"> + <el-form-item label="申请状态"> + <el-select v-model="AUDIT_STATUS" placeholder="请选择申请状态" style="width: 100%;"> + <el-option v-for="item in statusList" :key="item.value" :label="item.label" :value="item.value" /> + </el-select> + </el-form-item> + </el-col> + <el-col :span="4"> + <el-form-item label-width="10px"> + <el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery"> + 搜索 + </el-button> + <el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset"> + 重置 + </el-button> + </el-form-item> + </el-col> + </el-row> + </el-form> + <el-table ref="multipleTable" :data="varList" :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="CREATTIME" label="申请时间" align="center" /> + <el-table-column prop="CREATOR" label="申请人员" align="center" /> + <el-table-column prop="SUPERVISION_DEPARTMENT_NAME" label="安监部门" align="center" /> + <el-table-column prop="MANAGER_DEPT_NAME" label="主管部门" align="center" /> + <el-table-column prop="TERRITORIALITY_DEPARTMENT_NAME" label="属地管理部门" align="center" /> + <el-table-column prop="TRAIN_DATE" label="申请年份" align="center" > + <template slot-scope="{row}"> + {{ new Date(row.CREATTIME).getFullYear() }} + </template> + </el-table-column> + <el-table-column prop="AUDIT_STATUS" label="申请状态" align="center" > + <template slot-scope="{row}"> + <span v-if="row.AUDIT_STATUS === 0">待审核</span> + <span v-if="row.AUDIT_STATUS === 1">审核中</span> + <span v-if="row.AUDIT_STATUS === 2">待培训</span> + <span v-if="row.AUDIT_STATUS === 3">已完成</span> + </template> + </el-table-column> + <el-table-column prop="PASS_COUNT" label="审核通过人数" align="center" /> <!-- 已更新为申请状态中的审核通过人员数--> + <el-table-column prop="USER_COUNT" label="申请人数" align="center" /> + <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)">查看</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="getList" /> + </div> + + <users ref="users"/> + </div> +</template> + +<script> +import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包 +import { requestFN } from '@/utils/request' +import waves from '@/directive/waves' // waves directive +import Treeselect from '@riophae/vue-treeselect' +import '@riophae/vue-treeselect/dist/vue-treeselect.css' +import users from './users' +export default { + components: { Pagination, Treeselect, users }, + directives: { waves }, + data() { + return { + listQuery: { + page: 1, + limit: 10 + }, + total: 0, + varList: [], + treeData: [], + companyTreeData: [], + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + MANAGER: null, + TERRITORIALITY: null, + statusList: [{ value: 0, label: '待审核' }, { value: 1, label: '审核中' }, { value: 2, label: '待培训' }, { value: 3, label: '已完成' }], + AUDIT_STATUS: '', + KEYWORDS: '' + } + }, + created() { + this.getList() + this.getTreeData() + }, + methods: { + getQuery() { + this.$refs.multipleTable.clearSelection() + this.listQuery = { + page: 1, + limit: 10 + } + this.getList() + }, + goKeyReset() { + this.MANAGER = null + this.TERRITORIALITY = null + this.AUDIT_STATUS = '' + this.KEYWORDS = '' + this.getQuery() + }, + getList() { + this.listLoading = true + requestFN( + '/trainingbatch/list?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page, + { + MANAGER: this.MANAGER, + TERRITORIALITY: this.TERRITORIALITY, + AUDIT_STATUS: this.AUDIT_STATUS, + KEYWORDS: this.KEYWORDS, + TYPE: 2, + USER_ID: JSON.parse(sessionStorage.getItem('user')).USER_ID + } + ).then((data) => { + this.listLoading = false + this.varList = data.varList + console.log(this.varList) + this.total = data.page.totalResult + }) + .catch((e) => { + this.listLoading = false + }) + }, + + // 获得部门树 + getTreeData() { + requestFN( + '/regulatoryApi/department/listTree', + {} + ).then((data) => { + this.treeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + }) + requestFN( + '/companyApi/department/listTree', + { CORPINFO_ID: this.$parent.SUPERVISE_CORPINFO_ID } + ).then((data) => { + this.companyTreeData = JSON.parse(data.zTreeNodes) + }).catch((e) => { + }) + }, + + handleShow(row) { + this.$refs.users.init(row) + }, + goBack() { + this.$parent.activeName = 'List' + } + } +} +</script> + diff --git a/src/views/xgf/peopleList/components/sendUtil.vue b/src/views/xgf/peopleList/components/sendUtil.vue new file mode 100644 index 0000000..a49a643 --- /dev/null +++ b/src/views/xgf/peopleList/components/sendUtil.vue @@ -0,0 +1,216 @@ +<template> + <div> + <el-dialog v-loading = "loading" :visible.sync="visible" :append-to-body="appendToBody" :before-close="beforeClose" title="审批" width="1200px" destroy-on-close> + <el-form ref="form" :model="form" :rules="rules" label-width="200px" label-position="right" type="flex"> + <el-row :gutter="12"> + <el-col :span="12"> + <el-form-item prop="STATUS" label="是否通过: "> + <el-select v-model="form.STATUS" style="width: 300px" placeholder="请选择"> + <el-option label="是" value="1"/> + <el-option label="否" value="0"/> + </el-select> + </el-form-item> + </el-col> + <el-col :span="12"> + <el-form-item v-if="form.STATUS === '1' && !form.STEP" prop="APPOINT_DEPARTMENT_ID" label="指定监管部门:"> + <Treeselect + :options="departmentTree" + :normalizer="normalizer" + v-model="form.APPOINT_DEPARTMENT_ID" + placeholder="请选择部门" + no-options-text="暂无数据" + no-children-text="暂无数据" + style="width: 100%;" + @select="getPeopleList($event)" + /> + </el-form-item> + </el-col> + </el-row> + <el-row> + <el-col v-if="form.STATUS === '0'" :span="12"> + <el-form-item v-if="form.STATUS === '0'" prop="OPINION" label="打回原因:"> + <el-input v-model="form.OPINION" :rows="2" type="textarea" placeholder="填写审批意见"/> + </el-form-item> + </el-col> + <el-col v-if="form.STATUS === '1' && !form.STEP " :span="12"> + <el-form-item v-if="form.STATUS === '1'" prop="APPOINT_USER_ID" label="指定监管部门审批人:"> + <el-select v-model="form.user" style="width: 300px" placeholder="请选择" @change="chooseUser"> + <el-option v-for="item in peopleList" :key="item.USER_ID" :value="JSON.stringify(item)" :label="item.NAME"/> + </el-select> + </el-form-item> + </el-col> + </el-row> + </el-form> + + <div slot="footer" class="dialog-footer"> + <el-button @click="handleClose">关 闭</el-button> + <el-button type="primary" @click="sendMessage('1')">确 定</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import vueQr from 'vue-qr' +import Treeselect from '@riophae/vue-treeselect' +import { requestFN } from '@/utils/request' + +export default { + components: { Treeselect, vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + visible: false, + loading: false, + form: { + STATUS: null, + APPOINT_CORP_ID: '', + APPOINT_CORP_NAME: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: null, + APPOINT_USER_NAME: '', + OPINION: '', + STEP: false, + user: '', + tm: new Date().getTime(), + list: [], + isShow: true, + info: {} + }, + rules: { + STATUS: [ + { required: true, message: '请选择是否通过', trigger: 'change' } + ], + APPOINT_DEPARTMENT_ID: [ + { required: true, message: '请选择指定监管部门', trigger: 'change' } + ], + APPOINT_USER_ID: [ + { required: true, message: '请选择指定监管部门审批人', trigger: 'change' } + ], + OPINION: [ + { required: true, message: '请填写打回原因', trigger: 'change' } + ] + }, + heirloom: {}, + + normalizer(node) { + return { + id: node.id, + label: node.name, + children: node.nodes + } + }, + + departmentTree: [], + peopleList: [] + } + }, + methods: { + async init(e) { + console.log(e) + this.loading = true + this.visible = true + this.heirloom = JSON.stringify(e) + this.form.list = JSON.stringify(e) + this.form.STEP = (e[0].FLOWS_STEP === 3) + this.getDepartmentTree() + this.loading = false + }, + sendMessage(e) { + this.$refs.form.validate((valid) => { + if (!valid) { + this.$message.error('请填写完整信息') + } else { + requestFN('/xgf/user/approve', this.form) + .then((data) => { + this.$message.success('推送成功') + this.visible = false + this.$emit('refresh', '') + }) + .catch((e) => { + console.log(e) + }) + } + }) + }, + getDepartmentTree() { + return new Promise(resolve => { + requestFN( + '/department/listTree', + {} + ).then((data) => { + this.departmentTree = this.removeEmptyChildren(JSON.parse(data.zTreeNodes)) + resolve(true) + }).catch((e) => { + }) + }) + }, + getCorpDepartmentTree() { + return new Promise(resolve => { + requestFN( + '/openApi/corpDepartment/listTree', + {} + ).then((data) => { + this.departmentTree = this.removeEmptyChildren(JSON.parse(data.zTreeNodes)) + resolve(true) + }).catch((e) => { + }) + }) + }, + getPeopleList(e) { + this.form.APPOINT_DEPARTMENT_NAME = e.name + requestFN( + '/user/listAll', + { + DEPARTMENT_ID: e.id + } + ).then((data) => { + this.peopleList = data.userList + }).catch((e) => { + console.log(e) + }) + }, + chooseUser(e) { + const entity = JSON.parse(e) + this.form.APPOINT_USER_ID = entity.USER_ID + this.form.APPOINT_USER_NAME = entity.NAME + }, + + handleClose() { + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + this.visible = false + }, + beforeClose() { + this.visible = false + this.form = { + STATUS: '', + APPOINT_DEPARTMENT_ID: null, + APPOINT_DEPARTMENT_NAME: '', + APPOINT_USER_ID: '', + APPOINT_USER_NAME: '', + user: '', + list: [], + tm: new Date().getTime() + } + } + } +} +</script> + +<style lang="scss" scoped> +</style> diff --git a/src/views/xgf/peopleList/components/user.vue b/src/views/xgf/peopleList/components/user.vue new file mode 100644 index 0000000..889dc08 --- /dev/null +++ b/src/views/xgf/peopleList/components/user.vue @@ -0,0 +1,250 @@ +<template> + <div> + <el-dialog :visible.sync="visible" :append-to-body="appendToBody" title="相关方安全告知培训合格证" width="370px"> + <div v-for="item in peopleList" :key="item.CLASS_INFO_ID" style="height: 220px"> + <div class="bg_table"> + <div class="title">相关方安全告知培训合格证</div> + <div class="red">{{ item.CLASS_NO }}</div> + <table class="table"> + <tr> + <td style="width: 120px"> + <div class="text textone name">姓名</div> + </td> + <td style="width: 100px;"> + <div class="text text1 tcenter">{{ item.NAME }}</div> + </td> + <td style="width: 86px"> + <div class="text text2 tcenter">工种</div> + </td> + <td style="width: 148px;"> + <div v-if="item.JOBS_TYPE" class="text tcenter ">{{ item.JOBS_TYPE }}</div> + <div v-else>暂无</div> + </td> + <td rowspan="4" style="width: 134px;"> + <img v-if="!getShowPicture(item)" src="../../../../assets/images/peopleHead.png" alt="" style="width: 116px; height: 146px"> + <img v-if="getShowPicture(item)" :src="config.fileUrl + item.PHOTO" alt="" style="width: 116px; height: 146px" @click="openPicture(config.fileUrl + item.PHOTO)"> + </td> + </tr> + <tr> + <td> + <div class="text textone">资质</div> + </td> + <td colspan="3"> + <div v-if="item.CERTIFICATE" class="text">{{ item.CERTIFICATE }}</div> + <div v-else>暂无</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">培训时间</div> + </td> + <td colspan="3"> + <div class="text">{{ item.OPENING_TIME }}</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">有效期限</div> + </td> + <td colspan="3"> + <div class="text">{{ item.VALIDITY_PERIOD_END }}</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">所在单位</div> + </td> + <td colspan="3"> + <div class="text">{{ item.DEPARTMENT_NAME }}</div> + </td> + <td rowspan="3" style="padding-top: 6px" @click="click(config.messageUrl + '?CLASS_INFO_ID=' + item.CLASS_INFO_ID)"> + <vue-qr :text="config.messageUrl + '?CLASS_INFO_ID=' + item.CLASS_INFO_ID" :margin="0" :size="110" color-dark="#000" color-light="#fff"/> + </td> + </tr> + <tr> + <td> + <div class="text textone">身份证号</div> + </td> + <td colspan="3"> + <div class="text">{{ item.CARD_ID }}</div> + </td> + </tr> + <tr> + <td> + <div class="text textone">手机</div> + </td> + <td colspan="3"> + <div class="text">{{ item.PHONE }}</div> + </td> + </tr> + </table> + </div> + </div> + </el-dialog> + <QRCode ref="QRcode" append-to-body/> + <Picture ref="Picture" append-to-body/> + </div> +</template> + +<script> +import { requestFN } from '@/utils/request' +import vueQr from 'vue-qr' +import QRCode from './QRCode.vue' +import Picture from './picture.vue' + +export default { + components: { QRCode, Picture, vueQr }, + props: { + appendToBody: { + type: Boolean, + default: false + } + }, + data() { + return { + config: config, + visible: false, + peopleList: [], + CLASS_MESSAGE_ID: '', + CLASS_INFO_ID: '', + USER_ID: '', + qrCodeStr: '' + } + }, + methods: { + init(e) { + console.info(e) + if (e && e.CLASS_INFO_ID) { + this.CLASS_INFO_ID = e.CLASS_INFO_ID + } + if (e && e.CLASS_MESSAGE_ID) { + this.CLASS_MESSAGE_ID = e.CLASS_MESSAGE_ID + } + if (e && e.USER_ID) { + this.USER_ID = e.USER_ID + } + this.qrCodeStr = config.messageUrl + '?CLASS_INFO_ID=' + this.CLASS_INFO_ID + this.visible = true + this.getInfo() + }, + getInfo() { + requestFN('/trainusers/getUserinfoList', { + CLASS_INFO_ID: this.CLASS_INFO_ID, + CLASS_MESSAGE_ID: this.CLASS_MESSAGE_ID, + USER_ID: this.USER_ID + }) + .then((data) => { + this.peopleList = data.list + }).catch((e) => { + console.log(e) + }) + }, + getShowPicture(row) { + if (row.PHOTO && row.PHOTO !== '' && (row.PHOTO.indexOf('.jpg') >= 0 || row.PHOTO.indexOf('.png') >= 0 || row.PHOTO.indexOf('.jpeg') >= 0)) { + return true + } + }, + click(e) { + this.$refs.QRcode.init({ qrCodeStr: e }) + }, + openPicture(src) { + this.$refs.Picture.init({ src: src }) + } + } +} +</script> + +<style lang="scss" scoped> + +.name{ + width: 120px; + overflow: hidden;//溢出隐藏 + white-space: nowrap; // 强制一行显示 + text-overflow: ellipsis;// 显示。。。省略号 +} +.red { + width: 660px; + color: #ff0000; + margin-left: 34px; + font-size: 24px; +} + +.bg_table { + background: url("../../../../assets/tablebg.jpg") no-repeat bottom center; + background-size: 100%; + width: 660px; + height: 430px; + border: 4px solid #453d3a; + transform: scale(0.5); + transform-origin: top left; + + .title { + font-size: 28px; + text-align: center; + margin-top: 34px; + font-weight: bold; + color: #000000; + } + + .table { + border-collapse: collapse; + width: 590px; + color: #453d3a; + font-size: 20px; + margin: 34px; + text-align: left; + margin-top: 10px; + + .tcenter { + text-align: center + } + + .w60 { + width: 100px; + } + + .w74 { + width: 148px + } + + th, td { + border: 2px solid #453d3a; + text-align: left; + height: 40px; + padding: 0 16px; + + box-sizing: border-box; + + .textone { + width: 80px; + text-align: justify; + text-align-last: justify; + text-justify: distribute-all-lines; + margin: 0 auto; + } + + .text1 { + width: 60px; + text-align: justify; + text-align-last: justify; + text-justify: distribute-all-lines; + margin: 0 auto; + + } + + .text2 { + width: 50px; + text-align: justify; + text-align-last: justify; + text-justify: distribute-all-lines; + margin: 0 auto; + + } + + .text { + + } + } + } +} +</style> diff --git a/src/views/xgf/peopleList/components/users.vue b/src/views/xgf/peopleList/components/users.vue new file mode 100644 index 0000000..2d11653 --- /dev/null +++ b/src/views/xgf/peopleList/components/users.vue @@ -0,0 +1,513 @@ +<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> diff --git a/src/views/xgf/peopleList/index.vue b/src/views/xgf/peopleList/index.vue new file mode 100644 index 0000000..70cda6e --- /dev/null +++ b/src/views/xgf/peopleList/index.vue @@ -0,0 +1,23 @@ +<template> + <component :is="activeName" /> +</template> + +<script> +import List from './components/list' +import Record from './components/record' +export default { + components: { + List: List, + Record: Record + }, + data() { + return { + activeName: 'List', + SUPERVISE_CORPINFO_ID: '' + } + } +} +</script> + +<style scoped> +</style> From 6a05eb91a1b2ff7ccc6e31f64f376678e0599063 Mon Sep 17 00:00:00 2001 From: zhaoyu <zhaoyu> Date: Fri, 26 Jan 2024 14:04:01 +0800 Subject: [PATCH 07/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=90=8D=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/map/components/menjin.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/views/map/components/menjin.vue b/src/views/map/components/menjin.vue index 1c3ed3a..3395396 100644 --- a/src/views/map/components/menjin.vue +++ b/src/views/map/components/menjin.vue @@ -55,8 +55,9 @@ <div v-if="block3OptionsIndex == 1" class="td">车牌</div> <div class="td">时间</div> <div class="td">状态</div> - <div v-if="block3OptionsIndex == 0" class="td">类型</div> - <div v-if="block3OptionsIndex == 1" class="td">来港事由</div> + <div class="td">闸机名称</div> + <!--<div v-if="block3OptionsIndex == 0" class="td">闸机名称</div> + <div v-if="block3OptionsIndex == 1" class="td">来港事由</div>--> </div> <div v-infinite-scroll="load" :infinite-scroll-disabled="disabled" class="scroll"> <div v-for="(item,index) in block3List" :key="index" class="tr"> From 7dde890a502e365666d65865e5768e497cffc947 Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Sat, 27 Jan 2024 15:57:51 +0800 Subject: [PATCH 08/11] =?UTF-8?q?13862=20=E9=80=89=E6=8B=A9=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E4=B8=AA=E5=AE=A1=E6=89=B9=20=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/list.vue | 2 +- src/views/xgf/flow/components/sendUtil.vue | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/views/xgf/flow/components/list.vue b/src/views/xgf/flow/components/list.vue index a96ceb0..c1c6c8b 100644 --- a/src/views/xgf/flow/components/list.vue +++ b/src/views/xgf/flow/components/list.vue @@ -43,7 +43,7 @@ <template slot-scope="{row}"> <el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row)">详情</el-button> <el-button v-if="row.power_flag === '1'" type="primary" icon="el-icon-s-claim" size="mini" @click="approve([row])">审批</el-button> - <el-button v-if="row.power_flag === '1' && row.FLOWS_STEP === 2" type="primary" icon="el-icon-s-claim" size="mini" @click="entrust([row])">委托制单单位审批</el-button> + <el-button v-if="row.power_flag === '1' && row.FLOWS_STEP === 1" type="primary" icon="el-icon-s-claim" size="mini" @click="entrust([row])">委托制单单位审批</el-button> <el-button v-if="false" type="success" icon="el-icon-edit" size="mini" @click="getUserInfo(row)">电子合格证</el-button> </template> </el-table-column> diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue index a49a643..a671b91 100644 --- a/src/views/xgf/flow/components/sendUtil.vue +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -118,7 +118,7 @@ export default { this.visible = true this.heirloom = JSON.stringify(e) this.form.list = JSON.stringify(e) - this.form.STEP = (e[0].FLOWS_STEP === 3) + this.form.STEP = (e[0].FLOWS_STEP === 2) this.getDepartmentTree() this.loading = false }, From d8b81339ea006a30491b26bcda8db40110c0784f Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Sat, 27 Jan 2024 16:03:31 +0800 Subject: [PATCH 09/11] =?UTF-8?q?13856=20=E5=AE=A1=E6=A0=B8=E5=AE=8C?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E4=BA=BA=E4=B9=8B=E5=90=8E=EF=BC=8C=E5=AE=A1?= =?UTF-8?q?=E6=A0=B8=E4=B8=8B=E4=B8=80=E4=B8=AA=E4=BA=BA=EF=BC=8C=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E6=A1=86=E5=86=85=E4=BF=A1=E6=81=AF=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E9=87=8D=E7=BD=AE=E6=B8=85=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/sendUtil.vue | 2 ++ src/views/xgf/peopleList/components/sendUtil.vue | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue index a671b91..8e4c25b 100644 --- a/src/views/xgf/flow/components/sendUtil.vue +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -189,6 +189,7 @@ export default { APPOINT_DEPARTMENT_NAME: '', APPOINT_USER_ID: '', APPOINT_USER_NAME: '', + OPINION: '', user: '', list: [], tm: new Date().getTime() @@ -203,6 +204,7 @@ export default { APPOINT_DEPARTMENT_NAME: '', APPOINT_USER_ID: '', APPOINT_USER_NAME: '', + OPINION: '', user: '', list: [], tm: new Date().getTime() diff --git a/src/views/xgf/peopleList/components/sendUtil.vue b/src/views/xgf/peopleList/components/sendUtil.vue index a49a643..77364e7 100644 --- a/src/views/xgf/peopleList/components/sendUtil.vue +++ b/src/views/xgf/peopleList/components/sendUtil.vue @@ -189,6 +189,7 @@ export default { APPOINT_DEPARTMENT_NAME: '', APPOINT_USER_ID: '', APPOINT_USER_NAME: '', + OPINION: '', user: '', list: [], tm: new Date().getTime() @@ -203,6 +204,7 @@ export default { APPOINT_DEPARTMENT_NAME: '', APPOINT_USER_ID: '', APPOINT_USER_NAME: '', + OPINION: '', user: '', list: [], tm: new Date().getTime() From 2bb112123b951853052b3759f56aae92a4259b52 Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Sat, 27 Jan 2024 16:09:30 +0800 Subject: [PATCH 10/11] =?UTF-8?q?13854=20=E9=80=89=E6=8B=A9=E6=A1=86?= =?UTF-8?q?=E7=9A=84=E9=AB=98=E5=BA=A6=E9=95=BF=E5=BA=A6=E4=B8=8D=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/sendUtil.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue index 8e4c25b..ce31f2c 100644 --- a/src/views/xgf/flow/components/sendUtil.vue +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -20,7 +20,7 @@ placeholder="请选择部门" no-options-text="暂无数据" no-children-text="暂无数据" - style="width: 100%;" + style="width: 300px" @select="getPeopleList($event)" /> </el-form-item> From a165aac422f4c4ef23f726cb1d891cb9e0acd85a Mon Sep 17 00:00:00 2001 From: liujun <liujun@zcloudchina.com> Date: Sat, 27 Jan 2024 16:13:11 +0800 Subject: [PATCH 11/11] =?UTF-8?q?13817=20=E6=89=B9=E9=87=8F=E6=8E=A8?= =?UTF-8?q?=E9=80=81=E5=92=8C=E5=8D=95=E7=8B=AC=E6=8E=A8=E9=80=81=20?= =?UTF-8?q?=E5=8D=95=E4=BD=8D=E6=90=9C=E7=B4=A2=E6=A1=86=E5=8A=A0=E5=85=B3?= =?UTF-8?q?=E9=94=AE=E5=AD=97=E6=90=9C=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/xgf/flow/components/sendUtil.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/views/xgf/flow/components/sendUtil.vue b/src/views/xgf/flow/components/sendUtil.vue index ce31f2c..5b1469e 100644 --- a/src/views/xgf/flow/components/sendUtil.vue +++ b/src/views/xgf/flow/components/sendUtil.vue @@ -5,7 +5,7 @@ <el-row :gutter="12"> <el-col :span="12"> <el-form-item prop="STATUS" label="是否通过: "> - <el-select v-model="form.STATUS" style="width: 300px" placeholder="请选择"> + <el-select v-model="form.STATUS" filterable style="width: 300px" placeholder="请选择"> <el-option label="是" value="1"/> <el-option label="否" value="0"/> </el-select>