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