提交 1fc92cc5 authored 作者: 周文艺's avatar 周文艺

zuixin

上级 91845458
......@@ -23,6 +23,7 @@
"qs": "^6.13.1",
"vue": "^3.5.13",
"vue-element-plus-x": "^1.3.98",
"vue-logger": "^0.0.4",
"vue-router": "^4.5.0",
"vuedraggable": "4.1.0",
"vxe-pc-ui": "~4.8.20",
......@@ -9982,6 +9983,12 @@
"vue": "^3.5.0"
}
},
"node_modules/vue-logger": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/vue-logger/-/vue-logger-0.0.4.tgz",
"integrity": "sha512-UHP8IS/85bxNA1YQ/AQnwPJpI68zRQaelM6XMchTfc7Ax5U51ISPGfGTxE8OXYoSvT09vYUwyQdtX9+D2PVu+w==",
"license": "MIT"
},
"node_modules/vue-router": {
"version": "4.5.0",
"resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz",
......
......@@ -37,6 +37,7 @@
"qs": "^6.13.1",
"vue": "^3.5.13",
"vue-element-plus-x": "^1.3.98",
"vue-logger": "^0.0.4",
"vue-router": "^4.5.0",
"vuedraggable": "4.1.0",
"vxe-pc-ui": "~4.8.20",
......
......@@ -2,7 +2,7 @@
* @Author: Z 1518051043@qq.com
* @Date: 2025-12-08 17:37:05
* @LastEditors: zwy 1518051043@qq.com
* @LastEditTime: 2025-12-27 17:21:52
* @LastEditTime: 2026-01-04 09:56:36
* @FilePath: \yuanxinPro\src\api\Zodiac.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%A
*/
......@@ -51,26 +51,33 @@ export function groundSystemStatisticsInfoApi() {
}
export function subSystemStatisticsInfoApi(data) {
export function subSystemStatisticsInfoApi() {
return request({
url: '/GroundSystem/statistics',
method: 'get',
data: data
// data: data
})
}
export function getSubSystemOpitionListApi(data) {
return request({
url: '/subSystem/getSubSystem',
url: '/subSystem/getSubSystem?subSystemType='+data.subSystemType,
method: 'get',
params: data
})
}
// console.log("propsDate-min--3333333333--------",{
// endTime: historyTimeDateRange.value[1],
// satelliteId: useAppStoreInstance.globalSatelliteSearchID==='0'? "4097": (useAppStoreInstance.globalSatelliteSearchID),
// startTime: historyTimeDateRange.value[0],
// subSystemType: arcHistorySubSystemOptions[arcHistoryActiveIndex.value],
// code: historyCode.value,
// });
export function getSubSystemCurveListApi(data) {
return request({
url: '/subSystem/getSubSystemCurve',
method: 'post',
data: data
url: '/subSystem/getSubSystemCurve?satelliteId='+data.satelliteId+'&startTime='+data.startTime+'&endTime='+data.endTime+'&code='+data.code +'&subSystemType='+data.subSystemType,
method: 'get'
})
}
\ No newline at end of file
/*
* @Author: Z 1518051043@qq.com
* @Date: 2025-09-12 13:51:43
* @LastEditors: Z 1518051043@qq.com
* @LastEditTime: 2025-12-10 13:36:39
* @LastEditors: zwy 1518051043@qq.com
* @LastEditTime: 2025-12-30 11:11:21
* @FilePath: \yuanxinPro\src\main.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
......@@ -11,7 +11,7 @@ import { createPinia } from 'pinia'
import './style.css'
import App from './App.vue'
//导入ant-design-vue框架
import Antd from 'ant-design-vue';
// import Antd from 'ant-design-vue';
import 'ant-design-vue/dist/reset.css';
// 导入element-plus框架
......@@ -68,7 +68,7 @@ app.use(elementIcons)
app.component('svg-icon', SvgIcon)
directive(app)//挂载全局函数
app.use(Antd)
// app.use(Antd)
app.use(pinia)
// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
......
......@@ -51,7 +51,7 @@
import { ref, onMounted, onUnmounted } from 'vue';
import * as echarts from 'echarts';
import { el } from 'element-plus/es/locales.mjs';
import { message } from 'ant-design-vue';
const props = defineProps(['devices','isDetialDialogVisible'])
......@@ -182,9 +182,9 @@ function handleDateRangeChange() {
}
});
}else {
message.warning({content:'完善开始时间和结束时间的选择',
duration: 5.5,
ElMessage({
type: 'warning',
message: '完善开始时间和结束时间的选择',
});
}
......
......@@ -434,6 +434,7 @@ function initChart() {
chartDom.style.width = '100%';
chartDom.style.height = '150px';
if (!chartDom) return;
myChart = echarts.init(chartDom);
......
const Loading = (function() {
let loadingCount = 0;
let loadingInstance = null;
let styleInstance = null;
function createLoading(options = {}) {
const {
text = 'Loading...',
background = 'rgba(0, 0, 0, 0.57)',
color = '#fff',
zIndex = 9999,
spinnerColor = color,
spinnerSize = '40px'
} = options;
if (loadingCount === 0) {
// Create loading element if it doesn't exist
loadingInstance = document.createElement('div');
loadingInstance.className = 'custom-loading';
loadingInstance.style.position = 'fixed';
loadingInstance.style.top = '0';
loadingInstance.style.left = '0';
loadingInstance.style.width = '100%';
loadingInstance.style.height = '100%';
loadingInstance.style.backgroundColor = background;
loadingInstance.style.display = 'flex';
loadingInstance.style.justifyContent = 'center';
loadingInstance.style.alignItems = 'center';
loadingInstance.style.zIndex = zIndex;
loadingInstance.style.flexDirection = 'column';
// Create spinner element
const spinnerEl = document.createElement('div');
spinnerEl.className = 'custom-loading-spinner';
spinnerEl.style.border = `4px solid rgba(0, 0, 0, 0.3)`;
spinnerEl.style.borderRadius = '50%';
spinnerEl.style.borderTop = `4px solid ${spinnerColor}`;
spinnerEl.style.width = spinnerSize;
spinnerEl.style.height = spinnerSize;
spinnerEl.style.animation = 'spin 1s linear infinite';
// Create text element
const textEl = document.createElement('p');
textEl.className = 'custom-loading-text';
textEl.textContent = text;
textEl.style.color = color;
textEl.style.marginTop = '20px';
textEl.style.fontFamily = 'Arial, sans-serif';
// Add animation styles
styleInstance = document.createElement('style');
styleInstance.textContent = `
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
`;
// Assemble elements
loadingInstance.appendChild(spinnerEl);
loadingInstance.appendChild(textEl);
document.head.appendChild(styleInstance);
document.body.appendChild(loadingInstance);
}
loadingCount++;
}
function destroyLoading() {
if (loadingCount <= 0) return;
loadingCount--;
if (loadingCount === 0 && loadingInstance) {
document.body.removeChild(loadingInstance);
document.head.removeChild(styleInstance);
loadingInstance = null;
styleInstance = null;
}
}
return {
show: createLoading,
hide: destroyLoading,
getCount: () => loadingCount // Optional: add method to get current loading count
};
})();
export default Loading;
\ No newline at end of file
<template>
<div class="common-layout" :style="{ '--headerHeight': headerHeight, '--asideWidth': asideWidth }">
<!-- 悬浮控制窗口 -->
<div class="control-panel" id="control_panel" v-if="useAppStoreInstance.iscontrolPanelShow">
<div class="control-panel" id="control_panel1" v-if="useAppStoreInstance.iscontrolPanelShow">
<div class="panel-content">
<div class="controls-list">
<div class="control-item" v-for="item in controls" :key="item.label">
......@@ -74,7 +74,7 @@
</template>
<script setup>
import { message } from 'ant-design-vue'
import { ref, onMounted, onUnmounted, watch, onActivated } from 'vue'
import useAppStore from '@/store/module/app'
......@@ -108,37 +108,7 @@ const handleControlChange = (item, value) => {
const searchSatelliteContent = ref('')
const searchSatelliteRef = ref(null)
const searchSatellite = () => {
const isNumeric = /^\d+$/.test(searchSatelliteContent.value)
if (searchSatelliteContent.value !== '') {
if (isNumeric) {
console.log('搜索卫星:', searchSatelliteContent.value)
if (window.ue5) {
window.ue5("callBackSearchSatelliteFn", String(JSON.stringify(
{value: searchSatelliteContent.value,
})));
}
// 执行搜索逻辑
} else {
console.log('输入无效,只能输入数字:', searchSatelliteRef)
// alert(`输入值 ${searchSatelliteContent.value}无效,只能输入数字`)
message.error({
content: h('div', {
innerHTML: ` <span style="color: #ff4444; font-weight: bold;">${searchSatelliteContent.value}</span> 无效,只能输入数字`
}),
duration: 3,
className: 'searchSatellite_message'
})
searchSatelliteContent.value = ''
}
}
// console.log('搜索卫星:', isNumeric)
}
......@@ -176,7 +146,11 @@ const handleSwitchChange = (item) => {
break;
default:
message.error('界面显示实例类型错误!');
ElMessage({
type: 'error',
message: `界面显示实例类型错误!`,
})
break;
}
}
......@@ -207,7 +181,7 @@ watch(useAppStoreInstance, () => {
// if (!useAppStoreInstance.islegendShow) {document.getElementById('all_footer').style.bottom = '20px'}
// document.getElementById('search_panel').style.left = '30px'
document.getElementById('control_panel').style.right = '-30px'
document.getElementById('control_panel1').style.right = '-30px'
}
......
......@@ -46,6 +46,7 @@
<img v-if="isPlaying" src="@/assets/images/footers/videoPlay.png" alt="" style="width: 8px; height: 10px;" />
</el-icon>
</el-button>
<el-button size="mini" @click="jumpToSpecificTime(new Date('2025-11-03 00:00:00'))">时间</el-button>
<!-- <el-button circle class="right_block_conter_btn" @click="playForward">
<el-icon>
<img src="@/assets/images/footers/videoPlay_right.png" alt="" style="width: 8px; height: 10px;" />
......@@ -106,7 +107,7 @@
@mousedown="startDrag('end', $event)"
>
<div class="handle-rail">
<div class="handle-tooltip" :class="{'handle-tooltip_auto': isPlaying}">{{ formatDateTime(selectedEndTime) }}</div>
<div class="handle-tooltip" :class="{'handle-tooltip_auto': !is_flag_isRealtime}">{{ formatDateTime(selectedEndTime) }}</div>
</div>
</div>
</div>
......@@ -118,14 +119,94 @@
<script setup>
import { VideoPlay, VideoPause, CaretLeft, CaretRight } from '@element-plus/icons-vue';
import { message } from 'ant-design-vue';
import { ElLoading } from 'element-plus'
import { da, el, fa, tr } from 'element-plus/es/locales.mjs';
import { ElLoading, ElMessage } from 'element-plus'
import Loading from '@/pages/all/components/loadingComponent/index.js'
import { ref, onMounted, onUnmounted, computed, watch, nextTick } from 'vue';
import wss from '@/utils/requestSocekt.js'
import useAppStore from '@/store/module/app'
// import { loading } from 'vxe-pc-ui';
const useAppStoreInstance = useAppStore();
const flagIsPlaying = ref(false)
// 跳转到指定时间点
const jumpToSpecificTime = (targetTime) => {
try {
if (!startDateTime.value || !endDateTime.value) {
console.error("时间轴起始时间或结束时间未定义");
ElMessage.error('时间轴未初始化');
return false;
}
// 停止当前自动播放
if (isPlaying.value) {
stopAutoPlay();
}
const start = new Date(startDateTime.value).getTime();
const end = new Date(endDateTime.value).getTime();
const totalMs = totalMilliseconds.value;
// 校验目标时间是否有效
if (!(targetTime instanceof Date) || isNaN(targetTime.getTime())) {
console.error("目标时间无效:", targetTime);
ElMessage.error('目标时间格式无效');
return false;
}
const targetMs = targetTime.getTime();
// 校验目标时间是否在范围内
if (targetMs < start || targetMs > end) {
console.error("目标时间不在时间轴范围内:", targetTime);
ElMessage.warning('目标时间不在当前时间轴范围内');
return false;
}
// 计算目标时间点的百分比位置
const percentPosition = ((targetMs - start) / totalMs) * 100;
// 只更新结束滑块位置
endHandlePercent.value = Math.max(0, Math.min(100, percentPosition));
// 更新选中时间
updateSelectedTimes();
// 标记为手动选择时间点
isDraged.value = false;
is_flag_isRealtime.value = false;
isConfirmedWithRange.value = false; // 设置为false以显示完整的选中区域
// 强制更新视图
// nextTick(() => {
// updateSelectedTimes();
// console.log("跳转到指定时间:", targetTime, "滑块位置:", percentPosition);
// // 调用UE5回调函数
// // if (window.ue5) {
// // window.ue5("callBackTimeFn", String(JSON.stringify({
// // isRealtime: false,
// // replayTime: formatDateTime(targetTime),
// // taskCode: String(taskCode_everyChange.value),
// // })));
// // wssOpenHandle({
// // isRealtime: false,
// // replayTime: formatDateTime(targetTime),
// // taskCode: String(taskCode_everyChange.value),
// // });
// // }
// });
playForward();
return true;
} catch (error) {
console.error("跳转到指定时间点出错:", error);
ElMessage.error('跳转时间点失败');
return false;
}
};
const wssOpenHandle = (data) => {
// console.log('wssOpenHandle', wss,wss.readyState, WebSocket.OPEN);
......@@ -142,9 +223,20 @@ const wssOpenHandle = (data) => {
};
const wssResponeFlag_isSuccess = ref(true);
const loading = ref('');
const wssMessageHandle = () => {
const wssMessageHandle = () => {
// let WwflagToNext = 0
wss.onmessage = (event) => {
const data = JSON.parse(event.data);
// 回复已收到数据的确认
wssOpenHandle({
type: "confirm",
taskCode: String(taskCode_everyChange.value),
clientType: "web"
})
// console.log('setTimeout:', (1000*60)/playbackSpeed.value,playbackSpeed.value);
// 使用 Promise 包装 setTimeout
......@@ -155,11 +247,17 @@ const loading = ref('');
// }, 2000)
// })
console.log('我是timer获取的wssRespone:', data);
let flagToNext = 0
if (data.type === 'error') {
wssResponeFlag_isSuccess.value = false;
(loading.value).close()
message.error("已暂停,没有查询到该时间段的历史数据!!!");
// eleplate plus 关闭loading
// (loading.value).close()
Loading.hide()
ElMessage({
type: 'error',
message: `已暂停,没有查询到该时间段的历史数据!!!`,
})
// console.log("获取的wssResponeFlag_isSuccess信息1:", wssResponeFlag_isSuccess.value);
useAppStoreInstance.setglobalStartWss(false)
stopAutoPlay();
......@@ -169,23 +267,31 @@ const loading = ref('');
// 处理日志数据
// console.log("endDateTime.value === selectedEndTime.value:", endDateTime.value , selectedEndTime.value.toISOString(),endDateTime.value === selectedEndTime.value);
useAppStoreInstance.setglobalStartWss(true)
// clearTimeout(WwflagToNext);
if (flagToNext !== 0) {
clearTimeout(flagToNext);
}
// playForward();
console.log("再次获取数据",endDateTime.value === selectedEndTime.value.toISOString());
if (endDateTime.value === selectedEndTime.value.toISOString()) {
stopAutoPlay();
}else{
playForward();
// startAutoPlay()
}
// startAutoPlay();
// toggleAutoPlay();
console.log("这里是startAutoPlay()");
if(loading.value){
(loading.value).close()
}else{
console.log("99999999999999",loading.value);
// if(loading.value){
// (loading.value).close()
Loading.hide()
// }else{
// console.log("99999999999999",loading.value);
}
// }
wssResponeFlag_isSuccess.value = true;
// message.success("同步时间轴数据状态成功!!!");
// console.log('我是history的数据:', data);
......@@ -198,13 +304,19 @@ const loading = ref('');
}
// 处理服务器返回的数据
flagToNext = setTimeout(() => {
stopAutoPlay();
}, (1000*60)/playbackSpeed.value);
};
// WwflagToNext = setTimeout(() => {
// stopAutoPlay();
// }, (1000*60)/playbackSpeed.value);
}
// 日期时间状态 (精确到秒)
const endDateTime = ref(new Date(Date.now() - 24 * 60 * 60 * 1000).toISOString()); // 当前时间作为结束时间
const startDateTime = ref(new Date(Date.now() - 4 * 24 * 60 * 60 * 1000).toISOString()); // 三天前作为开始时间
const startDateTime = ref(new Date(Date.now() - 4 *24 * 60 * 60 * 1000).toISOString()); // 三天前作为开始时间
const dateRange = ref([]);
// 滑块位置(百分比)
......@@ -220,7 +332,7 @@ const sliderTrack = ref(null);
// 选中的时间
const selectedStartTime = ref(new Date(startDateTime.value));
const selectedEndTime = ref(new Date(endDateTime.value));
const selectedEndTime = ref(new Date(startDateTime.value));
// 自动播放相关状态
const isPlaying = ref(false);
......@@ -289,9 +401,9 @@ const shortcuts = [
const pick_select_date = ref();
const pick_select_date_handFn = (val) => {
if (!isDraged.value) {
window.ue5("callBackTimeFn", String(JSON.stringify({
taskCode:String(taskCode_everyChange.value),
})));
// window.ue5("callBackTimeFn", String(JSON.stringify({
// taskCode:String(taskCode_everyChange.value),
// })));
// wssOpenHandle({
// taskCode:String(taskCode_everyChange.value),
// })
......@@ -311,7 +423,7 @@ const toNumber = (value) => {
}
// 点击确认后,处理日期范围变化
const handleDateRangeChange = async (val) => {
console.log("我执行了,",val);
taskCode_everyChange.value = String(Date.now());
useAppStoreInstance.setglobalSubsystemTaskCode(toNumber(Date.now()));
......@@ -319,16 +431,18 @@ const handleDateRangeChange = async (val) => {
if(isChange_flag_select_date.value) {
wssResponeFlag_isSuccess.value = true;
isPlaying.value = false;
loading.value = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
})
// element plus组件显示加载中
// loading.value = ElLoading.service({
// lock: true,
// text: 'Loading',
// background: 'rgba(0, 0, 0, 0.7)',
// })
Loading.show()
if (val && val.length === 2) {
startDateTime.value = val[0].toISOString();
endDateTime.value = val[1].toISOString();
console.log("//////////////////",val[0],"4444444444--",pick_select_date.value[0]);
// console.log("//////////////////",val[0],"4444444444--",pick_select_date.value[0]);
useAppStoreInstance.setglobalSubsystemSelectedStartTime(val);
......@@ -354,18 +468,26 @@ const handleDateRangeChange = async (val) => {
console.log("*************",pick_select_date.value[0],"---------",formatDateTime(pick_select_date.value[0]));
if(window.ue5) {
window.ue5("callBackTimeFn", String(JSON.stringify({
wssOpenHandle({
isRealtime: is_flag_isRealtime.value? true: false,
startTime: formatDateTime(pick_select_date.value[0]),
endTime: formatDateTime(pick_select_date.value[1]),
taskCode: String(taskCode_everyChange.value),
})))
wssOpenHandle({
})
window.ue5("callBackTimeFn", String(JSON.stringify({
isRealtime: is_flag_isRealtime.value? true: false,
startTime: formatDateTime(pick_select_date.value[0]),
endTime: formatDateTime(pick_select_date.value[1]),
taskCode: String(taskCode_everyChange.value),
})
//时间参数
// isRealtime:"false",
// startTime:"2025-11-03 00:00:00",
// endTime:"2025-11-04 00:00:00",
// taskCode:"1111111111"
})))
}
......@@ -379,26 +501,35 @@ const handleDateRangeChange = async (val) => {
} else {
message.warning("当前时间段未发生变化");
ElMessage({
type: 'warning',
message: `当前时间段未发生变化`,
})
}
isChange_flag_select_date.value = false;
} else {
message.warning("时间范围为空,自动执行最近24小时");
ElMessage({
type: 'warning',
message: `时间范围为空,自动执行最近24小时`,
})
isDateRangeNotEmpty.value = true;
isConfirmedWithRange.value = false; // 重置标记
is_flag_isRealtime.value = true;
playbackSpeed.value = 1;
if(window.ue5) {
window.ue5("callBackTimeFn", String(JSON.stringify({
isRealtime: is_flag_isRealtime.value? true: false,
// startTime: formatDateTime(pick_select_date.value[0]),
// endTime: formatDateTime(pick_select_date.value[1]),
// taskCode: String(taskCode_everyChange.value),
})))
wssOpenHandle({
isRealtime: is_flag_isRealtime.value? true: false,
})
}
// 标志实时模式
// if(window.ue5) {
// window.ue5("callBackTimeFn", String(JSON.stringify({
// isRealtime: is_flag_isRealtime.value? true: false,
// // startTime: formatDateTime(pick_select_date.value[0]),
// // endTime: formatDateTime(pick_select_date.value[1]),
// // taskCode: String(taskCode_everyChange.value),
// })))
// wssOpenHandle({
// isRealtime: is_flag_isRealtime.value? true: false,
// })
// }
// 强制更新视图
nextTick(() => {
......@@ -611,7 +742,10 @@ const curplaybackDirection = ref(false);
// 切换自动播放状态
const toggleAutoPlay = () => {
if (is_flag_isRealtime.value) {
message.warning('当前为实时播放模式,不可执行播放操作!');
ElMessage({
type: 'warning',
message: '当前为实时播放模式,不可执行播放操作!',
})
}else{
is_flag_playBackwarding.value = true;
......@@ -656,7 +790,7 @@ const playForward = async () => {
is_flag_playBackwarding.value = true;
if (1) {
console.log("我是开始向前播放stopAutoPlay()",isPlaying.value);
console.log("再次我是开始向前播放stopAutoPlay()",isPlaying.value);
// stopAutoPlay(); // 先停止当前播放
isPlaying.value = true;
isConfirmedWithRange.value = false; // 重置标记
......@@ -669,7 +803,10 @@ const playForward = async () => {
updateSelectedTimes();
});
} else {
message.warning('正在前向播放!');
ElMessage({
type: 'warning',
message: '正在前向播放!',
})
}
is_flag_playForwarding.value = false;
......@@ -751,6 +888,7 @@ const moveEndHandle = () => {
// 根据播放方向和速度调整结束滑块位置
const increment = percentPerSecond * playbackSpeed.value * playbackDirection.value;
// 这里可以尝试
endHandlePercent.value += increment;
// console.log("endHandlePercent.value",endHandlePercent.value);
......@@ -891,7 +1029,7 @@ const updateTimeline = () => {
// 重置滑块位置
startHandlePercent.value = 0;
endHandlePercent.value = isConfirmedWithRange.value ? 0 : 100;
endHandlePercent.value = 0 ;
};
onMounted(() => {
......@@ -900,10 +1038,14 @@ onMounted(() => {
// 初始化时,默认实时传输
if(window.ue5) {
window.ue5("callBackTimeFn", String(JSON.stringify({
isRealtime: is_flag_isRealtime.value? true: false,
// startTime: formatDateTime(pick_select_date.value[0]),
// endTime: formatDateTime(pick_select_date.value[1]),
// taskCode: String(taskCode_everyChange.value),
// isRealtime:"false",
// startTime:"2025-11-03 00:00:00",
// endTime:"2025-11-04 00:00:00",
// taskCode:"1111111111"
// isRealtime: is_flag_isRealtime.value? true: false,
// // startTime: formatDateTime(pick_select_date.value[0]),
// // endTime: formatDateTime(pick_select_date.value[1]),
// // taskCode: String(taskCode_everyChange.value),
})))
// wssOpenHandle({
// isRealtime: is_flag_isRealtime.value? true: false,
......
......@@ -55,7 +55,9 @@
<img v-if="isPlaying" src="@/assets/images/footers/videoPlay.png" alt="" style="width: 8px; height: 10px;" />
</el-icon>
</el-button>
<el-button size="mini" @click="jumpToSpecificTime(new Date('2025-11-03 00:00:00'))">时间</el-button>
<!-- <el-button circle class="right_block_conter_btn" @click="playForward">
<el-button circle class="right_block_conter_btn" @click="playForward">
<el-icon>
<img src="@/assets/images/footers/videoPlay_right.png" alt="" style="width: 8px; height: 10px;" />
</el-icon>
......@@ -114,7 +116,7 @@
@mousedown="startDrag('end', $event)"
>
<div class="handle-rail">
<div class="handle-tooltip" :class="{'handle-tooltip_auto': isPlaying}">{{ formatDateTime(selectedEndTime) }}</div>
<div class="handle-tooltip" :class="{'handle-tooltip_auto': !is_flag_isRealtime}">{{ formatDateTime(selectedEndTime) }}</div>
</div>
</div>
</div>
......@@ -126,17 +128,98 @@
<script setup>
import { VideoPlay, VideoPause, CaretLeft, CaretRight } from '@element-plus/icons-vue';
import { message } from 'ant-design-vue';
import { ElLoading } from 'element-plus'
import { ElLoading, ElMessage } from 'element-plus'
import Loading from '@/pages/all/components/loadingComponent/index.js'
import { ref, onMounted, onUnmounted, computed, watch, nextTick } from 'vue';
// import wss from '@/utils/subSystemRequestSocket.js'
import useAppStore from '@/store/module/app'
import { Hide, View } from '@element-plus/icons-vue'
import { start } from 'nprogress';
import { useRoute } from 'vue-router';
import { el } from 'element-plus/es/locales.mjs';
import { objectType } from 'ant-design-vue/es/_util/type';
// 跳转到指定时间点
const jumpToSpecificTime = (targetTime) => {
try {
if (!startDateTime.value || !endDateTime.value) {
console.error("时间轴起始时间或结束时间未定义");
ElMessage.error('时间轴未初始化');
return false;
}
// 停止当前自动播放
if (isPlaying.value) {
stopAutoPlay();
}
const start = new Date(startDateTime.value).getTime();
const end = new Date(endDateTime.value).getTime();
const totalMs = totalMilliseconds.value;
// 校验目标时间是否有效
if (!(targetTime instanceof Date) || isNaN(targetTime.getTime())) {
console.error("目标时间无效:", targetTime);
ElMessage.error('目标时间格式无效');
return false;
}
const targetMs = targetTime.getTime();
// 校验目标时间是否在范围内
if (targetMs < start || targetMs > end) {
console.error("目标时间不在时间轴范围内:", targetTime);
ElMessage.warning('目标时间不在当前时间轴范围内');
return false;
}
// 计算目标时间点的百分比位置
const percentPosition = ((targetMs - start) / totalMs) * 100;
// 只更新结束滑块位置
endHandlePercent.value = Math.max(0, Math.min(100, percentPosition));
// 更新选中时间
updateSelectedTimes();
// 标记为手动选择时间点
isDraged.value = false;
is_flag_isRealtime.value = false;
isConfirmedWithRange.value = false; // 设置为false以显示完整的选中区域
// 强制更新视图
// nextTick(() => {
// updateSelectedTimes();
// console.log("跳转到指定时间:", targetTime, "滑块位置:", percentPosition);
// // 调用UE5回调函数
wssOpenHandle({
// isRealtime: useAppStoreInstance.globalSubsystemIsFastForward? true: false,
isFastForward: useAppStoreInstance.globalSubsystemIsFastForward? true: false,
speed: useAppStoreInstance.globalSubsystemSpeed,
replayTime: formatDateTime(selectedEndTime.value),
taskCode: toNumber(useAppStoreInstance.globalSubsystemTaskCode),
satelliteId: useAppStoreInstance.globalSatelliteSearchID,
})
// });
// playForward();
// toggleAutoPlay();
return true;
} catch (error) {
console.error("跳转到指定时间点出错:", error);
ElMessage.error('跳转时间点失败');
return false;
}
};
const route = useRoute();
const useAppStoreInstance = useAppStore();
const isFlagTimeLineShow = ref(true);
......@@ -158,21 +241,42 @@ const loading = ref('');
const wssMessageHandle = () => {
useAppStoreInstance.subsystemSocket.onmessage = (event) => {
const Jsondata = JSON.parse(event.data);
console.log("222222222FOOT2---------",Jsondata);
// wssOpenHandle({
// type: "confirm",
// taskCode: toNumber(useAppStoreInstance.globalSubsystemTaskCode),
// clientType: "web"
// })
let flagToNext = 0
// console.log("222222222FOOT2---------",Jsondata);
if (Jsondata.type === 'no_data') {
// wssResponeFlag_isSuccess.value = false;
(loading.value).close()
message.error("已暂停,没有查询到该时间段的历史数据!!!");
// 关闭eleplate loading
// (loading.value).close()
Loading.hide()
ElMessage({
type: 'error',
message: `已暂停,没有查询到该时间段的历史数据!!!`,
})
stopAutoPlay();
// console.log("获取的wssResponeFlag_isSuccess信息2:", wssResponeFlag_isSuccess.value);
}else if (Jsondata.type === 'data_end') {
(loading.value).close()
message.error("已暂停,数据推送完成!!!");
Loading.hide()
ElMessage({
type: 'error',
message: `已暂停,数据推送完成!!!`,
})
stopAutoPlay();
}else {
useAppStoreInstance.setSubsystemSocketContent(Jsondata)
if(loading.value){
(loading.value).close()
// if(loading.value){
// (loading.value).close()
// }
Loading.hide()
if (flagToNext !== 0) {
clearTimeout(flagToNext);
}
// startAutoPlay();
if (endDateTime.value === selectedEndTime.value.toISOString()) {
......@@ -225,7 +329,10 @@ const loading = ref('');
// // console.log('我是left,type == time获取的wssRespone:', JSONdata.time.toLocaleString(), typeof JSONdata.time.toLocaleString());
// }
// 处理服务器返回的数据
// 处理服务器返回的数据后续处理是否暂停处理
flagToNext = setTimeout(() => {
stopAutoPlay();
}, (1000*60)/playbackSpeed.value);
};
}
......@@ -311,7 +418,7 @@ const shortcuts = [
},
];
const pick_select_date = ref();
const pick_select_date = ref();//未使用
const pick_select_date_handFn = (val) => {
if (!isDraged.value) {
// window.ue5("callBackTimeFn", String(JSON.stringify({
......@@ -326,8 +433,8 @@ const pick_select_date_handFn = (val) => {
isChange_flag_select_date.value = true;
}
const isChange_flag_select_date = ref(false);
const taskCode_everyChange = ref(Date.now());
const isChange_flag_select_date = ref(false);//未使用
const taskCode_everyChange = ref(Date.now());//每次进入分系统时,生成一个新的taskCode
const toNumber = (value) => {
......@@ -337,18 +444,20 @@ const toNumber = (value) => {
// 点击确认后,处理日期范围变化
const handleDateRangeChange = async (val) => {
// taskCode_everyChange.value = String(Date.now());
console.log("/****/*/*/*/*",val);
// console.log("/****/*/*/*/*",val);
useAppStoreInstance.setglobalSubsystemTaskCode(taskCode_everyChange.value);
if (val && val.length > 0) {
// if(isChange_flag_select_date.value) {
wssResponeFlag_isSuccess.value = true;
isPlaying.value = false;
loading.value = ElLoading.service({
lock: true,
text: 'Loading',
background: 'rgba(0, 0, 0, 0.7)',
})
//element plus组件显示加载中
// loading.value = ElLoading.service({
// lock: true,
// text: 'Loading',
// background: 'rgba(0, 0, 0, 0.7)',
// })
Loading.show()
if (val && val.length === 2) {
console.log("11111111111111111",val[0]);
......@@ -407,7 +516,10 @@ const handleDateRangeChange = async (val) => {
// }
isChange_flag_select_date.value = false;
} else {
message.warning("时间范围为空,自动执行最近24小时");
ElMessage({
type: 'warning',
message: "时间范围为空,自动执行最近24小时",
})
isDateRangeNotEmpty.value = true;
isConfirmedWithRange.value = false; // 重置标记
is_flag_isRealtime.value = true;//实时模式
......@@ -655,7 +767,10 @@ const curplaybackDirection = ref(false);
// 切换自动播放状态
const toggleAutoPlay = () => {
if (is_flag_isRealtime.value) {
message.warning('当前为实时播放模式,不可执行播放操作!');
ElMessage({
type: 'warning',
message: '当前为实时播放模式,不可执行播放操作!',
})
}else{
is_flag_playBackwarding.value = true;
......@@ -727,7 +842,10 @@ const playForward = async () => {
updateSelectedTimes();
});
} else {
message.warning('正在前向播放!');
ElMessage({
type: 'warning',
message: '正在前向播放!',
})
}
is_flag_playForwarding.value = false;
......@@ -968,7 +1086,7 @@ const stratEndTimeTransformTime = (time) => {
};
onMounted(() => {
updateTimeline();
console.log("我是初始",useAppStoreInstance.globalSubsystemSelectedStartTime[0].getFullYear(),useAppStoreInstance.globalSubsystemSelectedStartTime);
console.log("我是初始",useAppStoreInstance.globalSubsystemSelectedStartTime);
dataPickFalg.value = route.query.disabled || false;
dateRange.value = useAppStoreInstance.globalSubsystemSelectedStartTime
dataPickStartTime.value = formatDateTime(useAppStoreInstance.globalSubsystemSelectedStartTime[0]);
......
......@@ -280,7 +280,9 @@ const objectSelector = [
position: relative;
width: 100%; /* 自适应宽度 */
}
:deep(.custom-select .el-select__wrapper) {
height: 12.5px;
}
.section-item_content_down{
width: 100%;
/* background-color: #9520a0; */
......
......@@ -574,7 +574,9 @@ const indicatorStyle = computed(() => {
/* color: #ffffff; */
border:1px solid #000000;
}
:deep(.custom-select .el-select__wrapper) {
height: 12.5px;
}
:deep(.custom-select .el-select ){
background: #000000;
border:1px solid #000000;
......
......@@ -210,7 +210,7 @@
<img src='@/assets/images/lefts/info.png' alt="" class="satellite-icon_bottom">
</template>
</el-table-column>
<el-table-column prop="station" label="地面站名称" row-class-name="hover-row" width="72"></el-table-column>
<el-table-column prop="station" label="地面站名称" row-class-name="hover-row" width="95"></el-table-column>
<el-table-column label="KU天线" width="62" align="center">
<template #default="scope">
<div :class="{ 'errorRed': activeTab != 'equipment' && scope.row.ku != '-' }">{{ scope.row.ku }}</div>
......
......@@ -35,7 +35,7 @@ const props = defineProps({
watch(() => props.propsDate, (newVal, oldVal) => {
if (newVal?.isFirstSearch) {
changeCharte();
console.log("完全不一样的数据");
console.log("完全不一样的数据",newVal);
}
}, { immediate: true, deep: true })
......@@ -108,9 +108,34 @@ function changeCharte() {
// saveAsImage: {}
// }
// },
legend: {
show: true,
data: [props.propsDate.chartName],
textStyle: {
color: '#fff',
fontSize: 12
},
top: '10px',
// left: '-5px',
backgroundColor: 'transparent',
borderColor: 'transparent',
padding: [5, 10],
// 添加图标样式控制
icon: 'rect', // 使用矩形图标
itemWidth: 15, // 图例宽度
itemHeight: 5, // 图例高度,设为较小值形成线条效果
},
grid: {
// top: '-1%',
right: '8%',
// bottom: '16%',
left: '15%'
},
xAxis: {
type: 'category',
boundaryGap: false,
show:false,
data: props.propsDate.dataX,
axisLine: {
lineStyle: {
......@@ -123,6 +148,9 @@ function changeCharte() {
},
yAxis: {
type: 'value',
min:props.propsDate.minY,
max:props.propsDate.maxY,
boundaryGap: [0, '100%'],
axisLine: {
lineStyle: {
......@@ -130,7 +158,10 @@ function changeCharte() {
}
},
axisLabel: {
color: '#fff'
color: '#fff',
formatter: function (value) {
return value.toFixed(2); // 保留三位小数
}
},
splitLine: {
lineStyle: {
......@@ -144,10 +175,10 @@ function changeCharte() {
start: 0,
end: 100
},
{
start: 0,
end: 100
}
// {
// start: 0,
// end: 100
// }
],
series: [
{
......@@ -186,7 +217,9 @@ function changeCharte() {
fontSize: 12
},
// 固定tooltip位置在顶部
position: function (pos, params, dom, rect, size) {
return ['15%', pos[1]];
}
}
};
......@@ -231,14 +264,22 @@ function initChart() {
// saveAsImage: {}
// }
// },
grid: {
top: '-1%',
right: '8%',
// bottom: '16%',
left: '15%'
},
xAxis: {
type: 'category',
boundaryGap: false,
show:false,
data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
axisLine: {
lineStyle: {
color: '#fff'
}
},
axisLabel: {
color: '#fff'
......@@ -246,6 +287,8 @@ function initChart() {
},
yAxis: {
type: 'value',
min:props.propsDate.minY,
max:props.propsDate.maxY,
boundaryGap: [0, '100%'],
axisLine: {
lineStyle: {
......@@ -270,14 +313,11 @@ function initChart() {
start: 0,
end: 100
},
{
start: 0,
end: 100
}
],
series: [
{
name: 'CDF',
name: props.propsDate.chartName || 'CDF',
type: 'line',
smooth: true,
symbol: 'none',
......@@ -313,7 +353,9 @@ function initChart() {
fontSize: 12
},
// 固定tooltip位置在顶部
position: function (pos, params, dom, rect, size) {
return ['15%', pos[1]];
}
}
};
......
<template>
<!-- <div class="left2all"> -->
<!-- <div class="equipment-panel_header11">
<div class="left2all">
<div class="equipment-panel_header11">
<div class="equipment-panel_header11_content">
<div class="header-item header-item-left" @click="backHomeClick">
<span class="header-label">
......@@ -43,7 +43,7 @@
</div>
</div>
</div> -->
</div>
<div class="constellation-panel">
<!-- 顶部区域:标题与核心指标 -->
......@@ -85,8 +85,8 @@
<span class="equipment-panel_header-item-value">姿轨控系统</span>
</div> -->
<div class="query-panel">
<div class="header-container" style="height: 50px;padding-bottom: 10px;">
<div class="system-tabs">
<div class="header-container" style="height: 35px;padding-bottom: 40px;">
<div class="system-tabs1">
<div v-for="(item, index) in arcHistorytabs" :key="index" class="tab-item" :class="{ active: arcHistoryActiveIndex === index }"
@click="handleArcHistoryTabClick(index)">
{{ item }}
......@@ -154,10 +154,11 @@
</div>
</div>
</div>
<!-- </div> -->
</div>
</template>
<script setup>
import 'element-plus/dist/index.css'
import { ref, onMounted, onBeforeMount, nextTick, watch } from 'vue';
import curve from './component/cruve.vue';
import useAppStore from '@/store/module/app.js';
......@@ -165,7 +166,7 @@ import useAppStore from '@/store/module/app.js';
import wss from '@/utils/subSystemRequestSocket.js'
import { useRouter } from 'vue-router';
import { getSubSystemOpitionListApi,getSubSystemCurveListApi } from '../../api/Zodiac'
import { message } from 'ant-design-vue';
const router = useRouter();
const useAppStoreInstance = useAppStore();
......@@ -295,10 +296,10 @@ const CONTROL_wssTransformGroundSatelliteData = (data) => {
// 检查 data 是否为对象且不为 null
if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
return [
{ label: '通道', value: data.channel === null ? 0 : data.channel },
{ label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
{ label: '惯性系角速度确定模式TMKS011工程值', value: data.angularVelocityModeTmks011 === null ? 0 : data.angularVelocityModeTmks011 },
{ label: '惯性系姿态确定模式TMKS010工程值', value: data.attitudeDeterminationModeTmks010 === null ? 0 : data.attitudeDeterminationModeTmks010 },
// { label: '通道', value: data.channel === null ? 0 : data.channel },
// { label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
// { label: '惯性系角速度确定模式TMKS011工程值', value: data.angularVelocityModeTmks011 === null ? 0 : data.angularVelocityModeTmks011 },
// { label: '惯性系姿态确定模式TMKS010工程值', value: data.attitudeDeterminationModeTmks010 === null ? 0 : data.attitudeDeterminationModeTmks010 },
{ label: '电推工作模式TMK521工程值', value: data.electricPropulsionModeTmk521 === null ? 0 : data.electricPropulsionModeTmk521 },
{ label: '误差角速度XTMK580工程值', value: data.errorAngularVelocityXTmk580 === null ? 0 : data.errorAngularVelocityXTmk580 },
......@@ -308,7 +309,7 @@ const CONTROL_wssTransformGroundSatelliteData = (data) => {
{ label: '误差姿态角YTMK578工程值', value: data.errorAttitudeAngleYTmk578 === null ? 0 : data.errorAttitudeAngleYTmk578 },
{ label: '误差姿态角ZTMK579工程值', value: data.errorAttitudeAngleZTmk579 === null ? 0 : data.errorAttitudeAngleZTmk579 },
{ label: '磁力矩器工作模式TMK523工程值', value: data.magnetorquerModeTmk523 === null ? 0 : data.magnetorquerModeTmk523 },
{ label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
// { label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
{ label: '轨道系角速度wboxTMK508工程值', value: data.orbitAngularVelocityXTmk509 === null ? 0 : data.orbitAngularVelocityXTmk509 },
{ label: '轨道系角速度wboyTMK509工程值', value: data.orbitAngularVelocityYTmk509 === null ? 0 : data.orbitAngularVelocityYTmk509 },
{ label: '轨道系角速度wbozTMK510工程值', value: data.orbitAngularVelocityZTmk510 === null ? 0 : data.orbitAngularVelocityZTmk510 },
......@@ -341,8 +342,8 @@ const PAYLOAD_wssTransformGroundSatelliteData = (data) => {
// 检查 data 是否为对象且不为 null
if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
return [
{ label: '通道', value: data.channel === null ? 0 : data.channel },
{ label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
// { label: '通道', value: data.channel === null ? 0 : data.channel },
// { label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
{ label: '波束模式', value: data.beamModeTmz147 === null ? 0 : data.beamModeTmz147 },
{ label: '变频转发器5V', value: data.converter5vTmz201 === null ? 0 : data.converter5vTmz201 },
// { label: '通道', value: data.channel === null ? 0 : data.channel },
......@@ -355,7 +356,7 @@ const PAYLOAD_wssTransformGroundSatelliteData = (data) => {
{ label: '变频转发器V接收前端温度1', value: data.converterVReceiveFrontendTemp1Tmz206 === null ? 0 : data.converterVReceiveFrontendTemp1Tmz206 },
{ label: '变频转发器V接收前端温度2', value: data.converterVReceiveFrontendTemp2Tmz207 === null ? 0 : data.converterVReceiveFrontendTemp2Tmz207 },
// { label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
{ label: '扩展小区表状态TMZ058工程值', value: data.extendedCellTableStatusTmz058 === null ? 0 : data.extendedCellTableStatusTmz058 },
// { label: '扩展小区表状态TMZ058工程值', value: data.extendedCellTableStatusTmz058 === null ? 0 : data.extendedCellTableStatusTmz058 },
{ label: '馈电1方位角', value: data.feed1AzimuthAngleTmz151 === null ? 0 : data.feed1AzimuthAngleTmz151 },
{ label: '馈电1俯仰角', value: data.feed1ElevationAngleTmz150 === null ? 0 : data.feed1ElevationAngleTmz150 },
{ label: '馈电1信关站TMZ149工程值', value: data.feed1GatewayStationTmz149 === null ? 0 : data.feed1GatewayStationTmz149 },
......@@ -365,7 +366,7 @@ const PAYLOAD_wssTransformGroundSatelliteData = (data) => {
{ label: '馈电下一弧段开始时间', value: data.feedNextArcStartTimeTmz137 === null ? 0 : data.feedNextArcStartTimeTmz137 },
{ label: '馈电指向时间_秒', value: data.feedPointingTimeSecondsTmz148 === null ? 0 : data.feedPointingTimeSecondsTmz148 },
{ label: '地面站参数表状态', value: data.groundStationParamTableStatusTmz128 === null ? 0 : data.groundStationParamTableStatusTmz128 },
{ label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
// { label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
{ label: '载管CPU使用率TMZ013工程值', value: data.payloadCpuUsageTmz013 === null ? 0 : data.payloadCpuUsageTmz013 },
{ label: '载管状态TMZ009工程值', value: data.payloadManagementStatusTmz009 === null ? 0 : data.payloadManagementStatusTmz009 },
{ label: '载管主备状态TMZ115工程值', value: data.payloadMasterSlaveStatusTmz115 === null ? 0 : data.payloadMasterSlaveStatusTmz115 },
......@@ -393,11 +394,11 @@ const PAYLOAD_wssTransformGroundSatelliteData = (data) => {
{ label: '接收阵-温度遥测1', value: data.receiveArrayTemp1Tmz355 === null ? 0 : data.receiveArrayTemp1Tmz355 },
{ label: '接收阵-温度遥测2', value: data.receiveArrayTemp2Tmz356 === null ? 0 : data.receiveArrayTemp2Tmz356 },
{ label: '接收阵-温度遥测3', value: data.receiveArrayTemp3Tmz357 === null ? 0 : data.receiveArrayTemp3Tmz357 },
{ label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
// { label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
{ label: '接收波控3.3V电压', value: data.receiveWaveControl33vVoltageTmz224 === null ? 0 +'A' : data.receiveWaveControl33vVoltageTmz224+'A' },
{ label: '反向路径补偿模式', value: data.reversePathCompensationModeTmz195 === null ? 0 +'A' : data.reversePathCompensationModeTmz195+'A' },
{ label: '反向额定输入通量密度', value: data.reverseRatedInputFluxDensityTmz196 === null ? 0 +'A' : data.reverseRatedInputFluxDensityTmz196+'A' },
{ label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
// { label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
{ label: '遥测轮询计数TMZ001工程值', value: data.telemetryPollingCountTmz001 === null ? 0 : data.telemetryPollingCountTmz001 },
{ label: '发射1波控3.3V电压', value: data.transmit1WaveControl33vCurrentTmz221 === null ? 0 : data.transmit1WaveControl33vCurrentTmz221 },
{ label: '发射1波控3.3V电流', value: data.transmit1WaveControl33vVoltageTmz220 === null ? 0 : data.transmit1WaveControl33vVoltageTmz220 },
......@@ -422,9 +423,9 @@ const PAYLOAD_wssTransformGroundSatelliteData = (data) => {
{ label: '发射阵2-1.5V遥测', value: data.transmitArray215vTmz305 === null ? 0 +'A' : data.transmitArray215vTmz305+'A' },
{ label: '发射阵2-3.3V遥测', value: data.transmitArray233vTmz306 === null ? 0 +'A' : data.transmitArray233vTmz306+'A' },
{ label: '发射阵2-3.6V遥测', value: data.transmitArray236vTmz307 === null ? 0 : data.transmitArray236vTmz307 },
{ label: '发射等通量模式', value: data.transmitEqualFluxModeTmz194 === null ? 0 : data.transmitEqualFluxModeTmz194 },
// { label: '发射等通量模式', value: data.transmitEqualFluxModeTmz194 === null ? 0 : data.transmitEqualFluxModeTmz194 },
{ label: '转发器频率源主备状态TMZ055工程值', value: data.transponderFreqSourceStatusTmz055 === null ? 0 : data.transponderFreqSourceStatusTmz055 },
{ label: '时间戳', value: data.ts === null ? 0 : data.ts },
// { label: '时间戳', value: data.ts === null ? 0 : data.ts },
];
} else if (Array.isArray(data)) {
......@@ -447,13 +448,13 @@ const ELECTRONICS_wssTransformGroundSatelliteData = (data) => {
// 检查 data 是否为对象且不为 null
if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
return [
{ label: '通道', value: data.channel === null ? 0 : data.channel },
{ label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
// { label: '通道', value: data.channel === null ? 0 : data.channel },
// { label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
{ label: 'GNSS-定轨数据有效标记TM010工程值', value: data.gnssOrbitValidTm010 === null ? 0 : data.gnssOrbitValidTm010 },
{ label: 'GNSS-定位数据有效标记TM009工程值', value: data.gnssPositionValidTm009 === null ? 0 : data.gnssPositionValidTm009 },
{ label: 'GNSSB-定轨数据有效标记TMC490工程值', value: data.gnssbOrbitDataValidTmc490 === null ? 0+'dBm' : data.gnssbOrbitDataValidTmc490+'dBm' },
{ label: 'GNSSB-定位数据有效标记TMC489工程值', value: data.gnssbPositionDataValidTmc489 === null ? 0 +'dBm' : data.gnssbPositionDataValidTmc489+'dBm' },
{ label: 'GNSSB-定轨数据有效标记TMC490工程值', value: data.gnssbOrbitDataValidTmc490 === null ? 0 : data.gnssbOrbitDataValidTmc490 },
{ label: 'GNSSB-定位数据有效标记TMC489工程值', value: data.gnssbPositionDataValidTmc489 === null ? 0 : data.gnssbPositionDataValidTmc489 },
{ label: 'KUA遥控位同步TMC003工程值', value: data.kuaTelecommandBitSyncTmc003 === null ? 0 : data.kuaTelecommandBitSyncTmc003 },
{ label: 'KUA遥控载波锁定标志TMC001工程值', value: data.kuaTelecommandCarrierLockTmc001 === null ? 0 : data.kuaTelecommandCarrierLockTmc001 },
{ label: 'KUA遥控指令计数TMC027工程值', value: data.kuaTelecommandCountTmc027 === null ? 0 : data.kuaTelecommandCountTmc027 },
......@@ -463,17 +464,17 @@ const ELECTRONICS_wssTransformGroundSatelliteData = (data) => {
{ label: 'KUB遥控载波锁定标志TMC031工程值', value: data.kubTelecommandCarrierLockTmc031 === null ? 0 : data.kubTelecommandCarrierLockTmc031 },
{ label: 'KUB遥控伪码锁定标志TMC032工程值', value: data.kubTelecommandPseudoCodeLockTmc032 === null ? 0 : data.kubTelecommandPseudoCodeLockTmc032 },
{ label: 'KUB发射机开关机状态TMC035工程值', value: data.kubTransmitterPowerStatusTmc035 === null ? 0 : data.kubTransmitterPowerStatusTmc035 },
{ label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
// { label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
{ label: 'QVA遥控指令计数TMC077工程值', value: data.qvaTelecommandCountTmc077 === null ? 0 : data.qvaTelecommandCountTmc077 },
{ label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
// { label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
{ label: '接收指令计数TMC333工程值', value: data.receivedCommandCountTmc333 === null ? 0 : data.receivedCommandCountTmc333 },
{ label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
// { label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
{ label: '遥控应急模式状态TMC594工程值', value: data.telecommandEmergencyModeTmc594 === null ? 0 : data.telecommandEmergencyModeTmc594 },
{ label: '遥测应急模式状态TMC626工程值', value: data.telemetryEmergencyModeTmc626 === null ? 0 : data.telemetryEmergencyModeTmc626 },
{ label: '境内外标识TMC524工程值', value: data.territoryFlagTmc524 === null ? 0 : data.territoryFlagTmc524 },
{ label: '测控工作模式TMC529工程值', value: data.ttcWorkModeTmc529 === null ? 0 : data.ttcWorkModeTmc529 },
{ label: '时间戳', value: data.ts === null ? 0 : data.ts },
// { label: '时间戳', value: data.ts === null ? 0 : data.ts },
];
} else if (Array.isArray(data)) {
......@@ -496,28 +497,28 @@ const POWER_wssTransformGroundSatelliteData = (data) => {
// 检查 data 是否为对象且不为 null
if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
return [
{ label: '通道', value: data.channel === null ? 0 : data.channel },
{ label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
{ label: '阳极电源输出电流TMK026工程值', value: data.anodeOutputCurrent === null ? 0 : data.anodeOutputCurrent },
// { label: '通道', value: data.channel === null ? 0 : data.channel },
// { label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
// { label: '阳极电源输出电流TMK026工程值', value: data.anodeOutputCurrent === null ? 0 : data.anodeOutputCurrent },
{ label: '阳极电源输出电压TMK025工程值', value: data.anodeOutputVoltage === null ? 0 : data.anodeOutputVoltage },
// { label: '阳极电源输出电压TMK025工程值', value: data.anodeOutputVoltage === null ? 0 : data.anodeOutputVoltage },
{ label: '蓄电池组电压TMY012工程值', value: data.batteryVoltageTmy012 === null ? 0+'V' : data.batteryVoltageTmy012+'V' },
{ label: '42V母线电压TMY011工程值', value: data.bus42vVoltageTmy011 === null ? 0 +'V' : data.bus42vVoltageTmy011+'V' },
{ label: 'CAN总线正确帧计数TMY002工程值', value: data.canCorrectFrameCountTmy002 === null ? 0 : data.canCorrectFrameCountTmy002 },
{ label: '充电电流TMY014工程值', value: data.chargeCurrentTmy014 === null ? 0 : data.chargeCurrentTmy014 },
{ label: '放电电流TMY015工程值', value: data.dischargeCurrentTmy015 === null ? 0 : data.dischargeCurrentTmy015 },
{ label: '42V负载电流TMY013工程值', value: data.loadCurrent42vTmy013 === null ? 0 : data.loadCurrent42vTmy013 },
{ label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
// { label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
{ label: '接收指令计数TMY003工程值', value: data.receiveCommandCountTmy003 === null ? 0 : data.receiveCommandCountTmy003 },
{ label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
{ label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
// { label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
// { label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
{ label: '方阵电流1TMY023工程值', value: data.solarArrayCurrent1Tmy023 === null ? 0 : data.solarArrayCurrent1Tmy023 },
{ label: '方阵电流2TMY024工程值', value: data.solarArrayCurrent2Tmy024 === null ? 0 : data.solarArrayCurrent2Tmy024 },
{ label: '遥测请求指令计数TMY001工程值', value: data.telemetryRequestCountTmy001 === null ? 0 : data.telemetryRequestCountTmy001 },
{ label: '时间戳', value: data.ts === null ? 0 : data.ts },
// { label: '时间戳', value: data.ts === null ? 0 : data.ts },
];
} else if (Array.isArray(data)) {
......@@ -540,11 +541,11 @@ const THERMAL_wssTransformGroundSatelliteData = (data) => {
// 检查 data 是否为对象且不为 null
if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
return [
{ label: '通道', value: data.channel === null ? 0 : data.channel },
{ label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
{ label: '蓄电池组温度1(热敏63)TMY026工程值', value: data.batteryTemp1 === null ? 0 : data.batteryTemp1 },
{ label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
{ label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
// { label: '通道', value: data.channel === null ? 0 : data.channel },
// { label: '实时/延时', value: data.dataType === null ? 0 : data.dataType },
// { label: '蓄电池组温度1(热敏63)TMY026工程值', value: data.batteryTemp1 === null ? 0 : data.batteryTemp1 },
// { label: '接收时间', value: data.onboardTime === null ? 0 : data.onboardTime },
// { label: '星上时间', value: data.receiveTime === null ? 0 : data.receiveTime },
{ label: 'RM11_+Y发射相控阵+Y侧', value: data.rm11YTransmitArrayYSide === null ? 0 : data.rm11YTransmitArrayYSide },
{ label: 'RM13_+Y发射相控阵-Y侧', value: data.rm13YTransmitArrayYSide3 === null ? 0+'V' : data.rm13YTransmitArrayYSide3+'V' },
{ label: 'RM15_-Y发射相控阵+Y侧', value: data.rm15YTransmitArrayYSide2 === null ? 0 +'V' : data.rm15YTransmitArrayYSide2+'V' },
......@@ -555,13 +556,13 @@ const THERMAL_wssTransformGroundSatelliteData = (data) => {
{ label: 'RM22_动量轮B温度', value: data.rm22MomentumWheelBTemp === null ? 0 : data.rm22MomentumWheelBTemp },
{ label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
// { label: '卫星编码', value: data.satelliteId === null ? 0 : data.satelliteId },
{ label: 'RM23_动量轮D温度', value: data.rm23MomentumWheelDTemp === null ? 0 : data.rm23MomentumWheelDTemp },
// { label: 'RM23_动量轮D温度', value: data.rm23MomentumWheelDTemp === null ? 0 : data.rm23MomentumWheelDTemp },
{ label: 'RM24_伺服控制器1安装面温度', value: data.rm24ServoController1MountTemp === null ? 0 : data.rm24ServoController1MountTemp },
{ label: 'RM26_星敏温度+Y侧', value: data.rm26StarSensorTempY === null ? 0 : data.rm26StarSensorTempY },
{ label: '时间戳', value: data.ts === null ? 0 : data.ts },
// { label: '时间戳', value: data.ts === null ? 0 : data.ts },
......@@ -661,7 +662,11 @@ const left2BottomOpition = ref({
// 查询处理函数
const cureSearchHandleFn = () => {
if (!isFlagOfSeletctType.value) {
message.error('请选择卫星粒度');
ElMessage({
type: 'error',
message: `请选择卫星粒度`,
})
}else{
......@@ -681,7 +686,13 @@ isFalgStartSearch.value = true;
console.log("propsDate-min--3333333333--------",{
endTime: historyTimeDateRange.value[1],
satelliteId: useAppStoreInstance.globalSatelliteSearchID==='0'? "4097": (useAppStoreInstance.globalSatelliteSearchID),
startTime: historyTimeDateRange.value[0],
subSystemType: arcHistorySubSystemOptions[arcHistoryActiveIndex.value],
code: historyCode.value,
});
getSubSystemCurveListApi({
endTime: historyTimeDateRange.value[1],
......@@ -696,9 +707,11 @@ isFalgStartSearch.value = true;
left2BottomOpitionX.value.push(item.x),
left2BottomOpitionY.value.push(item.y)
))
console.log("propsDate---3333333333--------",res.data,left2BottomOpitionX.value);
left2BottomOpition.value = {
// falgStartSearch:isFalgStartSearch.value,
maxY:ceilForMaxValue(Math.max(...left2BottomOpitionY.value)) ,
minY:floorForMinValue(Math.min(...left2BottomOpitionY.value)) ,
isFirstSearch:true,
dataX:left2BottomOpitionX.value,
dataY:left2BottomOpitionY.value,
......@@ -711,6 +724,90 @@ isFalgStartSearch.value = true;
};
// 处理最大值的函数 - 向上取整
const ceilForMaxValue = (value) => {
if (value === 0) return 0;
const isNegative = value < 0;
const absValue = Math.abs(value);
const exponent = Math.floor(Math.log10(absValue));
const factor = 10 ** exponent;
const normalized = absValue / factor;
let result;
// Determine the ceiling based on normalized value
if (normalized <= 1) {
result = 1 * factor;
} else if (normalized <= 2) {
result = 2 * factor;
} else if (normalized <= 5) {
result = 5 * factor;
} else {
result = 10 * factor;
}
// Handle negative values (round toward -∞)
if (isNegative) {
if (absValue >= 1) {
result = Math.floor(absValue);
if (result >= absValue) {
result = Math.floor(absValue / factor) * factor;
}
} else {
result = Math.floor(absValue / factor) * factor;
if (result >= absValue) {
result = factor;
}
}
result = -result;
}
return result;
};
const floorForMinValue = (value) => {
if (value === 0) return 0;
const isNegative = value < 0;
const absValue = Math.abs(value);
const exponent = Math.floor(Math.log10(absValue));
const factor = 10 ** exponent;
const normalized = absValue / factor;
let result;
// Determine the floor based on normalized value
if (normalized >= 10) {
result = 10 * factor;
} else if (normalized >= 5) {
result = 5 * factor;
} else if (normalized >= 2) {
result = 2 * factor;
} else {
result = 1 * factor;
}
// Handle negative values (round toward +∞)
if (isNegative) {
if (absValue >= 1) {
result = Math.ceil(absValue);
if (result <= absValue) {
result = Math.ceil(absValue / factor) * factor;
}
} else {
result = Math.ceil(absValue / factor) * factor;
if (result <= absValue) {
result = 10 * factor;
}
}
result = -result;
}
return result;
};
const wssOpenHandle = (data) => {
// console.log('wssOpenHandle', wss,wss.readyState, WebSocket.OPEN);
if (useAppStoreInstance.subsystemSocket.readyState === WebSocket.OPEN) {
......@@ -1146,7 +1243,15 @@ watch(() => useAppStoreInstance.subsystemSocketContent, (newVal, oldValue) => {
height: 70px;
gap: 2px; /* 设置网格间距 */
}
.system-tabs1 {
display: grid;
grid-template-columns: repeat(3, 1fr); /* 每行三等分 */
grid-auto-rows: 1fr; /* 自动行高 */
background-color: #000000;
padding: 2px;
height: 35px;
gap: 2px; /* 设置网格间距 */
}
.tab-item {
padding: 8px 5px;
text-align: center;
......@@ -1246,7 +1351,10 @@ watch(() => useAppStoreInstance.subsystemSocketContent, (newVal, oldValue) => {
.equipment-panel {
background: rgba(10, 14, 23, 0.6);
border-radius: 8px;
/* border-radius: 8px; */
width: 100%;
/* background-color: #165dff; */
overflow: hidden;
/* min-height: 25vh; */
/* padding: 15px; */
}
......@@ -1352,8 +1460,11 @@ watch(() => useAppStoreInstance.subsystemSocketContent, (newVal, oldValue) => {
/* background-color: #2d2d2d; */
/* border: 1px solid #3d3d3d; */
border-radius: 4px;
/* height: 2.5px; */
}
:deep(.satellite-select .el-select__wrapper) {
height: 12.5px;
}
:deep(.satellite-select .el-select__selected-item) {
color: #ffffff;
font-size: 10px;
......
......@@ -239,7 +239,7 @@ export const constantRoutes = [
]
const router = createRouter({
history: createWebHistory(),
history: createWebHashHistory(),
routes: constantRoutes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {
......
/*
* @Author: Z 1518051043@qq.com
* @Date: 2025-09-12 13:51:43
* @LastEditors: Z 1518051043@qq.com
* @LastEditTime: 2025-12-26 09:06:43
* @LastEditors: zwy 1518051043@qq.com
* @LastEditTime: 2025-12-31 17:50:03
* @FilePath: \yuanxinPro\src\store\module\app.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
......@@ -33,8 +33,8 @@ const useAppStore = defineStore(
globalSubsystemIsFastForward: false,
globalSubsystemSpeed: 1,
globalSubsystemTaskCode: 0,
globalSubsystemSelectedStartTime: '2025-11-03 00:00:00',
globalSubsystemSelectedEndTime: '2025-11-04 00:00:00',
globalSubsystemSelectedStartTime: ['Sun Nov 02 2025 00:00:00 GMT+0800 (中国标准时间) ','Tue Nov 04 2025 00:00:00 GMT+0800 (中国标准时间) '],
globalSubsystemSelectedEndTime: '2025-11-04 00:00:00',//暂未使用
globalDisableTimeLine: true,
}),
......
/*
* @Author: Z 1518051043@qq.com
* @Date: 2025-12-01 13:52:20
* @LastEditors: Z 1518051043@qq.com
* @LastEditTime: 2025-12-18 11:18:24
* @LastEditors: zwy 1518051043@qq.com
* @LastEditTime: 2025-12-31 15:46:20
* @FilePath: \yuanxinPro\src\utils\requestSocekt.js
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
import HeartbeatInterval from '@/store/module/app.js'
const apiUrl = `ws://121.229.107.155:19021/trackInfo`
// const apiUrl = `ws://121.229.107.155:19021/trackInfo`
const apiUrl = `ws://121.229.107.155:19021/TestTimeSend`
const wss = new WebSocket(apiUrl);
wss.onopen = () => {
};
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论