From 33cfed5a732ae6eb75ec82eb163557e112beb44a Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Mon, 21 Jul 2025 17:25:19 +0800
Subject: [PATCH] Merge branch 'dev' of http://139.196.74.78:10010/r/drone/drone-web-manage into dev
---
src/views/dataCenter/components/searchData.vue | 7 ++
src/store/modules/user.js | 20 ++++++
src/views/dataCenter/dataCenter.vue | 73 ++++++++++++++++-------
src/page/index/top/index.vue | 2
src/assets/images/dataCenter/videoplay.png | 0
src/views/wel/components/flightStatistics.vue | 5 -
src/assets/images/dataCenter/positionicon.png | 0
src/views/wel/components/backlog.vue | 55 +++++++++++------
8 files changed, 111 insertions(+), 51 deletions(-)
diff --git a/src/assets/images/dataCenter/positionicon.png b/src/assets/images/dataCenter/positionicon.png
new file mode 100644
index 0000000..3890f49
--- /dev/null
+++ b/src/assets/images/dataCenter/positionicon.png
Binary files differ
diff --git a/src/assets/images/dataCenter/videoplay.png b/src/assets/images/dataCenter/videoplay.png
new file mode 100644
index 0000000..f308783
--- /dev/null
+++ b/src/assets/images/dataCenter/videoplay.png
Binary files differ
diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue
index d3c1d93..c2a7440 100644
--- a/src/page/index/top/index.vue
+++ b/src/page/index/top/index.vue
@@ -103,10 +103,8 @@
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
const env = import.meta.env.VITE_APP_ENV
- console.log(env);
const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
env === 'development' ? this.$router.push({ path: '/login' }):window.location.replace(`${adminUrl}#/login`)
-
})
})
},
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index f22a79e..2750ef4 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -27,6 +27,7 @@
import { encrypt } from '@/utils/sm2';
import md5 from 'js-md5';
+
const user = {
state: {
tenantId: getStore({ name: 'tenantId' }) || '',
@@ -269,16 +270,31 @@
});
},
GetMenu({ commit, dispatch }, tenantId) {
+ const errLogOut = () => {
+ dispatch('LogOut').then(()=>{
+ const env = import.meta.env.VITE_APP_ENV
+ const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
+ env === 'development'
+ ? window.location.href = "/manage/login"
+ : window.location.replace(`${adminUrl}#/login`)
+ })
+ }
return new Promise(resolve => {
getRoutes(tenantId).then(res => {
const data = res.data.data;
let menu = deepClone(data);
- menu?.forEach(ele => formatPath(ele, true));
+ if (!res.data?.data?.length){
+ errLogOut()
+ return
+ }
+ menu.forEach(ele => formatPath(ele, true));
commit('SET_MENU', menu);
commit('SET_MENU_ALL', menu);
dispatch('GetButtons');
resolve(menu);
- });
+ }).catch(err =>{
+ errLogOut()
+ })
});
},
GetButtons({ commit }) {
diff --git a/src/views/dataCenter/components/searchData.vue b/src/views/dataCenter/components/searchData.vue
index 8905217..301e868 100644
--- a/src/views/dataCenter/components/searchData.vue
+++ b/src/views/dataCenter/components/searchData.vue
@@ -79,6 +79,7 @@
v-model="searchForm.photoType"
placeholder="请选择"
clearable
+ @clear="changePhotoType"
>
<el-option
v-for="item in CategoryOption"
@@ -193,7 +194,11 @@
},
{ deep: true }
);
-
+const changePhotoType =(val)=>{
+if(val === undefined){
+ searchForm.photoType = ''
+}
+}
// 部门
let deptTreeData = ref([]);
// 机巢
diff --git a/src/views/dataCenter/dataCenter.vue b/src/views/dataCenter/dataCenter.vue
index c12fd85..4acc33f 100644
--- a/src/views/dataCenter/dataCenter.vue
+++ b/src/views/dataCenter/dataCenter.vue
@@ -13,7 +13,6 @@
<el-table
v-loading="loadings"
element-loading-text="加载中"
- stripe
:data="tableData"
class="custom-header"
@selection-change="handleSelectionChange"
@@ -45,13 +44,21 @@
:src="scope.row?.smallUrl"
alt=""
/>
- <img
- v-else-if="scope.row?.resultType === 1"
- :src="convertVideoUrlToThumbnail(scope.row?.link)"
- alt=""
- class="imageBox"
- @click="enterFullScreen(scope.row)"
- />
+ <!-- 视频 -->
+ <div v-else-if="scope.row?.resultType === 1" class="videoItem1">
+ <img
+ :src="convertVideoUrlToThumbnail(scope.row?.link)"
+ alt=""
+ class="imageBox"
+ @click="enterFullScreen(scope.row)"
+ />
+ <img
+ class="playBox"
+ @click="enterFullScreen(scope.row)"
+ src="@/assets/images/dataCenter/videoplay.png"
+ alt=""
+ />
+ </div>
<!-- 正射 -->
<el-image
v-else-if="scope.row?.resultType === 4"
@@ -71,7 +78,7 @@
</el-table-column>
<el-table-column prop="jobTime" label="任务时间" />
<el-table-column property="photoType" label="文件类别">
- <template #default="scope">
+ <template #default="scope">
<span>{{
photoTypeMap[scope.row.photoType] ? photoTypeMap[scope.row.photoType] : '--'
}}</span>
@@ -82,21 +89,24 @@
<span>{{ resultTypeMap[row?.resultType] }}</span>
</template>
</el-table-column>
- <el-table-column label="操作" width="150" align="center">
+ <el-table-column label="操作" width="200" align="center">
<template #default="scope">
- <span class="look" @click="lookDetail(scope.row)">查看</span>
- <span
- class="delete"
- @click="deleteDetail(scope.row)"
- v-if="scope.row.resultType !== 2"
- >删除</span
+ <el-button icon="el-icon-view" type="text" @click="lookDetail(scope.row)"
+ >查看</el-button
>
-
- <span
- class="location"
- @click="positionDetail(scope.row)"
+ <el-button
+ v-if="scope.row.resultType !== 2"
+ icon="el-icon-delete"
+ type="text"
+ @click="deleteDetail(scope.row)"
+ >删除</el-button
+ >
+ <el-button
v-if="shouldShowLocation(scope.row)"
- >定位</span
+ type="text"
+ @click="positionDetail(scope.row)"
+ >
+ <img :src="positionicon" class="custom-icon" />定位</el-button
>
</template>
</el-table-column>
@@ -258,6 +268,8 @@
</template>
<script setup>
+import videoplay from '@/assets/images/dataCenter/videoplay.png';
+import positionicon from '@/assets/images/dataCenter/positionicon.png';
import { useStore } from 'vuex';
import { PublicCesium } from '@/utils/cesium/publicCesium';
import { Cartesian3 } from 'cesium';
@@ -730,7 +742,12 @@
cursor: pointer;
margin-right: 10px;
}
-
+ .custom-icon {
+ width: 14px;
+ height: 14px;
+ margin-right: 5px;
+ vertical-align: middle;
+ }
.delete {
color: #ff241c;
margin-right: 10px;
@@ -756,7 +773,17 @@
width: 76px;
height: 72px;
}
-
+ .videoItem1 {
+ .playBox {
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ top: 46%;
+ left: 43%;
+ transform: translate(-50%, -50%);
+ cursor: pointer;
+ }
+ }
.videoDialog :deep(.el-dialog) {
height: 600px;
width: 54%;
diff --git a/src/views/wel/components/backlog.vue b/src/views/wel/components/backlog.vue
index 19ad663..9c52e74 100644
--- a/src/views/wel/components/backlog.vue
+++ b/src/views/wel/components/backlog.vue
@@ -9,13 +9,13 @@
<div>
{{ item.name }}
<div class="dots">{{ item.number >= 100 ? '99+' : item.number }}</div>
- <!-- <div class="dots">99+</div> -->
+
</div>
</div>
</div>
</div>
- <div class="todo-items" v-if="todos.length > 0" v-loading="loading">
+ <div class="todo-items" v-if="todos.length > 0" v-loading="loading" element-loading-background="rgba(255, 255, 255, 0.5)">
<div v-for="(item, index) in todos" :key="index" class="todo-item" :style="getStatusStyle(item.status)"
@click="jumporder(item)">
<div class="status-indicator"><img :src="getStatus(item.status)" alt=""></div>
@@ -65,6 +65,10 @@
const store = useStore()
const permission = computed(() => store.getters.permission)
const checked = ref('事件工单')
+const todosCache = reactive({
+ '事件工单': [],
+ '智飞工单': []
+})
const titleList = ref([
{
label: 'event_order_count',
@@ -77,11 +81,11 @@
number: 0,
},
])
-const titleClick = (item, index) => {
- checked.value = item.name
- getListMatter()
-}
+const titleClick = async (item, index) => {
+ checked.value = item.name
+ await getListMatter()
+}
const userInfo = computed(() => store.getters.userInfo)
const todos = ref([])
const loading = ref(false)
@@ -203,24 +207,25 @@
})
}
// 获取事件工单或者智飞工单的信息
+
const getListMatter = async () => {
- if (checked.value === '事件工单') {
- loading.value = true
- const type = 1
+ loading.value = true
+ const type = checked.value === '事件工单' ? 1 : 2
+
+ // 使用缓存数据
+ if (todosCache[checked.value].length > 0) {
+ todos.value = todosCache[checked.value]
+ }
+
+ try {
const res = await getOrderOrEventApi(type, userInfo.value.detail.areaCode)
- todos.value = res.data.data || []
+ const data = res.data.data || []
+ todos.value = data
+ todosCache[checked.value] = data
+ } finally {
loading.value = false
- // console.log('事件工单', todos.value);
- } else if (checked.value === '智飞工单') {
- loading.value = true
- const type = 2
- const res = await getOrderOrEventApi(type, userInfo.value.detail.areaCode)
- todos.value = res.data.data || []
- loading.value = false
- // console.log('智飞工单', todos.value);
}
}
-
onMounted(() => {
getListMatter()
getOrderCount()
@@ -313,12 +318,19 @@
.todo-items {
margin-top: 10px;
- // height: 250px;
+ transition: opacity 0.3s ease;
height: pxToVh(250);
overflow-y: scroll;
+ &:empty {
+ display: none;
+ }
}
.todo-item {
+ transition:
+ transform 0.2s ease,
+ box-shadow 0.2s ease,
+ opacity 0.3s ease;
margin: 6px 0;
display: flex;
align-items: center;
@@ -415,5 +427,8 @@
font-size: 14px;
color: #7c8091;
}
+ .el-empty {
+ transition: opacity 0.3s ease;
+}
}
</style>
diff --git a/src/views/wel/components/flightStatistics.vue b/src/views/wel/components/flightStatistics.vue
index c6fe262..3d324ac 100644
--- a/src/views/wel/components/flightStatistics.vue
+++ b/src/views/wel/components/flightStatistics.vue
@@ -89,8 +89,7 @@
const getFlyTimeList = () => {
getFlyTime(params.value).then(res => {
const resList = res?.data?.data || [];
- console.log('飞行',resList);
-
+
lineCharts(resList);
});
};
@@ -177,7 +176,7 @@
},
},
axisLabel: {
- interval: 0,
+ // interval: 0,
color: '#383838',
},
},
--
Gitblit v1.9.3