From d20d91b0fc297e34140e2d505b288549ace4f6c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=A5=E4=BA=89=E9=B8=A3?= Date: Tue, 22 Apr 2025 09:53:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=9A=E7=9B=AE=E6=A0=87=E8=BD=A8=E8=BF=B9?= =?UTF-8?q?=E5=9B=9E=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/images/icons/text/文字报.png | Bin 0 -> 2784 bytes src/assets/image/multiTraj/开.png | Bin 0 -> 740 bytes src/assets/image/multiTraj/编组.png | Bin 0 -> 3268 bytes src/views/Content/index.vue | 34 ++- src/views/Daodan/components/TestConfig.jsx | 4 +- src/views/Daodan/components/TrajTable.jsx | 4 +- .../components/MultiHisTrajectory.vue | 198 ++++++++++++++++++ .../MultiTrajPlayback/hooks/useMultiTraj.js | 91 ++++++++ .../hooks/useMultiTrajReq.js | 96 +++++++++ src/views/MultiTrajPlayback/index.jsx | 95 +++++++++ 10 files changed, 511 insertions(+), 11 deletions(-) create mode 100644 public/images/icons/text/文字报.png create mode 100644 src/assets/image/multiTraj/开.png create mode 100644 src/assets/image/multiTraj/编组.png create mode 100644 src/views/MultiTrajPlayback/components/MultiHisTrajectory.vue create mode 100644 src/views/MultiTrajPlayback/hooks/useMultiTraj.js create mode 100644 src/views/MultiTrajPlayback/hooks/useMultiTrajReq.js create mode 100644 src/views/MultiTrajPlayback/index.jsx diff --git a/public/images/icons/text/文字报.png b/public/images/icons/text/文字报.png new file mode 100644 index 0000000000000000000000000000000000000000..0b16378500147f02351e2fad4f70a544630d8949 GIT binary patch literal 2784 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 P1jgX$>gTe~DWM4f1F|ca literal 0 HcmV?d00001 diff --git a/src/assets/image/multiTraj/编组.png b/src/assets/image/multiTraj/编组.png new file mode 100644 index 0000000000000000000000000000000000000000..0c23c272ee748e7df4c6d0c3e73e15bb946cea4d GIT binary patch literal 3268 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 { const res = await getTextConfigs() @@ -205,27 +210,41 @@ const showOrHideTextReport = () => { -
+
- + +
+
+ + ))} -
+ {/*
添加拦截 -
+
*/}
) : ( diff --git a/src/views/Daodan/components/TrajTable.jsx b/src/views/Daodan/components/TrajTable.jsx index d1c68a85f..8676f0c1a 100644 --- a/src/views/Daodan/components/TrajTable.jsx +++ b/src/views/Daodan/components/TrajTable.jsx @@ -154,13 +154,13 @@ export default defineComponent({
{props.title}
-
+ {/*
{props.title.indexOf('拦截') > -1 && ( 删除拦截 )} -
+
*/}
diff --git a/src/views/MultiTrajPlayback/components/MultiHisTrajectory.vue b/src/views/MultiTrajPlayback/components/MultiHisTrajectory.vue new file mode 100644 index 000000000..d04be9d66 --- /dev/null +++ b/src/views/MultiTrajPlayback/components/MultiHisTrajectory.vue @@ -0,0 +1,198 @@ + + + diff --git a/src/views/MultiTrajPlayback/hooks/useMultiTraj.js b/src/views/MultiTrajPlayback/hooks/useMultiTraj.js new file mode 100644 index 000000000..be5c163ea --- /dev/null +++ b/src/views/MultiTrajPlayback/hooks/useMultiTraj.js @@ -0,0 +1,91 @@ +import { ref } from 'vue' +import { useMultiTrajReq } from './useMultiTrajReq' + +export function useMultiTraj() { + const timesMap = ref(new Map()) + const times = ref([]) + + const customElapsedTime = ref(0) + const animationSpeed = ref(1) + // const lastFrameTime = ref(performance.now()) + const isAnimationRunning = ref(false) + const isPaused = ref(false) + + function play() { + isAnimationRunning.value = true + isPaused.value = false + } + function pause() { + isAnimationRunning.value = false + isPaused.value = true + } + + function reset() { + isAnimationRunning.value = false + isPaused.value = false + customElapsedTime.value = 0 + } + + function setSpeed(speed) { + animationSpeed.value = speed + } + + function changeTime(time) { + customElapsedTime.value = time + } + return { + checkedAllKeys, + showMultiHisTrajCom, + showOrHideMultiHisTraj, + times, + isAnimationRunning, + isPaused, + play, + pause, + reset, + animationSpeed, + setSpeed, + changeTime, + customElapsedTime, + loadMultiHisTraj, + showMultiHisTrajDrawer, + showOrHideMultiHisTrajDrawer, + } +} + +const checkedAllKeys = ref({ + zb: [], + dd: [], + satellite: [], + hj: [], +}) + +const showMultiHisTrajCom = ref(false) + +const showMultiHisTrajDrawer = ref(false) + +function showOrHideMultiHisTrajDrawer() { + showMultiHisTrajDrawer.value = !showMultiHisTrajDrawer.value +} + +function showOrHideMultiHisTraj() { + showMultiHisTrajCom.value = !showMultiHisTrajCom.value +} + +const { getZBHisTraj } = useMultiTrajReq() + +function loadMultiHisTraj(timeRange) { + console.log(timeRange) + + const dictFunc = { + zb: getZBHisTraj, + dd: null, + satellite: null, + hj: null, + } + Object.keys(checkedAllKeys.value).forEach(key => { + checkedAllKeys.value[key].forEach(item => { + typeof dictFunc[key] === 'function' && dictFunc[key](item, timeRange) + }) + }) +} diff --git a/src/views/MultiTrajPlayback/hooks/useMultiTrajReq.js b/src/views/MultiTrajPlayback/hooks/useMultiTrajReq.js new file mode 100644 index 000000000..30f2da405 --- /dev/null +++ b/src/views/MultiTrajPlayback/hooks/useMultiTrajReq.js @@ -0,0 +1,96 @@ +import { ref } from 'vue' +import { getMubiao, getMubiaoHisTraj } from '../../../api/Mubiao' +import { getSatellite } from '../../../api/Satellite' +import { getHangjing } from '../../../api/Hangjing' +import { getDaodanTree } from '../../../api/Daodan' + +export function useMultiTrajReq() { + return { allTreeData, getAllTree, getZBHisTraj } +} + +const allTreeData = ref([]) + +function getAllTree() { + Promise.all([getZBTree(), getDDTree(), getSatelliteTree(), getHJTree()]) + .then(res => { + allTreeData.value = { + zb: [res[0]], + dd: [res[1]], + satellite: res[2], + hj: [res[3]], + } + }) + .catch(err => {}) +} +async function getZBTree() { + const { code, data } = await getMubiao() + if (code === '200') { + data.nodeName = '装备' + return data + } else { + return [] + } +} + +async function getDDTree() { + const { code, data } = await getDaodanTree() + if (code === '200') { + data.nodeName = 'DD' + return data + } else { + return [] + } +} + +async function getSatelliteTree() { + const { code, data } = await getSatellite() + if (code === '200') { + return data + } else { + return [] + } +} + +async function getHJTree() { + const { code, data } = await getHangjing() + if (code === '200') { + data.nodeName = 'hj' + return data + } else { + return [] + } +} + +async function getZBHisTraj(id, params) { + const [timeBegin, timeEnd] = params + const { code, data } = await getMubiaoHisTraj({ + target_id: id, + timeBegin, + timeEnd, + }) + if (code === '200') { + return data + } + return [] +} + +async function getSatelliteHisTraj(id, params) { + const { timeBegin, timeEnd } = params + const { code, data } = await getSatellite() + if (code === '200') { + } +} + +async function getDDHisTraj(id, params) { + const { timeBegin, timeEnd } = params + const { code, data } = await getSatellite() + if (code === '200') { + } +} + +async function getHJHisTraj(id, params) { + const { timeBegin, timeEnd } = params + const { code, data } = await getSatellite() + if (code === '200') { + } +} diff --git a/src/views/MultiTrajPlayback/index.jsx b/src/views/MultiTrajPlayback/index.jsx new file mode 100644 index 000000000..f348c6834 --- /dev/null +++ b/src/views/MultiTrajPlayback/index.jsx @@ -0,0 +1,95 @@ +import { defineComponent, onMounted } from 'vue' +import { NButton, NIcon, NScrollbar } from 'naive-ui' +import Panel from '@/components/Panel/index.vue' +import Tree from '@/components/Tree/index.vue' +import TabsCom from '@/components/Tabs/index.vue' + +import Bg from '@/assets/image/multiTraj/编组.png' +import RadarSwitch from '@/assets/image/multiTraj/开.png' +import { useMultiTrajReq } from './hooks/useMultiTrajReq' +import { useMultiTraj } from './hooks/useMultiTraj' + +export default defineComponent({ + name: 'MultiTrajPlayback', + setup() { + const { allTreeData, getAllTree } = useMultiTrajReq() + onMounted(() => { + getAllTree() + }) + + const dict = { + satellite: '卫星', + zb: '装备', + dd: 'dd', + hj: 'hj', + } + function renderSuffix({ option }) { + return option.data ? ( +
+ { + e.stopPropagation() + }} + > + + +
+ ) : undefined + } + + const { + checkedAllKeys, + showOrHideMultiHisTraj, + showOrHideMultiHisTrajDrawer, + } = useMultiTraj() + + const multiTrajAllTreeTabConfig = computed(() => { + return Object.keys(allTreeData.value).map((key, index) => { + return { + name: dict[key], + value: key, + component: () => ( + + ), + } + }) + }) + + function playMultiTraj() { + // TODO: 轨迹回放 + showOrHideMultiHisTraj() + } + + return () => ( +
+
+ +
+ + +
+ + + 轨迹回放 +
+
+
+ ) + }, +})