wangjuncheng
2025-07-14 4dc0f83e69f946c8f8c1720ff8904ba444bf5437
src/views/left/KGSim.vue
@@ -3,28 +3,21 @@
    <!-- 模拟区域 -->
    <div class="simulation-area">
      <p>模拟区域</p>
      <el-select
        v-model="selectedArea"
        placeholder="请选择"
        style="max-width: 600px"
        popper-class="mySelectStyle"
        filterable
        :filter-method="filterOptions"
      >
        <el-option
          v-for="item in filteredOptions"
          :key="item.value"
          :label="item.label"
          :value="item.value"
        />
      <el-select v-model="selectedArea" placeholder="请选择" style="max-width: 600px" popper-class="mySelectStyle"
        filterable :filter-method="filterOptions" @change="handleSelectChange">
        <el-option v-for="item in filteredOptions" :key="item.value" :label="item.label" :value="item" />
      </el-select>
    </div>
    <!-- 治理工程标绘 -->
    <div class="engineering-buttons">
      <p>治理工程标绘</p>
      <el-button type="primary" @click="handleStart">开沟</el-button>
      <el-button type="success" @click="handleAdd">加坝</el-button>
      <el-button type="primary" @click="toggleDitch">
        {{ ditchingActive ? "关闭土方开挖" : "开启土方开挖" }}
      </el-button>
      <el-button type="primary" @click="toggleDam">
        {{ damActive ? "关闭增加拦挡坝" : "开启增加拦挡坝" }}
        </el-button>
    </div>
    <!-- 历史模拟 -->
@@ -35,49 +28,113 @@
        <el-radio label="预测模拟">预测模拟</el-radio>
      </el-radio-group>
      <div v-if="selectedSimulation === '历史模拟'">
        <HistorySimulation :selectedArea="selectedArea" />
        <CitySim :selectedArea="selectedArea" />
      </div>
      <div v-if="selectedSimulation === '实时模拟'">
        <!-- <RealTimeSimulation :selectedArea="selectedArea" /> -->
        <RealTimeSimulation :selectedArea="selectedArea" />
      </div>
      <div v-if="selectedSimulation === '预测模拟'">
        <!-- <PredictiveSimulation :selectedArea="selectedArea" /> -->
        <PredictiveSimulation :selectedArea="selectedArea" />
      </div>
    </div>
    <Ditching v-show="ditchingShow" class="ditchingPosition" @update-excavation-data="handleUpdateExcavationData"></Ditching>
    <Dam v-show="damShow" class="ditchingPosition"></Dam>
  </div>
</template>
<script setup>
import { ref, computed } from "vue";
import { ref, computed, onMounted, reactive } from "vue";
import HistorySimulation from "./KGSimOption/HistorySimulation.vue";
import CitySim from './CitySim.vue'
import Ditching from "@/components/tools/Ditching.vue";
import Dam from "@/components/tools/Dam.vue";
import PredictiveSimulation from "./KGSimOption/PredictiveSimulation.vue";
import RealTimeSimulation from "./KGSimOption/RealTimeSimulation.vue";
import { getRegionData } from "@/api/trApi";
import { EventBus } from "@/eventBus"; // 引入事件总线
const selectedSimulation = ref("历史模拟");
const selectedArea = ref("孙胡沟");
const earesOptions = [
  { value: "孙胡沟", label: "孙胡沟" },
  { value: "鱼水洞后沟", label: "鱼水洞后沟" },
  { value: "于家西沟", label: "于家西沟" },
  { value: "北河沟", label: "北河沟" },
  { value: "龙泉峪村", label: "龙泉峪村" },
];
const selectedArea = ref(); // 选中的区域
// 重点沟数据
const importGOptions = reactive([]);
let ditchingShow = ref(false);
let damShow = ref(false);
let ditchingActive = ref(false);
let damActive = ref(false);
onMounted(() => {
  // 获取重点沟数据
  getRegionData({ type: 3 }).then((res) => {
    importGOptions.splice(
      0,
      importGOptions.length,
      ...res.data.map((item) => ({
        id: item.id,
        value: item.geom,
        label: item.name,
      }))
    );
  });
});
// 动态过滤选项
const searchQuery = ref("");
const filteredOptions = computed(() => {
  return earesOptions.filter((option) =>
  return importGOptions.filter((option) =>
    option.label.toLowerCase().includes(searchQuery.value.toLowerCase())
  );
});
const handleUpdateExcavationData = (data) => {
  console.log('接收到子组件的数据:', data);
  // 此处可进行后续操作,如保存、绘图等
};
// 自定义过滤方法
const filterOptions = (query) => {
  searchQuery.value = query;
};
const handleStart = () => {
  console.log("开始按钮被点击");
// 处理选项选择事件
const handleSelectChange = (value) => {
  EventBus.emit("select-geom", { geom: value.value, flyHeight: 8000 });
  console.log("选中的值:", value); // 打印选中的值
  console.log(
    "当前选中的完整数据:",
    importGOptions.find((item) => item.value === value)
  ); // 打印完整的选中数据
};
// 切换开沟状态
const toggleDitch = () => {
  ditchingActive.value = !ditchingActive.value;
  ditchingShow.value = ditchingActive.value;
  if (ditchingActive.value) {
    damActive.value = false; // 关闭加坝状态
    damShow.value = false;   // 隐藏 Dam 组件
  } else {
    cloesDitch();
  }
};
// 切换加坝状态
const toggleDam = () => {
  // damActive.value = !damActive.value;
  // damShow.value = damActive.value;
  // if (damActive.value) {
  //   ditchingActive.value = false; // 关闭开沟状态
  //   ditchingShow.value = false;   // 隐藏 Ditching 组件
  // } else {
  //   cloesDam();
  // }
  window.Viewer = earthCtrl.viewer;
  earthCtrl.factory.createModelLibrary()
};
const cloesDitch = () => {
  ditchingShow.value = false;
};
const cloesDam = () => {
  damShow.value = false;
};
const handleAdd = () => {
@@ -86,11 +143,17 @@
</script>
<style scoped>
</style>
.ditchingPosition {
  position: fixed;
  left: 18%;
  top: 20%;
}
<style scoped>
.simulation-module {
  color: #61f7d4;
  font-size: 14px;
  height: 100%;
  background: url("@/assets/img/screen/leftbg.png");
}
.simulation-area {
@@ -99,42 +162,42 @@
.engineering-buttons {
  .el-button {
    width: 100px;
    width: 48%;
  }
}
.history-simulation-wrapper {
  margin-bottom: 20px;
  height: 100%; /* 固定高度 */
  height: 100%;
  /* 固定高度 */
  overflow: auto;
}
/* 自定义单选框样式 */
:deep(.el-radio__input.is-checked .el-radio__inner) {
  background-color: #009688; /* 选中时的背景颜色 */
  border-color: #009688; /* 选中时的边框颜色 */
  background-color: #009688;
  /* 选中时的背景颜色 */
  border-color: #009688;
  /* 选中时的边框颜色 */
}
:deep(.el-radio__input.is-checked + .el-radio__label) {
  color: inherit; /* 让文字颜色跟随父级 */
  color: inherit;
  /* 让文字颜色跟随父级 */
}
:deep(.el-select__placeholder) {
  color: #fff; /* 让文字颜色跟随父级 */
  color: #fff;
  /* 让文字颜色跟随父级 */
}
:deep(.el-radio) {
  color: #fff; /* 让文字颜色跟随父级 */
  color: #fff;
  /* 让文字颜色跟随父级 */
}
:deep(.el-input__inner) {
  color: #fff; /* 让文字颜色跟随父级 */
  color: #fff;
  /* 让文字颜色跟随父级 */
}
/* .mySelectStyle {
    .el-select-dropdown__item:hover {
        color: #009688 !important;
    }
    .el-select-dropdown__item {
      color: #fff !important;
    }
    .el-select-dropdown__item.selected {
        color: #009688 !important;
    }
} */
</style>
</style>