Prechádzať zdrojové kódy

修改无人机页面

BAI 5 dní pred
rodič
commit
84e796fc1a
2 zmenil súbory, kde vykonal 228 pridanie a 364 odobranie
  1. BIN
      src/assets/images/Heilin/导航.png
  2. 228 364
      src/views/WaterCultureView.vue

BIN
src/assets/images/Heilin/导航.png


+ 228 - 364
src/views/WaterCultureView.vue

@@ -36,43 +36,65 @@
               </div>
               <div class="panel-content">
                 <div class="device-status-section">
-                  <!-- 机器人实时状态 - 一行卡片展示 -->
-                  <div class="status-cards-row">
-                    <div class="status-card">
-                      <div class="status-card-label">剩余电量</div>
-                      <div class="status-card-value">85%</div>
+                  <!-- 顶部状态指标 -->
+                  <div class="top-status-indicators">
+                    <div class="status-circle">
+                      <div class="circle-inner">
+                        <div class="circle-percentage">100%</div>
+                        <div class="circle-label">回传</div>
+                      </div>
+                    </div>
+                    <div class="status-icon-item">
+                      <div class="status-icon">🤖</div>
+                      <div class="status-text">机器人</div>
+                      <div class="status-state">工作中</div>
+                    </div>
+                    <div class="status-icon-item">
+                      <div class="status-icon">🏢</div>
+                      <div class="status-text">基站</div>
+                      <div class="status-state">运行中</div>
                     </div>
-                    <div class="status-card">
-                      <div class="status-card-label">运行模式</div>
-                      <div class="status-card-value">自动巡检</div>
+                  </div>
+                  
+                  <!-- 详细信息 -->
+                  <div class="device-details">
+                    <div class="detail-row">
+                      <div class="detail-item">
+                        <span class="detail-label">名称:</span>
+                        <span class="detail-value">巡检机器人</span>
+                      </div>
+                      <div class="detail-item">
+                        <span class="detail-label">类型:</span>
+                        <span class="detail-value">智能巡检型</span>
+                      </div>
                     </div>
-                    <div class="status-card">
-                      <div class="status-card-label">信号强度</div>
-                      <div class="status-card-value">强</div>
+                    <div class="detail-row">
+                      <div class="detail-item">
+                        <span class="detail-label">空调:</span>
+                        <span class="detail-value">制冷</span>
+                      </div>
+                      <div class="detail-item">
+                        <span class="detail-label">网速:</span>
+                        <span class="detail-value">513.8 kb/s</span>
+                      </div>
                     </div>
-                    <div class="status-card">
-                      <div class="status-card-label">当前位置</div>
-                      <div class="status-card-value">1号监测断面</div>
+                    <div class="detail-row">
+                      <div class="detail-item">
+                        <span class="detail-label">电池:</span>
+                        <span class="detail-value">91%</span>
+                      </div>
+                      <div class="detail-item">
+                        <span class="detail-label">卫星:</span>
+                        <span class="detail-value">6</span>
+                      </div>
                     </div>
                   </div>
                   
-                  <!-- 搭载设备状态 - 机器人背景 + 小图标 -->
+                  <!-- 机器人图片 -->
                   <div class="robot-status-container">
                     <div class="robot-bg">
                       <img src="/src/assets/images/Heilin/机器人.png" alt="巡检机器人" class="robot-image" />
                     </div>
-                    
-                    <!-- 运行参数卡片 -->
-                    <div class="params-cards-row">
-                      <div class="param-card">
-                        <div class="param-label">采集频率</div>
-                        <div class="param-value">5秒/次</div>
-                      </div>
-                      <div class="param-card">
-                        <div class="param-label">数据传输状态</div>
-                        <div class="param-value normal">正常</div>
-                      </div>
-                    </div>
                   </div>
                 </div>
               </div>
@@ -84,75 +106,40 @@
                 <h3>巡检任务</h3>
               </div>
               <div class="panel-content">
-                <!-- 路线选择 -->
-                <div class="task-section">
-                  <h4>路线选择</h4>
-                  <div class="route-info">
-                    <div class="route-item">
-                      <span class="route-label">当前路线:</span>
-                      <span class="route-value">1号监测断面 → 测验设备区 → 汇水区</span>
-                    </div>
-                    <div class="route-item">
-                      <span class="route-label">预设路线:</span>
-                      <select v-model="selectedRoute" class="route-select">
-                        <option value="route1">标准巡检路线</option>
-                        <option value="route2">重点区域巡检路线</option>
-                        <option value="route3">全面覆盖路线</option>
-                      </select>
-                    </div>
-                    <div class="route-progress">
-                      <span class="progress-label">当前进度:</span>
-                      <div class="progress-bar">
-                        <div class="progress-fill" style="width: 60%"></div>
-                      </div>
-                      <span class="progress-text">60% (已完成2/3点位)</span>
-                    </div>
+                <!-- 任务列表 -->
+                <div class="task-table">
+                  <div class="task-table-header">
+                    <div class="task-table-col task-name-col">任务名称</div>
+                    <div class="task-table-col task-duration-col">时长</div>
+                    <div class="task-table-col task-action-col">操作</div>
                   </div>
-                </div>
-                
-                <!-- 任务下达 -->
-                <div class="task-section" style="margin-top: 20px;">
-                  <h4>任务下达</h4>
-                  <div class="task-input">
-                    <div class="task-input-item">
-                      <label>巡检区域:</label>
-                      <select v-model="taskArea" class="task-select">
-                        <option value="all">全部区域</option>
-                        <option value="section1">1号监测断面</option>
-                        <option value="section2">测验设备区</option>
-                        <option value="section3">汇水区</option>
-                      </select>
+                  <div class="task-table-body">
+                    <div class="task-table-row">
+                      <div class="task-table-col task-name-col">1号监测断面巡检</div>
+                      <div class="task-table-col task-duration-col">30分钟</div>
+                      <div class="task-table-col task-action-col">
+                        <button class="execute-btn">执行</button>
+                      </div>
                     </div>
-                    <div class="task-input-item">
-                      <label>巡检频次:</label>
-                      <select v-model="taskFrequency" class="task-select">
-                        <option value="once">单次</option>
-                        <option value="hourly">每小时</option>
-                        <option value="daily">每天</option>
-                        <option value="weekly">每周</option>
-                      </select>
+                    <div class="task-table-row">
+                      <div class="task-table-col task-name-col">测验设备区巡检</div>
+                      <div class="task-table-col task-duration-col">45分钟</div>
+                      <div class="task-table-col task-action-col">
+                        <button class="execute-btn">执行</button>
+                      </div>
                     </div>
-                    <div class="task-input-item">
-                      <label>重点巡检项:</label>
-                      <div class="checkbox-group">
-                        <label><input type="checkbox" v-model="taskItems.camera" /> 摄像头</label>
-                        <label><input type="checkbox" v-model="taskItems.flow" /> 流速</label>
-                        <label><input type="checkbox" v-model="taskItems.water" /> 水质</label>
+                    <div class="task-table-row">
+                      <div class="task-table-col task-name-col">汇水区巡检</div>
+                      <div class="task-table-col task-duration-col">20分钟</div>
+                      <div class="task-table-col task-action-col">
+                        <button class="execute-btn">执行</button>
                       </div>
                     </div>
-                    <button class="task-btn" @click="issueTask">下达任务</button>
-                  </div>
-                  
-                  <!-- 当前任务列表 -->
-                  <div class="task-list" style="margin-top: 15px;">
-                    <h5>当前任务</h5>
-                    <div class="task-list-item">
-                      <div class="task-id">任务编号:T20260311001</div>
-                      <div class="task-info">
-                        <span>巡检区域:全部区域</span>
-                        <span>下达时间:2026-03-11 09:00</span>
-                        <span>预计完成:2026-03-11 10:30</span>
-                        <span>进度:80%(已完成5个点位)</span>
+                    <div class="task-table-row">
+                      <div class="task-table-col task-name-col">全站设备检查</div>
+                      <div class="task-table-col task-duration-col">60分钟</div>
+                      <div class="task-table-col task-action-col">
+                        <button class="execute-btn">执行</button>
                       </div>
                     </div>
                   </div>
@@ -623,52 +610,32 @@ onMounted(() => {
 /* 数据卡片样式 */
 .data-card {
   width: 100%;
-  background: linear-gradient(135deg, rgba(0, 20, 40, 0.8), rgba(0, 10, 30, 0.9));
-  border: 1px solid rgba(0, 212, 255, 0.3);
-  border-radius: 8px;
+  background: rgba(0, 20, 40, 0.7);
+  border-radius: 4px;
   overflow: hidden;
-  box-shadow: 0 0 15px rgba(0, 212, 255, 0.2);
-  position: relative;
-}
-
-.data-card::before {
-  content: '';
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 2px;
-  background: linear-gradient(90deg, transparent, #00d5ff, transparent);
-  box-shadow: 0 0 10px rgba(0, 212, 255, 0.8);
+  box-shadow: 0 0 10px rgba(0, 212, 255, 0.2);
 }
 
 .panel-header {
-  height: 45px;
-  background: linear-gradient(135deg, rgba(0, 60, 120, 0.3), rgba(0, 30, 60, 0.3));
+  height: 50px;
+  background-image: url('/src/assets/images/数据小标题.png');
+  background-size: 100% 100%;
+  background-position: center;
+  background-repeat: no-repeat;
   display: flex;
-  align-items: center;
+  align-items: flex-start;
   justify-content: space-between;
-  padding: 0 20px;
+  padding: 6px 20px 0;
   cursor: pointer;
-  border-bottom: 1px solid rgba(0, 212, 255, 0.2);
 }
 
 .panel-header h3 {
   margin: 0;
-  font-size: 16px;
+  font-size: 18px;
   font-weight: bold;
-  color: #00d5ff;
-  text-shadow: 0 0 8px rgba(0, 212, 255, 0.8);
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-
-.panel-header h3::before {
-  content: '▶';
-  font-size: 12px;
-  color: #00d5ff;
-  animation: pulse 2s infinite;
+  color: #e0fcff;
+  text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);
+  padding-left: 20px;
 }
 
 .panel-content {
@@ -698,71 +665,124 @@ onMounted(() => {
   gap: 20px;
 }
 
-/* 一行卡片展示 */
-.status-cards-row {
+/* 顶部状态指标 */
+.top-status-indicators {
   display: flex;
-  gap: 12px;
-  justify-content: space-between;
-  margin-bottom: 20px;
+  align-items: center;
+  gap: 15px;
+  padding: 10px;
+  background: linear-gradient(135deg, rgba(0, 20, 40, 0.6), rgba(0, 10, 20, 0.6));
+  border: 1px solid rgba(0, 212, 255, 0.3);
+  border-radius: 8px;
 }
 
-.status-card {
-  flex: 1;
-  background: linear-gradient(135deg, rgba(0, 60, 120, 0.6), rgba(0, 30, 60, 0.6));
-  border: 1px solid rgba(0, 213, 255, 0.4);
-  border-radius: 6px;
-  padding: 12px 8px;
+/* 状态圆圈 */
+.status-circle {
+  width: 50px;
+  height: 50px;
+  border-radius: 50%;
+  border: 2px solid #00d5ff;
+  background: transparent;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-shadow: 0 0 15px rgba(0, 212, 255, 0.5);
+}
+
+.circle-inner {
   text-align: center;
-  transition: all 0.3s ease;
-  position: relative;
-  overflow: hidden;
+  color: #00d5ff;
 }
 
-.status-card::before {
-  content: '';
-  position: absolute;
-  top: 0;
-  left: 0;
-  right: 0;
-  height: 1px;
-  background: linear-gradient(90deg, transparent, #00d5ff, transparent);
+.circle-percentage {
+  font-size: 14px;
+  font-weight: bold;
+  text-shadow: 0 0 5px rgba(0, 212, 255, 0.8);
 }
 
-.status-card:hover {
-  border-color: rgba(0, 213, 255, 0.8);
-  box-shadow: 0 0 15px rgba(0, 213, 255, 0.4);
-  transform: translateY(-2px);
+.circle-label {
+  font-size: 10px;
+  margin-top: 1px;
 }
 
-.status-card-label {
-  font-size: 12px;
-  color: #00d5ff;
-  margin-bottom: 6px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-  text-shadow: 0 0 5px rgba(0, 213, 255, 0.5);
+/* 状态图标项 */
+.status-icon-item {
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+  gap: 3px;
+  flex: 1;
 }
 
-.status-card-value {
-  font-size: 16px;
+.status-icon {
+  font-size: 20px;
+}
+
+.status-text {
+  color: #00d5ff;
+  font-size: 12px;
   font-weight: bold;
+  text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);
+}
+
+.status-state {
   color: #00ff88;
-  text-shadow: 0 0 8px rgba(0, 255, 136, 0.8);
+  font-size: 11px;
+  text-shadow: 0 0 5px rgba(0, 255, 136, 0.5);
+}
+
+/* 详细信息 */
+.device-details {
+  padding: 12px;
+  background: linear-gradient(135deg, rgba(0, 20, 40, 0.6), rgba(0, 10, 20, 0.6));
+  border: 1px solid rgba(0, 212, 255, 0.3);
+  border-radius: 8px;
+}
+
+.detail-row {
+  display: flex;
+  justify-content: flex-start;
+  flex-wrap: wrap;
+  margin-bottom: 8px;
+}
+
+.detail-row:last-child {
+  margin-bottom: 0;
+}
+
+.detail-item {
+  flex: 1;
+  min-width: 45%;
+  display: flex;
+  align-items: center;
+  gap: 6px;
+}
+
+.detail-label {
+  color: #00d5ff;
+  font-size: 12px;
+  font-weight: bold;
+  text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);
+}
+
+.detail-value {
+  color: #ffffff;
+  font-size: 12px;
+  text-shadow: 0 0 5px rgba(255, 255, 255, 0.3);
 }
 
 /* 机器人状态容器 */
 .robot-status-container {
-  margin-top: 20px;
+  margin-top: 10px;
   display: flex;
   flex-direction: column;
-  gap: 15px;
+  gap: 10px;
 }
 
 .robot-bg {
   position: relative;
   width: 100%;
-  height: 200px;
+  height: 180px;
   display: flex;
   align-items: center;
   justify-content: center;
@@ -772,12 +792,11 @@ onMounted(() => {
 }
 
 .robot-image {
-  width: 180px;
-  height: 180px;
+  width: 200px;
+  height: 200px;
   object-fit: contain;
   opacity: 0.9;
   z-index: 1;
-  filter: drop-shadow(0 0 10px rgba(0, 212, 255, 0.3));
 }
 
 /* 运行参数卡片 */
@@ -880,245 +899,90 @@ onMounted(() => {
   color: #ff4444;
 }
 
-/* 巡检任务区域 */
-.task-section h4 {
-  color: #00d5ff;
-  font-size: 14px;
-  margin: 0 0 12px 0;
-  text-shadow: 0 0 8px rgba(0, 212, 255, 0.8);
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
 
-.task-section h4::before {
-  content: '●';
-  font-size: 10px;
-  color: #00d5ff;
-  animation: pulse 2s infinite;
-}
 
-.route-info {
-  display: flex;
-  flex-direction: column;
-  gap: 12px;
+/* 任务表格 */
+.task-table {
+  width: 100%;
+  border-collapse: collapse;
 }
 
-.route-item {
+.task-table-header {
   display: flex;
-  flex-direction: column;
-  gap: 6px;
-}
-
-.route-label {
-  color: #00d5ff;
-  font-size: 13px;
-  font-weight: bold;
-  text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);
-}
-
-.route-value {
-  color: #00ff88;
-  font-size: 14px;
-  background: linear-gradient(135deg, rgba(0, 20, 40, 0.6), rgba(0, 10, 20, 0.6));
-  padding: 10px;
-  border-radius: 6px;
-  border: 1px solid rgba(0, 212, 255, 0.2);
-  text-shadow: 0 0 5px rgba(0, 255, 136, 0.5);
-}
-
-.route-select {
-  background: linear-gradient(135deg, rgba(0, 20, 40, 0.8), rgba(0, 10, 20, 0.8));
-  color: #ffffff;
-  border: 1px solid rgba(0, 212, 255, 0.4);
-  border-radius: 6px;
+  background: linear-gradient(135deg, rgba(0, 60, 120, 0.6), rgba(0, 30, 60, 0.6));
+  border: 1px solid rgba(0, 212, 255, 0.3);
+  border-radius: 6px 6px 0 0;
   padding: 10px;
-  font-size: 14px;
-  transition: all 0.3s ease;
-}
-
-.route-select:hover {
-  border-color: rgba(0, 212, 255, 0.8);
-  box-shadow: 0 0 10px rgba(0, 212, 255, 0.3);
-}
-
-.route-progress {
-  display: flex;
-  flex-direction: column;
-  gap: 8px;
+  font-weight: bold;
 }
 
-.progress-label {
+.task-table-col {
+  flex: 1;
   color: #00d5ff;
-  font-size: 13px;
-  font-weight: bold;
   text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);
+  text-align: center;
 }
 
-.progress-bar {
-  width: 100%;
-  height: 10px;
-  background: rgba(0, 10, 20, 0.6);
-  border: 1px solid rgba(0, 212, 255, 0.2);
-  border-radius: 6px;
-  overflow: hidden;
+.task-name-col {
+  flex: 2;
+  text-align: left;
 }
 
-.progress-fill {
-  height: 100%;
-  background: linear-gradient(90deg, #00d5ff, #00ff88);
-  border-radius: 6px;
-  transition: width 0.5s ease;
-  box-shadow: 0 0 10px rgba(0, 255, 136, 0.5);
+.task-duration-col {
+  flex: 1;
 }
 
-.progress-text {
-  color: #00ff88;
-  font-size: 12px;
-  text-align: right;
-  text-shadow: 0 0 5px rgba(0, 255, 136, 0.5);
+.task-action-col {
+  flex: 1;
 }
 
-/* 任务下达区域 */
-.task-input {
-  display: flex;
-  flex-direction: column;
-  gap: 12px;
+.task-table-body {
+  border: 1px solid rgba(0, 212, 255, 0.3);
+  border-top: none;
+  border-radius: 0 0 6px 6px;
+  overflow: hidden;
 }
 
-.task-input-item {
+.task-table-row {
   display: flex;
-  flex-direction: column;
-  gap: 6px;
-}
-
-.task-input-item label {
-  color: #00d5ff;
-  font-size: 13px;
-  font-weight: bold;
-  text-shadow: 0 0 5px rgba(0, 212, 255, 0.5);
-}
-
-.task-select {
-  background: linear-gradient(135deg, rgba(0, 20, 40, 0.8), rgba(0, 10, 20, 0.8));
-  color: #ffffff;
-  border: 1px solid rgba(0, 212, 255, 0.4);
-  border-radius: 6px;
   padding: 10px;
-  font-size: 14px;
+  border-bottom: 1px solid rgba(0, 212, 255, 0.2);
+  background: linear-gradient(135deg, rgba(0, 20, 40, 0.6), rgba(0, 10, 20, 0.6));
   transition: all 0.3s ease;
-}
-
-.task-select:hover {
-  border-color: rgba(0, 212, 255, 0.8);
-  box-shadow: 0 0 10px rgba(0, 212, 255, 0.3);
-}
-
-.checkbox-group {
-  display: flex;
-  gap: 15px;
-  flex-wrap: wrap;
-}
-
-.checkbox-group label {
   color: #ffffff;
-  font-size: 13px;
-  display: flex;
-  align-items: center;
-  gap: 6px;
-  cursor: pointer;
-  transition: all 0.3s ease;
 }
 
-.checkbox-group label:hover {
-  color: #00d5ff;
-  text-shadow: 0 0 5px rgba(0, 212, 255, 0.8);
+.task-table-row:last-child {
+  border-bottom: none;
 }
 
-.checkbox-group input[type="checkbox"] {
-  accent-color: #00d5ff;
+.task-table-row:hover {
+  background: linear-gradient(135deg, rgba(0, 30, 60, 0.6), rgba(0, 20, 40, 0.6));
+  border-color: rgba(0, 212, 255, 0.5);
+  box-shadow: 0 0 10px rgba(0, 212, 255, 0.3);
 }
 
-.task-btn {
+.execute-btn {
   background: linear-gradient(90deg, #00d5ff, #0066cc);
   color: #ffffff;
   border: none;
-  border-radius: 6px;
-  padding: 12px;
-  font-size: 14px;
+  border-radius: 4px;
+  padding: 6px 12px;
+  font-size: 12px;
   font-weight: bold;
   cursor: pointer;
   transition: all 0.3s ease;
-  margin-top: 10px;
   text-shadow: 0 0 5px rgba(0, 212, 255, 0.8);
-  box-shadow: 0 0 10px rgba(0, 212, 255, 0.3);
+  box-shadow: 0 0 5px rgba(0, 212, 255, 0.3);
 }
 
-.task-btn:hover {
+.execute-btn:hover {
   background: linear-gradient(90deg, #0066cc, #00d5ff);
-  transform: translateY(-2px);
-  box-shadow: 0 0 15px rgba(0, 212, 255, 0.6);
-}
-
-/* 任务列表 */
-.task-list h5 {
-  color: #00d5ff;
-  font-size: 13px;
-  margin: 0 0 12px 0;
-  text-shadow: 0 0 8px rgba(0, 212, 255, 0.8);
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-
-.task-list h5::before {
-  content: '●';
-  font-size: 10px;
-  color: #00d5ff;
-  animation: pulse 2s infinite;
-}
-
-.task-list-item {
-  background: linear-gradient(135deg, rgba(0, 20, 40, 0.6), rgba(0, 10, 20, 0.6));
-  border-radius: 6px;
-  padding: 12px;
-  border-left: 3px solid #00d5ff;
-  border: 1px solid rgba(0, 212, 255, 0.2);
-  transition: all 0.3s ease;
-}
-
-.task-list-item:hover {
-  border-color: rgba(0, 212, 255, 0.5);
-  box-shadow: 0 0 10px rgba(0, 212, 255, 0.3);
-}
-
-.task-id {
-  color: #00ff88;
-  font-size: 14px;
-  font-weight: bold;
-  margin-bottom: 8px;
-  text-shadow: 0 0 5px rgba(0, 255, 136, 0.5);
+  transform: translateY(-1px);
+  box-shadow: 0 0 10px rgba(0, 212, 255, 0.6);
 }
 
-.task-info {
-  display: flex;
-  flex-direction: column;
-  gap: 5px;
-}
 
-.task-info span {
-  color: #ffffff;
-  font-size: 12px;
-  display: flex;
-  align-items: center;
-  gap: 8px;
-}
-
-.task-info span::before {
-  content: '▸';
-  font-size: 10px;
-  color: #00d5ff;
-}
 
 /* 预警成果区域 */
 .warning-section h4 {