Hwf vor 4 Monaten
Ursprung
Commit
87dffc34ea

+ 4 - 1
src/components/TimeAxis/index.vue

@@ -133,9 +133,10 @@ const toNextTime = (flag?: boolean) => {
 const changeSpeed = () => {
   timeAxisState.speed = timeAxisState.speed === 1 ? 2 : 1;
 };
-
+let activeName = ref('');
 // 外部数据传入,开始播放
 const initDataToPlay = (obj) => {
+  activeName.value = obj.name;
   timeAxisState.type = obj.type;
   originalData = obj.data;
   timeAxisState.data = obj.data;
@@ -539,6 +540,8 @@ const clearObj = () => {
 };
 
 const clearData = () => {
+  if (activeName.value !== name) return;
+  activeName.value = '';
   timeAxisState.playing = false;
   timeAxisState.data = [];
   clearObj();

+ 29 - 0
src/types/components.d.ts

@@ -24,15 +24,24 @@ declare module 'vue' {
     DistributionMap: typeof import('./../components/Map/YztMap/DistributionMap.vue')['default']
     DrawMap: typeof import('./../components/Map/YztMap/DrawMap.vue')['default']
     Editor: typeof import('./../components/Editor/index.vue')['default']
+    ElAnchor: typeof import('element-plus/es')['ElAnchor']
+    ElAnchorLink: typeof import('element-plus/es')['ElAnchorLink']
     ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
+    ElCard: typeof import('element-plus/es')['ElCard']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCheckboxButton: typeof import('element-plus/es')['ElCheckboxButton']
     ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
+    ElCollapse: typeof import('element-plus/es')['ElCollapse']
+    ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+    ElContainer: typeof import('element-plus/es')['ElContainer']
     ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
+    ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
+    ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
     ElDialog: typeof import('element-plus/es')['ElDialog']
     ElDivider: typeof import('element-plus/es')['ElDivider']
     ElDrawer: typeof import('element-plus/es')['ElDrawer']
@@ -42,28 +51,45 @@ declare module 'vue' {
     ElEmpty: typeof import('element-plus/es')['ElEmpty']
     ElForm: typeof import('element-plus/es')['ElForm']
     ElFormItem: typeof import('element-plus/es')['ElFormItem']
+    ElHeader: typeof import('element-plus/es')['ElHeader']
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElLink: typeof import('element-plus/es')['ElLink']
+    ElMain: typeof import('element-plus/es')['ElMain']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     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']
+    ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
+    ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+    ElSegmented: typeof import('element-plus/es')['ElSegmented']
     ElSelect: typeof import('element-plus/es')['ElSelect']
+    ElSkeleton: typeof import('element-plus/es')['ElSkeleton']
+    ElSkeletonItem: typeof import('element-plus/es')['ElSkeletonItem']
     ElSlider: typeof import('element-plus/es')['ElSlider']
+    ElSpace: typeof import('element-plus/es')['ElSpace']
+    ElStep: typeof import('element-plus/es')['ElStep']
+    ElSteps: typeof import('element-plus/es')['ElSteps']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    ElTabPane: typeof import('element-plus/es')['ElTabPane']
+    ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
     ElTimeline: typeof import('element-plus/es')['ElTimeline']
     ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
+    ElTimePicker: typeof import('element-plus/es')['ElTimePicker']
     ElTooltip: typeof import('element-plus/es')['ElTooltip']
     ElTree: typeof import('element-plus/es')['ElTree']
+    ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
     ElUpload: typeof import('element-plus/es')['ElUpload']
     ExcelEditor: typeof import('./../components/ExcelEditor/index.vue')['default']
     FileUpload: typeof import('./../components/FileUpload/index.vue')['default']
@@ -76,6 +102,9 @@ declare module 'vue' {
     HikvisionPlayer: typeof import('./../components/HKVideo/hikvision-player.vue')['default']
     HKVideo: typeof import('./../components/HKVideo/index.vue')['default']
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
+    IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
+    IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
+    IEpUploadFilled: typeof import('~icons/ep/upload-filled')['default']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

+ 1 - 1
src/utils/request.ts

@@ -118,7 +118,7 @@ service.interceptors.response.use(
     // 未设置状态码则默认成功状态
     const code = res.data.code || HttpStatus.SUCCESS;
     // 获取错误信息
-    const msg = errorCode[code] || res.data.msg || res.errmsg || errorCode['default'];
+    const msg = errorCode[code] || res.data.msg || res.errmsg || res.detail || errorCode['default'];
     // 二进制数据则直接返回
     if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
       return res.data;

+ 1 - 1
src/views/globalMap/RightMenu/KeyVehicles.vue

@@ -101,7 +101,7 @@ const handleTrack = (item) => {
         lnglat: [item.lng, item.lat]
       });
     });
-    initDataToPlay({ type: 'track', data: trajectory });
+    initDataToPlay({ type: 'track', data: trajectory, name: '重点车辆' });
   });
 };
 // 调用函数

+ 6 - 4
src/views/globalMap/RightMenu/MobileCommandVehicle.vue

@@ -44,9 +44,8 @@
 
 <script setup lang="ts">
 import { Search } from '@element-plus/icons-vue';
-import { onMounted, reactive } from 'vue';
 import { getDroneResourcesList, getDroneResourcesTrajectory } from '@/api/globalMap/Helicopter';
-const trackPlayback = inject('trackPlayback');
+const initDataToPlay = inject('initDataToPlay');
 // 数据列表,直接定义为数组
 const dataList = ref([]);
 //入参
@@ -88,9 +87,12 @@ const handleTrack = (item) => {
   getDroneResourcesTrajectory(item.id).then((res) => {
     const trajectory = [];
     res.rows.forEach((item) => {
-      trajectory.push([item.longitude, item.latitude]);
+      trajectory.push({
+        time: !!item.create_time ? parseTime(item.create_time, '{h}:{i}') : '',
+        lnglat: [item.longitude, item.latitude]
+      });
     });
-    trackPlayback(trajectory);
+    initDataToPlay({ type: 'track', data: trajectory, name: '移动指挥车' });
   });
 };
 //调用函数

+ 7 - 4
src/views/globalMap/RightMenu/MobilePlatform.vue

@@ -50,8 +50,8 @@
 <script setup lang="ts">
 import { Search } from '@element-plus/icons-vue';
 import { getMobileWorkstationList, getMobileWorkstationTrajectory } from '@/api/globalMap/MobilePlatform';
-import { onMounted, reactive } from 'vue';
-const trackPlayback = inject('trackPlayback');
+import { parseTime } from '@/utils/ruoyi';
+const initDataToPlay = inject('initDataToPlay');
 // 数据列表,直接定义为数组
 const dataList = ref([]);
 //入参
@@ -93,9 +93,12 @@ const handleTrack = (item) => {
   getMobileWorkstationTrajectory(item.id).then((res) => {
     const trajectory = [];
     res.rows.forEach((item) => {
-      trajectory.push([item.longitude, item.latitude]);
+      trajectory.push({
+        time: !!item.create_time ? parseTime(item.create_time, '{h}:{i}') : '',
+        lnglat: [item.longitude, item.latitude]
+      });
     });
-    trackPlayback(trajectory);
+    initDataToPlay({ type: 'track', data: trajectory, name: '手机工作台' });
   });
 };
 //调用函数

+ 7 - 4
src/views/globalMap/RightMenu/MobileUnmannedVehicle.vue

@@ -48,9 +48,9 @@
 
 <script setup lang="ts">
 import { Search } from '@element-plus/icons-vue';
-import { onMounted, reactive } from 'vue';
+import { parseTime } from '@/utils/ruoyi';
 import { getDroneResourcesList, getDroneResourcesTrajectory } from '@/api/globalMap/MobileUnmannedVehicle';
-const trackPlayback = inject('trackPlayback');
+const initDataToPlay = inject('initDataToPlay');
 // 数据列表,直接定义为数组
 const dataList = ref([]);
 // 入参
@@ -92,9 +92,12 @@ const handleTrack = (item) => {
   getDroneResourcesTrajectory(item.id).then((res) => {
     const trajectory = [];
     res.rows.forEach((item) => {
-      trajectory.push([item.longitude, item.latitude]);
+      trajectory.push({
+        time: !!item.create_time ? parseTime(item.create_time, '{h}:{i}') : '',
+        lnglat: [item.longitude, item.latitude]
+      });
     });
-    trackPlayback(trajectory);
+    initDataToPlay({ type: 'track', data: trajectory, name: '机动无人机' });
   });
 };
 //调用函数

+ 7 - 4
src/views/globalMap/RightMenu/SatellitePhone.vue

@@ -45,10 +45,10 @@
 
 <script setup lang="ts">
 import { Search } from '@element-plus/icons-vue';
-import { onMounted, reactive } from 'vue';
 import { getSatellitePhoneList, getSatellitePhoneTrajectory } from '@/api/globalMap/SatellitePhone';
+import { parseTime } from '@/utils/ruoyi';
 
-const trackPlayback = inject('trackPlayback');
+const initDataToPlay = inject('initDataToPlay');
 
 // 数据列表,直接定义为数组
 const dataList = ref([]);
@@ -94,9 +94,12 @@ const handleTrack = (item) => {
   getSatellitePhoneTrajectory(item.id).then((res) => {
     const trajectory = [];
     res.rows.forEach((item) => {
-      trajectory.push([item.longitude, item.latitude]);
+      trajectory.push({
+        time: !!item.create_time ? parseTime(item.create_time, '{h}:{i}') : '',
+        lnglat: [item.longitude, item.latitude]
+      });
     });
-    trackPlayback(trajectory);
+    initDataToPlay({ type: 'track', data: trajectory, name: '卫星电话' });
   });
 };
 

+ 3 - 2
src/views/globalMap/index.vue

@@ -277,8 +277,9 @@ const clickMenu = (item, dataList) => {
       mapStore.setIsMapSelect(true);
     }
   }
-  if (['重点车辆'].includes(item.name) && !item.checked) {
-    timeAxisRef.value.clearData();
+  // 菜单关闭,移除车辆
+  if (['手机工作台', '重点车辆', '移动指挥车', '机动无人机', '卫星电话'].includes(item.name) && !item.checked) {
+    timeAxisRef.value.clearData(item.name);
   }
 };
 const handleHideCommunicationSupport = () => {