Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
D
device-new-platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
device-new-platform
Commits
803e6766
Commit
803e6766
authored
Aug 15, 2023
by
王晓旭
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改地图和地图列表
parent
edccefc6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
285 additions
and
26 deletions
+285
-26
device-manager-ui/admin/src/assets/images/lx.png
device-manager-ui/admin/src/assets/images/lx.png
+0
-0
device-manager-ui/admin/src/assets/images/sbzs.png
device-manager-ui/admin/src/assets/images/sbzs.png
+0
-0
device-manager-ui/admin/src/assets/images/zx.png
device-manager-ui/admin/src/assets/images/zx.png
+0
-0
device-manager-ui/admin/src/components/Map.vue
device-manager-ui/admin/src/components/Map.vue
+71
-17
device-manager-ui/admin/src/views/sitestat/maplist.vue
device-manager-ui/admin/src/views/sitestat/maplist.vue
+214
-9
No files found.
device-manager-ui/admin/src/assets/images/lx.png
0 → 100644
View file @
803e6766
31 KB
device-manager-ui/admin/src/assets/images/sbzs.png
0 → 100644
View file @
803e6766
31.5 KB
device-manager-ui/admin/src/assets/images/zx.png
0 → 100644
View file @
803e6766
28.1 KB
device-manager-ui/admin/src/components/Map.vue
View file @
803e6766
...
@@ -13,6 +13,7 @@
...
@@ -13,6 +13,7 @@
class=
"amap-demo"
class=
"amap-demo"
>
>
<div
class=
"tuli"
><slot
name=
"leftTop"
></slot></div>
<div
class=
"tuli"
><slot
name=
"leftTop"
></slot></div>
<div
class=
"liebiao"
><slot
name=
"rightTop"
></slot></div>
<!--
<el-amap-search-box
:on-search-result=
"onSearchResult"
:events=
'searchEvents'
/>
-->
<!--
<el-amap-search-box
:on-search-result=
"onSearchResult"
:events=
'searchEvents'
/>
-->
...
@@ -20,12 +21,28 @@
...
@@ -20,12 +21,28 @@
<el-amap-marker
<el-amap-marker
v-for=
"(marker, index) in markers"
v-for=
"(marker, index) in markers"
:key=
"'marker' + index"
:key=
"'marker' + index"
:events=
"marker
.
events"
:events=
"markerevents"
:position=
"marker.position"
:position=
"marker.position"
:label=
"marker.label"
:label=
"marker.label"
:contentRender=
"contentRender"
:contentRender=
"contentRender"
:extData=
"marker"
:extData=
"marker"
>
>
<div
class=
"marker-using-slot"
style=
"positon: relative"
>
<img
style=
"width: 36px; height: 50px"
src=
"@/assets/images/red.png"
/>
<div
style=
"
color: #ffffff;
position: absolute;
top: 8px;
left: 50%;
transform: translate(-50%);
"
v-if=
"marker.extData.level == 1"
>
{{
marker
.
extData
.
siteCount
}}
</div>
</div>
</el-amap-marker>
</el-amap-marker>
<!--信息窗体-->
<!--信息窗体-->
...
@@ -37,7 +54,7 @@
...
@@ -37,7 +54,7 @@
><el-row
:body-style=
"
{ padding: '0px' }">
><el-row
:body-style=
"
{ padding: '0px' }">
<el-row
type=
"flex"
justify=
"space-between"
>
<el-row
type=
"flex"
justify=
"space-between"
>
<span
style=
"font-size: 18px"
<span
style=
"font-size: 18px"
><b>
{{
info
.
siteName
}}
</b></span
><b>
{{
info
.
label
}}
</b></span
>
>
<el-button
<el-button
type=
"text"
type=
"text"
...
@@ -140,6 +157,34 @@ export default {
...
@@ -140,6 +157,34 @@ export default {
},
},
created
()
{
created
()
{
this
.
refresh
(
this
.
markersData
);
this
.
refresh
(
this
.
markersData
);
this
.
markerevents
=
{
click
:
(
e
)
=>
{
let
exData
=
e
.
target
.
getExtData
();
this
.
center
=
[
exData
.
extData
.
lng
,
exData
.
extData
.
lat
]
this
.
zoom
=
8
this
.
info
=
exData
.
extData
;
this
.
window
.
position
=
exData
.
position
;
if
(
this
.
info
.
children
&&
this
.
info
.
children
.
length
>
0
){
let
children
=
JSON
.
parse
(
JSON
.
stringify
(
exData
.
extData
.
children
))
children
=
this
.
flatten
(
children
)
children
=
children
.
map
(
i
=>
{
return
{
...
i
,
lat
:
i
.
latitude
,
lng
:
i
.
longitude
,
}})
exData
.
extData
.
level
=
''
children
.
unshift
(
JSON
.
parse
(
JSON
.
stringify
(
exData
.
extData
)))
children
=
children
.
filter
((
v
)
=>
{
return
v
.
type
==
"
site
"
;
});
this
.
refresh
(
children
)
}
this
.
window
.
visible
=
false
;
this
.
$nextTick
(()
=>
{
this
.
window
.
visible
=
true
;
//点击点坐标,出现信息窗体
});
},
}
},
},
methods
:
{
methods
:
{
formatterDate
,
formatterDate
,
...
@@ -152,8 +197,9 @@ export default {
...
@@ -152,8 +197,9 @@ export default {
});
});
},
},
refresh
(
data
)
{
refresh
(
data
)
{
// console.log("刷新数据", data);
// console.log("刷新数据", data
,this.markers
);
this
.
markersData
=
data
;
this
.
markersData
=
data
;
this
.
markers
=
[]
this
.
markersData
.
map
((
item
)
=>
{
this
.
markersData
.
map
((
item
)
=>
{
this
.
setMarker
(
item
);
this
.
setMarker
(
item
);
});
});
...
@@ -168,27 +214,23 @@ export default {
...
@@ -168,27 +214,23 @@ export default {
setMarker
(
item
)
{
setMarker
(
item
)
{
if
(
!
item
.
lng
&&
!
item
.
lat
)
return
;
if
(
!
item
.
lng
&&
!
item
.
lat
)
return
;
let
markerLabel
=
{
let
markerLabel
=
{
label
:
{
content
:
item
.
siteName
,
offset
:
[
20
,
38
]
},
label
:
{
offset
:
[
20
,
38
]
},
position
:
[
item
.
lng
,
item
.
lat
],
position
:
[
item
.
lng
,
item
.
lat
],
//icon: require("@/assets/images/marker-blue.png"),
//icon: require("@/assets/images/marker-blue.png"),
extData
:
item
,
extData
:
item
,
events
:
{
click
:
(
e
)
=>
{
// console.log("getExtData", e.target.getExtData());
let
exData
=
e
.
target
.
getExtData
();
this
.
info
=
exData
.
extData
;
this
.
window
.
position
=
exData
.
position
;
this
.
window
.
visible
=
false
;
this
.
$nextTick
(()
=>
{
this
.
window
.
visible
=
true
;
//点击点坐标,出现信息窗体
});
},
},
};
};
this
.
markers
.
push
(
markerLabel
);
this
.
markers
.
push
(
markerLabel
);
},
},
flatten
(
arr
)
{
return
arr
.
reduce
((
result
,
item
)
=>
{
return
result
.
concat
(
item
,
Array
.
isArray
(
item
.
children
)
?
this
.
flatten
(
item
.
children
)
:
[]
);
},
[]);
},
// 处理搜索结果,定位到中心点
// 处理搜索结果,定位到中心点
onSearchResult
(
pois
)
{
onSearchResult
(
pois
)
{
let
latSum
=
0
;
let
latSum
=
0
;
...
@@ -369,6 +411,18 @@ export default {
...
@@ -369,6 +411,18 @@ export default {
</
script
>
</
script
>
<
style
lang=
"less"
>
<
style
lang=
"less"
>
.amap-maptypecontrol{
display: none;
}
.liebiao{
width: 400px;
top: 40px;
right: 34px;
position: absolute;
// float: right;
background-color: rgba(255, 255, 255, 0.7);
}
.tuli {
.tuli {
width: 300px;
width: 300px;
top: 20px;
top: 20px;
...
...
device-manager-ui/admin/src/views/sitestat/maplist.vue
View file @
803e6766
...
@@ -27,8 +27,52 @@
...
@@ -27,8 +27,52 @@
>
>
</el-tree>
</el-tree>
</el-scrollbar>
</el-scrollbar>
</el-card>
</el-row
</el-card>
></Map>
</el-row>
<el-row
:gutter=
"20"
slot=
"rightTop"
class=
"mytree"
>
<el-card>
<div
slot=
"header"
>
<span><b
class=
"cardTitle"
>
站点列表
</b></span>
</div>
<div
class=
"listbody"
>
<div
class=
"listtop"
>
<div
class=
"item sbzs"
>
<div>
{{
listNum
.
all
}}
</div>
<div
class=
"wz"
>
设备总数(台)
</div>
</div>
<div
class=
"item zx"
>
<div>
{{
listNum
.
online
}}
</div>
<div
class=
"wz"
>
在线(台)
</div>
</div>
<div
class=
"item lx"
>
<div>
{{
listNum
.
unline
}}
</div>
<div
class=
"wz"
>
离线(台)
</div>
</div>
</div>
<div
class=
"maplist"
>
<div
v-for=
"(item,index) in rightShowList"
:key=
"index"
class=
"deployitem"
>
<div
class=
"top"
>
<div
class=
"title"
>
{{
item
.
label
}}
</div>
<div
class=
"ckxq pointer"
@
click=
"getDetailData(item)"
>
查看详情
</div>
</div>
<div
class=
"are"
>
{{
item
.
detailAddress
}}
</div>
<div
class=
"data"
>
<div
class=
"sbzs dataitem"
>
设备总数:
<span>
{{
item
.
deviceTotal
}}
台
</span>
</div>
<div
class=
"zx dataitem"
>
在线:
<span>
{{
item
.
onlineTotal
}}
台
</span>
</div>
<div
class=
"lx dataitem"
>
离线:
<span>
{{
item
.
offlineTotal
}}
台
</span>
</div>
</div>
</div>
</div>
</div>
</el-card>
</el-row>
</Map>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
<dialog-show
ref=
"dialogform"
@
ok=
"getData"
/>
</div>
</div>
</
template
>
</
template
>
...
@@ -45,19 +89,57 @@ export default {
...
@@ -45,19 +89,57 @@ export default {
mounted
()
{
mounted
()
{
this
.
pageInfo
.
list
=
"
/sitestat/list
"
;
this
.
pageInfo
.
list
=
"
/sitestat/list
"
;
},
},
watch
:{
originData
(
newval
){
let
val
=
JSON
.
parse
(
JSON
.
stringify
(
newval
))
let
arr
=
this
.
flatten
(
val
).
filter
((
v
)
=>
{
return
v
.
type
==
"
site
"
;
});
this
.
rightShowList
=
arr
let
all
=
0
;
let
online
=
0
;
let
unline
=
0
;
arr
.
forEach
(
v
=>
{
all
+=
parseInt
(
v
.
deviceTotal
)
online
+=
parseInt
(
v
.
onlineTotal
)
unline
+=
parseInt
(
v
.
offlineTotal
)
})
this
.
listNum
.
all
=
all
this
.
listNum
.
online
=
online
this
.
listNum
.
unline
=
unline
}
},
created
()
{
created
()
{
this
.
pageInfo
.
list
=
"
/sitestat/list
"
;
this
.
pageInfo
.
list
=
"
/sitestat/list
"
;
this
.
$get
(
"
/sitestat/maplist
"
,
{}).
then
(({
data
})
=>
{
//
this.$get("/sitestat/maplist", {}).then(({ data }) => {
this
.
originData
=
data
;
//
this.originData = data;
this
.
$refs
.
map
.
refresh
(
this
.
originData
);
//
this.$refs.map.refresh(this.originData);
});
//
});
this
.
$get
(
"
/sitestat/siteTree
"
,
{}).
then
(({
data
})
=>
{
this
.
$get
(
"
/sitestat/siteTree
"
,
{}).
then
(({
data
})
=>
{
this
.
areaData
=
data
.
data
;
let
arr
=
[]
data
.
data
.
forEach
(
i
=>
{
arr
.
push
({
...
i
,
lat
:
i
.
latitude
,
lng
:
i
.
longitude
,
level
:
1
})
})
this
.
originData
=
arr
this
.
areaData
=
JSON
.
parse
(
JSON
.
stringify
(
arr
));
this
.
$refs
.
map
.
refresh
(
this
.
originData
);
});
});
},
},
methods
:
{
methods
:
{
flatten
(
arr
)
{
return
arr
.
reduce
((
result
,
item
)
=>
{
return
result
.
concat
(
item
,
Array
.
isArray
(
item
.
children
)
?
this
.
flatten
(
item
.
children
)
:
[]
);
},
[]);
},
/** 下载模板操作 */
/** 下载模板操作 */
downloadTemplate
()
{
downloadTemplate
()
{
this
.
isExport
=
true
;
this
.
isExport
=
true
;
...
@@ -121,6 +203,7 @@ export default {
...
@@ -121,6 +203,7 @@ export default {
},
},
handleNodeClick
(
node
)
{
handleNodeClick
(
node
)
{
this
.
$refs
.
map
.
window
.
visible
=
false
;
this
.
currentNode
=
node
;
this
.
currentNode
=
node
;
if
(
node
.
type
===
"
site
"
)
{
if
(
node
.
type
===
"
site
"
)
{
let
obj
=
{};
let
obj
=
{};
...
@@ -128,10 +211,37 @@ export default {
...
@@ -128,10 +211,37 @@ export default {
obj
.
lat
=
node
.
latitude
;
obj
.
lat
=
node
.
latitude
;
this
.
$refs
.
map
.
relocate
(
obj
);
this
.
$refs
.
map
.
relocate
(
obj
);
}
}
if
(
node
.
level
==
1
){
let
arr
=
[]
arr
.
push
(
JSON
.
parse
(
JSON
.
stringify
(
node
)))
this
.
originData
=
arr
this
.
$refs
.
map
.
refresh
(
this
.
originData
);
this
.
$refs
.
map
.
zoom
=
6
}
else
{
let
children
=
JSON
.
parse
(
JSON
.
stringify
(
node
.
children
))
children
=
this
.
$refs
.
map
.
flatten
(
children
)
children
.
unshift
(
JSON
.
parse
(
JSON
.
stringify
(
node
)))
children
=
children
.
filter
((
v
)
=>
{
return
v
.
type
==
"
site
"
;
});
children
=
children
.
map
(
i
=>
{
return
{
...
i
,
lat
:
i
.
latitude
,
lng
:
i
.
longitude
,
}})
this
.
originData
=
children
this
.
$refs
.
map
.
refresh
(
this
.
originData
);
}
},
},
},
},
data
()
{
data
()
{
return
{
return
{
listNum
:{
all
:
0
,
online
:
0
,
unline
:
0
},
rightShowList
:[],
isExport
:
false
,
isExport
:
false
,
originData
:
[],
originData
:
[],
config
:
{
config
:
{
...
@@ -189,7 +299,102 @@ export default {
...
@@ -189,7 +299,102 @@ export default {
};
};
</
script
>
</
script
>
<
style
>
<
style
lang=
"less"
scoped
>
.deployitem {
padding: 10px 0;
color: #223333;
border-bottom: 1px solid gainsboro;
.top{
display: flex;
justify-content: space-between;
}
.ckxq {
font-size: 10px;
margin-right: 20px;
margin-top: 8px;
color: #1890ff;
flex-shrink: 0;
}
.data {
display: flex;
font-size: 12px;
font-weight: 500;
color: #999999;
margin: 4px 0;
.dataitem {
margin-right: 16px;
}
.sbzs > span {
color: #223333;
}
.zx > span {
color: #0064e9;
}
.zx {
position: relative;
}
.zx::before {
content: "";
position: absolute;
width: 4px;
height: 4px;
background: #0064e9;
border-radius: 50%;
top: 6px;
left: -6px;
}
.lx > span {
color: #fa4d4c;
}
}
.title {
font-size: 14px;
font-weight: 600;
padding: 4px 0;
}
.are {
font-size: 12px;
}
}
.listbody::-webkit-scrollbar {
width: 0;
}
.listbody{
max-height: 700px;
overflow: auto;
.listtop{
display: flex;
justify-content: space-between;
padding: 20px 0 10px;
border-bottom: 1px solid #dcdcdc;
.item {
width: 120px;
height: 60px;
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
color: #fff;
padding-bottom: 6px;
font-size: 8px;
.wz {
margin-left: 14px;
}
}
.sbzs {
background: url("~@/assets/images/sbzs.png") no-repeat;
background-size: 100% 100%;
}
.zx {
background: url("~@/assets/images/zx.png") no-repeat;
background-size: 100% 100%;
}
.lx {
background: url("~@/assets/images/lx.png") no-repeat;
background-size: 100% 100%;
}
}
}
.el-card__body {
.el-card__body {
padding: 10px;
padding: 10px;
}
}
...
...
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