徐景良 2024-09-19 17:17:05 +08:00
commit 3d83ec988d
14 changed files with 1585 additions and 1563 deletions

View File

@ -22,41 +22,55 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="图斑编号">{{ case_no }}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{ typename }}</a-descriptions-item>
<a-descriptions-item label="县区">{{ countyname }}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{ streetname }}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{ communityname }}</a-descriptions-item>
<a-descriptions-item label="图斑编号">{{
props.showInfoData.case_no
}}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{
props.showInfoData.typename
}}</a-descriptions-item>
<a-descriptions-item label="县区">{{
props.showInfoData.countyname
}}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{
props.showInfoData.streetname
}}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{
props.showInfoData.communityname
}}</a-descriptions-item>
<a-descriptions-item label="图斑面积(亩)">{{
dataProcessing(area)
dataProcessing(props.showInfoData.area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="农用地面积(亩)">{{
dataProcessing(nongyongdi_area)
}}</a-descriptions-item> -->
<a-descriptions-item label="耕地面积(亩)">{{
dataProcessing(gengdi_area)
dataProcessing(props.showInfoData.gengdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">{{
dataProcessing(yongjiujibennongtian_area)
dataProcessing(props.showInfoData.yongjiujibennongtian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占重点区域面积(亩)">{{ dataProcessing(zhongdianquyu_area) }}</a-descriptions-item> -->
<!-- <a-descriptions-item label="占生态红线面积(亩)">{{
dataProcessing(shengtaibaohuhongxian_area)
}}</a-descriptions-item> -->
<!-- <a-descriptions-item label="占空间规划面积(亩)">{{ dataProcessing(guotukongjianguihua_area) }}</a-descriptions-item> -->
<a-descriptions-item label="图斑描述">{{ case_description }}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{
props.showInfoData.case_description
}}</a-descriptions-item>
<!-- <a-descriptions-item label="图斑地址">{{ address }}</a-descriptions-item> -->
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="备注">{{ props.showInfoData.remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ props.showInfoData.lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ props.showInfoData.lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{
props.showInfoData.synchronoustime
}}</a-descriptions-item>
<a-descriptions-item label="图斑照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -71,13 +85,17 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="接收人">{{ jieshou_people }}</a-descriptions-item>
<a-descriptions-item label="接收时间">{{ jieshou_time?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item label="接收人">{{
props.showInfoData.jieshou_people
}}</a-descriptions-item>
<a-descriptions-item label="接收时间">{{
props.showInfoData.jieshou_time?.split('.')[0]
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="2"
v-if="!['建设用地', '推堆土'].includes(typename)"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="线索填报"
force-render
>
@ -91,28 +109,28 @@
}"
>
<a-descriptions-item label="判定结果">{{
getLabel('is_illegal', is_illegal)
getLabel('is_illegal', props.showInfoData.is_illegal)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目名称">{{
xiangmumc
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
props.showInfoData.xiangmumc
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目主体">{{
xiangmuzhuti
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
props.showInfoData.xiangmuzhuti
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="实际用途">{{
actual_use_to
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
props.showInfoData.actual_use_to
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', weifaleixing)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', props.showInfoData.weifaleixing)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -126,14 +144,14 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in hefafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -147,17 +165,17 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="实际用途">{{
getLabel('qita_use_to', qita_use_to)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="实际用途">{{
getLabel('qita_use_to', props.showInfoData.qita_use_to)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in qitafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -172,39 +190,47 @@
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item label="判定依据说明">{{
pandingyijushuoming
props.showInfoData.pandingyijushuoming
}}</a-descriptions-item>
<a-descriptions-item label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex,imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex, imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="填报人">{{ examiner_name }}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{ examine_time }}</a-descriptions-item>
<a-descriptions-item label="填报人">{{
props.showInfoData.examiner_name
}}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{
props.showInfoData.examine_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="3"
tab="整改情况"
v-if="is_illegal == 1 && weifaleixing == 0 && !['建设用地', '推堆土'].includes(typename)"
v-if="
props.showInfoData.is_illegal == 1 &&
props.showInfoData.weifaleixing == 0 &&
!['建设用地', '推堆土'].includes(props.showInfoData.typename)
"
>
<a-descriptions
:column="2"
@ -216,16 +242,16 @@
}"
>
<a-descriptions-item label="整改措施">{{
getLabel('measure_name', measure_name)
getLabel('measure_name', props.showInfoData.measure_name)
}}</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in yanshoubiaoList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -239,13 +265,13 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 0" label="照片">
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template
v-for="(imageItem, imageIndex) in chaichufugenghoupicList"
:key="imageIndex"
@ -263,14 +289,14 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in zhenggaifujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -284,13 +310,13 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 1" label="照片">
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in bubanzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -305,11 +331,19 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="办理人">{{ transactor_name }}</a-descriptions-item>
<a-descriptions-item label="办理时间">{{ transact_time }}</a-descriptions-item>
<a-descriptions-item label="办理人">{{
props.showInfoData.transactor_name
}}</a-descriptions-item>
<a-descriptions-item label="办理时间">{{
props.showInfoData.transact_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="4" v-if="!['建设用地', '推堆土'].includes(typename)" tab="区县审核">
<a-tab-pane
key="4"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="区县审核"
>
<a-descriptions
:column="2"
bordered
@ -319,11 +353,19 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核人">{{ verifyuser }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ verifytime }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.verifyuser
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.verifytime
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="5" v-if="!['建设用地', '推堆土'].includes(typename)" tab="市局审核">
<a-tab-pane
key="5"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="市局审核"
>
<a-descriptions
:column="2"
bordered
@ -333,15 +375,19 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核人">{{ hexiaoren }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ hexiaotime?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item v-if="weifaleixing == 0" label="无人机复飞照片">
<a-descriptions-item label="审核人">{{
props.showInfoData.hexiaoren
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.hexiaotime?.split('.')[0]
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.weifaleixing == 0" label="无人机复飞照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in wrjffzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -385,167 +431,59 @@
</template>
<script setup lang="ts">
import { defineProps, ref, computed,onBeforeMount } from 'vue';
import { defineProps, ref, computed, onBeforeMount, watch } from 'vue';
import MapboxMap from '@/components/MapboxMaps/MapComponent.vue';
import { getConfig } from '@/api/sys/layerManagement';
import { getGeom } from '@/api/sys/layerManagement';
import {getLoadCaseImgList} from '@/api/tiankongdi'
import { getLoadCaseImgList } from '@/api/tiankongdi';
import { useMessage } from '@/hooks/web/useMessage';
import axios from 'axios';
const { createMessage } = useMessage();
import Icon from '@/components/Icon/Icon.vue';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
import {
mapTypeOptions,
illegalTypeOptions,
measureOptions,
mapStatusOptions,
markTypeOptions,
illegalTypeList,
resultOptions,
qitaUseTOOptions,
} from '@/utils/global';
console.log('');
const { createMessage } = useMessage();
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
const MapboxComponent = ref();
const mapConfig = ref({});
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
watch(
() => props.showInfoData,
() => {
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
changeTask();
},
);
const props = defineProps(['showInfoData']);
const activeKey = ref('1');
const geomsList = ref();
const {
id,
case_no,
case_name,
case_description,
start_time,
end_time,
address,
lng,
lat,
typeid,
typename,
handle_status_id,
handle_status_name,
case_status_i,
case_status_name,
createtime,
createuser,
drone_no,
deal_userid,
deal_username,
createusername,
is_delete,
countyid,
countyname,
streetid,
streetname,
communityid,
communityname,
remark,
is_closed,
area,
is_illegal,
close_user,
close_time,
identification_user,
identification_time,
is_intact,
close_userid,
identification_userid,
verifyuserid,
verifyuser,
verifytime,
is_improve,
improve_reason,
is_dispense,
dispense_userid,
dispense_time,
dispense_username,
verifystatus,
verifystatusname,
is_checked,
deal_time,
is_drawback,
examiner_id,
examiner_name,
examine_time,
measure_name,
casepic,
opinion,
result,
result_name,
opinion_name,
handletime,
handleuser,
handleusername,
is_assist,
measure_name_deal,
qita_use_to,
illegal_contact,
illegal_shenfenzhenghao,
investigation_type,
investigation_result,
registr_number,
is_build_complete,
actual_use_to,
transactor_id,
transactor_name,
transact_time,
geomid,
nongyongdi_area,
gengdi_area,
yongjiujibennongtian_area,
zhongdianquyu_area,
shengtaibaohuhongxian_area,
guotukongjianguihua_area,
fujian,
hefafujian,
qitafujian,
jieshou_people,
jieshou_time,
pandingyijushuoming,
xiangmumc,
xiangmuzhuti,
weifaleixing,
yanshoubiao,
zhenggaifujian,
chaichufugenghoupic,
bubanzhaopian,
is_jieshou,
anjianzhaopian,
hexiaoren,
hexiaotime,
wrjffzhaopian,
xchczhaopian,
synchronoustime,
} = props.showInfoData;
const imageList = ref([])
async function getCaseImgList(){
imageList.value = await getLoadCaseImgList({caseid:id,category:'耕地非粮化'});
const imageList = ref([]);
async function getCaseImgList() {
imageList.value = await getLoadCaseImgList({
caseid: props.showInfoData.id,
category: '耕地非粮化',
});
//
let zhengshiImageList = [];
imageList.value?.forEach((item,index)=>{
let obj = anjianzhaopianList.value?.find((it,idx)=>{
imageList.value?.forEach((item, index) => {
let obj = anjianzhaopianList.value?.find((it, idx) => {
return item.filePath == it;
})
if(obj){
});
if (obj) {
zhengshiImageList.push(imageList.value[index]);
}
})
});
// console.log("imageList",imageList.value);
// console.log("anjianzhaopianList",anjianzhaopianList.value);
@ -554,82 +492,76 @@
MapboxComponent.value.handlerLoadPictureAzimuth(zhengshiImageList);
}
function handlerPreviewImage(index,url){
function handlerPreviewImage(index, url) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const match = url.match(regex);
if (match) {
MapboxComponent.value.handlerCurrentImageChange(match[1]);
}
}
const isInitImageLisener = ref<Boolean>(false);
//
function handlerImageChange(e):void{
if(e && !isInitImageLisener.value){
setTimeout(function(){
function handlerImageChange(e): void {
if (e && !isInitImageLisener.value) {
setTimeout(function () {
const targetNode = document.getElementsByClassName('ant-image-preview-img');
//
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if(targetNode[0].getAttribute(mutation.attributeName).match("http")){
handlerPreviewImage(0,targetNode[0].getAttribute(mutation.attributeName))
}
}
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if (targetNode[0].getAttribute(mutation.attributeName).match('http')) {
handlerPreviewImage(0, targetNode[0].getAttribute(mutation.attributeName));
}
}
}
});
//
const config = { attributes: true };
//
observer.observe(targetNode[0], config);
isInitImageLisener.value = true;
},250)
}, 250);
}
}
onBeforeMount(()=>{
})
onBeforeMount(() => {});
const anjianzhaopianList = computed(() => {
getCaseImgList();
return anjianzhaopian ? anjianzhaopian.split(',') : [];
return props.showInfoData.anjianzhaopian ? props.showInfoData.anjianzhaopian.split(',') : [];
});
const casepicList = computed(() => {
return casepic ? casepic.split(',') : [];
return props.showInfoData.casepic ? props.showInfoData.casepic.split(',') : [];
});
const chaichufugenghoupicList = computed(() => {
return chaichufugenghoupic ? chaichufugenghoupic.split(',') : [];
return props.showInfoData.chaichufugenghoupic
? props.showInfoData.chaichufugenghoupic.split(',')
: [];
});
const bubanzhaopianList = computed(() => {
return bubanzhaopian ? bubanzhaopian.split(',') : [];
return props.showInfoData.bubanzhaopian ? props.showInfoData.bubanzhaopian.split(',') : [];
});
const fujianList = computed(() => {
return fujian ? fujian.split(',') : [];
return props.showInfoData.fujian ? props.showInfoData.fujian.split(',') : [];
});
const hefafujianList = computed(() => {
return hefafujian ? hefafujian.split(',') : [];
return props.showInfoData.hefafujian ? props.showInfoData.hefafujian.split(',') : [];
});
const qitafujianList = computed(() => {
return qitafujian ? qitafujian.split(',') : [];
return props.showInfoData.qitafujian ? props.showInfoData.qitafujian.split(',') : [];
});
const zhenggaifujianList = computed(() => {
return zhenggaifujian ? zhenggaifujian.split(',') : [];
return props.showInfoData.zhenggaifujian ? props.showInfoData.zhenggaifujian.split(',') : [];
});
const yanshoubiaoList = computed(() => {
return yanshoubiao ? yanshoubiao.split(',') : [];
return props.showInfoData.yanshoubiao ? props.showInfoData.yanshoubiao.split(',') : [];
});
const wrjffzhaopianList = computed(() => {
return wrjffzhaopian ? wrjffzhaopian.split(',') : [];
return props.showInfoData.wrjffzhaopian ? props.showInfoData.wrjffzhaopian.split(',') : [];
});
const xchczhaopianList = computed(() => {
return xchczhaopian ? xchczhaopian.split(',') : [];
return props.showInfoData.xchczhaopian ? props.showInfoData.xchczhaopian.split(',') : [];
});
function onMapboxLoad() {
@ -672,8 +604,6 @@
key: null,
};
if (props.showInfoData.geomid) {
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
@ -699,27 +629,26 @@
}
}
const downLoadFile = (url) => {
if(url.indexOf('.pdf') !== -1){
if (url.indexOf('.pdf') !== -1) {
axios({
method: 'get',
url: `${VITE_GLOB_INFO_IMAGE_URL}/${url}`,
responseType: 'blob',
headers: {
'Content-Disposition': 'inline',
}
},
})
.then(response => {
let blob = new Blob([response.data], {type: 'application/pdf'});
let url = window.URL.createObjectURL(blob)
window.open(url);
})
.catch(error => {
console.error(error);
});
}else{
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
.then((response) => {
let blob = new Blob([response.data], { type: 'application/pdf' });
let url = window.URL.createObjectURL(blob);
window.open(url);
})
.catch((error) => {
console.error(error);
});
} else {
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
}
};
const getContainer = () => {
return document.getElementById('info-container');
@ -739,12 +668,12 @@
}
};
const showImage = (url) => {
if(url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1 ){
return true
}else{
return false
if (url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1) {
return true;
} else {
return false;
}
}
};
</script>
<style lang="scss" scoped>
@ -772,14 +701,14 @@
height: calc(100vh - 100px);
margin-right: 20px;
}
:deep(.ant-image){
:deep(.ant-image) {
margin-right: 10px;
margin-bottom: 10px;
}
:deep(.ant-image-preview-switch-left){
:deep(.ant-image-preview-switch-left) {
position: absolute;
}
:deep(.ant-image-preview-switch-right){
:deep(.ant-image-preview-switch-right) {
position: absolute;
}
.info-container {
@ -799,14 +728,14 @@
position: absolute;
top: 0;
width: 100%;
.ant-image-preview-operations-operation{
.ant-image-preview-operations-operation {
// flex:1;
}
}
.ant-image-preview-operations-operation:nth-last-child(1){
.ant-image-preview-operations-operation:nth-last-child(1) {
display: none;
}
.ant-image-preview-operations-operation:nth-last-child(2){
}
.ant-image-preview-operations-operation:nth-last-child(2) {
display: none;
}
}

View File

@ -22,41 +22,55 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="图斑编号">{{ case_no }}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{ typename }}</a-descriptions-item>
<a-descriptions-item label="县区">{{ countyname }}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{ streetname }}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{ communityname }}</a-descriptions-item>
<a-descriptions-item label="图斑编号">{{
props.showInfoData.case_no
}}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{
props.showInfoData.typename
}}</a-descriptions-item>
<a-descriptions-item label="县区">{{
props.showInfoData.countyname
}}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{
props.showInfoData.streetname
}}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{
props.showInfoData.communityname
}}</a-descriptions-item>
<a-descriptions-item label="图斑面积(亩)">{{
dataProcessing(area)
dataProcessing(props.showInfoData.area)
}}</a-descriptions-item>
<a-descriptions-item label="农用地面积(亩)">{{
dataProcessing(nongyongdi_area)
dataProcessing(props.showInfoData.nongyongdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="耕地面积(亩)">{{
dataProcessing(gengdi_area)
dataProcessing(props.showInfoData.gengdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">{{
dataProcessing(yongjiujibennongtian_area)
dataProcessing(props.showInfoData.yongjiujibennongtian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占重点区域面积(亩)">{{ dataProcessing(zhongdianquyu_area) }}</a-descriptions-item> -->
<a-descriptions-item label="占生态红线面积(亩)">{{
dataProcessing(shengtaibaohuhongxian_area)
dataProcessing(props.showInfoData.shengtaibaohuhongxian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占空间规划面积(亩)">{{ dataProcessing(guotukongjianguihua_area) }}</a-descriptions-item> -->
<a-descriptions-item label="图斑描述">{{ case_description }}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{
props.showInfoData.case_description
}}</a-descriptions-item>
<!-- <a-descriptions-item label="图斑地址">{{ address }}</a-descriptions-item> -->
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="备注">{{ props.showInfoData.remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ props.showInfoData.lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ props.showInfoData.lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{
props.showInfoData.synchronoustime
}}</a-descriptions-item>
<a-descriptions-item label="图斑照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -71,13 +85,17 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="接收人">{{ jieshou_people }}</a-descriptions-item>
<a-descriptions-item label="接收时间">{{ jieshou_time?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item label="接收人">{{
props.showInfoData.jieshou_people
}}</a-descriptions-item>
<a-descriptions-item label="接收时间">{{
props.showInfoData.jieshou_time?.split('.')[0]
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="2"
v-if="!['建设用地', '推堆土'].includes(typename)"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="线索填报"
force-render
>
@ -91,28 +109,28 @@
}"
>
<a-descriptions-item label="判定结果">{{
getLabel('is_illegal', is_illegal)
getLabel('is_illegal', props.showInfoData.is_illegal)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目名称">{{
xiangmumc
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
props.showInfoData.xiangmumc
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目主体">{{
xiangmuzhuti
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
props.showInfoData.xiangmuzhuti
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="实际用途">{{
actual_use_to
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
props.showInfoData.actual_use_to
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', weifaleixing)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', props.showInfoData.weifaleixing)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -126,14 +144,14 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in hefafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -147,17 +165,17 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="实际用途">{{
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="实际用途">{{
getLabel('qita_use_to', qita_use_to)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in qitafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -172,39 +190,47 @@
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item label="判定依据说明">{{
pandingyijushuoming
props.showInfoData.pandingyijushuoming
}}</a-descriptions-item>
<a-descriptions-item label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex,imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex, imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="填报人">{{ examiner_name }}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{ examine_time }}</a-descriptions-item>
<a-descriptions-item label="填报人">{{
props.showInfoData.examiner_name
}}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{
props.showInfoData.examine_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="3"
tab="整改情况"
v-if="is_illegal == 1 && weifaleixing == 0 && !['建设用地', '推堆土'].includes(typename)"
v-if="
props.showInfoData.is_illegal == 1 &&
props.showInfoData.weifaleixing == 0 &&
!['建设用地', '推堆土'].includes(props.showInfoData.typename)
"
>
<a-descriptions
:column="2"
@ -216,16 +242,16 @@
}"
>
<a-descriptions-item label="整改措施">{{
getLabel('measure_name', measure_name)
getLabel('measure_name', props.showInfoData.measure_name)
}}</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in yanshoubiaoList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -239,13 +265,13 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 0" label="照片">
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template
v-for="(imageItem, imageIndex) in chaichufugenghoupicList"
:key="imageIndex"
@ -263,14 +289,14 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in zhenggaifujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -284,13 +310,13 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 1" label="照片">
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in bubanzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -305,11 +331,19 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="办理人">{{ transactor_name }}</a-descriptions-item>
<a-descriptions-item label="办理时间">{{ transact_time }}</a-descriptions-item>
<a-descriptions-item label="办理人">{{
props.showInfoData.transactor_name
}}</a-descriptions-item>
<a-descriptions-item label="办理时间">{{
props.showInfoData.transact_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="4" v-if="!['建设用地', '推堆土'].includes(typename)" tab="区县审核">
<a-tab-pane
key="4"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="区县审核"
>
<a-descriptions
:column="2"
bordered
@ -319,11 +353,19 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核人">{{ verifyuser }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ verifytime }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.verifyuser
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.verifytime
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="5" v-if="!['建设用地', '推堆土'].includes(typename)" tab="市局审核">
<a-tab-pane
key="5"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="市局审核"
>
<a-descriptions
:column="2"
bordered
@ -333,15 +375,19 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核人">{{ hexiaoren }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ hexiaotime?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item v-if="weifaleixing == 0" label="无人机复飞照片">
<a-descriptions-item label="审核人">{{
props.showInfoData.hexiaoren
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.hexiaotime?.split('.')[0]
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.weifaleixing == 0" label="无人机复飞照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in wrjffzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -385,167 +431,58 @@
</template>
<script setup lang="ts">
import { defineProps, ref, computed,onBeforeMount } from 'vue';
import { defineProps, ref, computed, onBeforeMount, watch } from 'vue';
import MapboxMap from '@/components/MapboxMaps/MapComponent.vue';
import { getConfig } from '@/api/sys/layerManagement';
import { getGeom } from '@/api/sys/layerManagement';
import {getLoadCaseImgList} from '@/api/tiankongdi'
import { getLoadCaseImgList } from '@/api/tiankongdi';
import { useMessage } from '@/hooks/web/useMessage';
import axios from 'axios';
const { createMessage } = useMessage();
import Icon from '@/components/Icon/Icon.vue';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
import {
mapTypeOptions,
illegalTypeOptions,
measureOptions,
mapStatusOptions,
markTypeOptions,
illegalTypeList,
resultOptions,
qitaUseTOOptions,
} from '@/utils/global';
console.log('');
const { createMessage } = useMessage();
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
const MapboxComponent = ref();
const mapConfig = ref({});
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
watch(
() => props.showInfoData,
() => {
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
changeTask();
},
);
const props = defineProps(['showInfoData']);
const activeKey = ref('1');
const geomsList = ref();
const {
id,
case_no,
case_name,
case_description,
start_time,
end_time,
address,
lng,
lat,
typeid,
typename,
handle_status_id,
handle_status_name,
case_status_i,
case_status_name,
createtime,
createuser,
drone_no,
deal_userid,
deal_username,
createusername,
is_delete,
countyid,
countyname,
streetid,
streetname,
communityid,
communityname,
remark,
is_closed,
area,
is_illegal,
close_user,
close_time,
identification_user,
identification_time,
is_intact,
close_userid,
identification_userid,
verifyuserid,
verifyuser,
verifytime,
is_improve,
improve_reason,
is_dispense,
dispense_userid,
dispense_time,
dispense_username,
verifystatus,
verifystatusname,
is_checked,
deal_time,
is_drawback,
examiner_id,
examiner_name,
examine_time,
measure_name,
casepic,
opinion,
result,
result_name,
opinion_name,
handletime,
handleuser,
handleusername,
is_assist,
measure_name_deal,
qita_use_to,
illegal_contact,
illegal_shenfenzhenghao,
investigation_type,
investigation_result,
registr_number,
is_build_complete,
actual_use_to,
transactor_id,
transactor_name,
transact_time,
geomid,
nongyongdi_area,
gengdi_area,
yongjiujibennongtian_area,
zhongdianquyu_area,
shengtaibaohuhongxian_area,
guotukongjianguihua_area,
fujian,
hefafujian,
qitafujian,
jieshou_people,
jieshou_time,
pandingyijushuoming,
xiangmumc,
xiangmuzhuti,
weifaleixing,
yanshoubiao,
zhenggaifujian,
chaichufugenghoupic,
bubanzhaopian,
is_jieshou,
anjianzhaopian,
hexiaoren,
hexiaotime,
wrjffzhaopian,
xchczhaopian,
synchronoustime,
} = props.showInfoData;
const imageList = ref([])
async function getCaseImgList(){
imageList.value = await getLoadCaseImgList({caseid:id, category:'非法采矿卫片下发'});
const imageList = ref([]);
async function getCaseImgList() {
imageList.value = await getLoadCaseImgList({
caseid: props.showInfoData.id,
category: '非法采矿卫片下发',
});
//
let zhengshiImageList = [];
imageList.value?.forEach((item,index)=>{
let obj = anjianzhaopianList.value?.find((it,idx)=>{
imageList.value?.forEach((item, index) => {
let obj = anjianzhaopianList.value?.find((it, idx) => {
return item.filePath == it;
})
if(obj){
});
if (obj) {
zhengshiImageList.push(imageList.value[index]);
}
})
});
// console.log("imageList",imageList.value);
// console.log("anjianzhaopianList",anjianzhaopianList.value);
@ -554,82 +491,76 @@
MapboxComponent.value.handlerLoadPictureAzimuth(zhengshiImageList);
}
function handlerPreviewImage(index,url){
function handlerPreviewImage(index, url) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const match = url.match(regex);
if (match) {
MapboxComponent.value.handlerCurrentImageChange(match[1]);
}
}
const isInitImageLisener = ref<Boolean>(false);
//
function handlerImageChange(e):void{
if(e && !isInitImageLisener.value){
setTimeout(function(){
function handlerImageChange(e): void {
if (e && !isInitImageLisener.value) {
setTimeout(function () {
const targetNode = document.getElementsByClassName('ant-image-preview-img');
//
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if(targetNode[0].getAttribute(mutation.attributeName).match("http")){
handlerPreviewImage(0,targetNode[0].getAttribute(mutation.attributeName))
}
}
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if (targetNode[0].getAttribute(mutation.attributeName).match('http')) {
handlerPreviewImage(0, targetNode[0].getAttribute(mutation.attributeName));
}
}
}
});
//
const config = { attributes: true };
//
observer.observe(targetNode[0], config);
isInitImageLisener.value = true;
},250)
}, 250);
}
}
onBeforeMount(()=>{
})
onBeforeMount(() => {});
const anjianzhaopianList = computed(() => {
getCaseImgList();
return anjianzhaopian ? anjianzhaopian.split(',') : [];
return props.showInfoData.anjianzhaopian ? props.showInfoData.anjianzhaopian.split(',') : [];
});
const casepicList = computed(() => {
return casepic ? casepic.split(',') : [];
return props.showInfoData.casepic ? props.showInfoData.casepic.split(',') : [];
});
const chaichufugenghoupicList = computed(() => {
return chaichufugenghoupic ? chaichufugenghoupic.split(',') : [];
return props.showInfoData.chaichufugenghoupic
? props.showInfoData.chaichufugenghoupic.split(',')
: [];
});
const bubanzhaopianList = computed(() => {
return bubanzhaopian ? bubanzhaopian.split(',') : [];
return props.showInfoData.bubanzhaopian ? props.showInfoData.bubanzhaopian.split(',') : [];
});
const fujianList = computed(() => {
return fujian ? fujian.split(',') : [];
return props.showInfoData.fujian ? props.showInfoData.fujian.split(',') : [];
});
const hefafujianList = computed(() => {
return hefafujian ? hefafujian.split(',') : [];
return props.showInfoData.hefafujian ? props.showInfoData.hefafujian.split(',') : [];
});
const qitafujianList = computed(() => {
return qitafujian ? qitafujian.split(',') : [];
return props.showInfoData.qitafujian ? props.showInfoData.qitafujian.split(',') : [];
});
const zhenggaifujianList = computed(() => {
return zhenggaifujian ? zhenggaifujian.split(',') : [];
return props.showInfoData.zhenggaifujian ? props.showInfoData.zhenggaifujian.split(',') : [];
});
const yanshoubiaoList = computed(() => {
return yanshoubiao ? yanshoubiao.split(',') : [];
return props.showInfoData.yanshoubiao ? props.showInfoData.yanshoubiao.split(',') : [];
});
const wrjffzhaopianList = computed(() => {
return wrjffzhaopian ? wrjffzhaopian.split(',') : [];
return props.showInfoData.wrjffzhaopian ? props.showInfoData.wrjffzhaopian.split(',') : [];
});
const xchczhaopianList = computed(() => {
return xchczhaopian ? xchczhaopian.split(',') : [];
return props.showInfoData.xchczhaopian ? props.showInfoData.xchczhaopian.split(',') : [];
});
function onMapboxLoad() {
@ -672,8 +603,6 @@
key: null,
};
if (props.showInfoData.geomid) {
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
@ -699,27 +628,26 @@
}
}
const downLoadFile = (url) => {
if(url.indexOf('.pdf') !== -1){
if (url.indexOf('.pdf') !== -1) {
axios({
method: 'get',
url: `${VITE_GLOB_INFO_IMAGE_URL}/${url}`,
responseType: 'blob',
headers: {
'Content-Disposition': 'inline',
}
},
})
.then(response => {
let blob = new Blob([response.data], {type: 'application/pdf'});
let url = window.URL.createObjectURL(blob)
window.open(url);
})
.catch(error => {
console.error(error);
});
}else{
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
.then((response) => {
let blob = new Blob([response.data], { type: 'application/pdf' });
let url = window.URL.createObjectURL(blob);
window.open(url);
})
.catch((error) => {
console.error(error);
});
} else {
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
}
};
const getContainer = () => {
return document.getElementById('info-container');
@ -739,12 +667,12 @@
}
};
const showImage = (url) => {
if(url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1 ){
return true
}else{
return false
if (url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1) {
return true;
} else {
return false;
}
}
};
</script>
<style lang="scss" scoped>
@ -772,14 +700,14 @@
height: calc(100vh - 100px);
margin-right: 20px;
}
:deep(.ant-image){
:deep(.ant-image) {
margin-right: 10px;
margin-bottom: 10px;
}
:deep(.ant-image-preview-switch-left){
:deep(.ant-image-preview-switch-left) {
position: absolute;
}
:deep(.ant-image-preview-switch-right){
:deep(.ant-image-preview-switch-right) {
position: absolute;
}
.info-container {
@ -799,14 +727,14 @@
position: absolute;
top: 0;
width: 100%;
.ant-image-preview-operations-operation{
.ant-image-preview-operations-operation {
// flex:1;
}
}
.ant-image-preview-operations-operation:nth-last-child(1){
.ant-image-preview-operations-operation:nth-last-child(1) {
display: none;
}
.ant-image-preview-operations-operation:nth-last-child(2){
}
.ant-image-preview-operations-operation:nth-last-child(2) {
display: none;
}
}

View File

@ -22,41 +22,55 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="图斑编号">{{ case_no }}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{ typename }}</a-descriptions-item>
<a-descriptions-item label="县区">{{ countyname }}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{ streetname }}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{ communityname }}</a-descriptions-item>
<a-descriptions-item label="图斑编号">{{
props.showInfoData.case_no
}}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{
props.showInfoData.typename
}}</a-descriptions-item>
<a-descriptions-item label="县区">{{
props.showInfoData.countyname
}}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{
props.showInfoData.streetname
}}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{
props.showInfoData.communityname
}}</a-descriptions-item>
<a-descriptions-item label="图斑面积(亩)">{{
dataProcessing(area)
dataProcessing(props.showInfoData.area)
}}</a-descriptions-item>
<a-descriptions-item label="农用地面积(亩)">{{
dataProcessing(nongyongdi_area)
dataProcessing(props.showInfoData.nongyongdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="耕地面积(亩)">{{
dataProcessing(gengdi_area)
dataProcessing(props.showInfoData.gengdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">{{
dataProcessing(yongjiujibennongtian_area)
dataProcessing(props.showInfoData.yongjiujibennongtian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占重点区域面积(亩)">{{ dataProcessing(zhongdianquyu_area) }}</a-descriptions-item> -->
<a-descriptions-item label="占生态红线面积(亩)">{{
dataProcessing(shengtaibaohuhongxian_area)
dataProcessing(props.showInfoData.shengtaibaohuhongxian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占空间规划面积(亩)">{{ dataProcessing(guotukongjianguihua_area) }}</a-descriptions-item> -->
<a-descriptions-item label="图斑描述">{{ case_description }}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{
props.showInfoData.case_description
}}</a-descriptions-item>
<!-- <a-descriptions-item label="图斑地址">{{ address }}</a-descriptions-item> -->
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="备注">{{ props.showInfoData.remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ props.showInfoData.lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ props.showInfoData.lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{
props.showInfoData.synchronoustime
}}</a-descriptions-item>
<a-descriptions-item label="图斑照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -71,13 +85,17 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="接收人">{{ jieshou_people }}</a-descriptions-item>
<a-descriptions-item label="接收时间">{{ jieshou_time?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item label="接收人">{{
props.showInfoData.jieshou_people
}}</a-descriptions-item>
<a-descriptions-item label="接收时间">{{
props.showInfoData.jieshou_time?.split('.')[0]
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="2"
v-if="!['建设用地', '推堆土'].includes(typename)"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="线索填报"
force-render
>
@ -91,28 +109,28 @@
}"
>
<a-descriptions-item label="判定结果">{{
getLabel('is_illegal', is_illegal)
getLabel('is_illegal', props.showInfoData.is_illegal)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目名称">{{
xiangmumc
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
props.showInfoData.xiangmumc
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目主体">{{
xiangmuzhuti
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
props.showInfoData.xiangmuzhuti
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="实际用途">{{
actual_use_to
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
props.showInfoData.actual_use_to
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', weifaleixing)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', props.showInfoData.weifaleixing)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -126,14 +144,14 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in hefafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -147,17 +165,17 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="实际用途">{{
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="实际用途">{{
getLabel('qita_use_to', qita_use_to)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in qitafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -172,39 +190,47 @@
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item label="判定依据说明">{{
pandingyijushuoming
props.showInfoData.pandingyijushuoming
}}</a-descriptions-item>
<a-descriptions-item label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex,imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex, imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="填报人">{{ examiner_name }}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{ examine_time }}</a-descriptions-item>
<a-descriptions-item label="填报人">{{
props.showInfoData.examiner_name
}}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{
props.showInfoData.examine_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="3"
tab="整改情况"
v-if="is_illegal == 1 && weifaleixing == 0 && !['建设用地', '推堆土'].includes(typename)"
v-if="
props.showInfoData.is_illegal == 1 &&
props.showInfoData.weifaleixing == 0 &&
!['建设用地', '推堆土'].includes(props.showInfoData.typename)
"
>
<a-descriptions
:column="2"
@ -216,16 +242,16 @@
}"
>
<a-descriptions-item label="整改措施">{{
getLabel('measure_name', measure_name)
getLabel('measure_name', props.showInfoData.measure_name)
}}</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in yanshoubiaoList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -239,14 +265,14 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 0" label="照片">
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template
v-for="(imageItem, imageIndex) in chaichufugenghoupicList"
:key="imageIndex"
@ -255,7 +281,7 @@
v-if="imageItem"
width="100px"
height="100px"
@click="handlerPreviewImage(imageIndex,imageItem)"
@click="handlerPreviewImage(imageIndex, imageItem)"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
@ -265,14 +291,14 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in zhenggaifujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -286,20 +312,20 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="measure_name == 1" label="照片">
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template v-for="(imageItem, imageIndex) in bubanzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
width="100px"
height="100px"
@click="handlerPreviewImage(imageIndex,imageItem)"
@click="handlerPreviewImage(imageIndex, imageItem)"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
@ -309,11 +335,19 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="办理人">{{ transactor_name }}</a-descriptions-item>
<a-descriptions-item label="办理时间">{{ transact_time }}</a-descriptions-item>
<a-descriptions-item label="办理人">{{
props.showInfoData.transactor_name
}}</a-descriptions-item>
<a-descriptions-item label="办理时间">{{
props.showInfoData.transact_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="4" v-if="!['建设用地', '推堆土'].includes(typename)" tab="审核情况">
<a-tab-pane
key="4"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="审核情况"
>
<a-divider>区县审核</a-divider>
<a-descriptions
:column="2"
@ -324,10 +358,18 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核结果">{{ xjshenhejieguo }}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{ xianjiyijian }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{ verifyuser }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ verifytime }}</a-descriptions-item>
<a-descriptions-item label="审核结果">{{
props.showInfoData.xjshenhejieguo
}}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{
props.showInfoData.xianjiyijian
}}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.verifyuser
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.verifytime
}}</a-descriptions-item>
</a-descriptions>
<a-divider>市局审核</a-divider>
<a-descriptions
@ -339,17 +381,29 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核结果">{{ sjshenhejieguo }}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{ shijiyijian }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{ hexiaoren }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ hexiaotime?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item v-if="weifaleixing == 0" label="无人机复飞照片" :span="2">
<a-descriptions-item label="审核结果">{{
props.showInfoData.sjshenhejieguo
}}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{
props.showInfoData.shijiyijian
}}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.hexiaoren
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.hexiaotime?.split('.')[0]
}}</a-descriptions-item>
<a-descriptions-item
v-if="props.showInfoData.weifaleixing == 0"
label="无人机复飞照片"
:span="2"
>
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in wrjffzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -393,158 +447,48 @@
</template>
<script setup lang="ts">
import { defineProps, ref, computed,onBeforeMount } from 'vue';
import { defineProps, ref, computed, onBeforeMount, watch } from 'vue';
import MapboxMap from '@/components/MapboxMaps/MapComponent.vue';
import { getConfig } from '@/api/sys/layerManagement';
import { getGeom } from '@/api/sys/layerManagement';
import {getLoadCaseImgList} from '@/api/inspectionaudit'
import { getLoadCaseImgList } from '@/api/inspectionaudit';
import { useMessage } from '@/hooks/web/useMessage';
import axios from 'axios';
const { createMessage } = useMessage();
import Icon from '@/components/Icon/Icon.vue';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
import {
mapTypeOptions,
illegalTypeOptions,
measureOptions,
mapStatusOptions,
markTypeOptions,
illegalTypeList,
resultOptions,
qitaUseTOOptions,
} from '@/utils/global';
console.log('');
const { createMessage } = useMessage();
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
const MapboxComponent = ref();
const mapConfig = ref({});
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
watch(
() => props.showInfoData,
() => {
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
changeTask();
},
);
const props = defineProps(['showInfoData']);
const activeKey = ref('1');
const geomsList = ref();
const {
id,
case_no,
case_name,
case_description,
start_time,
end_time,
address,
lng,
lat,
typeid,
typename,
handle_status_id,
handle_status_name,
case_status_i,
case_status_name,
createtime,
createuser,
drone_no,
deal_userid,
deal_username,
createusername,
is_delete,
countyid,
countyname,
streetid,
streetname,
communityid,
communityname,
remark,
is_closed,
area,
is_illegal,
close_user,
close_time,
identification_user,
identification_time,
is_intact,
close_userid,
identification_userid,
verifyuserid,
verifyuser,
verifytime,
is_improve,
improve_reason,
is_dispense,
dispense_userid,
dispense_time,
dispense_username,
verifystatus,
verifystatusname,
is_checked,
deal_time,
is_drawback,
examiner_id,
examiner_name,
examine_time,
measure_name,
casepic,
opinion,
result,
result_name,
opinion_name,
handletime,
handleuser,
handleusername,
is_assist,
measure_name_deal,
qita_use_to,
illegal_contact,
illegal_shenfenzhenghao,
investigation_type,
investigation_result,
registr_number,
is_build_complete,
actual_use_to,
transactor_id,
transactor_name,
transact_time,
geomid,
nongyongdi_area,
gengdi_area,
yongjiujibennongtian_area,
zhongdianquyu_area,
shengtaibaohuhongxian_area,
guotukongjianguihua_area,
fujian,
hefafujian,
qitafujian,
jieshou_people,
jieshou_time,
pandingyijushuoming,
xiangmumc,
xiangmuzhuti,
weifaleixing,
yanshoubiao,
zhenggaifujian,
chaichufugenghoupic,
bubanzhaopian,
is_jieshou,
anjianzhaopian,
hexiaoren,
hexiaotime,
wrjffzhaopian,
xchczhaopian,
synchronoustime,
xjshenhejieguo,
xianjiyijian,
sjshenhejieguo,
shijiyijian,
} = props.showInfoData;
const imageList = ref([]);
async function getCaseImgList(){
imageList.value = await getLoadCaseImgList({caseid:id,category:'巡察审计'});
async function getCaseImgList() {
imageList.value = await getLoadCaseImgList({
caseid: props.showInfoData.id,
category: '巡察审计',
});
MapboxComponent.value.handlerLoadPictureAzimuth(imageList.value);
//
@ -557,19 +501,17 @@
// zhengshiImageList.push(imageList.value[index]);
// }
// })
}
function handlerDealFileName(path){
function handlerDealFileName(path) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const matchStr = path.match(regex);
if(matchStr?.length){
if (matchStr?.length) {
return matchStr[0];
}
}
function handlerPreviewImage(index,url){
function handlerPreviewImage(index, url) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const match = url.match(regex);
if (match) {
@ -579,70 +521,66 @@
const isInitImageLisener = ref<Boolean>(false);
//
function handlerImageChange(e):void{
if(e && !isInitImageLisener.value){
setTimeout(function(){
function handlerImageChange(e): void {
if (e && !isInitImageLisener.value) {
setTimeout(function () {
const targetNode = document.getElementsByClassName('ant-image-preview-img');
//
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if(targetNode[0].getAttribute(mutation.attributeName).match("http")){
handlerPreviewImage(0,targetNode[0].getAttribute(mutation.attributeName))
}
}
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if (targetNode[0].getAttribute(mutation.attributeName).match('http')) {
handlerPreviewImage(0, targetNode[0].getAttribute(mutation.attributeName));
}
}
}
});
//
const config = { attributes: true };
//
observer.observe(targetNode[0], config);
isInitImageLisener.value = true;
},250)
}, 250);
}
}
onBeforeMount(()=>{
})
onBeforeMount(() => {});
const anjianzhaopianList = computed(() => {
getCaseImgList();
return anjianzhaopian ? anjianzhaopian.split(',') : [];
return props.showInfoData.anjianzhaopian ? props.showInfoData.anjianzhaopian.split(',') : [];
});
const casepicList = computed(() => {
return casepic ? casepic.split(',') : [];
return props.showInfoData.casepic ? props.showInfoData.casepic.split(',') : [];
});
const chaichufugenghoupicList = computed(() => {
return chaichufugenghoupic ? chaichufugenghoupic.split(',') : [];
return props.showInfoData.chaichufugenghoupic
? props.showInfoData.chaichufugenghoupic.split(',')
: [];
});
const bubanzhaopianList = computed(() => {
return bubanzhaopian ? bubanzhaopian.split(',') : [];
return props.showInfoData.bubanzhaopian ? props.showInfoData.bubanzhaopian.split(',') : [];
});
const fujianList = computed(() => {
return fujian ? fujian.split(',') : [];
return props.showInfoData.fujian ? props.showInfoData.fujian.split(',') : [];
});
const hefafujianList = computed(() => {
return hefafujian ? hefafujian.split(',') : [];
return props.showInfoData.hefafujian ? props.showInfoData.hefafujian.split(',') : [];
});
const qitafujianList = computed(() => {
return qitafujian ? qitafujian.split(',') : [];
return props.showInfoData.qitafujian ? props.showInfoData.qitafujian.split(',') : [];
});
const zhenggaifujianList = computed(() => {
return zhenggaifujian ? zhenggaifujian.split(',') : [];
return props.showInfoData.zhenggaifujian ? props.showInfoData.zhenggaifujian.split(',') : [];
});
const yanshoubiaoList = computed(() => {
return yanshoubiao ? yanshoubiao.split(',') : [];
return props.showInfoData.yanshoubiao ? props.showInfoData.yanshoubiao.split(',') : [];
});
const wrjffzhaopianList = computed(() => {
return wrjffzhaopian ? wrjffzhaopian.split(',') : [];
return props.showInfoData.wrjffzhaopian ? props.showInfoData.wrjffzhaopian.split(',') : [];
});
const xchczhaopianList = computed(() => {
return xchczhaopian ? xchczhaopian.split(',') : [];
return props.showInfoData.xchczhaopian ? props.showInfoData.xchczhaopian.split(',') : [];
});
function onMapboxLoad() {
changeTask();
@ -684,8 +622,6 @@
key: null,
};
if (props.showInfoData.geomid) {
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
@ -711,27 +647,26 @@
}
}
const downLoadFile = (url) => {
if(url.indexOf('.pdf') !== -1){
if (url.indexOf('.pdf') !== -1) {
axios({
method: 'get',
url: `${VITE_GLOB_INFO_IMAGE_URL}/${url}`,
responseType: 'blob',
headers: {
'Content-Disposition': 'inline',
}
},
})
.then(response => {
let blob = new Blob([response.data], {type: 'application/pdf'});
let url = window.URL.createObjectURL(blob)
window.open(url);
})
.catch(error => {
console.error(error);
});
}else{
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
.then((response) => {
let blob = new Blob([response.data], { type: 'application/pdf' });
let url = window.URL.createObjectURL(blob);
window.open(url);
})
.catch((error) => {
console.error(error);
});
} else {
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
}
};
const getContainer = () => {
return document.getElementById('info-container');
@ -751,12 +686,12 @@
}
};
const showImage = (url) => {
if(url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1 ){
return true
}else{
return false
if (url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1) {
return true;
} else {
return false;
}
}
};
</script>
<style lang="scss" scoped>
@ -784,14 +719,14 @@
height: calc(100vh - 100px);
margin-right: 20px;
}
:deep(.ant-image){
:deep(.ant-image) {
margin-right: 10px;
margin-bottom: 10px;
}
:deep(.ant-image-preview-switch-left){
:deep(.ant-image-preview-switch-left) {
position: absolute;
}
:deep(.ant-image-preview-switch-right){
:deep(.ant-image-preview-switch-right) {
position: absolute;
}
.info-container {
@ -811,14 +746,14 @@
position: absolute;
top: 0;
width: 100%;
.ant-image-preview-operations-operation{
.ant-image-preview-operations-operation {
// flex:1;
}
}
.ant-image-preview-operations-operation:nth-last-child(1){
.ant-image-preview-operations-operation:nth-last-child(1) {
display: none;
}
.ant-image-preview-operations-operation:nth-last-child(2){
}
.ant-image-preview-operations-operation:nth-last-child(2) {
display: none;
}
}

View File

@ -22,38 +22,52 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="图斑编号">{{ case_no }}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{ typename }}</a-descriptions-item>
<a-descriptions-item label="县区">{{ countyname }}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{ streetname }}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{ communityname }}</a-descriptions-item>
<a-descriptions-item label="图斑编号">{{
props.showInfoData.case_no
}}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{
props.showInfoData.typename
}}</a-descriptions-item>
<a-descriptions-item label="县区">{{
props.showInfoData.countyname
}}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{
props.showInfoData.streetname
}}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{
props.showInfoData.communityname
}}</a-descriptions-item>
<a-descriptions-item label="图斑面积(亩)">{{
dataProcessing(area)
dataProcessing(props.showInfoData.area)
}}</a-descriptions-item>
<a-descriptions-item label="农用地面积(亩)">{{
dataProcessing(nongyongdi_area)
dataProcessing(props.showInfoData.nongyongdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="耕地面积(亩)">{{
dataProcessing(gengdi_area)
dataProcessing(props.showInfoData.gengdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">{{
dataProcessing(yongjiujibennongtian_area)
dataProcessing(props.showInfoData.yongjiujibennongtian_area)
}}</a-descriptions-item>
<a-descriptions-item label="占生态红线面积(亩)">{{
dataProcessing(shengtaibaohuhongxian_area)
dataProcessing(props.showInfoData.shengtaibaohuhongxian_area)
}}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{
props.showInfoData.case_description
}}</a-descriptions-item>
<a-descriptions-item label="备注">{{ props.showInfoData.remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ props.showInfoData.lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ props.showInfoData.lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{
props.showInfoData.synchronoustime
}}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{ case_description }}</a-descriptions-item>
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="图斑照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -72,7 +86,7 @@
</a-tab-pane>
<a-tab-pane
key="2"
v-if="!['建设用地', '推堆土'].includes(typename)"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="线索填报"
force-render
>
@ -86,34 +100,34 @@
}"
>
<a-descriptions-item label="判定结果">{{
getLabel('is_illegal', is_illegal)
getLabel('is_illegal', props.showInfoData.is_illegal)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目名称">{{
xiangmumc
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
props.showInfoData.xiangmumc
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目主体">{{
xiangmuzhuti
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
props.showInfoData.xiangmuzhuti
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="实际用途">{{
actual_use_to
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
props.showInfoData.actual_use_to
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="整改措施">{{
getLabel('measure_name', measure_name)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="整改措施">{{
getLabel('measure_name', props.showInfoData.measure_name)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="是否对人处理">{{
getLabel('is_chuli', is_chuli)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="是否对人处理">{{
getLabel('is_chuli', props.showInfoData.is_chuli)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="处理情况说明">{{
chuliqingkuangsm
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="处理情况说明">{{
props.showInfoData.chuliqingkuangsm
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -127,14 +141,14 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in hefafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -148,20 +162,22 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="实际用途">{{
getLabel('qita_use_to', qita_use_to)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="实际用途">{{
getLabel('qita_use_to', props.showInfoData.qita_use_to)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="实际用途其他说明">{{
qita_shuoming
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item
v-if="props.showInfoData.is_illegal == 2"
label="实际用途其他说明"
>{{ props.showInfoData.qita_shuoming }}</a-descriptions-item
>
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in qitafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -176,36 +192,44 @@
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item label="判定依据说明">{{
pandingyijushuoming
props.showInfoData.pandingyijushuoming
}}</a-descriptions-item>
<a-descriptions-item label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex,imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex, imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="填报人">{{ examiner_name }}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{ examine_time }}</a-descriptions-item>
<a-descriptions-item label="填报人">{{
props.showInfoData.examiner_name
}}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{
props.showInfoData.examine_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="4" v-if="!['建设用地', '推堆土'].includes(typename)" tab="审核情况">
<a-tab-pane
key="4"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="审核情况"
>
<a-divider>区县审核</a-divider>
<a-descriptions
:column="2"
@ -216,10 +240,18 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核结果">{{ xjshenhejieguo }}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{ xianjiyijian }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{ verifyuser }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ verifytime }}</a-descriptions-item>
<a-descriptions-item label="审核结果">{{
props.showInfoData.xjshenhejieguo
}}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{
props.showInfoData.xianjiyijian
}}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.verifyuser
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.verifytime
}}</a-descriptions-item>
</a-descriptions>
<a-divider>市局审核</a-divider>
<a-descriptions
@ -231,10 +263,18 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核结果">{{ sjshenhejieguo }}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{ shijiyijian }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{ hexiaoren }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ hexiaotime?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item label="审核结果">{{
props.showInfoData.sjshenhejieguo
}}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{
props.showInfoData.shijiyijian
}}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.hexiaoren
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.hexiaotime?.split('.')[0]
}}</a-descriptions-item>
<!-- <a-descriptions-item v-if="weifaleixing == 0" label="无人机复飞照片" :span="2">
<div class="image-div">
<a-image-preview-group
@ -285,162 +325,48 @@
</template>
<script setup lang="ts">
import { defineProps, ref, computed,onBeforeMount } from 'vue';
import { defineProps, ref, computed, onBeforeMount, watch } from 'vue';
import MapboxMap from '@/components/MapboxMaps/MapComponent.vue';
import { getConfig } from '@/api/sys/layerManagement';
import { getGeom } from '@/api/sys/layerManagement';
import {getLoadCaseImgList} from '@/api/keyproblem/keyissuesII'
import { getLoadCaseImgList } from '@/api/keyproblem/keyissuesII';
import { useMessage } from '@/hooks/web/useMessage';
import axios from 'axios';
const { createMessage } = useMessage();
import Icon from '@/components/Icon/Icon.vue';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
import {
mapTypeOptions,
illegalTypeOptions,
keyIssuesIMeasureOptions,
mapStatusOptions,
markTypeOptions,
illegalTypeList,
resultOptions,
qitaUseTOOptions,
isChuliOptions,
} from '@/utils/global';
console.log('');
const { createMessage } = useMessage();
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
const MapboxComponent = ref();
const mapConfig = ref({});
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
watch(
() => props.showInfoData,
() => {
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
changeTask();
},
);
const props = defineProps(['showInfoData']);
const activeKey = ref('1');
const geomsList = ref();
const {
id,
case_no,
case_name,
case_description,
start_time,
end_time,
address,
lng,
lat,
typeid,
typename,
handle_status_id,
handle_status_name,
case_status_i,
case_status_name,
createtime,
createuser,
drone_no,
deal_userid,
deal_username,
createusername,
is_delete,
countyid,
countyname,
streetid,
streetname,
communityid,
communityname,
remark,
is_closed,
area,
is_illegal,
close_user,
close_time,
identification_user,
identification_time,
is_intact,
close_userid,
identification_userid,
verifyuserid,
verifyuser,
verifytime,
is_improve,
improve_reason,
is_dispense,
dispense_userid,
dispense_time,
dispense_username,
verifystatus,
verifystatusname,
is_checked,
deal_time,
is_drawback,
examiner_id,
examiner_name,
examine_time,
measure_name,
casepic,
opinion,
result,
result_name,
opinion_name,
handletime,
handleuser,
handleusername,
is_assist,
measure_name_deal,
qita_use_to,
illegal_contact,
illegal_shenfenzhenghao,
investigation_type,
investigation_result,
registr_number,
is_build_complete,
actual_use_to,
transactor_id,
transactor_name,
transact_time,
geomid,
nongyongdi_area,
gengdi_area,
yongjiujibennongtian_area,
zhongdianquyu_area,
shengtaibaohuhongxian_area,
guotukongjianguihua_area,
fujian,
hefafujian,
qitafujian,
jieshou_people,
jieshou_time,
pandingyijushuoming,
xiangmumc,
xiangmuzhuti,
weifaleixing,
yanshoubiao,
zhenggaifujian,
chaichufugenghoupic,
bubanzhaopian,
is_jieshou,
anjianzhaopian,
hexiaoren,
hexiaotime,
wrjffzhaopian,
xchczhaopian,
synchronoustime,
xjshenhejieguo,
xianjiyijian,
sjshenhejieguo,
shijiyijian,
is_chuli,
chuliqingkuangsm,
qita_shuoming,
} = props.showInfoData;
const imageList = ref([]);
async function getCaseImgList(){
imageList.value = await getLoadCaseImgList({caseid:id,category:'重点问题I类'});
async function getCaseImgList() {
imageList.value = await getLoadCaseImgList({
caseid: props.showInfoData.id,
category: '重点问题I类',
});
MapboxComponent.value.handlerLoadPictureAzimuth(imageList.value);
//
@ -453,19 +379,17 @@
// zhengshiImageList.push(imageList.value[index]);
// }
// })
}
function handlerDealFileName(path){
function handlerDealFileName(path) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const matchStr = path.match(regex);
if(matchStr?.length){
if (matchStr?.length) {
return matchStr[0];
}
}
function handlerPreviewImage(index,url){
function handlerPreviewImage(index, url) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const match = url.match(regex);
if (match) {
@ -475,70 +399,66 @@
const isInitImageLisener = ref<Boolean>(false);
//
function handlerImageChange(e):void{
if(e && !isInitImageLisener.value){
setTimeout(function(){
function handlerImageChange(e): void {
if (e && !isInitImageLisener.value) {
setTimeout(function () {
const targetNode = document.getElementsByClassName('ant-image-preview-img');
//
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if(targetNode[0].getAttribute(mutation.attributeName).match("http")){
handlerPreviewImage(0,targetNode[0].getAttribute(mutation.attributeName))
}
}
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if (targetNode[0].getAttribute(mutation.attributeName).match('http')) {
handlerPreviewImage(0, targetNode[0].getAttribute(mutation.attributeName));
}
}
}
});
//
const config = { attributes: true };
//
observer.observe(targetNode[0], config);
isInitImageLisener.value = true;
},250)
}, 250);
}
}
onBeforeMount(()=>{
})
onBeforeMount(() => {});
const anjianzhaopianList = computed(() => {
getCaseImgList();
return anjianzhaopian ? anjianzhaopian.split(',') : [];
return props.showInfoData.anjianzhaopian ? props.showInfoData.anjianzhaopian.split(',') : [];
});
const casepicList = computed(() => {
return casepic ? casepic.split(',') : [];
return props.showInfoData.casepic ? props.showInfoData.casepic.split(',') : [];
});
const chaichufugenghoupicList = computed(() => {
return chaichufugenghoupic ? chaichufugenghoupic.split(',') : [];
return props.showInfoData.chaichufugenghoupic
? props.showInfoData.chaichufugenghoupic.split(',')
: [];
});
const bubanzhaopianList = computed(() => {
return bubanzhaopian ? bubanzhaopian.split(',') : [];
return props.showInfoData.bubanzhaopian ? props.showInfoData.bubanzhaopian.split(',') : [];
});
const fujianList = computed(() => {
return fujian ? fujian.split(',') : [];
return props.showInfoData.fujian ? props.showInfoData.fujian.split(',') : [];
});
const hefafujianList = computed(() => {
return hefafujian ? hefafujian.split(',') : [];
return props.showInfoData.hefafujian ? props.showInfoData.hefafujian.split(',') : [];
});
const qitafujianList = computed(() => {
return qitafujian ? qitafujian.split(',') : [];
return props.showInfoData.qitafujian ? props.showInfoData.qitafujian.split(',') : [];
});
const zhenggaifujianList = computed(() => {
return zhenggaifujian ? zhenggaifujian.split(',') : [];
return props.showInfoData.zhenggaifujian ? props.showInfoData.zhenggaifujian.split(',') : [];
});
const yanshoubiaoList = computed(() => {
return yanshoubiao ? yanshoubiao.split(',') : [];
return props.showInfoData.yanshoubiao ? props.showInfoData.yanshoubiao.split(',') : [];
});
const wrjffzhaopianList = computed(() => {
return wrjffzhaopian ? wrjffzhaopian.split(',') : [];
return props.showInfoData.wrjffzhaopian ? props.showInfoData.wrjffzhaopian.split(',') : [];
});
const xchczhaopianList = computed(() => {
return xchczhaopian ? xchczhaopian.split(',') : [];
return props.showInfoData.xchczhaopian ? props.showInfoData.xchczhaopian.split(',') : [];
});
function onMapboxLoad() {
changeTask();
@ -582,8 +502,6 @@
key: null,
};
if (props.showInfoData.geomid) {
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
@ -609,27 +527,26 @@
}
}
const downLoadFile = (url) => {
if(url.indexOf('.pdf') !== -1){
if (url.indexOf('.pdf') !== -1) {
axios({
method: 'get',
url: `${VITE_GLOB_INFO_IMAGE_URL}/${url}`,
responseType: 'blob',
headers: {
'Content-Disposition': 'inline',
}
},
})
.then(response => {
let blob = new Blob([response.data], {type: 'application/pdf'});
let url = window.URL.createObjectURL(blob)
window.open(url);
})
.catch(error => {
console.error(error);
});
}else{
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
.then((response) => {
let blob = new Blob([response.data], { type: 'application/pdf' });
let url = window.URL.createObjectURL(blob);
window.open(url);
})
.catch((error) => {
console.error(error);
});
} else {
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
}
};
const getContainer = () => {
return document.getElementById('info-container');
@ -649,12 +566,12 @@
}
};
const showImage = (url) => {
if(url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1 ){
return true
}else{
return false
if (url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1) {
return true;
} else {
return false;
}
}
};
</script>
<style lang="scss" scoped>
@ -682,14 +599,14 @@
height: calc(100vh - 100px);
margin-right: 20px;
}
:deep(.ant-image){
:deep(.ant-image) {
margin-right: 10px;
margin-bottom: 10px;
}
:deep(.ant-image-preview-switch-left){
:deep(.ant-image-preview-switch-left) {
position: absolute;
}
:deep(.ant-image-preview-switch-right){
:deep(.ant-image-preview-switch-right) {
position: absolute;
}
.info-container {
@ -709,14 +626,14 @@
position: absolute;
top: 0;
width: 100%;
.ant-image-preview-operations-operation{
.ant-image-preview-operations-operation {
// flex:1;
}
}
.ant-image-preview-operations-operation:nth-last-child(1){
.ant-image-preview-operations-operation:nth-last-child(1) {
display: none;
}
.ant-image-preview-operations-operation:nth-last-child(2){
}
.ant-image-preview-operations-operation:nth-last-child(2) {
display: none;
}
}

View File

@ -22,38 +22,52 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="图斑编号">{{ case_no }}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{ typename }}</a-descriptions-item>
<a-descriptions-item label="县区">{{ countyname }}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{ streetname }}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{ communityname }}</a-descriptions-item>
<a-descriptions-item label="图斑编号">{{
props.showInfoData.case_no
}}</a-descriptions-item>
<a-descriptions-item label="图斑类型">{{
props.showInfoData.typename
}}</a-descriptions-item>
<a-descriptions-item label="县区">{{
props.showInfoData.countyname
}}</a-descriptions-item>
<a-descriptions-item label="乡镇">{{
props.showInfoData.streetname
}}</a-descriptions-item>
<a-descriptions-item label="社区/村">{{
props.showInfoData.communityname
}}</a-descriptions-item>
<a-descriptions-item label="图斑面积(亩)">{{
dataProcessing(area)
dataProcessing(props.showInfoData.area)
}}</a-descriptions-item>
<a-descriptions-item label="农用地面积(亩)">{{
dataProcessing(nongyongdi_area)
dataProcessing(props.showInfoData.nongyongdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="耕地面积(亩)">{{
dataProcessing(gengdi_area)
dataProcessing(props.showInfoData.gengdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">{{
dataProcessing(yongjiujibennongtian_area)
dataProcessing(props.showInfoData.yongjiujibennongtian_area)
}}</a-descriptions-item>
<a-descriptions-item label="占生态红线面积(亩)">{{
dataProcessing(shengtaibaohuhongxian_area)
dataProcessing(props.showInfoData.shengtaibaohuhongxian_area)
}}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{
props.showInfoData.case_description
}}</a-descriptions-item>
<a-descriptions-item label="备注">{{ props.showInfoData.remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ props.showInfoData.lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ props.showInfoData.lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{
props.showInfoData.synchronoustime
}}</a-descriptions-item>
<a-descriptions-item label="图斑描述">{{ case_description }}</a-descriptions-item>
<a-descriptions-item label="备注">{{ remark }}</a-descriptions-item>
<a-descriptions-item label="经度">{{ lng }}</a-descriptions-item>
<a-descriptions-item label="纬度">{{ lat }}</a-descriptions-item>
<a-descriptions-item label="下发时间">{{ synchronoustime }}</a-descriptions-item>
<a-descriptions-item label="图斑照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
getContainer: getContainer,
}"
>
>
<template v-for="(imageItem, imageIndex) in casepicList" :key="imageIndex">
<a-image
v-if="imageItem"
@ -72,7 +86,7 @@
</a-tab-pane>
<a-tab-pane
key="2"
v-if="!['建设用地', '推堆土'].includes(typename)"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="线索填报"
force-render
>
@ -86,34 +100,34 @@
}"
>
<a-descriptions-item label="判定结果">{{
getLabel('is_illegal', is_illegal)
getLabel('is_illegal', props.showInfoData.is_illegal)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目名称">{{
xiangmumc
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
props.showInfoData.xiangmumc
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="项目主体">{{
xiangmuzhuti
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
props.showInfoData.xiangmuzhuti
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="实际用途">{{
actual_use_to
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
props.showInfoData.actual_use_to
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="整改措施">{{
getLabel('measure_name', measure_name)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="整改措施">{{
getLabel('measure_name', props.showInfoData.measure_name)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="是否对人处理">{{
getLabel('is_chuli', is_chuli)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="是否对人处理">{{
getLabel('is_chuli', props.showInfoData.is_chuli)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="处理情况说明">{{
chuliqingkuangsm
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="处理情况说明">{{
props.showInfoData.chuliqingkuangsm
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 1" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -127,14 +141,14 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 0" label="附件">
<a-image-preview-group :preview="{getContainer,}">
<a-descriptions-item v-if="props.showInfoData.is_illegal == 0" label="附件">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in hefafujianList" :key="itemIndex">
<a-image
v-if="showImage(item)"
style="width:100px;height:100px;"
style="width: 100px; height: 100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{getContainer,}"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
@ -148,49 +162,57 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 2" label="其他情形">{{
getLabel('qita_qksm', qita_qksm)
<a-descriptions-item v-if="props.showInfoData.is_illegal == 2" label="其他情形">{{
getLabel('qita_qksm', props.showInfoData.qita_qksm)
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 3" label="项目名称">{{
zj_xmmc
<a-descriptions-item v-if="props.showInfoData.is_illegal == 3" label="项目名称">{{
props.showInfoData.zj_xmmc
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 3" label="项目主体">{{
zj_xmzt
<a-descriptions-item v-if="props.showInfoData.is_illegal == 3" label="项目主体">{{
props.showInfoData.zj_xmzt
}}</a-descriptions-item>
<a-descriptions-item v-if="is_illegal == 3" label="实际用途">{{
zj_sjyt
<a-descriptions-item v-if="props.showInfoData.is_illegal == 3" label="实际用途">{{
props.showInfoData.zj_sjyt
}}</a-descriptions-item>
<a-descriptions-item label="判定依据说明">{{
pandingyijushuoming
props.showInfoData.pandingyijushuoming
}}</a-descriptions-item>
<a-descriptions-item label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
onVisibleChange:handlerImageChange
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
>
<template v-for="(imageItem, imageIndex) in anjianzhaopianList" :key="imageIndex">
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex,imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
<a-image
v-if="imageItem"
@click="handlerPreviewImage(imageIndex, imageItem)"
width="100px"
height="100px"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="填报人">{{ examiner_name }}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{ examine_time }}</a-descriptions-item>
<a-descriptions-item label="填报人">{{
props.showInfoData.examiner_name
}}</a-descriptions-item>
<a-descriptions-item label="填报时间">{{
props.showInfoData.examine_time
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane key="4" v-if="!['建设用地', '推堆土'].includes(typename)" tab="审核情况">
<a-tab-pane
key="4"
v-if="!['建设用地', '推堆土'].includes(props.showInfoData.typename)"
tab="审核情况"
>
<a-divider>区县审核</a-divider>
<a-descriptions
:column="2"
@ -201,10 +223,18 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核结果">{{ xjshenhejieguo }}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{ xianjiyijian }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{ verifyuser }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ verifytime }}</a-descriptions-item>
<a-descriptions-item label="审核结果">{{
props.showInfoData.xjshenhejieguo
}}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{
props.showInfoData.xianjiyijian
}}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.verifyuser
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.verifytime
}}</a-descriptions-item>
</a-descriptions>
<a-divider>市局审核</a-divider>
<a-descriptions
@ -216,10 +246,18 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="审核结果">{{ sjshenhejieguo }}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{ shijiyijian }}</a-descriptions-item>
<a-descriptions-item label="审核人">{{ hexiaoren }}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{ hexiaotime?.split('.')[0] }}</a-descriptions-item>
<a-descriptions-item label="审核结果">{{
props.showInfoData.sjshenhejieguo
}}</a-descriptions-item>
<a-descriptions-item label="审核意见">{{
props.showInfoData.shijiyijian
}}</a-descriptions-item>
<a-descriptions-item label="审核人">{{
props.showInfoData.hexiaoren
}}</a-descriptions-item>
<a-descriptions-item label="审核时间">{{
props.showInfoData.hexiaotime?.split('.')[0]
}}</a-descriptions-item>
<!-- <a-descriptions-item v-if="weifaleixing == 0" label="无人机复飞照片" :span="2">
<div class="image-div">
<a-image-preview-group
@ -270,166 +308,51 @@
</template>
<script setup lang="ts">
import { defineProps, ref, computed,onBeforeMount } from 'vue';
import { defineProps, ref, computed, onBeforeMount, watch } from 'vue';
import MapboxMap from '@/components/MapboxMaps/MapComponent.vue';
import { getConfig } from '@/api/sys/layerManagement';
import { getGeom } from '@/api/sys/layerManagement';
import {getLoadCaseImgList} from '@/api/keyproblem/keyissuesII'
import { getLoadCaseImgList } from '@/api/keyproblem/keyissuesII';
import { useMessage } from '@/hooks/web/useMessage';
import axios from 'axios';
const { createMessage } = useMessage();
import Icon from '@/components/Icon/Icon.vue';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
import {
keyIssuesIIMapTypeOptions,
illegalTypeOptions,
keyIssuesIIMeasureOptions,
mapStatusOptions,
markTypeOptions,
illegalTypeList,
resultOptions,
qitaUseTOOptions,
isChuliOptions,
} from '@/utils/global';
console.log('');
const { createMessage } = useMessage();
const { VITE_GLOB_INFO_IMAGE_URL } = getAppEnvConfig();
const MapboxComponent = ref();
const mapConfig = ref({});
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
watch(
() => props.showInfoData,
() => {
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
changeTask();
},
);
const props = defineProps(['showInfoData']);
const activeKey = ref('1');
const geomsList = ref();
const {
id,
case_no,
case_name,
case_description,
start_time,
end_time,
address,
lng,
lat,
typeid,
typename,
handle_status_id,
handle_status_name,
case_status_i,
case_status_name,
createtime,
createuser,
drone_no,
deal_userid,
deal_username,
createusername,
is_delete,
countyid,
countyname,
streetid,
streetname,
communityid,
communityname,
remark,
is_closed,
area,
is_illegal,
close_user,
close_time,
identification_user,
identification_time,
is_intact,
close_userid,
identification_userid,
verifyuserid,
verifyuser,
verifytime,
is_improve,
improve_reason,
is_dispense,
dispense_userid,
dispense_time,
dispense_username,
verifystatus,
verifystatusname,
is_checked,
deal_time,
is_drawback,
examiner_id,
examiner_name,
examine_time,
measure_name,
casepic,
opinion,
result,
result_name,
opinion_name,
handletime,
handleuser,
handleusername,
is_assist,
measure_name_deal,
qita_use_to,
illegal_contact,
illegal_shenfenzhenghao,
investigation_type,
investigation_result,
registr_number,
is_build_complete,
actual_use_to,
transactor_id,
transactor_name,
transact_time,
geomid,
nongyongdi_area,
gengdi_area,
yongjiujibennongtian_area,
zhongdianquyu_area,
shengtaibaohuhongxian_area,
guotukongjianguihua_area,
fujian,
hefafujian,
qitafujian,
jieshou_people,
jieshou_time,
pandingyijushuoming,
xiangmumc,
xiangmuzhuti,
weifaleixing,
yanshoubiao,
zhenggaifujian,
chaichufugenghoupic,
bubanzhaopian,
is_jieshou,
anjianzhaopian,
hexiaoren,
hexiaotime,
wrjffzhaopian,
xchczhaopian,
synchronoustime,
xjshenhejieguo,
xianjiyijian,
sjshenhejieguo,
shijiyijian,
is_chuli,
chuliqingkuangsm,
qita_shuoming,
qita_qksm,
zj_xmmc,
zj_xmzt,
zj_sjyt,
} = props.showInfoData;
const imageList = ref([]);
async function getCaseImgList(){
imageList.value = await getLoadCaseImgList({caseid:id,category:'重点问题II类'});
async function getCaseImgList() {
imageList.value = await getLoadCaseImgList({
caseid: props.showInfoData.id,
category: '重点问题II类',
});
MapboxComponent.value.handlerLoadPictureAzimuth(imageList.value);
//
@ -442,19 +365,17 @@
// zhengshiImageList.push(imageList.value[index]);
// }
// })
}
function handlerDealFileName(path){
function handlerDealFileName(path) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const matchStr = path.match(regex);
if(matchStr?.length){
if (matchStr?.length) {
return matchStr[0];
}
}
function handlerPreviewImage(index,url){
function handlerPreviewImage(index, url) {
const regex = /([^/\\]+)(?=\.[^/\\]*$|$)/;
const match = url.match(regex);
if (match) {
@ -464,70 +385,66 @@
const isInitImageLisener = ref<Boolean>(false);
//
function handlerImageChange(e):void{
if(e && !isInitImageLisener.value){
setTimeout(function(){
function handlerImageChange(e): void {
if (e && !isInitImageLisener.value) {
setTimeout(function () {
const targetNode = document.getElementsByClassName('ant-image-preview-img');
//
const observer = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if(targetNode[0].getAttribute(mutation.attributeName).match("http")){
handlerPreviewImage(0,targetNode[0].getAttribute(mutation.attributeName))
}
}
for (const mutation of mutationsList) {
if (mutation.type === 'attributes') {
if (targetNode[0].getAttribute(mutation.attributeName).match('http')) {
handlerPreviewImage(0, targetNode[0].getAttribute(mutation.attributeName));
}
}
}
});
//
const config = { attributes: true };
//
observer.observe(targetNode[0], config);
isInitImageLisener.value = true;
},250)
}, 250);
}
}
onBeforeMount(()=>{
})
onBeforeMount(() => {});
const anjianzhaopianList = computed(() => {
getCaseImgList();
return anjianzhaopian ? anjianzhaopian.split(',') : [];
return props.showInfoData.anjianzhaopian ? props.showInfoData.anjianzhaopian.split(',') : [];
});
const casepicList = computed(() => {
return casepic ? casepic.split(',') : [];
return props.showInfoData.casepic ? props.showInfoData.casepic.split(',') : [];
});
const chaichufugenghoupicList = computed(() => {
return chaichufugenghoupic ? chaichufugenghoupic.split(',') : [];
return props.showInfoData.chaichufugenghoupic
? props.showInfoData.chaichufugenghoupic.split(',')
: [];
});
const bubanzhaopianList = computed(() => {
return bubanzhaopian ? bubanzhaopian.split(',') : [];
return props.showInfoData.bubanzhaopian ? props.showInfoData.bubanzhaopian.split(',') : [];
});
const fujianList = computed(() => {
return fujian ? fujian.split(',') : [];
return props.showInfoData.fujian ? props.showInfoData.fujian.split(',') : [];
});
const hefafujianList = computed(() => {
return hefafujian ? hefafujian.split(',') : [];
return props.showInfoData.hefafujian ? props.showInfoData.hefafujian.split(',') : [];
});
const qitafujianList = computed(() => {
return qitafujian ? qitafujian.split(',') : [];
return props.showInfoData.qitafujian ? props.showInfoData.qitafujian.split(',') : [];
});
const zhenggaifujianList = computed(() => {
return zhenggaifujian ? zhenggaifujian.split(',') : [];
return props.showInfoData.zhenggaifujian ? props.showInfoData.zhenggaifujian.split(',') : [];
});
const yanshoubiaoList = computed(() => {
return yanshoubiao ? yanshoubiao.split(',') : [];
return props.showInfoData.yanshoubiao ? props.showInfoData.yanshoubiao.split(',') : [];
});
const wrjffzhaopianList = computed(() => {
return wrjffzhaopian ? wrjffzhaopian.split(',') : [];
return props.showInfoData.wrjffzhaopian ? props.showInfoData.wrjffzhaopian.split(',') : [];
});
const xchczhaopianList = computed(() => {
return xchczhaopian ? xchczhaopian.split(',') : [];
return props.showInfoData.xchczhaopian ? props.showInfoData.xchczhaopian.split(',') : [];
});
function onMapboxLoad() {
changeTask();
@ -543,7 +460,7 @@
result = illegalTypeList;
break;
case 'measure_name':
result = keyIssuesIIMeasureOptions
result = keyIssuesIIMeasureOptions;
break;
case 'result_name':
result = resultOptions;
@ -556,9 +473,9 @@
break;
case 'qita_qksm':
result = [
{ label: '不存在经营', value: '1'},
{ label: '已优化调整', value: '2'},
]
{ label: '不存在经营', value: '1' },
{ label: '已优化调整', value: '2' },
];
}
result.forEach((item) => {
if (item.value == value) {
@ -577,8 +494,6 @@
key: null,
};
if (props.showInfoData.geomid) {
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
@ -604,27 +519,26 @@
}
}
const downLoadFile = (url) => {
if(url.indexOf('.pdf') !== -1){
if (url.indexOf('.pdf') !== -1) {
axios({
method: 'get',
url: `${VITE_GLOB_INFO_IMAGE_URL}/${url}`,
responseType: 'blob',
headers: {
'Content-Disposition': 'inline',
}
},
})
.then(response => {
let blob = new Blob([response.data], {type: 'application/pdf'});
let url = window.URL.createObjectURL(blob)
window.open(url);
})
.catch(error => {
console.error(error);
});
}else{
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
.then((response) => {
let blob = new Blob([response.data], { type: 'application/pdf' });
let url = window.URL.createObjectURL(blob);
window.open(url);
})
.catch((error) => {
console.error(error);
});
} else {
window.open(`${VITE_GLOB_INFO_IMAGE_URL}/${url}`, '_blank');
}
};
const getContainer = () => {
return document.getElementById('info-container');
@ -644,12 +558,12 @@
}
};
const showImage = (url) => {
if(url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1 ){
return true
}else{
return false
if (url.indexOf('.png') !== -1 || url.indexOf('.jpg') !== -1 || url.indexOf('.jpeg') !== -1) {
return true;
} else {
return false;
}
}
};
</script>
<style lang="scss" scoped>
@ -677,14 +591,14 @@
height: calc(100vh - 100px);
margin-right: 20px;
}
:deep(.ant-image){
:deep(.ant-image) {
margin-right: 10px;
margin-bottom: 10px;
}
:deep(.ant-image-preview-switch-left){
:deep(.ant-image-preview-switch-left) {
position: absolute;
}
:deep(.ant-image-preview-switch-right){
:deep(.ant-image-preview-switch-right) {
position: absolute;
}
.info-container {
@ -704,14 +618,14 @@
position: absolute;
top: 0;
width: 100%;
.ant-image-preview-operations-operation{
.ant-image-preview-operations-operation {
// flex:1;
}
}
.ant-image-preview-operations-operation:nth-last-child(1){
.ant-image-preview-operations-operation:nth-last-child(1) {
display: none;
}
.ant-image-preview-operations-operation:nth-last-child(2){
}
.ant-image-preview-operations-operation:nth-last-child(2) {
display: none;
}
}

View File

@ -116,6 +116,7 @@
function handleExport(exportType) {
console.log(searchParams);
let params = { ...searchParams.value };
params.limit = 9999;
let url = '';
let fileName = '';
if (exportType == 'excel') {
@ -180,7 +181,7 @@
function getTableData(querys) {
setLoading(true);
getLoadMineralsLedger(querys).then((res) => {
console.log(res)
console.log(res);
tableData.value = res.items;
tablePaginationRight.value.total = res.total;
setTableData(tableData.value);

View File

@ -812,10 +812,6 @@
const MapboxComponent = ref();
const mapConfig = ref({});
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
const props = defineProps(['id']);
const activeKey = ref('1');
@ -824,6 +820,10 @@
function getCaseInfo() {
getCaseInfoById({ id: props.id }).then((res) => {
caseInfo.value = res;
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
changeTask();
});
}
watch(
@ -839,7 +839,7 @@
});
const imageList = ref([]);
async function getCaseImgList() {
imageList.value = await getLoadCaseImgList({ caseid: props.id,category:'非法采矿工作管理' });
imageList.value = await getLoadCaseImgList({ caseid: props.id, category: '非法采矿工作管理' });
//
let zhengshiImageList = [];

View File

@ -38,6 +38,9 @@
<template v-if="['area', 'gengdiarea', 'nongyongdiarea'].includes(column.key)">
{{ dataProcessingCount(record[column.key]) }}
</template>
<template v-if="column.key === 'hefapanding_fill'">
{{ record.type_base == '加工'? record.hefapanding_jgfill: record.hefapanding_fill }}
</template>
<template v-if="column.key === 'action'">
<TableAction
:actions="[

View File

@ -116,6 +116,7 @@
function handleExport(exportType) {
console.log(searchParams);
let params = { ...searchParams.value };
params.limit = 9999;
let url = '';
let fileName = '';
if (exportType == 'excel') {

View File

@ -89,10 +89,10 @@
const { createMessage } = useMessage();
// ------------------------------------------------------------
const isFullScreen = ref<Boolean>(true);
const isFullScreen = ref<Boolean>(false);
const searchFormSchema = ref(searchFormSchema_map);
const tableSpan = ref(0);
const mapSpan = ref(24);
const tableSpan = ref(12);
const mapSpan = ref(12);
//
function fullScreen() {
@ -318,11 +318,22 @@
coordinates: [parseFloat(st[0]), parseFloat(st[1])],
},
properties: {
taskName: getTaskNameBytaskId(item.taskId) + item.uploadTime,
id: item.id,
path: item.path,
// model: item.model,
lng: parseFloat(st[0]),
lat: parseFloat(st[1]),
uploadTime: item.uploadTime,
remark: item.remark,
intact: item.intact,
userId: item.userId,
name: item.name,
taskId: item.taskId,
workPosition: item.workPosition,
flyer: item.flyer,
flyTime: item.flyTime,
// taskName: taskName,
taskName: getTaskNameBytaskId(item.taskId),
// model: item.model,
},
};
taskLayerGeoJson.features.push(feature);
@ -403,15 +414,15 @@
const modalImage = ref('');
const visible = ref<boolean>(false);
//
const handleOpen = (path) => {
const handleOpen = (properties) => {
// modalOpen.value = true;
setVisible(true);
modalTitle.value = '';
//
if (isValidUrl(path)) {
modalImage.value = path;
if (isValidUrl(properties.path)) {
modalImage.value = properties.path;
} else {
modalImage.value = VITE_GLOB_API_URL_VAR.value + path;
modalImage.value = VITE_GLOB_API_URL_VAR.value + properties.path;
}
};
//

View File

@ -48,25 +48,41 @@
</a-tooltip>
</div>
</a-col>
<a-col :span="19">
<a-col :span="19" @wheel.stop="handleScroll">
<div class="timeBox">
<a-slider
v-model:value="nowValue"
:tooltipOpen="true"
:tooltipOpen="false"
:tip-formatter="getValue"
:marks="marks"
:step="1"
:max="maxDays"
:min="1"
:max="maxCount"
@afterChange="sliderChange"
>
<template #mark="{ label, point }">
<template v-if="label.slice(-2) == '01'">
<span :style="{ color: 'white' }">{{ label }}</span>
</template>
<template v-if="label.slice(-4) == '1231'">
<span :style="{ color: 'white' }">{{ label }}</span>
</template>
<span
:style="{
color: 'white',
position: 'relative',
right: `${30}px`,
}"
>
<template v-if="bottomPoint.includes(point)">
{{ label.slice(0, 6) }}
</template>
</span>
<span
:style="{
color: 'red',
position: 'relative',
bottom: `${30 * countLines(label)}px`,
}"
>
<template v-if="topPoint.includes(point)">
{{ label }}
</template>
</span>
</template>
</a-slider>
</div>
@ -80,49 +96,145 @@
import { ref, watch, computed, onBeforeMount, onMounted, onBeforeUpdate, onUpdated } from 'vue';
import Icon from '@/components/Icon/Icon.vue';
import dayjs from 'dayjs';
import { GeoTiffManagerLoadPage } from '@/api/demo/system';
import { cloneDeep } from 'lodash-es';
const emit = defineEmits(['handleNowValueChange']);
const nowValue = ref<number>(parseInt(dayjs().dayOfYear()));
const marks = ref<Record<number, any>>();
const maxDays = ref(365);
const nowValue = ref<number>(0);
const maxCount = ref(365);
const marks: any = ref<Record<number, any>>();
const allDays: any = ref<Record<number, any>>();
let allDaysValue: any = {};
const sliderValue: any = ref({});
let allSliderValue: any = {};
const topPoint = ref([]);
const bottomPoint = ref([]);
const calculateDayOfYearAndDates = (time) => {
const startDate = dayjs(time).startOf('year');
const endDate = dayjs(time).endOf('year');
// marks
marks.value = {};
maxDays.value = parseInt(endDate.dayOfYear());
for (
let currentDate = startDate;
currentDate.isBefore(endDate);
currentDate = currentDate.add(1, 'day')
) {
const dayOfYear = parseInt(currentDate.dayOfYear());
const dateString = currentDate.format('YYYYMMDD');
marks.value[dayOfYear] = dateString;
watch(
() => allDays.value,
() => {
marks.value = {};
topPoint.value = [];
bottomPoint.value = [];
if (allDays.value) {
for (const key in allDays.value) {
if (allDays.value.hasOwnProperty(key)) {
const dateString = allDays.value[key];
//
if (isLastDayOfMonth(dateString)) {
marks.value[parseInt(key)] = allDays.value[parseInt(key)];
bottomPoint.value.push(parseInt(key));
}
}
}
}
if (sliderValue.value) {
sliderValue.value.forEach((item) => {
// console.log(item);
// const key = getKeyByDate(dayjs(item.createTime).format('YYYYMMDD'));
const key = getKeyByDate(item.dateDir);
if (key) {
if (marks.value[key] == undefined) {
marks.value[key] = item.layerName;
} else {
marks.value[key] = marks.value[key] + '\n' + item.layerName;
}
topPoint.value.push(parseInt(key));
}
});
}
},
{
deep: true,
// immediate: true,
},
);
//
function isLastDayOfMonth(dateStr) {
const date = dayjs(dateStr, 'YYYYMMDD');
const lastDayOfMonth = date.endOf('month'); //
return date.isSame(lastDayOfMonth, 'day');
}
function getKeyByDate(dateString) {
for (const key in allDays.value) {
if (allDays.value.hasOwnProperty(key)) {
if (allDays.value[key] === dateString) {
return key;
}
}
}
};
return null; // null
}
function countLines(str) {
// 使 \n
const lines = str.split('\n');
return lines.length;
}
const getValue = (key: number) => {
if (marks.value) {
return marks.value[key];
} else {
return key;
// } else if (allDays.value.hasOwnProperty(key)) {
// return allDays.value[key];
// } else {
// return key;
}
};
//
const sliderChange = (key: number) => {
emit('handleNowValueChange', [dayjs(getValue(1)), dayjs(getValue(nowValue.value))]);
playSwitch.value = false;
// emit('handleNowValueChange', [getValue(0), getValue(nowValue.value)]);
};
//
const handleScroll = (event) => {
event.preventDefault(); //
// console.log(':', event.deltaY);
//
if (event.deltaY < 0) {
// keys
const keys = Object.keys(allDays.value);
// console.log(parseInt(keys));
// console.log(Object.keys(allDaysValue).length);
if (parseInt(keys) + 2 <= Object.keys(allDaysValue).length) {
for (const index in allDays.value) {
const item = allDays.value[index];
if (allDays.value[keys[0]] == item && allDaysValue[parseInt(index) - 1]) {
allDays.value[parseInt(index) - 1] = allDaysValue[parseInt(index) - 1];
maxCount.value = maxCount.value + 1;
}
if (allDays.value[keys[keys.length - 1]] == item && allDaysValue[parseInt(index) + 1]) {
allDays.value[parseInt(index) + 1] = allDaysValue[parseInt(index) + 1];
maxCount.value = maxCount.value + 1;
}
}
}
}
//
if (event.deltaY > 0) {
const keys = Object.keys(allDays.value);
if (keys.length > 2) {
//
// const lastKey = keys[keys.length - 1];
// delete allDays.value[lastKey];
//
const firstKey = keys[0];
delete allDays.value[firstKey];
maxCount.value = maxCount.value - 2;
}
}
};
// /
const playSwitch = ref(false);
const handlePlay = () => {
playSwitch.value = !playSwitch.value;
if (playSwitch.value && nowValue.value < maxDays.value) {
if (playSwitch.value && nowValue.value < maxCount.value) {
addValue();
}
};
@ -131,8 +243,8 @@
// console.log(playSwitch.value);
if (playSwitch.value) {
setTimeout(() => {
nowValue.value = parseInt(dayjs(getValue(nowValue.value)).add(15, 'day').dayOfYear());
emit('handleNowValueChange', [dayjs(getValue(1)), dayjs(getValue(nowValue.value))]);
nowValue.value += 1;
emit('handleNowValueChange', [getValue(0), getValue(nowValue.value)]);
addValue();
}, 3000);
}
@ -193,14 +305,43 @@
return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;
}
async function fetch() {
//
GeoTiffManagerLoadPage({
page: 1,
limit: 1000000,
}).then((res) => {
console.log(res.items);
allSliderValue = res.items;
sliderValue.value = res.items;
const startDate = dayjs().startOf('year');
const endDate = dayjs().endOf('year');
// marks
allDaysValue = {};
allDays.value = {};
maxCount.value = parseInt(endDate.dayOfYear());
for (
let currentDate = startDate;
currentDate.isBefore(endDate);
currentDate = currentDate.add(1, 'day')
) {
const dayOfYear = parseInt(currentDate.dayOfYear());
const dateString = currentDate.format('YYYYMMDD');
allDaysValue[dayOfYear] = dateString;
}
allDays.value = cloneDeep(allDaysValue);
});
}
onMounted(() => {
calculateDayOfYearAndDates(dayjs());
fetch();
});
</script>
<style lang="less" scoped>
.timeBox {
position: relative;
top: 40px;
top: 60px;
width: 900px;
}

View File

@ -1,6 +1,12 @@
<template>
<div>
<div class="case-tree-container">
<div class="switch-button-open" @click="handlerOpen" v-if="!isOpen">
<img src="/statistical/switch-button.png" />
</div>
<div class="switch-button-close" @click="handlerOpen" v-if="isOpen">
<img src="/statistical/switch-button-active.png" />
</div>
<div class="case-tree-container" v-if="!isOpen">
<div class="title"> 图层列表 </div>
<div class="case-tree">
<a-directory-tree
@ -38,20 +44,34 @@
</a-modal> -->
<a-image
:width="200"
:style="{ display: 'none' }"
:style="{ display: 'none', zIndex: 1082 }"
:preview="{
visible,
onVisibleChange: setVisible,
}"
:src="modalImage"
:src="modalImage.path"
/>
<div class="leftOutlined" :style="{ zIndex: 1082000000 }" v-if="visible && beforeImageVif">
<LeftOutlined :style="{ fontSize: '30px' }" @click="beforeImage" />
</div>
<div class="rightOutlined" :style="{ zIndex: 1082 }" v-if="visible && afterImageVif">
<RightOutlined :style="{ fontSize: '30px' }" @click="afterImage" />
</div>
<div class="footer" :style="{ zIndex: 1082 }" v-if="visible">
<span class="info-item">飞手名{{ modalImage.flyer }}</span>
<span class="info-item">飞行时间{{ modalImage.flyTime }}</span>
<span class="info-item">任务名称{{ modalImage.taskName }}</span>
<span class="info-item">任务位置{{ modalImage.workPosition }}</span>
</div>
</div>
</template>
<script lang="ts" setup>
import { ref, watch, onMounted } from 'vue';
import { BasicTree, TreeItem, TreeActionType } from '@/components/Tree';
import { LeftOutlined, RightOutlined } from '@ant-design/icons-vue';
import type { TreeProps } from 'ant-design-vue';
// vben
import { useMessage } from '@/hooks/web/useMessage';
//
@ -130,16 +150,46 @@
pageIndex: 1,
pageSize: 10000,
}).then((res) => {
console.log(135, res.items);
//
tableData3_tupian = [];
treeData.value[2].children = [];
// -
let taskDateArray: any = [];
res.items.forEach((item) => {
taskDateArray.push({
key: item.taskDate,
});
});
const uniqueKeysArray = Array.from(new Set(taskDateArray.map((item) => item.key)));
uniqueKeysArray.forEach((array) => {
treeData.value[2].children.push({
key: array,
title: array,
children: [],
});
});
// -
res.items.forEach((item1) => {
treeData.value[2].children.forEach((item2) => {
if (item1.taskDate === item2.key) {
item2.children.push({
key: item1.id,
title: item1.workPosition + '_' + item1.flyer + ' (' + item1.imageCount + ')',
});
}
});
});
// -使
tableData3 = res.items;
res.items.forEach((item) => {
tableData3_id_list.push(item.id);
});
tableData3_tupian = [];
treeData.value[2].children = [];
res.items.forEach((item1) => {
if (item1.imageCount > 0) {
// -
let children: any = [];
AchievementManageListDroneShpImageexif({
pageIndex: 1,
pageSize: item1.imageCount,
@ -147,22 +197,7 @@
}).then((res2) => {
res2.items.forEach((item2) => {
tableData3_tupian.push(item2);
children.push({
key: item2.id,
title: item2.uploadTime,
});
});
//
treeData.value[2].children.push({
key: item1.id,
title: item1.taskName + '(' + item1.imageCount + ')',
children: children,
});
});
} else {
treeData.value[2].children.push({
key: item1.id,
title: item1.taskName + '(' + item1.imageCount + ')',
});
}
});
@ -199,15 +234,17 @@
};
//
const onCheck: TreeProps['onCheck'] = (checkedKeys) => {
console.log(checkedKeys);
// console.log(checkedKeys);
checkedKeys_now = checkedKeys;
let filter_tuceng: any = [];
let filter_yingxiang: any = [];
let filter_hangfei: any = [];
mapboxComponentRef.value.clearTaskLayer('GeoserverManagementRaster');
mapboxComponentRef.value.clearTaskLayer('GeoTiffManagerRaster');
mapboxComponentRef.value.clearTaskLayer('AchievementManageRaster');
if (checkedKeys.length == 0) {
mapboxComponentRef.value.clearTaskLayer('GeoserverManagementRaster');
mapboxComponentRef.value.clearTaskLayer('GeoTiffManagerRaster');
mapboxComponentRef.value.clearTaskLayer('AchievementManageRaster');
}
checkedKeys_now.forEach((checkedKey) => {
if (!['1', '2', '3'].includes(checkedKey)) {
@ -216,12 +253,12 @@
tableData1.forEach((data) => {
if (checkedKey == data.id) {
//
if (
dayjs(startTime).isBefore(data.createTime) &&
dayjs(endTime).isAfter(data.createTime)
) {
filter_tuceng.push(data);
}
// if (
// dayjs(startTime).isBefore(data.createTime) &&
// dayjs(endTime).isAfter(data.createTime)
// ) {
filter_tuceng.push(data);
// }
}
});
}
@ -230,56 +267,58 @@
tableData2.forEach((data) => {
if (checkedKey == data.id) {
//
if (
dayjs(startTime).isBefore(data.createTime) &&
dayjs(endTime).isAfter(data.createTime)
) {
filter_yingxiang.push(data);
// if (
// dayjs(startTime).isBefore(data.createTime) &&
// dayjs(endTime).isAfter(data.createTime)
// ) {
filter_yingxiang.push(data);
// }
}
});
}
// -
else if (tableData3_id_list.includes(checkedKey)) {
tableData3.forEach((data) => {
if (checkedKey == data.id) {
if (data.imageCount > 0) {
tableData3_tupian.forEach((tupian) => {
if (tupian.taskId == data.id) {
//
// if (
// dayjs(startTime).isBefore(tupian.uploadTime) &&
// dayjs(endTime).isAfter(tupian.uploadTime)
// ) {
filter_hangfei.push(tupian);
// }
}
});
} else {
createMessage.info('当前选中的任务并无航飞图片');
}
}
});
}
// // -
// else if (tableData3_id_list.includes(checkedKey)) {
// tableData3.forEach((data) => {
// if (checkedKey == data.id) {
// if (data.imageCount > 0) {
// tableData3_tupian.forEach((tupian) => {
// if (tupian.taskId == data.id) {
// //
// if (
// dayjs(startTime).isBefore(tupian.uploadTime) &&
// dayjs(endTime).isAfter(tupian.uploadTime)
// ) {
// filter_hangfei.push(tupian);
// }
// }
// });
// } else {
// createMessage.info('');
// -
// else {
// let filter = tableData3_tupian.filter((item) => item.id == checkedKey);
// filter?.forEach((f) => {
// if (!filter_hangfei.includes(f)) {
// if (dayjs(startTime).isBefore(f.uploadTime) && dayjs(endTime).isAfter(f.uploadTime)) {
// filter_hangfei.push(f);
// }
// }
// });
// }
// -
else {
let filter = tableData3_tupian.filter((item) => item.id == checkedKey);
filter?.forEach((f) => {
if (!filter_hangfei.includes(f)) {
if (dayjs(startTime).isBefore(f.uploadTime) && dayjs(endTime).isAfter(f.uploadTime)) {
filter_hangfei.push(f);
}
}
});
}
}
});
//
if (filter_tuceng.length > 0) {
mapboxComponentRef.value.GeoserverManagementRaster(
filter_tuceng,
[118.30207505530701, 35.30123435040745],
7.848587811931849,
// [118.30207505530701, 35.30123435040745],
// 7.848587811931849,
null,
null,
);
}
//
@ -322,11 +361,22 @@
coordinates: [parseFloat(st[0]), parseFloat(st[1])],
},
properties: {
taskName: getTaskNameBytaskId(item.taskId) + item.uploadTime,
id: item.id,
path: item.path,
// model: item.model,
lng: parseFloat(st[0]),
lat: parseFloat(st[1]),
uploadTime: item.uploadTime,
remark: item.remark,
intact: item.intact,
userId: item.userId,
name: item.name,
taskId: item.taskId,
workPosition: item.workPosition,
flyer: item.flyer,
flyTime: item.flyTime,
// taskName: taskName,
taskName: getTaskNameBytaskId(item.taskId),
// model: item.model,
},
};
taskLayerGeoJson.features.push(feature);
@ -339,7 +389,7 @@
7.848587811931849,
);
}
// =>
function isProjectedCoordinates(x, y) {
//
const isGeoXInRange = -180 <= x && x <= 180;
@ -362,23 +412,27 @@
let resultName = '';
tableData3.forEach((element) => {
if (element.id == taskid) {
resultName = element.taskName + '(' + element.flyer + ')';
resultName = element.taskName;
}
});
if (resultName) {
return resultName + '\n';
} else {
return resultName;
}
return resultName;
}
//
function handleNowValueChange(value) {
startTime = dayjs(value[0]).startOf('year').format('YYYY-MM-DD HH:mm:ss');
endTime = dayjs(value[1]).endOf('day').format('YYYY-MM-DD HH:mm:ss');
// console.log(421, value);
// startTime = dayjs(value[0]).startOf('year').format('YYYY-MM-DD HH:mm:ss');
// endTime = dayjs(value[1]).endOf('day').format('YYYY-MM-DD HH:mm:ss');
onCheck(checkedKeys_now);
}
//
const isOpen = ref(false);
function handlerOpen() {
isOpen.value = !isOpen.value;
}
onMounted(() => {
fetch();
});
@ -387,29 +441,94 @@
//
// const modalOpen = ref(false);
const modalTitle = ref('');
const modalImage = ref('');
const modalImage: any = ref({});
const visible = ref<boolean>(false);
//
const handleOpen = (path) => {
const handleOpen = (properties) => {
console.log(444, properties);
// modalOpen.value = true;
setVisible(true);
modalTitle.value = '';
//
if (isValidUrl(path)) {
modalImage.value = path;
modalImage.value = properties;
if (isValidUrl(properties.path)) {
modalImage.value.path = properties.path;
} else {
modalImage.value = VITE_GLOB_API_URL_VAR.value + path;
modalImage.value.path = VITE_GLOB_API_URL_VAR.value + properties.path;
}
};
//
const handleCancel = () => {
// modalOpen.value = false;
setVisible(false);
modalTitle.value = '';
modalImage.value = '';
};
const beforeImageVif = ref(false);
const afterImageVif = ref(false);
let nowImgs: any = [];
//
function beforeImage() {
for (let index = 0; index < nowImgs.length; index++) {
const item = nowImgs[index];
if (item.id == modalImage.value.id) {
modalImage.value = nowImgs[index - 1];
if (isValidUrl(modalImage.value.path)) {
modalImage.value.path = modalImage.value.path;
} else {
modalImage.value.path = VITE_GLOB_API_URL_VAR.value + modalImage.value.path;
}
if (index == 1) {
beforeImageVif.value = false;
}
afterImageVif.value = true;
return;
}
}
}
//
function afterImage() {
for (let index = 0; index < nowImgs.length; index++) {
const item = nowImgs[index];
if (item.id == modalImage.value.id) {
modalImage.value = nowImgs[index + 1];
if (isValidUrl(modalImage.value.path)) {
modalImage.value.path = modalImage.value.path;
} else {
modalImage.value.path = VITE_GLOB_API_URL_VAR.value + modalImage.value.path;
}
if (index == nowImgs.length - 2) {
afterImageVif.value = false;
}
beforeImageVif.value = true;
return;
}
}
// setVisible(true);
}
// //
// const handleCancel = () => {
// // modalOpen.value = false;
// setVisible(false);
// modalTitle.value = '';
// modalImage.value = '';
// };
const setVisible = (value): void => {
visible.value = value;
setTimeout(() => {
nowImgs = tableData3_tupian.filter((f) => {
return f.taskId == modalImage.value.taskId;
});
nowImgs?.forEach((item, index) => {
if (item.id == modalImage.value.id) {
console.log(index);
if (index != 0) {
beforeImageVif.value = true;
} else {
beforeImageVif.value = false;
}
if (index != nowImgs.length - 1) {
afterImageVif.value = true;
} else {
afterImageVif.value = false;
}
}
});
}, 500);
};
//
function isValidUrl(url: string): boolean {
@ -425,13 +544,13 @@
}
.case-tree-container {
width: 360px;
height: 720px;
height: calc(100vh - 180px);
position: absolute;
background: #041b36;
color: #155dd8;
position: absolute;
z-index: 1;
bottom: 20px;
left: 20px;
left: 25px;
}
.title {
@ -466,4 +585,87 @@
background-color: rgba(0, 0, 0, 0.5);
border-radius: 60px / 60px;
}
.switch-button-open {
width: 50px;
height: 100px;
position: absolute;
left: -10px;
top: 50%;
transform: translate(0, -50%);
cursor: pointer;
z-index: 999;
img {
width: 100%;
height: 100%;
}
}
.switch-button-close {
width: 50px;
height: 100px;
position: absolute;
left: -10px;
top: 50%;
z-index: 999;
transform: translate(0, -50%);
cursor: pointer;
img {
width: 100%;
height: 100%;
}
}
.footer {
position: absolute;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
z-index: 1082;
width: 100%;
font-size: 40px;
bottom: 0px;
height: 100px;
background: rgba(0, 0, 0, 0.4);
}
.info-item {
color: #ffffff;
flex-basis: calc(50% - 10px); /* 每个 span 占据一半的宽度减去一定的间隔 */
}
.leftOutlined {
position: absolute;
top: 40%;
z-index: 1082;
left: 0px;
color: #ffffff;
background-color: gray; /* 默认灰色背景 */
border-radius: 50%; /* 圆形 */
padding: 10px; /* 内边距 */
margin: 5px; /* 外边距 */
transition: background-color 0.3s ease; /* 平滑过渡 */
cursor: pointer; /* 鼠标指针变为手型 */
}
.rightOutlined {
position: absolute;
z-index: 1082;
top: 40%;
right: 0px;
color: #ffffff;
background-color: gray; /* 默认灰色背景 */
border-radius: 50%; /* 圆形 */
padding: 10px; /* 内边距 */
margin: 5px; /* 外边距 */
transition: background-color 0.3s ease; /* 平滑过渡 */
cursor: pointer; /* 鼠标指针变为手型 */
}
.leftOutlined:hover {
background-color: black; /* 鼠标悬停时背景颜色变为黑色 */
}
.rightOutlined:hover {
background-color: black; /* 鼠标悬停时背景颜色变为黑色 */
}
</style>

View File

@ -40,6 +40,7 @@
GeoTiffManagerLoadPage,
GeoTiffManagerGet,
} from '@/api/demo/system';
import proj4 from 'proj4';
const { createMessage } = useMessage();
@ -81,11 +82,35 @@
function handRowClick(record) {
let bbox = getBboxFromUrl(record.accessUrl);
let lngLat = getCenterPoint(bbox);
console.log(lngLat);
//
const result = isProjectedCoordinates(parseFloat(lngLat[0]), parseFloat(lngLat[1]));
if (result) {
lngLat[0] = result[0];
lngLat[1] = result[1];
}
let chooseRows: any = [];
chooseRows.push(record);
mapboxComponent.value.GeoTiffManagerRaster(chooseRows, lngLat, 11);
}
function isProjectedCoordinates(x, y) {
//
const isGeoXInRange = -180 <= x && x <= 180;
const isGeoYInRange = -90 <= y && y <= 90;
//
const fromCrs = 'EPSG:3857'; // Web Mercator
const toCrs = 'EPSG:4326'; //
//
if (!isGeoXInRange || !isGeoYInRange) {
//
const transformer = Transformer.fromCrs(fromCrs, toCrs);
return transformer.transform([x, y]);
} else {
return false;
}
}
// bbox
function getBboxFromUrl(url) {
const urlObj = new URL(url);

View File

@ -119,6 +119,11 @@
}
if (layerName && map.getLayer(layerName)) {
map.moveLayer(layerName, '');
if (layerName == 'GeoserverManagementRaster') {
if (map.getLayer('countyLayer')) {
map.moveLayer('countyLayer', 'GeoserverManagementRaster');
}
}
if (layerName == 'AchievementManageRaster') {
if (map.getLayer('clusters')) {
map.moveLayer('AchievementManageRaster', 'clusters');
@ -186,6 +191,11 @@
}
if (layerName && map.getLayer(layerName)) {
map.moveLayer(layerName, '');
if (layerName == 'GeoserverManagementRaster') {
if (map.getLayer('streetLayer')) {
map.moveLayer('streetLayer', 'GeoserverManagementRaster');
}
}
if (layerName == 'AchievementManageRaster') {
if (map.getLayer('clusters')) {
map.moveLayer('AchievementManageRaster', 'clusters');
@ -202,9 +212,9 @@
};
// -
function GeoserverManagementRaster(chooseRows, lngLat, zoom) {
function GeoserverManagementRaster(chooseRows, lngLat, zoom, epsg) {
//
// clearTaskLayer('GeoserverManagementRaster');
clearTaskLayer('GeoserverManagementRaster');
//
if (!map.getLayer('streetLayer')) {
handlerDealStreet('GeoserverManagementRaster');
@ -212,41 +222,38 @@
if (!map.getLayer('countyLayer')) {
handlerDealCountry('GeoserverManagementRaster');
}
handlerLocation(lngLat, zoom);
if (lngLat && zoom) {
handlerLocation(lngLat, zoom);
}
let tiles: any = [];
chooseRows.forEach((chooseRow) => {
let format =
chooseRow.dataType == '点' || chooseRow.dataType == '面'
? '&format=application/openlayers'
: '&format=image/png&TRANSPARENT=TRUE';
let tile =
'http://192.168.10.131:8080/geoserver/my_workspace/wms?service=WMS&version=1.1.0&request=GetMap&layers=my_workspace:' +
chooseRow.dataTable +
'&styles=&bbox={bbox-epsg-3857}&width=768&height=619&srs=' +
chooseRow.spatialRef +
format;
// let tile =
// 'http://221.2.83.254:9007/geoserver/ksp/wms?service=WMS&version=1.1.0&request=GetMap&layers=ksp:linqubianyaqi&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857&format=image/png&TRANSPARENT=TRUE&cql_filter=is_del%20=0';
'&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857' +
'&format=image/png&TRANSPARENT=TRUE';
tiles.push(tile);
});
if (map.getSource('GeoserverManagementRaster' + 'wmsSource')) {
map.getSource('GeoserverManagementRaster' + 'wmsSource').setData(tiles);
} else {
map.addSource('GeoserverManagementRaster' + 'wmsSource', {
type: 'raster',
tiles: tiles,
tileSize: 256,
});
map.addLayer({
id: 'GeoserverManagementRaster',
type: 'raster',
source: 'GeoserverManagementRaster' + 'wmsSource',
layout: {
visibility: 'visible',
},
});
map.addSource('GeoserverManagementRaster' + 'wmsSource', {
type: 'raster',
tiles: tiles,
tileSize: 256,
});
map.addLayer({
id: 'GeoserverManagementRaster',
type: 'raster',
source: 'GeoserverManagementRaster' + 'wmsSource',
layout: {
visibility: 'visible',
},
});
if (map.getLayer('streetLayer')) {
map.moveLayer('streetLayer', 'GeoserverManagementRaster');
}
if (map.getLayer('countyLayer')) {
map.moveLayer('countyLayer', 'GeoserverManagementRaster');
}
}
@ -265,13 +272,10 @@
let tiles: any = [];
chooseRows.forEach((chooseRow) => {
// tiles.push(
// chooseRow.accessUrl.replace(
// '&format=application/openlayers',
// '&format=image/png&TRANSPARENT=TRUE',
// ),
// );
tiles.push(chooseRow.accessUrl);
let row = chooseRow.accessUrl
.replace('&srs=', '&srs=EPSG:4326')
.replace('&format=application/openlayers', '&format=image/png&TRANSPARENT=TRUE');
tiles.push(row);
});
if (map.getSource('GeoTiffManagerRaster' + 'wmsSource')) {
@ -305,7 +309,10 @@
if (!map.getLayer('countyLayer')) {
handlerDealCountry('AchievementManageRaster');
}
handlerLocation(lngLat, zoom);
console.log(lngLat, zoom);
if (lngLat && zoom) {
// handlerLocation(lngLat, zoom);
}
if (map.getSource('AchievementManageRaster' + 'wmsSource')) {
map.getSource('AchievementManageRaster' + 'wmsSource').setData(taskLayerGeoJson);
@ -347,18 +354,18 @@
'text-size': 12,
},
});
// map.addLayer({
// id: 'unclustered-point',
// type: 'circle',
// source: 'AchievementManageRaster' + 'wmsSource',
// filter: ['any', ['!', ['has', 'point_count']], ['==', 'point_count', 1]],
// paint: {
// 'circle-color': '#11b4da',
// 'circle-radius': 4,
// 'circle-stroke-width': 2,
// 'circle-stroke-color': '#fff',
// },
// });
map.addLayer({
id: 'unclustered-point',
type: 'circle',
source: 'AchievementManageRaster' + 'wmsSource',
filter: ['any', ['!', ['has', 'point_count']], ['==', 'point_count', 1]],
paint: {
'circle-color': '#11b4da',
'circle-radius': 4,
'circle-stroke-width': 2,
'circle-stroke-color': '#fff',
},
});
//
map.loadImage('/map/AchievementManage.png', function (error, image) {
if (error) throw error;
@ -372,8 +379,8 @@
source: 'AchievementManageRaster' + 'wmsSource',
layout: {
'icon-image': 'taskIcon',
'icon-size': 1,
'text-field': ['get', 'taskName'],
'icon-size': 0.8,
// 'text-field': ['get', 'taskName'],
'text-size': 10,
'text-font': ['Open Sans Semibold', 'Arial Unicode MS Bold'],
'text-offset': [0, 1.8],
@ -388,7 +395,6 @@
'text-halo-width': 1,
},
});
map.on('click', 'AchievementManageRaster', (e) => {
console.log(e);
//
@ -396,12 +402,21 @@
//
const feature = e.features[0];
// 'path'
const path = feature.properties.path;
emits('handleOpen', path);
} else {
console.log('No feature was clicked.');
// const path = feature.properties.path;
// console.log(400, feature.properties);
emits('handleOpen', feature.properties);
}
});
if (map.getLayer('streetLayer')) {
map.moveLayer('streetLayer', 'clusters');
map.moveLayer('streetLayer', 'cluster-count');
map.moveLayer('streetLayer', 'AchievementManageRaster');
}
if (map.getLayer('countyLayer')) {
map.moveLayer('countyLayer', 'clusters');
map.moveLayer('countyLayer', 'cluster-count');
map.moveLayer('countyLayer', 'AchievementManageRaster');
}
if (map.getLayer('AchievementManageRaster')) {
if (map.getLayer('clusters')) {
map.moveLayer('AchievementManageRaster', 'clusters');