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>
This diff is collapsed.
......@@ -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