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
dfdde186
Commit
dfdde186
authored
Dec 10, 2021
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
4c04faea
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
891 additions
and
54 deletions
+891
-54
peemanagement.js
src/api/sale/peemanagement.js
+11
-1
b2bCustomerInfo.vue
src/components/sale/b2bcustomerinfo/b2bCustomerInfo.vue
+31
-10
baseInfo.vue
src/components/sale/b2bcustomerinfo/baseInfo.vue
+135
-34
conRight.vue
src/components/sale/b2bcustomerinfo/conRight.vue
+9
-4
customer.vue
src/components/sale/b2bcustomerinfo/customer.vue
+265
-0
log.vue
src/components/sale/b2bcustomerinfo/log.vue
+6
-4
order.vue
src/components/sale/b2bcustomerinfo/order.vue
+433
-0
b2bcustomlist.vue
src/components/sale/b2bcustomlist.vue
+1
-1
No files found.
src/api/sale/peemanagement.js
View file @
dfdde186
...
@@ -206,4 +206,14 @@ export function getLogList(data) {
...
@@ -206,4 +206,14 @@ export function getLogList(data) {
data
data
})
})
}
}
/**
\ No newline at end of file
* 获取同业客户阶段列表
*
*/
export
function
getCustomerStuStageStatistics
(
data
)
{
return
request
({
url
:
'/B2BCustomer/GetCustomerStuStageStatistics'
,
method
:
'post'
,
data
})
}
\ No newline at end of file
src/components/sale/b2bcustomerinfo/b2bCustomerInfo.vue
View file @
dfdde186
...
@@ -4,21 +4,27 @@
...
@@ -4,21 +4,27 @@
<div
class=
"info-head flex items-center"
>
<div
class=
"info-head flex items-center"
>
<div
class=
"flex items-center"
>
<div
class=
"flex items-center"
>
<q-img
:src=
"detailData.WeChatPhoto"
:ratio=
"1"
width=
"60px"
class=
"q-mr-md"
/>
<q-img
:src=
"detailData.WeChatPhoto"
:ratio=
"1"
width=
"60px"
class=
"q-mr-md"
/>
{{
detailData
.
WeChatName
}}
<div>
<div
class=
"text-weight-thin"
style=
"font-size:10px"
>
微信名
</div>
<div
class=
"text-h6"
>
{{
detailData
.
WeChatName
}}
</div>
</div>
</div>
</div>
<q-space
/>
<q-space
/>
<q-btn
color=
"accent"
size=
"sm"
class=
"q-mr-md"
icon=
"swap_horiz"
label=
"转移"
/>
<q-btn
color=
"accent"
size=
"sm"
class=
"q-mr-md"
icon=
"swap_horiz"
label=
"转移"
/>
</div>
</div>
<div
class=
"info-content"
>
<div
class=
"info-content"
>
<div
class=
"detail-info"
>
<div
class=
"detail-info"
>
<baseInfo
:Data=
"detailData"
></baseInfo>
<baseInfo
:Data=
"detailData"
@
confirm=
"saveBaseInfo"
></baseInfo>
</div>
</div>
<div
class=
"detail-log"
>
<div
class=
"detail-log"
>
<right
:Id=
"rowId"
></right>
<right
:Id=
"rowId"
></right>
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"dialog-out-close"
@
click=
"closeAuditCustomerForm"
<div
class=
"dialog-out-close"
@
click=
"closeAuditCustomerForm"
style=
"height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;"
>
style=
"height:40px !important;border-top-left-radius: 4px !important;border-bottom-left-radius: 4px !important;"
>
...
@@ -28,7 +34,8 @@
...
@@ -28,7 +34,8 @@
</
template
>
</
template
>
<
script
>
<
script
>
import
{
import
{
GetCustomer
GetCustomer
,
SetCustomer
}
from
"../../../api/sale/peemanagement"
;
}
from
"../../../api/sale/peemanagement"
;
import
baseInfo
from
'./baseInfo.vue'
import
baseInfo
from
'./baseInfo.vue'
import
right
from
'./conRight.vue'
import
right
from
'./conRight.vue'
...
@@ -125,6 +132,21 @@
...
@@ -125,6 +132,21 @@
this
.
detailData
.
EnterpriseName
=
''
;
this
.
detailData
.
EnterpriseName
=
''
;
}
}
},
},
saveBaseInfo
(
obj
){
this
.
detailData
[
obj
.
field
]
=
obj
.
val
SetCustomer
(
this
.
detailData
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
"iconfont icon-chenggong"
,
color
:
"accent"
,
timeout
:
2000
,
message
:
"数据保存成功!"
,
position
:
"top"
,
});
this
.
$emit
(
"success"
);
}
})
}
},
},
}
}
...
@@ -135,10 +157,10 @@
...
@@ -135,10 +157,10 @@
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
width
:
1010px
;
width
:
1010px
;
height
:
100%
;
height
:
calc
(
100vh
-
520px
)
;
padding
:
15px
17px
0
17px
;
padding
:
15px
17px
0
17px
;
background-color
:
#f4f4f6
;
background-color
:
#f4f4f6
;
overflow
:
hidden
;
overflow
:
auto
;
box-sizing
:
border-box
;
box-sizing
:
border-box
;
.info-head
{
.info-head
{
...
@@ -161,7 +183,7 @@
...
@@ -161,7 +183,7 @@
width
:
350px
;
width
:
350px
;
height
:
100%
;
height
:
100%
;
margin-right
:
13px
;
margin-right
:
13px
;
background
:
#fff
;
background
-color
:
#fff
;
border-radius
:
8px
8px
0
0
;
border-radius
:
8px
8px
0
0
;
}
}
...
@@ -170,8 +192,7 @@
...
@@ -170,8 +192,7 @@
flex-grow
:
1
;
flex-grow
:
1
;
display
:
flex
;
display
:
flex
;
flex-direction
:
column
;
flex-direction
:
column
;
padding-top
:
28px
;
background-color
:
#fff
;
background
:
#fff
;
border-radius
:
8px
8px
0
0
;
border-radius
:
8px
8px
0
0
;
overflow
:
hidden
;
overflow
:
hidden
;
}
}
...
...
src/components/sale/b2bcustomerinfo/baseInfo.vue
View file @
dfdde186
<
template
>
<
template
>
<div
class=
"q-pa-md"
>
<div
class=
"q-pa-md"
>
<div
class=
"text-h6"
>
基础资料
</div>
<div
class=
"text-h6"
>
基础资料
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<!-- 同业名称 -->
<div
class=
"q-my-sm"
v-if=
"editField=='CustomerName'"
>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
同业名称
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('CustomerName',Data.CustomerName,true)"
></q-btn>
</div>
</div>
<q-input
outlined
dense
v-model=
"Data.CustomerName"
ref=
"CustomerName"
:rules=
"[val => !!val || '请输入同业名称']"
></q-input>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('CustomerName')"
>
<span>
同业名称
</span>
<span>
同业名称
</span>
<span>
{{
Data
.
CustomerName
}}
</span>
<span>
{{
Data
.
CustomerName
}}
</span>
</div>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<!-- 性别 -->
<div
class=
"q-my-sm"
v-if=
"editField=='Sex'"
>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
性别
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('Sex',Data.Sex)"
></q-btn>
</div>
</div>
<q-select
outlined
dense
v-model=
"Data.Sex"
map-options
emit-value
:options=
"sexOptions"
/>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('Sex')"
>
<span>
性别
</span>
<span
v-if=
"Data.Sex==1"
>
男
</span>
<span
v-if=
"Data.Sex==2"
>
女
</span>
</div>
<!-- 电话 -->
<div
class=
"q-my-sm"
v-if=
"editField=='ContactNumber'"
>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
电话
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('ContactNumber',Data.ContactNumber,true)"
></q-btn>
</div>
</div>
<q-input
outlined
dense
v-model=
"Data.ContactNumber"
ref=
"ContactNumber"
:rules=
"[val => !!val || '请输入电话']"
></q-input>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('ContactNumber')"
>
<span>
电话
</span>
<span>
电话
</span>
<span>
{{
Data
.
ContactNumber
}}
</span>
<span>
{{
Data
.
ContactNumber
}}
</span>
</div>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<!-- 类型 -->
<div
class=
"q-my-sm"
v-if=
"editField=='CustomerType'"
>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
类型
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('CustomerType',Data.CustomerType)"
></q-btn>
</div>
</div>
<q-select
outlined
dense
v-model=
"Data.CustomerType"
map-options
emit-value
:options=
"options"
:rules=
"[val => !!val || '请选择类型']"
/>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('CustomerType')"
>
<span>
类型
</span>
<span>
类型
</span>
<span
v-if=
"Data.CustomerType==1"
>
企业
</span>
<span
v-if=
"Data.CustomerType==1"
>
企业
</span>
<span
v-if=
"Data.CustomerType==2"
>
学校
</span>
<span
v-if=
"Data.CustomerType==2"
>
学校
</span>
</div>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<!-- 企业/学校名称 -->
<div
class=
"q-my-sm"
v-if=
"editField=='EnterpriseName'"
>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
企业/学校名称
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('EnterpriseName',Data.EnterpriseName)"
></q-btn>
</div>
</div>
<q-input
outlined
dense
v-model=
"Data.EnterpriseName"
:rules=
"[val => !!val || '请输入名称']"
></q-input>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('EnterpriseName')"
>
<span>
企业/学校名称
</span>
<span>
企业/学校名称
</span>
<span>
{{
Data
.
EnterpriseName
}}
</span>
<span>
{{
Data
.
EnterpriseName
}}
</span>
</div>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<!-- 账号 -->
<span>
客人数量
</span>
<div
class=
"q-my-sm"
v-if=
"editField=='Account'"
>
<span>
{{
Data
.
StuNum
}}
</span>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
账号
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('Account',Data.Account)"
></q-btn>
</div>
</div>
<q-input
outlined
dense
v-model=
"Data.Account"
:rules=
"[val => !!val || '请输入账号']"
></q-input>
</div>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<div
class=
"flex justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('Account')"
>
<span>
订单数量
</span>
<span>
账号
</span>
<span>
{{
Data
.
OrderNum
}}
</span>
<span>
{{
Data
.
Account
}}
</span>
</div>
</div>
<div
class=
"flex justify-between items-center q-my-lg"
>
<!-- 详细地址 -->
<span>
销售额
</span>
<div
class=
"q-my-sm"
v-if=
"editField=='Address'"
>
<span>
{{
Data
.
OrderSales
}}
</span>
<div
class=
"flex justify-between items-center q-mb-sm"
>
<span>
详细地址
</span>
<div>
<q-btn
size=
"sm"
text-color=
"primary"
label=
"取消"
@
click=
"showEdit('')"
></q-btn>
<q-btn
size=
"sm"
color=
"primary"
label=
"确定"
class=
"q-ml-sm"
@
click=
"save('Address',Data.Address)"
></q-btn>
</div>
</div>
<q-input
outlined
dense
v-model=
"Data.Address"
></q-input>
</div>
</div>
<div
class=
"flex
justify-between items-center q-my-lg
"
>
<div
class=
"flex
no-wrap justify-between items-center q-my-lg"
v-else
@
click=
"showEdit('Address')
"
>
<span
>
审批状态
</span>
<span
style=
"white-space:nowrap"
>
详细地址
</span>
<span
>
{{
Data
.
ApproveStateStr
}}
</span>
<span
style=
"max-width:60%"
class=
"ellepsis"
>
{{
Data
.
Address
}}
</span>
</div>
</div>
<!-- OpenId -->
<div
class=
"flex justify-between items-center q-my-lg"
>
<div
class=
"flex justify-between items-center q-my-lg"
>
<span>
市场人员
</span>
<span>
OpenId
</span>
<span
>
{{
Data
.
CreateByName
}}
</span>
<span
class=
"text-grey-6"
>
{{
Data
.
OpenId
}}
</span>
</div>
</div>
<!-- UnionId -->
<div
class=
"flex justify-between items-center q-my-lg"
>
<div
class=
"flex justify-between items-center q-my-lg"
>
<span>
加入时间
</span>
<span>
UnionId
</span>
<span
>
{{
Data
.
CreateTimeStr
}}
</span>
<span
class=
"text-grey-6"
>
{{
Data
.
UnionId
}}
</span>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
...
@@ -55,24 +132,48 @@
...
@@ -55,24 +132,48 @@
},
},
data
()
{
data
()
{
return
{
return
{
detailData
:{}
editField
:
""
,
}
options
:
[{
},
label
:
"企业"
,
watch
:{
value
:
1
,
Data
:{
},
{
handler
(
val
){
label
:
"学校"
,
console
.
log
(
60
,
val
)
value
:
2
,
},
}],
deep
:
true
sexOptions
:
[{
label
:
"男"
,
value
:
1
,
},
{
label
:
"女"
,
value
:
2
,
}]
}
}
},
},
created
()
{},
mounted
()
{
console
.
log
(
67
,
this
.
Data
)
},
methods
:
{
methods
:
{
showEdit
(
field
)
{
this
.
editField
=
field
},
save
(
field
,
val
,
Validate
=
false
){
if
(
Validate
){
this
.
$refs
[
field
].
validate
();
if
(
this
.
$refs
[
field
].
hasError
)
return
}
const
obj
=
{
field
,
val
}
this
.
$emit
(
"confirm"
,
obj
)
this
.
editField
=
''
},
},
},
}
}
</
script
>
</
script
>
<
style
>
.ellepsis
{
white-space
:
nowrap
;
overflow
:
hidden
;
text-overflow
:
ellipsis
;
}
</
style
>
src/components/sale/b2bcustomerinfo/conRight.vue
View file @
dfdde186
...
@@ -3,22 +3,27 @@
...
@@ -3,22 +3,27 @@
<q-tabs
<q-tabs
v-model=
"tabs"
v-model=
"tabs"
active-color=
"primary"
active-color=
"primary"
align=
"left"
style=
"width:350px;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-tabs>
</q-tabs>
<div
class=
"q-m
y-md
"
>
<div
class=
"q-m
b-lg
"
>
<log
:Id=
"Id"
v-if=
"tabs===1"
></log>
<log
:Id=
"Id"
v-if=
"tabs===1"
></log>
<customer
:Id=
"Id"
v-if=
"tabs===2"
></customer>
<order
:Id=
"Id"
v-if=
"tabs===3"
></order>
</div>
</div>
</div>
</div>
</
template
>
</
template
>
<
script
>
<
script
>
import
log
from
'./log.vue'
import
log
from
'./log.vue'
import
customer
from
'./customer'
import
order
from
'./order'
export
default
{
export
default
{
components
:
{
log
},
components
:
{
log
,
customer
,
order
},
props
:
{
props
:
{
Id
:
{
Id
:
{
type
:
Number
,
type
:
Number
,
...
...
src/components/sale/b2bcustomerinfo/customer.vue
0 → 100644
View file @
dfdde186
<
template
>
<div
class=
"b2bcustomer"
>
<div
class=
"full-width flex no-wrap items-center q-mb-sm"
>
<q-tabs
v-model=
"msg.StuStage"
active-color=
"primary"
dense
outside-arrows
align=
"left"
style=
"width:70%"
@
input=
"getStudent"
>
<q-tab
v-for=
"(item, index) in stagelist"
:key=
"index"
:name=
"item.StuStage"
>
{{
item
.
StuStageName
}}
(
{{
item
.
StuNum
}}
)
</q-tab>
</q-tabs>
<q-input
outlined
dense
v-model=
"msg.StuName"
label=
"昵称"
@
input=
"getStudent"
/>
</div>
<q-table
:pagination=
"msg"
:loading=
"loading"
no-data-label=
"暂无相关数据"
flat
class=
"sticky-tow-column-table"
separator=
"none"
:data=
"list"
:columns=
"columns"
row-key=
"Id"
>
<template
v-slot:body-cell-StuIcon=
"props"
>
<q-td
auto-width
:props=
"props"
>
<q-avatar
size=
"md"
v-if=
"props.value"
>
<img
:src=
"props.value"
/>
</q-avatar>
<q-avatar
size=
"md"
color=
"teal-10"
text-color=
"white"
v-if=
"!props.value"
>
{{
props
.
row
.
StuName
.
substring
(
0
,
1
)
}}
</q-avatar
>
</q-td>
</
template
>
<
template
v-slot:body-cell-StuName=
"props"
>
<q-td
:props=
"props"
>
<div
class=
"text-blue cursor-pointer"
@
click=
"getStuRight(props.row)"
>
{{
props
.
value
}}
</div>
</q-td>
</
template
>
<
template
v-slot:body-cell-StuSex=
"props"
>
<q-td
:props=
"props"
>
<q-badge
:color=
"props.value == 1 ? 'negative' : 'primary'"
:label=
"props.value == 1 ? '女' : '男'"
/>
</q-td>
</
template
>
<
template
v-slot:body-cell-Status=
"props"
>
<q-td
:props=
"props"
>
<q-toggle
size=
"md"
color=
"primary"
:false-value=
"1"
:true-value=
"0"
v-model=
"props.row.Status"
title=
"注意:关闭后,学员将无法正常使用."
@
input=
"deleteStudentInfo(props.row)"
/>
</q-td>
</
template
>
<
template
v-slot:bottom
>
<q-pagination
class=
"full-width justify-end"
v-model=
"msg.pageIndex"
color=
"primary"
:max=
"pageCount"
:input=
"true"
@
input=
"changePage"
/>
</
template
>
</q-table>
<stuDetail
v-if=
"isShowStuRight"
:save-obj=
"stuOption"
@
close=
"closeStuForm"
></stuDetail>
</div>
</template>
<
script
>
import
{
getStudentPage
}
from
"../../../api/school"
;
import
{
getCustomerStuStageStatistics
}
from
"../../../api/sale/peemanagement"
;
import
stuDetail
from
"../../../components/school/student/studentRight-form"
;
export
default
{
components
:
{
stuDetail
},
props
:
{
Id
:
{
type
:
Number
,
default
:
0
}
},
data
()
{
return
{
loading
:
false
,
list
:
[],
pageCount
:
0
,
columns
:
[
{
name
:
"StuIcon"
,
label
:
""
,
field
:
"StuIcon"
,
align
:
"left"
},
{
name
:
"StuName"
,
required
:
true
,
label
:
"昵称"
,
align
:
"left"
,
field
:
row
=>
row
.
StuName
},
{
name
:
"StuSex"
,
label
:
"性别"
,
field
:
"StuSex"
,
align
:
"left"
},
{
name
:
"StuBirthStr"
,
label
:
"出生日期"
,
field
:
"StuBirthStr"
,
align
:
"left"
},
{
name
:
"StuTel"
,
label
:
"手机号码"
,
field
:
"StuTel"
,
align
:
"left"
},
{
name
:
"CreateTypeStr"
,
label
:
"客户来源"
,
field
:
"CreateTypeStr"
,
align
:
"left"
},
{
name
:
"StuStageName"
,
label
:
"客户阶段"
,
field
:
"StuStageName"
,
align
:
"left"
},
{
name
:
"CreateTimeStr"
,
label
:
"创建时间"
,
field
:
"CreateTimeStr"
,
align
:
"left"
}
// {
// name: "CreateByName",
// label: "负责人",
// align: "left",
// field: "CreateByName"
// }
],
msg
:
{
pageIndex
:
1
,
pageSize
:
10
,
rowsPerPage
:
10
,
StuName
:
""
,
StuTel
:
""
,
Status
:
"-1"
,
School_Id
:
0
,
CustomerId
:
0
,
StuStage
:
0
},
stagelist
:
[],
stuOption
:
{},
isShowStuRight
:
false
};
},
methods
:
{
getStudent
()
{
this
.
msg
.
CustomerId
=
this
.
Id
;
this
.
loading
=
true
;
getStudentPage
(
this
.
msg
)
.
then
(
res
=>
{
this
.
loading
=
false
;
this
.
list
=
res
.
Data
.
PageData
;
this
.
pageCount
=
res
.
Data
.
PageCount
;
})
.
catch
(()
=>
{
this
.
loading
=
false
;
});
},
getStage
()
{
getCustomerStuStageStatistics
({
CustomerId
:
this
.
Id
}).
then
(
res
=>
{
this
.
stagelist
=
res
.
Data
;
const
total
=
res
.
Data
.
reduce
((
pre
,
cur
)
=>
{
return
cur
.
StuNum
+
pre
;
},
0
);
const
obj
=
{
StuStage
:
0
,
StuStageName
:
"全部"
,
StuNum
:
total
};
this
.
stagelist
.
unshift
(
obj
);
console
.
log
(
"tag"
,
this
.
stagelist
);
});
},
changePage
(
val
)
{
this
.
msg
.
pageIndex
=
val
;
this
.
getStudent
();
},
closeStuForm
()
{
this
.
isShowStuRight
=
false
;
},
//点击学生姓名弹出
getStuRight
(
obj
)
{
if
(
obj
)
{
this
.
stuOption
=
obj
;
}
else
{
this
.
stuOption
=
{};
}
this
.
isShowStuRight
=
true
;
}
},
mounted
()
{
this
.
getStudent
();
this
.
getStage
();
}
};
</
script
>
<
style
lang=
"scss"
>
.
b2bcustomer
:
:-
webkit-scrollbar
{
width
:
5px
;
height
:
5px
;
}
.
b2bcustomer
:
:-
webkit-scrollbar-track
{
background
:
#fff
;
border-radius
:
2px
;
}
.
b2bcustomer
:
:-
webkit-scrollbar-thumb
{
background
:
#444
;
border-radius
:
10px
;
}
.
b2bcustomer
:
:-
webkit-scrollbar-thumb
:
hover
{
background
:
#999
;
}
.
b2bcustomer
:
:-
webkit-scrollbar-corner
{
background
:
#204754
;
}
</
style
>
src/components/sale/b2bcustomerinfo/log.vue
View file @
dfdde186
<
template
>
<
template
>
<div>
<div>
<q-timeline
color=
"secondary"
v-if=
"logList.length>
=
0"
>
<q-timeline
color=
"secondary"
v-if=
"logList.length>0"
>
<q-timeline-entry
v-for=
"(item,index) in logList"
:key=
"index"
:title=
"item.CreateByName"
>
<q-timeline-entry
v-for=
"(item,index) in logList"
:key=
"index"
:title=
"item.CreateByName"
>
<template
#
subtitle
>
<template
#
subtitle
>
<div>
<div>
<span>
{{
item
.
DayStr
}}
</span><span
class=
"q-ml-md"
>
{{
item
.
TimeStr
}}
</span><span
class=
"q-ml-md"
v-if=
"item.WeekDay"
>
周
{{
item
.
WeekDay
}}
</span>
<span>
{{
item
.
DayStr
}}
</span><span
class=
"q-ml-md"
>
{{
item
.
TimeStr
}}
</span><span
class=
"q-ml-md"
v-if=
"item.WeekDay"
>
{{
item
.
WeekDay
}}
</span>
</div>
</div>
</
template
>
</
template
>
<div>
<div>
...
@@ -12,10 +12,12 @@
...
@@ -12,10 +12,12 @@
</div>
</div>
</q-timeline-entry>
</q-timeline-entry>
</q-timeline>
</q-timeline>
<div
class=
"flex justify-center q-mt-md text-gray-4"
v-if=
"logList.length==0"
>
暂无操作记录
</div>
<div
class=
"flex justify-end q-mt-md"
>
<div
class=
"flex justify-end q-mt-md"
>
<q-pagination
v-model=
"logMsg.pageIndex"
:max=
"pageCount"
input
color=
"primary"
@
input=
"changePage"
v-if=
"logList.length>
=
0"
/>
<q-pagination
v-model=
"logMsg.pageIndex"
:max=
"pageCount"
input
color=
"primary"
@
input=
"changePage"
v-if=
"logList.length>0"
/>
</div>
</div>
</div>
</div>
</template>
</template>
...
...
src/components/sale/b2bcustomerinfo/order.vue
0 → 100644
View file @
dfdde186
<
template
>
<div
class=
"page-body myOrder q-pb-lg"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row "
>
<div
class=
"col-5"
>
<q-input
@
input=
"resetSearch"
dense
clearable
outlined
v-model=
"msg.OrderId"
label=
"订单号"
@
clear=
"resetSearch"
maxlength=
"10"
/>
</div>
<div
class=
"col-7 row justify-end items-center"
>
<q-toggle
v-model=
"msg.Q_NotCollect"
label=
"只看款未收齐订单"
false-value=
"0"
true-value=
"1"
@
input=
"resetSearch"
/>
<div
class=
"q-ml-md"
>
<q-btn
color=
"accent"
size=
"sm"
label=
"导出"
@
click=
"goexport()"
/>
</div>
</div>
</div>
</div>
<div
class=
"row wrap q-gutter-xs"
v-if=
"data.Statistics"
>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
应收款
</span>
<span>
{{
data
.
Statistics
.
PreferPrice
?
data
.
Statistics
.
PreferPrice
:
0
}}
</span>
</div>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
实收款
</span>
<span>
{{
data
.
Statistics
.
Income
}}
</span>
</div>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
待收款
</span>
<span
style=
"color: #F72E52"
>
{{
data
.
Statistics
.
DueInMoney
}}
</span>
</div>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
收客人数
</span>
<span
style=
"color:#2961FE;"
>
{{
data
.
Statistics
.
GuestNum
}}
人
</span>
</div>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
取消人数
</span>
<span>
{{
data
.
Statistics
.
CancelNum
}}
人
</span>
</div>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
提成金额
</span>
<span>
{{
data
.
Statistics
.
CommissionMoney
}}
</span>
</div>
<div
class=
"col-3 stics"
>
<span
class=
"stics-name"
>
额外奖励
</span>
<span>
{{
data
.
Statistics
.
ExtraRewardMoney
}}
</span>
</div>
</div>
<div
class=
"row col"
style=
"justify-content: flex-end"
>
<div
class=
"row tis"
>
<div
class=
"tis-k"
style=
"background: #2961FE"
></div>
<span>
已打单
</span>
</div>
<div
class=
"row tis"
>
<div
class=
"tis-k"
style=
"background: #02C499"
></div>
<span>
平台出纳已审核
</span>
</div>
<div
class=
"row tis"
>
<div
class=
"tis-k"
style=
"background: #F28C1D"
></div>
<span>
银行出纳已审核
</span>
</div>
<div
class=
"row tis"
>
<div
class=
"tis-k"
style=
"background: #3FC4FF"
></div>
<span>
已通过
</span>
</div>
</div>
<div
class=
"page-content"
>
<orderlist
:dataList=
"data.List"
:authObj=
"authObj"
@
success=
"refreshClassOrder"
:modityOrderType=
"3"
ref=
"orderL"
>
</orderlist>
<div
class=
"row"
style=
"justify-content: flex-end;padding: 5px 20px"
>
<q-pagination
v-model=
"msg.pageIndex"
:max=
"pageCount"
@
input=
"changePage"
class=
"full-width justify-end"
color=
"primary"
:input=
"true"
>
</q-pagination>
</div>
</div>
<classinfo-form
v-if=
"isShowClassInfo"
:seting-obj=
"classObjOption"
@
close=
"closeClass"
@
success=
"refreshClassOrder"
>
</classinfo-form>
</div>
</
template
>
<
script
>
import
{
getMyOrderStatisticsPageList
,
//获取订单列表
getOrderStateEnumList
//订单状态
}
from
'../../../api/sale/sale'
;
import
{
queryCourseDropdownList
,
getCourseSubject
}
from
'../../../api/course/index'
import
myOrderForm
from
'../../../components/sale/myOrder-form'
import
classinfoForm
from
'../../../components/course/classinfo-form'
;
import
orderlist
from
'../../../components/sale/orderlist'
import
{
queryEmployee
}
from
'../../../api/users/user'
;
import
{
EduDownLoad
,
}
from
'../../../api/common/common'
;
export
default
{
props
:{
Id
:{
type
:
Number
,
default
:
0
}
},
components
:
{
myOrderForm
,
classinfoForm
,
orderlist
},
data
()
{
return
{
dialog
:
false
,
data
:
{},
loading
:
false
,
dateList
:
[],
//报名时间
dateList2
:
[],
//开班时间
msg
:
{
pageIndex
:
1
,
pageSize
:
8
,
OrderId
:
''
,
//订单号
GuestName
:
''
,
//客人名称
ClassName
:
''
,
//班级名称
CouseId
:
0
,
//课程id
StartTime
:
''
,
//报名开始时间
EndTime
:
''
,
//报名结束时间
OPStartTime
:
''
,
//开班开始时间
OPEndTime
:
''
,
//开班结束时间
Q_NotCollect
:
'0'
,
//查询未收齐 1是 0否
OrderState
:
0
,
//订单状态 枚举
Q_OrderState
:
1
,
//查询 1正常订单 2取消订单 (默认传1 如果 选择了订单状态 则传 0)
Q_OrderBy
:
2
,
//写死 =2
PlatformTax
:
0
,
//平台税金
EnterID
:
''
,
//业务员id
ClassNo
:
''
,
//班号
HelpEnterId
:
''
,
//关联教师
CourseSubject
:
""
,
//所属科目
CustomerId
:
0
},
//订单状态
OrderStateList
:
[],
pageCount
:
0
,
CourseList
:
[],
//关联课程下拉数据
classObjOption
:
null
,
isShowClassInfo
:
false
,
//是否显示课程信息
showone
:
false
,
//权限判断
authObj
:
{
isShowGuestBtn
:
0
,
//显示新增学员名单按钮
isShowFinanceBtn
:
false
,
//显示财务单据按钮
isShowTransOrder
:
false
,
//显示转交订单按钮
isShowSaleRemark
:
false
,
//显示修改销售备注
isShowBackClass
:
false
,
//显示退课按钮
isShowRenewClass
:
false
,
//显示续课按钮
isShowEdit
:
false
,
//不显示修改按钮
isShowBackClass
:
false
,
//不显示退课
isShowRenewClass
:
false
,
//不显示续课
},
EmployeeList
:
[],
//业务员
AllemployeeList
:
[],
TeacherList
:
[],
//关联教师
AllTeacherList
:
[],
CourseSubjectList
:
[],
//科目列表
}
},
created
()
{
if
(
this
.
$route
.
query
.
OrderId
)
{
this
.
msg
.
OrderId
=
this
.
$route
.
query
.
OrderId
;
}
// let nowDay = new Date();
// var year = nowDay.getFullYear(); //年
// var month = nowDay.getMonth() + 1; //月
// var day = nowDay.getDate(); //日
// var currentDay = year + '-' + month + '-' + day;
// this.msg.StartTime = currentDay
// if (this.$route.query.StartTime) {
// this.msg.StartTime = this.$route.query.StartTime + '-01';
// }
// if (this.$route.query.EndTime) {
// this.msg.EndTime = this.$route.query.EndTime + '-01';
// }
if
(
this
.
$route
.
query
.
EnterID
)
{
this
.
msg
.
EnterID
=
Number
(
this
.
$route
.
query
.
EnterID
);
}
if
(
this
.
$route
.
query
.
ClassName
)
{
this
.
msg
.
ClassName
=
decodeURI
(
this
.
$route
.
query
.
ClassName
);
}
this
.
queryCourseSubject
();
this
.
getOrderState
();
this
.
getCourseList
();
},
mounted
()
{
this
.
getList
();
this
.
getEmployee
(
0
);
this
.
getglteacher
()
},
methods
:
{
queryCourseSubject
()
{
getCourseSubject
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
CourseSubjectList
=
res
.
Data
;
}
})
},
//订单状态
getOrderState
()
{
getOrderStateEnumList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
tempArray
=
res
.
Data
;
if
(
!
tempArray
)
{
tempArray
=
[];
}
tempArray
.
unshift
({
Id
:
0
,
Name
:
"不限"
})
this
.
OrderStateList
=
tempArray
;
}
})
},
//获取课程
getCourseList
()
{
queryCourseDropdownList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
tempArray
=
res
.
Data
;
if
(
!
tempArray
)
{
tempArray
=
[];
}
tempArray
.
unshift
({
CourseId
:
0
,
CourseName
:
"不限"
})
this
.
CourseList
=
tempArray
;
}
})
},
//翻页
changePage
(
val
)
{
if
(
this
.
showone
==
true
)
{
this
.
msg
.
pageIndex
=
val
;
this
.
getList
()
}
else
{
this
.
showone
=
true
}
},
resetSearch
()
{
this
.
msg
.
pageIndex
=
1
;
this
.
getList
()
},
//获取菜单分页列表
getList
()
{
// if (this.dateList && this.dateList.length > 0) {
// this.msg.StartTime = this.dateList[0];
// this.msg.EndTime = this.dateList[1];
// } else {
// this.msg.StartTime = '';
// this.msg.EndTime = '';
// }
if
(
this
.
dateList2
&&
this
.
dateList2
.
length
>
0
)
{
this
.
msg
.
OPStartTime
=
this
.
dateList2
[
0
];
this
.
msg
.
OPEndTime
=
this
.
dateList2
[
1
];
}
else
{
this
.
msg
.
OPStartTime
=
''
;
this
.
msg
.
OPEndTime
=
''
;
}
this
.
msg
.
CustomerId
=
this
.
Id
let
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
msg
));
if
(
msg
.
OrderId
==
''
||
msg
.
OrderId
==
null
)
{
msg
.
OrderId
=
0
}
this
.
loading
=
true
;
getMyOrderStatisticsPageList
(
msg
).
then
(
res
=>
{
this
.
data
=
res
.
Data
.
PageData
;
let
OrderIds
=
[]
this
.
data
.
List
.
forEach
(
x
=>
{
OrderIds
.
push
(
x
.
OrderId
)
})
this
.
loading
=
false
OrderIds
=
OrderIds
.
join
(
','
)
if
(
this
.
data
.
List
.
length
>
0
)
{
this
.
$refs
.
orderL
.
getOrderFinanceList
(
OrderIds
,
1
)
}
this
.
pageCount
=
res
.
Data
.
PageCount
;
}).
catch
(()
=>
{
this
.
loading
=
false
})
},
//刷新页面
refreshClassOrder
()
{
this
.
getList
();
},
getClassInfo
(
obj
)
{
//打开班级详情组件
this
.
classObjOption
=
obj
;
this
.
isShowClassInfo
=
true
;
},
//关闭班级信息弹窗
closeClass
()
{
this
.
isShowClassInfo
=
false
;
},
getglteacher
()
{
var
qMsg
=
{
AccountTypeStr
:
2
}
queryEmployee
(
qMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
TeacherList
=
res
.
Data
;
let
obj
=
{
Id
:
""
,
EmployeeName
:
"不限"
}
this
.
TeacherList
.
unshift
(
obj
)
this
.
AllTeacherList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
TeacherList
));
}
})
},
//筛选关联老师
filterFn3
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
TeacherList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllTeacherList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
TeacherList
=
this
.
AllTeacherList
.
filter
(
v
=>
v
.
EmployeeName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
//业务员
getEmployee
(
id
)
{
var
qMsg
=
{
Dept_Id
:
0
}
qMsg
.
Dept_Id
=
id
;
queryEmployee
(
qMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
EmployeeList
=
res
.
Data
;
let
obj
=
{
Id
:
""
,
EmployeeName
:
"不限"
}
this
.
EmployeeList
.
unshift
(
obj
)
this
.
AllemployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
EmployeeList
));
}
}).
catch
(()
=>
{
})
},
//筛选业务员
filterFn2
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
EmployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
EmployeeList
=
this
.
AllemployeeList
.
filter
(
v
=>
v
.
EmployeeName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
goexport
()
{
//导出
var
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
msg
));
EduDownLoad
(
"/order/GetOrderPageListStatisticsToExcel"
,
msg
,
"订单列表.xls"
)
}
}
}
</
script
>
<
style
scoped
>
li
{
list-style-type
:
none
;
}
.myOrder
ul
{
padding
:
0px
}
.myOrder
.price-popup
{
border-radius
:
4px
;
}
.myOrder
.el-range-editor
.el-range-input
{
background
:
transparent
;
}
.myOrder
.el-range-editor.el-input__inner
{
background-color
:
transparent
;
}
.myOrder
.q-mb-md
{
margin-bottom
:
0
;
}
.myOrder
.stics
{
padding
:
10px
20px
;
background
:
#DDDEE0
;
border-radius
:
4px
;
font-size
:
14px
;
color
:
#000000
;
font-weight
:
bold
;
white-space
:
nowrap
;
}
.myOrder
.stics
.stics-name
{
color
:
#2D2D2D
;
font-weight
:
600
;
margin-right
:
10px
}
.myOrder
.tis
{
margin
:
10px
0
;
align-items
:
center
}
.myOrder
.tis
.tis-k
{
width
:
10px
;
height
:
10px
;
margin-right
:
8px
}
.myOrder
.tis
span
{
font-size
:
14px
;
color
:
#2D2D2D
;
font-weight
:
600
;
margin-right
:
20px
}
.myOrder
.el-input__inner
{
border
:
none
!important
;
background
:
transparent
!important
;
}
</
style
>
src/components/sale/b2bcustomlist.vue
View file @
dfdde186
...
@@ -55,7 +55,7 @@
...
@@ -55,7 +55,7 @@
</customerEdit-form>
</customerEdit-form>
<customerReview-form
v-if=
"isShowRightForm"
:customerObj=
"customerObj"
@
close=
"closeCustomForm"
<customerReview-form
v-if=
"isShowRightForm"
:customerObj=
"customerObj"
@
close=
"closeCustomForm"
@
success=
"refreshQuestion"
></customerReview-form>
@
success=
"refreshQuestion"
></customerReview-form>
<customerInfo
v-if=
"isShowDetailForm"
:rowId=
"curRowId"
@
close=
"closeCustomForm"
@
edit=
"editCusInfo"
:auth=
"AuthorityObj"
<customerInfo
v-if=
"isShowDetailForm"
:rowId=
"curRowId"
@
close=
"closeCustomForm"
:auth=
"AuthorityObj"
@
success=
"refreshQuestion"
></customerInfo>
@
success=
"refreshQuestion"
></customerInfo>
</div>
</div>
</template>
</template>
...
...
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