wolyshaw %!s(int64=4) %!d(string=hai) anos
pai
achega
10cb1a9f76

+ 52 - 15
src/views/teamDetail/components/modals/classroom-setting-item.vue

@@ -1,14 +1,15 @@
 <template>
 <template>
   <div>
   <div>
-    <el-form-item
+    <!-- <el-form-item
       label="排课次数"
       label="排课次数"
       prop="courseTimes"
       prop="courseTimes"
     >
     >
       <el-input v-model="form.courseTimes" placeholder="请输入排课次数"/>
       <el-input v-model="form.courseTimes" placeholder="请输入排课次数"/>
-    </el-form-item>
+    </el-form-item> -->
     <el-form-item
     <el-form-item
       label="排课起始时间"
       label="排课起始时间"
-      prop="courseTime"
+      :prop="'classs.' + type + '.courseTime'"
+      :rules="[{ required: true, message: '请选择排课起始时间' }]"
     >
     >
       <el-date-picker v-model.trim="form.courseTime"
       <el-date-picker v-model.trim="form.courseTime"
         :picker-options="pickerOptions"
         :picker-options="pickerOptions"
@@ -20,7 +21,8 @@
     </el-form-item>
     </el-form-item>
     <el-form-item
     <el-form-item
       label="跳过节假日"
       label="跳过节假日"
-      prop="holiday"
+      :prop="'classs.' + type + '.holiday'"
+      :rules="[{ required: true, message: '否跳过节假日' }]"
     >
     >
       <el-radio-group v-model="form.holiday">
       <el-radio-group v-model="form.holiday">
         <el-radio :label="true">是</el-radio>
         <el-radio :label="true">是</el-radio>
@@ -32,11 +34,15 @@
       :data="form.cycle"
       :data="form.cycle"
     >
     >
       <el-table-column
       <el-table-column
-        prop="date"
+        prop="dayOfWeek"
         label="循环周期"
         label="循环周期"
         width="180">
         width="180">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-form-item inline-message prop="dayOfWeek">
+          <el-form-item
+            inline-message
+            :rules="[{ required: true, message: '请选择循环周期' }]"
+            :prop="'classs.' + type + '.cycle.' + scope.$index + '.dayOfWeek'"
+          >
             <el-select v-model.trim="scope.row.dayOfWeek"
             <el-select v-model.trim="scope.row.dayOfWeek"
               style="width:100%!important"
               style="width:100%!important"
               placeholder="请选择循环周期"
               placeholder="请选择循环周期"
@@ -56,8 +62,10 @@
         label="课程时长(分)"
         label="课程时长(分)"
         width="180">
         width="180">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-form-item inline-message>
-            <el-input v-model="scope.row.time" placeholder="请输入课程时长"/>
+          <el-form-item
+            :prop="'classs.' + type + '.cycle.' + scope.$index + '.time'"
+            inline-message>
+            <el-input disabled v-model="scope.row.time" placeholder="请输入课程时长"/>
           </el-form-item>
           </el-form-item>
         </template>
         </template>
       </el-table-column>
       </el-table-column>
@@ -66,12 +74,16 @@
         label="开始时间"
         label="开始时间"
         width="180">
         width="180">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-form-item inline-message>
+          <el-form-item
+            :prop="'classs.' + type + '.cycle.' + scope.$index + '.startClassTime'"
+            :rules="[{ required: true, message: '请选择开始时间' }]"
+            inline-message>
             <el-time-picker style="width: 100%!important;"
             <el-time-picker style="width: 100%!important;"
               v-model.trim="scope.row.startClassTime"
               v-model.trim="scope.row.startClassTime"
               format='HH:mm'
               format='HH:mm'
               value-format='HH:mm'
               value-format='HH:mm'
               placeholder="请选择时间"
               placeholder="请选择时间"
+              @change="val => startTimeChange(val, scope.row)"
               :picker-options="{
               :picker-options="{
                 selectableRange: ['04:30:00 - 23:59:59']
                 selectableRange: ['04:30:00 - 23:59:59']
               }">
               }">
@@ -84,10 +96,13 @@
         label="结束时间"
         label="结束时间"
         width="180">
         width="180">
         <template slot-scope="scope">
         <template slot-scope="scope">
-          <el-form-item inline-message>
+          <el-form-item
+            :prop="'classs.' + type + '.cycle.' + scope.$index + '.endClassTime'"
+            inline-message>
             <el-time-picker style="width: 100%!important;"
             <el-time-picker style="width: 100%!important;"
               v-model.trim="scope.row.endClassTime"
               v-model.trim="scope.row.endClassTime"
               format='HH:mm'
               format='HH:mm'
+              disabled
               value-format='HH:mm'
               value-format='HH:mm'
               placeholder="请选择时间"
               placeholder="请选择时间"
               :picker-options="{
               :picker-options="{
@@ -111,14 +126,29 @@
       type="info"
       type="info"
       size="small"
       size="small"
       plain
       plain
+      :disabled="surplustime < classTimeListByType[type]"
       @click="create"
       @click="create"
       style="margin-top: 10px;width: 100%;"
       style="margin-top: 10px;width: 100%;"
     >添加循环</el-button>
     >添加循环</el-button>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
+import { diffTimerFormMinute, addTimerFormMinute } from '@/utils/date'
+import { classTimeList } from '@/utils/searchArray'
+import dayjs from 'dayjs'
+
+const classTimeListByType = {}
+for (const item of classTimeList) {
+  classTimeListByType[item.value] = item.label
+}
+
 export default {
 export default {
-  props: ['form'],
+  props: ['form', 'type', 'surplustime'],
+  data() {
+    return {
+      classTimeListByType,
+    }
+  },
   computed: {
   computed: {
     pickerOptions() {
     pickerOptions() {
       return {
       return {
@@ -140,15 +170,22 @@ export default {
       ]
       ]
     }
     }
   },
   },
-  mounted() {
-    console.log(this.form)
-  },
   methods: {
   methods: {
     create() {
     create() {
-      this.form.cycle.push({})
+      this.form.cycle.push({
+        time: classTimeListByType[this.type]
+      })
     },
     },
     remove(index) {
     remove(index) {
       this.form.cycle.splice(index, 1)
       this.form.cycle.splice(index, 1)
+    },
+    startTimeChange(val, item) {
+      if (val) {
+        let str = dayjs(new Date()).format('YYYY-MM-DD')
+        this.$set(item, 'endClassTime', addTimerFormMinute(str, val, item.time))
+      } else {
+        this.$set(item, 'endClassTime', '')
+      }
     }
     }
   },
   },
 }
 }

+ 67 - 14
src/views/teamDetail/components/modals/classroom-setting.vue

@@ -5,10 +5,11 @@
       inline
       inline
       ref="form"
       ref="form"
       label-suffix=": "
       label-suffix=": "
-      label-width="100px"
+      label-width="110px"
     >
     >
       <el-form-item
       <el-form-item
         label="主教老师"
         label="主教老师"
+        prop="coreTeacher"
         :rules="[{ required: true, message: '请选择主教老师' }]"
         :rules="[{ required: true, message: '请选择主教老师' }]"
       >
       >
         <el-select
         <el-select
@@ -51,9 +52,11 @@
           :key="key"
           :key="key"
         >
         >
           <template #title>
           <template #title>
-            <p>{{courseTypeListByName[key]}}, 剩余可排课时长{{item.courseTotalMinuties}}分钟</p>
+            <p>{{courseTypeListByName[key]}}, 剩余可排课时长{{surplustime[key]}}分钟</p>
           </template>
           </template>
           <courseItem
           <courseItem
+            :surplustime="surplustime[key]"
+            :type="key"
             :form="item"
             :form="item"
           />
           />
         </el-collapse-item>
         </el-collapse-item>
@@ -68,6 +71,12 @@
 <script>
 <script>
 import { getMusicCourseSettingsWithStudents, classGroupUpdate, revisionClassGroup, revisionAddClassGroup } from '@/api/buildTeam'
 import { getMusicCourseSettingsWithStudents, classGroupUpdate, revisionClassGroup, revisionAddClassGroup } from '@/api/buildTeam'
 import courseItem from "./classroom-setting-item";
 import courseItem from "./classroom-setting-item";
+import { classTimeList } from '@/utils/searchArray'
+
+const classTimeListByType = {}
+for (const item of classTimeList) {
+  classTimeListByType[item.value] = item.label
+}
 
 
 const formatClassGroupTeacherMapperList = (core, ass) => {
 const formatClassGroupTeacherMapperList = (core, ass) => {
   const list = []
   const list = []
@@ -82,8 +91,16 @@ const formatClassGroupTeacherMapperList = (core, ass) => {
   return list
   return list
 }
 }
 
 
+const plusNum = (items = [], key) => {
+  let money = 0
+  for (const item of items) {
+    money += parseFloat(parseFloat(item[key] || 0).toFixed(2) || 0)
+  }
+  return money
+}
+
 export default {
 export default {
-  props: ["teacherList", "activeType", "courseTypeList", 'cooperationList', 'musicGroupId', 'detail', 'studentSubmitedData'],
+  props: ["teacherList", "activeType", "courseTypeList", 'cooperationList', 'musicGroupId', 'detail', 'studentSubmitedData', 'classType'],
   components: {
   components: {
     courseItem,
     courseItem,
   },
   },
@@ -96,16 +113,13 @@ export default {
       },
       },
       collapses: [0],
       collapses: [0],
       courseTimes: {},
       courseTimes: {},
-      courseTypeListByName: {}
+      courseTypeListByName: {},
+      classTimeListByType
     };
     };
   },
   },
   watch: {
   watch: {
     courseTypeList() {
     courseTypeList() {
-      const courseTypeListByName = {}
-      for (const item of this.courseTypeList) {
-        courseTypeListByName[item.value] = item.label
-      }
-      this.courseTypeListByName = courseTypeListByName
+      this.setCourseTypeListByName()
     },
     },
     studentSubmitedData() {
     studentSubmitedData() {
       this.formatClasss()
       this.formatClasss()
@@ -114,13 +128,32 @@ export default {
       this.formatClasss()
       this.formatClasss()
     }
     }
   },
   },
+  computed: {
+    surplustime() {
+      const _ = {}
+      for (const key in this.form.classs) {
+        if (this.form.classs.hasOwnProperty(key)) {
+          const item = this.form.classs[key];
+          _[key] = item.courseTotalMinuties - plusNum(item.cycle, 'time')
+        }
+      }
+      return _
+    }
+  },
   async mounted() {
   async mounted() {
+    this.setCourseTypeListByName()
     this.formatClasss()
     this.formatClasss()
   },
   },
   methods: {
   methods: {
+    setCourseTypeListByName() {
+      const courseTypeListByName = {}
+      for (const item of this.courseTypeList) {
+        courseTypeListByName[item.value] = item.label
+      }
+      this.courseTypeListByName = courseTypeListByName
+    },
     async formatClasss() {
     async formatClasss() {
       try {
       try {
-        console.log(this.detail)
         const res = await getMusicCourseSettingsWithStudents({
         const res = await getMusicCourseSettingsWithStudents({
           musicGroupId: this.musicGroupId,
           musicGroupId: this.musicGroupId,
           studentIds: (this.detail ? undefined : this.studentSubmitedData?.seleched.join(',')),
           studentIds: (this.detail ? undefined : this.studentSubmitedData?.seleched.join(',')),
@@ -136,7 +169,9 @@ export default {
           if (courseTimes[key]) {
           if (courseTimes[key]) {
             classs[key] = {
             classs[key] = {
               courseTotalMinuties: courseTimes[key].courseTotalMinuties,
               courseTotalMinuties: courseTimes[key].courseTotalMinuties,
-              cycle: [{}]
+              cycle: [{
+                time: classTimeListByType[key]
+              }]
             }
             }
           }
           }
         }
         }
@@ -147,6 +182,15 @@ export default {
       }
       }
     },
     },
     submit() {
     submit() {
+      for (const key in this.surplustime) {
+        if (this.surplustime.hasOwnProperty(key)) {
+          const item = this.surplustime[key];
+          if (item > 0) {
+            this.$message.error(`${this.courseTypeListByName[key]},还剩余${item}分钟剩余可排时长`)
+            return
+          }
+        }
+      }
       this.$refs.form.validate(async valid => {
       this.$refs.form.validate(async valid => {
         if (valid) {
         if (valid) {
           const list = []
           const list = []
@@ -156,6 +200,7 @@ export default {
               list.push({
               list.push({
                 type: key,
                 type: key,
                 courseType: key,
                 courseType: key,
+                classGroupName: (this.studentSubmitedData?.name || this.detail?.classGroupName),
                 classGroupId: this.detail?.id,
                 classGroupId: this.detail?.id,
                 musicGroupId: this.musicGroupId,
                 musicGroupId: this.musicGroupId,
                 startDate: item.courseTime,
                 startDate: item.courseTime,
@@ -165,7 +210,7 @@ export default {
                 ),
                 ),
                 holiday: item.holiday,
                 holiday: item.holiday,
                 students: this.studentSubmitedData.seleched,
                 students: this.studentSubmitedData.seleched,
-                courseTimes: item.courseTimes,
+                courseTimes: item.cycle.length,
                 courseTimeDtoList: item.cycle.map(_ => ({
                 courseTimeDtoList: item.cycle.map(_ => ({
                   courseType: key,
                   courseType: key,
                   dayOfWeek: _.dayOfWeek,
                   dayOfWeek: _.dayOfWeek,
@@ -178,10 +223,18 @@ export default {
           try {
           try {
             if (this.detail) {
             if (this.detail) {
               await classGroupUpdate(list)
               await classGroupUpdate(list)
-              tthis.$message.success('排课成功')
+              this.$message.success('排课修改成功')
             } else {
             } else {
-              await revisionClassGroup(list)
+              if (this.classType === 1) {
+                await revisionClassGroup(list)
+                this.$message.success('排课成功')
+              } else if (this.classType === 2 || this.classType === 3) {
+                await revisionAddClassGroup(list)
+                this.$message.success('排课成功')
+              }
             }
             }
+            this.$listeners.submited()
+            this.$listeners.close()
           } catch (error) {
           } catch (error) {
             console.log(error)
             console.log(error)
           }
           }

+ 8 - 3
src/views/teamDetail/components/resetClass.vue

@@ -86,14 +86,14 @@
             </template>
             </template>
           </el-table-column>
           </el-table-column>
           <el-table-column align="center"
           <el-table-column align="center"
-                           width="400px"
+                           width="200px"
                            label="操作">
                            label="操作">
             <template slot-scope="scope">
             <template slot-scope="scope">
               <div>
               <div>
                 <!-- v-if="scope.row.type !='MIX'" -->
                 <!-- v-if="scope.row.type !='MIX'" -->
-                <!-- <el-button type="text"
+                <el-button type="text"
                            @click="resetClass(scope.row)"
                            @click="resetClass(scope.row)"
-                           v-if="scope.row.type != 'MUSIC_NETWORK'">学员调整</el-button> -->
+                           v-if="scope.row.type != 'MUSIC_NETWORK'">学员调整</el-button>
                 <el-button type="text"
                 <el-button type="text"
                            @click="classAdjustment(scope.row)">班级调整</el-button>
                            @click="classAdjustment(scope.row)">班级调整</el-button>
                 <!--<el-button type="text"
                 <!--<el-button type="text"
@@ -155,6 +155,7 @@
       title="学员选择"
       title="学员选择"
       width="750px"
       width="750px"
       :visible.sync="studentVisible"
       :visible.sync="studentVisible"
+      destroy-on-close
     >
     >
       <selectStudent
       <selectStudent
         :studentList="studentList"
         :studentList="studentList"
@@ -299,6 +300,7 @@
       width="950px"
       width="950px"
       :visible.sync="infoVisible"
       :visible.sync="infoVisible"
       :modal-append-to-body="false"
       :modal-append-to-body="false"
+      destroy-on-close
     >
     >
       <classroomSetting
       <classroomSetting
         :classType="classType"
         :classType="classType"
@@ -310,6 +312,7 @@
         :detail="infoDetail"
         :detail="infoDetail"
         :studentSubmitedData="studentSubmitedData"
         :studentSubmitedData="studentSubmitedData"
         @close="infoVisible = false"
         @close="infoVisible = false"
+        @submited="getList"
       />
       />
     </el-dialog>
     </el-dialog>
     <!-- <el-dialog title="班级设置"
     <!-- <el-dialog title="班级设置"
@@ -711,6 +714,7 @@
     <el-dialog
     <el-dialog
       title="学员列表"
       title="学员列表"
       :visible.sync="studentListModalVisible"
       :visible.sync="studentListModalVisible"
+      destroy-on-close
     >
     >
       <viewStudentList
       <viewStudentList
         :list="studentListModal"
         :list="studentListModal"
@@ -1065,6 +1069,7 @@ export default {
     },
     },
     // 新增班级
     // 新增班级
     addNewClass (type) {
     addNewClass (type) {
+      this.classType = (type === 'NORMAL' ? 2 : 3)
       /**
       /**
        *      { value: 'NORMAL', label: '单技班' },
        *      { value: 'NORMAL', label: '单技班' },
         { value: 'MIX', label: '合奏班' },
         { value: 'MIX', label: '合奏班' },