123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943 |
- <template>
- <div class="program">
- <van-cell-group class="van-cell-group--inset">
- <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> -->
- </template>
- </van-cell>
- </van-cell-group>
- <h2 class="van-block__title">{{ typeStatus ? '付费' : '赠送' }}课程排课</h2>
- <van-cell-group>
- <van-field
- :value="typeStatus ? courseType[vipGroup.courseType] : courseType[vipGroup.giveCourseType]"
- label="课程类型"
- :readonly="true"
- input-align="right"
- size="large"
- placeholder="请选择"
- />
- <van-field
- :value="typeStatus ? vipGroup.vipGroupCategoryNames : vipGroup.giveCategoryName"
- label="课程形式"
- v-if="courseTypeIsVip"
- :readonly="true"
- input-align="right"
- size="large"
- placeholder="请选择"
- />
- <van-field
- v-model="formName.subjectListName"
- @click="onGetSheetList('subjectList')"
- label="排课声部"
- :readonly="true"
- input-align="right"
- is-link
- size="large"
- placeholder="请选择"
- />
- <van-field
- v-model="formName.educationalTeacherName"
- @click="onGetSheetList('teacherList')"
- label="乐团主管"
- :readonly="true"
- input-align="right"
- is-link
- size="large"
- placeholder="请选择"
- />
- </van-cell-group>
- <template v-if="studentList.length > 0">
- <h2 class="van-block__title">上课学员</h2>
- <van-cell-group>
- <van-cell title-style="flex: 1 auto; color: #1A1A1A;" size="large" v-for="(item, index) in studentList" :key="index">
- <template #title>
- {{ item.username }} - {{ item.phone }}
- </template>
- <template #default>
- <span @click="onDelete('student', item)"><van-icon name="delete-o" size=".14rem" /> <span style="font-size: .12rem;">删除</span></span>
- </template>
- </van-cell>
- </van-cell-group>
- </template>
- <div class="addButton" @click="studentStatus = true">
- <van-icon name="plus" /> 添加学员
- </div>
- <h2 class="van-block__title">课时组成</h2>
- <van-cell-group>
- <van-field
- v-if="statusList.hasOnline && teachMode == -1"
- v-model="form.onlineClassesNums"
- @keyup="onClassKeyUp"
- label="线上课次数"
- input-align="right"
- size="large"
- placeholder="请输入次数"
- type="number"
- />
- <van-field
- v-if="statusList.hasOffline && teachMode == -1"
- v-model="form.offlineClassesNums"
- @keyup="onClassKeyUp('offLine')"
- label="线下课次数"
- input-align="right"
- size="large"
- placeholder="请输入次数"
- type="number"
- />
- <van-field
- v-if="tempOfflineNum > 0"
- v-model="formName.teacherSchoolName"
- @click="onGetSheetList('teacherSchool')"
- label="线下课地址"
- :readonly="true"
- input-align="right"
- is-link
- size="large"
- placeholder="请选择"
- />
- <van-field
- :value="(form.studentNum || 0) + '人'"
- label="班级人数"
- :readonly="true"
- input-align="right"
- size="large"
- />
- <van-field
- :value="(form.singleClassMinutes || 0) + '分钟'"
- label="单课时时长"
- :readonly="true"
- input-align="right"
- size="large"
- />
- </van-cell-group>
- <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
- v-model="form.totalClassTime"
- label="课时总数"
- :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="排课开始时间"
- :readonly="true"
- input-align="right"
- is-link
- size="large"
- placeholder="请选择"
- @click="dataForm.status = true"
- />
- </van-cell-group>
- <van-cell-group :border="false" style="margin-top: .1rem">
- <van-cell
- title-class="title-time"
- v-for="(item, index) in scheduleList"
- :key="index"
- >
- <template slot="title">
- <span class="online">{{ item.type }}</span>
- <span class="week">{{ item.weekStr }}</span>
- <span class="timer">{{ item.startTime + "~" + item.endTime }}</span>
- </template>
- <template slot="default">
- <span @click="onDelete('class', item)"><van-icon name="delete-o" size=".14rem" /> <span style="font-size: .12rem;">删除</span></span>
- </template>
- </van-cell>
- </van-cell-group>
- <div class="addButton" @click="teachingStatus = true">
- <van-icon name="plus" /> 添加课时安排
- </div>
- <van-cell-group>
- <van-field
- label="排课列表"
- v-if="scheduleList.length > 0"
- disabled
- input-align="right"
- @click="onShowTimeTable"
- is-link
- size="large"
- />
- </van-cell-group>
- <div class="button-group">
- <van-button type="primary" @click="onSubmit" round size="large">确认</van-button>
- </div>
- <!-- 选择上课学员 -->
- <van-popup
- v-model="studentStatus"
- :lock-scroll="true"
- position="bottom"
- :style="{ height: '80%' }"
- class="studentChose"
- >
- <student-list
- @close="studentStatus = false"
- :studentList="studentList"
- :activityId="activityId"
- :studentNum="form.studentNum"
- :courseTypeIsVip="courseTypeIsVip"
- :typeStatus="typeStatus"
- @submit="onSelectStudent" />
- </van-popup>
- <!-- 排课开始时间 -->
- <van-popup v-model="dataForm.status" position="bottom">
- <van-datetime-picker
- v-model="dataForm.currentDate"
- type="date"
- :min-date="dataForm.minDate"
- :max-date="dataForm.maxDate"
- :formatter="formatter"
- @cancel="dataForm.status = false"
- @confirm="onCurrentConfirm"
- />
- </van-popup>
- <!-- 课时安排 -->
- <van-popup v-model="teachingStatus" position="bottom">
- <course-modal :scheduleList="scheduleList" :singleClassMinutes="form.singleClassMinutes" @close="teachingStatus = false" />
- </van-popup>
- <van-popup v-model="sheetForm.sheetStatus" position="bottom">
- <van-picker
- :loading="sheetForm.loading"
- :default-index="sheetForm.index"
- :columns="sheetForm.columns"
- show-toolbar
- @cancel="sheetForm.sheetStatus = false"
- @confirm="onSheetConfirm"
- />
- </van-popup>
- <!-- 课表展示 -->
- <van-popup v-model="statusList.classTime" position="bottom" >
- <van-row>
- <van-col span="12">上课类型</van-col>
- <van-col span="12">上课时间</van-col>
- </van-row>
- <div class="tableContainer">
- <van-row v-for="(item, index) in timeTable" :key="index">
- <van-col span="12">
- {{ item.teachMode == "ONLINE" ? "线上" : "线下" }}
- </van-col>
- <van-col span="12">
- {{ item.classDate }} {{ item.startClassTimeStr }}
- </van-col>
- </van-row>
- </div>
- </van-popup>
- </div>
- </template>
- <script>
- import dayjs from 'dayjs'
- import studentList from './modal/studentList'
- import courseModal from './modal/course'
- import { courseType } from '../../constant'
- import { getActivityWaitCourseStudentNum, createVipGroup, createPracticeGroup } from './api'
- import { findSubSubjects, findEducationUsers, findVipSchoolByTeacher2 } from "@/api/teacher";
- export default {
- components: { studentList, courseModal },
- data() {
- const query = this.$route.query
- return {
- courseType,
- type: query.type,
- activityId: query.activityId,
- vipDetail: {},
- vipGroup: {},
- studentStatus: false,
- studentList: [],
- checkboxSelectIds: [],
- teachMode: null, // -1:所有;0:线上;1:线下"
- sheetForm: {
- // 上拉弹窗
- currentType: null, // 当前选择的类型
- sheetStatus: false,
- loading: true, // 加载数据
- index: 0, // 选中的索引值
- columns: [],
- },
- timeTable: [], // 生成的课表
- loadData: {
- // 下拉加载数据
- subjectList: [], // 声部列表
- teacherList: [],
- teacherSchool: [], // 线下课地址
- },
- tempOfflineNum: 0, // 临时存放线下课次数
- form: {
- vipGroupCategoryId: null,
- subjectIdList: null,
- educationalTeacherId: null,
- singleClassMinutes: null,
- onlineClassesNums: null,
- offlineClassesNums: null,
- totalClassTime: null, // 总课时数
- studentNum: null, // 每班人数
- courseStart: null, // 排课开始时间
- teacherSchoolId: null,
- vipGroupActivityId: query.activityId,
- },
- formName: {
- vipGroupCategoryId: null,
- subjectListName: null,
- subjectListIndex: 0, // 声部名称
- educationalTeacherName: null, // 乐团主管
- educationalTeacherIndex: 0,
- teacherSchoolName: null,
- teacherSchoolIndex: 0, // 线下课地址
- },
- statusList: {
- hasOnline: false, // 是否显示线上
- hasOffline: false, // 是否显示线下
- classTime: false, // 查看排课列表
- },
- scheduleList: [],
- // 排课弹窗
- teachingStatus: false, // 课时安排状态
- dataForm: {
- // 时间下拉框
- status: false,
- minDate: new Date(),
- maxDate: new Date(2035, 10, 1),
- currentDate: new Date(),
- },
- }
- },
- computed: {
- typeStatus() { // 是否是付费课程
- return this.type == 'pay' ? true : false
- },
- 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() {
- this.__init()
- },
- methods: {
- async __init() {
- try {
- let res = await getActivityWaitCourseStudentNum({ activityId: this.activityId })
- this.vipDetail = res.data
- let vipGroup = res.data.vipGroupActivity
- 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
- 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 || !this.typeStatus) { // 是否限制了排课
- // 排课次数,活动排课没有范围一说,最大次数和最小次数必须一致
- form.totalClassTime = this.typeStatus ? vipGroup.minCourseNum : vipGroup.giveCourseNum
- }
- // 如果
- if(this.teachMode == 0) {
- form.onlineClassesNums = form.totalClassTime || 0
- form.offlineClassesNums = 0
- } else if(this.teachMode == 1) {
- form.onlineClassesNums = 0
- form.offlineClassesNums = form.totalClassTime || 0
- this.tempOfflineNum = form.totalClassTime || 0
- }
- } catch {
- //
- }
- },
- onGetSheetList(name) {
- // 获取科目列表
- let sheetForm = this.sheetForm;
- sheetForm.columns = [];
- sheetForm.sheetStatus = true;
- sheetForm.loading = true;
- sheetForm.currentType = name;
- sheetForm.index = 0;
- let arr = this.loadData[name];
- if (arr.length > 0) {
- sheetForm.columns = arr;
- sheetForm.index = this.formName[name + "Index"];
- sheetForm.loading = false;
- } else {
- this.onLoadingData(name);
- }
- },
- onLoadingData() {
- // 加载数据
- let sheetForm = this.sheetForm;
- if (sheetForm.currentType == "subjectList") {
- // 声部列表
- findSubSubjects().then((res) => {
- let result = res.data;
- if (result.code == 200 && result.data.length > 0) {
- let tempArr = [];
- result.data.forEach((item) => {
- item.value = item.id;
- item.text = item.name;
- tempArr.push(item);
- });
- this.loadData.subjectList = tempArr;
- sheetForm.columns = tempArr;
- sheetForm.loading = false;
- } else {
- this.$toast("暂无科目列表");
- sheetForm.loading = false;
- }
- });
- } else if (sheetForm.currentType == "teacherSchool") {
- // 教师教学点
- findVipSchoolByTeacher2().then((res) => {
- let result = res.data;
- if (result.code == 200 && result.data.length > 0) {
- let tempArr = [];
- result.data.forEach((item) => {
- item.value = item.id;
- item.text = item.name;
- tempArr.push(item);
- });
- this.loadData.teacherSchool = tempArr;
- sheetForm.columns = tempArr;
- sheetForm.loading = false;
- } else {
- this.$toast("暂无教学点");
- sheetForm.loading = false;
- }
- });
- } else if (sheetForm.currentType == "teacherList") {
- // 乐团主管
- findEducationUsers().then((res) => {
- let result = res.data;
- if (result.code == 200 && result.data.length > 0) {
- let tempArr = [];
- result.data.forEach((item) => {
- item.value = item.userId;
- item.text = item.userName;
- tempArr.push(item);
- });
- this.loadData.teacherList = tempArr;
- sheetForm.columns = tempArr;
- sheetForm.loading = false;
- } else {
- this.$toast("暂无乐团主管");
- sheetForm.loading = false;
- }
- });
- }
- },
- onSheetConfirm(value, index) {
- // 上拉弹窗
- let sheetForm = this.sheetForm,
- form = this.form,
- formName = this.formName
- if (sheetForm.currentType == "subjectList") {
- // 科目名称赋值
- form.subjectIdList = value.value;
- formName.subjectListName = value.text;
- formName.subjectListIndex = index;
- } else if (sheetForm.currentType == "teacherSchool") {
- // 线下课地址
- form.teacherSchoolId = value.value;
- formName.teacherSchoolName = value.text;
- formName.teacherSchoolIndex = index;
- } else if (sheetForm.currentType == "teacherList") {
- // 乐团主管
- form.educationalTeacherId = value.value;
- formName.educationalTeacherName = value.text;
- formName.educationalTeacherIndex = index;
- }
- sheetForm.sheetStatus = false;
- },
- async onSubmit() {
- // 次数限制是否可以继续创建
- let form = this.form;
- let statusList = this.statusList;
- if (!form.subjectIdList) {
- this.$toast("请选择排课声部");
- return false;
- }
- if (!form.educationalTeacherId) {
- this.$toast("请选择乐团主管");
- return;
- }
- if (this.checkboxSelectIds.length <= 0) {
- this.$toast("请选择上课学员");
- return;
- }
- let onlineClassesStatus = !form.onlineClassesNums && form.onlineClassesNums <= 0 ? true : false;
- let offlineClassesStatus = !form.offlineClassesNums && form.offlineClassesNums <= 0 ? true : false;
- if (statusList.hasOnline && onlineClassesStatus) {
- this.$toast("请输入线上课次数");
- return false;
- }
- if (statusList.hasOffline) {
- if (offlineClassesStatus) {
- this.$toast("请输入线下课次数");
- return false;
- }
- // 判断是否有线下
- if (form.offlineClassesNums > 0 && !form.teacherSchoolId) {
- this.$toast("请选择线下课地址");
- return false;
- }
- }
- if (this.scheduleList.length <= 0) {
- this.$toast("课时安排不能为空");
- return false;
- }
- if (!this.checkCourseList()) {
- return;
- }
- // 排课
- this.setTimeTable();
- 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
- }
- if(this.courseTypeIsVip) {
- params.vipGroupApplyBaseInfo = form
- params.giveFlag = !this.typeStatus
- await this.onPayVip(params)
- } else {
- 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 {
- //
- }
- },
- async onPayPractice(params) {
- try {
- await createPracticeGroup(params)
- this.$toast("排课成功");
- setTimeout(() => {
- this.$router.back()
- }, 1000);
- } catch {
- //
- }
- },
- onSelectStudent(items) {
- // 选中的数据
- const tempItems = items || []
- this.studentList = tempItems
- // if(tempItems.length <= 0) { // 判断是否有选择学员
- this.checkboxSelectIds = []
- // }
- tempItems.forEach(item => {
- this.checkboxSelectIds.push(item.userId)
- })
- this.studentStatus = false
- },
- onDelete(type, item) {
- if(type == 'student') {
- // 删除上课学员
- this.$dialog.confirm({
- title: '提示',
- message: '是否删除该学员?',
- confirmButtonText: '确定',
- confirmButtonColor: '#269a93',
- cancelButtonText: '取消'
- }).then(() => {
- let index = this.studentList.indexOf(item);
- if (index !== -1) {
- this.studentList.splice(index, 1);
- }
- })
- } else if(type == 'class') {
- // 删除上课学员
- this.$dialog.confirm({
- title: '提示',
- message: '是否删除该课时安排?',
- confirmButtonText: '确定',
- confirmButtonColor: '#269a93',
- cancelButtonText: '取消'
- }).then(() => {
- let index = this.scheduleList.indexOf(item);
- if (index !== -1) {
- this.scheduleList.splice(index, 1);
- }
- })
- }
- },
- onCurrentConfirm(value) {
- // 排课开始时间
- this.form.courseStart = dayjs(value).format('YYYY-MM-DD')
- this.dataForm.status = false;
- },
- onClassKeyUp(type) {
- // 线上课&线下课修改时
- if(this.teachMode != -1) return
- let form = this.form
- let onlineNum = form.onlineClassesNums
- let offLineNum = form.offlineClassesNums
- // 重置次数,不能
- if(parseInt(onlineNum || 0) + parseInt(offLineNum || 0) >= form.totalClassTime) {
- if(type == 'offLine') {
- let diffNum = form.totalClassTime - parseInt(onlineNum || 0)
- offLineNum = diffNum < 0 ? 0 : diffNum
- } else {
- let diffNum = form.totalClassTime - parseInt(offLineNum || 0)
- onlineNum = diffNum < 0 ? 0 : diffNum
- }
- }
- this.form.onlineClassesNums = onlineNum
- this.form.offlineClassesNums = offLineNum
- this.tempOfflineNum = offLineNum || 0
- },
- onShowTimeTable() {
- // 显示排课列表
- if (!this.checkCourseList()) {
- return;
- }
- this.statusList.classTime = true;
- this.setTimeTable();
- },
- setTimeTable() {
- if (!this.checkCourseList(false)) {
- return;
- }
- // 重置排课列表
- this.timeTable = [];
- let form = this.form,
- scheduleList = this.scheduleList;
- // 拿到线上课数与线下课数 以及
- let online = parseInt(
- form.onlineClassesNums ? form.onlineClassesNums : 0
- );
- let offline = parseInt(
- form.offlineClassesNums ? form.offlineClassesNums : 0
- );
- // 网管课默认只有线上课次
- if(!this.courseTypeIsVip) {
- online = parseInt(form.totalClassTime || 0)
- }
- // 判断是否有课程安排
- if (scheduleList.length <= 0) {
- return;
- }
- let totalCount = Number(online) + Number(offline);
- let tempCourseStart = form.courseStart.replace(/-/gi, "/");
- let dateOperation = new Date(tempCourseStart);
- let forMark = 0;
- while (totalCount && totalCount > 0) {
- for (let i = 0; i < scheduleList.length; i++) {
- if (online == 0 && offline == 0) break;
- let num = scheduleList[i].weekIndex - dateOperation.getDay();
- // 如果是同一天一个周期会出现排课都排到一天
- if (forMark > 0 && num == 0 && i == 0) {
- num = num + 7;
- }
- if (num < 0) {
- // 如果为负数则为下周
- num = num + 7;
- }
- let dataStr = this.getThinkDate(dateOperation, num);
- // 判断是否大于当前时间
- let nowGetTime = new Date().getTime();
- let courseTime = new Date(dataStr.replace(/-/gi, "/") +" " + scheduleList[i].startTime + ":00").getTime();
- if (nowGetTime < courseTime) {
- let tempArr = {
- classDate: dataStr,
- startClassTimeStr: scheduleList[i].startTime,
- endClassTimeStr: scheduleList[i].endTime,
- };
- // console.log(scheduleList[i].type, online, offline)
- if (scheduleList[i].type == "线上" && online > 0) {
- tempArr.teachMode = "ONLINE";
- this.timeTable.push(tempArr);
- online--;
- totalCount--;
- } else if (scheduleList[i].type == "线下" && offline > 0) {
- tempArr.teachMode = "OFFLINE";
- this.timeTable.push(tempArr);
- offline--;
- totalCount--;
- }
- }
- }
- // 加一周
- if (scheduleList.length == 1) {
- dateOperation.setDate(dateOperation.getDate() + 7);
- } else if (
- scheduleList.every((item) => item.weekStr === scheduleList[0].weekStr)
- ) {
- // 标记循环次数(标记判断课程安排是不是同一天)
- forMark++;
- }
- }
- this.timeTable.sort((a, b) => {
- let aStr = dayjs(dayjs(a.classDate).format("YYYY-MM-DD") + " " + a.startClassTimeStr + ":00").valueOf();
- let bStr = dayjs(dayjs(b.classDate).format("YYYY-MM-DD") + " " + b.startClassTimeStr + ":00").valueOf();
- return aStr - bStr;
- });
- },
- getThinkDate(date, num) {
- let Stamp = date;
- Stamp.setDate(date.getDate() + num); // 获取当前月数的第几天
- return dayjs(Stamp).format('YYYY-MM-DD')
- },
- checkCourseList(isShowToast = true) {
- let form = this.form;
- let scheduleList = this.scheduleList || [];
- let hasOnLine = false; // 是否有线上课时安排
- let hasOffLine = false;
- scheduleList.forEach((item) => {
- if (item.type == "线上") {
- hasOnLine = true;
- }
- if (item.type == "线下") {
- hasOffLine = true;
- }
- });
- let statusList = this.statusList;
- let onlineClassesStatus = !form.onlineClassesNums && form.onlineClassesNums <= 0 ? true : false;
- let offlineClassesStatus = !form.offlineClassesNums && form.offlineClassesNums <= 0 ? true : false;
- if (statusList.hasOnline) {
- if (onlineClassesStatus) {
- if (isShowToast) {
- this.$toast("请输入线上课次数");
- }
- return false;
- }
- if (!onlineClassesStatus && !hasOnLine && form.onlineClassesNums > 0) {
- if (isShowToast) {
- this.$toast("课时安排缺少线上课类型");
- }
- return false;
- }
- }
- if (statusList.hasOffline) {
- if (offlineClassesStatus) {
- if (isShowToast) {
- this.$toast("请输入线下课次数");
- }
- return false;
- }
- if (
- !offlineClassesStatus &&
- !hasOffLine &&
- form.offlineClassesNums > 0
- ) {
- if (isShowToast) {
- this.$toast("课时安排缺少线下课类型");
- }
- return false;
- }
- }
- return true;
- },
- formatStatus(type, teachMode) {
- // -1:所有;0:线上;1:线下
- this.teachMode = teachMode
- if(type == 'online' && teachMode == 0) {
- return true
- } else if(type == 'offline' && teachMode == 1) {
- return true
- } else if(teachMode == -1) {
- return true
- } else {
- return false
- }
- },
- formatter(type, value) {
- if (type === "year") {
- return `${value}年`;
- } else if (type === "month") {
- return `${value}月`;
- } else if (type === "day") {
- return `${value}日`;
- }
- return value;
- },
- }
- }
- </script>
- <style lang="less" scoped>
- @import url("../../assets/commonLess/variable.less");
- .program {
- background-color: #F5F5F5;
- min-height: 100vh;
- overflow: hidden;
- }
- .van-cell-group--inset {
- margin: .12rem .12rem 0;
- overflow: hidden;
- border-radius: 8px;
- .titleContent {
- padding: .14rem .16rem;
- }
- .titleStyle {
- font-size: .2rem;
- color: #333333;
- font-size: 500;
- }
- .labelStyle {
- padding-top: .08rem;
- color: #666666;
- font-size: .13rem;
- line-height: .2rem;
- }
- }
- .van-row {
- line-height: 0.4rem;
- border-top: 1px solid #edeef0;
- text-align: center;
- font-size: 0.14rem;
- &:first-child {
- border-top: 0;
- background: #edeef0;
- color: #444;
- font-size: 0.15rem;
- }
- }
- .tableContainer {
- max-height: 2.44rem;
- overflow: auto;
- .van-row {
- color: #444;
- &:first-child {
- border-top: 0;
- background: #fff;
- font-size: 0.14rem;
- }
- }
- }
- .van-block__title {
- padding: .12rem .14rem .06rem;
- color: #808080;
- font-size: .14rem;
- line-height: .2rem;
- }
- .button-group {
- margin: 0.3rem 0.26rem 0.2rem;
- .van-button--primary {
- background: @mColor;
- border-color: @mColor;
- font-size: 0.18rem;
- }
- }
- .title-time {
- display: flex;
- align-items: center;
- flex: 1 auto;
- color: #1A1A1A;
- font-size: .16rem;
- .week {
- padding-left: 0.4rem;
- padding-right: 0.15rem;
- }
- }
- /deep/.studentChose {
- border-radius: .1rem .1rem 0px 0px;
- overflow: auto;
- background: #F5F5F5;
- }
- /deep/.van-field__label {
- color: #1A1A1A;
- }
- /deep/.van-field__control, .showText {
- font-size: 16px;
- color: #808080;
- }
- .addButton {
- margin: .1rem .28rem;
- border: 1px dashed #CFCFCF;
- line-height: .42rem;
- text-align: center;
- background: #FBFBFB;
- color: #666666;
- font-size: .14rem;
- border-radius: .05rem;
- }
- </style>
|