马宇豪
2024-12-10 17527437977dc2e2c39c739796e8afd881df35a1
src/views/safetyReview/expertManage/applyRecords/components/expertForm.vue
@@ -1,399 +1,479 @@
<template>
    <div class="notice">
        <el-dialog
            v-model="dialogVisible"
            :title="state.title"
            width="80%"
            :before-close="handleClose"
        >
          <div class="main_form">
            <el-form :model="state.form" :rules="state.rules" ref="ruleFormRef" label-width="200px">
              <el-row>
                <el-col :span="20">
                  <el-form-item label="专业类别" prop="domain">
                    <el-cascader
                        :disabled="state.disable"
                        style="width: 100%"
                        v-model="state.form.domain"
                        :options="state.expertsType"
                        :props="{ expandTrigger: 'hover',value: 'classifyName',label: 'classifyName',emitPath: false }"
                        @change="professionChange"></el-cascader>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="业务处室:" prop="deptId">
                    <el-cascader
                        style="width: 100%"
                        clearable
                        v-model="state.form.deptId"
                        :options="state.deptList"
                        :props="{ expandTrigger: 'hover', value: 'deptId',label: 'deptName',emitPath: false}"></el-cascader>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="姓名" prop="name">
                    <el-input v-model="state.form.name" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="性别" prop="sex">
                    <el-radio-group v-model="state.form.sex" :disabled="state.disable">
                      <el-radio :label="0">男</el-radio>
                      <el-radio :label="1">女</el-radio>
                    </el-radio-group>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="出生日期" prop="birthday">
                    <el-date-picker
                        style="width: 100%"
                        v-model="state.form.birthday"
                        value-format="YYYY-MM-DD"
                        type="date"
                        placeholder="选择日期" :disabled="state.disable">
                    </el-date-picker>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="联系电话" prop="phone">
                    <el-input v-model="state.form.phone" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="职称" prop="title">
                    <!--              <el-select v-model="form.title" placeholder="请选择" style="width: 100%">-->
                    <!--                <el-option-->
                    <!--                  v-for="item in professionalList"-->
                    <!--                  :key="item.value"-->
                    <!--                  :label="item.label"-->
                    <!--                  :value="item.value">-->
                    <!--                </el-option>-->
                    <!--              </el-select>-->
                    <el-input v-model="state.form.title" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="职称或资质证明材料" prop="evidence">
                    <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'著作')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.evidenceList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'证明')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="2寸免冠证件照">
                    <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" :disabled="state.disable" method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'证件照')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1' v-model:file-list="state.fileList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'证件照')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="身份证号" prop="idCard">
                    <el-input v-model="state.form.idCard" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="在岗情况" prop="dutyStatus">
                    <el-radio-group v-model="state.form.dutyStatus" :disabled="state.disable">
                      <el-radio :label="0">在岗</el-radio>
                      <el-radio :label="1">退休</el-radio>
                    </el-radio-group>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="最高学历" prop="degree">
                    <el-input v-model="state.form.degree" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="单位全称" prop="companyName">
                    <el-input v-model="state.form.companyName" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="单位地址">
                    <el-input v-model="state.form.companyAddress" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="所在部门">
                    <el-input v-model="state.form.deptName" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="职务">
                    <el-input v-model="state.form.job" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="单位电话">
                    <el-input v-model="state.form.companyTelephone" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="传真号码">
                    <el-input v-model="state.form.faxNum" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="电子邮箱">
                    <el-input v-model="state.form.email" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="毕业学校">
                    <el-input v-model="state.form.graduationSchool" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="所学专业">
                    <el-input v-model="state.form.speciality" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="现从事的专业及方向">
                    <el-input v-model="state.form.currentProfession" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="支撑方向_安全生产" prop="supportDirectionEmergency">
                    <!--              <el-radio-group v-model="form.supportDirectionSafety">-->
                    <!--                <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
                    <!--              </el-radio-group>-->
                    <el-checkbox-group v-model="state.form.supportDirectionSafety" :disabled="state.disable">
                      <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
                    </el-checkbox-group>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="支撑方向_防灾减灾救灾" prop="supportDirectionEmergency">
                    <!--              <el-radio-group v-model="form.supportDirectionPrevention">-->
                    <!--                <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
                    <!--              </el-radio-group>-->
                    <el-checkbox-group v-model="state.form.supportDirectionPrevention" :disabled="state.disable">
                      <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
                    </el-checkbox-group>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="支撑方向_应急救援" prop="supportDirectionEmergency">
                    <!--              <el-radio-group v-model="form.supportDirectionEmergency">-->
                    <!--                <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
                    <!--              </el-radio-group>-->
                    <el-checkbox-group v-model="state.form.supportDirectionEmergency" :disabled="state.disable">
                      <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{ item.label }}</el-checkbox>
                    </el-checkbox-group>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="工作简历" prop="resumeKey">
                    <el-upload accept=".pdf" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'简历')" :on-exceed="showTip" :limit='8' v-model:file-list="state.resumeList" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'简历')" :before-remove="beforeRemove">
                      <el-button type="primary">点击上传</el-button>
                      <template #tip>
                        <div class="el-upload__tip">上传pdf格式文件尺寸小于5M,最多可上传5份</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="发明、著作、学术论文情况(何时、何地出版或发表)">
                    <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'著作')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.inventionList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'著作')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="受过何种奖励">
                    <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'奖励')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.rewardList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'奖励')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="应急管理相关工作主要业绩及研究成果">
                    <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'研究')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.achievementList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'研究')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="专家本人意见" prop="recommendUnitOpinionKey">
                    <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'本人')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.proAdviceList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'本人')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="推荐单位意见" prop="recommendUnitOpinionKey">
                    <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post" :disabled="state.disable" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'单位')" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8' v-model:file-list="state.adviceList" list-type="picture-card" :before-upload="picSize" :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'单位')" :before-remove="beforeRemove">
                      <el-icon><Plus /></el-icon>
                      <template #tip>
                        <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                      </template>
                    </el-upload>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="20">
                  <el-form-item label="补充说明">
                    <el-input v-model="state.form.remark" type="textarea" :autosize="{ minRows: 2}" :readonly="state.disable"></el-input>
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row v-if="state.title == '查看'">
                <el-col :span="20">
                  <el-form-item label="专家聘用期限" prop="employTime">
                    <el-date-picker
                        :disabled="state.disable"
                        v-model="state.assessForm.employTime"
                        type="daterange"
                        range-separator="至"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期"
                        value-format="YYYY-MM-DD"
                    />
                  </el-form-item>
                </el-col>
              </el-row>
              <el-row v-if="state.title == '查看'">
                <el-col :span="20">
                  <el-form-item label="专家评定等级" prop="ratingLevel">
                    <el-radio-group v-model="state.assessForm.ratingLevel" :disabled="state.disable">
                      <el-radio label="1">一级</el-radio>
                      <el-radio label="2">二级</el-radio>
                      <el-radio label="3">三级</el-radio>
                    </el-radio-group>
                  </el-form-item>
                </el-col>
              </el-row>
            </el-form>
            <el-dialog v-model="imgDialog">
              <img style="width: 100%" w-full :src="state.dialogImageUrl" alt="">
            </el-dialog>
  <div class="notice">
    <el-dialog
        v-model="dialogVisible"
        :title="state.title"
        width="80%"
        :before-close="handleClose"
    >
      <div class="main_form">
        <el-form :model="state.form" :rules="state.rules" ref="ruleFormRef" label-width="200px">
          <el-row>
            <el-col :span="20">
              <el-form-item label="专业类别" prop="profession">
<!--                <el-cascader-->
<!--                    :disabled="state.disable"-->
<!--                    style="width: 100%"-->
<!--                    v-model="state.form.domain"-->
<!--                    :options="state.expertsType"-->
<!--                    :props="{ expandTrigger: 'hover',value: 'classifyName',label: 'classifyName',emitPath: false}"-->
<!--                    @change="professionChange"></el-cascader>-->
                <el-cascader
                    style="width: 100%"
                    clearable
                    :disabled="state.disable"
                    v-model="state.form.profession"
                    :options="state.expertsType"
                    :props="{ expandTrigger: 'hover', value: 'id',label: 'classifyName'}"
                    @change="professionChange"></el-cascader>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="业务处室:" prop="deptId">
                <el-cascader
                    style="width: 100%"
                    clearable
                    :disabled="state.disable"
                    v-model="state.form.deptId"
                    :options="state.deptList"
                    :props="{ expandTrigger: 'hover', value: 'deptId',label: 'deptName',emitPath: false}"></el-cascader>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="姓名" prop="name">
                <el-input v-model="state.form.name" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="性别" prop="sex">
                <el-radio-group v-model="state.form.sex" :disabled="state.disable">
                  <el-radio :label="0">男</el-radio>
                  <el-radio :label="1">女</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="出生日期" prop="birthday">
                <el-date-picker
                    style="width: 100%"
                    v-model="state.form.birthday"
                    value-format="YYYY-MM-DD"
                    type="date"
                    placeholder="选择日期" :disabled="state.disable">
                </el-date-picker>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="联系电话" prop="phone">
                <el-input v-model="state.form.phone" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="职称" prop="title">
                <!--              <el-select v-model="form.title" placeholder="请选择" style="width: 100%">-->
                <!--                <el-option-->
                <!--                  v-for="item in professionalList"-->
                <!--                  :key="item.value"-->
                <!--                  :label="item.label"-->
                <!--                  :value="item.value">-->
                <!--                </el-option>-->
                <!--              </el-select>-->
                <el-input v-model="state.form.title" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="职称或资质证明材料" prop="evidence">
                <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'著作')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8'
                           v-model:file-list="state.evidenceList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'证明')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="2寸免冠证件照">
                <el-upload accept="image/*" :action="state.uploadUrl" :headers="state.header" :disabled="state.disable"
                           method="post" :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'证件照')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='1'
                           v-model:file-list="state.fileList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'证件照')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传1张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="身份证号" prop="idCard">
                <el-input v-model="state.form.idCard" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="在岗情况" prop="dutyStatus">
                <el-radio-group v-model="state.form.dutyStatus" :disabled="state.disable">
                  <el-radio :label="0">在岗</el-radio>
                  <el-radio :label="1">退休</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="最高学历" prop="degree">
                <el-input v-model="state.form.degree" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="单位全称" prop="companyName">
                <el-input v-model="state.form.companyName" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="单位地址">
                <el-input v-model="state.form.companyAddress" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="所在部门">
                <el-input v-model="state.form.deptName" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="职务">
                <el-input v-model="state.form.job" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="单位电话">
                <el-input v-model="state.form.companyTelephone" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="传真号码">
                <el-input v-model="state.form.faxNum" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="电子邮箱">
                <el-input v-model="state.form.email" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="毕业学校">
                <el-input v-model="state.form.graduationSchool" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="所学专业">
                <el-input v-model="state.form.speciality" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="现从事的专业及方向">
                <el-input v-model="state.form.currentProfession" :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="支撑方向_安全生产" prop="supportDirectionEmergency">
                <!--              <el-radio-group v-model="form.supportDirectionSafety">-->
                <!--                <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
                <!--              </el-radio-group>-->
                <el-checkbox-group v-model="state.form.supportDirectionSafety" :disabled="state.disable">
                  <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{
                      item.label
                    }}
                  </el-checkbox>
                </el-checkbox-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="支撑方向_防灾减灾救灾" prop="supportDirectionEmergency">
                <!--              <el-radio-group v-model="form.supportDirectionPrevention">-->
                <!--                <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
                <!--              </el-radio-group>-->
                <el-checkbox-group v-model="state.form.supportDirectionPrevention" :disabled="state.disable">
                  <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{
                      item.label
                    }}
                  </el-checkbox>
                </el-checkbox-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="支撑方向_应急救援" prop="supportDirectionEmergency">
                <!--              <el-radio-group v-model="form.supportDirectionEmergency">-->
                <!--                <el-radio v-for="item in directionList" :label="item.value" :key="item.value">{{ item.label }}</el-radio>-->
                <!--              </el-radio-group>-->
                <el-checkbox-group v-model="state.form.supportDirectionEmergency" :disabled="state.disable">
                  <el-checkbox v-for="item in state.directionList" :label="item.value" :key="item.value">{{
                      item.label
                    }}
                  </el-checkbox>
                </el-checkbox-group>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="工作简历" prop="resumeKey">
                <el-upload accept=".pdf" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'简历')"
                           :on-exceed="showTip" :limit='8' v-model:file-list="state.resumeList" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'简历')"
                           :before-remove="beforeRemove">
                  <el-button type="primary">点击上传</el-button>
                  <template #tip>
                    <div class="el-upload__tip">上传pdf格式文件尺寸小于5M,最多可上传5份</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="发明、著作、学术论文情况(何时、何地出版或发表)">
                <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'著作')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8'
                           v-model:file-list="state.inventionList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'著作')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="受过何种奖励">
                <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'奖励')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8'
                           v-model:file-list="state.rewardList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'奖励')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="应急管理相关工作主要业绩及研究成果">
                <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'研究')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8'
                           v-model:file-list="state.achievementList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'研究')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="专家本人意见" prop="recommendUnitOpinionKey">
                <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'本人')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8'
                           v-model:file-list="state.proAdviceList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'本人')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="推荐单位意见" prop="recommendUnitOpinionKey">
                <el-upload accept="image/*" multiple :action="state.uploadUrl" :headers="state.header" method="post"
                           :disabled="state.disable"
                           :on-success="(res, uploadFile)=>handleAvatarSuccess(res, uploadFile,'单位')"
                           :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='8'
                           v-model:file-list="state.adviceList" list-type="picture-card" :before-upload="picSize"
                           :on-remove="(file, uploadFiles)=>handleRemove(file, uploadFiles,'单位')"
                           :before-remove="beforeRemove">
                  <el-icon>
                    <Plus/>
                  </el-icon>
                  <template #tip>
                    <div class="el-upload__tip">上传jpg/png图片尺寸小于5M,最多可上传5张</div>
                  </template>
                </el-upload>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row>
            <el-col :span="20">
              <el-form-item label="补充说明">
                <el-input v-model="state.form.remark" type="textarea" :autosize="{ minRows: 2}"
                          :readonly="state.disable"></el-input>
              </el-form-item>
            </el-col>
          </el-row>
          <el-row v-if="state.title == '查看'">
            <el-col :span="20">
              <el-form-item label="专家聘用期限" prop="employTime">
                <el-date-picker
                    :disabled="state.disable"
                    v-model="state.assessForm.employTime"
                    type="daterange"
                    range-separator="至"
                    start-placeholder="开始日期"
                    end-placeholder="结束日期"
                    value-format="YYYY-MM-DD"
                />
              </el-form-item>
            </el-col>
          </el-row>
          <el-row v-if="state.title == '查看'">
            <el-col :span="20">
              <el-form-item label="专家评定等级" prop="ratingLevel">
                <el-radio-group v-model="state.assessForm.ratingLevel" :disabled="state.disable">
                  <el-radio label="1">一级</el-radio>
                  <el-radio label="2">二级</el-radio>
                  <el-radio label="3">三级</el-radio>
                </el-radio-group>
              </el-form-item>
            </el-col>
          </el-row>
        </el-form>
        <el-dialog v-model="imgDialog">
          <img style="width: 100%" w-full :src="state.dialogImageUrl" alt="">
        </el-dialog>
            <el-dialog
                v-model="state.assessDialog"
                title="评定详情"
                width="50%"
                :before-close="closeAssess"
            >
              <el-form :model="state.assessForm" :rules="state.assessRules" ref="assessFormRef" label-width="200px">
                <el-form-item label="专家聘用期限" prop="employTime">
                  <el-date-picker
                      v-model="state.assessForm.employTime"
                      type="daterange"
                      range-separator="至"
                      start-placeholder="开始日期"
                      end-placeholder="结束日期"
                      value-format="YYYY-MM-DD"
                  />
                </el-form-item>
                <el-form-item label="专家评定等级" prop="ratingLevel">
                  <el-radio-group v-model="state.assessForm.ratingLevel">
                    <el-radio label="1">一级</el-radio>
                    <el-radio label="2">二级</el-radio>
                    <el-radio label="3">三级</el-radio>
                  </el-radio-group>
                </el-form-item>
              </el-form>
              <template #footer>
        <el-dialog
            v-model="state.assessDialog"
            title="评定详情"
            width="50%"
            :before-close="closeAssess"
        >
          <el-form :model="state.assessForm" :rules="state.assessRules" ref="assessFormRef" label-width="200px">
            <el-form-item label="专家聘用期限" prop="employTime">
              <el-date-picker
                  v-model="state.assessForm.employTime"
                  type="daterange"
                  range-separator="至"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  value-format="YYYY-MM-DD"
              />
            </el-form-item>
            <el-form-item label="专家评定等级" prop="ratingLevel">
              <el-radio-group v-model="state.assessForm.ratingLevel">
                <el-radio label="1">一级</el-radio>
                <el-radio label="2">二级</el-radio>
                <el-radio label="3">三级</el-radio>
              </el-radio-group>
            </el-form-item>
          </el-form>
          <template #footer>
                <span class="dialog-footer">
                  <el-button @click="closeAssess" size="default">取 消</el-button>
                  <el-button type="primary" @click="assessSubmit(assessFormRef)" size="default" v-preReClick>确认</el-button>
                  <el-button type="primary" @click="assessSubmit(assessFormRef)" size="default"
                             v-preReClick>确认</el-button>
                </span>
              </template>
            </el-dialog>
          </div>
            <template #footer>
          </template>
        </el-dialog>
      </div>
      <template #footer>
              <span class="dialog-footer" v-if="state.title == '新增' || state.title == '编辑'">
                  <el-button @click="handleClose" size="default">取 消</el-button>
                  <el-button type="primary" @click="onSubmit(ruleFormRef)" size="default" v-preReClick>确认</el-button>
              </span>
              <span class="dialog-footer" v-if="state.title == '评定'">
                  <el-button type="danger" size="default" @click="startAssess(3)"  v-preReClick>评定驳回</el-button>
        <span class="dialog-footer" v-if="state.title == '评定'">
                  <el-button type="danger" size="default" @click="startAssess(3)" v-preReClick>评定驳回</el-button>
                  <el-button type="primary" @click="startAssess(2)" size="default" v-preReClick>评定通过</el-button>
              </span>
            </template>
        </el-dialog>
    </div>
      </template>
    </el-dialog>
  </div>
</template>
<script setup>
import {reactive, ref, toRefs, defineEmits, nextTick, onMounted, getCurrentInstance} from 'vue'
@@ -401,15 +481,16 @@
import {verifyPhone, verifyIdCard} from "../../../../../utils/validate"
import {addExpertInfo, getExpertTypes, getInfo, modExpertInfo, uploadFile, changeApprove} from "@/api/form"
import {delPic} from "@/api/login"
import { getToken } from "@/utils/auth"
import {getToken} from "@/utils/auth"
import {Base64} from "js-base64"
import {listOutDept} from "@/api/system/dept";
const emit = defineEmits(["getList"])
const dialogVisible = ref(false)
const imgDialog = ref(false)
const ruleFormRef = ref()
const assessFormRef = ref()
const { proxy } = getCurrentInstance()
const {proxy} = getCurrentInstance()
let validatePass = (rule, value, callback) => {
  if (state.resumeList.length == 0) {
    callback(new Error('请上传工作简历'));
@@ -435,31 +516,31 @@
}
let validateOneOfThree = (rule, value, callback) => {
  if (state.form.supportDirectionSafety.length==0&&state.form.supportDirectionSafety.length==0&&state.form.supportDirectionSafety.length==0) {
  if (state.form.supportDirectionSafety.length == 0 && state.form.supportDirectionSafety.length == 0 && state.form.supportDirectionSafety.length == 0) {
    callback(new Error('请至少从三种支撑方向中勾选一种'));
  } else {
    callback();
  }
}
let validatePhone = (rule, value, callback)=>{
  if(value === ''){
let validatePhone = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入手机号'))
  }else{
    if(!verifyPhone(value)){
  } else {
    if (!verifyPhone(value)) {
      callback(new Error('手机号格式有误'))
    }else{
    } else {
      callback()
    }
  }
}
let verifyId = (rule, value, callback)=>{
  if(value === ''){
let verifyId = (rule, value, callback) => {
  if (value === '') {
    callback(new Error('请输入身份证号'))
  }else{
    if(!verifyIdCard(value)){
  } else {
    if (!verifyIdCard(value)) {
      callback(new Error('身份证号格式有误'))
    }else{
    } else {
      callback()
    }
  }
@@ -467,14 +548,17 @@
const state = reactive({
  assessDialog: false,
  form:{
  form: {
    id: null,
    name:'',
    sex:'',
    name: '',
    sex: '',
    profession: [],
    bigClassify: null,
    smallClassify: null,
    domain: '',
    deptId: null,
    birthday: '',
    phone:'',
    phone: '',
    title: '',
    electronicPhoto: '',
    idCard: '',
@@ -546,322 +630,345 @@
  proAdviceList: [],
  adviceList: [],
  dialogImageUrl: '',
  rules:{
    name:[{ required: true, message: '请填写姓名', trigger: 'blur' }],
    sex:[{ required: true, message: '请选择性别', trigger: 'blur' }],
    domain: [{ required: true, message: '请选择专业类别', trigger: 'blur' }],
    deptId: [{ required: true, message: '请选择业务处室', trigger: 'blur' }],
    birthday: [{ required: true, message: '请选择出生日期', trigger: 'blur' }],
    phone:[{ required: true, validator: validatePhone, trigger: 'blur' }],
    title: [{ required: true, message: '请填写职称', trigger: 'blur' }],
    evidence: [{ required: true,validator: validateEvidence, trigger: 'blur' }],
    resumeKey: [{ required: true,validator: validatePass, trigger: 'blur' }],
    recommendUnitOpinionKey: [{ required: true,validator: validateOneOfTwo, trigger: 'blur' }],
    idCard: [{ required: true, validator: verifyId, trigger: 'blur' }],
    supportDirectionEmergency: [{ required: true,validator: validateOneOfThree, trigger: 'blur' }],
    dutyStatus: [{ required: true, message: '请选择在岗情况', trigger: 'blur' }],
    companyName: [{ required: true, message: '请填写单位全称', trigger: 'blur' }],
    degree: [{ required: true, message: '请填写最高学历', trigger: 'blur' }]
  rules: {
    name: [{required: true, message: '请填写姓名', trigger: 'blur'}],
    sex: [{required: true, message: '请选择性别', trigger: 'blur'}],
    profession: [{required: true, message: '请选择专业类别', trigger: 'blur'}],
    deptId: [{required: true, message: '请选择业务处室', trigger: 'blur'}],
    birthday: [{required: true, message: '请选择出生日期', trigger: 'blur'}],
    phone: [{required: true, validator: validatePhone, trigger: 'blur'}],
    title: [{required: true, message: '请填写职称', trigger: 'blur'}],
    evidence: [{required: true, validator: validateEvidence, trigger: 'blur'}],
    resumeKey: [{required: true, validator: validatePass, trigger: 'blur'}],
    recommendUnitOpinionKey: [{required: true, validator: validateOneOfTwo, trigger: 'blur'}],
    idCard: [{required: true, validator: verifyId, trigger: 'blur'}],
    supportDirectionEmergency: [{required: true, validator: validateOneOfThree, trigger: 'blur'}],
    dutyStatus: [{required: true, message: '请选择在岗情况', trigger: 'blur'}],
    companyName: [{required: true, message: '请填写单位全称', trigger: 'blur'}],
    degree: [{required: true, message: '请填写最高学历', trigger: 'blur'}]
  },
  assessRules:{
    employTime: [{ required: true, message: '请选择聘用期限', trigger: 'blur' }],
    ratingLevel: [{ required: true, message: '请选择评定等级', trigger: 'blur' }]
  assessRules: {
    employTime: [{required: true, message: '请选择聘用期限', trigger: 'blur'}],
    ratingLevel: [{required: true, message: '请选择评定等级', trigger: 'blur'}]
  }
})
  onMounted(()=>{
  })
onMounted(() => {
})
  const openDialog = (type, value) => {
    state.title = type === 'add' ? '新增' : type ==='edit' ? '编辑' : type ==='view' ?'查看':'评定'
    getExpertsType()
    getDepList()
    state.fileList = []
    if(type == 'edit'||type=='view'||type=='assess'){
      getInfo(value.id).then((res)=>{
        if(res.code == 200){
          if(res.data) {
            const val = res.data
            for(let i in state.form) {
              if (validKey(i, val)) {
                state.form[i] = val[i]
              }
            }
            if(val.supportDirectionSafety && val.supportDirectionSafety!==''){
              state.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i=>Number(i))
            }else{
              state.form.supportDirectionSafety = []
            }
            if(val.supportDirectionPrevention && val.supportDirectionPrevention!==''){
              state.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i=>Number(i))
            }else{
              state.form.supportDirectionPrevention = []
            }
            if(val.supportDirectionEmergency && val.supportDirectionEmergency!==''){
              state.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i=>Number(i))
            }else{
              state.form.supportDirectionEmergency = []
            }
            if(state.form.electronicPhoto!== ''){
              state.fileList.push({
                name: state.form.electronicPhoto,
                url: state.form.electronicPhoto,
              })
            }
            if(state.form.resumeKey !== ''){
              state.resumeList = state.form.resumeKey.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
            }
            if(state.form.evidence !== ''){
              state.evidenceList = state.form.evidence.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
            }
            if(state.form.paperSituationKey !== ''){
              state.inventionList = state.form.paperSituationKey.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
            }
            if(state.form.rewardKey !== ''){
              state.rewardList = state.form.rewardKey.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
            }
            if(state.form.achievementKey !== ''){
              state.achievementList = state.form.achievementKey.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
            }
            if(state.form.personalOpinionKey !== ''){
              state.proAdviceList = state.form.personalOpinionKey.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
            }
            if(state.form.recommendUnitOpinionKey !== ''){
              state.adviceList = state.form.recommendUnitOpinionKey.split(',').map(i=>{
                return {
                  name: i,
                  url: i,
                }
              })
const professionChange = (value) => {
  if (!value) {
    state.form.profession = []
    state.form.bigClassify = null
    state.form.smallClassify = null
  }
}
const findNodeById = (data,value)=> {
  for (const node of data) {
    if (node.id === value) {
      return node.classifyName;
    }
    if (node.children) {
      const foundNode = findNodeById(node.children, value);
      if (foundNode) {
        return foundNode;
      }
    }
  }
  return null;
}
const openDialog = (type, value) => {
  state.title = type === 'add' ? '新增' : type === 'edit' ? '编辑' : type === 'view' ? '查看' : '评定'
  getExpertsType()
  getDepList()
  state.fileList = []
  if (type == 'edit' || type == 'view' || type == 'assess') {
    getInfo(value.id).then((res) => {
      if (res.code == 200) {
        if (res.data) {
          const val = res.data
          for (let i in state.form) {
            if (validKey(i, val)) {
              state.form[i] = val[i]
            }
          }
          dialogVisible.value = true
        }else{
          ElMessage.warning('数据获取失败:'+res.msg)
          state.form.profession = [val.bigClassify,val.smallClassify]
          if (val.supportDirectionSafety && val.supportDirectionSafety !== '') {
            state.form.supportDirectionSafety = val.supportDirectionSafety.split(',').map(i => Number(i))
          } else {
            state.form.supportDirectionSafety = []
          }
          if (val.supportDirectionPrevention && val.supportDirectionPrevention !== '') {
            state.form.supportDirectionPrevention = val.supportDirectionPrevention.split(',').map(i => Number(i))
          } else {
            state.form.supportDirectionPrevention = []
          }
          if (val.supportDirectionEmergency && val.supportDirectionEmergency !== '') {
            state.form.supportDirectionEmergency = val.supportDirectionEmergency.split(',').map(i => Number(i))
          } else {
            state.form.supportDirectionEmergency = []
          }
          if (state.form.electronicPhoto !== '') {
            state.fileList.push({
              name: state.form.electronicPhoto,
              url: state.form.electronicPhoto,
            })
          }
          if (state.form.resumeKey !== '') {
            state.resumeList = state.form.resumeKey.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
          if (state.form.evidence !== '') {
            state.evidenceList = state.form.evidence.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
          if (state.form.paperSituationKey !== '') {
            state.inventionList = state.form.paperSituationKey.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
          if (state.form.rewardKey !== '') {
            state.rewardList = state.form.rewardKey.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
          if (state.form.achievementKey !== '') {
            state.achievementList = state.form.achievementKey.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
          if (state.form.personalOpinionKey !== '') {
            state.proAdviceList = state.form.personalOpinionKey.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
          if (state.form.recommendUnitOpinionKey !== '') {
            state.adviceList = state.form.recommendUnitOpinionKey.split(',').map(i => {
              return {
                name: i,
                url: i,
              }
            })
          }
        }
        dialogVisible.value = true
      } else {
        ElMessage.warning('数据获取失败:' + res.msg)
      }
    })
    if (type == 'edit') {
      if (value.state == 2) {
        state.disable = true
        dialogVisible.value = false
        state.assessDialog = true
      } else {
        state.disable = false
      }
    } else {
      state.disable = true
    }
    if (value.state == 2) {
      state.assessForm.ratingLevel = value.ratingLevel
      state.assessForm.employTime = [value.employmentDateStart, value.employmentDateEnd]
    }
  } else {
    state.disable = false
    dialogVisible.value = true
  }
}
const validKey = (key, obj) => {
  return key in obj
}
const startAssess = async (num) => {
  if (num == 2) {
    state.assessDialog = true
  } else {
    await assess(num)
  }
}
const assess = (num) => {
  ElMessageBox.confirm(
      '确定对该专家进行此审批操作?',
      '提示',
      {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning',
      })
      .then(async () => {
        let params = {}
        if (num == 2) {
          params = {
            id: state.form.id,
            state: num,
            employmentDateStart: state.assessForm.employTime[0],
            employmentDateEnd: state.assessForm.employTime[1],
            ratingLevel: state.assessForm.ratingLevel
          }
        } else {
          params = {
            id: state.form.id,
            state: num
          }
        }
        const res = await changeApprove(params)
        if (res.code == 200) {
          ElMessage({
            type: 'success',
            message: '审批成功'
          });
          emit('getList')
          state.assessDialog = false
          dialogVisible.value = false
        } else {
          ElMessage({
            type: 'warning',
            message: res.msg
          });
        }
      })
      if(type == 'edit'){
        if(value.state == 2){
          state.disable = true
          dialogVisible.value = false
          state.assessDialog = true
        }else{
          state.disable = false
        }
      }else{
        state.disable = true
      }
      if(value.state == 2){
        state.assessForm.ratingLevel = value.ratingLevel
        state.assessForm.employTime = [value.employmentDateStart,value.employmentDateEnd]
      }
    }else{
      state.disable = false
      dialogVisible.value = true
}
const getExpertsType = async () => {
  const res = await getExpertTypes()
  if (res.code == 200) {
    state.expertsType = res.data
  } else {
    ElMessage({
      type: 'warning',
      message: res.message
    });
  }
}
function getDepList() {
  listOutDept({}).then(response => {
    state.deptList = proxy.handleTree(response.data, "deptId", 'parentId', 'children');
  });
}
// 图片上传
const showTip = () => {
  ElMessage({
    type: 'warning',
    message: '超出文件上传数量'
  });
}
const picSize = async (rawFile) => {
  if (rawFile.size / 1024 / 1024 > 5) {
    ElMessage({
      type: 'warning',
      message: '文件大小不能超过5M'
    });
    return false
  }
};
const handlePictureCardPreview = (uploadFile) => {
  state.dialogImageUrl = uploadFile.url
  imgDialog.value = true;
}
const handleAvatarSuccess = (res, uploadFile, type) => {
  if (res.code == 200) {
    if (type == '证件照') {
      state.form.electronicPhoto = res.url
    } else {
      uploadFile.name = res.url
    }
  } else {
    ElMessage({
      type: 'warning',
      message: '文件上传失败'
    })
  }
}
  const validKey=(key,obj)=>{
    return key in obj
  }
  const startAssess = async (num)=>{
    if(num == 2){
      state.assessDialog = true
    }else{
      await assess(num)
    }
  }
  const assess = (num)=>{
const handleRemove = (file, uploadFiles, type) => {
  console.log(file, uploadFiles)
  if (file && file.status == 'success') {
    ElMessageBox.confirm(
        '确定对该专家进行此审批操作?',
        '该操作将永久删除此文件内容,是否继续?',
        '提示',
        {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning',
        })
        .then(async() => {
          let params = {}
          if(num == 2){
            params = {
              id: state.form.id,
              state: num,
              employmentDateStart: state.assessForm.employTime[0],
              employmentDateEnd: state.assessForm.employTime[1],
              ratingLevel: state.assessForm.ratingLevel
            }
          }else{
            params = {
              id:state.form.id,
              state: num
            }
        .then(async () => {
          let path = ''
          if (type == '证件照') {
            path = state.form.electronicPhoto
          } else {
            path = file.name
          }
          const res = await changeApprove(params)
          if(res.code == 200){
          const res = await delPic({path: path})
          if (res.code == 200) {
            ElMessage({
              type: 'success',
              message: '审批成功'
            });
            emit('getList')
            state.assessDialog = false
            dialogVisible.value = false
          }else{
              message: '文件已删除'
            })
            state.hasDeleteFile = true
          } else {
            ElMessage({
              type: 'warning',
              message: res.msg
            });
            })
          }
        })
  }
  const getExpertsType = async ()=>{
    const res = await getExpertTypes()
    if(res.code == 200){
      state.expertsType = res.data
    }else{
      ElMessage({
        type: 'warning',
        message: res.message
      });
    }
  }
function getDepList() {
  listOutDept({}).then(response => {
    state.deptList = proxy.handleTree(response.data, "deptId",'parentId','children');
  });
}
  const professionChange=(value)=> {
    console.log(value,'val')
  }
  // 图片上传
  const showTip =()=>{
    ElMessage({
      type: 'warning',
      message: '超出文件上传数量'
    });
  }
  const picSize = async (rawFile) => {
    if(rawFile.size / 1024 / 1024 > 5){
      ElMessage({
        type: 'warning',
        message: '文件大小不能超过5M'
      });
      return false
    }
  };
  const handlePictureCardPreview = (uploadFile) => {
    state.dialogImageUrl = uploadFile.url
    imgDialog.value = true;
  }
  const handleAvatarSuccess = (res, uploadFile,type) => {
    if(res.code == 200){
      if(type == '证件照'){
        state.form.electronicPhoto = res.url
      }else{
        uploadFile.name = res.url
      }
    }else{
      ElMessage({
        type: 'warning',
        message: '文件上传失败'
      })
    }
  }
  const handleRemove = (file, uploadFiles,type) => {
    console.log(file, uploadFiles)
    if(file && file.status == 'success') {
      ElMessageBox.confirm(
          '该操作将永久删除此文件内容,是否继续?',
          '提示',
          {
            confirmButtonText: '确定',
            cancelButtonText: '取消',
            type: 'warning',
          })
          .then(async () => {
            let path = ''
            if (type == '证件照') {
              path = state.form.electronicPhoto
            } else {
              path = file.name
            }
            const res = await delPic({path: path})
            if (res.code == 200) {
              ElMessage({
                type: 'success',
                message: '文件已删除'
              })
              state.hasDeleteFile = true
            } else {
              ElMessage({
                type: 'warning',
                message: res.msg
              })
            }
          })
    }
  }
const onSubmit = async (formEl)=> {
const onSubmit = async (formEl) => {
  if (!formEl) return
  await formEl.validate(async (valid, fields) => {
    if (valid) {
      let data = JSON.parse(JSON.stringify(state.form))
      data.supportDirectionSafety = Array.isArray(data.supportDirectionSafety)?data.supportDirectionSafety.join(','):''
      data.supportDirectionPrevention = Array.isArray(data.supportDirectionPrevention)?data.supportDirectionPrevention.join(','):''
      data.supportDirectionEmergency = Array.isArray(data.supportDirectionEmergency)?data.supportDirectionEmergency.join(','):''
      data.evidence = state.evidenceList.map(i=>i.name).join(',')
      data.resumeKey = state.resumeList.map(i=>i.name).join(',')
      data.paperSituationKey = state.inventionList.map(i=>i.name).join(',')
      data.rewardKey = state.rewardList.map(i=>i.name).join(',')
      data.achievementKey = state.achievementList.map(i=>i.name).join(',')
      data.personalOpinionKey = state.proAdviceList.map(i=>i.name).join(',')
      data.recommendUnitOpinionKey = state.adviceList.map(i=>i.name).join(',')
      if(state.title == '新增'){
      data.bigClassify = data.profession[0]
      data.smallClassify = data.profession[1]
      data.domain = findNodeById(state.expertsType,data.smallClassify)
      data.supportDirectionSafety = Array.isArray(data.supportDirectionSafety) ? data.supportDirectionSafety.join(',') : ''
      data.supportDirectionPrevention = Array.isArray(data.supportDirectionPrevention) ? data.supportDirectionPrevention.join(',') : ''
      data.supportDirectionEmergency = Array.isArray(data.supportDirectionEmergency) ? data.supportDirectionEmergency.join(',') : ''
      data.evidence = state.evidenceList.map(i => i.name).join(',')
      data.resumeKey = state.resumeList.map(i => i.name).join(',')
      data.paperSituationKey = state.inventionList.map(i => i.name).join(',')
      data.rewardKey = state.rewardList.map(i => i.name).join(',')
      data.achievementKey = state.achievementList.map(i => i.name).join(',')
      data.personalOpinionKey = state.proAdviceList.map(i => i.name).join(',')
      data.recommendUnitOpinionKey = state.adviceList.map(i => i.name).join(',')
      delete data.profession
      if (state.title == '新增') {
        delete data.id
        const res= await addExpertInfo(data)
        if(res.code == 200){
        const res = await addExpertInfo(data)
        if (res.code == 200) {
          ElMessage.success(res.msg)
          state.fileList = []
          state.evidenceList = []
@@ -874,12 +981,12 @@
          emit('getList')
          state.hasDeleteFile = false
          dialogVisible.value = false
        }else{
        } else {
          ElMessage.warning(res.msg)
        }
      }else{
        const res= await modExpertInfo(data)
        if(res.code == 200){
      } else {
        const res = await modExpertInfo(data)
        if (res.code == 200) {
          ElMessage.success(res.msg)
          state.fileList = []
          state.evidenceList = []
@@ -892,7 +999,7 @@
          emit('getList')
          state.hasDeleteFile = false
          dialogVisible.value = false
        }else{
        } else {
          ElMessage.warning(res.msg)
        }
      }
@@ -902,18 +1009,18 @@
  })
}
const assessSubmit = async (formEl)=> {
const assessSubmit = async (formEl) => {
  if (!formEl) return
  await formEl.validate(async (valid, fields) => {
    if (valid) {
      await assess(2)
    }else {
    } else {
      ElMessage.warning('请完善必填信息')
    }
    })
  })
}
const closeAssess = ()=>{
const closeAssess = () => {
  assessFormRef.value.clearValidate()
  state.assessForm = {
    employTime: [],
@@ -923,74 +1030,78 @@
}
const handleClose = () => {
    if(state.hasDeleteFile == false){
      ruleFormRef.value.clearValidate()
      state.form={
        id: null,
        name:'',
        sex:'',
        domain: '',
        deptId: null,
        birthday: '',
        phone:'',
        title: '',
        electronicPhoto: '',
        idCard: '',
        dutyStatus: null,
        companyName: '',
        companyAddress: '',
        deptName: '',
        job: '',
        companyTelephone: '',
        faxNum: '',
        email: '',
        graduationSchool: '',
        degree: '',
        speciality: '',
        currentProfession: '',
        supportDirectionSafety: [],
        supportDirectionPrevention: [],
        supportDirectionEmergency: [],
        evidence: '',
        resumeKey: '',
        paperSituationKey: '',
        rewardKey: '',
        achievementKey: '',
        personalOpinionKey: '',
        recommendUnitOpinionKey: '',
        remark: '',
        source: 2
      }
      state.fileList = []
      state.evidenceList = []
      state.resumeList = []
      state.inventionList = []
      state.rewardList = []
      state.achievementList = []
      state.proAdviceList = []
      state.adviceList = []
      dialogVisible.value = false;
    }else{
      onSubmit()
  if (state.hasDeleteFile == false) {
    ruleFormRef.value.clearValidate()
    state.form = {
      id: null,
      name: '',
      sex: '',
      profession: [],
      bigClassify: null,
      smallClassify: null,
      domain: '',
      deptId: null,
      birthday: '',
      phone: '',
      title: '',
      electronicPhoto: '',
      idCard: '',
      dutyStatus: null,
      companyName: '',
      companyAddress: '',
      deptName: '',
      job: '',
      companyTelephone: '',
      faxNum: '',
      email: '',
      graduationSchool: '',
      degree: '',
      speciality: '',
      currentProfession: '',
      supportDirectionSafety: [],
      supportDirectionPrevention: [],
      supportDirectionEmergency: [],
      evidence: '',
      resumeKey: '',
      paperSituationKey: '',
      rewardKey: '',
      achievementKey: '',
      personalOpinionKey: '',
      recommendUnitOpinionKey: '',
      remark: '',
      source: 2
    }
    state.fileList = []
    state.evidenceList = []
    state.resumeList = []
    state.inventionList = []
    state.rewardList = []
    state.achievementList = []
    state.proAdviceList = []
    state.adviceList = []
    dialogVisible.value = false;
  } else {
    onSubmit()
  }
}
defineExpose({
    openDialog,
  openDialog,
  getExpertsType
})
</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;
    }
.notice {
  :deep(.el-form .el-form-item__label) {
    font-size: 15px;
  }
  .file {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
  }
}
</style>