|  | @@ -1,460 +1,461 @@
 | 
	
		
			
				|  |  | -<template>
 | 
	
		
			
				|  |  | -  <div class="arrangeWork">
 | 
	
		
			
				|  |  | -    <m-header v-if="headerStatus" />
 | 
	
		
			
				|  |  | -    <van-cell :title="classGroupName" title-style="font-size: .18rem; color: #333333;">
 | 
	
		
			
				|  |  | -      <template #extra>
 | 
	
		
			
				|  |  | -        <van-tag type="primary" plain style="background-color: #F1FCF9">课后训练</van-tag>
 | 
	
		
			
				|  |  | -      </template>
 | 
	
		
			
				|  |  | -    </van-cell>
 | 
	
		
			
				|  |  | -    <van-cell class="endTime" readonly is-link title-style="font-size: .16rem; color: #333333;" @click="studentStatus = true">
 | 
	
		
			
				|  |  | -      <template #title>
 | 
	
		
			
				|  |  | -        <span style="padding-right: .3rem">学员共<i style="font-style: normal; color: #01C1B5">{{ params.studentCount }}</i>人</span>
 | 
	
		
			
				|  |  | -        <span>会员 <i style="font-style: normal; color: #FF802C">{{ params.studentMemberCount }}</i>人</span>
 | 
	
		
			
				|  |  | -      </template>
 | 
	
		
			
				|  |  | -    </van-cell>
 | 
	
		
			
				|  |  | -    <div class="container">
 | 
	
		
			
				|  |  | -      <div class="formGroup">
 | 
	
		
			
				|  |  | -        <div class="dot"></div>
 | 
	
		
			
				|  |  | -        <div class="formTitle">训练标题</div>
 | 
	
		
			
				|  |  | -        <van-field v-model="title" type="text" maxlength="25" show-word-limit placeholder="请输入训练标题" />
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -      <div class="formGroup">
 | 
	
		
			
				|  |  | -        <div class="dot"></div>
 | 
	
		
			
				|  |  | -        <div class="formTitle">训练内容</div>
 | 
	
		
			
				|  |  | -        <van-field rows="4" v-model="content" maxlength="600" show-word-limit type="textarea" placeholder="请输入训练内容" />
 | 
	
		
			
				|  |  | -      </div>
 | 
	
		
			
				|  |  | -    </div>
 | 
	
		
			
				|  |  | -    <van-cell class="endTime" style="padding: 0.12rem 0.21rem;" title="训练提交截止时间" @click="onEndTime" is-link readonly placeholder="请选择截止时间" >
 | 
	
		
			
				|  |  | -      <template #title>
 | 
	
		
			
				|  |  | -        <div class="dot"></div>
 | 
	
		
			
				|  |  | -        训练提交截止时间
 | 
	
		
			
				|  |  | -      </template>
 | 
	
		
			
				|  |  | -      <template #default>
 | 
	
		
			
				|  |  | -        {{ dateSection.showStartDate }}
 | 
	
		
			
				|  |  | -      </template>
 | 
	
		
			
				|  |  | -    </van-cell>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <div class="accompanyHeader">
 | 
	
		
			
				|  |  | -      团练宝曲目选择<span>(若作业内容非团练宝曲目则无需选择)</span>
 | 
	
		
			
				|  |  | -    </div>
 | 
	
		
			
				|  |  | -    <van-tabs v-model="tabActive" color="#01C1B5">
 | 
	
		
			
				|  |  | -      <van-tab v-for="(item, i) in params.subjectList" :title="item.subjectName" :name="item.id" :key="i" class="van-hairline--bottom">
 | 
	
		
			
				|  |  | -        <van-cell class="endTime" v-for="(music, index) in item.musicScoreIdList" :key="index" style="margin-top: 0;padding: 0.12rem 0.21rem;" title="训练曲目" @click="onSelectAccompany(item, index)" readonly is-link placeholder="请选择训练曲目" >
 | 
	
		
			
				|  |  | -          <template #title>
 | 
	
		
			
				|  |  | -            <div class="dot"></div>训练曲目
 | 
	
		
			
				|  |  | -          </template>
 | 
	
		
			
				|  |  | -          <template #default>
 | 
	
		
			
				|  |  | -            <template v-if="music.name">
 | 
	
		
			
				|  |  | -              {{ music.name }}
 | 
	
		
			
				|  |  | -            </template>
 | 
	
		
			
				|  |  | -            <span v-else style="color: #808080;">请选择</span>
 | 
	
		
			
				|  |  | -          </template>
 | 
	
		
			
				|  |  | -          <template #right-icon>
 | 
	
		
			
				|  |  | -            <span v-if="music.name" @click.stop="delAccompany(item.musicScoreIdList, index)" style="color: #999999; font-size: .12rem; padding-left: .12rem"><van-icon size="14" name="delete-o" />删除</span>
 | 
	
		
			
				|  |  | -          </template>
 | 
	
		
			
				|  |  | -          <template #extra>
 | 
	
		
			
				|  |  | -            <!-- <span><van-icon name="delete-o" />删除</span> -->
 | 
	
		
			
				|  |  | -            <span style="height: 24px;font-size: 16px;line-height: 24px;color: #DADADA !important;"><van-icon name="arrow" /></span>
 | 
	
		
			
				|  |  | -          </template>
 | 
	
		
			
				|  |  | -        </van-cell>
 | 
	
		
			
				|  |  | -        <div class="addAccompaniment" v-if="item.musicScoreIdList.length < 3" @click="addCloud(item)">
 | 
	
		
			
				|  |  | -          <van-icon name="plus" size="16px" />增加团练宝训练曲目
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -      </van-tab>
 | 
	
		
			
				|  |  | -    </van-tabs>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <div class="button-group">
 | 
	
		
			
				|  |  | -      <van-button type="primary" round size="large" @click="onSubmit">确定</van-button>
 | 
	
		
			
				|  |  | -    </div>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <!-- 日期开始弹窗 -->
 | 
	
		
			
				|  |  | -    <van-popup position="bottom" v-model="dateSection.status">
 | 
	
		
			
				|  |  | -      <van-datetime-picker
 | 
	
		
			
				|  |  | -        v-model="dateSection.currentDate"
 | 
	
		
			
				|  |  | -        type="date"
 | 
	
		
			
				|  |  | -        :min-date="dateSection.minDate"
 | 
	
		
			
				|  |  | -        :max-date="dateSection.maxDate"
 | 
	
		
			
				|  |  | -        :formatter="formatter"
 | 
	
		
			
				|  |  | -        @confirm="confirmStartTime()"
 | 
	
		
			
				|  |  | -        @cancel="dateSection.status = false"
 | 
	
		
			
				|  |  | -      />
 | 
	
		
			
				|  |  | -    </van-popup>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <van-popup position="bottom" v-model="accompanimentStatus"  :style="{ height: '100%' }" style=" border-radius: 0; overflow: inherit;">
 | 
	
		
			
				|  |  | -      <!-- <van-sticky>
 | 
	
		
			
				|  |  | -        <m-header name="作业曲目" :backUrl="backUrl" />
 | 
	
		
			
				|  |  | -      </van-sticky> -->
 | 
	
		
			
				|  |  | -      <!-- <accompaniment-modal @onSelectMusic="onSelectMusic" ref="accompaniment" style="margin-bottom: 0.8rem;" :searchSubjectId="tabActive" /> -->
 | 
	
		
			
				|  |  | -       <!-- style="margin-bottom: 0.8rem;" -->
 | 
	
		
			
				|  |  | -      <workModel  @onSelectMusic="onSelectMusic" @close="accompanimentStatus = false" ref="accompaniment" :searchSubjectId="tabActive" />
 | 
	
		
			
				|  |  | -      <!-- <div class="button-group-popup">
 | 
	
		
			
				|  |  | -        <span class="btn" @click="accompanimentStatus = false">关闭</span>
 | 
	
		
			
				|  |  | -      </div> -->
 | 
	
		
			
				|  |  | -    </van-popup>
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -    <van-popup
 | 
	
		
			
				|  |  | -      v-model="studentStatus"
 | 
	
		
			
				|  |  | -      :lock-scroll="true"
 | 
	
		
			
				|  |  | -      position="bottom"
 | 
	
		
			
				|  |  | -      :style="{ height: '180%' }"
 | 
	
		
			
				|  |  | -    >
 | 
	
		
			
				|  |  | -      <!-- <van-sticky>
 | 
	
		
			
				|  |  | -        <m-header name="学员列表" :backUrl="backUrlStudent" />
 | 
	
		
			
				|  |  | -      </van-sticky> -->
 | 
	
		
			
				|  |  | -      <student-list-model :dataList="dataList" style="margin-bottom: 0.8rem;" @close="studentStatus = false" :dataSubjectList="dataSubjectList"></student-list-model>
 | 
	
		
			
				|  |  | -    </van-popup>
 | 
	
		
			
				|  |  | -  </div>
 | 
	
		
			
				|  |  | -</template>
 | 
	
		
			
				|  |  | -<script>
 | 
	
		
			
				|  |  | -import MHeader from "@/components/MHeader"
 | 
	
		
			
				|  |  | -import { browser, _throttle }  from '@/common/common'
 | 
	
		
			
				|  |  | -import dayjs from "dayjs";
 | 
	
		
			
				|  |  | -import { addHomeWork } from '@/api/audition'
 | 
	
		
			
				|  |  | -import { getCourseStudents } from '@/api/teacher'
 | 
	
		
			
				|  |  | -// import AccompanimentModal from './modal/accompanimentModal'
 | 
	
		
			
				|  |  | -import workModel from './modal/workModel'
 | 
	
		
			
				|  |  | -import StudentListModel from './modal/studentList'
 | 
	
		
			
				|  |  | -import cleanDeep from 'clean-deep'
 | 
	
		
			
				|  |  | -import deepClone from '@/helpers/deep-clone'
 | 
	
		
			
				|  |  | -export default {
 | 
	
		
			
				|  |  | -  name: "teacherList",
 | 
	
		
			
				|  |  | -  components: { MHeader, workModel, StudentListModel },
 | 
	
		
			
				|  |  | -  data() {
 | 
	
		
			
				|  |  | -    let tempDate = new Date() // 默认显示T+3
 | 
	
		
			
				|  |  | -    tempDate.setDate(tempDate.getDate() + 3)
 | 
	
		
			
				|  |  | -    let query = this.$route.query
 | 
	
		
			
				|  |  | -    return {
 | 
	
		
			
				|  |  | -      headerStatus: true,
 | 
	
		
			
				|  |  | -      backUrl: {
 | 
	
		
			
				|  |  | -        status: true,
 | 
	
		
			
				|  |  | -        callBack: () => {
 | 
	
		
			
				|  |  | -          this.accompanimentStatus = false
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      backUrlStudent: {
 | 
	
		
			
				|  |  | -        status: true,
 | 
	
		
			
				|  |  | -        callBack: () => {
 | 
	
		
			
				|  |  | -          this.studentStatus = false
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      classGroupName: query.classGroupName,
 | 
	
		
			
				|  |  | -      courseId: query.courseId || query.id,
 | 
	
		
			
				|  |  | -      dateSection: {
 | 
	
		
			
				|  |  | -        status: false,
 | 
	
		
			
				|  |  | -        minDate: new Date(),
 | 
	
		
			
				|  |  | -        maxDate: new Date(2025, 10, 1),
 | 
	
		
			
				|  |  | -        currentDate: tempDate,
 | 
	
		
			
				|  |  | -        showStartDate: dayjs(tempDate).format("YYYY年MM月DD日"),
 | 
	
		
			
				|  |  | -        musicScoreId: null,
 | 
	
		
			
				|  |  | -        musicScoreName: null,
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      title: '',
 | 
	
		
			
				|  |  | -      content: '', // 课程编号
 | 
	
		
			
				|  |  | -      expiryDate: null, // 作业截止日期
 | 
	
		
			
				|  |  | -      accompanimentStatus: false, // 伴奏弹窗
 | 
	
		
			
				|  |  | -      tabActive: 0,
 | 
	
		
			
				|  |  | -      tabOriginActive: 0,
 | 
	
		
			
				|  |  | -      tabActiveList: {}, // 选中当前信息
 | 
	
		
			
				|  |  | -      tabActiveIndex: 0,
 | 
	
		
			
				|  |  | -      params: {
 | 
	
		
			
				|  |  | -        studentCount: 0, // 学员总数
 | 
	
		
			
				|  |  | -        studentMemberCount: 0, // 学员会员数
 | 
	
		
			
				|  |  | -        subjectIdList: [],
 | 
	
		
			
				|  |  | -        subjectList: []
 | 
	
		
			
				|  |  | -      },
 | 
	
		
			
				|  |  | -      dataList: [],
 | 
	
		
			
				|  |  | -      dataSubjectList: [],
 | 
	
		
			
				|  |  | -      studentStatus: false,
 | 
	
		
			
				|  |  | -    };
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  async mounted() {
 | 
	
		
			
				|  |  | -    let params = this.$route.query;
 | 
	
		
			
				|  |  | -    if (params.Authorization) {
 | 
	
		
			
				|  |  | -      localStorage.setItem("Authorization", decodeURI(params.Authorization));
 | 
	
		
			
				|  |  | -      localStorage.setItem("userInfo", decodeURI(params.Authorization));
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    document.title = '布置训练'
 | 
	
		
			
				|  |  | -    if(browser().android || browser().iPhone) {
 | 
	
		
			
				|  |  | -      this.headerStatus = false
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    await getCourseStudents({ courseScheduleId: this.courseId }).then(res => {
 | 
	
		
			
				|  |  | -      const result = res.data
 | 
	
		
			
				|  |  | -      if(result.code != 200) { return }
 | 
	
		
			
				|  |  | -      const tempData = result.data || []
 | 
	
		
			
				|  |  | -      let params = {
 | 
	
		
			
				|  |  | -        studentCount: tempData.length, // 学员总数
 | 
	
		
			
				|  |  | -        studentMemberCount: 0, // 学员会员数
 | 
	
		
			
				|  |  | -        subjectIdList: [],
 | 
	
		
			
				|  |  | -        subjectList: []
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      tempData.forEach(item => {
 | 
	
		
			
				|  |  | -        // 判断当前学员是否有会员
 | 
	
		
			
				|  |  | -        if(item.memberRankSettingId) {
 | 
	
		
			
				|  |  | -          params.studentMemberCount++
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if(!params.subjectIdList.includes(item.subjectIdList || -1)) {
 | 
	
		
			
				|  |  | -          params.subjectIdList.push(item.subjectIdList || -1)
 | 
	
		
			
				|  |  | -          params.subjectList.push({
 | 
	
		
			
				|  |  | -            id: item.subjectIdList || -1,
 | 
	
		
			
				|  |  | -            subjectName: item.subjectName || '无声部',
 | 
	
		
			
				|  |  | -            userIdList: [item.userId],
 | 
	
		
			
				|  |  | -            musicScoreIdList: [{
 | 
	
		
			
				|  |  | -              id: null,
 | 
	
		
			
				|  |  | -              name: null,
 | 
	
		
			
				|  |  | -            }], // 默认加一个空的,做占位
 | 
	
		
			
				|  |  | -          })
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -          params.subjectList.forEach(subject => {
 | 
	
		
			
				|  |  | -            if(subject.id == item.subjectIdList) {
 | 
	
		
			
				|  |  | -              subject.userIdList.push(item.userId)
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -            if(!item.subjectIdList && subject.id == -1) {
 | 
	
		
			
				|  |  | -              subject.userIdList.push(item.userId)
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -          })
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        if(!item.subjectIdList) {
 | 
	
		
			
				|  |  | -          item.subjectIdList = -1
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      });
 | 
	
		
			
				|  |  | -      this.dataList = tempData
 | 
	
		
			
				|  |  | -      // 默认选中第1条数据
 | 
	
		
			
				|  |  | -      this.tabActive = (params.subjectIdList[0])
 | 
	
		
			
				|  |  | -      this.tabOriginActive = (params.subjectIdList[0])
 | 
	
		
			
				|  |  | -      this.dataSubjectList = deepClone(params.subjectList)
 | 
	
		
			
				|  |  | -      this.params = params
 | 
	
		
			
				|  |  | -    })
 | 
	
		
			
				|  |  | -  },
 | 
	
		
			
				|  |  | -  methods: {
 | 
	
		
			
				|  |  | -    onSelectAccompany(item, index) {
 | 
	
		
			
				|  |  | -      this.accompanimentStatus = true
 | 
	
		
			
				|  |  | -      this.tabActiveList = item
 | 
	
		
			
				|  |  | -      this.tabActiveIndex = index
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    delAccompany(music, index) {
 | 
	
		
			
				|  |  | -      if(music.length == 1) {
 | 
	
		
			
				|  |  | -        music[0] = {
 | 
	
		
			
				|  |  | -          id: null,
 | 
	
		
			
				|  |  | -          name: null,
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        this.$forceUpdate()
 | 
	
		
			
				|  |  | -      } else {
 | 
	
		
			
				|  |  | -        music.splice(index, 1)
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    addCloud(item) {
 | 
	
		
			
				|  |  | -      if(item.musicScoreIdList.length < 3) {
 | 
	
		
			
				|  |  | -        item.musicScoreIdList.push('')
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    formatter(type, val) {
 | 
	
		
			
				|  |  | -      if (type === "year") {
 | 
	
		
			
				|  |  | -        return `${val}年`
 | 
	
		
			
				|  |  | -      } else if (type === "month") {
 | 
	
		
			
				|  |  | -        return `${val}月`
 | 
	
		
			
				|  |  | -      } else if (type == "day") {
 | 
	
		
			
				|  |  | -        return `${val}日`
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      return val
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    onSelectMusic(value) {
 | 
	
		
			
				|  |  | -      this.tabActiveList.musicScoreIdList[this.tabActiveIndex] = {
 | 
	
		
			
				|  |  | -        id: value.examSongId,
 | 
	
		
			
				|  |  | -        name: value.examSongName
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      this.accompanimentStatus = false
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    confirmStartTime() {
 | 
	
		
			
				|  |  | -      this.dateSection.showStartDate = dayjs(this.dateSection.currentDate).format("YYYY年MM月DD日")
 | 
	
		
			
				|  |  | -      this.dateSection.status = false
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    onEndTime() {
 | 
	
		
			
				|  |  | -      this.dateSection.status = true
 | 
	
		
			
				|  |  | -    },
 | 
	
		
			
				|  |  | -    onSubmit: _throttle(function(type) {
 | 
	
		
			
				|  |  | -      if(!this.title) {
 | 
	
		
			
				|  |  | -        this.$toast('请输入训练标题')
 | 
	
		
			
				|  |  | -        return
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      if(!this.content) {
 | 
	
		
			
				|  |  | -        this.$toast('请输入训练内容')
 | 
	
		
			
				|  |  | -        return
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      let tempSubjectList = this.params.subjectList
 | 
	
		
			
				|  |  | -      let musicScoreSubjectDto = []
 | 
	
		
			
				|  |  | -      let notAccompanySong = [] // 用于判断没有设置训练曲目的数据
 | 
	
		
			
				|  |  | -      let subjectLength = this.params.subjectIdList.length
 | 
	
		
			
				|  |  | -      tempSubjectList.forEach(subject => {
 | 
	
		
			
				|  |  | -        let scoreIdList = []
 | 
	
		
			
				|  |  | -        subject.musicScoreIdList.forEach(music => {
 | 
	
		
			
				|  |  | -          if(music.id) {
 | 
	
		
			
				|  |  | -            scoreIdList.push(music.id)
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | -        if(scoreIdList.length <= 0) {
 | 
	
		
			
				|  |  | -          notAccompanySong.push(subject.subjectName)
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        musicScoreSubjectDto.push({
 | 
	
		
			
				|  |  | -          musicScoreIdList: scoreIdList,
 | 
	
		
			
				|  |  | -          userIdList: subject.userIdList
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -      if(notAccompanySong.length - subjectLength <= 0 && notAccompanySong != 0 && type[0] != 1) {
 | 
	
		
			
				|  |  | -        // console.log('选择曲目')
 | 
	
		
			
				|  |  | -        this.$dialog.confirm({
 | 
	
		
			
				|  |  | -          message: notAccompanySong.join(',') + '声部未选择团练宝训练曲目,是否继续布置作业?',
 | 
	
		
			
				|  |  | -          confirmButtonColor: '#01C1B5'
 | 
	
		
			
				|  |  | -        }).then(() => {
 | 
	
		
			
				|  |  | -          // on confirm
 | 
	
		
			
				|  |  | -          this.onSubmit(1)
 | 
	
		
			
				|  |  | -        })
 | 
	
		
			
				|  |  | -        .catch(() => {
 | 
	
		
			
				|  |  | -          // on cancel
 | 
	
		
			
				|  |  | -        });
 | 
	
		
			
				|  |  | -        return
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      this.$toast.loading({
 | 
	
		
			
				|  |  | -        message: '加载中...',
 | 
	
		
			
				|  |  | -        duration: 10000,
 | 
	
		
			
				|  |  | -        forbidClick: true,
 | 
	
		
			
				|  |  | -        loadingType: 'spinner',
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -      let params = {
 | 
	
		
			
				|  |  | -        title: this.title,
 | 
	
		
			
				|  |  | -        content: this.content,
 | 
	
		
			
				|  |  | -        courseScheduleId: this.courseId,
 | 
	
		
			
				|  |  | -        expiryDate: dayjs(this.dateSection.currentDate).format('YYYY-MM-DD'),
 | 
	
		
			
				|  |  | -        musicScoreSubjectDto: musicScoreSubjectDto
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -      addHomeWork(cleanDeep({...params})).then(res => {
 | 
	
		
			
				|  |  | -        let result = res.data
 | 
	
		
			
				|  |  | -        this.$toast.clear()
 | 
	
		
			
				|  |  | -        if(result.code == 200) {
 | 
	
		
			
				|  |  | -          this.$toast('作业布置成功')
 | 
	
		
			
				|  |  | -          setTimeout(() => {
 | 
	
		
			
				|  |  | -            let query = this.$route.query
 | 
	
		
			
				|  |  | -            const path = query.isNewJoin == 1 ? '/afterClassEvaluateDetail' : '/courseEvaluation'
 | 
	
		
			
				|  |  | -            this.$router.replace({
 | 
	
		
			
				|  |  | -              path,
 | 
	
		
			
				|  |  | -              query: {
 | 
	
		
			
				|  |  | -                id: query.id,
 | 
	
		
			
				|  |  | -                reviewId: query.reviewId,
 | 
	
		
			
				|  |  | -                isInside: query.isInside,
 | 
	
		
			
				|  |  | -                work: 1
 | 
	
		
			
				|  |  | -              }
 | 
	
		
			
				|  |  | -            })
 | 
	
		
			
				|  |  | -          }, 500);
 | 
	
		
			
				|  |  | -        } else {
 | 
	
		
			
				|  |  | -          this.$toast(result.msg)
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  | -    }, 500)
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -};
 | 
	
		
			
				|  |  | -</script>
 | 
	
		
			
				|  |  | -<style lang="less" scoped>
 | 
	
		
			
				|  |  | -@import url("../../assets/commonLess/variable.less");
 | 
	
		
			
				|  |  | -.arrangeWork {
 | 
	
		
			
				|  |  | -  min-height: 100vh;
 | 
	
		
			
				|  |  | -  overflow-y: auto;
 | 
	
		
			
				|  |  | -  overflow-x: hidden;
 | 
	
		
			
				|  |  | -  background-color: #F3F4F8;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -/deep/.van-cell {
 | 
	
		
			
				|  |  | -  font-size: .14rem;
 | 
	
		
			
				|  |  | -  padding: .12rem .16rem;
 | 
	
		
			
				|  |  | -  line-height: .24rem;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.arrowDown {
 | 
	
		
			
				|  |  | -  display: inline-block;
 | 
	
		
			
				|  |  | -  margin-left: .1rem;
 | 
	
		
			
				|  |  | -  width: 0.1rem;
 | 
	
		
			
				|  |  | -  height: 0.07rem;
 | 
	
		
			
				|  |  | -  background: url('../../assets/images/audition/arrow_down.png') no-repeat center center;
 | 
	
		
			
				|  |  | -  background-size: 100%;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.container {
 | 
	
		
			
				|  |  | -  .formGroup {
 | 
	
		
			
				|  |  | -    position: relative;
 | 
	
		
			
				|  |  | -    margin-top: .1rem;
 | 
	
		
			
				|  |  | -    background: #ffffff;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  .formTitle {
 | 
	
		
			
				|  |  | -    padding: .12rem .21rem 0;
 | 
	
		
			
				|  |  | -    font-size: .16rem;
 | 
	
		
			
				|  |  | -    color: #333333;
 | 
	
		
			
				|  |  | -    font-weight: 500;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.endTime {
 | 
	
		
			
				|  |  | -  margin-top: .1rem;
 | 
	
		
			
				|  |  | -  .van-cell__title {
 | 
	
		
			
				|  |  | -    font-size: .16rem;
 | 
	
		
			
				|  |  | -    color: #1A1A1A;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  /deep/.van-cell__value {
 | 
	
		
			
				|  |  | -    // width: 30%;
 | 
	
		
			
				|  |  | -    justify-content: flex-end;
 | 
	
		
			
				|  |  | -    text-align: right;
 | 
	
		
			
				|  |  | -    font-size: .16rem;
 | 
	
		
			
				|  |  | -    color: #1A1A1A;
 | 
	
		
			
				|  |  | -    display: flex;
 | 
	
		
			
				|  |  | -    align-items: center;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.button-group {
 | 
	
		
			
				|  |  | -  margin: 0.3rem 0.26rem 0.2rem;
 | 
	
		
			
				|  |  | -  .van-button--primary {
 | 
	
		
			
				|  |  | -    background: @mColor;
 | 
	
		
			
				|  |  | -    border: 1px solid @mColor;
 | 
	
		
			
				|  |  | -    font-size: 0.18rem;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -.dot {
 | 
	
		
			
				|  |  | -  width: 4px;
 | 
	
		
			
				|  |  | -  height: 0.17rem;
 | 
	
		
			
				|  |  | -  background: #01c1b5;
 | 
	
		
			
				|  |  | -  border-radius: 3px;
 | 
	
		
			
				|  |  | -  position: absolute;
 | 
	
		
			
				|  |  | -  z-index: 98;
 | 
	
		
			
				|  |  | -  top: .15rem;
 | 
	
		
			
				|  |  | -  left: 0.12rem;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -/deep/.van-tab {
 | 
	
		
			
				|  |  | -  font-size: 16px;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -/deep/.van-popup--bottom {
 | 
	
		
			
				|  |  | -  border-radius: 0px 0px 0px 0px!important;
 | 
	
		
			
				|  |  | -  overflow: auto!important;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -.accompanyHeader {
 | 
	
		
			
				|  |  | -  font-size: .14rem;
 | 
	
		
			
				|  |  | -  padding: .16rem .08rem .14rem;
 | 
	
		
			
				|  |  | -  color: #333;
 | 
	
		
			
				|  |  | -  font-weight: 500;
 | 
	
		
			
				|  |  | -  span {
 | 
	
		
			
				|  |  | -    color: #808080;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -.addAccompaniment {
 | 
	
		
			
				|  |  | -  width: 80%;
 | 
	
		
			
				|  |  | -  height: .42rem;
 | 
	
		
			
				|  |  | -  line-height: .42rem;
 | 
	
		
			
				|  |  | -  text-align: center;
 | 
	
		
			
				|  |  | -  margin: .1rem auto 0;
 | 
	
		
			
				|  |  | -  border: 1px dashed #CCC;
 | 
	
		
			
				|  |  | -  background: #FBFBFB;
 | 
	
		
			
				|  |  | -  font-size: .14rem;
 | 
	
		
			
				|  |  | -  color: #666666;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -</style>
 | 
	
		
			
				|  |  | +<template>
 | 
	
		
			
				|  |  | +  <div class="arrangeWork">
 | 
	
		
			
				|  |  | +    <m-header v-if="headerStatus" />
 | 
	
		
			
				|  |  | +    <van-cell :title="classGroupName" title-style="font-size: .18rem; color: #333333;">
 | 
	
		
			
				|  |  | +      <template #extra>
 | 
	
		
			
				|  |  | +        <van-tag type="primary" plain style="background-color: #F1FCF9">课后训练</van-tag>
 | 
	
		
			
				|  |  | +      </template>
 | 
	
		
			
				|  |  | +    </van-cell>
 | 
	
		
			
				|  |  | +    <van-cell class="endTime" readonly is-link title-style="font-size: .16rem; color: #333333;" @click="studentStatus = true">
 | 
	
		
			
				|  |  | +      <template #title>
 | 
	
		
			
				|  |  | +        <span style="padding-right: .3rem">学员共<i style="font-style: normal; color: #01C1B5">{{ params.studentCount }}</i>人</span>
 | 
	
		
			
				|  |  | +        <span>会员 <i style="font-style: normal; color: #FF802C">{{ params.studentMemberCount }}</i>人</span>
 | 
	
		
			
				|  |  | +      </template>
 | 
	
		
			
				|  |  | +    </van-cell>
 | 
	
		
			
				|  |  | +    <div class="container">
 | 
	
		
			
				|  |  | +      <div class="formGroup">
 | 
	
		
			
				|  |  | +        <div class="dot"></div>
 | 
	
		
			
				|  |  | +        <div class="formTitle">训练标题</div>
 | 
	
		
			
				|  |  | +        <van-field v-model="title" type="text" maxlength="25" show-word-limit placeholder="请输入训练标题" />
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +      <div class="formGroup">
 | 
	
		
			
				|  |  | +        <div class="dot"></div>
 | 
	
		
			
				|  |  | +        <div class="formTitle">训练内容</div>
 | 
	
		
			
				|  |  | +        <van-field rows="4" v-model="content" maxlength="600" show-word-limit type="textarea" placeholder="请输入训练内容" />
 | 
	
		
			
				|  |  | +      </div>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <van-cell class="endTime" style="padding: 0.12rem 0.21rem;" title="训练提交截止时间" @click="onEndTime" is-link readonly placeholder="请选择截止时间" >
 | 
	
		
			
				|  |  | +      <template #title>
 | 
	
		
			
				|  |  | +        <div class="dot"></div>
 | 
	
		
			
				|  |  | +        训练提交截止时间
 | 
	
		
			
				|  |  | +      </template>
 | 
	
		
			
				|  |  | +      <template #default>
 | 
	
		
			
				|  |  | +        {{ dateSection.showStartDate }}
 | 
	
		
			
				|  |  | +      </template>
 | 
	
		
			
				|  |  | +    </van-cell>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <div class="accompanyHeader">
 | 
	
		
			
				|  |  | +      团练宝曲目选择<span>(若作业内容非团练宝曲目则无需选择)</span>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +    <van-tabs v-model="tabActive" color="#01C1B5">
 | 
	
		
			
				|  |  | +      <van-tab v-for="(item, i) in params.subjectList" :title="item.subjectName" :name="item.id" :key="i" class="van-hairline--bottom">
 | 
	
		
			
				|  |  | +        <van-cell class="endTime" v-for="(music, index) in item.musicScoreIdList" :key="index" style="margin-top: 0;padding: 0.12rem 0.21rem;" title="训练曲目" @click="onSelectAccompany(item, index)" readonly is-link placeholder="请选择训练曲目" >
 | 
	
		
			
				|  |  | +          <template #title>
 | 
	
		
			
				|  |  | +            <div class="dot"></div>训练曲目
 | 
	
		
			
				|  |  | +          </template>
 | 
	
		
			
				|  |  | +          <template #default>
 | 
	
		
			
				|  |  | +            <template v-if="music.name">
 | 
	
		
			
				|  |  | +              {{ music.name }}
 | 
	
		
			
				|  |  | +            </template>
 | 
	
		
			
				|  |  | +            <span v-else style="color: #808080;">请选择</span>
 | 
	
		
			
				|  |  | +          </template>
 | 
	
		
			
				|  |  | +          <template #right-icon>
 | 
	
		
			
				|  |  | +            <span v-if="music.name" @click.stop="delAccompany(item.musicScoreIdList, index)" style="color: #999999; font-size: .12rem; padding-left: .12rem"><van-icon size="14" name="delete-o" />删除</span>
 | 
	
		
			
				|  |  | +          </template>
 | 
	
		
			
				|  |  | +          <template #extra>
 | 
	
		
			
				|  |  | +            <!-- <span><van-icon name="delete-o" />删除</span> -->
 | 
	
		
			
				|  |  | +            <span style="height: 24px;font-size: 16px;line-height: 24px;color: #DADADA !important;"><van-icon name="arrow" /></span>
 | 
	
		
			
				|  |  | +          </template>
 | 
	
		
			
				|  |  | +        </van-cell>
 | 
	
		
			
				|  |  | +        <div class="addAccompaniment" v-if="item.musicScoreIdList.length < 3" @click="addCloud(item)">
 | 
	
		
			
				|  |  | +          <van-icon name="plus" size="16px" />增加团练宝训练曲目
 | 
	
		
			
				|  |  | +        </div>
 | 
	
		
			
				|  |  | +      </van-tab>
 | 
	
		
			
				|  |  | +    </van-tabs>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <div class="button-group">
 | 
	
		
			
				|  |  | +      <van-button type="primary" round size="large" @click="onSubmit">确定</van-button>
 | 
	
		
			
				|  |  | +    </div>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <!-- 日期开始弹窗 -->
 | 
	
		
			
				|  |  | +    <van-popup position="bottom" v-model="dateSection.status">
 | 
	
		
			
				|  |  | +      <van-datetime-picker
 | 
	
		
			
				|  |  | +        v-model="dateSection.currentDate"
 | 
	
		
			
				|  |  | +        type="date"
 | 
	
		
			
				|  |  | +        :min-date="dateSection.minDate"
 | 
	
		
			
				|  |  | +        :max-date="dateSection.maxDate"
 | 
	
		
			
				|  |  | +        :formatter="formatter"
 | 
	
		
			
				|  |  | +        @confirm="confirmStartTime()"
 | 
	
		
			
				|  |  | +        @cancel="dateSection.status = false"
 | 
	
		
			
				|  |  | +      />
 | 
	
		
			
				|  |  | +    </van-popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-popup position="bottom" v-model="accompanimentStatus"  :style="{ height: '100%' }" style=" border-radius: 0; overflow: inherit;">
 | 
	
		
			
				|  |  | +      <!-- <van-sticky>
 | 
	
		
			
				|  |  | +        <m-header name="作业曲目" :backUrl="backUrl" />
 | 
	
		
			
				|  |  | +      </van-sticky> -->
 | 
	
		
			
				|  |  | +      <!-- <accompaniment-modal @onSelectMusic="onSelectMusic" ref="accompaniment" style="margin-bottom: 0.8rem;" :searchSubjectId="tabActive" /> -->
 | 
	
		
			
				|  |  | +       <!-- style="margin-bottom: 0.8rem;" -->
 | 
	
		
			
				|  |  | +      <workModel  @onSelectMusic="onSelectMusic" @close="accompanimentStatus = false" ref="accompaniment" :searchSubjectId="tabActive" />
 | 
	
		
			
				|  |  | +      <!-- <div class="button-group-popup">
 | 
	
		
			
				|  |  | +        <span class="btn" @click="accompanimentStatus = false">关闭</span>
 | 
	
		
			
				|  |  | +      </div> -->
 | 
	
		
			
				|  |  | +    </van-popup>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    <van-popup
 | 
	
		
			
				|  |  | +      v-model="studentStatus"
 | 
	
		
			
				|  |  | +      :lock-scroll="true"
 | 
	
		
			
				|  |  | +      position="bottom"
 | 
	
		
			
				|  |  | +      :style="{ height: '180%' }"
 | 
	
		
			
				|  |  | +    >
 | 
	
		
			
				|  |  | +      <!-- <van-sticky>
 | 
	
		
			
				|  |  | +        <m-header name="学员列表" :backUrl="backUrlStudent" />
 | 
	
		
			
				|  |  | +      </van-sticky> -->
 | 
	
		
			
				|  |  | +      <student-list-model :dataList="dataList" style="margin-bottom: 0.8rem;" @close="studentStatus = false" :dataSubjectList="dataSubjectList"></student-list-model>
 | 
	
		
			
				|  |  | +    </van-popup>
 | 
	
		
			
				|  |  | +  </div>
 | 
	
		
			
				|  |  | +</template>
 | 
	
		
			
				|  |  | +<script>
 | 
	
		
			
				|  |  | +import MHeader from "@/components/MHeader"
 | 
	
		
			
				|  |  | +import { browser, _throttle }  from '@/common/common'
 | 
	
		
			
				|  |  | +import dayjs from "dayjs";
 | 
	
		
			
				|  |  | +import { addHomeWork } from '@/api/audition'
 | 
	
		
			
				|  |  | +import { getCourseStudents } from '@/api/teacher'
 | 
	
		
			
				|  |  | +// import AccompanimentModal from './modal/accompanimentModal'
 | 
	
		
			
				|  |  | +import workModel from './modal/workModel'
 | 
	
		
			
				|  |  | +import StudentListModel from './modal/studentList'
 | 
	
		
			
				|  |  | +import cleanDeep from 'clean-deep'
 | 
	
		
			
				|  |  | +import deepClone from '@/helpers/deep-clone'
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +  name: "teacherList",
 | 
	
		
			
				|  |  | +  components: { MHeader, workModel, StudentListModel },
 | 
	
		
			
				|  |  | +  data() {
 | 
	
		
			
				|  |  | +    let tempDate = new Date() // 默认显示T+3
 | 
	
		
			
				|  |  | +    tempDate.setDate(tempDate.getDate() + 3)
 | 
	
		
			
				|  |  | +    let query = this.$route.query
 | 
	
		
			
				|  |  | +    return {
 | 
	
		
			
				|  |  | +      headerStatus: true,
 | 
	
		
			
				|  |  | +      backUrl: {
 | 
	
		
			
				|  |  | +        status: true,
 | 
	
		
			
				|  |  | +        callBack: () => {
 | 
	
		
			
				|  |  | +          this.accompanimentStatus = false
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      backUrlStudent: {
 | 
	
		
			
				|  |  | +        status: true,
 | 
	
		
			
				|  |  | +        callBack: () => {
 | 
	
		
			
				|  |  | +          this.studentStatus = false
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      classGroupName: query.classGroupName,
 | 
	
		
			
				|  |  | +      courseId: query.courseId || query.id,
 | 
	
		
			
				|  |  | +      dateSection: {
 | 
	
		
			
				|  |  | +        status: false,
 | 
	
		
			
				|  |  | +        minDate: new Date(),
 | 
	
		
			
				|  |  | +        maxDate: new Date(2025, 10, 1),
 | 
	
		
			
				|  |  | +        currentDate: tempDate,
 | 
	
		
			
				|  |  | +        showStartDate: dayjs(tempDate).format("YYYY年MM月DD日"),
 | 
	
		
			
				|  |  | +        musicScoreId: null,
 | 
	
		
			
				|  |  | +        musicScoreName: null,
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      title: '',
 | 
	
		
			
				|  |  | +      content: '', // 课程编号
 | 
	
		
			
				|  |  | +      expiryDate: null, // 作业截止日期
 | 
	
		
			
				|  |  | +      accompanimentStatus: false, // 伴奏弹窗
 | 
	
		
			
				|  |  | +      tabActive: 0,
 | 
	
		
			
				|  |  | +      tabOriginActive: 0,
 | 
	
		
			
				|  |  | +      tabActiveList: {}, // 选中当前信息
 | 
	
		
			
				|  |  | +      tabActiveIndex: 0,
 | 
	
		
			
				|  |  | +      params: {
 | 
	
		
			
				|  |  | +        studentCount: 0, // 学员总数
 | 
	
		
			
				|  |  | +        studentMemberCount: 0, // 学员会员数
 | 
	
		
			
				|  |  | +        subjectIdList: [],
 | 
	
		
			
				|  |  | +        subjectList: []
 | 
	
		
			
				|  |  | +      },
 | 
	
		
			
				|  |  | +      dataList: [],
 | 
	
		
			
				|  |  | +      dataSubjectList: [],
 | 
	
		
			
				|  |  | +      studentStatus: false,
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  async mounted() {
 | 
	
		
			
				|  |  | +    let params = this.$route.query;
 | 
	
		
			
				|  |  | +    if (params.Authorization) {
 | 
	
		
			
				|  |  | +      localStorage.setItem("Authorization", decodeURI(params.Authorization));
 | 
	
		
			
				|  |  | +      localStorage.setItem("userInfo", decodeURI(params.Authorization));
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    document.title = '布置训练'
 | 
	
		
			
				|  |  | +    if(browser().android || browser().iPhone) {
 | 
	
		
			
				|  |  | +      this.headerStatus = false
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    await getCourseStudents({ courseScheduleId: this.courseId }).then(res => {
 | 
	
		
			
				|  |  | +      const result = res.data
 | 
	
		
			
				|  |  | +      if(result.code != 200) { return }
 | 
	
		
			
				|  |  | +      const tempData = result.data || []
 | 
	
		
			
				|  |  | +      let params = {
 | 
	
		
			
				|  |  | +        studentCount: tempData.length, // 学员总数
 | 
	
		
			
				|  |  | +        studentMemberCount: 0, // 学员会员数
 | 
	
		
			
				|  |  | +        subjectIdList: [],
 | 
	
		
			
				|  |  | +        subjectList: []
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      tempData.forEach(item => {
 | 
	
		
			
				|  |  | +        // 判断当前学员是否有会员
 | 
	
		
			
				|  |  | +        if(item.memberRankSettingId) {
 | 
	
		
			
				|  |  | +          params.studentMemberCount++
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(!params.subjectIdList.includes(item.subjectIdList || -1)) {
 | 
	
		
			
				|  |  | +          params.subjectIdList.push(item.subjectIdList || -1)
 | 
	
		
			
				|  |  | +          params.subjectList.push({
 | 
	
		
			
				|  |  | +            id: item.subjectIdList || -1,
 | 
	
		
			
				|  |  | +            subjectName: item.subjectName || '无声部',
 | 
	
		
			
				|  |  | +            userIdList: [item.userId],
 | 
	
		
			
				|  |  | +            musicScoreIdList: [{
 | 
	
		
			
				|  |  | +              id: null,
 | 
	
		
			
				|  |  | +              name: null,
 | 
	
		
			
				|  |  | +            }], // 默认加一个空的,做占位
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          params.subjectList.forEach(subject => {
 | 
	
		
			
				|  |  | +            if(subject.id == item.subjectIdList) {
 | 
	
		
			
				|  |  | +              subject.userIdList.push(item.userId)
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(!item.subjectIdList && subject.id == -1) {
 | 
	
		
			
				|  |  | +              subject.userIdList.push(item.userId)
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if(!item.subjectIdList) {
 | 
	
		
			
				|  |  | +          item.subjectIdList = -1
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      });
 | 
	
		
			
				|  |  | +      this.dataList = tempData
 | 
	
		
			
				|  |  | +      // 默认选中第1条数据
 | 
	
		
			
				|  |  | +      this.tabActive = (params.subjectIdList[0])
 | 
	
		
			
				|  |  | +      this.tabOriginActive = (params.subjectIdList[0])
 | 
	
		
			
				|  |  | +      this.dataSubjectList = deepClone(params.subjectList)
 | 
	
		
			
				|  |  | +      this.params = params
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +  },
 | 
	
		
			
				|  |  | +  methods: {
 | 
	
		
			
				|  |  | +    onSelectAccompany(item, index) {
 | 
	
		
			
				|  |  | +      this.accompanimentStatus = true
 | 
	
		
			
				|  |  | +      this.tabActiveList = item
 | 
	
		
			
				|  |  | +      this.tabActiveIndex = index
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    delAccompany(music, index) {
 | 
	
		
			
				|  |  | +      if(music.length == 1) {
 | 
	
		
			
				|  |  | +        music[0] = {
 | 
	
		
			
				|  |  | +          id: null,
 | 
	
		
			
				|  |  | +          name: null,
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        this.$forceUpdate()
 | 
	
		
			
				|  |  | +      } else {
 | 
	
		
			
				|  |  | +        music.splice(index, 1)
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    addCloud(item) {
 | 
	
		
			
				|  |  | +      if(item.musicScoreIdList.length < 3) {
 | 
	
		
			
				|  |  | +        item.musicScoreIdList.push('')
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    formatter(type, val) {
 | 
	
		
			
				|  |  | +      if (type === "year") {
 | 
	
		
			
				|  |  | +        return `${val}年`
 | 
	
		
			
				|  |  | +      } else if (type === "month") {
 | 
	
		
			
				|  |  | +        return `${val}月`
 | 
	
		
			
				|  |  | +      } else if (type == "day") {
 | 
	
		
			
				|  |  | +        return `${val}日`
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      return val
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    onSelectMusic(value) {
 | 
	
		
			
				|  |  | +      console.log(value)
 | 
	
		
			
				|  |  | +      this.tabActiveList.musicScoreIdList[this.tabActiveIndex] = {
 | 
	
		
			
				|  |  | +        id: value.examSongId,
 | 
	
		
			
				|  |  | +        name: value.name
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.accompanimentStatus = false
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    confirmStartTime() {
 | 
	
		
			
				|  |  | +      this.dateSection.showStartDate = dayjs(this.dateSection.currentDate).format("YYYY年MM月DD日")
 | 
	
		
			
				|  |  | +      this.dateSection.status = false
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    onEndTime() {
 | 
	
		
			
				|  |  | +      this.dateSection.status = true
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    onSubmit: _throttle(function(type) {
 | 
	
		
			
				|  |  | +      if(!this.title) {
 | 
	
		
			
				|  |  | +        this.$toast('请输入训练标题')
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      if(!this.content) {
 | 
	
		
			
				|  |  | +        this.$toast('请输入训练内容')
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      let tempSubjectList = this.params.subjectList
 | 
	
		
			
				|  |  | +      let musicScoreSubjectDto = []
 | 
	
		
			
				|  |  | +      let notAccompanySong = [] // 用于判断没有设置训练曲目的数据
 | 
	
		
			
				|  |  | +      let subjectLength = this.params.subjectIdList.length
 | 
	
		
			
				|  |  | +      tempSubjectList.forEach(subject => {
 | 
	
		
			
				|  |  | +        let scoreIdList = []
 | 
	
		
			
				|  |  | +        subject.musicScoreIdList.forEach(music => {
 | 
	
		
			
				|  |  | +          if(music.id) {
 | 
	
		
			
				|  |  | +            scoreIdList.push(music.id)
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        if(scoreIdList.length <= 0) {
 | 
	
		
			
				|  |  | +          notAccompanySong.push(subject.subjectName)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        musicScoreSubjectDto.push({
 | 
	
		
			
				|  |  | +          musicScoreIdList: scoreIdList,
 | 
	
		
			
				|  |  | +          userIdList: subject.userIdList
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      if(notAccompanySong.length - subjectLength <= 0 && notAccompanySong != 0 && type[0] != 1) {
 | 
	
		
			
				|  |  | +        // console.log('选择曲目')
 | 
	
		
			
				|  |  | +        this.$dialog.confirm({
 | 
	
		
			
				|  |  | +          message: notAccompanySong.join(',') + '声部未选择团练宝训练曲目,是否继续布置作业?',
 | 
	
		
			
				|  |  | +          confirmButtonColor: '#01C1B5'
 | 
	
		
			
				|  |  | +        }).then(() => {
 | 
	
		
			
				|  |  | +          // on confirm
 | 
	
		
			
				|  |  | +          this.onSubmit(1)
 | 
	
		
			
				|  |  | +        })
 | 
	
		
			
				|  |  | +        .catch(() => {
 | 
	
		
			
				|  |  | +          // on cancel
 | 
	
		
			
				|  |  | +        });
 | 
	
		
			
				|  |  | +        return
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      this.$toast.loading({
 | 
	
		
			
				|  |  | +        message: '加载中...',
 | 
	
		
			
				|  |  | +        duration: 10000,
 | 
	
		
			
				|  |  | +        forbidClick: true,
 | 
	
		
			
				|  |  | +        loadingType: 'spinner',
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +      let params = {
 | 
	
		
			
				|  |  | +        title: this.title,
 | 
	
		
			
				|  |  | +        content: this.content,
 | 
	
		
			
				|  |  | +        courseScheduleId: this.courseId,
 | 
	
		
			
				|  |  | +        expiryDate: dayjs(this.dateSection.currentDate).format('YYYY-MM-DD'),
 | 
	
		
			
				|  |  | +        musicScoreSubjectDto: musicScoreSubjectDto
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      addHomeWork(cleanDeep({...params})).then(res => {
 | 
	
		
			
				|  |  | +        let result = res.data
 | 
	
		
			
				|  |  | +        this.$toast.clear()
 | 
	
		
			
				|  |  | +        if(result.code == 200) {
 | 
	
		
			
				|  |  | +          this.$toast('作业布置成功')
 | 
	
		
			
				|  |  | +          setTimeout(() => {
 | 
	
		
			
				|  |  | +            let query = this.$route.query
 | 
	
		
			
				|  |  | +            const path = query.isNewJoin == 1 ? '/afterClassEvaluateDetail' : '/courseEvaluation'
 | 
	
		
			
				|  |  | +            this.$router.replace({
 | 
	
		
			
				|  |  | +              path,
 | 
	
		
			
				|  |  | +              query: {
 | 
	
		
			
				|  |  | +                id: query.id,
 | 
	
		
			
				|  |  | +                reviewId: query.reviewId,
 | 
	
		
			
				|  |  | +                isInside: query.isInside,
 | 
	
		
			
				|  |  | +                work: 1
 | 
	
		
			
				|  |  | +              }
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +          }, 500);
 | 
	
		
			
				|  |  | +        } else {
 | 
	
		
			
				|  |  | +          this.$toast(result.msg)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      })
 | 
	
		
			
				|  |  | +    }, 500)
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +</script>
 | 
	
		
			
				|  |  | +<style lang="less" scoped>
 | 
	
		
			
				|  |  | +@import url("../../assets/commonLess/variable.less");
 | 
	
		
			
				|  |  | +.arrangeWork {
 | 
	
		
			
				|  |  | +  min-height: 100vh;
 | 
	
		
			
				|  |  | +  overflow-y: auto;
 | 
	
		
			
				|  |  | +  overflow-x: hidden;
 | 
	
		
			
				|  |  | +  background-color: #F3F4F8;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/.van-cell {
 | 
	
		
			
				|  |  | +  font-size: .14rem;
 | 
	
		
			
				|  |  | +  padding: .12rem .16rem;
 | 
	
		
			
				|  |  | +  line-height: .24rem;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.arrowDown {
 | 
	
		
			
				|  |  | +  display: inline-block;
 | 
	
		
			
				|  |  | +  margin-left: .1rem;
 | 
	
		
			
				|  |  | +  width: 0.1rem;
 | 
	
		
			
				|  |  | +  height: 0.07rem;
 | 
	
		
			
				|  |  | +  background: url('../../assets/images/audition/arrow_down.png') no-repeat center center;
 | 
	
		
			
				|  |  | +  background-size: 100%;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.container {
 | 
	
		
			
				|  |  | +  .formGroup {
 | 
	
		
			
				|  |  | +    position: relative;
 | 
	
		
			
				|  |  | +    margin-top: .1rem;
 | 
	
		
			
				|  |  | +    background: #ffffff;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  .formTitle {
 | 
	
		
			
				|  |  | +    padding: .12rem .21rem 0;
 | 
	
		
			
				|  |  | +    font-size: .16rem;
 | 
	
		
			
				|  |  | +    color: #333333;
 | 
	
		
			
				|  |  | +    font-weight: 500;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.endTime {
 | 
	
		
			
				|  |  | +  margin-top: .1rem;
 | 
	
		
			
				|  |  | +  .van-cell__title {
 | 
	
		
			
				|  |  | +    font-size: .16rem;
 | 
	
		
			
				|  |  | +    color: #1A1A1A;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +  /deep/.van-cell__value {
 | 
	
		
			
				|  |  | +    // width: 30%;
 | 
	
		
			
				|  |  | +    justify-content: flex-end;
 | 
	
		
			
				|  |  | +    text-align: right;
 | 
	
		
			
				|  |  | +    font-size: .16rem;
 | 
	
		
			
				|  |  | +    color: #1A1A1A;
 | 
	
		
			
				|  |  | +    display: flex;
 | 
	
		
			
				|  |  | +    align-items: center;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.button-group {
 | 
	
		
			
				|  |  | +  margin: 0.3rem 0.26rem 0.2rem;
 | 
	
		
			
				|  |  | +  .van-button--primary {
 | 
	
		
			
				|  |  | +    background: @mColor;
 | 
	
		
			
				|  |  | +    border: 1px solid @mColor;
 | 
	
		
			
				|  |  | +    font-size: 0.18rem;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +.dot {
 | 
	
		
			
				|  |  | +  width: 4px;
 | 
	
		
			
				|  |  | +  height: 0.17rem;
 | 
	
		
			
				|  |  | +  background: #01c1b5;
 | 
	
		
			
				|  |  | +  border-radius: 3px;
 | 
	
		
			
				|  |  | +  position: absolute;
 | 
	
		
			
				|  |  | +  z-index: 98;
 | 
	
		
			
				|  |  | +  top: .15rem;
 | 
	
		
			
				|  |  | +  left: 0.12rem;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/.van-tab {
 | 
	
		
			
				|  |  | +  font-size: 16px;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +/deep/.van-popup--bottom {
 | 
	
		
			
				|  |  | +  border-radius: 0px 0px 0px 0px!important;
 | 
	
		
			
				|  |  | +  overflow: auto!important;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.accompanyHeader {
 | 
	
		
			
				|  |  | +  font-size: .14rem;
 | 
	
		
			
				|  |  | +  padding: .16rem .08rem .14rem;
 | 
	
		
			
				|  |  | +  color: #333;
 | 
	
		
			
				|  |  | +  font-weight: 500;
 | 
	
		
			
				|  |  | +  span {
 | 
	
		
			
				|  |  | +    color: #808080;
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +.addAccompaniment {
 | 
	
		
			
				|  |  | +  width: 80%;
 | 
	
		
			
				|  |  | +  height: .42rem;
 | 
	
		
			
				|  |  | +  line-height: .42rem;
 | 
	
		
			
				|  |  | +  text-align: center;
 | 
	
		
			
				|  |  | +  margin: .1rem auto 0;
 | 
	
		
			
				|  |  | +  border: 1px dashed #CCC;
 | 
	
		
			
				|  |  | +  background: #FBFBFB;
 | 
	
		
			
				|  |  | +  font-size: .14rem;
 | 
	
		
			
				|  |  | +  color: #666666;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +</style>
 |