徐景良 2024-11-15 16:41:37 +08:00
commit 08c8b1e18e
15 changed files with 609 additions and 586 deletions

View File

@ -13,6 +13,8 @@ enum Api {
LoadCloudLandQueryById = '/api/DroneCloudQuery/LoadCloudLandQueryById',
// 查询云查询记录的情况
LoadCloudQueryByCaseNo = '/api/DroneCloudQuery/LoadCloudQueryByCaseNo',
// 查询云查询全部记录的情况
LoadCloudQueryAll = '/api/DroneCloudQuery/LoadCloudQueryAll',
}
export function AddDroneTask(params: { geomid: string; caseno: string; countyname: string }) {
@ -54,4 +56,11 @@ export function LoadCloudQueryByCaseNo(params) {
return defHttp.get({
url: Api.LoadCloudQueryByCaseNo + '?geomid=' + params.geomid + '&caseno=' + params.caseno,
});
}
export function LoadCloudQueryAll(params) {
return defHttp.get({
url: Api.LoadCloudQueryAll,
params,
});
}

View File

@ -6,11 +6,12 @@
import { defineProps, ref, onMounted, onUnmounted, defineEmits, computed } from 'vue';
import { v4 as uuidv4 } from 'uuid';
import mapboxgl, { Map } from 'mapbox-gl';
import { MapboxConfig, MapboxDefaultStyle } from '@/components/MapboxMaps/src/config.ts';
import { MapboxConfig, MapboxDefaultStyle } from '@/components/MapboxMaps/src/config';
import { getAppEnvConfig } from '@/utils/env';
const { VITE_GLOB_YINGXIANG_SERVER } = getAppEnvConfig();
const props = defineProps(['width', 'height', 'zIndex', 'position', 'center']);
const props = defineProps(['width', 'height', 'zIndex', 'position', 'centerAndZoom']);
const emits = defineEmits(['getMap']);
const { center } = props;
const width = computed(() => {
return props.width;
});
@ -30,6 +31,7 @@
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
map = initMap();
map.on('load', () => {
addResourcesAndLayers();
emits('getMap', map);
});
});
@ -39,16 +41,39 @@
language: 'zh-cmn',
projection: 'equirectangular', // wgs84
style: MapboxDefaultStyle,
maxZoom: 22,
maxZoom: 24,
minZoom: 6,
zoom: 15,
// ...props.mapOptions,
center: props.center
? getCenter(JSON.parse(`[${props.center[0].fourpoint}]`))
zoom: props.centerAndZoom
? calculateZoom(JSON.parse(`[${props.centerAndZoom[0]?.fourpoint}]`))
: 14,
center: props.centerAndZoom
? getCenter(JSON.parse(`[${props.centerAndZoom[0]?.fourpoint}]`))
: [117.984425, 35.270654],
});
};
function addResourcesAndLayers() {
map.addSource('yingxiang', {
type: 'raster',
tiles: [
VITE_GLOB_YINGXIANG_SERVER,
],
tileSize: 256,
minzoom:13,
maxzoom:24,
});
map.addLayer({
id: 'yingxiang',
type: 'raster',
source: 'yingxiang',
layout: {
visibility: 'visible',
},
minzoom:13,
maxzoom:24
});
}
//
function getCenter(fourpoint) {
let x = 0;
@ -63,6 +88,21 @@
return [x, y];
}
function calculateZoom(points) {
//
const nw = points[0];
const ne = points[1];
const se = points[2];
const sw = points[3];
const latRange = Math.abs(nw[1] - se[1]);
const lngRange = Math.abs(nw[0] - ne[0]);
//
const zoomLat = Math.log2(360 / latRange) - 1;
const zoomLng = Math.log2(360 / lngRange) - 1;
//
return Math.min(zoomLat * 1.05, zoomLng * 1.05).toFixed(2);
}
onUnmounted(() => {
map && map.remove();
});

View File

@ -8,12 +8,12 @@
</div>
<a-radio-group v-model:value="selectType" button-style="solid" size="small">
<a-radio-button :value="0">专题图</a-radio-button>
<a-radio-button :value="1">截图</a-radio-button>
<!-- <a-radio-button :value="1">截图</a-radio-button> -->
<a-radio-button :value="2">天地图</a-radio-button>
</a-radio-group>
</div>
<div class="slider-menu">
<a-slider
<!-- <a-slider
v-if="addOnMap && sliderShow"
v-model:value="nowSliderValue"
vertical="true"
@ -44,7 +44,7 @@
<span>设置叠加到地图的图片的透明度</span>
</template>
<PlusCircleOutlined
v-if="addOnMap && sliderShow"
v-if="(addOnMap || selectType == 2) && sliderShow"
:style="{
position: 'absolute',
fontSize: '18px',
@ -55,7 +55,7 @@
@click="changeSliderShow"
/>
<MinusCircleOutlined
v-if="addOnMap && !sliderShow"
v-if="(addOnMap || selectType == 2) && !sliderShow"
:style="{
position: 'absolute',
fontSize: '18px',
@ -65,11 +65,11 @@
}"
@click="changeSliderShow"
/>
</a-tooltip>
</a-tooltip> -->
</div>
<div class="expandShow-menu">
<FullscreenOutlined
v-if="addOnMap && !expandShow"
v-if="(addOnMap || selectType == 2) && !expandShow"
:style="{
position: 'absolute',
fontSize: '28px',
@ -80,24 +80,6 @@
}"
@click="expand(!expandShow)"
/>
<!-- <a-tooltip placement="top">
<template #title>
<span>截取屏幕地图</span>
</template>
<Icon
v-if="addOnMap"
icon="bi:scissors"
:size="expandShow ? 35 : 28"
:style="{
position: expandShow ? 'fixed' : 'absolute',
bottom: expandShow ? '70px' : '-65px',
right: expandShow ? '20px' : '40px',
color: 'white',
zIndex: 1012,
}"
@click="downloadImage"
/>
</a-tooltip> -->
<FullscreenExitOutlined
v-if="(addOnMap || selectType == 2) && expandShow"
:style="{
@ -112,10 +94,24 @@
/>
</div>
<template v-if="selectType === 0 && !addOnMap">
<a-image :width="470" :height="470" :src="convertValidUrl(showData.url)" />
<a-image
:width="470"
:height="470"
:src="convertValidUrl(showData.url)"
:preview="{
src: showData.previewUrl,
}"
/>
</template>
<template v-if="selectType === 1 && !addOnMap">
<a-image :width="470" :height="470" :src="convertValidUrl(showData.urlxian)" />
<a-image
:width="470"
:height="470"
:src="convertValidUrl(showData.urlxian)"
:preview="{
src: showData.previewUrlXian,
}"
/>
</template>
<template v-if="selectType === 2 || addOnMap">
<ModalMap
@ -123,7 +119,7 @@
:height="modalMapHeight"
:zIndex="modalMapZIndex"
:position="modalMapPosition"
:center="props.data"
:centerAndZoom="props.data"
@getMap="getMap"
/>
</template>
@ -138,6 +134,7 @@
</a-tab-pane>
<a-tab-pane key="2" tab="耕地占用">
<ShowTableList
v-if="props.data.length > 1"
:columns="landPlanningColumns"
:data="plowLandOccupyTable"
:title="'土地规划查询结果'"
@ -161,6 +158,7 @@
import mapboxgl from 'mapbox-gl';
//
import { getAppEnvConfig } from '@/utils/env';
import { result } from 'node_modules/@types/lodash-es';
const { VITE_GLOB_API_URL } = getAppEnvConfig();
const VITE_GLOB_API_URL_VAR = ref<String>(VITE_GLOB_API_URL + '/');
@ -187,13 +185,17 @@
() => {
if (addOnMap.value) {
//
if (map.getLayer('radar-layer')) {
map.removeLayer('radar-layer');
}
if (map.getSource('radar')) {
map.removeSource('radar');
if(map) {
if (map.getLayer('radar-layer')) {
map.removeLayer('radar-layer');
}
if (map.getSource('radar')) {
map.removeSource('radar');
}
}
}
//
addOnMapChange(true);
selectType.value = 2;
addOnMap.value = false;
},
@ -202,15 +204,26 @@
const landClassifyTable = computed(() => {
let data;
props.data?.forEach((item, index) => {
// console.log(props.data);
if (index == 0) {
let fourpoint = JSON.parse(`[${item.fourpoint}]`);
setTimeout(() => {
moveLocation(fourpoint);
}, 100);
}, 200);
//
addOnMapChange(true);
}
if (item.name == '土地分类') {
data = { ...item };
data = { ...item };
}
if(item.url){
changeTransparentColorToWhite(convertValidUrl(item.url)).then(resultImageUrl => {
item.previewUrl = resultImageUrl;
});
}
if(item.urlxian){
changeTransparentColorToWhite(convertValidUrl(item.urlxian)).then(resultImageUrl => {
item.previewUrlXian = resultImageUrl;
});
}
});
return data && data.list;
@ -230,7 +243,7 @@
case '1':
props.data?.forEach((item) => {
if (item.name == '土地分类') {
data = { ...item };
data = { ...item };
}
});
return data;
@ -312,7 +325,7 @@
}
});
}
if (selectType.value == 0) {
if (selectType.value == 0 || selectType.value == 2) {
url = convertValidUrl(data.url);
fourpoint = JSON.parse(`[${data.fourpoint}]`);
}
@ -320,7 +333,6 @@
url = convertValidUrl(data.urlxian);
fourpoint = JSON.parse(`[${data.fourpoint}]`);
}
let image = new Image();
image.crossOrigin = 'anonymous';
image.src = url;
@ -340,11 +352,13 @@
//
if (map.getLayer('radar-layer')) {
map.removeLayer('radar-layer');
}
if (map.getSource('radar')) {
map.removeSource('radar');
if(map) {
if (map.getLayer('radar-layer')) {
map.removeLayer('radar-layer');
}
if (map.getSource('radar')) {
map.removeSource('radar');
}
}
//
@ -367,9 +381,9 @@
moveLocation(fourpoint);
};
}
sliderShow.value = true;
sliderShow.value = false;
// console.log(337, props.data);
}, 1000);
}, 500);
};
//
@ -386,12 +400,28 @@
if (map) {
map.jumpTo({
center: [x, y],
zoom: 15,
zoom: calculateZoom(fourpoint),
});
}
return [x, y];
}
//
function calculateZoom(points) {
//
const nw = points[0];
const ne = points[1];
const se = points[2];
const sw = points[3];
const latRange = Math.abs(nw[1] - se[1]);
const lngRange = Math.abs(nw[0] - ne[0]);
//
const zoomLat = Math.log2(360 / latRange) - 1;
const zoomLng = Math.log2(360 / lngRange) - 1;
//
return Math.min(zoomLat * 1.05, zoomLng * 1.05).toFixed(2);
}
// ------------------------------------------------
const nowSliderValue = ref<number>(10);
//
@ -419,7 +449,7 @@
map.setPaintProperty('radar-layer', 'raster-opacity', parseFloat(getValue(key)));
};
//
const sliderShow = ref(true);
const sliderShow = ref(false);
function changeSliderShow() {
sliderShow.value = !sliderShow.value;
}
@ -432,8 +462,8 @@
const expandShow = ref(false);
function expand(value) {
if (value) {
modalMapWidth.value = '1920px';
modalMapHeight.value = '920px';
modalMapWidth.value = '100%';
modalMapHeight.value = '100%';
modalMapZIndex.value = 1011;
modalMapPosition.value = 'fixed';
} else {
@ -449,28 +479,45 @@
expandShow.value = value;
}
// mapbox
function downloadImage() {
//
map.resize();
// canvascanvas
var canvas = document.createElement('canvas');
canvas.width = map.getCanvas().width;
canvas.height = map.getCanvas().height;
var ctx = canvas.getContext('2d');
ctx.drawImage(map.getCanvas(), 0, 0);
// canvas
var image = canvas.toDataURL('image/png');
//
var link = document.createElement('a');
link.href = image;
link.download = 'screenshot.png';
//
link.click();
//
async function changeTransparentColorToWhite(imageUrl) {
return new Promise((resolve, reject) => {
// Image
const img = new Image();
img.crossOrigin = 'Anonymous'; //
img.src = imageUrl;
img.onload = () => {
// canvas
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
// canvas
canvas.width = img.width;
canvas.height = img.height;
// canvas
ctx.drawImage(img, 0, 0);
// canvas
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;
//
for (let i = 0; i < data.length; i += 4) {
if (data[i + 3] === 0) { // alpha 0
data[i] = 255; //
data[i + 1] = 255; // 绿
data[i + 2] = 255; //
data[i + 3] = 255; // alpha
}
}
// canvas
ctx.putImageData(imageData, 0, 0);
// canvas URL
const resultImageUrl = canvas.toDataURL('image/png');
// URL
resolve(resultImageUrl);
};
img.onerror = (error) => {
reject(error);
};
});
}
</script>

View File

@ -10,9 +10,8 @@
</template>
</ShowImage>
</div>
<div class="scroll-to-top" @click="scrollToTop" v-if="props.data.length > 1">
<ArrowUpOutlined :style="{ fontSize: '35px', position: 'relative', left: '13px'}"/>
回到顶部
<div class="show-image-item" v-if="props.data.length == 0">
暂无影像数据展示
</div>
</div>
</template>
@ -23,11 +22,6 @@
import ShowImage from '@/views/dashboard/test/components/ShowImage/index.vue';
const props = defineProps(['data']);
const contentArea = ref<HTMLElement | null>(null);
function scrollToTop(){
if(contentArea.value) {
contentArea.value.scrollTop = 0;
}
}
</script>
<style lang="scss" scoped>

View File

@ -1,7 +1,7 @@
<template>
<div class="modal-content-div">
<div class="title-text">
{{ compare ? '国家云查询结果(对比模式)' : '国家云查询结果' }}
{{ compare ? '云查询结果(对比模式)' : '云查询结果' }}
<Icon
class="split-button"
style="font-size: 20px"
@ -19,15 +19,15 @@
</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, defineEmits } from 'vue';
import { ref, onMounted, defineEmits, defineProps } from 'vue';
import Icon from '@/components/Icon/Icon.vue';
import CloudQueryModal from './CloudQueryModal/index.vue';
import { useCloudQueryStore } from '@/store/modules/cloudquery';
import { LoadCloudQueryById } from '@/api/demo/cloudQuery';
const useCloudQuery = useCloudQueryStore();
const props = defineProps(['cloudQueryContentRecord']);
const emits = defineEmits(['changeCompare']);
const compare = ref(false);
const info = ref();
@ -37,15 +37,14 @@
emits('changeCompare', compare.value);
};
onMounted(() => {
let id = useCloudQuery.getCloudQueryInfo.id;
// console.log(41, useCloudQuery.getCloudQueryInfo);
// : '45febd6e-4f87-461a-a65d-f0284db6a356'
let id = props.cloudQueryContentRecord?.queryId || useCloudQuery.getCloudQueryInfo.id;
LoadCloudQueryById({ id }).then((res) => {
let data = JSON.parse(res.receiveContent);
if (typeof data == 'string') {
data = JSON.parse(data);
}
// console.log(47, data);
console.log(47, data);
info.value = data;
});
});

View File

@ -1,17 +1,46 @@
<template>
<div class="map-container">
<div :id="mapContainerName" @mouseover="mapmouseover" class="map-box"></div>
<div class="cloud-query-div" v-if="props.geomsList" @click="initiateCloudQuery">
<div>
<div class="cloud-query-div" v-if="props.geomsList">
<div v-if="useCloudQuery.getIdentification" @click="initiateCloudQuery2">
<div class="cloud-query-icon">
<Icon icon="gis:globe-poi" v-if="!useCloudQuery.getIdentification" :size="20" />
<Loading3QuartersOutlined v-if="useCloudQuery.getIdentification" spin :style="{fontSize:'20px'}" />
<Loading3QuartersOutlined spin :style="{ fontSize: '20px' }" />
</div>
<div>云查询</div>
</div>
<div
v-else-if="
!useCloudQuery.getIdentification &&
useCloudQuery?.beforeId &&
props.caseno == useCloudQuery?.caseno
"
@click="initiateCloudQuery3"
>
<div class="cloud-query-icon">
<Icon icon="gis:globe-poi" :size="20" />
</div>
<div> 查看结果 </div>
</div>
<div v-else @click="initiateCloudQuery1">
<div class="cloud-query-icon">
<Icon icon="gis:globe-poi" :size="20" />
</div>
<div>云查询</div>
</div>
</div>
<div v-if="!useCloudQuery.getIdentification && useCloudQuery.beforeId && props.caseno == useCloudQuery.caseno">
查看结果
<!-- 云查询内容提示 -->
<div class="cloudqueryNotice" v-if="props.geomsList && useCloudQuery.getCloudQueryVisable">
<div class="cloudquery-title">
<div class="cloudquery-left">
<img src="/message.png" alt="" />
<span class="title-box">您有一条云查询结果请查收</span>
</div>
<div class="cloudquery-right">
<a-button type="primary" @click="initiateCloudQuery3"></a-button>
<div class="line"></div>
<CloseOutlined @click="closeCloudQuery" style="color: #fff" title="关闭" />
</div>
<div v-else></div>
</div>
</div>
@ -581,7 +610,6 @@
// mapDiv?.onmouseover = function(e){
// alert(e);
// }
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
map = initMap();
map.on('load', () => {
@ -1562,7 +1590,6 @@
locationArrays.value.push(item);
};
// txt
const handleImportCoorinateChange = (e)=>{
const reader = new FileReader();
@ -1671,7 +1698,6 @@
]);
locationGeoJson.polyline.features[0] = feature;
}
if (locationDrawArrays.value?.length >= 3) {
let feature = {
@ -1872,57 +1898,81 @@
//
const handlerLocationDrawPolygon = () => {};
const initiateCloudQuery = () => {
// -
function initiateCloudQuery1() {
let geomidStr = props.geomsList.map((item) => item.key).join(',');
if (!useCloudQuery.getIdentification && useCloudQuery.beforeId && props.caseno == useCloudQuery.caseno) {
open.value = true;
} else if (useCloudQuery.getIdentification) {
//
LoadCloudQueryByCaseNo({
geomid: useCloudQuery.geomid,
caseno: useCloudQuery.caseno,
}).then((res) =>{
if(res) {
if (geomidStr == useCloudQuery.geomid && props.caseno == useCloudQuery.caseno) {
if(res.state == 1 || res.state == 0) {
message.warning('当前图斑的云查询正在运行,请稍候等待');
} else {
useCloudQuery.setIdentification(false);
useCloudQuery.setBeforeId(res.queryId);
useCloudQuery.setCloudQueryInfo({id: res.queryId});
open.value = true;
}
} else {
//
message.warning('已有云查询运行,不能再次提交');
}
}
});
} else {
AddDroneTask({ geomid: geomidStr, caseno: props.caseno, countyname: props.countyname, }).then((res) => {
AddDroneTask({ geomid: geomidStr, caseno: props.caseno, countyname: props.countyname }).then(
(res) => {
if (res) {
message.success('成功提交云查询');
useCloudQuery.setGeomid(geomidStr);
useCloudQuery.setCaseno(props.caseno);
useCloudQuery.setIdentification(true);
let expires =
'; expires=' + new Date(new Date().getTime() + 60 * 60 * 1000).toUTCString();
document.cookie = 'geomid=' + encodeURIComponent(geomidStr) + expires + '; path=/';
document.cookie = 'caseno=' + encodeURIComponent(props.caseno) + expires + '; path=/';
document.cookie = 'identification=true' + expires + '; path=/';
} else {
message.error('提交云查询失败');
useCloudQuery.setIdentification(false);
}
});
}
};
},
);
}
// -
function initiateCloudQuery2() {
let geomidStr = props.geomsList.map((item) => item.key).join(',');
//
LoadCloudQueryByCaseNo({
geomid: useCloudQuery.geomid,
caseno: useCloudQuery.caseno,
}).then((res) => {
if (res) {
if (geomidStr == useCloudQuery.geomid && props.caseno == useCloudQuery.caseno) {
if (res.state == 1 || res.state == 0) {
message.warning('当前图斑的云查询正在运行,请稍候等待');
} else {
useCloudQuery.setIdentification(false);
useCloudQuery.setBeforeId(res.queryId);
useCloudQuery.setCloudQueryInfo({ id: res.queryId });
let expires =
'; expires=' + new Date(new Date().getTime() + 60 * 60 * 1000).toUTCString();
document.cookie = 'beforeId=' + encodeURIComponent(res.queryId) + expires + '; path=/';
open.value = true;
}
} else {
//
message.warning('已有云查询运行,不能再次提交');
}
}
});
}
// -
function initiateCloudQuery3() {
open.value = true;
}
// ---------------------------------------------------------
function closeCloudQuery() {
useCloudQuery.setCloudQueryVisable(false);
useCloudQuery.identification = false;
}
//
signal.on('RevMsg', (user, cloudDataString, time, id, issystem) => {
// CloudQuery
if (user == 'CloudQuery') {
let cloudData = JSON.parse(cloudDataString);
if(cloudData.geomid == useCloudQuery.getGeomid && cloudData.caseno == useCloudQuery.getCaseno) {
if(useCloudQuery.beforeId == '' || cloudData.queryid != useCloudQuery.beforeId) {
message.success('云查询结果已返回,请查看');
if (
cloudData.geomid == useCloudQuery.getGeomid &&
cloudData.caseno == useCloudQuery.getCaseno
) {
if (useCloudQuery.beforeId == '' || cloudData.queryid != useCloudQuery.beforeId) {
let expires =
'; expires=' + new Date(new Date().getTime() + 24 * 60 * 60 * 1000).toUTCString();
document.cookie =
'beforeId=' + encodeURIComponent(cloudData.queryId) + expires + '; path=/';
}
useCloudQuery.setBeforeId(cloudData.queryid);
}
@ -2136,7 +2186,7 @@
}
}
.picture-azimuth{
.picture-azimuth {
width: 29px;
height: 29px;
float: left;
@ -2149,7 +2199,7 @@
}
}
.picture-azimuth-active{
.picture-azimuth-active {
width: 29px;
height: 29px;
float: left;
@ -2204,14 +2254,14 @@
.to-location-input {
padding: 16px;
padding-right:4px;
padding-right: 4px;
width: 418px;
min-height: 60px;
background: #fff;
position: absolute;
top: 48px;
right: 10px;
z-index:999999;
z-index: 999999;
border-radius: 5px;
box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);
.location-operation {
@ -2220,10 +2270,10 @@
border-bottom: 1px solid #f1f1f1;
margin-bottom: 12px;
}
.location-item-list-coantienr{
width:100%;
max-height:400px;
overflow-y:auto;
.location-item-list-coantienr {
width: 100%;
max-height: 400px;
overflow-y: auto;
.location-item {
line-height: 20px;
margin-bottom: 6px;
@ -2231,9 +2281,67 @@
}
}
.split-panel-item:hover {
cursor: pointer;
color: #999;
}
.split-panel-item:hover{
cursor:pointer;
color:#999;
.cloudqueryNotice {
background: rgba(0, 0, 0, 0.53);
padding: 0px 14px;
border-radius: 6px;
position: fixed;
top: 20px;
right: 5vw;
width: 700px;
color: #fff;
z-index: 10;
.cloudquery-title {
height: 40px;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 16px;
}
.cloudquery-left {
display: flex;
align-items: center;
}
.cloudquery-right {
display: flex;
align-items: center;
justify-content: space-around;
width: 130px;
}
img {
width: 34px;
height: 29px;
}
.cloudquery-btn {
display: flex;
justify-content: flex-end;
}
.line {
background: #ededed;
width: 1px;
height: 20px;
}
.anticon.anticon-close {
height: 30px;
}
button {
width: 70px;
height: 26px;
background: linear-gradient(-74deg, #086dec, #0b4bdd);
box-shadow: 3px 4px 5px 1px rgba(13, 13, 13, 0.05);
border-radius: 16px;
display: flex;
align-items: center;
justify-content: center;
}
.title-box {
margin-left: 10px;
font-size: 14px;
}
}
</style>

View File

@ -1,124 +1,186 @@
<template>
<div>
<Tooltip :title="getTitle" placement="bottom" :mouseEnterDelay="0.5">
<span>
<a-dropdown :trigger="['click']" :placement="bottom">
<CloudOutlined
:style="{
fontSize: '18px',
}"
@click="getStateByGeomidAndCaseNo"
/>
<template #overlay>
<a-menu>
<a-menu-item>
图斑ID{{ getGeomid }}
<a-button :style="{ position: 'absolute', right: '12px' }" type="link" @click="copyToClipboard(getGeomid)"></a-button>
</a-menu-item>
<a-menu-item>
案件编号{{ getCaseno }}
<a-button type="link" @click="copyToClipboard(getCaseno)"></a-button>
</a-menu-item>
<a-menu-item>
当前状态
<a-tag v-if="getState == 0" color="red"></a-tag>
<a-tag v-if="getState == 1" color="green"></a-tag>
<a-tag v-if="getState == 2" color="blue"></a-tag>
<a-button
v-if="getState == 2"
:style="{ position: 'absolute', right: '16px', fontSize: '14px' }"
type="primary"
size="small"
@click="handCloudQuery"
>
查看
</a-button>
</a-menu-item>
</a-menu>
<a-tooltip>
<template #title>云查询记录</template>
<CloudOutlined
:style="{
fontSize: '18px',
}"
@click="handleOpenTable"
/>
</a-tooltip>
<!-- 云查询记录 -->
<a-modal
v-model:open="openTable"
title="云查询记录"
:footer="false"
:width="'1020px'"
style="top: 30px;"
:destroyOnClose="true"
>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'state'">
<a-tag color="red" v-if="record.state == 0"></a-tag>
<a-tag color="green" v-if="record.state == 1"></a-tag>
<a-tag color="blue" v-if="record.state == 2"></a-tag>
</template>
</a-dropdown>
</span>
</Tooltip>
<template v-if="column.key === 'action' && record.state == 2">
<a-button
type="link"
@click="handCloudQuery(record)"
>
查看
</a-button>
</template>
</template>
</BasicTable>
</a-modal>
<!-- 云查询结果 -->
<a-modal
v-model:open="open"
v-model:open="openResult"
:footer="false"
@cancel="closeCloudQueryModal"
:width="compare ? '1020px' : '510px'"
style="top: 20px"
:destroyOnClose="true"
>
<CloudQueryContent @changeCompare="changeCompare"/>
<CloudQueryContent @changeCompare="changeCompare" :cloudQueryContentRecord="cloudQueryContentRecord" />
</a-modal>
</div>
</template>
<script lang="ts" setup>
import { computed, unref, ref } from 'vue';
import { computed, unref, ref, onMounted } from 'vue';
import { Tooltip } from 'ant-design-vue';
import { useI18n } from '@/hooks/web/useI18n';
import { BasicTable, useTable } from '@/components/Table';
import { BasicColumn, FormSchema } from '@/components/Table';
import { CloudOutlined } from '@ant-design/icons-vue';
import { useCloudQueryStore } from '@/store/modules/cloudquery';
import { LoadCloudQueryByCaseNo } from '@/api/demo/cloudQuery';
import { getAppEnvConfig } from '@/utils/env';
import { LoadCloudQueryAll } from '@/api/demo/cloudQuery';
import CloudQueryContent from '@/components/CloudQueryContent/index.vue';
import { useMessage } from '@/hooks/web/useMessage';
import axios from 'axios';
const { VITE_GLOB_API_URL } = getAppEnvConfig();
const { t } = useI18n();
const getTitle = computed(() => {
return t('layout.header.cloud');
// ----------------------------------------------
// -table
const columns: BasicColumn[] = [
{
title: 'id',
dataIndex: 'id',
ifShow: false,
},
{
title: 'queryId',
dataIndex: 'queryId',
ifShow: false,
},
{
title: '图斑编号',
dataIndex: 'caseNo',
width: 150,
},
{
title: '图斑ID',
dataIndex: 'geomId',
width: 100,
},
{
title: '当前状态',
dataIndex: 'state',
width: 80,
},
{
title: '区县',
dataIndex: 'countyName',
ifShow: false,
},
{
title: '创建时间',
dataIndex: 'createTime',
width: 150,
},
{
title: '操作',
dataIndex: 'action',
width: 100,
},
];
// -
const searchFormSchema: FormSchema[] = [
{
field: 'caseNo',
label: '图斑编号',
component: 'Input',
colProps: { span: 8 },
},
{
field: 'geomId',
label: '图斑ID',
component: 'Input',
colProps: { span: 8 },
},
];
const openTable = ref(false);
function handleOpenTable(){
openTable.value = true;
}
// -
const [registerTable, { reload }] = useTable({
api: LoadCloudQueryAll,
columns: columns,
title: '云查询记录',
formConfig: {
labelWidth: 120,
schemas: searchFormSchema,
},
showIndexColumn: true,
useSearchForm: true,
canResize: true,
bordered: true,
showTableSetting: true,
handleSearchInfoFn(info) {
return info;
},
});
const cloudQueryStore = useCloudQueryStore();
const getGeomid = computed(() => {
return cloudQueryStore.geomid;
});
const getCaseno = computed(() => {
return cloudQueryStore.caseno;
});
const nowState = ref(0);
const getState = computed(() => {
return nowState.value;
});
function getStateByGeomidAndCaseNo(){
LoadCloudQueryByCaseNo({
geomid: cloudQueryStore.geomid,
caseno: cloudQueryStore.caseno,
}).then((res) =>{
if(res) {
nowState.value = res.state;
} else {
nowState.value = 1;
}
});
};
// ----------------------------------------------
const compare = ref(false);
const open = ref(false);
const openResult = ref(false);
const changeCompare = (value) => {
compare.value = value;
};
const closeCloudQueryModal = () => {
open.value = false;
openResult.value = false;
compare.value = false;
}
function handCloudQuery() {
open.value = true;
const cloudQueryContentRecord = ref();
function handCloudQuery(record) {
cloudQueryContentRecord.value = record;
openResult.value = true;
}
//
const { createMessage } = useMessage();
const copyToClipboard = async (record) => {
try {
await navigator.clipboard.writeText(record);
createMessage.success('文本已复制到剪贴板');
} catch (err) {
createMessage.error('无法复制文本');
// Cookie
const cloudQueryStore = useCloudQueryStore();
function getCookie(name) {
const nameEQ = name + "=";
const ca = document.cookie.split(';');
for (let i = 0; i < ca.length; i++) {
let c = ca[i].trim();
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
};
</script>
return null;
}
// onMounted(()=>{
// cloudQueryStore.setGeomid(getCookie("geomid"));
// cloudQueryStore.setCaseno(getCookie("caseno"));
// if(cloudQueryStore.geomid != null && cloudQueryStore.caseno != null) {
// const beforeId = getCookie("beforeId");
// cloudQueryStore.setBeforeId(beforeId);
// cloudQueryStore.setCloudQueryInfo({ id: beforeId });
// cloudQueryStore.setIdentification(true);
// }
// });
</script>
<style lang="less" scoped></style>

View File

@ -26,7 +26,8 @@
</template>
</Popover>
<!-- 云查询内容提示 -->
<div class="cloudquery-notice" v-if="cloudQueryVisible">
<div class="cloudquery-notice" v-if="useCloudQuery.getCloudQueryVisable">
<!-- <div class="cloudquery-notice" v-if="cloudQueryVisible"> -->
<div class="cloudquery-title">
<div class="cloudquery-left">
<img src="/message.png" alt="" />
@ -139,7 +140,7 @@
const taskId = ref('');
const isRead: any = ref(0);
const type = ref('');
const cloudQueryVisible = ref(false);
// const cloudQueryVisible = ref(false);
const cloudLandQueryVisible = ref(false);
const showSplitPolygon = ref(false);
const showInfoData = ref({});
@ -240,11 +241,17 @@
// CloudQuery
let messageData = JSON.parse(message);
if (user == 'CloudQuery') {
if(messageData.geomid == useCloudQuery.getGeomid && messageData.caseno == useCloudQuery.getCaseno) {
if (
messageData.geomid == useCloudQuery.getGeomid &&
messageData.caseno == useCloudQuery.getCaseno
) {
useCloudQuery.setBeforeId(messageData.queryid);
showCloudQuery({
id: messageData.queryid,
});
let expires = '; expires=' + new Date(new Date().getTime() + 60 * 60 * 1000).toUTCString();
document.cookie =
'beforeId=' + encodeURIComponent(messageData.queryId) + expires + '; path=/';
}
}else if(user == 'CloudLandQuery'){
//
@ -281,7 +288,8 @@
auditOpen.value = false;
}
function showCloudQuery(info) {
cloudQueryVisible.value = true;
// cloudQueryVisible.value = true;
useCloudQuery.setCloudQueryVisable(true);
useCloudQuery.setIdentification(false);
useCloudQuery.setCloudQueryInfo(info);
}
@ -291,7 +299,8 @@
closeCloudQuery();
}
function closeCloudQuery() {
cloudQueryVisible.value = false;
useCloudQuery.setCloudQueryVisable(false);
// cloudQueryVisible.value = false;
}
//
@ -413,7 +422,7 @@
border-radius: 6px;
position: fixed;
top: 30px;
right: 1vw;
right: 3vw;
width: 700px;
color: #fff;
z-index: 10;
@ -453,6 +462,7 @@
button {
width: 70px;
height: 26px;
background: linear-gradient(-74deg, #086dec, #0b4bdd);
box-shadow: 3px 4px 5px 1px rgba(13, 13, 13, 0.05);
border-radius: 16px;

View File

@ -35,7 +35,7 @@
<div :class="`${prefixCls}-action`">
<AppSearch v-if="getShowSearch" :class="`${prefixCls}-action__item `" />
<CloudQuery v-if="getIdentification" :class="`${prefixCls}-action__item `" />
<CloudQuery :class="`${prefixCls}-action__item `" />
<ErrorAction v-if="getUseErrorHandle" :class="`${prefixCls}-action__item error-action`" />
@ -158,12 +158,6 @@
const getMenuMode = computed(() => {
return unref(getSplit) ? MenuModeEnum.HORIZONTAL : null;
});
//
const cloudQueryStore = useCloudQueryStore();
const getIdentification = computed(() => {
return cloudQueryStore.beforeId || cloudQueryStore.identification;
});
</script>
<style lang="less">
@import url('./index.less');

View File

@ -19,6 +19,8 @@ export const useCloudQueryStore = defineStore({
},
timeImages: {},
},
// 云查询提示信息
cloudQueryVisible: false,
}),
getters: {
getBeforeId: (state) => {
@ -38,7 +40,10 @@ export const useCloudQueryStore = defineStore({
},
getCloudQueryModalInfo: (state) => {
return state.cloudQueryModalInfo;
}
},
getCloudQueryVisable: (state) => {
return state.cloudQueryVisible;
},
},
actions: {
setBeforeId(info: any) {
@ -58,6 +63,9 @@ export const useCloudQueryStore = defineStore({
},
setCloudQueryModalInfo(data: any) {
this.cloudQueryModalInfo = data;
}
},
setCloudQueryVisable(data: any) {
this.cloudQueryVisible = data;
},
},
});

View File

@ -41,7 +41,7 @@
>
<div class="modal-content-div">
<div class="title-text">
{{ compare ? '国家云查询结果(对比模式)' : '国家云查询结果' }}
{{ compare ? '云查询结果(对比模式)' : '云查询结果' }}
<Icon
class="split-button"
style="font-size: 20px"

View File

@ -1,10 +1,10 @@
<template>
<div class="control-show">
<!-- <div class="control-show">
<a-radio-group v-model:value="select" button-style="solid" size="small">
<a-radio-button :value="0">专题图</a-radio-button>
<a-radio-button :value="1">截图</a-radio-button>
</a-radio-group>
</div>
</div> -->
<a-image :width="470" :height="470" :src="get(url)" />
<div class="footer" v-if="haveFooter">
<slot name="footer" />
@ -49,4 +49,9 @@
height: 50px;
background: rgba(0, 0, 0, 0.4);
}
</style>
::v-deep .ant-image-mask {
display: none !important;
// background: red !important;
}
</style>

View File

@ -2,7 +2,7 @@
<div class="title">{{ title }}</div>
<a-table
:columns="columns"
:data-source="props.data"
:data-source="listResult"
:pagination="false"
size="small"
:scroll="{ y: 100 }"
@ -24,7 +24,7 @@
{{ stats ? stats : '-' }}
</template>
<template v-if="column.key === 'area'">
{{ toStandardFloat(squareMetersToMu(record.area)) }}
{{ record.area }}
</template>
</template>
<template #summary>
@ -35,12 +35,13 @@
<a-typography-text></a-typography-text>
</a-table-summary-cell>
<a-table-summary-cell>
<a-typography-text>{{ toStandardFloat(squareMetersToMu(result)) }}</a-typography-text>
<a-typography-text>{{ result }}</a-typography-text>
</a-table-summary-cell>
</a-table-summary-row>
</a-table-summary>
</template>
</a-table>
<div class="bottom"></div>
</template>
<script setup lang="ts">
@ -53,9 +54,21 @@
props.data?.forEach((item) => {
sum += item.area;
});
return sum;
return roundToTwoDecimals(toStandardFloat(squareMetersToMu(sum)));
}
});
const listResult = computed(() => {
let list: any = [];
if (props.data) {
props.data?.forEach((item) => {
let area = roundToTwoDecimals(toStandardFloat(squareMetersToMu(item.area)));
if(area > 0){
list.push({type: item.type, area: area });
}
});
}
return list;
});
//
function squareMetersToMu(squareMeters) {
@ -63,14 +76,17 @@
const mu = parseFloat(squareMeters) * MU_PER_SQUARE_METER;
return parseFloat(mu);
}
function toStandardFloat(number, precision = 20) {
// 'e-'
// 'e-'
function toStandardFloat(number, precision = 2) {
if (typeof number === 'number' && number.toString().includes('e-')) {
return number.toFixed(precision);
}
return number;
}
//
function roundToTwoDecimals(number) {
return Math.round(number * 10000) / 10000;
}
const colotType = [
{ code: '采矿用地', color: '#30123b', linecolor: '#e8500f' },
@ -135,4 +151,7 @@
:deep(.ant-table-summary) {
background: #fafafa;
}
.bottom {
height: 20px;
}
</style>

View File

@ -14,7 +14,7 @@
</div>
<div class="info-container" id="info-container">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane key="1" tab="线索下发">
<a-tab-pane key="1" tab="图斑详情">
<a-descriptions
:column="2"
bordered
@ -24,49 +24,49 @@
'word-break': 'break-all',
}"
>
<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(props.showInfoData.area)
}}</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(props.showInfoData.area) }}
</a-descriptions-item>
<a-descriptions-item label="农用地面积(亩)">{{
dataProcessing(props.showInfoData.nongyongdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="耕地面积(亩)">{{
dataProcessing(props.showInfoData.gengdi_area)
}}</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">{{
dataProcessing(props.showInfoData.yongjiujibennongtian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占重点区域面积(亩)">{{ dataProcessing(zhongdianquyu_area) }}</a-descriptions-item> -->
<a-descriptions-item label="耕地面积(亩)">
{{ dataProcessing(props.showInfoData.gengdi_area) }}
</a-descriptions-item>
<a-descriptions-item label="永农面积(亩)">
{{ dataProcessing(props.showInfoData.yongjiujibennongtian_area) }}
</a-descriptions-item>
<a-descriptions-item label="占生态红线面积(亩)">{{
dataProcessing(props.showInfoData.shengtaibaohuhongxian_area)
}}</a-descriptions-item>
<!-- <a-descriptions-item label="占空间规划面积(亩)">{{ dataProcessing(guotukongjianguihua_area) }}</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="图斑描述">
{{ 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="图斑照片">
<a-descriptions-item label="下发时间">
{{ props.showInfoData.synchronoustime }}
</a-descriptions-item>
<a-descriptions-item label="审核意见" :span="2">
{{ props.showInfoData.shijiyijian }}
</a-descriptions-item>
<a-descriptions-item label="图斑照片" :span="2">
<div class="image-div">
<a-image-preview-group
:preview="{
@ -87,20 +87,9 @@
</a-image-preview-group>
</div>
</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(props.showInfoData.typename)"
tab="线索填报"
force-render
>
<a-tab-pane key="2" tab="县区填报" force-render>
<a-descriptions
:column="2"
bordered
@ -110,22 +99,10 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="判定结果">{{
getLabel('is_illegal', props.showInfoData.is_illegal)
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目名称">{{
props.showInfoData.xiangmumc
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="项目主体">{{
props.showInfoData.xiangmuzhuti
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="实际用途">{{
props.showInfoData.actual_use_to
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="违法类型">{{
getLabel('weifaleixing', props.showInfoData.weifaleixing)
}}</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.is_illegal == 1" label="附件">
<a-descriptions-item label="情况说明" :span="2">
{{ props.showInfoData.pandingyijushuoming }}
</a-descriptions-item>
<a-descriptions-item label="附件" :span="2">
<a-image-preview-group :preview="{ getContainer }">
<template v-for="(item, itemIndex) in fujianList" :key="itemIndex">
<a-image
@ -146,77 +123,6 @@
</template>
</a-image-preview-group>
</a-descriptions-item>
<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"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
v-if="item"
:style="`font-size: 30px; cursor: pointer;`"
icon="ion:document-attach-outline"
@click="hanlderPreViewFile(item)"
/>
{{ handlerDealFileName(item) }}
</div>
</template>
</a-image-preview-group>
</a-descriptions-item>
<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="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"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
v-if="item"
:style="`font-size: 30px; cursor: pointer;`"
icon="ion:document-attach-outline"
@click="hanlderPreViewFile(item)"
/>
{{ handlerDealFileName(item) }}
</div>
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item label="判定依据说明">{{
props.showInfoData.pandingyijushuoming
}}</a-descriptions-item>
<a-descriptions-item label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
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>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<a-descriptions-item label="填报人">{{
props.showInfoData.examiner_name
}}</a-descriptions-item>
@ -225,15 +131,7 @@
}}</a-descriptions-item>
</a-descriptions>
</a-tab-pane>
<a-tab-pane
key="3"
tab="整改情况"
v-if="
props.showInfoData.is_illegal == 1 &&
props.showInfoData.weifaleixing == 0 &&
!['建设用地', '推堆土'].includes(props.showInfoData.typename)
"
>
<a-tab-pane key="3" tab="无人机影像">
<a-descriptions
:column="2"
bordered
@ -243,163 +141,7 @@
'word-break': 'break-all',
}"
>
<a-descriptions-item label="整改措施">{{
getLabel('measure_name', props.showInfoData.measure_name)
}}</a-descriptions-item>
<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"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
v-if="item"
:style="`font-size: 30px; cursor: pointer;`"
icon="ion:document-attach-outline"
@click="hanlderPreViewFile(item)"
/>
{{ handlerDealFileName(item) }}
</div>
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.measure_name == 0" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer: getContainer,
onVisibleChange: handlerImageChange,
}"
>
<template
v-for="(imageItem, imageIndex) in chaichufugenghoupicList"
:key="imageIndex"
>
<a-image
v-if="imageItem"
width="100px"
height="100px"
@click="handlerPreviewImage(imageIndex, imageItem)"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</a-descriptions-item>
<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"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${item}`"
:preview="{ getContainer }"
></a-image>
<div v-else>
<Icon
v-if="item"
:style="`font-size: 30px; cursor: pointer;`"
icon="ion:document-attach-outline"
@click="hanlderPreViewFile(item)"
/>
{{ handlerDealFileName(item) }}
</div>
</template>
</a-image-preview-group>
</a-descriptions-item>
<a-descriptions-item v-if="props.showInfoData.measure_name == 1" label="照片">
<div class="image-div">
<a-image-preview-group
:preview="{
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)"
:src="`${VITE_GLOB_INFO_IMAGE_URL}/${imageItem}`"
:preview="{
getContainer,
}"
></a-image>
</template>
</a-image-preview-group>
</div>
</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(props.showInfoData.typename)"
tab="审核情况"
>
<a-divider>区县审核</a-divider>
<a-descriptions
:column="2"
bordered
:contentStyle="{
'text-align': 'center',
'min-width': '250px',
'word-break': 'break-all',
}"
>
<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
:column="2"
bordered
:contentStyle="{
'text-align': 'center',
'min-width': '250px',
'word-break': 'break-all',
}"
>
<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"
>
<a-descriptions-item label="无人机复飞照片" :span="2">
<div class="image-div">
<a-image-preview-group
:preview="{
@ -420,27 +162,6 @@
</a-image-preview-group>
</div>
</a-descriptions-item>
<!-- <a-descriptions-item label="现场核查照片" :span="2">
<div class="image-div">
<a-image-preview-group
:preview="{
getContainer:getContainer,
}"
>
<template v-for="(imageItem, imageIndex) in xchczhaopianList" :key="imageIndex">
<a-image
v-if="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>
</a-tab-pane>
</a-tabs>

View File

@ -282,8 +282,15 @@
}
chooseRows?.forEach((chooseRow, index) => {
let tiles: any = [];
let titeUrl: any = null;
if(new URL(VITE_GLOB_API_URL).hostname == 'localhost'){
titeUrl = 'http://localhost:8080/geoserver/my_workspace/wms?service=WMS&version=1.1.0&request=GetMap&layers=my_workspace:';
} else {
titeUrl = 'http://192.168.10.141:8080/geoserver/my_workspace/wms?service=WMS&version=1.1.0&request=GetMap&layers=my_workspace:';
}
let tile =
'http://192.168.10.141:8080/geoserver/my_workspace/wms?service=WMS&version=1.1.0&request=GetMap&layers=my_workspace:' +
titeUrl +
chooseRow.layerName +
'&styles=&bbox={bbox-epsg-3857}&width=256&height=256&srs=EPSG:3857' +
'&format=image/png&TRANSPARENT=TRUE';