Merge remote-tracking branch 'origin/master'
3 files modified
1 files added
| New file |
| | |
| | | <script setup> |
| | | const props = defineProps({ |
| | | width: { |
| | | type: String, |
| | | default: '800' |
| | | }, |
| | | modelValue: { |
| | | type: Boolean, |
| | | default: false |
| | | }, |
| | | playUrl: { |
| | | type: String, |
| | | default: '' |
| | | }, |
| | | title:{ |
| | | type: String, |
| | | default: '视频播放' |
| | | } |
| | | }) |
| | | |
| | | const emit = defineEmits(['update:modelValue']) |
| | | const handleClose = () => { |
| | | emit('update:modelValue', false) |
| | | } |
| | | </script> |
| | | |
| | | <template> |
| | | <el-dialog |
| | | class="gd-dialog" |
| | | :title="props.title" |
| | | append-to-body |
| | | v-model="props.modelValue" |
| | | width="60%" |
| | | destroy-on-close |
| | | :close-on-click-modal="false" |
| | | @close="handleClose" |
| | | > |
| | | <video ref="videoRefs" controls preload="auto" :src="props.playUrl"> |
| | | <source :src="props.playUrl" type="video/mp4" /> |
| | | </video> |
| | | <!-- <el-carousel trigger="click" :autoplay="false" @change="handleCarouselChange">--> |
| | | <!-- <el-carousel-item v-for="(item, index) in videoList" :key="index">--> |
| | | <!-- <video ref="videoRefs" controls preload="auto" :src="currentVideoUrl" @play="handleVideoPlay" @ended="handleVideoEnded(index)">--> |
| | | <!-- <source :src="item.smallUrl" type="video/mp4" />--> |
| | | <!-- </video>--> |
| | | <!-- </el-carousel-item>--> |
| | | <!-- </el-carousel>--> |
| | | </el-dialog> |
| | | </template> |
| | | |
| | | <style scoped lang="scss"> |
| | | video { |
| | | height: 600px; |
| | | width: 100%; |
| | | } |
| | | </style> |
| | |
| | | <div class="imgBox"> |
| | | <div v-for="item in taskResultList"> |
| | | <el-image |
| | | v-if="item.resultUrl" |
| | | v-if="item.attachmentType === 0 && item.resultUrl" |
| | | :src="item.resultUrl" |
| | | :preview-src-list="[item.resultUrl]" |
| | | fit="cover" |
| | | preview-teleported |
| | | /> |
| | | <div class="video-btn" v-if="item.attachmentType === 1 && item.resultUrl" @click="videoClick(item)"> |
| | | <el-icon :size="30" color="#fff"> |
| | | <VideoPlay /> |
| | | </el-icon> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | |
| | | @success="rejectSuccess" |
| | | /> |
| | | </el-dialog> |
| | | |
| | | <VideoPlayDialog |
| | | ref="videoPlayDialogRef" |
| | | v-if="VideoShow" |
| | | v-model="VideoShow" |
| | | :playUrl="currentVideo.resultUrl" |
| | | > |
| | | </VideoPlayDialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | try { |
| | | const res = await gdTaskResultListApi({ patrolTaskId: formData.value.id }) |
| | | taskResultList.value = res?.data?.data ?? [] |
| | | console.log(taskResultList.value, '8989') |
| | | } finally { |
| | | } |
| | | } |
| | | import { ArrowLineMaterialProperty } from '@/utils/cesium/Material' |
| | | import OrderStepBar from '@/views/orderView/orderManage/orderManage/OrderStepBar.vue' |
| | | import VideoPlayDialog from '@/components/VideoPlayDialog.vue' |
| | | let arrowLineMaterialProperty = new ArrowLineMaterialProperty({ |
| | | color: new Cesium.Color(128 / 255, 215 / 255, 255 / 255, 1), |
| | | directionColor: new Cesium.Color(1, 1, 1, 1), |
| | |
| | | } |
| | | } |
| | | |
| | | // 点击视频 |
| | | let VideoShow = ref(false) |
| | | let currentVideo = ref({}) |
| | | function videoClick(row) { |
| | | VideoShow.value = true |
| | | currentVideo.value = row |
| | | } |
| | | |
| | | // 初始化地图实例 |
| | | function initMap() { |
| | | if (viewer) return |
| | |
| | | width: 100%; |
| | | height: 100%; |
| | | } |
| | | .video-btn { |
| | | width: 100%; |
| | | height: 100%; |
| | | background-color: #9E9E9E; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | :deep(.el-timeline-item__timestamp) { |
| | | font-size: 12px; |
| | |
| | | v-model="searchParams.patrolTaskIds" |
| | | placeholder="请选择" |
| | | clearable |
| | | |
| | | |
| | | multiple |
| | | @change="handleSearch" |
| | | > |
| | |
| | | /> |
| | | </el-select> |
| | | </el-form-item> |
| | | |
| | | |
| | | <el-form-item > |
| | | <el-button :icon="RefreshRight" @click="resetForm"></el-button> |
| | | <el-button :icon="Search" color="#383874" @click="handleSearch"></el-button> |
| | |
| | | <el-table class="gd-table" :data="list" @selection-change="handleSelectionChange"> |
| | | <el-table-column type="selection" width="46" /> |
| | | <el-table-column type="index" label="序号" width="80" /> |
| | | <el-table-column label="图片" > |
| | | <el-table-column label="图片/视频" > |
| | | <template v-slot="{ row }"> |
| | | <el-image |
| | | v-if="row.resultUrl" |
| | | v-if="row.attachmentType ===0 && row.resultUrl" |
| | | :src="row.resultUrl" |
| | | :preview-src-list="[row.resultUrl]" |
| | | fit="cover" |
| | | style="width: 80px; height: 80px; border-radius: 4px;" |
| | | preview-teleported |
| | | /> |
| | | <span v-else>-</span> |
| | | <div class="video-btn" v-if="row.attachmentType === 1 && row.resultUrl" @click="videoClick(row)"> |
| | | <el-icon :size="30" color="#fff"> |
| | | <VideoPlay /> |
| | | </el-icon> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="patrolTaskName" show-overflow-tooltip label="巡查任务名称" /> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <VideoPlayDialog |
| | | ref="videoPlayDialogRef" |
| | | v-if="VideoShow" |
| | | v-model="VideoShow" |
| | | :playUrl="currentVideo.resultUrl" |
| | | > |
| | | </VideoPlayDialog> |
| | | </template> |
| | | |
| | | <script setup> |
| | |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import dayjs from 'dayjs' |
| | | import VideoPlayDialog from '@/components/VideoPlayDialog.vue' |
| | | |
| | | const props = defineProps({ |
| | | workOrderId: { |
| | |
| | | const res = await gdTaskResultPageApi({ |
| | | ...searchParams.value, |
| | | workOrderId: props.workOrderId, |
| | | patrolTaskIds: searchParams.value.patrolTaskIds.length |
| | | ? searchParams.value.patrolTaskIds.join(',') |
| | | patrolTaskIds: searchParams.value.patrolTaskIds.length |
| | | ? searchParams.value.patrolTaskIds.join(',') |
| | | : '' |
| | | }) |
| | | list.value = res?.data?.data?.records || [] |
| | |
| | | } |
| | | } |
| | | |
| | | // 点击视频 |
| | | let VideoShow = ref(false) |
| | | let currentVideo = ref({}) |
| | | function videoClick(row) { |
| | | VideoShow.value = true |
| | | currentVideo.value = row |
| | | } |
| | | |
| | | // 监听 workOrderId 变化 |
| | | watch( |
| | | () => props.workOrderId, |
| | |
| | | display: flex; |
| | | flex-direction: column; |
| | | overflow: hidden; |
| | | |
| | | |
| | | .gd-table-container { |
| | | flex: 1; |
| | | overflow: hidden; |
| | | display: flex; |
| | | flex-direction: column; |
| | | |
| | | |
| | | .gd-table-content { |
| | | flex: 1; |
| | | overflow: auto; |
| | | } |
| | | .video-btn { |
| | | width: 80px; |
| | | height: 80px; |
| | | background-color: #9E9E9E; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | border-radius: 4px; |
| | | cursor: pointer; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | </style> |
| | | </style> |
| | |
| | | tenantId: "000000", |
| | | deptId: "", |
| | | roleId: "", |
| | | username: loginFormGd.value.username, |
| | | password: loginFormGd.value.password, |
| | | username: loginForm.value.username, |
| | | password: loginForm.value.username === 'admin' ? 'admin' : 'jadk@2026', |
| | | type: "account", |
| | | code: "", |
| | | key: "", |