From a6a8e49af8c8172f4209dd94e65f53f17825cc44 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期四, 21 十一月 2024 17:30:12 +0800 Subject: [PATCH] 项目管理 --- src/views/safetyReview/projectManage/components/projectArchive.vue | 201 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 194 insertions(+), 7 deletions(-) diff --git a/src/views/safetyReview/projectManage/components/projectArchive.vue b/src/views/safetyReview/projectManage/components/projectArchive.vue index 5d5a3e6..85e7cbb 100644 --- a/src/views/safetyReview/projectManage/components/projectArchive.vue +++ b/src/views/safetyReview/projectManage/components/projectArchive.vue @@ -1,21 +1,206 @@ - <template> - <div>项目归档</div> + <div class="archive"> + <el-form ref="formRef" style="display: flex;flex-direction: column" :model="state.dataForm" :inline="true" :rules="state.rules" label-width="130px" > + <el-form-item prop="projectEndTime" label="结束日期:"> + <el-date-picker + v-model="state.dataForm.projectEndTime" + type="datetime" + placeholder="请选择结束日期" + value-format="YYYY-MM-DD HH:mm:ss" + /> + </el-form-item> + <el-form-item prop="desc" label="总结描述:"> + <el-input + type="textarea" + :rows="8" + v-model.trim="state.dataForm.desc" + size="large" + placeholder="请输入总结描述" + > + </el-input> + </el-form-item> + <el-form-item label="附件上传:"> + <el-upload + :disabled="projectType==='view'" + accept=".pdf" + :action="state.uploadUrl" + :headers="state.header" + method="post" + :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" + :on-exceed="showTip" + :on-preview="handlePictureCardPreview" + :limit='1' + v-model:file-list="state.fileList" + :before-upload="picSize" + :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles)"> + <el-button type="primary">上传附件PDF</el-button> + <template #tip> + <div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div> + </template> + </el-upload> + </el-form-item> + </el-form> + </div> </template> <script setup> +import {onMounted, reactive, ref} from "vue"; +import {getToken} from "@/utils/auth"; +import {ElMessage, ElMessageBox} from "element-plus"; +import axios from "axios"; +import {archiveProject, checkProject, getFileInfo, getProjectInfo} from "@/api/projectManage"; + const emit = defineEmits(["getNextStatus"]); +const prop = defineProps(['projectId']) +const projectType = ref('') +const state = reactive({ + dataForm: { + id: null, + projectEndTime: '', + desc:'', + }, + rules: { + desc: [{ required: true, message: "总结描述不能为空", trigger: "blur" }], + projectEndTime:[{ required: true, message: "结束日期不能为空", trigger: "blur" }] + }, + uploadUrl: import.meta.env.VITE_APP_BASE_API + '/common/upload', + header: { + Authorization: getToken() + }, + fileList: [], + projectId: null +}); + +onMounted(async () => { + if(prop.projectId){ + state.projectId = prop.projectId + } +}) + +const formRef = ref() const riskOpen = async (type,val) => { console.log("type",type,val) //完结按钮 + let valid = null if(type === 'confirm'){ - //成功后自动到下一步 项目id - emit('getNextStatus', 4); - - }else if(type === 'detail'){ - console.log("view4444441",type,val) + valid = await formRef.value.validate(); + } + if(type === 'confirm'){ + if(valid){ + state.dataForm.id = state.projectId + state.dataForm.projectFile = state.fileList + const res = await archiveProject(state.dataForm); + if(res.code == 200){ + ElMessage.success('确认完结') + emit('getNextStatus', state.projectId); + // dialogVisible.value = false + }else{ + ElMessage.warning(res.message) + } + } + }else if(type === 'detail' || type === 'view'){ + if(type === 'view'){ + projectType.value = type + } + await getProject() + await getFile() } } + +const getProject = async () => { + const res = await getProjectInfo(state.projectId) + if(res.code === 200) { + if(res.data) { + const val = res.data + for(let i in state.dataForm) { + if (validKey(i, val)) { + state.dataForm[i] = val[i] + } + } + } + }else { + ElMessage.warning(res.message) + } +} + +const validKey=(key,obj)=>{ + return key in obj +} +const getFile = async () =>{ + const param = { + projectId: state.projectId, + module: 2 + } + const res = await getFileInfo(param); + if(res.code == 200){ + state.fileList = res.data.map(item => { + return { + ...item, + name: item.originalFileName + } + }) + }else{ + ElMessage.warning(res.message) + } +} +const handleAvatarSuccess = (res, uploadFile) => { + if(res.code == 200){ + state.fileList = state.fileList.map(item => { + return { + name: item.name, + filePath: item.response.url, + fileName:item.response.fileName, + projectId: state.projectId, + module: 2 + } + }) + }else{ + state.fileList = [] + ElMessage({ + type: 'warning', + message: res.message + }) + } +} + +const showTip =()=>{ + ElMessage({ + type: 'warning', + message: '超出文件上传数量' + }); +} + +const picSize = async (rawFile) => { + if(rawFile.size / 1024 / 1024 > 5){ + ElMessage({ + type: 'warning', + message: '文件大小不能超过5M' + }); + return false + } +}; + +const handlePictureCardPreview = (uploadFile) => { + axios.get(uploadFile.filePath,{headers:{'Content-Type': 'application/json','Authorization': `${getToken()}`},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: '文件读取失败' + }); + } + }) +}; + +const handleRemove = async (file, uploadFile) => { + +} + defineExpose({ riskOpen @@ -24,5 +209,7 @@ <style scoped lang="scss"> +.archive{ +} </style> -- Gitblit v1.9.2