刘妍 2024-08-08 10:18:15 +08:00
commit 1837afbeed
13 changed files with 345 additions and 33 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -119,9 +119,8 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 4 },
componentProps: {
options: [
{ label: '农用地', value: '农用地' },
{ label: '建设用地', value: '建设用地' },
{ label: '推堆土', value: '推堆土' },
{ label: '部级矿产卫片图斑', value: '部级矿产卫片图斑' },
{ label: '省级矿产卫片图斑', value: '省级矿产卫片图斑' },
],
},
},

View File

@ -121,17 +121,20 @@ function handlerLoadPolygon(code="",filter="",type="",level=""){
case "合法":
map_filter = ["all",["==", ["get", "is_illegal"], 0],["==", ["get", "handle_status_id"], 5]];
break;
case "违法":
map_filter = ["any",["==", ["get", "is_illegal"], 1],["!=", ["get", "handle_status_id"], 5]];
break;
case "其他":
map_filter = ["all",["==", ["get", "is_illegal"], 2],["==", ["get", "handle_status_id"], 5]];
break;
case "补办手续":
map_filter = ["all",["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 4]];
map_filter = ["all",["==", ["get", "is_illegal"], 1],["==", ["get", "measure_name"], "1"],["==", ["get", "handle_status_id"], 5]];
break;
case "拆除复耕":
map_filter = ["all",["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 3]];
map_filter = ["all",["==", ["get", "is_illegal"], 1],["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 5]];
break;
case "违法":
map_filter = ["any",
["all",["!=",["get", "is_illegal"], 1],["!=", ["get", "handle_status_id"], 5]],
["all",["==", ["get", "is_illegal"], 1],["!=", ["get", "measure_name"], "0"],["!=", ["get", "measure_name"], "1"],["==", ["get", "handle_status_id"], 5]]
];
break;
default:
map_filter = ["!=", ["get", "gid"], 0];
@ -186,25 +189,24 @@ function handlerLoadPolygon(code="",filter="",type="",level=""){
'layout': {
'line-join': 'round',
'line-cap': 'round',
// 'visibility':polygonVisibility.value,
'visiblity':'none'
'visibility':polygonVisibility.value,
},
'filter':map_filter,
'paint': {
'line-color': [
"case",
["all",["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 4]], //
"#AD04F4",
["all",["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 3]], //
"#F4E004",
["all",["==", ["get", "is_illegal"], 0],["==", ["get", "handle_status_id"], 5]], //
"#0AF703",
["any",["==", ["get", "is_illegal"], 1],["!=", ["get", "handle_status_id"], 5]], //
"#F70303",
["all",["==", ["get", "is_illegal"], 2],["==", ["get", "handle_status_id"], 5]], //
"#0382F7",
["all",["==", ["get", "is_illegal"], 1],["==", ["get", "measure_name"], "1"],["==", ["get", "handle_status_id"], 5]], //
"#AD04F4",
["all",["==", ["get", "is_illegal"], 1],["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 5]], //
"#F4E004",
["any",["all",["!=",["get", "is_illegal"], 1],["!=", ["get", "handle_status_id"], 5]],["all",["==", ["get", "is_illegal"], 1],["!=", ["get", "measure_name"], "0"],["!=", ["get", "measure_name"], "1"],["==", ["get", "handle_status_id"], 5]]], //
"#F70303",
//
"#ffff00",
"#F70303",
],
'line-width': 5
}
@ -228,18 +230,18 @@ function handlerLoadPolygon(code="",filter="",type="",level=""){
'paint': {
'fill-color': [
"case",
["all",["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 4]], //
"#AD04F4",
["all",["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 3]], //
"#F4E004",
["all",["==", ["get", "is_illegal"], 0],["==", ["get", "handle_status_id"], 5]], //
"#0AF703",
["any",["==", ["get", "is_illegal"], 1],["!=", ["get", "handle_status_id"], 5]], //
"#F70303",
["all",["==", ["get", "is_illegal"], 2],["==", ["get", "handle_status_id"], 5]], //
"#0382F7",
["all",["==", ["get", "is_illegal"], 1],["==", ["get", "measure_name"], "1"],["==", ["get", "handle_status_id"], 5]], //
"#AD04F4",
["all",["==", ["get", "is_illegal"], 1],["==", ["get", "measure_name"], "0"],["==", ["get", "handle_status_id"], 5]], //
"#F4E004",
["any",["all",["!=",["get", "is_illegal"], 1],["!=", ["get", "handle_status_id"], 5]],["all",["==", ["get", "is_illegal"], 1],["!=", ["get", "measure_name"], "0"],["!=", ["get", "measure_name"], "1"],["==", ["get", "handle_status_id"], 5]]], //
"#F70303",
//
"#ffff00",
"#F70303",
],
'fill-opacity': 0.5
}

View File

@ -1,18 +1,139 @@
<template>
<div class="main-container">
<!-- layout -->
<div class="main-header">
<div class="title">
<img src="/public/statistical/logo.png" alt="" /> {{ t('sys.subject.header_title') }}
<div class="user-info" style="z-index:9999;">
<span style="color: #325e95">{{ fireUserLoginName }}</span>
&nbsp;
<span style="color: #ddd" @click="logout">退</span>
</div>
</div>
</div>
<div class="main-bottom"></div>
<!-- map -->
<Map></Map>
<!-- layer controller -->
<LayerControl @handlerLayerButtonClick="handlerLayerButtonClick"></LayerControl>
<div class="data-container">
<!-- case list -->
<CaseList></CaseList>
<!-- uav -->
<UAV></UAV>
</div>
</div>
</template>
<script lang="ts" setup>
import Map from './VideoSupervision/map/map.vue'
import { ref } from 'vue';
import LayerControl from "./VideoSupervision/layercontrol/index.vue"
import CaseList from "./VideoSupervision/caselist/index.vue";
import UAV from './VideoSupervision/uav/uav.vue'
import { ref,onMounted,h } from 'vue';
import { useRouter } from 'vue-router';
import { PageEnum } from '@/enums/pageEnum';
const router = useRouter();
import { useI18n } from '@/hooks/web/useI18n';
const { t } = useI18n();
import { useMessage } from '@/hooks/web/useMessage';
import { useMultipleTabStore } from '@/store/modules/multipleTab';
const { createConfirm } = useMessage();
// layer control
function handlerLayerButtonClick(item){
console.log(item);
}
const fireUserLoginName = ref(localStorage.getItem('fireUserLoginName'));
function getFireUserLoginName() {
fireUserLoginName.value = localStorage.getItem('fireUserLoginName')
? localStorage.getItem('fireUserLoginName')
: '';
}
const tabStore = useMultipleTabStore();
function logout() {
createConfirm({
iconType: 'warning',
title: () => h('span', t('sys.navigation.logoutTip')),
content: () => h('span', t('sys.navigation.logoutMessage')),
onOk: async () => {
tabStore.resetState();
await router.replace(PageEnum.SUBJECT_HOME);
},
});
}
onMounted(() => {
// getWeather();
getFireUserLoginName();
});
</script>
<style type="less" scoped>
.main-container {
width: 100vw;
height: 100vh;
position:relative;
top:0px;
left:0px;
z-index:0;
.main-header{
width:100vw;
height:120px;
background:url("/public/videosupervision/main-top.png");
background-size:100% 100%;
position:absolute;
top:0px;
left:0px;
z-index:2;
.title{
width:600px;
height:90px;
margin:0px auto;
font-size:40px;
color:#fff;
font-weight:bold;
.user-info {
width: 120px;
color: #e1e1e1;
position: absolute;
top: 20px;
right: 24px;
font-size: 14px;
z-index:9;
&:hover {
cursor: pointer;
color: #8be5ee;
}
}
}
}
.main-bottom{
height:50px;
width: calc( 100vw - 30px);
position:absolute;
bottom:10px;
left:15px;
z-index:2;
background:url("/public/videosupervision/main-bottom.png");
background-size:100% 100%;
}
.data-container{
width:418px;
position:absolute;
top:50%;
right:24px;
transform:translate(0,-50%);
}
}
</style>

View File

@ -0,0 +1,59 @@
<template>
<div class="case-list-container">
<div class="title">
复飞核实
<div class="switch-button">
<a-switch v-model:checked="checked" />
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
const checked = ref<Boolean>(true);
</script>
<style type="less" scoped>
.case-list-container{
width: 418px;
height: 440px;
background:#041B36;
position: relative;
margin-bottom:20px;
&::before{
content:"";
height:70%;
width:50px;
position:absolute;
bottom:10px;
left:10px;
background:url("/public/videosupervision/main-left.png");
background-size:100% 100%;
}
&::after{
content:"";
height:70%;
width:50px;
position:absolute;
bottom:10px;
right:10px;
background:url("/public/videosupervision/main-right.png");
background-size:100% 100%;
}
.title{
width:100%;
height:40px;
background-image:url("/public/videosupervision/title.png");
background-size:100% 100%;
line-height:40px;
text-indent:18px;
font-size:18px;
font-weight:bold;
color:#fff;
}
.switch-button{
float:right;
margin-right:20px;
}
}
</style>

View File

@ -0,0 +1,73 @@
<template>
<div class="layer-controler-container">
<div class="layer-button-item"
v-for="(item,index) in layerButtons"
:key="index"
@click="handlerLayerButtonClick(item,index)"
:style="{'background-image':item.checked?'url(/public/videosupervision/layer-button-active.png)':'url(/public/videosupervision/layer-button.png)'}"
>
{{ item.lable }}
</div>
</div>
</template>
<script lang="ts" setup>
import { ref,defineEmits } from 'vue';
const layerButtons = ref([
{
lable:"航飞区域",
value:"",
checked:false,
},{
lable:"航飞规划",
value:"",
checked:false,
},{
lable:"视频监控",
value:"",
checked:false,
},{
lable:"影像图",
value:"",
checked:false,
},{
lable:"导航图",
value:"",
checked:false,
},
])
const emits = defineEmits(["handlerLayerButtonClick"])
function handlerLayerButtonClick(item,index){
layerButtons.value[index].checked = !layerButtons.value[index].checked
emits("handlerLayerButtonClick",layerButtons.value[index]);
}
</script>
<style type="less" scoped>
.layer-controler-container {
width: 160px;
position: absolute;
top:50%;
left:50px;
transform: translate(0,-50%);
z-index:2;
.layer-button-item{
width:100%;
height:60px;
margin-bottom:15px;
background:rgba(0,0,0,0.2);
color:#fff;
text-align:center;
line-height:60px;
cursor:pointer;
background-image:url("/public/videosupervision/layer-button.png");
background-size:100% 100%;
font-size:16px;
}
}
</style>

View File

@ -0,0 +1,58 @@
<template>
<div class="uav-container">
<div class="title">
航飞实景
<div class="switch-button">
<a-switch v-model:checked="checked" />
</div>
</div>
</div>
</template>
<script lang="ts" setup>
import {ref} from 'vue';
const checked = ref<Boolean>(true);
</script>
<style type="less" scoped>
.uav-container{
width: 418px;
height: 300px;
background:#041B36;
position: relative;
&::before{
content:"";
height:70%;
width:50px;
position:absolute;
bottom:10px;
left:10px;
background:url("/public/videosupervision/main-left.png");
background-size:100% 100%;
}
&::after{
content:"";
height:70%;
width:50px;
position:absolute;
bottom:10px;
right:10px;
background:url("/public/videosupervision/main-right.png");
background-size:100% 100%;
}
.title{
width:100%;
height:40px;
background-image:url("/public/videosupervision/title.png");
background-size:100% 100%;
line-height:40px;
text-indent:18px;
font-size:18px;
font-weight:bold;
color:#fff;
}
.switch-button{
float:right;
margin-right:20px;
}
}
</style>