You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1049 lines
39 KiB
1049 lines
39 KiB
<template>
|
|
<div class="app-container">
|
|
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
|
|
<el-form-item label="真实姓名" prop="realName">
|
|
<el-input
|
|
v-model="queryParams.realName"
|
|
placeholder="请输入真实姓名"
|
|
clearable
|
|
@keyup.enter.native="handleQuery"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="身份证号" prop="idCard">
|
|
<el-input
|
|
v-model="queryParams.idCard"
|
|
placeholder="请输入身份证号"
|
|
clearable
|
|
@keyup.enter.native="handleQuery"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="资质类型" prop="qualificationType">
|
|
<el-select
|
|
v-model="queryParams.qualificationType"
|
|
placeholder="请选择资质类型"
|
|
style="width: 100%;"
|
|
@keyup.enter.native="handleQuery"
|
|
>
|
|
<el-option
|
|
v-for="dict in dict.type.qualification_type"
|
|
:key="dict.value"
|
|
:label="dict.label"
|
|
:value="dict.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<!-- <el-form-item label="资质类型" prop="qualificationType">-->
|
|
<!-- <el-input-->
|
|
<!-- v-model="queryParams.qualificationType"-->
|
|
<!-- placeholder="请输入资质类型"-->
|
|
<!-- clearable-->
|
|
<!-- @keyup.enter.native="handleQuery"-->
|
|
<!-- />-->
|
|
<!-- </el-form-item>-->
|
|
<!-- <el-form-item label="证书编号" prop="certificateNo">-->
|
|
<!-- <el-input-->
|
|
<!-- v-model="queryParams.certificateNo"-->
|
|
<!-- placeholder="请输入证书编号"-->
|
|
<!-- clearable-->
|
|
<!-- @keyup.enter.native="handleQuery"-->
|
|
<!-- />-->
|
|
<!-- </el-form-item>-->
|
|
<el-form-item label="审核状态" prop="auditStatus">
|
|
<el-select v-model="queryParams.auditStatus" placeholder="审核状态" clearable style="width: 100px">
|
|
<el-option
|
|
v-for="dict in dict.type.qualification_shenhe"
|
|
:key="dict.value"
|
|
:label="dict.label"
|
|
:value="dict.value"
|
|
/>
|
|
</el-select>
|
|
</el-form-item>
|
|
<el-form-item>
|
|
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
|
|
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
|
|
</el-form-item>
|
|
</el-form>
|
|
|
|
<el-row :gutter="10" class="mb8">
|
|
<el-col :span="1.5">
|
|
<el-button
|
|
type="primary"
|
|
plain
|
|
icon="el-icon-plus"
|
|
size="mini"
|
|
@click="handleAdd"
|
|
v-hasPermi="['vet:qualification:add']"
|
|
>新增</el-button>
|
|
</el-col>
|
|
<el-col :span="1.5">
|
|
<el-button
|
|
type="success"
|
|
plain
|
|
icon="el-icon-edit"
|
|
size="mini"
|
|
:disabled="single"
|
|
@click="handleUpdate"
|
|
v-hasPermi="['vet:qualification:edit']"
|
|
>修改</el-button>
|
|
</el-col>
|
|
<el-col :span="1.5">
|
|
<el-button
|
|
type="danger"
|
|
plain
|
|
icon="el-icon-delete"
|
|
size="mini"
|
|
:disabled="multiple"
|
|
@click="handleDelete"
|
|
v-hasPermi="['vet:qualification:remove']"
|
|
>删除</el-button>
|
|
</el-col>
|
|
<!-- <el-col :span="1.5">-->
|
|
<!-- <el-button-->
|
|
<!-- type="warning"-->
|
|
<!-- plain-->
|
|
<!-- icon="el-icon-download"-->
|
|
<!-- size="mini"-->
|
|
<!-- @click="handleExport"-->
|
|
<!-- v-hasPermi="['vet:qualification:export']"-->
|
|
<!-- >导出</el-button>-->
|
|
<!-- </el-col>-->
|
|
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
|
|
</el-row>
|
|
|
|
<el-table v-loading="loading" :data="qualificationList" @selection-change="handleSelectionChange">
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<!-- <el-table-column label="资质ID" align="center" prop="qualificationId" v-if="false" />-->
|
|
<!-- <el-table-column label="真实姓名" align="center" prop="realName" />-->
|
|
<!-- <el-table-column label="身份证号" align="center" prop="idCard" />-->
|
|
<el-table-column label="真实姓名" align="center" prop="realName" width="150">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.realName">{{ scope.row.realName }}</span>
|
|
<span v-else style="color: #909399">-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="身份证号" align="center" prop="idCard" width="150">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.idCard">{{ scope.row.idCard }}</span>
|
|
<span v-else style="color: #909399">-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="资质类型" align="center" prop="qualificationType" width="120">
|
|
<template slot-scope="scope">
|
|
<span>{{ formatQualificationType(scope.row.qualificationType) }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<!-- <el-table-column label="证书编号" align="center" prop="certificateNo" />-->
|
|
<!-- <el-table-column label="证书编号" align="center" prop="certificateNo" width="150">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!-- <span v-if="scope.row.certificateNo">{{ scope.row.certificateNo }}</span>-->
|
|
<!-- <span v-else style="color: #909399">-</span>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<!-- <!– 新增的证书字段 –>-->
|
|
<!-- <el-table-column label="证书名称" align="center" prop="certName" width="150">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!-- <span v-if="scope.row.certName">{{ scope.row.certName }}</span>-->
|
|
<!-- <span v-else style="color: #909399">-</span>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<!-- <el-table-column label="发证机构" align="center" prop="issueOrg" width="150">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!-- <span v-if="scope.row.issueOrg">{{ scope.row.issueOrg }}</span>-->
|
|
<!-- <span v-else style="color: #909399">-</span>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<!-- <el-table-column label="证书文件" prop="certificateFiles">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!--<!– <span v-if="scope.row.certificateFiles">{{ scope.row.certificateFiles }}</span>–>-->
|
|
<!-- <span v-if="scope.row.certificateFiles">{{ getImageUrl(scope.row.certificateFiles) }}</span>-->
|
|
<!-- <span v-else style="color: #909399">-</span>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<!-- <el-table-column label="到期日期" align="center" prop="expireDate" width="180">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!-- <span v-if="scope.row.expireDate">{{ parseTime(scope.row.expireDate, '{y}-{m}-{d}') }}</span>-->
|
|
<!-- <span v-else style="color: #909399">-</span>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<!-- <el-table-column label="证书状态" align="center" prop="certStatus" width="100">-->
|
|
<!-- <template slot-scope="scope">-->
|
|
<!-- <el-tag :type="getCertStatusType(scope.row.certStatus)" size="small">-->
|
|
<!-- {{ getCertStatusLabel(scope.row.certStatus) }}-->
|
|
<!-- </el-tag>-->
|
|
<!-- </template>-->
|
|
<!-- </el-table-column>-->
|
|
<el-table-column label="申请时间" align="center" prop="applyTime" width="180">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.applyTime">{{ parseTime(scope.row.applyTime, '{y}-{m}-{d}') }}</span>
|
|
<span v-else style="color: #909399">-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="审核时间" align="center" prop="auditTime" width="180">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.auditTime">{{ parseTime(scope.row.auditTime, '{y}-{m}-{d}') }}</span>
|
|
<span v-else style="color: #909399">-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="审核状态" align="center" prop="auditStatus" width="100">
|
|
<template slot-scope="scope">
|
|
<el-tag :type="getAuditStatusType(scope.row.auditStatus)" size="small">
|
|
{{ getDictLabel('qualification_shenhe', scope.row.auditStatus) }}
|
|
</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="备注" align="center" prop="remark" />
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="300">
|
|
<template slot-scope="scope">
|
|
<!-- 查看按钮 -->
|
|
<el-button
|
|
size="mini"
|
|
type="text"
|
|
icon="el-icon-view"
|
|
@click="handleView(scope.row)"
|
|
v-hasPermi="['vet:qualification:query']"
|
|
>查看证书详情</el-button>
|
|
|
|
<!-- 修改按钮 -->
|
|
<!-- <el-button-->
|
|
<!-- v-if="!scope.row.auditStatus || scope.row.auditStatus === '0' || scope.row.auditStatus === '2'"-->
|
|
<!-- size="mini"-->
|
|
<!-- type="text"-->
|
|
<!-- icon="el-icon-edit"-->
|
|
<!-- style="color: #42B983"-->
|
|
<!-- @click="handleUpdate(scope.row)"-->
|
|
<!-- v-hasPermi="['vet:qualification:edit']"-->
|
|
<!-- >修改</el-button>-->
|
|
|
|
<!-- 提交/重新提交按钮 -->
|
|
<!-- <el-button-->
|
|
<!-- v-if="!scope.row.auditStatus || scope.row.auditStatus === '2'"-->
|
|
<!-- size="mini"-->
|
|
<!-- type="text"-->
|
|
<!-- icon="el-icon-s-check"-->
|
|
<!-- style="color: #409EFF"-->
|
|
<!-- @click="handleSubmitAudit(scope.row)"-->
|
|
<!-- v-hasPermi="['vet:qualification:edit']"-->
|
|
<!-- >{{ !scope.row.auditStatus ? '提交审核' : '重新提交' }}</el-button>-->
|
|
|
|
<!-- 下架按钮:已上架状态显示 -->
|
|
<!-- <el-button-->
|
|
<!-- v-if="scope.row.auditStatus === '1'"-->
|
|
<!-- size="mini"-->
|
|
<!-- type="text"-->
|
|
<!-- icon="el-icon-bottom"-->
|
|
<!-- style="color: #E6A23C"-->
|
|
<!-- @click="handleUnshelf(scope.row)"-->
|
|
<!-- v-hasPermi="['vet:qualification:unshelf']"-->
|
|
<!-- >下架</el-button>-->
|
|
|
|
<!-- 上架按钮:已下架状态显示 -->
|
|
<!-- <el-button-->
|
|
<!-- v-if="scope.row.auditStatus === '3'"-->
|
|
<!-- size="mini"-->
|
|
<!-- type="text"-->
|
|
<!-- icon="el-icon-top"-->
|
|
<!-- style="color: #67C23A"-->
|
|
<!-- @click="handleShelf(scope.row)"-->
|
|
<!-- v-hasPermi="['vet:qualification:shelf']"-->
|
|
<!-- >上架</el-button>-->
|
|
|
|
<!-- 删除按钮 -->
|
|
<!-- <el-button-->
|
|
<!-- v-if="!scope.row.auditStatus || scope.row.auditStatus === '2'"-->
|
|
<!-- size="mini"-->
|
|
<!-- type="text"-->
|
|
<!-- icon="el-icon-delete"-->
|
|
<!-- style="color: #f56c6c"-->
|
|
<!-- @click="handleDelete(scope.row)"-->
|
|
<!-- v-hasPermi="['vet:qualification:remove']"-->
|
|
<!-- >删除</el-button>-->
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
|
|
<pagination
|
|
v-show="total>0"
|
|
:total="total"
|
|
:page.sync="queryParams.pageNum"
|
|
:limit.sync="queryParams.pageSize"
|
|
@pagination="getList"
|
|
/>
|
|
|
|
<!-- 显示资质证书信息 -->
|
|
<el-dialog :title="title" :visible.sync="openDetail" width="800px" append-to-body>
|
|
<div v-if="detailData" style="padding: 20px;">
|
|
<div style="margin-top: 30px;">
|
|
<el-alert
|
|
v-if="!certificateList || certificateList.length === 0"
|
|
title="暂无资质证书"
|
|
type="info"
|
|
:closable="false"
|
|
style="margin-bottom: 20px;"
|
|
/>
|
|
|
|
<el-table v-else :data="certificateList" border style="width: 100%">
|
|
<el-table-column type="selection" width="55" align="center" />
|
|
<el-table-column prop="certificateNo" label="证书编号" align="center" width="200">
|
|
<template slot-scope="scope">
|
|
<span>{{ scope.row.certificateNo }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="certName" label="证书名称" align="center" width="180">
|
|
<template slot-scope="scope">
|
|
<span>{{ scope.row.certName }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="发证机构" align="center" prop="issueOrg" width="150">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.issueOrg">{{ scope.row.issueOrg }}</span>
|
|
<span v-else style="color: #909399">-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="证书文件" prop="certificateFiles">
|
|
<template slot-scope="scope">
|
|
<span v-if="scope.row.certificateFiles">
|
|
<template v-if="isImageFile(scope.row.certificateFiles)">
|
|
<el-button
|
|
type="text"
|
|
icon="el-icon-view"
|
|
@click="previewCertificate(scope.row.certificateFiles)"
|
|
style="color: #409EFF;"
|
|
>
|
|
</el-button>
|
|
</template>
|
|
<template v-else-if="isPdfFile(scope.row.certificateFiles)">
|
|
<el-button
|
|
type="text"
|
|
icon="el-icon-download"
|
|
@click="downloadFile(scope.row.certificateFiles)"
|
|
style="color: #287c07;"
|
|
>
|
|
</el-button>
|
|
</template>
|
|
<template v-else>
|
|
{{ getImageUrl(scope.row.certificateFiles) }}
|
|
</template>
|
|
</span>
|
|
<span v-else style="color: #909399">-</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="issueDate" label="发证日期" align="center" width="120">
|
|
<template slot-scope="scope">
|
|
<span>{{ parseTime(scope.row.issueDate, '{y}-{m}-{d}') }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="expireDate" label="到期日期" align="center" width="120">
|
|
<template slot-scope="scope">
|
|
<span>{{ parseTime(scope.row.expireDate, '{y}-{m}-{d}') }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="证书状态" align="center" prop="certStatus" width="100">
|
|
<template slot-scope="scope">
|
|
<el-tag :type="getCertStatusType(scope.row.certStatus)" size="small">
|
|
{{ getCertStatusLabel(scope.row.certStatus) }}
|
|
</el-tag>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="300">
|
|
<template slot-scope="scope">
|
|
<!-- 修改按钮 -->
|
|
<el-button
|
|
v-if="!scope.row.auditStatus || scope.row.auditStatus === '0' || scope.row.auditStatus === '2'"
|
|
size="mini"
|
|
type="text"
|
|
icon="el-icon-edit"
|
|
style="color: #42B983"
|
|
@click="handleUpdate(scope.row)"
|
|
v-hasPermi="['vet:qualification:edit']"
|
|
>修改</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
</div>
|
|
</div>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button @click="closeDetail">关 闭</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
<el-dialog :visible.sync="previewDialogVisible" width="60%" append-to-body>
|
|
<div style="text-align: center; padding: 20px;">
|
|
<img
|
|
:src="getImageUrl(previewFileUrl)"
|
|
style="max-width: 100%; max-height: 70vh; height: auto;"
|
|
preview-teleported
|
|
:preview-src-list="[getImageUrl(previewFileUrl)]"
|
|
/>
|
|
</div>
|
|
</el-dialog>
|
|
|
|
|
|
<!-- 添加或修改兽医资质对话框 -->
|
|
<el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
<!-- <el-form-item label="真实姓名" prop="realName">-->
|
|
<!-- <el-input v-model="form.realName" placeholder="请输入真实姓名" />-->
|
|
<!-- </el-form-item>-->
|
|
<!-- <el-form-item label="身份证号" prop="idCard">-->
|
|
<!-- <el-input v-model="form.idCard" placeholder="请输入身份证号" />-->
|
|
<!-- </el-form-item>-->
|
|
<!-- <el-form-item label="资质类型" prop="qualificationType">-->
|
|
<!-- <el-select-->
|
|
<!-- v-model="form.qualificationType"-->
|
|
<!-- placeholder="请选择资质类型"-->
|
|
<!-- style="width: 100%;"-->
|
|
<!-- >-->
|
|
<!-- <el-option-->
|
|
<!-- v-for="dict in dict.type.qualification_type"-->
|
|
<!-- :key="dict.value"-->
|
|
<!-- :label="dict.label"-->
|
|
<!-- :value="dict.value"-->
|
|
<!-- />-->
|
|
<!-- </el-select>-->
|
|
<!-- </el-form-item>-->
|
|
<el-form-item label="证书编号" prop="certificateNo">
|
|
<el-input v-model="form.certificateNo" placeholder="请输入证书编号" />
|
|
</el-form-item>
|
|
<el-form-item label="证书名称" prop="certName">
|
|
<el-input v-model="form.certName" placeholder="请输入证书名称" />
|
|
</el-form-item>
|
|
<el-form-item label="发证机构" prop="issueOrg">
|
|
<el-input v-model="form.issueOrg" placeholder="请输入发证机构" />
|
|
</el-form-item>
|
|
<el-form-item label="发证日期" prop="issueDate">
|
|
<el-date-picker clearable
|
|
v-model="form.issueDate"
|
|
type="date"
|
|
value-format="yyyy-MM-dd"
|
|
placeholder="请选择发证日期"
|
|
style="width: 100%">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
<el-form-item label="到期日期" prop="expireDate">
|
|
<el-date-picker clearable
|
|
v-model="form.expireDate"
|
|
type="date"
|
|
value-format="yyyy-MM-dd"
|
|
placeholder="请选择到期日期"
|
|
style="width: 100%">
|
|
</el-date-picker>
|
|
</el-form-item>
|
|
<!-- <el-form-item label="证书图片" prop="certImage">-->
|
|
<!-- <image-upload v-model="form.certImage"/>-->
|
|
<!-- </el-form-item>-->
|
|
<el-form-item label="证书文件" prop="certificateFiles">
|
|
<!--<!– <el-input v-model="form.certificateFiles" type="textarea" placeholder="请输入内容" />–>-->
|
|
<file-upload
|
|
v-model="form.certificateFiles"
|
|
:limit="1"
|
|
:file-type="['pdf','png','jpg','jpeg']"
|
|
/>
|
|
</el-form-item>
|
|
<el-form-item label="提前提醒天数" prop="remindDays">
|
|
<el-input v-model="form.remindDays" placeholder="请输入提前提醒天数" />
|
|
</el-form-item>
|
|
<el-form-item label="备注" prop="remark">
|
|
<el-input v-model="form.remark" type="textarea" placeholder="请输入备注" />
|
|
</el-form-item>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button type="primary" @click="resubmitForm">重新提交审核</el-button>
|
|
<el-button @click="cancel">取 消</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { listQualification, getQualificationCertificate, delQualification, getQualificationCertificates, updateAndSubmitQualification} from "@/api/vet/qualification"
|
|
|
|
export default {
|
|
name: "Qualification",
|
|
dicts: ['qualification_shenhe', 'expert_type', 'qualification_type'],
|
|
data() {
|
|
return {
|
|
baseUrl: process.env.VUE_APP_BASE_API,
|
|
// 待预览的证书文件路径
|
|
previewFileUrl: '',
|
|
// 遮罩层
|
|
loading: true,
|
|
detailLoading: true,
|
|
// 选中数组
|
|
ids: [],
|
|
// 非单个禁用
|
|
single: true,
|
|
// 非多个禁用
|
|
multiple: true,
|
|
// 显示搜索条件
|
|
showSearch: true,
|
|
// 总条数
|
|
total: 0,
|
|
// 兽医资质表格数据
|
|
qualificationList: [],
|
|
// 资质证书列表
|
|
certificateList: [],
|
|
// 详情数据
|
|
detailData: null,
|
|
// 弹出层标题
|
|
title: "",
|
|
// 是否显示弹出层
|
|
open: false,
|
|
openDetail: false,
|
|
previewDialogVisible: false,
|
|
// 查询参数
|
|
queryParams: {
|
|
pageNum: 1,
|
|
pageSize: 10,
|
|
realName: null,
|
|
idCard: null,
|
|
qualificationType: null,
|
|
certificateNo: null,
|
|
auditStatus: null,
|
|
certName: null,
|
|
issueOrg: null,
|
|
expireDate: null,
|
|
certStatus: null,
|
|
},
|
|
// 表单参数
|
|
form: {},
|
|
// 表单校验
|
|
rules: {
|
|
// realName: [
|
|
// { required: true, message: "真实姓名不能为空", trigger: "blur" }
|
|
// ],
|
|
// idCard: [
|
|
// { required: true, message: "身份证号不能为空", trigger: "blur" }
|
|
// ],
|
|
// qualificationType: [
|
|
// { required: true, message: "资质类型不能为空", trigger: "change" }
|
|
// ],
|
|
certificateNo: [
|
|
{ required: true, message: "证书编号不能为空", trigger: "blur" }
|
|
],
|
|
certName: [
|
|
{ required: true, message: "证书名称不能为空", trigger: "blur" }
|
|
],
|
|
issueOrg: [
|
|
{ required: true, message: "发证机构不能为空", trigger: "blur" }
|
|
],
|
|
issueDate: [
|
|
{ required: true, message: "发证日期不能为空", trigger: "change" }
|
|
],
|
|
expireDate: [
|
|
{ required: true, message: "到期日期不能为空", trigger: "change" }
|
|
],
|
|
certificateFiles: [
|
|
{ required: true, message: "证书文件不能为空", trigger: "blur" }
|
|
],
|
|
}
|
|
}
|
|
},
|
|
created() {
|
|
this.getList()
|
|
},
|
|
methods: {
|
|
/** 查询兽医资质列表 */
|
|
getList() {
|
|
this.loading = true
|
|
listQualification(this.queryParams).then(response => {
|
|
this.qualificationList = response.rows
|
|
this.total = response.total
|
|
this.loading = false
|
|
})
|
|
},
|
|
|
|
/** 获取证书状态标签 */
|
|
getCertStatusLabel(status) {
|
|
const map = {
|
|
'0': '正常',
|
|
'1': '即将过期',
|
|
'2': '已过期'
|
|
}
|
|
return map[status] || status || '-'
|
|
},
|
|
|
|
/** 获取证书状态标签类型 */
|
|
getCertStatusType(status) {
|
|
const map = {
|
|
'0': 'success',
|
|
'1': 'warning',
|
|
'2': 'danger'
|
|
}
|
|
return map[status] || 'info'
|
|
},
|
|
|
|
/** 获取审核状态标签类型 */
|
|
getAuditStatusType(status) {
|
|
const map = {
|
|
'0': 'info', // 待审核 - 蓝色
|
|
'1': 'success', // 已上架 - 绿色
|
|
'2': 'danger', // 已拒绝 - 红色
|
|
'3': 'warning' // 已下架 - 黄色
|
|
}
|
|
return map[status] || 'info'
|
|
},
|
|
|
|
/** 格式化资质类型显示 */
|
|
formatQualificationType(status) {
|
|
const map = {
|
|
'1': '执业兽医师',
|
|
'2': '执业助理兽医',
|
|
'3': '官方兽医',
|
|
'4': '乡村兽医'
|
|
}
|
|
return map[status] || 'info'
|
|
},
|
|
|
|
/** 获取完整的图片URL */
|
|
getImageUrl(filePath) {
|
|
return `${this.baseUrl}${filePath}`
|
|
},
|
|
|
|
isImageFile(filePath) {
|
|
if (!filePath) return false;
|
|
const imageExts = ['.png','.jpg','.jpeg'];
|
|
const ext = filePath.substring(filePath.lastIndexOf('.')).toLowerCase();
|
|
return imageExts.includes(ext);
|
|
},
|
|
|
|
/** 判断是否为PDF文件 */
|
|
isPdfFile(filePath) {
|
|
if (!filePath) return false;
|
|
const ext = filePath.substring(filePath.lastIndexOf('.')).toLowerCase();
|
|
return ext === '.pdf';
|
|
},
|
|
|
|
/** 预览图片 */
|
|
previewCertificate(filePath) {
|
|
this.previewFileUrl = filePath;
|
|
this.previewDialogVisible = true;
|
|
},
|
|
|
|
/** 下载文件 */
|
|
downloadFile(filePath) {
|
|
const fullUrl = this.getImageUrl(filePath);
|
|
const link = document.createElement('a');
|
|
link.href = fullUrl;
|
|
|
|
const fileName = filePath.substring(filePath.lastIndexOf('/') + 1);
|
|
link.download = fileName;
|
|
|
|
document.body.appendChild(link);
|
|
link.click();
|
|
document.body.removeChild(link);
|
|
this.$modal.msgSuccess('开始下载文件');
|
|
},
|
|
|
|
/** 下架操作 */
|
|
// handleUnshelf(row) {
|
|
// this.$prompt('请输入下架原因', '下架确认', {
|
|
// confirmButtonText: '确定',
|
|
// cancelButtonText: '取消',
|
|
// inputPlaceholder: '请输入下架原因(如:证书过期、违规操作等)',
|
|
// inputValidator: (value) => {
|
|
// if (!value || value.trim().length < 2) {
|
|
// return '下架原因不能少于2个字'
|
|
// }
|
|
// if (value.trim().length > 200) {
|
|
// return '下架原因不能超过200字'
|
|
// }
|
|
// return true
|
|
// }
|
|
// }).then(({ value }) => {
|
|
// this.loading = true
|
|
// unshelfQualification(row.qualificationId, value).then(response => {
|
|
// this.loading = false
|
|
// if (response.code === 200) {
|
|
// this.$modal.msgSuccess('下架成功')
|
|
// this.getList() // 刷新列表
|
|
// } else {
|
|
// this.$modal.msgError(response.msg || '下架失败')
|
|
// }
|
|
// }).catch(error => {
|
|
// this.loading = false
|
|
// this.$modal.msgError(error.msg || '下架失败')
|
|
// })
|
|
// }).catch(() => {
|
|
// // 用户取消操作
|
|
// })
|
|
// },
|
|
|
|
/** 上架操作 */
|
|
// handleShelf(row) {
|
|
// this.$confirm('确认要上架此资质吗?', '上架确认', {
|
|
// confirmButtonText: '确定',
|
|
// cancelButtonText: '取消',
|
|
// type: 'warning'
|
|
// }).then(() => {
|
|
// this.loading = true
|
|
// shelfQualification(row.qualificationId).then(response => {
|
|
// this.loading = false
|
|
// if (response.code === 200) {
|
|
// this.$modal.msgSuccess('上架成功')
|
|
// this.getList() // 刷新列表
|
|
// } else {
|
|
// this.$modal.msgError(response.msg || '上架失败')
|
|
// }
|
|
// }).catch(error => {
|
|
// this.loading = false
|
|
// this.$modal.msgError(error.msg || '上架失败')
|
|
// })
|
|
// }).catch(() => {
|
|
// // 用户取消操作
|
|
// })
|
|
// },
|
|
|
|
/** 提交审核操作 */
|
|
// handleSubmitAudit(row) {
|
|
// this.$modal.confirm('确认提交 "' + row.realName + '" 的资质进行审核?').then(() => {
|
|
// // 准备提交数据
|
|
// const submitData = {
|
|
// qualificationId: row.qualificationId,
|
|
// realName: row.realName,
|
|
// idCard: row.idCard,
|
|
// qualificationType: row.qualificationType,
|
|
// certificateNo: row.certificateNo,
|
|
// certName: row.certName,
|
|
// issueOrg: row.issueOrg,
|
|
// issueDate: row.issueDate,
|
|
// expireDate: row.expireDate,
|
|
// certImage: row.certImage,
|
|
// certificateFiles: row.certificateFiles,
|
|
// remark: row.remark,
|
|
// // 提交审核时设置审核状态为待审核(0)
|
|
// auditStatus: '0'
|
|
// }
|
|
//
|
|
// return submitQualification(submitData)
|
|
// }).then(response => {
|
|
// if (response.code === 200) {
|
|
// this.$modal.msgSuccess("提交审核成功")
|
|
// this.getList()
|
|
// } else {
|
|
// this.$modal.msgError(response.msg || "提交审核失败")
|
|
// }
|
|
// }).catch(() => {
|
|
// })
|
|
// },
|
|
|
|
/** 重新提交审核 */
|
|
resubmitForm() {
|
|
this.$refs["form"].validate(valid => {
|
|
if (valid) {
|
|
let certId = this.form.certId || this.form.certificateId || this.form.id
|
|
if (certId && typeof certId === 'object') {
|
|
certId = certId.value || certId.id || certId.certificateId
|
|
}
|
|
certId = String(certId || '')
|
|
if (!certId || certId === 'null' || certId === 'undefined' || certId === 'NaN') {
|
|
this.$modal.msgError("证书ID无效:" + certId)
|
|
return
|
|
}
|
|
|
|
const submitData = {
|
|
certId: certId,
|
|
qualificationId: this.form.qualificationId,
|
|
realName: this.form.realName,
|
|
idCard: this.form.idCard,
|
|
qualificationType: this.form.qualificationType,
|
|
certificateNo: this.form.certificateNo,
|
|
certName: this.form.certName,
|
|
issueOrg: this.form.issueOrg,
|
|
issueDate: this.form.issueDate,
|
|
expireDate: this.form.expireDate,
|
|
certificateFiles: this.form.certificateFiles,
|
|
remark: this.form.remark,
|
|
auditStatus: '0',
|
|
auditOpinion: null,
|
|
applyTime: new Date().toISOString(),
|
|
}
|
|
|
|
updateAndSubmitQualification(submitData).then(response => {
|
|
if (response.code === 200) {
|
|
this.$modal.msgSuccess("重新提交审核成功")
|
|
this.open = false
|
|
this.getList()
|
|
|
|
if (this.openDetail && this.detailData && this.detailData.qualificationId) {
|
|
getQualificationCertificates(this.detailData.qualificationId).then(response => {
|
|
if (response.code === 200) {
|
|
this.certificateList = response.rows || [];
|
|
const updatedCertificate = this.certificateList.find(cert =>
|
|
cert.certificateId === certId || cert.certId === certId
|
|
);
|
|
if (updatedCertificate) {
|
|
this.certificateList = this.certificateList.map(cert => {
|
|
if (cert.certificateId === certId || cert.certId === certId) {
|
|
return {
|
|
...cert,
|
|
auditStatus: '0',
|
|
applyTime: new Date().toISOString(),
|
|
auditTime: null,
|
|
auditOpinion: null
|
|
}
|
|
}
|
|
return cert;
|
|
});
|
|
}
|
|
}
|
|
})
|
|
}
|
|
this.reset()
|
|
} else {
|
|
this.$modal.msgError(response.msg || "重新提交审核失败")
|
|
}
|
|
})
|
|
}
|
|
})
|
|
},
|
|
|
|
/** 查看详情 */
|
|
// handleView(row) {
|
|
// // 构建详情内容
|
|
// let detailContent = `
|
|
// <table style="width:100%; border-collapse: collapse;">
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">姓名:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.realName || '-'}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">身份证:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.idCard || '-'}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">证书编号:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.certificateNo || '-'}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">证书名称:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.certName || '-'}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">发证机构:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.issueOrg || '-'}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">到期日期:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.expireDate ? this.parseTime(row.expireDate, '{y}-{m}-{d}') : '-'}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">证书状态:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${this.getCertStatusLabel(row.certStatus)}</td>
|
|
// </tr>
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">审核状态:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${this.getDictLabel('qualification_shenhe', row.auditStatus) || '-'}</td>
|
|
// </tr>`
|
|
//
|
|
// // 如果有审核意见,添加审核意见
|
|
// if (row.auditOpinion) {
|
|
// detailContent += `
|
|
// <tr>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee; color: #666;">审核意见:</td>
|
|
// <td style="padding:8px 5px; border-bottom: 1px solid #eee;">${row.auditOpinion}</td>
|
|
// </tr>`
|
|
// }
|
|
//
|
|
// detailContent += `</table>`
|
|
//
|
|
// this.$alert(detailContent, '资质详情', {
|
|
// dangerouslyUseHTMLString: true,
|
|
// confirmButtonText: '关闭',
|
|
// width: '550px',
|
|
// customClass: 'qualification-detail-dialog'
|
|
// })
|
|
// },
|
|
|
|
/** 资质证书详情 */
|
|
handleView(row) {
|
|
this.openDetail = true
|
|
this.detailData = row
|
|
this.title = "资质证书详情"
|
|
this.certificateList = []
|
|
this.detailLoading = true
|
|
getQualificationCertificates(row.qualificationId).then(response => {
|
|
this.detailLoading = false
|
|
if (response.code === 200) {
|
|
this.certificateList = response.rows || [];
|
|
}
|
|
})
|
|
},
|
|
|
|
// 取消按钮
|
|
cancel() {
|
|
this.open = false
|
|
this.reset()
|
|
},
|
|
|
|
// 关闭按钮
|
|
closeDetail(){
|
|
this.openDetail = false
|
|
this.reset()
|
|
},
|
|
|
|
// 表单重置
|
|
reset() {
|
|
this.form = {
|
|
qualificationId: null,
|
|
userId: null,
|
|
realName: null,
|
|
idCard: null,
|
|
qualificationType: null,
|
|
certificateNo: null,
|
|
certificateFiles: null,
|
|
applyTime: null,
|
|
auditTime: null,
|
|
auditStatus: null,
|
|
auditOpinion: null,
|
|
auditorId: null,
|
|
remark: null,
|
|
certName: null,
|
|
certType: null,
|
|
issueOrg: null,
|
|
issueDate: null,
|
|
expireDate: null,
|
|
certImage: null,
|
|
certStatus: null,
|
|
remindDays: 30,
|
|
lastRemindTime: null,
|
|
scopeIds: null,
|
|
scopeNames: null
|
|
}
|
|
this.resetForm("form")
|
|
},
|
|
|
|
/** 搜索按钮操作 */
|
|
handleQuery() {
|
|
this.queryParams.pageNum = 1
|
|
this.getList()
|
|
},
|
|
|
|
/** 重置按钮操作 */
|
|
resetQuery() {
|
|
this.resetForm("queryForm")
|
|
this.handleQuery()
|
|
},
|
|
|
|
// 多选框选中数据
|
|
handleSelectionChange(selection) {
|
|
this.ids = selection.map(item => item.qualificationId)
|
|
this.single = selection.length !== 1
|
|
this.multiple = !selection.length
|
|
},
|
|
|
|
/** 新增按钮操作 */
|
|
handleAdd() {
|
|
this.reset()
|
|
this.open = true
|
|
this.title = "添加兽医资质"
|
|
this.form.auditStatus = null
|
|
},
|
|
|
|
/** 修改按钮操作 */
|
|
handleUpdate(row) {
|
|
this.reset()
|
|
let certId = row.certId || row.certificateId || row.id
|
|
if (certId && typeof certId === 'object') {
|
|
certId = certId.value || certId.id || certId.certificateId
|
|
}
|
|
certId = String(certId || '')
|
|
|
|
if (!certId || certId === 'null' || certId === 'undefined' || certId === 'NaN') {
|
|
this.$modal.msgError("证书ID无效:" + certId)
|
|
return
|
|
}
|
|
|
|
getQualificationCertificate(certId).then(response => {
|
|
if (response.code === 200 && response.data) {
|
|
this.form = response.data
|
|
this.open = true
|
|
this.title = "修改兽医资质证书信息"
|
|
} else {
|
|
this.$modal.msgError(response.msg || "获取证书信息失败")
|
|
}
|
|
}).catch(error => {
|
|
console.error('获取证书信息失败:', error)
|
|
this.$modal.msgError("获取证书信息失败")
|
|
})
|
|
},
|
|
|
|
/** 提交按钮 */
|
|
// submitForm() {
|
|
// this.$refs["form"].validate(valid => {
|
|
// if (valid) {
|
|
// if (this.form.qualificationId != null) {
|
|
// updateQualification(this.form).then(response => {
|
|
// this.$modal.msgSuccess("修改成功")
|
|
// this.open = false
|
|
// this.getList()
|
|
// })
|
|
// } else {
|
|
// this.form.auditStatus = null
|
|
// addQualification(this.form).then(response => {
|
|
// this.$modal.msgSuccess("新增成功")
|
|
// this.open = false
|
|
// this.getList()
|
|
// })
|
|
// }
|
|
// }
|
|
// })
|
|
// },
|
|
|
|
/** 删除按钮操作 */
|
|
handleDelete(row) {
|
|
const qualificationIds = row.qualificationId || this.ids
|
|
this.$modal.confirm('是否确认删除兽医资质编号为"' + qualificationIds + '"的数据项?').then(function() {
|
|
return delQualification(qualificationIds)
|
|
}).then(() => {
|
|
this.getList()
|
|
this.$modal.msgSuccess("删除成功")
|
|
}).catch(() => {})
|
|
},
|
|
|
|
/** 导出按钮操作 */
|
|
handleExport() {
|
|
this.download('vet/qualification/export', {
|
|
...this.queryParams
|
|
}, `qualification_${new Date().getTime()}.xlsx`)
|
|
},
|
|
|
|
/** 根据字典值获取标签 */
|
|
getDictLabel(dictType, value) {
|
|
const dict = this.dict.type[dictType]
|
|
if (dict && value) {
|
|
const item = dict.find(item => item.value === value)
|
|
return item ? item.label : value
|
|
}
|
|
return value || '-'
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
/* 操作按钮样式优化 */
|
|
.el-button--text {
|
|
padding: 6px 10px;
|
|
margin: 0 2px;
|
|
min-width: 50px;
|
|
}
|
|
|
|
/* 状态标签样式 */
|
|
.el-tag {
|
|
margin: 2px;
|
|
}
|
|
|
|
/* 详情对话框样式 */
|
|
::v-deep .qualification-detail-dialog .el-message-box__content {
|
|
max-height: 400px;
|
|
overflow-y: auto;
|
|
}
|
|
|
|
::v-deep .qualification-detail-dialog table {
|
|
width: 100%;
|
|
}
|
|
|
|
::v-deep .qualification-detail-dialog table tr:last-child td {
|
|
border-bottom: none;
|
|
}
|
|
</style>
|