| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244 | <template>  <div class="cl-container">    <!-- 搜索类型 -->    <save-form      :inline="true"      save-key="teamDetails-courseList"      class="searchForm"      ref="searchForm"      :model="searchForm"      @submit="search"      @reset="onReSet"    >      <el-form-item prop="courseStatus">        <el-select          v-model.trim="searchForm.courseStatus"          clearable          filterable          placeholder="课程类型"        >          <el-option            v-for="(item, index) in courseArray"            :key="index"            :label="item.label"            :value="item.value"          ></el-option>        </el-select>      </el-form-item>      <el-form-item prop="classStatus">        <el-select          v-model.trim="searchForm.classStatus"          clearable          filterable          placeholder="课程状态"        >          <el-option label="未开始" value="NOT_START"></el-option>          <el-option label="进行中" value="UNDERWAY"></el-option>          <el-option label="已结束" value="OVER"></el-option>        </el-select>      </el-form-item>      <el-form-item prop="class">        <!-- getMusicGroupAllClass -->        <el-select          v-model.trim="searchForm.class"          placeholder="班级名称"          filterable          clearable        >          <el-option            v-for="(item, index) in classList"            :key="index"            :value="item.id"            :label="item.name"          ></el-option>        </el-select>      </el-form-item>      <el-form-item prop="isSettlement">        <el-select          v-model.trim="searchForm.isSettlement"          placeholder="是否结算"          filterable          clearable        >          <el-option value="0" label="未结算"></el-option>          <el-option value="1" label="已结算"></el-option>        </el-select>      </el-form-item>      <el-form-item prop="homeworkFlag">        <el-select          v-model.trim="searchForm.homeworkFlag"          placeholder="是否布置作业"          filterable          clearable        >          <el-option :value="false" label="未布置"></el-option>          <el-option :value="true" label="已布置"></el-option>        </el-select>      </el-form-item>      <el-form-item prop="serviceFlag">        <el-select          v-model.trim="searchForm.serviceFlag"          placeholder="是否服务"          filterable          clearable        >          <el-option :value="true" label="是"></el-option>          <el-option :value="false" label="否"></el-option>        </el-select>      </el-form-item>      <el-form-item prop="timer">        <el-date-picker          v-model.trim="searchForm.timer"          style="width: 420px"          type="daterange"          value-format="yyyy-MM-dd"          range-separator="至"          start-placeholder="课程开始日期"          end-placeholder="课程结束日期"          :picker-options="{            firstDayOfWeek: 1,          }"        ></el-date-picker>      </el-form-item>      <el-form-item>        <el-button native-type="submit" type="danger">搜索</el-button>        <el-button type="primary" native-type="reset">重置</el-button>         <el-button type="primary"     v-if="                  permission('export/exportMusicGroupCourseScheduleDetail')                " @click="exportCourse">导出</el-button>      </el-form-item>    </save-form>    <div class="btnWraps"></div>    <div style="font-size: 14px; padding-bottom: 10px">      总出勤率:<span style="color: #f85043; font-weight: 600">{{        detail.attendanceRate      }}</span>          总达标率:<span        style="color: #f85043; font-weight: 600"        >{{ detail.standardRate }}</span      >           总作业提交率:<span        style="color: #f85043; font-weight: 600"        >{{ detail.homeworkCommitRate }}</span      >    </div>    <!-- 列表 -->    <div class="tableWrap">      <el-table        :data="tableList"        :header-cell-style="{ background: '#EDEEF0', color: '#444' }"      >        <!-- <el-table-column type="selection"                         width="55"                         :selectable="checkSelectable"></el-table-column> -->        <el-table-column          align="center"          prop="courseScheduleId"          label="课程编号"        ></el-table-column>        <el-table-column align="center" width="180px" label="时间">          <template slot-scope="scope"            >{{ scope.row.classDate }}            {{              scope.row.startClassTime                ? scope.row.startClassTime.substr(0, 5)                : ""            }}-{{              scope.row.endClassTime ? scope.row.endClassTime.substr(0, 5) : ""            }}</template          >        </el-table-column>        <el-table-column          align="center"          prop="courseScheduleName"          label="课程名称"        ></el-table-column>        <el-table-column          align="center"          prop="courseScheduleType"          label="课程类型"        >          <template slot-scope="scope">            <div>{{ scope.row.courseScheduleType | coursesType }}</div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="courseScheduleStatus"          label="课程状态"          >s          <template slot-scope="scope">            <div>{{ scope.row.courseScheduleStatus | coursesStatus }}</div>          </template>        </el-table-column>        <el-table-column align="center" label="老师签到">          <template slot-scope="scope">            <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">              {{ scope.row.signInStatus | attendanceType }}            </div>          </template>        </el-table-column>        <el-table-column align="center" label="老师签退">          <template slot-scope="scope">            <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">              {{ scope.row.signOutStatus | attendanceOutType }}            </div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="masterTeacherName"          label="指导老师"        ></el-table-column>        <el-table-column align="center" label="结算状态">          <template slot-scope="scope">{{            scope.row.settlementTime ? "已结算" : "未结算"          }}</template>        </el-table-column>        <el-table-column align="center" prop="remark" label="是否点名">          <template slot-scope="scope">            <div v-if="scope.row.courseScheduleStatus != 'NOT_START'">              {{ scope.row.isCallNames ? "已点名" : "未点名" }}            </div>          </template>        </el-table-column>        <el-table-column align="center" prop="attendanceRate" label="出勤率">          <template slot-scope="scope">            <div>              {{                scope.row.courseScheduleStatistics.attendanceRate                  ? scope.row.courseScheduleStatistics.attendanceRate                  : "--"              }}            </div>          </template>        </el-table-column>        <el-table-column align="center" prop="standardRate" label="达标率">          <template slot-scope="scope">            <div>              {{                scope.row.courseScheduleStatistics.standardRate                  ? scope.row.courseScheduleStatistics.standardRate                  : "--"              }}            </div>          </template>        </el-table-column>        <el-table-column align="center" prop="remark" label="是否服务">          <template slot-scope="scope">            <div>              {{ scope.row.courseScheduleStatistics.serviceFlag ? "是" : "否" }}            </div>          </template>        </el-table-column>        <el-table-column align="center" prop="remark" label="是否布置课后作业">          <template slot-scope="scope">            <div>              {{                scope.row.courseScheduleStatistics.homeworkFlag                  ? "已布置"                  : "未布置"              }}            </div>          </template>        </el-table-column>        <el-table-column align="center" prop="remark" label="作业提交率">          <template slot-scope="scope">            <div>              {{                scope.row.courseScheduleStatistics.homeworkCommitRate                  ? scope.row.courseScheduleStatistics.homeworkCommitRate                  : "--"              }}            </div>          </template>        </el-table-column>        <el-table-column          align="center"          prop="remark"          label="备注"        ></el-table-column>        <el-table-column          align="center"          width="280px"          label="操作"          fixed="right"        >          <template slot-scope="scope">            <div>              <!-- {child: 'teacherAttendance/updateTeacherAttendance', parent: '/teamDetails/courseList'} -->              <el-button                v-if="                  scope.row.courseScheduleStatus == 'OVER' &&                  !scope.row.settlementTime &&                  permission('teacherAttendance/updateTeacherAttendance?t=568')                "                type="text"                @click="onMarkAttendance(scope.row)"                >补考勤</el-button              >              <el-button                v-if="                  scope.row.courseScheduleStatus == 'OVER' &&                  permission('studentAttendance/updateStudentAttendances?t=570')                "                type="text"                @click="onCallName(scope.row)"                >点名表</el-button              >              <!-- OVER -->              <!-- <el-button                v-if="scope.row.courseScheduleStatus == 'OVER' && permission('courseSchedule/classStartDateAdjust1')"                type="text"                @click="resetClass(scope.row)"              >调整</el-button>-->              <el-button                v-if="                  !scope.row.settlementTime &&                  permission(                    'courseSchedule/classStartDateAdjust/teamCourseListInfo'                  )                "                type="text"                @click="resetClass(scope.row)"                >调整</el-button              >              <!-- <el-button v-if="scope.row.courseScheduleStatus == 'NOT_START' && permission('courseSchedule/batchDelete')"                         type="text"                         @click="removeSingleClass(scope.row)">删除</el-button> -->              <!-- v-if="scope.row.courseScheduleStatus == 'NOT_START' && permission('courseSchedule/batchDelete')"  teamDetail/resetTpye-->              <!-- <el-button type="text"                         @click="resetType(scope.row)"                         v-if="permission('teamDetail/resetTpye')&&scope.row.courseScheduleType!='HIGH_ONLINE'&&scope.row.courseScheduleType!='MUSIC_NETWORK'">类型调整</el-button> -->              <el-button                type="text"                v-if="                  scope.row.courseScheduleStatus == 'OVER' &&                  !scope.row.settlementTime &&                  permission(                    'courseSchedule/cleanAttendancecourseSchedule/classStartDateAdjust/teamCourseListInfo'                  )                "                @click="clearAttend(scope.row)"                >清除考勤</el-button              >            </div>          </template>        </el-table-column>      </el-table>      <pagination        save-key="teamDetails-courseList"        sync        :total.sync="rules.total"        :page.sync="rules.page"        :limit.sync="rules.limit"        :page-sizes="rules.page_size"        @pagination="getList"      />    </div>    <el-dialog      title="课程调整"      width="400px"      :before-close="handleClose"      :visible.sync="courseVisible"    >      <el-form        :model="maskForm"        v-if="courseVisible"        class="maskForm"        ref="maskForm"        :rules="maskRules"        label-position="right"        label-width="120px"        :inline="true"      >        <el-form-item label="主教老师" prop="teacher">          <remote-search            :commit="'setTeachers'"            v-model="maskForm.teacher"            :width="220"          />        </el-form-item>        <el-form-item          label="助教老师"          v-if="            maskForm.courseScheduleType != 'MUSIC_NETWORK' &&            maskForm.courseScheduleType != 'HIGH_ONLINE'          "          prop="assistant"        >          <remote-search            :commit="'setTeachers'"            v-model="maskForm.assistant"            :width="220"            :multiple="true"          />        </el-form-item>        <el-form-item label="上课日期" prop="date">          <el-date-picker            v-model.trim="maskForm.date"            type="date"            :picker-options="beginDate()"            value-format="yyyy-MM-dd"            placeholder="选择日期"          ></el-date-picker>        </el-form-item>        <el-form-item label="课程时长" v-if="courseVisible" prop="timer">          <el-select v-model="maskForm.timer" @change="changeTime">            <el-option              v-for="(item, index) in typeTimeList"              :key="index"              :value="parseInt(item)"              :label="item"            ></el-option>          </el-select>        </el-form-item>        <el-form-item label="开始时间" v-if="courseVisible" prop="startTime">          <el-time-picker            placeholder="起始时间"            v-model.trim="maskForm.startTime"            @change="changeStartTime"            format="HH:mm"            value-format="HH:mm"            :picker-options="{              selectableRange: `${nowTime} - 23:30:00`,            }"          ></el-time-picker>        </el-form-item>        <el-form-item label="结束时间" v-if="courseVisible" prop="endTime">          <el-time-select            placeholder="结束时间"            v-model.trim="maskForm.endTime"            disabled            :picker-options="{              start: '04:30',              step: '00:05',              end: '23:30',              minTime: maskForm.startTime,            }"          ></el-time-select>        </el-form-item>        <el-form-item          label="教学地点"          prop="schoolId"          v-if="            maskForm.courseScheduleType != 'HIGH_ONLINE' &&            maskForm.courseScheduleType != 'MUSIC_NETWORK'          "        >          <el-select            v-model.trim="maskForm.schoolId"            style="width: 220px !important"            filterable            clearable          >            <el-option              v-for="(item, index) in schoolList"              :key="index"              :value="item.id"              :label="item.name"            ></el-option>          </el-select>        </el-form-item>      </el-form>      <div slot="footer" class="dialog-footer">        <el-button @click="courseVisible = false">取 消</el-button>        <el-button type="primary" @click="submitResetClass">确 定</el-button>      </div>    </el-dialog>    <el-dialog      title="修改时间"      width="400px"      :before-close="handleCloseTimer"      :visible.sync="timerVisible"    >      <el-form :model="timerMask">        <el-form-item          label="上课日期"          :rules="[{ required: true, message: '请选择日期', trigger: 'blur' }]"        >          <el-date-picker            v-model.trim="timerMask.timer"            type="date"            format="yyyy-MM-dd"            value-format="yyyy-MM-dd"            :picker-options="{              firstDayOfWeek: 1,            }"            placeholder="选择日期"          ></el-date-picker>        </el-form-item>      </el-form>      <div slot="footer" class="dialog-footer">        <el-button @click="timerVisible = false">取 消</el-button>        <el-button type="primary" @click="batchAdjustmentTime">确 定</el-button>      </div>    </el-dialog>    <el-dialog      title="补考勤"      width="400px"      :visible.sync="markAttendance.status"    >      <el-form>        <el-form-item label="签到状态">{{          markAttendance.dataInfo.signInStatus | attendanceType        }}</el-form-item>        <el-form-item label="签到时间">{{          markAttendance.dataInfo.signInTime        }}</el-form-item>        <el-form-item label="签退状态">{{          markAttendance.dataInfo.signOutStatus | attendanceOutType        }}</el-form-item>        <el-form-item label="签退时间">{{          markAttendance.dataInfo.signOutTime        }}</el-form-item>      </el-form>      <div slot="footer" class="dialog-footer">        <el-button @click="markAttendance.status = false">取 消</el-button>        <el-button          type="primary"          :disabled="            markAttendance.dataInfo.signOutStatus == 1 &&            markAttendance.dataInfo.signInStatus == 1              ? true              : false          "          @click="batchAdjustmentTime"          >确定补卡</el-button        >      </div>    </el-dialog>    <el-dialog title="点名表" width="800px" :visible.sync="rollCall.status">      <el-table :data="rollCall.gridData">        <el-table-column          align="center"          property="userName"          label="学员姓名"        ></el-table-column>        <el-table-column          align="center"          property="phone"          label="手机号"        ></el-table-column>        <el-table-column          align="center"          property="subjectName"          label="学员声部"        ></el-table-column>        <el-table-column align="center" label="到课状态">          <template slot-scope="scope">{{            scope.row.status | studentCallName          }}</template>        </el-table-column>        <el-table-column          align="center"          v-if="!rollCall.selectItem.settlementTime"          label="操作"          width="240px"        >          <template slot-scope="scope">            <el-button              size="mini"              @click="onChangeRollCall('TRUANT', scope.row)"              type="primary"              round              >未到</el-button            >            <el-button              size="mini"              @click="onChangeRollCall('LEAVE', scope.row)"              type="warning"              round              >请假</el-button            >            <el-button              size="mini"              @click="onChangeRollCall('NORMAL', scope.row)"              type="success"              round              >到课</el-button            >          </template>        </el-table-column>      </el-table>      <pagination        sync        :total.sync="rollCall.total"        :page.sync="rollCall.page"        :limit.sync="rollCall.limit"        :page-sizes="rollCall.page_size"        @pagination="getCallName"      />    </el-dialog>  </div></template><script>import dayjs from "dayjs";import pagination from "@/components/Pagination/index";import { bathDelete } from "@/api/vipSeting";import {  resetCourse,  getMusicGroupAllClass,  getCourseSchedule,  updateTeacherAttendance,  findAttendanceStudentByCourseWithPage,  updateStudentAttendances,  cleanAttendance,  getOrganCourseDurationSettings,} from "@/api/buildTeam";import { permission } from "@/utils/directivePage";import { diffTimerFormMinute, addTimerFormMinute } from "@/utils/date";import { classTimeList, musicCourseType } from "@/utils/searchArray";import { getSchool } from "@/api/systemManage";import cleanDeep from "clean-deep";import { Export } from "@/utils/downLoadFile";import { getMusicGroupCourseScheduleStatistics } from "../api";let that;export default {  name: "tcourseList",  data() {    return {      classTimeList,      courseArray: musicCourseType,      typeVisible: false,      timerVisible: false,      courseVisible: false,      searchForm: {        courseStatus: "", // 课程类型        classStatus: "", // 课程状态        timer: [], // 时间        class: "",        isSettlement: "",        homeworkFlag: "",        serviceFlag: "",      },      tableList: [],      searchLsit: [],      rules: {        // 分页规则        limit: 10, // 限制显示条数        page: 1, // 当前页        total: 0, // 总条数        page_size: [10, 20, 40, 50], // 选择限制显示条数      },      maskForm: {        teacher: "",        assistant: "",        date: "",        id: "",        startTime: "",        endTime: "",        type: "",        timer: "",        courseScheduleType: null,        address: "",        teachMode: "",        schoolId: "",      },      typeForm: {        teacher: "",        assistant: "",        date: "",        startTime: "",        endTime: "",        type: null,        id: null,      },      maskRules: {        schoolId: [          { required: true, message: "请选教学地点", trigger: "blur" },        ],        teacher: [          { required: true, message: "请选择主教老师名称", trigger: "blur" },        ],        date: [{ required: true, message: "请选择上课时间", trigger: "blur" }],        // startTime: [{ required: true, message: '请选择上课开始时间', trigger: 'blur' },],        // endTime: [{ required: true, message: '请选择上课结束时间', trigger: 'blur' },],      },      typeRules: {        type: [{ required: true, message: "请选择课程类型", trigger: "blur" }],      },      teacherList: [],      classList: [],      activeCourseList: [],      timerMask: {        timer: "",      },      markAttendance: {        // 考勤状态        status: false,        dataInfo: {},      },      rollCall: {        // 点名表        status: false,        gridData: [],        selectItem: {}, // 选中状态        limit: 10, // 限制显示条数        page: 1, // 当前页        total: 0, // 总条数        page_size: [10, 20, 40, 50], // 选择限制显示条数      },      organId: "",      schoolList: [],      courseTimeList: {},      typeTimeList: [],      detail: {        attendanceRate: "0.00%",        homeworkCommitRate: "0.00%",        standardRate: "0.00%",      },    };  },  components: {    pagination,  },  created() {    that = this;  },  mounted() {    this.init();    getSchool({ organId: this.$route.query.organId }).then((res) => {      if (res.code == 200) {        this.schoolList = res.data;      }    });  },  activated() {    this.init();  },  methods: {    async init() {      this.teamid = this.$route.query.id;      this.organId = this.$route.query.organId;      try {        const res = await getOrganCourseDurationSettings({          organId: this.organId,        });        this.courseTimeList = res.data;      } catch {}      // MusicStore.dispatch('getBaseInfo', {      //     data: { musicGroupId: this.teamid }      //   }).then((res) => {      //     console.log(res)      //   })      this.getList();      // 获取所有老师      // findMusicGroupClassTeacher({ musicGroupId: this.teamid }).then(res => {      //   if (res.code == 200) {      //     this.teacherList = res.data;      //   }      // })      // getTeacher().then(res => {      //   if (res.code == 200) {      //     this.teacherList = res.data;      //   }      // });      // 获取班级列表      getMusicGroupAllClass({ musicGroupId: this.teamid }).then((res) => {        if (res.code == 200) {          this.classList = res.data;        }      });    },    onMarkAttendance(item) {      // 补考勤      this.markAttendance = {        status: true,        dataInfo: item,      };    },    onCallName(item) {      // 点名表      this.rollCall.page = 1;      this.rollCall.selectItem = item;      this.getCallName();    },    getCallName() {      let rollCall = this.rollCall;      let params = {        page: rollCall.page,        rows: rollCall.limit,        courseScheduleId: rollCall.selectItem.courseScheduleId,      };      findAttendanceStudentByCourseWithPage(params).then((res) => {        let result = res.data;        rollCall.status = true;        if (res.code == 200) {          rollCall.gridData = result.rows;          rollCall.total = result.total;        }      });    },    onChangeRollCall(type, row) {      let rollCall = this.rollCall;      let params = {        courseScheduleId: rollCall.selectItem.courseScheduleId,        studentAttendances: [          {            userId: row.studentId,            status: type,          },        ],      };      updateStudentAttendances(params).then((res) => {        if (res.code == 200) {          this.$message.success("修改成功");          row.status = type;          this.getList();        } else {          this.$message.error(res.msg);        }      });    },    permission(str, parent) {      return permission(str, parent);    },    search() {      this.rules.page = 1;      this.getList();    },    async getList() {      let searchForm = this.searchForm;      if (!searchForm.timer) {        searchForm.timer = [];      }      let obj = {        classScheduleStatus: searchForm.classStatus || null,        classScheduleType: searchForm.courseStatus || null,        musicGroupId: this.teamid,        startTime: searchForm.timer[0] || null,        endTime: searchForm.timer[1] || null,        page: this.rules.page,        rows: this.rules.limit,        classGroupId: searchForm.class || null,        isSettlement: searchForm.isSettlement || null,        homeworkFlag: searchForm.homeworkFlag,        serviceFlag: searchForm.serviceFlag,      };      getCourseSchedule(obj).then((res) => {        if (res.code == 200) {          this.tableList = res.data.rows;          this.rules.total = res.data.total;        }      });      try {        const res = await getMusicGroupCourseScheduleStatistics({ ...obj });        if(res.data){           this.detail = { ...res.data };        }      } catch (e) {        console.log(e);      }    },   async exportCourse(){     // 导出         let searchForm = this.searchForm;      if (!searchForm.timer) {        searchForm.timer = [];      }      let obj = {        classScheduleStatus: searchForm.classStatus || null,        classScheduleType: searchForm.courseStatus || null,        musicGroupId: this.teamid,        startTime: searchForm.timer[0] || null,        endTime: searchForm.timer[1] || null,        page: this.rules.page,        rows: this.rules.limit,        classGroupId: searchForm.class || null,        isSettlement: searchForm.isSettlement || null,        homeworkFlag: searchForm.homeworkFlag,        serviceFlag: searchForm.serviceFlag,      };      Export(        this,        {          url: "/api-web/export/exportMusicGroupCourseScheduleDetail",          fileName: "乐团课表详情.xls",          method: "get",          params: {            ...obj          },        },        "您确定导出乐团课表详情?"      );   },    resetClass(row) {      this.maskForm.teacher = parseInt(row.masterTeacherId);      this.maskForm.courseScheduleType = row.courseScheduleType;      // this.courseTimeList      for (let key in this.courseTimeList) {        if (key == row.courseScheduleType) {          this.typeTimeList = this.courseTimeList[key].split(",");        }      }      // this.maskForm.type = row.courseScheduleType;      this.maskForm.assistant = [];      for (let i in row.teachingTeachers) {        if (row.teachingTeachers[i].teacherRole == "TEACHING") {          this.maskForm.assistant.push(row.teachingTeachers[i].userId);        }      }      this.maskForm.date = row.classDate;      this.$set(        this.maskForm,        "startTime",        row.startClassTimeStr.substring(0, 5)      );      let time = diffTimerFormMinute(        row.classDate,        row.startClassTimeStr,        row.endClassTimeStr      );      this.maskForm.timer = time;      this.maskForm.endTime = addTimerFormMinute(        row.classDate,        row.startClassTimeStr,        time      );      // this.maskForm.endTime = row.endClassTimeStr.substring(0, 5);      this.maskForm.id = row.courseScheduleId;      this.maskForm.schoolId = row.schoolId;      this.courseVisible = true;      // 修改课时      // let obj = {      //   actualTeacherId: this.maskForm.teacher,      //   classDate: this.maskForm.date,      //   classGroupId: row.id      // }    },    removeSingleClass(row) {      this.$confirm("是否删除该课程?", "提示", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning",      })        .then(() => {          let courseScheduleIds = row.courseScheduleId;          bathDelete({ courseScheduleIds }).then((res) => {            if (res.code == 200) {              this.$message.success("删除成功");              this.getList();            }          });        })        .catch(() => {});    },    removeCourses() {      // 批量删除      if (this.activeCourseList.length < 1) {        this.$message.error("请至少选择一节课");        return;      }      let arr = [];      arr = this.activeCourseList.map((item) => {        return item.courseScheduleId;      });      this.$confirm("是否删除该课程?", "提示", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning",      })        .then(() => {          let courseScheduleIds = arr.join(",");          bathDelete({ courseScheduleIds }).then((res) => {            if (res.code == 200) {              this.$message.success("删除成功");              this.getList();            }          });        })        .catch(() => {});    },    submitResetClass() {      let maskForm = this.maskForm;      let diff = dayjs(maskForm.date + " " + maskForm.startTime).diff(        new Date(),        "second"      );      if (diff <= 0) {        this.$message.error("课程开始时间必须大于当前时间");        return;      }      if (!maskForm.startTime || !maskForm.endTime) {        this.$message.error("请填写开始时间或结束时间");        return;      }      this.$confirm("是否确定?", "提示", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning",      })        .then(() => {          let teachingTeacherIdList = maskForm.assistant.join(",");          if (teachingTeacherIdList.length <= 0) {            let teachingTeacherIdList = null;          }          let obj = {            actualTeacherId: maskForm.teacher,            startClassTimeStr: maskForm.startTime,            endClassTimeStr: maskForm.endTime,            id: maskForm.id,            teachingTeacherIdList,            classDate: maskForm.date,            type: maskForm.type,            groupType: "MUSIC",            schoolId: maskForm.schoolId,          };          resetCourse(cleanDeep(obj)).then((res) => {            if (res.code == 200) {              this.$message.success("修改成功");              this.getList();              this.courseVisible = false;            }            if (res.code == 206) {              this.$confirm(`当前课程课酬预计为0,是否继续`, "提示", {                confirmButtonText: "确定",                cancelButtonText: "取消",                type: "warning",              }).then((res) => {                obj.allowZeroSalary = true;                resetCourse(cleanDeep(obj)).then((res) => {                  if (res.code == 200) {                    this.$message.success("修改成功");                    this.getList();                    this.courseVisible = false;                  }                });              });            }          });        })        .catch(() => {});    },    handleClose() {      this.courseVisible = false;      (this.maskForm = {        teacher: "",        assistant: "",        date: "",        id: "",        startTime: "",        endTime: "",        schoolId: null,      }),        this.$refs["maskForm"].resetFields();    },    handleSelectionChange(val) {      this.activeCourseList = val;    },    checkSelectable(val) {      return val.courseScheduleStatus == "NOT_START";      // return true;    },    batchAdjustmentTime() {      let tempData = this.markAttendance.dataInfo;      let params = {        teacherId: tempData.masterTeacherId,        courseScheduleId: tempData.courseScheduleId,        signInStatus: 1,        signOutStatus: 1,      };      updateTeacherAttendance(params).then((res) => {        if (res.code == 200) {          this.$message.success("补卡成功");          this.markAttendance.status = false;          this.getList();        } else {          this.$message.error(res.msg);        }      });    },    handleCloseTimer() {      this.timerVisible = false;      this.timerMask.timer = "";    },    resetTimer() {      if (this.activeCourseList.length < 1) {        this.$message.error("请至少选择一节课");        return;      }      this.timerVisible = true;    },    resetType(row) {      this.typeForm.type = row.courseScheduleType;      this.typeForm.id = row.courseScheduleId;      this.typeForm.teacher = parseInt(row.masterTeacherId);      // this.maskForm.type = row.courseScheduleType;      this.typeForm.assistant = [];      for (let i in row.teachingTeachers) {        if (row.teachingTeachers[i].teacherRole == "TEACHING") {          this.typeForm.assistant.push(row.teachingTeachers[i].userId);        }      }      this.typeForm.date = row.classDate;      this.$set(        this.typeForm,        "startTime",        row.startClassTimeStr.substring(0, 5)      );      this.typeForm.endTime = row.endClassTimeStr.substring(0, 5);      //  console.log(row.type)      this.typeVisible = true;    },    submitResetType() {      this.$refs.typeForm.validate((res) => {        if (res) {          let teachingTeacherIdList = this.typeForm.assistant.join(",");          if (teachingTeacherIdList.length <= 0) {            let teachingTeacherIdList = null;          }          let obj = {            actualTeacherId: this.typeForm.teacher,            startClassTimeStr: this.typeForm.startTime,            endClassTimeStr: this.typeForm.endTime,            id: this.typeForm.id,            type: this.typeForm.type,            teachingTeacherIdList,            classDate: this.typeForm.date,          };          resetCourse(obj).then((res) => {            if (res.code == 200) {              this.$message.success("修改成功");              this.getList();              this.typeVisible = false;            }          });        }      });    },    // 清除考勤    clearAttend(row) {      this.$confirm("是否清除考勤记录?", "提示", {        confirmButtonText: "确定",        cancelButtonText: "取消",        type: "warning",      })        .then(() => {          cleanAttendance({ courseScheduleIds: row.courseScheduleId }).then(            (res) => {              if (res.code == 200) {                this.$message.success("清除成功");                this.getList();              } else {                this.$message.error(res.msg);              }            }          );        })        .catch(() => {});    },    changeStartTime(val) {      this.$nextTick((res) => {        this.maskForm.endTime = addTimerFormMinute(          this.maskForm.date,          val,          this.maskForm.timer        );      });    },    changeTime(val) {      this.$nextTick((res) => {        this.maskForm.endTime = addTimerFormMinute(          this.maskForm.date,          this.maskForm.startTime,          val        );      });    },    onReSet() {      this.$refs.searchForm.resetFields();      this.search();    },    beginDate() {      return {        firstDayOfWeek: 1,        disabledDate(time) {          return time.getTime() + 86400000 <= new Date().getTime();          //开始时间不选时,结束时间最大值小于等于当天        },      };    },  },  filters: {    studentCallName: (value) => {      let template = {        NORMAL: "到课",        TRUANT: "未到",        LEAVE: "请假",        DROP_OUT: "退学",        LATE: "迟到",        "": "未到",      };      return template[value];    },  },  watch: {    "maskForm.timer"(val) {      this.maskForm.endTime = addTimerFormMinute(        this.maskForm.date,        this.maskForm.startTime,        val      );    },  },  computed: {    nowTime() {      // console.log(that.maskForm.date)      let str = "04:30:00";      if (that.maskForm.date == dayjs(new Date()).format("YYYY-MM-DD")) {        str = dayjs(new Date()).format("HH:mm:ss");      }      return str;    },  },};</script><style lang="scss" scoped>.cl-container {  .topFrom {    margin: 20px 30px 0;    .classlist {      display: flex;      flex-direction: row;      justify-content: flex-start;      align-items: center;      ul {        li {          list-style: none;        }      }    }  }  // .searchForm {  //   // margin: 0 30px;  // }}.btnWraps {  display: flex;  flex-direction: row;  justify-content: flex-start;  div {    margin-right: 20px;  }}.maskForm {  /deep/.el-input {    width: 220px;  }}</style>
 |