lrf402788946 5 years ago
parent
commit
752eda14ba
2 changed files with 46 additions and 28 deletions
  1. 1 1
      src/views/new-plan/arrange/arrange.vue
  2. 45 27
      src/views/new-plan/arrange/arrange/table.vue

+ 1 - 1
src/views/new-plan/arrange/arrange.vue

@@ -147,7 +147,7 @@ export default {
           batchnum: [
             {
               batch: 1,
-              startdate: '2020-07-01',
+              startdate: '2020-06-29',
               enddate: '2020-07-06',
               color: 'purple',
               class: [

+ 45 - 27
src/views/new-plan/arrange/arrange/table.vue

@@ -20,6 +20,7 @@
               :style="setVS(date, month, bi, ci)"
               :rowspan="toRowspan(date, month, bi, ci)"
               :colspan="toColspan(date, month, bi, ci)"
+              :id="`${bi}-${ci}`"
             >
               {{ getContent(date, month, bi, ci) || '' }}
             </td>
@@ -157,15 +158,8 @@ export default {
       } else {
         res = this.checkEvents(date, month, bi, true);
         if (res) {
-          let r = this.getEventsRowCol(date, month, res);
-          console.log(r);
-          // let { start, end } = res;
-          // date = this.pointToCross(date);
-          // let omr = this.outMonth(start, end);
-          // if (omr) rs = this.outLotsMonth(date, start, end, omr);
-          // //没跨越
-          // else rs = this.notOutMonthPro(date, start, end);
-          // console.log(rs);
+          let { row } = this.getEventsRowCol(date, month, res);
+          rs = row;
         }
       }
       return rs;
@@ -175,9 +169,15 @@ export default {
       if (date == '') return result;
       date = this.pointToCross(date);
       let ir = this.intersection(date);
-      //不在假期中的直接返回1就行,不处理
-      if (!ir) return result;
-      if (ir.length < 2) {
+      //不在假期中的 查看是否在事件中
+      if (!ir) {
+        let res = this.checkEvents(date, month, bi, true);
+        console.log(res);
+        if (res) {
+          let { col } = this.getEventsRowCol(date, month, res, bi);
+          result = col;
+        }
+      } else if (ir.length < 2) {
         //仅有1个假期,假期没有重合
         let r = this.pure(date, ir);
         result = r;
@@ -238,6 +238,7 @@ export default {
     },
     // '.' 日期转换 '-' 日期
     pointToCross(date) {
+      if (date.includes('-')) return date;
       let d = date.split('.');
       return moment(`${this.year}-${d[0]}-${d[1]}`).format(format);
     },
@@ -398,9 +399,8 @@ export default {
       if (!this.events) return res;
       date = this.pointToCross(date);
       let dml = _.get(this.list, month, []);
-      // let r = dml.find(f => f.find(ff => moment(date).isBetween(ff.start, ff.end, null, '[]')));
-      let bInfo = dml[bi];
-      let r = bInfo.find(ff => moment(date).isBetween(ff.start, ff.end, null, '[]'));
+      let bInfo = dml[bi]; //在不同期,同批次的数据 中 取出指定批次
+      let r = bInfo.find(ff => moment(date).isBetween(ff.start, ff.end, null, '[]')); //找到改时间点属于哪个期的数据
       if (r) {
         res = r;
       }
@@ -409,10 +409,22 @@ export default {
     //行列获取数据
     getEventsRowCol(date, month, data) {
       let { start, end, term, batch } = data;
+      let dml = _.get(this.list, month, []);
+      date = this.pointToCross(date);
       //TODO 需要确定这个格子合不合并
       //需要确定:1该天是这个批次的开始日期;2该格子是这个批次的第一行第一列
-      date = this.pointToCross(date);
-      let dml = _.get(this.list, month, []);
+      // 1: 将所有数据整理成一个列表
+      // 2: 将1的结果转换成按期分组;根据data可以知道 term,batch;使用term将期列表对应项取出来
+      // 3: 之后按batch 分组=>得到 期下批次列表=>批次列表按batch,name升序排序
+      // 4: 用data和期列表的第一项比较,如果不一致,说明不需要合并
+      let batchList = _.orderBy(
+        _.groupBy(dml.flat(), 'batch')[batch].filter(f => f.term == term),
+        ['batch', 'name'],
+        ['asc', 'asc']
+      );
+      if (!_.isEqual(data, _.head(batchList))) {
+        return { row: 0, col: 0 };
+      }
       //行合并数 = 所有数据按 期+批次分组 找到对应数量的班级
       let row = 1;
       //列合并数 = 该时间的班级的 开始时间 - 结束时间
@@ -428,16 +440,22 @@ export default {
       return { row, col };
     },
     getContent(date, month, bi, ci) {
-      let res = this.vacation.filter(f => {
-        let start = f.start;
-        let end = _.get(f, `end`, moment(start).format(format));
-        return moment(moment(`${this.year}-${date}`).format(format)).isBetween(start, end, null, '[]');
-      });
-      if (res.length > 0 && date != '') {
-        let r = res.map(i => i.title);
-        return r.join('/');
+      let r = this.checkVacation(date);
+      if (r) {
+        let res = this.vacation.filter(f => {
+          let start = f.start;
+          let end = _.get(f, `end`, moment(start).format(format));
+          return moment(moment(`${this.year}-${date}`).format(format)).isBetween(start, end, null, '[]');
+        });
+        if (res.length > 0 && date != '') {
+          let r = res.map(i => i.title);
+          return r.join('/');
+        }
+        return '';
+      } else {
+        r = this.checkEvents(date, month, bi);
+        if (r) return `第${r.term}期-第${r.batch}批`;
       }
-      return '';
     },
     //以下是html获取参数方法
     getRowNumber(month) {
@@ -446,7 +464,7 @@ export default {
     },
 
     toDisplay(month) {
-      return _.inRange(month, 7, 9);
+      return _.inRange(month, 6, 9);
     },
   },
   filters: {