Commit f74032b6 authored by 吴春's avatar 吴春

1

parent 86585438
...@@ -62,7 +62,8 @@ ...@@ -62,7 +62,8 @@
"eslint-plugin-node": "^11.0.0", "eslint-plugin-node": "^11.0.0",
"eslint-plugin-promise": "^4.0.1", "eslint-plugin-promise": "^4.0.1",
"eslint-plugin-standard": "^4.0.0", "eslint-plugin-standard": "^4.0.0",
"eslint-plugin-vue": "^6.1.2" "eslint-plugin-vue": "^6.1.2",
"webpack": "^4.23.0"
}, },
"browserslist": [ "browserslist": [
"ie >= 11", "ie >= 11",
......
...@@ -900,7 +900,125 @@ export function GetReserveClassBalanceSheet(data) { ...@@ -900,7 +900,125 @@ export function GetReserveClassBalanceSheet(data) {
data data
}); });
} }
/**
* 获取小语种业绩期数分页列表
*/
export function GetLanguagePeriodPage(data) {
return request({
url: '/LanguageRule/GetPersonnelPeriodPage',
method: 'post',
data
});
}
/**
* 生成小语种业绩提成
*/
export function setLanguageCommissionInfo(data) {
return request({
url: '/LanguageRule/CreateEmpBonus',
method: 'post',
data
});
}
/**
* 业绩提成 获取提成期数 员工提成
*/
export function GetLanguageRulePeriod(data) {
return request({
url: '/LanguageRule/GetPersonnelPeriod',
method: 'post',
data
});
}
/**
* 业绩提成 获取期数提成 员工提成明细列表
*/
export function GetLanguagePeriodDetails(data) {
return request({
url: '/LanguageRule/GetPersonnelPeriodDetails',
method: 'post',
data
});
}
/**
* 业绩提成 获取提成可发放人员
*/
export function setSellLanguageSendEmployee(data) {
return request({
url: '/LanguageRule/SetSellAchievementsSendEmployee',
method: 'post',
data
});
}
/**
* 获取业绩期数分页列表
*/
export function GetLanguageRuleList(data) {
return request({
url: '/LanguageRule/GetLanguageRuleList',
method: 'post',
data
});
}
/**
* 市场顾问保存规则
*/
export function setLanguageRule(data) {
return request({
url: '/LanguageRule/SetLanguageRule',
method: 'post',
data
});
}
/**
* 市场顾问保存删除
*/
export function delLanguageRule(data) {
return request({
url: '/LanguageRule/RemoveLanguageRule',
method: 'post',
data
});
}
/**
* 业绩提成 获取期数提成 员工提成明细列表
*/
export function GetLanguageDetailListPage(data) {
return request({
url: '/LanguageRule/GetLanguageDetailListPage',
method: 'post',
data
});
}
/**
 * 获取课程科目列表
 * @param {JSON参数} data
 */
 export function getCourseSubject(data) {
  return request({
    url: "/Course/GetCourseSubjectList",
    method: 'post',
    data
  })
}
/** /**
* 获取下拉数据 * 获取下拉数据
*/ */
......
...@@ -731,4 +731,16 @@ export function GetBankTypeList(data) { ...@@ -731,4 +731,16 @@ export function GetBankTypeList(data) {
method: 'post', method: 'post',
data data
}); });
}
/**
* 获取学员上课记录分页列表
* @param {JSON数据} data
*/
export function GetStudentCoursePage(data) {
return request({
url: '/StudentStat/GetStudentCoursePageList',
method: 'post',
data
})
} }
\ No newline at end of file
This diff is collapsed.
<style lang="scss">
.stuList .q-table__bottom {
min-height: 0;
}
.stulistNum {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 23px;
border: 1px solid #2961fe;
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
.stuListTable {
width: 200px;
text-align: center;
}
.stuListTable tr td {
height: 40px;
}
.stuListTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
.stulistNumber {
display: inline-block;
width: 25px;
height: 25px;
text-align: center;
line-height: 22px;
border: 1px solid #2961fe;
border-radius: 50%;
cursor: pointer;
color: #2961fe;
}
.OCourseTable {
width: 600px;
text-align: center;
}
.OCourseTable tr td {
height: 40px;
}
.OCourseTable tr th {
height: 40px;
background-color: rgb(238, 238, 239);
}
</style>
<template>
<div class="stuList" :style="{ height: height }">
<q-table :pagination="pageMsg" :loading="loading" no-data-label="暂无相关数据" flat
:style="{ height: height }" class="sticky-right-column-table sticky-tow-column-table"
:class="{ 'my-sticky-header-table': height != 'unset' }" separator="none" :data="dataList" :columns="columns"
row-key="StuId" hide-bottom>
<template v-if="showHeader" v-slot:top>
<div class="col-2 q-table__title">学员信息
<template v-if="Count>0">(共{{Count}}条)</template>
</div>
<q-space />
<div class="page-option" v-if="!pushMode">
<q-btn v-if="authObj && authObj.isShowDownload&&IsDownLoadStu()" color="accent" class="q-mr-md" size="sm" icon="download"
label="下载" @click="DownLoadStuLearnChapterStatic" />
</div>
</template>
<template v-slot:body-cell-StuIcon="props">
<q-td auto-width :props="props">
<q-avatar size="md" v-if="props.value">
<img :src="props.value" />
</q-avatar>
<q-avatar size="md" color="teal-10" text-color="white" v-if="!props.value">
{{ props.row.StuName.substring(0, 1) }}</q-avatar>
</q-td>
</template>
<template v-slot:body-cell-StuName="props">
<q-td :props="props">
<div class="text-blue cursor-pointer" @click="getStuRight(props.row, 1)">
{{ props.value }}
</div>
</q-td>
</template>
</q-table>
<studentRight-form v-if="isShowStuRight" :BelongType="BelongType"
:checkType="checkType" :save-obj="stuOption" @close="closeStuForm" @success="refreshStuList"
@reload="referDataHandler">
</studentRight-form>
</div>
</template>
<script>
import studentRightForm from "./studentRight-form";
import {
mapGetters
} from "vuex";
import {
SetStudentAssistBatch,
BatchForwardStudent
} from "../../../api/sale/sale";
import {
EduDownLoad
} from "../../../api/common/common";
import {
queryEmployee
} from "../../../api/users/user";
import {
SetStudentSureConsult, //邀约
} from "../../../api/school/index";
import { date } from 'quasar'
export default {
props: {
Count: {
type: Number,
default: null
},
//数据列表
dataList: {
type: Array,
default: null
},
loading: {
type: Boolean,
default: false
},
//权限验证
authObj: {
type: Object,
default: null
},
//查询参数
queryMsg: {
type: Object,
default: null
},
showHeader: {
type: Boolean,
default: true
},
height: {
type: String,
default: "unset"
},
noSelect: {
type: Boolean,
default: false
}
},
components: {
studentRightForm,
},
data() {
return {
columns: [{
name: "StuIcon",
label: "",
field: "StuIcon",
align: "left"
},
{
name: "StuName",
required: true,
label: "昵称",
align: "left",
field: row => row.StuName
},
{
name: "CourseName",
label: "课程",
field: "CourseName",
align: "left"
},
{
name: "ClassName",
label: "班级",
field: "ClassName",
align: "left"
},
{
name: "OrderId",
label: "订单号",
field: "OrderId",
align: "left"
}
],
pageMsg: {
rowsPerPage: 12
},
isShowStuForm: false,
resetLoading: false,
isShowStuRight: false,
stuOption: null,
isShowAdd: false,
selection: [],
BelongType: 1,
pushMode: false, //是否显示推送按钮
pushing: false,
assistListFormat: [],
checkType: 1, //打开右侧弹窗类型
isShowAbroad: false, //是否显示转留学就业订单弹窗
userInfo: {}, //当前登录人员
isShowTrans: false,
transMsg: {
StuIds: "",
CreateBy: ""
},
//员工列表
employeeList: [],
myEmployeeList: [],
isInvite: false
};
},
watch: {
dataList: {
handler(val) {
this.selection = [];
},
deep: true
}
},
created() {
this.userInfo = this.getLocalStorage();
// 邀约功能权限
this.isInvite = false;
if (
this.userInfo &&
this.userInfo.ActionMenuList &&
this.userInfo.ActionMenuList.length > 0
) {
this.userInfo.ActionMenuList.forEach(x => {
if (x.FunctionCode == "isInvite") {
this.isInvite = true;
}
});
}
},
mounted() {
this.getEmployeeList();
},
computed: {
...mapGetters(["logo", "name"])
},
methods: {
//是否有下载客户资料权限
IsDownLoadStu() {
var isHaveAuth = false;
if (
this.userInfo &&
this.userInfo.ActionMenuList &&
this.userInfo.ActionMenuList.length > 0
) {
this.userInfo.ActionMenuList.forEach(x => {
if (x.FunctionCode == "DownLoad_Stu") {
isHaveAuth = true;
}
});
}
return isHaveAuth;
},
//下载消课统计
DownLoadStuLearnChapterStatic() {
//导出
var msg = JSON.parse(JSON.stringify(this.queryMsg));
if(msg.CourseId>0||msg.StuName){
EduDownLoad("/Scroll/DownLoadStuLearnChapterStatic", msg, "消课统计.xls", res => {
});
}
},
//刷新列表
refreshStuList() {
this.$emit("success");
this.selection = [];
},
EditStudent(obj) {
if (obj) {
this.stuOption = obj;
} else {
this.stuOption = null;
}
this.isShowAdd = true;
},
closeStuForm() {
this.isShowStuForm = false;
this.isShowStuRight = false;
this.isShowAdd = false;
this.isShowAbroad = false;
},
//点击学生姓名弹出
getStuRight(obj, type) {
if (obj) {
this.stuOption = obj;
this.BelongType = obj.BelongType;
this.checkType = type;
} else {
this.stuOption = null;
}
this.isShowStuRight = true;
},
referDataHandler() {
this.$emit("reload");
},
errorMsg(msg) {
this.$q.notify({
type: "negative",
position: "top",
message: msg
});
},
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 1
}).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
});
},
//筛选员工
filterEmployee(val, update, abort) {
update(() => {
this.myEmployeeList = this.employeeList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
//保存批量转交
saveTransForm() {
if (this.selection.length == 0) {
this.$q.notify({
type: "negative",
position: "top",
message: "请选择推送学员"
});
return;
}
if (this.transMsg.CreateBy == "") {
this.$q.notify({
type: "negative",
position: "top",
message: "请选择接收人员!"
});
return;
}
let newArr = [];
this.selection.forEach(x => {
newArr.push(x.StuId);
});
this.transMsg.StuIds = newArr.toString();
BatchForwardStudent(this.transMsg).then(res => {
if (res.Code == 1) {
this.refreshStuList();
this.selection = [];
this.transMsg.StuIds = "";
this.transMsg.CreateBy = "";
this.pushMode = false;
this.$q.notify({
type: "iconfont icon-chenggong",
position: "top",
message: r.Message
});
}
});
}
}
};
</script>
<style>
.baseSet_Title {
width: 120px !important;
padding: 18px 0 0 16px;
text-align: right;
}
.CommissionDetail .border-bottom {
/* border-bottom: 1px dashed #EEE; */
padding-bottom: 5px;
margin-bottom: 5px;
}
.CommissionDetail .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.CommissionDetail ._icon_btn i.icon-sousuo {
background-color: #47BF8C;
}
.CommissionDetail ._icon_btn i {
width: 26px;
height: 26px;
display: inline-block;
color: white !important;
border-radius: 50%;
text-align: center;
line-height: 26px;
margin-right: 10px;
cursor: pointer;
outline: none;
}
.CommissionDetail .el-table td,
.el-table th {
padding: 5px 0;
}
</style>
<template>
<div class="page-body CommissionDetail">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<q-btn  color="primary"  size="11px"  label="返回"   @click="goreturn"  style="margin-left:10px" />
</div>
</div>
</div>
<template>
<el-table ref="filterTable" :data="tableData" v-loading='loading'
:header-cell-style="{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<!-- <el-table-column prop="SchoolName" label="校区" :filters='SchoolNamelist' :filter-method="filterHandler">
</el-table-column> -->
<!-- <el-table-column prop="DeptName" label="部门" :filters='DeptNamelist' :filter-method="filterHandler">
</el-table-column> -->
<el-table-column prop="EmployeeName" label="销售" :filters='UserNamelist' :filter-method="filterHandler">
</el-table-column>
<el-table-column prop="CurOrderMoney" label="订单金额" sortable :sort-method="StudentCount"> </el-table-column>
<el-table-column prop="CurGuestNum" label="客人数量" sortable :sort-method="StudentCount"> </el-table-column>
<el-table-column prop="CurRewardMoney" label="提成金额" sortable :sort-method="CurrentPeriodMoney"> </el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<div class="_icon_btn">
<el-tooltip class="item" effect="dark" content="查看" placement="top">
<i class="iconfont icon-sousuo" @click="goUrl('Language/languageDetailList',scope.row.UserId)"></i>
</el-tooltip>
</div>
</template>
</el-table-column>
</el-table>
</template>
</div>
</template>
<script>
import {
GetClassTypePageList,
} from '../../../api/system/index';
import {
GetLanguageRulePeriod,
} from '../../../api/finance/index'
import {
getClassDropDownList,
} from "../../../api/school/index";
export default {
meta: {
title: "销售提成详情"
},
props: {},
components: {},
data() {
return {
loading: false,
//列表数据参数
msg: {
PeriodId: 0,
},
pageCount: 0,
persistent: false,
listData: {},
tableData: [],
company: [],
department: [],
see_tcdetailed: false,
SchoolNamelist: [],
DeptNamelist: [],
UserNamelist: [],
}
},
created() {
// let userinfo = this.getLocalStorage();
// userinfo.ActionMenuList.map(x => { //判断权限
// if (x.FunctionCode == "see_tcdetailed") { //判断是否可以查看其他明细
// this.see_tcdetailed = true;
// }
// })
// if (this.see_tcdetailed == false) {
// this.msg.UserId = userinfo.Id
// }
},
mounted() {
if (this.$route.query && this.$route.query.id) {
this.msg.PeriodId = this.$route.query.id
}
this.getList()
},
methods: {
getList() {
if (this.msg)
this.loading = true;
GetLanguageRulePeriod(this.msg).then(res => {
if (res.Code == 1) {
this.loading = false;
this.tableData = res.Data;
this.SchoolNamelist = [];
this.DeptNamelist = [];
this.UserNamelist = [];
this.tableData.forEach(x => {
let obj = {
text: x.SchoolName,
value: x.SchoolName
}
let obj2 = {
text: x.DeptName,
value: x.DeptName
}
let obj3 = {
text: x.UserName,
value: x.UserName
}
this.SchoolNamelist.push(obj)
this.DeptNamelist.push(obj2)
this.UserNamelist.push(obj3)
})
this.SchoolNamelist = this.unique(this.SchoolNamelist)
this.DeptNamelist = this.unique(this.DeptNamelist)
this.UserNamelist = this.unique(this.UserNamelist)
}
})
},
unique(arr, Name) { //数组去重
const res = new Map();
return arr.filter(
(list) => !res.has(list.text) && res.set(list.text, 1)
);
},
goUrl(path, id) {
this.$router.push({
path: '/financial/' + path,
query: {
userId: id,
preriodId: this.$route.query.id,
blank: 'y',
}
})
},
filterHandler(value, row, column) {
const property = column['property'];
return row[property] === value;
},
StudentCount(a, b, c) {
return a.StudentCount - b.StudentCount;
},
CurrentPeriodMoney(a, b) {
return a.CurrentPeriodMoney - b.CurrentPeriodMoney;
},
OtherMoney(a, b) {
return a.OtherMoney - b.OtherMoney;
},
CommissionMoney(a, b) {
return a.CommissionMoney - b.CommissionMoney;
},
FinalCommission(a, b) {
return a.FinalCommission - b.FinalCommission;
},
goreturn() {
this.$router.go(-1);
}
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
<style>
@import "../css/cssReset.css";
.baseSet_Title {
width: 120px !important;
padding: 18px 0 0 16px;
text-align: right;
}
.salesRules .border-bottom {
/* border-bottom: 1px dashed #EEE; */
padding-bottom: 5px;
margin-bottom: 5px;
}
.salesRules .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.marketRules .border-bottom {
padding-bottom: 5px;
margin-bottom: 5px;
}
.marketRules .text-bottom {
height: 32px;
line-height: 32px;
margin-bottom: 10px;
}
.marketRules .singeRowTable tr th {
border: 1px solid #d2d2d2;
}
.cycle_Title {
font-size: 20px;
font-weight: 500;
color: #1f2329;
display: flex;
align-items: center;
justify-content: space-between;
}
</style>
<template>
<div class="page-body marketRules">
<div class="page-search row items-center">
<div class="col row wrap q-mr-lg q-col-gutter-md"></div>
</div>
<template>
<div class="cycle_Title">
小语种提成规则
<q-btn color="accent" size="sm" icon="add" label="新增规则" @click="AddMsg()" />
</div>
<div
class="cm_content"
style="width: 100%;margin-bottom: 35px;margin-top: 10px;"
v-for=" ( item , index ) in dataList "
:key="index"
>
<table
class="po_content singeRowTable"
style="border:1px solid #E6E6E6;"
cellspacing="0"
cellpadding="0"
v-loading="loading"
>
<tr>
<th width="30%" style="min-width: 100px;max-width: 100px;">方案名称</th>
<th width="60%">课程类型</th>
<th width="10%">操作</th>
</tr>
<tr>
<td>
<span>{{ item.PlanName }}</span>
</td>
<td style="padding: 0 10px;">
<span v-for="( son , sIndex ) in item.CourseSubjectList" :key="sIndex">
<span v-if="sIndex<4"> {{ son.SubjectName }}{{item.CourseSubjectList.length==sIndex+1?'':'、'}}</span>
</span>
<el-popover
v-if="item.CourseSubjectList.length>=5"
placement="top-start"
title="科目"
width="400"
trigger="click"
:content="item.CourseListtext">
<el-button slot="reference" style="border: none;" type="text">查看更多</el-button>
</el-popover>
</td>
<td>
<q-btn
flat
size="xs"
icon="edit"
color="accent"
style="font-weight:400"
label="编辑"
@click="EditTask(item)"
/>
<q-btn
flat
size="xs"
icon="delete"
color="negative"
style="font-weight:400"
label="删除"
@click="RemoveTask(item.Id)"
/>
</td>
</tr>
</table>
<div style="width:100%;overflow-x: auto;">
<table v-if="item.DetailList.length>0||item.SendType=='1'"
class="po_content singeRowTable"
style="border:1px solid #E6E6E6;"
cellspacing="0"
cellpadding="0"
>
<tr>
<td rowspan="2" width="100" style="min-width: 100px;">提成比例</td>
<th style="min-width: 220px;"
v-for="( son , sIndex ) in item.DetailList"
:key="sIndex"
>{{ son.StartNum }} <span>{{son.EndNum && son.EndNum!=-1?'<人数<=':'<人数'}}</span><span v-if="son.EndNum && son.EndNum!=-1">{{ son.EndNum }}</span></th>
</tr>
<tr style="">
<td style="min-width: 220px;" v-for="( son , sIndex ) in item.DetailList" :key="sIndex">{{ son.RatioMoney }}%</td>
</tr>
</table>
</div>
</div>
<div
v-if="dataList.length == 0"
style="width: 100%;border:1px solid #E6E6E6;display: flex;align-items: center;justify-content: center;height: 60px;"
>暂无数据</div>
</template>
<languageCommissionfrom
v-if="persistent"
:isAdd="isAdd"
:loyeeList='loyeeList'
:CourseList='CourseList'
:selectData= 'selectData'
@close="closeForm"
@success="refreshList"
></languageCommissionfrom>
</div>
</template>
<script>
import {
queryEmployee
} from '../../../api/users/user'
import {
GetLanguageRuleList,
setLanguageRule,
delLanguageRule,
getCourseSubject
} from '../../../api/finance/index'
import {
getSchoolDropdown,
} from '../../../api/school/index'
import languageCommissionfrom from "../../../components/finance/languageCommissionfrom";
export default {
meta: {
title: "销售提成规则"
},
components: {
languageCommissionfrom
},
props: {},
data() {
return {
persistent: false,
loading: false,
dataList: [], //列表数据
isSalerule_preserve: false,
isAdd: false,
CourseList:[],//科目列表
loyeeList: [],//人员列表
selectData:{},
}
},
created() {
let userinfo = this.getLocalStorage();
userinfo.ActionMenuList.map(x => {//判断权限
if (x.FunctionCode == "Salerule_preserve") {//判断是否有保存的权限
this.isSalerule_preserve = true;
return
}
})
},
mounted() {
this.GetLanguageRuleList(); //获取规则
this.getEmployeeList();
this.getCourseList();//获取课程下拉
// this.getSchool();//校区下拉
},
methods: {
GetLanguageRuleList() {
this.loading = true;
GetLanguageRuleList({}).then(res => {
if (res.Code == 1) {
this.dataList = res.Data;
this.dataList.forEach(j=>{
if(j.CourseSubjectList.length>=5){//课程
j.CourseListtext = '';
j.CourseSubjectList.forEach(x=>{
j.CourseListtext = j.CourseListtext+x.SubjectName+'、'
})
}
})
}
this.loading = false
})
},
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 0
}).then(res => {
this.loyeeList = res.Data;
})
},
//获取课程
getCourseList() {
getCourseSubject({
IsQPrice: 1
}).then(res => {
if (res.Code == 1) {
this.CourseList = res.Data;
}
})
},
getSchool() {
getSchoolDropdown({}).then(res => {
if (res.Code == 1) {
this.SchoolList = res.Data;
}
})
},
refreshList(data) { //保存规则
setLanguageRule(data).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: res.Message,
position: 'top'
})
this.persistent = false;
this.GetLanguageRuleList(); //获取规则
}
})
},
AddMsg() {//新增
this.selectData = {}
this.persistent = true;
this.isAdd = true;
},
EditTask(item){//编辑
this.persistent = true;
this.selectData = item
this.isAdd = false;
},
RemoveTask(Id){//删除
let delMsg = {
Id: Id
};
this.$q.dialog({
title: '提示信息',
message: '是否确定删除?',
cancel: true,
persistent: true,
ok: "确定",
cancel: "取消",
}).onOk(() => {
delLanguageRule(delMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '删除成功!',
position: 'top'
})
this.GetLanguageRuleList();
}
})
}).onCancel(() => {
});
},
closeForm() {
this.persistent = false;
},
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
This diff is collapsed.
<style>
.Sysuser_Date .el-input__inner {
background-color: transparent;
width: 100%;
border: none;
}
.Sysuser_Date .el-range-input {
background-color: transparent;
}
</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-3">
<q-input @keyup.enter="resetSearch" @clear="resetSearch" dense clearable filled v-model="msg.StuName" label="昵称" maxlength="20" />
</div>
<div class="col-3" >
<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">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
</div>
</div>
<div class="page-content">
<stulist :dataList="data" @success="refreshPage" :loading="loading" ref="stuList" :authObj="AuthObj"
:queryMsg="msg" :Count="AuthObj.Count">
</stulist>
<div class="row" style="justify-content: flex-end;padding: 5px 20px">
<q-pagination v-model="msg.pageIndex" :max="pageCount" @input="changePage" class="full-width justify-end"
color="primary" :input="true">
</q-pagination>
</div>
</div>
</div>
</template>
<script>
import {
GetStudentTypeList,
GetStudentCoursePage
} from '../../api/school/index'
import {
queryEmployee
} from '../../api/users/user'
import {
resetPassword
} from '../../api/users/user.js'
import {
GetStudentAdvisorConfigList
} from "../../api/customerstudent/customerstudent";
import {
queryCourseDropdownList
} from "../../api/course/index";
import stulist from '../../components/school/student/stuCourselist'
import {
mapGetters
} from "vuex";
export default {
meta: {
title: "客户管理"
},
components: {
stulist
},
data() {
return {
currentUrl: "",
data: [],
CourseList: [],
AllCourseList:[],
loading: true,
msg: {
pageIndex: 1,
pageSize: 12,
rowsPerPage: 12,
CourseId: 0, //课程id
StuName: "",//学生
ClassScrollType:2,
},
pageCount: 0,
AuthObj: {
isShowDownload: true,
Count: 0
},
}
},
computed: {
...mapGetters(["userInfo"])
},
created() {
},
mounted() {
this.currentUrl = this.$route.path;
this.getCourseList();
this.getStudent()
},
methods: {
changeCourse(val) {
this.msg.CourseId = val;
this.getStudent();
this.resetSearch();
},
//筛选课程
filterCourse(val, update) {
update(() => {
if (val === "") {
this.CourseList = JSON.parse(JSON.stringify(this.AllCourseList));
} else {
const needle = val.toLowerCase();
this.CourseList = this.AllCourseList.filter(
v => v.CourseName.toLowerCase().indexOf(needle) > -1
);
}
});
},
resetSearch() {
this.msg.pageIndex = 1;
this.getStudent()
},
//获取课程
getCourseList() {
queryCourseDropdownList({}).then(res => {
if (res.Code == 1) {
var tempArray = res.Data;
if (!tempArray) {
tempArray = [];
}
tempArray.unshift({
CourseId: 0,
CourseName: "不限"
});
this.CourseList = tempArray;
this.AllCourseList = tempArray;
}
});
},
changePage(val) {
this.msg.pageIndex = val;
this.getStudent();
},
getStudent() {
this.loading = true;
GetStudentCoursePage(this.msg).then(res => {
this.loading = false;
this.data = res.Data.PageData
this.pageCount = res.Data.PageCount
this.AuthObj.Count = res.Data.Count
}).catch(() => {
this.loading = false
})
},
refreshPage() {
this.getStudent()
},
},
}
</script>
<style lang="sass">
@import url('~assets/css/table.sass')
</style>
...@@ -37,6 +37,12 @@ ...@@ -37,6 +37,12 @@
<q-separator vertical /> <q-separator vertical />
<q-btn dense text-color="primary" flat unelevated :label="viewType == 'day' ? '下一天' : '下一周'" <q-btn dense text-color="primary" flat unelevated :label="viewType == 'day' ? '下一天' : '下一周'"
@click="calendarNext" /> @click="calendarNext" />
<q-separator vertical />
<!-- <q-btn v-if="msg.ClassType==2" dense text-color="primary" icon="download" flat unelevated label="下载排课表"
@click="DownLoadStuLearnChapterStatic" /> -->
<div style="margin-left:10px;"> <q-btn v-if="msg.ClassType==3" color="accent" class="q-mr-md" size="sm" icon="download"
label="下载排课表" @click="DownLoadStuLearnChapterStatic" /></div>
</div> </div>
<div class="viewbox"> <div class="viewbox">
<q-calendar v-model="selectedDate" :view="viewType" ref="calendar" locale="zh-CN" class="calendar-container " <q-calendar v-model="selectedDate" :view="viewType" ref="calendar" locale="zh-CN" class="calendar-container "
...@@ -251,6 +257,9 @@ ...@@ -251,6 +257,9 @@
getTeacherDropDownList, getTeacherDropDownList,
queryClassRoomList queryClassRoomList
} from "../../api/school/index"; } from "../../api/school/index";
import {
EduDownLoad
} from "../../api/common/common.js";
import SubscribeForm from "../../components/stuMan/subscribe/subscribeForm"; import SubscribeForm from "../../components/stuMan/subscribe/subscribeForm";
import QCalendar from "@quasar/quasar-ui-qcalendar"; import QCalendar from "@quasar/quasar-ui-qcalendar";
...@@ -392,6 +401,13 @@ ...@@ -392,6 +401,13 @@
return { return {
[`text-white bg-${bg}`]: true [`text-white bg-${bg}`]: true
}; };
},
//下载课表
DownLoadStuLearnChapterStatic() {
EduDownLoad("/TeacherClass/GetAppointmentPlanStatExcel", this.msg, "排课表统计.xls", res => {
});
}, },
badgeStyles(event, type, timeStartPos, timeDurationHeight, index, total) { badgeStyles(event, type, timeStartPos, timeDurationHeight, index, total) {
const s = {}; const s = {};
......
...@@ -53,6 +53,11 @@ const routes = [{ ...@@ -53,6 +53,11 @@ const routes = [{
component: () => component: () =>
import ("pages/school/student.vue") import ("pages/school/student.vue")
}, },
{
path: "/school/studentCourse", //学员上课记录管理
component: () =>
import ("pages/school/studentCourse.vue")
},
{ {
path: "/school/sysuser", //后台用户管理 path: "/school/sysuser", //后台用户管理
component: () => component: () =>
...@@ -1983,6 +1988,31 @@ const routes = [{ ...@@ -1983,6 +1988,31 @@ const routes = [{
path: "/stu/subscribe", //预约课程 path: "/stu/subscribe", //预约课程
component: () => component: () =>
import ("pages/studyAbroad/subscribe") import ("pages/studyAbroad/subscribe")
},
{
path: "/financial/Language/languagePeriodsList", // 小语种业绩提成 分期列表
component: () =>
import ("pages/financial/Language/languagePeriodsList.vue")
},
{
path: "/financial/Language/languageCommission", // 小语种业绩提成人员列表
component: () =>
import ("pages/financial/Language/languageCommission.vue")
},
{
path: "/financial/Language/languageDetailList", // 小语种业绩提成人员列表
component: () =>
import ("pages/financial/Language/languageDetailList.vue")
},
{
path: "/financial/Language/languageRule", // 小语种业绩提成规则页
component: () =>
import ("pages/financial/Language/languageRule.vue")
},
{
path: "/financial/Language/languageStatistics", // 小语种业绩提成统计
component: () =>
import ("pages/financial/Language/languageStatistics.vue")
} }
], ],
......
...@@ -81,7 +81,8 @@ export default { ...@@ -81,7 +81,8 @@ export default {
//域名管理对象 //域名管理对象
Vue.prototype.domainManager = function () { Vue.prototype.domainManager = function () {
let domainUrl = 'http://192.168.10.214'; //let domainUrl = 'http://192.168.10.214';
let domainUrl = 'http://192.168.10.226';
let viewFileUrl = 'http://192.168.10.214:8120'; let viewFileUrl = 'http://192.168.10.214:8120';
let mallUrl = "http://192.168.10.2:8088"; let mallUrl = "http://192.168.10.2:8088";
......
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