From cf55e57ac8e892c321cc9eeb79e14b39e7d80e82 Mon Sep 17 00:00:00 2001
From: chenyao <1219716595@qq.com>
Date: Fri, 28 Nov 2025 16:34:19 +0800
Subject: [PATCH] Merge branch 'feature/v8.0/8.0.3' into prod
---
src/views/job/components/DeviceJobDetails.vue | 1046 +++++++++++++++++++++++++++++----------------------------
1 files changed, 534 insertions(+), 512 deletions(-)
diff --git a/src/views/job/components/DeviceJobDetails.vue b/src/views/job/components/DeviceJobDetails.vue
index 69e6e52..8ac0999 100644
--- a/src/views/job/components/DeviceJobDetails.vue
+++ b/src/views/job/components/DeviceJobDetails.vue
@@ -1,148 +1,150 @@
<!-- 历史任务详情 -->
<template>
- <el-dialog class="ztzf-dialog" append-to-body modal-class="detailsOfHistoricalTasks" v-model="isShow" title="历史任务详情"
- :width="pxToRem(1800)" :close-on-click-modal="false" :destroy-on-close="true">
- <div class="content">
- <div class="contentLeft">
- <div class="machineTableDetailsTitle"><img src="/src/assets/images/task/sign.svg" alt=""><span>详情</span></div>
- <div class="infoBox">
- <div class="itemBoxLeft">
- <div v-for="(item, index) in infoList" :key="index" class="itemCon">
- <div class="itemBox">
- <div class="itemTitle">{{ item.name }}:</div>
- <div truncated class="itemValue" v-if="item.name !== '飞行事件' && item.name !== '任务执行次数'">{{
- item.value ? item.value : '--' }}</div>
- <div class="itemValue" v-if="item.name === '任务执行次数'">{{ item.value ? item.value : '0'
- }}次</div>
- <!-- 飞行事件 -->
- <div class="flightEvents" v-if="item.name === '飞行事件'">
- <template v-if="flightEvents.length">
- <img v-for="(item, index) in flightEvents" alt="" :src="item.img"
- :title="item.name" :key="index"></img>
- </template>
- <div class="itemValue" v-else>--</div>
- </div>
- </div>
- </div>
- </div>
+ <el-dialog class="ztzf-dialog" append-to-body modal-class="detailsOfHistoricalTasks" v-model="isShow" title="历史任务详情"
+ :width="pxToRem(1800)" :close-on-click-modal="false" :destroy-on-close="true">
+ <div class="content">
+ <div class="contentLeft">
+ <div class="machineTableDetailsTitle"><img src="/src/assets/images/task/sign.svg" alt=""><span>详情</span></div>
+ <div class="infoBox">
+ <div class="itemBoxLeft">
+ <div v-for="(item, index) in infoList" :key="index" class="itemCon">
+ <div class="itemBox">
+ <div class="itemTitle">{{ item.name }}:</div>
+ <div truncated class="itemValue" v-if="item.name !== '飞行事件' && item.name !== '任务执行次数'">{{
+ item.value ? item.value : '--' }}</div>
+ <div class="itemValue" v-if="item.name === '任务执行次数'">{{ item.value ? item.value : '0'
+ }}次</div>
+ <!-- 飞行事件 -->
+ <div class="flightEvents" v-if="item.name === '飞行事件'">
+ <template v-if="flightEvents.length">
+ <img v-for="(item, index) in flightEvents" alt="" :src="item.img"
+ :title="item.name" :key="index"></img>
+ </template>
+ <div class="itemValue" v-else>--</div>
+ </div>
+ </div>
+ </div>
+ </div>
- </div>
- <JobRelatedEvents :jobTimes="jobTimes" :batchNo="batchNo" />
- <div class="devicetitle" v-if="isShow">
- <div>
- <img src="/src/assets/images/task/sign.svg" alt="">
- <p>
- 成果数据
- <span>{{ total }}</span>
- 个
- </p>
- </div>
- <div class="rightBox" v-if="total">
- <div class="downloadBtn" @click="htlsrwxq === 100 && downloadFun()">
- <el-progress v-if="htlsrwxq !== 100" :percentage="htlsrwxq" :show-text="false" striped striped-flow :duration="1" />
- <div class="downloadBtnText">
- <span v-if="htlsrwxq === 100">下载</span>
- <template v-else>
- 处理中<el-icon @click="cancelDownload"><CircleClose /></el-icon>
- </template>
- </div>
- </div>
- <div class="downloadBtn" @click="showAll = !showAll" v-if="total > 5">
- {{ showAll ? '收起' : '更多' }}
- </div>
- </div>
- </div>
- <div class="imgListBox">
- <!-- 图片显示 -->
- <template v-for="(item, index) in achievementList.slice(0, visibleCount)" :key="index">
- <div class="result-item">
- <el-checkbox v-model="item.checked" />
- <div class="itemName">{{ item.createTime }}</div>
- <!-- 正射 -->
- <el-image
- v-if="item.resultType === 4"
- :src="item.smallUrl"
- :preview-src-list="[item.showUrl]"
- fit="cover"
- preview-teleported
- />
- <!-- 全景 -->
- <img
- v-else-if="item.resultType === 5"
- class="quanjing"
- @click="clickpanorama(item)"
- :src="item?.smallUrl"
- alt=""
- />
- <!-- 视频 -->
- <div v-else-if="item.resultType === 1" class="videotime">
- <img
- class="videoDisplay"
- :src="convertVideoUrlToThumbnail(item.link)"
- alt=""
- @click="enterFullScreen(index)"
- />
- <img
- @click="enterFullScreen(index)"
- class="videobutton"
- src="@/assets/images/task/videoshow.png"
- alt=""
- />
- </div>
- <!-- 图片 -->
- <el-image
- v-else
- :src="item.smallUrl"
- :preview-src-list="[item.showUrl]"
- preview-teleported
- :initial-index="index"
- fit="cover"
- />
+ </div>
+ <JobRelatedEvents :jobTimes="jobTimes" :batchNo="batchNo" />
+ <div class="devicetitle" v-if="isShow">
+ <div>
+ <img src="/src/assets/images/task/sign.svg" alt="">
+ <p>
+ 成果数据
+ <span>{{ total }}</span>
+ 个
+ </p>
+ </div>
+ <div class="rightBox" v-if="total">
+ <div class="downloadBtn" @click="htlsrwxq === 100 && downloadFun()">
+ <el-progress v-if="htlsrwxq !== 100" :percentage="htlsrwxq" :show-text="false" striped striped-flow :duration="1" />
+ <div class="downloadBtnText">
+ <span v-if="htlsrwxq === 100">下载</span>
+ <template v-else>
+ 处理中<el-icon @click="cancelDownload"><CircleClose /></el-icon>
+ </template>
+ </div>
+ </div>
+ <div class="downloadBtn" @click="showAll = !showAll" v-if="total > 5">
+ {{ showAll ? '收起' : '更多' }}
+ </div>
+ </div>
+ </div>
+ <div class="imgListBox">
+ <!-- 图片显示 -->
+ <template v-for="(item, index) in achievementList.slice(0, visibleCount)" :key="index">
+ <div class="result-item">
+ <el-checkbox v-model="item.checked" />
+ <div class="itemName">{{ item.createTime }}</div>
+ <!-- 正射 -->
+ <el-image
+ v-if="item.resultType === 4"
+ :src="item.smallUrl"
+ :preview-src-list="[item.showUrl]"
+ fit="cover"
+ preview-teleported
+ />
+ <!-- 全景 -->
+ <img
+ v-else-if="item.resultType === 5"
+ class="quanjing"
+ @click="clickpanorama(item)"
+ :src="item?.smallUrl"
+ alt=""
+ />
+ <!-- 视频 -->
+ <div v-else-if="item.resultType === 1" class="videotime">
+ <img
+ class="videoDisplay"
+ :src="convertVideoUrlToThumbnail(item.link)"
+ alt=""
+ @click="enterFullScreen(index)"
+ />
+ <img
+ @click="enterFullScreen(index)"
+ class="videobutton"
+ src="@/assets/images/task/videoshow.png"
+ alt=""
+ />
+ </div>
+ <!-- 图片 -->
+ <el-image
+ v-else
+ :src="item.smallUrl"
+ :preview-src-list="[item.showUrl]"
+ preview-teleported
+ :initial-index="index"
+ fit="cover"
+ />
- <el-dialog
- class="ztzf-dialog"
- append-to-body
- modal-class="detailsOfHistoricalTasks"
- v-model="VideoShow"
- :width="pxToRem(1600)"
- :close-on-click-modal="false"
- :destroy-on-close="true"
- >
- <div class="fullscreen">
- <video
- ref="fullscreenVideo"
- class="fullscreen-video"
- :src="currentVideoUrl"
- :style="{ width: pxToRem(1600), height: '80vh' }"
- controls
- autoplay
- ></video>
- </div>
- </el-dialog>
- </div>
+ <el-dialog
+ class="ztzf-dialog"
+ append-to-body
+ modal-class="detailsOfHistoricalTasks"
+ v-model="VideoShow"
+ :width="pxToRem(1600)"
+ :close-on-click-modal="false"
+ :destroy-on-close="true"
+ >
+ <div class="fullscreen">
+ <video
+ ref="fullscreenVideo"
+ class="fullscreen-video"
+ :src="currentVideoUrl"
+ :style="{ width: pxToRem(1567), height: '80vh' }"
+ controls
+ preload="auto"
+ @play="handleVideoPlay"
+ @ended="handleVideoEnded"
+ ></video>
+ </div>
+ </el-dialog>
+ </div>
- </template>
+ </template>
- </div>
- <el-image-viewer
- v-if="showViewer"
- :url-list="previewUrls"
- :initial-index="activeIndex"
- @close="showViewer = false"
- />
- </div>
+ </div>
+ <el-image-viewer
+ v-if="showViewer"
+ :url-list="previewUrls"
+ :initial-index="activeIndex"
+ @close="showViewer = false"
+ />
+ </div>
- <div class="content-right" v-if="isShow">
- <DeviceJobDetailsMap
- :detailsData="detailsData"
- :yuanImages="yuanImages"
- @showImageeclick="showImageeclick"
- :jobId="props.jobId"
- />
- <div class="content-map-popups"></div>
- </div>
- </div>
- </el-dialog>
+ <div class="content-right" v-if="isShow">
+ <DeviceJobDetailsMap
+ :detailsData="detailsData"
+ :yuanImages="yuanImages"
+ @showImageeclick="showImageeclick"
+ :jobId="props.jobId"
+ />
+ <div class="content-map-popups"></div>
+ </div>
+ </div>
+ </el-dialog>
<!-- 全景360 -->
<PanoramaPopup
v-if="'全景'"
@@ -169,46 +171,66 @@
const VideoShow = ref(false)
const showAll = ref(false) // 是否展示全部
let loadingData
+const fullscreenVideo = ref(null)
+// 视频播放事件处理
+const handleVideoPlay = (event) => {
+ if (event.target.playbackRate !== 0.75) {
+ event.target.playbackRate = 0.75
+
+ }
+}
+const handleVideoEnded = index => {
+ // 获取当前视频
+ const video = fullscreenVideo.value
+
+ // 重置视频播放时间为 0
+ video.currentTime = 0
+
+ // 重新加载视频
+ video.load()
+}
// 原图
const yuanImages = ref([])
function convertVideoUrlToThumbnail(videoUrl) {
- // 检查是否是有效的视频URL
- if (!videoUrl || typeof videoUrl !== 'string') {
- return videoUrl
- }
- // 替换文件扩展名
- return videoUrl.replace(/\.mp4$/, '_small.jpg')
+ // 检查是否是有效的视频URL
+ if (!videoUrl || typeof videoUrl !== 'string') {
+ return videoUrl
+ }
+ // 替换文件扩展名
+ return videoUrl.replace(/\.mp4$/, '_small.jpg')
}
const infoList = ref([
- { name: '任务编号', value: '', field: 'job_info_num' },
- { name: '任务名称', value: '', field: 'name' },
- { name: '任务类型', value: '', field: 'industry_type_str' },
- { name: '飞行事件', value: '', field: 'event_number' },
- { name: '所属机巢', value: '', field: 'device_names' },
- { name: '所属部门', value: '', field: 'dept_name' },
- { name: '任务时间', value: '', field: 'cycle_time_value' },
- { name: '关联算法', value: '', field: 'ai_type_str' },
- { name: '任务描述', value: '', field: 'remark' },
+ { name: '任务编号', value: '', field: 'job_info_num' },
+ { name: '任务名称', value: '', field: 'name' },
+ { name: '任务类型', value: '', field: 'industry_type_str' },
+ { name: '飞行事件', value: '', field: 'event_number' },
+ { name: '所属机巢', value: '', field: 'device_names' },
+ { name: '所属部门', value: '', field: 'dept_name' },
+ { name: '任务时间', value: '', field: 'cycle_time_value' },
+ { name: '关联算法', value: '', field: 'ai_type_str' },
{ name: '自定义识别区', value: '', field: 'enable_custom_area' },
- // { name: '任务执行次数', value: '', field: 'job_num' },
+ { name: '创建人', value: '', field: 'creator_name' },
+ { name: '任务描述', value: '', field: 'remark' },
+ // { name: '任务执行次数', value: '', field: 'job_num' },
])
// 机巢状态
const flystatus = ref('')
const detailsData = ref({
- id: null,
- remark: null,
- is_monitoring: null,
- industry_type_str: null,
- area_code: null,
- ai_type_str: null,
- begin_time: null,
- end_time: null,
- device_names: null,
- create_time: null,
- name: null,
- event_number: null,
- creator_name: null,
- way_lines: [],
+ id: null,
+ remark: null,
+ is_monitoring: null,
+ industry_type_str: null,
+ area_code: null,
+ ai_type_str: null,
+ enable_custom_area:null,
+ begin_time: null,
+ end_time: null,
+ device_names: null,
+ create_time: null,
+ name: null,
+ event_number: null,
+ creator_name: null,
+ way_lines: [],
})
// 任务成果
const total = ref(0)
@@ -218,10 +240,10 @@
provide('wayLineJodInfoId', wayLineJodInfoId)
// 可见数量
const visibleCount = computed(() =>
- showAll.value ? achievementList.value.length : Math.min(5, achievementList.value.length)
+ showAll.value ? achievementList.value.length : Math.min(5, achievementList.value.length)
)
const getAchievement = () => {
- if (!props.jobId) return
+ if (!props.jobId) return
const attachmentsParams = {
'wayLineJobId': props.jobId,
@@ -230,83 +252,83 @@
current: 1,
size: 2000,
}
- const pageParams = {
- current: 1,
- size: 2000,
- }
+ const pageParams = {
+ current: 1,
+ size: 2000,
+ }
aiImagesPage(attachmentsParams ).then(res => {
- achievementList.value = res.data.data.records.map(i => ({
- ...i,
- checked: false,
- smallUrl: i.resultType === 4 ? getzsSmallImg(i.link) : getSmallImg(i.link),
- showUrl: i.resultType === 4 ? getzsShowImg(i.link) : getShowImg(i.link),
- }))
- total.value = res.data.data.total
- // console.log('成果数据', res.data.data)
- })
+ achievementList.value = res.data.data.records.map(i => ({
+ ...i,
+ checked: false,
+ smallUrl: i.resultType === 4 ? getzsSmallImg(i.link) : getSmallImg(i.link),
+ showUrl: i.resultType === 4 ? getzsShowImg(i.link) : getShowImg(i.link),
+ }))
+ total.value = res.data.data.total
+ // console.log('成果数据', res.data.data)
+ })
}
const jumpMore = () => {
- ElMessage.warning('正在加急开发中...')
+ ElMessage.warning('正在加急开发中...')
}
const flightEvents = ref([])
const jobTimes = ref([])
const getDetails = () => {
- const params = {
- wayLineJobInfoId: props.wayLineJodInfoId,
- waylineJobId: props.waylineJobId,
- batchNo: props.batchNo
- }
- getJobDetails(params).then(res => {
- detailsData.value = res.data.data
- jobTimes.value = res.data.data.job_times
- infoList.value.forEach(item => {
- if (item.name === '任务频次') {
- const { rep_rule_type = '', rep_rule_val = '' } = detailsData?.value || {}
- item.value = rep_rule_type + ' -- ' + rep_rule_val
- } else {
- item.value = detailsData.value?.[item.field] || '--'
- }
- if (item.name === '飞行事件') {
- const { action_modes = [] } = detailsData?.value || {}
- flightEvents.value = action_modes.flatMap(({ actionActuatorFunc }) =>
- droneEventList.filter(({ value }) => actionActuatorFunc === value)
- )
- }
+ const params = {
+ wayLineJobInfoId: props.wayLineJodInfoId,
+ waylineJobId: props.waylineJobId,
+ batchNo: props.batchNo
+ }
+ getJobDetails(params).then(res => {
+ detailsData.value = res.data.data
+ jobTimes.value = res.data.data.job_times
+ infoList.value.forEach(item => {
+ if (item.name === '任务频次') {
+ const { rep_rule_type = '', rep_rule_val = '' } = detailsData?.value || {}
+ item.value = rep_rule_type + ' -- ' + rep_rule_val
+ } else {
+ item.value = detailsData.value?.[item.field] || '--'
+ }
+ if (item.name === '飞行事件') {
+ const { action_modes = [] } = detailsData?.value || {}
+ flightEvents.value = action_modes.flatMap(({ actionActuatorFunc }) =>
+ droneEventList.filter(({ value }) => actionActuatorFunc === value)
+ )
+ }
if (item.name === '自定义识别区') {
item.value = res.data.data.enable_custom_area ? '是': '否'
}
- getJobsAllFiles({
- wayLineJobId: detailsData.value.way_lines.map(item => item.job_id).join(','),
- resultTypes: [0, 2, 4, 5],
- }).then(result => {
- if (result.data.code !== 200) return
- yuanImages.value = result.data.data.records
+ getJobsAllFiles({
+ wayLineJobId: detailsData.value.way_lines.map(item => item.job_id).join(','),
+ resultTypes: [0, 2, 4, 5],
+ }).then(result => {
+ if (result.data.code !== 200) return
+ yuanImages.value = result.data.data.records
- })
- })
- // flystatus.value = res.data.data.ai_type_str
- })
+ })
+ })
+ // flystatus.value = res.data.data.ai_type_str
+ })
}
// 播放
const videoRef = ref(null);
const currentVideoIndex = ref(-1)
-const fullscreenVideo = ref(null)
+
const enterFullScreen = (index) => {
- currentVideoIndex.value = index
- VideoShow.value = true
+ currentVideoIndex.value = index
+ VideoShow.value = true
}
// 计算当前视频URL
const currentVideoUrl = computed(() => {
- return achievementList.value[currentVideoIndex.value]?.link || ''
+ return achievementList.value[currentVideoIndex.value]?.link || ''
})
// 关闭弹窗处理
const handleClose = () => {
- if (fullscreenVideo.value) {
- fullscreenVideo.value.pause()
- fullscreenVideo.value.currentTime = 0
- }
+ if (fullscreenVideo.value) {
+ fullscreenVideo.value.pause()
+ fullscreenVideo.value.currentTime = 0
+ }
}
// 下载
const downloadFun = async () => {
@@ -334,353 +356,353 @@
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 showViewer = ref(false)
const activeIndex = ref(0)
const previewUrls = ref([])
const showImageeclick = (list, index, categoriestype) => {
- if (categoriestype === 5) {
- panoramaParamsShow.value = true
- panoramaParamsUrl.value = list[0]
- } else {
- previewUrls.value = list
- activeIndex.value = 0
- showViewer.value = true
- }
+ if (categoriestype === 5) {
+ panoramaParamsShow.value = true
+ panoramaParamsUrl.value = list[0]
+ } else {
+ previewUrls.value = list
+ activeIndex.value = 0
+ showViewer.value = true
+ }
}
// 取消下载
function cancelDownload() {
- cancelDownloadApi({ type:'htlsrwxq' }).then(res =>{
- ElMessage.success('取消成功')
- }).catch(e =>{
+ cancelDownloadApi({ type:'htlsrwxq' }).then(res =>{
+ ElMessage.success('取消成功')
+ }).catch(e =>{
EventBus.emit('useGlobalWS-messageHandler', {biz_code: 'DOWNLOAD_PROGRESS',data:{status: 'CANCELLED',type:'htlsrwxq'}})
})
}
onMounted(() => {
- getDetails()
- getAchievement()
+ getDetails()
+ getAchievement()
})
</script>
<style lang="scss">
.detailsOfHistoricalTasks {
- .el-dialog {
- --el-dialog-margin-top: 5vh;
- }
+ .el-dialog {
+ --el-dialog-margin-top: 5vh;
+ }
- .el-pagination {
- justify-content: center;
- padding: 20px;
- }
+ .el-pagination {
+ justify-content: center;
+ padding: 20px;
+ }
- .el-dialog__body {
- height: 80vh;
- }
+ .el-dialog__body {
+ height: 80vh;
+ }
}
</style>
<style lang="scss" scoped>
.content {
- display: flex;
- height: 100%;
-.contentLeft {
- margin-left: 35px;
- margin-right: 24px;
- width: 1150px;
- overflow: auto;
+ display: flex;
+ height: 100%;
+ .contentLeft {
+ margin-left: 35px;
+ margin-right: 24px;
+ width: 1150px;
+ overflow: auto;
- .machineTableDetailsTitle {
- margin-bottom: 10px;
- // background: url('/src/assets/images/task/detailtitle.png') no-repeat center;
- border-bottom: 2px solid #e4e7ed;
- background-size: 100% 100%;
- img{
- width: 15px;
- height: 15px;}
- span {
- display: inline-block;
- margin-left: 10px;
- font-size: 16px;
- // color: #0282ff;
- color: #303133;
- line-height: 20px;
- text-align: left;
- margin-bottom: 8px;
- }
- }
+ .machineTableDetailsTitle {
+ margin-bottom: 10px;
+ // background: url('/src/assets/images/task/detailtitle.png') no-repeat center;
+ border-bottom: 2px solid #e4e7ed;
+ background-size: 100% 100%;
+ img{
+ width: 15px;
+ height: 15px;}
+ span {
+ display: inline-block;
+ margin-left: 10px;
+ font-size: 16px;
+ // color: #0282ff;
+ color: #303133;
+ line-height: 20px;
+ text-align: left;
+ margin-bottom: 8px;
+ }
+ }
- .devicetitle {
- margin-bottom: 16px;
- // background: url('/src/assets/images/task/detailtitle.png') no-repeat center;
- border-bottom: 2px solid #e4e7ed;
- background-size: 100% 100%;
- display: flex;
- justify-content: space-between;
- align-content: center;
- .rightBox{
- display: flex;
- align-items: center;
- padding-right: 10px;
- gap: 0 10px;
+ .devicetitle {
+ margin-bottom: 16px;
+ // background: url('/src/assets/images/task/detailtitle.png') no-repeat center;
+ border-bottom: 2px solid #e4e7ed;
+ background-size: 100% 100%;
+ display: flex;
+ justify-content: space-between;
+ align-content: center;
+ .rightBox{
+ display: flex;
+ align-items: center;
+ padding-right: 10px;
+ gap: 0 10px;
- .downloadBtn{
- position: relative;
- display: flex;
- align-items: center;
- justify-content: center;
- height: 28px;
- padding: 0 15px;
- background: rgba(28, 92, 255, 0.14);
- border-radius: 4px 4px 4px 4px;
- border: 1px solid #1c5cff;
- cursor: pointer;
- color: #1C5CFF;
+ .downloadBtn{
+ position: relative;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ height: 28px;
+ padding: 0 15px;
+ background: rgba(28, 92, 255, 0.14);
+ border-radius: 4px 4px 4px 4px;
+ border: 1px solid #1c5cff;
+ cursor: pointer;
+ color: #1C5CFF;
- .downloadBtnText{
- display: flex;
- align-items: center;
- gap: 5px;
- z-index: 5;
- }
- .el-progress{
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
+ .downloadBtnText{
+ display: flex;
+ align-items: center;
+ gap: 5px;
+ z-index: 5;
+ }
+ .el-progress{
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
- :deep(){
- .el-progress-bar__outer{
- height: 28px !important;
- border-radius: 0 !important;
- background: transparent !important;
+ :deep(){
+ .el-progress-bar__outer{
+ height: 28px !important;
+ border-radius: 0 !important;
+ background: transparent !important;
- .el-progress-bar__inner{
- border-radius: 0 !important;
- }
- }
- }
- }
+ .el-progress-bar__inner{
+ border-radius: 0 !important;
+ }
+ }
+ }
+ }
- }
- }
- img{
- width: 15px;
- height: 15px;}
- p {
- display: inline-block;
- margin-left: 10px;
- font-size: 16px;
- color: #363636;
- line-height: 20px;
- text-align: left;
- margin-bottom: 8px;
+ }
+ }
+ img{
+ width: 15px;
+ height: 15px;}
+ p {
+ display: inline-block;
+ margin-left: 10px;
+ font-size: 16px;
+ color: #363636;
+ line-height: 20px;
+ text-align: left;
+ margin-bottom: 8px;
- span {
- font-size: 26px;
- color: #0282ff;
- font-weight: bold;
- }
- }
+ span {
+ font-size: 26px;
+ color: #0282ff;
+ font-weight: bold;
+ }
+ }
- .more {
- color: #2f9dff;
- font-size: 14px;
- padding-top: 5px;
- cursor: pointer;
- }
- }
+ .more {
+ color: #2f9dff;
+ font-size: 14px;
+ padding-top: 5px;
+ cursor: pointer;
+ }
+ }
- .infoBox {
- display: flex;
- justify-content: space-between;
+ .infoBox {
+ display: flex;
+ justify-content: space-between;
- .itemBoxLeft {
- flex: 1;
- display: grid;
- grid-template-columns: repeat(2, 1fr);
- column-gap: 10px;
- /* 只设置列间距 */
- row-gap: 0;
- /* 取消行间距 */
- padding: 10px;
- font-size: 14px;
+ .itemBoxLeft {
+ flex: 1;
+ display: grid;
+ grid-template-columns: repeat(2, 1fr);
+ column-gap: 10px;
+ /* 只设置列间距 */
+ row-gap: 0;
+ /* 取消行间距 */
+ padding: 10px;
+ font-size: 14px;
- .itemBox {
- display: flex;
- align-items: center;
- background: #fff;
- height: 43px;
- border-top: 2px solid #EFEFEF;
+ .itemBox {
+ display: flex;
+ align-items: center;
+ background: #fff;
+ height: 43px;
+ border-top: 2px solid #EFEFEF;
- }
+ }
- }
+ }
- .itemCon:nth-last-child(-n+2) {
- border-bottom: 2px solid #EFEFEF;
- }
+ .itemCon:nth-last-child(-n+2) {
+ border-bottom: 2px solid #EFEFEF;
+ }
- .itemBox:nth-last-child(-n+2) .itemTitle {
- border-bottom: 1px solid #EFEFEF;
- }
+ .itemBox:nth-last-child(-n+2) .itemTitle {
+ border-bottom: 1px solid #EFEFEF;
+ }
- .itemTitle {
- color: #0B1D38;
- width: 26%;
- text-align: right;
- background: #F3F6FF;
- height: 43px;
- line-height: 43px;
- padding-right: 10px;
- border-top: 1px solid #EFEFEF;
- }
+ .itemTitle {
+ color: #0B1D38;
+ width: 26%;
+ text-align: right;
+ background: #F3F6FF;
+ height: 43px;
+ line-height: 43px;
+ padding-right: 10px;
+ border-top: 1px solid #EFEFEF;
+ }
- .itemValue {
- font-size: 14px;
- color: #747e91;
- text-align: center;
- width: 74%;
+ .itemValue {
+ font-size: 14px;
+ color: #747e91;
+ text-align: center;
+ width: 74%;
- }
+ }
- .flightEvents {
- display: flex;
- flex-wrap: wrap;
- gap: 10px 10px;
- width: 74%;
- justify-content: center;
+ .flightEvents {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 10px 10px;
+ width: 74%;
+ justify-content: center;
- img {
- width: 30px;
- height: 30px;
- }
- }
+ img {
+ width: 30px;
+ height: 30px;
+ }
+ }
- }
+ }
- .imgListBox {
- display: grid;
- grid-template-columns: repeat(5, 1fr);
- gap: 10px;
- margin-bottom: 49px;
+ .imgListBox {
+ display: grid;
+ grid-template-columns: repeat(5, 1fr);
+ gap: 10px;
+ margin-bottom: 49px;
- > * {
- width: 100%;
- height: 200px;
- position: relative;
- border-radius: 0px 0px 4px 4px;
- overflow: hidden;
- }
- :deep(.el-checkbox__inner) {
- width: 17px !important;
- height: 17px !important;
- background: rgba(37, 36, 36, 0.63) !important;
- border-radius: 4px 4px 4px 4px;
- border: 1px solid #ffffff !important;
- }
- .el-checkbox {
- position: absolute;
- top: 0;
- left: 6px;
- }
- :deep(.el-checkbox__inner:after) {
- position: absolute;
- left: 50% !important;
- top: 40% !important;
- transform: translate(-50%, -50%) rotate(45deg) !important;
- }
- :deep(.el-checkbox.is-checked .el-checkbox__inner) {
- background-color: #09297b !important;
- border-color: #1c5cff !important;
- }
- .el-image {
- width: 100%;
- height: 100%;
- cursor: pointer;
- position: relative;
- }
+ > * {
+ width: 100%;
+ height: 200px;
+ position: relative;
+ border-radius: 0px 0px 4px 4px;
+ overflow: hidden;
+ }
+ :deep(.el-checkbox__inner) {
+ width: 17px !important;
+ height: 17px !important;
+ background: rgba(37, 36, 36, 0.63) !important;
+ border-radius: 4px 4px 4px 4px;
+ border: 1px solid #ffffff !important;
+ }
+ .el-checkbox {
+ position: absolute;
+ top: 0;
+ left: 6px;
+ }
+ :deep(.el-checkbox__inner:after) {
+ position: absolute;
+ left: 50% !important;
+ top: 40% !important;
+ transform: translate(-50%, -50%) rotate(45deg) !important;
+ }
+ :deep(.el-checkbox.is-checked .el-checkbox__inner) {
+ background-color: #09297b !important;
+ border-color: #1c5cff !important;
+ }
+ .el-image {
+ width: 100%;
+ height: 100%;
+ cursor: pointer;
+ position: relative;
+ }
- .quanjing {
- width: 100%;
- height: 100%;
- object-fit: cover;
- cursor: pointer;
- position: relative;
- }
+ .quanjing {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ cursor: pointer;
+ position: relative;
+ }
- .videotime {
- width: 100%;
- height: 100%;
- position: relative;
+ .videotime {
+ width: 100%;
+ height: 100%;
+ position: relative;
- .videoDisplay {
- width: 100%;
- height: 100%;
- object-fit: cover;
- }
- }
- .itemName {
- position: absolute;
- bottom: 0;
- left: 0;
- height: 23px;
- width: 100%;
- background: rgba(22, 22, 22, 0.68);
- border-radius: 0px 0px 4px 4px;
- font-family: Source Han Sans CN, Source Han Sans CN;
- font-weight: 400;
- font-size: 14px;
- color: #ffffff;
- line-height: 23px;
- z-index: 9;
- padding: 0 6px;
- }
- }
+ .videoDisplay {
+ width: 100%;
+ height: 100%;
+ object-fit: cover;
+ }
+ }
+ .itemName {
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ height: 23px;
+ width: 100%;
+ background: rgba(22, 22, 22, 0.68);
+ border-radius: 0px 0px 4px 4px;
+ font-family: Source Han Sans CN, Source Han Sans CN;
+ font-weight: 400;
+ font-size: 14px;
+ color: #ffffff;
+ line-height: 23px;
+ z-index: 9;
+ padding: 0 6px;
+ }
+ }
-.videobutton {
- position: absolute;
- top: 40%;
- left: 50%;
- transform: translate(-50%);
- cursor: pointer;
- width: 40px;
- height: 40px;
- display: inline-block;
- background: #999;
- border-radius: 50%;
- }
- .videoDisplay {
- display: flex;
- flex-wrap: wrap;
- width: 200px;
- height: 200px;
+ .videobutton {
+ position: absolute;
+ top: 40%;
+ left: 50%;
+ transform: translate(-50%);
+ cursor: pointer;
+ width: 40px;
+ height: 40px;
+ display: inline-block;
+ background: #999;
+ border-radius: 50%;
+ }
+ .videoDisplay {
+ display: flex;
+ flex-wrap: wrap;
+ width: 200px;
+ height: 200px;
- }
+ }
- .videotime {
- position: relative;
- }
+ .videotime {
+ position: relative;
+ }
- }
+ }
- .content-right {
- position: relative;
- width: 0;
- flex-grow: 1;
- background: #19ad8d;
- margin-right: 17px;
- overflow: hidden;
+ .content-right {
+ position: relative;
+ width: 0;
+ flex-grow: 1;
+ background: #19ad8d;
+ margin-right: 17px;
+ overflow: hidden;
- .content-map-popups {
- pointer-events: none;
+ .content-map-popups {
+ pointer-events: none;
- > * {
- pointer-events: auto !important;
- }
- }
- }
+ > * {
+ pointer-events: auto !important;
+ }
+ }
+ }
}
</style>
--
Gitblit v1.9.3