提交 7a431cb5 authored 作者: 汪雄's avatar 汪雄

update

上级 1bd1bc0c
...@@ -7,65 +7,57 @@ ...@@ -7,65 +7,57 @@
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%A * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%A
*/ */
import request from '@/utils/request' import request from "@/utils/request";
// 左侧菜单-星座构型信息 // 左侧菜单-星座构型信息
export function stellationInfoApi() { export function stellationInfoApi() {
return request({ return request({
url: '/constellationInfo/list', url: "/constellationInfo/list",
method: 'get', method: "get",
});
})
} }
// 左侧菜单-卫星列表信息 // 左侧菜单-卫星列表信息
export function stellateListInfoApi() { export function stellateListInfoApi() {
return request({ return request({
url: '/SatelliteBasicInfo/list', url: "/SatelliteBasicInfo/list",
method: 'get', method: "get",
});
})
} }
// 左侧菜单-地面系统信息 // 左侧菜单-地面系统信息
export function siteDataInfoListApi() { export function siteDataInfoListApi() {
return request({ return request({
url: '/SiteData/list', url: "/SiteData/list",
method: 'get' method: "get",
});
})
} }
export function siteDataPageErrorInfoApi(data) { export function siteDataPageErrorInfoApi(data) {
return request({ return request({
url: '/SiteData/pageError', url: "/SiteData/pageError",
method: 'post', method: "post",
params: data params: data,
}) });
} }
export function groundSystemStatisticsInfoApi() { export function groundSystemStatisticsInfoApi() {
return request({ return request({
url: '/GroundSystem/statistics', url: "/GroundSystem/statistics",
method: 'get', method: "get",
});
})
} }
export function subSystemStatisticsInfoApi() { export function subSystemStatisticsInfoApi() {
return request({ return request({
url: '/GroundSystem/statistics', url: "/GroundSystem/statistics",
method: 'get', method: "get",
// data: data // data: data
}) });
} }
export function getSubSystemOpitionListApi(data) { export function getSubSystemOpitionListApi(data) {
return request({ return request({
url: '/subSystem/getSubSystem?subSystemType='+data.subSystemType, url: "/subSystem/getSubSystem?subSystemType=" + data.subSystemType,
method: 'get', method: "get",
});
})
} }
// //console.log("propsDate-min--3333333333--------",{ // //console.log("propsDate-min--3333333333--------",{
...@@ -77,7 +69,66 @@ export function getSubSystemOpitionListApi(data) { ...@@ -77,7 +69,66 @@ export function getSubSystemOpitionListApi(data) {
// }); // });
export function getSubSystemCurveListApi(data) { export function getSubSystemCurveListApi(data) {
return request({ return request({
url: '/subSystem/getSubSystemCurve?satelliteId='+data.satelliteId+'&startTime='+data.startTime+'&endTime='+data.endTime+'&code='+data.code +'&subSystemType='+data.subSystemType, url:
method: 'get' "/subSystem/getSubSystemCurve?satelliteId=" +
}) data.satelliteId +
"&startTime=" +
data.startTime +
"&endTime=" +
data.endTime +
"&code=" +
data.code +
"&subSystemType=" +
data.subSystemType,
method: "get",
});
}
//配置模板中的区域数据
export function getRegionPanel() {
return request({
url: "/commPanel/getRegionPanel",
method: "get",
});
}
//配置模板中的信关站数据
export function getSignalSitePanel() {
return request({
url: "/commPanel/getSignalSitePanel",
method: "get",
});
}
//配置模板中的网格数据
export function getGridPanel() {
return request({
url: "/commPanel/getGridPanel",
method: "get",
});
}
// 容量/流量数据
export function getCapacityAndTraffic(data) {
return request({
url: "/commPanel/getCapacityAndTraffic",
method: "get",
params: {
gridCodes: data.gridCodes || null,
granularity: data.granularity,
startTime: data.startTime,
endTime: data.endTime,
regionName:data.regionName || null,
signalSiteCode: data.signalSiteCode || null,
},
});
}
//格网数据
export function getGridInfoList() {
return request({
url: "/GridInfo/list",
method: "get",
});
} }
\ No newline at end of file
...@@ -8,31 +8,30 @@ ...@@ -8,31 +8,30 @@
</div> </div>
<div class="templateCase_right_content_body"> <div class="templateCase_right_content_body">
<div class="horizontal-sections"> <div class="horizontal-sections">
<div class="section-item" v-for="(item, index) in 3" :key="index"> <div class="section-item" v-for="(item, index) in titles" :key="index">
<div class="section-item_title"> <div class="section-item_title">
<span>内容{{item}}</span> <span>{{ item.title }}</span>
</div> </div>
<div class="section-item_content_up"> <div class="section-item_content_up">
<div class="selector-item" v-for="(item, index) in objectSelector" :key="index"> <!-- <div v-for="(element,index) in [template1Selector,template2Selector]" :key="index">
<label class="selector-label">{{ item.label }}</label>
<div class="custom-select"> </div> -->
<!-- 粒度 --> <div class="selector-item" v-for="(item, key) in item.templateSelector" :key="key">
<el-select v-model="item.default" placeholder="Select" style="width: 100%;" > <label class="selector-label">{{ item.label}}</label>
<el-option <div class="custom-select">
v-for="itemele in item.options" <!-- 粒度 -->
:key="itemele.value" <el-select v-model="item.default" placeholder="" style="width: 100%;">
:label="itemele.label" <el-option v-for="itemele in item.options" :key="itemele.value" :label="itemele.label"
:value="itemele.value" :value="itemele.value" />
/> </el-select>
</el-select>
</div>
</div> </div>
</div> </div>
<div class="section-item_content_down"> </div>
<hotMapComponent v-if="index === 0"></hotMapComponent> <div class="section-item_content_down">
<cdf v-if="index === 1" :allIdName="allIdName[0]"></cdf> <hotMapComponent v-if="index === 0"></hotMapComponent>
<instant v-if="index === 2" :allIdName="allIdName[1]"></instant> <cdf v-if="index === 1" :allIdName="allIdName[0]"></cdf>
</div> <instant v-if="index === 2" :allIdName="allIdName[1]"></instant>
</div>
</div> </div>
</div> </div>
...@@ -44,142 +43,242 @@ ...@@ -44,142 +43,242 @@
import hotMapComponent from '@/pages/all/components/hotMapComponents/index.vue'; import hotMapComponent from '@/pages/all/components/hotMapComponents/index.vue';
import cdf from '@/pages/all/components/cdf/index.vue'; import cdf from '@/pages/all/components/cdf/index.vue';
import instant from '@/pages/all/components/instant/index.vue'; import instant from '@/pages/all/components/instant/index.vue';
const allIdName = ref([['allIdName11', 'allIdName12'], ['allIdName21', 'allIdName22']]);
const allIdName = ref([['allIdName11', 'allIdName12'], ['allIdName21', 'allIdName22']]);
// 组件逻辑可以在这里添加 // 组件逻辑可以在这里添加
const objectSelector = [ const titles = [
{
label: '地面粒度',
default: '区域',
options: [
{
value: '区域',
label: '区域',
},
{
value: '站点',
label: '站点',
},
{
value: '设备类型',
label: '设备类型',
},
{
value: '具体设备',
label: '具体设备',
}
]
},
{
label: '卫星粒度',
default: '卫星',
options: [
{
value: '卫星',
label: '卫星',
},
{
value: '星座',
label: '星座',
},
{
value: '波束',
label: '波束',
},
{
value: '转发器',
label: '转发器',
}
]
},
{ {
label: '模板', title: '容量/流量',
default: 'Example #1', templateSelector: [
options: [
{ {
value: 'Example #1', label: '曲线类型',
label: 'Example #1', default: '热力图',
options: [
{
value: '瞬时值曲线',
label: '瞬时值曲线',
},
{
value: 'PDF曲线',
label: 'PDF曲线',
},
{
value: '热力图',
label: '热力图',
},
]
}, },
{ {
value: 'Example #2', label: '地理标准',
label: 'Example #2', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{ {
value: 'Example #3', label: '时间标准',
label: 'Example #3', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{
value: '自定义模板',
label: '自定义模板',
}
] ]
}, },
{ {
label: '地面粒度', title: '可用性',
default: '区域', templateSelector: [
options: [
{ {
value: '区域', label: '曲线类型',
label: '区域', default: '热力图',
options: [
{
value: 'PDF曲线',
label: 'PDF曲线',
},
{
value: '热力图',
label: '热力图',
},
]
}, },
{ {
value: '站点', label: '地理标准',
label: '站点', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{ {
value: '设备类型', label: '时间标准',
label: '设备类型', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{
value: '具体设备',
label: '具体设备',
}
] ]
}, },
{ {
label: '卫星粒度', title: '网络时延/丢包',
default: '卫星', templateSelector: [
options: [
{ {
value: '卫星', label: '时延曲线类型',
label: '卫星', default: '瞬时值曲线',
options: [
{
value: '瞬时值曲线',
label: '瞬时值曲线',
},
{
value: 'PDF曲线',
label: 'PDF曲线',
},
{
value: '热力图',
label: '热力图',
},
]
}, },
{ {
value: '星座', label: '地理标准',
label: '星座', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{ {
value: '波束', label: '时间标准',
label: '波束', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{ {
value: '转发器', label: '丢包曲线类型',
label: '转发器', default: '瞬时值曲线',
} options: [
] {
}, value: '最小值',
{ label: '最小值',
label: '模板', },
default: 'Example #1', {
options: [ value: '最大值',
{ label: '最大值',
value: 'Example #1', },
label: 'Example #1', {
value: '平均值',
label: '平均值',
}
]
}, },
{ {
value: 'Example #2', label: '地理标准',
label: 'Example #2', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{ {
value: 'Example #3', label: '时间标准',
label: 'Example #3', default: '最小值',
options: [
{
value: '最小值',
label: '最小值',
},
{
value: '最大值',
label: '最大值',
},
{
value: '平均值',
label: '平均值',
}
]
}, },
{
value: '自定义模板',
label: '自定义模板',
}
] ]
} }
]; ];
const template2Selector = []
</script> </script>
<style scoped> <style scoped>
...@@ -208,22 +307,26 @@ const objectSelector = [ ...@@ -208,22 +307,26 @@ const objectSelector = [
} }
.horizontal-sections { .horizontal-sections {
display: flex; /* 启用弹性布局来水平排列 */ display: flex;
/* 启用弹性布局来水平排列 */
height: 100%; height: 100%;
border-right: 1px solid rgba(255, 0, 0, 0.1); border-right: 1px solid rgba(255, 0, 0, 0.1);
} }
.section-item { .section-item {
flex: 1; /* 平均分配宽度 */ flex: 1;
/* 平均分配宽度 */
height: 100%; height: 100%;
/* background-color: #f5f10c; */ /* background-color: #f5f10c; */
/* border: 1px solid rgba(255, 255, 255, 0.1); */ /* border: 1px solid rgba(255, 255, 255, 0.1); */
padding: 0px 10px; padding: 0px 10px;
padding-top: 5px; padding-top: 5px;
display: flex; /* 使内部内容也使用弹性布局 */ display: flex;
flex-direction: column; /* 垂直排列子元素 */ /* 使内部内容也使用弹性布局 */
/* overflow-y: auto; */ flex-direction: column;
/* 垂直排列子元素 */
/* overflow-y: auto; */
} }
.templateCase_right_content_header_item { .templateCase_right_content_header_item {
...@@ -237,18 +340,18 @@ const objectSelector = [ ...@@ -237,18 +340,18 @@ const objectSelector = [
.section-item_title{ .section-item_title {
height: 5%; height: 5%;
/* background-color: #051020; */ /* background-color: #051020; */
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: left; justify-content: left;
padding-left: 5px ; padding-left: 5px;
border-left: 1px solid #2e7dff; border-left: 1px solid #2e7dff;
font-size: 14px; font-size: 14px;
color: #fff; color: #fff;
padding: 10px; padding: 10px;
font-weight: 600; font-weight: 600;
} }
...@@ -261,32 +364,43 @@ const objectSelector = [ ...@@ -261,32 +364,43 @@ const objectSelector = [
/* height: 42%; */ /* height: 42%; */
width: 100%; width: 100%;
/* background-color: #2d20a0; */ /* background-color: #2d20a0; */
display: flex; /* 启用弹性布局 */ display: flex;
flex-wrap: wrap; /* 允许换行 */ /* 启用弹性布局 */
gap: 10px; /* 元素间距 */ flex-wrap: wrap;
padding: 10px; /* 内边距 */ /* 允许换行 */
box-sizing: border-box; /* 包含padding */ gap: 10px;
align-content: flex-start; /* 对齐方式 */ /* 元素间距 */
padding: 10px;
/* 内边距 */
box-sizing: border-box;
/* 包含padding */
align-content: flex-start;
/* 对齐方式 */
} }
.selector-item { .selector-item {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 5px; gap: 5px;
min-width: 100px; /* 最小宽度 */ min-width: 100px;
flex: 1; /* 弹性增长 */ /* 最小宽度 */
flex: 1;
/* 弹性增长 */
} }
.custom-select { .custom-select {
position: relative; position: relative;
width: 100%; /* 自适应宽度 */ width: 100%;
/* 自适应宽度 */
} }
:deep(.custom-select .el-select__wrapper) { :deep(.custom-select .el-select__wrapper) {
height: 12.5px; height: 12.5px;
} }
.section-item_content_down{
width: 100%; .section-item_content_down {
/* background-color: #9520a0; */ width: 100%;
padding: 10px 0; /* background-color: #9520a0; */
padding: 10px 0;
} }
</style> </style>
\ No newline at end of file
<template> <template>
<div class="dashboard-container"> <div class="dashboard-container">
<!-- 顶部导航栏 --> <!-- 顶部导航栏 -->
<header class="dashboard-header"> <header class="dashboard-header">
<div class="logo"> <div class="logo">
<div class="logo_header"> <div class="logo_header">
<i class="icon-dashboard"> <i class="icon-dashboard">
<img src="@/assets/images/headers/config_header.png" alt="" style="width: 20px; height: 20px;"> <img src="@/assets/images/headers/config_header.png" alt="" style="width: 20px; height: 20px;">
</i> </i>
<span class="logo_header_content">大屏配置</span> <span class="logo_header_content">大屏配置</span>
...@@ -13,7 +14,7 @@ ...@@ -13,7 +14,7 @@
<span class="logo_header_right_content">[区域一特事故]</span> <span class="logo_header_right_content">[区域一特事故]</span>
</div> </div>
</div> </div>
<div class="logo logo_right"> <div class="logo logo_right">
<hr class="divider"> <hr class="divider">
</div> </div>
...@@ -26,23 +27,16 @@ ...@@ -26,23 +27,16 @@
<main class="dashboard-main"> <main class="dashboard-main">
<!-- 标签页导航 --> <!-- 标签页导航 -->
<div class="tabs-container"> <div class="tabs-container">
<div <div class="tab-item" :class="{ 'active': activeTab === 'equipmentCount' }"
class="tab-item" @click="activeTab = 'equipmentCount'">
:class="{ 'active': activeTab === 'equipmentCount' }"
@click="activeTab = 'equipmentCount'"
>
对象选取 对象选取
</div> </div>
<div <div class="tab-item" :class="{ 'active': activeTab === 'failureStatus' }" @click="activeTab = 'failureStatus'">
class="tab-item"
:class="{ 'active': activeTab === 'failureStatus' }"
@click="activeTab = 'failureStatus'"
>
模板列表 模板列表
</div> </div>
<div class="tab-indicator" :style="indicatorStyle"></div> <div class="tab-indicator" :style="indicatorStyle"></div>
</div> </div>
<!-- 标签页内容区域 --> <!-- 标签页内容区域 -->
<div class="tab-content"> <div class="tab-content">
<!-- 根据选中的标签显示不同内容 --> <!-- 根据选中的标签显示不同内容 -->
...@@ -51,62 +45,51 @@ ...@@ -51,62 +45,51 @@
<div class="equipment-content"> <div class="equipment-content">
<!-- 下拉选择器区域 --> <!-- 下拉选择器区域 -->
<div class="selector-container"> <div class="selector-container">
<div class="selector-item" v-for="(item, index) in objectSelector" :key="index">
<label class="selector-label">{{ item.label }}</label> <div class="selector-item">
<label class="selector-label">{{ keliSelector.label }}</label>
<div class="custom-select"> <div class="custom-select">
<!-- 粒度 --> <!-- 粒度 -->
<el-select v-model="item.default" placeholder="Select" style="width: 100%;" > <el-select v-model="keliSelector.value" placeholder="" style="width: 100%;" @change="keliOnChange">
<el-option <el-option v-for="item in keliSelector.options" :key="item.value" :label="item.label"
v-for="itemele in item.options" :value="item.value" />
:key="itemele.value"
:label="itemele.label"
:value="itemele.value"
/>
</el-select> </el-select>
</div> </div>
</div> </div>
<!-- <div class="selector-item"> <div class="selector-item" v-if="!isGlobal">
<label class="selector-label">{{ objectSelector[1].label }}</label> <label class="selector-label" style="visibility: hidden;">占位符</label>
<div class="custom-select"> <div class="custom-select">
<div class="select-trigger" @click="toggleDropdown(1)"> <el-select v-model="childrenSelector.value" placeholder="" style="width: 100%;" :disabled="isGlobal">
<span class="select-value">{{ selectedValues[1] }}</span> <el-option v-for="item in childrenSelector.options" :key="item.value" :label="item.label"
<i class="select-arrow"></i> :value="item.value" />
</div> </el-select>
<div class="select-dropdown" v-if="dropdownVisible[1]">
<div class="dropdown-option" v-for="option in objectSelector[1].options" :key="option" @click="selectOption(1, option)">
{{ option }}
</div>
</div>
</div>
</div>
<div class="selector-item">
<label class="selector-label">{{ objectSelector[2].label }}</label>
<div class="custom-select">
<div class="select-trigger" @click="toggleDropdown(2)">
<span class="select-value">{{ selectedValues[2] }}</span>
<i class="select-arrow"></i>
</div>
<div class="select-dropdown" v-if="dropdownVisible[2]">
<div class="dropdown-option" v-for="option in objectSelector[2].options" :key="option" @click="selectOption(2, option)">
{{ option }}
</div>
</div>
</div>
</div> -->
</div>
<div class="content-item">
<hotMapComponent></hotMapComponent>
<cdf :allIdName="allIdName[0]"></cdf>
<instant :allIdName="allIdName[1]"></instant>
</div> </div>
<div> </div>
<el-button type="primary" class="apply-btn apply-btn-right">应用</el-button>
<div class="selector-item">
<label class="selector-label">{{ templateSelector.label }}</label>
<div class="custom-select">
<!-- 粒度 -->
<el-select v-model="templateSelector.value" placeholder="" style="width: 100%;">
<el-option v-for="item in templateSelector.options" :key="item.value" :label="item.label"
:value="item.value" />
</el-select>
</div> </div>
</div>
</div>
<div class="content-item">
<hotMapComponent></hotMapComponent>
<cdf :allIdName="allIdName[0]"></cdf>
<instant :allIdName="allIdName[1]"></instant>
</div>
<div>
<el-button type="primary" class="apply-btn apply-btn-right">应用</el-button>
</div>
</div> </div>
</div> </div>
<div v-if="activeTab === 'failureStatus'" class="tab-panel"> <div v-if="activeTab === 'failureStatus'" class="tab-panel">
<!-- 模板案例情况内容 --> <!-- 模板案例情况内容 -->
<div class="failure-content"> <div class="failure-content">
...@@ -114,19 +97,18 @@ ...@@ -114,19 +97,18 @@
<div class="templateCase_left_header"> <div class="templateCase_left_header">
<div class="templateCase_left_header_item_title">模板列表</div> <div class="templateCase_left_header_item_title">模板列表</div>
<div class="templateCase_left_header_item_tool"> <div class="templateCase_left_header_item_tool">
<el-icon @click="templateCasedeleteHandFn"><Delete /></el-icon> <el-icon @click="templateCasedeleteHandFn">
<el-icon @click="templateCaseAddHandFn"><Plus /></el-icon> <Delete />
</el-icon>
<el-icon @click="templateCaseAddHandFn">
<Plus />
</el-icon>
</div> </div>
</div> </div>
<div class="templateCase_left_content"> <div class="templateCase_left_content">
<div <div class="templateCase_left_content_item" v-for="(item, index) in templateCaseList" :key="index"
class="templateCase_left_content_item" @click="templateCaseClickFn(index)" :class="{ 'CaseClickActive': activeTemplateIndex === index }">
v-for="(item, index) in templateCaseList"
:key="index"
@click="templateCaseClickFn(index)"
:class="{ 'CaseClickActive': activeTemplateIndex === index }"
>
{{ item }} {{ item }}
</div> </div>
</div> </div>
...@@ -134,7 +116,7 @@ ...@@ -134,7 +116,7 @@
<div class="templateCase_right templateCase"> <div class="templateCase_right templateCase">
<screenConfigCase></screenConfigCase> <screenConfigCase></screenConfigCase>
</div> </div>
</div> </div>
<el-button type="primary" class="apply-btn">应用</el-button> <el-button type="primary" class="apply-btn">应用</el-button>
</div> </div>
...@@ -145,85 +127,83 @@ ...@@ -145,85 +127,83 @@
<script setup> <script setup>
import { ref, computed, onMounted } from 'vue'; import { ref, computed, onMounted, watch } from 'vue';
import hotMapComponent from '@/pages/all/components/hotMapComponents/index.vue'; import hotMapComponent from '@/pages/all/components/hotMapComponents/index.vue';
import cdf from '@/pages/all/components/cdf/index.vue'; import cdf from '@/pages/all/components/cdf/index.vue';
import instant from '@/pages/all/components/instant/index.vue'; import instant from '@/pages/all/components/instant/index.vue';
import screenConfigCase from './screenConfigCase.vue'; import screenConfigCase from './screenConfigCase.vue';
import { getCapacityAndTraffic } from '@/api/Zodiac';
import useAppStore from '@/store/module/app'
const appStore = useAppStore();
const emits = defineEmits(['handleScreenConfigeClose']); const emits = defineEmits(['handleScreenConfigeClose']);
const allIdName = ref([['allIdName11', 'allIdName12'], ['allIdName21', 'allIdName22']]); const allIdName = ref([['allIdName11', 'allIdName12'], ['allIdName21', 'allIdName22']]);
// 标签页状态管理 // 标签页状态管理
const activeTab = ref('equipmentCount'); // 默认选中"地面站设备数量" const activeTab = ref('equipmentCount'); // 默认选中"地面站设备数量"
const objectSelector = [
const keliSelector = ref(
{ {
label: '地面粒度', label: '地面粒度',
default: '区域', value: 'global',
options: [ options: [
{ {
value: '区域', value: 'global',
label: '区域', label: '全球',
}, },
{ {
value: '站点', value: 'region',
label: '站点', label: '区域',
}, },
{ {
value: '设备类型', value: 'station',
label: '设备类型', label: '信关站',
}, },
{ {
value: '具体设备', value: 'grid',
label: '具体设备', label: '格网',
} }
] ]
}, });
//根据前选择器决定后选择器
const childrenSelector = ref(
{ {
label: '卫星粒度', label: '',
default: '卫星', value: '',
options: [ options: []
{ }
value: '卫星', )
label: '卫星',
}, const isGlobal = computed(() => keliSelector.value.value === 'global');
{
value: '星座', const templateSelector = ref(
label: '星座',
},
{
value: '波束',
label: '波束',
},
{
value: '转发器',
label: '转发器',
}
]
},
{ {
label: '模板', label: '模板选择',
default: 'Example #1', value: '模板1',
options: [ options: [
{ {
value: 'Example #1', value: '模板1',
label: 'Example #1', label: '模板1',
}, },
{ {
value: 'Example #2', value: '模板2',
label: 'Example #2', label: '模板2',
}, },
{ {
value: 'Example #3', value: '模板3',
label: 'Example #3', label: '模板3',
}, },
{ {
value: '自定义模板', value: '模板4',
label: '自定义模板',
} }
] ]
} }
]; )
const templateCaseList = ref(['模板1', '模板2', '模板3', '模板4', '模板26', '模板27', '模板28'])
const templateCaseList = ref(['模板1', '模板2'])
// 下拉选择器状态 // 下拉选择器状态
const selectedValues = ref([]); const selectedValues = ref([]);
const dropdownVisible = ref([false, false, false]); const dropdownVisible = ref([false, false, false]);
...@@ -234,8 +214,8 @@ const templateCaseAddHandFn = () => { ...@@ -234,8 +214,8 @@ const templateCaseAddHandFn = () => {
//console.log('templateCaseAddHandFn'); //console.log('templateCaseAddHandFn');
}; };
// 初始化选中值 // 初始化选中值
onMounted(() => { onMounted(async () => {
selectedValues.value = objectSelector.map(item => item.default); await getCapacityAndTrafficData()
}); });
// 切换下拉菜单显示 // 切换下拉菜单显示
...@@ -244,11 +224,20 @@ const toggleDropdown = (index) => { ...@@ -244,11 +224,20 @@ const toggleDropdown = (index) => {
dropdownVisible.value = dropdownVisible.value.map((val, i) => i === index ? !val : false); dropdownVisible.value = dropdownVisible.value.map((val, i) => i === index ? !val : false);
}; };
// 选择下拉选项
const selectOption = (index, option) => { const getCapacityAndTrafficData = async () => {
selectedValues.value[index] = option; const res = await getCapacityAndTraffic({
dropdownVisible.value[index] = false; // 选择后关闭下拉菜单 granularity: keliSelector.value.value,
}; startTime: '2025-11-03 00:00:00',
endTime: '2025-11-06 00:00:00',
regionName: '',
signalSiteCode: '',
gridCodes: ''
})
console.log(res)
}
const activeTemplateIndex = ref(0); const activeTemplateIndex = ref(0);
const templateCaseClickFn = (index) => { const templateCaseClickFn = (index) => {
//console.log('templateCaseClickFn', index); //console.log('templateCaseClickFn', index);
...@@ -263,37 +252,56 @@ document.addEventListener('click', (e) => { ...@@ -263,37 +252,56 @@ document.addEventListener('click', (e) => {
// 计算指示器位置 // 计算指示器位置
const indicatorStyle = computed(() => { const indicatorStyle = computed(() => {
return activeTab.value === 'equipmentCount' return activeTab.value === 'equipmentCount'
? { left: '0%', width: '50%' } ? { left: '0%', width: '50%' }
: { left: '50%', width: '50%' }; : { left: '50%', width: '50%' };
}); });
const keliOnChange = () => {
childrenSelector.value.value = ''
switch (keliSelector.value.value) {
case 'region':
childrenSelector.value.options = appStore.regionPanelData
break;
case 'grid':
childrenSelector.value.options = appStore.gridPanelData
break;
case 'station':
childrenSelector.value.options = appStore.signalSitePanelData
break;
}
}
watch(() => keliSelector.value.value, keliOnChange)
</script> </script>
<style scoped> <style scoped>
/* 基础样式设置 */ /* 基础样式设置 */
.dashboard-container { .dashboard-container {
/* width: 900px; */ /* width: 900px; */
background-color: #000000; background-color: #000000;
color: #080606; color: #080606;
/* display: flex; /* display: flex;
flex-direction: column; */ flex-direction: column; */
position: fixed; /* 改为fixed定位 */
position: fixed;
/* 改为fixed定位 */
left: 10%; left: 10%;
top: 10%; top: 10%;
width: 1550px; width: 1550px;
z-index: 1001; z-index: 1001;
overflow: hidden; overflow: hidden;
} }
...@@ -328,7 +336,7 @@ const indicatorStyle = computed(() => { ...@@ -328,7 +336,7 @@ const indicatorStyle = computed(() => {
width: 10px; width: 10px;
height: 10px; height: 10px;
display: flex; display: flex;
align-items: center; align-items: center;
} }
.logo_header_content { .logo_header_content {
...@@ -342,7 +350,7 @@ const indicatorStyle = computed(() => { ...@@ -342,7 +350,7 @@ const indicatorStyle = computed(() => {
display: flex; display: flex;
padding-left: 10px; padding-left: 10px;
align-items: center; align-items: center;
width: 100px; width: 100px;
height: 100%; height: 100%;
} }
...@@ -438,24 +446,28 @@ const indicatorStyle = computed(() => { ...@@ -438,24 +446,28 @@ const indicatorStyle = computed(() => {
border-radius: 8px; border-radius: 8px;
padding: 5px 15px; padding: 5px 15px;
} }
.equipment-content{
.equipment-content {
height: 600px; height: 600px;
} }
.tab-panel { .tab-panel {
min-height: 600px; min-height: 600px;
/* max-height: 700px; */ /* max-height: 700px; */
color: #e2e8f0; color: #e2e8f0;
} }
.failure-content { .failure-content {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
font-size: 15px; font-size: 15px;
width: 1500px; width: 1500px;
/* gap: 20px; 添加间距 */ /* gap: 20px; 添加间距 */
/* height: 500px; */ /* height: 500px; */
/* background-color: rgba(1, 73, 241, 0.5); */ /* background-color: rgba(1, 73, 241, 0.5); */
/* padding: 15px; 添加内边距 */ /* padding: 15px; 添加内边距 */
border-radius: 8px; /* 添加圆角 */ border-radius: 8px;
/* 添加圆角 */
} }
.templateCase { .templateCase {
...@@ -466,14 +478,15 @@ const indicatorStyle = computed(() => { ...@@ -466,14 +478,15 @@ const indicatorStyle = computed(() => {
/* border-radius: 6px; 添加圆角 */ /* border-radius: 6px; 添加圆角 */
/* border: 1px solid rgba(255, 255, 255, 0.1); 添加边框 */ /* border: 1px solid rgba(255, 255, 255, 0.1); 添加边框 */
/* padding: 10px; 添加内边距 */ /* padding: 10px; 添加内边距 */
overflow: hidden; /* 防止内容溢出 */ overflow: hidden;
/* 防止内容溢出 */
} }
/* 可以为左右两侧添加不同样式 */ /* 可以为左右两侧添加不同样式 */
.templateCase_left { .templateCase_left {
flex: 0.151; flex: 0.151;
height: 100%; height: 100%;
/* background-color: rgba(241, 1, 81, 0.5); */ /* background-color: rgba(241, 1, 81, 0.5); */
/* border-radius: 6px; */ /* border-radius: 6px; */
border-right: 1px solid rgba(255, 255, 255, 0.1); border-right: 1px solid rgba(255, 255, 255, 0.1);
...@@ -492,7 +505,7 @@ const indicatorStyle = computed(() => { ...@@ -492,7 +505,7 @@ const indicatorStyle = computed(() => {
} }
.templateCase_right_content{ .templateCase_right_content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
...@@ -500,7 +513,8 @@ const indicatorStyle = computed(() => { ...@@ -500,7 +513,8 @@ const indicatorStyle = computed(() => {
/* background-color: #2b70df; */ /* background-color: #2b70df; */
/* padding: 10px 10px; */ /* padding: 10px 10px; */
} }
.templateCase_right_content_header{
.templateCase_right_content_header {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 8%; height: 8%;
...@@ -508,11 +522,13 @@ const indicatorStyle = computed(() => { ...@@ -508,11 +522,13 @@ const indicatorStyle = computed(() => {
padding: 10px 10px; padding: 10px 10px;
/* background-color: #df2b34; */ /* background-color: #df2b34; */
} }
.templateCase_right_content_body{
.templateCase_right_content_body {
height: 92%; height: 92%;
width: 100%; width: 100%;
background-color: #73df2b; background-color: #73df2b;
} }
/* 新增样式 */ /* 新增样式 */
.horizontal-sections { .horizontal-sections {
display: flex; display: flex;
...@@ -523,13 +539,16 @@ const indicatorStyle = computed(() => { ...@@ -523,13 +539,16 @@ const indicatorStyle = computed(() => {
.section-item { .section-item {
flex: 1; flex: 1;
height: 100%; height: 100%;
background-color: #1e293b; /* 您可以选择合适的背景色 */ background-color: #1e293b;
border: 1px solid rgba(255, 255, 255, 0.1); /* 可选:边框 */ /* 您可以选择合适的背景色 */
border: 1px solid rgba(255, 255, 255, 0.1);
/* 可选:边框 */
padding: 10px 10px; padding: 10px 10px;
/* border-radius: 4px; 可选:圆角 */ /* border-radius: 4px; 可选:圆角 */
} }
.templateCase_right_content_header_item{
.templateCase_right_content_header_item {
height: 100%; height: 100%;
width: 8%; width: 8%;
display: flex; display: flex;
...@@ -538,34 +557,39 @@ const indicatorStyle = computed(() => { ...@@ -538,34 +557,39 @@ const indicatorStyle = computed(() => {
/* background-color: #6ffcba; */ /* background-color: #6ffcba; */
} }
.templateCase_left_header{
.templateCase_left_header {
display: flex; display: flex;
padding: 10px 0; padding: 10px 0;
} }
.templateCase_left_header_item_title{
.templateCase_left_header_item_title {
flex: 0.61; flex: 0.61;
padding-left: 10px; padding-left: 10px;
/* background-color: #2c60b4; */ /* background-color: #2c60b4; */
} }
.templateCase_left_header_item_tool { .templateCase_left_header_item_tool {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
flex: 0.39; flex: 0.39;
gap: 15px; gap: 15px;
padding-right: 10px; padding-right: 10px;
align-items: center; /* 垂直居中对齐 */ align-items: center;
/* 垂直居中对齐 */
} }
.templateCase_left_content{ .templateCase_left_content {
/* background-color: #6ffcba; */ /* background-color: #6ffcba; */
width: 100%; width: 100%;
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
} }
.templateCase_left_content_item{
.templateCase_left_content_item {
height: 40px; height: 40px;
width: 100%; width: 100%;
display: flex; display: flex;
...@@ -578,19 +602,20 @@ const indicatorStyle = computed(() => { ...@@ -578,19 +602,20 @@ const indicatorStyle = computed(() => {
/* background-color: #2c78f5; */ /* background-color: #2c78f5; */
} }
.CaseClickActive{ .CaseClickActive {
background: linear-gradient(to right, #193d77 0, rgba(0, 0, 0, 1) 100%); background: linear-gradient(to right, #193d77 0, rgba(0, 0, 0, 1) 100%);
} }
.templateCase_left_content_item:hover{ .templateCase_left_content_item:hover {
background: linear-gradient(to right, #2b70df 0, rgba(0, 0, 0, 1) 100%); background: linear-gradient(to right, #2b70df 0, rgba(0, 0, 0, 1) 100%);
} }
/* 下拉选择器样式 */ /* 下拉选择器样式 */
.selector-container { .selector-container {
display: flex; display: flex;
gap: 20px; gap: 20px;
/* padding: 10px 0; */ /* padding: 10px 0; */
} }
.selector-item { .selector-item {
...@@ -609,19 +634,22 @@ const indicatorStyle = computed(() => { ...@@ -609,19 +634,22 @@ const indicatorStyle = computed(() => {
position: relative; position: relative;
width: 160px; width: 160px;
/* color: #ffffff; */ /* color: #ffffff; */
border:1px solid #000000; border: 1px solid #000000;
} }
:deep(.custom-select .el-select__wrapper) { :deep(.custom-select .el-select__wrapper) {
height: 12.5px; height: 12.5px;
} }
:deep(.custom-select .el-select ){
:deep(.custom-select .el-select) {
background: #000000; background: #000000;
border:1px solid #000000; border: 1px solid #000000;
/* color: #ffffff; */ /* color: #ffffff; */
} }
:deep(.custom-select .el-select .el-select__wrapper ){
:deep(.custom-select .el-select .el-select__wrapper) {
background: #000000; background: #000000;
border:1px solid #000000; border: 1px solid #000000;
box-shadow: 0 0 2px rgba(131, 131, 131, 0.95); box-shadow: 0 0 2px rgba(131, 131, 131, 0.95);
/* color: #ffffff; */ /* color: #ffffff; */
} }
...@@ -631,15 +659,18 @@ const indicatorStyle = computed(() => { ...@@ -631,15 +659,18 @@ const indicatorStyle = computed(() => {
/* font-size: 10px; */ /* font-size: 10px; */
} }
:deep(.el-popper){ :deep(.el-popper) {
background-color: #000000 !important; background-color: #000000 !important;
} }
:deep(.el-select-dropdown){
:deep(.el-select-dropdown) {
background: #000000 !important; background: #000000 !important;
} }
:deep(.el-select-dropdown){
:deep(.el-select-dropdown) {
background-color: #000000 !important; background-color: #000000 !important;
} }
.select-trigger { .select-trigger {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
...@@ -693,7 +724,8 @@ const indicatorStyle = computed(() => { ...@@ -693,7 +724,8 @@ const indicatorStyle = computed(() => {
background-color: #334155; background-color: #334155;
color: #ffffff; color: #ffffff;
} }
.content-item{
.content-item {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
gap: 20px; gap: 20px;
...@@ -701,20 +733,23 @@ const indicatorStyle = computed(() => { ...@@ -701,20 +733,23 @@ const indicatorStyle = computed(() => {
/* background-color: #1c5abe; */ /* background-color: #1c5abe; */
} }
.content-item > * { .content-item>* {
flex: 1; flex: 1;
min-width: 0; min-width: 0;
} }
.content-item > *:not(:last-child) {
.content-item>*:not(:last-child) {
padding-right: 10px; padding-right: 10px;
border-right: 1px solid #1b1b1b; /* 右边框样式 */ border-right: 1px solid #1b1b1b;
/* 右边框样式 */
} }
.apply-btn-right{ .apply-btn-right {
position: absolute; position: absolute;
bottom: 16px; bottom: 16px;
} }
:deep(.apply-btn){
:deep(.apply-btn) {
width: 100px; width: 100px;
height: 30px; height: 30px;
/* margin-top: 10%; */ /* margin-top: 10%; */
...@@ -726,6 +761,7 @@ const indicatorStyle = computed(() => { ...@@ -726,6 +761,7 @@ const indicatorStyle = computed(() => {
cursor: pointer; cursor: pointer;
border-bottom: 1px solid #2c78f5; border-bottom: 1px solid #2c78f5;
} }
/* 滚动条样式 */ /* 滚动条样式 */
.select-dropdown::-webkit-scrollbar { .select-dropdown::-webkit-scrollbar {
width: 6px; width: 6px;
......
...@@ -2,14 +2,15 @@ ...@@ -2,14 +2,15 @@
<div class="navbar-container" :style="{ '--limit_width': Limit_Width + 'px', '--limit_height': Limit_Height + 'px' }"> <div class="navbar-container" :style="{ '--limit_width': Limit_Width + 'px', '--limit_height': Limit_Height + 'px' }">
<!-- 背景装饰光效 --> <!-- 背景装饰光效 -->
<div class="navbar-glow"></div> <div class="navbar-glow"></div>
<div class="navbar-content"> <div class="navbar-content">
<!-- 左侧时间和天气信息 --> <!-- 左侧时间和天气信息 -->
<div class="navbar-left"> <div class="navbar-left">
<div class="status-item weather-info"> <div class="status-item weather-info">
<span class="icon"> <span class="icon">
<img src="@/assets/images/headers/yuanxin.png" alt="图标" class="weather-icon" style="width: 100%; height: 100%;"> <img src="@/assets/images/headers/yuanxin.png" alt="图标" class="weather-icon"
</span> style="width: 100%; height: 100%;">
</span>
<!-- <span class="text">晴 18℃</span> --> <!-- <span class="text">晴 18℃</span> -->
</div> </div>
<!-- <div class="status-item time-info"> <!-- <div class="status-item time-info">
...@@ -17,7 +18,7 @@ ...@@ -17,7 +18,7 @@
<span class="text">{{ currentTime }}</span> <span class="text">{{ currentTime }}</span>
</div> --> </div> -->
</div> </div>
<!-- 中间标题 --> <!-- 中间标题 -->
<div class="navbar-center"> <div class="navbar-center">
<div class="title-container"> <div class="title-container">
...@@ -25,66 +26,47 @@ ...@@ -25,66 +26,47 @@
<div class="title-glow"></div> <div class="title-glow"></div>
</div> </div>
</div> </div>
<!-- 右侧功能按钮 --> <!-- 右侧功能按钮 -->
<div class="navbar-right"> <div class="navbar-right">
<div class="control-item company-item" @click="handletoLinkClick"> <div class="control-item company-item" @click="handletoLinkClick">
<img <img v-if="!imageError" src="@/assets/images/headers/header_style.png" alt="大屏配置" class="company-logo"
v-if="!imageError" @error="handleImageError">
src="@/assets/images/headers/header_style.png"
alt="大屏配置"
class="company-logo"
@error="handleImageError"
>
<span class="control-label">跳转</span> <span class="control-label">跳转</span>
</div> </div>
<div class="control-item digital-person-item" :class="{ active: digitalPersonShow }"> <div class="control-item digital-person-item" :class="{ active: digitalPersonShow }">
<el-switch <el-switch v-model="digitalPersonShow" />
v-model="digitalPersonShow"
/>
<span class="control-label">数字人</span> <span class="control-label">数字人</span>
</div> </div>
<div class="control-item company-item" @click="handleCompanyClick"> <div class="control-item company-item" @click="handleCompanyClick">
<img <img v-if="!imageError" src="@/assets/images/headers/header_style.png" alt="大屏配置" class="company-logo"
v-if="!imageError" @error="handleImageError">
src="@/assets/images/headers/header_style.png"
alt="大屏配置"
class="company-logo"
@error="handleImageError"
>
<!-- <div v-else class="logo-placeholder">DL</div> --> <!-- <div v-else class="logo-placeholder">DL</div> -->
<span class="control-label">大屏配置</span> <span class="control-label">大屏配置</span>
</div> </div>
<div class="control-item rightTime" > <div class="control-item rightTime">
<span class="timeColor">{{ currentTime.split(" ")[0] }}</span> <span class="timeColor">{{ currentTime.split(" ")[0] }}</span>
<span >{{ currentTime.split(" ")[1] }}</span> <span>{{ currentTime.split(" ")[1] }}</span>
</div> </div>
</div> </div>
</div> </div>
<el-dialog <el-dialog v-model="screenConfigeDialogVisible" :destroy-on-close="true" :modal="false" width="100"
v-model="screenConfigeDialogVisible" :show-close="false" :before-close="handleScreenConfigeClose"
:destroy-on-close="true" style=" background-color: rgba(0, 0, 0,0);padding: 0;margin: 0;">
:modal="false" <screenConfige @handleScreenConfigeClose="handleScreenConfigeClose"></screenConfige>
width="100" <!-- <div style="width: 100px;height: 100px;background-color: blueviolet;"></div> -->
:show-close="false" </el-dialog>
:before-close="handleScreenConfigeClose"
style=" background-color: rgba(0, 0, 0,0);padding: 0;margin: 0;"
>
<screenConfige @handleScreenConfigeClose="handleScreenConfigeClose"></screenConfige>
<!-- <div style="width: 100px;height: 100px;background-color: blueviolet;"></div> -->
</el-dialog>
<!-- <el-dialog <!-- <el-dialog
v-model="digitalPersonShow" v-model="digitalPersonShow"
title="Tips" title="Tips"
width="500" width="500"
...@@ -94,16 +76,11 @@ ...@@ -94,16 +76,11 @@
:close-on-click-modal="false" :close-on-click-modal="false"
> >
</el-dialog> --> </el-dialog> -->
<div <div v-if="digitalPersonShow" class="draggable-box" :style="{ left: pos.x + 'px', top: pos.y + 'px' }">
v-if="digitalPersonShow"
class="draggable-box"
:style="{ left: pos.x + 'px', top: pos.y + 'px' }"
>
<span class="title" @mousedown="startDrag">拖拽我(带边界限制)</span> <span class="title" @mousedown="startDrag">拖拽我(带边界限制)</span>
<!-- <el-input v-model="value" placeholder="请输入内容" /> --> <!-- <el-input v-model="value" placeholder="请输入内容" /> -->
<!-- <Sender v-model="senderValue" variant="updown" clearable allow-speech /> --> <!-- <Sender v-model="senderValue" variant="updown" clearable allow-speech /> -->
<el-button type="primary" @click="console.log('value')">提交</el-button> <el-button type="primary" @click="console.log('value')">提交</el-button>
</div> </div>
</div> </div>
...@@ -112,11 +89,12 @@ ...@@ -112,11 +89,12 @@
<script setup> <script setup>
// import { BubbleList, Sender } from 'vue-element-plus-x'; // import { BubbleList, Sender } from 'vue-element-plus-x';
import { ref, onUnmounted, watch, onBeforeMount, onDeactivated ,onMounted} from 'vue'; import { ref, onUnmounted, watch, onBeforeMount, onDeactivated, onMounted } from 'vue';
import local from '@/utils/local.js' import local from '@/utils/local.js'
import screenConfige from './component/screenConfigeDialog.vue' import screenConfige from './component/screenConfigeDialog.vue'
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import useAppStore from '@/store/module/app' import useAppStore from '@/store/module/app'
import { getRegionPanel, getSignalSitePanel, getGridPanel } from "@/api/Zodiac";
import errorDialog from '@/pages/lefts/component/errorDialog.vue' import errorDialog from '@/pages/lefts/component/errorDialog.vue'
...@@ -126,16 +104,6 @@ const useAppStoreInstance = useAppStore() ...@@ -126,16 +104,6 @@ const useAppStoreInstance = useAppStore()
// 在 setup 中 // 在 setup 中
const router = useRouter(); const router = useRouter();
const senderRef = ref();
const senderValue = ref('');
// 数字人显示状态 // 数字人显示状态
const digitalPersonShow = ref(false); const digitalPersonShow = ref(false);
// 实时更新时间 // 实时更新时间
...@@ -157,12 +125,12 @@ watch(digitalPersonShow, (newValue) => { ...@@ -157,12 +125,12 @@ watch(digitalPersonShow, (newValue) => {
const handleScreenConfigeClose = () => { const handleScreenConfigeClose = () => {
screenConfigeDialogVisible.value = false; screenConfigeDialogVisible.value = false;
if (window.ue5) { if (window.ue5) {
window.ue5("callBackAllDialogFn", String(JSON.stringify({ window.ue5("callBackAllDialogFn", String(JSON.stringify({
type:"LargeScreenConfigurationDialog", type: "LargeScreenConfigurationDialog",
status:"close" status: "close"
}))); })));
} }
}; };
// 格式化日期时间显示 // 格式化日期时间显示
const formatDateTime = () => { const formatDateTime = () => {
...@@ -173,7 +141,7 @@ const formatDateTime = () => { ...@@ -173,7 +141,7 @@ const formatDateTime = () => {
const hours = String(now.getHours()).padStart(2, '0'); const hours = String(now.getHours()).padStart(2, '0');
const minutes = String(now.getMinutes()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0');
const seconds = String(now.getSeconds()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}; };
...@@ -183,45 +151,17 @@ const handleImageError = (e) => { ...@@ -183,45 +151,17 @@ const handleImageError = (e) => {
e.target.style.display = 'none'; e.target.style.display = 'none';
}; };
// try {
// // 确保对象结构存在
// if (typeof window.ue5 !== 'object' || window.ue5 === null) {
// window.ue5 = {};
// }
// if (typeof window.ue5.interface !== 'object' || window.ue5.interface === null) {
// window.ue5.interface = {};
// }
// window.ue5.interface.emitUIInteraction = (res) => {
// //console.log("收到UE交互:", res.name);
// try {
// const resData = JSON.parse(res.data);
// //console.log("Received from UE:", resData);
// if (resData.locationReplace === true) {
// location.replace('/subsystem');
// }
// if (resData.locationReplace === false) {
// location.replace('/');
// }
// } catch (parseError) {
// console.error("Error parsing JSON:", parseError);
// }
// };
// } catch (initError) {
// console.error("Failed to initialize ue5 interface:", initError);
// }
const toSubSystemFlag = ref(false); const toSubSystemFlag = ref(false);
const handletoLinkClick = () => { const handletoLinkClick = () => {
try { try {
if (toSubSystemFlag.value) { if (toSubSystemFlag.value) {
// location.replace('/subsystem'); // location.replace('/subsystem');
router.push('/'); router.push('/');
//console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow); //console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow);
useAppStoreInstance.setGlobalisFromTosub(true); useAppStoreInstance.setGlobalisFromTosub(true);
useAppStoreInstance.setislegendShow(useAppStoreInstance.isSourceLegendShow?true:false ); useAppStoreInstance.setislegendShow(useAppStoreInstance.isSourceLegendShow ? true : false);
//console.log("11111111111111111111111112",useAppStoreInstance.islegendShow); //console.log("11111111111111111111111112",useAppStoreInstance.islegendShow);
useAppStoreInstance.setiscontrolPanelShow(true); useAppStoreInstance.setiscontrolPanelShow(true);
useAppStoreInstance.setGlobalSubsystemSelectedTimeRange([]); useAppStoreInstance.setGlobalSubsystemSelectedTimeRange([]);
...@@ -232,8 +172,8 @@ const handletoLinkClick = () => { ...@@ -232,8 +172,8 @@ const handletoLinkClick = () => {
// useAppStoreInstance.setGlobalisFromTosub(true); // useAppStoreInstance.setGlobalisFromTosub(true);
// useAppStoreInstance.setglobalSatelliteSearchID('4096'); // useAppStoreInstance.setglobalSatelliteSearchID('4096');
if (!useAppStoreInstance.islegendShow) { if (!useAppStoreInstance.islegendShow) {
useAppStoreInstance.setislegendShow(true); useAppStoreInstance.setislegendShow(true);
} }
router.push( router.push(
{ {
name: 'subsystem', name: 'subsystem',
...@@ -254,104 +194,46 @@ const handletoLinkClick = () => { ...@@ -254,104 +194,46 @@ const handletoLinkClick = () => {
}; };
const handleCompanyClick = () => { const handleCompanyClick = () => {
// 可以添加点击事件逻辑 // 可以添加点击事件逻辑
// //console.log('大屏配置按钮点击');
screenConfigeDialogVisible.value = !screenConfigeDialogVisible.value; screenConfigeDialogVisible.value = !screenConfigeDialogVisible.value;
if (window.ue5) { if (window.ue5) {
window.ue5("callBackAllDialogFn", String(JSON.stringify({ window.ue5("callBackAllDialogFn", String(JSON.stringify({
type:"LargeScreenConfigurationDialog", type: "LargeScreenConfigurationDialog",
status:"open" status: "open"
}))); })));
} }
}; };
// 组件生命周期管理 // 组件生命周期管理
let updateTimer; let updateTimer;
onBeforeMount(() => { onBeforeMount(() => {
digitalPersonShow.value = local.local.get('digitalPersonShow') === 'true'; digitalPersonShow.value = local.local.get('digitalPersonShow') === 'true';
// 初始化时间 // 初始化时间
currentTime.value = formatDateTime(); currentTime.value = formatDateTime();
// 每秒更新一次时间 // 每秒更新一次时间
updateTimer = setInterval(() => { updateTimer = setInterval(() => {
currentTime.value = formatDateTime(); currentTime.value = formatDateTime();
}, 1000); }, 1000);
}); });
// const handleUEMessage = () => {
// //console.log("我是handleUEMessage里面的window",window); onMounted(async () => {
// window.emitUIInteraction = (res) => {
// // //console.log('Received from UE:', data);
// //console.log("我是handleUEMessage,收到UE交互:", res);
// try {
// const resData = JSON.parse(res.data);
// if (window.ue5) {
// window.ue5("callBackTimeFn", String(JSON.stringify({
// taskCode: String("从UE里面传输的数据",resData,res),
// })))
// }
// //console.log("handleUEMessage,Received from UE:", resData);
// if (resData.locationReplace === true) {
// router.push('/subsystem');
// }
// if (resData.locationReplace === false) {
// router.push('/');
// }
// } catch (parseError) {
// console.error("Error parsing JSON:", parseError);
// }
// };
// };
// const handleUEMessage1 = () => {
// //console.log("我是handleUEMessage1里面的window",window);
// window.emitUIInteraction = (res) => {
// // //console.log('Received from UE:', data);
// //console.log("我是handleUEMessage1,收到UE交互:", res);
// try {
// const resData = JSON.parse(res.data);
// if (window.ue5) {
// window.ue5("callBackTimeFn", String(JSON.stringify({
// taskCode: String("handleUEMessage1从UE里面传输的数据",resData,res),
// })))
// }
// //console.log("Received from UE:", resData);
// if (resData.locationReplace === true) {
// router.push('/subsystem');
// }
// if (resData.locationReplace === false) {
// router.push('/');
// }
// } catch (parseError) {
// console.error("Error parsing JSON:", parseError);
// }
// };
// };
onMounted(() => {
// window.addEventListener('message', handleUEMessage); // window.addEventListener('message', handleUEMessage);
// window.addEventListener('emitUIInteraction', handleUEMessage1); // window.addEventListener('emitUIInteraction', handleUEMessage1);
window.ue.interface.emitUIInteraction = (res) => { window.ue.interface.emitUIInteraction = (res) => {
// if (window.ue5) { // if (window.ue5) {
// window.ue5("callBackTimeFn", `ue传递给vue的数据111111111111111111:${JSON.stringify(res)},${JSON.stringify(res.locationReplace)}`) // window.ue5("callBackTimeFn", `ue传递给vue的数据111111111111111111:${JSON.stringify(res)},${JSON.stringify(res.locationReplace)}`)
// } // }
const resData = JSON.parse(res); const resData = JSON.parse(res);
// if (window.ue5) { // if (window.ue5) {
// window.ue5("callBackTimeFn", `测试数据111111111111111111:${JSON.stringify(resData)},${JSON.stringify(resData.locationReplace)},${JSON.stringify(resData.locationReplace === 'true')}`) // window.ue5("callBackTimeFn", `测试数据111111111111111111:${JSON.stringify(resData)},${JSON.stringify(resData.locationReplace)},${JSON.stringify(resData.locationReplace === 'true')}`)
// } // }
console.log("我是handleUEMessage,收到UE交互:", resData); console.log("我是handleUEMessage,收到UE交互:", resData);
if (resData.locationReplace === 'true') { if (resData.locationReplace === 'true') {
useAppStoreInstance.setiscontrolPanelShow(false); useAppStoreInstance.setiscontrolPanelShow(false);
useAppStoreInstance.setglobalSatelliteSearchID(resData.SatelliteSearchID || '4097'); useAppStoreInstance.setglobalSatelliteSearchID(resData.SatelliteSearchID || '4097');
if (!useAppStoreInstance.islegendShow) { if (!useAppStoreInstance.islegendShow) {
useAppStoreInstance.setislegendShow(true); useAppStoreInstance.setislegendShow(true);
} }
router.push( router.push(
{ {
name: 'subsystem', name: 'subsystem',
...@@ -363,24 +245,24 @@ onMounted(() => { ...@@ -363,24 +245,24 @@ onMounted(() => {
} }
); );
toSubSystemFlag.value = !toSubSystemFlag.value; toSubSystemFlag.value = !toSubSystemFlag.value;
} }
if (resData.locationReplace === 'false') { if (resData.locationReplace === 'false') {
router.push('/'); router.push('/');
//console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow); //console.log("1111111111111111111111111",useAppStoreInstance.isSourceLegendShow);
useAppStoreInstance.setGlobalisFromTosub(true); useAppStoreInstance.setGlobalisFromTosub(true);
useAppStoreInstance.setislegendShow(useAppStoreInstance.isSourceLegendShow?true:false ); useAppStoreInstance.setislegendShow(useAppStoreInstance.isSourceLegendShow ? true : false);
//console.log("11111111111111111111111112",useAppStoreInstance.islegendShow); //console.log("11111111111111111111111112",useAppStoreInstance.islegendShow);
useAppStoreInstance.setiscontrolPanelShow(true); useAppStoreInstance.setiscontrolPanelShow(true);
useAppStoreInstance.setGlobalSubsystemSelectedTimeRange([]); useAppStoreInstance.setGlobalSubsystemSelectedTimeRange([]);
} }
// try { // try {
// const resData = JSON.parse(res.data); // const resData = JSON.parse(res.data);
// if (window.ue5) { // if (window.ue5) {
// window.ue5("callBackTimeFn", `ue传递给vue的数据111111111111111111:${JSON.stringify(res)}`) // window.ue5("callBackTimeFn", `ue传递给vue的数据111111111111111111:${JSON.stringify(res)}`)
// } // }
// //console.log("Received from UE:", resData); // //console.log("Received from UE:", resData);
// if (resData.locationReplace === true) { // if (resData.locationReplace === true) {
// router.push('/subsystem'); // router.push('/subsystem');
// } // }
...@@ -394,7 +276,10 @@ onMounted(() => { ...@@ -394,7 +276,10 @@ onMounted(() => {
await initChartData();
}); });
...@@ -435,6 +320,14 @@ const stopDrag = () => { ...@@ -435,6 +320,14 @@ const stopDrag = () => {
}; };
const initChartData = async () => {
// console.log("初始化数据",useAppStoreInstance);
const [res1,res2,res3] = await Promise.all([getRegionPanel(), getSignalSitePanel(), getGridPanel()])
useAppStoreInstance.regionPanelData = res1.code==200?res1.data.map(item=>({value:item,label:item})):[]
useAppStoreInstance.signalSitePanelData = res2.code==200?res2.data.map((item)=>({value:item.siteId,label:item.siteName})):[]
useAppStoreInstance.gridPanelData = res3.code==200?res3.data.map(item=>({value:item.gridCode,label:item.gridName})):[]
};
...@@ -443,9 +336,9 @@ const stopDrag = () => { ...@@ -443,9 +336,9 @@ const stopDrag = () => {
</script> </script>
<style scoped> <style scoped>
*{ * {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
...@@ -470,7 +363,8 @@ const stopDrag = () => { ...@@ -470,7 +363,8 @@ const stopDrag = () => {
text-align: center; text-align: center;
font-weight: bold; font-weight: bold;
flex-shrink: 0; flex-shrink: 0;
user-select: none; /* 防止拖拽时选中文本 */ user-select: none;
/* 防止拖拽时选中文本 */
} }
...@@ -487,7 +381,7 @@ const stopDrag = () => { ...@@ -487,7 +381,7 @@ const stopDrag = () => {
min-width: 750px; min-width: 750px;
overflow: hidden; overflow: hidden;
/* height: 250px; */ /* height: 250px; */
/* box-shadow: 0 2px 15px rgba(0, 15, 45, 0.5); */ /* box-shadow: 0 2px 15px rgba(0, 15, 45, 0.5); */
} }
...@@ -514,11 +408,12 @@ const stopDrag = () => { ...@@ -514,11 +408,12 @@ const stopDrag = () => {
height: 55px; height: 55px;
max-width: 1920px; max-width: 1920px;
margin: 0 auto; margin: 0 auto;
background: url("@/assets/images/headers/header_bg.png") ; background: url("@/assets/images/headers/header_bg.png");
/* padding: 0.6rem 0; */ /* padding: 0.6rem 0; */
position: relative; position: relative;
overflow: hidden; overflow: hidden;
background-size: 100% 160%; /* 或者 cover/auto */ background-size: 100% 160%;
/* 或者 cover/auto */
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: center; background-position: center;
...@@ -551,7 +446,7 @@ const stopDrag = () => { ...@@ -551,7 +446,7 @@ const stopDrag = () => {
} }
.weather-info .text::after { .weather-info .text::after {
content: '|'; content: '|';
margin-left: 1.5rem; margin-left: 1.5rem;
opacity: 0.6; opacity: 0.6;
...@@ -608,13 +503,16 @@ const stopDrag = () => { ...@@ -608,13 +503,16 @@ const stopDrag = () => {
padding-top: 10px; padding-top: 10px;
/* background-color: #d10e0e; */ /* background-color: #d10e0e; */
} }
.timeColor{
.timeColor {
color: #ddd; color: #ddd;
} }
.rightTime{
.rightTime {
border-left: 1px solid #ddd; border-left: 1px solid #ddd;
height: 10px; height: 10px;
} }
.control-item { .control-item {
display: flex; display: flex;
align-items: center; align-items: center;
...@@ -684,7 +582,7 @@ const stopDrag = () => { ...@@ -684,7 +582,7 @@ const stopDrag = () => {
.platform-title { .platform-title {
font-size: 1.15rem; font-size: 1.15rem;
} }
.navbar-left { .navbar-left {
gap: 1.5rem; gap: 1.5rem;
} }
...@@ -694,7 +592,7 @@ const stopDrag = () => { ...@@ -694,7 +592,7 @@ const stopDrag = () => {
.platform-title { .platform-title {
font-size: 1.05rem; font-size: 1.05rem;
} }
.status-item { .status-item {
font-size: 0.85rem; font-size: 0.85rem;
gap: 0.4rem; gap: 0.4rem;
...@@ -702,23 +600,26 @@ const stopDrag = () => { ...@@ -702,23 +600,26 @@ const stopDrag = () => {
} }
@media (max-width: 992px) { @media (max-width: 992px) {
/* .navbar-left { /* .navbar-left {
display: none; display: none;
} */ } */
.company-item{ .company-item {
display: none; display: none;
} }
.digital-person-item{
.digital-person-item {
display: none; display: none;
} }
.navbar-right { .navbar-right {
gap: 1rem; gap: 1rem;
} }
.control-item { .control-item {
padding: 0.35rem 0.7rem; padding: 0.35rem 0.7rem;
} }
.control-label { .control-label {
font-size: 0.9rem; font-size: 0.9rem;
} }
...@@ -728,18 +629,18 @@ const stopDrag = () => { ...@@ -728,18 +629,18 @@ const stopDrag = () => {
.navbar-content { .navbar-content {
padding: 0 1.2rem; padding: 0 1.2rem;
} }
.platform-title { .platform-title {
font-size: 0.95rem; font-size: 0.95rem;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
max-width: 280px; max-width: 280px;
} }
.company-item .control-label { .company-item .control-label {
display: none; display: none;
} }
.company-item { .company-item {
padding: 0.35rem; padding: 0.35rem;
} }
...@@ -747,14 +648,14 @@ const stopDrag = () => { ...@@ -747,14 +648,14 @@ const stopDrag = () => {
@media (max-width: 576px) { @media (max-width: 576px) {
.platform-title { .platform-title {
overflow: visible; overflow: visible;
text-overflow: unset; text-overflow: unset;
max-width: none; max-width: none;
font-size: 0.9rem; font-size: 0.9rem;
} }
.navbar-content { .navbar-content {
padding: 0 1rem; padding: 0 1rem;
} }
......
...@@ -51,6 +51,11 @@ const useAppStore = defineStore( ...@@ -51,6 +51,11 @@ const useAppStore = defineStore(
globalSubsystemSelectedStartTime: ['Sun Nov 02 2025 00:00:00 GMT+0800 (中国标准时间) ','Tue Nov 04 2025 00:00:00 GMT+0800 (中国标准时间) '], 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',//暂未使用 globalSubsystemSelectedEndTime: '2025-11-04 00:00:00',//暂未使用
globalDisableTimeLine: true, globalDisableTimeLine: true,
gridPanelData:[], //格网面板
regionPanelData:[], //区域面板
signalSitePanelData:[], //信关站面板
}), }),
actions: { actions: {
......
...@@ -26,17 +26,6 @@ const service = axios.create({ ...@@ -26,17 +26,6 @@ const service = axios.create({
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(config => {
//console.log('--------------config', config)
// // 是否需要设置 token
// const isToken = (config.headers || {}).isToken === false
// //console.log('--------------isToken', isToken)
// // 是否需要防止数据重复提交
// const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
// //console.log('--------------isRepeatSubmit', isRepeatSubmit,(config.headers || {}).repeatSubmit,config.headers.repeatSubmit,undefined===false)
// if (getToken() && !isToken) {
// config.headers['token'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
// }
// get请求映射params参数
if (config.method === 'get' && config.params) { if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params); let url = config.url + '?' + tansParams(config.params);
url = url.slice(0, -1); url = url.slice(0, -1);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论