From 419fe50acad4674f50c6639b3ec7ccbcaf2cbf44 Mon Sep 17 00:00:00 2001
From: feiyu02 <risaku@163.com>
Date: 星期四, 20 三月 2025 17:43:49 +0800
Subject: [PATCH] 走航融合(待完成)
---
src/model/SatelliteGrid.js | 3
src/views/underwaymix/UnderwayMixMode.vue | 95 ++++++++++++++-----
src/utils/map/grid.js | 2
src/components.d.ts | 4
src/views/underwaymix/component/GridStyleTool.vue | 162 +++++++++++++++++++++----------
src/router/index.js | 2
6 files changed, 187 insertions(+), 81 deletions(-)
diff --git a/src/components.d.ts b/src/components.d.ts
index f0bc47d..34b6c69 100644
--- a/src/components.d.ts
+++ b/src/components.d.ts
@@ -27,6 +27,7 @@
ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
ElDialog: typeof import('element-plus/es')['ElDialog']
+ ElDivider: typeof import('element-plus/es')['ElDivider']
ElDropdown: typeof import('element-plus/es')['ElDropdown']
ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
@@ -34,15 +35,16 @@
ElFormItem: typeof import('element-plus/es')['ElFormItem']
ElIcon: typeof import('element-plus/es')['ElIcon']
ElInput: typeof import('element-plus/es')['ElInput']
+ ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElRadio: typeof import('element-plus/es')['ElRadio']
ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
ElRow: typeof import('element-plus/es')['ElRow']
+ ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
ElSlider: typeof import('element-plus/es')['ElSlider']
- ElSpace: typeof import('element-plus/es')['ElSpace']
ElSwitch: typeof import('element-plus/es')['ElSwitch']
ElTable: typeof import('element-plus/es')['ElTable']
ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
diff --git a/src/model/SatelliteGrid.js b/src/model/SatelliteGrid.js
index ddf731f..dad244c 100644
--- a/src/model/SatelliteGrid.js
+++ b/src/model/SatelliteGrid.js
@@ -503,6 +503,9 @@
style: {
isMixGridHighlight: true
}
+ },
+ extData: {
+ name: `璧拌埅铻嶅悎 - ${mixTag}`
}
});
}
diff --git a/src/router/index.js b/src/router/index.js
index 47edf4f..770dcf5 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -6,7 +6,7 @@
routes: [
{
path: '/',
- redirect: '/login'
+ redirect: '/index/underwaymix'
},
// 鐧婚檰椤甸潰
{
diff --git a/src/utils/map/grid.js b/src/utils/map/grid.js
index 64a4cdf..18241d1 100644
--- a/src/utils/map/grid.js
+++ b/src/utils/map/grid.js
@@ -426,7 +426,7 @@
grid.setOptions({
...style,
fillColor: _color, //澶氳竟褰㈠~鍏呴鑹�
- fillOpacity: style.opacity ? style.opacity : color[3] == 0 ? 0 : 0.7
+ fillOpacity: style.opacity ? style.opacity : color[3] == 0 ? 0 : 1
});
res.push(grid);
diff --git a/src/views/underwaymix/UnderwayMixMode.vue b/src/views/underwaymix/UnderwayMixMode.vue
index 3d690d3..3d321e7 100644
--- a/src/views/underwaymix/UnderwayMixMode.vue
+++ b/src/views/underwaymix/UnderwayMixMode.vue
@@ -51,8 +51,16 @@
@change="handleMixClick"
>
</CheckButton>
+ <CheckButton
+ :disabled="!mixActive"
+ active-text="椋庨櫓鐑姏鍥�"
+ inactive-text="椋庨櫓鐑姏鍥�"
+ :default-value="false"
+ @change="handleHeatMapClick"
+ >
+ </CheckButton>
</el-row>
- <div class="m-t-8">缃戞牸瑕佺礌</div>
+ <!-- <div class="m-t-8">缃戞牸瑕佺礌</div>
<el-row class="m-t-8">
<CheckButton
active-text="鏄剧ず缃戞牸"
@@ -99,7 +107,6 @@
</el-row>
<div class="m-t-8">璧拌埅瑕佺礌</div>
<el-row class="m-t-8">
- <!-- <el-divider content-position="left"></el-divider> -->
<el-button
type="primary"
@@ -110,7 +117,7 @@
>
{{ underwayVisible ? '闅愯棌璧拌埅璺嚎' : '鏄剧ず璧拌埅璺嚎' }}
</el-button>
- </el-row>
+ </el-row> -->
</template>
<template #footer> </template>
</BaseCard>
@@ -126,7 +133,10 @@
</el-row>
</el-col>
</el-row>
- <GridStyleTool :gridCtrls="gridCtrls"></GridStyleTool>
+ <GridStyleTool
+ :gridCtrls="gridCtrls"
+ @show-underway="handleUnderwayClick"
+ ></GridStyleTool>
</el-row>
<!-- </div> -->
</template>
@@ -272,12 +282,19 @@
});
if (mixActive.value) {
satelliteGrid.mixGrid(tags);
+ gridCtrls.value = [satelliteGrid];
} else {
satelliteGrid.changeVisibility({
tags,
showGridViews: true
});
}
+}
+
+function handleHeatMapClick() {
+ const tags = fusionDataList.value
+ .filter((v, i) => selectedfusionData.value.indexOf(i) != -1)
+ .map((v) => v.id);
}
function handleGridClick() {
@@ -291,9 +308,18 @@
});
}
-function handleUnderwayClick() {
+function handleUnderwayClick({ isShow, dataId }) {
underwayVisible.value = !underwayVisible.value;
- underwayVisible.value ? draw() : mapLine.hideLine();
+
+ if (isShow) {
+ draw(dataId);
+ } 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);
+ }
}
function handleRankClick() {
@@ -389,30 +415,49 @@
});
}
-function draw() {
+function draw(dataId) {
if (isUnmounted.value) return;
- selectedfusionData.value.forEach((i) => {
- const d = fusionDataList.value[i];
+ // selectedfusionData.value.forEach((i) => {
+ // const d = fusionDataList.value[i];
- const mission = missionStore.missionList.find((v) => {
- return v.missionCode == d.mixDataId;
- });
+ // 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);
- });
- });
- }
+ // 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);
+ // });
+ // });
+ // }
+ // });
+
+ 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);
+ 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 drawLine(missionCode, fd) {
diff --git a/src/views/underwaymix/component/GridStyleTool.vue b/src/views/underwaymix/component/GridStyleTool.vue
index 0b06203..76d636a 100644
--- a/src/views/underwaymix/component/GridStyleTool.vue
+++ b/src/views/underwaymix/component/GridStyleTool.vue
@@ -12,53 +12,81 @@
<el-col span="2">
<BaseCard v-show="show" direction="right" borderless="r">
<template #content>
- <div class="content-wrap">
+ <el-scrollbar class="content-wrap">
<div v-for="(g, i) in gridCtrlList" :key="i">
{{ g.name }}
<div v-for="(value, t) in g.views" :key="t">
<!-- {{ value[0] }} -->
- {{ value[1].extData.name }}
+ {{ value.extData.name }}
<!-- {{ key }} -->
<!-- <el-text>{{ g.name }}</el-text> -->
<!-- <div class="m-t-8">缃戞牸瑕佺礌</div> -->
- <el-row class="m-t-8">
+ <el-row class="m-t-8" justify="space-between">
<CheckButton
active-text="鏄剧ず缃戞牸"
inactive-text="闅愯棌缃戞牸"
:default-value="true"
- @change="handleGridClick"
+ @change="(e) => handleGridClick(e, i, value)"
>
</CheckButton>
<CheckButton
active-text="鏄剧ず鎺掑悕"
inactive-text="闅愯棌鎺掑悕"
:default-value="false"
- @change="handleGridClick"
+ @change="(e) => handleRankClick(e, i, value)"
>
</CheckButton>
<CheckButton
active-text="鏄剧ず鏁版嵁"
inactive-text="闅愯棌鏁版嵁"
:default-value="false"
- @change="handleGridClick"
+ @change="(e) => handleDataClick(e, i, value)"
>
</CheckButton>
</el-row>
- <el-row class="m-b-8" gap="2">
- <div class="m-t-8">缃戞牸閫忔槑搴�</div>
+ <el-row class="m-t-8" justify="space-between">
+ <CheckButton
+ active-text="缁樺埗瀵规瘮鑹�"
+ inactive-text="缁樺埗鏍囧噯鑹�"
+ :default-value="false"
+ @change="(e) => handleColorClick(e, i, value)"
+ >
+ </CheckButton>
+ <CheckButton
+ active-text="鏄剧ず璧拌埅杞ㄨ抗"
+ inactive-text="闅愯棌璧拌埅杞ㄨ抗"
+ :default-value="false"
+ @change="(e) => handleUnderwayClick(e, i, value)"
+ >
+ </CheckButton>
+ </el-row>
+ <!-- <el-row class="m-b-8" align="middle"> -->
+ <el-form-item label="閫忔槑搴�">
+ <!-- <div class="m-t-8">缃戞牸閫忔槑搴�</div> -->
<el-slider
- v-model="opacityValue"
+ v-model="value.opacityValue"
:min="0"
:max="1"
:step="0.1"
show-stops
- @change="handleOpacityChange"
- style="width: 200px"
+ @change="(e) => handleOpacityChange(e, i, value)"
+ style="width: 150px"
/>
- </el-row>
+ <el-input-number
+ class="m-l-16"
+ size="small"
+ v-model="value.opacityValue"
+ :min="0"
+ :max="1"
+ :step="0.1"
+ @change="(e) => handleOpacityChange(e, i, value)"
+ />
+ </el-form-item>
+ <!-- </el-row> -->
+ <el-divider />
</div>
</div>
- </div>
+ </el-scrollbar>
</template>
</BaseCard>
</el-col>
@@ -68,7 +96,7 @@
/**
* 缃戞牸鏍峰紡鎺у埗宸ュ叿
*/
-import { ref, watch, computed } from 'vue';
+import { ref, reactive, onMounted, onUnmounted, computed, toRaw } from 'vue';
const props = defineProps({
// 缃戞牸绠$悊瀵硅薄[SatelliteGrid]鏁扮粍
@@ -78,63 +106,87 @@
}
});
+const emits = defineEmits(['showUnderway']);
+
const gridCtrlList = computed(() => {
return props.gridCtrls.map((g) => {
- return {
+ return reactive({
name: g.name,
- views: Array.from(g.mapViewsMap)
- };
+ views: Array.from(g.mapViewsMap).map((v) => {
+ return {
+ tag: v[0],
+ extData: v[1].extData,
+ opacityValue: 1
+ };
+ })
+ });
});
});
-// watch(
-// () => props.gridCtrls,
-// (nV, oV) => {
-// gridCtrlList.value = nV.map((v) => {
-// return Array.from(v.infoMap);
-// });
-// },
-// { deep: true }
-// );
-
const show = ref(true);
-const gridVisible = ref(false);
-const rankVisible = ref(false);
-const dataVisible = ref(false);
-const isStandardColor = ref(true);
-const isOpacity = ref(false);
-const opacityValue = ref(0.7);
+// const gridVisible = ref(false);
+// const rankVisible = ref(false);
+// const dataVisible = ref(false);
+// const isStandardColor = ref(true);
+// const isOpacity = ref(false);
+// const opacityValue = ref(0.7);
-const emits = defineEmits([
- 'showRank',
- 'showData',
- 'changeColor',
- 'changeOpacity'
-]);
+// const emits = defineEmits([
+// 'showRank',
+// 'showData',
+// 'changeColor',
+// 'changeOpacity'
+// ]);
-function handleRankClick() {
- rankVisible.value = !rankVisible.value;
- emits('showRank', rankVisible.value);
+function handleGridClick(e, index, value) {
+ const key = value.tag;
+ toRaw(props.gridCtrls[index]).changeVisibility({
+ tags: [key],
+ showGridViews: e
+ });
}
-function handleDataClick() {
- dataVisible.value = !dataVisible.value;
- emits('showData', dataVisible.value);
+function handleRankClick(e, index, value) {
+ const key = value.tag;
+ toRaw(props.gridCtrls[index]).changeVisibility({
+ tags: [key],
+ showRankTxt: e
+ });
}
-function handleColorClick() {
- isStandardColor.value = !isStandardColor.value;
- emits('changeColor', isStandardColor.value);
+function handleDataClick(e, index, value) {
+ const key = value.tag;
+ toRaw(props.gridCtrls[index]).changeVisibility({
+ tags: [key],
+ showDataTxt: e
+ });
}
-function handleOpacityClick() {
- // isOpacity.value = !isOpacity.value;
- // emits('changeOpacity', isOpacity.value);
+function handleColorClick(e, index, value) {
+ const key = value.tag;
+ toRaw(props.gridCtrls[index]).changeGridColor({
+ tag: key,
+ useCustomColor: e
+ });
}
-function handleOpacityChange(value) {
- emits('changeOpacity', value);
+function handleOpacityChange(e, index, value) {
+ console.log(e, index, value);
+
+ const key = value.tag;
+ // value.opacityValue = e;
+ toRaw(props.gridCtrls[index]).changeGridOpacity({
+ tag: key,
+ opacityValue: toRaw(value.opacityValue)
+ });
+}
+
+function handleUnderwayClick(e, index, value) {
+ emits('showUnderway', {
+ isShow: e,
+ dataId: value.tag
+ });
}
</script>
<style scoped>
@@ -142,4 +194,8 @@
min-width: 300px;
min-height: 600px;
}
+
+:deep(.el-input-number) {
+ width: 80px;
+}
</style>
--
Gitblit v1.9.3