Commit f19f421a authored by 黄奎's avatar 黄奎

1111

parent f8431dd1
...@@ -208,4 +208,15 @@ export function queryPlanAppointmentDetail(data) { ...@@ -208,4 +208,15 @@ export function queryPlanAppointmentDetail(data) {
method: 'post', method: 'post',
data data
}); });
} }
\ No newline at end of file
/**
* 获取学员课消列表
*/
export function queryStuLearnChapterStatic(data) {
return request({
url: '/Scroll/GetStuLearnChapterStatic',
method: 'post',
data
});
}
...@@ -2,81 +2,53 @@ ...@@ -2,81 +2,53 @@
<div class="page-body MainPlan xg"> <div class="page-body MainPlan xg">
<div class="col row wrap q-col-gutter-md"> <div class="col row wrap q-col-gutter-md">
<div class="col-2 flex"> <div class="col-2 flex">
<el-select v-model="msg.TeacherId" style="width: 100%" placeholder="教师" size="small" @change="getPlanList()"> <el-select v-model="msg.TeacherAccountId" style="width: 100%" placeholder="教师" size="small" @change="refreshPage()">
<el-option v-for="item in TeacherList" :key="item.TeacherName" :label="item.TeacherName" :value="item.TId"> <el-option v-for="item in TeacherList" :key="item.Id" :label="item.EmployeeName" :value="item.Id" clearable>
</el-option> </el-option>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px"> <div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
教师: 教师:
</div> </div>
</el-select> </el-select>
</div> </div>
<div class="col-2"> <div class="col-2 flex">
<el-select v-model="msg.ClassRoomId" style="width: 100%" placeholder="教室" size="small" @change="getTypeWay()"> <el-select v-model="msg.CourseId" style="width: 100%" placeholder="课程" size="small" @change="refreshPage()"
<el-option v-for="item in ClassRoomList" :key="item.RoomName" :label="item.RoomName" :value="item.RoomId"> clearable>
<el-option v-for="item in CourseList" :key="item.CourseId" :label="item.CourseName" :value="item.CourseId">
</el-option> </el-option>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px"> <div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
教室: 课程:
</div> </div>
</el-select> </el-select>
</div> </div>
<div class="col-2" style="width: 13%"> <div class="col-2 flex">
<el-date-picker v-model="msg.StartTime" type="date" value-format="yyyy-MM-dd" placeholder="开始日期" size="small" <el-select v-model="msg.CourseRate" style="width: 100%" placeholder="等级" size="small" @change="refreshPage()"
style="width: 100%" @change="getTypeWay()" :picker-options="picker" :clearable="false"> clearable>
</el-date-picker> <el-option v-for="item in CourseRateList" :key="item.Id" :label="item.Name" :value="item.Id">
</div> </el-option>
<div class="col-2" style="width: 13%">
<el-date-picker v-model="msg.EndTime" type="date" value-format="yyyy-MM-dd" placeholder="结束日期" size="small"
style="width: 100%" @change="getTypeWay()" clear-icon="iconfont icon-guanbi" :picker-options="pickerEnd">
</el-date-picker>
</div>
<div class="col-1" style="width: 10%">
<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-option :key="2" label="预约课" :value="3"> </el-option>
<div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px"> <div slot="prefix" class="full-height flex items-center" style="color: #000; padding-right: 10px">
类型: 等级:
</div>
</el-select>
</div>
<div class="col-2 yuyuezhuangtai" style="width: 10%" v-if="msg.ClassType==3">
<el-select v-model="msg.AppointState" style="width: 100%;" placeholder="预约状态" size="small"
@change="getTypeWay()">
<el-option :key="0" label="不限" :value="0"> </el-option>
<el-option :key="0" label="待确认" :value="1"> </el-option>
<el-option :key="1" label="已确认" :value="2"> </el-option>
<div slot="prefix" class="full-height flex items-center"
style="color: #000;margin-right:61px; white-space:nowrap;">
预约状态:
</div> </div>
</el-select> </el-select>
</div> </div>
<div class="col-3" style="width: 30%">
<q-btn color="accent" size="sm" class="q-mr-md" style="margin-top: 2px" @click="exchangeType"
:label="typeName" />
<q-btn color="accent" size="sm" class="q-mr-md" label="下载计划" @click="downLoadPlan()" />
<q-btn color="negative" size="sm" label="调课申请" @click="openForm"></q-btn>
</div>
</div> </div>
<cancelClassList></cancelClassList> <cancelClassList :dataList="tableData"></cancelClassList>
</div> </div>
</template> </template>
<script> <script>
import { import {
getTeacherDropDownList, queryStuLearnChapterStatic,
queryClassRoomList, } from "../../api/stuMan/index";
} from "../../api/school/index";
import { import {
GetClassPlanStatistical, queryEmployee
GetClassPlanStatisticalPage, } from "../../api/users/user";
} from "../../api/teacher/index";
import { import {
EduDownLoad queryCourseDropdownList,
} from "../../api/common/common"; getCourseRate
import cancelClassList from "./components/cancelClassList"; } from "../../api/course/index";
import cancelClassList from "./components/cancelClassList";
export default { export default {
meta: { meta: {
title: "学员消课统计", title: "学员消课统计",
...@@ -87,63 +59,19 @@ ...@@ -87,63 +59,19 @@
data() { data() {
return { return {
persistent: false, persistent: false,
TeacherList: [], //教师团队
ClassRoomList: [], //
StartTime: "",
EndTime: "",
TeacherId: 0,
ClassRoomId: 0,
dataList: {},
activeNames: [1],
msg: { msg: {
StartTime: "", TeacherAccountId: "", //老师编号
EndTime: "", CourseRate: "", //课程等级
TeacherId: 0, CourseId: "", //课程编号
ClassRoomId: 0,
ClassType: 0,
AppointState: 0,
},
commonType: 1, //1日历模式 2列表模式
typeName: "列表模式",
tabMsg: {
PageIndex: 1,
PageSize: 12,
rowsPerPage: 12,
StartTime: "",
EndTime: "",
TeacherId: 0,
ClassRoomId: 0,
ClassType: 0,
}, },
tableData: [], //表格数据 tableData: [], //表格数据
PageCount: 0,
picker: {
disabledDate: (time) => {
// let endTime=this.msg.EndTime
// if(endTime){
// return Date.now() - 8.64e7>time.getTime()>=new Date(endTime).getTime()- 8.64e7
// }else{
// return time.getTime() < Date.now() - 8.64e7
// }
},
},
pickerEnd: {
disabledDate: (time) => {
let startTime = this.msg.StartTime;
if (startTime) {
return time.getTime() <= new Date(startTime).getTime() - 8.64e7;
} else {
return time.getTime() < Date.now() - 8.64e7;
}
},
},
loading: false, loading: false,
TeacherList: [], //教师团队
CourseList: [], //课程列表
CourseRateList: [], //课程等级
}; };
}, },
created() { created() {
if (this.$route.query && this.$route.query.ClassType) {
this.msg.ClassType = this.$route.query.ClassType;
}
let date = new Date(); let date = new Date();
let today = let today =
date.getFullYear() + date.getFullYear() +
...@@ -153,100 +81,54 @@ ...@@ -153,100 +81,54 @@
date.getMonth() + 1) + date.getMonth() + 1) +
"-" + "-" +
(date.getDate() < 10 ? "0" + date.getDate() : date.getDate()); (date.getDate() < 10 ? "0" + date.getDate() : date.getDate());
this.msg.StartTime = today;
this.tabMsg.StartTime = today; this.GetTeacherList();
this.getClassRoomList(); this.getCourseList();
this.queryCourseRate();
}, },
mounted() { mounted() {
this.exchangeType()
this.GetTeacherList();
this.getPlanList(); this.getPlanList();
}, },
methods: { methods: {
downLoadPlan() {
//导出
var newMsg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad("/Class/DownLoadClassPlan", newMsg, "老师上课计划.xls");
},
refreshPage() { refreshPage() {
this.getPlanList(); this.getPlanList();
}, },
openForm() {
this.persistent = true;
},
closeSaveForm() {
this.persistent = false;
},
// 获取校区教室导航列表 // 获取校区教室导航列表
getPlanList() { getPlanList() {
GetClassPlanStatistical(this.msg).then((res) => { queryStuLearnChapterStatic(this.msg).then((res) => {
if (res.Code == 1) { if (res.Code == 1) {
this.dataList = res.Data; this.tableData = res.Data;
} }
}); });
}, },
//获取教师下拉 //获取教师下拉
GetTeacherList() { GetTeacherList() {
getTeacherDropDownList({}).then((res) => { var qMsg = {
AccountTypeStr: '2',
IsLeave: 1,
};
queryEmployee(qMsg).then((res) => {
if (res.Code == 1) { if (res.Code == 1) {
this.TeacherList = res.Data; this.TeacherList = res.Data;
var obj = {
TeacherName: "请选择",
TId: 0,
};
this.TeacherList.unshift(obj);
} }
}); });
}, },
//获取教室下拉 //获取课程列表
getClassRoomList() { getCourseList() {
queryClassRoomList({}).then((res) => { queryCourseDropdownList({}).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.ClassRoomList = res.Data; this.CourseList = res.Data;
var obj = {
RoomName: "请选择",
RoomId: 0,
};
this.ClassRoomList.unshift(obj);
} }
}); });
}, },
exchangeType() { //获取课程等级
if (this.commonType == 1) { queryCourseRate() {
this.commonType = 2; getCourseRate({}).then(res => {
this.typeName = "日历模式";
this.getTableList();
} else {
this.commonType = 1;
this.typeName = "列表模式";
this.getPlanList();
}
},
getTableList() {
this.tabMsg.StartTime = this.msg.StartTime;
this.tabMsg.EndTime = this.msg.EndTime;
this.tabMsg.ClassRoomId = this.msg.ClassRoomId;
this.tabMsg.ClassType = this.msg.ClassType;
this.loading = true;
GetClassPlanStatisticalPage(this.tabMsg).then((res) => {
this.loading = false;
if (res.Code == 1) { if (res.Code == 1) {
this.tableData = res.Data.PageData; this.CourseRateList = res.Data;
this.PageCount = res.Data.PageCount;
} }
}); })
}, }
getChange(val) {
this.tabMsg.PageIndex = val;
this.getTableList();
},
getTypeWay() {
if (this.commonType == 2) {
this.getTableList();
} else {
this.getPlanList();
}
},
}, },
}; };
</script> </script>
......
<template> <template>
<div class="page-cancelClassList-body"> <div class="page-cancelClassList-body">
<div class="fit row no-wrap items-start content-start"> <div class="fit row no-wrap items-start content-start">
<div class="cancelClassList-left col-xl-1 col-lg-1 col-md-2 col-sm-3 col-xs-3"> <div class="cancelClassList-left col-xl-1 col-lg-1 col-md-2 col-sm-3 col-xs-3">
<div v-for="item in titleList" class="left-text"> <div v-for="item in titleList" class="left-text">
{{item.name}} {{item.name}}
</div> </div>
<div v-for="item in numList" class="left-text"> <div v-for="item in numList" class="left-text">
{{item.name}} {{item.name}}
</div>
</div> </div>
<div class="cancelClassList-right col-xl-21 col-lg-21 col-md-20 col-sm-19 col-xs-19"> </div>
<div class="cancelClassList-right-box Xscroll fit row no-wrap" <div class="cancelClassList-right col-xl-21 col-lg-21 col-md-20 col-sm-19 col-xs-19">
:class="{}"> <div class="cancelClassList-right-box Xscroll fit row no-wrap" :class="{}">
<div class="right-box" v-for="item in 25"> <div class="right-box" v-for="item in 25">
<div class="content-title courseName activeOne">名称</div> <div class="content-title courseName activeOne">名称</div>
<div class="content-title teacherName">老师名字</div> <div class="content-title teacherName">老师名字</div>
<div class="content-title traineesName activeOne">学员名字</div> <div class="content-title traineesName activeOne">学员名字</div>
<div class="right-content" v-for="item in 3"> <div class="right-content" v-for="item in 3">
<!-- <div class="content-single activeOne">语音1语音1语音1语音1</div> --> <!-- <div class="content-single activeOne">语音1语音1语音1语音1</div> -->
<div class="content-multiple fit row"> <div class="content-multiple fit row">
<div class="content-tetx activeOne">理解</div> <div class="content-tetx activeOne">理解</div>
<div class="content-tetx activeTwo">活动2</div> <div class="content-tetx activeTwo">活动2</div>
</div> </div>
<div class="content-show"> <div class="content-show">
<div></div> <div></div>
语音1语音1语音1语音1 语音1语音1语音1语音1
</div> </div>
</div>
</div>
</div> </div>
</div>
</div> </div>
</div> </div>
</div> </div>
</template> </div>
</template>
<script>
export default { <script>
props: { export default {
setMsg: { props: {
type: Object,
default: null, dataList: {
}, type: Array,
tableData: { default: null,
type: Array,
default: null,
},
PageCount: {
type: Number,
default: null,
},
showCZ: {
//是否显示操作栏
Type: Boolean,
default: true,
},
loading:{
type:Boolean,
default:false,
}
},
meta: {
title: "学员消课统计",
},
components: {
},
data() {
return {
titleList:[
{name:'课程名称'},
{name:'课程老师'},
{name:'学员姓名'},
],
numList:[
{name:'1'},
{name:'2'},
{name:'3'}
]
};
},
created() {
},
mounted() {
},
methods: {
}, },
};
</script> loading: {
<style lang="scss" scoped> type: Boolean,
.page-cancelClassList-body{ default: false,
/* border: 1px solid #E5E5E5; */ }
margin-top: 20px; },
} meta: {
.cancelClassList-left{ title: "学员消课统计",
background: #E5E5E5; },
} components: {
.left-text{
width: 100%; },
padding: 0 20px; data() {
height: 40px; return {
line-height: 40px; titleList: [{
border-bottom: 1px solid #DDDEE0; name: '课程名称'
text-align: center; },
font-size: 14px; {
} name: '课程老师'
.left-text:first-child,.left-text:nth-child(2), },
.left-text:nth-child(3),.left-text:nth-child(4){ {
font-weight: bold; name: '学员姓名'
} },
.left-text:last-child{ ],
border-bottom: 0; numList: [{
} name: '1'
.cancelClassList-right{ },
overflow: hidden; {
} name: '2'
.courseName{ },
background: #F8CBAD; {
} name: '3'
.courseName.activeOne{ }
background: #FFD964; ]
} };
.courseName.activeTwo{ },
background: #F4B183; created() {
}
},
.teacherName{ mounted() {
background: #C4C4F5;
} },
methods: {
},
};
</script>
<style lang="scss" scoped>
.page-cancelClassList-body {
.traineesName{ margin-top: 20px;
background: #CEF5A5; }
}
.traineesName.activeOne{ .cancelClassList-left {
background: #F5AFAF; background: #E5E5E5;
} }
.cancelClassList-right-box{
.left-text {
} width: 100%;
.Xscroll{ padding: 0 20px;
overflow-x: scroll; height: 40px;
} line-height: 40px;
.right-box{ border-bottom: 1px solid #DDDEE0;
display: flex; text-align: center;
flex-direction: column; font-size: 14px;
font-size: 13px; }
}
.content-title:first-child{ .left-text:first-child,
border-top: 1px solid #DDDEE0; .left-text:nth-child(2),
} .left-text:nth-child(3),
.content-title{ .left-text:nth-child(4) {
width: 100%; font-weight: bold;
padding: 0 5px; }
height: 40px;
line-height: 40px; .left-text:last-child {
overflow: hidden; border-bottom: 0;
text-align: center; }
border-bottom: 1px solid #DDDEE0;
border-right: 1px solid #DDDEE0; .cancelClassList-right {
} overflow: hidden;
.right-content{ }
/* display: flex;
.courseName {
background: #F8CBAD;
}
.courseName.activeOne {
background: #FFD964;
}
.courseName.activeTwo {
background: #F4B183;
}
.teacherName {
background: #C4C4F5;
}
.traineesName {
background: #CEF5A5;
}
.traineesName.activeOne {
background: #F5AFAF;
}
.cancelClassList-right-box {}
.Xscroll {
overflow-x: scroll;
}
.right-box {
display: flex;
flex-direction: column;
font-size: 13px;
}
.content-title:first-child {
border-top: 1px solid #DDDEE0;
}
.content-title {
width: 100%;
padding: 0 5px;
height: 40px;
line-height: 40px;
overflow: hidden;
text-align: center;
border-bottom: 1px solid #DDDEE0;
border-right: 1px solid #DDDEE0;
}
.right-content {
/* display: flex;
flex-direction: column; */ flex-direction: column; */
width: 90px; width: 90px;
height: 40px; height: 40px;
border-bottom: 1px solid #DDDEE0; border-bottom: 1px solid #DDDEE0;
border-right: 1px solid #DDDEE0; border-right: 1px solid #DDDEE0;
position: relative; position: relative;
cursor: pointer; cursor: pointer;
} }
.right-content:last-child{
border-bottom: 0; .right-content:last-child {
} border-bottom: 0;
.content-single,.content-tetx{ }
flex: 1;
flex-shrink: 0; .content-single,
text-align: center; .content-tetx {
word-break: break-all; flex: 1;
text-overflow: ellipsis; flex-shrink: 0;
display: -webkit-box; /** 对象作为伸缩盒子模型显示 **/ text-align: center;
-webkit-box-orient: vertical; /** 设置或检索伸缩盒对象的子元素的排列方式 **/ word-break: break-all;
-webkit-line-clamp: 2; /** 显示的行数 **/ text-overflow: ellipsis;
overflow: hidden; display: -webkit-box;
padding: 0 5px; /** 对象作为伸缩盒子模型显示 **/
display: flex; -webkit-box-orient: vertical;
align-items: center; /** 设置或检索伸缩盒对象的子元素的排列方式 **/
justify-content: center; -webkit-line-clamp: 2;
} /** 显示的行数 **/
.content-single.activeOne,.content-tetx.activeOne{ overflow: hidden;
background: #6FE053; padding: 0 5px;
} display: flex;
.content-tetx.activeTwo,.content-tetx.activeTwo{ align-items: center;
background: #FA716A; justify-content: center;
} }
.content-tetx.activeThree,.content-tetx.activeThree{
background: #BDD7EE; .content-single.activeOne,
} .content-tetx.activeOne {
.content-tetx{ background: #6FE053;
border-right: 1px solid #DDDEE0; }
}
.content-tetx:last-child{ .content-tetx.activeTwo,
border: 0; .content-tetx.activeTwo {
} background: #FA716A;
.content-multiple{ }
display: flex;
} .content-tetx.activeThree,
.content-show{ .content-tetx.activeThree {
position: absolute; background: #BDD7EE;
top: -60px; }
left: -50px;
background: #ffffff; .content-tetx {
border-radius: 10px; border-right: 1px solid #DDDEE0;
padding: 10px; }
display: none;
background: #fff; .content-tetx:last-child {
padding: 10px 19px; border: 0;
box-shadow: 5px 5px 20px 5px #ccc; }
}
.content-show div{ .content-multiple {
width: 0px; display: flex;
height: 0px; }
border: 8px solid transparent;
border-top-color: #ffffff; .content-show {
position: absolute; position: absolute;
bottom: -15px; top: -60px;
right: 20px; left: -50px;
} background: #ffffff;
.right-content:hover .content-show{ border-radius: 10px;
/* display: block; */ padding: 10px;
} display: none;
</style> background: #fff;
\ No newline at end of file padding: 10px 19px;
box-shadow: 5px 5px 20px 5px #ccc;
}
.content-show div {
width: 0px;
height: 0px;
border: 8px solid transparent;
border-top-color: #ffffff;
position: absolute;
bottom: -15px;
right: 20px;
}
.right-content:hover .content-show {
/* display: block; */
}
</style>
\ No newline at end of file
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