Commit dfd0be6e authored by 罗超's avatar 罗超

新增待办消息气泡和动态切换消息通知功能

parent 4cf4355a
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
:isComponents="true" :isComponents="true"
:billId="msg.billId" :billId="msg.billId"
:receipt="msg.receipt" :receipt="msg.receipt"
@success="refreshPage"
></changeClassManager> ></changeClassManager>
</div> </div>
</div> </div>
...@@ -82,6 +83,9 @@ export default { ...@@ -82,6 +83,9 @@ export default {
} }
}) })
.catch(() => {}); .catch(() => {});
},
refreshPage() {
this.$root.$emit("updateTodoList");
} }
} }
}; };
......
...@@ -282,6 +282,7 @@ export default { ...@@ -282,6 +282,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
} }
} }
}; };
......
...@@ -106,6 +106,7 @@ export default { ...@@ -106,6 +106,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
}, },
changePage() { changePage() {
this.getStudent(); this.getStudent();
......
...@@ -41,15 +41,10 @@ ...@@ -41,15 +41,10 @@
</div> </div>
<div style="height:calc(100% - 158px)"> <div style="height:calc(100% - 158px)">
<stulist <stulist
:dataList="stus" :outData="stus"
@reload="getStudent" :outLoading="loading"
@success="refreshPage" :pageSize="msg.pageSize"
:loading="loading" :isComponent="true"
ref="stuList"
:showHeader="false"
:isJudgeTrans="isJudgeTrans"
height="100%"
:noSelect="true"
></stulist> ></stulist>
</div> </div>
<div class="row" style="justify-content: flex-end;padding: 5px 20px"> <div class="row" style="justify-content: flex-end;padding: 5px 20px">
...@@ -67,7 +62,7 @@ ...@@ -67,7 +62,7 @@
</template> </template>
<script> <script>
import stulist from "../school/student/stulist"; import stulist from "../../pages/stuMan/stuList.vue";
import { getGraduateStudent } from "../../api/stuMan/index"; import { getGraduateStudent } from "../../api/stuMan/index";
export default { export default {
components: { stulist }, components: { stulist },
...@@ -80,7 +75,7 @@ export default { ...@@ -80,7 +75,7 @@ export default {
pageCount: 0, pageCount: 0,
msg: { msg: {
PageIndex: 1, PageIndex: 1,
pageSize: 12, pageSize: 15,
KeyWords: "" KeyWords: ""
} }
}; };
...@@ -110,6 +105,7 @@ export default { ...@@ -110,6 +105,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
}, },
changePage() { changePage() {
this.getStudent(); this.getStudent();
......
...@@ -14,7 +14,22 @@ ...@@ -14,7 +14,22 @@
:name="x.id.toString()" :name="x.id.toString()"
:icon="`iconfont ${x.icon}`" :icon="`iconfont ${x.icon}`"
:label="x.name" :label="x.name"
></q-tab> content-class="todo-box-tab-class"
>
<div
class="col row justify-end"
v-if="
childTodoTipList[`${x.value}`] &&
childTodoTipList[`${x.value}`] != 0
"
>
<q-badge
rounded
color="red"
:label="childTodoTipList[`${x.value}`]"
/>
</div>
</q-tab>
</q-tabs> </q-tabs>
</div> </div>
<div class="col bg-white rounded-borders full-height"> <div class="col bg-white rounded-borders full-height">
...@@ -80,6 +95,7 @@ import payee from "./payee.vue"; ...@@ -80,6 +95,7 @@ import payee from "./payee.vue";
import business from "./business.vue"; import business from "./business.vue";
import financialDocuments from "../../pages/financial/financalDocument/FinancialDocuments.vue"; import financialDocuments from "../../pages/financial/financalDocument/FinancialDocuments.vue";
export default { export default {
inject: ["todoTipList"],
components: { components: {
todoToday, todoToday,
todoStu, todoStu,
...@@ -101,67 +117,83 @@ export default { ...@@ -101,67 +117,83 @@ export default {
id: 1, id: 1,
name: "今日需联系线索", name: "今日需联系线索",
msg: 0, msg: 0,
icon: "icon-xiansuo" icon: "icon-xiansuo",
value: "TodayClueCount"
}, },
{ {
id: 2, id: 2,
name: "今日需联系学员", name: "今日需联系学员",
msg: 0, msg: 0,
icon: "icon-xueyuan2" icon: "icon-xueyuan2",
value: "TodayConnectCount"
}, },
{ {
id: 3, id: 3,
name: "分配给我的线索", name: "分配给我的线索",
msg: 0, msg: 0,
icon: "icon-fenpei" icon: "icon-fenpei",
value: "MyClueCount"
}, },
{ {
id: 4, id: 4,
name: "分配给我的学员", name: "分配给我的学员",
msg: 0, msg: 0,
icon: "icon-fenpeijiaose" icon: "icon-fenpeijiaose",
value: "MyStudentCount"
}, },
{ {
id: 5, id: 5,
name: "待申领合同", name: "待申领合同",
msg: 0, msg: 0,
icon: "icon-hetong" icon: "icon-hetong",
value: "MyOrderNotReceiveContractCount"
}, },
{ {
id: 6, id: 6,
name: "待收款提醒", name: "待收款提醒",
msg: 0, msg: 0,
icon: "icon-shoukuan" icon: "icon-shoukuan",
value: "MyOrderNotBalanceCount"
}, },
{ {
id: 7, id: 7,
name: "今日被跟进学员", name: "今日被跟进学员",
msg: 0, msg: 0,
icon: "icon-genjin" icon: "icon-genjin",
value: "TodayFollowCount"
}, },
{ {
id: 8, id: 8,
name: "即将毕业学员", name: "即将毕业学员",
msg: 0, msg: 0,
icon: "icon-biyejieye" icon: "icon-biyejieye",
value: "GraduateStudentCount"
}, },
{ {
id: 9, id: 9,
name: "待审核财务单据", name: "待审核财务单据",
msg: 0, msg: 0,
icon: "icon-caiwu1" icon: "icon-caiwu1",
value: "todoFincal"
}, },
{ {
id: 10, id: 10,
name: "待审核业务单据", name: "待审核业务单据",
msg: 0, msg: 0,
icon: "icon-yewu" icon: "icon-yewu",
value: "NotBusinessBillCount"
} }
] ]
}; };
}, },
computed: {
childTodoTipList() {
return this.todoTipList.result;
}
},
mounted() { mounted() {
this.currentMenu = this.menulist[0].id.toString(); this.currentMenu = this.menulist[0].id.toString();
//console.log(this.todoTipList);
}, },
methods: {} methods: {}
}; };
...@@ -175,5 +207,9 @@ export default { ...@@ -175,5 +207,9 @@ export default {
.q-tabs--vertical .justify-center, .q-tabs--vertical .justify-center,
.q-tabs--vertical .flex-center { .q-tabs--vertical .flex-center {
justify-content: unset !important; justify-content: unset !important;
width: 100%;
}
.todo-box-tab-class {
width: 100%;
} }
</style> </style>
...@@ -108,6 +108,7 @@ export default { ...@@ -108,6 +108,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
}, },
changePage() { changePage() {
this.getStudent(); this.getStudent();
......
...@@ -106,6 +106,7 @@ export default { ...@@ -106,6 +106,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
}, },
changePage() { changePage() {
this.getStudent(); this.getStudent();
......
...@@ -87,6 +87,8 @@ export default { ...@@ -87,6 +87,8 @@ export default {
}, },
mounted() { mounted() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
//@TODO:添加查询条件
}, },
methods: { methods: {
getStudent() { getStudent() {
......
...@@ -106,6 +106,7 @@ export default { ...@@ -106,6 +106,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
}, },
changePage() { changePage() {
this.getStudent(); this.getStudent();
......
...@@ -106,6 +106,7 @@ export default { ...@@ -106,6 +106,7 @@ export default {
}, },
refreshPage() { refreshPage() {
this.getStudent(); this.getStudent();
this.$root.$emit("updateTodoList");
}, },
changePage() { changePage() {
this.getStudent(); this.getStudent();
......
...@@ -20,7 +20,15 @@ ...@@ -20,7 +20,15 @@
:color="chosenMenu == 7 ? 'primary' : 'blue-grey-14'" :color="chosenMenu == 7 ? 'primary' : 'blue-grey-14'"
:class="[chosenMenu == 7 ? 'text-weight-bold' : '']" :class="[chosenMenu == 7 ? 'text-weight-bold' : '']"
label="待办工作" label="待办工作"
></q-btn> >
<q-badge
rounded
color="red"
:label="todoCount"
v-if="todoCount > 0"
floating
/>
</q-btn>
<q-btn <q-btn
flat flat
@click="changeMenu(5)" @click="changeMenu(5)"
...@@ -125,7 +133,7 @@ ...@@ -125,7 +133,7 @@
<script> <script>
import { GetMyNoticePageList } from "../api/course/index"; import { GetMyNoticePageList } from "../api/course/index";
import { getTodayStatic } from "../api/stuMan/index";
import teachplan from "./course/teacherLesson"; import teachplan from "./course/teacherLesson";
import okr from "./okr/index"; import okr from "./okr/index";
import alignView from "./okr/okr-align-view"; import alignView from "./okr/okr-align-view";
...@@ -164,12 +172,21 @@ export default { ...@@ -164,12 +172,21 @@ export default {
pageSize: 1, pageSize: 1,
LookTime: "" LookTime: ""
}, },
todoList: { result: null },
todoCount: 0,
isShowNotice: false, isShowNotice: false,
noticeObj: {}, noticeObj: {},
autoSendTodo: null,
TimeList: [] //存放时间作为比较 TimeList: [] //存放时间作为比较
}; };
}, },
created() {}, created() {
this.$root.$on("updateTodoList", this.initTodoList);
},
beforeDestroy() {
this.$root.$off("updateTodoList", this.initTodoList);
clearInterval(this.autoSendTodo);
},
mounted() { mounted() {
let userInfo = this.getLocalStorage(); let userInfo = this.getLocalStorage();
this.AccountType = userInfo.AccountType; this.AccountType = userInfo.AccountType;
...@@ -195,8 +212,35 @@ export default { ...@@ -195,8 +212,35 @@ export default {
this.noticeMsg.LookTime = notifyTime; this.noticeMsg.LookTime = notifyTime;
} }
this.getNoticeList(); this.getNoticeList();
this.initTodoList();
this.autoSendTodo = setInterval(() => {
this.initTodoList();
}, 60 * 1000);
},
provide() {
return {
todoTipList: this.todoList
};
}, },
methods: { methods: {
initTodoList() {
getTodayStatic().then(r => {
console.log(r);
let d = r.Data;
this.todoList.result = d;
let tempCount = 0;
tempCount += d.GraduateStudentCount;
tempCount += d.MyClueCount;
tempCount += d.MyOrderNotBalanceCount;
tempCount += d.MyOrderNotReceiveContractCount;
tempCount += d.MyStudentCount;
tempCount += d.NotBusinessBillCount;
tempCount += d.TodayClueCount;
tempCount += d.TodayConnectCount;
tempCount += d.TodayFollowCount;
this.todoCount = tempCount;
});
},
changeMenu(i) { changeMenu(i) {
if (i == 1) { if (i == 1) {
this.okrMenu = 1; this.okrMenu = 1;
......
<style> <style>
li { li {
list-style-type: none; list-style-type: none;
} }
.stuList ul {
padding: 0px;
}
.stuList li {
background: rgba(221, 222, 224, 0.2);
border-radius: 4px;
margin-top: 15px;
}
.stuList li .dline { .stuList ul {
display: table; padding: 0px;
width: 100%; }
display: flex;
flex-direction: row;
}
.stuList li .d1, .stuList li {
.stuList li .d2, background: rgba(221, 222, 224, 0.2);
.stuList li .d3, border-radius: 4px;
.stuList li .d4, margin-top: 15px;
.stuList li .d5 { }
width: 18%;
padding: 20px 20px 10px;
}
.stuList li .d7 { .stuList li .dline {
flex: 1; display: table;
width: 1px; width: 100%;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; }
justify-content: center;
}
.stuList li .d1 .di-title { .stuList li .d1,
font-size: 16px; .stuList li .d2,
color: #111111; .stuList li .d3,
} .stuList li .d4,
.stuList li .d5 {
width: 18%;
padding: 20px 20px 10px;
}
.stuList li .d1 .di-c { .stuList li .d7 {
font-size: 14px; flex: 1;
display: flex; width: 1px;
line-height: 28px; display: flex;
color: #111111; flex-direction: row;
} align-items: center;
justify-content: center;
}
.stuList li .d6 { .stuList li .d1 .di-title {
padding: 10px 20px; font-size: 16px;
width: 100%; color: #111111;
height: inherit; }
position: relative;
border-top: 1px solid #dddee0;
}
.stuList li .d6 .progress { .stuList li .d1 .di-c {
width: 100%; font-size: 14px;
height: 5px; display: flex;
position: absolute; line-height: 28px;
left: 0; color: #111111;
bottom: 0; }
}
.stuList li .d2 div { .stuList li .d6 {
margin: 2px 0; padding: 10px 20px;
font-size: 14px; width: 100%;
color: #111111; height: inherit;
} position: relative;
border-top: 1px solid #dddee0;
}
.stuList li .d2-n { .stuList li .d6 .progress {
font-size: 12px; width: 100%;
color: #999999; height: 5px;
margin-right: 20px; position: absolute;
} left: 0;
bottom: 0;
}
.stuList li .d3 .d3-s { .stuList li .d2 div {
color: var(--q-color-negative); margin: 2px 0;
font-weight: bold; font-size: 14px;
} color: #111111;
}
.stuList li .d3 div { .stuList li .d2-n {
margin: 2px 0; font-size: 12px;
font-size: 14px; color: #999999;
} margin-right: 20px;
}
.stuList li .d4 div { .stuList li .d3 .d3-s {
font-size: 14px; color: var(--q-color-negative);
color: #111111; font-weight: bold;
margin: 2px 0; }
}
.stuList li .d5 div { .stuList li .d3 div {
font-size: 14px; margin: 2px 0;
color: #111111; font-size: 14px;
margin: 2px 0; }
}
.stuList .myCourseNName { .stuList li .d4 div {
width: 25px; font-size: 14px;
height: 25px; color: #111111;
border-radius: 50%; margin: 2px 0;
color: #fff !important; }
text-align: center;
line-height: 25px;
background-color: #004d40;
}
.stuList .app-image { .stuList li .d5 div {
background-position: center center; font-size: 14px;
width: 50px; color: #111111;
height: 50px; margin: 2px 0;
border-radius: 0%; }
float: left;
margin-right: 8px;
}
.Sysuser_Date .el-input { .stuList .myCourseNName {
width: 100%; width: 25px;
border: none; height: 25px;
background-color: transparent; border-radius: 50%;
} color: #fff !important;
text-align: center;
line-height: 25px;
background-color: #004d40;
}
.Sysuser_Date .el-input__inner { .stuList .app-image {
width: 100%; background-position: center center;
border: none; width: 50px;
background-color: transparent; height: 50px;
} border-radius: 0%;
float: left;
margin-right: 8px;
}
.Sysuser_Date .el-range-editor .el-range-input { .Sysuser_Date .el-input {
width: 100%; width: 100%;
border: none; border: none;
background-color: transparent; background-color: transparent;
} }
.el-picker-panel { .Sysuser_Date .el-input__inner {
z-index: 99999 !important; width: 100%;
} border: none;
background-color: transparent;
}
.syster_qDropdown .q-btn__wrapper { .Sysuser_Date .el-range-editor .el-range-input {
padding: 0 3px; width: 100%;
min-height: 0 !important; border: none;
} background-color: transparent;
}
.editOrderDrawerTop { .el-picker-panel {
width: 100%; z-index: 99999 !important;
height: 50px; }
display: flex;
justify-content: space-between;
background-color: #f0f5fb;
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 { .syster_qDropdown .q-btn__wrapper {
color: #2D2D2D; padding: 0 3px;
font-weight: 600; min-height: 0 !important;
margin-right: 10px }
}
.editOrderDrawerTop {
width: 100%;
height: 50px;
display: flex;
justify-content: space-between;
background-color: #f0f5fb;
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> </style>
<template> <template>
<div class="page-body stuList"> <div
<div class="row q-mb-md" v-if="source!=1"> :class="[
{ 'page-body stuList': !isComponent },
{ 'full-height': isComponent }
]"
>
<div class="row q-mb-md" v-if="source != 1 && !isComponent">
<q-space></q-space> <q-space></q-space>
<div style="position: relative"> <div style="position: relative">
<q-btn color="accent" label="高级查询" @click="IsShowQuery = true"></q-btn> <q-btn
color="accent"
label="高级查询"
@click="IsShowQuery = true"
></q-btn>
<q-badge floating rounded color="red">{{ queryNum }}</q-badge> <q-badge floating rounded color="red">{{ queryNum }}</q-badge>
</div> </div>
</div> </div>
<div v-else class="q-mb-sm" style="font-size:20px">{{courseName}}</div> <div v-else-if="!isComponent" class="q-mb-sm" style="font-size:20px">
<div class="page-search row items-center flex"> {{ courseName }}
</div>
<div class="page-search row items-center flex" v-if="!isComponent">
<div class="col row wrap q-mr-lg q-col-gutter-md"> <div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3"> <div class="col-3">
<q-select @input="changeSchool" dense filled v-model="msg.School_Id" class="col-6" option-label="SName" <q-select
option-value="SId" :options="SchoolList" emit-value map-options label="校区" /> @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>
<div class="col-3" v-if="source!=1"> <div class="col-3" v-if="source != 1">
<q-select @input="changeCourse" dense filled v-model="msg.CourseId" class="col-6" option-label="CourseName" <q-select
option-value="CourseId" use-input :options="CourseList" @filter="filterCourse" emit-value map-options @input="changeCourse"
label="课程" clearable> 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> <template v-slot:no-option>
<q-item> <q-item>
<q-item-section class="text-grey"> <q-item-section class="text-grey">
...@@ -202,16 +235,31 @@ ...@@ -202,16 +235,31 @@
</q-select> </q-select>
</div> </div>
<div class="col-3"> <div class="col-3">
<q-select @input="resetSearch" dense filled v-model="msg.ClassId" class="col-6" use-input <q-select
@filter="filterClass" option-label="ClassName" option-value="ClassId" :options="classList" emit-value @input="resetSearch"
map-options label="班级" clearable> dense
<template v-slot:option="{ filled
v-model="msg.ClassId"
class="col-6"
use-input
@filter="filterClass"
option-label="ClassName"
option-value="ClassId"
:options="classList"
emit-value
map-options
label="班级"
clearable
>
<template
v-slot:option="{
itemProps, itemProps,
itemEvents, itemEvents,
opt, opt,
selected, selected,
toggleOption toggleOption
}"> }"
>
<q-item v-bind="itemProps" v-on="itemEvents"> <q-item v-bind="itemProps" v-on="itemEvents">
<q-item-section> <q-item-section>
<q-item-label v-html="opt.ClassName"></q-item-label> <q-item-label v-html="opt.ClassName"></q-item-label>
...@@ -231,12 +279,33 @@ ...@@ -231,12 +279,33 @@
</q-select> </q-select>
</div> </div>
<div class="col-3"> <div class="col-3">
<q-input @keyup.enter.native="resetSearch" clearable dense filled v-model="msg.GuestName" label="学员姓名" <q-input
@clear="resetSearch" maxlength="20" /> @keyup.enter.native="resetSearch"
clearable
dense
filled
v-model="msg.GuestName"
label="学员姓名"
@clear="resetSearch"
maxlength="20"
/>
</div> </div>
<div class="col-3"> <div class="col-3">
<q-select @input="resetSearch" dense filled v-model="msg.GuestState" class="col-6" option-label="Name" <q-select
option-value="Id" use-input :options="GuestStateList" emit-value map-options label="学员状态" clearable> @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> <template v-slot:no-option>
<q-item> <q-item>
<q-item-section class="text-grey"> <q-item-section class="text-grey">
...@@ -247,13 +316,37 @@ ...@@ -247,13 +316,37 @@
</q-select> </q-select>
</div> </div>
<div class="col-3"> <div class="col-3">
<q-select @input="getShaixuanFrom()" dense filled clearable filled option-value="Id" option-label="Name" <q-select
v-model="msg.CreateType" :options="customFromList" emit-value map-options label="客户来源" /> @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>
<div class="col-3" v-if="msg.CreateType == 1"> <div class="col-3" v-if="msg.CreateType == 1">
<q-select filled v-model="msg.StuChannelId" @input="resetSearch" label="收客渠道" :dense="false" <q-select
:options="StuChannelList" option-label="Name" option-value="Id" emit-value map-options use-input clearable filled
@filter="filterStuChannel"> v-model="msg.StuChannelId"
@input="resetSearch"
label="收客渠道"
:dense="false"
:options="StuChannelList"
option-label="Name"
option-value="Id"
emit-value
map-options
use-input
clearable
@filter="filterStuChannel"
>
<template v-slot:no-option> <template v-slot:no-option>
<q-item> <q-item>
<q-item-section class="text-grey"> <q-item-section class="text-grey">
...@@ -264,9 +357,21 @@ ...@@ -264,9 +357,21 @@
</q-select> </q-select>
</div> </div>
<div class="col-3" v-if="msg.CreateType == 2"> <div class="col-3" v-if="msg.CreateType == 2">
<q-select filled v-model="msg.StuSourceId" :dense="false" :options="customList" use-input label="关联同行" <q-select
@filter="filterFn" option-label="CustomerName" @input="resetSearch" clearable option-value="CustomerId" filled
emit-value map-options> v-model="msg.StuSourceId"
:dense="false"
:options="customList"
use-input
label="关联同行"
@filter="filterFn"
option-label="CustomerName"
@input="resetSearch"
clearable
option-value="CustomerId"
emit-value
map-options
>
<template v-slot:no-option> <template v-slot:no-option>
<q-item> <q-item>
<q-item-section class="text-grey"> <q-item-section class="text-grey">
...@@ -277,52 +382,104 @@ ...@@ -277,52 +382,104 @@
</q-select> </q-select>
</div> </div>
<div class="col-3" v-if="msg.CreateType == 3"> <div class="col-3" v-if="msg.CreateType == 3">
<q-select filled v-model="msg.StuSourceId" :dense="false" @filter="filterEmployee" label="介绍人" use-input <q-select
:options="myEmployeeList" option-label="EmployeeName" @input="resetSearch" clearable option-value="Id" filled
emit-value map-options /> v-model="msg.StuSourceId"
:dense="false"
@filter="filterEmployee"
label="介绍人"
use-input
:options="myEmployeeList"
option-label="EmployeeName"
@input="resetSearch"
clearable
option-value="Id"
emit-value
map-options
/>
</div> </div>
<div class="col-3" v-if="msg.CreateType == 4"> <div class="col-3" v-if="msg.CreateType == 4">
<q-select filled v-model="msg.StuSourceId" :dense="false" use-input @filter="filterStudent" label="转介人" <q-select
:options="MyTransListData" option-label="StuName" @input="resetSearch" clearable option-value="StuId" filled
emit-value map-options /> v-model="msg.StuSourceId"
:dense="false"
use-input
@filter="filterStudent"
label="转介人"
:options="MyTransListData"
option-label="StuName"
@input="resetSearch"
clearable
option-value="StuId"
emit-value
map-options
/>
</div> </div>
</div> </div>
</div> </div>
<div class="col row wrap q-gutter-x-md" v-if="staticObj"> <div class="col row wrap q-gutter-x-md" v-if="staticObj && !isComponent">
<div class="col stics"> <div class="col stics">
<span class="stics-name">正常学员数量</span> <span class="stics-name">正常学员数量</span>
<span>{{staticObj.NormalNum?staticObj.NormalNum:0}}人</span> <span>{{ staticObj.NormalNum ? staticObj.NormalNum : 0 }}人</span>
</div> </div>
<div class="col stics"> <div class="col stics">
<span class="stics-name">退课学员数量</span> <span class="stics-name">退课学员数量</span>
<span style="color: #F72E52">{{staticObj.DropOutNum?staticObj.DropOutNum:0}}人</span> <span style="color: #F72E52"
>{{ staticObj.DropOutNum ? staticObj.DropOutNum : 0 }}人</span
>
</div> </div>
<div class="col stics"> <div class="col stics">
<span class="stics-name">停课学员数量</span> <span class="stics-name">停课学员数量</span>
<span style="color:#2961FE;">{{staticObj.StopClassesNum?staticObj.StopClassesNum:0}}人</span> <span style="color:#2961FE;"
>{{ staticObj.StopClassesNum ? staticObj.StopClassesNum : 0 }}人</span
>
</div> </div>
<div class="col stics"> <div class="col stics">
<span class="stics-name">毕业学员数量</span> <span class="stics-name">毕业学员数量</span>
<span>{{staticObj.GraduateNum?staticObj.GraduateNum:0}}人</span> <span>{{ staticObj.GraduateNum ? staticObj.GraduateNum : 0 }}人</span>
</div> </div>
</div> </div>
<div class="page-content"> <div
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat :class="[
class="sticky-tow-column-table sticky-right-column-table" separator="none" :data="data" :columns="columns" { 'page-content': !isComponent },
row-key="name"> { 'full-height': isComponent }
]"
>
<q-table
:pagination="msg"
:loading="loading"
no-data-label="暂无相关数据"
flat
class="sticky-tow-column-table"
:class="[
{ 'my-sticky-header-table full-height': isComponent },
{ 'sticky-right-column-table': !isComponent }
]"
separator="none"
:data="data"
:columns="columns"
row-key="name"
:hide-bottom="isComponent"
>
<template v-slot:top> <template v-slot:top>
<!-- <div class="col-2 q-table__title">学员名单</div> --> <!-- <div class="col-2 q-table__title">学员名单</div> -->
</template> </template>
<template v-slot:body-cell-ContractNo="props"> <template v-slot:body-cell-ContractNo="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="seeContract(props.row)"> <div
style="color: #f00; cursor: pointer"
@click="seeContract(props.row)"
>
{{ props.row.ContractNo }} {{ props.row.ContractNo }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-GuestName="props"> <template v-slot:body-cell-GuestName="props">
<q-td :props="props"> <q-td :props="props">
<div class="text-blue cursor-pointer" @click="getStuRight(props.row)"> <div
class="text-blue cursor-pointer"
@click="getStuRight(props.row)"
>
{{ props.value }} {{ props.value }}
</div> </div>
</q-td> </q-td>
...@@ -331,70 +488,99 @@ ...@@ -331,70 +488,99 @@
<template v-slot:body-cell-StuSourceIdName="props"> <template v-slot:body-cell-StuSourceIdName="props">
<q-td :props="props"> <q-td :props="props">
<div> <div>
<span v-if="props.row.CreateType == 2 && props.row.EnterpriseName">{{ props.row.EnterpriseName }}:</span> <span v-if="props.row.CreateType == 2 && props.row.EnterpriseName"
>{{ props.row.EnterpriseName }}:</span
>
{{ props.row.StuSourceIdName }} {{ props.row.StuSourceIdName }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-ClassName="props"> <template v-slot:body-cell-ClassName="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="seeClassDetail(props.row)"> <div
style="color: #f00; cursor: pointer"
@click="seeClassDetail(props.row)"
>
{{ props.row.ClassName }} {{ props.row.ClassName }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-OrderId="props"> <template v-slot:body-cell-OrderId="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showOrderDetail(props.row, 1)"> <div
style="color: #f00; cursor: pointer"
@click="showOrderDetail(props.row, 1)"
>
{{ props.row.OrderId }} {{ props.row.OrderId }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-Income="props"> <template v-slot:body-cell-Income="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showOrderDetail(props.row, 4)"> <div
style="color: #f00; cursor: pointer"
@click="showOrderDetail(props.row, 4)"
>
{{ props.row.Income }} {{ props.row.Income }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-Refund="props"> <template v-slot:body-cell-Refund="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showOrderDetail(props.row, 4)"> <div
style="color: #f00; cursor: pointer"
@click="showOrderDetail(props.row, 4)"
>
{{ props.row.Refund }} {{ props.row.Refund }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-CompleteHours="props"> <template v-slot:body-cell-CompleteHours="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="seeStudentsClassUse(props.row)"> <div
style="color: #f00; cursor: pointer"
@click="seeStudentsClassUse(props.row)"
>
{{ props.row.CompleteHours }} {{ props.row.CompleteHours }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-MakeUpHours="props"> <template v-slot:body-cell-MakeUpHours="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showList(props.row, 1)"> <div
style="color: #f00; cursor: pointer"
@click="showList(props.row, 1)"
>
{{ props.row.MakeUpHours }} {{ props.row.MakeUpHours }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-AbsenceNum="props"> <template v-slot:body-cell-AbsenceNum="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showList(props.row, 2)"> <div
style="color: #f00; cursor: pointer"
@click="showList(props.row, 2)"
>
{{ props.row.AbsenceNum }} {{ props.row.AbsenceNum }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-LeaveNum="props"> <template v-slot:body-cell-LeaveNum="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showList(props.row, 3)"> <div
style="color: #f00; cursor: pointer"
@click="showList(props.row, 3)"
>
{{ props.row.LeaveNum }} {{ props.row.LeaveNum }}
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:body-cell-EventlogNum="props"> <template v-slot:body-cell-EventlogNum="props">
<q-td :props="props"> <q-td :props="props">
<div style="color: #f00; cursor: pointer" @click="showEventLog(props.row)"> <div
style="color: #f00; cursor: pointer"
@click="showEventLog(props.row)"
>
{{ props.row.EventlogNum }} {{ props.row.EventlogNum }}
</div> </div>
</q-td> </q-td>
...@@ -405,16 +591,41 @@ ...@@ -405,16 +591,41 @@
<template v-slot:body-cell-TeacherManager="props"> <template v-slot:body-cell-TeacherManager="props">
<q-td :props="props" v-html="getTeacherManager(props.row)"></q-td> <q-td :props="props" v-html="getTeacherManager(props.row)"></q-td>
</template> </template>
<template v-slot:body-cell-optioned="props"> <template v-slot:body-cell-optioned="props" v-if="!isComponent">
<q-td :props="props"> <q-td :props="props">
<div> <div>
<q-btn flat size="xs" color="accent" style="font-weight: 400" label="停课" v-if="props.row.GuestState === 1" <q-btn
@click="ShowStopLesson(props.row)" /> flat
<q-btn flat size="xs" color="accent" style="font-weight: 400" label="转班" v-if="props.row.GuestState === 1" size="xs"
@click="transferClass(props.row, 1)" /> color="accent"
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left: 10px"> style="font-weight: 400"
label="停课"
v-if="props.row.GuestState === 1"
@click="ShowStopLesson(props.row)"
/>
<q-btn
flat
size="xs"
color="accent"
style="font-weight: 400"
label="转班"
v-if="props.row.GuestState === 1"
@click="transferClass(props.row, 1)"
/>
<q-btn-dropdown
flat
size="xs"
color="dark"
label="更多"
style="margin-left: 10px"
>
<q-list> <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-section>
<q-item-label overline>添加事件</q-item-label> <q-item-label overline>添加事件</q-item-label>
</q-item-section> </q-item-section>
...@@ -429,389 +640,479 @@ ...@@ -429,389 +640,479 @@
</div> </div>
</q-td> </q-td>
</template> </template>
<template v-slot:bottom> <template v-if="!isComponent" v-slot:bottom>
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="pageCount" <q-pagination
:input="true" @input="changePage" /> class="full-width justify-end"
v-model="msg.pageIndex"
color="primary"
:max="pageCount"
:input="true"
@input="changePage"
/>
</template> </template>
</q-table> </q-table>
</div> </div>
<!-- 高级查询 --> <!-- 高级查询 -->
<MoreQuery v-if="IsShowQuery" :typeEnum="typeEnum" :warnEnum="warnEnum" :saveQuery="msg" @close="closeHandle" <MoreQuery
@success="morequery"> v-if="IsShowQuery"
:typeEnum="typeEnum"
:warnEnum="warnEnum"
:saveQuery="msg"
@close="closeHandle"
@success="morequery"
>
</MoreQuery> </MoreQuery>
<!-- 停课申请 --> <!-- 停课申请 -->
<StopLesson-form v-if="isShowStopLesson" :setObj="stuObj" @success="resetSearch" @close="closeHandle" /> <StopLesson-form
v-if="isShowStopLesson"
:setObj="stuObj"
@success="resetSearch"
@close="closeHandle"
/>
<!-- 转班申请 --> <!-- 转班申请 -->
<transferclass-form v-if="isShowTransferClass" :save-obj="orderObj" :ChangeType="ChangeType" @close="closeHandle" <transferclass-form
@success="resetSearch"></transferclass-form> v-if="isShowTransferClass"
:save-obj="orderObj"
:ChangeType="ChangeType"
@close="closeHandle"
@success="resetSearch"
></transferclass-form>
<!-- 添加事件 --> <!-- 添加事件 -->
<AddEvent-form v-if="isShowAddEvent" :setObj="eventObj" @success="resetSearch" @close="closeHandle" /> <AddEvent-form
v-if="isShowAddEvent"
:setObj="eventObj"
@success="resetSearch"
@close="closeHandle"
/>
<!-- 班级详情 --> <!-- 班级详情 -->
<classinfo-form v-if="isShowClassInfo" :seting-obj="eventObj" @close="closeHandle" @success="refreshPage" /> <classinfo-form
v-if="isShowClassInfo"
:seting-obj="eventObj"
@close="closeHandle"
@success="refreshPage"
/>
<!-- 订单详情 --> <!-- 订单详情 -->
<myOrder-form v-if="isShowmyorderForm" :save-obj="eventObj" @close="closeHandle"></myOrder-form> <myOrder-form
v-if="isShowmyorderForm"
:save-obj="eventObj"
@close="closeHandle"
></myOrder-form>
<!-- 可补课课时,缺勤次数,请假次数 --> <!-- 可补课课时,缺勤次数,请假次数 -->
<list v-if="isShowList" :type="showType" :set-obj="eventObj" @close="closeHandle" /> <list
v-if="isShowList"
:type="showType"
:set-obj="eventObj"
@close="closeHandle"
/>
<!-- 事件记录 --> <!-- 事件记录 -->
<eventLog v-if="isShowEventLog" :set-obj="eventObj" @modify="modifyEvent" @close="closeHandle" /> <eventLog
<studentRight-form v-if="isShowStuRight" :isJudgeTrans="isJudgeTrans" :BelongType="BelongType" :save-obj="stuOption" v-if="isShowEventLog"
@close="closeStuForm" @success="refreshStuList" @reload="refreshStuList"> :set-obj="eventObj"
@modify="modifyEvent"
@close="closeHandle"
/>
<studentRight-form
v-if="isShowStuRight"
:isJudgeTrans="isJudgeTrans"
:BelongType="BelongType"
:save-obj="stuOption"
@close="closeStuForm"
@success="refreshStuList"
@reload="refreshStuList"
>
</studentRight-form> </studentRight-form>
<!-- 跳课 --> <!-- 跳课 -->
<JumpCourse v-model="isShowChangeCourse" :saveObj="ChangeCourseObj" @success="refreshPage"></JumpCourse> <JumpCourse
v-model="isShowChangeCourse"
:saveObj="ChangeCourseObj"
@success="refreshPage"
></JumpCourse>
</div> </div>
</template> </template>
<script> <script>
import { import {
getSchoolDropdown, getSchoolDropdown,
getClassDropDownList, getClassDropDownList,
getStudentDorpDownList getStudentDorpDownList
} from "../../api/school/index"; } from "../../api/school/index";
import { import { queryCourseDropdownList } from "../../api/course/index";
queryCourseDropdownList import {
} from "../../api/course/index"; getStuList,
import { getEarlyWarningEnum,
getStuList, getTypeEnum
getEarlyWarningEnum, } from "../../api/stuMan/index.js";
getTypeEnum import {
} from "../../api/stuMan/index.js"; queryGuestStateList,
import { CreateTypeList,
queryGuestStateList, GetStuChannelList,
CreateTypeList, GetCustomerList
GetStuChannelList, } from "../../api/sale/sale.js";
GetCustomerList import MoreQuery from "../../components/stuMan/moreQuery.vue";
} from "../../api/sale/sale.js"; import StopLessonForm from "../../components/teacher/stopLessonForm";
import MoreQuery from "../../components/stuMan/moreQuery.vue"; import transferclassForm from "../../components/sale/transferclass-form"; //转班信息
import StopLessonForm from "../../components/teacher/stopLessonForm"; import AddEventForm from "../../components/stuMan/addEvent-form.vue"; //转班信息
import transferclassForm from "../../components/sale/transferclass-form"; //转班信息 import classinfoForm from "../../components/course/classinfo-form"; //班级详情
import AddEventForm from "../../components/stuMan/addEvent-form.vue"; //转班信息 import myOrderForm from "../../components/sale/myOrder-form"; //订单详情
import classinfoForm from "../../components/course/classinfo-form"; //班级详情 import list from "../../components/stuMan/makeUpHours.vue"; //可补课课时,缺勤次数,请假次数
import myOrderForm from "../../components/sale/myOrder-form"; //订单详情 import eventLog from "../../components/stuMan/eventRecord.vue"; //事件记录
import list from "../../components/stuMan/makeUpHours.vue"; //可补课课时,缺勤次数,请假次数 import studentRightForm from "../../components/school/student/studentRight-form";
import eventLog from "../../components/stuMan/eventRecord.vue"; //事件记录 import JumpCourse from "../../components/stuMan/jumpCourse";
import studentRightForm from "../../components/school/student/studentRight-form"; import { queryEmployee } from "../../api/users/user";
import JumpCourse from "../../components/stuMan/jumpCourse" export default {
import { props: {
queryEmployee isComponent: {
} from "../../api/users/user"; type: Boolean,
export default { default: false
meta: { },
title: "学员名单" outData: {
type: Array,
default: () => []
}, },
components: { pageSize: {
MoreQuery, type: Number,
StopLessonForm, default: 10
transferclassForm,
AddEventForm,
classinfoForm,
myOrderForm,
list,
eventLog,
studentRightForm,
JumpCourse
}, },
outLoading: {
type: Boolean,
default: false
}
},
meta: {
title: "学员名单"
},
components: {
MoreQuery,
StopLessonForm,
transferclassForm,
AddEventForm,
classinfoForm,
myOrderForm,
list,
eventLog,
studentRightForm,
JumpCourse
},
data() { data() {
return { return {
IsShowQuery: false, IsShowQuery: false,
data: [], data: [],
loading: false, loading: false,
msg: { msg: {
pageIndex: 1, pageIndex: 1,
pageSize: 10, pageSize: 10,
rowsPerPage: 10, rowsPerPage: 10,
School_Id: "", //校区 School_Id: "", //校区
CourseId: 0, //课程 CourseId: 0, //课程
ClassId: 0, //班级 ClassId: 0, //班级
GuestName: "", //学生姓名 GuestName: "", //学生姓名
ClassNo: "", //班号 ClassNo: "", //班号
OrderId: 0, //订单号 OrderId: 0, //订单号
EnterID: 0, //业务员 EnterID: 0, //业务员
EffectStatus: "", //状态 EffectStatus: "", //状态
JoinType: 0, //类型 JoinType: 0, //类型
EarlyWarning: 0, //预警 EarlyWarning: 0, //预警
OrderTime: "", //下单时间 OrderTime: "", //下单时间
EndOrderTime: "", //下单结束时间 EndOrderTime: "", //下单结束时间
GuestState: "", //学员状态 GuestState: "", //学员状态
CreateType: "", //客户来源 CreateType: "", //客户来源
StuChannelId: "", //收客渠道 StuChannelId: "", //收客渠道
StuSourceId: "" StuSourceId: ""
},
pageCount: 0,
columns: [
{
name: "Id",
label: "编号",
field: "Id",
align: "left",
required: true
}, },
pageCount: 0,
columns: [{
name: "Id",
label: "编号",
field: "Id",
align: "left",
required: true
},
{ {
name: "GuestName", name: "GuestName",
label: "姓名", label: "姓名",
align: "left", align: "left",
field: "GuestName", field: "GuestName",
required: true required: true
}, },
{ {
name: "CurseManager", name: "CurseManager",
label: "课程顾问", label: "课程顾问",
align: "left" align: "left"
}, },
{ {
name: "TeacherManager", name: "TeacherManager",
label: "协助老师", label: "协助老师",
align: "left" align: "left"
}, },
{ {
name: "CreateTypeName", name: "CreateTypeName",
label: "客户来源", label: "客户来源",
field: "CreateTypeName", field: "CreateTypeName",
align: "left" align: "left"
}, },
{ {
name: "StuSourceIdName", name: "StuSourceIdName",
label: "来源关联人", label: "来源关联人",
field: "StuSourceIdName", field: "StuSourceIdName",
align: "left" align: "left"
}, },
{ {
name: "StuChannelName", name: "StuChannelName",
label: "收客渠道", label: "收客渠道",
field: "StuChannelName", field: "StuChannelName",
align: "left" align: "left"
}, },
{ {
name: "StuCreateByName", name: "StuCreateByName",
label: "负责人", label: "负责人",
align: "left", align: "left",
field: "StuCreateByName" field: "StuCreateByName"
}, },
{ {
name: "Mobile", name: "Mobile",
label: "电话", label: "电话",
align: "left", align: "left",
field: "Mobile" field: "Mobile"
}, },
{ {
name: "ContractNo", name: "ContractNo",
label: "合同编号", label: "合同编号",
align: "left", align: "left",
field: "ContractNo" field: "ContractNo"
}, },
{ {
name: "ClassName", name: "ClassName",
label: "班级", label: "班级",
align: "left", align: "left",
field: "ClassName" field: "ClassName"
}, },
{ {
name: "CourseName", name: "CourseName",
label: "课程", label: "课程",
align: "left", align: "left",
field: "CourseName" field: "CourseName"
}, },
{ {
name: "TeacherName", name: "TeacherName",
label: "老师", label: "老师",
align: "left", align: "left",
field: "TeacherName" field: "TeacherName"
}, },
{ {
name: "OrderId", name: "OrderId",
label: "订单号", label: "订单号",
align: "left", align: "left",
field: "OrderId" field: "OrderId"
}, },
{ {
name: "OrderTime", name: "OrderTime",
label: "报名时间", label: "报名时间",
align: "left", align: "left",
field: "OrderTime" field: "OrderTime"
}, },
{ {
name: "EnterName", name: "EnterName",
label: "业务员", label: "业务员",
field: "EnterName", field: "EnterName",
align: "left" align: "left"
}, },
{ {
name: "PreferPrice", name: "PreferPrice",
label: "应收金额", label: "应收金额",
field: "PreferPrice", field: "PreferPrice",
align: "left" align: "left"
}, },
{ {
name: "Income", name: "Income",
label: "实收金额", label: "实收金额",
field: "Income", field: "Income",
align: "left" align: "left"
}, },
{ {
name: "Refund", name: "Refund",
label: "退款金额", label: "退款金额",
field: "Refund", field: "Refund",
align: "left" align: "left"
}, },
{ {
name: "TotalHours", name: "TotalHours",
label: "课程总课时", label: "课程总课时",
field: "TotalHours", field: "TotalHours",
align: "left" align: "left"
}, },
{ {
name: "ValidClassHours", name: "ValidClassHours",
label: "有效课时", label: "有效课时",
field: "ValidClassHours", field: "ValidClassHours",
align: "left" align: "left"
}, },
{ {
name: "CompleteHours", name: "CompleteHours",
label: "消耗课时", label: "消耗课时",
field: "CompleteHours", field: "CompleteHours",
align: "left" align: "left"
}, },
{ {
name: "SurplusHours", name: "SurplusHours",
label: "剩余课时", label: "剩余课时",
field: "SurplusHours", field: "SurplusHours",
align: "left" align: "left"
}, },
{ {
name: "MakeUpHours", name: "MakeUpHours",
label: "可补课课时", label: "可补课课时",
field: "MakeUpHours", field: "MakeUpHours",
align: "left" align: "left"
}, },
{ {
name: "CourseChapterNo", name: "CourseChapterNo",
label: "已上课次数", label: "已上课次数",
field: "CourseChapterNo", field: "CourseChapterNo",
align: "left" align: "left"
}, },
{ {
name: "AppointNum", name: "AppointNum",
label: "预约次数", label: "预约次数",
field: "AppointNum", field: "AppointNum",
align: "left" align: "left"
}, },
{ {
name: "AbsenceNum", name: "AbsenceNum",
label: "缺勤次数", label: "缺勤次数",
field: "AbsenceNum", field: "AbsenceNum",
align: "left" align: "left"
}, },
{ {
name: "LeaveNum", name: "LeaveNum",
label: "请假次数", label: "请假次数",
field: "LeaveNum", field: "LeaveNum",
align: "left" align: "left"
}, },
{ {
name: "EventlogNum", name: "EventlogNum",
label: "事件记录", label: "事件记录",
field: "EventlogNum", field: "EventlogNum",
align: "left" align: "left"
}, },
{
name: "GuestStateStr",
label: "状态",
field: "GuestStateStr",
align: "left"
},
{
name: "GraduationTime",
label: "毕业时间",
field: "GraduationTime",
align: "left"
},
{
name: "CourseRateName",
label: "毕业课程等级",
field: "CourseRateName",
align: "left"
},
{
name: "JoinTypeStr",
label: "类型",
field: "JoinTypeStr",
align: "left"
},
{ {
name: "optioned", name: "GuestStateStr",
label: "操作", label: "状态",
required: true, field: "GuestStateStr",
align: "left" align: "left"
} },
], {
SchoolList: [], name: "GraduationTime",
CourseList: [], label: "毕业时间",
AllCourseList: [], field: "GraduationTime",
classList: [], align: "left"
AllClassList: [], },
queryClass: { {
CourseId: 0, name: "CourseRateName",
IsAddDefault: 1, label: "毕业课程等级",
SchoolId: "", field: "CourseRateName",
Teacher_Id: 0, align: "left"
MoreStatus: "1,2,3",
IsQuerySurplusPlan: 0
}, },
typeEnum: [], {
warnEnum: [], name: "JoinTypeStr",
queryNum: 0, //高级查询个数 label: "类型",
isShowStopLesson: false, field: "JoinTypeStr",
stuObj: {}, //停课 align: "left"
isShowTransferClass: false, //是否显示转班 }
orderObj: {}, //转班 ],
ChangeType: 1, //1-转班 2-分拆 SchoolList: [],
isShowAddEvent: false, //是否显示添加事件 CourseList: [],
eventObj: {}, AllCourseList: [],
isShowClassInfo: false, //是否显示班级详情 classList: [],
isShowmyorderForm: false, //是否显示订单详情 AllClassList: [],
isShowList: false, //是否显示可补课课时,缺勤次数,请假次数 queryClass: {
showType: 1, CourseId: 0,
isShowEventLog: false, //是否显示事件记录 IsAddDefault: 1,
GuestStateList: [], //学员状态列表 SchoolId: "",
stuOption: null, Teacher_Id: 0,
BelongType: 1, MoreStatus: "1,2,3",
isShowStuRight: false, IsQuerySurplusPlan: 0
isJudgeTrans: 1, },
typeEnum: [],
warnEnum: [],
queryNum: 0, //高级查询个数
isShowStopLesson: false,
stuObj: {}, //停课
isShowTransferClass: false, //是否显示转班
orderObj: {}, //转班
ChangeType: 1, //1-转班 2-分拆
isShowAddEvent: false, //是否显示添加事件
eventObj: {},
isShowClassInfo: false, //是否显示班级详情
isShowmyorderForm: false, //是否显示订单详情
isShowList: false, //是否显示可补课课时,缺勤次数,请假次数
showType: 1,
isShowEventLog: false, //是否显示事件记录
GuestStateList: [], //学员状态列表
stuOption: null,
BelongType: 1,
isShowStuRight: false,
isJudgeTrans: 1,
customFromList: [], //客户来源 customFromList: [], //客户来源
StuChannelList: [], //收客渠道 StuChannelList: [], //收客渠道
allStuChannelList: [], //所有收客渠道 allStuChannelList: [], //所有收客渠道
customList: [], //同行列表 customList: [], //同行列表
allCustomList: [], //所有同行列表 allCustomList: [], //所有同行列表
//员工列表 //员工列表
employeeList: [], employeeList: [],
myEmployeeList: [], myEmployeeList: [],
TransListData: [], //转介人数据 TransListData: [], //转介人数据
MyTransListData: [], MyTransListData: [],
source: 0, //1:从课程列表进入 source: 0, //1:从课程列表进入
courseName: "", courseName: "",
isShowChangeCourse: false, isShowChangeCourse: false,
ChangeCourseObj: {}, ChangeCourseObj: {},
staticObj: {}, //学生统计信息 staticObj: {} //学生统计信息
}; };
}, },
created() { created() {
this.getGuestStateList(); this.getGuestStateList();
if (this.$route.query.source) { if (this.$route.query.source) {
this.source = this.$route.query.source; this.source = this.$route.query.source;
} }
if (this.$route.query.CourseId) { if (this.$route.query.CourseId) {
this.msg.CourseId = parseInt(this.$route.query.CourseId); this.msg.CourseId = parseInt(this.$route.query.CourseId);
} }
if (this.$route.query.CourseName) { if (this.$route.query.CourseName) {
this.courseName = decodeURIComponent(this.$route.query.CourseName); this.courseName = decodeURIComponent(this.$route.query.CourseName);
} }
},
watch: {
outData: {
handler: function(val) {
if (this.isComponent) {
this.data = val;
}
},
deep: true
}, },
mounted() { outLoading: {
handler: function(val) {
if (this.isComponent) {
this.loading = val;
}
},
deep: true
}
},
mounted() {
if (!this.isComponent) {
this.columns.push({
name: "optioned",
label: "操作",
required: true,
align: "left"
});
this.getSchool(); this.getSchool();
this.getCourseList(); this.getCourseList();
this.getClass(); this.getClass();
...@@ -823,406 +1124,411 @@ ...@@ -823,406 +1124,411 @@
this.GetStuChannelList(); this.GetStuChannelList();
this.GetCustomerList(); this.GetCustomerList();
this.getEmployeeList(); this.getEmployeeList();
} else {
this.msg.rowsPerPage = this.pageSize;
this.loading = this.outLoading;
this.data = this.outData;
}
},
methods: {
//获取收客渠道
GetStuChannelList() {
GetStuChannelList({}).then(res => {
if (res.Code == 1) {
this.StuChannelList = res.Data;
this.allStuChannelList = res.Data;
}
});
}, },
methods: { //筛选渠道
//获取收客渠道 filterStuChannel(val, update) {
GetStuChannelList() { update(() => {
GetStuChannelList({}).then(res => { if (val === "") {
if (res.Code == 1) { this.StuChannelList = JSON.parse(
this.StuChannelList = res.Data; JSON.stringify(this.allStuChannelList)
this.allStuChannelList = res.Data; );
} } else {
}); const needle = val.toLowerCase();
}, this.StuChannelList = this.allStuChannelList.filter(
//筛选渠道 v => v.Name.toLowerCase().indexOf(needle) > -1
filterStuChannel(val, update) {
update(() => {
if (val === "") {
this.StuChannelList = JSON.parse(
JSON.stringify(this.allStuChannelList)
);
} else {
const needle = val.toLowerCase();
this.StuChannelList = this.allStuChannelList.filter(
v => v.Name.toLowerCase().indexOf(needle) > -1
);
}
});
},
//获取客户来源
getCustomFrom() {
CreateTypeList({}).then(res => {
if (res.Code == 1) {
this.customFromList = res.Data;
}
});
},
//获取客户下拉数据
GetCustomerList() {
let msg = {
QCreateBy: 0
};
GetCustomerList(msg).then(res => {
if (res.Code == 1) {
this.customList = res.Data;
this.allCustomList = res.Data;
}
});
},
//筛选客户
filterFn(val, update) {
update(() => {
if (val === "") {
this.customList = JSON.parse(JSON.stringify(this.allCustomList));
} else {
const needle = val.toLowerCase();
this.customList = this.allCustomList.filter(
v => v.CustomerName.toLowerCase().indexOf(needle) > -1
);
}
});
},
//获取员工列表
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
); );
});
},
//筛选客户来源
getShaixuanFrom() {
this.msg.StuSourceId = ''
this.msg.StuChannelId = ''
if (this.msg.CreateType == 4) {
this.getStudentDorpDown();
} }
this.resetSearch() });
}, },
//获取转介人下拉 //获取客户来源
getStudentDorpDown() { getCustomFrom() {
getStudentDorpDownList().then(res => { CreateTypeList({}).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.TransListData = res.Data; this.customFromList = res.Data;
this.MyTransListData = res.Data; }
} });
}); },
}, //获取客户下拉数据
//筛选转介人 GetCustomerList() {
filterStudent(val, update, abort) { let msg = {
update(() => { QCreateBy: 0
this.MyTransListData = this.TransListData.filter( };
v => v.StuName.indexOf(val) > -1 GetCustomerList(msg).then(res => {
if (res.Code == 1) {
this.customList = res.Data;
this.allCustomList = res.Data;
}
});
},
//筛选客户
filterFn(val, update) {
update(() => {
if (val === "") {
this.customList = JSON.parse(JSON.stringify(this.allCustomList));
} else {
const needle = val.toLowerCase();
this.customList = this.allCustomList.filter(
v => v.CustomerName.toLowerCase().indexOf(needle) > -1
); );
}); }
}, });
},
//获取员工列表
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
);
});
},
//筛选客户来源
getShaixuanFrom() {
this.msg.StuSourceId = "";
this.msg.StuChannelId = "";
if (this.msg.CreateType == 4) {
this.getStudentDorpDown();
}
this.resetSearch();
},
//获取转介人下拉
getStudentDorpDown() {
getStudentDorpDownList().then(res => {
if (res.Code == 1) {
this.TransListData = res.Data;
this.MyTransListData = res.Data;
}
});
},
//筛选转介人
filterStudent(val, update, abort) {
update(() => {
this.MyTransListData = this.TransListData.filter(
v => v.StuName.indexOf(val) > -1
);
});
},
//获取学员状态列表 //获取学员状态列表
getGuestStateList() { getGuestStateList() {
queryGuestStateList({}).then(res => { queryGuestStateList({}).then(res => {
var tempArray = res.Data; var tempArray = res.Data;
if (tempArray) { if (tempArray) {
tempArray.forEach(item => { tempArray.forEach(item => {
if (item.Id == 1 || item.Id == 2 || item.Id == 5 || item.Id == 7) { if (item.Id == 1 || item.Id == 2 || item.Id == 5 || item.Id == 7) {
this.GuestStateList.push(item); this.GuestStateList.push(item);
}
});
}
});
},
//获取校区下拉
getSchool() {
getSchoolDropdown({}).then(res => {
if (res.Code == 1) {
this.SchoolList = res.Data;
}
});
},
//获取课程
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;
}
});
},
// 筛选课程
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
);
}
});
},
//获取班级
getClass() {
getClassDropDownList(this.queryClass).then(res => {
this.classList = [];
this.msg.ClassId = 0;
if (res.Code == 1) {
this.classList = res.Data;
this.AllClassList = res.Data;
var obj = {
ClassName: "不限",
ClassId: 0
};
this.classList.unshift(obj);
}
});
},
//筛选班级
filterClass(val, update) {
update(() => {
if (val === "") {
this.classList = JSON.parse(JSON.stringify(this.AllClassList));
} else {
const needle = val.toLowerCase();
this.classList = this.AllClassList.filter(
v => v.ClassName.toLowerCase().indexOf(needle) > -1
);
}
});
},
changeSchool(val) {
this.queryClass.SchoolId = val;
this.getClass();
this.resetSearch();
},
changeCourse(val) {
this.queryClass.CourseId = val;
this.getClass();
this.resetSearch();
},
getList() {
this.loading = true;
getStuList(this.msg)
.then(res => {
this.loading = false;
if (res.Code === 1) {
this.data = res.Data.pageModel.PageData;
this.pageCount = res.Data.pageModel.PageCount;
this.staticObj = res.Data.StudentStatic;
} }
})
.catch(err => {
this.loading = false;
}); });
}, }
//显示停课弹窗 });
ShowStopLesson(item) { },
this.isShowStopLesson = true; //获取校区下拉
this.stuObj = item; getSchool() {
}, getSchoolDropdown({}).then(res => {
if (res.Code == 1) {
// 高级查询 this.SchoolList = res.Data;
morequery(val) { }
this.IsShowQuery = false; });
this.queryNum = val.chooseNum; },
this.msg.ClassNo = val.ClassNo; //获取课程
this.msg.OrderId = val.OrderId; getCourseList() {
this.msg.EnterID = val.EnterID; queryCourseDropdownList({}).then(res => {
this.msg.EffectStatus = val.EffectStatus; if (res.Code == 1) {
this.msg.JoinType = val.JoinType; var tempArray = res.Data;
this.msg.EarlyWarning = val.EarlyWarning; if (!tempArray) {
this.msg.OrderTime = val.OrderTime; tempArray = [];
this.msg.EndOrderTime = val.EndOrderTime; }
this.resetSearch(); tempArray.unshift({
}, CourseId: 0,
//重新查询 CourseName: "不限"
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
},
//翻页
changePage(val) {
this.msg.pageIndex = val;
this.getList();
},
//关闭弹窗
closeHandle() {
this.IsShowQuery = false;
this.isShowStopLesson = false;
this.isShowTransferClass = false;
this.isShowAddEvent = false;
this.isShowClassInfo = false;
this.isShowmyorderForm = false;
this.isShowList = false;
this.isShowEventLog = false;
this.isShowEventLog = false;
},
//刷新页面
refreshPage() {
this.closeHandle();
this.getList();
},
goUrl(url, item) {
if (item) {
this.$router.push({
path: url,
query: {
Id: item.Id
}
}); });
this.CourseList = tempArray;
this.AllCourseList = tempArray;
}
});
},
// 筛选课程
filterCourse(val, update) {
update(() => {
if (val === "") {
this.CourseList = JSON.parse(JSON.stringify(this.AllCourseList));
} else { } else {
this.$router.push({ const needle = val.toLowerCase();
path: url, this.CourseList = this.AllCourseList.filter(
query: { v => v.CourseName.toLowerCase().indexOf(needle) > -1
Id: 0 );
}
});
} }
}, });
goUrl1(url, item) { },
//获取班级
getClass() {
getClassDropDownList(this.queryClass).then(res => {
this.classList = [];
this.msg.ClassId = 0;
if (res.Code == 1) {
this.classList = res.Data;
this.AllClassList = res.Data;
var obj = {
ClassName: "不限",
ClassId: 0
};
this.classList.unshift(obj);
}
});
},
//筛选班级
filterClass(val, update) {
update(() => {
if (val === "") {
this.classList = JSON.parse(JSON.stringify(this.AllClassList));
} else {
const needle = val.toLowerCase();
this.classList = this.AllClassList.filter(
v => v.ClassName.toLowerCase().indexOf(needle) > -1
);
}
});
},
changeSchool(val) {
this.queryClass.SchoolId = val;
this.getClass();
this.resetSearch();
},
changeCourse(val) {
this.queryClass.CourseId = val;
this.getClass();
this.resetSearch();
},
getList() {
this.loading = true;
getStuList(this.msg)
.then(res => {
this.loading = false;
if (res.Code === 1) {
this.data = res.Data.pageModel.PageData;
this.pageCount = res.Data.pageModel.PageCount;
this.staticObj = res.Data.StudentStatic;
}
})
.catch(err => {
this.loading = false;
});
},
//显示停课弹窗
ShowStopLesson(item) {
this.isShowStopLesson = true;
this.stuObj = item;
},
// 高级查询
morequery(val) {
this.IsShowQuery = false;
this.queryNum = val.chooseNum;
this.msg.ClassNo = val.ClassNo;
this.msg.OrderId = val.OrderId;
this.msg.EnterID = val.EnterID;
this.msg.EffectStatus = val.EffectStatus;
this.msg.JoinType = val.JoinType;
this.msg.EarlyWarning = val.EarlyWarning;
this.msg.OrderTime = val.OrderTime;
this.msg.EndOrderTime = val.EndOrderTime;
this.resetSearch();
},
//重新查询
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
},
//翻页
changePage(val) {
this.msg.pageIndex = val;
this.getList();
},
//关闭弹窗
closeHandle() {
this.IsShowQuery = false;
this.isShowStopLesson = false;
this.isShowTransferClass = false;
this.isShowAddEvent = false;
this.isShowClassInfo = false;
this.isShowmyorderForm = false;
this.isShowList = false;
this.isShowEventLog = false;
this.isShowEventLog = false;
},
//刷新页面
refreshPage() {
this.closeHandle();
this.getList();
},
goUrl(url, item) {
if (item) {
this.$router.push({ this.$router.push({
path: url, path: url,
query: { query: {
Id: item.Id, Id: item.Id
name: item.ActivityName
}
});
},
getTypeEnum() {
getTypeEnum({}).then(res => {
if (res.Code === 1) {
res.Data.unshift({
Name: "不限",
Id: 0
});
this.typeEnum = res.Data;
} }
}); });
}, } else {
getEarlyWarningEnum() { this.$router.push({
getEarlyWarningEnum({}).then(res => { path: url,
if (res.Code === 1) { query: {
this.warnEnum = res.Data; Id: 0
} }
}); });
}, }
//转班 },
transferClass(item, type) { goUrl1(url, item) {
this.orderObj = item; this.$router.push({
this.ChangeType = type; path: url,
this.isShowTransferClass = true; query: {
}, Id: item.Id,
//显示添加事件 name: item.ActivityName
showAddEvent(item) {
let newitem = JSON.parse(JSON.stringify(item));
// Id和修改的Id冲突 自定义学生id=STUID
newitem.STUID = newitem.Id;
newitem.Id = 0;
this.eventObj = newitem;
this.isShowAddEvent = true;
},
//查看合同
seeContract(item) {
this.OpenNewUrl("/contractView", {
ContractId: item.ContractId
});
},
//查看课时消耗
seeStudentsClassUse(item) {
let obj = {
StudentId: item.Id,
TeacherId: item.Teacher_Id,
ClassId: item.ClassId
};
this.OpenNewUrl("/teacher/studentsClassSee", obj);
},
//查看班级详情
seeClassDetail(item) {
this.eventObj = item;
this.isShowClassInfo = true;
},
//查看订单详情
showOrderDetail(item, tab) {
item.tab = tab;
this.eventObj = item;
this.isShowmyorderForm = true;
},
showList(item, type) {
this.eventObj = item;
this.showType = type;
this.isShowList = true;
},
showEventLog(item) {
this.eventObj = item;
this.isShowEventLog = true;
},
// 修改事件
modifyEvent(val) {
this.closeHandle();
this.eventObj = val;
this.isShowAddEvent = true;
},
getCurseManager(row) {
let managerName = "<span class='text-grey-4'>暂未推送</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 2) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
} }
return managerName; });
}, },
getTeacherManager(row) { getTypeEnum() {
let managerName = "<span class='text-grey-4'>暂无</span>"; getTypeEnum({}).then(res => {
if (row.AssistList && row.AssistList.length > 0) { if (res.Code === 1) {
row.AssistList.forEach(y => { res.Data.unshift({
if (y.AssistType == 4) { Name: "不限",
managerName = `<span class='text-dark'>${y.AssistName}</span>`; Id: 0
}
}); });
this.typeEnum = res.Data;
} }
return managerName; });
}, },
getStuRight(obj) { getEarlyWarningEnum() {
if (obj) { getEarlyWarningEnum({}).then(res => {
this.stuOption = { if (res.Code === 1) {
StuId: obj.Student_Id, this.warnEnum = res.Data;
noEdit: true
};
this.BelongType = obj.BelongType;
} }
this.isShowStuRight = true; });
}, },
closeStuForm() { //转班
this.isShowStuRight = false; transferClass(item, type) {
}, this.orderObj = item;
refreshStuList() { this.ChangeType = type;
this.getList(); this.isShowTransferClass = true;
}, },
showChangeCourse(item) { //显示添加事件
this.isShowChangeCourse = true showAddEvent(item) {
this.ChangeCourseObj = item let newitem = JSON.parse(JSON.stringify(item));
// Id和修改的Id冲突 自定义学生id=STUID
newitem.STUID = newitem.Id;
newitem.Id = 0;
this.eventObj = newitem;
this.isShowAddEvent = true;
},
//查看合同
seeContract(item) {
this.OpenNewUrl("/contractView", {
ContractId: item.ContractId
});
},
//查看课时消耗
seeStudentsClassUse(item) {
let obj = {
StudentId: item.Id,
TeacherId: item.Teacher_Id,
ClassId: item.ClassId
};
this.OpenNewUrl("/teacher/studentsClassSee", obj);
},
//查看班级详情
seeClassDetail(item) {
this.eventObj = item;
this.isShowClassInfo = true;
},
//查看订单详情
showOrderDetail(item, tab) {
item.tab = tab;
this.eventObj = item;
this.isShowmyorderForm = true;
},
showList(item, type) {
this.eventObj = item;
this.showType = type;
this.isShowList = true;
},
showEventLog(item) {
this.eventObj = item;
this.isShowEventLog = true;
},
// 修改事件
modifyEvent(val) {
this.closeHandle();
this.eventObj = val;
this.isShowAddEvent = true;
},
getCurseManager(row) {
let managerName = "<span class='text-grey-4'>暂未推送</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 2) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
}
return managerName;
},
getTeacherManager(row) {
let managerName = "<span class='text-grey-4'>暂无</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 4) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
} }
return managerName;
},
getStuRight(obj) {
if (obj) {
this.stuOption = {
StuId: obj.Student_Id,
noEdit: true
};
this.BelongType = obj.BelongType;
}
this.isShowStuRight = true;
},
closeStuForm() {
this.isShowStuRight = false;
},
refreshStuList() {
this.getList();
},
showChangeCourse(item) {
this.isShowChangeCourse = true;
this.ChangeCourseObj = item;
} }
}; }
};
</script> </script>
<style lang="sass"> <style lang="sass">
@import url('~assets/css/table.sass') @import url('~assets/css/table.sass')
</style> </style>
\ No newline at end of file
...@@ -648,6 +648,9 @@ export default { ...@@ -648,6 +648,9 @@ export default {
this.isShowAssessmentForm = false; this.isShowAssessmentForm = false;
this.billObj = {}; this.billObj = {};
this.getStuBackBill(); this.getStuBackBill();
if (this.isComponents) {
this.$emit("success");
}
}, },
//获取下拉数据 //获取下拉数据
getEducationType() { getEducationType() {
......
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