mo 5 lat temu
rodzic
commit
2c03548fdd

+ 16 - 6
src/api/buildTeam.js

@@ -226,11 +226,21 @@ export function setTeamTeacher (data) {
   })
 }
 
-// 获取所有的节假日 
-export function getHolidays (data) {
+// // 获取所有的节假日 
+// export function getHolidays (data) {
+//   return request({
+//     url: '/jiari/',
+//     method: 'post',
+//     data: qs.stringify(data)
+//   })
+// }
+
+// 根据合奏班获取合奏班下的所有单技能班
+
+export function getAllSignClass (data) {
   return request({
-    url: '/jiari/',
-    method: 'post',
-    data: qs.stringify(data)
+    url: '/web-server/classGroup/findClassGroupAboutMix',
+    method: 'get',
+    params: data
   })
-}
+}

+ 0 - 1
src/utils/vueFilter.js

@@ -29,5 +29,4 @@ Vue.filter('formatTimer', (value) => {
   } else {
     return value
   }
-
 })

+ 192 - 174
src/views/teamBuild/teamSeting/components/coursePlan.vue

@@ -2,24 +2,30 @@
   <div class='course-container'>
     <div class="left">
       <el-form :model="leftFrom"
+               ref='leftFrom'
+               :rules="leftRules"
                :inline="true">
-        <el-form-item label="合奏班">
-          <el-select v-model="leftFrom.all">
+        <el-form-item label="合奏班"
+                      prop='all'>
+          <el-select v-model="leftFrom.all"
+                     @change="changeMixClass">
             <el-option v-for="(item,index) in maxClassList"
                        :key='index'
                        :value="item.id"
                        :label="item.name"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="排课起始时间">
+        <el-form-item label="排课起始时间"
+                      prop="time">
+          <!-- value-format="yyyy-MM-dd" -->
           <el-date-picker v-model="leftFrom.time"
                           align="right"
                           type="date"
-                          value-format="yyyy-MM-dd"
                           placeholder="选择日期">
           </el-date-picker>
         </el-form-item>
-        <el-form-item label="排课次数">
+        <el-form-item label="排课次数"
+                      prop="num">
           <el-input type="number"
                     v-model="leftFrom.num"></el-input>
         </el-form-item>
@@ -27,10 +33,13 @@
       <p>周次循环<span style="margin-left:10px;">上课时间</span></p>
       <div class="checkWrap">
         <el-checkbox-group v-model="checkList">
-          <div class="chioseday">
-            <el-checkbox label="周一"></el-checkbox>
+          <div class="chioseday"
+               v-for="(item,index) in week"
+               :key="index">
+            <el-checkbox :label="index"
+                         v-model="item.isCheck">{{item.name}}</el-checkbox>
             <el-time-select placeholder="起始"
-                            v-model="week.Monday.startTime"
+                            v-model="item.startTime"
                             :picker-options="{
                              start: '06:30',
                              step: '00:05',
@@ -39,140 +48,15 @@
             </el-time-select>
 
             <el-time-select placeholder="结束"
-                            v-model="week.Monday.endTime"
+                            v-model="item.endTime"
                             :picker-options="{
                             start: '08:30',
                             step: '00:15',
                             end: '23:30',
-                            minTime: week.Monday.startTime
+                            minTime: item.startTime
                                             }">
             </el-time-select>
           </div>
-          <div class="chioseday">
-            <el-checkbox label="周二"></el-checkbox>
-            <el-time-select placeholder="起始"
-                            v-model="week.Tuesday.startTime"
-                            :picker-options="{
-                             start: '06:30',
-                             step: '00:05',
-                             end: '18:30'
-                                            }">
-            </el-time-select>
-            <el-time-select placeholder="结束"
-                            v-model="week.Tuesday.endTime"
-                            :picker-options="{
-                            start: '08:30',
-                            step: '00:15',
-                            end: '23:30',
-                            minTime: week.Tuesday.startTime
-                                            }">
-            </el-time-select>
-          </div>
-          <div class="chioseday">
-            <el-checkbox label="周三"></el-checkbox>
-            <el-time-select placeholder="起始"
-                            v-model="week.Wednesday.startTime"
-                            :picker-options="{
-                             start: '06:30',
-                             step: '00:05',
-                             end: '18:30'
-                                            }">
-            </el-time-select>
-
-            <el-time-select placeholder="结束"
-                            v-model="week.Wednesday.endTime"
-                            :picker-options="{
-                            start: '08:30',
-                            step: '00:15',
-                            end: '23:30',
-                            minTime: week.Monday.startTime
-                                            }">
-            </el-time-select>
-          </div>
-          <div class="chioseday">
-            <el-checkbox label="周四"></el-checkbox>
-            <el-time-select placeholder="起始"
-                            v-model="week.Thursday.startTime"
-                            :picker-options="{
-                             start: '06:30',
-                             step: '00:05',
-                             end: '18:30'
-                                            }">
-            </el-time-select>
-
-            <el-time-select placeholder="结束"
-                            v-model="week.Thursday.endTime"
-                            :picker-options="{
-                            start: '08:30',
-                            step: '00:15',
-                            end: '23:30',
-                            minTime: week.Thursday.startTime
-                                            }">
-            </el-time-select>
-          </div>
-          <div class="chioseday">
-            <el-checkbox label="周五"></el-checkbox>
-            <el-time-select placeholder="起始"
-                            v-model="week.Friday.startTime"
-                            :picker-options="{
-                             start: '06:30',
-                             step: '00:05',
-                             end: '18:30'
-                                            }">
-            </el-time-select>
-
-            <el-time-select placeholder="结束"
-                            v-model="week.Friday.endTime"
-                            :picker-options="{
-                            start: '08:30',
-                            step: '00:15',
-                            end: '23:30',
-                            minTime: week.Friday.startTime
-                                            }">
-            </el-time-select>
-          </div>
-          <div class="chioseday">
-            <el-checkbox label="周六"></el-checkbox>
-            <el-time-select placeholder="起始"
-                            v-model="week.Saturday.startTime"
-                            :picker-options="{
-                             start: '06:30',
-                             step: '00:05',
-                             end: '18:30'
-                                            }">
-            </el-time-select>
-
-            <el-time-select placeholder="结束"
-                            v-model="week.Saturday.endTime"
-                            :picker-options="{
-                            start: '08:30',
-                            step: '00:15',
-                            end: '23:30',
-                            minTime: week.Saturday.startTime
-                                            }">
-            </el-time-select>
-          </div>
-          <div class="chioseday">
-            <el-checkbox label="周日"></el-checkbox>
-            <el-time-select placeholder="起始"
-                            v-model="week.Sunday.startTime"
-                            :picker-options="{
-                             start: '06:30',
-                             step: '00:10',
-                             end: '18:30'
-                                            }">
-            </el-time-select>
-
-            <el-time-select placeholder="结束"
-                            v-model="week.Sunday.endTime"
-                            :picker-options="{
-                            start: '08:30',
-                            step: '00:10',
-                            end: '23:30',
-                            minTime: week.Sunday.startTime
-                            }">
-            </el-time-select>
-          </div>
         </el-checkbox-group>
         <div class="holidayWrap">
           <el-checkbox v-model="isholiday">跳过节假日</el-checkbox>
@@ -187,32 +71,34 @@
     </div>
     <div class="right">
       <el-table :data='tableList'>
-        <el-table-column prop="date"
-                         label="课次"
-                         width="180">
+        <el-table-column label="课次">
+          <template slot-scope="scope">
+            <div>
+              {{ scope.$index+1 }}
+            </div>
+          </template>
         </el-table-column>
-        <el-table-column prop="date"
+        <el-table-column prop="dateString"
                          label="日期"
                          width="180">
         </el-table-column>
-        <el-table-column prop="date"
+        <el-table-column prop="week"
                          label="星期"
                          width="180">
         </el-table-column>
-        <el-table-column prop="date"
+        <el-table-column prop="type"
                          label="课程类型"
                          width="180">
         </el-table-column>
-        <el-table-column prop="date"
+        <el-table-column prop="name"
                          label="课程名称"
                          width="180">
         </el-table-column>
-        <el-table-column prop="date"
+        <el-table-column prop="classTime"
                          label="上课时间"
                          width="180">
         </el-table-column>
-        <el-table-column prop="date"
-                         label="操作"
+        <el-table-column label="操作"
                          width="180">
           <template slot-scope="scope">
             <div>
@@ -231,7 +117,7 @@
   </div>
 </template>
 <script>
-import { getAllClass, getHolidays } from '@/api/buildTeam'
+import { getAllClass, getAllSignClass } from '@/api/buildTeam'
 import axios from 'axios'
 import qs from 'qs'
 export default {
@@ -250,38 +136,63 @@ export default {
       },
       tableList: [],
       checkList: [],
-      week: {
-        Monday: {
+      week: [
+        {
           startTime: '',
-          endTime: ''
+          endTime: '',
+          isCheck: false,
+          name: '星期日'
         },
-        Tuesday: {
+        {
           startTime: '',
-          endTime: ''
+          endTime: '',
+          isCheck: false,
+          name: '星期一'
         },
-        Wednesday: {
+        {
           startTime: '',
-          endTime: ''
+          endTime: '',
+          isCheck: false,
+          name: '星期二'
         },
-        Thursday: {
+        {
           startTime: '',
-          endTime: ''
+          endTime: '',
+          isCheck: false,
+          name: '星期三'
         },
-        Friday: {
+        {
           startTime: '',
-          endTime: ''
+          endTime: '',
+          isCheck: false,
+          name: '星期四'
         },
-        Saturday: {
+        {
           startTime: '',
-          endTime: ''
+          endTime: '',
+          isCheck: false,
+          name: '星期五'
         },
-        Sunday: {
+        {
           startTime: '',
-          endTime: ''
-        }
-      },
-      maxClassList: [],
-      isholiday: false
+          endTime: '',
+          isCheck: false,
+          name: '星期六'
+        },
+
+      ],
+      weekDay: ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"],
+      maxClassList: [], // 所有的合奏班
+      activeSingleList: [], // 合奏班下的所有单技班
+      isholiday: false,
+      classCardList: [], //这个是传给后台的真正数据集合
+      allChioseDate: [], // 记录所有准备排课的日期
+      holidayList: [],
+      leftRules: {
+        all: [{ required: true, message: '请输选择合奏班', trigger: 'blur' }],
+        time: [{ required: true, message: '请选择排课时间', trigger: 'blur' }],
+        num: [{ required: true, message: '请输入排课次数', trigger: 'blur' }]
+      }
     }
   },
   mounted () {
@@ -294,17 +205,124 @@ export default {
     // getHolidays({ d: '20191016' }).then(res => {
 
     // })
-    axios.post('/jiari/', qs.stringify({ d: '20191016,20191017' })).then(res => {
-      console.log(res.data);
+    let year = new Date().getFullYear();
+    axios.post('/jiari/', qs.stringify({ d: year })).then(res => {
+      this.holidayList = Object.keys(res.data[year])
+      // this.holidayList = res.data[year]
+      // console.log(this.holidayList)
     })
+
   },
   methods: {
     classCard () {
-      // 首先拍出合奏班的课程
-      // 1.从什么时候开始排
-      // 2.周几排
-      // 3.一共排多少节
-      console.log(this.leftFrom.time)
+      let flag = false
+      this.$refs['leftFrom'].validate(val => {
+        if (val) {
+          flag = true
+        }
+      })
+      if (!flag) {
+        this.$message.error('请填写必要参数在进行排课')
+        return;
+      }
+
+      let classCount = parseInt(this.leftFrom.num);
+      let date = this.leftFrom.time;
+      let startWeekday = this.leftFrom.time.getDay();
+      // 第一次循环把所有要排的时间记录下来 请求接口 判断是否节假日 
+      while (classCount && classCount > 0) {
+
+        for (let i in this.checkList) {
+          let num; // 下次上课上几天后
+          this.checkList[i] - date.getDay() >= 0 ? num = this.checkList[i] : num = this.checkList[i] - date.getDay() + 7
+          let dataStr = this.getThinkDate(date, num);
+          let monthDay = this.getThinkDate(date, num, 2)
+          if (this.isholiday) {
+            if (this.holidayList.indexOf(monthDay) != -1) {
+              // 这里说明有节假日
+              continue
+            }
+          }
+          let className;
+          this.maxClassList.map(item => {
+            if (item.id == this.leftFrom.all) {
+              className = item.name;
+              return item.name
+            }
+          })
+          // 排的是合奏班 
+          this.tableList.push({
+            'dateString': dataStr,
+            'week': this.week[this.checkList[i]].name,
+            'type': 'SINGLE',
+            'id': this.leftFrom.all,
+            date,
+            'name': className,
+            'classTime': this.week[this.checkList[i]].startTime + '-' + this.week[this.checkList[i]].endTime
+          })
+          // 这里我排单技课
+          for (let j in this.activeSingleList) {
+            this.classCardList.push({
+              'classDate': dataStr,
+              'classGroupId': this.activeSingleList[j].id,
+              'startClassTime': this.week[this.checkList[i]].startTime,
+              'endClassTime': this.week[this.checkList[i]].endTime,
+              'type': 'SINGLE',
+              'mixid': this.activeSingleList[j].mixid
+            })
+          }
+          classCount--
+          if (classCount == 0) break
+        }
+      }
+      // console.log(this.tableList)
+      // 清除现在所选的值
+      this.$refs['leftFrom'].resetFields();
+      this.week = this.$options.data().week;
+      this.checkList = [];
+    },
+    chioseWeek (val) {
+    },
+    getThinkDate (date, num, type = 1) {
+
+      let Stamp = date;
+      Stamp.setDate(date.getDate() + num) // 获取当前月数的第几天
+      // console.log(date.getMonth() + 1)
+      // console.log(Stamp.getMonth() + 1)
+      var year = Stamp.getFullYear(); //获取完整的年份(4位,1970-????)
+      var month = Stamp.getMonth() + 1; //获取当前月份(0-11,0代表1月)
+      var mvar = '';
+      if (month < 10) {
+        mvar = '0' + month;
+      } else {
+        mvar = month + '';
+      }
+      var day = Stamp.getDate();
+      var dvar = '';
+      if (day < 10) {
+        dvar = '0' + day;
+      } else {
+        dvar = day + '';
+      }
+      if (type == 2) {
+        return mvar + dvar;
+      } else {
+        return year + "-" + mvar + '-' + dvar;
+      }
+
+    },
+
+    changeMixClass (val) {
+      // 根据合奏班id获取合奏班下的所有单技班
+      this.activeSingleList = [];
+      getAllSignClass({ musicGroupId: this.teamid, mixClassGroupId: val }).then(res => {
+        if (res.code == 200) {
+          this.activeSingleList = res.data.map(item => {
+            item.mixid = val
+            return item;
+          });
+        }
+      })
     }
   },
 
@@ -318,8 +336,8 @@ export default {
   flex-direction: row;
   justify-content: flex-start;
   .left {
-    width: 300px;
-    min-width: 300px;
+    width: 330px;
+    min-width: 330px;
     margin-right: 90px;
     .chioseday {
       margin-top: 20px;