Commit ed6c583e authored by 罗超's avatar 罗超

新增呼叫平台

parent 360f6033
<style> <style>
.info_title { .info_title {
padding: 0 22px; padding: 0 22px;
margin-bottom: 20px; margin-bottom: 20px;
flex-shrink: 0; flex-shrink: 0;
font-size: 16px; font-size: 16px;
font-weight: 700; font-weight: 700;
font-family: Microsoft YaHei, Avenir, Helvetica, Arial, sans-serif !important; font-family: Microsoft YaHei, Avenir, Helvetica, Arial, sans-serif !important;
} }
.customer_info_component { .customer_info_component {
width: 100%; width: 100%;
} }
.customer_info_Stage { .customer_info_Stage {
width: 100%; width: 100%;
padding: 0 7px; padding: 0 7px;
cursor: pointer; cursor: pointer;
display: flex; display: flex;
align-items: center; align-items: center;
width: 100%; width: 100%;
padding: 12px 22px; padding: 12px 22px;
justify-content: space-between; justify-content: space-between;
} }
.stage_label { .stage_label {
color: #606266; color: #606266;
flex-shrink: 0; flex-shrink: 0;
width: 65px; width: 65px;
text-align: right; text-align: right;
} }
.stage_value { .stage_value {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.info_content { .info_content {
margin-bottom: 30px; margin-bottom: 30px;
} }
.info_item { .info_item {
position: relative; position: relative;
display: flex; display: flex;
padding: 12px 22px; padding: 12px 22px;
align-items: center; align-items: center;
} }
.item_value { .item_value {
flex: 1; flex: 1;
font-size: 14px; font-size: 14px;
word-break: break-all; word-break: break-all;
overflow: hidden; overflow: hidden;
} }
.item_label { .item_label {
color: #606266; color: #606266;
flex-shrink: 0; flex-shrink: 0;
width: 120px; width: 120px;
font-size: 14px; font-size: 14px;
} }
.student_require { .student_require {
color: red; color: red;
} }
.stuHeadImg {
width: 80px;
height: 80px;
position: relative;
}
.stuHeadImg {
width: 80px;
height: 80px;
position: relative;
}
</style> </style>
<template> <template>
<div> <div>
...@@ -80,10 +79,19 @@ ...@@ -80,10 +79,19 @@
<div class="stage_label">头像</div> <div class="stage_label">头像</div>
<div class="stage_value"> <div class="stage_value">
<div class="stuHeadImg"> <div class="stuHeadImg">
<el-upload :before-upload="uploadFile" :multiple="false" action='' :show-file-list="false"> <el-upload
:before-upload="uploadFile"
:multiple="false"
action=""
:show-file-list="false"
>
<q-avatar size="80px" font-size="36px" text-color="white"> <q-avatar size="80px" font-size="36px" text-color="white">
<img :src="customObj.StuIcon" v-if="customObj.StuIcon"> <img :src="customObj.StuIcon" v-if="customObj.StuIcon" />
<img v-else src="../../../assets/images/administration/litheader.png" alt="" /> <img
v-else
src="../../../assets/images/administration/litheader.png"
alt=""
/>
</q-avatar> </q-avatar>
</el-upload> </el-upload>
</div> </div>
...@@ -96,7 +104,14 @@ ...@@ -96,7 +104,14 @@
<span class="student_require">*</span>客户名称 <span class="student_require">*</span>客户名称
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.StuName" style="width:185px;" ref="StuName" dense :disable="noEdit"> <q-input
filled
v-model="customObj.StuName"
style="width:185px;"
ref="StuName"
dense
:disable="noEdit"
>
</q-input> </q-input>
</div> </div>
</div> </div>
...@@ -107,31 +122,53 @@ ...@@ -107,31 +122,53 @@
客户电话 客户电话
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.StuTel" style="width:185px;" @blur="CheckExistsStu(1)" ref="StuTel" <q-input
:disable="noEdit" dense> filled
v-model="customObj.formatTel"
style="width:185px;"
@blur="CheckExistsStu(1)"
ref="StuTel"
:disable="noEdit"
dense
>
</q-input> </q-input>
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component"> <div class="customer_info_component" v-if="BelongType != 3">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
QQ QQ
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.QQ" style="width:185px;" @blur="CheckExistsStu(2)" :disable="noEdit" <q-input
@keyup.native="checkInteger(customObj,'QQ')" ref="QQ" dense></q-input> filled
v-model="customObj.QQ"
style="width:185px;"
@blur="CheckExistsStu(2)"
:disable="noEdit"
@keyup.native="checkInteger(customObj, 'QQ')"
ref="QQ"
dense
></q-input>
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component"> <div class="customer_info_component" v-if="BelongType != 3">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
微信号 微信号
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.WeChatNo" @blur="CheckExistsStu(3)" style="width:185px;" ref="WeChatNo" <q-input
:disable="noEdit" dense></q-input> filled
v-model="customObj.WeChatNo"
@blur="CheckExistsStu(3)"
style="width:185px;"
ref="WeChatNo"
:disable="noEdit"
dense
></q-input>
</div> </div>
</div> </div>
</div> </div>
...@@ -141,57 +178,113 @@ ...@@ -141,57 +178,113 @@
<span class="student_require">*</span>客户状态 <span class="student_require">*</span>客户状态
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.StuStage" dense :options="customState" option-label="Name" <q-select
:disable="noEdit" style="width:185px;" option-value="Id" emit-value map-options label="客户状态" /> filled
v-model="customObj.StuStage"
dense
:options="customState"
option-label="Name"
:disable="noEdit"
style="width:185px;"
option-value="Id"
emit-value
map-options
label="客户状态"
/>
</div> </div>
</div> </div>
</div> </div>
<template v-if="BelongType!=3"> <template v-if="BelongType != 3">
<div class="customer_info_component"> <div class="customer_info_component">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
<span class="student_require">*</span>客户来源 <span class="student_require">*</span>客户来源
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.CreateType" @change="clearStuMsg()" style="width:185px;" <q-select
:disable="(noEdit || isHaveOrder)" @input="resetStuSource()" dense :options="customFromList" filled
option-label="Name" option-value="Id" emit-value map-options label="客户来源" /> v-model="customObj.CreateType"
@change="clearStuMsg()"
style="width:185px;"
:disable="noEdit || isHaveOrder"
@input="resetStuSource()"
dense
:options="customFromList"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户来源"
/>
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component" v-if="customObj.CreateType==3"> <div class="customer_info_component" v-if="customObj.CreateType == 3">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
<span class="student_require">*</span>介绍人 <span class="student_require">*</span>介绍人
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.StuSourceId" style="width:185px;" dense @filter="filterEmployee" <q-select
:disable="(noEdit || isHaveOrder)" use-input :options="myEmployeeList" option-label="EmployeeName" filled
option-value="Id" emit-value map-options /> v-model="customObj.StuSourceId"
style="width:185px;"
dense
@filter="filterEmployee"
:disable="noEdit || isHaveOrder"
use-input
:options="myEmployeeList"
option-label="EmployeeName"
option-value="Id"
emit-value
map-options
/>
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component" v-if="customObj.CreateType==4"> <div class="customer_info_component" v-if="customObj.CreateType == 4">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
<span class="student_require">*</span>转介人 <span class="student_require">*</span>转介人
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.StuSourceId" style="width:185px;" use-input @filter="filterStudent" <q-select
:disable="(noEdit || isHaveOrder)" dense :options="MyTransListData" option-label="StuName" filled
option-value="StuId" emit-value map-options /> v-model="customObj.StuSourceId"
style="width:185px;"
use-input
@filter="filterStudent"
:disable="noEdit || isHaveOrder"
dense
:options="MyTransListData"
option-label="StuName"
option-value="StuId"
emit-value
map-options
/>
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component" v-if="customObj.CreateType==1"> <div class="customer_info_component" v-if="customObj.CreateType == 1">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
<span class="student_require">*</span>收客渠道 <span class="student_require">*</span>收客渠道
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.StuChannel" style="width:185px;" dense :options="StuChannelList" <q-select
:disable="(noEdit || isHaveOrder)" option-label="Name" option-value="Id" emit-value map-options filled
use-input @filter="filterStuChannel"> v-model="customObj.StuChannel"
style="width:185px;"
dense
:options="StuChannelList"
:disable="noEdit || isHaveOrder"
option-label="Name"
option-value="Id"
emit-value
map-options
use-input
@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">
...@@ -203,15 +296,26 @@ ...@@ -203,15 +296,26 @@
</div> </div>
</div> </div>
</div> </div>
<div class="customer_info_component" v-if="customObj.CreateType==2"> <div class="customer_info_component" v-if="customObj.CreateType == 2">
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label"> <div class="stage_label">
<span class="student_require">*</span>关联同行 <span class="student_require">*</span>关联同行
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.CustomerId" style="width:185px" dense :options="customList" use-input <q-select
:disable="(noEdit || isHaveOrder)" @filter="filterFn" option-label="CustomerName" filled
option-value="CustomerId" emit-value map-options> v-model="customObj.CustomerId"
style="width:185px"
dense
:options="customList"
use-input
:disable="noEdit || isHaveOrder"
@filter="filterFn"
option-label="CustomerName"
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">
...@@ -223,17 +327,27 @@ ...@@ -223,17 +327,27 @@
</div> </div>
</div> </div>
</div> </div>
<template v-if="customObj.CreateType==1"> <template v-if="customObj.CreateType == 1">
<div class="info_item" v-if="customObj.StuChannel==6"> <div class="info_item" v-if="customObj.StuChannel == 6">
<div class="item_label">第三方平台名称</div> <div class="item_label">第三方平台名称</div>
<div class="item_value"> <div class="item_value">
<q-input filled v-model="customObj.PlatformName" dense :disable="noEdit"></q-input> <q-input
filled
v-model="customObj.PlatformName"
dense
:disable="noEdit"
></q-input>
</div> </div>
</div> </div>
<div class="info_item" v-if="customObj.StuChannel==7"> <div class="info_item" v-if="customObj.StuChannel == 7">
<div class="item_label">其他平台名称</div> <div class="item_label">其他平台名称</div>
<div class="item_value"> <div class="item_value">
<q-input filled v-model="customObj.PlatformName" dense :disable="noEdit"></q-input> <q-input
filled
v-model="customObj.PlatformName"
dense
:disable="noEdit"
></q-input>
</div> </div>
</div> </div>
</template> </template>
...@@ -244,8 +358,19 @@ ...@@ -244,8 +358,19 @@
<span class="student_require">*</span>客户类型 <span class="student_require">*</span>客户类型
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.StuType" style="width:185px" dense :options="customTypeList" <q-select
:disable="noEdit" option-label="Name" option-value="Id" emit-value map-options label="客户类型" /> filled
v-model="customObj.StuType"
style="width:185px"
dense
:options="customTypeList"
:disable="noEdit"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户类型"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -255,8 +380,19 @@ ...@@ -255,8 +380,19 @@
客户需求 客户需求
</div> </div>
<div class="stage_value"> <div class="stage_value">
<q-select filled v-model="customObj.StuNeeds" style="width:185px" dense :options="NeedData" <q-select
:disable="noEdit" option-label="Name" option-value="Id" emit-value map-options label="客户需求" /> filled
v-model="customObj.StuNeeds"
style="width:185px"
dense
:options="NeedData"
:disable="noEdit"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户需求"
/>
</div> </div>
</div> </div>
</div> </div>
...@@ -266,17 +402,33 @@ ...@@ -266,17 +402,33 @@
<div class="info_item"> <div class="info_item">
<div class="item_label">性别</div> <div class="item_label">性别</div>
<div class="item_value"> <div class="item_value">
<q-radio v-model="customObj.StuSex" :val="0" label="男" :disable="noEdit" /> <q-radio
<q-radio v-model="customObj.StuSex" :val="1" label="女" :disable="noEdit" /> v-model="customObj.StuSex"
:val="0"
label="男"
:disable="noEdit"
/>
<q-radio
v-model="customObj.StuSex"
:val="1"
label="女"
:disable="noEdit"
/>
</div> </div>
</div> </div>
<div class="info_item studentDate"> <div class="info_item studentDate">
<div class="item_label">出生日期</div> <div class="item_label">出生日期</div>
<div class="item_value"> <div class="item_value">
<q-field filled dense> <q-field filled dense>
 <template v-slot:control> <template v-slot:control>
<el-date-picker v-model="customObj.StuBirth" size="mini" style="width:150px" type="date" <el-date-picker
:disabled="noEdit" placeholder="选择日期"> v-model="customObj.StuBirth"
size="mini"
style="width:150px"
type="date"
:disabled="noEdit"
placeholder="选择日期"
>
</el-date-picker> </el-date-picker>
</template> </template>
</q-field> </q-field>
...@@ -286,28 +438,60 @@ ...@@ -286,28 +438,60 @@
<div class="info_item"> <div class="info_item">
<div class="item_label">日语基础</div> <div class="item_label">日语基础</div>
<div class="item_value"> <div class="item_value">
<q-select filled v-model="customObj.JapanBaseInfo" dense :options="basicList" option-label="Name" <q-select
:disable="noEdit" option-value="Id" emit-value map-options /> filled
v-model="customObj.JapanBaseInfo"
dense
:options="basicList"
option-label="Name"
:disable="noEdit"
option-value="Id"
emit-value
map-options
/>
</div> </div>
</div> </div>
<div class="info_item"> <div class="info_item">
<div class="item_label">职业</div> <div class="item_label">职业</div>
<div class="item_value"> <div class="item_value">
<q-input filled v-model="customObj.StuProfession" dense :disable="noEdit"></q-input> <q-input
filled
v-model="customObj.StuProfession"
dense
:disable="noEdit"
></q-input>
</div> </div>
</div> </div>
<div class="info_item"> <div class="info_item">
<div class="item_label">学历</div> <div class="item_label">学历</div>
<div class="item_value"> <div class="item_value">
<q-select filled v-model="customObj.StuEducation" dense :options="educationList" option-label="Name" <q-select
:disable="noEdit" option-value="Id" emit-value map-options /> filled
v-model="customObj.StuEducation"
dense
:options="educationList"
option-label="Name"
:disable="noEdit"
option-value="Id"
emit-value
map-options
/>
</div> </div>
</div> </div>
<div class="info_item"> <div class="info_item">
<div class="item_label">学习目的</div> <div class="item_label">学习目的</div>
<div class="item_value"> <div class="item_value">
<q-select filled v-model="customObj.StuPurpose" dense :options="goalsList" option-label="Name" <q-select
:disable="noEdit" option-value="Id" emit-value map-options /> filled
v-model="customObj.StuPurpose"
dense
:options="goalsList"
option-label="Name"
:disable="noEdit"
option-value="Id"
emit-value
map-options
/>
</div> </div>
</div> </div>
<!-- <div class="info_item"> <!-- <div class="info_item">
...@@ -318,531 +502,540 @@ ...@@ -318,531 +502,540 @@
</div> </div>
</div> --> </div> -->
<div class="info_item" v-if="!noEdit"> <div class="info_item" v-if="!noEdit">
<q-btn color="accent" class="q-mr-md" label="保存" @click="saveStu()" /> <q-btn
color="accent"
class="q-mr-md"
label="保存"
@click="saveStu()"
/>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { import {
getStudentInfo, //获取学员客户信息 getStudentInfo, //获取学员客户信息
queryStuStageList, //获取客户阶段列表 queryStuStageList, //获取客户阶段列表
saveStudent, //保存学员信息 saveStudent, //保存学员信息
GetStudentTypeList, GetStudentTypeList,
getStudentDorpDownList, getStudentDorpDownList,
GetNeedsList GetNeedsList
} from '../../../api/school/index'; } from "../../../api/school/index";
import { import {
getGuestBasicsEnumList, getGuestBasicsEnumList,
getGuestEducationEnumList, getGuestEducationEnumList,
getGuestLearningGoalsEnumList, getGuestLearningGoalsEnumList,
GetStuChannelList, GetStuChannelList,
CreateTypeList, CreateTypeList,
CheckExistsStu, CheckExistsStu,
GetCustomerList GetCustomerList
} from '../../../api/sale/sale' } from "../../../api/sale/sale";
import { import { queryEmployee } from "../../../api/users/user";
queryEmployee import {
} from '../../../api/users/user' queryStuOrderPage //学员订单分页列表
import { } from "../../../api/customerstudent/customerstudent";
queryStuOrderPage, //学员订单分页列表 import { UploadSelfFile } from "../../../api/common/common";
} from '../../../api/customerstudent/customerstudent';
import {
UploadSelfFile
} from '../../../api/common/common'
export default { export default {
meta: { meta: {
title: "学员管理" title: "学员管理"
},
components: {},
props: {
stuData: {
type: Object,
default: null
}, },
components: { saveObj: {
type: Object,
default: null
},
AddType: {
type: Number,
default: null
}, },
props: { BelongType: {
stuData: { type: Number,
type: Object, default: null
default: null }
},
data() {
return {
//客户阶段状态列表
customState: [],
customMsg: {
StuId: 0
}, },
saveObj: { //客户对象
type: Object, customObj: {
default: null StuId: 0,
StuIcon: "", //学院头像
StuName: "", //客户名称
StuTel: "", //客户电话
CreateType: "", //客户来源
StuSourceId: "", //介绍人
StuChannel: "", //收客渠道
PlatformName: "", //平台名称
StuSex: 0, //性别
StuBirth: "", //出生日期
StuStage: "", //客户阶段状态
JapanBaseInfo: "", //日语基础
StuProfession: "", //职业
StuEducation: "", //学历
StuPurpose: "", //学习目的
CreateBy: "", //创建人
CustomerId: 0, //关联同行
QQ: "", //qq
WeChatNo: "", //微信号
StuType: "", //客户类型
StuNeeds: 0 //客户需求
}, },
AddType: { //日语基础列表
type: Number, basicList: [],
default: null //学历列表
educationList: [],
//学习目的列表
goalsList: [],
//员工列表
employeeList: [],
myEmployeeList: [],
StuChannelList: [], //收客渠道
allStuChannelList: [], //所有收客渠道
AssistDropList: [], //协助人员
customFromList: [], //客户来源
customTypeList: [], //客户类型
customList: [], //同行列表
allCustomList: [], //所有同行列表
TransListData: [], //转介人数据
MyTransListData: [],
checkMsg: {
StuId: 0,
StuTel: "",
QQ: "",
WeChatNo: ""
}, },
BelongType: { NeedData: [],
type: Number, noEdit: false,
default: null isHaveOrder: false
} };
}, },
data() { created() {
return { this.getStuStageList();
//客户阶段状态列表 this.getBasicList();
customState: [], this.queryGuestEducationEnumList();
customMsg: { this.queryGoalsList();
StuId: 0, this.getEmployeeList();
}, this.GetStuChannelList();
//客户对象 this.getCustomFrom();
customObj: { this.GetCustomerList();
StuId: 0, this.getCustomTypeList();
StuIcon: '', //学院头像 this.getStudentDorpDown();
StuName: '', //客户名称 this.getGetNeedsList();
StuTel: '', //客户电话 this.getStuOrderPage();
CreateType: '', //客户来源 if (this.saveObj && this.saveObj.StuId > 0) {
StuSourceId: '', //介绍人 this.customMsg.StuId = this.saveObj.StuId;
StuChannel: '', //收客渠道 this.checkMsg.StuId = this.saveObj.StuId;
PlatformName: '', //平台名称 if (this.saveObj.noEdit && this.saveObj.noEdit == true) {
StuSex: 0, //性别 this.noEdit = true;
StuBirth: '', //出生日期
StuStage: '', //客户阶段状态
JapanBaseInfo: '', //日语基础
StuProfession: '', //职业
StuEducation: '', //学历
StuPurpose: '', //学习目的
CreateBy: '', //创建人
CustomerId: 0, //关联同行
QQ: '', //qq
WeChatNo: '', //微信号
StuType: '', //客户类型
StuNeeds: 0 //客户需求
},
//日语基础列表
basicList: [],
//学历列表
educationList: [],
//学习目的列表
goalsList: [],
//员工列表
employeeList: [],
myEmployeeList: [],
StuChannelList: [], //收客渠道
allStuChannelList: [], //所有收客渠道
AssistDropList: [], //协助人员
customFromList: [], //客户来源
customTypeList: [], //客户类型
customList: [], //同行列表
allCustomList: [], //所有同行列表
TransListData: [], //转介人数据
MyTransListData: [],
checkMsg: {
StuId: 0,
StuTel: '',
QQ: '',
WeChatNo: ''
},
NeedData: [],
noEdit: false,
isHaveOrder: false
} }
}
if (this.BelongType == 3) {
this.noEdit = true;
}
},
watch: {
stuData() {
this.init();
}
},
methods: {
uploadFile(files) {
UploadSelfFile("studentIcon", files, res => {
if (res.Code == 1) {
this.customObj.StuIcon = res.FileUrl;
}
});
}, },
created() { //获取客户需求
getGetNeedsList() {
this.getStuStageList(); GetNeedsList().then(res => {
this.getBasicList(); if (res.Code == 1) {
this.queryGuestEducationEnumList(); this.NeedData = res.Data;
this.queryGoalsList();
this.getEmployeeList();
this.GetStuChannelList();
this.getCustomFrom();
this.GetCustomerList();
this.getCustomTypeList();
this.getStudentDorpDown();
this.getGetNeedsList();
this.getStuOrderPage();
if (this.saveObj && this.saveObj.StuId > 0) {
this.customMsg.StuId = this.saveObj.StuId;
this.checkMsg.StuId = this.saveObj.StuId;
if (this.saveObj.noEdit && this.saveObj.noEdit == true) {
this.noEdit = true
} }
});
},
//保存学员信息
saveStu() {
if (this.customObj.StuName == "") {
this.$q.notify({
type: "negative",
position: "top",
message: `请输入客户名称`
});
return;
} }
if (this.BelongType == 3) { if (
this.noEdit = true this.customObj.StuTel == "" &&
this.customObj.QQ == "" &&
this.customObj.WeChatNo == ""
) {
this.$q.notify({
type: "negative",
position: "top",
message: `请输入电话QQ微信至少一个`
});
return;
} }
if (this.customObj.CreateType == "") {
}, this.$q.notify({
watch: { type: "negative",
stuData() { position: "top",
this.init(); message: `请选择客户来源`
});
return;
} }
}, if (this.customObj.CreateType == 1 && !this.customObj.StuChannel) {
methods: { this.$q.notify({
uploadFile(files) { type: "negative",
UploadSelfFile("studentIcon", files, res => { position: "top",
if (res.Code == 1) { message: `请选择收客渠道`
this.customObj.StuIcon = res.FileUrl;
}
}); });
}, return;
//获取客户需求 }
getGetNeedsList() { if (this.customObj.CreateType == 2 && !this.customObj.CustomerId) {
GetNeedsList().then(res => { this.$q.notify({
if (res.Code == 1) { type: "negative",
this.NeedData = res.Data; position: "top",
} message: `请选择关联同行`
}) });
}, return;
//保存学员信息 }
saveStu() { if (this.customObj.CreateType == 3 && !this.customObj.StuSourceId) {
if (this.customObj.StuName == '') { this.$q.notify({
this.$q.notify({ type: "negative",
type: 'negative', position: "top",
position: "top", message: `请选择介绍人`
message: `请输入客户名称` });
}) return;
return }
} if (this.customObj.CreateType == 4 && !this.customObj.StuSourceId) {
if (this.customObj.StuTel == '' && this.customObj.QQ == '' && this.customObj.WeChatNo == '') { this.$q.notify({
this.$q.notify({ type: "negative",
type: 'negative', position: "top",
position: "top", message: `请选择转介人`
message: `请输入电话QQ微信至少一个` });
}) return;
return }
} if (this.customObj.StuStage == "") {
if (this.customObj.CreateType == '') { this.$q.notify({
this.$q.notify({ type: "negative",
type: 'negative', position: "top",
position: "top", message: `请选择客户状态`
message: `请选择客户来源` });
}) return;
return }
} if (this.customObj.StuType == "") {
if (this.customObj.CreateType == 1 && !this.customObj.StuChannel) { this.$q.notify({
this.$q.notify({ type: "negative",
type: 'negative', position: "top",
position: "top", message: `请选择客户类型`
message: `请选择收客渠道` });
}) return;
return }
} if (this.customObj.StuTel != "") {
if (this.customObj.CreateType == 2 && !this.customObj.CustomerId) { var myreg = /^[1][3-9][\d]{9}/;
this.$q.notify({ if (!myreg.test(this.customObj.StuTel)) {
type: 'negative',
position: "top",
message: `请选择关联同行`
})
return
}
if (this.customObj.CreateType == 3 && !this.customObj.StuSourceId) {
this.$q.notify({ this.$q.notify({
type: 'negative', type: "negative",
position: "top", position: "top",
message: `请选择介绍人` message: `请输入正确的电话号码`
}) });
return return;
} }
if (this.customObj.CreateType == 4 && !this.customObj.StuSourceId) { }
saveStudent(this.customObj).then(res => {
if (res.Code == 1) {
this.$q.notify({ this.$q.notify({
type: 'negative', icon: "iconfont icon-chenggong",
position: "top", color: "accent",
message: `请选择转介人` timeout: 2000,
}) message: "数据保存成功!",
return position: "top"
});
this.$emit("update");
this.$emit("success");
this.$emit("getrecord");
if (this.AddType == 1) {
this.$emit("close");
}
} }
if (this.customObj.StuStage == '') { });
this.$q.notify({ },
type: 'negative', //获取员工列表
position: "top", getEmployeeList() {
message: `请选择客户状态` queryEmployee({
}) IsLeave: 1
return }).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
});
},
//获取收客渠道
GetStuChannelList() {
GetStuChannelList({}).then(res => {
if (res.Code == 1) {
this.StuChannelList = res.Data;
this.allStuChannelList = res.Data;
} }
if (this.customObj.StuType == '') { });
this.$q.notify({ },
type: 'negative', //筛选渠道
position: "top", filterStuChannel(val, update) {
message: `请选择客户类型` update(() => {
}) if (val === "") {
return 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
);
} }
if (this.customObj.StuTel != '') { });
var myreg = /^[1][3-9][\d]{9}/; },
if (!myreg.test(this.customObj.StuTel)) { //筛选员工
this.$q.notify({ filterEmployee(val, update, abort) {
type: 'negative', update(() => {
position: "top", this.myEmployeeList = this.employeeList.filter(
message: `请输入正确的电话号码` v => v.EmployeeName.indexOf(val) > -1
}) );
return });
} },
//获取日语基础列表
getBasicList() {
getGuestBasicsEnumList({}).then(res => {
this.basicList = res.Data;
});
},
//获取客户来源
getCustomFrom() {
CreateTypeList({}).then(res => {
if (res.Code == 1) {
this.customFromList = res.Data;
} }
saveStudent(this.customObj).then(res => { });
if (res.Code == 1) { },
this.$q.notify({ //获取学历列表
icon: 'iconfont icon-chenggong', queryGuestEducationEnumList() {
color: 'accent', getGuestEducationEnumList({}).then(res => {
timeout: 2000, this.educationList = res.Data;
message: '数据保存成功!', });
position: 'top' },
}) //获取学习目的列表
this.$emit('update'); queryGoalsList() {
this.$emit('success'); getGuestLearningGoalsEnumList({}).then(res => {
this.$emit('getrecord'); this.goalsList = res.Data;
if (this.AddType == 1) { });
this.$emit('close'); },
} //获取客户阶段列表
} getStuStageList() {
}) queryStuStageList().then(res => {
}, this.customState = res.Data;
//获取员工列表 });
getEmployeeList() { },
queryEmployee({ //获取客户下拉数据
IsLeave: 1 GetCustomerList() {
}).then(res => { let msg = {
this.employeeList = res.Data; QCreateBy: 0
this.myEmployeeList = res.Data; };
}) GetCustomerList(msg).then(res => {
}, if (res.Code == 1) {
//获取收客渠道 this.customList = res.Data;
GetStuChannelList() { this.allCustomList = res.Data;
GetStuChannelList({}).then(res => {
if (res.Code == 1) {
this.StuChannelList = res.Data;
this.allStuChannelList = res.Data;
}
})
},
//筛选渠道
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
);
}
});
},
//筛选员工
filterEmployee(val, update, abort) {
update(() => {
this.myEmployeeList = this.employeeList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
//获取日语基础列表
getBasicList() {
getGuestBasicsEnumList({}).then(res => {
this.basicList = res.Data;
})
},
//获取客户来源
getCustomFrom() {
CreateTypeList({}).then(res => {
if (res.Code == 1) {
this.customFromList = res.Data;
}
})
},
//获取学历列表
queryGuestEducationEnumList() {
getGuestEducationEnumList({}).then(res => {
this.educationList = res.Data;
})
},
//获取学习目的列表
queryGoalsList() {
getGuestLearningGoalsEnumList({}).then(res => {
this.goalsList = res.Data;
})
},
//获取客户阶段列表
getStuStageList() {
queryStuStageList().then(res => {
this.customState = 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 {
filterFn(val, update) { const needle = val.toLowerCase();
update(() => { this.customList = this.allCustomList.filter(
if (val === "") { v => v.CustomerName.toLowerCase().indexOf(needle) > -1
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
);
}
});
},
//获取客户类型
getCustomTypeList() {
GetStudentTypeList().then(res => {
if (res.Code == 1) {
this.customTypeList = res.Data;
}
})
},
//获取转介人下拉
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
); );
});
},
// queryStuInfo() {
// getStudentInfo({
// StuId: this.customMsg.StuId
// }).then(res => {
// if (res.Code == 1) {
// var tempDate = res.Data;
// this.customObj.StuId = tempDate.StuId;
// this.customObj.StuName = tempDate.StuName;
// this.customObj.StuTel = tempDate.StuTel;
// this.customObj.CreateType = tempDate.CreateType;
// this.customObj.StuSourceId = tempDate.StuSourceId;
// this.customObj.StuChannel = tempDate.StuChannel;
// this.customObj.PlatformName = tempDate.PlatformName;
// this.customObj.StuSex = tempDate.StuSex;
// this.customObj.StuBirth = tempDate.StuBirth;
// this.customObj.StuStage = tempDate.StuStage;
// this.customObj.JapanBaseInfo = tempDate.JapanBaseInfo;
// this.customObj.StuProfession = tempDate.StuProfession;
// this.customObj.StuEducation = tempDate.StuEducation;
// this.customObj.StuPurpose = tempDate.StuPurpose;
// this.customObj.CreateBy = tempDate.CreateBy;
// this.customObj.CustomerId = tempDate.CustomerId;
// this.customObj.StuType = tempDate.StuType;
// this.customObj.QQ = tempDate.QQ;
// this.customObj.WeChatNo = tempDate.WeChatNo;
// this.customObj.StuNeeds = tempDate.StuNeeds;
// }
// });
// },
init() {
const tempDate = this.stuData;
this.customObj.StuId = tempDate.StuId;
this.customObj.StuName = tempDate.StuName;
this.customObj.StuIcon = tempDate.StuIcon;
this.customObj.StuTel = tempDate.StuTel;
this.customObj.CreateType = tempDate.CreateType;
this.customObj.StuSourceId = tempDate.StuSourceId;
this.customObj.StuChannel = tempDate.StuChannel;
this.customObj.PlatformName = tempDate.PlatformName;
this.customObj.StuSex = tempDate.StuSex;
this.customObj.StuBirth = tempDate.StuBirth;
this.customObj.StuStage = tempDate.StuStage;
this.customObj.JapanBaseInfo = tempDate.JapanBaseInfo;
this.customObj.StuProfession = tempDate.StuProfession;
this.customObj.StuEducation = tempDate.StuEducation;
this.customObj.StuPurpose = tempDate.StuPurpose;
this.customObj.CreateBy = tempDate.CreateBy;
this.customObj.CustomerId = tempDate.CustomerId;
this.customObj.StuType = tempDate.StuType;
this.customObj.QQ = tempDate.QQ;
this.customObj.WeChatNo = tempDate.WeChatNo;
this.customObj.StuNeeds = tempDate.StuNeeds;
if (this.customObj.StuId > 0) {
this.isHaveOrder = true
} }
}, });
//新增协助人员 },
addAssist() { //获取客户类型
let obj = { getCustomTypeList() {
Id: 0, //编号 GetStudentTypeList().then(res => {
AssistId: 1, //员工编号 if (res.Code == 1) {
AssistType: 1, //类型 this.customTypeList = res.Data;
StuId: 1, //学员编号
}
this.customObj.AssistList.push(obj);
},
//删除协助人员
delAssist(index) {
this.customObj.AssistList.splice(index, 1);
},
//验证手机号
CheckExistsStu(type) {
if (type == 1) {
if (this.customObj.StuTel && this.customObj.StuTel.length == 11) {
this.checkMsg.StuTel = this.customObj.StuTel
this.checkMsg.QQ = '';
this.checkMsg.WeChatNo = '';
CheckExistsStu(this.checkMsg).then(r => {});
}
} }
if (type == 2) { });
if (this.customObj.QQ) { },
this.checkMsg.StuTel = ''; //获取转介人下拉
this.checkMsg.QQ = this.customObj.QQ; getStudentDorpDown() {
this.checkMsg.WeChatNo = ''; getStudentDorpDownList().then(res => {
CheckExistsStu(this.checkMsg).then(r => {}); if (res.Code == 1) {
} this.TransListData = res.Data;
this.MyTransListData = res.Data;
} }
if (type == 3) { });
if (this.customObj.WeChatNo) { },
this.checkMsg.StuTel = '' //筛选转介人
this.checkMsg.QQ = ''; filterStudent(val, update, abort) {
this.checkMsg.WeChatNo = this.customObj.WeChatNo; update(() => {
CheckExistsStu(this.checkMsg).then(r => {}); this.MyTransListData = this.TransListData.filter(
} v => v.StuName.indexOf(val) > -1
);
});
},
// queryStuInfo() {
// getStudentInfo({
// StuId: this.customMsg.StuId
// }).then(res => {
// if (res.Code == 1) {
// var tempDate = res.Data;
// this.customObj.StuId = tempDate.StuId;
// this.customObj.StuName = tempDate.StuName;
// this.customObj.StuTel = tempDate.StuTel;
// this.customObj.CreateType = tempDate.CreateType;
// this.customObj.StuSourceId = tempDate.StuSourceId;
// this.customObj.StuChannel = tempDate.StuChannel;
// this.customObj.PlatformName = tempDate.PlatformName;
// this.customObj.StuSex = tempDate.StuSex;
// this.customObj.StuBirth = tempDate.StuBirth;
// this.customObj.StuStage = tempDate.StuStage;
// this.customObj.JapanBaseInfo = tempDate.JapanBaseInfo;
// this.customObj.StuProfession = tempDate.StuProfession;
// this.customObj.StuEducation = tempDate.StuEducation;
// this.customObj.StuPurpose = tempDate.StuPurpose;
// this.customObj.CreateBy = tempDate.CreateBy;
// this.customObj.CustomerId = tempDate.CustomerId;
// this.customObj.StuType = tempDate.StuType;
// this.customObj.QQ = tempDate.QQ;
// this.customObj.WeChatNo = tempDate.WeChatNo;
// this.customObj.StuNeeds = tempDate.StuNeeds;
// }
// });
// },
init() {
const tempDate = this.stuData;
this.customObj.StuId = tempDate.StuId;
this.customObj.StuName = tempDate.StuName;
this.customObj.StuIcon = tempDate.StuIcon;
this.customObj.StuTel = tempDate.StuTel;
this.customObj.CreateType = tempDate.CreateType;
this.customObj.StuSourceId = tempDate.StuSourceId;
this.customObj.StuChannel = tempDate.StuChannel;
this.customObj.PlatformName = tempDate.PlatformName;
this.customObj.StuSex = tempDate.StuSex;
this.customObj.StuBirth = tempDate.StuBirth;
this.customObj.StuStage = tempDate.StuStage;
this.customObj.JapanBaseInfo = tempDate.JapanBaseInfo;
this.customObj.StuProfession = tempDate.StuProfession;
this.customObj.StuEducation = tempDate.StuEducation;
this.customObj.StuPurpose = tempDate.StuPurpose;
this.customObj.CreateBy = tempDate.CreateBy;
this.customObj.CustomerId = tempDate.CustomerId;
this.customObj.StuType = tempDate.StuType;
this.customObj.QQ = tempDate.QQ;
this.customObj.WeChatNo = tempDate.WeChatNo;
this.customObj.StuNeeds = tempDate.StuNeeds;
if (this.customObj.StuId > 0) {
this.isHaveOrder = true;
}
if (this.BelongType == 3) {
this.customObj.formatTel =
this.customObj.StuTel != ""
? this.customObj.StuTel.indexOf(0, 2) +
"*****" +
this.customObj.StuTel.indexOf(8, 10)
: "";
} else {
this.customObj.formatTel = this.customObj.StuTel;
}
},
//新增协助人员
addAssist() {
let obj = {
Id: 0, //编号
AssistId: 1, //员工编号
AssistType: 1, //类型
StuId: 1 //学员编号
};
this.customObj.AssistList.push(obj);
},
//删除协助人员
delAssist(index) {
this.customObj.AssistList.splice(index, 1);
},
//验证手机号
CheckExistsStu(type) {
if (type == 1) {
if (this.customObj.StuTel && this.customObj.StuTel.length == 11) {
this.checkMsg.StuTel = this.customObj.StuTel;
this.checkMsg.QQ = "";
this.checkMsg.WeChatNo = "";
CheckExistsStu(this.checkMsg).then(r => {});
} }
}, }
//切换客户来源重置 if (type == 2) {
resetStuSource() { if (this.customObj.QQ) {
this.customObj.StuChannel = ''; this.checkMsg.StuTel = "";
this.customObj.CustomerId = ''; this.checkMsg.QQ = this.customObj.QQ;
this.customObj.StuSourceId = ''; this.checkMsg.WeChatNo = "";
this.customObj.PlatformName = ''; CheckExistsStu(this.checkMsg).then(r => {});
},
getStuOrderPage() {
let customMsg = {
pageIndex: 1,
pageSize: 10,
StuId: 0
} }
if (this.saveObj) { }
customMsg.StuId = this.saveObj.StuId; if (type == 3) {
if (this.customObj.WeChatNo) {
this.checkMsg.StuTel = "";
this.checkMsg.QQ = "";
this.checkMsg.WeChatNo = this.customObj.WeChatNo;
CheckExistsStu(this.checkMsg).then(r => {});
} }
queryStuOrderPage(customMsg).then(res => { }
if (res.Code == 1) { },
if (this.customObj.StuId > 0) { //切换客户来源重置
if (res.Data.PageData.length > 0) { resetStuSource() {
this.isHaveOrder = true; this.customObj.StuChannel = "";
} else { this.customObj.CustomerId = "";
this.isHaveOrder = false; this.customObj.StuSourceId = "";
} this.customObj.PlatformName = "";
},
getStuOrderPage() {
let customMsg = {
pageIndex: 1,
pageSize: 10,
StuId: 0
};
if (this.saveObj) {
customMsg.StuId = this.saveObj.StuId;
}
queryStuOrderPage(customMsg).then(res => {
if (res.Code == 1) {
if (this.customObj.StuId > 0) {
if (res.Data.PageData.length > 0) {
this.isHaveOrder = true;
} else {
this.isHaveOrder = false;
} }
} }
}); }
}, });
} }
} }
};
</script> </script>
<style scoped> <style scoped>
::v-deep .el-input__inner { ::v-deep .el-input__inner {
background: transparent; background: transparent;
border: none; border: none;
} }
</style> </style>
<template> <template>
<q-dialog v-model="persistent" full-height maximized position="right" persistent @hide="closeCutomer" <q-dialog
transition-show="slide-left"> v-model="persistent"
full-height
maximized
position="right"
persistent
@hide="closeCutomer"
transition-show="slide-left"
>
<div class="customMain"> <div class="customMain">
<div class="custom_Top"> <div class="custom_Top">
<div class="custom_HLeft"> <div class="custom_HLeft">
<div class="nameplate_avatar"> <div class="nameplate_avatar">
<img v-if="baseObj.StuIcon" style="width:100%;height:100%;" :src="baseObj.StuIcon" alt /> <img
v-if="baseObj.StuIcon"
style="width:100%;height:100%;"
:src="baseObj.StuIcon"
alt
/>
<div class="student_Name" v-else> <div class="student_Name" v-else>
<span v-if="baseObj.StuName">{{baseObj.StuName.substring(0,1)}}</span> <span v-if="baseObj.StuName">{{
baseObj.StuName.substring(0, 1)
}}</span>
</div> </div>
</div> </div>
<div class="Name_List"> <div class="Name_List">
<div class="F_16">{{baseObj.StuName}}</div> <div class="F_16">{{ baseObj.StuName }}</div>
</div> </div>
</div> </div>
<div class="custom_HRight" v-if="getJudgeTrans()"> <div class="custom_HRight">
<q-btn color="primary" size="sm" label="转交" @click="isShowTrans=true"> <q-btn
v-if="userInfo.IsTenCccUser == 1"
@click="callUserHandler"
class="q-mr-md"
round
unelevated
color="primary"
dense
icon="phone"
title="拨打电话"
></q-btn>
<q-btn
v-if="getJudgeTrans()"
color="primary"
unelevated
size="sm"
label="转交"
@click="isShowTrans = true"
>
<q-popup-proxy :offset="[10, 10]"> <q-popup-proxy :offset="[10, 10]">
<q-banner v-if="isShowTrans"> <q-banner v-if="isShowTrans">
<q-select style="margin-top:20px;" filled v-model="transMsg.CreateBy" @filter="filterEmployee" use-input <q-select
:options="myEmployeeList" option-label="EmployeeName" option-value="Id" emit-value map-options /> style="margin-top:20px;"
<q-btn label="保存" style="float:right;margin-top:15px" color="accent q-mb-lg" size="sm" filled
@click="saveTransForm" /> v-model="transMsg.CreateBy"
@filter="filterEmployee"
use-input
:options="myEmployeeList"
option-label="EmployeeName"
option-value="Id"
emit-value
map-options
/>
<q-btn
label="保存"
style="float:right;margin-top:15px"
color="accent q-mb-lg"
size="sm"
@click="saveTransForm"
/>
</q-banner> </q-banner>
</q-popup-proxy> </q-popup-proxy>
</q-btn> </q-btn>
...@@ -29,11 +76,24 @@ ...@@ -29,11 +76,24 @@
</div> </div>
<div class="custom_Bottom"> <div class="custom_Bottom">
<div class="detail-info"> <div class="detail-info">
<student-left :stuData="stuData" :save-obj="saveObj" :BelongType="BelongType" @success="refreshStudentPage" @getrecord="getrecord" @update="queryStuInfo"></student-left> <student-left
:stuData="stuData"
:save-obj="saveObj"
:BelongType="BelongType"
@success="refreshStudentPage"
@getrecord="getrecord"
@update="queryStuInfo"
></student-left>
</div> </div>
<div class="detail-travel"> <div class="detail-travel">
<div class="detail_first"> <div class="detail_first">
<q-tabs v-model="ckedTab" dense align="left" class="text-teal" style="margin-bottom:20px;"> <q-tabs
v-model="ckedTab"
dense
align="left"
class="text-teal"
style="margin-bottom:20px;"
>
<q-tab name="1" label="记录" /> <q-tab name="1" label="记录" />
<q-tab name="2" label="操作" /> <q-tab name="2" label="操作" />
<q-tab name="3" label="订单" /> <q-tab name="3" label="订单" />
...@@ -42,38 +102,84 @@ ...@@ -42,38 +102,84 @@
</q-tabs> </q-tabs>
<div class="operate_Content" style="flex:1;"> <div class="operate_Content" style="flex:1;">
<div class="detail_Main"> <div class="detail_Main">
<div class="tripTypeContent" style="flex-shrink:0" v-if="ckedTab==2"> <div
<div v-for="(qItem,qIndex) in visitList" :key="qIndex" class="tripTypeContent"
:class="{ 'StuCkedType': qIndex+1 == secondType }" @click="getckedType(qItem)">{{ qItem.Name }} style="flex-shrink:0"
v-if="ckedTab == 2"
>
<div
v-for="(qItem, qIndex) in visitList"
:key="qIndex"
:class="{ StuCkedType: qIndex + 1 == secondType }"
@click="getckedType(qItem)"
>
{{ qItem.Name }}
</div> </div>
</div> </div>
<!-- 记录 --> <!-- 记录 -->
<template v-if="ckedTab==1"> <template v-if="ckedTab == 1">
<student-record :save-obj="baseObj" @success="refreshStudentPage" ref="mychild"></student-record> <student-record
:save-obj="baseObj"
@success="refreshStudentPage"
ref="mychild"
></student-record>
</template> </template>
<!-- 操作 --> <!-- 操作 -->
<template v-if="ckedTab==2"> <template v-if="ckedTab == 2">
<div class="operate_Content" style="margin-top:20px;"> <div class="operate_Content" style="margin-top:20px;">
<student-visit :stateId="stateId" :stateList="customStateList" @update="queryStuInfo" :save-obj="baseObj" :StuId="baseObj.StuId" <student-visit
v-if="secondType==1" @success="refreshStudentPage"></student-visit> :stateId="stateId"
<student-yuefang :stateId="stateId" :stateList="customStateList" @update="queryStuInfo" :save-obj="baseObj" v-if="secondType==2" :stateList="customStateList"
@success="refreshStudentPage"></student-yuefang> @update="queryStuInfo"
<student-genjin :stateId="stateId" :stateList="customStateList" @update="queryStuInfo" :save-obj="baseObj" v-if="secondType==3" :save-obj="baseObj"
@success="refreshStudentPage"></student-genjin> :StuId="baseObj.StuId"
<student-shiting :save-obj="baseObj" v-if="secondType==4" @success="refreshStudentPage"> v-if="secondType == 1"
@success="refreshStudentPage"
></student-visit>
<student-yuefang
:stateId="stateId"
:stateList="customStateList"
@update="queryStuInfo"
:save-obj="baseObj"
v-if="secondType == 2"
@success="refreshStudentPage"
></student-yuefang>
<student-genjin
:stateId="stateId"
:stateList="customStateList"
@update="queryStuInfo"
:save-obj="baseObj"
v-if="secondType == 3"
@success="refreshStudentPage"
></student-genjin>
<student-shiting
:save-obj="baseObj"
v-if="secondType == 4"
@success="refreshStudentPage"
>
</student-shiting> </student-shiting>
</div> </div>
</template> </template>
<!-- 订单 --> <!-- 订单 -->
<template v-if="ckedTab==3"> <template v-if="ckedTab == 3">
<student-order :save-obj="baseObj" @success="refreshStudentPage"></student-order> <student-order
:save-obj="baseObj"
@success="refreshStudentPage"
></student-order>
</template> </template>
<!-- 合同 --> <!-- 合同 -->
<template v-if="ckedTab==4"> <template v-if="ckedTab == 4">
<student-hetong :save-obj="baseObj" @success="refreshStudentPage"></student-hetong> <student-hetong
:save-obj="baseObj"
@success="refreshStudentPage"
></student-hetong>
</template> </template>
<template v-if="ckedTab==5"> <template v-if="ckedTab == 5">
<student-Assit :save-obj="baseObj" :BelongType="BelongType" @success="refreshStudentPage"></student-Assit> <student-Assit
:save-obj="baseObj"
:BelongType="BelongType"
@success="refreshStudentPage"
></student-Assit>
</template> </template>
</div> </div>
</div> </div>
...@@ -85,465 +191,462 @@ ...@@ -85,465 +191,462 @@
</div> </div>
</div> </div>
</q-dialog> </q-dialog>
</template> </template>
<script> <script>
import { import { queryEmployee } from "../../../api/users/user";
queryEmployee import { ForwardStudent } from "../../../api/customerstudent/customerstudent";
} from '../../../api/users/user' import {
import { getStudentInfo, //获取学员客户信息
ForwardStudent queryStuStageList //获取客户阶段列表
} from '../../../api/customerstudent/customerstudent' } from "../../../api/school/index";
import { import studentLeft from "../student/student-left";
getStudentInfo,//获取学员客户信息 import studentRecord from "../student/student-record";
queryStuStageList, //获取客户阶段列表 import studentVisit from "../student/student-visit";
} from '../../../api/school/index'; import studentYuefang from "../student/student-yuefang";
import studentLeft from '../student/student-left'; import studentGenjin from "../student/student-genjin";
import studentRecord from '../student/student-record'; import studentShiting from "../student/student-shiting";
import studentVisit from '../student/student-visit'; import studentHetong from "../student/student-hetong";
import studentYuefang from '../student/student-yuefang'; import studentOrder from "../student/student-order";
import studentGenjin from '../student/student-genjin'; import studentAssit from "../student/student-Assit";
import studentShiting from '../student/student-shiting'; export default {
import studentHetong from '../student/student-hetong'; meta: {
import studentOrder from '../student/student-order'; title: "学员管理"
import studentAssit from '../student/student-Assit'; },
export default { components: {
meta: { studentLeft,
title: "学员管理" studentRecord,
}, studentVisit,
components: { studentYuefang,
studentLeft, studentGenjin,
studentRecord, studentShiting,
studentVisit, studentHetong,
studentYuefang, studentOrder,
studentGenjin, studentAssit
studentShiting, },
studentHetong, props: {
studentOrder, saveObj: {
studentAssit type: Object,
default: null
}, },
props: { isJudgeTrans: {
saveObj: { type: Number,
type: Object, default: null
default: null
},
isJudgeTrans: {
type: Number,
default: null
},
BelongType: {
type: Number,
default: null
}
}, },
data() { BelongType: {
return { type: Number,
persistent: true, default: null
ckedTab: '1', }
secondType: 1, },
visitList: [{ data() {
Name: '到访', return {
persistent: true,
ckedTab: "1",
secondType: 1,
visitList: [
{
Name: "到访",
Id: 1 Id: 1
}, { },
Name: '约访', {
Name: "约访",
Id: 2 Id: 2
}, { },
Name: '跟进', {
Name: "跟进",
Id: 3 Id: 3
}, { },
Name: '试听', {
Name: "试听",
Id: 4 Id: 4
}], }
],
msg: {
}, msg: {},
baseObj: {}, baseObj: {},
transMsg: { transMsg: {
StuId: 1, StuId: 1,
CreateBy: '' CreateBy: ""
}, },
//员工列表 //员工列表
employeeList: [], employeeList: [],
myEmployeeList: [], myEmployeeList: [],
isShowTrans: false, isShowTrans: false,
customStateList: [], customStateList: [],
stateId:0, stateId: 0,
stuData:{}, stuData: {},
userInfo: {}
};
},
created() {
this.getStuStageList();
this.queryStuInfo();
this.userInfo = this.getLocalStorage();
},
mounted() {
this.baseObj = this.saveObj;
this.getEmployeeList();
},
methods: {
callUserHandler() {
tccc.callOut({
phoneNumber: this.baseObj.StuTel,
phoneDesc: this.baseObj.StuName
});
},
//判断是否显示转交
getJudgeTrans() {
let userInfo = this.getLocalStorage();
let Id = userInfo.Id;
if (this.isJudgeTrans == 1) {
if (this.baseObj.CreateBy == Id) {
return true;
} else {
return false;
}
} else {
return true;
} }
}, },
created() { closeCutomer() {
this.getStuStageList() this.$emit("close");
this.queryStuInfo()
}, },
mounted() { //刷新列表
this.baseObj = this.saveObj; refreshStudentPage() {
this.getEmployeeList(); this.$emit("success");
}, },
methods: { //点击第二排
//判断是否显示转交 getckedType(obj) {
getJudgeTrans() { this.secondType = obj.Id;
let userInfo = this.getLocalStorage(); },
let Id = userInfo.Id; //获取员工列表
if (this.isJudgeTrans == 1) { getEmployeeList() {
if (this.baseObj.CreateBy == Id) { queryEmployee({
return true IsLeave: 1
} else { }).then(res => {
return false this.employeeList = res.Data;
} this.myEmployeeList = res.Data;
} else { });
return true },
//筛选员工
filterEmployee(val, update, abort) {
update(() => {
this.myEmployeeList = this.employeeList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
//保存转交
saveTransForm() {
this.transMsg.StuId = this.baseObj.StuId;
ForwardStudent(this.transMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: "iconfont icon-chenggong",
color: "accent",
timeout: 2000,
message: "转交成功",
position: "top"
});
} }
}, this.isShowTrans = false;
closeCutomer() { });
this.$emit('close') },
}, //保存成功后调用记录
//刷新列表 getrecord() {
refreshStudentPage() { this.$refs.mychild.getStuLogPage();
this.$emit('success'); },
}, //获取客户阶段列表
//点击第二排 getStuStageList() {
getckedType(obj) { queryStuStageList().then(res => {
this.secondType = obj.Id; this.customStateList = res.Data;
}, });
//获取员工列表
getEmployeeList() {
queryEmployee({
IsLeave: 1
}).then(res => {
this.employeeList = res.Data;
this.myEmployeeList = res.Data;
})
},
//筛选员工
filterEmployee(val, update, abort) {
update(() => {
this.myEmployeeList = this.employeeList.filter(
v => v.EmployeeName.indexOf(val) > -1
);
});
},
//保存转交
saveTransForm() {
this.transMsg.StuId = this.baseObj.StuId;
ForwardStudent(this.transMsg).then(res => {
if (res.Code == 1) {
this.$q.notify({
icon: 'iconfont icon-chenggong',
color: 'accent',
timeout: 2000,
message: '转交成功',
position: 'top'
})
}
this.isShowTrans = false;
})
},
//保存成功后调用记录
getrecord() {
this.$refs.mychild.getStuLogPage();
},
//获取客户阶段列表
getStuStageList() {
queryStuStageList().then(res => {
this.customStateList = res.Data;
})
},
queryStuInfo() {
getStudentInfo({
StuId: this.saveObj.StuId
}).then(res => {
if (res.Code == 1) {
this.stuData=res.Data
this.stateId = res.Data.StuStage;
}
});
},
}, },
queryStuInfo() {
getStudentInfo({
StuId: this.saveObj.StuId
}).then(res => {
if (res.Code == 1) {
this.stuData = res.Data;
this.stateId = res.Data.StuStage;
}
});
}
} }
};
</script> </script>
<style> <style>
.custom_RModel { .custom_RModel {
width: 500px; width: 500px;
height: 100%; height: 100%;
} }
.customMain { .customMain {
width: 1000px !important; width: 1000px !important;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100 vh; height: 100 vh;
padding: 15px 17px 0 17px; padding: 15px 17px 0 17px;
background-color: #f4f4f6; background-color: #f4f4f6;
} }
.custom_Top { .custom_Top {
width: 100%; width: 100%;
padding: 22px; padding: 22px;
background: #fff; background: #fff;
border-radius: 8px; border-radius: 8px;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
} }
.custom_HLeft { .custom_HLeft {
display: flex; display: flex;
} }
.nameplate_avatar { .nameplate_avatar {
width: 60px; width: 60px;
height: 60px; height: 60px;
flex-shrink: 0; flex-shrink: 0;
margin-right: 14px; margin-right: 14px;
border-radius: 5px; border-radius: 5px;
overflow: hidden; overflow: hidden;
} }
.F_16 { .F_16 {
font-size: 16px; font-size: 16px;
} }
.Name_List { .Name_List {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: space-around; justify-content: space-around;
overflow: hidden; overflow: hidden;
} }
.wechat_Name { .wechat_Name {
color: #9999a8; color: #9999a8;
display: flex; display: flex;
font-size: 14px; font-size: 14px;
} }
.custom_Bottom { .custom_Bottom {
margin-top: 17px; margin-top: 17px;
flex: 1; flex: 1;
display: flex; display: flex;
margin-top: 17px; margin-top: 17px;
overflow: hidden; overflow: hidden;
} }
.detail-info { .detail-info {
flex-shrink: 0; flex-shrink: 0;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 350px; width: 350px;
height: 100%; height: 100%;
padding: 28px 0; padding: 28px 0;
margin-right: 13px; margin-right: 13px;
background: #fff; background: #fff;
border-radius: 8px 8px 0 0; border-radius: 8px 8px 0 0;
overflow: auto; overflow: auto;
} }
.detail-info::-webkit-scrollbar { .detail-info::-webkit-scrollbar {
display: none; display: none;
} }
.detail-travel { .detail-travel {
width: 100%; width: 100%;
flex-grow: 1; flex-grow: 1;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding-top: 28px; padding-top: 28px;
background: #fff; background: #fff;
border-radius: 8px 8px 0 0; border-radius: 8px 8px 0 0;
overflow: hidden; overflow: hidden;
} }
.edit_bar {
display: flex;
justify-content: space-between;
.edit_bar { align-items: center;
display: flex; padding: 12px 22px;
justify-content: space-between; }
align-items: center;
padding: 12px 22px; .edit_info_wrap {
} padding: 0 22px 12px;
}
.edit_info_wrap {
padding: 0 22px 12px; .custom_Line {
} width: calc(100% - 44px);
margin: 16px 22px;
border-bottom: 1px solid #d7d7d7;
.custom_Line { }
width: calc(100% - 44px);
margin: 16px 22px; .custom_Edit {
border-bottom: 1px solid #d7d7d7; display: flex;
} justify-content: center;
align-items: center;
.custom_Edit { width: 78px;
display: flex; height: 26px;
justify-content: center; margin-right: 3px;
align-items: center; border: 1px dashed #858598;
width: 78px; border-radius: 4px;
height: 26px; font-size: 12px;
margin-right: 3px; cursor: pointer;
border: 1px dashed #858598; }
border-radius: 4px;
font-size: 12px; .tripTypeContent {
cursor: pointer; display: flex;
} overflow-x: auto;
white-space: nowrap;
}
.tripTypeContent {
display: flex; .StuCkedType {
overflow-x: auto; color: #3470ff;
white-space: nowrap; font-weight: 700;
} }
.StuCkedType { .tripTypeContent div {
color: #3470ff; margin-right: 20px;
font-weight: 700; cursor: pointer;
} }
.tripTypeContent div { .q-timeline__title {
margin-right: 20px; margin-bottom: 5px;
cursor: pointer; }
}
.customUpdateTime {
display: flex;
.q-timeline__title { justify-content: space-between;
margin-bottom: 5px; font-size: 14px;
} color: #9696a6;
}
.customUpdateTime {
display: flex; .q-timeline__subtitle {
justify-content: space-between; opacity: 1;
font-size: 14px; font-weight: normal;
color: #9696a6; }
}
.follow_Component {
.q-timeline__subtitle { padding: 0 22px;
opacity: 1; margin-top: 10px;
font-weight: normal; width: 100%;
} background-color: #f6f6f6;
border-radius: 5px;
.follow_Component { }
padding: 0 22px;
margin-top: 10px; .detail_first {
width: 100%; margin: 0 22px;
background-color: #f6f6f6; display: flex;
border-radius: 5px; flex-direction: column;
} height: 100%;
}
.detail_first { .detail_Main {
margin: 0 22px; display: flex;
display: flex; flex-direction: column;
flex-direction: column; width: 100%;
height: 100%; height: 100%;
} }
.detail_Main { .student_Name {
display: flex; width: 100%;
flex-direction: column; height: 100%;
width: 100%; background: #004d40;
height: 100%; color: #fff;
} text-align: center;
line-height: 60px;
.student_Name { font-size: 20px;
width: 100%; }
height: 100%;
background: #004d40; .TimeLineDiv {
color: #fff; height: 620px;
text-align: center; flex: 1;
line-height: 60px; height: 100%;
font-size: 20px; padding-right: 20px;
} }
.TimeLineDiv { .Time_TopList {
height: 620px; display: flex;
flex: 1; justify-content: space-between;
height: 100%; }
padding-right: 20px;
} .visit_Cont {
font-size: 14px;
.Time_TopList { }
display: flex;
justify-content: space-between; .visit_delete {
} font-size: 14px;
cursor: pointer;
.visit_Cont { width: 30px;
font-size: 14px; }
}
.operate_Content {
.visit_delete { overflow: auto;
font-size: 14px; /* padding-right: 20px; */
cursor: pointer; }
width: 30px;
} .operate_Content::-webkit-scrollbar {
width: 6px;
.operate_Content { height: 8px;
overflow: auto; }
/* padding-right: 20px; */
} .operate_Content::-webkit-scrollbar-thumb {
border-radius: 4px;
.operate_Content::-webkit-scrollbar { -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2);
width: 6px; background: #c9c9c9;
height: 8px; }
}
.operate_Content::-webkit-scrollbar-thumb {
.operate_Content::-webkit-scrollbar-thumb { -webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2);
border-radius: 4px; border-radius: 4px;
-webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2); background: #ededed;
background: #c9c9c9; }
}
.Log_Content {
.operate_Content::-webkit-scrollbar-thumb { padding: 10px;
-webkit-box-shadow: inset 0 0 2px rgba(0, 0, 0, 0.2); border-radius: 5px;
border-radius: 4px; background-color: #f4f4f6;
background: #EDEDED; color: #818194;
} line-height: 2;
margin-top: 10px;
.Log_Content { }
padding: 10px;
border-radius: 5px; .stu_ComFeed {
background-color: #f4f4f6; color: #3470ff;
color: #818194; cursor: pointer;
line-height: 2; margin-left: 20px;
margin-top: 10px; }
}
.StuCom_Remark {
.stu_ComFeed { display: flex;
color: #3470ff; }
cursor: pointer;
margin-left: 20px; .StuCom_Inner {
} width: 100%;
}
.StuCom_Remark {
display: flex; .StuCom_Left {
} flex-shrink: 0;
width: 57px;
.StuCom_Inner { text-align-last: justify;
width: 100%; }
}
.Stu_OrderId {
.StuCom_Left { color: #2961fe;
flex-shrink: 0; font-weight: bold;
width: 57px; text-decoration: underline;
text-align-last: justify; cursor: pointer;
} }
.Stu_OrderId { .Stu_HtLeft {
color: #2961FE; width: 57px;
font-weight: bold; display: inline-block;
text-decoration: underline; text-align-last: justify;
cursor: pointer; }
}
.fullscreen {
.Stu_HtLeft { z-index: 3000;
width: 57px; }
display: inline-block;
text-align-last: justify;
}
.fullscreen {
z-index: 3000;
}
</style> </style>
...@@ -546,6 +546,9 @@ export default { ...@@ -546,6 +546,9 @@ export default {
border-radius: 50%; border-radius: 50%;
z-index: 2; z-index: 2;
} }
.MuiBadge-root {
display: none !important;
}
.wave_wrapper span.wave_scale { .wave_wrapper span.wave_scale {
animation: wave_scale 2s both infinite; animation: wave_scale 2s both infinite;
......
const tencentcloud = require("tencentcloud-sdk-nodejs-ccc");
const CccClient = tencentcloud.ccc.v20200210.Client;
const clientConfig = {
credential: {
secretId: "SecretId",
secretKey: "SecretKey"
},
region: "",
profile: {
httpProfile: {
endpoint: "ccc.tencentcloudapi.com"
}
}
};
const client = new CccClient(clientConfig);
const params = {
SdkAppId: 1400617921,
SeatUserId: "alex9012@vip.qq.com"
};
client.CreateSDKLoginToken(params).then(
data => {
console.log(data);
},
err => {
console.error("error", err);
}
);
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