Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Toggle navigation
This project
Loading...
Sign in
李君
/
carrefour
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 dec02d3b
authored
2 years ago
by
李君
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
优化
1 parent
17b8f456
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
143 additions
and
56 deletions
src/views/Management/DeviceStatus/deviceStatus.vue
src/views/queueManagement/dataPlayback/index.vue
src/views/queueManagement/queueLive/index.vue
src/views/queueManagement/queueStatistics/index.vue
src/views/Management/DeviceStatus/deviceStatus.vue
View file @
dec02d3
...
...
@@ -385,7 +385,8 @@ export default {
},
openDialogVideo
(
row
){
this
.
dialogVideoVisible
=
true
;
this
.
openVideoDialogUrl
=
window
.
_vionConfig
.
aiotUrl
+
"/#/videoIndex?id="
+
row
.
serialnum
console
.
log
(
window
.
_vionConfig
.
aiotUrl
+
"/#/videoIndex?id="
+
this
.
toCode
(
row
.
serialnum
))
this
.
openVideoDialogUrl
=
window
.
_vionConfig
.
aiotUrl
+
"/#/videoIndex?id="
+
this
.
toCode
(
row
.
serialnum
)
},
toCode
(
str1
)
{
let
str
=
window
.
btoa
(
str1
);
...
...
This diff is collapsed.
Click to expand it.
src/views/queueManagement/dataPlayback/index.vue
View file @
dec02d3
<
template
>
<div
class=
"clerk-wrapper queueManagementContainer"
>
<div
class=
"header manage-head-wrapper"
>
<el-form
class=
"boxShadow searchFormSocial"
ref=
"form"
label-width=
"
10
0px"
inline
>
<el-form
class=
"boxShadow searchFormSocial"
ref=
"form"
label-width=
"
9
0px"
inline
>
<el-form-item
:label=
"$t('table.mall')"
>
<el-select
v-model=
"searchForm.mallId"
filterable
:placeholder=
"$t('pholder.select')"
@
change=
"mallChange"
>
<el-option
v-for=
"item in mallListForTerm"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
...
...
@@ -18,6 +18,11 @@
<el-form-item>
<el-time-picker
is-range
v-model=
"searchForm.time"
:range-separator=
"$t('dialog.to')"
:start-placeholder=
"$t('pholder.startDate')"
:end-placeholder=
"$t('pholder.endDate')"
placeholder=
"选择时间范围"
>
</el-time-picker>
</el-form-item>
<el-form-item
:label=
"$t('table.granularity')"
>
<el-select
v-model=
"searchForm.granularity"
:placeholder=
"$t('pholder.select')"
>
<el-option
v-for=
"item in granularityListData"
:key=
"item.value"
:label=
"item.label"
:value=
"item.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
class=
"search-btn"
size=
"mini"
plain
@
click=
"searchFun"
>
{{
$t
(
'button.search'
)
}}
</el-button>
<el-button
type=
"primary"
class=
"search-btn"
v-if=
"!playBtnShow"
size=
"mini"
plain
@
click=
"playFun"
>
{{
$t
(
'button.play'
)
}}
</el-button>
...
...
@@ -29,45 +34,68 @@
</el-form>
</div>
<div
class=
"manage-content"
>
<div
style=
"position:relative"
>
<div
>
<div
class=
"aiot_title"
>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Customers in Queue
</div>
<div
class=
"aiot_title_item_text"
>
Customers in Queue
<
span
class=
"aiot_title_item_unit"
>
(Customers)
</span><
/div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
customersInQueue
}}
</div>
<
div
class=
"aiot_title_item_unit"
>
Customers
</div
>
<
!--
<div
class=
"aiot_title_item_unit"
></div>
--
>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Average Waiting
</div>
<div
class=
"aiot_title_item_text"
>
Average Waiting
Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
averageWaitingTime
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
averageWaitingTime
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Predicted Waiting
</div>
<div
class=
"aiot_title_item_text"
>
Estimated Waiting Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
predictedWaiting
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
predictedWaiting
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Customers Served
</div>
<div
class=
"aiot_title_item_text"
>
Average Service Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
averageServiceTime
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
averageServiceTime
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Average Queuing Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
averageQueuingTime
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
averageQueuingTime
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Customers Served
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span></div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
customersServedTillNow
}}
</div>
<div
class=
"aiot_title_item_unit"
>
Customers
</div>
</div>
</div>
<div
class=
"aiot_title"
>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Throughput
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
throughput
}}
</div>
<div
class=
"aiot_title_item_unit"
>
Customers/hour
</div>
<div
class=
"aiot_title_item_text"
>
Carts
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
carts
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Baskets
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
baskets
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
style=
"font-size: 13px !important;"
>
Customers Abandoned the Queue
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
customersAbandonedQueue
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Open Counters
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
openCounters
}}
/
{{
topData
.
totalCounters
}}
</div>
</div>
<!--
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Crowded Counters
</div>
<div
class=
"aiot_title_item_num"
>
0
</div>
</div>
-->
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Store Entry
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeEntry
}}
</div>
<div
class=
"aiot_title_item_unit"
>
Customers
</div>
<div
class=
"aiot_title_item_text"
>
Customers Served Per Hour
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
throughput
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Store E
xit
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeE
xit
}}
</div>
<
div
class=
"aiot_title_item_unit"
>
Customers
</div
>
<div
class=
"aiot_title_item_text"
>
Store E
ntry
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span>
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeE
ntry
}}
</div>
<
!--
<div
class=
"aiot_title_item_unit"
>
Customers
</div>
--
>
</div>
<!--
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Store Exit
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span></div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeExit
}}
</div>
</div>
-->
</div>
</div>
<div
class=
"asis-table-content"
v-loading=
"loading"
>
...
...
@@ -79,7 +107,7 @@
</div>
-->
<!--
<div
id=
"colorBox"
v-show=
"progressShow"
></div>
-->
</div>
<el-row
:gutter=
"10"
class=
"chart
"
>
<el-row
class=
"chart"
:gutter=
"5
"
>
<el-col
:span=
"12"
>
<div
class=
"chart1"
>
<div
class=
"tabel_title"
>
...
...
@@ -139,8 +167,25 @@
customersInQueue
:
0
,
averageWaitingTime
:
[
0
,
0
],
predictedWaiting
:
[
0
,
0
],
averageServiceTime
:
[
0
,
0
],
averageQueuingTime
:
[
0
,
0
],
customersServedTillNow
:
0
,
},
},
granularityListData
:[
{
value
:
1
,
label
:
'1min'
},
{
value
:
5
,
label
:
'5min'
},
{
value
:
10
,
label
:
'10min'
},{
value
:
15
,
label
:
'15min'
}
],
optionTopConfig
:
{
tooltip
:
{
trigger
:
'axis'
,
...
...
@@ -298,6 +343,8 @@
this
.
topData
=
data
;
this
.
topData
.
averageWaitingTime
=
[
Math
.
floor
(
data
.
averageWaitingTime
/
60
),
data
.
averageWaitingTime
%
60
]
this
.
topData
.
predictedWaiting
=
[
Math
.
floor
(
data
.
predictedWaiting
/
60
),
data
.
predictedWaiting
%
60
]
this
.
topData
.
averageServiceTime
=
[
Math
.
floor
(
data
.
averageServiceTime
/
60
),
data
.
averageServiceTime
%
60
]
this
.
topData
.
averageQueuingTime
=
[
Math
.
floor
(
data
.
averageQueuingTime
/
60
),
data
.
averageQueuingTime
%
60
]
}
})
},
...
...
@@ -568,12 +615,19 @@
</
script
>
<
style
scoped=
"scoped"
lang=
"less"
>
.queueManagementContainer
{
position
:
relative
;
}
.chart
{
position
:
absolute
;
top
:
540px
;
width
:
calc
(
100%
-
20px
);
.chartLine{
width
:
100%
;
height
:
30
0
px
;
height
:
30
5
px
;
}
.chart1
{
background-color
:
#fff
;
width
:
calc
(
100%
-
5px
);
box-shadow
:
0px
3px
12px
0px
rgba
(
196
,
200
,
207
,
0.8
);
}
...
...
@@ -600,7 +654,7 @@
padding
:
5px
12px
;
box-shadow
:
0px
3px
12px
0px
rgba
(
196
,
200
,
207
,
0.8
);
margin-right
:
10px
;
//
margin-bottom
:
10px
;
margin-bottom
:
10px
;
flex
:
1
;
&:last-child{
margin-right
:
5px
;
...
...
@@ -651,13 +705,6 @@
line-height
:
30px
;
}
#container
{
margin-top
:
10px
;
margin-bottom
:
7px
;
}
#colorBox
{
border
:
1px
solid
#ccc
;
margin-top
:
10px
;
height
:
52px
;
box-sizing
:
border-box
;
}
</
style
>
This diff is collapsed.
Click to expand it.
src/views/queueManagement/queueLive/index.vue
View file @
dec02d3
...
...
@@ -10,46 +10,65 @@
</div>
<div
class=
"aiot_title"
>
<div
class=
"aiot_title_item"
>
<!--
<div
class=
"aiot_title_item_text"
>
{{
$t
(
'home.customersInQueue'
)
}}
</div>
-->
<div
class=
"aiot_title_item_text"
>
Customers in Queue
</div>
<div
class=
"aiot_title_item_text"
>
Customers in Queue
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span></div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
customersInQueue
}}
</div>
<
div
class=
"aiot_title_item_unit"
>
Customers
</div
>
<
!--
<div
class=
"aiot_title_item_unit"
></div>
--
>
</div>
<div
class=
"aiot_title_item"
>
<!--
<div
class=
"aiot_title_item_text"
>
{{
$t
(
'home.averagewaitingtime'
)
}}
</div>
-->
<div
class=
"aiot_title_item_text"
>
Average Waiting
</div>
<div
class=
"aiot_title_item_text"
>
Average Waiting Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
averageWaitingTime
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
averageWaitingTime
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<!--
<div
class=
"aiot_title_item_text"
>
{{
$t
(
'home.predictedwaiting'
)
}}
</div>
-->
<div
class=
"aiot_title_item_text"
>
Predicted Waiting
</div>
<div
class=
"aiot_title_item_text"
>
Estimated Waiting Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
predictedWaiting
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
predictedWaiting
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<!--
<div
class=
"aiot_title_item_text"
>
{{
$t
(
'home.customersServedTillNow'
)
}}
</div>
-->
<div
class=
"aiot_title_item_text"
>
Customers Served
</div>
<div
class=
"aiot_title_item_text"
>
Average Service Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
averageServiceTime
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
averageServiceTime
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Average Queuing Time
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
averageQueuingTime
[
0
]
}}
<small
style=
"marginRight:5px"
>
min
</small>
{{
topData
.
averageQueuingTime
[
1
]
}}
<small
style=
"marginLeft:4px"
>
s
</small></div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Customers Served
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span></div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
customersServedTillNow
}}
</div>
<div
class=
"aiot_title_item_unit"
>
Customers
</div>
</div>
</div>
<div
class=
"aiot_title"
>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Carts
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
carts
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Throughput
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
throughput
}}
</div>
<div
class=
"aiot_title_item_unit"
>
Customers/hour
</div>
<div
class=
"aiot_title_item_text"
>
Baskets
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
baskets
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
style=
"font-size: 13px !important;"
>
Customers Abandoned the Queue
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
customersAbandonedQueue
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Open Counters
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
openCounters
}}
/
{{
topData
.
totalCounters
}}
</div>
</div>
<!--
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Crowded Counters
</div>
<div
class=
"aiot_title_item_num"
>
0
</div>
</div>
-->
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Store Entry
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeEntry
}}
</div>
<div
class=
"aiot_title_item_unit"
>
Customers
</div>
<div
class=
"aiot_title_item_text"
>
Customers Served Per Hour
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
throughput
}}
</div>
</div>
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Store E
xit
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeE
xit
}}
</div>
<
div
class=
"aiot_title_item_unit"
>
Customers
</div
>
<div
class=
"aiot_title_item_text"
>
Store E
ntry
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span>
</div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeE
ntry
}}
</div>
<
!--
<div
class=
"aiot_title_item_unit"
>
Customers
</div>
--
>
</div>
<!--
<div
class=
"aiot_title_item"
>
<div
class=
"aiot_title_item_text"
>
Store Exit
<span
class=
"aiot_title_item_unit"
>
(Customers)
</span></div>
<div
class=
"aiot_title_item_num"
>
{{
topData
.
storeExit
}}
</div>
</div>
-->
</div>
</div>
<div
class=
"canvasContainer"
>
...
...
@@ -107,7 +126,7 @@
</el-table-column>
<el-table-column
prop=
"predictedWaiting"
align=
"center"
label=
"Predicted Waiting Time"
>
<
template
slot=
"header"
>
<p
class=
"cell_title"
>
Predic
ted
</p>
<p
class=
"cell_title"
>
Estima
ted
</p>
<p
class=
"cell_title"
>
Waiting Time
</p>
<!--
<p
class=
"cell_unit"
>
Time
</p>
-->
</
template
>
...
...
@@ -121,10 +140,11 @@
<!--
<p
class=
"cell_unit"
>
Customers
</p>
-->
</
template
>
</el-table-column>
<el-table-column
prop=
"throughput"
align=
"center"
width=
"1
2
0"
label=
"Throughput"
>
<el-table-column
prop=
"throughput"
align=
"center"
width=
"1
6
0"
label=
"Throughput"
>
<
template
slot=
"header"
>
<p
class=
"cell_title"
>
Throughput
</p>
<p
class=
"cell_unit"
>
Customers/hour
</p>
<p
class=
"cell_title"
>
Customers Served
</p>
<p
class=
"cell_title"
>
Per Hour
</p>
<!--
<p
class=
"cell_unit"
>
Customers/hour
</p>
-->
</
template
>
</el-table-column>
<el-table-column
prop=
"counterType"
show-overflow-tooltip
align=
"center"
label=
"Lane Type"
:formatter=
"formatCounterType"
:filters=
"counterTypeData"
...
...
@@ -170,6 +190,8 @@ export default {
customersInQueue
:
0
,
averageWaitingTime
:
[
0
,
0
],
predictedWaiting
:
[
0
,
0
],
averageServiceTime
:
[
0
,
0
],
averageQueuingTime
:
[
0
,
0
],
customersServedTillNow
:
0
,
},
//顶部数据
canvas
:
null
,
//canvas实例
...
...
@@ -467,6 +489,17 @@ export default {
totalCounters
:
data
.
totalCounters
,
storeEntry
:
data
.
storeEntry
,
storeExit
:
data
.
storeExit
,
averageServiceTime
:
[
Math
.
floor
(
data
.
averageServiceTime
/
60
),
data
.
averageServiceTime
%
60
,
],
averageQueuingTime
:
[
Math
.
floor
(
data
.
averageQueuingTime
/
60
),
data
.
averageQueuingTime
%
60
,
],
carts
:
data
.
carts
,
baskets
:
data
.
baskets
,
customersAbandonedQueue
:
data
.
customersAbandonedQueue
,
};
this
.
tableData
=
data
.
channelQueueDTOS
;
}
...
...
@@ -648,6 +681,7 @@ export default {
margin-bottom
:
7px
;
}
.aiot_content
{
position
:
relative
;
height
:
100%
;
padding
:
0
8px
0px
10px
;
overflow
:
hidden
;
...
...
@@ -683,8 +717,9 @@ export default {
}
.aiot_title_item_unit
{
font-size
:
12px
;
font-weight
:
700
;
//
font-weight
:
700
;
color
:
#2774e9
;
margin-left
:
5px
;
}
}
.tabel_title
{
...
...
@@ -727,8 +762,11 @@ export default {
}
}
.aiot_bottom
{
position
:
absolute
;
top
:
450px
;
width
:
100%
;
display
:
flex
;
height
:
calc
(
100%
-
4
35
px
);
height
:
calc
(
100%
-
4
60
px
);
//
margin-top
:
5px
;
.tabel
{
width
:
calc
(
55%
-
10px
);
...
...
@@ -746,7 +784,7 @@ export default {
.chart
{
//
overflow
:
hidden
;
width
:
45%
;
height
:
100%
;
;
height
:
100%
;
.chartLine{
width
:
100%
;
height
:
calc
(
100%
-
30px
);
...
...
@@ -756,6 +794,7 @@ export default {
height
:
calc
(
50%
-
5px
);
box-shadow
:
0px
3px
12px
0px
rgba
(
196
,
200
,
207
,
0.8
);
margin-bottom
:
7px
;
background
:
#fff
}
.chart2
{
height
:
calc
(
50%
-
7px
);
...
...
This diff is collapsed.
Click to expand it.
src/views/queueManagement/queueStatistics/index.vue
View file @
dec02d3
...
...
@@ -13,7 +13,7 @@
</el-select>
</el-form-item>
<el-form-item
:label=
"$t('table.laneName')"
>
<el-select
v-model=
"searchForm.cashierChannelId"
:placeholder=
"$t('pholder.selectLane')"
>
<el-select
v-model=
"searchForm.cashierChannelId"
clearable
:placeholder=
"$t('pholder.selectLane')"
>
<el-option
v-for=
"item in channelListData"
:key=
"item.id"
:label=
"item.name"
:value=
"item.id"
/>
</el-select>
</el-form-item>
...
...
This diff is collapsed.
Click to expand it.
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