feat:视频列表新增分页

This commit is contained in:
zjc
2025-01-22 18:45:58 +08:00
parent f27f34bcfb
commit 13da8fc106

View File

@@ -40,7 +40,12 @@
</div> </div>
<div v-if="videoLog == 1" class="video-wrapper"> <div v-if="videoLog == 1" class="video-wrapper">
<div class="video-list"> <div
class="video-list"
v-infinite-scroll="getVideoList"
:infinite-scroll-immediate="false"
:infinite-scroll-distance="50"
>
<div <div
class="video-item" class="video-item"
v-for="(item, index) in videoList" v-for="(item, index) in videoList"
@@ -130,11 +135,17 @@
let showNav = ref(true) let showNav = ref(true)
let videoLog = ref(1) let videoLog = ref(1)
let videoRef = ref() let videoRef = ref()
let scenicSpotId = ref('')
let regionList = ref() let regionList = ref()
let monitorChange = null let monitorChange = null
let videoSrc = ref('') let videoSrc = ref('')
let show = ref(false) let show = ref(false)
let loading = ref(false)
let params = reactive({
pageNum: 1,
pageSize: 16,
businessScenicArea: '',
businessVideoDisplayPosition: ''
})
// const postVideoRemain = async () => { // const postVideoRemain = async () => {
// setInterval(() => { // setInterval(() => {
@@ -170,6 +181,7 @@
const handleNav = (e) => { const handleNav = (e) => {
if (current.value == e) return if (current.value == e) return
videoLog.value = 1 videoLog.value = 1
params.pageNum = 1
videoList.value = [] videoList.value = []
current.value = e current.value = e
getVideoList() getVideoList()
@@ -203,37 +215,44 @@
videoSrc.value = res.data.url videoSrc.value = res.data.url
} }
const getVideoList = async () => { const getVideoList = async () => {
let res = await getVideoListApi({ params.businessVideoDisplayPosition = navList.value[current.value].dictValue
businessScenicArea: scenicSpotId.value, let res = await getVideoListApi(params)
businessVideoDisplayPosition: navList.value[current.value].dictValue if (res.data.length > 0) {
}) let list = res.data
videoList.value = res.data list.forEach(async (i) => {
// postVideoRemain()
nextTick(() => {
videoList.value.forEach(async (item, index) => {
const video = document.getElementById(`monitorVideo${index}`)
let res = await postRefreshApi({ let res = await postRefreshApi({
type: 'hls', type: 'hls',
businessVideoDisplayPosition: item.businessVideoDisplayPosition, businessVideoDisplayPosition: i.businessVideoDisplayPosition,
cameraIndexCode: item.cameraIndexCode cameraIndexCode: i.cameraIndexCode
}) })
item.hlsUrl = res.data.hlsUrl return {
const hls = new Hls({ ...i,
maxBufferLength: 10, // 最大缓冲长度(秒) hlsUrl: res.data.hlsUrl
maxMaxBufferLength: 15, // 缓冲区长度的上限 }
maxBufferSize: 30 * 1000 * 1000 // 最大缓冲大小(字节) })
}) videoList.value = [...videoList.value, ...res.data]
hls.loadSource(res.data.hlsUrl) params.pageNum++
hls.attachMedia(video) // postVideoRemain()
hls.on(Hls.Events.MANIFEST_PARSED, () => { nextTick(() => {
video.play() videoList.value.forEach(async (x, index) => {
const video = document.getElementById(`monitorVideo${index}`)
const hls = new Hls({
maxBufferLength: 10, // 最大缓冲长度(秒)
maxMaxBufferLength: 15, // 缓冲区长度的上限
maxBufferSize: 30 * 1000 * 1000 // 最大缓冲大小(字节)
})
hls.loadSource(x.hlsUrl)
hls.attachMedia(video)
hls.on(Hls.Events.MANIFEST_PARSED, () => {
video.play()
})
}) })
}) })
}) }
} }
const getVideoType = async (id) => { const getVideoType = async (id) => {
let res = await getVideoTypeApi({ let res = await getVideoTypeApi({
businessScenicArea: scenicSpotId.value businessScenicArea: params.businessScenicArea
}) })
if (res.data.length > 0) { if (res.data.length > 0) {
navList.value = res.data navList.value = res.data
@@ -244,15 +263,23 @@
} }
} }
const getVideoRegions = async () => { const getVideoRegions = async () => {
let res = await getVideoRegionsApi({ if (loading.value) return
businessScenicArea: scenicSpotId.value loading.value = true
}) try {
regionList.value = res.data let res = await getVideoRegionsApi({
console.log(regionList.value, 'regionList') businessScenicArea: params.businessScenicArea
})
regionList.value = res.data
loading.value = false
} catch (error) {
loading.value = false
}
} }
const onMonitorChange = () => { const onMonitorChange = () => {
monitorChange = PubSub.subscribe('monitorChange', (res, data) => { monitorChange = PubSub.subscribe('monitorChange', (res, data) => {
scenicSpotId.value = data.scenicSpotId params.businessScenicArea = data.scenicSpotId
params.pageNum = 1
videoList.value = []
regionList.value = [] regionList.value = []
getVideoType() getVideoType()
getVideoRegions() getVideoRegions()