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/pages/page-web/projects/components/route-edit/components/setting.vue |  117 ++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 85 insertions(+), 32 deletions(-)

diff --git a/src/pages/page-web/projects/components/route-edit/components/setting.vue b/src/pages/page-web/projects/components/route-edit/components/setting.vue
index 05a641d..fca2f18 100644
--- a/src/pages/page-web/projects/components/route-edit/components/setting.vue
+++ b/src/pages/page-web/projects/components/route-edit/components/setting.vue
@@ -3,36 +3,34 @@
     <a-popover placement="bottom" trigger="click" :getPopupContainer="(triggerNode: any) => triggerNode.parentNode">
       <template #content>
         <div class="setting-content">
-          <div class="start-point common">
+          <div class="start-point common" v-if="xmlTemplate.missionConfig?.takeOffRefPoint['#text']">
             <div class="title">起飞点</div>
             <div class="value">
               {{ xmlTemplate.missionConfig?.takeOffRefPoint['#text'] !== '' ? '已设置' : '未设置' }}
             </div>
           </div>
+          <div class="no-start-point" v-else>
+            <img :src="getResource('waylinetool/无人机起降场.png')" alt="icon">
+            <span>参考起飞点未设置</span>
+          </div>
           <div class="photo-setting common">
             <div class="title">拍照设置</div>
             <ul class="select-box">
-              <li class="select-item" v-for="item in photoSetting" :key="item.value" :style="{
-      '--settingColor': xmlTemplate.Folder.payloadParam?.imageFormat['#text']
-        .split(',')
-        .includes(item.value)
-        ? '#409eff'
-        : '#3c3c3c',
-    }" @click="selectPhotoSetting(item.value)">
+              <li
+                class="select-item"
+                v-for="item in photoSetting"
+                :key="item.value"
+                :style="{
+                  '--settingColor': xmlTemplate.Folder.payloadParam?.imageFormat['#text']
+                    .split(',')
+                    .includes(item.value)
+                    ? '#409eff'
+                    : '#3c3c3c',
+                }"
+                @click="selectPhotoSetting(item.value)">
                 {{ item.title }}照片
               </li>
             </ul>
-            <!-- <div class="auto-low-light">
-              <div class="title">自动低光</div>
-              <a-tooltip
-                placement="right"
-                :title="tipDescriptionEnums.rowLightModeTip">
-                <a-switch
-                  v-model:checked="setting.orientedPhotoMode"
-                  checkedValue="lowLightSmartShooting"
-                  unCheckedValue="normalPhoto" />
-              </a-tooltip>
-            </div> -->
           </div>
           <!-- 爬升 -->
           <div class="climb-mode common">
@@ -51,8 +49,11 @@
                   <li @click="numberControls(true, 100, 'takeOffSecurityHeight')">+100</li>
                   <li @click="numberControls(true, 10, 'takeOffSecurityHeight')">+10</li>
                   <li class="parameter-input">
-                    <a-input-number :min="2" :max="1500"
-                      v-model:value="xmlTemplate.missionConfig.takeOffSecurityHeight['#text']"></a-input-number>m
+                    <a-input-number
+                      :min="2"
+                      :max="1500"
+                      v-model:value="xmlTemplate.missionConfig.takeOffSecurityHeight['#text']"></a-input-number
+                    >m
                   </li>
                   <li @click="numberControls(false, 100, 'takeOffSecurityHeight')">-100</li>
                   <li @click="numberControls(false, 10, 'takeOffSecurityHeight')">-10</li>
@@ -62,15 +63,17 @@
           </div>
           <!-- 高度模式 -->
           <div class="height-mode common">
-            <a-tooltip placement="right"
+            <a-tooltip
+              placement="right"
               :title="tipDescriptionEnums[xmlTemplate.Folder.waylineCoordinateSysParam.heightMode['#text']]">
               <div class="title">航线高度模式</div>
               <div class="mode-box">
-                <a-radio-group v-model:value="xmlTemplate.Folder.waylineCoordinateSysParam.heightMode['#text']"
+                <a-radio-group
+                  v-model:value="xmlTemplate.Folder.waylineCoordinateSysParam.heightMode['#text']"
                   button-style="solid">
                   <a-radio-button v-for="item in heightModeSetting" :key="item.value" :value="item.value">{{
-      item.title
-    }}</a-radio-button>
+                    item.title
+                  }}</a-radio-button>
                 </a-radio-group>
               </div>
               <div class="parameter-tool">
@@ -81,8 +84,11 @@
                   <li @click="numberControls(true, 100, 'globalHeight')">+100</li>
                   <li @click="numberControls(true, 10, 'globalHeight')">+10</li>
                   <li class="parameter-input">
-                    <a-input-number :min="0" :max="10000"
-                      v-model:value="xmlTemplate.Folder.globalHeight['#text']"></a-input-number>m
+                    <a-input-number
+                      :min="0"
+                      :max="10000"
+                      v-model:value="xmlTemplate.Folder.globalHeight['#text']"></a-input-number
+                    >m
                   </li>
                   <li @click="numberControls(false, 100, 'globalHeight')">-100</li>
                   <li @click="numberControls(false, 10, 'globalHeight')">-10</li>
@@ -96,7 +102,10 @@
             <div class="speed-box">
               <div class="subtract" @click="numberControls(false, 1, 'autoFlightSpeed')">-</div>
               <div class="text">
-                <a-input-number v-model:value="xmlTemplate.Folder.autoFlightSpeed['#text']" :min="1" :max="15"
+                <a-input-number
+                  v-model:value="xmlTemplate.Folder.autoFlightSpeed['#text']"
+                  :min="1"
+                  :max="15"
                   class="value">
                 </a-input-number>
                 m / s
@@ -115,7 +124,7 @@
 import { reactive, defineProps } from 'vue'
 import { tipDescriptionEnums } from './enums'
 import useKmzTsa, { kmlStr, template as xmlTemplate } from '/@/utils/cesium/use-kmz-tsa'
-import useMapDraw from '/@/utils/cesium/use-map-draw'
+import useMapDraw, { kmlEntities as globalEntities } from '/@/utils/cesium/use-map-draw'
 import { getKmlParams } from '/@/utils/cesium/kmz'
 import { cesiumOperation } from '/@/hooks/use-cesium-tsa'
 import { message } from 'ant-design-vue'
@@ -125,6 +134,7 @@
 
 const mapDraw = useMapDraw('', '', '', global)
 const { removeAllDataSource, removeAllPoint } = cesiumOperation()
+const kmzUtils = useKmzTsa()
 
 interface setting {
   imageFormat: string[]
@@ -136,6 +146,10 @@
 
 const getSvgResource = (name: string) => {
   return new URL(`/src/assets/svg/${name}`, import.meta.url).href
+}
+
+const getResource = (name: string) => {
+  return new URL(`/src/assets/icons/${name}`, import.meta.url).href
 }
 
 const climbImage = getSvgResource('climb.svg')
@@ -168,7 +182,7 @@
 
 // 计算
 const numberControls = (isAdd: boolean, computeVal: number, key: string) => {
-  let obj = { '#text': 0 }
+  let obj = { '#text': '0' }
   if (key === 'takeOffSecurityHeight') {
     obj = xmlTemplate.value.missionConfig.takeOffSecurityHeight
   }
@@ -184,11 +198,28 @@
   } else {
     value -= computeVal
   }
-  obj['#text'] = value
+  obj['#text'] = value.toString()
+  if (key === 'globalHeight') {
+    const placemarkArr = xmlTemplate.value.Folder.Placemark
+    placemarkArr.forEach((placemark: { useGlobalHeight: { [x: string]: any }; height: { [x: string]: string } }) => {
+      if (Reflect.has(placemark, 'useGlobalHeight')) {
+        placemark.height['#text'] = value.toString()
+      }
+    })
+    const xmlString = kmzUtils.generateXML(xmlTemplate.value)
+    mapDraw.drawWayline(globalEntities.value, xmlString)
+  }
 }
 
 // 拍照选择
 const selectPhotoSetting = (value: string) => {
+  if (!xmlTemplate.value.Folder.payloadParam) {
+    xmlTemplate.value.Folder.payloadParam = {
+      imageFormat: {
+        '#text': '',
+      },
+    }
+  }
   const imageFormat = xmlTemplate.value.Folder.payloadParam.imageFormat
   const imageFormatArr = imageFormat['#text'].split(',')
   if (imageFormatArr.includes(value)) {
@@ -231,6 +262,29 @@
       .value {
         margin-left: auto;
         color: #409eff;
+      }
+
+      .no-setting {
+        &__value {
+          width: 100%;
+          text-align: center;
+          font-weight: bold;
+        }
+      }
+    }
+    .no-start-point {
+      border-radius: 10px;
+      padding: 15px;
+      margin-bottom: 16px;
+      background-color: #409eff;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-weight: bold;
+      img {
+        width: 18px;
+        height: 18px;
+        margin-right: 5px;
       }
     }
 
@@ -433,7 +487,6 @@
 
   :deep() {
     .ant-popover-content {
-
       .ant-popover-arrow,
       .ant-popover-inner {
         background-color: #101010;

--
Gitblit v1.9.3