Commit aecb238c authored by liudong1993's avatar liudong1993
parents 3d581899 86ff8ab8
......@@ -25,7 +25,7 @@ export default {
</script>
<style>
@import url("//at.alicdn.com/t/font_2077629_leh9uxv84r.css");
@import url("//at.alicdn.com/t/font_2077629_9ty53q1g2bo.css");
@font-face {
font-family: "din";
src: url("./assets/font/DIN-Bold.otf") format("opentype");
......
......@@ -398,6 +398,19 @@ export function GetTeacherDay(data) {
})
}
/**
* 教师月度汇总
* @param {*} data
*/
export function GetTeacherMonthStatic(data) {
return request({
url: '/TeacherStatic/GetTeacherMonthStatic',
method: 'post',
data
})
}
/**
* 获取教师端每月统计
* @param {*} data
......@@ -458,6 +471,70 @@ export function queryAssessmentTypeList(data) {
})
}
/**
* 获取配置数据
* @param {*} data
*/
export function GetAssessmentType(data) {
return request({
url: '/TeacherAssessment/GetAssessmentType',
method: 'post',
data
})
}
/**
* 保存配置数据
* @param {*} data
*/
export function SetAssessmentType(data) {
return request({
url: '/TeacherAssessment/SetAssessmentType',
method: 'post',
data
})
}
/**
* 删除列表数据
* @param {*} data
*/
export function RemoveAssessmentType(data) {
return request({
url: '/TeacherAssessment/RemoveAssessmentType',
method: 'post',
data
})
}
/**
* 删除子类数据
* @param {*} data
*/
export function RemoveAssessmentSubtype(data) {
return request({
url: '/TeacherAssessment/RemoveAssessmentSubtype',
method: 'post',
data
})
}
/**
* 获取列表数据
* @param {*} data
*/
export function GetAssessmentTypeList(data) {
return request({
url: '/TeacherAssessment/GetAssessmentTypeList',
method: 'post',
data
})
}
<style scoped>
.wenjuan_Shuru {
position: relative;
}
.SurverDel {
position: absolute;
right: -5px;
top: -5px;
}
.childConfig {
border: 1px dashed #d1d1d1;
padding: 20px;
margin-bottom: 20px;
position: relative;
}
.SubChild {
position: absolute;
right: 0;
top: 0;
}
</style>
<template>
<q-dialog v-model="persistent" content-class="bg-grey-1" persistent transition-show="scale" transition-hide="scale">
<q-card style="width: 600px;max-width:600px;">
<q-card-section>
<div class="text-h6">{{addMsg.Id==0?'新增配置':'修改配置'}}</div>
</q-card-section>
<q-card-section class="q-pt-none scroll" style="max-height: 70vh">
<div class="row wrap">
<div class="col-12 q-pb-lg">
<q-input filled v-model="addMsg.TypeName" ref="TypeName" label="标题"></q-input>
</div>
<div class="q-pb-lg">
<q-btn size="10px" @click="addChild()" round color="primary" icon="iconfont icon-img_haha" />
</div>
</div>
<div v-for="(item,index) in addMsg.SubtypeList" class="row wrap childConfig">
<q-btn size="10px" @click="delChild(item,index)" class="SubChild" round color="red"
icon="iconfont icon-guanbi1" />
<div class="col-12 q-pr-lg q-pb-lg">
<q-input filled v-model="item.SubTypeName" ref="SubTypeName" label="标题"></q-input>
</div>
<div class="q-pb-lg">
<q-btn size="10px" @click="addSun(index)" round color="primary" icon="iconfont icon-img_haha" />
</div>
<div class="row wrap" style="position:relative;" v-for="(subItem,subIndex) in item.OptionList">
<div class="col-4 q-pr-lg q-pb-lg">
<q-input filled v-model="subItem.LevelTitle" dense ref="SubTypeName" label="标题"></q-input>
</div>
<div class="col-4 q-pr-lg q-pb-lg">
<q-input filled v-model="subItem.LevelDesc" dense ref="LevelDesc" label="描述"></q-input>
</div>
<div class="col-4 q-pr-lg q-pb-lg">
<q-input filled v-model="subItem.LevelScore" dense ref="LevelScore" label="分数"></q-input>
</div>
<q-btn size="5px" @click="delSun(index,subIndex)" class="SubChild" round color="red"
icon="iconfont icon-guanbi1" />
</div>
</div>
</q-card-section>
<q-separator />
<q-card-actions align="right" class="bg-white">
<q-btn label="取消" flat color="grey-10" style="font-weight:400 !important" @click="closeSaveForm" />
<q-btn label="立即提交" color="accent q-px-md" style="font-weight:400 !important" :loading="saveLoading"
@click="saveConfig" />
</q-card-actions>
</q-card>
</q-dialog>
</template>
<script>
import {
SetAssessmentType,
GetAssessmentType,
RemoveAssessmentSubtype
} from '../../api/teacher/index';
export default {
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
persistent: true,
addMsg: {
Id: 0,
TypeName: "基本素质",
SubtypeList: []
},
saveLoading: false,
}
},
mounted() {
this.initObj()
},
methods: {
//初始化表单
initObj() {
if (this.saveObj && this.saveObj.Id > 0) {
let obj = {
Id: this.saveObj.Id
}
GetAssessmentType(obj).then(res => {
if (res.Code == 1) {
this.addMsg = res.Data;
}
})
} else {
this.addMsg.Id = 0;
this.addMsg.TypeName = '';
this.addMsg.SubtypeList = [];
}
},
//关闭弹窗
closeSaveForm() {
this.$emit('close')
this.persistent = false
},
//新增子类
addChild() {
let obj = {
Id: 0,
SubTypeName: "",
OptionList: []
};
this.addMsg.SubtypeList.push(obj);
},
//新增孙类
addSun(index) {
let obj = {
LevelTitle: "",
LevelDesc: "",
LevelScore: ''
};
this.addMsg.SubtypeList[index].OptionList.push(obj);
},
//保存数据
saveConfig() {
this.saveLoading = true;
SetAssessmentType(this.addMsg).then(res => {
this.saveLoading = false;
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据保存成功!',
position: 'top'
})
this.$emit('success');
this.$emit('close');
}
})
},
//删除子类
delChild(obj, index) {
console.log(obj, 'obj');
if (obj.Id > 0) {
let msg = {
Id:obj.Id
}
RemoveAssessmentSubtype(msg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据删除成功!',
position: 'top'
})
this.addMsg.SubtypeList.splice(index, 1);
}
})
}
},
//删除孙类
delSun(index1, index2) {
this.addMsg.SubtypeList[index1].OptionList.splice(index2, 1);
}
}
}
</script>
<style>
</style>
<template>
<div class="page-body">
<div class="page-search row items-center">
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-column-table sticky-right-column-table" separator="none" :data="dataList" :columns="columns"
row-key="name">
<template v-slot:top>
<div class="col-2 q-table__title">类型配置</div>
<q-space />
<div class="page-option">
<q-btn color="accent" size="sm" class="q-mr-md" icon="add" label="新增" @click="goAssessTable()" />
</div>
</template>
<template v-slot:body="props">
<q-tr :props="props">
<template v-for="(col,cIndex) in props.cols">
<q-td v-if="col.name == 'TypeName'" :key="cIndex">{{ col.value }}</q-td>
<q-td v-else-if="col.name == 'SubtypeList'" :key="cIndex">
<div v-for="(item,sIndex) in col.value" :key="sIndex">
<div class="border-bottom">
{{item.SubTypeName}}
</div>
</div>
</q-td>
<q-td style="width:100px;" v-else-if="col.name == 'Id'" :key="cIndex">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="AddMsg(props.row)" />
<q-btn flat size="xs" icon="delete" color="negative" class="q-mr-xs" label="删除"
@click="delConsult(props.row.Id)" />
</q-td>
</template>
</q-tr>
</template>
<template v-slot:bottom></template>
</q-table>
</div>
<assess-form v-if="isShowAssess" :save-obj="objOption" @close="getClose()" @success="getRefresh"></assess-form>
</div>
</template>
<script>
import {
queryAssessmentTypeList,
RemoveAssessmentType
} from '../../api/teacher/index';
import assessForm from '../../components/teacher/assess-form'
export default {
meta: {
title: "教师考评配置"
},
components: {
assessForm
},
data() {
return {
loading: false,
msg: {
rowsPerPage: 1000,
},
columns: [{
name: "TypeName",
label: "类别",
field: "TypeName",
align: "left"
},
{
name: "SubtypeList",
label: "内容",
field: "SubtypeList",
align: "left"
},
{
name: 'Id',
label: '操作',
field: row => row.Id
}
],
dataList: [],
objOption: null,
isShowAssess: false
}
},
created() {
},
mounted() {
this.getAssessmentTypeList()
},
methods: {
getAssessmentTypeList() {
this.loading = true;
queryAssessmentTypeList(this.msg).then(res => {
this.loading = false;
console.log("res", res);
if (res.Code == 1) {
this.dataList = res.Data;
}
})
},
//新增修改
AddMsg(obj) {
if (obj) {
this.objOption = obj
} else {
this.objOption = null
}
this.isShowAssess = true;
},
getClose() {
this.isShowAssess = false;
},
getRefresh() {
this.getAssessmentTypeList();
},
//删除数据
delConsult(Id) {
let that = this;
this.$q.dialog({
title: "提示",
message: '是否删除该配置?',
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true
}
}).onOk(() => {
let msg = {
Id: Id
}
RemoveAssessmentType(msg).then(res => {
if (res.Code == 1) {
that.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据删除成功!',
position: 'top'
})
that.getAssessmentTypeList();
}
})
});
},
//跳转考核表
goAssessTable(){
this.OpenNewUrl('/teacher/jobEvaluation', {
});
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
<style>
<style scoped>
.jobTable {
width: 100%;
text-align: center;
}
.jobTable tr td {
height: 40px;
color: #000;
border: 1px solid #d1d1d1;
}
.jobTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
</style>
<template>
......@@ -8,7 +22,7 @@
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
<!-- <q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-column-table sticky-right-column-table" separator="none" :data="dataList" :columns="columns"
row-key="name">
<template v-slot:top>
......@@ -29,7 +43,7 @@
</div>
</div>
</q-td>
<q-td v-else-if="col.name == 'Id'" :key="cIndex">
<q-td style="width:100px;" v-else-if="col.name == 'Id'" :key="cIndex">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="AddMsg(props.row)" />
<q-btn flat size="xs" icon="delete" color="negative" class="q-mr-xs" label="删除"
......@@ -38,23 +52,52 @@
</template>
</q-tr>
</template>
<template v-slot:bottom></template>
</q-table>
</q-table> -->
<table class="jobTable" style="border-collapse:collapse;">
<tbody v-for="(item,index) in dataList" :key="index">
<tr>
<th width="150">类别</th>
<th width="150">内容</th>
<th v-for="(T,tindex) in item.SubtypeList[0].OptionList">
<div>{{T.LevelTitle}}</div>
<div>{{T.LevelScore}}</div>
</th>
<th width="200">操作</th>
</tr>
<tr>
<td :rowspan="item.SubtypeList.length+1">{{item.TypeName}}</td>
</tr>
<tr v-for="(sItem,sIndex) in item.SubtypeList">
<td>{{sItem.SubTypeName}}</td>
<td v-for="(cItem,cIndex) in sItem.OptionList" style="text-align:left;padding:10px;">
{{cItem.LevelDesc}}
</td>
<td v-if="sIndex==0" :rowspan="item.SubtypeList.length">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="AddMsg(item)" />
<q-btn flat size="xs" icon="delete" color="negative" class="q-mr-xs" label="删除"
@click="delConsult(item.Id)" />
</td>
</tr>
</tbody>
</table>
</div>
<assess-form v-if="isShowAssess" :save-obj="objOption" @close="getClose()" @success="getRefresh"></assess-form>
</div>
</template>
<script>
import {
queryAssessmentTypeList,
RemoveAssessmentType
} from '../../api/teacher/index';
import assessForm from '../../components/teacher/assess-form'
export default {
meta: {
title: "教师考评配置"
},
components: {
assessForm
},
data() {
return {
......@@ -81,6 +124,8 @@
}
],
dataList: [],
objOption: null,
isShowAssess: false
}
},
created() {
......@@ -99,10 +144,60 @@
this.dataList = res.Data;
}
})
},
//新增修改
AddMsg(obj) {
if (obj) {
this.objOption = obj
} else {
this.objOption = null
}
this.isShowAssess = true;
},
getClose() {
this.isShowAssess = false;
},
getRefresh() {
this.getAssessmentTypeList();
},
//删除数据
delConsult(Id) {
let that = this;
this.$q.dialog({
title: "提示",
message: '是否删除该配置?',
cancel: {
label: "取消",
flat: true
},
ok: {
label: "确认",
flat: true,
focus: true
}
}).onOk(() => {
let msg = {
Id: Id
}
RemoveAssessmentType(msg).then(res => {
if (res.Code == 1) {
that.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '数据删除成功!',
position: 'top'
})
that.getAssessmentTypeList();
}
})
});
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
</style>
......@@ -27,9 +27,14 @@
</q-field>
</div>
<div class="col-2">
<q-select filled dense stack-label @input="getList" option-value="TId" @filter="filterTeacherFn" use-input option-label="TeacherName" v-model="msg.TeacherId"
ref="Teacher_Id" :options="TeacherList" label="教师" clearable class="col-6 q-pr-lg q-pb-lg" emit-value
map-options />
<q-select filled dense stack-label @input="GetTeacherList(),getList()" option-value="Id"
option-label="Name" v-model="msg.DeptId" ref="Teacher_Id" :options="deptList" label="语种" clearable
class="col-6 q-pr-lg q-pb-lg" emit-value map-options />
</div>
<div class="col-2">
<q-select filled dense stack-label @input="getList" option-value="TId" @filter="filterTeacherFn" use-input
option-label="TeacherName" v-model="msg.TeacherId" ref="Teacher_Id" :options="TeacherList" label="教师"
clearable class="col-6 q-pr-lg q-pb-lg" emit-value map-options />
</div>
</div>
<div style="float:right;">
......@@ -64,42 +69,50 @@
</q-th>
</template>
<template v-else-if="col.label=='老师迟到早退'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;background-color:#FF66CC;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#FF66CC;color:#000;">
老师<br />迟到早退
</q-th>
</template>
<template v-else-if="col.label=='N5课程时数'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
N5<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N4课程时数'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
N4<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N3课程时数'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
N3<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N2课程时数'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;background-color:#B4C6E7;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#B4C6E7;color:#000;">
N2<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N1课程时数'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;background-color:#B4C6E7;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#B4C6E7;color:#000;">
N1<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='学生小程序刷题次数'">
<q-th :key="col.name" :props="props" style="max-width:75px;text-align:center;background-color:#B4C6E7;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:75px;text-align:center;background-color:#B4C6E7;color:#000;">
学生小程序<br />刷题次数
</q-th>
</template>
<template v-else-if="col.label=='学生小程序刷题时间'">
<q-th :key="col.name" :props="props" style="max-width:75px;text-align:center;background-color:#B4C6E7;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:75px;text-align:center;background-color:#B4C6E7;color:#000;">
学生小程序<br />刷题时间
</q-th>
</template>
......@@ -109,17 +122,20 @@
</q-th>
</template>
<template v-else-if="col.label=='所有老师平均分数'">
<q-th :key="col.name" :props="props" style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
所有老师<br />平均分数
</q-th>
</template>
<template v-else-if="col.label=='总分数'">
<q-th :key="col.name" :props="props" style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
总分数
</q-th>
</template>
<template v-else-if="col.label=='分数差距'">
<q-th :key="col.name" :props="props" style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
<q-th :key="col.name" :props="props"
style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
分数差距
</q-th>
</template>
......@@ -302,12 +318,22 @@
msg: {
YearStr: '',
MonthStr: '',
TeacherId:'',
rowsPerPage: 0
TeacherId: '',
rowsPerPage: 0,
DeptId: 8,
},
teacher:0,
AllTeacherList:[],
TeacherList:[] //教师数据
deptList: [{
Id: 8,
Name: "日语"
},
{
Id: 14,
Name: "韩语"
},
],
teacher: 0,
AllTeacherList: [],
TeacherList: [] //教师数据
}
},
created() {
......@@ -326,7 +352,12 @@
methods: {
//获取教师下拉
GetTeacherList() {
getTeacherDropDownList({}).then(res => {
this.msg.TeacherId="";
var qMsg = {
NotQueryTIds: "5,10,15,20",
Dept_Id:this.msg.DeptId,
}
getTeacherDropDownList(qMsg).then(res => {
if (res.Code == 1) {
this.TeacherList = res.Data;
this.AllTeacherList = res.Data;
......
<style scoped>
.jobTable {
width: 100%;
text-align: center;
}
.jobTable tr td {
height: 40px;
color: #000;
border: 1px solid #d1d1d1;
}
.jobTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
</style>
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label option-value="TId" option-label="TeacherName" v-model="chooseTeacher"
ref="Teacher_Id" :options="TeacherList" label="教师团队" dense class="col-6 q-pr-lg q-pb-lg" emit-value
map-options />
</div>
</div>
</div>
<div class="page-content">
<table class="jobTable" style="border-collapse:collapse;">
<tbody v-for="(item,index) in dataList" :key="index">
<tr>
<th width="150">类别</th>
<th width="150">内容</th>
<th v-for="(T,tindex) in item.SubtypeList[0].OptionList">
<div>{{T.LevelTitle}}</div>
<div>{{T.LevelScore}}</div>
</th>
<th width="200">考核</th>
</tr>
<tr>
<td :rowspan="item.SubtypeList.length+1">{{item.TypeName}}</td>
</tr>
<tr v-for="(sItem,sIndex) in item.SubtypeList">
<td>{{sItem.SubTypeName}}</td>
<td v-for="(cItem,cIndex) in sItem.OptionList" style="position:relative;">
<el-tooltip class="item" effect="dark" :content="cItem.LevelDesc" placement="top-start">
<i style="position:absolute;left:3px;top:3px;" class="iconfont icon-bangzhu"></i>
</el-tooltip>
<q-checkbox v-model="selection" val="teal" color="green" />
</td>
<td></td>
</tr>
</tbody>
</table>
</div>
</div>
</template>
<script>
import {
getTeacherDropDownList
} from "../../api/school/index";
import {
GetAssessmentTypeList
} from "../../api/teacher/index";
export default {
meta: {
title: "中教每月工作考核表"
},
components: {},
data() {
return {
dataList: [],
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
},
chooseTeacher: '',
TeacherList: [], //关联教师下拉数据
selection:''
}
},
created() {},
mounted() {
this.GetTeacherList();
this.getList();
},
methods: {
//获取教师下拉
GetTeacherList() {
getTeacherDropDownList({}).then(res => {
if (res.Code == 1) {
this.TeacherList = res.Data;
}
});
},
getList() {
GetAssessmentTypeList({}).then(res => {
if (res.Code == 1) {
this.dataList = res.Data;
}
})
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
<style>
.Sysuser_Date .el-input__inner {
background: transparent !important;
border: 0 !important;
}
.myTable_Zk tbody tr:first-child td {
background: yellow !important;
}
.myTable_Zk tbody tr:first-child {
background: yellow !important;
z-index: 1 !important;
}
</style>
<template>
<div class="page-body">
<div class="col row wrap q-mb-lg" style="justify-content:space-between;">
<div class="col row wrap">
<div class="col-2 Sysuser_Date q-mr-lg">
<q-field filled dense>
<template v-slot:control>
<el-date-picker v-model="myDate" style="width:100%" value-format="yyyy-MM" @change="getCheckDate()"
size="mini" type="month" placeholder="选择年月">
</el-date-picker>
</template>
</q-field>
</div>
</div>
<div style="float:right;">
<q-btn color="accent" class="q-mr-md" size="sm" icon="download" style="margin-top:15px;"
@click="downloadStudentStatic" label="下载" />
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" ref="table" :loading="loading" :style="{'height':tableHeight+'px'}"
no-data-label="暂无相关数据" flat class="sticky-column-table sticky-header-column-table no-bottom-table myTable_Zk"
separator="none" :data="dataList" :columns="columns" row-key="">
<q-tr slot="header" slot-scope="props" :props="props">
<template v-for="col in props.cols" :props="props">
<template v-if="col.label=='线上与学生互动数'">
<q-th :key="col.name" :props="props" style="max-width:75px;text-align:center;">
线上与学生<br />互动数
</q-th>
</template>
<template v-else-if="col.label=='续约(含留学)'">
<q-th :key="col.name" :props="props" style="max-width:60px;text-align:center;">
续约<br />(含留学)
</q-th>
</template>
<template v-else-if="col.label=='学生退课'">
<q-th :key="col.name" :props="props" style="background-color:#FF66CC;color:#000;">
学生退课
</q-th>
</template>
<template v-else-if="col.label=='学生投诉'">
<q-th :key="col.name" :props="props" style="background-color:#FF66CC;color:#000;">
学生投诉
</q-th>
</template>
<template v-else-if="col.label=='老师迟到早退'">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#FF66CC;color:#000;">
老师<br />迟到早退
</q-th>
</template>
<template v-else-if="col.label=='N5课程时数'">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
N5<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N4课程时数'">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
N4<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N3课程时数'">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#E2EFDA;color:#000;">
N3<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N2课程时数'">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#B4C6E7;color:#000;">
N2<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='N1课程时数'">
<q-th :key="col.name" :props="props"
style="max-width:60px;text-align:center;background-color:#B4C6E7;color:#000;">
N1<br />课程时数
</q-th>
</template>
<template v-else-if="col.label=='学生小程序刷题次数'">
<q-th :key="col.name" :props="props"
style="max-width:75px;text-align:center;background-color:#B4C6E7;color:#000;">
学生小程序<br />刷题次数
</q-th>
</template>
<template v-else-if="col.label=='学生小程序刷题时间'">
<q-th :key="col.name" :props="props"
style="max-width:75px;text-align:center;background-color:#B4C6E7;color:#000;">
学生小程序<br />刷题时间
</q-th>
</template>
<template v-else-if="col.label=='活动次数'">
<q-th :key="col.name" :props="props" style="background-color:#B4C6E7;color:#000;">
活动次数
</q-th>
</template>
<template v-else-if="col.label=='所有老师平均分数'">
<q-th :key="col.name" :props="props"
style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
所有老师<br />平均分数
</q-th>
</template>
<template v-else-if="col.label=='总分数'">
<q-th :key="col.name" :props="props"
style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
总分数
</q-th>
</template>
<template v-else-if="col.label=='分数差距'">
<q-th :key="col.name" :props="props"
style="max-width:70px;text-align:center;background-color:#FFC000;color:#000;">
分数差距
</q-th>
</template>
<template v-else>
<q-th :key="col.name" :props="props" style="max-width:70px">
{{ col.label }}
</q-th>
</template>
</template>
</q-tr>
<template v-slot:bottom>
</template>
</q-table>
</div>
</div>
</template>
<script>
import {
GetTeacherMonthStatic
} from '../../api/teacher/index';
import {
EduDownLoad
} from "../../api/common/common";
export default {
props: {},
meta: {
title: "教师月度汇总"
},
components: {},
data() {
return {
columns: [{
name: 'DateStr',
label: '日期',
field: 'DateStr',
align: 'left'
},
{
name: 'StudentCount',
label: '学生人数',
field: 'StudentCount',
align: 'left'
},
{
name: 'AttendClassHourScore',
label: '上课时数',
field: 'AttendClassHourScore',
align: 'left',
},
{
name: 'OnLineInteractiveScore',
label: '线上与学生互动数',
field: 'OnLineInteractiveScore',
align: 'left',
style: 'max-width: 50px',
},
{
name: 'RenewScore',
label: '续约(含留学)',
field: 'RenewScore',
align: 'left'
},
{
name: 'UpgradeScore',
label: '学生升级',
field: 'UpgradeScore',
align: 'left'
},
{
name: 'TransScore',
label: '转介绍',
field: 'TransScore',
align: 'left'
},
{
name: 'TrialSpeakScore',
label: '试讲',
field: 'TrialSpeakScore',
align: 'left'
},
{
name: 'TruancyScore',
label: '学生旷课',
field: 'TruancyScore',
align: 'left'
},
{
name: 'WithdrawsScore',
label: '学生退课',
field: 'WithdrawsScore',
align: 'left'
},
{
name: 'ComplaintScore',
label: '学生投诉',
field: 'ComplaintScore',
align: 'left'
},
{
name: 'TeacherBeLateScore',
label: '老师迟到早退',
field: 'TeacherBeLateScore',
align: 'left'
},
{
name: 'N5ClassHoursScore',
label: 'N5课程时数',
field: 'N5ClassHoursScore',
align: 'left'
},
{
name: 'N4ClassHoursScore',
label: 'N4课程时数',
field: 'N4ClassHoursScore',
align: 'left'
},
{
name: 'N3ClassHoursScore',
label: 'N3课程时数',
field: 'N3ClassHoursScore',
align: 'left'
},
{
name: 'N2ClassHoursScore',
label: 'N2课程时数',
field: 'N2ClassHoursScore',
align: 'left'
},
{
name: 'N1ClassHoursScore',
label: 'N1课程时数',
field: 'N1ClassHoursScore',
align: 'left'
},
{
name: 'MiniAppPractiseScore',
label: '学生小程序刷题次数',
field: 'MiniAppPractiseScore',
align: 'left'
},
{
name: 'MiniAppTimeScore',
label: '学生小程序刷题时间',
field: 'MiniAppTimeScore',
align: 'left'
},
{
name: 'ActivityNum',
label: '活动次数',
field: 'ActivityNum',
align: 'left'
},
{
name: 'TotalScore',
label: '总分数',
field: 'TotalScore',
align: 'left'
},
{
name: 'AvgScore',
label: '所有老师平均分数',
field: 'AvgScore',
align: 'left'
},
{
name: 'ScoreGap',
label: '分数差距',
field: 'ScoreGap',
align: 'left'
}
],
dataList: [],
loading: false,
myDate: '',
tableHeight: 500,
msg: {
YearStr: '',
MonthStr: '',
rowsPerPage: 0,
},
}
},
created() {
setTimeout(() => {
this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 90;
}, 100)
},
mounted() {
let d = new Date();
this.msg.YearStr = d.getFullYear().toString();
this.msg.MonthStr = (d.getMonth() + 1).toString();
this.myDate = this.msg.YearStr + '-' + this.msg.MonthStr
this.GetTeacherList();
this.getList();
},
methods: {
//下载数据
downloadStudentStatic() {
this.loading = true;
var msg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad(
"/TeacherStatic/DownLoadTeacherDay",
msg,
"教师每日数据统计.xls", res => {
this.loading = false;
}
);
},
getCheckDate() {
if (this.myDate) {
this.msg.YearStr = this.myDate.split('-')[0];
this.msg.MonthStr = this.myDate.split('-')[1];
this.getList();
}
},
//获取数据
getList() {
this.loading = true;
GetTeacherMonthStatic(this.msg).then(res => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data;
}
})
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
......@@ -1421,6 +1421,11 @@ const routes = [{
component: () =>
import("pages/teacher/dayStatic")
},
{
path: "/teacher/teacherMonth", //教师月度统计排名
component: () =>
import("pages/teacher/teacherMonth")
},
{
path: "/teacher/monthStatic", //教师月度统计
component: () =>
......@@ -1436,6 +1441,16 @@ const routes = [{
component: () =>
import("pages/teacher/assessmentType")
},
{
path: "/teacher/appraisalList", //考评列表
component: () =>
import("pages/teacher/appraisalList")
},
{
path: "/teacher/jobEvaluation", //每月工作考评表
component: () =>
import("pages/teacher/jobEvaluation")
},
{
path: "/exam/examPaper", //试卷管理
component: () =>
......
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