From c10a91f2d151ee9da11ff505902f22b0a03e0dd1 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Tue, 10 Feb 2026 13:59:46 +0800
Subject: [PATCH] feat:数据驾驶舱微调

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

diff --git a/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue b/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
index f59947f..77bd888 100644
--- a/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
+++ b/applications/drone-command/src/views/dataCockpit/components/RightContainer.vue
@@ -1,13 +1,193 @@
+<!--
+ * @Author       : yuan
+ * @Date         : 2026-01-07 15:17:54
+ * @LastEditors  : yuan
+ * @LastEditTime : 2026-02-09 15:20:23
+ * @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>
+	<div class="right-container" :class="{ collapsed: collapsedModel }">
+		<div class="wrapper">
+			<TitleTemplate :className="'equipment-scene'">侦测反制设备&场景部署</TitleTemplate>
 
+			<div class="tabs-container">
+				<div
+					class="tabs-item"
+					v-for="item in tabs"
+					:key="item.id"
+					@click="activeTab = item.id"
+					:class="{ active: activeTab === item.id }"
+				>
+					{{ item.name }}
+				</div>
+			</div>
+
+			<div class="content">
+				<DetectionCountermeasure
+					v-if="activeTab === 1"
+					@update:allDevices="handleUpdateAllDevices"
+				/>
+				<SceneDeployment v-else @click="(item) => emit('scene-click', item)" />
+			</div>
+		</div>
+
+		<div class="collapse-btn" @click="toggleCollapse">
+			<span class="arrow" :class="collapsedModel ? 'left' : 'right'"></span>
+		</div>
 	</div>
 </template>
 
 <script setup>
+import { ref, computed } from 'vue'
+import TitleTemplate from './templateComponents/TitleTemplate.vue'
+import SceneDeployment from './SceneDeployment.vue'
+import DetectionCountermeasure from './DetectionCountermeasure.vue'
 
+const props = defineProps({
+	collapsed: {
+		type: Boolean,
+		default: false
+	}
+})
+
+const emit = defineEmits(['update:collapsed', 'update:allDevices', 'scene-click'])
+
+const collapsedModel = computed({
+	get: () => props.collapsed,
+	set: (val) => emit('update:collapsed', val)
+})
+
+const activeTab = ref(1)
+const tabs = [
+	{ id: 1, name: '侦测反制设备' },
+	{ id: 2, name: '场景部署' }
+]
+
+const toggleCollapse = () => {
+	collapsedModel.value = !collapsedModel.value
+}
+
+const handleUpdateAllDevices = (devices) => {
+	emit('update:allDevices', devices)
+}
 </script>
 
 <style lang="scss" scoped>
+.right-container {
+	transition: transform 0.3s ease-in-out;
+	position: relative;
 
-</style>
\ No newline at end of file
+	&.collapsed {
+		transform: translateX(calc(100% + 17px + 32px));
+	}
+}
+
+.collapse-btn {
+	position: absolute;
+	bottom: 454px;
+	right: 300px;
+	cursor: pointer;
+	display: flex;
+	align-items: center;
+	justify-content: center;
+	color: #fff;
+	z-index: 10;
+	transform: translateY(50%);
+
+	.arrow {
+		width: 36px;
+		height: 36px;
+		background: url('@/assets/images/dataCockpit/right-btn.png') center / 100% 100% no-repeat;
+	}
+
+	&:hover {
+		background: rgba(40, 79, 227, 0.6);
+	}
+}
+
+.tabs-container {
+	position: relative;
+	display: flex;
+	justify-content: space-between;
+
+	&::after {
+		content: '';
+		position: absolute;
+		left: 0;
+		bottom: 0;
+		width: 100%;
+		height: 1px;
+		background: #333355;
+	}
+
+	.tabs-item {
+		position: relative;
+		width: 0;
+		flex: 1;
+		margin-left: 26px;
+		height: 68px;
+		line-height: 68px;
+
+		font-family: Source Code Pro, Source Code Pro;
+		font-weight: 400;
+		font-size: 14px;
+		color: #86909C;
+		text-align: center;
+		font-style: normal;
+		text-transform: none;
+		cursor: pointer;
+
+		&:first-child {
+			margin-left: 0;
+		}
+
+		&.active {
+			font-weight: normal;
+			color: #FFFFFF;
+		}
+
+		&::after {
+			content: '';
+			position: absolute;
+			left: 0;
+			bottom: 0;
+			width: 100%;
+			height: 0;
+		}
+
+		&.active::after {
+			height: 3px;
+			background: #284FE3;
+			box-shadow: 0px 3px 2px 0px rgba(15, 89, 255, 0.1), 0px 7px 5px 0px rgba(15, 89, 255, 0.15), 0px 13px 10px 0px rgba(15, 89, 255, 0.18), 0px 22px 18px 0px rgba(15, 89, 255, 0.21), 0px 42px 33px 0px rgba(15, 89, 255, 0.26), 0px 100px 80px 0px rgba(15, 89, 255, 0.36);
+			border-radius: 5px 5px 0px 0px;
+			z-index: 9;
+		}
+
+		.badge {
+			position: absolute;
+			top: 16px;
+			right: -4px;
+			min-width: 18px;
+			line-height: 18px;
+			font-size: 12px;
+			color: #FFFFFF;
+			background: #FF3B30;
+			border-radius: 50%;
+			text-align: center;
+			box-shadow: 0px 2px 6px rgba(255, 59, 48, 0.6);
+			pointer-events: none;
+		}
+	}
+}
+
+.content {
+	height: 0;
+	flex: 1;
+	margin-top: 20px;
+	overflow-x: hidden;
+	overflow-y: auto;
+}
+</style>

--
Gitblit v1.9.3