前端实现葡萄图记录考勤vue

背景:现需要实现葡萄图,每一颗葡萄代表一天,一串葡萄代表一个月,当天考勤正常葡萄为紫色,有迟到缺勤葡萄为白色。
思路:一共4种情况:大月(31天)、小月(30天)、闰年2月(29天)、平年2月(28天)。
实现效果如下:
在这里插入图片描述
最后结合实际情况出的效果大致图为:
在这里插入图片描述

代码实现如下:

<!DOCTYPE html>
<html lang="zh-CN" xmlns:v-on="http://www.w3.org/1999/xhtml">
  <head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge, chrome=1" />
    <meta name="renderer" content="webkit" />
    <script src="js/axios.js"></script>
    <script src="plugs/vue/vue.js"></script>
    <meta name="format-detection" content="telephone=no" />
    <meta name="description" content="" />
    <meta name="keywords" content="" />
    <link rel="stylesheet" href="element-ui/theme-chalk/index.css" />
    <link rel="stylesheet" href="css/style.css" />
    <style>
      .main {
        width: 100%;
        height: 100vh;
      }
      .contentBox {
        width: 100%;
        height: 100%;
        display: flex;
        padding: 35px 20px;
      }
      /* 左侧样式 */
      .leftContent {
        width: 30vw;
        height: 100%;
      }

      /* 右侧 */
      .rightContent {
        width: 70vw;
        height: 100%;
        .peopleBox {
          width: 100%;
          height: 100%;
          display: flex;
          flex-wrap: wrap;
          overflow: auto;
          .peopleCard {
            width: calc(25% - 40px);
            height: calc(33% - 15px);
            border: 2px solid #adacab;
            margin-left: 40px;
            margin-top: 15px;
            border-radius: 3px;
            .peopleTop {
              width: 100%;
              height: 40%;
              display: flex;
              .peopleTLeft {
                width: calc(100% - 30px);
                height: 100%;
                .peopleRow {
                  width: 100%;
                  height: 33%;
                  font-size: 1rem;
                  display: flex;
                  .rowLeft {
                    width: 40%;
                    color: #fff;
                    background: #83b3d4;
                    border: 1px solid #fff;
                    display: flex;
                    align-items: center;
                    justify-content: center;
                  }
                  .rowRight {
                    width: 60%;
                    color: #141414;
                    background: #d8ecf9;
                    border: 1px solid #fff;
                    display: flex;
                    align-items: center;
                    justify-content: flex-start;
                    padding-left: 5px;
                    line-height: 15px;
                  }
                }
              }
              .peopleTRight {
                width: 100px;
                height: 100%;
                border: 1px solid #fff;
                border-left: none;
                > img {
                  width: 100%;
                  height: 100%;
                }
              }
            }
            .peopleBottom {
              width: 100%;
              height: 60%;
              background: #e7f1ff;
              .propleGrapeBox {
                width: 50%;
                height: 100%;
                margin: 0 auto;
                padding-top: 10px;
                /* 葡萄图样式 */
                .grapeBox {
                  width: 100%;
                  height: 100%;
                  margin: 0 auto;
                  position: relative;
                  .grapeHead {
                    width: 100%;
                    height: 30%;
                    > img {
                      width: 100%;
                      height: 100%;
                    }
                  }
                  .grapeBody {
                    width: 100%;
                    height: 80%;
                    position: absolute;
                    top: 15%;
                    left: 5%;
                    .grapeBodyBox {
                      width: 90%;
                      height: 100%;
                      .row {
                        width: 100%;
                        height: 10%;
                        display: flex;
                        justify-content: center;
                        .col {
                          width: 20px;
                          height: 20px;
                          background: #a285ec;
                          border-radius: 50%;
                          display: flex;
                          align-items: center;
                          justify-content: center;
                          border: 1px solid #504f4f;
                          font-size: 0.6rem;
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
      .peopleCard:nth-child(1),
      .peopleCard:nth-child(2),
      .peopleCard:nth-child(3),
      .peopleCard:nth-child(4) {
        margin-top: 0;
      }
    </style>
  </head>
  <div id="app" class="main">
    <div class="contentBox">
      <div class="leftContent">
      </div>
      <!-- 右侧 -->
      <div class="rightContent">
        <div class="peopleBox">
          <div class="peopleCard" v-for="(item,index) in peopleList">
            <div class="peopleTop">
              <div class="peopleTLeft">
                <div class="peopleRow">
                  <div class="rowLeft">xx</div>
                  <div class="rowRight" style="overflow: hidden">
                    {{item.id}}
                  </div>
                </div>
                <div class="peopleRow">
                  <div class="rowLeft">姓名</div>
                  <div class="rowRight">{{item.name}}</div>
                </div>
                <div class="peopleRow">
                  <div class="rowLeft">xx</div>
                  <div class="rowRight" style="overflow: hidden">
                    {{item.id}}
                  </div>
                </div>
              </div>
              <div class="peopleTRight">
                <!-- <img :src="item.userImg" alt="" /> -->
                <img src="./images/600.jpg" alt="" />
              </div>
            </div>
            <div class="peopleBottom">
              <!-- 葡萄图 -->
              <div class="propleGrapeBox">
                <div class="grapeBox">
                  <div class="grapeHead">
					<!-- 叶子图片 -->
                    <img src="./images/grapeleaf.png" alt="" />
                  </div>
                  <div class="grapeBody" style="z-index: 5">
                    <div class="grapeBodyBox">
                      <div class="row" v-for="(item,index) in item.attendList">
                        <div
                          class="col"
                          v-for="(it,i) in item.colList"
                          :style="{background:it.isBelate==true?'#ebd6edb2':''}"
                        >
                          {{it.day}}
                        </div>
                      </div>
                    </div>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <body>
    <script src="js/axios.js"></script>
    <script src="./js/public.js"></script>
    <script type="text/javascript">
      var vm = new Vue({
        el: "#app",
        data: function () {
          return {
            serverPath: "",
            leftList: [
              {
                title: "推行葡萄图的目的",
                content:
                  "为提升大厅政务服务水平,优化我区营商环境和政务服务效能,提升办事群众和企业的满意度和获得感,真实反映出每位员工的工作状况,制定葡萄图绩效考核针对大厅人员日常考勤进行统计分析,掌握人员考勤工作情况,合理分配人员岗位。",
              },
              {
                title: "葡萄图适用的范围",
                content: "高新区政务服务大厅窗口工作人员",
              },
              {
                title: "葡萄图考核方法",
                content:
                  "每位窗口人员每个月都有一张葡萄图,每位窗口人员每个出勤日都拥有一颗葡萄。上级领导根据员工的实际表现给予涂色,如有不良表现或优异变现均记录在《关键事件记录卡》上,以作为后续评定绩效等级的依据。每个葡萄有6种颜色,所有窗口人员的葡萄图均在现场公开、公布。",
              },
            ],
            showRowList: [
              {
                colList: [
                  { day: 31, isBelate: false },
                  { day: 30, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 29, isBelate: false },
                  { day: 28, isBelate: true },
                  { day: 27, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 26, isBelate: false },
                  { day: 25, isBelate: false },
                  { day: 24, isBelate: false },
                  { day: 23, isBelate: false },
                  { day: 22, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 21, isBelate: false },
                  { day: 20, isBelate: false },
                  { day: 19, isBelate: false },
                  { day: 18, isBelate: false },
                  { day: 17, isBelate: false },
                  { day: 16, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 15, isBelate: false },
                  { day: 14, isBelate: false },
                  { day: 13, isBelate: false },
                  { day: 12, isBelate: false },
                  { day: 11, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 10, isBelate: false },
                  { day: 9, isBelate: false },
                  { day: 8, isBelate: false },
                  { day: 7, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 6, isBelate: false },
                  { day: 5, isBelate: false },
                  { day: 4, isBelate: false },
                ],
              },
              {
                colList: [
                  { day: 3, isBelate: false },
                  { day: 2, isBelate: false },
                ],
              },
              { colList: [{ day: 1, isBelate: false }] },
            ],
            lineList: [
              {
                color: "紫色",
                text: "紫色:A ≥ 80",
              },
              {
                color: "白色",
                text: "白色:轮休、换班、请假",
              },
            ],
            peopleList: [
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
              {
                img: "./images/6.jpg",
                department: "企业服务科",
                name: "陈小文",
                month: "1月",
                grapeList: [
                  {
                    colList: [
                      { day: 31, isBelate: "" },
                      { day: 30, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: true },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ],
              },
            ],
            mockGrape: [],
          };
        },
        created: function () {
          this.serverPath = server_path;
        },
        methods: {
          getDate() {
            let now = new Date();
            let nowYear = now.getFullYear();
            let nowMonth = now.getMonth() + 1;
            // 大小月判断
            if (
              (nowMonth == 1 ||
                nowMonth == 3 ||
                nowMonth == 5 ||
                nowMonth == 7 ||
                nowMonth == 8 ||
                nowMonth == 10 ||
                nowMonth == 12) &&
              nowMonth != 2
            ) {
              console.log("这里不是2月,是大月31天");
              this.mockGrape = [
                {
                  colList: [
                    { day: 31, isBelate: "" },
                    { day: 30, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 29, isBelate: "" },
                    { day: 28, isBelate: "" },
                    { day: 27, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 26, isBelate: "" },
                    { day: 25, isBelate: "" },
                    { day: 24, isBelate: "" },
                    { day: 23, isBelate: "" },
                    { day: 22, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 21, isBelate: "" },
                    { day: 20, isBelate: "" },
                    { day: 19, isBelate: "" },
                    { day: 18, isBelate: "" },
                    { day: 17, isBelate: "" },
                    { day: 16, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 15, isBelate: "" },
                    { day: 14, isBelate: "" },
                    { day: 13, isBelate: "" },
                    { day: 12, isBelate: "" },
                    { day: 11, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 10, isBelate: "" },
                    { day: 9, isBelate: "" },
                    { day: 8, isBelate: "" },
                    { day: 7, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 6, isBelate: "" },
                    { day: 5, isBelate: "" },
                    { day: 4, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 3, isBelate: "" },
                    { day: 2, isBelate: "" },
                  ],
                },
                { colList: [{ day: 1, isBelate: "" }] },
              ];
            } else if (
              nowMonth != 2 &&
              (nowMonth == 4 ||
                nowMonth == 6 ||
                nowMonth == 9 ||
                nowMonth == 11)
            ) {
              console.log("这里不是2月,是小月30天");
              this.mockGrape = [
                {
                  colList: [
                    { day: 30, isBelate: "" },
                    { day: 29, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 28, isBelate: "" },
                    { day: 27, isBelate: "" },
                    { day: 26, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 25, isBelate: "" },
                    { day: 24, isBelate: "" },
                    { day: 23, isBelate: "" },
                    { day: 22, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 21, isBelate: "" },
                    { day: 20, isBelate: "" },
                    { day: 19, isBelate: "" },
                    { day: 18, isBelate: "" },
                    { day: 17, isBelate: "" },
                    { day: 16, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 15, isBelate: "" },
                    { day: 14, isBelate: "" },
                    { day: 13, isBelate: "" },
                    { day: 12, isBelate: "" },
                    { day: 11, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 10, isBelate: "" },
                    { day: 9, isBelate: "" },
                    { day: 8, isBelate: "" },
                    { day: 7, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 6, isBelate: "" },
                    { day: 5, isBelate: "" },
                    { day: 4, isBelate: "" },
                  ],
                },
                {
                  colList: [
                    { day: 3, isBelate: "" },
                    { day: 2, isBelate: "" },
                  ],
                },
                { colList: [{ day: 1, isBelate: "" }] },
              ];
            }
            // 2月润平年判断
            if (
              (nowYear % 4 == 0 && nowYear % 100 != 0) ||
              nowYear % 400 == 0
            ) {
              // 这里是闰年的2月,有29天
              if (nowMonth == 2) {
                console.log("这里是2月,闰年的,29天");
                this.mockGrape = [
                  {
                    colList: [
                      { day: 29, isBelate: "" },
                      { day: 28, isBelate: "" },
                      { day: 27, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 26, isBelate: "" },
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ];
              }
            } else {
              // 这里是平年的2月,只有28天
              if (nowMonth == 2) {
                console.log("这里是2月,平年的,28天");
                this.mockGrape = [
                  {
                    colList: [
                      { day: 28, isBelate: "" },
                      { day: 27, isBelate: "" },
                      { day: 26, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 25, isBelate: "" },
                      { day: 24, isBelate: "" },
                      { day: 23, isBelate: "" },
                      { day: 22, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 21, isBelate: "" },
                      { day: 20, isBelate: "" },
                      { day: 19, isBelate: "" },
                      { day: 18, isBelate: "" },
                      { day: 17, isBelate: "" },
                      { day: 16, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 15, isBelate: "" },
                      { day: 14, isBelate: "" },
                      { day: 13, isBelate: "" },
                      { day: 12, isBelate: "" },
                      { day: 11, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 10, isBelate: "" },
                      { day: 9, isBelate: "" },
                      { day: 8, isBelate: "" },
                      { day: 7, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 6, isBelate: "" },
                      { day: 5, isBelate: "" },
                      { day: 4, isBelate: "" },
                    ],
                  },
                  {
                    colList: [
                      { day: 3, isBelate: "" },
                      { day: 2, isBelate: "" },
                    ],
                  },
                  { colList: [{ day: 1, isBelate: "" }] },
                ];
              }
            }
          },
          getPeopleData() {
            var this_ = this;
            let mockdataa = [
              {
                userId: 1,
                name: "张三",
                username: "zhangsan哈哈",
                password:
                  "123123123123",
                gender: "1",
                status: 1,
                createUserId: null,
                windowId: "888888",
                deptId: "09090909090345",
                deptName:
                  "随便起的",
                roleId: "3,4,5",
                roleName: "善逸,甘露寺,小芭内",
                userImg: "123123.jpg",
                loginStatus: "Y",
                areaId: "123213123123",
                attendList: [
                  {
                    attendId: 6,
                    userId: "13",
                    attendDate: "2024-07-10",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 20,
                    userId: "13",
                    attendDate: "2024-07-09",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 39,
                    userId: "13",
                    attendDate: "2024-07-08",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 55,
                    userId: "13",
                    attendDate: "2024-07-05",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 65,
                    userId: "13",
                    attendDate: "2024-07-04",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 83,
                    userId: "13",
                    attendDate: "2024-07-03",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 93,
                    userId: "13",
                    attendDate: "2024-07-02",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 104,
                    userId: "13",
                    attendDate: "2024-07-01",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                ],
              },
              {
                userId: 6105820001,
                name: "善逸",
                username: "shanyi",
                password:
                  "678678678678",
                gender: "0",
                status: 1,
                windowId: null,
                deptId: null,
                deptName: null,
                roleId: "1",
                roleName: "哈哈",
                permission: null,
                userImg: "123/123/123/E1233/123123123-123123124.jpg",
                loginStatus: "Y",
                areaId: null,
                areaName: null,
                postIds: null,
                attendList: [
                  {
                    attendId: 17,
                    userId: "6105820001",
                    attendDate: "2024-07-09",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                  {
                    attendId: 77,
                    userId: "6105820001",
                    attendDate: "2024-07-08",
                    timeLength: null,
                    status: "0",
                    createTime: null,
                    updateTime: null,
                  },
                ],
              },
            ];
			// 这里发送请求
            axios
              .get(this.serverPath + "/haha/jiekou/renwu", {})
              .then(function (res) {
                if (res.data.code == 200) {
					// 这里模拟发送请求,请求回来的数据格式为mockdataa的数据格式
                  let dataa = res.data.data;
                  //   数据拼装
                  //   单独拼凑数组o防止数据层太深
                  //   最后拼凑进渲染数据
                  let o = dataa.map((it) => {
                    return {
                      name: it.name,
                      attendList: it.attendList,
                    };
                  });
                  let j;
                  o.map((item, index) => {
                    // 每次循环都将mockGrape初始化
                    this_.getDate();
                    j = this_.mockGrape;
                    j.forEach((it) => {
                      it.colList.map((i) => {
                        let a = item.attendList.find(
                          (itt) => this_.changeDate(itt.attendDate).day == i.day
                        );
                        if (a == undefined) {
                          i.isBelate = true;
                        } else {
                          i.isBelate = false;
                        }
                      });
                      return it;
                    });
                    o[index].attendList = j;
                  });
                  //   数据拼装
                  dataa.map((it) => {
                    it.attendList = o.find((i) => i.name == it.name).attendList;
                  });
                  this_.peopleList = dataa;
                }
              });
          },
          //   处理日期
		//   将日期分割开为{year:2024,month:3,day:3}处理为数字格式,匹配我们自己定义的数据格式
          changeDate(e) {
            let list = e.split("-");
            let year = list[0];
            let month = list[1];
            let day = list[2];
            return {
              year: Number(year),
              month: Number(month),
              day: Number(day),
            };
          },
        },
        mounted: function () {
          // console.log(this.getDate());
          this.getDate();
          this.getPeopleData();
        },
      });
    </script>
    <script src="js/polyfill.min.js"></script>
    <script src="js/jquery-1.11.2.js"></script>
    <script src="js/lib.js"></script>
    <script src="js/vue.js"></script>
    <script src="element-ui/index.js"></script>
    <script src="js/js.cookie.js"></script>
    <script src="js/sm2.js"></script>
    <script src="js/Util.js"></script>
  </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值