From 8b598e50a0ed9c3c5b35a612e311dc423050aabd Mon Sep 17 00:00:00 2001
From: 张含笑 <zhx18749296735@163.com>
Date: Thu, 04 Sep 2025 17:26:01 +0800
Subject: [PATCH] feat:11

---
 src/views/resource/components/spotDetails.vue |  122 +++++++++++++++-------------------------
 1 files changed, 45 insertions(+), 77 deletions(-)

diff --git a/src/views/resource/components/spotDetails.vue b/src/views/resource/components/spotDetails.vue
index aec18a0..065a045 100644
--- a/src/views/resource/components/spotDetails.vue
+++ b/src/views/resource/components/spotDetails.vue
@@ -3,7 +3,7 @@
     class="spotDialog"
     :title="props.title"
     v-model="uploadPatchDialog"
-    width="75%"
+    width="78%"
     align-center
   >
     <div class="container">
@@ -160,7 +160,7 @@
 const selectionList = ref([]);
 // 当前在编辑状态的异常图斑
 let curCustomPolygon = null;
-
+let lastEntity = null
 // 表格隔行变色
 const tableRowClassName = ({ rowIndex }) => {
   return rowIndex % 2 === 1 ? 'oddNumberRow' : 'even-row';
@@ -278,7 +278,7 @@
 };
 // 初始化所有图斑
 const entitiesAddSpot = () => {
- viewer?.entities.removeAll();  //清除旧实体
+ viewer?.entities.removeAll();  
   tableData.value.forEach(item => {
     // 取出当中经纬度
     const numbersWithCommas = item.dkfw.match(/\d+(\.\d+)?/g);
@@ -290,11 +290,12 @@
       ...item,
       grouped: grouped,
     });
+    viewInstance.value.removeById('polygon_dk' + item.id)
     // 根据 is_exception 设置颜色
     const color =
       item.is_exception == 2 ? Cesium.Color.RED.withAlpha(0.5) : Cesium.Color.YELLOW.withAlpha(0.5);
     const outlineColor = item.is_exception == 2 ? Cesium.Color.RED : Cesium.Color.YELLOW;
-    viewInstance.value?.removeById('polygon_dk' + item.id);
+  
     homeViewer.value?.entities?.add({
       id: 'polygon_dk' + item.id,
       customType: 'pattern_spot_polygon',
@@ -337,88 +338,56 @@
 };
 
 // 高亮当前选中图斑,并定位
-const handleLocationPolygon = (data, Deselect) => {
-  heightlightSpot(data);
+const handleLocationPolygon = (data) => {
+  updateMapSpotInfo(data);
 };
+
 // 鼠标触发点击图斑高亮 pick:可以获取当前图斑数据
-const spotHighlighting = (click, pick, viewer) => {
-  if (!pick || !(pick.id?.customType == 'pattern_spot_polygon')) return;
-  let clickTableID = tableData.value.findIndex(i => i.id == pick.id?.customInfo.id);
-  // 计算表格滚动至中间位置
+function spotHighlighting(click, pick, viewer) {
+	let entities = viewer?.scene
+		.drillPick(click.position)
+		.filter(item => item.id)
+		.map(i => i.id)
+		.filter(i => i._customType === 'pattern_spot_polygon')
+	const nowEntity = entities?.[0]
+  const nowData = nowEntity.customInfo;
+  const clickTableID = tableData.value.findIndex(i => i.id === nowData.id); 
   const rows = polygonTableEle?.value.$el.querySelectorAll('.el-table__body tr');
-  let targetRow = rows[clickTableID];
+  const targetRow = rows[clickTableID];
+
   nextTick(() => {
     const table = polygonTableEle?.value;
-    if (!table) return;
-    if (targetRow) {
-      targetRow.scrollIntoView({
-        behavior: 'smooth',
-        block: 'center',
-      });
-      polygonTableEle?.value.setCurrentRow(tableData.value[clickTableID]);
-    }
+    if (!table || !targetRow) return;
+    // 表格滚动到中间位置
+    targetRow.scrollIntoView({ behavior: 'smooth', block: 'center' });
+    // 同步表格选中状态
+    table.setCurrentRow(tableData.value[clickTableID]);
   });
-  // 表格也对应选中数据 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;
-  }, []);
+	updateMapSpotInfo(nowEntity)
+}
 
-  const polygonCenter = getCenterPoint(groupedArr);
-  if (viewInstance.value.getEntityById('polygon_center')) {
-    viewInstance.value.removeById('polygon_center');
-  }
+// 更新上一个和这一个信息
+function updateMapSpotInfo(nowEntity) {
+	if (!nowEntity) return
+	if (nowEntity.customInfo.id === lastEntity?.customInfo.id) return
 
-  // 恢复上一个高亮图斑的原始颜色
-  if (lastHighlightRow) {
-    let lastentity = homeViewer.value.entities?.getById('polygon_dk' + lastHighlightRow.id);
-    if (lastentity && lastentity.polygon) {
-      // 根据is_exception恢复原始颜色
-      const originalColor =
-        lastHighlightRow.is_exception == 2
-          ? Cesium.Color.RED.withAlpha(0.5)
-          : Cesium.Color.YELLOW.withAlpha(0.5);
-      const originalOutline =
-        lastHighlightRow.is_exception == 2 ? Cesium.Color.RED : Cesium.Color.YELLOW;
-
-      lastentity.polygon.material = originalColor;
-      lastentity.polygon.outlineColor = originalOutline;
-      lastentity.polygon.outlineWidth = 2;
-    }
-  }
-
-  let Nowentity = homeViewer.value.entities?.getById('polygon_dk' + data.id);
-  if (Nowentity && Nowentity.polygon) {
-    Nowentity.polygon.material = Cesium.Color.RED.withAlpha(0);
-    Nowentity.polygon.outlineColor = Cesium.Color.RED;
-  }
-  homeViewer.value.scene.camera.setView({
-    destination: Cesium.Cartesian3.fromDegrees(
-      Number(polygonCenter.lng),
-      Number(polygonCenter.lat),
-      1500
-    ),
-    zIndex: 100,
-  });
-  lastHighlightRow = data;
-};
+	// 设置新的
+	nowEntity.polygon.material = Cesium.Color.RED.withAlpha(0)
+	nowEntity.polyline.material = Cesium.Color.RED
+	// 重置上一个
+	if (lastEntity) {
+		lastEntity.polygon.material = Cesium.Color.YELLOW.withAlpha(0.5)
+		lastEntity.polyline.material = Cesium.Color.YELLOW
+	}
+	lastEntity = nowEntity
+	// flyMapSpot(nowEntity?.customInfo)
+}
 // 清空选中的数据
 const clearSelect = () => {
   lastHighlightRow = null;
   selectionList.value = [];
+viewer?.entities.removeAll();
 };
 // 编辑
 const handleSelectionChange = row => {
@@ -460,7 +429,6 @@
   patchTypeItem.value !== '' &&
   patchTypeItem.value !== null &&
   patchTypeItem.value !== undefined;
-   console.log('isValueNumber',isValueNumber);
  if (isValueNumber) {
   // 转换为数字类型
   lotTypeId = Number(patchTypeItem.value);
@@ -485,7 +453,6 @@
 const handleCancel = () => {
   const fileNameItem = infoList.value.find(item => item.name === '文件名称');
   const spotTypeItem = infoList.value.find(item => item.name === '图斑类型');
-  
   if (fileNameItem) {
     fileNameItem.value = initialFileName.value; 
   }
@@ -703,7 +670,7 @@
     // 表格主体
     .el-table__body {
       tr:hover > td {
-        background-color: var(--el-table-row-hover-bg-color) !important;
+        background-color: rgba(0, 0, 0, 0.6) !important;
       }
 
       td {
@@ -713,7 +680,7 @@
 
     // 选中行
     .current-row td {
-      background-color: var(--el-table-current-row-bg-color) !important;
+      background-color: rgba(0, 0, 0, 0.6) !important;
     }
   }
 :deep(.el-table__body) {
@@ -785,6 +752,7 @@
   position: absolute;
   bottom: 49px;
   left: 50%;
+  transform: translate(-50%);
   img {
     width: 125px;
     height: 45px;

--
Gitblit v1.9.3