src/views/safetyReview/projectManage/components/confirmEnd.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/projectManage/components/innerReview.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/projectManage/components/processCtrlReview.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/projectManage/components/projectArchive.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/projectManage/components/signConfirm.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/views/safetyReview/projectManage/process.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/views/safetyReview/projectManage/components/confirmEnd.vue
对比新文件 @@ -0,0 +1,198 @@ <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">新增整改</el-button> </el-col> </el-row> <el-table :data="state.rectifyList" :border="true" style="margin: 20px 0"> <el-table-column label="序号" width="60" align="center" type="index"></el-table-column> <el-table-column label="整改时间" header-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="整改人" header-align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-input v-model="scope.row.deviceName" maxlength="50" show-word-limit type="text" size="large"/> </template> </el-table-column> <el-table-column label="附件" header-align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-upload accept=".pdf" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" :limit='1' v-model:file-list="state.fileList[scope.$index]" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove"> <el-button type="primary">附件上传</el-button> <template #tip> <div class="el-upload__tip">上传pdf尺寸小于5M,最多可上传1张</div> </template> </el-upload> </template> </el-table-column> <el-table-column label="操作" header-align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-button link type="danger" @click="delRectify(scope.$index)">删除</el-button> </template> </el-table-column> </el-table> </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"; import { getToken } from "@/utils/auth"; const emit = defineEmits(["getNextStatus"]); const state = reactive({ formData: { id: '', contractSignDate: '', contractMoney: '', contractIntroduction: '' }, rectifyList: [], rules: { contractSignDate: [{required: true, message: '请选择合同签订日期', trigger: 'blur'}], contractMoney: [{required: true, message: '请输入项目合同额', trigger: 'blur'}] }, fileList: [], uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', header: { Authorization: 'Bearer ' + getToken() } }) 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){ 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) } } } } } const addRectify = ()=>{ let file = { fileName: '', deviceName: '', startDate: '', endDate: '' } state.rectifyList.push(file) } const delRectify = (index)=>{ state.rectifyList.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) => { 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> src/views/safetyReview/projectManage/components/innerReview.vue
@@ -124,6 +124,7 @@ {id: 12, content: '可报技术负责人审核', status: 1} ], imgLimit: 1, fileList: [], uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', header: { Authorization: 'Bearer ' + getToken() src/views/safetyReview/projectManage/components/processCtrlReview.vue
@@ -59,7 +59,7 @@ </el-radio-group> </template> </el-table-column> <el-table-column label="不符合描述" header-align="center" class-name="small-padding fixed-width" width="175"> <el-table-column label="不符合描述" header-align="center" class-name="small-padding fixed-width" width="700"> <template #default="scope"> <el-input v-model="state.formData.leader.name" src/views/safetyReview/projectManage/components/projectArchive.vue
对比新文件 @@ -0,0 +1,237 @@ <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="addUpload">新增附件</el-button> </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="名称" header-align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-input v-model="scope.row.fileName" maxlength="30" show-word-limit type="text" size="large"/> </template> </el-table-column> <el-table-column label="是否必须文件" header-align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-radio-group v-model="state.formData.status" > <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"> <template #default="scope"> <el-input v-model="scope.row.deviceName" maxlength="50" show-word-limit type="text" size="large"/> </template> </el-table-column> <el-table-column label="附件上传" header-align="center" class-name="small-padding fixed-width"> <template #default="scope"> <el-upload accept="image/*,.pdf" :action="state.uploadUrl" :headers="state.header" method="post" :on-success="handleAvatarSuccess" :on-exceed="showTip" :limit='1' v-model:file-list="state.fileList[scope.$index]" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove"> <el-button type="primary">附件上传</el-button> <template #tip> <div class="el-upload__tip">上传图片或pdf尺寸小于5M,最多可上传1张</div> </template> </el-upload> </template> </el-table-column> <el-table-column label="操作" header-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 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">预估合同金额,归档阶段可以进行修改。仅支持数字,单位万元,小数点后最多两位,数值范围(0.01-999.99)</span> </template> <el-input v-model="state.formData.contractMoney" size="large" type="number" placeholder="请输入项目合同额" > <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"; import { getToken } from "@/utils/auth"; const emit = defineEmits(["getNextStatus"]); const state = reactive({ formData: { id: '', contractSignDate: '', contractMoney: '', contractIntroduction: '' }, uploadList: [], rules: { contractSignDate: [{required: true, message: '请选择合同签订日期', trigger: 'blur'}], contractMoney: [{required: true, message: '请输入项目合同额', trigger: 'blur'}] }, fileList: [], uploadUrl: import.meta.env.VITE_APP_BASE_API + '/system/common/uploadFile', header: { Authorization: 'Bearer ' + getToken() } }) 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){ 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) } } } } } const addUpload = ()=>{ let file = { fileName: '', deviceName: '', startDate: '', endDate: '' } 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) => { 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> src/views/safetyReview/projectManage/components/signConfirm.vue
对比新文件 @@ -0,0 +1,153 @@ <template> <div class="riskBox"> <el-table v-loading="loading" ref="tableRef" :data="tableData" :border="true"> <el-table-column type="index" width="55" /> <el-table-column label="人员姓名" prop="name" align="center"/> <el-table-column label="联系电话" prop="phone" align="center"/> <el-table-column label="职位" prop="phone" align="center"/> <el-table-column label="项目担任角色" prop="username" align="center"/> <el-table-column label="评价师等级" prop="username" align="center"/> <el-table-column label="专业能力" prop="username" align="center"/> <el-table-column label="人员类型" prop="username" align="center"/> <el-table-column label="扫脸时间" prop="username" align="center"/> <el-table-column label="是否扫脸" prop="username" align="center"/> <el-table-column label="是否变更" prop="username" align="center"/> <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.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="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="socialSecurity" align="center" width="120"> <template #default="scope"> <el-button link>承诺书</el-button> </template> </el-table-column> </el-table> <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> </div> </template> <script setup> import {defineEmits, onMounted, reactive, ref, toRefs} from "vue"; import {ElMessage} from "element-plus"; import {Search} from '@element-plus/icons-vue' import {addRisk, editRisk, getRiskDetail} from "@/api/projectManage/riskAnalysis" import {delPic} from "@/api/login" import { getToken } from "@/utils/auth"; import Cookies from "js-cookie" const emit = defineEmits(["getNextStatus"]); 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; } }) const riskOpen = async (type,val) => { if(type === 'detail' || type === 'edit' ){ const res = await getRiskDetail({projectId: val}); if(res.code == 200){ state.formData = res.data; }else { ElMessage.warning(res.message) } } 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 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)) const res = await editRisk(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> src/views/safetyReview/projectManage/process.vue
@@ -38,7 +38,7 @@ <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 === 2" @getNextStatus="getNextStatus"></rickAnalysis> <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"></evaluate-plan> @@ -48,7 +48,10 @@ <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"></upload-review-rcd> <rate-conclusion ref="rateConRef" v-if="selectedObj.id === 10" @getNextStatus="getNextStatus"></rate-conclusion> <process-ctrl-review ref="proCtrlRef" v-if="selectedObj.id === 1" @getNextStatus="getNextStatus"></process-ctrl-review> <process-ctrl-review ref="proCtrlRef" v-if="selectedObj.id === 11" @getNextStatus="getNextStatus"></process-ctrl-review> <project-archive ref="proArchRef" v-if="selectedObj.id === 12" @getNextStatus="getNextStatus"></project-archive> <sign-confirm ref="signConfirmRef" v-if="selectedObj.id === 13" @getNextStatus="getNextStatus"></sign-confirm> <confirm-end ref="confirmEndRef" v-if="selectedObj.id === 14" @getNextStatus="getNextStatus"></confirm-end> </div> <div style="display: flex;align-items: center;justify-content: center;margin-bottom: -20px"> <el-button type="primary" v-if="selectedObj.id !== 1" style="width: 80px" @click="back">上一步</el-button> @@ -92,6 +95,9 @@ 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" const route = useRoute() const menuList = ref([ @@ -212,6 +218,10 @@ const uploadReviewRef = ref() const rateConRef = ref() const proCtrlRef = ref() const proArchRef = ref() const signConfirmRef = ref() const confirmEndRef = ref() const isShowMenu = ref(false) const selectedObj = ref({}) const middleHeight = ref(0)