无人机管理后台前端(已迁走)
张含笑
2025-11-26 12c6e0aa54c250f4a181a6b71ce18908858d93ca
Merge branch 'refs/heads/feature/v8.0/8.0.2' into prod
4 files modified
99 ■■■■ changed files
src/page/index/useGlobalWS.js 2 ●●● patch | view | raw | blame | history
src/views/job/components/DeviceJobDetails.vue 6 ●●●● patch | view | raw | blame | history
src/views/layerManagement/index.vue 37 ●●●●● patch | view | raw | blame | history
src/views/tickets/orderLog.vue 54 ●●●● patch | view | raw | blame | history
src/page/index/useGlobalWS.js
@@ -30,7 +30,7 @@
            ...downloadProgress.value,
            [type]: setProgress,
        })
        if (status === 'COMPLETED' && ['dpsjzx','dplsrwxq'].includes(type)) {
        if (status === 'COMPLETED' && ['htsjzx','htlsrwxq'].includes(type)) {
            const name = `数据中心-${dayjs().format('YYYYMMDDHHmmss')}.zip`
            const currentUrl = getStore({name: 'downloadUrl'})
            if (currentUrl === download_url && download_url!== undefined) return
src/views/job/components/DeviceJobDetails.vue
@@ -153,7 +153,7 @@
<script setup>
import PanoramaPopup from '@/components/PanoramaPopup/PanoramaPopup.vue';
import { getShowImg, getSmallImg, getzsSmallImg,getzsShowImg } from '@/utils/util';
import { getShowImg, getSmallImg, getzsSmallImg, getzsShowImg, aLinkDownloadUtil } from '@/utils/util';
import { getaiImagesPageAPI,cancelDownloadApi,getDownloadStatusApi,attachDownload,aiImagesPage} from '@/api/dataCenter/dataCenter';
import { pxToRem } from '@/utils/rem'
import JobRelatedEvents from './JobRelatedEvents.vue'
@@ -315,8 +315,8 @@
    if (!list?.length) return ElMessage.warning('请选择文件')
    if (list.length === 1) {
        list.forEach((item, index) => {
            const suffix = item.url.split('.').pop()
            aLinkDownloadUtil(item.url, item.nickName + '.' + suffix)
            const suffix = item.link.split('.').pop()
            aLinkDownloadUtil(item.link, item.nickName + '.' + suffix)
        })
    } else {
        loadingData = ElLoading.service({ background: 'rgba(0, 0, 0, 0.5)', text: '打包中,请稍等...' })
src/views/layerManagement/index.vue
@@ -52,7 +52,7 @@
import * as Cesium from 'cesium';
import { PublicCesium } from '@/utils/cesium/publicCesium';
import _, { cloneDeep, throttle } from 'lodash';
const isProd = import.meta.env.VITE_APP_ENV === 'production'
import { provide } from 'vue';
import { useStore } from 'vuex';
const store = useStore();
@@ -66,20 +66,27 @@
const selectDataList = ref([]);
// 当前面位置信息
let curPolygonPosition = [];
const tabData = ref([
  {
    name: '自定义识别区',
    type: '0',
  },
  {
    name: '自定义禁飞区',
    type: '1',
  },
  {
    name: '国土空间规划',
    type: '2',
  },
]);
const tabData = computed(() => {
  const allTabs = [
    {
      name: '自定义识别区',
      type: '0',
    },
    {
      name: '自定义禁飞区',
      type: '1',
    },
    {
      name: '国土空间规划',
      type: '2',
    },
  ];
  // 如果是生产环境,只返回自定义识别区
  if (isProd) {
    return allTabs.filter(tab => tab.type === '0');
  }
  return allTabs;
});
const layerParams = ref({
  addNest: false,
  editNest: false,
src/views/tickets/orderLog.vue
@@ -369,25 +369,25 @@
          <el-col :span="5">
            <div class="flex">
              <div class="flex-1 flex-3">
            <el-select v-model="form.rep_fre_type" placeholder="请选择频次" :disabled="detailTitle === '工单详情'">
              <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
            </el-select>
                <el-select v-model="form.rep_fre_type" placeholder="请选择频次" :disabled="detailTitle === '工单详情'">
                  <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
                </el-select>
              </div>
              <div class="flex-1">
            <el-time-picker v-model="form.deal_time" prop="deal_time"
                            value-format="HH:mm" :picker-options="{
                <el-time-picker v-model="form.deal_time" prop="deal_time"
                                value-format="HH:mm" :picker-options="{
                selectableRange: '00:00 - 23:59',
              }" :disabled="detailTitle === '工单详情'" />
              </div>
            </div>
          </el-col>
<!--          <el-col :span="3">-->
<!--            <el-time-picker class="timeStyle" :style="{ width: pxToRem(140) }" v-model="form.deal_time" prop="deal_time"-->
<!--                            value-format="HH:mm" :picker-options="{-->
<!--                selectableRange: '00:00 - 23:59',-->
<!--              }" :disabled="detailTitle === '工单详情'" />-->
<!--          </el-col>-->
          <!--          <el-col :span="3">-->
          <!--            <el-time-picker class="timeStyle" :style="{ width: pxToRem(140) }" v-model="form.deal_time" prop="deal_time"-->
          <!--                            value-format="HH:mm" :picker-options="{-->
          <!--                selectableRange: '00:00 - 23:59',-->
          <!--              }" :disabled="detailTitle === '工单详情'" />-->
          <!--          </el-col>-->
        </el-row>
        <el-row :gutter="20">
@@ -519,25 +519,25 @@
          <el-col :span="5">
            <div class="flex">
              <div class="flex-1 flex-3">
            <el-select v-model="form.rep_fre_type" placeholder="请选择频次" :disabled="true">
              <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
            </el-select>
                <el-select v-model="form.rep_fre_type" placeholder="请选择频次" :disabled="true">
                  <el-option v-for="item in cycles" :key="item" :label="item" :value="item" />
                </el-select>
              </div>
              <div class="flex-1">
            <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" :disabled="true"
                            value-format="HH:mm" :picker-options="{
                <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" :disabled="true"
                                value-format="HH:mm" :picker-options="{
                selectableRange: '00:00 - 23:59',
              }" />
              </div>
            </div>
          </el-col>
<!--          <el-col :span="3">-->
<!--            <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" :disabled="true"-->
<!--                            value-format="HH:mm" :picker-options="{-->
<!--                selectableRange: '00:00 - 23:59',-->
<!--              }" />-->
<!--          </el-col>-->
          <!--          <el-col :span="3">-->
          <!--            <el-time-picker style="width: 100px" v-model="form.deal_time" prop="deal_time" :disabled="true"-->
          <!--                            value-format="HH:mm" :picker-options="{-->
          <!--                selectableRange: '00:00 - 23:59',-->
          <!--              }" />-->
          <!--          </el-col>-->
        </el-row>
        <el-row :gutter="20">
@@ -1040,14 +1040,16 @@
          positions.unshift({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height })
          positions.push({latitude: maxItem.latitude, longitude: maxItem.longitude, height:maxItem.drone_height})
          let resultHeight = 0
          let valueHeight = 0
          await getWaylineMaxTerrainHeight(positions).then(res => {
            resultHeight = this.safeHeight > (res.data.data + 30) ? this.safeHeight : (res.data.data + 30)
            resultHeight = (this.safeHeight+maxItem.drone_height) > (res.data.data + 30) ? (this.safeHeight+maxItem.drone_height) : (res.data.data + 30)
            valueHeight = (resultHeight - maxItem.drone_height) > backHeight ? _.round(resultHeight - maxItem.drone_height) : 0
          })
          let valueHeight = _.round(backHeight - resultHeight, 2)
          console.log('打印比较值', valueHeight)
          if (valueHeight < 0) {
            this.$confirm(`当前返航高度存在安全隐患,建议调整为${resultHeight}米以上后进行发布`, '提示', {
          if (valueHeight > 0) {
            this.$confirm(`当前返航高度存在安全隐患,建议调整为${valueHeight}米以上后进行发布`, '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'