From f27ca082eb0a839449dd50c49007b58e5ed6946f Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Thu, 19 Jun 2025 19:08:01 +0800
Subject: [PATCH] feat: 服务名修改

---
 src/components/g-map/DockControlPanel.vue |  204 ++++++++++++++++++++++++++++++++------------------
 1 files changed, 130 insertions(+), 74 deletions(-)

diff --git a/src/components/g-map/DockControlPanel.vue b/src/components/g-map/DockControlPanel.vue
index 284d9ca..b9e6dd9 100644
--- a/src/components/g-map/DockControlPanel.vue
+++ b/src/components/g-map/DockControlPanel.vue
@@ -1,94 +1,137 @@
 <template>
-<div class="dock-control-panel">
-  <!-- title -->
-  <div class="dock-control-panel-header fz16 pl5 pr5 flex-align-center flex-row flex-justify-between">
-    <span>远程调试 {{ props.sn}}</span>
-    <span @click="closeControlPanel">
-    <CloseOutlined />
-    </span>
+  <div class="dock-control-panel">
+    <!-- title -->
+    <div class="dock-control-panel-header fz16 pl5 pr5 flex-align-center flex-row flex-justify-between">
+      <span
+        >设备控制<span class="fz12 pl15">{{ props.sn }}</span></span
+      >
+      <span @click="closeControlPanel">
+        <CloseOutlined />
+      </span>
+    </div>
+    <!-- setting -->
+    <DeviceSettingBox :sn="props.sn" :deviceInfo="props.deviceInfo"></DeviceSettingBox>
+    <!-- cmd -->
+    <div class="control-cmd-wrapper">
+      <div class="control-cmd-header">
+        远程调试
+        <a-switch
+          class="debug-btn"
+          checked-children="开"
+          un-checked-children="关"
+          v-model:checked="debugStatus"
+          @change="onDeviceStatusChange" />
+      </div>
+      <div class="control-cmd-box">
+        <div v-for="(cmdItem, index) in cmdList" :key="cmdItem.cmdKey" class="control-cmd-item">
+          <div class="control-cmd-item-left">
+            <div class="item-label">{{ cmdItem.label }}</div>
+            <div class="item-status">{{ cmdItem.status }}</div>
+          </div>
+          <div class="control-cmd-item-right">
+            <a-button
+              :disabled="!debugStatus || cmdItem.disabled"
+              :loading="cmdItem.loading"
+              size="small"
+              type="primary"
+              @click="sendControlCmd(cmdItem, index)">
+              {{ cmdItem.operateText }}
+            </a-button>
+          </div>
+        </div>
+      </div>
+    </div>
   </div>
-  <!-- cmd -->
-  <div class="control-cmd-wrapper">
-    <div v-for="(cmdItem, index) in cmdList" :key="cmdItem.cmdKey" class="control-cmd-item">
-     <div class="control-cmd-item-left">
-        <div class="item-label">{{ cmdItem.label }}</div>
-        <div class="item-status">{{ cmdItem.status }}</div>
-     </div>
-     <div class="control-cmd-item-right">
-        <a-button :loading="cmdItem.loading" size="small" type="primary" @click="sendControlCmd(cmdItem, index)">
-        {{ cmdItem.operateText }}
-        </a-button>
-     </div>
-   </div>
- </div>
-</div>
-
 </template>
 
 <script setup lang="ts">
 import { defineProps, defineEmits, ref, watch } from 'vue'
-import {
-  CloseOutlined
-} from '@ant-design/icons-vue'
-import { useDockControl } from './useDockControl'
-import { DeviceInfoType } from '/@/types/device'
+import { CloseOutlined } from '@ant-design/icons-vue'
+import { useDockControl } from './use-dock-control'
+import { DeviceInfoType, EDockModeCode } from '/@/types/device'
 import { cmdList as baseCmdList, DeviceCmdItem } from '/@/types/device-cmd'
 import { useMyStore } from '/@/store'
 import { updateDeviceCmdInfoByOsd, updateDeviceCmdInfoByExecuteInfo } from '/@/utils/device-cmd'
+import DeviceSettingBox from './DeviceSettingBox.vue'
 
 const props = defineProps<{
-  sn: string,
-  deviceInfo: DeviceInfoType,
+  sn: string
+  deviceInfo: DeviceInfoType
 }>()
 
 const store = useMyStore()
-const initCmdList = baseCmdList.map(cmdItem => Object.assign({}, cmdItem))
+const initCmdList = baseCmdList.map((cmdItem) => Object.assign({}, cmdItem))
 const cmdList = ref(initCmdList)
 
 // 根据机场指令执行状态更新信息
-watch(() => store.state.devicesCmdExecuteInfo, (devicesCmdExecuteInfo) => {
-  if (props.sn && devicesCmdExecuteInfo[props.sn]) {
-    updateDeviceCmdInfoByExecuteInfo(cmdList.value, devicesCmdExecuteInfo[props.sn])
-  }
-}, {
-  immediate: true,
-  deep: true,
-})
+watch(
+  () => store.state.devicesCmdExecuteInfo,
+  (devicesCmdExecuteInfo) => {
+    if (props.sn && devicesCmdExecuteInfo[props.sn]) {
+      updateDeviceCmdInfoByExecuteInfo(cmdList.value, devicesCmdExecuteInfo[props.sn])
+    }
+  },
+  {
+    immediate: true,
+    deep: true,
+  },
+)
 
 // 根据设备osd信息更新信息
-watch(() => props.deviceInfo, (value) => {
-  updateDeviceCmdInfoByOsd(cmdList.value, value)
-  // console.log('deviceInfo', value)
-}, {
-  immediate: true,
-  deep: true
-})
+watch(
+  () => props.deviceInfo,
+  (value) => {
+    updateDeviceCmdInfoByOsd(cmdList.value, value)
+    // console.log('deviceInfo', value)
+  },
+  {
+    immediate: true,
+    deep: true,
+  },
+)
 
 const emit = defineEmits(['close-control-panel'])
 
 function closeControlPanel () {
-  emit('close-control-panel', props.sn, false)
+  emit('close-control-panel', props.sn)
 }
 
 // dock 控制指令
-const {
-  sendDockControlCmd,
-} = useDockControl()
+const debugStatus = ref(props.deviceInfo.dock?.basic_osd.mode_code === EDockModeCode.Remote_Debugging)
+
+async function onDeviceStatusChange (status: boolean) {
+  let result = false
+  if (status) {
+    result = await dockDebugOnOff(props.sn, true)
+  } else {
+    result = await dockDebugOnOff(props.sn, false)
+  }
+  if (!result) {
+    if (status) {
+      debugStatus.value = false
+    } else {
+      debugStatus.value = true
+    }
+  }
+}
+
+const { sendDockControlCmd, dockDebugOnOff } = useDockControl()
 
 async function sendControlCmd (cmdItem: DeviceCmdItem, index: number) {
-  const success = await sendDockControlCmd({
+  const params = {
     sn: props.sn,
-    cmd: cmdItem.cmdKey
-  }, true)
+    cmd: cmdItem.cmdKey,
+    action: cmdItem.action,
+  }
+  const success = await sendDockControlCmd(params, true)
   if (success) {
     // updateDeviceSingleCmdInfo(cmdList.value[index])
   }
 }
-
 </script>
 
-<style lang='scss' scoped>
-.dock-control-panel{
+<style lang="scss" scoped>
+.dock-control-panel {
   position: absolute;
   left: calc(100% + 10px);
   top: 0px;
@@ -98,31 +141,44 @@
   color: #fff;
   border-radius: 2px;
 
-  .dock-control-panel-header{
+  .dock-control-panel-header {
     border-bottom: 1px solid #515151;
   }
 
-  .control-cmd-wrapper{
-    display: flex;
-    flex-wrap: wrap;
-    justify-content: space-between;
-    padding: 4px 10px;
-    .control-cmd-item{
-      width: 220px;
-      height: 58px;
+  .control-cmd-wrapper {
+    .control-cmd-header {
+      font-size: 14px;
+      font-weight: 600;
+      padding: 10px 10px 0px;
+
+      .debug-btn {
+        margin-left: 10px;
+        border: 1px solid #585858;
+      }
+    }
+
+    .control-cmd-box {
       display: flex;
-      align-items: center;
+      flex-wrap: wrap;
       justify-content: space-between;
-      border: 1px solid #666;
-      margin: 4px 0;
-      padding: 0 8px;
-
-      .control-cmd-item-left{
+      padding: 4px 10px;
+      .control-cmd-item {
+        width: 220px;
+        height: 58px;
         display: flex;
-        flex-direction: column;
+        align-items: center;
+        justify-content: space-between;
+        border: 1px solid #666;
+        margin: 4px 0;
+        padding: 0 8px;
 
-        .item-label{
-          font-weight: 700;
+        .control-cmd-item-left {
+          display: flex;
+          flex-direction: column;
+
+          .item-label {
+            font-weight: 700;
+          }
         }
       }
     }

--
Gitblit v1.9.3