hmm před 7 měsíci
rodič
revize
391229c821

+ 1 - 1
src/api/globalMap/MobilePlatform.ts

@@ -8,7 +8,7 @@ export const getMobileWorkstationList = (data) => {
   });
 };
 
-// 列表信息
+// 轨迹信息
 export const getMobileWorkstationTrajectory = (id) => {
   return request({
     url: '/api/gateway/v2/get_mobile_workstation_trajectory',

+ 13 - 0
src/api/globalMap/SatellitePhone.ts

@@ -7,3 +7,16 @@ export const getSatellitePhoneList = (data) => {
     data: data
   });
 };
+
+//轨迹信息
+export const getSatellitePhoneTrajectory = (id) => {
+  return request({
+    url: '/api/gateway/v2/get_satellite_phone_trajectory',
+    method: 'post',
+    data: {
+      query: {
+        id: id
+      }
+    }
+  });
+};

+ 42 - 16
src/views/emergencyCommandMap/RightSection/SelectPlan.vue

@@ -1,19 +1,39 @@
 <template>
-  <Dialog v-model="isDialogVisible" type="lg" ref="dialogRef" title="预案任务下发" @confirm="confirmRegister" @close="handleCloseDialog">
-    <!-- 预案选择器 -->
-    <div class="plan-selector">
-      <label for="plan-select">预案名称:</label>
-      <select id="plan-select" v-model="selectedPlanId">
-        <option value="">请选择预案</option>
-        <option v-for="plan in plans" :key="plan.plan_id" :value="plan.plan_id">{{ plan.plan_name }}</option>
-      </select>
+  <Dialog ref="dialogRef" v-model="isDialogVisible" type="lg" title="预案任务下发" @confirm="confirmRegister" @close="handleCloseDialog">
+    <div class="dialog-content">
+      <div class="dialog-body">
+        <!--        <div class="plan-selector">-->
+        <el-form-item label="预案名称:" label-width="200px">
+          <el-select
+            id="plan-select"
+            v-model="selectedPlanId"
+            class="custom-select"
+            placeholder="请选择预案"
+            popper-class="custom-select-popper"
+            size="large"
+            :teleported="false"
+            @change="startSelectedPlan"
+          >
+            <!--        <option value="">请选择预案</option>-->
+            <el-option v-for="plan in plans" :key="plan.plan_id" :value="plan.plan_id">{{ plan.plan_name }}</el-option>
+          </el-select>
+        </el-form-item>
+      </div>
     </div>
-    <template #footer>
-      <span class="dialog-footer">
-        <button class="com" @click="startSelectedPlan">确定并启动预案</button>
-        <button class="custom-button" @click="hideDialog">取消</button>
-      </span>
-    </template>
+    <!-- 预案选择器 -->
+    <!--    <div class="plan-selector">-->
+    <!--      <label>预案名称:</label>-->
+    <!--      <el-select id="plan-select" v-model="selectedPlanId" class="custom-select" placeholder="请选择预案" popper-class="custom-select-popper" size="large" :teleported=false @change="startSelectedPlan">-->
+    <!--        &lt;!&ndash;        <option value="">请选择预案</option>&ndash;&gt;-->
+    <!--        <el-option v-for="plan in plans" :key="plan.plan_id" :value="plan.plan_id">{{ plan.plan_name }}</el-option>-->
+    <!--      </el-select>-->
+    <!--    </div>-->
+    <!--    <template #footer>-->
+    <!--      <span class="dialog-footer">-->
+    <!--        <button class="com" @click="startSelectedPlan">确定并启动预案</button>-->
+    <!--        <button class="custom-button" @click="hideDialog">取消</button>-->
+    <!--      </span>-->
+    <!--    </template>-->
   </Dialog>
 </template>
 <script lang="ts" setup>
@@ -122,11 +142,13 @@ onMounted(() => {
   display: flex;
   align-items: center;
   justify-content: center;
-  margin-bottom: 20px; /* 可以根据需要调整间距 */
+  margin-bottom: 30px; /* 可以根据需要调整间距 */
+  vertical-align: middle;
 }
 
 .plan-selector label {
   margin-right: 10px; /* 为标签和下拉框之间添加间距 */
+  vertical-align: middle;
 }
 
 .plan-selector select {
@@ -135,6 +157,7 @@ onMounted(() => {
   font-size: 14px;
   border-radius: 5px;
   border: 1px solid #ccc;
+  vertical-align: middle;
 }
 
 .custom-button {
@@ -159,6 +182,9 @@ onMounted(() => {
 }
 
 .dialog-footer button {
-  margin-left: 10px;
+  margin-right: 10px;
+  width: 120px; /* 根据实际需求调整 */
+  text-align: center;
 }
+
 </style>

+ 24 - 29
src/views/globalMap/RightMenu/KeyVehicles.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="menu-content">
-    <div class="gradient-text title">两客一危一重货</div>
-    <div class="box2">
+    <div class="container">
+      <div class="gradient-text title">两客一危一重货</div>
       <div class="box-left">
-        <el-input v-model="queryParams.keywords" class="custom-input" placeholder="搜索" style="width: 600px" @input="initData">
+        <el-input v-model="queryParams.keywords" class="custom-input" placeholder="搜索" @input="initData">
           <template #prefix>
             <el-icon class="el-input__icon"><search /></el-icon>
           </template>
@@ -25,9 +25,9 @@
           <div class="td">{{ item.work_unit }}</div>
           <div class="td">{{ item.position }}</div>
           <div class="td">
-            <el-button type="text" size="small" @click="handleConnect(index, item)">连线</el-button>
-            <el-button type="text" size="small" @click="handleCollaborate(index, item)">协同</el-button>
-            <el-button type="text" size="small" @click="handleTrack(item)">轨迹</el-button>
+            <div class="text" @click="handleConnect(index, item)">连线</div>
+            <div class="text" size="small" @click="handleCollaborate(index, item)">协同</div>
+            <div class="text" size="small" @click="handleTrack(item)">轨迹</div>
           </div>
         </div>
       </div>
@@ -39,6 +39,7 @@
 import { Search } from '@element-plus/icons-vue';
 import { getMobileWorkstationList } from '@/api/globalMap/MobilePlatform';
 import { onMounted, reactive } from 'vue';
+const trackPlayback = inject('trackPlayback');
 // 数据列表,直接定义为数组
 const dataList = reactive([]);
 //入参
@@ -75,10 +76,10 @@ onMounted(() => {
 
 <style lang="scss" scoped>
 .menu-content {
-  width: 1584px;
-  height: 2066px;
-  background: url('@/assets/images/map/rightMenu/potentialFloodHazard/dialog.png') no-repeat;
-  padding: 130px 30px 20px 40px;
+  width: 1579px;
+  height: 1394px;
+  background: url('@/assets/images/map/rightMenu/content.png') no-repeat;
+  padding: 130px 20px 20px 20px;
   font-size: 36px;
   position: relative;
   color: #ffffff;
@@ -89,33 +90,27 @@ onMounted(() => {
   top: 30px;
   left: 160px;
 }
-.box2 {
+
+.box-left {
   display: flex;
-  justify-content: space-between;
-  align-items: baseline;
   margin-top: 30px;
   margin-bottom: 20px;
-
-  .box-left {
+  .btn {
+    width: 140px;
+    min-width: 140px;
+    height: 60px;
+    background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
     display: flex;
-
-    .btn {
-      width: 140px;
-      height: 40px;
-      background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      cursor: pointer;
-      margin-left: 20px;
-      color: #ffffff;
-      font-size: 32px;
-    }
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    margin-left: 20px;
+    color: #ffffff;
   }
 }
 
 .custom-input {
-  height: 40px;
+  height: 60px;
   line-height: 40px;
 }
 

+ 26 - 34
src/views/globalMap/RightMenu/MobilePlatform.vue

@@ -1,9 +1,10 @@
 <template>
   <div class="menu-content">
-    <div class="gradient-text title">手机工作台</div>
-    <div class="box2">
+    <div class="container">
+      <div class="gradient-text title">手机工作台</div>
+      <!--    <div class="box2">-->
       <div class="box-left">
-        <el-input v-model="queryParams.keywords" class="custom-input" placeholder="搜索" style="width: 600px" @input="initData">
+        <el-input v-model="queryParams.keywords" class="custom-input" placeholder="搜索" @input="initData">
           <template #prefix>
             <el-icon class="el-input__icon"><search /></el-icon>
           </template>
@@ -11,6 +12,7 @@
         <el-button class="btn" @click="handleCancel">取消</el-button>
       </div>
     </div>
+    <!--    </div>-->
     <div>移动指挥车</div>
     <div class="custom-table">
       <div class="th">
@@ -27,7 +29,7 @@
           <div class="td">
             <div class="text" @click="handleConnect(index, item)">连线</div>
             <div class="text" @click="handleCollaborate(index, item)">协同</div>
-            <div class="text"  @click="handleTrack(item)">轨迹</div>
+            <div class="text" @click="handleTrack(item)">轨迹</div>
           </div>
         </div>
       </div>
@@ -39,7 +41,6 @@
 import { Search } from '@element-plus/icons-vue';
 import { getMobileWorkstationList, getMobileWorkstationTrajectory } from '@/api/globalMap/MobilePlatform';
 import { onMounted, reactive } from 'vue';
-
 const trackPlayback = inject('trackPlayback');
 // 数据列表,直接定义为数组
 const dataList = reactive([]);
@@ -69,12 +70,8 @@ const handleCancel = () => {
   queryParams.keywords = '';
   initData();
 };
-const handleConnect = () => {
-
-}
-const handleCollaborate = () => {
-
-}
+const handleConnect = () => {};
+const handleCollaborate = () => {};
 // 轨迹
 const handleTrack = (item) => {
   getMobileWorkstationTrajectory(item.id).then((res) => {
@@ -93,10 +90,10 @@ onMounted(() => {
 
 <style lang="scss" scoped>
 .menu-content {
-  width: 1584px;
-  height: 2066px;
-  background: url('@/assets/images/map/rightMenu/potentialFloodHazard/dialog.png') no-repeat;
-  padding: 130px 30px 20px 40px;
+  width: 1579px;
+  height: 1394px;
+  background: url('@/assets/images/map/rightMenu/content.png') no-repeat;
+  padding: 130px 20px 20px 20px;
   font-size: 36px;
   position: relative;
   color: #ffffff;
@@ -107,33 +104,28 @@ onMounted(() => {
   top: 30px;
   left: 160px;
 }
-.box2 {
+
+.box-left {
   display: flex;
-  justify-content: space-between;
-  align-items: baseline;
   margin-top: 30px;
   margin-bottom: 20px;
-
-  .box-left {
+  .btn {
+    width: 140px;
+    min-width: 140px;
+    height: 60px;
+    background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
     display: flex;
-
-    .btn {
-      width: 140px;
-      height: 40px;
-      background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      cursor: pointer;
-      margin-left: 20px;
-      color: #ffffff;
-      font-size: 32px;
-    }
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    margin-left: 20px;
+    color: #ffffff;
+    font-size: 32px;
   }
 }
 
 .custom-input {
-  height: 40px;
+  height: 60px;
   line-height: 40px;
 }
 

+ 50 - 31
src/views/globalMap/RightMenu/SatellitePhone.vue

@@ -1,9 +1,9 @@
 <template>
   <div class="menu-content">
-    <div class="gradient-text title">卫星电话</div>
-    <div class="box2">
+    <div class="container">
+      <div class="gradient-text title">卫星电话</div>
       <div class="box-left">
-        <el-input v-model="queryParams.keywords" class="custom-input" placeholder="搜索" style="width: 600px" @input="initData">
+        <el-input v-model="queryParams.keywords" class="custom-input" placeholder="搜索" @input="initData">
           <template #prefix>
             <el-icon class="el-input__icon"><search /></el-icon>
           </template>
@@ -23,9 +23,9 @@
           <div class="td">{{ item.name }}</div>
           <div class="td">{{ item.unit_name }}</div>
           <div class="td">
-            <el-button type="text" size="small" @click="handleConnect(index, item)">连线</el-button>
-            <el-button type="text" size="small" @click="handleCollaborate(index, item)">电话</el-button>
-            <el-button type="text" size="small" @click="handleTrack(item)">轨迹</el-button>
+            <div class="text" @click="handleConnect(index, item)">连线</div>
+            <div class="text" size="small" @click="handleCollaborate(index, item)">电话</div>
+            <div class="text" size="small" @click="handleTrack(item)">轨迹</div>
           </div>
         </div>
       </div>
@@ -35,9 +35,11 @@
 
 <script setup lang="ts">
 import { Search } from '@element-plus/icons-vue';
-
 import { onMounted, reactive } from 'vue';
-import { getSatellitePhoneList } from "@/api/globalMap/SatellitePhone";
+import { getSatellitePhoneList, getSatellitePhoneTrajectory } from "@/api/globalMap/SatellitePhone";
+
+const trackPlayback = inject('trackPlayback');
+
 // 数据列表,直接定义为数组
 const dataList = reactive([]);
 //入参
@@ -68,6 +70,20 @@ const handleCancel = () => {
   queryParams.keywords = '';
   initData();
 };
+
+const handleConnect = () => {};
+const handleCollaborate = () => {};
+// 轨迹
+const handleTrack = (item) => {
+  getSatellitePhoneTrajectory(item.id).then((res) => {
+    const trajectory = [];
+    res.rows.forEach((item) => {
+      trajectory.push([item.longitude, item.latitude]);
+    });
+    trackPlayback(trajectory);
+  });
+};
+
 //调用函数
 onMounted(() => {
   initData();
@@ -76,10 +92,10 @@ onMounted(() => {
 
 <style lang="scss" scoped>
 .menu-content {
-  width: 1584px;
-  height: 2066px;
-  background: url('@/assets/images/map/rightMenu/potentialFloodHazard/dialog.png') no-repeat;
-  padding: 130px 30px 20px 40px;
+  width: 1579px;
+  height: 1394px;
+  background: url('@/assets/images/map/rightMenu/content.png') no-repeat;
+  padding: 130px 20px 20px 20px;
   font-size: 36px;
   position: relative;
   color: #ffffff;
@@ -90,33 +106,28 @@ onMounted(() => {
   top: 30px;
   left: 160px;
 }
-.box2 {
+
+.box-left {
   display: flex;
-  justify-content: space-between;
-  align-items: baseline;
   margin-top: 30px;
   margin-bottom: 20px;
-
-  .box-left {
+  .btn {
+    width: 140px;
+    min-width: 140px;
+    height: 60px;
+    background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
     display: flex;
-
-    .btn {
-      width: 140px;
-      height: 40px;
-      background: url('@/assets/images/map/rightMenu/potentialFloodHazard/btn.png') no-repeat;
-      display: flex;
-      justify-content: center;
-      align-items: center;
-      cursor: pointer;
-      margin-left: 20px;
-      color: #ffffff;
-      font-size: 32px;
-    }
+    justify-content: center;
+    align-items: center;
+    cursor: pointer;
+    margin-left: 20px;
+    color: #ffffff;
+    font-size: 32px;
   }
 }
 
 .custom-input {
-  height: 40px;
+  height: 60px;
   line-height: 40px;
 }
 
@@ -177,4 +188,12 @@ onMounted(() => {
     background-image: linear-gradient(to bottom, #ffffff 50%, #ff2f3c 100%);
   }
 }
+.text {
+  font-size: 38px;
+  color: #247dff;
+  margin-right: 20px;
+  &:last-child {
+    margin-right: 0;
+  }
+}
 </style>

+ 1 - 1
src/views/routineCommandMap/RightSection/index.vue

@@ -20,7 +20,7 @@
           </div>
         </div>
         <div class="box-item">
-          <i class="month-icon" />
+          <i class="season-icon" />
           <div class="box-flex">
             <div class="text-box">
               <div class="gradient-text3 text1">{{ statisticalData.jd_value }}</div>