Commit f1d6fff5 authored by 黄奎's avatar 黄奎

学员跟进调整

parent f97781df
...@@ -78,6 +78,7 @@ ...@@ -78,6 +78,7 @@
<th width="200">续费课程</th> <th width="200">续费课程</th>
<th width="80">续费级别</th> <th width="80">续费级别</th>
<th width="80">续费金额</th> <th width="80">续费金额</th>
<th width="80">最新进度</th>
<th width="90">负责人</th> <th width="90">负责人</th>
</tr> </tr>
<template v-if='dataObj&&dataObj.RList && dataObj.RList.length>0'> <template v-if='dataObj&&dataObj.RList && dataObj.RList.length>0'>
...@@ -163,6 +164,9 @@ ...@@ -163,6 +164,9 @@
<span>{{sItem.PreferPrice}}</span> <span>{{sItem.PreferPrice}}</span>
</div> </div>
</td> </td>
<td>
{{item.NewLesson}}
</td>
<td> <td>
{{ item.CreateByName?item.CreateByName:'-' }} {{ item.CreateByName?item.CreateByName:'-' }}
</td> </td>
......
...@@ -170,6 +170,7 @@ ...@@ -170,6 +170,7 @@
font-weight: 600; font-weight: 600;
margin-right: 10px; margin-right: 10px;
} }
</style> </style>
<template> <template>
<div :class="[ <div :class="[
...@@ -290,6 +291,19 @@ ...@@ -290,6 +291,19 @@
:options="MyTransListData" option-label="StuName" @input="resetSearch" clearable option-value="StuId" :options="MyTransListData" option-label="StuName" @input="resetSearch" clearable option-value="StuId"
emit-value map-options /> emit-value map-options />
</div> </div>
<div class="col-3">
<q-select filled v-model="msg.Teacher_Id" dense use-input label="班主任" :options="MyTeacherListData"
option-label="EmployeeName" @input="resetSearch" @filter="filterTeacher" clearable option-value="Id"
emit-value map-options>
<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> </div>
<div class="col row wrap q-gutter-x-md" v-if="staticObj && !isComponent"> <div class="col row wrap q-gutter-x-md" v-if="staticObj && !isComponent">
...@@ -426,11 +440,7 @@ ...@@ -426,11 +440,7 @@
<q-item-label overline>添加事件</q-item-label> <q-item-label overline>添加事件</q-item-label>
</q-item-section> </q-item-section>
</q-item> </q-item>
<!-- <q-item dense clickable v-close-popup @click="showChangeCourse(props.row)">
<q-item-section>
<q-item-label overline >跳课</q-item-label>
</q-item-section>
</q-item> -->
</q-list> </q-list>
</q-btn-dropdown> </q-btn-dropdown>
</div> </div>
...@@ -559,7 +569,8 @@ ...@@ -559,7 +569,8 @@
GuestState: "", //学员状态 GuestState: "", //学员状态
CreateType: "", //客户来源 CreateType: "", //客户来源
StuChannelId: "", //收客渠道 StuChannelId: "", //收客渠道
StuSourceId: "" StuSourceId: "",
Teacher_Id: "", //班主任
}, },
pageCount: 0, pageCount: 0,
columns: [{ columns: [{
...@@ -569,7 +580,6 @@ ...@@ -569,7 +580,6 @@
align: "left", align: "left",
required: true required: true
}, },
{ {
name: "GuestName", name: "GuestName",
label: "姓名", label: "姓名",
...@@ -812,7 +822,9 @@ ...@@ -812,7 +822,9 @@
courseName: "", courseName: "",
isShowChangeCourse: false, isShowChangeCourse: false,
ChangeCourseObj: {}, ChangeCourseObj: {},
staticObj: {} //学生统计信息 staticObj: {}, //学生统计信息
MyTeacherListData: [], //查询老师列表
AllTeacherList: [], //所有教师列表
}; };
}, },
created() { created() {
...@@ -864,6 +876,7 @@ ...@@ -864,6 +876,7 @@
this.GetStuChannelList(); this.GetStuChannelList();
this.GetCustomerList(); this.GetCustomerList();
this.getEmployeeList(); this.getEmployeeList();
this.findData();
} else { } else {
this.msg.rowsPerPage = this.pageSize; this.msg.rowsPerPage = this.pageSize;
this.loading = this.outLoading; this.loading = this.outLoading;
...@@ -871,6 +884,18 @@ ...@@ -871,6 +884,18 @@
} }
}, },
methods: { methods: {
//获取班主任
findData() {
queryEmployee({
AccountTypeStr: "2",
IsLeave: 1
}).then(res => {
if (res.Code == 1) {
this.MyTeacherListData = res.Data;
this.AllTeacherList = res.Data;
}
})
},
//获取收客渠道 //获取收客渠道
GetStuChannelList() { GetStuChannelList() {
GetStuChannelList({}).then(res => { GetStuChannelList({}).then(res => {
...@@ -1010,6 +1035,18 @@ ...@@ -1010,6 +1035,18 @@
} }
}); });
}, },
filterTeacher(val, update) {
update(() => {
if (val === "") {
this.MyTeacherListData = JSON.parse(JSON.stringify(this.AllTeacherList));
} else {
const needle = val.toLowerCase();
this.MyTeacherListData = this.AllTeacherList.filter(
v => v.EmployeeName.toLowerCase().indexOf(needle) > -1
);
}
});
},
//筛选课程 //筛选课程
filterCourse(val, update) { filterCourse(val, update) {
update(() => { update(() => {
...@@ -1268,7 +1305,9 @@ ...@@ -1268,7 +1305,9 @@
} }
} }
}; };
</script> </script>
<style lang="sass"> <style lang="sass">
@import url('~assets/css/table.sass') @import url('~assets/css/table.sass')
</style>
\ No newline at end of file </style>
...@@ -58,151 +58,26 @@ ...@@ -58,151 +58,26 @@
maxlength="20" /> maxlength="20" />
</div> </div>
<div class="col-3"> <div class="col-3">
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.StuRealMobile" label="电话" <q-select @input="resetSearch" dense filled option-value="SId" option-label="SName" v-model="msg.School_Id"
maxlength="20" /> :options="CompanyList" emit-value map-options label="校区" />
</div>
<div class="col-3">
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.QQ" label="QQ"
maxlength="20" />
</div>
<div class="col-3">
<q-input @keyup.enter.native="resetSearch" dense clearable filled v-model="msg.WeChatNo" label="微信号"
maxlength="20" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled v-model="msg.StuType" dense clearable :options="customTypeList"
option-label="Name" option-value="Id" emit-value map-options label="客户类型" />
</div> </div>
<div class="col-3"> <div class="col-3">
<q-select @input="resetSearch" dense filled v-model="msg.AdvisorStatus" :options="AdvConfigList" <q-select filled v-model="msg.QGuestState" dense use-input label="状态" :options="isMyStuList"
option-label="Name" option-value="Id" emit-value map-options label="当前状态" clearable /> option-label="Name" @input="resetSearch" clearable option-value="Id" emit-value map-options />
</div> </div>
<div class="col-3"> <div class="col-3">
<q-select filled v-model="msg.StuPurpose" dense @input="resetSearch" clearable :options="goalsList" <q-select filled v-model="msg.HeadTeacherId" dense use-input label="班主任" :options="MyTeacherListData"
option-label="Name" option-value="Id" emit-value map-options label="学习目的" /> option-label="EmployeeName" @input="resetSearch" clearable option-value="Id" @filter="filterTeacher"
emit-value map-options />
</div> </div>
<div class="col-3">
<q-field filled dense>
<template v-slot:control>
<el-date-picker v-model="dateArray" size="mini" @change="resetSearch" value-format="yyyy-MM-dd"
type="daterange" style="border:none;" range-separator="至" start-placeholder="跟进开始时间"
end-placeholder="跟进结束时间" />
</template>
</q-field>
</div>
<template v-if="morequery">
<div class="col-3">
<q-select @input="resetSearch" dense filled option-value="SId" option-label="SName" v-model="msg.School_Id"
:options="CompanyList" emit-value map-options label="校区" />
</div>
<div class="col-3">
<q-select @input="resetSearch" filled option-value="CourseId" option-label="CourseName"
v-model="msg.CourseId" clearable emit-value use-input :options="myCourseList" label="课程" dense map-options
@filter="filterFnkec" />
</div>
<div class="col-3">
<q-select @input="resetSearch" dense filled option-value="Id" option-label="EmployeeName"
v-model="msg.ConsultantId" clearable :options="RoleListData" emit-value map-options label="课程顾问" />
</div>
<!-- <div class="col-3">
<q-select @input="resetSearch" dense filled option-value="Id" option-label="Name"
v-model="msg.StuGuestState" clearable :options="hetongList" emit-value map-options label="合同状态" />
</div> -->
<div class="col-3">
<q-select @input="msg.StuSourceId='',msg.StuChannel='',resetSearch()" dense 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.StuChannel" @input="resetSearch" label="收客渠道" dense :options="StuChannelList"
option-label="Name" option-value="Id" emit-value map-options use-input clearable
@filter="filterStuChannel">
<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" v-if="msg.CreateType==2">
<q-select filled v-model="msg.StuSourceId" dense :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>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
</div>
<div class="col-3" v-if="msg.CreateType==3">
<q-select filled v-model="msg.StuSourceId" dense @filter="filterEmployee" label="介绍人" use-input
:options="myEmployeeList" option-label="EmployeeName" @input="resetSearch" clearable option-value="Id"
emit-value map-options />
</div>
<div class="col-3" v-if="msg.CreateType==4">
<q-select filled v-model="msg.StuSourceId" dense use-input @filter="filterStudent" label="转介人"
:options="MyTransListData" option-label="StuName" @input="resetSearch" clearable option-value="StuId"
emit-value map-options />
</div>
<div class="col-3">
<q-select filled v-model="msg.HeadTeacherId" dense use-input label="班主任" :options="MyTeacherListData"
option-label="EmployeeName" @input="resetSearch" clearable option-value="Id" emit-value map-options />
</div>
<div class="col-3">
(
<q-radio size="xs" v-model="msg.Q_FType" val="1" label="范围内有跟进记录" @input='resetSearch' />
<q-radio size="xs" v-model="msg.Q_FType" val="2" label="范围内没有跟进记录" @input='resetSearch' />
</div>
</template>
</div> </div>
</div> </div>
<div style="width: 100%;text-align: right;padding: 0 20px;margin-bottom: 10px;"> <div style="width: 100%;text-align: right;padding: 0 20px;margin-bottom: 10px;">
<span @click="morequery=!morequery" style="display:inline-flex;align-items:center;cursor: pointer;"> <span @click="morequery=!morequery" style="display:inline-flex;align-items:center;cursor: pointer;">
<q-btn color="accent" class="q-mr-md" size="sm" icon="download" label="下载" v-if="isHaveDownLoad" <q-btn color="accent" class="q-mr-md" size="sm" icon="download" label="下载" v-if="isHaveDownLoad"
@click="downloadStudentFollow" /> @click="downloadStudentFollow" />
<span style="margin-right:5px;color: #089bab;">高级查询</span>
<img v-show="!morequery" style="width:12px;height:12px" src="../../assets/images/more.png" alt="">
<img v-show="morequery" class="roatImg" style="width:12px;height:12px" src="../../assets/images/more.png"
alt="">
</span> </span>
</div> </div>
<!-- <div class="col row wrap q-gutter-x-md" v-if="dataList&&dataList.Stat" >
<div class="col stics">
<span class="stics-name">学生总数</span>
<span>{{dataList.Stat.StuTNum?dataList.Stat.StuTNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">续费数量</span>
<span style="color: #F72E52">{{dataList.Stat.RenewNum?dataList.Stat.RenewNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">新生数量</span>
<span style="color:#2961FE;">{{dataList.Stat.NewNum?dataList.Stat.NewNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">学习中数量</span>
<span>{{dataList.Stat.StudyNum?dataList.Stat.StudyNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">毕业数量</span>
<span>{{dataList.Stat.GraduateNum?dataList.Stat.GraduateNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">停课数量</span>
<span>{{dataList.Stat.SuspendNum?dataList.Stat.SuspendNum:0}}人</span>
</div>
<div class="col stics">
<span class="stics-name">退学数量</span>
<span>{{dataList.Stat.DropOutNum?dataList.Stat.DropOutNum:0}}人</span>
</div>
</div> -->
<div style="width: 100%;margin-top: 20px"> <div style="width: 100%;margin-top: 20px">
<stufollowlist :dataObj="dataList" :RListlength="RListlength" @success="refreshPage" :titlelist="titlelist" <stufollowlist :dataObj="dataList" :RListlength="RListlength" @success="refreshPage" :titlelist="titlelist"
:loading="loading" ref="stuFollowList" :AuthObj="AuthObj"></stufollowlist> :loading="loading" ref="stuFollowList" :AuthObj="AuthObj"></stufollowlist>
...@@ -222,7 +97,6 @@ ...@@ -222,7 +97,6 @@
queryEmployee, queryEmployee,
} from "../../api/users/user"; } from "../../api/users/user";
import { import {
queryGuestStateList,
CreateTypeList, CreateTypeList,
GetStuChannelList, GetStuChannelList,
GetCustomerList, GetCustomerList,
...@@ -263,26 +137,10 @@ ...@@ -263,26 +137,10 @@
pageSize: 10, pageSize: 10,
rowsPerPage: 10, rowsPerPage: 10,
StuName: "", StuName: "",
StuRealMobile: '',
QQ: '',
WeChatNo: '',
StuType: '', //学生类型
StuGuestState: '0', //合同状态
SFTime: '',
EFTime: '',
StuStage: '', //客户状态
Q_FType: '1', //跟进类型 1范围内有跟进记录 2范围内没有跟进记录
CreateIds: [],
School_Id: '-1', //校区 School_Id: '-1', //校区
CourseId: '', //课程
ConsultantId: '', //课程顾问
CreateType: '', //客户来源
StuChannel: "", //收客渠道
StuSourceId: '',
StuPurpose: '', //学习目的
HeadTeacherId: '', //老师 HeadTeacherId: '', //老师
QueryTpye: 2, //老师查询 QueryTpye: 2, //老师查询
AdvisorStatus: "", //当前状态 QGuestState: 0, //学员状态
}, },
loading: false, loading: false,
dataList: null, //列表数据 dataList: null, //列表数据
...@@ -294,24 +152,12 @@ ...@@ -294,24 +152,12 @@
Name: '不限' Name: '不限'
}, { }, {
Id: '1', Id: '1',
Name: '是' Name: '未毕业'
}, {
Id: '0',
Name: '否'
}, ],
hetongList: [{
Id: '1',
Name: '正常'
}, { }, {
Id: '2', Id: '2',
Name: '退学' Name: '已毕业'
}, { }],
Id: '5',
Name: '停课'
}, {
Id: '7',
Name: '毕业'
}, ],
dateArray: [], //日期数组 dateArray: [], //日期数组
RListlength: 0, RListlength: 0,
titlelist: [], titlelist: [],
...@@ -334,6 +180,7 @@ ...@@ -334,6 +180,7 @@
MyTransListData: [], MyTransListData: [],
goalsList: [], //学习目的列表 goalsList: [], //学习目的列表
MyTeacherListData: [], //查询老师列表 MyTeacherListData: [], //查询老师列表
AllTeacherList: [], //所有教师
AdvConfigList: [], //客户状态列表 AdvConfigList: [], //客户状态列表
AuthObj: { AuthObj: {
isShowSaleInfo: false, isShowSaleInfo: false,
...@@ -386,6 +233,18 @@ ...@@ -386,6 +233,18 @@
this.getList(); //获取列表 this.getList(); //获取列表
}, },
methods: { methods: {
filterTeacher(val, update) {
update(() => {
if (val === "") {
this.MyTeacherListData = JSON.parse(JSON.stringify(this.AllTeacherList));
} else {
const needle = val.toLowerCase();
this.MyTeacherListData = this.AllTeacherList.filter(
v => v.EmployeeName.toLowerCase().indexOf(needle) > -1
);
}
});
},
//获取状态列表 //获取状态列表
getAdvConfigList() { getAdvConfigList() {
let msg = { let msg = {
...@@ -409,6 +268,7 @@ ...@@ -409,6 +268,7 @@
}).then(res => { }).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.MyTeacherListData = res.Data; this.MyTeacherListData = res.Data;
this.AllTeacherList = res.Data;
} }
}) })
}, },
......
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