lex-xin vor 3 Jahren
Ursprung
Commit
b15ffdbd16

+ 29 - 1
src/api/teacher.js

@@ -471,6 +471,31 @@ const queryUserById = (params) => {
   })
 }
 
+const queryPracticeGroupSellPrice = (params) => {
+  return axios({
+    url: '/api-teacher/teacherPracticeGroup/queryPracticeGroupSellPrice',
+    method: 'get',
+    params
+  })
+}
+
+const getPracticeGroupCostCount = (params) => {
+  return axios({
+    url: '/api-teacher/teacherPracticeGroup/getPracticeGroupCostCount',
+    method: 'get',
+    params
+  })
+}
+
+// vip课申请
+const practiceGroupApply = (data) => {
+  return axios({
+    url: api + '/teacherPracticeGroup/practiceGroupApply',
+    method: 'post',
+    data: data
+  })
+}
+
 export {
   queryMyCreatedList,
   queryWaitList,
@@ -523,5 +548,8 @@ export {
   newsQuery,
   newsList,
   getCourseStudents,
-  queryUserById
+  queryUserById,
+  queryPracticeGroupSellPrice,
+  practiceGroupApply,
+  getPracticeGroupCostCount
 }

+ 49 - 36
src/views/activeProgram/activeDetail.vue

@@ -1,6 +1,6 @@
 <template>
     <div class="activeDetail">
-        <van-cell-group class="van-cell-group--inset">
+        <van-cell-group class="van-cell-group--inset" v-if="vipGroup.name">
             <van-cell :title="vipGroup.name" class="titleContent" title-class="titleStyle" label-class="labelStyle">
                 <template #label>
                     <p>{{ vipGroup.description }}</p>
@@ -11,47 +11,50 @@
         <h2 class="van-block__title">详细规则</h2>
         <van-row class="active-row">
             <van-col span="10">排课时间范围</van-col>
-            <van-col span="14">{{ vipGroup.coursesStartTime }} 至 {{ vipGroup.coursesEndTime }}</van-col>
+            <van-col span="14" v-if="vipGroup.coursesStartTime && vipGroup.coursesEndTime">{{ vipGroup.coursesStartTime }} 至 {{ vipGroup.coursesEndTime }}</van-col>
+            <van-col span="14" v-else>--</van-col>
             <van-col span="10">是否扣减课程余额</van-col>
             <van-col span="14">{{ vipGroup.payToBalance ? '是' : '否' }}</van-col>
         </van-row>
 
-        <h2 class="van-block__title">付费课程</h2>
-        <div class="active-row">
-            <van-row>
-                <van-col span="8">课程类型</van-col>
-                <van-col span="16">{{ vipGroup.courseType | coursesType }}&nbsp;</van-col>
-                <van-col span="8">课程形式</van-col>
-                <van-col span="16">{{ vipGroup.vipGroupCategoryNames }}&nbsp;</van-col>
-                <van-col span="8">上课模式</van-col>
-                <van-col span="16">{{ vipGroup.teachMode | formatTeachModel }}&nbsp;</van-col>
-                <van-col span="8">单课时时长</van-col>
-                <van-col span="16">{{ vipGroup.singleCourseTime }}分钟</van-col>
-                <van-col span="8">课时数</van-col>
-                <van-col span="16">{{ vipGroup.avgCourseNum }}&nbsp;</van-col>
-            </van-row>
-            <van-cell is-link class="teaching">
-                <template #title>
-                    剩余 <span style="color: #01C1B5">
-                        {{vipGroup.courseType == 'VIP' ? vipDetail.vipNum : null}}
-                        {{vipGroup.courseType == 'PRACTICE' ? vipDetail.practiceNum : null}}
-                    </span> 名学员未排课
-                </template>
-                <template #default>
-                    <span style="color: #01C1B5" @click="onProgram('pay')">立即排课</span>
-                </template>
-            </van-cell>
-        </div>
+        <template v-if="vipGroup.courseType == 'VIP' && vipDetail.vipNum || vipGroup.courseType == 'PRACTICE' && vipDetail.practiceNum">
+            <h2 class="van-block__title">付费课程</h2>
+            <div class="active-row">
+                <van-row>
+                    <van-col span="8">课程类型</van-col>
+                    <van-col span="16">{{ vipGroup.courseType | coursesType }}&nbsp;</van-col>
+                    <van-col span="8" v-if="vipGroup.courseType == 'VIP'">课程形式</van-col>
+                    <van-col span="16" v-if="vipGroup.courseType == 'VIP'">{{ vipGroup.vipGroupCategoryNames }}&nbsp;</van-col>
+                    <van-col span="8">上课模式</van-col>
+                    <van-col span="16">{{ vipGroup.teachMode | formatTeachModel }}&nbsp;</van-col>
+                    <van-col span="8">单课时时长</van-col>
+                    <van-col span="16">{{ vipGroup.singleCourseTime }}分钟</van-col>
+                    <van-col span="8">课时数</van-col>
+                    <van-col span="16">{{ vipGroup.avgCourseNum }}&nbsp;</van-col>
+                </van-row>
+                <van-cell is-link class="teaching">
+                    <template #title>
+                        剩余 <span style="color: #01C1B5">
+                            {{vipGroup.courseType == 'VIP' ? vipDetail.vipNum : null}}
+                            {{vipGroup.courseType == 'PRACTICE' ? vipDetail.practiceNum : null}}
+                        </span> 名学员未排课
+                    </template>
+                    <template #default>
+                        <span style="color: #01C1B5" @click="onProgram('pay')">立即排课</span>
+                    </template>
+                </van-cell>
+            </div>
+        </template>
 
         <!-- 赠送课程类型,只有VIP和网管课的时候才有赠送课程 -->
-        <template v-if="vipGroup.giveCourseType == 'VIP' || vipGroup.giveCourseType == 'PRACTICE'">
+        <template v-if="vipGroup.giveCourseType == 'VIP' && vipDetail.giveVipNum || vipGroup.giveCourseType == 'PRACTICE' && vipDetail.givePracticeNum">
             <h2 class="van-block__title">赠送课程</h2>
             <div class="active-row">
                 <van-row>
                     <van-col span="8">课程类型</van-col>
                     <van-col span="16">{{ vipGroup.giveCourseType | coursesType }}&nbsp;</van-col>
-                    <van-col span="8">课程形式</van-col>
-                    <van-col span="16">{{ vipGroup.giveCategoryName }}&nbsp;</van-col>
+                    <van-col span="8" v-if="vipGroup.giveCourseType == 'VIP'">课程形式</van-col>
+                    <van-col span="16" v-if="vipGroup.giveCourseType == 'VIP'">{{ vipGroup.giveCategoryName }}&nbsp;</van-col>
                     <van-col span="8">上课模式</van-col>
                     <van-col span="16">{{ vipGroup.giveTeachMode | formatTeachModel }}&nbsp;</van-col>
                     <van-col span="8">单课时时长</van-col>
@@ -72,13 +75,19 @@
                 </van-cell>
             </div>
         </template>
+
+        <m-empty v-if="!vipDetail.giveVipNum && !vipDetail.givePracticeNum && !vipDetail.vipNum && !vipDetail.practiceNum" msg="暂无排课内容" />
     </div>
 </template>
 
 <script>
 import { getActivityWaitCourseStudentNum } from './api'
+import MEmpty from '@/components/MEmpty'
 import dayjs from 'dayjs'
 export default {
+    components: {
+        MEmpty
+    },
     data() {
         const query = this.$route.query
         return {
@@ -97,12 +106,16 @@ export default {
                 let res = await getActivityWaitCourseStudentNum({ activityId: this.activityId })
                 this.vipDetail = res.data
                 let vipGroup = res.data.vipGroupActivity
-                vipGroup.coursesStartTime = dayjs(vipGroup.coursesStartTime).format('YYYY-MM-DD')
-                vipGroup.coursesEndTime = dayjs(vipGroup.coursesEndTime).format('YYYY-MM-DD')
-                if(vipGroup.minCourseNum != vipGroup.maxCourseNum) {
-                    vipGroup.avgCourseNum = vipGroup.minCourseNum + '课时 ~ ' + vipGroup.maxCourseNum + '课时'
+                vipGroup.coursesStartTime = vipGroup.coursesStartTime ? dayjs(vipGroup.coursesStartTime).format('YYYY-MM-DD') : null
+                vipGroup.coursesEndTime = vipGroup.coursesEndTime ? dayjs(vipGroup.coursesEndTime).format('YYYY-MM-DD') : null
+                if(vipGroup.minCourseNum > 0) {
+                    if(vipGroup.minCourseNum != vipGroup.maxCourseNum) {
+                        vipGroup.avgCourseNum = vipGroup.minCourseNum + '课时 ~ ' + vipGroup.maxCourseNum + '课时'
+                    } else {
+                        vipGroup.avgCourseNum = vipGroup.maxCourseNum + '课时'
+                    }
                 } else {
-                    vipGroup.avgCourseNum = vipGroup.maxCourseNum + '课时'
+                    vipGroup.avgCourseNum = '自定义'
                 }
                 this.vipGroup = vipGroup
             } catch {

+ 3 - 1
src/views/activeProgram/modal/studentList.vue

@@ -25,7 +25,7 @@
             > -->
             <div class="studentContainer" v-if="dataShow" key="data">
                 <van-checkbox-group v-model="checkboxSelect">
-                    <van-cell-group>
+                    <van-cell-group :border="false">
                         <van-cell
                             v-for="(item, index) in dataList"
                             :key="index"
@@ -169,6 +169,8 @@ export default {
 <style lang="less" scoped>
 @import url("../../../assets/commonLess/variable.less");
 .studentContainer {
+    padding-top: .1rem;
+    background-color: #fff;
     /deep/.van-cell__title {
         font-size: 0.16rem;
         color: @mFontColor;

+ 81 - 19
src/views/activeProgram/program.vue

@@ -4,7 +4,7 @@
             <van-cell :title="vipGroup.name" class="titleContent" title-class="titleStyle" label-class="labelStyle">
                 <template #label>
                     <p>{{ vipGroup.description }}</p>
-                    <p>排课时间范围:{{ vipGroup.coursesStartTime }} 至 {{ vipGroup.coursesEndTime }}</p>
+                    <!-- <p>排课时间范围:{{ vipGroup.coursesStartTime }} 至 {{ vipGroup.coursesEndTime }}</p> -->
                 </template>
             </van-cell>
         </van-cell-group>
@@ -22,6 +22,7 @@
             <van-field
                 :value="typeStatus ? vipGroup.vipGroupCategoryNames : vipGroup.giveCategoryName"
                 label="课程形式"
+                v-if="courseTypeIsVip"
                 :readonly="true"
                 input-align="right"
                 size="large"
@@ -100,7 +101,7 @@
                 placeholder="请选择"
             />
             <van-field
-                :value="form.studentNum + '人'"
+                :value="(form.studentNum || 0) + '人'"
                 label="班级人数"
                 :readonly="true"
                 input-align="right"
@@ -117,14 +118,40 @@
 
         <h2 class="van-block__title">课时安排</h2>
         <van-cell-group>
+            <van-cell
+                title="最早排课时间"
+                :readonly="true"
+                v-if="vipGroup.coursesStartTime"
+                input-align="right"
+                size="large"
+                value-class="showText"
+                :value="vipGroup.coursesStartTime"
+            >
+            </van-cell>
+            <van-cell
+                title="最晚排课时间"
+                :readonly="true"
+                v-if="vipGroup.coursesEndTime"
+                input-align="right"
+                size="large"
+                value-class="showText"
+                :value="vipGroup.coursesEndTime"
+            >
+            </van-cell>
+            <!-- 为了处理,付费网管课程 -->
+            <!-- {{ !courseTypeIsVip && isLimitNum && typeStatus ? false : true }} -->
             <van-field
-                :value="((typeStatus ? vipGroup.minCourseNum : vipGroup.giveCourseNum) || 0) + '课时'"
+                v-model="form.totalClassTime"
                 label="课时总数"
-                :readonly="true"
+                :readonly="!courseTypeIsVip && !isLimitNum && typeStatus ? false : true"
                 input-align="right"
                 size="large"
                 placeholder="请输入排课课时数"
-            />
+            >
+                <template #extra v-if="form.totalClassTime">
+                    <span style="color: #808080; font-size: 16px;">课时</span>
+                </template>
+            </van-field>
             <van-field
                 v-model="form.courseStart"
                 label="排课开始时间"
@@ -322,6 +349,9 @@ export default {
         courseTypeIsVip() { // 目前只有两种课程,VIP 网管课,则可以这样判断
             const type = this.typeStatus ? this.vipGroup.courseType : this.vipGroup.giveCourseType
             return type == 'VIP' ? true : false
+        },
+        isLimitNum() { // 是否限制排课
+            return this.vipGroup.minCourseNum > 0 ? true : false
         }
     },
     mounted() {
@@ -333,20 +363,31 @@ export default {
                 let res = await getActivityWaitCourseStudentNum({ activityId: this.activityId })
                 this.vipDetail = res.data
                 let vipGroup = res.data.vipGroupActivity
-                vipGroup.coursesStartTime = dayjs(vipGroup.coursesStartTime).format('YYYY-MM-DD')
-                vipGroup.coursesEndTime = dayjs(vipGroup.coursesEndTime).format('YYYY-MM-DD')
+                vipGroup.coursesStartTime = vipGroup.coursesStartTime ? dayjs(vipGroup.coursesStartTime).format('YYYY-MM-DD') : null
+                vipGroup.coursesEndTime = vipGroup.coursesEndTime ? dayjs(vipGroup.coursesEndTime).format('YYYY-MM-DD') : null
                 this.vipGroup = vipGroup
                 let form = this.form
                 // 课程形式
                 form.vipGroupCategoryId = this.typeStatus ? vipGroup.vipGroupCategoryIdList : vipGroup.giveCategoryId
                 // 单课时长
                 form.singleClassMinutes = this.typeStatus ? vipGroup.singleCourseTime : vipGroup.giveSingleCourseTime
-                // 排课次数,活动排课没有范围一说,最大次数和最小次数必须一致
-                form.totalClassTime = this.typeStatus ? vipGroup.minCourseNum : vipGroup.giveCourseNum
-                // 每班人数
-                form.studentNum = this.typeStatus ? vipGroup.vipGroupCategoryNum : vipGroup.giveCategoryNum
-                this.statusList.hasOnline = this.typeStatus ? this.formatStatus('online', vipGroup.teachMode) : this.formatStatus('online', vipGroup.giveTeachMode)
-                this.statusList.hasOffline = this.typeStatus ? this.formatStatus('offline', vipGroup.teachMode) : this.formatStatus('online', vipGroup.giveTeachMode)
+
+                if(this.courseTypeIsVip) {
+                    // 每班人数
+                    form.studentNum = this.typeStatus ? vipGroup.vipGroupCategoryNum : vipGroup.giveCategoryNum
+                    this.statusList.hasOnline = this.typeStatus ? this.formatStatus('online', vipGroup.teachMode) : this.formatStatus('online', vipGroup.giveTeachMode)
+                    this.statusList.hasOffline = this.typeStatus ? this.formatStatus('offline', vipGroup.teachMode) : this.formatStatus('online', vipGroup.giveTeachMode)
+                } else {
+                    form.totalClassTime = null
+                    form.studentNum = 1
+                    this.statusList.hasOnLine = false
+                    this.statusList.hasOffLine = false
+                }
+
+                if(this.isLimitNum) { // 是否限制了排课
+                    // 排课次数,活动排课没有范围一说,最大次数和最小次数必须一致
+                    form.totalClassTime = this.typeStatus ? vipGroup.minCourseNum : vipGroup.giveCourseNum
+                }
 
                 // 如果
                 if(this.teachMode == 0) {
@@ -516,22 +557,31 @@ export default {
             form.studentIdList = this.checkboxSelectIds.join(",");
 
             form.firstStudentId = this.studentList.length > 0 ? this.studentList[0].userId : null;
+            form.onlineClassesNum = Number(form.onlineClassesNums);
+            form.offlineClassesNum = Number(form.offlineClassesNums);
             let params = {
-                courseSchedules: this.timeTable,
-                vipGroupApplyBaseInfo: form,
+                courseSchedules: this.timeTable
             }
-            console.log(params)
             if(this.courseTypeIsVip) {
-                params.giveFlag = false
+                params.vipGroupApplyBaseInfo = form
+                params.giveFlag = !this.typeStatus
                 await this.onPayVip(params)
             } else {
-                params.giveFlag = true
+                params.practiceGroupApplyBaseInfoDto = form
+                params.practiceGroupApplyBaseInfoDto.studentId = form.studentIdList
+                params.practiceGroupApplyBaseInfoDto.allCourseNum = form.totalClassTime
+                params.practiceGroupApplyBaseInfoDto.subjectId = form.subjectIdList
+                params.giveFlag = !this.typeStatus
                 await this.onPayPractice(params)
             }
         },
         async onPayVip(params) {
             try {
                 await createVipGroup(params)
+                this.$toast("排课成功");
+                setTimeout(() => {
+                    this.$router.back()
+                }, 1000);
             } catch {
                 //
             }
@@ -539,6 +589,10 @@ export default {
         async onPayPractice(params) {
             try {
                 await createPracticeGroup(params)
+                this.$toast("排课成功");
+                setTimeout(() => {
+                    this.$router.back()
+                }, 1000);
             } catch {
                 //
             }
@@ -547,6 +601,9 @@ export default {
             // 选中的数据
             const tempItems = items || []
             this.studentList = tempItems
+            if(tempItems.length <= 0) { // 判断是否有选择学员
+                this.checkboxSelectIds = []
+            }
             tempItems.forEach(item => {
                 this.checkboxSelectIds.push(item.userId)
             })
@@ -633,6 +690,10 @@ export default {
             let offline = parseInt(
                 form.offlineClassesNums ? form.offlineClassesNums : 0
             );
+            // 网管课默认只有线上课次
+            if(!this.courseTypeIsVip) {
+                online = parseInt(form.totalClassTime || 0)
+            }
             // 判断是否有课程安排
             if (scheduleList.length <= 0) {
                 return;
@@ -865,8 +926,9 @@ export default {
 /deep/.van-field__label {
     color: #1A1A1A;
 }
-/deep/.van-field__control {
+/deep/.van-field__control, .showText {
     font-size: 16px;
+    color: #808080;
 }
 .addButton {
     margin: .1rem .28rem;

+ 255 - 67
src/views/teacher/VIP00Apply.vue

@@ -25,6 +25,7 @@
         placeholder="请选择"
       />
       <van-field
+        v-show="courseTypeVip"
         v-model="formName.vipGroupCategoryName"
         @click="onGetSheetList('vipGroupCategory')"
         label="课程形式"
@@ -53,7 +54,7 @@
         :is-link="checkboxSelectDataList.length > 0 ? false : true"
         size="large"
         :value="checkboxSelectDataList.length > 0 ? '重新选择' : '请选择'"
-        :value-class="checkboxSelectDataList.length > 0 ? 'studentColor' : null"
+        :value-class="[checkboxSelectDataList.length > 0 ? 'studentColor' : null, 'classStudent']"
       />
       <div
         v-if="checkboxSelectDataList.length > 0"
@@ -147,7 +148,9 @@
       <van-field
         v-model="form.totalClassTime"
         label="课时总数"
-        :readonly="true"
+        :readonly="courseTypePractice ? false : true"
+        @keyup="getCalcClass"
+        type="number"
         input-align="right"
         size="large"
         placeholder="请输入次数"
@@ -279,7 +282,6 @@
         v-if="statusList.hasOnline"
         type="number"
       />
-      <!--  || other.onlineSalary !='TEACHER_DEFAULT' -->
       <van-field
         v-model="form.offlineTeacherSalary"
         label="线下课课酬"
@@ -290,7 +292,16 @@
         v-if="statusList.hasOffline"
         type="number"
       />
-      <!--  || other.offlineSalary !='TEACHER_DEFAULT' -->
+      <van-field
+        v-model="form.onlineTeacherSalary"
+        label="网管课课酬"
+        input-align="right"
+        size="large"
+        :readonly="true"
+        placeholder="金额(每课时)"
+        v-if="courseTypePractice"
+        type="number"
+      />
       <van-field
         v-model="form.totalCount"
         :readonly="true"
@@ -474,6 +485,9 @@ import {
   vipGroupApply,
   findEducationUsers,
   queryStudentsWithTeacher,
+  queryPracticeGroupSellPrice,
+  getPracticeGroupCostCount,
+  practiceGroupApply
 } from "@/api/teacher";
 import setLoading from "@/utils/loading";
 import dayjs from "dayjs";
@@ -620,6 +634,8 @@ export default {
       dataShow: true, // 是否有数据
       dataList: [],
       salaryStatus: true, // 是否跳过课酬二次确认
+      singleClassMinutesPrice: 0, //网管课单价
+      singleClassMinutesSalary: 0, // 网管课课酬
     };
   },
   mounted() {
@@ -636,7 +652,7 @@ export default {
   methods: {
     dayjs,
     onCheckStudent() {
-      if (!this.form.vipGroupCategoryId) {
+      if (!this.form.vipGroupCategoryId && this.courseTypeVip) {
         // 判断是否选择了课程形式
         this.$toast("请选择课程形式");
         return;
@@ -647,8 +663,7 @@ export default {
       // 获取科目列表
       let sheetForm = this.sheetForm;
       sheetForm.columns = [];
-      console.log(this.checkboxSelectDataList);
-      if (!this.form.vipGroupCategoryId && name == "vipGroupActivity") {
+      if (!this.form.vipGroupCategoryId && name == "vipGroupActivity" && this.courseTypeVip) {
         this.$toast("请选择课程形式");
         return;
       } else if (
@@ -726,10 +741,15 @@ export default {
             studentIds.push(item.userId);
           });
         }
-        findByVipGroupCategory({
-          categoryId: this.form.vipGroupCategoryId,
-          studentIds: studentIds.join(","),
-        }).then((res) => {
+        let params = {
+          studentIds: studentIds.join(",")
+        }
+        if(this.courseTypeVip) {
+          params.categoryId = this.form.vipGroupCategoryId
+        } else if(this.courseTypePractice) {
+          params.courseType = 'PRACTICE'
+        }
+        findByVipGroupCategory(params).then((res) => {
           let result = res.data;
           if (result.code == 200 && result.data.length > 0) {
             let tempArr = [];
@@ -876,7 +896,11 @@ export default {
           loadData.vipGroupCategorySelect.offlineClassesUnitPrice
         );
 
-        this.onCalcClassTimes(value); // 计算时间等.........
+        if(this.courseTypeVip) {
+          this.onCalcClassTimes(value); // 计算时间等.........
+        } else {
+
+        }
         this.getCalcClass(); // 课酬计算
         this.setTimeTable(); // 重新排课
 
@@ -938,30 +962,81 @@ export default {
           statusList.hasOffline = false;
         break;
       }
-      // console.log(statusList)
-      // const salarySettlementJson = vas.salarySettlementJson ? JSON.parse(vas.salarySettlementJson) : null
-      // console.log(salarySettlementJson, 'salarySettlementJson')
-      // if (salarySettlementJson) {
-      //   // 重新设置课酬
-      //   const vipOfflineSalarySettlement = salarySettlementJson.vipOfflineSalarySettlement || salarySettlementJson.offlineSalarySettlement
-      //   const vipOnlineSalarySettlement = salarySettlementJson.vipOnlineSalarySettlement || salarySettlementJson.onlineSalarySettlement
-      //   console.log(vipOfflineSalarySettlement, vipOnlineSalarySettlement)
-      //   if(vipOfflineSalarySettlement && vipOfflineSalarySettlement.salarySettlementType === 'FIXED_SALARY') {
-      //     form.offlineClassesUnitPrice = Number(vipOfflineSalarySettlement.settlementValue)
-      //   }
-      //   if(vipOnlineSalarySettlement && vipOnlineSalarySettlement.salarySettlementType === 'FIXED_SALARY') {
-      //     form.onlineClassesUnitPrice = Number(vipOnlineSalarySettlement.settlementValue)
-      //   }
-      // }
     },
-    onCourseTypeSelect(value) {
+    async onCourseTypeSelect(value) {
       // 课程类型
+      this.statusList.courseTypeStatus = false
+      if(value.value == this.courseType) return
       this.courseType = value.value
       this.courseTypeName = value.name
-      this.statusList.courseTypeStatus = false
+
+      let form = this.form,
+        formName = this.formName,
+        loadData = this.loadData
+
+      // 课程形式重置
+      form.vipGroupCategoryId = null
+      formName.vipGroupCategoryName = null
+      formName.vipGroupCategoryIndex = 0
+      // 重置上课学生
+      this.checkboxSelect = [];
+      this.checkboxSelectIds = [];
+      this.checkboxSelectList = []; //选中学生列表
+      this.checkboxSelectDataList = [];
+      // 重置活动文案
+      form.vipGroupActivityId = null;
+      formName.vipGroupActivityName = null;
+      formName.vipGroupActivityIndex = 0;
+      loadData.vipGroupActivity = [];
+      loadData.vipGroupActivitySelect = [];
+      // 更新每课时长
+      form.singleClassMinutes = null
+      // 课时总数
+      form.totalClassTime = null
+      form.offlineClassesNums = null
+      form.onlineClassesNums = null
+      this.scheduleList = [] // 清空课时安排
+      if(value.value == 'VIP') {
+        this.courseForm.columns[0].values = ["线上", "线下"]
+
+        form.studentNum = null
+        form.onlineClassesUnitPrice = 0
+        form.onlineTeacherSalary = 0
+        this.getCalcClass();
+      } else if(value.value == 'PRACTICE') {
+        this.courseForm.columns[0].values = ["线上"]
+        // 重置地址数据
+        this.form.teacherSchoolId = null;
+        this.formName.teacherSchoolName = null;
+        this.formName.teacherSchoolIndex = 0;
+
+        // 每班人数 (网管课固定1人)
+        form.studentNum = 1
+        loadData.classTimer = [{ name: 25, value: 25 }];
+        this.statusList.hasOnline = false
+        this.statusList.hasOffline = false
+        this.getCalcClass();
+        // 判断是否已经有金额了
+        if(!this.singleClassMinutesPrice) {
+          await queryPracticeGroupSellPrice().then(res => {
+            let result = res.data
+            if(result.code == 200) {
+              this.singleClassMinutesPrice = result.data.singleClassMinutesPrice || 0
+            }
+          })
+        }
+        if(!this.singleClassMinutesSalary) {
+          await getPracticeGroupCostCount().then(res => {
+            const result = res.data
+            if(result.code == 200) {
+              this.singleClassMinutesSalary = result.data.onlineTeacherSalary || 0
+            }
+          })
+        }
+      }
     },
     onClickSingleClass() {
-      if (!this.formName.vipGroupCategoryName) {
+      if (!this.formName.vipGroupCategoryName && this.courseTypeVip) {
         this.$toast("请选择课程形式");
         return;
       }
@@ -1027,9 +1102,7 @@ export default {
       let enlistForm = this.enlistForm;
       if (type == "end") {
         if (this.form.registrationStartTime) {
-          enlistForm.minDate = new Date(
-            this.form.registrationStartTime.replace(/-/gi, "/")
-          );
+          enlistForm.minDate = new Date(this.form.registrationStartTime.replace(/-/gi, "/"));
         } else {
           enlistForm.minDate = new Date();
         }
@@ -1037,6 +1110,7 @@ export default {
         // 开始时默认为当前时间
         enlistForm.minDate = new Date();
       }
+
       if (value) {
         enlistForm.currentDate = new Date(value.replace(/-/gi, "/"));
       } else {
@@ -1059,10 +1133,18 @@ export default {
     },
     onScheduleRemove(item) {
       // 删除课程安排
-      let index = this.scheduleList.indexOf(item);
-      if (index !== -1) {
-        this.scheduleList.splice(index, 1);
-      }
+      this.$dialog.confirm({
+        title: '提示',
+        message: '是否删除该课时安排?',
+        confirmButtonText: '确定',
+        confirmButtonColor: '#269a93',
+        cancelButtonText: '取消'
+      }).then(() => {
+          let index = this.scheduleList.indexOf(item);
+          if (index !== -1) {
+              this.scheduleList.splice(index, 1);
+          }
+      })
     },
     onTeachinConfirm(value) {
       // 添加课程
@@ -1130,24 +1212,19 @@ export default {
       if (!this.checkCourseList(false)) {
         return;
       }
-      // return
       // 重置排课列表
       this.timeTable = [];
 
       let form = this.form,
         scheduleList = this.scheduleList;
 
-      // if(!form.courseStart) {
-      //     this.$toast('请选择排课开始时间')
-      //     return
-      // }
       // 拿到线上课数与线下课数 以及
-      let online = parseInt(
-        form.onlineClassesNums ? form.onlineClassesNums : 0
-      );
-      let offline = parseInt(
-        form.offlineClassesNums ? form.offlineClassesNums : 0
-      );
+      let online = parseInt(form.onlineClassesNums || 0);
+      let offline = parseInt(form.offlineClassesNums || 0);
+      // 网管课默认只有线上课次
+      if(this.courseTypePractice) {
+        online = parseInt(form.totalClassTime || 0)
+      }
       // 判断是否有课程安排
       if (scheduleList.length <= 0) {
         return;
@@ -1228,13 +1305,25 @@ export default {
         tc = loadData.teacherCategory, // 老师基本信息
         oncn = form.onlineClassesNums ? form.onlineClassesNums : 0, // 线上课次数
         offcn = form.offlineClassesNums ? form.offlineClassesNums : 0 // 线下课次数
-      // 优惠活动
-      const discount = Number(vas.discount) / 100
+      // 网管课默认只有线上课次
+      if(this.courseTypePractice) {
+        oncn = parseInt(form.totalClassTime || 0)
+      }
+      // 优惠活动(如果没有则原价)
+      const discount = Number(vas.discount || 100) / 100
+
+      // 重置老师默认网管课金额
+      if(this.courseTypePractice) {
+        //老师课酬
+        form.onlineTeacherSalary = Math.round(this.singleClassMinutesSalary)
+        // 课程单价
+        form.onlineClassesUnitPrice = Math.round(this.singleClassMinutesPrice)
+      }
       // ...
       if (vas.salarySettlementJson) {
         let obj = JSON.parse(vas.salarySettlementJson);
         // 课程按课来计算
-        if(this.courseType == 'VIP') {
+        if(this.courseTypeVip) {
           if(obj && obj.vipOnlineSalarySettlement) {
             let vnss = obj.vipOnlineSalarySettlement
             if(vnss.salarySettlementType == 'TEACHER_DEFAULT') {
@@ -1256,10 +1345,37 @@ export default {
           } else {
             form.offlineTeacherSalary = Math.round(tc.offlineClassesSalary)
           }
+        } else if(this.courseTypePractice) {
+          // //老师课酬
+          // form.onlineTeacherSalary = Math.round(this.singleClassMinutesSalary)
+          // // 课程单价
+          // form.onlineClassesUnitPrice = Math.round(this.singleClassMinutesPrice)
+          if(obj && obj.practiceSalarySettlement) {
+            let pss = obj.practiceSalarySettlement
+            if(pss.salarySettlementType == 'TEACHER_DEFAULT') {
+              form.onlineTeacherSalary = Math.round(this.singleClassMinutesSalary)
+            } else if(pss.salarySettlementType == 'FIXED_SALARY') {
+              form.onlineTeacherSalary = Math.round(pss.settlementValue * discount)
+            }
+          } else {
+            form.onlineTeacherSalary = Math.round(this.singleClassMinutesSalary)
+          }
         }
       }
 
-      const totalCount = ((oncn * form.onlineClassesUnitPrice + offcn * form.offlineClassesUnitPrice) * discount);
+      let totalCount = 0
+      console.log({
+        singleClassMinutesPrice: this.singleClassMinutesPrice,
+        singleClassMinutesSalary: this.singleClassMinutesSalary,
+        onlineClassesUnitPrice: form.onlineClassesUnitPrice,
+        discount: discount,
+        oncn: oncn
+      })
+      if(this.courseTypeVip) {
+        totalCount = ((oncn * form.onlineClassesUnitPrice + offcn * form.offlineClassesUnitPrice) * discount);
+      } else {
+        totalCount = ((oncn * form.onlineClassesUnitPrice) * discount);
+      }
       form.totalCount = Number(totalCount);
     },
     getThinkDate(date, num) {
@@ -1361,7 +1477,7 @@ export default {
         this.$toast("请选择科目");
         return false;
       }
-      if (!form.vipGroupCategoryId) {
+      if (!form.vipGroupCategoryId && this.courseTypeVip) {
         this.$toast("请选择课程形式");
         return false;
       }
@@ -1374,7 +1490,7 @@ export default {
         return;
       }
 
-      if (!form.vipGroupActivityId) {
+      if (!form.vipGroupActivityId && this.courseTypeVip) {
         this.$toast("请选择活动方案");
         return false;
       }
@@ -1424,7 +1540,6 @@ export default {
       }
 
       let vipGroupActivitySelect = this.loadData.vipGroupActivitySelect;
-      console.log(vipGroupActivitySelect)
       if (vipGroupActivitySelect.minCourseNum > 0 && vipGroupActivitySelect.maxCourseNum > 0) {
         // debugger
         let tempCourseCount =
@@ -1523,6 +1638,9 @@ export default {
 
       form.onlineClassesNum = Number(form.onlineClassesNums);
       form.offlineClassesNum = Number(form.offlineClassesNums);
+      if(this.courseTypePractice) { //网管课等于总课次
+        form.onlineClassesNum = Number(form.totalClassTime)
+      }
 
       form.totalClassTimes = Number(form.onlineClassesNums) +Number(form.offlineClassesNums)
       form.paymentExpireDate = form.coursesExpireDate;
@@ -1530,8 +1648,7 @@ export default {
 
       form.firstStudentId = this.checkboxSelectDataList.length > 0 ? this.checkboxSelectDataList[0].userId : null;
       let params = {
-        courseSchedules: this.timeTable,
-        vipGroupApplyBaseInfo: form,
+        courseSchedules: this.timeTable
       };
       if (allowOverstepActivityStudentNum == 1) {
         params.allowOverstepActivityStudentNum = 1;
@@ -1540,6 +1657,18 @@ export default {
         return;
       }
       this.onSubmitStatus = false;
+      if(this.courseTypeVip) {
+        params.vipGroupApplyBaseInfo = form
+        await this.getVipApply(params)
+      } else {
+        params.practiceGroupApplyBaseInfoDto = form
+        params.practiceGroupApplyBaseInfoDto.studentId = form.studentIdList
+        params.practiceGroupApplyBaseInfoDto.allCourseNum = form.totalClassTime
+        params.practiceGroupApplyBaseInfoDto.subjectId = form.subjectIdList
+        await this.getPracticeApply(params)
+      }
+    },
+    async getVipApply(params) {
       setLoading(true);
       await vipGroupApply(params)
         .then((res) => {
@@ -1593,6 +1722,60 @@ export default {
           setLoading(false);
         });
     },
+    async getPracticeApply(params) {
+      setLoading(true);
+      await practiceGroupApply(params)
+        .then((res) => {
+          let result = res.data;
+          setLoading(false);
+          if (result.code == 200) {
+            this.$toast("申请成功");
+            setTimeout(() => {
+              this.onSubmitStatus = true;
+              if (browser().iPhone) {
+                window.webkit.messageHandlers.DAYA.postMessage(
+                  JSON.stringify({
+                    api: "back",
+                  })
+                );
+              } else if (browser().android) {
+                DAYA.postMessage(
+                  JSON.stringify({
+                    api: "back",
+                  })
+                );
+              } else {
+                this.$router.push("/business");
+              }
+            }, 500);
+          } else if (result.code == 206) {
+            this.onSubmitStatus = true;
+            this.salaryStatus = true;
+            this.$dialog
+              .confirm({
+                message: result.msg,
+                showConfirmButton: true,
+                showCancelButton: true,
+                confirmButtonText: "继续创建",
+                cancelButtonText: "取消",
+              })
+              .then(() => {
+                this.salaryStatus = false;
+                this.onSubmit(1);
+              });
+            return;
+          } else {
+            this.onSubmitStatus = true;
+            this.salaryStatus = true;
+            this.$toast(result.msg);
+          }
+        })
+        .catch(() => {
+          this.onSubmitStatus = true;
+          this.salaryStatus = true;
+          setLoading(false);
+        });
+    },
     checkCourseList(isShowToast = true) {
       let form = this.form;
       let scheduleList = this.scheduleList || [];
@@ -1611,14 +1794,6 @@ export default {
         !form.onlineClassesNums && form.onlineClassesNums <= 0 ? true : false;
       let offlineClassesStatus =
         !form.offlineClassesNums && form.offlineClassesNums <= 0 ? true : false;
-      // let onlineClassesStatus = false
-      // if(form.onlineClassesNums || form.onlineClassesNums >= 0) {
-      // 	onlineClassesStatus = true
-      // }
-      // let offlineClassesStatus = false
-      // if(form.offlineClassesNums || form.offlineClassesNums >= 0) {
-      // 	offlineClassesStatus = true
-      // }
       if (statusList.hasOnline) {
         if (onlineClassesStatus) {
           if (isShowToast) {
@@ -1693,9 +1868,11 @@ export default {
     },
     onPopupSubmit() {
       const vipGroupCategorySelect = this.loadData.vipGroupCategorySelect;
-      if (this.checkboxSelect.length != vipGroupCategorySelect.studentNum) {
+      const compareNum = this.courseTypeVip ? vipGroupCategorySelect.studentNum : 1
+      console.log(compareNum)
+      if (this.checkboxSelect.length != compareNum) {
         this.$toast(
-          `请选择学生${vipGroupCategorySelect.studentNum}名,当前选择${this.checkboxSelect.length}名`
+          `请选择学生${compareNum}名,当前选择${this.checkboxSelect.length}名`
         );
         return;
       }
@@ -1737,6 +1914,14 @@ export default {
       return first + "****" + last;
     },
   },
+  computed: {
+    courseTypeVip() {
+      return this.courseType == 'VIP' ? true : false
+    },
+    courseTypePractice() {
+      return this.courseType == 'PRACTICE' ? true : false
+    }
+  }
 };
 </script>
 <style lang='less' scoped>
@@ -1915,6 +2100,9 @@ export default {
 .studentColor {
   color: @mColor;
 }
+.classStudent {
+  font-size: .14rem !important;
+}
 
 /deep/.van-field--disabled .van-field__label,
 /deep/.van-field__label {