Compare commits

...

53 Commits

Author SHA1 Message Date
water_xu c7a5d0430d 暂时取消编辑时校验 2024-08-15 16:41:21 +08:00
water_xu bd0c42c711 人员中台对接内容 2024-07-24 08:48:05 +08:00
water_xu bd4924ae30 附件服务器地址更新 2024-07-10 16:48:00 +08:00
water_xu 5564530d7c 人员管理 - 迁移人员重新推送工程至监管端 2024-07-08 13:57:45 +08:00
water_xu 110d32c3cd 人员管理 - 新增人员重新推送功能 2024-07-08 11:16:45 +08:00
water_xu 0730ef2aa7 Merge branch 'pet' of http://47.92.113.182:3000/guoyuepeng/qa-prevention-xgf-vue into pet 2024-07-03 17:19:12 +08:00
water_xu 886b1215bc 相关方人员账号维护管理 - 修改手机号正则表达式规则 2024-07-03 17:18:24 +08:00
liujun f92a3a583a Merge remote-tracking branch 'origin/liujun-2024-06-06-相关方新需求' into pet 2024-07-02 15:07:18 +08:00
guoyuepeng b57c58488b Merge remote-tracking branch 'origin/pet' into pet 2024-07-02 11:19:56 +08:00
guoyuepeng 20a4c3f0cc 1.手机匹配正则修改,可以数据17(0-9)的 2024-07-02 11:19:43 +08:00
WenShiJun daec430ccd 属地选择器逻辑修改 2024-06-26 16:54:07 +08:00
liy d0594a77a4 li 2024-06-26 09:08:41 +08:00
liy 8661466a76 li 2024-06-20 10:48:10 +08:00
liy 33dd8ad3dc li 2024-06-13 16:45:15 +08:00
liujun a6fdb97c4f 16119 资金位数限制不是到15位了吗 输入15位还不行 2024-06-13 16:03:58 +08:00
liujun 3dfb72d2a9 Merge remote-tracking branch 'origin/pet_li_6.6' into liujun-2024-06-06-相关方新需求 2024-06-13 15:06:30 +08:00
liujun a7977961f6 企业端、监管端功能同步 2024-06-12 15:00:07 +08:00
liy 354b39ff86 li 2024-06-11 11:24:30 +08:00
liujun 8bba03c8c7 1、相关方推送人员选择审批人时,部门列表自动展开
2、人员推送页,新建人员详情页,新增提示,要上传身份证正反面才能进行培训
2024-05-14 11:30:05 +08:00
liujun d6f55a5ef2 审批人不能选择企业主账号及主账号同级账号 2024-04-08 15:28:27 +08:00
liujun 050d495d47 bug:因主管部门变多个,造成人员推送失败 2024-03-20 16:08:58 +08:00
liujun 9c48acee51 相关方端可以选择股份端人员及数据 2024-03-19 18:08:01 +08:00
liujun 15a54b4bc4 1、相关方端新增打回打回信息
2、修改审批流程bug
2024-03-19 17:37:35 +08:00
liujun 80886742e5 相关方端主管部门可以显示无 2024-03-19 14:54:10 +08:00
liujun bb8923778f 14382 集团单位 编辑不好使 2024-03-01 17:01:46 +08:00
liujun 443dc6e05d 14381 没有信息时 集团单位内 文字不正确 2024-03-01 16:45:34 +08:00
liujun 7aac9a856d 14380 多选集团单位之后 没有回显数据 2024-03-01 16:44:16 +08:00
liujun 71273151f5 开办开始时间结束时间规则更改(开始时间为:班级创建时间,结束时间为发包单位确定时间) 2024-03-01 13:54:52 +08:00
liujun fbd6a16da2 员工信息同步 2024-03-01 10:57:36 +08:00
liujun d0fab97b30 编辑功能恢复 2024-03-01 09:53:05 +08:00
liujun 49d05552e1 恢复商业险、保险信息 2024-02-29 17:53:59 +08:00
liujun 92455dc009 Merge branch 'liujun-2024-02-04-相关方新流程上线后新提需求' into dev 2024-02-27 16:43:01 +08:00
liujun a670266acf 文件名重复问题修复 2024-02-27 11:03:56 +08:00
liujun 67d92a503d Merge remote-tracking branch 'origin/2024年2月22日v1.0.55' into dev 2024-02-26 16:02:27 +08:00
liujun ae4b1d504b 1、集团单位新增上传承诺书功能
2、文件单传变多传
3、详情页下载附近合集
4、修改历史文件未清空bug
2024-02-26 15:17:20 +08:00
liujun 9f3953ed3f 1、承诺书错别字更改 2024-02-21 17:16:11 +08:00
liujun bc8ff65d07 1、承诺书、委托书转变必传
2、bug修改(集团单位查看不到归属自己的相关方)
2024-02-21 11:25:46 +08:00
liujun df78271dc5 监管端上传委托书功能 2024-02-04 11:03:10 +08:00
liujun 5c97fc05be Merge branch 'dev-2024年1月8日' into dev 2024-02-04 09:12:48 +08:00
liujun e1bd6891fb Merge remote-tracking branch 'origin/dev-2024年1月8日' into liujun-2024-02-04-相关方新流程上线后新提需求 2024-02-04 09:09:22 +08:00
liujun 4be34ded89 1、审批历史数据未清理
2、地图测试环境图片地址更改
3、消防统计页面点击详情后,返回刷新页面bug修复
2024-01-31 10:51:51 +08:00
liujun c5919657e5 1、错别字更改
2、监管端查询sql报错修改
3、表单提交后未清空。
2024-01-29 17:20:47 +08:00
liujun 0ffdfd2149 1、流程数据保存错误bug修改
2、打回后无法审批bug修复
2024-01-29 13:20:27 +08:00
liujun d7d5fd6fa9 13817 批量推送和单独推送 单位搜索框加关键字搜索 2024-01-27 16:13:10 +08:00
liujun d74cb3930d 13854 选择框的高度长度不一 2024-01-27 16:09:30 +08:00
liujun be9d06d481 13853 判空提示语 跟标题对不上 2024-01-27 16:06:28 +08:00
liujun 426a7648c9 13856 审核完一个人之后,审核下一个人,输入框内信息没有重置清空 2024-01-27 16:03:31 +08:00
liujun efd87d7ac5 13818 批量推送和单独推送 文字修改 监管部门不合适 2024-01-25 20:03:38 +08:00
liujun e105f75dc0 若干bug修复 2024-01-19 18:35:26 +08:00
liujun a567d36025 相关方流程变更 2024-01-17 18:43:02 +08:00
liujun 64935b4b54 13025 用工形式显示不正确 2024-01-05 09:29:48 +08:00
liujun ff31836619 13323 编辑页面 部门排序 是数字了还让输入数字 2024-01-04 09:35:40 +08:00
guoyuepeng 5b3b27e6ed 添加 更新.md 2023-12-28 10:49:58 +08:00
32 changed files with 7589 additions and 237 deletions

View File

@ -290,7 +290,7 @@ export default {
}
}
}
this.imgUrl = config.httpurl + data.userPhoto
this.imgUrl = config.fileUrl + data.userPhoto
})
.catch((e) => {
MessageBox.alert('登录失效,请重新登录', {
@ -444,11 +444,11 @@ export default {
formData.append('FFILE', this.FFILE)
upload(
'/photo/saveNew',
'/photo/save',
formData
).then((data) => {
this.dialogForm = false
this.imgUrl = config.httpurl + data.userPhoto
this.imgUrl = config.fileUrl + data.userPhoto
loading.close()
}).catch((e) => {
loading.close()

View File

@ -54,6 +54,18 @@ Vue.config.productionTip = false
Vue.use(Element, {
size: Cookies.get('size') || 'small' // set element-ui default size
})
// 树数据结构去除空子级
Vue.prototype.removeEmptyChildren = function(data) {
for (let i = 0; i < data.length; i++) {
if (data[i].nodes && data[i].nodes.length > 0) {
this.removeEmptyChildren(data[i].nodes)
} else {
delete data[i].nodes
}
}
return data
}
/* eslint-disable no-new */
new Vue({
el: '#app',

View File

@ -0,0 +1,174 @@
<template>
<div class="app-container">
<el-form :model="ruleForm" :rules="rules" label-width="130px">
<el-row>
<el-col :span="6">
<el-form-item label="人员名称" prop="name" class="input-width">
<el-input v-model="ruleForm.name" placeholder="请输入人员名称"/>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="身份证号" prop="cardId">
<el-input v-model="ruleForm.cardId" placeholder="请输入身份证号"/>
</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="cardId" label="身份证号" align="center"/>
<el-table-column prop="name" label="人员名称" align="center"/>
<el-table-column prop="corpName" label="企业名称" align="center"/>
<el-table-column label="操作" align="center" width="250">
<template slot-scope="{row}">
<el-button type="primary" icon="el-icon-s-claim" size="mini" @click="doCheckIn([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>
</div>
</template>
<script>
import Pagination from '@/components/Pagination' // el-pagination
import { requestFN } from '@/utils/request'
import waves from '@/directive/waves' // waves directive
export default {
components: { Pagination },
directives: { waves },
data() {
return {
rules: {
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
cardId: [{ required: true, message: '身份证号不能为空', trigger: 'blur' }]
},
ruleForm: { name: '', cardId: '' },
config: config,
listQuery: {
page: 1,
limit: 10
},
total: 0,
varList: [],
add: false, //
del: false, //
edit: false //
}
},
created() {
// this.getDict()
// this.getList()
},
methods: {
handleSelectWithDifferentStatus(row, rowIndex) {
return true
},
getQuery() {
if (this.ruleForm.name === '') {
this.$message.error('请填写人员名称')
return false
}
if (this.ruleForm.cardId === '') {
this.$message.error('请填写身份证号')
return false
}
if (this.$refs.multipleTable) {
this.$refs.multipleTable.clearSelection()
}
this.listQuery = {
page: 1,
limit: 10
}
this.getList()
},
goKeyReset() {
this.ruleForm.cardId = ''
this.ruleForm.name = ''
this.varList = []
// this.getQuery()
},
getList() {
this.listLoading = true
requestFN(
'/coerce/getUserListByIdCardAndName?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
{
cardId: this.ruleForm.cardId,
name: this.ruleForm.name,
UN_EMPLOY_FLAG: '0'
}
).then((data) => {
this.listLoading = false
this.varList = data.varList
if (this.varList.length === 0) {
this.$message.error('没有相关人员信息')
}
this.total = data.page.totalResult
})
.catch((e) => {
this.listLoading = false
})
},
doCheckIn(row) {
this.$confirm('确定要将 ' + row[0].name + ' 拉入企业吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN(
'/coerce/doCoerceCheckIn',
{
userId: row[0].userId,
corpinfoId: JSON.parse(sessionStorage.getItem('user')).CORPINFO_ID
}
).then((e) => {
console.log(e)
if (e.msg === '1') {
this.$message({
message: '当前人员已经在企业中',
type: 'warning'
})
} else {
this.$message({
message: '拉入成功',
type: 'success'
})
this.getQuery()
}
this.listLoading = false
}).catch((e) => {
this.listLoading = false
})
}).catch(() => {})
}
}
}
</script>

View File

@ -0,0 +1,21 @@
<template>
<component :is="activeName" />
</template>
<script>
import List from './components/list'
export default {
components: {
List: List
},
data() {
return {
activeName: 'List',
SUPERVISE_CORPINFO_ID: ''
}
}
}
</script>
<style scoped>
</style>

View File

@ -39,7 +39,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="用户名" prop="USERNAME" class="input-width">
<el-input v-model="form.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." />
<el-input v-model="form.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." @blur="goCheck()" />
</el-form-item>
</el-col>
</el-row>
@ -69,7 +69,7 @@
<el-row>
<el-col :span="12">
<el-form-item label="身份证号" prop="CARD_ID" class="input-width">
<el-input v-model="form.CARD_ID" placeholder="这里输入身份证号..."/>
<el-input v-model="form.CARD_ID" placeholder="这里输入身份证号..." @blur="goCheck()"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -88,10 +88,17 @@
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
<div style="font-size: 10px; color: red">温馨提示用户要上传身份证正反面身份证照片数量是2张, 才能进行人员培训</div>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="电子邮箱" prop="EMAIL" class="input-width">
<el-input v-model="form.EMAIL" placeholder="这里输入电子邮箱..."/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="民族" prop="NATIONALITY">
@ -183,7 +190,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col v-if="form.POLITICAL_STATUS=='zhonggongdangyuan'" :span="12">
<el-col v-show="form.POLITICAL_STATUS === 'zhonggongdangyuan'" :span="12">
<el-form-item label="入党时间" prop="POLITICAL_TIME">
<el-date-picker
v-model="form.POLITICAL_TIME"
@ -234,74 +241,165 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位名称(工种)" prop="POST_ID" class="input-width">
<el-input v-model="form.POST_ID" placeholder="这里输入岗位名称(工种)..."/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否参加三级安全培训" prop="IS_LEVEL_THREE" >
<el-radio-group v-model="form.IS_LEVEL_THREE">
<el-radio v-model="form.IS_LEVEL_THREE" label="1"></el-radio>
<el-radio v-model="form.IS_LEVEL_THREE" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.IS_LEVEL_THREE === '1'" label="三级安全培训照片" prop="photosOfLevel" >
<el-upload
ref="photosOfLevel"
:file-list="form.photosOfLevel"
:multiple="false"
:limit="5"
:class="{hide:photosOfLevel}"
:auto-upload="false"
:on-remove="handleLevelPhotoRemove"
:on-change="handleLevelPhotoChangeIMG"
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否特殊工种" prop="IS_SPECIAL_JOB">
<el-radio-group v-model="form.IS_SPECIAL_JOB" disabled>
<el-radio v-model="form.IS_SPECIAL_JOB" label="1"></el-radio>
<el-radio v-model="form.IS_SPECIAL_JOB" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-alert
:closable="false"
title="新增完成后请提示该用户去相关方app端完善特种证书信息"
type="error"
class="alertClass"
/>
</el-col>
<el-col :span="12">
<el-form-item label="是否流动人员" prop="ISFLOW" style="float:left">
<el-radio-group v-model="form.ISFLOW">
<el-radio v-model="form.ISFLOW" label="1"></el-radio>
<el-radio v-model="form.ISFLOW" label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="是否签订劳动合同" prop="IS_SIGN_LABOR">
<el-radio-group v-model="form.IS_SIGN_LABOR" @change="form.contractFileList = []">
<el-radio v-model="form.IS_SIGN_LABOR" label="1"></el-radio>
<el-radio v-model="form.IS_SIGN_LABOR" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.IS_SIGN_LABOR === '1'" label="合同图片" prop="contractFileList">
<el-upload
ref="contractFileList"
:file-list="form.contractFileList"
:limit="4"
:class="{hide:hideContractUpload}"
:auto-upload="false"
:on-remove="handleContractFileRemove"
:on-change="handleContractFileChange"
multiple
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否缴纳商业保险" prop="ISPAY" @change="form.insuranceFileList = []">
<el-radio-group v-model="form.ISPAY">
<el-radio v-model="form.ISPAY" label="1"></el-radio>
<el-radio v-model="form.ISPAY" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.ISPAY === '1'" label="商业保险单号" prop="ISPAY_NUMBER">
<el-input v-model="form.ISPAY_NUMBER" placeholder="这里输入商业保险单号..."/>
</el-form-item>
<el-form-item v-if="form.ISPAY === '1'" label="保险图片" prop="insuranceFileList">
<el-upload
ref="insuranceFileList"
:file-list="form.insuranceFileList"
:limit="4"
:class="{hide:hideInsuranceUpload}"
:auto-upload="false"
:on-remove="handleInsuranceFileRemove"
:on-change="handleInsuranceFileChange"
multiple
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="是否按期缴纳工伤保险" prop="IS_INJURIES_PAY" style="float:left">
<el-radio-group v-model="form.IS_INJURIES_PAY">
<el-radio v-model="form.IS_INJURIES_PAY" label="1"></el-radio>
<el-radio v-model="form.IS_INJURIES_PAY" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.IS_INJURIES_PAY ==='1'" label="工伤保险有效期" prop="IS_INJURIES_PAY_TIME" style="float:left">
<el-date-picker
v-model="form.IS_INJURIES_PAY_TIME"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
style="width: 290px"
/>
</el-form-item>
<el-form-item v-if="form.IS_INJURIES_PAY ==='1'" label="上传工伤保险凭证" style="float:left" prop="gongshangbaoxianFile">
<el-upload
ref="gongshangFileList"
:file-list="form.gongshangbaoxianFile"
:limit="4"
:class="{hide:hidegongshangUpload}"
:auto-upload="false"
:on-remove="handleGongshangFileRemove"
:on-change="handleGongshangFileChange"
multiple
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位名称(工种)" prop="POST_ID" class="input-width">
<el-input v-model="form.POST_ID" placeholder="这里输入岗位名称(工种)..."/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否参加三级安全培训" prop="IS_LEVEL_THREE" >
<el-radio-group v-model="form.IS_LEVEL_THREE">
<el-radio v-model="form.IS_LEVEL_THREE" label="1"></el-radio>
<el-radio v-model="form.IS_LEVEL_THREE" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.IS_LEVEL_THREE === '1'" label="三级安全培训照片" prop="photosOfLevel" >
<el-upload
ref="photosOfLevel"
:file-list="form.photosOfLevel"
:multiple="false"
:limit="5"
:class="{hide:photosOfLevel}"
:auto-upload="false"
:on-remove="handleLevelPhotoRemove"
:on-change="handleLevelPhotoChangeIMG"
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否特殊工种" prop="IS_SPECIAL_JOB">
<el-radio-group v-model="form.IS_SPECIAL_JOB" disabled>
<el-radio v-model="form.IS_SPECIAL_JOB" label="1"></el-radio>
<el-radio v-model="form.IS_SPECIAL_JOB" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-alert
:closable="false"
title="新增完成后请提示该用户去相关方app端完善特种证书信息"
type="error"
class="alertClass"
/>
</el-col>
<el-col :span="12">
<el-form-item label="是否流动人员" prop="ISFLOW" style="float:left">
<el-radio-group v-model="form.ISFLOW">
<el-radio v-model="form.ISFLOW" label="1"></el-radio>
<el-radio v-model="form.ISFLOW" label="0"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<!--第八行-->
<el-col :span="12"/>
<el-col :span="12"/>
<el-row>
<!--第八行-->
<el-col :span="12"/>
<el-col :span="12"/>
</el-row>
</el-row>
</el-form>
</div>
<div class="ui-height"/>
<div class="ui-foot">
<el-button v-show="dialogType == 'saveUser'" :loading="buttonLoading" type="success" @click="confirm"> </el-button>
<el-button v-show="dialogType === 'saveUser' && ISCHECK" :loading="buttonLoading" type="success" @click="confirm"> </el-button>
<el-button v-show="!ISCHECK" type="success" @click="goCheck"> </el-button>
<el-button plain type="info" @click="goBack"> </el-button>
</div>
</div>
@ -447,6 +545,8 @@ export default {
callback()
}
return {
ISCHECK: false,
ISPUSH: false,
buttonLoading: false,
DEPARTMENT_NAME: '',
dayTime: [],
@ -490,7 +590,7 @@ export default {
],
rules: {
NAME: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
NATIONALITY: [{ required: false, message: '民族不能为空', trigger: 'blur' }],
NATIONALITY: [{ required: true, message: '民族不能为空', trigger: 'blur' }],
IS_BF: [{ required: true, message: '请选择是否缴纳保险', trigger: 'blur' }],
IS_SOCIAL: [{ required: true, message: '请选择是否缴纳社保', trigger: 'blur' }],
POLITICAL_STATUS: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
@ -498,7 +598,7 @@ export default {
USERNAME: [
{ required: true, message: '用户名不能为空', trigger: 'blur' },
{
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/,
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0-9]|18[0-9]|19[0-9])\d{8}$/,
message: '用户名为手机号,请正确输入'
},
{ validator: hasName, trigger: 'blur' }
@ -548,6 +648,7 @@ export default {
},
{ validator: hasCARD, trigger: 'blur' }
],
EMAIL: [{ required: true, message: '电子邮箱不能为空', trigger: 'blur' }],
AGE: [{ required: true, message: '年龄不能为空', trigger: 'blur' },
{
pattern: /^\d{2}$/,
@ -734,6 +835,79 @@ export default {
}
},
methods: {
goPush(row) {
requestFN(
'user/goPush',
{
USER_ID: row.USER_ID,
STATUS: row.STATUS,
BZ: row.BZ,
SKIN: row.SKIN,
PHONE: row.PHONE,
NUMBER: row.NUMBER,
CARD_NO: row.CARD_ID,
USERNAME: row.USERNAME,
NAME: row.NAME,
CORPINFO_ID: row.CORPINFO_ID,
CORPINFO_NAME: row.CORPINFO_NAME || '',
DEPARTMENT_ID: row.DEPARTMENT_ID,
DEPARTMENT_NAME: row.DEPARTMENT_NAME,
IMGFILES_ID: row.IMGFILES_ID,
FOREIGN_KEY: row.FOREIGN_KEY,
FILEPATH: row.FILEPATH,
EMAIL: row.EMAIL || '',
CARD_TYPE: '111',
CARD_TYPE_NAME: '身份证',
NATION: row.NATIONALITY || '',
SEX: row.SEX || '',
USER_TYPE: '2',
ISDELETE: row.ISDELETE
}
).then((data) => {
if (data.result === 'success') {
this.$message.success('推送成功')
this.$parent.activeName = 'List'
} else {
this.$message.error('推送失败,' + data.msg)
this.$parent.activeName = 'List'
}
}).catch((e) => {
this.listLoading = false
})
},
goCheck() {
if (this.form.CARD_ID && this.form.USERNAME) {
const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/
const phoneResult = phoneJudge.test(this.form.USERNAME)
const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
const cardResult = cardJudge.test(this.form.CARD_ID)
if (phoneResult && cardResult) {
console.log('格式校验通过')
requestFN(
'user/goCheck',
{
CARD_NO: this.form.CARD_ID,
USERNAME: this.form.USERNAME
}
).then((data) => {
if (data.result === 'success') {
this.$message.success('验证通过')
this.ISCHECK = true
} else {
this.$message.error('验证失败,请确认身份证号与手机号是否正确')
this.ISCHECK = false
}
}).catch((e) => {
this.listLoading = false
this.ISCHECK = false
})
} else {
this.ISCHECK = false
}
} else {
this.ISCHECK = false
}
},
/** 三级教育培训 **/
handleLevelPhotoRemove(file, fileList) {
this.form.photosOfLevel = fileList
@ -888,12 +1062,39 @@ export default {
}
}
}
if (this.form.IS_INJURIES_PAY === '1') {
if (this.$refs['gongshangFileList'].uploadFiles.length > 0) {
for (let i = 0; i < this.$refs['gongshangFileList'].uploadFiles.length; i++) {
if (this.$refs['gongshangFileList'].uploadFiles[i]) {
formData.append('WORK_INSURANCE_LIST', this.$refs['gongshangFileList'].uploadFiles[i].raw)
}
}
}
}
if (this.form.ISPAY === '1') {
if (this.$refs['insuranceFileList'].uploadFiles.length > 0) {
for (let i = 0; i < this.$refs['insuranceFileList'].uploadFiles.length; i++) {
if (this.$refs['insuranceFileList'].uploadFiles[i]) {
formData.append('insuranceFile', this.$refs['insuranceFileList'].uploadFiles[i].raw)
}
}
}
}
if (this.form.IS_SIGN_LABOR === '1') {
if (this.$refs['contractFileList'].uploadFiles.length > 0) {
for (let i = 0; i < this.$refs['contractFileList'].uploadFiles.length; i++) {
if (this.$refs['contractFileList'].uploadFiles[i]) {
formData.append('contractFile', this.$refs['contractFileList'].uploadFiles[i].raw)
}
}
}
}
formData.append('CORPINFO_ID', JSON.parse(sessionStorage.getItem('user')).CORPINFO_ID)
upload(
'/user/' + this.dialogType,
formData
).then((data) => {
this.$parent.activeName = 'List'
this.goPush(data.pd)
this.listLoading = false
this.buttonLoading = false
}).catch((e) => {

View File

@ -35,7 +35,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="用户名" prop="USERNAME" class="input-width">
<el-input v-model="form.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..." />
<el-input v-model="form.USERNAME" :disabled="dialogType == 'editUser'" placeholder="这里输入用户名..."/>
</el-form-item>
</el-col>
</el-row>
@ -87,6 +87,7 @@
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
<div style="font-size: 10px; color: red">温馨提示用户要上传身份证正反面身份证照片数量是2张, 才能进行人员培训</div>
</el-form-item>
</el-col>
</el-row>
@ -133,8 +134,8 @@
<el-input v-model="form.AGE" type="number" placeholder="这里输入年龄..." disabled/>
</el-form-item>
</el-col>
</el-row>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="户口所在地" prop="HKLOCAL" class="input-width">
@ -170,7 +171,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="政治面貌" prop="POLITICAL_STATUS">
@ -184,7 +184,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col v-show="form.POLITICAL_STATUS == 'zhonggongdangyuan'" :span="12">
<el-col v-show="form.POLITICAL_STATUS === 'zhonggongdangyuan'" :span="12">
<el-form-item label="入党时间" prop="POLITICAL_TIME">
<el-date-picker
v-model="form.POLITICAL_TIME"
@ -197,7 +197,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否缴纳社保" prop="IS_SOCIAL">
@ -236,6 +235,100 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="是否签订劳动合同" prop="IS_SIGN_LABOR">
<el-radio-group v-model="form.IS_SIGN_LABOR" @change="form.contractFileList = []">
<el-radio v-model="form.IS_SIGN_LABOR" label="1"></el-radio>
<el-radio v-model="form.IS_SIGN_LABOR" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.IS_SIGN_LABOR === '1'" label="合同图片" prop="contractFileList">
<el-upload
ref="contractFileList"
:file-list="form.contractFileList"
:limit="4"
:class="{hide:hideContractUpload}"
:auto-upload="false"
:before-remove="handlePhotoBeforeRemove"
:on-remove="handleContractFileRemove"
:on-change="handleContractFileChange"
multiple
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否缴纳商业保险" prop="ISPAY" @change="form.insuranceFileList = []">
<el-radio-group v-model="form.ISPAY">
<el-radio v-model="form.ISPAY" label="1"></el-radio>
<el-radio v-model="form.ISPAY" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.ISPAY === '1'" label="商业保险单号" prop="ISPAY_NUMBER">
<el-input v-model="form.ISPAY_NUMBER" placeholder="这里输入商业保险单号..."/>
</el-form-item>
<el-form-item v-if="form.ISPAY === '1'" label="保险图片" prop="insuranceFileList">
<el-upload
ref="insuranceFileList"
:file-list="form.insuranceFileList"
:limit="4"
:class="{hide:hideInsuranceUpload}"
:auto-upload="false"
:on-remove="handleInsuranceFileRemove"
:on-change="handleInsuranceFileChange"
:before-remove="handlePhotoBeforeRemove"
multiple
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="是否按期缴纳工伤保险" prop="IS_INJURIES_PAY" style="float:left">
<el-radio-group v-model="form.IS_INJURIES_PAY">
<el-radio v-model="form.IS_INJURIES_PAY" label="1"></el-radio>
<el-radio v-model="form.IS_INJURIES_PAY" label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item v-if="form.IS_INJURIES_PAY ==='1'" label="工伤保险有效期" prop="IS_INJURIES_PAY_TIME" style="float:left">
<el-date-picker
v-model="form.IS_INJURIES_PAY_TIME"
type="date"
placeholder="选择日期"
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
style="width: 290px"
/>
</el-form-item>
<el-form-item v-if="form.IS_INJURIES_PAY ==='1'" label="上传工伤保险凭证" style="float:left" prop="gongshangbaoxianFile">
<el-upload
ref="gongshangFileList"
:file-list="form.gongshangbaoxianFile"
:limit="4"
:class="{hide:hidegongshangUpload}"
:auto-upload="false"
:before-remove="handlePhotoBeforeRemove"
:on-remove="handleGongshangFileRemove"
:on-change="handleGongshangFileChange"
multiple
action="#"
accept=".jpg,.jpeg,.png"
list-type="picture-card">
<i class="el-icon-plus" />
</el-upload>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="岗位名称(工种)" prop="POST_ID">
@ -305,7 +398,8 @@
</div>
<div class="ui-height"/>
<div class="ui-foot">
<el-button :loading="buttonLoading" type="success" @click="confirm"> </el-button>
<el-button v-show="!ISCHECK" :loading="buttonLoading" type="success" @click="confirm"> </el-button>
<!-- <el-button v-show="!ISCHECK" :loading="buttonLoading" type="success" @click="goCheck"> </el-button> -->
<el-button plain type="info" @click="goBack"> </el-button>
</div>
</div>
@ -451,6 +545,8 @@ export default {
callback()
}
return {
ISCHECK: false,
USER_ID: "",
imgDelKey: [],
zhebaoUpload: false, //
photosOfLevel: false, //
@ -497,12 +593,12 @@ export default {
rules: {
NAME: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
POLITICAL_STATUS: [{ required: true, message: '请选择政治面貌', trigger: 'blur' }],
NATIONALITY: [{ required: false, message: '请选择民族', trigger: 'blur' }],
NATIONALITY: [{ required: true, message: '请选择民族', trigger: 'blur' }],
POLITICAL_TIME: [{ required: true, validator: isCommunist, message: '请选择入党时间', trigger: 'blur' }],
USERNAME: [
{ required: true, message: '用户名不能为空', trigger: 'blur' },
{
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/,
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0-9]|18[0-9]|19[0-9])\d{8}$/,
message: '用户名为手机号,请正确输入'
},
{ validator: hasName, trigger: 'blur' }
@ -539,7 +635,7 @@ export default {
{ required: true, message: '请输入手机号码', trigger: 'blur' },
{ min: 11, max: 11, message: '请输入11位手机号码', trigger: 'blur' },
{
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/,
pattern: /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0-9]|18[0-9]|19[0-9])\d{8}$/,
message: '请输入正确的手机号码'
}],
ROLE_ID: [{ required: true, message: '请选择角色', trigger: 'change' }],
@ -798,6 +894,81 @@ export default {
this.getDict()
},
methods: {
goCheck() {
if (this.form.CARD_ID && this.form.USERNAME) {
const phoneJudge = /^(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[0-9])\d{8}$/
const phoneResult = phoneJudge.test(this.form.USERNAME)
const cardJudge = /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/
const cardResult = cardJudge.test(this.form.CARD_ID)
if (phoneResult && cardResult) {
console.log('格式校验通过')
requestFN(
'user/goCheck',
{
USER_ID: this.form.USER_ID,
CARD_NO: this.form.CARD_ID,
USERNAME: this.form.USERNAME
}
).then((data) => {
if (data.result === 'success') {
this.$message.success('验证通过')
this.ISCHECK = true
} else {
this.$message.error('验证失败,请确认身份证号与手机号是否正确')
this.ISCHECK = false
}
}).catch((e) => {
this.listLoading = false
this.ISCHECK = false
})
} else {
this.ISCHECK = false
}
} else {
this.$message.warning('请确认身份证号与手机号后进行校验')
this.ISCHECK = false
}
},
goPush(row) {
requestFN(
'user/goPush',
{
USER_ID: row.USER_ID,
STATUS: row.STATUS,
BZ: row.BZ,
SKIN: row.SKIN,
PHONE: row.PHONE,
NUMBER: row.NUMBER,
CARD_NO: row.CARD_ID,
USERNAME: row.USERNAME,
NAME: row.NAME,
CORPINFO_ID: row.CORPINFO_ID,
CORPINFO_NAME: row.CORPINFO_NAME || '',
DEPARTMENT_ID: row.DEPARTMENT_ID,
DEPARTMENT_NAME: row.DEPARTMENT_NAME,
IMGFILES_ID: row.IMGFILES_ID,
FOREIGN_KEY: row.FOREIGN_KEY,
FILEPATH: row.FILEPATH,
EMAIL: row.EMAIL || '',
CARD_TYPE: '111',
CARD_TYPE_NAME: '身份证',
NATION: row.NATIONALITY || '',
SEX: row.SEX || '',
USER_TYPE: '2',
ISDELETE: row.ISDELETE
}
).then((data) => {
if (data.result === 'success') {
this.$message.success('推送成功')
this.$parent.activeName = 'List'
} else {
this.$message.error('推送失败,' + data.msg)
this.$parent.activeName = 'List'
}
}).catch((e) => {
this.listLoading = false
})
},
//
checkSpecialCertificateList() {
return new Promise((resolve, reject) => {
@ -970,7 +1141,8 @@ export default {
},
//
confirm() {
this.$refs.form.validate(valid => {
this.$refs.form.validate((valid, errorFields) => {
console.log(errorFields)
if (valid) {
if (this.form.userCardFile.length < 2) {
this.$message.error('请上传身份证正反面照片')
@ -1008,6 +1180,33 @@ export default {
}
}
}
if (this.form.IS_INJURIES_PAY === '1') {
if (this.$refs['gongshangFileList'].uploadFiles.length > 0) {
for (let i = 0; i < this.$refs['gongshangFileList'].uploadFiles.length; i++) {
if (this.$refs['gongshangFileList'].uploadFiles[i]) {
formData.append('WORK_INSURANCE_LIST', this.$refs['gongshangFileList'].uploadFiles[i].raw)
}
}
}
}
if (this.form.ISPAY === '1') {
if (this.form.insuranceFileList.length > 0) {
for (let i = 0; i < this.form.insuranceFileList.length; i++) {
if (this.form.insuranceFileList[i]) {
formData.append('insuranceFile', this.form.insuranceFileList[i].raw)
}
}
}
}
if (this.form.IS_SIGN_LABOR === '1') {
if (this.form.contractFileList.length > 0) {
for (let i = 0; i < this.form.contractFileList.length; i++) {
if (this.form.contractFileList[i]) {
formData.append('contractFile', this.form.contractFileList[i].raw)
}
}
}
}
//
if (this.form.IS_SOCIAL === '1') {
if (this.$refs['zhenbaoUpload'].uploadFiles.length > 0) {
@ -1035,11 +1234,10 @@ export default {
formData
).then((data) => {
this.$message.success('保存成功!')
this.$parent.activeName = 'List'
this.goPush(data.pd)
this.listLoading = false
this.buttonLoading = false
}).catch((e) => {
this.$message.success('保存失败!')
this.listLoading = false
this.buttonLoading = false
})
@ -1088,24 +1286,24 @@ export default {
this.form.photosOfLevel.push(obj)
})
}
// if (data.gongshangbaoxianFile) {
// data.gongshangbaoxianFile.map(item => {
// const obj = { id: item.IMGFILES_ID, name: item.FILENAME, url: config.fileUrl + item.FILEPATH }
// this.form.gongshangbaoxianFile.push(obj)
// })
// }
// if (data.insuranceFile) {
// data.insuranceFile.map(item => {
// const obj = { id: item.IMGFILES_ID, name: item.FILENAME, url: config.fileUrl + item.FILEPATH }
// this.form.insuranceFileList.push(obj)
// })
// }
// if (data.contractFile) {
// data.contractFile.map(item => {
// const obj = { id: item.IMGFILES_ID, name: item.FILENAME, url: config.fileUrl + item.FILEPATH }
// this.form.contractFileList.push(obj)
// })
// }
if (data.gongshangbaoxianFile) {
data.gongshangbaoxianFile.map(item => {
const obj = { id: item.IMGFILES_ID, name: item.FILENAME, url: config.fileUrl + item.FILEPATH }
this.form.gongshangbaoxianFile.push(obj)
})
}
if (data.insuranceFile) {
data.insuranceFile.map(item => {
const obj = { id: item.IMGFILES_ID, name: item.FILENAME, url: config.fileUrl + item.FILEPATH }
this.form.insuranceFileList.push(obj)
})
}
if (data.contractFile) {
data.contractFile.map(item => {
const obj = { id: item.IMGFILES_ID, name: item.FILENAME, url: config.fileUrl + item.FILEPATH }
this.form.contractFileList.push(obj)
})
}
this.EMPLOYMENT_APPLY_MANAGEMENT_ID = data.pdrelated.EMPLOYMENT_APPLY_MANAGEMENT_ID
const node = {}
node.id = this.form.DEPARTMENT_ID
@ -1149,7 +1347,6 @@ export default {
}
})
},
changeLearnerCategory() {
this.form.LEARNERCATEGORY = ''
if (this.form.LEARNERCATEGORYSTATUS === 'select') {
@ -1166,7 +1363,6 @@ export default {
this.form.LEARNERCATEGORYSTATUS = 'select'
}
},
//
hasButton() {
var keys = 'user:add,user:del,user:edit'
@ -1231,7 +1427,6 @@ export default {
this.form.insuranceFileList.push(file)
this.hideInsuranceUpload = fileList.length >= 4
},
// remove
handleInsuranceFileRemove(file, fileList) {
this.form.insuranceFileList = fileList
@ -1250,7 +1445,6 @@ export default {
this.form.contractFileList.push(file)
this.hideContractUpload = fileList.length >= 4
},
// remove
handleContractFileRemove(file, fileList) {
this.form.contractFileList = fileList

View File

@ -118,12 +118,7 @@
<span v-if="row.USER_ID != userId">
<el-tag v-if="row.STATUS == 1" type="warning"></el-tag>
<el-tag v-if="row.STATUS == 0" type="info"></el-tag>
<el-tag v-if="row.STATUS == 2" type="success">
<template v-if="row.TRAIN_STATUS == '1'">
已培训合格
</template>
<template v-else></template>
</el-tag>
<el-tag v-if="row.STATUS == 2" type="success"></el-tag>
<el-tag v-if="row.STATUS == 9"></el-tag>
</span>
<span v-else />
@ -146,10 +141,11 @@
<el-button v-show="edit && row.ACCOUNT_TYPE == '1'" type="success" icon="el-icon-edit" size="mini" @click="handleUserEdit(row)"></el-button>
<el-button v-show="edit" type="success" icon="el-icon-refresh" size="mini" @click="resetPwd(row.USER_ID)"></el-button>
<el-button v-if="del && row.ACCOUNT_TYPE == '1'" type="danger" icon="el-icon-delete" size="mini" @click="handleDelete(row)"></el-button>
<el-button v-if="row.ISUSE == 1 && row.ACCOUNT_TYPE == '1'" type="success" icon="el-icon-check" size="mini" @click="enableORDisable('0', row.USER_ID)"></el-button>
<el-button v-if="row.ISUSE == 0 && row.ACCOUNT_TYPE == '1'" type="danger" icon="el-icon-close" size="mini" @click="enableORDisable('1', row.USER_ID)"></el-button>
<el-button v-if="row.ISUSE == 1 && row.ACCOUNT_TYPE == '1'" type="success" icon="el-icon-check" size="mini" @click="enableORDisable('0', row)"></el-button>
<el-button v-if="row.ISUSE == 0 && row.ACCOUNT_TYPE == '1'" type="danger" icon="el-icon-close" size="mini" @click="enableORDisable('1', row)"></el-button>
</template>
<el-button v-if="row.ACCOUNT_TYPE == '1'" type="info" icon="el-icon-postcard" size="mini" @click="handlePrinting(row)"></el-button>
<el-button v-if="row.ISPUSH == '0'" type="primary" icon="el-icon-position" size="mini" @click="goPush(row)"></el-button>
</div>
</template>
</el-table-column>
@ -462,6 +458,47 @@ export default {
this.getTreeList()
},
methods: {
goPush(row) {
requestFN(
'user/goPush',
{
USER_ID: row.USER_ID,
STATUS: row.STATUS,
BZ: row.BZ,
SKIN: row.SKIN,
PHONE: row.PHONE,
NUMBER: row.NUMBER,
CARD_NO: row.CARD_ID,
USERNAME: row.USERNAME,
NAME: row.NAME,
CORPINFO_ID: row.CORPINFO_ID,
CORPINFO_NAME: row.CORPINFO_NAME || '',
DEPARTMENT_ID: row.DEPARTMENT_ID,
DEPARTMENT_NAME: row.DEPARTMENT_NAME,
IMGFILES_ID: row.IMGFILES_ID,
FOREIGN_KEY: row.FOREIGN_KEY,
FILEPATH: row.FILEPATH,
EMAIL: row.EMAIL || '',
CARD_TYPE: '111',
CARD_TYPE_NAME: '身份证',
NATION: row.NATIONALITY || '',
SEX: row.SEX || '',
USER_TYPE: '2',
ISUSE: row.ISUSE,
ISDELETE: row.ISDELETE
}
).then((data) => {
if (data.result === 'success') {
this.$message.success('推送成功')
this.getList()
} else {
this.$message.error('推送失败,' + data.msg)
this.getList()
}
}).catch((e) => {
this.listLoading = false
})
},
getRowKey(row) {
return row.USER_ID
},
@ -598,7 +635,8 @@ export default {
PHONE: row.PHONE,
CARD_ID: row.CARD_ID,
DEPARTMENT_NAME: row.DEPARTMENT_NAME,
CORPINFO_ID: row.CORPINFO_ID
CORPINFO_ID: row.CORPINFO_ID,
ISPUSH: row.ISPUSH
}
).then((data) => {
if (data.result == 'success') {
@ -634,7 +672,8 @@ export default {
DEPART_STATE: this.DEPART_STATE,
BASIC_STATE: this.BASIC_STATE,
CARD_ID: this.ID_CARD,
USER_ID: this.USER_ID
USER_ID: this.USER_ID,
ISPUSH: '1'
}
).then((data) => {
this.listLoading = false
@ -655,7 +694,7 @@ export default {
})
},
//
enableORDisable(ISUSE, USER_ID) {
enableORDisable(ISUSE, row) {
this.$confirm(ISUSE === '0' ? '确定要启用该账户吗?' : '确定要禁用该账户吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
@ -665,8 +704,8 @@ export default {
requestFN(
'/user/editisuse',
{
USER_ID,
ISUSE
USER_ID: row.USER_ID,
ISUSE: ISUSE
}
).then(() => {
this.$message({
@ -676,7 +715,8 @@ export default {
this.listLoading = false
this.varList = []
this.listQuery.page = 1
this.getList()
row.ISUSE = ISUSE
this.goPush(row)
}).catch((e) => {
this.listLoading = false
})
@ -751,11 +791,24 @@ export default {
dangerouslyUseHTMLString: true
})
} else {
this.$message({
message: '导入成功。</br>一共解析了' + data.importCount + '条数据。</br>其中新增' + data.saveCount + '条数据。' + '修改' + data.updCount + '条数据。</br>',
dangerouslyUseHTMLString: true,
type: 'success'
})
console.log(data.uncheckMsg)
if (data.uncheckMsg) {
this.$message({
message: '导入成功,但部分数据验重或推送失败</br>一共解析了' + data.importCount + '条数据。</br>其中新增' + data.saveCount + '条数据。' + '修改' + data.updCount + '条数据。</br>' + data.pushMsg + '</br>' + data.uncheckMsg + '</br>',
duration: 5000,
showClose: true,
dangerouslyUseHTMLString: true,
type: 'error'
})
} else {
this.$message({
message: '导入成功。</br>一共解析了' + data.importCount + '条数据。</br>其中新增' + data.saveCount + '条数据。' + '修改' + data.updCount + '条数据。</br>' + data.pushMsg + '</br>',
duration: 5000,
showClose: true,
dangerouslyUseHTMLString: true,
type: 'success'
})
}
this.dialogFormDaoru = false
this.getList()
}

View File

@ -7,8 +7,8 @@
<h1>人员信息</h1>
</div>
<tr>
<th>照片</th>
<td>
<th style="width: 200px">照片</th>
<td style="width: 400px">
<span v-if="imgUrl != ''">
<div class="img-flex">
<viewer>
@ -18,9 +18,9 @@
</span>
<span v-else/>
</td>
<th>姓名</th>
<th style="width: 200px">姓名</th>
<td>{{ dataForm.NAME }}</td>
<th>性别</th>
<th width="200px">性别</th>
<td>{{ dataForm.SEX === '0' ? '男' : '女' }}</td>
</tr>
<tr>
@ -102,6 +102,68 @@
</td>
</tr>
<tr>
<th>是否按期缴纳工伤保险</th>
<td :colspan="dataForm.IS_INJURIES_PAY === '1' ? '':5">{{ formatLabel(dataForm.IS_INJURIES_PAY) }}</td>
<th v-if="dataForm.IS_INJURIES_PAY === '1'"></th>
<td v-if="dataForm.IS_INJURIES_PAY === '1'">{{ dataForm.IS_INJURIES_PAY_TIME }}</td>
<th v-if="dataForm.IS_INJURIES_PAY === '1'"></th>
<td v-if="dataForm.IS_INJURIES_PAY === '1'">
<span>
<viewer>
<img
v-for="item in gongshangbaoxianFile"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
</tr>
<tr>
<th>是否缴纳商业保险</th>
<td :colspan="dataForm.ISPAY === '1' ? '' : 5">
{{ formatLabel(dataForm.ISPAY) }}
</td>
<th v-if="dataForm.ISPAY === '1'"></th>
<td v-if="dataForm.ISPAY === '1'">
<span>
<viewer>
<img
v-for="item in insuranceFileList"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
<th v-if="dataForm.ISPAY === '1'"></th>
<td v-if="dataForm.ISPAY === '1'">{{ dataForm.ISPAY_NUMBER }}</td>
</tr>
<tr>
<th>是否签订劳动合同</th>
<td :colspan="dataForm.IS_SIGN_LABOR === '1' ? '' : 5">
{{ formatLabel(dataForm.IS_SIGN_LABOR) }}
</td>
<th v-if="dataForm.IS_SIGN_LABOR === '1'"></th>
<td v-if="dataForm.IS_SIGN_LABOR === '1'" colspan="3">
<span>
<viewer>
<img
v-for="item in contractFileList"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
</tr>
<tr/><tr>
<th>是否参加三级安全培训</th>
<td >{{ formatLabel(dataForm.IS_LEVEL_THREE) }}</td>
<th>三级安全培训照片</th>
@ -125,7 +187,7 @@
<th>是否特殊工种</th>
<td >{{ formatLabel(dataForm.IS_SPECIAL_JOB) }}</td>
<th>是否流动人员</th>
<td >{{ formatLabel(dataForm.ISFLOW) }}</td>
<td colspan="3">{{ formatLabel(dataForm.ISFLOW) }}</td>
</tr>
</table>
</div>
@ -246,11 +308,11 @@ export default {
this.imgUrl = config.fileUrl + this.userPhotoFile[0].FILEPATH
}
this.photosOfLevel = data.photosOfLevel
// this.insuranceFileList = data.insuranceFile
// this.contractFileList = data.contractFile
this.insuranceFileList = data.insuranceFile
this.contractFileList = data.contractFile
this.userCardIDPhotoFile = data.userCardIDPhotoFile
this.socialPhotoFile = data.socialPhotoFile
// this.gongshangbaoxianFile = data.gongshangbaoxianFile
this.gongshangbaoxianFile = data.gongshangbaoxianFile
}).catch((e) => {
this.listLoading = false
})

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,326 @@
<template>
<div class="app-container">
<div class="reform-article">
<div class="reform-table">
<table class="table-ui" style="margin-bottom: 20px;">
<div class="level-title">
<h1>人员信息</h1>
</div>
<tr>
<th style="width: 200px">照片</th>
<td style="width: 400px">
<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 style="width: 200px">姓名</th>
<td>{{ dataForm.NAME }}</td>
<th width="200px">性别</th>
<td>{{ dataForm.SEX === '0' ? '男' : '女' }}</td>
</tr>
<tr>
<th>出生年月</th>
<td>{{ dataForm.DATE_OF_BIRTH }}</td>
<th>年龄</th>
<td>{{ dataForm.AGE }}</td>
<th>手机号</th>
<td>{{ dataForm.PHONE }}</td>
</tr>
<tr>
<th>身份证</th>
<td>{{ dataForm.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>{{ dataForm.minzuName }}</td>
<th>婚姻状况</th>
<td>{{ dataForm.MARITALSTATUS === '0' ? '未婚' : '已婚' }}</td>
<th>政治面貌</th>
<td>{{ dataForm.zzName }} {{
dataForm.zzName == '中共党员' ? '入党时间' + dataForm.POLITICAL_TIME : ''
}}
</td>
</tr>
<tr>
<th>户口所在地</th>
<td>{{ dataForm.HKLOCAL }}</td>
<th>现住址</th>
<td>{{ dataForm.ADDRESS }}</td>
<th>联系电话</th>
<td>{{ dataForm.PHONE }}</td>
</tr>
<tr>
<th>文化程度</th>
<td>{{ dataForm.DEGREE_OF_EDUCATION_NAME }}</td>
<th>岗位名称(工种)</th>
<td colspan="3">{{ dataForm.POST_ID }}</td>
</tr>
<tr>
<th>是否缴纳社保</th>
<td :colspan="dataForm.IS_SOCIAL === '1' ? '':5">{{ formatLabel(dataForm.IS_SOCIAL) }}</td>
<th v-if="dataForm.IS_SOCIAL === '1'"></th>
<td v-if="dataForm.IS_SOCIAL === '1'">{{ dataForm.SOCIAL_NUMBER }}</td>
<th v-if="dataForm.IS_SOCIAL === '1'"></th>
<td v-if="dataForm.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 :colspan="dataForm.IS_INJURIES_PAY === '1' ? '':5">{{ formatLabel(dataForm.IS_INJURIES_PAY) }}</td>
<th v-if="dataForm.IS_INJURIES_PAY === '1'"></th>
<td v-if="dataForm.IS_INJURIES_PAY === '1'">{{ dataForm.IS_INJURIES_PAY_TIME }}</td>
<th v-if="dataForm.IS_INJURIES_PAY === '1'"></th>
<td v-if="dataForm.IS_INJURIES_PAY === '1'">
<span>
<viewer>
<img
v-for="item in gongshangbaoxianFile"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
</tr>
<tr>
<th>是否缴纳商业保险</th>
<td :colspan="dataForm.ISPAY === '1' ? '' : 5">
{{ formatLabel(dataForm.ISPAY) }}
</td>
<th v-if="dataForm.ISPAY === '1'"></th>
<td v-if="dataForm.ISPAY === '1'">
<span>
<viewer>
<img
v-for="item in insuranceFileList"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
<th v-if="dataForm.ISPAY === '1'"></th>
<td v-if="dataForm.ISPAY === '1'">{{ dataForm.ISPAY_NUMBER }}</td>
</tr>
<tr>
<th>是否签订劳动合同</th>
<td :colspan="dataForm.IS_SIGN_LABOR === '1' ? '' : 5">
{{ formatLabel(dataForm.IS_SIGN_LABOR) }}
</td>
<th v-if="dataForm.IS_SIGN_LABOR === '1'"></th>
<td v-if="dataForm.IS_SIGN_LABOR === '1'" colspan="3">
<span>
<viewer>
<img
v-for="item in contractFileList"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
</tr>
<tr/><tr>
<th>是否参加三级安全培训</th>
<td >{{ formatLabel(dataForm.IS_LEVEL_THREE) }}</td>
<th>三级安全培训照片</th>
<td v-if="photosOfLevel.length>0" colspan="3">
<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(dataForm.IS_SPECIAL_JOB) }}</td>
<th>是否流动人员</th>
<td colspan="3">{{ formatLabel(dataForm.ISFLOW) }}</td>
</tr>
</table>
</div>
</div>
<div class="ui-foot" style="margin-left: -20px;bottom: -8px;">
<el-button plain type="info" @click="back"> </el-button>
</div>
</div>
</template>
<script>
import { requestFN } from '@/utils/request'
export default {
data() {
return {
config: config,
imgUrl: '',
listLoading: false,
wenhuachengduList: [],
postList: [],
contractFileList: [], //
insuranceFileList: [], //
userPhotoFile: [], //
userCardIDPhotoFile: [], //
photosOfLevel: [], //
socialPhotoFile: [], //
gongshangbaoxianFile: [], //
dataForm: {
contractFileList: [], //
insuranceFileList: [], //
CARD_ID: '', //
DEPARTMENT_NAME: '', //
CORPINFO_ID: '', // id
HKLOCAL: '', //
AGE: '',
SEX: '',
ADDRESS: '',
PHONE: '',
IS_SOCIAL: '', //
SOCIAL_NUMBER: '', //
IS_LEVEL_THREE: '', //
IS_SPECIAL_JOB: '', //
ISFLOW: '', //
PHOTO: [],
IS_INJURIES_PAY: '',
CORP_START_DATE: '',
IS_BODY_ADAPT: '',
IS_SAFETY_TELL: '',
ISPAY: '',
IS_SIGN_LABOR: '',
DEPARTMENT_ID: '',
POST_ID: '',
PERSON_WORK_TYPE: '', //
USERNAME: '',
NAME: '',
BZ: '',
PERSON_TYPE: '',
PASSWORD: 'Aa@123456789',
DATE_OF_BIRTH: '', //
DEGREE_OF_EDUCATION: '', //
POST: '', //
TYPE_OF_WORK: '', //
ENTRY_DATE: '', //
WORK_DATE: '' //
},
USER_ID: '',
CORPINFO_ID: ''
}
},
async created() {
// await this.getTreeList()
this.getDict()
this.getList()
},
methods: {
back() {
this.$parent.activeName = 'List'
},
//
formatLabel(value) {
if (value == '1') {
return '是'
} else if (value == '0') {
return '否'
} else {
return ''
}
},
//
getDict() {
requestFN(
'dictionaries/getLevels',
{ DICTIONARIES_ID: 'd7d80f08d73a4accbccf4fd3d8d1d867' }
).then((data) => {
this.wenhuachengduList = data.list
}).catch((e) => {
this.listLoading = false
})
},
getList() {
this.listLoading = true
requestFN(
'user/getDetailByUserIdAndCorpInfoId',
{
USER_ID: this.$parent.USER_ID,
CORPINFO_ID: this.$parent.CORPINFO_ID,
EMPLOYMENT_APPLY_MANAGEMENT_ID: this.$parent.EMPLOYMENT_APPLY_MANAGEMENT_ID
}
).then((data) => {
this.listLoading = false
this.dataForm = Object.assign(this.dataForm, data.pd)
this.userPhotoFile = data.userPhotoFile
if (this.userPhotoFile.length > 0) {
this.imgUrl = config.fileUrl + this.userPhotoFile[0].FILEPATH
}
this.photosOfLevel = data.photosOfLevel
this.insuranceFileList = data.insuranceFile
this.contractFileList = data.contractFile
this.userCardIDPhotoFile = data.userCardIDPhotoFile
this.socialPhotoFile = data.socialPhotoFile
this.gongshangbaoxianFile = data.gongshangbaoxianFile
}).catch((e) => {
this.listLoading = false
})
}
}
}
</script>
<style scoped>
</style>

View File

@ -0,0 +1,41 @@
<template>
<div>
<List v-show="activeName=='List'" ref="list" />
<Edit v-if="activeName=='Edit'" />
<Add v-if="activeName=='Add'" />
<ViewData v-if="activeName=='ViewData'" />
</div>
</template>
<script>
import List from './components/list'
import Edit from './components/edit'
import Add from './components/add'
import ViewData from './components/view'
export default {
components: {
List: List,
Edit: Edit,
Add: Add,
ViewData: ViewData
},
data() {
return {
activeName: 'List',
USER_ID: '',
CORPINFO_ID: ''
}
},
watch: {
activeName(val) {
if (val == 'List') {
this.$refs.list.getList()
}
}
}
}
</script>
<style scoped>
</style>

View File

@ -41,16 +41,23 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="股份主管部门" prop="MAIN_DEPARTMENT">
<Treeselect
<!-- <Treeselect
:options="treeData"
:disabled="true"
:normalizer="normalizer"
:flat="true"
:default-expand-level="0"
:props="defaultProps"
v-model="dataForm.MAIN_DEPARTMENT"
multiple
placeholder="请选择部门"
no-options-text="暂无数据"
no-children-text="暂无数据"
style="width: 100%;"
/>
/>-->
<el-input v-model="dataForm.MAIN_DEPARTMENT_NAME" disabled maxlength="255" title="单位名称"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -62,7 +69,7 @@
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="集团单位" prop="corpTypeName">
<el-input id="corpTypeName" ref="corpTypeName" v-model="dataForm.corpTypeName" disabled maxlength="255" placeholder="这里输入开户人..." title="开户人"/>
<el-input id="corpTypeName" ref="corpTypeName" v-model="dataForm.corpTypeName" disabled maxlength="255" placeholder="这里输入集团单位..." title="集团单位"/>
</el-form-item>
</el-col>
<el-col :span="12">
@ -85,6 +92,7 @@
v-model="dataForm.POSSESSION"
:options="areaList"
:props="areaProps"
:append-to-body="false"
:placeholder="dataForm.COMPANY_AREA"
style="width: 100%"
@change="cascaderChange"
@ -184,7 +192,7 @@
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="注册资金" prop="REGISTERED_CAPITAL">
<el-form-item label="注册资金(万元)" prop="REGISTERED_CAPITAL">
<el-input id="REGISTERED_CAPITAL" ref="REGISTERED_CAPITAL" v-model="dataForm.REGISTERED_CAPITAL" type="number" maxlength="11" placeholder="这里输入注册资金..." title="注册资金"/>
</el-form-item>
</el-col>
@ -496,7 +504,7 @@ export default {
corpName: '',
AUDIT_STATE: '',
dataForm: {
MAIN_DEPARTMENT: '',
MAIN_DEPARTMENT: null,
businessLicenseDate: [],
STATE: '',
SUPERVISE_CORPINFO_DEPT_NAME: '',
@ -684,11 +692,11 @@ export default {
],
TOTAL_ASSETS: [
{ required: true, message: '资产总额不能为空', trigger: 'blur' },
{ min: 1, max: 5, message: '请正确的资产总额', trigger: 'blur' }
{ min: 1, max: 15, message: '请正确的资产总额', trigger: 'blur' }
],
REGISTERED_CAPITAL: [
{ required: true, message: '注册资金不能为空', trigger: 'blur' },
{ min: 1, max: 5, message: '请正确的注册资金', trigger: 'blur' }
{ min: 1, max: 15, message: '请正确的注册资金', trigger: 'blur' }
],
EMPLOYMENT_FORM: [{ required: true, message: '请选择用工形式', trigger: 'blur' }],
SELECT_FORMS: [{ required: true, message: '请选择选取形式', trigger: 'blur' }]
@ -760,7 +768,7 @@ export default {
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
await this.getTreeList()
// await this.getTreeList()
await this.getDict()
await this.getData()
loading.close()
@ -844,6 +852,11 @@ export default {
{}
).then((data) => {
this.treeData = JSON.parse(data.zTreeNodes)
this.treeData.push({
id: '0',
name: '无',
nodes: []
})
resolve()
}).catch((e) => {
reject()
@ -877,6 +890,7 @@ export default {
this.dataForm.businessLicenseDate = []
this.dataForm.businessLicenseDate.push(this.dataForm.LICENSE_START)
this.dataForm.businessLicenseDate.push(this.dataForm.LICENSE_END)
this.dataForm.USER_NAME = this.dataForm.USER_NAME ? this.dataForm.USER_NAME : this.dataForm.USER_NAME_B
this.$forceUpdate()
// 2023-08-31
if (this.dataForm.SELECT_FORM) {
@ -895,37 +909,16 @@ export default {
if (data.pd.CITY != '') this.dataForm.POSSESSION.push(data.pd.CITY)
if (data.pd.COUNTY != '') this.dataForm.POSSESSION.push(data.pd.COUNTY)
if (data.pd.VILLAGE != '') this.dataForm.POSSESSION.push(data.pd.VILLAGE)
// console.info(this.dataForm.POSSESSION)
// this.areaList = data.areaList
this.AUDIT_STATE = this.dataForm.STATE
console.log('this.employmentTypeList')
console.log(this.employmentTypeList)
/* const node = {}
node.id = this.form.EMPLOYMENT_FORM
this.$refs.deptTree_Select.clearHandle()
this.$nextTick(() => { // 使
this.$refs.deptTree_Select.handleNodeClick(node)
} )*/
this.$forceUpdate()
// if (data.pd.STREET != '') this.dataForm.POSSESSION.push(data.pd.STREET)
/* this.OLDFOURTYPE = data.pd.FOURTYPE
this.form = Object.assign(this.form, data.pd)
//
if (data.pd.industryOption && data.pd.industryOption.length > 0) {
this.hylxList = data.pd.industryOption
if (this.dataForm.MAIN_DEPARTMENT.indexOf('[') > -1) {
this.dataForm.MAIN_DEPARTMENT = JSON.parse(this.dataForm.MAIN_DEPARTMENT)
} else {
this.getDictByDicId('f2598ba72e864eadabf0ca4b664d26b9').then(data => {
this.hylxList = data
})
this.dataForm.MAIN_DEPARTMENT = [this.dataForm.MAIN_DEPARTMENT]
}
//
if (data.dep) {
this.mainDepartment = data.dep.MAIN_REGULATORY_DEPARTMENT_NAME
this.regulatoryDepartment = data.dep.REGULATORY_DEPARTMENT_NAME
}
console.log('this.form', this.form) */
this.$forceUpdate()
resolve()
}).catch((e) => {
console.log(e)
this.$message({
message: '操作失败',
type: 'error'
@ -936,9 +929,6 @@ export default {
})
},
getNextTickData() {
// this.$nextTick(() => {
// this.$refs.ecoCascader.presentText = this.censusRegisterPlaceName
// })
if (this.form.CORP_OF_TYPE2 && this.form.CORP_OF_TYPE2 != '') {
const node = {}
node.id = this.form.CORP_OF_TYPE2
@ -952,11 +942,6 @@ export default {
this.$refs.corpOfTypeRef.handleNodeClick(node)
})
}
// const nodea = {}
// nodea.id = this.form.TRAINTYPE
// this.$nextTick(() => { // 使
// this.$refs.keyHyRef.handleNodeClick(nodea)
// })
this.$forceUpdate()
},
/** 上级企业选择 Begin */
@ -1039,6 +1024,7 @@ export default {
this.dataForm.SELECT_FORM = this.dataForm.SELECT_FORMS.join(',')
this.dataForm.LICENSE_START = this.dataForm.businessLicenseDate[0]
this.dataForm.LICENSE_END = this.dataForm.businessLicenseDate[1]
this.dataForm.MAIN_DEPARTMENT = JSON.stringify(this.dataForm.MAIN_DEPARTMENT)
//
const formData = new FormData()
Object.keys(this.dataForm).map(key => {

View File

@ -16,11 +16,6 @@
@node-click="handleNodeClick"/>
</el-aside>
<el-main>
<!-- <div class="filter-btn-group">
<div>
<el-button @click="showGraph()"></el-button>
</div>
</div>-->
<el-table
v-loading="listLoading"
ref="multipleTable"
@ -83,23 +78,6 @@
<el-form-item label="部门职能">
<el-input :rows="3" v-model="form.FUNCTIONS" type="textarea" placeholder="这里输入部门职能..." />
</el-form-item>
<!-- <el-form-item label="是否监管部门">
<el-radio-group v-model="form.IS_REGULATORY" @change="changeIssup">
<el-radio :label="'1'"></el-radio>
<el-radio :label="'0'"></el-radio>
</el-radio-group>
</el-form-item>-->
<!-- <el-form-item v-show="form.IS_REGULATORY=='1'" label="监管部门" prop="MAIN_DEPARTMENT" class="is-required">
<SelectTree
ref="deptTree"
:clearable="false"
:options="treeData"
:props="defaultProps"
v-model="form.MAIN_DEPARTMENT"
placeholder="请选择监管部门"
style="width: 100%"
/>
</el-form-item>-->
<el-form-item label="备注">
<el-input :rows="3" v-model="form.BZ" type="textarea" placeholder="这里输入备注..." />
</el-form-item>
@ -386,6 +364,7 @@ export default {
}
).then((data) => {
this.form = Object.assign({}, data.pd) // copy obj
this.form.DEPT_SORT = Number(this.form.DEPT_SORT)
this.pds = data.pds || [] //
this.dialogFormAdd = true

View File

@ -45,12 +45,10 @@
<el-table-column prop="NAME" label="姓名" align="center"/>
<el-table-column prop="DEPARTMENT_NAME" label="部门" align="center"/>
<el-table-column prop="EMPLOYER_NAME" label="外派公司名称" align="center"/>
<el-table-column label="操作" align="center" width="250">
<el-table-column label="操作" align="center" width="100">
<template slot-scope="{row}">
<el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(row)"></el-button>
<el-button type="primary" icon="el-icon-s-claim" size="mini" @click="sendMessage([row])"></el-button>
<el-button v-if="false" type="success" icon="el-icon-edit" size="mini" @click="getUserInfo(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>

View File

@ -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>

View File

@ -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>

View File

@ -0,0 +1,269 @@
<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
v-if="false"
: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="DEPARTMENT_NAME" label="部门" align="center"/>
<el-table-column prop="EMPLOYER_NAME" label="外派公司名称" align="center"/>
<el-table-column prop="REPULSE_REASON" label="打回原因" align="center"/>
<el-table-column label="操作" align="center" width="100">
<template slot-scope="{row}">
<el-button type="primary" icon="el-icon-edit" size="mini" @click="handleShow(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 '../../synInfo/components/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(
'/trainingbatch/userList?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
{
KEYWORDS: this.KEYWORDS,
STATUS: this.STATUS,
EMPLOY_FLAG: '0'
}
).then((data) => {
this.listLoading = false
this.varList = data.varList
this.total = data.page.totalResult
})
.catch((e) => {
this.listLoading = false
})
},
handleShow(row) {
this.$refs.userInfos.init(row)
},
sendMessage(row) {
this.$confirm('确定要提交人员撤回申请吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
requestFN(
'/trainingbatch/submitApplication', { xgf_user_ids: row.map(item => item.USER_ID).join(',') }
).then((data) => {
if (data.code === '0') {
this.$message({
type: 'success',
message: '申请提交成功!'
})
this.getList()
} else {
this.$message.error(data.msg)
}
})
}).catch(() => {
this.$message({
type: 'info',
message: '申请提交取消'
})
})
},
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>

View File

@ -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>

View File

@ -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 + '&currentPage=' + 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>

View File

@ -0,0 +1,130 @@
<template>
<div>
<el-dialog :visible.sync="visible" :append-to-body="appendToBody" :before-close="beforeClose" title="审批" width="370px" destroy-on-close>
<el-form>
<el-form-item prop="TERRITORIALITY" label="集团单位 ">
<Treeselect
:options="jituanDanweiTreeData"
:normalizer="normalizer"
v-model="corp_id"
placeholder="请选择集团单位 "
no-options-text="暂无数据"
no-children-text="暂无数据"
style="width: 100%;"
@select="getInfo($event)"
/>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="visible = false"> </el-button>
<el-button type="primary" @click="sendMessage()"> </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,
jituanDanwei: '',
loading: false,
jituanDanweiTreeData: [],
normalizer(node) {
return {
id: node.id,
label: node.name,
children: node.nodes
}
},
corp_id: null,
corp_name: '',
heirloom: {}
}
},
methods: {
init(e) {
this.visible = true
this.getCorpinfo()
this.heirloom = JSON.stringify(e)
},
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() {
if (this.jituanDanwei) {
requestFN(
'/companyApi/department/listTree',
{ CORPINFO_ID: this.jituanDanwei }
).then((data) => {
this.jituanDanweiTreeData = JSON.parse(data.zTreeNodes)
}).catch((e) => {
})
}
},
getInfo(e) {
console.log(e)
this.corp_name = e.name
},
beforeClose() {
this.corp_id = null
},
sendMessage(row) {
requestFN(
'/trainingbatch/sendMessage',
{
list: this.heirloom,
corp_id: this.corp_id,
corp_name: this.corp_name,
tm: new Date().getTime()
}
).then((data) => {
this.$message.success('推送成功')
this.visible = false
this.$emit('refresh', '')
})
}
}
}
</script>
<style lang="scss" scoped>
</style>

View File

@ -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>

View File

@ -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 + '&currentPage=' + 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>

View File

@ -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>

View File

@ -7,6 +7,13 @@
<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="SENDSTATUS" placeholder="请选择推送状态" style="width: 100%;" clearable>
<el-option v-for="item in sendStatusList" :key="item.value" :label="item.label" :value="item.value"/>
</el-select>
</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>
@ -25,6 +32,11 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col>
<div style="font-size: 10px; color: red">温馨提示用户要上传身份证正反面身份证照片数量是2张, 才能进行人员培训</div>
</el-col>
</el-row>
</el-form>
<el-table
ref="multipleTable"
@ -105,6 +117,8 @@ export default {
value: 2,
label: '已培训(合格)'
}, { value: 3, label: '已培训(不合格)' }, { value: 9, label: '申请中' }],
sendStatusList:[{value:'0', label:'未推送'},{value:'1', label:'已推送'}],
SENDSTATUS:'0',
STATUS: '',
add: false, //
del: false, //

View File

@ -1,22 +1,64 @@
<template>
<div>
<el-dialog
v-loading="loading"
:visible.sync="visible"
:append-to-body="appendToBody"
:before-close="beforeClose"
title="推送"
width="500px"
width="1100px"
destroy-on-close>
<el-form label-position="right" label-width="100px">
<el-form-item prop="TERRITORIALITY" label="集团单位 ">
<el-select v-model="corp_id" placeholder="请选择集团单位 " style="width: 90%" @change="getInfo">
<el-option
v-for="item in jituanDanweiTreeData"
:key="item.CORPINFO_ID"
:label="item.CORP_NAME"
:value="JSON.stringify(item)"/>
</el-select>
</el-form-item>
<el-form ref="form" :model="form" :rules="rules" label-width="200px" label-position="right" type="flex">
<el-row>
<el-col :span="12">
<el-form-item prop="APPOINT_CORP_ID" label="单位 ">
<el-select v-model="corp_id" filterable placeholder="请选择单位 " style="width: 300px" @change="getInfo">
<el-option
v-for="item in jituanDanweiTreeData"
:key="item.CORPINFO_ID"
:label="item.CORP_NAME"
:value="JSON.stringify(item)"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="APPOINT_DEPARTMENT_ID" label="指定部门:">
<Treeselect
:options="departmentTree"
:normalizer="normalizer"
:default-expand-level="3"
v-model="form.APPOINT_DEPARTMENT_ID"
placeholder="请选择部门"
no-options-text="暂无数据"
no-children-text="暂无数据"
style="width: 300px"
@select="getPeopleList($event)"
/>
</el-form-item>
</el-col>
</el-row>
<el-row>
<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-col :span="12">
<el-form-item prop="APPOINT_ANNEX" label="承诺书:">
<upload-file
:file-list.sync="form.APPOINT_ANNEX"
:multiple="false"
:accept="'.pdf,.jpg,.png,doc,docx'"
:limit="20"
:size="1024"
:upload-type="1"/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="visible = false"> </el-button>
@ -30,9 +72,11 @@
import vueQr from 'vue-qr'
import Treeselect from '@riophae/vue-treeselect'
import { requestFN } from '@/utils/request'
import uploadFile from '../../../util/uploadFile/index.vue'
import { upload } from '@/utils/upload'
export default {
components: { Treeselect, vueQr },
components: { Treeselect, vueQr, uploadFile },
props: {
appendToBody: {
type: Boolean,
@ -48,7 +92,43 @@ export default {
corp_id: null,
corp_name: '',
heirloom: {},
listFlag: false
listFlag: false,
departmentTree: [],
peopleList: [],
normalizer(node) {
return {
id: node.id,
label: node.name,
children: node.nodes
}
},
form: {
STATUS: null,
APPOINT_CORP_ID: '',
APPOINT_CORP_NAME: '',
APPOINT_DEPARTMENT_ID: null,
APPOINT_DEPARTMENT_NAME: '',
APPOINT_USER_ID: '',
APPOINT_USER_NAME: '',
APPOINT_ANNEX: [],
user: '',
tm: new Date().getTime(),
list: []
},
rules: {
APPOINT_DEPARTMENT_ID: [
{ required: true, message: '请选择指定部门', trigger: 'change' }
],
APPOINT_USER_ID: [
{ required: true, message: '请选择指定审批人', trigger: 'change' }
],
APPOINT_CORP_ID: [
{ required: true, message: '请选择企业', trigger: 'change' }
],
APPOINT_ANNEX: [
{ required: true, message: '请上传文件', trigger: 'change' }
]
}
}
},
methods: {
@ -75,37 +155,104 @@ export default {
'/department/getPreventCrop',
).then((data) => {
this.jituanDanweiTreeData = data.data
this.jituanDanweiTreeData.push({ CORPINFO_ID: '1', CORP_NAME: '秦皇岛港股份有限公司' })
}).catch((e) => {
})
},
getInfo(e) {
const info = JSON.parse(e)
this.corp_name = info.CORP_NAME
this.form.APPOINT_CORP_ID = info.CORPINFO_ID
this.form.APPOINT_CORP_NAME = info.CORP_NAME
this.form.APPOINT_DEPARTMENT_ID = null
this.form.APPOINT_DEPARTMENT_NAME = ''
this.form.APPOINT_USER_ID = ''
this.form.APPOINT_USER_NAME = ''
this.form.user = ''
this.getDepartmentTree()
},
beforeClose() {
this.corp_id = null
this.visible = false
this.form = {
STATUS: null,
APPOINT_CORP_ID: '',
APPOINT_CORP_NAME: '',
APPOINT_DEPARTMENT_ID: null,
APPOINT_DEPARTMENT_NAME: '',
APPOINT_USER_ID: '',
APPOINT_USER_NAME: '',
user: '',
tm: new Date().getTime(),
list: []
}
},
sendMessage() {
const corp_id = JSON.parse(this.corp_id).CORPINFO_ID
requestFN(
'/trainingbatch/sendMessage',
{
list: this.heirloom,
corp_id: corp_id,
corp_name: this.corp_name,
tm: new Date().getTime()
}
).then((data) => {
if (data.code !== '0') {
this.$message.error(data.msg)
this.$refs.form.validate((valid) => {
if (!valid) {
this.$message.error('请填写完整信息')
} else {
this.$message.success('推送成功')
this.visible = false
this.$emit('refresh', '')
if (this.form.APPOINT_CORP_ID === this.form.APPOINT_DEPARTMENT_ID) {
this.$message.error('不能选择主部门或主账号')
return
}
this.form.list = this.heirloom
const formData = new FormData()
Object.keys(this.form).map(key => {
formData.append(key, this.form[key])
})
for (let i = 0; i < this.form.APPOINT_ANNEX.length; i++) {
formData.append('chenNuoShu', this.form.APPOINT_ANNEX[i].raw)
}
this.loading = true
upload('/trainingbatch/sendMessage', formData
).then((data) => {
if (data.code !== '0') {
this.$message.error(data.msg)
} else {
this.$message.success('推送成功')
this.visible = false
this.$emit('refresh', '')
this.beforeClose()
this.loading = false
}
})
}
})
},
getDepartmentTree() {
requestFN(
'/companyApi/department/listTree',
{ CORPINFO_ID: this.form.APPOINT_CORP_ID }
).then((data) => {
this.departmentTree = this.removeEmptyChildren(JSON.parse(data.zTreeNodes))
}).catch((e) => {
console.log(e)
})
},
getPeopleList(e) {
this.form.APPOINT_DEPARTMENT_NAME = e.name
requestFN(
'/companyApi/user/listAll',
{
DEPARTMENT_ID: e.id,
CORPINFO_ID: JSON.parse(this.corp_id).CORPINFO_ID
}
).then((data) => {
this.form.APPOINT_USER_ID = ''
this.form.APPOINT_USER_NAME = ''
this.form.user = ''
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
}
}
}
</script>

View File

@ -107,6 +107,68 @@
</td>
</tr>
<tr>
<th>是否按期缴纳工伤保险</th>
<td :colspan="userDetailForm.IS_INJURIES_PAY === '1' ? '':5">{{ formatLabel(userDetailForm.IS_INJURIES_PAY) }}</td>
<th v-if="userDetailForm.IS_INJURIES_PAY === '1'"></th>
<td v-if="userDetailForm.IS_INJURIES_PAY === '1'">{{ userDetailForm.IS_INJURIES_PAY_TIME }}</td>
<th v-if="userDetailForm.IS_INJURIES_PAY === '1'"></th>
<td v-if="userDetailForm.IS_INJURIES_PAY === '1'">
<span>
<viewer>
<img
v-for="item in gongshangbaoxianFile"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
</tr>
<tr>
<th>是否缴纳商业保险</th>
<td :colspan="userDetailForm.ISPAY === '1' ? '' : 5">
{{ formatLabel(userDetailForm.ISPAY) }}
</td>
<th v-if="userDetailForm.ISPAY === '1'"></th>
<td v-if="userDetailForm.ISPAY === '1'">
<span>
<viewer>
<img
v-for="item in insuranceFileList"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
<th v-if="userDetailForm.ISPAY === '1'"></th>
<td v-if="userDetailForm.ISPAY === '1'">{{ userDetailForm.ISPAY_NUMBER }}</td>
</tr>
<tr>
<th>是否签订劳动合同</th>
<td :colspan="userDetailForm.IS_SIGN_LABOR === '1' ? '' : 5">
{{ formatLabel(userDetailForm.IS_SIGN_LABOR) }}
</td>
<th v-if="userDetailForm.IS_SIGN_LABOR === '1'"></th>
<td v-if="userDetailForm.IS_SIGN_LABOR === '1'" colspan="3">
<span>
<viewer>
<img
v-for="item in contractFileList"
:src="config.fileUrl + item.FILEPATH"
:key="item.IMGFILES_ID"
width="40"
height="40"
style="object-fit: cover;">
</viewer>
</span>
</td>
</tr>
<tr/><tr>
<th>是否参加三级安全培训</th>
<td>{{ formatLabel(userDetailForm.IS_LEVEL_THREE) }}</td>
<th v-if="userDetailForm.IS_LEVEL_THREE == 1"></th>

View File

@ -39,14 +39,16 @@ export default {
},
info: {
type: String,
default: '文件大小不超过500kb'
default: '文件大小不超过500MB'
}
},
data() {
return {
dialogImageUrl: '',
dialogVisible: false,
disabled: false
disabled: false,
file: {},
file_name: ''
}
},
methods: {
@ -63,15 +65,29 @@ export default {
const isLt2M = file.size / 1024 / 1024 < this.fileSize
if (!isLt2M) {
this.$message.error('上传视频大小不能超过 ' + this.fileSize + 'MB!')
this.$refs.uploadFile.clearFiles()
this.$refs.uploadFile.handleRemove(file)
return false
}
let nameNumber = 0
for (let j = 0; j < fileList.length; j++) {
if (fileList[j].name === file.name) {
nameNumber = nameNumber + 1
}
}
if (nameNumber > 1) {
this.$message.error('文件名重复,请重新选择!')
this.$refs.uploadFile.handleRemove(file)
return false
}
this.$emit('update:fileList', fileList)
},
onRemove(file, fileList) {
this.$emit('update:fileList', fileList)
},
handleExceed(files, fileList) {
console.log(files, fileList)
this.$message.warning(`当前限制选择 ${this.limit} 个文件,本次选择了 ${files.length} 个文件,共选择了 ${files.length + fileList.length} 个文件`)
}
}

View File

@ -1,10 +1,17 @@
const config = {
weburl: 'http://192.168.151.43:8088/', // 前台地址
httpurl: 'http://192.168.151.43:8088/', // 后台地址
// weburl: 'http://192.168.151.43:8088/', // 前台地址
// httpurl: 'http://192.168.151.43:8088/', // 后台地址
weburl: 'http://192.168.0.49:8088/', // 前台地址
httpurl: 'http://192.168.0.49:8088/', // 后台地址
qyurl: 'http://192.168.151.43:8088/', // 企业前台
adminurl: 'https://www.qdkjchina.com/qa-prevention-admin/',
// 正式
fileUrl: 'https://qgqy.qhdsafety.com/file/', // 附件服务器地址,
// fileUrl: 'http://192.168.192.201:8991/file/', // 附件服务器地址,
// 测试
fileUrl: 'http://wwag.qhdsafety.com/file/', // 附件服务器地址,
publicKey: 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC2zCyUYSD0pNrbtaYdvGfHfWoRV+fo/2N9O2PLLz/jZvMkigkq4eAq4JO+Ek0wDHI9WxP6iTSLYCHhIOs9CQTPvyldJFm8riZtQZlBTD8Plkb3rjrgwTqbBi3w3+HKYdkSvGFXJIdSOPbpXnj5BzN8vlVaybs24R/vpUzG9178lwIDAQAB',
httpJgUrl: 'http://192.168.151.56:8092/',
messageUrl: 'http://192.168.151.56:8082/static/qrcode/views/xgf_hgz/index.html'

View File

@ -160,7 +160,7 @@
<div class="text textone">所在单位</div>
</td>
<td colspan="3">
<div class="text">{{ message.DEPARTMENT_NAME }}</div>
<div class="text">{{ message.BELONG_TO_CORP_NAME }}</div>
</td>
<td rowspan="3">
<div class="qrcode"></div>

1
更新.md Normal file
View File

@ -0,0 +1 @@
升级内容: 企业端PC 1、新增-三人以上风险分布图菜单-分公司进行上传维护 2、新增-人员聚集分布图菜单-分公司进行上传维护 3、新增-人员培训申请-分公司进行申请培训 4、新增-相关方人员撤场申请审批-分公司审批相关方人员撤回申请 监管端PC 1、新增-三人以上风险分布图菜单,查看分公司数据 2、新增-人员聚集分布图菜单,查看分公司数据 3、优化-重点工程菜单-搜索条件可以手动输入,主管部门和监管部门可以选择全部企业 4、优化-入场告知培训管理-优化审核流程 相关方PC 1、新增-人员推送申请-相关方对分公司推送人员 2、新增-人员撤回申请-相关方对分公司申请撤回人员 企业端APP 1、优化-动火作业-监火改为选择部门 2、新增-查看重点工程监控视频 3、新增-重点工程创建人审核开工申请和结束申请 监管端APP 1、新增-查看重点工程监控视频 2、新增-重点工程创建人审核开工申请和结束申请 一公司app 1、新增-原来动火作业改为国标新动火作业审批流程