docs: function type(data) {
        var result = [];
        for (var i = 0; i < data.values.length; i++) {
          var day = new Date(defaultYear + '-' + data.axisX[i]).getDay();
          var isWeekend = (day == 6 || day == 0) ? true : false;
          // object
          var o = {
            xAxis: data.axisX[i],
            isWeekend: isWeekend,
            all: ALL_MINUTE
          };
  
          var originData = data.values[i];
          var newData;
          if (typeof originData == 'string') {
            newData = originData.trim().split(' ');
          } else {
            newData = originData;
          }
          var len = newData.length;
          if (len >= 2) {
            var arr1 = newData[0].split(':');
            var arr2 = newData[len - 1].split(':');
            var t1 = parseInt(arr1[0]) * 60 + parseInt(arr1[1]); // 上班打卡时间
            var t2 = parseInt(arr2[0]) * 60 + parseInt(arr2[1]); // 下班打卡时间
  
            var AMBefore = 0; // 休息时间
            var AMOver = 0; // 预备时间,(超过阈值当作加班时间)
            var AMRest = 0; // 上午休息时间
            var AMLate = 0; // 上午迟到时间
            var AMWork = 0; // 上午工作时间
            var AMEarly = 0; // 上午早退时间
  
            var PMRest = 0; // 午休时间
            var PMLate = 0; // 下午迟到时间
            var PMWork = 0; // 下午工作时间
            var PMEarly = 0; // 下午早退时间
            var PMOver = 0; // 加班时间，非正常情况下特殊加班用
            var PMAfter = 0; // 休息时间
  
            if (t2 <= elasticFirst) {
              AMBefore = t1;
              AMOver = t2 - t1;
              AMRest = HALF_MINUTE - t2;
              AMLate = 0;
              AMWork = 0;
              AMEarly = 0;
  
              PMRest = 0;
              PMLate = 0;
              PMWork = 0;
              PMEarly = 0;
              PMOver = 0;
              PMAfter = HALF_MINUTE;
            } else if (t2 <= HALF_MINUTE) {
              AMBefore = t1;
              if (t1 < elasticFirst) {
                AMOver = elasticFirst - t1;
              } else {
                AMOver = 0;
              }
              AMRest = 0;
              if (t1 > elasticLatest) {
                AMLate = t1 - elasticLatest;
              } else {
                AMLate = 0;
              }
              if (t1 <= elasticFirst) {
                AMWork = t2 - elasticFirst;
              } else if (t1 > elasticFirst) {
                AMWork = t2 - t1;
              } else {
                AMWork = 0;
              }
              AMEarly = HALF_MINUTE - t2;
  
              PMRest = 0;
              PMLate = 0;
              PMWork = 0
              PMEarly = 0;
              PMOver = 0;
              PMAfter = HALF_MINUTE;
            } else if (t2 <= AFTERNOON_START && t1 >= HALF_MINUTE) {
              AMBefore = HALF_MINUTE;
              AMOver = 0;
              AMRest = 0;
              AMLate = 0;
              AMWork = 0;
              AMEarly = 0;
              PMRest = restMinute;
              PMLate = 0;
              PMWork = 0;
              PMEarly = 0;
              PMOver = 0;
              PMAfter = HALF_MINUTE - restMinute;
            } else if (t1 >= HALF_MINUTE) {
              AMBefore = HALF_MINUTE;
              AMOver = 0;
              AMRest = 0;
              AMLate = 0;
              AMWork = 0;
              AMEarly = 0;
              PMRest = restMinute;
              PMLate = t1 > AFTERNOON_START ? (t1 - AFTERNOON_START) : 0;
              PMWork = (t2 - (t1 < AFTERNOON_START ? AFTERNOON_START : t1) >= workMinute) ? workMinute : (t2 - (t1 < AFTERNOON_START ? AFTERNOON_START : t1));
              PMEarly = (t2 < AFTERNOON_FIRST) ? (AFTERNOON_FIRST - t2) : 0;
              PMOver = (PMWork < workMinute) ? 0 : (t2 - (t1 < AFTERNOON_START ? AFTERNOON_START : t1) - workMinute);
              PMAfter = ALL_MINUTE - (t2 < AFTERNOON_START ? AFTERNOON_START : t2) - PMEarly;
            } else if (t1 >= AFTERNOON_LATEST) {
              AMBefore = HALF_MINUTE;
              AMOver = 0;
              AMRest = 0;
              AMLate = 0;
              AMWork = 0;
              AMEarly = 0;
              PMRest = HALF_MINUTE - PMOver - PMAfter;
              PMLate = 0;
              PMWork = 0;
              PMEarly = 0;
              PMOver = t2 - t1;
              PMAfter = ALL_MINUTE - t2;
            } else {
              AMOver = t1 > elasticFirst ? 0 : (elasticFirst - t1);
              AMRest = 0;
              AMLate = t1 < elasticLatest ? 0 : t1 - elasticLatest;
              AMWork = HALF_MINUTE - (t1 >= elasticFirst ? t1 : elasticFirst);
              AMEarly = 0;
              AMBefore = t1 - AMLate;
  
              PMRest = restMinute;
              PMLate = 0;
              if (t2 < AFTERNOON_START) {
                PMWork = 0;
              } else {
                var temp = t2 - (t1 < elasticFirst ? elasticFirst : t1) - restMinute;
                PMWork = temp > workMinute ? (workMinute - AMWork) : (temp - AMWork);
              }
              if (t2 < AFTERNOON_LATEST) {
                PMEarly = workMinute - AMWork - PMWork;
              } else {
                PMEarly = 0;
              }
              PMOver = (t2 - (t1 < elasticFirst ? elasticFirst : t1) - restMinute - workMinute) > 0 ? (t2 - (t1 < elasticFirst ? elasticFirst : t1) - restMinute - workMinute) : 0;
              PMAfter = ALL_MINUTE - (t2 < AFTERNOON_START ? AFTERNOON_START : t2) - PMEarly;
            }
  
            o[STACK_LABEL[0]] = AMBefore;
            o[STACK_LABEL[1]] = AMOver;
            o[STACK_LABEL[2]] = AMRest;
            o[STACK_LABEL[3]] = AMLate;
            o[STACK_LABEL[4]] = AMWork;
            o[STACK_LABEL[5]] = AMEarly;
            o[STACK_LABEL[6]] = PMRest;
            o[STACK_LABEL[7]] = PMLate;
            o[STACK_LABEL[8]] = PMWork;
            o[STACK_LABEL[9]] = PMEarly;
            o[STACK_LABEL[10]] = PMOver;
            o[STACK_LABEL[11]] = PMAfter;
            console.log((AMBefore + AMOver+ AMRest + AMLate + AMWork + AMEarly) == (PMAfter + PMOver + PMRest + PMLate + PMWork + PMEarly));
            result.push(o);
          } else {
            o[STACK_LABEL[0]] = HALF_MINUTE;
            o[STACK_LABEL[1]] = 0;
            o[STACK_LABEL[2]] = 0;
            o[STACK_LABEL[3]] = 0;
            o[STACK_LABEL[4]] = 0;
            o[STACK_LABEL[5]] = 0;
            o[STACK_LABEL[6]] = 0;
            o[STACK_LABEL[7]] = 0;
            o[STACK_LABEL[8]] = 0;
            o[STACK_LABEL[9]] = 0;
            o[STACK_LABEL[10]] = 0;
            o[STACK_LABEL[11]] = HALF_MINUTE;
            result.push(o);
          }
        }
        return result;
      }