wx-starlock/pages/p2p/videoEdit.vue
2025-04-09 18:05:03 +08:00

146 lines
3.6 KiB
Vue

<template>
<view>
<view class="flex justify-between items-center px-2.5 py-2">
<view>已选{{ selectList.length }}</view>
<view @click="selectAll">{{ isSelectAll ? '取消全选' : '全选' }}</view>
</view>
<view class="mx-2.5 pb-25">
<VideoList ref="videoListRef" type="select" @change="handleChange" />
</view>
<view class="fixed bottom-0 flex justify-center w-full w-300 mx-auto bg-white">
<view class="flex justify-between w-200 mr-4 h-160">
<view @click="handleDownload">
<view class="flex flex-col items-center">
<image
src="https://oss-lock.xhjcn.ltd/mp/icon_video_download.png"
class="w-50 h-50"
></image>
<view class="mt-2">下载</view>
</view>
</view>
<view @click="handleDelete">
<view class="flex flex-col items-center">
<image
src="https://oss-lock.xhjcn.ltd/mp/icon_video_delete.png"
class="w-50 h-50"
></image>
<view class="mt-2">删除</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script setup>
import { getCurrentInstance, ref } from 'vue'
import VideoList from './VideoList.vue'
import { deleteVideo } from '@/api/sdk'
const instance = getCurrentInstance().proxy
const eventChannel = instance.getOpenerEventChannel()
const videoListRef = ref(null)
const isSelectAll = ref(false)
const selectList = ref([])
const pending = ref(false)
const handleChange = list => {
selectList.value = list
}
const selectAll = () => {
isSelectAll.value = !isSelectAll.value
videoListRef.value.selectAll(isSelectAll.value)
}
const handleDownload = () => {
console.log('下载')
if (selectList.value.length === 0) {
uni.showToast({
title: '请选择要下载的视频',
icon: 'none'
})
return
}
if (selectList.value.length > 1) {
uni.showToast({
title: '视频暂不支持批量下载',
icon: 'none'
})
return
}
uni.showLoading({
title: '下载中'
})
pending.value = true
const url = selectList.value[0].videoUrl
uni.downloadFile({
url,
success: res => {
uni.saveVideoToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
uni.hideLoading()
pending.value = false
uni.showToast({
title: '下载成功',
icon: 'none'
})
},
fail: () => {
uni.hideLoading()
pending.value = false
uni.showToast({
title: '下载失败',
icon: 'none'
})
}
})
},
fail: () => {
uni.hideLoading()
pending.value = false
uni.showToast({
title: '下载失败',
icon: 'none'
})
}
})
}
const handleDelete = async () => {
if (selectList.value.length === 0) {
uni.showToast({
title: '请选择要删除的视频',
icon: 'none'
})
return
}
uni.showLoading({
title: '删除中'
})
pending.value = true
const idList = selectList.value.map(item => item.recordId)
const { code, message } = await deleteVideo(idList)
uni.hideLoading()
pending.value = false
if (code === 0) {
videoListRef.value.refresh()
eventChannel.emit('refresh')
uni.showToast({
title: '删除成功',
icon: 'success'
})
} else {
uni.showToast({
title: message,
icon: 'none'
})
}
}
</script>