Commit 5b763858 authored by 罗超's avatar 罗超

Merge branch 'master' of http://gitlab.oytour.com/luochao/confucius

# Conflicts:
#	src/App.vue
parents a4867188 12e7fabe
......@@ -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
})
}
......@@ -93,6 +93,12 @@
<Map @map-submit="mapEvent" :address="addMsg.LocationName" style="zIndex:999999"></Map>
</el-dialog>
</div>
<div class="col-6">
<q-select filled stack-label option-value="TId" option-label="TeacherName" v-model="addMsg.TeacherId"
ref="Teacher_Id" :options="TeacherList" label="教师" :dense="false" class="col-6 q-pb-lg"
emit-value map-options />
</div>
<div class="col-6"></div>
<div class="col-6">
<div>是否免费:</div>
<q-toggle v-model="addMsg.IsFree" :true-value="1" :false-value="2"
......@@ -169,6 +175,9 @@
</div>
</template>
<script>
import {
getTeacherDropDownList
} from '../../api/school/index'
import {
UploadSelfFile
} from "../../api/common/common";
......@@ -218,9 +227,11 @@
LnsideLimit: 1, //内部限制0-否,1-是
LonLat: '', //经纬度(逗号分隔)
LocationName: '', //位置名称
TeacherId:0 //选择老师
},
persistent: true,
isShowMap: false, //是否显示地图弹窗
TeacherList: [], //关联教师下拉数据
//富文本
ueditor: {
value: "",
......@@ -264,6 +275,7 @@
this.addMsg.LnsideLimit = this.saveObj.LnsideLimit
this.addMsg.LonLat = this.saveObj.LonLat
this.addMsg.LocationName = this.saveObj.LocationName
this.addMsg.TeacherId = this.saveObj.TeacherId
this.setVal(this.addMsg.ActivityInfo);
}
},
......@@ -306,6 +318,7 @@
this.addMsg.LnsideLimit = this.saveObj.LnsideLimit
this.addMsg.LonLat = this.saveObj.LonLat
this.addMsg.LocationName = this.saveObj.LocationName
this.addMsg.TeacherId = this.saveObj.TeacherId
this.setVal(this.addMsg.ActivityInfo);
} else {
this.addMsg = {
......@@ -331,11 +344,26 @@
LnsideLimit: 1, //内部限制0-否,1-是
LonLat: '', //经纬度(逗号分隔)
LocationName: '', //位置名称
TeacherId:0
},
this.setVal("");
}
this.GetTeacherList();
},
methods: {
//获取教师下拉
GetTeacherList() {
getTeacherDropDownList({}).then(res => {
if (res.Code == 1) {
this.TeacherList = res.Data;
var obj = {
TeacherName: '请选择',
TId: 0
}
this.TeacherList.unshift(obj);
}
})
},
// 选择开始时间
sdate(val) {
this.addMsg.StartTime = val
......
......@@ -322,7 +322,6 @@
getLevel(){
GetBankTypeList({}).then(res => {
if(res.Code==1){
console.log(res,'shuj');
this.LevelData = res.Data;
}
})
......
......@@ -96,7 +96,7 @@
ref="CourseRate"
class="col-12 q-pb-lg"
label="课程比例(%)"
:rules="[val => !!val || '请填写课程比例']"
:rules="[val => val >=0 || '请填写课程比例']"
/>
</div>
......
......@@ -1929,13 +1929,25 @@
},
gourltx(obj) {
if (obj.OrderType == 1) {
this.OpenNewUrl("/financial/cycleOrderList", {
OrderId: obj.OrderId
});
if(obj.IsAchievements == 1){
this.OpenNewUrl("/financial/market/AchievementsForOrderList", {
OrderId: obj.OrderId
});
}else{
this.OpenNewUrl("/financial/cycleOrderList", {
OrderId: obj.OrderId
});
}
} else {
this.OpenNewUrl("/financial/studyabroad/ordercommission", {
OrderId: obj.OrderId
});
if(obj.OrderId >= 1165){
this.OpenNewUrl("/financial/market/AchievementsForOrderList", {
OrderId: obj.OrderId
});
}else{
this.OpenNewUrl("/financial/studyabroad/ordercommission", {
OrderId: obj.OrderId
});
}
}
},
//合同提交审核
......
......@@ -65,7 +65,6 @@
},
created() {},
mounted() {
console.log(this.stuData, 'studata');
this.getCourseTimeList();
this.ceshi();
},
......@@ -73,7 +72,6 @@
ceshi() {
var p = new Promise(function (resolve, reject) {
setTimeout(function () {
console.log('我执行了');
resolve('绥滨啥数据');
}, 2000)
})
......
......@@ -364,6 +364,12 @@
align: "left",
field: "ActivityTypeName"
},
{
name: "TeacherName",
label: "关联老师",
align: "left",
field: "TeacherName"
},
{
name: "ActivityTime",
label: "活动时间",
......
<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-input @input="resetSearch" clearable filled v-model="msg.Title"
label="问卷调查名称" maxlength="20" />
</div>
<div class="col-3">
<q-select @input="resetSearch" clearable filled stack-label option-value="Id" option-label="Name"
v-model="msg.SurveyType" ref="SurveyType" :options="platList" emit-value map-options label="类型"
:dense="false" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled v-model="msg.IsShow" :options="ShowOpts"
emit-value map-options label="是否显示" />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-right-column-table sticky-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" icon="add" label="新增" @click="addObj(null)" />
</div>
</template>
<template v-slot:body-cell-IsRequired="props">
<q-td :props="props">
<span v-if="props.row.IsRequired==0"></span>
<span v-if="props.row.IsRequired==1"></span>
</q-td>
</template>
<template v-slot:body-cell-IsShow="props">
<q-td :props="props">
<span v-if="props.row.IsShow==0"></span>
<span v-if="props.row.IsShow==1"></span>
</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 flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="addObj(props.row)" />
</q-td>
</template> -->
</q-table>
<!-- <teacher-form v-if="persistent" :save-obj="objOption" @close="closeSaveForm" @success="RefreshPage">
</teacher-form> -->
</div>
</div>
</template>
<script>
// import teacherForm from '../../components/school/teacher/teacher-form'
export default {
meta: {
title: "问卷调查"
},
components: {
// teacherForm
},
data() {
return {
columns: [
{
name: 'ID',
label: 'ID',
align: 'left',
field: 'ID'
},
{
name: 'Title',
label: '问题名称',
field: 'Title',
align: 'left'
},
{
name: 'FormTypeStr',
label: '问卷类型',
field: 'FormTypeStr',
align: 'left'
},
{
name: 'IsRequired',
label: '是否必填',
field: 'IsRequired',
align: 'left'
},
{
name: 'IsShow',
label: '是否显示',
field: 'IsShow',
align: 'left'
},
{
name: 'Sort',
label: '排序',
field: 'Sort',
align: 'left'
},
{
name: 'optioned',
label: '操作',
field: 'TId'
}
],
dataList: [],
loading: true,
ShowOpts: [{
label: '不限',
value: '-1'
},
{
label: '是',
value: '0'
},
{
label: '否',
value: '1'
}
],
msg:{
pageIndex:1,
pageSize:15,
rowsPerPage: 15,
PrizeType:0,
Title:'',
IsShow:'-1',
SurveyType:0,
ActivitySurveyId:0,//活动id
},
platList:[],
pageCount: 0,
persistent: false,
objOption: null,
}
},
created() {
},
mounted() {
this.getPlat();
this.getList();
},
methods: {
getPlat(){
this.apipostDS("/api/Survey/GetSurveyTypeEnumList", {}, res => {
if(res.data.resultCode==1){
this.platList = res.data.data;
let obj = {
Id:0,
Name:'不限'
}
this.platList.unshift(obj);
}else {
this.Info(res.data.message);
}
})
},
resetSearch() {
this.loading = true;
this.msg.pageIndex = 1;
this.getList();
},
getList(){
this.loading=true;
this.apipostDS("/api/Survey/GetPageList", this.msg, res => {
this.loading=false;
if(res.data.resultCode==1){
this.dataList = res.data.data.pageData;
this.pageCount = res.data.data.pageCount;
}else {
this.Info(res.data.message);
}
})
},
addObj(){
}
// changePage(val) {
// this.msg.pageIndex = val;
// this.loading = true;
// this.getTeacher();
// },
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
<template>
<div class="resultPageList">
<div class="el-card__header"><span>问卷调查列表</span></div>
<div class="content">
<div style="display: flex;flex-direction: row;align-items: center">
<div class="block">
<div class="searchInput" style="width:250px">
<el-input style="display:inline-block;width:225px;height:30px" placeholder="请输入昵称搜索" v-model="msg.AliasName"
size="small" @clear="getList" @keyup.enter.native="getList" clearable></el-input><span @click="getList"
class="el-icon-search" style="color:#979dad;font-size:14px;position:relative;top:1px"></span>
</div><span>填写时间:</span>
<el-date-picker v-model="dateList" @change="getList()" size="small" type="datetimerange" range-separator="至"
value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
</div>
</div>
</div>
<div style="padding: 20px;background: #fff;">
<el-table :data="tableData" header-cell-class-name="headClass" style="width: 100%" border>
<el-table-column prop="ID" label="ID" width="100"></el-table-column>
<el-table-column prop="ActiveSurveyName" label="活动名称"></el-table-column>
<el-table-column prop="AliasName" label="信息"><template slot-scope="scope">
<div class="app-image" :style="{backgroundImage:'url(' + scope.row.Photo + ')',backgroundSize:'cover'}">
</div>
<div flex="dir:left cross:center"> {{scope.row.AliasName}}</div>
</template></el-table-column>
<el-table-column label="创建时间" prop="CreateDateStr"></el-table-column>
<el-table-column fixed="right" label="操作" width="180"><template slot-scope="scope">
<!-- <el-tooltip class="item" effect="dark" content="详情" placement="top"><img
src="../../assets/img/userman/detail.png" alt="" class="imgstyle" @click="grant(scope.row)">
</el-tooltip> -->
</template></el-table-column>
</el-table>
<el-pagination style="text-align:right" background @current-change="handleCurrentChange" :page-size="msg.pageSize"
layout="prev, pager, next" :current-page.sync="msg.pageIndex" :total="count"></el-pagination>
</div>
<el-dialog title="用户问卷调查详情" :visible.sync="dialogVisible" width="600px">
<div class="wjstyle" v-if="xqdata!=null">
<div class="row" style="font-size: 16px;margin-bottom: 10px"><img :src="xqdata.obj.Photo" alt=""
style="width: 50px;height: 50px;margin-right: 10px"> {{xqdata.obj.Name}}
</div>
<div>创建时间: {{xqdata.obj.CreateDateStr}}
</div>
<div style="font-size: 16px;margin: 10px 0 ;font-weight: bold">用户信息</div>
<div v-for="(item,index) in xqdata.baseList" :key="index">
<div> {{index+1}}、 {{item.Title}}
</div>
<div v-if="item.SurveyType==4" style="margin: 10px 0;">
<el-input v-if="item.FormType==2" type="textarea" placeholder="请输入内容" v-model="item.TextContent" :rows="3"
size="small" :disabled="true"></el-input>
<el-input v-if="item.FormType==1" type="text" placeholder="请输入内容" v-model="item.TextContent" size="small"
:disabled="true"></el-input>
</div>
<!-- 单选 -->
<div v-if="item.SurveyType==2|| item.SurveyType==3" style="margin: 10px 0;">
<el-checkbox v-model="x.IsCheck==1?true:false" disabled v-for="(x,y) in item.SurveyOptionsList" :key="y">
{{x.OptionsName}}
</el-checkbox>
</div>
<div v-if="item.SurveyType==1" style="margin: 10px 0;">
<el-rate v-model="item.ScoreNum" disabled show-score text-color="#ff9900" score-template="{value}分">
</el-rate>
</div>
</div>
<div style="font-size: 16px;margin: 10px 0 ;font-weight: bold">问卷调查表信息</div>
<div v-for="(item,index) in xqdata.surverList" :key="index">
<div> {{index+1}}、 {{item.Title}}
</div>
<div v-if="item.SurveyType==4" style="margin: 10px 0;">
<el-input v-if="item.FormType==2" type="textarea" placeholder="请输入内容" v-model="item.TextContent" :rows="3"
size="small" :disabled="true"></el-input>
<el-input v-if="item.FormType==1" type="text" placeholder="请输入内容" v-model="item.TextContent" size="small"
:disabled="true"></el-input>
</div>
<!-- 单选 -->
<div v-if="item.SurveyType==2|| item.SurveyType==3" style="margin: 10px 0;">
<el-checkbox v-model="x.IsCheck==1?true:false" disabled v-for="(x,y) in item.SurveyOptionsList" :key="y">
{{x.OptionsName}}
</el-checkbox>
</div>
<div v-if="item.SurveyType==1" style="margin: 10px 0;">
<el-rate v-model="item.ScoreNum" disabled show-score text-color="#ff9900" score-template="{value}分">
</el-rate>
</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
export default {
name: "resultPageList",
data() {
return {
msg: {
pageIndex: 1,
pageSize: 20,
AliasName: '',
StartDate: '',
EndDate: '',
}
,
tableData: [],
count: 0,
loading: false,
dateList: [],
dialogVisible: false,
xqdata: null,
}
}
,
created() {
this.getDateList();
}
,
methods: {
getDateList() {
this.loading = true;
if (this.dateList && this.dateList.length > 0) {
this.msg.StartDate = this.dateList[0];
this.msg.EndDate = this.dateList[1];
} else {
this.msg.StartDate = '';
this.msg.EndDate = '';
}
this.apipost("/api/Survey/GetResultPageList", this.msg, res => {
this.loading = false;
if (res.data.resultCode == 1) {
this.tableData = res.data.data.pageData;
this.count = res.data.data.count;
} else {
this.Info(res.data.message);
}
}
)
},
getList() {
this.msg.pageIndex = 1
this.getDateList();
},
handleCurrentChange(val) {
this.msg.pageIndex = val;
this.getDateList();
},
grant(row) {
this.apipost("/api/Survey/GetGuestSurveyDetails", {
SurveyID: row.ID
}, res => {
if (res.data.resultCode == 1) {
this.xqdata = res.data.data;
this.dialogVisible = true
} else {
this.Info(res.data.message);
}
}
)
}
}
}
</script>
<style>
.resultPageList .el-card__header {
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
background: #fff;
}
.resultPageList .el-button--small {
padding: 9px 15px;
}
.resultPageList .content .searchInput {
border: 1px solid #DCDFE6;
border-radius: 4px;
margin-left: 20px;
}
.resultPageList .content .searchInput .el-input__inner {
border: none;
outline: none;
height: 30px;
line-height: 30px;
}
.resultPageList .content .searchInput {
line-height: normal;
display: inline-table;
border-collapse: separate;
border-spacing: 0;
width: 250px;
}
.resultPageList .content {
background: #fff;
margin-top: 10px;
padding: 15px;
box-sizing: border-box;
}
.resultPageList .app-image {
background-position: center center;
width: 50px;
height: 50px;
border-radius: 0%;
float: left;
margin-right: 8px;
}
.resultPageList .wjstyle {
width: 100%;
;
}
</style>
<style scoped>
.el-date-editor /deep/ .el-input__inner {
width: 100%;
border: none;
background-color: transparent;
height: 28px;
}
</style>
<template>
<div class="page-body">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-2 Sysuser_Date">
<q-field filled dense>
 <template v-slot:control>
<el-date-picker v-model="msg.StartTime" size="mini" style="width:100%" :clearable="false" type="date"
placeholder="选择开始日期" value-format="yyyy-MM-dd" @change="resetSearch">
</el-date-picker>    
</template>
</q-field>
</div>
<div class="col-2">
<q-field filled dense>
 <template v-slot:control>
<el-date-picker v-model="msg.EndTime" size="mini" style="width:100%" :clearable="false" type="date"
placeholder="选择结束日期" value-format="yyyy-MM-dd" @change="resetSearch">
</el-date-picker>    
</template>
</q-field>
</div>
<div class="col-2">
<q-select stack-label color="primary" dense filled label="消费类型" option-value="Id" option-label="Name"
:options="TypeList" v-model="msg.Type" @input="resetSearch" emit-value map-options />
</div>
<div class="col-2">
<q-select stack-label color="primary" dense filled label="使用类型" option-value="Id" option-label="Name"
:options="BuyTypeList" v-model="msg.BuyType" @input="resetSearch" emit-value map-options />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat class="sticky-column-table"
separator="none" :data="dataList" :columns="columns">
<template v-slot:top>
<div class="col-2 q-table__title">咖啡劵详情</div>
<q-space />
<div class="page-option">
<q-btn color="accent" class="q-mr-md" v-if="isShowDown" size="sm" icon="download" style="margin-top:15px;"
label="下载" @click="downloadStarBucks" />
</div>
</template>
<template v-slot:body-cell-UserName="props">
<q-td :props="props">
<q-avatar rounded size="sm" v-if="props.row.UserIcon">
<img :src="props.row.UserIcon" />
</q-avatar>
<q-avatar rounded size="sm" color="teal-10" text-color="white" v-if="!props.row.UserIcon">
{{item.row.UserName[0]}}</q-avatar>
<span style="position:relative;top:3px;margin-left:2px;">{{props.row.UserName}}</span>
</q-td>
</template>
<template v-slot:body-cell-Type="props">
<q-td :props="props">
{{props.row.Type==1?'存入':'消费'}}
</q-td>
</template>
<template v-slot:body-cell-BuyType="props">
<q-td :props="props">
<span v-if="props.row.BuyType==0">-</span>
<span v-if="props.row.BuyType==1">赠送</span>
<span v-if="props.row.BuyType==2">购买</span>
</q-td>
</template>
<template v-slot:body-cell-EmpType="props">
<q-td :props="props">
<span v-if="props.row.EmpType==1">员工</span>
<span v-if="props.row.EmpType==2">学员</span>
<span v-if="props.row.EmpType==3">来宾</span>
</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>
</q-table>
</div>
</div>
</template>
<script>
export default {
meta: {
title: "咖啡券详情"
},
data() {
return {
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
StartTime: '',
EndTime: '',
Type: 0, //1存入 2消费
BuyType: 0 //使用类型 1免费的 2使用购买的
},
TypeList: [{
Id: 0,
Name: '不限'
}, {
Id: 1,
Name: '存入'
}, {
Id: 2,
Name: '消费'
}],
BuyTypeList: [{
Id: 0,
Name: '不限'
}, {
Id: 1,
Name: '免费的'
}, {
Id: 2,
Name: '使用购买的'
}],
pageCount: 0,
dataList: [],
loading: true,
columns: [{
name: 'UserName',
label: '用户名称',
align: 'left',
field: 'UserName'
}, {
name: 'Type',
label: '使用类型',
field: 'Type',
align: 'left'
}, {
name: 'BuyType',
label: '消费类型',
field: 'BuyType',
align: 'left'
},
{
name: 'EmpType',
label: '员工类型',
align: 'left',
field: 'EmpType'
},
{
name: 'EmpStuName',
label: '员工/学员',
align: 'left',
field: 'EmpStuName'
},
{
name: 'Number',
label: '数量',
align: 'left',
field: 'Number'
},
{
name: 'Remark',
label: '备注',
align: 'left',
field: 'Remark'
},
{
name: 'CreateByName',
label: '核销人',
align: 'left',
field: 'CreateByName'
},
{
name: 'CreateDate',
label: '时间',
field: 'CreateDate',
align: 'left'
}
],
isShowDown: false
}
},
watch: {
msg: {
handler(val) {
if (val) {
if (val.StartTime != '' && val.EndTime != '') {
this.isShowDown = true;
}
}
},
deep: true
},
},
mounted() {
if (this.$route.query) {
if (this.$route.query.Type == 1) {
this.msg.StartTime = this.$route.query.Date;
this.msg.EndTime = this.$route.query.Date;
}
if (this.$route.query.Type == 2) {
if (this.$route.query.Date) {
let year = this.$route.query.Date.split('-')[0];
let month = this.$route.query.Date.split('-')[1];
var firstDay = new Date(year, month - 1, 1);
var lastDay = new Date(year, month, 0);
this.msg.StartTime = this.getDateStr(firstDay);
this.msg.EndTime = this.getDateStr(lastDay);
}
}
if (this.$route.query.Type == 3) {
if (this.$route.query.Date) {
let year1 = new Date(this.$route.query.Date, 0, 1) //第一天
let year2 = new Date(this.$route.query.Date, 12, 0) //第一天
this.msg.StartTime = this.getDateStr(year1);
this.msg.EndTime = this.getDateStr(year2);
}
}
}
this.getList()
},
methods: {
getDateStr(dateStamp) {
var time = new Date(dateStamp);
var y = time.getFullYear();
var M = time.getMonth() + 1;
var d = time.getDate();
return y + '-' + M + '-' + d
},
getList() {
this.loading = true
this.apipostDS("/api/Coffee/GetCoffeeCouponsPageList", this.msg, (res) => {
this.loading = false
if (res.data.resultCode == 1) {
this.dataList = res.data.data.pageData;
this.pageCount = res.data.data.pageCount;
}
})
},
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
},
changePage(val) {
this.msg.pageIndex = val;
this.getList()
},
//获取下个月
getNextMonth(date) {
var arr = date.split('-');
var year = arr[0]; //获取当前日期的年份
var month = arr[1]; //获取当前日期的月份
var day = arr[2]; //获取当前日期的日
var days = new Date(year, month, 0);
days = days.getDate(); //获取当前日期中的月的天数
var year2 = year;
var month2 = parseInt(month) + 1;
if (month2 == 13) {
year2 = parseInt(year2) + 1;
month2 = 1;
}
var day2 = day;
var days2 = new Date(year2, month2, 0);
days2 = days2.getDate();
if (day2 > days2) {
day2 = days2;
}
if (month2 < 10) {
month2 = '0' + month2;
}
var t2 = year2 + '-' + month2 + '-' + day2;
return t2;
},
//下载导出星巴克
downloadStarBucks() {
this.loading = true;
var msg = JSON.parse(JSON.stringify(this.msg));
var d1 = msg.StartTime;
var d2 = msg.EndTime;
if (d1 != null && d2 != null) {
var dd1 = new Date(d1);
var dd2 = new Date(d2);
var num = (dd2 - dd1) / (1000 * 60 * 60 * 24)
if (num > 30) {
msg.EndTime = this.getNextMonth(msg.StartTime);
}
}
this.GetLocalFileDS("/api/Coffee/GetCoffeeCouponsListToExcel", {
...msg
}, "咖啡详情统计.xls")
this.loading = false;
}
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
This diff is collapsed.
......@@ -155,7 +155,7 @@
<div
v-if="scope.row.OrderId"
style="cursor: pointer;text-decoration: underline;"
@click="goUrlorderList('/sale/orderStatistics', scope.row)"
@click="goUrlorderList(scope.row.ClassType == -1 ?'/sale/studyOrderStatistics' : '/sale/orderStatistics', scope.row)"
>{{ scope.row.OrderId }}</div>
</template>
</el-table-column>
......
......@@ -94,7 +94,7 @@
<span v-if="item.CourseType == 2">不包含</span>
</td>
<td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.CourseList">
<span v-for="( son , sIndex ) in item.CourseList" :key="sIndex">
<span v-if="sIndex<4"> {{ son.CourseName }}{{item.CourseList.length==sIndex+1?'':'、'}}</span>
</span>
<el-popover
......@@ -114,7 +114,7 @@
<span >{{ item.CourseRate + '%' }}</span>
</td>
<td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.EmpList">
<span v-for="( son , sIndex ) in item.EmpList" :key="sIndex">
<span v-if="sIndex<8">{{ son.EmployeeName }}{{item.EmpList.length==sIndex+1?'':'、'}}</span>
</span>
<el-popover
......@@ -128,7 +128,7 @@
</el-popover>
</td>
<td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.ChildEmpList">
<span v-for="( son , sIndex ) in item.ChildEmpList" :key="sIndex">
<span v-if="sIndex<8">{{ son.EmployeeName }}{{item.ChildEmpList.length==sIndex+1?'':'、'}}</span>
</span>
<el-popover
......@@ -307,7 +307,7 @@ export default {
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 1
IsLeave: 0
}).then(res => {
this.loyeeList = res.Data;
})
......
......@@ -138,7 +138,7 @@
</el-table-column>
<el-table-column prop="OrderId" label="订单号" >
<template slot-scope="scope">
<div style="cursor: pointer;text-decoration: underline;" @click="goUrlorderList('/sale/orderStatistics',scope.row)">{{scope.row.OrderId}} </div>
<div style="cursor: pointer;text-decoration: underline;" @click="goUrlorderList(scope.row.ClassType == -1 ?'/sale/studyOrderStatistics' : '/sale/orderStatistics',scope.row)">{{scope.row.OrderId}} </div>
</template>
</el-table-column>
......
......@@ -46,8 +46,8 @@
<q-btn color="primary" size="11px" label="返回" @click="goreturn" style="margin-left:10px" />
</div>
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select filled stack-label input-debounce="0" option-value="Id" @input="getlaiyuan" option-label="Name"
<div class="col-3" v-if="isShowFrom">
<q-select filled stack-label :disable="!isShowFrom" input-debounce="0" option-value="Id" @input="getlaiyuan" option-label="Name"
v-model="msg.OrderSourceType" :options="customFromList" label="来源" dense emit-value map-options>
</q-select>
</div>
......@@ -187,6 +187,7 @@
allCustomList: [], //所有同行列表
InvitationList: [], //学员下拉数据
AllInvitationList: [],
isShowFrom:true
}
},
created() {},
......@@ -197,6 +198,10 @@
if (this.$route.query.ReFinanceId2) {
this.msg.UserDept = this.$route.query.ReFinanceId2;
}
if (this.$route.query&&this.$route.query.ReFinanceId2==0){
this.msg.OrderSourceType=4;
this.isShowFrom=false;
}
this.getList()
this.getBranchList()
this.getCustomFrom()
......
......@@ -19,7 +19,7 @@
@click="downloadStudentStaticYear" />
</div>
</div>
<companyYearFirst :dataList="dataList" :tabCheck="companyYearFirst">
<companyYearFirst :dataList="dataList" :tabCheck="tabCheck">
</companyYearFirst>
</div>
</template>
......
......@@ -43,7 +43,7 @@
<img :src="props.row.CreateByPhoto" />
</q-avatar>
<q-avatar rounded size="sm" color="teal-10" text-color="white" v-if="!props.row.CreateByPhoto">
{{ props.value.substring(0, 1) }}</q-avatar>
{{ props.row.CreateByName.substring(0, 1) }}</q-avatar>
{{ props.row.CreateByName }}
</q-td>
</template>
......
......@@ -71,7 +71,7 @@
}
},
meta: {
title: "课程顾问部年度数据统计"
},
components: {},
data() {
......
This diff is collapsed.
......@@ -11,6 +11,10 @@
v-model="msg.School_Id" ref="School_Id" :options="schoolList" emit-value map-options label="所属校区"
:dense="false" />
</div>
<div class="col-3">
<q-select filled @input="resetSearch" stack-label option-value="Id" option-label="Name" v-model="msg.IsLeave "
:options="LeaveStatusList" label="在职状态" :dense="false" emit-value map-options />
</div>
<div class="col-3">
<q-select @input="resetSearch" standout="bg-primary text-white" v-model="msg.IsShow" :options="ShowOpts"
emit-value map-options label="显示状态" />
......@@ -21,7 +25,7 @@
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-right-column-table sticky-column-table" separator="none" :data="data" :columns="columns"
row-key="name">
<template v-slot:top="props">
<template v-slot:top>
<div class="col-2 q-table__title">教师信息</div>
<q-space />
<div class="page-option">
......@@ -244,7 +248,17 @@
AuditStatus: "-1",
School_Id: "",
IsShow: "-1",
IsLeave: 1, //在职
},
LeaveStatusList: [{
Id: 1,
Name: "在职"
},
{
Id: 2,
Name: "离职"
}
], //在职状态
pageCount: 0,
persistent: false,
objOption: null,
......@@ -390,10 +404,8 @@
}
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
</style>
\ No newline at end of file
......@@ -155,6 +155,21 @@
padding: 5px 10px;
align-items: center;
}
.stics {
padding: 10px 20px;
background: #DDDEE0;
border-radius: 4px;
font-size: 13px;
color: #000000;
font-weight: bold
}
.stics .stics-name {
color: #2D2D2D;
font-weight: 600;
margin-right: 10px
}
</style>
<template>
......@@ -170,13 +185,13 @@
<div class="page-search row items-center flex">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-select @input="changeSchool" dense filled v-model="msg.School_Id" class="col-6"
option-label="SName" option-value="SId" :options="SchoolList" emit-value map-options label="校区" />
<q-select @input="changeSchool" dense filled v-model="msg.School_Id" class="col-6" option-label="SName"
option-value="SId" :options="SchoolList" emit-value map-options label="校区" />
</div>
<div class="col-3" v-if="source!=1">
<q-select @input="changeCourse" dense filled v-model="msg.CourseId" class="col-6"
option-label="CourseName" option-value="CourseId" use-input :options="CourseList" @filter="filterCourse"
emit-value map-options label="课程" clearable>
<q-select @input="changeCourse" dense filled v-model="msg.CourseId" class="col-6" option-label="CourseName"
option-value="CourseId" use-input :options="CourseList" @filter="filterCourse" emit-value map-options
label="课程" clearable>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
......@@ -220,9 +235,8 @@
@clear="resetSearch" maxlength="20" />
</div>
<div class="col-3">
<q-select @input="resetSearch" dense filled v-model="msg.GuestState" class="col-6"
option-label="Name" option-value="Id" use-input :options="GuestStateList" emit-value map-options
label="学员状态" clearable>
<q-select @input="resetSearch" dense filled v-model="msg.GuestState" class="col-6" option-label="Name"
option-value="Id" use-input :options="GuestStateList" emit-value map-options label="学员状态" clearable>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
......@@ -233,8 +247,8 @@
</q-select>
</div>
<div class="col-3">
<q-select @input="getShaixuanFrom()" dense filled clearable filled option-value="Id" option-label="Name" v-model="msg.CreateType"
:options="customFromList" emit-value map-options label="客户来源" />
<q-select @input="getShaixuanFrom()" dense filled clearable filled option-value="Id" option-label="Name"
v-model="msg.CreateType" :options="customFromList" emit-value map-options label="客户来源" />
</div>
<div class="col-3" v-if="msg.CreateType == 1">
<q-select filled v-model="msg.StuChannelId" @input="resetSearch" label="收客渠道" :dense="false"
......@@ -274,12 +288,30 @@
</div>
</div>
</div>
<div class="col row wrap q-gutter-x-md" v-if="staticObj">
<div class="col stics">
<span class="stics-name">正常学员数量</span>
<span>{{staticObj.NormalNum?staticObj.NormalNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">退课学员数量</span>
<span style="color: #F72E52">{{staticObj.DropOutNum?staticObj.DropOutNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">停课学员数量</span>
<span style="color:#2961FE;">{{staticObj.StopClassesNum?staticObj.StopClassesNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">毕业学员数量</span>
<span>{{staticObj.GraduateNum?staticObj.GraduateNum:0}}人</span>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-tow-column-table sticky-right-column-table" separator="none" :data="data" :columns="columns"
row-key="name">
<template v-slot:top="props">
<div class="col-2 q-table__title">学员名单</div>
<template v-slot:top>
<!-- <div class="col-2 q-table__title">学员名单</div> -->
</template>
<template v-slot:body-cell-ContractNo="props">
<q-td :props="props">
......@@ -382,7 +414,7 @@
@click="transferClass(props.row, 1)" />
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left: 10px">
<q-list>
<q-item dense clickable v-close-popup @click="showAddEvent(props.row)">
<q-item dense clickable v-close-popup @click="showAddEvent(props.row)">
<q-item-section>
<q-item-label overline>添加事件</q-item-label>
</q-item-section>
......@@ -426,7 +458,7 @@
@close="closeStuForm" @success="refreshStuList" @reload="refreshStuList">
</studentRight-form>
<!-- 跳课 -->
<JumpCourse v-model="isShowChangeCourse" :saveObj="ChangeCourseObj" @success="refreshPage" ></JumpCourse>
<JumpCourse v-model="isShowChangeCourse" :saveObj="ChangeCourseObj" @success="refreshPage"></JumpCourse>
</div>
</template>
<script>
......@@ -762,8 +794,9 @@
MyTransListData: [],
source: 0, //1:从课程列表进入
courseName: "",
isShowChangeCourse:false,
ChangeCourseObj:{}
isShowChangeCourse: false,
ChangeCourseObj: {},
staticObj: {}, //学生统计信息
};
},
created() {
......@@ -867,10 +900,10 @@
});
},
//筛选客户来源
getShaixuanFrom(){
getShaixuanFrom() {
this.msg.StuSourceId = ''
this.msg.StuChannelId = ''
if(this.msg.CreateType==4){
if (this.msg.CreateType == 4) {
this.getStudentDorpDown();
}
this.resetSearch()
......@@ -896,7 +929,14 @@
//获取学员状态列表
getGuestStateList() {
queryGuestStateList({}).then(res => {
this.GuestStateList = res.Data;
var tempArray = res.Data;
if (tempArray) {
tempArray.forEach(item => {
if (item.Id == 1 || item.Id == 2 || item.Id == 5 || item.Id == 7) {
this.GuestStateList.push(item);
}
});
}
});
},
//获取校区下拉
......@@ -982,8 +1022,9 @@
.then(res => {
this.loading = false;
if (res.Code === 1) {
this.data = res.Data.PageData;
this.pageCount = res.Data.PageCount;
this.data = res.Data.pageModel.PageData;
this.pageCount = res.Data.pageModel.PageCount;
this.staticObj = res.Data.StudentStatic;
}
})
.catch(err => {
......@@ -1175,15 +1216,13 @@
refreshStuList() {
this.getList();
},
showChangeCourse(item){
this.isShowChangeCourse=true
this.ChangeCourseObj=item
showChangeCourse(item) {
this.isShowChangeCourse = true
this.ChangeCourseObj = item
}
}
};
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
</style>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<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 row wrap">
<div class="col-2 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="mini"
type="year" placeholder="选择年">
</el-date-picker>
</template>
</q-field>
</div>
<div class="col-2" style="display:none;">
<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>
<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";
import {
getTeacherDropDownList
} from "../../api/school/index";
export default {
props: {},
meta: {
title: "教师月度数据统计"
},
components: {},
data() {
return {
tabCheck: 1,
dataList: [],
loading: false,
tableHeight: 500,
msg: {
YearStr: '',
TeacherId:'',
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'
}
],
TeacherList:[],
AllTeacherList:[]
}
},
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.GetTeacherList();
this.getList();
},
methods: {
//获取教师下拉
GetTeacherList() {
getTeacherDropDownList({}).then(res => {
if (res.Code == 1) {
this.TeacherList = res.Data;
this.AllTeacherList = res.Data;
}
});
},
//课程教师
filterTeacherFn(val, update, abort) {
update(() => {
this.TeacherList = this.AllTeacherList.filter(
v => v.TeacherName.indexOf(val) > -1
);
});
},
//下载文件
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">
<monthFirst></monthFirst>
</template>
<template v-if="tabCheck==2">
<monthSecond></monthSecond>
</template>
</div>
</template>
<script>
import monthFirst from '../teacher/monthFirst';
import monthSecond from '../teacher/monthSecond';
export default {
props: {},
meta: {
title: "教师月度数据统计"
},
components: {
monthFirst,
monthSecond
},
data() {
return {
tabCheck: 1,
}
},
created() {
},
mounted() {},
methods: {
}
}
</script>
......@@ -24,6 +24,21 @@
height: 40px;
background-color: rgb(238, 238, 239);
}
.stics {
padding: 10px 20px;
background: #DDDEE0;
border-radius: 4px;
font-size: 13px;
color: #000000;
font-weight: bold
}
.stics .stics-name {
color: #2D2D2D;
font-weight: 600;
margin-right: 10px
}
</style>
<template>
......@@ -34,6 +49,18 @@
<q-input @change="refreshPage" clearable standout="bg-primary text-white" v-model="msg.GuestName" label="学员名称"
@clear="refreshPage" maxlength="20" />
</div>
<div class="col-3">
<q-select @input="refreshPage" filled v-model="msg.GuestState" option-label="Name" option-value="Id" use-input
:options="GuestStateList" emit-value map-options label="学员状态" clearable>
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<div class="col-3">
<q-select @input="refreshPage" standout="bg-primary text-white" option-value="ClassId"
option-label="ClassName" v-model="msg.ClassId" :options="ClassList" emit-value map-options label="班级"
......@@ -67,6 +94,24 @@
</div>
</div>
</div>
<div class="col row wrap q-gutter-x-md" v-if="staticObj">
<div class="col stics">
<span class="stics-name">正常学员数量</span>
<span>{{staticObj.NormalNum?staticObj.NormalNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">退课学员数量</span>
<span style="color: #F72E52">{{staticObj.DropOutNum?staticObj.DropOutNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">停课学员数量</span>
<span style="color:#2961FE;">{{staticObj.StopClassesNum?staticObj.StopClassesNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">毕业学员数量</span>
<span>{{staticObj.GraduateNum?staticObj.GraduateNum:0}}人</span>
</div>
</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="data" :columns="columns"
......@@ -74,8 +119,7 @@
<template v-slot:top>
<div class="col-2 q-table__title">学员管理</div>
<q-space />
<q-btn color="accent" size="sm" class="q-mr-md" label="临时上课邀请"
@click="isShowProvisionalInvite=true" />
<q-btn color="accent" size="sm" class="q-mr-md" label="临时上课邀请" @click="isShowProvisionalInvite=true" />
</template>
<template v-slot:body-cell-GuestName="props">
<q-td :props="props">
......@@ -106,23 +150,14 @@
</template>
<template v-slot:body-cell-optioned="props">
<q-td :props="props">
<q-btn flat size="xs" color="accent" style="font-weight:400" label="停课"
@click="ShowStopLesson(props.row)" v-if="props.row.GuestState===1"/>
<q-btn flat size="xs" color="accent" style="font-weight:400" label="停课" @click="ShowStopLesson(props.row)"
v-if="props.row.GuestState===1" />
<q-btn flat size="xs" color="accent" style="font-weight:400" label="课耗明细" @click="goUrl(props.row)" />
<!-- <q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left:10px;">
<q-list>
<q-item clickable v-close-popup @click="goUrl(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>
<StopLesson-form v-if="isShowStopLesson" :setObj="stuObj" @success="reloadPage" @close="closeMenuSaveForm"/>
<ProvisionalInvite-form v-if="isShowProvisionalInvite" @close="closeMenuSaveForm"/>
<StopLesson-form v-if="isShowStopLesson" :setObj="stuObj" @success="reloadPage" @close="closeMenuSaveForm" />
<ProvisionalInvite-form v-if="isShowProvisionalInvite" @close="closeMenuSaveForm" />
</div>
<studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType" :save-obj="stuOption"
......@@ -146,6 +181,9 @@
import {
GetStuPageList
} from "../../api/teacher/student"
import {
queryGuestStateList,
} from "../../api/sale/sale.js";
import StopLessonForm from '../../components/teacher/stopLessonForm'
import ProvisionalInviteForm from '../../components/teacher/provisionalInviteForm'
import studentRightForm from "../../components/school/student/studentRight-form";
......@@ -155,9 +193,6 @@
title: "学员管理"
},
components: {
// classForm,
// classinfoForm,
// othercourseForm,
StopLessonForm,
ProvisionalInviteForm,
studentRightForm
......@@ -236,6 +271,7 @@
ClassId: 0, //班级
CourseId: 0, //课程
EnterID: 0, //销售
GuestState: "", //学员状态
},
pageCount: 0,
EmployeeList: [], //销售下拉列表
......@@ -244,13 +280,15 @@
AllCourseList: [],
ClassList: [], //班级下拉
allClassList: [],
isShowStopLesson:false,
stuObj:{},
isShowProvisionalInvite:false,
isShowStopLesson: false,
stuObj: {},
isShowProvisionalInvite: false,
isShowStuRight: false,
isJudgeTrans: 1,
BelongType:1,
stuOption: null
BelongType: 1,
stuOption: null,
GuestStateList: [], //学员状态列表
staticObj: {}, //学生信息统计
}
},
created() {
......@@ -258,6 +296,7 @@
if (data) {
this.msg.Teacher_Id = data.data.AccountId
}
this.getGuestStateList();
this.getEmployee(0);
this.getCourseList();
this.getClass()
......@@ -266,8 +305,21 @@
this.getStuPageList();
},
methods: {
//获取学员状态列表
getGuestStateList() {
queryGuestStateList({}).then(res => {
var tempArray = res.Data;
if (tempArray) {
tempArray.forEach(item => {
if (item.Id == 1 || item.Id == 2 || item.Id == 5 || item.Id == 7) {
this.GuestStateList.push(item);
}
});
}
});
},
//点开右侧
getStuRight(obj){
getStuRight(obj) {
if (obj) {
this.stuOption = {
StuId: obj.StudentId,
......@@ -377,8 +429,9 @@
GetStuPageList(this.msg).then(res => {
this.loading = false
if (res.Code === 1) {
this.data = res.Data.PageData
this.pageCount = res.Data.PageCount
this.data = res.Data.pageModel.PageData;
this.pageCount = res.Data.pageModel.PageCount;
this.staticObj = res.Data.StudentStatic;
}
}).catch(err => {
this.loading = false
......@@ -397,11 +450,11 @@
this.getStuPageList();
},
goUrl(i) {
let path="/teacher/studentsClassSee"
let queryObj={
StudentId: i.Id,
TeacherId: i.Teacher_Id,
ClassId: i.ClassId
let path = "/teacher/studentsClassSee"
let queryObj = {
StudentId: i.Id,
TeacherId: i.Teacher_Id,
ClassId: i.ClassId
}
this.OpenNewUrl(path, queryObj)
// this.$router.push({
......@@ -414,25 +467,24 @@
// })
},
//显示弹窗
ShowStopLesson(item){
this.isShowStopLesson=true;
this.stuObj=item
ShowStopLesson(item) {
this.isShowStopLesson = true;
this.stuObj = item
},
//关闭弹窗
closeMenuSaveForm() {
this.isShowStopLesson = false;
this.isShowProvisionalInvite=false;
this.isShowProvisionalInvite = false;
},
//刷新页面
//刷新页面
reloadPage() {
this.isShowStopLesson = false;
this.isShowProvisionalInvite=false;
this.isShowProvisionalInvite = false;
this.getStuPageList();
},
}
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
</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" style="justify-content:space-between;">
<div class="col row wrap" style="display:none;">
<div class="col-2 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="mini"
type="year" placeholder="选择年">
</el-date-picker>
</template>
</q-field>
</div>
<div class="col-2">
<q-select filled dense stack-label @input="getList" clearable option-value="TId" @filter="filterTeacherFn" use-input option-label="TeacherName" v-model="msg.TeacherId"
ref="Teacher_Id" :options="TeacherList" label="教师团队" class="col-6 q-pr-lg q-pb-lg" emit-value
map-options />
</div>
</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';
import {
getTeacherDropDownList
} from "../../api/school/index";
export default {
props: {},
meta: {
title: "教师年度数据统计"
},
components: {
yearFirst
},
data() {
return {
tabCheck: 1,
dataList: [],
msg: {
YearStr: '',
TeacherId:'',
rowsPerPage: 0
},
TeacherList:[],
AllTeacherList:[]
}
},
created() {
},
mounted() {
let d = new Date();
this.msg.YearStr = d.getFullYear().toString();
this.GetTeacherList();
this.getList();
},
methods: {
//获取教师下拉
GetTeacherList() {
getTeacherDropDownList({}).then(res => {
if (res.Code == 1) {
this.TeacherList = res.Data;
this.AllTeacherList = res.Data;
}
});
},
//课程教师
filterTeacherFn(val, update, abort) {
update(() => {
this.TeacherList = this.AllTeacherList.filter(
v => v.TeacherName.indexOf(val) > -1
);
});
},
//下载文件
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
......@@ -869,6 +869,16 @@ const routes = [{
component: () =>
import("pages/administration/dropSchoolManage.vue")
},
{
path: "/administration/starBucks/starBucksTotal", //星巴克-统计
component: () =>
import("pages/administration/starBucks/starBucksTotal.vue")
},
{
path: "/administration/starBucks/starBucksDetail", //星巴克-明细
component: () =>
import("pages/administration/starBucks/starBucksDetail.vue")
},
{
path: "/sale/japaneseTrain", //日语培训列表
component: () =>
......@@ -1170,6 +1180,16 @@ const routes = [{
component: () =>
import("pages/activity/myadvert.vue")
},
{
path: "/activity/questionnaireList", //问卷调查表
component: () =>
import("pages/activity/questionnaireList.vue")
},
{
path: "/activity/resultPageList", //查看结果
component: () =>
import("pages/activity/resultPageList.vue")
},
{
path: "/sale/appointManagement", //销售 约课管理
component: () =>
......@@ -1391,6 +1411,21 @@ const routes = [{
component: () =>
import("pages/teacher/myClass")
},
{
path: "/teacher/dayStatic", //教师每日数据统计
component: () =>
import("pages/teacher/dayStatic")
},
{
path: "/teacher/monthStatic", //教师月度统计
component: () =>
import("pages/teacher/monthStatic")
},
{
path: "/teacher/yearStatic", //教师年度统计
component: () =>
import("pages/teacher/yearStatic")
},
{
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