补充不同类型资质申请表单
This commit is contained in:
parent
36737ad17a
commit
d0d6156691
|
@ -8,6 +8,14 @@ export function getCurrentUserList(query) {
|
|||
data: query
|
||||
})
|
||||
}
|
||||
// ESC获取员工资质证书情况列表
|
||||
export function getUserCertificateList(query) {
|
||||
return request({
|
||||
url: 'admin/busUserQualificationCertificate/getList',
|
||||
method: 'post',
|
||||
data: query
|
||||
})
|
||||
}
|
||||
// 修改我的资质证书情况
|
||||
export function updateCurrentCertificate(data) {
|
||||
return request({
|
||||
|
@ -37,7 +45,16 @@ export function uploadFile(data) {
|
|||
|
||||
|
||||
|
||||
// 获取资质申请记录列表
|
||||
// 本人获取资质申请记录列表
|
||||
export function getCurUserQualification(query) {
|
||||
return request({
|
||||
url: '/admin/busUserQualification/currentUserPageList',
|
||||
method: 'post',
|
||||
data: query
|
||||
})
|
||||
}
|
||||
|
||||
// ESC/培训中心获取资质申请记录列表
|
||||
export function getBusUserQualification(query) {
|
||||
return request({
|
||||
url: '/admin/busUserQualification/pageList',
|
||||
|
|
72
src/views/qualification/escTask/components/PdfPreview.vue
Normal file
72
src/views/qualification/escTask/components/PdfPreview.vue
Normal file
|
@ -0,0 +1,72 @@
|
|||
<template>
|
||||
<div class="pdf-viewer">
|
||||
<vue-pdf-embed :source="pdfUrl" :page="currentPage" :style="`transform: scale(${scale})`"
|
||||
class="pdf-document" />
|
||||
|
||||
<div class="pdf-controls">
|
||||
<el-button @click="prevPage" :disabled="currentPage <= 1">上一页</el-button>
|
||||
<span>第 {{ currentPage }} 页 / 共 {{ pageCount }} 页</span>
|
||||
<el-button @click="nextPage" :disabled="currentPage >= pageCount">下一页</el-button>
|
||||
<!-- <el-button @click="zoomIn">放大</el-button>
|
||||
<el-button @click="zoomOut">缩小</el-button> -->
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import VuePdfEmbed from 'vue-pdf-embed'
|
||||
|
||||
const props = defineProps({
|
||||
pdfUrl: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
pageCount: {
|
||||
type: Number,
|
||||
default: 1
|
||||
}
|
||||
})
|
||||
|
||||
const currentPage = ref(1)
|
||||
const scale = ref(1)
|
||||
|
||||
const prevPage = () => {
|
||||
if (currentPage.value > 1) currentPage.value--
|
||||
}
|
||||
|
||||
const nextPage = () => {
|
||||
if (currentPage.value < props.pageCount) currentPage.value++
|
||||
}
|
||||
|
||||
const zoomIn = () => {
|
||||
scale.value += 0.1
|
||||
}
|
||||
|
||||
const zoomOut = () => {
|
||||
if (scale.value > 0.5) scale.value -= 0.1
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.pdf-viewer {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.pdf-document {
|
||||
flex: 1;
|
||||
overflow: auto;
|
||||
transform-origin: top left;
|
||||
}
|
||||
|
||||
.pdf-controls {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 10px;
|
||||
background: #f5f5f5;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
</style>
|
|
@ -4,19 +4,21 @@
|
|||
<el-row class="myRow">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="员工姓名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入员工姓名" clearable style="width: 160px"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-select v-model="queryParams.deptId" placeholder="请选择部门" clearable style="width: 160px">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-select v-model="queryParams.userId" filterable placeholder="请选择员工" @change="selectChanged">
|
||||
<el-option v-for="item in allUsers" :key="item.userId" :label="item.nickName"
|
||||
:value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="目标资质" prop="qualification">
|
||||
<el-select v-model="queryParams.qualification" placeholder="请选择目标资质" clearable style="width: 160px">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-tree-select v-model="queryParams.deptId" :data="enabledDeptOptions"
|
||||
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
|
||||
placeholder="请选择部门" check-strictly style="width: 160px" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目标资质" prop="qualificationId">
|
||||
<el-select v-model="queryParams.qualificationId" placeholder="请选择目标资质" clearable
|
||||
style="width: 160px">
|
||||
<el-option v-for="dict in target_qualification" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
@ -35,169 +37,127 @@
|
|||
</el-button>
|
||||
</div>
|
||||
<div class="borderLine"></div>
|
||||
<el-table :data="tableData" height="calc(100% - 226px)" style="width: 100%">
|
||||
<el-table v-loading="loading" :data="tableData" height="calc(100% - 226px)" style="width: 100%">
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="scope">
|
||||
{{ scope.$index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="localityName" label="属地" />
|
||||
<el-table-column prop="departmentName" label="部门" />
|
||||
<el-table-column prop="officeName" label="科室" />
|
||||
<el-table-column prop="jobNumber" label="工号" />
|
||||
<el-table-column prop="name" label="员工姓名" />
|
||||
<el-table-column prop="curQualification" label="当前资质" />
|
||||
<el-table-column prop="objectiveQualification" label="目标资质" />
|
||||
<el-table-column prop="status" label="状态" width="120">
|
||||
<el-table-column prop="dependencyName" label="属地" width="180" :show-overflow-tooltip="true" />
|
||||
<el-table-column prop="deptName" label="部门" width="180" :show-overflow-tooltip="true" />
|
||||
<el-table-column prop="sectionName" label="科室" width="180" :show-overflow-tooltip="true" />
|
||||
<el-table-column prop="workNo" label="工号" width="130" />
|
||||
<el-table-column prop="userName" label="员工姓名" width="130" />
|
||||
<el-table-column prop="sourceQualificationName" label="当前资质" width="130" />
|
||||
<el-table-column prop="qualificationName" label="目标资质" width="130" />
|
||||
<el-table-column prop="state" label="状态" width="120">
|
||||
<template #default="scope">
|
||||
<el-text v-if="scope.row.status == 0" type="info" class="infoinfoText">待审核</el-text>
|
||||
<el-text v-if="scope.row.status == 1" type="success" class="successText">通过</el-text>
|
||||
<el-text v-if="scope.row.status == 2" type="danger" class="dangerText">驳回</el-text>
|
||||
<el-text v-if="scope.row.state == 1" type="info" class="infoinfoText">待审核</el-text>
|
||||
<el-text v-if="scope.row.state == 2" type="success" class="successText">通过</el-text>
|
||||
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<el-table-column label="操作" fixed="right" width="150">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.status != 1">重新申请</el-button>
|
||||
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.status != 1" />
|
||||
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state != 1">重新申请</el-button>
|
||||
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state != 1" />
|
||||
<el-button type="primary" text class="deleteTextBtn">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
|
||||
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
<pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageIndex"
|
||||
v-model:limit="queryParams.pageSize" @pagination="getBusUserQualificationPageList" />
|
||||
</template>
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import applyIcon from '@/assets/images/applyIcon.png'
|
||||
import { getBusUserQualification } from "@/api/qualification/myQualifications"
|
||||
import { deptTreeSelect, listUser } from "@/api/system/user"
|
||||
|
||||
const router = useRouter()
|
||||
const total = ref(16)
|
||||
const { proxy } = getCurrentInstance()
|
||||
const { target_qualification } = proxy.useDict("target_qualification")
|
||||
|
||||
const queryParams = ref({
|
||||
pageNum: 1,
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
userName: undefined,
|
||||
node: 0,
|
||||
userId: undefined,
|
||||
deptId: undefined,
|
||||
qualification: undefined
|
||||
qualificationId: undefined
|
||||
})
|
||||
const tableData = [
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 1
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 2
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
{
|
||||
localityName: 'XXX属地',
|
||||
departmentName: 'XXX部门',
|
||||
officeName: 'XXX科室',
|
||||
jobNumber: '3523213',
|
||||
name: '赵丽娟',
|
||||
curQualification: '-',
|
||||
objectiveQualification: 'SH',
|
||||
status: 0
|
||||
},
|
||||
]
|
||||
const loading = ref(true)
|
||||
const total = ref("")
|
||||
const tableData = ref([])
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
getAllUser();
|
||||
getDeptTree();
|
||||
getBusUserQualificationPageList();
|
||||
});
|
||||
|
||||
// 用户数据
|
||||
const allUsers = ref([])
|
||||
// 获取所有用户
|
||||
const getAllUser = () => {
|
||||
listUser({
|
||||
pageNum: 1,
|
||||
pageSize: 5000
|
||||
}).then(res => {
|
||||
allUsers.value = res.rows
|
||||
})
|
||||
}
|
||||
// 部门数据
|
||||
const enabledDeptOptions = ref(undefined)
|
||||
// 获取部门数据
|
||||
const getDeptTree = () => {
|
||||
deptTreeSelect().then(res => {
|
||||
enabledDeptOptions.value = filterDisabledDept(JSON.parse(JSON.stringify(res.data)))
|
||||
})
|
||||
}
|
||||
/** 过滤禁用的部门 */
|
||||
const filterDisabledDept = (deptList) => {
|
||||
return deptList.filter(dept => {
|
||||
if (dept.disabled) {
|
||||
return false
|
||||
}
|
||||
if (dept.children && dept.children.length) {
|
||||
dept.children = filterDisabledDept(dept.children)
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const getBusUserQualificationPageList = () => {
|
||||
loading.value = true
|
||||
getBusUserQualification(queryParams.value).then(res => {
|
||||
console.log('资质申请结论', res)
|
||||
if (res.code == 200) {
|
||||
tableData.value = res.data.list
|
||||
total.value = res.data.total
|
||||
}
|
||||
loading.value = false
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1
|
||||
getList()
|
||||
queryParams.value.pageIndex = 1
|
||||
getBusUserQualificationPageList()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
dateRange.value = []
|
||||
proxy.resetForm("queryRef")
|
||||
queryParams.value.deptId = undefined
|
||||
proxy.$refs.deptTreeRef.setCurrentKey(null)
|
||||
handleQuery()
|
||||
}
|
||||
const getList = () => {
|
||||
|
||||
}
|
||||
// 打开申请资质表单
|
||||
const handleOpenApplyForm = () => {
|
||||
router.push('/qualification/escTask/qualificationApplyForm')
|
||||
|
|
|
@ -21,161 +21,259 @@
|
|||
<div class="applyFormContainer">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="目标资质" prop="targetQualification">
|
||||
<el-select v-model="ruleForm.targetQualification" placeholder="请选择目标资质">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-form-item label="目标资质" prop="qualificationId">
|
||||
<el-select v-model="ruleForm.qualificationId" placeholder="请选择目标资质" clearable>
|
||||
<el-option v-for="dict in target_qualification" :key="dict.value"
|
||||
:label="dict.label" :value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="员工工号" prop="employeeNumber">
|
||||
<el-input v-model="ruleForm.employeeNumber" placeholder="请输入员工工号" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="员工姓名(中文)" prop="employeeChineseName">
|
||||
<el-input v-model="ruleForm.employeeChineseName" placeholder="请输入员工姓名(中文)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="员工姓名(英文)" prop="employeeEnglishName">
|
||||
<el-input v-model="ruleForm.employeeEnglishName" placeholder="请输入员工姓名(英文)" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="部门" prop="departmentName">
|
||||
<el-select v-model="ruleForm.departmentName" placeholder="请选择部门">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-form-item label="员工工号" prop="workNo">
|
||||
<el-select v-model="ruleForm.workNo" filterable placeholder="请选择员工工号"
|
||||
@change="selectChanged">
|
||||
<el-option v-for="item in allUsers" :key="item.userId" :label="item.workNo"
|
||||
:value="item.workNo" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="科室" prop="officeName">
|
||||
<el-select v-model="ruleForm.officeName" placeholder="请选择科室">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-form-item label="员工姓名(中文)" prop="nickName">
|
||||
<el-input v-model="ruleForm.nickName" placeholder="请输入员工姓名(中文)" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="员工姓名(英文)" prop="englishName">
|
||||
<el-input v-model="ruleForm.englishName" placeholder="请输入员工姓名(英文)" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-tree-select v-model="ruleForm.deptId" :data="enabledDeptOptions" disabled
|
||||
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
|
||||
placeholder="请选择部门" check-strictly />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="科室" prop="sectionId">
|
||||
<el-select v-model="ruleForm.sectionId" placeholder="请选择科室" disabled>
|
||||
<el-option v-for="item in sectionData" :key="item.sectionId"
|
||||
:label="item.sectionName" :value="item.sectionId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="属地" prop="localityName">
|
||||
<el-select v-model="ruleForm.localityName" placeholder="请选择属地">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-form-item label="属地" prop="dependencyId">
|
||||
<el-select v-model="ruleForm.dependencyId" placeholder="请选择属地" disabled>
|
||||
<el-option v-for="item in busDependencyData" :key="item.id"
|
||||
:label="item.dependencyName" :value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="属地ESC" prop="localityManager">
|
||||
<el-input v-model="ruleForm.localityManager" />
|
||||
<el-form-item label="属地ESC" prop="escUserName">
|
||||
<el-input v-model="ruleForm.escUserName" disabled />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="headerTitle">前置条件</div>
|
||||
<div class="applyFormContainer">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="电工证初领日期" prop="collectionDate">
|
||||
<el-date-picker v-model="ruleForm.collectionDate" type="date"
|
||||
placeholder="请选择电工证初领日期"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="电工证复审日期" prop="reviewDate">
|
||||
<el-date-picker v-model="ruleForm.reviewDate" type="date"
|
||||
placeholder="请选择电工证复审日期"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="电工证状态">
|
||||
<!-- <el-input v-model="ruleForm.employeeNumber" placeholder="请输入员工工号" /> -->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="培训紧迫程度" prop="urgency">
|
||||
<el-radio-group v-model="ruleForm.urgency">
|
||||
<el-radio value="1">紧急</el-radio>
|
||||
<el-radio value="2">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="电工证照片" prop="urgency">
|
||||
<el-upload v-model:file-list="fileList"
|
||||
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
||||
list-type="picture-card" :on-remove="handleRemove">
|
||||
<el-icon>
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="SH资质上传" prop="urgency">
|
||||
<el-upload v-model:file-list="fileList"
|
||||
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
||||
list-type="picture-card" :on-remove="handleRemove">
|
||||
<el-icon>
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="ES资质上传" prop="urgency">
|
||||
<el-upload v-model:file-list="fileList"
|
||||
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
||||
list-type="picture-card" :on-remove="handleRemove">
|
||||
<el-icon>
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="资质申请表单" prop="urgency">
|
||||
<el-upload v-model:file-list="fileList"
|
||||
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
||||
list-type="picture-card" :on-remove="handleRemove">
|
||||
<el-icon>
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="6个月实操经验" prop="urgency">
|
||||
<el-radio-group v-model="ruleForm.urgency">
|
||||
<el-radio value="1">有</el-radio>
|
||||
<el-radio value="2">无</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="实操经验表单" prop="urgency">
|
||||
<el-upload v-model:file-list="fileList"
|
||||
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15"
|
||||
list-type="picture-card" :on-remove="handleRemove">
|
||||
<el-icon>
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<!-- <el-col :span="12"></el-col>
|
||||
<el-col :span="12"></el-col>
|
||||
<el-col :span="12"></el-col>
|
||||
<el-col :span="12"></el-col>
|
||||
<el-col :span="12"></el-col> -->
|
||||
</el-row>
|
||||
|
||||
<div class="headerTitle" v-if="ruleForm.qualificationId">前置条件</div>
|
||||
<div class="applyFormContainer" v-if="ruleForm.qualificationId">
|
||||
<div v-if="ruleForm.qualificationId == 'SH'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证初领日期" prop="beforeCondition.collectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.collectionDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
|
||||
style="width: 100%;" @change="handleCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证复审日期" prop="beforeCondition.reviewDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.reviewDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
|
||||
style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="培训紧迫程度" prop="beforeCondition.urgency">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.urgency">
|
||||
<el-radio value="1">紧急</el-radio>
|
||||
<el-radio value="2">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证照片" prop="beforeCondition.certificatePhoto">
|
||||
<myFileUpload ref="certificatePhotoRef"
|
||||
@set-form-file="handleSetCertificatePhoto" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef"
|
||||
@set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div v-if="ruleForm.qualificationId == 'ES'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证初领日期" prop="beforeCondition.collectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.collectionDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
|
||||
style="width: 100%;" @change="handleCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证复审日期" prop="beforeCondition.reviewDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.reviewDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
|
||||
style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="培训紧迫程度" prop="beforeCondition.urgency">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.urgency">
|
||||
<el-radio value="1">紧急</el-radio>
|
||||
<el-radio value="2">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证照片" prop="beforeCondition.certificatePhoto">
|
||||
<myFileUpload ref="certificatePhotoRef"
|
||||
@set-form-file="handleSetCertificatePhoto" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="SH资质上传" prop="beforeCondition.shFile">
|
||||
<myFileUpload ref="shFileRef" @set-form-file="handleSetShFile" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef"
|
||||
@set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="6个月实操经验" prop="beforeCondition.practicalExperience">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.practicalExperience">
|
||||
<el-radio value="0">无</el-radio>
|
||||
<el-radio value="1">有</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" v-if="ruleForm.beforeCondition.practicalExperience == '1'">
|
||||
<el-form-item label="实操经验表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef"
|
||||
@set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div v-if="ruleForm.qualificationId == 'ESC' || ruleForm.qualificationId == 'CESC'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证初领日期" prop="beforeCondition.collectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.collectionDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
|
||||
style="width: 100%;" @change="handleCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证复审日期" prop="beforeCondition.reviewDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.reviewDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
|
||||
style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="培训紧迫程度" prop="beforeCondition.urgency">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.urgency">
|
||||
<el-radio value="1">紧急</el-radio>
|
||||
<el-radio value="2">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证照片" prop="beforeCondition.certificatePhoto">
|
||||
<myFileUpload ref="certificatePhotoRef"
|
||||
@set-form-file="handleSetCertificatePhoto" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="ES资质上传" prop="beforeCondition.esFile">
|
||||
<myFileUpload ref="esFileRef" @set-form-file="handleSetESFile" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef"
|
||||
@set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div v-if="ruleForm.qualificationId == 'LLP'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="非电池生产线员工/电池生产线员工" prop="beforeCondition.batteryLine">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.batteryLine">
|
||||
<el-radio value="0">非电池生产线员工</el-radio>
|
||||
<el-radio value="1">电池生产线员工</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="具备资质" prop="beforeCondition.hasQualified">
|
||||
<el-checkbox-group v-model="ruleForm.beforeCondition.hasQualified">
|
||||
<el-checkbox v-if="ruleForm.beforeCondition.batteryLine == 1" label="SH"
|
||||
value="SH" />
|
||||
<el-checkbox label="ES" value="ES" />
|
||||
<el-checkbox label="ESC" value="ESC" />
|
||||
<el-checkbox label="CESC" value="CESC" />
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="急救证发证日期" prop="beforeCondition.firstCollectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.firstCollectionDate"
|
||||
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
placeholder="请选择急救证发证日期" style="width: 60%;"
|
||||
@change="handleFirstCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="急救证到期日期" prop="beforeCondition.firstCollectionExpireDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.firstCollectionExpireDate"
|
||||
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
placeholder="请选择急救证到期日期" style="width: 60%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="健康证明" prop="beforeCondition.healthCertificate">
|
||||
<myFileUpload ref="healthCertificateRef"
|
||||
@set-form-file="handleSetHealthCertificate" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="急救证" prop="beforeCondition.firstCertificateFile">
|
||||
<myFileUpload ref="firstCertificateFileRef"
|
||||
@set-form-file="handleSetFirstCertificateFile" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef"
|
||||
@set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</el-form>
|
||||
</el-card>
|
||||
</div>
|
||||
|
@ -187,32 +285,237 @@
|
|||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
|
||||
import { reactive } from 'vue'
|
||||
import { Plus } from '@element-plus/icons-vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { onMounted, reactive, ref } from 'vue'
|
||||
import { deptTreeSelect, listUser } from "@/api/system/user"
|
||||
import { getBusDependencyPage } from "@/api/system/dependency"
|
||||
import { getSysSectionPage } from "@/api/system/section"
|
||||
import { submitBusUserQualification } from "@/api/qualification/myQualifications"
|
||||
import myFileUpload from './myFileUpload.vue'
|
||||
import moment from 'moment'
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const router = useRouter()
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
const { target_qualification } = proxy.useDict("target_qualification")
|
||||
console.log('目标资质', target_qualification)
|
||||
|
||||
const data = reactive({
|
||||
ruleForm: {},
|
||||
ruleForm: {
|
||||
qualificationId: undefined,
|
||||
workNo: undefined,
|
||||
nickName: undefined,
|
||||
englishName: undefined,
|
||||
deptId: undefined,
|
||||
sectionId: undefined,
|
||||
dependencyId: undefined,
|
||||
escUserName: undefined,
|
||||
beforeCondition: {
|
||||
collectionDate: undefined,
|
||||
reviewDate: undefined,
|
||||
urgency: undefined,
|
||||
certificatePhoto: undefined,
|
||||
esFile: undefined,
|
||||
shFile: undefined,
|
||||
practicalExperience: undefined,
|
||||
experienceFile: undefined,
|
||||
batteryLine: '0',
|
||||
hasQualified: [],
|
||||
qualificationForm: undefined,
|
||||
firstCollectionDate: undefined,
|
||||
firstCollectionExpireDate: undefined,
|
||||
healthCertificate: undefined,
|
||||
firstCertificateFile: undefined
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
targetQualification: [{ required: true, message: "目标资质不能为空", trigger: "change" }],
|
||||
employeeNumber: [{ required: true, message: "员工工号不能为空", trigger: "blur" }],
|
||||
employeeChineseName: [{ required: true, message: "员工姓名(中文)不能为空", trigger: "blur" }],
|
||||
employeeEnglishName: [{ required: true, message: "员工姓名(英文)", trigger: "blur" }],
|
||||
departmentName: [{ required: true, message: "部门不能为空", trigger: "change" }],
|
||||
officeName: [{ required: true, message: "科室不能为空", trigger: "change" }],
|
||||
localityName: [{ required: true, message: "属地不能为空", trigger: "change" }],
|
||||
localityManager: [{ required: true, message: "属地ESC不能为空", trigger: "blur" }],
|
||||
qualificationId: [{ required: true, message: "目标资质不能为空", trigger: "change" }],
|
||||
workNo: [{ required: true, message: "员工工号不能为空", trigger: "blur" }],
|
||||
nickName: [{ required: true, message: "员工姓名(中文)不能为空", trigger: "blur" }],
|
||||
englishName: [{ required: true, message: "员工姓名(英文)", trigger: "blur" }],
|
||||
deptId: [{ required: true, message: "部门不能为空", trigger: "change" }],
|
||||
sectionId: [{ required: true, message: "科室不能为空", trigger: "change" }],
|
||||
dependencyId: [{ required: true, message: "属地不能为空", trigger: "change" }],
|
||||
escUserName: [{ required: true, message: "属地ESC不能为空", trigger: "blur" }],
|
||||
beforeCondition: {
|
||||
collectionDate: [
|
||||
{ required: true, message: '电工证初领日期不能为空', trigger: 'change' }
|
||||
],
|
||||
reviewDate: [
|
||||
{ required: true, message: '电工证复审日期不能为空', trigger: 'change' }
|
||||
],
|
||||
urgency: [
|
||||
{ required: true, message: '培训紧迫程度不能为空', trigger: 'change' }
|
||||
],
|
||||
certificatePhoto: [
|
||||
{ required: true, message: '电工证照片不能为空', trigger: 'change' }
|
||||
],
|
||||
esFile: [
|
||||
{ required: true, message: 'ES资质不能为空', trigger: 'change' }
|
||||
],
|
||||
shFile: [
|
||||
{ required: true, message: 'SH资质不能为空', trigger: 'change' }
|
||||
],
|
||||
practicalExperience: [
|
||||
{ required: true, message: '是否有实操经验不能为空', trigger: 'change' }
|
||||
],
|
||||
batteryLine: [
|
||||
{ required: true, message: '请选择', trigger: 'change' }
|
||||
],
|
||||
experienceFile: [
|
||||
{ required: true, message: '实操经验表单不能为空', trigger: 'change' }
|
||||
],
|
||||
hasQualified: [
|
||||
{ required: true, message: '请选择具备资质', trigger: 'change' }
|
||||
],
|
||||
qualificationForm: [
|
||||
{ required: true, message: '资质申请表单不能为空', trigger: 'change' }
|
||||
],
|
||||
firstCollectionDate: [
|
||||
{ required: true, message: '急救证发证日期不能为空', trigger: 'change' }
|
||||
],
|
||||
firstCollectionExpireDate: [
|
||||
{ required: true, message: '急救证到期日期不能为空', trigger: 'change' }
|
||||
],
|
||||
healthCertificate: [
|
||||
{ required: true, message: '健康证明不能为空', trigger: 'change' }
|
||||
],
|
||||
firstCertificateFile: [
|
||||
{ required: true, message: '急救证不能为空', trigger: 'change' }
|
||||
],
|
||||
}
|
||||
},
|
||||
})
|
||||
|
||||
const levelList = ref([
|
||||
{ title: '资质管理', path: '/qualification' },
|
||||
{ title: 'ESC任务', path: '/qualification/escTask' },
|
||||
{ title: '资质申请', path: '/qualification/escTask/qualificationApplyForm' }
|
||||
])
|
||||
|
||||
const { ruleForm, rules } = toRefs(data)
|
||||
|
||||
// 设置电工证照片
|
||||
const handleSetCertificatePhoto = (filePath) => {
|
||||
console.log('接收电工证照片', filePath)
|
||||
ruleForm.value.beforeCondition.certificatePhoto = filePath
|
||||
}
|
||||
// 设置SH资质
|
||||
const handleSetShFile = (filePath) => {
|
||||
ruleForm.value.beforeCondition.shFile = filePath
|
||||
}
|
||||
// 设置ES资质
|
||||
const handleSetESFile = (filePath) => {
|
||||
ruleForm.value.beforeCondition.esFile = filePath
|
||||
}
|
||||
// 设置资质表单路径
|
||||
const handleSetQualificationForm = (filePath) => {
|
||||
console.log('接收资质表单照片', filePath)
|
||||
ruleForm.value.beforeCondition.qualificationForm = filePath
|
||||
}
|
||||
// 设置健康证明
|
||||
const handleSetHealthCertificate = (filePath) => {
|
||||
ruleForm.value.beforeCondition.healthCertificate = filePath
|
||||
}
|
||||
// 设置急救证
|
||||
const handleSetFirstCertificateFile = (filePath) => {
|
||||
ruleForm.value.beforeCondition.firstCertificateFile = filePath
|
||||
}
|
||||
// 电工证初领日期选择
|
||||
const handleCollectionDateChange = (val) => {
|
||||
ruleForm.value.beforeCondition.reviewDate = moment(val).add(3, 'years').format('YYYY-MM-DD')
|
||||
}
|
||||
// 急救证发证日期选择
|
||||
const handleFirstCollectionDateChange = (val) => {
|
||||
ruleForm.value.beforeCondition.firstCollectionExpireDate = moment(val).add(3, 'years').format('YYYY-MM-DD')
|
||||
}
|
||||
|
||||
// 工号选择事件
|
||||
const selectChanged = (value) => {
|
||||
if (value) {
|
||||
const curUser = allUsers.value.find(item => item.workNo == value)
|
||||
console.log('当前用户信息', curUser)
|
||||
//传入UserId 代表是ESC代替员工申请
|
||||
ruleForm.value.userId = curUser.userId;
|
||||
ruleForm.value.workNo = curUser.workNo;
|
||||
ruleForm.value.nickName = curUser.nickName;
|
||||
ruleForm.value.englishName = curUser.englishName;
|
||||
ruleForm.value.deptId = curUser.deptId;
|
||||
ruleForm.value.sectionId = curUser.sectionId;
|
||||
ruleForm.value.dependencyId = curUser.dependencyId;
|
||||
ruleForm.value.escUserName = curUser.escUserName;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
getAllUser()
|
||||
getBusDependencyData()
|
||||
getDeptTree()
|
||||
getSysSectionData()
|
||||
});
|
||||
// 用户数据
|
||||
const allUsers = ref([])
|
||||
// 获取所有用户 ,后期可能替换为当前属地下负责的用户
|
||||
const getAllUser = () => {
|
||||
listUser({
|
||||
pageNum: 1,
|
||||
pageSize: 5000
|
||||
}).then(res => {
|
||||
allUsers.value = res.rows
|
||||
})
|
||||
}
|
||||
|
||||
// 属地数据
|
||||
const busDependencyData = ref([])
|
||||
// 获取属地数据
|
||||
const getBusDependencyData = () => {
|
||||
getBusDependencyPage({
|
||||
pageIndex: 1,
|
||||
pageSize: 100,
|
||||
}).then(response => {
|
||||
if (response.code == 200) {
|
||||
busDependencyData.value = response.data.list
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 部门数据
|
||||
const enabledDeptOptions = ref(undefined)
|
||||
// 获取部门数据
|
||||
const getDeptTree = () => {
|
||||
deptTreeSelect().then(res => {
|
||||
enabledDeptOptions.value = filterDisabledDept(JSON.parse(JSON.stringify(res.data)))
|
||||
})
|
||||
}
|
||||
/** 过滤禁用的部门 */
|
||||
const filterDisabledDept = (deptList) => {
|
||||
return deptList.filter(dept => {
|
||||
if (dept.disabled) {
|
||||
return false
|
||||
}
|
||||
if (dept.children && dept.children.length) {
|
||||
dept.children = filterDisabledDept(dept.children)
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
// 科室数据
|
||||
const sectionData = ref([])
|
||||
// 获取科室数据
|
||||
const getSysSectionData = () => {
|
||||
getSysSectionPage({
|
||||
pageIndex: 1,
|
||||
pageSize: 100,
|
||||
}).then(res => {
|
||||
if (res.code == 200) {
|
||||
sectionData.value = res.data.list
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const handleCancel = () => {
|
||||
proxy.resetForm("ruleFormRef")
|
||||
router.push('/qualification/escTask')
|
||||
|
@ -220,22 +523,18 @@ const handleCancel = () => {
|
|||
const handleSubmit = () => {
|
||||
proxy.$refs["ruleFormRef"].validate(valid => {
|
||||
if (valid) {
|
||||
router.push('/qualification/escTask')
|
||||
// if (form.value.roleId != undefined) {
|
||||
// form.value.menuIds = getMenuAllCheckedKeys()
|
||||
// updateRole(form.value).then(response => {
|
||||
// proxy.$modal.msgSuccess("修改成功")
|
||||
// open.value = false
|
||||
// getList()
|
||||
// })
|
||||
// } else {
|
||||
// form.value.menuIds = getMenuAllCheckedKeys()
|
||||
// addRole(form.value).then(response => {
|
||||
// proxy.$modal.msgSuccess("新增成功")
|
||||
// open.value = false
|
||||
// getList()
|
||||
// })
|
||||
// }
|
||||
|
||||
const submitForm = ruleForm.value
|
||||
submitForm.beforeCondition = JSON.stringify(ruleForm.value.beforeCondition)
|
||||
// submitForm.node = 0
|
||||
submitBusUserQualification(submitForm).then(res => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess("提交成功")
|
||||
router.push('/qualification/escTask')
|
||||
} else {
|
||||
proxy.$modal.msgSuccess(res.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -319,6 +618,10 @@ const handleSubmit = () => {
|
|||
padding: 20px 20px 0 20px !important;
|
||||
}
|
||||
|
||||
.el-card.is-always-shadow {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.headerTitle {
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 700;
|
||||
|
@ -410,6 +713,13 @@ const handleSubmit = () => {
|
|||
color: #000000;
|
||||
}
|
||||
|
||||
.el-checkbox__label {
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.el-form-item__error {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
|
|
@ -3,13 +3,9 @@
|
|||
<el-row class="myRow">
|
||||
<el-col :span="20">
|
||||
<el-form-item label="员工姓名" prop="userName">
|
||||
<el-input v-model="queryParams.userName" placeholder="请输入员工姓名" clearable style="width: 160px"
|
||||
@keyup.enter="handleQuery" />
|
||||
</el-form-item>
|
||||
<el-form-item label="部门" prop="deptId">
|
||||
<el-select v-model="queryParams.deptId" placeholder="请选择部门" clearable style="width: 160px">
|
||||
<el-option label="Zone one" value="shanghai" />
|
||||
<el-option label="Zone two" value="beijing" />
|
||||
<el-select v-model="queryParams.userId" filterable placeholder="请选择员工" @change="selectChanged">
|
||||
<el-option v-for="item in allUsers" :key="item.userId" :label="item.nickName"
|
||||
:value="item.userId" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
@ -17,122 +13,227 @@
|
|||
<el-button type="primary" class="seachBtn" @click="handleQuery">查询</el-button>
|
||||
<el-button class="resetBtn" @click="resetQuery">重置</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div class="borderLine"></div>
|
||||
<el-table :data="tableData" style="width: 100%">
|
||||
<el-table-column prop="name" label="资质名称" width="100" />
|
||||
<el-table-column prop="certificate" label="资质证书" align="center">
|
||||
<el-table v-loading="loading" :data="tableData" style="width: 100%">
|
||||
<el-table-column prop="qualificationName" label="资质名称" width="100" />
|
||||
<el-table-column prop="certificateUrl" label="资质证书" align="center">
|
||||
<template #default="scope">
|
||||
<el-image v-if="scope.row.certificate" style="width: 70px; height: 44px;line-height: 50px;"
|
||||
:src="scope.row.certificate" fit="fill" />
|
||||
<el-image v-if="scope.row.certificateUrl" style="width: 70px; height: 44px;line-height: 50px;"
|
||||
:src="baseUrl + scope.row.certificateUrl" fit="fill" />
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="expired" label="是否过期" width="120">
|
||||
<el-table-column prop="status" label="是否过期" width="120">
|
||||
<template #default="scope">
|
||||
<el-text v-if="scope.row.expired == false && scope.row.certificate" type="success"
|
||||
<el-text v-if="scope.row.status == 1 && scope.row.certificateUrl" type="success"
|
||||
class="successText">正常</el-text>
|
||||
<el-text v-if="scope.row.expired == true && scope.row.certificate" type="danger"
|
||||
<el-text v-else-if="scope.row.status == 2 && scope.row.certificateUrl" type="danger"
|
||||
class="dangerText">过期</el-text>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="startTime" label="有效开始日期" width="150">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.startTime && scope.row.certificate"> {{ scope.row.startTime }}</span>
|
||||
<span v-if="scope.row.startTime"> {{ moment(scope.row.startTime).format('YYYY-MM-DD') }}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="expireTime" label="到期日期" width="130">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.expireTime && scope.row.certificate"> {{ scope.row.expireTime }}</span>
|
||||
<span v-else>-</span>
|
||||
<span v-if="scope.row.expireFlag == 0">长期</span>
|
||||
<template v-else>
|
||||
<span v-if="scope.row.expireTime"> {{ moment(scope.row.startTime).format('YYYY-MM-DD') }}</span>
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="100" align="center">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" text class="editTextBtn">编辑</el-button>
|
||||
<el-button type="primary" text class="editTextBtn" @click="handleEdit(scope.row)">编辑</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-dialog :title="title" v-model="open" width="800px" append-to-body>
|
||||
<el-form ref="postRef" :model="form" :rules="rules" label-width="150px">
|
||||
<el-form-item label="证书名称" prop="factoryArea">
|
||||
<el-input v-model="form.qualificationName" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="上传证书" prop="certificateUrl">
|
||||
<el-upload action='#' :http-request="requestUpload" list-type="picture-card" :file-list="fileList"
|
||||
:on-change="handleChange" :before-upload="beforeUpload">
|
||||
<Plus class="myIcon" />
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="有效开始日期" prop="startTime">
|
||||
<el-date-picker v-model="form.startTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
placeholder="请选择有效开始日期" style="width: 100%;" />
|
||||
</el-form-item>
|
||||
<el-form-item label="到期日期" :prop="form.expireFlag == 1 ? 'expireTime' : ''">
|
||||
<el-date-picker v-model="form.expireTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
|
||||
placeholder="请选择到期日期" style="width: 100%;" @change="handleDateChange" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button type="primary" @click="submitForm">确 定</el-button>
|
||||
<el-button @click="cancel">取 消</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
<script setup>
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { Plus } from '@element-plus/icons-vue'
|
||||
import moment from 'moment'
|
||||
import { listUser } from "@/api/system/user"
|
||||
import { getUserCertificateList, getCurrentCertificateDetail, uploadFile, updateCurrentCertificate } from "@/api/qualification/myQualifications"
|
||||
import useUserStore from '@/store/modules/user'
|
||||
|
||||
const userStore = useUserStore()
|
||||
console.log(userStore.id)
|
||||
const queryParams = ref({
|
||||
pageNum: 1,
|
||||
pageIndex: 1,
|
||||
pageSize: 10,
|
||||
userName: undefined,
|
||||
deptId: undefined,
|
||||
qualification: undefined
|
||||
userId: undefined,
|
||||
})
|
||||
const tableData = [
|
||||
{
|
||||
name: '电工证',
|
||||
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
|
||||
expired: false,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
{
|
||||
name: 'SH',
|
||||
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
|
||||
expired: false,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
{
|
||||
name: 'ES',
|
||||
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
|
||||
expired: false,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
{
|
||||
name: 'ESC',
|
||||
certificate: null,
|
||||
expired: null,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
{
|
||||
name: 'CESC',
|
||||
certificate: null,
|
||||
expired: null,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
{
|
||||
name: '急救证',
|
||||
certificate: null,
|
||||
expired: null,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
{
|
||||
name: 'LLP',
|
||||
certificate: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
|
||||
expired: true,
|
||||
startTime: '2016-05-03',
|
||||
expireTime: '2019-05-03',
|
||||
},
|
||||
]
|
||||
const loading = ref(true)
|
||||
const tableData = ref([])
|
||||
const open = ref(false)
|
||||
const title = ref("")
|
||||
const form = ref({})
|
||||
const rules = ref({
|
||||
certificateUrl: [{ required: true, message: "请上传资质证书照片" }],
|
||||
startTime: [{ required: true, message: "请选择有效开始日期", trigger: "change" }],
|
||||
expireTime: [{ required: true, message: "请选择到期日期", trigger: "change" }],
|
||||
})
|
||||
const fileList = ref([])
|
||||
const baseUrl = import.meta.env.VITE_APP_BASE_API
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
getAllUser();
|
||||
});
|
||||
// 用户数据
|
||||
const allUsers = ref([])
|
||||
// 获取所有用户
|
||||
const getAllUser = () => {
|
||||
listUser({
|
||||
pageNum: 1,
|
||||
pageSize: 5000
|
||||
}).then(res => {
|
||||
allUsers.value = res.rows
|
||||
queryParams.value.userId = userStore.id
|
||||
getUserQualification();
|
||||
})
|
||||
}
|
||||
const getUserQualification = () => {
|
||||
loading.value = true
|
||||
getUserCertificateList(queryParams.value).then(res => {
|
||||
if (res.code == 200) tableData.value = res.data
|
||||
loading.value = false
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
})
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
const handleQuery = () => {
|
||||
queryParams.value.pageNum = 1
|
||||
getList()
|
||||
queryParams.value.pageIndex = 1
|
||||
getUserQualification()
|
||||
}
|
||||
|
||||
/** 重置按钮操作 */
|
||||
const resetQuery = () => {
|
||||
dateRange.value = []
|
||||
queryParams.value.userId = userStore.id
|
||||
proxy.resetForm("queryRef")
|
||||
queryParams.value.deptId = undefined
|
||||
proxy.$refs.deptTreeRef.setCurrentKey(null)
|
||||
handleQuery()
|
||||
}
|
||||
const getList = () => {
|
||||
|
||||
const handleDateChange = (val) => {
|
||||
if (val) form.value.expireFlag = 1
|
||||
else form.value.expireFlag = 0
|
||||
};
|
||||
/** 取消按钮 */
|
||||
const cancel = () => {
|
||||
open.value = false
|
||||
reset()
|
||||
}
|
||||
/** 表单重置 */
|
||||
const reset = () => {
|
||||
form.value = {
|
||||
id: undefined,
|
||||
certificateUrl: undefined,
|
||||
startTime: undefined,
|
||||
expireTime: undefined,
|
||||
expireFlag: 1
|
||||
}
|
||||
proxy.resetForm("postRef")
|
||||
}
|
||||
/** 提交按钮 */
|
||||
function submitForm() {
|
||||
proxy.$refs["postRef"].validate(valid => {
|
||||
if (valid) {
|
||||
if (form.value.id != undefined) {
|
||||
if (form.value.expireTime) form.value.expireFlag = 1
|
||||
else form.value.expireFlag = 0
|
||||
updateCurrentCertificate(form.value).then(response => {
|
||||
proxy.$modal.msgSuccess("修改成功")
|
||||
open.value = false
|
||||
getUserQualification()
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
const handleEdit = (record) => {
|
||||
reset()
|
||||
getCurrentCertificateDetail(record.id).then(res => {
|
||||
form.value = res.data
|
||||
if (form.value.expireTime) form.value.expireFlag = 1 // 默认值
|
||||
else form.value.expireFlag = 0
|
||||
form.value.qualificationName = record.qualificationName
|
||||
if (res.data.certificateUrl) fileList.value = [{ url: baseUrl + res.data.certificateUrl }]
|
||||
else fileList.value = []
|
||||
open.value = true
|
||||
title.value = "编辑"
|
||||
})
|
||||
}
|
||||
//自定义上传logo文件
|
||||
const requestUpload = (options) => {
|
||||
const { file } = options
|
||||
var formData = new FormData();
|
||||
formData.append('file', file);
|
||||
uploadFile(formData).then(res => {
|
||||
if (res.code == 200) {
|
||||
fileList.value = [{ name: res.originalFilename, url: baseUrl + res.fileName }]
|
||||
form.value.certificateUrl = res.fileName
|
||||
}
|
||||
})
|
||||
}
|
||||
//自定义上传logo校验
|
||||
const beforeUpload = (file) => {
|
||||
const type = ["image/jpeg", "image/jpg", "image/png"];
|
||||
const isJPG = type.includes(file.type);
|
||||
// 检验文件格式
|
||||
if (!isJPG) {
|
||||
proxy.$modal.msgError("文件格式错误,请上传图片类型,如:JPG,jpeg,PNG后缀的文件。");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const handleChange = (file, fileList) => {
|
||||
fileList.value = []
|
||||
}
|
||||
</script>
|
||||
<style lang='scss'>
|
||||
.myIcon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.editTextBtn {
|
||||
color: #0090ff;
|
||||
font-weight: 400;
|
||||
|
@ -154,6 +255,7 @@ const getList = () => {
|
|||
font-size: 18px;
|
||||
color: #E13434;
|
||||
}
|
||||
|
||||
.el-form-item__label {
|
||||
font-family: Microsoft YaHei;
|
||||
font-weight: 400;
|
||||
|
|
206
src/views/qualification/escTask/components/myFileUpload.vue
Normal file
206
src/views/qualification/escTask/components/myFileUpload.vue
Normal file
|
@ -0,0 +1,206 @@
|
|||
<template>
|
||||
<div>
|
||||
<el-upload action="#" :http-request="requestUpload" list-type="picture-card" :file-list="fileList"
|
||||
:on-change="handleChange" :show-file-list="false" :before-upload="beforeUpload" :limit="1">
|
||||
<div v-if="fileList.length > 0 && fileList[0].url" class="image-wrapper">
|
||||
<img v-if="isImageFile(fileList[0].suffix)" :src="fileList[0].url" class="avatar viewFile"
|
||||
@click.stop="handleCardPreview(fileList[0].url, fileList[0].suffix)" />
|
||||
<img v-else :src="pdfIcon" class="avatar viewFile"
|
||||
@click.stop="handleCardPreview(fileList[0].url, fileList[0].suffix)" />
|
||||
<div class="actions">
|
||||
<span class="delete" @click.stop="handleRemoveImage">
|
||||
<el-icon>
|
||||
<Delete />
|
||||
</el-icon>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<el-icon v-else class="avatar-uploader-icon">
|
||||
<Plus />
|
||||
</el-icon>
|
||||
</el-upload>
|
||||
|
||||
<!-- 图片预览 -->
|
||||
<el-dialog v-model="dialogVisible" title="图片预览">
|
||||
<img v-if="isImageFile(suffix)" :src="dialogImageUrl" class="preview-image" alt="Preview Image" />
|
||||
<div v-else class="unsupported-file">
|
||||
<pdf-preview :pdf-url="dialogImageUrl" />
|
||||
</div>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { Plus, Delete } from '@element-plus/icons-vue'
|
||||
import { uploadFile } from "@/api/qualification/myQualifications"
|
||||
import pdfIcon from '@/assets/images/pdfIcon.png'
|
||||
import PdfPreview from './PdfPreview.vue'
|
||||
|
||||
const { proxy } = getCurrentInstance()
|
||||
const emit = defineEmits(['setFormFile'])
|
||||
|
||||
// 文件列表初始化
|
||||
const fileList = ref([])
|
||||
const baseUrl = import.meta.env.VITE_APP_BASE_API
|
||||
const dialogImageUrl = ref('')
|
||||
const dialogVisible = ref(false)
|
||||
const suffix = ref('')
|
||||
|
||||
// 判断是否为图片文件
|
||||
const isImageFile = (suffix) => {
|
||||
return ['jpeg', 'jpg', 'png'].includes(suffix?.toLowerCase())
|
||||
}
|
||||
|
||||
// 图片预览
|
||||
const handleCardPreview = (filePath, _suffix) => {
|
||||
suffix.value = _suffix
|
||||
dialogImageUrl.value = filePath
|
||||
dialogVisible.value = true
|
||||
}
|
||||
|
||||
// 删除图片
|
||||
const handleRemoveImage = () => {
|
||||
fileList.value = []
|
||||
emit('setFormFile', null)
|
||||
}
|
||||
|
||||
// 自定义上传
|
||||
const requestUpload = async (options) => {
|
||||
const { file } = options
|
||||
const formData = new FormData()
|
||||
formData.append('file', file)
|
||||
|
||||
try {
|
||||
const res = await uploadFile(formData)
|
||||
if (res.code === 200) {
|
||||
fileList.value = [{
|
||||
name: res.originalFilename,
|
||||
url: baseUrl + res.fileName,
|
||||
suffix: res.suffix
|
||||
}]
|
||||
emit('setFormFile', res.fileName)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('上传失败:', error)
|
||||
}
|
||||
}
|
||||
|
||||
// 文件类型校验
|
||||
const beforeUpload = (file) => {
|
||||
const validTypes = [
|
||||
// 图片类型
|
||||
"image/jpeg",
|
||||
"image/jpg",
|
||||
"image/png",
|
||||
// PDF 类型
|
||||
"application/pdf",
|
||||
"application/x-pdf",
|
||||
"application/acrobat",
|
||||
"applications/vnd.pdf",
|
||||
"text/pdf",
|
||||
"text/x-pdf"]
|
||||
const isValidType = validTypes.includes(file.type)
|
||||
// const isLt5M = file.size / 1024 / 1024 < 5
|
||||
|
||||
if (!isValidType) {
|
||||
proxy.$modal.msgError("文件格式错误,请上传 JPG/JPEG/PNG/PDF 后缀的文件。");
|
||||
return false
|
||||
}
|
||||
|
||||
// if (!isLt5M) {
|
||||
// proxy.$modal.msgError("文件大小不能超过5MB");
|
||||
// return false
|
||||
// }
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
// 文件变化处理
|
||||
const handleChange = (file, files) => {
|
||||
// 可以在这里添加文件变化时的额外处理逻辑
|
||||
// 不需要清空 fileList,因为上传逻辑会处理
|
||||
fileList.value = []
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.viewFile {
|
||||
width: 148px;
|
||||
height: 148px;
|
||||
border: 1px solid #dedede;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.upload-container {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.image-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.actions {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
display: none;
|
||||
}
|
||||
|
||||
:deep(.el-upload--picture-card) {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
||||
.image-wrapper:hover .actions {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.delete {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
color: white;
|
||||
border-radius: 50%;
|
||||
cursor: pointer;
|
||||
margin: 5px;
|
||||
transition: background 0.3s;
|
||||
|
||||
&:hover {
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
}
|
||||
}
|
||||
|
||||
.preview-image {
|
||||
width: 100%;
|
||||
max-height: 70vh;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
.unsupported-file {
|
||||
padding: 0px;
|
||||
text-align: center;
|
||||
color: #999;
|
||||
height: 70vh;
|
||||
}
|
||||
|
||||
|
||||
.myIcon {
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
color: #d2d2d2;
|
||||
}
|
||||
</style>
|
|
@ -7,27 +7,27 @@
|
|||
</el-button>
|
||||
</div>
|
||||
<div class="borderLine"></div>
|
||||
<el-table v-loading="loading" :data="tableData" height="calc(100% - 170px)" style="width: 100%">
|
||||
<el-table v-loading="loading" :data="tableData" height="calc(100vh - 332px)" style="width: 100%">
|
||||
<el-table-column label="序号" width="60">
|
||||
<template #default="scope">
|
||||
{{ scope.$index + 1 }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="jobNumber" label="工号" />
|
||||
<el-table-column prop="name" label="员工姓名" />
|
||||
<el-table-column prop="curQualification" label="当前资质" />
|
||||
<el-table-column prop="objectiveQualification" label="目标资质" />
|
||||
<el-table-column prop="status" label="状态" width="120">
|
||||
<el-table-column prop="workNo" label="工号" />
|
||||
<el-table-column prop="userName" label="员工姓名" />
|
||||
<el-table-column prop="sourceQualificationName" label="当前资质" />
|
||||
<el-table-column prop="qualificationName" label="目标资质" />
|
||||
<el-table-column prop="state" label="状态" width="120">
|
||||
<template #default="scope">
|
||||
<el-text v-if="scope.row.status == 0" type="info" class="infoinfoText">待审核</el-text>
|
||||
<el-text v-if="scope.row.status == 1" type="success" class="successText">通过</el-text>
|
||||
<el-text v-if="scope.row.status == 2" type="danger" class="dangerText">驳回</el-text>
|
||||
<el-text v-if="scope.row.state == 1" type="info" class="infoinfoText">待审核</el-text>
|
||||
<el-text v-if="scope.row.state == 2" type="success" class="successText">通过</el-text>
|
||||
<el-text v-if="scope.row.state == 9" type="danger" class="dangerText">驳回</el-text>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template #default="scope">
|
||||
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.status != 1">重新申请</el-button>
|
||||
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.status != 1" />
|
||||
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state != 1">重新申请</el-button>
|
||||
<el-divider direction="vertical" class="verticalLine" v-if="scope.row.state != 1" />
|
||||
<el-button type="primary" text class="deleteTextBtn">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -41,7 +41,7 @@
|
|||
import { onMounted, ref } from 'vue'
|
||||
import applyIcon from '@/assets/images/applyIcon.png'
|
||||
import QualificationApplyForm from './QualificationApplyForm.vue'
|
||||
import { getBusUserQualification } from "@/api/qualification/myQualifications"
|
||||
import { getCurUserQualification } from "@/api/qualification/myQualifications"
|
||||
|
||||
const isShowForm = ref(false)
|
||||
const queryParams = ref({
|
||||
|
@ -50,18 +50,21 @@ const queryParams = ref({
|
|||
node: 0
|
||||
})
|
||||
const loading = ref(true)
|
||||
const title = ref("")
|
||||
const total = ref("")
|
||||
const tableData = ref([])
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
getBusUserQualificationPageList();
|
||||
getCurUserQualificationPageList();
|
||||
});
|
||||
|
||||
const getBusUserQualificationPageList = () => {
|
||||
const getCurUserQualificationPageList = () => {
|
||||
loading.value = true
|
||||
getBusUserQualification(queryParams.value).then(res => {
|
||||
getCurUserQualification(queryParams.value).then(res => {
|
||||
console.log('资质申请结论', res)
|
||||
if (res.code == 200) tableData.value = res.data
|
||||
if (res.code == 200) {
|
||||
tableData.value = res.data.list
|
||||
total.value = res.data.total
|
||||
}
|
||||
loading.value = false
|
||||
}).catch(() => {
|
||||
loading.value = false
|
||||
|
@ -74,6 +77,7 @@ const handleOpenApplyForm = () => {
|
|||
// 表单操作回调
|
||||
const reloadList = () => {
|
||||
isShowForm.value = false
|
||||
getCurUserQualificationPageList();
|
||||
}
|
||||
</script>
|
||||
<style lang='scss'>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<el-col :span="8">
|
||||
<el-form-item label="目标资质" prop="qualificationId">
|
||||
<el-select v-model="ruleForm.qualificationId" placeholder="请选择目标资质" clearable>
|
||||
<el-option v-for="dict in bus_qualification" :key="dict.value" :label="dict.label"
|
||||
<el-option v-for="dict in target_qualification" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
@ -58,9 +58,9 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div class="headerTitle">前置条件</div>
|
||||
<div class="applyFormContainer">
|
||||
<div v-if="ruleForm.sourceQualificationId == '2'">
|
||||
<div class="headerTitle" v-if="ruleForm.qualificationId">前置条件</div>
|
||||
<div class="applyFormContainer" v-if="ruleForm.qualificationId">
|
||||
<div v-if="ruleForm.qualificationId == 'SH'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证初领日期" prop="beforeCondition.collectionDate">
|
||||
|
@ -96,8 +96,153 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
|
||||
<div v-if="ruleForm.qualificationId == 'ES'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证初领日期" prop="beforeCondition.collectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.collectionDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
|
||||
style="width: 100%;" @change="handleCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证复审日期" prop="beforeCondition.reviewDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.reviewDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
|
||||
style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="培训紧迫程度" prop="beforeCondition.urgency">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.urgency">
|
||||
<el-radio value="1">紧急</el-radio>
|
||||
<el-radio value="2">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证照片" prop="beforeCondition.certificatePhoto">
|
||||
<myFileUpload ref="certificatePhotoRef" @set-form-file="handleSetCertificatePhoto" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="SH资质上传" prop="beforeCondition.shFile">
|
||||
<myFileUpload ref="shFileRef" @set-form-file="handleSetShFile" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef" @set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="6个月实操经验" prop="beforeCondition.practicalExperience">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.practicalExperience">
|
||||
<el-radio value="0">无</el-radio>
|
||||
<el-radio value="1">有</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" v-if="ruleForm.beforeCondition.practicalExperience == '1'">
|
||||
<el-form-item label="实操经验表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef" @set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div v-if="ruleForm.qualificationId == 'ESC' || ruleForm.qualificationId == 'CESC'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证初领日期" prop="beforeCondition.collectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.collectionDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
|
||||
style="width: 100%;" @change="handleCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证复审日期" prop="beforeCondition.reviewDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.reviewDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
|
||||
style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="培训紧迫程度" prop="beforeCondition.urgency">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.urgency">
|
||||
<el-radio value="1">紧急</el-radio>
|
||||
<el-radio value="2">一般</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="电工证照片" prop="beforeCondition.certificatePhoto">
|
||||
<myFileUpload ref="certificatePhotoRef" @set-form-file="handleSetCertificatePhoto" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="ES资质上传" prop="beforeCondition.esFile">
|
||||
<myFileUpload ref="esFileRef" @set-form-file="handleSetESFile" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef" @set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
<div v-if="ruleForm.qualificationId == 'LLP'">
|
||||
<el-row class="myRow" :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="非电池生产线员工/电池生产线员工" prop="beforeCondition.batteryLine">
|
||||
<el-radio-group v-model="ruleForm.beforeCondition.batteryLine">
|
||||
<el-radio value="0">非电池生产线员工</el-radio>
|
||||
<el-radio value="1">电池生产线员工</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="具备资质" prop="beforeCondition.hasQualified">
|
||||
<el-checkbox-group v-model="ruleForm.beforeCondition.hasQualified">
|
||||
<el-checkbox v-if="ruleForm.beforeCondition.batteryLine == '1'" label="SH" value="SH" />
|
||||
<el-checkbox label="ES" value="ES" />
|
||||
<el-checkbox label="ESC" value="ESC" />
|
||||
<el-checkbox label="CESC" value="CESC" />
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="急救证发证日期" prop="beforeCondition.firstCollectionDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.firstCollectionDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择急救证发证日期"
|
||||
style="width: 100%;" @change="handleFirstCollectionDateChange" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="急救证到期日期" prop="beforeCondition.firstCollectionExpireDate">
|
||||
<el-date-picker v-model="ruleForm.beforeCondition.firstCollectionExpireDate" type="date"
|
||||
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择急救证到期日期"
|
||||
style="width: 100%;" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="健康证明" prop="beforeCondition.healthCertificate">
|
||||
<myFileUpload ref="healthCertificateRef" @set-form-file="handleSetHealthCertificate" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="急救证" prop="beforeCondition.firstCertificateFile">
|
||||
<myFileUpload ref="firstCertificateFileRef"
|
||||
@set-form-file="handleSetFirstCertificateFile" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="资质申请表单" prop="beforeCondition.qualificationForm">
|
||||
<myFileUpload ref="qualificationFormRef" @set-form-file="handleSetQualificationForm" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
|
@ -119,9 +264,36 @@ import moment from 'moment'
|
|||
|
||||
const emit = defineEmits(['refresh'])
|
||||
const { proxy } = getCurrentInstance()
|
||||
const { bus_qualification } = proxy.useDict("bus_qualification")
|
||||
const { target_qualification } = proxy.useDict("target_qualification")
|
||||
console.log('目标资质', target_qualification)
|
||||
const data = reactive({
|
||||
ruleForm: {},
|
||||
ruleForm: {
|
||||
qualificationId: undefined,
|
||||
workNo: undefined,
|
||||
nickName: undefined,
|
||||
englishName: undefined,
|
||||
deptId: undefined,
|
||||
sectionId: undefined,
|
||||
dependencyId: undefined,
|
||||
escUserName: undefined,
|
||||
beforeCondition: {
|
||||
collectionDate: undefined,
|
||||
reviewDate: undefined,
|
||||
urgency: undefined,
|
||||
certificatePhoto: undefined,
|
||||
esFile: undefined,
|
||||
shFile: undefined,
|
||||
practicalExperience: undefined,
|
||||
experienceFile: undefined,
|
||||
batteryLine: '0',
|
||||
hasQualified: [],
|
||||
qualificationForm: undefined,
|
||||
firstCollectionDate: undefined,
|
||||
firstCollectionExpireDate: undefined,
|
||||
healthCertificate: undefined,
|
||||
firstCertificateFile: undefined
|
||||
}
|
||||
},
|
||||
rules: {
|
||||
qualificationId: [{ required: true, message: "目标资质不能为空", trigger: "change" }],
|
||||
workNo: [{ required: true, message: "员工工号不能为空", trigger: "blur" }],
|
||||
|
@ -144,9 +316,39 @@ const data = reactive({
|
|||
certificatePhoto: [
|
||||
{ required: true, message: '电工证照片不能为空', trigger: 'change' }
|
||||
],
|
||||
esFile: [
|
||||
{ required: true, message: 'ES资质不能为空', trigger: 'change' }
|
||||
],
|
||||
shFile: [
|
||||
{ required: true, message: 'SH资质不能为空', trigger: 'change' }
|
||||
],
|
||||
practicalExperience: [
|
||||
{ required: true, message: '是否有实操经验不能为空', trigger: 'change' }
|
||||
],
|
||||
batteryLine: [
|
||||
{ required: true, message: '请选择', trigger: 'change' }
|
||||
],
|
||||
experienceFile: [
|
||||
{ required: true, message: '实操经验表单不能为空', trigger: 'change' }
|
||||
],
|
||||
hasQualified: [
|
||||
{ required: true, message: '请选择具备资质', trigger: 'change' }
|
||||
],
|
||||
qualificationForm: [
|
||||
{ required: true, message: '资质申请表单不能为空', trigger: 'change' }
|
||||
]
|
||||
],
|
||||
firstCollectionDate: [
|
||||
{ required: true, message: '急救证发证日期不能为空', trigger: 'change' }
|
||||
],
|
||||
firstCollectionExpireDate: [
|
||||
{ required: true, message: '急救证到期日期不能为空', trigger: 'change' }
|
||||
],
|
||||
healthCertificate: [
|
||||
{ required: true, message: '健康证明不能为空', trigger: 'change' }
|
||||
],
|
||||
firstCertificateFile: [
|
||||
{ required: true, message: '急救证不能为空', trigger: 'change' }
|
||||
],
|
||||
}
|
||||
},
|
||||
})
|
||||
|
@ -156,16 +358,35 @@ const handleSetCertificatePhoto = (filePath) => {
|
|||
console.log('接收电工证照片', filePath)
|
||||
ruleForm.value.beforeCondition.certificatePhoto = filePath
|
||||
}
|
||||
// 设置SH资质
|
||||
const handleSetShFile = (filePath) => {
|
||||
ruleForm.value.beforeCondition.shFile = filePath
|
||||
}
|
||||
// 设置ES资质
|
||||
const handleSetESFile = (filePath) => {
|
||||
ruleForm.value.beforeCondition.esFile = filePath
|
||||
}
|
||||
// 设置资质表单路径
|
||||
const handleSetQualificationForm = (filePath) => {
|
||||
console.log('接收资质表单照片', filePath)
|
||||
ruleForm.value.beforeCondition.qualificationForm = filePath
|
||||
}
|
||||
|
||||
// 设置健康证明
|
||||
const handleSetHealthCertificate = (filePath) => {
|
||||
ruleForm.value.beforeCondition.healthCertificate = filePath
|
||||
}
|
||||
// 设置急救证
|
||||
const handleSetFirstCertificateFile = (filePath) => {
|
||||
ruleForm.value.beforeCondition.firstCertificateFile = filePath
|
||||
}
|
||||
// 电工证初领日期选择
|
||||
const handleCollectionDateChange = (val) => {
|
||||
ruleForm.value.beforeCondition.reviewDate = moment(val).add(3, 'years').format('YYYY-MM-DD')
|
||||
}
|
||||
// 急救证发证日期选择
|
||||
const handleFirstCollectionDateChange = (val) => {
|
||||
ruleForm.value.beforeCondition.firstCollectionExpireDate = moment(val).add(3, 'years').format('YYYY-MM-DD')
|
||||
}
|
||||
|
||||
// 初始化
|
||||
onMounted(() => {
|
||||
|
@ -179,30 +400,13 @@ const getUserInfos = () => {
|
|||
getUserInfo().then(response => {
|
||||
console.log('用户详情', response)
|
||||
if (response.code == 200) {
|
||||
ruleForm.value = {
|
||||
sourceQualificationId: undefined,
|
||||
workNo: response.data.workNo,
|
||||
nickName: response.data.nickName,
|
||||
englishName: response.data.englishName,
|
||||
deptId: response.data.deptId,
|
||||
sectionId: response.data.sectionId,
|
||||
dependencyId: response.data.dependencyId,
|
||||
escUserName: response.data.escUserName,
|
||||
beforeCondition: {
|
||||
// 电工证初领日期
|
||||
collectionDate: null,
|
||||
// 电工证复审日期
|
||||
reviewDate: null,
|
||||
// 电工证状态
|
||||
certificateStatus: null,
|
||||
// 培训紧迫程度
|
||||
urgency: null,
|
||||
// 电工证照片
|
||||
certificatePhoto: null,
|
||||
// 资质申请表单
|
||||
qualificationForm: null
|
||||
}
|
||||
}
|
||||
ruleForm.value.workNo = response.data.workNo
|
||||
ruleForm.value.nickName = response.data.nickName
|
||||
ruleForm.value.englishName = response.data.englishName
|
||||
ruleForm.value.deptId = response.data.deptId
|
||||
ruleForm.value.sectionId = response.data.sectionId
|
||||
ruleForm.value.dependencyId = response.data.dependencyId
|
||||
ruleForm.value.escUserName = response.data.escUserName
|
||||
}
|
||||
})
|
||||
}
|
||||
|
@ -264,13 +468,16 @@ const handleSubmit = () => {
|
|||
proxy.$refs["ruleFormRef"].validate(valid => {
|
||||
if (valid) {
|
||||
console.log('bioa', ruleForm.value)
|
||||
ruleForm.value.beforeCondition = JSON.stringify(ruleForm.value.beforeCondition)
|
||||
ruleForm.value.node = 0
|
||||
submitBusUserQualification(ruleForm.value).then(res => {
|
||||
const submitForm = ruleForm.value
|
||||
submitForm.beforeCondition = JSON.stringify(ruleForm.value.beforeCondition)
|
||||
// submitForm.node = 0
|
||||
submitBusUserQualification(submitForm).then(res => {
|
||||
if (res.code == 200) {
|
||||
proxy.$modal.msgSuccess("提交成功")
|
||||
emit('refresh')
|
||||
} else proxy.$modal.msgSuccess(res.msg)
|
||||
} else {
|
||||
proxy.$modal.msgSuccess(res.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
@ -375,7 +582,12 @@ const handleSubmit = () => {
|
|||
text-align: left;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.el-checkbox__label {
|
||||
font-weight: 400;
|
||||
font-size: 18px;
|
||||
text-align: left;
|
||||
color: #000000;
|
||||
}
|
||||
.el-form-item__error {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="expireTime" label="到期日期" width="130">
|
||||
<template #default="scope">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.expireFlag == 0">长期</span>
|
||||
<template v-else>
|
||||
<span v-if="scope.row.expireTime"> {{ moment(scope.row.startTime).format('YYYY-MM-DD') }}</span>
|
||||
|
@ -106,7 +106,7 @@ const getCurUserQualification = () => {
|
|||
})
|
||||
}
|
||||
const handleDateChange = (val) => {
|
||||
if(val) form.value.expireFlag = 1
|
||||
if (val) form.value.expireFlag = 1
|
||||
else form.value.expireFlag = 0
|
||||
};
|
||||
/** 取消按钮 */
|
||||
|
@ -142,13 +142,14 @@ function submitForm() {
|
|||
})
|
||||
}
|
||||
const handleEdit = (record) => {
|
||||
reset()
|
||||
getCurrentCertificateDetail(record.id).then(res => {
|
||||
reset()
|
||||
getCurrentCertificateDetail(record.id).then(res => {
|
||||
form.value = res.data
|
||||
if (form.value.expireTime) form.value.expireFlag = 1 // 默认值
|
||||
else form.value.expireFlag = 0
|
||||
form.value.qualificationName = record.qualificationName
|
||||
fileList.value = [{ url: baseUrl + res.data.certificateUrl }]
|
||||
if (res.data.certificateUrl) fileList.value = [{ url: baseUrl + res.data.certificateUrl }]
|
||||
else fileList.value = []
|
||||
open.value = true
|
||||
title.value = "编辑"
|
||||
})
|
||||
|
|
|
@ -3,7 +3,9 @@
|
|||
<el-upload action="#" :http-request="requestUpload" list-type="picture-card" :file-list="fileList"
|
||||
:on-change="handleChange" :show-file-list="false" :before-upload="beforeUpload" :limit="1">
|
||||
<div v-if="fileList.length > 0 && fileList[0].url" class="image-wrapper">
|
||||
<img :src="isImageFile(suffix) ? fileList[0].url : pdfIcon" class="avatar viewFile"
|
||||
<img v-if="isImageFile(fileList[0].suffix)" :src="fileList[0].url" class="avatar viewFile"
|
||||
@click.stop="handleCardPreview(fileList[0].url, fileList[0].suffix)" />
|
||||
<img v-else :src="pdfIcon" class="avatar viewFile"
|
||||
@click.stop="handleCardPreview(fileList[0].url, fileList[0].suffix)" />
|
||||
<div class="actions">
|
||||
<span class="delete" @click.stop="handleRemoveImage">
|
||||
|
|
Loading…
Reference in New Issue
Block a user