|
@@ -31,6 +31,7 @@
|
|
|
<el-input
|
|
|
class="title"
|
|
|
type="textarea"
|
|
|
+ maxlength="100"
|
|
|
:autosize="{ minRows: 1, maxRows: 4 }"
|
|
|
v-model="project.title"
|
|
|
/>
|
|
@@ -60,6 +61,7 @@
|
|
|
:autosize="{ minRows: 3 }"
|
|
|
v-model="row.name"
|
|
|
:row="3"
|
|
|
+ maxlength="1000"
|
|
|
placeholder="概括拍摄内容"
|
|
|
/>
|
|
|
</template>
|
|
@@ -71,6 +73,7 @@
|
|
|
class="gray"
|
|
|
type="textarea"
|
|
|
:autosize="{ minRows: 3 }"
|
|
|
+ maxlength="1000"
|
|
|
v-model="row.desc"
|
|
|
:row="3"
|
|
|
placeholder="详细描述分镜"
|
|
@@ -84,9 +87,11 @@
|
|
|
ref="upload"
|
|
|
v-model:file-list="row.fileList"
|
|
|
class="list-upload-style"
|
|
|
+ :accept="DrawFormats.toString()"
|
|
|
:class="{
|
|
|
activefileList: row.fileList && row.fileList.length == 1,
|
|
|
}"
|
|
|
+ :before-upload="beforeUpload"
|
|
|
list-type="picture-card"
|
|
|
:action="uploadFileUrl"
|
|
|
:on-success="handleUploadSuccess"
|
|
@@ -130,6 +135,7 @@
|
|
|
<template v-slot="{ row }">
|
|
|
<el-input
|
|
|
class="gray"
|
|
|
+ maxlength="1000"
|
|
|
type="textarea"
|
|
|
:autosize="{ minRows: 3 }"
|
|
|
v-model="row.words"
|
|
@@ -143,6 +149,7 @@
|
|
|
<div class="marksDiv">
|
|
|
<el-input
|
|
|
class="gray"
|
|
|
+ maxlength="1000"
|
|
|
type="textarea"
|
|
|
:autosize="{ minRows: 3 }"
|
|
|
v-model="row.marks"
|
|
@@ -195,9 +202,9 @@ link.setAttribute("href", linkIco);
|
|
|
|
|
|
const caseId = ref(null);
|
|
|
const project = reactive({
|
|
|
- title: "",
|
|
|
+ title: '我的脚本',
|
|
|
});
|
|
|
-
|
|
|
+const DrawFormats = [".jpg", ".jpeg", ".png",".mp4",".m4v",".mp3",".aac", ".wav"]
|
|
|
const isNotFound = ref(false);
|
|
|
|
|
|
const dialogImageUrl = ref("");
|
|
@@ -253,14 +260,25 @@ const columns = ref([
|
|
|
{ prop: "words", label: "台词文案" },
|
|
|
{ prop: "marks", label: "备注" },
|
|
|
]);
|
|
|
+const beforeUpload = async (file: File) => {
|
|
|
+ const fileType = file.name
|
|
|
+ .substring(file.name.lastIndexOf("."))
|
|
|
+ .toUpperCase();
|
|
|
+ if (!DrawFormats.some((type) => type.toUpperCase() === fileType)) {
|
|
|
+ ElMessage.error(`请上传${DrawFormats}格式的文件`);
|
|
|
+ return false;
|
|
|
+ } else {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ };
|
|
|
const checkSourceIsVideo = computed(() => (url: string) => {
|
|
|
- return url.includes(".mp4");
|
|
|
+ return url.includes(".mp4") || url.includes(".m4v");
|
|
|
});
|
|
|
const checkSourceIsAudio = computed(() => (url: string) => {
|
|
|
- return url.includes(".mp3");
|
|
|
+ return url.includes(".mp3") || url.includes(".aac") || url.includes(".wav");
|
|
|
});
|
|
|
const checkSourceIsImage = computed(() => (url: string) => {
|
|
|
- return url.includes(".jpg") || url.includes(".png") || url.includes(".gif");
|
|
|
+ return url.includes(".jpg") || url.includes(".png") || url.includes(".jpeg") || url.includes(".gif");
|
|
|
});
|
|
|
|
|
|
const getCoverUrl = computed(() => (url: string) => {
|
|
@@ -269,7 +287,7 @@ const getCoverUrl = computed(() => (url: string) => {
|
|
|
// return (
|
|
|
// url + "?x-oss-process=video/snapshot,t_0,f_jpg,w_0,h_0,m_fast,ar_auto"
|
|
|
// );
|
|
|
- case url.includes(".mp3") || url.includes(".wmv"):
|
|
|
+ case url.includes(".mp3") || url.includes(".aac") || url.includes(".wmv") || url.includes(".wav"):
|
|
|
return musicHeadphones;
|
|
|
default:
|
|
|
return url;
|
|
@@ -302,16 +320,17 @@ onMounted(async () => {
|
|
|
function getCaseScriptList() {
|
|
|
getCaseScriptInfo(caseId.value)
|
|
|
.then((res) => {
|
|
|
- project.title = res.name;
|
|
|
- data.list = res.content || [];
|
|
|
- data.newSortList = res.content || [];
|
|
|
+ project.title = res && res.name || '我的脚本';
|
|
|
+ data.list = res && res.content || [];
|
|
|
+ data.newSortList = res && res.content || [];
|
|
|
const idList = data.list.map((ele) => ele.id);
|
|
|
active.value = idList.length == 0 ? 0 : Math.max.apply(null, idList) || 1;
|
|
|
sortList.value = data.list.map((_, index) => index);
|
|
|
console.log("getCaseScriptList", idList, active.value);
|
|
|
Array.from(data.list).forEach((item) => {
|
|
|
item.fileList.forEach(async (file: File, index) => {
|
|
|
- if ((file as any).url.includes(".mp4")) {
|
|
|
+ console.log("getCaseScriptList", file);
|
|
|
+ if (file && !file.cover &&( (file as any).url.includes(".mp4") || (file as any).url.includes(".m4v"))) {
|
|
|
const res = await CaseScriptGetCover((file as any).url);
|
|
|
(item.fileList[index] as any).cover = res;
|
|
|
} else {
|
|
@@ -328,7 +347,10 @@ function handleAdd() {
|
|
|
// let content = sortList.value.map((index) => data.list[index]);
|
|
|
// data.list.length = 0;
|
|
|
// Object.assign(data.list, content);
|
|
|
- console.log("add", data.newSortList);
|
|
|
+ console.log("add", data.list, data.newSortList);
|
|
|
+ if(data.newSortList.length == 0){
|
|
|
+
|
|
|
+ }
|
|
|
for (var i = 1; i <= addLine.value; i++) {
|
|
|
console.log(i);
|
|
|
data.newSortList.push({
|
|
@@ -366,11 +388,18 @@ const handlePictureCardPreview = (file: UploadFile) => {
|
|
|
|
|
|
const saveProject = () => {
|
|
|
// let content = sortList.value.map((index) => data.list[index]);
|
|
|
+ let apiDataList = data.newSortList.map((item) => {
|
|
|
+ let asData = data.list.find(ele => ele.id === item.id) || {};
|
|
|
+ return {
|
|
|
+ ...item,
|
|
|
+ ...asData,
|
|
|
+ }
|
|
|
+ });
|
|
|
console.log("saveProject", data.list, data.newSortList);
|
|
|
CaseScriptSaveOrUpdate({
|
|
|
caseId: caseId.value,
|
|
|
name: project.title,
|
|
|
- content: data.newSortList,
|
|
|
+ content: apiDataList,
|
|
|
}).then((res) => {
|
|
|
console.log("saveProject");
|
|
|
ElMessage.success("保存成功");
|
|
@@ -379,7 +408,7 @@ const saveProject = () => {
|
|
|
async function handleUploadSuccess(response: any, uploadFile: UploadFile) {
|
|
|
uploadFile.url = response.data;
|
|
|
console.log("handleUploadSuccess", uploadFile.url);
|
|
|
- if (uploadFile.url!.includes(".mp4")) {
|
|
|
+ if (uploadFile.url!.includes(".mp4") || uploadFile.url!.includes(".m4v")) {
|
|
|
const res = await CaseScriptGetCover(uploadFile.url!);
|
|
|
(uploadFile as any).cover = res;
|
|
|
} else {
|