From ae7eec6950473ce1eb8334ffbd598ac5b08b3734 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期三, 13 十一月 2024 17:28:26 +0800 Subject: [PATCH] 项目管理 --- src/views/safetyReview/projectManage/components/basicInfo.vue | 145 +++ src/views/safetyReview/projectManage/components/chooseExpert.vue | 31 /dev/null | 205 ----- src/views/safetyReview/projectManage/components/projectArchive.vue | 386 --------- src/views/safetyReview/projectManage/process.vue | 1083 +++++----------------------- src/views/safetyReview/projectManage/index.vue | 376 ++------- src/views/safetyReview/projectManage/components/projectApproval.vue | 31 7 files changed, 527 insertions(+), 1,730 deletions(-) diff --git a/src/views/safetyReview/projectManage/components/basicInfo.vue b/src/views/safetyReview/projectManage/components/basicInfo.vue new file mode 100644 index 0000000..5f36145 --- /dev/null +++ b/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> diff --git a/src/views/safetyReview/projectManage/components/chooseExpert.vue b/src/views/safetyReview/projectManage/components/chooseExpert.vue new file mode 100644 index 0000000..ada0125 --- /dev/null +++ b/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> diff --git a/src/views/safetyReview/projectManage/components/confirmEnd.vue b/src/views/safetyReview/projectManage/components/confirmEnd.vue deleted file mode 100644 index 46d0c33..0000000 --- a/src/views/safetyReview/projectManage/components/confirmEnd.vue +++ /dev/null @@ -1,252 +0,0 @@ -<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="6"> - <el-button type="primary" @click="addRectify('add',{})" :disabled="projectType ==='view' || isEnd ">新增整改</el-button> - </el-col> - </el-row> - <el-table :data="state.recitificationList" :border="true" style="margin: 20px 0"> - <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> - <el-table-column label="整改时间" prop="rectifyTime" align="center"></el-table-column> - <el-table-column label="提交时间" prop="updateTime" align="center"></el-table-column> - <el-table-column label="整改说明" prop="reason" align="center"></el-table-column> - <el-table-column label="整改人" prop="rectifyPerson" align="center"></el-table-column> - <el-table-column label="附件" prop="" align="center"> - <template #default="scope"> - <span @click="handlePreview(scope.row.accessoryFile)" style="color: #3b82f6;cursor:pointer">{{scope.row.accessoryFile.originName}}</span> - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-button link type="primary" @click="addRectify('edit',scope.row)" :disabled="projectType ==='view' || isEnd ">编辑</el-button> - <el-button link type="danger" @click="del(scope.row)" :disabled="projectType ==='view' || isEnd ">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-form> - <div class="pag-container"> - <el-pagination - v-model:current-page="state.queryParams.pageNum" - v-model:page-size="state.queryParams.pageSize" - :page-sizes="[10,15,20,25]" - layout="total, sizes, prev, pager, next, jumper" - :total="total" - @size-change="handleSizeChange" - @current-change="handleCurrentChange" - /> - </div> - <confirm-end-dialog ref="confirmRef" @getList="getList(props.projectId)"></confirm-end-dialog> - </div> - -</template> -<script setup> - -import {defineEmits, defineProps, onMounted, reactive, ref} from "vue"; -import {ElMessage, ElMessageBox} from "element-plus"; -import {addRecord, editRecord, getDetail} from "@/api/projectManage/contractMng"; -import Cookies from "js-cookie"; -import { getToken } from "@/utils/auth"; -import confirmEndDialog from './confirmEndDialog.vue' -import {delProject, getAccessoryFile, getProjectStatus} from "@/api/projectManage/project"; -import {delRecitification, doConfirm, getRecognitionList} from "@/api/projectManage/riskAnalysis"; -import axios from "axios"; -import { useRoute } from 'vue-router' -const route = useRoute() -const confirmRef = ref(null); -const emit = defineEmits(["getNextStatus"]); -const props = defineProps(['projectId']) -const state = reactive({ - formData: {}, - queryParams: { - pageNum: 1, - pageSize: 10, - }, - recitificationList: [], -}) - -const isEnd = ref(false) -const total = ref(0); -const isAmin = ref(false) -const formRef = ref(); -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - if(props.projectId){ - state.formData.projectId = props.projectId; - getList(state.formData.projectId); - getStatus(state.formData.projectId); - } - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; - - -}); -const getStatus = async (projectId) => { - const res = await getProjectStatus(projectId); - if(res.code == 200){ - if(res.data === 14){ - isEnd.value = true - } - } -} - - - -const getList = async (val) => { - const res = await getRecognitionList({projectId: val}); - if(res.code == 200){ - state.recitificationList = res.data.list; - total.value = res.data.total; - }else { - ElMessage.warning(res.message) - } -} - -const projectType = ref('') - -const riskOpen = async (type,val) => { - // await getList(val); - projectType.value = route.query.type; - state.formData.projectId = val; - - if(type === 'confirm') { - const res = await doConfirm({projectId: val}); - if (res.code == 200) { - ElMessage.success('保存成功') - Cookies.set('end',true) - isEnd.value = true; - formRef.value.clearValidate(); - emit('getNextStatus', state.formData.projectId); - } else { - ElMessage.warning(res.message) - } - } -} - -const addRectify = (type,val)=>{ - val.projectId = state.formData.projectId; - confirmRef.value.openDialog(type,val) -} - -const delRectify = (index)=>{ - state.rectifyList.splice(index,1) -} -const handleSizeChange = (val) => { - state.queryParams.pageNum = 1; - state.queryParams.pageSize = val - getList(props.projectId) -} -const handleCurrentChange = (val) => { - state.queryParams.pageNum = val - getList(props.projectId) -} - -// 图片上传 -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) => { - if(res.code == 200){ - // state.registerForm.agency.reportPath = res.data.path - }else{ - ElMessage({ - type: 'warning', - message: '文件上传失败' - }) - } -} - -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 - }) - } -} -const handlePreview = (file) => { - const url = import.meta.env.VITE_APP_BASE_API + '/' + file.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.originName); - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); - } else { - this.$message.error('获取文件失败') - } - }) -} -const del = (val) => { - ElMessageBox.confirm( - '确定删除此条数据?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then( async() => { - const res = await delRecitification(val) - if(res.code == 200){ - ElMessage.success('数据删除成功') - getList(props.projectId) - }else{ - ElMessage.warning(res.message) - } - }) -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} -.pag-container{ - float: right; - margin-top: 20px; -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/confirmEndDialog.vue b/src/views/safetyReview/projectManage/components/confirmEndDialog.vue deleted file mode 100644 index ef1a404..0000000 --- a/src/views/safetyReview/projectManage/components/confirmEndDialog.vue +++ /dev/null @@ -1,233 +0,0 @@ -<template> - <div class="notice"> - <el-dialog - v-model="dialogVisible" - :title="state.title" - width="550px" - :before-close="handleClose" - > - <el-form :model="state.form" size="default" ref="formRef" :rules="state.formRules" label-width="110px" > - <el-form-item label="整改时间:" prop="rectifyTime" > - <el-date-picker - style="width: 100%" - v-model="state.form.rectifyTime" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="请选择日期" - size="large" - /> - </el-form-item> - <el-form-item label="整改人:" prop="rectifyPerson"> - <el-input v-model.trim="state.form.rectifyPerson" show-word-limit type="text" size="large" placeholder="请输入整改人" /> - </el-form-item> - <el-form-item label="整改说明:" prop="reason"> - <el-input v-model.trim="state.form.reason" show-word-limit type="text" size="large" placeholder="请输入整改说明"/> - </el-form-item> - <el-form-item prop="fileList"> - <el-upload accept=".pdf" - :action="state.uploadUrl" - :disabled="state.disabled" - :headers="state.header" - method="post" - :limit="state.imgLimit" - :before-upload="beforeUpload" - :on-success="handleAvatarSuccess" - v-model:file-list="state.form.fileList" - :on-remove="handleRemove" - :data="state.uploadData" - :on-preview="handlePreview" - > - <el-button type="primary">附件上传</el-button> - <template #tip> - <div class="el-upload__tip"> - 只能上传pdf类型,且只能上传一个 - </div> - </template> - </el-upload> - - </el-form-item> - </el-form> - <template #footer > - <span class="dialog-footer"> - <el-button @click="handleClose" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> - </span> - </template> - </el-dialog> - </div> -</template> -<script setup> -import {defineEmits, nextTick, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import axios from "axios"; -import {getToken} from "@/utils/auth"; -import {delAccessoryFile} from "@/api/projectManage/project"; -import {addRate, addRecitification, editRecitification} from "@/api/projectManage/riskAnalysis"; -const emit = defineEmits(["getList"]); -const formRef = ref(null) -const state = reactive({ - title: '', - form: { - id: null, - }, - formRules:{ - rectifyTime: [{ required: true, message: '请选择整改时间', trigger: 'blur' }], - rectifyPerson: [{ required: true, message: '请输入整改人', trigger: 'blur' }], - fileList: [{ required: true, message: '请上传附件', trigger: 'blur' }], - reason:[{ required: true, message: '请输入整改说明', trigger: 'blur' }], - }, - imgLimit: 1, - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', - header: { - Authorization: getToken() - }, - uploadData: { - moduleType: 11 - }, - -}) -const dialogVisible = ref(false) - -const openDialog = (type, value) => { - state.uploadData.projectId = value.projectId; - state.title = type === 'add' ? '新增' : '编辑' ; - if(state.title === '编辑'){ - state.form = value; - state.form.fileList = [value.accessoryFile] - state.form.fileList[0].name = value.accessoryFile.originName - } - dialogVisible.value = true -} - -const beforeUpload = (file) => { - let fileType = file.name.substring(file.name.lastIndexOf(".") + 1); - if (fileType === 'pdf') { - } else { - ElMessage.error("文件类型必须为pdf格式") - return false - } -} -const handleAvatarSuccess = (res) => { - if(res.code === 200){ - console.log("file",state.form.fileList) - ElMessage({ - type: 'success', - message: '文件上传成功' - }) - }else { - ElMessage({ - type: 'warning', - 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 onSubmit = async () => { - const valid = await formRef.value.validate(); - if(valid){ - state.form.fileId = state.form.fileList ? state.form.fileList[0].response ? state.form.fileList[0].response.data.id : state.form.fileList[0].id : ''; - if(state.title === '新增'){ - const {id,fileList, ...data} = JSON.parse(JSON.stringify(state.form)) - data.projectId = state.uploadData.projectId; - console.log("Add",data) - const res = await addRecitification(data); - if (res.code == 200) { - ElMessage.success('保存成功') - handleClose(); - emit('getList'); - } else { - ElMessage.warning(res.message) - } - }else if(state.title === '编辑'){ - const {ileList, ...data} = JSON.parse(JSON.stringify(state.form)) - data.projectId = state.uploadData.projectId; - const res = await editRecitification(data); - if (res.code == 200) { - ElMessage.success('编辑成功') - handleClose(); - emit('getList'); - } else { - ElMessage.warning(res.message) - } - } - } -} -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 - }) - } - } -} - -const handleClose = () => { - state.form = { - id: null, - rectifyTime: '', - rectifyPerson: '', - reason: '', - fileList: [] - } - formRef.value.clearValidate(); - dialogVisible.value = false; - -} -defineExpose({ - openDialog -}); -</script> - -<style scoped lang="scss"> - -</style> diff --git a/src/views/safetyReview/projectManage/components/contractManage.vue b/src/views/safetyReview/projectManage/components/contractManage.vue deleted file mode 100644 index 97e9064..0000000 --- a/src/views/safetyReview/projectManage/components/contractManage.vue +++ /dev/null @@ -1,137 +0,0 @@ -<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="6"> - <el-form-item prop="contractSignDate" 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="contractMoney"> - <template #label> - 项目合同额<span style="font-size: 13px;color: red;font-weight: normal;display: inline-block;margin-left: 6px" @input="state.formData.contractMoney= state.formData.contractMoney.replace(/[^\d|\.]/g,'')" - >预估合同金额,归档阶段可以进行修改。仅支持数字,单位万元,小数点后最多两位,数值范围(0.01-999.99)</span> - </template> - <el-input - - v-model.trim="state.formData.contractMoney" - size="large" - placeholder="请输入项目合同额" - @input="state.formData.contractMoney= state.formData.contractMoney.replace(/[^0-9.\/\-]/g,'')" - - > - <template #append>万元</template> - </el-input> - </el-form-item> - </el-col> - </el-row> - <el-form-item label="项目合同额说明"> - <el-input - v-model="state.formData.contractIntroduction" - :autosize="{ minRows: 6 }" - maxlength="100" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - </el-form> - </div> - -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {addRecord, editRecord, getDetail} from "@/api/projectManage/contractMng"; -import Cookies from "js-cookie"; -const emit = defineEmits(["getNextStatus"]); - -const state = reactive({ - formData: { - id: '', - projectId: null, - contractSignDate: '', - contractMoney: '', - contractIntroduction: '' - }, - rules: { - contractSignDate: [{required: true, message: '请选择合同签订日期', trigger: 'blur'}], - contractMoney: [{required: true, message: '请输入项目合同额', trigger: 'blur'}] - } -}) - -const isAmin = ref(false) -const formRef = ref(); -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } -}); - -const riskOpen = async (type,val) => { - state.formData.projectId = val; - if(type === 'detail' || type === 'edit' ){ - const res = await getDetail({projectId: val}); - if(res.code == 200){ - if(res.data){ - state.formData = res.data; - } - }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(type === 'add'){ - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await addRecord(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', state.formData.projectId); - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await editRecord(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/deviceDialog.vue b/src/views/safetyReview/projectManage/components/deviceDialog.vue deleted file mode 100644 index 0419b10..0000000 --- a/src/views/safetyReview/projectManage/components/deviceDialog.vue +++ /dev/null @@ -1,140 +0,0 @@ -<template> - <div class="notice"> - <el-dialog - v-model="dialogVisible" - :title="title" - width="500px" - :before-close="handleClose" - > - <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-position="top"> - <el-form-item label="设备名称:" prop="deviceName"> - <el-input v-model.trim="state.form.deviceName" maxlength="30" show-word-limit type="text" size="large"/> - </el-form-item> - <el-form-item label="开始时间:" prop="startDate"> - <el-date-picker - style="width: 100%" - v-model="state.form.startDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - <el-form-item label="结束时间:" prop="endDate"> - <el-date-picker - style="width: 100%" - v-model="state.form.endDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="handleClose" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> - </span> - </template> - </el-dialog> - </div> -</template> -<script setup> -import {defineProps, nextTick, reactive, ref, toRefs} from 'vue' -import {ElMessage} from "element-plus"; -import {addDevice, editDevice} from "@/api/projectManage/evaPlan" -const dialogVisible = ref(false) -const title = ref("") -const busRef = ref() -const props = defineProps(['workList','typeList']) -const emit = defineEmits(["getList"]) -const state = reactive({ - form: { - id: null, - projectId: null, - deviceName: '', - startDate: '', - endDate: '' - }, - formRules:{ - deviceName: [{ required: true, message: '请填写设备名称', trigger: 'blur' }], - startDate: [{ required: true, message: '请选择开始日期', trigger: 'blur' }], - endDate: [{ required: true, message: '请选择结束日期', trigger: 'blur' }] - } -}) - -const openDialog = async (type, value,projectId) => { - title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' - state.form.projectId = projectId - if(type == 'add'){ - nextTick(()=>{ - busRef.value.resetFields() - }) - }else if(type === 'edit') { - state.form = JSON.parse(JSON.stringify(value)) - } - dialogVisible.value = true; -} - -const onSubmit = async () => { - const valid = await busRef.value.validate(); - if(valid){ - if(title.value === '新增'){ - const {id,...data} = state.form - const res = await addDevice(data) - if(res.code === 200){ - ElMessage({ - type: 'success', - message: '新增成功' - }); - }else{ - ElMessage.warning(res.message) - } - emit("getList") - busRef.value.clearValidate(); - busRef.value.resetFields() - dialogVisible.value = false; - }else if(title.value === '编辑'){ - const {...data} = state.form - const res = await editDevice(data) - if(res.code === 200){ - ElMessage({ - type: 'success', - message: '修改成功' - }); - }else{ - ElMessage.warning(res.message) - } - emit("getList") - busRef.value.clearValidate(); - busRef.value.resetFields() - dialogVisible.value = false; - } - } -} - -const handleClose = () => { - busRef.value.clearValidate(); - busRef.value.resetFields() - dialogVisible.value = false; -} - -defineExpose({ - openDialog -}); - -</script> - -<style scoped lang="scss"> -.notice{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } - .file { - display: flex; - flex-direction: column; - align-items: flex-start; - } -} -</style> diff --git a/src/views/safetyReview/projectManage/components/employNoticeRecord.vue b/src/views/safetyReview/projectManage/components/employNoticeRecord.vue deleted file mode 100644 index 4a7ae99..0000000 --- a/src/views/safetyReview/projectManage/components/employNoticeRecord.vue +++ /dev/null @@ -1,206 +0,0 @@ -<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="12"> - <el-form-item prop="timeRange" label="技术服务期限"> - <el-date-picker - v-model="state.formData.timeRange" - style="width: 100%" - type="daterange" - range-separator="至" - start-placeholder="开始日期" - end-placeholder="结束日期" - value-format="YYYY-MM-DD 00:00:00" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="investigationPlanDate" label="计划现场勘验时间"> - <el-date-picker - style="width: 100%" - v-model="state.formData.investigationPlanDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="18"> - <div style="display: flex;align-items: center">项目组成员<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">金属、非金属矿及其他矿采选业:安全、机械、电气、采矿、通风、地质、水工结构</span></div> - </el-col> - </el-row> - <el-table :data="state.planPersons" :border="true" style="margin: 20px 0"> - <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> - <el-table-column label="评价组成员" prop="person.name" align="center" :show-overflow-tooltip="true"> - <template #default="scope"> - <span v-if="scope.row.jobType === 2">{{ scope.row.person.name }} (组长)</span> - <span v-else>{{scope.row.person.name}}</span> - </template> - </el-table-column> - <el-table-column label="专业能力/资格证书" prop="person.certificateNo" align="center" :show-overflow-tooltip="true"> - <template #default="scope"> - {{ getCertNo(scope.row) }} - </template> - </el-table-column> - <el-table-column label="承担工作" prop="work" align="center" class-name="small-padding fixed-width"></el-table-column> - <el-table-column label="承诺后期前往现场勘验" prop="laterPromise" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - {{(scope.row.laterPromise==1 || scope.row.laterPromise==true)?'是':'否'}} - </template> - </el-table-column> - <el-table-column label="未到现场勘验原因" prop="reason" align="center" class-name="small-padding fixed-width"></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.informed" size="large" @change="(value)=>changePerson(value,scope.row)" :disabled="projectType==='view'"> - <el-radio :label="1" size="large">是</el-radio> - <el-radio :label="0" size="large">否</el-radio> - </el-radio-group> - </template> - </el-table-column> - </el-table> - </el-form> - </div> -</template> -<script setup> - -import {defineEmits, defineProps, onMounted, reactive, ref, watchEffect} from "vue" -import {ElMessage} from "element-plus" -import {Search} from '@element-plus/icons-vue' -import {addWorkRecord, editWorkRecord, getWorkDetail} from "@/api/projectManage/employNoticeRcd" -import {getWorks, editWorks} from "@/api/projectManage/evaPlan" -import Cookies from "js-cookie" -const props = defineProps(['projectId']) -const emit = defineEmits(["getNextStatus"]) -import { useRoute } from 'vue-router' -const route = useRoute() -const state = reactive({ - formData: { - id: null, - projectId: null, - timeRange: [], - serviceStartDate: '', - serviceEndDate: '', - investigationPlanDate: '' - }, - projectId: null, - planPersons: [], - rules: { - timeRange: [{required: true, message: '请选择技术服务期限', trigger: 'blur'}], - investigationPlanDate: [{required: true, message: '请选择计划现场勘验时间', trigger: 'blur'}] - } -}) - -const isAmin = ref(false) -const formRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - if(props.projectId){ - getWorksList(props.projectId) - } - -}); - -const projectType = ref(''); -const riskOpen = async (type,val) => { - state.formData.projectId = val - state.projectId = val - projectType.value = route.query.type; - // await getWorksList(val) - if(type === 'detail' || type === 'edit' ){ - const res = await getWorkDetail({projectId: val}) - if(res.code == 200){ - state.formData = JSON.parse(JSON.stringify(res.data)) - state.formData.timeRange = [state.formData.serviceStartDate,state.formData.serviceEndDate] - }else { - ElMessage.warning(res.message) - } - } - if(type === 'add' || type === 'clickEdit') { - const valid = await formRef.value.validate(); - if(valid){ - if (isAmin.value) { - ElMessage.warning("当前用户暂无权限"); - return; - } - state.formData.serviceStartDate = state.formData.timeRange[0] - state.formData.serviceEndDate = state.formData.timeRange[1] - if(type === 'add'){ - const {timeRange,id,...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await addWorkRecord(data) - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', state.projectId); - } else { - ElMessage.warning(res.message) - } - - }else if(type === 'clickEdit'){ - const {timeRange, ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await editWorkRecord(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -const getWorksList = async (id) =>{ - const works = await getWorks({projectId: id ? id : props.projectId}) - if(works.code == 200){ - state.planPersons = works.data - }else { - ElMessage.warning(works.message) - } -} - -const getCertNo = (row)=>{ - const obj = JSON.parse(row.person.certificateNo) - const noArr = Object.values(obj) - return row.person.majorNames.map((item,index)=>{ - return item + '(' + noArr[index] + ')' - }).join(',') -} - -const changePerson = async (value,row)=>{ - const params = { - id: row.id, - projectId: row.projectId, - informed: value - } - const res = await editWorks(params) - if(res.code === 200){ - console.log(res.message) - }else{ - ElMessage.warning(res.message) - } - await getWorksList(props.projectId) -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/evaluatePlan.vue b/src/views/safetyReview/projectManage/components/evaluatePlan.vue deleted file mode 100644 index d0300d5..0000000 --- a/src/views/safetyReview/projectManage/components/evaluatePlan.vue +++ /dev/null @@ -1,521 +0,0 @@ -<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="6"> - <el-form-item prop="startDate" label="评价开始时间"> - <el-date-picker - style="width: 100%" - v-model="state.formData.startDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="endDate" label="评价结束时间"> - <el-date-picker - style="width: 100%" - v-model="state.formData.endDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="auser.name" label="机构评价负责人"> - <el-input - v-model.trim="state.formData.auser.name" - size="large" - placeholder="请选择机构评价负责人" - @focus="openExperts('机构评价负责人')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('机构评价负责人')"/> - </template> - </el-input> - </el-form-item> - </el-col> - </el-row> - <el-row> - <el-col :span="18"> - <div style="display: flex;align-items: center">评价日程安排<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">不涉及的日程安排日期可不填</span></div> - </el-col> - </el-row> - <el-table :data="state.formData.estimateSchedules" :border="true" style="margin: 20px 0"> - <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> - <el-table-column label="评价日程安排" prop="name" align="center" :show-overflow-tooltip="true"/> - <el-table-column label="开始时间" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-date-picker - style="width: 100%" - v-model="scope.row.startDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </template> - </el-table-column> - <el-table-column label="结束时间" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-date-picker - style="width: 100%" - v-model="scope.row.endDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </template> - </el-table-column> - </el-table> - <el-row> - <el-col :span="18"> - <div style="display: flex;align-items: center">项目组成员<el-icon style="margin-left: 10px;margin-right: 4px"><InfoFilled /></el-icon><span style="font-size: 13px">金属、非金属矿及其他矿采选业:安全、机械、电气、采矿、通风、地质、水工结构</span></div> - </el-col> - <el-col :span="6"> - <div style="width: 100%;display: flex;justify-content: right"> - <el-button type="primary" icon="Plus" @click="openWorksDialog('add',{})" :disabled="projectType==='view' || isEnd">添加成员</el-button> - </div> - </el-col> - </el-row> - <el-table :data="state.planPersons" :border="true" style="margin: 20px 0"> - <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> - <el-table-column label="评价组成员" prop="person.name" align="center" :show-overflow-tooltip="true"> - <template #default="scope"> - <span v-if="scope.row.jobType === 2">{{ scope.row.person.name }} (组长)</span> - <span v-else>{{scope.row.person.name}}</span> - </template> - </el-table-column> - <el-table-column label="专业能力/资格证书" prop="person.certificateNo" align="center" :show-overflow-tooltip="true"> - <template #default="scope"> - {{ getCertNo(scope.row) }} - </template> - </el-table-column> -<!-- <el-table-column label="专业能力" header-align="center" :show-overflow-tooltip="true"></el-table-column>--> - <el-table-column label="承担工作" prop="work" align="center" class-name="small-padding fixed-width"></el-table-column> - <el-table-column label="承诺后期前往现场勘验" prop="laterPromise" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - {{(scope.row.laterPromise==1 || scope.row.laterPromise==true)?'是':'否'}} - </template> - </el-table-column> - <el-table-column label="未到现场勘验原因" prop="reason" align="center" class-name="small-padding fixed-width"></el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-button link @click="openWorksDialog('edit',scope.row)" :disabled="projectType==='view' || isEnd">修改</el-button> - <el-button link type="danger" @click="delMember(scope.row)" :disabled="projectType==='view' || isEnd">删除</el-button> - </template> - </el-table-column> - </el-table> - <el-row> - <el-col :span="18"> - <div style="display: flex;align-items: center">所需仪器设备</div> - </el-col> - <el-col :span="6"> - <div style="width: 100%;display: flex;justify-content: right"> - <el-button type="primary" icon="Plus" @click="openDeviceDialog('add',{})" :disabled="projectType==='view' || isEnd">添加设备</el-button> - </div> - </el-col> - </el-row> - <el-table :data="state.devices" :border="true" style="margin: 20px 0"> - <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> - <el-table-column label="设备名称" prop="deviceName" align="center" class-name="small-padding fixed-width"/> - <el-table-column label="开始时间" prop="startDate" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - {{scope.row.startDate.substring(0,10)}} - </template> - </el-table-column> - <el-table-column label="结束时间" prop="endDate" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - {{scope.row.endDate.substring(0,10)}} - </template> - </el-table-column> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width"> - <template #default="scope"> - <el-button link @click="openDeviceDialog('edit',scope.row)" :disabled="projectType==='view' || isEnd">修改</el-button> - <el-button link type="danger" @click="delDeviceItem(scope.row)" :disabled="projectType==='view' || isEnd">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-form> - <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> - <works-dialog ref="worksRef" @getList="getWorksList" :workList="state.workList" :typeList="state.jobTypeList"></works-dialog> - <device-dialog ref="deviceRef" @getList="getDeviceList"></device-dialog> - </div> -</template> -<script setup> - -import {defineEmits, defineProps, onMounted, reactive, ref} from "vue" -import {ElMessage, ElMessageBox} from "element-plus" -import {Search} from '@element-plus/icons-vue' -import {addRecord, editRecord, getDetail, getWorks, getDevice, delWorks, delDevice} from "@/api/projectManage/evaPlan" -import Cookies from "js-cookie" -import ExpertsList from "./expertsList" -import WorksDialog from './worksDialog' -import DeviceDialog from './deviceDialog' -const props = defineProps(['projectId']) -const emit = defineEmits(["getNextStatus"]) -import { useRoute } from 'vue-router' -const route = useRoute() -const state = reactive({ - formData: { - id: null, - projectId: null, - auser: { - name: '' - }, - auserId: null, - estimateSchedules: [ - { - id: null, - sort: 1, - name: '勘验准备', - startDate: '', - endDate: '', - scheduleType: 1, - projectId: null - }, - { - id: null, - sort: 2, - name: '现场勘验', - startDate: '', - endDate: '', - scheduleType: 2, - projectId: null - }, - { - id: null, - sort: 3, - name: '材料分析整理', - startDate: '', - endDate: '', - scheduleType: 3, - projectId: null - }, - { - id: null, - sort: 4, - name: '评价报告编写', - startDate: '', - endDate: '', - scheduleType: 4, - projectId: null - }, - { - id: null, - sort: 5, - name: '整改情况现场确认', - startDate: '', - endDate: '', - scheduleType: 5, - projectId: null - }, - { - id: null, - sort: 6, - name: '整理评价报告', - startDate: '', - endDate: '', - scheduleType: 6, - projectId: null - }, - { - id: null, - sort: 7, - name: '报告审核', - startDate: '', - endDate: '', - scheduleType: 7, - projectId: null - }, - { - id: null, - sort: 8, - name: '报告修改', - startDate: '', - endDate: '', - scheduleType: 8, - projectId: null - }, - ], - planPersons: [], - devices: [], - startDate: '', - endDate: '' - }, - projectId: null, - planPersons: [], - devices: [], - rules: { - "auser.name": [{required: true, message: '请填写机构评价负责人', trigger: 'change'}], - startDate: [{required: true, message: '请选择评价开始时间', trigger: 'change'}], - endDate: [{required: true, message: '请选择评价结束时间', trigger: 'change'}] - }, - workList: [ - {value: '报告编制',label: '报告编制'}, - {value: '文字校对',label: '文字校对'}, - {value: '现场勘验',label: '现场勘验'}, - {value: '资料收集整理',label: '资料收集整理'} - ], - jobTypeList: [ - {value: 1,label: '普通人员'}, - {value: 2,label: '组长'}, - ] -}) - -const isAmin = ref(false) -const formRef = ref() -const expertsListRef = ref() -const worksRef = ref() -const deviceRef = ref() -onMounted(async () => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true - } - if(props.projectId){ - await getWorksList(props.projectId) - await getDeviceList(props.projectId) - } - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; -}) - -const projectType = ref(''); -const isEnd = ref('') -const riskOpen = async (type,val) => { - state.formData.projectId = val - isEnd.value = Cookies.get('end') - state.projectId = val - projectType.value = route.query.type; - for(let i of state.formData.estimateSchedules){ - i.projectId = val - } - // await getWorksList(val) - // await getDeviceList(val) - if(type === 'detail' || type === 'edit' ){ - const res = await getDetail({projectId: val}) - if(res.code == 200){ - state.formData = JSON.parse(JSON.stringify(res.data)) - }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(type === 'add'){ - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - - const params = Object.assign({}, state.formData.estimateSchedules); - let i = 0 - - for (const key in params) { - if ((params[key].startDate == '' || params[key].startDate == null ) && (params[key].endDate == '' || params[key].endDate == null)) { - delete params[key].startDate; - delete params[key].endDate; - i++ - } - - } - console.log('data',params) - const finData = Object.entries(params).map(([key, value]) => ({ - ...value, - })); - if(i == finData.length){ - ElMessage.warning("请选择至少一个的日程安排日期"); - return; - } - try { - finData.forEach(item =>{ - // debugger - console.log(item.endDate,'item.endDate') - if(item.startDate && (item.startDate !='' || item.startDate !=null)){ - if(item.endDate =='' || item.endDate ==null){ - ElMessage.warning("请完善涉及的日程安排结束日期"); - throw new Error('Loop stopped') - } - } - if(item.endDate && (item.endDate !='' || item.endDate !=null)){ - if(item.startDate =='' || item.startDate ==null){ - ElMessage.warning("请完善涉及的日程安排开始日期"); - throw new Error('Loop stopped') - } - } - }) - }catch (e) { - throw new Error(e) - } - - data.estimateSchedules = finData - - const res = await addRecord(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', state.formData.projectId); - - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - const params = Object.assign({}, state.formData.estimateSchedules); - let i = 0 - for (const key in params) { - if (params[key].startDate == '' && params[key].endDate == '') { - delete params[key].startDate; - delete params[key].endDate; - i++; - } - } - const finData = Object.entries(params).map(([key, value]) => ({ - ...value, - })); - if(i == finData.length){ - ElMessage.warning("请选择至少一个的日程安排日期"); - return; - } - try { - finData.forEach(item =>{ - // debugger - console.log(item.endDate,'item.endDate') - if(item.startDate && (item.startDate !='' || item.startDate !=null)){ - if(item.endDate =='' || item.endDate ==null){ - ElMessage.warning("请完善涉及的日程安排结束日期"); - throw new Error('Loop stopped') - } - } - if(item.endDate && (item.endDate !='' || item.endDate !=null)){ - if(item.startDate =='' || item.startDate ==null){ - ElMessage.warning("请完善涉及的日程安排开始日期"); - - throw new Error('Loop stopped') - } - } - }) - }catch (e) { - throw new Error(e) - } - data.estimateSchedules = finData - const res = await editRecord(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -const getWorksList = async (id) =>{ - const works = await getWorks({projectId: id ? id : props.projectId}) - if(works.code == 200){ - state.planPersons = works.data - }else { - ElMessage.warning(works.message) - } -} - -const getDeviceList = async (id) =>{ - const device = await getDevice({projectId: id ? id : props.projectId}) - if(device.code == 200){ - state.devices = device.data - }else { - ElMessage.warning(device.message) - } -} - -const getCertNo = (row)=>{ - const obj = JSON.parse(row.person.certificateNo) - const noArr = Object.values(obj) - return row.person.majorNames.map((item,index)=>{ - return item + '(' + noArr[index] + ')' - }).join(',') -} - -const openExperts = (type) =>{ - expertsListRef.value.openDialog(type) -} - -const getSelected = (type,obj)=>{ - state.formData.auser.name = obj.name - state.formData.auserId = obj.id -} - -const openWorksDialog = (type,data)=>{ - worksRef.value.openDialog(type,data,props.projectId) -} - -const openDeviceDialog = (type,data)=>{ - deviceRef.value.openDialog(type,data,props.projectId) -} - -const delMember = (row)=>{ - ElMessageBox.confirm( - '确定删除此条数据?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then( async() => { - const res = await delWorks(row.id) - if(res.code == 200){ - ElMessage.success('数据删除成功') - await getWorksList() - }else{ - ElMessage.warning(res.message) - } - }) -} - -const delDeviceItem = (row)=>{ - console.log(row,'row') - ElMessageBox.confirm( - '确定删除此条数据?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then( async() => { - const res = await delDevice(row.id) - if(res.code == 200){ - ElMessage.success('数据删除成功') - await getDeviceList() - }else{ - ElMessage.warning(res.message) - } - }) -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue b/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue deleted file mode 100644 index 21f2034..0000000 --- a/src/views/safetyReview/projectManage/components/evaluateTaskNotice.vue +++ /dev/null @@ -1,197 +0,0 @@ -<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="6"> - <el-form-item prop="leader.name" label="项目负责人"> - <el-input - v-model.trim="state.formData.leader.name" - size="large" - placeholder="请选择项目负责人" - @focus="openExperts('项目负责人')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('项目负责人')"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="linkMan" label="联系人"> - <el-input - v-model.trim="state.formData.linkMan" - size="large" - placeholder="请选择联系人" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="linkPhone" label="联系电话"> - <el-input - v-model.trim="state.formData.linkPhone" - size="large" - placeholder="请选择联系电话" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item label="传真"> - <el-input - v-model.trim="state.formData.fax" - size="large" - placeholder="请选择传真" - > - </el-input> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="6"> - <el-form-item label="任务下达人"> - <el-input - v-model.trim="state.formData.transmitPerson" - size="large" - placeholder="请选择任务下达人" - @focus="openExperts('任务下达人')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('任务下达人')"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="transmitDate" label="任务下达时间"> - <el-date-picker - style="width: 100%" - v-model="state.formData.transmitDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - </el-row> - </el-form> - <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> - </div> -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {addRecord, editRecord, getDetail} from "@/api/projectManage/evaTaskNotice"; -import Cookies from "js-cookie" -import ExpertsList from "./expertsList"; -const emit = defineEmits(["getNextStatus"]); - -const state = reactive({ - formData: { - id: '', - projectId: null, - leader: { - name: '' - }, - fax: '', - leaderId: null, - linkMan: '', - transmitPerson: '', - transmitDate: '' - }, - rules: { - "leader.name": [{required: true, message: '请选择项目负责人', trigger: 'change'}], - linkMan: [{required: true, message: '请输入联系人', trigger: 'blur'}], - linkPhone: [{required: true, message: '请输入联系电话', trigger: 'blur'}], - transmitDate: [{required: true, message: '请选择任务下达时间', trigger: 'change'}] - } -}) -const props = { - expandTrigger: 'hover', - value: 'name', - label: 'name' -} -const isAmin = ref(false) -const formRef = ref() -const expertsListRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } -}) - -const riskOpen = async (type,val) => { - state.formData.projectId = val - if(type === 'detail' || type === 'edit' ){ - const res = await getDetail({projectId: val}); - if(res.code == 200){ - state.formData = res.data; - }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(type === 'add'){ - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await addRecord(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', state.formData.projectId); - - } else { - ElMessage.warning(res.message) - } - }else{ - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await editRecord(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -const openExperts = (type) =>{ - expertsListRef.value.openDialog(type) -} - -const getSelected = (type,obj)=>{ - if(type == '项目负责人'){ - state.formData.leader.name = obj.name - state.formData.leaderId = obj.id - } - if(type == '任务下达人'){ - state.formData.transmitPerson = obj.name - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/expertsList.vue b/src/views/safetyReview/projectManage/components/expertsList.vue deleted file mode 100644 index 2a65f18..0000000 --- a/src/views/safetyReview/projectManage/components/expertsList.vue +++ /dev/null @@ -1,344 +0,0 @@ -<template> - <div class="notice"> - <el-dialog - v-model="dialogVisible" - :title="title" - width="60%" - > - <el-form :model="queryParams" :inline="true" label-width="90px"> - <el-form-item label="专业类别"> - <el-radio-group v-model="queryParams.expertType"> - <el-radio-button label="">全部</el-radio-button> - <el-radio-button label="1">安全评价</el-radio-button> - <el-radio-button label="2">检验检测</el-radio-button> - </el-radio-group> - </el-form-item> - <el-form-item label="姓名"> - <el-input - v-model.trim="queryParams.name" - placeholder="姓名" - style="width: 250px" - /> - </el-form-item> - <el-form-item label="手机号"> - <el-input - v-model.trim="queryParams.phone" - placeholder="手机号" - style="width: 250px" - /> - </el-form-item> - <el-form-item label="评价师等级"> - <el-select v-model="queryParams.level" style="width: 250px" placeholder="评价师等级" > - <el-option - v-for="item in levelList" - :key="item.id" - :label="item.name" - :value="item.name" - /> - </el-select> - </el-form-item> - <el-form-item label="专业方向"> - <el-select v-model="queryParams.major" clearable value-key="id" style="width: 250px" placeholder="专业方向"> - <el-option - v-for="item in majorList" - :key="item.id" - :label="item.label" - :value="item.id" - /> - </el-select> - </el-form-item> - <el-form-item label="职务"> - <el-select v-model="queryParams.post" clearable style="width: 250px" placeholder="请选择职务"> - <el-option - v-for="item in postList" - :key="item.id" - :label="item.name" - :value="item.name" - /> - </el-select> - </el-form-item> - <el-form-item> - <el-button type="primary" icon="Search" @click="search">搜索</el-button> - <el-button icon="Refresh" @click="research">重置</el-button> - </el-form-item> - </el-form> - <el-table v-loading="loading" ref="tableRef" :data="dataList" :border="true" @select="select" @selection-change="handleSelectionChange"> - <el-table-column type="selection" width="55" /> - <el-table-column label="用户ID" prop="id" align="center" /> - <el-table-column label="姓名" prop="name" align="center" width="110" /> - <el-table-column label="手机号" prop="phone" align="center" width="125" /> - <el-table-column label="用户名" prop="username" align="center" width="110" /> - <el-table-column label="性别" prop="sex" align="center" > - <template #default="scope"> - <span v-if="scope.row.sex === 0">男</span> - <span v-if="scope.row.sex === 1">女</span> - </template> - </el-table-column> - <el-table-column label="所属机构" prop="agency.name" align="center" width="110" /> - <el-table-column label="社保" prop="socialSecurity" align="center" width="120"> - <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.socialAttach && scope.row.socialAttach.length>0"> - <el-image - style="width: 100px; height: 100px" - :src= "scope.row.socialAttach[0]" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="scope.row.socialAttach" - :initial-index="0" - fit="cover" - :preview-teleported= true - /> - </div> - </template> - </el-table-column> - <el-table-column label="医保" prop="medicalInsurance" align="center" width="120"> - <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.medicalAttach && scope.row.medicalAttach.length>0"> - <el-image - style="width: 100px; height: 100px" - :src="scope.row.medicalAttach[0]" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="scope.row.medicalAttach" - :initial-index="0" - fit="cover" - :preview-teleported= true - /> - </div> - </template> - </el-table-column> - <el-table-column label="工资清单" prop="salaryList" align="center" width="120"> - <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.salaryAttach && scope.row.salaryAttach.length>0"> - <el-image - style="width: 100px; height: 100px" - :src= "scope.row.salaryAttach[0]" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="scope.row.salaryAttach" - :initial-index="0" - fit="cover" - :preview-teleported= true - /> - </div> - </template> - </el-table-column> - <el-table-column label="职务" prop="post" align="center" width="120" /> - <el-table-column label="职称" prop="jobTitle" align="center" /> - <el-table-column label="专业方向" prop="majorNames" align="center" width="100" /> - <el-table-column label="评价师等级" prop="level" align="center" width="100" /> - <el-table-column label="业绩汇总" prop="summary" align="center"> - <template #default="scope"> - <div style="cursor:pointer;color: #3b82f6;" @click="openList(scope.row)"> - <span>{{scope.row.projectCount}}</span> - </div> - </template> - </el-table-column> - <el-table-column label="最近评价时间" prop="lastEstimateTime" align="center" width="120" /> - </el-table> - - <pagination - v-show="total > 0" - :total="total" - v-model:page="queryParams.pageNum" - v-model:limit="queryParams.pageSize" - @pagination="getList" - /> -<!-- <template #footer>--> -<!-- <span class="dialog-footer">--> -<!-- <el-button @click="dialogVisible = false" size="default">取 消</el-button>--> -<!-- <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button>--> -<!-- </span>--> -<!-- </template>--> - </el-dialog> - <project-dialog ref="projectRef" @getList="getList"></project-dialog> - </div> -</template> -<script setup> -import {getCurrentInstance, onMounted, reactive, ref, toRefs,defineEmits} from "vue"; -import {getDictList} from "@/api/backManage/evaluate"; -import {ElMessage, ElMessageBox} from "element-plus"; -import projectDialog from "@/views/safetyReview/userManage/expertUsers/components/projectDialog.vue" -import Cookies from "js-cookie"; -import {delMonitor, getExpertList, getMonitorList} from "@/api/sysUsers"; -const { proxy } = getCurrentInstance(); -const loading = ref(false); -const emit = defineEmits(['getName']) -const data = reactive({ - queryParams: { - pageNum: 1, - pageSize: 10, - expertType: "", - name: '', - phone: '', - level: '', - major: null, - post: '' - }, - total: 0, - dataList: [], - majorList: [], - levelList: [ - { - id: '1', - name: '一级' - }, - { - id: '2', - name: '二级' - }, - { - id: '3', - name: '三级' - }, - { - id: '4', - name: '其他' - }, - ], - postList: [ - { - id: '1', - name: '法人' - }, - { - id: '2', - name: '过程控制负责人' - }, - { - id: '3', - name: '机构负责人' - }, - { - id: '4', - name: '技术负责人' - }, - { - id: '5', - name: '员工' - }, - ], - dialogVisible: false, - title: '', - selected: [] -}) -const tableRef = ref() -const { queryParams, total, dataList, majorList, levelList, postList, dialogVisible,title,selected } = toRefs(data); - -const openDialog = (type) => { - getMajor() - research() - data.selected = [] - data.title = type - data.dialogVisible = true -} - -const onSubmit = async () => { - if(data.selected.length>0) - emit('getName',data.title,data.selected[data.selected.length - 1]) - data.dialogVisible = false -} - -const getList = async () => { - loading.value = true - const res = await getExpertList(data.queryParams) - if(res.code == 200){ - data.dataList = res.data.list.map(item => { - return{ - ...item, - socialAttach: item.socialAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), - medicalAttach: item.medicalAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), - salaryAttach: item.salaryAttach.map(s => { return import.meta.env.VITE_APP_BASE_API + '/' + s.path}), - lastEstimateTime: item.personProjectVO ? item.personProjectVO.lastEstimateTime.slice(0,10) : '', - projectCount: item.personProjectVO ? item.personProjectVO.projectCount : '' - } - }) - console.log('RES',data.dataList) - data.total = res.data.total - }else{ - ElMessage.warning(res.message) - } - loading.value = false -} -const projectRef = ref(); -const openList = (val) => { - projectRef.value.openDialog(val); -} - -const getMajor = async () => { - const queryParams = { - pageNum: 1, - pageSize: 50, - dictType: 'sys_major_orientation' - } - const res = await getDictList(queryParams); - if(res.code === 200){ - data.majorList = res.data.list - }else{ - ElMessage.warning(res.message) - } -} - -const select = ((selection, row) => { - tableRef.value.clearSelection() - if(selection.length == 0) { - return - } - tableRef.value.toggleRowSelection(row, true); -}) - -const handleSelectionChange = (val) => { - data.selected = val - if(data.selected.length>0){ - emit('getName',data.title,data.selected[data.selected.length - 1]) - data.dialogVisible = false - } - - -} - -const search = ()=>{ - data.queryParams.pageNum = 1 - getList() -} - -const research = ()=>{ - data.queryParams = { - pageNum: 1, - pageSize: 10, - expertType: "", - name: '', - phone: '', - level: '', - major: null, - post: '' - } - getList() -} - -defineExpose({ - openDialog -}); - -</script> - -<style scoped lang="scss"> -.notice{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } - - ::v-deep(.el-table th.el-table__cell:nth-child(1) .cell) { - visibility: hidden; - } - - .file { - display: flex; - flex-direction: column; - align-items: flex-start; - } -} -</style> diff --git a/src/views/safetyReview/projectManage/components/innerReview.vue b/src/views/safetyReview/projectManage/components/innerReview.vue deleted file mode 100644 index 9b3ad96..0000000 --- a/src/views/safetyReview/projectManage/components/innerReview.vue +++ /dev/null @@ -1,276 +0,0 @@ -<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="6"> - <el-form-item prop="auditDate" label="审核日期"> - <el-date-picker - style="width: 100%" - v-model="state.formData.auditDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="assessor.name" label="内部审核员"> - <el-input - v-model.trim="state.formData.assessor.name" - size="large" - placeholder="请选择内部审核员" - @focus="openExperts('内部审核员')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('内部审核员')"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item label="内部审核确认日期" prop="affirmDate"> - <el-date-picker - style="width: 100%" - v-model="state.formData.affirmDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - </el-row> -<!-- <el-row :gutter="30">--> -<!-- <el-col :span="6">--> -<!-- <el-form-item label="附件上传">--> -<!-- <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='state.imgLimit' v-model:file-list="state.fileList" list-type="picture-card" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">--> -<!-- <el-icon><Plus /></el-icon>--> -<!-- <template #tip>--> -<!-- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>--> -<!-- </template>--> -<!-- </el-upload>--> -<!-- </el-form-item>--> -<!-- </el-col>--> -<!-- </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"> - <template #default="scope"> - <el-radio-group v-model="scope.row.status" > - <el-radio :label="1">是</el-radio> - <el-radio :label="0">否</el-radio> - </el-radio-group> - </template> - </el-table-column> - </el-table> - <el-form-item prop="suggestions" label="存在问题及建议"> - <el-input - v-model.trim="state.formData.suggestions" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - </el-form> -<!-- <el-dialog v-model="state.dialogImg">--> -<!-- <el-image style="width: 100%; height: 100%" :src="state.dialogImageUrl"/>--> -<!-- </el-dialog>--> - <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> - </div> -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {addInnerReview, editInnerReview, getInnerReviewDetail} from "@/api/projectManage/innerReview" -import {delPic} from "@/api/login" -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import ExpertsList from "./expertsList"; -const emit = defineEmits(["getNextStatus"]); - -const state = reactive({ - formData: { - id: '', - projectId: '', - auditDate:'', - auditType: 1, - assessor: { - name: '' - }, - assessorId: null, - affirmDate: '', - suggestions: '' - }, - rules: { - "assessor.name": [{required: true, message: '请选择内部审核员', trigger: 'change'}], - auditDate: [{required: true, message: '请选择审核日期', trigger: 'change'}], - affirmDate: [{required: true, message: '请选择内部审核确认日期', trigger: 'change'}] - }, - tableData: [ - {id: 1, content: '评价依据是否充分、准确、有效',key: 'isBasis', status: 1}, - {id: 2, content: '评价范围是否与合同一致', key: 'isScope', status: 1}, - {id: 3, content: '危险有害因素识别是否全面', key: 'isDangerOverall', status: 1}, - {id: 4, content: '评价单元划分是否合理', key: 'isUnitDivision', status: 1}, - {id: 5, content: '评价方法选择是否适当', key: 'isMethodSelection', status: 1}, - {id: 6, content: '对策措施与建议是否可行', key: 'isMeasure', status: 1}, - {id: 7, content: '结论是否正确', key: 'isConclusion', status: 1}, - {id: 8, content: '格式是否符合要求', key: 'isFormat', status: 1}, - {id: 9, content: '附件与附图是否有效及规范', key: 'isFile', status: 1}, - {id: 10, content: '文字、数据是否准确', key: 'isText', status: 1}, - {id: 11, content: '已按要求修改完成', key: 'isAmendFinish', status: 1}, - {id: 12, content: '可报技术负责人审核', key: 'isReportAudit', status: 1} - ], - imgLimit: 1, - fileList: [], - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', - header: { - Authorization: getToken() - }, - dialogImageUrl: '', - dialogImg: false -}) - -const isAmin = ref(false) -const formRef = ref() -const expertsListRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } -}) - -const riskOpen = async (type,val) => { - state.formData.projectId = val - if(type === 'detail' || type === 'edit' ){ - const res = await getInnerReviewDetail({projectId: val,auditType: 1}); - if(res.code == 200){ - state.formData = res.data - for(let key in res.data){ - for(let item of state.tableData){ - if(item.key == key){ - item.status = res.data[key]==true?1:0 - } - } - } - }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(type === 'add'){ - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - for(let i of state.tableData){ - data[i.key] = i.status - } - const res = await addInnerReview(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', val); - - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - for(let i of state.tableData){ - data[i.key] = i.status - } - const res = await editInnerReview(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -const openExperts = (type) =>{ - expertsListRef.value.openDialog(type) -} - -const getSelected = (type,obj)=>{ - state.formData.assessor.name = obj.name - state.formData.assessorId = obj.id -} - -// 图片上传 -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) => { - state.dialogImageUrl = uploadFile.url - state.dialogImg = true -}; - - -const handleAvatarSuccess = (res, uploadFile) => { - if(res.code == 200){ - // state.registerForm.agency.reportPath = res.data.path - }else{ - ElMessage({ - type: 'warning', - message: '文件上传失败' - }) - } -} - -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 - }) - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/mapLocation.vue b/src/views/safetyReview/projectManage/components/mapLocation.vue deleted file mode 100644 index aa943a8..0000000 --- a/src/views/safetyReview/projectManage/components/mapLocation.vue +++ /dev/null @@ -1,162 +0,0 @@ -<template> - <el-dialog - v-model="state.mapLocationVisible" - append-to-body - :close-on-click-modal="false" - width="75%" - :title="state.title" - > - <div class="mapLocation_head"> - <div> - <el-alert - title="点击地点获取经纬度信息" - type="info" - :closable="false" - > - </el-alert> - </div> - <div class="mapLocation_latlng"> - <span>经度:</span> - <el-input class="mapLocation_latlng_input" id="lng" v-model.trim="state.longitude" @change="getAdress"></el-input> - </div> - <div class="mapLocation_latlng"> - <span>纬度:</span> - <el-input class="mapLocation_latlng_input" id="lat" v-model.trim="state.latitude" @change="getAdress"></el-input> - </div> - <div class="mapLocation_latlng"> - <span>地址:</span> - <el-input class="mapLocation_latlng_input" id="lat" v-model.trim="state.BAddress"></el-input> - </div> - - </div> - <div class="mapLocation_body"> - <baidu-map class="map" @ready="getAdress" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="state.center" :zoom="state.zoom" scroll-wheel-zoom @click="getPosition"> - <div style="position: absolute;z-index: 999;margin-top: -495px"> - <label>搜索:<input v-model="state.keyword"></label> - <bm-local-search - :keyword="state.keyword" - :auto-viewport="true" - location="新疆" - :pageCapacity="3" - ></bm-local-search> - </div> - <bm-marker :position="{lng: state.longitude, lat: state.latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE"> - <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/> - </bm-marker> - </baidu-map> - </div> - <div align="right" style="margin-top: 10px"> - <el-button @click="state.mapLocationVisible = false">取消</el-button> - <el-button type="primary" @click="submitLatLng()">确认</el-button> - </div> - </el-dialog> -</template> - -<script setup> -import {ref, onMounted, reactive, toRefs, defineComponent, defineExpose, defineEmits, watch} from 'vue'; -import { BaiduMap,BmMarker,BmLocalSearch } from 'vue-baidu-map-3x' -const state = reactive({ - title: '', - longitude: '', - latitude: '', - mapLocationVisible: false, - zoom: 7, - center: { - lng: '116.42585576793277', - lat: '39.88973394962104' - }, - keyword:'', - location: '', - BAddress: '' -}) - -const emit = defineEmits(['giveLatLng']) - -onMounted(() => { - // ...(mounted钩子中的代码不变) -}); -const map = reactive({}) - -const getPosition = ({type, target, point, pixel, overlay})=>{ - state.longitude = point.lng - state.latitude = point.lat - getAdress() -} - -const openMapLocation=(longitude,latitude)=>{ - if(longitude != ""){ - state.longitude = longitude - state.latitude = latitude - state.zoom = 13 - state.center = { - lng: longitude, - lat: latitude - } - }else { - - state.zoom = 7 - state.center = { - lng: '87.61552721758208', - lat: '43.839018284106565' - } - } - - state.mapLocationVisible = true -} - -const submitLatLng=()=>{ - state.mapLocationVisible = false - emit('giveLatLng',state.longitude,state.latitude); -} - -const initMap=()=>{ - -} -const myGeo = ref(null) -const getAdress = () => { - myGeo.value = new BMap.Geocoder(); - const pt = new BMap.Point(state.longitude, state.latitude); - myGeo.value.getLocation(pt,function(result){ - state.BAddress = result.address; //获取到当前定位的详细地址信息 - }, - { enableHighAccuracy: true } - ); -} - -defineExpose({ - openMapLocation -}) -</script> - -<style lang="scss" scoped> -.map { - width: 100%; - height: 500px; - - :deep(.BMap_cpyCtrl){ - display: none!important; - visibility: hidden!important; - } - - :deep(.anchorBL) { - display: none!important; - visibility: hidden!important; - } -} -.mapLocation_head{ - width:100%; - height:100px; -} -.mapLocation_body{ - width:100%; - height:500px -} -.mapLocation_latlng{ - padding-top:10px; - display:inline-block; - margin-right: 20px; -} -.mapLocation_latlng_input{ - width:250px; -} -</style> diff --git a/src/views/safetyReview/projectManage/components/processCtrlReview.vue b/src/views/safetyReview/projectManage/components/processCtrlReview.vue deleted file mode 100644 index 85ec8b9..0000000 --- a/src/views/safetyReview/projectManage/components/processCtrlReview.vue +++ /dev/null @@ -1,364 +0,0 @@ -<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="6"> - <el-form-item prop="auditDate" label="审核日期"> - <el-date-picker - style="width: 100%" - v-model="state.formData.auditDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="processLeader.name" label="过程控制负责人"> - <el-input - v-model.trim="state.formData.processLeader.name" - size="large" - placeholder="请选择过程控制负责人" - @focus="openExperts('过程控制负责人')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('过程控制负责人')"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="isFullProcess" label="审核结论:是否满足过程控制要求"> - <el-radio-group v-model="state.formData.isFullProcess" > - <el-radio :label="1">是</el-radio> - <el-radio :label="0">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </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"> - <template #default="scope"> - <el-radio-group v-model="scope.row.status" @change="changeStatus(scope.row)"> - <el-radio :label="1">符合</el-radio> - <el-radio :label="0">不符合</el-radio> - </el-radio-group> - </template> - </el-table-column> - <el-table-column label="不符合描述" header-align="center" class-name="small-padding fixed-width" width="700"> - <template #default="scope"> - <el-input - v-model.trim="scope.row.reason" - size="large" - :disabled="scope.row.status == 1" - placeholder="如不符合,请填写不符合描述" - /> - </template> - </el-table-column> - </el-table> - <el-form-item prop="suggestions" label="存在问题及建议"> - <el-input - v-model.trim="state.formData.suggestions" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <el-row :gutter="30"> - <el-col :span="18"> - <el-form-item label="附件上传" prop="assAccessoryFiles"> - <el-upload accept="image/*,.pdf,.doc,.docx,.xlsx,.xls" :action="state.uploadUrl" :data="{moduleType: 8,projectId: props.projectId}" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" :before-upload="picSize" :disabled="projectType === 'view' || isEnd" :on-remove="handleRemove" > - <el-button type="primary">附件上传</el-button> - <template #tip> - <div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div> - </template> - </el-upload> - </el-form-item> - </el-col> - </el-row> - </el-form> - <el-dialog v-model="state.dialogImg"> - <el-image style="width: 100%; height: 100%" :src="state.dialogImageUrl"/> - </el-dialog> - <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> - </div> -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {ElMessage, ElMessageBox} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {delFile, getFiles} from "@/api/projectManage/siteCheckRcd" -import {addProcessCtrl, editProcessCtrl,getProcessCtrlDetail} from "@/api/projectManage/processCtrl" -import {delPic} from "@/api/login" -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import ExpertsList from "./expertsList"; -import axios from "axios"; -import { useRoute } from 'vue-router' -const route = useRoute() -const props = defineProps(['projectId']) -const emit = defineEmits(["getNextStatus"]); - -const state = reactive({ - formData: { - id: null, - projectId: null, - auditDate: '', - processLeader: {name: ''}, - processLeaderId: null, - isFullProcess: null, - suggestions: '' - }, - rules: { - auditDate: [{required: true, message: '请选择审核日期', trigger: 'blur'}], - 'processLeader.name': [{required: true, message: '请选择过程控制负责人', trigger: 'change'}], - isFullProcess: [{required: true, message: '请选择审核结论', trigger: 'blur'}] - }, - tableData: [ - {id: 1, content: '风险分析', status: 1, key:'isRiskAnalyse', reasonKey: 'riskAnalyseDes', reason: ''}, - {id: 2, content: '签订合同', status: 1, key:'isSignContract', reasonKey: 'signContractDes', reason: ''}, - {id: 3, content: '评价任务通知书', status: 1, key:'isEstimateTask', reasonKey: 'estimateTaskDes', reason: ''}, - {id: 4, content: '编制安全评价项目计划书', status: 1, key:'isEstimatePlan', reasonKey: 'estimatePlanDes', reason: ''}, - {id: 5, content: '被评价单位提供材料清单', status: 1, key:'isProvideMaterials', reasonKey: 'provideMaterialsDes', reason: ''}, - {id: 6, content: '从业告知', status: 1, key:'isWorkNotification', reasonKey: 'workNotificationDes', reason: ''}, - {id: 7, content: '现场勘验记录及影像资料', status: 1, key:'isInvestigationSite', reasonKey: 'investigationSiteDes', reason: ''}, - {id: 8, content: '评价报告内部审核', status: 1, key:'isInteriorAudit', reasonKey: 'interiorAuditDes', reason: ''}, - {id: 9, content: '技术负责人审核', status: 1, key:'isTechnolgyAudit', reasonKey: 'technolgyAuditDes', reason: ''}, - {id: 6, content: '评价报告外审意见', status: 1, key:'isExteriorAudit', reasonKey: 'exteriorAuditDes', reason: ''}, - {id: 7, content: '评价项目网上信息公开', status: 1, key:'isOpenInformation', reasonKey: 'openInformationDes', reason: ''}, - // {id: 8, content: '二维码的使用', status: 1, key:'isUseQrcode', reasonKey: 'useQrcodeDes', reason: ''}, - {id: 9, content: '报告归档材料完整性', status: 1, key:'isFullMaterials', reasonKey: 'fullMaterialsDes', reason: ''} - ], - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', - header: { - Authorization: getToken() - }, - disabled:false -}) - -const isAmin = ref(false) -const formRef = ref() -const expertsListRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - getProcessFiles(props.projectId) - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; -}) - -const projectType = ref(''); -const isEnd = ref('') -const riskOpen = async (type,val) => { - state.formData.projectId = val - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; - if(type === 'detail' || type === 'edit' ){ - if(type === 'detail'){ - state.disabled = true - } - const res = await getProcessCtrlDetail({projectId: val}); - if(res.code == 200){ - state.formData = res.data - state.formData.isFullProcess = res.data.isFullProcess==true?1:0 - for(let key in res.data){ - for(let item of state.tableData){ - if(item.key == key){ - item.status = res.data[key]==true?1:0 - } - if(item.reasonKey == key){ - item.reason = res.data[key] - } - } - } - }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(type === 'add'){ - const {id,processLeader, ...data} = JSON.parse(JSON.stringify(state.formData)) - for(let i of state.tableData){ - if(i.status == 1){ - i.reason = '' - }else{ - if(i.reason == ''){ - ElMessage.warning("请完善不符合项描述"); - return - } - } - data[i.key] = i.status - data[i.reasonKey] = i.reason - } - const res = await addProcessCtrl(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', val); - - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const {processLeader, ...data} = JSON.parse(JSON.stringify(state.formData)) - for(let i of state.tableData){ - data[i.key] = i.status - data[i.reasonKey] = i.reason - if(i.status == 1){ - i.reason = '' - } - } - const res = await editProcessCtrl(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} -const changeStatus = (val) => { - if(val.status == 1 && val.reason != "") { - const index = state.tableData.findIndex(item => item.id == val.id) - state.tableData[index].reason = "" - } -} - -const openExperts = (type) =>{ - expertsListRef.value.openDialog(type) -} - -const getSelected = (type,obj)=>{ - state.formData.processLeader.name = obj.name - state.formData.processLeaderId = obj.id -} - -const getProcessFiles = async (id)=>{ - const res = await getFiles({projectId: id ? id : props.projectId,moduleType: 8}) - if(res.code == 200){ - if(res.data && res.data.length>0){ - state.fileList = res.data.map(i=>{ - return { - name: i.originName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - }else{ - state.fileList = [] - } - }else { - ElMessage.warning(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.url,{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: '文件读取失败' - }); - } - }) -}; - - -const handleAvatarSuccess = (res, uploadFile) => { - if(res.code == 200){ - getProcessFiles() - }else{ - ElMessage({ - type: 'warning', - message: '文件上传失败' - }) - } -} - -const handleRemove = async (file, uploadFile) => { - if(file && file.status == 'success') { - ElMessageBox.confirm( - '确定删除该附件?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then(async () => { - const res = await delFile(file.id) - if (res.code == 200) { - ElMessage({ - type: 'success', - message: '文件已删除' - }) - await getProcessFiles() - } else { - ElMessage({ - type: 'warning', - message: res.message - }) - } - }) - .catch(() => { - getProcessFiles() - }) - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/projectApproval.vue b/src/views/safetyReview/projectManage/components/projectApproval.vue new file mode 100644 index 0000000..ed2315e --- /dev/null +++ b/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> diff --git a/src/views/safetyReview/projectManage/components/projectArchive.vue b/src/views/safetyReview/projectManage/components/projectArchive.vue index 85aff7c..5d5a3e6 100644 --- a/src/views/safetyReview/projectManage/components/projectArchive.vue +++ b/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> - </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> - + <div>项目归档</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) - } + }else if(type === 'detail'){ + console.log("view4444441",type,val) } - 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 - }) - } -} } defineExpose({ riskOpen }); - - </script> + + <style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} </style> diff --git a/src/views/safetyReview/projectManage/components/rateConclusion.vue b/src/views/safetyReview/projectManage/components/rateConclusion.vue deleted file mode 100644 index d8ce84c..0000000 --- a/src/views/safetyReview/projectManage/components/rateConclusion.vue +++ /dev/null @@ -1,311 +0,0 @@ -<template> - <div class="riskBox"> - <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> - <el-form-item prop="conclusion" label="评价结论"> - <el-input - v-model.trim="state.formData.conclusion" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <el-row :gutter="30"> - <el-col :span="9"> - <el-form-item prop="isReviseManual" label="评价报告修改说明"> -<!-- <el-radio-group v-model="state.formData.isReviseManual" >--> -<!-- <el-radio :label="1">是</el-radio>--> -<!-- <el-radio :label="0">否</el-radio>--> -<!-- </el-radio-group>--> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="18"> - <el-form-item> - <el-upload - accept="image/*,.pdf,.doc,.docx,.xlsx,.xls" - :action="state.uploadUrl" - :disabled="projectType === 'view' || isEnd" - :headers="state.header" - method="post" - :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile)" - :on-exceed="showTip" - v-model:file-list="state.fileList" - :on-remove="handleRemove" - :data="state.uploadData" - :on-preview="handlePreview" - :limit='15' - :before-upload="picSize" - > - <el-button type="primary">评价报告上传</el-button> - <template #tip> - <div class="el-upload__tip">上传文件尺寸小于15M,最多可上传15份,多张图片建议合并为PDF文件规范上传。</div> - </template> - </el-upload> - </el-form-item> - </el-col> - </el-row> - </el-form> - </div> -</template> -<script setup> - -import {defineEmits, defineProps, onMounted, reactive, ref} from "vue"; -import {ElMessage, ElMessageBox} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {addRate, addRisk, editRate, editRisk, getRateDetail, getRiskDetail} from "@/api/projectManage/riskAnalysis" -import {delPic} from "@/api/login" -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import {delAccessoryFile, getAccessoryFile} from "@/api/projectManage/project"; -import axios from "axios"; -import {delFile, getFiles} from "@/api/projectManage/siteCheckRcd"; -import { useRoute } from 'vue-router' -const route = useRoute() -const emit = defineEmits(["getNextStatus"]); -const prop = defineProps(['projectId']) -const state = reactive({ - formData: { - isReviseManual: 1, - }, - rules: { - conclusion: [{required: true, message: '请输入评价结论', trigger: 'blur'}], - }, - imgLimit: 3, - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', - header: { - Authorization: getToken() - }, - fileList: [], - uploadData: { - moduleType: 7 - }, - disabled: false -}) -const props = { - expandTrigger: 'hover', - value: 'name', - label: 'name' -} -const isAmin = ref(false) -const formRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - if(prop.projectId){ - const val = prop.projectId; - state.uploadData.projectId = val; - getProcessFiles(val); - } - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; -}) - -const projectType = ref(''); -const isEnd = ref('') -const riskOpen = async (type,val) => { - state.uploadData.projectId = val; - projectType.value = route.query.type; - isEnd.value = Cookies.get('end') - if(type === 'detail' || type === 'edit' ){ - if(type === 'detail'){ - state.disabled = true - } - const res = await getRateDetail({projectId: val}); - if(res.code == 200){ - if(res.data){ - state.formData = res.data; - state.formData.isReviseManual = res.data.isReviseManual ? 1 : 0 - state.fileList = res.data.accessoryFiles.map(item => { - return { - ...item, - name: item.originName, - } - }) - } - }else { - ElMessage.warning(res.message) - } - } - if(type === 'add' || type === 'clickEdit') { - const valid = await formRef.value.validate(); - if(state.fileList && state.fileList.length<=0 ){ - ElMessage.warning('请上传评价报告') - return - } - - if(valid){ - if (isAmin.value) { - ElMessage.warning("当前用户暂无权限"); - return; - } - if(type === 'add'){ - const {id,attachments, ...data} = JSON.parse(JSON.stringify(state.formData)) - data.projectId = val; - data.accessoryFiles = state.fileList - const res = await addRate(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', val); - - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const { attachments, ...data} = JSON.parse(JSON.stringify(state.formData)) - data.accessoryFiles = state.fileList - const res = await editRate(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -// 上传 -const showTip =()=>{ - ElMessage({ - type: 'warning', - message: '超出文件上传数量' - }); -} - -const picSize = async (rawFile) => { - if(rawFile.size / 1024 / 1024 > 15){ - ElMessage({ - type: 'warning', - message: '文件大小不能超过15M' - }); - return false - } -}; - -const handleAvatarSuccess = (res,uploadFile) => { - if(res.code === 200){ - getProcessFiles() - ElMessage({ - type: 'success', - message: '文件上传成功' - }) - }else { - state.fileList.splice(state.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 getProcessFiles = async (id)=>{ - const res = await getFiles({projectId: id ? id : prop.projectId ,moduleType: 7}) - if(res.code == 200){ - if(res.data && res.data.length>0){ - state.fileList = res.data.map(i=>{ - return { - name: i.originName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - }else{ - state.fileList = [] - } - }else { - ElMessage.warning(res.message) - } -} - -const handleRemove = async (file, uploadFiles) => { - if (file && file.status === 'success') { - ElMessageBox.confirm( - '确定删除该附件?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then(async () => { - 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: '文件已删除' - }) - await getProcessFiles() - } else { - ElMessage({ - type: 'warning', - message: res.message - }) - } - }) - .catch(() => { - getProcessFiles() - }) - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/riskAnalysis.vue b/src/views/safetyReview/projectManage/components/riskAnalysis.vue deleted file mode 100644 index 9929b64..0000000 --- a/src/views/safetyReview/projectManage/components/riskAnalysis.vue +++ /dev/null @@ -1,471 +0,0 @@ -<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="6"> - <el-form-item prop="project.name" label="项目名称"> - <el-input - maxlength="100" - show-word-limit - v-model.trim="state.formData.project.name" - size="large" - placeholder="请输入项目名称" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="project.client" label="委托单位"> - <el-input - v-model.trim="state.formData.project.client" - - size="large" - placeholder="请输入委托单位" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="project.creditCode" label="委托单位统一社会信用代码"> - <el-input - v-model.trim="state.formData.project.creditCode" - size="large" - placeholder="请输入委托单位统一社会信用代码" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="project.address" label="详细地址"> - <el-input - maxlength="100" - show-word-limit - v-model.trim="state.formData.project.address" - size="large" - placeholder="请输入详细地址" - > - </el-input> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="6"> - <el-form-item prop="project.estimateType" label="类型"> - <el-select v-model="state.formData.project.estimateType" class="m-2" size="large" placeholder="请选择" style="width: 100%" > - <el-option - v-for="item in state.estimateTypeList" - :key="item.id" - :label="item.label" - :value="item.id" - /> - </el-select> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="project.code" label="项目编号"> - <el-input - v-model.trim="state.formData.project.code" - size="large" - placeholder="请输入项目编号" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="project.invest" label="项目投资金额"> - <el-input - @input="state.formData.project.invest= state.formData.project.invest.replace(/[^0-9.\/\-]/g,'')" - v-model.trim="state.formData.project.invest" - size="large" - placeholder="请输入项目投资金额" - > - <template #append>万元</template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="project.area" label="所属区域"> - <el-cascader - v-model="state.formData.project.area" - :options="state.addressList" - :props="props" - @change="handleChange" - style="width: 100%" - size="large" - /> - </el-form-item> - </el-col> - </el-row> - <el-row el-row :gutter="30"> - <el-col :span="6"> - <el-form-item prop="project.business" label="业务范围"> - <el-select v-model="state.formData.project.business" class="m-2" size="large" placeholder="请选择" style="width: 100%" > - <el-option - v-for="item in state.businessList" - :key="item.id" - :label="item.label" - :value="item.id" - /> - </el-select> - </el-form-item> - </el-col> - </el-row> - <el-form-item prop="project.introduction" label="基本概括"> - <el-input - v-model.trim="state.formData.project.introduction" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <el-form-item prop="riskCharacter" label="行业风险特性"> - <el-input - v-model.trim="state.formData.riskCharacter" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <el-form-item prop="surroundings" label="周边环境"> - <el-input - v-model.trim="state.formData.surroundings" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <el-form-item prop="equipment" label="主要生产装置"> - <el-input - v-model.trim="state.formData.equipment" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <el-form-item prop="technology" label="生产工艺概况"> - <el-input - v-model="state.formData.technology" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - <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"> - <template #default="scope"> - <el-radio-group v-model="scope.row.status" > - <el-radio :label="1">{{scope.row.id ==='6' ? '可行': '是'}}</el-radio> - <el-radio :label="0">{{scope.row.id ==='6' ? '不可行': '否'}}</el-radio> - </el-radio-group> - </template> - </el-table-column> - </el-table> - <el-row :gutter="30"> - <el-col :span="6"> - <el-form-item prop="estimateDate" label="评估日期"> - <el-date-picker - style="width: 100%" - v-model="state.formData.estimateDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="techOpinion" label="技术负责人意见"> - <el-input - v-model="state.formData.techOpinion" - size="large" - maxlength="30" - show-word-limit - placeholder="技术负责人意见" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="riskOpinion" label="风险评估人意见"> - <el-input - v-model="state.formData.riskOpinion" - size="large" - maxlength="30" - show-word-limit - placeholder="风险评估人意见" - > - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="agencyOpinon" label="机构评价负责人意见"> - <el-input - maxlength="30" - show-word-limit - v-model="state.formData.agencyOpinon" - size="large" - placeholder="机构评价负责人意见" - > - </el-input> - </el-form-item> - </el-col> - </el-row> - - </el-form> - </div> - -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {getDictList} from "@/api/backManage/evaluate"; -import {ElMessage} from "element-plus"; -import {getDict} from "@/api/login"; -import {getRegionTree} from "@/api/area"; -import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis"; -import Cookies from "js-cookie"; -const emit = defineEmits(["getNextStatus"]); - -const isAmin = ref(false) -const formRef = ref(); -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - getRiskList(); - getBusinessList(); - getArea(); -}); -const state = reactive({ - formData: { - project: { - id: '', - name: '', - client: '', - creditCode: '', - address:'', - estimateType: null, - code: '', - invest: '', - area: [], - district: '', - city: '', - province: '', - business: '', - introduction: '', - }, - id: '', - riskCharacter: '', - surroundings: '', - equipment: '', - technology: '', - isInBusiness: true, - isSatisfyNeed: true, - isNeedExpert: true, - isFinishReport: true, - isAcceptChargess: true, - isFeasibility: true, - estimateDate: '', - techOpinion: '', - riskOpinion: '', - agencyOpinon: '' - }, - rules: { - "project.name": [{required: true, message: '请填写项目名称', trigger: 'blur'}], - "project.client": [{required: true, message: '请填写委托单位', trigger: 'blur'}], - "project.creditCode": [{required: true, message: '请填写委托单位统一社会信用代码', trigger: 'blur'}], - "project.estimateType": [{required: true, message: '请选择类型', trigger: 'blur'}], - "project.address": [{required: true, message: '请填写详细地址', trigger: 'blur'}], - "project.invest": [{required: true, message: '请填写投资金额', trigger: 'blur'}], - "project.area": [{required: true, message: '请选择所属区域', trigger: 'blur'}], - "project.business": [{required: true, message: '请选择业务范围', trigger: 'blur'}], - "project.introduction": [{required: true, message: '请填写基本概况', trigger: 'blur'}], - riskCharacter: [{required: true, message: '请填写行业风险特性', trigger: 'blur'}], - surroundings: [{required: true, message: '请填写周边环境', trigger: 'blur'}], - estimateDate: [{required: true, message: '请选择评估日期', trigger: 'blur'}], - techOpinion: [{required: true, message: '请填写技术负责人意见', trigger: 'blur'}], - riskOpinion: [{required: true, message: '请填写风险评估人意见', trigger: 'blur'}], - agencyOpinon: [{required: true, message: '请填写机构评价负责人意见', trigger: 'blur'}], - }, - estimateTypeList: [], - addressList: [], - businessList: [], - tableData: [ - { - id: '1', - content: '评价项目是否在本机构资质业务范围内', - status: 1 - }, - { - id: '2', - content: '评价人员专业构成是否满足评价项目需要', - status: 1 - }, - { - id: '3', - content: '是否需要聘请相关专业的技术专家', - status: 1 - }, - { - id: '4', - content: '是否能在约定的时间内完成评价报告', - status: 1 - }, - { - id: '5', - content: '评价费用是否在本机构所接受的范围内', - status: 1 - }, - { - id: '6', - content: '项目的可行性(风险分析结论)', - status: 1 - }, - ] -}) -const props = { - expandTrigger: 'hover', - value: 'name', - label: 'name' -} - - -const getRiskList = async () => { - const res = await getDictList({dictType: "sys_assess_type"}); - if(res.code === 200){ - state.estimateTypeList = res.data.list - }else{ - ElMessage.warning(res.message) - } -} -const getBusinessList = async () => { - const res = await getDict({dictType: 'sys_business_scope'}) - if(res.code === 200){ - state.businessList = res.data - }else{ - ElMessage.warning(res.message) - } -} -const getArea = async ()=>{ - const type = 1 - const res = await getRegionTree({name: '',parentId: null,regionType: type}) - if(res.code == 200){ - state.addressList = res.data - }else{ - ElMessage.warning(res.message) - } -} -const riskOpen = async (type,val) => { - console.log("type",type,val) - if(type === 'detail' || type === 'edit' ){ - const res = await getRiskDetail({projectId: val}); - if(res.code == 200){ - state.formData = res.data; - state.formData.project.business = parseInt(res.data.project.business); - if(res.data.project.province == '北京市' || res.data.project.province == '天津市' || res.data.project.province == '上海市' || res.data.project.province == '重庆市' || res.data.project.province == '香港特别行政区' || res.data.project.province == '澳门特别行政区'){ - state.formData.project.area = [res.data.project.province] - }else{ - state.formData.project.area = [res.data.project.province,res.data.project.city]; - } - state.tableData[0].status = res.data.isInBusiness ? 1 : 0; - state.tableData[1].status = res.data.isSatisfyNeed ? 1 : 0; - state.tableData[2].status = res.data.isNeedExpert ? 1 : 0; - state.tableData[3].status = res.data.isFinishReport ? 1 : 0; - state.tableData[4].status = res.data.isAcceptChargess ? 1 : 0; - state.tableData[5].status = res.data.isFeasibility ? 1 : 0; - }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(type === 'add'){ - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - delete data.project.area; - delete data.project.id; - if(data.project.province == '北京市' || data.project.province == '天津市' || data.project.province == '上海市' || data.project.province == '重庆市' || data.project.province == '香港特别行政区' || data.project.province == '澳门特别行政区'){ - data.project.city = data.project.province - } - data.isInBusiness = state.tableData[0].status === 1; - data.isSatisfyNeed = state.tableData[1].status === 1; - data.isNeedExpert = state.tableData[2].status === 1; - data.isFinishReport = state.tableData[3].status === 1; - data.isAcceptChargess = state.tableData[4].status === 1; - data.isFeasibility = state.tableData[5].status === 1; - const res = await addRisk(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', res.data); - - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - data.id = val; - data.project.id = val; - if(data.project.province == '北京市' || data.project.province == '天津市' || data.project.province == '上海市' || data.project.province == '重庆市' || data.project.province == '香港特别行政区' || data.project.province == '澳门特别行政区'){ - data.project.city = data.project.province - } - delete data.project.area; - data.isInBusiness = state.tableData[0].status === 1 - data.isSatisfyNeed = state.tableData[1].status === 1 - data.isNeedExpert = state.tableData[2].status === 1 - data.isFinishReport = state.tableData[3].status === 1 - data.isAcceptChargess = state.tableData[4].status === 1 - data.isFeasibility = state.tableData[5].status === 1 - const res = await editRisk(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -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{ - state.formData.project.province = value[0]?value[0]:'' - state.formData.project.city = value[1]?value[1]:'' - state.formData.project.district = value[2]?value[2]:'' - // } -} - - - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/signConfirm.vue b/src/views/safetyReview/projectManage/components/signConfirm.vue deleted file mode 100644 index d0b7d93..0000000 --- a/src/views/safetyReview/projectManage/components/signConfirm.vue +++ /dev/null @@ -1,184 +0,0 @@ -<template> - <div class="riskBox"> - <el-table v-loading="loading" ref="tableRef" :data="tableData" :border="true" style="margin-top: 20px"> - <el-table-column label="序号" type="index" width="55" /> - <el-table-column label="人员姓名" prop="planPerson.person.name" align="center"/> - <el-table-column label="联系电话" prop="planPerson.person.phone" align="center"/> - <el-table-column label="职位" prop="planPerson.person.post" align="center"/> - <el-table-column label="项目担任角色" prop="username" align="center" width="180"> - <template #default="scope"> - <div v-for="(item,index) in scope.row.playRolesName" :key="index"> - <span>{{item.roleName}}</span><span v-if="index!==scope.row.playRolesName.length-1">,</span> - </div> - </template> - </el-table-column> - <el-table-column label="评价师等级" prop="planPerson.person.level" align="center"/> - <el-table-column label="专业能力" prop="planPerson.person.majorNames" align="center"/> - <el-table-column label="工作类型" align="center"> - <template #default="scope"> - <span>{{scope.row.planPerson.jobType === 1 ? '普通人员' : scope.row.planPerson.jobType === 2?'组长': ''}}</span> - </template> - </el-table-column> - <el-table-column label="扫脸时间" prop="faceRecord.updateTime" align="center" width="120"/> - <el-table-column label="是否扫脸" prop="username" align="center"> - <template #default="scope"> - <span v-if="scope.row.facePic.length>0">是</span> - <span v-else>否</span> - </template> - </el-table-column> -<!-- <el-table-column label="是否变更" prop="username" align="center"/>--> - <el-table-column label="人脸照片" prop="socialSecurity" align="center" width="120"> - <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.facePic && scope.row.facePic.length>0"> - <el-image - style="width: 100px; height: 100px" - :src= "scope.row.facePic[0]" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="scope.row.facePic" - :initial-index="0" - fit="cover" - :preview-teleported=true - /> - </div> - </template> - </el-table-column> - <el-table-column label="签字图片" prop="socialSecurity" align="center" width="120"> - <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.signPic && scope.row.signPic.length>0"> - <el-image - style="width: 100px; height: 100px" - :src= "scope.row.signPic[0]" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="scope.row.signPic" - :initial-index="0" - fit="cover" - :preview-teleported=true - /> - </div> - </template> - </el-table-column> - <el-table-column label="承诺书" prop="socialSecurity" align="center" width="120"> - <template #default="scope"> - <div class="demo-image__preview" v-if="scope.row.commitPic && scope.row.commitPic.length>0"> - <el-image - style="width: 100px; height: 100px" - :src= "scope.row.commitPic[0]" - :zoom-rate="1.2" - :max-scale="7" - :min-scale="0.2" - :preview-src-list="scope.row.commitPic" - :initial-index="0" - fit="cover" - :preview-teleported=true - /> - </div> - </template> - </el-table-column> - </el-table> - </div> -</template> -<script setup> - -import {defineEmits, defineProps, onMounted, reactive, ref, toRefs} from "vue"; -import {ElMessage} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import { - addFaceRecognition, - addRisk, checkAll, - editRisk, - getRecognitionDetail, - getRiskDetail -} from "@/api/projectManage/riskAnalysis" -import {delPic} from "@/api/login" -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import {getDetail} from "@/api/projectManage/contractMng"; -const emit = defineEmits(["getNextStatus"]); -const props = defineProps(['projectId']) -const state = reactive({ - loading: false, - queryParams: { - pageNum: 1, - pageSize: 10, - }, - total: 0, - tableData: [] -}) - -const {loading,queryParams,total,tableData} = toRefs(state) - -const isAmin = ref(false) -const formRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - if(props.projectId){ - getRecognition(props.projectId); - } -}) -const getRecognition = async (val) =>{ - const res = await getRecognitionDetail({projectId: val}); - if(res.code == 200){ - state.tableData = res.data.map(item => { - return { - ...item, - facePic: item.faceRecord.facePath ? [import.meta.env.VITE_APP_BASE_API + '/' + item.faceRecord.facePath ] : [], - signPic: item.signPath ? [import.meta.env.VITE_APP_BASE_API + '/' + item.signPath] : [], - commitPic: item.insurancePath ? [import.meta.env.VITE_APP_BASE_API + '/' + item.insurancePath] : [], - playRolesName: item.planPerson.playRoles.map(role => { - const roleName = role === 1?'项目负责人':role === 2? '项目组成员':role === 3? '过程控制负责人':role === 4? '机构评价负责人':role === 5? '技术负责人':role === 6?'内部审核员':'' - return{ - roleName - } - }) - } - }) - console.log("res", state.tableData) - }else { - ElMessage.warning(res.message) - } -} - - - -const riskOpen = async (type,val) => { - // if((type === 'detail' || type === 'edit') && !props.projectId){ - // getRecognition(val); - // } - if(type === 'add' || type === 'clickEdit') { - if (isAmin.value) { - ElMessage.warning("当前用户暂无权限"); - return; - } - if(type === 'add'){ - const res = await addFaceRecognition({projectId: val}); - if (res.code == 200) { - ElMessage.success('保存成功') - emit('getNextStatus', val); - } else { - ElMessage.warning(res.message) - } - } - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/siteCheckRcd.vue b/src/views/safetyReview/projectManage/components/siteCheckRcd.vue deleted file mode 100644 index 97d1178..0000000 --- a/src/views/safetyReview/projectManage/components/siteCheckRcd.vue +++ /dev/null @@ -1,693 +0,0 @@ -<template> - <div class="riskBox"> - <el-form ref="formRef" :model="state.formData" :rules="state.rules" class="register-form" label-position="top"> - <el-row :gutter="30" style="margin-bottom: 20px"> - <el-col :span="28"> - <el-alert title="说明:现场勘验记录由项目组成员通过APP端进行信息填报,组长完成现场勘验并在APP端提交后,电脑可对资料信息完善并进行下一步操作。" type="warning" /> - </el-col> -<!-- <el-col :span="6" style="display:flex;justify-content: right">--> -<!-- <el-button type="primary">全部查看</el-button>--> -<!-- <el-button type="primary">全部下载</el-button>--> -<!-- </el-col>--> - </el-row> - <el-row :gutter="30" style="margin-bottom: 30px" v-if="state.data.length>0"> - <el-col :span="28"> - <div style="display: flex;align-items: center"> - <span style="font-size: 22px;font-weight: 600;margin-top: 10px;">记录编号:{{ chooseItem.index }}(提交时间:{{chooseItem.createTime}})</span> - <div style="display: flex;align-items: center;flex-wrap: wrap"> - <div v-for="(item,index) in state.data"> - <el-check-tag style="margin-left: 20px;margin-top:10px;cursor: pointer;padding: 15px 25px" :checked="chooseItem.id === item.id" size="large" @click="chooseRecord(item,index)">记录编号{{ index+1 }}</el-check-tag> - </div> - </div> - </div> - - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="6"> - <el-form-item prop="investigationDate" label="现场勘验时间"> - <el-date-picker - style="width: 100%" - v-model="state.formData.investigationDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="12"> - <el-form-item prop="location" label="现场勘验位置"> - <el-input - v-model.trim="state.formData.location" - size="large" - placeholder="请填写现场勘验位置" - @focus="openLocation" - > - - <template #append> - <el-button :icon="Search" @click="openLocation"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="isSafetyCheck" label="编制现场安全检查表"> - <el-radio-group v-model="state.formData.isSafetyCheck" size="large" @change="changeRadio" :disabled="projectType==='view' || isEnd"> - <el-radio :label="1" size="large">是</el-radio> - <el-radio :label="0" size="large">否</el-radio> - </el-radio-group> - </el-form-item> - </el-col> - </el-row> - <el-row :gutter="30"> - <el-col :span="24" v-if="state.formData.isSafetyCheck == 1"> - <el-form-item label="安全检查表上传" prop="assAccessoryFiles"> - <el-upload :disabled="projectType==='view' || isEnd" accept="image/*,.pdf,.doc,.docx,.xlsx,.xls" :action="state.uploadUrl" :data="{moduleType: 5,projectId: props.projectId}" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,5)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.safetyList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,5)"> - <el-button type="primary">附件上传</el-button> - <template #tip> - <div class="el-upload__tip">上传文件尺寸小于5M,最多可上传1份</div> - </template> - </el-upload> - </el-form-item> - </el-col> - <el-col :span="24" v-if="state.formData.isSafetyCheck == 0"> - <el-form-item prop="recordData" label="现场勘验记录"> - <el-input - v-model.trim="state.formData.recordData" - :autosize="{ minRows: 6 }" - maxlength="200" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - </el-col> - </el-row> - <el-row style="border: 1px dashed #999;border-radius: 4px;padding: 10px;margin-top: 20px"> - <el-col :span="24"> - <el-form-item label="主要装置前合影照片" prop="deviceImages"> - <el-upload accept="image/*" :disabled="projectType === 'view' || isEnd" :action="state.uploadUrl" :data="{moduleType: 1,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,1)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.beforeDeviceList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,1)" > - <el-icon><Plus /></el-icon> - <template #tip> - <div class="el-upload__tip">上传照片尺寸小于5M,最多可上传10张</div> - </template> - </el-upload> - </el-form-item> - </el-col> - </el-row> - <el-row style="border: 1px dashed #999;border-radius: 4px;padding: 10px;margin-top: 20px"> - <el-col :span="24"> - <el-form-item label="现场勘验照片" prop="investingationImages"> - <el-upload accept="image/*" :disabled="projectType === 'view' || isEnd" :action="state.uploadUrl" :data="{moduleType: 2,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,2)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.siteCheckList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,2)" > - <el-icon><Plus /></el-icon> - <template #tip> - <div class="el-upload__tip">上传照片尺寸小于5M,最多可上传10张</div> - </template> - </el-upload> - </el-form-item> - </el-col> - </el-row> - <el-row style="border: 1px dashed #999;border-radius: 4px;padding: 10px;margin-top: 20px;margin-bottom: 20px"> - <el-col :span="24"> - <el-form-item label="企业陪同人员照片" prop="companyImages"> - <el-upload :disabled="projectType === 'view' || isEnd" accept="image/*" :action="state.uploadUrl" :data="{moduleType: 3,projectId: props.projectId}" list-type="picture-card" :headers="state.header" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,3)" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='10' v-model:file-list="state.companyList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,3)" > - <el-icon><Plus /></el-icon> - <template #tip> - <div class="el-upload__tip">上传照片尺寸小于5M,最多可上传10张</div> - </template> - </el-upload> - </el-form-item> - </el-col> - </el-row> - </el-form> - <el-dialog v-model="state.imgDialog"> - <img style="width: 100%" :src="state.imgUrl" alt="Preview Image" /> - </el-dialog> - <map-location ref="mapLocationRef" @giveLatLng="achieveLatLng"></map-location> - </div> -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue" -import {ElMessage, ElMessageBox} from "element-plus" -import {Search} from '@element-plus/icons-vue' -import { - addSiteCheck, - editSiteCheck, - getSiteCheckDetail, - delFile, - getFiles, - getDetailById, doSiteCheck -} from "@/api/projectManage/siteCheckRcd"; -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import { useRoute } from 'vue-router' -const route = useRoute() -const props = defineProps(['projectId']) -const emit = defineEmits(["getNextStatus"]) -import MapLocation from "./mapLocation.vue" -const direction = ref('rtl'); -const size = ref('400px') -const showDrawer = ref(false); -let checkSafetyFiles = (rule, value, callback)=>{ - if(state.safetyList.length === 0){ - callback(new Error('请上传现场安全检查表')) - }else{ - callback() - } -} - -let checkInvestFiles = (rule, value, callback)=>{ - if(state.siteCheckList.length === 0){ - callback(new Error('请上传现场勘验照片')) - }else{ - callback() - } -} - -let checkCompanyFiles = (rule, value, callback)=>{ - if(state.companyList.length === 0){ - callback(new Error('请上传企业陪同人员照片')) - }else{ - callback() - } -} - - - -const state = reactive({ - data: [], - formData: { - id: null, - projectId: null, - investigationDate: '', - location: '', - isSafetyCheck: null, - recordData: '', - assAccessoryFiles: [], - deviceImages: [], - investingationImages: [], - companyImages:[] - }, - projectId: null, - planPersons: [], - rules: { - investigationDate: [{required: true, message: '请选择现场勘验时间', trigger: 'blur'}], - location: [{required: true, message: '请选择现场勘验位置', trigger: 'change'}], - isSafetyCheck: [{required: true, message: '请选择是否编制现场安全检查表', trigger: 'blur'}], - recordData: [{required: true, message: '请填写现场勘验记录', trigger: 'blur'}], - assAccessoryFiles: [{required: true, validator: checkSafetyFiles, trigger: 'blur'}], - // investingationImages: [{required: true, validator: checkInvestFiles, trigger: 'blur'}], - // ccompanyImages: [{required: true, validator: checkCompanyFiles, trigger: 'blur'}] - }, - beforeDeviceList: [], - siteCheckList: [], - companyList: [], - safetyList: [], - imgLimit: 1, - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', - header: { - Authorization: getToken() - }, - imgDialog: false, - imgUrl: '' -}) - -const isAmin = ref(false) -const formRef = ref() -const mapLocationRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - if(props.projectId){ - getDetail(props.projectId) - } - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; - -}); - -const chooseRecord = async (item, index) => { - state.formData = item; - state.data.forEach((i,index) => { - if(i.id === item.id){ - chooseItem.value = i; - chooseItem.value.index = index+1; - - } - }) - await getPicDetail(item.id); - showDrawer.value = false; -} - -const chooseItem = ref(); -const getDetail = async (val) => { - const res = await getSiteCheckDetail({projectId: val}); - if(res.code == 200){ - if(res.data && res.data.length > 0){ - Cookies.set('btn','变更') - state.data = res.data; - state.formData = res.data[0]; - chooseItem.value = state.formData; - chooseItem.value.index = 1; - - await getPicDetail(state.formData.id) - }else { - Cookies.set('btn','保存') - } - - }else { - ElMessage.warning(res.message) - } -} -const getPicDetail = async (val) => { - const res = await getDetailById(val); - if(res.code == 200){ - if(res.data){ - state.formData = res.data; - doPic(res.data) - } - }else { - ElMessage.warning(res.message) - } -} - -const doPic = (val) => { - state.beforeDeviceList = val.deviceImages?.map(i=>{ - return { - name: i.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.siteCheckList = val.investingationImages?.map(i=>{ - return { - name: i.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.companyList = val.companyImages?.map(i=>{ - return { - name: i.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.safetyList = val.assAccessoryFiles?.map(i=>{ - return { - name: i.originName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) -} - -const changeRadio = () => { - if(state.formData.isSafetyCheck == 1){ - getSafetyFiles() - } -} - -const projectType = ref(''); -const isEnd = ref('') -const riskOpen = async (type,val) => { - state.formData.projectId = val - isEnd.value = Cookies.get('end') - state.projectId = val - projectType.value = route.query.type; - if(type === 'sixEnd') { - const res = await doSiteCheck({projectId: val}); - if(res.code == 200) { - emit('getNextStatus', val); - }else { - ElMessage.warning(res.message) - } - } - if(type === 'detail' || type === 'edit' ){ - // await getDetail(val) - } - if(type === 'add' || type === 'clickEdit') { - const valid = await formRef.value.validate(); - if(valid){ - if (isAmin.value) { - ElMessage.warning("当前用户暂无权限"); - return; - } - if(type === 'add'){ - if(!state.data.length >0){ - await saveData(val); - }else { - await editData(); - } - }else if(type === 'clickEdit'){ - await editData(); - } - } - } -} - -const saveData = async (val) => { - - if(state.formData.isSafetyCheck == 1){ - state.formData.recordData = '' - } - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await addSiteCheck(data); - if (res.code == 200) { - ElMessage.success('保存成功') - // const res = await doSiteCheck({projectId: val}); - // if(res.code == 200) { - if(state.formData.isSafetyCheck == 0){ - if(state.safetyList && state.safetyList.length >0){ - console.log('删除原有附件',state.safetyList[0]) - let id = state.safetyList[0].response.data.id - const res = await delFile(id) - if(res.code == 200){ - console.log('删除原有附件') - await getSafetyFiles() - }else{ - ElMessage({ - type: 'warning', - message: res.message - }) - } - } - } - await getDetail(val) - formRef.value.clearValidate(); - // emit('getNextStatus', val); - // }else { - // ElMessage.warning(res.message) - // } - - } else { - ElMessage.warning(res.message) - } -} -const editData = async () => { - - if(state.formData.isSafetyCheck == 1){ - state.formData.recordData = '' - } - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - const res = await editSiteCheck(data); - if (res.code == 200) { - ElMessage.success('变更成功') - if(state.formData.isSafetyCheck == 0 && state.safetyList.length>0){ - const res = await delFile(state.safetyList[0].id) - if(res.code == 200){ - await getSafetyFiles() - }else{ - ElMessage({ - type: 'warning', - message: res.message - }) - } - } - await getPicDetail(chooseItem.value.id) - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } -} - - -const getBeforeFiles = async (id)=>{ - const res = await getFiles({projectId: id ? id : props.projectId,moduleType: 1,processId:chooseItem.value.id }) - if(res.code == 200){ - if(res.data && res.data.length>0){ - state.beforeDeviceList = res.data.map(i=>{ - return { - name: i.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - processId: state.formData.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.formData.deviceImages = state.beforeDeviceList; - }else{ - state.beforeDeviceList=[] - } - }else { - ElMessage.warning(res.message) - } -} - -const getSiteCheckFiles = async (id)=>{ - const res = await getFiles({projectId: id ? id : props.projectId,moduleType: 2,processId:chooseItem.value.id}) - if(res.code == 200){ - if(res.data && res.data.length>0){ - state.siteCheckList = res.data.map(i=>{ - return { - name: i.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - processId: state.formData.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.formData.investingationImages = state.siteCheckList; - }else{ - state.siteCheckList = [] - } - }else { - ElMessage.warning(res.message) - } -} - -const getCompanyFiles = async (id)=>{ - const res = await getFiles({projectId: id ? id : props.projectId,moduleType: 3,processId:chooseItem.value.id}) - if(res.code == 200){ - if(res.data && res.data.length>0){ - state.companyList = res.data.map(i=>{ - return { - name: i.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - processId: state.formData.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.formData.companyImages = state.companyList; - }else{ - state.companyList=[] - } - }else { - ElMessage.warning(res.message) - } -} - -const getSafetyFiles = async (id)=>{ - const res = await getFiles({projectId: id ? id : props.projectId,moduleType: 5,processId: chooseItem.value? chooseItem.value.id:''}) - if(res.code == 200){ - if(res.data && res.data.length>0){ - state.safetyList = res.data.map(i=>{ - return { - name: i.originName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - processId: state.formData.id, - projectId: i.projectId, - moduleType: i.moduleType - } - }) - state.formData.assAccessoryFiles = state.safetyList - }else{ - state.safetyList = [] - } - }else { - ElMessage.warning(res.message) - } -} - -const openLocation = ()=>{ - mapLocationRef.value.openMapLocation(state.formData.location.split(',')[0],state.formData.location.split(',')[1]) -} - -const achieveLatLng=(lng,lat)=>{ - if(lng && lat){ - state.formData.location = lng + ',' + lat - }else { - ElMessage.warning('请选择勘验位置') - } - -} - -// 图片上传 -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) => { - console.log(uploadFile,'file') - state.imgUrl = uploadFile.url - state.imgDialog = true -}; - - -const handleAvatarSuccess = (res, uploadFile, type) => { - if(res.code == 200){ - if(type == 1){ - let obj = { - name: res.data.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + res.data.path, - id: res.data.id, - processId: state.formData.id, - projectId: res.data.projectId, - moduleType: res.data.moduleType - } - state.formData.deviceImages.push(obj); - // getBeforeFiles() - } - if(type == 2){ - let obj = { - name: res.data.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + res.data.path, - id: res.data.id, - processId: state.formData.id, - projectId: res.data.projectId, - moduleType: res.data.moduleType - } - state.formData.investingationImages.push(obj); - // getSiteCheckFiles() - } - if(type == 3){ - let obj = { - name: res.data.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + res.data.path, - id: res.data.id, - processId: state.formData.id, - projectId: res.data.projectId, - moduleType: res.data.moduleType - } - state.formData.companyImages.push(obj); - // getCompanyFiles() - } - if(type == 5){ - let obj = { - name: res.data.fileName, - url: import.meta.env.VITE_APP_BASE_API + '/' + res.data.path, - id: res.data.id, - processId: state.formData.id, - projectId: res.data.projectId, - moduleType: res.data.moduleType - } - state.formData.assAccessoryFiles.push(obj); - console.log(res,'res') - // getSafetyFiles() - } - }else{ - ElMessage({ - type: 'warning', - message: res.message - }) - } -} - -const handleRemove = async (file, uploadFiles,type) => { - if(file && file.status == 'success') { - ElMessageBox.confirm( - '确定删除该附件?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then(async () => { - const res = await delFile(file.id) - if (res.code == 200) { - ElMessage({ - type: 'success', - message: '文件已删除' - }) - if (type == 1) { - const index = state.formData.deviceImages.findIndex(v => v.id === file.id) - state.formData.deviceImages.splice(index, 1); - - } - if (type == 2) { - const index = state.formData.investingationImages.findIndex(v => v.id === file.id) - state.formData.investingationImages.splice(index, 1); - - } - if (type == 3) { - const index = state.formData.companyImages.findIndex(v => v.id === file.id) - state.formData.companyImages.splice(index, 1); - } - if (type == 5) { - const index = state.formData.assAccessoryFiles.findIndex(v => v.id === file.id) - state.formData.assAccessoryFiles.splice(index, 1); - } - } else { - ElMessage({ - type: 'warning', - message: res.message - }) - } - }) - .catch(() => { - // if(type == 1){ - // getBeforeFiles() - // } - // if(type == 2){ - // getSiteCheckFiles() - // } - // if(type == 3){ - // getCompanyFiles() - // } - // if(type == 5){ - // getSafetyFiles() - // } - }) - } - -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} -.textColor{ - color: #3b82f6; -} - - -</style> diff --git a/src/views/safetyReview/projectManage/components/techLeaderReview.vue b/src/views/safetyReview/projectManage/components/techLeaderReview.vue deleted file mode 100644 index 1b25136..0000000 --- a/src/views/safetyReview/projectManage/components/techLeaderReview.vue +++ /dev/null @@ -1,267 +0,0 @@ -<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="6"> - <el-form-item prop="auditDate" label="审核日期"> - <el-date-picker - style="width: 100%" - v-model="state.formData.auditDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item prop="assessor.name" label="技术负责人"> - <el-input - v-model.trim="state.formData.assessor.name" - size="large" - placeholder="请选择技术负责人" - @focus="openExperts('技术负责人')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('技术负责人')"/> - </template> - </el-input> - </el-form-item> - </el-col> - <el-col :span="6"> - <el-form-item label="确认日期" prop="affirmDate"> - <el-date-picker - style="width: 100%" - v-model="state.formData.affirmDate" - type="date" - value-format="YYYY-MM-DD 00:00:00" - placeholder="选择日期" - size="large" - /> - </el-form-item> - </el-col> - </el-row> -<!-- <el-row :gutter="30">--> -<!-- <el-col :span="6">--> -<!-- <el-form-item label="附件上传">--> -<!-- <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='state.imgLimit' v-model:file-list="state.fileList" list-type="picture-card" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">--> -<!-- <el-icon><Plus /></el-icon>--> -<!-- <template #tip>--> -<!-- <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>--> -<!-- </template>--> -<!-- </el-upload>--> -<!-- </el-form-item>--> -<!-- </el-col>--> -<!-- </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"> - <template #default="scope"> - <el-radio-group v-model="scope.row.status" > - <el-radio :label="1">是</el-radio> - <el-radio :label="0">否</el-radio> - </el-radio-group> - </template> - </el-table-column> - </el-table> - <el-form-item label="存在问题及建议"> - <el-input - v-model.trim="state.formData.suggestions" - :autosize="{ minRows: 6 }" - maxlength="500" - show-word-limit - type="textarea"> - </el-input> - </el-form-item> - </el-form> - <el-dialog v-model="state.dialogImg"> - <el-image style="width: 100%; height: 100%" :src="state.dialogImageUrl"/> - </el-dialog> - <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> - </div> -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {ElMessage} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {addInnerReview, editInnerReview, getInnerReviewDetail} from "@/api/projectManage/innerReview" -import {delPic} from "@/api/login" -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import ExpertsList from "./expertsList"; -const emit = defineEmits(["getNextStatus"]) - -const state = reactive({ - formData: { - id: '', - projectId: '', - auditDate:'', - auditType: 2, - assessor: { - name: '' - }, - assessorId: null, - affirmDate: '', - suggestions: '' - }, - rules: { - "assessor.name": [{required: true, message: '请选择技术负责人', trigger: 'change'}], - auditDate: [{required: true, message: '请选择审核日期', trigger: 'change'}], - affirmDate: [{required: true, message: '请选择确认日期', trigger: 'change'}] - }, - tableData: [ - {id: 1, content: '报告中所列评价依据是否得到引用和验证',key: 'isBasisQuote', status: 1}, - {id: 2, content: '现场收集的有关资料是否齐全、有效',key: 'isData', status: 1}, - {id: 3, content: '危险有害因素识别是否充分', key: 'isDangerFull',status: 1}, - {id: 4, content: '报告是否有重大遗漏', key: 'isOmission',status: 1}, - {id: 5, content: '评价方法选用是否合理', key: 'isMethodRational',status: 1}, - {id: 6, content: '对策措施及建议是否具有针对性、合理性', key: 'isMeasureEquitable',status: 1}, - {id: 7, content: '评价结论及格式是否正确', key: 'isConclusionRight',status: 1}, - {id: 8, content: '已按要求修改完成', key: 'isAmendFinish',status: 1}, - {id: 9, content: '可报过程控制负责人审核', key: 'isReportAudit',status: 1} - ], - imgLimit: 1, - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', - header: { - Authorization: getToken() - }, - dialogImageUrl: '', - dialogImg: false -}) - -const isAmin = ref(false) -const formRef = ref() -const expertsListRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } -}) - -const riskOpen = async (type,val) => { - state.formData.projectId = val - if(type === 'detail' || type === 'edit' ){ - const res = await getInnerReviewDetail({projectId: val,auditType: 2}); - if(res.code == 200){ - state.formData = res.data - for(let key in res.data){ - for(let item of state.tableData){ - if(item.key == key){ - item.status = res.data[key]==true?1:0 - } - } - } - }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(type === 'add'){ - const {id, ...data} = JSON.parse(JSON.stringify(state.formData)) - for(let i of state.tableData){ - data[i.key] = i.status - } - const res = await addInnerReview(data); - if (res.code == 200) { - ElMessage.success('保存成功') - formRef.value.clearValidate(); - emit('getNextStatus', val); - - } else { - ElMessage.warning(res.message) - } - }else if(type === 'clickEdit'){ - const { ...data} = JSON.parse(JSON.stringify(state.formData)) - for(let i of state.tableData){ - data[i.key] = i.status - } - const res = await editInnerReview(data); - if (res.code == 200) { - ElMessage.success('变更成功') - formRef.value.clearValidate(); - // emit('getNextStatus', data.project.id); - } else { - ElMessage.warning(res.message) - } - } - } - } -} - -const openExperts = (type) =>{ - expertsListRef.value.openDialog(type) -} - -const getSelected = (type,obj)=>{ - state.formData.assessor.name = obj.name - state.formData.assessorId = obj.id -} - -// 图片上传 -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) => { - if(res.code == 200){ - // state.registerForm.agency.reportPath = res.data.path - }else{ - ElMessage({ - type: 'warning', - message: '文件上传失败' - }) - } -} - -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 - }) - } -} - -defineExpose({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/uploadReviewRcd.vue b/src/views/safetyReview/projectManage/components/uploadReviewRcd.vue deleted file mode 100644 index e528f9b..0000000 --- a/src/views/safetyReview/projectManage/components/uploadReviewRcd.vue +++ /dev/null @@ -1,241 +0,0 @@ -<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="18"> - <el-form-item label="附件上传"> - <el-upload :disabled="projectType === 'view' || isEnd" 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" :on-remove="handleRemove"> - <el-button type="primary">上传评审记录</el-button> - <template #tip> - <div class="el-upload__tip">上传文件尺寸尺寸小于5M</div> - </template> - </el-upload> - </el-form-item> - </el-col> - </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="originName" 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" @click="checkFile(scope.row)">查看</el-button> - <el-button link type="danger" @click="handleRemove(scope.row,[])" :disabled="projectType === 'view'">删除</el-button> - </template> - </el-table-column> - </el-table> - </el-form> - </div> -</template> -<script setup> - -import {defineEmits, onMounted, reactive, ref} from "vue"; -import {ElMessage, ElMessageBox} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {delFile, getFiles, getReviewDone} from "@/api/projectManage/siteCheckRcd"; -import { getToken } from "@/utils/auth"; -import Cookies from "js-cookie" -import axios from 'axios' -import { useRoute } from 'vue-router' -const route = useRoute() -const emit = defineEmits(["getNextStatus"]); -const props = defineProps(['projectId']) -const state = reactive({ - formData: {}, - rules: {}, - tableData: [], - uploadUrl: import.meta.env.VITE_APP_BASE_API + '/manage/accessory-file/uploadFile', - header: { - Authorization: getToken() - }, - fileList: [] -}) - -const isAmin = ref(false) -const formRef = ref() -onMounted(() => { - const userInfo = JSON.parse(Cookies.get('userInfo')) - if(userInfo.identity === 0){ - isAmin.value = true; - } - getReviewFiles(props.projectId) - isEnd.value = Cookies.get('end') - projectType.value = route.query.type; -}) - -const projectType = ref(''); -const isEnd = ref('') -const riskOpen = async (type,val) => { - projectType.value = route.query.type; - isEnd.value = Cookies.get('end') - if(type === 'detail' || type === 'edit' ){ - await getReviewFiles - } - - if(type === 'add' || type === 'clickEdit') { - const valid = await formRef.value.validate(); - if(valid){ - if (isAmin.value) { - ElMessage.warning("当前用户暂无权限"); - return; - } - if(type === 'add'){ - 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 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 - state.fileList = res.data.map(i => { - return { - name: i.originName, - url: import.meta.env.VITE_APP_BASE_API + '/' + i.path, - id: i.id, - projectId: i.projectId, - moduleType: i.moduleType - - } - }) - }else{ - state.tableData=[] - } - }else { - ElMessage.warning(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) => { - console.log(uploadFile,'file') - state.imgUrl = uploadFile.url - state.imgDialog = true -}; - - -const handleAvatarSuccess = (res, uploadFile, type) => { - if(res.code == 200){ - getReviewFiles() - }else{ - state.fileList.splice(state.fileList.indexOf(uploadFile),1) - ElMessage({ - type: 'warning', - message: res.message - }) - } -} - -const handleRemove = async (file, uploadFiles) => { - if(file && file.status == 'success'){ - 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({ - riskOpen -}); - - -</script> -<style scoped lang="scss"> -.riskBox{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } -} - -</style> diff --git a/src/views/safetyReview/projectManage/components/worksDialog.vue b/src/views/safetyReview/projectManage/components/worksDialog.vue deleted file mode 100644 index 43e654f..0000000 --- a/src/views/safetyReview/projectManage/components/worksDialog.vue +++ /dev/null @@ -1,205 +0,0 @@ -<template> - <div class="notice"> - <el-dialog - v-model="dialogVisible" - :title="title" - width="500px" - :before-close="handleClose" - > - <el-form :model="state.form" size="default" ref="busRef" :rules="state.formRules" label-position="top"> - <el-form-item label="评价组成员:" prop="person.name"> - <el-input - v-model.trim="state.form.person.name" - size="large" - placeholder="请选择评价组成员" - @focus="openExperts('评价组成员')" - > - <template #append> - <el-button :icon="Search" @click="openExperts('评价组成员')"/> - </template> - </el-input> - </el-form-item> - <el-form-item label="工作类型:" prop="jobType"> - <el-select v-model="state.form.jobType" placeholder="工作类型" style="width: 100%" size="large"> - <el-option v-for="(item,index) in props.typeList" :key="index" :label="item.label" :value="item.value"/> - </el-select> - </el-form-item> -<!-- <el-form-item label="专业能力:" prop="person.major">--> -<!-- <el-select v-model="state.form.person.majorName" placeholder="专业能力" style="width: 100%" size="large" @change="getCerNo">--> -<!-- <el-option v-for="(item,index) in state.form.person.majorNames" :key="index" :label="item" :value="item"/>--> -<!-- </el-select>--> -<!-- </el-form-item>--> -<!-- <el-form-item label="资格证书:" prop="person.certificateNo">--> -<!-- <el-input--> -<!-- v-model="state.form.person.certificateNo"--> -<!-- size="large"--> -<!-- readonly--> -<!-- />--> -<!-- </el-form-item>--> - <el-form-item label="承担工作:" prop="work"> - <el-select v-model="state.form.work" multiple placeholder="承担工作" style="width: 100%" size="large"> - <el-option v-for="item in props.workList" :key="item.value" :label="item.label" :value="item.value"/> - </el-select> - </el-form-item> - <el-form-item label="承诺后期前往现场勘验:" prop="laterPromise"> - <el-radio-group v-model="state.form.laterPromise" size="large"> - <el-radio :label="1" size="large">是</el-radio> - <el-radio :label="0" size="large">否</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="未到现场勘验原因:"> - <el-input v-model.trim="state.form.reason" maxlength="30" show-word-limit type="text" size="large"/> - </el-form-item> - </el-form> - <template #footer> - <span class="dialog-footer"> - <el-button @click="handleClose" size="default">取 消</el-button> - <el-button type="primary" @click="onSubmit" size="default" v-preReClick>确认</el-button> - </span> - </template> - <experts-list ref="expertsListRef" @getName="getSelected"></experts-list> - </el-dialog> - </div> -</template> -<script setup> -import {defineProps, nextTick, reactive, ref, toRefs} from 'vue' -import {ElMessage} from "element-plus"; -import {Search} from '@element-plus/icons-vue' -import {addWorks, editWorks} from "@/api/projectManage/evaPlan" -import ExpertsList from "./expertsList" - -const dialogVisible = ref(false); -const title = ref(""); -const busRef = ref(); -const expertsListRef = ref() -const props = defineProps(['workList','typeList']) -const emit = defineEmits(["getList"]); -const state = reactive({ - form: { - id: null, - person: { - name: '', - // major: {}, - // certificateNo: '', - // certs: '', - // majorName: '', - // majorNames: [], - // ids: [] - }, - personId: null, - jobType: null, - projectId: null, - informed: 0, - work: [], - laterPromise: 0, - reason: '' - }, - formRules:{ - 'person.name': [{ required: true, message: '请选择评价组成员', trigger: 'change' }], - 'person.major': [{ required: true, message: '请选择专业能力', trigger: 'blur' }], - work: [{ required: true, message: '请选择承担工作', trigger: 'blur' }], - jobType: [{ required: true, message: '请选择工作类型', trigger: 'blur' }] - }, - -}) - -const openDialog = async (type, value,projectId) => { - title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' - state.form.projectId = projectId - if(type == 'add'){ - nextTick(()=>{ - busRef.value.resetFields() - }) - }else if(type === 'edit') { - state.form = JSON.parse(JSON.stringify(value)) - state.form.work = value.work.split(',') - state.form.laterPromise = value.laterPromise?1:0 - } - dialogVisible.value = true; -} - -const openExperts = (type) =>{ - expertsListRef.value.openDialog(type) -} - -const getSelected = (type,obj)=>{ - state.form.person.name = obj.name - state.form.personId = obj.id - // state.form.person.certs = obj.certificateNo - // state.form.person.majorNames = obj.majorNames - // state.form.person.ids = obj.major.split(',') -} - -// const getCerNo = () =>{ -// const i = state.form.person.majorNames.indexOf(state.form.person.majorName) -// const obj = JSON.parse(state.form.person.certs) -// state.form.person.certificateNo = Object.values(obj)[i] -// state.form.person.major[state.form.person.ids[i]] = state.form.person.certificateNo -// } - -const onSubmit = async () => { - const valid = await busRef.value.validate(); - if(valid){ - if(title.value === '新增'){ - const {id,work,...data} = state.form - data['work'] = state.form.work.join(',') - // const {name,major,...rest} = state.form.person - // data.person = { name,major } - // data.person.major = JSON.stringify(state.form.person.major) - const res = await addWorks(data) - if(res.code === 200){ - ElMessage({ - type: 'success', - message: '新增成功' - }); - }else{ - ElMessage.warning(res.message) - } - emit("getList") - busRef.value.clearValidate(); - busRef.value.resetFields() - dialogVisible.value = false; - }else if(title.value === '编辑'){ - const {...data} = state.form - data['work'] = state.form.work.join(',') - const res = await editWorks(data) - if(res.code === 200){ - ElMessage({ - type: 'success', - message: '修改成功' - }); - }else{ - ElMessage.warning(res.message) - } - emit("getList") - busRef.value.clearValidate(); - busRef.value.resetFields() - dialogVisible.value = false; - } - } -} - -const handleClose = () => { - busRef.value.clearValidate(); - busRef.value.resetFields() - dialogVisible.value = false; -} - -defineExpose({ - openDialog -}); - -</script> - -<style scoped lang="scss"> -.notice{ - :deep(.el-form .el-form-item__label) { - font-size: 15px; - } - .file { - display: flex; - flex-direction: column; - align-items: flex-start; - } -} -</style> diff --git a/src/views/safetyReview/projectManage/index.vue b/src/views/safetyReview/projectManage/index.vue index 6aca90d..b2c93e7 100644 --- a/src/views/safetyReview/projectManage/index.vue +++ b/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"> @@ -147,8 +89,8 @@ </div> <el-drawer v-model="showDrawer" :direction="direction" :with-header="false" :size="size" > <template #default> - <div class="drawer"> - <el-form ref="drawerRef" class="register-form" label-position="top"> + <div class="drawer"> + <el-form ref="drawerRef" class="register-form" label-position="top"> <el-form-item label="时间选择"> <el-date-picker v-model="searchTime" @@ -160,55 +102,21 @@ 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-option - v-for="item in businessList" - :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> + <el-form-item label="项目名称" > + <el-input v-model.trim="search.queryParams.name" placeholder="请输入项目名称"></el-input> + </el-form-item> + <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 stateList" + :key="item.id" + :label="item.label" + :value="item.id" + /> + </el-select> + </el-form-item> + </el-form> + </div> </template> <template #footer> <div style="flex: auto"> @@ -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: '', - } - }) - total.value = res.data.total - loading.value = false; - console.log('11',dataList.value) - }else{ - ElMessage.warning(res.message) - } + dataList.value = [ + { + id:1, + createTime: 'xxx', + name: 'xxx', + dept: 'xxx', + leader: '张三', + num: 10, + state: 1, + reportProgress: 1 + + } + ] + // 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) + // } } 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: '', - params: { - lostMaterial: null + state: null, + params:{ + } } 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; diff --git a/src/views/safetyReview/projectManage/process.vue b/src/views/safetyReview/projectManage/process.vue index d0a9785..83c6b5c 100644 --- a/src/views/safetyReview/projectManage/process.vue +++ b/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 menuList = ref([ + { + 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 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; +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); } - 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; + 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); } - 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; + 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); } - 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) + 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); } - } - if(toPath.value && toPath.value === 'toFive' && fiveObj){ - chooseSubMenu(fiveObj,true) - } - - }else{ - ElMessage.warning(res.message) + break; } } -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; +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(nextObj.value !== val) { - selectedObj.value.status = 2 + if(item.id == res){ + selectedObj.value =item + setTimeout(() => { + goRouter(selectedObj.value.id) + }, 10) } - - selectedObj.value = val; - selectedObj.value.status = 3; - nextObj.value.status = 4; - //跳转 - }, 10) - if(flag){ + 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) } + }) + 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 + } - }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') + if(res == 4 && item.id == 4){ + item.status = 2 + selectedObj.value =item + } + }) +} + +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 } - 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; - //跳转 + }) + } + 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) } } -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( - '确定结束现场勘验?', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then( async() => { - goRouter(selectedObj.value.id,'sixEnd') - }) - } - } else { +const clickEdit = () => { + goRouter(selectedObj.value.id,'clickEdit') +} +const clickMenu = (item) => { + if(item.status == 0){ setTimeout(() => { - isShowMenu.value = false; ElMessage({ type: 'warning', message: '请按顺序操作,未完成步骤无法查看!' }); }, 10) - } - // - // setTimeout( () => { - // goRouter(selectedObj.value.id) - // }, 100) -} + } else { + chooseSubMenu(item) -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 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> -- Gitblit v1.9.2