From 8e504b07e0070e50e2e04c46d783ca2df2794657 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Thu, 08 Jan 2026 16:38:43 +0800
Subject: [PATCH] feat:数据驾驶舱页面搭建

---
 applications/drone-command/src/views/dataCockpit/components/RightContainer.vue |  204 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 203 insertions(+), 1 deletions(-)

diff --git a/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue b/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
index 4811ccb..40b82f2 100644
--- a/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
+++ b/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
@@ -1,15 +1,217 @@
+<!--
+ * @Author       : yuan
+ * @Date         : 2026-01-07 15:17:54
+ * @LastEditors  : yuan
+ * @LastEditTime : 2026-01-08 15:58:15
+ * @FilePath     : \applications\drone-command\src\views\dataCockpit\components\RightContainer.vue
+ * @Description  : 
+ * Copyright 2026 OBKoro1, All Rights Reserved. 
+ * 2026-01-07 15:17:54
+-->
 <template>
 	<div class="right-container">
 		<div class="wrapper">
-			
+			<TitleTemplate>侦测反制设备</TitleTemplate>
+
+			<div class="category-container">
+				<div class="category-item" v-for="(item, ind) in categoryList" :key="ind">
+					<div class="category-item-logo">
+						<img :src="item.logo" alt="">
+					</div>
+
+					<div class="category-item-content">
+						<span class="name">{{ item.name }}</span>
+						<span class="val">{{ item.val }}</span>
+					</div>
+				</div>
+			</div>
+
+			<div class="content">
+				<RealEquipmentTemplate v-for="item in counterDeviceStatusList" :key="item.id" :data="item"
+					@history="onHistory" @click="onCardClick" />
+			</div>
 		</div>
 	</div>
 </template>
 
 <script setup>
+import TitleTemplate from './templateComponents/TitleTemplate.vue'
+import RealEquipmentTemplate from './templateComponents/RealEquipmentTemplate.vue'
+import zcsbLogo from '@/assets/images/dataCockpit/zcsb.png'
+import fzsbLogo from '@/assets/images/dataCockpit/fzsb.png'
 
+const categoryList = ref([
+	{
+		id: 1,
+		name: '侦测设备',
+		val: 169,
+		logo: zcsbLogo
+	},
+	{
+		id: 2,
+		name: '反制设备',
+		val: 169,
+		logo: fzsbLogo
+	}
+])
+
+const counterDeviceStatusList = ref([
+	{
+		id: 'cd_001',
+		name: '反制设备名称',
+		actionText: '侦测中',          // 胶囊文案
+		actionType: 'detecting',       // detecting | jamming | idle
+		type: '察打一体',
+		battery: 100,                  // 电量 %
+		azimuth: 14,                   // 方位角
+		pitch: 14,                     // 俯仰角
+		statusText: '在线',            // 状态
+		vendor: '厂商名称',            // 厂商
+		targetCount: 10,               // 侦测目标
+		range: '1.2KM'                 // 有效范围
+	},
+	{
+		id: 'cd_002',
+		name: '反制设备名称',
+		actionText: '信号干扰中',
+		actionType: 'jamming',
+		type: '察打一体',
+		battery: 100,
+		azimuth: 14,
+		pitch: 14,
+		statusText: '在线',
+		vendor: '厂商名称',
+		targetCount: 10,
+		range: '1.2KM'
+	}
+])
+
+const onHistory = (item) => {
+	console.log('历史数据:', item.id)
+}
+
+const onCardClick = (item) => {
+	console.log('点击卡片:', item.id)
+}
 </script>
 
 <style lang="scss" scoped>
+.category-container {
+	margin-top: 20px;
+	display: flex;
+	align-items: center;
+	justify-content: space-between;
+	gap: 28px;
+	box-sizing: border-box;
 
+	.category-item {
+		position: relative;
+		width: 0;
+		flex: 1;
+		display: flex;
+		height: 64px;
+
+		&-logo {
+			display: flex;
+			align-items: center;
+
+			img {
+				width: 40px;
+				height: 40px;
+			}
+		}
+
+		&-content {
+			width: 0;
+			flex: 1;
+			display: flex;
+			flex-direction: column;
+			border-bottom: 1px solid #6C6C89;
+
+			span {
+				margin-left: 8px;
+			}
+
+			.name {
+				font-family: Open Sans, Open Sans;
+				font-weight: 400;
+				font-size: 16px;
+				color: #C3C3DD;
+				line-height: 20px;
+				text-align: left;
+				font-style: normal;
+				text-transform: none;
+			}
+
+			.val {
+				margin-top: 10px;
+				font-family: DIN, DIN;
+				font-weight: bold;
+				font-size: 22px;
+				color: #FFFFFF;
+				line-height: 20px;
+				text-align: left;
+				font-style: normal;
+				text-transform: none;
+			}
+		}
+	}
+}
+
+.content {
+	height: 0;
+	flex: 1;
+	margin-top: 20px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+
+.right-container {
+	transition: transform 0.3s ease-in-out;
+	/* position: relative; Removed to avoid conflict with parent absolute positioning */
+
+	&.collapsed {
+		transform: translateX(100%);
+	}
+}
+
+.collapse-btn {
+	position: absolute;
+	top: 50%;
+	left: -24px;
+	width: 24px;
+	height: 60px;
+	background: rgba(17, 23, 34, 0.8);
+	border: 1px solid #333355;
+	border-right: none;
+	border-radius: 4px 0 0 4px;
+	cursor: pointer;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	color: #fff;
+	transform: translateY(-50%);
+	z-index: 10;
+	backdrop-filter: blur(5px);
+
+	.arrow {
+		border: solid #fff;
+		border-width: 0 2px 2px 0;
+		display: inline-block;
+		padding: 3px;
+		transition: transform 0.3s;
+
+		&.left {
+			transform: rotate(135deg);
+		}
+
+		&.right {
+			transform: rotate(-45deg);
+		}
+	}
+
+	&:hover {
+		background: rgba(40, 79, 227, 0.6);
+	}
+}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3