无人机管理后台前端(已迁走)
张含笑
2025-12-02 141cc1bc650f974b855dbfd03e29b78774a1c419
Merge branch 'refs/heads/feature/v8.0/8.0.4' into test

# Conflicts:
# src/views/job/components/DeviceJobDetails.vue
4 files modified
155 ■■■■ changed files
src/views/dataCenter/dataCenter.vue 2 ●●● patch | view | raw | blame | history
src/views/job/components/DeviceJobDetails.vue 87 ●●●● patch | view | raw | blame | history
src/views/layerManagement/components/leftList.vue 14 ●●●● patch | view | raw | blame | history
src/views/resource/patchManagement.vue 52 ●●●● patch | view | raw | blame | history
src/views/dataCenter/dataCenter.vue
@@ -304,7 +304,7 @@
      >
        <div class="video-container">
          <video
            style="width: 100%"
            style="width: 100%;height: 500px"
            class="videoBox"
            ref="videoRefs"
            controls
src/views/job/components/DeviceJobDetails.vue
@@ -99,52 +99,53 @@
                                fit="cover"
                            />
                        <el-dialog
              class="ztzf-dialog"
              append-to-body
              modal-class="detailsOfHistoricalTasks"
              v-model="VideoShow"
              :width="pxToRem(1600)"
              :close-on-click-modal="false"
              :destroy-on-close="true"
            >
                <div class="fullscreen">
                    <video
                        ref="fullscreenVideo"
                        class="fullscreen-video"
                        :src="currentVideoUrl"
                        :style="{ width: pxToRem(1567), height: '80vh' }"
                        controls
            </div>
          </template>
        </div>
        <el-image-viewer
          v-if="showViewer"
          :url-list="previewUrls"
          :initial-index="activeIndex"
          @close="showViewer = false"
        />
      </div>
      <div class="content-right" v-if="isShow">
        <DeviceJobDetailsMap
          :detailsData="detailsData"
          :yuanImages="yuanImages"
          @showImageeclick="showImageeclick"
          :jobId="props.jobId"
        />
        <div class="content-map-popups"></div>
      </div>
    </div>
  </el-dialog>
    <el-dialog
        class="ztzf-dialog"
        append-to-body
        modal-class="detailsOfHistoricalTasks"
        v-model="VideoShow"
        :width="pxToRem(1600)"
        :close-on-click-modal="false"
        :destroy-on-close="true"
      >
        <div class="fullscreen">
          <video
            ref="fullscreenVideo"
            class="fullscreen-video"
            :src="currentVideoUrl"
            :style="{ width: pxToRem(1567), height: '80vh' }"
            controls
            preload="auto"
            @play="handleVideoPlay"
            @ended="handleVideoEnded"
                    ></video>
                </div>
            </el-dialog>
                        </div>
                    </template>
                </div>
                <el-image-viewer
                    v-if="showViewer"
                    :url-list="previewUrls"
                    :initial-index="activeIndex"
                    @close="showViewer = false"
                />
            </div>
            <div class="content-right" v-if="isShow">
                <DeviceJobDetailsMap
                    :detailsData="detailsData"
                    :yuanImages="yuanImages"
                    @showImageeclick="showImageeclick"
                    :jobId="props.jobId"
                />
                <div class="content-map-popups"></div>
            </div>
        </div>
    </el-dialog>
          ></video>
        </div>
      </el-dialog>
  <!-- 全景360 -->
  <PanoramaPopup
    v-if="'全景'"
src/views/layerManagement/components/leftList.vue
@@ -127,7 +127,17 @@
    loading.value = true;
    const res = await treeDataApi();
    treeAllData.value = res.data.data;
    if(coverData.value.length===0){
       checkedKeys.value = [];
    checkedNodes.value = [];
    coverData.value = [];
     nextTick(() => {
      if (treeRef.value) {
        treeRef.value.setCheckedKeys([]);
      }
    });
    }
    setupWatch();
  } catch (error) {
    console.error('获取数据失败:', error);
@@ -213,7 +223,6 @@
  const currentCheckedKeys = [...checkedKeys.value];
  const currentCheckedNodes = [...checkedNodes.value];
  EventBus.emit('focusOnNode', node.data);
  if (node.data.level === 2) {
    const folderChildren = node.data.children || [];
    const childrenIds = folderChildren.map(child => child.id);
@@ -267,6 +276,7 @@
// 删除按钮事件
const handleDelete = node => {
  let id = node.data.id;
  ElMessageBox.confirm('确定要删除该内容吗?', '提示', {
    confirmButtonText: '确定',
src/views/resource/patchManagement.vue
@@ -510,44 +510,48 @@
  });
};
// 图斑上传
const uploadFlightFile = (file, t) => {
const uploadFlightFile = async (file, t) => {
  loading.value = true;
  const fileSuffix = file.name.substring(file.name.lastIndexOf('.') + 1);
  if (!['kmz', 'kml', 'zip'].includes(fileSuffix)) {
    return ElMessage.error('请上传zip/kmz/kml格式的文件');
  }
  if (file) {
    box.value = false;
  }
  let data = new FormData();
  let type = t === '3' ? '' : t;
  const params = {
    file: file,
    fileName: ruleForm.name,
    LotTypeId: ruleForm.region,
  };
  try {
    const fileSuffix = file.name.substring(file.name.lastIndexOf('.') + 1);
    if (!['kmz', 'kml', 'zip'].includes(fileSuffix)) {
      ElMessage.error('请上传zip/kmz/kml格式的文件');
      return;
    }
    box.value = false;
    let data = new FormData();
    let type = t === '3' ? '' : t;
    const params = {
      file: file,
      fileName: ruleForm.name,
      LotTypeId: ruleForm.region,
    };
  Object.keys(params).forEach(key => {
    data.append(key, params[key]);
  });
    Object.keys(params).forEach(key => {
      data.append(key, params[key]);
    });
  uploadManagementApi(data).then(res => {
    const res = await uploadManagementApi(data);
    if (res.data.code !== 0) {
      return ElMessage.error('上传失败');
      ElMessage.error('上传失败');
      return;
    }
    ElMessage.success('上传成功');
    loading.value = false;
    // 重置表单
    ruleForm.name = '';
    ruleForm.region = '';
    if (ruleFormRef.value) {
      ruleFormRef.value.resetFields();
    }
    searchReset();
  });
  } catch (error) {
     loading.value = false;
  } finally {
    loading.value = false;
  }
};
provide('searchReset', searchReset);
onMounted(() => {