Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cloud-platform-ui
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
youjj
cloud-platform-ui
Commits
63f74695
Commit
63f74695
authored
Nov 13, 2020
by
lixy
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'dev-td' into master-td
parents
1ae390ae
776ccc9e
Changes
9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1360 additions
and
261 deletions
+1360
-261
financialReports.js
src/api/financialReports.js
+36
-0
memeber.js
src/api/order/memeber.js
+24
-2
index.js
src/router/index.js
+21
-0
dividendStatistics.vue
src/views/financialReports/dividendStatistics.vue
+266
-0
oneDividend.vue
src/views/financialReports/oneDividend.vue
+228
-0
revenueStatistics.vue
src/views/financialReports/revenueStatistics.vue
+259
-0
addMemberModal.vue
src/views/order/memberOrderInfo/addMemberModal.vue
+192
-0
index.vue
src/views/order/memberOrderInfo/index.vue
+226
-205
index.vue
src/views/order/orderStatistics/index.vue
+108
-54
No files found.
src/api/financialReports.js
0 → 100644
View file @
63f74695
import
fetch
from
'utils/fetch'
;
/**
* 获取统计列表
* @param query
*/
export
function
financialList
(
query
)
{
return
fetch
({
url
:
'/api/admin/memberShareCountRecord/selectList'
,
method
:
'get'
,
params
:
query
});
}
/**
* 分红明细列表
*/
export
function
getAllRecord
(
query
)
{
return
fetch
({
url
:
'/api/admin/memberShareRecord/getAllRecord'
,
method
:
'get'
,
params
:
query
});
}
/**
* 创客收益统计列表
*/
export
function
memberShareCountRecord
(
query
)
{
return
fetch
({
url
:
'/api/admin/memberShareRecord/getAllCountRecord'
,
method
:
'get'
,
params
:
query
});
}
src/api/order/memeber.js
View file @
63f74695
...
...
@@ -4,6 +4,28 @@ export function page(query) {
return
fetch
({
url
:
'/api/order/baseOrder/getOrderList'
,
method
:
'get'
,
params
:
query
params
:
query
});
}
\ No newline at end of file
}
/**
* 会员等级
*/
export
function
memberLevels
(
query
)
{
return
fetch
({
url
:
'/api/admin/member/app/unauth/levels'
,
method
:
'get'
,
params
:
query
});
}
/**
* 会员录入
*/
export
function
createMemberOrder
(
query
)
{
return
fetch
({
url
:
'/api/order/orderMember/baseOrder/createOrder'
,
method
:
'post'
,
data
:
query
});
}
src/router/index.js
View file @
63f74695
...
...
@@ -679,6 +679,27 @@ export const asyncRouterMap = [
},
],
},
{
path
:
"/financialReports"
,
component
:
Layout
,
name
:
"财务报表"
,
icon
:
"setting"
,
authority
:
"financialReports"
,
children
:
[
{
path
:
"dividendStatistics"
,
component
:
_import
(
"financialReports/dividendStatistics"
),
name
:
"创客收益"
,
authority
:
"dividendStatistics"
,
},
{
path
:
"revenueStatistics"
,
component
:
_import
(
"financialReports/revenueStatistics"
),
name
:
"创客收益统计"
,
authority
:
"revenueStatistics"
,
}
],
},
{
path
:
"/summit"
,
component
:
Layout
,
...
...
src/views/financialReports/dividendStatistics.vue
0 → 100644
View file @
63f74695
<
template
>
<div
class=
"app-container calendar-list-container"
v-loading
.
body=
"showLoadingBody"
>
<div
class=
"filter-container"
ref=
"filter-container"
>
<el-form
ref=
"queryForm"
:inline=
"inline"
:model=
"listQuery"
label-width=
"100px"
class=
"ulti-form"
>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"姓名"
>
<el-input
v-model
.
number=
"listQuery.name"
placeholder=
"请输入姓名"
></el-input>
</el-form-item>
</el-col>
<el-col
:span=
"10"
>
<el-form-item
label=
"时间"
>
<el-date-picker
v-model=
"dateList"
type=
"monthrange"
value-format=
"yyyy-MM"
range-separator=
"至"
start-placeholder=
"开始月份"
end-placeholder=
"结束月份"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
@
click=
"handleFilter"
>
搜索
</el-button>
<el-button
class=
"filter-item"
style=
"margin-left: 10px;"
@
click=
"handleClean"
>
清除搜索
</el-button>
<el-button
class=
"filter-item"
style=
"margin-left: 10px;"
@
click=
"handleExport"
>
导出
</el-button>
</div>
<el-table
:key=
'tableKey'
:data=
"list"
border
fit
highlight-current-row
style=
"width: 100%"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
width=
"65"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"统计时间"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
countMonth
}}
</span>
</
template
>
</el-table-column>
<el-table-column
width=
"300"
align=
"center"
label=
"会员"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
realName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
width=
"200"
align=
"center"
label=
"等级"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
levelName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"总分红"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
amount
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
width=
"150"
label=
"操作"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"small"
class=
"el-button el-button--text el-button--small"
@
click=
"handleSee(scope.row)"
>
查看明细
</el-button>
</
template
>
</el-table-column>
</el-table>
<div
v-show=
"!listLoading"
class=
"pagination-container"
>
<el-pagination
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page
.
sync=
"listQuery.page"
:page-sizes=
"[10,20,30, 50]"
:page-size=
"listQuery.limit"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"total"
></el-pagination>
</div>
<el-dialog
:visible
.
sync=
"oneDialogVisible"
title=
"分红明细"
>
<one-dividend
:one-row=
"oneRow"
v-on:oneDialogEvent=
"oneDialogEvent"
></one-dividend>
</el-dialog>
</div>
</template>
<
style
>
.el-date-editor
.el-range-separator
{
width
:
auto
!important
;
}
</
style
>
<
script
type=
"javascript"
>
import
{
mapGetters
}
from
'vuex'
;
import
{
getToken
}
from
'utils/auth'
;
import
{
financialList
}
from
'api/financialReports'
;
import
oneDividend
from
"./oneDividend"
;
import
Element1
from
"../admin/menu/components/element"
;
import
ElRow
from
"element-ui/packages/row/src/row"
;
import
ElCol
from
"element-ui/packages/col/src/col"
;
export
default
{
name
:
'tourManage'
,
components
:
{
ElCol
,
ElRow
,
Element1
,
oneDividend
},
data
()
{
return
{
BASE_API
:
process
.
env
.
BASE_API
,
oneDialogVisible
:
false
,
//查看明细
showLoadingBody
:
false
,
oneRow
:
{},
list
:
[],
total
:
0
,
listLoading
:
true
,
listQuery
:
{
page
:
1
,
limit
:
20
,
startDate
:
undefined
,
endDate
:
undefined
,
name
:
''
// 姓名
},
dateList
:
''
,
inline
:
true
,
tableKey
:
0
}
},
created
()
{
this
.
getList
();
},
computed
:
{
...
mapGetters
([
'elements'
])
},
methods
:
{
/**
* 查看明细
* */
handleSee
(
row
)
{
this
.
oneRow
=
row
;
this
.
oneDialogVisible
=
true
;
},
/**
* 旅游modal传递回来的数据
* */
oneDialogEvent
(
e
){
this
.
oneDialogVisible
=
false
;
},
/**
* 获取列表
* */
getList
()
{
this
.
listLoading
=
true
;
financialList
(
this
.
listQuery
).
then
(
response
=>
{
let
totalCountRs
=
0
;
let
listRs
=
[];
if
(
!
this
.
$utils
.
isEmpty
(
response
.
data
.
data
)
&&
this
.
$utils
.
isInteger
(
response
.
data
.
totalCount
))
{
listRs
=
response
.
data
.
data
;
totalCountRs
=
response
.
data
.
totalCount
;
}
this
.
listLoading
=
false
;
this
.
list
=
listRs
;
this
.
total
=
totalCountRs
;
})
},
/**
* 清除搜索
*/
handleClean
(){
this
.
listQuery
=
{
page
:
1
,
limit
:
20
,
startDate
:
undefined
,
endDate
:
undefined
,
name
:
''
// 姓名
}
this
.
dateList
=
''
this
.
getList
()
},
/**
* 导出
*/
handleExport
()
{
var
url
=
this
.
BASE_API
+
"/api/admin/memberShareCountRecord/export"
;
if
(
this
.
dateList
)
{
this
.
listQuery
.
startDate
=
this
.
dateList
[
0
]
this
.
listQuery
.
endDate
=
this
.
dateList
[
1
]
}
var
params
=
this
.
listQuery
;
for
(
var
c
in
params
)
{
if
(
!
params
[
c
])
{
delete
params
[
c
];
}
if
(
c
==
"page"
)
{
delete
params
[
c
];
}
if
(
c
==
"limit"
)
{
delete
params
[
c
];
}
}
console
.
log
(
params
);
let
paramsArray
=
[];
//拼接参数
Object
.
keys
(
params
).
forEach
((
key
)
=>
paramsArray
.
push
(
key
+
"="
+
params
[
key
])
);
if
(
url
.
search
(
/
\?
/
)
===
-
1
)
{
url
+=
"?"
+
paramsArray
.
join
(
"&"
);
}
else
{
url
+=
"&"
+
paramsArray
.
join
(
"&"
);
}
console
.
log
(
url
);
this
.
exportExcel
(
url
);
},
exportExcel
(
excelUrl
)
{
fetch
(
excelUrl
,
{
headers
:
{
"Authorization"
:
getToken
(),
"Content-type"
:
"application/json;charset=UTF-8"
},
}).
then
((
res
)
=>
res
.
blob
().
then
((
blob
)
=>
{
var
filename
=
`创客收益.xlsx`
;
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
,
filename
);
//兼容ie10
}
else
{
var
a
=
document
.
createElement
(
"a"
);
document
.
body
.
appendChild
(
a
);
//兼容火狐,将a标签添加到body当中
var
url
=
window
.
URL
.
createObjectURL
(
blob
);
// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
a
.
href
=
url
;
a
.
download
=
filename
;
a
.
target
=
"_blank"
;
// a标签增加target属性
a
.
click
();
a
.
remove
();
//移除a标签
window
.
URL
.
revokeObjectURL
(
url
);
}
})
);
},
/**
* 搜索
*/
handleFilter
()
{
this
.
listQuery
.
page
=
1
;
if
(
this
.
dateList
)
{
this
.
listQuery
.
startDate
=
this
.
dateList
[
0
]
this
.
listQuery
.
endDate
=
this
.
dateList
[
1
]
}
this
.
$refs
.
queryForm
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
getList
();
}
else
{
return
false
;
}
});
},
handleSizeChange
(
val
)
{
this
.
listQuery
.
limit
=
val
;
this
.
getList
();
},
handleCurrentChange
(
val
)
{
this
.
listQuery
.
page
=
val
;
this
.
getList
();
}
}
}
</
script
>
src/views/financialReports/oneDividend.vue
0 → 100644
View file @
63f74695
<
template
>
<div
v-loading
.
body=
"showLoadingBody"
>
<el-table
:key=
'tableKey'
:data=
"list"
border
fit
highlight-current-row
style=
"width: 100%"
>
<el-table-column
type=
"index"
align=
"center"
label=
"序号"
width=
"65"
>
</el-table-column>
<el-table-column
align=
"center"
label=
"会员单号"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
orderNo
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"下单用户"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
realName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"下单时间"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
payTimeStr
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"订单金额"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
orderAmount
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"总分红"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
totalAmount
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"分红人数"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
memberNum
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"分红人"
>
<
template
slot-scope=
"scope"
>
<span>
{{
oneRow
.
levelName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"等级"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
levelName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"分红"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
amount
}}
</span>
</
template
>
</el-table-column>
</el-table>
<div
v-show=
"!listLoading"
class=
"pagination-container"
>
<el-pagination
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page
.
sync=
"listQuery.page"
:page-sizes=
"[10,20,30, 50]"
:page-size=
"listQuery.limit"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"total"
></el-pagination>
</div>
<div
slot=
"footer"
style=
"display:flex;justify-content: flex-end; margin-top:10px;"
>
<el-button
@
click=
"cancel"
>
关 闭
</el-button>
<el-button
type=
"primary"
@
click=
"handleExport"
>
导 出
</el-button>
</div>
</div>
</template>
<
style
>
.el-date-editor
.el-range-separator
{
width
:
auto
!important
;
}
</
style
>
<
script
type=
"javascript"
>
import
{
timestamp2Date
}
from
'utils/dateUtils'
;
import
{
mapGetters
}
from
'vuex'
;
import
{
getToken
}
from
'src/utils/auth'
;
import
{
getAllRecord
}
from
'api/financialReports'
;
import
Element1
from
"../admin/menu/components/element"
;
import
ElRow
from
"element-ui/packages/row/src/row"
;
import
ElCol
from
"element-ui/packages/col/src/col"
;
export
default
{
props
:
[
'oneRow'
],
name
:
'tourManage'
,
components
:
{
ElCol
,
ElRow
,
Element1
},
data
()
{
return
{
BASE_API
:
process
.
env
.
BASE_API
,
showLoadingBody
:
false
,
list
:
[],
total
:
0
,
listQuery
:
{
page
:
1
,
limit
:
20
,
userId
:
this
.
oneRow
.
userId
},
listLoading
:
true
,
tableKey
:
0
}
},
mounted
()
{
this
.
getList
();
},
computed
:
{
...
mapGetters
([
'elements'
])
},
methods
:
{
/**
* 获取列表
* */
getList
()
{
this
.
listLoading
=
true
;
getAllRecord
(
this
.
listQuery
).
then
(
response
=>
{
let
totalCountRs
=
undefined
;
let
listRs
=
undefined
;
if
(
!
this
.
$utils
.
isEmpty
(
response
.
data
.
data
)
&&
this
.
$utils
.
isInteger
(
response
.
data
.
totalCount
))
{
listRs
=
response
.
data
.
data
;
totalCountRs
=
response
.
data
.
totalCount
;
listRs
.
map
(
function
(
item
){
item
.
payTimeStr
=
timestamp2Date
(
item
.
payTime
);
});
}
this
.
listLoading
=
false
;
this
.
list
=
listRs
;
this
.
total
=
totalCountRs
;
})
},
/**
* 导出
*/
handleExport
()
{
var
url
=
this
.
BASE_API
+
"/api/admin/memberShareRecord/export"
;
var
params
=
this
.
listQuery
;
for
(
var
c
in
params
)
{
if
(
!
params
[
c
])
{
delete
params
[
c
];
}
if
(
c
==
"page"
)
{
delete
params
[
c
];
}
if
(
c
==
"limit"
)
{
delete
params
[
c
];
}
}
console
.
log
(
params
);
let
paramsArray
=
[];
//拼接参数
Object
.
keys
(
params
).
forEach
((
key
)
=>
paramsArray
.
push
(
key
+
"="
+
params
[
key
])
);
if
(
url
.
search
(
/
\?
/
)
===
-
1
)
{
url
+=
"?"
+
paramsArray
.
join
(
"&"
);
}
else
{
url
+=
"&"
+
paramsArray
.
join
(
"&"
);
}
console
.
log
(
url
);
this
.
exportExcel
(
url
);
},
exportExcel
(
excelUrl
)
{
fetch
(
excelUrl
,
{
headers
:
{
"Content-type"
:
"application/json;charset=UTF-8"
,
"Authorization"
:
getToken
()
},
}).
then
((
res
)
=>
res
.
blob
().
then
((
blob
)
=>
{
var
filename
=
`分红明细.xlsx`
;
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
,
filename
);
//兼容ie10
}
else
{
var
a
=
document
.
createElement
(
"a"
);
document
.
body
.
appendChild
(
a
);
//兼容火狐,将a标签添加到body当中
var
url
=
window
.
URL
.
createObjectURL
(
blob
);
// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
a
.
href
=
url
;
a
.
download
=
filename
;
a
.
target
=
"_blank"
;
// a标签增加target属性
a
.
click
();
a
.
remove
();
//移除a标签
window
.
URL
.
revokeObjectURL
(
url
);
}
})
);
},
/**
* 搜索
*/
handleFilter
()
{
this
.
listQuery
.
page
=
1
;
if
(
this
.
dateList
)
{
this
.
listQuery
.
startDate
=
this
.
dateList
[
0
]
this
.
listQuery
.
endDate
=
this
.
dateList
[
1
]
}
this
.
$refs
.
queryForm
.
validate
(
valid
=>
{
if
(
valid
)
{
this
.
getList
();
}
else
{
return
false
;
}
});
},
handleSizeChange
(
val
)
{
this
.
listQuery
.
limit
=
val
;
this
.
getList
();
},
handleCurrentChange
(
val
)
{
this
.
listQuery
.
page
=
val
;
this
.
getList
();
},
cancel
(){
this
.
$emit
(
'oneDialogEvent'
,
false
)
}
}
}
</
script
>
src/views/financialReports/revenueStatistics.vue
0 → 100644
View file @
63f74695
<
template
>
<div
class=
"app-container calendar-list-container"
>
<div
class=
"filter-container"
>
<el-form
ref=
"queryForm"
:model=
"listQuery"
label-width=
"100px"
>
<el-row>
<el-col
:span=
"8"
>
<el-form-item
label=
"统计时间:"
>
<el-date-picker
v-model=
"listQuery.time"
type=
"daterange"
range-separator=
"-"
value-format=
"timestamp"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
@
change=
"changeTime"
placeholder=
"请选择统计时间"
></el-date-picker>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
label=
"统计方式:"
class=
"wayMsg"
>
<span
v-for=
"(item,index) in way"
:key=
"index"
:class=
"
{active:isactive==item.label}"
@click="changeWay(item)"
>
{{
item
.
label
}}
</span>
</el-form-item>
</el-col>
<el-col
:span=
"5"
style=
"float:right;text-align:right"
>
<el-button
class=
"filter-item"
type=
"primary"
v-waves
@
click=
"handleFilter"
>
导出为Excel
</el-button>
</el-col>
</el-row>
</el-form>
<el-table
:data=
"list"
border
fit
highlight-current-row
v-loading=
"loading"
>
<el-table-column
align=
"center"
label=
"统计时间"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
date
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"会员等级"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
levelName
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"会员人数"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
userNum
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"总分红"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
totalAmount
}}
</span>
</
template
>
</el-table-column>
</el-table>
<el-pagination
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page
.
sync=
"listQuery.page"
:page-sizes=
"[10,20,30, 50]"
:page-size=
"listQuery.limit"
layout=
"total, sizes, prev, pager, next, jumper"
:total=
"total"
style=
"margin-top:20px"
></el-pagination>
</div>
</div>
</template>
<
script
type=
"javascript"
>
import
{
memberShareCountRecord
}
from
'api/financialReports'
import
{
getToken
}
from
'utils/auth'
;
export
default
{
data
()
{
return
{
BASE_API
:
process
.
env
.
BASE_API
,
loading
:
false
,
total
:
null
,
list
:
[],
scrollTop
:
''
,
// 统计时间筛选
listQuery
:
{
type
:
'1'
,
startDate
:
null
,
endDate
:
null
,
time
:
''
,
limit
:
10
,
page
:
1
},
//统计方式筛选
way
:
[
{
label
:
'日统计'
,
id
:
'1'
},
{
label
:
'月统计'
,
id
:
'2'
},
{
label
:
'年统计'
,
id
:
'3'
}
],
isactive
:
'日统计'
}
},
created
()
{
this
.
getList
()
},
methods
:
{
//统计时间筛选
changeTime
()
{
if
(
this
.
listQuery
.
time
){
!!
this
.
listQuery
.
time
[
0
]
?
(
this
.
listQuery
.
startDate
=
this
.
listQuery
.
time
[
0
])
:
(
this
.
listQuery
.
startDate
=
null
)
!!
this
.
listQuery
.
time
[
1
]
?
(
this
.
listQuery
.
endDate
=
this
.
listQuery
.
time
[
1
])
:
(
this
.
listQuery
.
endDate
=
null
)
}
else
{
this
.
listQuery
.
endDate
=
undefined
this
.
listQuery
.
startDate
=
undefined
}
this
.
listQuery
.
page
=
1
this
.
getList
()
},
//统计方式筛选
changeWay
(
val
)
{
this
.
isactive
=
val
.
label
this
.
listQuery
.
type
=
val
.
id
this
.
listQuery
.
page
=
1
this
.
getList
()
},
/**
* 导出
*/
handleFilter
()
{
var
url
=
this
.
BASE_API
+
"/api/admin/memberShareRecord/exportCountRecordList"
;
var
params
=
this
.
listQuery
;
for
(
var
c
in
params
)
{
if
(
!
params
[
c
])
{
delete
params
[
c
];
}
if
(
c
==
"page"
)
{
delete
params
[
c
];
}
if
(
c
==
"limit"
)
{
delete
params
[
c
];
}
if
(
c
==
"time"
)
{
delete
params
[
c
];
}
}
console
.
log
(
params
);
let
paramsArray
=
[];
//拼接参数
Object
.
keys
(
params
).
forEach
((
key
)
=>
paramsArray
.
push
(
key
+
"="
+
params
[
key
])
);
if
(
url
.
search
(
/
\?
/
)
===
-
1
)
{
url
+=
"?"
+
paramsArray
.
join
(
"&"
);
}
else
{
url
+=
"&"
+
paramsArray
.
join
(
"&"
);
}
console
.
log
(
url
);
this
.
exportExcel
(
url
);
},
exportExcel
(
excelUrl
)
{
fetch
(
excelUrl
,
{
headers
:
{
"Authorization"
:
getToken
(),
"Content-type"
:
"application/json;charset=UTF-8"
},
}).
then
((
res
)
=>
res
.
blob
().
then
((
blob
)
=>
{
var
filename
=
`创客收益统计.xlsx`
;
if
(
window
.
navigator
.
msSaveOrOpenBlob
)
{
navigator
.
msSaveBlob
(
blob
,
filename
);
//兼容ie10
}
else
{
var
a
=
document
.
createElement
(
"a"
);
document
.
body
.
appendChild
(
a
);
//兼容火狐,将a标签添加到body当中
var
url
=
window
.
URL
.
createObjectURL
(
blob
);
// 获取 blob 本地文件连接 (blob 为纯二进制对象,不能够直接保存到磁盘上)
a
.
href
=
url
;
a
.
download
=
filename
;
a
.
target
=
"_blank"
;
// a标签增加target属性
a
.
click
();
a
.
remove
();
//移除a标签
window
.
URL
.
revokeObjectURL
(
url
);
}
})
);
},
handleSizeChange
(
val
)
{
this
.
listQuery
.
limit
=
val
this
.
getList
()
},
handleCurrentChange
(
val
)
{
this
.
listQuery
.
page
=
val
this
.
getList
()
},
// 数组去重
repeat
(
json
){
try
{
let
newJson
=
[];
for
(
var
i
=
0
;
i
<
json
.
length
;
i
++
){
let
flag
=
true
;
for
(
var
j
=
0
;
j
<
newJson
.
length
;
j
++
){
if
(
newJson
[
j
].
tname
==
json
[
i
].
tname
)
{
flag
=
false
;
}
}
if
(
flag
){
//判断是否重复
newJson
.
push
(
json
[
i
]);
}
}
return
newJson
}
catch
(
err
){
console
.
log
(
err
)
}
},
//列表
getList
()
{
let
_this
=
this
let
params
=
{
type
:
this
.
listQuery
.
type
,
startDate
:
this
.
listQuery
.
startDate
,
endDate
:
this
.
listQuery
.
endDate
,
page
:
this
.
listQuery
.
page
,
limit
:
this
.
listQuery
.
limit
}
this
.
loading
=
true
memberShareCountRecord
(
params
).
then
(
data
=>
{
if
(
data
.
status
==
200
)
{
this
.
total
=
data
.
data
.
total
this
.
list
=
data
.
data
.
data
}
setTimeout
(()
=>
{
this
.
loading
=
false
},
300
)
document
.
documentElement
.
scrollTop
=
0
})
}
}
}
</
script
>
<
style
>
.wayMsg
span
{
margin
:
10px
;
cursor
:
pointer
;
}
.active
{
color
:
#409eff
;
font-weight
:
bold
;
}
</
style
>
src/views/order/memberOrderInfo/addMemberModal.vue
0 → 100644
View file @
63f74695
<
template
>
<el-dialog
title=
"新增订单"
:visible
.
sync=
"memberDialogVisible"
@
close=
"closePop"
:modal=
"false"
class=
"flex-aic vehicle-dialog"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"140px"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"用户手机号"
prop=
"phone"
>
<el-input
v-model=
"form.phone"
placeholder=
"输入用户手机号"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"会员等级"
prop=
"memberIndex"
>
<el-select
class=
"filter-item"
v-model=
"form.memberIndex"
placeholder=
"请选择会员类型"
@
change=
"changeLevel"
>
<el-option
v-for=
"(item, index) in memeberList"
:key=
"item.level"
:label=
"item.name"
:value=
"index"
>
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"免费天数"
>
<el-input
v-model=
"form.freeDay"
placeholder=
"输入免费天数"
type=
"number"
readonly
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"实付金额"
prop=
"orderAmount"
>
<el-input
v-model=
"form.orderAmount"
placeholder=
"输入实付金额"
type=
"number"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"下单时间"
prop=
"payTime"
>
<el-date-picker
v-model=
"form.payTime"
:picker-options=
"pickerOptions"
type=
"datetime"
value-format=
"timestamp"
placeholder=
"选择下单时间"
>
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div
slot=
"footer"
class=
"dialog-footer"
>
<el-button
type=
"primary"
@
click=
"handleSubmit"
v-if=
"!isClick"
>
确 定
</el-button>
<el-button
type=
"primary"
style=
"opacity: 0.6;"
v-if=
"isClick"
>
确 定
</el-button>
<el-button
@
click=
"closePop"
>
关 闭
</el-button>
</div>
</el-dialog>
</
template
>
<
script
type=
"javascript"
>
import
{
memberLevels
,
createMemberOrder
}
from
'api/order/memeber'
export
default
{
name
:
'addMemberModal'
,
data
()
{
return
{
memberDialogVisible
:
false
,
form
:
{
memberIndex
:
undefined
,
// 会员等级index
memberLevel
:
undefined
,
// 会员等级
freeDay
:
undefined
,
// 当前会员等级免费天数
phone
:
undefined
,
// 用户手机号
orderAmount
:
undefined
,
// 实付金额
payTime
:
undefined
// 下单时间
},
pickerOptions
:
{
disabledDate
(
time
)
{
return
time
.
getTime
()
>
Date
.
now
();
}
},
isClick
:
false
,
// 是否已点击,防二次触发
selectedMember
:{},
// 当前已选会员等级
rules
:
{
phone
:
{
required
:
true
,
message
:
'请输入用户手机号'
,
trigger
:
'blur'
},
memberIndex
:
{
required
:
true
,
message
:
'请选择会员等级'
,
trigger
:
'change'
},
payTime
:
{
required
:
true
,
message
:
'请选择下单时间'
,
trigger
:
'change'
},
orderAmount
:
{
required
:
true
,
message
:
'请填写正确的实付金额,最多保留2位小数'
,
trigger
:
'blur'
,
transform
(
value
)
{
if
(
value
!==
null
&&
value
!==
''
&&
value
!==
undefined
)
{
if
(
String
(
value
).
trim
()
===
''
||
Number
(
value
)
<=
0
)
{
return
false
}
else
if
(
!
/^
\d
+
(\.\d{0,2})?
$/
.
test
(
value
))
{
return
false
}
else
{
return
parseFloat
(
value
).
toFixed
(
2
)
}
}
else
{
return
null
}
}
}
},
memeberList
:
[],
// 会员类型列表
}
},
created
()
{
this
.
getAllMemeberList
()
// 获取全部会员等级
},
mounted
()
{
this
.
memberDialogVisible
=
true
},
methods
:
{
/**
* 获取全部会员列表
*/
getAllMemeberList
(){
memberLevels
().
then
(
res
=>
{
this
.
memeberList
=
res
})
},
closePop
(){
this
.
$emit
(
'memberEvent'
,
false
)
},
/**
* 会员等级变化
*/
changeLevel
(
index
){
this
.
selectedMember
=
this
.
memeberList
[
index
]
this
.
form
.
memberLevel
=
this
.
selectedMember
.
level
this
.
form
.
freeDay
=
this
.
selectedMember
.
number
},
/**
* 确定
*/
handleSubmit
()
{
let
_this
=
this
const
set
=
this
.
$refs
;
if
(
this
.
isClick
)
{
return
;
}
this
.
isClick
=
true
;
setTimeout
(
function
(){
_this
.
isClick
=
false
},
2000
)
set
[
"form"
].
validate
((
valid
)
=>
{
let
params
=
{
phone
:
_this
.
form
.
phone
,
payTime
:
_this
.
form
.
payTime
,
orderAmount
:
_this
.
form
.
orderAmount
,
memberLevel
:
_this
.
selectedMember
.
level
,
memberLevelId
:
_this
.
selectedMember
.
id
}
if
(
valid
)
{
createMemberOrder
(
params
).
then
((
response
)
=>
{
if
(
response
.
status
==
200
)
{
this
.
$notify
({
title
:
"操作成功"
,
message
:
"添加成功"
,
type
:
"success"
,
duration
:
2000
,
});
setTimeout
(
function
(){
_this
.
$emit
(
"memberEvent"
,
true
);
},
1000
)
}
else
{
this
.
isClick
=
false
;
this
.
$notify
({
title
:
"失败"
,
message
:
response
.
message
,
type
:
"error"
,
duration
:
2000
,
});
}
});
}
})
}
}
}
</
script
>
src/views/order/memberOrderInfo/index.vue
View file @
63f74695
This diff is collapsed.
Click to expand it.
src/views/order/orderStatistics/index.vue
View file @
63f74695
...
...
@@ -4,7 +4,7 @@
<div
class=
"filter-container"
>
<el-form
ref=
"queryForm"
:model=
"listQuery"
label-width=
"100px"
>
<el-row>
<el-col
:span=
"
6
"
>
<el-col
:span=
"
8
"
>
<el-form-item
label=
"统计时间:"
>
<el-date-picker
v-model=
"listQuery.time"
...
...
@@ -38,36 +38,38 @@
<span>
{{
scope
.
row
.
timeSlot
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"普通会员购买量"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
pNumber
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"支付金额(普通会员)"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
pAmount
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"黄金会员购买量"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
goldNumber
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"支付金额(黄金会员)"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
goldAmount
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"钻石会员购买量"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
hNumber
}}
</span>
</
template
>
</el-table-column>
<el-table-column
align=
"center"
label=
"支付金额(钻石会员)"
>
<el-table-column
align=
"center"
:label=
"item.name"
v-for=
"item in tableHead"
:key=
"item.name"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
hAmount
}}
</span>
<span
v-for=
"(iitem, iindex) in scope.row.members"
:key=
"iindex"
v-if=
"iitem.level == item.level && item.type=='number'"
>
{{
iitem
.
number
}}
</span>
<span
v-for=
"(iitem, iindex) in scope.row.members"
:key=
"iindex"
v-if=
"iitem.level == item.level && item.type=='amount'"
>
{{
iitem
.
amount
}}
</span>
</
template
>
</el-table-column>
<!-- <el-table-column align="center" label="支付金额(普通会员)">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.pAmount}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="黄金会员购买量">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.goldNumber}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="支付金额(黄金会员)">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.goldAmount}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="钻石会员购买量">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.hNumber}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" label="支付金额(钻石会员)">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{scope.row.hAmount}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column
align=
"center"
label=
"总支付金额"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
row
.
totalPayment
}}
</span>
...
...
@@ -88,21 +90,22 @@
</div>
</div>
</template>
<
script
>
<
script
type=
"javascript"
>
import
{
orderStatistics
,
downloadExcel
}
from
'api/order/rentVehicle'
import
{
memberLevels
}
from
'api/order/memeber'
export
default
{
created
()
{
this
.
getList
()
this
.
getAllMemeberList
()
// 获取全部会员等级
},
data
()
{
return
{
loading
:
false
,
total
:
null
,
list
:
[],
tableHead
:[],
//动态表头
scrollTop
:
''
,
// 统计时间筛选
listQuery
:
{
time
:
'null'
,
type
:
'1'
,
startTime
:
null
,
endTime
:
null
,
...
...
@@ -129,6 +132,28 @@ export default {
}
},
methods
:
{
/**
* 获取全部会员列表
*/
getAllMemeberList
(){
memberLevels
().
then
(
res
=>
{
let
arr
=
[]
res
.
map
(
function
(
item
){
arr
.
push
({
name
:
item
.
name
+
'购买量'
,
level
:
item
.
level
,
type
:
'number'
})
arr
.
push
({
name
:
'支付金额('
+
item
.
name
+
")"
,
level
:
item
.
level
,
type
:
'amount'
})
})
this
.
tableHead
=
arr
this
.
getList
()
})
},
//统计时间筛选
changeTime
()
{
!!
this
.
listQuery
.
time
[
0
]
...
...
@@ -177,37 +202,66 @@ export default {
this
.
listQuery
.
page
=
val
this
.
getList
()
},
// 数组去重
repeat
(
json
){
try
{
let
newJson
=
[];
for
(
var
i
=
0
;
i
<
json
.
length
;
i
++
){
let
flag
=
true
;
for
(
var
j
=
0
;
j
<
newJson
.
length
;
j
++
){
if
(
newJson
[
j
].
tname
==
json
[
i
].
tname
)
{
flag
=
false
;
}
}
if
(
flag
){
//判断是否重复
newJson
.
push
(
json
[
i
]);
}
}
return
newJson
}
catch
(
err
){
console
.
log
(
err
)
}
},
//列表
getList
()
{
let
_this
=
this
let
params
=
{}
this
.
loading
=
true
let
tableHead
=
this
.
tableHead
orderStatistics
(
this
.
listQuery
).
then
(
data
=>
{
if
(
data
.
status
==
200
)
{
data
.
data
.
list
.
forEach
(
element
=>
{
for
(
let
i
in
element
.
members
)
{
if
(
element
.
members
[
i
].
level
==
1
)
{
element
.
pAmount
=
element
.
members
[
i
].
amount
element
.
plevel
=
element
.
members
[
i
].
level
element
.
pMemberName
=
element
.
members
[
i
].
memberName
element
.
pNumber
=
element
.
members
[
i
].
number
}
else
if
(
element
.
members
[
i
].
level
==
2
)
{
element
.
goldAmount
=
element
.
members
[
i
].
amount
element
.
goldlevel
=
element
.
members
[
i
].
level
element
.
goldMemberName
=
element
.
members
[
i
].
memberName
element
.
goldNumber
=
element
.
members
[
i
].
number
}
else
if
(
element
.
members
[
i
].
level
==
3
)
{
element
.
hAmount
=
element
.
members
[
i
].
amount
element
.
hlevel
=
element
.
members
[
i
].
level
element
.
hMemberName
=
element
.
members
[
i
].
memberName
element
.
hNumber
=
element
.
members
[
i
].
number
}
}
})
// tableHead.map(function(item){
// data.data.list.forEach(element => {
// let listArr = []
// element.members.map(function(iitem){
// // if(item.level == iitem.level){
// listArr.push({level: iitem.level, tnumber: iitem.number, tamount: iitem.amount})
// // }
// })
// element.listArr = listArr
// })
// })
// debugger
// data.data.list.forEach(element => {
// tableHead.map(function(item){
// let p = {tname: item.name, tvalue: 0}
// element.members.map(function(iitem){
// if(item.level == iitem.level){
// p = {tname: item.name, tvalue: item.type == 'number'?iitem.number : iitem.amount}
// }
// })
// listArr.push(p)
// })
// element.listArr = _this.repeat(listArr)
// })
this
.
total
=
data
.
data
.
total
// console.log(listArr)
console
.
log
(
data
.
data
.
list
)
this
.
list
=
data
.
data
.
list
// this.listArr = listArr
}
setTimeout
(()
=>
{
this
.
loading
=
false
...
...
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