Ver código fonte

Merge remote-tracking branch 'origin/dev' into dev

yangyuxuan 5 meses atrás
pai
commit
69cc02b1ad
26 arquivos alterados com 510 adições e 139 exclusões
  1. 0 1
      src/api/comprehensiveGuarantee/materialReserveManagement/BarcodeManagement.ts
  2. 8 0
      src/api/comprehensiveGuarantee/materialReserveManagement/warehouseManagement.ts
  3. 1 1
      src/api/globalMap/KeyVehicles.ts
  4. BIN
      src/assets/images/car.png
  5. 5 1
      src/hooks/AMap/useAMap.ts
  6. 9 1
      src/types/components.d.ts
  7. 94 0
      src/utils/olMap/olMap.ts
  8. 40 26
      src/views/comprehensiveGuarantee/MaterialReserveManagement/addMaterialInformation.vue
  9. 53 13
      src/views/comprehensiveGuarantee/MaterialReserveManagement/addWarehouse.vue
  10. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/airRaidSheltersAdd.vue
  11. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/airRaidSheltersEdit.vue
  12. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/hydraulicEngineeringAdd.vue
  13. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/hydraulicEngineeringEdit.vue
  14. 20 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/reliefTalentsAdd.vue
  15. 20 2
      src/views/comprehensiveGuarantee/reliefResourceManagement/reliefTalentsEdit.vue
  16. 24 7
      src/views/comprehensiveGuarantee/reliefResourceManagement/rescueStationAdd.vue
  17. 24 7
      src/views/comprehensiveGuarantee/reliefResourceManagement/rescueStationEdit.vue
  18. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitAdd.vue
  19. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitEdit.vue
  20. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/shelterAdd.vue
  21. 18 1
      src/views/comprehensiveGuarantee/reliefResourceManagement/shelterEdit.vue
  22. 24 18
      src/views/dataFilling/fileManagement.vue
  23. 17 3
      src/views/duty/eventing/EventEditDialog.vue
  24. 24 47
      src/views/emergencyCommandMap/LeftSection/VideoMonitorEdit.vue
  25. 2 2
      src/views/globalMap/RightMenu/KeyVehicles.vue
  26. 1 1
      src/views/globalMap/index.vue

+ 0 - 1
src/api/comprehensiveGuarantee/materialReserveManagement/BarcodeManagement.ts

@@ -15,4 +15,3 @@ export function changeStatus(data) {
     data: data
   });
 }
-

+ 8 - 0
src/api/comprehensiveGuarantee/materialReserveManagement/warehouseManagement.ts

@@ -44,3 +44,11 @@ export function getWarehouseTree() {
     method: 'get'
   });
 }
+// 查询存放类型
+export function getTypeList(params?: any) {
+  return request({
+    url: '/api/resource_provison/material/type/list',
+    method: 'get',
+    params: params
+  });
+}

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

@@ -16,7 +16,7 @@ export const getVehicleTrajectory = (id) => {
     method: 'post',
     data: {
       query: {
-        id: id
+        vehicle_no: id
       }
     }
   });

BIN
src/assets/images/car.png


+ 5 - 1
src/hooks/AMap/useAMap.ts

@@ -2,6 +2,7 @@ import AMapLoader from '@amap/amap-jsapi-loader';
 import { nanoid } from 'nanoid';
 import { deepClone, initDrag } from '@/utils';
 import { mergeGeoJsonPolygons, wgs_gcj_encrypts } from '@/utils/gisUtils';
+import carImg from '@/assets/images/car.png';
 
 export function useAMap(options) {
   let AMap, map, nowLayer, labelsLayer, scale, cluster;
@@ -398,6 +399,9 @@ export function useAMap(options) {
   };
   let moveMarker, movePolyline, movePassedPolyline, timerId;
   const trackPlayback = (lineArr) => {
+    if (!lineArr || lineArr.length === 0) {
+      return;
+    }
     if (timerId) {
       clearTimeout(timerId);
     }
@@ -407,7 +411,7 @@ export function useAMap(options) {
     let index = 0;
     const icon = new AMap.Icon({
       size: new AMap.Size(26, 52),
-      image: 'https://a.amap.com/jsapi_demos/static/demo-center-v2/car.png'
+      image: carImg
     });
     moveMarker = new AMap.Marker({
       map: map,

+ 9 - 1
src/types/components.d.ts

@@ -24,11 +24,14 @@ declare module 'vue' {
     DistributionMap: typeof import('./../components/Map/YztMap/DistributionMap.vue')['default']
     DrawMap: typeof import('./../components/Map/YztMap/DrawMap.vue')['default']
     Editor: typeof import('./../components/Editor/index.vue')['default']
+    ElAnchor: typeof import('element-plus/es')['ElAnchor']
+    ElAnchorLink: typeof import('element-plus/es')['ElAnchorLink']
     ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
     ElBadge: typeof import('element-plus/es')['ElBadge']
     ElButton: typeof import('element-plus/es')['ElButton']
     ElCard: typeof import('element-plus/es')['ElCard']
     ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+    ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup']
     ElCol: typeof import('element-plus/es')['ElCol']
     ElColorPicker: typeof import('element-plus/es')['ElColorPicker']
     ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
@@ -47,6 +50,8 @@ declare module 'vue' {
     ElIcon: typeof import('element-plus/es')['ElIcon']
     ElImage: typeof import('element-plus/es')['ElImage']
     ElInput: typeof import('element-plus/es')['ElInput']
+    ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+    ElLink: typeof import('element-plus/es')['ElLink']
     ElMenu: typeof import('element-plus/es')['ElMenu']
     ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
     ElOption: typeof import('element-plus/es')['ElOption']
@@ -57,11 +62,12 @@ declare module 'vue' {
     ElRow: typeof import('element-plus/es')['ElRow']
     ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
     ElSelect: typeof import('element-plus/es')['ElSelect']
-    ElSlider: typeof import('element-plus/es')['ElSlider']
     ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
     ElSwitch: typeof import('element-plus/es')['ElSwitch']
     ElTable: typeof import('element-plus/es')['ElTable']
     ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+    ElTabPane: typeof import('element-plus/es')['ElTabPane']
+    ElTabs: typeof import('element-plus/es')['ElTabs']
     ElTag: typeof import('element-plus/es')['ElTag']
     ElText: typeof import('element-plus/es')['ElText']
     ElTimeline: typeof import('element-plus/es')['ElTimeline']
@@ -80,6 +86,8 @@ declare module 'vue' {
     HikvisionPlayer: typeof import('./../components/HKVideo/hikvision-player.vue')['default']
     HKVideo: typeof import('./../components/HKVideo/index.vue')['default']
     IconSelect: typeof import('./../components/IconSelect/index.vue')['default']
+    IEpCaretBottom: typeof import('~icons/ep/caret-bottom')['default']
+    IEpCaretTop: typeof import('~icons/ep/caret-top')['default']
     IFrame: typeof import('./../components/iFrame/index.vue')['default']
     ImagePreview: typeof import('./../components/ImagePreview/index.vue')['default']
     ImageUpload: typeof import('./../components/ImageUpload/index.vue')['default']

+ 94 - 0
src/utils/olMap/olMap.ts

@@ -37,6 +37,7 @@ import { deepClone, hexToRgba, initDrag } from '@/utils';
 import { createBox } from 'ol/interaction/Draw';
 import * as turf from '@turf/turf';
 import { nanoid } from 'nanoid';
+import carImg from '@/assets/images/car.png';
 
 const tk = 'a8df87f1695d224d2679aa805c1268d9';
 const commonUrl = import.meta.env.VITE_APP_BASE_API2 + 'api/oneShare/proxyHandler/gd/';
@@ -86,6 +87,10 @@ export class olMap {
   // 显示信息框
   private infoWindow;
   private select;
+  // 车辆轨迹
+  private carLayer;
+  private carFeature;
+  private traceFeature;
 
   constructor(options) {
     this.options = options;
@@ -927,6 +932,95 @@ export class olMap {
     this.drawVector.getSource().addFeature(feature);
     return feature;
   }
+  trackPlayback(lineArr) {
+    if (!!this.carFeature) {
+      this.carLayer.getSource().removeFeature(this.carFeature);
+    }
+    if (!!this.traceFeature) {
+      this.carLayer.getSource().removeFeature(this.traceFeature);
+    }
+    const getAngle = (point1, point2) => {
+      let arc = 0;
+      if (point2 && point2.length && point1 && point1.length) {
+        if ((point2[0] - point1[0] >= 0 && point2[1] - point1[1] >= 0) || (point2[0] - point1[0] < 0 && point2[1] - point1[1] > 0)) {
+          arc = Math.atan((point2[0] - point1[0]) / (point2[1] - point1[1]));
+        } else if ((point2[0] - point1[0] > 0 && point2[1] - point1[1] < 0) || (point2[0] - point1[0] < 0 && point2[1] - point1[1] < 0)) {
+          arc = Math.PI + Math.atan((point2[0] - point1[0]) / (point2[1] - point1[1]));
+        }
+      }
+      return arc;
+    };
+    let lastTime = Date.now();
+    const source = new VectorSource();
+    let distance = 0;
+    const angle = getAngle(lineArr[0], lineArr[1]);
+    const speed = 500;
+    let animationFlag = false;
+    this.carFeature = new Feature({
+      geometry: new Point(lineArr[0])
+    });
+    const icon = new Icon({
+      crossOrigin: 'anonymous',
+      src: carImg,
+      width: 26,
+      height: 52,
+      rotation: angle
+    });
+    this.carFeature.setStyle(
+      new Style({
+        image: icon
+      })
+    );
+    this.traceFeature = new Feature({
+      geometry: new LineString(lineArr)
+    });
+    let route = new LineString(lineArr);
+    this.carLayer = new VectorLayer({
+      source: source,
+      style: new Style({
+        stroke: new Stroke({
+          color: 'rgb(37,232,142)',
+          width: 5
+        })
+      })
+    });
+    this.carLayer.getSource().addFeatures([this.carFeature, this.traceFeature]);
+    const move = (e) => {
+      const time = e.frameState.time;
+      // 时间戳差(毫秒)
+      const elapsedTime = time - lastTime;
+      // 距离(其实是比例的概念)
+      distance = distance + (speed * elapsedTime) / 1e6;
+      if (distance >= 1) {
+        distance = 0;
+        animationFlag = false;
+        stopAnimation();
+        return;
+      }
+      // 保存当前时间
+      lastTime = time;
+      // 上次坐标
+      const lastCoord = this.carFeature.getGeometry().getCoordinates();
+      // 获取新位置的坐标点
+      const curCoord = route.getCoordinateAt(distance);
+      // 设置新坐标
+      this.carFeature.getGeometry().setCoordinates(curCoord);
+      this.map.getView().setCenter(curCoord);
+      // 设置角度
+      this.carFeature.getStyle().getImage().setRotation(getAngle(lastCoord, curCoord));
+      // 调用地图渲染
+      this.map.render();
+    };
+
+    const stopAnimation = () => {
+      this.carLayer.un('postrender', move);
+    };
+    this.map.addLayer(this.carLayer);
+    this.carLayer.on('postrender', move);
+    // 触发地图渲染
+    const geo = this.carFeature.getGeometry().clone();
+    this.carFeature.setGeometry(geo);
+  }
   getVectorLayer() {
     return this.vectorLayer;
   }

+ 40 - 26
src/views/comprehensiveGuarantee/MaterialReserveManagement/addMaterialInformation.vue

@@ -40,17 +40,20 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="仓库:" prop="warehouse_id">
-                <el-select v-model="form.warehouse_id" placeholder="请选择仓库">
-                  <el-option v-for="item in godownList" :key="item.warehouse_id" :label="item.warehouse_name" :value="item.warehouse_id" />
-                </el-select>
+              <el-form-item label="材质:" prop="material">
+                <el-input v-model="form.material" placeholder="请输入材质" />
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="库房:" prop="room_id">
-                <el-select v-model="form.room_id" placeholder="请选择库房">
-                  <el-option v-for="item in materialWarehouseRootList" :key="item.id" :label="item.room_name" :value="item.id" />
-                </el-select>
+              <el-form-item label="库房名称:" prop="room_id">
+                <el-tree-select
+                  v-model="form.room_id"
+                  :data="warehouseName"
+                  node-key="id"
+                  placeholder="请选择库房名称"
+                  :render-after-expand="false"
+                  :props="defaultProps"
+                />
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -175,8 +178,10 @@
               </el-form-item>
             </el-col>
             <el-col :span="12">
-              <el-form-item label="材质:" prop="material">
-                <el-input v-model="form.material" placeholder="请输入材质" />
+              <el-form-item label="来源:" prop="from_sys">
+                <el-select v-model="form.from_sys" placeholder="请选择来源" clearable>
+                  <el-option v-for="item in material_source" :key="item.value" :label="item.label" :value="item.value"></el-option>
+                </el-select>
               </el-form-item>
             </el-col>
             <el-col :span="12">
@@ -194,13 +199,7 @@
                 <el-input v-model="form.manufacturer" placeholder="请输入生产厂商" />
               </el-form-item>
             </el-col>
-            <el-col :span="12">
-              <el-form-item label="来源:" prop="from_sys">
-                <el-select v-model="form.from_sys" placeholder="请选择来源" clearable>
-                  <el-option v-for="item in material_source" :key="item.value" :label="item.label" :value="item.value"></el-option>
-                </el-select>
-              </el-form-item>
-            </el-col>
+            <el-col :span="12"></el-col>
             <el-col :span="24">
               <el-form-item label="备注:" prop="remarks">
                 <el-input v-model="form.remarks" :autosize="{ minRows: 3, maxRows: 5 }" type="textarea" placeholder="请输入备注" />
@@ -241,11 +240,13 @@
 </template>
 <script setup lang="ts">
 import { getMaterialWarehouseList } from '@/api/comprehensiveGuarantee/materialReserveManagement/godownManagement';
-import { getMaterialWarehouseRootList } from '@/api/comprehensiveGuarantee/materialReserveManagement/warehouseManagement';
+import { getMaterialWarehouseRootList, getWarehouseTree } from '@/api/comprehensiveGuarantee/materialReserveManagement/warehouseManagement';
 import { createMaterial, getMaterialInfo, updateMaterial } from '@/api/comprehensiveGuarantee/materialReserveManagement/materialInformation';
-
+import { reactive, ref } from 'vue';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
-const { disaster_type, material_source, material_classification, material_type } = toRefs<any>(proxy?.useDict('disaster_type', 'material_source', 'material_classification', 'material_type'));
+const { disaster_type, material_source, material_classification, material_type } = toRefs<any>(
+  proxy?.useDict('disaster_type', 'material_source', 'material_classification', 'material_type')
+);
 const emits = defineEmits(['close']);
 const buttonLoading = ref(false);
 const props = defineProps({
@@ -316,8 +317,8 @@ const data = reactive({
     inventory_warning_pusher: [{ required: true, message: '库存预警推送人不能为空', trigger: 'blur' }],
     origin: [{ required: true, message: '产地不能为空', trigger: 'blur' }],
     from_sys: [{ required: true, message: '来源系统不能为空', trigger: 'blur' }],
-    status: [{ required: true, message: '状态不能为空', trigger: 'change' }],
-    room_id: [{ required: true, message: '库房不能为空', trigger: 'blur' }],
+    status: [{ required: true, message: '请选择状态', trigger: 'change' }],
+    room_id: [{ required: true, message: '请选择库房', trigger: 'change' }],
     package_quantity: [{ required: true, message: '包装数量不能为空', trigger: 'blur' }],
     package_volume: [{ required: true, message: '包装体积不能为空', trigger: 'blur' }],
     package_weight: [{ required: true, message: '包装重量不能为空', trigger: 'blur' }],
@@ -373,18 +374,31 @@ const submitForm = async (formEl) => {
     }
   });
 };
-
+const warehouseName = ref();
+const getWarehouseName = () => {
+  getWarehouseTree().then((res) => {
+    warehouseName.value = res.data;
+  });
+};
+const defaultProps = reactive({
+  children: 'children',
+  label: 'label',
+  disabled: (node) => {
+    return node.isWarehouse && !node.children;
+  }
+});
 onMounted(() => {
+  getWarehouseName();
   getMaterialWarehouseRootList().then((res) => {
     materialWarehouseRootList.value = res.data;
-  })
+  });
   getMaterialWarehouseList().then((res) => {
     godownList.value = res.data;
-  })
+  });
   if (!props.id) return;
   getMaterialInfo(props.id).then((res) => {
     form.value = res.data;
-  })
+  });
 });
 </script>
 

+ 53 - 13
src/views/comprehensiveGuarantee/MaterialReserveManagement/addWarehouse.vue

@@ -38,17 +38,24 @@
           </el-form-item>
 
           <el-form-item label="等级:" prop="level">
-            <el-select v-model="form.level" placeholder="等级">
+            <el-select v-model="form.level" placeholder="请选择等级">
               <el-option v-for="(item, index) in material_category_level" :key="index" :label="item.label" :value="item.value" />
             </el-select>
           </el-form-item>
-
-          <el-form-item label="存放类型:" prop="storage_type">
-            <el-input v-model="form.storage_type" placeholder="请输入存放类型" style="width: 468px !important" />
+          <el-form-item label="存放类型:" prop="storage_type_code">
+            <el-select v-model="form.storage_type_code" placeholder="请选择存放类型">
+              <el-option v-for="(item, index) in storageTypeList" :key="index" :label="item.storage_type" :value="item.storage_type_code" />
+            </el-select>
           </el-form-item>
 
           <el-form-item label="库存确认最新时间:" prop="last_inventory_time">
-            <el-date-picker v-model="form.last_inventory_time" type="datetime" placeholder="请选择库存确认最新时间" style="width: 468px !important" />
+            <el-date-picker
+              v-model="form.last_inventory_time"
+              type="datetime"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              placeholder="请选择库存确认最新时间"
+              style="width: 468px !important"
+            />
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
@@ -63,9 +70,10 @@
 import {
   createMaterialRoot,
   getMaterialRootInfo,
-  updateMaterialRoot
+  updateMaterialRoot,
+  getTypeList
 } from '@/api/comprehensiveGuarantee/materialReserveManagement/warehouseManagement';
-import { getMaterialWarehouseList, } from '@/api/comprehensiveGuarantee/materialReserveManagement/godownManagement';
+import { getMaterialWarehouseList } from '@/api/comprehensiveGuarantee/materialReserveManagement/godownManagement';
 const emits = defineEmits(['close']);
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 const { material_category_level } = toRefs<any>(proxy?.useDict('material_category_level'));
@@ -85,8 +93,9 @@ const data = reactive({
     room_volume: '',
     available_volume: '',
     level: '',
-    storage_type: '',
-    last_inventory_time: ''
+    last_inventory_time: '',
+    storage_type_code: '',
+    storage_type: ''
   },
   rules: {
     room_name: [{ required: true, message: '库房名称不能为空', trigger: 'blur' }],
@@ -97,11 +106,12 @@ const data = reactive({
     room_volume: [{ required: true, message: '库房容积不能为空', trigger: 'blur' }],
     available_volume: [{ required: true, message: '可用库房容积不能为空', trigger: 'blur' }],
     level: [{ required: true, message: '请选择等级', trigger: 'change' }],
-    storage_type: [{ required: true, message: '存放类型不能为空', trigger: 'blur' }],
+    storage_type_code: [{ required: true, message: '请选择存放类型', trigger: 'change' }],
     last_inventory_time: [{ required: true, message: '请选择库存确认最新时间', trigger: 'change' }]
   }
 });
 let godownList = ref([]);
+let storageTypeList = ref([]);
 const { form, rules } = toRefs(data);
 
 const closeDialog = () => {
@@ -139,14 +149,44 @@ const submitForm = async (formEl) => {
   });
 };
 onMounted(() => {
+  // 获取仓库列表
   getMaterialWarehouseList().then((res) => {
     godownList.value = res.data;
   });
-  if (!props.id) return;
-  getMaterialRootInfo(props.id).then((res) => {
-    form.value = res.data;
+
+  // 获取类型列表数据
+  getTypeList().then((res) => {
+    const uniqueStorageTypes = new Map();
+
+    res.data.forEach((item) => {
+      if (!uniqueStorageTypes.has(item.material_category_level)) {
+        uniqueStorageTypes.set(item.material_category_level, {
+          storage_type: item.material_category_name,
+          storage_type_code: item.material_category_level
+        });
+      }
+    });
+
+    storageTypeList.value = Array.from(uniqueStorageTypes.values());
   });
+
+  if (props.id) {
+    getMaterialRootInfo(props.id).then((res) => {
+      form.value = res.data;
+    });
+  }
 });
+watch(
+  () => form.value.storage_type_code,
+  (newVal) => {
+    const selectedType = storageTypeList.value.find((type) => type.storage_type_code === newVal);
+    if (selectedType) {
+      form.value.storage_type = selectedType.storage_type;
+    } else {
+      form.value.storage_type = '';
+    }
+  }
+);
 </script>
 
 <style lang="scss" scoped>

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/airRaidSheltersAdd.vue

@@ -33,7 +33,11 @@
           <el-row :gutter="20" class="mb8">
             <el-col :span="10">
               <el-form-item label="建设地点:" prop="jsdd">
-                <el-input v-model="formData.jsdd" style="width: 468px !important" />
+                <el-input v-model="formData.jsdd" placeholder="请输入建设地点" style="width: 468px !important" readonly>
+                  <template #append>
+                    <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+                  </template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="10">
@@ -177,6 +181,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.jsdd" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -252,7 +258,18 @@ const form = ref(null); // 定义 form 变量
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.jsdd = data.address;
+  formData.value.jingdu = data.lnglat[0];
+  formData.value.weidu = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const router = useRouter();
 
 // 提交表单

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/airRaidSheltersEdit.vue

@@ -33,7 +33,11 @@
           <el-row :gutter="20" class="mb8">
             <el-col :span="10">
               <el-form-item label="建设地点:" prop="jsdd">
-                <el-input v-model="formData.jsdd" style="width: 468px !important" />
+                <el-input v-model="formData.jsdd" placeholder="请输入建设地点" style="width: 468px !important" readonly>
+                  <template #append>
+                    <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+                  </template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="10">
@@ -177,6 +181,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.jsdd" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -218,7 +224,18 @@ const formData = ref({
   jingdu: '',
   weidu: ''
 });
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.jsdd = data.address;
+  formData.value.jingdu = data.lnglat[0];
+  formData.value.weidu = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const closeDialog = () => {
   emits('close');
 };

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/hydraulicEngineeringAdd.vue

@@ -21,7 +21,11 @@
           <el-row :gutter="20" class="mb8">
             <el-col :span="10">
               <el-form-item label="水利设施和水利工程地点:" prop="slsshslgcdd">
-                <el-input v-model="formData.slsshslgcdd" style="width: 468px !important" />
+                <el-input v-model="formData.slsshslgcdd" placeholder="请输入水利设施和水利工程地点" style="width: 468px !important" readonly>
+                  <template #append>
+                    <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+                  </template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="10">
@@ -134,6 +138,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.slsshslgcdd" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -197,7 +203,18 @@ const closeDialog = () => {
 };
 
 const router = useRouter();
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.slsshslgcdd = data.address;
+  formData.value.jingdu = data.lnglat[0];
+  formData.value.weidu = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 // 提交表单
 const submitForm = async () => {
   try {

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/hydraulicEngineeringEdit.vue

@@ -21,7 +21,11 @@
           <el-row :gutter="20" class="mb8">
             <el-col :span="10">
               <el-form-item label="水利设施和水利工程地点:" prop="slsshslgcdd">
-                <el-input v-model="formData.slsshslgcdd" style="width: 468px !important" />
+                <el-input v-model="formData.slsshslgcdd" placeholder="请输入水利设施和水利工程地点" style="width: 468px !important" readonly>
+                  <template #append>
+                    <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+                  </template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="10">
@@ -134,6 +138,8 @@
       </div>
     </div>
   </div>
+
+  <company-map v-model:visible="mapDialogVisible" :address="formData.slsshslgcdd" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -173,7 +179,18 @@ const formData = ref({
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.slsshslgcdd = data.address;
+  formData.value.jingdu = data.lnglat[0];
+  formData.value.weidu = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const fetchHydraulicData = async () => {
   const response = await getHydraulic(props.eventId);
   if (response.code === 200) {

+ 20 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/reliefTalentsAdd.vue

@@ -19,7 +19,11 @@
             </el-select>
           </el-form-item>
           <el-form-item label="现在地址:" prop="current_address">
-            <el-input v-model="formData.current_address" style="width: 468px !important" />
+            <el-input v-model="formData.current_address" placeholder="请输入现在地址" style="width: 468px !important" readonly>
+              <template #append>
+                <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+              </template>
+            </el-input>
           </el-form-item>
           <el-form-item label="职务:" prop="position">
             <el-input v-model="formData.position" style="width: 468px !important" />
@@ -35,6 +39,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.current_address" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -50,6 +56,8 @@ const formData = ref({
   contact_number: '',
   gender: '',
   current_address: '',
+  longitude: '', // 经度
+  latitude: '', // 纬度
   position: '',
   unit_name: ''
 });
@@ -70,6 +78,17 @@ const closeDialog = () => {
 };
 
 const router = useRouter();
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
+const handleMapChange = (data) => {
+  formData.value.current_address = data.address;
+  formData.value.longitude = data.lnglat[0];
+  formData.value.latitude = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 
 // 提交表单
 const submitForm = async () => {

+ 20 - 2
src/views/comprehensiveGuarantee/reliefResourceManagement/reliefTalentsEdit.vue

@@ -16,7 +16,11 @@
             <el-input v-model="formData.gender" style="width: 468px !important"  />
           </el-form-item>
           <el-form-item label="现在地址:" prop="current_address">
-            <el-input v-model="formData.current_address" style="width: 468px !important"  />
+            <el-input v-model="formData.current_address" placeholder="请输入现在地址" style="width: 468px !important" readonly>
+              <template #append>
+                <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+              </template>
+            </el-input>
           </el-form-item>
           <el-form-item label="职务:" prop="position">
             <el-input v-model="formData.position" style="width: 468px !important"  />
@@ -32,6 +36,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.current_address" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -49,6 +55,8 @@ const formData = ref({
   contact_number: '',
   gender: '',
   current_address: '',
+  longitude: '', // 经度
+  latitude: '', // 纬度
   position: '',
   unit_name: ''
 });
@@ -56,7 +64,17 @@ const formData = ref({
 const closeDialog = () => {
   emits('close');
 };
-
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
+const handleMapChange = (data) => {
+  formData.value.current_address = data.address;
+  formData.value.longitude = data.lnglat[0];
+  formData.value.latitude = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const fetchPersonnelData = async () => {
   const response = await getPersonnel2(props.eventId);
   if (response.code === 200) {

+ 24 - 7
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueStationAdd.vue

@@ -33,12 +33,6 @@
           <el-form-item label="开放时间:" prop="kfsj">
             <el-input v-model="formData.kfsj" style="width: 468px !important" />
           </el-form-item>
-          <el-form-item label="经度:" prop="lng">
-            <el-input v-model="formData.lng" style="width: 468px !important" />
-          </el-form-item>
-          <el-form-item label="纬度:" prop="lat">
-            <el-input v-model="formData.lat" style="width: 468px !important" />
-          </el-form-item>
           <el-form-item label="救助站简介:" prop="fwdjj">
             <el-input v-model="formData.fwdjj" style="width: 468px !important" />
           </el-form-item>
@@ -52,7 +46,17 @@
             <el-input v-model="formData.fwdzt" style="width: 468px !important" />
           </el-form-item>
           <el-form-item label="服务点地址:" prop="fwdaddr">
-            <el-input v-model="formData.fwdaddr" style="width: 468px !important" />
+            <el-input v-model="formData.fwdaddr" placeholder="请输入服务点地址" style="width: 468px !important" readonly>
+              <template #append>
+                <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="经度:" prop="lng">
+            <el-input v-model="formData.lng" style="width: 468px !important" />
+          </el-form-item>
+          <el-form-item label="纬度:" prop="lat">
+            <el-input v-model="formData.lat" style="width: 468px !important" />
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
@@ -62,6 +66,8 @@
       </div>
     </div>
   </div>
+
+  <company-map v-model:visible="mapDialogVisible" :address="formData.fwdaddr" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -111,7 +117,18 @@ const rules = ref({
 });
 
 const form = ref(null); // 定义 form 变量
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.fwdaddr = data.address;
+  formData.value.lng = data.lnglat[0];
+  formData.value.lat = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const closeDialog = () => {
   emits('close');
 };

+ 24 - 7
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueStationEdit.vue

@@ -33,12 +33,6 @@
           <el-form-item label="开放时间:" prop="kfsj">
             <el-input v-model="formData.kfsj" style="width: 468px !important" />
           </el-form-item>
-          <el-form-item label="经度:" prop="lng">
-            <el-input v-model="formData.lng" style="width: 468px !important" />
-          </el-form-item>
-          <el-form-item label="纬度:" prop="lat">
-            <el-input v-model="formData.lat" style="width: 468px !important" />
-          </el-form-item>
           <el-form-item label="救助站简介:" prop="fwdjj">
             <el-input v-model="formData.fwdjj" style="width: 468px !important" />
           </el-form-item>
@@ -52,7 +46,17 @@
             <el-input v-model="formData.fwdzt" style="width: 468px !important" />
           </el-form-item>
           <el-form-item label="服务点地址:" prop="fwdaddr">
-            <el-input v-model="formData.fwdaddr" style="width: 468px !important" />
+            <el-input v-model="formData.fwdaddr" placeholder="请输入服务点地址" style="width: 468px !important" readonly>
+              <template #append>
+                <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+              </template>
+            </el-input>
+          </el-form-item>
+          <el-form-item label="经度:" prop="lng">
+            <el-input v-model="formData.lng" style="width: 468px !important" />
+          </el-form-item>
+          <el-form-item label="纬度:" prop="lat">
+            <el-input v-model="formData.lat" style="width: 468px !important" />
           </el-form-item>
         </el-form>
         <div class="common-dialog-footer">
@@ -62,6 +66,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.fwdaddr" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -96,7 +102,18 @@ const formData = ref({
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.fwdaddr = data.address;
+  formData.value.lng = data.lnglat[0];
+  formData.value.lat = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const fetchUnitData = async () => {
   const response = await getStation(props.eventId);
   if (response.code === 200) {

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitAdd.vue

@@ -31,7 +31,11 @@
             <el-input v-model="formData.team_size" style="width: 468px !important" />
           </el-form-item>
           <el-form-item label="地址:" prop="address">
-            <el-input v-model="formData.address" style="width: 468px !important" />
+            <el-input v-model="formData.address" placeholder="请输入地址" style="width: 468px !important" readonly>
+              <template #append>
+                <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+              </template>
+            </el-input>
           </el-form-item>
           <el-form-item label="经度:" prop="longitude">
             <el-input v-model="formData.longitude" style="width: 468px !important" />
@@ -50,6 +54,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.address" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -95,7 +101,18 @@ const form = ref(null); // 定义 form 变量
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.address = data.address;
+  formData.value.longitude = data.lnglat[0];
+  formData.value.latitude = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const router = useRouter();
 
 // 提交表单

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/rescueUnitEdit.vue

@@ -31,7 +31,11 @@
             <el-input v-model="formData.team_size" style="width: 468px !important" />
           </el-form-item>
           <el-form-item label="地址:" prop="address">
-            <el-input v-model="formData.address" style="width: 468px !important" />
+            <el-input v-model="formData.address" placeholder="请输入地址" style="width: 468px !important" readonly>
+              <template #append>
+                <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+              </template>
+            </el-input>
           </el-form-item>
           <el-form-item label="经度:" prop="longitude">
             <el-input v-model="formData.longitude" style="width: 468px !important" />
@@ -50,6 +54,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.address" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -80,7 +86,18 @@ const formData = ref({
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.address = data.address;
+  formData.value.longitude = data.lnglat[0];
+  formData.value.latitude = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const fetchUnitData = async () => {
   const response = await getUnit(props.eventId);
   if (response.code === 200) {

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/shelterAdd.vue

@@ -21,7 +21,11 @@
           <el-row :gutter="20" class="mb8">
             <el-col :span="10">
               <el-form-item label="应急避难场所地址:" prop="address">
-                <el-input v-model="formData.address" style="width: 468px !important" />
+                <el-input v-model="formData.address" placeholder="请输入应急避难场所地址" style="width: 468px !important" readonly>
+                  <template #append>
+                    <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+                  </template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="10">
@@ -74,6 +78,8 @@
       </div>
     </div>
   </div>
+
+  <company-map v-model:visible="mapDialogVisible" :address="formData.address" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -115,7 +121,18 @@ const form = ref(null); // 定义 form 变量
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.address = data.address;
+  formData.value.longitude = data.lnglat[0];
+  formData.value.latitude = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const router = useRouter();
 
 // 提交表单

+ 18 - 1
src/views/comprehensiveGuarantee/reliefResourceManagement/shelterEdit.vue

@@ -21,7 +21,11 @@
           <el-row :gutter="20" class="mb8">
             <el-col :span="10">
               <el-form-item label="应急避难场所地址:" prop="address">
-                <el-input v-model="formData.address" style="width: 468px !important" />
+                <el-input v-model="formData.address" placeholder="请输入应急避难场所地址" style="width: 468px !important" readonly>
+                  <template #append>
+                    <el-button type="primary" @click="openMapDialog">地图定位</el-button>
+                  </template>
+                </el-input>
               </el-form-item>
             </el-col>
             <el-col :span="10">
@@ -74,6 +78,8 @@
       </div>
     </div>
   </div>
+  <!-- 地图弹窗 -->
+  <company-map v-model:visible="mapDialogVisible" :address="formData.address" @confirm="handleMapChange"></company-map>
 </template>
 
 <script setup lang="ts">
@@ -102,7 +108,18 @@ const formData = ref({
 const closeDialog = () => {
   emits('close');
 };
+// 地图定位
+const mapDialogVisible = ref(false);
+const openMapDialog = () => {
+  mapDialogVisible.value = true;
+};
 
+const handleMapChange = (data) => {
+  formData.value.address = data.address;
+  formData.value.longitude = data.lnglat[0];
+  formData.value.latitude = data.lnglat[1];
+  mapDialogVisible.value = false;
+};
 const fetchShelterData = async () => {
   const response = await getSheltert(props.eventId);
   if (response.code === 200) {

+ 24 - 18
src/views/dataFilling/fileManagement.vue

@@ -1,6 +1,6 @@
 <template>
   <div>
-    <div v-show=" !dossierDetailState.show" class="app-container">
+    <div v-show="!dossierDetailState.show" class="app-container">
       <div>
         <transition name="fade">
           <div v-show="showSearch">
@@ -26,9 +26,8 @@
           <el-table-column label="收取时间" align="center" prop="collection_time" />
           <el-table-column label="收取状态" align="center" prop="collection_status">
             <template #default="scope">
-              <div>
-                <span v-if="Number(scope.row.collection_status) === 0">待收取</span>
-                <span v-else>已收取</span>
+              <div :style="{ color: Number(scope.row.collection_status) === 0 ? '#FF2F3C' : '#40C75F' }">
+                {{ Number(scope.row.collection_status) === 0 ? '待收取' : '已收取' }}
               </div>
             </template>
           </el-table-column>
@@ -43,13 +42,18 @@
       </div>
     </div>
     <!--  <WriteForm v-if="writeFormState.show" :event-id="writeFormState.eventId" @close="handleCancel" />-->
-    <dossierDetail v-if="dossierDetailState.show" :event-id="dossierDetailState.eventId" :table-name="dossierDetailState.table_name" @close="handleCancel" />
+    <dossierDetail
+      v-if="dossierDetailState.show"
+      :event-id="dossierDetailState.eventId"
+      :table-name="dossierDetailState.table_name"
+      @close="handleCancel"
+    />
   </div>
 </template>
 <script setup lang="ts">
-import dossierDetail from "@/views/dataFilling/dossierDetail.vue";
-import {onMounted, reactive, ref} from "vue";
-import {collectList, fillList} from "@/api/dataFilling/fileManagement";
+import dossierDetail from '@/views/dataFilling/dossierDetail.vue';
+import { onMounted, reactive, ref } from 'vue';
+import { collectList, fillList } from '@/api/dataFilling/fileManagement';
 
 const loading = ref(true);
 const showSearch = ref(true);
@@ -112,15 +116,17 @@ const handleWrite = (row) => {
       creator_id: 3,
       new_status: 2
     };
-    collectList(data).then(response => {
-      if (response.code === 200) {
-        console.log(response.msg);
-      } else {
-        console.error('更新失败', response.msg);
-      }
-    }).catch(error => {
-      console.error('请求失败', error);
-    });
+    collectList(data)
+      .then((response) => {
+        if (response.code === 200) {
+          console.log(response.msg);
+        } else {
+          console.error('更新失败', response.msg);
+        }
+      })
+      .catch((error) => {
+        console.error('请求失败', error);
+      });
     fetchFillList();
   }
 };
@@ -135,7 +141,7 @@ const handleView = (row) => {
 let dossierDetailState = reactive({
   show: false,
   eventId: '',
-  table_name:''
+  table_name: ''
 });
 onMounted(() => {
   // debugger

+ 17 - 3
src/views/duty/eventing/EventEditDialog.vue

@@ -21,7 +21,9 @@
             <el-select v-model="form.event_level" placeholder="请选择事件等级" clearable style="width: 468px !important">
               <el-option v-for="item in mm_event_level" :key="item.value" :label="item.label" :value="item.value"></el-option>
             </el-select>
-            <el-icon size="large" style="margin-left: 8px; color: #2c81ff !important;cursor: pointer;" @click="eventLevelInfoDialogVisible = true"><WarningFilled /></el-icon>
+            <el-icon size="large" style="margin-left: 8px; color: #2c81ff !important; cursor: pointer" @click="eventLevelInfoDialogVisible = true"
+              ><WarningFilled
+            /></el-icon>
           </el-form-item>
 
           <el-form-item label="事件状态:" prop="event_status">
@@ -31,11 +33,23 @@
           </el-form-item>
 
           <el-form-item label="事发时间:" prop="event_time">
-            <el-date-picker v-model="form.event_time" type="datetime" value-format="YYYY-MM-DD HH:mm:ss" placeholder="选择事发时间" style="width: 468px !important"></el-date-picker>
+            <el-date-picker
+              v-model="form.event_time"
+              type="datetime"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              placeholder="选择事发时间"
+              style="width: 468px !important"
+            ></el-date-picker>
           </el-form-item>
 
           <el-form-item label="上报时间:" prop="report_time">
-            <el-date-picker v-model="form.report_time" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择上报时间" style="width: 468px !important"></el-date-picker>
+            <el-date-picker
+              v-model="form.report_time"
+              value-format="YYYY-MM-DD HH:mm:ss"
+              type="datetime"
+              placeholder="选择上报时间"
+              style="width: 468px !important"
+            ></el-date-picker>
           </el-form-item>
 
           <el-form-item label="伤亡情况:">

+ 24 - 47
src/views/emergencyCommandMap/LeftSection/VideoMonitorEdit.vue

@@ -1,39 +1,24 @@
 <template>
-  <Dialog customShow type="xl" title="视频监控" class="dialog" hide-footer @close="reset">
+  <Dialog custom-show type="xl" title="视频监控" class="dialog" hide-footer @close="reset">
     <div class="search-box">
       <div class="box-left">
-        <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="200px" label-position="left">
-          <!--          <el-form-item label="实景视频" prop="eventType">-->
-          <!--            <el-select-->
-          <!--              v-model="queryParams.realisticVideoType"-->
-          <!--              size="large"-->
-          <!--              class="custom-select"-->
-          <!--              popper-class="custom-select-popper"-->
-          <!--              :teleported="false"-->
-          <!--              placeholder="全部"-->
-          <!--            >-->
-          <!--              <el-option label="全部" value=""></el-option>-->
-          <!--              <el-option v-for="item in realistic_video" key="item.value" :label="item.label" :value="item.value" />-->
-          <!--            </el-select>-->
-          <!--          </el-form-item>-->
+        <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="70px" label-position="left">
           <el-form-item prop="name">
-            <el-input v-model="queryParams.name" class="custom-input2" placeholder="请输入摄像头名称" size="large" style="width: 500px" />
+            <el-input v-model="queryParams.name" class="custom-input2" placeholder="请输入摄像头名称" style="width: 500px" />
+          </el-form-item>
+          <el-form-item label="实景视频" prop="dict_value">
+            <el-select
+              v-model="queryParams.dict_value"
+              class="custom-select"
+              popper-class="custom-select-popper"
+              :teleported="false"
+              placeholder="全部"
+              @change="handleQuery"
+            >
+              <el-option label="全部" value="" />
+              <el-option v-for="item in video_type" :key="item.value" :label="item.label" :value="item.value" />
+            </el-select>
           </el-form-item>
-
-          <span>实景视频:</span>
-          <el-select
-            v-model="active"
-            placeholder="请选择"
-            class="custom-select"
-            popper-class="custom-select-popper"
-            :teleported="false"
-            style="width: 140px"
-            @change="initData"
-          >
-            <el-option v-for="item in videoList" :key="item.name" :label="item.name" :value="item.value" />
-          </el-select>
-
-
           <el-form-item>
             <div class="common-btn-primary" @click="handleQuery">搜索</div>
             <div class="common-btn" @click="resetQuery">重置</div>
@@ -81,6 +66,7 @@
         layout="total, prev, pager, next"
         @pagination="getList"
       />
+      <div v-if="total === 0" style="width: 100%; text-align: center; font-size: 18px; font-weight: bold">暂无数据</div>
     </div>
     <div id="container" style="display: none"></div>
   </Dialog>
@@ -108,27 +94,16 @@ const props = defineProps({
 });
 const emits = defineEmits(['update:modelValue']);
 const proxy = getCurrentInstance()?.proxy;
-const { realistic_video } = toRefs<any>(proxy?.useDict('realistic_video'));
+const { video_type } = toRefs<any>(proxy?.useDict('video_type'));
 
 //查看更多数据
 const queryFormRef = ref();
 const queryParams = reactive({
   current: 1,
   size: 8,
-  realisticVideoType: '',
+  dict_value: '',
   name: ''
 });
-const active = ref('0');
-const videoList = ref([
-  { name: '全量视频', value: '0' },
-  { name: '江河湖库视频', value: '1' },
-  { name: '林火视频', value: '2' },
-  { name: '高速公路视频', value: '3' },
-  { name: '汛期视频', value: '4' },
-  { name: '雨情视频', value: '5' },
-  { name: '台风视频', value: '6' },
-  { name: '交通局视频', value: '7' }
-]);
 let total = ref(0);
 let editVideo = ref(false);
 // 选中的视频
@@ -159,10 +134,12 @@ const getList = async () => {
     current: queryParams.current,
     size: queryParams.size,
     query: {
-      name: queryParams.name,
-      realisticVideoType: queryParams.realisticVideoType
+      name: queryParams.name
     }
   };
+  if (!!queryParams.dict_value) {
+    newParams.query.dict_value = queryParams.dict_value;
+  }
   getEmergencyVideoCata(newParams).then((res) => {
     selectData.value.forEach((item) => {
       for (let i = 0; i < res.rows.length; i++) {
@@ -194,7 +171,7 @@ const deleteItem = (index) => {
 /** 表单重置 */
 const reset = () => {
   queryParams.current = 1;
-  queryParams.realisticVideoType = '';
+  queryParams.dict_value = '';
   queryParams.name = '';
   emits('update:modelValue', false);
 };

+ 2 - 2
src/views/globalMap/RightMenu/KeyVehicles.vue

@@ -74,10 +74,10 @@ const handleConnect = () => {};
 const handleCollaborate = () => {};
 // 轨迹
 const handleTrack = (item) => {
-  getVehicleTrajectory(item.id).then((res) => {
+  getVehicleTrajectory(item.vehicle_no).then((res) => {
     const trajectory = [];
     res.rows.forEach((item) => {
-      trajectory.push([item.longitude, item.latitude]);
+      trajectory.push([item.lng, item.lat]);
     });
     trackPlayback(trajectory);
   });

+ 1 - 1
src/views/globalMap/index.vue

@@ -288,7 +288,7 @@ const getPlaceSearch = () => {
 };
 const trackPlayback = (data) => {
   if (YMapType.includes(activeMap.value)) {
-    return map2Ref.value.trackPlayback(data);
+    return map2Ref.value.getMapUtils().trackPlayback(data);
   } else if (AMapType.includes(activeMap.value)) {
     return mapRef.value.trackPlayback(data);
   }