Commit 388d2162 authored by 罗超's avatar 罗超

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

# Conflicts:
#	src/components/schedul/schedul-visit.vue
parents ed19de17 95134095
...@@ -377,6 +377,14 @@ export function setStudyAboradOrderConfirm(data) { ...@@ -377,6 +377,14 @@ export function setStudyAboradOrderConfirm(data) {
}); });
} }
// 同行下拉
export function getMyCustomerList(data) {
return request({
url: '/b2bcustomer/GetMyCustomerList',
method: 'post',
data
});
}
// 获取收客渠道下拉 // 获取收客渠道下拉
export function GetStuChannelList(data) { export function GetStuChannelList(data) {
return request({ return request({
...@@ -395,4 +403,22 @@ export function GetAssistTypeList(data) { ...@@ -395,4 +403,22 @@ export function GetAssistTypeList(data) {
}); });
} }
// 保存协助数据
export function SetStudentAssist(data) {
return request({
url: '/CustomerStudent/SetStudentAssist',
method: 'post',
data
});
}
// 获取协助数据
export function GetStudentAssistList(data) {
return request({
url: '/CustomerStudent/GetStudentAssistList',
method: 'post',
data
});
}
...@@ -68,16 +68,24 @@ ...@@ -68,16 +68,24 @@
class="col-12" label="成交单价" :rules="[val => !!val || '请填成交单价']" /> class="col-12" label="成交单价" :rules="[val => !!val || '请填成交单价']" />
</template> </template>
<q-input filled stack-label :dense="false" v-model="OrderMsg.PerDiscountMoney" :disable="true" <!-- <q-input filled stack-label :dense="false" v-model="OrderMsg.PerDiscountMoney" :disable="true"
class="col-12 q-pb-lg" label="优惠金额(每人)" :hint="'总优惠金额:'+(OrderMsg.PerDiscountMoney*OrderMsg.GuestNum)" /> class="col-12 q-pb-lg" label="优惠金额(每人)" :hint="'总优惠金额:'+(OrderMsg.PerDiscountMoney*OrderMsg.GuestNum)" /> -->
<q-input filled stack-label :dense="false" :value="OrderMsg.Class_Price*OrderMsg.GuestNum*OrderMsg.B2CRatio" :disable="true"
class="col-12 q-pb-lg" label="优惠金额" />
<template v-if="modityOrderType==3"> <template v-if="modityOrderType==3">
<q-input filled stack-label :dense="false" v-model="OrderMsg.Unit_Price" @input="calcPrice()" class="col-12" <q-input filled stack-label :dense="false" v-model="OrderMsg.Unit_Price" @input="calcPrice()" class="col-12"
label="成交单价" :rules="[val => !!val || '请填成交单价']" /> label="成交单价" :rules="[val => !!val || '请填成交单价']" />
</template> </template>
<q-input filled stack-label :disable="modityOrderType!=3" :dense="false" maxlength="10" <!-- <q-input filled stack-label :disable="modityOrderType!=3" :dense="false" maxlength="10"
@keyup.native="checkPrice(OrderMsg,'PreferPrice')" v-model="OrderMsg.PreferPrice" class="col-12 q-pb-lg" @keyup.native="checkPrice(OrderMsg,'PreferPrice')" v-model="OrderMsg.PreferPrice" class="col-12 q-pb-lg"
label="应收" /> -->
<q-input filled stack-label :disable="modityOrderType!=3" :dense="false" maxlength="10"
@keyup.native="checkPrice(OrderMsg,'PreferPrice')" :value="OrderMsg.Class_Price*OrderMsg.GuestNum*(1-OrderMsg.B2CRatio)" class="col-12 q-pb-lg"
label="应收" /> label="应收" />
<q-select :disable="modityOrderType==2" standout="bg-primary text-white" option-value="Id" option-label="Name" <q-select :disable="modityOrderType==2" standout="bg-primary text-white" option-value="Id" option-label="Name"
v-model="OrderMsg.OrderSource" :options="SourceEnumList" emit-value map-options class="q-pb-lg" v-model="OrderMsg.OrderSource" :options="SourceEnumList" emit-value map-options class="q-pb-lg"
label="客人来源" /> label="客人来源" />
...@@ -92,12 +100,23 @@ ...@@ -92,12 +100,23 @@
</q-item> </q-item>
</template> </template>
</q-select> </q-select>
<q-select :disable="(modityOrderType==2)||(OrderMsg.JoinType==3)" v-model="OrderMsg.CustomerId"
:options="myCustomerList" filled use-input label="同行" option-label="CustomerName" option-value="CustomerId"
ref="CustomerName" class="col-6 q-pb-lg" emit-value map-options @filter="cusfilterFn">
<template v-slot:no-option>
<q-item>
<q-item-section class="text-grey">
未找到相关数据
</q-item-section>
</q-item>
</template>
</q-select>
<q-input :disable="(modityOrderType==2)" v-if="OrderMsg.OrderSource==3" filled stack-label :dense="false" <q-input :disable="(modityOrderType==2)" v-if="OrderMsg.OrderSource==3" filled stack-label :dense="false"
maxlength="50" v-model="OrderMsg.GeneralOccupation" class="col-12 q-pb-lg" label="一般同行" /> maxlength="50" v-model="OrderMsg.GeneralOccupation" class="col-12 q-pb-lg" label="一般同行" />
<q-input :disable="(modityOrderType==2)" v-if="OrderMsg.OrderSource==7" filled stack-label :dense="false" <q-input :disable="(modityOrderType==2)" v-if="OrderMsg.OrderSource==7" filled stack-label :dense="false"
maxlength="50" v-model="OrderMsg.EduOccupation" class="col-12 q-pb-lg" label="教育同行" /> maxlength="50" v-model="OrderMsg.EduOccupation" class="col-12 q-pb-lg" label="教育同行" />
<q-toggle :disable="(modityOrderType==2)" v-model="OrderMsg.IsLessPrice" :false-value="0" :true-value="1" <!-- <q-toggle :disable="(modityOrderType==2)" v-model="OrderMsg.IsLessPrice" :false-value="0" :true-value="1"
label="是否少价" class="q-mb-md" /> label="是否少价" class="q-mb-md" /> -->
<q-input :disable="(modityOrderType==2)" v-if="OrderMsg.IsLessPrice==1" @input="calcPrice()" <q-input :disable="(modityOrderType==2)" v-if="OrderMsg.IsLessPrice==1" @input="calcPrice()"
@keyup.native="checkPrice(OrderMsg,'PerLessMoney')" maxlength="10" filled stack-label :dense="false" @keyup.native="checkPrice(OrderMsg,'PerLessMoney')" maxlength="10" filled stack-label :dense="false"
v-model="OrderMsg.PerLessMoney" class="col-12" label="少价金额(每人)" v-model="OrderMsg.PerLessMoney" class="col-12" label="少价金额(每人)"
...@@ -122,7 +141,8 @@ ...@@ -122,7 +141,8 @@
getOrderSourceEnumList, //获取订单来源 枚举 getOrderSourceEnumList, //获取订单来源 枚举
setClassOrder, //修改订单 setClassOrder, //修改订单
queryChaClassInfo, queryChaClassInfo,
GetSelectClassOrderList //获取前置下拉 GetSelectClassOrderList, //获取前置下拉
getMyCustomerList//同行下拉
} from '../../api/sale/sale' } from '../../api/sale/sale'
import { import {
queryEmployee queryEmployee
...@@ -159,6 +179,9 @@ ...@@ -159,6 +179,9 @@
OrderMsg: { OrderMsg: {
ClassId: 0, //班级编号 ClassId: 0, //班级编号
GuestNum: 0, //人数 GuestNum: 0, //人数
B2CRatio:0,
B2CReNewRatio:0,
CustomerId:0,//市场专员
Unit_Price: 0, Unit_Price: 0,
PreferPrice: 0, PreferPrice: 0,
OrderSource: 0, OrderSource: 0,
...@@ -193,6 +216,8 @@ ...@@ -193,6 +216,8 @@
CourseList: [], //课程列表 CourseList: [], //课程列表
courseObj: {}, //选择的课程 courseObj: {}, //选择的课程
beforeOrderList: [], //前置订单数据 beforeOrderList: [], //前置订单数据
myCustomerList:[],//同行列表
allCustomerList:[],//所有同行列表
} }
}, },
created() { created() {
...@@ -205,6 +230,7 @@ ...@@ -205,6 +230,7 @@
this.getEmployee(); this.getEmployee();
this.initConfig(); this.initConfig();
this.getSelectClass(); this.getSelectClass();
this.getCustomerList();
}, },
mounted() { mounted() {
this.initData() this.initData()
...@@ -244,7 +270,7 @@ ...@@ -244,7 +270,7 @@
if (temp) { if (temp) {
this.courseObj = temp; this.courseObj = temp;
var tempDiscountMoney = 0; //优惠金额 var tempDiscountMoney = 0; //优惠金额
var tempSaleRemark = ""; //备注 var tempSaleRemark = `直客首次报名优惠比例${ temp.B2CRatio??0 }%`; //备注
//插班课时单价 //插班课时单价
var classHourPrice = temp.SellPrice / this.courseObj.ClassHours; var classHourPrice = temp.SellPrice / this.courseObj.ClassHours;
var chaBanPrice = Number(classHourPrice * (this.courseObj.ClassHours - this.OrderMsg.StartClassHours)) var chaBanPrice = Number(classHourPrice * (this.courseObj.ClassHours - this.OrderMsg.StartClassHours))
...@@ -257,17 +283,17 @@ ...@@ -257,17 +283,17 @@
} else { } else {
tempDiscountMoney = (temp.SellPrice * temp.CoursePriceList[0].PriceMoney) / 100; tempDiscountMoney = (temp.SellPrice * temp.CoursePriceList[0].PriceMoney) / 100;
} }
tempSaleRemark = "单人报名优惠" + temp.CoursePriceList[0].PriceMoney + "%"; // tempSaleRemark = "单人报名优惠" + temp.CoursePriceList[0].PriceMoney + "%";
} else { } else {
tempDiscountMoney = item.CoursePriceList[0].PriceMoney; tempDiscountMoney = item.CoursePriceList[0].PriceMoney;
tempSaleRemark = "单人报名优惠" + temp.CoursePriceList[0].PriceMoney; // tempSaleRemark = "单人报名优惠" + temp.CoursePriceList[0].PriceMoney;
} }
} }
} }
if (guestNum > 1) { if (guestNum > 1) {
if (temp.CoursePriceList && temp.CoursePriceList.length > 0) { if (temp.CoursePriceList && temp.CoursePriceList.length > 0) {
if (temp.CoursePriceList[1].PriceType == 0) { if (temp.CoursePriceList[1].PriceType == 0) {
tempSaleRemark = "双人报名优惠" + temp.CoursePriceList[1].PriceMoney + "%"; // tempSaleRemark = "双人报名优惠" + temp.CoursePriceList[1].PriceMoney + "%";
if (this.OrderMsg.IsChaBan == 1) { if (this.OrderMsg.IsChaBan == 1) {
tempDiscountMoney = (chaBanPrice * temp.CoursePriceList[1].PriceMoney) / 100; tempDiscountMoney = (chaBanPrice * temp.CoursePriceList[1].PriceMoney) / 100;
} else { } else {
...@@ -275,7 +301,7 @@ ...@@ -275,7 +301,7 @@
} }
} else { } else {
tempDiscountMoney = item.CoursePriceList[1].PriceMoney; tempDiscountMoney = item.CoursePriceList[1].PriceMoney;
tempSaleRemark = "双人报名优惠" + temp.CoursePriceList[1].PriceMoney; // tempSaleRemark = "双人报名优惠" + temp.CoursePriceList[1].PriceMoney;
} }
} }
} }
...@@ -365,6 +391,9 @@ ...@@ -365,6 +391,9 @@
this.OrderMsg.UpOrderId = tempData.UpOrderId; this.OrderMsg.UpOrderId = tempData.UpOrderId;
this.OrderMsg.DiscountMoney = tempData.DiscountMoney; this.OrderMsg.DiscountMoney = tempData.DiscountMoney;
this.OrderMsg.PerDiscountMoney = tempData.PerDiscountMoney; this.OrderMsg.PerDiscountMoney = tempData.PerDiscountMoney;
this.OrderMsg.B2CRatio = tempData.B2CRatio>1?(tempData.B2CRatio/100):tempData.B2CRatio;
this.OrderMsg.B2CReNewRatio = tempData.B2CReNewRatio>1?(tempData.B2CReNewRatio/100):tempData.B2CReNewRatio;
this.OrderMsg.CustomerId=tempData.CustomerId
this.UnitPrice = this.OrderMsg.Unit_Price; this.UnitPrice = this.OrderMsg.Unit_Price;
this.IsShowEditOrder = true; this.IsShowEditOrder = true;
} }
...@@ -388,6 +417,9 @@ ...@@ -388,6 +417,9 @@
this.OrderMsg.DiscountMoney = 0; this.OrderMsg.DiscountMoney = 0;
this.OrderMsg.PerDiscountMoney = 0; this.OrderMsg.PerDiscountMoney = 0;
this.OrderMsg.OrderType = this.orderType; this.OrderMsg.OrderType = this.orderType;
this.OrderMsg.B2CRatio = 0;
this.OrderMsg.B2CReNewRatio = 0;
this.OrderMsg.CustomerId=0;
if (this.OrderMsg.OrderType == 2) { if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OrderNature = 1; this.OrderMsg.OrderNature = 1;
} }
...@@ -409,6 +441,12 @@ ...@@ -409,6 +441,12 @@
} else { } else {
this.OrderMsg.CourseId = ''; this.OrderMsg.CourseId = '';
} }
if(this.saveObj.B2CRatio){
this.OrderMsg.B2CRatio = this.saveObj.B2CRatio;
}
if(this.saveObj.B2CReNewRatio){
this.OrderMsg.B2CReNewRatio = this.saveObj.B2CReNewRatio;
}
} }
this.IsShowEditOrder = true; this.IsShowEditOrder = true;
this.calcPrice(); this.calcPrice();
...@@ -424,6 +462,17 @@ ...@@ -424,6 +462,17 @@
this.EmployeeList = this.AllemployeeList.filter(v => v.EmployeeName.toLowerCase().indexOf(needle) > -1); this.EmployeeList = this.AllemployeeList.filter(v => v.EmployeeName.toLowerCase().indexOf(needle) > -1);
} }
}) })
},
//筛选市场专员
cusfilterFn(val, update) {
update(() => {
if (val === '') {
this.myCustomerList = JSON.parse(JSON.stringify(this.allCustomerList))
} else {
const needle = val.toLowerCase();
this.myCustomerList = this.allCustomerList.filter(v => v.CustomerName.toLowerCase().indexOf(needle) > -1);
}
})
}, },
//获取业务员 //获取业务员
getEmployee() { getEmployee() {
...@@ -547,6 +596,12 @@ ...@@ -547,6 +596,12 @@
str = item[0].GuestName; str = item[0].GuestName;
} }
return str return str
},
getCustomerList(){
getMyCustomerList({}).then(res=>{
this.myCustomerList=res.Data
this.allCustomerList=res.Data
})
} }
} }
} }
......
...@@ -422,7 +422,7 @@ ...@@ -422,7 +422,7 @@
> >
<template v-slot:body-cell-Option="props"> <template v-slot:body-cell-Option="props">
<q-td :props="props"> <q-td :props="props">
<q-btn dense flat color="primary" v-if="props.row.IsVisit!=1"> <q-btn dense flat color="primary" v-if="props.row.IsVisit != 1">
<q-icon <q-icon
name="edit" name="edit"
color="primary" color="primary"
...@@ -435,7 +435,9 @@ ...@@ -435,7 +435,9 @@
</template> </template>
<template v-slot:body-cell-IsVisitStr="props"> <template v-slot:body-cell-IsVisitStr="props">
<q-td :props="props" class="text-negative"> <q-td :props="props" class="text-negative">
<span :class="{'text-primary':props.row.IsVisit==1}">{{props.row.IsVisitStr}}</span> <span :class="{ 'text-primary': props.row.IsVisit == 1 }">{{
props.row.IsVisitStr
}}</span>
</q-td> </q-td>
</template> </template>
</q-table> </q-table>
...@@ -448,9 +450,9 @@ ...@@ -448,9 +450,9 @@
</div> </div>
</template> </template>
<script> <script>
import { getStudentPage } from "../../api/school";
import { getGuestBasicsEnumList } from "../../api/sale/sale";
import { getTodayVisitList } from "../../api/stuMan/index"; import { getTodayVisitList } from "../../api/stuMan/index";
import { getStudentPage, saveStudent, getStudentInfo } from "../../api/school";
import { getGuestBasicsEnumList } from "../../api/sale/sale";
import schedulFanke from "../schedul/schedul-fanke"; import schedulFanke from "../schedul/schedul-fanke";
export default { export default {
...@@ -626,7 +628,6 @@ export default { ...@@ -626,7 +628,6 @@ export default {
isShowAdd: true, //是否显示新增按钮【默认显示】 isShowAdd: true, //是否显示新增按钮【默认显示】
isShowEdit: true //是否显示编辑按钮【默认显示】 isShowEdit: true //是否显示编辑按钮【默认显示】
}, },
rules: { rules: {
//表单必填验证 //表单必填验证
Name: [ Name: [
...@@ -768,33 +769,6 @@ export default { ...@@ -768,33 +769,6 @@ export default {
this.loading = false; this.loading = false;
}); });
}, },
//新增修改访客
EditVisitor(Id) {
if (Id > 0) {
queryVisitor({
Id: Id
}).then(res => {
if (res.Code == 1) {
var tempData = res.Data;
if (tempData) {
this.addMsg.Id = tempData.Id;
this.addMsg.Name = tempData.Name;
this.addMsg.Tel = tempData.Tel;
this.addMsg.WeChatNum = tempData.WeChatNum;
this.addMsg.CourseName = tempData.CourseName;
this.addMsg.StudyTime = tempData.StudyTime;
this.addMsg.LevelType = tempData.LevelType;
this.addMsg.PlanId = tempData.PlanId;
this.addMsg.VisitorStatus = tempData.VisitorStatus;
this.addMsg.Evaluate = tempData.Evaluate;
this.addMsg.Remark = tempData.Remark;
}
}
});
} else {
this.clearAddMsg();
}
},
clearAddMsg() { clearAddMsg() {
this.addMsg.Id = 0; this.addMsg.Id = 0;
this.addMsg.Name = ""; this.addMsg.Name = "";
......
<style>
.delAssist{
position: absolute;
right: 0;
top: 28px;
display: inline-block;
background: red;
border-radius: 50%;
color: #FFF;
width: 20px;
height: 20px;
text-align: center;
line-height: 20px;
cursor: pointer;
}
</style>
<template>
<div>
<div class="row wrap" style="flex-direction:row-reverse">
<q-btn label="新增" color="accent q-mb-lg" @click="addAssist" size="sm" />
</div>
<template v-if="AssitMsg.AssistList.length>0">
<div class="row wrap" v-for="(item,index) in AssitMsg.AssistList" :key="index">
<q-select filled stack-label option-label="Name" v-model="item.AssistType" option-value="Id"
:options="AssistDropList" label="角色" dense class="col-6 q-pb-lg q-pr-lg" emit-value
map-options />
<q-select filled dense v-model="item.AssistId" @filter="filterEmployee" use-input
:options="myEmployeeList" option-label="EmployeeName" class="col-6 q-pb-lg" option-value="Id" emit-value map-options />
<i class="iconfont icon-close delAssist" @click="delAssist(index)"></i>
</div>
<div class="row wrap" style="margin-bottom:10px;float:right;">
<q-btn label="保存" color="accent q-mb-lg" size="md" @click="saveAssit()" />
</div>
</template>
<!-- <div style="display:flex;flex:1;flex-direction: column;overflow:hidden;">
<div class="TimeLineDiv">
<q-timeline color="primary">
<q-timeline-entry v-for="(tItem,tIndex) in dataList" :key="tIndex">
<template v-slot:title>
<div class="visit_Cont">
<div class="Log_Content">
<div>约访时间:{{tItem.AppointmentTime}}</div>
<div>约访地点:{{tItem.AppointmentPoint}}</div>
<div class="StuCom_Remark">
<div class="StuCom_Left">备注</div>:
<div class="StuCom_Inner">{{tItem.Remark}}</div>
</div>
<div class="StuCom_Remark">
<div class="StuCom_Left">反馈</div>:
<div class="StuCom_Inner">{{tItem.Feedback}} </div>
</div>
</div>
<div style="display:flex;margin-top:10px;">
<div @click="delVisit(tItem.Id)" class="visit_delete text-negative">删除</div>
<div @click="clickItem(tItem)" class="stu_ComFeed">
{{tItem.Feedback==null||tItem.Feedback==''?'添加反馈':'编辑反馈'}}
<q-popup-proxy>
<q-banner v-if="isShowEdit">
<div class="row wrap" style="margin-top:10px;width:300px;">
<q-input filled v-model="feedBackMsg.Feedback" :rows="3" type="textarea"
class="col-12 q-pb-lg" label="反馈">
</q-input>
</div>
<div class="row wrap" style="float:right;margin-bottom:10px;">
<q-btn label="保存" color="accent" size="sm" @click="SetFeedBack()" />
</div>
</q-banner>
</q-popup-proxy>
</div>
</div>
</div>
</template>
<template v-slot:subtitle>
<div class="Time_TopList">
<div>{{ tItem.CreateTime }}</div>
<div>{{ tItem.CreateByName }}</div>
</div>
</template>
</q-timeline-entry>
</q-timeline>
</div>
</div>
<div style="margin-bottom:20px">
<q-pagination class="full-width justify-end" v-model="msg.pageIndex" color="primary" :max="page_Count" input
@input="changePage" />
</div> -->
</div>
</template>
<script>
import {
GetAssistTypeList,
SetStudentAssist,
GetStudentAssistList
} from '../../../api/sale/sale'
import {
queryEmployee
} from '../../../api/users/user'
export default {
meta: {
title: ""
},
components: {
},
props: {
saveObj: {
type: Object,
default: null
}
},
data() {
return {
isShowAdd: false,
AssitMsg: {
StuId:1,//学员编号
AssistList:[]
},
msg: {
StuId:1
},
isShowEdit: false,
dataList: [],
page_Count: 0,
AssistDropList:[], //下拉数据
employeeList: [],
myEmployeeList:[],
}
},
created() {
if (this.saveObj && this.saveObj.StuId) {
this.AssitMsg.StuId = this.saveObj.StuId;
this.msg.StuId = this.saveObj.StuId;
}
},
mounted() {
this.getList();
this.GetAssistTypeList();
this.getEmployeeList();
},
methods: {
//获取协助人员
GetAssistTypeList(){
GetAssistTypeList({}).then(res => {
if(res.Code==1){
this.AssistDropList = 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
);
});
},
//新增协助人员
addAssist(){
let obj = {
Id:0,//编号
AssistId:1,//员工编号
AssistType:1,//类型
StuId:1,//学员编号
}
this.AssitMsg.AssistList.push(obj);
},
//保存协同人员
saveAssit() {
SetStudentAssist(this.AssitMsg).then(res => {
if (res.Code == 1) {
}
}).catch(() => {
})
},
//获取数据
getList() {
GetStudentAssistList(this.msg).then(res => {
console.log(res,'数据');
if (res.Code == 1) {
}
}).catch(() => {
})
},
//删除到访
delAssist(index) {
this.AssitMsg.AssistList.splice(index,1);
},
changePage(val) {
this.msg.pageIndex = val;
this.getList();
}
}
}
</script>
...@@ -68,7 +68,7 @@ ...@@ -68,7 +68,7 @@
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label">客户名称</div> <div class="stage_label">客户名称</div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.StuName"></q-input> <q-input filled v-model="customObj.StuName" dense></q-input>
</div> </div>
</div> </div>
</div> </div>
...@@ -85,7 +85,7 @@ ...@@ -85,7 +85,7 @@
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label">电话</div> <div class="stage_label">电话</div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.StuTel"></q-input> <q-input filled v-model="customObj.StuTel" dense></q-input>
</div> </div>
</div> </div>
</div> </div>
...@@ -93,7 +93,7 @@ ...@@ -93,7 +93,7 @@
<div class="customer_info_Stage"> <div class="customer_info_Stage">
<div class="stage_label">出生日期</div> <div class="stage_label">出生日期</div>
<div class="stage_value"> <div class="stage_value">
<q-input filled v-model="customObj.StuBirth" style="width:182px;" mask="date" label="出生日期"> <q-input filled v-model="customObj.StuBirth" dense style="width:182px;" mask="date" label="出生日期">
<template v-slot:append> <template v-slot:append>
<q-icon name="event" class="cursor-pointer"> <q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale"> <q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
...@@ -112,69 +112,62 @@ ...@@ -112,69 +112,62 @@
<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.cusfrom" :options="customFrom" option-label="Name" option-value="Id" <q-select filled v-model="customObj.cusfrom" dense :options="customFrom" option-label="Name" option-value="Id"
emit-value map-options label="客户来源" /> emit-value map-options label="客户来源" />
</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.CreateBy" disable @filter="filterEmployee" use-input <q-select filled v-model="customObj.CreateBy" dense disable @filter="filterEmployee" use-input
:options="myEmployeeList" option-label="EmployeeName" option-value="Id" emit-value map-options /> :options="myEmployeeList" option-label="EmployeeName" 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.StuStage" :options="customState" option-label="Name" option-value="Id" <q-select filled v-model="customObj.StuStage" dense :options="customState" option-label="Name" option-value="Id"
emit-value map-options label="客户状态" /> emit-value map-options label="客户状态" />
</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.JapanBaseInfo" :options="basicList" option-label="Name" <q-select filled v-model="customObj.JapanBaseInfo" dense :options="basicList" option-label="Name"
option-value="Id" emit-value map-options /> 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"></q-input> <q-input filled v-model="customObj.StuProfession" dense></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" :options="educationList" option-label="Name" <q-select filled v-model="customObj.StuEducation" dense :options="educationList" option-label="Name"
option-value="Id" emit-value map-options /> 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" :options="goalsList" option-label="Name" option-value="Id" <q-select filled v-model="customObj.StuPurpose" dense :options="goalsList" option-label="Name" option-value="Id"
emit-value map-options /> 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.StuChannel" :options="StuChannelList" option-label="Name" option-value="Id" <q-select filled v-model="customObj.StuChannel" dense :options="StuChannelList" option-label="Name" option-value="Id"
emit-value map-options /> emit-value map-options />
</div> </div>
</div> </div>
<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"></q-input> <q-input filled v-model="customObj.PlatformName" dense></q-input>
</div>
</div>
<div class="info_item">
<div class="item_label">协助人员</div>
<div class="item_value">
<q-select filled v-model="AssistPeople" :options="AssistDropList" option-label="Name" option-value="Id"
emit-value map-options />
</div> </div>
</div> </div>
<div class="info_item"> <div class="info_item">
...@@ -194,8 +187,7 @@ ...@@ -194,8 +187,7 @@
getGuestBasicsEnumList, getGuestBasicsEnumList,
getGuestEducationEnumList, getGuestEducationEnumList,
getGuestLearningGoalsEnumList, getGuestLearningGoalsEnumList,
GetStuChannelList, GetStuChannelList
GetAssistTypeList
} from '../../../api/sale/sale' } from '../../../api/sale/sale'
import { import {
queryEmployee queryEmployee
...@@ -249,7 +241,6 @@ ...@@ -249,7 +241,6 @@
//员工列表 //员工列表
employeeList: [], employeeList: [],
myEmployeeList: [], myEmployeeList: [],
AssistPeople:1,
StuChannelList: [], //收客渠道 StuChannelList: [], //收客渠道
AssistDropList: [] //协助人员 AssistDropList: [] //协助人员
} }
...@@ -261,13 +252,9 @@ ...@@ -261,13 +252,9 @@
this.queryGoalsList(); this.queryGoalsList();
this.getEmployeeList(); this.getEmployeeList();
this.GetStuChannelList(); this.GetStuChannelList();
this.GetAssistTypeList();
if (this.saveObj && this.saveObj.StuId > 0) { if (this.saveObj && this.saveObj.StuId > 0) {
this.customMsg.StuId = this.saveObj.StuId; this.customMsg.StuId = this.saveObj.StuId;
this.queryStuInfo(); this.queryStuInfo();
if(this.customMsg.AssistList&&this.customMsg.AssistList.length>0){
this.customMsg.AssistList[0].StuId = this.saveObj.StuId;
}
} }
}, },
mounted() { mounted() {
...@@ -275,10 +262,6 @@ ...@@ -275,10 +262,6 @@
methods: { methods: {
//保存学员信息 //保存学员信息
saveStu() { saveStu() {
if(this.customMsg.AssistList&&this.customMsg.AssistList.length>0){
this.customMsg.AssistList[0].AssistId = this.customObj.CreateBy;
this.customMsg.AssistList[0].AssistType = this.AssistPeople;
}
saveStudent(this.customObj).then(res => { saveStudent(this.customObj).then(res => {
if (res.Code == 1) { if (res.Code == 1) {
this.$q.notify({ this.$q.notify({
...@@ -312,14 +295,6 @@ ...@@ -312,14 +295,6 @@
} }
}) })
}, },
//获取协助人员
GetAssistTypeList(){
GetAssistTypeList({}).then(res => {
if(res.Code==1){
this.AssistDropList = res.Data;
}
})
},
//筛选员工 //筛选员工
filterEmployee(val, update, abort) { filterEmployee(val, update, abort) {
update(() => { update(() => {
...@@ -360,7 +335,21 @@ ...@@ -360,7 +335,21 @@
this.customObj = res.Data; this.customObj = res.Data;
} }
}); });
},
//新增协助人员
addAssist(){
let obj = {
Id:0,//编号
AssistId:1,//员工编号
AssistType:1,//类型
StuId:1,//学员编号
} }
this.customObj.AssistList.push(obj);
}, },
//删除协助人员
delAssist(index){
this.customObj.AssistList.splice(index,1);
}
}
} }
</script> </script>
\ No newline at end of file
<style> <style>
.Sysuser_Date .el-input__inner { .Student_Date .el-input__inner {
background: transparent !important; background: transparent !important;
border: 0 !important; border: 0 !important;
padding-right:0 !important;
height:28px!important;
} }
</style> </style>
<template> <template>
...@@ -14,7 +16,7 @@ ...@@ -14,7 +16,7 @@
</div> </div>
<template v-if="isShowAdd"> <template v-if="isShowAdd">
<div class="row wrap"> <div class="row wrap">
<q-input filled v-model="addMsg.ClassDate" ref="ClassDate" class="col-6 q-pb-lg q-pr-lg" mask="date" <q-input filled v-model="addMsg.ClassDate" dense ref="ClassDate" class="col-6 q-pb-lg q-pr-lg" mask="date"
label="预约日期"> label="预约日期">
<template v-slot:append> <template v-slot:append>
<q-icon name="event" class="cursor-pointer"> <q-icon name="event" class="cursor-pointer">
...@@ -24,17 +26,17 @@ ...@@ -24,17 +26,17 @@
</q-icon> </q-icon>
</template> </template>
</q-input> </q-input>
<div class="Sysuser_Date col-6"> <div class="Student_Date col-6">
<q-field filled class="q-pb-lg"> <q-field filled class="q-pb-lg" dense>
 <template v-slot:control>  <template v-slot:control>
<el-time-select v-model="addMsg.ClassTime" ref="ClassTime" style="width:50%" :picker-options="{ <el-time-select v-model="addMsg.ClassTime" size="small" ref="ClassTime" style="width:50%" :picker-options="{
start: '09:00', start: '09:00',
step: '00:15', step: '00:15',
end: '21:00', end: '21:00',
maxTime:addMsg.EndTime maxTime:addMsg.EndTime
}" placeholder="预约开始时间"> }" placeholder="预约开始时间">
</el-time-select> </el-time-select>
<el-time-select v-model="addMsg.EndTime" ref="EndTime" style="width:50%" :picker-options="{ <el-time-select v-model="addMsg.EndTime" size="small" dense ref="EndTime" style="width:50%" :picker-options="{
start: '09:00', start: '09:00',
step: '00:15', step: '00:15',
end: '21:00', end: '21:00',
...@@ -46,17 +48,17 @@ ...@@ -46,17 +48,17 @@
</div> </div>
</div> </div>
<div class="row wrap"> <div class="row wrap">
<q-select filled stack-label option-value="Name" option-label="Name" <q-select filled stack-label option-value="Name" dense option-label="Name"
@input="getTeacherChoose(addMsg.ClassContent)" v-model="addMsg.ClassContent" ref="ClassContent" @input="getTeacherChoose(addMsg.ClassContent)" v-model="addMsg.ClassContent" ref="ClassContent"
:options="ContentList" :rules="[val => !!val || '请选择主讲内容']" label="主讲内容" :dense="false" :options="ContentList" :rules="[val => !!val || '请选择主讲内容']" label="主讲内容"
class="col-6 q-pb-lg q-pr-lg" emit-value map-options /> class="col-6 q-pb-lg q-pr-lg" emit-value map-options />
<q-select filled stack-label option-value="TId" option-label="TeacherName" v-model="addMsg.TeacherId" <q-select filled stack-label option-value="TId" option-label="TeacherName" v-model="addMsg.TeacherId"
ref="TeacherId" :options="TeacherList" label="选择教师" :dense="false" class="col-6 q-pb-lg" emit-value ref="TeacherId" :options="TeacherList" label="选择教师" dense class="col-6 q-pb-lg" emit-value
map-options /> map-options />
</div> </div>
<div class="row wrap"> <div class="row wrap">
<q-select filled stack-label option-value="RoomId" option-label="RoomName" v-model="addMsg.ClassRoomId" <q-select filled stack-label option-value="RoomId" dense option-label="RoomName" v-model="addMsg.ClassRoomId"
ref="ClassRoomId" :options="ClassRoomList" label="关联教室" :dense="false" class="col-6 q-pb-lg q-pr-lg" ref="ClassRoomId" :options="ClassRoomList" label="关联教室" class="col-6 q-pb-lg q-pr-lg"
emit-value map-options /> emit-value map-options />
</div> </div>
<div class="row wrap" style="margin-bottom:10px;"> <div class="row wrap" style="margin-bottom:10px;">
......
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
@click="isShowAdd=false" /> @click="isShowAdd=false" />
<template v-if="isShowAdd"> <template v-if="isShowAdd">
<div class="row wrap"> <div class="row wrap">
<q-select filled option-value="SId" class="col-6 q-pb-lg q-pr-lg" option-label="SName" <q-select filled option-value="SId" dense class="col-6 q-pb-lg q-pr-lg" option-label="SName"
v-model="VisitMsg.School_Id" :options="schoolList" emit-value map-options label="到访校区" /> v-model="VisitMsg.School_Id" :options="schoolList" emit-value map-options label="到访校区" />
<q-input filled v-model="VisitMsg.Date" class="col-6 q-pb-lg" mask="date" label="日期"> <q-input filled v-model="VisitMsg.Date" dense class="col-6 q-pb-lg" mask="date" label="日期">
<template v-slot:append> <template v-slot:append>
<q-icon name="event" class="cursor-pointer"> <q-icon name="event" class="cursor-pointer">
<q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale"> <q-popup-proxy ref="qDateProxy1" transition-show="scale" transition-hide="scale">
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
</q-input> </q-input>
</div> </div>
<div class="row warp"> <div class="row warp">
<q-input filled mask="time" v-model="VisitMsg.VisitTime" :rules="['time']" class="col-6 q-pb-lg q-pr-lg"> <q-input filled mask="time" dense v-model="VisitMsg.VisitTime" :rules="['time']" class="col-6 q-pb-lg q-pr-lg">
<template v-slot:append> <template v-slot:append>
<q-icon name="access_time" class="cursor-pointer"> <q-icon name="access_time" class="cursor-pointer">
<q-popup-proxy transition-show="scale" transition-hide="scale"> <q-popup-proxy transition-show="scale" transition-hide="scale">
...@@ -34,12 +34,12 @@ ...@@ -34,12 +34,12 @@
</q-icon> </q-icon>
</template> </template>
</q-input> </q-input>
<q-select filled v-model="VisitMsg.ReceptionPersion" @filter="filterEmployee" class="col-6 q-pb-lg" <q-select filled v-model="VisitMsg.ReceptionPersion" dense @filter="filterEmployee" class="col-6 q-pb-lg"
:options="myEmployeeList" option-label="EmployeeName" use-input option-value="Id" emit-value map-options :options="myEmployeeList" option-label="EmployeeName" use-input option-value="Id" emit-value map-options
label="接待人" /> label="接待人" />
</div> </div>
<div class="row wrap"> <div class="row wrap">
<q-input filled v-model="VisitMsg.Remark" :rows="3" type="textarea" class="col-12 q-pb-lg" label="备注"> <q-input filled v-model="VisitMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg" label="备注">
</q-input> </q-input>
</div> </div>
...@@ -67,6 +67,10 @@ ...@@ -67,6 +67,10 @@
<div class="StuCom_Left">反馈</div> <div class="StuCom_Left">反馈</div>
<div class="StuCom_Inner">{{tItem.Feedback}} </div> <div class="StuCom_Inner">{{tItem.Feedback}} </div>
</div> </div>
<div class="StuCom_Remark">
<div class="StuCom_Left">是否到访</div>
<div class="StuCom_Inner">{{tItem.IsVisitStr}} </div>
</div>
</div> </div>
<div style="display:flex;margin-top:10px;"> <div style="display:flex;margin-top:10px;">
<div @click="delVisit(tItem.Id)" class="visit_delete text-negative">删除</div> <div @click="delVisit(tItem.Id)" class="visit_delete text-negative">删除</div>
...@@ -79,6 +83,10 @@ ...@@ -79,6 +83,10 @@
class="col-12 q-pb-lg" label="反馈"> class="col-12 q-pb-lg" label="反馈">
</q-input> </q-input>
</div> </div>
<div class="row wrap" style="margin-top:10px;width:300px;">
<q-radio v-model="feedBackMsg.IsVisit" :val="0" label="未到访" />
<q-radio v-model="feedBackMsg.IsVisit" :val="1" label="已到访" />
</div>
<div class="row wrap" style="float:right;margin-bottom:10px;"> <div class="row wrap" style="float:right;margin-bottom:10px;">
<q-btn label="保存" color="accent" size="sm" @click="SetFeedBack()" /> <q-btn label="保存" color="accent" size="sm" @click="SetFeedBack()" />
</div> </div>
...@@ -157,6 +165,7 @@ ...@@ -157,6 +165,7 @@
//反馈信息 //反馈信息
feedBackMsg: { feedBackMsg: {
Id: 0, //编号 Id: 0, //编号
IsVisit: 0, //到访状态(1-已到访,0-未到访)
Feedback: '' //反馈 Feedback: '' //反馈
} }
} }
...@@ -191,6 +200,7 @@ ...@@ -191,6 +200,7 @@
this.getList(); this.getList();
this.feedBackMsg.Id = 0; this.feedBackMsg.Id = 0;
this.feedBackMsg.Feedback = ""; this.feedBackMsg.Feedback = "";
this.feedBackMsg.IsVisit = 0;
this.isShowEdit = false; this.isShowEdit = false;
} }
}); });
...@@ -296,5 +306,4 @@ ...@@ -296,5 +306,4 @@
} }
}, },
} }
</script> </script>
\ No newline at end of file
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
</div> </div>
<template v-if="isShowAdd"> <template v-if="isShowAdd">
<div class="row wrap"> <div class="row wrap">
<q-input filled class="col-6 q-pb-lg q-pr-lg" v-model="yueMsg.AppointmentPoint" label="约访地点"></q-input> <q-input filled class="col-6 q-pb-lg q-pr-lg" dense v-model="yueMsg.AppointmentPoint" label="约访地点"></q-input>
<q-input filled v-model="yueMsg.AppointmentTime"> <q-input filled v-model="yueMsg.AppointmentTime" dense>
<template v-slot:prepend> <template v-slot:prepend>
<q-icon name="event" class="cursor-pointer"> <q-icon name="event" class="cursor-pointer">
<q-popup-proxy transition-show="scale" transition-hide="scale"> <q-popup-proxy transition-show="scale" transition-hide="scale">
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
</q-input> </q-input>
</div> </div>
<div class="row wrap"> <div class="row wrap">
<q-input filled v-model="yueMsg.Remark" :rows="3" type="textarea" class="col-12 q-pb-lg" label="备注"> <q-input filled v-model="yueMsg.Remark" dense :rows="3" type="textarea" class="col-12 q-pb-lg" label="备注">
</q-input> </q-input>
</div> </div>
<div class="row wrap" style="margin-bottom:10px;"> <div class="row wrap" style="margin-bottom:10px;">
......
...@@ -34,11 +34,12 @@ ...@@ -34,11 +34,12 @@
</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="width:300px;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="订单" />
<q-tab name="4" label="合同" /> <q-tab name="4" label="合同" />
<q-tab name="5" label="协同人员" />
</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">
...@@ -68,6 +69,9 @@ ...@@ -68,6 +69,9 @@
<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">
<student-Assit :save-obj="baseObj" @success="refreshStudentPage"></student-Assit>
</template>
</div> </div>
</div> </div>
</div> </div>
...@@ -96,6 +100,7 @@ ...@@ -96,6 +100,7 @@
import studentShiting from '../student/student-shiting'; import studentShiting from '../student/student-shiting';
import studentHetong from '../student/student-hetong'; import studentHetong from '../student/student-hetong';
import studentOrder from '../student/student-order'; import studentOrder from '../student/student-order';
import studentAssit from '../student/student-Assit';
export default { export default {
meta: { meta: {
title: "学员管理" title: "学员管理"
...@@ -108,7 +113,8 @@ ...@@ -108,7 +113,8 @@
studentGenjin, studentGenjin,
studentShiting, studentShiting,
studentHetong, studentHetong,
studentOrder studentOrder,
studentAssit
}, },
props: { props: {
saveObj: { saveObj: {
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<div class="col-2 q-table__title">我的客户</div> <div class="col-2 q-table__title">我的客户</div>
<q-space /> <q-space />
<div class="page-option"> <div class="page-option">
<q-btn color="accent" class="q-mr-md" size="md" icon="add" label="新增客户" @click="EditStudent(null)" /> <q-btn color="accent" size="md" icon="add" label="新增客户" @click="EditStudent(null)" />
</div> </div>
</template> </template>
<template v-slot:body-cell-StuIcon="props"> <template v-slot:body-cell-StuIcon="props">
......
<style> <style>
.Sysuser_Date .el-range-editor .el-range-input { .Sysuser_Date .el-input__inner {
background-color: transparent; background-color: transparent;
width: 100%; width: 100%;
border: none; border: none;
} }
.Sysuser_Date .el-range-input{
background-color: transparent;
}
</style> </style>
<template> <template>
<div class="page-body"> <div class="page-body">
......
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