feat: 视频上传处理

This commit is contained in:
rd
2025-08-13 17:55:39 +08:00
parent 028162e899
commit 7f6999b5de
4 changed files with 52 additions and 20 deletions

View File

@ -187,7 +187,7 @@ export default {
action="/" action="/"
draggable draggable
customRequest={handleUpload} customRequest={handleUpload}
accept=".xlsx,.xls,.docx,.doc" accept=".xlsx,.xls,.docx,.doc,.mp4,.mov,.avi,.flv,.wmv"
show-file-list={false} show-file-list={false}
> >
{{ {{

View File

@ -8,19 +8,20 @@ import UploadSuccessModal from './upload-success-modal.vue';
import { EnumManuscriptType } from '@/views/creative-generation-workshop/manuscript/list/constants'; import { EnumManuscriptType } from '@/views/creative-generation-workshop/manuscript/list/constants';
import { postWorksBatchWriter } from '@/api/all/generationWorkshop-writer.ts'; import { postWorksBatchWriter } from '@/api/all/generationWorkshop-writer.ts';
import { glsWithCatch, rlsWithCatch, slsWithCatch } from '@/utils/stroage.ts'; import { glsWithCatch, rlsWithCatch, slsWithCatch } from '@/utils/stroage.ts';
import { formatDuration, formatFileSize, convertVideoUrlToCoverUrl } from '@/utils/tools';
import icon1 from '@/assets/img/creative-generation-workshop/icon-photo.png'; import icon1 from '@/assets/img/creative-generation-workshop/icon-photo.png';
import icon2 from '@/assets/img/creative-generation-workshop/icon-video.png'; import icon2 from '@/assets/img/creative-generation-workshop/icon-video.png';
const generateMockData = (count = 4) => // const generateMockData = (count = 4) =>
Array.from({ length: count }, (_, i) => ({ // Array.from({ length: count }, (_, i) => ({
id: `${i + 1}`, // id: `${i + 1}`,
title: `标题${i + 1}`, // title: `标题${i + 1}`,
content: '挖到宝了!这个平价好物让我素颜出门都自信✨挖到宝了!这个平价好物让我素颜出门都自信✨', // content: '挖到宝了!这个平价好物让我素颜出门都自信✨挖到宝了!这个平价好物让我素颜出门都自信✨',
type: i % 2 === 0 ? EnumManuscriptType.Image : EnumManuscriptType.Video, // type: i % 2 === 0 ? EnumManuscriptType.Image : EnumManuscriptType.Video,
files: [], // files: [],
videoInfo: cloneDeep(INITIAL_VIDEO_INFO), // videoInfo: cloneDeep(INITIAL_VIDEO_INFO),
})); // }));
export default { export default {
components: { components: {
@ -183,10 +184,25 @@ export default {
} }
}; };
const getData = () => { const getData = () => {
const _works = JSON.parse(glsWithCatch('writerWaitUploadWorks') ?? '[]')?.map((item) => ({ const _works = JSON.parse(glsWithCatch('writerWaitUploadWorks') ?? '[]')?.map((item) => {
...item, const { type, files } = item;
videoInfo: item?.videoInfo ? cloneDeep(item.videoInfo) : cloneDeep(INITIAL_VIDEO_INFO),
})); const _data = { ...item, videoInfo: cloneDeep(INITIAL_VIDEO_INFO) };
// 初始化视频数据
if (type === EnumManuscriptType.Video && files.length) {
_data.videoInfo.uploadStatus = 'end';
const { name, size, duration, url } = files[0];
_data.videoInfo.name = name;
_data.videoInfo.size = formatFileSize(size);
_data.videoInfo.time = formatDuration(duration);
_data.videoInfo.poster = convertVideoUrlToCoverUrl(url);
}
return _data
});
works.value = _works; works.value = _works;
selectCardInfo.value = cloneDeep(_works[0] ?? {}); selectCardInfo.value = cloneDeep(_works[0] ?? {});
}; };

View File

@ -219,7 +219,7 @@ export default {
action="/" action="/"
draggable draggable
customRequest={handleUpload} customRequest={handleUpload}
accept=".xlsx,.xls,.docx,.doc" accept=".xlsx,.xls,.docx,.doc,.mp4,.mov,.avi,.flv,.wmv"
show-file-list={false} show-file-list={false}
> >
{{ {{

View File

@ -8,6 +8,7 @@ import UploadSuccessModal from './upload-success-modal.vue';
import { EnumManuscriptType } from '@/views/creative-generation-workshop/manuscript/list/constants'; import { EnumManuscriptType } from '@/views/creative-generation-workshop/manuscript/list/constants';
import { postWorksBatch } from '@/api/all/generationWorkshop.ts'; import { postWorksBatch } from '@/api/all/generationWorkshop.ts';
import { glsWithCatch, rlsWithCatch, slsWithCatch } from '@/utils/stroage.ts'; import { glsWithCatch, rlsWithCatch, slsWithCatch } from '@/utils/stroage.ts';
import { formatDuration, formatFileSize, convertVideoUrlToCoverUrl } from '@/utils/tools';
import icon1 from '@/assets/img/creative-generation-workshop/icon-photo.png'; import icon1 from '@/assets/img/creative-generation-workshop/icon-photo.png';
import icon2 from '@/assets/img/creative-generation-workshop/icon-video.png'; import icon2 from '@/assets/img/creative-generation-workshop/icon-video.png';
@ -83,7 +84,7 @@ export default {
} else { } else {
AMessage.success('上传成功'); AMessage.success('上传成功');
if (action === 'uploadAndCheck') { if (action === 'uploadAndCheck') {
slsWithCatch('manuscriptCheckIds',data); slsWithCatch('manuscriptCheckIds', data);
router.push({ name: 'ManuscriptCheck' }); router.push({ name: 'ManuscriptCheck' });
} else { } else {
router.push({ name: 'ManuscriptList' }); router.push({ name: 'ManuscriptList' });
@ -183,10 +184,25 @@ export default {
} }
}; };
const getData = () => { const getData = () => {
const _works = JSON.parse(glsWithCatch('waitUploadWorks') ?? '[]')?.map((item) => ({ const _works = JSON.parse(glsWithCatch('waitUploadWorks') ?? '[]')?.map((item) => {
...item, const { type, files } = item;
videoInfo: item?.videoInfo ? cloneDeep(item.videoInfo) : cloneDeep(INITIAL_VIDEO_INFO),
})); const _data = { ...item, videoInfo: cloneDeep(INITIAL_VIDEO_INFO) };
// 初始化视频数据
if (type === EnumManuscriptType.Video && files.length) {
_data.videoInfo.uploadStatus = 'end';
const { name, size, duration, url } = files[0];
_data.videoInfo.name = name;
_data.videoInfo.size = formatFileSize(size);
_data.videoInfo.time = formatDuration(duration);
_data.videoInfo.poster = convertVideoUrlToCoverUrl(url);
}
return _data
});
works.value = _works; works.value = _works;
selectCardInfo.value = cloneDeep(_works[0] ?? {}); selectCardInfo.value = cloneDeep(_works[0] ?? {});
}; };