Commit 35f7d5da authored by 罗超's avatar 罗超

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

parents 53ff514a 03c4b3c7
......@@ -33,7 +33,7 @@
<template>
<div>
<!--课程顾问 或有教师权限-->
<template v-if="userInfo.IsCourseConsultant == 1||isHaveTeacherEdit">
<template v-if="userInfo.IsCourseConsultant == 1||isHaveTeacherEdit||isHaveXueManager">
<q-btn label="新增" color="accent q-mb-lg" size="sm" @click="isShowAdd = true" />
</template>
<template v-else>
......@@ -43,11 +43,14 @@
@click="isShowAdd = false" />
<template v-if="isShowAdd">
<div class="row wrap">
<q-select filled stack-label option-label="Name" @input="getRole" v-model="AssitMsg.AssistType"
<q-select filled stack-label option-label="Name" @input="changeData" v-model="AssitMsg.AssistType"
option-value="Id" :options="AssistDropList" label="角色" dense class="col-6 q-pb-lg q-pr-lg" emit-value
map-options />
<q-select filled dense v-if="AssitMsg.AssistType == 2" v-model="AssitMsg.AssistId" :options="RoleListData"
option-label="EmployeeName" class="col-6 q-pb-lg" option-value="Id" emit-value map-options />
<q-select filled dense v-if="AssitMsg.AssistType == 4" v-model="AssitMsg.AssistId"
:options="TeacherList" option-label="EmployeeName" class="col-6 q-pb-lg" option-value="Id" emit-value
map-options />
<q-select filled dense v-else v-model="AssitMsg.AssistId" @filter="filterEmployee" use-input
:options="myEmployeeList" option-label="EmployeeName" class="col-6 q-pb-lg" option-value="Id" emit-value
map-options />
......@@ -70,8 +73,8 @@
<td>{{ item.AssistTypeName }}</td>
<td>{{ item.AssistName }}</td>
<td>
<template v-if="userInfo.IsCourseConsultant == 1||isHaveTeacherEdit">
<div v-if="userInfo.IsCourseConsultant == 1&&item.AssistType != 2 && item.AssistType != 4">
<template v-if="userInfo.IsCourseConsultant == 1||isHaveTeacherEdit||isHaveXueManager">
<div v-if="userInfo.IsCourseConsultant == 1&&(item.AssistType == 2 ||item.AssistType == 3)">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="修改"
@click="getEditInfo(item)"></q-btn>
<q-btn flat size="xs" icon="delete" color="negative" style="font-weight:400" label="删除"
......@@ -83,12 +86,7 @@
<q-btn flat size="xs" icon="delete" color="negative" style="font-weight:400" label="删除"
@click="deleteAssits(item.Id)" />
</div>
<div v-if="isShowBian(item)">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="修改"
@click="getGuwenEditInfo(item)"></q-btn>
</div>
</template>
</td>
</tr>
</table>
......@@ -141,6 +139,7 @@
page_Count: 0,
AssistDropList: [], //下拉数据
RoleListData: [], //课程顾问下拉数据
TeacherList: [], //教师列表
employeeList: [],
myEmployeeList: [],
userInfo: {}
......@@ -170,12 +169,12 @@
}
}
return false;
}
},
}),
mounted() {
this.getList();
this.GetAssistTypeList();
this.getEmployeeList();
},
methods: {
//获取协助人员
......@@ -185,41 +184,48 @@
if (res.Code == 1) {
let template = res.Data;
template.forEach(x => {
if (this.userInfo.IsCourseConsultant == 1 && this.isHaveTeacherEdit) {
if (this.userInfo.IsCourseConsultant == 1) {
if (x.Id != 1) {
this.AssistDropList.push(x);
}
} else if (this.userInfo.IsCourseConsultant == 1 && !this.isHaveTeacherEdit) {
if (x.Id != 1 && x.Id != 4) {
if (x.Id == 4 && this.isHaveTeacherEdit) {
this.AssistDropList.push(x);
}
} else if (this.userInfo.IsCourseConsultant == 0 && this.isHaveTeacherEdit) {
if (x.Id == 4) {
this.AssistDropList.push(x);
} else if (this.userInfo.IsCourseConsultant == 0) {
if (this.isHaveTeacherEdit) {
if (x.Id == 4) {
this.AssistDropList.push(x);
}
}
}
});
}
});
},
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 1,
UserRole: 0
}).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
});
},
//切换课程顾问
getRole() {
queryEmployee({
changeData() {
var queryObj = {
IsLeave: 1,
UserRole: 2
}).then(res => {
this.RoleListData = res.Data;
});
UserRole: 0,
AccountTypeStr: "",
};
if (this.AssitMsg.AssistType == 2) {
queryObj.UserRole = 2;
queryEmployee(queryObj).then(res => {
this.RoleListData = res.Data;
});
}
if (this.AssitMsg.AssistType == 4) {
queryObj.AccountTypeStr = "2"
queryEmployee(queryObj).then(res => {
this.TeacherList = res.Data;
});
} else {
queryObj.UserRole = 0;
queryEmployee(queryObj).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
});
}
},
//筛选员工
filterEmployee(val, update, abort) {
......@@ -241,6 +247,7 @@
message: "数据保存成功!",
position: "top"
});
this.$emit("success");
this.getList();
this.isShowAdd = false;
this.clearMsg();
......@@ -263,16 +270,6 @@
})
.catch(() => {});
},
//课程顾问是本人 显示编辑按钮
isShowBian(item) {
let isShow = false;
if (item.AssistTypeName == '课程顾问') {
// if (this.userInfo.AccountName == item.AssistName) {
isShow = true
// }
}
return isShow;
},
//删除协同
deleteAssits(Id) {
let that = this;
......
......@@ -214,7 +214,7 @@
stuData: {},
userInfo: {},
isconsult: false, //学生咨询弹窗
IsHaveCurseManager:false,//是否存在课程顾问
IsHaveCurseManager: false, //是否存在课程顾问
};
},
created() {
......@@ -264,7 +264,9 @@
},
//刷新列表
refreshStudentPage() {
console.log("2222");
this.$emit("success");
},
//客户情况信息的修改
consultsuccess(data) {
......
......@@ -436,7 +436,6 @@
WeChatNo: '',
StuType: '', //学生类型
StuGuestState: '', //合同状态
IsQueryMyStu: '1', //是否查询我的学员 1是 0否
SFTime: '',
EFTime: '',
StuStage: '', //客户状态
......
......@@ -147,7 +147,6 @@
分数差距
</q-th>
</template>
<template v-else>
<q-th :key="col.name" :props="props" style="max-width:70px">
{{ col.label }}
......@@ -155,6 +154,7 @@
</template>
</template>
</q-tr>
<template v-slot:bottom>
</template>
</q-table>
......@@ -191,6 +191,7 @@
field: 'StudentCount',
align: 'left'
},
{
name: 'AttendClassHourScore',
label: '上课时数',
......
......@@ -42,7 +42,12 @@
separator="none" :data="dataList" :columns="columns" row-key="">
<q-tr slot="header" slot-scope="props" :props="props">
<template v-for="col in props.cols" :props="props">
<template v-if="col.label=='线上与学生互动数'">
<template v-if="col.label=='班主任学生互动'">
<q-th :key="col.name" :props="props" style="max-width:75px;text-align:center;">
班主任<br />学生互动
</q-th>
</template>
<template v-else-if="col.label=='线上与学生互动数'">
<q-th :key="col.name" :props="props" style="max-width:90px;text-align:center;">
线上与学生<br />互动数
</q-th>
......@@ -168,14 +173,22 @@
<span v-else>{{props.row.DateStr}}</span>
</q-td>
</template>
<template v-slot:body-cell-FinishTimesPlanCount="props">
<q-td :props="props">
{{props.row.FinishTimes}} / {{props.row.FollowCount}}
</q-td>
</template>
<template v-slot:bottom-row>
<q-tr>
<q-tr v-if="lastRow">
<q-td>
{{lastRow.DateStr}}
</q-td>
<q-td>
{{lastRow.StudentCount}}
</q-td>
<q-td>
{{lastRow.FinishTimes}} / {{lastRow.FollowCount}}
</q-td>
<q-td>
{{lastRow.AttendClassHourScore}}
</q-td>
......@@ -241,7 +254,6 @@
</q-td>
</q-tr>
</template>
<template v-slot:bottom>
</template>
</q-table>
......@@ -277,6 +289,11 @@
align: 'left',
sortable: true
},
{
name: 'FinishTimesPlanCount',
label: '班主任学生互动',
align: 'left'
},
{
name: 'AttendClassHourScore',
label: '上课时数',
......
......@@ -21,6 +21,7 @@
position: sticky;
left: 0px;
}
.stulistNumber {
display: inline-block;
width: 25px;
......@@ -32,6 +33,7 @@
cursor: pointer;
color: #2961FE;
}
.OCourseTable {
width: 400px;
text-align: center;
......@@ -45,6 +47,7 @@
height: 40px;
background-color: rgb(238, 238, 239);
}
</style>
<template>
<div class="page-body studentTracking">
......@@ -98,67 +101,73 @@
</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 @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>
(
<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>
<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>
......@@ -203,7 +212,6 @@
<span>{{dataList.Stat.DropOutNum?dataList.Stat.DropOutNum:0}}人</span>
</div>
</div>
<div style="width: 100%;margin-top: 20px">
<div style="width: 100%;overflow-x: auto;">
<table class="po_content singeRowTable" ref="table" style="border:1px solid #E6E6E6;" cellspacing="0"
......@@ -212,22 +220,18 @@
<th width="120" rowspan="2" style="min-width: 110px;z-index: 999;">学生</th>
<th width="120" rowspan="2" style="min-width: 110px;">电话</th>
<th width="120" rowspan="2" style="min-width: 110px;">课程顾问</th>
<th width="120" rowspan="2" style="min-width: 110px;">协助老师</th>
<th width="120" rowspan="2" style="min-width: 110px;">班主任</th>
<th width="100" rowspan="2" style="min-width: 100px;">合同时间</th>
<th width="200" rowspan="2" style="min-width: 200px;">所报课程</th>
<th width="100" rowspan="2" style="min-width: 100px;">开始时间</th>
<th width="100" rowspan="2" style="min-width: 100px;">结束时间</th>
<th width="80" rowspan="2" style="min-width: 80px;">当前级别</th>
<th width="100" rowspan="2" style="min-width: 100px;">生日</th>
<th width="100" rowspan="2" style="min-width: 100px;">客户来源</th>
<th width="100" rowspan="2" style="min-width: 100px;">学习目的</th>
<th width="100" rowspan="2" style="min-width: 100px;">来源关联人</th>
<th width="100" rowspan="2" style="min-width: 100px;">收客渠道</th>
<th width="100" rowspan="2" style="min-width: 100px;">负责人</th>
<th width="100" rowspan="2" style="min-width: 100px;">合同状态</th>
<th width="100" rowspan="2" style="min-width: 120px;">期望达成协议日期</th>
<th width="100" rowspan="2" style="min-width: 100px;">目前状态</th>
<th width="100" rowspan="2" style="min-width: 100px;">胜率</th>
<th width="100" rowspan="2" style="min-width: 100px;">跟踪记录</th>
<th width="500" colspan="3" style="min-width: 500px;" v-for=" ( item , index ) in RListlength "
:key='index'>
<div>第{{index+1}}个月</div>
......@@ -254,12 +258,19 @@
<td>
<span v-html="getTeacherManager(item)"></span>
</td>
<td>
<span>{{ item.ContractSTime }}</span>
</td>
<td>
<span>{{ item.CourseName }}</span>
</td>
<td>
<span>{{ item.BeginClassDate }}</span>
</td>
<td>
<span>{{ item.GraduationTime }}</span>
</td>
<td>
<span>{{ item.JapanBaseInfo }}</span>
</td>
......@@ -272,10 +283,7 @@
<td>
{{item.StuPurposeName}}
</td>
<td>
<span><span v-if="item.CreateType==2 && item.EnterpriseName">{{item.EnterpriseName}}:</span>
{{ item.StuSourceIdName?item.StuSourceIdName:'-' }}</span>
</td>
<td>
<span>{{ item.StuChannelName?item.StuChannelName:'-' }}</span>
</td>
......@@ -285,50 +293,8 @@
<td>
<span>{{ item.StuGuestStateName }}</span>
</td>
<td>
{{item.AdvisorExpectDate}}
</td>
<td>
{{item.AdvisorStatusName}}
</td>
<td>
{{item.AdvisorWinRate}}%
</td>
<td>
<template v-if="item.AdvisorList">
<template v-if="item.AdvisorList.length>0">
{{item.AdvisorList[0].AdvisorStatusName}}
<span class="stulistNumber">
{{item.AdvisorList.length}}
<q-popup-proxy>
<q-banner>
<table class="OCourseTable" style="border-collapse:collapse;">
<tr>
<th>跟进状态</th>
<th>跟进日期</th>
<th>跟进比例</th>
<th>跟进备注</th>
</tr>
<tr v-for="(sItem,sIndex) in item.AdvisorList" style="border-bottom:1px dashed #d1d1d1;"
:key="sIndex">
<td>{{sItem.AdvisorStatusName}}</td>
<td>{{sItem.AdvisorDate}}</td>
<td>{{sItem.AdvisorRate}}</td>
<td>{{sItem.AdvisorRemark}}</td>
</tr>
</table>
</q-banner>
</q-popup-proxy>
</span>
</template>
<template v-if="item.AdvisorList.length==0">
</template>
</template>
</td>
<td v-for=" ( x , y ) in titlelist " :key="y">
<div v-if="item.MonthList[x.index]">
<div v-if="x.Id==1">
<span>{{item.MonthList[x.index].Month}}</span>
<span style="margin:0 3px">/</span>
......@@ -390,7 +356,8 @@
queryCourseDropdownList,
} from '../../api/course/index'
import {
queryEmployee
queryEmployee,
} from "../../api/users/user";
import {
queryGuestStateList,
......@@ -426,6 +393,8 @@
},
data() {
return {
AccountType: 2,
IsLeave: 1,
msg: {
pageIndex: 1,
pageSize: 12,
......@@ -449,7 +418,9 @@
CreateType: '', //客户来源
StuChannel: "", //收客渠道
StuSourceId: '',
StuPurpose: '' //学习目的
StuPurpose: '', //学习目的
HeadTeacherId: '', //老师
},
//归属类型列表
BelongTypeList: [{
......@@ -525,6 +496,7 @@
TransListData: [], //转介人数据
MyTransListData: [],
goalsList: [], //学习目的列表
MyTeacherListData: [], //查询老师列表
}
},
created() {
......@@ -565,9 +537,19 @@
this.getEmployeeList();
this.getStudentDorpDown();
this.queryGoalsList();
// this.downloadStudentFollow();
this.findData();
},
methods: {
findData() {
queryEmployee({
AccountTypeStr: "2",
IsLeave: 1
}).then(res => {
if (res.Code == 1) {
this.MyTeacherListData = res.Data;
}
})
},
downloadStudentFollow() {
var msg = JSON.parse(JSON.stringify(this.msg));
this.loading = true;
......@@ -908,8 +890,18 @@
}
return managerName;
},
},
getClassTeacher(row) {
let managerName = "<span class='text-grey-4'>暂无</span>";
if (row.AssistList && row.AssistList.length > 0) {
row.AssistList.forEach(y => {
if (y.AssistType == 6) {
managerName = `<span class='text-dark'>${y.AssistName}</span>`;
}
});
}
return managerName;
},
}
}
</script>
......
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