|
@@ -11,15 +11,33 @@
|
|
|
</el-radio-group>
|
|
|
</el-form-item> -->
|
|
|
|
|
|
- <el-table v-if="form && form.cycle && form.cycle.length > 0" :data="form.cycle" :show-header="false">
|
|
|
+ <el-table
|
|
|
+ v-if="form && form.cycle && form.cycle.length > 0"
|
|
|
+ :data="form.cycle"
|
|
|
+ :show-header="false"
|
|
|
+ >
|
|
|
<el-table-column>
|
|
|
<template slot-scope="scope">
|
|
|
<div>
|
|
|
- <el-form-item :prop="'classs.' + type + '.cycle.' + scope.$index + '.coreTeacher'
|
|
|
- " label-width="88px" :rules="[{ required: true, message: '请选择主教老师' }]">
|
|
|
- <el-select v-model.trim="scope.row.coreTeacher" placeholder="请选择主教老师" clearable filterable>
|
|
|
- <el-option v-for="(item, index) in teacherList" :key="index" :label="item.realName"
|
|
|
- :value="String(item.id)">
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'classs.' + type + '.cycle.' + scope.$index + '.coreTeacher'
|
|
|
+ "
|
|
|
+ label-width="88px"
|
|
|
+ :rules="[{ required: true, message: '请选择主教老师' }]"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model.trim="scope.row.coreTeacher"
|
|
|
+ placeholder="请选择主教老师"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in teacherList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.realName"
|
|
|
+ :value="String(item.id)"
|
|
|
+ >
|
|
|
<span style="float: left">{{ item.realName }}</span>
|
|
|
<span style="float: right; color: #8492a6; font-size: 13px">{{
|
|
|
String(item.id)
|
|
@@ -27,17 +45,32 @@
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item prop="assistant" v-if="activeType != 'HIGH' &&
|
|
|
- activeType != 'HIGH_ONLINE' &&
|
|
|
- activeType != 'MUSIC_NETWORK' &&
|
|
|
- type != 'HIGH' &&
|
|
|
- type != 'HIGH_ONLINE' &&
|
|
|
- type != 'MUSIC_NETWORK' &&
|
|
|
- $helpers.permission('is/teacher/findTeachers')
|
|
|
- ">
|
|
|
- <el-select v-model.trim="scope.row.assistant" placeholder="请选择助教老师" filterable clearable multiple
|
|
|
- collapse-tags>
|
|
|
- <el-option v-for="(item, index) in cooperationList" :key="index" :label="item.realName" :value="item.id">
|
|
|
+ <el-form-item
|
|
|
+ prop="assistant"
|
|
|
+ v-if="
|
|
|
+ activeType != 'HIGH' &&
|
|
|
+ activeType != 'HIGH_ONLINE' &&
|
|
|
+ activeType != 'MUSIC_NETWORK' &&
|
|
|
+ type != 'HIGH' &&
|
|
|
+ type != 'HIGH_ONLINE' &&
|
|
|
+ type != 'MUSIC_NETWORK' &&
|
|
|
+ $helpers.permission('is/teacher/findTeachers')
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model.trim="scope.row.assistant"
|
|
|
+ placeholder="请选择助教老师"
|
|
|
+ filterable
|
|
|
+ clearable
|
|
|
+ multiple
|
|
|
+ collapse-tags
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in cooperationList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.realName"
|
|
|
+ :value="item.id"
|
|
|
+ >
|
|
|
<span style="float: left">{{ item.realName }}</span>
|
|
|
<span style="float: right; color: #8492a6; font-size: 13px">{{
|
|
|
String(item.id)
|
|
@@ -45,96 +78,221 @@
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :prop="'classs.' + type + '.cycle.' + scope.$index + '.time'" :rules="[
|
|
|
- { required: true, message: '请选择课程时长', trigger: 'blur' },
|
|
|
- ]" inline-message>
|
|
|
- <el-select v-model.trim="scope.row.time" style="width: 180px !important" placeholder="请选择课程时长" clearable
|
|
|
- :disabled="!!selectPrice" @change="(val) => {
|
|
|
- startTimeChange(scope, val);
|
|
|
- }
|
|
|
- " filterable>
|
|
|
- <el-option v-for="(item, index) in pricesArray" :key="index" :disabled="surplustime + (parseFloat(scope.row.time) || 0) < item
|
|
|
- " :label="item" :value="item">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'classs.' + type + '.cycle.' + scope.$index + '.time'"
|
|
|
+ :rules="[
|
|
|
+ { required: true, message: '请选择课程时长', trigger: 'blur' }
|
|
|
+ ]"
|
|
|
+ inline-message
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model.trim="scope.row.time"
|
|
|
+ style="width: 180px !important"
|
|
|
+ placeholder="请选择课程时长"
|
|
|
+ clearable
|
|
|
+ :disabled="!!selectPrice"
|
|
|
+ @change="
|
|
|
+ val => {
|
|
|
+ startTimeChange(scope, val);
|
|
|
+ }
|
|
|
+ "
|
|
|
+ filterable
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in pricesArray"
|
|
|
+ :key="index"
|
|
|
+ :disabled="
|
|
|
+ surplustime + (parseFloat(scope.row.time) || 0) < item
|
|
|
+ "
|
|
|
+ :label="item"
|
|
|
+ :value="item"
|
|
|
+ >
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :prop="'classs.' + type + '.cycle.' + scope.$index + '.expectCourseNum'
|
|
|
- " :rules="[
|
|
|
- { required: true, message: '请输入预计课时数' },
|
|
|
- { pattern: /^\+?[1-9]\d*$/, message: '请输入大于0的正整数' },
|
|
|
- { validator: validateNum },
|
|
|
- ]" inline-message>
|
|
|
- <el-input style="width: 180px !important" type="number" v-model.trim="scope.row.expectCourseNum"
|
|
|
- placeholder="请输入预计课数" @input="(val) => {
|
|
|
- getUseTime(scope.row);
|
|
|
- }
|
|
|
- ">
|
|
|
+
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'classs.' + type + '.cycle.' + scope.$index + '.expectCourseNum'
|
|
|
+ "
|
|
|
+ :rules="[
|
|
|
+ { required: true, message: '请输入预计课时数' },
|
|
|
+ { pattern: /^\+?[1-9]\d*$/, message: '请输入大于0的正整数' },
|
|
|
+ { validator: validateNum }
|
|
|
+ ]"
|
|
|
+ inline-message
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ style="width: 180px !important"
|
|
|
+ type="number"
|
|
|
+ v-model.trim="scope.row.expectCourseNum"
|
|
|
+ placeholder="请输入预计课数"
|
|
|
+ @input="
|
|
|
+ val => {
|
|
|
+ getUseTime(scope.row);
|
|
|
+ }
|
|
|
+ "
|
|
|
+ >
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'classs.' + type + '.cycle.' + scope.$index + '.intervalDays'
|
|
|
+ "
|
|
|
+ :rules="[
|
|
|
+ { required: true, message: '请输入间隔天数' },
|
|
|
+ { pattern: /^\+?[1-9]\d*$/, message: '请输入大于0的正整数' },
|
|
|
+ { validator: validateNum }
|
|
|
+ ]"
|
|
|
+ inline-message
|
|
|
+ >
|
|
|
+ <el-input
|
|
|
+ style="width: 180px !important"
|
|
|
+ type="number"
|
|
|
+ v-model.trim="scope.row.intervalDays"
|
|
|
+ placeholder="请输入间隔天数"
|
|
|
+ >
|
|
|
</el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item inline-message :rules="[{ required: true, message: '请选择循环周期' }]"
|
|
|
- :prop="'classs.' + type + '.cycle.' + scope.$index + '.dayOfWeek'">
|
|
|
- <el-select v-model.trim="scope.row.dayOfWeek" style="width: 180px !important" placeholder="请选择循环周期"
|
|
|
- clearable filterable @change="(val) => {
|
|
|
- getUseTime(scope.row);
|
|
|
- }
|
|
|
- ">
|
|
|
- <el-option v-for="(item, index) in weekDateList" :key="index" :label="item.label" :value="item.value">
|
|
|
+ <!-- <el-form-item
|
|
|
+ inline-message
|
|
|
+ :rules="[{ required: true, message: '请选择循环周期' }]"
|
|
|
+ :prop="'classs.' + type + '.cycle.' + scope.$index + '.dayOfWeek'"
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model.trim="scope.row.dayOfWeek"
|
|
|
+ style="width: 180px !important"
|
|
|
+ placeholder="请选择循环周期"
|
|
|
+ clearable
|
|
|
+ filterable
|
|
|
+ @change="
|
|
|
+ val => {
|
|
|
+ getUseTime(scope.row);
|
|
|
+ }
|
|
|
+ "
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ v-for="(item, index) in weekDateList"
|
|
|
+ :key="index"
|
|
|
+ :label="item.label"
|
|
|
+ :value="item.value"
|
|
|
+ >
|
|
|
</el-option>
|
|
|
</el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item :prop="'classs.' + type + '.cycle.' + scope.$index + '.startClassTime'
|
|
|
- " :rules="[{ required: true, message: '请选择开始时间' }]" inline-message>
|
|
|
- <el-time-picker style="width: 180px !important" v-model.trim="scope.row.startClassTime" format="HH:mm"
|
|
|
- value-format="HH:mm" placeholder="请选择开始时间" @change="timeChange(scope.row)" :picker-options="{
|
|
|
- selectableRange: ['06:00:00 - 23:59:59'],
|
|
|
- }">
|
|
|
+ </el-form-item> -->
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'classs.' + type + '.cycle.' + scope.$index + '.startClassTime'
|
|
|
+ "
|
|
|
+ :rules="[{ required: true, message: '请选择开始时间' }]"
|
|
|
+ inline-message
|
|
|
+ >
|
|
|
+ <el-time-picker
|
|
|
+ style="width: 180px !important"
|
|
|
+ v-model.trim="scope.row.startClassTime"
|
|
|
+ format="HH:mm"
|
|
|
+ value-format="HH:mm"
|
|
|
+ placeholder="请选择开始时间"
|
|
|
+ @change="timeChange(scope.row)"
|
|
|
+ :picker-options="{
|
|
|
+ selectableRange: ['06:00:00 - 23:59:59']
|
|
|
+ }"
|
|
|
+ >
|
|
|
</el-time-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :prop="'classs.' + type + '.cycle.' + scope.$index + '.endClassTime'
|
|
|
- " inline-message>
|
|
|
- <el-time-picker style="width: 180px !important" v-model.trim="scope.row.endClassTime" format="HH:mm"
|
|
|
- disabled value-format="HH:mm" placeholder="请选择结束时间" :picker-options="{
|
|
|
- selectableRange: [
|
|
|
- scope.row.startClassTime + ':00 - 23:59:59',
|
|
|
- ],
|
|
|
- }">
|
|
|
+ <el-form-item
|
|
|
+ :prop="
|
|
|
+ 'classs.' + type + '.cycle.' + scope.$index + '.endClassTime'
|
|
|
+ "
|
|
|
+ inline-message
|
|
|
+ >
|
|
|
+ <el-time-picker
|
|
|
+ style="width: 180px !important"
|
|
|
+ v-model.trim="scope.row.endClassTime"
|
|
|
+ format="HH:mm"
|
|
|
+ disabled
|
|
|
+ value-format="HH:mm"
|
|
|
+ placeholder="请选择结束时间"
|
|
|
+ :picker-options="{
|
|
|
+ selectableRange: [scope.row.startClassTime + ':00 - 23:59:59']
|
|
|
+ }"
|
|
|
+ >
|
|
|
</el-time-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item :prop="'classs.' + type + '.cycle.' + scope.$index + '.holiday'"
|
|
|
- :rules="[{ required: true, message: '请选择是否跳过节假日' }]" inline-message>
|
|
|
- <el-select v-model.trim="scope.row.holiday" style="width: 180px !important" placeholder="是否跳过节假日" filterable
|
|
|
- @change="holidayChange(scope.row)">
|
|
|
+ <el-form-item
|
|
|
+ :prop="'classs.' + type + '.cycle.' + scope.$index + '.holiday'"
|
|
|
+ :rules="[{ required: true, message: '请选择是否跳过节假日' }]"
|
|
|
+ inline-message
|
|
|
+ >
|
|
|
+ <el-select
|
|
|
+ v-model.trim="scope.row.holiday"
|
|
|
+ style="width: 180px !important"
|
|
|
+ placeholder="是否跳过节假日"
|
|
|
+ filterable
|
|
|
+ @change="holidayChange(scope.row)"
|
|
|
+ >
|
|
|
<el-option label="是" :value="true"></el-option>
|
|
|
<el-option label="否" :value="false"> </el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
- <el-form-item inline-message :prop="'classs.' + type + '.cycle.' + scope.$index + '.startDate'"
|
|
|
- :rules="[{ required: true, message: '请选择排课起始日期' }]">
|
|
|
- <el-date-picker v-model.trim="scope.row.startDate" :picker-options="pickerOptions"
|
|
|
- style="width: 180px !important" type="date" value-format="yyyy-MM-dd" placeholder="排课起始日期" @change="(val) => {
|
|
|
- changeStartDate(val, scope.row);
|
|
|
- }
|
|
|
- ">
|
|
|
+ <el-form-item
|
|
|
+ inline-message
|
|
|
+ :prop="'classs.' + type + '.cycle.' + scope.$index + '.startDate'"
|
|
|
+ :rules="[{ required: true, message: '请选择排课起始日期' }]"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model.trim="scope.row.startDate"
|
|
|
+ :picker-options="pickerOptions"
|
|
|
+ style="width: 180px !important"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="排课起始日期"
|
|
|
+ @change="
|
|
|
+ val => {
|
|
|
+ changeStartDate(val, scope.row);
|
|
|
+ }
|
|
|
+ "
|
|
|
+ >
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
- <el-form-item inline-message :prop="'classs.' + type + '.cycle.' + scope.$index + '.endDate'" :rules="[
|
|
|
- { required: true, message: '请选择排课结束日期' },
|
|
|
- { required: true, trigger: 'change', validator: validatePass },
|
|
|
- ]">
|
|
|
- <el-date-picker v-model.trim="scope.row.endDate" :disabled="true" :picker-options="pickerOptions"
|
|
|
- style="width: 180px !important" type="date" value-format="yyyy-MM-dd" placeholder="排课结束日期">
|
|
|
+ <el-form-item
|
|
|
+ inline-message
|
|
|
+ :prop="'classs.' + type + '.cycle.' + scope.$index + '.endDate'"
|
|
|
+ :rules="[
|
|
|
+ { required: true, message: '请选择排课结束日期' },
|
|
|
+ { required: true, trigger: 'change', validator: validatePass }
|
|
|
+ ]"
|
|
|
+ >
|
|
|
+ <el-date-picker
|
|
|
+ v-model.trim="scope.row.endDate"
|
|
|
+ :disabled="true"
|
|
|
+ :picker-options="pickerOptions"
|
|
|
+ style="width: 180px !important"
|
|
|
+ type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ placeholder="排课结束日期"
|
|
|
+ >
|
|
|
</el-date-picker>
|
|
|
</el-form-item>
|
|
|
|
|
|
- <i @click="remove(scope.$index, scope)" v-if="form.cycle.length > 1"
|
|
|
- class="close-icon el-icon-circle-close"></i>
|
|
|
+ <i
|
|
|
+ @click="remove(scope.$index, scope)"
|
|
|
+ v-if="form.cycle.length > 1"
|
|
|
+ class="close-icon el-icon-circle-close"
|
|
|
+ ></i>
|
|
|
</div>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
- <el-button icon="el-icon-circle-plus-outline" type="info" plain
|
|
|
- :disabled="surplustime < (selectPrice || 0 || Math.min(...pricesArray))" @click="create"
|
|
|
- style="margin-top: 10px; width: 100%">添加循环</el-button>
|
|
|
+ <el-button
|
|
|
+ icon="el-icon-circle-plus-outline"
|
|
|
+ type="info"
|
|
|
+ plain
|
|
|
+ :disabled="surplustime < (selectPrice || 0 || Math.min(...pricesArray))"
|
|
|
+ @click="create"
|
|
|
+ style="margin-top: 10px; width: 100%"
|
|
|
+ >添加循环</el-button
|
|
|
+ >
|
|
|
</div>
|
|
|
</template>
|
|
|
<script>
|
|
@@ -190,7 +348,7 @@ export default {
|
|
|
validatePass,
|
|
|
validateNum,
|
|
|
pickerOptions: this.getPickerOptions(),
|
|
|
- useCourseNum: 0,
|
|
|
+ useCourseNum: 0
|
|
|
};
|
|
|
},
|
|
|
mounted() {
|
|
@@ -205,12 +363,12 @@ export default {
|
|
|
{ value: "4", label: "星期四" },
|
|
|
{ value: "5", label: "星期五" },
|
|
|
{ value: "6", label: "星期六" },
|
|
|
- { value: "7", label: "星期日" },
|
|
|
+ { value: "7", label: "星期日" }
|
|
|
];
|
|
|
},
|
|
|
pricesArray() {
|
|
|
- return (this.prices[this.type] || "").split(",").filter((item) => !!item);
|
|
|
- },
|
|
|
+ return (this.prices[this.type] || "").split(",").filter(item => !!item);
|
|
|
+ }
|
|
|
},
|
|
|
methods: {
|
|
|
updateUseTime() {
|
|
@@ -268,7 +426,7 @@ export default {
|
|
|
this.$set(item.row, "endClassTime", "");
|
|
|
}
|
|
|
if (val) {
|
|
|
- console.log('isCourseNumType', this.isCourseNumType)
|
|
|
+ console.log("isCourseNumType", this.isCourseNumType);
|
|
|
if (!this.isCourseNumType) {
|
|
|
let activeTime = val * Math.max(item.row.expectCourseNum || 0, 0);
|
|
|
if (this.endSchoolTerm) {
|
|
@@ -285,14 +443,12 @@ export default {
|
|
|
);
|
|
|
}
|
|
|
} else {
|
|
|
- console.log('课时排课')
|
|
|
- let num = parseInt((this.surplusCourseNum - this.useCourseNum)) > 0 ? parseInt((this.surplusCourseNum - this.useCourseNum)) : 0
|
|
|
- this.$set(
|
|
|
- item.row,
|
|
|
- "expectCourseNum",
|
|
|
- parseInt(num)
|
|
|
- );
|
|
|
-
|
|
|
+ console.log("课时排课");
|
|
|
+ let num =
|
|
|
+ parseInt(this.surplusCourseNum - this.useCourseNum) > 0
|
|
|
+ ? parseInt(this.surplusCourseNum - this.useCourseNum)
|
|
|
+ : 0;
|
|
|
+ this.$set(item.row, "expectCourseNum", parseInt(num));
|
|
|
}
|
|
|
// this.surplusTime
|
|
|
} else {
|
|
@@ -319,7 +475,7 @@ export default {
|
|
|
getUseTime(row) {
|
|
|
this.updateEndTime(row);
|
|
|
this.useTime = 0;
|
|
|
- this.form.cycle.forEach((item) => {
|
|
|
+ this.form.cycle.forEach(item => {
|
|
|
this.useTime +=
|
|
|
(item.expectCourseNum ? parseInt(item.expectCourseNum) : 0) *
|
|
|
parseInt(item.time);
|
|
@@ -338,10 +494,15 @@ export default {
|
|
|
return num;
|
|
|
},
|
|
|
updateEndTime(row) {
|
|
|
- if (row.dayOfWeek && row.startDate && typeof row.holiday === "boolean") {
|
|
|
+ if (
|
|
|
+ row.intervalDays &&
|
|
|
+ row.startDate &&
|
|
|
+ typeof row.holiday === "boolean"
|
|
|
+ ) {
|
|
|
// const num = this.addData(row.startDate, row.dayOfWeek)
|
|
|
// const week = dayjs(row.startDate).get('day') == 0 ? 7 : dayjs(row.startDate).get('day')
|
|
|
- const selectWeek = row.dayOfWeek == 7 ? 0 : row.dayOfWeek;
|
|
|
+ // const selectWeek = row.dayOfWeek == 7 ? 0 : row.dayOfWeek;
|
|
|
+ const selectDays = row.intervalDays || 7;
|
|
|
let exp = Math.max(row.expectCourseNum, 0);
|
|
|
let end = dayjs(row.startDate);
|
|
|
// console.log(selectWeek, end.get('day'))
|
|
@@ -349,24 +510,25 @@ export default {
|
|
|
// exp >0 还有未排的课
|
|
|
while (exp > 0) {
|
|
|
if (
|
|
|
- selectWeek == end.get("day") &&
|
|
|
+ // selectWeek == end.get("day") &&
|
|
|
!this.holidays.includes(end.format("YYYY-MM-DD"))
|
|
|
) {
|
|
|
exp--;
|
|
|
}
|
|
|
- end = end.add(1, "day");
|
|
|
+ end = end.add(selectDays, "day");
|
|
|
if (exp === 0) {
|
|
|
- end = end.subtract(1, "day");
|
|
|
+ end = end.subtract(selectDays, "day");
|
|
|
}
|
|
|
}
|
|
|
} else {
|
|
|
while (exp > 0) {
|
|
|
- if (selectWeek == end.get("day")) {
|
|
|
- exp--;
|
|
|
- }
|
|
|
- end = end.add(1, "day");
|
|
|
+ exp--;
|
|
|
+ // if (selectWeek == end.get("day")) {
|
|
|
+ // exp--;
|
|
|
+ // }
|
|
|
+ end = end.add(selectDays, "day");
|
|
|
if (exp === 0) {
|
|
|
- end = end.subtract(1, "day");
|
|
|
+ end = end.subtract(selectDays, "day");
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -431,10 +593,10 @@ export default {
|
|
|
} else {
|
|
|
return time.getTime() + 86400000 <= new Date().getTime();
|
|
|
}
|
|
|
- },
|
|
|
+ }
|
|
|
};
|
|
|
- },
|
|
|
- },
|
|
|
+ }
|
|
|
+ }
|
|
|
};
|
|
|
</script>
|
|
|
<style lang="less" scoped>
|