修改短视频

This commit is contained in:
mac
2026-03-16 21:10:36 +08:00
parent 9aaf71d41f
commit b1c772e962
16 changed files with 2437 additions and 33 deletions
+40
View File
@@ -0,0 +1,40 @@
import request from '@/utils/request'
// 添加视频
export function shortDramaAdd (data) {
return request({
url: '/api/web/shortdrama/add',
method: 'post',
data
})
}
// 删除视频
export function shortDramaDel (data) {
return request({
url: '/api/web/shortdrama/del',
method: 'post',
data
})
}
// 视频列表
export function shortDramaSearch (data) {
return request({
url: '/api/web/shortdrama/list',
method: 'post',
filterParam: true,
data
})
}
// 修改视频
export function shortDramaUpdate (data) {
return request({
url: '/api/web/shortdrama/update',
method: 'post',
data
})
}
+40
View File
@@ -0,0 +1,40 @@
import request from '@/utils/request'
// 添加视频
export function ShortmediaAdd (data) {
return request({
url: '/api/web/shortmedia/add',
method: 'post',
data
})
}
// 删除视频
export function ShortmediaDel (data) {
return request({
url: '/api/web/shortmedia/del',
method: 'post',
data
})
}
// 视频列表
export function ShortmediaSearch (data) {
return request({
url: '/api/web/shortmedia/list',
method: 'post',
filterParam: true,
data
})
}
// 修改视频
export function shortmediaUpdate (data) {
return request({
url: '/api/web/shortmedia/update',
method: 'post',
data
})
}
+6 -1
View File
@@ -272,7 +272,12 @@ export const serverRouter = [
icon: 'el-icon-video-camera'
}
},
{
path: 'shortDrama',
name: 'ShortDrama',
api_url: [],
meta: { title: '短剧剧集', noCache: true, icon: 'el-icon-video-camera' }
},
// {
// path: 'recommend',
// name: 'Recommend',
+1
View File
@@ -59,6 +59,7 @@ const map = {
CommentManage: () => import('@/views/videoManagement/commentManage/index.vue'), // 评论管理
CommentLib: () => import('@/views/videoManagement/commentLib/index.vue'), // 评论库
FilterWordList: () => import('@/views/videoManagement/filterWordList/index.vue'), // 非法词列表
ShortDrama: () => import('@/views/videoManagement/shortDrama/index.vue'), // 短剧剧集列表
// 小说管理
NovelsManagement: Layout,
+8 -8
View File
@@ -9,10 +9,10 @@
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="发放金币总数" prop="content">
<el-form-item label="发放积分总数" prop="content">
<el-input placeholder="请输入总数" v-model.number="form.dailyLimit" style="width: 400px">
<template #append>
<span>金币</span>
<span>积分</span>
</template>
</el-input>
</el-form-item>
@@ -29,14 +29,14 @@
<el-form-item label="最小:" size="mini" label-width="50">
<el-input placeholder="该次领取最小值" v-model.number="ru.min" style="width: 150px">
<template #append>
<span>金币</span>
<span>积分</span>
</template>
</el-input>
</el-form-item>
<el-form-item label="最大:" size="mini" label-width="50">
<el-input placeholder="该次领取最大值" v-model.number="ru.max" style="width: 150px">
<template #append>
<span>金币</span>
<span>积分</span>
</template>
</el-input>
</el-form-item>
@@ -79,9 +79,9 @@ export default {
async init() {
const res = await getConfig()
this.form = res.data
this.form.dailyLimit = (res.data.dailyLimit || 0) / 100
this.form.dailyLimit = res.data.dailyLimit || 0
if (this.form.rule) {
this.form.rule = this.form.rule.map(v => ({ ...v, min: v.min / 100, max: v.max / 100 }))
this.form.rule = this.form.rule.map(v => ({ ...v, min: v.min, max: v.max }))
}
},
async submit() {
@@ -91,10 +91,10 @@ export default {
}
const form = {
...this.form,
dailyLimit: this.form.dailyLimit * 100
dailyLimit: this.form.dailyLimit
}
if (this.form.rule) {
form.rule = this.form.rule.map(v => ({ ...v, min: v.min * 100, max: v.max * 100 }))
form.rule = this.form.rule.map(v => ({ ...v, min: v.min , max: v.max }))
}
await updateConfig(form)
this.$message.success('修改成功')
@@ -1,29 +1,18 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" width="780px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form :model="form" :rules="rules" ref="form" label-width="120px">
<el-form-item label="标题" prop="name">
<el-input v-model="form.title" placeholder="请输入标题" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="答案" prop="answer">
<el-input v-model="form.answer" placeholder="请输入答案" />
<el-input type="textarea" :rows="2" v-model="form.answer" placeholder="请输入答案" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="排序" prop="rank">
<el-input v-model.number="form.rank" placeholder="请输入排序" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否开启" prop="enable">
<el-switch v-model="form.enable" active-color="#13ce66" :active-value="true" :inactive-value="false"></el-switch>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
@@ -0,0 +1,234 @@
<template>
<el-dialog
:title="title"
:visible.sync="Visible"
top="50px"
center
class="ac-dialog"
:close-on-click-modal="false"
@close="close"
>
<el-form
:inline="true"
:model="form"
:rules="rules"
class="demo-form-inline"
label-width="120px"
label-position="right"
style=""
ref="ruleForm"
>
<el-row :gutter="24">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="标题">
<el-input
v-model="form.title"
style="width: 400px"
type="textarea"
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="描述">
<el-input
v-model="form.desc"
style="width: 400px"
type="textarea"
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="售价">
<el-input v-model.number="form.price" style="width: 180px">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="排序">
<el-input v-model.number="form.rank" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频状态">
<el-select
placeholder="请选择视频状态"
clearable
v-model="form.status"
>
<el-option
v-for="item in MediaSatusList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="剧集专题">
<el-select
placeholder="请选择剧集专题"
clearable
@clear="clearableFn"
v-model="form.topicId"
>
<el-option
v-for="item in topicList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="封面">
<UploadImg
@changeImgUrl="changeCoverImgUrl"
:img="form.coverImg"
></UploadImg>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit('ruleForm')"> </el-button>
</div>
<AddVideo
:data="form"
v-if="addVisible"
@close="closeVideoInfo"
@closeAll="close"
@submit="videoInfo"
></AddVideo>
</el-dialog>
</template>
<script>
import UploadImg from "@/components/UploadImg/index";
import moment from "moment";
import {
stringToArry,
arryToString,
changeMoneyYuan,
changeMoneyFen,
} from "@/filters/index";
import { MediaSatusList } from "@/filters/videoManagement/videoList";
import {
shortDramaUpdate,
shortDramaAdd,
} from "@/api/videoManagement/shortDrama";
export default {
name: "AddOrEdit",
props: ["data", "videoType", "topicList"],
components: {
UploadImg,
},
data() {
return {
Visible: true,
title: "",
addVisible: false,
MediaSatusList: MediaSatusList(),
tagsList: [],
tagCategoryId: undefined,
form: {
title: undefined,
topicId: undefined,
status: undefined,
coverImg: undefined, // [],封面
rank:undefined,
desc: undefined, // "string",详细描述
price: undefined, // 0,售价,单位分
},
rules: {},
};
},
computed: {},
mounted() {
this.title = this.data.title;
if (this.title === "编辑") {
this.form = { ...this.data.data };
this.form.price = changeMoneyYuan(this.form.price);
} else if (this.title === "新增") {
this.addVisible = true;
}
},
methods: {
// TODO
update(data) {
if (this.title === "新增") {
shortDramaAdd(data).then((res) => {
if (res.code === 200) {
this.$message.success("更新成功");
this.close();
} else {
this.$message.error("更新失败");
}
});
} else {
shortDramaUpdate(data).then((res) => {
if (res.code === 200) {
this.$message.success("更新成功");
this.close();
} else {
this.$message.error("更新失败");
}
});
}
},
// 新增时视频ID绑定
videoInfo(data) {
this.form = { ...this.form, data };
this.addVisible = false;
},
// 提交按钮
submit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.form.score = parseFloat(this.form.score);
const data = {
id: this.form.id,
param: JSON.parse(JSON.stringify(this.form)),
};
data.param.price = data.param.price
? changeMoneyFen(data.param.price)
: 0;
this.update(data);
} else {
return false;
}
});
},
clearableFn(){
this.form.topicId = 0
},
// 关闭编辑
close() {
this.$emit("close");
},
// 上传图片返回地址
changeCoverImgUrl(data) {
this.form.coverImg = data;
},
// 关闭不通过原因弹框
closeVideoInfo() {
this.addVisible = false;
},
},
};
</script>
@@ -0,0 +1,58 @@
<!--
* @Author: 王涛
* @Mail: no
* @Date: 2020-10-02 23:41:38
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-05-26 17:25:56
-->
<template>
<el-dialog :visible.sync="Visible" width="400px" center class="ac-dialog" :close-on-click-modal="false" @close="close" title="绑定影片" append-to-body>
<el-form :inline="true" :model="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-input v-model="form.fileId " placeholder="请输入媒资库影片ID" style="width: 100%;margin-top:10px"></el-input>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="close"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediaAdd } from '@/api/videoManagement/videoList'
export default {
name: 'AvList',
props: ['data'],
data() {
return {
Visible: true,
// 表单数据
form: {
fileId: undefined,
},
}
},
mounted() {},
methods: {
// 提交按钮
submit() {
mediaAdd(this.form).then((res) => {
if (res.code === 200) {
// this.$emit('submit', res.data)
this.$message.success('添加成功')
this.close()
} else if (res.code === 8000) {
this.$message.error('媒资库ID不存在')
} else if (res.code === 1006) {
this.$message.error('请输入媒资库ID')
}
})
},
// 关闭编辑
close() {
this.$emit('close')
this.$emit('closeAll')
},
},
}
</script>
@@ -0,0 +1,60 @@
<!--
* @Author: 王涛
* @Mail: no
* @Date: 2020-10-02 23:41:38
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-05-26 17:51:34
-->
<template>
<el-dialog :visible.sync="Visible" width="400px" center class="ac-dialog" :close-on-click-modal="false" @close="close" title="绑定影片" append-to-body>
<el-form :inline="true" :model="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-input v-model="form.fileId " placeholder="请输入媒资库影片ID" style="width: 100%;margin-top:10px"></el-input>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="close"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediaAddTs } from '@/api/videoManagement/videoList'
export default {
name: 'AvList',
props: ['data'],
data() {
return {
Visible: true,
// 表单数据
form: {
fileId: undefined,
},
}
},
mounted() {},
methods: {
// 提交按钮
submit() {
mediaAddTs(this.form).then((res) => {
if (res.code === 200) {
// this.$emit('submit', res.data)
this.$message.success('添加成功')
this.close()
} else if (res.code === 8000) {
this.$message.error('媒资库ID不存在')
} else if (res.code === 1006) {
this.$message.error('请输入媒资库ID')
} else {
this.$message.error('视频添加失败')
}
})
},
// 关闭编辑
close() {
this.$emit('close')
this.$emit('closeAll')
},
},
}
</script>
@@ -0,0 +1,457 @@
<template>
<el-dialog
:title="title"
:visible.sync="Visible"
width="700px"
center
class="ac-dialog"
:close-on-click-modal="false"
@close="close"
>
<el-form
:inline="true"
:model="form"
:rules="rules"
ref="ruleForm"
class="demo-form-inline"
label-width="120px"
label-position="right"
>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频分类">
<el-select
placeholder="请选择视频分类"
v-model="form.cardType"
clearabl
@change="changeCardType"
style="width: 180px"
>
<el-option
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in cardType"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="主题分类">
<el-select
placeholder="请选择主题分类"
v-model="form.topicIds"
filterable
allow-create
default-first-option
multiple
style="width: 180px"
>
<el-option
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in chooseVideoType"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否VIP" prop="status">
<el-select
placeholder="请选择信息分类"
clearable
v-model="form.isVip"
style="width: 180px"
>
<el-option label="非VIP视频" :value="false" />
<el-option label="VIP视频" :value="true" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频状态" prop="status">
<el-select
placeholder="请选择视频状态"
clearable
v-model="form.status"
style="width: 180px"
>
<el-option
v-for="item in MediaSatusList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="演员分类">
<el-select
style="width: 180px"
multiple
placeholder="请选择演员分类"
v-model="form.actorIds"
filterable
allow-create
default-first-option
>
<el-option
:key="item.value"
:label="item.name"
:value="item.id"
v-for="item in actorList"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="发布者ID">
<el-input v-model.number="form.publishId" style="width: 180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="上架时间">
<el-date-picker v-model="form.addedTime" type="datetime" placeholder="请选择发布时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="封面类型">
<el-select
placeholder="请选择封面类型"
v-model="form.coverType"
clearable
style="width: 180px"
>
<el-option
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in coverTypeList"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="虚拟观看次数">
<el-input v-model.number="form.fake.watchTimes" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="虚拟点赞次数">
<el-input v-model.number="form.fake.likes" style="width: 180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="售价">
<el-input v-model="form.price" style="width: 180px">
<template slot="append"
></template
>
</el-input>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频类型">
<el-select
placeholder="请选择视频类型"
v-model="form.contentType"
clearable
style="width: 180px"
>
<el-option
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in contentTypeList"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="已选标签">
<el-tag :key="index + 'tag'" v-for="(item, index) in tagsList" :disable-transitions="true" closable style="margin: 2px" @close="handleTagClose(item.id)">
{{ item.name }}
</el-tag>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24">
<el-form-item label="可选标签">
<el-button
:type="showTagsFlag ? 'warning' : 'success'"
@click="showTagsFun"
>{{ showTagsFlag ? "隐藏标签" : "展示标签" }}</el-button
>
<div v-for="(itemList,index) in chooseMediatag" :key="index">
<span v-show="showTagsFlag">{{ itemList[0].tagCategoryId | changeName(tagTypeList,'id','name') }}</span>
<el-tag v-show="showTagsFlag" :key="index + 'tagData'" style="margin: 2px; cursor: pointer" v-for="(item, index) in itemList" :disable-transitions="true" :type="fliterTagType(item.name)" @click="handleClickTag(item)">
{{ item.name}}
</el-tag>
</div>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediaUpdate, getVideoTags } from "@/api/videoManagement/videoList";
import { MediaSatusList } from "@/filters/videoManagement/videoList";
import { arryToString, changeMoneyFen } from "@/filters/index";
import { mediatagList } from "@/api/videoManagement/mediatag";
import { topicSearch } from "@/api/videoManagement/topic";
import {
contentTypeList,
coverTypeList,
videoClassificationList,
} from "@/filters/mediaLibrary/videoList";
export default {
name: "Batch",
props: ["data", "videoType", "gatherList", "studioList", "actorList", "tagTypeList"],
data() {
return {
contentTypeList: contentTypeList(),
MediaSatusList: MediaSatusList(),
coverTypeList: coverTypeList(),
cardType: videoClassificationList(),
Visible: true,
showTagsFlag: false,
title: "",
// 表单数据
form: {
isVip: undefined,
status: undefined,
topicIds: [],
gatherIds: [],
actorIds: [],
actor: undefined,
companiesId: undefined,
publishId: undefined,
addedTime: undefined,
coverType: undefined,
tags: [],
fake: {},
cardType: undefined,
contentType: undefined,
price: undefined,
},
//
dates: [],
rules: {
isVip: undefined,
status: undefined,
},
chooseMediatag: [],
chooseVideoType: [],
tagsList: []
};
},
methods: {
// 删除已选择列表中的标签
handleTagClose(tag) {
this.form.tags.splice(this.form.tags.indexOf(tag), 1);
this.tagsList.splice(this.form.tags.indexOf(tag), 1)
},
//显示展示标签
showTagsFun() {
this.showTagsFlag = !this.showTagsFlag;
},
// 点击可选择列表中的标签
handleClickTag(item) {
if (this.form.tags.indexOf(item.id) === -1) {
this.form.tags.push(item.id);
this.tagsList.push(item)
}
},
// 在可选择列表过滤出已选择的标签
fliterTagType(tagID) {
if (this.form.tags.indexOf(tagID) !== -1) {
return "danger";
} else {
return "info";
}
},
changeCardType(val) {
this.getTopicSearch(val);
},
// changeContentType(val) {
// this.getMediatagList(val);
// },
// 获取标签
getMediatagList(val) {
this.chooseMediatag = [];
const param = {
pageNum: 1,
pageSize: 500,
};
getVideoTags(param).then((res) => {
if (res.data.list) {
const result = res.data.list.reduce((acc,cur) => { // 将标签区分类型
const index = acc.findIndex(item => item[0].tagCategoryId === cur.tagCategoryId)
if( index === -1){
acc.push([cur])
} else {
acc[index].push(cur)
}
return acc
}, [])
this.chooseMediatag = [...result]
} else {
this.chooseMediatag = [];
}
});
},
// 获取主题
getTopicSearch(val) {
this.chooseVideoType = [];
const param = {
pageNum: 1,
pageSize: 500,
cardType: val,
};
topicSearch(param).then((res) => {
if (res.data.list) {
res.data.list.forEach((item) => {
this.chooseVideoType.push({
label: item.name,
value: item.id,
});
});
} else {
this.chooseVideoType = [];
}
});
},
// 提交按钮
submit() {
if (this.data.length) {
this.data.forEach((item) => {
const data = {
id: item.id,
param: item,
};
data.param.isVip = this.form.isVip;
if(this.form.status){
data.param.status = this.form.status;
}else{
this.$message({
type: "error",
message: "请选择视频状态!",
});
return
}
if (this.form.tags.length) {
data.param.tags = this.form.tags;
}
if (this.form.topicIds.length) {
data.param.topicIds = this.form.topicIds;
}
if (this.form.cardType) {
data.param.cardType = this.form.cardType;
}
if (this.form.gatherIds.length !== 0) {
data.param.gatherIds = this.form.gatherIds;
}
if (this.form.price) {
data.param.price = changeMoneyFen(this.form.price);
}
if (this.form.fake.watchTimes) {
data.param.fake.watchTimes = this.form.fake.watchTimes;
}
if (this.form.fake.likes) {
data.param.fake.likes = this.form.fake.likes;
}
if (this.form.actorIds.length !== 0) {
data.param.actorIds = this.form.actorIds;
const actorNameArr = [];
Object.keys(this.actorList).forEach((key) => {
if (this.form.actorIds.length > 0) {
for (
let index = 0;
index < this.form.actorIds.length;
index++
) {
if (this.form.actorIds[index] === this.actorList[key].id) {
actorNameArr.push(this.actorList[key].name);
}
}
}
});
data.param.actor = arryToString(actorNameArr);
} else {
data.param.actor = arryToString(data.param.actor);
}
if (this.form.companiesId) {
data.param.companiesId = this.form.companiesId;
}
if (this.form.publishId) {
data.param.publishId = this.form.publishId;
}
if (this.form.addedTime) {
data.param.addedTime = this.form.addedTime;
}
if (this.form.contentType) {
data.param.contentType = this.form.contentType;
}
if (this.form.coverType) {
data.param.coverType = this.form.coverType;
}
mediaUpdate(data).then((res) => {
if (res.code === 200) {
this.$message({
type: "success",
message: item.id + "修改成功",
});
} else {
this.$message({
type: "error",
message: item.id + "修改失败",
});
}
});
});
} else {
this.$message({
type: "error",
message: "未选择视频",
});
}
this.Visible = false;
},
// 关闭编辑
close() {
this.$emit("close");
},
},
mounted() {
this.getMediatagList()
},
};
</script>
@@ -0,0 +1,248 @@
<template>
<el-dialog :title="title" :visible.sync="Visible" top="50px" center class="ac-dialog" @close="close" append-to-body>
<el-form :inline="true" :model="form" :rules="rules" class="demo-form-inline" label-width="120px" label-position="right" style="" ref="ruleForm">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="标题">
<el-input v-model="form.title" style="width: 400px" type="textarea" />
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="番号">
<el-input v-model="form.bango" style="width: 400px" type="textarea" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="封面">
<UploadImg @changeImgUrl="changeCoverImgUrl" :img="form.coverImg"></UploadImg>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="预览时间(秒)">
<el-input v-model.number="form.preTime" style="width: 180px" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="视频状态">
<el-select placeholder="请选择视频状态" clearable v-model="form.status">
<el-option v-for="item in MediaSatusList" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="上架时间">
<el-date-picker v-model="form.addedTime" type="datetime" placeholder="请选择发布时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="售价">
<el-input v-model="form.price" style="width: 180px">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="是否是vip">
<el-switch v-model="form.isVip" active-color="#13ce66" inactive-color="#ff4949" style="width: 180px"></el-switch>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="8">
<el-form-item label="排序">
<el-input v-model.number="form.rank" style="width: 180px" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="70">
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit('ruleForm')">
</el-button>
</div>
<AddVideo :data="form" v-if="addVisible" @close="closeVideoInfo" @closeAll="close" @submit="videoInfo"></AddVideo>
</el-dialog>
</template>
<script>
import UploadImg from '@/components/UploadImg/index'
import moment from 'moment'
import { stringToArry, arryToString, changeMoneyYuan, changeMoneyFen } from '@/filters/index'
import { MediaSatusList } from '@/filters/videoManagement/videoList'
import { shortmediaUpdate,ShortmediaAdd } from '@/api/videoManagement/shortMedia'
export default {
name: 'AddOrEdit',
props: ['data', 'videoType', 'mediatag',],
components: {
UploadImg,
},
data() {
return {
showTagsFlag: false,
Visible: true,
title: '',
MediaSatusList: MediaSatusList(),
addVisible: false,
longMediatag: [],
longVideoType: [],
shortMediatag: [],
shortVideoType: [],
chooseMediatag: [],
chooseVideoType: [],
tagsList:[],
tagCategoryId: undefined,
form: {
addedTime: undefined, // "string",上架时间
bango: undefined, // 番号
contentType: undefined, // 格式类型: 1:AV 2:小视频 3:动漫
tags: [],
score: undefined, // 评分
coverImg: undefined, // [],封面
coverType: undefined, // 封面类型: 1:竖版封面 2:横版封面 3:未知
desc: undefined, // "string",详细描述
fake: {},
isVip: undefined, // true,是否VIp
preFileName: undefined, // "string",预览文件
price: undefined, // 0,售价,单位分
publishAvatar: undefined, // 视频发布者头像
publishId: undefined, // 发布者ID
status: undefined, // 0,视频状态
title: undefined, // "string",标题
topicIds: [], // 视频分类
mediaSet: undefined, // 视频归属
id: undefined, // 0,视频Id
rank:undefined,
preTime: 0,
},
rules: {}
}
},
computed: {
},
mounted() {
this.title = this.data.title
if (this.title === '编辑') {
this.form = { ...this.data.data }
this.form.price = changeMoneyYuan(this.form.price)
this.form.addedTime =
moment(this.data.data.addedTime)
.utcOffset(480)
.format('YYYY-MM-DDTHH:mm:ss') + '+08:00'
this.form.sortTime =
moment(this.data.data.sortTime)
.utcOffset(480)
.format('YYYY-MM-DDTHH:mm:ss') + '+08:00'
} else if (this.title === '新增') {
this.addVisible = true
}
},
methods: {
// TODO
update(data) {
if(this.title === '新增'){
ShortmediaAdd(data).then((res) => {
if (res.code === 200) {
this.$message.success('更新成功')
this.close()
} else {
this.$message.error('更新失败')
}
})
}else{
shortmediaUpdate(data).then((res) => {
if (res.code === 200) {
this.$message.success('更新成功')
this.close()
} else {
this.$message.error('更新失败')
}
})
}
},
// 新增时视频ID绑定
videoInfo(data) {
this.form = { ...this.form, data }
if (this.form.actorIds) {
this.form.actorids = arryToString(this.form.actorids)
}
// this.form.directors = arryToString(this.form.directors)
// this.form.secondTags = arryToString(this.form.secondTags)
this.addVisible = false
},
// 提交按钮
submit(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
const tagNameArr = []
if (this.mediatag) {
Object.keys(this.mediatag).forEach((key) => {
if (this.form.actorIds.length > 0) {
for (let index = 0; index < this.form.tags.length; index++) {
if (this.form.tags[index] === this.mediatag[key].id) {
tagNameArr.push(this.mediatag[key].name)
}
}
}
})
this.form.tagString = arryToString(tagNameArr)
}
this.form.score = parseFloat(this.form.score)
const data = {
id: this.form.id,
param: JSON.parse(JSON.stringify(this.form)),
}
data.param.mediaSet = data.param.mediaSet ? stringToArry(data.param.mediaSet) : []
data.param.price = changeMoneyFen(data.param.price)
data.param.companiesId = Number(data.param.companiesId)
data.param.fake.watchTimes = data.param.fake.watchTimes
? Number(data.param.fake.watchTimes)
: 0
this.update(data)
} else {
return false
}
})
},
// 关闭编辑
close() {
this.$emit('close')
},
// 上传图片返回地址
changeCoverImgUrl(data) {
this.form.coverImg = data
},
// 关闭不通过原因弹框
closeVideoInfo() {
this.addVisible = false
},
},
}
</script>
@@ -0,0 +1,58 @@
<!--
* @Author: 王涛
* @Mail: no
* @Date: 2020-10-02 23:41:38
* @LastEditors: Please set LastEditors
* @LastEditTime: 2022-05-26 17:25:56
-->
<template>
<el-dialog :visible.sync="Visible" width="400px" center class="ac-dialog" :close-on-click-modal="false" @close="close" title="绑定影片" append-to-body>
<el-form :inline="true" :model="form" class="demo-form-inline" label-width="120px" label-position="right">
<el-input v-model="form.fileId " placeholder="请输入媒资库影片ID" style="width: 100%;margin-top:10px"></el-input>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="close"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediaAdd } from '@/api/videoManagement/videoList'
export default {
name: 'AvList',
props: ['data'],
data() {
return {
Visible: true,
// 表单数据
form: {
fileId: undefined,
},
}
},
mounted() {},
methods: {
// 提交按钮
submit() {
mediaAdd(this.form).then((res) => {
if (res.code === 200) {
// this.$emit('submit', res.data)
this.$message.success('添加成功')
this.close()
} else if (res.code === 8000) {
this.$message.error('媒资库ID不存在')
} else if (res.code === 1006) {
this.$message.error('请输入媒资库ID')
}
})
},
// 关闭编辑
close() {
this.$emit('close')
this.$emit('closeAll')
},
},
}
</script>
@@ -0,0 +1,160 @@
<template>
<el-dialog
:title="title"
:visible.sync="Visible"
top="50px"
center
class="ac-dialog"
:close-on-click-modal="false"
@close="close"
append-to-body
>
<el-form
:inline="true"
:model="form"
:rules="rules"
class="demo-form-inline"
label-width="120px"
label-position="right"
style=""
ref="ruleForm"
>
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频状态">
<el-select
placeholder="请选择视频状态"
clearable
v-model="form.status"
>
<el-option
v-for="item in MediaSatusList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="上架时间">
<el-date-picker
v-model="form.addedTime"
type="datetime"
placeholder="请选择发布时间"
>
</el-date-picker>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="售价">
<el-input v-model="form.price" style="width: 180px">
<template slot="append"></template>
</el-input>
</el-form-item>
</el-col>
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="是否是vip">
<el-switch
v-model="form.isVip"
active-color="#13ce66"
inactive-color="#ff4949"
style="width: 180px"
></el-switch>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit('ruleForm')"> </el-button>
</div>
</el-dialog>
</template>
<script>
import UploadImg from "@/components/UploadImg/index";
import moment from "moment";
import {
stringToArry,
arryToString,
changeMoneyYuan,
changeMoneyFen,
} from "@/filters/index";
import { MediaSatusList } from "@/filters/videoManagement/videoList";
import {
shortmediaUpdate,
ShortmediaAdd,
} from "@/api/videoManagement/shortMedia";
export default {
name: "AddOrEdit",
props: ["selectBatch"],
components: {
UploadImg,
},
data() {
return {
Visible: true,
title: "",
MediaSatusList: MediaSatusList(),
form: {
addedTime: undefined, // "string",上架时间
isVip: false, // true,是否VIp
price: undefined, // 0,售价,单位分
status: undefined, // 0,视频状态
},
rules: {},
};
},
computed: {},
mounted() {},
methods: {
// TODO
update(data,length) {
shortmediaUpdate(data).then((res) => {
if (res.code === 200) {
this.$message.success("更新成功");
if(length){
this.close()
}
} else {
this.$message.error("更新失败");
}
});
},
// 提交按钮
submit(formName) {
this.$refs[formName].validate( (valid) => {
if (valid) {
this.form.price = changeMoneyFen(this.form.price);
this.selectBatch.map((item,index)=>{
const data = {
id: item.id,
param: { ...this.form },
};
this.update(data,this.selectBatch.length-1===index);
})
} else {
return false;
}
});
},
// 关闭编辑
close() {
this.$emit("close");
},
// 上传图片返回地址
changeCoverImgUrl(data) {
this.form.coverImg = data;
},
},
};
</script>
@@ -0,0 +1,529 @@
<template>
<div class="pf-warpper avlist">
<el-dialog
title="短剧视频"
:visible.sync="Visible"
width="90%"
center
class="ac-dialog"
:close-on-click-modal="false"
@close="close"
>
<el-row class="table-form">
<el-form
:inline="true"
:model="searchData"
class="form-inline"
size="mini"
>
<el-form-item>
<el-input
placeholder="请输入短剧Id"
clearable
v-model.number="searchData.id"
@clear="onClear('id')"
/>
</el-form-item>
<el-form-item>
<el-input
placeholder="请输入标题"
clearable
v-model="searchData.title"
@clear="onClear('title')"
/>
</el-form-item>
<el-form-item>
<el-button
@click="onSeach"
icon="el-icon-search"
plain
type="primary"
>搜索</el-button
>
<el-button @click="batch" plain type="success"
>批量设置</el-button
>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table
:data="resData"
element-loading-text="拼命加载中"
border
height="700"
highlight-current-row
style="width: 100%"
v-loading="loading"
:row-style="{ height: '70px' }"
@selection-change="handleSelectionChange"
empty-text="暂无更多数据"
>
<el-table-column type="selection" width="50" fixed="left">
</el-table-column>
<el-table-column align="center" label="排序">
<template slot-scope="scope">{{ scope.row.rank }}</template>
</el-table-column>
<el-table-column align="center" label="Id">
<template slot-scope="scope">{{ scope.row.id }}</template>
</el-table-column>
<el-table-column
align="center"
label="标题"
width="150px"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.title }}</template>
</el-table-column>
<el-table-column align="center" label="影片时长">
<template slot-scope="scope">{{
scope.row.playTime | secondToHouseMinuteSecond
}}</template>
</el-table-column>
<el-table-column align="center" label="视频状态" width="100px">
<template slot-scope="scope">
<el-button
:type="
scope.row.status === 1
? 'success'
: scope.row.status === 2
? 'danger'
: 'warning'
"
plain
size="mini"
>{{ scope.row.status | changMediaSatus }}</el-button
>
</template>
</el-table-column>
<el-table-column align="center" label="是否VIp" width="120px">
<template slot-scope="scope">
<el-button
:type="scope.row.isVip ? 'success' : 'danger'"
plain
size="mini"
>{{ scope.row.isVip ? "VIP视频" : "非VIP视频" }}</el-button
>
</template>
</el-table-column>
<el-table-column align="center" label="售价(元)" width="100px">
<template slot-scope="scope">{{
scope.row.price | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="正片预览">
<template slot-scope="scope">
<i
v-if="scope.row.fieldNameFs"
class="el-icon-video-play views"
title="点击预览"
@click="checkMedia(scope.row.fieldNameFs, scope.row)"
></i>
<div v-else>暂无</div>
</template>
</el-table-column>
<el-table-column align="center" label="预览时间">
<template slot-scope="scope">{{ scope.row.preTime }}</template>
</el-table-column>
<el-table-column align="center" label="视频封面" width="100px">
<template slot-scope="scope">
<ShowImg
style="width: 50px; height: 70px; margin: 0 auto"
:urls="scope.row.coverImg"
></ShowImg>
</template>
</el-table-column>
<el-table-column align="center" label="预览视频">
<template slot-scope="scope">
<i
v-if="scope.row.preFileName"
class="el-icon-video-play views"
title="点击预览"
@click="checkMedia(scope.row.preFileName, scope.row)"
></i>
<div v-else>暂无</div>
</template>
</el-table-column>
<el-table-column
align="center"
label="详细描述"
width="200px"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.desc }}</template>
</el-table-column>
<el-table-column
align="center"
label="番号"
width="100px"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.bango }}</template>
</el-table-column>
<el-table-column align="center" label="分辨率高">
<template slot-scope="scope">{{ scope.row.height }}</template>
</el-table-column>
<el-table-column align="center" label="分辨率宽">
<template slot-scope="scope">{{ scope.row.width }}</template>
</el-table-column>
<el-table-column align="center" label="文件大小(MB)">
<template slot-scope="scope">{{
getSizeToMB(scope.row.size)
}}</template>
</el-table-column>
<el-table-column align="center" width="120px" label="本周观看次数">
<template slot-scope="scope">{{ scope.row.weekWatchs }}</template>
</el-table-column>
<el-table-column align="center" width="120px" label="本月观看次数">
<template slot-scope="scope">{{
scope.row.wonthWatchs
}}</template>
</el-table-column>
<el-table-column align="center" label="媒资库ID" width="150px">
<template slot-scope="scope">{{ scope.row.fileId }}</template>
</el-table-column>
<el-table-column align="center" label="上次观看时间" width="160px">
<template slot-scope="scope">{{
scope.row.lastWatchTime | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="上架时间" width="160px">
<template slot-scope="scope">{{
scope.row.addedTime | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="真实信息">
<el-table-column align="center" label="评论数">
<template slot-scope="scope">{{
scope.row.real.comments
}}</template>
</el-table-column>
<el-table-column align="center" label="点赞数">
<template slot-scope="scope">{{
scope.row.real.likes
}}</template>
</el-table-column>
<el-table-column align="center" label="售卖数">
<template slot-scope="scope">{{
scope.row.real.sells
}}</template>
</el-table-column>
<el-table-column align="center" label="分享数">
<template slot-scope="scope">{{
scope.row.real.shares
}}</template>
</el-table-column>
<el-table-column align="center" label="观看数">
<template slot-scope="scope">{{
scope.row.real.watchTimes
}}</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="虚拟信息">
<el-table-column align="center" label="评论数">
<template slot-scope="scope">{{
scope.row.fake.comments
}}</template>
</el-table-column>
<el-table-column align="center" label="点赞数">
<template slot-scope="scope">{{
scope.row.fake.likes
}}</template>
</el-table-column>
<el-table-column align="center" label="售卖数">
<template slot-scope="scope">{{
scope.row.fake.sells
}}</template>
</el-table-column>
<el-table-column align="center" label="分享数">
<template slot-scope="scope">{{
scope.row.fake.shares
}}</template>
</el-table-column>
<el-table-column align="center" label="观看数">
<template slot-scope="scope">{{
scope.row.fake.watchTimes
}}</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="创建时间" width="160px">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="更新时间" width="160px">
<template slot-scope="scope">{{
scope.row.updatedAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column
align="center"
fixed="right"
label="操作"
width="250"
>
<template slot-scope="scope">
<!-- <el-button @click="onAddComment(scope.row)" size="mini" type="success">添加评论</el-button> -->
<el-button
@click="handleEdit(scope.row)"
size="mini"
type="primary"
>编辑</el-button
>
<!-- <el-button @click="toTop(scope.$index, scope.row)" size="mini" type="primary">视频置顶</el-button> -->
<el-button
@click="handleDelete(scope.row)"
size="mini"
type="danger"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination
:current-page="searchData.pageNum"
:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 50, 200]"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"
/>
</div>
<!-- 新增及编辑 -->
<Edit
:mediatag="mediatag"
:data="editData"
v-if="editVisible"
@close="closeEdit"
/>
<ShowVideo ref="showvideo"></ShowVideo>
<Batch :selectBatch="selectBatch" v-if="batchVisible" @close="closeEdit"/>
</el-dialog>
</div>
</template>
<script>
// 引入模块
import ShowImg from "@/components/ShowImg/index.vue";
import Edit from "./components/AddOrEdit";
import Batch from "./components/batch";
import {
ShortmediaSearch,
ShortmediaDel,
} from "@/api/videoManagement/shortMedia";
import ShowVideo from "@/components/ShowVideo/index.vue";
export default {
name: "ShortMedia",
props: ["data"],
components: {
Edit,
ShowImg,
ShowVideo,
Batch
},
data() {
return {
mediatag: [],
actorList: [], // 女优列表
circleList: [],
mediaCollList: [],
tagTypeList: [],
Visible: true,
// MediacolumnList: [],
// 请求列表参数
searchData: {
id: undefined, // 0,视频Id
pageNum: 1,
pageSize: 10,
title: undefined, // 标题
dramaId: undefined, // 短剧Id
},
time: undefined,
resData: [], // el-table表格数据
total: 0, // 数据总条数
loading: true, // 列表加载状态
editData: {
title: "新增",
data: {},
},
editVisible: false,
batchVisible: false,
videoList: [],
selectBatch: [],
};
},
mounted() {
this.searchData = this.$store.getters.getSeachParam;
this.searchData.dramaId = this.data.data.id;
this.getShortmediaSearch();
},
methods: {
getSizeToMB(val) {
return (val / 1024 / 1024).toFixed(2);
},
// 批量选择
handleSelectionChange(val) {
this.selectBatch = val;
},
// 批量加入后台视频库按钮
addVideoArray() {
this.addVideoVisible = true;
},
onAddComment(row) {
this.editData = {
title: "添加评论",
data: {
userId: 0,
objectId: row.id,
objectType: 1,
},
};
this.editComVisible = true;
},
// // 一键同步
// onSynch() {
// mediaSync().then((res) => {
// if (res.code === 200) {
// this.$message.success('同步成功!')
// } else {
// this.$message.error(res.data)
// }
// })
// },
// TODO:请求视频列表数据
getShortmediaSearch() {
this.loading = true;
let param = JSON.parse(JSON.stringify(this.searchData));
if (this.time) {
param.start = this.time[0];
param.end = this.time[1];
} else {
param.start = undefined;
param.end = undefined;
}
if (this.searchData.sort == "") {
param.sort = undefined;
}
this.$store.dispatch("videoManagement/setSeachParam", param);
ShortmediaSearch(param).then((res) => {
if (res.code === 200) {
res.data.list.forEach((item) => {
item.actor ? (item.actor = item.actor.split(",")) : "";
});
this.resData = res.data.list;
this.total = res.data.total;
} else {
this.$message.error("请求列表失败!");
this.resData = [];
this.total = 0;
}
this.loading = false;
});
},
//TODO:删除视频列表数据
handleDelete(row) {
this.$confirm("确定删除?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
ShortmediaDel({ id: row.id }).then((res) => {
if (res.code === 200) {
this.getShortmediaSearch();
this.$message.success("成功删除!");
} else {
this.$message.error(res.tip);
}
});
});
},
// 批量设置
batch() {
if(!this.selectBatch.length){
return this.$message.error('请选择短剧!')
}else{
this.batchVisible = true;
}
},
setTag() {
this.setTagVisible = true;
},
onSeach() {
this.searchData.pageNum = 1;
this.searchData.pageSize = 10;
this.getShortmediaSearch();
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val;
this.getShortmediaSearch();
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val;
this.getShortmediaSearch();
},
// 新增按钮
add() {
this.editVisible = true;
this.editData = {
title: "新增",
data: {},
};
},
// 编辑按钮
handleEdit(row) {
this.editVisible = true;
this.editData = {
title: "编辑",
data: row,
};
},
// 关闭编辑
close() {
this.$emit("close");
},
// 关闭编辑弹窗
async closeEdit() {
this.batchVisible = false;
this.editVisible = false;
this.editComVisible = false;
this.setTagVisible = false;
this.addVideoVisible = false;
await this.getShortmediaSearch();
},
// 清空某一项筛选列表
async onClear(key) {
this.searchData[key] = undefined;
await this.getShortmediaSearch();
},
// 视频查看
checkMedia(url, data) {
this.$refs.showvideo.open(url, data, data.id);
},
},
};
</script>
@@ -0,0 +1,99 @@
<!--
* @Author:
* @Mail:
* @Date: 2022-03-14 15:22:04
* @LastEditTime: 2022-03-18 11:58:24
* @LastEditors:
* @FilePath: /comics-admin/src/views/videoManagement/videoList/components/setTag.vue
-->
<template>
<el-dialog :title="title" :visible.sync="Visible" width="700px" center class="ac-dialog" :close-on-click-modal="false" @close="close">
<el-form :inline="true" :model="form" :rules="rules" ref="ruleForm" class="demo-form-inline" label-width="120px" label-position="right">
<el-row :gutter="24">
<el-col :xs="12" :sm="12" :md="12" :lg="12" :xl="12">
<el-form-item label="视频标签" prop="status">
<el-select placeholder="请选择视频标签" clearable v-model="form.tags" style="width: 180px" multiple filterable>
<el-option v-for="item in MediaSatusList" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="Visible = false"> </el-button>
<el-button type="primary" @click="submit"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { mediatagAddTags } from '@/api/videoManagement/videoList'
import { mediatagList } from '@/api/videoManagement/mediatag'
export default {
name: 'AvList',
props: ['data'],
data() {
return {
MediaSatusList: [],
Visible: true,
title: '',
// 表单数据
form: {
tags: undefined
},
//
rules: {
}
}
},
mounted() {
this.getMediatagList()
},
methods: {
// 提交按钮
submit() {
if (this.data.length) {
const mediaIds = []
this.data.forEach(item => {
mediaIds.push(item.id)
})
const param = {
mediaIds: mediaIds,
tags: this.form.tags
}
mediatagAddTags(param).then(res => {
if (res.code === 200) {
this.$message.success('设置标签成功')
} else {
this.$message.error('设置标签失败')
}
})
} else {
this.$message({
type: 'error',
message: '未选择视频'
})
}
this.Visible = false
},
getMediatagList(val) {
const param = {
pageNum: 1,
pageSize: 5000
}
mediatagList(param).then((res) => {
if (res.data.list) {
this.MediaSatusList = res.data.list
}
})
},
// 关闭编辑
close() {
this.$emit('close')
}
}
}
</script>
@@ -0,0 +1,426 @@
<template>
<div class="pf-warpper avlist">
<el-row class="table-form">
<el-form
:inline="true"
:model="searchData"
class="form-inline"
size="mini"
>
<el-form-item>
<el-input
placeholder="请输入剧集Id"
clearable
v-model.number="searchData.dramaId"
@clear="onClear('dramaId')"
/>
</el-form-item>
<el-form-item>
<el-input
placeholder="请输入标题"
clearable
v-model="searchData.title"
@clear="onClear('title')"
/>
</el-form-item>
<el-form-item>
<el-select
placeholder="请选择视频状态"
clearable
v-model="searchData.status"
@clear="onClear('status')"
>
<el-option
:key="item.value"
:label="item.label"
:value="item.value"
v-for="item in MediaSatusList"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-select
placeholder="请选择主题"
clearable
v-model="searchData.topicId"
>
<el-option
v-for="item in topicList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button @click="onSeach" icon="el-icon-search" plain type="primary"
>搜索</el-button
>
</el-form-item>
</el-form>
</el-row>
<el-row>
<el-col>
<el-table
:data="resData"
element-loading-text="拼命加载中"
border
height="700"
highlight-current-row
style="width: 100%"
v-loading="loading"
:row-style="{ height: '70px' }"
@selection-change="handleSelectionChange"
empty-text="暂无更多数据"
>
<el-table-column type="selection" width="50" fixed="left">
</el-table-column>
<el-table-column align="center" label="视频Id">
<template slot-scope="scope">{{ scope.row.id }}</template>
</el-table-column>
<el-table-column
align="center"
label="标题"
width="300px"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.title }}</template>
</el-table-column>
<el-table-column align="center" label="视频封面" width="100px">
<template slot-scope="scope">
<ShowImg
style="width: 50px; height: 70px; margin: 0 auto"
:urls="scope.row.coverImg"
></ShowImg>
</template>
</el-table-column>
<el-table-column
align="center"
label="详细描述"
width="250px"
show-overflow-tooltip
>
<template slot-scope="scope">{{ scope.row.desc }}</template>
</el-table-column>
<el-table-column align="center" label="视频状态" width="100px">
<template slot-scope="scope">
<el-button
:type="
scope.row.status === 1
? 'success'
: scope.row.status === 2
? 'danger'
: 'warning'
"
plain
size="mini"
>{{ scope.row.status | changMediaSatus }}</el-button
>
</template>
</el-table-column>
<el-table-column align="center" label="排序">
<template slot-scope="scope">{{ scope.row.rank }}</template>
</el-table-column>
<el-table-column align="center" label="售价(元)" width="100px">
<template slot-scope="scope">{{
scope.row.price | changeMoneyYuan
}}</template>
</el-table-column>
<el-table-column align="center" label="专题" width="100px">
<template slot-scope="scope">{{
scope.row.topicId | changeTopicValue(topicList)
}}</template>
</el-table-column>
<el-table-column align="center" label="总集数" width="100px">
<template slot-scope="scope">{{ scope.row.mediaCount }}</template>
</el-table-column>
<el-table-column align="center" label="创建时间" width="160px">
<template slot-scope="scope">{{
scope.row.createdAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column align="center" label="更新时间" width="160px">
<template slot-scope="scope">{{
scope.row.updatedAt | BeiJingTime
}}</template>
</el-table-column>
<el-table-column
align="center"
fixed="right"
label="操作"
width="350"
>
<template slot-scope="scope">
<el-button
@click="handleEdit(scope.row)"
size="mini"
type="primary"
>编辑</el-button
>
<el-button
@click="showMediaList(scope.$index, scope.row)"
size="mini"
type="primary"
>查看视频列表</el-button
>
<el-button
@click="handleDelete(scope.row)"
size="mini"
type="danger"
>删除</el-button
>
</template>
</el-table-column>
</el-table>
</el-col>
</el-row>
<div class="table-pagination">
<el-pagination
:current-page="searchData.pageNum"
:page-size="searchData.pageSize"
:page-sizes="[10, 20, 30, 50, 200]"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
layout="total, sizes, prev, pager, next, jumper"
/>
</div>
<!-- 新增及编辑 -->
<Edit
:mediatag="mediatag"
:data="editData"
v-if="editVisible"
:topicList="topicList"
@close="closeEdit"
/>
<MediaList :data="editData" @close="closeEdit" v-if="mediaListVisible" />
</div>
</template>
<script>
// 引入模块
import ShowImg from "@/components/ShowImg/index.vue";
import Edit from "./components/AddOrEdit";
import MediaList from "./components/mediaList";
import {
shortDramaSearch,
shortDramaDel,
} from "@/api/videoManagement/shortDrama";
import { MediaSatusList } from "@/filters/videoManagement/videoList";
import ShowVideo from "@/components/ShowVideo/index.vue";
import { topicSearch } from "@/api/videoManagement/topic";
export default {
name: "ShortMedia",
components: {
Edit,
ShowImg,
ShowVideo,
MediaList,
},
data() {
return {
mediatag: [],
topicList: [], // 主题列表
MediaSatusList: MediaSatusList(),
// MediacolumnList: [],
// 请求列表参数
searchData: {
id: undefined, // 0,视频Id
dramaId: undefined,
title: undefined,
status: undefined,
topicId: undefined,
pageNum:1,
pageSize:10,
},
resData: [], // el-table表格数据
total: 0, // 数据总条数
loading: true, // 列表加载状态
editData: {
title: "新增",
data: {},
},
editVisible: false,
batchVisible: false,
mediaListVisible: false,
videoList: [],
selectBatch: [],
};
},
filters: {
changeTopicValue(val, list) {
let a = "暂无";
if (list && list.length) {
list.map((item) => {
if (item.id === val) {
a = item.name;
}
});
}
return a;
},
},
mounted() {
this.getTopicSearch();
this.getshortDramaSearch();
},
methods: {
// 查询专题列表
async getTopicSearch() {
const res = await topicSearch({
showType: 10, // 显示方式为剧集的专题
pageNum: 1,
pageSize: 9999,
});
if (res.code === 200) {
this.topicList = res.data.list;
} else {
this.$message.error("请求列表失败!");
}
},
// 查看视频列表
showMediaList(index, row) {
this.mediaListVisible = true;
this.editData = {
title: "视频列表",
data: row,
};
},
getSizeToMB(val) {
return (val / 1024 / 1024).toFixed(2);
},
// 批量选择
handleSelectionChange(val) {
this.selectBatch = val;
},
// 批量加入后台视频库按钮
addVideoArray() {
this.addVideoVisible = true;
},
// // 一键同步
// onSynch() {
// mediaSync().then((res) => {
// if (res.code === 200) {
// this.$message.success('同步成功!')
// } else {
// this.$message.error(res.data)
// }
// })
// },
// TODO:请求视频列表数据
getshortDramaSearch() {
this.loading = true;
let param = JSON.parse(JSON.stringify(this.searchData));
shortDramaSearch(param).then((res) => {
if (res.code === 200) {
if (res.data.list && res.data.list.length) {
res.data.list.forEach((item) => {
item.actor ? (item.actor = item.actor.split(",")) : "";
});
this.resData = res.data.list;
this.total = res.data.total;
} else {
this.resData = [];
this.total = 0;
}
} else {
this.$message.error("请求列表失败!");
this.resData = [];
this.total = 0;
}
this.loading = false;
});
},
//TODO:删除视频列表数据
handleDelete(row) {
this.$confirm("确定删除?", "警告", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
}).then(() => {
shortDramaDel({ id: row.id }).then((res) => {
if (res.code === 200) {
this.getshortDramaSearch();
this.$message.success("成功删除!");
} else {
this.$message.error(res.tip);
}
});
});
},
// 批量设置
batch() {
this.batchVisible = true;
},
setTag() {
this.setTagVisible = true;
},
onSeach() {
this.searchData.pageNum = 1;
this.searchData.pageSize = 10;
this.getshortDramaSearch();
},
// 切换每页数据量
handleSizeChange(val) {
this.searchData.pageSize = val;
this.getshortDramaSearch();
},
// 切换页数
handleCurrentChange(val) {
this.searchData.pageNum = val;
this.getshortDramaSearch();
},
// 新增按钮
add() {
this.editVisible = true;
this.editData = {
title: "新增",
data: {},
};
},
// 编辑按钮
handleEdit(row) {
this.editVisible = true;
this.editData = {
title: "编辑",
data: row,
};
},
// 关闭编辑弹窗
closeEdit() {
this.batchVisible = false;
this.editVisible = false;
this.setTagVisible = false;
this.addVideoVisible = false;
this.mediaListVisible = false;
this.getshortDramaSearch();
},
// 清空某一项筛选列表
onClear(key) {
this.searchData[key] = undefined;
this.getshortDramaSearch();
},
// 视频查看
checkMedia(url, data) {
this.$refs.showvideo.open(url, data, data.id);
},
},
};
</script>