From c8a5ed885ab1a8206020b76be316ece1eb1f68f2 Mon Sep 17 00:00:00 2001
From: 祖安之光 <11848914+light-of-zuan@user.noreply.gitee.com>
Date: 星期二, 30 九月 2025 09:48:51 +0800
Subject: [PATCH] 修改新增
---
src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/index.vue | 244 +++++++++++++++++++++++++++++++++-------
src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/components/editDialog.vue | 112 ++++++++++++------
2 files changed, 272 insertions(+), 84 deletions(-)
diff --git a/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/components/editDialog.vue b/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/components/editDialog.vue
index 99d8e75..fc7d3f5 100644
--- a/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/components/editDialog.vue
+++ b/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/components/editDialog.vue
@@ -163,29 +163,50 @@
</el-input>
</template>
</el-table-column>
+ <el-table-column label="证书名称" prop="certificateName" align="center">
+ <template #default="scope">
+ <el-input
+ v-model.trim="scope.row.certificateName"
+ style="width: 100%;"
+ clearable
+ :readonly="state.title == '查看'"
+ >
+ </el-input>
+ </template>
+ </el-table-column>
+ <el-table-column label="证书上传" prop="certificateName" align="center">
+ <template #default="scope">
+ <el-upload accept=".pdf,image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,scope.$index)" :on-exceed="showTip" :limit='state.fileLimit' v-model:file-list="state.fileList[scope.$index]" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles, scope.$index)" >
+ <el-button type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip">支持上传pdf、图片格式,尺寸小于5M,最多可上传1份</div>
+ </template>
+ </el-upload>
+ </template>
+ </el-table-column>
<el-table-column label="操作" align="center" width="70" v-if="state.title == '新增'||state.title == '编辑' ">
<template #default="scope">
<el-button link type="danger" @click="handleDelete(scope.$index)">删除</el-button>
</template>
</el-table-column>
</el-table>
- <el-form-item label="证书名称:" prop="certificateName" v-if="state.title == '上传'">
- <el-input
- v-model.trim="state.form.certificateName"
- style="width: 100%;"
- clearable
- :readonly="state.title == '查看'"
- >
- </el-input>
- </el-form-item>
- <el-form-item label="检定证书:" prop="certificate" v-if="state.title == '上传'">
- <el-upload accept=".pdf,image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :limit='state.fileLimit' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)" >
- <el-button type="primary">点击上传</el-button>
- <template #tip>
- <div class="el-upload__tip">支持上传pdf、图片格式,尺寸小于5M,最多可上传1份</div>
- </template>
- </el-upload>
- </el-form-item>
+<!-- <el-form-item label="证书名称:" prop="certificateName" v-if="state.title == '上传'">-->
+<!-- <el-input-->
+<!-- v-model.trim="state.form.certificateName"-->
+<!-- style="width: 100%;"-->
+<!-- clearable-->
+<!-- :readonly="state.title == '查看'"-->
+<!-- >-->
+<!-- </el-input>-->
+<!-- </el-form-item>-->
+<!-- <el-form-item label="检定证书:" prop="certificate" v-if="state.title == '上传'">-->
+<!-- <el-upload accept=".pdf,image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :limit='state.fileLimit' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)" >-->
+<!-- <el-button type="primary">点击上传</el-button>-->
+<!-- <template #tip>-->
+<!-- <div class="el-upload__tip">支持上传pdf、图片格式,尺寸小于5M,最多可上传1份</div>-->
+<!-- </template>-->
+<!-- </el-upload>-->
+<!-- </el-form-item>-->
<el-row v-if="state.title !== '上传'">
<el-col :span="12">
<el-form-item label="编制:" prop="establishmentId">
@@ -293,9 +314,7 @@
establishmentTime: '',
processId: null,
processName: '',
- processTime: '',
- certificateName: '',
- certificate: '',
+ processTime: ''
},
oldDeviceList: [],
formRules:{
@@ -307,9 +326,7 @@
establishmentTime: [{ required: true, message: '请选择编制时间', trigger: 'blur' }],
processId: [{ required: true, message: '请选择审核人', trigger: 'blur' }],
processTime: [{ required: true, message: '请选择审核时间', trigger: 'blur' }],
- approvalId: [{ required: true, message: '请选择批准人', trigger: 'blur' }],
- certificateName: [{ required: true, message: '请填写证书名称', trigger: 'blur' }],
- certificate: [{ required: true, validator: checkFileList, trigger: 'blur' }]
+ approvalId: [{ required: true, message: '请选择批准人', trigger: 'blur' }]
},
isAdmin: false,
companyList: [],
@@ -353,13 +370,17 @@
actCalibrationTime: '',
calibrationUser: '',
status: '',
- useUser: ''
+ useUser: '',
+ certificateName: '',
+ certificate: ''
}
state.form.annualVerificationDevices.push(obj);
}
const handleDelete = (i) =>{
+ console.log(i,state.fileList,'list')
state.form.annualVerificationDevices = state.form.annualVerificationDevices.filter((item,index) => index != i)
+ state.fileList = state.fileList.filter((item,index) => index != i)
}
const onSubmit = async () => {
@@ -414,16 +435,27 @@
actCalibrationTime: item.actCalibrationTime,
calibrationUser: item.calibrationUser,
useUser: item.useUser,
- status: item.status
+ status: item.status,
+ certificateName: item.certificateName,
+ certificate: item.certificate
}
})
state.oldDeviceList = state.form.annualVerificationDevices
- if(state.form.certificate) {
- const obj = {
- url: state.form.certificate,
- name: state.form.certificateName
+ // if(state.form.certificate) {
+ // const obj = {
+ // url: state.form.certificate,
+ // name: state.form.certificateName
+ // }
+ // state.fileList = [obj]
+ // }
+ for(let i in state.form.annualVerificationDevices){
+ if(state.form.annualVerificationDevices[i].certificate && state.form.annualVerificationDevices[i].certificate !== ''){
+ const obj = {
+ url: state.form.annualVerificationDevices[i].certificate,
+ name: state.form.annualVerificationDevices[i].certificateName
+ }
+ state.fileList[i] = [obj]
}
- state.fileList = [obj]
}
}else{
ElMessage.warning(res.message)
@@ -452,11 +484,11 @@
}
}
-const handleAvatarSuccess = (res, uploadFile) => {
+const handleAvatarSuccess = (res, uploadFile, index) => {
if(res.code == 200){
- state.form.certificate = res.data.path
+ state.form.annualVerificationDevices[index].certificate = res.data.path
}else{
- state.fileList = []
+ state.fileList[index] = []
ElMessage({
type: 'warning',
message: '文件上传失败'
@@ -479,15 +511,16 @@
return false
}
};
-const handleRemove = async (file, uploadFiles) => {
- let path = state.form.filePath;
+const handleRemove = async (file, uploadFiles, index) => {
+ let path = state.form.annualVerificationDevices[index].certificate
await delPic({path: path}).then(res => {
if(res.code == 200){
// ElMessage({
// type: 'success',
// message: '文件已删除'
// })
- state.form.certificate = ''
+ state.form.annualVerificationDevices[index].certificate = ''
+ state.form.annualVerificationDevices[index].certificateName = ''
}else{
ElMessage({
type: 'warning',
@@ -495,7 +528,8 @@
})
}
}).catch(() => {
- state.form.certificate = ''
+ state.form.annualVerificationDevices[index].certificate = ''
+ state.form.annualVerificationDevices[index].certificateName = ''
});
}
@@ -512,9 +546,7 @@
establishmentTime: '',
processId: null,
processName: '',
- processTime: '',
- certificateName: '',
- certificate: '',
+ processTime: ''
}
state.fileList = []
superRef.value.clearValidate();
diff --git a/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/index.vue b/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/index.vue
index e8fdc69..ef9ae3b 100644
--- a/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/index.vue
+++ b/src/views/work/assetMng/toolsMonitorMeasure/annualVerificationPlan/index.vue
@@ -20,40 +20,181 @@
</el-option>
</el-select>
</el-form-item>
+ <el-form-item v-if="isAdmin" label="年份:">
+ <el-date-picker
+ v-model="data.queryParams.year"
+ type="year"
+ value-format="YYYY"
+ placeholder="请选择年份"
+ />
+ </el-form-item>
<el-form-item >
<el-button v-if="isAdmin" type="primary" @click="getList">查询</el-button>
<el-button v-if="isAdmin" type="primary" plain @click="reset">重置</el-button>
+ <el-button type="primary" plain @click="openDialog('edit',data.dataList)" v-if="data.hasInfo">编辑</el-button>
+ <el-button type="primary" plain @click="downloadFile()" v-if="data.hasInfo">导出</el-button>
<!-- <el-button type="primary">导出</el-button>-->
</el-form-item>
</el-form>
</div>
- <!-- 表格数据 -->
- <el-table v-loading="loading" :data="dataList" :border="true">
- <el-table-column type="index" label="序号"></el-table-column>
- <el-table-column prop="name" align="center" label="计划名称"></el-table-column>
- <el-table-column prop="certificateName" align="center" label="检定证书">
- <template #default="scope">
- {{scope.row.certificateName}}
- </template>
- </el-table-column>
- <el-table-column label="操作" align="center">
- <template #default="scope">
- <el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>
- <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>
- <el-button link type="primary" @click="openDialog('upload',scope.row)">上传证书</el-button>
- <el-button link type="primary" @click="downloadFile(scope.row)">导出</el-button>
- <el-button link type="danger" @click="handleDelete(scope.row)">删除</el-button>
- </template>
- </el-table-column>
- </el-table>
+ <div style="background: #fff;padding: 20px;border-radius: 0.6rem">
+ <el-form :model="data.dataList" label-position="left" size="default" label-width="120px" v-if="data.hasInfo">
+ <el-form-item v-if="isAdmin" label="企业:" prop="companyId">
+ <el-input
+ v-model.trim="data.dataList.companyName"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ <el-form-item label="计划名称:" prop="name">
+ <el-input
+ v-model.trim="data.dataList.name"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ <el-form-item label="年份:" prop="year">
+ <el-input
+ v-model.trim="data.dataList.year"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ <el-form-item label="设备列表:" prop="annualVerificationDevices">
- <pagination
- v-show="total > 0"
- :total="total"
- v-model:page="queryParams.pageNum"
- v-model:limit="queryParams.pageSize"
- @pagination="getList"
- />
+ </el-form-item>
+ <el-table v-if="data.dataList.annualVerificationDevices && data.dataList.annualVerificationDevices.length>0" :data="data.dataList.annualVerificationDevices" style="margin-bottom: 20px" :border="true">
+ <el-table-column label="序号" type="index" width="80" align="center">
+ </el-table-column>
+ <el-table-column label="设备编号" prop="deviceNumber" align="center"/>
+ <el-table-column label="设备名称" prop="deviceName" align="center"/>
+ <el-table-column label="规格型号" prop="model" align="center"/>
+ <el-table-column label="校准周期" prop="calibrationCycle" align="center"/>
+ <el-table-column label="下次校准时间" prop="nextCalibrationTime" align="center">
+ <template #default="scope">
+ {{scope.row.nextCalibrationTime.substring(0,10)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="实际检定时间" prop="actCalibrationTime" align="center">
+ <template #default="scope">
+ {{scope.row.actCalibrationTime.substring(0,10)}}
+ </template>
+ </el-table-column>
+ <el-table-column label="校准人" prop="calibrationUser" align="center"/>
+ <el-table-column label="目前状态" prop="status" align="center"/>
+ <el-table-column label="使用人" prop="useUser" align="center"/>
+ <el-table-column label="证书名称" prop="certificateName" align="center"/>
+ <el-table-column label="证书" prop="certificate" align="center">
+ <template #default="scope">
+ <div v-if="scope.row.certificate && scope.row.certificate!==''" style="cursor:pointer;">
+ <iframe
+ v-if="scope.row.certificate.split('.').pop().toLowerCase() == 'pdf'"
+ :src="data.baseUrl + '/' + scope.row.certificate"
+ width="100px"
+ height="100px"
+ style="overflow: hidden"
+ ></iframe>
+ <el-image
+ v-else
+ style="width: 100px; height: 100px"
+ :src="data.baseUrl + '/' + scope.row.certificate"
+ :max-scale="7"
+ :min-scale="0.2"
+ :preview-src-list="[data.baseUrl + '/' + scope.row.certificate]"
+ :initial-index="0"
+ fit="cover"
+ :preview-teleported=true
+ />
+ </div>
+ <el-link type="primary" :href="data.baseUrl + '/' + scope.row.certificate" target="_blank">预览</el-link>
+ </template>
+ </el-table-column>
+ </el-table>
+ <!-- <el-form-item label="检定证书:" prop="certificate">-->
+ <!-- <el-upload accept=".pdf,image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" :on-exceed="showTip" :limit='state.fileLimit' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)" >-->
+ <!-- <el-button type="primary">点击上传</el-button>-->
+ <!-- <template #tip>-->
+ <!-- <div class="el-upload__tip">支持上传pdf、图片格式,尺寸小于5M,最多可上传1份</div>-->
+ <!-- </template>-->
+ <!-- </el-upload>-->
+ <!-- </el-form-item>-->
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="编制:" prop="establishmentName">
+ <el-input
+ v-model.trim="data.dataList.establishmentName"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="日期:" prop="establishmentTime" >
+ <el-input
+ v-model.trim="data.dataList.establishmentTime"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="审核:" prop="processName">
+ <el-input
+ v-model.trim="data.dataList.processName"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="日期:" prop="processTime" >
+ <el-input
+ v-model.trim="data.dataList.processTime"
+ style="width: 100%;"
+ readonly
+ >
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <div v-else>暂无计划</div>
+ </div>
+ <!-- 表格数据 -->
+<!-- <el-table v-loading="loading" :data="dataList" :border="true">-->
+<!-- <el-table-column type="index" label="序号"></el-table-column>-->
+<!-- <el-table-column prop="name" align="center" label="计划名称"></el-table-column>-->
+<!-- <el-table-column prop="certificateName" align="center" label="检定证书">-->
+<!-- <template #default="scope">-->
+<!-- {{scope.row.certificateName}}-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+<!-- <el-table-column label="操作" align="center">-->
+<!-- <template #default="scope">-->
+<!-- <el-button link type="primary" @click="openDialog('view',scope.row)">查看</el-button>-->
+<!-- <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button>-->
+<!-- <el-button link type="primary" @click="openDialog('upload',scope.row)">上传证书</el-button>-->
+<!-- <el-button link type="primary" @click="downloadFile(scope.row)">导出</el-button>-->
+<!-- <el-button link type="danger" @click="handleDelete(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"-->
+<!-- />-->
<edit-dialog ref="dialogRef" @getList=getList></edit-dialog>
</div>
@@ -87,17 +228,21 @@
queryParams: {
pageNum: 1,
pageSize: 10,
- companyId: null
+ companyId: null,
+ year: ''
},
total: 0,
- dataList: [],
+ dataList: {},
companyList: [],
- isAdmin: false
+ isAdmin: false,
+ baseUrl: import.meta.env.VITE_APP_BASE_API,
+ hasInfo: false
});
const { queryParams, total, dataList,companyList, isAdmin } = toRefs(data);
const userInfo = ref()
onMounted(async ()=>{
+ data.queryParams.year = new Date().getFullYear().toString()
if(userStore.roles.includes('admin')){
data.isAdmin = true
await getCompanyList()
@@ -116,8 +261,27 @@
loading.value = true
const res = await getAnnualVerificationPlanList(data.queryParams)
if(res.code == 200){
- data.dataList = res.data.list || []
- data.total = res.data.total
+ if(Array.isArray(res.data.list) && res.data.list.length>0){
+ data.hasInfo = true
+ const re = await getAnnualVerificationPlanDetail({id: res.data.list[0].id})
+ if(re.code == 200){
+ if(re.data){
+ data.dataList = re.data
+ data.dataList.companyName = data.companyList.find(i=>i.id == data.dataList.companyId)?.name
+ data.dataList.establishmentTime = data.dataList.establishmentTime.substring(0,10)
+ data.dataList.processTime = data.dataList.processTime.substring(0,10)
+ }
+ }else{
+ data.hasInfo = false
+ data.dataList = {}
+ data.dataList.companyName = ''
+ ElMessage.warning(res.message)
+ }
+ }else{
+ data.hasInfo = false
+ data.dataList = {}
+ data.dataList.companyName = ''
+ }
}else{
ElMessage.warning(res.message)
}
@@ -137,12 +301,9 @@
}
}
-const downloadFile = async (val)=>{
- const res = await getAnnualVerificationPlanDetail({id: val.id})
- if(res.code == 200){
- if(res.data){
- let tableData = res.data
- tableData.table = res.data.annualVerificationDevices.map((item,index)=>{
+const downloadFile = async ()=>{
+ let tableData = data.dataList
+ tableData.table = data.dataList.annualVerificationDevices.map((item,index)=>{
return {
...item,
index: index + 1,
@@ -160,12 +321,6 @@
message: '导出失败'
});
}
- }else{
- ElMessage.warning('暂无数据')
- }
- }else{
- ElMessage.warning(res.message)
- }
}
const openDialog = (type, value) => {
@@ -177,7 +332,8 @@
data.queryParams = {
pageNum: 1,
pageSize: 10,
- companyId: null
+ companyId: null,
+ year: new Date().getFullYear().toString()
}
await getCompanyList()
await getList()
--
Gitblit v1.9.2