|
@@ -1,53 +1,27 @@
|
|
|
<template>
|
|
|
<!--地图-->
|
|
|
- <div
|
|
|
- class="M-map"
|
|
|
- :style="isShowMap ? 'display:inline-block' : 'display:none'"
|
|
|
- >
|
|
|
+ <div class="M-map" :style="isShowMap ? 'display:inline-block' : 'display:none'">
|
|
|
<div class="but-box">
|
|
|
- <a-button type="primary" size="small" round @click="isShowMap = false"
|
|
|
- >切换列表</a-button
|
|
|
- >
|
|
|
+ <a-button type="primary" size="small" round @click="isShowMap = false">切换列表</a-button>
|
|
|
</div>
|
|
|
- <baidu-map
|
|
|
- class="map"
|
|
|
- ref="map"
|
|
|
- :center="latlng"
|
|
|
- :zoom="zoom"
|
|
|
- :scroll-wheel-zoom="true"
|
|
|
- @ready="mapReady"
|
|
|
- @click="mapClick"
|
|
|
- :mapStyle="mapConfig"
|
|
|
- >
|
|
|
- <bm-marker
|
|
|
- v-for="item in list"
|
|
|
- :position="{ lat: item.latitude, lng: item.longitude }"
|
|
|
- @click="devicedClick($event, item)"
|
|
|
- :icon="{ url: MarkerIcon, size: { width: 25, height: 25 } }"
|
|
|
- >
|
|
|
- <bm-label
|
|
|
- :content="item.devicename"
|
|
|
- :labelStyle="{ border: 'none', color: '#000' }"
|
|
|
- :offset="{ width: -35, height: 16 }"
|
|
|
- />
|
|
|
+ <baidu-map class="map" ref="map" :center="latlng" :zoom="zoom" :scroll-wheel-zoom="true" @ready="mapReady"
|
|
|
+ @click="mapClick" :mapStyle="mapConfig">
|
|
|
+ <bm-marker v-for="item in list" :position="{ lat: item.latitude, lng: item.longitude }"
|
|
|
+ @click="devicedClick($event, item)" :icon="{ url: MarkerIcon, size: { width: 25, height: 25 } }">
|
|
|
+ <bm-label :content="item.devicename" :labelStyle="{ border: 'none', color: '#000' }"
|
|
|
+ :offset="{ width: -35, height: 16 }" />
|
|
|
</bm-marker>
|
|
|
</baidu-map>
|
|
|
|
|
|
<!--设备信息面板-->
|
|
|
- <div
|
|
|
- class="info-panel"
|
|
|
- :style="infoPanel.baseInfo ? 'display:inline-block' : 'display:none'"
|
|
|
- >
|
|
|
+ <div class="info-panel" :style="infoPanel.baseInfo ? 'display:inline-block' : 'display:none'">
|
|
|
<div class="info-header">
|
|
|
<div class="left">
|
|
|
<span>设备信息</span>
|
|
|
</div>
|
|
|
<div class="right">
|
|
|
- <customBtn
|
|
|
- :btn="true"
|
|
|
- :btn-options="[{ label: '控制面板' }]"
|
|
|
- @clickBtn="deviceClick(infoPanel.baseInfo)"
|
|
|
- ></customBtn>
|
|
|
+ <customBtn :btn="true" :btn-options="[{ label: '控制面板' }]" @clickBtn="deviceClick(infoPanel.baseInfo)">
|
|
|
+ </customBtn>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="map-deviced-info">
|
|
@@ -81,27 +55,14 @@
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div
|
|
|
- style="margin: 10rem 20rem 10rem 20rem"
|
|
|
- :style="!isShowMap ? 'display:inline-block' : 'display:none'"
|
|
|
- >
|
|
|
- <a-button type="primary" size="small" round @click="isShowMap = true"
|
|
|
- >切换地图</a-button
|
|
|
- >
|
|
|
+ <div style="margin: 10rem 20rem 10rem 20rem" :style="!isShowMap ? 'display:inline-block' : 'display:none'">
|
|
|
+ <a-button type="primary" size="small" round @click="isShowMap = true">切换地图</a-button>
|
|
|
</div>
|
|
|
- <div
|
|
|
- class="device-wrapper"
|
|
|
- :style="!isShowMap ? 'display:inline-block' : 'display:none'"
|
|
|
- v-load-directive="deviceLoad"
|
|
|
- >
|
|
|
+ <div class="device-wrapper" :style="!isShowMap ? 'display:inline-block' : 'display:none'"
|
|
|
+ v-load-directive="deviceLoad">
|
|
|
<div class="device-list" v-if="deviceList.length">
|
|
|
- <ContentBox
|
|
|
- v-for="(item, index) in deviceList"
|
|
|
- :key="index"
|
|
|
- bgColor="rgb(255,255,255,0.25)"
|
|
|
- color="#16FFF6"
|
|
|
- @click="deviceClick(item)"
|
|
|
- >
|
|
|
+ <ContentBox v-for="(item, index) in deviceList" :key="index" bgColor="rgb(255,255,255,0.25)" color="#16FFF6"
|
|
|
+ @click="deviceClick(item)">
|
|
|
<div style="height: 30rem"></div>
|
|
|
<div class="siteinfo">
|
|
|
<div class="siteinfo-wrapper">
|
|
@@ -109,13 +70,10 @@
|
|
|
<span>{{ item.sitename || "暂无站点" }}</span>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div
|
|
|
- class="device-title"
|
|
|
- :style="[
|
|
|
- { '--bg': item.eventstatus ? 'red' : 'rgba(255, 164, 6)' },
|
|
|
- { '--icon': item.status == '离线' ? '#cccccc' : '#27AD00' },
|
|
|
- ]"
|
|
|
- >
|
|
|
+ <div class="device-title" :style="[
|
|
|
+ { '--bg': item.eventstatus ? 'red' : 'rgba(255, 164, 6)' },
|
|
|
+ { '--icon': item.status == '离线' ? '#cccccc' : '#27AD00' },
|
|
|
+ ]">
|
|
|
<i class="used"></i>
|
|
|
<a-tooltip>
|
|
|
<template #title>
|
|
@@ -147,6 +105,11 @@ import { Empty } from "ant-design-vue";
|
|
|
import mapConfig from "../../IoTdashboard/modules/mapConfig.js";
|
|
|
import customBtn from "../../controlPanel/modules/customBtn.vue";
|
|
|
import MarkerIcon from "../../../../assets/map/marker1.svg";
|
|
|
+import { useAuthStore } from '@/stores/modules/auth'
|
|
|
+import { storeToRefs } from 'pinia'
|
|
|
+const store = useAuthStore()
|
|
|
+let { system, current, mods, actSystem, menuShow, openKeys } = storeToRefs(store)
|
|
|
+
|
|
|
const simpleImage = Empty.PRESENTED_IMAGE_SIMPLE;
|
|
|
const router = useRouter();
|
|
|
let isShowMap = ref(true);
|
|
@@ -157,9 +120,9 @@ let props = defineProps({
|
|
|
|
|
|
/* 地图 */
|
|
|
let infoPanel = ref({
|
|
|
- baseInfo: "",
|
|
|
- dataInfo: "",
|
|
|
- }),
|
|
|
+ baseInfo: "",
|
|
|
+ dataInfo: "",
|
|
|
+}),
|
|
|
latlng = ref({
|
|
|
lat: 39.9,
|
|
|
lng: 116.39,
|
|
@@ -323,12 +286,23 @@ let getDeviceData = async () => {
|
|
|
};
|
|
|
|
|
|
let deviceClick = (data) => {
|
|
|
+ let sys = system.value.filter(item => item.system == 'iot')
|
|
|
+ if (!sys.length) return message.warning('正在开发中...')
|
|
|
+ if (!sys[0].modules.length) return message.warning('正在开发中...')
|
|
|
+ if (!sys[0].modules[0].apps.length || sys[0].modules[0].apps[0].path == '') return message.warning('正在开发中...')
|
|
|
router.push({
|
|
|
path: "/" + (data.dashboardpath || data.prodnum || "baseDevice"),
|
|
|
query: {
|
|
|
id: data.w_deviceid,
|
|
|
},
|
|
|
- });
|
|
|
+ }).then(() => {
|
|
|
+ let app = sys[0].modules.find(v => v.systemmodule == "devicemag").apps.find(v => v.name == "equipmentmag")
|
|
|
+ current.value = [app.systemappid]
|
|
|
+ actSystem.value = sys[0]
|
|
|
+ openKeys.value.push(app.systemmoduleid)
|
|
|
+ menuShow.value = true
|
|
|
+ store.modulesData(sys[0])
|
|
|
+ })
|
|
|
};
|
|
|
|
|
|
onMounted(async () => {
|
|
@@ -342,12 +316,14 @@ onMounted(async () => {
|
|
|
--color1: #16fff6;
|
|
|
--color2: rgba(255, 164, 6);
|
|
|
}
|
|
|
+
|
|
|
.empty-box {
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
margin-top: 20px;
|
|
|
}
|
|
|
+
|
|
|
/* 地图 */
|
|
|
.M-map {
|
|
|
width: 100%;
|
|
@@ -355,6 +331,7 @@ onMounted(async () => {
|
|
|
position: relative;
|
|
|
padding: 12rem;
|
|
|
}
|
|
|
+
|
|
|
.M-map .map {
|
|
|
width: 100%;
|
|
|
height: 100%;
|
|
@@ -381,34 +358,41 @@ onMounted(async () => {
|
|
|
color: #ffffff;
|
|
|
font-size: 14rem;
|
|
|
}
|
|
|
+
|
|
|
.info-panel .info-header {
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
}
|
|
|
+
|
|
|
.info-panel .map-deviced-info {
|
|
|
background: rgba(255, 255, 255, 0.2);
|
|
|
border-radius: 5rem;
|
|
|
padding: 10rem;
|
|
|
margin: 10rem 0;
|
|
|
}
|
|
|
+
|
|
|
.info-panel .data-info {
|
|
|
background: rgba(255, 255, 255, 0.2);
|
|
|
border-radius: 5rem;
|
|
|
padding: 10rem;
|
|
|
margin: 10rem 0;
|
|
|
}
|
|
|
+
|
|
|
/* 列表 */
|
|
|
.device-wrapper {
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
overflow-y: scroll;
|
|
|
height: calc(100% - 180rem);
|
|
|
- scrollbar-width: none; /* firefox */
|
|
|
- -ms-overflow-style: none; /* IE 10+ */
|
|
|
+ scrollbar-width: none;
|
|
|
+ /* firefox */
|
|
|
+ -ms-overflow-style: none;
|
|
|
+ /* IE 10+ */
|
|
|
margin-top: 10rem;
|
|
|
width: 100%;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list {
|
|
|
display: flex;
|
|
|
flex-wrap: wrap;
|
|
@@ -430,18 +414,21 @@ onMounted(async () => {
|
|
|
background: var(--icon);
|
|
|
margin-right: 10rem;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .device-title {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
height: 44rem;
|
|
|
font-size: 14rem;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .device-title,
|
|
|
img,
|
|
|
.status {
|
|
|
margin-bottom: 10rem;
|
|
|
font-size: 14rem;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .device-title span {
|
|
|
display: inline-block;
|
|
|
width: 140rem;
|
|
@@ -452,6 +439,7 @@ img,
|
|
|
-webkit-box-orient: vertical;
|
|
|
word-break: break-all;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .content_box {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
@@ -463,21 +451,26 @@ img,
|
|
|
width: auto !important;
|
|
|
flex: 1;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .content_box:hover {
|
|
|
--color: red !important;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .content_box:hover img {
|
|
|
transition: all 0.2s;
|
|
|
transform: scale(1.2);
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .i {
|
|
|
border-radius: 20rem;
|
|
|
background: red;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list img {
|
|
|
width: 100%;
|
|
|
max-height: 70rem;
|
|
|
}
|
|
|
+
|
|
|
.device-wrapper .device-list .status {
|
|
|
color: var(--color2);
|
|
|
}
|
|
@@ -488,6 +481,7 @@ img,
|
|
|
top: 0;
|
|
|
width: 100%;
|
|
|
}
|
|
|
+
|
|
|
.siteinfo .siteinfo-wrapper {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
@@ -495,6 +489,7 @@ img,
|
|
|
width: 100%;
|
|
|
background: #40a9ff;
|
|
|
}
|
|
|
+
|
|
|
.siteinfo span {
|
|
|
margin-left: 10px;
|
|
|
white-space: nowrap;
|