riku
2025-05-13 6c75516f1ba668873807cef33aa996d25cdf16c4
src/views/historymode/HistoryMode.vue
@@ -8,6 +8,13 @@
        @search="onSearch"
      ></SearchBar>
      <TrajectoryState v-show="status != 0" :status="status"></TrajectoryState>
      <el-button
        type="primary"
        class="p-events-auto el-button-custom"
        @click="handleClick"
      >
        分析
      </el-button>
    </el-row>
    <el-row class="m-t-2">
      <FactorRadio
@@ -21,6 +28,7 @@
        :factor="factorDatas.factor[factorType]"
        @change="handleLegendTypeChange"
      ></FactorLegend>
      <SourceTrace></SourceTrace>
    </el-row>
    <el-row class="historical" justify="center">
      <HistoricalTrajectory
@@ -62,13 +70,15 @@
import { FactorDatas } from '@/model/FactorDatas';
import TrendAnalysis from './component/TrendAnalysis.vue';
import DataSheet from './component/DataSheet.vue';
import SourceTrace from '@/views/sourcetrace/SourceTrace.vue';
import { ElMessage } from 'element-plus';
import { fetchHistoryData } from '@/utils/factor/data';
import dataAnalysisApi from '@/api/dataAnalysisApi';
import { mapStores } from 'pinia';
import { useSceneStore } from '@/stores/scene';
export default {
  components: { TrendAnalysis, DataSheet },
  components: { TrendAnalysis, DataSheet, SourceTrace },
  setup() {
    // 限定分页数据量为10000
    const { loading, fetchData } = useFetchData(10000);
@@ -81,9 +91,11 @@
      // 监测设备编号
      deviceCode: '',
      // 监测因子的类型编号
      factorType: defaultOptions(TYPE0),
      factorType: defaultOptions(TYPE0).value,
      // 监测数据
      factorDatas: new FactorDatas(),
      // 污染溯源结果
      pollutionData: undefined,
      // 决定绘制3D图形时是否与原图像合并
      merge: false,
      // 决定绘制完3D图形后地图视角是否自动回中
@@ -102,7 +114,9 @@
  watch: {
    factorType(nValue, oValue) {
      if (nValue != oValue && this.status == 0) {
        Layer.clear();
        this.draw();
        this.drawHighlightPollution();
      }
    }
  },
@@ -148,8 +162,8 @@
      // 刷新图例
      const factor = this.factorDatas.factor[this.factorType];
      sector.clearSector();
      this.drawRoadLine(factor);
      // this.drawRoadMap(factor);
      // this.drawRoadLine(factor);
      this.drawRoadMap(factor);
      this.drawMassMarks(factor);
    },
    // 绘制3D走行路线图
@@ -186,19 +200,29 @@
        }
      );
    },
    drawHighlightPollution() {
      this.pollutionData.forEach((e) => {
        if (this.factorType == e.factorId + '') {
          const fDatas = this.factorDatas.getByDate(e.startDate, e.endDate);
          Layer.drawHighLight3DLayer(fDatas, fDatas.factor[this.factorType]);
        }
      });
    },
    onFetchData(deviceType, data) {
      if (this.isUnmounted) return;
      // todo 根据设备类型切换地图监测因子展示单选框、折线图复选框、数据表格复选框的因子类型
      this.deviceType = deviceType;
      this.factorDatas.setData(data, this.drawMode, () => {
        this.factorDatas.refreshHeight(this.factorType);
        Layer.clear();
        this.draw();
      });
    },
    onSearch(option) {
      const { deviceType, deviceCode, timeArray } = option;
      const { deviceType, deviceCode, timeArray, mission } = option;
      this.deviceType = deviceType;
      this.deviceCode = deviceCode;
      this.mission = mission;
      let startTime, endTime;
      if (timeArray && timeArray.length == 2) {
        startTime = moment(timeArray[0]).format('YYYY-MM-DD HH:mm:ss');
@@ -214,6 +238,13 @@
          perPage: pageSize
        }).then((res) => this.onFetchData(deviceType, res.data));
      });
    },
    handleClick() {
      const { missionCode } = this.mission;
      dataAnalysisApi.pollutionTrace(missionCode).then((res) => {
        this.pollutionData = res.data;
        this.drawHighlightPollution();
      });
    }
  },
  mounted() {