From c7a16ca1b6fbcb0b82a4a09c2e75014624082e37 Mon Sep 17 00:00:00 2001
From: Riku <risaku@163.com>
Date: 星期四, 27 三月 2025 22:45:48 +0800
Subject: [PATCH] 修复走航融合功能bug
---
src/views/historymode/HistoryMode.vue | 4
src/model/SatelliteGrid.js | 11 ++
src/api/index.js | 3
src/views/underwaymix/UnderwayMixMode.vue | 164 +++++++++++++++++++++++++++++++++++------
src/views/underwaymix/component/GridStyleTool.vue | 35 +++++++-
5 files changed, 181 insertions(+), 36 deletions(-)
diff --git a/src/api/index.js b/src/api/index.js
index 9a0aa30..2f00044 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -10,7 +10,8 @@
}
if (debug) {
- ip1 = 'http://192.168.0.110:8084/';
+ // ip1 = 'http://192.168.0.110:8084/';
+ ip1 = 'http://locahost:8084/';
}
const $http = axios.create({
diff --git a/src/model/SatelliteGrid.js b/src/model/SatelliteGrid.js
index ad01ca9..d6f3c8c 100644
--- a/src/model/SatelliteGrid.js
+++ b/src/model/SatelliteGrid.js
@@ -300,6 +300,14 @@
});
}
+ deleteTagGrid(tags) {
+ this.changeVisibility({ tags, showGridViews: false });
+ tags.forEach((t) => {
+ this.mapViewsMap.delete(t);
+ this.gridDataDetailMap.delete(t);
+ });
+ }
+
// 璋冩暣鍚勭被鍦板浘瑕嗙洊鐗╃殑鍙鎬�
changeVisibility({ tags = [], showGridViews, showDataTxt, showRankTxt }) {
let { _mapViewsList } = this._getMapViews(...tags);
@@ -568,9 +576,8 @@
eachheight,
searchLength
);
- if (searchRes.find(v=> v.cellId == 1670)) {
+ if (searchRes.find((v) => v.cellId == 1670)) {
console.log();
-
}
searchRes.forEach((e) => {
if (originCellIdList.indexOf(e.cellId) == -1) {
diff --git a/src/views/historymode/HistoryMode.vue b/src/views/historymode/HistoryMode.vue
index 97c9982..d2a780e 100644
--- a/src/views/historymode/HistoryMode.vue
+++ b/src/views/historymode/HistoryMode.vue
@@ -148,8 +148,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璧拌璺嚎鍥�
diff --git a/src/views/underwaymix/UnderwayMixMode.vue b/src/views/underwaymix/UnderwayMixMode.vue
index 460355c..2ed90d6 100644
--- a/src/views/underwaymix/UnderwayMixMode.vue
+++ b/src/views/underwaymix/UnderwayMixMode.vue
@@ -42,7 +42,9 @@
</el-form-item> -->
</el-form>
</el-row>
- <div class="m-t-8">绛涢�夎緟鍔�</div>
+ <el-row class="m-t-8" justify="space-between">
+ <span>铻嶅悎鍒嗘瀽</span>
+ </el-row>
<el-form :inline="false">
<el-form-item label="鏃舵绛涢��">
<el-select
@@ -96,11 +98,15 @@
</el-select>
</el-form-item>
</el-form>
-
+ <div v-if="!gridCellList">
+ <el-icon class="is-loading"><Loading /></el-icon>
+ 缃戞牸淇℃伅鍔犺浇涓�...
+ </div>
<el-table
+ ref="tableRef"
:data="showFusionDataList"
table-layout="fixed"
- size="small"
+ size="default"
:show-overflow-tooltip="true"
border
height="50vh"
@@ -112,7 +118,17 @@
@row-click="handleRowClick"
@selection-change="handleSelectionChange"
>
- <el-table-column type="selection" width="40" />
+ <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"
+ />
<!-- <el-table-column
type="index"
label="搴忓彿"
@@ -123,7 +139,7 @@
label="鏃堕棿"
align="center"
:formatter="timeFormatter"
- width="100"
+ width="120"
/>
<el-table-column
prop="missionCode"
@@ -141,13 +157,13 @@
prop="pollutionDegree"
label="姹℃煋鑳屾櫙"
align="center"
- width="50"
+ width="70"
/>
</el-table>
<div class="m-t-8">鎿嶄綔</div>
<el-space class="m-t-8 m-b-8">
- <el-button
+ <!-- <el-button
type="primary"
class="el-button-custom"
size="small"
@@ -155,10 +171,9 @@
@click="handleFusionClick"
>
{{ '鍙犲姞璧拌埅' }}
- </el-button>
+ </el-button> -->
<CheckButton
- active-text="寮�鍚瀺鍚�"
- inactive-text="闅愯棌铻嶅悎"
+ active-text="铻嶅悎鍒嗘瀽"
:default-value="false"
@change="handleMixClick"
>
@@ -182,6 +197,7 @@
<GridStyleTool
:gridCtrls="gridCtrls"
@show-underway="handleUnderwayClick"
+ @on-delete="handleFusionDelete"
></GridStyleTool>
</el-row>
<!-- </div> -->
@@ -217,6 +233,8 @@
const fusionLoading = ref(false);
const fusionDataList = ref([]);
const selectedfusionData = ref([]);
+const tableRef = ref()
+const selectable = (row) => gridCellList.value;
const gridDataDetailMap = new Map();
@@ -225,34 +243,86 @@
const selectedPollutionDegree = ref([]);
const timeSectionList = computed(() => {
- const res = [];
+ let res = [];
fusionDataList.value.forEach((e) => {
- const t = moment(e.dataTime).format('YYYY-MM-DD');
- if (res.indexOf(t) == -1) {
- res.push(t);
+ const hour = moment(e.dayTimePeriodStart).hour();
+ const t = e.dayTimePeriod;
+ const option = {
+ value: t,
+ index: hour
+ };
+ if (res.indexOf(option) == -1) {
+ 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);
+ return `${v.value} (${count})`;
});
return res;
});
const zoneList = computed(() => {
- const res = [];
+ let res = [];
fusionDataList.value.forEach((e) => {
const t = e.zone;
if (res.indexOf(t) == -1) {
res.push(t);
}
});
+ 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);
+ return `${v} (${count})`;
+ });
return res;
});
const pollutionDegreeList = computed(() => {
- const res = [];
+ let res = [];
fusionDataList.value.forEach((e) => {
const t = e.pollutionDegree;
- if (res.indexOf(t) == -1) {
- res.push(t);
+ const option = {
+ value: t,
+ index: e.pollutionDegreeIndex
+ };
+ if (res.indexOf(option) == -1) {
+ 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);
+ return `${v.value} (${count})`;
});
return res;
});
@@ -261,9 +331,7 @@
return fusionDataList.value.filter((v) => {
const b1 =
selectedTimeSection.value.length == 0 ||
- selectedTimeSection.value.indexOf(
- moment(v.dataTime).format('YYYY-MM-DD')
- ) != -1;
+ selectedTimeSection.value.indexOf(v.dayTimePeriod) != -1;
const b2 =
selectedZone.value.length == 0 ||
selectedZone.value.indexOf(v.zone) != -1;
@@ -421,9 +489,7 @@
let mixTag;
function handleMixClick() {
mixActive.value = !mixActive.value;
- const tags = fusionDataList.value
- .filter((v, i) => selectedfusionData.value.indexOf(i) != -1)
- .map((v) => v.id);
+ const tags = selectedfusionData.value.map((v) => v.id);
satelliteGrid.changeVisibility({
showGridViews: false,
showDataTxt: false,
@@ -525,8 +591,58 @@
mapLine.hideLine(mission.missionCode);
}
}
+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 handleSelectionChange(val) {
+ const deleted = selectedfusionData.value.filter((v) => {
+ return val.indexOf(v) == -1;
+ });
+ const deletedIdList = deleted.map((d) => d.id);
+ const added = val.filter((v) => {
+ return selectedfusionData.value.indexOf(v) == -1;
+ });
+ // const addedIdList = added.map(d=>d.id)
+
+ if (deletedIdList.length > 0) {
+ satelliteGrid.deleteTagGrid(deletedIdList);
+ gridCtrls.value = [satelliteGrid];
+ // satelliteGrid.changeVisibility({ tags: deletedIdList, showGridViews: false });
+ }
+
+ added.forEach((i) => {
+ const d = i;
+ 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.setGridEvent(
+ [d.id],
+ 'click',
+ (gridCell, gridDataDetail) => {
+ gridStore.selectedGridCellAndDataDetail = {
+ gridCell,
+ gridDataDetail
+ };
+ }
+ );
+ gridCtrls.value = [satelliteGrid];
+ });
+ });
+
selectedfusionData.value = val;
}
diff --git a/src/views/underwaymix/component/GridStyleTool.vue b/src/views/underwaymix/component/GridStyleTool.vue
index 35b61e7..6d16811 100644
--- a/src/views/underwaymix/component/GridStyleTool.vue
+++ b/src/views/underwaymix/component/GridStyleTool.vue
@@ -14,10 +14,25 @@
<template #content>
<el-scrollbar class="content-wrap">
<div v-for="(g, i) in gridCtrlList" :key="i">
- {{ g.name }}
+ <span>{{ g.name }}</span>
<div v-for="(value, t) in g.views" :key="t">
- <span v-if="value.extData.type == 0">{{ value.tag + '.' }}</span>
- {{ value.extData.name }}
+ <el-row justify="space-between" align="middle">
+ <div>
+ <span v-if="value.extData.type == 0">{{
+ value.tag + '.'
+ }}</span>
+ {{ value.extData.name }}
+ </div>
+ <el-button
+ class="el-button-custom"
+ type="primary"
+ icon="Close"
+ circle
+ @click="handleCloseClick(i, t, value)"
+ />
+ <!-- <el-icon><Close /></el-icon> -->
+ </el-row>
+
<!-- {{ key }} -->
<!-- <el-text>{{ g.name }}</el-text> -->
<!-- <div class="m-t-8">缃戞牸瑕佺礌</div> -->
@@ -115,7 +130,7 @@
import gridApi from '@/api/gridApi';
import { useGridStore } from '@/stores/grid-info';
-const gridStore = useGridStore()
+const gridStore = useGridStore();
const props = defineProps({
// 缃戞牸绠$悊瀵硅薄[SatelliteGrid]鏁扮粍
@@ -125,7 +140,7 @@
}
});
-const emits = defineEmits(['showUnderway']);
+const emits = defineEmits(['showUnderway', 'onDelete']);
const gridCtrlList = computed(() => {
return props.gridCtrls.map((g) => {
@@ -157,6 +172,12 @@
// 'changeColor',
// 'changeOpacity'
// ]);
+function handleCloseClick(index, t, value) {
+ const key = value.tag;
+ toRaw(props.gridCtrls[index]).deleteTagGrid([key]);
+ gridCtrlList.value[index].views.splice(t, 1)
+ emits('onDelete', index, key)
+}
function handleGridClick(e, index, value) {
const key = value.tag;
@@ -212,9 +233,9 @@
toRaw(props.gridCtrls[index]).mixGrid(value.tag.split('-'), e);
}
-let heatTag
+let heatTag;
function handleHeatMapClick(e, index, value) {
- const _satelliteGrid = toRaw(props.gridCtrls[index])
+ const _satelliteGrid = toRaw(props.gridCtrls[index]);
_satelliteGrid.changeVisibility({
showGridViews: false,
showDataTxt: false,
--
Gitblit v1.9.3