yubo
2026-03-10 74fd2e9414fe5bb67ad8743aa370a07fa5f8caf4
feat(dashboard): 添加转正提醒功能

- 在仪表板中新增转正提醒卡片,显示转正提醒数量
- 添加四险提醒卡片功能
- 新增 zzUser 组件用于展示转正提醒员工列表
- 实现转正提醒数据获取和显示逻辑
- 添加转正提醒弹窗和搜索功能
- 集成转正状态字典数据获取
1个文件已添加
1个文件已修改
220 ■■■■■ 已修改文件
src/views/dashboard/index.vue 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/zzUser.vue 172 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
    },
src/views/dashboard/zzUser.vue
New file
@@ -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>