|
@@ -24,7 +24,7 @@
|
|
|
<Transition>
|
|
|
<div v-if="contentShow.b2" v-collapse="'scroll'" class="flex-1 pr-1">
|
|
|
<div class="title-shade">
|
|
|
- <span>限制空域</span>
|
|
|
+ <span>空域</span>
|
|
|
<i class="btn-edit"></i>
|
|
|
<i class="drop-down" @click="toggleContentShow('b2r1')" :class="{ 'reverse': contentShow.b2r1 }"></i>
|
|
|
</div>
|
|
@@ -32,15 +32,15 @@
|
|
|
<ul v-if="contentShow.b2r1" v-collapse>
|
|
|
<li v-for="item in areaList" class="list-item">
|
|
|
<img src="../../../assets/images/page/icon-location.png" alt="">
|
|
|
- <span>{{ item.label }}</span>
|
|
|
- <i title="查看" @click="handleCheckArea(item)" :class="{'active': item.check}"></i>
|
|
|
- <i title="网格" :class="{'active': item.mesh}"></i>
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ <i title="查看" @click="handleCheck(item, 'area')" :class="{ 'active': item.check }"></i>
|
|
|
+ <i title="网格" @click="handleMesh(item, 'area')" :class="{ 'active': item.mesh }"></i>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</Transition>
|
|
|
|
|
|
<div class="title-shade">
|
|
|
- <span>航路航线</span>
|
|
|
+ <span>航线</span>
|
|
|
<i class="btn-edit"></i>
|
|
|
<i class="drop-down" @click="toggleContentShow('b2r2')" :class="{ 'reverse': contentShow.b2r2 }"></i>
|
|
|
</div>
|
|
@@ -48,9 +48,25 @@
|
|
|
<ul v-if="contentShow.b2r2" v-collapse>
|
|
|
<li v-for="item in routeList" class="list-item">
|
|
|
<img src="../../../assets/images/page/icon-route.png" alt="">
|
|
|
- <span>{{ item.label }}</span>
|
|
|
- <i title="查看" :class="{'active': item.check}"></i>
|
|
|
- <i title="网格" :class="{'active': item.mesh}"></i>
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ <i title="查看" @click="handleCheck(item, 'route')" :class="{ 'active': item.check }"></i>
|
|
|
+ <i title="网格" @click="handleMesh(item, 'route')" :class="{ 'active': item.mesh }"></i>
|
|
|
+ </li>
|
|
|
+ </ul>
|
|
|
+ </Transition>
|
|
|
+
|
|
|
+ <div class="title-shade">
|
|
|
+ <span>起降场</span>
|
|
|
+ <i class="btn-edit"></i>
|
|
|
+ <i class="drop-down" @click="toggleContentShow('b2r3')" :class="{ 'reverse': contentShow.b2r3 }"></i>
|
|
|
+ </div>
|
|
|
+ <Transition>
|
|
|
+ <ul v-if="contentShow.b2r3" v-collapse>
|
|
|
+ <li v-for="item in plotList" class="list-item">
|
|
|
+ <img src="../../../assets/images/page/icon-plot.png" alt="">
|
|
|
+ <span>{{ item.name }}</span>
|
|
|
+ <i title="查看" @click="handleCheck(item, 'plot')" :class="{ 'active': item.check }"></i>
|
|
|
+ <i title="网格" @click="handleMesh(item, 'plot')" :class="{ 'active': item.mesh }"></i>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</Transition>
|
|
@@ -61,57 +77,163 @@
|
|
|
|
|
|
<script setup>
|
|
|
import { getAssetsFile, getData } from '@/utils/require';
|
|
|
-import { nextTick, reactive, ref } from 'vue';
|
|
|
-import { showShapes } from '../../../utils/map/addLayer'
|
|
|
+import { onBeforeMount, onBeforeUnmount, reactive, ref } from 'vue';
|
|
|
+import { showShapes, heatMap, AddSingleLayer, InspectCube } from '@/utils/map/addLayer'
|
|
|
+import { GetAreaList, GetPlotList, GetRouteList } from '@/service/http'
|
|
|
+
|
|
|
+onBeforeMount(() => {
|
|
|
+ getLists()
|
|
|
+})
|
|
|
+
|
|
|
+function showWarning(message) {
|
|
|
+ ElMessage({ offset: 90, type: 'warning', message })
|
|
|
+}
|
|
|
+
|
|
|
+function getLists() {
|
|
|
+ GetAreaList().then(res => {
|
|
|
+ if (!Array.isArray(res.data.data)) {
|
|
|
+ showWarning('空域列表查询失败')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ areaList.value = res.data.data.map(row => ({
|
|
|
+ ...row,
|
|
|
+ check: false,
|
|
|
+ mesh: false
|
|
|
+ }))
|
|
|
+ contentShow.b2r1 = true
|
|
|
+ }).catch(() => {
|
|
|
+ showWarning('空域列表查询失败')
|
|
|
+ })
|
|
|
+ GetPlotList().then(res => {
|
|
|
+ if (!Array.isArray(res.data.data)) {
|
|
|
+ showWarning('起降场列表查询失败')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ plotList.value = res.data.data.map(row => ({
|
|
|
+ ...row,
|
|
|
+ check: false,
|
|
|
+ mesh: false
|
|
|
+ }))
|
|
|
+ }).catch(() => {
|
|
|
+ showWarning('起降场列表查询失败')
|
|
|
+ })
|
|
|
+ GetRouteList().then(res => {
|
|
|
+ if (!Array.isArray(res.data.data)) {
|
|
|
+ showWarning('航线列表查询失败')
|
|
|
+ return
|
|
|
+ }
|
|
|
+ routeList.value = res.data.data.map(row => ({
|
|
|
+ ...row,
|
|
|
+ check: false,
|
|
|
+ mesh: false
|
|
|
+ }))
|
|
|
+ }).catch(() => {
|
|
|
+ showWarning('航线列表查询失败')
|
|
|
+ })
|
|
|
+}
|
|
|
|
|
|
const basicList = ref([
|
|
|
- { label: '白模', icon: 'icon-layer-bm', active: false },
|
|
|
- { label: '精模', icon: 'icon-layer-jm', active: false },
|
|
|
- { label: '道路', icon: 'icon-layer-dl', active: false },
|
|
|
- { label: '河流', icon: 'icon-layer-hl', active: false },
|
|
|
- { label: '人口', icon: 'icon-layer-rk', active: false },
|
|
|
+ { label: '白模', alias: '全市白模', icon: 'icon-layer-bm', active: false },
|
|
|
+ { label: '精模', alias: '五角场精模', icon: 'icon-layer-jm', active: false },
|
|
|
+ { label: '道路', alias: ['快速路', '高速公路', '地面道路'], icon: 'icon-layer-dl', active: false },
|
|
|
+ { label: '河流', alias: '全市河流', icon: 'icon-layer-hl', active: false },
|
|
|
+ { label: '人口', alias: '人口', icon: 'icon-layer-rk', active: false },
|
|
|
])
|
|
|
|
|
|
-const areaList = ref([
|
|
|
- { label: '临时限制区', check: false, mesh: false },
|
|
|
-])
|
|
|
+async function handleBaseClick(layer) {
|
|
|
+ layer.active = !layer.active
|
|
|
+ const aliasArr = Array.isArray(layer.alias) ? layer.alias : [layer.alias]
|
|
|
+ const resources = await getData('resources.json')
|
|
|
+ const targetServices = resources.filter(r => aliasArr.some(i => i === r.title))
|
|
|
+ if (targetServices.length === 0) return
|
|
|
+ targetServices.forEach(service => {
|
|
|
+ if (service.type == "feature") {
|
|
|
+ heatMap({
|
|
|
+ ...service,
|
|
|
+ visible: layer.active,
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ AddSingleLayer({
|
|
|
+ ...service,
|
|
|
+ visible: layer.active,
|
|
|
+ opacity: 1
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+const areaList = ref([])
|
|
|
|
|
|
-async function handleCheckArea(item) {
|
|
|
+function handleCheck(item, type) {
|
|
|
item.check = !item.check
|
|
|
+ const colorMap = {
|
|
|
+ 'area': [0, 255, 0, 0.5],
|
|
|
+ 'plot': [0, 0, 255, 0.5],
|
|
|
+ 'route': [255, 255, 0, 0.5]
|
|
|
+ }
|
|
|
+ const data = [{
|
|
|
+ type: type === 'route' ? item.type : item.geoType,
|
|
|
+ shape: {
|
|
|
+ ...JSON.parse(item.shape),
|
|
|
+ color: colorMap[type]
|
|
|
+ }
|
|
|
+ }]
|
|
|
showShapes({
|
|
|
- id: 'drawOne',
|
|
|
- data: item.check ? await getData('restrictArea.json') : null
|
|
|
+ id: item.id,
|
|
|
+ data: item.check ? data : null
|
|
|
})
|
|
|
}
|
|
|
|
|
|
-const routeList = ref([
|
|
|
- { label: '航线1', check: false, mesh: false },
|
|
|
- { label: '航线2', check: false, mesh: false },
|
|
|
- { label: '航线3', check: false, mesh: false },
|
|
|
- { label: '航线4', check: false, mesh: false },
|
|
|
- { label: '航线5', check: false, mesh: false },
|
|
|
- { label: '航线6', check: false, mesh: false },
|
|
|
- { label: '航线7', check: false, mesh: false },
|
|
|
- { label: '航线8', check: false, mesh: false },
|
|
|
- { label: '航线9', check: false, mesh: false },
|
|
|
- { label: '航线10', check: false, mesh: false },
|
|
|
-])
|
|
|
-
|
|
|
-function handleBaseClick(item) {
|
|
|
- item.active = !item.active
|
|
|
+function handleMesh(item) {
|
|
|
+ item.mesh = !item.mesh
|
|
|
+ InspectCube({
|
|
|
+ id: item.id,
|
|
|
+ show: item.mesh,
|
|
|
+ type: item.geoType || item.type,
|
|
|
+ shape: JSON.parse(item.shape)
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
+const routeList = ref([])
|
|
|
+
|
|
|
+const plotList = ref([])
|
|
|
+
|
|
|
const contentShow = reactive({
|
|
|
b1: true,
|
|
|
b2: true,
|
|
|
- b2r1: true,
|
|
|
- b2r2: true
|
|
|
+ b2r1: false,
|
|
|
+ b2r2: false,
|
|
|
+ b2r3: false,
|
|
|
})
|
|
|
|
|
|
function toggleContentShow(id) {
|
|
|
contentShow[id] = !contentShow[id]
|
|
|
+ const subs = ['b2r1', 'b2r2', 'b2r3']
|
|
|
+ subs.forEach(i => {
|
|
|
+ if (contentShow[id] && subs.includes(id) && id !== i) {
|
|
|
+ contentShow[i] = false
|
|
|
+ }
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
+onBeforeUnmount(() => {
|
|
|
+ [...areaList.value, ...plotList.value, ...routeList.value].forEach(row => {
|
|
|
+ if (row.check) {
|
|
|
+ showShapes({
|
|
|
+ id: row.id,
|
|
|
+ data: null
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (row.mesh) {
|
|
|
+ InspectCube({
|
|
|
+ id: row.id,
|
|
|
+ show: false,
|
|
|
+ type: row.geoType || row.type,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
const vCollapse = {
|
|
|
beforeMount(el, binding) {
|
|
|
el.style.height = '0';
|
|
@@ -237,6 +359,7 @@ const vCollapse = {
|
|
|
cursor: pointer;
|
|
|
background-size: cover !important;
|
|
|
filter: grayscale(1);
|
|
|
+
|
|
|
&.active {
|
|
|
filter: grayscale(0);
|
|
|
}
|