| | |
| | | <el-row :gutter="30"> |
| | | <el-col :span="18"> |
| | | <el-form-item label="附件上传"> |
| | | <el-upload accept=".pdf,.doc,.docx" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" :limit='state.imgLimit' v-model:file-list="state.fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove"> |
| | | <el-upload accept="image/*,.pdf,.doc,.docx" :action="state.uploadUrl" :data="{moduleType: 6,projectId: props.projectId}" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" v-model:file-list="state.fileList" :before-upload="picSize"> |
| | | <el-button type="primary">上传评审记录</el-button> |
| | | <template #tip> |
| | | <div class="el-upload__tip">支持上传pdf/word/doc/docx格式文件,尺寸小于2M,最多可上传3张</div> |
| | | <div class="el-upload__tip">上传文件尺寸尺寸小于2M</div> |
| | | </template> |
| | | </el-upload> |
| | | </el-form-item> |
| | |
| | | </el-row> |
| | | <el-table :data="state.tableData" :border="true" style="margin: 20px 0"> |
| | | <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> |
| | | <el-table-column label="内容" prop="content" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width" width="175"> |
| | | <el-table-column label="原名称" prop="originName" header-align="center" :show-overflow-tooltip="true"/> |
| | | <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width" width="120"> |
| | | <template #default="scope"> |
| | | <el-button link type="primary">查看</el-button> |
| | | <el-button link type="primary" @click="checkFile(scope.row)">查看</el-button> |
| | | <el-button link type="danger" @click="handleRemove(scope.row,[])">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <script setup> |
| | | |
| | | import {defineEmits, onMounted, reactive, ref} from "vue"; |
| | | import {ElMessage} from "element-plus"; |
| | | import {ElMessage, ElMessageBox} from "element-plus"; |
| | | import {Search} from '@element-plus/icons-vue' |
| | | import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis" |
| | | import {delPic} from "@/api/login" |
| | | import {delFile, getFiles, getReviewDone} from "@/api/projectManage/siteCheckRcd"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import Cookies from "js-cookie" |
| | | import axios from 'axios' |
| | | const emit = defineEmits(["getNextStatus"]); |
| | | |
| | | const props = defineProps(['projectId']) |
| | | const state = reactive({ |
| | | formData: { |
| | | id: '', |
| | | leader: { |
| | | name: '' |
| | | }, |
| | | leaderId: null, |
| | | linkMan: '', |
| | | transmitPerson: '', |
| | | transmitDate: '' |
| | | }, |
| | | rules: { |
| | | "leader.name": [{required: true, message: '请选择项目负责人', trigger: 'blur'}], |
| | | linkMan: [{required: true, message: '请输入联系人', trigger: 'blur'}], |
| | | linkPhone: [{required: true, message: '请输入联系电话', trigger: 'blur'}], |
| | | transmitDate: [{required: true, message: '请选择任务下达时间', trigger: 'blur'}] |
| | | }, |
| | | formData: {}, |
| | | rules: {}, |
| | | tableData: [], |
| | | imgLimit: 3, |
| | | uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', |
| | | uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', |
| | | header: { |
| | | Authorization: 'Bearer ' + getToken() |
| | | } |
| | | Authorization: getToken() |
| | | }, |
| | | fileList: [] |
| | | }) |
| | | const props = { |
| | | expandTrigger: 'hover', |
| | | value: 'name', |
| | | label: 'name' |
| | | } |
| | | |
| | | const isAmin = ref(false) |
| | | const formRef = ref() |
| | | onMounted(() => { |
| | |
| | | if(userInfo.identity === 0){ |
| | | isAmin.value = true; |
| | | } |
| | | getReviewFiles(props.projectId) |
| | | }) |
| | | |
| | | const riskOpen = async (type,val) => { |
| | | if(type === 'detail' || type === 'edit' ){ |
| | | const res = await getRiskDetail({projectId: val}); |
| | | if(res.code == 200){ |
| | | state.formData = res.data; |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | await getReviewFiles |
| | | } |
| | | if(type === 'add' || type === 'clickEdit') { |
| | | const valid = await formRef.value.validate(); |
| | |
| | | return; |
| | | } |
| | | if(type === 'add'){ |
| | | const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | const res = await addRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('保存成功') |
| | | formRef.value.clearValidate(); |
| | | emit('getNextStatus', res.data); |
| | | |
| | | } else { |
| | | const res = await getFiles({projectId: val,moduleType: 6}) |
| | | if(res.code == 200){ |
| | | if(res.data && res.data.length>0){ |
| | | state.tableData = res.data |
| | | ElMessage.success('保存成功') |
| | | getReviewDone({projectId: val}).then((res)=>{ |
| | | if(res.code == 200){ |
| | | emit('getNextStatus', val); |
| | | }else{ |
| | | ElMessage.warning(res.message) |
| | | } |
| | | }) |
| | | }else{ |
| | | state.tableData=[] |
| | | ElMessage.warning('请上传评审记录附件') |
| | | } |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | }else if(type === 'clickEdit'){ |
| | | const { ...data} = JSON.parse(JSON.stringify(state.formData)) |
| | | const res = await editRisk(data); |
| | | if (res.code == 200) { |
| | | ElMessage.success('变更成功') |
| | | formRef.value.clearValidate(); |
| | | // emit('getNextStatus', data.project.id); |
| | | } else { |
| | | const res = await getFiles({projectId: val,moduleType: 6}) |
| | | if(res.code == 200){ |
| | | if(res.data && res.data.length>0){ |
| | | state.tableData = res.data |
| | | ElMessage.success('变更成功') |
| | | }else{ |
| | | state.tableData=[] |
| | | ElMessage.warning('请上传评审记录附件') |
| | | } |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | const getReviewFiles = async (id)=>{ |
| | | const res = await getFiles({projectId: id ? id : props.projectId,moduleType: 6}) |
| | | if(res.code == 200){ |
| | | if(res.data && res.data.length>0){ |
| | | state.tableData = res.data |
| | | }else{ |
| | | state.tableData=[] |
| | | } |
| | | }else { |
| | | ElMessage.warning(res.message) |
| | | } |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | const picSize = async (rawFile) => { |
| | | if(rawFile.size / 1024 / 1024 > 2){ |
| | | if(rawFile.size / 1024 / 1024 > 5){ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '文件大小不能超过2M' |
| | | message: '文件大小不能超过5M' |
| | | }); |
| | | return false |
| | | } |
| | | }; |
| | | |
| | | const handleAvatarSuccess = (res, uploadFile) => { |
| | | const handlePictureCardPreview = (uploadFile) => { |
| | | console.log(uploadFile,'file') |
| | | state.imgUrl = uploadFile.url |
| | | state.imgDialog = true |
| | | }; |
| | | |
| | | |
| | | const handleAvatarSuccess = (res, uploadFile, type) => { |
| | | if(res.code == 200){ |
| | | // state.registerForm.agency.reportPath = res.data.path |
| | | getReviewFiles() |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | |
| | | } |
| | | |
| | | const handleRemove = async (file, uploadFiles) => { |
| | | const res = await delPic({path: state.registerForm.agency.reportPath}) |
| | | if(res.code == 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '文件已删除' |
| | | }) |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.message |
| | | }) |
| | | } |
| | | ElMessageBox.confirm( |
| | | '确定删除该附件?', |
| | | '提示', |
| | | { |
| | | confirmButtonText: '确定', |
| | | cancelButtonText: '取消', |
| | | type: 'warning', |
| | | }) |
| | | .then( async() => { |
| | | const res = await delFile(file.id) |
| | | if(res.code == 200){ |
| | | ElMessage({ |
| | | type: 'success', |
| | | message: '文件已删除' |
| | | }) |
| | | await getReviewFiles() |
| | | }else{ |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: res.message |
| | | }) |
| | | } |
| | | }) |
| | | .catch(()=>{ |
| | | getReviewFiles() |
| | | }) |
| | | } |
| | | |
| | | const checkFile = async (file)=>{ |
| | | axios.get(import.meta.env.VITE_APP_BASE_API +'/' + file.path,{headers:{'Content-Type': 'application/json','Authorization': `${getToken()}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{ |
| | | if (res) { |
| | | const link = document.createElement('a') |
| | | let blob = new Blob([res.data],{type: res.data.type}) |
| | | link.style.display = "none"; |
| | | link.href = URL.createObjectURL(blob); // 创建URL |
| | | window.open(link.href) |
| | | } else { |
| | | ElMessage({ |
| | | type: 'warning', |
| | | message: '文件读取失败' |
| | | }); |
| | | } |
| | | }) |
| | | } |
| | | |
| | | defineExpose({ |