Commit 02d2181b authored by zhengke's avatar zhengke

增加统计

parent 347674db
......@@ -384,4 +384,70 @@ export function setFeedBack(data) {
method: 'post',
data
})
}
\ No newline at end of file
}
/**
* 获取教师端每日统计
* @param {*} data
*/
export function GetTeacherDay(data) {
return request({
url: '/TeacherStatic/GetTeacherDay',
method: 'post',
data
})
}
/**
* 获取教师端每月统计
* @param {*} data
*/
export function GetTeacherMonth(data) {
return request({
url: '/TeacherStatic/GetTeacherMonth',
method: 'post',
data
})
}
/**
* 获取教师端每月成长率统计
* @param {*} data
*/
export function GetTeacherStaticMonthRate(data) {
return request({
url: '/TeacherStatic/GetTeacherStaticMonthRate',
method: 'post',
data
})
}
/**
* 获取教师端每年统计
* @param {*} data
*/
export function GetTeacherStaticYear(data) {
return request({
url: '/TeacherStatic/GetTeacherStaticYear',
method: 'post',
data
})
}
/**
* 获取教师端每年成长率统计
* @param {*} data
*/
export function GetTeacherStaticYearRate(data) {
return request({
url: '/TeacherStatic/GetTeacherStaticYearRate',
method: 'post',
data
})
}
<style>
.Sysuser_Date .el-input__inner {
background: transparent !important;
border: 0 !important;
}
</style>
<template>
<div>
<div class="col row wrap q-mb-lg" style="justify-content:space-between;">
<div class="col-3 Sysuser_Date q-mr-lg">
<q-field filled dense>
<template v-slot:control>
<el-date-picker v-model="msg.YearStr" @change="getList" style="width:100%" value-format="yyyy" size="small"
type="year" placeholder="选择年">
</el-date-picker>
</template>
</q-field>
</div>
<div>
<q-btn color="accent" class="q-mr-md" size="sm" icon="download" style="margin-top:15px;"
@click="downloadStudentStaticMonth" 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"
separator="none" :data="dataList" :columns="columns" row-key="">
<template v-slot:bottom>
</template>
</q-table>
</div>
</div>
</template>
<script>
import {
GetTeacherMonth
} 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',
},
{
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: '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: '',
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.getList();
},
methods: {
downloadStudentStaticMonth() {
this.loading = true;
var msg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad(
"/TeacherStatic/DownLoadTeacherMonth",
msg,
"教师每月数据统计.xls", res => {
this.loading = false;
}
);
},
//获取数据
getList() {
this.loading = true;
GetTeacherMonth(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
<style>
.Sysuser_Date .el-input__inner {
background: transparent !important;
border: 0 !important;
}
.TotalredClass {
color: red;
}
</style>
<template>
<div>
<div class="col row wrap q-mb-lg" style="justify-content:space-between;">
<div class="col-3 Sysuser_Date q-mr-lg">
<q-field filled dense>
<template v-slot:control>
<el-date-picker v-model="msg.YearStr" @change="getList" style="width:100%" value-format="yyyy" size="small"
type="year" placeholder="选择年">
</el-date-picker>
</template>
</q-field>
</div>
<div>
<q-btn color="accent" class="q-mr-md" size="sm" icon="download" style="margin-top:15px;" label="下载"
@click="downloadStudentStaticMonthRate" />
</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"
separator="none" :data="dataList" :columns="columns" row-key="">
<template v-slot:body-cell-JanuaryRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.JanuaryRate<0}">{{props.row.JanuaryRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-FebruaryRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.FebruaryRate<0}">{{props.row.FebruaryRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-MarchRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.MarchRate<0}">{{props.row.MarchRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-AprilRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.AprilRate<0}">{{props.row.AprilRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-MayRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.MayRate<0}">{{props.row.MayRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-JuneRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.JuneRate<0}">{{props.row.JuneRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-JulyRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.JulyRate<0}">{{props.row.JulyRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-AugustRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.AugustRate<0}">{{props.row.AugustRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-SeptemberRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.SeptemberRate<0}">{{props.row.SeptemberRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-OctoberRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.OctoberRate<0}">{{props.row.OctoberRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-NovemberRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.NovemberRate<0}">{{props.row.NovemberRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-DecemberRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.DecemberRate<0}">{{props.row.DecemberRate}}%</span>
</q-td>
</template>
<template v-slot:body-cell-AvgRate="props">
<q-td>
<span :class="{'TotalredClass':props.row.AvgRate<0}">{{props.row.AvgRate}}%</span>
</q-td>
</template>
<template v-slot:bottom>
</template>
</q-table>
</div>
</div>
</template>
<script>
import {
GetTeacherStaticMonthRate
} from '../../api/teacher/index';
import {
EduDownLoad
} from "../../api/common/common";
export default {
props: {},
meta: {
title: "教师月度数据统计"
},
components: {},
data() {
return {
tabCheck: 1,
dataList: [],
loading: false,
tableHeight: 500,
msg: {
YearStr: '',
rowsPerPage: 0
},
columns: [{
name: 'ItemName',
label: '名称',
field: 'ItemName',
align: 'left'
},
{
name: 'JanuaryRate',
label: '1月',
field: 'JanuaryRate',
align: 'left'
},
{
name: 'FebruaryRate',
label: '2月',
field: 'FebruaryRate',
align: 'left',
},
{
name: 'MarchRate',
label: '3月',
field: 'MarchRate',
align: 'left',
},
{
name: 'AprilRate',
label: '4月',
field: 'AprilRate',
align: 'left'
},
{
name: 'MayRate',
label: '5月',
field: 'MayRate',
align: 'left'
},
{
name: 'JuneRate',
label: '6月',
field: 'JuneRate',
align: 'left'
},
{
name: 'JulyRate',
label: '7月',
field: 'JulyRate',
align: 'left'
},
{
name: 'AugustRate',
label: '8月',
field: 'AugustRate',
align: 'left'
},
{
name: 'SeptemberRate',
label: '9月',
field: 'SeptemberRate',
align: 'left'
},
{
name: 'OctoberRate',
label: '10月',
field: 'OctoberRate',
align: 'left'
},
{
name: 'NovemberRate',
label: '11月',
field: 'NovemberRate',
align: 'left'
},
{
name: 'DecemberRate',
label: '12月',
field: 'DecemberRate',
align: 'left'
},
{
name: 'AvgRate',
label: '平均',
field: 'AvgRate',
align: 'left'
}
],
}
},
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.getList();
},
methods: {
//下载文件
downloadStudentStaticMonthRate() {
this.loading = true;
var msg = JSON.parse(JSON.stringify(this.msg));
EduDownLoad(
"/TeacherStatic/DownLoadTeacherStaticMonthRate",
msg,
"教师月成长率统计.xls", res => {
this.loading = false;
}
);
},
getList() {
this.loading = true;
GetTeacherStaticMonthRate(this.msg).then(res => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data;
}
})
}
}
}
</script>
\ No newline at end of file
<template>
<div class="page-body">
<q-tabs v-model="tabCheck" narrow-indicator dense align="left" class="text-primary q-mb-sm">
<q-tab :ripple="false" :name="1" label="月份统计" />
<q-tab :ripple="false" :name="2" label="成长率" />
</q-tabs>
<template v-if="tabCheck==1">
<everyMonthFirst></everyMonthFirst>
</template>
<template v-if="tabCheck==2">
<everyMonthSecond></everyMonthSecond>
</template>
</div>
</template>
<script>
import everyMonthFirst from '../teacher/everyMonthFirst';
import everyMonthSecond from '../teacher/everyMonthSecond';
export default {
props: {},
meta: {
title: "教师月度数据统计"
},
components: {
everyMonthFirst,
everyMonthSecond
},
data() {
return {
tabCheck: 1,
}
},
created() {
},
mounted() {},
methods: {
}
}
</script>
<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-3 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="small" type="month" placeholder="选择年月">
</el-date-picker>
</template>
</q-field>
</div>
<div>
<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="">
<template v-slot:bottom>
</template>
</q-table>
</div>
</div>
</template>
<script>
import {
GetTeacherDay
} 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',
},
{
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: '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.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;
GetTeacherDay(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
<template>
<div class="page-body">
<q-tabs v-model="tabCheck" @input="getList" narrow-indicator dense align="left" class="text-primary q-mb-sm">
<q-tab :ripple="false" :name="1" label="年份统计" />
<q-tab :ripple="false" :name="2" label="成长率" />
</q-tabs>
<div class="col row wrap q-mb-lg">
<div class="col-3 Sysuser_Date q-mr-lg" style="display:none;">
<q-field filled dense>
<template v-slot:control>
<el-date-picker v-model="msg.YearStr" @change="getList" style="width:100%" value-format="yyyy" size="small"
type="year" placeholder="选择年">
</el-date-picker>
</template>
</q-field>
</div>
<div>
<q-btn color="accent" class="q-mr-md" size="sm" icon="download" style="margin-top:15px;" label="下载"
@click="downloadStudentStaticYear" />
</div>
</div>
<yearFirst :dataList="dataList" :tabCheck="tabCheck"></yearFirst>
</div>
</template>
<script>
import {
EduDownLoad
} from "../../api/common/common";
import yearFirst from '../sale/yearFirst';
import {
GetTeacherStaticYear,
GetTeacherStaticYearRate
} from '../../api/teacher/index';
export default {
props: {},
meta: {
title: "教师年度数据统计"
},
components: {
yearFirst
},
data() {
return {
tabCheck: 1,
dataList: [],
msg: {
YearStr: '',
rowsPerPage: 0
}
}
},
created() {
},
mounted() {
let d = new Date();
this.msg.YearStr = d.getFullYear().toString();
this.getList();
},
methods: {
//下载文件
downloadStudentStaticYear() {
this.loading = true;
var msg = JSON.parse(JSON.stringify(this.msg));
var url = "/TeacherStatic/DownLoadTeacherStaticYear";
var fileName = "教师年数据统计.xls";
if (this.tabCheck == 2) {
url = "/TeacherStatic/DownLoadTeacherStaticYearRate";
fileName = "教师年成长率数据统计.xls";
}
EduDownLoad(
url,
msg,
fileName, res => {
this.loading = false;
}
);
},
//获取数据
getList() {
if (this.tabCheck == 1) {
this.loading = true;
GetTeacherStaticYear(this.msg).then(res => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data;
}
})
} else {
this.loading = true;
GetTeacherStaticYearRate(this.msg).then(res => {
this.loading = false;
if (res.Code == 1) {
this.dataList = res.Data;
}
})
}
}
}
}
</script>
\ No newline at end of file
......@@ -1391,6 +1391,21 @@ const routes = [{
component: () =>
import("pages/teacher/myClass")
},
{
path: "/teacher/monthTotal", //教师每日数据统计
component: () =>
import("pages/teacher/monthTotal")
},
{
path: "/teacher/everyMonthTotal", //教师月度统计
component: () =>
import("pages/teacher/everyMonthTotal")
},
{
path: "/teacher/yearTotal", //教师年度统计
component: () =>
import("pages/teacher/yearTotal")
},
{
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