CaiYuanYiTiHua/src/views/demo/shengtaixiufu/curbspotcity/index.vue

453 lines
13 KiB
Vue

<template>
<div class="curb-spot-city">
<div class="show-list">
<a-spin :spinning="spinning">
<MapList
:infoScreenData="infoScreenData"
:cityType="cityType"
:pageNo="pageNo"
:pageSize="pageSize"
:total="total"
:infoDataList="infoDataList"
:municipalAreaOptions="municipalAreaOptions"
:countiesAreaOptions="countiesAreaOptions"
:streetsAreaOptions="streetsAreaOptions"
:communitiesAreaOptions="communitiesAreaOptions"
@infoDataListSort="infoDataListSort"
@changeInfoPage="changeInfoPage"
@getInfoList="getInfoList"
@mapListScreenChange="mapListScreenChange"
@closeShowInfo="changeShowInfo"
@changeTask="changeTask"
@collectChange="collectChange"
@resetScreenData="resetScreenData"
@changeInfoDataList="changeInfoDataList"
/>
</a-spin>
</div>
<MapboxMap
:mapConfig="mapConfig"
@handlerDrawComplete="handlerDrawComplete"
@mapOnLoad="onMapboxLoad"
ref="MapboxComponent"
/>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, onUnmounted, watch, defineAsyncComponent } from 'vue';
import mapboxgl, { Map } from 'mapbox-gl';
import { MapboxConfig, MapboxDefaultStyle } from '@/components/MapboxMaps/src/config';
import MapList from './MapList/index.vue';
import {
getLoadDroneCaseInfoCount,
getLoadDroneCaseInfoDetail,
getLoadParents,
} from '@/api/shengtaixiufu/index';
import { getChildrenTree } from '@/api/demo/system';
import { getGeom, getConfig } from '@/api/sys/layerManagement';
import dayjs from 'dayjs';
const MapboxMap = defineAsyncComponent(() => import('@/components/MapboxMaps/MapComponent.vue'));
const MapboxComponent = ref();
const mapConfig = ref({ isShowMap: false });
function onMapboxLoad(): void {
getConfig({ code: 'mapsetting' }).then((res) => {
mapConfig.value = JSON.parse(res.codeValue);
});
}
const showInfo = ref(true);
const year = ref<number>();
const batch = ref();
const infoDataList = ref<any>([]);
const infoScreenData = ref({
landType: '',
year: '',
batch: '',
patchSource: '',
mapNo: '',
mapType: '',
// countyId: '',
streetId: null,
// downtownId: '',
// communityId: '',
startTime: '',
endTime: '',
isOverdue: '',
illegalType: '',
measure: '',
mapStatus: '',
markType: '',
sort: '',
order: '',
type: '', // 收藏
mapAreaFirst: '',
mapAreaLast: '',
arableAreaFirst: '',
arableAreaLast: '',
});
const pageNo = ref(1);
const pageSize = ref(10);
const total = ref(0);
const municipalAreaOptions = ref<any[]>([]);
const countiesAreaOptions = ref([{ label: '全部', value: '' }]);
const streetsAreaOptions = ref([{ label: '全部', value: '' }]);
const communitiesAreaOptions = ref([{ label: '全部', value: '' }]);
const cityType = ref();
const spinning = ref(false);
const auditProgressScreenChange = (value, type) => {
switch (type) {
case 'year':
year.value = value;
break;
case 'batch':
batch.value = value;
break;
}
let params = {
year: year.value,
};
spinning.value = true;
};
const mapListScreenChange = (value, type) => {
switch (type) {
case 'landType':
infoScreenData.value.landType = value;
pageNo.value = 1;
getInfoList();
break;
case 'year':
infoScreenData.value.year = value;
break;
case 'batch':
infoScreenData.value.batch = value;
break;
case 'patchSource':
infoScreenData.value.patchSource = value;
break;
case 'mapNo':
infoScreenData.value.mapNo = value;
break;
// case 'countyId':
// infoScreenData.value.countyId = value
// break
case 'streetId':
infoScreenData.value.streetId = value;
break;
case 'time':
if (value) {
infoScreenData.value.startTime = dayjs(value[0]).format('YYYY-MM-DD');
infoScreenData.value.endTime = dayjs(value[1]).format('YYYY-MM-DD');
} else {
infoScreenData.value.startTime = '';
infoScreenData.value.endTime = '';
}
break;
// case 'communityId':
// infoScreenData.value.communityId = value
// break
case 'mapType':
infoScreenData.value.mapType = value;
if (value !== 1) {
infoScreenData.value.illegalType = '';
infoScreenData.value.measure = '';
}
break;
case 'illegalType':
infoScreenData.value.illegalType = value;
if (value !== 0) {
infoScreenData.value.measure = '';
}
break;
case 'measure':
infoScreenData.value.measure = value;
break;
case 'mapStatus':
infoScreenData.value.mapStatus = value;
break;
case 'isOverdue':
infoScreenData.value.isOverdue = value;
break;
case 'markType':
infoScreenData.value.markType = value;
break;
case 'mapAreaFirst':
infoScreenData.value.mapAreaFirst = value;
break;
case 'mapAreaLast':
infoScreenData.value.mapAreaLast = value;
break;
case 'arableAreaFirst':
infoScreenData.value.arableAreaFirst = value;
break;
case 'arableAreaLast':
infoScreenData.value.arableAreaLast = value;
break;
}
};
const changeShowInfo = async (value, item) => {
if (item) {
cityType.value = item;
let childList = await getChildrenTree({ parentId: item.areaid });
let params = {
childId: item.areaid,
};
let parents = await getLoadParents(params);
parents.forEach((parent) => {
switch (parent.level) {
case 0:
municipalAreaOptions.value.push({
label: parent.name,
value: parent.id,
});
infoScreenData.value.downtownId = parent.id;
childList.forEach((cityItem) => {
countiesAreaOptions.value.push({
label: cityItem.name,
value: cityItem.id,
});
});
break;
case 1:
countiesAreaOptions.value.push({
label: parent.name,
value: parent.id,
});
infoScreenData.value.countyId = parent.id;
childList.forEach((cityItem) => {
streetsAreaOptions.value.push({
label: cityItem.name,
value: cityItem.id,
});
});
break;
case 2:
streetsAreaOptions.value.push({
label: parent.name,
value: parent.id,
});
infoScreenData.value.streetId = parent.id;
childList.forEach((cityItem) => {
communitiesAreaOptions.value.push({
label: cityItem.name,
value: cityItem.id,
});
});
break;
case 3:
communitiesAreaOptions.value.push({
label: parent.name,
value: parent.id,
});
infoScreenData.value.communityId = parent.id;
break;
}
});
await getInfoList();
showInfo.value = value;
} else {
cityType.value = null;
showInfo.value = value;
}
console.log(item);
};
const getParams = () => {
let result = {};
let params = {
landType: infoScreenData.value.landType, //0 农用地 1建设用地
isOutTime: infoScreenData.value.isOverdue, //是否超期
year: infoScreenData.value.year, //年
tubanlaiyuan: infoScreenData.value.patchSource, //线索来源
picihao: infoScreenData.value.batch, //批次号
// countyid: infoScreenData.value.countyId,
streetid: infoScreenData.value.streetId,
// communityId: infoScreenData.value.communityId,
caseNo: infoScreenData.value.mapNo, //图版编号
startTime: infoScreenData.value.startTime, // 下发开始时间
endTime: infoScreenData.value.endTime, // 下发结束时间
// is_illegal: infoScreenData.value.mapType,
// weifaleixing: infoScreenData.value.illegalType,
// measure_name: infoScreenData.value.measure,
nowStatus: infoScreenData.value.mapStatus, // 当前状态
isBuildName: infoScreenData.value.markType, // 标注
tubanArea1: infoScreenData.value.mapAreaFirst, // 线索面积1
tubanArea2: infoScreenData.value.mapAreaLast, // 线索面积2
gengdiArea1: infoScreenData.value.arableAreaFirst, //耕地面积1
gengdiArea2: infoScreenData.value.arableAreaLast, //耕地面积2
// areaid: cityType.value.areaid,
// level: cityType.value.level,
page: pageNo.value,
limit: pageSize.value,
sortType: infoScreenData.value.sort,
order: infoScreenData.value.order,
type: infoScreenData.value.type,
};
Object.keys(params).forEach((key) => {
if (params[key] !== '' && params[key] !== null) {
if (key === 'nowStatus') {
result[key] = params[key].join(',');
} else if (key === 'isOutTime') {
if (params[key].length == 1) {
result[key] = params[key][0];
}
} else {
result[key] = params[key];
}
}
});
return result;
};
watch(
() => year.value,
(newVal) => {
infoScreenData.value.year = newVal;
},
);
watch(
() => batch.value,
(newVal) => {
infoScreenData.value.batch = newVal;
},
);
let map: Map;
onMounted(() => {
// mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
// map = initMap();
});
onUnmounted(() => {
map && map.remove();
});
const initMap = () => {
return new mapboxgl.Map({
container: 'showMap',
language: 'zh-cmn',
projection: 'equirectangular', // wgs84参考系
style: MapboxDefaultStyle,
maxZoom: 22,
minZoom: 6,
zoom: 10,
// ...props.mapOptions,
center: [117.984425, 35.270654],
});
};
const getInfoList = () => {
spinning.value = true;
return getLoadDroneCaseInfoDetail(getParams())
.then((res) => {
total.value = res.total;
infoDataList.value = res.items;
})
.finally(() => {
spinning.value = false;
});
};
const changeInfoPage = async (page, limit) => {
pageNo.value = page;
pageSize.value = limit;
await getInfoList();
};
const changeInfoDataList = (list, totalNumber, page) => {
infoDataList.value = list;
total.value = totalNumber;
pageNo.value = page;
};
const collectChange = (value) => {
pageNo.value = 1;
infoScreenData.value.type = value;
getInfoList();
};
function changeTask(val) {
let getGeomPrams = {
TableName: 'drone_shp_data ',
FieldName: 'gid',
FieldValue: val?.split(','),
page: 1,
limit: 999,
key: null,
};
if (val) {
getGeom(getGeomPrams).then((res) => {
let geoms = [];
if (res) {
if (res.items?.length > 0) {
res.items.forEach((item, index) => {
let geom = {
key: item.gid,
mapgeom: item.geometry,
};
geoms.push(geom);
});
}
// MapboxComponent.value.handlerDraw(status,mapgemoList.value, false);
MapboxComponent.value.handlerDraw('Details', geoms, false);
} else {
createMessage.error('当前数据没有线索!');
}
});
} else {
createMessage.error('当前数据没有线索!');
}
}
const infoDataListSort = (type, order) => {
switch (order) {
case 0:
infoScreenData.value.sort = '';
infoScreenData.value.order = '';
break;
case 1:
infoScreenData.value.sort = type;
infoScreenData.value.order = 'asc';
break;
case 2:
infoScreenData.value.sort = type;
infoScreenData.value.order = 'desc';
break;
}
spinning.value = true;
getLoadDroneCaseInfoDetail(getParams())
.then((res) => {
total.value = res.total;
infoDataList.value = res.items;
// pageNo.value = 1
})
.finally(() => {
spinning.value = false;
});
};
const resetScreenData = () => {
infoScreenData.value.mapNo = '';
infoScreenData.value.streetId = null;
infoScreenData.value.mapType = '';
infoScreenData.value.illegalType = '';
infoScreenData.value.measure = '';
infoScreenData.value.mapStatus = '';
infoScreenData.value.markType = '';
getInfoList();
};
onMounted(() => {
getInfoList();
});
</script>
<style lang="scss" scoped>
.curb-spot-city {
height: 100%;
display: flex;
.show-list {
width: 590px;
background: #efefef;
:deep(.ant-spin-nested-loading) {
height: 100%;
}
:deep(.ant-spin-container) {
height: 100%;
}
}
.map {
width: 65%;
background: burlywood;
}
}
</style>