Commit b1831100 authored by Mac's avatar Mac
parents afce27d0 e1187cd1
......@@ -48,14 +48,10 @@ module.exports = function (ctx) {
env: ctx.dev ? {
API: 'http://localhost:5001/api',
// API: 'http://192.168.20.24:8300/api',
// API: 'http://192.168.10.46:8300/api',
// API: 'http://192.168.20.17:8017/api',
// API: 'https://eduapi.oytour.com/api',
API_ZC: 'http://192.168.20.9:8087/api',
API_SK: 'ws:192.168.20.214:'
API_ZC: 'http://192.168.10.17:8087/api',
API_SK: 'ws:192.168.10.214:'
} : {
API: 'https://eduapi.oytour.com/api',
API_ZC: 'http://propertyedu.oytour.com/api',
......
......@@ -115,8 +115,8 @@ export function UploadViittoBlobFile(path, file, callback) {
uploadLoadding.show({
message: '正在上传文件,请稍后...'
})
let viewFileUrl = 'http://192.168.20.214:8130';
let vtUploadUrl = "http://192.168.20.214:8120/upload/UploadBlob";
let viewFileUrl = 'http://192.168.10.214:8130';
let vtUploadUrl = "http://192.168.10.214:8120/upload/UploadBlob";
let locationName = window.location.hostname;
if (locationName.indexOf('testerp.oytour') !== -1) {
vtUploadUrl = "http://upload.oytour.com/upload/UploadBlob";
......
......@@ -257,8 +257,7 @@ import {url_jump_zc} from "../../utils/url"
Time: "1天前"
},
],
imgCov: 'http://192.168.20.214:8130/Upload/studentIcon/20201201044129361.png',
imgCov: 'http://192.168.10.214:8130/Upload/studentIcon/20201201044129361.png',
//通知请求参数
noticeMsg: {
pageIndex: 1,
......
<style>
.info_title {
.info_title {
padding: 0 22px;
margin-bottom: 20px;
flex-shrink: 0;
font-size: 16px;
font-weight: 700;
font-family: Microsoft YaHei, Avenir, Helvetica, Arial, sans-serif !important;
}
}
.customer_info_component {
.customer_info_component {
width: 100%;
}
}
.customer_info_Stage {
.customer_info_Stage {
width: 100%;
padding: 0 7px;
cursor: pointer;
......@@ -21,54 +21,54 @@
width: 100%;
padding: 12px 22px;
justify-content: space-between;
}
}
.stage_label {
.stage_label {
color: #606266;
flex-shrink: 0;
width: 65px;
text-align: right;
}
}
.stage_value {
.stage_value {
text-overflow: ellipsis;
white-space: nowrap;
}
}
.info_content {
.info_content {
margin-bottom: 30px;
}
}
.info_item {
.info_item {
position: relative;
display: flex;
padding: 12px 22px;
align-items: center;
}
}
.item_value {
.item_value {
flex: 1;
font-size: 14px;
word-break: break-all;
overflow: hidden;
}
}
.item_label {
.item_label {
color: #606266;
flex-shrink: 0;
width: 120px;
font-size: 14px;
}
}
.student_require {
.student_require {
color: red;
}
}
.stuHeadImg {
.stuHeadImg {
width: 80px;
height: 80px;
position: relative;
}
}
</style>
<template>
<div>
......@@ -79,19 +79,10 @@
<div class="stage_label">头像</div>
<div class="stage_value">
<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">
<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>
</el-upload>
</div>
......@@ -104,14 +95,7 @@
<span class="student_require">*</span>客户名称
</div>
<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>
</div>
</div>
......@@ -122,15 +106,8 @@
客户电话
</div>
<div class="stage_value">
<q-input
filled
v-model="customObj.formatTel"
style="width:185px;"
@blur="CheckExistsStu(1)"
ref="StuTel"
:disable="noEdit"
dense
>
<q-input filled v-model="customObj.StuTel" style="width:185px;"
ref="StuRealMobile" :disable="noEdit" dense>
</q-input>
</div>
</div>
......@@ -141,15 +118,8 @@
客户电话
</div>
<div class="stage_value">
<q-input
filled
v-model="customObj.StuTel"
style="width:185px;"
@blur="CheckExistsStu(1)"
ref="StuTel"
:disable="noEdit"
dense
>
<q-input filled v-model="customObj.StuRealMobile" style="width:185px;" @blur="CheckExistsStu(1)"
ref="StuRealMobile" :disable="noEdit" dense>
</q-input>
</div>
</div>
......@@ -160,16 +130,8 @@
QQ
</div>
<div class="stage_value">
<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>
<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>
......@@ -179,15 +141,8 @@
微信号
</div>
<div class="stage_value">
<q-input
filled
v-model="customObj.WeChatNo"
@blur="CheckExistsStu(3)"
style="width:185px;"
ref="WeChatNo"
:disable="noEdit"
dense
></q-input>
<q-input filled v-model="customObj.WeChatNo" @blur="CheckExistsStu(3)" style="width:185px;" ref="WeChatNo"
:disable="noEdit" dense></q-input>
</div>
</div>
</div>
......@@ -197,19 +152,8 @@
<span class="student_require">*</span>客户状态
</div>
<div class="stage_value">
<q-select
filled
v-model="customObj.StuStage"
dense
:options="customState"
option-label="Name"
:disable="noEdit"
style="width:185px;"
option-value="Id"
emit-value
map-options
label="客户状态"
/>
<q-select 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>
......@@ -220,21 +164,9 @@
<span class="student_require">*</span>客户来源
</div>
<div class="stage_value">
<q-select
filled
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="客户来源"
/>
<q-select filled 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>
......@@ -244,20 +176,9 @@
<span class="student_require">*</span>介绍人
</div>
<div class="stage_value">
<q-select
filled
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
/>
<q-select filled 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>
......@@ -267,20 +188,9 @@
<span class="student_require">*</span>转介人
</div>
<div class="stage_value">
<q-select
filled
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
/>
<q-select filled 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>
......@@ -290,20 +200,9 @@
<span class="student_require">*</span>收客渠道
</div>
<div class="stage_value">
<q-select
filled
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"
>
<q-select filled 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>
<q-item>
<q-item-section class="text-grey">
......@@ -321,20 +220,9 @@
<span class="student_require">*</span>关联同行
</div>
<div class="stage_value">
<q-select
filled
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
>
<q-select filled 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>
<q-item>
<q-item-section class="text-grey">
......@@ -350,23 +238,13 @@
<div class="info_item" v-if="customObj.StuChannel == 17">
<div class="item_label">第三方平台名称</div>
<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 class="info_item" v-if="customObj.StuChannel == 20">
<div class="item_label">其他平台名称</div>
<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>
</template>
......@@ -377,19 +255,8 @@
<span class="student_require">*</span>客户类型
</div>
<div class="stage_value">
<q-select
filled
v-model="customObj.StuType"
style="width:185px"
dense
:options="customTypeList"
:disable="noEdit"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户类型"
/>
<q-select 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>
......@@ -399,19 +266,8 @@
客户需求
</div>
<div class="stage_value">
<q-select
filled
v-model="customObj.StuNeeds"
style="width:185px"
dense
:options="NeedData"
:disable="noEdit"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户需求"
/>
<q-select 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>
......@@ -421,18 +277,8 @@
<div class="info_item">
<div class="item_label">性别</div>
<div class="item_value">
<q-radio
v-model="customObj.StuSex"
:val="0"
label="男"
:disable="noEdit"
/>
<q-radio
v-model="customObj.StuSex"
:val="1"
label="女"
:disable="noEdit"
/>
<q-radio v-model="customObj.StuSex" :val="0" label="男" :disable="noEdit" />
<q-radio v-model="customObj.StuSex" :val="1" label="女" :disable="noEdit" />
</div>
</div>
<div class="info_item studentDate">
......@@ -440,14 +286,8 @@
<div class="item_value">
<q-field filled dense>
<template v-slot:control>
<el-date-picker
v-model="customObj.StuBirth"
size="mini"
style="width:150px"
type="date"
:disabled="noEdit"
placeholder="选择日期"
>
<el-date-picker v-model="customObj.StuBirth" size="mini" style="width:150px" type="date"
:disabled="noEdit" placeholder="选择日期">
</el-date-picker>
</template>
</q-field>
......@@ -457,60 +297,28 @@
<div class="info_item">
<div class="item_label">日语基础</div>
<div class="item_value">
<q-select
filled
v-model="customObj.JapanBaseInfo"
dense
:options="basicList"
option-label="Name"
:disable="noEdit"
option-value="Id"
emit-value
map-options
/>
<q-select filled v-model="customObj.JapanBaseInfo" dense :options="basicList" option-label="Name"
:disable="noEdit" option-value="Id" emit-value map-options />
</div>
</div>
<div class="info_item">
<div class="item_label">职业</div>
<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 class="info_item">
<div class="item_label">学历</div>
<div class="item_value">
<q-select
filled
v-model="customObj.StuEducation"
dense
:options="educationList"
option-label="Name"
:disable="noEdit"
option-value="Id"
emit-value
map-options
/>
<q-select filled v-model="customObj.StuEducation" dense :options="educationList" option-label="Name"
:disable="noEdit" option-value="Id" emit-value map-options />
</div>
</div>
<div class="info_item">
<div class="item_label">学习目的</div>
<div class="item_value">
<q-select
filled
v-model="customObj.StuPurpose"
dense
:options="goalsList"
option-label="Name"
:disable="noEdit"
option-value="Id"
emit-value
map-options
/>
<q-select filled v-model="customObj.StuPurpose" dense :options="goalsList" option-label="Name"
:disable="noEdit" option-value="Id" emit-value map-options />
</div>
</div>
<!-- <div class="info_item">
......@@ -521,27 +329,22 @@
</div>
</div> -->
<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>
</template>
<script>
import {
import {
getStudentInfo, //获取学员客户信息
queryStuStageList, //获取客户阶段列表
saveStudent, //保存学员信息
GetStudentTypeList,
getStudentDorpDownList,
GetNeedsList
} from "../../../api/school/index";
import {
} from "../../../api/school/index";
import {
getGuestBasicsEnumList,
getGuestEducationEnumList,
getGuestLearningGoalsEnumList,
......@@ -549,14 +352,18 @@ import {
CreateTypeList,
CheckExistsStu,
GetCustomerList
} from "../../../api/sale/sale";
import { queryEmployee } from "../../../api/users/user";
import {
} from "../../../api/sale/sale";
import {
queryEmployee
} from "../../../api/users/user";
import {
queryStuOrderPage //学员订单分页列表
} from "../../../api/customerstudent/customerstudent";
import { UploadSelfFile } from "../../../api/common/common";
} from "../../../api/customerstudent/customerstudent";
import {
UploadSelfFile
} from "../../../api/common/common";
export default {
export default {
meta: {
title: "学员管理"
},
......@@ -591,7 +398,7 @@ export default {
StuId: 0,
StuIcon: "", //学院头像
StuName: "", //客户名称
StuTel: "", //客户电话
StuRealMobile: "", //客户电话
CreateType: "", //客户来源
StuSourceId: "", //介绍人
StuChannel: "", //收客渠道
......@@ -608,7 +415,8 @@ export default {
QQ: "", //qq
WeChatNo: "", //微信号
StuType: "", //客户类型
StuNeeds: 0 //客户需求
StuNeeds: 0, //客户需求
StuTel: "", //显示使用
},
//日语基础列表
basicList: [],
......@@ -630,7 +438,7 @@ export default {
MyTransListData: [],
checkMsg: {
StuId: 0,
StuTel: "",
StuRealMobile: "",
QQ: "",
WeChatNo: ""
},
......@@ -695,7 +503,7 @@ export default {
return;
}
if (
this.customObj.StuTel == "" &&
this.customObj.StuRealMobile == "" &&
this.customObj.QQ == "" &&
this.customObj.WeChatNo == ""
) {
......@@ -762,9 +570,9 @@ export default {
});
return;
}
if (this.customObj.StuTel != "") {
if (this.customObj.StuRealMobile != "") {
var myreg = /^[1][3-9][\d]{9}/;
if (!myreg.test(this.customObj.StuTel)) {
if (!myreg.test(this.customObj.StuRealMobile)) {
this.$q.notify({
type: "negative",
position: "top",
......@@ -914,41 +722,13 @@ export default {
);
});
},
// 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.StuRealMobile = tempDate.StuRealMobile;
this.customObj.CreateType = tempDate.CreateType;
this.customObj.StuSourceId = tempDate.StuSourceId;
this.customObj.StuChannel = tempDate.StuChannel;
......@@ -966,19 +746,12 @@ export default {
this.customObj.QQ = tempDate.QQ;
this.customObj.WeChatNo = tempDate.WeChatNo;
this.customObj.StuNeeds = tempDate.StuNeeds;
this.customObj.StuTel=tempDate.StuTel;
if (this.customObj.StuId > 0) {
this.isHaveOrder = true;
}
if (this.BelongType == 3) {
this.customObj.formatTel =
this.customObj.StuTel != ""
? this.customObj.StuTel.substring(0, 2) +
"*****" +
this.customObj.StuTel.substring(8, 10)
: "";
} else {
// this.customObj.formatTel = this.customObj.StuTel;
}
},
//新增协助人员
addAssist() {
......@@ -997,8 +770,8 @@ export default {
//验证手机号
CheckExistsStu(type) {
if (type == 1) {
if (this.customObj.StuTel && this.customObj.StuTel.length == 11) {
this.checkMsg.StuTel = this.customObj.StuTel;
if (this.customObj.StuRealMobile && this.customObj.StuRealMobile.length == 11) {
this.checkMsg.StuRealMobile = this.customObj.StuRealMobile;
this.checkMsg.QQ = "";
this.checkMsg.WeChatNo = "";
CheckExistsStu(this.checkMsg).then(r => {});
......@@ -1006,7 +779,7 @@ export default {
}
if (type == 2) {
if (this.customObj.QQ) {
this.checkMsg.StuTel = "";
this.checkMsg.StuRealMobile = "";
this.checkMsg.QQ = this.customObj.QQ;
this.checkMsg.WeChatNo = "";
CheckExistsStu(this.checkMsg).then(r => {});
......@@ -1014,7 +787,7 @@ export default {
}
if (type == 3) {
if (this.customObj.WeChatNo) {
this.checkMsg.StuTel = "";
this.checkMsg.StuRealMobile = "";
this.checkMsg.QQ = "";
this.checkMsg.WeChatNo = this.customObj.WeChatNo;
CheckExistsStu(this.checkMsg).then(r => {});
......@@ -1050,11 +823,11 @@ export default {
});
}
}
};
};
</script>
<style scoped>
::v-deep .el-input__inner {
::v-deep .el-input__inner {
background: transparent;
border: none;
}
}
</style>
\ No newline at end of file
......@@ -4,278 +4,98 @@
<div class="text-h6">添加客户</div>
<div style="font-size:12px;" class="text-grey-6 q-my-md">必填资料</div>
<div class="row q-col-gutter-md">
<q-input
class="col-6"
filled
v-model="customObj.StuName"
dense
label="客户名称"
></q-input>
<q-input
class="col-6"
filled
v-model="customObj.StuTel"
dense
full-mask
mask="###########"
label="客户电话"
@blur="checkStuTel(1)"
></q-input>
<q-input class="col-6" filled v-model="customObj.StuName" dense label="客户名称"></q-input>
<q-input class="col-6" filled v-model="customObj.StuRealMobile" dense full-mask mask="###########" label="客户电话"
@blur="checkStuTel(1)"></q-input>
</div>
<div class="q-mt-xs row q-col-gutter-md">
<q-input
class="col-6"
filled
v-model="customObj.QQ"
dense
full-mask
mask="###########"
label="客户QQ"
@blur="checkStuTel(2)"
></q-input>
<q-input
class="col-6"
filled
v-model="customObj.WeChatNo"
dense
full-mask
label="客户微信号"
@blur="checkStuTel(3)"
></q-input>
<q-input class="col-6" filled v-model="customObj.QQ" dense full-mask mask="###########" label="客户QQ"
@blur="checkStuTel(2)"></q-input>
<q-input class="col-6" filled v-model="customObj.WeChatNo" dense full-mask label="客户微信号" @blur="checkStuTel(3)">
</q-input>
</div>
<div class="q-mt-xs row q-col-gutter-md">
<q-select
filled
v-model="customObj.CreateType"
dense
:options="customFromList"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户来源"
behavior="menu"
class="col-6"
/>
<q-select
filled
v-model="customObj.StuChannel"
v-if="customObj.CreateType==1"
label="获客渠道"
dense
:options="StuChannelList"
option-label="Name"
option-value="Id"
emit-value
map-options
class="col-6"
behavior="menu"
/>
<q-select
filled
v-model="customObj.CustomerId"
v-if="customObj.CreateType==2"
label="关联同行"
dense
:options="customList"
option-label="CustomerName"
option-value="CustomerId"
emit-value
map-options
class="col-6"
behavior="menu"
/>
<q-select
v-if="customObj.CreateType == 3"
filled
v-model="customObj.StuSourceId"
dense
@filter="filterEmployee"
use-input
:options="myEmployeeList"
option-label="EmployeeName"
option-value="Id"
emit-value
map-options
label="关联员工"
behavior="menu"
class="col-6"
/>
<q-select
v-if="customObj.CreateType == 4"
filled
v-model="customObj.StuSourceId"
dense
:options="customList"
option-label="CustomerName"
option-value="CustomerId"
emit-value
map-options
label="转介人"
behavior="menu"
class="col-6"
/>
<q-select filled v-model="customObj.CreateType" dense :options="customFromList" option-label="Name"
option-value="Id" emit-value map-options label="客户来源" behavior="menu" class="col-6" />
<q-select filled v-model="customObj.StuChannel" v-if="customObj.CreateType==1" label="获客渠道" dense
:options="StuChannelList" option-label="Name" option-value="Id" emit-value map-options class="col-6"
behavior="menu" />
<q-select filled v-model="customObj.CustomerId" v-if="customObj.CreateType==2" label="关联同行" dense
:options="customList" option-label="CustomerName" option-value="CustomerId" emit-value map-options
class="col-6" behavior="menu" />
<q-select v-if="customObj.CreateType == 3" filled v-model="customObj.StuSourceId" dense @filter="filterEmployee"
use-input :options="myEmployeeList" option-label="EmployeeName" option-value="Id" emit-value map-options
label="关联员工" behavior="menu" class="col-6" />
<q-select v-if="customObj.CreateType == 4" filled v-model="customObj.StuSourceId" dense :options="customList"
option-label="CustomerName" option-value="CustomerId" emit-value map-options label="转介人" behavior="menu"
class="col-6" />
</div>
<div class="q-mt-xs row q-col-gutter-md">
<q-select
filled
v-model="customObj.StuType"
dense
:options="customTypeList"
option-label="Name"
option-value="Id"
emit-value
map-options
label="客户类型"
behavior="menu"
class="col-6"
/>
<q-select filled v-model="customObj.StuType" dense :options="customTypeList" option-label="Name"
option-value="Id" emit-value map-options label="客户类型" behavior="menu" class="col-6" />
</div>
<div class="q-mt-xs row q-col-gutter-md">
<q-input
filled
v-model="customObj.PlatformName"
:label="customObj.StuChannel == 6 ? '平台名称' : '其他渠道名称'"
dense
class="col-6"
v-if="customObj.CreateType==1&&(customObj.StuChannel == 6 || customObj.StuChannel == 7)"
></q-input>
<q-input filled v-model="customObj.PlatformName" :label="customObj.StuChannel == 6 ? '平台名称' : '其他渠道名称'" dense
class="col-6" v-if="customObj.CreateType==1&&(customObj.StuChannel == 6 || customObj.StuChannel == 7)">
</q-input>
</div>
<div style="font-size:12px;" class="text-grey-6 q-my-md">补充资料</div>
<div class="row q-col-gutter-md">
<q-field filled label="性别" stack-label class="col-6" dense>
<template v-slot:control>
<el-radio
v-model="customObj.StuSex"
:val="0"
label="男"
class="q-mr-md"
></el-radio>
<el-radio v-model="customObj.StuSex" :val="0" label="男" class="q-mr-md"></el-radio>
<el-radio v-model="customObj.StuSex" :val="1" label="女"></el-radio>
</template>
</q-field>
<q-field
filled
label="出生日期"
stack-label
class="col-6 cursor-pointer"
dense
>
<q-field filled label="出生日期" stack-label class="col-6 cursor-pointer" dense>
<template v-slot:append>
<q-icon name="event"></q-icon>
</template>
<template v-slot:control>
<span>{{ customObj.StuBirth }}</span>
<q-popup-proxy
ref="qDateProxy1"
transition-show="scale"
transition-hide="scale"
>
<q-date
v-model="customObj.StuBirth"
minimal
@input="() => $refs.qDateProxy1.hide()"
/>
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
<q-date v-model="customObj.StuBirth" minimal @input="() => $refs.qDateProxy1.hide()" />
</q-popup-proxy>
</template>
</q-field>
<q-select
filled
v-model="customObj.StuStage"
dense
:options="customState"
option-label="Name"
option-value="Id"
emit-value
map-options
class="col-6"
label="客户阶段"
behavior="menu"
/>
<q-select
filled
v-model="customObj.JapanBaseInfo"
dense
:options="basicList"
option-label="Name"
option-value="Id"
class="col-6"
label="日语基础"
emit-value
map-options
behavior="menu"
/>
<q-input
filled
v-model="customObj.StuProfession"
dense
class="col-6"
label="职业"
></q-input>
<q-select
filled
v-model="customObj.StuEducation"
dense
:options="educationList"
option-label="Name"
option-value="Id"
emit-value
map-options
class="col-6"
label="最高学历"
behavior="menu"
/>
<q-select
filled
v-model="customObj.StuPurpose"
dense
:options="goalsList"
option-label="Name"
option-value="Id"
emit-value
map-options
class="col-6"
label="学习目的"
behavior="menu"
/>
<q-select filled v-model="customObj.StuStage" dense :options="customState" option-label="Name" option-value="Id"
emit-value map-options class="col-6" label="客户阶段" behavior="menu" />
<q-select filled v-model="customObj.JapanBaseInfo" dense :options="basicList" option-label="Name"
option-value="Id" class="col-6" label="日语基础" emit-value map-options behavior="menu" />
<q-input filled v-model="customObj.StuProfession" dense class="col-6" label="职业"></q-input>
<q-select filled v-model="customObj.StuEducation" dense :options="educationList" option-label="Name"
option-value="Id" emit-value map-options class="col-6" label="最高学历" behavior="menu" />
<q-select filled v-model="customObj.StuPurpose" dense :options="goalsList" option-label="Name" option-value="Id"
emit-value map-options class="col-6" label="学习目的" behavior="menu" />
</div>
<q-separator class="q-my-md" />
<div class="text-right q-py-xs">
<q-btn
flat
color="dark"
@click="closeForm"
class="q-mr-md q-px-xs"
label="取消"
></q-btn>
<q-btn
unelevated
color="primary"
class="q-px-md"
label="保存"
@click="saveStu"
></q-btn>
<q-btn flat color="dark" @click="closeForm" class="q-mr-md q-px-xs" label="取消"></q-btn>
<q-btn unelevated color="primary" class="q-px-md" label="保存" @click="saveStu"></q-btn>
</div>
</q-card>
</div>
</template>
<script>
import {
import {
getStudentInfo, //获取学员客户信息
queryStuStageList, //获取客户阶段列表
saveStudent, //保存学员信息
GetStudentTypeList
} from "../../../api/school/index";
import {
} from "../../../api/school/index";
import {
getGuestBasicsEnumList,
getGuestEducationEnumList,
getGuestLearningGoalsEnumList,
GetStuChannelList,
CreateTypeList,
GetCustomerList
} from "../../../api/sale/sale";
import { queryEmployee, queryStudentByTel } from "../../../api/users/user";
export default {
} from "../../../api/sale/sale";
import {
queryEmployee,
queryStudentByTel
} from "../../../api/users/user";
export default {
meta: {
title: "学员管理"
},
......@@ -295,14 +115,12 @@ export default {
},
//客户对象
customObj: {
AssistList: [
{
AssistList: [{
Id: 0, //编号
AssistId: 1, //员工编号
AssistType: 1, //类型
StuId: 1 //学员编号
}
],
}],
StuSex: 1
},
//日语基础列表
......@@ -317,8 +135,8 @@ export default {
customFromList: [],
StuChannelList: [], //收客渠道
AssistDropList: [], //协助人员
customList:[],
customTypeList:[] //客户类型
customList: [],
customTypeList: [] //客户类型
};
},
created() {
......@@ -348,9 +166,13 @@ export default {
},
checkStuTel(type) {
//验证手机
if(type==1){
if (this.customObj.StuTel && this.customObj.StuTel.length == 11) {
queryStudentByTel({ StuTel: this.customObj.StuTel, QQ:'', WeChatNo:'' }).then(r => {
if (type == 1) {
if (this.customObj.StuRealMobile && this.customObj.StuRealMobile.length == 11) {
queryStudentByTel({
StuRealMobile: this.customObj.StuRealMobile,
QQ: '',
WeChatNo: ''
}).then(r => {
if (r.Data) {
this.$emit("success", r.Data, 1);
}
......@@ -358,9 +180,13 @@ export default {
}
}
//验证QQ
if(type==2){
if (type == 2) {
if (this.customObj.QQ) {
queryStudentByTel({ StuTel: '', QQ:this.customObj.QQ , WeChatNo:'' }).then(r => {
queryStudentByTel({
StuTel: '',
QQ: this.customObj.QQ,
WeChatNo: ''
}).then(r => {
if (r.Data) {
this.$emit("success", r.Data, 1);
}
......@@ -368,9 +194,13 @@ export default {
}
}
//验证微信
if(type==3){
if (type == 3) {
if (this.customObj.WeChatNo) {
queryStudentByTel({ StuTel: '', QQ:'' , WeChatNo:this.customObj.WeChatNo }).then(r => {
queryStudentByTel({
StuTel: '',
QQ: '',
WeChatNo: this.customObj.WeChatNo
}).then(r => {
if (r.Data) {
this.$emit("success", r.Data, 1);
}
......@@ -382,7 +212,7 @@ export default {
let msg = "";
if (!this.customObj.StuName) {
msg = "请输入客户名称";
} else if (!this.customObj.StuTel && !this.customObj.QQ && !this.customObj.WeChatNo) {
} else if (!this.customObj.StuRealMobile && !this.customObj.QQ && !this.customObj.WeChatNo) {
msg = "请至少输入一个手机号QQ号微信号";
} else if (!this.customObj.CreateType) {
msg = "请选择客户来源";
......@@ -483,7 +313,7 @@ export default {
})
},
//获取客户类型
getCustomTypeList(){
getCustomTypeList() {
GetStudentTypeList().then(res => {
if (res.Code == 1) {
this.customTypeList = res.Data;
......@@ -514,5 +344,5 @@ export default {
this.customObj.AssistList.splice(index, 1);
}
}
};
};
</script>
\ No newline at end of file
......@@ -457,7 +457,6 @@
//初始化表单
initObj() {
console.log(this.saveObj)
if (this.saveObj && this.saveObj.Id > 0) {
queryStudyAbroadInfo({
Id: this.saveObj.Id,
......
......@@ -12,6 +12,16 @@
map-options @input="resetSearch">
</q-select>
</div>
<div class="col-3">
<q-select class="q-pb-lg q-pr-lg" filled stack-label clearable option-value="Id" option-label="Name"
v-model="msg.ProductType" :options="productList" label="产品类型" :dense="false" emit-value map-options
@input="resetSearch" />
</div>
<div class="col-3">
<q-select class="q-pb-lg q-pr-lg" filled stack-label clearable option-value="ID" option-label="Name"
v-model="msg.StudyCountryId" :options="CountryList" label="就业国家" :dense="false" emit-value map-options
@input="resetSearch" />
</div>
</div>
</div>
<div class="page-content">
......@@ -68,8 +78,6 @@
<q-td key="SellPrice" :props="props">
{{props.row.SellPrice}}
</q-td>
<q-td key="B2CRatio" :props="props">
{{props.row.B2CRatio}}%
</q-td>
......@@ -275,8 +283,12 @@
queryStudyAbroadPage,
saveSaleState,
querySaleStateList,
deleteStudyAbroad
deleteStudyAbroad,
queryStudyAbroadProductType
} from '../../api/studyabroad/index'
import {
queryCountryList
} from '../../api/common/common'
import studyAbroadForm from '../../components/studyAbroad/studyAbroad-form'
// import studyAbroadpriceForm from '../../components/studyAbroad/studyAbroadprice-form'
import studyAbroadpriceForm from '../../components/studyAbroad/newstudyAbroadprice-form'
......@@ -302,7 +314,9 @@
rowsPerPage: 10,
Name: "",
IsQPrice: 1,
SaleState: "" //销售状态
SaleState: "", //销售状态
ProductType: "", //产品类型
StudyCountryId: "", //国家编号
},
dataList: [],
loading: true,
......@@ -495,6 +509,8 @@
isShowStudyPrice: false, //是否显示价格设置
saleDownList: [], //销售状态下拉
isShowInfo: false, //是否显示审核信息
productList: [], //产品类型列表
CountryList: [], //国家列表
}
},
computed: mapState({
......@@ -530,11 +546,27 @@
},
created() {
this.getSaleStateList();
this.getCountryList();
this.getProductType();
if (!this.isHaveViewSupplierAction) {
this.visibleColumns.splice(this.visibleColumns.length - 1, 1);
}
},
methods: {
//获取国家列表
getCountryList() {
queryCountryList({}).then(res => {
if (res.Code == 1) {
this.CountryList = res.Data;
}
});
},
//获取产品类型列表
getProductType() {
queryStudyAbroadProductType({}).then(res => {
this.productList = res.Data;
});
},
//删除留学就业产品
removeStudy(item, status) {
let delMsg = {
......
......@@ -8,10 +8,20 @@
</div>
<div class="col-3">
<q-select class="q-pb-lg q-pr-lg" filled stack-label clearable option-value="Id" option-label="Name"
v-model="msg.SaleState" ref="SaleState" :options="saleDownList" label="销售状态" :dense="false" emit-value
map-options @input="resetSearch">
v-model="msg.SaleState" :options="saleDownList" label="销售状态" :dense="false" emit-value map-options
@input="resetSearch">
</q-select>
</div>
<div class="col-3">
<q-select class="q-pb-lg q-pr-lg" filled stack-label clearable option-value="Id" option-label="Name"
v-model="msg.ProductType" :options="productList" label="产品类型" :dense="false" emit-value map-options
@input="resetSearch" />
</div>
<div class="col-3">
<q-select class="q-pb-lg q-pr-lg" filled stack-label clearable option-value="ID" option-label="Name"
v-model="msg.StudyCountryId" :options="CountryList" label="留学国家" :dense="false" emit-value map-options
@input="resetSearch" />
</div>
</div>
</div>
<div class="page-content">
......@@ -105,96 +115,6 @@
<q-td key="B2CRNRatio" :props="props">
{{props.row.B2CRNRatio}}{{props.row.CommissionReType==1?'%':''}}
</q-td>
<!-- <q-td key="PreferentialList" style="padding-right:0px">
<div v-for="(x,index) in props.row.PreferentialList" :key="index">
<div class="border-bottom" v-if="x.PriceDiscountType == 1">
买{{ x.BuyNum }}送{{ x.SendNum }}
</div>
<div class="border-bottom" v-if="x.PriceDiscountType == 2">
单人报名优惠
<template v-if="x.PriceType==0">
{{x.PriceMoney}}%
</template>
<template v-else>
{{x.PriceMoney}} 元
</template>
</div>
<div class="border-bottom" v-if="x.PriceDiscountType == 3">
双人报名享优惠<template v-if="x.PriceType==0">
{{x.PriceMoney }}%
</template>
<template v-else>
{{x.PriceMoney}} 元
</template>
</div>
<div class="border-bottom" v-if="x.PriceDiscountType == 4">
续费优惠<template v-if="x.PriceType==0">
{{x.PriceMoney}}%
</template>
<template v-else>
{{x.PriceMoney}} 元
</template>
</div>
<div class="remark-font" v-if="x.PriceDiscountType == 0">
暂无优惠政策
</div>
</div>
<div v-if="! props.row.PreferentialList || props.row.PreferentialList.length == 0">
<div class="remark-font">暂无优惠政策</div>
</div>
</q-td> -->
<!-- <q-td key="PreferentialListSellCommission" style="padding-right:0px;padding-left:0px">
<div v-for="(x,index) in props.row.PreferentialListSellCommission" :key="index">
<div class="border-bottom" style="padding-left: 16px;padding-right: 16px"
:class="{ 'text-red': x.SaleCommissionType == 1 }" v-if="x.PriceDiscountType != 0">
{{ x.SaleCommissionType == 1 ? "¥" : ""
}}{{ x.SaleCommissionMoney
}}{{ x.SaleCommissionType == 0 ? "%" : "" }}
</div>
<div v-if="x.PriceDiscountType == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</div>
<div
v-if="!props.row.PreferentialListSellCommission || props.row.PreferentialListSellCommission.length == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</q-td> -->
<!-- <q-td key="PreferentialListB2BCommission" style="padding-left:0px">
<div v-for="(x,index) in props.row.PreferentialListB2BCommission" :key="index">
<div class="border-bottom" style="padding-left: 16px" :class="{ 'text-red': x.B2BCommissionType == 1 }"
v-if="x.PriceDiscountType != 0">
{{ x.B2BCommissionType == 1 ? "¥" : ""
}}{{ x.B2BCommissionMoney
}}{{ x.B2BCommissionType == 0 ? "%" : "" }}
</div>
<div v-if="x.PriceDiscountType == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</div>
<div
v-if="!props.row.PreferentialListB2BCommission || props.row.PreferentialListB2BCommission.length == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</q-td> -->
<!-- <q-td key="EducationCommission" style="padding-left:0px">
<div v-for="(x,index) in props.row.EducationCommission" :key="index">
<div class="border-bottom" style="padding-left: 16px" :class="{ 'text-red': x.EduCommissionType == 1 }"
v-if="x.PriceDiscountType != 0">
{{ x.EduCommissionType == 1 ? "¥" : ""
}}{{ x.EduCommissionMoney
}}{{ x.EduCommissionType == 0 ? "%" : "" }}
</div>
<div v-if="x.PriceDiscountType == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</div>
<div v-if="!props.row.EducationCommission || props.row.EducationCommission.length == 0">
<div class="remark-font">暂无佣金信息</div>
</div>
</q-td> -->
<q-td key="Id" style="width:200px;">
<q-btn flat size="xs" icon="edit" color="accent" style="font-weight:400" label="编辑"
@click="EditStudy(props.row)" />
......@@ -202,11 +122,6 @@
@click="EditStudyPrice(props.row)" />
<q-btn-dropdown flat size="xs" color="dark" label="更多" style="margin-left:10px;">
<q-list>
<!-- <q-item clickable v-close-popup @click="EditStudyPrice(props.row)">
<q-item-section>
<q-item-label>价格设置</q-item-label>
</q-item-section>
</q-item> -->
<q-item clickable v-close-popup
v-if="props.row.SaleState==1||props.row.SaleState==4||props.row.SaleState==5"
@click="applyApply(props.row,2)">
......@@ -274,10 +189,13 @@
queryStudyAbroadPage,
saveSaleState,
querySaleStateList,
deleteStudyAbroad
deleteStudyAbroad,
queryStudyAbroadProductType
} from '../../api/studyabroad/index'
import {
queryCountryList
} from '../../api/common/common'
import studyAbroadForm from '../../components/studyAbroad/studyAbroad-form'
// import studyAbroadpriceForm from '../../components/studyAbroad/studyAbroadprice-form'
import studyAbroadpriceForm from '../../components/studyAbroad/newstudyAbroadprice-form'
import studyproauditinfoForm from '../../components/studyAbroad/studyproauditinfo-form'
import {
......@@ -302,7 +220,9 @@
rowsPerPage: 10,
Name: "",
IsQPrice: 1,
SaleState: "" //销售状态
SaleState: "", //销售状态
ProductType: "", //产品类型
StudyCountryId: "", //国家编号
},
dataList: [],
loading: true,
......@@ -348,13 +268,6 @@
field: 'SchoolName',
align: 'left'
},
// {
// name: 'SuggestPrice',
// label: '建议卖价',
// field: 'SuggestPrice',
// align: 'left',
// field: row => row.SuggestPrice.toFixed(2)
// },
{
name: 'SellPrice',
label: '实际卖价',
......@@ -446,35 +359,6 @@
align: "left",
field: (row) => row.B2CRNRatio
},
// {
// name: "PreferentialList",
// required: true,
// label: "优惠政策",
// align: "left",
// field: row => row.PreferentialList
// },
// {
// name: "PreferentialListSellCommission",
// required: true,
// label: "销售佣金",
// align: "left",
// field: row => row.PreferentialList
// },
// {
// name: "PreferentialListB2BCommission",
// required: true,
// label: "同行佣金",
// align: "left",
// field: row => row.PreferentialList
// },
// {
// name: "EducationCommission",
// required: true,
// label: "教育同行佣金",
// align: "left",
// field: row => row.PreferentialList
// },
{
name: 'Id',
label: '操作',
......@@ -494,6 +378,8 @@
isShowStudyPrice: false, //是否显示价格设置
saleDownList: [], //销售状态下拉
isShowInfo: false, //是否显示审核信息
productList: [], //产品类型列表
CountryList: [], //国家列表
}
},
computed: mapState({
......@@ -529,11 +415,27 @@
},
created() {
this.getSaleStateList();
this.getCountryList();
this.getProductType();
if (!this.isHaveViewSupplierAction) {
this.visibleColumns.splice(this.visibleColumns.length - 1, 1);
}
},
methods: {
//获取国家列表
getCountryList() {
queryCountryList({}).then(res => {
if (res.Code == 1) {
this.CountryList = res.Data;
}
});
},
//获取产品类型列表
getProductType() {
queryStudyAbroadProductType({}).then(res => {
this.productList = res.Data;
});
},
//删除留学就业产品
removeStudy(item, status) {
let delMsg = {
......
......@@ -80,11 +80,11 @@ export default {
},
//域名管理对象
Vue.prototype.domainManager = function () {
// let domainUrl = 'http://192.168.20.24';
let domainUrl = 'http://192.168.10.65:8083';
let viewFileUrl = 'http://192.168.10.214:8120';
let mallUrl = "http://192.168.10.65:8088";
// let vtUploadUrl = "http://192.168.20.214:8120";
let vtUploadUrl = "http://upload.oytour.com";
let vtViewUrl = "http://192.168.10.214:8130";
let locationName = window.location.hostname;
......
export let url_jump_zc = "http://zcedu.oytour.com/"
// export let UploadUrl = "http://192.168.20.214:8120"//上传文件到本地服务器
export let UploadUrl = "http://uploadfile.oytour.com"
// export let ViittoFileUrl="http://192.168.20.214:8120"//文件站点
export let ViittoFileUrl = "http://staticfile.oytour.com"
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