From 9dc2df9cbfb540219cbaf2da40166b85d3fc6240 Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Tue, 26 Aug 2025 17:25:54 +0800
Subject: [PATCH] feat:添加编辑
---
src/views/resource/components/spotDetails.vue | 355 +++++++++++++++-----------
src/views/resource/components/DrawPolygon.vue | 416 ++++++++++++++++----------------
2 files changed, 412 insertions(+), 359 deletions(-)
diff --git a/src/views/resource/components/DrawPolygon.vue b/src/views/resource/components/DrawPolygon.vue
index 3880ce9..e4d40d0 100644
--- a/src/views/resource/components/DrawPolygon.vue
+++ b/src/views/resource/components/DrawPolygon.vue
@@ -1,312 +1,312 @@
<template>
- <div></div>
+ <div></div>
</template>
<script setup>
-import * as Cesium from 'cesium'
+import * as Cesium from 'cesium';
-import { ElMessage } from 'element-plus'
-import { sdfwUpdate } from '@/api/home/territory'
+import { ElMessage } from 'element-plus';
+import { sdfwUpdate } from '@/api/home/territory';
-let curPolygonPosition = []
-let savePolygonPosition = []
-let curPolygon = null
-let curPolygonEntity = null
-let curPolygonObj = null
+let curPolygonPosition = [];
+let savePolygonPosition = [];
+let curPolygon = null;
+let curPolygonEntity = null;
+let curPolygonObj = null;
-let menuPanel = null
-let saveMenuPanel = null
+let menuPanel = null;
+let saveMenuPanel = null;
-const selectionIds = inject('selectionIds')
-const clearSelect = inject('clearSelect')
-// const getTableList = inject('getTableList')
+const selectionIds = inject('selectionIds');
+const clearSelect = inject('clearSelect');
+const getTableList = inject('getTableList')
-const viewInstance = inject('viewInstance')
-const homeViewer = inject('homeViewer')
+const viewInstance = inject('viewInstance');
+const homeViewer = inject('homeViewer');
function preventDefault(event) {
- event.preventDefault()
+ event.preventDefault();
- return
+ return;
}
function init() {
- // let draw = new Draw(homeViewer.value);
- // draw.drawPlane();
- curPolygon = new Cesium.PolygonHierarchy()
- curPolygonEntity = new Cesium.Entity()
- homeViewer.value.scene.globe.depthTestAgainstTerrain = true
+ // let draw = new Draw(homeViewer.value);
+ // draw.drawPlane();
+ curPolygon = new Cesium.PolygonHierarchy();
+ curPolygonEntity = new Cesium.Entity();
+ homeViewer.value.scene.globe.depthTestAgainstTerrain = true;
- viewInstance.value.addLeftClickEvent(null, addPlanerPointEvent, 'drawCustomPolygon')
- viewInstance.value.addRightClickEvent(null, addPlanarMenuEvent, 'drawCustomPolygon')
- viewInstance.value.addMouseHandler(null, mouseMoveEvent, 'drawCustomPolygon')
+ viewInstance.value.addLeftClickEvent(null, addPlanerPointEvent, 'drawCustomPolygon');
+ viewInstance.value.addRightClickEvent(null, addPlanarMenuEvent, 'drawCustomPolygon');
+ viewInstance.value.addMouseHandler(null, mouseMoveEvent, 'drawCustomPolygon');
}
function mouseMoveEvent(movement, viewer) {
- const mouseInfo = viewInstance.value.getMouseInfoAll(movement.endPosition)
+ const mouseInfo = viewInstance.value.getMouseInfoAll(movement.endPosition);
- const { x, y } = mouseInfo.windowPosition
+ const { x, y } = mouseInfo.windowPosition;
- if (!menuPanel) {
- menuPanel = createMenuPanel()
- viewer.container.appendChild(menuPanel)
- }
+ if (!menuPanel) {
+ menuPanel = createMenuPanel();
+ viewer.container.appendChild(menuPanel);
+ }
- menuPanel.style.transform = `translate3d(${x}px, ${y}px, 0)`
+ menuPanel.style.transform = `translate3d(${x}px, ${y}px, 0)`;
- if (
- curPolygonObj &&
- mouseInfo.surfacePosition &&
- mouseInfo.surfacePosition != null &&
- curPolygonPosition.length >= 1
- ) {
- curPolygonPosition.pop()
- curPolygonPosition.push(mouseInfo.surfacePosition)
+ if (
+ curPolygonObj &&
+ mouseInfo.surfacePosition &&
+ mouseInfo.surfacePosition != null &&
+ curPolygonPosition.length >= 1
+ ) {
+ curPolygonPosition.pop();
+ curPolygonPosition.push(mouseInfo.surfacePosition);
- curPolygon.positions.pop()
- curPolygon.positions.push(mouseInfo.surfacePosition)
- }
+ curPolygon.positions.pop();
+ curPolygon.positions.push(mouseInfo.surfacePosition);
+ }
}
function addPlanerPointEvent(click, pick) {
- const { position } = click
+ const { position } = click;
- const mouseInfo = viewInstance.value.getMouseInfoAll(position)
+ const mouseInfo = viewInstance.value.getMouseInfoAll(position);
- if (mouseInfo.surfacePosition && mouseInfo.surfacePosition != null) drawCustomPolygon(mouseInfo)
+ if (mouseInfo.surfacePosition && mouseInfo.surfacePosition != null) drawCustomPolygon(mouseInfo);
}
function addPlanarMenuEvent(click, pick, viewer) {
- if (savePolygonPosition.length <= 2) {
- ElMessage.warning('当前绘制无法形成面,请继续绘制或取消绘制!!')
+ if (savePolygonPosition.length <= 2) {
+ ElMessage.warning('当前绘制无法形成面,请继续绘制或取消绘制!!');
- return
- }
- const { position } = click
+ return;
+ }
+ const { position } = click;
- const mouseInfo = viewInstance.value.getMouseInfoAll(position)
+ const mouseInfo = viewInstance.value.getMouseInfoAll(position);
- remove()
- removeMenuPanel()
+ remove();
+ removeMenuPanel();
- if (mouseInfo.surfacePosition && mouseInfo.surfacePosition != null) drawCustomPolygon(mouseInfo)
+ if (mouseInfo.surfacePosition && mouseInfo.surfacePosition != null) drawCustomPolygon(mouseInfo);
- const { x, y } = position
- saveMenuPanel = createSaveMenuPanel()
- saveMenuPanel.addEventListener('click', saveMenuClickEvent)
- saveMenuPanel.style.transform = `translate3d(${x}px, ${y}px, 0)`
- viewer.container.appendChild(saveMenuPanel)
+ const { x, y } = position;
+ saveMenuPanel = createSaveMenuPanel();
+ saveMenuPanel.addEventListener('click', saveMenuClickEvent);
+ saveMenuPanel.style.transform = `translate3d(${x}px, ${y}px, 0)`;
+ viewer.container.appendChild(saveMenuPanel);
}
function createSaveMenuPanel() {
- const menuPanel = document.createElement('div')
- menuPanel.className = 'planar-menu-panel'
+ const menuPanel = document.createElement('div');
+ menuPanel.className = 'planar-menu-panel';
- const arr = [
- { title: '提交绘制', class: 'save-draw' },
- { title: '重新绘制', class: 'anew-draw' },
- ]
+ const arr = [
+ { title: '提交绘制', class: 'save-draw' },
+ { title: '重新绘制', class: 'anew-draw' },
+ ];
- arr.forEach(item => {
- const title = document.createElement('div')
- title.innerText = item.title
- title.className = item.class
- menuPanel.appendChild(title)
- })
+ arr.forEach(item => {
+ const title = document.createElement('div');
+ title.innerText = item.title;
+ title.className = item.class;
+ menuPanel.appendChild(title);
+ });
- return menuPanel
+ return menuPanel;
}
function saveMenuClickEvent(e) {
- const className = e.target.className
- if (className === 'save-draw') {
- updatePolygon()
- }
- if (className == 'anew-draw') {
- cancel()
- }
+ const className = e.target.className;
+ if (className === 'save-draw') {
+ updatePolygon();
+ }
+ if (className == 'anew-draw') {
+ cancel();
+ }
- removeSaveMenuPanel()
+ removeSaveMenuPanel();
}
function removeSaveMenuPanel() {
- if (saveMenuPanel) {
- homeViewer.value.container?.removeChild(saveMenuPanel)
- saveMenuPanel.removeEventListener('click', saveMenuClickEvent)
- saveMenuPanel = null
- }
+ if (saveMenuPanel) {
+ homeViewer.value.container?.removeChild(saveMenuPanel);
+ saveMenuPanel.removeEventListener('click', saveMenuClickEvent);
+ saveMenuPanel = null;
+ }
}
function createMenuPanel() {
- const menuPanel = document.createElement('div')
- menuPanel.className = 'planar-menu-panel'
+ const menuPanel = document.createElement('div');
+ menuPanel.className = 'planar-menu-panel';
- const title = document.createElement('div')
- title.innerText = '左击选择点位,右击结束'
- title.className = 'proof-custom-add-polygon'
- menuPanel.appendChild(title)
+ const title = document.createElement('div');
+ title.innerText = '左击选择点位,右击结束';
+ title.className = 'proof-custom-add-polygon';
+ menuPanel.appendChild(title);
- return menuPanel
+ return menuPanel;
}
function removeMenuPanel() {
- if (menuPanel) {
- homeViewer.value.container?.removeChild(menuPanel)
- menuPanel = null
- }
+ if (menuPanel) {
+ homeViewer.value.container?.removeChild(menuPanel);
+ menuPanel = null;
+ }
}
function drawCustomPolygon(point) {
- if (curPolygonPosition.length == 0) {
- curPolygonPosition.push(point.surfacePosition.clone())
- curPolygon.positions.push(point.surfacePosition.clone())
- }
+ if (curPolygonPosition.length == 0) {
+ curPolygonPosition.push(point.surfacePosition.clone());
+ curPolygon.positions.push(point.surfacePosition.clone());
+ }
- savePolygonPosition.push(point.wgs84SurfacePosition)
- curPolygonPosition.push(point.surfacePosition.clone())
- curPolygon.positions.push(point.surfacePosition.clone())
+ savePolygonPosition.push(point.wgs84SurfacePosition);
+ curPolygonPosition.push(point.surfacePosition.clone());
+ curPolygon.positions.push(point.surfacePosition.clone());
- if (!curPolygonObj) {
- curPolygonEntity.polyline = {
- width: 2,
- material: Cesium.Color.WHITE,
- clampToGround: false,
- }
+ if (!curPolygonObj) {
+ curPolygonEntity.polyline = {
+ width: 2,
+ material: Cesium.Color.WHITE,
+ clampToGround: false,
+ };
- curPolygonEntity.polyline.positions = new Cesium.CallbackProperty(function () {
- return curPolygonPosition
- }, false)
+ curPolygonEntity.polyline.positions = new Cesium.CallbackProperty(function () {
+ return curPolygonPosition;
+ }, false);
- curPolygonEntity.polygon = {
- hierarchy: new Cesium.CallbackProperty(function () {
- return curPolygon
- }, false),
+ curPolygonEntity.polygon = {
+ hierarchy: new Cesium.CallbackProperty(function () {
+ return curPolygon;
+ }, false),
- material: Cesium.Color.fromCssColorString('#00ffff').withAlpha(0.4),
- clampToGround: false,
- }
- curPolygonEntity.name = 'customProofPolygon'
+ material: Cesium.Color.fromCssColorString('#00ffff').withAlpha(0.4),
+ clampToGround: false,
+ };
+ curPolygonEntity.name = 'customProofPolygon';
- curPolygonEntity._id = 'customProofPolygon'
- curPolygonObj = homeViewer.value.entities.add(curPolygonEntity)
- }
+ curPolygonEntity._id = 'customProofPolygon';
+ curPolygonObj = homeViewer.value.entities.add(curPolygonEntity);
+ }
}
function clearPlanar() {
- homeViewer.value.entities.remove(curPolygonObj)
- curPolygonObj = null
- curPolygon = null
- curPolygonEntity = null
- curPolygonPosition = []
- savePolygonPosition = []
+ homeViewer.value.entities.remove(curPolygonObj);
+ curPolygonObj = null;
+ curPolygon = null;
+ curPolygonEntity = null;
+ curPolygonPosition = [];
+ savePolygonPosition = [];
}
function remove() {
- viewInstance.value.removeLeftClickEvent('drawCustomPolygon')
- viewInstance.value.removeRightClickEvent('drawCustomPolygon')
- viewInstance.value.removeMouseHandler('drawCustomPolygon')
+ viewInstance.value.removeLeftClickEvent('drawCustomPolygon');
+ viewInstance.value.removeRightClickEvent('drawCustomPolygon');
+ viewInstance.value.removeMouseHandler('drawCustomPolygon');
}
-const emit = defineEmits(['upDateDrawState'])
+const emit = defineEmits(['upDateDrawState']);
function updatePolygon() {
- let polygon = savePolygonPosition.reduce((pre, cur) => {
- pre.push(`${cur.lng} ${cur.lat}`)
- return pre
- }, [])
- polygon.push(polygon[0])
- console.log('绘制',`POLYGON((${polygon.join(',')}))`);
-ElMessage.success('重新绘制图斑成功!!')
-if (selectionIds.value) {
- emit('upDateDrawState')
- selectionIds.value = null
- clearSelect()
- }
+ let polygon = savePolygonPosition.reduce((pre, cur) => {
+ pre.push(`${cur.lng} ${cur.lat}`);
+ return pre;
+ }, []);
+ polygon.push(polygon[0]);
+ console.log('绘制', `POLYGON((${polygon.join(',')}))`);
+ ElMessage.success('重新绘制图斑成功!!');
+ if (selectionIds.value) {
+ emit('upDateDrawState');
+ selectionIds.value = null;
+ clearSelect();
+ }
+getTableList()
+ // 接口
+ // sdfwUpdate({
+ // ids: selectionIds.value,
+ // sdfw: `POLYGON((${polygon.join(',')}))`,
+ // })
+ // .then(res => {
+ // if (selectionIds.value) {
+ // emit('upDateDrawState')
+ // selectionIds.value = null
+ // // clearSelect()
+ // }
-// 接口
- // sdfwUpdate({
- // ids: selectionIds.value,
- // sdfw: `POLYGON((${polygon.join(',')}))`,
- // })
- // .then(res => {
- // if (selectionIds.value) {
- // emit('upDateDrawState')
- // selectionIds.value = null
- // // clearSelect()
- // }
+ // if (res.data.code !== 0) return ElMessage.error(res.message)
+ // ElMessage.success('重新绘制图斑成功!!')
- // if (res.data.code !== 0) return ElMessage.error(res.message)
- // ElMessage.success('重新绘制图斑成功!!')
-
- // // getTableList()
- // })
- // .catch(e => {
- // cancel()
- // })
+ // // getTableList()
+ // })
+ // .catch(e => {
+ // cancel()
+ // })
}
function cancel() {
- remove()
- removeMenuPanel()
- clearPlanar()
+ remove();
+ removeMenuPanel();
+ clearPlanar();
- init()
+ init();
}
onMounted(() => {
- document.addEventListener('contextmenu', preventDefault)
+ document.addEventListener('contextmenu', preventDefault);
- init()
-})
+ init();
+});
onBeforeUnmount(() => {
- document.removeEventListener('contextmenu', preventDefault)
+ document.removeEventListener('contextmenu', preventDefault);
- remove()
- removeMenuPanel()
- removeSaveMenuPanel()
- clearPlanar()
+ remove();
+ removeMenuPanel();
+ removeSaveMenuPanel();
+ clearPlanar();
- homeViewer.value.scene.globe.depthTestAgainstTerrain = false
-})
+ homeViewer.value.scene.globe.depthTestAgainstTerrain = false;
+});
</script>
<style lang="scss" scoped>
p {
- text-indent: 2em;
- color: #ffffff;
- font-size: 18px;
+ text-indent: 2em;
+ color: #ffffff;
+ font-size: 18px;
}
.export-btns {
- margin-top: 44px;
- display: flex;
- align-items: center;
- justify-content: space-around;
+ margin-top: 44px;
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
- .el-button {
- background-color: transparent !important;
- }
+ .el-button {
+ background-color: transparent !important;
+ }
}
.proof-custom-add-polygon {
- position: absolute;
- left: 20px;
- background: rgba(0, 0, 0, .6);
- white-space: nowrap;
- border-radius: 4px;
+ position: absolute;
+ left: 20px;
+ background: rgba(0, 0, 0, 0.6);
+ white-space: nowrap;
+ border-radius: 4px;
- &::after {
- content: '';
- position: absolute;
- left: -3px;
- top: calc(50% - 2px);
- width: 0;
- height: 0;
- border-top: 4px solid rgba(0, 0, 0, .6);
- border-left: 4px solid rgba(0, 0, 0, .6);
- border-right: 4px solid transparent;
- border-bottom: 4px solid transparent;
- transform: rotate(-45deg);
- }
+ &::after {
+ content: '';
+ position: absolute;
+ left: -3px;
+ top: calc(50% - 2px);
+ width: 0;
+ height: 0;
+ border-top: 4px solid rgba(0, 0, 0, 0.6);
+ border-left: 4px solid rgba(0, 0, 0, 0.6);
+ border-right: 4px solid transparent;
+ border-bottom: 4px solid transparent;
+ transform: rotate(-45deg);
+ }
}
</style>
diff --git a/src/views/resource/components/spotDetails.vue b/src/views/resource/components/spotDetails.vue
index 7d9e9d2..0aa3f58 100644
--- a/src/views/resource/components/spotDetails.vue
+++ b/src/views/resource/components/spotDetails.vue
@@ -1,5 +1,11 @@
<template>
- <el-dialog :title="props.title" append-to-body v-model="uploadPatchDialog" width="80%" align-center>
+ <el-dialog
+ :title="props.title"
+ append-to-body
+ v-model="uploadPatchDialog"
+ width="80%"
+ align-center
+ >
<div class="container">
<!-- 信息展示区 -->
<div class="infoBox">
@@ -7,7 +13,32 @@
<div v-for="(item, index) in infoList" :key="index" class="itemCon">
<div class="itemBox">
<div class="itemTitle">{{ item.name }}:</div>
- <div class="itemValue">{{item.value}}</div>
+ <div class="itemContent">
+ <template v-if="props.title === '图斑编辑' && item.editable">
+ <template v-if="item.name === '图斑类型'">
+ <el-select
+ v-model="item.value"
+ size="small"
+ placeholder="请选择图斑类型"
+ style="width: 100%"
+ >
+ <el-option
+ v-for="opt in spotTypeOptions"
+ :key="opt.value"
+ :label="opt.label"
+ :value="opt.value"
+ />
+ </el-select>
+ </template>
+ <template v-else-if="item.name === '文件名称'">
+ <el-input v-model="item.value" size="small" />
+ </template>
+
+ </template>
+ <template v-else>
+ <div class="itemValue">{{ item.value }}</div>
+ </template>
+ </div>
</div>
</div>
</div>
@@ -19,7 +50,14 @@
<div class="table-overlay">
<div class="table-content">
<div class="tabname">图斑列表</div>
- <el-table ref="polygonTableEle" highlight-current-row :data="tableData" border style="width: 100%" @row-click="handleLocationPolygon">
+ <el-table
+ ref="polygonTableEle"
+ highlight-current-row
+ :data="tableData"
+ border
+ style="width: 100%"
+ @row-click="handleLocationPolygon"
+ >
<el-table-column type="index" label="序号" width="80">
<template #default="{ $index }">
{{ ($index + 1).toString().padStart(2, '0') }}
@@ -27,10 +65,12 @@
</el-table-column>
<el-table-column prop="dkbh" label="图斑名称" />
<el-table-column prop="investigate" label="图斑状态" />
- <el-table-column label="操作" width="100" align="center">
+ <el-table-column label="操作" width="100" align="center" v-if="props.title === '图斑编辑'">
<template #default="scope">
- <el-button type="text">删除</el-button>
- <el-button type="text" @click.stop="handleSelectionChange(scope.row)">编辑</el-button>
+ <el-button type="text">删除</el-button>
+ <el-button type="text" @click.stop="handleSelectionChange(scope.row)"
+ >编辑</el-button
+ >
</template>
</el-table-column>
</el-table>
@@ -45,8 +85,12 @@
</div>
</div>
</div>
- <!--绘制按钮-->
- <FunButton ref="funButtonEle" v-model:isBoxSelect="isBoxSelect" v-model:isDrawPolygon="isDrawPolygon" ></FunButton>
+ <!--绘制按钮-->
+ <FunButton
+ ref="funButtonEle"
+ v-model:isBoxSelect="isBoxSelect"
+ v-model:isDrawPolygon="isDrawPolygon"
+ ></FunButton>
<!-- 地图 -->
<div id="spotMap" class="ztzf-cesium" v-show="uploadPatchDialog"></div>
</div>
@@ -56,48 +100,53 @@
<script setup>
import {
- getCenterPoint,
- getLnglatDist,
- getLnglatAltitude,
- getPolygonMaxHeight,
- cartesian3Convert,
- getWaylineShowHeight,
-} from '@/utils/cesium/mapUtil.js'
+ getCenterPoint,
+ getLnglatDist,
+ getLnglatAltitude,
+ getPolygonMaxHeight,
+ cartesian3Convert,
+ getWaylineShowHeight,
+} from '@/utils/cesium/mapUtil.js';
import { getPatchesSpotList } from '@/api/patchManagement/index';
import * as Cesium from 'cesium';
import { PublicCesium } from '@/utils/cesium/publicCesium';
import { ref, watch, onBeforeUnmount } from 'vue';
import FunButton from '@/views/resource/components/FunButton.vue';
const uploadPatchDialog = defineModel('show');
-const props=defineProps(['title'])
-const polygonTableEle = ref(null)
+const props = defineProps(['title']);
+const polygonTableEle = ref(null);
let publicCesiumInstance = null;
let viewer = null;
const viewInstance = shallowRef(null);
const homeViewer = shallowRef(null);
let tbJwdList = [];
-let total = ref(0)
+let total = ref(0);
// 当前选中的图斑面数据
-let nowSelectObj = ref({})
+let nowSelectObj = ref({});
// 记录上一次点击高亮
-let lastHighlightRow = null
+let lastHighlightRow = null;
// 功能按钮区域相关:编辑图斑等
-const funButtonEle = ref(null)
-const isBoxSelect = ref(false)
-const isDrawPolygon = ref(false)
+const funButtonEle = ref(null);
+const isBoxSelect = ref(false);
+const isDrawPolygon = ref(false);
// 选中了哪些图斑
-const selectionIds = ref(null)
+const selectionIds = ref(null);
// 当前在编辑状态的异常图斑
-let curCustomPolygon = null
+let curCustomPolygon = null;
+const spotTypeOptions = ref([
+ { value: '1', label: '综合类' },
+ { value: '2', label: '矿山类' },
+ { value: '3', label: '农田类' },
+]);
const infoList = ref([
- { name: '文件名称', value: '55', field: 'job_info_num' },
- { name: '图斑类型', value: 'ee', field: 'name' },
- { name: '图斑数量', value: '', field: 'industry_type_str' },
- { name: '异常图斑数量', value: '', field: 'event_number' },
- { name: '行政区划', value: '', field: 'device_names' },
- { name: '数据来源', value: '', field: 'dept_name' },
- { name: '创建时间', value: '', field: 'cycle_time_value' },
- { name: '创建人', value: '', field: 'ai_type_str' },
+ { name: '文件名称', value: '55', field: 'job_info_num', editable: true },
+ { name: '图斑类型', value: 'ee', field: 'name', editable: true },
+ { name: '图斑数量', value: '', field: 'industry_type_str', editable: false },
+ { name: '异常图斑数量', value: '', field: 'event_number', editable: false },
+ { name: '行政区划', value: '', field: 'device_names', editable: false },
+ { name: '数据来源', value: '', field: 'dept_name', editable: false },
+ { name: '创建时间', value: '', field: 'cycle_time_value', editable: false },
+ { name: '创建人', value: '', field: 'ai_type_str', editable: false },
]);
const params = ref({
current: 1,
@@ -129,7 +178,7 @@
...item,
dkfw: item.sdfw && item.is_exception == 1 ? item.sdfw : item.dkfw,
}));
- total.value = res.data.data.pagination.total
+ total.value = res.data.data.pagination.total;
// 先清空地图现有图斑
tbJwdList = [];
viewer.entities.removeAll(); // 清除所有实体
@@ -188,92 +237,95 @@
const positions = tbJwdList.flatMap(item => Cesium.Cartesian3.fromDegreesArray(item.grouped));
homeViewer.value.camera.flyToBoundingSphere(new Cesium.BoundingSphere.fromPoints(positions));
}
- viewInstance.value.removeLeftClickEvent('spotHighlighting')
- viewInstance.value.addLeftClickEvent(null, spotHighlighting, 'spotHighlighting')
+ viewInstance.value.removeLeftClickEvent('spotHighlighting');
+ viewInstance.value.addLeftClickEvent(null, spotHighlighting, 'spotHighlighting');
});
};
// 高亮当前选中图斑,并定位
const handleLocationPolygon = (data, Deselect) => {
- heightlightSpot(data)
-}
+ heightlightSpot(data);
+};
// 鼠标触发点击图斑高亮 pick:可以获取当前图斑数据
const spotHighlighting = (click, pick, viewer) => {
- if (!pick || !(pick.id?.customType == 'pattern_spot_polygon')) return
- // 表格也对应选中数据 TODO
- const data = pick.id?.customInfo
- // 高亮图斑
- heightlightSpot(data)
-}
+ if (!pick || !(pick.id?.customType == 'pattern_spot_polygon')) return;
+ // 表格也对应选中数据 TODO
+ const data = pick.id?.customInfo;
+ // 高亮图斑
+ heightlightSpot(data);
+};
// 选中列表或者点击地图内的图斑 高亮图斑
const heightlightSpot = data => {
- nowSelectObj.value = data
- if (!data) {
- clearSelect()
- return
- }
-
- // 保存当前选中图斑
- // 取出当中经纬度
- const numbersWithCommas = data.dkfw.match(/\d+(\.\d+)?/g)
- // 转换为二维数组
- const groupedArr = numbersWithCommas.reduce((acc, val, index, src) => {
- if (index % 2 === 0) acc.push(src.slice(index, index + 2))
- return acc
- }, [])
- // 求出中心点
- const polygonCenter = getCenterPoint(groupedArr)
- if (viewInstance.value.getEntityById('polygon_center')) {
- viewInstance.value.removeById('polygon_center')
- }
- // 高亮当前图斑,将上一个高亮图斑恢复
- if (lastHighlightRow) {
- let lastentity = homeViewer.value.entities?.getById('polygon_dk' + lastHighlightRow.id)
+ nowSelectObj.value = data;
+ if (!data) {
+ clearSelect();
+ return;
+ }
- if (lastentity && lastentity.polygon) {
- lastentity.polygon.material = Cesium.Color.YELLOW.withAlpha(0.5)
- lastentity.polygon.outlineColor = Cesium.Color.YELLOW
- }
- }
- let Nowentity = homeViewer.value.entities?.getById('polygon_dk' + data.id)
- if (Nowentity && Nowentity.polygon) {
- Nowentity.polygon.material = Cesium.Color.RED.withAlpha(0.3)
- Nowentity.polygon.outlineColor = Cesium.Color.RED
-
- }
+ // 保存当前选中图斑
+ // 取出当中经纬度
+ const numbersWithCommas = data.dkfw.match(/\d+(\.\d+)?/g);
+ // 转换为二维数组
+ const groupedArr = numbersWithCommas.reduce((acc, val, index, src) => {
+ if (index % 2 === 0) acc.push(src.slice(index, index + 2));
+ return acc;
+ }, []);
+ // 求出中心点
+ const polygonCenter = getCenterPoint(groupedArr);
+ if (viewInstance.value.getEntityById('polygon_center')) {
+ viewInstance.value.removeById('polygon_center');
+ }
+ // 高亮当前图斑,将上一个高亮图斑恢复
+ if (lastHighlightRow) {
+ let lastentity = homeViewer.value.entities?.getById('polygon_dk' + lastHighlightRow.id);
- homeViewer.value.scene.camera.setView({
- destination: Cesium.Cartesian3.fromDegrees(Number(polygonCenter.lng), Number(polygonCenter.lat), 2500.0),
- })
- lastHighlightRow = data
-}
-// 清空选中的数据
-const clearSelect =()=>{
-lastHighlightRow = null
-selectionIds.value = null
-}
-// 编辑
-const handleSelectionChange =(row)=>{
- console.log('编辑',row);
- let curRowIsSelect = row
- selectionIds.value = row.id
- curRowIsSelect && handleLocationPolygon(row)
- if (row.is_exception == 2 && curRowIsSelect) {
- isDrawPolygon.value = true
- funButtonEle.value.upDateDrawState(true)
- handleLocationPolygon(row)
- // clearSelect()
- // curCustomPolygon = row
- // ElMessage.warning('该图斑数据异常,请在地图区域重新绘制!!')
- }else{
- isDrawPolygon.value = false
+ if (lastentity && lastentity.polygon) {
+ lastentity.polygon.material = Cesium.Color.YELLOW.withAlpha(0.5);
+ lastentity.polygon.outlineColor = Cesium.Color.YELLOW;
}
-
-}
-provide('selectionIds', selectionIds)
-provide('homeViewer', homeViewer)
-provide('viewInstance', viewInstance)
-provide('clearSelect', clearSelect)
+ }
+ let Nowentity = homeViewer.value.entities?.getById('polygon_dk' + data.id);
+ if (Nowentity && Nowentity.polygon) {
+ Nowentity.polygon.material = Cesium.Color.RED.withAlpha(0.3);
+ Nowentity.polygon.outlineColor = Cesium.Color.RED;
+ }
+
+ homeViewer.value.scene.camera.setView({
+ destination: Cesium.Cartesian3.fromDegrees(
+ Number(polygonCenter.lng),
+ Number(polygonCenter.lat),
+ 2500.0
+ ),
+ });
+ lastHighlightRow = data;
+};
+// 清空选中的数据
+const clearSelect = () => {
+ lastHighlightRow = null;
+ selectionIds.value = null;
+};
+// 编辑
+const handleSelectionChange = row => {
+ console.log('编辑', row);
+ let curRowIsSelect = row;
+ selectionIds.value = row.id;
+ curRowIsSelect && handleLocationPolygon(row);
+ if (row.is_exception == 2 && curRowIsSelect) {
+ isDrawPolygon.value = true;
+ funButtonEle.value.upDateDrawState(true);
+ handleLocationPolygon(row);
+ // clearSelect()
+ // curCustomPolygon = row
+ // ElMessage.warning('该图斑数据异常,请在地图区域重新绘制!!')
+ } else {
+ isDrawPolygon.value = false;
+ }
+};
+provide('selectionIds', selectionIds);
+provide('homeViewer', homeViewer);
+provide('viewInstance', viewInstance);
+provide('clearSelect', clearSelect);
+provide('getTableList', getTableList)
// 销毁
const destroyMap = () => {
if (viewer) {
@@ -319,51 +371,52 @@
padding: 10px;
font-size: 14px;
- .itemBox {
- display: flex;
- align-items: center;
- background: #fff;
- height: 33px;
- border-top: 2px solid #efefef;
+ .itemCon:nth-last-child(-n + 2) {
+ border-bottom: 2px solid #efefef;
}
}
- .itemCon:nth-last-child(-n + 2) {
- border-bottom: 2px solid #efefef;
- }
-
- .itemBox:nth-last-child(-n + 2) .itemTitle {
- border-bottom: 1px solid #efefef;
- }
-
- .itemTitle {
- color: #0b1d38;
- width: 26%;
- text-align: right;
- background: #f3f6ff;
- height: 33px;
- line-height: 33px;
- padding-right: 10px;
- border-top: 1px solid #efefef;
- }
-
- .itemValue {
- font-size: 14px;
- color: #747e91;
- text-align: center;
- width: 74%;
- }
-
- .flightEvents {
+ .itemBox {
display: flex;
- flex-wrap: wrap;
- gap: 10px 10px;
- width: 74%;
- justify-content: center;
+ align-items: center;
+ background: #fff;
+ height: 33px;
+ border-top: 2px solid #efefef;
- img {
- width: 30px;
- height: 30px;
+ .itemTitle {
+ flex: 0 0 150px;
+ color: #0b1d38;
+ text-align: center;
+ background: #f3f6ff;
+ height: 33px;
+ line-height: 33px;
+ padding-right: 10px;
+ border-top: 1px solid #efefef;
+ }
+
+ .itemContent {
+ flex: 1;
+ padding-left: 10px;
+
+ .el-input {
+ width: 100%;
+
+ :deep(.el-input__inner) {
+ height: 28px;
+ line-height: 28px;
+ background: transparent;
+ border: none;
+ padding: 0 10px;
+ color: #747e91;
+ }
+ }
+
+ .itemValue {
+ font-size: 14px;
+ color: #747e91;
+ text-align: left;
+ line-height: 33px;
+ }
}
}
}
@@ -380,7 +433,7 @@
width: 23%;
height: 95%;
z-index: 999;
- // background: rgba(31, 62, 122, 0.85);
+ // background: rgba(31, 62, 122, 0.85);
padding: 10px;
display: flex;
flex-direction: column;
@@ -391,7 +444,8 @@
flex-direction: column;
height: 95%;
.tabname {
- color: #102441;}
+ color: #102441;
+ }
}
.pagination-container {
@@ -412,5 +466,4 @@
height: 100%;
width: 100%;
}
-
</style>
--
Gitblit v1.9.3