|
@@ -1,15 +1,15 @@
|
|
|
<template>
|
|
|
<div class="arrangeWork">
|
|
|
<m-header v-if="headerStatus" />
|
|
|
- <van-cell title="服务指标课外训练" title-style="font-size: .18rem; color: #333333;">
|
|
|
+ <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;">
|
|
|
<template #title>
|
|
|
- <span style="padding-right: .3rem">学员共<i style="font-style: normal; color: #01C1B5">34</i>人</span>
|
|
|
- <span>会员 <i style="font-style: normal; color: #FF802C">34</i>人</span>
|
|
|
+ <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">
|
|
@@ -21,7 +21,7 @@
|
|
|
<div class="formGroup">
|
|
|
<div class="dot"></div>
|
|
|
<div class="formTitle">训练内容</div>
|
|
|
- <van-field rows="8" v-model="content" maxlength="600" show-word-limit type="textarea" placeholder="请输入训练内容" />
|
|
|
+ <van-field rows="4" v-model="content" maxlength="600" show-word-limit type="textarea" placeholder="请输入训练内容" />
|
|
|
</div>
|
|
|
</div>
|
|
|
<van-cell class="endTime" title="训练提交截止时间" @click="onEndTime" is-link readonly placeholder="请选择截止时间" >
|
|
@@ -33,18 +33,18 @@
|
|
|
<div class="accompanyHeader">
|
|
|
云教练曲目选择<span>(若作业内容非云教练曲目则无需选择)</span>
|
|
|
</div>
|
|
|
- <van-tabs class="van-hairline--bottom" v-model="tabActive" color="#01C1B5">
|
|
|
- <van-tab title="长笛" name="1"></van-tab>
|
|
|
- <van-tab title="单簧管" name="2"></van-tab>
|
|
|
+ <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;" title="训练曲目" @click="onSelectAccompany(item, index)" readonly is-link placeholder="请选择训练曲目" >
|
|
|
+ <template #default>
|
|
|
+ {{ music.name }}
|
|
|
+ </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>
|
|
|
- <van-cell class="endTime" style="margin-top: 0;" title="训练曲目" @click="accompanimentStatus = true" readonly is-link placeholder="请选择训练曲目" >
|
|
|
- <template #default>
|
|
|
- {{ dateSection.musicScoreName }}
|
|
|
- </template>
|
|
|
- </van-cell>
|
|
|
- <div class="addAccompaniment">
|
|
|
- <van-icon name="plus" size="16px" />增加云教练训练曲目
|
|
|
- </div>
|
|
|
|
|
|
<div class="button-group">
|
|
|
<van-button type="primary" round size="large" @click="onSubmit">确定</van-button>
|
|
@@ -67,7 +67,7 @@
|
|
|
<van-sticky>
|
|
|
<m-header name="作业曲目" :backUrl="backUrl" />
|
|
|
</van-sticky>
|
|
|
- <accompaniment-modal isHead @onSelectMusic="onSelectMusic" />
|
|
|
+ <accompaniment-modal isHead @onSelectMusic="onSelectMusic" :searchSubjectId="tabActive" />
|
|
|
</van-popup>
|
|
|
</div>
|
|
|
</template>
|
|
@@ -79,12 +79,14 @@ import { addHomeWork } from '@/api/audition'
|
|
|
import { getCourseStudents } from '@/api/teacher'
|
|
|
import AccompanimentModal from './modal/accompanimentModal'
|
|
|
import cleanDeep from 'clean-deep'
|
|
|
+import deepClone from '@/helpers/deep-clone'
|
|
|
export default {
|
|
|
name: "teacherList",
|
|
|
components: { MHeader, AccompanimentModal },
|
|
|
data() {
|
|
|
let tempDate = new Date() // 默认显示T+3
|
|
|
tempDate.setDate(tempDate.getDate() + 3)
|
|
|
+ let query = this.$route.query
|
|
|
return {
|
|
|
headerStatus: true,
|
|
|
backUrl: {
|
|
@@ -93,6 +95,8 @@ export default {
|
|
|
this.accompanimentStatus = false
|
|
|
}
|
|
|
},
|
|
|
+ classGroupName: query.classGroupName,
|
|
|
+ courseId: query.courseId,
|
|
|
dateSection: {
|
|
|
status: false,
|
|
|
minDate: new Date(),
|
|
@@ -106,7 +110,16 @@ export default {
|
|
|
content: null, // 课程编号
|
|
|
expiryDate: null, // 作业截止日期
|
|
|
accompanimentStatus: false, // 伴奏弹窗
|
|
|
- tabActive: 'changDi'
|
|
|
+ tabActive: 0,
|
|
|
+ tabActiveList: {}, // 选中当前信息
|
|
|
+ tabActiveIndex: 0,
|
|
|
+ params: {
|
|
|
+ studentCount: 0, // 学员总数
|
|
|
+ studentMemberCount: 0, // 学员会员数
|
|
|
+ subjectIdList: [],
|
|
|
+ subjectList: []
|
|
|
+ }
|
|
|
+
|
|
|
};
|
|
|
},
|
|
|
async mounted() {
|
|
@@ -120,10 +133,55 @@ export default {
|
|
|
this.headerStatus = false
|
|
|
}
|
|
|
await getCourseStudents({ courseScheduleId: this.courseId }).then(res => {
|
|
|
- console.log(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)) {
|
|
|
+ params.subjectIdList.push(item.subjectIdList)
|
|
|
+ params.subjectList.push({
|
|
|
+ id: item.subjectIdList,
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ });
|
|
|
+ // 默认选中第1条数据
|
|
|
+ this.tabActive = deepClone(params.subjectIdList[0])
|
|
|
+ this.params = params
|
|
|
})
|
|
|
},
|
|
|
methods: {
|
|
|
+ onSelectAccompany(item, index) {
|
|
|
+ this.accompanimentStatus = true
|
|
|
+ this.tabActiveList = item
|
|
|
+ this.tabActiveIndex = index
|
|
|
+ },
|
|
|
+ addCloud(item) {
|
|
|
+ if(item.musicScoreIdList.length < 3) {
|
|
|
+ item.musicScoreIdList.push('')
|
|
|
+ }
|
|
|
+ },
|
|
|
formatter(type, val) {
|
|
|
if (type === "year") {
|
|
|
return `${val}年`
|
|
@@ -135,8 +193,10 @@ export default {
|
|
|
return val
|
|
|
},
|
|
|
onSelectMusic(value) {
|
|
|
- this.dateSection.musicScoreName = value.examSongName
|
|
|
- this.dateSection.musicScoreId = value.examSongId
|
|
|
+ this.tabActiveList.musicScoreIdList[this.tabActiveIndex] = {
|
|
|
+ id: value.examSongId,
|
|
|
+ name: value.examSongName
|
|
|
+ }
|
|
|
this.accompanimentStatus = false
|
|
|
},
|
|
|
confirmStartTime() {
|
|
@@ -147,10 +207,37 @@ export default {
|
|
|
this.dateSection.status = true
|
|
|
},
|
|
|
onSubmit: _throttle(function() {
|
|
|
+ if(!this.title) {
|
|
|
+ this.$toast('请输入训练标题')
|
|
|
+ return
|
|
|
+ }
|
|
|
if(!this.content) {
|
|
|
- this.$toast('请输入作业内容')
|
|
|
+ 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) {
|
|
|
+ console.log('选择曲目')
|
|
|
+ }
|
|
|
+
|
|
|
this.$toast.loading({
|
|
|
message: '加载中...',
|
|
|
duration: 10000,
|
|
@@ -159,18 +246,26 @@ export default {
|
|
|
})
|
|
|
let query = this.$route.query
|
|
|
let params = {
|
|
|
+ title: this.title,
|
|
|
content: this.content,
|
|
|
- courseId: query.courseId,
|
|
|
+ courseScheduleId: query.courseId,
|
|
|
expiryDate: dayjs(this.dateSection.currentDate).format('YYYY-MM-DD'),
|
|
|
- musicScoreId: this.dateSection.musicScoreId
|
|
|
+ musicScoreSubjectDto: musicScoreSubjectDto
|
|
|
}
|
|
|
addHomeWork(cleanDeep({...params})).then(res => {
|
|
|
let result = res.data
|
|
|
this.$toast.clear()
|
|
|
if(result.code == 200) {
|
|
|
this.$toast('作业布置成功')
|
|
|
+ let query = this.$route.query
|
|
|
this.$router.replace({
|
|
|
- path: '/manageEvaluation'
|
|
|
+ path: '/courseEvaluation',
|
|
|
+ query: {
|
|
|
+ id: query.id,
|
|
|
+ reviewId: query.reviewId,
|
|
|
+ isInside: query.isInside,
|
|
|
+ work: 1
|
|
|
+ }
|
|
|
})
|
|
|
} else {
|
|
|
this.$toast(result.msg)
|