Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
蒋秀川
/
miniProject
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit 54a2adcf
authored
Jun 14, 2023
by
李君
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
优化
1 parent
40d0d38f
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
1127 additions
and
1046 deletions
miniProject/app.json
miniProject/custom-tab-bar/index.js
miniProject/index/index.js
miniProject/index/index2.js
miniProject/index/index2.wxml
miniProject/index/index2.wxss
miniProject/pages/homes/index.js
miniProject/pages/homes/index.wxml
miniProject/pages/login/index.wxml
miniProject/pages/login/index.wxss
miniProject/pages/shopSelect/index.wxml
miniProject/pages/shopSelect/index.wxss
miniProject/app.json
View file @
54a2adc
...
...
@@ -4,6 +4,7 @@
"index/index2"
,
"index/me"
,
"pages/login/index"
,
"pages/homes/index"
,
"pages/editPwd/editPwd"
,
"pages/shopSelect/index"
],
...
...
miniProject/custom-tab-bar/index.js
View file @
54a2adc
...
...
@@ -34,7 +34,7 @@ Component({
"pagePath"
:
"/index/index2"
,
"iconPath"
:
"../images/cong.png"
,
"selectedIconPath"
:
"../images/cong-b.png"
,
"text"
:
"
工作台
"
,
"text"
:
"
店铺首页
"
,
"curr"
:
2
},
{
...
...
miniProject/index/index.js
View file @
54a2adc
...
...
@@ -7,7 +7,6 @@ import moment from 'moment'
Component
({
pageLifetimes
:
{
show
()
{
this
.
loadData
()
if
(
typeof
this
.
getTabBar
===
'function'
&&
this
.
getTabBar
())
{
this
.
getTabBar
().
setData
({
// 当前页面的 tabBar 索引
...
...
@@ -16,6 +15,9 @@ Component({
}
}
},
ready
(){
this
.
loadData
()
},
data
:
{
selectName
:
''
,
//集团名称
openMllNum
:
0
,
//开业门店数
...
...
@@ -176,7 +178,7 @@ Component({
},()
=>
{
// wx.hideLoading();
})
},
10
00
)
},
5
00
)
})
},
// 获取门店排行
...
...
miniProject/index/index2.js
View file @
54a2adc
import
moment
from
'moment'
import
{
getMalls
,
getMalls
,
}
from
"../api/login"
;
import
{
getCardData
,
getShopDetailData
,
getStopTimeData
,
getTrendData
,
getAgeSexData
,
getAgeData
getCardData
,
getShopDetailData
,
getStopTimeData
,
getTrendData
,
getAgeSexData
,
getAgeData
}
from
"../api/shop"
;
Component
({
pageLifetimes
:
{
show
()
{
if
(
typeof
this
.
getTabBar
===
'function'
&&
this
.
getTabBar
())
{
this
.
getTabBar
().
setData
({
// 当前页面的 tabBar 索引
curClick
:
2
})
}
if
(
wx
.
getStorageSync
(
'shopName'
)
&&
this
.
data
.
shopList
.
length
>
0
)
{
let
selectId
=
this
.
data
.
shopList
.
find
(
item
=>
item
.
name
==
wx
.
getStorageSync
(
'shopName'
)).
id
this
.
setData
({
selectName
:
wx
.
getStorageSync
(
'shopName'
),
selectId
},
()
=>
{
this
.
loadData
()
getShopDetailData
({
id
:
this
.
data
.
selectId
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
startTime
=
res
.
data
.
startTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
let
endTime
=
res
.
data
.
endTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
this
.
setData
({
info
:
{
...
res
.
data
,
startTime
,
endTime
}
})
}
})
})
}
else
{
getMalls
({
url
:
'/report/malls'
,
accountId
:
wx
.
getStorageSync
(
'accountId'
)
}).
then
((
res
)
=>
{
this
.
setData
({
shopList
:
res
.
data
,
selectName
:
res
.
data
[
0
]
&&
res
.
data
[
0
].
name
,
selectId
:
res
.
data
[
0
]
&&
res
.
data
[
0
].
id
,
columnsListName
:
res
.
data
&&
res
.
data
.
map
(
item
=>
item
.
name
)
},
()
=>
{
wx
.
setStorageSync
(
'shopName'
,
res
.
data
[
0
]
&&
res
.
data
[
0
].
name
)
this
.
loadData
()
// let params={id:this.selectId}
getShopDetailData
({
id
:
this
.
data
.
selectId
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
startTime
=
res
.
data
.
startTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
let
endTime
=
res
.
data
.
endTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
this
.
setData
({
info
:
{
...
res
.
data
,
startTime
,
endTime
}
pageLifetimes
:
{
show
()
{
if
(
typeof
this
.
getTabBar
===
'function'
&&
this
.
getTabBar
())
{
this
.
getTabBar
().
setData
({
// 当前页面的 tabBar 索引
curClick
:
2
})
}
})
})
})
}
}
},
/**
* 组件的初始数据
*/
data
:
{
currentTime
:
moment
().
format
(
"YYYY-MM-DD"
),
types
:
1
,
//选中的时间类型
trendtypes
:
1
,
//选中的业态趋势类型
chartData
:
{},
//客流趋势分析数据
chartDatastop
:
{},
//停留时长统计
chartDataSex
:
{},
//客群性别占比
chartDataAge
:
{},
//客群年龄占比
show
:
false
,
//显示日期自定义选择
minDate
:
new
Date
(
2022
,
0
,
1
).
getTime
(),
//自定义时间的开始日期
// maxDate: new Date(2022, 11, 31).getTime(), //自定义时间的结束日期
maxDate
:
new
Date
(
2025
,
11
,
31
).
getTime
(),
//自定义时间的结束日期
shopList
:
[
// {
// id: 1,
// name: '小米'
// }, {
// id: 2,
// name: '华为'
// }
],
//店铺列表数据
selectId
:
''
,
//选中的店铺id
selectName
:
''
,
//选中店铺名字
columnsListName
:
[],
//店铺的名字下拉列表
exposure
:
0
,
traffic
:
0
,
customer
:
0
,
entryRate
:
0
,
info
:
{}
},
methods
:
{
// 关闭自定义日期选择
onClose
()
{
this
.
getTabBar
().
setData
({
show
:
true
});
this
.
setData
({
show
:
false
});
},
// 跳转到店铺选择
selectContent
()
{
wx
.
navigateTo
({
url
:
'/pages/shopSelect/index?current='
+
JSON
.
stringify
(
this
.
data
.
columnsListName
),
})
},
// 点击自定义日期选择器的确定
onConfirm
(
event
)
{
this
.
getTabBar
().
setData
({
show
:
true
});
const
[
start
,
end
]
=
event
.
detail
;
let
startDate
=
moment
(
start
).
format
(
"YYYY-MM-DD"
)
let
endDate
=
moment
(
end
).
format
(
"YYYY-MM-DD"
)
this
.
setData
({
show
:
false
,
currentTime
:
startDate
+
'至'
+
endDate
},
()
=>
{
this
.
loadData
()
});
},
// 点击时间选择类型触发
ClickTab
(
e
)
{
let
dateType
=
e
.
target
.
dataset
.
type
,
time
switch
(
dateType
)
{
case
'1'
:
time
=
moment
().
format
(
"YYYY-MM-DD"
)
break
;
case
'2'
:
time
=
moment
().
subtract
(
1
,
"days"
).
format
(
"YYYY-MM-DD"
)
break
;
case
'3'
:
time
=
moment
().
subtract
(
6
,
"days"
).
format
(
"YYYY-MM-DD"
)
+
'至'
+
moment
().
format
(
"YYYY-MM-DD"
)
break
;
case
'4'
:
time
=
moment
().
subtract
(
29
,
"days"
).
format
(
"YYYY-MM-DD"
)
+
'至'
+
moment
().
format
(
"YYYY-MM-DD"
)
break
;
default
:
this
.
setData
({
show
:
true
,
types
:
e
.
target
.
dataset
.
type
,
})
this
.
getTabBar
().
setData
({
show
:
false
,
});
break
;
}
if
(
dateType
!=
5
)
{
this
.
setData
({
types
:
e
.
target
.
dataset
.
type
,
currentTime
:
time
},
()
=>
{
this
.
loadData
()
})
}
}
},
// 获取卡片数据
getCardList
()
{
// console.log(this.data.currentTime,this.data.selectId,this.data.selectName)
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
getCardData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
data
=
res
.
data
this
.
setData
({
exposure
:
data
.
exposure
,
traffic
:
data
.
traffic
,
customer
:
data
.
customer
,
entryRate
:
data
.
entryRate
&&
data
.
entryRate
.
toFixed
(
2
)
})
}
})
},
// 获取业态客流趋势
getTrendList
()
{
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
let
dataIndex
,
dataLevel
=
'day'
if
(
this
.
data
.
trendtypes
==
1
)
{
dataIndex
=
'Exposure'
}
else
if
(
this
.
data
.
trendtypes
==
2
)
{
dataIndex
=
'PassengerFlow'
}
else
if
(
this
.
data
.
trendtypes
==
3
)
{
dataIndex
=
'CustomerNum'
}
else
if
(
this
.
data
.
trendtypes
==
4
)
{
dataIndex
=
'IntoStoreRate'
}
if
(
startTime
==
endTime
)
{
dataLevel
=
'hour'
}
getTrendData
({
// mallId: 9300,
mallId
:
this
.
data
.
selectId
,
startDate
:
startTime
,
endDate
:
endTime
,
dataIndex
,
dataLevel
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartData
:
this
.
getLineConfig
(
res
.
data
),
//客流趋势分析数据
})
}
})
},
// 获取停留时长统计
getStopTimeList
()
{
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
getStopTimeData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartDatastop
:
this
.
getStopTimeConfig
(
res
.
data
),
})
}
})
/**
* 组件的初始数据
*/
data
:
{
currentTime
:
moment
().
format
(
"YYYY-MM-DD"
),
types
:
1
,
//选中的时间类型
trendtypes
:
1
,
//选中的业态趋势类型
chartData
:
{},
//客流趋势分析数据
chartDatastop
:
{},
//停留时长统计
chartDataSex
:
{},
//客群性别占比
chartDataAge
:
{},
//客群年龄占比
show
:
false
,
//显示日期自定义选择
minDate
:
new
Date
(
2022
,
0
,
1
).
getTime
(),
//自定义时间的开始日期
// maxDate: new Date(2022, 11, 31).getTime(), //自定义时间的结束日期
maxDate
:
new
Date
(
2025
,
11
,
31
).
getTime
(),
//自定义时间的结束日期
shopList
:
[
// {
// id: 1,
// name: '小米'
// }, {
// id: 2,
// name: '华为'
// }
],
//店铺列表数据
selectId
:
''
,
//选中的店铺id
selectName
:
''
,
//选中店铺名字
columnsListName
:
[],
//店铺的名字下拉列表
exposure
:
0
,
traffic
:
0
,
customer
:
0
,
entryRate
:
0
,
info
:
{}
},
// 获取性别和年龄
getAgeSexList
()
{
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
getAgeSexData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartDataSex
:
this
.
getGroupSexConfig
(
res
.
data
),
})
}
})
getAgeData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartDataAge
:
this
.
getAgeConfig
(
res
.
data
)
})
ready
(){
if
(
wx
.
getStorageSync
(
'shopName'
)
&&
this
.
data
.
shopList
.
length
>
0
)
{
let
selectId
=
this
.
data
.
shopList
.
find
(
item
=>
item
.
name
==
wx
.
getStorageSync
(
'shopName'
)).
id
this
.
setData
({
selectName
:
wx
.
getStorageSync
(
'shopName'
),
selectId
},
()
=>
{
this
.
loadData
()
getShopDetailData
({
id
:
this
.
data
.
selectId
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
startTime
=
res
.
data
.
startTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
let
endTime
=
res
.
data
.
endTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
this
.
setData
({
info
:
{
...
res
.
data
,
startTime
,
endTime
}
})
}
})
})
}
else
{
getMalls
({
url
:
'/report/malls'
,
accountId
:
wx
.
getStorageSync
(
'accountId'
)
}).
then
((
res
)
=>
{
this
.
setData
({
shopList
:
res
.
data
,
selectName
:
res
.
data
[
0
]
&&
res
.
data
[
0
].
name
,
selectId
:
res
.
data
[
0
]
&&
res
.
data
[
0
].
id
,
columnsListName
:
res
.
data
&&
res
.
data
.
map
(
item
=>
item
.
name
)
},
()
=>
{
wx
.
setStorageSync
(
'shopName'
,
res
.
data
[
0
]
&&
res
.
data
[
0
].
name
)
this
.
loadData
()
// let params={id:this.selectId}
getShopDetailData
({
id
:
this
.
data
.
selectId
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
startTime
=
res
.
data
.
startTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
let
endTime
=
res
.
data
.
endTime
.
split
(
' '
)[
1
].
slice
(
0
,
5
)
this
.
setData
({
info
:
{
...
res
.
data
,
startTime
,
endTime
}
})
}
})
})
})
}
})
},
// 获取性别和年龄
getShopDetailList
()
{
// getShopDetailData().then(res => {})
},
// 获取所有数据
loadData
()
{
this
.
getCardList
()
this
.
getTrendList
()
this
.
getStopTimeList
()
this
.
getAgeSexList
()
this
.
getShopDetailList
()
},
//点击业态客流趋势top5中的tab触发
ClickPassageFlow
(
e
)
{
this
.
setData
({
trendtypes
:
e
.
target
.
dataset
.
type
},
()
=>
{
this
.
getTrendList
()
})
},
// 返回趋势图配置项
getLineConfig
(
res
)
{
let
xasix
=
res
.
xaxis
.
data
// let legendList = res.series.map(item => item.name)
let
seriesList
=
res
.
series
||
[]
if
(
seriesList
[
0
].
data
.
every
(
item
=>
!
item
))
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
}
}
}
}
return
{
grid
:
{
top
:
30
,
right
:
20
,
bottom
:
20
,
left
:
5
,
containLabel
:
true
methods
:
{
// 关闭自定义日期选择
onClose
()
{
this
.
getTabBar
().
setData
({
show
:
true
});
this
.
setData
({
show
:
false
});
},
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
"line"
,
lineStyle
:
{
color
:
"#444"
,
},
},
formatter
:
function
(
params
)
{
let
html
=
''
params
.
forEach
(
item
=>
{
html
+=
item
.
axisValue
+
'\n'
+
item
.
seriesName
+
': '
+
item
.
value
// 跳转到店铺选择
selectContent
()
{
wx
.
navigateTo
({
url
:
'/pages/shopSelect/index?current='
+
JSON
.
stringify
(
this
.
data
.
columnsListName
),
})
return
html
}
},
xAxis
:
{
axisLabel
:
{
color
:
'#8C8D95'
},
boundaryGap
:
false
,
axisTick
:
{
show
:
true
},
axisLine
:
{
lineStyle
:
{
color
:
'rgba(140,141,149,0.35)'
,
width
:
1
}
},
data
:
xasix
// 点击自定义日期选择器的确定
onConfirm
(
event
)
{
this
.
getTabBar
().
setData
({
show
:
true
});
const
[
start
,
end
]
=
event
.
detail
;
let
startDate
=
moment
(
start
).
format
(
"YYYY-MM-DD"
)
let
endDate
=
moment
(
end
).
format
(
"YYYY-MM-DD"
)
this
.
setData
({
show
:
false
,
currentTime
:
startDate
+
'至'
+
endDate
},
()
=>
{
this
.
loadData
()
});
},
yAxis
:
{
type
:
'value'
,
axisLabel
:
{
color
:
'#8C8D95'
,
formatter
:
function
(
value
,
index
)
{
if
(
value
>=
10000
&&
value
<
1000000
)
{
value
=
value
/
10000
+
"万"
;
}
else
if
(
value
>=
1000000
)
{
value
=
value
/
1000000
+
"百万"
;
}
return
value
;
},
},
axisTick
:
{
show
:
true
,
// 点击时间选择类型触发
ClickTab
(
e
)
{
let
dateType
=
e
.
target
.
dataset
.
type
,
time
switch
(
dateType
)
{
case
'1'
:
time
=
moment
().
format
(
"YYYY-MM-DD"
)
break
;
case
'2'
:
time
=
moment
().
subtract
(
1
,
"days"
).
format
(
"YYYY-MM-DD"
)
break
;
case
'3'
:
time
=
moment
().
subtract
(
6
,
"days"
).
format
(
"YYYY-MM-DD"
)
+
'至'
+
moment
().
format
(
"YYYY-MM-DD"
)
break
;
case
'4'
:
time
=
moment
().
subtract
(
29
,
"days"
).
format
(
"YYYY-MM-DD"
)
+
'至'
+
moment
().
format
(
"YYYY-MM-DD"
)
break
;
},
axisLine
:
{
show
:
false
,
default
:
this
.
setData
({
show
:
true
,
types
:
e
.
target
.
dataset
.
type
,
})
this
.
getTabBar
().
setData
({
show
:
false
,
});
break
;
}
if
(
dateType
!=
5
)
{
this
.
setData
({
types
:
e
.
target
.
dataset
.
type
,
currentTime
:
time
},
()
=>
{
this
.
loadData
()
})
}
},
splitLine
:
{
show
:
false
}
},
color
:
[
'#FD8C5E'
,
'#6FD3FF'
,
'#BC7FF8'
,
'#4F75FF'
,
'#FF9AC1'
],
// series:seriesList.map(item=>({...item,symbol: 'none',smooth: true,}))
series
:
[{
name
:
res
.
series
[
0
]
&&
res
.
series
[
0
].
name
,
smooth
:
true
,
lineStyle
:
{
color
:
'#34BFFF'
},
areaStyle
:
{
// 区域颜色
color
:
{
type
:
'linear'
,
x
:
0
,
//右
y
:
0
,
//下
x2
:
0
,
//左
y2
:
1
,
//上
colorStops
:
[{
offset
:
0.1
,
color
:
'#EAF3FF'
// 0% 处的颜色
},
{
offset
:
1
,
color
:
'#FFFFFF'
// 100% 处的颜色
// 获取卡片数据
getCardList
()
{
// console.log(this.data.currentTime,this.data.selectId,this.data.selectName)
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
getCardData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
let
data
=
res
.
data
this
.
setData
({
exposure
:
data
.
exposure
,
traffic
:
data
.
traffic
,
customer
:
data
.
customer
,
entryRate
:
data
.
entryRate
&&
data
.
entryRate
.
toFixed
(
2
)
})
}
]
},
},
data
:
res
.
series
[
0
]
&&
res
.
series
[
0
].
data
,
type
:
"line"
,
symbol
:
"none"
,
showSymbol
:
false
,
symbolSize
:
20
,
}]
}
},
// 返回停留时长配置
getStopTimeConfig
(
confingData
)
{
// let data_sample = [
// ["type", "停留时长", ''],
// ["进样", 50, 200],
// ["离心", 10, 200],
// ["去盖", 30, 200],
// ["侧轨", 15, 200],
// ["侧轨1", 15, 200],
// ["侧轨2", 15, 200],
// ["侧轨3", 15, 200],
// ["出样", 18, 200]
// ];
if
(
confingData
.
series
.
length
<=
0
)
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
})
},
// 获取业态客流趋势
getTrendList
()
{
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
}
}
}
let
data_sample
=
[];
confingData
.
xaxis
.
data
.
forEach
((
item
,
i
)
=>
{
let
arr
=
[];
arr
[
0
]
=
item
;
arr
[
1
]
=
confingData
.
series
[
0
].
data
[
i
];
arr
[
2
]
=
100
;
data_sample
.
push
(
arr
);
});
data_sample
.
reverse
()
data_sample
.
unshift
([
"type"
,
confingData
.
title
,
""
]);
return
{
color
:
[
"#33CCFF"
,
"#CCEEFF"
],
legend
:
{
show
:
false
let
dataIndex
,
dataLevel
=
'day'
if
(
this
.
data
.
trendtypes
==
1
)
{
dataIndex
=
'Exposure'
}
else
if
(
this
.
data
.
trendtypes
==
2
)
{
dataIndex
=
'PassengerFlow'
}
else
if
(
this
.
data
.
trendtypes
==
3
)
{
dataIndex
=
'CustomerNum'
}
else
if
(
this
.
data
.
trendtypes
==
4
)
{
dataIndex
=
'IntoStoreRate'
}
if
(
startTime
==
endTime
)
{
dataLevel
=
'hour'
}
getTrendData
({
// mallId: 9300,
mallId
:
this
.
data
.
selectId
,
startDate
:
startTime
,
endDate
:
endTime
,
dataIndex
,
dataLevel
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartData
:
this
.
getLineConfig
(
res
.
data
),
//客流趋势分析数据
})
}
})
},
grid
:
{
left
:
"0"
,
right
:
"2%"
,
bottom
:
"3%"
,
top
:
"10px"
,
containLabel
:
true
// 获取停留时长统计
getStopTimeList
()
{
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
getStopTimeData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartDatastop
:
this
.
getStopTimeConfig
(
res
.
data
),
})
}
})
},
// 获取性别和年龄
getAgeSexList
()
{
let
startTime
=
this
.
data
.
currentTime
,
endTime
=
this
.
data
.
currentTime
if
(
this
.
data
.
currentTime
.
includes
(
'至'
))
{
let
timeArr
=
this
.
data
.
currentTime
.
split
(
'至'
)
startTime
=
timeArr
[
0
]
endTime
=
timeArr
[
1
]
}
getAgeSexData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartDataSex
:
this
.
getGroupSexConfig
(
res
.
data
),
})
}
})
getAgeData
({
mallId
:
this
.
data
.
selectId
,
// mallId: 9300,
startDate
:
startTime
,
endDate
:
endTime
}).
then
(
res
=>
{
if
(
res
.
code
==
200
)
{
this
.
setData
({
chartDataAge
:
this
.
getAgeConfig
(
res
.
data
)
})
}
})
},
xAxis
:
{
type
:
"value"
,
// boundaryGap: [0, 0.01],
axisLine
:
{
show
:
false
},
splitLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
show
:
false
}
// 获取性别和年龄
getShopDetailList
()
{
// getShopDetailData().then(res => {})
},
yAxis
:
{
type
:
"category"
,
inverse
:
true
,
axisLine
:
{
show
:
false
},
splitLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
}
// 获取所有数据
loadData
()
{
this
.
getCardList
()
this
.
getTrendList
()
this
.
getStopTimeList
()
this
.
getAgeSexList
()
this
.
getShopDetailList
()
},
dataset
:
{
source
:
data_sample
//点击业态客流趋势top5中的tab触发
ClickPassageFlow
(
e
)
{
this
.
setData
({
trendtypes
:
e
.
target
.
dataset
.
type
},
()
=>
{
this
.
getTrendList
()
})
},
series
:
[{
name
:
"停留时长"
,
type
:
"bar"
,
barWidth
:
"40%"
,
label
:
{
show
:
true
,
formatter
:
function
(
params
)
{
return
params
.
data
[
1
]
+
"%"
;
},
position
:
[
"102%"
,
"0%"
]
},
itemStyle
:
{
color
:
"#679BFF"
},
z
:
3
//让实时在总计上面
},
{
name
:
""
,
type
:
"bar"
,
barWidth
:
"40%"
,
itemStyle
:
{
color
:
"#F5F7F9"
},
barGap
:
"-100%"
}
]
};
// 返回趋势图配置项
getLineConfig
(
res
)
{
let
xasix
=
res
.
xaxis
.
data
// let legendList = res.series.map(item => item.name)
let
seriesList
=
res
.
series
||
[]
if
(
seriesList
[
0
].
data
.
every
(
item
=>
!
item
))
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
}
}
}
}
return
{
grid
:
{
top
:
30
,
right
:
20
,
bottom
:
20
,
left
:
5
,
containLabel
:
true
},
tooltip
:
{
trigger
:
'axis'
,
axisPointer
:
{
type
:
"line"
,
lineStyle
:
{
color
:
"#444"
,
},
},
formatter
:
function
(
params
)
{
let
html
=
''
params
.
forEach
(
item
=>
{
html
+=
item
.
axisValue
+
'\n'
+
item
.
seriesName
+
': '
+
item
.
value
})
return
html
}
},
xAxis
:
{
axisLabel
:
{
color
:
'#8C8D95'
},
boundaryGap
:
false
,
axisTick
:
{
show
:
true
},
axisLine
:
{
lineStyle
:
{
color
:
'rgba(140,141,149,0.35)'
,
width
:
1
}
},
data
:
xasix
},
yAxis
:
{
type
:
'value'
,
axisLabel
:
{
color
:
'#8C8D95'
,
formatter
:
function
(
value
,
index
)
{
if
(
value
>=
10000
&&
value
<
1000000
)
{
value
=
value
/
10000
+
"万"
;
}
else
if
(
value
>=
1000000
)
{
value
=
value
/
1000000
+
"百万"
;
}
return
value
;
},
},
axisTick
:
{
show
:
true
,
},
// 返回客群性别占比配置
getGroupSexConfig
(
faceGender
)
{
// let faceGender = {
// "title": "人脸性别统计",
// "series": [{
// "name": "人脸性别统计",
// "data": [{
// "name": "男",
// "value": 85
// },
// {
// "name": "女",
// "value": 262
// }
// ],
// "type": "pie"
// }]
// }
if
(
faceGender
.
series
[
0
]
&&
faceGender
.
series
[
0
].
data
.
every
(
item
=>
item
))
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
},
axisLine
:
{
show
:
false
,
},
splitLine
:
{
show
:
false
}
},
color
:
[
'#FD8C5E'
,
'#6FD3FF'
,
'#BC7FF8'
,
'#4F75FF'
,
'#FF9AC1'
],
// series:seriesList.map(item=>({...item,symbol: 'none',smooth: true,}))
series
:
[{
name
:
res
.
series
[
0
]
&&
res
.
series
[
0
].
name
,
smooth
:
true
,
lineStyle
:
{
color
:
'#34BFFF'
},
areaStyle
:
{
// 区域颜色
color
:
{
type
:
'linear'
,
x
:
0
,
//右
y
:
0
,
//下
x2
:
0
,
//左
y2
:
1
,
//上
colorStops
:
[{
offset
:
0.1
,
color
:
'#EAF3FF'
// 0% 处的颜色
},
{
offset
:
1
,
color
:
'#FFFFFF'
// 100% 处的颜色
}
]
},
},
data
:
res
.
series
[
0
]
&&
res
.
series
[
0
].
data
,
type
:
"line"
,
symbol
:
"none"
,
showSymbol
:
false
,
symbolSize
:
20
,
}]
}
}
}
}
let
seriesData
=
faceGender
.
series
[
0
].
data
;
let
sexLabel
=
faceGender
.
series
[
0
].
data
.
map
(
item
=>
item
.
name
);
let
number
=
faceGender
.
series
[
0
].
data
.
map
(
item
=>
item
.
value
);
let
sum
=
number
[
0
]
*
1
+
number
[
1
]
*
1
;
let
rate
=
faceGender
.
series
[
0
].
data
.
map
(
item
=>
((
item
.
value
/
sum
)
*
100
).
toFixed
(
2
)
);
if
(
rate
[
0
]
==
"NaN"
||
rate
[
1
]
==
"NaN"
)
{
rate
=
[
0
,
0
];
}
return
{
color
:
[
"#FF8383"
,
"#70AAFB"
],
grid
:
{
top
:
"15%"
,
left
:
20
,
right
:
"1%"
,
bottom
:
5
},
legend
:
[{
orient
:
"vertical"
,
top
:
"center"
,
icon
:
"circle"
,
right
:
10
,
textStyle
:
{
color
:
"#000"
,
fontSize
:
14
},
data
:
sexLabel
,
formatter
:
function
(
name
)
{
for
(
var
i
=
0
;
i
<
sexLabel
.
length
;
i
++
)
{
if
(
sexLabel
[
i
]
==
name
)
{
return
name
+
" "
+
" "
+
rate
[
i
]
+
"%"
;
}
// 返回停留时长配置
getStopTimeConfig
(
confingData
)
{
// let data_sample = [
// ["type", "停留时长", ''],
// ["进样", 50, 200],
// ["离心", 10, 200],
// ["去盖", 30, 200],
// ["侧轨", 15, 200],
// ["侧轨1", 15, 200],
// ["侧轨2", 15, 200],
// ["侧轨3", 15, 200],
// ["出样", 18, 200]
// ];
if
(
confingData
.
series
.
length
<=
0
)
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
}
}
}
}
}
}],
series
:
[{
name
:
"需求类型占比"
,
type
:
"pie"
,
center
:
[
"30%"
,
"50%"
],
radius
:
[
"36%"
,
"70%"
],
showEmptyCircle
:
true
,
itemStyle
:
{
// normal: {
// borderColor: "#050e31",
// borderWidth: 2
let
data_sample
=
[];
confingData
.
xaxis
.
data
.
forEach
((
item
,
i
)
=>
{
let
arr
=
[];
arr
[
0
]
=
item
;
arr
[
1
]
=
confingData
.
series
[
0
].
data
[
i
];
arr
[
2
]
=
100
;
data_sample
.
push
(
arr
);
});
data_sample
.
reverse
()
data_sample
.
unshift
([
"type"
,
confingData
.
title
,
""
]);
return
{
color
:
[
"#33CCFF"
,
"#CCEEFF"
],
legend
:
{
show
:
false
},
grid
:
{
left
:
"0"
,
right
:
"2%"
,
bottom
:
"3%"
,
top
:
"10px"
,
containLabel
:
true
},
xAxis
:
{
type
:
"value"
,
// boundaryGap: [0, 0.01],
axisLine
:
{
show
:
false
},
splitLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
},
axisLabel
:
{
show
:
false
}
},
yAxis
:
{
type
:
"category"
,
inverse
:
true
,
axisLine
:
{
show
:
false
},
splitLine
:
{
show
:
false
},
axisTick
:
{
show
:
false
}
},
dataset
:
{
source
:
data_sample
},
series
:
[{
name
:
"停留时长"
,
type
:
"bar"
,
barWidth
:
"40%"
,
label
:
{
show
:
true
,
formatter
:
function
(
params
)
{
return
params
.
data
[
1
]
+
"%"
;
},
position
:
[
"102%"
,
"0%"
]
},
itemStyle
:
{
color
:
"#679BFF"
},
z
:
3
//让实时在总计上面
},
{
name
:
""
,
type
:
"bar"
,
barWidth
:
"40%"
,
itemStyle
:
{
color
:
"#F5F7F9"
},
barGap
:
"-100%"
}
]
};
},
// 返回客群性别占比配置
getGroupSexConfig
(
faceGender
)
{
// let faceGender = {
// "title": "人脸性别统计",
// "series": [{
// "name": "人脸性别统计",
// "data": [{
// "name": "男",
// "value": 85
// },
// {
// "name": "女",
// "value": 262
// }
// ],
// "type": "pie"
// }]
// }
},
label
:
{
normal
:
{
show
:
false
,
position
:
"inside"
,
// color: "rgba(255, 255, 255, 0.8)",
color
:
"#000"
,
// formatter: "{value|{c}}",
formatter
:
function
(
params
)
{
return
params
.
name
+
"\n"
+
params
.
percent
+
"%"
;
}
// rich: {
// value: {
// fontSize: 20,
// color: "#000",
// },
// },
if
(
faceGender
.
series
[
0
]
&&
faceGender
.
series
[
0
].
data
.
every
(
item
=>
item
))
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
}
}
}
}
},
labelLine
:
{
show
:
false
,
length
:
0
,
length2
:
0
},
data
:
seriesData
}]
};
},
// 返回客群年龄占比
getAgeConfig
(
faceAge
)
{
// let faceAge = {
// "title": "人脸年龄统计",
// "series": [{
// "name": "少年(18岁以内)",
// "data": [
// 7,
// 21
// ],
// "type": "bar"
// },
// {
// "name": "青年(19-35岁)",
// "data": [
// 54,
// 193
// ],
// "type": "bar"
// },
// {
// "name": "中年(36-55岁)",
// "data": [
// 20,
// 45
// ],
// "type": "bar"
// },
// {
// "name": "老年(55岁以上)",
// "data": [
// 4,
// 3
// ],
// "type": "bar"
// }
// ],
// "xaxis": {
// "data": [
// "男",
// "女"
// ]
// }
// }
if
(
faceAge
.
series
.
length
<=
0
)
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
let
seriesData
=
faceGender
.
series
[
0
].
data
;
let
sexLabel
=
faceGender
.
series
[
0
].
data
.
map
(
item
=>
item
.
name
);
let
number
=
faceGender
.
series
[
0
].
data
.
map
(
item
=>
item
.
value
);
let
sum
=
number
[
0
]
*
1
+
number
[
1
]
*
1
;
let
rate
=
faceGender
.
series
[
0
].
data
.
map
(
item
=>
((
item
.
value
/
sum
)
*
100
).
toFixed
(
2
)
);
if
(
rate
[
0
]
==
"NaN"
||
rate
[
1
]
==
"NaN"
)
{
rate
=
[
0
,
0
];
}
}
}
}
let
xdata
=
faceAge
.
series
.
map
(
item
=>
item
.
name
);
let
ydatas
=
faceAge
.
series
.
map
(
item
=>
{
return
item
.
data
[
0
]
*
1
+
item
.
data
[
1
]
*
1
;
});
let
sums
=
ydatas
.
reduce
((
pre
,
item
)
=>
pre
+
item
,
0
);
let
ydata
=
ydatas
.
map
(
item
=>
((
item
/
sums
)
*
100
).
toFixed
(
2
));
return
{
tooltip
:
{
trigger
:
"axis"
,
axisPointer
:
{
type
:
"shadow"
},
formatter
:
function
(
params
)
{
let
html
=
''
params
.
forEach
(
item
=>
{
html
+=
item
.
axisValue
+
'\n'
+
' '
+
item
.
value
})
return
html
},
transitionDuration
:
0
},
grid
:
{
top
:
"5%"
,
right
:
"5%"
,
left
:
"10%"
,
bottom
:
"15%"
return
{
color
:
[
"#FF8383"
,
"#70AAFB"
],
grid
:
{
top
:
"15%"
,
left
:
20
,
right
:
"1%"
,
bottom
:
5
},
legend
:
[{
orient
:
"vertical"
,
top
:
"center"
,
icon
:
"circle"
,
right
:
10
,
textStyle
:
{
color
:
"#000"
,
fontSize
:
14
},
data
:
sexLabel
,
formatter
:
function
(
name
)
{
for
(
var
i
=
0
;
i
<
sexLabel
.
length
;
i
++
)
{
if
(
sexLabel
[
i
]
==
name
)
{
return
name
+
" "
+
" "
+
rate
[
i
]
+
"%"
;
}
}
}
}],
series
:
[{
name
:
"需求类型占比"
,
type
:
"pie"
,
center
:
[
"30%"
,
"50%"
],
radius
:
[
"36%"
,
"70%"
],
showEmptyCircle
:
true
,
itemStyle
:
{
// normal: {
// borderColor: "#050e31",
// borderWidth: 2
// }
},
label
:
{
normal
:
{
show
:
false
,
position
:
"inside"
,
// color: "rgba(255, 255, 255, 0.8)",
color
:
"#000"
,
// formatter: "{value|{c}}",
formatter
:
function
(
params
)
{
return
params
.
name
+
"\n"
+
params
.
percent
+
"%"
;
}
// rich: {
// value: {
// fontSize: 20,
// color: "#000",
// },
// },
}
},
labelLine
:
{
show
:
false
,
length
:
0
,
length2
:
0
},
data
:
seriesData
}]
};
},
xAxis
:
[{
type
:
"category"
,
axisLabel
:
{
color
:
"#8C8D95"
,
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
"#0a3e98"
}
},
axisTick
:
{
show
:
true
},
splitLine
:
{
show
:
false
,
lineStyle
:
{
color
:
"#195384"
,
type
:
"dotted"
}
},
// data: ["小西关村", "谢家井社区", "石家庄村", "大东关社区"],
data
:
xdata
}],
yAxis
:
[{
type
:
"value"
,
name
:
""
,
min
:
0
,
position
:
"left"
,
nameTextStyle
:
{
color
:
"#fff"
,
fontSize
:
11
},
axisLine
:
{
show
:
false
,
lineStyle
:
{
color
:
"#0a3e98"
}
},
axisTick
:
{
show
:
true
},
splitLine
:
{
show
:
false
,
lineStyle
:
{
color
:
"#0a3e98"
,
type
:
"dotted"
}
},
axisLabel
:
{
formatter
:
"{value}"
,
textStyle
:
{
color
:
"#8C8D95"
// 返回客群年龄占比
getAgeConfig
(
faceAge
)
{
// let faceAge = {
// "title": "人脸年龄统计",
// "series": [{
// "name": "少年(18岁以内)",
// "data": [
// 7,
// 21
// ],
// "type": "bar"
// },
// {
// "name": "青年(19-35岁)",
// "data": [
// 54,
// 193
// ],
// "type": "bar"
// },
// {
// "name": "中年(36-55岁)",
// "data": [
// 20,
// 45
// ],
// "type": "bar"
// },
// {
// "name": "老年(55岁以上)",
// "data": [
// 4,
// 3
// ],
// "type": "bar"
// }
// ],
// "xaxis": {
// "data": [
// "男",
// "女"
// ]
// }
// }
if
(
faceAge
.
series
.
length
<=
0
)
{
return
{
title
:
{
text
:
'暂无数据'
,
x
:
'center'
,
y
:
'center'
,
textStyle
:
{
fontSize
:
16
,
fontWeight
:
'normal'
,
}
}
}
}
}
}],
let
xdata
=
faceAge
.
series
.
map
(
item
=>
item
.
name
);
let
ydatas
=
faceAge
.
series
.
map
(
item
=>
{
return
item
.
data
[
0
]
*
1
+
item
.
data
[
1
]
*
1
;
});
let
sums
=
ydatas
.
reduce
((
pre
,
item
)
=>
pre
+
item
,
0
);
let
ydata
=
ydatas
.
map
(
item
=>
((
item
/
sums
)
*
100
).
toFixed
(
2
));
return
{
tooltip
:
{
trigger
:
"axis"
,
axisPointer
:
{
type
:
"shadow"
},
formatter
:
function
(
params
)
{
let
html
=
''
params
.
forEach
(
item
=>
{
html
+=
item
.
axisValue
+
'\n'
+
' '
+
item
.
value
})
return
html
},
transitionDuration
:
0
},
grid
:
{
top
:
"5%"
,
right
:
"5%"
,
left
:
"10%"
,
bottom
:
"15%"
},
series
:
[{
name
:
""
,
type
:
"bar"
,
barWidth
:
25
,
//柱子宽度
barGap
:
0.3
,
//柱子之间间距
itemStyle
:
{
normal
:
{
color
:
'#70AAFB'
,
opacity
:
1
,
},
},
label
:
{
normal
:
{
show
:
true
,
position
:
"top"
,
formatter
:
"{c}%"
,
color
:
"#8C8D95"
}
},
// data: ["104", "60", "145", "328"],
data
:
ydata
// animationDuration: function (idx) {
// return idx * 1500 + 1000;
// }
}]
};
},
}
xAxis
:
[{
type
:
"category"
,
axisLabel
:
{
color
:
"#8C8D95"
,
},
axisLine
:
{
show
:
true
,
lineStyle
:
{
color
:
"#0a3e98"
}
},
axisTick
:
{
show
:
true
},
splitLine
:
{
show
:
false
,
lineStyle
:
{
color
:
"#195384"
,
type
:
"dotted"
}
},
// data: ["小西关村", "谢家井社区", "石家庄村", "大东关社区"],
data
:
xdata
}],
yAxis
:
[{
type
:
"value"
,
name
:
""
,
min
:
0
,
position
:
"left"
,
nameTextStyle
:
{
color
:
"#fff"
,
fontSize
:
11
},
axisLine
:
{
show
:
false
,
lineStyle
:
{
color
:
"#0a3e98"
}
},
axisTick
:
{
show
:
true
},
splitLine
:
{
show
:
false
,
lineStyle
:
{
color
:
"#0a3e98"
,
type
:
"dotted"
}
},
axisLabel
:
{
formatter
:
"{value}"
,
textStyle
:
{
color
:
"#8C8D95"
}
}
}],
series
:
[{
name
:
""
,
type
:
"bar"
,
barWidth
:
25
,
//柱子宽度
barGap
:
0.3
,
//柱子之间间距
itemStyle
:
{
normal
:
{
color
:
'#70AAFB'
,
opacity
:
1
,
},
},
label
:
{
normal
:
{
show
:
true
,
position
:
"top"
,
formatter
:
"{c}%"
,
color
:
"#8C8D95"
}
},
// data: ["104", "60", "145", "328"],
data
:
ydata
// animationDuration: function (idx) {
// return idx * 1500 + 1000;
// }
}]
};
},
}
})
\ No newline at end of file
miniProject/index/index2.wxml
View file @
54a2adc
<!--pages/homes/index.wxml-->
<view class="title">店铺首页</view>
<view class="container">
<!-- 名称 -->
<view class="contianer_shop">
<image src="../images/back.svg" class='images'></image>
<view class="shop_name" bindtap="selectContent">{{selectName}}</view>
<view class="shop_time">
<text>营业时间:{{info.startTime}}-{{info.endTime}}</text>
<text style="margin:0 10rpx"> 面积:{{info.area}}㎡ </text>
<text> {{info.weather}}</text>
</view>
<view class="container" style="padding-bottom: 80px;">
<navbar page-name="店铺首页" bg-color="RGBA(213, 227, 255, 1)" navbar-color="#000"></navbar>
<view class="~backgroundColor">
<!-- 名称 -->
<view class="contianer_shop">
<image src="../images/back.svg" class='images'></image>
<view class="shop_name" bindtap="selectContent">{{selectName}}</view>
<view class="shop_time">
<text>营业时间:{{info.startTime}}-{{info.endTime}}</text>
<text style="margin:0 10rpx"> 面积:{{info.area}}㎡ </text>
<text> {{info.weather}}</text>
</view>
</view>
</view>
<!-- 选择时间 -->
<view class="tab_tll">
<text class="text_tltle {{types==1?'actives':'defaults'}}" bindtap="ClickTab" data-type='1'>当日</text>
<text class="text_tltle {{types==2?'actives':'defaults'}}" bindtap="ClickTab" data-type='2'>昨日</text>
<text class="text_tltle {{types==3?'actives':'defaults'}}" bindtap="ClickTab" data-type='3'>近7日</text>
<text class="text_tltle {{types==4?'actives':'defaults'}}" bindtap="ClickTab" data-type='4'>近30日</text>
<text class="text_tltle {{types==5?'actives':'defaults'}}" bindtap="ClickTab" data-type='5'>自定义</text>
</view>
<view class="time_input">
<image src="../images/rili.png" style="width:20px;height:20px;margin-right:20rpx"></image>
<text class="text_input">{{currentTime}}</text>
</view>
<!-- 卡片 -->
<view class="card">
<view class="card_passage">
<image src="../images/keliulaing.png" class="card_image"></image>
<view class="er"> 客流量</view>
<view class="er" style="font-size:48rpx
"> {{traffic}}</view>
</view>
<view class="card_passage">
<image src="../images/keliuliangyellow.png" class="card_image"></image>
<view class="er"> 曝光量</view>
<view class="er" style="font-size:48rpx
"> {{exposure}}</view>
</view>
<view class="card_passage">
<image src="../images/customer.png" class="card_image"></image>
<view class="er"> 顾客人数</view>
<view class="er" style="font-size:48rpx
"> {{customer}}</view>
</view>
<view class="card_passage">
<image src="../images/jindianlv.png" class="card_image"></image>
<view class="er"> 进店率</view>
<view class="er" style="font-size:48rpx
"> {{entryRate}}%</view>
</view>
</view>
<!-- 客流趋势分析 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">业态客流TOP5走势</text>
<view class="tab_tll">
<text class="text_tltle {{trendtypes==1?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='1'>过店客流</text>
<text class="text_tltle {{trendtypes==2?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='2'>进店客流</text>
<text class="text_tltle {{trendtypes==3?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='3'>顾客人数</text>
<text class="text_tltle {{trendtypes==4?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='4'>进店率</text>
</view>
<basic chartId='chartDatatrend' chartData="{{chartData}}" height="500rpx"></basic>
</view>
<!-- 停留时长统计 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">停留时长统计</text>
<!-- <view class="stome_time">
<!-- 选择时间 -->
<view class="tab_tll">
<text class="text_tltle {{types==1?'actives':'defaults'}}" bindtap="ClickTab" data-type='1'>当日</text>
<text class="text_tltle {{types==2?'actives':'defaults'}}" bindtap="ClickTab" data-type='2'>昨日</text>
<text class="text_tltle {{types==3?'actives':'defaults'}}" bindtap="ClickTab" data-type='3'>近7日</text>
<text class="text_tltle {{types==4?'actives':'defaults'}}" bindtap="ClickTab" data-type='4'>近30日</text>
<text class="text_tltle {{types==5?'actives':'defaults'}}" bindtap="ClickTab" data-type='5'>自定义</text>
</view>
<view class="time_input">
<image src="../images/rili.png" style="width:20px;height:20px;margin-right:20rpx"></image>
<text class="text_input">{{currentTime}}</text>
</view>
<!-- 卡片 -->
<view class="card">
<view class="card_passage">
<image src="../images/keliulaing.png" class="card_image"></image>
<view class="er"> 客流量</view>
<view class="er cardNum
"> {{traffic}}</view>
</view>
<view class="card_passage">
<image src="../images/keliuliangyellow.png" class="card_image"></image>
<view class="er"> 曝光量</view>
<view class="er cardNum
"> {{exposure}}</view>
</view>
<view class="card_passage">
<image src="../images/customer.png" class="card_image"></image>
<view class="er"> 顾客人数</view>
<view class="er cardNum
"> {{customer}}</view>
</view>
<view class="card_passage">
<image src="../images/jindianlv.png" class="card_image"></image>
<view class="er"> 进店率</view>
<view class="er cardNum
"> {{entryRate}}%</view>
</view>
</view>
<!-- 客流趋势分析 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">业态客流TOP5走势</text>
<view class="tab_tll">
<text class="text_tltle {{trendtypes==1?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='1'>过店客流</text>
<text class="text_tltle {{trendtypes==2?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='2'>进店客流</text>
<text class="text_tltle {{trendtypes==3?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='3'>顾客人数</text>
<text class="text_tltle {{trendtypes==4?'actives':'defaults'}}" bindtap="ClickPassageFlow" data-type='4'>进店率</text>
</view>
<basic chartId='chartDatatrend' chartData="{{chartData}}" height="500rpx"></basic>
</view>
<!-- 停留时长统计 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">停留时长统计</text>
<!-- <view class="stome_time">
人均停留时长 <text>31</text> 分
</view> -->
<basic chartId='chartDatastop' chartData="{{chartDatastop}}" height="500rpx"></basic>
</view>
<!-- 客群性别占比 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">客群性别占比</text>
<basic chartId='chartDataSex' chartData="{{chartDataSex}}" height="500rpx"></basic>
</view>
<!--客群年龄占比 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">客群年龄占比</text>
<basic chartId='chartDataAge' chartData="{{chartDataAge}}" height="500rpx"></basic>
</view>
<!-- 自定义时间选择器 -->
<van-calendar show="{{ show }}" min-date="{{ minDate }}" bind:close="onClose" color="#447bff" bind:confirm="onConfirm" type='range' />
<basic chartId='chartDatastop' chartData="{{chartDatastop}}" height="500rpx"></basic>
</view>
<!-- 客群性别占比 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">客群性别占比</text>
<basic chartId='chartDataSex' chartData="{{chartDataSex}}" height="500rpx"></basic>
</view>
<!--客群年龄占比 -->
<view class="keliuliang" style="margin-top:30rpx">
<text class="title_chart">客群年龄占比</text>
<basic chartId='chartDataAge' chartData="{{chartDataAge}}" height="500rpx"></basic>
</view>
</view>
<!-- 自定义时间选择器 -->
<van-calendar show="{{ show }}" min-date="{{ minDate }}" bind:close="onClose" color="#447bff" bind:confirm="onConfirm" type='range' />
</view>
\ No newline at end of file
miniProject/index/index2.wxss
View file @
54a2adc
/* pages/homes/index.wxss */
.title {
box-sizing: border-box;
position: fixed;
left: 0;
top: 0;
width: 100%;
z-index: 99;
display: flex;
align-items: center;
justify-content: center;
background-color: #D5E2FF;
height: 140rpx;
font-size: 34rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
padding-top: 40rpx;
color: #000000;
box-sizing: border-box;
position: fixed;
left: 0;
top: 0;
width: 100%;
z-index: 99;
display: flex;
align-items: center;
justify-content: center;
background-color: #D5E2FF;
height: 140rpx;
font-size: 34rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
padding-top: 40rpx;
color: #000000;
}
.container {
margin-top: 140rpx;
padding: 10rpx 20rpx 60px;
background: linear-gradient(154deg, #C7D3FF 0%, #E9F9FF 48%, #FFFFFF 100%);
height: 100%;
}
.contianer_shop {
width: 100%;
height: 168rpx;
position: relative;
width: 100%;
height: 168rpx;
position: relative;
margin-top: 20rpx;
}
.images {
position: absolute;
left: 0;
top: 0;
z-index: 0;
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.shop_name {
margin: 20rpx 0 10rpx 20rpx;
font-size: 34rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
display: flex;
align-items: flex-end;
position: relative;
z-index: 1;
}
.fonts{
font-size: 48rpx;
padding: 30rpx 0 10rpx 28rpx;
font-size: 40rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
line-height: 56rpx;
position: absolute;
}
.shop_name::after {
content: '';
width: 0;
height: 0;
margin-left: 10rpx;
border: 20rpx solid #fff;
border-color: transparent;
border-top-color: #fff;
content: '';
display: inline-block;
width: 0;
height: 0;
margin-left: 20rpx;
border: 20rpx solid #fff;
border-color: transparent;
border-top-color: #fff;
position: absolute;
bottom: 0;
}
.shop_time {
margin-left: 20rpx;
font-size: 26rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(255, 255, 255, 0.65);
position: relative;
position: absolute;
top: 90rpx;
margin-left: 28rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(255, 255, 255, 0.65);
}
.tab_tll {
padding: 0 10rpx;
width: 100%;
margin-top: 30rpx;
position: relative;
display: flex;
/* justify-content: space-between; */
padding: 0 10rpx;
width: 100%;
margin-top: 30rpx;
position: relative;
}
.tab_tll .text_tltle {
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
margin-right: 30rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
margin-right: 30rpx;
}
.actives {
font-weight: 500;
color: #000000;
border-bottom: 4px solid #447BFF;
font-weight: 500;
color: #000000;
border-bottom: 4px solid #447BFF;
}
.defaults {
color: rgba(0, 0, 0, 0.6);
color: rgba(0, 0, 0, 0.6);
}
.time_input {
margin-top: 30rpx;
width: 100%;
height: 80rpx;
background-color: rgba(131, 164, 255, 0.39);
border-radius: 40rpx;
display: flex;
align-items: center;
padding: 0 0 0 50rpx;
margin-top: 30rpx;
width: 100%;
height: 80rpx;
background-color: rgba(131, 164, 255, 0.39);
border-radius: 40rpx;
display: flex;
align-items: center;
padding: 0 0 0 50rpx;
}
.text_input{
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0,0,0,
0.9);
.text_input {
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0,
0.9);
}
.card {
width: 100%;
margin-top: 30rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
width: 100%;
margin-top: 30rpx;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.card>view {
width: 48%;
height: 148rpx;
/* background-color: red; */
position: relative;
padding: 20rpx 20rpx;
width: 48%;
height: 148rpx;
/* background-color: red; */
position: relative;
padding: 20rpx 20rpx;
}
.card>view:nth-child(n+3) {
margin-top: 30rpx;
margin-top: 30rpx;
}
.card_image {
position: absolute;
left: 0;
top: 0;
z-index: 0;
width: 100%;
height: 148rpx;
}
.er{
position: relative;
z-index: 1;
font-size: 28rpx;
position: absolute;
left: 0;
top: 0;
z-index: 0;
width: 100%;
height: 148rpx;
}
.er {
position: relative;
z-index: 1;
font-size: 28rpx;
}
.er.cardNum {
font-size: 40rpx;
}
.card_passage {
display: flex;
flex-direction: column;
justify-content: space-between;
font-size: 24rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
display: flex;
flex-direction: column;
justify-content: space-between;
font-size: 24rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #FFFFFF;
}
.keliuliang {
width: 100%;
padding: 20rpx;
border-radius: 20rpx;
background-color: #fff;
width: 100%;
padding: 20rpx;
border-radius: 20rpx;
background-color: #fff;
}
.keliuliang>text {
height: 44rpx;
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
line-height: 44rpx;
display: flex;
align-items: center;
height: 44rpx;
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #333333;
line-height: 44rpx;
display: flex;
align-items: center;
}
.keliuliang>text::before {
content: '';
width: 6rpx;
height: 30rpx;
margin-right: 10rpx;
background: #5889FF;
border-radius: 3rpx;
content: '';
width: 6rpx;
height: 30rpx;
margin-right: 10rpx;
background: #5889FF;
border-radius: 3rpx;
}
.title_chart {
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
font-size: 32rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: rgba(0, 0, 0, 0.85);
}
.stome_time {
margin-top: 20rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.65);
margin-top: 20rpx;
font-size: 28rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: rgba(0, 0, 0, 0.65);
}
.stome_time text {
font-size: 30rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #5A95EC;
font-size: 30rpx;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #5A95EC;
}
\ No newline at end of file
miniProject/pages/homes/index.js
0 → 100644
View file @
54a2adc
// pages/homes/index.js
Page
({
/**
* 页面的初始数据
*/
data
:
{
},
/**
* 生命周期函数--监听页面加载
*/
onLoad
(
options
)
{
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady
()
{
},
/**
* 生命周期函数--监听页面显示
*/
onShow
()
{
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide
()
{
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload
()
{
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh
()
{
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom
()
{
},
/**
* 用户点击右上角分享
*/
onShareAppMessage
()
{
}
})
\ No newline at end of file
miniProject/pages/homes/index.wxml
0 → 100644
View file @
54a2adc
<!--pages/homes/index.wxml-->
<text>pages/homes/index.wxml</text>
miniProject/pages/login/index.wxml
View file @
54a2adc
...
...
@@ -29,7 +29,7 @@
<input class="userInput" placeholder="请输入密码" password bindinput="changePassword" value="{{ password }}" cursor-spacing="{{40}}" />
</view>
<view class="login-btn">
<
view style="opacity:0;pointer-events: none;" class="login-btn-text" bindtap="changeBaseUrl">切换地址</view
>
<
!-- <view style="opacity:0;pointer-events: none;" class="login-btn-text" bindtap="changeBaseUrl">切换地址</view> --
>
<button class="btn" bindtap="login">登录</button>
</view>
</view>
...
...
miniProject/pages/login/index.wxss
View file @
54a2adc
...
...
@@ -110,7 +110,7 @@
}
.login-btn .btn {
width:
316rpx
;
width:
100%
;
height: 84rpx;
background:rgba(0,105,255,1);
border-radius: 16rpx;
...
...
miniProject/pages/shopSelect/index.wxml
View file @
54a2adc
<!--pages/sameProportion/sameProportion.wxml-->
<import src="../../components/wxSortPickerView/wxSortPickerView.wxml" />
<view class="">
<import src="../../components/wxSortPickerView/wxSortPickerView.wxml" />
<!-- <view class="containers">
<navbar page-name="店铺选择" bg-color="#3A63FF" navbar-color="#fff" nav='back' bindonGoBack='goBacks' />
<view class="part-list">
<view>搜索</view> -->
<view class="titles">请选择
<navbar page-name="请选择" bindonGoBack='goBacks' nav='back' bg-color="RGBA(213, 227, 255, 1)" navbar-color="#000"></navbar>
<!-- <view class="titles">请选择
<view class="befores" bindtap='goBacks'></view>
</view>
</view>
-->
<view class="search">
<van-field value="{{ value }}" placeholder="请输入要搜索的内容" border="{{ true }}" bind:change="onChange" />
</view>
<!-- 模板 -->
<view class="tesl">
<template is="wxSortPickerView" data="{{wxSortPickerData}}"></template>
</view>
</view>
\ No newline at end of file
miniProject/pages/shopSelect/index.wxss
View file @
54a2adc
/* pages/sameProportion/sameProportion.wxss */
@import '../../components/wxSortPickerView/wxSortPickerView.wxss';
.titles {
height: 160rpx;
width: 100%;
box-sizing: border-box;
text-align: center;
padding-top: 90rpx;
background-color: #3A63FF;
font-size: 34rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #fff;
position: relative;
height: 160rpx;
width: 100%;
box-sizing: border-box;
text-align: center;
padding-top: 90rpx;
background-color: #3A63FF;
font-size: 34rpx;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #fff;
position: relative;
}
.befores{
position: absolute;
width: 30rpx;
height: 30rpx;
border: 1px solid #fff;
border-bottom-color: transparent;
border-right-color: transparent;
transform: rotate(315deg);
left: 40rpx;
top: 100rpx;
.befores {
position: absolute;
width: 30rpx;
height: 30rpx;
border: 1px solid #fff;
border-bottom-color: transparent;
border-right-color: transparent;
transform: rotate(315deg);
left: 40rpx;
top: 100rpx;
}
.search{
height: 80rpx;
box-sizing: border-box;
background: red;
.search {
height: 80rpx;
box-sizing: border-box;
/* background: red; */
margin-top: 110rpx;
}
.tesl{
height: calc(100% - 240rpx);
overflow: auto;
padding: 0 20rpx;
.tesl {
height: auto;
overflow: auto;
padding: 0 20rpx;
}
\ No newline at end of file
Write
Preview
Markdown
is supported
Attach a file
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 post a comment