From db3e35114ed8d1318be257324747cd9f486038ac Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Sat, 27 Sep 2025 15:53:56 +0800
Subject: [PATCH] Merge branch 'feature/v6.0/6.0.4' of http://139.196.74.78:10010/r/drone/drone-web-manage into feature/v6.0/6.0.4
---
src/views/dataCenter/components/searchData.vue | 14
src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue | 15
src/hooks/useRouteLine/useRouteLine.js | 23 +-
src/views/tickets/orderLog.vue | 226 ++++++++++++++-----------
src/store/modules/common.js | 14 +
src/page/index/index.vue | 47 ++--
src/views/monitor/log/flightLog.vue | 101 +++++-----
src/page/index/GlobalWS.vue | 11 +
src/App.vue | 3
src/api/resource/wayline.js | 8
src/page/index/useGlobalWS.js | 45 +++-
11 files changed, 298 insertions(+), 209 deletions(-)
diff --git a/src/App.vue b/src/App.vue
index 066092b..87347b7 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -3,9 +3,8 @@
</template>
+
<script setup>
-import { useDownloadWs } from '@/page/index/useDownloadWs';
-useDownloadWs()
</script>
<style>
diff --git a/src/api/resource/wayline.js b/src/api/resource/wayline.js
index 15e1e78..7c6337a 100644
--- a/src/api/resource/wayline.js
+++ b/src/api/resource/wayline.js
@@ -17,7 +17,13 @@
});
};
-
+export const newGetWorkspacesPage = params => {
+ return request({
+ url: `/drone-device-core/wayline/api/v1/wayline-groups/page`,
+ method: 'get',
+ params,
+ })
+}
export const getWaylineFileListByArea = (areaCode) => {
return request({
diff --git a/src/hooks/useRouteLine/useRouteLine.js b/src/hooks/useRouteLine/useRouteLine.js
index caefe7c..738b9be 100644
--- a/src/hooks/useRouteLine/useRouteLine.js
+++ b/src/hooks/useRouteLine/useRouteLine.js
@@ -13,6 +13,8 @@
import { ArrowLineMaterialProperty } from '@/utils/cesium/Material'
import { flyVisual } from '@/utils/cesium/mapUtil'
+import { useStore } from 'vuex'
+
let arrowLineMaterialProperty = new ArrowLineMaterialProperty({
color: new Cesium.Color(128 / 255, 215 / 255, 255 / 255, 1),
directionColor: new Cesium.Color(1, 1, 1, 1),
@@ -22,6 +24,7 @@
})
export function useRouteLine () {
+ const store = useStore()
let viewer = null
let previewDataSource = null
@@ -162,15 +165,15 @@
},
})
- // 落点线
- ; (pointList || [])?.forEach((item, index) => {
- const topPosition = Cesium.Cartesian3.fromDegrees(Number(item.longitude), Number(item.latitude), Number(item.height))
- let setting = {
- position: topPosition,
- polyline: getPolyLine(viewer, { value: pointList }, index),
- }
- previewDataSource.entities.add(setting)
- })
+ // 落点线
+ ; (pointList || [])?.forEach((item, index) => {
+ const topPosition = Cesium.Cartesian3.fromDegrees(Number(item.longitude), Number(item.latitude), Number(item.height))
+ let setting = {
+ position: topPosition,
+ polyline: getPolyLine(viewer, { value: pointList }, index),
+ }
+ previewDataSource.entities.add(setting)
+ })
// 终点
previewDataSource.entities.add({
@@ -191,6 +194,8 @@
height: 50,
},
})
+ // 获取最后一点高度
+ store.commit('setLastHeight', Number(pointList[pointList.length - 1].height))
flyVisual({
positionsData:pointList.map(i => [Number(i.longitude), Number(i.latitude), Number(i.height)]),
viewer,
diff --git a/src/page/index/GlobalWS.vue b/src/page/index/GlobalWS.vue
new file mode 100644
index 0000000..261b648
--- /dev/null
+++ b/src/page/index/GlobalWS.vue
@@ -0,0 +1,11 @@
+<template>
+
+</template>
+
+<script setup>
+import { useGlobalWS } from '@/page/index/useGlobalWS';
+useGlobalWS()
+</script>
+<style scoped lang="scss">
+
+</style>
diff --git a/src/page/index/index.vue b/src/page/index/index.vue
index c761232..995cd73 100644
--- a/src/page/index/index.vue
+++ b/src/page/index/index.vue
@@ -24,23 +24,26 @@
</div>
</div>
</div>
+ <GlobalWS />
<!-- <wechat></wechat> -->
</div>
</template>
<script>
-import index from '@/mixins/index'
-import wechat from './wechat.vue'
+import index from '@/mixins/index';
+import wechat from './wechat.vue';
//import { validatenull } from 'utils/validate';
-import { mapGetters } from 'vuex'
-import tags from './tags.vue'
-import search from './search.vue'
-import logo from './logo.vue'
-import top from './top/index.vue'
-import sidebar from './sidebar/index.vue'
+import { mapGetters } from 'vuex';
+import tags from './tags.vue';
+import search from './search.vue';
+import logo from './logo.vue';
+import top from './top/index.vue';
+import sidebar from './sidebar/index.vue';
+import GlobalWS from '@/page/index/GlobalWS.vue';
export default {
mixins: [index],
components: {
+ GlobalWS,
top,
logo,
tags,
@@ -49,10 +52,10 @@
wechat,
},
name: 'index',
- provide () {
+ provide() {
return {
index: this,
- }
+ };
},
computed: {
...mapGetters([
@@ -64,27 +67,27 @@
'menu',
'setting',
]),
- validSidebar () {
+ validSidebar() {
return !(
(this.$route.meta || {}).menu === false || (this.$route.query || {}).menu === 'false'
- )
+ );
},
},
props: [],
methods: {
//打开菜单
- openMenu (item = {}) {
+ openMenu(item = {}) {
this.$store.dispatch('GetMenu', item.id).then(data => {
if (data.length !== 0) {
- this.$router.$avueRouter.formatRoutes(data, true)
+ this.$router.$avueRouter.formatRoutes(data, true);
// 获取url里面的redirect
- const redirect = decodeURIComponent(this.$route.query.redirect || '')
+ const redirect = decodeURIComponent(this.$route.query.redirect || '');
if (redirect) {
- console.log('redirect', redirect)
- const [path, queryString] = redirect.split('?')
- const query = queryString ? Object.fromEntries(new URLSearchParams(queryString)) : {}
- this.$router.push({ path, query })
+ console.log('redirect', redirect);
+ const [path, queryString] = redirect.split('?');
+ const query = queryString ? Object.fromEntries(new URLSearchParams(queryString)) : {};
+ this.$router.push({ path, query });
}
}
//当点击顶部菜单后默认打开第一个菜单
@@ -108,10 +111,10 @@
}, itemActive.meta)
});
}*/
- })
+ });
},
},
-}
+};
</script>
<style lang="scss" scoped>
@@ -130,6 +133,6 @@
background: transparent;
padding: 0 10px;
--el-color-primary: rgba(20, 65, 255, 1);
- height: pxToVh(55);
+ height: pxToVh(55);
}
</style>
diff --git a/src/page/index/useDownloadWs.js b/src/page/index/useGlobalWS.js
similarity index 62%
rename from src/page/index/useDownloadWs.js
rename to src/page/index/useGlobalWS.js
index 2113b6d..22faf74 100644
--- a/src/page/index/useDownloadWs.js
+++ b/src/page/index/useGlobalWS.js
@@ -1,20 +1,21 @@
+import { computed, onBeforeUnmount, onMounted } from 'vue';
import { getWebsocketUrl } from '@/utils/websocket/config'
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'
import { useStore } from 'vuex'
import dayjs from 'dayjs'
import { aLinkDownloadUtil } from '@/utils/util'
import EventBus from '@/utils/eventBus'
-import { computed, onBeforeUnmount, onMounted } from 'vue';
-import { setStore,getStore } from '@/utils/store';
-import { getDownloadStatusApi } from '@/api/dataCenter/dataCenter';
+import { getStore, setStore } from '@/utils/store'
-export const useDownloadWs = () => {
+export const useGlobalWS = () => {
const store = useStore()
const loginUserInfo = computed(() => store.state.user.userInfo)
const downloadProgress = computed(() => store.state.common.downloadProgress)
let currentWebSocket = null
- function messageHandler(payload) {
- const {type,status,progress,download_url} = payload
+
+ // 下载进度处理
+ function downloadProcessing(payload) {
+ const {type,status,progress,download_url} = payload?.data || {}
let setProgress = 0
if (status === 'PENDING'){
setProgress = 1
@@ -29,7 +30,7 @@
...downloadProgress.value,
[type]: setProgress,
})
- if (status === 'COMPLETED' && ['htsjzx','htlsrwxq'].includes(type)) {
+ if (status === 'COMPLETED' && ['dpsjzx','dplsrwxq'].includes(type)) {
const name = `数据中心-${dayjs().format('YYYYMMDDHHmmss')}.zip`
const currentUrl = getStore({name: 'downloadUrl'})
if (currentUrl === download_url && download_url!== undefined) return
@@ -38,18 +39,42 @@
}
}
+ const logOut = () => {
+ store.commit('SET_THEME_NAME', '')
+ store.dispatch('LogOut').then(() => {
+ router.push({ path: '/login' })
+ setTimeout(() => location.reload())
+ })
+ }
+ function messageHandler(payload) {
+ switch (payload.biz_code) {
+ case 'JOB_ISREFRESH':
+ store.commit('jobUpdateKeyAdd')
+ break
+ case 'DEVICE_ISREFRESH':
+ store.commit('deviceUpdateKeyAdd')
+ break
+ case 'DOWNLOAD_PROGRESS':
+ downloadProcessing(payload)
+ break
+ case 'LOGOUT_USER':
+ logOut()
+ break
+ }
+ }
+
onMounted(() => {
let webSocketUrl = getWebsocketUrl() + `&model_type=3&workspace-id=${loginUserInfo.value.user_id}`
currentWebSocket = useConnectWebSocket((result)=>{
const payload = JSON.parse(result)
- messageHandler(payload.data)
+ messageHandler(payload)
}, webSocketUrl)
- EventBus.on('useDownloadWs-messageHandler',messageHandler)
+ EventBus.on('useGlobalWS-messageHandler',messageHandler)
})
onBeforeUnmount(() => {
currentWebSocket?.close()
- EventBus.off('useDownloadWs-messageHandler',messageHandler)
+ EventBus.off('useGlobalWS-messageHandler',messageHandler)
})
return {}
}
diff --git a/src/store/modules/common.js b/src/store/modules/common.js
index 46f4fb2..c12ef73 100644
--- a/src/store/modules/common.js
+++ b/src/store/modules/common.js
@@ -15,15 +15,27 @@
lockPasswd: getStore({ name: 'lockPasswd' }) || '',
website: website,
setting: website.setting,
+ deviceUpdateKey: 0, //设备刷新key
+ jobUpdateKey: 0, //任务刷新key
downloadProgress:{
htsjzx: 100, //数据中心
htlsrwxq: 100, //历史任务详情
- }
+ },
+ lastHeight: 0, // 获取最后一点高度
},
mutations: {
+ setLastHeight(state, data) {
+ state.lastHeight = data
+ },
setDownloadProgress(state, data) {
state.downloadProgress = data
},
+ deviceUpdateKeyAdd(state, data) {
+ state.deviceUpdateKey = state.deviceUpdateKey + 1
+ },
+ jobUpdateKeyAdd(state, data) {
+ state.jobUpdateKey = state.jobUpdateKey + 1
+ },
SET_LANGUAGE: (state, language) => {
state.language = language;
setStore({
diff --git a/src/views/dataCenter/components/searchData.vue b/src/views/dataCenter/components/searchData.vue
index 1445f58..bae886e 100644
--- a/src/views/dataCenter/components/searchData.vue
+++ b/src/views/dataCenter/components/searchData.vue
@@ -3,7 +3,7 @@
<el-form :model="searchForm" inline>
<div class="search-first">
<el-form-item label="行政区划:" >
- <el-tree-select
+ <el-tree-select
:disabled="viewDetailsDisabled"
popper-class="custom-tree-select"
v-model="searchForm.areaCode"
@@ -80,7 +80,7 @@
</el-form-item>
<el-form-item label="文件类别:">
<el-select
-
+
:disabled="disabled || foldersDisabled || viewDetailsDisabled"
:teleported="false"
v-model="searchForm.photoType"
@@ -283,7 +283,7 @@
machineData.value = '';
const droneList = await getDeviceRegion({ areaCode: data.id });
machineData.value = droneList?.data?.data;
-
+
// 默认选中值
if (signDevice_sn.value) {
searchForm.deviceSn = signDevice_sn.value;
@@ -292,7 +292,7 @@
deptData.value = [];
getDeptsByAreaCode();
handleSearch();
-
+
};
// 所属部门信息
const getDeptsByAreaCode = () => {
@@ -351,17 +351,17 @@
}
// 切换文件夹
const handleswitchFolders =()=>{
- emit('handleswitchFolders');
+ emit('handleswitchFolders');
}
// 返回按钮
const handleBack = ()=>{
- emit('handleBack');
+ emit('handleBack');
}
onMounted(() => {
requestDockInfo();
getDownloadStatusApi({type: 'htsjzx'}).then(res =>{
if (!['CANCELLED','COMPLETED'].includes(res.data.data?.status || 'COMPLETED')){
- EventBus.emit('useDownloadWs-messageHandler',res.data.data)
+ EventBus.emit('useGlobalWS-messageHandler',res.data.data)
}
})
});
diff --git a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
index 8749468..6b34eeb 100644
--- a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
+++ b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -264,14 +264,13 @@
const changeKey = inject('changeKey')
-// 轮询查询是否刷新
-const polling = setInterval(async () => {
- const res = await statusChangedApi()
- if (res.data.data.DEVICE_REFRESH || res.data.data.JOB_REFRESH) {
- getJobList()
- changeKey.value++
- }
-}, 4000)
+const jobUpdateKey = computed(() => store.state.common.jobUpdateKey)
+const deviceUpdateKey = computed(() => store.state.common.deviceUpdateKey)
+
+watch([jobUpdateKey,deviceUpdateKey],()=>{
+ getJobList()
+ changeKey.value++
+})
onBeforeUnmount(() => {
clearInterval(polling)
diff --git a/src/views/monitor/log/flightLog.vue b/src/views/monitor/log/flightLog.vue
index 161fa68..278a44b 100644
--- a/src/views/monitor/log/flightLog.vue
+++ b/src/views/monitor/log/flightLog.vue
@@ -4,38 +4,38 @@
<div class="ztzf-search-mange">
<el-form :model="params" inline>
<div class="search-contain">
- <div>
- <el-form-item label="任务名称:">
- <el-input v-model="params.jobName" placeholder="请输入任务名称" clearable />
- </el-form-item>
- <el-form-item label="任务编号:">
- <el-input v-model="params.jobInfoNum" placeholder="请输入任务编号" clearable />
- </el-form-item>
- <el-form-item label="日期:">
- <el-date-picker
- v-model="rangTime"
- type="daterange"
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- clearable
- @change="changeselect"
- />
- </el-form-item>
- </div>
- <div class="btns">
- <el-button type="primary" @click="getList" :icon="Search">搜索</el-button>
- <el-button @click="cancelSearch" :icon="Delete">清空</el-button>
- </div>
+ <!-- <div>-->
+ <el-form-item label="任务名称:">
+ <el-input v-model="params.jobName" placeholder="请输入任务名称" clearable />
+ </el-form-item>
+ <el-form-item label="任务编号:">
+ <el-input v-model="params.jobInfoNum" placeholder="请输入任务编号" clearable />
+ </el-form-item>
+ <el-form-item label="日期:">
+ <el-date-picker
+ v-model="rangTime"
+ type="daterange"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ clearable
+ @change="changeselect"
+ />
+ </el-form-item>
+ <!-- </div>-->
+ <!-- <div class="btns">-->
+ <el-button type="primary" @click="getList" :icon="Search">搜索</el-button>
+ <el-button @click="cancelSearch" :icon="Delete">清空</el-button>
+ <!-- </div>-->
</div>
</el-form>
</div>
<div class="mange-table">
-<!-- <el-tabs v-model="tabType" class="demo-tabs" @tab-click="handleTabClick">-->
-<!-- <el-tab-pane label="全部" name="全部"></el-tab-pane>-->
-<!-- <el-tab-pane label="我的收藏" name="收藏"></el-tab-pane>-->
-<!-- -->
-<!-- </el-tabs>-->
+ <!-- <el-tabs v-model="tabType" class="demo-tabs" @tab-click="handleTabClick">-->
+ <!-- <el-tab-pane label="全部" name="全部"></el-tab-pane>-->
+ <!-- <el-tab-pane label="我的收藏" name="收藏"></el-tab-pane>-->
+ <!-- -->
+ <!-- </el-tabs>-->
<el-table border :data="tableList" class="custom-header">
<el-table-column label="序号" type="index" width="60"></el-table-column>
<el-table-column prop="job_name" label="任务名称" align="center" show-overflow-tooltip></el-table-column>
@@ -52,26 +52,26 @@
{{ timeFormatConvert(scope.row.end_time) }}
</template>
</el-table-column>
-<!-- <el-table-column prop="end_time" label="标签" align="center">-->
-<!-- <template #default="scope">-->
-<!-- <el-select v-model="scope.row.label_id" @change="handleUpdateLabel(scope.row)" clearable>-->
-<!-- <el-option-->
-<!-- v-for="item in tagList"-->
-<!-- :key="item.id"-->
-<!-- :label="item.label_name"-->
-<!-- :value="item.id"-->
-<!-- ></el-option>-->
-<!-- </el-select>-->
-<!-- </template>-->
-<!-- </el-table-column>-->
+ <!-- <el-table-column prop="end_time" label="标签" align="center">-->
+ <!-- <template #default="scope">-->
+ <!-- <el-select v-model="scope.row.label_id" @change="handleUpdateLabel(scope.row)" clearable>-->
+ <!-- <el-option-->
+ <!-- v-for="item in tagList"-->
+ <!-- :key="item.id"-->
+ <!-- :label="item.label_name"-->
+ <!-- :value="item.id"-->
+ <!-- ></el-option>-->
+ <!-- </el-select>-->
+ <!-- </template>-->
+ <!-- </el-table-column>-->
<el-table-column label="操作" width="300" align="center">
<template #default="scope">
<el-button icon="el-icon-view" type="text" @click="handleDetail(scope.row)">查看</el-button>
<el-button icon="el-icon-view" type="text" @click="handleLineTrajectory(scope.row)">轨迹</el-button>
<el-button icon="el-icon-delete" type="text" @click="handleDelete(scope.row)">删除</el-button>
-<!-- <el-button type="text" @click="handleStar(scope.row)">-->
-<!-- <el-icon><Star /></el-icon>-->
-<!-- {{ scope.row.is_favorite ? '取消收藏':'收藏' }}</el-button>-->
+ <!-- <el-button type="text" @click="handleStar(scope.row)">-->
+ <!-- <el-icon><Star /></el-icon>-->
+ <!-- {{ scope.row.is_favorite ? '取消收藏':'收藏' }}</el-button>-->
<el-button type="text" @click="handleExport(scope.row)"><el-icon><Download /></el-icon>导出</el-button>
</template>
</el-table-column>
@@ -95,12 +95,12 @@
<el-table-column prop="elevation" label="实时真高" align="center"></el-table-column>
</el-table>
<template #footer>
- <div class="pagination dialog-footer" style="display: flex;justify-content: end;margin-top: 10px;">
- <el-pagination class="ztzf-pagination" popper-class="custom-pagination-dropdown" background
- :page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="detailParams.current"
- v-model:page-size="detailParams.size" layout="total, sizes, prev, pager, next, jumper" :total="detailTotal"
- @size-change="handleSizeChangeDetails" @current-change="handleCurrentChangeDetails" />
- </div>
+ <div class="pagination dialog-footer" style="display: flex;justify-content: end;margin-top: 10px;">
+ <el-pagination class="ztzf-pagination" popper-class="custom-pagination-dropdown" background
+ :page-sizes="[10, 20, 30, 40, 50, 100]" :size="size" v-model:current-page="detailParams.current"
+ v-model:page-size="detailParams.size" layout="total, sizes, prev, pager, next, jumper" :total="detailTotal"
+ @size-change="handleSizeChangeDetails" @current-change="handleCurrentChangeDetails" />
+ </div>
</template>
</el-dialog>
<el-dialog class="ztzf-dialog-mange" append-to-body v-model="isShowFlyMapView" title="查看" :width="pxToRem(1000)" :close-on-click-modal="false" :destroy-on-close="true">
@@ -307,7 +307,8 @@
Number(i.height)
]),
viewer,
- multiple: 10
+ multiple: 4.6,
+ pitch: -60
});
} else {
console.warn('No valid positions data');
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index 5f32d76..6576afb 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -138,7 +138,7 @@
<div class="search-bar-box-item search-btn">
<el-button type="primary" icon="el-icon-search" @click="handleSearch"
- >搜索</el-button
+ >搜索</el-button
>
<el-button icon="el-icon-refresh" @click="handleReset">清空</el-button>
</div>
@@ -178,10 +178,10 @@
type="primary"
icon="el-icon-plus"
@click="handleAdd"
- >新建工单</el-button
+ >新建工单</el-button
>
<el-button type="success" plain icon="el-icon-download" @click="exportData"
- >导出</el-button
+ >导出</el-button
>
</template>
@@ -193,7 +193,7 @@
type="text"
icon="el-icon-view"
@click="handleCheckDetail(row)"
- >审核</el-button
+ >审核</el-button
>
</template>
<!-- v-if="
@@ -207,42 +207,42 @@
icon="el-icon-warning"
v-if="hasRecallPaddingBtnPermission()"
@click="orderLogRecall(row.id)"
- >撤回</el-button
+ >撤回</el-button
>
<!-- <el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)">详情</el-button> -->
</template>
<!--已驳回-->
<template v-if="row.status == 2">
<el-button type="text" icon="el-icon-warning" @click="rejectDetail(row.id)"
- >驳回原因</el-button
+ >驳回原因</el-button
>
<el-button
v-if="userInfo.user_id == row.create_user"
type="text"
icon="el-icon-view"
@click="handleViewDetail(row)"
- >编辑</el-button
+ >编辑</el-button
>
<el-button v-else type="text" icon="el-icon-view" @click="handleViewDetail(row)"
- >详情</el-button
+ >详情</el-button
>
</template>
<!-- 已通过 -->
<template v-if="row.status == 3">
<el-button type="text" icon="el-icon-view" @click="handleViewDetail(row)"
- >详情</el-button
+ >详情</el-button
>
</template>
<!--草稿-->
<template v-if="row.status == 0">
<el-button type="text" icon="el-icon-edit" @click="handleViewDetail(row)"
- >编辑</el-button
+ >编辑</el-button
>
<el-button type="text" icon="el-icon-position" @click="userPublishPush(row.id)"
- >发布</el-button
+ >发布</el-button
>
<el-button type="text" icon="el-icon-delete" @click="deleteOrderLog(row.id)"
- >删除</el-button
+ >删除</el-button
>
</template>
</div>
@@ -281,7 +281,7 @@
></el-input>
</el-form-item>
</el-col>
- <el-col :span="12">
+ <el-col :span="6">
<el-form-item label="关联航线" prop="file_id">
<el-select
v-model="form.file_id"
@@ -298,15 +298,15 @@
</el-select>
</el-form-item>
</el-col>
-<!-- <el-col :span="6">-->
-<!-- <el-form-item label="安全返航真高" prop="rth_altitude">-->
-<!-- <el-input-number-->
-<!-- v-model="form.rth_altitude"-->
-<!-- :min="30"-->
-<!-- :max="300"-->
-<!-- ></el-input-number>-->
-<!-- </el-form-item>-->
-<!-- </el-col>-->
+ <el-col :span="6">
+ <el-form-item label="安全返航真高" prop="rth_altitude">
+ <el-input-number
+ v-model="form.rth_altitude"
+ :min="50"
+ :max="300"
+ ></el-input-number>
+ </el-form-item>
+ </el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
@@ -394,13 +394,13 @@
</el-col>
</el-row>
-<!-- <el-row>-->
-<!-- <div class="add-box-btns">-->
-<!-- <el-button type="danger" @click="submitForm(1)">发起</el-button>-->
-<!-- <el-button type="primary" @click="submitForm(0)">存草稿</el-button>-->
-<!-- <el-button @click="dialogVisible = false">取消</el-button>-->
-<!-- </div>-->
-<!-- </el-row>-->
+ <!-- <el-row>-->
+ <!-- <div class="add-box-btns">-->
+ <!-- <el-button type="danger" @click="submitForm(1)">发起</el-button>-->
+ <!-- <el-button type="primary" @click="submitForm(0)">存草稿</el-button>-->
+ <!-- <el-button @click="dialogVisible = false">取消</el-button>-->
+ <!-- </div>-->
+ <!-- </el-row>-->
</el-form>
<template #footer>
<div class="dialog-footer">
@@ -624,7 +624,7 @@
>驳回</el-button
>
</div>
- </template>
+ </template>
</el-dialog>
<!-- 工单详情 -->
@@ -800,34 +800,34 @@
</el-form>
<template #footer>
- <div class="dialog-footer">
- <el-button
- type="danger"
- v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
- @click="submitForm(1)"
- icon="el-icon-position"
- >发布</el-button
- >
- <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
- @click="submitForm(0)">保存</el-button> -->
+ <div class="dialog-footer">
+ <el-button
+ type="danger"
+ v-if="form.status == 0 || (form.status == 2 && userInfo.user_id == form.create_user)"
+ @click="submitForm(1)"
+ icon="el-icon-position"
+ >发布</el-button
+ >
+ <!-- <el-button type="primary" v-if="form.status == 0 || userInfo.user_id == form.create_user"
+ @click="submitForm(0)">保存</el-button> -->
- <el-button
- type="primary"
- v-if="form.status == 1 && hasPaddingBtnPermission()"
- @click="orderLogPass(form.id)"
- icon="el-icon-check"
- >通过</el-button
- >
- <el-button
- type="danger"
- v-if="form.status == 1 && hasRejectionBtnPermission()"
- @click="orderLogReject(form.id)"
- icon="el-icon-close"
- >驳回</el-button
- >
- <el-button @click="detailVisibleCopy = false" icon="el-icon-circle-close">取消</el-button>
- </div>
- </template>
+ <el-button
+ type="primary"
+ v-if="form.status == 1 && hasPaddingBtnPermission()"
+ @click="orderLogPass(form.id)"
+ icon="el-icon-check"
+ >通过</el-button
+ >
+ <el-button
+ type="danger"
+ v-if="form.status == 1 && hasRejectionBtnPermission()"
+ @click="orderLogReject(form.id)"
+ icon="el-icon-close"
+ >驳回</el-button
+ >
+ <el-button @click="detailVisibleCopy = false" icon="el-icon-circle-close">取消</el-button>
+ </div>
+ </template>
</el-dialog>
</basic-container>
</template>
@@ -848,7 +848,7 @@
} from '@/api/tickets/orderLog';
import { getTicketInfo } from '@/api/tickets/ticket';
import { getDictionaryByCode } from '@/api/system/dictbiz';
-import { getWaylineFileListByArea } from '@/api/resource/wayline';
+import { getWaylineFileListByArea, newGetWorkspacesPage } from '@/api/resource/wayline';
import { export_json_to_excel } from '@/utils/exportExcel';
import { getFlyingNestBy } from '@/api/device/device';
import { mapGetters } from 'vuex';
@@ -861,9 +861,13 @@
import weekday from 'dayjs/plugin/weekday';
import elTooltipCopy from '@/components/ElTooltipCopy.vue';
import { CircleClose, Promotion, Select } from '@element-plus/icons-vue';
-
+import { useStore } from 'vuex';
+import _ from 'lodash'
+// const store = useStore()
dayjs.extend(weekday);
dayjs.locale('zh-cn');
+
+// const lastHeight = computed(() => store.state.common.lastHeight)
export default {
components: { elTooltipCopy },
@@ -871,7 +875,7 @@
data() {
return {
activeTab: 'all',
-
+ getlastHeight: 0,
tabs: [
{ label: '全部工单', name: 'all', value: null, count: 0 },
{ label: '待审核', name: 'WAIT_AUDIT', value: 1, count: 0 },
@@ -913,7 +917,7 @@
indexLabel: '序号',
indexFixed: true,
- align: 'center',
+ align: 'left',
border: true,
stripe: false,
searchShow: true,
@@ -1095,6 +1099,10 @@
return CircleClose
},
...mapGetters(['userInfo', 'permission']),
+ lastHeight() {
+ const height = this.$store.state.common.lastHeight;
+ return Number(height) || 0; // 确保是数字类型
+ },
filteredTabs() {
// rejection_and_draft 权限控制“已驳回”和“草稿”tab
// console.log(this.permission, '权限信息')
@@ -1269,43 +1277,53 @@
return this.$message.warning('任务时间不能小于当前时间');
}
}
+ const maxItem = this.device_sns.reduce((max, item) => {
+ return item.drone_height > max.drone_height ? item : max;
+ });
+ console.log(maxItem, '高度')
+ let result = _.round((maxItem.drone_height + this.form.rth_altitude), 2)
- const submitData = {
- ...this.form,
- status: status,
- ai_types: this.form.ai_types?.length ? this.form.ai_types : [],
- };
- // 判断该值this.form.date_range[0] 周几 和rep_fre_type 是不是相等
- // if (this.form.deal_time) {
- // const weekday = dayjs(this.form.date_range[0]).format('dddd');
- // console.log('444', weekday)
- // // form.rep_fre_type
- // const now = new Date()
- // const today = now.toDateString()
- // const selectedDate = new Date(this.form.date_range[0]).toDateString()
+ if (this.lastHeight > result) {
+ this.$confirm(`安全返航真高${result}米低于航线返航点高度${this.lastHeight}米,为确保返航路径安全,建议您进行调整后再发布`, '提示', {
+ confirmButtonText: '确定',
+ cancelButtonText: '取消',
+ type: 'warning'
+ }).then(async () => {
+ const submitData = {
+ ...this.form,
+ status: status,
+ ai_types: this.form.ai_types?.length ? this.form.ai_types : [],
+ };
+ await saveUpdateOrderLog(submitData);
+ let id = this.form.id;
+ if (id) {
+ this.$message.success('工单发布成功');
+ } else {
+ this.$message.success('工单创建成功');
+ }
+ this.dialogVisible = false;
+ this.detailVisible = false;
+ (this.device_sns = []), (this.wayLineList = []), this.fetchTableData();
+ }).catch(() => {
- // if (today === selectedDate) {
- // const [hours, minutes] = this.form.deal_time.split(':')
- // const selectedTime = new Date()
- // selectedTime.setHours(parseInt(hours), parseInt(minutes))
-
- // if (selectedTime < now) {
- // return this.$message.warning('任务时间不能小于当前时间')
-
- // }
- // }
- // }
-
- await saveUpdateOrderLog(submitData);
- let id = this.form.id;
- if (id) {
- this.$message.success('工单发布成功');
+ });
} else {
- this.$message.success('工单创建成功');
+ const submitData = {
+ ...this.form,
+ status: status,
+ ai_types: this.form.ai_types?.length ? this.form.ai_types : [],
+ };
+ await saveUpdateOrderLog(submitData);
+ let id = this.form.id;
+ if (id) {
+ this.$message.success('工单发布成功');
+ } else {
+ this.$message.success('工单创建成功');
+ }
+ this.dialogVisible = false;
+ this.detailVisible = false;
+ (this.device_sns = []), (this.wayLineList = []), this.fetchTableData();
}
- this.dialogVisible = false;
- this.detailVisible = false;
- (this.device_sns = []), (this.wayLineList = []), this.fetchTableData();
}
});
},
@@ -1411,6 +1429,7 @@
handleAdd() {
this.form = {};
+ this.form.rth_altitude = 120;
this.dialogVisible = true;
this.$nextTick(() => {
@@ -1573,8 +1592,15 @@
},
//获取航线列表
async asyncgetWaylineFileListByArea(name) {
- var wayLineListResponse = await getWaylineFileListByArea(this.userInfo.detail.areaCode);
- this.wayLineList = wayLineListResponse.data.data;
+ const formData = {
+ name: '',
+ waylineType: undefined,
+ current: 1,
+ size: 99999999,
+ descs: 'update_time',
+ }
+ var wayLineListResponse = await newGetWorkspacesPage(formData);
+ this.wayLineList = wayLineListResponse.data.data.records
this.initMapLine();
},
@@ -1608,10 +1634,9 @@
this.initMapLine({}, async polygon => {
const currentLine = that.wayLineList.find(item => item.wayline_id === waylineId);
-
//按照航线来
const params = {
- type: [2, 4, 5].includes(currentLine.wayline_type) ? 2 : 0,
+ type: ['2', '4', '5'].includes(currentLine.wayline_type) ? 2 : 0,
wayline_id: waylineId,
polygon,
};
@@ -1670,8 +1695,11 @@
});
},
},
-
watch: {
+ // lastHeight(newVal, oldVal) {
+ // console.log('lastHeight', newVal, oldVal);
+ // this.getlastHeight = newVal;
+ // },
tableData: {
handler() {
// this.updateTabCounts()
--
Gitblit v1.9.3