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
0546af81
Commit
0546af81
authored
Dec 22, 2021
by
Mac
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
业绩提成 相关页面
parent
a23fbae5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1996 additions
and
0 deletions
+1996
-0
index.js
src/api/finance/index.js
+94
-0
AchievementsForOrderList.vue
src/pages/financial/market/AchievementsForOrderList.vue
+353
-0
AchievementsUserDetailList.vue
src/pages/financial/market/AchievementsUserDetailList.vue
+450
-0
achievementPeriodsList.vue
src/pages/financial/market/achievementPeriodsList.vue
+400
-0
employeeCommission.vue
src/pages/financial/market/employeeCommission.vue
+218
-0
marketStatistics.vue
src/pages/financial/market/marketStatistics.vue
+452
-0
routes.js
src/router/routes.js
+29
-0
No files found.
src/api/finance/index.js
View file @
0546af81
...
...
@@ -649,6 +649,100 @@ export function GetBonusPlan(data) {
data
});
}
/**
* 获取业绩期数分页列表
*/
export
function
getSellAchievementsPeriodsPageList
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsPeriodsPageList'
,
method
:
'post'
,
data
});
}
/**
* 生成业绩提成
*/
export
function
setAchievementsCommissionInfo
(
data
)
{
return
request
({
url
:
'/SellAchievements/SetAchievementsCommissionInfo'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取提成可发放人员
*/
export
function
getSellAchievementsSendEmployeeList
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsSendEmployeeList'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取提成可发放人员
*/
export
function
setSellAchievementsSendEmployee
(
data
)
{
return
request
({
url
:
'/SellAchievements/SetSellAchievementsSendEmployee'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取提成期数 员工提成
*/
export
function
getSellAchievementsUserList
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsUserList'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取期数提成 员工提成明细列表
*/
export
function
getSellAchievementsUserDetailList
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsUserDetailList'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取订单跳转 提成详情
*/
export
function
getSellAchievementsForOrderList
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsForOrderList'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取订单跳转 提成详情
*/
export
function
getSellAchievementsStatistics
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsStatistics'
,
method
:
'post'
,
data
});
}
/**
* 业绩提成 获取提成期数下拉列表
*/
export
function
getSellAchievementsPeriodsList
(
data
)
{
return
request
({
url
:
'/SellAchievements/GetSellAchievementsPeriodsList'
,
method
:
'post'
,
data
});
}
...
...
src/pages/financial/market/AchievementsForOrderList.vue
0 → 100644
View file @
0546af81
<
style
>
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.AchievementsForOrderList
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.AchievementsForOrderList
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.AchievementsForOrderList
._icon_btn
i
.icon-sousuo
{
background-color
:
#47BF8C
;
}
.AchievementsForOrderList
._icon_btn
i
{
width
:
30px
;
height
:
30px
;
display
:
inline-block
;
color
:
white
!important
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
30px
;
margin-right
:
10px
;
cursor
:
pointer
;
outline
:
none
;
}
.AchievementsForOrderList
.el-table
td
,
.el-table
th
{
padding
:
5px
0
;
}
</
style
>
<
template
>
<div
class=
"page-body AchievementsForOrderList"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-btn
color=
"primary"
size=
"11px"
label=
"返回"
@
click=
"goreturn"
style=
"margin-left:10px"
/>
</div>
</div>
</div>
<template>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading=
'loading'
:header-cell-style=
"
{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<el-table-column
prop=
"SchoolName"
label=
"校区"
width=
'150'
:filters=
'SchoolNamelist'
:filter-method=
"filterHandler"
>
</el-table-column>
<el-table-column
prop=
"DeptName"
label=
"部门"
:filters=
'DeptNamelist'
:filter-method=
"filterHandler"
>
</el-table-column>
<el-table-column
prop=
"UserType"
label=
"类型"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.UserType == 1"
>
市场
</span>
<span
v-if=
"scope.row.UserType == 2"
>
顾问
</span>
<span
v-if=
"scope.row.UserType == 3"
>
教师
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"UserName"
label=
"人员"
:filters=
'UserNamelist'
:filter-method=
"filterHandler"
>
</el-table-column>
<el-table-column
prop=
"IsDept"
label=
"业绩方式"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.IsDept==1"
>
部门
</span>
<span
v-if=
"scope.row.IsDept==2"
>
个人
</span>
</
template
>
</el-table-column>
<el-table-column
width=
'170'
prop=
"ClassName"
label=
"班级信息"
>
<
template
slot-scope=
"scope"
>
<div><span
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlclass('/course/classManage',scope.row.ClassName)"
>
{{
scope
.
row
.
ClassName
}}
</span>
{{
scope
.
row
.
ClassTypeName
}}
<span
style=
"color: #409EFF;"
v-if=
'scope.row.IsContinueClass==1'
>
(续)
</span></div>
<div
v-if=
"scope.row.StudentCount"
>
学生数量:
{{
scope
.
row
.
StudentCount
}}
人
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"OrderId"
label=
"订单号"
>
<
template
slot-scope=
"scope"
>
<div
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlorderList('/sale/orderStatistics',scope.row)"
>
{{
scope
.
row
.
OrderId
}}
</div>
</
template
>
</el-table-column>
<el-table-column
width=
'130'
prop=
"TotalCommissionMoney"
label=
"订单发放信息"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.TotalCommissionMoney"
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
TotalCommissionMoney
}}
</div>
<div
v-if=
"scope.row.OtherMoney"
>
额外奖励:
{{
scope
.
row
.
OtherMoney
}}
</div>
<div
v-if=
"scope.row.BackMoney"
>
额外扣除:
{{
scope
.
row
.
BackMoney
}}
</div>
<div
v-if=
"scope.row.GiveOutMoney"
>
累计已发:
{{
scope
.
row
.
GiveOutMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"IsFirstCommission"
label=
"首次发放"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.IsFirstCommission"
>
{{
scope
.
row
.
IsFirstCommission
==
1
?
'是'
:
'否'
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"TotalHours"
label=
"课时统计"
width=
"160"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.TotalHours"
>
总课时:
{{
scope
.
row
.
TotalHours
}}
</div>
<div
v-if=
"scope.row.TotalLearn"
>
已学习课时:
<div
style=
" display: inline-block;cursor: pointer;text-decoration: underline;"
@
click=
"goUrlkehao('/financial/studentsClassfee', scope.row)"
>
{{
scope
.
row
.
TotalLearn
}}
</div>
</div>
<div
v-if=
"scope.row.CurrentHours"
>
当期消费课时:
{{
scope
.
row
.
CurrentHours
>=
0
?
scope
.
row
.
CurrentHours
:
'-'
}}
</div>
</
template
>
</el-table-column>
<!-- <el-table-column prop="TotalHours" label="总课时"> </el-table-column>
<el-table-column width='110' prop="TotalLearn" label="已学习课时"> </el-table-column>
<el-table-column width='110' prop="CurrentHours" label="当期消费课时">
<template slot-scope="scope">
<div>{{scope.row.CurrentHours>=0 ?scope.row.CurrentHours:'-'}}</div>
</template>
</el-table-column> -->
<el-table-column
width=
'160'
prop=
"CurrentPeriodMoney"
label=
"当期发放信息"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.CurrentPeriodMoney"
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
CurrentPeriodMoney
}}
</div>
<div
v-if=
"scope.row.CurrentExtraMoney"
>
额外奖励:
{{
scope
.
row
.
CurrentExtraMoney
}}
</div>
<div
v-if=
"scope.row.DeductionMoney"
>
抵扣:
{{
scope
.
row
.
DeductionMoney
}}
</div>
<div
v-if=
"scope.row.DeductionExtraMoney"
>
奖励抵扣:
{{
scope
.
row
.
DeductionExtraMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"YFMoney"
label=
"最终发放"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(233, 82, 82);"
>
{{
scope
.
row
.
YFMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
width=
'85'
prop=
"Periods"
label=
"期数"
>
</el-table-column>
<el-table-column
prop=
"Remark"
width=
'160'
label=
"备注"
>
</el-table-column>
</el-table>
</template>
</div>
</template>
<
script
>
import
{
GetClassTypePageList
,
}
from
'../../../api/system/index'
;
import
{
getSellAchievementsForOrderList
,
}
from
'../../../api/finance/index'
import
{
getClassDropDownList
,
}
from
"../../../api/school/index"
;
export
default
{
meta
:
{
title
:
"订单提成查询"
},
props
:
{},
components
:
{},
data
()
{
return
{
loading
:
false
,
//列表数据参数
msg
:
{
PeriodId
:
0
,
UserId
:
0
,
ClassId
:
0
,
OrderId
:
''
,
},
pageCount
:
0
,
persistent
:
false
,
listData
:
{},
tableData
:
[],
company
:
[],
department
:
[],
ClassList
:
[],
allClassList
:
[],
SchoolNamelist
:
[],
DeptNamelist
:
[],
UserNamelist
:
[],
see_tcdetailed
:
false
,
}
},
created
()
{
let
userinfo
=
this
.
getLocalStorage
();
userinfo
.
ActionMenuList
.
map
(
x
=>
{
//判断权限
if
(
x
.
FunctionCode
==
"see_tcdetailed"
)
{
//判断是否可以查看其他明细
this
.
see_tcdetailed
=
true
;
}
})
if
(
this
.
see_tcdetailed
==
false
)
{
this
.
msg
.
UserId
=
userinfo
.
Id
}
},
mounted
()
{
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
OrderId
)
{
this
.
msg
.
OrderId
=
this
.
$route
.
query
.
OrderId
}
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
UserId
)
{
this
.
msg
.
UserId
=
this
.
$route
.
query
.
UserId
}
this
.
getList
()
// this.setClass()
},
methods
:
{
getList
()
{
if
(
this
.
msg
)
this
.
loading
=
true
;
getSellAchievementsForOrderList
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
loading
=
false
;
this
.
tableData
=
res
.
Data
this
.
SchoolNamelist
=
[];
this
.
DeptNamelist
=
[];
this
.
UserNamelist
=
[];
let
obj_t
=
{
SchoolName
:
'合计'
,
YFMoney
:
0
,
}
this
.
tableData
.
forEach
(
x
=>
{
let
obj
=
{
text
:
x
.
SchoolName
,
value
:
x
.
SchoolName
}
let
obj2
=
{
text
:
x
.
DeptName
,
value
:
x
.
DeptName
}
let
obj3
=
{
text
:
x
.
UserName
,
value
:
x
.
UserName
}
this
.
SchoolNamelist
.
push
(
obj
)
this
.
DeptNamelist
.
push
(
obj2
)
this
.
UserNamelist
.
push
(
obj3
)
if
(
x
.
YFMoney
)
{
obj_t
.
YFMoney
=
this
.
accAdd
(
x
.
YFMoney
,
obj_t
.
YFMoney
)
};
})
this
.
tableData
.
push
(
obj_t
)
this
.
SchoolNamelist
=
this
.
unique
(
this
.
SchoolNamelist
)
this
.
DeptNamelist
=
this
.
unique
(
this
.
DeptNamelist
)
this
.
UserNamelist
=
this
.
unique
(
this
.
UserNamelist
)
}
})
},
accAdd
(
arg1
,
arg2
)
{
//js 加法精确计算
var
r1
,
r2
,
m
;
try
{
r1
=
arg1
.
toString
().
split
(
"."
)[
1
].
length
;
}
catch
(
e
)
{
r1
=
0
;
}
try
{
r2
=
arg2
.
toString
().
split
(
"."
)[
1
].
length
;
}
catch
(
e
)
{
r2
=
0
;
}
m
=
Math
.
pow
(
10
,
Math
.
max
(
r1
,
r2
));
return
(
arg1
*
m
+
arg2
*
m
)
/
m
;
},
unique
(
arr
,
Name
)
{
//数组去重
const
res
=
new
Map
();
return
arr
.
filter
(
(
list
)
=>
!
res
.
has
(
list
.
text
)
&&
res
.
set
(
list
.
text
,
1
)
);
},
//选择班级
setClass
(
item
)
{
this
.
isShowClass
=
true
;
getClassDropDownList
({
CourseId
:
0
,
IsAddDefault
:
1
,
//添加默认选项
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
jsonData
=
res
.
Data
;
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
allClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
}
});
},
//筛选员工
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allClassList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
ClassList
=
this
.
allClassList
.
filter
(
v
=>
v
.
ClassName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
goUrl
(
path
,
id
)
{
this
.
$router
.
push
({
path
:
'/financial/'
+
path
,
query
:
{
"id"
:
id
,
blank
:
'y'
,
tab
:
'单据详情'
}
})
},
filterHandler
(
value
,
row
,
column
)
{
const
property
=
column
[
'property'
];
return
row
[
property
]
===
value
;
},
StudentCount
(
a
,
b
)
{
return
a
.
StudentCount
-
b
.
StudentCount
;
},
goreturn
()
{
this
.
$router
.
go
(
-
1
);
},
goUrlclass
(
path
,
Names
){
//班级
let
Name
=
encodeURI
(
Names
)
this
.
OpenNewUrl
(
path
,
{
ClassName
:
Name
,
});
},
goUrlorderList
(
path
,
row
){
//订单跳转
this
.
OpenNewUrl
(
path
,
{
OrderId
:
row
.
OrderId
,
// EnterID:row.UserId
});
},
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
src/pages/financial/market/AchievementsUserDetailList.vue
0 → 100644
View file @
0546af81
<
style
>
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.userCommissionDetails
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.userCommissionDetails
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.userCommissionDetails
._icon_btn
i
.icon-sousuo
{
background-color
:
#47bf8c
;
}
.userCommissionDetails
._icon_btn
i
{
width
:
30px
;
height
:
30px
;
display
:
inline-block
;
color
:
white
!important
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
30px
;
margin-right
:
10px
;
cursor
:
pointer
;
outline
:
none
;
}
.userCommissionDetails
.el-table
td
,
.el-table
th
{
padding
:
5px
0
;
}
</
style
>
<
template
>
<div
class=
"page-body userCommissionDetails"
>
<div
class=
"page-search row items-center"
>
<div
style=
"margin-right: 10px;"
>
<q-btn
color=
"primary"
size=
"11px"
label=
"返回"
@
click=
"goreturn"
style=
"margin-left:10px"
/>
</div>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
use-input
input-debounce=
"0"
option-value=
"ClassId"
@
input=
"getList"
option-label=
"ClassName"
v-model=
"msg.ClassId"
:options=
"ClassList"
label=
"班级"
:dense=
"false"
emit-value
map-options
@
filter=
"filterFn"
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"getList"
option-label=
"Name"
v-model=
"msg.UserType"
:options=
"UserTypeList"
label=
"类型"
:dense=
"false"
emit-value
map-options
></q-select>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"getList"
option-label=
"Name"
v-model=
"msg.IsDept"
:options=
"IsDeptList"
label=
"业绩方式"
:dense=
"false"
emit-value
map-options
></q-select>
</div>
<div
class=
"col-3"
>
<q-input
filled
v-model=
"msg.OrderId"
@
keyup
.
enter
.
native=
"getList()"
label=
"订单号"
/>
</div>
</div>
</div>
<
template
>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading=
"loading"
:header-cell-style=
"
{ backgroundColor: '#f5f6f7', color: '#a8a8b3' }"
border
style="width: 100%"
>
<el-table-column
prop=
"SchoolName"
width=
"150"
label=
"校区"
></el-table-column>
<el-table-column
prop=
"DeptName"
label=
"部门"
></el-table-column>
<el-table-column
prop=
"UserType"
label=
"类型"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.UserType == 1"
>
市场
</span>
<span
v-if=
"scope.row.UserType == 2"
>
顾问
</span>
<span
v-if=
"scope.row.UserType == 3"
>
教师
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"UserName"
label=
"销售"
></el-table-column>
<el-table-column
prop=
"IsDept"
label=
"业绩方式"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.IsDept == 1"
>
部门
</span>
<span
v-if=
"scope.row.IsDept == 2"
>
个人
</span>
</
template
>
</el-table-column>
<el-table-column
width=
"170"
prop=
"ClassName"
label=
"班级信息"
>
<
template
slot-scope=
"scope"
>
<div>
<span
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlclass('/course/classManage', scope.row.ClassName)"
>
{{
scope
.
row
.
ClassName
}}
</span>
{{
scope
.
row
.
ClassTypeName
}}
<span
style=
"color: #409EFF;"
v-if=
"scope.row.IsContinueClass == 1"
>
(续)
</span>
</div>
<div
v-if=
"scope.row.StudentCount"
>
学生数量:
{{
scope
.
row
.
StudentCount
}}
人
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"OrderId"
label=
"订单号"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.OrderId"
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlorderList('/sale/orderStatistics', scope.row)"
>
{{
scope
.
row
.
OrderId
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"IssueNum"
label=
"发放次数"
width=
"94"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.IssueNum"
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goorderUrl(scope.row)"
>
发放第
{{
scope
.
row
.
IssueNum
}}
次
</div>
</
template
>
</el-table-column>
<el-table-column
width=
"130"
prop=
"TotalCommissionMoney"
label=
"订单发放信息"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.TotalCommissionMoney"
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
TotalCommissionMoney
}}
</div>
<div
v-if=
"scope.row.OtherMoney"
>
额外奖励:
{{
scope
.
row
.
OtherMoney
}}
</div>
<div
v-if=
"scope.row.BackMoney"
>
额外扣除:
{{
scope
.
row
.
BackMoney
}}
</div>
<div
v-if=
"scope.row.GiveOutMoney"
>
累计已发:
{{
scope
.
row
.
GiveOutMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"IsFirstCommission"
label=
"首次发放"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.IsFirstCommission"
>
{{
scope
.
row
.
IsFirstCommission
==
1
?
'是'
:
'否'
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"TotalHours"
label=
"课时统计"
width=
"160"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.TotalHours"
>
总课时:
{{
scope
.
row
.
TotalHours
}}
</div>
<div
v-if=
"scope.row.TotalLearn"
>
已学习课时:
<div
style=
" display: inline-block;cursor: pointer;text-decoration: underline;"
@
click=
"goUrlkehao('/financial/studentsClassfee', scope.row)"
>
{{
scope
.
row
.
TotalLearn
}}
</div>
</div>
<div
v-if=
"scope.row.CurrentHours"
>
当期消费课时:
{{
scope
.
row
.
CurrentHours
>=
0
?
scope
.
row
.
CurrentHours
:
'-'
}}
</div>
</
template
>
</el-table-column>
<!-- <el-table-column prop="TotalHours" label="总课时"> </el-table-column>
<el-table-column width='110' prop="TotalLearn" label="已学习课时">
<template slot-scope="scope">
<div >
{{scope.row.TotalLearn}}
</div>
</template>
</el-table-column>
<el-table-column width='110' prop="CurrentHours" label="当期消费课时">
<template slot-scope="scope">
<div>{{scope.row.CurrentHours>=0 ?scope.row.CurrentHours:'-'}}</div>
</template>
</el-table-column>-->
<el-table-column
width=
"160"
prop=
"CurrentPeriodMoney"
label=
"当期发放信息"
>
<
template
slot-scope=
"scope"
>
<div
v-if=
"scope.row.CurrentPeriodMoney"
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
CurrentPeriodMoney
}}
</div>
<div
v-if=
"scope.row.CurrentExtraMoney"
>
额外奖励:
{{
scope
.
row
.
CurrentExtraMoney
}}
</div>
<div
v-if=
"scope.row.DeductionMoney"
>
抵扣:
{{
scope
.
row
.
DeductionMoney
}}
</div>
<div
v-if=
"scope.row.DeductionExtraMoney"
>
奖励抵扣:
{{
scope
.
row
.
DeductionExtraMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"YFMoney"
label=
"最终发放"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(233, 82, 82);"
>
{{
scope
.
row
.
YFMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
width=
"90"
prop=
"Periods"
label=
"期数"
></el-table-column>
<el-table-column
prop=
"Remark"
width=
"160"
label=
"备注"
></el-table-column>
</el-table>
</template>
</div>
</template>
<
script
>
import
{
GetClassTypePageList
,
}
from
'../../../api/system/index'
;
import
{
getSellAchievementsUserDetailList
,
}
from
'../../../api/finance/index'
import
{
getClassDropDownList
,
}
from
"../../../api/school/index"
;
export
default
{
meta
:
{
title
:
"员工提成明细列表"
},
props
:
{},
components
:
{},
data
()
{
return
{
loading
:
false
,
//列表数据参数
msg
:
{
PeriodId
:
0
,
UserId
:
0
,
ClassId
:
0
,
OrderId
:
''
,
UserType
:
0
,
//类型 1市场、2顾问、3教师
IsDept
:
0
,
//业绩方式 1部门 2个人
UserIds
:
''
,
},
UserTypeList
:
[{
Id
:
0
,
Name
:
'不限'
},
{
Id
:
1
,
Name
:
'市场'
},
{
Id
:
2
,
Name
:
'顾问'
},
{
Id
:
3
,
Name
:
'教师'
},],
IsDeptList
:
[{
Id
:
0
,
Name
:
'不限'
},
{
Id
:
1
,
Name
:
'部门'
},
{
Id
:
2
,
Name
:
'个人'
}],
pageCount
:
0
,
persistent
:
false
,
listData
:
{},
tableData
:
[],
company
:
[],
department
:
[],
ClassList
:
[],
allClassList
:
[],
}
},
created
()
{
},
mounted
()
{
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
userId
)
{
this
.
msg
.
UserId
=
this
.
$route
.
query
.
userId
}
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
preriodId
)
{
this
.
msg
.
PeriodId
=
this
.
$route
.
query
.
preriodId
}
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
UserIds
)
{
this
.
msg
.
UserIds
=
this
.
$route
.
query
.
UserIds
}
this
.
getList
()
this
.
setClass
()
},
methods
:
{
getList
()
{
if
(
this
.
msg
)
this
.
loading
=
true
;
getSellAchievementsUserDetailList
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
loading
=
false
;
this
.
tableData
=
res
.
Data
if
(
this
.
tableData
.
length
>
0
)
{
this
.
getAskfor
()
}
}
})
},
getAskfor
()
{
//求值
let
obj
=
{
SchoolName
:
'合计'
,
YFMoney
:
0
,
}
this
.
tableData
.
forEach
((
x
)
=>
{
if
(
x
.
YFMoney
)
{
obj
.
YFMoney
=
this
.
accAdd
(
x
.
YFMoney
,
obj
.
YFMoney
)
};
})
this
.
tableData
.
push
(
obj
)
},
accAdd
(
arg1
,
arg2
)
{
//js 加法精确计算
var
r1
,
r2
,
m
;
try
{
r1
=
arg1
.
toString
().
split
(
"."
)[
1
].
length
;
}
catch
(
e
)
{
r1
=
0
;
}
try
{
r2
=
arg2
.
toString
().
split
(
"."
)[
1
].
length
;
}
catch
(
e
)
{
r2
=
0
;
}
m
=
Math
.
pow
(
10
,
Math
.
max
(
r1
,
r2
));
return
(
arg1
*
m
+
arg2
*
m
)
/
m
;
},
//选择班级
setClass
(
item
)
{
this
.
isShowClass
=
true
;
getClassDropDownList
({
CourseId
:
0
,
IsAddDefault
:
1
,
//添加默认选项
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
jsonData
=
res
.
Data
;
let
obj
=
{
ClassId
:
0
,
ClassName
:
'不限'
}
jsonData
.
unshift
(
obj
)
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
allClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
}
});
},
//筛选员工
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allClassList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
ClassList
=
this
.
allClassList
.
filter
(
v
=>
v
.
ClassName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
goUrl
(
path
,
id
)
{
this
.
$router
.
push
({
path
:
'/financial/'
+
path
,
query
:
{
"id"
:
id
,
blank
:
'y'
,
tab
:
'单据详情'
}
})
},
filterHandler
(
value
,
row
,
column
)
{
const
property
=
column
[
'property'
];
return
row
[
property
]
===
value
;
},
StudentCount
(
a
,
b
)
{
return
a
.
StudentCount
-
b
.
StudentCount
;
},
goorderUrl
(
row
)
{
this
.
$router
.
push
({
path
:
'/financial/market/AchievementsForOrderList'
,
query
:
{
OrderId
:
row
.
OrderId
,
UserId
:
row
.
UserId
,
blank
:
'y'
,
}
})
},
goreturn
()
{
this
.
$router
.
go
(
-
1
);
},
goUrlorderList
(
path
,
row
)
{
//订单跳转
this
.
OpenNewUrl
(
path
,
{
OrderId
:
row
.
OrderId
,
// EnterID:row.UserId
});
},
goUrlclass
(
path
,
Names
)
{
//班级
let
Name
=
encodeURI
(
Names
)
this
.
OpenNewUrl
(
path
,
{
ClassName
:
Name
,
});
},
goUrlkehao
(
path
,
row
)
{
//跳转到学生课耗
let
StartMonth
=
''
let
EndMonth
=
''
if
(
row
.
IsFirstCommission
==
1
)
{
EndMonth
=
row
.
Periods
}
else
{
if
(
row
.
Periods
.
indexOf
(
'~'
)
!=
-
1
)
{
StartMonth
=
row
.
Periods
.
split
(
'~'
)[
0
];
EndMonth
=
row
.
Periods
.
split
(
'~'
)[
1
];
}
else
{
StartMonth
=
row
.
Periods
;
EndMonth
=
row
.
Periods
}
}
this
.
OpenNewUrl
(
path
,
{
OrderId
:
row
.
OrderId
,
StartMonth
:
StartMonth
,
EndMonth
:
EndMonth
,
comefrom
:
1
,
});
}
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
src/pages/financial/market/achievementPeriodsList.vue
0 → 100644
View file @
0546af81
<
style
>
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.salesCommission
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.salesCommission
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.salesCommission
._icon_btn
i
.icon-sousuo
{
background-color
:
#47BF8C
;
}
.salesCommission
._icon_btn
.icon-add
{
background-color
:
#47BF8C
;
}
.salesCommission
._icon_btn
i
{
width
:
26px
;
height
:
26px
;
display
:
inline-block
;
color
:
white
!important
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
26px
;
margin-right
:
10px
;
cursor
:
pointer
;
outline
:
none
;
}
.salesCommission
.el-table
td
,
.el-table
th
{
padding
:
5px
0
;
}
</
style
>
<
template
>
<div
class=
"page-body salesCommission"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
style=
"margin-right: 20px;"
v-if=
'iscMaker==true'
>
<div
class=
"block"
>
<span
style=
"margin-right: 5px;"
>
校区
</span>
<el-select
v-model=
"msg.SchoolId"
filterable
@
change=
"handleCurrentChanges(1)"
>
<el-option
value=
"-1"
label=
"不限"
></el-option>
<el-option
v-for=
'item in CompanyList'
:label=
'item.SName'
:value=
'item.SId'
:key=
'item.SId'
></el-option>
</el-select>
</div>
</div>
<div
v-if=
'isgenerate==true'
>
<div
class=
"block"
style=
"display:flex"
>
<span
style=
"margin-right: 5px;"
>
选择月份
</span>
<el-date-picker
v-model=
"value2"
type=
"month"
placeholder=
"选择月"
>
</el-date-picker>
<q-btn
:loading=
"loading1"
color=
"primary"
size=
"11px"
label=
"生成提成"
@
click=
"scCommission"
style=
"margin-left:10px"
/>
</div>
</div>
</div>
</div>
<template
>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading =
'loading'
:header-cell-style=
"
{backgroundColor:'#f5f6f7', color: '#a8a8b3'}"
border
style="width: 100%">
<!--
<el-table-column
prop=
"Id"
label=
"ID"
></el-table-column>
-->
<el-table-column
prop=
"Periods"
label=
"周期"
></el-table-column>
<el-table-column
prop=
"SumPrice"
label=
"提成总金额"
>
</el-table-column>
<el-table-column
prop=
"SchooldCommission"
label=
"校区提成总金额"
>
<template
slot-scope=
"scope"
>
<div
style=
"display: flex;flex-wrap: wrap;"
v-if=
'scope.row.SchooldCommission>=0'
>
{{
scope
.
row
.
SchooldCommission
>=
0
?
scope
.
row
.
SchooldCommission
:
'-'
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"FrIdList"
label=
"财务单据"
>
<
template
slot-scope=
"scope"
>
<div
style=
"display: flex;flex-wrap: wrap;"
v-if=
'scope.row.FrIdList.length>0'
>
<span
v-for=
"(x,y) in scope.row.FrIdList"
@
click=
"gocaiwuxiangq(x)"
style=
"cursor: pointer;text-decoration: underline;margin-right: 5px; color: #409EFF;"
>
{{
x
}}
</span>
</div>
<div
v-else
>
无
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"CreateByName"
label=
"创建人"
>
</el-table-column>
<el-table-column
prop=
"CreateTime"
label=
"创建时间"
>
</el-table-column>
<el-table-column
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<div
class=
"_icon_btn"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"查看"
placement=
"top"
>
<i
class=
"iconfont icon-sousuo"
@
click=
"goUrl(scope.row.Id)"
></i>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"制单"
placement=
"top"
v-if=
'iscMaker==true'
>
<i
class=
"iconfont icon-add"
v-if=
'iscMaker==true'
@
click=
"generalFinancacls(scope.row)"
></i>
</el-tooltip>
</div>
</
template
>
</el-table-column>
</el-table>
<div
style=
"margin-top: 10px;text-align: center;"
>
<el-pagination
background
@
current-change=
"handleCurrentChanges"
layout=
"total,prev, pager, next, jumper"
:current-page
.
sync=
"msg.PageIndex"
:page-size=
"msg.PageSize"
:total=
'total'
>
</el-pagination>
</div>
</template>
<el-dialog
title=
"设置发放用户"
width=
"700px"
:visible
.
sync=
"costmode"
center
>
<el-table
:data=
"SendEmployeeList"
border
@
selection-change=
"handleSelectionChange"
style=
"width: 100%"
>
<el-table-column
type=
"selection"
width=
"55"
:selectable=
"checkSelectable"
></el-table-column>
<el-table-column
prop=
"UserName"
label=
"用户"
>
</el-table-column>
<el-table-column
prop=
"StudentCount"
label=
"客人数量"
>
</el-table-column>
<el-table-column
prop=
"CommissionMoney"
label=
"应发提成金额"
>
</el-table-column>
<el-table-column
prop=
"IsGiveOut"
label=
"是否已发放"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
'scope.row.IsGiveOut==1'
>
已发放
</span>
<span
v-if=
'scope.row.IsGiveOut==2'
>
未发放
</span>
</
template
>
</el-table-column>
</el-table>
<div
style=
"margin-top: 10px;"
>
金额总额:{{totalAmount}}
</div>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
class=
"hollowFixedBtn"
@
click=
"costmode=false"
>
取消
</el-button>
<el-button
class=
"normalBtn"
type=
"primary"
@
click=
"preservetransaction()"
>
确定
</el-button>
</div>
</el-dialog>
</div>
</template>
<
script
>
import
{
getSchoolDropdown
}
from
'../../../api/school/index'
import
{
GetClassTypePageList
,
}
from
'../../../api/system/index'
;
import
{
getSellAchievementsPeriodsPageList
,
setSellCommissionRule
,
setAchievementsCommissionInfo
,
getSellAchievementsSendEmployeeList
,
setSellAchievementsSendEmployee
}
from
'../../../api/finance/index'
export
default
{
meta
:
{
title
:
"留学销售提成列表"
},
props
:
{},
components
:
{},
data
()
{
return
{
loading
:
false
,
loading1
:
false
,
value2
:
''
,
//列表数据参数
msg
:
{
PageIndex
:
1
,
PageSize
:
15
,
SchoolId
:
'-1'
},
pageCount
:
0
,
persistent
:
false
,
listData
:{},
tableData
:[],
total
:
0
,
CompanyList
:[],
isgenerate
:
false
,
//是否有生成的权限
iscMaker
:
false
,
//是否有制单的权限
SendEmployeeList
:[],
//可发放提成的用户列表
costmode
:
false
,
multipleSelection
:[],
totalAmount
:
0
,
//选中的金额总额
CheckID
:
0
,
}
},
created
()
{
let
userinfo
=
this
.
getLocalStorage
();
userinfo
.
ActionMenuList
.
map
(
x
=>
{
//判断权限
if
(
x
.
FunctionCode
==
"SAGenerate_Commission"
){
//判断是否有生成的权限
this
.
isgenerate
=
true
;
}
if
(
x
.
FunctionCode
==
"SACommission_maker"
){
//判断是否有制单的权限
this
.
iscMaker
=
true
;
}
})
var
myDate
=
new
Date
();
myDate
.
setMonth
(
myDate
.
getMonth
()
-
1
);
this
.
value2
=
myDate
.
getFullYear
()
+
"-"
+
(
myDate
.
getMonth
()
+
1
)
},
mounted
()
{
this
.
getList
();
//获取提成周期列表
this
.
getBranchList
()
},
methods
:
{
getList
(){
this
.
loading
=
true
;
getSellAchievementsPeriodsPageList
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
loading
=
false
;
this
.
tableData
=
res
.
Data
.
PageData
this
.
total
=
res
.
Data
.
Count
}
})
},
scCommission
(){
//生成提成
if
(
this
.
loading1
==
false
){
this
.
loading1
=
true
;
setAchievementsCommissionInfo
({
Month
:
this
.
value2
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
$q
.
notify
({
icon
:
'iconfont icon-chenggong'
,
color
:
'accent'
,
timeout
:
2000
,
message
:
'生成提成成功'
,
position
:
'top'
})
this
.
getList
()
}
this
.
loading1
=
false
;
}).
catch
(
err
=>
{
this
.
loading1
=
false
;
})
}
},
getBranchList
(){
//获取校区
getSchoolDropdown
({}).
then
(
res
=>
{
this
.
CompanyList
=
res
.
Data
;
}).
catch
(()
=>
{
})
},
goUrl
(
id
)
{
this
.
$router
.
push
({
path
:
'/financial/market/employeeCommission'
,
query
:
{
"id"
:
id
,
blank
:
'y'
,
}
})
},
gocaiwuxiangq
(
id
){
this
.
OpenNewUrl
(
"/financial/financalDocument/FinancialDocumentsDetail"
,
{
id
:
id
});
},
generalFinancacls
(
item
)
{
this
.
CheckID
=
item
.
Id
if
(
this
.
msg
.
SchoolId
==
-
1
){
if
(
item
.
SumPrice
>
0
){
this
.
tishi
(
item
.
SumPrice
,
item
.
Id
)
}
else
{
this
.
$message
.
error
(
'提成总金额为0'
)
}
}
else
{
if
(
item
.
SchooldCommission
>
0
){
this
.
goaddFinancial
(
item
.
SchooldCommission
,
item
.
Id
,
''
)
}
else
{
this
.
$message
.
error
(
'校区提成总金额为0'
)
}
}
},
goaddFinancial
(
Money
,
Id
,
EmpIds
){
let
School_Id
=
0
;
let
obj
=
{
CostType
:
316
,
Money
:
Money
,
CurrencyId
:
21
,
XSTC
:
1
,
School_Id
:
this
.
msg
.
SchoolId
==
-
1
?
0
:
this
.
msg
.
SchoolId
,
OtherType
:
44
,
//留学销售提成
ReFinanceId
:
Id
,
ReFinanceId2
:
this
.
msg
.
SchoolId
,
EduCommissionEmp
:
EmpIds
}
let
query
=
{
blank
:
"y"
,
tab
:
"新增付款单据"
,
Type
:
2
,
IsUploadPic
:
1
,
Name
:
'销售提成单'
,
id
:
143
,
orderObj
:
JSON
.
stringify
(
obj
)
}
this
.
$router
.
push
({
path
:
"/financial/financalDocument/addFinancialDocuments"
,
query
});
},
tishi
(
Money
,
Id
){
let
that
=
this
this
.
$q
.
dialog
({
title
:
"销售制单"
,
message
:
"你正在进行所有校区一起制单操作?"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
flat
:
true
},
ok
:
{
label
:
"确认"
,
flat
:
true
,
focus
:
true
}
}).
onOk
(()
=>
{
this
.
getcomSendEmployeeList
(
Id
)
});
},
getcomSendEmployeeList
(
Id
){
//获取可发放提成的用户
getSellAchievementsSendEmployeeList
({
PeriodId
:
Id
}).
then
(
res
=>
{
this
.
SendEmployeeList
=
res
.
Data
;
this
.
costmode
=
true
}).
catch
(()
=>
{
})
},
handleCurrentChanges
(
val
){
this
.
msg
.
PageIndex
=
val
;
this
.
getList
()
},
checkSelectable
(
row
){
return
row
.
IsGiveOut
==
2
},
handleSelectionChange
(
val
)
{
this
.
multipleSelection
=
val
;
let
zong
=
0
this
.
multipleSelection
.
forEach
(
x
=>
{
zong
+=
x
.
CommissionMoney
})
this
.
totalAmount
=
zong
},
preservetransaction
(){
let
that
=
this
if
(
this
.
multipleSelection
.
length
==
0
){
this
.
$q
.
notify
({
type
:
'negative'
,
position
:
"top"
,
message
:
`请选择您要发放的用户`
})
return
}
this
.
$q
.
dialog
({
title
:
"设置用户状态"
,
message
:
"确认后无法更改用户制单状态,如果需修改请联系管理员"
,
persistent
:
true
,
cancel
:
{
label
:
"取消"
,
flat
:
true
},
ok
:
{
label
:
"确认"
,
flat
:
true
,
focus
:
true
}
}).
onOk
(()
=>
{
let
EmpIds
=
''
;
let
data
=
[]
this
.
multipleSelection
.
forEach
(
x
=>
{
data
.
push
(
x
.
UserId
)
})
EmpIds
=
data
.
join
(
','
)
setSellAchievementsSendEmployee
({
PeriodId
:
this
.
CheckID
,
EmpIds
:
EmpIds
}).
then
(
res
=>
{
this
.
goaddFinancial
(
this
.
totalAmount
,
this
.
CheckID
,
EmpIds
)
this
.
$message
.
success
(
'设置成功'
);
}).
catch
(()
=>
{
})
});
}
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
\ No newline at end of file
src/pages/financial/market/employeeCommission.vue
0 → 100644
View file @
0546af81
<
style
>
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.CommissionDetail
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.CommissionDetail
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.CommissionDetail
._icon_btn
i
.icon-sousuo
{
background-color
:
#47BF8C
;
}
.CommissionDetail
._icon_btn
i
{
width
:
26px
;
height
:
26px
;
display
:
inline-block
;
color
:
white
!important
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
26px
;
margin-right
:
10px
;
cursor
:
pointer
;
outline
:
none
;
}
.CommissionDetail
.el-table
td
,
.el-table
th
{
padding
:
5px
0
;
}
</
style
>
<
template
>
<div
class=
"page-body CommissionDetail"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-btn
color=
"primary"
size=
"11px"
label=
"返回"
@
click=
"goreturn"
style=
"margin-left:10px"
/>
</div>
</div>
</div>
<template>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading=
'loading'
:header-cell-style=
"
{backgroundColor:'#f5f6f7', color: '#a8a8b3'}" border style="width: 100%">
<el-table-column
prop=
"SchoolName"
label=
"校区"
:filters=
'SchoolNamelist'
:filter-method=
"filterHandler"
>
</el-table-column>
<el-table-column
prop=
"DeptName"
label=
"部门"
:filters=
'DeptNamelist'
:filter-method=
"filterHandler"
>
</el-table-column>
<el-table-column
prop=
"UserName"
label=
"销售"
:filters=
'UserNamelist'
:filter-method=
"filterHandler"
>
</el-table-column>
<el-table-column
prop=
"StudentCount"
label=
"客人数量"
sortable
:sort-method=
"StudentCount"
>
</el-table-column>
<el-table-column
prop=
"CurrentPeriodMoney"
label=
"提成金额"
sortable
:sort-method=
"CurrentPeriodMoney"
>
</el-table-column>
<el-table-column
label=
"操作"
>
<template
slot-scope=
"scope"
>
<div
class=
"_icon_btn"
>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"查看"
placement=
"top"
>
<i
class=
"iconfont icon-sousuo"
@
click=
"goUrl('market/AchievementsUserDetailList',scope.row.UserId)"
></i>
</el-tooltip>
</div>
</
template
>
</el-table-column>
</el-table>
</template>
</div>
</template>
<
script
>
import
{
GetClassTypePageList
,
}
from
'../../../api/system/index'
;
import
{
getSellAchievementsUserList
,
}
from
'../../../api/finance/index'
import
{
getClassDropDownList
,
}
from
"../../../api/school/index"
;
export
default
{
meta
:
{
title
:
"销售提成详情"
},
props
:
{},
components
:
{},
data
()
{
return
{
loading
:
false
,
//列表数据参数
msg
:
{
PeriodId
:
0
,
},
pageCount
:
0
,
persistent
:
false
,
listData
:
{},
tableData
:
[],
company
:
[],
department
:
[],
see_tcdetailed
:
false
,
SchoolNamelist
:
[],
DeptNamelist
:
[],
UserNamelist
:
[],
}
},
created
()
{
// let userinfo = this.getLocalStorage();
// userinfo.ActionMenuList.map(x => { //判断权限
// if (x.FunctionCode == "see_tcdetailed") { //判断是否可以查看其他明细
// this.see_tcdetailed = true;
// }
// })
// if (this.see_tcdetailed == false) {
// this.msg.UserId = userinfo.Id
// }
},
mounted
()
{
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
id
)
{
this
.
msg
.
PeriodId
=
this
.
$route
.
query
.
id
}
this
.
getList
()
},
methods
:
{
getList
()
{
if
(
this
.
msg
)
this
.
loading
=
true
;
getSellAchievementsUserList
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
loading
=
false
;
this
.
tableData
=
res
.
Data
;
this
.
SchoolNamelist
=
[];
this
.
DeptNamelist
=
[];
this
.
UserNamelist
=
[];
this
.
tableData
.
forEach
(
x
=>
{
let
obj
=
{
text
:
x
.
SchoolName
,
value
:
x
.
SchoolName
}
let
obj2
=
{
text
:
x
.
DeptName
,
value
:
x
.
DeptName
}
let
obj3
=
{
text
:
x
.
UserName
,
value
:
x
.
UserName
}
this
.
SchoolNamelist
.
push
(
obj
)
this
.
DeptNamelist
.
push
(
obj2
)
this
.
UserNamelist
.
push
(
obj3
)
})
this
.
SchoolNamelist
=
this
.
unique
(
this
.
SchoolNamelist
)
this
.
DeptNamelist
=
this
.
unique
(
this
.
DeptNamelist
)
this
.
UserNamelist
=
this
.
unique
(
this
.
UserNamelist
)
}
})
},
unique
(
arr
,
Name
)
{
//数组去重
const
res
=
new
Map
();
return
arr
.
filter
(
(
list
)
=>
!
res
.
has
(
list
.
text
)
&&
res
.
set
(
list
.
text
,
1
)
);
},
goUrl
(
path
,
id
)
{
this
.
$router
.
push
({
path
:
'/financial/'
+
path
,
query
:
{
userId
:
id
,
preriodId
:
this
.
$route
.
query
.
id
,
blank
:
'y'
,
}
})
},
filterHandler
(
value
,
row
,
column
)
{
const
property
=
column
[
'property'
];
return
row
[
property
]
===
value
;
},
StudentCount
(
a
,
b
,
c
)
{
return
a
.
StudentCount
-
b
.
StudentCount
;
},
CurrentPeriodMoney
(
a
,
b
)
{
return
a
.
CurrentPeriodMoney
-
b
.
CurrentPeriodMoney
;
},
OtherMoney
(
a
,
b
)
{
return
a
.
OtherMoney
-
b
.
OtherMoney
;
},
CommissionMoney
(
a
,
b
)
{
return
a
.
CommissionMoney
-
b
.
CommissionMoney
;
},
FinalCommission
(
a
,
b
)
{
return
a
.
FinalCommission
-
b
.
FinalCommission
;
},
goreturn
()
{
this
.
$router
.
go
(
-
1
);
}
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
\ No newline at end of file
src/pages/financial/market/marketStatistics.vue
0 → 100644
View file @
0546af81
<
style
>
.baseSet_Title
{
width
:
120px
!important
;
padding
:
18px
0
0
16px
;
text-align
:
right
;
}
.cycleOrderList
.border-bottom
{
/* border-bottom: 1px dashed #EEE; */
padding-bottom
:
5px
;
margin-bottom
:
5px
;
}
.cycleOrderList
.text-bottom
{
height
:
32px
;
line-height
:
32px
;
margin-bottom
:
10px
;
}
.cycleOrderList
._icon_btn
i
.icon-sousuo
{
background-color
:
#47BF8C
;
}
.cycleOrderList
._icon_btn
i
{
width
:
30px
;
height
:
30px
;
display
:
inline-block
;
color
:
white
!important
;
border-radius
:
50%
;
text-align
:
center
;
line-height
:
30px
;
margin-right
:
10px
;
cursor
:
pointer
;
outline
:
none
;
}
.cycleOrderList
.el-table
td
,
.el-table
th
{
padding
:
5px
0
;
}
</
style
>
<
template
>
<div
class=
"page-body cycleOrderList"
>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"getDepartList(msg.School_Id),resetSearch()"
option-value=
"SId"
option-label=
"SName"
v-model=
"msg.School_Id"
ref=
"School_Id"
:options=
"schoolList"
label=
"校区"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<selectTree
:treeData=
'DeptList'
:defaultArray=
"returnString"
nodeKey=
"DeptId"
:multiple=
"false"
labelKey=
"DeptName"
childrenKey=
"ChildList"
tipText=
"选择部门"
@
getChild=
"getChild"
></selectTree>
</div>
<q-select
@
input=
"resetSearch"
filled
stack-label
option-value=
"Id"
option-label=
"EmployeeName"
use-input
v-model=
"msg.UserId"
ref=
"DeptTier"
:options=
"PersionList"
label=
"销售"
:dense=
"false"
class=
"col-3 "
emit-value
map-options
@
filter=
"filterFn2"
>
<template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
<div
class=
"col-3"
>
<q-select
filled
stack-label
use-input
input-debounce=
"0"
option-value=
"ClassId"
@
input=
"getList"
option-label=
"ClassName"
v-model=
"msg.ClassId"
:options=
"ClassList"
label=
"班级"
:dense=
"false"
emit-value
map-options
@
filter=
"filterFn"
>
<
template
v-slot:no-option
>
<q-item>
<q-item-section
class=
"text-grey"
>
未找到相关数据
</q-item-section>
</q-item>
</
template
>
</q-select>
</div>
</div>
</div>
<div
class=
"page-search row items-center"
>
<div
class=
"col row wrap q-mr-lg q-col-gutter-md"
>
<div
class=
"col-3"
>
<q-select
filled
stack-label
@
input=
"resetSearch()"
option-value=
"Id"
option-label=
"Name"
v-model=
"msg.PeriodId"
:options=
"PeriodsList"
label=
"周期"
:dense=
"false"
emit-value
map-options
/>
</div>
<div
class=
"col-3"
>
<q-input
filled
v-model=
"msg.OrderId"
@
keyup
.
enter
.
native=
"resetSearch()"
label=
"订单号"
/>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"resetSearch()"
option-label=
"Name"
v-model=
"msg.UserType"
:options=
"UserTypeList"
label=
"类型"
:dense=
"false"
emit-value
map-options
>
</q-select>
</div>
<div
class=
"col-3"
>
<q-select
filled
stack-label
input-debounce=
"0"
option-value=
"Id"
@
input=
"resetSearch()"
option-label=
"Name"
v-model=
"msg.IsDept"
:options=
"IsDeptList"
label=
"业绩方式"
:dense=
"false"
emit-value
map-options
>
</q-select>
</div>
</div>
</div>
<div
class=
"page-search row items-center"
style=
"justify-content: space-between;"
>
<span
style=
"font-size: 20px;font-weight: 400;"
>
提成统计
<span
style=
"font-size: 16px;"
>
(提成总计:{{TotalCommission}})
</span>
</span>
<q-btn
color=
"primary"
size=
"11px"
label=
"导出"
@
click=
"tcexport"
style=
"margin-left:10px"
/>
</div>
<
template
>
<el-table
ref=
"filterTable"
:data=
"tableData"
v-loading =
'loading'
:header-cell-style=
"
{backgroundColor:'#f5f6f7', color: '#a8a8b3'}"
border
style="width: 100%">
<el-table-column
prop=
"SchoolName"
label=
"校区"
width=
'150'
></el-table-column>
<el-table-column
prop=
"DeptName"
label=
"部门"
></el-table-column>
<el-table-column
prop=
"UserType"
label=
"类型"
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.UserType==1"
>
市场
</span>
<span
v-if=
"scope.row.UserType==2"
>
顾问
</span>
<span
v-if=
"scope.row.UserType==3"
>
教师
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"UserName"
label=
"人员"
>
</el-table-column>
<el-table-column
prop=
"IsDept"
label=
"业绩方式"
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.IsDept==1"
>
部门
</span>
<span
v-if=
"scope.row.IsDept==2"
>
个人
</span>
</
template
>
</el-table-column>
<el-table-column
width=
'170'
prop=
"ClassName"
label=
"班级信息"
>
<
template
slot-scope=
"scope"
>
<div><span
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlclass('/course/classManage',scope.row.ClassName)"
>
{{
scope
.
row
.
ClassName
}}
</span>
{{
scope
.
row
.
ClassTypeName
}}
<span
style=
"color: #409EFF;"
v-if=
'scope.row.IsContinueClass==1'
>
(续)
</span></div>
<div>
学生数量:
{{
scope
.
row
.
StudentCount
}}
人
</div>
<div>
班号:
{{
scope
.
row
.
ClassNo
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"OrderId"
label=
"订单号"
>
<
template
slot-scope=
"scope"
>
<div
style=
"cursor: pointer;text-decoration: underline;"
@
click=
"goUrlorderList('/sale/orderStatistics',scope.row)"
>
{{
scope
.
row
.
OrderId
}}
</div>
</
template
>
</el-table-column>
<el-table-column
width=
'130'
prop=
"TotalCommissionMoney"
label=
"订单发放信息"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
TotalCommissionMoney
}}
</div>
<div>
累计已发:
{{
scope
.
row
.
GiveOutMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"IsFirstCommission"
label=
"首次发放"
>
<
template
slot-scope=
"scope"
>
<div>
{{
scope
.
row
.
IsFirstCommission
==
1
?
'是'
:
'否'
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"TotalHours"
label=
"课时统计"
width=
'160'
>
<
template
slot-scope=
"scope"
>
<div>
总课时:
{{
scope
.
row
.
TotalHours
}}
</div>
<div>
已学习课时:
{{
scope
.
row
.
TotalLearn
}}
</div>
<div>
当期消费课时:
{{
scope
.
row
.
CurrentHours
>=
0
?
scope
.
row
.
CurrentHours
:
'-'
}}
</div>
</
template
>
</el-table-column>
<el-table-column
width=
'160'
prop=
"CurrentPeriodMoney"
label=
"当期发放信息"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(255, 156, 0);"
>
应发:
{{
scope
.
row
.
CurrentPeriodMoney
}}
</div>
<div>
抵扣:
{{
scope
.
row
.
DeductionMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
prop=
"YFMoney"
label=
"最终发放"
>
<
template
slot-scope=
"scope"
>
<div
style=
"color: rgb(233, 82, 82);"
>
{{
scope
.
row
.
YFMoney
}}
</div>
</
template
>
</el-table-column>
<el-table-column
width=
'85'
prop=
"Periods"
label=
"期数"
>
</el-table-column>
<el-table-column
prop=
"Remark"
width=
'160'
label=
"备注"
>
</el-table-column>
</el-table>
<div
style=
"margin-top: 10px;text-align: center;"
>
<el-pagination
background
@
current-change=
"handleCurrentChanges"
layout=
"total,prev, pager, next, jumper"
:current-page
.
sync=
"msg.PageIndex"
:page-size=
"msg.PageSize"
:total=
'total'
>
</el-pagination>
</div>
</template>
</div>
</template>
<
script
>
import
{
getSchoolDropdown
}
from
'../../../api/school/index'
import
{
queryEmployee
}
from
'../../../api/users/user'
import
{
getDeptTree
}
from
'../../../api/system/dept.js'
import
{
getSellAchievementsStatistics
,
getSellAchievementsPeriodsList
}
from
'../../../api/finance/index'
import
{
getClassDropDownList
,
}
from
"../../../api/school/index"
;
import
selectTree
from
'../../../components/common/select-tree'
import
{
EduDownLoad
,
}
from
'../../../api/common/common'
;
export
default
{
meta
:
{
title
:
"业绩提成统计"
},
props
:
{},
components
:
{
selectTree
},
data
()
{
return
{
loading
:
false
,
//列表数据参数
msg
:
{
PageIndex
:
1
,
PageSize
:
10
,
School_Id
:
'-1'
,
Depart_Id
:
0
,
PeriodId
:
0
,
UserId
:
0
,
ClassId
:
0
,
OrderId
:
''
,
UserType
:
0
,
//类型 1市场、2顾问、3教师
IsDept
:
0
,
//业绩方式 1部门 2个人
},
UserTypeList
:[{
Id
:
0
,
Name
:
'不限'
},{
Id
:
1
,
Name
:
'市场'
},{
Id
:
2
,
Name
:
'顾问'
},{
Id
:
3
,
Name
:
'教师'
},],
IsDeptList
:[{
Id
:
0
,
Name
:
'不限'
},{
Id
:
1
,
Name
:
'部门'
},{
Id
:
2
,
Name
:
'个人'
}],
pageCount
:
0
,
persistent
:
false
,
listData
:{},
tableData
:[],
total
:
0
,
company
:[],
department
:[],
ClassList
:[],
allClassList
:[],
returnString
:
[],
//默认岗位
see_tcdetailed
:
false
,
schoolList
:[],
DeptList
:
[],
// 部门下拉
PersionList
:
[],
//员工列表
AllemployeeList
:
[],
//所有员工
PeriodsList
:[],
//周期列表
TotalCommission
:
0
,
}
},
created
()
{
let
userinfo
=
this
.
getLocalStorage
();
userinfo
.
ActionMenuList
.
map
(
x
=>
{
//判断权限
if
(
x
.
FunctionCode
==
"see_tcdetailed"
){
//判断是否可以查看其他明细
this
.
see_tcdetailed
=
true
;
}
})
if
(
this
.
see_tcdetailed
==
false
){
this
.
msg
.
UserId
=
userinfo
.
Id
}
},
mounted
()
{
if
(
this
.
$route
.
query
&&
this
.
$route
.
query
.
OrderId
){
this
.
msg
.
OrderId
=
this
.
$route
.
query
.
OrderId
}
this
.
getList
()
this
.
setClass
()
this
.
getBranchList
()
this
.
getDepartList
(
0
);
this
.
getEmployee
();
this
.
getPeriodList
()
},
methods
:
{
resetSearch
()
{
console
.
log
(
this
.
msg
)
this
.
msg
.
PageIndex
=
1
;
this
.
getList
()
},
getList
(){
if
(
this
.
msg
)
this
.
loading
=
true
;
getSellAchievementsStatistics
(
this
.
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
loading
=
false
;
this
.
tableData
=
res
.
Data
.
PageData
.
List
this
.
TotalCommission
=
res
.
Data
.
PageData
.
TotalCommission
this
.
total
=
res
.
Data
.
Count
}
})
},
unique
(
arr
,
Name
){
//数组去重
const
res
=
new
Map
();
return
arr
.
filter
(
(
list
)
=>
!
res
.
has
(
list
.
text
)
&&
res
.
set
(
list
.
text
,
1
)
);
},
handleCurrentChanges
(
val
){
this
.
msg
.
PageIndex
=
val
;
this
.
getList
()
},
//选择班级
setClass
(
item
)
{
this
.
isShowClass
=
true
;
getClassDropDownList
({
CourseId
:
0
,
IsAddDefault
:
1
,
//添加默认选项
}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
var
jsonData
=
res
.
Data
;
let
obj
=
{
ClassId
:
0
,
ClassName
:
'不限'
}
jsonData
.
unshift
(
obj
)
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
allClassList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
}
});
},
//筛选员工
filterFn
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
ClassList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
allClassList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
ClassList
=
this
.
allClassList
.
filter
(
v
=>
v
.
ClassName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
getBranchList
(){
//获取校区
getSchoolDropdown
({}).
then
(
res
=>
{
this
.
schoolList
=
res
.
Data
;
var
obj
=
{
SName
:
'全部'
,
SId
:
'-1'
}
this
.
schoolList
.
unshift
(
obj
);
}).
catch
(()
=>
{
})
},
//获取部门下拉数据
getDepartList
(
id
)
{
if
(
id
==-
1
){
id
=
0
}
let
msg
=
{
School_Id
:
id
}
getDeptTree
(
msg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
DeptList
=
res
.
Data
;
}
})
},
getChild
(
deptArray
)
{
var
tempStr
=
""
;
if
(
deptArray
&&
deptArray
!=
''
)
{
tempStr
=
deptArray
;
}
if
(
tempStr
)
{
this
.
msg
.
Depart_Id
=
tempStr
;
}
else
{
this
.
msg
.
Depart_Id
=
0
;
}
this
.
resetSearch
();
},
//筛选员工
filterFn2
(
val
,
update
)
{
update
(()
=>
{
if
(
val
===
''
)
{
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
AllemployeeList
))
}
else
{
const
needle
=
val
.
toLowerCase
()
this
.
PersionList
=
this
.
AllemployeeList
.
filter
(
v
=>
v
.
EmployeeName
.
toLowerCase
().
indexOf
(
needle
)
>
-
1
)
}
})
},
//获取员工列表
getEmployee
()
{
var
qMsg
=
{
EmployeeName
:
""
}
queryEmployee
(
qMsg
).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
let
obj
=
{
EmployeeName
:
'不限'
,
Id
:
0
}
res
.
Data
.
unshift
(
obj
)
var
jsonData
=
res
.
Data
;
if
(
jsonData
&&
jsonData
.
length
>
0
)
{
this
.
AllemployeeList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));
this
.
PersionList
=
JSON
.
parse
(
JSON
.
stringify
(
jsonData
));;
}
}
})
},
getPeriodList
(){
//获取周期下拉列表
getSellAchievementsPeriodsList
({}).
then
(
res
=>
{
if
(
res
.
Code
==
1
)
{
this
.
PeriodsList
=
res
.
Data
let
obj
=
{
Name
:
'不限'
,
Id
:
0
}
this
.
PeriodsList
.
unshift
(
obj
)
}
})
},
tcexport
(){
//导出
var
msg
=
JSON
.
parse
(
JSON
.
stringify
(
this
.
msg
));
EduDownLoad
(
"/SellAchievements/GetSellAchievementsStatisticsToExcel"
,
msg
,
"业绩提成统计.xls"
)
},
goUrlclass
(
path
,
Names
){
//班级
let
Name
=
encodeURI
(
Names
)
this
.
OpenNewUrl
(
path
,
{
ClassName
:
Name
,
});
},
goUrlorderList
(
path
,
row
){
//订单跳转
this
.
OpenNewUrl
(
path
,
{
OrderId
:
row
.
OrderId
,
// EnterID:row.UserId
});
},
},
}
</
script
>
<
style
lang=
"sass"
>
@import
url('~assets/css/table.sass')
</
style
>
\ No newline at end of file
src/router/routes.js
View file @
0546af81
...
...
@@ -719,6 +719,35 @@ const routes = [{
component
:
()
=>
import
(
"pages/financial/market/courseConsultant.vue"
)
},
{
path
:
"/financial/market/achievementPeriodsList"
,
// 业绩提成 分期列表
component
:
()
=>
import
(
"pages/financial/market/achievementPeriodsList.vue"
)
},
{
path
:
"/financial/market/employeeCommission"
,
// 业绩提成 员工提成
component
:
()
=>
import
(
"pages/financial/market/employeeCommission.vue"
)
},
{
path
:
"/financial/market/AchievementsUserDetailList"
,
// 业绩提成 员工提成明细列表
component
:
()
=>
import
(
"pages/financial/market/AchievementsUserDetailList.vue"
)
},
{
path
:
"/financial/market/AchievementsForOrderList"
,
// 业绩提成 获取订单跳转 提成详情
component
:
()
=>
import
(
"pages/financial/market/AchievementsForOrderList.vue"
)
},
{
path
:
"/financial/market/marketStatistics"
,
// 业绩提成 统计
component
:
()
=>
import
(
"pages/financial/market/marketStatistics.vue"
)
},
...
...
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