From 94a9f095a40b11baf1721af752f0849ad1edbe1b Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Tue, 15 Jul 2025 16:07:54 +0800
Subject: [PATCH] Merge branch 'prod' into dev
---
src/permission.js | 12
src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue | 4
src/views/tickets/ticket.vue | 36 +
src/views/wel/components/statistics.vue | 2
src/views/wel/index.vue | 6
src/assets/images/task/zxz.png | 0
src/views/job/components/TaskTop/TaskEvent.vue | 4
src/page/index/top/top-qna.vue | 43 +
src/views/device/components/devicePerShare.vue | 210 ++++-----
src/option/job/jobinfo.js | 7
src/views/device/airport.vue | 16
src/styles/element-ui.scss | 77 ++-
src/assets/images/task/qxzx.png | 0
src/views/job/components/SearchBox.vue | 3
src/views/job/components/TaskTop/TaskTotal.vue | 4
src/views/tickets/orderLog.vue | 68 ++
src/views/dataCenter/dataCenter.vue | 657 +++++++++++++++++-------------
src/views/dataCenter/components/dataCenterMap.vue | 21
.env.production | 16
src/page/index/top/index.vue | 4
src/views/algorithmRepository/algorithmRepository.vue | 22
src/axios.js | 16
22 files changed, 708 insertions(+), 520 deletions(-)
diff --git a/.env.production b/.env.production
index 1ea1b71..184ae38 100644
--- a/.env.production
+++ b/.env.production
@@ -1,3 +1,13 @@
+###
+ # @Author : yuan
+ # @Date : 2025-06-26 15:18:36
+ # @LastEditors : yuan
+ # @LastEditTime : 2025-07-01 16:34:42
+ # @FilePath : \.env.production
+ # @Description :
+ # Copyright 2025 OBKoro1, All Rights Reserved.
+ # 2025-06-26 15:18:36
+###
NODE_ENV = 'production'
#生产环境配置
@@ -34,3 +44,9 @@
# 是否在打包时开启压缩,支持 gzip 和 brotli
VITE_BUILD_COMPRESS = gzip
+
+#页面基础路径
+# VITE_APP_BASE_COMMAND = /drone-web-manage/
+#天地图token 浏览器端口
+VITE_APP_TDT_TOKEN = e110584a27d506da2740edca951683f4
+VITE_APP_CESIUM_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJkYTZlNGNlYS01NTU1LTQ1MGEtYmNlZS0yNTE2NDk5YWM2MjEiLCJpZCI6MTc5Njk2LCJpYXQiOjE3MDA1NDcwMjV9.qcl4AH2731cfFd0-I1ZLUINPXqvglLkDFD-UGR2zU5M
diff --git a/src/assets/images/task/qxzx.png b/src/assets/images/task/qxzx.png
index 221f66f..b3cf5b0 100644
--- a/src/assets/images/task/qxzx.png
+++ b/src/assets/images/task/qxzx.png
Binary files differ
diff --git a/src/assets/images/task/zxz.png b/src/assets/images/task/zxz.png
index 7081996..2390bdf 100644
--- a/src/assets/images/task/zxz.png
+++ b/src/assets/images/task/zxz.png
Binary files differ
diff --git a/src/axios.js b/src/axios.js
index 979b7c0..d9ad49d 100644
--- a/src/axios.js
+++ b/src/axios.js
@@ -34,7 +34,7 @@
baseUrl
} from '@/config/env';
import crypto from '@/utils/crypto';
-
+const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
// 全局未授权错误提示状态,只提示一次
let isErrorShown = false;
@@ -170,9 +170,10 @@
removeToken();
removeRefreshToken();
// 重定向到登录页
- store.dispatch('FedLogOut').then(() => router.push({
- path: '/login'
- }));
+ // store.dispatch('FedLogOut').then(() => router.push({
+ // path: '/login'
+ // }));
+ store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
return Promise.reject(new Error(message));
});
}
@@ -190,9 +191,10 @@
removeToken();
removeRefreshToken();
// 重定向到登录页
- store.dispatch('FedLogOut').then(() => router.push({
- path: '/login'
- }));
+ // store.dispatch('FedLogOut').then(() => router.push({
+ // path: '/login'
+ // }));
+ store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
return Promise.reject(new Error(message));
}
// 如果请求为oauth2错误码则首次报错时提示
diff --git a/src/option/job/jobinfo.js b/src/option/job/jobinfo.js
index ec35b22..369bcf4 100644
--- a/src/option/job/jobinfo.js
+++ b/src/option/job/jobinfo.js
@@ -145,6 +145,7 @@
},
search: true,
display: false,
+ showOverflowTooltip: true,
},
{
label: '任务ID',
@@ -153,6 +154,7 @@
search: true,
width: 80,
display: false,
+ showOverflowTooltip: true,
},
{
label: '任务名称',
@@ -161,6 +163,7 @@
search: true,
width: 200,
display: false,
+ showOverflowTooltip: true,
},
{
label: '定时信息',
@@ -177,6 +180,7 @@
],
width: 120,
display: false,
+ showOverflowTooltip: true,
},
{
label: '执行类型',
@@ -193,6 +197,7 @@
],
width: 110,
display: false,
+ showOverflowTooltip: true,
},
{
label: '处理器类型',
@@ -209,6 +214,7 @@
],
width: 180,
display: false,
+ showOverflowTooltip: true,
},
{
label: '任务状态',
@@ -219,6 +225,7 @@
slot: true,
width: 100,
display: false,
+ showOverflowTooltip: true,
},
],
group: [
diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue
index dcdcb8d..9026c9a 100644
--- a/src/page/index/top/index.vue
+++ b/src/page/index/top/index.vue
@@ -102,7 +102,9 @@
type: 'warning',
}).then(() => {
this.$store.dispatch('LogOut').then(() => {
- this.$router.push({ path: '/login' })
+ // this.$router.push({ path: '/login' })
+ const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
+ window.location.replace(`${adminUrl}#/login`)
})
})
},
diff --git a/src/page/index/top/top-qna.vue b/src/page/index/top/top-qna.vue
index 9430a53..5c5b028 100644
--- a/src/page/index/top/top-qna.vue
+++ b/src/page/index/top/top-qna.vue
@@ -1,7 +1,10 @@
<template>
<div class="top-qna">
<el-dropdown @command="dropdownClick">
- <img alt="" src="@/assets/images/helpCenter/helpIcon.png" />
+ <!-- <img class="help-icon" alt="" src="@/assets/images/helpCenter/helpIcon.png" /> -->
+ <el-icon class="help-icon" color="#707070" size="17">
+ <QuestionFilled />
+ </el-icon>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="guide">入门指南</el-dropdown-item>
@@ -19,7 +22,7 @@
const router = useRouter();
const systemupdateFilePath = ref(null);
const rumenPath = ref(null);
-const fileData = ref([]); // 存储所有文件数据
+const fileData = ref([]);
const loading = ref(false);
const getlistDataAPI = async () => {
loading.value = true;
@@ -27,21 +30,19 @@
const res = await listDataAPI();
if (res.data.code === 200 && res.data.data) {
fileData.value = res.data.data;
-
- // 使用 find 方法查找特定条目
- const systemUpdateItem = res.data.data.find(item => item.id === 4);
- const rumenItem = res.data.data.find(item => item.id === 2);
-
+ const systemUpdateItem = res.data.data.find(item => item.id === 4); //系统更新
+ const rumenItem = res.data.data.find(item => item.id === 2); //入门指南
+
if (systemUpdateItem) {
systemupdateFilePath.value = systemUpdateItem.filePath;
} else {
- console.warn('未找到系统更新条目');
+ console.warn('暂无系统更新');
}
-
+
if (rumenItem) {
rumenPath.value = rumenItem.filePath;
} else {
- console.warn('未找到入门指南条目');
+ console.warn('暂无入门指南');
}
} else {
ElMessage.error('获取帮助数据失败');
@@ -54,23 +55,24 @@
}
};
const dropdownClick = val => {
- // 确保数据已加载
if (loading.value) {
ElMessage.warning('数据正在加载,请稍后');
return;
}
-
+
if (val === 'guide') {
if (!rumenPath.value) {
- ElMessage.warning('入门指南文件未找到');
+ ElMessage.warning('暂无入门指南文件');
return;
}
- window.open(rumenPath.value, '_blank');
+ window.open(rumenPath.value, '_blank');
} else if (val === 'systemupdate') {
- window.open(systemupdateFilePath.value, '_blank');
-
-
+ if (!systemupdateFilePath.value) {
+ ElMessage.warning('暂无系统更新文件');
+ return;
+ }
+ window.open(systemupdateFilePath.value, '_blank');
}
};
@@ -86,5 +88,12 @@
font-size: 18px;
justify-content: center;
cursor: pointer;
+ .help-icon {
+ width: 25px;
+ height: 25px;
+ }
+ .theme-white .el-dropdown {
+ color: none !important;
+ }
}
</style>
diff --git a/src/permission.js b/src/permission.js
index f12dc4e..5272458 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -18,7 +18,7 @@
NProgress.configure({ showSpinner: false })
const lockPage = '/lock' //锁屏页
const urlParams = getUrlParams(window.location.href)
-
+const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL
function findRouteByPath (routes, targetPath) {
// 遍历数组中的每个路由对象
for (const route of routes) {
@@ -93,9 +93,10 @@
} else {
const systemToken = store.getters.token || urlParams?.token
if (systemToken === 0) {
- store.dispatch('FedLogOut').then(() => {
- next({ path: '/login' })
- })
+ // store.dispatch('FedLogOut').then(() => {
+ // next({ path: '/login' })
+ // })
+ store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
} else {
const meta = to.meta || {}
const query = to.query || {}
@@ -120,7 +121,8 @@
if (meta.isAuth === false) {
next()
} else {
- next('/login')
+ // next('/login')
+ window.location.replace(`${adminUrl}#/login`)
}
}
})
diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
index a9a7ece..47078bb 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -31,12 +31,20 @@
padding: 0 !important;
}
-.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover {
+.el-dropdown-menu__item--divided:before,
+.el-menu,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
+.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover {
background-color: transparent;
}
-.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover {
+.el-dropdown-menu__item--divided:before,
+.el-menu,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
+.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover {
background-color: transparent !important;
}
@@ -49,11 +57,13 @@
background-color: transparent;
}
-.el-button.is-text:not(.is-disabled):focus, .el-button.is-text:not(.is-disabled):hover {
+.el-button.is-text:not(.is-disabled):focus,
+.el-button.is-text:not(.is-disabled):hover {
background-color: transparent;
}
-.avue-icon i, .avue-icon svg {
+.avue-icon i,
+.avue-icon svg {
line-height: 20px;
}
@@ -66,36 +76,43 @@
justify-content: space-between;
.el-dialog {
- position: relative;
- padding: 0;
+ position: relative;
+ padding: 0;
+ overflow: hidden;
+
+ .el-dialog__body {
+ width: 100%;
+ height: 100%;
+
+ iframe {
+ width: 100%;
+ height: 100%;
+ }
+ }
+
+ .el-dialog__header {
+ height: 0;
overflow: hidden;
+ padding: 0;
- .el-dialog__body {
- width: 100%;
- height: 100%;
+ .el-dialog__headerbtn {
+ position: absolute;
+ left: 0;
+ top: 14px;
- iframe {
- width: 100%;
- height: 100%;
- }
+ .el-dialog__close {
+ color: #fff;
+ font-size: 35px;
+ z-index: 99;
+ }
}
+ }
+ }
+}
- .el-dialog__header {
- height: 0;
- overflow: hidden;
- padding: 0;
-
- .el-dialog__headerbtn {
- position: absolute;
- left: 0;
- top: 14px;
-
- .el-dialog__close {
- color: #fff;
- font-size: 35px;
- z-index: 99;
- }
- }
- }
+.ztzf-drawer-body-basic-container {
+ .el-drawer__body {
+ display: flex;
+ flex-direction: column;
}
}
\ No newline at end of file
diff --git a/src/views/algorithmRepository/algorithmRepository.vue b/src/views/algorithmRepository/algorithmRepository.vue
index ce3583e..ad3ee3a 100644
--- a/src/views/algorithmRepository/algorithmRepository.vue
+++ b/src/views/algorithmRepository/algorithmRepository.vue
@@ -42,7 +42,10 @@
v-model="taskData"
placeholder="请选择日期"
@change="changeselect"
+ clearable
+
/>
+ <!-- @clear="handleDateClear" -->
</div>
<div class="item">
<div class="itemchild">机巢查询:</div>
@@ -70,7 +73,7 @@
ref="imageRef"
:src="getSmallImg(item.url)"
show-progress
- :preview-src-list="detailData.map(i => i.url)"
+ :preview-src-list="[getShowImg(item.url)]"
fit="cover"
/>
@@ -107,7 +110,7 @@
import { getDictionaryByCode } from '@/api/system/dictbiz';
import { getalgorithmList, selectDeviceList } from '@/api/algorithm';
-import { getSmallImg } from '@/utils/util';
+import { getSmallImg,getShowImg } from '@/utils/util';
import { useRouter } from 'vue-router';
const router = useRouter();
const baseUrl = import.meta.env.VITE_APP_PICTURE_URL;
@@ -181,19 +184,31 @@
params.value.start_date = taskData.value.length ? `${taskData.value[0]} 00:00:00` : null;
params.value.end_date = taskData.value.length ? `${taskData.value[1]} 23:59:59` : null;
};
-const handleSearch = () => {
+// 处理日期清空
+const handleDateClear = () => {
+ taskData.value = ''; // 清空绑定的日期数据
+ params.value.start_date = null; // 重置开始日期参数
+ params.value.end_date = null; // 重置结束日期参数
getList();
};
+const handleSearch = () => {
+ getList();
+
+};
const handleReset = () => {
+taskData.value =''
params.value.start_date = null;
params.value.end_date = null;
params.value.device_name = '';
params.value.name = '';
getList();
+
};
const goback = () => {
showDetail.value = false;
activeItem.value = null;
+ params.value.current =1
+ params.value.size=15
};
// 分页大小改变
const handleSizeChange = val => {
@@ -244,6 +259,7 @@
&:hover {
background: url('/src/assets/images/ht-sfbg-hover.png') no-repeat center;
background-size: 100% 100%;
+ cursor: pointer;
}
&.active-bg {
background: url('/src/assets/images/ht-sfbg-click.png') no-repeat center;
diff --git a/src/views/dataCenter/components/dataCenterMap.vue b/src/views/dataCenter/components/dataCenterMap.vue
index 39930fd..cc787c7 100644
--- a/src/views/dataCenter/components/dataCenterMap.vue
+++ b/src/views/dataCenter/components/dataCenterMap.vue
@@ -111,13 +111,11 @@
restoreAllIcons();
if (currentClickEntity.billboard) {
const status = currentClickEntity?.properties?._customData?._value?.data.status;
- console.log('stayus', currentClickEntity?.properties?._customData?._value?.data);
currentClickEntity.billboard.image =
status === 1 || status === null ? activeIcon : getEventActiveImage(status);
currentClickEntity.billboard.scale = 1; // 可选缩放效果
activeEntity.value = currentClickEntity;
}
-
removeLabel();
viewer.scene.postRender.addEventListener(labelBoxUpdate);
};
@@ -128,7 +126,6 @@
handler = new Cesium.ScreenSpaceEventHandler(viewer?.scene.canvas);
handler.setInputAction(singleMachineEvent, Cesium.ScreenSpaceEventType.LEFT_CLICK);
};
-
// 清除所有数据点实体
const clearDataPoints = () => {
if (!viewer) return;
@@ -138,7 +135,6 @@
dataPointEntities.value = [];
activeEntity.value = null;
};
-
const removeHandler = () => {
handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
handler?.destroy();
@@ -147,11 +143,7 @@
const renderDataPoint = mapList => {
if (!viewer || !mapList?.length) return;
-
- // 清除旧实体
clearDataPoints();
-
- // 添加新实体
mapList.forEach((item, index) => {
const entity = viewer?.entities.add({
id: `dataCenter-point-${index}-${Date.now()}`,
@@ -210,12 +202,9 @@
viewerRef.value = viewer;
isViewerReady.value = true;
-
// 初始化事件处理器
handlerInit();
isMapInitialized.value = true;
- console.log('地图初始化完成');
- // 初始化后立即渲染已有数据
if (dataPointList.value.length > 0) {
renderDataPoint(dataPointList.value);
}
@@ -243,9 +232,7 @@
try {
const res = await getMapInfoAPI(ids);
dataPointList.value = res.data.data || [];
- console.log('dataPointList.value', dataPointList.value);
-
- // 确保地图已初始化后再渲染
+
if (isMapInitialized.value && viewer) {
renderDataPoint(dataPointList.value);
}
@@ -255,13 +242,7 @@
};
const isViewerReady = ref(false);
-/**
- * 初始化标注添加
- * @param data 数据
- */
const initEntityOrPopup = data => {
- console.log('data', data);
-
//地图点在范围内
watch(
() => isMapInitialized.value,
diff --git a/src/views/dataCenter/dataCenter.vue b/src/views/dataCenter/dataCenter.vue
index f7db4ec..c12fd85 100644
--- a/src/views/dataCenter/dataCenter.vue
+++ b/src/views/dataCenter/dataCenter.vue
@@ -1,12 +1,23 @@
<template>
<div
- class="manage-m-all-10 manage-m-t-0 manage-p-all-20 manage-h-0 manage-flex-1 manage-flex manage-f-d-c manage-b-r-5 manage-b-c-w">
+ class="manage-m-all-10 manage-m-t-0 manage-p-all-20 manage-h-0 manage-flex-1 manage-flex manage-f-d-c manage-b-r-5 manage-b-c-w"
+ >
<div class="dataCenter-table">
- <searchData @search="searchClick" @downFun="downloadFile" @allDownFun="aLLDownloadFile"></searchData>
+ <searchData
+ @search="searchClick"
+ @downFun="downloadFile"
+ @allDownFun="aLLDownloadFile"
+ ></searchData>
<!-- 表格部分 -->
<div class="dataTable">
- <el-table v-loading="loadings" element-loading-text="加载中" stripe :data="tableData" class="custom-header"
- @selection-change="handleSelectionChange">
+ <el-table
+ v-loading="loadings"
+ element-loading-text="加载中"
+ stripe
+ :data="tableData"
+ class="custom-header"
+ @selection-change="handleSelectionChange"
+ >
<el-table-column type="selection" width="55" />
<el-table-column label="序号" type="index" width="60">
<template #default="{ $index }">
@@ -25,25 +36,45 @@
<el-table-column property="nestName" label="所属机巢" />
<el-table-column property="jobName" label="任务名称" show-overflow-tooltip />
<el-table-column prop="nickName" label="文件名称" show-overflow-tooltip />
- <el-table-column property="link" label="缩图" width="120">
+ <el-table-column property="link" label="缩略图" width="120">
<template #default="scope">
- <img class="quanjing" @click="clickpanorama(scope.row)" v-if="scope.row?.resultType === 5"
- :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)" />
+ <img
+ class="quanjing"
+ @click="clickpanorama(scope.row)"
+ v-if="scope.row?.resultType === 5"
+ :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)"
+ />
<!-- 正射 -->
- <!-- <img v-else-if="scope.row?.resultType === 4" :src="getzsSmallImg(scope.row?.link)" alt=""
- class="imageBox" /> -->
- <el-image v-else-if="scope.row?.resultType === 4" :src="getzsSmallImg(scope.row?.link)" :preview-src-list="[getzsSmallImg(scope.row?.link)]" fit="cover"
- preview-teleported />
- <el-image v-else :src="scope.row?.smallUrl" :preview-src-list="[scope.row?.showUrl]" fit="cover"
- preview-teleported />
+ <el-image
+ v-else-if="scope.row?.resultType === 4"
+ :src="getzsSmallImg(scope.row?.link)"
+ :preview-src-list="[getzsSmallImg(scope.row?.link)]"
+ fit="cover"
+ preview-teleported
+ />
+ <el-image
+ v-else
+ :src="scope.row?.smallUrl"
+ :preview-src-list="[scope.row?.showUrl]"
+ fit="cover"
+ preview-teleported
+ />
</template>
</el-table-column>
<el-table-column prop="jobTime" label="任务时间" />
<el-table-column property="photoType" label="文件类别">
- <template #default="scope">
- <span>{{ photoTypeMap[scope.row.photoType] ? photoTypeMap[scope.row.photoType]:'tif' }}</span>
+ <template #default="scope">
+ <span>{{
+ photoTypeMap[scope.row.photoType] ? photoTypeMap[scope.row.photoType] : '--'
+ }}</span>
</template>
</el-table-column>
<el-table-column property="resultType" label="文件格式">
@@ -54,21 +85,44 @@
<el-table-column label="操作" width="150" 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>
+ <span
+ class="delete"
+ @click="deleteDetail(scope.row)"
+ v-if="scope.row.resultType !== 2"
+ >删除</span
+ >
- <span class="location" @click="positionDetail(scope.row)" v-if="shouldShowLocation(scope.row)">定位</span>
+ <span
+ class="location"
+ @click="positionDetail(scope.row)"
+ v-if="shouldShowLocation(scope.row)"
+ >定位</span
+ >
</template>
</el-table-column>
</el-table>
</div>
<!-- 分页 -->
<div class="pagination">
- <el-pagination v-model:current-page="jobListParams.current" v-model:page-size="jobListParams.size"
- :page-sizes="[10, 20, 30, 40]" background layout="total, sizes, prev, pager, next, jumper" :total="total"
- @size-change="handleSizeChange" @current-change="handleCurrentChange" />
+ <el-pagination
+ v-model:current-page="jobListParams.current"
+ v-model:page-size="jobListParams.size"
+ :page-sizes="[10, 20, 30, 40]"
+ background
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
</div>
<!-- 查看弹框 -->
- <el-dialog v-model="dialogVisible" width="60%" append-to-body @close="dialogClose" align-center>
+ <el-dialog
+ v-model="dialogVisible"
+ width="60%"
+ append-to-body
+ @close="dialogClose"
+ align-center
+ >
<template #header="{ titleId, titleClass }">
<div class="my-header">
<!-- <h4 :id="titleId" :class="titleClass">{{ detailTitle }}</h4> -->
@@ -81,7 +135,7 @@
<video
v-if="dialogDetailList?.resultType === 1"
style="width: 100%"
- class="videoItem"
+ class="videoItem"
ref="videoRefs"
controls
autoplay
@@ -109,12 +163,10 @@
class="title-input"
clearable
/>
- <span class="editname" @click="editTitle(dialogDetailList)"
- ><el-icon>
- <Edit /> </el-icon
+ <span class="editname" @click="editTitle(dialogDetailList)"
+ ><el-icon> <Edit /> </el-icon
></span>
</div>
-
</div>
<div>任务名称:{{ dialogDetailList?.jobName ? dialogDetailList?.jobName : '--' }}</div>
<div>
@@ -123,7 +175,7 @@
<div>
拍摄机巢:{{ dialogDetailList?.nestName ? dialogDetailList?.nestName : '--' }}
</div>
- <div>
+ <div v-if="dialogDetailList?.resultType != 4">
照片位置:{{ _.round(dialogDetailList?.longitude, 3) }},{{
_.round(dialogDetailList?.latitude, 3)
}}
@@ -136,7 +188,7 @@
文件类型:{{
photoTypeMap[dialogDetailList?.photoType]
? photoTypeMap[dialogDetailList?.photoType]
- : 'tif'
+ : '--'
}}
</div>
<div>
@@ -147,7 +199,7 @@
}}
</div>
<div>
- 照片文件大小:{{
+ 文件大小:{{
bytesToMB(dialogDetailList?.attachSize)
? bytesToMB(dialogDetailList?.attachSize)
: '--'
@@ -166,47 +218,68 @@
</div>
</el-dialog>
<!-- 全景预览 -->
- <PanoramaPopup v-model:panoramaParamsShow="panoramaParamsShow" v-model:panoramaParamsUrl="panoramaParamsUrl">
+ <PanoramaPopup
+ v-model:panoramaParamsShow="panoramaParamsShow"
+ v-model:panoramaParamsUrl="panoramaParamsUrl"
+ >
</PanoramaPopup>
<!-- 视频预览 -->
- <el-dialog :title="currentVideoTitle" modal-class="videoDialog" append-to-body width="54%" v-model="VideoShow"
- :close-on-click-modal="false" :destroy-on-close="true" @close="currentVideoIndex = -1">
+ <el-dialog
+ :title="currentVideoTitle"
+ modal-class="videoDialog"
+ append-to-body
+ width="54%"
+ v-model="VideoShow"
+ :close-on-click-modal="false"
+ :destroy-on-close="true"
+ @close="currentVideoIndex = -1"
+ >
<div class="video-container">
- <video style="width: 100%" class="videoBox" ref="videoRefs" controls autoplay :src="currentVideoUrl"></video>
+ <video
+ style="width: 100%"
+ class="videoBox"
+ ref="videoRefs"
+ controls
+ autoplay
+ :src="currentVideoUrl"
+ ></video>
</div>
</el-dialog>
<!-- 地图弹框 -->
- <dataCenterMap ref="mapComponent" v-model:show="dataCenterMapVisible" :jobId="jobId" @lookDetail="lookDetail"
- :dotData="mapList"></dataCenterMap>
+ <dataCenterMap
+ ref="mapComponent"
+ v-model:show="dataCenterMapVisible"
+ :jobId="jobId"
+ @lookDetail="lookDetail"
+ :dotData="mapList"
+ ></dataCenterMap>
</div>
</div>
</template>
<script setup>
-import { useStore } from 'vuex'
-import { PublicCesium } from '@/utils/cesium/publicCesium'
-import { Cartesian3 } from 'cesium'
-import * as Cesium from 'cesium'
-import EventPopUpBox from '@/hooks/components/EventPopUpBox.vue'
-import { nextTick, render } from 'vue'
-import defaultIcon from '@/assets/images/dataCenter/datamap/eventCompleted.png'
-const userInfo = computed(() => store.getters.userInfo)
-const isShow = defineModel('show')
-const viewerRef = shallowRef(null)
-let viewer = null
-
-const viewInstance = shallowRef(null)
-const store = useStore()
-const currentAreaPosition = ref({ height: 1987280, latitude: 27.636112, longitude: 115.732975 })
-let handler = null
-
-import EventBus from '@/utils/eventBus'
-import dataCenterMap from '@/views/dataCenter/components/dataCenterMap.vue'
-import PanoramaPopup from '@/components/PanoramaPopup/PanoramaPopup.vue' //全景
-import { ElMessage, ElMessageBox, ElLoading } from 'element-plus'
-import searchData from '@/views/dataCenter/components/searchData.vue'
-import fy1 from '@/assets/images/dataCenter/1.jpeg'
-import _ from 'lodash'
+import { useStore } from 'vuex';
+import { PublicCesium } from '@/utils/cesium/publicCesium';
+import { Cartesian3 } from 'cesium';
+import * as Cesium from 'cesium';
+import EventPopUpBox from '@/hooks/components/EventPopUpBox.vue';
+import { nextTick, render } from 'vue';
+import defaultIcon from '@/assets/images/dataCenter/datamap/eventCompleted.png';
+const userInfo = computed(() => store.getters.userInfo);
+const isShow = defineModel('show');
+const viewerRef = shallowRef(null);
+let viewer = null;
+const viewInstance = shallowRef(null);
+const store = useStore();
+const currentAreaPosition = ref({ height: 1987280, latitude: 27.636112, longitude: 115.732975 });
+let handler = null;
+import EventBus from '@/utils/eventBus';
+import dataCenterMap from '@/views/dataCenter/components/dataCenterMap.vue';
+import PanoramaPopup from '@/components/PanoramaPopup/PanoramaPopup.vue'; //全景
+import { ElMessage, ElMessageBox, ElLoading } from 'element-plus';
+import searchData from '@/views/dataCenter/components/searchData.vue';
+import fy1 from '@/assets/images/dataCenter/1.jpeg';
+import _ from 'lodash';
import {
getaiImagesPageAPI,
getAttachInfoAPI,
@@ -214,24 +287,24 @@
downloadApi,
updataTitleApi,
getOrthoimageInfo,
-} from '@/api/dataCenter/dataCenter'
-import { getShowImg, getSmallImg, getzsSmallImg } from '@/utils/util'
-import { onMounted, watch } from 'vue'
-import dayjs from 'dayjs'
+} from '@/api/dataCenter/dataCenter';
+import { getShowImg, getSmallImg, getzsSmallImg } from '@/utils/util';
+import { onMounted, watch } from 'vue';
+import dayjs from 'dayjs';
-function bytesToMB (bytes, decimalPlaces = 2) {
- if (typeof bytes !== 'number' || bytes < 0) return '0'
- return (bytes / 1048576).toFixed(decimalPlaces) + ' MB'
+function bytesToMB(bytes, decimalPlaces = 2) {
+ if (typeof bytes !== 'number' || bytes < 0) return '0';
+ return (bytes / 1048576).toFixed(decimalPlaces) + ' MB';
}
// 视频一帧
-function convertVideoUrlToThumbnail (videoUrl) {
+function convertVideoUrlToThumbnail(videoUrl) {
// 检查是否是有效的视频URL
if (!videoUrl || typeof videoUrl !== 'string') {
- return videoUrl
+ return videoUrl;
}
// 替换文件扩展名
- const thumbnailUrl = videoUrl.replace(/\.mp4$/, '_small.jpg')
- return thumbnailUrl
+ const thumbnailUrl = videoUrl.replace(/\.mp4$/, '_small.jpg');
+ return thumbnailUrl;
}
const resultTypeMap = {
0: '照片',
@@ -239,84 +312,84 @@
2: 'AI识别',
5: '全景',
4: '正射',
-}
+};
const photoTypeMap = {
visible: '可见光',
ir: '红外',
-}
+};
// 判断省市区
-const areaCode = userInfo.value?.detail?.areaCode || ''
+const areaCode = userInfo.value?.detail?.areaCode || '';
// 判断账号级别
-const isProvinceLevel = computed(() => areaCode.endsWith('00000000')) // 省级:后8位为0
-const isCityLevel = computed(() => !isProvinceLevel.value && areaCode.endsWith('000000')) // 市级:后6位为0
-const isDistrictLevel = computed(() => !isProvinceLevel.value && !isCityLevel.value) // 区县级
+const isProvinceLevel = computed(() => areaCode.endsWith('00000000')); // 省级:后8位为0
+const isCityLevel = computed(() => !isProvinceLevel.value && areaCode.endsWith('000000')); // 市级:后6位为0
+const isDistrictLevel = computed(() => !isProvinceLevel.value && !isCityLevel.value); // 区县级
// 处理区域名称的函数
-function processAddress (str) {
- if (!str) return ''
- const parts = str.split(',')
+function processAddress(str) {
+ if (!str) return '';
+ const parts = str.split(',');
// 省级账号:显示市和区(去除省级)
if (isProvinceLevel.value) {
- return parts.filter(part => !part.endsWith('省')).join(',')
+ return parts.filter(part => !part.endsWith('省')).join(',');
}
// 市级账号:只显示区(去除省和市)
if (isCityLevel.value) {
- return parts.filter(part => !part.endsWith('省') && !part.endsWith('市')).join(',')
+ return parts.filter(part => !part.endsWith('省') && !part.endsWith('市')).join(',');
}
// 区县级账号:不显示区域信息(在模板中已隐藏该列)
- return ''
+ return '';
}
const showRegionColumn = computed(() => {
// 是否显示列
return tableData.value.some(row => {
- const processed = processAddress(row.regionName || '')
- return processed !== ''
- })
-})
-const loadings = ref(true)
-let loading
-const total = ref(0)
-const startTime = dayjs().subtract(6, 'day').startOf('day')
-const endTime = dayjs().endOf('day')
-const timeRange = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')]
+ const processed = processAddress(row.regionName || '');
+ return processed !== '';
+ });
+});
+const loadings = ref(true);
+let loading;
+const total = ref(0);
+const startTime = dayjs().subtract(6, 'day').startOf('day');
+const endTime = dayjs().endOf('day');
+const timeRange = [startTime.format('YYYY-MM-DD HH:mm:ss'), endTime.format('YYYY-MM-DD HH:mm:ss')];
// 全景预览
-const panoramaParamsShow = ref(false)
-const panoramaParamsUrl = ref(null)
+const panoramaParamsShow = ref(false);
+const panoramaParamsUrl = ref(null);
const clickpanorama = val => {
- panoramaParamsShow.value = true
- panoramaParamsUrl.value = val.link
-}
+ panoramaParamsShow.value = true;
+ panoramaParamsUrl.value = val.link;
+};
// 视频
-const currentVideoTitle = ref('')
-const VideoShow = ref(false)
-const currentVideoUrl = ref(null)
+const currentVideoTitle = ref('');
+const VideoShow = ref(false);
+const currentVideoUrl = ref(null);
const enterFullScreen = val => {
- currentVideoTitle.value = val?.nickName
- currentVideoUrl.value = val?.link
- VideoShow.value = true
-}
+ currentVideoTitle.value = val?.nickName;
+ currentVideoUrl.value = val?.link;
+ VideoShow.value = true;
+};
const jobListParams = reactive({
current: 1,
size: 10,
orderByCreateTime: true,
searchParams: { startTime: timeRange[0], endTime: timeRange[1] },
-})
-const tableData = ref([])
+});
+const tableData = ref([]);
// 获取列表数据
const getaiImagesPage = () => {
- loadings.value = true
+ loadings.value = true;
const params = {
orderByCreateTime: jobListParams.orderByCreateTime,
...jobListParams.searchParams,
- }
+ };
getaiImagesPageAPI(params, {
current: jobListParams.current,
- size: jobListParams.size
+ size: jobListParams.size,
})
.then(res => {
- total.value = res.data.data.total
+ total.value = res.data.data.total;
tableData.value = res.data.data.records.map(i => ({
...i,
checked: false,
@@ -324,41 +397,41 @@
smallUrl: getSmallImg(i?.link),
showUrl: getShowImg(i?.link),
file_name: i.name.split('/').pop(),
- }))
+ }));
})
.catch(error => {
// 可选:这里可以添加错误处理逻辑
- console.error("获取数据失败:", error)
+ console.error('获取数据失败:', error);
})
.finally(() => {
- loadings.value = false // 无论成功失败都会执行
- })
-}
+ loadings.value = false; // 无论成功失败都会执行
+ });
+};
// 查询
const searchClick = params => {
- jobListParams.current = 1
- jobListParams.size = 10
- jobListParams.searchParams = params
- getaiImagesPage()
-}
+ jobListParams.current = 1;
+ jobListParams.size = 10;
+ jobListParams.searchParams = params;
+ getaiImagesPage();
+};
const handleSizeChange = val => {
- jobListParams.size = val
- getaiImagesPage()
-}
+ jobListParams.size = val;
+ getaiImagesPage();
+};
const handleCurrentChange = val => {
- jobListParams.current = val
- getaiImagesPage()
-}
+ jobListParams.current = val;
+ getaiImagesPage();
+};
// 多选
-const selectedRows = ref([])
+const selectedRows = ref([]);
const handleSelectionChange = val => {
// 更新选中状态
tableData.value.forEach(item => {
- item.checked = val.some(selected => selected.id === item.id)
- })
+ item.checked = val.some(selected => selected.id === item.id);
+ });
- selectedRows.value = val
-}
+ selectedRows.value = val;
+};
// 删除
const deleteDetail = val => {
ElMessageBox.confirm('您确定删除吗?', '提示', {
@@ -369,36 +442,36 @@
.then(() => {
deleteFileMultipleApi(val.id)
.then(res => {
- ElMessage.success('删除成功')
- getaiImagesPage()
+ ElMessage.success('删除成功');
+ getaiImagesPage();
})
.catch(error => {
- ElMessage.error('删除失败')
- })
+ ElMessage.error('删除失败');
+ });
})
- .catch(() => { })
-}
+ .catch(() => {});
+};
// url下载
-function aLinkDownload (url, name) {
- const a = document.createElement('a')
- a.style.display = 'none'
- a.href = url
- a.download = name
- document.body.appendChild(a)
- a.click()
- document.body.removeChild(a)
+function aLinkDownload(url, name) {
+ const a = document.createElement('a');
+ a.style.display = 'none';
+ a.href = url;
+ a.download = name;
+ document.body.appendChild(a);
+ a.click();
+ document.body.removeChild(a);
}
const fileDownload = () => {
- const list = selectedRows.value.filter(i => i.checked)
- if (!list?.length) return ElMessage.warning('请选择文件')
+ const list = selectedRows.value.filter(i => i.checked);
+ if (!list?.length) return ElMessage.warning('请选择文件');
if (list.length === 1) {
list.forEach((item, index) => {
- const suffix = item.url.split('.').pop()
- aLinkDownload(item.url, item.nickName + '.' + suffix)
- })
+ const suffix = item.url.split('.').pop();
+ aLinkDownload(item.url, item.nickName + '.' + suffix);
+ });
} else {
- loading = ElLoading.service({ background: 'rgba(0, 0, 0, 0.5)', text: '打包中,请稍等...' })
- const fileIds = list.map(i => i.id)
+ loading = ElLoading.service({ background: 'rgba(0, 0, 0, 0.5)', text: '打包中,请稍等...' });
+ const fileIds = list.map(i => i.id);
let aaa = {
areaCode: '',
attachIds: fileIds,
@@ -410,236 +483,234 @@
resultType: '',
startTime: '',
wayLineJobIds: [],
- }
+ };
downloadApi(aaa).then(res => {
- aLinkDownload(res.data.data, `sjzx-file-pack-${dayjs().format('YYYYMMDDHHmmss')}.zip`)
- loading.close()
- })
+ aLinkDownload(res.data.data, `sjzx-file-pack-${dayjs().format('YYYYMMDDHHmmss')}.zip`);
+ loading.close();
+ });
}
-}
+};
// 下载
const downloadFile = () => {
- fileDownload()
-}
+ fileDownload();
+};
const detailDownLoad = val => {
- const suffix = val.link?.split('.').pop()
- aLinkDownload(val.link, val?.nickName + '.' + suffix)
-}
+ const suffix = val.link?.split('.').pop();
+ aLinkDownload(val.link, val?.nickName + '.' + suffix);
+};
// 全部下载
const aLLDownloadFile = () => {
- loading = ElLoading.service({ background: 'rgba(0, 0, 0, 0.5)', text: '打包中,请稍等...' })
+ loading = ElLoading.service({ background: 'rgba(0, 0, 0, 0.5)', text: '打包中,请稍等...' });
const params = {
...jobListParams.searchParams,
- }
- params.areaCode = ''
+ };
+ params.areaCode = '';
downloadApi(params).then(res => {
- aLinkDownload(res.data.data, `sjzx-file-pack-${dayjs().format('YYYYMMDDHHmmss')}.zip`)
- loading.close()
- })
-}
+ aLinkDownload(res.data.data, `sjzx-file-pack-${dayjs().format('YYYYMMDDHHmmss')}.zip`);
+ loading.close();
+ });
+};
// 地图弹框
-const mapComponent = ref(null) // 创建子组件引用
-const mapList = ref(null)
-const dataCenterMapVisible = ref(false)
-const jobId = ref('')
-const statusType = ref(null)
+const mapComponent = ref(null); // 创建子组件引用
+const mapList = ref(null);
+const dataCenterMapVisible = ref(false);
+const jobId = ref('');
+const statusType = ref(null);
const positionDetail = val => {
- jobId.value = val.wayLineJobId
- mapList.value = val
- dataCenterMapVisible.value = true
+ jobId.value = val.wayLineJobId;
+ mapList.value = val;
+ dataCenterMapVisible.value = true;
// 确保地图组件加载完成
nextTick(() => {
if (mapComponent.value) {
// 调用子组件方法并传递数据
- mapComponent.value.initEntityOrPopup(val)
+ mapComponent.value.initEntityOrPopup(val);
}
- })
-}
+ });
+};
-const fileNameedit = ref('')
+const fileNameedit = ref('');
// 编辑文件名
const editTitle = val => {
- val.checkedinput = true
- fileNameedit.value = val?.nickName
-}
+ val.checkedinput = true;
+ fileNameedit.value = val?.nickName;
+};
// 通用空值检查函数
const validateNickname = (name, fieldName) => {
if (!name || name.trim() === '') {
- ElMessage.warning(`${fieldName}不能为空`)
- return false
+ ElMessage.warning(`${fieldName}不能为空`);
+ return false;
}
if (name.length > 50) {
- ElMessage.warning(`${fieldName}不能超过50个字符`)
- return false
+ ElMessage.warning(`${fieldName}不能超过50个字符`);
+ return false;
}
- return true
-}
+ return true;
+};
// 保存文件名
const saveTitle = item => {
const updateparams = {
id: item.id,
nickName: `${item.nickName.trim()}`,
- }
+ };
// 验证并提示
- if (!validateNickname(updateparams.nickName, '名称')) return
- item.checkedinput = false
- detailTitle.value = item.nickName
+ if (!validateNickname(updateparams.nickName, '名称')) return;
+ item.checkedinput = false;
+ detailTitle.value = item.nickName;
updataTitleApi(updateparams)
.then(res => {
if (res.status === 200) {
- ElMessage.success('修改成功')
- getaiImagesPage()
+ ElMessage.success('修改成功');
+ getaiImagesPage();
} else {
- ElMessage.error(res.data.message || '修改失败')
+ ElMessage.error(res.data.message || '修改失败');
}
})
.catch(error => {
- ElMessage.error('请求失败,请稍后重试')
- console.error('API error:', error)
- })
-}
+ ElMessage.error('请求失败,请稍后重试');
+ console.error('API error:', error);
+ });
+};
// 正射地图
-const yxShowBox = ref(false)
+const yxShowBox = ref(false);
const removeHandler = () => {
- handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK)
- handler?.destroy()
- handler = null
-}
-const isMapInitialized = ref(false) //地图加载
+ handler?.removeInputAction(Cesium.ScreenSpaceEventType.LEFT_CLICK);
+ handler?.destroy();
+ handler = null;
+};
+const isMapInitialized = ref(false); //地图加载
const initMap = () => {
- if (viewer || isMapInitialized.value) return
-
- const container = document.getElementById('detaildataCenterMap')
+ if (viewer || isMapInitialized.value) return;
+ const container = document.getElementById('detaildataCenterMap');
if (!container) {
- console.error('地图容器未找到')
- return
+ console.error('地图容器未找到');
+ return;
}
viewInstance.value = new PublicCesium({
dom: 'detaildataCenterMap',
flatMode: false,
terrain: false,
mapFilter: true,
- })
- viewer = viewInstance.value.getViewer()
- viewerRef.value = viewer
-
- isMapInitialized.value = true
-
- // console.log('地图初始化完成');
-}
+ });
+ viewer = viewInstance.value.getViewer();
+ viewerRef.value = viewer;
+ isMapInitialized.value = true;
+};
// 判断是否是正射
-function isTifFile (filename) {
- const lastDot = filename.lastIndexOf('.')
- if (lastDot === -1) return false // 无后缀
- return filename.slice(lastDot + 1).toLowerCase() === 'tif'
+function isTifFile(filename) {
+ const lastDot = filename.lastIndexOf('.');
+ if (lastDot === -1) return false; // 无后缀
+ return filename.slice(lastDot + 1).toLowerCase() === 'tif';
}
const shouldShowLocation = row => {
- return row.resultType !== 1 && row.resultType !== 4
-}
+ return row.resultType !== 1 && row.resultType !== 4;
+};
// 查看弹框
-const dialogVisible = ref(false)
-const dialogDetailList = ref(null)
-const detailTitle = ref('')
-let curCustomImageryProvider = null
-const orthoimageApi = ref('')
-const positiongeom = ref('')
-const odmToken = ref(null)
+const dialogVisible = ref(false);
+const dialogDetailList = ref(null);
+const detailTitle = ref('');
+let curCustomImageryProvider = null;
+const orthoimageApi = ref('');
+const positiongeom = ref('');
+const odmToken = ref(null);
const lookDetail = val => {
if (val.resultType === 4) {
// 正射
getOrthoimageInfo(val.wayLineJobId).then(async res => {
- dialogVisible.value = true
- detailTitle.value = val.nickName
- dialogDetailList.value = val
- console.log('3333', detailTitle.value, dialogDetailList.value)
-
- await nextTick()
- initMap()
- positiongeom.value = res.data.data.geom
- orthoimageApi.value = res.data.data.orthoimageApi
- odmToken.value = res.data.data.odmToken
+ dialogVisible.value = true;
+ detailTitle.value = val.nickName;
+ dialogDetailList.value = val;
+ await nextTick();
+ initMap();
+ positiongeom.value = res.data.data.geom;
+ orthoimageApi.value = res.data.data.orthoimageApi;
+ odmToken.value = res.data.data.odmToken;
if (res.data.data != null && isMapInitialized.value === true) {
curCustomImageryProvider = viewInstance.value.addCustomImageryProviderDataSource(
new Cesium.UrlTemplateImageryProvider({
- url: `${import.meta.env.VITE_APP_AREA_NAME}/webodm${res.data.data.orthoimageApi}?jwt=${res.data.data.odmToken.split(' ')[1]
- }`,
- // maximumLevel: 12,
+ url: `${import.meta.env.VITE_APP_AREA_NAME}/webodm${res.data.data.orthoimageApi}?jwt=${
+ res.data.data.odmToken.split(' ')[1]
+ }`,
})
- )
- yxShowBox.value = true
+ );
+ yxShowBox.value = true;
// 添加定位
if (positiongeom.value) {
// 解析WKT格式的多边形坐标
- const wktString = positiongeom.value
- const coordinates = parseWKTCoordinates(wktString)
+ const wktString = positiongeom.value;
+ const coordinates = parseWKTCoordinates(wktString);
if (coordinates.length > 0) {
// 创建多边形边界
const positions = coordinates.map(coord =>
Cesium.Cartesian3.fromDegrees(coord[0], coord[1])
- )
+ );
// 计算多边形的包围球
- const boundingSphere = Cesium.BoundingSphere.fromPoints(positions)
- const viewer = viewInstance.value.getViewer()
+ const boundingSphere = Cesium.BoundingSphere.fromPoints(positions);
+ const viewer = viewInstance.value.getViewer();
if (viewer && viewer.camera) {
viewer.camera.flyToBoundingSphere(boundingSphere, {
- duration: 0, // 飞行动画持续时间(秒)
- offset: new Cesium.HeadingPitchRange(0, -0.5, boundingSphere.radius * 1.5),
- })
+ duration: 0, // 增加动画时间使过渡更平滑
+ offset: new Cesium.HeadingPitchRange(
+ Cesium.Math.toRadians(-45), // 航向角:-45度(东北方向)
+ Cesium.Math.toRadians(-90), // 俯仰角:-30度(向下倾斜30度)
+ boundingSphere.radius * 2.5 // 距离:2.5倍半径
+ ),
+ });
} else {
- console.error('无法获取有效的 Viewer 或 camera 对象')
+ console.error('无法获取有效的 Viewer 或 camera 对象');
}
}
}
}
- })
+ });
} else {
getAttachInfoAPI(val.id).then(res => {
- detailTitle.value = res.data.data.nickName.split('.jpeg')[0]
+ detailTitle.value = res.data.data.nickName.split('.jpeg')[0];
dialogDetailList.value = {
...res.data.data,
checkedinput: false,
editName: res.data.data?.nickName?.split('.jpeg')[0],
- }
- dialogVisible.value = true
- })
+ };
+ dialogVisible.value = true;
+ });
}
-}
+};
// WKT坐标解析函数
-function parseWKTCoordinates (wktString) {
+function parseWKTCoordinates(wktString) {
// 解析POLYGON格式的WKT字符串
- const regex = /POLYGON\s*\(\((.*?)\)\)/i
- const match = wktString.match(regex)
- if (!match || !match[1]) return []
+ const regex = /POLYGON\s*\(\((.*?)\)\)/i;
+ const match = wktString.match(regex);
+ if (!match || !match[1]) return [];
// 分割坐标对
- const coordinatePairs = match[1].split(/,\s*/)
+ const coordinatePairs = match[1].split(/,\s*/);
return coordinatePairs.map(pair => {
- const [lon, lat] = pair.trim().split(/\s+/).map(Number)
- return [lon, lat]
- })
+ const [lon, lat] = pair.trim().split(/\s+/).map(Number);
+ return [lon, lat];
+ });
}
-function dialogClose () {
+function dialogClose() {
// 对话框关闭时清理资源
- viewInstance.value?.viewerDestroy()
- viewer = null
- isMapInitialized.value = false
+ viewInstance.value?.viewerDestroy();
+ viewer = null;
+ isMapInitialized.value = false;
}
onMounted(() => {
- getaiImagesPage()
+ getaiImagesPage();
// 监听打开全景事件
EventBus.on('open-panorama', params => {
- panoramaParamsShow.value = params.show
- panoramaParamsUrl.value = params.url
- })
-})
+ panoramaParamsShow.value = params.show;
+ panoramaParamsUrl.value = params.url;
+ });
+});
onBeforeUnmount(() => {
// 组件卸载时移除事件监听,防止内存泄漏
- EventBus.off('open-panorama')
- viewInstance.value?.removeAllCustomImageryProviderDataSource(curCustomImageryProvider)
- viewInstance.value?.viewerDestroy()
-})
+ EventBus.off('open-panorama');
+ viewInstance.value?.removeAllCustomImageryProviderDataSource(curCustomImageryProvider);
+ viewInstance.value?.viewerDestroy();
+});
</script>
<style scoped lang="scss">
@@ -716,20 +787,20 @@
.detailContainer {
display: flex;
justify-content: space-between;
-align-items: center;
+ align-items: center;
.leftImg {
width: 70%;
height: 500px;
-overflow: hidden;
+ overflow: hidden;
img {
width: 100%;
height: 100%;
}
-.videoItem {
- width: 100%;
+ .videoItem {
+ width: 100%;
height: 100%;
object-fit: cover;
-}
+ }
#detaildataCenterMap {
width: 100%;
height: 100%;
@@ -798,7 +869,7 @@
margin-bottom: 0 !important;
font-size: 16px;
- >.editText {
+ > .editText {
cursor: pointer;
margin-right: 6px;
@@ -817,4 +888,4 @@
}
}
}
-</style>
\ No newline at end of file
+</style>
diff --git a/src/views/device/airport.vue b/src/views/device/airport.vue
index 936b63c..5174735 100644
--- a/src/views/device/airport.vue
+++ b/src/views/device/airport.vue
@@ -115,7 +115,8 @@
</template>
</el-dialog>
- <el-drawer title="机场授权管理" size="60%" append-to-body v-model="devicePerShareVisible" :direction="'rtl'">
+ <el-drawer class="ztzf-drawer-body-basic-container" title="机场授权管理" size="60%" append-to-body
+ v-model="devicePerShareVisible" :direction="'rtl'">
<DevicePerShare ref="devicePerShare" />
</el-drawer>
@@ -352,10 +353,20 @@
},
{
label: '行政区划',
+ prop: 'area_name',
+ hide: true,
+ editDisplay: false, //编辑显示
+ viewDisplay: true, //查看显示
+ labelWidth: 130,
+ },
+ {
+ label: '行政区划',
prop: 'area_code',
type: 'cascader',
labelWidth: 130,
hide: true,
+ editDisplay: true,
+ viewDisplay: false,
props: {
label: 'title',
value: 'value',
@@ -1010,12 +1021,13 @@
if (['edit', 'view'].includes(type)) {
getDetail(this.form.id).then(res => {
const data = res.data.data
-
this.form = {
...data,
area_code: this.getFullAreaCode(data.area_code),
+ area_name: this.form.area_name,
duration_of_insurance: [data?.insure_start_time || '', data?.insure_expired_time || '']
}
+ console.log('this.form', this.form)
done()
})
diff --git a/src/views/device/components/devicePerShare.vue b/src/views/device/components/devicePerShare.vue
index 0abf44a..2ee9ac6 100644
--- a/src/views/device/components/devicePerShare.vue
+++ b/src/views/device/components/devicePerShare.vue
@@ -1,35 +1,20 @@
<template>
<basic-container>
- <avue-crud
- :option="option"
- :table-loading="loading"
- :data="data"
- v-model:page="page"
- ref="crud"
- @row-del="rowDel"
- v-model="form"
- :permission="permissionList"
- @row-save="rowSave"
- @row-update="rowUpdate"
- :before-open="beforeOpen"
- @search-change="searchChange"
- @search-reset="searchReset"
- @selection-change="selectionChange"
- @current-change="currentChange"
- @size-change="sizeChange"
- @refresh-change="refreshChange"
- >
+ <avue-crud :option="option" :table-loading="loading" :data="data" v-model:page="page" ref="crud" @row-del="rowDel"
+ v-model="form" :permission="permissionList" @row-save="rowSave" @row-update="rowUpdate" :before-open="beforeOpen"
+ @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+ @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange">
</avue-crud>
</basic-container>
</template>
<script>
-import { getList, remove, add, update } from '@/api/device/devicePerShare';
-import { getDeptTreeByNotItself } from '@/api/system/dept';
-import { mapGetters } from 'vuex';
+import { getList, remove, add, update } from '@/api/device/devicePerShare'
+import { getDeptTreeByNotItself } from '@/api/system/dept'
+import { mapGetters } from 'vuex'
export default {
- data() {
+ data () {
return {
deptId: '',
deviceSn: '',
@@ -58,6 +43,10 @@
excelBtn: false,
dialogClickModal: false,
grid: false,
+
+ height: 'auto',
+ calcHeight: 20,
+
column: [
{
label: '授权单位',
@@ -136,118 +125,118 @@
],
},
data: [],
- };
+ }
},
computed: {
...mapGetters(['permission']),
- permissionList() {
+ permissionList () {
return {
addBtn: this.validData(this.permission.airport_add, true),
viewBtn: this.validData(this.permission.airport_view, true),
delBtn: this.validData(this.permission.airport_delete, true),
editBtn: this.validData(this.permission.airport_edit, true),
- };
+ }
},
- ids() {
- let ids = [];
+ ids () {
+ let ids = []
this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(',');
+ ids.push(ele.id)
+ })
+ return ids.join(',')
},
},
methods: {
- init(data) {
- this.deptId = data.dept_id;
- this.deviceSn = data.device_sn;
- this.getDeptTreeInfo();
- this.getLoadPage(this.page);
+ init (data) {
+ this.deptId = data.dept_id
+ this.deviceSn = data.device_sn
+ this.getDeptTreeInfo()
+ this.getLoadPage(this.page)
},
- getDeptTreeInfo() {
+ getDeptTreeInfo () {
getDeptTreeByNotItself(this.deptId, this.deviceSn).then(res => {
- const column = this.findObject(this.option.column, 'deptId');
- this.deptTreeData = res.data.data;
- column.dicData = res.data.data;
- });
+ const column = this.findObject(this.option.column, 'deptId')
+ this.deptTreeData = res.data.data
+ column.dicData = res.data.data
+ })
},
- rowSave(row, done, loading) {
+ rowSave (row, done, loading) {
// 添加毫秒级时间戳
- row['createTime'] = Date.now();
- row['deviceSn'] = this.deviceSn;
+ row['createTime'] = Date.now()
+ row['deviceSn'] = this.deviceSn
add(row).then(
() => {
- this.initFlag = false;
- this.getLoadPage(this.page);
- this.getDeptTreeInfo();
+ this.initFlag = false
+ this.getLoadPage(this.page)
+ this.getDeptTreeInfo()
this.$message({
type: 'success',
message: '操作成功!',
- });
- done();
+ })
+ done()
},
error => {
- window.console.log(error);
- loading();
+ window.console.log(error)
+ loading()
}
- );
+ )
},
- rowUpdate(row, index, done, loading) {
- row['device_sn'] = this.deviceSn;
+ rowUpdate (row, index, done, loading) {
+ row['device_sn'] = this.deviceSn
update(row).then(
() => {
- this.getLoadPage(this.page);
+ this.getLoadPage(this.page)
this.$message({
type: 'success',
message: '操作成功!',
- });
- done();
+ })
+ done()
},
error => {
- window.console.log(error);
- loading();
+ window.console.log(error)
+ loading()
}
- );
+ )
},
- rowDel(row) {
+ rowDel (row) {
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
- return remove(row.id);
+ return remove(row.id)
})
.then(() => {
- this.getDeptTreeInfo();
- this.getLoadPage(this.page);
+ this.getDeptTreeInfo()
+ this.getLoadPage(this.page)
this.$message({
type: 'success',
message: '操作成功!',
- });
- });
+ })
+ })
},
- searchReset() {
- this.query = {};
- this.getLoadPage(this.page);
+ searchReset () {
+ this.query = {}
+ this.getLoadPage(this.page)
},
- searchChange(params, done) {
- this.query = params;
- this.page.currentPage = 1;
- this.getLoadPage(this.page, params);
- done();
+ searchChange (params, done) {
+ this.query = params
+ this.page.currentPage = 1
+ this.getLoadPage(this.page, params)
+ done()
},
- selectionChange(list) {
- this.selectionList = list;
+ selectionChange (list) {
+ this.selectionList = list
},
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
+ selectionClear () {
+ this.selectionList = []
+ this.$refs.crud.toggleSelection()
},
- handleDelete() {
+ handleDelete () {
if (this.selectionList.length === 0) {
- this.$message.warning('请选择至少一条数据');
- return;
+ this.$message.warning('请选择至少一条数据')
+ return
}
this.$confirm('确定将选择数据删除?', {
confirmButtonText: '确定',
@@ -255,48 +244,48 @@
type: 'warning',
})
.then(() => {
- return remove(this.ids);
+ return remove(this.ids)
})
.then(() => {
- this.getLoadPage(this.page);
+ this.getLoadPage(this.page)
this.$message({
type: 'success',
message: '操作成功!',
- });
- this.$refs.crud.toggleSelection();
- });
+ })
+ this.$refs.crud.toggleSelection()
+ })
},
- beforeOpen(done, type) {
- done();
+ beforeOpen (done, type) {
+ done()
},
- currentChange(currentPage) {
- this.page.currentPage = currentPage;
- this.getLoadPage(this.page, this.query); // 添加数据刷新
+ currentChange (currentPage) {
+ this.page.currentPage = currentPage
+ this.getLoadPage(this.page, this.query) // 添加数据刷新
},
- sizeChange(pageSize) {
- this.page.pageSize = pageSize;
- this.page.currentPage = 1; // 每页条数改变时,重置到第一页
- this.getLoadPage(this.page, this.query); // 添加数据刷新
+ sizeChange (pageSize) {
+ this.page.pageSize = pageSize
+ this.page.currentPage = 1 // 每页条数改变时,重置到第一页
+ this.getLoadPage(this.page, this.query) // 添加数据刷新
},
- refreshChange() {
- this.getLoadPage(this.page, this.query);
+ refreshChange () {
+ this.getLoadPage(this.page, this.query)
},
- getLoadPage(page, params = {}) {
- params['deviceSn'] = this.deviceSn;
- this.loading = true;
+ getLoadPage (page, params = {}) {
+ params['deviceSn'] = this.deviceSn
+ this.loading = true
getList(page.currentPage, page.pageSize, params).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
+ const data = res.data.data
+ this.page.total = data.total
+ this.data = data.records
+ this.loading = false
+ this.selectionClear()
}).catch(err => {
- console.error('加载数据失败:', err);
- this.loading = false;
- });
+ console.error('加载数据失败:', err)
+ this.loading = false
+ })
},
},
-};
+}
</script>
<style>
@@ -304,6 +293,7 @@
background-color: aqua;
border-radius: 4px;
}
+
.firmware_status:hover {
cursor: pointer;
}
diff --git a/src/views/job/components/SearchBox.vue b/src/views/job/components/SearchBox.vue
index 899b99d..89ccc3c 100644
--- a/src/views/job/components/SearchBox.vue
+++ b/src/views/job/components/SearchBox.vue
@@ -59,7 +59,7 @@
</el-form-item>
<el-form-item label="任务算法:" v-if="isExpand" class="taskAlgorithm">
<TaskAlgorithmBusiness
- :setWidth="162"
+ :setWidth="222"
:showAlgorithm="true"
@algorithmChange="algorithmChange"
/>
@@ -451,6 +451,7 @@
.el-form-item {
margin-bottom: 0;
width: 233px;
+ margin-right: 20px;
.el-form-item__label {
color: #363636;
diff --git a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
index 19ca671..82de1e3 100644
--- a/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
+++ b/src/views/job/components/TaskIntermediateContent/TaskIntermediateContent.vue
@@ -247,8 +247,8 @@
}
&.cancelTask {
- border: 1px solid #3efe96;
- color: #3efe96;
+ border: 1px solid #00AA2D;
+ color: #00AA2D;
}
}
diff --git a/src/views/job/components/TaskTop/TaskEvent.vue b/src/views/job/components/TaskTop/TaskEvent.vue
index 3ea7c62..dcc40cd 100644
--- a/src/views/job/components/TaskTop/TaskEvent.vue
+++ b/src/views/job/components/TaskTop/TaskEvent.vue
@@ -81,7 +81,7 @@
{
name: '任务',
type: 'bar',
- barWidth: 8,
+ barWidth: 6,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#FF8902' },
@@ -92,7 +92,7 @@
{
name: '事件',
type: 'bar',
- barWidth: 8,
+ barWidth: 6,
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#4363FF' },
diff --git a/src/views/job/components/TaskTop/TaskTotal.vue b/src/views/job/components/TaskTop/TaskTotal.vue
index 20ac749..84de5a7 100644
--- a/src/views/job/components/TaskTop/TaskTotal.vue
+++ b/src/views/job/components/TaskTop/TaskTotal.vue
@@ -40,10 +40,10 @@
const list = ref([
{ name: '计划执行', value: '0', color: '#1C5CFF', img: jhzxpng },
{ name: '已执行', value: '0', color: '#00AA2D', img: yzxpng },
- { name: '执行中', value: '0', color: '#FFA768', img: zxzpng},
+ { name: '执行中', value: '0', color: '#FF720F', img: zxzpng},
{ name: '执行失败', value: '0', color: '#FF4848', img: zxsbpng },
{ name: '待执行', value: '0', color: '#00CDC2', img: dzxpng },
- { name: '取消执行', value: '0', color: '#A6A6A6', img: qxzxpng },
+ { name: '取消执行', value: '0', color: '#373333', img: qxzxpng },
])
// 获取任务统计总数
diff --git a/src/views/tickets/orderLog.vue b/src/views/tickets/orderLog.vue
index 5eafee3..514e6dd 100644
--- a/src/views/tickets/orderLog.vue
+++ b/src/views/tickets/orderLog.vue
@@ -573,19 +573,55 @@
calcHeight: 196,
column: [
- { label: '工单编号', prop: 'job_info_num', width: 100, ellipsis: true, overHidden: true },
- { label: '工单名称', prop: 'name', width: 100, ellipsis: true, overHidden: true },
- { label: '工单状态', prop: 'status', width: 88 },
- { label: '所属单位', prop: 'dept_name', width: 100, ellipsis: true },
- { label: '发起时间', prop: 'create_time', width: 144, ellipsis: true },
- { label: '已执行次数', prop: 'job_num', width: 96, ellipsis: true },
- { label: '工单内容', prop: 'content', ellipsis: true, overHidden: true },
- { label: '关联航线', prop: 'wayline_name', width: 100, ellipsis: true, overHidden: true },
- { label: '关联算法', prop: 'ai_type_str', width: 100, ellipsis: true, overHidden: true },
- { label: '关联机巢', prop: 'device_names', width: 100, ellipsis: true, overHidden: true },
+ {
+ label: '工单编号', prop: 'job_info_num', width: 100, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '工单名称', prop: 'name', width: 100, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '工单状态', prop: 'status', width: 88,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '所属单位', prop: 'dept_name', width: 100, ellipsis: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '发起时间', prop: 'create_time', width: 144, ellipsis: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '已执行次数', prop: 'job_num', width: 96, ellipsis: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '工单内容', prop: 'content', ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '关联航线', prop: 'wayline_name', width: 100, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '关联算法', prop: 'ai_type_str', width: 100, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '关联机巢', prop: 'device_names', width: 100, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
- { label: '创建人', prop: 'creator_name', width: 96, ellipsis: true, overHidden: true },
- { label: '关联机巢', prop: 'device_names', width: 112, ellipsis: true, overHidden: true },
+ {
+ label: '创建人', prop: 'creator_name', width: 96, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
+ {
+ label: '关联机巢', prop: 'device_names', width: 112, ellipsis: true, overHidden: true,
+ showOverflowTooltip: true,
+ },
{
label: '工单周期频次',
prop: '',
@@ -593,6 +629,7 @@
formatter: row => this.formatCycleTime(row),
html: true,
ellipsis: true,
+ showOverflowTooltip: true,
// overHidden: true
},
],
@@ -1089,7 +1126,7 @@
//按照航线来
const params = {
- type: currentLine.wayline_type,
+ type: [2, 4, 5].includes(currentLine.wayline_type) ? 2 : 0,
wayline_id: waylineId,
polygon
}
@@ -1336,12 +1373,9 @@
&> ::v-deep(.el-button) {
flex: 1;
- max-width: 44px;
+ margin-left: 0;
margin-right: 10px;
- &:nth-child(4n) {
- margin-left: 0;
- }
}
}
}
diff --git a/src/views/tickets/ticket.vue b/src/views/tickets/ticket.vue
index 18314b5..7551c9e 100644
--- a/src/views/tickets/ticket.vue
+++ b/src/views/tickets/ticket.vue
@@ -152,7 +152,10 @@
:on-change="handleFileChange" :on-remove="handleUploadRemove" :before-upload="beforeUpload"
:file-list="form.photos" :limit="1" accept="image/*" class="create-upload">
<template v-if="form.photos.length < 1">
- <i class="el-icon-plus">+</i>
+ <!-- <i class="el-icon-plus">+</i> -->
+ <div class="el-icon-plus">
+ <span>+</span>
+ </div>
</template>
</el-upload>
<div class="upload-tip">需上传含有地址信息的照片(jpg、jpeg、png),且不超过5M</div>
@@ -173,7 +176,8 @@
<!-- 工单详情对话框 -->
<el-dialog v-model="detailVisible" title="工单详情" width="80%" append-to-body>
<div class="detail-container">
- <div class="event-title-center">{{ currentDetail.orderName || '事件名称' }}</div>
+ <div class="detail-top-title"> <div class="event-title-center event-orderNumber">{{ currentDetail.orderNumber || '工单编号' }}</div>
+ <div class="event-title-center">{{ currentDetail.orderName || '事件名称' }}</div></div>
<div v-if="totalTime" class="event-total-time">
总耗时:{{ totalTime }}
</div>
@@ -305,7 +309,10 @@
:before-upload="beforeUpload" :file-list="currentDetail.photos || []" :limit="1" accept="image/*"
class="detail-upload">
<template v-if="!currentDetail.photos || currentDetail.photos.length < 1">
- <i class="el-icon-plus">+</i>
+ <!-- <i class="el-icon-plus">+</i> -->
+ <div class="el-icon-plus">
+ <span>+</span>
+ </div>
</template>
</el-upload>
<div class="el-upload__tip" v-if="hasProcessedAndOverBtnPermission()">
@@ -493,7 +500,7 @@
@close="reCheckDialog = false">
<div class="dialog-footer">
<el-button type="primary" @click="reCheckConfirm(1)">人工复核</el-button>
- <el-button type="primary" @click="reCheckConfirm(2)">AI复核</el-button>
+ <el-button type="primary" @click="reCheckConfirm(2)">无人机复核</el-button>
</div>
</el-dialog>
</basic-container>
@@ -1351,6 +1358,17 @@
if (response.data.code === 0) {
this.$message.success('草稿保存成功')
this.dialogVisible = false
+ this.form={
+ name: '',
+ type: '',
+ department: '',
+ handler: '',
+ algorithm: [], // 关联算法改为数组
+ location: [], // 将存储为[经度, 纬度, 地址]格式
+ address: '',
+ photos: [],
+ content: '', // 新增字段,用于存储后端返回的 content
+ },
this.fetchTableData()
} else {
throw new Error(response.data.msg || '保存失败')
@@ -1559,6 +1577,8 @@
})
}
this.currentDetail.status = row.status
+
+
} catch (error) {
if (this.activeTab === 'myTickets') {
const statusArr = this.workType === 1 ? ['3', '4'] : this.fixedStatuses
@@ -1573,6 +1593,7 @@
}
this.currentDetail = detailData
+ console.log('this.currentDetail',this.currentDetail);
this.detailVisible = true
this.$nextTick(() => {
if (this.$refs.MapContainer && this.$refs.MapContainer.initAddEntity) {
@@ -2758,6 +2779,13 @@
.detail-container {
padding: 20px;
+ .detail-top-title {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ .event-orderNumber{
+ margin-right: 10px;}
+ }
}
.status-flow {
diff --git a/src/views/wel/components/statistics.vue b/src/views/wel/components/statistics.vue
index d0642df..ab9b6c4 100644
--- a/src/views/wel/components/statistics.vue
+++ b/src/views/wel/components/statistics.vue
@@ -198,7 +198,7 @@
// 样式配置对象
const statusStyles = {
机巢保险: {
- 0: { class: 'expired', color: 'rgba(186, 186, 186, 1)', background: 'rgba(186, 186, 186, 1)' },
+ 0: { class: 'expired', color: '#FFA600', background: '#FFA600' },
1: { class: 'normal', color: 'rgba(27, 148, 255, 1)', background: 'rgba(27, 148, 255, 1)' },
},
diff --git a/src/views/wel/index.vue b/src/views/wel/index.vue
index 54cbb67..ec47397 100644
--- a/src/views/wel/index.vue
+++ b/src/views/wel/index.vue
@@ -378,7 +378,7 @@
yAxis: [
{
type: 'log',
- name: '单位:万套',
+ name: '单位:万',
nameTextStyle: {
color: '#383838',
fontSize: '1.2rem'
@@ -436,7 +436,7 @@
{
name: '飞行时长',
type: 'bar',
- barWidth: '12px',
+ barWidth: '8px',
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#29acff' },
@@ -449,7 +449,7 @@
{
name: '飞行里程',
type: 'bar',
- barWidth: '12px',
+ barWidth: '8px',
itemStyle: {
color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
{ offset: 0, color: '#01c871' },
--
Gitblit v1.9.3