From 131ee183fff079793a2b9a8e3ff63cf3104132c5 Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期二, 10 三月 2026 12:47:38 +0800
Subject: [PATCH] feat(remind): 添加员工转正和退休提醒功能

---
 src/views/remind/retirement.vue |  564 +++++++++++++++++++++++++++++
 vue.config.js                   |   42 +-
 src/views/remind/probation.vue  |  519 +++++++++++++++++++++++++++
 3 files changed, 1,104 insertions(+), 21 deletions(-)

diff --git a/src/views/remind/probation.vue b/src/views/remind/probation.vue
new file mode 100644
index 0000000..c3e495d
--- /dev/null
+++ b/src/views/remind/probation.vue
@@ -0,0 +1,519 @@
+<template>
+  <div style="background-color: #fff;height: 100%;">
+    <el-container>
+      <el-header :height="headerHeight">
+        <el-row style="margin-bottom: 10px;">
+          <el-col :span="15">
+            <h3 class="bu-tian-jia-title">员工转正提醒</h3>
+          </el-col>
+        </el-row>
+      </el-header>
+      <el-main style="height: 85%;">
+        <el-row style="margin: 10px 0 10px 0;">
+          <el-col :span="24">
+            <el-button type="primary" class="hr-but-all" @click="showDcyg(0)">导出EXCEL</el-button>
+          </el-col>
+        </el-row>
+        <el-table
+          ref="multipleTable"
+          :data="probationList"
+          :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 show-overflow-tooltip fixed="left" label="操作" width="150">
+            <template v-slot="scope">
+              <span
+                style="color: #a00515;display: inline-block;width: 30%;cursor: pointer"
+                @click="goOn(scope.row)"
+              >转正</span>
+              <span
+                style="color: #a00515;display: inline-block;width: 30%;cursor: pointer"
+                @click="goDismiss(scope.row)"
+              >解聘</span>
+              <span
+                style="color: #a00515;display: inline-block;width: 30%;cursor: pointer"
+                @click="goDelay(scope.row)"
+              >延期</span>
+            </template>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip prop="empNumb" label="员工编号" width="120" />
+          <el-table-column show-overflow-tooltip prop="allDeptName" label="部门(护卫点)" />
+          <el-table-column show-overflow-tooltip prop="jobName" label="岗位" width="120" />
+          <el-table-column show-overflow-tooltip prop="empName" label="姓名" width="120" />
+          <el-table-column show-overflow-tooltip prop="certificateNumb" label="身份证号码" width="160" />
+          <el-table-column show-overflow-tooltip prop="birthdate" label="出生日期" width="150" />
+          <el-table-column show-overflow-tooltip prop="insuranceTypeName" label="社保档位" width="180" />
+          <el-table-column show-overflow-tooltip prop="socialNumb" label="社保电脑号" width="180" />
+          <el-table-column show-overflow-tooltip prop="entryDate" label="入职日期" width="150" />
+          <el-table-column show-overflow-tooltip prop="probationDate" label="转正日期" width="120" />
+          <el-table-column show-overflow-tooltip prop="probationStatusName" label="转正状态" width="120" />
+        </el-table>
+        <pagination
+          v-show="total>0"
+          style="text-align: right;width: 98%;"
+          :total="total"
+          :page.sync="pagination.num"
+          :limit.sync="pagination.size"
+          @pagination="search"
+        />
+      </el-main>
+    </el-container>
+    <el-dialog :title="dialogTitle" :visible.sync="dialogShowContract" width="50%">
+      <el-form
+        ref="probationForm"
+        :model="probationForm"
+        :rules="contractRules"
+        label-position="right"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="姓名" prop="empName">
+              <el-input v-model="probationForm.empName" />
+            </el-form-item>
+            <el-form-item label="身份证号码" prop="certificateNumb">
+              <el-input
+                v-model="probationForm.certificateNumb"
+              />
+            </el-form-item>
+            <el-form-item label="性别" this-emp-base-info-form="sex">
+              <el-select v-model="probationForm.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="dynamicDateLabel" prop="probationDate">
+              <el-date-picker
+                v-model="probationForm.probationDate"
+                value-format="yyyy-MM-dd"
+                type="date"
+                placeholder="选择日期"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="员工编号" prop="empNumb">
+              <el-input v-model="probationForm.empNumb" />
+            </el-form-item>
+            <el-form-item label="部门(护卫点)" prop="allDeptName">
+              <el-input v-model="probationForm.allDeptName" />
+            </el-form-item>
+            <el-form-item label="岗位" prop="jobName">
+              <el-input v-model="probationForm.jobName" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="putProbationInfo('probationForm')">保 存</el-button>
+        <el-button @click="dialogIsShow()">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import { dateDifference } from '@/utils/myUtil'
+
+export default {
+  components: {
+    Pagination
+  },
+  data() {
+    return {
+      dialog: {
+        isVisible: false,
+        title: '',
+        type: ''
+      },
+      sort: {},
+      // 总数量
+      total: 0,
+      // 查询参数
+      queryParams: {
+        baseKey: ''
+      },
+      // 分页参数
+      pagination: {
+        size: 15,
+        num: 1
+      },
+      headerHeight: '30px',
+      // 转正信息
+      probationList: [],
+      // 转正信息
+      probationForm: {
+        empId: '',
+        empNumb: '',
+        empName: '',
+        certificateNumb: '',
+        sex: '',
+        deptId: '',
+        deptName: '',
+        allDeptName: '',
+        jobName: '',
+        delFlag: '',
+        empStatus: 0,
+        entryDate: '',
+        probationDate: '',
+        probationStatus: ''
+      },
+      sexOptions: [],
+      contractStatusOptions: [],
+      dialogTitle: '正常转正',
+      dynamicDateLabel: '转正日期',
+      dialogShowContract: false,
+      contractRules: {
+        empName: [{ required: true, message: '请选择员工', trigger: 'change' }],
+        probationDate: [{ required: true, message: '请选择日期', trigger: 'change' }]
+      }
+    }
+  },
+  mounted() {
+    this.fetch()
+    this.getDicts('sex').then(response => {
+      this.sexOptions = response.data
+    })
+    this.getDicts('CONTRACTSTATUS').then(response => {
+      this.contractStatusOptions = response.data
+    })
+  },
+  methods: {
+    search() {
+      this.queryParams.baseKey = ''
+      this.fetch({
+        ...this.queryParams,
+        ...this.sort
+      })
+    },
+    fetch(params = {}) {
+      const that = this
+      params.pageSize = this.pagination.size
+      params.pageNum = this.pagination.num
+      params.delFlag = 0
+      params.empStatus = 0
+
+      this.$get('hr/empBaseInfo/probation/alert', {
+        ...params
+      }).then((r) => {
+        const data = r.data.data
+        that.total = data.total
+        that.probationList = data.rows
+      })
+    },
+    changeSort(val) {
+      this.sort.field = val.prop
+      this.sort.order = val.order
+      this.fetch()
+    },
+    // 正常(提前转正)转正
+    goOn(row) {
+      this.initContractData(row)
+      this.dialogTitle = '正常转正'
+      this.probationForm.probationStatus = '1'
+      this.dynamicDateLabel = '转正日期'
+      this.dialogShowContract = true
+    },
+    goDelay(row) {
+      this.initContractData(row)
+      this.dialogTitle = '延期转正'
+      this.probationForm.probationStatus = '3'
+      this.dynamicDateLabel = '延期日期'
+      this.dialogShowContract = true
+    },
+    goDismiss(row) {
+      this.initContractData(row)
+      this.dialogTitle = '试用解骋'
+      this.probationForm.probationStatus = '2'
+      this.dynamicDateLabel = '解聘日期'
+      this.dialogShowContract = true
+    },
+    dialogIsShow() {
+      this.dialogShowContract = false
+    },
+    // 不续签转正
+    discontinue(val) {
+      this.initContractData(val)
+      this.$post('hr/empContractInfo/remind/not', { ...this.probationForm }).then(() => {
+        this.buttonLoading = false
+        this.$message({
+          message: this.$t('tips.updateSuccess'),
+          type: 'success'
+        })
+        this.cleanContractData()
+        this.fetch()
+      })
+    },
+    // 初始化续签转正信息
+    initContractData(val) {
+      this.cleanContractData()
+      this.probationForm.empId = val.empId
+      this.probationForm.empNumb = val.empNumb
+      this.probationForm.empName = val.empName
+      this.probationForm.certificateNumb = val.certificateNumb
+      this.probationForm.sex = val.sex
+      this.probationForm.deptId = val.deptId
+      this.probationForm.deptName = val.deptName
+      this.probationForm.allDeptName = val.allDeptName
+      this.probationForm.JobId = val.JobId
+      this.probationForm.jobName = val.jobName
+      this.probationForm.probationDate = val.probationDate
+      this.probationForm.entryDate = val.entryDate
+    },
+    // 清除续签转正信息
+    cleanContractData() {
+      this.probationForm.contractId = ''
+      this.probationForm.empId = ''
+      this.probationForm.empNumb = ''
+      this.probationForm.empName = ''
+      this.probationForm.certificateNumb = ''
+      this.probationForm.sex = ''
+      this.probationForm.deptId = ''
+      this.probationForm.deptName = ''
+      this.probationForm.allDeptName = ''
+      this.probationForm.JobId = ''
+      this.probationForm.jobName = ''
+      this.probationForm.contractStatus = ''
+      this.probationForm.beginDate = ''
+      this.probationForm.endDate = ''
+      this.probationForm.contractPeriod = 0
+      this.probationForm.remark = ''
+      this.probationForm.transactor = ''
+    },
+    // 验证转正签订日期
+    startDate(rule, value, callback) {
+      // 如果结束日期没选,cb
+      if (!this.probationForm.endDate) {
+        callback()
+      } else {
+        // 结束日期有,进行判断
+        if (this.compareDate(value, this.probationForm.endDate)) {
+          // 如果起始在结束之前
+          callback()
+        } else {
+          callback(new Error('开始日期不能在结束日期之后,请重新选择'))
+        }
+      }
+    },
+    // 验证转正结束日期
+    endDate(rule, value, callback) {
+      // 如果起始日期没选,cb
+      if (!this.probationForm.signingDate) {
+        callback()
+      } else {
+        // 起始日期有,进行判断
+        if (this.compareDate(this.probationForm.signingDate, value)) {
+          // 如果起始在结束之前
+          this.probationForm.contractPeriod = dateDifference(this.probationForm.signingDate, this.probationForm.endDate, 'o')
+          callback()
+        } else {
+          callback(new Error('结束日期不能在开始始日期之前,请重新选择'))
+        }
+      }
+    },
+    compareDate(start, end) {
+      return new Date(end).getTime() > new Date(start).getTime()
+    },
+    // 续签转正提交
+    putProbationInfo(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$post('hr/empBaseInfo/probation/change', { ...this.probationForm }).then(() => {
+            this.buttonLoading = false
+            this.$message({
+              message: this.$t('处理成功'),
+              type: 'success'
+            })
+
+            this.cleanContractData()
+            this.fetch()
+            this.dialogIsShow()
+          })
+        }
+      })
+    }
+  }
+}
+
+</script>
+<style lang="scss">
+.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;
+  }
+
+}
+
+.el-main {
+  height: 600px;
+}
+
+.el-autocomplete {
+  width: 100%;
+}
+
+.el-select {
+  width: 100%;
+}
+
+.el-aside {
+  padding: 20px;
+  background: #f3f5f8;
+  height: 600px;
+
+  .el-tree {
+    height: 100%;
+  }
+}
+
+.searchTable {
+  margin-top: 10px;
+  border-collapse: collapse;
+  width: 100%;
+
+  tr {
+    border-bottom: 1px dashed #d9dadb;
+  }
+
+  .td {
+    width: 90px;
+    text-align: right;
+  }
+
+  .td-group {
+    padding-left: 20px;
+  }
+}
+
+.searchTable td,
+.searchTable th {
+  color: #000;
+  height: 50px;
+  background-color: #fff;
+}
+
+#ygxq table {
+  border-collapse: collapse;
+  margin: 0 auto;
+  text-align: center;
+  width: 100%;
+  margin-top: 20px;
+}
+
+#ygxq table td,
+#ygxq table th {
+  border: 1px solid #DDDCDC;
+  color: #666;
+  height: 30px;
+}
+
+#ygxq table thead th {
+  background-color: #CCE8EB;
+  width: 100px;
+}
+
+#ygxq table tr:nth-child(odd) {
+  background: #fff;
+}
+
+#ygxq table tr:nth-child(even) {
+  background: #F5FAFA;
+}
+
+.tdTitle {
+  font-size: 14px;
+  font-weight: 700;
+  text-align: left;
+}
+
+.link_button {
+  color: #169BD5;
+}
+
+.del_button {
+  color: #D9001B;
+}
+
+#dcygTable {
+  border-collapse: collapse;
+
+  tr {
+    width: 100%;
+    border-bottom: 1px dashed #ccc;
+
+    > td:nth-child(even) {
+      width: 100px;
+      text-align: left;
+    }
+  }
+
+}
+
+#dcygTable td {
+  width: 160px;
+  text-align: center;
+  height: 35px;
+  line-height: 35px;
+  font-size: 15px;
+  font-weight: 400;
+}
+
+.search-btn {
+  display: inline-block;
+  width: 3.64vw;
+  height: 3.2vh;
+  line-height: 3.2vh;
+  text-align: center;
+  background-color: #a00515;
+  color: #fff;
+  margin-left: 1vw;
+  box-sizing: border-box;
+  cursor: pointer;
+  vertical-align: middle;
+}
+
+.sup-search-btn {
+  display: inline-block;
+  width: 5.2vw;
+  height: 3.2vh;
+  line-height: 3.2vh;
+  text-align: center;
+  margin-left: 1vw;
+  color: #a00515;
+  border: 1px solid #a00515;
+  box-sizing: border-box;
+  cursor: pointer;
+  vertical-align: middle;
+}
+</style>
diff --git a/src/views/remind/retirement.vue b/src/views/remind/retirement.vue
new file mode 100644
index 0000000..09f62a1
--- /dev/null
+++ b/src/views/remind/retirement.vue
@@ -0,0 +1,564 @@
+<template>
+  <div style="background-color: #fff;height: 100%;">
+    <el-container>
+      <el-header :height="headerHeight">
+        <el-row style="margin-bottom: 10px;">
+          <el-col :span="15">
+            <h3 class="bu-tian-jia-title">员工退休提醒</h3>
+          </el-col>
+        </el-row>
+      </el-header>
+      <el-main style="height: 85%;">
+        <el-row style="margin: 10px 0 10px 0;">
+          <el-col :span="24">
+            <el-button type="primary" class="hr-but-all" @click="showDcyg(0)">导出EXCEL</el-button>
+          </el-col>
+        </el-row>
+        <el-table
+          ref="multipleTable"
+          :data="contractList"
+          :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 show-overflow-tooltip fixed="left" label="操作" width="120">
+            <template v-slot="scope">
+              <span
+                style="color: #a00515;display: inline-block;width: 40%;cursor: pointer"
+                @click="goOn(scope.row)"
+              >返骋</span>
+              <span
+                style="color: #a00515;display: inline-block;width: 40%;cursor: pointer"
+                @click="goDismiss(scope.row)"
+              >解骋</span>
+            </template>
+          </el-table-column>
+          <el-table-column show-overflow-tooltip prop="empNumb" label="员工编号" width="120" />
+          <el-table-column show-overflow-tooltip prop="allDeptName" label="部门(护卫点)" />
+          <el-table-column show-overflow-tooltip prop="jobName" label="岗位" width="100" />
+          <el-table-column show-overflow-tooltip prop="empName" label="姓名" width="100" />
+          <el-table-column show-overflow-tooltip prop="certificateNumb" label="身份证号码" width="160" />
+          <el-table-column show-overflow-tooltip prop="birthdate" label="出生日期" width="120" />
+        </el-table>
+        <pagination
+          v-show="total>0"
+          style="text-align: right;width: 98%;"
+          :total="total"
+          :page.sync="pagination.num"
+          :limit.sync="pagination.size"
+          @pagination="search"
+        />
+      </el-main>
+    </el-container>
+    <el-dialog title="退休返骋合同信息" :visible.sync="dialogShowContract" width="50%">
+      <el-form
+        ref="contractForm"
+        :model="contractForm"
+        :rules="contractRules"
+        label-position="right"
+        label-width="120px"
+      >
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="姓名" prop="empName">
+              <el-input v-model="contractForm.empName" />
+            </el-form-item>
+            <el-form-item label="身份证号码" prop="certificateNumb">
+              <el-input
+                v-model="contractForm.certificateNumb"
+              />
+            </el-form-item>
+            <el-form-item label="性别" this-emp-base-info-form="sex">
+              <el-select v-model="contractForm.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="signingDate">
+              <el-date-picker
+                v-model="contractForm.signingDate"
+                value-format="yyyy-MM-dd"
+                type="date"
+                placeholder="选择日期"
+              />
+            </el-form-item>
+            <el-form-item label="合同状态" prop="contractStatus">
+              <el-select
+                v-model="contractForm.contractStatus"
+                placeholder="请选择合同状态"
+              >
+                <el-option
+                  v-for="dict in contractStatusOptions"
+                  :key="dict.dicItemCode"
+                  :label="dict.dicItemName"
+                  :value="dict.dicItemCode"
+                />
+              </el-select>
+            </el-form-item>
+            <el-form-item label="合同办理人" prop="transactor">
+              <el-input v-model="contractForm.transactor" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="员工编号" prop="empNumb">
+              <el-input v-model="contractForm.empNumb" />
+            </el-form-item>
+            <el-form-item label="部门(护卫点)" prop="allDeptName">
+              <el-input v-model="contractForm.allDeptName" />
+            </el-form-item>
+            <el-form-item label="岗位" prop="jobName">
+              <el-input v-model="contractForm.jobName" />
+            </el-form-item>
+            <el-form-item label="合同结束日期" prop="endDate">
+              <el-date-picker
+                v-model="contractForm.endDate"
+                value-format="yyyy-MM-dd"
+                type="date"
+                placeholder="选择日期"
+              />
+            </el-form-item>
+            <el-form-item label="合同期限(年)" prop="contractPeriod">
+              <el-input v-model="contractForm.contractPeriod" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="备注" prop="remark">
+              <el-input v-model="contractForm.remark" type="textarea" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="putContractInfo('contractForm')">保 存</el-button>
+        <el-button @click="dialogIsShow()">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+import Pagination from '@/components/Pagination'
+import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+import { dateDifference } from '@/utils/myUtil'
+
+export default {
+  components: {
+    Pagination
+  },
+  data() {
+    return {
+      dialog: {
+        isVisible: false,
+        title: '',
+        type: ''
+      },
+      sort: {},
+      // 总数量
+      total: 0,
+      // 查询参数
+      queryParams: {
+        baseKey: ''
+      },
+      // 分页参数
+      pagination: {
+        size: 15,
+        num: 1
+      },
+      headerHeight: '30px',
+      // 合同列表
+      contractList: [],
+      dimissLogForm: {
+        empIds: '',
+        dgryNames: '',
+        entryDates: '',
+        dimissionType: '',
+        dimissionDate: '',
+        remark: '',
+        afterOperation: '',
+        certificateNumb: '',
+        deptNames: ''
+      },
+      // 合同信息
+      contractForm: {
+        empId: '',
+        empNumb: '',
+        empName: '',
+        certificateNumb: '',
+        sex: '',
+        sexName: '',
+        deptId: '',
+        deptName: '',
+        allDeptName: '',
+        JobId: '',
+        jobName: '',
+        beginDate: '',
+        endDate: '',
+        contractStatus: '',
+        contractPeriod: '',
+        transactor: '',
+        signingDate: '',
+        remark: '',
+        createTime: '',
+        creator: '',
+        modifyTime: '',
+        modifier: '',
+        delFlag: '',
+        empStatus: 0,
+        version: '',
+        diffDay: 0
+      },
+      sexOptions: [],
+      contractStatusOptions: [],
+      dialogShowContract: false,
+      contractRules: {
+        empName: [{ required: true, message: '请选择员工', trigger: 'change' }],
+        signingDate: [{ required: true, validator: this.startDate }],
+        contractStatus: [{ required: true, message: '请选择合同状态', trigger: 'change' }],
+        transactor: [{ max: 40, message: '长度不超过40个字符', trigger: 'blur' }],
+        beginDate: [{ required: true, message: '请选择合同开始日期', trigger: 'change' }],
+        endDate: [{ required: true, validator: this.endDate }],
+        remark: [{ max: 512, message: '长度不超过512个字符', trigger: 'blur' }]
+      }
+    }
+  },
+  mounted() {
+    this.fetch()
+    this.getDicts('sex').then(response => {
+      this.sexOptions = response.data
+    })
+    this.getDicts('CONTRACTSTATUS').then(response => {
+      this.contractStatusOptions = response.data
+    })
+  },
+  methods: {
+    search() {
+      this.queryParams.baseKey = ''
+      this.fetch({
+        ...this.queryParams,
+        ...this.sort
+      })
+    },
+    fetch(params = {}) {
+      const that = this
+      params.pageSize = this.pagination.size
+      params.pageNum = this.pagination.num
+      params.delFlag = 0
+      params.empStatus = 0
+
+      this.$get('hr/empBaseInfo/retire/alert', {
+        ...params
+      }).then((r) => {
+        const data = r.data.data
+        that.total = data.total
+        that.contractList = data.rows
+      })
+    },
+    changeSort(val) {
+      this.sort.field = val.prop
+      this.sort.order = val.order
+      this.fetch()
+    },
+    // 续签合同
+    goOn(row) {
+      this.initContractData(row)
+      this.dialogShowContract = true
+    },
+    dialogIsShow() {
+      this.dialogShowContract = false
+    },
+    // 解骋
+    goDismiss(val) {
+      this.initDimissLogData(val)
+      this.$post('hr/empBaseInfo/retire/dismiss', { ...this.dimissLogForm }).then(() => {
+        this.buttonLoading = false
+        this.$message({
+          message: this.$t('tips.updateSuccess'),
+          type: 'success'
+        })
+        this.cleanContractData()
+        this.fetch()
+      })
+    },
+    // 到龄退休
+    initDimissLogData(val) {
+      this.dimissLogForm.empIds = val.empId
+      this.dimissLogForm.dgryNames = val.empName
+      this.dimissLogForm.entryDates = val.entryDate
+      this.dimissLogForm.dimissionType = '7'
+      this.dimissLogForm.remark = '到龄退休解聘'
+      this.dimissLogForm.afterOperation = '1'
+      this.dimissLogForm.certificateNumb = val.certificateNumb
+      this.dimissLogForm.deptNames = val.allDeptName
+    },
+    // 初始化续签合同信息
+    initContractData(val) {
+      this.cleanContractData()
+      this.contractForm.contractId = val.contractId
+      this.contractForm.empId = val.empId
+      this.contractForm.empNumb = val.empNumb
+      this.contractForm.empName = val.empName
+      this.contractForm.certificateNumb = val.certificateNumb
+      this.contractForm.sex = val.sex
+      this.contractForm.deptId = val.deptId
+      this.contractForm.deptName = val.deptName
+      this.contractForm.allDeptName = val.allDeptName
+      this.contractForm.JobId = val.JobId
+      this.contractForm.jobName = val.jobName
+      this.contractForm.contractStatus = '5'
+    },
+    // 清除续签合同信息
+    cleanContractData() {
+      this.contractForm.contractId = ''
+      this.contractForm.empId = ''
+      this.contractForm.empNumb = ''
+      this.contractForm.empName = ''
+      this.contractForm.certificateNumb = ''
+      this.contractForm.sex = ''
+      this.contractForm.deptId = ''
+      this.contractForm.deptName = ''
+      this.contractForm.allDeptName = ''
+      this.contractForm.JobId = ''
+      this.contractForm.jobName = ''
+      this.contractForm.contractStatus = ''
+      this.contractForm.beginDate = ''
+      this.contractForm.endDate = ''
+      this.contractForm.contractPeriod = 0
+      this.contractForm.remark = ''
+      this.contractForm.transactor = ''
+    },
+    // 验证合同签订日期
+    startDate(rule, value, callback) {
+      // 如果结束日期没选,cb
+      if (!this.contractForm.endDate) {
+        callback()
+      } else {
+        // 结束日期有,进行判断
+        if (this.compareDate(value, this.contractForm.endDate)) {
+          // 如果起始在结束之前
+          callback()
+        } else {
+          callback(new Error('开始日期不能在结束日期之后,请重新选择'))
+        }
+      }
+    },
+    // 验证合同结束日期
+    endDate(rule, value, callback) {
+      // 如果起始日期没选,cb
+      if (!this.contractForm.signingDate) {
+        callback()
+      } else {
+        // 起始日期有,进行判断
+        if (this.compareDate(this.contractForm.signingDate, value)) {
+          // 如果起始在结束之前
+          this.contractForm.contractPeriod = dateDifference(this.contractForm.signingDate, this.contractForm.endDate, 'o')
+          callback()
+        } else {
+          callback(new Error('结束日期不能在开始始日期之前,请重新选择'))
+        }
+      }
+    },
+    compareDate(start, end) {
+      return new Date(end).getTime() > new Date(start).getTime()
+    },
+    // 续签合同提交
+    putContractInfo(formName) {
+      this.$refs[formName].validate((valid) => {
+        if (valid) {
+          this.$post('hr/empContractInfo/retire/rehire', { ...this.contractForm }).then(() => {
+            this.buttonLoading = false
+            this.$message({
+              message: this.$t('处理成功'),
+              type: 'success'
+            })
+
+            this.cleanContractData()
+            this.fetch()
+            this.dialogIsShow()
+          })
+        }
+      })
+    }
+  }
+}
+
+</script>
+<style lang="scss">
+.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;
+  }
+
+}
+
+.el-main {
+  height: 600px;
+}
+
+.el-autocomplete {
+  width: 100%;
+}
+
+.el-select {
+  width: 100%;
+}
+
+.el-aside {
+  padding: 20px;
+  background: #f3f5f8;
+  height: 600px;
+
+  .el-tree {
+    height: 100%;
+  }
+}
+
+.searchTable {
+  margin-top: 10px;
+  border-collapse: collapse;
+  width: 100%;
+
+  tr {
+    border-bottom: 1px dashed #d9dadb;
+  }
+
+  .td {
+    width: 90px;
+    text-align: right;
+  }
+
+  .td-group {
+    padding-left: 20px;
+  }
+}
+
+.searchTable td,
+.searchTable th {
+  color: #000;
+  height: 50px;
+  background-color: #fff;
+}
+
+#ygxq table {
+  border-collapse: collapse;
+  margin: 0 auto;
+  text-align: center;
+  width: 100%;
+  margin-top: 20px;
+}
+
+#ygxq table td,
+#ygxq table th {
+  border: 1px solid #DDDCDC;
+  color: #666;
+  height: 30px;
+}
+
+#ygxq table thead th {
+  background-color: #CCE8EB;
+  width: 100px;
+}
+
+#ygxq table tr:nth-child(odd) {
+  background: #fff;
+}
+
+#ygxq table tr:nth-child(even) {
+  background: #F5FAFA;
+}
+
+.tdTitle {
+  font-size: 14px;
+  font-weight: 700;
+  text-align: left;
+}
+
+.link_button {
+  color: #169BD5;
+}
+
+.del_button {
+  color: #D9001B;
+}
+
+#dcygTable {
+  border-collapse: collapse;
+
+  tr {
+    width: 100%;
+    border-bottom: 1px dashed #ccc;
+
+    > td:nth-child(even) {
+      width: 100px;
+      text-align: left;
+    }
+  }
+
+}
+
+#dcygTable td {
+  width: 160px;
+  text-align: center;
+  height: 35px;
+  line-height: 35px;
+  font-size: 15px;
+  font-weight: 400;
+}
+
+.search-btn {
+  display: inline-block;
+  width: 3.64vw;
+  height: 3.2vh;
+  line-height: 3.2vh;
+  text-align: center;
+  background-color: #a00515;
+  color: #fff;
+  margin-left: 1vw;
+  box-sizing: border-box;
+  cursor: pointer;
+  vertical-align: middle;
+}
+
+.sup-search-btn {
+  display: inline-block;
+  width: 5.2vw;
+  height: 3.2vh;
+  line-height: 3.2vh;
+  text-align: center;
+  margin-left: 1vw;
+  color: #a00515;
+  border: 1px solid #a00515;
+  box-sizing: border-box;
+  cursor: pointer;
+  vertical-align: middle;
+}
+</style>
diff --git a/vue.config.js b/vue.config.js
index b69a6b0..0b69876 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -109,28 +109,28 @@
             .end()
           config
             .optimization.splitChunks({
-            chunks: 'all',
-            cacheGroups: {
-              libs: {
-                name: 'chunk-libs',
-                test: /[\\/]node_modules[\\/]/,
-                priority: 10,
-                chunks: 'initial' // only package third parties that are initially dependent
-              },
-              elementUI: {
-                name: 'chunk-elementUI', // split elementUI into a single package
-                priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
-                test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
-              },
-              commons: {
-                name: 'chunk-commons',
-                test: resolve('src/components'), // can customize your rules
-                minChunks: 3, //  minimum common number
-                priority: 5,
-                reuseExistingChunk: true
+              chunks: 'all',
+              cacheGroups: {
+                libs: {
+                  name: 'chunk-libs',
+                  test: /[\\/]node_modules[\\/]/,
+                  priority: 10,
+                  chunks: 'initial' // only package third parties that are initially dependent
+                },
+                elementUI: {
+                  name: 'chunk-elementUI', // split elementUI into a single package
+                  priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+                  test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
+                },
+                commons: {
+                  name: 'chunk-commons',
+                  test: resolve('src/components'), // can customize your rules
+                  minChunks: 3, //  minimum common number
+                  priority: 5,
+                  reuseExistingChunk: true
+                }
               }
-            }
-          })
+            })
           config.optimization.runtimeChunk('single')
         }
       )

--
Gitblit v1.8.0