仿钉钉排班管理,基于Element Plus的排班表格可编辑实现思路

最近公司做自己的OA系统,有一个需求是针对客服部门不固定班制,要去实现类似钉钉的排班表格,如下是钉钉排班样式和功能概况

仿钉钉排班管理,基于Element Plus的排班表格可编辑实现思路_第1张图片

仿钉钉排班管理,基于Element Plus的排班表格可编辑实现思路_第2张图片

看到这里我感觉需要解决的就是这个表格怎么来尽可能的还原了,因为整体的项目其实已经完成差不多了,用的是vue3+element Plus,所以首先就是怎么用el-table来实现,下面是我最后实现的样式(没有做到特别还原和美化,以及细节功能如除本月其他月的其他月排班表格,搜索等等,这些公司没有这个需求,也不难,有需要后面也不费事能加,暂时只放这个的实现思路,也不会被过多的代码影响思路)

一步一步来解决,用抽屉组件包裹表格,从表格头开始,要先实现本月数据如何能像钉钉中这样先将表头完成,首先需要处理一个数据数组将日期,完整年月日(方便与后端获取的排班数据做进一步处理),星期计入到其中

    //获取本月日期,即渲染考勤表表头数据
    getDatesForCurrentMonth() {
      let date = new Date();
      let year = date.getFullYear();
      let month = date.getMonth();
      let daysInMonth = new Date(year, month + 1, 0).getDate();

      for (let i = 1; i <= daysInMonth; i++) {
        let date = new Date(year, month, i);
        let dateString = date.toISOString().split("T")[0];
        let dayOfWeek = date.getDay();
        let weekDays = ["日", "一", "二", "三", "四", "五", "六"];
        this.dates.push({
          date: i,//日期号
          fullDate: dateString,//完整年月日
          dayOfWeek: weekDays[dayOfWeek],//星期
        });
      }
    },

循环遍历渲染出表格头来

  
  
    
      
      
        
      
    
  

这样应该空数据表格就好了,再用弹出框组件el-popover来配合按钮(按钮我用着方便,要求美观也能自己写或者其他样式),先要将后端给我的数据做个处理,要所在列有对应行的属性名,所以日期全称fullDate就派上用场,我们在表格数据的每个元素加入循环对象,对象键是对应日期,对象值就是对应班次的name,列如:{2023-12-12:早班}这样 那不管想怎么渲染上表格都可以很轻松,数据的处理根据后端返回给我们的数据来处理,下面是我的处理代码

    // 点击编辑获取考勤组排班详情
    update(id) {
      this.table = true;
      getScheduleDetailList(id).then((res) => {
        if (res.code == 200) {
          let data = res.data.result;
          data.map((item) => {
            item.schedules.map((element) => {
              let className = this.options_class.filter(
                (item1) => item1.id == element.classId
              )[0].className;
              item[element.date] = className;
              return item;
            });
            return item;
          });
          this.gridData = data;
          this.update_schedules.groupId = id;
          //   console.log(this.gridData);
        }
      });
    },
      
        
      

对于修改后需要做网络请求来修改数据库可以通过cell-click函数能够返回用户点击某单元row,和cell,来获取到当前点击的员工id,日期,等。下面是完整的页面代码





你可能感兴趣的:(钉钉,elementui,vue.js)