From 4c72dd4e55dbfae3dca4a7ac4342220e93f25a8b Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期三, 11 三月 2026 18:04:07 +0800
Subject: [PATCH] feat(dashboard): 添加四险提醒功能并优化员工管理界面

---
 src/views/remind/insurance5.vue       |   12 ++
 src/views/dashboard/index.vue         |   41 ++++++-
 src/views/dashboard/zzUser.vue        |   12 ++
 src/views/dashboard/insuranceUser.vue |  218 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 274 insertions(+), 9 deletions(-)

diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
index 53302e3..fb370d9 100644
--- a/src/views/dashboard/index.vue
+++ b/src/views/dashboard/index.vue
@@ -214,8 +214,8 @@
         </el-card>
       </el-col>
       <el-col>
-        <el-card shadow="always" class="card-info" @click.native="showbl('不良记录','3')">
-          <p class="card-number">{{ total.sxyg }}</p>
+        <el-card shadow="always" class="card-info" @click.native="showInsurance('四险提醒','3')">
+          <p class="card-number">{{ total.insurance }}</p>
           <p>四险提醒</p>
         </el-card>
       </el-col>
@@ -257,6 +257,7 @@
     <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" />
+    <insurance-user ref="insuranceUser" :dialog-visible="dialog.dialogShowInsurance" :title="title" @cancleChooseUser="cancleInsuranceUser" />
   </div>
 </template>
 <script>
@@ -276,9 +277,10 @@
 import CtUser from './ctUser'
 import SfzUser from './sfzUser'
 import ZzUser from './zzUser'
+import InsuranceUser from './insuranceUser'
 
 export default {
-  components: { SfzUser, YgUser, QjUser, LzUser, GsUser, YwUser, SbUser, YjUser, TjUser, TgUser, BlUser, CqUser, HtUser, OnTheJobUser, CtUser, ZzUser },
+  components: { SfzUser, YgUser, QjUser, LzUser, GsUser, YwUser, SbUser, YjUser, TjUser, TgUser, BlUser, CqUser, HtUser, OnTheJobUser, CtUser, ZzUser, InsuranceUser },
   data() {
     return {
       dialog: {
@@ -297,8 +299,8 @@
         dialogShowqj: false,
         dialogShowCq: false,
         dialogShowSfz: false,
-        dialgoShowProbation: false,
         dialogShowProbation: false,
+        dialogShowInsurance: false,
         title: '',
         type: ''
       },
@@ -334,7 +336,8 @@
         bljl: 0,
         zzyg: 0,
         sxyg: 0,
-        probation: 0
+        probation: 0,
+        insurance: 0
       },
       pickerOptions: {
         shortcuts: [
@@ -513,18 +516,40 @@
       const values = this.value2
       const btime = values[0]
       const etime = values[1]
-      const index = this.selectIndex
+      const index = this.selectIndex // 传入当前 dashboard 选中的时间维度
       this.$refs.zzUser.setjobUser(btime, etime, index, null)
+    },
+    showProbation(title) {
+      this.dialog.dialogShowInsurance = true
+      this.title = title
+      const values = this.value2
+      const btime = values[0]
+      const etime = values[1]
+      const index = this.selectIndex
+      this.$refs.insuranceUser.setjobUser(btime, etime, index, null)
+    },
+    showInsurance(title) {
+      this.dialog.dialogShowInsurance = true
+      this.title = title
+      const values = this.value2
+      const btime = values[0]
+      const etime = values[1]
+      const index = this.selectIndex
+      this.$refs.insuranceUser.setjobUser(btime, etime, index, null)
     },
     cancleZzUser() {
       this.dialog.dialogShowProbation = false
+    },
+    cancleInsuranceUser() {
+      this.dialog.dialogShowInsurance = false
     },
     fetchProbationCount() {
       this.$get('hr/empBaseInfo/probation/alert', {
         pageSize: 1,
         pageNum: 1,
         delFlag: 0,
-        empStatus: 0
+        empStatus: 0,
+        timeRange: this.selectIndex
       }).then((r) => {
         const data = r.data.data
         this.total.probation = data.total || 0
@@ -636,6 +661,8 @@
       this.total.clyg = data.clyg
       this.total.ygtg = data.ygtg
       this.total.bljl = data.bljl
+      this.total.probation = data.probationCount
+      this.total.insurance = data.insuranceCount
     }
   }
 }
diff --git a/src/views/dashboard/insuranceUser.vue b/src/views/dashboard/insuranceUser.vue
new file mode 100644
index 0000000..25b02bf
--- /dev/null
+++ b/src/views/dashboard/insuranceUser.vue
@@ -0,0 +1,218 @@
+<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-button class="filter-item" type="warning" @click="handleExport">
+          导出
+        </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="80" />
+        <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="sex" label="性别" width="60" />
+        <el-table-column show-overflow-tooltip prop="age" label="年龄" width="80" />
+        <el-table-column show-overflow-tooltip prop="education" label="学历" width="80" />
+        <el-table-column show-overflow-tooltip prop="nativePlace" label="籍贯" width="150" />
+        <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="insuranceTypeName" label="社保档位" width="240" />
+      </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'
+      },
+      // 导出配置
+      exportConfig: {
+        selectedFields: [
+          'empNumb', // 编号
+          'allDeptName', // 部门(护卫点)
+          'jobName', // 岗位
+          'empName', // 姓名
+          'certificateNumb', // 身份证号码
+          'sexName', // 性别
+          'age', // 年龄
+          'educationName', // 学历
+          'nativePlaceName', // 籍贯
+          'telePhone', // 联系电话
+          'empTypeName', // 员工类型
+          'insuranceTypeName' // 社保档位
+        ],
+        exportUrl: 'hr/empBaseInfo/export/insurance',
+        fileName: '四险员工列表.xls'
+      },
+      selectIndex: 0 // 存储传入的时间筛选索引
+    }
+  },
+  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.selectIndex = index !== null ? index : 0 // 保存传入的 index
+      this.pagination.num = 1
+      this.search()
+    },
+    fetch(params = {}) {
+      var that = this
+      params.pageSize = this.pagination.size
+      params.pageNum = this.pagination.num
+      params.delFlag = 0
+      params.empStatus = 0
+
+      // 添加 index 参数
+      if (params.timeRange === undefined || params.timeRange === null) {
+        params.timeRange = this.selectIndex
+      }
+
+      this.$get('hr/empBaseInfo/insurance/alert', {
+        ...params
+      }).then((r) => {
+        const data = r.data.data
+        that.total = data.total
+        that.list = data.rows
+      })
+    },
+    cancleChoose() {
+      this.$emit('cancleChooseUser')
+    },
+    // 导出方法
+    handleExport() {
+      const params = {
+        ...this.queryParams,
+        index: this.selectIndex, // 使用当前查询的 index
+        delFlag: 0,
+        empStatus: 0,
+        exportField: this.exportConfig.selectedFields.join(',')
+      }
+
+      this.$download(
+        this.exportConfig.exportUrl,
+        params,
+        this.exportConfig.fileName
+      ).then(() => {
+        this.$message({
+          message: '下载成功!',
+          type: 'success'
+        })
+      })
+    }
+  }
+}
+</script>
+<style lang="scss" scoped>
+  .link_button {
+    color: #169BD5;
+  }
+
+  .del_button {
+    color: #D9001B;
+  }
+</style>
diff --git a/src/views/dashboard/zzUser.vue b/src/views/dashboard/zzUser.vue
index 18c7416..2150478 100644
--- a/src/views/dashboard/zzUser.vue
+++ b/src/views/dashboard/zzUser.vue
@@ -113,7 +113,8 @@
         ],
         exportUrl: 'hr/empBaseInfo/export/probation',
         fileName: '员工转正提醒.xls'
-      }
+      },
+      selectIndex: 0 // 存储传入的时间筛选索引
     }
   },
   computed: {
@@ -153,6 +154,8 @@
       this.queryParams.index = index
       this.queryParams.number = number
       this.queryParams.name = null
+      this.selectIndex = index !== null ? index : 0 // 保存传入的 index
+      this.pagination.num = 1
       this.search()
     },
     fetch(params = {}) {
@@ -161,6 +164,12 @@
       params.pageNum = this.pagination.num
       params.delFlag = 0
       params.empStatus = 0
+
+      // 添加 index 参数
+      if (params.timeRange === undefined || params.timeRange === null) {
+        params.timeRange = this.selectIndex
+      }
+
       this.$get('hr/empBaseInfo/probation/alert', {
         ...params
       }).then((r) => {
@@ -176,6 +185,7 @@
     handleExport() {
       const params = {
         ...this.queryParams,
+        index: this.selectIndex, // 使用当前查询的 index
         delFlag: 0,
         empStatus: 0,
         exportField: this.exportConfig.selectedFields.join(',')
diff --git a/src/views/remind/insurance5.vue b/src/views/remind/insurance5.vue
index cc656e9..e58b751 100644
--- a/src/views/remind/insurance5.vue
+++ b/src/views/remind/insurance5.vue
@@ -105,9 +105,10 @@
           <el-table-column show-overflow-tooltip prop="telePhone" label="联系电话" width="110" />
           <el-table-column show-overflow-tooltip prop="empType" label="员工类型" width="80" :formatter="empTypeFormat" />
           <el-table-column
-            prop="insuranceTypeName"
+            prop="insuranceType"
             label="社保档位"
             width="240"
+            :formatter="insuranceTypeFormat"
             sortable="custom"
             :sort-orders="['ascending', 'descending']"
           />
@@ -194,6 +195,15 @@
       }, {
         'dicItemName': '(非深户)四险二档',
         'dicItemCode': '6'
+      }, {
+        'dicItemName': '外参',
+        'dicItemCode': '10'
+      }, {
+        'dicItemName': '临时工意外险',
+        'dicItemCode': '13'
+      }, {
+        'dicItemName': '甲方购买',
+        'dicItemCode': '14'
       }]
     }
   },

--
Gitblit v1.8.0