From c45531e760a5f4cc69dd2314a4f5bbcdc881d30a Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 03 Apr 2025 09:55:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 .env.development                                                                     |   14 ++
 src/views/SignMachineNest/components/MachineRight/MachineStatus.vue                  |   18 ++
 package.json                                                                         |    3 
 src/store/modules/home.js                                                            |  125 ++++++++++----------
 src/views/SignMachineNest/components/MachineRight/components/MachineTableDetails.vue |   85 ++++++++++++++
 src/views/SignMachineNest/SignMachineNest.vue                                        |   31 +---
 src/views/SignMachineNest/components/MachineLeft/MachineData.vue                     |   45 +++----
 7 files changed, 208 insertions(+), 113 deletions(-)

diff --git a/.env.development b/.env.development
index dd35770..03f00db 100644
--- a/.env.development
+++ b/.env.development
@@ -3,5 +3,17 @@
 VITE_APP_ENV = 'development'
 
 #接口地址
-# VITE_APP_API_URL = https://wrj.shuixiongit.com/api
+VITE_APP_API = /api
+VITE_APP_API_URL = https://wrj.shuixiongit.com/api
 
+# 连接本地服务器
+# VITE_APP_API_URL = http://192.168.1.204
+
+#调试参数
+VITE_APP_DEBUG_KEY = saber
+VITE_APP_DEBUG_SWITCH = false
+
+#页面基础路径
+VITE_APP_BASE = /command-center-dashboard/
+# ws地址
+VITE_APP_WS_API_URL = wss://wrj.shuixiongit.com/drone-wss/api/v1/ws
diff --git a/package.json b/package.json
index d2bf20f..51ddf33 100644
--- a/package.json
+++ b/package.json
@@ -39,8 +39,7 @@
     "vue-i18n": "^9.1.9",
     "vue-router": "^4.3.2",
     "vue3-clipboard": "^1.0.0",
-    "vuex": "^4.1.0",
-    "@turf/turf": "^6.5.0"
+    "vuex": "^4.1.0"
   },
   "devDependencies": {
     "@vitejs/plugin-vue": "^5.0.4",
diff --git a/src/store/modules/home.js b/src/store/modules/home.js
index ccf7e2a..3c93ae4 100644
--- a/src/store/modules/home.js
+++ b/src/store/modules/home.js
@@ -2,67 +2,70 @@
 import { EDeviceTypeName } from '@/utils/staticData/enums'
 
 const home = {
-	state: {
-		singleUavHome: {},
-		// 项目id
-		selectedWorkSpaceId: window.localStorage.getItem('bs_workspace_id'),
-		wsMessage: {},
-		deviceState: {
-			gatewayInfo: {},
-			deviceInfo: {},
-			timestamp: '',
-			dockInfo: {},
-			currentSn: '',
-			currentType: -1,
-			drone_charge_state_new: {},
-			psdk_widget_values: {},
-			speakerAudioPlayStartProgress: {},
-		},
-		osdVisible: {
-			// osd 显示设备相关信息
-			sn: '',
-			callsign: '',
-			model: '',
-			visible: false,
-			gateway_sn: '',
-			is_dock: false,
-			payloads: null,
-			device_domain: '',
-			device_sub_type: '',
-			device_type: '',
-		},
-	},
-	actions: {},
-	mutations: {
-		setSingleUavHome: (state, data) => {
-			state.singleUavHome = data
-		},
-		setSelectedWorkSpaceId: (state, id) => {
-			state.selectedWorkSpaceId = id
-			window.localStorage.setItem('bs_workspace_id', id)
-		},
-		setOsdVisibleInfo: (state, info) => {
-			console.log(info, '哒哒哒')
-			state.osdVisible = Object.assign({}, info)
-			window.localStorage.setItem('bs_osd', JSON.stringify(info))
-		},
-		setWsMessage: (state, data) => {
-			state.wsMessage = data.host
-		},
-		setDeviceInfo: (state, data) => {
-			const info = data.data
-			state.deviceState.timestamp = data.timestamp
-			state.deviceState.deviceInfo[info.sn] = info.host
-			state.deviceState.currentSn = info.sn
-			state.deviceState.currentType = EDeviceTypeName.Aircraft
-		},
-		setGatewayInfo: (state, info) => {
-			state.deviceState.gatewayInfo[info.sn] = info.host
-			state.deviceState.currentSn = info.sn
-			state.deviceState.currentType = EDeviceTypeName.Gateway
-		},
-		setDockOnfo: (state, info) => {
-			if (Object.keys(info.host).length === 0) return
+  state: {
+    singleUavHome: {},
+    singleTotal: {}, // 统计单个机巢数据
+    // 项目id
+    selectedWorkSpaceId: window.localStorage.getItem('bs_workspace_id'),
+    wsMessage: {},
+    deviceState: {
+      gatewayInfo: {},
+      deviceInfo: {},
+      timestamp: '',
+      dockInfo: {},
+      currentSn: '',
+      currentType: -1,
+      drone_charge_state_new: {},
+      psdk_widget_values: {},
+      speakerAudioPlayStartProgress: {},
+    },
+    osdVisible: {
+      // osd 显示设备相关信息
+      sn: '',
+      callsign: '',
+      model: '',
+      visible: false,
+      gateway_sn: '',
+      is_dock: false,
+      payloads: null,
+      device_domain: '',
+      device_sub_type: '',
+      device_type: '',
+    },
+  },
+  actions: {},
+  mutations: {
+    setSingleUavHome: (state, data) => {
+      state.singleUavHome = data;
+    },
+    setSingleTotal: (state, data) => {
+      state.singleTotal = data;
+    },
+    setSelectedWorkSpaceId: (state, id) => {
+      state.selectedWorkSpaceId = id
+      window.localStorage.setItem('bs_workspace_id', id)
+    },
+    setOsdVisibleInfo: (state, info) => {
+      state.osdVisible = Object.assign({}, info)
+      window.localStorage.setItem('bs_osd', JSON.stringify(info))
+    },
+    setWsMessage: (state, data) => {
+      state.wsMessage = data.host;
+    },
+    setDeviceInfo: (state, data) => {
+      const info = data.data
+      state.deviceState.timestamp = data.timestamp
+      state.deviceState.deviceInfo[info.sn] = info.host
+      state.deviceState.currentSn = info.sn
+      state.deviceState.currentType = EDeviceTypeName.Aircraft
+    },
+    setGatewayInfo: (state, info) => {
+      state.deviceState.gatewayInfo[info.sn] = info.host
+      state.deviceState.currentSn = info.sn
+      state.deviceState.currentType = EDeviceTypeName.Gateway
+    },
+    setDockOnfo: (state, info) => {
+      if (Object.keys(info.host).length === 0) return
 
 			if (!state.deviceState.dockInfo[info.sn]) {
 				state.deviceState.dockInfo[info.sn] = {}
diff --git a/src/views/SignMachineNest/SignMachineNest.vue b/src/views/SignMachineNest/SignMachineNest.vue
index 5418d68..859a9e2 100644
--- a/src/views/SignMachineNest/SignMachineNest.vue
+++ b/src/views/SignMachineNest/SignMachineNest.vue
@@ -11,7 +11,7 @@
 import { EBizCode } from '@/utils/staticData/enums.js';
 import { EModeCode } from '@/utils/staticData/device.js';
 import { useStore } from 'vuex';
-import { getDeviceDetail } from '@/api/home/machineNest';
+import { getDeviceDetail, getFlightStatistics } from '@/api/home/machineNest';
 
 
 const store = useStore();
@@ -59,25 +59,6 @@
     const result = res.data.data;
     const child = result.children;
     // 对应store 里面数据结构
-    // const device = {
-    //   visible: true,
-    //   is_dock: true,
-    //   model: child?.device_name,
-    //   callsign: child?.nickname,
-    //   sn: child?.device_sn,
-    //   mode: EModeCode.Disconnected,
-    //   latest_wayline_job: result.latest_wayline_job,
-    //   gateway: {
-    //     model: result?.device_name,
-    //     callsign: result?.nickname,
-    //     sn: result?.device_sn,
-    //     domain: result?.domain,
-    //     device_domain: child.domain,
-    //     device_type: child.type,
-    //     device_sub_type: child.sub_type,
-    //   },
-    //   payload: child.payloads_list || [],
-    // };
     osdVisible.value.sn = child?.device_sn || ''
     osdVisible.value.callsign = child?.nickname || '--'
     osdVisible.value.model = EModeCode.Disconnected || ''
@@ -97,8 +78,18 @@
   });
 };
 
+// 获取机巢统计数据 提供给左右侧组件使用
+const getMachineData = () => {
+  getFlightStatistics(singleUavHome.value.device_sn).then(res => {
+    if (res.data.code !== 0) return;
+    const result = res.data.data;
+    store.commit('setSingleTotal', result);
+  })
+};
+
 onMounted(() => {
   getSingleDetails();
+  getMachineData();
 });
 
 onUnmounted(() => {
diff --git a/src/views/SignMachineNest/components/MachineLeft/MachineData.vue b/src/views/SignMachineNest/components/MachineLeft/MachineData.vue
index 20cbff0..0a4db03 100644
--- a/src/views/SignMachineNest/components/MachineLeft/MachineData.vue
+++ b/src/views/SignMachineNest/components/MachineLeft/MachineData.vue
@@ -13,9 +13,9 @@
 </template>
 
 <script setup>
-import { getFlightStatistics } from '@/api/home/machineNest.js'
 import { pxToRem } from '@/utils/rem';
 import CommonTitle from '@/components/CommonTitle.vue';
+import { useStore } from 'vuex';
 import rwcs from '@/assets/images/signMachineNest/machineLeft/rwcs.png';
 import sjs from '@/assets/images/signMachineNest/machineLeft/sjs.png';
 import jscb from '@/assets/images/signMachineNest/machineLeft/jscb.png';
@@ -23,33 +23,26 @@
 import fxlc from '@/assets/images/signMachineNest/machineLeft/fxlc.png';
 import fxsc from '@/assets/images/signMachineNest/machineLeft/fxsc.png';
 
-const statisticsList = ref([
-  { imgurl: rwcs, num: 1314, text: '任务次数(次)' },
-  { imgurl: sjs, num: 1314, text: '事件数(件)' },
-  { imgurl: jscb, num: 1314, text: '节省成本(万元)' },
-  { imgurl: rwcg, num: 1314, text: '任务成果(个)' },
-  { imgurl: fxlc, num: 1314, text: '飞行里程(公里)' },
-  { imgurl: fxsc, num: 1314, text: '飞行时长' },
-]);
+const store = useStore();
 
-// 获取机巢统计数据
-const getMachineData = () => {
-  let dockSn = ref('4TADKCM0010016');
-  getFlightStatistics(dockSn.value).then(res => {
-    if (res.data.code !== 0) return;
-    const result = res.data.data;
-    statisticsList.value[0].num = result.fly_count || 0;
-    statisticsList.value[1].num = result.event_count || 0;
-    statisticsList.value[2].num = result.total_cost_saved || 0;
-    statisticsList.value[3].num = result.achievement_count || 0;
-    statisticsList.value[4].num = result.flight_mileage || 0;
-    statisticsList.value[5].num = `${result.hour_count}:${result.min_count}` || 0;
-  })
-};
+const statisticsList = ref([]);
 
-onMounted(() => {
-  getMachineData();
-});
+// 添加监听
+watch(
+  () => store.state.home.singleTotal,
+  (newValue) => {
+    if (!newValue) return;
+    statisticsList.value = [
+      { imgurl: rwcs, num: newValue.fly_count || 0, text: '任务次数(次)' },
+      { imgurl: sjs, num: newValue.event_count || 0, text: '事件数(件)' },
+      { imgurl: jscb, num: newValue.total_cost_saved || 0, text: '节省成本(万元)' },
+      { imgurl: rwcg, num: newValue.achievement_count || 0, text: '任务成果(个)' },
+      { imgurl: fxlc, num: newValue.flight_mileage || 0, text: '飞行里程(公里)' },
+      { imgurl: fxsc, num: newValue.hour_count || 0, text: '飞行时长(H)' }
+    ];
+  },
+  { immediate: true, deep: true }
+);
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/SignMachineNest/components/MachineRight/MachineStatus.vue b/src/views/SignMachineNest/components/MachineRight/MachineStatus.vue
index 0c3549f..197277b 100644
--- a/src/views/SignMachineNest/components/MachineRight/MachineStatus.vue
+++ b/src/views/SignMachineNest/components/MachineRight/MachineStatus.vue
@@ -1,6 +1,6 @@
 <!-- 机巢状态 -->
 <template>
-  <CommonTitle title="机巢状态" />
+  <CommonTitle title="机巢状态" @details="detailsFun" />
   <div :style="{ marginLeft: pxToRem(14) }">
     <div class="machine-status">
       <div class="info">
@@ -54,18 +54,19 @@
             <img src="@/assets/images/signMachineNest/machineRight/distance.png" alt="">
             <span class="text">飞行距离</span>
           </div>
-          <div class="text-data">98<span class="text">km</span></div>
+          <div class="text-data">{{ singleTotal.flight_mileage }}<span class="text">km</span></div>
         </div>
         <div class="card">
           <div>
             <img src="@/assets/images/signMachineNest/machineRight/duration.png" alt="">
             <span class="text">飞行时长</span>
           </div>
-          <div class="text-data">188<span class="text">min</span></div>
+          <div class="text-data">{{ singleTotal.hour_count }}<span class="text">h</span></div>
         </div>
       </div>
     </div>
   </div>
+  <!-- <MachineTableDetails :dialogVisible="isShowDetails" /> -->
 </template>
 
 <script setup>
@@ -76,7 +77,13 @@
 import { useStore } from 'vuex';
 
 const store = useStore();
+// 获取机巢信息
 let osdVisible = computed(() => store.state.home.osdVisible);
+// 单个机巢统计数据
+const singleTotal = computed(() => store.state.home.singleTotal);
+// 是否展示机机巢状态详情
+let isShowDetails = ref(false);
+
 let str = '--';
 let drone_charge_state = ref({
   capacity_percent: '--',
@@ -243,6 +250,11 @@
   }
   return theFinheight.toFixed(1);
 };
+
+// 详情
+const detailsFun = () => {
+  isShowDetails.value = true;
+};
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/SignMachineNest/components/MachineRight/components/MachineTableDetails.vue b/src/views/SignMachineNest/components/MachineRight/components/MachineTableDetails.vue
new file mode 100644
index 0000000..6e4400c
--- /dev/null
+++ b/src/views/SignMachineNest/components/MachineRight/components/MachineTableDetails.vue
@@ -0,0 +1,85 @@
+<!-- 机巢列表详情 -->
+<template>
+  <div>
+    
+  </div>
+  <el-dialog
+    v-model="dialogVisible"
+    title="机巢详情"
+    width="800px"
+    :close-on-click-modal="false"
+    :destroy-on-close="true"
+  >
+    <el-table :data="tableData" style="width: 100%">
+      <el-table-column prop="name" label="名称" />
+      <el-table-column prop="value" label="数值" />
+      <el-table-column prop="status" label="状态" />
+      <el-table-column prop="time" label="时间" />
+    </el-table>
+  </el-dialog>
+</template>
+
+<script setup>
+const props = defineProps({
+  dialogVisible: {
+    type: Boolean,
+    default: false,
+  },
+});
+
+// const dialogVisible = ref(false);
+const tableData = ref([
+  {
+    name: '机巢1号',
+    value: '98%',
+    status: '正常',
+    time: '2024-03-20 10:00:00'
+  },
+  {
+    name: '电池状态',
+    value: '95%',
+    status: '正常',
+    time: '2024-03-20 10:00:00'
+  },
+  {
+    name: '信号强度',
+    value: '强',
+    status: '正常',
+    time: '2024-03-20 10:00:00'
+  }
+]);
+</script>
+
+<style lang="scss" scoped>
+// ... 其他样式 ...
+
+:deep(.el-dialog) {
+  background: linear-gradient(
+    270deg,
+    #1f3e7a 0%,
+    rgba(31, 62, 122, 0.95) 79%,
+    rgba(31, 62, 122, 0.9) 100%
+  );
+  .el-dialog__header {
+    color: #fff;
+    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
+    margin: 0;
+    padding: 15px 20px;
+    .el-dialog__title {
+      color: #fff;
+    }
+  }
+  .el-dialog__body {
+    color: #fff;
+    padding: 20px;
+  }
+  .el-table {
+    background-color: transparent;
+    --el-table-tr-bg-color: transparent;
+    --el-table-border-color: rgba(255, 255, 255, 0.1);
+    --el-table-header-bg-color: rgba(31, 62, 122, 0.5);
+    --el-table-header-text-color: #fff;
+    --el-table-text-color: #fff;
+  }
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3