src/views/safetyReview/projectManage/components/basicInfo.vue
对比新文件 @@ -0,0 +1,145 @@ <template> <div class="basicInfo"> <el-row :gutter="24"> <el-col :span="24"> <el-form-item prop="deptName" label="申报处室:"> <span>{{state.formData.deptName}}</span> </el-form-item> </el-col> </el-row> <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> <el-row :gutter="30"> <el-col :span="6"> <el-form-item prop="projectName" label="项目名称"> <el-input maxlength="100" show-word-limit v-model.trim="state.formData.projectName" size="large" placeholder="请输入项目名称" > </el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item prop="projectName" label="项目预计时间区间"> <el-date-picker v-model="searchTime" type="daterange" @change="changeTime" size="large" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" value-format="YYYY-MM-DD" /> </el-form-item> </el-col> <el-col :span="6"> <el-form-item prop="unit" label="被检查/对接单位"> <el-input v-model.trim="state.formData.unit" size="large" placeholder="请输入被检查/对接单位" > </el-input> </el-form-item> </el-col> <el-col :span="6"> <el-form-item prop="place" label="项目地点"> <el-input v-model.trim="state.formData.place" size="large" placeholder="请输入项目地点" > </el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="6"> <el-form-item prop="people" label="处室带队人员"> <el-input v-model.trim="state.formData.projectName" size="large" placeholder="请输入处室带队人员" > </el-input> </el-form-item> </el-col> </el-row> <el-row :gutter="24"> <el-col :span="24"> <el-form-item prop="description" label="概况描述"> <el-input type="textarea" :rows="6" v-model.trim="state.formData.description" size="large" placeholder="请输入概况描述" > </el-input> </el-form-item> </el-col> </el-row> </el-form> </div> </template> <script setup> import {reactive, ref} from "vue"; const emit = defineEmits(["getNextStatus"]); const state = reactive({ formData: { deptName:'危险化学品监督管理处', projectName: '', startTime: '', endTime: '', unit: '', place: '', people: '', description: '' }, rules: { } }) const searchTime = ref([]); const riskOpen = async (type,val) => { console.log("type",type,val) if(type === 'add'){ state.formData.startTime = searchTime.value[0] state.formData.endTime = searchTime.value[1] //保存按钮 //成功后自动到下一步 项目id emit('getNextStatus', 1); reset() }else if(type === 'clickEdit'){ //变更按钮 }else if(type === 'detail'){ console.log("view111111111111111",type,val) } } const reset = () => { searchTime.value = []; } const changeTime=(value)=>{ if(!value){ state.formData.startTime = "" state.formData.endTime = "" } } defineExpose({ riskOpen }); </script> <style scoped lang="scss"> .basicInfo{ } </style> src/views/safetyReview/projectManage/components/chooseExpert.vue
对比新文件 @@ -0,0 +1,31 @@ <template> <div>专家选用</div> </template> <script setup> const emit = defineEmits(["getNextStatus"]); const riskOpen = async (type,val) => { console.log("type",type,val) //保存按钮 if(type === 'add'){ //成功后自动到下一步 项目id emit('getNextStatus', 2); }else if(type === 'clickEdit'){ //变更按钮 }else if(type === 'detail'){ console.log("view222222",type,val) } } defineExpose({ riskOpen }); </script> <style scoped lang="scss"> </style> src/views/safetyReview/projectManage/components/confirmEnd.vue
文件已删除 src/views/safetyReview/projectManage/components/confirmEndDialog.vue
文件已删除 src/views/safetyReview/projectManage/components/contractManage.vue
文件已删除 src/views/safetyReview/projectManage/components/deviceDialog.vue
文件已删除 src/views/safetyReview/projectManage/components/employNoticeRecord.vue
文件已删除 src/views/safetyReview/projectManage/components/evaluatePlan.vue
文件已删除 src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue
文件已删除 src/views/safetyReview/projectManage/components/expertsList.vue
文件已删除 src/views/safetyReview/projectManage/components/innerReview.vue
文件已删除 src/views/safetyReview/projectManage/components/mapLocation.vue
文件已删除 src/views/safetyReview/projectManage/components/processCtrlReview.vue
文件已删除 src/views/safetyReview/projectManage/components/projectApproval.vue
对比新文件 @@ -0,0 +1,31 @@ <template> <div>项目审批</div> </template> <script setup> const emit = defineEmits(["getNextStatus"]); const riskOpen = async (type,val) => { console.log("type",type,val) //保存按钮 if(type === 'add'){ //成功后自动到下一步 项目id emit('getNextStatus', 3); }else if(type === 'clickEdit'){ //变更按钮 }else if(type === 'detail'){ console.log("view333333",type,val) } } defineExpose({ riskOpen }); </script> <style scoped lang="scss"> </style> src/views/safetyReview/projectManage/components/projectArchive.vue
@@ -1,390 +1,28 @@ <template> <div class="riskBox"> <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> <el-row :gutter="30"> <el-col :span="10"> <!-- <el-button type="primary" :disabled="projectType === 'edit'" @click="addUpload">新增附件列表</el-button>--> <span style="font-size: 20px;font-weight: 600">附件列表</span> <span style="font-size: 13px;color: rgb(232, 78, 79);font-weight: 400;margin-left: 10px">项目列表仅支持pdf、jpg、jpeg 等格式上传</span> </el-col> </el-row> <el-table :data="state.uploadList" :border="true" style="margin: 20px 0"> <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> <el-table-column label="名称" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <span type="text" size="large">{{scope.row.name}}</span> <div>项目归档</div> </template> </el-table-column> <el-table-column label="是否必须文件" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-radio-group v-model="scope.row.type" > <el-radio :label="1">是</el-radio> <el-radio :label="0">否</el-radio> </el-radio-group> </template> </el-table-column> <el-table-column label="原因说明" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-input v-model="scope.row.remark" show-word-limit type="text" size="large" /> </template> </el-table-column> <el-table-column label="附件上传" align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-upload accept=".pdf,.doc,.docx" :action="state.uploadUrl" :disabled="projectType === 'view' || isEnd" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,scope.row)" v-model:file-list="scope.row.fileList" :on-remove="handleRemove" :data="state.uploadData" :on-preview="handlePreview" > <el-button type="primary">附件上传</el-button> </el-upload> </template> </el-table-column> <!-- <el-table-column label="操作" align="center" class-name="small-padding fixed-width">--> <!-- <template #default="scope">--> <!-- <el-button link type="danger" @click="delUpload(scope.$index)">删除</el-button>--> <!-- </template>--> <!-- </el-table-column>--> </el-table> <el-row :gutter="30"> <el-col :span="6"> <el-form-item label="合同签订日期"> <el-date-picker style="width: 100%" v-model="state.formData.contractSignDate" type="date" value-format="YYYY-MM-DD 00:00:00" placeholder="选择日期" size="large" /> </el-form-item> </el-col> <el-col :span="18"> <el-form-item prop="actualContractMoney"> <template #label> 项目合同额<span style="font-size: 13px;color: red;font-weight: normal;display: inline-block;margin-left: 6px">预估合同金额,归档阶段可以进行修改。仅支持数字,单位万元,小数点后最多两位,数值范围(0.01-999.99)</span> </template> <el-input v-model.trim="state.actualContract.actualContractMoney" @input="state.actualContract.actualContractMoney= state.actualContract.actualContractMoney.replace(/[^0-9.\/\-]/g,'')" size="large" placeholder="请输入项目合同额" > <template #append>万元</template> </el-input> </el-form-item> </el-col> </el-row> <el-form-item label="实际合同额说明"> <el-input v-model.trim="state.actualContract.actualContractIntroduction" :autosize="{ minRows: 6 }" maxlength="100" show-word-limit type="textarea"> </el-input> </el-form-item> </el-form> </div> </template> <script setup> import {defineEmits, defineProps, onMounted, reactive, ref} from "vue"; import {ElMessage} from "element-plus"; import {addRecord, editRecord, getDetail} from "@/api/projectManage/contractMng"; import Cookies from "js-cookie"; import { getToken } from "@/utils/auth"; import axios from "axios"; import {delAccessoryFile, getAccessoryFile} from "@/api/projectManage/project"; import {addProcessMaterial, getProcessMaterialDetail, editProcessMaterial} from "@/api/projectManage/riskAnalysis"; import { useRoute } from 'vue-router' const route = useRoute() const props = defineProps(['projectId']) const emit = defineEmits(["getNextStatus"]); const state = reactive({ formData: { id: '', contractSignDate: '', }, actualContract: { actualContractMoney: '', actualContractIntroduction: '' }, uploadList: [ { name: '安全评价过程控制记录文档', type: 1, remark: '', }, { name: '项目发票电子版', type: 1, remark: '', }, { name: '项目转账记录/入账证明', type: 1, remark: '', } ], rules: { contractSignDate: [{required: true, message: '请选择合同签订日期', trigger: 'blur'}], }, fileList: [], uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', header: { Authorization: getToken() }, uploadData: { moduleType: 9 }, }) const isAmin = ref(false) const formRef = ref(); onMounted(async () => { const userInfo = JSON.parse(Cookies.get('userInfo')) if(userInfo.identity === 0){ isAmin.value = true; } if(props.projectId){ state.uploadData.projectId = props.projectId; await getRecord(state.uploadData.projectId); // const res = await getAccessoryFile({projectId: val,moduleType: 9}); // console.log('res',res) } isEnd.value = Cookies.get('end') projectType.value = route.query.type; }); const getRecord = async (val) =>{ const res = await getDetail({projectId: val}); if(res.code == 200){ state.formData = res.data; state.actualContract.actualContractMoney = res.data.actualContractMoney; state.actualContract.actualContractIntroduction = res.data.actualContractIntroduction; }else { ElMessage.warning(res.message) } } const projectType = ref('') const isEnd = ref('') const riskOpen = async (type,val) => { projectType.value = route.query.type; isEnd.value = Cookies.get('end') state.uploadData.projectId = val; if(type === 'detail' || type === 'edit' ){ const res = await getProcessMaterialDetail({projectId: val}); if(res.code == 200){ state.uploadList = res.data; state.uploadList.forEach((item,index) => { if(item.accessoryFile){ item.accessoryFile.name = item.accessoryFile.originName state.uploadList[index].fileList = [item.accessoryFile]; } }) console.log("type",type,val) //完结按钮 if(type === 'confirm'){ //成功后自动到下一步 项目id emit('getNextStatus', 4); console.log("res",state.uploadList) }else { ElMessage.warning(res.message) } } if(type === 'add' || type === 'clickEdit') { const valid = await formRef.value.validate(); if(valid){ if (isAmin.value) { ElMessage.warning("当前用户暂无权限"); return; } if(state.actualContract.actualContractMoney == '' || !state.actualContract.actualContractMoney) { ElMessage.warning("请输入项目合同额"); return; } console.log(state.uploadList,'state.uploadList') const file = state.uploadList.map(item => { return{ id: item.id ? item.id : null, fileId: item.fileList && item.fileList.length>0 ? item.fileList[0].response ? item.fileList[0].response.data.id : item.fileList[0].id : '', name: item.name, type: item.type, remark: item.remark, projectId: val } }) let isOk = false; try{ state.uploadList.forEach(item => { if(item.type == 1 && (!item.fileList || item.fileList .length == 0) && item.remark == ""){ isOk = true; throw Error(); } }) }catch (e) {} if(isOk){ ElMessage.warning("请上传附件或完善原因说明!"); return; } const { ...data} = JSON.parse(JSON.stringify(state.formData)) data.actualContractMoney = state.actualContract.actualContractMoney; data.actualContractIntroduction = state.actualContract.actualContractIntroduction; const params = { projectId: val, projectMaterials: file, contract: data } console.log("params",params) if(type === 'add'){ const res = await addProcessMaterial(params); if (res.code == 200) { ElMessage.success('保存成功') formRef.value.clearValidate(); emit('getNextStatus', val); } else { ElMessage.warning(res.message) } }else if(type === 'clickEdit'){ const res = await editProcessMaterial(params); if (res.code == 200) { ElMessage.success('变更成功') projectType.value='edit'; formRef.value.clearValidate(); // emit('getNextStatus', data.project.id); } else { ElMessage.warning(res.message) } } } } } const addUpload = ()=>{ let file = { name: '', type: 1, remark: '', } state.uploadList.push(file) } const delUpload = (index)=>{ state.uploadList.splice(index,1) } // 图片上传 const showTip =()=>{ ElMessage({ type: 'warning', message: '超出文件上传数量' }); } const picSize = async (rawFile) => { if(rawFile.size / 1024 / 1024 > 5){ ElMessage({ type: 'warning', message: '文件大小不能超过5M' }); return false } }; const handleAvatarSuccess = (res, uploadFile,val) => { if(res.code === 200){ ElMessage({ type: 'success', message: '文件上传成功' }) }else { const delVal = state.uploadList.findIndex(i => i.id === val.id); state.uploadList[delVal].fileList.splice(state.uploadList[delVal].fileList.indexOf(uploadFile),1) ElMessage({ type: 'warning', message: res.message }) } } const handlePreview = (file) => { let path = ""; if(file.path){ path = file.path }else { path = file.response.data.path } const url = import.meta.env.VITE_APP_BASE_API + '/' + path axios.get( url,{ 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 link.setAttribute("download", file.name); document.body.appendChild(link); link.click(); document.body.removeChild(link); } else { this.$message.error('获取文件失败') } }) } const handleRemove = async (file, uploadFiles) => { if (file && file.status == 'success') { console.log("file", file) let accessoryFileId = ""; if (file.id) { accessoryFileId = file.id } else { accessoryFileId = file.response.data.id } const res = await delAccessoryFile(accessoryFileId) if (res.code == 200) { // ElMessage({ // type: 'success', // message: '文件已删除' // }) } else { ElMessage({ type: 'warning', message: res.message }) } }else if(type === 'detail'){ console.log("view4444441",type,val) } } defineExpose({ riskOpen }); </script> <style scoped lang="scss"> .riskBox{ :deep(.el-form .el-form-item__label) { font-size: 15px; } } </style> src/views/safetyReview/projectManage/components/rateConclusion.vue
文件已删除 src/views/safetyReview/projectManage/components/riskAnalysis.vue
文件已删除 src/views/safetyReview/projectManage/components/signConfirm.vue
文件已删除 src/views/safetyReview/projectManage/components/siteCheckRcd.vue
文件已删除 src/views/safetyReview/projectManage/components/techLeaderReview.vue
文件已删除 src/views/safetyReview/projectManage/components/uploadReviewRcd.vue
文件已删除 src/views/safetyReview/projectManage/components/worksDialog.vue
文件已删除 src/views/safetyReview/projectManage/index.vue
@@ -2,14 +2,14 @@ <div class="project-container"> <div class="header"> <el-button type="success" icon="Plus" @click="toProcess('add',{})">新增</el-button> <vue3-json-excel :json-data="dataList" :fields="fields" name="项目信息表.xlsx" style="margin-right: 5px;margin-left: 5px" > <el-button type="warning">导出</el-button> </vue3-json-excel> <!-- <vue3-json-excel--> <!-- :json-data="dataList"--> <!-- :fields="fields"--> <!-- name="项目信息表.xlsx"--> <!-- style="margin-right: 5px;margin-left: 5px"--> <!-- >--> <!-- <el-button type="warning">导出</el-button>--> <!-- </vue3-json-excel>--> <el-button type="primary" icon="Filter" @click="showDrawer = true">筛选</el-button> </div> <div class="middle"> @@ -24,7 +24,7 @@ <div class="box-right"> <div class="inbox" @click="choose(1)" style="box-shadow: rgba(132, 122, 253, 0.2) 0 3px 5px 0;" :class="{btn1: chooseType === 1}"> <div class="top" style="background: linear-gradient(90deg, rgb(127, 118, 253), rgb(218, 180, 246));"> <span class="top-right-font">风险分析及计划评价</span> <span class="top-right-font">基本信息</span> </div> <div class="bottom"> <span class="top-right-font-bottom">{{search.num.riskTotal}}</span> @@ -32,7 +32,7 @@ </div> <div class="inbox" @click="choose(2)" style="box-shadow: rgba(255, 142, 139, 0.15) 0 3px 5px 0;" :class="{btn2: chooseType === 2}"> <div class="top" style="background: linear-gradient(90deg, rgb(255, 140, 138), rgb(239, 186, 141));"> <span class="top-right-font">现场勘验</span> <span class="top-right-font">专家选用</span> </div> <div class="bottom"> <span class="top-right-font-bottom">{{search.num.investigationTotal}}</span> @@ -40,7 +40,7 @@ </div> <div class="inbox" @click="choose(3)" style="box-shadow: rgba(222, 106, 169, 0.15) 0 3px 5px 0;" :class="{btn3: chooseType === 3}"> <div class="top" style="background: linear-gradient(90deg, rgb(229, 119, 180), rgb(249, 159, 192));"> <span class="top-right-font">项目审核</span> <span class="top-right-font">项目审批</span> </div> <div class="bottom"> <span class="top-right-font-bottom">{{search.num.reviewTotal}}</span> @@ -48,18 +48,10 @@ </div> <div class="inbox" @click="choose(4)" style="box-shadow: rgba(109, 177, 254, 0.2) 0 3px 5px 0;" :class="{btn4: chooseType === 4}"> <div class="top" style="background: linear-gradient(90deg, rgb(54, 115, 255), rgb(124, 196, 242));"> <span class="top-right-font">出具报告</span> </div> <div class="bottom"> <span class="top-right-font-bottom">{{search.num.reportTotal}}</span> </div> </div> <div class="inbox" @click="choose(5)" style="box-shadow: rgba(88, 211, 137, 0.2) 0 3px 5px 0;" :class="{btn5: chooseType === 5}"> <div class="top" style="background: linear-gradient(90deg, rgb(0, 195, 151), rgb(114, 232, 200));"> <span class="top-right-font">项目归档</span> </div> <div class="bottom"> <span class="top-right-font-bottom">{{search.num.archiveTotal}}</span> <span class="top-right-font-bottom">{{search.num.reportTotal}}</span> </div> </div> </div> @@ -68,62 +60,12 @@ <!-- 表格数据 --> <el-table v-loading="loading" :data="dataList" :border="true" ref="tableRef" :height="tableHeight" style="width: 100%;"> <el-table-column label="序号" width="80" align="center" type="index" ></el-table-column> <el-table-column label="申请时间" prop="createTime" align="center" :show-overflow-tooltip="true" width="180" /> <el-table-column label="项目名称" prop="name" align="center" :show-overflow-tooltip="true" width="180" /> <el-table-column label="填报机构" prop="agencyName" align="center" :show-overflow-tooltip="true" width="180" /> <el-table-column label="委托单位" prop="client" align="center" :show-overflow-tooltip="true" width="180"/> <el-table-column label="所属地市" align="center" width="250"> <template #default="scope"> {{scope.row.area}} </template> </el-table-column> <el-table-column label="类型" prop="estimateTypeName" align="center" width="150"/> <el-table-column label="业务范围" prop="businessName" align="center" :show-overflow-tooltip="true" width="150"/> <el-table-column label="项目负责人" prop="leaderName" align="center" width="120" :show-overflow-tooltip="true"/> <el-table-column label="项目阶段" align="center" width="200"> <template #default="scope"> <div v-if="scope.row.process === 1" class="process1"> <span>风险分析及计划评价</span> </div> <div v-else-if="scope.row.process === 2" class="process1 process2"> <span>现场勘验</span> </div> <div v-else-if="scope.row.process === 3" class="process1 process3"> <span>项目审核</span> </div> <div v-else-if="scope.row.process === 4" class="process1 process4"> <span>出具报告</span> </div> <div v-else class="process1 process5"> <span>项目归档</span> </div> </template> </el-table-column> <el-table-column label="项目实施天数" prop="filingDate" align="center" width="150"/> <!-- <el-table-column label="项目变更" prop="" align="center" width="120">--> <!-- <template #default="scope">--> <!-- <div style="cursor:pointer;color: #3b82f6;" >--> <!-- <span v-if="scope.row.process !== 1" @click="goMenu('toFive',scope.row)">{{}}</span>--> <!-- <span v-else></span>--> <!-- </div>--> <!-- </template>--> <!-- </el-table-column>--> <el-table-column label="预估金额(万元)" prop="contractMoney" align="center" width="130"/> <el-table-column label="归档金额(万元)" prop="actualContractMoney" align="center" width="130"/> <el-table-column label="缺失要件" align="center" width="150"> <template #default="scope"> <div style="cursor:pointer;color: #3b82f6;" > <span v-if="scope.row.process === 5" @click="goMenu('toTwelve',scope.row)">{{scope.row.missingMaterialCnt}}</span> <span v-else></span> </div> </template> </el-table-column> <el-table-column label="归档确认" prop="" align="center" width="150"> <template #default="scope"> <div style="cursor:pointer;color: #3b82f6;" > <span v-if="scope.row.process === 5" @click="goMenu('toThirteen',scope.row)">{{scope.row.activeConfirm}}</span> <!-- <span v-else></span>--> </div> </template> <el-table-column label="部门" prop="dept" align="center" /> <el-table-column label="专家组组长" prop="leader" align="center" width="150"/> <el-table-column label="专家组人数" prop="num" align="center" width="150"/> <el-table-column label="当前状态" prop="state" align="center" width="200"> </el-table-column> <el-table-column fixed="right" label="操作" align="center" class-name="small-padding fixed-width" width="180"> <template #default="scope"> @@ -160,53 +102,19 @@ value-format="YYYY-MM-DD" /> </el-form-item> <el-form-item label="所属区域"> <el-cascader v-model="area" :options="addressList" :props="props" @change="handleChange" style="width: 100%" size="large" /> </el-form-item> <el-form-item label="项目名称" > <el-input v-model.trim="search.queryParams.name" placeholder="请输入项目名称"></el-input> </el-form-item> <el-form-item label="委托单位"> <el-input v-model.trim="search.queryParams.client" placeholder="委托单位"></el-input> </el-form-item> <el-form-item label="业务范围"> <el-select v-model="search.queryParams.business" class="m-2" size="large" placeholder="请选择" style="width: 100%" > <el-form-item label="当前状态" > <el-select v-model="search.queryParams.state" class="m-2" size="large" placeholder="请选择" style="width: 100%" > <el-option v-for="item in businessList" v-for="item in stateList" :key="item.id" :label="item.label" :value="item.id" /> </el-select> </el-form-item> <el-form-item label="类型"> <el-select v-model="search.queryParams.estimateType" class="m-2" size="large" placeholder="请选择" style="width: 100%" > <el-option v-for="item in estimateTypeList" :key="item.id" :label="item.label" :value="item.id" /> </el-select> </el-form-item> <el-form-item label="缺失要件"> <el-select v-model="search.queryParams.params.lostMaterial" class="m-2" size="large" placeholder="请选择" style="width: 100%" > <el-option v-for="item in missingList" :key="item.id" :label="item.label" :value="item.id" /> </el-select> </el-form-item> </el-form> </div> </template> @@ -226,11 +134,11 @@ <script setup> import {onMounted, reactive, ref} from "vue"; import {delProject, getProjectList, getProjectStatistics} from "@/api/projectManage/project"; // import {delProject, getProjectList, getProjectStatistics} from "@/api/projectManage/project"; import {ElMessage, ElMessageBox} from "element-plus"; import {getRegionTree} from "@/api/area"; import {getDict} from "@/api/login"; import {getDictList} from "@/api/backManage/evaluate"; // import {getRegionTree} from "@/api/area"; // import {getDict} from "@/api/login"; // import {getDictList} from "@/api/backManage/evaluate"; import Cookies from "js-cookie" const router = useRouter(); @@ -248,15 +156,10 @@ pageNum: 1, pageSize: 20, name: '', client: '', province: '', city: '', district: '', business: '', estimateType: '', phase: '', state: null, params:{ lostMaterial: null } }, num: { @@ -270,18 +173,23 @@ }); const searchTime = ref([]); const area = ref([]); const businessList = ref([]); const addressList = ref([]); const estimateTypeList = ref([]); const missingList = ref([ const stateList = ref([ { id: 1, label: '是' label: '基本信息' }, { id: 0, label: '否' } id: 2, label: '专家选用' }, { id: 3, label: '项目审批' }, { id: 4, label: '项目归档' }, ]) const tableRef = ref(null); const tableHeight = ref(0); @@ -294,9 +202,9 @@ Cookies.remove('btn') getList(); getStatistics(); getArea(); getBusinessList(); getRiskList(); // getArea(); // getBusinessList(); // getRiskList(); tableHeight.value = window.innerHeight - tableRef.value.$el.offsetTop - 170; // 监听浏览器高度变化 window.onresize = () => { @@ -314,37 +222,50 @@ } const getList = async () => { loading.value = true; const res = await getProjectList(search.queryParams); if(res.code == 200){ dataList.value = res.data.list.map(item => { return { ...item, process: item.reportProgress <= 4 ? 1 : item.reportProgress > 4 && item.reportProgress <= 6 ? 2 : item.reportProgress > 6 && item.reportProgress <= 9 ? 3 : item.reportProgress > 9 && item.reportProgress <= 11 ? 4 : 5, leaderName: item.leader ? item.leader.name : '', area: item.district ? item.province + '/' + item.city + '/' + item.district : item.city != item.province ? item.province + '/' + item.city: item.province , filingDate: item.filingDate ? conversionDays(item.filingDate,item.createTime) : conversionDays('',item.createTime), contractMoney: item.contract ? item.contract.contractMoney : '', actualContractMoney: item.contract ? item.contract.actualContractMoney : '', activeConfirm: item.personRecognition ? item.personRecognition.recognitionCnt + '/' + item.personRecognition.personCnt: '', missingMaterialCnt: 3-item.materialCnt, activeConfirmOut: item.personRecognition ? "\'" + item.personRecognition.recognitionCnt + '/' + item.personRecognition.personCnt: '', dataList.value = [ { id:1, createTime: 'xxx', name: 'xxx', dept: 'xxx', leader: '张三', num: 10, state: 1, reportProgress: 1 } }) total.value = res.data.total ] // const res = await getProjectList(search.queryParams); // if(res.code == 200){ // dataList.value = res.data.list.map(item => { // return { // ...item, // process: item.reportProgress <= 4 ? 1 : item.reportProgress > 4 && item.reportProgress <= 6 ? 2 : item.reportProgress > 6 && item.reportProgress <= 9 ? 3 : item.reportProgress > 9 && item.reportProgress <= 11 ? 4 : 5, // leaderName: item.leader ? item.leader.name : '', // area: item.district ? item.province + '/' + item.city + '/' + item.district : item.city != item.province ? item.province + '/' + item.city: item.province , // filingDate: item.filingDate ? conversionDays(item.filingDate,item.createTime) : conversionDays('',item.createTime), // contractMoney: item.contract ? item.contract.contractMoney : '', // actualContractMoney: item.contract ? item.contract.actualContractMoney : '', // activeConfirm: item.personRecognition ? item.personRecognition.recognitionCnt + '/' + item.personRecognition.personCnt: '', // missingMaterialCnt: 3-item.materialCnt, // activeConfirmOut: item.personRecognition ? "\'" + item.personRecognition.recognitionCnt + '/' + item.personRecognition.personCnt: '', // } // }) total.value = 1 loading.value = false; console.log('11',dataList.value) }else{ ElMessage.warning(res.message) } // console.log('11',dataList.value) // }else{ // ElMessage.warning(res.message) // } } const getStatistics = async () => { const {pageNum,pageSize, ...data} = JSON.parse(JSON.stringify(search.queryParams)) const res = await getProjectStatistics(data); if(res.code == 200){ search.num = res.data }else{ ElMessage.warning(res.message) } // const {pageNum,pageSize, ...data} = JSON.parse(JSON.stringify(search.queryParams)) // const res = await getProjectStatistics(data); // if(res.code == 200){ // search.num = res.data // }else{ // ElMessage.warning(res.message) // } } const handleSizeChange = (val) => { search.queryParams.pageNum = 1; @@ -360,32 +281,6 @@ router.push({ path: '/process', query: {id: value.id, type: type, toPath: toPath, process: value.reportProgress}}); } const getArea = async ()=>{ const type = 1 const res = await getRegionTree({name: '',parentId: null,regionType: type}) if(res.code == 200){ addressList.value = res.data }else{ ElMessage.warning(res.message) } } const getBusinessList = async () => { const res = await getDict({dictType: 'sys_business_scope'}) if(res.code === 200){ businessList.value = res.data }else{ ElMessage.warning(res.message) } } const getRiskList = async () => { const res = await getDictList({dictType: "sys_assess_type"}); if(res.code === 200){ estimateTypeList.value = res.data.list }else{ ElMessage.warning(res.message) } } const del = (val) => { ElMessageBox.confirm( '确定删除此条数据?', @@ -399,8 +294,8 @@ const res = await delProject(val) if(res.code == 200){ ElMessage.success('数据删除成功') getList() getStatistics() await getList() await getStatistics() }else{ ElMessage.warning(res.message) @@ -408,6 +303,7 @@ }) } const confirmClick = () => { reset() showDrawer.value = false; } const changeTime=(value)=>{ @@ -427,80 +323,20 @@ } const reset = () => { searchTime.value = []; area.value = []; search.queryParams = { pageNum: 1, pageSize: 20, name: '', client: '', province: '', city: '', district: '', business: '', estimateType: '', phase: '', state: null, params: { lostMaterial: null } } chooseType.value = ''; getList(); getStatistics(); showDrawer.value = false; } const conversionDays = (time,createTime) => { let day = ""; if(time) { day = new Date(time).getTime() - new Date(createTime).getTime();//日期转时间戳 }else { day = Date.now() - new Date(createTime).getTime();//日期转时间戳 } return Math.floor(day / 86400000) ;//时间戳获取天数 } const handleChange = (value) => { // if(state.registerForm.agency.attribute == 0){ // state.registerForm.agency.province = '新疆维吾尔自治区' // state.registerForm.agency.city = value[0]?value[0]:'' // state.registerForm.agency.district = value[1]?value[1]:'' // }else{ search.queryParams.province = value[0]?value[0]:'' search.queryParams.city = value[1]?value[1]:'' search.queryParams.district = value[2]?value[2]:'' // } } // 导出表格 const fields = ref({ '项目名称':'name', '委托单位':'client', '所属地市': 'area', '类型': 'estimateTypeName', '业务范围': 'businessName', '项目负责人': 'leaderName', '项目阶段': { field: 'process', callback: (value) => { if (value === 1) { return '风险分析及计划评价' } else if(value === 2){ return '现场勘验' }else if(value === 3){ return '项目审核' }else if(value === 4){ return '出具报告' }else if(value === 5){ return '项目归档' } } }, '项目实施天数': 'filingDate', '预估金额(万元)': 'contractMoney', '归档金额(万元)': 'actualContractMoney', '缺失要件': 'missingMaterialCnt', '归档确认': 'activeConfirmOut' }); const goMenu = (toPath,val) => { console.log("val",val) toProcess('edit',val,toPath); } @@ -569,7 +405,7 @@ align-items: center; justify-content: space-between; .inbox{ width: 19%; width: 23%; height: 76px; background: #fff; border-radius: 5px; src/views/safetyReview/projectManage/process.vue
@@ -1,15 +1,14 @@ <template> <div class="process-container"> <div class="flow"> <div class="content" :class="{show: isShowMenu}" > <div class="content-middle" @click="clickMenu(true)"> <div class="content" > <div class="content-middle"> <div class="project-title"> <!-- <img :src="projectPng">--> <span>项目</span> <span>阶段</span> </div> <div v-for="item in menuList" :key="item.id" style="flex: 1" :class="{choose: item.status === 1 || item.status === 2}"> <div class="header-item"> <div class="header-item" @click="clickMenu(item)"> <div class="item-content"> <img v-if="item.status === 0" :src="status0Png"> <img v-else-if="item.status === 1" :src="status1Png"> @@ -17,226 +16,62 @@ <span class="text-eclipse" style="margin-left: 5px">{{item.name}}</span> </div> </div> <div v-for="child in item.subMenus" :key="child.id" @click="chooseSubMenu(child,true)"> <div class="down-item" :class="{itemActive: child.status === 1 || child.status === 3, itemPrev: child.status === 2}"> <div class="item-icon-status0" v-if="child.status === 0">{{child.id}}</div> <div class="item-icon-status0 item-icon-status1" v-else-if="child.status === 1 || (selectedObj.status === 3 && child.id === selectedObj.id)">{{child.id}}</div> <div class="item-icon-status0 item-icon-status2" v-else-if="child.status === 2 "><img :src="itemStatus2Png"></div> <div class="item-icon-status0 item-icon-status4 " v-else-if="nextObj.status === 4 && child.id === nextObj.id">{{child.id}}</div> <div class="text-eclipse" style="margin-right: 15%">{{child.name}}</div> <div v-if="child.status === 1 || (selectedObj.status === 1 && child.id ===selectedObj.id)" class="item-icon-status0 item-icon-status2"><img :src="status1Png"></div> <div v-if="nextObj.status === 4 && child.id === nextObj.id" class="item-icon-status0 item-icon-status4" ><img :src="status1Png"></div> </div> <div></div> </div> </div> </div> <div class="content-bottom" @click="clickMenu(false)"></div> </div> </div> <div class="middle" :style="'height:' + middleHeight + 'px'"> <el-card> <div class="card-header">{{selectedObj.id}}- {{selectedObj.name}}</div> <div class="card-content"> <div :style="'height:' + middleContentHeight + 'px'" style="overflow-y: scroll;"> <rickAnalysis ref="riskRef" v-if="selectedObj.id === 1" @getNextStatus="getNextStatus"></rickAnalysis> <contract-manage ref="contractMngRef" v-if="selectedObj.id === 2" @getNextStatus="getNextStatus"></contract-manage> <evaluate-task-notice ref="evaluteRef" v-if="selectedObj.id === 3" @getNextStatus="getNextStatus"></evaluate-task-notice> <evaluate-plan ref="evalPlanRef" v-if="selectedObj.id === 4" @getNextStatus="getNextStatus" :projectId="projectId"></evaluate-plan> <employ-notice-record ref="employNoticeRcdRef" v-if="selectedObj.id === 5" @getNextStatus="getNextStatus" :projectId="projectId"></employ-notice-record> <site-check-rcd ref="siteCheckRcdRef" v-if="selectedObj.id === 6" @getNextStatus="getNextStatus" :projectId="projectId"></site-check-rcd> <inner-review ref="innerReviewRef" v-if="selectedObj.id === 7" @getNextStatus="getNextStatus"></inner-review> <tech-leader-review ref="techReviewRef" v-if="selectedObj.id === 8" @getNextStatus="getNextStatus"></tech-leader-review> <upload-review-rcd ref="uploadReviewRef" v-if="selectedObj.id === 9" @getNextStatus="getNextStatus" :projectId="projectId"></upload-review-rcd> <rate-conclusion ref="rateConRef" v-if="selectedObj.id === 10" @getNextStatus="getNextStatus" :projectId="projectId"></rate-conclusion> <process-ctrl-review ref="proCtrlRef" v-if="selectedObj.id === 11" @getNextStatus="getNextStatus" :projectId="projectId"></process-ctrl-review> <project-archive ref="proArchRef" v-if="selectedObj.id === 12" @getNextStatus="getNextStatus" :projectId="projectId"></project-archive> <sign-confirm ref="signConfirmRef" v-if="selectedObj.id === 13" @getNextStatus="getNextStatus" :projectId="projectId"></sign-confirm> <confirm-end ref="confirmEndRef" v-if="selectedObj.id === 14" @getNextStatus="getNextStatus" :projectId="projectId"></confirm-end> <basic-info ref="basicRef" v-if="selectedObj.id === 1" :projectId="projectId" @getNextStatus="getNextStatus"></basic-info> <expert ref="expertRef" v-if="selectedObj.id === 2" :projectId="projectId" @getNextStatus="getNextStatus"></expert> <approval ref="approvalRef" v-if="selectedObj.id === 3" :projectId="projectId" @getNextStatus="getNextStatus"></approval> <archive ref="archiveRef" v-if="selectedObj.id === 4" :projectId="projectId" @getNextStatus="getNextStatus"></archive> </div> <div style="display: flex;align-items: center;justify-content: center;margin-bottom: -30px;margin-top: 10px"> <el-button type="primary" v-if="selectedObj.id !== 1" style="width: 80px" @click="back">上一步</el-button> <el-button type="warning" style="width: 80px" v-if="(projectStatus === 'add' && selectedObj.status === 1 && selectedObj.id !== 14)||(projectStatus === 'edit' && selectedObj.status === 1 && selectedObj.id !== 14) " @click="save">保存</el-button> <el-button type="warning" style="width: 80px" v-if="(projectStatus === 'edit' && selectedObj.status !== 1 && selectedObj.id !== 13 && selectedObj.id !== 14 && reportProcess != 14) || (projectStatus === 'add' && selectedObj.status !== 1 && selectedObj.id !== 14 && reportProcess != 14) " @click="clickEdit">变更</el-button> <el-button type="warning" style="width: 80px" v-if="selectedObj.id === 14 && selectedObj.status === 1 && reportProcess != 14" @click="confirm">确认完结</el-button> <el-button type="primary" style="width: 80px" v-if="selectedObj.id !== 14" @click="next">下一步</el-button> <el-button type="warning" style="width: 80px" v-if="(projectStatus === 'add' || projectStatus === 'edit') && selectedObj.status ===1 && selectedObj.id !==4 && newProgress !== 4" @click="save">保存</el-button> <el-button type="warning" style="width: 80px" v-if="(projectStatus === 'add' || projectStatus === 'edit') && selectedObj.status !==1 && newProgress !== 4 " @click="clickEdit">变更</el-button> <el-button type="warning" style="width: 80px" v-if="selectedObj.id === 4 && selectedObj.status === 1 && newProgress !== 4" @click="confirm">确认完结</el-button> <el-button type="primary" style="width: 80px" v-if="selectedObj.id !== 4" @click="next">下一步</el-button> </div> </div> </el-card> </div> <div class="bottom"> <el-button type="primary" v-if="selectedObj.id === 3" plain @click="downloadFile"> 评价任务通知书<el-icon class="el-icon--right"><Download /></el-icon> </el-button> <el-button type="primary" v-if="selectedObj.id === 13" plain @click="downloadCommitFile"> 承诺书<el-icon class="el-icon--right"><Download /></el-icon> </el-button> </div> </div> </template> <script setup> import {onMounted, ref} from "vue"; import {ElMessage, ElMessageBox} from "element-plus"; import rickAnalysis from "./components/riskAnalysis.vue" import contractManage from "./components/contractManage.vue" import evaluateTaskNotice from "./components/evaluateTaskNotice.vue" import {Download} from '@element-plus/icons-vue' import projectPng from "@/assets/images/project.png" import status0Png from "@/assets/images/status0.png" import status1Png from "@/assets/images/status1.png" import status2Png from "@/assets/images/status2.png" import itemStatus2Png from "@/assets/images/itemStatus2-1.png" import status0Png from '@/assets/images/status0.png' import status1Png from '@/assets/images/status1.png' import status2Png from '@/assets/images/status2.png' import { useRoute } from 'vue-router' import {getProjectStatus} from "@/api/projectManage/project" import ContractManage from "./components/contractManage"; import EvaluateTaskNotice from "./components/evaluateTaskNotice" import EvaluatePlan from "./components/evaluatePlan"; import EmployNoticeRecord from "./components/employNoticeRecord" import SiteCheckRcd from "./components/siteCheckRcd" import InnerReview from "./components/innerReview" import TechLeaderReview from "./components/techLeaderReview" import UploadReviewRcd from "./components/uploadReviewRcd" import RateConclusion from "./components/rateConclusion" import ProcessCtrlReview from "./components/processCtrlReview" import ProjectArchive from "./components/projectArchive" import SignConfirm from "./components/signConfirm" import ConfirmEnd from "./components/confirmEnd" import Cookies from "js-cookie" import {delMonitor} from "@/api/sysUsers"; const route = useRoute() const menuList = ref([ { id: 'a', name: '风险分析及计划评价', status: 1 , subMenus: [ { id: 1, name: '项目风险分析', status: 1 // 0:未完成,1:选中待完成,2:已完成 ,3:选中已完成,4:未选中待完成 }, { id: 2, name: '合同管理', status: 0 }, { id: 3, name: '评价任务通知', status: 0 }, { id: 4, name: '评价项目计划', status: 0 }, ] }, { id: 'b', name: '现场勘验', status: 0, subMenus: [ { id: 5, name: '从业告知', status: 0 }, { id: 6, name: '现场勘验', status: 0 }, ] }, { id: 'c', name: '项目审核', status: 0, subMenus: [ { id: 7, name: '内部审核', status: 0 }, { id: 8, name: '技术负责人审核', status: 0 }, { id: 9, name: '审核记录', status: 0 }, ] }, { id: 'd', name: '出具报告', status: 0, subMenus: [ { id: 10, name: '评价结论', status: 0 }, { id: 11, name: '过程控制负责人审核', status: 0 } ] }, { id: 'e', name: '项目归档', status: 0, subMenus: [ { id: 12, name: '项目归档', status: 0 }, { id: 13, name: '签字确认', status: 0 }, { id: 14, name: '确认完结', status: 0 }, ] }, ]) const riskRef = ref(); const contractMngRef = ref() const evaluteRef = ref() const evalPlanRef = ref() const employNoticeRcdRef = ref() const siteCheckRcdRef = ref() const innerReviewRef = ref() const techReviewRef = ref() const uploadReviewRef = ref() const rateConRef = ref() const proCtrlRef = ref() const proArchRef = ref() const signConfirmRef = ref() const confirmEndRef = ref() import basicInfo from './components/basicInfo.vue' import expert from './components/chooseExpert.vue' import approval from './components/projectApproval.vue' import archive from './components/projectArchive.vue' import {ElMessage} from "element-plus"; import {get} from "@vueuse/core"; const isShowMenu = ref(false) const selectedObj = ref({}) const nextObj = ref({}) const middleHeight = ref(0) const middleContentHeight = ref(0) const projectId = ref() const projectStatus = ref() const toPath = ref(); const reportProcess = ref(); const projectId = ref() const route = useRoute() const basicRef = ref() const expertRef = ref() const approvalRef = ref() const archiveRef = ref() const newProgress = ref() onMounted(() => { middleHeight.value = window.innerHeight - 250; middleContentHeight.value = window.innerHeight - 385; @@ -246,713 +81,213 @@ middleContentHeight.value = window.innerHeight - 385; }; if(route.query.type !== 'add'){ //编辑or查看 projectStatus.value = route.query.type; projectId.value = route.query.id; toPath.value = route.query.toPath; reportProcess.value = route.query.process; getStatus(projectId.value); console.log('projectId.valu',projectId.value) // toPath.value = route.query.toPath; newProgress.value = route.query.process; getStatus(projectId.value) }else { //新增 projectStatus.value = route.query.type; selectedObj.value = { id: 1, name: '项目风险分析', name: '基本信息', status: 1 } } }); const nextObj = ref({}) const setMenuList = (id) => { menuList.value[id].subMenus.forEach(item => { item.status = 2; }) } const getStatus = async (projectId) => { const res = await getProjectStatus(projectId); if(res.code == 200){ reportProcess.value = res.data let fiveObj = {} if(toPath.value && toPath.value === 'toFive' ){ fiveObj = menuList.value[1].subMenus[0] } if(res.data <= 4 ){ menuList.value[0].subMenus.forEach(item => { if(item.id <= res.data){ item.status = 2 } if(projectStatus.value !== 'view'){ if(item.id === res.data + 1){ item.status = 4; nextObj.value = item; } } if(item.id === res.data){ item.status = 3; selectedObj.value =item; setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } }) menuList.value[0].status = 1; console.log("menu11",menuList.value) } if(res.data >=4 && res.data <=6){ setMenuList(0) if(res.data === 4){ menuList.value[0].subMenus[3].status = 3; } menuList.value[1].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(projectStatus.value !== 'view'){ if(item.id === res.data + 1){ item.status = 4; nextObj.value = item; } } if(item.id === res.data){ item.status = 3; selectedObj.value =item; setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } }) menuList.value[0].status = 2; menuList.value[1].status = 1; console.log("menu22",menuList.value) } if(res.data >= 6 && res.data <= 9){ setMenuList(0); setMenuList(1); if(res.data === 6){ menuList.value[1].subMenus[1].status = 3; } menuList.value[2].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(projectStatus.value !== 'view'){ if(item.id === res.data + 1){ item.status = 4; nextObj.value = item; } } if(item.id === res.data){ item.status = 3; selectedObj.value =item; setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } }) menuList.value[0].status = 2; menuList.value[1].status = 2; menuList.value[2].status = 1; } if(res.data >= 9 && res.data <=11){ setMenuList(0); setMenuList(1); setMenuList(2); if(res.data === 9){ menuList.value[2].subMenus[2].status = 3; } menuList.value[3].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(projectStatus.value !== 'view'){ if(item.id === res.data + 1){ item.status = 4; nextObj.value = item; } } if(item.id === res.data){ item.status = 3; selectedObj.value =item; setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } }) menuList.value[0].status = 2; menuList.value[1].status = 2; menuList.value[2].status = 2; menuList.value[3].status = 1; } if(res.data >= 11){ setMenuList(0); setMenuList(1); setMenuList(2); setMenuList(3); if(res.data === 11){ menuList.value[3].subMenus[1].status = 3; } let twelveObj = {}; let thirteenObj = {}; menuList.value[4].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(projectStatus.value !== 'view'){ if(item.id === res.data + 1){ item.status = 4; nextObj.value = item; } } if(item.id === res.data){ item.status = 3; selectedObj.value =item; setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } menuList.value[0].status = 2; menuList.value[1].status = 2; menuList.value[2].status = 2; menuList.value[3].status = 2; menuList.value[4].status = 1; if(res.data === 14 && res.data === item.id){ item.status = 3; menuList.value[4].status = 2; selectedObj.value =item; } if(toPath.value && toPath.value === 'toTwelve' && item.id === 12){ twelveObj = item; }else if(toPath.value && toPath.value === 'toThirteen' && item.id === 13){ thirteenObj = item; } }) if(toPath.value && toPath.value === 'toTwelve' && twelveObj){ chooseSubMenu(twelveObj,true) }else if(toPath.value && toPath.value === 'toThirteen' && thirteenObj){ chooseSubMenu(thirteenObj,true) } } if(toPath.value && toPath.value === 'toFive' && fiveObj){ chooseSubMenu(fiveObj,true) } }else{ ElMessage.warning(res.message) } } const clickMenu = (val) => { isShowMenu.value = !isShowMenu.value } const downloadFile = () => { const link = document.createElement('a') link.href = 'files/evaluateNotice.doc' link.target = '_blank' link.download = '评价任务通知书.doc' link.click() } const downloadCommitFile = () => { const link = document.createElement('a') link.href = 'files/commitLetter.doc' link.target = '_blank' link.download = '承诺书.doc' link.click() } const sixBtn = ref(""); const chooseSubMenu = (val,flag) => { if(val.status === 0) { setTimeout(() => { isShowMenu.value = false; ElMessage({ type: 'warning', message: '请按顺序操作,未完成步骤无法查看!' }); }, 10) }else if(val.status === 1){ setTimeout(() => { isShowMenu.value = false; selectedObj.value = val; }, 10) }else if(val.status === 2){ setTimeout(() => { isShowMenu.value = false; if((val !== selectedObj.value && nextObj.value === selectedObj.value) || nextObj.value === selectedObj.value){ nextObj.value = selectedObj.value; } if(nextObj.value !== val) { selectedObj.value.status = 2 } selectedObj.value = val; selectedObj.value.status = 3; nextObj.value.status = 4; //跳转 }, 10) if(flag){ setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } }else if (val.status === 3) { setTimeout(() => { isShowMenu.value = false; selectedObj.value = val; //跳转 }, 10) }else if (val.status === 4) { setTimeout(() => { if(val.id === 6){ sixBtn.value = Cookies.get('btn') } console.log('sixBtn.value',sixBtn.value) isShowMenu.value = false; nextObj.value = selectedObj.value; selectedObj.value = val; selectedObj.value.status = 1; nextObj.value.status = 2; nextObj.value = val; //跳转 }, 10) } } const next = () => { if(selectedObj.value.status === 3){ if(selectedObj.value.id + 1 <= 4){ nextMenu(0) }else if (selectedObj.value.id+ 1 >4 && selectedObj.value.id+ 1 <= 6){ nextMenu(1) }else if (selectedObj.value.id+ 1 >6 && selectedObj.value.id+ 1 <= 9){ nextMenu(2) }else if (selectedObj.value.id+ 1 >9 && selectedObj.value.id+ 1 <= 11){ nextMenu(3) }else if (selectedObj.value.id+ 1 >11){ nextMenu(4) } }else if(selectedObj.value.id === 6){ if(selectedObj.value.id === 6) { ElMessageBox.confirm( '确定结束现场勘验?', '提示', const menuList = ref([ { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning', id: 1, name: '基本信息', status: 1 , }, { id: 2, name: '专家选用', status: 0 , }, { id: 3, name: '项目审批', status: 0 , }, { id: 4, name: '项目归档', status: 0 , }, ]) const save = () => { goRouter(selectedObj.value.id,'add') } const goRouter = (selectId,type) => { switch (selectId){ case 1: if(type === 'add' || type === 'clickEdit'){ basicRef.value.riskOpen(type,projectId.value); }else if(projectStatus.value === 'view' || projectStatus.value === 'edit' || projectStatus.value === 'add'){ basicRef.value.riskOpen('detail',projectId.value); } break; case 2: if(type === 'add' || type === 'clickEdit'){ expertRef.value.riskOpen(type,projectId.value); }else if(projectStatus.value === 'view' || projectStatus.value === 'edit' || projectStatus.value === 'add'){ expertRef.value.riskOpen('detail',projectId.value); } break; case 3: if(type === 'add' || type === 'clickEdit'){ approvalRef.value.riskOpen(type,projectId.value); }else if(projectStatus.value === 'view' || projectStatus.value === 'edit' || projectStatus.value === 'add'){ approvalRef.value.riskOpen('detail',projectId.value); } break; case 4: if(type === 'add' || type === 'clickEdit' || type === 'confirm'){ archiveRef.value.riskOpen(type,projectId.value); } else if(projectStatus.value === 'view' || projectStatus.value === 'edit' || projectStatus.value === 'add'){ archiveRef.value.riskOpen('detail',projectId.value); } break; } } const getStatus = (id) => { //projectId 项目id,根据id获取当前状态 projectId.value = Number(id) //调接口 const res = projectId.value //当前项目状态,编辑、查看的时候定位到最新状态 newProgress.value = res menuList.value.forEach(item => { if(projectStatus.value === 'edit'){ if(item.id <= res){ item.status = 2 } if(item.id == res){ selectedObj.value =item setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } if(item.id == res +1){ item.status = 1 } }else if(projectStatus.value === 'view'){ if(item.id <= res){ item.status = 2 } if(item.id == res){ selectedObj.value =item setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } } if(res == 4 && item.id == 4){ item.status = 2 selectedObj.value =item setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } }) .then( async() => { goRouter(selectedObj.value.id,'sixEnd') console.log('menuList.value',menuList.value) } const getNextStatus = (id) => { //projectId 项目id,根据id获取当前状态 projectId.value = Number(id) //调接口 const res = projectId.value newProgress.value = res //定位到下一步状态 menuList.value.forEach(item => { if(item.id <= res){ item.status = 2 }else if(item.id == res + 1){ item.status = 1 selectedObj.value =item } if(res == 4 && item.id == 4){ item.status = 2 selectedObj.value =item } }) } } else { setTimeout(() => { isShowMenu.value = false; const confirm = () => { goRouter(selectedObj.value.id,'confirm') } const back = () => { backMenu() } const backMenu = () => { let nextItem = {} menuList.value.forEach(item => { if(item.id === selectedObj.value.id - 1){ nextItem = item } }) chooseSubMenu(nextItem); } const next = () => { let nextObj = {} if(projectStatus.value == 'view'){ menuList.value.forEach(item => { if(item.id == selectedObj.value.id +1){ nextObj = item } }) } if(selectedObj.value.status != 2 || (projectStatus.value == 'view' && nextObj.status == 0) ){ ElMessage({ type: 'warning', message: '请按顺序操作,未完成步骤无法查看!' }); } else { nextMenu() } } const nextMenu = () => { let nextItem = {} menuList.value.forEach(item => { if(item.id === selectedObj.value.id + 1){ nextItem = item } }) chooseSubMenu(nextItem); } const chooseSubMenu = (val) => { selectedObj.value = val; if(val.status == 2){ setTimeout(() => { goRouter(selectedObj.value.id) }, 10) } // // setTimeout( () => { // goRouter(selectedObj.value.id) // }, 100) } const nextMenu = (id) => { menuList.value[id].subMenus.forEach( item => { if(item.id === selectedObj.value.id + 1){ chooseSubMenu(item,true); } }) } const backMenu = (id) => { menuList.value[id].subMenus.forEach(async item => { if(item.id === selectedObj.value.id - 1){ await chooseSubMenu(item,true); } }) } //上一步——回退(查看详情) const back = () => { if(selectedObj.value.id-1 <= 4){ backMenu(0) }else if (selectedObj.value.id-1 >4 && selectedObj.value.id-1 <= 6){ backMenu(1) }else if (selectedObj.value.id-1 >6 && selectedObj.value.id-1 <= 9){ backMenu(2) }else if (selectedObj.value.id-1 >9 && selectedObj.value.id-1 <= 11){ backMenu(3) }else if (selectedObj.value.id-1 >11){ backMenu(4) } // setTimeout( () => { // goRouter(selectedObj.value.id) // }, 100) } const clickEdit = () => { goRouter(selectedObj.value.id,'clickEdit') } const getNextStatus = async (val) => { projectId.value = val const res = await getProjectStatus(val); if(res.code == 200){ reportProcess.value = res.data if(res.data <=4){ menuList.value[0].subMenus.forEach(item => { if(item.id <= res.data){ item.status = 2 } if(item.id === res.data + 1){ item.status = 1; selectedObj.value =item; nextObj.value = item; } // else if(item.id === res.data ){ // item.status = 3; // selectedObj.value =item; // }else if(item.id === res.data + 1){ // item.status = 4; // nextObj.value = item; // } }) menuList.value[0].status = 1; console.log("menu11",menuList.value) } if(res.data >=4 && res.data<=6){ setMenuList(0) menuList.value[1].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(item.id === res.data + 1){ item.status = 1; selectedObj.value =item; nextObj.value = item; } // if(item.id === res.data){ // item.status = 3; // selectedObj.value =item; // } }) menuList.value[0].status = 2; menuList.value[1].status = 1; console.log("menu22",menuList.value) } if(res.data >= 6 && res.data <= 9){ setMenuList(0); setMenuList(1); menuList.value[2].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(item.id === res.data + 1){ item.status = 1; selectedObj.value =item; nextObj.value = item; } // if(item.id === res.data){ // item.status = 3; // selectedObj.value =item; // } }) menuList.value[0].status = 2; menuList.value[1].status = 2; menuList.value[2].status = 1; } if(res.data >= 9 && res.data <=11){ setMenuList(0); setMenuList(1); setMenuList(2); menuList.value[3].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(item.id === res.data + 1){ item.status = 1; selectedObj.value =item; nextObj.value = item; } // if(item.id === res.data){ // item.status = 3; // selectedObj.value =item; // } }) menuList.value[0].status = 2; menuList.value[1].status = 2; menuList.value[2].status = 2; menuList.value[3].status = 1; } if(res.data >= 11){ setMenuList(0); setMenuList(1); setMenuList(2); setMenuList(3); // if(res.data === 11){ // menuList.value[3].subMenus[1].status = 3; // } menuList.value[4].subMenus.forEach(item => { if(item.id <= res.data) { item.status = 2 } if(item.id === res.data + 1){ item.status = 1; selectedObj.value =item; nextObj.value = item; } // if(item.id === res.data){ // item.status = 3; // selectedObj.value =item; // } menuList.value[0].status = 2; menuList.value[1].status = 2; menuList.value[2].status = 2; menuList.value[3].status = 2; menuList.value[4].status = 1; if(res.data === 14 && res.data === item.id){ item.status = 3; menuList.value[4].status = 2; selectedObj.value =item; } }) const clickMenu = (item) => { if(item.status == 0){ setTimeout(() => { ElMessage({ type: 'warning', message: '请按顺序操作,未完成步骤无法查看!' }); }, 10) } else { chooseSubMenu(item) } } } const save = () => { // if(selectedObj.value.id === 6) { // ElMessageBox.confirm( // '确定结束现场勘验?', // '提示', // { // confirmButtonText: '确定', // cancelButtonText: '取消', // type: 'warning', // }) // .then( async() => { // goRouter(selectedObj.value.id,'add') // }) // }else { goRouter(selectedObj.value.id,'add') // } } const confirm = () => { goRouter(selectedObj.value.id,'confirm') } const goRouter = (val,type) => { switch (val){ case 1: if(type === 'add'){ riskRef.value.riskOpen('add',''); }else if (type === 'clickEdit'){ riskRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ riskRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ riskRef.value.riskOpen('edit',projectId.value); } } console.log("1") break; case 2: if(type === 'add'){ contractMngRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ contractMngRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ contractMngRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ contractMngRef.value.riskOpen('edit',projectId.value); } } console.log("2") break; case 3: if(type === 'add'){ evaluteRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ evaluteRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ evaluteRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ evaluteRef.value.riskOpen('edit',projectId.value); } } console.log("3") break; case 4: if(type === 'add'){ evalPlanRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ evalPlanRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ evalPlanRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ evalPlanRef.value.riskOpen('edit',projectId.value); } } console.log("4") break; case 5: if(type === 'add'){ employNoticeRcdRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ employNoticeRcdRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ employNoticeRcdRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ employNoticeRcdRef.value.riskOpen('edit',projectId.value); } } console.log("5") break; case 6: if(type === 'add'){ siteCheckRcdRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ siteCheckRcdRef.value.riskOpen('clickEdit',projectId.value); }else if (type === 'sixEnd'){ siteCheckRcdRef.value.riskOpen('sixEnd',projectId.value); } else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ siteCheckRcdRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ siteCheckRcdRef.value.riskOpen('edit',projectId.value); } } console.log("6") break; case 7: if(type === 'add'){ innerReviewRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ innerReviewRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ innerReviewRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ innerReviewRef.value.riskOpen('edit',projectId.value); } } console.log("7") break; case 8: if(type === 'add'){ techReviewRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ techReviewRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ techReviewRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ techReviewRef.value.riskOpen('edit',projectId.value); } } console.log("8") break; case 9: if(type === 'add'){ uploadReviewRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ uploadReviewRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ uploadReviewRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ uploadReviewRef.value.riskOpen('edit',projectId.value); } } console.log("9") break; case 10: if(type === 'add'){ rateConRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ rateConRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ rateConRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ rateConRef.value.riskOpen('edit',projectId.value); } } console.log("10") break; case 11: if(type === 'add'){ proCtrlRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ proCtrlRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ proCtrlRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ proCtrlRef.value.riskOpen('edit',projectId.value); } } console.log("11") break; case 12: if(type === 'add'){ proArchRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ proArchRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ proArchRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ proArchRef.value.riskOpen('edit',projectId.value); } } console.log("12") break; case 13: if(type === 'add'){ signConfirmRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ signConfirmRef.value.riskOpen('clickEdit',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ signConfirmRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ signConfirmRef.value.riskOpen('edit',projectId.value); } } console.log("13") break; case 14: if(type === 'add'){ confirmEndRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ confirmEndRef.value.riskOpen('clickEdit',projectId.value); } else if (type === 'confirm'){ confirmEndRef.value.riskOpen('confirm',projectId.value); }else { if(projectStatus.value === 'view' || projectStatus.value === 'add'){ confirmEndRef.value.riskOpen('detail',projectId.value); }else if(projectStatus.value === 'edit'){ confirmEndRef.value.riskOpen('edit',projectId.value); } } console.log("14") break; } } @@ -1131,19 +466,5 @@ display: none; } } .bottom{ height: 60px; background: rgb(255, 255, 255); padding: 9px 10px; } .text-eclipse{ overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: 16px; } } </style>