Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
confucius
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
罗超
confucius
Commits
388d2162
Commit
388d2162
authored
Dec 14, 2021
by
罗超
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/luochao/confucius
# Conflicts: # src/components/schedul/schedul-visit.vue
parents
ed19de17
95134095
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
384 additions
and
107 deletions
+384
-107
sale.js
src/api/sale/sale.js
+26
-0
editOrder-form.vue
src/components/sale/editOrder-form.vue
+66
-11
schedul-visit.vue
src/components/schedul/schedul-visit.vue
+6
-32
student-Assit.vue
src/components/school/student/student-Assit.vue
+213
-0
student-left.vue
src/components/school/student/student-left.vue
+28
-39
student-shiting.vue
src/components/school/student/student-shiting.vue
+13
-11
student-visit.vue
src/components/school/student/student-visit.vue
+16
-7
student-yuefang.vue
src/components/school/student/student-yuefang.vue
+3
-3
studentRight-form.vue
src/components/school/student/studentRight-form.vue
+8
-2
stulist.vue
src/components/school/student/stulist.vue
+1
-1
student.vue
src/pages/school/student.vue
+4
-1
No files found.
src/api/sale/sale.js
View file @
388d2162
...
...
@@ -377,6 +377,14 @@ export function setStudyAboradOrderConfirm(data) {
});
}
// 同行下拉
export
function
getMyCustomerList
(
data
)
{
return
request
({
url
:
'/b2bcustomer/GetMyCustomerList'
,
method
:
'post'
,
data
});
}
// 获取收客渠道下拉
export
function
GetStuChannelList
(
data
)
{
return
request
({
...
...
@@ -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
});
}
src/components/sale/editOrder-form.vue
View file @
388d2162
...
...
@@ -68,16 +68,24 @@
class=
"col-12"
label=
"成交单价"
:rules=
"[val => !!val || '请填成交单价']"
/>
</
template
>
<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)"
/>
<!-- <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)" /> -->
<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"
>
<q-input
filled
stack-label
:dense=
"false"
v-model=
"OrderMsg.Unit_Price"
@
input=
"calcPrice()"
class=
"col-12"
label=
"成交单价"
:rules=
"[val => !!val || '请填成交单价']"
/>
</
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"
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=
"应收"
/>
<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"
label=
"客人来源"
/>
...
...
@@ -92,12 +100,23 @@
</q-item>
</
template
>
</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"
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"
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"
label=
"是否少价"
class=
"q-mb-md"
/>
<
!-- <
q-toggle :disable="(modityOrderType==2)" v-model="OrderMsg.IsLessPrice" :false-value="0" :true-value="1"
label="是否少价" class="q-mb-md" />
-->
<q-input
:disable=
"(modityOrderType==2)"
v-if=
"OrderMsg.IsLessPrice==1"
@
input=
"calcPrice()"
@
keyup
.
native=
"checkPrice(OrderMsg,'PerLessMoney')"
maxlength=
"10"
filled
stack-label
:dense=
"false"
v-model=
"OrderMsg.PerLessMoney"
class=
"col-12"
label=
"少价金额(每人)"
...
...
@@ -122,7 +141,8 @@
getOrderSourceEnumList
,
//获取订单来源 枚举
setClassOrder
,
//修改订单
queryChaClassInfo
,
GetSelectClassOrderList
//获取前置下拉
GetSelectClassOrderList
,
//获取前置下拉
getMyCustomerList
//同行下拉
}
from
'../../api/sale/sale'
import
{
queryEmployee
...
...
@@ -159,6 +179,9 @@
OrderMsg
:
{
ClassId
:
0
,
//班级编号
GuestNum
:
0
,
//人数
B2CRatio
:
0
,
B2CReNewRatio
:
0
,
CustomerId
:
0
,
//市场专员
Unit_Price
:
0
,
PreferPrice
:
0
,
OrderSource
:
0
,
...
...
@@ -193,6 +216,8 @@
CourseList
:
[],
//课程列表
courseObj
:
{},
//选择的课程
beforeOrderList
:
[],
//前置订单数据
myCustomerList
:[],
//同行列表
allCustomerList
:[],
//所有同行列表
}
},
created
()
{
...
...
@@ -205,6 +230,7 @@
this
.
getEmployee
();
this
.
initConfig
();
this
.
getSelectClass
();
this
.
getCustomerList
();
},
mounted
()
{
this
.
initData
()
...
...
@@ -244,7 +270,7 @@
if
(
temp
)
{
this
.
courseObj
=
temp
;
var
tempDiscountMoney
=
0
;
//优惠金额
var
tempSaleRemark
=
""
;
//备注
var
tempSaleRemark
=
`直客首次报名优惠比例
${
temp
.
B2CRatio
??
0
}
%
`
; //备注
//插班课时单价
var classHourPrice = temp.SellPrice / this.courseObj.ClassHours;
var chaBanPrice = Number(classHourPrice * (this.courseObj.ClassHours - this.OrderMsg.StartClassHours))
...
...
@@ -257,17 +283,17 @@
} else {
tempDiscountMoney = (temp.SellPrice * temp.CoursePriceList[0].PriceMoney) / 100;
}
tempSaleRemark
=
"单人报名优惠"
+
temp
.
CoursePriceList
[
0
].
PriceMoney
+
"%"
;
//
tempSaleRemark = "单人报名优惠" + temp.CoursePriceList[0].PriceMoney + "%";
} else {
tempDiscountMoney = item.CoursePriceList[0].PriceMoney;
tempSaleRemark
=
"单人报名优惠"
+
temp
.
CoursePriceList
[
0
].
PriceMoney
;
//
tempSaleRemark = "单人报名优惠" + temp.CoursePriceList[0].PriceMoney;
}
}
}
if (guestNum > 1) {
if (temp.CoursePriceList && temp.CoursePriceList.length > 0) {
if (temp.CoursePriceList[1].PriceType == 0) {
tempSaleRemark
=
"双人报名优惠"
+
temp
.
CoursePriceList
[
1
].
PriceMoney
+
"%"
;
//
tempSaleRemark = "双人报名优惠" + temp.CoursePriceList[1].PriceMoney + "%";
if (this.OrderMsg.IsChaBan == 1) {
tempDiscountMoney = (chaBanPrice * temp.CoursePriceList[1].PriceMoney) / 100;
} else {
...
...
@@ -275,7 +301,7 @@
}
} else {
tempDiscountMoney = item.CoursePriceList[1].PriceMoney;
tempSaleRemark
=
"双人报名优惠"
+
temp
.
CoursePriceList
[
1
].
PriceMoney
;
//
tempSaleRemark = "双人报名优惠" + temp.CoursePriceList[1].PriceMoney;
}
}
}
...
...
@@ -365,6 +391,9 @@
this.OrderMsg.UpOrderId = tempData.UpOrderId;
this.OrderMsg.DiscountMoney = tempData.DiscountMoney;
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.IsShowEditOrder = true;
}
...
...
@@ -388,6 +417,9 @@
this.OrderMsg.DiscountMoney = 0;
this.OrderMsg.PerDiscountMoney = 0;
this.OrderMsg.OrderType = this.orderType;
this.OrderMsg.B2CRatio = 0;
this.OrderMsg.B2CReNewRatio = 0;
this.OrderMsg.CustomerId=0;
if (this.OrderMsg.OrderType == 2) {
this.OrderMsg.OrderNature = 1;
}
...
...
@@ -409,6 +441,12 @@
} else {
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.calcPrice();
...
...
@@ -424,6 +462,17 @@
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() {
...
...
@@ -547,6 +596,12 @@
str = item[0].GuestName;
}
return str
},
getCustomerList(){
getMyCustomerList({}).then(res=>{
this.myCustomerList=res.Data
this.allCustomerList=res.Data
})
}
}
}
...
...
src/components/schedul/schedul-visit.vue
View file @
388d2162
...
...
@@ -422,7 +422,7 @@
>
<
template
v-slot:body-cell-Option=
"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
name=
"edit"
color=
"primary"
...
...
@@ -435,7 +435,9 @@
</
template
>
<
template
v-slot:body-cell-IsVisitStr=
"props"
>
<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>
</
template
>
</q-table>
...
...
@@ -448,9 +450,9 @@
</div>
</template>
<
script
>
import
{
getStudentPage
}
from
"../../api/school"
;
import
{
getGuestBasicsEnumList
}
from
"../../api/sale/sale"
;
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"
;
export
default
{
...
...
@@ -626,7 +628,6 @@ export default {
isShowAdd
:
true
,
//是否显示新增按钮【默认显示】
isShowEdit
:
true
//是否显示编辑按钮【默认显示】
},
rules
:
{
//表单必填验证
Name
:
[
...
...
@@ -768,33 +769,6 @@ export default {
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
()
{
this
.
addMsg
.
Id
=
0
;
this
.
addMsg
.
Name
=
""
;
...
...
src/components/school/student/student-Assit.vue
0 → 100644
View file @
388d2162
<
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
>
src/components/school/student/student-left.vue
View file @
388d2162
...
...
@@ -68,7 +68,7 @@
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
客户名称
</div>
<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>
...
...
@@ -85,7 +85,7 @@
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
电话
</div>
<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>
...
...
@@ -93,7 +93,7 @@
<div
class=
"customer_info_Stage"
>
<div
class=
"stage_label"
>
出生日期
</div>
<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
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
<q-popup-proxy
ref=
"qDateProxy1"
transition-show=
"scale"
transition-hide=
"scale"
>
...
...
@@ -112,69 +112,62 @@
<div
class=
"info_item"
>
<div
class=
"item_label"
>
客户来源
</div>
<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=
"客户来源"
/>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
创建人
</div>
<div
class=
"item_value"
>
<q-select
filled
v-model=
"customObj.CreateBy"
disable
@
filter=
"filterEmployee"
use-input
<q-select
filled
v-model=
"customObj.CreateBy"
d
ense
d
isable
@
filter=
"filterEmployee"
use-input
:options=
"myEmployeeList"
option-label=
"EmployeeName"
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.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=
"客户状态"
/>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
日语基础
</div>
<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
/>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
职业
</div>
<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
class=
"info_item"
>
<div
class=
"item_label"
>
学历
</div>
<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
/>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
学习目的
</div>
<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
/>
</div>
</div>
<div
class=
"info_item"
>
<div
class=
"item_label"
>
收客渠道
</div>
<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
/>
</div>
</div>
<div
class=
"info_item"
v-if=
"customObj.StuChannel==6"
>
<div
class=
"item_label"
>
第三方平台名称
</div>
<div
class=
"item_value"
>
<q-input
filled
v-model=
"customObj.PlatformName"
></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
/>
<q-input
filled
v-model=
"customObj.PlatformName"
dense
></q-input>
</div>
</div>
<div
class=
"info_item"
>
...
...
@@ -194,8 +187,7 @@
getGuestBasicsEnumList
,
getGuestEducationEnumList
,
getGuestLearningGoalsEnumList
,
GetStuChannelList
,
GetAssistTypeList
GetStuChannelList
}
from
'../../../api/sale/sale'
import
{
queryEmployee
...
...
@@ -249,7 +241,6 @@
//员工列表
employeeList
:
[],
myEmployeeList
:
[],
AssistPeople
:
1
,
StuChannelList
:
[],
//收客渠道
AssistDropList
:
[]
//协助人员
}
...
...
@@ -261,13 +252,9 @@
this
.
queryGoalsList
();
this
.
getEmployeeList
();
this
.
GetStuChannelList
();
this
.
GetAssistTypeList
();
if
(
this
.
saveObj
&&
this
.
saveObj
.
StuId
>
0
)
{
this
.
customMsg
.
StuId
=
this
.
saveObj
.
StuId
;
this
.
queryStuInfo
();
if
(
this
.
customMsg
.
AssistList
&&
this
.
customMsg
.
AssistList
.
length
>
0
){
this
.
customMsg
.
AssistList
[
0
].
StuId
=
this
.
saveObj
.
StuId
;
}
}
},
mounted
()
{
...
...
@@ -275,10 +262,6 @@
methods
:
{
//保存学员信息
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
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
...
...
@@ -312,14 +295,6 @@
}
})
},
//获取协助人员
GetAssistTypeList
(){
GetAssistTypeList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
){
this
.
AssistDropList
=
res
.
Data
;
}
})
},
//筛选员工
filterEmployee
(
val
,
update
,
abort
)
{
update
(()
=>
{
...
...
@@ -360,7 +335,21 @@
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
>
\ No newline at end of file
src/components/school/student/student-shiting.vue
View file @
388d2162
<
style
>
.S
ysuser
_Date
.el-input__inner
{
.S
tudent
_Date
.el-input__inner
{
background
:
transparent
!important
;
border
:
0
!important
;
padding-right
:
0
!important
;
height
:
28px
!important
;
}
</
style
>
<
template
>
...
...
@@ -14,7 +16,7 @@
</div>
<template
v-if=
"isShowAdd"
>
<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=
"预约日期"
>
<template
v-slot:append
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
...
...
@@ -24,17 +26,17 @@
</q-icon>
</
template
>
</q-input>
<div
class=
"S
ysuser
_Date col-6"
>
<q-field
filled
class=
"q-pb-lg"
>
<div
class=
"S
tudent
_Date col-6"
>
<q-field
filled
class=
"q-pb-lg"
dense
>
<
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',
step: '00:15',
end: '21:00',
maxTime:addMsg.EndTime
}" placeholder="预约开始时间">
</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',
step: '00:15',
end: '21:00',
...
...
@@ -46,17 +48,17 @@
</div>
</div>
<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"
: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
/>
<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
/>
</div>
<div
class=
"row wrap"
>
<q-select
filled
stack-label
option-value=
"RoomId"
option-label=
"RoomName"
v-model=
"addMsg.ClassRoomId"
ref=
"ClassRoomId"
:options=
"ClassRoomList"
label=
"关联教室"
:dense=
"false"
class=
"col-6 q-pb-lg q-pr-lg"
<q-select
filled
stack-label
option-value=
"RoomId"
dense
option-label=
"RoomName"
v-model=
"addMsg.ClassRoomId"
ref=
"ClassRoomId"
:options=
"ClassRoomList"
label=
"关联教室"
class=
"col-6 q-pb-lg q-pr-lg"
emit-value
map-options
/>
</div>
<div
class=
"row wrap"
style=
"margin-bottom:10px;"
>
...
...
src/components/school/student/student-visit.vue
View file @
388d2162
...
...
@@ -8,9 +8,9 @@
@
click=
"isShowAdd=false"
/>
<template
v-if=
"isShowAdd"
>
<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=
"到访校区"
/>
<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
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
<q-popup-proxy
ref=
"qDateProxy1"
transition-show=
"scale"
transition-hide=
"scale"
>
...
...
@@ -21,7 +21,7 @@
</q-input>
</div>
<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
>
<q-icon
name=
"access_time"
class=
"cursor-pointer"
>
<q-popup-proxy
transition-show=
"scale"
transition-hide=
"scale"
>
...
...
@@ -34,12 +34,12 @@
</q-icon>
</
template
>
</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
label=
"接待人"
/>
</div>
<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>
</div>
...
...
@@ -67,6 +67,10 @@
<div
class=
"StuCom_Left"
>
反馈
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
Feedback
}}
</div>
</div>
<div
class=
"StuCom_Remark"
>
<div
class=
"StuCom_Left"
>
是否到访
</div>
:
<div
class=
"StuCom_Inner"
>
{{
tItem
.
IsVisitStr
}}
</div>
</div>
</div>
<div
style=
"display:flex;margin-top:10px;"
>
<div
@
click=
"delVisit(tItem.Id)"
class=
"visit_delete text-negative"
>
删除
</div>
...
...
@@ -79,6 +83,10 @@
class=
"col-12 q-pb-lg"
label=
"反馈"
>
</q-input>
</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;"
>
<q-btn
label=
"保存"
color=
"accent"
size=
"sm"
@
click=
"SetFeedBack()"
/>
</div>
...
...
@@ -157,6 +165,7 @@
//反馈信息
feedBackMsg
:
{
Id
:
0
,
//编号
IsVisit
:
0
,
//到访状态(1-已到访,0-未到访)
Feedback
:
''
//反馈
}
}
...
...
@@ -191,6 +200,7 @@
this
.
getList
();
this
.
feedBackMsg
.
Id
=
0
;
this
.
feedBackMsg
.
Feedback
=
""
;
this
.
feedBackMsg
.
IsVisit
=
0
;
this
.
isShowEdit
=
false
;
}
});
...
...
@@ -296,5 +306,4 @@
}
},
}
</
script
>
</
script
>
\ No newline at end of file
src/components/school/student/student-yuefang.vue
View file @
388d2162
...
...
@@ -10,8 +10,8 @@
</div>
<template
v-if=
"isShowAdd"
>
<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
v-model=
"yueMsg.AppointmentTime"
>
<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"
dense
>
<template
v-slot:prepend
>
<q-icon
name=
"event"
class=
"cursor-pointer"
>
<q-popup-proxy
transition-show=
"scale"
transition-hide=
"scale"
>
...
...
@@ -37,7 +37,7 @@
</q-input>
</div>
<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>
</div>
<div
class=
"row wrap"
style=
"margin-bottom:10px;"
>
...
...
src/components/school/student/studentRight-form.vue
View file @
388d2162
...
...
@@ -34,11 +34,12 @@
</div>
<div
class=
"detail-travel"
>
<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=
"2"
label=
"操作"
/>
<q-tab
name=
"3"
label=
"订单"
/>
<q-tab
name=
"4"
label=
"合同"
/>
<q-tab
name=
"5"
label=
"协同人员"
/>
</q-tabs>
<div
class=
"operate_Content"
style=
"flex:1;"
>
<div
class=
"detail_Main"
>
...
...
@@ -68,6 +69,9 @@
<
template
v-if=
"ckedTab==4"
>
<student-hetong
:save-obj=
"baseObj"
@
success=
"refreshStudentPage"
></student-hetong>
</
template
>
<
template
v-if=
"ckedTab==5"
>
<student-Assit
:save-obj=
"baseObj"
@
success=
"refreshStudentPage"
></student-Assit>
</
template
>
</div>
</div>
</div>
...
...
@@ -96,6 +100,7 @@
import
studentShiting
from
'../student/student-shiting'
;
import
studentHetong
from
'../student/student-hetong'
;
import
studentOrder
from
'../student/student-order'
;
import
studentAssit
from
'../student/student-Assit'
;
export
default
{
meta
:
{
title
:
"学员管理"
...
...
@@ -108,7 +113,8 @@
studentGenjin
,
studentShiting
,
studentHetong
,
studentOrder
studentOrder
,
studentAssit
},
props
:
{
saveObj
:
{
...
...
src/components/school/student/stulist.vue
View file @
388d2162
...
...
@@ -12,7 +12,7 @@
<div
class=
"col-2 q-table__title"
>
我的客户
</div>
<q-space
/>
<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>
</
template
>
<
template
v-slot:body-cell-StuIcon=
"props"
>
...
...
src/pages/school/student.vue
View file @
388d2162
<
style
>
.Sysuser_Date
.el-
range-editor
.el-range-input
{
.Sysuser_Date
.el-
input__inner
{
background-color
:
transparent
;
width
:
100%
;
border
:
none
;
}
.Sysuser_Date
.el-range-input
{
background-color
:
transparent
;
}
</
style
>
<
template
>
<div
class=
"page-body"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment