无人机管理后台前端(已迁走)
shuishen
2025-11-14 6b093b471607b1e31174f2157d824d7acf691646
Merge branch 'feature/v8.0/8.0.2' into test
6 files modified
112 ■■■■ changed files
src/api/tickets/orderLog.js 10 ●●●● patch | view | raw | blame | history
src/api/tickets/ticket.js 9 ●●●●● patch | view | raw | blame | history
src/hooks/useRouteLine/useRouteLine.js 11 ●●●●● patch | view | raw | blame | history
src/store/modules/common.js 10 ●●●● patch | view | raw | blame | history
src/views/tickets/orderLog.vue 42 ●●●●● patch | view | raw | blame | history
src/views/tickets/ticket.vue 30 ●●●●● patch | view | raw | blame | history
src/api/tickets/orderLog.js
@@ -88,11 +88,11 @@
// 获取返航最高 高度
export const getWaylineMaxTerrainHeight = data => {
    return request({
        url: `/drone-odm/odmTaskInfo/odmTaskInfo/getWaylineMaxTerrainHeight`,
        method: 'post',
        data,
    })
  return request({
    url: `/drone-odm/odmTaskInfo/odmTaskInfo/getWaylineMaxTerrainHeight`,
    method: 'post',
    data,
  })
}
src/api/tickets/ticket.js
@@ -103,4 +103,13 @@
    url: `/drone-device-core/wayline/waylineJobInfo/createEventJob/${id}`,
    method: 'post',
  })
}
// 导出工单
export const exportTheTicket = params => {
    return request({
        url: `/drone-device-core/jobEvent/downloadEvent`,
        method: 'get',
        responseType: 'blob',
        params,
    })
}
src/hooks/useRouteLine/useRouteLine.js
@@ -51,7 +51,7 @@
        resetCurRouteLineData()
        const { pointPlacemark, polygonList, templateType, startPoint, execute_height_mode, auto_flight_speed } =
        const { pointPlacemark, polygonList, templateType, startPoint, execute_height_mode, auto_flight_speed, take_off_security_height } =
            await analysisPointLineKmz(kmzUrl)
        curRouteLineData.value = {
@@ -61,6 +61,7 @@
            execute_height_mode,
            auto_flight_speed,
            wayline_type,
            take_off_security_height,
            infos: infos
        }
@@ -194,9 +195,10 @@
                height: 50,
            },
        })
        // 获取最后一点高度
        console.log(pointList, '查看数组最后一点高度')
        store.commit('setLastHeight', Number(pointList[pointList.length - 1].height))
        // 获取航线拆分所有点
        store.commit('setPositionsArr', pointList)
        // 获取安全起飞高度
        store.commit('setSafeHeight', curRouteLineData.value.take_off_security_height)
        flyVisual({
            positionsData:pointList.map(i => [Number(i.longitude), Number(i.latitude), Number(i.height)]),
            viewer,
@@ -217,6 +219,7 @@
            execute_height_mode: '',
            auto_flight_speed: '',
            wayline_type: '',
            take_off_security_height: ''
        }
    }
src/store/modules/common.js
@@ -21,11 +21,15 @@
      htsjzx: 100, //数据中心
      htlsrwxq: 100, //历史任务详情
    },
    lastHeight: 0, // 获取最后一点高度
    safeHeight: 0, // 获取选择航线高度
    positionsArr: [], // 获取选择航线点数据
  },
  mutations: {
    setLastHeight(state, data) {
      state.lastHeight = data
    setSafeHeight (state, data) {
      state.safeHeight = data
    },
    setPositionsArr(state, data) {
      state.positionsArr = data
    },
    setDownloadProgress(state, data) {
      state.downloadProgress = data
src/views/tickets/orderLog.vue
@@ -194,7 +194,7 @@
          </el-col>
          <el-col :span="6">
            <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height">
              <el-input-number v-model="form.rth_altitude" :min="50" :max="300"></el-input-number>
              <el-input-number v-model="form.rth_altitude" :min="50" :max="500"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
@@ -325,7 +325,7 @@
          <el-col :span="6">
            <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height">
              <el-input-number :disabled="detailTitle === '工单详情'" v-model="form.rth_altitude" :min="50"
                               :max="300"></el-input-number>
                               :max="500"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
@@ -465,7 +465,7 @@
          </el-col>
          <el-col :span="6">
            <el-form-item label="安全返航真高" prop="rth_altitude" class="safe-height">
              <el-input-number :disabled="true" v-model="form.rth_altitude" :min="50" :max="300"></el-input-number>
              <el-input-number :disabled="true" v-model="form.rth_altitude" :min="50" :max="500"></el-input-number>
            </el-form-item>
          </el-col>
        </el-row>
@@ -570,7 +570,8 @@
  orderLogExport,
  jobStatusNum,
  userPublish,
  deleteOrderLog
  deleteOrderLog,
  getWaylineMaxTerrainHeight
} from '@/api/tickets/orderLog'
import { getTicketInfo } from '@/api/tickets/ticket'
import { getDictionaryByCode } from '@/api/system/dictbiz'
@@ -825,9 +826,13 @@
      return CircleClose
    },
    ...mapGetters(['userInfo', 'permission']),
    lastHeight () {
      const height = this.$store.state.common.lastHeight
      return Number(height) || 0 // 确保是数字类型
    safeHeight () {
      const safeHeight = this.$store.state.common.safeHeight
      return Number(safeHeight) || 0 // 确保是数字类型
    },
    positionsArr () {
      const positionsArr = this.$store.state.common.positionsArr
      return positionsArr || [] // 确保是数字类型
    },
    filteredTabs () {
      // rejection_and_draft 权限控制“已驳回”和“草稿”tab
@@ -1007,15 +1012,22 @@
          const maxItem = checkedList.reduce((max, item) => {
            return item.drone_height > max.drone_height ? item : max;
          });
          console.log(maxItem.drone_height, '高度');
          console.log(this.lastHeight, '最后一点高度');
          let result = _.round((maxItem.drone_height + this.form.rth_altitude), 2);
          // 返航绝对高度
          let backHeight = this.form.rth_altitude // + maxItem.drone_height
          console.log(backHeight,'backHeight')
          // 安全起飞高度
          let positions = this.positionsArr
          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
          await getWaylineMaxTerrainHeight(positions).then(res => {
            resultHeight = this.safeHeight > (res.data.data + 30) ? this.safeHeight : (res.data.data + 30)
          })
          let valueHeight = _.round(backHeight - resultHeight, 2)
          console.log('打印比较值', valueHeight)
          let resultHeight = this.lastHeight - maxItem.drone_height
          let resultH = _.round(resultHeight, 2)
          if (this.lastHeight > result) {
            this.$confirm(`当前返航高度存在安全隐患,建议调整为${resultH}米以上后进行发布`, '提示', {
          if (valueHeight < 0) {
            this.$confirm(`当前返航高度存在安全隐患,建议调整为${resultHeight}米以上后进行发布`, '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
src/views/tickets/ticket.vue
@@ -206,6 +206,7 @@
                @click="openReviewDialog"
                >批量审核
              </el-button>
              <el-button
                v-if="permissionList.exportBtn"
                type="success"
@@ -232,7 +233,12 @@
                  >详情
                </el-button>
              </template>
              <template  v-if="row.status === 4 && activeTab === 'completed'">
                <el-button type="text" icon="el-icon-download"  @click="exportTheTick(row)"
                  >导出
                </el-button>
              </template>
              <template v-if="permission.tickets_repeat_review">
                <el-button
                  v-if="row.status === 4 && row.isReview !== 1"
@@ -1010,6 +1016,7 @@
  getStepInfo,
  getReviewById,
  getCreateEventJob,
  exportTheTicket
} from '@/api/tickets/ticket';
import { getSFDictionaryTree } from '@/api/job/task';
import { export_json_to_excel } from '@/utils/exportExcel';
@@ -1107,7 +1114,7 @@
          { label: '工单编号', prop: 'orderNumber', width: 170 },
          { label: '工单名称', prop: 'orderName', width: 150, overHidden: true, tooltip: true },
          { label: '所属部门', prop: 'department', overHidden: true, tooltip: true },
          { label: '发起时间', prop: 'startTime', width: 160, overHidden: true },
          { label: '发起任务时间', prop: 'startTime', width: 160, overHidden: true },
          { label: '关联算法', prop: 'aiType', overHidden: true, tooltip: true },
          {
            label: '工单类型',
@@ -1838,7 +1845,7 @@
            orderName: item.event_name,
            department:
              this.departments.find(d => d.value === item.dept_id)?.label || item.dept_name,
            startTime: item.create_time,
            startTime: item.job_create_time || '/',
            aiType: item.ai_types,
            content: item.content, // 将后端返回的 content 映射为 content
            type: item.work_order_type_dict_key,
@@ -3188,6 +3195,23 @@
          });
      }
    },
    // 导出工单报表
    exportTheTick(row){
      const params = {
        num:row.orderNumber
      }
      exportTheTicket(params).then(res=>{
      const elink = document.createElement('a')
      elink.download = row.orderName + '.docx'
      elink.style.display = 'none'
      const blob = new Blob([res.data])
      elink.href = URL.createObjectURL(blob)
      document.body.appendChild(elink)
      elink.click()
      document.body.removeChild(elink)
      })
       this.$message.success('数据导出成功');
    }
  },
  activated() {
    this.handleReset();