<template>
  <!-- m-container -->
  <div class>
    <!-- <h2>
      <div class='squrt'></div>
      班级调整
    </h2>-->
    <div class="m-core">
      <el-form :inline="true" :model="topForm">
        <el-form-item label="班级类型">
          <el-select v-model.trim="topForm.classType" clearable filterable @change="changeMixClass">
            <el-option
              v-for="(item,index) in classTypeList"
              :key="index"
              :label="item.label"
              :value="item.value"
            ></el-option>
          </el-select>
        </el-form-item>
      </el-form>
      <div class="tableWrap" style>
        <el-table
          :data="activeSingleList"
          style
          :header-cell-style="{background:'#EDEEF0',color:'#444'}"
        >
          <el-table-column align="center" prop="name" label="班级名称"></el-table-column>
          <el-table-column align="center" prop="type" label="班级类型">
            <template slot-scope="scope">
              <div>{{ scope.row.type | classType }}</div>
            </template>
          </el-table-column>
          <el-table-column align="center" prop="studentNum" label="班级人数"></el-table-column>
          <el-table-column align="center" prop label="主教老师">
            <template slot-scope="scope">
              <div v-if="scope.row.classGroupTeacherMapperList">
                <p
                  v-for="(item,index) in scope.row.classGroupTeacherMapperList"
                  v-if="item.teacherRole == 'BISHOP'"
                  :key="index"
                >{{item.userName}}</p>
              </div>
            </template>
          </el-table-column>
          <el-table-column align="center" label="助教老师">
            <template slot-scope="scope">
              <div v-if="scope.row.classGroupTeacherMapperList">
                <p
                  v-for="(item,index) in scope.row.classGroupTeacherMapperList"
                  v-if="item.teacherRole == 'TEACHING'"
                  :key="index"
                >{{item.userName}}</p>
              </div>
            </template>
          </el-table-column>
          <el-table-column align="center" label="已上课时">
            <template slot-scope="scope">
              <div>{{scope.row.currentClassTimes}}</div>
            </template>
          </el-table-column>
          <el-table-column align="center" label="总课数">
            <template slot-scope="scope">
              <div>{{scope.row.totalClassTimes}}</div>
            </template>
          </el-table-column>
          <el-table-column align="center" width="400px" label="操作">
            <template slot-scope="scope">
              <div>
                <!-- v-if="scope.row.type !='MIX'" -->
                <el-button type="text" @click="resetClass(scope.row)">学员调整</el-button>
                <el-button type="text" @click="classAdjustment(scope.row)">班级调整</el-button>
                <!--<el-button type="text"
                @click="recourse(scope.row)">重新排课</el-button>-->
                <el-popover placement="top" width="160" :ref="scope.$index">
                  <p>确定删除?</p>
                  <div style="text-align: right; margin: 0">
                    <el-button
                      size="mini"
                      type="text"
                      @click="scope._self.$refs[scope.$index].doClose()"
                    >取消</el-button>
                    <el-button type="primary" size="mini" @click="removeClass(scope)">确定</el-button>
                  </div>
                  <!-- v-if="scope.row.type !='MIX'" -->
                  <el-button type="text" slot="reference">删除班级</el-button>
                </el-popover>

                <el-popover placement="top" width="160" :ref="scope.$index">
                  <p>是否清空课表?</p>
                  <div style="text-align: right; margin: 0">
                    <el-button
                      size="mini"
                      type="text"
                      @click="scope._self.$refs[scope.$index].doClose()"
                    >取消</el-button>
                    <el-button type="primary" size="mini" @click="clearCourse(scope)">确定</el-button>
                  </div>
                  <!-- v-if="scope.row.type !='MIX'" -->
                  <el-button type="text" slot="reference">清空课表</el-button>
                </el-popover>
              </div>
            </template>
          </el-table-column>
        </el-table>
        <div class="floor">
          <div class="add" @click="temporary">新建临时班</div>
          <div class="add" @click="addNewClass('NORMAL')">新建单技班</div>
          <div class="add" @click="addNewClass('MIX')">新建合奏班</div>
          <div class="add" @click="addNewClass('HIGH')">基础技能班</div>
        </div>
      </div>
    </div>
    <!-- 学员选择 -->
    <el-dialog
      title="学员选择"
      width="700px"
      :visible.sync="studentVisible"
      :modal-append-to-body="false"
    >
      <div class="studentMask">
        <div class="left">
          <div class="wrap">
            <el-input placeholder="请输入班级名称" :disabled="!isNewClass" v-model.trim="className"></el-input>
          </div>
          <div class="chioseStudentList">
            <h4 style="padding-left:10px;">当前已选学员</h4>
            <div class="studentItem" v-for="(item,index) in activeListStudent" :key="index">
              {{ item.name }}
              <el-popover
                v-if="!isNewClass"
                placement="top"
                v-model.trim="item.isVisible"
                width="160"
              >
                <p>确定删除?</p>
                <div style="text-align: right; margin: 0">
                  <el-button size="mini" type="text" @click="item.isVisible = false">取消</el-button>
                  <el-button type="primary" size="mini" @click="removeStudent(item)">确定</el-button>
                </div>
                <el-button type="text" slot="reference">删除</el-button>
              </el-popover>
              <el-button v-if="isNewClass" type="text" @click="temporaryRemoveStudent(item)">删除</el-button>
            </div>
          </div>
        </div>
        <div class="right">
          <!--  multiple
          collapse-tags-->
          <el-select
            v-if="isSearch"
            v-model.trim="activeChioseSound"
            style="width:180px"
            @change="searchStudent"
            clearable
            filterable
            placeholder="声部选择"
          >
            <el-option
              v-for="(item,index) in soundList"
              :key="index"
              :label="item.name"
              :value="item.id"
            ></el-option>
          </el-select>
          <!-- <el-button v-if="isSearch"
                     type="danger"
                     style="margin-left:20px;"
          @click="searchStudent">搜索</el-button>-->

          <!--   列表开始  -->
          <div class="tableList">
            <el-table
              tooltip-effect="dark"
              v-if="!isNewClass"
              style="width: 100%; margin-top:10px;"
              :data="studentList"
              ref="studentList"
              @selection-change="SelectionStudent"
            >
              <el-table-column type="selection" align="center" width="55"></el-table-column>
              <el-table-column prop="name" align="center" width="120" label="姓名"></el-table-column>
              <el-table-column prop="gender" align="center" width="100" label="性别">
                <template slot-scope="scope">
                  <div>{{ scope.row.gender | sex }}</div>
                </template>
              </el-table-column>
              <el-table-column prop="subjectName" width="100" align="center" label="学员声部"></el-table-column>
            </el-table>
            <!-- 临时调整table -->
            <el-table
              tooltip-effect="dark"
              v-if="isNewClass"
              style="width: 100%; margin-top:10px;"
              :data="studentList"
              ref="temporaryStudentList"
              @selection-change="NewselectionStudent"
            >
              <el-table-column type="selection" align="center" width="55"></el-table-column>
              <el-table-column prop="name" align="center" width="120" label="姓名"></el-table-column>
              <el-table-column prop="gender" align="center" width="100" label="性别">
                <template slot-scope="scope">
                  <div>{{ scope.row.gender | sex }}</div>
                </template>
              </el-table-column>
              <el-table-column prop="subjectName" width="100" align="center" label="学员声部"></el-table-column>
            </el-table>
          </div>
        </div>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="studentVisible = false">取 消</el-button>
        <!-- 班级学员修改 -->
        <el-button type="primary" v-if="!isNewClass" @click="addSomeStudent">确 定</el-button>
        <!-- 临时调整或者新建班级 -->
        <el-button type="primary" v-if="isNewClass" @click="setInfoMsg">确 定</el-button>
      </div>
    </el-dialog>
    <!-- 老师以及课程设置 -->
    <el-dialog title="班级设置" width="700px" :visible.sync="infoVisible" :modal-append-to-body="false">
      <el-form
        :inline="true"
        :model="teacherForm"
        ref="teacherForm"
        :rules="teacherRules"
        label-position="right"
        label-width="100px;"
      >
        <!-- <el-form-item label="合奏班"
                      v-if='!isTemporary&&activeType=="NORMAL"'
                      prop="mixClassGroupId">
          <el-select v-model.trim="teacherForm.mixClassGroupId">
            <el-option v-for="(item,index) in maxClassList"
                       :label="item.name"
                       :key="index"
                       :value="item.id"></el-option>
          </el-select>
        </el-form-item>-->
        <el-form-item label="调整方式" v-if="!isNewClass" prop="isAdd">
          <el-radio v-model.trim="teacherForm.isAdd" label="new">班级加课</el-radio>
          <el-radio v-model.trim="teacherForm.isAdd" label="renew">重新排课</el-radio>
          <el-radio v-model.trim="teacherForm.isAdd" label="onlyUpdateTeacher">修改老师</el-radio>
        </el-form-item>
        <br />
        <el-form-item label="主教老师" prop="coreTeacher">
          <el-select v-model.trim="teacherForm.coreTeacher" clearable filterable>
            <el-option
              v-for="(item,index) in teacherList"
              :key="index"
              :label="item.realName"
              :value="item.id"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="助教老师" prop="assistant">
          <el-select
            v-model.trim="teacherForm.assistant"
            filterable
            clearable
            @change="setAssistant"
            multiple
          >
            <el-option
              v-for="(item,index) in cooperationList"
              :key="index"
              :label="item.realName"
              :value="item.id"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="课程类型" prop="courseType" v-if="teacherForm.isAdd !='onlyUpdateTeacher'">
          <el-select v-model.trim="teacherForm.courseType" clearable filterable>
            <el-option
              v-for="(item,index) in courseTypeList"
              :key="index"
              :value="item.value"
              :label="item.label"
            ></el-option>
          </el-select>
        </el-form-item>
        <br />
        <el-form-item label="排课次数" prop="courseNum" v-if="teacherForm.isAdd !='onlyUpdateTeacher'">
          <el-input type="number" @mousewheel.native.prevent v-model.trim="teacherForm.courseNum"></el-input>
        </el-form-item>
        <el-form-item
          label="排课起始时间"
          prop="courseTime"
          v-if="teacherForm.isAdd !='onlyUpdateTeacher'"
        >
          <el-date-picker
            v-model.trim="teacherForm.courseTime"
            :picker-options="pickerOptions"
            style="width:200px!important;"
            type="date"
            value-format="yyyy-MM-dd"
            placeholder="选择日期"
          ></el-date-picker>
          <el-checkbox style="margin-left:10px;" v-model.trim="teacherForm.checked">是否跳过节假日</el-checkbox>
        </el-form-item>
      </el-form>
      <div class="WeekWrap" v-if="teacherForm.isAdd !='onlyUpdateTeacher'">
        <h3 style="margin-bottom:20px;">
          循环次数
          <el-button type="text" style="margin-left:10px;" @click="addWeek">添加</el-button>
        </h3>
        <div class="countWrap" style="margin-bottom:10px;">
          <div
            class="countItem"
            style="margin-bottom:20px;"
            v-for="(item,index) in weekList"
            :key="index"
          >
            <span>循环周期:</span>
            <el-select v-model.trim="item.dayOfWeek" clearable filterable>
              <el-option
                v-for="(item,index) in weekDateList"
                :key="index"
                :label="item.label"
                :value="item.value"
              ></el-option>
            </el-select>
            <span>开始时间</span>
            <el-time-select
              placeholder
              v-model.trim="item.startClassTime"
              :picker-options="{
                               start: '04:30',
                               step: '00:05',
                               end: '23:55'
            }"
            ></el-time-select>
            <span>结束时间</span>
            <el-time-select
              placeholder
              v-model.trim="item.endClassTime"
              :picker-options="{
                              start: '04:30',
                              step: '00:05',
                              end: '23:55',
                              minTime:item.startClassTime
            }"
            ></el-time-select>
            <el-button type="danger" @click="removeWeek(item)" icon="el-icon-delete" circle></el-button>
          </div>
        </div>
      </div>
      <div slot="footer" class="dialog-footer">
        <!-- 1为临时班级 -->
        <el-button type="primary" v-if="isTemporary&&isNewClass" @click="submitTemporary(1)">确 定</el-button>
        <!-- 2为新增班级 -->
        <el-button type="primary" v-if="!isTemporary&&isNewClass" @click="submitTemporary(2)">确 定</el-button>
        <!-- 修改班级信息 -->
        <el-button type="primary" v-if="!isNewClass" @click="submitTemporary(3)">确 定</el-button>
      </div>
    </el-dialog>
    <!-- 新增合奏班 -->
    <el-dialog title="新增合奏班" width="700px" :visible.sync="MixVisible" :modal-append-to-body="false">
      <div class="studentMask">
        <div class="left">
          <div class="wrap">
            <!-- :disabled="!isNewClass" -->
            <el-input placeholder="请输入合奏班名称" v-model.trim="className"></el-input>
          </div>
          <div class="chioseStudentList">
            <h4 style="padding-left:10px;">当前已选学生</h4>
            <div class="studentItem" v-for="(item,index) in activeListStudent" :key="index">
              {{ item.name }}
              <el-button type="text" @click="removeSiginforMix(item)">删除班级</el-button>
            </div>
          </div>
        </div>
        <div class="right">
          <!--   列表开始  -->
          <div class="tableList">
            <el-table
              tooltip-effect="dark"
              style="width: 100%; margin-top:10px;"
              :data="singleList"
              ref="mixList"
              @selection-change="SelectionMix"
            >
              <el-table-column type="selection" align="center" width="55"></el-table-column>
              <el-table-column prop="name" align="center" width="120" label="姓名"></el-table-column>
              <el-table-column prop="gender" align="center" width="100" label="性别">
                <template slot-scope="scope">
                  <div>{{ scope.row.gender | sex }}</div>
                </template>
              </el-table-column>
              <el-table-column prop="subjectName" width="120" align="center" label="学员声部"></el-table-column>
            </el-table>
          </div>
        </div>
      </div>
      <div slot="footer" class="dialog-footer">
        <el-button @click="studentVisible = false">取 消</el-button>
        <!-- 班级学员修改 -->
        <el-button type="primary" v-if="!isNewClass" @click="addSomeStudent">确 定</el-button>
        <!-- 临时调整或者新建班级 -->
        <el-button type="primary" v-if="isNewClass" @click="setInfoMsg">确 定</el-button>
      </div>
    </el-dialog>
    <!-- 班级调整 -->
    <!-- <el-dialog title="班级调整"
               width="500px"
               :visible.sync="resetClassVisible"
               :modal-append-to-body="false">
      <el-form :model="resetClassForm"
               class="resetClassForm">
        <el-form-item label="主教老师">
          <el-select v-model.trim="resetClassForm.coreTeacher">
            <el-option v-for="(item,index) in teacherList"
                       :key="index"
                       :label="item.realName"
                       :value="item.id"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="助教老师">
          <el-select v-model.trim="resetClassForm.assistant"
                     filterable
                     @change="setAssistant"
                     multiple>
            <el-option v-for="(item,index) in cooperationList"
                       :key="index"
                       :label="item.realName"
                       :value="item.id"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="开始时间">
          <el-time-select placeholder="开始时间"
                          v-model.trim="resetClassForm.startTime"
                          :picker-options="{
                            start: '06:30',
                            step: '00:05',
                            end: '23:30'
                            }">
          </el-time-select>
        </el-form-item>
        <el-form-item label="结束时间">
          <el-time-select placeholder="结束时间"
                          v-model.trim="resetClassForm.endTime"
                          :picker-options="{
                            start: '06:30',
                            step: '00:05',
                            end: '23:30',
                            minTime:resetClassForm.startTime
                            }">
          </el-time-select>
        </el-form-item>
      </el-form>
      <div slot="footer"
           class="dialog-footer">
        <el-button @click="resetClassVisible = false">取 消</el-button>
        <el-button type="primary"
                   @click="">确 定</el-button>
      </div>
    </el-dialog>-->
    <!-- 重新排课 -->
    <!-- <el-dialog title="重新排课"
               width="700px"
               :visible.sync="resetCourseVisible"
               :modal-append-to-body="false">
      <el-form :model="recourseForm"
               label-width="120px"
               label-position="right">
        <p style="border-bottom:1px solid #ccc; padding-bottom:10px; font-size:16px; margin-bottom:30px;">上课时间设置</p>
        <el-form-item label="课程类型">
          <el-select v-model.trim="recourseForm.courseType">
            <el-option v-for="(item,index) in courseTypeList"
                       :key="index"
                       :value="item.value"
                       :label="item.label"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="排课起始时间">
          <el-date-picker v-model.trim="recourseForm.courseTime"
                          style="width:200px;"
                          type="date"
                          value-format="yyyy-MM-dd"
                          placeholder="选择日期">
          </el-date-picker>
          <el-checkbox style='margin-left:10px;'
                       v-model.trim="recourseForm.checked">是否跳过节假日</el-checkbox>
        </el-form-item>
      </el-form>
      <div class="WeekWrap">
        <p style="border-bottom:1px solid #ccc; padding-bottom:10px; font-size:16px; margin-bottom:30px;">
          循环次数 <el-button type="text"
                     style='margin-left:10px;'
                     @click="addWeek">添加</el-button>
        </p>
        <div class="countWrap"
             style="margin-bottom:10px;">
          <div class="countItem"
               style="margin-bottom:20px;"
               v-for="(item,index) in weekList"
               :key="index">
            <span>循环周期: </span>
            <el-select v-model.trim="item.dayOfWeek">
              <el-option v-for="(item,index) in weekDateList"
                         :key='index'
                         :label="item.label"
                         :value="item.value"></el-option>
            </el-select>
            <span>开始时间</span>
            <el-time-select placeholder=""
                            v-model.trim="item.startClassTime"
                            :picker-options="{
                               start: '08:30',
                               step: '00:05',
                               end: '23:55'
            }">
            </el-time-select>
            <span>结束时间</span>
            <el-time-select placeholder=""
                            v-model.trim="item.endClassTime"
                            :picker-options="{
                              start: '08:30',
                              step: '00:05',
                              end: '23:55',
                              minTime:item.startClassTime
            }">
            </el-time-select>
            <el-button type="danger"
                       @click="removeWeek(item)"
                       icon="el-icon-delete"
                       circle></el-button>
          </div>
        </div>
      </div>
      <div slot="footer"
           class="dialog-footer">
        <el-button @click="resetCourseVisible = false">取 消</el-button>
        <el-button type="primary"
                   @click="">确 定</el-button>
      </div>
    </el-dialog>-->
  </div>
</template>
<script>
import {
  getAllClass,
  getAllSignClassandTeacher,
  getAllSignClass,
  removeSingleClass,
  getNoClassStudentAll,
  findSound,
  teamSoundStudent,
  findMusicGroupClassTeacher,
  revisionClassGroup,
  revisionAddClassGroup,
  getEmployeeOrgan,
  getTeacher,
  findNoClassSingle,
  getMusicGroupStuNoClassType,
  classGroupUpdate,
  getTeamBaseInfo,
  clearClassCourse
} from "@/api/buildTeam";
import {
  getClassAllStudent,
  removeStudents,
  addStudents
} from "@/api/studentManager";
import { queryEmployByOrganId } from "@/api/systemManage";

import axios from "axios";
import qs from "qs";
export default {
  name: "tresetClass",
  data() {
    return {
      pickerOptions: {
        disabledDate(time) {
          return time.getTime() + 86400000 <= new Date().getTime();
        }
      },
      teamid: "",
      topForm: {
        classType: ""
      },
      tableList: [],
      maxClassList: [],
      activeSingleList: [],
      resetCourseVisible: false, // 重新排课弹窗
      resetClassVisible: false, // 班级调整弹窗
      studentVisible: false,
      MixVisible: false, // 新增合奏班弹窗
      activeListStudent: [], // 当前选中的学生列表
      activeChioseSound: "", //选择的声部
      chioseSoundList: [], //当前的所有声部
      studentList: [], //列表里的学生集合
      activeMixClass: "", // 选中的合奏班
      chioseStudent: [], // 勾选的学生信息
      isNewClass: false, // 是否为新建班级
      isSearch: false, // 是否需要搜索
      isTemporary: false, // 是否为临时班级
      className: "", // 班级名称
      activeClass: "", // 当前操作的班级
      soundList: [],
      infoVisible: false, // 判断是否需要显示老师设置
      teacherForm: {
        isAdd: null,
        coreTeacher: "",
        assistant: [],
        courseType: "",
        courseTime: "",
        checked: false,
        courseNum: "",
        mixClassGroupId: ""
      },
      teacherRules: {
        isAdd: [{ required: true, message: "请选择调整类型" }],
        coreTeacher: [{ required: true, message: "请选择主教老师" }],
        courseType: [{ required: true, message: "请选择上课类型" }],
        courseTime: [{ required: true, message: "请选择开始时间" }],
        courseNum: [{ required: true, message: "请输入排课次数" }],
        mixClassGroupId: [{ required: true, message: "请选择合奏班" }]
      },
      weekList: [
        {
          week: "",
          startTime: "",
          endTime: "",
          id: new Date()
        }
      ],
      teacherList: [], // 存储的老师列表
      courseTypeList: [],
      weekDateList: [
        { value: "1", label: "星期一" },
        { value: "2", label: "星期二" },
        { value: "3", label: "星期三" },
        { value: "4", label: "星期四" },
        { value: "5", label: "星期五" },
        { value: "6", label: "星期六" },
        { value: "7", label: "星期日" }
      ],
      // 班级类型
      classTypeList: [
        { value: "NORMAL", label: "单技班" },
        { value: "MIX", label: "合奏班" },
        { value: "HIGH", label: "基础技能班" },
        { value: "SNAP", label: "临时班" }
      ],
      cooperationList: [],
      singleList: [],
      activeSingleLists: [],
      activeType: "",
      resetClassForm: {
        // 班级调整form对象
        startTime: "",
        endTime: "",
        assistant: [],
        coreTeacher: ""
      },
      recourseForm: {
        courseType: "",
        checked: false,
        courseTime: "",
        courseNum: ""
      },
      organId: ""
    };
  },
  created() {
    this.init();
  },
  activated() {
    this.init();
  },
  mounted() {},
  methods: {
    init() {
      this.teamid = this.$route.query.id;
      // 根据乐团id获取乐团所属分部
      getTeamBaseInfo({ musicGroupId: this.teamid }).then(res => {
        if (res.code == 200) {
          this.organId = res.data.musicGroup.organId;
          getTeacher({ organId: this.organId }).then(res => {
            if (res.code == 200) {
              this.cooperationList = res.data;
              this.teacherList = res.data;
            }
          });

          // queryEmployByOrganId({ organId: this.organId, rows: 10000 }).then(res => {
          //   if (res.code == 200) {

          //   }
          // })
        }
      });
      sessionStorage.setItem("resetCode", 3);
      // // 获取乐团下未分班的单技班
      // findNoClassSingle({ musicGroupId: this.teamid }).then(res => {
      //   if (res.code == 200) {
      //     this.singleList = res.data;
      //   }
      // })
      // getMusicGroupStuNoClassType
      // 获取合奏班下
      // 1.获取乐团下所有的合奏班
      // 2.根据合奏班获取所有的单技班
      // 3.根据乐团id 查询 此乐团所有的合奏班
      // 4.获取当年的所有节假日
      getAllClass({ musicGroupId: this.teamid }).then(res => {
        if (res.code == 200) {
          this.maxClassList = res.data;
        }
      });
      // let year = new Date().getFullYear();
      // axios.post('/jiari/', qs.stringify({ d: year })).then(res => {
      //   this.holidayList = Object.keys(res.data[year])
      // })
      // getNoClassStudentAll({ musicGroupId: this.teamid }).then(res => {
      // })

      // 获取默认乐团内的所有班
      this.changeMixClass();
      // 根据乐团id获取乐团的所有声部
      findSound({ musicGroupId: this.teamid }).then(res => {
        if (res.code == 200) {
          this.soundList = res.data;
        }
      });

      // 获取分部所有老师
      // findMusicGroupClassTeacher({
      //   musicGroupId: this.teamid
      // }).then(res => {
      //   if (res.code == 200) {
      //     this.teacherList = res.data
      //   }
      // })
      // 获取分部所有老师
      // 助教是从员工表里选
    },
    recourse(row) {
      (this.weekList = [
        {
          week: "",
          startTime: "",
          endTime: "",
          id: new Date()
        }
      ]),
        (this.resetCourseVisible = true);
    },
    addMix() {
      this.MixVisible = true;
    },
    setAssistant(val) {
      for (let i in val) {
        if (val[i] == this.teacherForm.coreTeacher) {
          val.splice(i, 1);
        }
      }
    },
    changeMixClass(val) {
      // 根据合奏班id获取合奏班下的所有单技班
      this.getList(val);
      this.activeMixClass = val;
    },
    getList(val) {
      getAllSignClassandTeacher({ musicGroupId: this.teamid, type: val }).then(
        res => {
          if (res.code == 200) {
            this.activeSingleList = res.data;
            // this.topForm.count = this.activeSingleList.length
          }
        }
      );
    },
    // 临时调整
    temporary() {
      this.activeClass = "";
      this.activeListStudent = [];
      this.studentList = [];
      this.isNewClass = true;
      this.studentVisible = true;
      this.isSearch = true;
      this.className = "";
      this.isTemporary = true;
      this.setType("SNAP");
      this.getNoClassStudent("SNAP");
    },
    setType(type) {
      switch (type) {
        case "NORMAL": {
          this.courseTypeList = [
            { value: "SINGLE", label: "单技课" },
            { value: "TRAINING_SINGLE", label: "集训单技课" },
            { value: "COMPREHENSIVE", label: "综合课" },
            { value: "CLASSROOM", label: "课堂课" }
          ];
          break;
        }
        case "MIX": {
          this.courseTypeList = [
            { value: "MIX", label: "合奏课" },
            { value: "TRAINING_MIX", label: "集训合奏课" },
            { value: "COMPREHENSIVE", label: "综合课" },
            { value: "CLASSROOM", label: "课堂课" }
          ];
          break;
        }
        case "HIGH": {
          this.courseTypeList = [
            { value: "SINGLE", label: "单技课" },
            { value: "TRAINING_SINGLE", label: "集训单技课" },
            { value: "HIGH", label: "基础技能课" },
            { value: "COMPREHENSIVE", label: "综合课" },
            { value: "CLASSROOM", label: "课堂课" }
          ];
          break;
        }
        case "SNAP": {
          this.courseTypeList = [
            { value: "SINGLE", label: "单技课" },
            { value: "MIX", label: "合奏课" },
            { value: "TRAINING_SINGLE", label: "集训单技课" },
            { value: "TRAINING_MIX", label: "集训合奏课" },
            { value: "HIGH", label: "基础技能课" },
            { value: "COMPREHENSIVE", label: "综合课" },
            { value: "CLASSROOM", label: "课堂课" }
          ];
        }
      }
    },
    // 新增班级
    addNewClass(type) {
      /**
       *      { value: 'NORMAL', label: '单技班' },
        { value: 'MIX', label: '合奏班' },
        { value: 'HIGH', label: '基础技能班' },
        { value: 'SNAP', label: '临时班' },
       */
      this.setType(type);
      this.activeType = type;
      this.activeClass = "";
      this.activeListStudent = [];
      this.studentList = [];
      this.isNewClass = true;
      this.studentVisible = true;
      this.isSearch = false;
      this.className = "";
      this.isTemporary = false;
      this.getNoClassStudent(type);
    },
    searchStudent() {
      // 搜索学生
      // 根据声部id  乐团id搜索学生
      teamSoundStudent({
        musicGroupId: this.teamid,
        actualSubjectId: this.activeChioseSound
      }).then(res => {
        if (res.code == 200) {
          this.studentList = res.data;
        }
      });
    },
    // 选择学生的方法修改
    SelectionStudent(val) {
      this.chioseStudent = val;
    },
    // 新增选中的学生
    NewselectionStudent(val) {
      this.chioseStudent = val;
      // 这里新增的添加到选中的学生列表  根据学生id去重
      if (this.chioseStudent.length > 0) {
        this.chioseStudent = this.chioseStudent.concat(val);
      } else {
        this.chioseStudent = val;
      }
      // 联动版
      // this.activeListStudent = this.objArrayRemoval(this.chioseStudent, 'userId')
      // 非联动多选版
      this.activeListStudent = this.activeListStudent.concat(
        this.chioseStudent
      );
      // // 去重
      this.activeListStudent = this.objArrayRemoval(
        this.activeListStudent,
        "userId"
      );
      // 将其填入选中的学生
    },
    clearCourse(scope) {
      clearClassCourse({ classGroupId: scope.row.id })
        .then(res => {
          if (res.code == 200) {
            this.$message.success("清除成功");
            scope._self.$refs[scope.$index].doClose();
            // 重新请求列表
            this.getList(this.activeMixClass);
          } else {
            this.$message.error(res.msg);
            scope._self.$refs[scope.$index].doClose();
          }
        })
        .catch(res => {
          scope._self.$refs[scope.$index].doClose();
        });
      // 清空课表
    },
    // 删除班级
    removeClass(scope) {
      removeSingleClass({ classGroupId: scope.row.id })
        .then(res => {
          if (res.code == 200) {
            this.$message.success("删除成功");
            scope._self.$refs[scope.$index].doClose();
            // 重新请求列表
            this.getList(this.activeMixClass);
          } else {
            this.$message.error(res.msg);
            scope._self.$refs[scope.$index].doClose();
          }
        })
        .catch(res => {
          scope._self.$refs[scope.$index].doClose();
        });
    },
    // 修改班级
    resetClass(row) {
      this.isNewClass = false;
      this.className = row.name;
      this.studentVisible = true;
      this.activeClass = row.id;
      this.isSearch = false;
      this.activeType = row.type;
      // 根据单机班id 查询单技班内的所有学生
      getClassAllStudent({ classGroupId: row.id }).then(res => {
        if (res.code == 200) {
          this.activeListStudent = res.data.map(item => {
            item.isVisible = false;
            return item;
          });
        }
      });
      this.getNoClassStudent(row.type);
    },
    // 班级调整
    classAdjustment(row) {
      this.activeType = row.type;
      this.activeClass = row.id;
      // this.activeListStudent = row.subjectIdList.split(',')
      this.setType(row.type);
      // activeListStudent
      this.isNewClass = false;
      this.teacherForm.assistant = [];
      for (let i in row.classGroupTeacherMapperList) {
        if (row.classGroupTeacherMapperList[i].teacherRole == "BISHOP") {
          this.teacherForm.coreTeacher =
            row.classGroupTeacherMapperList[i].userId;
        }
        if (row.classGroupTeacherMapperList[i].teacherRole == "TEACHING") {
          this.teacherForm.assistant.push(
            row.classGroupTeacherMapperList[i].userId
          );
        }
      }
      this.infoVisible = true;
    },
    getNoClassStudent(type) {
      // 获取乐团内所有未分班的学生
      // if (type && type == 'SNAP') {
      //   teamSoundStudent({ musicGroupId: this.teamid }).then(res => {
      //     if (res.code == 200) {
      //       this.studentList = res.data
      //     }
      //   })
      // } else {
      //   getMusicGroupStuNoClassType({ musicGroupId: this.teamid, type }).then(res => {
      //     if (res.code == 200) {
      //       this.studentList = res.data
      //     }
      //   })
      // }
      // res.data - activeListStudent
      getMusicGroupStuNoClassType({ musicGroupId: this.teamid, type }).then(
        res => {
          if (res.code == 200) {
            // this.studentList = res.data.concat(this.activeListStudent).filter(item=>{
            //   return res.data
            // });
            if (this.activeType == "SNAP") {
              let idarr1 = [];
              let idarr2 = [];
              let arr3 = res.data.concat(this.activeListStudent);
              for (let i in res.data) {
                idarr1.push(res.data[i].userId);
              }
              for (let j in this.activeListStudent) {
                idarr2.push(this.activeListStudent[j].userId);
              }
              this.studentList = arr3.filter(item => {
                return (
                  idarr1.indexOf(item.userId) === -1 ||
                  idarr2.indexOf(item.userId) === -1
                );
              });
            } else {
              this.studentList = res.data;
            }
          }
        }
      );
    },
    // 删除学生 调整
    removeStudent(item) {
      // removeStudents({ classGroupId:}).then(res => {
      removeStudents({
        classGroupId: this.activeClass,
        userId: item.userId
      }).then(res => {
        if (res.code == 200) {
          this.$message.success("删除成功");
          item.isVisible = false;
          // 这里刷新 this.studentList this.activeListStudent
          this.getList(this.activeMixClass);
          getClassAllStudent({ classGroupId: this.activeClass }).then(res => {
            if (res.code == 200) {
              this.activeListStudent = res.data;
            }
          });
          this.getNoClassStudent(this.activeType);
          // getNoClassStudentAll({ musicGroupId: this.teamid }).then(res => {
          //   if (res.code == 200) {
          //     this.$message.success('删除成功');
          //     this.studentList = res.data.map(item => {
          //       item.isVisible = false;
          //       return item;
          //     });
          //   }
          // })
        }
      });
    },
    // 批量添加学生
    addSomeStudent() {
      // 获取勾选的学生
      let arr = this.chioseStudent.map(item => {
        return item.userId;
      });
      if (arr.length <= 0) {
        this.$message.error("至少添加一名学员");
        return;
      }
      addStudents({
        classGroupId: this.activeClass,
        userIdsStr: arr.join(",")
      }).then(res => {
        if (res.code == 200) {
          this.studentVisible = false;
          this.$message.success("添加成功");
          this.getList();
        }
      });
    },
    SelectionMix(val) {
      this.activeSingleLists = val;
    },
    removeSiginforMix(item) {
      for (let k in this.activeSingleLists) {
        if (this.activeSingleLists[k].id == item.id) {
          this.$refs["mixList"].toggleRowSelection(item, false);
        }
      }
    },
    temporaryRemoveStudent(item) {
      // 列表中删除
      for (let i in this.activeListStudent) {
        if (this.activeListStudent[i].userId == item.userId) {
          this.activeListStudent.splice(i, 1);
        }
      }
      // 查询列表中的项 取消勾选 temporaryStudentList  toggleRowSelection
      // 循环列表 找到相应的行取消勾选
      for (let k in this.studentList) {
        if (this.studentList[k].userId == item.userId) {
          this.$refs["temporaryStudentList"].toggleRowSelection(item, false);
        }
      }
      // this.$refs['temporaryStudentList'].toggleRowSelection(row, selected);
    },
    // 对象数组去重
    objArrayRemoval(arr, attr) {
      let obj = {};
      let result = [];
      for (let x in arr) {
        if (!obj[arr[x][attr]]) {
          result.push(arr[x]);
          obj[arr[x][attr]] = true;
        }
      }
      return result;
    },
    setInfoMsg() {
      // 判断班级名称是否输入
      if (!this.className) {
        this.$message.error("请输入班级名称");
        return;
      }
      // 判断有没有勾选学生
      if (this.activeListStudent.length <= 0) {
        // 没有勾学生
        this.$message.error("班级里至少要有一名学生");
        return;
      }
      this.infoVisible = true;
    },
    addWeek() {
      // 添加循环周期
      this.weekList.push({
        dayOfWeek: "",
        startClassTime: "",
        endClassTime: "",
        id: new Date()
      });
    },
    // 删除循环周
    removeWeek(item) {
      for (let i in this.weekList) {
        if (this.weekList[i].id == item.id) {
          this.weekList.splice(i, 1);
        }
      }
    },
    // 提交临时班的信息
    submitTemporary(type) {
      // 参数是一样  type为1 新增临时班
      // type为2  新增单技班
      // type为3 修改班级信息
      if (type == 1) {
        this.isTemporary = true;
      } else {
        this.isTemporary = false;
      }

      this.$refs["teacherForm"].validate(item => {
        if (item) {
          let week = this.weekList;
          if (this.teacherForm.isAdd != "onlyUpdateTeacher") {
            if (
              !week[0] ||
              !week[0].startClassTime ||
              !week[0].endClassTime ||
              !week[0].dayOfWeek
            ) {
              this.$message.error("至少排一节课");
              return;
            }
          }

          // 这里代表排课成功  发请求  新增临时班
          let classGroupName = this.className;
          let classGroupTeacherMapperList = [
            { userId: this.teacherForm.coreTeacher, teacherRole: "BISHOP" }
          ];
          for (let i in this.teacherForm.assistant) {
            classGroupTeacherMapperList.push({
              userId: this.teacherForm.assistant[i],
              teacherRole: "TEACHING"
            });
          }
          // let mixClassGroupId = this.teacherForm.mixClassGroupId;
          let musicGroupId = this.teamid;
          let startDate = this.teacherForm.courseTime;
          let courseType = this.teacherForm.courseType;
          let courseTimes = this.teacherForm.courseNum;
          if (
            courseTimes <= 0 &&
            this.teacherForm.isAdd != "onlyUpdateTeacher"
          ) {
            this.$message.error("请至少排一节课");
            return;
          }
          let students = this.activeListStudent.map(item => {
            return item.userId;
          });
          let holiday = this.teacherForm.checked;
          let courseList = [];
          for (let i in this.weekList) {
            courseList.push(this.weekList[i]);
          }
          if (
            courseList.length <= 0 &&
            this.teacherForm.isAdd != "onlyUpdateTeacher"
          ) {
            this.$message.error("新增班级至少排一节课");
            return;
          }
          if( this.teacherForm.isAdd == "onlyUpdateTeacher"){
              startDate = null
            courseType= null
            students= null
            holiday= null
            courseTimes= null
           courseList = null,
            mineType=null
          }
          //       mixClassGroupId,
          let mineType = this.activeType;
          let obj = {
            classGroupName,
            classGroupTeacherMapperList,
            musicGroupId,
            startDate,
            courseType,
            students,
            holiday,
            courseTimes,
            courseTimeDtoList: courseList,
            type: mineType,
            courseAddType: this.teacherForm.isAdd
          };
          if (type == 1) {
            // 新增临时班级
            revisionClassGroup(obj).then(res => {
              if (res.code == 200) {
                // 提示修改成功
                this.$message.success("修改成功");
                this.infoVisible = false;
                this.studentVisible = false;
                this.getList();
              }
            });
          } else if (type == 2) {
            // 新增单技班
            revisionAddClassGroup(obj).then(res => {
              if (res.code == 200) {
                // 修改成功
                this.$message.success("修改成功");
                this.infoVisible = false;
                this.studentVisible = false;
                this.getList();
              }
            });
          } else if (type == 3) {
            // activeClass
            obj.classGroupId = this.activeClass;
            classGroupUpdate(obj).then(res => {
              if (res.code == 200) {
                this.$message.success("修改成功");
                this.infoVisible = false;
                this.getList();
              }
            });
          }
        } else {
          this.$message.error("请填写必要信息");
          return;
        }
      });
    }
  },
  watch: {
    infoVisible(val) {
      if (!val) {
        this.$refs["teacherForm"].resetFields();
        this.weekList = [];
      }
    }
  }
};
</script>
<style lang="scss" scoped>
.floor {
  padding-right: 20px;
  display: flex;
  flex-direction: row;
  justify-content: flex-end;
  width: 100%;
  height: 48px;
  line-height: 48px;
  background: rgba(237, 238, 240, 1);
  font-size: 14px;
  color: #444;
  align-items: center;
  position: relative;
  z-index: 1;
  .remove {
    width: 98px;
    height: 32px;
    background: rgba(248, 80, 67, 1);
    border-radius: 3px;
    color: #fff;
    line-height: 32px;
    text-align: center;
    margin-left: 164px;
    cursor: pointer;
  }
  .add {
    width: 98px;
    height: 32px;
    background: rgba(20, 146, 138, 1);
    border-radius: 3px;
    color: #fff;
    line-height: 32px;
    text-align: center;
    margin-left: 20px;
    cursor: pointer;
  }
}
.studentMask {
  display: flex;
  flex-direction: row;
  justify-content: flex-start;
  .left {
    width: 200px;
    margin-right: 20px;
    .wrap {
      margin-bottom: 20px;
    }
    h4 {
      font-size: 16px;
      color: #444;
      line-height: 38px;
    }
    .chioseStudentList {
      height: 500px;
      overflow-y: auto;
      border: 1px solid #ccc;
      .studentItem {
        padding-left: 10px;
        line-height: 25px;
      }
    }
  }
  .right {
    width: calc(100% - 200px);
    .tableList {
      max-height: 500px;
      overflow-y: auto;
    }
  }
}
.resetClassForm {
  /deep/.el-date-editor.el-input,
  /deep/.el-date-editor.el-input__inner {
    width: 180px !important;
  }
}
/deep/.el-date-editor.el-input,
/deep/.el-date-editor.el-input__inner {
  width: 100px !important;
}
</style>
