|
|
|
@ -1,6 +1,6 @@ |
|
|
|
<template> |
|
|
|
<div class="cloud-record-page app_content"> |
|
|
|
<van-nav-bar title="执法监督码" left-arrow @click-left="onBack" /> |
|
|
|
<!-- <van-nav-bar title="执法监督码" left-arrow @click-left="onBack" /> --> |
|
|
|
|
|
|
|
<div class="cloud-record-body"> |
|
|
|
<van-tabs |
|
|
|
@ -29,7 +29,7 @@ |
|
|
|
<div class="section-card"> |
|
|
|
<div class="section-title">云视频</div> |
|
|
|
<div v-if="cloudVideo" class="video-wrap" @click="showVideoPreview = true"> |
|
|
|
<video :src="cloudVideo" muted preload="metadata" class="video-thumb" /> |
|
|
|
<video :src="cloudVideo" muted preload="metadata" class="video-thumb" @loadedmetadata="onVideoLoadedMeta" /> |
|
|
|
<van-icon name="play-circle-o" class="play-icon" /> |
|
|
|
</div> |
|
|
|
<div v-else class="media-placeholder">暂无视频</div> |
|
|
|
@ -107,6 +107,19 @@ const applyDetailData = (data) => { |
|
|
|
recordId.value = data.id || '' |
|
|
|
} |
|
|
|
|
|
|
|
// 视频 metadata 加载后,seek 到 0.5s 跳过开头黑帧作为封面 |
|
|
|
const onVideoLoadedMeta = (e) => { |
|
|
|
const v = e.target |
|
|
|
if (!v || !isFinite(v.duration)) return |
|
|
|
// 跳过开头黑帧:取 0.5s 与视频时长一半的较小值,避免短视频越界 |
|
|
|
const target = Math.min(0.5, v.duration / 2) |
|
|
|
try { |
|
|
|
v.currentTime = target |
|
|
|
} catch (err) { |
|
|
|
// 忽略 seek 异常 |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const fetchDetail = async () => { |
|
|
|
const taskId = route.query.id |
|
|
|
if (!taskId) { |
|
|
|
|