Vue项目实战之人力资源平台系统(十三)首页模块

前言

一、首页效果图

在这里插入图片描述

二、首页的基本布局

在src/views/dashboard/index.vue中添加布局代码,由于首页内容大部分都是静态内容,所以在这不做代码演示

三、首页用户资料显示

在src/views/dashboard/index.vue中添加如下代码:

       <div class="fl headL">
          <div class="headImg">
            //当我们加载图片失败的时候,显示默认图片
            <img  :src="userInfo.staffPhoto" v-imageerror="defaultImg">
          </div>
          <div class="headInfoTip">
            <p class="firstChild">早安,{
    
    {
    
     userInfo.username }},祝你开心每一天!</p>
            <p class="lastChild">{
    
    {
    
     userInfo.username }}   |  {
    
    {
    
     userInfo.companyName }}-{
    
    {
    
     userInfo.departmentName }}</p>
          </div>
        </div>

<script>
import {
    
     createNamespacedHelpers } from 'vuex'
const {
    
     mapState } = createNamespacedHelpers('user')

export default {
    
    
  name: 'Dashboard',
  data() {
    
    
    return {
    
    
      defaultImg: require('@/assets/common/head.jpg'),
    }
  },
  computed: {
    
    
    //直接获取Vuex的用户资料即可
    ...mapState(['userInfo'])
  }
}
</script>

四、工作日历组件封装

在src/views/dashboard/components/work-calendar.vue中添加以下代码:
工作日历可以基于Element组件el-calendar进行封装:

<template>
  <div>
    <el-row type="flex" justify="end">
      <el-select v-model="currentYear" size="small" style="width: 120px" @change="dateChange">
        <el-option v-for="item in yearList" :key="item" :label="item" :value="item">{
    
    {
    
     item }}</el-option>
      </el-select>
      <el-select v-model="currentMonth" size="small" style="width: 120px;margin-left:10px" @change="dateChange">
        <el-option v-for="item in 12" :key="item" :label="item" :value="item">{
    
    {
    
     item }}</el-option>
      </el-select>
    </el-row>
    <el-calendar v-model="currentDate">
      <template v-slot:dateCell="{ date, data }" class="content">
        <div class="date-content">
          <span class="text"> {
    
    {
    
     data.day | getDay }}</span>
          <span v-if="isWeek(date)" class="rest"></span>
        </div>
      </template>
    </el-calendar>
  </div>
</template>

实现工作日历逻辑:

export default {
    
    
  filters: {
    
    
    getDay(value) {
    
    
      const day = value.split('-')[2]
      return day.startsWith('0') ? day.substr(1) : day
    }
  },
  props: {
    
    
    startDate: {
    
    
      type: Date,
      default: () => new Date()
    }
  },
  data() {
    
    
    return {
    
    
      currentMonth: null, // 当前月份
      currentYear: null, // 当前年份
      currentDate: null,
      yearList: []
    }
  },
  //   初始化事件
  created() {
    
    
    // 处理起始时间
    // 组件要求起始时间必须是 周一开始 以一个月为开始
    this.currentMonth = this.startDate.getMonth() + 1
    this.currentYear = this.startDate.getFullYear()
    // 根据当前的年 生成可选年份 前后各加5年
    this.yearList = Array.from(Array(11), (value, index) =>  this.currentYear + index - 5 )
    // 计算 当年当月的第一个周一 再加上 四周之后的一个月月份
    this.dateChange()
  },
  methods: {
    
    
    // 是否是休息日
    isWeek(value) {
    
    
      return value.getDay() === 6 || value.getDay() === 0
    },
    // 年月份改变之后
    dateChange() {
    
    
      const year = this.currentYear
      const month = this.currentMonth
      this.currentDate = new Date(`${
      
      year}-${
      
      month}-1`) // 以当前月的1号为起始
    }
  }
}

在src/views/dashboard/index.vue中应用该组件:

  <!-- 放置日历组件 -->
  <work-calendar />

五、雷达图组件封装

5.1 安装echarts图表

$ npm i echarts

5.2 新建雷达图组件

在src/views/dashboard/components/radar.vue添加如下代码:

<template>
  <!-- 雷达图  图表必须给高和宽度-->
  <div ref="myDiv" class="radar-echart" />
</template>

<script>
// 完成加载过程
var echarts = require('echarts/lib/echarts') // 引入echarts主模块
require('echarts/lib/chart/radar') // 引入雷达图

// 引入提示框和标题组件
require('echarts/lib/component/tooltip')
require('echarts/lib/component/title')

export default {
    
    
  // 页面渲染完毕事件
  mounted() {
    
    
    const myChart = echarts.init(this.$refs.myDiv) // 得到图表实例
    myChart.setOption({
    
    
      title: {
    
    
        text: '基础雷达图'
      },
      tooltip: {
    
    },
      legend: {
    
    
        data: ['预算分配(Allocated Budget)', '实际开销(Actual Spending)']
      },
      radar: {
    
    
        name: {
    
    
          textStyle: {
    
    
            color: '#fff',
            backgroundColor: '#999',
            borderRadius: 3,
            padding: [3, 5]
          }
        },
        // 每个区域的最高值
        indicator: [
          {
    
     name: '工作效率', max: 100 },
          {
    
     name: '考勤', max: 100 },
          {
    
     name: '积极性', max: 100 },
          {
    
     name: '帮助同事', max: 100 },
          {
    
     name: '自主学习', max: 100 },
          {
    
     name: '正确率', max: 100 }
        ]
      },
      series: [{
    
    
        name: '预算 vs 开销(Budget vs spending)',
        type: 'radar',
        // areaStyle: {normal: {}},
        data: [
          {
    
    
            value: [10, 1, 100, 5, 100, 0],
            name: '张三'
          },
          {
    
    
            value: [50, 50, 50, 50, 50, 10],
            name: '李四'
          }
        ]
      }]
    })
  }
}
</script>


<style>
.radar-echart {
    
    
    width: 600px;
    height: 400px;
}
</style>

这样我们可以得到一个雷达图,对绩效指数进行统计:
在这里插入图片描述

5.3 将雷达图组件导入主页

import Radar from './components/radar'

<!-- 放置雷达图 -->
<radar />

总结

猜你喜欢

转载自blog.csdn.net/qq_40652101/article/details/127277990
今日推荐