提交代码

This commit is contained in:
wangchengming 2025-07-03 13:25:37 +08:00
parent d0d6156691
commit 6a2186c5b0
8 changed files with 732 additions and 281 deletions

View File

@ -89,7 +89,15 @@ export function getBusUserQualificationDetail(query) {
params: query
})
}
// ESC/培训中心获取资质审批记录列表
export function getBusUserQualificationRecord(query) {
return request({
url: '/admin/busUserQualificationRecord/getBusUserQualificationRecordPage',
method: 'post',
data: query
})
}
// 删除资质申请记录
export function deleteBusUserQualification(busQualificationId) {

View File

@ -128,7 +128,7 @@ export const dynamicRoutes = [
permissions: ['qualification:escApproval:approvalDetail'],
children: [
{
path: '',
path: ':Id(\\d+)?',
component: () => import('@/views/qualification/escApproval/approvalDetail'),
name: 'escApprovalDetail',
meta: { title: 'ESC审批', activeMenu: '/qualification/escApproval' }

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

View File

@ -13,142 +13,358 @@
<el-card>
<template #header>
<div class="card-header">
<span>目标资质ESC</span>
<span>目标资质{{ detailForm.qualificationName }}</span>
</div>
</template>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="left">
<el-form ref="detailFormRef" :model="detailForm" label-position="left">
<!-- <div class="headerTitle">基本信息</div> -->
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="20">
<el-row class="myRow" :gutter="20">
<el-col :span="8">
<el-form-item label="当前资质:" prop="targetQualification">
ES
<el-form-item label="当前资质:">
{{ detailForm.sourceQualificationName ? detailForm.sourceQualificationName :
'-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="部门:" prop="departmentName">
XXXX部门
<el-form-item label="部门:">
{{ detailForm.deptName ? detailForm.deptName : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="科室:" prop="officeName">
XXX科室
<el-form-item label="科室:">
{{ detailForm.sectionName ? detailForm.sectionName : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="员工工号:" prop="employeeNumber">
NO.43242342
<el-form-item label="员工工号:">
{{ detailForm.workNo ? detailForm.workNo : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="员工姓名(中文):" prop="employeeChineseName">
管思成
<el-form-item label="员工姓名(中文):">
{{ detailForm.userName ? detailForm.userName : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="员工姓名(英文):" prop="employeeEnglishName">
GuangSiCheng
<el-form-item label="员工姓名(英文):">
{{ detailForm.englishName ? detailForm.englishName : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="属地:" prop="localityName">
XXX属地
<el-form-item label="属地:">
{{ detailForm.dependencyName ? detailForm.dependencyName : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="属地ESC:" prop="localityName">
赵文杰
<el-form-item label="属地ESC:">
{{ detailForm.escUserName ? detailForm.escUserName : '-' }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="创建时间:" prop="employeeEnglishName">
2024-12-24 14:23
<el-form-item label="创建时间:">
{{ detailForm.createTime ? detailForm.createTime : '-' }}
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="4">
<el-form-item label="审批状态" label-position="top" class="myFormItemLable">
待审批
<template v-if="detailForm.state">
<el-text v-if="detailForm.state == 1" type="info"
class="infoinfoText">待审核</el-text>
<el-text v-if="detailForm.state == 2" type="success"
class="successText">通过</el-text>
<el-text v-if="detailForm.state == 9" type="danger"
class="dangerText">驳回</el-text>
</template>
<template v-else>-</template>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<el-form ref="ruleFormRef" :model="ruleForm" label-position="top">
<el-form ref="beforeConditionInfoRef" :model="beforeConditionInfo" label-position="top">
<div class="headerTitle">前置条件</div>
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="电工证初领日期" prop="collectionDate">
2023-12-06
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证复审日期" prop="reviewDate">
2027-12-06
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证状态">
正常
</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-image style="width: 176px; height: 107px;line-height: 50px;"
:src="'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'"
fit="fill" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="SH资质上传" prop="urgency">
<el-image style="width: 176px; height: 107px;line-height: 50px;"
:src="'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'"
fit="fill" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="ES资质上传" prop="urgency">
<el-image style="width: 176px; height: 107px;line-height: 50px;"
:src="'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'"
fit="fill" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="资质申请表单" prop="urgency">
<el-image style="width: 176px; height: 107px;line-height: 50px;"
:src="'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'"
fit="fill" />
</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-image style="width: 176px; height: 107px;line-height: 50px;"
:src="'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg'"
fit="fill" />
</el-form-item>
</el-col>
</el-row>
<div class="applyFormContainer" v-if="detailForm.qualificationId">
<div v-if="detailForm.qualificationId == 'SH'">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="电工证初领日期">
<el-date-picker v-model="beforeConditionInfo.collectionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
style="width: 100%;" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证复审日期">
<el-date-picker v-model="beforeConditionInfo.reviewDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
style="width: 100%;" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证状态">
<template v-if="isAfterToday()">
<div class="hightSatusNomar"></div>
<div class="statusLabel">正常</div>
</template>
<template v-else>
<div class="hightSatusDanger"> </div>
<div class="statusLabel">过期</div>
</template>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="培训紧迫程度">
<el-radio-group v-model="beforeConditionInfo.urgency" disabled>
<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="电工证照片">
<img v-if="isImageFile(beforeConditionInfo.certificatePhoto)"
:src="baseUrl + beforeConditionInfo.certificatePhoto"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.certificatePhoto)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.certificatePhoto)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="资质申请表单">
<img v-if="isImageFile(beforeConditionInfo.qualificationForm)"
:src="baseUrl + beforeConditionInfo.qualificationForm"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="detailForm.qualificationId == 'ES'">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="电工证初领日期">
<el-date-picker v-model="beforeConditionInfo.collectionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
style="width: 100%;" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证复审日期">
<el-date-picker v-model="beforeConditionInfo.reviewDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
style="width: 100%;" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证状态">
<template v-if="isAfterToday()">
<div class="hightSatusNomar"></div>
<div class="statusLabel">正常</div>
</template>
<template v-else>
<div class="hightSatusDanger"> </div>
<div class="statusLabel">过期</div>
</template>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="培训紧迫程度">
<el-radio-group v-model="beforeConditionInfo.urgency" disabled>
<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="电工证照片">
<img v-if="isImageFile(beforeConditionInfo.certificatePhoto)"
:src="baseUrl + beforeConditionInfo.certificatePhoto"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.certificatePhoto)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.certificatePhoto)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="SH资质上传">
<img v-if="isImageFile(beforeConditionInfo.shFile)"
:src="baseUrl + beforeConditionInfo.shFile" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.shFile)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.shFile)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="资质申请表单">
<img v-if="isImageFile(beforeConditionInfo.qualificationForm)"
:src="baseUrl + beforeConditionInfo.qualificationForm"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="6个月实操经验">
<el-radio-group v-model="beforeConditionInfo.practicalExperience" disabled>
<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="beforeConditionInfo.practicalExperience == '1'">
<el-form-item label="实操经验表单">
<img v-if="isImageFile(beforeConditionInfo.experienceFile)"
:src="baseUrl + beforeConditionInfo.experienceFile" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.experienceFile)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.experienceFile)" />
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="detailForm.qualificationId == 'ESC' || ruleForm.qualificationId == 'CESC'">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="电工证初领日期">
<el-date-picker v-model="beforeConditionInfo.collectionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证初领日期"
style="width: 100%;" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证复审日期">
<el-date-picker v-model="beforeConditionInfo.reviewDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择电工证复审日期"
style="width: 100%;" disabled />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="电工证状态">
<template v-if="isAfterToday()">
<div class="hightSatusNomar"></div>
<div class="statusLabel">正常</div>
</template>
<template v-else>
<div class="hightSatusDanger"> </div>
<div class="statusLabel">过期</div>
</template>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="培训紧迫程度">
<el-radio-group v-model="beforeConditionInfo.urgency" disabled>
<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="电工证照片">
<img v-if="isImageFile(beforeConditionInfo.certificatePhoto)"
:src="baseUrl + beforeConditionInfo.certificatePhoto"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.certificatePhoto)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.certificatePhoto)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="ES资质上传" prop="beforeConditionInfo.esFile">
<img v-if="isImageFile(beforeConditionInfo.esFile)"
:src="baseUrl + beforeConditionInfo.esFile" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.esFile)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.esFile)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="资质申请表单">
<img v-if="isImageFile(beforeConditionInfo.qualificationForm)"
:src="baseUrl + beforeConditionInfo.qualificationForm"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
</el-form-item>
</el-col>
</el-row>
</div>
<div v-if="detailForm.qualificationId == 'LLP'">
<el-row class="myRow" :gutter="20">
<el-col :span="12">
<el-form-item label="非电池生产线员工/电池生产线员工">
<el-radio-group v-model="beforeConditionInfo.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="具备资质">
<el-checkbox-group v-model="beforeConditionInfo.hasQualified" disabled>
<el-checkbox v-if="beforeConditionInfo.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="急救证发证日期">
<el-date-picker v-model="beforeConditionInfo.firstCollectionDate" type="date"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" placeholder="请选择急救证发证日期"
style="width: 60%;" disabled />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="急救证到期日期">
<el-date-picker v-model="beforeConditionInfo.firstCollectionExpireDate"
type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="请选择急救证到期日期" style="width: 60%;" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="健康证明" prop="beforeConditionInfo.healthCertificate">
<img v-if="isImageFile(beforeConditionInfo.healthCertificate)"
:src="baseUrl + beforeConditionInfo.healthCertificate"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.healthCertificate)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.healthCertificate)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="急救证" prop="beforeConditionInfo.firstCertificateFile">
<img v-if="isImageFile(beforeConditionInfo.firstCertificateFile)"
:src="baseUrl + beforeConditionInfo.firstCertificateFile"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.firstCertificateFile)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.firstCertificateFile)" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="资质申请表单">
<img v-if="isImageFile(beforeConditionInfo.qualificationForm)"
:src="baseUrl + beforeConditionInfo.qualificationForm"
class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
<img v-else :src="pdfIcon" class="avatar viewFile"
@click.stop="handleCardPreview(beforeConditionInfo.qualificationForm)" />
</el-form-item>
</el-col>
</el-row>
</div>
</div>
</el-form>
<div class="headerTitle">审批记录</div>
@ -175,16 +391,16 @@
<div class="applyFormContainer">
<el-row class="myRow" :gutter="20">
<el-col :span="6">
<el-form-item label="审批结果" prop="urgency">
<el-radio-group v-model="ruleForm.urgency">
<el-radio value="2">驳回</el-radio>
<el-radio value="1">通过</el-radio>
<el-form-item label="审批结果" prop="state">
<el-radio-group v-model="ruleForm.state">
<el-radio value="9">驳回</el-radio>
<el-radio value="2">通过</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="18">
<el-form-item label="审批意见" prop="urgency">
<el-input v-model="textarea" style="width: 100%" :rows="5" type="textarea"
<el-form-item label="审批意见" prop="remark">
<el-input v-model="ruleForm.remark" style="width: 100%" :rows="5" type="textarea"
placeholder="请输入" />
</el-form-item>
</el-col>
@ -199,13 +415,26 @@
<el-button class="submitApplyBtn" @click="handleSubmit">提交</el-button>
</div>
</div>
<!-- 图片预览 -->
<el-dialog v-model="dialogVisible" title="图片预览">
<img v-if="isImageFile(dialogImageUrl)" :src="dialogImageUrl" class="preview-image" alt="Preview Image" />
<div v-else class="unsupported-file">
<pdf-preview :pdf-url="dialogImageUrl" />
</div>
</el-dialog>
</template>
<script setup>
import { reactive } from 'vue'
import { Plus } from '@element-plus/icons-vue'
import { onMounted, reactive } from 'vue'
import { getBusUserQualificationDetail, getBusUserQualificationRecord } from "@/api/qualification/myQualifications"
import { useRouter } from 'vue-router'
import pdfIcon from '@/assets/images/pdfIcon.png'
import PdfPreview from './PdfPreview.vue'
const route = useRoute()
const baseUrl = import.meta.env.VITE_APP_BASE_API
const dialogImageUrl = ref('')
const dialogVisible = ref(false)
const suffix = ref('')
const router = useRouter()
const levelList = ref([
{ title: '资质管理', path: '/qualification' },
@ -214,26 +443,125 @@ const levelList = ref([
])
const { proxy } = getCurrentInstance()
const data = reactive({
ruleForm: {},
detailForm: {
qualificationName: '',
sourceQualificationName: '',
deptName: '',
sectionName: '',
workNo: '',
userName: '',
englishName: '',
dependencyName: '',
escUserName: '',
createTime: '',
state: null,
qualificationId: ''
},
beforeConditionInfo: {
collectionDate: null,
reviewDate: null,
urgency: '',
certificatePhoto: '',
qualificationForm: '',
shFile: '',
esFile: '',
batteryLine: '',
hasQualified: [],
firstCollectionDate: null,
firstCollectionExpireDate: null,
healthCertificate: '',
firstCertificateFile: '',
practicalExperience: '',
experienceFile: ''
},
ruleForm: {
state: '',
remark: ''
},
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" }],
state: [{ required: true, message: "请选择审批结果", trigger: "change" }],
remark: [{ required: true, message: "审批意见不能为空", trigger: "blur" }]
},
})
const tableData = [
{
name: '提交申请',
approvalResult: '-',
approvalTime: '2016-05-03'
},
]
const { ruleForm, rules } = toRefs(data)
//
const tableData = ref([])
//
const getQualificationApprovalRecord = (_id) => {
var queryParamsRecord = {
pageIndex: 1,
pageSize: 50,
userQualificationId: _id
}
getBusUserQualificationRecord(queryParamsRecord).then(res => {
})
}
const { ruleForm, detailForm, beforeConditionInfo, rules } = toRefs(data)
//
onMounted(() => {
const id = route.params && route.params.Id
if (id) {
console.log('接收id', id)
getDetailInfo(id)
getQualificationApprovalRecord(id)
} else {
ruleForm.value.id = null
}
});
//
const isImageFile = (filePath) => {
//
if (!filePath || filePath.indexOf('.') === -1) return '';
suffix.value = filePath.split('.').pop();
console.log('后缀', filePath.split('.').pop())
return ['jpeg', 'jpg', 'png'].includes(suffix.value?.toLowerCase())
}
//
const handleCardPreview = (filePath) => {
//
if (!filePath || filePath.indexOf('.') === -1) return '';
suffix.value = filePath.split('.').pop();
dialogImageUrl.value = baseUrl + filePath
dialogVisible.value = true
}
//
const getDetailInfo = (_id) => {
var _queryParams = {
id: _id,
node: 1
}
getBusUserQualificationDetail(_queryParams).then(res => {
if (res.code == 200) {
detailForm.value = res.data
detailForm.value = {
qualificationName: res.data.qualificationName,
sourceQualificationName: res.data.sourceQualificationName,
deptName: res.data.deptName,
sectionName: res.data.sectionName,
workNo: res.data.workNo,
userName: res.data.userName,
englishName: res.data.englishName,
dependencyName: res.data.dependencyName,
escUserName: res.data.escUserName,
createTime: res.data.createTime,
state: res.data.state,
qualificationId: res.data.qualificationId,
}
beforeConditionInfo.value = JSON.parse(res.data.beforeCondition)
console.log('资质详情', detailForm.value, beforeConditionInfo.value)
}
})
}
//
const isAfterToday = () => {
const today = new Date();
today.setHours(0, 0, 0, 0); //
const dateToCompare = new Date(beforeConditionInfo.value.reviewDate);
return dateToCompare > today;
};
const handleCancel = () => {
proxy.resetForm("ruleFormRef")
router.push({
@ -358,6 +686,13 @@ const handleSubmit = () => {
padding: 6px 14px;
}
.infoinfoText {
font-family: Microsoft YaHei;
font-weight: 400;
font-size: 18px;
color: #DD9200;
}
.successText {
font-family: Microsoft YaHei;
font-weight: 400;
@ -372,6 +707,27 @@ const handleSubmit = () => {
color: #E13434;
}
.hightSatusNomar {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 8px;
background: #00B32A;
}
.hightSatusDanger {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 8px;
background: #E13434;
}
.statusLabel {
display: inline-block;
padding-left: 10px;
}
.applyFormContainer {
padding-top: 20px;
overflow: hidden;
@ -522,4 +878,33 @@ const handleSubmit = () => {
text-align: left;
color: #000000;
}
.el-radio__input.is-disabled.is-checked .el-radio__inner {
background-color: var(--el-color-primary);
border-color: var(--el-color-primary);
}
.el-radio__input.is-disabled.is-checked .el-radio__inner:after {
background-color: var(--el-color-white);
}
.preview-image {
width: 100%;
max-height: 70vh;
object-fit: contain;
}
.unsupported-file {
padding: 0px;
text-align: center;
color: #999;
height: 70vh;
}
.viewFile {
width: 148px;
height: 148px;
border: 1px solid #dedede;
border-radius: 6px;
}
</style>

View File

@ -2,22 +2,27 @@
<div class="app-page-container">
<breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
<div class="app-container clearBoth">
<el-form :model="queryParams" ref="queryRef" :inline="true" >
<el-form :model="queryParams" ref="queryRef" :inline="true">
<el-row class="myRow">
<el-col :span="20">
<el-form-item label="申请日期" prop="userName">
<el-date-picker v-model="rangeTime" type="daterange" range-separator="~" :clearable="false"
style="width: 250px" start-placeholder="开始日期" end-placeholder="结束日期" />
<el-form-item label="申请日期">
<el-date-picker v-model="dateRange" type="daterange" range-separator="~" :clearable="false"
format="YYYY-MM-DD" value-format="YYYY-MM-DD" style="width: 250px"
@change="handleDateChange" start-placeholder="开始日期" end-placeholder="结束日期" />
</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-form-item label="申请状态" prop="state">
<el-select v-model="queryParams.state" placeholder="请选择" clearable style="width: 160px">
<el-option label="待审核" value="1" />
<el-option label="通过" value="2" />
<el-option label="驳回" value="9" />
</el-select>
</el-form-item>
<el-form-item label="员工姓名" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入员工姓名" clearable
style="width: 160px" @keyup.enter="handleQuery" />
<el-select v-model="queryParams.userId" filterable placeholder="请选择员工" style="width: 160px"
clearable>
<el-option v-for="item in allUsers" :key="item.userId" :label="item.nickName"
:value="item.userId" />
</el-select>
</el-form-item>
<el-form-item style="margin-right: 10px;">
<el-button v-if="!unfoldFlag" type="text" class="foladText" @click="handleFlod">展开
@ -35,12 +40,10 @@
</el-row>
<el-row class="myRow" v-show="unfoldFlag">
<el-col :span="20">
<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-select>
<el-form-item label="部门" prop="deptId">
<el-tree-select v-model="queryParams.deptId" :data="enabledDeptOptions" clearable
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id"
placeholder="请选择部门" check-strictly style="width: 160px" />
</el-form-item>
</el-col>
</el-row>
@ -53,187 +56,157 @@
</el-button>
</div>
<div class="borderLine"></div>
<el-table :data="tableData" height="calc(100% - 220px)" style="width: 100%">
<el-table v-loading="loading" :data="tableData" height="calc(100% - 220px)" 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 != 0"
@click="handleView">查看</el-button>
<el-button type="primary" v-if="scope.row.status == 0" text class="replayTextBtn"
@click="handleApproval">审批</el-button>
<el-button type="primary" text class="replayTextBtn" v-if="scope.row.state != 1"
@click="handleView(scope.row)">查看</el-button>
<el-button type="primary" v-else text class="replayTextBtn"
@click="handleApproval(scope.row)">审批</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" />
</div>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { onMounted, ref } from 'vue'
import { useRouter } from 'vue-router'
import Breadcrumb from '@/components/Breadcrumb'
import exprotIcon from '@/assets/images/exprotIcon.png'
import { deptTreeSelect, listUser } from "@/api/system/user"
import { getBusUserQualification } from "@/api/qualification/myQualifications"
const { proxy } = getCurrentInstance()
const router = useRouter()
const total = ref(16)
const unfoldFlag = ref(false)
const rangeTime = ref([])
const dateRange = ref([])
const queryParams = ref({
pageNum: 1,
pageIndex: 1,
pageSize: 10,
userName: undefined,
node: 1,
userId: undefined,
deptId: undefined,
qualification: undefined
state: undefined,
startTime: undefined,
endTime: 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([])
const handleFlod = () => {
unfoldFlag.value = !unfoldFlag.value
}
//
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
console.log('queryParams.value', queryParams.value)
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 handleDateChange = (val) => {
console.log('选择的日期范围:', val);
dateRange.value = val
if (val.length > 0) {
queryParams.value.startTime = val[0]
queryParams.value.endTime = val[1]
}
};
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.value.pageNum = 1
getList()
queryParams.value.pageIndex = 1
getBusUserQualificationPageList()
}
/** 重置按钮操作 */
const resetQuery = () => {
dateRange.value = []
proxy.resetForm("queryRef")
dateRange.value = []
queryParams.value.userId = undefined
queryParams.value.deptId = undefined
proxy.$refs.deptTreeRef.setCurrentKey(null)
queryParams.value.state = undefined
queryParams.value.startTime = undefined
queryParams.value.endTime = undefined
proxy.resetForm("queryRef")
handleQuery()
}
const getList = () => {
}
//
const handleOpenApplyForm = () => {
}
const handleView = () => {
router.push('/qualification/escApproval/approvalDetail')
const handleView = (record) => {
router.push('/qualification/escApproval/approvalDetail/' + record.id)
}
const handleApproval = () => {
router.push('/qualification/escApproval/approvalDetail')
const handleApproval = (record) => {
console.log('主键', record)
router.push('/qualification/escApproval/approvalDetail/' + record.id)
}
</script>
<style lang='scss'>

View File

@ -152,8 +152,10 @@ const handleQuery = () => {
}
/** 重置按钮操作 */
const resetQuery = () => {
dateRange.value = []
const resetQuery = () => {
queryParams.value.userId = undefined
queryParams.value.deptId = undefined
queryParams.value.qualificationId = undefined
proxy.resetForm("queryRef")
handleQuery()
}

View File

@ -167,9 +167,9 @@
</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 label="实操经验表单" prop="beforeCondition.experienceFile">
<myFileUpload ref="experienceFileRef"
@set-form-file="handleSetExperienceFile" />
</el-form-item>
</el-col>
</el-row>
@ -413,6 +413,11 @@ const handleSetQualificationForm = (filePath) => {
console.log('接收资质表单照片', filePath)
ruleForm.value.beforeCondition.qualificationForm = filePath
}
//
const handleSetExperienceFile = (filePath) => {
console.log('接收资质表单照片', filePath)
ruleForm.value.beforeCondition.qualificationForm = filePath
}
//
const handleSetHealthCertificate = (filePath) => {
ruleForm.value.beforeCondition.healthCertificate = filePath

View File

@ -144,8 +144,8 @@
</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 label="实操经验表单" prop="beforeCondition.experienceFile">
<myFileUpload ref="experienceFileRef" @set-form-file="handleSetExperienceFile" />
</el-form-item>
</el-col>
</el-row>
@ -371,6 +371,12 @@ const handleSetQualificationForm = (filePath) => {
console.log('接收资质表单照片', filePath)
ruleForm.value.beforeCondition.qualificationForm = filePath
}
//
const handleSetExperienceFile = (filePath) => {
console.log('接收资质表单照片', filePath)
ruleForm.value.beforeCondition.qualificationForm = filePath
}
//
const handleSetHealthCertificate = (filePath) => {
ruleForm.value.beforeCondition.healthCertificate = filePath