瀏覽代碼

task-7012 人员档案、个人信息维护:字段调整

cyy 12 小時之前
父節點
當前提交
c73ed7f5e7

+ 24 - 5
src/views/component/personnelFile/components/gzjlTag.vue

@@ -3,6 +3,7 @@
     <div class="titleAll">
       <el-divider direction="vertical" />
       <span>工作经历</span>
+      <span class="title-hint">详细填写所有工作经历</span>
     </div>
     <div class="hand-btn" :style="judgeTag() ? 'height:10px;' : 'height:5.5%;'">
       <el-button
@@ -43,7 +44,10 @@
       >
         <el-table-column type="selection" min-width="2%" />
         <el-table-column type="index" label="序号" min-width="5%" />
-        <el-table-column :label="startEnd ? '开始时间': '入职时间'" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>{{ startEnd ? '开始时间' : '入职时间' }}
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -129,7 +133,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="单位名称" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>单位名称
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -537,18 +544,26 @@ export default {
   font-size: 12px;
   color: #2f2f36;
   .titleAll {
+    display: flex;
+    align-items: center;
     ::v-deep .el-divider--vertical {
       width: 4px;
       height: 1.4em;
       background-color: #86c3c7;
       border-radius: 2px;
-      margin-left: 0;
-      margin-right: 15px;
+      margin: 0 15px 0 0;
     }
     span {
       font-size: 15px;
       font-weight: 700;
-      vertical-align: text-top;
+      line-height: 22px;
+    }
+    .title-hint {
+      margin-left: 12px;
+      font-size: 12px;
+      font-weight: 400;
+      line-height: 22px;
+      color: #e6a23c;
     }
   }
   .hand-btn {
@@ -610,6 +625,10 @@ export default {
       overflow: hidden; /* 隐藏超出容器的文本 */
       text-overflow: ellipsis; /* 显示省略号 */
     }
+    .req {
+      color: #f56c6c;
+      margin-right: 2px;
+    }
   }
 }
 </style>

+ 45 - 20
src/views/component/personnelFile/components/jbqkTag.vue

@@ -13,7 +13,9 @@
     >
       <div class="rowSty">
         <div class="colSty">
-          <div class="grid-content bg-purple">建档日期</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>建档日期
+          </div>
         </div>
         <div class="colSty" :span="6">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -39,7 +41,9 @@
           </div>
         </div>
         <div class="colSty">
-          <div class="grid-content bg-purple">出生日期</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>出生日期
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -87,7 +91,9 @@
           </div> -->
         </div>
         <div class="colSty">
-          <div class="grid-content bg-purple">最高学历学位</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>最高学历
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -138,7 +144,9 @@
           </div>
         </div>
         <div class="colSty">
-          <div class="grid-content bg-purple">专业</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>专业
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -163,7 +171,9 @@
       </div>
       <div class="rowSty">
         <div class="colSty">
-          <div class="grid-content bg-purple">参加工作时间</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>参加工作时间
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -187,7 +197,9 @@
           </div>
         </div>
         <div class="colSty">
-          <div class="grid-content bg-purple">本单位入职日期</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>入职时间
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -204,7 +216,7 @@
               <el-date-picker
                 v-model="nowData.ruZhiShiJian"
                 type="date"
-                placeholder="本单位入职日期"
+                placeholder="入职时间"
                 value-format="yyyy-MM-dd"
               />
             </el-form-item>
@@ -213,7 +225,7 @@
       </div>
       <div class="rowSty">
         <div class="colSty">
-          <div class="grid-content bg-purple">本岗位任职时间</div>
+          <div class="grid-content bg-purple">现聘职称任职时间</div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -230,7 +242,7 @@
               <el-date-picker
                 v-model="nowData.renZhiShiJian"
                 type="date"
-                placeholder="本岗位任职时间"
+                placeholder="现聘职称任职时间"
                 value-format="yyyy-MM-dd"
               />
             </el-form-item>
@@ -262,7 +274,7 @@
       </div>
       <div class="rowSty">
         <div class="colSty">
-          <div class="grid-content bg-purple">职称等级</div>
+          <div class="grid-content bg-purple">现聘职称等级</div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -285,7 +297,9 @@
             </el-form-item>
           </div>
         </div>
-        <div class="colSty"><div class="grid-content bg-purple">职称</div></div>
+        <div class="colSty">
+          <div class="grid-content bg-purple">现聘职称</div>
+        </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
             <div>
@@ -307,7 +321,9 @@
       </div>
       <div class="rowSty">
         <div class="colSty">
-          <div class="grid-content bg-purple">身份证号</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>身份证号
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -330,7 +346,9 @@
           </div>
         </div>
         <div class="colSty">
-          <div class="grid-content bg-purple">人员类型</div>
+          <div class="grid-content bg-purple">
+            <span class="req">*</span>人员类型
+          </div>
         </div>
         <div class="colSty">
           <div v-if="judgeTag()" class="grid-content bg-purple-light">
@@ -362,7 +380,7 @@
       </div>
       <div class="rowSty">
         <div class="colSty">
-          <div class="grid-content bg-purple">保密协议</div>
+          <div class="grid-content bg-purple">承诺函</div>
         </div>
         <div class="colSty">
           <div class="grid-content bg-purple-light">
@@ -414,7 +432,7 @@
           </div>
         </div>
         <div class="colSty">
-          <div class="grid-content bg-purple">承诺函</div>
+          <div class="grid-content bg-purple">保密协议</div>
         </div>
         <div class="colSty">
           <div class="grid-content bg-purple-light">
@@ -494,20 +512,23 @@ export default {
       isWatch: false,
       rules: {
         jianDangRiQi: [{ validator: option.checkTime, trigger: 'blur' }],
-        chuShengRiQi: [{ validator: option.checkTimeNull, trigger: 'blur' }],
+        chuShengRiQi: [{ validator: option.checkTime, trigger: 'blur' }],
         nianLing: [{ validator: option.checkNianLingNull, trigger: 'change' }],
+        zuiGaoXueLiX: [{ validator: option.checkRequired, trigger: 'change' }],
         yuanBiYeYuanXi: [
           { validator: option.checkLengthNull, trigger: 'blur' }
         ],
-        ruZhiShiJian: [{ validator: option.checkTimeNull, trigger: 'blur' }],
-        canJiaGongZuo: [{ validator: option.checkTimeNull, trigger: 'blur' }],
+        xianCongShiZhua: [{ validator: option.checkLength, trigger: 'blur' }],
+        ruZhiShiJian: [{ validator: option.checkTime, trigger: 'blur' }],
+        canJiaGongZuo: [{ validator: option.checkTime, trigger: 'blur' }],
         renZhiShiJian: [{ validator: option.checkTimeNull, trigger: 'blur' }],
         zhiCheng: [{ validator: option.checkLengthNull, trigger: 'blur' }],
         qianZiTuWen: [
           { validator: option.attachmentsNumOne, trigger: 'change' }
         ],
-        shenFenZhengHao: [
-          { validator: option.checkLengthNull, trigger: 'blur' }
+        shenFenZhengHao: [{ validator: option.checkLength, trigger: 'blur' }],
+        renYuanLeiXing: [
+          { validator: option.checkRequired, trigger: 'change' }
         ],
         baoMiXieYi: [{ validator: option.attachmentsNum, trigger: 'change' }],
         chengNuoHan: [{ validator: option.attachmentsNum, trigger: 'change' }],
@@ -752,6 +773,10 @@ export default {
     }
     .bg-purple {
       background: #f8f8f8;
+      .req {
+        color: #f56c6c;
+        margin-right: 2px;
+      }
     }
     .bg-purple-light {
       border-left: 1px solid #f2f2f2;

+ 105 - 12
src/views/component/personnelFile/components/jyjlTag.vue

@@ -3,6 +3,7 @@
     <div class="titleAll">
       <el-divider direction="vertical" />
       <span>教育经历</span>
+      <span class="title-hint">从大学开始填写,正序填写</span>
     </div>
     <div class="hand-btn" :style="judgeTag() ? 'height:10px;' : 'height:5.5%;'">
       <el-button
@@ -43,7 +44,10 @@
       >
         <el-table-column type="selection" min-width="2%" />
         <el-table-column type="index" label="序号" min-width="5%" />
-        <el-table-column label="开始时间" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>开始时间
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -86,7 +90,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="结束时间" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>结束时间
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -129,7 +136,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="学校" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>学校
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -170,7 +180,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="专业" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>专业
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -199,7 +212,7 @@
                   (10 * (currentPage - 1) + scope.$index) +
                   '.zhuanYe'
                 "
-                :rules="rules.optional"
+                :rules="rules.zhuanYe"
               >
                 <el-input
                   v-model="scope.row.zhuanYe"
@@ -211,7 +224,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="学历学位" min-width="15%">
+        <el-table-column min-width="12%">
+          <template slot="header">
+            <span class="req">*</span>学历
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -231,7 +247,6 @@
                   }}
                 </div>
               </el-tooltip>
-              <!-- <div>{{ scope.row.hasOwnProperty("xueLiXueWei") > 0 ? scope.row.xueLiXueWei:'/' }}</div> -->
             </div>
             <div v-else class="grid-content">
               <el-form-item
@@ -240,7 +255,7 @@
                   (10 * (currentPage - 1) + scope.$index) +
                   '.xueLiXueWei'
                 "
-                :rules="rules.optional"
+                :rules="rules.xueLi"
               >
                 <el-input
                   v-model="scope.row.xueLiXueWei"
@@ -252,7 +267,47 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="附件" min-width="15%">
+        <el-table-column label="学位" min-width="12%">
+          <template slot-scope="scope">
+            <div v-if="judgeTag()">
+              <el-tooltip
+                class="item"
+                effect="dark"
+                placement="top"
+                :disabled="!isShowTooltip"
+              >
+                <div slot="content" style="max-width: 200px">
+                  <div v-html="scope.row.xueWei" />
+                </div>
+                <div class="ellipsis" @mouseover="inputOnMouseOver($event)">
+                  {{
+                    scope.row.hasOwnProperty('xueWei') && scope.row.xueWei
+                      ? scope.row.xueWei
+                      : '/'
+                  }}
+                </div>
+              </el-tooltip>
+            </div>
+            <div v-else class="grid-content">
+              <el-form-item
+                :prop="
+                  'nowData.' +
+                  (10 * (currentPage - 1) + scope.$index) +
+                  '.xueWei'
+                "
+                :rules="rules.optional"
+              >
+                <el-input
+                  v-model="scope.row.xueWei"
+                  type="text"
+                  placeholder="请输入"
+                  show-word-limit
+                />
+              </el-form-item>
+            </div>
+          </template>
+        </el-table-column>
+        <el-table-column label="学历证书" min-width="15%">
           <template slot-scope="scope">
             <div class="grid-content bg-purple-light">
               <el-form-item
@@ -276,6 +331,30 @@
             </div>
           </template>
         </el-table-column>
+        <el-table-column label="学位证书" min-width="15%">
+          <template slot-scope="scope">
+            <div class="grid-content bg-purple-light">
+              <el-form-item
+                :prop="
+                  'nowData.' +
+                  (10 * (currentPage - 1) + scope.$index) +
+                  '.xueWeiZhengShu'
+                "
+                :rules="rules.attachmentsNum"
+              >
+                <ibps-attachment
+                  v-model="scope.row.xueWeiZhengShu"
+                  :download="true"
+                  multiple
+                  accept="*"
+                  :readonly="judgeTag()"
+                  style="width: 100%"
+                  limlt="5"
+                />
+              </el-form-item>
+            </div>
+          </template>
+        </el-table-column>
         <!-- <el-table-column
                     v-if="!judgeTag()"
                     fixed="right"
@@ -362,6 +441,8 @@ export default {
         kaiShiShiJian: [{ validator: option.checkTime, trigger: 'change' }],
         jieShuShiJian: [{ validator: checkTimeJS, trigger: 'change' }],
         school: [{ validator: option.checkLength, trigger: 'blur' }],
+        zhuanYe: [{ validator: option.checkLength, trigger: 'blur' }],
+        xueLi: [{ validator: option.checkLength, trigger: 'blur' }],
         optional: [{ validator: option.optional, trigger: 'blur' }],
         attachmentsNum: [
           { validator: option.attachmentsNum, trigger: 'change' }
@@ -481,18 +562,26 @@ export default {
   font-size: 12px;
   color: #2f2f36;
   .titleAll {
+    display: flex;
+    align-items: center;
     ::v-deep .el-divider--vertical {
       width: 4px;
       height: 1.4em;
       background-color: #86c3c7;
       border-radius: 2px;
-      margin-left: 0;
-      margin-right: 15px;
+      margin: 0 15px 0 0;
     }
     span {
       font-size: 15px;
       font-weight: 700;
-      vertical-align: text-top;
+      line-height: 22px;
+    }
+    .title-hint {
+      margin-left: 12px;
+      font-size: 12px;
+      font-weight: 400;
+      line-height: 22px;
+      color: #e6a23c;
     }
   }
   .hand-btn {
@@ -554,6 +643,10 @@ export default {
       overflow: hidden; /* 隐藏超出容器的文本 */
       text-overflow: ellipsis; /* 显示省略号 */
     }
+    .req {
+      color: #f56c6c;
+      margin-right: 2px;
+    }
   }
 }
 </style>

+ 34 - 10
src/views/component/personnelFile/components/zsbTag.vue

@@ -43,7 +43,10 @@
       >
         <el-table-column type="selection" min-width="2%" />
         <el-table-column type="index" label="序号" min-width="5%" />
-        <el-table-column label="证书名称" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>证书名称
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -84,7 +87,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="证件号" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>证件号
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -166,7 +172,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="发证日期" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>发证日期
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -209,7 +218,10 @@
             </div>
           </template>
         </el-table-column>
-        <el-table-column label="档案保存" min-width="15%">
+        <el-table-column min-width="15%">
+          <template slot="header">
+            <span class="req">*</span>档案保存
+          </template>
           <template slot-scope="scope">
             <div v-if="judgeTag()">
               <el-tooltip
@@ -241,15 +253,14 @@
                 :rules="rules.school"
               >
                 <el-radio-group v-model="scope.row.dangAnBaoCun">
-                  <el-radio label="复印件">复印件</el-radio>
-                  <el-radio label="原件">原件</el-radio>
+                  <el-radio label="原件扫描">原件扫描</el-radio>
                 </el-radio-group>
               </el-form-item>
             </div>
           </template>
         </el-table-column>
 
-        <el-table-column label="获奖证书" min-width="15%">
+        <el-table-column label="证书" min-width="15%">
           <template slot-scope="scope">
             <div class="grid-content bg-purple-light">
               <el-form-item
@@ -373,7 +384,10 @@ export default {
     planeData: {
       handler: function (val, oldVal) {
         // eslint-disable-next-line no-undef
-        this.nowData = structuredClone(val)
+        this.nowData = structuredClone(val).map((row) => ({
+          ...row,
+          dangAnBaoCun: '原件扫描'
+        }))
         this.nowDataObj = { nowData: [...this.nowData] }
       },
       deep: true,
@@ -383,7 +397,10 @@ export default {
       handler: function (val, oldVal) {
         if (val === 'exitEdit') {
           // eslint-disable-next-line no-undef
-          this.nowData = structuredClone(this.planeData)
+          this.nowData = structuredClone(this.planeData).map((row) => ({
+            ...row,
+            dangAnBaoCun: '原件扫描'
+          }))
           this.nowDataObj = { nowData: [...this.nowData] }
         } else if (
           val === 'save' ||
@@ -440,7 +457,10 @@ export default {
       if (this.nowData.length % 10 === 0) {
         this.currentPage = this.nowData.length / 10 + 1
       }
-      const mid = { uuid: this.$common.generateUUID() }
+      const mid = {
+        uuid: this.$common.generateUUID(),
+        dangAnBaoCun: '原件扫描'
+      }
       this.nowData.push(mid)
       this.nowDataObj = { nowData: [...this.nowData] }
     },
@@ -551,6 +571,10 @@ export default {
       overflow: hidden; /* 隐藏超出容器的文本 */
       text-overflow: ellipsis; /* 显示省略号 */
     }
+    .req {
+      color: #f56c6c;
+      margin-right: 2px;
+    }
   }
 }
 </style>

+ 12 - 3
src/views/component/personnelFile/constants/draftSql.js

@@ -82,6 +82,8 @@ export const draftSnakeToCamelMap = {
   xue_xiao_: 'xueXiao',
   zhuan_ye_: 'zhuanYe',
   xue_li_xue_wei_: 'xueLiXueWei',
+  xue_wei_: 'xueWei',
+  xue_wei_zheng_shu: 'xueWeiZhengShu',
   li_zhi_shi_jian_: 'liZhiShiJian',
   dan_wei_ming_chen: 'danWeiMingCheng',
   dan_wei_ming_cheng_: 'danWeiMingCheng',
@@ -213,12 +215,17 @@ export function normalizeDraftQueryRow(row = {}) {
     if (
       result[snakeKey] !== undefined &&
       result[snakeKey] !== null &&
-      (result[camelKey] === undefined || result[camelKey] === null || result[camelKey] === '')
+      (result[camelKey] === undefined ||
+        result[camelKey] === null ||
+        result[camelKey] === '')
     ) {
       result[camelKey] = result[snakeKey]
     }
   })
-  if (result.id_ !== undefined && (result.id === undefined || result.id === '')) {
+  if (
+    result.id_ !== undefined &&
+    (result.id === undefined || result.id === '')
+  ) {
     result.id = result.id_
   }
   if (
@@ -339,7 +346,9 @@ const draftJyjlFields = [
   'xueXiao',
   'zhuanYe',
   'xueLiXueWei',
-  'fuJian'
+  'xueWei',
+  'fuJian',
+  'xueWeiZhengShu'
 ]
 
 const draftGzjlFields = [

+ 19 - 10
src/views/component/personnelFile/constants/option.js

@@ -61,6 +61,12 @@ export const optional = (rule, value, callback) => {
     callback()
   }
 }
+export const checkRequired = (rule, value, callback) => {
+  if (value === undefined || value === null || String(value).trim() === '') {
+    return callback(new Error('请填写内容'))
+  }
+  callback()
+}
 export const attachmentsNum = (rule, value, callback) => {
   if (!value) {
     callback()
@@ -105,21 +111,21 @@ export const fieldLabelMaps = {
     jianDangRiQi: '建档日期',
     chuShengRiQi: '出生日期',
     nianLing: '年龄',
-    zuiGaoXueLiX: '最高学历学位',
+    zuiGaoXueLiX: '最高学历',
     yuanBiYeYuanXi: '毕业院校',
     xianCongShiZhua: '专业',
     canJiaGongZuo: '参加工作时间',
-    ruZhiShiJian: '本单位入职日期',
-    renZhiShiJian: '本岗位任职时间',
+    ruZhiShiJian: '入职时间',
+    renZhiShiJian: '现聘职称任职时间',
     xingZhengZhiWu: '职务',
-    zhiChengDengJi: '职称等级',
-    zhiCheng: '职称',
+    zhiChengDengJi: '现聘职称等级',
+    zhiCheng: '现聘职称',
     shenFenZhengHao: '身份证号',
     renYuanLeiXing: '人员类型',
-    baoMiXieYi: '保密协议',
+    baoMiXieYi: '承诺函',
     qianZiTuWen: '签字图文',
     sheBao: '劳动合同或社保证明',
-    chengNuoHan: '承诺函',
+    chengNuoHan: '保密协议',
     fuJian: '附件'
   },
   jyjl: {
@@ -127,8 +133,10 @@ export const fieldLabelMaps = {
     jieShuShiJian: '结束时间',
     xueXiao: '学校',
     zhuanYe: '专业',
-    xueLiXueWei: '学历学位',
-    fuJian: '附件'
+    xueLiXueWei: '学历',
+    xueWei: '学位',
+    fuJian: '学历证书',
+    xueWeiZhengShu: '学位证书'
   },
   gzjl: {
     ruZhiShiJian: '入职时间',
@@ -145,7 +153,7 @@ export const fieldLabelMaps = {
     faZhengDanWei: '发证单位',
     faZhengShiJian: '发证日期',
     dangAnBaoCun: '档案保存',
-    huoJiangZhengS: '获奖证书'
+    huoJiangZhengS: '证书'
   }
 }
 
@@ -182,6 +190,7 @@ export default {
   checkTime,
   checkLength,
   optional,
+  checkRequired,
   attachmentsNum,
   checkNianLing,
   attachmentsNumOne,