riku
2025-07-04 d6e6f8b5b31e132e4597eb531168d3e88f3bda72
src/views/historymode/HistoryMode.vue
@@ -4,17 +4,17 @@
      <SearchBar
        v-show="status == 0"
        :search-time="searchTime"
        :loading="loading"
        :loading="loading || thirdPartyLoading"
        @search="onSearch"
      ></SearchBar>
      <TrajectoryState v-show="status != 0" :status="status"></TrajectoryState>
      <el-button
      <!-- <el-button
        type="primary"
        class="p-events-auto el-button-custom"
        @click="handleClick"
      >
        分析
      </el-button>
      </el-button> -->
    </el-row>
    <el-row class="m-t-2">
      <FactorRadio
@@ -28,7 +28,6 @@
        :factor="factorDatas.factor[factorType]"
        @change="handleLegendTypeChange"
      ></FactorLegend>
      <!-- <SourceTrace></SourceTrace> -->
    </el-row>
    <el-row class="historical" justify="center">
      <HistoricalTrajectory
@@ -53,6 +52,13 @@
      :device-type="deviceType"
      :device-code="deviceCode"
    ></DataSheet>
    <SourceTrace
      class="source-trace"
      v-model:factorType="factorType"
      direction="right"
      mode="history"
      :mission-code="missionCode"
    ></SourceTrace>
  </div>
</template>
@@ -74,6 +80,7 @@
import { ElMessage } from 'element-plus';
import { fetchHistoryData } from '@/utils/factor/data';
import dataAnalysisApi from '@/api/dataAnalysisApi';
import thirdPartyDataApi from '@/api/thirdPartyDataApi';
import { mapStores } from 'pinia';
import { useSceneStore } from '@/stores/scene';
@@ -86,6 +93,7 @@
  },
  data() {
    return {
      missionCode: undefined,
      // 监测设备类型
      deviceType: TYPE0,
      // 监测设备编号
@@ -108,7 +116,10 @@
      // 轨迹动画状态
      status: 0,
      // 是否页面已跳转
      isUnmounted: false
      isUnmounted: false,
      // 第三方数据获取是否尝试
      isFetchThirdParty: false,
      thirdPartyLoading: false
    };
  },
  watch: {
@@ -116,7 +127,7 @@
      if (nValue != oValue && this.status == 0) {
        Layer.clear();
        this.draw();
        this.drawHighlightPollution();
        // this.drawHighlightPollution();
      }
    }
  },
@@ -223,6 +234,7 @@
      this.deviceType = deviceType;
      this.deviceCode = deviceCode;
      this.mission = mission;
      this.missionCode = mission.missionCode;
      let startTime, endTime;
      if (timeArray && timeArray.length == 2) {
        startTime = moment(timeArray[0]).format('YYYY-MM-DD HH:mm:ss');
@@ -236,8 +248,32 @@
          endTime,
          page,
          perPage: pageSize
        }).then((res) => this.onFetchData(deviceType, res.data));
        }).then((res) => {
          this.onFetchData(deviceType, res.data);
          if (
            res.data.length == 0 &&
            this.isFetchThirdParty != mission.missionCode
          ) {
            this.onThirdPartyFetch(option);
          }
        });
      });
    },
    onThirdPartyFetch(option) {
      const { mission } = option;
      if (import.meta.env.VITE_DATA_MODE == 'jingan') {
        this.thirdPartyLoading = true;
        this.isFetchThirdParty = mission.missionCode;
        // 通知服务端启动任务范围内的第三方数据获取任务
        thirdPartyDataApi
          .fetchMissionData(mission.missionCode)
          .then((res) => {
            if (res.data) {
              this.onSearch(option);
            }
          })
          .finally(() => (this.thirdPartyLoading = false));
      }
    },
    handleClick() {
      const { missionCode } = this.mission;
@@ -279,4 +315,9 @@
  left: 0;
  right: 0;
}
.source-trace {
  position: absolute;
  right: 0;
  bottom: 0px;
}
</style>