Commit 5909e5a2 authored by Mac's avatar Mac
parents aef9ca1b 394405a4
...@@ -197,11 +197,11 @@ ...@@ -197,11 +197,11 @@
<div class="row backInfo_One"> <div class="row backInfo_One">
<div class="col-6"> <div class="col-6">
<span class="backInfo_Title">总课时:</span> <span class="backInfo_Title">总课时:</span>
<span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TotalPlanNum}} 课时</span> <span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TotalHours}} 课时</span>
</div> </div>
<div class="col-6"> <div class="col-6">
<span class="backInfo_Title">已学课时:</span> <span class="backInfo_Title">已学课时:</span>
<span class="backOtherInfo" style="color:#2961FE;cursor:pointer;" @click="goStudentsClassSee(setingObj.DataObj.Order_Guest_ViewModel)">{{setingObj.DataObj.Order_Guest_ViewModel.Ranks}} 课时</span> <span class="backOtherInfo" style="color:#2961FE;cursor:pointer;" @click="goStudentsClassSee(setingObj.DataObj.Order_Guest_ViewModel)">{{setingObj.DataObj.Order_Guest_ViewModel.CompleteHours}} 课时</span>
<!-- <span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.Ranks}} 课时</span> --> <!-- <span class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.Ranks}} 课时</span> -->
</div> </div>
</div> </div>
...@@ -209,7 +209,7 @@ ...@@ -209,7 +209,7 @@
<div class="col-6"> <div class="col-6">
<span class="backInfo_Title">剩余课时:</span> <span class="backInfo_Title">剩余课时:</span>
<span <span
class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TotalPlanNum-setingObj.DataObj.Order_Guest_ViewModel.Ranks}} class="backOtherInfo">{{setingObj.DataObj.Order_Guest_ViewModel.TotalHours-setingObj.DataObj.Order_Guest_ViewModel.CompleteHours}}
课时</span> 课时</span>
</div> </div>
</div> </div>
......
<style>
.OtherCourseNum {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 25px;
border: 1px solid #2961FE;
border-radius: 50%;
cursor: pointer;
color:#2961FE;
}
.OCourseTable {
width: 400px;
text-align: center;
}
.OCourseTable tr td {
height: 40px;
}
.OCourseTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
</style>
<template> <template>
<div class="page-body"> <div class="page-body MainPlan">
<div class="page-search row items-center"> <div class="col row wrap q-col-gutter-md">
<div class="col row wrap q-mr-lg q-col-gutter-md"> <div class="col-2">
<div class="col-3"> <el-select v-model="msg.TeacherId" style="width:100%;" placeholder="教师团队" size="small" @change="getPlanList()">
<q-input @change="getClassList" clearable standout="bg-primary text-white" v-model="msg.ClassName" <el-option v-for="item in TeacherList" :key="item.TeacherName" :label="item.TeacherName" :value="item.TId">
label="班级名称" @clear="getClassList" maxlength="20" /> </el-option>
</el-select>
</div> </div>
<div class="col-3"> <div class="col-2">
<q-select @input="getClassList" standout="bg-primary text-white" option-value="Id" option-label="Name" <el-select v-model="msg.ClassRoomId" style="width:100%;" placeholder="教室" size="small" @change="getTypeWay()">
v-model="msg.ClassStatus" :options="classStatusList" emit-value map-options label="班级状态" /> <el-option v-for="item in ClassRoomList" :key="item.RoomName" :label="item.RoomName" :value="item.RoomId">
</el-option>
</el-select>
</div> </div>
<div class="col-3"> <div class="col-2">
<q-input @change="getClassList" clearable standout="bg-primary text-white" v-model="msg.CourseName" <el-date-picker v-model="msg.StartTime" type="date" value-format="yyyy-MM-dd" placeholder="开始日期" size="small"
label="学习课程" @clear="getClassList" maxlength="20" /> style="width:100%;" @change="getTypeWay()" clear-icon="iconfont icon-guanbi" :picker-options="picker">
</el-date-picker>
</div> </div>
<div class="col-3"> <div class="col-2">
<q-select @input="getClassList" standout="bg-primary text-white" option-value="SId" option-label="SName" <el-date-picker v-model="msg.EndTime" type="date" value-format="yyyy-MM-dd" placeholder="结束日期" size="small"
v-model="msg.School_Id" :options="schoolList" emit-value map-options label="关联校区" /> style="width:100%;" @change="getTypeWay()" clear-icon="iconfont icon-guanbi" :picker-options="pickerEnd">
</el-date-picker>
</div> </div>
<div class="col-2">
<el-select v-model="msg.ClassType" style="width:100%;" placeholder="类型" size="small" @change="getTypeWay()">
<el-option :key="0" label="全部" :value="0">
</el-option>
<el-option :key="1" label="正常" :value="1">
</el-option>
<el-option :key="2" label="试听课" :value="2">
</el-option>
</el-select>
</div> </div>
</div> <div class="col-2">
<div class="page-content"> <q-btn color="accent" size="sm" class="q-mr-md" style="margin-top:2px;" @click="exchangeType"
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat :label="typeName" />
class="sticky-column-table sticky-right-column-table" separator="none" :data="data" :columns="columns" <q-btn color="negative" size="sm" label="调课申请" @click="openForm"></q-btn>
row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">班级信息</div>
<q-space />
</template>
<template v-slot:body-cell-ClassName="props">
<q-td auto-width :props="props">
<div style="display: flex;align-items: center;">
<q-avatar size="md" style="background:#d4dfff;color:#2961FE;font-weight:bold;" v-if="props.row.ClassName">
{{GetFirst(props.row.ClassName)}}</q-avatar>
<div >
<span style="color:#2961FE;margin-left:10px;cursor:pointer;" @click="getClassInfo(props.row)"
title="点击查看详情">{{props.row.ClassName}}</span>
<div style="margin-left: 10px;">{{props.row.ClassNo}}</div>
</div> </div>
</div> </div>
</q-td> <classmateForm :dataList="dataList" v-if="commonType==1"></classmateForm>
</template> <change-class-form v-if="persistent" @close="closeSaveForm" @success="refreshPage"></change-class-form>
<template v-slot:body-cell-OtherCourseName="props"> <teachTable v-if="commonType==2" :tableData="tableData" :PageCount="PageCount" :setMsg="tabMsg" :showCZ="false"
<q-td auto-width :props="props"> @getChange="getChange"></teachTable>
<template v-if="props.row.OtherCourseList">
<template v-if="props.row.OtherCourseList.length==1">
{{props.row.OtherCourseList[0].CourseName}}{{props.row.OtherCourseList[0].ClassHours}}课时】
</template>
<template v-if="props.row.OtherCourseList.length>1">
{{props.row.OtherCourseList[0].CourseName}}
<span class="OtherCourseNum">
{{props.row.OtherCourseList.length}}
<q-popup-proxy>
<q-banner>
<table class="OCourseTable" style="border-collapse:collapse;">
<tr>
<th>课程名称</th>
<th>课时数</th>
</tr>
<tr v-for="(sItem,sIndex) in props.row.OtherCourseList" style="border-bottom:1px dashed #d1d1d1;">
<td>{{sItem.CourseName}}</td>
<td>{{sItem.ClassHours}}</td>
</tr>
</table>
</q-banner>
</q-popup-proxy>
</span>
</template>
<template v-if="props.row.OtherCourseList.length==0">
</template>
</template>
</q-td>
</template>
<template v-slot:body-cell-TeacherName="props">
<q-td auto-width :props="props">
<span style="color:#3FC4FF;">{{props.row.TeacherName}}</span>
</q-td>
</template>
<template v-slot:body-cell-CourseId="props">
<q-td auto-width :props="props">
<span style="color:blue;cursor:pointer;" @click="goChapter(props.row.CouseId)">详情</span>
</q-td>
</template>
<template v-slot:body-cell-CompleteProgress="props">
<q-td auto-width :props="props">
{{props.row.UsePlanNum}}/{{props.row.TotalPlanNum}}
</q-td>
</template>
<!--班级状态-->
<template v-slot:body-cell-ClassStatusStr="props">
<q-td>
<span>{{props.row.ClassStatusStr}}</span>&nbsp;
<i class="iconfont icon-edit" @click.stop="getClassItem(props.row)" title="点击修改班级状态">
<q-popup-proxy>
<q-banner v-if="isShowEdit">
<div class="calenderDialog">
<div style="margin:10px 0 15px 0;">设置班级状态</div>
<q-select standout="bg-primary text-white" option-value="Id" option-label="Name"
v-model="statusMsg.ClassStatus" :options="classStatusList" emit-value map-options label="班级状态" />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" @click="isShowEdit=false"
style="font-weight:400 !important" />
<q-btn label="确认" color="accent q-px-md" style="font-weight:400 !important"
@click="setClassStatus()" />
</q-card-actions>
</div>
</q-banner>
</q-popup-proxy>
</i>
</q-td>
</template>
<template v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount"
:input="true" @input="changePage" />
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left:10px;">
<q-list>
<q-item clickable v-close-popup @click="gotoOrder(props.row)">
<q-item-section>
<q-item-label>订单中心</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="goPayment(props.row)">
<q-item-section>
<q-item-label>收支明细</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="showOtherCourse(props.row)" style="display:none;">
<q-item-section>
<q-item-label>关联其他课程</q-item-label>
</q-item-section>
</q-item>
<q-item clickable v-close-popup @click="gomonthLessonCost(props.row)">
<q-item-section>
<q-item-label>月度课耗</q-item-label>
</q-item-section>
</q-item>
</q-list>
</q-btn-dropdown>
</q-td>
</template>
</q-table>
<class-form v-if="isShowClassForm" :save-obj="classObjOption" @close="closeClassSaveForm" @success="refreshPage">
</class-form>
<classinfo-form v-if="isShowClassInfo" :seting-obj="classObjOption" :isShowEditBtn="1" @close="closeClassSaveForm"
@success="refreshPage">
</classinfo-form>
<othercourseForm v-if="IsShowOtherCourse" :seting-obj="classObjOption" @close="closeClassSaveForm"
@success="refreshPage">
</othercourseForm>
</div>
</div> </div>
</template> </template>
<script> <script>
import { import {
queryClassStatusList, getTeacherDropDownList,
saveClassStatus, //修改班级状态 queryClassRoomList
} from '../../api/course/class'; } from '../../api/school/index'
import { import {
GetClassPageList GetClassPlanStatistical,
GetClassPlanStatisticalPage
} from '../../api/teacher/index'; } from '../../api/teacher/index';
import classmateForm from '../../components/course/classmate-form';
//获取校区列表 import teachTable from '../teacher/components/teachTable';
import { import changeClassForm from '../../components/teacher/changeClassForm.vue'
getSchoolDropdown,
deleteClass
} from '../../api/school/index';
import classForm from '../../components/course/class-form';
import classinfoForm from '../../components/course/classinfo-form';
import othercourseForm from '../../components/course/othercourse-form';
export default { export default {
meta: { meta: {
title: "班级管理" title: "我的课表"
}, },
components: { components: {
classForm, classmateForm,
classinfoForm, teachTable,
othercourseForm changeClassForm
}, },
data() { data() {
return { return {
columns: [{ persistent: false,
name: 'ClassName', TeacherList: [], //教师团队
label: '班级名称', ClassRoomList: [], //
field: 'ClassName', StartTime: "",
align: 'left' EndTime: '',
}, TeacherId: 0,
{ ClassRoomId: 0,
name: 'SchoolName', dataList: {},
label: '校区', activeNames: [1],
field: 'SchoolName',
align: 'left',
},
{
name: 'CourseName',
label: '课程',
field: 'CourseName',
align: 'left'
},
{
name: 'OtherCourseName',
label: '关联其他课程',
field: 'OtherCourseName',
align: 'left'
},
{
name: 'CourseId',
label: '课程大纲',
field: 'CourseId',
align: 'left'
},
{
name: 'TeacherName',
label: '带班老师',
field: 'TeacherName',
align: 'left'
},
{
name: 'OpenTime',
label: '开班时间',
field: 'OpenTime',
align: 'left'
},
{
name: 'FinishTimeStr',
label: '预计结束时间',
field: 'FinishTimeStr',
align: 'left'
},
{
name: 'CompleteProgress',
label: '课程进度',
field: 'CompleteProgress',
align: 'left'
},
{
name: 'ClassStatusStr',
label: '状态',
align: 'left',
field: 'ClassStatusStr'
},
{
name: 'optioned',
label: '操作',
field: 'CourseId'
}
],
data: [],
loading: false,
msg: { msg: {
pageIndex: 1, StartTime: "",
pageSize: 12, EndTime: '',
TeacherId: 0,
ClassRoomId: 0,
ClassType: 0,
},
commonType: 1, //1日历模式 2列表模式
typeName: '列表模式',
tabMsg: {
PageIndex: 1,
PageSize: 12,
rowsPerPage: 12, rowsPerPage: 12,
ClassName: '', //班级名称 StartTime: '',
ClassStatus: 0, //班级状态 EndTime: '',
TeacherName: '', //带班老师 TeacherId: 0,
Teacher_Id:0, ClassRoomId: 0,
CourseName: '', //学习课程 ClassType: 0
School_Id: -1, //关联校区 },
}, tableData: [], //表格数据
//班级状态 PageCount: 0,
classStatusList: [], picker:{
//关联校区列表 disabledDate:(time)=>{
schoolList: [], let endTime=this.msg.EndTime
pageCount: 0, if(endTime){
classObjOption: null, return Date.now() - 8.64e7>time.getTime()>=new Date(endTime).getTime()- 8.64e7
isShowEdit: false, }else{
statusMsg: { return time.getTime()< Date.now() - 8.64e7
ClassId: 0, }
ClassStatus: 0
}
}, },
isShowClassForm: false, //是否显示新增修改弹窗 pickerEnd:{
isShowClassInfo: false, //是否显示课程信息 disabledDate:(time)=>{
IsShowOtherCourse: false, //是否显示其他课程 let startTime=this.msg.StartTime
if(startTime){
return time.getTime()<=new Date(startTime).getTime()- 8.64e7
}else{
return time.getTime()< Date.now() - 8.64e7
}
} }
}
};
}, },
created() { created() {
if (this.$route.query && this.$route.query.ClassName) { if (this.$route.query && this.$route.query.ClassType) {
this.msg.ClassName = decodeURI(this.$route.query.ClassName) this.msg.ClassType = this.$route.query.ClassType;
} }
let userInfo = this.getLocalStorage(); let date = new Date();
this.msg.Teacher_Id = userInfo.AccountId; let today =date.getFullYear()+'-'+ (date.getMonth()<9?'0'+(date.getMonth()+1):date.getMonth()+1)+'-'+ (date.getDate()<10?'0'+date.getDate()<10:date.getDate())
this.getClassStatus(); console.log(115,today)
this.getSchool(); this.msg.StartTime=today
this.tabMsg.StartTime=today
// let userinfo = this.getLocalStorage();
// this.msg.TeacherId = userinfo.AccountId;
// this.tabMsg.TeacherId = userinfo.AccountId;
this.getClassRoomList();
}, },
mounted() { mounted() {
this.getClassList(); this.GetTeacherList();
this.getPlanList();
}, },
methods: { methods: {
//删除班级 refreshPage() {
removeClass(item, status) { this.getPlanList();
let delMsg = {
ClassId: item.ClassId,
Status: status
};
var message = "是否要删除该班级?";
if (status == 0) {
message = "是否要恢复该班级?";
}
this.$q.dialog({
title: '提示信息',
message: message,
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
deleteClass(delMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
this.getClassList();
} else {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
}
})
}).onCancel(() => {
});
}, },
//当前点击的班级 openForm() {
getClassItem(item) { this.persistent = true
this.isShowEdit = true;
var Obj = JSON.parse(JSON.stringify(item));
this.statusMsg.ClassStatus = Obj.ClassStatus;
this.statusMsg.ClassId = Obj.ClassId;
}, },
//更新班级状态 closeSaveForm() {
setClassStatus() { this.persistent = false
saveClassStatus(this.statusMsg).then(res => {
this.isShowEdit = false;
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '设置成功!',
position: 'top'
})
this.getClassList();
} else {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
}
});
},
gotoOrder(item) {
var tempStr = '/course/classorder?ClassId=' + item.ClassId + '&isFromMyclass=1';
this.$router.push({
path: tempStr
});
}, },
//跳转到收支明细 // 获取校区教室导航列表
goPayment(item) { getPlanList() {
this.$router.push({ GetClassPlanStatistical(this.msg).then(res => {
path: '/course/paymentDetail', if (res.Code == 1) {
query: { this.dataList = res.Data;
ClassId: item.ClassId,
School_Id: item.School_Id,
ClassName: encodeURI(item.ClassName) ,
isFromMyClass : 1,
blank: 'y'
} }
}).catch(() => {
}) })
}, },
//获取校区列表 //获取教师下拉
getSchool() { GetTeacherList() {
getSchoolDropdown({}).then(res => { getTeacherDropDownList({}).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
var tempArray = res.Data; this.TeacherList = res.Data;
if (!tempArray) { var obj = {
tempArray = []; TeacherName: '请选择',
TId: 0
} }
tempArray.unshift({ this.TeacherList.unshift(obj);
SId: -1,
SName: "不限"
})
this.schoolList = tempArray;
} }
}) })
}, },
//获取班级状态列表 //获取教室下拉
getClassStatus() { getClassRoomList() {
queryClassStatusList({}).then(res => { queryClassRoomList({}).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.classStatusList = res.Data; this.ClassRoomList = res.Data;
var obj = {
RoomName: '请选择',
RoomId: 0
}
this.ClassRoomList.unshift(obj);
} }
}).catch(() => {})
},
//翻页
changePage(val) {
this.msg.pageIndex = val;
this.getClassList()
},
//获取菜单分页列表
getClassList() {
this.loading = true;
GetClassPageList(this.msg).then(res => {
this.loading = false;
this.data = res.Data.PageData;
this.pageCount = res.Data.PageCount;
}).catch(() => {
this.loading = false
}) })
}, },
//刷新页面 exchangeType() {
refreshPage() { if (this.commonType == 1) {
this.isShowClassForm = false; this.commonType = 2
this.getClassList(); this.typeName = '日历模式'
}, this.getTableList()
//新增修改菜单
EditCourse(obj) {
if (obj) {
this.classObjOption = obj
} else { } else {
this.classObjOption = null this.commonType = 1;
} this.typeName = '列表模式'
this.isShowClassForm = true this.getPlanList()
},
//关闭弹窗
closeClassSaveForm() {
//关闭新增修改弹窗
this.isShowClassForm = false;
//关闭班级信息弹窗
this.isShowClassInfo = false;
//关闭关联其他课程弹窗
this.IsShowOtherCourse = false;
},
GetFirst(val) {
if (val) {
return val.substr(0, 1);
} }
}, },
//获取进度条 getTableList() {
getProgress(num, total) { this.tabMsg.StartTime = this.msg.StartTime;
if (num == 0 || total == 0) { this.tabMsg.EndTime = this.msg.EndTime;
return 0; this.tabMsg.ClassRoomId = this.msg.ClassRoomId;
this.tabMsg.ClassType = this.msg.ClassType;
GetClassPlanStatisticalPage(this.tabMsg).then(res => {
if (res.Code == 1) {
this.tableData = res.Data.PageData;
this.PageCount = res.Data.PageCount;
} }
return (Math.round(num / total * 100) / 100.00); })
},
//显示关联课程
showOtherCourse(item) {
this.IsShowOtherCourse = true;
this.classObjOption = item;
},
//点击班级名称
getClassInfo(obj) {
this.classObjOption = null;
this.isShowClassInfo = false;
this.classObjOption = obj;
this.isShowClassInfo = true;
}, },
gomonthLessonCost(row){ getChange(val) {
let ClassName = encodeURI(row.ClassName) this.tabMsg.PageIndex = val;
this.OpenNewUrl('teachMonthLessonCost' , { this.getTableList()
ClassId: row.ClassId,
ClassName: ClassName,
});
}, },
//跳转到课程大纲 getTypeWay() {
goChapter(CouseId){ if (this.commonType == 2) {
this.OpenNewUrl('/course/chapter' , { this.getTableList()
CourseId: CouseId } else {
}); this.getPlanList()
} }
} }
} }
};
</script> </script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div style="padding:20px 0"> <div style="padding:20px 0">
<div class="page-content"> <div class="page-content">
<q-table :pagination="setMsg" no-data-label="暂无相关数据" flat class="sticky-column-table sticky-right-column-table" <q-table :pagination="setMsg" no-data-label="暂无相关数据" flat class="sticky-column-table sticky-right-column-table"
separator="none" :data="tableData" :columns="columns" row-key="name"> separator="none" :data="tableData" :columns="showCZ?columns:columns2" row-key="name">
<template v-slot:body-cell-GuestList="props"> <template v-slot:body-cell-GuestList="props">
<q-td auto-width :props="props"> <q-td auto-width :props="props">
<span v-for="(item,index) in props.row.GuestList" style="margin-right:5px;"> <span v-for="(item,index) in props.row.GuestList" style="margin-right:5px;">
...@@ -48,6 +48,10 @@ ...@@ -48,6 +48,10 @@
PageCount: { PageCount: {
type: Number, type: Number,
default: null default: null
},
showCZ:{//是否显示操作栏
Type:Boolean,
default:true
} }
}, },
meta: { meta: {
...@@ -103,6 +107,47 @@ ...@@ -103,6 +107,47 @@
label: '操作', label: '操作',
field: 'Id' field: 'Id'
} }
],
columns2: [{
name: 'ClassDate',
label: '日期',
field: 'ClassDate',
align: 'left'
}, {
name: 'StartTime',
label: '上课时间',
field: 'StartTime',
align: 'left'
}, {
name: 'ClassName',
label: '班级',
field: 'ClassName',
align: 'left'
},
{
name: 'CourseName',
label: '课程名称',
field: 'CourseName',
align: 'left',
},
{
name: 'GuestList',
label: '学员名称',
field: 'GuestList',
align: 'left'
},
{
name: 'TeacherName',
label: '教师',
field: 'TeacherName',
align: 'left'
},
{
name: 'TotalPlanNum',
label: '课程进度',
field: 'TotalPlanNum',
align: 'left'
},
], ],
tabMsg: { tabMsg: {
PageIndex: 1, PageIndex: 1,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment