|
|
@@ -1,13 +1,9 @@
|
|
|
<template>
|
|
|
<div class="base-container no-events">
|
|
|
- <fnHeader showDate :autoGo="true"></fnHeader>
|
|
|
+ <fnHeader showDate :autoGo="true" hideSwitch></fnHeader>
|
|
|
<div class="content">
|
|
|
<div class="warning-l left">
|
|
|
<div class="warning-top">
|
|
|
- <div class="back-icon yes-events" v-if="!hideChatMapLayer" @click="toggleChatMapLayer">
|
|
|
- <img src="@/assets/images/common/back-icon.png" />
|
|
|
- 返回
|
|
|
- </div>
|
|
|
<div class="top-l yes-events">
|
|
|
<div>
|
|
|
<el-cascader
|
|
|
@@ -20,11 +16,13 @@
|
|
|
popper-class="area-cascader"
|
|
|
/>
|
|
|
</div>
|
|
|
- <!-- <div class="type-box"><img src="@/assets/images/warningHome/lz.png" /></div> -->
|
|
|
</div>
|
|
|
<div class="top-r yes-events">
|
|
|
<div class="data-box" @click="toggleBox('面积')" :class="{ active: activeBoxName === '面积' }">
|
|
|
- <div class="data-value"><span>{{areaVal.includes('3186') ? 31.2 : 419.89}}</span>万亩</div>
|
|
|
+ <div class="data-value">
|
|
|
+ <span>{{ areaVal.includes("3186") ? 31.2 : 419.89 }}</span
|
|
|
+ >万亩
|
|
|
+ </div>
|
|
|
<div class="data-name">种植面积</div>
|
|
|
</div>
|
|
|
<div
|
|
|
@@ -37,44 +35,39 @@
|
|
|
<div class="data-name">疑似失管面积</div>
|
|
|
</div>
|
|
|
<div class="data-box" @click="toggleBox('产量')" :class="{ active: activeBoxName === '产量' }">
|
|
|
- <div class="data-value"><span>{{areaVal.includes('3186') ? 10.4 : 192.12}}</span>万吨</div>
|
|
|
+ <div class="data-value">
|
|
|
+ <span>{{ areaVal.includes("3186") ? 10.4 : 192.12 }}</span
|
|
|
+ >万吨
|
|
|
+ </div>
|
|
|
<div class="data-name">预估产量</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <div class="warning-alarm yes-events" v-show="hideChatMapLayer">
|
|
|
+ <div class="warning-alarm yes-events" v-show="activeBaseTab === '预警分布'">
|
|
|
<alarm-list></alarm-list>
|
|
|
</div>
|
|
|
<div class="time-wrap yes-events">
|
|
|
<time-line></time-line>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <div class="base-tabs yes-events">
|
|
|
+ <div
|
|
|
+ v-for="item in baseTabs"
|
|
|
+ :key="item"
|
|
|
+ class="tab-item"
|
|
|
+ :class="{ active: item === activeBaseTab }"
|
|
|
+ @click="activeBaseTab = item"
|
|
|
+ >
|
|
|
+ {{ item }}
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<div class="warning-r right yes-events">
|
|
|
- <!-- <album></album> -->
|
|
|
- <!-- <chat></chat> -->
|
|
|
-
|
|
|
- <!-- 地图图例 -->
|
|
|
-<!-- <div class="map-legend" v-if="legendImg">-->
|
|
|
-<!-- <img :src="legendImg" />-->
|
|
|
-<!-- </div>-->
|
|
|
-<!-- <div class="map-legend chat-legend" v-show="!legendImg">-->
|
|
|
-<!-- <StaticMapLegend></StaticMapLegend>-->
|
|
|
-<!-- </div>-->
|
|
|
+ <farmInfoGroup></farmInfoGroup>
|
|
|
</div>
|
|
|
+ <!-- 地图图例 -->
|
|
|
+ <map-legend></map-legend>
|
|
|
<div class="warning-search yes-events">
|
|
|
<img src="@/assets/images/warningHome/search-img.png" />
|
|
|
- <!-- <div class="focus-farm">
|
|
|
- <el-select
|
|
|
- v-model="farmVal"
|
|
|
- placeholder="我的关注农场"
|
|
|
- style="width: 189px"
|
|
|
- popper-class="focus-farm-select"
|
|
|
- @change="toggleFarm"
|
|
|
- >
|
|
|
- <el-option label="荔博园" :value="1" />
|
|
|
- <el-option label="井冈红糯基地" :value="2" />
|
|
|
- </el-select>
|
|
|
- </div> -->
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
@@ -96,9 +89,9 @@
|
|
|
|
|
|
<script setup>
|
|
|
import "./map/mockFarmLayer";
|
|
|
-import StaticMapLayers from "@/components/static_map_change/Layers.js"
|
|
|
-import StaticMapLegend from "@/components/static_map_change/legend.vue"
|
|
|
-import StaticMapPointLayers from "@/components/static_map_change/pointLayer.js"
|
|
|
+import StaticMapLayers from "@/components/static_map_change/Layers.js";
|
|
|
+import StaticMapLegend from "@/components/static_map_change/legend.vue";
|
|
|
+import StaticMapPointLayers from "@/components/static_map_change/pointLayer.js";
|
|
|
import { onMounted, onUnmounted, ref } from "vue";
|
|
|
import fnHeader from "@/components/fnHeader.vue";
|
|
|
import WarningMap from "./warningMap";
|
|
|
@@ -113,6 +106,8 @@ import { useRouter } from "vue-router";
|
|
|
import eventBus from "@/api/eventBus";
|
|
|
import { areaListOptions } from "./area";
|
|
|
import { useStore } from "vuex";
|
|
|
+import farmInfoGroup from "./components/farmInfoGroup.vue";
|
|
|
+import mapLegend from "./components/mapLegend.vue";
|
|
|
|
|
|
let store = useStore();
|
|
|
|
|
|
@@ -126,8 +121,12 @@ const router = useRouter();
|
|
|
const areaVal = ref(["3"]);
|
|
|
const mapRef = ref();
|
|
|
|
|
|
+// 顶部基础 tabs
|
|
|
+const baseTabs = ["作物分布", "物候期分布", "预警分布", "农场分布", "农服管理"];
|
|
|
+const activeBaseTab = ref("作物分布");
|
|
|
+
|
|
|
const legendImg = ref("");
|
|
|
-const warningLayers = ref({})
|
|
|
+const warningLayers = ref({});
|
|
|
onMounted(() => {
|
|
|
warningMap.initMap(store.getters.userinfo.location, mapRef.value);
|
|
|
alarmLayer = new AlarmLayer(warningMap.kmap);
|
|
|
@@ -138,73 +137,73 @@ onMounted(() => {
|
|
|
// staticMapLayers.show("testpng")
|
|
|
// },2000)
|
|
|
|
|
|
- eventBus.emit("warningMap:init", warningMap.kmap)
|
|
|
+ eventBus.emit("warningMap:init", warningMap.kmap);
|
|
|
|
|
|
// 图例数据
|
|
|
eventBus.on("alarmList:warningLayers", (data) => {
|
|
|
- warningLayers.value = data
|
|
|
+ warningLayers.value = data;
|
|
|
});
|
|
|
|
|
|
- eventBus.on("alarmList:changeMapLayer", ({name, legendUrl}) => {
|
|
|
- if(legendUrl){
|
|
|
- legendImg.value = legendUrl;
|
|
|
- }else{
|
|
|
- legendImg.value = warningLayers.value[`${name}图例`];
|
|
|
- let text = ''
|
|
|
- if(name==='日间温度'){
|
|
|
- text = '从化地块日温'
|
|
|
- }else if(name==='夜间温度'){
|
|
|
- text = '从化地块夜温'
|
|
|
- }else if(name==='土壤水分'){
|
|
|
- text = '从化地块水分'
|
|
|
- }
|
|
|
- if(text!==''){
|
|
|
- staticMapLayers.showSingle(text,true)
|
|
|
- }else{
|
|
|
- staticMapLayers.hideAll()
|
|
|
+ eventBus.on("alarmList:changeMapLayer", ({ name, legendUrl }) => {
|
|
|
+ if (legendUrl) {
|
|
|
+ legendImg.value = legendUrl;
|
|
|
+ } else {
|
|
|
+ legendImg.value = warningLayers.value[`${name}图例`];
|
|
|
+ let text = "";
|
|
|
+ if (name === "日间温度") {
|
|
|
+ text = "从化地块日温";
|
|
|
+ } else if (name === "夜间温度") {
|
|
|
+ text = "从化地块夜温";
|
|
|
+ } else if (name === "土壤水分") {
|
|
|
+ text = "从化地块水分";
|
|
|
+ }
|
|
|
+ if (text !== "") {
|
|
|
+ staticMapLayers.showSingle(text, true);
|
|
|
+ } else {
|
|
|
+ staticMapLayers.hideAll();
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
});
|
|
|
|
|
|
// ai与地图交互
|
|
|
- eventBus.off("chat:showMapLayer", handleMapLayer)
|
|
|
- eventBus.on("chat:showMapLayer", handleMapLayer)
|
|
|
+ eventBus.off("chat:showMapLayer", handleMapLayer);
|
|
|
+ eventBus.on("chat:showMapLayer", handleMapLayer);
|
|
|
});
|
|
|
-sessionStorage.removeItem("farmId")
|
|
|
+sessionStorage.removeItem("farmId");
|
|
|
|
|
|
-onUnmounted(()=>{
|
|
|
- eventBus.off("alarmList:changeMapLayer")
|
|
|
-})
|
|
|
+onUnmounted(() => {
|
|
|
+ eventBus.off("alarmList:changeMapLayer");
|
|
|
+});
|
|
|
|
|
|
// ai与地图交互
|
|
|
-const hideChatMapLayer = ref(true)
|
|
|
-const handleMapLayer = ({mapName, isHome}) => {
|
|
|
+const hideChatMapLayer = ref(true);
|
|
|
+const handleMapLayer = ({ mapName, isHome }) => {
|
|
|
if (!isHome) {
|
|
|
- hideChatMapLayer.value = false
|
|
|
+ hideChatMapLayer.value = false;
|
|
|
}
|
|
|
- staticMapPointLayers.hidePoint()
|
|
|
- staticMapLayers.hideAll()
|
|
|
+ staticMapPointLayers.hidePoint();
|
|
|
+ staticMapLayers.hideAll();
|
|
|
|
|
|
// 重置时间轴
|
|
|
// eventBus.emit("map_click_alarm")
|
|
|
if (mapName === "植保机") {
|
|
|
- staticMapLayers.show("分散种植", true)
|
|
|
- staticMapPointLayers.showPoint()
|
|
|
+ staticMapLayers.show("分散种植", true);
|
|
|
+ staticMapPointLayers.showPoint();
|
|
|
} else if (mapName) {
|
|
|
// staticMapLayers.show("作物种类")
|
|
|
if (isHome) {
|
|
|
- staticMapLayers.show(mapName, true)
|
|
|
+ staticMapLayers.show(mapName, true);
|
|
|
} else {
|
|
|
- staticMapLayers.showSingle(mapName, true)
|
|
|
+ staticMapLayers.showSingle(mapName, true);
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
+};
|
|
|
|
|
|
const toggleChatMapLayer = () => {
|
|
|
- hideChatMapLayer.value = true
|
|
|
+ hideChatMapLayer.value = true;
|
|
|
eventBus.emit("chat:hideMapLayer");
|
|
|
- staticMapLayers.hideAll()
|
|
|
-}
|
|
|
+ staticMapLayers.hideAll();
|
|
|
+};
|
|
|
|
|
|
const destroyPopup = () => {
|
|
|
eventBus.emit("map:destroyPopup");
|
|
|
@@ -285,52 +284,44 @@ const toggleBox = (name) => {
|
|
|
bottom: -12px;
|
|
|
}
|
|
|
}
|
|
|
+ .base-tabs {
|
|
|
+ position: fixed;
|
|
|
+ top: 32px;
|
|
|
+ left: 390px;
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ .tab-item {
|
|
|
+ padding: 7px 12px 9px;
|
|
|
+ margin-right: 28px;
|
|
|
+ text-align: center;
|
|
|
+ font-family: "PangMenZhengDao";
|
|
|
+ font-size: 16px;
|
|
|
+ color: #fff;
|
|
|
+ background: rgba(28, 36, 41, 0.8);
|
|
|
+ border-radius: 4px;
|
|
|
+ cursor: pointer;
|
|
|
+ border: 1px solid transparent;
|
|
|
+ &.active {
|
|
|
+ color: #ffdf9a;
|
|
|
+ background: rgba(19, 22, 16, 0.8);
|
|
|
+ border: 1px solid #ffd489;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
.warning-search {
|
|
|
position: absolute;
|
|
|
- right: 400px;
|
|
|
- top: -34px;
|
|
|
+ right: 208px;
|
|
|
+ top: -44px;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
.focus-farm {
|
|
|
padding-left: 15px;
|
|
|
}
|
|
|
- ::v-deep {
|
|
|
- .el-select__wrapper {
|
|
|
- background: rgba(255, 212, 137, 0.2);
|
|
|
- box-shadow: 0 0 0 1px rgba(255, 212, 137, 0.3) inset;
|
|
|
- height: 50px;
|
|
|
- line-height: 50px;
|
|
|
- .el-select__caret {
|
|
|
- color: #ffd489;
|
|
|
- }
|
|
|
- }
|
|
|
- .el-select__placeholder {
|
|
|
- color: #f7be5a;
|
|
|
- font-size: 20px;
|
|
|
- font-family: "PangMenZhengDao";
|
|
|
- text-align: center;
|
|
|
- }
|
|
|
- }
|
|
|
}
|
|
|
.warning-top {
|
|
|
display: flex;
|
|
|
width: max-content;
|
|
|
align-items: center;
|
|
|
- .back-icon {
|
|
|
- cursor: pointer;
|
|
|
- margin-right: 20px;
|
|
|
- height: 50px;
|
|
|
- display: flex;
|
|
|
- align-items: center;
|
|
|
- padding: 0 20px;
|
|
|
- border: 1px solid rgba(255, 255, 255, 0.6);
|
|
|
- background: rgba(0, 0, 0, 0.2);
|
|
|
- border-radius: 4px;
|
|
|
- img {
|
|
|
- width: 17px;
|
|
|
- margin-right: 10px;
|
|
|
- }
|
|
|
- }
|
|
|
.top-l {
|
|
|
display: flex;
|
|
|
flex-direction: column;
|