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