|
@@ -1,650 +1,650 @@
|
|
|
-<template >
|
|
|
- <div>
|
|
|
- <!-- 头部展示 -->
|
|
|
- <statistic>
|
|
|
- <statistic-item>
|
|
|
- <span>未上课时</span>
|
|
|
- <span>{{ totalClassTimes }}</span>
|
|
|
- </statistic-item>
|
|
|
- <statistic-item>
|
|
|
- <span>已上课时</span>
|
|
|
- <span>{{ currentClassTimes }}</span>
|
|
|
- </statistic-item>
|
|
|
- <statistic-item>
|
|
|
- <span>已结算</span>
|
|
|
- <span>{{ isSalaryNum }}</span>
|
|
|
- </statistic-item>
|
|
|
- <statistic-item>
|
|
|
- <span>被投诉</span>
|
|
|
- <span>{{ complaintsNum }}</span>
|
|
|
- </statistic-item>
|
|
|
- </statistic>
|
|
|
- <!-- 搜索标题 -->
|
|
|
- <save-form
|
|
|
- save-key='vipDetail-record'
|
|
|
- :inline="true"
|
|
|
- label-position="right"
|
|
|
- label-width="120px"
|
|
|
- class="searchForm"
|
|
|
- @submit="search"
|
|
|
- :model="searchForm"
|
|
|
- >
|
|
|
- <el-form-item>
|
|
|
- <el-select
|
|
|
- v-model.trim="searchForm.type"
|
|
|
- clearable
|
|
|
- placeholder="课程类型"
|
|
|
- >
|
|
|
- <el-option label="线上课" value="ONLINE"></el-option>
|
|
|
- <el-option label="线下课" value="OFFLINE"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item>
|
|
|
- <el-select
|
|
|
- v-model.trim="searchForm.status"
|
|
|
- clearable
|
|
|
- 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>
|
|
|
- <el-date-picker
|
|
|
- v-model.trim="searchForm.time"
|
|
|
- style="width: 400px"
|
|
|
- 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-form-item>
|
|
|
- </save-form>
|
|
|
- <!-- 列表 -->
|
|
|
- <div class="tableWrap">
|
|
|
- <el-table :data="tableList" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
|
|
|
- <el-table-column align="center" label="课程编号" prop="id">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column
|
|
|
- align="center"
|
|
|
- label="上课时间"
|
|
|
- width="250px"
|
|
|
- prop="startClassTime"
|
|
|
- >
|
|
|
- <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) : '' }} -->
|
|
|
- <div>
|
|
|
- <p>
|
|
|
- {{ scope.row.startClassTime | dateForMinFormat }}-{{
|
|
|
- scope.row.endClassTime | endTime
|
|
|
- }}
|
|
|
- </p>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" label="课程类型" prop="teachMode">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <p>{{ scope.row.teachMode | fitterTeachMode }}</p>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" label="教学点" prop="schoolName">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- {{ scope.row.schoolName ? scope.row.schoolName : "网络教室" }}
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" label="上课学员数" prop="attendanceNum">
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" prop="status" label="签到状态">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <p>{{ scope.row.signInStatus | attendanceType }}</p>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" prop="status" label="签退状态">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <p>{{ scope.row.signOutStatus | attendanceOutType }}</p>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" prop="status" label="课程状态">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <p>{{ scope.row.status | fitterStatus }}</p>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" prop="isSalary" label="结算状态">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <p>{{ scope.row.isSalary | fitterisSalary }}</p>
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- <el-table-column align="center" label="操作" width="200">
|
|
|
- <template slot-scope="scope">
|
|
|
- <div>
|
|
|
- <el-button
|
|
|
- type="text"
|
|
|
- v-if="scope.row.attendanceNum"
|
|
|
- permission="'vipGroupManage/findVipGroupAttendanceStudents'"
|
|
|
- @click="lookStudents(scope.row)"
|
|
|
- >查看学员</el-button
|
|
|
- >
|
|
|
-
|
|
|
- <!-- 未结算没有点击功能 -->
|
|
|
- <el-button
|
|
|
- v-if="
|
|
|
- scope.row.status == 'OVER' &&
|
|
|
- !scope.row.isSalary &&
|
|
|
- permission('teacherAttendance/updateTeacherAttendance/3361')
|
|
|
- "
|
|
|
- type="text"
|
|
|
- @click="onMarkAttendance(scope.row)"
|
|
|
- >补考勤</el-button
|
|
|
- >
|
|
|
- <el-button
|
|
|
- v-if="
|
|
|
- scope.row.status == 'OVER' &&
|
|
|
- permission('studentAttendance/updateStudentAttendances')
|
|
|
- "
|
|
|
- type="text"
|
|
|
- @click="onCallName(scope.row)"
|
|
|
- >点名表</el-button
|
|
|
- >
|
|
|
- <!-- <el-button type="text" v-permission="'vipGroupManage/classStartDateAdjust'"
|
|
|
- @click="resetClass(scope.row)">课程调整</el-button> -->
|
|
|
- </div>
|
|
|
- </template>
|
|
|
- </el-table-column>
|
|
|
- </el-table>
|
|
|
- </div>
|
|
|
- <pagination
|
|
|
- save-key='vipDetail-record'
|
|
|
- sync
|
|
|
- :total.sync="rules.total"
|
|
|
- :page.sync="rules.page"
|
|
|
- :limit.sync="rules.limit"
|
|
|
- :page-sizes="rules.page_size"
|
|
|
- @pagination="getList"
|
|
|
- />
|
|
|
- <el-dialog
|
|
|
- title="上课学员"
|
|
|
- :visible.sync="studentVisible"
|
|
|
- width="30%"
|
|
|
- :before-close="handleClose"
|
|
|
- >
|
|
|
- <span
|
|
|
- v-for="(item, index) in studentList"
|
|
|
- :key="index"
|
|
|
- style="margin-left: 10px"
|
|
|
- >{{ item }}</span
|
|
|
- >
|
|
|
- <span slot="footer" class="dialog-footer">
|
|
|
- <el-button type="primary" @click="studentVisible = false"
|
|
|
- >确 定</el-button
|
|
|
- >
|
|
|
- </span>
|
|
|
- </el-dialog>
|
|
|
- <!-- <el-dialog title="课程调整"
|
|
|
- :visible.sync="courseVisible"
|
|
|
- width="420px">
|
|
|
- <el-form :model="maskForm"
|
|
|
- :rules="maskrules"
|
|
|
- label-width="120px"
|
|
|
- label-position="right"
|
|
|
- ref='maskForm'>
|
|
|
- <el-form-item label="选择上课日期"
|
|
|
- prop="date">
|
|
|
- <el-date-picker type="date"
|
|
|
- value-format="yyyy-MM-dd"
|
|
|
- :picker-options="{
|
|
|
- firstDayOfWeek:1
|
|
|
- }"
|
|
|
- v-model.trim="maskForm.date"
|
|
|
- placeholder="选择日期"></el-date-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="开始时间"
|
|
|
- prop="startTime">
|
|
|
- <el-time-picker v-model.trim="maskForm.startTime"
|
|
|
- format='HH:mm'
|
|
|
- value-format='HH:mm'
|
|
|
- :picker-options="{
|
|
|
- selectableRange: '04:00:00 - 23:59:00'
|
|
|
- }"
|
|
|
- placeholder="选择时间">
|
|
|
- </el-time-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="结束时间"
|
|
|
- prop="endTime">
|
|
|
- <el-time-picker v-model.trim="maskForm.endTime"
|
|
|
- format='HH:mm'
|
|
|
- value-format='HH:mm'
|
|
|
- :picker-options="{
|
|
|
- selectableRange:`${maskForm.startTime ? maskForm.startTime+':00' : '04:00:00'}-23:59:00`
|
|
|
- }"
|
|
|
- placeholder="选择时间">
|
|
|
- </el-time-picker>
|
|
|
- </el-form-item>
|
|
|
- <el-form-item label="教学点"
|
|
|
- prop="cooperation"
|
|
|
- v-if='activeRow&&activeRow.teachMode == "OFFLINE"'>
|
|
|
- <el-select v-model.trim="maskForm.cooperation"
|
|
|
- clearable
|
|
|
- filterable>
|
|
|
- <el-option v-for='(item,index) in cooperationList'
|
|
|
- :key="index"
|
|
|
- :value="item.id"
|
|
|
- :label="item.name"></el-option>
|
|
|
- </el-select>
|
|
|
- </el-form-item>
|
|
|
- </el-form>
|
|
|
- <span slot="footer"
|
|
|
- class="dialog-footer">
|
|
|
- <el-button type="primary"
|
|
|
- @click="resetCourse">确 定</el-button>
|
|
|
- </span>
|
|
|
- </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" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
|
|
|
- <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.isSalary"
|
|
|
- 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
|
|
|
- :total="rollCall.total"
|
|
|
- :page.sync="rollCall.page"
|
|
|
- :limit.sync="rollCall.limit"
|
|
|
- :page-sizes="rollCall.page_size"
|
|
|
- @pagination="getCallName"
|
|
|
- />
|
|
|
- </el-dialog>
|
|
|
- </div>
|
|
|
-</template>
|
|
|
-<script>
|
|
|
-import pagination from "@/components/Pagination/index";
|
|
|
-import { getSchool } from "@/api/systemManage";
|
|
|
-import {
|
|
|
- findVipGroupTeachingRecord,
|
|
|
- getStudyStudents,
|
|
|
- resetVipClass,
|
|
|
-} from "@/api/vipSeting";
|
|
|
-import {
|
|
|
- findAttendanceStudentByCourseWithPage,
|
|
|
- updateStudentAttendances,
|
|
|
- updateTeacherAttendance,
|
|
|
-} from "@/api/buildTeam";
|
|
|
-import { permission } from "@/utils/directivePage";
|
|
|
-export default {
|
|
|
- components: { pagination },
|
|
|
- name: "teacherRecord",
|
|
|
- data() {
|
|
|
- return {
|
|
|
- searchForm: {
|
|
|
- type: "",
|
|
|
- status: "",
|
|
|
- time: [],
|
|
|
- },
|
|
|
- searchLsit: [],
|
|
|
- tableList: [],
|
|
|
- id: "",
|
|
|
- complaintsNum: "", //投诉数
|
|
|
- currentClassTimes: "", //当前课数
|
|
|
- isSalaryNum: "", // 已结算
|
|
|
- totalClassTimes: "", // 未上课数
|
|
|
- studentVisible: false, // 查看上课学员数的弹窗
|
|
|
- courseVisible: false, // 课时调整弹窗
|
|
|
- studentList: [],
|
|
|
- cooperationList: [],
|
|
|
- maskForm: {
|
|
|
- data: "",
|
|
|
- startTime: "",
|
|
|
- endTime: "",
|
|
|
- status: "",
|
|
|
- type: "",
|
|
|
- cooperation: "",
|
|
|
- },
|
|
|
- markAttendance: {
|
|
|
- // 考勤状态
|
|
|
- status: false,
|
|
|
- dataInfo: {},
|
|
|
- },
|
|
|
- activeId: "",
|
|
|
- activeRow: null, //
|
|
|
- maskrules: {
|
|
|
- date: [{ required: true, message: "请选择修改日期", trigger: "blur" }],
|
|
|
- startTime: [{ required: true, message: "请选择开始", trigger: "blur" }],
|
|
|
- endTime: [{ required: true, message: "请选择结束", trigger: "blur" }],
|
|
|
- },
|
|
|
- rules: {
|
|
|
- // 分页规则
|
|
|
- limit: 10, // 限制显示条数
|
|
|
- page: 1, // 当前页
|
|
|
- total: 0, // 总条数
|
|
|
- page_size: [10, 20, 40, 50], // 选择限制显示条数
|
|
|
- },
|
|
|
- rollCall: {
|
|
|
- // 点名表
|
|
|
- status: false,
|
|
|
- gridData: [],
|
|
|
- selectItem: {}, // 选中状态
|
|
|
- limit: 10, // 限制显示条数
|
|
|
- page: 1, // 当前页
|
|
|
- total: 0, // 总条数
|
|
|
- page_size: [10, 20, 40, 50], // 选择限制显示条数
|
|
|
- },
|
|
|
- };
|
|
|
- },
|
|
|
- mounted() {
|
|
|
- this.__init();
|
|
|
- },
|
|
|
- activated() {
|
|
|
- this.__init();
|
|
|
- },
|
|
|
- methods: {
|
|
|
- __init() {
|
|
|
- let id = this.$route.query.id;
|
|
|
- this.id = id;
|
|
|
- this.rules.page = 1;
|
|
|
- // 获取vip教学记录
|
|
|
- this.getList();
|
|
|
- // 获取分部教学点
|
|
|
- getSchool({ organId: null }).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- this.cooperationList = res.data;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- search() {
|
|
|
- this.rules.page = 1;
|
|
|
- this.getList();
|
|
|
- },
|
|
|
- getList() {
|
|
|
- let startTime;
|
|
|
- let endTime;
|
|
|
- if (this.searchForm.time) {
|
|
|
- startTime = this.searchForm.time[0];
|
|
|
- endTime = this.searchForm.time[1];
|
|
|
- } else {
|
|
|
- startTime = "";
|
|
|
- endTime = "";
|
|
|
- }
|
|
|
- let obj = {
|
|
|
- vipGroupId: this.id,
|
|
|
- page: this.rules.page,
|
|
|
- rows: this.rules.limit,
|
|
|
- status: this.searchForm.status || null,
|
|
|
- teachMode: this.searchForm.type || null,
|
|
|
- startTime,
|
|
|
- endTime,
|
|
|
- };
|
|
|
- findVipGroupTeachingRecord(obj).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- this.complaintsNum = res.data.baseInfo.complaintsNum;
|
|
|
- // 当前课数
|
|
|
- this.currentClassTimes = res.data.baseInfo.courseEndNum;
|
|
|
- this.isSalaryNum = res.data.baseInfo.isSalaryNum;
|
|
|
- // 未上课数
|
|
|
- this.totalClassTimes = res.data.baseInfo.courseNoStartNum;
|
|
|
- // this.totalClassTimes = res.data.baseInfo.totalClassTimes - this.currentClassTimes;
|
|
|
- this.tableList = res.data.pageInfo.rows;
|
|
|
- this.rules.total = res.data.pageInfo.total;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- batchAdjustmentTime() {
|
|
|
- let tempData = this.markAttendance.dataInfo;
|
|
|
- let params = {
|
|
|
- courseScheduleId: tempData.id,
|
|
|
- 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);
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- 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.id,
|
|
|
- };
|
|
|
- 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.id,
|
|
|
- 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);
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- lookStudents(row) {
|
|
|
- let id = row.id;
|
|
|
- getStudyStudents({ courseScheduleId: id }).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- this.studentList = res.data;
|
|
|
- this.studentVisible = true;
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- permission(str) {
|
|
|
- return permission(str);
|
|
|
- },
|
|
|
- handleClose() {
|
|
|
- this.studentList = [];
|
|
|
- this.studentVisible = false;
|
|
|
- },
|
|
|
- resetClass(row) {
|
|
|
- this.courseVisible = true;
|
|
|
- // 弹出弹窗
|
|
|
- this.activeId = row.id;
|
|
|
- this.activeRow = row;
|
|
|
- // resetVipClass().then()
|
|
|
- },
|
|
|
- resetCourse() {
|
|
|
- // 点击弹窗效验
|
|
|
- this.$refs["maskForm"].validate((valid) => {
|
|
|
- if (valid) {
|
|
|
- // 效验成功
|
|
|
- resetVipClass({
|
|
|
- id: this.activeId,
|
|
|
- classDate: this.maskForm.date,
|
|
|
- startClassTime: this.maskForm.date + " " + this.maskForm.startTime,
|
|
|
- endClassTime: this.maskForm.date + " " + this.maskForm.endTime,
|
|
|
- schoolId: this.maskForm.cooperation,
|
|
|
- }).then((res) => {
|
|
|
- if (res.code == 200) {
|
|
|
- this.$message.success("调整成功");
|
|
|
- this.getList();
|
|
|
- this.courseVisible = false;
|
|
|
- this.$refs["maskForm"].resetFields();
|
|
|
- } else {
|
|
|
- this.$message.error(res.msg);
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- },
|
|
|
- },
|
|
|
- filters: {
|
|
|
- fitterisSalary(val) {
|
|
|
- let arr = ["未结算", "已结算"];
|
|
|
- return arr[val];
|
|
|
- },
|
|
|
- fitterTeachMode(val) {
|
|
|
- if (val == "ONLINE") {
|
|
|
- return "线上课";
|
|
|
- } else if (val == "OFFLINE") {
|
|
|
- return "线下课";
|
|
|
- }
|
|
|
- },
|
|
|
- fitterStatus(val) {
|
|
|
- if (val == "NOT_START") {
|
|
|
- return "未开始";
|
|
|
- } else if (val == "UNDERWAY") {
|
|
|
- return "进行中";
|
|
|
- } else if (val == "OVER") {
|
|
|
- return "已结束";
|
|
|
- }
|
|
|
- },
|
|
|
- endTime(val) {
|
|
|
- if (val) {
|
|
|
- return val.split(" ")[1].substring(0, 5);
|
|
|
- } else {
|
|
|
- return val;
|
|
|
- }
|
|
|
- },
|
|
|
- studentCallName: (value) => {
|
|
|
- let template = {
|
|
|
- NORMAL: "到课",
|
|
|
- TRUANT: "未到",
|
|
|
- LEAVE: "请假",
|
|
|
- DROP_OUT: "退学",
|
|
|
- LATE: "迟到",
|
|
|
- "": "未到",
|
|
|
- };
|
|
|
- return template[value];
|
|
|
- },
|
|
|
- },
|
|
|
-};
|
|
|
-</script>
|
|
|
-<style lang="scss" scope>
|
|
|
-</style>
|
|
|
+<template >
|
|
|
+ <div>
|
|
|
+ <!-- 头部展示 -->
|
|
|
+ <statistic>
|
|
|
+ <statistic-item>
|
|
|
+ <span>未上课时</span>
|
|
|
+ <span>{{ totalClassTimes }}</span>
|
|
|
+ </statistic-item>
|
|
|
+ <statistic-item>
|
|
|
+ <span>已上课时</span>
|
|
|
+ <span>{{ currentClassTimes }}</span>
|
|
|
+ </statistic-item>
|
|
|
+ <statistic-item>
|
|
|
+ <span>已结算</span>
|
|
|
+ <span>{{ isSalaryNum }}</span>
|
|
|
+ </statistic-item>
|
|
|
+ <statistic-item>
|
|
|
+ <span>被投诉</span>
|
|
|
+ <span>{{ complaintsNum }}</span>
|
|
|
+ </statistic-item>
|
|
|
+ </statistic>
|
|
|
+ <!-- 搜索标题 -->
|
|
|
+ <save-form
|
|
|
+ save-key='vipDetail-record'
|
|
|
+ :inline="true"
|
|
|
+ label-position="right"
|
|
|
+ label-width="120px"
|
|
|
+ class="searchForm"
|
|
|
+ @submit="search"
|
|
|
+ :model="searchForm"
|
|
|
+ >
|
|
|
+ <el-form-item>
|
|
|
+ <el-select
|
|
|
+ v-model.trim="searchForm.type"
|
|
|
+ clearable
|
|
|
+ placeholder="课程类型"
|
|
|
+ >
|
|
|
+ <el-option label="线上课" value="ONLINE"></el-option>
|
|
|
+ <el-option label="线下课" value="OFFLINE"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item>
|
|
|
+ <el-select
|
|
|
+ v-model.trim="searchForm.status"
|
|
|
+ clearable
|
|
|
+ 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>
|
|
|
+ <el-date-picker
|
|
|
+ v-model.trim="searchForm.time"
|
|
|
+ style="width: 400px"
|
|
|
+ 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-form-item>
|
|
|
+ </save-form>
|
|
|
+ <!-- 列表 -->
|
|
|
+ <div class="tableWrap">
|
|
|
+ <el-table :data="tableList" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
|
|
|
+ <el-table-column align="center" label="课程编号" prop="id">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column
|
|
|
+ align="center"
|
|
|
+ label="上课时间"
|
|
|
+ width="250px"
|
|
|
+ prop="startClassTime"
|
|
|
+ >
|
|
|
+ <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) : '' }} -->
|
|
|
+ <div>
|
|
|
+ <p>
|
|
|
+ {{ scope.row.startClassTime | dateForMinFormat }}-{{
|
|
|
+ scope.row.endClassTime | endTime
|
|
|
+ }}
|
|
|
+ </p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" label="课程类型" prop="teachMode">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <p>{{ scope.row.teachMode | fitterTeachMode }}</p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" label="教学点" prop="schoolName">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ {{ scope.row.schoolName ? scope.row.schoolName : "网络教室" }}
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" label="上课学员数" prop="attendanceNum">
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" prop="status" label="签到状态">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <p>{{ scope.row.signInStatus | attendanceType }}</p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" prop="status" label="签退状态">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <p>{{ scope.row.signOutStatus | attendanceOutType }}</p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" prop="status" label="课程状态">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <p>{{ scope.row.status | fitterStatus }}</p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" prop="isSalary" label="结算状态">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <p>{{ scope.row.isSalary | fitterisSalary }}</p>
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column align="center" label="操作" width="200">
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <div>
|
|
|
+ <el-button
|
|
|
+ type="text"
|
|
|
+ v-if="scope.row.attendanceNum"
|
|
|
+ permission="'vipGroupManage/findVipGroupAttendanceStudents'"
|
|
|
+ @click="lookStudents(scope.row)"
|
|
|
+ >查看学员</el-button
|
|
|
+ >
|
|
|
+
|
|
|
+ <!-- 未结算没有点击功能 -->
|
|
|
+ <el-button
|
|
|
+ v-if="
|
|
|
+ scope.row.status == 'OVER' &&
|
|
|
+ !scope.row.isSalary &&
|
|
|
+ permission('teacherAttendance/updateTeacherAttendance/3361')
|
|
|
+ "
|
|
|
+ type="text"
|
|
|
+ @click="onMarkAttendance(scope.row)"
|
|
|
+ >补考勤</el-button
|
|
|
+ >
|
|
|
+ <el-button
|
|
|
+ v-if="
|
|
|
+ scope.row.status == 'OVER' &&
|
|
|
+ permission('studentAttendance/updateStudentAttendances')
|
|
|
+ "
|
|
|
+ type="text"
|
|
|
+ @click="onCallName(scope.row)"
|
|
|
+ >点名表</el-button
|
|
|
+ >
|
|
|
+ <!-- <el-button type="text" v-permission="'vipGroupManage/classStartDateAdjust'"
|
|
|
+ @click="resetClass(scope.row)">课程调整</el-button> -->
|
|
|
+ </div>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ </el-table>
|
|
|
+ </div>
|
|
|
+ <pagination
|
|
|
+ save-key='vipDetail-record'
|
|
|
+ sync
|
|
|
+ :total.sync="rules.total"
|
|
|
+ :page.sync="rules.page"
|
|
|
+ :limit.sync="rules.limit"
|
|
|
+ :page-sizes="rules.page_size"
|
|
|
+ @pagination="getList"
|
|
|
+ />
|
|
|
+ <el-dialog
|
|
|
+ title="上课学员"
|
|
|
+ :visible.sync="studentVisible"
|
|
|
+ width="30%"
|
|
|
+ :before-close="handleClose"
|
|
|
+ >
|
|
|
+ <span
|
|
|
+ v-for="(item, index) in studentList"
|
|
|
+ :key="index"
|
|
|
+ style="margin-left: 10px"
|
|
|
+ >{{ item }}</span
|
|
|
+ >
|
|
|
+ <span slot="footer" class="dialog-footer">
|
|
|
+ <el-button type="primary" @click="studentVisible = false"
|
|
|
+ >确 定</el-button
|
|
|
+ >
|
|
|
+ </span>
|
|
|
+ </el-dialog>
|
|
|
+ <!-- <el-dialog title="课程调整"
|
|
|
+ :visible.sync="courseVisible"
|
|
|
+ width="420px">
|
|
|
+ <el-form :model="maskForm"
|
|
|
+ :rules="maskrules"
|
|
|
+ label-width="120px"
|
|
|
+ label-position="right"
|
|
|
+ ref='maskForm'>
|
|
|
+ <el-form-item label="选择上课日期"
|
|
|
+ prop="date">
|
|
|
+ <el-date-picker type="date"
|
|
|
+ value-format="yyyy-MM-dd"
|
|
|
+ :picker-options="{
|
|
|
+ firstDayOfWeek:1
|
|
|
+ }"
|
|
|
+ v-model.trim="maskForm.date"
|
|
|
+ placeholder="选择日期"></el-date-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="开始时间"
|
|
|
+ prop="startTime">
|
|
|
+ <el-time-picker v-model.trim="maskForm.startTime"
|
|
|
+ format='HH:mm'
|
|
|
+ value-format='HH:mm'
|
|
|
+ :picker-options="{
|
|
|
+ selectableRange: '06:00:00 - 23:59:00'
|
|
|
+ }"
|
|
|
+ placeholder="选择时间">
|
|
|
+ </el-time-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="结束时间"
|
|
|
+ prop="endTime">
|
|
|
+ <el-time-picker v-model.trim="maskForm.endTime"
|
|
|
+ format='HH:mm'
|
|
|
+ value-format='HH:mm'
|
|
|
+ :picker-options="{
|
|
|
+ selectableRange:`${maskForm.startTime ? maskForm.startTime+':00' : '06:00:00'}-23:59:00`
|
|
|
+ }"
|
|
|
+ placeholder="选择时间">
|
|
|
+ </el-time-picker>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="教学点"
|
|
|
+ prop="cooperation"
|
|
|
+ v-if='activeRow&&activeRow.teachMode == "OFFLINE"'>
|
|
|
+ <el-select v-model.trim="maskForm.cooperation"
|
|
|
+ clearable
|
|
|
+ filterable>
|
|
|
+ <el-option v-for='(item,index) in cooperationList'
|
|
|
+ :key="index"
|
|
|
+ :value="item.id"
|
|
|
+ :label="item.name"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ </el-form>
|
|
|
+ <span slot="footer"
|
|
|
+ class="dialog-footer">
|
|
|
+ <el-button type="primary"
|
|
|
+ @click="resetCourse">确 定</el-button>
|
|
|
+ </span>
|
|
|
+ </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" :header-cell-style="{background:'#EDEEF0',color:'#444'}">
|
|
|
+ <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.isSalary"
|
|
|
+ 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
|
|
|
+ :total="rollCall.total"
|
|
|
+ :page.sync="rollCall.page"
|
|
|
+ :limit.sync="rollCall.limit"
|
|
|
+ :page-sizes="rollCall.page_size"
|
|
|
+ @pagination="getCallName"
|
|
|
+ />
|
|
|
+ </el-dialog>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+<script>
|
|
|
+import pagination from "@/components/Pagination/index";
|
|
|
+import { getSchool } from "@/api/systemManage";
|
|
|
+import {
|
|
|
+ findVipGroupTeachingRecord,
|
|
|
+ getStudyStudents,
|
|
|
+ resetVipClass,
|
|
|
+} from "@/api/vipSeting";
|
|
|
+import {
|
|
|
+ findAttendanceStudentByCourseWithPage,
|
|
|
+ updateStudentAttendances,
|
|
|
+ updateTeacherAttendance,
|
|
|
+} from "@/api/buildTeam";
|
|
|
+import { permission } from "@/utils/directivePage";
|
|
|
+export default {
|
|
|
+ components: { pagination },
|
|
|
+ name: "teacherRecord",
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ searchForm: {
|
|
|
+ type: "",
|
|
|
+ status: "",
|
|
|
+ time: [],
|
|
|
+ },
|
|
|
+ searchLsit: [],
|
|
|
+ tableList: [],
|
|
|
+ id: "",
|
|
|
+ complaintsNum: "", //投诉数
|
|
|
+ currentClassTimes: "", //当前课数
|
|
|
+ isSalaryNum: "", // 已结算
|
|
|
+ totalClassTimes: "", // 未上课数
|
|
|
+ studentVisible: false, // 查看上课学员数的弹窗
|
|
|
+ courseVisible: false, // 课时调整弹窗
|
|
|
+ studentList: [],
|
|
|
+ cooperationList: [],
|
|
|
+ maskForm: {
|
|
|
+ data: "",
|
|
|
+ startTime: "",
|
|
|
+ endTime: "",
|
|
|
+ status: "",
|
|
|
+ type: "",
|
|
|
+ cooperation: "",
|
|
|
+ },
|
|
|
+ markAttendance: {
|
|
|
+ // 考勤状态
|
|
|
+ status: false,
|
|
|
+ dataInfo: {},
|
|
|
+ },
|
|
|
+ activeId: "",
|
|
|
+ activeRow: null, //
|
|
|
+ maskrules: {
|
|
|
+ date: [{ required: true, message: "请选择修改日期", trigger: "blur" }],
|
|
|
+ startTime: [{ required: true, message: "请选择开始", trigger: "blur" }],
|
|
|
+ endTime: [{ required: true, message: "请选择结束", trigger: "blur" }],
|
|
|
+ },
|
|
|
+ rules: {
|
|
|
+ // 分页规则
|
|
|
+ limit: 10, // 限制显示条数
|
|
|
+ page: 1, // 当前页
|
|
|
+ total: 0, // 总条数
|
|
|
+ page_size: [10, 20, 40, 50], // 选择限制显示条数
|
|
|
+ },
|
|
|
+ rollCall: {
|
|
|
+ // 点名表
|
|
|
+ status: false,
|
|
|
+ gridData: [],
|
|
|
+ selectItem: {}, // 选中状态
|
|
|
+ limit: 10, // 限制显示条数
|
|
|
+ page: 1, // 当前页
|
|
|
+ total: 0, // 总条数
|
|
|
+ page_size: [10, 20, 40, 50], // 选择限制显示条数
|
|
|
+ },
|
|
|
+ };
|
|
|
+ },
|
|
|
+ mounted() {
|
|
|
+ this.__init();
|
|
|
+ },
|
|
|
+ activated() {
|
|
|
+ this.__init();
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ __init() {
|
|
|
+ let id = this.$route.query.id;
|
|
|
+ this.id = id;
|
|
|
+ this.rules.page = 1;
|
|
|
+ // 获取vip教学记录
|
|
|
+ this.getList();
|
|
|
+ // 获取分部教学点
|
|
|
+ getSchool({ organId: null }).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.cooperationList = res.data;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ search() {
|
|
|
+ this.rules.page = 1;
|
|
|
+ this.getList();
|
|
|
+ },
|
|
|
+ getList() {
|
|
|
+ let startTime;
|
|
|
+ let endTime;
|
|
|
+ if (this.searchForm.time) {
|
|
|
+ startTime = this.searchForm.time[0];
|
|
|
+ endTime = this.searchForm.time[1];
|
|
|
+ } else {
|
|
|
+ startTime = "";
|
|
|
+ endTime = "";
|
|
|
+ }
|
|
|
+ let obj = {
|
|
|
+ vipGroupId: this.id,
|
|
|
+ page: this.rules.page,
|
|
|
+ rows: this.rules.limit,
|
|
|
+ status: this.searchForm.status || null,
|
|
|
+ teachMode: this.searchForm.type || null,
|
|
|
+ startTime,
|
|
|
+ endTime,
|
|
|
+ };
|
|
|
+ findVipGroupTeachingRecord(obj).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.complaintsNum = res.data.baseInfo.complaintsNum;
|
|
|
+ // 当前课数
|
|
|
+ this.currentClassTimes = res.data.baseInfo.courseEndNum;
|
|
|
+ this.isSalaryNum = res.data.baseInfo.isSalaryNum;
|
|
|
+ // 未上课数
|
|
|
+ this.totalClassTimes = res.data.baseInfo.courseNoStartNum;
|
|
|
+ // this.totalClassTimes = res.data.baseInfo.totalClassTimes - this.currentClassTimes;
|
|
|
+ this.tableList = res.data.pageInfo.rows;
|
|
|
+ this.rules.total = res.data.pageInfo.total;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ batchAdjustmentTime() {
|
|
|
+ let tempData = this.markAttendance.dataInfo;
|
|
|
+ let params = {
|
|
|
+ courseScheduleId: tempData.id,
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ 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.id,
|
|
|
+ };
|
|
|
+ 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.id,
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ lookStudents(row) {
|
|
|
+ let id = row.id;
|
|
|
+ getStudyStudents({ courseScheduleId: id }).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.studentList = res.data;
|
|
|
+ this.studentVisible = true;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ permission(str) {
|
|
|
+ return permission(str);
|
|
|
+ },
|
|
|
+ handleClose() {
|
|
|
+ this.studentList = [];
|
|
|
+ this.studentVisible = false;
|
|
|
+ },
|
|
|
+ resetClass(row) {
|
|
|
+ this.courseVisible = true;
|
|
|
+ // 弹出弹窗
|
|
|
+ this.activeId = row.id;
|
|
|
+ this.activeRow = row;
|
|
|
+ // resetVipClass().then()
|
|
|
+ },
|
|
|
+ resetCourse() {
|
|
|
+ // 点击弹窗效验
|
|
|
+ this.$refs["maskForm"].validate((valid) => {
|
|
|
+ if (valid) {
|
|
|
+ // 效验成功
|
|
|
+ resetVipClass({
|
|
|
+ id: this.activeId,
|
|
|
+ classDate: this.maskForm.date,
|
|
|
+ startClassTime: this.maskForm.date + " " + this.maskForm.startTime,
|
|
|
+ endClassTime: this.maskForm.date + " " + this.maskForm.endTime,
|
|
|
+ schoolId: this.maskForm.cooperation,
|
|
|
+ }).then((res) => {
|
|
|
+ if (res.code == 200) {
|
|
|
+ this.$message.success("调整成功");
|
|
|
+ this.getList();
|
|
|
+ this.courseVisible = false;
|
|
|
+ this.$refs["maskForm"].resetFields();
|
|
|
+ } else {
|
|
|
+ this.$message.error(res.msg);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ },
|
|
|
+ },
|
|
|
+ filters: {
|
|
|
+ fitterisSalary(val) {
|
|
|
+ let arr = ["未结算", "已结算"];
|
|
|
+ return arr[val];
|
|
|
+ },
|
|
|
+ fitterTeachMode(val) {
|
|
|
+ if (val == "ONLINE") {
|
|
|
+ return "线上课";
|
|
|
+ } else if (val == "OFFLINE") {
|
|
|
+ return "线下课";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ fitterStatus(val) {
|
|
|
+ if (val == "NOT_START") {
|
|
|
+ return "未开始";
|
|
|
+ } else if (val == "UNDERWAY") {
|
|
|
+ return "进行中";
|
|
|
+ } else if (val == "OVER") {
|
|
|
+ return "已结束";
|
|
|
+ }
|
|
|
+ },
|
|
|
+ endTime(val) {
|
|
|
+ if (val) {
|
|
|
+ return val.split(" ")[1].substring(0, 5);
|
|
|
+ } else {
|
|
|
+ return val;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ studentCallName: (value) => {
|
|
|
+ let template = {
|
|
|
+ NORMAL: "到课",
|
|
|
+ TRUANT: "未到",
|
|
|
+ LEAVE: "请假",
|
|
|
+ DROP_OUT: "退学",
|
|
|
+ LATE: "迟到",
|
|
|
+ "": "未到",
|
|
|
+ };
|
|
|
+ return template[value];
|
|
|
+ },
|
|
|
+ },
|
|
|
+};
|
|
|
+</script>
|
|
|
+<style lang="scss" scope>
|
|
|
+</style>
|