| | |
| | | <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 |
| | |
| | | :factor="factorDatas.factor[factorType]" |
| | | @change="handleLegendTypeChange" |
| | | ></FactorLegend> |
| | | <!-- <SourceTrace></SourceTrace> --> |
| | | </el-row> |
| | | <el-row class="historical" justify="center"> |
| | | <HistoricalTrajectory |
| | |
| | | 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 thirdPartyDataApi from '@/api/thirdPartyDataApi'; |
| | | 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); |
| | |
| | | factorType: defaultOptions(TYPE0).value, |
| | | // 监测数据 |
| | | factorDatas: new FactorDatas(), |
| | | // 污染溯源结果 |
| | | pollutionData: undefined, |
| | | // 决定绘制3D图形时是否与原图像合并 |
| | | merge: false, |
| | | // 决定绘制完3D图形后地图视角是否自动回中 |
| | |
| | | // 轨迹动画状态 |
| | | status: 0, |
| | | // 是否页面已跳转 |
| | | isUnmounted: false |
| | | isUnmounted: false, |
| | | // 第三方数据获取是否尝试 |
| | | isFetchThirdParty: false, |
| | | thirdPartyLoading: false |
| | | }; |
| | | }, |
| | | watch: { |
| | | factorType(nValue, oValue) { |
| | | if (nValue != oValue && this.status == 0) { |
| | | Layer.clear(); |
| | | this.draw(); |
| | | this.drawHighlightPollution(); |
| | | } |
| | | } |
| | | }, |
| | |
| | | } |
| | | ); |
| | | }, |
| | | 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(); |
| | | }); |
| | | }, |
| | |
| | | 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; |
| | | dataAnalysisApi.pollutionTrace(missionCode).then((res) => { |
| | | res.data.forEach((e) => { |
| | | const fDatas = new FactorDatas(); |
| | | fDatas.setData(e.dataVoList, this.drawMode, () => { |
| | | fDatas.refreshHeight(this.factorType); |
| | | Layer.drawHighLight3DLayer(fDatas, fDatas.factor[this.factorType]); |
| | | console.log(e.dataVoList); |
| | | }); |
| | | }); |
| | | this.pollutionData = res.data; |
| | | this.drawHighlightPollution(); |
| | | }); |
| | | } |
| | | }, |