From f3e09a76a7f5147072374b80285901ff69ee2cfe Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sat, 31 Jan 2026 17:13:20 +0800
Subject: [PATCH] Merge branch 'master' of http://139.196.74.78:10010/r/jagzwxm/ja_web

---
 applications/task-work-order/src/utils/cesium/publicCesium.js |   80 +++++++++++++++++-----------------------
 1 files changed, 34 insertions(+), 46 deletions(-)

diff --git a/applications/task-work-order/src/utils/cesium/publicCesium.js b/applications/task-work-order/src/utils/cesium/publicCesium.js
index 830c3f0..f457a70 100644
--- a/applications/task-work-order/src/utils/cesium/publicCesium.js
+++ b/applications/task-work-order/src/utils/cesium/publicCesium.js
@@ -146,52 +146,7 @@
 
 		this.viewer?.cesiumWidget.screenSpaceEventHandler.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK) // 禁用双击
 
-		if (terrain) {
-			try {
-				const noTerrainMechanism = ['1962779164650135554']
-				if (noTerrainMechanism.includes(store.state.user.userInfo?.deptId)) {
-					// 使用Cesium World Terrain
-					Cesium.createWorldTerrainAsync({
-						requestWaterMask: false,    // 请求水域效果
-						requestVertexNormals: true // 请求光照和地形法线
-					}).then(terrainProvider => {
-						this.viewer.terrainProvider = terrainProvider
-						terrainLoadCallback?.()
-					})
-				} else {
-					/*// 正则:第一位非0,第二位任意数字,后10位都是0
-					const re = /^[1-9]\d0{10}$/
-
-					let result = null
-
-					// 1️⃣先判断 areaCode
-					if (re.test(store.state.user.userInfo.detail.areaCode)) {
-						result = store.state.user.userInfo.detail.areaCode.slice(0, 6)
-					} else {
-						// 2️⃣如果不满足,从 ancestors 里找
-						const matchedItems = store.state.user.userInfo.detail.ancestors
-							.split(',')
-							.filter(item => re.test(item)) // 过滤出符合条件的
-
-						// 取第一个符合条件的前6位(可以改成 last one 看需求)
-						if (matchedItems.length > 0) {
-							result = matchedItems[0].slice(0, 6)
-						}
-					}
-
-					// 使用公司地形
-					Cesium.CesiumTerrainProvider.fromUrl(`${import.meta.env.VITE_APP_TERRAIN_URL}${result}`, {
-						requestVertexNormals: true, // 启用地形法线增强立体感
-						requestWaterMask: true, // 启用水体遮罩效果
-					}).then(terrainProvider => {
-						this.viewer.terrainProvider = terrainProvider
-						terrainLoadCallback?.()
-					})*/
-				}
-			} catch (error) {
-				console.error('地形加载失败:', error)
-			}
-		}
+		this.setTerrainVisible(terrain, terrainLoadCallback)
 
 		this.viewer.scene.screenSpaceCameraController.maximumZoomDistance = 4500000
 		this.switchLayers(layerMode)
@@ -205,6 +160,39 @@
 			this.viewer.resolutionScale = dpr // 设置分辨率缩放比例
 		}
 	}
+	async ensureTerrainProvider () {
+		if (this.terrainProvider) return this.terrainProvider
+		if (this.terrainLoading) return this.terrainLoading
+		this.terrainLoading = Cesium.CesiumTerrainProvider.fromUrl(
+			`${import.meta.env.VITE_APP_TERRAIN_URL}ja_terrain`,
+			{
+				requestVertexNormals: true, // 启用地形法线增强立体感
+				requestWaterMask: true, // 启用水体遮罩效果
+			}
+		).then(provider => {
+			this.terrainProvider = provider
+			return provider
+		})
+		return this.terrainLoading
+	}
+
+	async setTerrainVisible (visible, terrainLoadCallback) {
+		if (!this.viewer) return
+		if (!visible) {
+			this.viewer.terrainProvider = new Cesium.EllipsoidTerrainProvider()
+			this.terrainEnabled = false
+			return
+		}
+		try {
+			const provider = await this.ensureTerrainProvider()
+			if (!this.viewer) return
+			this.viewer.terrainProvider = provider
+			this.terrainEnabled = true
+			terrainLoadCallback?.()
+		} catch (error) {
+			this.terrainEnabled = false
+		}
+	}
 
 	getViewer () {
 		return this.viewer

--
Gitblit v1.9.3