zhouwenxuan
2024-01-17 b215fb6dfd4ede3cb1b08985bb04ef5803a52454
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({