From 11ab4edc4f3c59643ffbd73ef2bf05bbb3e793aa Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期六, 11 四月 2026 08:45:47 +0800
Subject: [PATCH] style(user): 调整员工编号列宽度

---
 src/views/user/inemployees.vue | 1928 +++++++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 1,421 insertions(+), 507 deletions(-)

diff --git a/src/views/user/inemployees.vue b/src/views/user/inemployees.vue
index 06b2969..abc2f79 100644
--- a/src/views/user/inemployees.vue
+++ b/src/views/user/inemployees.vue
@@ -3,11 +3,11 @@
     <el-container>
       <el-header :height="headerHeight">
         <el-row style="margin-bottom: 10px;">
-          <el-col :span="16">
+          <el-col :span="15">
             <h3 class="bu-tian-jia-title">在职员工</h3>
           </el-col>
-          <el-col :span="8" style="margin-top: 15px;">
-            <el-input v-model="queryParams.vague" placeholder="请输入内容" style="width:200px" />
+          <el-col :span="9" style="margin-top: 15px;">
+            <el-input v-model="queryParams.baseKey" placeholder="请输入内容" style="width:300px" />
             <span class="search-btn" @click="vagueSearch">查询</span>
             <span class="sup-search-btn" @click="advancedQueryShowMethods">高级查询</span>
           </el-col>
@@ -23,10 +23,10 @@
             <el-col :span="4">身份证号:
               <el-input v-model="queryParams.certificateNumb" size="small" maxlength="18" style="width:140px" />
             </el-col>
-            <el-col :span="3">护卫点:
+            <el-col :span="4">部门(护卫点):
               <el-input v-model="queryParams.deptName" size="small" maxlength="20" style="width:100px" />
             </el-col>
-            <el-col :span="8">入职日期:
+            <el-col :span="7">入职日期:
               <el-date-picker
                 v-model="queryParams.entryDateStr"
                 size="small"
@@ -53,26 +53,28 @@
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.sex" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllSex">全部</el-checkbox>
-                      <el-checkbox label="1">男性</el-checkbox>
-                      <el-checkbox label="2">女性</el-checkbox>
+                      <el-checkbox
+                        v-for="data in sexOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
                 <tr>
-                  <td class="td">最高学历:</td>
+                  <td class="td">学历:</td>
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.education" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllEducation">全部</el-checkbox>
-                      <el-checkbox label="91">无学历</el-checkbox>
-                      <el-checkbox label="81">小学</el-checkbox>
-                      <el-checkbox label="71">初中</el-checkbox>
-                      <el-checkbox label="61">高中</el-checkbox>
-                      <el-checkbox label="42">中技</el-checkbox>
-                      <el-checkbox label="41">中专</el-checkbox>
-                      <el-checkbox label="31">大学专科</el-checkbox>
-                      <el-checkbox label="21">大学本科</el-checkbox>
-                      <el-checkbox label="11">硕士</el-checkbox>
-                      <el-checkbox label="10">博士</el-checkbox>
+                      <el-checkbox
+                        v-for="data in educationOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
@@ -81,19 +83,13 @@
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.politics" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllPolitics">全部</el-checkbox>
-                      <el-checkbox label="01">党员</el-checkbox>
-                      <el-checkbox label="02">预备</el-checkbox>
-                      <el-checkbox label="03">共青</el-checkbox>
-                      <el-checkbox label="04">民革</el-checkbox>
-                      <el-checkbox label="05">民盟</el-checkbox>
-                      <el-checkbox label="06">民建</el-checkbox>
-                      <el-checkbox label="07">民进</el-checkbox>
-                      <el-checkbox label="08">农工</el-checkbox>
-                      <el-checkbox label="09">致公</el-checkbox>
-                      <el-checkbox label="10">九三</el-checkbox>
-                      <el-checkbox label="11">台盟</el-checkbox>
-                      <el-checkbox label="12">民主</el-checkbox>
-                      <el-checkbox label="13">群众</el-checkbox>
+                      <el-checkbox
+                        v-for="data in statusOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
@@ -102,12 +98,13 @@
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.ageStr" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllAgeStr">全部</el-checkbox>
-                      <el-checkbox label="18-29">18-29</el-checkbox>
-                      <el-checkbox label="30-39">30-39</el-checkbox>
-                      <el-checkbox label="40-49">40-49</el-checkbox>
-                      <el-checkbox label="50-59">50-59</el-checkbox>
-                      <el-checkbox label="60-69">60-69</el-checkbox>
-                      <el-checkbox label="69-999">69及以上</el-checkbox>
+                      <el-checkbox
+                        v-for="data in ageStrOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
@@ -116,21 +113,28 @@
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.archivesStatus" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllArchivesStatus">全部</el-checkbox>
-                      <el-checkbox label="0">已移交</el-checkbox>
-                      <el-checkbox label="1">未移交</el-checkbox>
+                      <el-checkbox
+                        v-for="data in archivesStatusOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
                 <tr>
-                  <td class="td">保险类型:</td>
+                  <td class="td">社保档位:</td>
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.insuranceType" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllInsuranceType">全部</el-checkbox>
-                      <el-checkbox label="1">深户(五险一档)</el-checkbox>
-                      <el-checkbox label="2">非深户(五险一档)</el-checkbox>
-                      <el-checkbox label="3">非深户(五险二档)</el-checkbox>
-                      <el-checkbox label="4">非深户(五险三档)</el-checkbox>
-                      <el-checkbox label="5">非深户(四险三档)</el-checkbox>
+                      <el-checkbox
+                        v-for="data in insuranceTypeOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
@@ -139,8 +143,13 @@
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.empCardStatus" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllEmpCardStatus">全部</el-checkbox>
-                      <el-checkbox label="0">未发</el-checkbox>
-                      <el-checkbox label="1">已发</el-checkbox>
+                      <el-checkbox
+                        v-for="data in empCardStatusOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
@@ -149,8 +158,61 @@
                   <td class="td-group">
                     <el-checkbox-group v-model="queryParams.handbookStatus" class="fj-checkbox">
                       <el-checkbox label="" @change="selectAllHandbookStatus">全部</el-checkbox>
-                      <el-checkbox label="0">未发</el-checkbox>
-                      <el-checkbox label="1">已发</el-checkbox>
+                      <el-checkbox
+                        v-for="data in handbookStatusOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
+                    </el-checkbox-group>
+                  </td>
+                </tr>
+                <tr>
+                  <td class="td">员工类型:</td>
+                  <td class="td-group">
+                    <el-checkbox-group v-model="queryParams.empType" class="fj-checkbox">
+                      <el-checkbox label="" @change="selectAllEmpType">全部</el-checkbox>
+                      <el-checkbox
+                        v-for="data in empTypeOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
+                    </el-checkbox-group>
+                  </td>
+                </tr>
+                <tr>
+                  <td class="td">入职类型:</td>
+                  <td class="td-group">
+                    <el-checkbox-group v-model="queryParams.entryType" class="fj-checkbox">
+                      <el-checkbox label="" @change="selectAllEntryType">全部</el-checkbox>
+                      <el-checkbox :label="20">新入职</el-checkbox>
+                      <el-checkbox :label="21">重新入职</el-checkbox>
+                      <el-checkbox :label="22">返聘入职</el-checkbox>
+                      <!--                      <el-checkbox-->
+                      <!--                        v-for="data in dimissionTypeOptions"-->
+                      <!--                        :key="data.dicItemName"-->
+                      <!--                        :label="data.dicItemCode"-->
+                      <!--                      >-->
+                      <!--                        {{ data.dicItemName }}-->
+                      <!--                      </el-checkbox>-->
+                    </el-checkbox-group>
+                  </td>
+                </tr>
+                <tr>
+                  <td class="td">相关证件:</td>
+                  <td class="td-group">
+                    <el-checkbox-group v-model="queryParams.certificateList" class="fj-checkbox">
+                      <el-checkbox label="" @change="selectAllCertificateList">全部</el-checkbox>
+                      <el-checkbox
+                        v-for="data in certificateListOptions"
+                        :key="data.dicItemName"
+                        :label="data.dicItemCode"
+                      >
+                        {{ data.dicItemName }}
+                      </el-checkbox>
                     </el-checkbox-group>
                   </td>
                 </tr>
@@ -163,49 +225,117 @@
         <el-row style="margin: 10px 0 10px 0;">
           <el-col :span="24">
             <el-button type="danger" class="hr-but-all" @click="showXzyg(0)">新增员工</el-button>
-            <el-button type="primary" class="hr-but-all" @click="delEmp">删除员工</el-button>
+            <el-button type="primary" style="background-color: #409EFF" @click="delEmp">删除员工</el-button>
             <el-button type="danger" class="hr-but-all" @click="showYgdg(0)">员工调岗</el-button>
             <!-- <el-button type="danger" class="hr-but-all" @click="showDryg(0)">导入员工</el-button> -->
-            <el-button type="danger" class="hr-but-all" @click="showDcyg(0)">导出员工</el-button>
-            <el-button type="danger" class="hr-but-all" @click="doDcda">导出档案</el-button>
-            <el-button type="danger" class="hr-but-all" @click="showGbda(0)">关闭档案</el-button>
+            <el-button type="danger" class="hr-but-all" @click="showDcyg(0)">导出EXCEL</el-button>
+            <el-button type="primary" style="background-color: #409EFF" @click="showGbda(0)">关闭档案</el-button>
           </el-col>
         </el-row>
-        <el-table ref="multipleTable" :data="tableData" :header-cell-style="{'height':'5.3vh','background-color':'#e6e6e6'}" stripe style="width: 100%;color: #000;">
+        <el-table
+          ref="multipleTable"
+          :data="tableData"
+          :cell-style="{padding:'7px 0','text-align':'center'}"
+          :header-cell-style="{'height':'5.3vh','background-color':'#e6e6e6','text-align':'center'}"
+          stripe
+          border
+          style="width: 100%;color: #000;"
+          @sort-change="changeSort"
+        >
           <el-table-column type="selection" width="55" />
-          <el-table-column label="操作" width="120">
+          <el-table-column label="操作" width="130">
             <template slot-scope="scope">
-              <!--              <el-button-->
-              <!--                type="text"-->
-              <!--                size="small"-->
-              <!--                @click="editArchives(scope.row)"-->
-              <!--              >-->
-              <!--                档案</el-button>-->
-              <!--              <el-button type="text" size="small" @click="editEmpBase(scope.row)">编辑</el-button>-->
-
-              <span style="color: #a00515;display: inline-block;width: 50%;cursor: pointer" @click="editArchives(scope.row)">档案</span>
-              <span style="color: #a00515;display: inline-block;width: 50%;cursor: pointer" @click="editEmpBase(scope.row)">编辑</span>
+              <span
+                style="color: #a00515;display: inline-block;width: 40%;cursor: pointer"
+                @click="editArchives(scope.row)"
+              >档案</span>
+              <span
+                style="color: #a00515;display: inline-block;width: 40%;cursor: pointer"
+                @click="editEmpBase(scope.row)"
+              >编辑</span>
             </template>
           </el-table-column>
-          <el-table-column show-overflow-tooltip="true" prop="deptName" label="护卫点" />
-          <el-table-column show-overflow-tooltip="true" prop="jobName" label="岗位" width="100" />
-          <el-table-column show-overflow-tooltip="true" prop="empNumb" label="员工编号" width="100" />
-          <el-table-column show-overflow-tooltip="true" prop="empName" label="姓名" width="100" />
-          <el-table-column show-overflow-tooltip="true" prop="certificateNumb" label="身份证号码" />
-          <el-table-column show-overflow-tooltip="true" prop="sexName" label="性别" width="80" />
-          <el-table-column show-overflow-tooltip="true" prop="age" label="年龄" width="80" />
-          <el-table-column show-overflow-tooltip="true" prop="educationName" label="最高学历" width="100" />
-          <el-table-column show-overflow-tooltip="true" prop="nativePlaceName" label="籍贯" />
-          <el-table-column show-overflow-tooltip="true" prop="telePhone" label="联系电话" />
-          <el-table-column show-overflow-tooltip="true" prop="entryDate" label="入职日期" />
-          <el-table-column show-overflow-tooltip="true" prop="empStatus" label="员工状态" width="100">
+          <el-table-column
+            show-overflow-tooltip
+            prop="empNumb"
+            label="编号"
+            width="100"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          />
+          <el-table-column
+            show-overflow-tooltip
+            prop="allDeptName"
+            label="部门(护卫点)"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          />
+          <el-table-column show-overflow-tooltip prop="jobName" label="岗位" width="80" />
+          <el-table-column
+            show-overflow-tooltip
+            prop="empName"
+            label="姓名"
+            width="100"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          />
+          <el-table-column show-overflow-tooltip prop="certificateNumb" label="身份证号码" width="160" />
+          <el-table-column show-overflow-tooltip prop="sex" label="性别" width="60" :formatter="sexFormat" />
+          <el-table-column
+            show-overflow-tooltip
+            prop="age"
+            label="年龄"
+            width="80"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          />
+          <el-table-column
+            show-overflow-tooltip
+            prop="education"
+            label="学历"
+            width="80"
+            :formatter="educationFormat"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          />
+          <el-table-column
+            show-overflow-tooltip
+            prop="nativePlace"
+            label="籍贯"
+            width="70"
+            :formatter="nativePlaceFormat"
+          />
+          <el-table-column show-overflow-tooltip prop="telePhone" label="联系电话" width="110" />
+          <el-table-column show-overflow-tooltip prop="empTypeName" label="员工类型" width="80" />
+          <el-table-column
+            show-overflow-tooltip
+            prop="entryDate"
+            label="入职日期"
+            width="110"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          />
+          <el-table-column show-overflow-tooltip prop="empStatus" label="员工状态" width="80">
             <template slot-scope="{row}">
               {{ transEmpStatus(row.empStatus) }}
             </template>
           </el-table-column>
+          <el-table-column
+            prop="entryType"
+            label="入职类型"
+            width="120"
+            sortable="custom"
+            :sort-orders="['ascending', 'descending']"
+          >
+            <template slot-scope="{row}">
+              {{ transEntryType(row.entryType) }}
+            </template>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip prop="annualLeave" label="年假天数" width="110" />
         </el-table>
         <pagination
           v-show="total>0"
+          style="text-align: right;width: 98%;"
           :total="total"
           :page.sync="pagination.num"
           :limit.sync="pagination.size"
@@ -216,292 +346,259 @@
     <el-dialog title="基本信息" :visible.sync="dialogShowXzyg" width="50%" class="baseinfo">
       <el-container>
         <el-aside width="200px">
-          <el-upload
-            class="avatar-uploader"
-            action="#"
-            :show-file-list="false"
-            :on-change="handlePictureCardPreview"
-            :auto-upload="false"
-          >
-            <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过4MB</div>
-            <img v-if="empBaseInfoImageUrl" :src="empBaseInfoImageUrl" class="avatar">
-            <i v-else class="el-icon-plus avatar-uploader-icon" />
-          </el-upload>
+          <!-- 头像显示区域 -->
+          <div class="avatar-wrapper">
+            <img
+              v-if="empBaseInfoImageUrl"
+              :src="empBaseInfoImageUrl"
+              class="avatar"
+              @click="openUploadChoice"
+            >
+            <div v-else class="avatar-uploader-placeholder" @click="openUploadChoice">
+              <i class="el-icon-plus avatar-uploader-icon" />
+              <div class="upload-tip">点击上传照片</div>
+            </div>
+          </div>
         </el-aside>
-        <el-main>      <el-form ref="empBaseInfoForm" :model="empBaseInfoForm" :rules="rules" label-position="right" label-width="120px">
-          <el-row>
-            <el-col :span="12">
-              <el-form-item label="档案号" prop="archivesNumb">
-                <el-input v-model="empBaseInfoForm.archivesNumb" />
-              </el-form-item>
-              <el-form-item label="员工编号" prop="empNumb">
-                <el-input v-model="empBaseInfoForm.empNumb" />
-              </el-form-item>
-              <el-form-item label="身份证号码" prop="certificateNumb">
-                <el-input
-                  v-model="empBaseInfoForm.certificateNumb"
-                  @input="generateUserInfo(0,empBaseInfoForm.certificateNumb)"
-                />
-              </el-form-item>
-              <el-form-item label="员工类别" prop="empType">
-                <el-select v-model="empBaseInfoForm.empType" placeholder="请选择员工类型">
-                  <el-option label="高层" value="01" />
-                  <el-option label="高级管理人员" value="02" />
-                  <el-option label="中级管理人员" value="03" />
-                  <el-option label="初级管理人员" value="04" />
-                  <el-option label="文职人员" value="05" />
-                  <el-option label="一般人员" value="06" />
-                  <el-option label="其他" value="07" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="民族" prop="nation">
-                <el-select v-model="empBaseInfoForm.nation" placeholder="请选择民族">
-                  <el-option label="汉族" value="01" />
-                  <el-option label="蒙古族" value="02" />
-                  <el-option label="回族" value="03" />
-                  <el-option label="藏族" value="04" />
-                  <el-option label="维吾尔族" value="05" />
-                  <el-option label="苗族" value="06" />
-                  <el-option label="彝族" value="07" />
-                  <el-option label="壮族" value="08" />
-                  <el-option label="布衣族" value="09" />
-                  <el-option label="朝鲜族" value="10" />
-                  <el-option label="满族" value="11" />
-                  <el-option label="侗族" value="12" />
-                  <el-option label="瑶族" value="13" />
-                  <el-option label="白族" value="14" />
-                  <el-option label="土家族" value="15" />
-                  <el-option label="哈尼族" value="16" />
-                  <el-option label="哈萨克族" value="17" />
-                  <el-option label="傣族" value="18" />
-                  <el-option label="黎族" value="19" />
-                  <el-option label="傈傈族" value="20" />
-                  <el-option label="瓦族" value="21" />
-                  <el-option label="畲族" value="22" />
-                  <el-option label="高山族" value="23" />
-                  <el-option label="拉祜族" value="24" />
-                  <el-option label="水族" value="25" />
-                  <el-option label="东乡族" value="26" />
-                  <el-option label="纳西族" value="27" />
-                  <el-option label="景颇族" value="28" />
-                  <el-option label="柯尔克孜族" value="29" />
-                  <el-option label="土族" value="30" />
-                  <el-option label="达斡尔族" value="31" />
-                  <el-option label="仫佬族" value="32" />
-                  <el-option label="羌族" value="33" />
-                  <el-option label="布朗族" value="34" />
-                  <el-option label="撒拉族" value="35" />
-                  <el-option label="毛难族" value="36" />
-                  <el-option label="仡佬族" value="37" />
-                  <el-option label="锡伯族" value="38" />
-                  <el-option label="阿昌族" value="39" />
-                  <el-option label="普米族" value="40" />
-                  <el-option label="塔吉克族" value="41" />
-                  <el-option label="怒族" value="42" />
-                  <el-option label="乌孜别克族" value="43" />
-                  <el-option label="俄罗斯族" value="44" />
-                  <el-option label="鄂温克族" value="45" />
-                  <el-option label="崩龙族" value="46" />
-                  <el-option label="保安族" value="47" />
-                  <el-option label="裕固族" value="48" />
-                  <el-option label="京族" value="49" />
-                  <el-option label="塔塔尔族" value="50" />
-                  <el-option label="独龙族" value="51" />
-                  <el-option label="鄂伦春" value="52" />
-                  <el-option label="郝哲族" value="53" />
-                  <el-option label="门巴族" value="54" />
-                  <el-option label="珞巴族" value="55" />
-                  <el-option label="基诺族" value="56" />
-                  <el-option label="其他族" value="91" />
-                  <el-option label="外国民族" value="98" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="婚姻状态" prop="marriage">
-                <el-select v-model="empBaseInfoForm.marriage" placeholder="请选择婚姻状态">
-                  <el-option label="未婚" value="1" />
-                  <el-option label="已婚" value="2" />
-                  <el-option label="丧偶" value="3" />
-                  <el-option label="离婚" value="4" />
-                  <el-option label="再婚" value="5" />
-                  <el-option label="其它" value="9" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="身高(cm)" prop="stature">
-                <el-input v-model="empBaseInfoForm.stature" />
-              </el-form-item>
-              <el-form-item label="政治面貌" prop="politics">
-                <el-select v-model="empBaseInfoForm.politics" placeholder="请选择政治面貌">
-                  <el-option label="中共党员" value="01" />
-                  <el-option label="预备党员" value="02" />
-                  <el-option label="共青团员" value="03" />
-                  <el-option label="民革会员" value="04" />
-                  <el-option label="民盟盟员" value="05" />
-                  <el-option label="民建会员" value="06" />
-                  <el-option label="民进会员" value="07" />
-                  <el-option label="农工党员" value="08" />
-                  <el-option label="致公党员" value="09" />
-                  <el-option label="九三社员" value="10" />
-                  <el-option label="台盟盟员" value="11" />
-                  <el-option label="民主人士" value="12" />
-                  <el-option label="群众" value="13" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="最高学历" prop="education">
-                <el-select v-model="empBaseInfoForm.education" placeholder="请选择最高学历">
-                  <el-option label="博士" value="10" />
-                  <el-option label="硕士" value="11" />
-                  <el-option label="大学本科" value="21" />
-                  <el-option label="大学专科" value="31" />
-                  <el-option label="中专" value="41" />
-                  <el-option label="中技" value="42" />
-                  <el-option label="高中" value="61" />
-                  <el-option label="初中" value="71" />
-                  <el-option label="小学" value="81" />
-                  <el-option label="无学历" value="91" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="籍贯" prop="nativePlaceName">
-                <el-autocomplete
-                  v-model="empBaseInfoForm.nativePlaceName"
-                  class="inline-input"
-                  :fetch-suggestions="querySearch"
-                  placeholder="请输入籍贯"
-                  @select="placeNameSelect"
-                />
-              </el-form-item>
-              <el-form-item label="现住址" prop="currentAddress">
-                <el-input v-model="empBaseInfoForm.currentAddress" />
-              </el-form-item>
-              <el-form-item label="电话号码" prop="telePhone">
-                <el-input v-model="empBaseInfoForm.telePhone" />
-              </el-form-item>
-              <el-form-item label="招聘介绍人" prop="introducer">
-                <el-input v-model="empBaseInfoForm.introducer" />
-              </el-form-item>
-              <el-form-item label="银行名称" prop="bankName">
-                <el-input v-model="empBaseInfoForm.bankName" />
-              </el-form-item>
-              <el-form-item label="保险类型" prop="insuranceType">
-                <el-select v-model="empBaseInfoForm.insuranceType" placeholder="请选择保险类型">
-                  <el-option label="(深户)五险一档" value="1" />
-                  <el-option label="(非深户)五险一档" value="2" />
-                  <el-option label="(非深户)五险二档" value="3" />
-                  <el-option label="(非深户)五险三档" value="4" />
-                  <el-option label="(非深户)四险一档" value="5" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="家庭成员及关系" prop="family">
-                <el-input v-model="empBaseInfoForm.family" />
-              </el-form-item>
-              <el-form-item label="紧急联系电话" prop="urgencyPhone">
-                <el-input v-model="empBaseInfoForm.urgencyPhone" />
-              </el-form-item>
-            </el-col>
-            <el-col :span="12">
-              <el-form-item label="姓名" prop="empName">
-                <el-input v-model="empBaseInfoForm.empName" />
-              </el-form-item>
-              <el-form-item label="部门(护卫点)" required message="请选择护卫点" prop="deptId">
-                <treeselect
-                  v-model="empBaseInfoForm.deptId"
-                  :multiple="false"
-                  :options="depts"
-                  :clear-value-text="$t('common.clear')"
-                  placeholder="请选择部门(护卫点)"
-                  style="width:100%"
-                />
-              </el-form-item>
-              <el-form-item label="岗位" prop="jobName">
-                <el-autocomplete
-                  v-model="empBaseInfoForm.jobName"
-                  class="inline-input"
-                  :fetch-suggestions="querySearchJob"
-                  placeholder="请输入岗位"
-                  @select="jobNameSelect"
-                />
-              </el-form-item>
-              <el-form-item label="性别" prop="sex">
-                <el-select v-model="empBaseInfoForm.sex" placeholder="请选择性别">
-                  <el-option label="男" value="1" />
-                  <el-option label="女" value="2" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="身份证有效期" prop="certificateValidity">
-                <el-date-picker
-                  v-model="empBaseInfoForm.certificateValidity"
-                  type="date"
-                  value-format="yyyy-MM-dd"
-                  placeholder="选择日期"
-                />
-              </el-form-item>
-              <el-form-item label="年龄" prop="age">
-                <el-input v-model="empBaseInfoForm.age" />
-              </el-form-item>
-              <el-form-item label="出生日期" prop="birthdate">
-                <el-date-picker
-                  v-model="empBaseInfoForm.birthdate"
-                  type="date"
-                  value-format="yyyy-MM-dd"
-                  placeholder="选择日期"
-                />
-              </el-form-item>
-              <el-form-item label="入职日期" prop="entryDate">
-                <el-date-picker
-                  v-model="empBaseInfoForm.entryDate"
-                  type="date"
-                  value-format="yyyy-MM-dd"
-                  placeholder="选择日期"
-                  @input="calculateSeniority"
-                />
-              </el-form-item>
-              <el-form-item label="入司工龄" prop="seniority">
-                <el-input v-model="empBaseInfoForm.seniority" />
-              </el-form-item>
-              <el-form-item label="户籍地址" prop="censusAddress">
-                <el-input v-model="empBaseInfoForm.censusAddress" />
-              </el-form-item>
-              <el-form-item label="保安员证号" prop="guardNumb">
-                <el-input v-model="empBaseInfoForm.guardNumb" />
-              </el-form-item>
-              <el-form-item label="保安员回执" prop="returnReceipt">
-                <el-input v-model="empBaseInfoForm.returnReceipt" />
-              </el-form-item>
-              <el-form-item label="档案情况" prop="archivesStatus">
-                <el-select v-model="empBaseInfoForm.archivesStatus" placeholder="请选择档案情况">
-                  <el-option label="未移交" value="0" />
-                  <el-option label="已移交" value="1" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="银行账号" prop="bankNumb">
-                <el-input v-model="empBaseInfoForm.bankNumb" />
-              </el-form-item>
-              <el-form-item label="社保电脑号" prop="socialNumb">
-                <el-input v-model="empBaseInfoForm.socialNumb" />
-              </el-form-item>
-              <el-form-item label="员工手册" prop="handbookStatus">
-                <el-select v-model="empBaseInfoForm.handbookStatus" placeholder="请选择员工手册">
-                  <el-option label="未发" value="0" />
-                  <el-option label="已发" value="1" />
-                </el-select>
-              </el-form-item>
-              <el-form-item label="工作证" prop="empCardStatus">
-                <el-select v-model="empBaseInfoForm.empCardStatus" placeholder="请选择工作证">
-                  <el-option label="未发" value="0" />
-                  <el-option label="已发" value="1" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-            <el-col :span="24">
-              <el-form-item label="相关证件" prop="certificateList">
-                <el-select v-model="empBaseInfoForm.certificateList" placeholder="请选择相关证件">
-                  <el-option label="高中毕业证" value="1" />
-                  <el-option label="专科毕业证" value="2" />
-                  <el-option label="本科毕业证" value="3" />
-                </el-select>
-              </el-form-item>
-            </el-col>
-          </el-row>
-        </el-form></el-main>
+        <el-main>
+          <el-form
+            ref="empBaseInfoForm"
+            :model="empBaseInfoForm"
+            :rules="isAdd ? addRules : rules"
+            label-position="right"
+            label-width="120px"
+          >
+            <el-row>
+              <el-col :span="12">
+                <el-form-item label="档案号" prop="archivesNumb">
+                  <el-input v-model="empBaseInfoForm.archivesNumb" />
+                </el-form-item>
+                <el-form-item label="员工编号" prop="empNumb">
+                  <el-input v-model="empBaseInfoForm.empNumb" />
+                </el-form-item>
+                <el-form-item label="身份证号码" prop="certificateNumb">
+                  <el-input
+                    v-model="empBaseInfoForm.certificateNumb"
+                    @input="generateUserInfo(0,empBaseInfoForm.certificateNumb)"
+                  />
+                </el-form-item>
+                <el-form-item label="员工类别" prop="empType">
+                  <el-select v-model="empBaseInfoForm.empType" placeholder="请选择员工类型">
+                    <el-option
+                      v-for="dict in empTypeOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="民族" prop="nation">
+                  <el-select v-model="empBaseInfoForm.nation" filterable placeholder="请选择民族">
+                    <el-option
+                      v-for="dict in nationOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="婚姻状态" prop="marriage">
+                  <el-select v-model="empBaseInfoForm.marriage" placeholder="请选择婚姻状态">
+                    <el-option
+                      v-for="dict in marriageOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="身高(cm)" prop="stature">
+                  <el-input v-model="empBaseInfoForm.stature" />
+                </el-form-item>
+                <el-form-item label="政治面貌" prop="politics">
+                  <el-select v-model="empBaseInfoForm.politics" placeholder="请选择政治面貌">
+                    <el-option
+                      v-for="dict in statusOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="学历" prop="education">
+                  <el-select v-model="empBaseInfoForm.education" placeholder="请选择学历">
+                    <el-option
+                      v-for="dict in educationOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="籍贯" prop="nativePlaceName">
+                  <el-autocomplete
+                    v-model="empBaseInfoForm.nativePlaceName"
+                    class="inline-input"
+                    :fetch-suggestions="querySearch"
+                    placeholder="请输入籍贯"
+                    @select="placeNameSelect"
+                  />
+                </el-form-item>
+                <el-form-item label="现住址" prop="currentAddress">
+                  <el-input v-model="empBaseInfoForm.currentAddress" />
+                </el-form-item>
+                <el-form-item label="电话号码" prop="telePhone">
+                  <el-input v-model="empBaseInfoForm.telePhone" />
+                </el-form-item>
+                <el-form-item label="招聘介绍人" prop="introducer">
+                  <el-input v-model="empBaseInfoForm.introducer" />
+                </el-form-item>
+                <el-form-item label="银行名称">
+                  <el-input v-model="empBaseInfoForm.bankName" />
+                </el-form-item>
+                <el-form-item label="社保档位" prop="insuranceType">
+                  <el-select v-model="empBaseInfoForm.insuranceType" placeholder="请选择社保档位">
+                    <el-option
+                      v-for="dict in insuranceTypeOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="家庭成员及关系1" prop="family">
+                  <el-input v-model="empBaseInfoForm.family" />
+                </el-form-item>
+                <el-form-item label="家庭成员及关系2" prop="urgencyPhone">
+                  <el-input v-model="empBaseInfoForm.urgencyPhone" />
+                </el-form-item>
+              </el-col>
+              <el-col :span="12">
+                <el-form-item label="姓名" prop="empName">
+                  <el-input v-model="empBaseInfoForm.empName" />
+                </el-form-item>
+                <el-form-item label="部门(护卫点)" required message="请选择护卫点" prop="deptId">
+                  <treeselect
+                    v-model="empBaseInfoForm.deptId"
+                    :multiple="false"
+                    :options="depts"
+                    :clear-value-text="$t('common.clear')"
+                    placeholder="请选择部门(护卫点)"
+                    style="width:100%"
+                    @select="empDeptNameSelect"
+                  />
+                </el-form-item>
+                <el-form-item label="岗位" prop="jobName">
+                  <el-autocomplete
+                    v-model="empBaseInfoForm.jobName"
+                    class="inline-input"
+                    :fetch-suggestions="querySearchJob"
+                    placeholder="请输入岗位"
+                    @select="jobNameSelect"
+                  />
+                </el-form-item>
+                <el-form-item label="性别" prop="sex">
+                  <el-select v-model="empBaseInfoForm.sex" placeholder="请选择性别">
+                    <el-option
+                      v-for="dict in sexOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="身份证有效期" prop="certificateValidity">
+                  <el-date-picker
+                    v-model="empBaseInfoForm.certificateValidity"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                  />
+                </el-form-item>
+                <el-form-item label="年龄" prop="age">
+                  <el-input v-model="empBaseInfoForm.age" />
+                </el-form-item>
+                <el-form-item label="出生日期" prop="birthdate">
+                  <el-date-picker
+                    v-model="empBaseInfoForm.birthdate"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                  />
+                </el-form-item>
+                <el-form-item label="入职日期" prop="entryDate">
+                  <el-date-picker
+                    v-model="empBaseInfoForm.entryDate"
+                    type="date"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期"
+                    @input="calculateSeniority"
+                  />
+                </el-form-item>
+                <el-form-item label="入司工龄" prop="seniority">
+                  <el-input v-model="empBaseInfoForm.seniority" />
+                </el-form-item>
+                <el-form-item label="户籍地址" prop="censusAddress">
+                  <el-input v-model="empBaseInfoForm.censusAddress" />
+                </el-form-item>
+                <el-form-item label="保安员证号" prop="guardNumb">
+                  <el-input v-model="empBaseInfoForm.guardNumb" />
+                </el-form-item>
+                <el-form-item label="保安员回执" prop="returnReceipt">
+                  <el-input v-model="empBaseInfoForm.returnReceipt" />
+                </el-form-item>
+                <el-form-item label="档案情况" prop="archivesStatus">
+                  <el-select v-model="empBaseInfoForm.archivesStatus" placeholder="请选择档案情况">
+                    <el-option
+                      v-for="dict in archivesStatusOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="银行账号">
+                  <el-input v-model="empBaseInfoForm.bankNumb" />
+                </el-form-item>
+                <el-form-item label="社保电脑号" prop="socialNumb">
+                  <el-input v-model="empBaseInfoForm.socialNumb" />
+                </el-form-item>
+                <el-form-item label="员工手册" prop="handbookStatus">
+                  <el-select v-model="empBaseInfoForm.handbookStatus" placeholder="请选择员工手册">
+                    <el-option
+                      v-for="dict in handbookStatusOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+                <el-form-item label="工作证" prop="empCardStatus">
+                  <el-select v-model="empBaseInfoForm.empCardStatus" placeholder="请选择工作证">
+                    <el-option
+                      v-for="dict in empCardStatusOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+              <el-col :span="24">
+                <el-form-item label="相关证件" prop="certificateList">
+                  <el-select v-model="empBaseInfoForm.certificateList" multiple placeholder="请选择相关证件">
+                    <el-option
+                      v-for="dict in certificateListOptions"
+                      :key="dict.dicItemCode"
+                      :label="dict.dicItemName"
+                      :value="dict.dicItemCode"
+                    />
+                  </el-select>
+                </el-form-item>
+              </el-col>
+            </el-row>
+          </el-form>
+        </el-main>
       </el-container>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="putEmpBase('empBaseInfoForm')">保 存</el-button>
@@ -539,8 +636,12 @@
             </el-form-item>
             <el-form-item label="调岗类型" prop="changeType">
               <el-select v-model="ygdgForm.changeType" placeholder="请选择">
-                <el-option label="升职" value="2" />
-                <el-option label="调动" value="3" />
+                <el-option
+                  v-for="dict in changeTypeOptions"
+                  :key="dict.dicItemCode"
+                  :label="dict.dicItemName"
+                  :value="dict.dicItemCode"
+                />
               </el-select>
             </el-form-item>
             <el-form-item label="调岗日期" prop="changeDate">
@@ -574,7 +675,7 @@
               <el-upload
                 ref="upload"
                 class="upload-demo"
-                action="http://120.24.23.155:8301/hr/empBaseInfo/importEmp"
+                action="http://127.0.0.1:8301/hr/empBaseInfo/importEmp"
                 accept=".xls, .xlsx, .excel"
                 :headers="headers()"
                 :file-list="fileList"
@@ -591,28 +692,38 @@
         <el-button type="primary" @click="showDryg(2)">确 定</el-button>
       </div>
     </el-dialog>
-    <el-dialog title="关闭档案" :visible.sync="dialogShowGbda" width="50%">
+    <el-dialog title="关闭档案" :visible.sync="dialogShowGbda" width="70%">
       <el-form ref="gbdaForm" :model="gbdaForm" :rules="gbdaRules" label-position="right" label-width="120px">
         <el-row>
           <el-col span="24">
             <el-form-item label="离职类型" prop="dimissionType">
               <el-radio-group v-model="gbdaForm.dimissionType" @change="changeDimissionType">
-                <el-radio :label="1">正常离职</el-radio>
-                <el-radio :label="2">自动离职</el-radio>
-                <el-radio :label="3">公司劝退</el-radio>
-                <el-radio :label="4">公司辞退</el-radio>
+                <el-radio :label="1">合同期满</el-radio>
+                <el-radio :label="2">公司劝退</el-radio>
+                <el-radio :label="3">公司辞退</el-radio>
+                <el-radio :label="4">自动离职</el-radio>
                 <el-radio :label="5">试用期内</el-radio>
+                <el-radio :label="6">正常离职</el-radio>
+                <el-radio :label="7">到龄退休</el-radio>
               </el-radio-group>
             </el-form-item>
           </el-col>
-          <el-col v-if="selectDimissionType === 2" span="12">
+          <el-col v-if="selectDimissionType === 4" span="12">
             <el-form-item label="自离天数" prop="selfLeaveDay">
               <el-input v-model="gbdaForm.selfLeaveDay" onkeyup="value=value.replace(/[^0-9.]/g,'')" />
             </el-form-item>
           </el-col>
-          <el-col v-if="selectDimissionType === 2" span="12">
+          <el-col v-if="selectDimissionType === 4" span="12">
             <el-form-item label="报告人" prop="reporter">
               <el-input v-model="gbdaForm.reporter" />
+            </el-form-item>
+          </el-col>
+          <el-col span="24">
+            <el-form-item label="离职操作" prop="afterOperation">
+              <el-checkbox-group v-model="gbdaForm.afterOperation">
+                <el-checkbox label="1">解除劳动合同</el-checkbox>
+                <el-checkbox label="2">禁用登录账号</el-checkbox>
+              </el-checkbox-group>
             </el-form-item>
           </el-col>
           <el-col span="24">
@@ -635,7 +746,10 @@
         <el-button type="primary" @click="showGbda(2,'gbdaForm')">确 定</el-button>
       </div>
     </el-dialog>
-    <el-dialog title="导出员工    请勾选需要导出的字段" :visible.sync="dialogShowDcyg" width="40%">
+    <el-dialog title="导出员工" :visible.sync="dialogShowDcyg" width="40%">
+      <div style="font-size: 16px;font-weight: 400;height: 35px;margin-top: -30px;color: #409EFF;">
+        请勾选需要导出的字段
+      </div>
       <table id="dcygTable" width="100%">
         <tr>
           <td colspan="6" style="text-align: left;">
@@ -661,7 +775,7 @@
           <tr>
             <td>部门(护卫点)</td>
             <td>
-              <el-checkbox label="deptName"><span /></el-checkbox>
+              <el-checkbox label="allDeptName"><span /></el-checkbox>
             </td>
             <td>所属岗位</td>
             <td>
@@ -709,7 +823,7 @@
             <td>
               <el-checkbox label="birthdate"><span /></el-checkbox>
             </td>
-            <td>最高学历</td>
+            <td>学历</td>
             <td>
               <el-checkbox label="educationName"><span /></el-checkbox>
             </td>
@@ -757,13 +871,27 @@
             </td>
           </tr>
           <tr>
+            <td>家庭成员及关系1</td>
+            <td>
+              <el-checkbox label="family"><span /></el-checkbox>
+            </td>
+            <td>员工状态</td>
+            <td>
+              <el-checkbox label="empStatusName"><span /></el-checkbox>
+            </td>
+            <td>离职日期</td>
+            <td>
+              <el-checkbox label="dimissionDate"><span /></el-checkbox>
+            </td>
+          </tr>
+          <tr>
             <td>入职日期</td>
             <td>
               <el-checkbox label="entryDate"><span /></el-checkbox>
             </td>
-            <td>保险类型</td>
+            <td>社保档位</td>
             <td>
-              <el-checkbox label="InsuranceTypeName"><span /></el-checkbox>
+              <el-checkbox label="insuranceTypeName"><span /></el-checkbox>
             </td>
             <td>社保电脑号</td>
             <td>
@@ -781,15 +909,15 @@
             </td>
             <td>工作证</td>
             <td>
-              <el-checkbox label="empCardStatus"><span /></el-checkbox>
+              <el-checkbox label="empCardStatusName"><span /></el-checkbox>
             </td>
           </tr>
           <tr>
             <td>相关证件</td>
             <td>
-              <el-checkbox label="certificateList"><span /></el-checkbox>
+              <el-checkbox label="certificateListName"><span /></el-checkbox>
             </td>
-            <td>紧急联系电话</td>
+            <td>家庭成员及关系2</td>
             <td>
               <el-checkbox label="urgencyPhone"><span /></el-checkbox>
             </td>
@@ -799,9 +927,23 @@
             </td>
           </tr>
           <tr>
-            <td>家庭成员及关系</td>
+            <td>入职类型</td>
             <td>
-              <el-checkbox label="family"><span /></el-checkbox>
+              <el-checkbox label="entryTypeName"><span /></el-checkbox>
+            </td>
+            <td>离职类型</td>
+            <td>
+              <el-checkbox label="dimissionTypeName"><span /></el-checkbox>
+            </td>
+            <td>编号</td>
+            <td>
+              <el-checkbox label="empNumb"><span /></el-checkbox>
+            </td>
+          </tr>
+          <tr>
+            <td>年假天数</td>
+            <td>
+              <el-checkbox label="annualLeave"><span /></el-checkbox>
             </td>
             <td />
             <td />
@@ -820,8 +962,117 @@
       :dialog-visible="dialog.isVisible"
       :title="dialog.title"
       :type="dialog.type"
+      @success="editSuccess"
       @close="editClose"
     />
+    <el-dialog title="打开档案" :visible.sync="dialogShowDkda" width="50%">
+      <el-form
+        ref="openArchivesForm"
+        :model="openArchivesForm"
+        rules="openArchivesRules"
+        label-position="right"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col span="24">
+            <el-form-item label="打开类型" prop="region">
+              <el-radio-group v-model="openArchivesForm.openType">
+                <el-radio :label="21">重新入职</el-radio>
+                <el-radio :label="22">返聘</el-radio>
+              </el-radio-group>
+              (主要对已退休员工返聘)
+            </el-form-item>
+            <el-form-item label="打开日期">
+              <el-date-picker
+                v-model="openArchivesForm.openDate"
+                value-format="yyyy-MM-dd"
+                type="date"
+                placeholder="选择打开日期"
+              />
+            </el-form-item>
+            <el-form-item label="备注说明">
+              <el-input v-model="openArchivesForm.remark" type="textarea" :rows="4" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="showDkda(1, '')">取 消</el-button>
+        <el-button type="primary" @click="showDkda(2, 'openArchivesForm')">确 定</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 上传方式选择弹窗 -->
+    <el-dialog
+      title="选择上传方式"
+      :visible.sync="uploadChoiceDialogVisible"
+      width="400px"
+      :close-on-click-modal="false"
+    >
+      <div class="upload-choice-container">
+        <div class="upload-choice-item" @click="choiceCamera">
+          <i class="el-icon-camera" />
+          <span>拍照上传</span>
+        </div>
+        <div class="upload-choice-item" @click="choiceFile">
+          <i class="el-icon-folder-opened" />
+          <span>文件上传</span>
+        </div>
+      </div>
+    </el-dialog>
+
+    <!-- 摄像头拍照弹窗 -->
+    <el-dialog
+      title="拍照上传"
+      :visible.sync="cameraDialogVisible"
+      width="640px"
+      :close-on-click-modal="false"
+      @close="closeCamera"
+    >
+      <div class="camera-container">
+        <!-- 视频预览 -->
+        <video
+          v-show="!capturedImage"
+          ref="video"
+          class="camera-video"
+          autoplay
+          playsinline
+        />
+        <!-- 画布(用于拍照) -->
+        <canvas ref="canvas" style="display: none;" />
+
+        <!-- 拍照结果预览 -->
+        <img
+          v-if="capturedImage"
+          :src="capturedImage"
+          class="captured-image"
+        >
+      </div>
+
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="closeCamera">取消</el-button>
+        <el-button
+          v-if="!capturedImage"
+          type="primary"
+          @click="takePhoto"
+        >
+          拍照
+        </el-button>
+        <el-button
+          v-if="capturedImage"
+          @click="retakePhoto"
+        >
+          重拍
+        </el-button>
+        <el-button
+          v-if="capturedImage"
+          type="primary"
+          @click="confirmPhoto"
+        >
+          确认使用
+        </el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 <script>
@@ -830,15 +1081,17 @@
 import Pagination from '@/components/Pagination'
 import Treeselect from '@riophae/vue-treeselect'
 import '@riophae/vue-treeselect/dist/vue-treeselect.css'
-import { calculateSeniority, toCardGetUserInfo } from '@/utils/myUtil'
+import { calculateSeniority, toCardGetUserInfo, dateToString } from '@/utils/myUtil'
 import ArchivesEdit from './archivesEdit'
 import { pages } from '@/settings'
+import dictMixin from '../../utils/dictMixin'
 
 export default {
   components: {
     ArchivesEdit,
     Pagination, Treeselect
   },
+  mixins: [dictMixin],
   data() {
     return {
       dialog: {
@@ -848,6 +1101,7 @@
       },
       total: 0, // 总数量
       queryParams: {
+        baseKey: '',
         empNumb: '',
         vague: '',
         sex: [],
@@ -858,24 +1112,33 @@
         insuranceType: [],
         empStatus: [],
         empCardStatus: [],
-        handbookStatus: []
+        handbookStatus: [],
+        entryType: [],
+        empType: [],
+        certificateList: []
       }, // 查询参数
       sort: {}, // 排序
       pagination: { // 分页参数
-        size: 10,
+        size: 15,
         num: 1
       },
-      baseicInformationForm: {
-      },
+      baseicInformationForm: {},
       empBaseInfoImageUrl: '',
+      // 上传方式选择弹窗
+      uploadChoiceDialogVisible: false,
+      // 摄像头相关
+      cameraDialogVisible: false,
+      capturedImage: '',
+      stream: null,
       empBaseInfoForm: {
         imagePath: '',
         empId: '',
         customerId: '',
         archivesNumb: '',
-        deptId: '',
+        deptId: null,
         deptName: '',
         empNumb: '',
+        allDeptName: '',
         empName: '',
         sex: '1',
         JobId: '',
@@ -891,7 +1154,7 @@
         birthdate: '',
         politics: '13',
         entryDate: '',
-        education: '61',
+        education: '17',
         seniority: '',
         nativePlace: '',
         nativePlaceName: '',
@@ -917,24 +1180,35 @@
         modifier: '',
         delFlag: '0',
         empStatus: 0,
-        version: ''
+        version: '',
+        entryType: '20'
       },
-      ygdgForm: {},
+      ygdgForm: {
+        empIds: [],
+        empNames: [],
+        oldDeptNames: [],
+        oldJobNames: [],
+        changeType: '',
+        changeDate: '',
+        changeReason: '',
+        jobId: '',
+        newJobName: '',
+        deptId: '',
+        newDeptName: '',
+        allDeptName: ''
+      },
       gbdaForm: {
         dgryIds: '',
         dimissionType: 1,
         dimissionDate: new Date(),
-        remark: ''
+        remark: '',
+        afterOperation: []
       },
       depts: [],
       fileList: [],
       rules: {
-        archivesNumb: [{ required: true, message: '请输入档案号', trigger: 'blur' }, {
-          max: 20,
-          message: this.$t('rules.noMoreThan20'),
-          trigger: 'blur'
-        }],
-        empName: [{ required: true, message: '请输入员工姓名', trigger: 'blur' },
+        archivesNumb: [{ max: 20, message: this.$t('rules.noMoreThan20'), trigger: 'blur' }],
+        empName: [{ required: true, message: '请输入姓名', trigger: 'blur' },
           { min: 2, max: 50, message: this.$t('rules.noMoreThan50'), trigger: 'blur' }],
         empNumb: [{ required: true, message: '请输入员工编号', trigger: 'blur' },
           { min: 2, max: 20, message: this.$t('rules.noMoreThan20'), trigger: 'blur' }],
@@ -944,12 +1218,20 @@
         certificateNumb: [{ required: true, message: '请输入身份证号', trigger: 'blur' }],
         jobName: [{ required: true, message: '请选择岗位', trigger: 'change' }],
         nativePlaceName: [{ required: true, message: '请选择籍贯', trigger: 'change' }],
-        bankName: [{ required: true, message: '请输入银行名称', trigger: 'blur' }, { max: 36, message: '长度不超过36个字符', trigger: 'blur' }],
-        insuranceType: [{ required: true, message: '请选择保险类型', trigger: 'change' }],
+        bankName: [{ required: true, message: '请输入银行名称', trigger: 'blur' }, {
+          max: 36,
+          message: '长度不超过36个字符',
+          trigger: 'blur'
+        }],
+        insuranceType: [{ required: true, message: '请选择社保档位', trigger: 'change' }],
         entryDate: [{ required: true, message: '请选择入职日期', trigger: 'change' }],
         seniority: [{ required: true, message: '请输入入司工龄', trigger: 'blur' }],
         archivesStatus: [{ required: true, message: '请选择档案情况', trigger: 'change' }],
-        bankNumb: [{ required: true, message: '请输入银行账号', trigger: 'blur' }, { max: 32, message: '长度不超过32个字符', trigger: 'blur' }],
+        bankNumb: [{ required: true, message: '请输入银行账号', trigger: 'blur' }, {
+          max: 32,
+          message: '长度不超过32个字符',
+          trigger: 'blur'
+        }],
         empType: [{ required: true, message: '请选择员工类型', trigger: 'change' }],
         censusAddress: [{ max: 128, message: '长度不超过128个字符', trigger: 'blur' }],
         currentAddress: [{ max: 128, message: '长度不超过128个字符', trigger: 'blur' }],
@@ -961,6 +1243,14 @@
         family: [{ max: 128, message: '长度不超过128个字符', trigger: 'blur' }],
         certificateValidity: [{ required: true, message: '请选择身份证有效期', trigger: 'change' }],
         urgencyPhone: [{ max: 30, message: '长度不超过30个字符', trigger: 'blur' }]
+      },
+      // 新增模式的简化验证规则(仅验证核心字段)
+      addRules: {
+        empName: [{ required: true, message: '请输入姓名', trigger: 'blur' },
+          { min: 2, max: 50, message: this.$t('rules.noMoreThan50'), trigger: 'blur' }],
+        empNumb: [{ required: true, message: '请输入员工编号', trigger: 'blur' },
+          { min: 2, max: 20, message: this.$t('rules.noMoreThan20'), trigger: 'blur' }],
+        certificateNumb: [{ required: true, message: '请输入身份证号', trigger: 'blur' }]
       },
       gbdaRules: {
         dimissionType: [{ required: true, message: '请选择离职类型', trigger: 'change' }],
@@ -1045,23 +1335,119 @@
       dialogShowYgdg: false,
       dialogShowDryg: false,
       dialogShowGbda: false,
+      dialogShowDkda: false,
       exportUrl: '',
       checkAll: false,
       isIndeterminate: false,
-      cityOptions: ['archivesNumb', 'deptName', 'jobName', 'empName', 'certificateNumb', 'certificateValidity', 'sexName', 'nationName', 'age', 'marriageName', 'stature', 'birthdate', 'politicsName', 'empTypeName', 'educationName', 'nativePlaceName', 'censusAddress', 'currentAddress', 'guardNumb', 'returnReceipt', 'archivesStatusName', 'bankName', 'bankNumb', 'telePhone', 'entryDate', 'InsuranceTypeName', 'socialNumb', 'introducer', 'seniority', 'empCardStatus', 'certificateList', 'urgencyPhone', 'handbookStatusName', 'family'],
+      cityOptions: ['archivesNumb', 'allDeptName', 'jobName', 'empName', 'certificateNumb', 'certificateValidity', 'sexName', 'nationName', 'age', 'marriageName', 'stature', 'birthdate', 'politicsName', 'empTypeName', 'educationName', 'nativePlaceName', 'censusAddress', 'currentAddress', 'guardNumb', 'returnReceipt', 'archivesStatusName', 'bankName', 'bankNumb', 'telePhone', 'entryDate', 'insuranceTypeName', 'socialNumb', 'introducer', 'seniority', 'empCardStatusName', 'certificateListName', 'urgencyPhone', 'handbookStatusName', 'family', 'empStatusName', 'dimissionDate', 'entryTypeName', 'dimissionTypeName', 'empNumb', 'annualLeave'],
       checkedCities: [],
       tableData: [],
-      selectDimissionType: 1
+      selectDimissionType: 1,
+      inTypeOptions: [],
+      openArchivesForm: {}
+    }
+  },
+  computed: {
+    // 字典选项计算属性
+    statusOptions() {
+      return this.getDictOptions('PLITICAL')
+    },
+    empTypeOptions() {
+      return this.getDictOptions('EMPTYPE')
+    },
+    nationOptions() {
+      return this.getDictOptions('NATION')
+    },
+    marriageOptions() {
+      return this.getDictOptions('MARRIAGE')
+    },
+    educationOptions() {
+      return this.getDictOptions('EDUCATION')
+    },
+    nativePlaceOptions() {
+      return this.getDictOptions('NATIVEPLACE')
+    },
+    archivesStatusOptions() {
+      return this.getDictOptions('archivesStatus')
+    },
+    insuranceTypeOptions() {
+      return this.getDictOptions('INSURANCETYPE')
+    },
+    empCardStatusOptions() {
+      return this.getDictOptions('empCardStatus')
+    },
+    handbookStatusOptions() {
+      return this.getDictOptions('handbookStatus')
+    },
+    certificateListOptions() {
+      return this.getDictOptions('certificateList')
+    },
+    physicalExamTypeOptions() {
+      return this.getDictOptions('PHYSICALEXAMTYPE')
+    },
+    ecgOptions() {
+      return this.getDictOptions('ECG')
+    },
+    contractStatusOptions() {
+      return this.getDictOptions('CONTRACTSTATUS')
+    },
+    leaveTypeOptions() {
+      return this.getDictOptions('LEAVETYPE')
+    },
+    insuranceGaersOptions() {
+      return this.getDictOptions('INSURANCETYPE')
+    },
+    applayStatusOptions() {
+      return this.getDictOptions('applayStatus')
+    },
+    reportStatusOptions() {
+      return this.getDictOptions('reportStatus')
+    },
+    hospitalizatioFlagOptions() {
+      return this.getDictOptions('hospitalizatioFlag')
+    },
+    settleStatusOptions() {
+      return this.getDictOptions('settleStatus')
+    },
+    arbitrationTypeOptions() {
+      return this.getDictOptions('ZCTYPE')
+    },
+    changeTypeOptions() {
+      return this.getDictOptions('changeType')
+    },
+    dimissionTypeOptions() {
+      return this.getDictOptions('LZTYPE')
+    },
+    ageStrOptions() {
+      return this.getDictOptions('ageStr')
+    },
+    sexOptions() {
+      return this.getDictOptions('sex')
     }
   },
   mounted() {
     this.fetch()
     this.initDept()
+    // 字典数据已在登录时预加载,直接从 Vuex 获取
+    this.initDictTypes(['ageStr', 'PLITICAL', 'sex', 'EMPTYPE', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
+    this.initJob()
   },
   methods: {
+    exportExcel() {
+      this.queryParams.baseKey = this.queryParams.vague
+      this.queryParams.delFlag = 0
+      this.queryParams.empStatus = 0
+      var params = this.queryParams
+      this.$download('hr/empBaseInfo/exportEmpAll', { ...params }, `基本信息_${new Date().getTime()}.xls`).then(() => {
+        this.$message({
+          message: '下载成功!',
+          type: 'success'
+        })
+      })
+    },
     editArchives(row) {
       this.$refs.article.setArchives(row)
-      this.dialog.title = '档案管理'
+      this.dialog.title = row.empName + '员工档案'
       this.dialog.isVisible = true
     },
     editClose() {
@@ -1077,12 +1463,24 @@
         ageStr: [],
         archivesStatus: [],
         insuranceType: [],
-        empStatus: []
+        empStatus: [],
+        empCardStatus: [],
+        handbookStatus: [],
+        baseKey: '',
+        empType: [],
+        entryType: [],
+        certificateList: []
       }
       this.search()
     },
+    initJob() {
+      this.$get('system/position/dicJob').then((r) => {
+        this.restaurJob = r.data.data
+      })
+    },
     // 翻页方法
     search() {
+      this.queryParams.baseKey = ''
       this.fetch({
         ...this.queryParams,
         ...this.sort
@@ -1104,12 +1502,7 @@
     },
     vagueSearch() {
       this.fetch({
-        empNumb: this.queryParams.vague,
-        empName: this.queryParams.vague,
-        deptName: this.queryParams.vague,
-        certificateNumb: this.queryParams.vague,
-        nativePlaceName: this.queryParams.vague,
-        censusAddress: this.queryParams.vague
+        baseKey: this.queryParams.baseKey
       })
     },
     transEmpStatus(empStatus) {
@@ -1121,6 +1514,76 @@
         case '2':
           return '退休'
       }
+    },
+    transEntryType(entryType) {
+      switch (entryType) {
+        case '20':
+          return '新入职'
+        case '21':
+          return '重新入职'
+        case '22':
+          return '返聘入职'
+      }
+    },
+    typeFormat(row, column) {
+      return this.selectDictLabel(this.physicalExamTypeOptions, row.physicalExamType)
+    },
+    empTypeFormat(row, column) {
+      return this.selectDictLabel(this.empTypeOptions, row.empType)
+    },
+    sexFormat(row, column) {
+      return this.selectDictLabel(this.sexOptions, row.sex)
+    },
+    nationFormat(row, column) {
+      return this.selectDictLabel(this.nationOptions, row.nation)
+    },
+    marriageFormat(row, column) {
+      return this.selectDictLabel(this.marriageOptions, row.marriage)
+    },
+    politicsFormat(row, column) {
+      return this.selectDictLabel(this.statusOptions, row.politics)
+    },
+    educationFormat(row, column) {
+      return this.selectDictLabel(this.educationOptions, row.education)
+    },
+    nativePlaceFormat(row, column) {
+      return this.selectDictLabel(this.nativePlaceOptions, row.nativePlace)
+    },
+    insuranceTypeFormat(row, column) {
+      return this.selectDictLabel(this.insuranceTypeOptions, row.insuranceType)
+    },
+    ecgNameFormat(row, column) {
+      return this.selectDictLabel(this.ecgOptions, row.ecg)
+    },
+    contractStatusFormat(row, column) {
+      return this.selectDictLabel(this.contractStatusOptions, row.contractStatus)
+    },
+    changeTypeFormat(row, column) {
+      return this.selectDictLabel(this.changeTypeOptions, row.changeType)
+    },
+    leaveTypeFormat(row, column) {
+      return this.selectDictLabel(this.leaveTypeOptions, row.leaveType)
+    },
+    dimissionTypeFormat(row, column) {
+      return this.selectDictLabel(this.dimissionTypeOptions, row.dimissionType)
+    },
+    insuranceGaersFormat(row, column) {
+      return this.selectDictLabel(this.insuranceGaersOptions, row.insuranceGaers)
+    },
+    reportStatusFormat(row, column) {
+      return this.selectDictLabel(this.reportStatusOptions, row.reportStatus)
+    },
+    applayStatusFormat(row, column) {
+      return this.selectDictLabel(this.applayStatusOptions, row.applayStatus)
+    },
+    hospitalizatioFlagFormat(row, column) {
+      return this.selectDictLabel(this.hospitalizatioFlagOptions, row.hospitalizatioFlag)
+    },
+    arbitrationTypeFormat(row, column) {
+      return this.selectDictLabel(this.arbitrationTypeOptions, row.arbitrationType)
+    },
+    arbitrationStatusFormat(row, column) {
+      return this.selectDictLabel(this.settleStatusOptions, row.arbitrationStatus)
     },
     initDept() {
       this.$get('system/dept').then((r) => {
@@ -1190,6 +1653,149 @@
         this.$message.error('图片大小超过4M,请重新上传')
       }
     },
+    // 打开上传方式选择弹窗
+    openUploadChoice() {
+      this.uploadChoiceDialogVisible = true
+    },
+    // 选择拍照上传
+    choiceCamera() {
+      this.uploadChoiceDialogVisible = false
+      this.cameraDialogVisible = true
+      this.$nextTick(() => {
+        this.initCamera()
+      })
+    },
+    // 选择文件上传
+    choiceFile() {
+      this.uploadChoiceDialogVisible = false
+      // 创建隐藏的文件输入框
+      const input = document.createElement('input')
+      input.type = 'file'
+      input.accept = 'image/*'
+      input.onchange = (e) => {
+        const file = e.target.files[0]
+        if (file) {
+          this.handleFileUpload(file)
+        }
+      }
+      input.click()
+    },
+    // 处理文件上传
+    handleFileUpload(file) {
+      // 验证文件类型
+      const isImage = file.type.startsWith('image/')
+      if (!isImage) {
+        this.$message.error('请上传图片文件')
+        return
+      }
+      // 验证文件大小(限制10MB)
+      const isLt10M = file.size / 1024 / 1024 < 10
+      if (!isLt10M) {
+        this.$message.error('图片大小不能超过10MB')
+        return
+      }
+      // 生成预览URL
+      const imageUrl = URL.createObjectURL(file)
+      this.empBaseInfoImageUrl = imageUrl
+      // 读取文件为Base64
+      const reader = new FileReader()
+      reader.onload = (e) => {
+        this.empBaseInfoForm.imagePath = e.target.result
+        this.$message.success('照片上传成功')
+      }
+      reader.readAsDataURL(file)
+    },
+    // 打开摄像头
+    openCamera() {
+      this.cameraDialogVisible = true
+      this.$nextTick(() => {
+        this.initCamera()
+      })
+    },
+    // 初始化摄像头
+    async initCamera() {
+      try {
+        // 请求摄像头权限
+        this.stream = await navigator.mediaDevices.getUserMedia({
+          video: {
+            width: { ideal: 640 },
+            height: { ideal: 480 },
+            facingMode: 'user' // 前置摄像头
+          },
+          audio: false
+        })
+
+        // 将视频流绑定到 video 元素
+        const video = this.$refs.video
+        if (video) {
+          video.srcObject = this.stream
+        }
+      } catch (error) {
+        this.$message.error('无法访问摄像头,请检查摄像头权限设置')
+        console.error('摄像头初始化失败:', error)
+      }
+    },
+    // 拍照
+    takePhoto() {
+      const video = this.$refs.video
+      const canvas = this.$refs.canvas
+
+      if (!video || !canvas) return
+
+      // 设置画布尺寸
+      canvas.width = video.videoWidth || 640
+      canvas.height = video.videoHeight || 480
+
+      // 绘制视频帧到画布
+      const ctx = canvas.getContext('2d')
+      ctx.drawImage(video, 0, 0, canvas.width, canvas.height)
+
+      // 转换为图片数据
+      this.capturedImage = canvas.toDataURL('image/jpeg', 0.9)
+
+      // 停止摄像头
+      this.stopCamera()
+    },
+    // 重拍
+    retakePhoto() {
+      this.capturedImage = ''
+      this.initCamera()
+    },
+    // 确认使用照片
+    confirmPhoto() {
+      if (this.capturedImage) {
+        // 设置图片预览
+        this.empBaseInfoImageUrl = this.capturedImage
+
+        // 设置表单数据(Base64格式)
+        this.empBaseInfoForm.imagePath = this.capturedImage
+
+        // 关闭弹窗
+        this.closeCamera()
+
+        this.$message.success('照片已保存')
+      }
+    },
+    // 关闭摄像头
+    closeCamera() {
+      this.stopCamera()
+      this.cameraDialogVisible = false
+      this.capturedImage = ''
+    },
+    // 停止摄像头流
+    stopCamera() {
+      if (this.stream) {
+        this.stream.getTracks().forEach(track => {
+          track.stop()
+        })
+        this.stream = null
+      }
+
+      const video = this.$refs.video
+      if (video) {
+        video.srcObject = null
+      }
+    },
     cleanEmpBase() {
       this.empBaseInfoForm.empId = ''
       this.empBaseInfoForm.customerId = ''
@@ -1242,6 +1848,7 @@
       this.empBaseInfoImageUrl = ''
     },
     editEmpBase(row) {
+      console.log(row)
       this.isAdd = false
       this.empBaseInfoForm.empId = row.empId
       this.empBaseInfoForm.customerId = row.customerId
@@ -1250,20 +1857,30 @@
       this.empBaseInfoForm.deptName = row.deptName
       this.empBaseInfoForm.empNumb = row.empNumb
       this.empBaseInfoForm.empName = row.empName
-      this.empBaseInfoForm.sex = row.sex
       this.empBaseInfoForm.JobId = row.JobId
       this.empBaseInfoForm.jobName = row.jobName
       this.empBaseInfoForm.empType = row.empType
       this.empBaseInfoForm.certificateType = row.certificateType
-      this.empBaseInfoForm.certificateNumb = row.certificateNumb
       this.empBaseInfoForm.nation = row.nation
       this.empBaseInfoForm.certificateValidity = row.certificateValidity
       this.empBaseInfoForm.marriage = row.marriage
-      this.empBaseInfoForm.age = row.age
+      this.empBaseInfoForm.certificateNumb = row.certificateNumb
+      if (!row.birthdate) {
+        var userinfo = toCardGetUserInfo(this.empBaseInfoForm.certificateNumb)
+        if (userinfo !== null) {
+          this.empBaseInfoForm.age = userinfo.age
+          this.empBaseInfoForm.birthdate = userinfo.birth
+          this.empBaseInfoForm.sex = userinfo.sex
+        }
+      } else {
+        this.empBaseInfoForm.age = row.age
+        this.empBaseInfoForm.birthdate = row.birthdate
+        this.empBaseInfoForm.sex = row.sex
+      }
       this.empBaseInfoForm.stature = row.stature
-      this.empBaseInfoForm.birthdate = row.birthdate
       this.empBaseInfoForm.politics = row.politics
       this.empBaseInfoForm.entryDate = row.entryDate
+      this.empBaseInfoForm.entryType = row.entryType
       this.empBaseInfoForm.education = row.education
       this.empBaseInfoForm.seniority = row.seniority
       this.empBaseInfoForm.nativePlace = row.nativePlace
@@ -1284,6 +1901,11 @@
       this.empBaseInfoForm.handbookStatus = row.handbookStatus
       this.empBaseInfoForm.urgencyPhone = row.urgencyPhone
       this.empBaseInfoForm.empCardStatus = row.empCardStatus
+      let certificateList = []
+      if (row.certificateList && typeof row.certificateList === 'string') {
+        certificateList = row.certificateList.split(',')
+        row.certificateList = certificateList
+      }
       this.empBaseInfoForm.certificateList = row.certificateList
       this.empBaseInfoForm.createTime = row.createTime
       this.empBaseInfoForm.creator = row.creator
@@ -1291,60 +1913,29 @@
       this.empBaseInfoForm.modifier = row.modifier
       this.empBaseInfoForm.delFlag = row.delFlag
       this.empBaseInfoForm.version = row.version
-      this.empBaseInfoImageUrl = pages.getEmpBaseInfoImage + row.empId
+      // this.empBaseInfoImageUrl = ''
+      this.empBaseInfoImageUrl = pages.getEmpBaseInfoImage + row.empId + '?t=' + parseInt(100 * Math.random())
       this.showXzyg(1)
     },
     putEmpBase(formName) {
+      // 根据新增/编辑模式使用不同的验证规则
+      const validateRules = this.isAdd ? this.addRules : this.rules
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          if (this.isAdd) {
-            this.$post('hr/empBaseInfo', { ...this.empBaseInfoForm }).then(() => {
-              this.buttonLoading = false
-              this.$message({
-                message: this.$t('tips.createSuccess'),
-                type: 'success'
-              })
-              this.cleanEmpBase()
-            })
-          } else {
-            this.$put('hr/empBaseInfo', { ...this.empBaseInfoForm }).then(() => {
-              this.$message({
-                message: this.$t('tips.updateSuccess'),
-                type: 'success'
-              })
-              this.$emit('success')
-              this.cleanEmpBase()
-            })
-          }
-          this.fetch({
-            ...this.queryParams,
-            ...this.sort
-          })
-          this.cleanEmpBase()
-          this.showXzyg()
+          this.submitEmpInfo()
+          // 刷新、清空、关闭操作已移至 submitEmpInfo 的成功回调中
         }
-      })
+      }, validateRules)
     },
     putEmpBaseContinue(formName) {
+      // 根据新增/编辑模式使用不同的验证规则
+      const validateRules = this.isAdd ? this.addRules : this.rules
       this.$refs[formName].validate((valid) => {
         if (valid) {
-          if (this.isAdd) {
-            this.$post('hr/empBaseInfo', { ...this.empBaseInfoForm }).then(() => {
-              this.buttonLoading = false
-              this.$message({
-                message: this.$t('tips.createSuccess'),
-                type: 'success'
-              })
-              this.cleanEmpBase()
-            })
-          }
-          this.cleanEmpBase()
-          this.fetch({
-            ...this.queryParams,
-            ...this.sort
-          })
+          // 传入 true 表示保存并继续新增,不关闭对话框
+          this.submitEmpInfo(true)
         }
-      })
+      }, validateRules)
     },
     delEmp() {
       var selection = this.$refs.multipleTable.store.states.selection
@@ -1379,6 +1970,7 @@
     },
     showXzyg(val) {
       if (val === 0) {
+        // this.cleanEmpBase()
         this.isAdd = true
       }
       if (!this.dialogShowXzyg) {
@@ -1412,6 +2004,7 @@
           break
         case 2:
           var params = this.queryParams
+          params.empStatus = '0'
           params.exportField = this.checkedCities.join(',')
           this.$download('hr/empBaseInfo/exportWithField', { ...params }, '在职员工列表.xls').then(() => {
             this.$message({
@@ -1421,6 +2014,9 @@
           })
           break
       }
+    },
+    editSuccess() {
+      this.search()
     },
     showYgdg(operate, formName) {
       switch (operate) {
@@ -1440,7 +2036,7 @@
               var data = selection[i]
               ids.push(data.empId)
               names.push(data.empName)
-              deptNames.push(data.deptName)
+              deptNames.push(data.allDeptName)
               jobNames.push(data.jobName)
             }
             this.ygdgForm = {
@@ -1490,7 +2086,9 @@
       this.empBaseInfoForm.nativePlace = item.code
     },
     deptNameSelect(node) {
+      this.ygdgForm.deptId = node.deptId
       this.ygdgForm.newDeptName = node.label
+      this.ygdgForm.allDeptName = node.allDeptName
     },
     querySearchJob(queryString, cb) {
       const restaurants = this.restaurJob
@@ -1504,6 +2102,10 @@
 
       this.ygdgForm.newJobName = item.value
       this.ygdgForm.jobId = item.code
+    }, empDeptNameSelect(val) {
+      this.empBaseInfoForm.deptId = val.id
+      this.empBaseInfoForm.deptName = val.label
+      this.empBaseInfoForm.allDeptName = val.allDeptName
     },
     generateUserInfo(index, val) {
       var userinfo = toCardGetUserInfo(val)
@@ -1529,7 +2131,6 @@
     },
     changeDimissionType(value) {
       this.selectDimissionType = value
-      console.log('值:' + value)
     },
     validSelfLeaveDay(rule, value, callback) {
       const type = this.gbdaForm.dimissionType
@@ -1572,11 +2173,15 @@
             var ids = []
             var names = []
             var dates = []
+            var numbers = []
+            var deptNames = []
             for (var i = 0; i < selection.length; i++) {
               var data = selection[i]
               ids.push(data.empId)
               names.push(data.empName)
               dates.push(data.entryDate)
+              numbers.push(data.certificateNumb)
+              deptNames.push(data.allDeptName)
             }
             const nowDate = new Date()
             const year = nowDate.getFullYear()
@@ -1588,7 +2193,10 @@
               entryDates: dates.join(','),
               dimissionType: 1,
               dimissionDate: year + '-' + month + '-' + day,
-              remark: ''
+              remark: '',
+              afterOperation: ['1'],
+              certificateNumb: numbers.join(','),
+              deptNames: deptNames.join(',')
             }
             this.dialogShowGbda = true
           }
@@ -1616,14 +2224,21 @@
       }
     },
     doDcda() {
-      this.$confirm('是否确定要导出档案?', '提示', {
+      this.$confirm('是否确定要导出档案,请耐心等待?', '提示', {
         confirmButtonText: '确定',
         cancelButtonText: '取消',
         type: 'warning'
       }).then(() => {
-        this.$message({
-          type: 'success',
-          message: '导出成功!'
+        var params = this.queryParams
+        this.$post('hr/pdf/exportWithField', {
+          ...params
+        }).then((r) => {
+          const data = r.data.data
+          for (let i = 0; i < data.length; i++) {
+            this.$download('hr/pdf/contract', {
+              empNumb: data[i].empNumb
+            }, `${data[i].empName}.pdf`)
+          }
         })
       }).catch(() => {
         this.$message({
@@ -1632,67 +2247,90 @@
         })
       })
     },
+    // dic列表转为数组
+    dicListToArr(dicList) {
+      var arr = []
+      for (var i = 0; i < dicList.length; i++) {
+        var dic = dicList[i]
+        arr.push(dic.dicItemCode)
+      }
+      return arr
+    },
     selectAllSex(val) {
       if (val) {
-        this.queryParams.sex = ['1', '2']
+        this.queryParams.sex = this.dicListToArr(this.sexOptions)
       } else {
         this.queryParams.sex = []
       }
     },
     selectAllEducation(val) {
       if (val) {
-        this.queryParams.education = ['91', '81', '71', '61', '42', '41', '31', '21', '11', '10']
+        this.queryParams.education = this.dicListToArr(this.educationOptions)
       } else {
         this.queryParams.education = []
       }
     },
     selectAllPolitics(val) {
       if (val) {
-        this.queryParams.politics = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13']
+        this.queryParams.politics = this.dicListToArr(this.statusOptions)
       } else {
         this.queryParams.politics = []
       }
     },
     selectAllAgeStr(val) {
       if (val) {
-        this.queryParams.ageStr = ['18-29', '30-39', '40-49', '50-59', '60-69', '69-999']
+        this.queryParams.ageStr = this.dicListToArr(this.ageStrOptions)
       } else {
         this.queryParams.ageStr = []
       }
     },
     selectAllArchivesStatus(val) {
       if (val) {
-        this.queryParams.archivesStatus = ['0', '1']
+        this.queryParams.archivesStatus = this.dicListToArr(this.archivesStatusOptions)
       } else {
         this.queryParams.archivesStatus = []
       }
     },
     selectAllInsuranceType(val) {
       if (val) {
-        this.queryParams.insuranceType = ['1', '2', '3', '4', '5']
+        this.queryParams.insuranceType = this.dicListToArr(this.insuranceTypeOptions)
       } else {
         this.queryParams.insuranceType = []
       }
     },
-    selectAllEmpStatus(val) {
-      if (val) {
-        this.queryParams.empStatus = ['0', '1', '2', '3']
-      } else {
-        this.queryParams.empStatus = []
-      }
-    },
     selectAllEmpCardStatus(val) {
       if (val) {
-        this.queryParams.empCardStatus = ['0', '1']
+        this.queryParams.empCardStatus = this.dicListToArr(this.empCardStatusOptions)
       } else {
         this.queryParams.empCardStatus = []
       }
     },
     selectAllHandbookStatus(val) {
       if (val) {
-        this.queryParams.handbookStatus = ['0', '1']
+        this.queryParams.handbookStatus = this.dicListToArr(this.handbookStatusOptions)
       } else {
         this.queryParams.handbookStatus = []
+      }
+    },
+    selectAllEmpType(val) {
+      if (val) {
+        this.queryParams.empType = this.dicListToArr(this.empTypeOptions)
+      } else {
+        this.queryParams.empType = []
+      }
+    },
+    selectAllEntryType(val) {
+      if (val) {
+        this.queryParams.entryType = [20, 21, 22]
+      } else {
+        this.queryParams.entryType = []
+      }
+    },
+    selectAllCertificateList(val) {
+      if (val) {
+        this.queryParams.certificateList = this.dicListToArr(this.certificateListOptions)
+      } else {
+        this.queryParams.certificateList = []
       }
     },
     headers() {
@@ -1704,33 +2342,185 @@
       } else {
         return null
       }
+    },
+    getDateString() {
+      return dateToString(new Date())
+    },
+    submitEmpInfo(continueAdd = false) {
+      if (this.isAdd) {
+        this.$post('hr/empBaseInfo/addInEmp', { ...this.empBaseInfoForm }).then((r) => {
+          this.$message({
+            message: this.$t('tips.addSuccess'),
+            type: 'success'
+          })
+          // 刷新列表
+          this.fetch({
+            ...this.queryParams,
+            ...this.sort
+          })
+          // 清空表单
+          this.cleanEmpBase()
+          // 如果不是继续新增,则关闭对话框
+          if (!continueAdd) {
+            this.showXzyg()
+          }
+          // 处理员工已存在的情况
+          if (r.data != null) {
+            if (r.data.data.empStatus === '0') {
+              this.$confirm('该员工已存在,是否修改?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+              }).then(() => {
+                this.editEmpBase(r.data.data)
+              })
+            } else {
+              let tempName
+              switch (r.data.data.dimissionType) {
+                case '1':
+                  tempName = '合同期满'
+                  break
+                case '2':
+                  tempName = '公司劝退'
+                  break
+                case '3':
+                  tempName = '公司辞退'
+                  break
+                case '4':
+                  tempName = '自动离职'
+                  break
+                case '5':
+                  tempName = '试用期内'
+                  break
+                case '6':
+                  tempName = '正常离职'
+                  break
+              }
+              var msg = '该员工已存在,' + tempName + '状态!\n\r'
+              msg += r.data.data.remark + '\n\r'
+              msg += '由于' + r.data.data.empName + '已离职,是否重新打开档案?'
+              this.$confirm(msg, '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+              }).then(() => {
+                this.openArchivesForm = {
+                  empId: r.data.data.empId,
+                  empName: r.data.data.empName,
+                  certificateNumb: r.data.data.certificateNumb,
+                  openType: 21,
+                  openDate: this.getDateString(),
+                  remark: ''
+                }
+                this.dialogShowDkda = true
+              })
+            }
+          }
+        })
+      } else {
+        this.$put('hr/empBaseInfo', { ...this.empBaseInfoForm }).then(() => {
+          this.$message({
+            message: this.$t('tips.updateSuccess'),
+            type: 'success'
+          })
+          this.$emit('success')
+          this.cleanEmpBase()
+          this.fetch({
+            ...this.queryParams,
+            ...this.sort
+          })
+          this.showXzyg()
+        })
+      }
+    },
+    changeSort(val) {
+      this.sort.field = val.prop
+      this.sort.order = val.order
+      this.search()
+    },
+    showDkda(operate, formName) {
+      switch (operate) {
+        // case 0:
+        //   var selection = this.$refs.multipleTable.store.states.selection
+        //   if (selection.length === 1) {
+        //     var id = selection[0].empId
+        //     var name = selection[0].empName
+        //     var number = selection[0].certificateNumb
+        //     const nowDate = new Date()
+        //     const year = nowDate.getFullYear()
+        //     const month = nowDate.getMonth() + 1
+        //     const day = nowDate.getDate()
+        //     this.baseicInformationForm = {
+        //       empId: id,
+        //       empName: name,
+        //       certificateNumb: number,
+        //       openType: 2,
+        //       openDate: year + '-' + month + '-' + day,
+        //       remark: ''
+        //     }
+        //     this.dialogShowDkda = true
+        //   } else {
+        //     this.$message({
+        //       message: '请选中一个要打开档案的人员',
+        //       type: 'error'
+        //     })
+        //   }
+        //   break
+        case 1:
+          this.dialogShowDkda = false
+          break
+        case 2:
+          this.$refs[formName].validate((valid) => {
+            if (valid) {
+              this.$post('hr/empOpenArchives', { ...this.openArchivesForm }).then(() => {
+                this.dialogShowDkda = false
+                this.$message({
+                  message: this.$t('员工档案打开成功'),
+                  type: 'success'
+                })
+                this.fetch({
+                  ...this.queryParams,
+                  ...this.sort
+                })
+              })
+            }
+          })
+          break
+      }
     }
   }
 }
 </script>
 <style lang="scss">
-
-.fj-checkbox{
-  .el-checkbox__input.is-checked .el-checkbox__inner {
-      border-color: #a32c30;;
-      background: #a32c30;;
+.zzyg-table {
+  .el-table th, .el-table td {
+    padding: 7px 0;
   }
+}
+
+.fj-checkbox {
+  .el-checkbox__input.is-checked .el-checkbox__inner {
+    border-color: #a32c30;;
+    background: #a32c30;;
+  }
+
   .el-checkbox__label {
     color: #000 !important;
   }
 }
 </style>
 <style lang="scss" scoped>
-  .baseinfo .el-container{
-      .el-aside {
-      background-color: #fff;
-    }
-
-    .el-main {
-      background-color: #fff;
-    }
-
+.baseinfo .el-container {
+  .el-aside {
+    background-color: #fff;
   }
+
+  .el-main {
+    background-color: #fff;
+  }
+
+}
+
 .el-main {
   height: 600px;
 }
@@ -1754,25 +2544,29 @@
 }
 
 .searchTable {
-	margin-top: 10px;
-	border-collapse: collapse;
-	width: 100%;
+  margin-top: 10px;
+  border-collapse: collapse;
+  width: 100%;
+
   tr {
     border-bottom: 1px dashed #d9dadb;
   }
+
   .td {
-	width: 90px;
-	text-align: right;
+    width: 90px;
+    text-align: right;
   }
+
   .td-group {
-	padding-left: 20px;
+    padding-left: 20px;
   }
 }
+
 .searchTable td,
 .searchTable th {
-	color: #000;
-	height: 50px;
-	background-color: #fff;
+  color: #000;
+  height: 50px;
+  background-color: #fff;
 }
 
 #ygxq table {
@@ -1819,14 +2613,26 @@
 
 #dcygTable {
   border-collapse: collapse;
+
+  tr {
+    width: 100%;
+    border-bottom: 1px dashed #ccc;
+
+    > td:nth-child(even) {
+      width: 100px;
+      text-align: left;
+    }
+  }
+
 }
 
 #dcygTable td {
-  width: 130px;
+  width: 160px;
   text-align: center;
-  border: 1px solid darkgray;
-  height: 30px;
-  font-size:15px;
+  height: 35px;
+  line-height: 35px;
+  font-size: 15px;
+  font-weight: 400;
 }
 
 .search-btn {
@@ -1842,6 +2648,7 @@
   cursor: pointer;
   vertical-align: middle;
 }
+
 .sup-search-btn {
   display: inline-block;
   width: 5.2vw;
@@ -1855,4 +2662,111 @@
   cursor: pointer;
   vertical-align: middle;
 }
+
+// 头像包装器
+.avatar-wrapper {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin-bottom: 10px;
+
+  .avatar {
+    width: 150px;
+    height: 150px;
+    border-radius: 4px;
+    cursor: pointer;
+    object-fit: cover;
+    border: 1px dashed #d9d9d9;
+
+    &:hover {
+      border-color: #409eff;
+    }
+  }
+
+  .avatar-uploader-placeholder {
+    width: 150px;
+    height: 150px;
+    border: 1px dashed #d9d9d9;
+    border-radius: 4px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    background-color: #fafafa;
+
+    &:hover {
+      border-color: #409eff;
+      background-color: #f0f9ff;
+    }
+
+    .avatar-uploader-icon {
+      font-size: 28px;
+      color: #8c939d;
+      line-height: 1;
+      margin-bottom: 8px;
+    }
+
+    .upload-tip {
+      font-size: 12px;
+      color: #8c939d;
+    }
+  }
+}
+
+// 上传方式选择容器
+.upload-choice-container {
+  display: flex;
+  justify-content: space-around;
+  padding: 20px 0;
+
+  .upload-choice-item {
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    width: 120px;
+    height: 120px;
+    border: 2px dashed #d9d9d9;
+    border-radius: 8px;
+    cursor: pointer;
+    transition: all 0.3s;
+
+    &:hover {
+      border-color: #409eff;
+      background-color: #f5f7fa;
+    }
+
+    i {
+      font-size: 40px;
+      color: #409eff;
+      margin-bottom: 10px;
+    }
+
+    span {
+      font-size: 14px;
+      color: #606266;
+    }
+  }
+}
+
+// 摄像头容器
+.camera-container {
+  text-align: center;
+
+  .camera-video {
+    width: 100%;
+    max-width: 600px;
+    height: auto;
+    border-radius: 4px;
+    background: #000;
+  }
+
+  .captured-image {
+    width: 100%;
+    max-width: 600px;
+    height: auto;
+    border-radius: 4px;
+  }
+}
 </style>

--
Gitblit v1.8.0