diff --git a/public/images/icons/text/文字报.png b/public/images/icons/text/文字报.png
new file mode 100644
index 000000000..0b1637850
Binary files /dev/null and b/public/images/icons/text/文字报.png differ
diff --git a/src/assets/image/multiTraj/开.png b/src/assets/image/multiTraj/开.png
new file mode 100644
index 000000000..4a147783f
Binary files /dev/null and b/src/assets/image/multiTraj/开.png differ
diff --git a/src/assets/image/multiTraj/编组.png b/src/assets/image/multiTraj/编组.png
new file mode 100644
index 000000000..0c23c272e
Binary files /dev/null and b/src/assets/image/multiTraj/编组.png differ
diff --git a/src/views/Content/index.vue b/src/views/Content/index.vue
index c46a600d2..d4a11900f 100644
--- a/src/views/Content/index.vue
+++ b/src/views/Content/index.vue
@@ -11,7 +11,10 @@ import HisImages from '../BaseMB/components/HisImages/index.vue'
import Hangjing from '../Hangjing/index.vue'
import Mubiao from '../Mubiao/index.vue'
import MubiaoHisTrajectory from '../Mubiao/components/HisTrajectory/index.vue'
-import MultiHisTrajectory from '../Mubiao/components/MultiHisTrajectory/index.vue'
+// import MultiHisTrajectory from '../Mubiao/components/MultiHisTrajectory/index.vue'
+
+import MultiHisTrajectory from '../MultiTrajPlayback/components/MultiHisTrajectory.vue'
+import MultiTrajPlayback from '../MultiTrajPlayback'
// import YsHangjing from '../YsHangjing/index.vue'
import Daodan from '../Daodan'
@@ -25,7 +28,9 @@ import DaodanTestConfig from '../Daodan/components/ConfigContainer'
import { useTextReport } from '../TextReport/hooks/text'
import { useHisImage } from '../BaseMB/components/HisImages/hooks/hisImage'
import { useMBTrajectory } from '../Mubiao/components/HisTrajectory/hooks/mbTraj'
-import { useMultiMBTrajectory } from '../Mubiao/components/MultiHisTrajectory/hooks/multiMbTraj'
+// import { useMultiMBTrajectory } from '../Mubiao/components/MultiHisTrajectory/hooks/multiMbTraj'
+import { useMultiTraj } from '../MultiTrajPlayback/hooks/useMultiTraj'
+
import { useDaodan } from '../Daodan/ddHooks'
// import { useWeather } from '../Weather/hooks/weather'
import DetailsModal from './components/DetailsModal/index.vue'
@@ -34,7 +39,7 @@ const { getTextConfigs, initWebSocket } = useTextReport()
const { showHisImageCom } = useHisImage()
const { showHisTrajCom } = useMBTrajectory()
-const { showMultiHisTrajCom } = useMultiMBTrajectory()
+const { showMultiHisTrajCom, showMultiHisTrajDrawer } = useMultiTraj()
const { showDdConfigCom } = useDaodan()
const getConfig = async () => {
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 () => (
+
+ )
+ },
+})