| | |
| | | <template> |
| | | <div class="p-events-none m-t-2"> |
| | | <el-row justify="space-between"> |
| | | <el-row class="wrap"> |
| | | <el-col span="2"> |
| | | <el-row> |
| | | <BaseCard v-show="show" size="medium" direction="left"> |
| | | <template #content> |
| | | <el-row> |
| | | <el-form :inline="true"> |
| | | <el-form-item label="走航融合"> |
| | | <el-select |
| | | v-model="selectedfusionData" |
| | | multiple |
| | | clearable |
| | | @change="handleChange" |
| | | placeholder="选择任务" |
| | | size="small" |
| | | style="width: 160px" |
| | | :loading="fusionLoading" |
| | | > |
| | | <el-option |
| | | v-for="(s, i) in fusionDataList" |
| | | :key="i" |
| | | :label="s.mixDataId" |
| | | :value="i" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | :disabled=" |
| | | !gridCellList || selectedfusionData.length == 0 |
| | | " |
| | | @click="handleFusionClick" |
| | | > |
| | | {{ '叠加融合' }} |
| | | </el-button> |
| | | </el-form-item> |
| | | </el-form> |
| | | </el-row> |
| | | <div class="m-t-8">操作</div> |
| | | <el-row class="m-t-8"> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleRankClick" |
| | | > |
| | | {{ mixActive ? '取消' : '显示排名' }} |
| | | </el-button> |
| | | <CheckButton |
| | | active-text="取消融合" |
| | | inactive-text="隐藏融合" |
| | | :default-value="false" |
| | | @change="handleMixClick" |
| | | > |
| | | </CheckButton> |
| | | </el-row> |
| | | <div class="m-t-8">网格要素</div> |
| | | <el-row class="m-t-8"> |
| | | <CheckButton |
| | | active-text="显示网格" |
| | | inactive-text="隐藏网格" |
| | | :default-value="true" |
| | | @change="handleGridClick" |
| | | > |
| | | </CheckButton> |
| | | <!-- <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleGridClick" |
| | | > |
| | | {{ gridVisible ? '隐藏融合' : '显示融合' }} |
| | | </el-button> --> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleRankClick" |
| | | > |
| | | {{ rankVisible ? '隐藏排名' : '显示排名' }} |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleDataClick" |
| | | > |
| | | {{ dataVisible ? '隐藏数据' : '显示数据' }} |
| | | </el-button> |
| | | </el-row> |
| | | <div class="m-t-8">网格样式</div> |
| | | <el-row class="m-t-8"> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleOpacityClick" |
| | | > |
| | | {{ !isOpacity ? '透明化' : '取消透明化' }} |
| | | </el-button> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleColorClick" |
| | | > |
| | | {{ isStandardColor ? '绘制对比色' : '绘制标准色' }} |
| | | </el-button> |
| | | </el-row> |
| | | <div class="m-t-8">走航要素</div> |
| | | <el-row class="m-t-8"> |
| | | <!-- <el-divider content-position="left"></el-divider> --> |
| | | <!-- <div class="p-events-none m-t-2"> --> |
| | | <el-row class="m-t-2"> |
| | | <FactorRadio @change="handleFactorTypeChange"></FactorRadio> |
| | | </el-row> |
| | | <el-row class="m-t-2" justify="space-between"> |
| | | <el-row class="wrap"> |
| | | <el-col span="2"> |
| | | <!-- <el-row> --> |
| | | <BaseCard v-show="show" size="medium" direction="left"> |
| | | <template #content> |
| | | <!-- <el-row> |
| | | <el-form :inline="true"> |
| | | |
| | | </el-form> |
| | | </el-row> --> |
| | | <el-row justify="space-between"> |
| | | <span>融合分析</span> |
| | | </el-row> |
| | | <el-form :inline="false"> |
| | | <el-form-item label="时段筛选"> |
| | | <el-select |
| | | v-model="selectedTimeSection" |
| | | multiple |
| | | clearable |
| | | placeholder="选择时段" |
| | | size="small" |
| | | style="width: 300px" |
| | | > |
| | | <el-option |
| | | v-for="(v, i) in timeSectionList" |
| | | :key="i" |
| | | :label="v.label" |
| | | :value="v.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="区域筛选"> |
| | | <el-select |
| | | v-model="selectedZone" |
| | | multiple |
| | | clearable |
| | | placeholder="选择区域" |
| | | size="small" |
| | | style="width: 300px" |
| | | > |
| | | <el-option |
| | | v-for="(v, i) in zoneList" |
| | | :key="i" |
| | | :label="v.label" |
| | | :value="v.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="背景筛选"> |
| | | <el-select |
| | | v-model="selectedPollutionDegree" |
| | | multiple |
| | | clearable |
| | | placeholder="选择背景" |
| | | size="small" |
| | | style="width: 300px" |
| | | > |
| | | <el-option |
| | | v-for="(v, i) in pollutionDegreeList" |
| | | :key="i" |
| | | :label="v.label" |
| | | :value="v.value" |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <el-space v-if="!gridCellList"> |
| | | <el-icon class="is-loading"><Loading /></el-icon> |
| | | <el-text type="info">网格信息加载中...</el-text> |
| | | </el-space> |
| | | <el-table |
| | | ref="tableRef" |
| | | :data="showFusionDataList" |
| | | table-layout="fixed" |
| | | size="small" |
| | | :show-overflow-tooltip="true" |
| | | border |
| | | height="45vh" |
| | | row-class-name="t-row-normal" |
| | | cell-class-name="t-cell" |
| | | header-row-class-name="t-header-row" |
| | | header-cell-class-name="t-header-cell" |
| | | :highlight-current-row="false" |
| | | @row-click="handleRowClick" |
| | | @select="handleSelectionChange" |
| | | @select-all="handleSelectionChange" |
| | | > |
| | | <el-table-column width="40" v-if="!gridCellList"> |
| | | <template #default> |
| | | <el-icon class="is-loading"><Loading /></el-icon> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | v-else |
| | | type="selection" |
| | | :selectable="selectable" |
| | | width="40" |
| | | > |
| | | <!-- <template #header> |
| | | <span>选择</span> |
| | | </template> --> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | | type="index" |
| | | label="序号" |
| | | width="30" |
| | | /> --> |
| | | <el-table-column |
| | | prop="dataTime" |
| | | label="时间" |
| | | align="center" |
| | | :formatter="timeFormatter" |
| | | width="100" |
| | | /> |
| | | <el-table-column |
| | | prop="missionCode" |
| | | label="任务编号" |
| | | align="center" |
| | | width="150" |
| | | /> |
| | | <el-table-column |
| | | prop="zone" |
| | | label="区域" |
| | | align="center" |
| | | width="50" |
| | | /> |
| | | <el-table-column |
| | | prop="pollutionDegree" |
| | | label="污染背景" |
| | | align="center" |
| | | width="70" |
| | | /> |
| | | </el-table> |
| | | |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | :loading="missionLoading || loading" |
| | | @click="handleUnderwayClick" |
| | | > |
| | | {{ underwayVisible ? '隐藏走航路线' : '显示走航路线' }} |
| | | </el-button> |
| | | </el-row> |
| | | </template> |
| | | <template #footer> </template> |
| | | </BaseCard> |
| | | </el-row> |
| | | </el-col> |
| | | <el-col span="2"> |
| | | <el-row> |
| | | <CardButton |
| | | name="走航融合" |
| | | direction="right" |
| | | @click="() => (show = !show)" |
| | | ></CardButton> |
| | | </el-row> |
| | | </el-col> |
| | | </el-row> |
| | | <div class="m-t-8">操作</div> |
| | | <el-space class="m-t-8 m-b-8"> |
| | | <!-- <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | :disabled="!gridCellList || selectedfusionData.length == 0" |
| | | @click="handleFusionClick" |
| | | > |
| | | {{ '叠加走航' }} |
| | | </el-button> --> |
| | | <el-button |
| | | type="primary" |
| | | class="el-button-custom" |
| | | size="small" |
| | | @click="handleMixClick" |
| | | > |
| | | {{ '融合分析' }} |
| | | </el-button> |
| | | <!-- <CheckButton |
| | | active-text="融合分析" |
| | | :default-value="false" |
| | | @change="handleMixClick" |
| | | > |
| | | </CheckButton> --> |
| | | </el-space> |
| | | </template> |
| | | <template #footer> </template> |
| | | </BaseCard> |
| | | <!-- </el-row> --> |
| | | </el-col> |
| | | <el-col span="2"> |
| | | <!-- <el-row> --> |
| | | <CardButton |
| | | name="走航融合" |
| | | direction="right" |
| | | @click="() => (show = !show)" |
| | | ></CardButton> |
| | | <!-- </el-row> --> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <GridStyleTool |
| | | :gridCtrls="gridCtrls" |
| | | @show-underway="handleUnderwayClick" |
| | | @on-delete="handleFusionDelete" |
| | | ></GridStyleTool> |
| | | </el-row> |
| | | <!-- </div> --> |
| | | </template> |
| | | |
| | | <script setup> |
| | | import { ref, onMounted, onUnmounted, watch } from 'vue'; |
| | | import { ref, toRaw, onMounted, onUnmounted, watch, computed } from 'vue'; |
| | | import moment from 'moment'; |
| | | import gridApi from '@/api/gridApi'; |
| | | import { SatelliteGrid } from '@/model/SatelliteGrid'; |
| | | import GridStyleTool from './component/GridStyleTool.vue'; |
| | | import { useGridStore } from '@/stores/grid-info'; |
| | | import { TYPE0 } from '@/constant/device-type'; |
| | | import { defaultOptions } from '@/constant/radio-options'; |
| | | import { useMessageBox } from '@/composables/messageBox'; |
| | | import { useCloned } from '@vueuse/core'; |
| | | |
| | | const satelliteGrid = new SatelliteGrid(); |
| | | const gridStore = useGridStore(); |
| | | |
| | | const satelliteGrid = new SatelliteGrid('走航融合'); |
| | | const gridCtrls = ref([satelliteGrid]); |
| | | |
| | | // 借用卫星遥测模块中的100米网格 |
| | | const props = defineProps({ |
| | |
| | | }); |
| | | const show = ref(true); |
| | | |
| | | // 监测因子的类型编号 |
| | | const factorType = ref(defaultOptions(TYPE0)); |
| | | satelliteGrid.setShowFactorType(toRaw(factorType.value)); |
| | | |
| | | function handleFactorTypeChange(e, item) { |
| | | factorType.value = item; |
| | | console.log(toRaw(factorType.value)); |
| | | satelliteGrid.setShowFactorType(toRaw(factorType.value)); |
| | | } |
| | | |
| | | const mission = ref(undefined); |
| | | |
| | | const gridCellList = ref(undefined); |
| | |
| | | const fusionLoading = ref(false); |
| | | const fusionDataList = ref([]); |
| | | const selectedfusionData = ref([]); |
| | | const tableRef = ref(); |
| | | const selectable = (row) => gridCellList.value; |
| | | |
| | | const gridDataDetailMap = new Map(); |
| | | |
| | | const selectedTimeSection = ref([]); |
| | | const selectedZone = ref([]); |
| | | const selectedPollutionDegree = ref([]); |
| | | |
| | | const timeSectionList = computed(() => { |
| | | let res = []; |
| | | fusionDataList.value.forEach((e) => { |
| | | const hour = moment(e.dayTimePeriodStart).hour(); |
| | | const t = e.dayTimePeriod; |
| | | const option = { |
| | | label: `${t} ${moment(e.dayTimePeriodStart).format('HH:mm')} - ${moment(e.dayTimePeriodEnd).format('HH:mm')}`, |
| | | value: t, |
| | | index: hour |
| | | }; |
| | | if (!res.find((v) => v.label == option.label)) { |
| | | res.push(option); |
| | | } |
| | | }); |
| | | res.sort((a, b) => { |
| | | return a.index - b.index; |
| | | }); |
| | | |
| | | const rMap = new Map(); |
| | | showFusionDataList.value.forEach((d) => { |
| | | if (!rMap.has(d.dayTimePeriod)) { |
| | | rMap.set(d.dayTimePeriod, 0); |
| | | } |
| | | rMap.set(d.dayTimePeriod, rMap.get(d.dayTimePeriod) + 1); |
| | | }); |
| | | |
| | | res = res.map((v) => { |
| | | const count = rMap.get(v.value); |
| | | v.label = `${v.label} (${count ? count : 0})`; |
| | | return v; |
| | | }); |
| | | return res; |
| | | }); |
| | | |
| | | const zoneList = computed(() => { |
| | | let res = []; |
| | | fusionDataList.value.forEach((e) => { |
| | | const t = e.zone; |
| | | const option = { |
| | | label: t, |
| | | value: t |
| | | }; |
| | | if (!res.find((v) => v.label == option.label)) { |
| | | res.push(option); |
| | | } |
| | | }); |
| | | const rMap = new Map(); |
| | | showFusionDataList.value.forEach((d) => { |
| | | if (!rMap.has(d.zone)) { |
| | | rMap.set(d.zone, 0); |
| | | } |
| | | rMap.set(d.zone, rMap.get(d.zone) + 1); |
| | | }); |
| | | |
| | | res = res.map((v) => { |
| | | const count = rMap.get(v.value); |
| | | v.label = `${v.label} (${count ? count : 0})`; |
| | | return v; |
| | | }); |
| | | return res; |
| | | }); |
| | | |
| | | const pollutionDegreeList = computed(() => { |
| | | let res = []; |
| | | fusionDataList.value.forEach((e) => { |
| | | const t = e.pollutionDegree; |
| | | const option = { |
| | | label: t, |
| | | value: t, |
| | | index: e.pollutionDegreeIndex |
| | | }; |
| | | if (!res.find((v) => v.label == option.label)) { |
| | | res.push(option); |
| | | } |
| | | }); |
| | | res.sort((a, b) => { |
| | | return a.index - b.index; |
| | | }); |
| | | const rMap = new Map(); |
| | | showFusionDataList.value.forEach((d) => { |
| | | if (!rMap.has(d.pollutionDegree)) { |
| | | rMap.set(d.pollutionDegree, 0); |
| | | } |
| | | rMap.set(d.pollutionDegree, rMap.get(d.pollutionDegree) + 1); |
| | | }); |
| | | |
| | | res = res.map((v) => { |
| | | const count = rMap.get(v.value); |
| | | v.label = `${v.label} (${count ? count : 0})`; |
| | | return v; |
| | | }); |
| | | return res; |
| | | }); |
| | | |
| | | const showFusionDataList = computed(() => { |
| | | return fusionDataList.value.filter((v) => { |
| | | const b1 = |
| | | selectedTimeSection.value.length == 0 || |
| | | selectedTimeSection.value.indexOf(v.dayTimePeriod) != -1; |
| | | const b2 = |
| | | selectedZone.value.length == 0 || |
| | | selectedZone.value.indexOf(v.zone) != -1; |
| | | const b3 = |
| | | selectedPollutionDegree.value.length == 0 || |
| | | selectedPollutionDegree.value.indexOf(v.pollutionDegree) != -1; |
| | | |
| | | return b1 && b2 && b3; |
| | | }); |
| | | }); |
| | | // if ( |
| | | // selectedTimeSection.value.length == 0 && |
| | | // selectedZone.value.length == 0 && |
| | | // selectedPollutionDegree.value.length == 0 |
| | | // ) { |
| | | // return true; |
| | | // } else { |
| | | // const b1 = |
| | | // selectedTimeSection.value.indexOf( |
| | | // moment(v.dataTime).format('YYYY-MM-DD') |
| | | // ) != -1; |
| | | // const b2 = selectedZone.value.indexOf(v.zone) != -1; |
| | | // const b3 = selectedPollutionDegree.value.indexOf(v.pollutionDegree) != -1; |
| | | |
| | | // return b1 && b2 || b3; |
| | | // } |
| | | |
| | | const mixActive = ref(false); |
| | | const heatActive = ref(false); |
| | | const gridVisible = ref(true); |
| | | const underwayVisible = ref(false); |
| | | const rankVisible = ref(false); |
| | |
| | | const isStandardColor = ref(true); |
| | | const isOpacity = ref(false); |
| | | |
| | | function timeFormatter(value) { |
| | | return moment(value).format('YYYY-MM-DD'); |
| | | function timeFormatter(row, col, cellValue, index) { |
| | | return moment(cellValue).format('YYYY-MM-DD'); |
| | | } |
| | | |
| | | function fetchFusionData() { |
| | |
| | | // }); |
| | | // } |
| | | |
| | | function resetButton() { |
| | | gridVisible.value = true; |
| | | underwayVisible.value = false; |
| | | rankVisible.value = false; |
| | | dataVisible.value = false; |
| | | isStandardColor.value = true; |
| | | isOpacity.value = false; |
| | | } |
| | | |
| | | function prepareGrid(gridInfo) { |
| | | satelliteGrid.gridPrepare(gridInfo); |
| | | satelliteGrid.gridPrepare(gridInfo, function (polygon) { |
| | | // const originOption = polygon.getOptions(); |
| | | // //鼠标移入事件 |
| | | // polygon.on('mouseover', () => { |
| | | // polygon.setOptions({ |
| | | // //修改多边形属性的方法 |
| | | // strokeWeight: 2, |
| | | // strokeColor: 'red' |
| | | // }); |
| | | // }); |
| | | // //鼠标移出事件 |
| | | // polygon.on('mouseout', () => { |
| | | // // polygon.setOptions({ |
| | | // // strokeWeight: originOption.strokeWeight, |
| | | // // strokeColor: originOption.strokeColor |
| | | // // }); |
| | | // polygon.setOptions(originOption); |
| | | // }); |
| | | }); |
| | | } |
| | | |
| | | // 绘制网格遥感数据值和网格颜色 |
| | | function drawGrid(gridDataDetail) { |
| | | satelliteGrid.drawGrid({ gridDataDetail, opacity: 1, zIndex: 11 }); |
| | | } |
| | | |
| | | // watch(mission, (nV, oV) => { |
| | | // if (nV != oV) { |
| | | // checkUnderwayFusionResult(); |
| | | // search(nV); |
| | | // } |
| | | // }); |
| | | |
| | | watch( |
| | | () => props.groupId, |
| | | (nV, oV) => { |
| | | if (nV != oV) { |
| | | satelliteGrid.gridGroupId = nV; |
| | | gridApi.fetchGridCell(nV).then((res) => { |
| | | gridCellList.value = res.data; |
| | | prepareGrid(gridCellList.value); |
| | |
| | | // resetButton(); |
| | | satelliteGrid.changeVisibility({ showGridViews: false }); |
| | | selectedfusionData.value.forEach((i) => { |
| | | const d = fusionDataList.value[i]; |
| | | // const d = fusionDataList.value[i]; |
| | | const d = i; |
| | | if (gridDataDetailMap.has(d.id)) { |
| | | // const gdd = gridDataDetailMap.get(d.id); |
| | | // satelliteGrid.drawTagGrid({ |
| | | // tag: d.id, |
| | | // gridDataDetail: gdd, |
| | | // opacity: 1, |
| | | // zIndex: 11 |
| | | // }); |
| | | satelliteGrid.changeVisibility({ tag: d.id, showGridViews: true }); |
| | | satelliteGrid.changeVisibility({ tags: [d.id], showGridViews: true }); |
| | | // gridCtrls.value = Array.from(satelliteGrid.mapViewsMap); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | } else { |
| | | gridApi.fetchGridDataDetail(d.id, d.groupId).then((res) => { |
| | | gridDataDetailMap.set(d.id, res.data); |
| | | const gdd = res.data; |
| | | satelliteGrid.drawTagGrid({ |
| | | tag: d.id, |
| | | gridDataDetail: gdd, |
| | | opacity: 1, |
| | | zIndex: 11 |
| | | data: gdd, |
| | | extData: { |
| | | name: `走航网格 - ${d.mixDataId}`, |
| | | type: 0 |
| | | } |
| | | }); |
| | | satelliteGrid.setDefaultGridClickEvent([d.id]); |
| | | // satelliteGrid.setGridEvent( |
| | | // [d.id], |
| | | // 'click', |
| | | // (gridCell, gridDataDetail) => { |
| | | // gridStore.selectedGridCellAndDataDetail = { |
| | | // gridCell, |
| | | // gridDataDetail |
| | | // }; |
| | | // } |
| | | // ); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleMixClick(params) {} |
| | | |
| | | function handleGridClick() { |
| | | gridVisible.value = !gridVisible.value; |
| | | selectedfusionData.value.forEach((i) => { |
| | | const d = fusionDataList.value[i]; |
| | | satelliteGrid.changeVisibility({ |
| | | tag: d.id, |
| | | showGridViews: gridVisible.value |
| | | }); |
| | | let mixTag; |
| | | function handleMixClick() { |
| | | // mixActive.value = !mixActive.value; |
| | | const tags = selectedfusionData.value.map((v) => v.id); |
| | | satelliteGrid.changeVisibility({ |
| | | showGridViews: false, |
| | | showDataTxt: false, |
| | | showRankTxt: false |
| | | }); |
| | | // if (mixActive.value) { |
| | | gridApi.mixUnderwayGridData(props.groupId, tags).then((res) => { |
| | | mixTag = satelliteGrid.mixGrid2({ tags, gridDataDetailList: res.data }); |
| | | satelliteGrid.setDefaultGridClickEvent([mixTag]); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | }); |
| | | |
| | | // satelliteGrid.setGridEvent([mixTag], 'click', (gridCell, gridDataDetail) => { |
| | | // gridStore.selectedGridCellAndDataDetail = { |
| | | // gridCell, |
| | | // gridDataDetail |
| | | // }; |
| | | // }); |
| | | // gridCtrls.value = [satelliteGrid]; |
| | | // } else { |
| | | // satelliteGrid.changeVisibility({ |
| | | // tags, |
| | | // showGridViews: true |
| | | // }); |
| | | // } |
| | | } |
| | | |
| | | function handleUnderwayClick() { |
| | | let heatTag; |
| | | const heatMapSearchLength = 4; |
| | | function handleHeatMapClick() { |
| | | heatActive.value = !heatActive.value; |
| | | satelliteGrid.changeVisibility({ |
| | | showGridViews: false, |
| | | showDataTxt: false, |
| | | showRankTxt: false |
| | | }); |
| | | if (heatActive.value) { |
| | | const data = satelliteGrid.gridDataDetailMap.get(mixTag); |
| | | gridApi |
| | | .buildUnderwayHeatmap(props.groupId, data, heatMapSearchLength) |
| | | .then((res) => { |
| | | heatTag = satelliteGrid.drawHeatGrid2(mixTag, res.data); |
| | | satelliteGrid.setDefaultGridClickEvent([heatTag]); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | }); |
| | | } else { |
| | | satelliteGrid.changeVisibility({ |
| | | tags: [mixTag], |
| | | showGridViews: true |
| | | }); |
| | | } |
| | | } |
| | | |
| | | function handleHeatMapSearchClick() { |
| | | const res = satelliteGrid.search( |
| | | { |
| | | groupId: 1, |
| | | cellId: 2893, |
| | | pm25: 50 |
| | | }, |
| | | 120, |
| | | 90, |
| | | 10, |
| | | 10, |
| | | 3 |
| | | ); |
| | | |
| | | console.log(res); |
| | | } |
| | | |
| | | function handleUnderwayClick({ isShow, dataId, done }) { |
| | | underwayVisible.value = !underwayVisible.value; |
| | | underwayVisible.value ? draw() : mapLine.hideLine(); |
| | | } |
| | | |
| | | function handleRankClick() { |
| | | rankVisible.value = !rankVisible.value; |
| | | selectedfusionData.value.forEach((i) => { |
| | | const d = fusionDataList.value[i]; |
| | | satelliteGrid.changeVisibility({ |
| | | tag: d.id, |
| | | showRankTxt: rankVisible.value |
| | | if (isShow) { |
| | | draw(dataId).finally(() => done()); |
| | | } else { |
| | | const d = fusionDataList.value.find((v) => v.id == dataId); |
| | | const mission = missionStore.missionList.find((v) => { |
| | | return v.missionCode == d.mixDataId; |
| | | }); |
| | | }); |
| | | mapLine.hideLine(mission.missionCode); |
| | | done(); |
| | | } |
| | | } |
| | | function handleFusionDelete(index, tag) { |
| | | const f = selectedfusionData.value.find((v) => v.id == tag); |
| | | if (f) { |
| | | // const i = selectedfusionData.value.indexOf(f); |
| | | // selectedfusionData.value.splice(i, 1); |
| | | tableRef.value.toggleRowSelection(f, false); |
| | | } |
| | | } |
| | | |
| | | function handleDataClick() { |
| | | dataVisible.value = !dataVisible.value; |
| | | selectedfusionData.value.forEach((i) => { |
| | | const d = fusionDataList.value[i]; |
| | | satelliteGrid.changeVisibility({ |
| | | tag: d.id, |
| | | showDataTxt: dataVisible.value |
| | | function handleSelectionChange(val) { |
| | | console.log(val); |
| | | |
| | | const deleted = selectedfusionData.value.filter((v) => { |
| | | return !val.find((t) => t.id == v.id); |
| | | }); |
| | | const deletedIdList = deleted.map((d) => d.id); |
| | | const added = val.filter((v) => { |
| | | return !selectedfusionData.value.find((t) => t.id == v.id); |
| | | }); |
| | | |
| | | if (val.length > 4) { |
| | | useMessageBox({ |
| | | confirmMsg: '最多允许同时展示4次走航记录', |
| | | confirmTitle: '走航记录选择过多警告' |
| | | }); |
| | | }); |
| | | } |
| | | added.forEach((a) => { |
| | | tableRef.value.toggleRowSelection(a, false); |
| | | }); |
| | | return; |
| | | } |
| | | // const addedIdList = added.map(d=>d.id) |
| | | |
| | | function handleColorClick() { |
| | | isStandardColor.value = !isStandardColor.value; |
| | | selectedfusionData.value.forEach((i) => { |
| | | const d = fusionDataList.value[i]; |
| | | if (deletedIdList.length > 0) { |
| | | satelliteGrid.deleteTagGrid(deletedIdList); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | // satelliteGrid.changeVisibility({ tags: deletedIdList, showGridViews: false }); |
| | | } |
| | | |
| | | added.forEach((i) => { |
| | | const d = i; |
| | | if (gridDataDetailMap.has(d.id)) { |
| | | const gdd = gridDataDetailMap.get(d.id); |
| | | satelliteGrid.drawTagGrid({ |
| | | tag: d.id, |
| | | gridDataDetail: gdd, |
| | | useCustomColor: !isStandardColor.value, |
| | | opacity: 1, |
| | | zIndex: 11 |
| | | data: gdd, |
| | | extData: { |
| | | name: `走航网格 - ${d.mixDataId}`, |
| | | type: 0 |
| | | } |
| | | }); |
| | | satelliteGrid.setDefaultGridClickEvent([d.id]); |
| | | // satelliteGrid.setGridEvent( |
| | | // [d.id], |
| | | // 'click', |
| | | // (gridCell, gridDataDetail) => { |
| | | // gridStore.selectedGridCellAndDataDetail = { |
| | | // gridCell, |
| | | // gridDataDetail |
| | | // }; |
| | | // } |
| | | // ); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | } else { |
| | | gridApi.fetchGridDataDetail(d.id, d.groupId).then((res) => { |
| | | gridDataDetailMap.set(d.id, res.data); |
| | | const gdd = res.data; |
| | | satelliteGrid.drawTagGrid({ |
| | | tag: d.id, |
| | | data: gdd, |
| | | extData: { |
| | | name: `走航网格 - ${d.mixDataId}`, |
| | | type: 0 |
| | | } |
| | | }); |
| | | satelliteGrid.setDefaultGridClickEvent([d.id]); |
| | | // satelliteGrid.setGridEvent( |
| | | // [d.id], |
| | | // 'click', |
| | | // (gridCell, gridDataDetail) => { |
| | | // gridStore.selectedGridCellAndDataDetail = { |
| | | // gridCell, |
| | | // gridDataDetail |
| | | // }; |
| | | // } |
| | | // ); |
| | | gridCtrls.value = [satelliteGrid]; |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | |
| | | function handleOpacityClick() { |
| | | isOpacity.value = !isOpacity.value; |
| | | satelliteGrid.changeGridOpacity({ opacityValue: isOpacity.value ? 0.1 : 1 }); |
| | | selectedfusionData.value = useCloned(val).cloned.value; |
| | | } |
| | | |
| | | /**走航轨迹*******************************************************************/ |
| | |
| | | const drawMode = ref(0); |
| | | // 监测数据 |
| | | const factorDataMap = new Map(); |
| | | // pm2.5 |
| | | const factorType = 6; |
| | | |
| | | function fetchMission() { |
| | | missionLoading.value = true; |
| | |
| | | }); |
| | | } |
| | | |
| | | function draw() { |
| | | if (isUnmounted.value) return; |
| | | |
| | | selectedfusionData.value.forEach((i) => { |
| | | const d = fusionDataList.value[i]; |
| | | |
| | | const mission = missionStore.missionList.find((v) => { |
| | | return v.missionCode == d.mixDataId; |
| | | }); |
| | | |
| | | if (factorDataMap.has(mission.missionCode)) { |
| | | const fd = factorDataMap.get(mission.missionCode); |
| | | drawLine(mission.missionCode, fd); |
| | | } else { |
| | | search(mission).then((res) => { |
| | | const fd = new FactorDatas(); |
| | | fd.setData(res.data, drawMode.value, () => { |
| | | fd.refreshHeight(factorType.value); |
| | | factorDataMap.set(mission.missionCode, fd); |
| | | drawLine(mission.missionCode, fd); |
| | | }); |
| | | }); |
| | | } |
| | | function draw(dataId) { |
| | | if (isUnmounted.value) return Promise.resolve(); |
| | | const d = fusionDataList.value.find((v) => v.id == dataId); |
| | | const mission = missionStore.missionList.find((v) => { |
| | | return v.missionCode == d.mixDataId; |
| | | }); |
| | | |
| | | if (factorDataMap.has(mission.missionCode)) { |
| | | const fd = factorDataMap.get(mission.missionCode); |
| | | fd.refreshHeight(factorType.value.value); |
| | | return Promise.resolve(drawLine(mission.missionCode, fd)); |
| | | } else { |
| | | return search(mission).then((res) => { |
| | | const fd = new FactorDatas(); |
| | | fd.setData(res.data, drawMode.value, () => { |
| | | fd.refreshHeight(factorType.value.value); |
| | | factorDataMap.set(mission.missionCode, fd); |
| | | drawLine(mission.missionCode, fd); |
| | | }); |
| | | }); |
| | | } |
| | | } |
| | | |
| | | function drawLine(missionCode, fd) { |
| | | // 刷新图例 |
| | | const factor = fd.factor[factorType]; |
| | | const factor = fd.factor[factorType.value.value]; |
| | | sector.clearSector(); |
| | | fd.refreshHeight(factorType); |
| | | fd.refreshHeight(factorType.value.value); |
| | | mapLine.drawTagLine(missionCode, fd, factor); |
| | | } |
| | | </script> |
| | | <style scoped></style> |
| | | <style scoped> |
| | | :deep(.el-table) { |
| | | --el-table-bg-color: transparent; |
| | | --el-table-row-hover-bg-color: var(--select_color); |
| | | --el-table-current-row-bg-color: var(--select_color); |
| | | /* --el-table-current-row-bg-color: #7dff5d96; */ |
| | | --el-table-text-color: var(--font-color); |
| | | } |
| | | |
| | | :deep(.t-row-normal) { |
| | | cursor: pointer; |
| | | background-color: transparent !important; |
| | | } |
| | | |
| | | :deep(.t-cell) { |
| | | /* background: red !important; */ |
| | | /* height: 40px; |
| | | border: 1px solid black; */ |
| | | } |
| | | |
| | | :deep(.t-header-row) { |
| | | } |
| | | |
| | | :deep(.t-header-cell) { |
| | | background-color: var(--bg-color-2) !important; |
| | | /* text-align: center !important; */ |
| | | color: white !important; |
| | | } |
| | | </style> |