From 74fd2e9414fe5bb67ad8743aa370a07fa5f8caf4 Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期二, 10 三月 2026 23:15:26 +0800
Subject: [PATCH] feat(dashboard): 添加转正提醒功能

---
 src/views/dashboard/index.vue  |   48 +++++++++++
 src/views/dashboard/zzUser.vue |  172 +++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 218 insertions(+), 2 deletions(-)

diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index e64e473..53302e3 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -213,6 +213,18 @@
           <p>不良记录</p>
         </el-card>
       </el-col>
+      <el-col>
+        <el-card shadow="always" class="card-info" @click.native="showbl('不良记录','3')">
+          <p class="card-number">{{ total.sxyg }}</p>
+          <p>四险提醒</p>
+        </el-card>
+      </el-col>
+      <el-col>
+        <el-card shadow="always" class="card-info" @click.native="showProbation('转正提醒')">
+          <p class="card-number">{{ total.probation }}</p>
+          <p>转正提醒</p>
+        </el-card>
+      </el-col>
     </el-row>
     <on-the-job-user
       ref="jobUser"
@@ -244,6 +256,7 @@
     <yg-user ref="ygUser" :dialog-visible="dialog.dialogShowyg" :title="title" @cancleChooseUser="cancleygUser" />
     <sfz-user ref="sfzUser" :dialog-visible="dialog.dialogShowSfz" :title="title" @cancleChooseUser="cancleSfzUser" />
     <ct-user ref="ctUser" :dialog-visible="dialog.dialogShowct" :title="title" @cancleChooseUser="canclectUser" />
+    <zz-user ref="zzUser" :dialog-visible="dialog.dialogShowProbation" :title="title" @cancleChooseUser="cancleZzUser" />
   </div>
 </template>
 <script>
@@ -262,8 +275,10 @@
 import YgUser from './ygUser'
 import CtUser from './ctUser'
 import SfzUser from './sfzUser'
+import ZzUser from './zzUser'
+
 export default {
-  components: { SfzUser, YgUser, QjUser, LzUser, GsUser, YwUser, SbUser, YjUser, TjUser, TgUser, BlUser, CqUser, HtUser, OnTheJobUser, CtUser },
+  components: { SfzUser, YgUser, QjUser, LzUser, GsUser, YwUser, SbUser, YjUser, TjUser, TgUser, BlUser, CqUser, HtUser, OnTheJobUser, CtUser, ZzUser },
   data() {
     return {
       dialog: {
@@ -282,6 +297,8 @@
         dialogShowqj: false,
         dialogShowCq: false,
         dialogShowSfz: false,
+        dialgoShowProbation: false,
+        dialogShowProbation: false,
         title: '',
         type: ''
       },
@@ -314,7 +331,10 @@
         ygtj: 0,
         sfz: 0,
         ygtg: 0,
-        bljl: 0
+        bljl: 0,
+        zzyg: 0,
+        sxyg: 0,
+        probation: 0
       },
       pickerOptions: {
         shortcuts: [
@@ -353,6 +373,7 @@
   },
   mounted() {
     this.selectTab(0)
+    this.fetchProbationCount()
   },
   methods: {
     showSfz(title, number) {
@@ -486,6 +507,29 @@
       this.$refs.ctUser.setjobUser(btime, etime, index, number)
       this.dialog.dialogShowct = true
     },
+    showProbation(title) {
+      this.dialog.dialogShowProbation = true
+      this.title = title
+      const values = this.value2
+      const btime = values[0]
+      const etime = values[1]
+      const index = this.selectIndex
+      this.$refs.zzUser.setjobUser(btime, etime, index, null)
+    },
+    cancleZzUser() {
+      this.dialog.dialogShowProbation = false
+    },
+    fetchProbationCount() {
+      this.$get('hr/empBaseInfo/probation/alert', {
+        pageSize: 1,
+        pageNum: 1,
+        delFlag: 0,
+        empStatus: 0
+      }).then((r) => {
+        const data = r.data.data
+        this.total.probation = data.total || 0
+      })
+    },
     cancleChooseUser() {
       this.dialog.isVisible = false
     },
diff --git a/src/views/dashboard/zzUser.vue b/src/views/dashboard/zzUser.vue
new file mode 100644
index 0000000..89001bf
--- /dev/null
+++ b/src/views/dashboard/zzUser.vue
@@ -0,0 +1,172 @@
+<template>
+  <el-dialog
+    :title="title"
+    top="80px"
+    width="80%"
+    :close-on-click-modal="false"
+    :close-on-press-escape="false"
+    :visible.sync="isVisible"
+    :before-close="beforeClose"
+  >
+    <div class="app-container">
+      <div class="filter-container" style="margin-left: -340px;">
+        <el-input v-model="queryParams.name" placeholder="姓名/身份证号/护卫点/员工编号" class="filter-item search-item" />
+        <el-button class="filter-item" type="primary" @click="search">
+          {{ $t('table.search') }}
+        </el-button>
+        <el-button class="filter-item" type="success" @click="reset">
+          {{ $t('table.reset') }}
+        </el-button>
+      </div>
+      <el-table
+        ref="multipleTable"
+        :data="list"
+        row-key="empId"
+        stripe
+        border
+        :cell-style="{padding:'7px 0','text-align':'center'}"
+        :header-cell-style="{'height':'5.3vh','background-color':'#e6e6e6','text-align':'center'}"
+        style="width: 100%;"
+      >
+        <el-table-column show-overflow-tooltip type="index" width="55" label="序号" />
+        <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"
+        :total="total"
+        :page.sync="pagination.num"
+        :limit.sync="pagination.size"
+        @pagination="search"
+      />
+      <el-button type="danger" @click="cancleChoose">关闭</el-button>
+    </div>
+  </el-dialog>
+</template>
+<script>
+// 引用翻页组件
+import Pagination from '@/components/Pagination'
+
+export default {
+  components: {
+    Pagination
+  },
+  props: {
+    dialogVisible: {
+      type: Boolean,
+      default: false
+    },
+    title: {
+      type: String,
+      default: ''
+    },
+    multipleselect: {
+      type: Boolean,
+      default: false
+    }
+  },
+  data() {
+    return {
+      show: false,
+      headerHeight: '70px',
+      deptTree: [],
+      selection: [],
+      multipleSelection: [],
+      total: 0, // 总数量
+      queryParams: {
+        name: null,
+        btime: null,
+        etime: null,
+        index: null,
+        number: null
+      }, // 查询参数
+      sort: {}, // 排序
+      pagination: { // 分页参数
+        size: 5,
+        num: 1
+      },
+      probationStatusOptions: [],
+      list: [], // 给table显示的数据
+      defaultProps: {
+        children: 'children',
+        label: 'label'
+      }
+    }
+  },
+  computed: {
+    isVisible: {
+      get() {
+        return this.dialogVisible
+      }
+    }
+  },
+  mounted() {
+    setTimeout(() => {
+      this.getDicts('PROBATIONSTATUS').then(response => {
+        this.probationStatusOptions = response.data
+      })
+    }, 1000)
+  },
+  methods: {
+    probationStatusFormat(row, column) {
+      return this.selectDictLabel(this.probationStatusOptions, row.probationStatus)
+    },
+    beforeClose(done) {
+      this.$emit('cancleChooseUser')
+    },
+    search() {
+      this.fetch({
+        ...this.queryParams
+      })
+    },
+    reset() {
+      this.queryParams.name = null
+      this.search()
+    },
+    // 翻页方法
+    setjobUser(btime, etime, index, number) {
+      this.queryParams.btime = btime
+      this.queryParams.etime = etime
+      this.queryParams.index = index
+      this.queryParams.number = number
+      this.queryParams.name = null
+      this.search()
+    },
+    fetch(params = {}) {
+      var 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.list = data.rows
+      })
+    },
+    cancleChoose() {
+      this.$emit('cancleChooseUser')
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+  .link_button {
+    color: #169BD5;
+  }
+
+  .del_button {
+    color: #D9001B;
+  }
+</style>

--
Gitblit v1.8.0