Commit 39768cd8 authored by Mac's avatar Mac

修改

parent 8f2b0a0e
......@@ -419,6 +419,7 @@ export default {
if (res.Code == 1) {
this.stuData = res.Data;
this.stateId = res.Data.StuStage;
res.Data.BelongType = this.baseObj.BelongType
this.baseObj = res.Data
}
});
......
......@@ -36,27 +36,40 @@ th:first-child{position: sticky;left:0px;}
<q-select @input="resetSearch" dense filled v-model="msg.StuGuestState" :options="customState" option-label="Name"
option-value="Id" emit-value map-options label="客户状态" clearable />
</div>
<div class="col-3">
<q-select @input="resetSearch" dense v-model="msg.IsQueryMyStu" :options="isMyStuList" filled use-input
label="是否我协助的" option-label="Name" option-value="Id" ref="CustomerName" class="col-6" emit-value
map-options >
</q-select>
<div class="col-3">
<q-select @input="resetSearch" dense filled option-value="Id" option-label="Name" v-model="msg.BelongType"
:options="BelongTypeList" emit-value map-options label="归属类型" />
</div>
<div class="col-3" v-if="msg.BelongType == 4">
<q-select
@input="resetSearch"
dense
clearable
@filter="filterSubord"
use-input
filled
option-value="Id"
option-label="EmployeeName"
v-model="msg.CreateIds"
multiple
:options="SubordList"
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.Q_EnrollState"
:options="FTypeList" 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.BelongType"
:options="BelongTypeList" emit-value map-options label="归属类型" />
</div>
</div>
</div>
<div class="page-content">
<q-table :pagination="msg" :loading="loading" no-data-label="暂无相关数据" flat
class="sticky-right-column-table sticky-tow-column-table" separator="none" :separator="cell"
class="sticky-right-column-table sticky-tow-column-table"
:data="dataList" :columns="columns" row-key="StuId" >
......@@ -73,51 +86,28 @@ th:first-child{position: sticky;left:0px;}
</q-td>
</template>
<template v-slot:body-cell-PlanPrice="props">
<q-td :props="props">
<q-td :props="props" style="max-width: 200px; white-space: normal;word-break:break-all">
<!-- <el-tooltip class="item" effect="dark" :content="props.row.PlanPrice" placement="top">
<div class="w200text">{{props.row.PlanPrice}}</div>
</el-tooltip> -->
<div class="w200text">{{props.row.PlanPrice}}</div>
<div>{{props.row.PlanPrice}}</div>
</q-td>
</template>
<template v-slot:body-cell-BaseCondition="props">
<q-td :props="props">
<div class="w200text">{{props.row.BaseCondition}}</div>
<!-- <el-tooltip class="item" effect="dark" :content="props.row.BaseCondition" placement="top">
<div class="w200text">{{props.row.BaseCondition}}</div>
</el-tooltip> -->
</q-td>
</template>
<template v-slot:body-cell-DemandPoint="props">
<q-td :props="props">
<div class="w200text">{{props.row.DemandPoint}}</div>
<!-- <el-tooltip class="item" effect="dark" :content="props.row.DemandPoint" placement="top">
<div class="w200text">{{props.row.DemandPoint}}</div>
</el-tooltip> -->
</q-td>
</template>
<template v-slot:body-cell-ResistPoint="props">
<q-td :props="props">
<div class="w200text">{{props.row.ResistPoint}}</div>
<!-- <el-tooltip class="item" effect="dark" :content="props.row.ResistPoint" placement="top">
<div class="w200text">{{props.row.ResistPoint}}</div>
</el-tooltip> -->
</q-td>
</template>
<template v-slot:body-cell-ConsultingResults="props">
<q-td :props="props">
<div class="w200text">{{props.row.ConsultingResults}}</div>
<!-- <el-tooltip class="item" effect="dark" :content="props.row.ConsultingResults" placement="top">
<div class="w200text">{{props.row.ConsultingResults}}</div>
</el-tooltip> -->
<q-td :props="props" class="w500text">
<div ><span class="w500text-l">基本情况:</span> <span class="text-r">{{props.row.BaseCondition?props.row.BaseCondition:'暂无'}}</span> </div>
<div ><span class="w500text-l">需求点:</span> <span class="text-r">{{props.row.DemandPoint?props.row.DemandPoint:'暂无'}}</span></div>
<div ><span class="w500text-l">抗拒点:</span> <span class="text-r">{{props.row.ResistPoint?props.row.ResistPoint:'暂无'}}</span></div>
<div ><span class="w500text-l">咨询结果:</span> <span class="text-r">{{props.row.ConsultingResults?props.row.ConsultingResults:'暂无'}}</span></div>
</q-td>
</template>
<template v-slot:body-cell-FURemark="props">
<q-td >
<div style="max-width: 200px;overflow: hidden;white-space: normal;word-break:break-all;max-height: 40px;" v-if="props.row.FURemark" v-html="props.row.FURemark"></div>
<span style="text-decoration: underline;cursor: pointer;color: #2961fe ;" v-if="props.row.FURemark" @click="lookgengduo(props.row)">查看更多</span>
<div style="display: flex;align-items: center;justify-content: space-between;">{{props.row.FUTime}}
<span style="text-decoration: underline;cursor: pointer;color: #2961fe ;" v-if="props.row.FURemark" @click="lookgengduo(props.row)">更多</span>
</div>
<div style="max-width: 240px;overflow: hidden;white-space: normal;word-break:break-all;max-height: 40px;" v-if="props.row.FURemark" v-html="props.row.FURemark"></div>
</q-td>
</template>
<template v-slot:bottom>
......@@ -156,7 +146,7 @@ import {
import {
queryStuStageList,
GetStudentTypeList,
GetPersonalDimension
} from "../../api/school/index";
import studentRightForm from "../../components/school/student/studentRight-form";
import studentFUForm from "../../components/school/student/studentFu-form";
......@@ -182,9 +172,11 @@ export default {
WeChatNo:'',
StuType:'',//学生类型
StuGuestState:'',//状态
BelongType:'1',//归属类型(1-全部,2-我负责的,3-我协同的)
BelongType:'1',//归属类型(1-全部,2-我负责的,3-我协同的,4 下属)
Q_EnrollState:'0',//报名状态 1已报名 2未成交 0不限
IsQueryMyStu:'-1',
IsQueryMyStu:'1',//是否我协助的 1是 2否
CreateIds: [],
},
loading: false,
......@@ -194,7 +186,7 @@ export default {
customState: [],
isMyStuList:[{Id:'-1',Name:'不限'},{Id:'1',Name:'是'},{Id:'0',Name:'否'},],
FTypeList:[{Id:'0',Name:'不限'},{Id:'1',Name:'已报名'},{Id:'2',Name:'未成交'},],
BelongTypeList:[{Id:'1',Name:'全部'},{Id:'2',Name:'我负责的'},{Id:'3',Name:'我协同的'},],
BelongTypeList:[{Id:'1',Name:'全部'},{Id:'2',Name:'我负责的'},{Id:'3',Name:'我协同的'},{Id: 4, Name: "我下属的" }],
dateArray: [], //日期数组
columns: [{
name: "StuName",
......@@ -253,40 +245,34 @@ export default {
},
{
name: "BaseCondition",
label: "基本情况",
label: "客户情况分析",
field: "BaseCondition",
align: "left"
},
{
name: "DemandPoint",
label: "需求点",
field: "DemandPoint",
align: "left"
},
{
name: "ResistPoint",
label: "抗拒点",
field: "ResistPoint",
align: "left"
},
{
name: "ConsultingResults",
label: "咨询结果",
align: "left",
field: "ConsultingResults"
},
// {
// name: "DemandPoint",
// label: "需求点",
// field: "DemandPoint",
// align: "left"
// },
// {
// name: "ResistPoint",
// label: "抗拒点",
// field: "ResistPoint",
// align: "left"
// },
// {
// name: "ConsultingResults",
// label: "咨询结果",
// align: "left",
// field: "ConsultingResults"
// },
{
name: "JapanBaseInfo",
label: "日语基础",
field: "JapanBaseInfo",
align: "left"
},
{
name: "FUTime",
label: "跟进日期",
field: "FUTime",
align: "left"
},
{
name: "FURemark",
label: "跟进备注",
......@@ -300,17 +286,45 @@ export default {
isShowStuRight:false,
isJudgeTrans:1,
isShowStuFU:false,
SubordList: [], //我的下属数据
AllSubordList: []
}
},
created() { },
created() {
let userinfo = this.getLocalStorage();
//这个权限和学员跟踪学员的权限一样
userinfo.ActionMenuList.map(x=>{//判断权限
if(x.FunctionCode == "studentTracking_look"){//判断是否有保存的权限
this.msg.IsQueryMyStu = 2
return
}
})
},
mounted() {
this.getList(); //获取规则
this.getStuStageList()
this.getCustomTypeList()
this.GetSubordList()
},
methods: {
//获取我下属的下拉数据
GetSubordList() {
GetPersonalDimension().then(res => {
if (res.Code == 1) {
this.SubordList = res.Data;
this.AllSubordList = res.Data;
}
});
},
//筛选转介人
filterSubord(val, update, abort) {
update(() => {
this.SubordList = this.AllSubordList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
resetSearch() {
this.msg.pageIndex = 1;
this.getList();
......@@ -360,7 +374,7 @@ export default {
getStuRight(obj) {
if (obj) {
this.stuOption = obj;
this.BelongType = obj.BelongType;
this.BelongType = 3;//点击弹出不让修改
}
this.isShowStuRight = true;
},
......@@ -393,15 +407,23 @@ export default {
background-color: transparent;
border: none;
}
.w200text{
/* width: 150px;
overflow: hidden;
white-space: nowrap;
word-wrap: normal;
text-overflow:ellipsis;
cursor: pointer; */
min-width: 200px;
.w500text{
width: 500px;
white-space: normal;word-break:break-all
}
.w500text div{
display:flex;
align-items: flex-start;
}
.w500text .w500text-l{
display: inline-block;
text-align-last: justify;
width: 70px;
color: #666666;;
}
.w500text .text-r{
flex:1
}
</style>
......@@ -33,7 +33,7 @@ th:first-child{position: sticky;left:0px;}
option-label="Name" option-value="Id" emit-value map-options label="客户类型" />
</div>
<div class="col-3">
<q-select @input="resetSearch" dense filled v-model="msg.StuGuestState" :options="customState" option-label="Name"
<q-select @input="resetSearch" dense filled v-model="msg.StuStage" :options="customState" option-label="Name"
option-value="Id" emit-value map-options label="客户状态" clearable />
</div>
<div class="col-3">
......@@ -50,17 +50,7 @@ th:first-child{position: sticky;left:0px;}
label="归属类型"
/>
</div>
<!-- <div class="col-3">
<q-select @input="resetSearch" dense v-model="msg.IsQueryMyStu" :options="isMyStuList" filled use-input
label="是否查询我的学员" option-label="Name" option-value="Id" ref="CustomerName" class="col-6" emit-value
map-options >
</q-select>
</div>
<div class="col-3">
<q-select @input="resetSearch" dense filled option-value="Id" option-label="Name" v-model="msg.Q_FType"
:options="FTypeList" emit-value map-options label="跟进类型" />
</div> -->
<div class="col-3" v-if="msg.BelongType == 4">
<q-select
......@@ -80,6 +70,35 @@ th:first-child{position: sticky;left:0px;}
label="我下属的"
/>
</div>
</div>
</div>
<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 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>
</div>
<div class="page-search row items-center" v-if="morequery">
<div class="col row wrap q-mr-lg q-col-gutter-md">
<div class="col-3">
<!-- <q-select @input="resetSearch" dense filled option-value="Id" option-label="Name" v-model="msg.Q_FType"
:options="FTypeList" emit-value map-options label="跟进类型" /> -->
<q-option-group
v-model="msg.Q_FType"
inline
class="q-mb-md"
:options="[
{ label: '范围内有跟进记录', value: '1' },
{ label: '范围内没有跟进记录', value: '2' },
]"
/>
</div>
<div class="col-3">
<q-field filled dense>
<template v-slot:control>
......@@ -89,11 +108,21 @@ th:first-child{position: sticky;left:0px;}
</template>
</q-field>
</div>
<div class="col-3">
<q-select @input="resetBelong" 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 filled stack-label option-value="CourseId" option-label="CourseName" v-model="addMsg.CourseList"
use-chips use-input :options="myCourseList" label="课程" :dense="false" class="col-6 q-pr-lg q-pb-lg" emit-value
multiple map-options @filter="filterFn"
/>
</div>
</div>
</div>
<div class="col row wrap q-gutter-x-md" v-if="dataList.Stat">
<div class="col stics">
<span class="stics-name">学生总数</span>
......@@ -124,6 +153,7 @@ th:first-child{position: sticky;left:0px;}
<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;" >
......@@ -149,7 +179,7 @@ th:first-child{position: sticky;left:0px;}
</th>
</tr>
<tr >
<th v-for=" ( item , index ) in titlelist " :key = 'index' :width="item.Id==1?100:200" >{{item.Name}}</th>
<th v-for=" ( item , index ) in titlelist " :key = 'index' :width="item.Id==1?120:200" >{{item.Name}}</th>
</tr>
<tr v-for=" ( item , index ) in dataList.RList " :key="index" v-if='dataList.RList && dataList.RList.length>0'>
<td style=" border: 1px solid #d2d2d2;">
......@@ -187,19 +217,26 @@ th:first-child{position: sticky;left:0px;}
<span style="margin:0 3px">/</span>
<span :style="{'color':item.MonthList[x.index].IntroductionNum>0?'red':'#111'}">{{item.MonthList[x.index].IntroductionNum}}</span>
</div>
<div v-if="x.Id==2">
<span v-if="item.MonthList[x.index].TeacherTime">{{item.MonthList[x.index].TeacherTime+':'}}</span>
<div v-if="x.Id==2" style="padding: 3px;">
<div v-if="item.MonthList[x.index].TeacherTime" style="display: flex;align-items: center;justify-content: space-between;">
<div >{{item.MonthList[x.index].TeacherTime}}</div>
<span style="text-decoration: underline;cursor: pointer;color: #2961fe ;" @click="lookgengduo(item)">更多</span>
</div>
<template >
<span v-if="item.MonthList[x.index].Teacher!=''" v-html="item.MonthList[x.index].Teacher"></span>
<div v-if="item.MonthList[x.index].Teacher!=''" v-html="item.MonthList[x.index].Teacher"></div>
<span v-if="item.MonthList[x.index].Teacher==''">-</span>
</template>
</div>
<div v-if="x.Id==3">
<span v-if="item.MonthList[x.index].ConsultantTime">{{item.MonthList[x.index].ConsultantTime+':'}}</span>
<div v-if="x.Id==3" style="padding: 3px;">
<div v-if="item.MonthList[x.index].ConsultantTime" style="display: flex;align-items: center;justify-content: space-between;">
<div >{{item.MonthList[x.index].ConsultantTime}}</div>
<span style="text-decoration: underline;cursor: pointer;color: #2961fe ;" @click="lookgengduo(item)">更多</span>
</div>
<template >
<span v-if="item.MonthList[x.index].Consultant" v-html="item.MonthList[x.index].Consultant"></span>
<div v-if="item.MonthList[x.index].Consultant" v-html="item.MonthList[x.index].Consultant"></div>
<span v-if="item.MonthList[x.index].Consultant==''">-</span>
</template>
</div>
......@@ -228,6 +265,13 @@ th:first-child{position: sticky;left:0px;}
@reload="getList"
>
</studentRight-form>
<studentFUForm
v-if="isShowStuFU"
:save-obj="stuOption"
@close="closeStuForm"
>
</studentFUForm>
</div>
</template>
<script>
......@@ -236,12 +280,18 @@ import {
getStudentFollowUpPageList,
} from '../../api/studyabroad/index'
import {
queryCourseDropdownList,
} from '../../api/course/index'
import {
queryStuStageList,
GetStudentTypeList,
GetPersonalDimension
GetPersonalDimension,
getSchoolDropdown
} from "../../api/school/index";
import studentRightForm from "../../components/school/student/studentRight-form";
import studentFUForm from "../../components/school/student/studentFu-form";
export default {
meta: {
......@@ -249,7 +299,8 @@ export default {
},
props: {},
components: {
studentRightForm
studentRightForm,
studentFUForm
},
data() {
return {
......@@ -262,13 +313,15 @@ export default {
QQ:'',
WeChatNo:'',
StuType:'',//学生类型
StuGuestState:'',//状态
StuGuestState:'',//合同状态
IsQueryMyStu:'1',//是否查询我的学员 1是 0否
SFTime:'',
EFTime:'',
Q_FType:'-1',//跟进类型 1范围内有跟进记录 2范围内没有跟进记录
StuStage:'',//客户状态
Q_FType:'',//跟进类型 1范围内有跟进记录 2范围内没有跟进记录
BelongType:1,
CreateIds: [],
School_Id :'-1',//校区
},
//归属类型列表
......@@ -306,7 +359,16 @@ export default {
isShowStuRight:false,
isJudgeTrans:1,
SubordList: [], //我的下属数据
AllSubordList: []
AllSubordList: [],
stuOption: null,
isShowStuFU:false,
morequery:false,
CompanyList:[],
allCourseList: [],//课程
myCourseList:[],
}
},
......@@ -324,8 +386,38 @@ export default {
this.getStuStageList()
this.getCustomTypeList()
this.GetSubordList()
this.getBranchList()
this.getCourseList();//获取课程下拉
},
methods: {
getBranchList(){//获取校区
getSchoolDropdown({}).then(res => {
var tempArray = res.Data;
if (!tempArray) {
tempArray = [];
}
tempArray.unshift({
SId: '-1',
SName: "不限"
})
this.CompanyList = tempArray;
}).catch(() => {
})
},
//获取课程
getCourseList() {
queryCourseDropdownList({
IsQPrice: 1
}).then(res => {
if (res.Code == 1) {
let data = res.Data
this.allCourseList = JSON.parse(JSON.stringify(data));
this.myCourseList = JSON.parse(JSON.stringify(data));
}
})
},
//获取我下属的下拉数据
GetSubordList() {
GetPersonalDimension().then(res => {
......@@ -369,19 +461,16 @@ export default {
if(msg.StuGuestState=='' || msg.StuGuestState==null){
msg.StuGuestState = 0
}
if(msg.StuStage=='' || msg.StuStage==null){
msg.StuStage = 0
}
getStudentFollowUpPageList(msg).then(res => {
this.loading = false;
this.RListlength = res.Data.PageData && res.Data.PageData.MaxMonth?res.Data.PageData.MaxMonth:1;
this.titlelist=[{Name:'月份/续费/转介',Id:1,index:0},{Name:'教师跟踪时间及情况说明',Id:2,index:0},{Name:'顾问跟踪时间及情况说明',Id:3,index:0},];
this.dataList = res.Data.PageData;
this.PageCount = res.Data.PageCount;
// if(this.dataList && this.dataList.RList&& this.dataList.RList.length>0){
// this.dataList.RList.forEach(x=>{
// if(x.MonthList.length> this.RListlength){
// this.RListlength = x.MonthList.length
// }
// })
// }
this.titlelist=[];
for(let i=0;i<this.RListlength;i++){
let obj=[{Name:'月份/续费/转介',Id:1,index:i},{Name:'教师跟踪时间及情况说明',Id:2,index:i},{Name:'顾问跟踪时间及情况说明',Id:3,index:i},]
......@@ -421,12 +510,13 @@ export default {
getStuRight(obj) {
if (obj) {
this.stuOption = obj;
this.BelongType = obj.BelongType;
this.BelongType = 3;
}
this.isShowStuRight = true;
},
closeStuForm() {
this.isShowStuRight = false;
this.isShowStuFU = false
},
resetBelong() {
if (this.msg.BelongType != 4) {
......@@ -434,6 +524,14 @@ export default {
this.getList();
}
},
lookgengduo(obj){//跟进备注
if (obj) {
this.stuOption = obj;
this.BelongType = obj.BelongType;
}
this.isShowStuFU = true;
}
},
}
......@@ -464,4 +562,7 @@ export default {
font-weight: 600;
margin-right: 10px
}
.roatImg{
transform: rotate(180deg);
}
</style>
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