Browse Source

Merge remote-tracking branch 'origin/master'

S0025136190 1 year ago
parent
commit
9bc954705d

+ 5 - 1
Backend/sample/src/main/resources/hms.json

@@ -636,9 +636,13 @@
     "en": "Wind speed too high (≥ 9 m/s). Unable to perform task",
     "zh": "风速过大(≥9 m/s),无法执行飞行任务"
   },
+  "dock_tip_0x19114001": {
+    "en": "Wind speed too high (≥ 9 m/s). Unable to perform task",
+    "zh": "风速过大(≥9 m/s),无法执行飞行任务"
+  },
   "dock_tip_0x19114800": {
     "en": "Heavy rainfall. Unable to perform task",
-    "zh": "雨量过大,无法执行飞行任务"
+    "zh": "雨量过大,无法执行飞行任务,若飞行器已在空中请立即返航"
   },
   "dock_tip_0x19114801": {
     "en": "Dock security camera power supply error",

File diff suppressed because it is too large
+ 597 - 366
Web/src/components/airport/components/InfoModal.vue


File diff suppressed because it is too large
+ 5 - 0
Web/src/components/airport/icons/aircraft_selected.svg


File diff suppressed because it is too large
+ 0 - 0
Web/src/components/airport/icons/info/action.svg


File diff suppressed because it is too large
+ 0 - 0
Web/src/components/airport/icons/info/action_selected.svg


+ 10 - 0
Web/src/components/airport/icons/info/batteryFour.svg

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>Icons/battery 4</title>
+    <g id="Icons/battery" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="编组" transform="translate(16.039062, 16.000000) rotate(-90.000000) translate(-16.039062, -16.000000) translate(1.039062, 8.460938)" fill-rule="nonzero">
+            <polygon id="路径" fill="#E02020" points="3.6 3.23125 7.6 3.23125 7.6 11.846875 3.6 11.846875"></polygon>
+            <path d="M28.9924124,4.309375 L27.6835528,4.309375 L27.6835528,1.078125 C27.6835528,0.484375 27.1646954,0 26.5286766,0 L1.15487614,0 C0.522204865,0 0,0.484375 0,1.078125 L0,14 C0,14.590625 0.518857398,15.078125 1.15487614,15.078125 L26.5353716,15.078125 C27.1680428,15.078125 27.6902477,14.59375 27.6902477,14 L27.6902477,10.771875 L28.9991073,10.771875 C29.5514394,10.771875 30,10.353125 30,9.8375 L30,5.24375 C29.9933051,4.73125 29.5447445,4.309375 28.9924124,4.309375 Z M25.3804954,12.925 L2.30640482,12.925 L2.30640482,2.15625 L25.377148,2.15625 L25.377148,12.925 L25.3804954,12.925 Z" id="形状" fill="#FFFFFF"></path>
+        </g>
+    </g>
+</svg>

+ 13 - 0
Web/src/components/airport/icons/info/batteryOne.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>Icons/battery</title>
+    <g id="Icons/battery" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="编组" transform="translate(16.039062, 16.000000) rotate(-90.000000) translate(-16.039062, -16.000000) translate(1.039062, 8.460938)" fill="#FFFFFF" fill-rule="nonzero">
+            <polygon id="路径" points="3.6 3.23125 7.6 3.23125 7.6 11.846875 3.6 11.846875"></polygon>
+            <polygon id="路径" points="9.06666667 3.23125 13.0666667 3.23125 13.0666667 11.846875 9.06666667 11.846875"></polygon>
+            <polygon id="路径" points="14.5333333 3.23125 18.5333333 3.23125 18.5333333 11.846875 14.5333333 11.846875"></polygon>
+            <polygon id="路径" points="20 3.23125 24 3.23125 24 11.846875 20 11.846875"></polygon>
+            <path d="M28.9924124,4.309375 L27.6835528,4.309375 L27.6835528,1.078125 C27.6835528,0.484375 27.1646954,0 26.5286766,0 L1.15487614,0 C0.522204865,0 0,0.484375 0,1.078125 L0,14 C0,14.590625 0.518857398,15.078125 1.15487614,15.078125 L26.5353716,15.078125 C27.1680428,15.078125 27.6902477,14.59375 27.6902477,14 L27.6902477,10.771875 L28.9991073,10.771875 C29.5514394,10.771875 30,10.353125 30,9.8375 L30,5.24375 C29.9933051,4.73125 29.5447445,4.309375 28.9924124,4.309375 Z M25.3804954,12.925 L2.30640482,12.925 L2.30640482,2.15625 L25.377148,2.15625 L25.377148,12.925 L25.3804954,12.925 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

+ 11 - 0
Web/src/components/airport/icons/info/batteryThree.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>Icons/battery 3</title>
+    <g id="Icons/battery" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="编组" transform="translate(16.039062, 16.000000) rotate(-90.000000) translate(-16.039062, -16.000000) translate(1.039062, 8.460938)" fill="#FFFFFF" fill-rule="nonzero">
+            <polygon id="路径" points="3.6 3.23125 7.6 3.23125 7.6 11.846875 3.6 11.846875"></polygon>
+            <polygon id="路径" points="9.06666667 3.23125 13.0666667 3.23125 13.0666667 11.846875 9.06666667 11.846875"></polygon>
+            <path d="M28.9924124,4.309375 L27.6835528,4.309375 L27.6835528,1.078125 C27.6835528,0.484375 27.1646954,0 26.5286766,0 L1.15487614,0 C0.522204865,0 0,0.484375 0,1.078125 L0,14 C0,14.590625 0.518857398,15.078125 1.15487614,15.078125 L26.5353716,15.078125 C27.1680428,15.078125 27.6902477,14.59375 27.6902477,14 L27.6902477,10.771875 L28.9991073,10.771875 C29.5514394,10.771875 30,10.353125 30,9.8375 L30,5.24375 C29.9933051,4.73125 29.5447445,4.309375 28.9924124,4.309375 Z M25.3804954,12.925 L2.30640482,12.925 L2.30640482,2.15625 L25.377148,2.15625 L25.377148,12.925 L25.3804954,12.925 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

+ 12 - 0
Web/src/components/airport/icons/info/batteryTwo.svg

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>Icons/battery 2</title>
+    <g id="Icons/battery" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="编组" transform="translate(16.039062, 16.000000) rotate(-90.000000) translate(-16.039062, -16.000000) translate(1.039062, 8.460938)" fill="#FFFFFF" fill-rule="nonzero">
+            <polygon id="路径" points="3.6 3.23125 7.6 3.23125 7.6 11.846875 3.6 11.846875"></polygon>
+            <polygon id="路径" points="9.06666667 3.23125 13.0666667 3.23125 13.0666667 11.846875 9.06666667 11.846875"></polygon>
+            <polygon id="路径" points="14.5333333 3.23125 18.5333333 3.23125 18.5333333 11.846875 14.5333333 11.846875"></polygon>
+            <path d="M28.9924124,4.309375 L27.6835528,4.309375 L27.6835528,1.078125 C27.6835528,0.484375 27.1646954,0 26.5286766,0 L1.15487614,0 C0.522204865,0 0,0.484375 0,1.078125 L0,14 C0,14.590625 0.518857398,15.078125 1.15487614,15.078125 L26.5353716,15.078125 C27.1680428,15.078125 27.6902477,14.59375 27.6902477,14 L27.6902477,10.771875 L28.9991073,10.771875 C29.5514394,10.771875 30,10.353125 30,9.8375 L30,5.24375 C29.9933051,4.73125 29.5447445,4.309375 28.9924124,4.309375 Z M25.3804954,12.925 L2.30640482,12.925 L2.30640482,2.15625 L25.377148,2.15625 L25.377148,12.925 L25.3804954,12.925 Z" id="形状"></path>
+        </g>
+    </g>
+</svg>

+ 10 - 0
Web/src/components/airport/icons/info/fourG.svg

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="50px" height="32px" viewBox="0 0 50 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>Icons/4G</title>
+    <g id="Icons/4G" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="4G" transform="translate(1.000000, 2.000000)" fill="#FFFFFF" fill-rule="nonzero">
+            <path d="M36.331924,0 C39.7917375,0 42.5015915,0.824955542 44.4514864,2.47486662 C46.4013814,4.12477771 47.5613189,6.52964814 47.9212995,9.68447805 L42.066615,9.68447805 C41.7966295,8.014568 41.2066613,6.78963406 40.2917106,6.01467586 C39.3767599,5.23971766 38.1168278,4.85473833 36.5119143,4.85473833 C34.4620248,4.85473833 32.9121083,5.61969711 31.8371663,7.15461442 C30.7722236,8.6945314 30.227253,10.9844081 30.2172536,14.0142448 L30.2172536,15.8791442 C30.2172536,18.9439791 30.7972223,21.2538546 31.9571598,22.8187703 C33.122097,24.383686 34.8270052,25.1686436 37.0718841,25.1686436 C39.3317623,25.1686436 40.9416756,24.6836697 41.9066236,23.7187218 L41.9066236,18.6939926 L36.4319187,18.6939926 L36.4319187,14.2642313 L47.9212995,14.2642313 L47.9212995,25.9136034 C46.8363579,27.2135333 45.3064404,28.2134795 43.3315468,28.928441 C41.2173229,29.6653271 38.9906737,30.0274114 36.7519013,29.9983833 C34.2270374,29.9983833 32.0121568,29.448413 30.1022598,28.3484722 C28.1818149,27.2277754 26.6447461,25.5530326 25.6924974,23.5437311 C24.6575532,21.4438443 24.1275817,18.9739775 24.0975834,16.14413 L24.0975834,14.1592369 C24.0975834,11.244394 24.5925567,8.71953013 25.5725039,6.58964491 C26.45906,4.56298594 27.9412943,2.85405694 29.8222748,1.68990889 C31.6721751,0.564969514 33.8420582,0 36.331924,0 L36.331924,0 Z" id="路径"></path>
+            <path d="M18.0290284,0.399978405 L18.0290284,18.6089971 L21.3338503,18.6089971 L21.3338503,23.2787455 L18.0290284,23.2787455 L18.0290284,29.5984049 L12.229341,29.5984049 L12.229341,23.2787455 L0.26498568,23.2787455 L0,19.6289421 L12.1693442,0.399978405 L18.0290284,0.399978405 Z M12.2343406,8.29955276 L12.229341,8.29955276 L11.8493614,8.96451685 L5.77468879,18.6089971 L12.2343406,18.6089971 L12.2343406,8.29955276 Z" id="形状结合"></path>
+        </g>
+    </g>
+</svg>

+ 0 - 0
Web/src/components/airport/icons/info/networkError.svg → Web/src/components/airport/icons/info/fourGError.svg


+ 1 - 10
Web/src/components/airport/icons/info/network.svg

@@ -1,10 +1 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<svg width="50px" height="32px" viewBox="0 0 50 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-    <title>Icons/4G</title>
-    <g id="Icons/4G" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
-        <g id="4G" transform="translate(1.000000, 2.000000)" fill="#FFFFFF" fill-rule="nonzero">
-            <path d="M36.331924,0 C39.7917375,0 42.5015915,0.824955542 44.4514864,2.47486662 C46.4013814,4.12477771 47.5613189,6.52964814 47.9212995,9.68447805 L42.066615,9.68447805 C41.7966295,8.014568 41.2066613,6.78963406 40.2917106,6.01467586 C39.3767599,5.23971766 38.1168278,4.85473833 36.5119143,4.85473833 C34.4620248,4.85473833 32.9121083,5.61969711 31.8371663,7.15461442 C30.7722236,8.6945314 30.227253,10.9844081 30.2172536,14.0142448 L30.2172536,15.8791442 C30.2172536,18.9439791 30.7972223,21.2538546 31.9571598,22.8187703 C33.122097,24.383686 34.8270052,25.1686436 37.0718841,25.1686436 C39.3317623,25.1686436 40.9416756,24.6836697 41.9066236,23.7187218 L41.9066236,18.6939926 L36.4319187,18.6939926 L36.4319187,14.2642313 L47.9212995,14.2642313 L47.9212995,25.9136034 C46.8363579,27.2135333 45.3064404,28.2134795 43.3315468,28.928441 C41.2173229,29.6653271 38.9906737,30.0274114 36.7519013,29.9983833 C34.2270374,29.9983833 32.0121568,29.448413 30.1022598,28.3484722 C28.1818149,27.2277754 26.6447461,25.5530326 25.6924974,23.5437311 C24.6575532,21.4438443 24.1275817,18.9739775 24.0975834,16.14413 L24.0975834,14.1592369 C24.0975834,11.244394 24.5925567,8.71953013 25.5725039,6.58964491 C26.45906,4.56298594 27.9412943,2.85405694 29.8222748,1.68990889 C31.6721751,0.564969514 33.8420582,0 36.331924,0 L36.331924,0 Z" id="路径"></path>
-            <path d="M18.0290284,0.399978405 L18.0290284,18.6089971 L21.3338503,18.6089971 L21.3338503,23.2787455 L18.0290284,23.2787455 L18.0290284,29.5984049 L12.229341,29.5984049 L12.229341,23.2787455 L0.26498568,23.2787455 L0,19.6289421 L12.1693442,0.399978405 L18.0290284,0.399978405 Z M12.2343406,8.29955276 L12.229341,8.29955276 L11.8493614,8.96451685 L5.77468879,18.6089971 L12.2343406,18.6089971 L12.2343406,8.29955276 Z" id="形状结合"></path>
-        </g>
-    </g>
-</svg>
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726210113490" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6402" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M919.864407 0H399.186441v104.135593h520.677966v590.101695H277.694915v104.135593h234.305085v121.491526H303.728814v104.135593h520.677966v-104.135593H616.135593V798.372881h407.864407V0h-104.135593z" p-id="6403" fill="#ffffff"></path><path d="M329.762712 433.898305V173.559322h-34.711865V0H34.711864v173.559322H0v260.338983a86.779661 86.779661 0 0 0 86.779661 86.779661h34.711864v503.322034h86.779661V520.677966h34.711865a86.779661 86.779661 0 0 0 86.779661-86.779661zM121.491525 86.779661h86.779661v86.779661H121.491525z m-34.711864 173.559322h156.20339v173.559322H86.779661z" p-id="6404" fill="#ffffff"></path></svg>

File diff suppressed because it is too large
+ 0 - 0
Web/src/components/airport/icons/info/temperature.svg


+ 1 - 0
Web/src/components/airport/icons/info/upload.svg

@@ -0,0 +1 @@
+<svg t="1726212498174" class="icon" viewBox="0 0 1137 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5485" width="200" height="200"><path d="M524.970667 0c37.319111 0 72.021333 18.773333 91.591111 49.493333l110.364444 131.185778h249.457778c68.721778 0 161.393778 24.348444 161.393778 120.490667v566.670222C1137.777778 954.083556 1065.528889 1024 976.384 1024H161.393778C72.248889 1024 0 954.083556 0 867.84V104.106667C0 46.648889 48.184889 0 107.576889 0h417.393778z m447.715555 268.174222H74.183111v591.246222c0 50.517333 40.732444 91.420444 90.908445 91.420445h807.594666c50.176 0 90.908444-40.96 90.908445-91.420445V359.594667c0-50.403556-40.732444-91.420444-90.908445-91.420445zM541.752889 478.435556c29.752889-30.606222 22.414222-32.483556 56.604444 2.56l129.934223 133.12a40.391111 40.391111 0 0 1 0 55.864888 37.262222 37.262222 0 0 1-27.306667 11.491556 38.684444 38.684444 0 0 1-27.136-11.377778l-0.170667-0.113778-50.858666-52.224c-5.575111-5.745778-15.132444-1.706667-15.132445 6.428445v132.778667a39.082667 39.082667 0 0 1-35.669333 39.367111c-22.755556 1.763556-41.358222-17.066667-41.358222-40.504889v-135.793778c0-6.940444-7.964444-10.24-12.629334-5.461333l-53.987555 55.409777a36.977778 36.977778 0 0 1-27.136 11.491556 38.798222 38.798222 0 0 1-27.136-11.320889 41.415111 41.415111 0 0 1-11.548445-28.046222c0-10.410667 3.925333-20.309333 11.264-27.875556z m-24.348445-405.276445h-386.275555a56.888889 56.888889 0 0 0-56.888889 56.888889v61.838222h569.059556L561.038222 93.525333a56.888889 56.888889 0 0 0-43.633778-20.366222z" fill="#ffffff" p-id="5486"></path></svg>

+ 1 - 0
Web/src/components/airport/icons/info/weather.svg

@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1726210901925" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="16906" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M880.96 520.832s-0.064 0 0 0a164.672 164.672 0 0 0-156.928-214.08c-39.04 0-75.264 13.632-103.744 36.864a278.4 278.4 0 0 0-42.176-93.376 273.92 273.92 0 0 0-177.792-112.896 274.624 274.624 0 0 0-318.72 223.616 273.088 273.088 0 0 0 25.856 172.096l0.256-0.128-0.128 0.64A187.776 187.776 0 0 0 0 703.168a188.032 188.032 0 0 0 187.776 187.776h648.512a187.968 187.968 0 0 0 187.776-187.776 188.16 188.16 0 0 0-143.104-182.336z m-44.736 304.576H187.776a122.368 122.368 0 0 1-122.24-122.24c0-53.76 34.88-99.456 83.136-115.776l-0.064-0.064a40.512 40.512 0 0 0 47.36-38.976v-0.96a40.64 40.64 0 0 0-16-32.256h0.064a202.496 202.496 0 0 1-27.328-141.76 202.688 202.688 0 0 1 235.072-164.992 201.6 201.6 0 0 1 131.2 83.456 201.6 201.6 0 0 1 32.256 159.04 37.248 37.248 0 0 0 73.088 13.888 41.216 41.216 0 0 1 0.576-5.504 99.712 99.712 0 0 1 116.544-86.72 100.352 100.352 0 0 1 72.448 143.168h0.064a39.936 39.936 0 0 0-8.64 24.96c0 22.464 18.048 40.768 40.448 40.768l0.832-0.128-0.256 0.256c62.656 5.12 112.128 57.792 112.128 121.728a122.24 122.24 0 0 1-122.24 122.112z" fill="#ffffff" p-id="16907"></path><path d="M281.088 279.232c-30.016 12.928-61.056 29.504-76.864 59.584-14.336 27.264-7.744 58.944 3.072 86.08 9.664 24.256 49.344 13.696 39.488-10.88-7.424-18.56-15.04-39.552-5.12-58.56 11.072-21.12 39.616-32.064 60.032-40.896 24.256-10.368 3.392-45.632-20.608-35.328z" fill="#ffffff" p-id="16908"></path></svg>

+ 2 - 2
Web/src/components/airport/index.vue

@@ -115,7 +115,7 @@ const aircraftLogInfo = computed(() => {
   if (info) {
     return info.message_zh;
   } else {
-    return ''
+    return '';
   }
 })
 
@@ -126,7 +126,7 @@ const hangarLogInfo = computed(() => {
   if (info) {
     return info.message_zh;
   } else {
-    return ''
+    return '';
   }
 })
 </script>

+ 1 - 1
Web/src/components/g-map/DockControlPanel.vue

@@ -128,7 +128,7 @@ async function sendControlCmd(cmdItem: DeviceCmdItem, index: number) {
   top: 0px;
   width: 480px;
   padding: 0 !important;
-  background: #000;
+  background: #232323;
   color: #fff;
   border-radius: 2px;
 

+ 2 - 2
Web/src/components/g-map/DroneControlPanel.vue

@@ -157,7 +157,7 @@
           </DroneControlPopover>
         </div>
       </div>
-      <div class="box">
+      <!-- <div class="box">
         <div class="row">
           <Select v-model:value="payloadSelectInfo.value" style="width: 110px; marginRight: 5px"
             :options="payloadSelectInfo.options" @change="handlePayloadChange" />
@@ -244,7 +244,7 @@
             </Button>
           </DroneControlPopover>
         </div>
-      </div>
+      </div> -->
     </div>
     <!-- 信息提示 -->
     <!-- <DroneControlInfoPanel :message="drcInfo"></DroneControlInfoPanel> -->

+ 109 - 37
Web/src/components/onLineDevice/components/InfoModal.vue

@@ -26,15 +26,20 @@
               手动飞行
             </div>
             <div class="content-osd-head-right-top-status">
-              {{ getTextByModeCode(deviceInfo.device.mode_code) }}
+              <div v-if="deviceInfo.device">
+                {{ getTextByModeCode(deviceInfo.device.mode_code) }}
+              </div>
+              <div v-else>
+                N/A
+              </div>
             </div>
           </div>
           <div class="content-osd-head-right-bottom">
             <div class="content-osd-head-right-bottom-button">
-              <span class="openLiveButton" @click="state.deviceLiveStatus = true" v-if="!state.deviceLiveStatus">
+              <span class="openLiveButton" @click="state.deviceLiveVisible = true" v-if="!state.deviceLiveVisible">
                 开启直播
               </span>
-              <span class="openLiveButton" @click="state.deviceLiveStatus = false" v-else>
+              <span class="openLiveButton" @click="state.deviceLiveVisible = false" v-else>
                 关闭直播
               </span>
             </div>
@@ -43,7 +48,7 @@
             </div>
           </div>
           <div class="content-osd-head-right-select">
-            <div v-if="state.deviceLiveStatus">
+            <div v-if="state.deviceLiveVisible">
               <a-select style="width: 125px;margin-right: 5px;" placeholder="摄像头" v-model:value="state.cameraValue">
                 <a-select-option v-for="item in state.cameraList" :key="item.value" :value="item.value"
                   @click="onCameraSelect(item)">
@@ -56,17 +61,21 @@
                   {{ item.label }}
                 </a-select-option>
               </a-select>
-              <a-button style="margin-right: 5px;" :icon="h(PlaySquareOutlined)" @click="onStart" />
-              <a-button :icon="h(PoweroffOutlined)" @click="onStop" />
+              <a-tooltip title="播放">
+                <a-button style="margin-right: 5px;" :icon="h(PlaySquareOutlined)" @click="onStart" />
+              </a-tooltip>
+              <a-tooltip title="停止">
+                <a-button :icon="h(PoweroffOutlined)" @click="onStop" />
+              </a-tooltip>
             </div>
           </div>
         </div>
       </div>
       <div class="battery-slide">
         <div style="background: #535759;" class="width-100"></div>
-        <div class="capacity-percent" :style="{ width: deviceInfo.device.battery.capacity_percent + '%' }"></div>
+        <div class="capacity-percent" :style="{ width: capacity + '%' }"></div>
       </div>
-      <LivePlayer :text="state.playerText" :url="state.playerUrl" v-if="state.deviceLiveStatus" />
+      <LivePlayer :text="state.playerText" :url="state.playerUrl" v-if="state.deviceLiveVisible" />
       <div class="content-osd-info">
         <a-row style="margin-bottom: 5px;">
           <a-col span="6">
@@ -237,7 +246,7 @@ const props = withDefaults(defineProps<Props>(), {
 
 // 遥控器信号
 const controllerSignal = computed(() => {
-  const info = props.deviceInfo.gateway;
+  const info = props.deviceInfo?.gateway;
   if (info && info.wireless_link) {
     return info.wireless_link['4g_gnd_quality'];
   } else {
@@ -247,7 +256,7 @@ const controllerSignal = computed(() => {
 
 // 飞机信号
 const aircraftSignal = computed(() => {
-  const info = props.deviceInfo.gateway;
+  const info = props.deviceInfo?.gateway;
   if (info && info.wireless_link) {
     return info.wireless_link['4g_uav_quality'];
   } else {
@@ -256,18 +265,26 @@ const aircraftSignal = computed(() => {
 });
 
 const RTK = computed(() => {
-  const info = props.deviceInfo.device;
-  return info.position_state.rtk_number;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    return info.position_state.rtk_number;
+  } else {
+    return 0;
+  }
 });
 
 const GPS = computed(() => {
-  const info = props.deviceInfo.device;
-  return info.position_state.gps_number;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    return info.position_state.gps_number;
+  } else {
+    return 0;
+  }
 });
 
 // 电池容量
 const capacity = computed(() => {
-  const info = props.deviceInfo.device;
+  const info = props.deviceInfo?.device;
   if (info) {
     return info.battery.capacity_percent;
   } else {
@@ -276,47 +293,67 @@ const capacity = computed(() => {
 });
 
 const windSpeed = computed(() => {
-  const info = props.deviceInfo.device;
-  if (info.wind_speed === '--') {
-    return info.wind_speed;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    if (info.wind_speed === '--') {
+      return info.wind_speed;
+    } else {
+      return (info.wind_speed / 10).toFixed(2) + ' m/s';
+    }
   } else {
-    return (info.wind_speed / 10).toFixed(2) + ' m/s';
+    return '--';
   }
 });
 
 const ASL = computed(() => {
-  const info = props.deviceInfo.device;
-  if (info.height === '--') {
-    return info.height;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    if (info.height === '--') {
+      return info.height;
+    } else {
+      return info.height.toFixed(2) + ' m';
+    }
   } else {
-    return info.height.toFixed(2) + ' m';
+    return '--';
   }
 });
 
 const AGL = computed(() => {
-  const info = props.deviceInfo.device;
-  if (info.elevation === '--') {
-    return info.elevation;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    if (info.elevation === '--') {
+      return info.elevation;
+    } else {
+      return info.elevation.toFixed(2) + ' m';
+    }
   } else {
-    return info.elevation.toFixed(2) + ' m';
+    return '--';
   }
 });
 
 const HS = computed(() => {
-  const info = props.deviceInfo.device;
-  if (info.horizontal_speed === '--') {
-    return info.horizontal_speed;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    if (info.horizontal_speed === '--') {
+      return info.horizontal_speed;
+    } else {
+      return info.horizontal_speed.toFixed(2) + ' m/s';
+    }
   } else {
-    return info.horizontal_speed.toFixed(2) + ' m/s';
+    return '--';
   }
 });
 
 const homeDistance = computed(() => {
-  const info = props.deviceInfo.device;
-  if (info.home_distance === '--') {
-    return info.home_distance;
+  const info = props.deviceInfo?.device;
+  if (info) {
+    if (info.home_distance === '--') {
+      return info.home_distance;
+    } else {
+      return info.home_distance.toFixed(2) + ' m';
+    }
   } else {
-    return info.home_distance.toFixed(2) + ' m';
+    return '--';
   }
 });
 
@@ -350,7 +387,7 @@ const clarityList: SelectOption[] = [
 ]
 
 interface State {
-  deviceLiveStatus: boolean,
+  deviceLiveVisible: boolean,
   cameraList: SelectOption[],
   cameraValue?: string,
   videoList: SelectOption[],
@@ -362,7 +399,7 @@ interface State {
 }
 
 const state: State = reactive({
-  deviceLiveStatus: false,// 设备直播状态
+  deviceLiveVisible: false,
   cameraList: [],
   cameraValue: undefined,
   videoList: [],
@@ -509,6 +546,7 @@ const onStop = async () => {
           text-align: center;
           white-space: nowrap;
           overflow: hidden;
+          margin-bottom: 5px
         }
       }
 
@@ -532,6 +570,8 @@ const onStop = async () => {
             flex: 1;
             padding-left: 5px;
             background: #4a4d4e;
+            white-space: nowrap;
+            overflow: hidden;
           }
         }
 
@@ -578,6 +618,38 @@ const onStop = async () => {
     }
   }
 }
+
+.battery-slide {
+  width: 100%;
+
+  .capacity-percent {
+    background: #00ee8b;
+  }
+
+  .return-home {
+    background: #ff9f0a;
+  }
+
+  .landing {
+    background: #f5222d;
+  }
+
+  .battery {
+    background: white;
+    border-radius: 1px;
+    width: 8px;
+    height: 4px;
+    margin-top: -3px;
+  }
+}
+
+.battery-slide>div {
+  position: relative;
+  margin-top: -2px;
+  min-height: 2px;
+  border-radius: 2px;
+  white-space: nowrap;
+}
 </style>
 
 <style lang="scss">

Some files were not shown because too many files changed in this diff