From b215fb6dfd4ede3cb1b08985bb04ef5803a52454 Mon Sep 17 00:00:00 2001 From: zhouwenxuan <1175765986@qq.com> Date: 星期三, 17 一月 2024 16:32:12 +0800 Subject: [PATCH] bug修改 --- src/api/projectManage/project.js | 6 src/views/safetyReview/baseSet/major/index.vue | 123 ++++++++ src/layout/components/Sidebar/menu.js | 9 src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue | 181 ++++++++++- src/views/safetyReview/baseSet/major/components/majorDialog.vue | 143 +++++++++ src/views/safetyReview/projectManage/components/contractManage.vue | 3 src/views/safetyReview/userManage/expertUsers/index.vue | 15 src/views/safetyReview/projectManage/process.vue | 338 +++++++++++++--------- src/router/index.js | 6 src/views/safetyReview/projectManage/index.vue | 26 + src/views/safetyReview/projectManage/components/riskAnalysis.vue | 2 11 files changed, 676 insertions(+), 176 deletions(-) diff --git a/src/api/projectManage/project.js b/src/api/projectManage/project.js index 3f61973..d2cfa02 100644 --- a/src/api/projectManage/project.js +++ b/src/api/projectManage/project.js @@ -24,5 +24,11 @@ }) } +export function delProject(data) { + return request({ + url: `/manage/project/remove/` + data.id, + method: 'delete' + }) +} diff --git a/src/layout/components/Sidebar/menu.js b/src/layout/components/Sidebar/menu.js index 56f02e5..20c8ce0 100644 --- a/src/layout/components/Sidebar/menu.js +++ b/src/layout/components/Sidebar/menu.js @@ -78,12 +78,17 @@ { path: 'business', name: 'business', - meta: { title: '业务范围',icon: 'form'} + meta: { title: '业务范围管理',icon: 'form'} }, { path: 'area', name: 'area', - meta: { title: '地区维护',icon: 'form'} + meta: { title: '地区维护管理',icon: 'form'} + }, + { + path: 'major', + name: 'major', + meta: { title: '专业方向管理',icon: 'form'} } ] diff --git a/src/router/index.js b/src/router/index.js index 782e60a..c5f551d 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -238,6 +238,12 @@ name: 'area', meta: { title: '地区维护',icon: 'form'} }, + { + path: 'major', + component: () => import('@/views/safetyReview/baseSet/major/index.vue'), + name: 'major', + meta: { title: '专业方向',icon: 'form'} + }, ] }, diff --git a/src/views/safetyReview/baseSet/major/components/majorDialog.vue b/src/views/safetyReview/baseSet/major/components/majorDialog.vue new file mode 100644 index 0000000..568f4c6 --- /dev/null +++ b/src/views/safetyReview/baseSet/major/components/majorDialog.vue @@ -0,0 +1,143 @@ +<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-width="110px" > + <el-form-item label="专业方向:" prop="label"> + <el-input v-model.trim="state.form.label"></el-input> + </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 {reactive, ref, toRefs} from 'vue' +import Editor from "@/components/Editor/index.vue"; +import {ElMessage} from "element-plus"; +import {addNotice} from "@/api/backManage/notice"; +import {addDict, editDict, getDictDetail} from "@/api/backManage/evaluate"; + +const dialogVisible = ref(false); +const title = ref(""); +const busRef = ref(); +const length = ref() +const emit = defineEmits(["getList"]); +const state = reactive({ + form: { + id: '', + label: '', + value: '', + dictType: "sys_major_orientation", + }, + formRules:{ + label: [{ required: true, message: '请输入业务范围', trigger: 'blur' }], + }, + +}) + +const openDialog = async (type, value) => { + length.value = value.listLength + title.value = type === 'add' ? '新增' : type ==='edit' ? '编辑' : '查看' ; + if(type === 'edit') { + state.form = value; + const param = { + dictId: value.id + } + const res = await getDictDetail(param); + if(res.code === 200){ + state.form = res.data + }else{ + ElMessage.warning(res.message) + } + } + dialogVisible.value = true; +} + +const onSubmit = async () => { + const valid = await busRef.value.validate(); + if(valid){ + if(title.value === '新增'){ + const param = { + dictType: "sys_major_orientation", + label: state.form.label, + value: length.value.toString() + } + const res = await addDict(param) + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '新增成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + }else if(title.value === '编辑'){ + const param = { + id: state.form.id, + dictType: state.form.dictType, + label: state.form.label, + value: state.form.value + } + const res = await editDict(param) + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '新增成功' + }); + }else{ + ElMessage.warning(res.message) + } + emit("getList") + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + } + } +} + +const handleClose = () => { + busRef.value.clearValidate(); + reset(); + dialogVisible.value = false; + +} +const reset = () => { + state.form = { + id: '', + label: '', + value: '', + dictType: "sys_major_orientation", + } +} +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/baseSet/major/index.vue b/src/views/safetyReview/baseSet/major/index.vue new file mode 100644 index 0000000..316b6f5 --- /dev/null +++ b/src/views/safetyReview/baseSet/major/index.vue @@ -0,0 +1,123 @@ +<template> + <div class="app-container"> + <div style="margin-bottom: 10px"> + <el-button + type="primary" + plain + icon="Plus" + @click="openDialog('add',{})" + >新增</el-button> + </div> + <!-- 表格数据 --> + <el-table v-loading="loading" :data="dataList" :border="true"> + <el-table-column label="专业方向" prop="label" align="center" /> + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" > + <template #default="scope"> + <el-button link type="primary" @click="openDialog('edit',scope.row)" >编辑</el-button> + <el-button link type="danger" @click="handleDelete(scope.row)" >删除</el-button> + </template> + </el-table-column> + </el-table> + + <div class="pag-container"> + <el-pagination + v-model:current-page="data.queryParams.pageNum" + v-model:page-size="data.queryParams.pageSize" + :page-sizes="[10,15,20,25]" + layout="total, sizes, prev, pager, next, jumper" + :total="total" + @size-change="handleSizeChange" + @current-change="handleCurrentChange" + /> + </div> + <major-dialog ref="busRef" @getList=getList></major-dialog> + </div> +</template> + +<script setup> +import {getCurrentInstance, onMounted, reactive, ref, toRefs} from "vue"; +import majorDialog from './components/majorDialog.vue' +import {ElMessage, ElMessageBox} from "element-plus"; +import {delDict, getDictList} from "@/api/backManage/evaluate"; +import {delNotice} from "@/api/backManage/notice"; +const { proxy } = getCurrentInstance(); +const loading = ref(false); +const busRef = ref(); +const dictType = ref("sys_major_orientation") +const data = reactive({ + queryParams: { + pageNum: 1, + pageSize: 10, + dictType: dictType.value + }, + total: 0, + dataList: [ + ] + + +}); + +const { queryParams, total, dataList } = toRefs(data); + +onMounted(() => { + getList(); +}); +const getList = async () => { + loading.value = true; + const res = await getDictList(data.queryParams); + if(res.code === 200){ + dataList.value = res.data.list + total.value = res.data.total + }else{ + ElMessage.warning(res.message) + } + loading.value = false; +} +const handleSizeChange = (val) => { + data.queryParams.pageNum = 1; + data.queryParams.pageSize = val + getList() +} +const handleCurrentChange = (val) => { + data.queryParams.pageNum = val + getList() +} +const openDialog = (type, value) => { + value.listLength = dataList.value.length> 0 ?dataList.value.length:0; + busRef.value.openDialog(type, value); +} + +/** 重置新增的表单以及其他数据 */ +function reset() { + proxy.resetForm("roleRef"); +} +const handleDelete = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const res = await delDict(val); + if(res.code === 200){ + ElMessage({ + type: 'success', + message: '删除成功' + }); + getList(); + }else{ + ElMessage.warning(res.message) + } + }) +} + +</script> +<style> +.pag-container{ +float: right; +margin-top: 10px; +} +</style> diff --git a/src/views/safetyReview/projectManage/components/contractManage.vue b/src/views/safetyReview/projectManage/components/contractManage.vue index a48ba7b..55d76a6 100644 --- a/src/views/safetyReview/projectManage/components/contractManage.vue +++ b/src/views/safetyReview/projectManage/components/contractManage.vue @@ -74,6 +74,7 @@ }); const riskOpen = async (type,val) => { + state.formData.projectId = val; if(type === 'detail' || type === 'edit' ){ const res = await getDetail({projectId: val}); if(res.code == 200){ @@ -95,7 +96,7 @@ if (res.code == 200) { ElMessage.success('保存成功') formRef.value.clearValidate(); - emit('getNextStatus', res.data); + emit('getNextStatus', state.formData.projectId); } else { ElMessage.warning(res.message) } diff --git a/src/views/safetyReview/projectManage/components/riskAnalysis.vue b/src/views/safetyReview/projectManage/components/riskAnalysis.vue index da3b0ae..cc167a3 100644 --- a/src/views/safetyReview/projectManage/components/riskAnalysis.vue +++ b/src/views/safetyReview/projectManage/components/riskAnalysis.vue @@ -405,6 +405,8 @@ } }else if(type === 'clickEdit'){ const { ...data} = JSON.parse(JSON.stringify(state.formData)) + data.id = val; + data.project.id = val; delete data.project.area; data.isInBusiness = state.tableData[0].status === 1; data.isSatisfyNeed = state.tableData[1].status === 1; diff --git a/src/views/safetyReview/projectManage/index.vue b/src/views/safetyReview/projectManage/index.vue index 2127984..1a9a477 100644 --- a/src/views/safetyReview/projectManage/index.vue +++ b/src/views/safetyReview/projectManage/index.vue @@ -86,7 +86,7 @@ <template #default="scope"> <el-button link type="primary" @click="toProcess('view',scope.row)">查看</el-button> <el-button link type="primary" @click="toProcess('edit',scope.row)">编辑</el-button> - <el-button link type="danger">删除</el-button> + <el-button link type="danger" @click="del(scope.row)">删除</el-button> </template> </el-table-column> </el-table> @@ -108,8 +108,9 @@ <script setup> import {onMounted, reactive, ref} from "vue"; -import {getProjectList, getProjectStatistics} from "@/api/projectManage/project"; -import {ElMessage} from "element-plus"; +import {delProject, getProjectList, getProjectStatistics} from "@/api/projectManage/project"; +import {ElMessage, ElMessageBox} from "element-plus"; +import {delMonitor} from "@/api/sysUsers"; const router = useRouter(); const loading = ref(false); @@ -185,6 +186,25 @@ value.type = type; router.push({ path: '/process', query: {id: value.id, type: type}}); } +const del = (val) => { + ElMessageBox.confirm( + '确定删除此条数据?', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + }) + .then( async() => { + const res = await delProject(val) + if(res.code == 200){ + ElMessage.success('数据删除成功') + getList() + }else{ + ElMessage.warning(res.message) + } + }) +} </script> <style scoped lang="scss"> diff --git a/src/views/safetyReview/projectManage/process.vue b/src/views/safetyReview/projectManage/process.vue index f5fecd4..e40806e 100644 --- a/src/views/safetyReview/projectManage/process.vue +++ b/src/views/safetyReview/projectManage/process.vue @@ -15,8 +15,8 @@ <span class="text-eclipse" style="margin-left: 5px">{{item.name}}</span> </div> </div> - <div v-for="child in item.subMenus" :key="child.id"> - <div class="down-item" :class="{itemActive: child.status === 1 || child.status === 3, itemPrev: child.status === 2}" @click="chooseSubMenu(child,true)"> + <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> @@ -38,16 +38,16 @@ <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> - <contract-manage ref="contractMngRef" v-if="selectedObj.id === 1" @getNextStatus="getNextStatus"></contract-manage> + <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> </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> - <el-button type="warning" style="width: 80px" v-if="projectStatus === 'edit' && selectedObj.status !== 1" @click="clickEdit">变更</el-button> -<!-- <el-button type="warning" style="width: 80px" v-if="selectedObj.status === 1" @click="save">暂存</el-button>--> - <el-button type="primary" style="width: 80px" @click="next">下一步</el-button> + <el-button type="warning" style="width: 80px" v-if="(projectStatus === 'add' && selectedObj.status === 1)||(projectStatus === 'edit' && selectedObj.status === 1) " @click="save">保存</el-button> + <el-button type="warning" style="width: 80px" v-if="(projectStatus === 'edit' && selectedObj.status !== 1) || (projectStatus === 'add' && selectedObj.status !== 1) " @click="clickEdit">变更</el-button> + <el-button type="primary" style="width: 80px" v-if="selectedObj.id !== 14" @click="next">下一步</el-button> </div> </div> </el-card> @@ -232,17 +232,18 @@ if(item.id <= res.data){ item.status = 2 } - if(item.id === res.data + 1){ - item.status = 4; - nextObj.value = item; + 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) - + setTimeout(() => { + goRouter(selectedObj.value.id) + }, 10) } }) menuList.value[0].status = 1; @@ -257,13 +258,16 @@ if(item.id <= res.data) { item.status = 2 } - if(item.id === res.data + 1){ - item.status = 4; - nextObj.value = item; + 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) @@ -283,9 +287,11 @@ if(item.id <= res.data) { item.status = 2 } - if(item.id === res.data + 1){ - item.status = 4; - nextObj.value = item; + if(projectStatus.value !== 'view'){ + if(item.id === res.data + 1){ + item.status = 4; + nextObj.value = item; + } } if(item.id === res.data){ item.status = 3; @@ -310,9 +316,11 @@ if(item.id <= res.data) { item.status = 2 } - if(item.id === res.data + 1){ - item.status = 4; - nextObj.value = item; + if(projectStatus.value !== 'view'){ + if(item.id === res.data + 1){ + item.status = 4; + nextObj.value = item; + } } if(item.id === res.data){ item.status = 3; @@ -339,9 +347,11 @@ if(item.id <= res.data) { item.status = 2 } - if(item.id === res.data + 1){ - item.status = 4; - nextObj.value = item; + if(projectStatus.value !== 'view'){ + if(item.id === res.data + 1){ + item.status = 4; + nextObj.value = item; + } } if(item.id === res.data){ item.status = 3; @@ -429,6 +439,11 @@ selectedObj.value.status = 1; nextObj.value.status = 2; nextObj.value = val; + // if(flag){ + // setTimeout(() => { + // goRouter(selectedObj.value.id) + // }, 10) + // } //跳转 }, 10) } @@ -446,20 +461,25 @@ }else if (selectedObj.value.id+ 1 >11){ nextMenu(4) } - } else { - //下一步——保存 - goRouter(selectedObj.value.id,'add') + }else { + setTimeout(() => { + isShowMenu.value = false; + ElMessage({ + type: 'warning', + message: '请按顺序操作,未完成步骤无法查看!' + }); + }, 10) } - - setTimeout( () => { - goRouter(selectedObj.value.id) - }, 100) + // + // setTimeout( () => { + // goRouter(selectedObj.value.id) + // }, 100) } const nextMenu = (id) => { menuList.value[id].subMenus.forEach( item => { if(item.id === selectedObj.value.id + 1){ - chooseSubMenu(item,false); + chooseSubMenu(item,true); } }) } @@ -467,7 +487,7 @@ const backMenu = (id) => { menuList.value[id].subMenus.forEach(async item => { if(item.id === selectedObj.value.id - 1){ - await chooseSubMenu(item,false); + await chooseSubMenu(item,true); } }) } @@ -485,110 +505,146 @@ }else if (selectedObj.value.id-1 >11){ backMenu(4) } - setTimeout( () => { - goRouter(selectedObj.value.id) - // switch (selectedObj.value.id){ - // case 1: - // if(projectStatus.value === 'view'){ - // riskRef.value.riskOpen('detail',projectId.value); - // }else { - // riskRef.value.riskOpen('edit',projectId.value); - // } - // break; - // case 2: - // - // break; - // case 3: - // - // break; - // case 4: - // - // break; - // case 5: - // - // break; - // case 6: - // - // break; - // case 7: - // - // break; - // case 8: - // - // break; - // case 9: - // - // break; - // case 10: - // - // break; - // case 11: - // - // break; - // case 12: - // - // break; - // case 13: - // - // break; - // case 14: - // - // break; - // } - }, 100) + // setTimeout( () => { + // goRouter(selectedObj.value.id) + // }, 100) } const clickEdit = () => { + goRouter(selectedObj.value.id,'clickEdit') - // switch (selectedObj.value.id){ - // case 1: - // riskRef.value.riskOpen('clickEdit',projectId.value); - // break; - // case 2: - // - // break; - // case 3: - // - // break; - // case 4: - // - // break; - // case 5: - // - // break; - // case 6: - // - // break; - // case 7: - // - // break; - // case 8: - // - // break; - // case 9: - // - // break; - // case 10: - // - // break; - // case 11: - // - // break; - // case 12: - // - // break; - // case 13: - // - // break; - // case 14: - // - // break; - // } } -const getNextStatus = (val) => { - getStatus(val); +const getNextStatus = async (val) => { + projectId.value = val; + console.log("val",val) + const res = await getProjectStatus(val); + if(res.code == 200){ + 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 = () => { + goRouter(selectedObj.value.id,'add') + +} const goRouter = (val,type) => { switch (val){ case 1: @@ -597,9 +653,9 @@ }else if (type === 'clickEdit'){ riskRef.value.riskOpen('clickEdit',projectId.value); }else { - if(projectStatus.value === 'view'){ + if(projectStatus.value === 'view' || projectStatus.value === 'add'){ riskRef.value.riskOpen('detail',projectId.value); - }else { + }else if(projectStatus.value === 'edit'){ riskRef.value.riskOpen('edit',projectId.value); } } @@ -607,13 +663,13 @@ break; case 2: if(type === 'add'){ - contractMngRef.value.riskOpen('add',''); + contractMngRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ contractMngRef.value.riskOpen('clickEdit',projectId.value); }else { - if(projectStatus.value === 'view'){ + if(projectStatus.value === 'view' || projectStatus.value === 'add'){ contractMngRef.value.riskOpen('detail',projectId.value); - }else { + }else if(projectStatus.value === 'edit'){ contractMngRef.value.riskOpen('edit',projectId.value); } } @@ -621,13 +677,13 @@ break; case 3: if(type === 'add'){ - evaluteRef.value.riskOpen('add',''); + evaluteRef.value.riskOpen('add',projectId.value); }else if (type === 'clickEdit'){ evaluteRef.value.riskOpen('clickEdit',projectId.value); }else { - if(projectStatus.value === 'view'){ + if(projectStatus.value === 'view' || projectStatus.value === 'add'){ evaluteRef.value.riskOpen('detail',projectId.value); - }else { + }else if(projectStatus.value === 'edit'){ evaluteRef.value.riskOpen('edit',projectId.value); } } @@ -776,6 +832,8 @@ border-radius: 50%; background: #b9c2d5; margin-right: 10px; + min-width: 21px; + min-height: 21px; } .item-icon-status1{ color: #3b75ff; diff --git a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue index dc08874..e0a22b9 100644 --- a/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue +++ b/src/views/safetyReview/userManage/expertUsers/components/expertDialog.vue @@ -3,20 +3,20 @@ <el-dialog v-model="dialogVisible" :title="state.title" - width="830px" + width="900px" :before-close="handleClose" > - <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="110px" > + <el-form :model="state.form" size="default" ref="superRef" :rules="state.formRules" label-width="150px" > <el-row :gutter="22"> <el-col :span="11"> <el-form-item label="姓名:" prop="name" v-if="state.title !== '修改密码'"> - <el-input v-model.trim="state.form.name" ></el-input> + <el-input v-model.trim="state.form.name" placeholder="请输入姓名"></el-input> </el-form-item> </el-col> <el-col :span="11"> <el-form-item label="手机号:" prop="phone" v-if="state.title !== '修改密码'"> - <el-input v-model.trim="state.form.phone" :maxlength="11" ></el-input> + <el-input v-model.trim="state.form.phone" :maxlength="11" placeholder="手机号"></el-input> </el-form-item> </el-col> @@ -24,7 +24,7 @@ <el-row :gutter="22"> <el-col :span="11"> <el-form-item label="用户名:" prop="username" v-if="state.title !== '修改密码'"> - <el-input v-model.trim="state.form.username" :disabled="state.title === '编辑'"></el-input> + <el-input v-model.trim="state.form.username" :disabled="state.title === '编辑'" placeholder="请输入用户名"></el-input> </el-form-item> </el-col> <el-col :span="11"> @@ -39,7 +39,7 @@ <el-row :gutter="22"> <el-col :span="11"> <el-form-item label="所属机构:" prop="agencyId" v-if="state.title !== '修改密码'"> - <el-select v-model="state.form.agencyId" v-loadMore="loadMore" class="m-2" placeholder="请选择机构" popper-class="more_select_dropdown" @change="selectChange" > + <el-select v-model="state.form.agencyId" style="width: 100%" v-loadMore="loadMore" class="m-2" placeholder="请选择机构" popper-class="more_select_dropdown" > <el-option v-for="item in state.agencyList" :key="item.id" @@ -51,20 +51,40 @@ </el-col> <el-col :span="11"> <el-form-item label="职务:" prop="post" v-if="state.title !== '修改密码'"> - <el-input v-model.trim="state.form.post" :maxlength="11" ></el-input> +<!-- <el-input v-model.trim="state.form.post" :maxlength="11" ></el-input>--> + <el-select v-model="state.form.post" class="m-2" style="width: 100%" placeholder="请选择职务" popper-class="more_select_dropdown" > + <el-option + v-for="item in state.postList" + :key="item.id" + :label="item.name" + :value="item.name" + /> + </el-select> </el-form-item> </el-col> </el-row> <el-row :gutter="22"> <el-col :span="11"> <el-form-item label="职称:" prop="jobTitle" v-if="state.title !== '修改密码'"> - <el-input v-model.trim="state.form.jobTitle" :maxlength="11" ></el-input> + <el-input v-model.trim="state.form.jobTitle" :maxlength="11" placeholder="请输入职称"></el-input> </el-form-item> </el-col> <el-col :span="11"> - <el-form-item label="专业方向:" prop="major" v-if="state.title !== '修改密码'"> - <el-input v-model.trim="state.form.major" :maxlength="11" ></el-input> + <el-form-item label="专业方向:" prop="majorShow" v-if="state.title !== '修改密码'" > + <el-select v-model="state.form.majorShow" value-key="id" class="m-2" style="width: 100%" multiple placeholder="请选择专业方向" popper-class="more_select_dropdown" @change="selectChange"> + <el-option + v-for="item in state.majorList" + :key="item.id" + :label="item.label" + :value="item" + /> + </el-select> </el-form-item> + <div v-for="(item,index) in state.form.majorShow" :key="item.id" style="margin-bottom: 20px" > + <el-form-item :label="item.label+'证书编号:'" > + <el-input v-model="item.certificateNo" :placeholder="'请输入'+item.label+'证书编号'"></el-input> + </el-form-item> + </div> </el-col> </el-row> <el-row :gutter="22"> @@ -79,12 +99,29 @@ </el-form-item> </el-col> </el-row> - <el-form-item label="专家类型:" prop="expertType" v-if="state.title !== '修改密码'"> + <el-row :gutter="22"> + <el-col :span="11"> + <el-form-item label="专家类型:" prop="expertType" v-if="state.title !== '修改密码'"> <el-radio-group v-model="state.form.expertType" class="ml-4"> - <el-radio :label="1" >安全评价</el-radio> - <el-radio :label="2" >检验检测</el-radio> + <el-radio :label="1" >安全评价</el-radio> + <el-radio :label="2" >检验检测</el-radio> </el-radio-group> - </el-form-item> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="评价师等级:" prop="level" v-if="state.title !== '修改密码'"> + <el-select v-model="state.form.level" class="m-2" style="width: 100%" placeholder="请选择评价师等级" popper-class="more_select_dropdown" > + <el-option + v-for="item in state.levelList" + :key="item.id" + :label="item.name" + :value="item.name" + /> + </el-select> + </el-form-item> + </el-col> + </el-row> + <el-form-item prop="socialAttach" label="社保:" v-if="state.title !== '修改密码'"> <el-upload @@ -170,6 +207,7 @@ import {resetUserPwd} from "../../../../../api/sysUsers"; import {getToken} from "@/utils/auth"; import {getInsitutionList} from "@/api/backManage/insitution"; +import {getDictList} from "@/api/backManage/evaluate"; const emit = defineEmits(["getList"]); const dialogVisible = ref(false) @@ -267,6 +305,8 @@ salaryAttach: [], post: '', jobTitle: '', + level: '', + majorShow: [], major: '', expertType: 1, password: '', @@ -281,10 +321,11 @@ password: [{ required: true, validator: validatePwd, trigger: 'blur' }], confirmPassword: [{ required: true, validator: equalToPassword, trigger: 'blur' }], phone: [{ required: true, validator: validateUserPhone, trigger: 'blur' }], - post: [{ required: true, message: '请输入职务', trigger: 'blur' }], + post: [{ required: true, message: '请选择职务', trigger: 'change' }], jobTitle:[{ required: true, message: '请输入职称', trigger: 'blur' }], - major:[{ required: true, message: '请输入专业方向', trigger: 'blur' }], - // agencyId: [{ required: true, message: '请选择所属机构', trigger: 'blur' }], + level: [{ required: true, message: '请选择评价师等级', trigger: 'change' }], + majorShow:[{ required: true, message: '请选择专业方向', trigger: 'change' }], + agencyId: [{ required: true, message: '请选择所属机构', trigger: 'change' }], socialAttach: [{required: true, trigger: "blur", message: "请上传社保图片"}], medicalAttach: [{required: true, trigger: "blur", message: "请上传医保图片"}], salaryAttach: [{required: true, trigger: "blur", message: "请上传工资清单"}], @@ -299,10 +340,52 @@ dialogImg: false, pageNum: 1, pageSize: 10, + postList: [ + { + id: '1', + name: '法人' + }, + { + id: '2', + name: '过程控制负责人' + }, + { + id: '3', + name: '机构负责人' + }, + { + id: '4', + name: '技术负责人' + }, + { + id: '5', + name: '员工' + }, + ], + majorList: [], + levelList: [ + { + id: '1', + name: '一级' + }, + { + id: '2', + name: '二级' + }, + { + id: '3', + name: '三级' + }, + { + id: '4', + name: '其他' + }, + ] }) onMounted(()=>{ getAgency() + getMajor() }) const openDialog = async (type, value) => { @@ -333,6 +416,19 @@ name: url.name } }); + const arr = [] + const certificateList = JSON.parse(res.data.certificateNo) + for( let key in certificateList) { + arr.push( { + id: parseInt(key), + certificateNo: certificateList[key], + }) + arr.forEach((item,index) => { + item.label = res.data.majorNames[index] + }) + } + state.form.majorShow = arr; + console.log(state.form.majorShow,'certificateList') }else{ ElMessage.warning(res.message) } @@ -364,9 +460,22 @@ const onSubmit = async () => { const valid = await superRef.value.validate(); if(valid){ + state.form.majorShow.forEach(item => { + if(item.certificateNo == ''){ + ElMessage.warning('请输入对应的证书编号') + return ; + } + }) if(state.title == '新增'){ const {confirmPassword,id,socialList,salaryList,medicalList,...data} = state.form data.password = Base64.encode(data.password) + let obj = {}; + data.majorShow.forEach(item => { + obj[item.id] = item.certificateNo; + }) + data.major = JSON.stringify(obj); + delete data.majorShow; + console.log('data',data) const res = await addExpert(data); if(res.code == 200){ @@ -384,6 +493,14 @@ }else if(state.title == '编辑'){ const {confirmPassword,socialList,salaryList,medicalList,...data} = state.form data.password = Base64.encode(data.password) + let obj = {}; + data.majorShow.forEach(item => { + obj[item.id] = item.certificateNo; + }) + data.major = JSON.stringify(obj); + delete data.majorShow; + delete data.certificateNo; + delete data.majorNames; console.log('editdata',data) const res = await editExpert(data) if(res.code == 200){ @@ -433,7 +550,9 @@ salaryAttach: [], post: '', jobTitle: '', - major: '', + level:'', + majorShow: [], + major:'', expertType: 1, password: '', confirmPassword: '', @@ -441,6 +560,7 @@ state.salaryList = []; state.medicalList = []; state.socialList = []; + state.form.selectMajorList = []; } const picSize = async (rawFile) => { if(rawFile.size / 1024 / 1024 > 5){ @@ -545,6 +665,19 @@ ElMessage.warning(res.message) } } +const getMajor = async () => { + const queryParams = { + pageNum: 1, + pageSize: 50, + dictType: 'sys_major_orientation' + } + const res = await getDictList(queryParams); + if(res.code === 200){ + state.majorList = res.data.list + }else{ + ElMessage.warning(res.message) + } +} @@ -553,14 +686,16 @@ console.log(' 触底了'); // 防抖处理 setTimeout(() => { - if (finshed.value) return //值为true,则代表没有数据了 - state.pageNum += 1 - getAgency() + if (finshed.value) return //值为true,则代表没有数据了 + state.pageNum += 1 + getAgency() }, 500) } + //选中值发生变化时触发 -const selectChange = () => { - console.log('选中的xxxx') +const selectChange = (val) => { + // state.form.selectMajorList= val; + console.log('选中的xxxx',val) } defineExpose({ diff --git a/src/views/safetyReview/userManage/expertUsers/index.vue b/src/views/safetyReview/userManage/expertUsers/index.vue index 46a7b12..ab11d71 100644 --- a/src/views/safetyReview/userManage/expertUsers/index.vue +++ b/src/views/safetyReview/userManage/expertUsers/index.vue @@ -19,16 +19,16 @@ <!-- 表格数据 --> <el-table v-loading="loading" :data="dataList" :border="true"> <el-table-column label="用户ID" prop="id" align="center" /> - <el-table-column label="姓名" prop="name" align="center" /> - <el-table-column label="手机号" prop="phone" align="center" /> - <el-table-column label="用户名" prop="username" 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" /> + <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"> @@ -80,12 +80,13 @@ </div> </template> </el-table-column> - <el-table-column label="职务" prop="post" align="center" /> + <el-table-column label="职务" prop="post" align="center" width="120" /> <el-table-column label="职称" prop="jobTitle" align="center" /> - <el-table-column label="专业方向" prop="major" 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" /> <el-table-column label="最近评价时间" prop="lastTime" align="center" width="120" /> - <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="120" > + <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="140" > <template #default="scope"> <el-button link type="primary" @click="openDialog('edit',scope.row)">编辑</el-button> <el-button link type="danger" @click="handleDelete(scope.row)" >删除</el-button> -- Gitblit v1.9.2