Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
SatelliteDigital
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
nijiawen
SatelliteDigital
Commits
7a431cb5
提交
7a431cb5
authored
3月 13, 2026
作者:
汪雄
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update
上级
1bd1bc0c
显示空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
514 行增加
和
417 行删除
+514
-417
Zodiac.js
src/api/Zodiac.js
+86
-34
screenConfigCase.vue
src/pages/header/component/screenConfigCase.vue
+205
-91
screenConfigeDialog.vue
src/pages/header/component/screenConfigeDialog.vue
+167
-131
index.vue
src/pages/header/index.vue
+51
-150
app.js
src/store/module/app.js
+5
-0
request.js
src/utils/request.js
+0
-11
没有找到文件。
src/api/Zodiac.js
浏览文件 @
7a431cb5
...
@@ -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
src/pages/header/component/screenConfigCase.vue
浏览文件 @
7a431cb5
...
@@ -8,22 +8,21 @@
...
@@ -8,22 +8,21 @@
</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>
-->
<div
class=
"selector-item"
v-for=
"(item, key) in item.templateSelector"
:key=
"key"
>
<label
class=
"selector-label"
>
{{
item
.
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=
"item.default"
placeholder=
""
style=
"width: 100%;"
>
<el-option
<el-option
v-for=
"itemele in item.options"
:key=
"itemele.value"
:label=
"itemele.label"
v-for=
"itemele in item.options"
:value=
"itemele.value"
/>
:key=
"itemele.value"
:label=
"itemele.label"
:value=
"itemele.value"
/>
</el-select>
</el-select>
</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
:
'地面粒度'
,
title
:
'容量/流量'
,
default
:
'区域'
,
templateSelector
:
[
{
label
:
'曲线类型'
,
default
:
'热力图'
,
options
:
[
options
:
[
{
{
value
:
'区域'
,
value
:
'瞬时值曲线'
,
label
:
'区域'
,
label
:
'瞬时值曲线'
,
},
{
value
:
'PDF曲线'
,
label
:
'PDF曲线'
,
},
{
value
:
'热力图'
,
label
:
'热力图'
,
},
]
},
},
{
{
value
:
'站点'
,
label
:
'地理标准'
,
label
:
'站点'
,
default
:
'最小值'
,
options
:
[
{
value
:
'最小值'
,
label
:
'最小值'
,
},
},
{
{
value
:
'设备类型
'
,
value
:
'最大值
'
,
label
:
'设备类型
'
,
label
:
'最大值
'
,
},
},
{
{
value
:
'具体设备
'
,
value
:
'平均值
'
,
label
:
'具体设备
'
,
label
:
'平均值
'
,
}
}
]
]
},
},
{
{
label
:
'卫星粒度
'
,
label
:
'时间标准
'
,
default
:
'卫星
'
,
default
:
'最小值
'
,
options
:
[
options
:
[
{
{
value
:
'卫星
'
,
value
:
'最小值
'
,
label
:
'卫星
'
,
label
:
'最小值
'
,
},
},
{
{
value
:
'星座
'
,
value
:
'最大值
'
,
label
:
'星座
'
,
label
:
'最大值
'
,
},
},
{
{
value
:
'波束'
,
value
:
'平均值'
,
label
:
'波束'
,
label
:
'平均值'
,
}
]
},
]
},
},
{
{
value
:
'转发器'
,
title
:
'可用性'
,
label
:
'转发器'
,
templateSelector
:
[
}
{
label
:
'曲线类型'
,
default
:
'热力图'
,
options
:
[
{
value
:
'PDF曲线'
,
label
:
'PDF曲线'
,
},
{
value
:
'热力图'
,
label
:
'热力图'
,
},
]
]
},
},
{
{
label
:
'模板
'
,
label
:
'地理标准
'
,
default
:
'Example #1
'
,
default
:
'最小值
'
,
options
:
[
options
:
[
{
{
value
:
'Example #1
'
,
value
:
'最小值
'
,
label
:
'Example #1
'
,
label
:
'最小值
'
,
},
},
{
{
value
:
'Example #2
'
,
value
:
'最大值
'
,
label
:
'Example #2
'
,
label
:
'最大值
'
,
},
},
{
{
value
:
'Example #3'
,
value
:
'平均值'
,
label
:
'Example #3'
,
label
:
'平均值'
,
}
]
},
},
{
{
value
:
'自定义模板'
,
label
:
'时间标准'
,
label
:
'自定义模板'
,
default
:
'最小值'
,
options
:
[
{
value
:
'最小值'
,
label
:
'最小值'
,
},
{
value
:
'最大值'
,
label
:
'最大值'
,
},
{
value
:
'平均值'
,
label
:
'平均值'
,
}
}
]
]
},
},
]
},
{
{
label
:
'地面粒度'
,
title
:
'网络时延/丢包'
,
default
:
'区域'
,
templateSelector
:
[
{
label
:
'时延曲线类型'
,
default
:
'瞬时值曲线'
,
options
:
[
options
:
[
{
{
value
:
'区域'
,
value
:
'瞬时值曲线'
,
label
:
'区域'
,
label
:
'瞬时值曲线'
,
},
{
value
:
'PDF曲线'
,
label
:
'PDF曲线'
,
},
},
{
{
value
:
'站点'
,
value
:
'热力图'
,
label
:
'站点'
,
label
:
'热力图'
,
},
]
},
},
{
{
value
:
'设备类型'
,
label
:
'地理标准'
,
label
:
'设备类型'
,
default
:
'最小值'
,
options
:
[
{
value
:
'最小值'
,
label
:
'最小值'
,
},
},
{
{
value
:
'具体设备'
,
value
:
'最大值'
,
label
:
'具体设备'
,
label
:
'最大值'
,
},
{
value
:
'平均值'
,
label
:
'平均值'
,
}
}
]
]
},
},
{
{
label
:
'卫星粒度
'
,
label
:
'时间标准
'
,
default
:
'卫星
'
,
default
:
'最小值
'
,
options
:
[
options
:
[
{
{
value
:
'卫星'
,
value
:
'最小值'
,
label
:
'卫星'
,
label
:
'最小值'
,
},
{
value
:
'最大值'
,
label
:
'最大值'
,
},
},
{
{
value
:
'星座'
,
value
:
'平均值'
,
label
:
'星座'
,
label
:
'平均值'
,
}
]
},
},
{
{
value
:
'波束'
,
label
:
'丢包曲线类型'
,
label
:
'波束'
,
default
:
'瞬时值曲线'
,
options
:
[
{
value
:
'最小值'
,
label
:
'最小值'
,
},
},
{
{
value
:
'转发器'
,
value
:
'最大值'
,
label
:
'转发器'
,
label
:
'最大值'
,
},
{
value
:
'平均值'
,
label
:
'平均值'
,
}
}
]
]
},
},
{
{
label
:
'模板
'
,
label
:
'地理标准
'
,
default
:
'Example #1
'
,
default
:
'最小值
'
,
options
:
[
options
:
[
{
{
value
:
'Example #1
'
,
value
:
'最小值
'
,
label
:
'Example #1
'
,
label
:
'最小值
'
,
},
},
{
{
value
:
'Example #2
'
,
value
:
'最大值
'
,
label
:
'Example #2
'
,
label
:
'最大值
'
,
},
},
{
{
value
:
'Example #3'
,
value
:
'平均值'
,
label
:
'Example #3'
,
label
:
'平均值'
,
}
]
},
},
{
{
value
:
'自定义模板'
,
label
:
'时间标准'
,
label
:
'自定义模板'
,
default
:
'最小值'
,
options
:
[
{
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,13 +340,13 @@ const objectSelector = [
...
@@ -237,13 +340,13 @@ 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
;
...
@@ -261,30 +364,41 @@ const objectSelector = [
...
@@ -261,30 +364,41 @@ 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
{
.section-item_content_down
{
width
:
100%
;
width
:
100%
;
/* background-color: #9520a0; */
/* background-color: #9520a0; */
padding
:
10px
0
;
padding
:
10px
0
;
...
...
src/pages/header/component/screenConfigeDialog.vue
浏览文件 @
7a431cb5
<
template
>
<
template
>
<div
class=
"dashboard-container"
>
<div
class=
"dashboard-container"
>
<!-- 顶部导航栏 -->
<!-- 顶部导航栏 -->
<header
class=
"dashboard-header"
>
<header
class=
"dashboard-header"
>
...
@@ -26,18 +27,11 @@
...
@@ -26,18 +27,11 @@
<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>
...
@@ -51,50 +45,39 @@
...
@@ -51,50 +45,39 @@
<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>
</div>
<div
class=
"selector-item"
>
<div
class=
"selector-item"
>
<label
class=
"selector-label"
>
{{
objectSelector
[
2
]
.
label
}}
</label>
<label
class=
"selector-label"
>
{{
templateSelector
.
label
}}
</label>
<div
class=
"custom-select"
>
<div
class=
"custom-select"
>
<div
class=
"select-trigger"
@
click=
"toggleDropdown(2)"
>
<!-- 粒度 -->
<span
class=
"select-value"
>
{{
selectedValues
[
2
]
}}
</span>
<el-select
v-model=
"templateSelector.value"
placeholder=
""
style=
"width: 100%;"
>
<i
class=
"select-arrow"
>
▼
</i>
<el-option
v-for=
"item in templateSelector.options"
:key=
"item.value"
:label=
"item.label"
</div>
:value=
"item.value"
/>
<div
class=
"select-dropdown"
v-if=
"dropdownVisible[2]"
>
</el-select>
<div
class=
"dropdown-option"
v-for=
"option in objectSelector[2].options"
:key=
"option"
@
click=
"selectOption(2, option)"
>
{{
option
}}
</div>
</div>
</div>
</div>
</div>
</div>
-->
</div>
</div>
<div
class=
"content-item"
>
<div
class=
"content-item"
>
<hotMapComponent></hotMapComponent>
<hotMapComponent></hotMapComponent>
...
@@ -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>
...
@@ -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
:
'
格网
'
,
}
}
]
]
},
});
{
label
:
'卫星粒度'
,
//根据前选择器决定后选择器
default
:
'卫星'
,
const
childrenSelector
=
ref
(
options
:
[
{
value
:
'卫星'
,
label
:
'卫星'
,
},
{
value
:
'星座'
,
label
:
'星座'
,
},
{
value
:
'波束'
,
label
:
'波束'
,
},
{
{
value
:
'转发器'
,
label
:
''
,
label
:
'转发器'
,
value
:
''
,
options
:
[]
}
}
]
)
},
const
isGlobal
=
computed
(()
=>
keliSelector
.
value
.
value
===
'global'
);
const
templateSelector
=
ref
(
{
{
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);
...
@@ -267,6 +256,24 @@ const indicatorStyle = computed(() => {
...
@@ -267,6 +256,24 @@ const indicatorStyle = computed(() => {
?
{
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
>
...
@@ -282,7 +289,8 @@ const indicatorStyle = computed(() => {
...
@@ -282,7 +289,8 @@ const indicatorStyle = computed(() => {
position
:
fixed
;
/* 改为fixed定位 */
position
:
fixed
;
/* 改为fixed定位 */
left
:
10%
;
left
:
10%
;
top
:
10%
;
top
:
10%
;
...
@@ -438,14 +446,17 @@ const indicatorStyle = computed(() => {
...
@@ -438,14 +446,17 @@ 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
;
...
@@ -455,7 +466,8 @@ const indicatorStyle = computed(() => {
...
@@ -455,7 +466,8 @@ const indicatorStyle = computed(() => {
/* 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,7 +478,8 @@ const indicatorStyle = computed(() => {
...
@@ -466,7 +478,8 @@ 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
;
/* 防止内容溢出 */
}
}
/* 可以为左右两侧添加不同样式 */
/* 可以为左右两侧添加不同样式 */
...
@@ -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,12 +539,15 @@ const indicatorStyle = computed(() => {
...
@@ -523,12 +539,15 @@ 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%
;
...
@@ -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,13 +602,14 @@ const indicatorStyle = computed(() => {
...
@@ -578,13 +602,14 @@ 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
;
...
@@ -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
;
...
...
src/pages/header/index.vue
浏览文件 @
7a431cb5
...
@@ -8,7 +8,8 @@
...
@@ -8,7 +8,8 @@
<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"
style=
"width: 100%; height: 100%;"
>
</span>
</span>
<!--
<span
class=
"text"
>
晴 18℃
</span>
-->
<!--
<span
class=
"text"
>
晴 18℃
</span>
-->
</div>
</div>
...
@@ -30,13 +31,8 @@
...
@@ -30,13 +31,8 @@
<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>
...
@@ -44,40 +40,26 @@
...
@@ -44,40 +40,26 @@
<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"
width=
"100"
:show-close=
"false"
:before-close=
"handleScreenConfigeClose"
style=
" background-color: rgba(0, 0, 0,0);padding: 0;margin: 0;"
>
<screenConfige
@
handleScreenConfigeClose=
"handleScreenConfigeClose"
></screenConfige>
<screenConfige
@
handleScreenConfigeClose=
"handleScreenConfigeClose"
></screenConfige>
<!--
<div
style=
"width: 100px;height: 100px;background-color: blueviolet;"
></div>
-->
<!--
<div
style=
"width: 100px;height: 100px;background-color: blueviolet;"
></div>
-->
</el-dialog>
</el-dialog>
...
@@ -94,12 +76,7 @@
...
@@ -94,12 +76,7 @@
: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
/>
-->
...
@@ -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
);
// 实时更新时间
// 实时更新时间
...
@@ -159,8 +127,8 @@ const handleScreenConfigeClose = () => {
...
@@ -159,8 +127,8 @@ 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"
})));
})));
}
}
};
};
...
@@ -183,35 +151,7 @@ const handleImageError = (e) => {
...
@@ -183,35 +151,7 @@ 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
{
...
@@ -221,7 +161,7 @@ const handletoLinkClick = () => {
...
@@ -221,7 +161,7 @@ const handletoLinkClick = () => {
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
([]);
...
@@ -254,12 +194,11 @@ const handletoLinkClick = () => {
...
@@ -254,12 +194,11 @@ 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"
})));
})));
}
}
};
};
...
@@ -275,65 +214,8 @@ onBeforeMount(() => {
...
@@ -275,65 +214,8 @@ onBeforeMount(() => {
},
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
)
=>
{
...
@@ -369,7 +251,7 @@ onMounted(() => {
...
@@ -369,7 +251,7 @@ onMounted(() => {
//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
([]);
...
@@ -394,6 +276,9 @@ onMounted(() => {
...
@@ -394,6 +276,9 @@ 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,7 +336,7 @@ const stopDrag = () => {
...
@@ -443,7 +336,7 @@ 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
;
/* 防止拖拽时选中文本 */
}
}
...
@@ -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
;
...
@@ -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
;
...
@@ -702,15 +600,18 @@ const stopDrag = () => {
...
@@ -702,15 +600,18 @@ 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
;
}
}
...
...
src/store/module/app.js
浏览文件 @
7a431cb5
...
@@ -52,6 +52,11 @@ const useAppStore = defineStore(
...
@@ -52,6 +52,11 @@ const useAppStore = defineStore(
globalSubsystemSelectedEndTime
:
'2025-11-04 00:00:00'
,
//暂未使用
globalSubsystemSelectedEndTime
:
'2025-11-04 00:00:00'
,
//暂未使用
globalDisableTimeLine
:
true
,
globalDisableTimeLine
:
true
,
gridPanelData
:[],
//格网面板
regionPanelData
:[],
//区域面板
signalSitePanelData
:[],
//信关站面板
}),
}),
actions
:
{
actions
:
{
setGlobalRecordMainSysTaskCode
(
status
)
{
setGlobalRecordMainSysTaskCode
(
status
)
{
...
...
src/utils/request.js
浏览文件 @
7a431cb5
...
@@ -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
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论